From 0668b0cd9032873660c8c16163f09567de526982 Mon Sep 17 00:00:00 2001 From: Brandon Hook Date: Thu, 10 Feb 2022 23:13:13 +0000 Subject: [PATCH] Change Three and Babylon Imports to be a Versioned CDN --- dist/host.babylon.js | 2 +- dist/host.core.js | 2 +- dist/host.three.js | 2 +- examples/babylon.html | 4 +- examples/three.html | 6 +- package-lock.json | 11942 +++++++++++++++- package.json | 4 +- .../Babylon.js/babylon.animation.html | 6 +- .../Babylon.js/babylon.texttospeech.html | 4 +- .../three.js/three.animation.html | 10 +- .../three.js/three.texttospeech.html | 6 +- 11 files changed, 11595 insertions(+), 393 deletions(-) diff --git a/dist/host.babylon.js b/dist/host.babylon.js index 6eaa9a1..abbfa69 100644 --- a/dist/host.babylon.js +++ b/dist/host.babylon.js @@ -2,4 +2,4 @@ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. * SPDX-License-Identifier: MIT-0 */ -!function(e,n){"object"==typeof exports&&"object"==typeof module?module.exports=n():"function"==typeof define&&define.amd?define("HOST",[],n):"object"==typeof exports?exports.HOST=n():e.HOST=n()}("undefined"!=typeof self?self:"undefined"!=typeof global?global:this,(function(){return function(e){var n={};function t(B){if(n[B])return n[B].exports;var a=n[B]={i:B,l:!1,exports:{}};return e[B].call(a.exports,a,a.exports,t),a.l=!0,a.exports}return t.m=e,t.c=n,t.d=function(e,n,B){t.o(e,n)||Object.defineProperty(e,n,{enumerable:!0,get:B})},t.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},t.t=function(e,n){if(1&n&&(e=t(e)),8&n)return e;if(4&n&&"object"==typeof e&&e&&e.__esModule)return e;var B=Object.create(null);if(t.r(B),Object.defineProperty(B,"default",{enumerable:!0,value:e}),2&n&&"string"!=typeof e)for(var a in e)t.d(B,a,function(n){return e[n]}.bind(null,a));return B},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},t.p="",t(t.s=130)}([function(module,exports,__webpack_require__){eval("var global = __webpack_require__(2);\nvar core = __webpack_require__(18);\nvar hide = __webpack_require__(11);\nvar redefine = __webpack_require__(12);\nvar ctx = __webpack_require__(19);\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n var IS_FORCED = type & $export.F;\n var IS_GLOBAL = type & $export.G;\n var IS_STATIC = type & $export.S;\n var IS_PROTO = type & $export.P;\n var IS_BIND = type & $export.B;\n var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE];\n var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});\n var key, own, out, exp;\n if (IS_GLOBAL) source = name;\n for (key in source) {\n // contains in native\n own = !IS_FORCED && target && target[key] !== undefined;\n // export native or passed\n out = (own ? target : source)[key];\n // bind timers to global for call from export context\n exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n // extend global\n if (target) redefine(target, key, out, type & $export.U);\n // export\n if (exports[key] != out) hide(exports, key, exp);\n if (IS_PROTO && expProto[key] != out) expProto[key] = out;\n }\n};\nglobal.core = core;\n// type bitmap\n$export.F = 1; // forced\n$export.G = 2; // global\n$export.S = 4; // static\n$export.P = 8; // proto\n$export.B = 16; // bind\n$export.W = 32; // wrap\n$export.U = 64; // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZXhwb3J0LmpzPzVjYTEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsYUFBYSxtQkFBTyxDQUFDLENBQVc7QUFDaEMsV0FBVyxtQkFBTyxDQUFDLEVBQVM7QUFDNUIsV0FBVyxtQkFBTyxDQUFDLEVBQVM7QUFDNUIsZUFBZSxtQkFBTyxDQUFDLEVBQWE7QUFDcEMsVUFBVSxtQkFBTyxDQUFDLEVBQVE7QUFDMUI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0ZBQWtGLHVCQUF1QjtBQUN6RyxpRUFBaUU7QUFDakUsK0RBQStEO0FBQy9EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZCxjQUFjO0FBQ2QsY0FBYztBQUNkLGNBQWM7QUFDZCxlQUFlO0FBQ2YsZUFBZTtBQUNmLGVBQWU7QUFDZixnQkFBZ0I7QUFDaEIiLCJmaWxlIjoiMC5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xuXG52YXIgJGV4cG9ydCA9IGZ1bmN0aW9uICh0eXBlLCBuYW1lLCBzb3VyY2UpIHtcbiAgdmFyIElTX0ZPUkNFRCA9IHR5cGUgJiAkZXhwb3J0LkY7XG4gIHZhciBJU19HTE9CQUwgPSB0eXBlICYgJGV4cG9ydC5HO1xuICB2YXIgSVNfU1RBVElDID0gdHlwZSAmICRleHBvcnQuUztcbiAgdmFyIElTX1BST1RPID0gdHlwZSAmICRleHBvcnQuUDtcbiAgdmFyIElTX0JJTkQgPSB0eXBlICYgJGV4cG9ydC5CO1xuICB2YXIgdGFyZ2V0ID0gSVNfR0xPQkFMID8gZ2xvYmFsIDogSVNfU1RBVElDID8gZ2xvYmFsW25hbWVdIHx8IChnbG9iYWxbbmFtZV0gPSB7fSkgOiAoZ2xvYmFsW25hbWVdIHx8IHt9KVtQUk9UT1RZUEVdO1xuICB2YXIgZXhwb3J0cyA9IElTX0dMT0JBTCA/IGNvcmUgOiBjb3JlW25hbWVdIHx8IChjb3JlW25hbWVdID0ge30pO1xuICB2YXIgZXhwUHJvdG8gPSBleHBvcnRzW1BST1RPVFlQRV0gfHwgKGV4cG9ydHNbUFJPVE9UWVBFXSA9IHt9KTtcbiAgdmFyIGtleSwgb3duLCBvdXQsIGV4cDtcbiAgaWYgKElTX0dMT0JBTCkgc291cmNlID0gbmFtZTtcbiAgZm9yIChrZXkgaW4gc291cmNlKSB7XG4gICAgLy8gY29udGFpbnMgaW4gbmF0aXZlXG4gICAgb3duID0gIUlTX0ZPUkNFRCAmJiB0YXJnZXQgJiYgdGFyZ2V0W2tleV0gIT09IHVuZGVmaW5lZDtcbiAgICAvLyBleHBvcnQgbmF0aXZlIG9yIHBhc3NlZFxuICAgIG91dCA9IChvd24gPyB0YXJnZXQgOiBzb3VyY2UpW2tleV07XG4gICAgLy8gYmluZCB0aW1lcnMgdG8gZ2xvYmFsIGZvciBjYWxsIGZyb20gZXhwb3J0IGNvbnRleHRcbiAgICBleHAgPSBJU19CSU5EICYmIG93biA/IGN0eChvdXQsIGdsb2JhbCkgOiBJU19QUk9UTyAmJiB0eXBlb2Ygb3V0ID09ICdmdW5jdGlvbicgPyBjdHgoRnVuY3Rpb24uY2FsbCwgb3V0KSA6IG91dDtcbiAgICAvLyBleHRlbmQgZ2xvYmFsXG4gICAgaWYgKHRhcmdldCkgcmVkZWZpbmUodGFyZ2V0LCBrZXksIG91dCwgdHlwZSAmICRleHBvcnQuVSk7XG4gICAgLy8gZXhwb3J0XG4gICAgaWYgKGV4cG9ydHNba2V5XSAhPSBvdXQpIGhpZGUoZXhwb3J0cywga2V5LCBleHApO1xuICAgIGlmIChJU19QUk9UTyAmJiBleHBQcm90b1trZXldICE9IG91dCkgZXhwUHJvdG9ba2V5XSA9IG91dDtcbiAgfVxufTtcbmdsb2JhbC5jb3JlID0gY29yZTtcbi8vIHR5cGUgYml0bWFwXG4kZXhwb3J0LkYgPSAxOyAgIC8vIGZvcmNlZFxuJGV4cG9ydC5HID0gMjsgICAvLyBnbG9iYWxcbiRleHBvcnQuUyA9IDQ7ICAgLy8gc3RhdGljXG4kZXhwb3J0LlAgPSA4OyAgIC8vIHByb3RvXG4kZXhwb3J0LkIgPSAxNjsgIC8vIGJpbmRcbiRleHBvcnQuVyA9IDMyOyAgLy8gd3JhcFxuJGV4cG9ydC5VID0gNjQ7ICAvLyBzYWZlXG4kZXhwb3J0LlIgPSAxMjg7IC8vIHJlYWwgcHJvdG8gbWV0aG9kIGZvciBgbGlicmFyeWBcbm1vZHVsZS5leHBvcnRzID0gJGV4cG9ydDtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///0\n")},function(module,exports,__webpack_require__){eval("var isObject = __webpack_require__(4);\nmodule.exports = function (it) {\n if (!isObject(it)) throw TypeError(it + ' is not an object!');\n return it;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYW4tb2JqZWN0LmpzP2NiN2MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckM7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMS5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKCFpc09iamVjdChpdCkpIHRocm93IFR5cGVFcnJvcihpdCArICcgaXMgbm90IGFuIG9iamVjdCEnKTtcbiAgcmV0dXJuIGl0O1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///1\n")},function(module,exports){eval("// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n ? window : typeof self != 'undefined' && self.Math == Math ? self\n // eslint-disable-next-line no-new-func\n : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZ2xvYmFsLmpzPzc3MjYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlDQUF5QyIsImZpbGUiOiIyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzg2I2lzc3VlY29tbWVudC0xMTU3NTkwMjhcbnZhciBnbG9iYWwgPSBtb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiB3aW5kb3cgIT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93Lk1hdGggPT0gTWF0aFxuICA/IHdpbmRvdyA6IHR5cGVvZiBzZWxmICE9ICd1bmRlZmluZWQnICYmIHNlbGYuTWF0aCA9PSBNYXRoID8gc2VsZlxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmNcbiAgOiBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuaWYgKHR5cGVvZiBfX2cgPT0gJ251bWJlcicpIF9fZyA9IGdsb2JhbDsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bmRlZlxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2\n")},function(module,exports){eval("module.exports = function (exec) {\n try {\n return !!exec();\n } catch (e) {\n return true;\n }\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZmFpbHMuanM/NzllNSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBIiwiZmlsZSI6IjMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICEhZXhlYygpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///3\n")},function(module,exports){eval("module.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtb2JqZWN0LmpzP2QzZjQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBIiwiZmlsZSI6IjQuanMiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09PSAnb2JqZWN0JyA/IGl0ICE9PSBudWxsIDogdHlwZW9mIGl0ID09PSAnZnVuY3Rpb24nO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4\n")},function(module,exports,__webpack_require__){eval("var store = __webpack_require__(47)('wks');\nvar uid = __webpack_require__(33);\nvar Symbol = __webpack_require__(2).Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n return store[name] || (store[name] =\n USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fd2tzLmpzPzJiNGMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSxtQkFBTyxDQUFDLEVBQVc7QUFDL0IsVUFBVSxtQkFBTyxDQUFDLEVBQVE7QUFDMUIsYUFBYSxtQkFBTyxDQUFDLENBQVc7QUFDaEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiNS5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBzdG9yZSA9IHJlcXVpcmUoJy4vX3NoYXJlZCcpKCd3a3MnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuL191aWQnKTtcbnZhciBTeW1ib2wgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5TeW1ib2w7XG52YXIgVVNFX1NZTUJPTCA9IHR5cGVvZiBTeW1ib2wgPT0gJ2Z1bmN0aW9uJztcblxudmFyICRleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZSkge1xuICByZXR1cm4gc3RvcmVbbmFtZV0gfHwgKHN0b3JlW25hbWVdID1cbiAgICBVU0VfU1lNQk9MICYmIFN5bWJvbFtuYW1lXSB8fCAoVVNFX1NZTUJPTCA/IFN5bWJvbCA6IHVpZCkoJ1N5bWJvbC4nICsgbmFtZSkpO1xufTtcblxuJGV4cG9ydHMuc3RvcmUgPSBzdG9yZTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///5\n")},function(module,exports,__webpack_require__){eval("// 7.1.15 ToLength\nvar toInteger = __webpack_require__(21);\nvar min = Math.min;\nmodule.exports = function (it) {\n return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8tbGVuZ3RoLmpzPzlkZWYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDO0FBQ0E7QUFDQSwyREFBMkQ7QUFDM0QiLCJmaWxlIjoiNi5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDcuMS4xNSBUb0xlbmd0aFxudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciBtaW4gPSBNYXRoLm1pbjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCA+IDAgPyBtaW4odG9JbnRlZ2VyKGl0KSwgMHgxZmZmZmZmZmZmZmZmZikgOiAwOyAvLyBwb3coMiwgNTMpIC0gMSA9PSA5MDA3MTk5MjU0NzQwOTkxXG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///6\n")},function(module,exports,__webpack_require__){eval("// Thank's IE8 for his funny defineProperty\nmodule.exports = !__webpack_require__(3)(function () {\n return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZGVzY3JpcHRvcnMuanM/OWUxZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGtCQUFrQixtQkFBTyxDQUFDLENBQVU7QUFDcEMsaUNBQWlDLFFBQVEsbUJBQW1CLFVBQVUsRUFBRSxFQUFFO0FBQzFFLENBQUMiLCJmaWxlIjoiNy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIFRoYW5rJ3MgSUU4IGZvciBoaXMgZnVubnkgZGVmaW5lUHJvcGVydHlcbm1vZHVsZS5leHBvcnRzID0gIXJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAnYScsIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9IH0pLmEgIT0gNztcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7\n")},function(module,exports,__webpack_require__){eval("var anObject = __webpack_require__(1);\nvar IE8_DOM_DEFINE = __webpack_require__(94);\nvar toPrimitive = __webpack_require__(23);\nvar dP = Object.defineProperty;\n\nexports.f = __webpack_require__(7) ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return dP(O, P, Attributes);\n } catch (e) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWRwLmpzPzg2Y2MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMscUJBQXFCLG1CQUFPLENBQUMsRUFBbUI7QUFDaEQsa0JBQWtCLG1CQUFPLENBQUMsRUFBaUI7QUFDM0M7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLENBQWdCO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHLFlBQVk7QUFDZjtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiI4LmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuL19pZTgtZG9tLWRlZmluZScpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG52YXIgZFAgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG5cbmV4cG9ydHMuZiA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICBQID0gdG9QcmltaXRpdmUoUCwgdHJ1ZSk7XG4gIGFuT2JqZWN0KEF0dHJpYnV0ZXMpO1xuICBpZiAoSUU4X0RPTV9ERUZJTkUpIHRyeSB7XG4gICAgcmV0dXJuIGRQKE8sIFAsIEF0dHJpYnV0ZXMpO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKCdnZXQnIGluIEF0dHJpYnV0ZXMgfHwgJ3NldCcgaW4gQXR0cmlidXRlcykgdGhyb3cgVHlwZUVycm9yKCdBY2Nlc3NvcnMgbm90IHN1cHBvcnRlZCEnKTtcbiAgaWYgKCd2YWx1ZScgaW4gQXR0cmlidXRlcykgT1tQXSA9IEF0dHJpYnV0ZXMudmFsdWU7XG4gIHJldHVybiBPO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///8\n")},function(module,exports,__webpack_require__){eval("// 7.1.13 ToObject(argument)\nvar defined = __webpack_require__(24);\nmodule.exports = function (it) {\n return Object(defined(it));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8tb2JqZWN0LmpzPzRiZjgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsRUFBWTtBQUNsQztBQUNBO0FBQ0EiLCJmaWxlIjoiOS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDcuMS4xMyBUb09iamVjdChhcmd1bWVudClcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIE9iamVjdChkZWZpbmVkKGl0KSk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9\n")},function(module,exports){eval("module.exports = function (it) {\n if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n return it;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYS1mdW5jdGlvbi5qcz9kOGU4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjEwLmpzIiwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKHR5cGVvZiBpdCAhPSAnZnVuY3Rpb24nKSB0aHJvdyBUeXBlRXJyb3IoaXQgKyAnIGlzIG5vdCBhIGZ1bmN0aW9uIScpO1xuICByZXR1cm4gaXQ7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///10\n")},function(module,exports,__webpack_require__){eval("var dP = __webpack_require__(8);\nvar createDesc = __webpack_require__(32);\nmodule.exports = __webpack_require__(7) ? function (object, key, value) {\n return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faGlkZS5qcz8zMmU5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFNBQVMsbUJBQU8sQ0FBQyxDQUFjO0FBQy9CLGlCQUFpQixtQkFBTyxDQUFDLEVBQWtCO0FBQzNDLGlCQUFpQixtQkFBTyxDQUFDLENBQWdCO0FBQ3pDO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSIsImZpbGUiOiIxMS5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xudmFyIGNyZWF0ZURlc2MgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIHJldHVybiBkUC5mKG9iamVjdCwga2V5LCBjcmVhdGVEZXNjKDEsIHZhbHVlKSk7XG59IDogZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICBvYmplY3Rba2V5XSA9IHZhbHVlO1xuICByZXR1cm4gb2JqZWN0O1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///11\n")},function(module,exports,__webpack_require__){eval("var global = __webpack_require__(2);\nvar hide = __webpack_require__(11);\nvar has = __webpack_require__(14);\nvar SRC = __webpack_require__(33)('src');\nvar $toString = __webpack_require__(134);\nvar TO_STRING = 'toString';\nvar TPL = ('' + $toString).split(TO_STRING);\n\n__webpack_require__(18).inspectSource = function (it) {\n return $toString.call(it);\n};\n\n(module.exports = function (O, key, val, safe) {\n var isFunction = typeof val == 'function';\n if (isFunction) has(val, 'name') || hide(val, 'name', key);\n if (O[key] === val) return;\n if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));\n if (O === global) {\n O[key] = val;\n } else if (!safe) {\n delete O[key];\n hide(O, key, val);\n } else if (O[key]) {\n O[key] = val;\n } else {\n hide(O, key, val);\n }\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, TO_STRING, function toString() {\n return typeof this == 'function' && this[SRC] || $toString.call(this);\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcmVkZWZpbmUuanM/MmFiYSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxhQUFhLG1CQUFPLENBQUMsQ0FBVztBQUNoQyxXQUFXLG1CQUFPLENBQUMsRUFBUztBQUM1QixVQUFVLG1CQUFPLENBQUMsRUFBUTtBQUMxQixVQUFVLG1CQUFPLENBQUMsRUFBUTtBQUMxQixnQkFBZ0IsbUJBQU8sQ0FBQyxHQUF1QjtBQUMvQztBQUNBOztBQUVBLG1CQUFPLENBQUMsRUFBUztBQUNqQjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0EsQ0FBQyIsImZpbGUiOiIxMi5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIFNSQyA9IHJlcXVpcmUoJy4vX3VpZCcpKCdzcmMnKTtcbnZhciAkdG9TdHJpbmcgPSByZXF1aXJlKCcuL19mdW5jdGlvbi10by1zdHJpbmcnKTtcbnZhciBUT19TVFJJTkcgPSAndG9TdHJpbmcnO1xudmFyIFRQTCA9ICgnJyArICR0b1N0cmluZykuc3BsaXQoVE9fU1RSSU5HKTtcblxucmVxdWlyZSgnLi9fY29yZScpLmluc3BlY3RTb3VyY2UgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuICR0b1N0cmluZy5jYWxsKGl0KTtcbn07XG5cbihtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBrZXksIHZhbCwgc2FmZSkge1xuICB2YXIgaXNGdW5jdGlvbiA9IHR5cGVvZiB2YWwgPT0gJ2Z1bmN0aW9uJztcbiAgaWYgKGlzRnVuY3Rpb24pIGhhcyh2YWwsICduYW1lJykgfHwgaGlkZSh2YWwsICduYW1lJywga2V5KTtcbiAgaWYgKE9ba2V5XSA9PT0gdmFsKSByZXR1cm47XG4gIGlmIChpc0Z1bmN0aW9uKSBoYXModmFsLCBTUkMpIHx8IGhpZGUodmFsLCBTUkMsIE9ba2V5XSA/ICcnICsgT1trZXldIDogVFBMLmpvaW4oU3RyaW5nKGtleSkpKTtcbiAgaWYgKE8gPT09IGdsb2JhbCkge1xuICAgIE9ba2V5XSA9IHZhbDtcbiAgfSBlbHNlIGlmICghc2FmZSkge1xuICAgIGRlbGV0ZSBPW2tleV07XG4gICAgaGlkZShPLCBrZXksIHZhbCk7XG4gIH0gZWxzZSBpZiAoT1trZXldKSB7XG4gICAgT1trZXldID0gdmFsO1xuICB9IGVsc2Uge1xuICAgIGhpZGUoTywga2V5LCB2YWwpO1xuICB9XG4vLyBhZGQgZmFrZSBGdW5jdGlvbiN0b1N0cmluZyBmb3IgY29ycmVjdCB3b3JrIHdyYXBwZWQgbWV0aG9kcyAvIGNvbnN0cnVjdG9ycyB3aXRoIG1ldGhvZHMgbGlrZSBMb0Rhc2ggaXNOYXRpdmVcbn0pKEZ1bmN0aW9uLnByb3RvdHlwZSwgVE9fU1RSSU5HLCBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgcmV0dXJuIHR5cGVvZiB0aGlzID09ICdmdW5jdGlvbicgJiYgdGhpc1tTUkNdIHx8ICR0b1N0cmluZy5jYWxsKHRoaXMpO1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///12\n")},function(module,exports,__webpack_require__){eval("var $export = __webpack_require__(0);\nvar fails = __webpack_require__(3);\nvar defined = __webpack_require__(24);\nvar quot = /\"/g;\n// B.2.3.2.1 CreateHTML(string, tag, attribute, value)\nvar createHTML = function (string, tag, attribute, value) {\n var S = String(defined(string));\n var p1 = '<' + tag;\n if (attribute !== '') p1 += ' ' + attribute + '=\"' + String(value).replace(quot, '"') + '\"';\n return p1 + '>' + S + '';\n};\nmodule.exports = function (NAME, exec) {\n var O = {};\n O[NAME] = exec(createHTML);\n $export($export.P + $export.F * fails(function () {\n var test = ''[NAME]('\"');\n return test !== test.toLowerCase() || test.split('\"').length > 3;\n }), 'String', O);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLWh0bWwuanM/Mzg2YiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxZQUFZLG1CQUFPLENBQUMsQ0FBVTtBQUM5QixjQUFjLG1CQUFPLENBQUMsRUFBWTtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEZBQTBGO0FBQzFGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0giLCJmaWxlIjoiMTMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xudmFyIHF1b3QgPSAvXCIvZztcbi8vIEIuMi4zLjIuMSBDcmVhdGVIVE1MKHN0cmluZywgdGFnLCBhdHRyaWJ1dGUsIHZhbHVlKVxudmFyIGNyZWF0ZUhUTUwgPSBmdW5jdGlvbiAoc3RyaW5nLCB0YWcsIGF0dHJpYnV0ZSwgdmFsdWUpIHtcbiAgdmFyIFMgPSBTdHJpbmcoZGVmaW5lZChzdHJpbmcpKTtcbiAgdmFyIHAxID0gJzwnICsgdGFnO1xuICBpZiAoYXR0cmlidXRlICE9PSAnJykgcDEgKz0gJyAnICsgYXR0cmlidXRlICsgJz1cIicgKyBTdHJpbmcodmFsdWUpLnJlcGxhY2UocXVvdCwgJyZxdW90OycpICsgJ1wiJztcbiAgcmV0dXJuIHAxICsgJz4nICsgUyArICc8LycgKyB0YWcgKyAnPic7XG59O1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTkFNRSwgZXhlYykge1xuICB2YXIgTyA9IHt9O1xuICBPW05BTUVdID0gZXhlYyhjcmVhdGVIVE1MKTtcbiAgJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHRlc3QgPSAnJ1tOQU1FXSgnXCInKTtcbiAgICByZXR1cm4gdGVzdCAhPT0gdGVzdC50b0xvd2VyQ2FzZSgpIHx8IHRlc3Quc3BsaXQoJ1wiJykubGVuZ3RoID4gMztcbiAgfSksICdTdHJpbmcnLCBPKTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///13\n")},function(module,exports){eval("var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faGFzLmpzPzY5YTgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdUJBQXVCO0FBQ3ZCO0FBQ0E7QUFDQSIsImZpbGUiOiIxNC5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBoYXNPd25Qcm9wZXJ0eSA9IHt9Lmhhc093blByb3BlcnR5O1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIGtleSkge1xuICByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbChpdCwga2V5KTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///14\n")},function(module,exports,__webpack_require__){eval("// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = __webpack_require__(48);\nvar defined = __webpack_require__(24);\nmodule.exports = function (it) {\n return IObject(defined(it));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8taW9iamVjdC5qcz82ODIxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLEVBQVk7QUFDbEMsY0FBYyxtQkFBTyxDQUFDLEVBQVk7QUFDbEM7QUFDQTtBQUNBIiwiZmlsZSI6IjE1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gdG8gaW5kZXhlZCBvYmplY3QsIHRvT2JqZWN0IHdpdGggZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBzdHJpbmdzXG52YXIgSU9iamVjdCA9IHJlcXVpcmUoJy4vX2lvYmplY3QnKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIElPYmplY3QoZGVmaW5lZChpdCkpO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///15\n")},function(module,exports,__webpack_require__){eval("var pIE = __webpack_require__(49);\nvar createDesc = __webpack_require__(32);\nvar toIObject = __webpack_require__(15);\nvar toPrimitive = __webpack_require__(23);\nvar has = __webpack_require__(14);\nvar IE8_DOM_DEFINE = __webpack_require__(94);\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nexports.f = __webpack_require__(7) ? gOPD : function getOwnPropertyDescriptor(O, P) {\n O = toIObject(O);\n P = toPrimitive(P, true);\n if (IE8_DOM_DEFINE) try {\n return gOPD(O, P);\n } catch (e) { /* empty */ }\n if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdvcGQuanM/MTFlOSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxVQUFVLG1CQUFPLENBQUMsRUFBZTtBQUNqQyxpQkFBaUIsbUJBQU8sQ0FBQyxFQUFrQjtBQUMzQyxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDLGtCQUFrQixtQkFBTyxDQUFDLEVBQWlCO0FBQzNDLFVBQVUsbUJBQU8sQ0FBQyxFQUFRO0FBQzFCLHFCQUFxQixtQkFBTyxDQUFDLEVBQW1CO0FBQ2hEOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxDQUFnQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUcsWUFBWTtBQUNmO0FBQ0EiLCJmaWxlIjoiMTYuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgcElFID0gcmVxdWlyZSgnLi9fb2JqZWN0LXBpZScpO1xudmFyIGNyZWF0ZURlc2MgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuL19pZTgtZG9tLWRlZmluZScpO1xudmFyIGdPUEQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG5leHBvcnRzLmYgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gZ09QRCA6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKSB7XG4gIE8gPSB0b0lPYmplY3QoTyk7XG4gIFAgPSB0b1ByaW1pdGl2ZShQLCB0cnVlKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiBnT1BEKE8sIFApO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKGhhcyhPLCBQKSkgcmV0dXJuIGNyZWF0ZURlc2MoIXBJRS5mLmNhbGwoTywgUCksIE9bUF0pO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///16\n")},function(module,exports,__webpack_require__){eval("// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = __webpack_require__(14);\nvar toObject = __webpack_require__(9);\nvar IE_PROTO = __webpack_require__(68)('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n O = toObject(O);\n if (has(O, IE_PROTO)) return O[IE_PROTO];\n if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n return O.constructor.prototype;\n } return O instanceof Object ? ObjectProto : null;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdwby5qcz8zOGZkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsVUFBVSxtQkFBTyxDQUFDLEVBQVE7QUFDMUIsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZUFBZSxtQkFBTyxDQUFDLEVBQWU7QUFDdEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCIsImZpbGUiOiIxNy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDE5LjEuMi45IC8gMTUuMi4zLjIgT2JqZWN0LmdldFByb3RvdHlwZU9mKE8pXG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciBJRV9QUk9UTyA9IHJlcXVpcmUoJy4vX3NoYXJlZC1rZXknKSgnSUVfUFJPVE8nKTtcbnZhciBPYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmdldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIChPKSB7XG4gIE8gPSB0b09iamVjdChPKTtcbiAgaWYgKGhhcyhPLCBJRV9QUk9UTykpIHJldHVybiBPW0lFX1BST1RPXTtcbiAgaWYgKHR5cGVvZiBPLmNvbnN0cnVjdG9yID09ICdmdW5jdGlvbicgJiYgTyBpbnN0YW5jZW9mIE8uY29uc3RydWN0b3IpIHtcbiAgICByZXR1cm4gTy5jb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG4gIH0gcmV0dXJuIE8gaW5zdGFuY2VvZiBPYmplY3QgPyBPYmplY3RQcm90byA6IG51bGw7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///17\n")},function(module,exports){eval("var core = module.exports = { version: '2.6.12' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY29yZS5qcz84Mzc4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDZCQUE2QjtBQUM3Qix1Q0FBdUMiLCJmaWxlIjoiMTguanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgY29yZSA9IG1vZHVsZS5leHBvcnRzID0geyB2ZXJzaW9uOiAnMi42LjEyJyB9O1xuaWYgKHR5cGVvZiBfX2UgPT0gJ251bWJlcicpIF9fZSA9IGNvcmU7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///18\n")},function(module,exports,__webpack_require__){eval("// optional / simple context binding\nvar aFunction = __webpack_require__(10);\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY3R4LmpzPzliNDMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIxOS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIG9wdGlvbmFsIC8gc2ltcGxlIGNvbnRleHQgYmluZGluZ1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGZuLCB0aGF0LCBsZW5ndGgpIHtcbiAgYUZ1bmN0aW9uKGZuKTtcbiAgaWYgKHRoYXQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGZuO1xuICBzd2l0Y2ggKGxlbmd0aCkge1xuICAgIGNhc2UgMTogcmV0dXJuIGZ1bmN0aW9uIChhKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhKTtcbiAgICB9O1xuICAgIGNhc2UgMjogcmV0dXJuIGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhLCBiKTtcbiAgICB9O1xuICAgIGNhc2UgMzogcmV0dXJuIGZ1bmN0aW9uIChhLCBiLCBjKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhLCBiLCBjKTtcbiAgICB9O1xuICB9XG4gIHJldHVybiBmdW5jdGlvbiAoLyogLi4uYXJncyAqLykge1xuICAgIHJldHVybiBmbi5hcHBseSh0aGF0LCBhcmd1bWVudHMpO1xuICB9O1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///19\n")},function(module,exports){eval("var toString = {}.toString;\n\nmodule.exports = function (it) {\n return toString.call(it).slice(8, -1);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY29mLmpzPzJkOTUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsaUJBQWlCOztBQUVqQjtBQUNBO0FBQ0EiLCJmaWxlIjoiMjAuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgdG9TdHJpbmcgPSB7fS50b1N0cmluZztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwoaXQpLnNsaWNlKDgsIC0xKTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///20\n")},function(module,exports){eval("// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8taW50ZWdlci5qcz80NTg4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIyMS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDcuMS40IFRvSW50ZWdlclxudmFyIGNlaWwgPSBNYXRoLmNlaWw7XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGlzTmFOKGl0ID0gK2l0KSA/IDAgOiAoaXQgPiAwID8gZmxvb3IgOiBjZWlsKShpdCk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///21\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar fails = __webpack_require__(3);\n\nmodule.exports = function (method, arg) {\n return !!method && fails(function () {\n // eslint-disable-next-line no-useless-call\n arg ? method.call(null, function () { /* empty */ }, 1) : method.call(null);\n });\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaWN0LW1ldGhvZC5qcz8yZjIxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsWUFBWSxtQkFBTyxDQUFDLENBQVU7O0FBRTlCO0FBQ0E7QUFDQTtBQUNBLHlDQUF5QyxjQUFjO0FBQ3ZELEdBQUc7QUFDSCIsImZpbGUiOiIyMi5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG1ldGhvZCwgYXJnKSB7XG4gIHJldHVybiAhIW1ldGhvZCAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZWxlc3MtY2FsbFxuICAgIGFyZyA/IG1ldGhvZC5jYWxsKG51bGwsIGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSwgMSkgOiBtZXRob2QuY2FsbChudWxsKTtcbiAgfSk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///22\n")},function(module,exports,__webpack_require__){eval("// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = __webpack_require__(4);\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n if (!isObject(it)) return it;\n var fn, val;\n if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8tcHJpbWl0aXZlLmpzPzZhOTkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIyMy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDcuMS4xIFRvUHJpbWl0aXZlKGlucHV0IFssIFByZWZlcnJlZFR5cGVdKVxudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG4vLyBpbnN0ZWFkIG9mIHRoZSBFUzYgc3BlYyB2ZXJzaW9uLCB3ZSBkaWRuJ3QgaW1wbGVtZW50IEBAdG9QcmltaXRpdmUgY2FzZVxuLy8gYW5kIHRoZSBzZWNvbmQgYXJndW1lbnQgLSBmbGFnIC0gcHJlZmVycmVkIHR5cGUgaXMgYSBzdHJpbmdcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBTKSB7XG4gIGlmICghaXNPYmplY3QoaXQpKSByZXR1cm4gaXQ7XG4gIHZhciBmbiwgdmFsO1xuICBpZiAoUyAmJiB0eXBlb2YgKGZuID0gaXQudG9TdHJpbmcpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaXQpKSkgcmV0dXJuIHZhbDtcbiAgaWYgKHR5cGVvZiAoZm4gPSBpdC52YWx1ZU9mKSA9PSAnZnVuY3Rpb24nICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGl0KSkpIHJldHVybiB2YWw7XG4gIGlmICghUyAmJiB0eXBlb2YgKGZuID0gaXQudG9TdHJpbmcpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaXQpKSkgcmV0dXJuIHZhbDtcbiAgdGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///23\n")},function(module,exports){eval('// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError("Can\'t call method on " + it);\n return it;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZGVmaW5lZC5qcz9iZTEzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMjQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyA3LjIuMSBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGFyZ3VtZW50KVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGl0ID09IHVuZGVmaW5lZCkgdGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gIFwiICsgaXQpO1xuICByZXR1cm4gaXQ7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///24\n')},function(module,exports,__webpack_require__){eval("// most Object methods by ES6 should accept primitives\nvar $export = __webpack_require__(0);\nvar core = __webpack_require__(18);\nvar fails = __webpack_require__(3);\nmodule.exports = function (KEY, exec) {\n var fn = (core.Object || {})[KEY] || Object[KEY];\n var exp = {};\n exp[KEY] = exec(fn);\n $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LXNhcC5qcz81ZWRhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsV0FBVyxtQkFBTyxDQUFDLEVBQVM7QUFDNUIsWUFBWSxtQkFBTyxDQUFDLENBQVU7QUFDOUI7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBLHFEQUFxRCxPQUFPLEVBQUU7QUFDOUQiLCJmaWxlIjoiMjUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBtb3N0IE9iamVjdCBtZXRob2RzIGJ5IEVTNiBzaG91bGQgYWNjZXB0IHByaW1pdGl2ZXNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgY29yZSA9IHJlcXVpcmUoJy4vX2NvcmUnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChLRVksIGV4ZWMpIHtcbiAgdmFyIGZuID0gKGNvcmUuT2JqZWN0IHx8IHt9KVtLRVldIHx8IE9iamVjdFtLRVldO1xuICB2YXIgZXhwID0ge307XG4gIGV4cFtLRVldID0gZXhlYyhmbik7XG4gICRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogZmFpbHMoZnVuY3Rpb24gKCkgeyBmbigxKTsgfSksICdPYmplY3QnLCBleHApO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///25\n")},function(module,exports,__webpack_require__){eval("// 0 -> Array#forEach\n// 1 -> Array#map\n// 2 -> Array#filter\n// 3 -> Array#some\n// 4 -> Array#every\n// 5 -> Array#find\n// 6 -> Array#findIndex\nvar ctx = __webpack_require__(19);\nvar IObject = __webpack_require__(48);\nvar toObject = __webpack_require__(9);\nvar toLength = __webpack_require__(6);\nvar asc = __webpack_require__(84);\nmodule.exports = function (TYPE, $create) {\n var IS_MAP = TYPE == 1;\n var IS_FILTER = TYPE == 2;\n var IS_SOME = TYPE == 3;\n var IS_EVERY = TYPE == 4;\n var IS_FIND_INDEX = TYPE == 6;\n var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n var create = $create || asc;\n return function ($this, callbackfn, that) {\n var O = toObject($this);\n var self = IObject(O);\n var f = ctx(callbackfn, that, 3);\n var length = toLength(self.length);\n var index = 0;\n var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;\n var val, res;\n for (;length > index; index++) if (NO_HOLES || index in self) {\n val = self[index];\n res = f(val, index, O);\n if (TYPE) {\n if (IS_MAP) result[index] = res; // map\n else if (res) switch (TYPE) {\n case 3: return true; // some\n case 5: return val; // find\n case 6: return index; // findIndex\n case 2: result.push(val); // filter\n } else if (IS_EVERY) return false; // every\n }\n }\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;\n };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktbWV0aG9kcy5qcz8wYTQ5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVSxtQkFBTyxDQUFDLEVBQVE7QUFDMUIsY0FBYyxtQkFBTyxDQUFDLEVBQVk7QUFDbEMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsVUFBVSxtQkFBTyxDQUFDLEVBQXlCO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVSxlQUFlO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBLHdDQUF3QztBQUN4QztBQUNBLDhCQUE4QjtBQUM5Qiw2QkFBNkI7QUFDN0IsK0JBQStCO0FBQy9CLG1DQUFtQztBQUNuQyxTQUFTLGlDQUFpQztBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjI2LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMCAtPiBBcnJheSNmb3JFYWNoXG4vLyAxIC0+IEFycmF5I21hcFxuLy8gMiAtPiBBcnJheSNmaWx0ZXJcbi8vIDMgLT4gQXJyYXkjc29tZVxuLy8gNCAtPiBBcnJheSNldmVyeVxuLy8gNSAtPiBBcnJheSNmaW5kXG4vLyA2IC0+IEFycmF5I2ZpbmRJbmRleFxudmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIElPYmplY3QgPSByZXF1aXJlKCcuL19pb2JqZWN0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGFzYyA9IHJlcXVpcmUoJy4vX2FycmF5LXNwZWNpZXMtY3JlYXRlJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChUWVBFLCAkY3JlYXRlKSB7XG4gIHZhciBJU19NQVAgPSBUWVBFID09IDE7XG4gIHZhciBJU19GSUxURVIgPSBUWVBFID09IDI7XG4gIHZhciBJU19TT01FID0gVFlQRSA9PSAzO1xuICB2YXIgSVNfRVZFUlkgPSBUWVBFID09IDQ7XG4gIHZhciBJU19GSU5EX0lOREVYID0gVFlQRSA9PSA2O1xuICB2YXIgTk9fSE9MRVMgPSBUWVBFID09IDUgfHwgSVNfRklORF9JTkRFWDtcbiAgdmFyIGNyZWF0ZSA9ICRjcmVhdGUgfHwgYXNjO1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBjYWxsYmFja2ZuLCB0aGF0KSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCgkdGhpcyk7XG4gICAgdmFyIHNlbGYgPSBJT2JqZWN0KE8pO1xuICAgIHZhciBmID0gY3R4KGNhbGxiYWNrZm4sIHRoYXQsIDMpO1xuICAgIHZhciBsZW5ndGggPSB0b0xlbmd0aChzZWxmLmxlbmd0aCk7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgcmVzdWx0ID0gSVNfTUFQID8gY3JlYXRlKCR0aGlzLCBsZW5ndGgpIDogSVNfRklMVEVSID8gY3JlYXRlKCR0aGlzLCAwKSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgdmFsLCByZXM7XG4gICAgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIGlmIChOT19IT0xFUyB8fCBpbmRleCBpbiBzZWxmKSB7XG4gICAgICB2YWwgPSBzZWxmW2luZGV4XTtcbiAgICAgIHJlcyA9IGYodmFsLCBpbmRleCwgTyk7XG4gICAgICBpZiAoVFlQRSkge1xuICAgICAgICBpZiAoSVNfTUFQKSByZXN1bHRbaW5kZXhdID0gcmVzOyAgIC8vIG1hcFxuICAgICAgICBlbHNlIGlmIChyZXMpIHN3aXRjaCAoVFlQRSkge1xuICAgICAgICAgIGNhc2UgMzogcmV0dXJuIHRydWU7ICAgICAgICAgICAgIC8vIHNvbWVcbiAgICAgICAgICBjYXNlIDU6IHJldHVybiB2YWw7ICAgICAgICAgICAgICAvLyBmaW5kXG4gICAgICAgICAgY2FzZSA2OiByZXR1cm4gaW5kZXg7ICAgICAgICAgICAgLy8gZmluZEluZGV4XG4gICAgICAgICAgY2FzZSAyOiByZXN1bHQucHVzaCh2YWwpOyAgICAgICAgLy8gZmlsdGVyXG4gICAgICAgIH0gZWxzZSBpZiAoSVNfRVZFUlkpIHJldHVybiBmYWxzZTsgLy8gZXZlcnlcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIElTX0ZJTkRfSU5ERVggPyAtMSA6IElTX1NPTUUgfHwgSVNfRVZFUlkgPyBJU19FVkVSWSA6IHJlc3VsdDtcbiAgfTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///26\n")},function(module,exports,__webpack_require__){"use strict";eval("\nif (__webpack_require__(7)) {\n var LIBRARY = __webpack_require__(29);\n var global = __webpack_require__(2);\n var fails = __webpack_require__(3);\n var $export = __webpack_require__(0);\n var $typed = __webpack_require__(62);\n var $buffer = __webpack_require__(92);\n var ctx = __webpack_require__(19);\n var anInstance = __webpack_require__(39);\n var propertyDesc = __webpack_require__(32);\n var hide = __webpack_require__(11);\n var redefineAll = __webpack_require__(41);\n var toInteger = __webpack_require__(21);\n var toLength = __webpack_require__(6);\n var toIndex = __webpack_require__(122);\n var toAbsoluteIndex = __webpack_require__(35);\n var toPrimitive = __webpack_require__(23);\n var has = __webpack_require__(14);\n var classof = __webpack_require__(44);\n var isObject = __webpack_require__(4);\n var toObject = __webpack_require__(9);\n var isArrayIter = __webpack_require__(81);\n var create = __webpack_require__(36);\n var getPrototypeOf = __webpack_require__(17);\n var gOPN = __webpack_require__(37).f;\n var getIterFn = __webpack_require__(83);\n var uid = __webpack_require__(33);\n var wks = __webpack_require__(5);\n var createArrayMethod = __webpack_require__(26);\n var createArrayIncludes = __webpack_require__(52);\n var speciesConstructor = __webpack_require__(51);\n var ArrayIterators = __webpack_require__(86);\n var Iterators = __webpack_require__(46);\n var $iterDetect = __webpack_require__(57);\n var setSpecies = __webpack_require__(38);\n var arrayFill = __webpack_require__(85);\n var arrayCopyWithin = __webpack_require__(111);\n var $DP = __webpack_require__(8);\n var $GOPD = __webpack_require__(16);\n var dP = $DP.f;\n var gOPD = $GOPD.f;\n var RangeError = global.RangeError;\n var TypeError = global.TypeError;\n var Uint8Array = global.Uint8Array;\n var ARRAY_BUFFER = 'ArrayBuffer';\n var SHARED_BUFFER = 'Shared' + ARRAY_BUFFER;\n var BYTES_PER_ELEMENT = 'BYTES_PER_ELEMENT';\n var PROTOTYPE = 'prototype';\n var ArrayProto = Array[PROTOTYPE];\n var $ArrayBuffer = $buffer.ArrayBuffer;\n var $DataView = $buffer.DataView;\n var arrayForEach = createArrayMethod(0);\n var arrayFilter = createArrayMethod(2);\n var arraySome = createArrayMethod(3);\n var arrayEvery = createArrayMethod(4);\n var arrayFind = createArrayMethod(5);\n var arrayFindIndex = createArrayMethod(6);\n var arrayIncludes = createArrayIncludes(true);\n var arrayIndexOf = createArrayIncludes(false);\n var arrayValues = ArrayIterators.values;\n var arrayKeys = ArrayIterators.keys;\n var arrayEntries = ArrayIterators.entries;\n var arrayLastIndexOf = ArrayProto.lastIndexOf;\n var arrayReduce = ArrayProto.reduce;\n var arrayReduceRight = ArrayProto.reduceRight;\n var arrayJoin = ArrayProto.join;\n var arraySort = ArrayProto.sort;\n var arraySlice = ArrayProto.slice;\n var arrayToString = ArrayProto.toString;\n var arrayToLocaleString = ArrayProto.toLocaleString;\n var ITERATOR = wks('iterator');\n var TAG = wks('toStringTag');\n var TYPED_CONSTRUCTOR = uid('typed_constructor');\n var DEF_CONSTRUCTOR = uid('def_constructor');\n var ALL_CONSTRUCTORS = $typed.CONSTR;\n var TYPED_ARRAY = $typed.TYPED;\n var VIEW = $typed.VIEW;\n var WRONG_LENGTH = 'Wrong length!';\n\n var $map = createArrayMethod(1, function (O, length) {\n return allocate(speciesConstructor(O, O[DEF_CONSTRUCTOR]), length);\n });\n\n var LITTLE_ENDIAN = fails(function () {\n // eslint-disable-next-line no-undef\n return new Uint8Array(new Uint16Array([1]).buffer)[0] === 1;\n });\n\n var FORCED_SET = !!Uint8Array && !!Uint8Array[PROTOTYPE].set && fails(function () {\n new Uint8Array(1).set({});\n });\n\n var toOffset = function (it, BYTES) {\n var offset = toInteger(it);\n if (offset < 0 || offset % BYTES) throw RangeError('Wrong offset!');\n return offset;\n };\n\n var validate = function (it) {\n if (isObject(it) && TYPED_ARRAY in it) return it;\n throw TypeError(it + ' is not a typed array!');\n };\n\n var allocate = function (C, length) {\n if (!(isObject(C) && TYPED_CONSTRUCTOR in C)) {\n throw TypeError('It is not a typed array constructor!');\n } return new C(length);\n };\n\n var speciesFromList = function (O, list) {\n return fromList(speciesConstructor(O, O[DEF_CONSTRUCTOR]), list);\n };\n\n var fromList = function (C, list) {\n var index = 0;\n var length = list.length;\n var result = allocate(C, length);\n while (length > index) result[index] = list[index++];\n return result;\n };\n\n var addGetter = function (it, key, internal) {\n dP(it, key, { get: function () { return this._d[internal]; } });\n };\n\n var $from = function from(source /* , mapfn, thisArg */) {\n var O = toObject(source);\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var iterFn = getIterFn(O);\n var i, length, values, result, step, iterator;\n if (iterFn != undefined && !isArrayIter(iterFn)) {\n for (iterator = iterFn.call(O), values = [], i = 0; !(step = iterator.next()).done; i++) {\n values.push(step.value);\n } O = values;\n }\n if (mapping && aLen > 2) mapfn = ctx(mapfn, arguments[2], 2);\n for (i = 0, length = toLength(O.length), result = allocate(this, length); length > i; i++) {\n result[i] = mapping ? mapfn(O[i], i) : O[i];\n }\n return result;\n };\n\n var $of = function of(/* ...items */) {\n var index = 0;\n var length = arguments.length;\n var result = allocate(this, length);\n while (length > index) result[index] = arguments[index++];\n return result;\n };\n\n // iOS Safari 6.x fails here\n var TO_LOCALE_BUG = !!Uint8Array && fails(function () { arrayToLocaleString.call(new Uint8Array(1)); });\n\n var $toLocaleString = function toLocaleString() {\n return arrayToLocaleString.apply(TO_LOCALE_BUG ? arraySlice.call(validate(this)) : validate(this), arguments);\n };\n\n var proto = {\n copyWithin: function copyWithin(target, start /* , end */) {\n return arrayCopyWithin.call(validate(this), target, start, arguments.length > 2 ? arguments[2] : undefined);\n },\n every: function every(callbackfn /* , thisArg */) {\n return arrayEvery(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n fill: function fill(value /* , start, end */) { // eslint-disable-line no-unused-vars\n return arrayFill.apply(validate(this), arguments);\n },\n filter: function filter(callbackfn /* , thisArg */) {\n return speciesFromList(this, arrayFilter(validate(this), callbackfn,\n arguments.length > 1 ? arguments[1] : undefined));\n },\n find: function find(predicate /* , thisArg */) {\n return arrayFind(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n findIndex: function findIndex(predicate /* , thisArg */) {\n return arrayFindIndex(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n forEach: function forEach(callbackfn /* , thisArg */) {\n arrayForEach(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n indexOf: function indexOf(searchElement /* , fromIndex */) {\n return arrayIndexOf(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n includes: function includes(searchElement /* , fromIndex */) {\n return arrayIncludes(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n join: function join(separator) { // eslint-disable-line no-unused-vars\n return arrayJoin.apply(validate(this), arguments);\n },\n lastIndexOf: function lastIndexOf(searchElement /* , fromIndex */) { // eslint-disable-line no-unused-vars\n return arrayLastIndexOf.apply(validate(this), arguments);\n },\n map: function map(mapfn /* , thisArg */) {\n return $map(validate(this), mapfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n reduce: function reduce(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduce.apply(validate(this), arguments);\n },\n reduceRight: function reduceRight(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduceRight.apply(validate(this), arguments);\n },\n reverse: function reverse() {\n var that = this;\n var length = validate(that).length;\n var middle = Math.floor(length / 2);\n var index = 0;\n var value;\n while (index < middle) {\n value = that[index];\n that[index++] = that[--length];\n that[length] = value;\n } return that;\n },\n some: function some(callbackfn /* , thisArg */) {\n return arraySome(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n sort: function sort(comparefn) {\n return arraySort.call(validate(this), comparefn);\n },\n subarray: function subarray(begin, end) {\n var O = validate(this);\n var length = O.length;\n var $begin = toAbsoluteIndex(begin, length);\n return new (speciesConstructor(O, O[DEF_CONSTRUCTOR]))(\n O.buffer,\n O.byteOffset + $begin * O.BYTES_PER_ELEMENT,\n toLength((end === undefined ? length : toAbsoluteIndex(end, length)) - $begin)\n );\n }\n };\n\n var $slice = function slice(start, end) {\n return speciesFromList(this, arraySlice.call(validate(this), start, end));\n };\n\n var $set = function set(arrayLike /* , offset */) {\n validate(this);\n var offset = toOffset(arguments[1], 1);\n var length = this.length;\n var src = toObject(arrayLike);\n var len = toLength(src.length);\n var index = 0;\n if (len + offset > length) throw RangeError(WRONG_LENGTH);\n while (index < len) this[offset + index] = src[index++];\n };\n\n var $iterators = {\n entries: function entries() {\n return arrayEntries.call(validate(this));\n },\n keys: function keys() {\n return arrayKeys.call(validate(this));\n },\n values: function values() {\n return arrayValues.call(validate(this));\n }\n };\n\n var isTAIndex = function (target, key) {\n return isObject(target)\n && target[TYPED_ARRAY]\n && typeof key != 'symbol'\n && key in target\n && String(+key) == String(key);\n };\n var $getDesc = function getOwnPropertyDescriptor(target, key) {\n return isTAIndex(target, key = toPrimitive(key, true))\n ? propertyDesc(2, target[key])\n : gOPD(target, key);\n };\n var $setDesc = function defineProperty(target, key, desc) {\n if (isTAIndex(target, key = toPrimitive(key, true))\n && isObject(desc)\n && has(desc, 'value')\n && !has(desc, 'get')\n && !has(desc, 'set')\n // TODO: add validation descriptor w/o calling accessors\n && !desc.configurable\n && (!has(desc, 'writable') || desc.writable)\n && (!has(desc, 'enumerable') || desc.enumerable)\n ) {\n target[key] = desc.value;\n return target;\n } return dP(target, key, desc);\n };\n\n if (!ALL_CONSTRUCTORS) {\n $GOPD.f = $getDesc;\n $DP.f = $setDesc;\n }\n\n $export($export.S + $export.F * !ALL_CONSTRUCTORS, 'Object', {\n getOwnPropertyDescriptor: $getDesc,\n defineProperty: $setDesc\n });\n\n if (fails(function () { arrayToString.call({}); })) {\n arrayToString = arrayToLocaleString = function toString() {\n return arrayJoin.call(this);\n };\n }\n\n var $TypedArrayPrototype$ = redefineAll({}, proto);\n redefineAll($TypedArrayPrototype$, $iterators);\n hide($TypedArrayPrototype$, ITERATOR, $iterators.values);\n redefineAll($TypedArrayPrototype$, {\n slice: $slice,\n set: $set,\n constructor: function () { /* noop */ },\n toString: arrayToString,\n toLocaleString: $toLocaleString\n });\n addGetter($TypedArrayPrototype$, 'buffer', 'b');\n addGetter($TypedArrayPrototype$, 'byteOffset', 'o');\n addGetter($TypedArrayPrototype$, 'byteLength', 'l');\n addGetter($TypedArrayPrototype$, 'length', 'e');\n dP($TypedArrayPrototype$, TAG, {\n get: function () { return this[TYPED_ARRAY]; }\n });\n\n // eslint-disable-next-line max-statements\n module.exports = function (KEY, BYTES, wrapper, CLAMPED) {\n CLAMPED = !!CLAMPED;\n var NAME = KEY + (CLAMPED ? 'Clamped' : '') + 'Array';\n var GETTER = 'get' + KEY;\n var SETTER = 'set' + KEY;\n var TypedArray = global[NAME];\n var Base = TypedArray || {};\n var TAC = TypedArray && getPrototypeOf(TypedArray);\n var FORCED = !TypedArray || !$typed.ABV;\n var O = {};\n var TypedArrayPrototype = TypedArray && TypedArray[PROTOTYPE];\n var getter = function (that, index) {\n var data = that._d;\n return data.v[GETTER](index * BYTES + data.o, LITTLE_ENDIAN);\n };\n var setter = function (that, index, value) {\n var data = that._d;\n if (CLAMPED) value = (value = Math.round(value)) < 0 ? 0 : value > 0xff ? 0xff : value & 0xff;\n data.v[SETTER](index * BYTES + data.o, value, LITTLE_ENDIAN);\n };\n var addElement = function (that, index) {\n dP(that, index, {\n get: function () {\n return getter(this, index);\n },\n set: function (value) {\n return setter(this, index, value);\n },\n enumerable: true\n });\n };\n if (FORCED) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME, '_d');\n var index = 0;\n var offset = 0;\n var buffer, byteLength, length, klass;\n if (!isObject(data)) {\n length = toIndex(data);\n byteLength = length * BYTES;\n buffer = new $ArrayBuffer(byteLength);\n } else if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n buffer = data;\n offset = toOffset($offset, BYTES);\n var $len = data.byteLength;\n if ($length === undefined) {\n if ($len % BYTES) throw RangeError(WRONG_LENGTH);\n byteLength = $len - offset;\n if (byteLength < 0) throw RangeError(WRONG_LENGTH);\n } else {\n byteLength = toLength($length) * BYTES;\n if (byteLength + offset > $len) throw RangeError(WRONG_LENGTH);\n }\n length = byteLength / BYTES;\n } else if (TYPED_ARRAY in data) {\n return fromList(TypedArray, data);\n } else {\n return $from.call(TypedArray, data);\n }\n hide(that, '_d', {\n b: buffer,\n o: offset,\n l: byteLength,\n e: length,\n v: new $DataView(buffer)\n });\n while (index < length) addElement(that, index++);\n });\n TypedArrayPrototype = TypedArray[PROTOTYPE] = create($TypedArrayPrototype$);\n hide(TypedArrayPrototype, 'constructor', TypedArray);\n } else if (!fails(function () {\n TypedArray(1);\n }) || !fails(function () {\n new TypedArray(-1); // eslint-disable-line no-new\n }) || !$iterDetect(function (iter) {\n new TypedArray(); // eslint-disable-line no-new\n new TypedArray(null); // eslint-disable-line no-new\n new TypedArray(1.5); // eslint-disable-line no-new\n new TypedArray(iter); // eslint-disable-line no-new\n }, true)) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME);\n var klass;\n // `ws` module bug, temporarily remove validation length for Uint8Array\n // https://github.com/websockets/ws/pull/645\n if (!isObject(data)) return new Base(toIndex(data));\n if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n return $length !== undefined\n ? new Base(data, toOffset($offset, BYTES), $length)\n : $offset !== undefined\n ? new Base(data, toOffset($offset, BYTES))\n : new Base(data);\n }\n if (TYPED_ARRAY in data) return fromList(TypedArray, data);\n return $from.call(TypedArray, data);\n });\n arrayForEach(TAC !== Function.prototype ? gOPN(Base).concat(gOPN(TAC)) : gOPN(Base), function (key) {\n if (!(key in TypedArray)) hide(TypedArray, key, Base[key]);\n });\n TypedArray[PROTOTYPE] = TypedArrayPrototype;\n if (!LIBRARY) TypedArrayPrototype.constructor = TypedArray;\n }\n var $nativeIterator = TypedArrayPrototype[ITERATOR];\n var CORRECT_ITER_NAME = !!$nativeIterator\n && ($nativeIterator.name == 'values' || $nativeIterator.name == undefined);\n var $iterator = $iterators.values;\n hide(TypedArray, TYPED_CONSTRUCTOR, true);\n hide(TypedArrayPrototype, TYPED_ARRAY, NAME);\n hide(TypedArrayPrototype, VIEW, true);\n hide(TypedArrayPrototype, DEF_CONSTRUCTOR, TypedArray);\n\n if (CLAMPED ? new TypedArray(1)[TAG] != NAME : !(TAG in TypedArrayPrototype)) {\n dP(TypedArrayPrototype, TAG, {\n get: function () { return NAME; }\n });\n }\n\n O[NAME] = TypedArray;\n\n $export($export.G + $export.W + $export.F * (TypedArray != Base), O);\n\n $export($export.S, NAME, {\n BYTES_PER_ELEMENT: BYTES\n });\n\n $export($export.S + $export.F * fails(function () { Base.of.call(TypedArray, 1); }), NAME, {\n from: $from,\n of: $of\n });\n\n if (!(BYTES_PER_ELEMENT in TypedArrayPrototype)) hide(TypedArrayPrototype, BYTES_PER_ELEMENT, BYTES);\n\n $export($export.P, NAME, proto);\n\n setSpecies(NAME);\n\n $export($export.P + $export.F * FORCED_SET, NAME, { set: $set });\n\n $export($export.P + $export.F * !CORRECT_ITER_NAME, NAME, $iterators);\n\n if (!LIBRARY && TypedArrayPrototype.toString != arrayToString) TypedArrayPrototype.toString = arrayToString;\n\n $export($export.P + $export.F * fails(function () {\n new TypedArray(1).slice();\n }), NAME, { slice: $slice });\n\n $export($export.P + $export.F * (fails(function () {\n return [1, 2].toLocaleString() != new TypedArray([1, 2]).toLocaleString();\n }) || !fails(function () {\n TypedArrayPrototype.toLocaleString.call([1, 2]);\n })), NAME, { toLocaleString: $toLocaleString });\n\n Iterators[NAME] = CORRECT_ITER_NAME ? $nativeIterator : $iterator;\n if (!LIBRARY && !CORRECT_ITER_NAME) hide(TypedArrayPrototype, ITERATOR, $iterator);\n };\n} else module.exports = function () { /* empty */ };\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdHlwZWQtYXJyYXkuanM/ZWMzMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLElBQUksbUJBQU8sQ0FBQyxDQUFnQjtBQUM1QixnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFZO0FBQ3BDLGVBQWUsbUJBQU8sQ0FBQyxDQUFXO0FBQ2xDLGNBQWMsbUJBQU8sQ0FBQyxDQUFVO0FBQ2hDLGdCQUFnQixtQkFBTyxDQUFDLENBQVc7QUFDbkMsZUFBZSxtQkFBTyxDQUFDLEVBQVU7QUFDakMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBaUI7QUFDekMsWUFBWSxtQkFBTyxDQUFDLEVBQVE7QUFDNUIsbUJBQW1CLG1CQUFPLENBQUMsRUFBZ0I7QUFDM0MscUJBQXFCLG1CQUFPLENBQUMsRUFBa0I7QUFDL0MsYUFBYSxtQkFBTyxDQUFDLEVBQVM7QUFDOUIsb0JBQW9CLG1CQUFPLENBQUMsRUFBaUI7QUFDN0Msa0JBQWtCLG1CQUFPLENBQUMsRUFBZTtBQUN6QyxpQkFBaUIsbUJBQU8sQ0FBQyxDQUFjO0FBQ3ZDLGdCQUFnQixtQkFBTyxDQUFDLEdBQWE7QUFDckMsd0JBQXdCLG1CQUFPLENBQUMsRUFBc0I7QUFDdEQsb0JBQW9CLG1CQUFPLENBQUMsRUFBaUI7QUFDN0MsWUFBWSxtQkFBTyxDQUFDLEVBQVE7QUFDNUIsZ0JBQWdCLG1CQUFPLENBQUMsRUFBWTtBQUNwQyxpQkFBaUIsbUJBQU8sQ0FBQyxDQUFjO0FBQ3ZDLGlCQUFpQixtQkFBTyxDQUFDLENBQWM7QUFDdkMsb0JBQW9CLG1CQUFPLENBQUMsRUFBa0I7QUFDOUMsZUFBZSxtQkFBTyxDQUFDLEVBQWtCO0FBQ3pDLHVCQUF1QixtQkFBTyxDQUFDLEVBQWU7QUFDOUMsYUFBYSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3JDLGtCQUFrQixtQkFBTyxDQUFDLEVBQTRCO0FBQ3RELFlBQVksbUJBQU8sQ0FBQyxFQUFRO0FBQzVCLFlBQVksbUJBQU8sQ0FBQyxDQUFRO0FBQzVCLDBCQUEwQixtQkFBTyxDQUFDLEVBQWtCO0FBQ3BELDRCQUE0QixtQkFBTyxDQUFDLEVBQW1CO0FBQ3ZELDJCQUEyQixtQkFBTyxDQUFDLEVBQXdCO0FBQzNELHVCQUF1QixtQkFBTyxDQUFDLEVBQXNCO0FBQ3JELGtCQUFrQixtQkFBTyxDQUFDLEVBQWM7QUFDeEMsb0JBQW9CLG1CQUFPLENBQUMsRUFBZ0I7QUFDNUMsbUJBQW1CLG1CQUFPLENBQUMsRUFBZ0I7QUFDM0Msa0JBQWtCLG1CQUFPLENBQUMsRUFBZTtBQUN6Qyx3QkFBd0IsbUJBQU8sQ0FBQyxHQUFzQjtBQUN0RCxZQUFZLG1CQUFPLENBQUMsQ0FBYztBQUNsQyxjQUFjLG1CQUFPLENBQUMsRUFBZ0I7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQSw0QkFBNEI7QUFDNUIsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxpQkFBaUIsbUJBQW1CLDBCQUEwQixFQUFFLEVBQUU7QUFDbEU7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlEQUF5RCxnQ0FBZ0M7QUFDekY7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLDZFQUE2RSxZQUFZO0FBQ3pGO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EseURBQXlELDZDQUE2QyxFQUFFOztBQUV4RztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsbURBQW1EO0FBQ25EO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsb0NBQW9DO0FBQ3BDO0FBQ0EsS0FBSztBQUNMLHdFQUF3RTtBQUN4RTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMLDhEQUE4RDtBQUM5RDtBQUNBLEtBQUs7QUFDTCx3RUFBd0U7QUFDeEU7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVILHlCQUF5QixzQkFBc0IsRUFBRSxFQUFFO0FBQ25EO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDRDQUE0QztBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOEJBQThCLGFBQWE7QUFDM0M7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLDBCQUEwQjtBQUNoRCxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0wseUJBQXlCO0FBQ3pCLEtBQUs7QUFDTCx1QkFBdUI7QUFDdkIsMkJBQTJCO0FBQzNCLDBCQUEwQjtBQUMxQiwyQkFBMkI7QUFDM0IsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDBCQUEwQixhQUFhO0FBQ3ZDLE9BQU87QUFDUDs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTCx1REFBdUQsNkJBQTZCLEVBQUU7QUFDdEY7QUFDQTtBQUNBLEtBQUs7O0FBRUw7O0FBRUE7O0FBRUE7O0FBRUEsdURBQXVELFlBQVk7O0FBRW5FOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxLQUFLLFVBQVUsZ0JBQWdCOztBQUUvQjtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSyxXQUFXLGtDQUFrQzs7QUFFbEQ7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxvQ0FBb0MiLCJmaWxlIjoiMjcuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5pZiAocmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSkge1xuICB2YXIgTElCUkFSWSA9IHJlcXVpcmUoJy4vX2xpYnJhcnknKTtcbiAgdmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xuICB2YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xuICB2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuICB2YXIgJHR5cGVkID0gcmVxdWlyZSgnLi9fdHlwZWQnKTtcbiAgdmFyICRidWZmZXIgPSByZXF1aXJlKCcuL190eXBlZC1idWZmZXInKTtcbiAgdmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xuICB2YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG4gIHZhciBwcm9wZXJ0eURlc2MgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG4gIHZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xuICB2YXIgcmVkZWZpbmVBbGwgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKTtcbiAgdmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbiAgdmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG4gIHZhciB0b0luZGV4ID0gcmVxdWlyZSgnLi9fdG8taW5kZXgnKTtcbiAgdmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4vX3RvLWFic29sdXRlLWluZGV4Jyk7XG4gIHZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xuICB2YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG4gIHZhciBjbGFzc29mID0gcmVxdWlyZSgnLi9fY2xhc3NvZicpO1xuICB2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbiAgdmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG4gIHZhciBpc0FycmF5SXRlciA9IHJlcXVpcmUoJy4vX2lzLWFycmF5LWl0ZXInKTtcbiAgdmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKTtcbiAgdmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xuICB2YXIgZ09QTiA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJykuZjtcbiAgdmFyIGdldEl0ZXJGbiA9IHJlcXVpcmUoJy4vY29yZS5nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG4gIHZhciB1aWQgPSByZXF1aXJlKCcuL191aWQnKTtcbiAgdmFyIHdrcyA9IHJlcXVpcmUoJy4vX3drcycpO1xuICB2YXIgY3JlYXRlQXJyYXlNZXRob2QgPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJyk7XG4gIHZhciBjcmVhdGVBcnJheUluY2x1ZGVzID0gcmVxdWlyZSgnLi9fYXJyYXktaW5jbHVkZXMnKTtcbiAgdmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4vX3NwZWNpZXMtY29uc3RydWN0b3InKTtcbiAgdmFyIEFycmF5SXRlcmF0b3JzID0gcmVxdWlyZSgnLi9lczYuYXJyYXkuaXRlcmF0b3InKTtcbiAgdmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xuICB2YXIgJGl0ZXJEZXRlY3QgPSByZXF1aXJlKCcuL19pdGVyLWRldGVjdCcpO1xuICB2YXIgc2V0U3BlY2llcyA9IHJlcXVpcmUoJy4vX3NldC1zcGVjaWVzJyk7XG4gIHZhciBhcnJheUZpbGwgPSByZXF1aXJlKCcuL19hcnJheS1maWxsJyk7XG4gIHZhciBhcnJheUNvcHlXaXRoaW4gPSByZXF1aXJlKCcuL19hcnJheS1jb3B5LXdpdGhpbicpO1xuICB2YXIgJERQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG4gIHZhciAkR09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJyk7XG4gIHZhciBkUCA9ICREUC5mO1xuICB2YXIgZ09QRCA9ICRHT1BELmY7XG4gIHZhciBSYW5nZUVycm9yID0gZ2xvYmFsLlJhbmdlRXJyb3I7XG4gIHZhciBUeXBlRXJyb3IgPSBnbG9iYWwuVHlwZUVycm9yO1xuICB2YXIgVWludDhBcnJheSA9IGdsb2JhbC5VaW50OEFycmF5O1xuICB2YXIgQVJSQVlfQlVGRkVSID0gJ0FycmF5QnVmZmVyJztcbiAgdmFyIFNIQVJFRF9CVUZGRVIgPSAnU2hhcmVkJyArIEFSUkFZX0JVRkZFUjtcbiAgdmFyIEJZVEVTX1BFUl9FTEVNRU5UID0gJ0JZVEVTX1BFUl9FTEVNRU5UJztcbiAgdmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xuICB2YXIgQXJyYXlQcm90byA9IEFycmF5W1BST1RPVFlQRV07XG4gIHZhciAkQXJyYXlCdWZmZXIgPSAkYnVmZmVyLkFycmF5QnVmZmVyO1xuICB2YXIgJERhdGFWaWV3ID0gJGJ1ZmZlci5EYXRhVmlldztcbiAgdmFyIGFycmF5Rm9yRWFjaCA9IGNyZWF0ZUFycmF5TWV0aG9kKDApO1xuICB2YXIgYXJyYXlGaWx0ZXIgPSBjcmVhdGVBcnJheU1ldGhvZCgyKTtcbiAgdmFyIGFycmF5U29tZSA9IGNyZWF0ZUFycmF5TWV0aG9kKDMpO1xuICB2YXIgYXJyYXlFdmVyeSA9IGNyZWF0ZUFycmF5TWV0aG9kKDQpO1xuICB2YXIgYXJyYXlGaW5kID0gY3JlYXRlQXJyYXlNZXRob2QoNSk7XG4gIHZhciBhcnJheUZpbmRJbmRleCA9IGNyZWF0ZUFycmF5TWV0aG9kKDYpO1xuICB2YXIgYXJyYXlJbmNsdWRlcyA9IGNyZWF0ZUFycmF5SW5jbHVkZXModHJ1ZSk7XG4gIHZhciBhcnJheUluZGV4T2YgPSBjcmVhdGVBcnJheUluY2x1ZGVzKGZhbHNlKTtcbiAgdmFyIGFycmF5VmFsdWVzID0gQXJyYXlJdGVyYXRvcnMudmFsdWVzO1xuICB2YXIgYXJyYXlLZXlzID0gQXJyYXlJdGVyYXRvcnMua2V5cztcbiAgdmFyIGFycmF5RW50cmllcyA9IEFycmF5SXRlcmF0b3JzLmVudHJpZXM7XG4gIHZhciBhcnJheUxhc3RJbmRleE9mID0gQXJyYXlQcm90by5sYXN0SW5kZXhPZjtcbiAgdmFyIGFycmF5UmVkdWNlID0gQXJyYXlQcm90by5yZWR1Y2U7XG4gIHZhciBhcnJheVJlZHVjZVJpZ2h0ID0gQXJyYXlQcm90by5yZWR1Y2VSaWdodDtcbiAgdmFyIGFycmF5Sm9pbiA9IEFycmF5UHJvdG8uam9pbjtcbiAgdmFyIGFycmF5U29ydCA9IEFycmF5UHJvdG8uc29ydDtcbiAgdmFyIGFycmF5U2xpY2UgPSBBcnJheVByb3RvLnNsaWNlO1xuICB2YXIgYXJyYXlUb1N0cmluZyA9IEFycmF5UHJvdG8udG9TdHJpbmc7XG4gIHZhciBhcnJheVRvTG9jYWxlU3RyaW5nID0gQXJyYXlQcm90by50b0xvY2FsZVN0cmluZztcbiAgdmFyIElURVJBVE9SID0gd2tzKCdpdGVyYXRvcicpO1xuICB2YXIgVEFHID0gd2tzKCd0b1N0cmluZ1RhZycpO1xuICB2YXIgVFlQRURfQ09OU1RSVUNUT1IgPSB1aWQoJ3R5cGVkX2NvbnN0cnVjdG9yJyk7XG4gIHZhciBERUZfQ09OU1RSVUNUT1IgPSB1aWQoJ2RlZl9jb25zdHJ1Y3RvcicpO1xuICB2YXIgQUxMX0NPTlNUUlVDVE9SUyA9ICR0eXBlZC5DT05TVFI7XG4gIHZhciBUWVBFRF9BUlJBWSA9ICR0eXBlZC5UWVBFRDtcbiAgdmFyIFZJRVcgPSAkdHlwZWQuVklFVztcbiAgdmFyIFdST05HX0xFTkdUSCA9ICdXcm9uZyBsZW5ndGghJztcblxuICB2YXIgJG1hcCA9IGNyZWF0ZUFycmF5TWV0aG9kKDEsIGZ1bmN0aW9uIChPLCBsZW5ndGgpIHtcbiAgICByZXR1cm4gYWxsb2NhdGUoc3BlY2llc0NvbnN0cnVjdG9yKE8sIE9bREVGX0NPTlNUUlVDVE9SXSksIGxlbmd0aCk7XG4gIH0pO1xuXG4gIHZhciBMSVRUTEVfRU5ESUFOID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICAgIHJldHVybiBuZXcgVWludDhBcnJheShuZXcgVWludDE2QXJyYXkoWzFdKS5idWZmZXIpWzBdID09PSAxO1xuICB9KTtcblxuICB2YXIgRk9SQ0VEX1NFVCA9ICEhVWludDhBcnJheSAmJiAhIVVpbnQ4QXJyYXlbUFJPVE9UWVBFXS5zZXQgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIG5ldyBVaW50OEFycmF5KDEpLnNldCh7fSk7XG4gIH0pO1xuXG4gIHZhciB0b09mZnNldCA9IGZ1bmN0aW9uIChpdCwgQllURVMpIHtcbiAgICB2YXIgb2Zmc2V0ID0gdG9JbnRlZ2VyKGl0KTtcbiAgICBpZiAob2Zmc2V0IDwgMCB8fCBvZmZzZXQgJSBCWVRFUykgdGhyb3cgUmFuZ2VFcnJvcignV3Jvbmcgb2Zmc2V0IScpO1xuICAgIHJldHVybiBvZmZzZXQ7XG4gIH07XG5cbiAgdmFyIHZhbGlkYXRlID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgaWYgKGlzT2JqZWN0KGl0KSAmJiBUWVBFRF9BUlJBWSBpbiBpdCkgcmV0dXJuIGl0O1xuICAgIHRocm93IFR5cGVFcnJvcihpdCArICcgaXMgbm90IGEgdHlwZWQgYXJyYXkhJyk7XG4gIH07XG5cbiAgdmFyIGFsbG9jYXRlID0gZnVuY3Rpb24gKEMsIGxlbmd0aCkge1xuICAgIGlmICghKGlzT2JqZWN0KEMpICYmIFRZUEVEX0NPTlNUUlVDVE9SIGluIEMpKSB7XG4gICAgICB0aHJvdyBUeXBlRXJyb3IoJ0l0IGlzIG5vdCBhIHR5cGVkIGFycmF5IGNvbnN0cnVjdG9yIScpO1xuICAgIH0gcmV0dXJuIG5ldyBDKGxlbmd0aCk7XG4gIH07XG5cbiAgdmFyIHNwZWNpZXNGcm9tTGlzdCA9IGZ1bmN0aW9uIChPLCBsaXN0KSB7XG4gICAgcmV0dXJuIGZyb21MaXN0KHNwZWNpZXNDb25zdHJ1Y3RvcihPLCBPW0RFRl9DT05TVFJVQ1RPUl0pLCBsaXN0KTtcbiAgfTtcblxuICB2YXIgZnJvbUxpc3QgPSBmdW5jdGlvbiAoQywgbGlzdCkge1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGxlbmd0aCA9IGxpc3QubGVuZ3RoO1xuICAgIHZhciByZXN1bHQgPSBhbGxvY2F0ZShDLCBsZW5ndGgpO1xuICAgIHdoaWxlIChsZW5ndGggPiBpbmRleCkgcmVzdWx0W2luZGV4XSA9IGxpc3RbaW5kZXgrK107XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICB2YXIgYWRkR2V0dGVyID0gZnVuY3Rpb24gKGl0LCBrZXksIGludGVybmFsKSB7XG4gICAgZFAoaXQsIGtleSwgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMuX2RbaW50ZXJuYWxdOyB9IH0pO1xuICB9O1xuXG4gIHZhciAkZnJvbSA9IGZ1bmN0aW9uIGZyb20oc291cmNlIC8qICwgbWFwZm4sIHRoaXNBcmcgKi8pIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHNvdXJjZSk7XG4gICAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBtYXBmbiA9IGFMZW4gPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkO1xuICAgIHZhciBtYXBwaW5nID0gbWFwZm4gIT09IHVuZGVmaW5lZDtcbiAgICB2YXIgaXRlckZuID0gZ2V0SXRlckZuKE8pO1xuICAgIHZhciBpLCBsZW5ndGgsIHZhbHVlcywgcmVzdWx0LCBzdGVwLCBpdGVyYXRvcjtcbiAgICBpZiAoaXRlckZuICE9IHVuZGVmaW5lZCAmJiAhaXNBcnJheUl0ZXIoaXRlckZuKSkge1xuICAgICAgZm9yIChpdGVyYXRvciA9IGl0ZXJGbi5jYWxsKE8pLCB2YWx1ZXMgPSBbXSwgaSA9IDA7ICEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZTsgaSsrKSB7XG4gICAgICAgIHZhbHVlcy5wdXNoKHN0ZXAudmFsdWUpO1xuICAgICAgfSBPID0gdmFsdWVzO1xuICAgIH1cbiAgICBpZiAobWFwcGluZyAmJiBhTGVuID4gMikgbWFwZm4gPSBjdHgobWFwZm4sIGFyZ3VtZW50c1syXSwgMik7XG4gICAgZm9yIChpID0gMCwgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpLCByZXN1bHQgPSBhbGxvY2F0ZSh0aGlzLCBsZW5ndGgpOyBsZW5ndGggPiBpOyBpKyspIHtcbiAgICAgIHJlc3VsdFtpXSA9IG1hcHBpbmcgPyBtYXBmbihPW2ldLCBpKSA6IE9baV07XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgdmFyICRvZiA9IGZ1bmN0aW9uIG9mKC8qIC4uLml0ZW1zICovKSB7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgcmVzdWx0ID0gYWxsb2NhdGUodGhpcywgbGVuZ3RoKTtcbiAgICB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIHJlc3VsdFtpbmRleF0gPSBhcmd1bWVudHNbaW5kZXgrK107XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvLyBpT1MgU2FmYXJpIDYueCBmYWlscyBoZXJlXG4gIHZhciBUT19MT0NBTEVfQlVHID0gISFVaW50OEFycmF5ICYmIGZhaWxzKGZ1bmN0aW9uICgpIHsgYXJyYXlUb0xvY2FsZVN0cmluZy5jYWxsKG5ldyBVaW50OEFycmF5KDEpKTsgfSk7XG5cbiAgdmFyICR0b0xvY2FsZVN0cmluZyA9IGZ1bmN0aW9uIHRvTG9jYWxlU3RyaW5nKCkge1xuICAgIHJldHVybiBhcnJheVRvTG9jYWxlU3RyaW5nLmFwcGx5KFRPX0xPQ0FMRV9CVUcgPyBhcnJheVNsaWNlLmNhbGwodmFsaWRhdGUodGhpcykpIDogdmFsaWRhdGUodGhpcyksIGFyZ3VtZW50cyk7XG4gIH07XG5cbiAgdmFyIHByb3RvID0ge1xuICAgIGNvcHlXaXRoaW46IGZ1bmN0aW9uIGNvcHlXaXRoaW4odGFyZ2V0LCBzdGFydCAvKiAsIGVuZCAqLykge1xuICAgICAgcmV0dXJuIGFycmF5Q29weVdpdGhpbi5jYWxsKHZhbGlkYXRlKHRoaXMpLCB0YXJnZXQsIHN0YXJ0LCBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBldmVyeTogZnVuY3Rpb24gZXZlcnkoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICAgIHJldHVybiBhcnJheUV2ZXJ5KHZhbGlkYXRlKHRoaXMpLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBmaWxsOiBmdW5jdGlvbiBmaWxsKHZhbHVlIC8qICwgc3RhcnQsIGVuZCAqLykgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgICByZXR1cm4gYXJyYXlGaWxsLmFwcGx5KHZhbGlkYXRlKHRoaXMpLCBhcmd1bWVudHMpO1xuICAgIH0sXG4gICAgZmlsdGVyOiBmdW5jdGlvbiBmaWx0ZXIoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICAgIHJldHVybiBzcGVjaWVzRnJvbUxpc3QodGhpcywgYXJyYXlGaWx0ZXIodmFsaWRhdGUodGhpcyksIGNhbGxiYWNrZm4sXG4gICAgICAgIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKSk7XG4gICAgfSxcbiAgICBmaW5kOiBmdW5jdGlvbiBmaW5kKHByZWRpY2F0ZSAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICAgIHJldHVybiBhcnJheUZpbmQodmFsaWRhdGUodGhpcyksIHByZWRpY2F0ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgZmluZEluZGV4OiBmdW5jdGlvbiBmaW5kSW5kZXgocHJlZGljYXRlIC8qICwgdGhpc0FyZyAqLykge1xuICAgICAgcmV0dXJuIGFycmF5RmluZEluZGV4KHZhbGlkYXRlKHRoaXMpLCBwcmVkaWNhdGUsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgIGZvckVhY2g6IGZ1bmN0aW9uIGZvckVhY2goY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICAgIGFycmF5Rm9yRWFjaCh2YWxpZGF0ZSh0aGlzKSwgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgaW5kZXhPZjogZnVuY3Rpb24gaW5kZXhPZihzZWFyY2hFbGVtZW50IC8qICwgZnJvbUluZGV4ICovKSB7XG4gICAgICByZXR1cm4gYXJyYXlJbmRleE9mKHZhbGlkYXRlKHRoaXMpLCBzZWFyY2hFbGVtZW50LCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBpbmNsdWRlczogZnVuY3Rpb24gaW5jbHVkZXMoc2VhcmNoRWxlbWVudCAvKiAsIGZyb21JbmRleCAqLykge1xuICAgICAgcmV0dXJuIGFycmF5SW5jbHVkZXModmFsaWRhdGUodGhpcyksIHNlYXJjaEVsZW1lbnQsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgIGpvaW46IGZ1bmN0aW9uIGpvaW4oc2VwYXJhdG9yKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICAgIHJldHVybiBhcnJheUpvaW4uYXBwbHkodmFsaWRhdGUodGhpcyksIGFyZ3VtZW50cyk7XG4gICAgfSxcbiAgICBsYXN0SW5kZXhPZjogZnVuY3Rpb24gbGFzdEluZGV4T2Yoc2VhcmNoRWxlbWVudCAvKiAsIGZyb21JbmRleCAqLykgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgICByZXR1cm4gYXJyYXlMYXN0SW5kZXhPZi5hcHBseSh2YWxpZGF0ZSh0aGlzKSwgYXJndW1lbnRzKTtcbiAgICB9LFxuICAgIG1hcDogZnVuY3Rpb24gbWFwKG1hcGZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgICAgcmV0dXJuICRtYXAodmFsaWRhdGUodGhpcyksIG1hcGZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICByZWR1Y2U6IGZ1bmN0aW9uIHJlZHVjZShjYWxsYmFja2ZuIC8qICwgaW5pdGlhbFZhbHVlICovKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICAgIHJldHVybiBhcnJheVJlZHVjZS5hcHBseSh2YWxpZGF0ZSh0aGlzKSwgYXJndW1lbnRzKTtcbiAgICB9LFxuICAgIHJlZHVjZVJpZ2h0OiBmdW5jdGlvbiByZWR1Y2VSaWdodChjYWxsYmFja2ZuIC8qICwgaW5pdGlhbFZhbHVlICovKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICAgIHJldHVybiBhcnJheVJlZHVjZVJpZ2h0LmFwcGx5KHZhbGlkYXRlKHRoaXMpLCBhcmd1bWVudHMpO1xuICAgIH0sXG4gICAgcmV2ZXJzZTogZnVuY3Rpb24gcmV2ZXJzZSgpIHtcbiAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgIHZhciBsZW5ndGggPSB2YWxpZGF0ZSh0aGF0KS5sZW5ndGg7XG4gICAgICB2YXIgbWlkZGxlID0gTWF0aC5mbG9vcihsZW5ndGggLyAyKTtcbiAgICAgIHZhciBpbmRleCA9IDA7XG4gICAgICB2YXIgdmFsdWU7XG4gICAgICB3aGlsZSAoaW5kZXggPCBtaWRkbGUpIHtcbiAgICAgICAgdmFsdWUgPSB0aGF0W2luZGV4XTtcbiAgICAgICAgdGhhdFtpbmRleCsrXSA9IHRoYXRbLS1sZW5ndGhdO1xuICAgICAgICB0aGF0W2xlbmd0aF0gPSB2YWx1ZTtcbiAgICAgIH0gcmV0dXJuIHRoYXQ7XG4gICAgfSxcbiAgICBzb21lOiBmdW5jdGlvbiBzb21lKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgICByZXR1cm4gYXJyYXlTb21lKHZhbGlkYXRlKHRoaXMpLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBzb3J0OiBmdW5jdGlvbiBzb3J0KGNvbXBhcmVmbikge1xuICAgICAgcmV0dXJuIGFycmF5U29ydC5jYWxsKHZhbGlkYXRlKHRoaXMpLCBjb21wYXJlZm4pO1xuICAgIH0sXG4gICAgc3ViYXJyYXk6IGZ1bmN0aW9uIHN1YmFycmF5KGJlZ2luLCBlbmQpIHtcbiAgICAgIHZhciBPID0gdmFsaWRhdGUodGhpcyk7XG4gICAgICB2YXIgbGVuZ3RoID0gTy5sZW5ndGg7XG4gICAgICB2YXIgJGJlZ2luID0gdG9BYnNvbHV0ZUluZGV4KGJlZ2luLCBsZW5ndGgpO1xuICAgICAgcmV0dXJuIG5ldyAoc3BlY2llc0NvbnN0cnVjdG9yKE8sIE9bREVGX0NPTlNUUlVDVE9SXSkpKFxuICAgICAgICBPLmJ1ZmZlcixcbiAgICAgICAgTy5ieXRlT2Zmc2V0ICsgJGJlZ2luICogTy5CWVRFU19QRVJfRUxFTUVOVCxcbiAgICAgICAgdG9MZW5ndGgoKGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuZ3RoIDogdG9BYnNvbHV0ZUluZGV4KGVuZCwgbGVuZ3RoKSkgLSAkYmVnaW4pXG4gICAgICApO1xuICAgIH1cbiAgfTtcblxuICB2YXIgJHNsaWNlID0gZnVuY3Rpb24gc2xpY2Uoc3RhcnQsIGVuZCkge1xuICAgIHJldHVybiBzcGVjaWVzRnJvbUxpc3QodGhpcywgYXJyYXlTbGljZS5jYWxsKHZhbGlkYXRlKHRoaXMpLCBzdGFydCwgZW5kKSk7XG4gIH07XG5cbiAgdmFyICRzZXQgPSBmdW5jdGlvbiBzZXQoYXJyYXlMaWtlIC8qICwgb2Zmc2V0ICovKSB7XG4gICAgdmFsaWRhdGUodGhpcyk7XG4gICAgdmFyIG9mZnNldCA9IHRvT2Zmc2V0KGFyZ3VtZW50c1sxXSwgMSk7XG4gICAgdmFyIGxlbmd0aCA9IHRoaXMubGVuZ3RoO1xuICAgIHZhciBzcmMgPSB0b09iamVjdChhcnJheUxpa2UpO1xuICAgIHZhciBsZW4gPSB0b0xlbmd0aChzcmMubGVuZ3RoKTtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIGlmIChsZW4gKyBvZmZzZXQgPiBsZW5ndGgpIHRocm93IFJhbmdlRXJyb3IoV1JPTkdfTEVOR1RIKTtcbiAgICB3aGlsZSAoaW5kZXggPCBsZW4pIHRoaXNbb2Zmc2V0ICsgaW5kZXhdID0gc3JjW2luZGV4KytdO1xuICB9O1xuXG4gIHZhciAkaXRlcmF0b3JzID0ge1xuICAgIGVudHJpZXM6IGZ1bmN0aW9uIGVudHJpZXMoKSB7XG4gICAgICByZXR1cm4gYXJyYXlFbnRyaWVzLmNhbGwodmFsaWRhdGUodGhpcykpO1xuICAgIH0sXG4gICAga2V5czogZnVuY3Rpb24ga2V5cygpIHtcbiAgICAgIHJldHVybiBhcnJheUtleXMuY2FsbCh2YWxpZGF0ZSh0aGlzKSk7XG4gICAgfSxcbiAgICB2YWx1ZXM6IGZ1bmN0aW9uIHZhbHVlcygpIHtcbiAgICAgIHJldHVybiBhcnJheVZhbHVlcy5jYWxsKHZhbGlkYXRlKHRoaXMpKTtcbiAgICB9XG4gIH07XG5cbiAgdmFyIGlzVEFJbmRleCA9IGZ1bmN0aW9uICh0YXJnZXQsIGtleSkge1xuICAgIHJldHVybiBpc09iamVjdCh0YXJnZXQpXG4gICAgICAmJiB0YXJnZXRbVFlQRURfQVJSQVldXG4gICAgICAmJiB0eXBlb2Yga2V5ICE9ICdzeW1ib2wnXG4gICAgICAmJiBrZXkgaW4gdGFyZ2V0XG4gICAgICAmJiBTdHJpbmcoK2tleSkgPT0gU3RyaW5nKGtleSk7XG4gIH07XG4gIHZhciAkZ2V0RGVzYyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkge1xuICAgIHJldHVybiBpc1RBSW5kZXgodGFyZ2V0LCBrZXkgPSB0b1ByaW1pdGl2ZShrZXksIHRydWUpKVxuICAgICAgPyBwcm9wZXJ0eURlc2MoMiwgdGFyZ2V0W2tleV0pXG4gICAgICA6IGdPUEQodGFyZ2V0LCBrZXkpO1xuICB9O1xuICB2YXIgJHNldERlc2MgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgZGVzYykge1xuICAgIGlmIChpc1RBSW5kZXgodGFyZ2V0LCBrZXkgPSB0b1ByaW1pdGl2ZShrZXksIHRydWUpKVxuICAgICAgJiYgaXNPYmplY3QoZGVzYylcbiAgICAgICYmIGhhcyhkZXNjLCAndmFsdWUnKVxuICAgICAgJiYgIWhhcyhkZXNjLCAnZ2V0JylcbiAgICAgICYmICFoYXMoZGVzYywgJ3NldCcpXG4gICAgICAvLyBUT0RPOiBhZGQgdmFsaWRhdGlvbiBkZXNjcmlwdG9yIHcvbyBjYWxsaW5nIGFjY2Vzc29yc1xuICAgICAgJiYgIWRlc2MuY29uZmlndXJhYmxlXG4gICAgICAmJiAoIWhhcyhkZXNjLCAnd3JpdGFibGUnKSB8fCBkZXNjLndyaXRhYmxlKVxuICAgICAgJiYgKCFoYXMoZGVzYywgJ2VudW1lcmFibGUnKSB8fCBkZXNjLmVudW1lcmFibGUpXG4gICAgKSB7XG4gICAgICB0YXJnZXRba2V5XSA9IGRlc2MudmFsdWU7XG4gICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH0gcmV0dXJuIGRQKHRhcmdldCwga2V5LCBkZXNjKTtcbiAgfTtcblxuICBpZiAoIUFMTF9DT05TVFJVQ1RPUlMpIHtcbiAgICAkR09QRC5mID0gJGdldERlc2M7XG4gICAgJERQLmYgPSAkc2V0RGVzYztcbiAgfVxuXG4gICRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIUFMTF9DT05TVFJVQ1RPUlMsICdPYmplY3QnLCB7XG4gICAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiAkZ2V0RGVzYyxcbiAgICBkZWZpbmVQcm9wZXJ0eTogJHNldERlc2NcbiAgfSk7XG5cbiAgaWYgKGZhaWxzKGZ1bmN0aW9uICgpIHsgYXJyYXlUb1N0cmluZy5jYWxsKHt9KTsgfSkpIHtcbiAgICBhcnJheVRvU3RyaW5nID0gYXJyYXlUb0xvY2FsZVN0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgICAgcmV0dXJuIGFycmF5Sm9pbi5jYWxsKHRoaXMpO1xuICAgIH07XG4gIH1cblxuICB2YXIgJFR5cGVkQXJyYXlQcm90b3R5cGUkID0gcmVkZWZpbmVBbGwoe30sIHByb3RvKTtcbiAgcmVkZWZpbmVBbGwoJFR5cGVkQXJyYXlQcm90b3R5cGUkLCAkaXRlcmF0b3JzKTtcbiAgaGlkZSgkVHlwZWRBcnJheVByb3RvdHlwZSQsIElURVJBVE9SLCAkaXRlcmF0b3JzLnZhbHVlcyk7XG4gIHJlZGVmaW5lQWxsKCRUeXBlZEFycmF5UHJvdG90eXBlJCwge1xuICAgIHNsaWNlOiAkc2xpY2UsXG4gICAgc2V0OiAkc2V0LFxuICAgIGNvbnN0cnVjdG9yOiBmdW5jdGlvbiAoKSB7IC8qIG5vb3AgKi8gfSxcbiAgICB0b1N0cmluZzogYXJyYXlUb1N0cmluZyxcbiAgICB0b0xvY2FsZVN0cmluZzogJHRvTG9jYWxlU3RyaW5nXG4gIH0pO1xuICBhZGRHZXR0ZXIoJFR5cGVkQXJyYXlQcm90b3R5cGUkLCAnYnVmZmVyJywgJ2InKTtcbiAgYWRkR2V0dGVyKCRUeXBlZEFycmF5UHJvdG90eXBlJCwgJ2J5dGVPZmZzZXQnLCAnbycpO1xuICBhZGRHZXR0ZXIoJFR5cGVkQXJyYXlQcm90b3R5cGUkLCAnYnl0ZUxlbmd0aCcsICdsJyk7XG4gIGFkZEdldHRlcigkVHlwZWRBcnJheVByb3RvdHlwZSQsICdsZW5ndGgnLCAnZScpO1xuICBkUCgkVHlwZWRBcnJheVByb3RvdHlwZSQsIFRBRywge1xuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpc1tUWVBFRF9BUlJBWV07IH1cbiAgfSk7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1zdGF0ZW1lbnRzXG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEtFWSwgQllURVMsIHdyYXBwZXIsIENMQU1QRUQpIHtcbiAgICBDTEFNUEVEID0gISFDTEFNUEVEO1xuICAgIHZhciBOQU1FID0gS0VZICsgKENMQU1QRUQgPyAnQ2xhbXBlZCcgOiAnJykgKyAnQXJyYXknO1xuICAgIHZhciBHRVRURVIgPSAnZ2V0JyArIEtFWTtcbiAgICB2YXIgU0VUVEVSID0gJ3NldCcgKyBLRVk7XG4gICAgdmFyIFR5cGVkQXJyYXkgPSBnbG9iYWxbTkFNRV07XG4gICAgdmFyIEJhc2UgPSBUeXBlZEFycmF5IHx8IHt9O1xuICAgIHZhciBUQUMgPSBUeXBlZEFycmF5ICYmIGdldFByb3RvdHlwZU9mKFR5cGVkQXJyYXkpO1xuICAgIHZhciBGT1JDRUQgPSAhVHlwZWRBcnJheSB8fCAhJHR5cGVkLkFCVjtcbiAgICB2YXIgTyA9IHt9O1xuICAgIHZhciBUeXBlZEFycmF5UHJvdG90eXBlID0gVHlwZWRBcnJheSAmJiBUeXBlZEFycmF5W1BST1RPVFlQRV07XG4gICAgdmFyIGdldHRlciA9IGZ1bmN0aW9uICh0aGF0LCBpbmRleCkge1xuICAgICAgdmFyIGRhdGEgPSB0aGF0Ll9kO1xuICAgICAgcmV0dXJuIGRhdGEudltHRVRURVJdKGluZGV4ICogQllURVMgKyBkYXRhLm8sIExJVFRMRV9FTkRJQU4pO1xuICAgIH07XG4gICAgdmFyIHNldHRlciA9IGZ1bmN0aW9uICh0aGF0LCBpbmRleCwgdmFsdWUpIHtcbiAgICAgIHZhciBkYXRhID0gdGhhdC5fZDtcbiAgICAgIGlmIChDTEFNUEVEKSB2YWx1ZSA9ICh2YWx1ZSA9IE1hdGgucm91bmQodmFsdWUpKSA8IDAgPyAwIDogdmFsdWUgPiAweGZmID8gMHhmZiA6IHZhbHVlICYgMHhmZjtcbiAgICAgIGRhdGEudltTRVRURVJdKGluZGV4ICogQllURVMgKyBkYXRhLm8sIHZhbHVlLCBMSVRUTEVfRU5ESUFOKTtcbiAgICB9O1xuICAgIHZhciBhZGRFbGVtZW50ID0gZnVuY3Rpb24gKHRoYXQsIGluZGV4KSB7XG4gICAgICBkUCh0aGF0LCBpbmRleCwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gZ2V0dGVyKHRoaXMsIGluZGV4KTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICByZXR1cm4gc2V0dGVyKHRoaXMsIGluZGV4LCB2YWx1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IHRydWVcbiAgICAgIH0pO1xuICAgIH07XG4gICAgaWYgKEZPUkNFRCkge1xuICAgICAgVHlwZWRBcnJheSA9IHdyYXBwZXIoZnVuY3Rpb24gKHRoYXQsIGRhdGEsICRvZmZzZXQsICRsZW5ndGgpIHtcbiAgICAgICAgYW5JbnN0YW5jZSh0aGF0LCBUeXBlZEFycmF5LCBOQU1FLCAnX2QnKTtcbiAgICAgICAgdmFyIGluZGV4ID0gMDtcbiAgICAgICAgdmFyIG9mZnNldCA9IDA7XG4gICAgICAgIHZhciBidWZmZXIsIGJ5dGVMZW5ndGgsIGxlbmd0aCwga2xhc3M7XG4gICAgICAgIGlmICghaXNPYmplY3QoZGF0YSkpIHtcbiAgICAgICAgICBsZW5ndGggPSB0b0luZGV4KGRhdGEpO1xuICAgICAgICAgIGJ5dGVMZW5ndGggPSBsZW5ndGggKiBCWVRFUztcbiAgICAgICAgICBidWZmZXIgPSBuZXcgJEFycmF5QnVmZmVyKGJ5dGVMZW5ndGgpO1xuICAgICAgICB9IGVsc2UgaWYgKGRhdGEgaW5zdGFuY2VvZiAkQXJyYXlCdWZmZXIgfHwgKGtsYXNzID0gY2xhc3NvZihkYXRhKSkgPT0gQVJSQVlfQlVGRkVSIHx8IGtsYXNzID09IFNIQVJFRF9CVUZGRVIpIHtcbiAgICAgICAgICBidWZmZXIgPSBkYXRhO1xuICAgICAgICAgIG9mZnNldCA9IHRvT2Zmc2V0KCRvZmZzZXQsIEJZVEVTKTtcbiAgICAgICAgICB2YXIgJGxlbiA9IGRhdGEuYnl0ZUxlbmd0aDtcbiAgICAgICAgICBpZiAoJGxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBpZiAoJGxlbiAlIEJZVEVTKSB0aHJvdyBSYW5nZUVycm9yKFdST05HX0xFTkdUSCk7XG4gICAgICAgICAgICBieXRlTGVuZ3RoID0gJGxlbiAtIG9mZnNldDtcbiAgICAgICAgICAgIGlmIChieXRlTGVuZ3RoIDwgMCkgdGhyb3cgUmFuZ2VFcnJvcihXUk9OR19MRU5HVEgpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBieXRlTGVuZ3RoID0gdG9MZW5ndGgoJGxlbmd0aCkgKiBCWVRFUztcbiAgICAgICAgICAgIGlmIChieXRlTGVuZ3RoICsgb2Zmc2V0ID4gJGxlbikgdGhyb3cgUmFuZ2VFcnJvcihXUk9OR19MRU5HVEgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBsZW5ndGggPSBieXRlTGVuZ3RoIC8gQllURVM7XG4gICAgICAgIH0gZWxzZSBpZiAoVFlQRURfQVJSQVkgaW4gZGF0YSkge1xuICAgICAgICAgIHJldHVybiBmcm9tTGlzdChUeXBlZEFycmF5LCBkYXRhKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gJGZyb20uY2FsbChUeXBlZEFycmF5LCBkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBoaWRlKHRoYXQsICdfZCcsIHtcbiAgICAgICAgICBiOiBidWZmZXIsXG4gICAgICAgICAgbzogb2Zmc2V0LFxuICAgICAgICAgIGw6IGJ5dGVMZW5ndGgsXG4gICAgICAgICAgZTogbGVuZ3RoLFxuICAgICAgICAgIHY6IG5ldyAkRGF0YVZpZXcoYnVmZmVyKVxuICAgICAgICB9KTtcbiAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSBhZGRFbGVtZW50KHRoYXQsIGluZGV4KyspO1xuICAgICAgfSk7XG4gICAgICBUeXBlZEFycmF5UHJvdG90eXBlID0gVHlwZWRBcnJheVtQUk9UT1RZUEVdID0gY3JlYXRlKCRUeXBlZEFycmF5UHJvdG90eXBlJCk7XG4gICAgICBoaWRlKFR5cGVkQXJyYXlQcm90b3R5cGUsICdjb25zdHJ1Y3RvcicsIFR5cGVkQXJyYXkpO1xuICAgIH0gZWxzZSBpZiAoIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAgIFR5cGVkQXJyYXkoMSk7XG4gICAgfSkgfHwgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAgIG5ldyBUeXBlZEFycmF5KC0xKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICB9KSB8fCAhJGl0ZXJEZXRlY3QoZnVuY3Rpb24gKGl0ZXIpIHtcbiAgICAgIG5ldyBUeXBlZEFycmF5KCk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgICBuZXcgVHlwZWRBcnJheShudWxsKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICAgIG5ldyBUeXBlZEFycmF5KDEuNSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgICBuZXcgVHlwZWRBcnJheShpdGVyKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICB9LCB0cnVlKSkge1xuICAgICAgVHlwZWRBcnJheSA9IHdyYXBwZXIoZnVuY3Rpb24gKHRoYXQsIGRhdGEsICRvZmZzZXQsICRsZW5ndGgpIHtcbiAgICAgICAgYW5JbnN0YW5jZSh0aGF0LCBUeXBlZEFycmF5LCBOQU1FKTtcbiAgICAgICAgdmFyIGtsYXNzO1xuICAgICAgICAvLyBgd3NgIG1vZHVsZSBidWcsIHRlbXBvcmFyaWx5IHJlbW92ZSB2YWxpZGF0aW9uIGxlbmd0aCBmb3IgVWludDhBcnJheVxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vd2Vic29ja2V0cy93cy9wdWxsLzY0NVxuICAgICAgICBpZiAoIWlzT2JqZWN0KGRhdGEpKSByZXR1cm4gbmV3IEJhc2UodG9JbmRleChkYXRhKSk7XG4gICAgICAgIGlmIChkYXRhIGluc3RhbmNlb2YgJEFycmF5QnVmZmVyIHx8IChrbGFzcyA9IGNsYXNzb2YoZGF0YSkpID09IEFSUkFZX0JVRkZFUiB8fCBrbGFzcyA9PSBTSEFSRURfQlVGRkVSKSB7XG4gICAgICAgICAgcmV0dXJuICRsZW5ndGggIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyBuZXcgQmFzZShkYXRhLCB0b09mZnNldCgkb2Zmc2V0LCBCWVRFUyksICRsZW5ndGgpXG4gICAgICAgICAgICA6ICRvZmZzZXQgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICA/IG5ldyBCYXNlKGRhdGEsIHRvT2Zmc2V0KCRvZmZzZXQsIEJZVEVTKSlcbiAgICAgICAgICAgICAgOiBuZXcgQmFzZShkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoVFlQRURfQVJSQVkgaW4gZGF0YSkgcmV0dXJuIGZyb21MaXN0KFR5cGVkQXJyYXksIGRhdGEpO1xuICAgICAgICByZXR1cm4gJGZyb20uY2FsbChUeXBlZEFycmF5LCBkYXRhKTtcbiAgICAgIH0pO1xuICAgICAgYXJyYXlGb3JFYWNoKFRBQyAhPT0gRnVuY3Rpb24ucHJvdG90eXBlID8gZ09QTihCYXNlKS5jb25jYXQoZ09QTihUQUMpKSA6IGdPUE4oQmFzZSksIGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgaWYgKCEoa2V5IGluIFR5cGVkQXJyYXkpKSBoaWRlKFR5cGVkQXJyYXksIGtleSwgQmFzZVtrZXldKTtcbiAgICAgIH0pO1xuICAgICAgVHlwZWRBcnJheVtQUk9UT1RZUEVdID0gVHlwZWRBcnJheVByb3RvdHlwZTtcbiAgICAgIGlmICghTElCUkFSWSkgVHlwZWRBcnJheVByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFR5cGVkQXJyYXk7XG4gICAgfVxuICAgIHZhciAkbmF0aXZlSXRlcmF0b3IgPSBUeXBlZEFycmF5UHJvdG90eXBlW0lURVJBVE9SXTtcbiAgICB2YXIgQ09SUkVDVF9JVEVSX05BTUUgPSAhISRuYXRpdmVJdGVyYXRvclxuICAgICAgJiYgKCRuYXRpdmVJdGVyYXRvci5uYW1lID09ICd2YWx1ZXMnIHx8ICRuYXRpdmVJdGVyYXRvci5uYW1lID09IHVuZGVmaW5lZCk7XG4gICAgdmFyICRpdGVyYXRvciA9ICRpdGVyYXRvcnMudmFsdWVzO1xuICAgIGhpZGUoVHlwZWRBcnJheSwgVFlQRURfQ09OU1RSVUNUT1IsIHRydWUpO1xuICAgIGhpZGUoVHlwZWRBcnJheVByb3RvdHlwZSwgVFlQRURfQVJSQVksIE5BTUUpO1xuICAgIGhpZGUoVHlwZWRBcnJheVByb3RvdHlwZSwgVklFVywgdHJ1ZSk7XG4gICAgaGlkZShUeXBlZEFycmF5UHJvdG90eXBlLCBERUZfQ09OU1RSVUNUT1IsIFR5cGVkQXJyYXkpO1xuXG4gICAgaWYgKENMQU1QRUQgPyBuZXcgVHlwZWRBcnJheSgxKVtUQUddICE9IE5BTUUgOiAhKFRBRyBpbiBUeXBlZEFycmF5UHJvdG90eXBlKSkge1xuICAgICAgZFAoVHlwZWRBcnJheVByb3RvdHlwZSwgVEFHLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gTkFNRTsgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgT1tOQU1FXSA9IFR5cGVkQXJyYXk7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuVyArICRleHBvcnQuRiAqIChUeXBlZEFycmF5ICE9IEJhc2UpLCBPKTtcblxuICAgICRleHBvcnQoJGV4cG9ydC5TLCBOQU1FLCB7XG4gICAgICBCWVRFU19QRVJfRUxFTUVOVDogQllURVNcbiAgICB9KTtcblxuICAgICRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogZmFpbHMoZnVuY3Rpb24gKCkgeyBCYXNlLm9mLmNhbGwoVHlwZWRBcnJheSwgMSk7IH0pLCBOQU1FLCB7XG4gICAgICBmcm9tOiAkZnJvbSxcbiAgICAgIG9mOiAkb2ZcbiAgICB9KTtcblxuICAgIGlmICghKEJZVEVTX1BFUl9FTEVNRU5UIGluIFR5cGVkQXJyYXlQcm90b3R5cGUpKSBoaWRlKFR5cGVkQXJyYXlQcm90b3R5cGUsIEJZVEVTX1BFUl9FTEVNRU5ULCBCWVRFUyk7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuUCwgTkFNRSwgcHJvdG8pO1xuXG4gICAgc2V0U3BlY2llcyhOQU1FKTtcblxuICAgICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogRk9SQ0VEX1NFVCwgTkFNRSwgeyBzZXQ6ICRzZXQgfSk7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFDT1JSRUNUX0lURVJfTkFNRSwgTkFNRSwgJGl0ZXJhdG9ycyk7XG5cbiAgICBpZiAoIUxJQlJBUlkgJiYgVHlwZWRBcnJheVByb3RvdHlwZS50b1N0cmluZyAhPSBhcnJheVRvU3RyaW5nKSBUeXBlZEFycmF5UHJvdG90eXBlLnRvU3RyaW5nID0gYXJyYXlUb1N0cmluZztcblxuICAgICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgICAgbmV3IFR5cGVkQXJyYXkoMSkuc2xpY2UoKTtcbiAgICB9KSwgTkFNRSwgeyBzbGljZTogJHNsaWNlIH0pO1xuXG4gICAgJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIFsxLCAyXS50b0xvY2FsZVN0cmluZygpICE9IG5ldyBUeXBlZEFycmF5KFsxLCAyXSkudG9Mb2NhbGVTdHJpbmcoKTtcbiAgICB9KSB8fCAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgICAgVHlwZWRBcnJheVByb3RvdHlwZS50b0xvY2FsZVN0cmluZy5jYWxsKFsxLCAyXSk7XG4gICAgfSkpLCBOQU1FLCB7IHRvTG9jYWxlU3RyaW5nOiAkdG9Mb2NhbGVTdHJpbmcgfSk7XG5cbiAgICBJdGVyYXRvcnNbTkFNRV0gPSBDT1JSRUNUX0lURVJfTkFNRSA/ICRuYXRpdmVJdGVyYXRvciA6ICRpdGVyYXRvcjtcbiAgICBpZiAoIUxJQlJBUlkgJiYgIUNPUlJFQ1RfSVRFUl9OQU1FKSBoaWRlKFR5cGVkQXJyYXlQcm90b3R5cGUsIElURVJBVE9SLCAkaXRlcmF0b3IpO1xuICB9O1xufSBlbHNlIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///27\n")},function(module,exports,__webpack_require__){eval("var Map = __webpack_require__(117);\nvar $export = __webpack_require__(0);\nvar shared = __webpack_require__(47)('metadata');\nvar store = shared.store || (shared.store = new (__webpack_require__(120))());\n\nvar getOrCreateMetadataMap = function (target, targetKey, create) {\n var targetMetadata = store.get(target);\n if (!targetMetadata) {\n if (!create) return undefined;\n store.set(target, targetMetadata = new Map());\n }\n var keyMetadata = targetMetadata.get(targetKey);\n if (!keyMetadata) {\n if (!create) return undefined;\n targetMetadata.set(targetKey, keyMetadata = new Map());\n } return keyMetadata;\n};\nvar ordinaryHasOwnMetadata = function (MetadataKey, O, P) {\n var metadataMap = getOrCreateMetadataMap(O, P, false);\n return metadataMap === undefined ? false : metadataMap.has(MetadataKey);\n};\nvar ordinaryGetOwnMetadata = function (MetadataKey, O, P) {\n var metadataMap = getOrCreateMetadataMap(O, P, false);\n return metadataMap === undefined ? undefined : metadataMap.get(MetadataKey);\n};\nvar ordinaryDefineOwnMetadata = function (MetadataKey, MetadataValue, O, P) {\n getOrCreateMetadataMap(O, P, true).set(MetadataKey, MetadataValue);\n};\nvar ordinaryOwnMetadataKeys = function (target, targetKey) {\n var metadataMap = getOrCreateMetadataMap(target, targetKey, false);\n var keys = [];\n if (metadataMap) metadataMap.forEach(function (_, key) { keys.push(key); });\n return keys;\n};\nvar toMetaKey = function (it) {\n return it === undefined || typeof it == 'symbol' ? it : String(it);\n};\nvar exp = function (O) {\n $export($export.S, 'Reflect', O);\n};\n\nmodule.exports = {\n store: store,\n map: getOrCreateMetadataMap,\n has: ordinaryHasOwnMetadata,\n get: ordinaryGetOwnMetadata,\n set: ordinaryDefineOwnMetadata,\n keys: ordinaryOwnMetadataKeys,\n key: toMetaKey,\n exp: exp\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWV0YWRhdGEuanM/MzdhNyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxVQUFVLG1CQUFPLENBQUMsR0FBVztBQUM3QixjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxhQUFhLG1CQUFPLENBQUMsRUFBVztBQUNoQyxpREFBaUQsbUJBQU8sQ0FBQyxHQUFnQjs7QUFFekU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMERBQTBELGdCQUFnQixFQUFFO0FBQzVFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMjguanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgTWFwID0gcmVxdWlyZSgnLi9lczYubWFwJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4vX3NoYXJlZCcpKCdtZXRhZGF0YScpO1xudmFyIHN0b3JlID0gc2hhcmVkLnN0b3JlIHx8IChzaGFyZWQuc3RvcmUgPSBuZXcgKHJlcXVpcmUoJy4vZXM2LndlYWstbWFwJykpKCkpO1xuXG52YXIgZ2V0T3JDcmVhdGVNZXRhZGF0YU1hcCA9IGZ1bmN0aW9uICh0YXJnZXQsIHRhcmdldEtleSwgY3JlYXRlKSB7XG4gIHZhciB0YXJnZXRNZXRhZGF0YSA9IHN0b3JlLmdldCh0YXJnZXQpO1xuICBpZiAoIXRhcmdldE1ldGFkYXRhKSB7XG4gICAgaWYgKCFjcmVhdGUpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgc3RvcmUuc2V0KHRhcmdldCwgdGFyZ2V0TWV0YWRhdGEgPSBuZXcgTWFwKCkpO1xuICB9XG4gIHZhciBrZXlNZXRhZGF0YSA9IHRhcmdldE1ldGFkYXRhLmdldCh0YXJnZXRLZXkpO1xuICBpZiAoIWtleU1ldGFkYXRhKSB7XG4gICAgaWYgKCFjcmVhdGUpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgdGFyZ2V0TWV0YWRhdGEuc2V0KHRhcmdldEtleSwga2V5TWV0YWRhdGEgPSBuZXcgTWFwKCkpO1xuICB9IHJldHVybiBrZXlNZXRhZGF0YTtcbn07XG52YXIgb3JkaW5hcnlIYXNPd25NZXRhZGF0YSA9IGZ1bmN0aW9uIChNZXRhZGF0YUtleSwgTywgUCkge1xuICB2YXIgbWV0YWRhdGFNYXAgPSBnZXRPckNyZWF0ZU1ldGFkYXRhTWFwKE8sIFAsIGZhbHNlKTtcbiAgcmV0dXJuIG1ldGFkYXRhTWFwID09PSB1bmRlZmluZWQgPyBmYWxzZSA6IG1ldGFkYXRhTWFwLmhhcyhNZXRhZGF0YUtleSk7XG59O1xudmFyIG9yZGluYXJ5R2V0T3duTWV0YWRhdGEgPSBmdW5jdGlvbiAoTWV0YWRhdGFLZXksIE8sIFApIHtcbiAgdmFyIG1ldGFkYXRhTWFwID0gZ2V0T3JDcmVhdGVNZXRhZGF0YU1hcChPLCBQLCBmYWxzZSk7XG4gIHJldHVybiBtZXRhZGF0YU1hcCA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogbWV0YWRhdGFNYXAuZ2V0KE1ldGFkYXRhS2V5KTtcbn07XG52YXIgb3JkaW5hcnlEZWZpbmVPd25NZXRhZGF0YSA9IGZ1bmN0aW9uIChNZXRhZGF0YUtleSwgTWV0YWRhdGFWYWx1ZSwgTywgUCkge1xuICBnZXRPckNyZWF0ZU1ldGFkYXRhTWFwKE8sIFAsIHRydWUpLnNldChNZXRhZGF0YUtleSwgTWV0YWRhdGFWYWx1ZSk7XG59O1xudmFyIG9yZGluYXJ5T3duTWV0YWRhdGFLZXlzID0gZnVuY3Rpb24gKHRhcmdldCwgdGFyZ2V0S2V5KSB7XG4gIHZhciBtZXRhZGF0YU1hcCA9IGdldE9yQ3JlYXRlTWV0YWRhdGFNYXAodGFyZ2V0LCB0YXJnZXRLZXksIGZhbHNlKTtcbiAgdmFyIGtleXMgPSBbXTtcbiAgaWYgKG1ldGFkYXRhTWFwKSBtZXRhZGF0YU1hcC5mb3JFYWNoKGZ1bmN0aW9uIChfLCBrZXkpIHsga2V5cy5wdXNoKGtleSk7IH0pO1xuICByZXR1cm4ga2V5cztcbn07XG52YXIgdG9NZXRhS2V5ID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiBpdCA9PSAnc3ltYm9sJyA/IGl0IDogU3RyaW5nKGl0KTtcbn07XG52YXIgZXhwID0gZnVuY3Rpb24gKE8pIHtcbiAgJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0JywgTyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc3RvcmU6IHN0b3JlLFxuICBtYXA6IGdldE9yQ3JlYXRlTWV0YWRhdGFNYXAsXG4gIGhhczogb3JkaW5hcnlIYXNPd25NZXRhZGF0YSxcbiAgZ2V0OiBvcmRpbmFyeUdldE93bk1ldGFkYXRhLFxuICBzZXQ6IG9yZGluYXJ5RGVmaW5lT3duTWV0YWRhdGEsXG4gIGtleXM6IG9yZGluYXJ5T3duTWV0YWRhdGFLZXlzLFxuICBrZXk6IHRvTWV0YUtleSxcbiAgZXhwOiBleHBcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///28\n")},function(module,exports){eval("module.exports = false;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbGlicmFyeS5qcz8yZDAwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBIiwiZmlsZSI6IjI5LmpzIiwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBmYWxzZTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///29\n")},function(module,exports,__webpack_require__){eval("var META = __webpack_require__(33)('meta');\nvar isObject = __webpack_require__(4);\nvar has = __webpack_require__(14);\nvar setDesc = __webpack_require__(8).f;\nvar id = 0;\nvar isExtensible = Object.isExtensible || function () {\n return true;\n};\nvar FREEZE = !__webpack_require__(3)(function () {\n return isExtensible(Object.preventExtensions({}));\n});\nvar setMeta = function (it) {\n setDesc(it, META, { value: {\n i: 'O' + ++id, // object ID\n w: {} // weak collections IDs\n } });\n};\nvar fastKey = function (it, create) {\n // return primitive with prefix\n if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return 'F';\n // not necessary to add metadata\n if (!create) return 'E';\n // add missing metadata\n setMeta(it);\n // return object ID\n } return it[META].i;\n};\nvar getWeak = function (it, create) {\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return true;\n // not necessary to add metadata\n if (!create) return false;\n // add missing metadata\n setMeta(it);\n // return hash weak collections IDs\n } return it[META].w;\n};\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);\n return it;\n};\nvar meta = module.exports = {\n KEY: META,\n NEED: false,\n fastKey: fastKey,\n getWeak: getWeak,\n onFreeze: onFreeze\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWV0YS5qcz82N2FiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFdBQVcsbUJBQU8sQ0FBQyxFQUFRO0FBQzNCLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLFVBQVUsbUJBQU8sQ0FBQyxFQUFRO0FBQzFCLGNBQWMsbUJBQU8sQ0FBQyxDQUFjO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVU7QUFDaEMsaURBQWlEO0FBQ2pELENBQUM7QUFDRDtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBLFNBQVM7QUFDVCxHQUFHLEVBQUU7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMzAuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgTUVUQSA9IHJlcXVpcmUoJy4vX3VpZCcpKCdtZXRhJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciBzZXREZXNjID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbnZhciBpZCA9IDA7XG52YXIgaXNFeHRlbnNpYmxlID0gT2JqZWN0LmlzRXh0ZW5zaWJsZSB8fCBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0cnVlO1xufTtcbnZhciBGUkVFWkUgPSAhcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBpc0V4dGVuc2libGUoT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKHt9KSk7XG59KTtcbnZhciBzZXRNZXRhID0gZnVuY3Rpb24gKGl0KSB7XG4gIHNldERlc2MoaXQsIE1FVEEsIHsgdmFsdWU6IHtcbiAgICBpOiAnTycgKyArK2lkLCAvLyBvYmplY3QgSURcbiAgICB3OiB7fSAgICAgICAgICAvLyB3ZWFrIGNvbGxlY3Rpb25zIElEc1xuICB9IH0pO1xufTtcbnZhciBmYXN0S2V5ID0gZnVuY3Rpb24gKGl0LCBjcmVhdGUpIHtcbiAgLy8gcmV0dXJuIHByaW1pdGl2ZSB3aXRoIHByZWZpeFxuICBpZiAoIWlzT2JqZWN0KGl0KSkgcmV0dXJuIHR5cGVvZiBpdCA9PSAnc3ltYm9sJyA/IGl0IDogKHR5cGVvZiBpdCA9PSAnc3RyaW5nJyA/ICdTJyA6ICdQJykgKyBpdDtcbiAgaWYgKCFoYXMoaXQsIE1FVEEpKSB7XG4gICAgLy8gY2FuJ3Qgc2V0IG1ldGFkYXRhIHRvIHVuY2F1Z2h0IGZyb3plbiBvYmplY3RcbiAgICBpZiAoIWlzRXh0ZW5zaWJsZShpdCkpIHJldHVybiAnRic7XG4gICAgLy8gbm90IG5lY2Vzc2FyeSB0byBhZGQgbWV0YWRhdGFcbiAgICBpZiAoIWNyZWF0ZSkgcmV0dXJuICdFJztcbiAgICAvLyBhZGQgbWlzc2luZyBtZXRhZGF0YVxuICAgIHNldE1ldGEoaXQpO1xuICAvLyByZXR1cm4gb2JqZWN0IElEXG4gIH0gcmV0dXJuIGl0W01FVEFdLmk7XG59O1xudmFyIGdldFdlYWsgPSBmdW5jdGlvbiAoaXQsIGNyZWF0ZSkge1xuICBpZiAoIWhhcyhpdCwgTUVUQSkpIHtcbiAgICAvLyBjYW4ndCBzZXQgbWV0YWRhdGEgdG8gdW5jYXVnaHQgZnJvemVuIG9iamVjdFxuICAgIGlmICghaXNFeHRlbnNpYmxlKGl0KSkgcmV0dXJuIHRydWU7XG4gICAgLy8gbm90IG5lY2Vzc2FyeSB0byBhZGQgbWV0YWRhdGFcbiAgICBpZiAoIWNyZWF0ZSkgcmV0dXJuIGZhbHNlO1xuICAgIC8vIGFkZCBtaXNzaW5nIG1ldGFkYXRhXG4gICAgc2V0TWV0YShpdCk7XG4gIC8vIHJldHVybiBoYXNoIHdlYWsgY29sbGVjdGlvbnMgSURzXG4gIH0gcmV0dXJuIGl0W01FVEFdLnc7XG59O1xuLy8gYWRkIG1ldGFkYXRhIG9uIGZyZWV6ZS1mYW1pbHkgbWV0aG9kcyBjYWxsaW5nXG52YXIgb25GcmVlemUgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKEZSRUVaRSAmJiBtZXRhLk5FRUQgJiYgaXNFeHRlbnNpYmxlKGl0KSAmJiAhaGFzKGl0LCBNRVRBKSkgc2V0TWV0YShpdCk7XG4gIHJldHVybiBpdDtcbn07XG52YXIgbWV0YSA9IG1vZHVsZS5leHBvcnRzID0ge1xuICBLRVk6IE1FVEEsXG4gIE5FRUQ6IGZhbHNlLFxuICBmYXN0S2V5OiBmYXN0S2V5LFxuICBnZXRXZWFrOiBnZXRXZWFrLFxuICBvbkZyZWV6ZTogb25GcmVlemVcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///30\n")},function(module,exports,__webpack_require__){eval("// 22.1.3.31 Array.prototype[@@unscopables]\nvar UNSCOPABLES = __webpack_require__(5)('unscopables');\nvar ArrayProto = Array.prototype;\nif (ArrayProto[UNSCOPABLES] == undefined) __webpack_require__(11)(ArrayProto, UNSCOPABLES, {});\nmodule.exports = function (key) {\n ArrayProto[UNSCOPABLES][key] = true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYWRkLXRvLXVuc2NvcGFibGVzLmpzPzljNmMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxrQkFBa0IsbUJBQU8sQ0FBQyxDQUFRO0FBQ2xDO0FBQ0EsMENBQTBDLG1CQUFPLENBQUMsRUFBUyw2QkFBNkI7QUFDeEY7QUFDQTtBQUNBIiwiZmlsZSI6IjMxLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjIuMS4zLjMxIEFycmF5LnByb3RvdHlwZVtAQHVuc2NvcGFibGVzXVxudmFyIFVOU0NPUEFCTEVTID0gcmVxdWlyZSgnLi9fd2tzJykoJ3Vuc2NvcGFibGVzJyk7XG52YXIgQXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZTtcbmlmIChBcnJheVByb3RvW1VOU0NPUEFCTEVTXSA9PSB1bmRlZmluZWQpIHJlcXVpcmUoJy4vX2hpZGUnKShBcnJheVByb3RvLCBVTlNDT1BBQkxFUywge30pO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIEFycmF5UHJvdG9bVU5TQ09QQUJMRVNdW2tleV0gPSB0cnVlO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///31\n")},function(module,exports){eval("module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcHJvcGVydHktZGVzYy5qcz80NjMwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMzIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChiaXRtYXAsIHZhbHVlKSB7XG4gIHJldHVybiB7XG4gICAgZW51bWVyYWJsZTogIShiaXRtYXAgJiAxKSxcbiAgICBjb25maWd1cmFibGU6ICEoYml0bWFwICYgMiksXG4gICAgd3JpdGFibGU6ICEoYml0bWFwICYgNCksXG4gICAgdmFsdWU6IHZhbHVlXG4gIH07XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///32\n")},function(module,exports){eval("var id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdWlkLmpzP2NhNWEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIzMy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBpZCA9IDA7XG52YXIgcHggPSBNYXRoLnJhbmRvbSgpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiAnU3ltYm9sKCcuY29uY2F0KGtleSA9PT0gdW5kZWZpbmVkID8gJycgOiBrZXksICcpXycsICgrK2lkICsgcHgpLnRvU3RyaW5nKDM2KSk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///33\n")},function(module,exports,__webpack_require__){eval("// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = __webpack_require__(96);\nvar enumBugKeys = __webpack_require__(69);\n\nmodule.exports = Object.keys || function keys(O) {\n return $keys(O, enumBugKeys);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWtleXMuanM/MGQ1OCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLFlBQVksbUJBQU8sQ0FBQyxFQUF5QjtBQUM3QyxrQkFBa0IsbUJBQU8sQ0FBQyxFQUFrQjs7QUFFNUM7QUFDQTtBQUNBIiwiZmlsZSI6IjM0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMTkuMS4yLjE0IC8gMTUuMi4zLjE0IE9iamVjdC5rZXlzKE8pXG52YXIgJGtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cy1pbnRlcm5hbCcpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi9fZW51bS1idWcta2V5cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIGtleXMoTykge1xuICByZXR1cm4gJGtleXMoTywgZW51bUJ1Z0tleXMpO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///34\n")},function(module,exports,__webpack_require__){eval("var toInteger = __webpack_require__(21);\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n index = toInteger(index);\n return index < 0 ? max(index + length, 0) : min(index, length);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8tYWJzb2x1dGUtaW5kZXguanM/NzdmMSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIzNS5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgbWluID0gTWF0aC5taW47XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbmRleCwgbGVuZ3RoKSB7XG4gIGluZGV4ID0gdG9JbnRlZ2VyKGluZGV4KTtcbiAgcmV0dXJuIGluZGV4IDwgMCA/IG1heChpbmRleCArIGxlbmd0aCwgMCkgOiBtaW4oaW5kZXgsIGxlbmd0aCk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///35\n")},function(module,exports,__webpack_require__){eval("// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = __webpack_require__(1);\nvar dPs = __webpack_require__(97);\nvar enumBugKeys = __webpack_require__(69);\nvar IE_PROTO = __webpack_require__(68)('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = __webpack_require__(66)('iframe');\n var i = enumBugKeys.length;\n var lt = '<';\n var gt = '>';\n var iframeDocument;\n iframe.style.display = 'none';\n __webpack_require__(70).appendChild(iframe);\n iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n // createDict = iframe.contentWindow.Object;\n // html.removeChild(iframe);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n iframeDocument.close();\n createDict = iframeDocument.F;\n while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n Empty[PROTOTYPE] = anObject(O);\n result = new Empty();\n Empty[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = createDict();\n return Properties === undefined ? result : dPs(result, Properties);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWNyZWF0ZS5qcz8yYWViIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsVUFBVSxtQkFBTyxDQUFDLEVBQWU7QUFDakMsa0JBQWtCLG1CQUFPLENBQUMsRUFBa0I7QUFDNUMsZUFBZSxtQkFBTyxDQUFDLEVBQWU7QUFDdEMseUJBQXlCO0FBQ3pCOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsbUJBQU8sQ0FBQyxFQUFlO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLG1CQUFPLENBQUMsRUFBUztBQUNuQiw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBIiwiZmlsZSI6IjM2LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMTkuMS4yLjIgLyAxNS4yLjMuNSBPYmplY3QuY3JlYXRlKE8gWywgUHJvcGVydGllc10pXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBkUHMgPSByZXF1aXJlKCcuL19vYmplY3QtZHBzJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuL19lbnVtLWJ1Zy1rZXlzJyk7XG52YXIgSUVfUFJPVE8gPSByZXF1aXJlKCcuL19zaGFyZWQta2V5JykoJ0lFX1BST1RPJyk7XG52YXIgRW1wdHkgPSBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH07XG52YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG5cbi8vIENyZWF0ZSBvYmplY3Qgd2l0aCBmYWtlIGBudWxsYCBwcm90b3R5cGU6IHVzZSBpZnJhbWUgT2JqZWN0IHdpdGggY2xlYXJlZCBwcm90b3R5cGVcbnZhciBjcmVhdGVEaWN0ID0gZnVuY3Rpb24gKCkge1xuICAvLyBUaHJhc2gsIHdhc3RlIGFuZCBzb2RvbXk6IElFIEdDIGJ1Z1xuICB2YXIgaWZyYW1lID0gcmVxdWlyZSgnLi9fZG9tLWNyZWF0ZScpKCdpZnJhbWUnKTtcbiAgdmFyIGkgPSBlbnVtQnVnS2V5cy5sZW5ndGg7XG4gIHZhciBsdCA9ICc8JztcbiAgdmFyIGd0ID0gJz4nO1xuICB2YXIgaWZyYW1lRG9jdW1lbnQ7XG4gIGlmcmFtZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICByZXF1aXJlKCcuL19odG1sJykuYXBwZW5kQ2hpbGQoaWZyYW1lKTtcbiAgaWZyYW1lLnNyYyA9ICdqYXZhc2NyaXB0Oic7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tc2NyaXB0LXVybFxuICAvLyBjcmVhdGVEaWN0ID0gaWZyYW1lLmNvbnRlbnRXaW5kb3cuT2JqZWN0O1xuICAvLyBodG1sLnJlbW92ZUNoaWxkKGlmcmFtZSk7XG4gIGlmcmFtZURvY3VtZW50ID0gaWZyYW1lLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQ7XG4gIGlmcmFtZURvY3VtZW50Lm9wZW4oKTtcbiAgaWZyYW1lRG9jdW1lbnQud3JpdGUobHQgKyAnc2NyaXB0JyArIGd0ICsgJ2RvY3VtZW50LkY9T2JqZWN0JyArIGx0ICsgJy9zY3JpcHQnICsgZ3QpO1xuICBpZnJhbWVEb2N1bWVudC5jbG9zZSgpO1xuICBjcmVhdGVEaWN0ID0gaWZyYW1lRG9jdW1lbnQuRjtcbiAgd2hpbGUgKGktLSkgZGVsZXRlIGNyZWF0ZURpY3RbUFJPVE9UWVBFXVtlbnVtQnVnS2V5c1tpXV07XG4gIHJldHVybiBjcmVhdGVEaWN0KCk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5jcmVhdGUgfHwgZnVuY3Rpb24gY3JlYXRlKE8sIFByb3BlcnRpZXMpIHtcbiAgdmFyIHJlc3VsdDtcbiAgaWYgKE8gIT09IG51bGwpIHtcbiAgICBFbXB0eVtQUk9UT1RZUEVdID0gYW5PYmplY3QoTyk7XG4gICAgcmVzdWx0ID0gbmV3IEVtcHR5KCk7XG4gICAgRW1wdHlbUFJPVE9UWVBFXSA9IG51bGw7XG4gICAgLy8gYWRkIFwiX19wcm90b19fXCIgZm9yIE9iamVjdC5nZXRQcm90b3R5cGVPZiBwb2x5ZmlsbFxuICAgIHJlc3VsdFtJRV9QUk9UT10gPSBPO1xuICB9IGVsc2UgcmVzdWx0ID0gY3JlYXRlRGljdCgpO1xuICByZXR1cm4gUHJvcGVydGllcyA9PT0gdW5kZWZpbmVkID8gcmVzdWx0IDogZFBzKHJlc3VsdCwgUHJvcGVydGllcyk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///36\n")},function(module,exports,__webpack_require__){eval("// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\nvar $keys = __webpack_require__(96);\nvar hiddenKeys = __webpack_require__(69).concat('length', 'prototype');\n\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return $keys(O, hiddenKeys);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdvcG4uanM/OTA5MyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLFlBQVksbUJBQU8sQ0FBQyxFQUF5QjtBQUM3QyxpQkFBaUIsbUJBQU8sQ0FBQyxFQUFrQjs7QUFFM0M7QUFDQTtBQUNBIiwiZmlsZSI6IjM3LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMTkuMS4yLjcgLyAxNS4yLjMuNCBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhPKVxudmFyICRrZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMtaW50ZXJuYWwnKTtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi9fZW51bS1idWcta2V5cycpLmNvbmNhdCgnbGVuZ3RoJywgJ3Byb3RvdHlwZScpO1xuXG5leHBvcnRzLmYgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB8fCBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKE8pIHtcbiAgcmV0dXJuICRrZXlzKE8sIGhpZGRlbktleXMpO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///37\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar global = __webpack_require__(2);\nvar dP = __webpack_require__(8);\nvar DESCRIPTORS = __webpack_require__(7);\nvar SPECIES = __webpack_require__(5)('species');\n\nmodule.exports = function (KEY) {\n var C = global[KEY];\n if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2V0LXNwZWNpZXMuanM/N2E1NiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGFBQWEsbUJBQU8sQ0FBQyxDQUFXO0FBQ2hDLFNBQVMsbUJBQU8sQ0FBQyxDQUFjO0FBQy9CLGtCQUFrQixtQkFBTyxDQUFDLENBQWdCO0FBQzFDLGNBQWMsbUJBQU8sQ0FBQyxDQUFROztBQUU5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQixhQUFhO0FBQ25DLEdBQUc7QUFDSCIsImZpbGUiOiIzOC5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKTtcbnZhciBTUEVDSUVTID0gcmVxdWlyZSgnLi9fd2tzJykoJ3NwZWNpZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoS0VZKSB7XG4gIHZhciBDID0gZ2xvYmFsW0tFWV07XG4gIGlmIChERVNDUklQVE9SUyAmJiBDICYmICFDW1NQRUNJRVNdKSBkUC5mKEMsIFNQRUNJRVMsIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9XG4gIH0pO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///38\n")},function(module,exports){eval("module.exports = function (it, Constructor, name, forbiddenField) {\n if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) {\n throw TypeError(name + ': incorrect invocation!');\n } return it;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYW4taW5zdGFuY2UuanM/ZjYwNSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0giLCJmaWxlIjoiMzkuanMiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgQ29uc3RydWN0b3IsIG5hbWUsIGZvcmJpZGRlbkZpZWxkKSB7XG4gIGlmICghKGl0IGluc3RhbmNlb2YgQ29uc3RydWN0b3IpIHx8IChmb3JiaWRkZW5GaWVsZCAhPT0gdW5kZWZpbmVkICYmIGZvcmJpZGRlbkZpZWxkIGluIGl0KSkge1xuICAgIHRocm93IFR5cGVFcnJvcihuYW1lICsgJzogaW5jb3JyZWN0IGludm9jYXRpb24hJyk7XG4gIH0gcmV0dXJuIGl0O1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///39\n")},function(module,exports,__webpack_require__){eval("var ctx = __webpack_require__(19);\nvar call = __webpack_require__(109);\nvar isArrayIter = __webpack_require__(81);\nvar anObject = __webpack_require__(1);\nvar toLength = __webpack_require__(6);\nvar getIterFn = __webpack_require__(83);\nvar BREAK = {};\nvar RETURN = {};\nvar exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {\n var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable);\n var f = ctx(fn, that, entries ? 2 : 1);\n var index = 0;\n var length, step, iterator, result;\n if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');\n // fast case for arrays with default iterator\n if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {\n result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);\n if (result === BREAK || result === RETURN) return result;\n } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {\n result = call(iterator, f, step.value, entries);\n if (result === BREAK || result === RETURN) return result;\n }\n};\nexports.BREAK = BREAK;\nexports.RETURN = RETURN;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZm9yLW9mLmpzPzRhNTkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsVUFBVSxtQkFBTyxDQUFDLEVBQVE7QUFDMUIsV0FBVyxtQkFBTyxDQUFDLEdBQWM7QUFDakMsa0JBQWtCLG1CQUFPLENBQUMsRUFBa0I7QUFDNUMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBNEI7QUFDcEQ7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDLGlCQUFpQixFQUFFO0FBQzFEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtRUFBbUUsZ0JBQWdCO0FBQ25GO0FBQ0E7QUFDQSxHQUFHLDRDQUE0QyxnQ0FBZ0M7QUFDL0U7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjQwLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuL19pdGVyLWNhbGwnKTtcbnZhciBpc0FycmF5SXRlciA9IHJlcXVpcmUoJy4vX2lzLWFycmF5LWl0ZXInKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgZ2V0SXRlckZuID0gcmVxdWlyZSgnLi9jb3JlLmdldC1pdGVyYXRvci1tZXRob2QnKTtcbnZhciBCUkVBSyA9IHt9O1xudmFyIFJFVFVSTiA9IHt9O1xudmFyIGV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVyYWJsZSwgZW50cmllcywgZm4sIHRoYXQsIElURVJBVE9SKSB7XG4gIHZhciBpdGVyRm4gPSBJVEVSQVRPUiA/IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGl0ZXJhYmxlOyB9IDogZ2V0SXRlckZuKGl0ZXJhYmxlKTtcbiAgdmFyIGYgPSBjdHgoZm4sIHRoYXQsIGVudHJpZXMgPyAyIDogMSk7XG4gIHZhciBpbmRleCA9IDA7XG4gIHZhciBsZW5ndGgsIHN0ZXAsIGl0ZXJhdG9yLCByZXN1bHQ7XG4gIGlmICh0eXBlb2YgaXRlckZuICE9ICdmdW5jdGlvbicpIHRocm93IFR5cGVFcnJvcihpdGVyYWJsZSArICcgaXMgbm90IGl0ZXJhYmxlIScpO1xuICAvLyBmYXN0IGNhc2UgZm9yIGFycmF5cyB3aXRoIGRlZmF1bHQgaXRlcmF0b3JcbiAgaWYgKGlzQXJyYXlJdGVyKGl0ZXJGbikpIGZvciAobGVuZ3RoID0gdG9MZW5ndGgoaXRlcmFibGUubGVuZ3RoKTsgbGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIHtcbiAgICByZXN1bHQgPSBlbnRyaWVzID8gZihhbk9iamVjdChzdGVwID0gaXRlcmFibGVbaW5kZXhdKVswXSwgc3RlcFsxXSkgOiBmKGl0ZXJhYmxlW2luZGV4XSk7XG4gICAgaWYgKHJlc3VsdCA9PT0gQlJFQUsgfHwgcmVzdWx0ID09PSBSRVRVUk4pIHJldHVybiByZXN1bHQ7XG4gIH0gZWxzZSBmb3IgKGl0ZXJhdG9yID0gaXRlckZuLmNhbGwoaXRlcmFibGUpOyAhKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmU7KSB7XG4gICAgcmVzdWx0ID0gY2FsbChpdGVyYXRvciwgZiwgc3RlcC52YWx1ZSwgZW50cmllcyk7XG4gICAgaWYgKHJlc3VsdCA9PT0gQlJFQUsgfHwgcmVzdWx0ID09PSBSRVRVUk4pIHJldHVybiByZXN1bHQ7XG4gIH1cbn07XG5leHBvcnRzLkJSRUFLID0gQlJFQUs7XG5leHBvcnRzLlJFVFVSTiA9IFJFVFVSTjtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///40\n")},function(module,exports,__webpack_require__){eval("var redefine = __webpack_require__(12);\nmodule.exports = function (target, src, safe) {\n for (var key in src) redefine(target, key, src[key], safe);\n return target;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcmVkZWZpbmUtYWxsLmpzP2RjYmMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxtQkFBTyxDQUFDLEVBQWE7QUFDcEM7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiNDEuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGFyZ2V0LCBzcmMsIHNhZmUpIHtcbiAgZm9yICh2YXIga2V5IGluIHNyYykgcmVkZWZpbmUodGFyZ2V0LCBrZXksIHNyY1trZXldLCBzYWZlKTtcbiAgcmV0dXJuIHRhcmdldDtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///41\n")},function(module,exports,__webpack_require__){eval("var isObject = __webpack_require__(4);\nmodule.exports = function (it, TYPE) {\n if (!isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!');\n return it;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdmFsaWRhdGUtY29sbGVjdGlvbi5qcz9iMzlhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjQyLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgVFlQRSkge1xuICBpZiAoIWlzT2JqZWN0KGl0KSB8fCBpdC5fdCAhPT0gVFlQRSkgdGhyb3cgVHlwZUVycm9yKCdJbmNvbXBhdGlibGUgcmVjZWl2ZXIsICcgKyBUWVBFICsgJyByZXF1aXJlZCEnKTtcbiAgcmV0dXJuIGl0O1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///42\n")},function(module,exports,__webpack_require__){eval("var def = __webpack_require__(8).f;\nvar has = __webpack_require__(14);\nvar TAG = __webpack_require__(5)('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2V0LXRvLXN0cmluZy10YWcuanM/N2YyMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxVQUFVLG1CQUFPLENBQUMsQ0FBYztBQUNoQyxVQUFVLG1CQUFPLENBQUMsRUFBUTtBQUMxQixVQUFVLG1CQUFPLENBQUMsQ0FBUTs7QUFFMUI7QUFDQSxvRUFBb0UsaUNBQWlDO0FBQ3JHIiwiZmlsZSI6IjQzLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGRlZiA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgVEFHID0gcmVxdWlyZSgnLi9fd2tzJykoJ3RvU3RyaW5nVGFnJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCB0YWcsIHN0YXQpIHtcbiAgaWYgKGl0ICYmICFoYXMoaXQgPSBzdGF0ID8gaXQgOiBpdC5wcm90b3R5cGUsIFRBRykpIGRlZihpdCwgVEFHLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgdmFsdWU6IHRhZyB9KTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///43\n")},function(module,exports,__webpack_require__){eval("// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = __webpack_require__(20);\nvar TAG = __webpack_require__(5)('toStringTag');\n// ES3 wrong here\nvar ARG = cof(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (e) { /* empty */ }\n};\n\nmodule.exports = function (it) {\n var O, T, B;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n // builtinTag case\n : ARG ? cof(O)\n // ES3 arguments fallback\n : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY2xhc3NvZi5qcz8yM2M2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsVUFBVSxtQkFBTyxDQUFDLEVBQVE7QUFDMUIsVUFBVSxtQkFBTyxDQUFDLENBQVE7QUFDMUI7QUFDQSwyQkFBMkIsa0JBQWtCLEVBQUU7O0FBRS9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRyxZQUFZO0FBQ2Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiNDQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBnZXR0aW5nIHRhZyBmcm9tIDE5LjEuMy42IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcoKVxudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xudmFyIFRBRyA9IHJlcXVpcmUoJy4vX3drcycpKCd0b1N0cmluZ1RhZycpO1xuLy8gRVMzIHdyb25nIGhlcmVcbnZhciBBUkcgPSBjb2YoZnVuY3Rpb24gKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpID09ICdBcmd1bWVudHMnO1xuXG4vLyBmYWxsYmFjayBmb3IgSUUxMSBTY3JpcHQgQWNjZXNzIERlbmllZCBlcnJvclxudmFyIHRyeUdldCA9IGZ1bmN0aW9uIChpdCwga2V5KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGl0W2tleV07XG4gIH0gY2F0Y2ggKGUpIHsgLyogZW1wdHkgKi8gfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIE8sIFQsIEI7XG4gIHJldHVybiBpdCA9PT0gdW5kZWZpbmVkID8gJ1VuZGVmaW5lZCcgOiBpdCA9PT0gbnVsbCA/ICdOdWxsJ1xuICAgIC8vIEBAdG9TdHJpbmdUYWcgY2FzZVxuICAgIDogdHlwZW9mIChUID0gdHJ5R2V0KE8gPSBPYmplY3QoaXQpLCBUQUcpKSA9PSAnc3RyaW5nJyA/IFRcbiAgICAvLyBidWlsdGluVGFnIGNhc2VcbiAgICA6IEFSRyA/IGNvZihPKVxuICAgIC8vIEVTMyBhcmd1bWVudHMgZmFsbGJhY2tcbiAgICA6IChCID0gY29mKE8pKSA9PSAnT2JqZWN0JyAmJiB0eXBlb2YgTy5jYWxsZWUgPT0gJ2Z1bmN0aW9uJyA/ICdBcmd1bWVudHMnIDogQjtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///44\n")},function(module,exports,__webpack_require__){eval("var $export = __webpack_require__(0);\nvar defined = __webpack_require__(24);\nvar fails = __webpack_require__(3);\nvar spaces = __webpack_require__(72);\nvar space = '[' + spaces + ']';\nvar non = '\\u200b\\u0085';\nvar ltrim = RegExp('^' + space + space + '*');\nvar rtrim = RegExp(space + space + '*$');\n\nvar exporter = function (KEY, exec, ALIAS) {\n var exp = {};\n var FORCE = fails(function () {\n return !!spaces[KEY]() || non[KEY]() != non;\n });\n var fn = exp[KEY] = FORCE ? exec(trim) : spaces[KEY];\n if (ALIAS) exp[ALIAS] = fn;\n $export($export.P + $export.F * FORCE, 'String', exp);\n};\n\n// 1 -> String#trimLeft\n// 2 -> String#trimRight\n// 3 -> String#trim\nvar trim = exporter.trim = function (string, TYPE) {\n string = String(defined(string));\n if (TYPE & 1) string = string.replace(ltrim, '');\n if (TYPE & 2) string = string.replace(rtrim, '');\n return string;\n};\n\nmodule.exports = exporter;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLXRyaW0uanM/YWE3NyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxjQUFjLG1CQUFPLENBQUMsRUFBWTtBQUNsQyxZQUFZLG1CQUFPLENBQUMsQ0FBVTtBQUM5QixhQUFhLG1CQUFPLENBQUMsRUFBYztBQUNuQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiNDUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIHNwYWNlcyA9IHJlcXVpcmUoJy4vX3N0cmluZy13cycpO1xudmFyIHNwYWNlID0gJ1snICsgc3BhY2VzICsgJ10nO1xudmFyIG5vbiA9ICdcXHUyMDBiXFx1MDA4NSc7XG52YXIgbHRyaW0gPSBSZWdFeHAoJ14nICsgc3BhY2UgKyBzcGFjZSArICcqJyk7XG52YXIgcnRyaW0gPSBSZWdFeHAoc3BhY2UgKyBzcGFjZSArICcqJCcpO1xuXG52YXIgZXhwb3J0ZXIgPSBmdW5jdGlvbiAoS0VZLCBleGVjLCBBTElBUykge1xuICB2YXIgZXhwID0ge307XG4gIHZhciBGT1JDRSA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gISFzcGFjZXNbS0VZXSgpIHx8IG5vbltLRVldKCkgIT0gbm9uO1xuICB9KTtcbiAgdmFyIGZuID0gZXhwW0tFWV0gPSBGT1JDRSA/IGV4ZWModHJpbSkgOiBzcGFjZXNbS0VZXTtcbiAgaWYgKEFMSUFTKSBleHBbQUxJQVNdID0gZm47XG4gICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogRk9SQ0UsICdTdHJpbmcnLCBleHApO1xufTtcblxuLy8gMSAtPiBTdHJpbmcjdHJpbUxlZnRcbi8vIDIgLT4gU3RyaW5nI3RyaW1SaWdodFxuLy8gMyAtPiBTdHJpbmcjdHJpbVxudmFyIHRyaW0gPSBleHBvcnRlci50cmltID0gZnVuY3Rpb24gKHN0cmluZywgVFlQRSkge1xuICBzdHJpbmcgPSBTdHJpbmcoZGVmaW5lZChzdHJpbmcpKTtcbiAgaWYgKFRZUEUgJiAxKSBzdHJpbmcgPSBzdHJpbmcucmVwbGFjZShsdHJpbSwgJycpO1xuICBpZiAoVFlQRSAmIDIpIHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKHJ0cmltLCAnJyk7XG4gIHJldHVybiBzdHJpbmc7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydGVyO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///45\n")},function(module,exports){eval("module.exports = {};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlcmF0b3JzLmpzPzg0ZjIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEiLCJmaWxlIjoiNDYuanMiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IHt9O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///46\n")},function(module,exports,__webpack_require__){eval("var core = __webpack_require__(18);\nvar global = __webpack_require__(2);\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\n\n(module.exports = function (key, value) {\n return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n version: core.version,\n mode: __webpack_require__(29) ? 'pure' : 'global',\n copyright: '© 2020 Denis Pushkarev (zloirock.ru)'\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2hhcmVkLmpzPzU1MzciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsV0FBVyxtQkFBTyxDQUFDLEVBQVM7QUFDNUIsYUFBYSxtQkFBTyxDQUFDLENBQVc7QUFDaEM7QUFDQSxrREFBa0Q7O0FBRWxEO0FBQ0EscUVBQXFFO0FBQ3JFLENBQUM7QUFDRDtBQUNBLFFBQVEsbUJBQU8sQ0FBQyxFQUFZO0FBQzVCO0FBQ0EsQ0FBQyIsImZpbGUiOiI0Ny5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIFNIQVJFRCA9ICdfX2NvcmUtanNfc2hhcmVkX18nO1xudmFyIHN0b3JlID0gZ2xvYmFsW1NIQVJFRF0gfHwgKGdsb2JhbFtTSEFSRURdID0ge30pO1xuXG4obW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICByZXR1cm4gc3RvcmVba2V5XSB8fCAoc3RvcmVba2V5XSA9IHZhbHVlICE9PSB1bmRlZmluZWQgPyB2YWx1ZSA6IHt9KTtcbn0pKCd2ZXJzaW9ucycsIFtdKS5wdXNoKHtcbiAgdmVyc2lvbjogY29yZS52ZXJzaW9uLFxuICBtb2RlOiByZXF1aXJlKCcuL19saWJyYXJ5JykgPyAncHVyZScgOiAnZ2xvYmFsJyxcbiAgY29weXJpZ2h0OiAnwqkgMjAyMCBEZW5pcyBQdXNoa2FyZXYgKHpsb2lyb2NrLnJ1KSdcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///47\n")},function(module,exports,__webpack_require__){eval("// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = __webpack_require__(20);\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n return cof(it) == 'String' ? it.split('') : Object(it);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faW9iamVjdC5qcz82MjZhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsVUFBVSxtQkFBTyxDQUFDLEVBQVE7QUFDMUI7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiNDguanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIGFuZCBub24tZW51bWVyYWJsZSBvbGQgVjggc3RyaW5nc1xudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QoJ3onKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKSA/IE9iamVjdCA6IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gY29mKGl0KSA9PSAnU3RyaW5nJyA/IGl0LnNwbGl0KCcnKSA6IE9iamVjdChpdCk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///48\n")},function(module,exports){eval("exports.f = {}.propertyIsEnumerable;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LXBpZS5qcz81MmE3Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMiLCJmaWxlIjoiNDkuanMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnRzLmYgPSB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///49\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// 21.2.5.3 get RegExp.prototype.flags\nvar anObject = __webpack_require__(1);\nmodule.exports = function () {\n var that = anObject(this);\n var result = '';\n if (that.global) result += 'g';\n if (that.ignoreCase) result += 'i';\n if (that.multiline) result += 'm';\n if (that.unicode) result += 'u';\n if (that.sticky) result += 'y';\n return result;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZmxhZ3MuanM/MGJmYiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiNTAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG4vLyAyMS4yLjUuMyBnZXQgUmVnRXhwLnByb3RvdHlwZS5mbGFnc1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHRoYXQgPSBhbk9iamVjdCh0aGlzKTtcbiAgdmFyIHJlc3VsdCA9ICcnO1xuICBpZiAodGhhdC5nbG9iYWwpIHJlc3VsdCArPSAnZyc7XG4gIGlmICh0aGF0Lmlnbm9yZUNhc2UpIHJlc3VsdCArPSAnaSc7XG4gIGlmICh0aGF0Lm11bHRpbGluZSkgcmVzdWx0ICs9ICdtJztcbiAgaWYgKHRoYXQudW5pY29kZSkgcmVzdWx0ICs9ICd1JztcbiAgaWYgKHRoYXQuc3RpY2t5KSByZXN1bHQgKz0gJ3knO1xuICByZXR1cm4gcmVzdWx0O1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///50\n")},function(module,exports,__webpack_require__){eval("// 7.3.20 SpeciesConstructor(O, defaultConstructor)\nvar anObject = __webpack_require__(1);\nvar aFunction = __webpack_require__(10);\nvar SPECIES = __webpack_require__(5)('species');\nmodule.exports = function (O, D) {\n var C = anObject(O).constructor;\n var S;\n return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3BlY2llcy1jb25zdHJ1Y3Rvci5qcz9lYmQ2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2QyxjQUFjLG1CQUFPLENBQUMsQ0FBUTtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjUxLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gNy4zLjIwIFNwZWNpZXNDb25zdHJ1Y3RvcihPLCBkZWZhdWx0Q29uc3RydWN0b3IpXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgU1BFQ0lFUyA9IHJlcXVpcmUoJy4vX3drcycpKCdzcGVjaWVzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBEKSB7XG4gIHZhciBDID0gYW5PYmplY3QoTykuY29uc3RydWN0b3I7XG4gIHZhciBTO1xuICByZXR1cm4gQyA9PT0gdW5kZWZpbmVkIHx8IChTID0gYW5PYmplY3QoQylbU1BFQ0lFU10pID09IHVuZGVmaW5lZCA/IEQgOiBhRnVuY3Rpb24oUyk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///51\n")},function(module,exports,__webpack_require__){eval("// false -> Array#indexOf\n// true -> Array#includes\nvar toIObject = __webpack_require__(15);\nvar toLength = __webpack_require__(6);\nvar toAbsoluteIndex = __webpack_require__(35);\nmodule.exports = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIObject($this);\n var length = toLength(O.length);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n if (O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktaW5jbHVkZXMuanM/YzM2NiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0EsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2QyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxzQkFBc0IsbUJBQU8sQ0FBQyxFQUFzQjtBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUssWUFBWSxlQUFlO0FBQ2hDO0FBQ0EsS0FBSztBQUNMO0FBQ0EiLCJmaWxlIjoiNTIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBmYWxzZSAtPiBBcnJheSNpbmRleE9mXG4vLyB0cnVlICAtPiBBcnJheSNpbmNsdWRlc1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4vX3RvLWFic29sdXRlLWluZGV4Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChJU19JTkNMVURFUykge1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBlbCwgZnJvbUluZGV4KSB7XG4gICAgdmFyIE8gPSB0b0lPYmplY3QoJHRoaXMpO1xuICAgIHZhciBsZW5ndGggPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gICAgdmFyIGluZGV4ID0gdG9BYnNvbHV0ZUluZGV4KGZyb21JbmRleCwgbGVuZ3RoKTtcbiAgICB2YXIgdmFsdWU7XG4gICAgLy8gQXJyYXkjaW5jbHVkZXMgdXNlcyBTYW1lVmFsdWVaZXJvIGVxdWFsaXR5IGFsZ29yaXRobVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICBpZiAoSVNfSU5DTFVERVMgJiYgZWwgIT0gZWwpIHdoaWxlIChsZW5ndGggPiBpbmRleCkge1xuICAgICAgdmFsdWUgPSBPW2luZGV4KytdO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgICAgaWYgKHZhbHVlICE9IHZhbHVlKSByZXR1cm4gdHJ1ZTtcbiAgICAvLyBBcnJheSNpbmRleE9mIGlnbm9yZXMgaG9sZXMsIEFycmF5I2luY2x1ZGVzIC0gbm90XG4gICAgfSBlbHNlIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSBpZiAoSVNfSU5DTFVERVMgfHwgaW5kZXggaW4gTykge1xuICAgICAgaWYgKE9baW5kZXhdID09PSBlbCkgcmV0dXJuIElTX0lOQ0xVREVTIHx8IGluZGV4IHx8IDA7XG4gICAgfSByZXR1cm4gIUlTX0lOQ0xVREVTICYmIC0xO1xuICB9O1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///52\n")},function(module,exports){eval("exports.f = Object.getOwnPropertySymbols;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdvcHMuanM/MjYyMSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSIsImZpbGUiOiI1My5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///53\n")},function(module,exports,__webpack_require__){eval("// 7.2.2 IsArray(argument)\nvar cof = __webpack_require__(20);\nmodule.exports = Array.isArray || function isArray(arg) {\n return cof(arg) == 'Array';\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtYXJyYXkuanM/MTE2OSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLFVBQVUsbUJBQU8sQ0FBQyxFQUFRO0FBQzFCO0FBQ0E7QUFDQSIsImZpbGUiOiI1NC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDcuMi4yIElzQXJyYXkoYXJndW1lbnQpXG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG5tb2R1bGUuZXhwb3J0cyA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gaXNBcnJheShhcmcpIHtcbiAgcmV0dXJuIGNvZihhcmcpID09ICdBcnJheSc7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///54\n")},function(module,exports,__webpack_require__){eval("var toInteger = __webpack_require__(21);\nvar defined = __webpack_require__(24);\n// true -> String#at\n// false -> String#codePointAt\nmodule.exports = function (TO_STRING) {\n return function (that, pos) {\n var s = String(defined(that));\n var i = toInteger(pos);\n var l = s.length;\n var a, b;\n if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n a = s.charCodeAt(i);\n return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n ? TO_STRING ? s.charAt(i) : a\n : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLWF0LmpzPzAyZjQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2QyxjQUFjLG1CQUFPLENBQUMsRUFBWTtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiNTUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG4vLyB0cnVlICAtPiBTdHJpbmcjYXRcbi8vIGZhbHNlIC0+IFN0cmluZyNjb2RlUG9pbnRBdFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoVE9fU1RSSU5HKSB7XG4gIHJldHVybiBmdW5jdGlvbiAodGhhdCwgcG9zKSB7XG4gICAgdmFyIHMgPSBTdHJpbmcoZGVmaW5lZCh0aGF0KSk7XG4gICAgdmFyIGkgPSB0b0ludGVnZXIocG9zKTtcbiAgICB2YXIgbCA9IHMubGVuZ3RoO1xuICAgIHZhciBhLCBiO1xuICAgIGlmIChpIDwgMCB8fCBpID49IGwpIHJldHVybiBUT19TVFJJTkcgPyAnJyA6IHVuZGVmaW5lZDtcbiAgICBhID0gcy5jaGFyQ29kZUF0KGkpO1xuICAgIHJldHVybiBhIDwgMHhkODAwIHx8IGEgPiAweGRiZmYgfHwgaSArIDEgPT09IGwgfHwgKGIgPSBzLmNoYXJDb2RlQXQoaSArIDEpKSA8IDB4ZGMwMCB8fCBiID4gMHhkZmZmXG4gICAgICA/IFRPX1NUUklORyA/IHMuY2hhckF0KGkpIDogYVxuICAgICAgOiBUT19TVFJJTkcgPyBzLnNsaWNlKGksIGkgKyAyKSA6IChhIC0gMHhkODAwIDw8IDEwKSArIChiIC0gMHhkYzAwKSArIDB4MTAwMDA7XG4gIH07XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///55\n")},function(module,exports,__webpack_require__){eval("// 7.2.8 IsRegExp(argument)\nvar isObject = __webpack_require__(4);\nvar cof = __webpack_require__(20);\nvar MATCH = __webpack_require__(5)('match');\nmodule.exports = function (it) {\n var isRegExp;\n return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtcmVnZXhwLmpzP2FhZTMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxVQUFVLG1CQUFPLENBQUMsRUFBUTtBQUMxQixZQUFZLG1CQUFPLENBQUMsQ0FBUTtBQUM1QjtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiI1Ni5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDcuMi44IElzUmVnRXhwKGFyZ3VtZW50KVxudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG52YXIgTUFUQ0ggPSByZXF1aXJlKCcuL193a3MnKSgnbWF0Y2gnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBpc1JlZ0V4cDtcbiAgcmV0dXJuIGlzT2JqZWN0KGl0KSAmJiAoKGlzUmVnRXhwID0gaXRbTUFUQ0hdKSAhPT0gdW5kZWZpbmVkID8gISFpc1JlZ0V4cCA6IGNvZihpdCkgPT0gJ1JlZ0V4cCcpO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///56\n")},function(module,exports,__webpack_require__){eval("var ITERATOR = __webpack_require__(5)('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var riter = [7][ITERATOR]();\n riter['return'] = function () { SAFE_CLOSING = true; };\n // eslint-disable-next-line no-throw-literal\n Array.from(riter, function () { throw 2; });\n} catch (e) { /* empty */ }\n\nmodule.exports = function (exec, skipClosing) {\n if (!skipClosing && !SAFE_CLOSING) return false;\n var safe = false;\n try {\n var arr = [7];\n var iter = arr[ITERATOR]();\n iter.next = function () { return { done: safe = true }; };\n arr[ITERATOR] = function () { return iter; };\n exec(arr);\n } catch (e) { /* empty */ }\n return safe;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlci1kZXRlY3QuanM/NWNjNSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxlQUFlLG1CQUFPLENBQUMsQ0FBUTtBQUMvQjs7QUFFQTtBQUNBO0FBQ0EsaUNBQWlDLHFCQUFxQjtBQUN0RDtBQUNBLGlDQUFpQyxTQUFTLEVBQUU7QUFDNUMsQ0FBQyxZQUFZOztBQUViO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QixTQUFTLHFCQUFxQjtBQUMzRCxpQ0FBaUMsYUFBYTtBQUM5QztBQUNBLEdBQUcsWUFBWTtBQUNmO0FBQ0EiLCJmaWxlIjoiNTcuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgSVRFUkFUT1IgPSByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKTtcbnZhciBTQUZFX0NMT1NJTkcgPSBmYWxzZTtcblxudHJ5IHtcbiAgdmFyIHJpdGVyID0gWzddW0lURVJBVE9SXSgpO1xuICByaXRlclsncmV0dXJuJ10gPSBmdW5jdGlvbiAoKSB7IFNBRkVfQ0xPU0lORyA9IHRydWU7IH07XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby10aHJvdy1saXRlcmFsXG4gIEFycmF5LmZyb20ocml0ZXIsIGZ1bmN0aW9uICgpIHsgdGhyb3cgMjsgfSk7XG59IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYywgc2tpcENsb3NpbmcpIHtcbiAgaWYgKCFza2lwQ2xvc2luZyAmJiAhU0FGRV9DTE9TSU5HKSByZXR1cm4gZmFsc2U7XG4gIHZhciBzYWZlID0gZmFsc2U7XG4gIHRyeSB7XG4gICAgdmFyIGFyciA9IFs3XTtcbiAgICB2YXIgaXRlciA9IGFycltJVEVSQVRPUl0oKTtcbiAgICBpdGVyLm5leHQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB7IGRvbmU6IHNhZmUgPSB0cnVlIH07IH07XG4gICAgYXJyW0lURVJBVE9SXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGl0ZXI7IH07XG4gICAgZXhlYyhhcnIpO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbiAgcmV0dXJuIHNhZmU7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///57\n")},function(module,exports,__webpack_require__){"use strict";eval("\n\nvar classof = __webpack_require__(44);\nvar builtinExec = RegExp.prototype.exec;\n\n // `RegExpExec` abstract operation\n// https://tc39.github.io/ecma262/#sec-regexpexec\nmodule.exports = function (R, S) {\n var exec = R.exec;\n if (typeof exec === 'function') {\n var result = exec.call(R, S);\n if (typeof result !== 'object') {\n throw new TypeError('RegExp exec method returned something other than an Object or null');\n }\n return result;\n }\n if (classof(R) !== 'RegExp') {\n throw new TypeError('RegExp#exec called on incompatible receiver');\n }\n return builtinExec.call(R, S);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcmVnZXhwLWV4ZWMtYWJzdHJhY3QuanM/NWYxYiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixjQUFjLG1CQUFPLENBQUMsRUFBWTtBQUNsQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiI1OC5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuL19jbGFzc29mJyk7XG52YXIgYnVpbHRpbkV4ZWMgPSBSZWdFeHAucHJvdG90eXBlLmV4ZWM7XG5cbiAvLyBgUmVnRXhwRXhlY2AgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1yZWdleHBleGVjXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChSLCBTKSB7XG4gIHZhciBleGVjID0gUi5leGVjO1xuICBpZiAodHlwZW9mIGV4ZWMgPT09ICdmdW5jdGlvbicpIHtcbiAgICB2YXIgcmVzdWx0ID0gZXhlYy5jYWxsKFIsIFMpO1xuICAgIGlmICh0eXBlb2YgcmVzdWx0ICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUmVnRXhwIGV4ZWMgbWV0aG9kIHJldHVybmVkIHNvbWV0aGluZyBvdGhlciB0aGFuIGFuIE9iamVjdCBvciBudWxsJyk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgaWYgKGNsYXNzb2YoUikgIT09ICdSZWdFeHAnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUmVnRXhwI2V4ZWMgY2FsbGVkIG9uIGluY29tcGF0aWJsZSByZWNlaXZlcicpO1xuICB9XG4gIHJldHVybiBidWlsdGluRXhlYy5jYWxsKFIsIFMpO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///58\n")},function(module,exports,__webpack_require__){"use strict";eval("\n__webpack_require__(113);\nvar redefine = __webpack_require__(12);\nvar hide = __webpack_require__(11);\nvar fails = __webpack_require__(3);\nvar defined = __webpack_require__(24);\nvar wks = __webpack_require__(5);\nvar regexpExec = __webpack_require__(87);\n\nvar SPECIES = wks('species');\n\nvar REPLACE_SUPPORTS_NAMED_GROUPS = !fails(function () {\n // #replace needs built-in support for named groups.\n // #match works fine because it just return the exec results, even if it has\n // a \"grops\" property.\n var re = /./;\n re.exec = function () {\n var result = [];\n result.groups = { a: '7' };\n return result;\n };\n return ''.replace(re, '$') !== '7';\n});\n\nvar SPLIT_WORKS_WITH_OVERWRITTEN_EXEC = (function () {\n // Chrome 51 has a buggy \"split\" implementation when RegExp#exec !== nativeExec\n var re = /(?:)/;\n var originalExec = re.exec;\n re.exec = function () { return originalExec.apply(this, arguments); };\n var result = 'ab'.split(re);\n return result.length === 2 && result[0] === 'a' && result[1] === 'b';\n})();\n\nmodule.exports = function (KEY, length, exec) {\n var SYMBOL = wks(KEY);\n\n var DELEGATES_TO_SYMBOL = !fails(function () {\n // String methods call symbol-named RegEp methods\n var O = {};\n O[SYMBOL] = function () { return 7; };\n return ''[KEY](O) != 7;\n });\n\n var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL ? !fails(function () {\n // Symbol-named RegExp methods call .exec\n var execCalled = false;\n var re = /a/;\n re.exec = function () { execCalled = true; return null; };\n if (KEY === 'split') {\n // RegExp[@@split] doesn't call the regex's exec method, but first creates\n // a new one. We need to return the patched regex when creating the new one.\n re.constructor = {};\n re.constructor[SPECIES] = function () { return re; };\n }\n re[SYMBOL]('');\n return !execCalled;\n }) : undefined;\n\n if (\n !DELEGATES_TO_SYMBOL ||\n !DELEGATES_TO_EXEC ||\n (KEY === 'replace' && !REPLACE_SUPPORTS_NAMED_GROUPS) ||\n (KEY === 'split' && !SPLIT_WORKS_WITH_OVERWRITTEN_EXEC)\n ) {\n var nativeRegExpMethod = /./[SYMBOL];\n var fns = exec(\n defined,\n SYMBOL,\n ''[KEY],\n function maybeCallNative(nativeMethod, regexp, str, arg2, forceStringMethod) {\n if (regexp.exec === regexpExec) {\n if (DELEGATES_TO_SYMBOL && !forceStringMethod) {\n // The native String method already delegates to @@method (this\n // polyfilled function), leasing to infinite recursion.\n // We avoid it by directly calling the native @@method method.\n return { done: true, value: nativeRegExpMethod.call(regexp, str, arg2) };\n }\n return { done: true, value: nativeMethod.call(str, regexp, arg2) };\n }\n return { done: false };\n }\n );\n var strfn = fns[0];\n var rxfn = fns[1];\n\n redefine(String.prototype, KEY, strfn);\n hide(RegExp.prototype, SYMBOL, length == 2\n // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)\n // 21.2.5.11 RegExp.prototype[@@split](string, limit)\n ? function (string, arg) { return rxfn.call(string, this, arg); }\n // 21.2.5.6 RegExp.prototype[@@match](string)\n // 21.2.5.9 RegExp.prototype[@@search](string)\n : function (string) { return rxfn.call(string, this); }\n );\n }\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZml4LXJlLXdrcy5qcz8yMTRmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsbUJBQU8sQ0FBQyxHQUFtQjtBQUMzQixlQUFlLG1CQUFPLENBQUMsRUFBYTtBQUNwQyxXQUFXLG1CQUFPLENBQUMsRUFBUztBQUM1QixZQUFZLG1CQUFPLENBQUMsQ0FBVTtBQUM5QixjQUFjLG1CQUFPLENBQUMsRUFBWTtBQUNsQyxVQUFVLG1CQUFPLENBQUMsQ0FBUTtBQUMxQixpQkFBaUIsbUJBQU8sQ0FBQyxFQUFnQjs7QUFFekM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5Qiw0Q0FBNEM7QUFDckU7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkIsVUFBVTtBQUN2QztBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkIsbUJBQW1CLGFBQWE7QUFDM0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkMsV0FBVztBQUN4RDtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0I7QUFDcEI7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0MscUNBQXFDO0FBQ3JFO0FBQ0E7QUFDQSwyQkFBMkIsZ0NBQWdDO0FBQzNEO0FBQ0E7QUFDQSIsImZpbGUiOiI1OS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4vZXM2LnJlZ2V4cC5leGVjJyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG52YXIgd2tzID0gcmVxdWlyZSgnLi9fd2tzJyk7XG52YXIgcmVnZXhwRXhlYyA9IHJlcXVpcmUoJy4vX3JlZ2V4cC1leGVjJyk7XG5cbnZhciBTUEVDSUVTID0gd2tzKCdzcGVjaWVzJyk7XG5cbnZhciBSRVBMQUNFX1NVUFBPUlRTX05BTUVEX0dST1VQUyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vICNyZXBsYWNlIG5lZWRzIGJ1aWx0LWluIHN1cHBvcnQgZm9yIG5hbWVkIGdyb3Vwcy5cbiAgLy8gI21hdGNoIHdvcmtzIGZpbmUgYmVjYXVzZSBpdCBqdXN0IHJldHVybiB0aGUgZXhlYyByZXN1bHRzLCBldmVuIGlmIGl0IGhhc1xuICAvLyBhIFwiZ3JvcHNcIiBwcm9wZXJ0eS5cbiAgdmFyIHJlID0gLy4vO1xuICByZS5leGVjID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICByZXN1bHQuZ3JvdXBzID0geyBhOiAnNycgfTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuICByZXR1cm4gJycucmVwbGFjZShyZSwgJyQ8YT4nKSAhPT0gJzcnO1xufSk7XG5cbnZhciBTUExJVF9XT1JLU19XSVRIX09WRVJXUklUVEVOX0VYRUMgPSAoZnVuY3Rpb24gKCkge1xuICAvLyBDaHJvbWUgNTEgaGFzIGEgYnVnZ3kgXCJzcGxpdFwiIGltcGxlbWVudGF0aW9uIHdoZW4gUmVnRXhwI2V4ZWMgIT09IG5hdGl2ZUV4ZWNcbiAgdmFyIHJlID0gLyg/OikvO1xuICB2YXIgb3JpZ2luYWxFeGVjID0gcmUuZXhlYztcbiAgcmUuZXhlYyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG9yaWdpbmFsRXhlYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9O1xuICB2YXIgcmVzdWx0ID0gJ2FiJy5zcGxpdChyZSk7XG4gIHJldHVybiByZXN1bHQubGVuZ3RoID09PSAyICYmIHJlc3VsdFswXSA9PT0gJ2EnICYmIHJlc3VsdFsxXSA9PT0gJ2InO1xufSkoKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoS0VZLCBsZW5ndGgsIGV4ZWMpIHtcbiAgdmFyIFNZTUJPTCA9IHdrcyhLRVkpO1xuXG4gIHZhciBERUxFR0FURVNfVE9fU1lNQk9MID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAvLyBTdHJpbmcgbWV0aG9kcyBjYWxsIHN5bWJvbC1uYW1lZCBSZWdFcCBtZXRob2RzXG4gICAgdmFyIE8gPSB7fTtcbiAgICBPW1NZTUJPTF0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9O1xuICAgIHJldHVybiAnJ1tLRVldKE8pICE9IDc7XG4gIH0pO1xuXG4gIHZhciBERUxFR0FURVNfVE9fRVhFQyA9IERFTEVHQVRFU19UT19TWU1CT0wgPyAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIFN5bWJvbC1uYW1lZCBSZWdFeHAgbWV0aG9kcyBjYWxsIC5leGVjXG4gICAgdmFyIGV4ZWNDYWxsZWQgPSBmYWxzZTtcbiAgICB2YXIgcmUgPSAvYS87XG4gICAgcmUuZXhlYyA9IGZ1bmN0aW9uICgpIHsgZXhlY0NhbGxlZCA9IHRydWU7IHJldHVybiBudWxsOyB9O1xuICAgIGlmIChLRVkgPT09ICdzcGxpdCcpIHtcbiAgICAgIC8vIFJlZ0V4cFtAQHNwbGl0XSBkb2Vzbid0IGNhbGwgdGhlIHJlZ2V4J3MgZXhlYyBtZXRob2QsIGJ1dCBmaXJzdCBjcmVhdGVzXG4gICAgICAvLyBhIG5ldyBvbmUuIFdlIG5lZWQgdG8gcmV0dXJuIHRoZSBwYXRjaGVkIHJlZ2V4IHdoZW4gY3JlYXRpbmcgdGhlIG5ldyBvbmUuXG4gICAgICByZS5jb25zdHJ1Y3RvciA9IHt9O1xuICAgICAgcmUuY29uc3RydWN0b3JbU1BFQ0lFU10gPSBmdW5jdGlvbiAoKSB7IHJldHVybiByZTsgfTtcbiAgICB9XG4gICAgcmVbU1lNQk9MXSgnJyk7XG4gICAgcmV0dXJuICFleGVjQ2FsbGVkO1xuICB9KSA6IHVuZGVmaW5lZDtcblxuICBpZiAoXG4gICAgIURFTEVHQVRFU19UT19TWU1CT0wgfHxcbiAgICAhREVMRUdBVEVTX1RPX0VYRUMgfHxcbiAgICAoS0VZID09PSAncmVwbGFjZScgJiYgIVJFUExBQ0VfU1VQUE9SVFNfTkFNRURfR1JPVVBTKSB8fFxuICAgIChLRVkgPT09ICdzcGxpdCcgJiYgIVNQTElUX1dPUktTX1dJVEhfT1ZFUldSSVRURU5fRVhFQylcbiAgKSB7XG4gICAgdmFyIG5hdGl2ZVJlZ0V4cE1ldGhvZCA9IC8uL1tTWU1CT0xdO1xuICAgIHZhciBmbnMgPSBleGVjKFxuICAgICAgZGVmaW5lZCxcbiAgICAgIFNZTUJPTCxcbiAgICAgICcnW0tFWV0sXG4gICAgICBmdW5jdGlvbiBtYXliZUNhbGxOYXRpdmUobmF0aXZlTWV0aG9kLCByZWdleHAsIHN0ciwgYXJnMiwgZm9yY2VTdHJpbmdNZXRob2QpIHtcbiAgICAgICAgaWYgKHJlZ2V4cC5leGVjID09PSByZWdleHBFeGVjKSB7XG4gICAgICAgICAgaWYgKERFTEVHQVRFU19UT19TWU1CT0wgJiYgIWZvcmNlU3RyaW5nTWV0aG9kKSB7XG4gICAgICAgICAgICAvLyBUaGUgbmF0aXZlIFN0cmluZyBtZXRob2QgYWxyZWFkeSBkZWxlZ2F0ZXMgdG8gQEBtZXRob2QgKHRoaXNcbiAgICAgICAgICAgIC8vIHBvbHlmaWxsZWQgZnVuY3Rpb24pLCBsZWFzaW5nIHRvIGluZmluaXRlIHJlY3Vyc2lvbi5cbiAgICAgICAgICAgIC8vIFdlIGF2b2lkIGl0IGJ5IGRpcmVjdGx5IGNhbGxpbmcgdGhlIG5hdGl2ZSBAQG1ldGhvZCBtZXRob2QuXG4gICAgICAgICAgICByZXR1cm4geyBkb25lOiB0cnVlLCB2YWx1ZTogbmF0aXZlUmVnRXhwTWV0aG9kLmNhbGwocmVnZXhwLCBzdHIsIGFyZzIpIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB7IGRvbmU6IHRydWUsIHZhbHVlOiBuYXRpdmVNZXRob2QuY2FsbChzdHIsIHJlZ2V4cCwgYXJnMikgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBkb25lOiBmYWxzZSB9O1xuICAgICAgfVxuICAgICk7XG4gICAgdmFyIHN0cmZuID0gZm5zWzBdO1xuICAgIHZhciByeGZuID0gZm5zWzFdO1xuXG4gICAgcmVkZWZpbmUoU3RyaW5nLnByb3RvdHlwZSwgS0VZLCBzdHJmbik7XG4gICAgaGlkZShSZWdFeHAucHJvdG90eXBlLCBTWU1CT0wsIGxlbmd0aCA9PSAyXG4gICAgICAvLyAyMS4yLjUuOCBSZWdFeHAucHJvdG90eXBlW0BAcmVwbGFjZV0oc3RyaW5nLCByZXBsYWNlVmFsdWUpXG4gICAgICAvLyAyMS4yLjUuMTEgUmVnRXhwLnByb3RvdHlwZVtAQHNwbGl0XShzdHJpbmcsIGxpbWl0KVxuICAgICAgPyBmdW5jdGlvbiAoc3RyaW5nLCBhcmcpIHsgcmV0dXJuIHJ4Zm4uY2FsbChzdHJpbmcsIHRoaXMsIGFyZyk7IH1cbiAgICAgIC8vIDIxLjIuNS42IFJlZ0V4cC5wcm90b3R5cGVbQEBtYXRjaF0oc3RyaW5nKVxuICAgICAgLy8gMjEuMi41LjkgUmVnRXhwLnByb3RvdHlwZVtAQHNlYXJjaF0oc3RyaW5nKVxuICAgICAgOiBmdW5jdGlvbiAoc3RyaW5nKSB7IHJldHVybiByeGZuLmNhbGwoc3RyaW5nLCB0aGlzKTsgfVxuICAgICk7XG4gIH1cbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///59\n")},function(module,exports,__webpack_require__){eval("var global = __webpack_require__(2);\nvar navigator = global.navigator;\n\nmodule.exports = navigator && navigator.userAgent || '';\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdXNlci1hZ2VudC5qcz9hMjVmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGFBQWEsbUJBQU8sQ0FBQyxDQUFXO0FBQ2hDOztBQUVBIiwiZmlsZSI6IjYwLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIG5hdmlnYXRvciA9IGdsb2JhbC5uYXZpZ2F0b3I7XG5cbm1vZHVsZS5leHBvcnRzID0gbmF2aWdhdG9yICYmIG5hdmlnYXRvci51c2VyQWdlbnQgfHwgJyc7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///60\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar global = __webpack_require__(2);\nvar $export = __webpack_require__(0);\nvar redefine = __webpack_require__(12);\nvar redefineAll = __webpack_require__(41);\nvar meta = __webpack_require__(30);\nvar forOf = __webpack_require__(40);\nvar anInstance = __webpack_require__(39);\nvar isObject = __webpack_require__(4);\nvar fails = __webpack_require__(3);\nvar $iterDetect = __webpack_require__(57);\nvar setToStringTag = __webpack_require__(43);\nvar inheritIfRequired = __webpack_require__(73);\n\nmodule.exports = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) {\n var Base = global[NAME];\n var C = Base;\n var ADDER = IS_MAP ? 'set' : 'add';\n var proto = C && C.prototype;\n var O = {};\n var fixMethod = function (KEY) {\n var fn = proto[KEY];\n redefine(proto, KEY,\n KEY == 'delete' ? function (a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'has' ? function has(a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'get' ? function get(a) {\n return IS_WEAK && !isObject(a) ? undefined : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'add' ? function add(a) { fn.call(this, a === 0 ? 0 : a); return this; }\n : function set(a, b) { fn.call(this, a === 0 ? 0 : a, b); return this; }\n );\n };\n if (typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function () {\n new C().entries().next();\n }))) {\n // create collection constructor\n C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);\n redefineAll(C.prototype, methods);\n meta.NEED = true;\n } else {\n var instance = new C();\n // early implementations not supports chaining\n var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;\n // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false\n var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); });\n // most early implementations doesn't supports iterables, most modern - not close it correctly\n var ACCEPT_ITERABLES = $iterDetect(function (iter) { new C(iter); }); // eslint-disable-line no-new\n // for early implementations -0 and +0 not the same\n var BUGGY_ZERO = !IS_WEAK && fails(function () {\n // V8 ~ Chromium 42- fails only with 5+ elements\n var $instance = new C();\n var index = 5;\n while (index--) $instance[ADDER](index, index);\n return !$instance.has(-0);\n });\n if (!ACCEPT_ITERABLES) {\n C = wrapper(function (target, iterable) {\n anInstance(target, C, NAME);\n var that = inheritIfRequired(new Base(), target, C);\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n return that;\n });\n C.prototype = proto;\n proto.constructor = C;\n }\n if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {\n fixMethod('delete');\n fixMethod('has');\n IS_MAP && fixMethod('get');\n }\n if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);\n // weak collections should not contains .clear method\n if (IS_WEAK && proto.clear) delete proto.clear;\n }\n\n setToStringTag(C, NAME);\n\n O[NAME] = C;\n $export($export.G + $export.W + $export.F * (C != Base), O);\n\n if (!IS_WEAK) common.setStrong(C, NAME, IS_MAP);\n\n return C;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY29sbGVjdGlvbi5qcz9lMGI4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsYUFBYSxtQkFBTyxDQUFDLENBQVc7QUFDaEMsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsZUFBZSxtQkFBTyxDQUFDLEVBQWE7QUFDcEMsa0JBQWtCLG1CQUFPLENBQUMsRUFBaUI7QUFDM0MsV0FBVyxtQkFBTyxDQUFDLEVBQVM7QUFDNUIsWUFBWSxtQkFBTyxDQUFDLEVBQVc7QUFDL0IsaUJBQWlCLG1CQUFPLENBQUMsRUFBZ0I7QUFDekMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsWUFBWSxtQkFBTyxDQUFDLENBQVU7QUFDOUIsa0JBQWtCLG1CQUFPLENBQUMsRUFBZ0I7QUFDMUMscUJBQXFCLG1CQUFPLENBQUMsRUFBc0I7QUFDbkQsd0JBQXdCLG1CQUFPLENBQUMsRUFBd0I7O0FBRXhEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxPQUFPO0FBQ1A7QUFDQSxPQUFPLG1DQUFtQyxnQ0FBZ0MsYUFBYTtBQUN2Riw4QkFBOEIsbUNBQW1DLGFBQWE7QUFDOUU7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLHFEQUFxRDtBQUNyRDtBQUNBLGtEQUFrRCxpQkFBaUIsRUFBRTtBQUNyRTtBQUNBLHdEQUF3RCxhQUFhLEVBQUUsRUFBRTtBQUN6RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSIsImZpbGUiOiI2MS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIHJlZGVmaW5lQWxsID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUtYWxsJyk7XG52YXIgbWV0YSA9IHJlcXVpcmUoJy4vX21ldGEnKTtcbnZhciBmb3JPZiA9IHJlcXVpcmUoJy4vX2Zvci1vZicpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuL19hbi1pbnN0YW5jZScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyICRpdGVyRGV0ZWN0ID0gcmVxdWlyZSgnLi9faXRlci1kZXRlY3QnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgaW5oZXJpdElmUmVxdWlyZWQgPSByZXF1aXJlKCcuL19pbmhlcml0LWlmLXJlcXVpcmVkJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE5BTUUsIHdyYXBwZXIsIG1ldGhvZHMsIGNvbW1vbiwgSVNfTUFQLCBJU19XRUFLKSB7XG4gIHZhciBCYXNlID0gZ2xvYmFsW05BTUVdO1xuICB2YXIgQyA9IEJhc2U7XG4gIHZhciBBRERFUiA9IElTX01BUCA/ICdzZXQnIDogJ2FkZCc7XG4gIHZhciBwcm90byA9IEMgJiYgQy5wcm90b3R5cGU7XG4gIHZhciBPID0ge307XG4gIHZhciBmaXhNZXRob2QgPSBmdW5jdGlvbiAoS0VZKSB7XG4gICAgdmFyIGZuID0gcHJvdG9bS0VZXTtcbiAgICByZWRlZmluZShwcm90bywgS0VZLFxuICAgICAgS0VZID09ICdkZWxldGUnID8gZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgcmV0dXJuIElTX1dFQUsgJiYgIWlzT2JqZWN0KGEpID8gZmFsc2UgOiBmbi5jYWxsKHRoaXMsIGEgPT09IDAgPyAwIDogYSk7XG4gICAgICB9IDogS0VZID09ICdoYXMnID8gZnVuY3Rpb24gaGFzKGEpIHtcbiAgICAgICAgcmV0dXJuIElTX1dFQUsgJiYgIWlzT2JqZWN0KGEpID8gZmFsc2UgOiBmbi5jYWxsKHRoaXMsIGEgPT09IDAgPyAwIDogYSk7XG4gICAgICB9IDogS0VZID09ICdnZXQnID8gZnVuY3Rpb24gZ2V0KGEpIHtcbiAgICAgICAgcmV0dXJuIElTX1dFQUsgJiYgIWlzT2JqZWN0KGEpID8gdW5kZWZpbmVkIDogZm4uY2FsbCh0aGlzLCBhID09PSAwID8gMCA6IGEpO1xuICAgICAgfSA6IEtFWSA9PSAnYWRkJyA/IGZ1bmN0aW9uIGFkZChhKSB7IGZuLmNhbGwodGhpcywgYSA9PT0gMCA/IDAgOiBhKTsgcmV0dXJuIHRoaXM7IH1cbiAgICAgICAgOiBmdW5jdGlvbiBzZXQoYSwgYikgeyBmbi5jYWxsKHRoaXMsIGEgPT09IDAgPyAwIDogYSwgYik7IHJldHVybiB0aGlzOyB9XG4gICAgKTtcbiAgfTtcbiAgaWYgKHR5cGVvZiBDICE9ICdmdW5jdGlvbicgfHwgIShJU19XRUFLIHx8IHByb3RvLmZvckVhY2ggJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICBuZXcgQygpLmVudHJpZXMoKS5uZXh0KCk7XG4gIH0pKSkge1xuICAgIC8vIGNyZWF0ZSBjb2xsZWN0aW9uIGNvbnN0cnVjdG9yXG4gICAgQyA9IGNvbW1vbi5nZXRDb25zdHJ1Y3Rvcih3cmFwcGVyLCBOQU1FLCBJU19NQVAsIEFEREVSKTtcbiAgICByZWRlZmluZUFsbChDLnByb3RvdHlwZSwgbWV0aG9kcyk7XG4gICAgbWV0YS5ORUVEID0gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgaW5zdGFuY2UgPSBuZXcgQygpO1xuICAgIC8vIGVhcmx5IGltcGxlbWVudGF0aW9ucyBub3Qgc3VwcG9ydHMgY2hhaW5pbmdcbiAgICB2YXIgSEFTTlRfQ0hBSU5JTkcgPSBpbnN0YW5jZVtBRERFUl0oSVNfV0VBSyA/IHt9IDogLTAsIDEpICE9IGluc3RhbmNlO1xuICAgIC8vIFY4IH4gIENocm9taXVtIDQwLSB3ZWFrLWNvbGxlY3Rpb25zIHRocm93cyBvbiBwcmltaXRpdmVzLCBidXQgc2hvdWxkIHJldHVybiBmYWxzZVxuICAgIHZhciBUSFJPV1NfT05fUFJJTUlUSVZFUyA9IGZhaWxzKGZ1bmN0aW9uICgpIHsgaW5zdGFuY2UuaGFzKDEpOyB9KTtcbiAgICAvLyBtb3N0IGVhcmx5IGltcGxlbWVudGF0aW9ucyBkb2Vzbid0IHN1cHBvcnRzIGl0ZXJhYmxlcywgbW9zdCBtb2Rlcm4gLSBub3QgY2xvc2UgaXQgY29ycmVjdGx5XG4gICAgdmFyIEFDQ0VQVF9JVEVSQUJMRVMgPSAkaXRlckRldGVjdChmdW5jdGlvbiAoaXRlcikgeyBuZXcgQyhpdGVyKTsgfSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgLy8gZm9yIGVhcmx5IGltcGxlbWVudGF0aW9ucyAtMCBhbmQgKzAgbm90IHRoZSBzYW1lXG4gICAgdmFyIEJVR0dZX1pFUk8gPSAhSVNfV0VBSyAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBWOCB+IENocm9taXVtIDQyLSBmYWlscyBvbmx5IHdpdGggNSsgZWxlbWVudHNcbiAgICAgIHZhciAkaW5zdGFuY2UgPSBuZXcgQygpO1xuICAgICAgdmFyIGluZGV4ID0gNTtcbiAgICAgIHdoaWxlIChpbmRleC0tKSAkaW5zdGFuY2VbQURERVJdKGluZGV4LCBpbmRleCk7XG4gICAgICByZXR1cm4gISRpbnN0YW5jZS5oYXMoLTApO1xuICAgIH0pO1xuICAgIGlmICghQUNDRVBUX0lURVJBQkxFUykge1xuICAgICAgQyA9IHdyYXBwZXIoZnVuY3Rpb24gKHRhcmdldCwgaXRlcmFibGUpIHtcbiAgICAgICAgYW5JbnN0YW5jZSh0YXJnZXQsIEMsIE5BTUUpO1xuICAgICAgICB2YXIgdGhhdCA9IGluaGVyaXRJZlJlcXVpcmVkKG5ldyBCYXNlKCksIHRhcmdldCwgQyk7XG4gICAgICAgIGlmIChpdGVyYWJsZSAhPSB1bmRlZmluZWQpIGZvck9mKGl0ZXJhYmxlLCBJU19NQVAsIHRoYXRbQURERVJdLCB0aGF0KTtcbiAgICAgICAgcmV0dXJuIHRoYXQ7XG4gICAgICB9KTtcbiAgICAgIEMucHJvdG90eXBlID0gcHJvdG87XG4gICAgICBwcm90by5jb25zdHJ1Y3RvciA9IEM7XG4gICAgfVxuICAgIGlmIChUSFJPV1NfT05fUFJJTUlUSVZFUyB8fCBCVUdHWV9aRVJPKSB7XG4gICAgICBmaXhNZXRob2QoJ2RlbGV0ZScpO1xuICAgICAgZml4TWV0aG9kKCdoYXMnKTtcbiAgICAgIElTX01BUCAmJiBmaXhNZXRob2QoJ2dldCcpO1xuICAgIH1cbiAgICBpZiAoQlVHR1lfWkVSTyB8fCBIQVNOVF9DSEFJTklORykgZml4TWV0aG9kKEFEREVSKTtcbiAgICAvLyB3ZWFrIGNvbGxlY3Rpb25zIHNob3VsZCBub3QgY29udGFpbnMgLmNsZWFyIG1ldGhvZFxuICAgIGlmIChJU19XRUFLICYmIHByb3RvLmNsZWFyKSBkZWxldGUgcHJvdG8uY2xlYXI7XG4gIH1cblxuICBzZXRUb1N0cmluZ1RhZyhDLCBOQU1FKTtcblxuICBPW05BTUVdID0gQztcbiAgJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LlcgKyAkZXhwb3J0LkYgKiAoQyAhPSBCYXNlKSwgTyk7XG5cbiAgaWYgKCFJU19XRUFLKSBjb21tb24uc2V0U3Ryb25nKEMsIE5BTUUsIElTX01BUCk7XG5cbiAgcmV0dXJuIEM7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///61\n")},function(module,exports,__webpack_require__){eval("var global = __webpack_require__(2);\nvar hide = __webpack_require__(11);\nvar uid = __webpack_require__(33);\nvar TYPED = uid('typed_array');\nvar VIEW = uid('view');\nvar ABV = !!(global.ArrayBuffer && global.DataView);\nvar CONSTR = ABV;\nvar i = 0;\nvar l = 9;\nvar Typed;\n\nvar TypedArrayConstructors = (\n 'Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array'\n).split(',');\n\nwhile (i < l) {\n if (Typed = global[TypedArrayConstructors[i++]]) {\n hide(Typed.prototype, TYPED, true);\n hide(Typed.prototype, VIEW, true);\n } else CONSTR = false;\n}\n\nmodule.exports = {\n ABV: ABV,\n CONSTR: CONSTR,\n TYPED: TYPED,\n VIEW: VIEW\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdHlwZWQuanM/MGY4OCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxhQUFhLG1CQUFPLENBQUMsQ0FBVztBQUNoQyxXQUFXLG1CQUFPLENBQUMsRUFBUztBQUM1QixVQUFVLG1CQUFPLENBQUMsRUFBUTtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjYyLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi9fdWlkJyk7XG52YXIgVFlQRUQgPSB1aWQoJ3R5cGVkX2FycmF5Jyk7XG52YXIgVklFVyA9IHVpZCgndmlldycpO1xudmFyIEFCViA9ICEhKGdsb2JhbC5BcnJheUJ1ZmZlciAmJiBnbG9iYWwuRGF0YVZpZXcpO1xudmFyIENPTlNUUiA9IEFCVjtcbnZhciBpID0gMDtcbnZhciBsID0gOTtcbnZhciBUeXBlZDtcblxudmFyIFR5cGVkQXJyYXlDb25zdHJ1Y3RvcnMgPSAoXG4gICdJbnQ4QXJyYXksVWludDhBcnJheSxVaW50OENsYW1wZWRBcnJheSxJbnQxNkFycmF5LFVpbnQxNkFycmF5LEludDMyQXJyYXksVWludDMyQXJyYXksRmxvYXQzMkFycmF5LEZsb2F0NjRBcnJheSdcbikuc3BsaXQoJywnKTtcblxud2hpbGUgKGkgPCBsKSB7XG4gIGlmIChUeXBlZCA9IGdsb2JhbFtUeXBlZEFycmF5Q29uc3RydWN0b3JzW2krK11dKSB7XG4gICAgaGlkZShUeXBlZC5wcm90b3R5cGUsIFRZUEVELCB0cnVlKTtcbiAgICBoaWRlKFR5cGVkLnByb3RvdHlwZSwgVklFVywgdHJ1ZSk7XG4gIH0gZWxzZSBDT05TVFIgPSBmYWxzZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEFCVjogQUJWLFxuICBDT05TVFI6IENPTlNUUixcbiAgVFlQRUQ6IFRZUEVELFxuICBWSUVXOiBWSUVXXG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///62\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// Forced replacement prototype accessors methods\nmodule.exports = __webpack_require__(29) || !__webpack_require__(3)(function () {\n var K = Math.random();\n // In FF throws only define methods\n // eslint-disable-next-line no-undef, no-useless-call\n __defineSetter__.call(null, K, function () { /* empty */ });\n delete __webpack_require__(2)[K];\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWZvcmNlZC1wYW0uanM/YzViNCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsaUJBQWlCLG1CQUFPLENBQUMsRUFBWSxNQUFNLG1CQUFPLENBQUMsQ0FBVTtBQUM3RDtBQUNBO0FBQ0E7QUFDQSw4Q0FBOEMsY0FBYztBQUM1RCxTQUFTLG1CQUFPLENBQUMsQ0FBVztBQUM1QixDQUFDIiwiZmlsZSI6IjYzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gRm9yY2VkIHJlcGxhY2VtZW50IHByb3RvdHlwZSBhY2Nlc3NvcnMgbWV0aG9kc1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19saWJyYXJ5JykgfHwgIXJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICB2YXIgSyA9IE1hdGgucmFuZG9tKCk7XG4gIC8vIEluIEZGIHRocm93cyBvbmx5IGRlZmluZSBtZXRob2RzXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZiwgbm8tdXNlbGVzcy1jYWxsXG4gIF9fZGVmaW5lU2V0dGVyX18uY2FsbChudWxsLCBLLCBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pO1xuICBkZWxldGUgcmVxdWlyZSgnLi9fZ2xvYmFsJylbS107XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///63\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// https://tc39.github.io/proposal-setmap-offrom/\nvar $export = __webpack_require__(0);\n\nmodule.exports = function (COLLECTION) {\n $export($export.S, COLLECTION, { of: function of() {\n var length = arguments.length;\n var A = new Array(length);\n while (length--) A[length] = arguments[length];\n return new this(A);\n } });\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2V0LWNvbGxlY3Rpb24tb2YuanM/YzZhMSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDO0FBQ0Esa0NBQWtDO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRyxFQUFFO0FBQ0wiLCJmaWxlIjoiNjQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChDT0xMRUNUSU9OKSB7XG4gICRleHBvcnQoJGV4cG9ydC5TLCBDT0xMRUNUSU9OLCB7IG9mOiBmdW5jdGlvbiBvZigpIHtcbiAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgQSA9IG5ldyBBcnJheShsZW5ndGgpO1xuICAgIHdoaWxlIChsZW5ndGgtLSkgQVtsZW5ndGhdID0gYXJndW1lbnRzW2xlbmd0aF07XG4gICAgcmV0dXJuIG5ldyB0aGlzKEEpO1xuICB9IH0pO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///64\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// https://tc39.github.io/proposal-setmap-offrom/\nvar $export = __webpack_require__(0);\nvar aFunction = __webpack_require__(10);\nvar ctx = __webpack_require__(19);\nvar forOf = __webpack_require__(40);\n\nmodule.exports = function (COLLECTION) {\n $export($export.S, COLLECTION, { from: function from(source /* , mapFn, thisArg */) {\n var mapFn = arguments[1];\n var mapping, A, n, cb;\n aFunction(this);\n mapping = mapFn !== undefined;\n if (mapping) aFunction(mapFn);\n if (source == undefined) return new this();\n A = [];\n if (mapping) {\n n = 0;\n cb = ctx(mapFn, arguments[2], 2);\n forOf(source, false, function (nextItem) {\n A.push(cb(nextItem, n++));\n });\n } else {\n forOf(source, false, A.push, A);\n }\n return new this(A);\n } });\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2V0LWNvbGxlY3Rpb24tZnJvbS5qcz8yOGU0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDLFVBQVUsbUJBQU8sQ0FBQyxFQUFRO0FBQzFCLFlBQVksbUJBQU8sQ0FBQyxFQUFXOztBQUUvQjtBQUNBLGtDQUFrQztBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEdBQUcsRUFBRTtBQUNMIiwiZmlsZSI6IjY1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgZm9yT2YgPSByZXF1aXJlKCcuL19mb3Itb2YnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQ09MTEVDVElPTikge1xuICAkZXhwb3J0KCRleHBvcnQuUywgQ09MTEVDVElPTiwgeyBmcm9tOiBmdW5jdGlvbiBmcm9tKHNvdXJjZSAvKiAsIG1hcEZuLCB0aGlzQXJnICovKSB7XG4gICAgdmFyIG1hcEZuID0gYXJndW1lbnRzWzFdO1xuICAgIHZhciBtYXBwaW5nLCBBLCBuLCBjYjtcbiAgICBhRnVuY3Rpb24odGhpcyk7XG4gICAgbWFwcGluZyA9IG1hcEZuICE9PSB1bmRlZmluZWQ7XG4gICAgaWYgKG1hcHBpbmcpIGFGdW5jdGlvbihtYXBGbik7XG4gICAgaWYgKHNvdXJjZSA9PSB1bmRlZmluZWQpIHJldHVybiBuZXcgdGhpcygpO1xuICAgIEEgPSBbXTtcbiAgICBpZiAobWFwcGluZykge1xuICAgICAgbiA9IDA7XG4gICAgICBjYiA9IGN0eChtYXBGbiwgYXJndW1lbnRzWzJdLCAyKTtcbiAgICAgIGZvck9mKHNvdXJjZSwgZmFsc2UsIGZ1bmN0aW9uIChuZXh0SXRlbSkge1xuICAgICAgICBBLnB1c2goY2IobmV4dEl0ZW0sIG4rKykpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvck9mKHNvdXJjZSwgZmFsc2UsIEEucHVzaCwgQSk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgdGhpcyhBKTtcbiAgfSB9KTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///65\n")},function(module,exports,__webpack_require__){eval("var isObject = __webpack_require__(4);\nvar document = __webpack_require__(2).document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n return is ? document.createElement(it) : {};\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZG9tLWNyZWF0ZS5qcz8yMzBlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGVBQWUsbUJBQU8sQ0FBQyxDQUFXO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiNjYuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBkb2N1bWVudCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLmRvY3VtZW50O1xuLy8gdHlwZW9mIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQgaXMgJ29iamVjdCcgaW4gb2xkIElFXG52YXIgaXMgPSBpc09iamVjdChkb2N1bWVudCkgJiYgaXNPYmplY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXMgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGl0KSA6IHt9O1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///66\n")},function(module,exports,__webpack_require__){eval("var global = __webpack_require__(2);\nvar core = __webpack_require__(18);\nvar LIBRARY = __webpack_require__(29);\nvar wksExt = __webpack_require__(95);\nvar defineProperty = __webpack_require__(8).f;\nmodule.exports = function (name) {\n var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});\n if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) });\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fd2tzLWRlZmluZS5qcz8zYTcyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGFBQWEsbUJBQU8sQ0FBQyxDQUFXO0FBQ2hDLFdBQVcsbUJBQU8sQ0FBQyxFQUFTO0FBQzVCLGNBQWMsbUJBQU8sQ0FBQyxFQUFZO0FBQ2xDLGFBQWEsbUJBQU8sQ0FBQyxFQUFZO0FBQ2pDLHFCQUFxQixtQkFBTyxDQUFDLENBQWM7QUFDM0M7QUFDQSwwREFBMEQsc0JBQXNCO0FBQ2hGLGtGQUFrRix3QkFBd0I7QUFDMUciLCJmaWxlIjoiNjcuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgY29yZSA9IHJlcXVpcmUoJy4vX2NvcmUnKTtcbnZhciBMSUJSQVJZID0gcmVxdWlyZSgnLi9fbGlicmFyeScpO1xudmFyIHdrc0V4dCA9IHJlcXVpcmUoJy4vX3drcy1leHQnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIHZhciAkU3ltYm9sID0gY29yZS5TeW1ib2wgfHwgKGNvcmUuU3ltYm9sID0gTElCUkFSWSA/IHt9IDogZ2xvYmFsLlN5bWJvbCB8fCB7fSk7XG4gIGlmIChuYW1lLmNoYXJBdCgwKSAhPSAnXycgJiYgIShuYW1lIGluICRTeW1ib2wpKSBkZWZpbmVQcm9wZXJ0eSgkU3ltYm9sLCBuYW1lLCB7IHZhbHVlOiB3a3NFeHQuZihuYW1lKSB9KTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///67\n")},function(module,exports,__webpack_require__){eval("var shared = __webpack_require__(47)('keys');\nvar uid = __webpack_require__(33);\nmodule.exports = function (key) {\n return shared[key] || (shared[key] = uid(key));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2hhcmVkLWtleS5qcz82MTNiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGFBQWEsbUJBQU8sQ0FBQyxFQUFXO0FBQ2hDLFVBQVUsbUJBQU8sQ0FBQyxFQUFRO0FBQzFCO0FBQ0E7QUFDQSIsImZpbGUiOiI2OC5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBzaGFyZWQgPSByZXF1aXJlKCcuL19zaGFyZWQnKSgna2V5cycpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4vX3VpZCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiBzaGFyZWRba2V5XSB8fCAoc2hhcmVkW2tleV0gPSB1aWQoa2V5KSk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///68\n")},function(module,exports){eval("// IE 8- don't enum bug keys\nmodule.exports = (\n 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZW51bS1idWcta2V5cy5qcz9lMTFlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjY5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gSUUgOC0gZG9uJ3QgZW51bSBidWcga2V5c1xubW9kdWxlLmV4cG9ydHMgPSAoXG4gICdjb25zdHJ1Y3RvcixoYXNPd25Qcm9wZXJ0eSxpc1Byb3RvdHlwZU9mLHByb3BlcnR5SXNFbnVtZXJhYmxlLHRvTG9jYWxlU3RyaW5nLHRvU3RyaW5nLHZhbHVlT2YnXG4pLnNwbGl0KCcsJyk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///69\n")},function(module,exports,__webpack_require__){eval("var document = __webpack_require__(2).document;\nmodule.exports = document && document.documentElement;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faHRtbC5qcz9mYWIyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGVBQWUsbUJBQU8sQ0FBQyxDQUFXO0FBQ2xDIiwiZmlsZSI6IjcwLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGRvY3VtZW50ID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuZG9jdW1lbnQ7XG5tb2R1bGUuZXhwb3J0cyA9IGRvY3VtZW50ICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///70\n")},function(module,exports,__webpack_require__){eval("// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nvar isObject = __webpack_require__(4);\nvar anObject = __webpack_require__(1);\nvar check = function (O, proto) {\n anObject(O);\n if (!isObject(proto) && proto !== null) throw TypeError(proto + \": can't set as prototype!\");\n};\nmodule.exports = {\n set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line\n function (test, buggy, set) {\n try {\n set = __webpack_require__(19)(Function.call, __webpack_require__(16).f(Object.prototype, '__proto__').set, 2);\n set(test, []);\n buggy = !(test instanceof Array);\n } catch (e) { buggy = true; }\n return function setPrototypeOf(O, proto) {\n check(O, proto);\n if (buggy) O.__proto__ = proto;\n else set(O, proto);\n return O;\n };\n }({}, false) : undefined),\n check: check\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2V0LXByb3RvLmpzPzhiOTciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrREFBa0Q7QUFDbEQ7QUFDQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxFQUFRLGlCQUFpQixtQkFBTyxDQUFDLEVBQWdCO0FBQ3ZFO0FBQ0E7QUFDQSxPQUFPLFlBQVksY0FBYztBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLLEdBQUc7QUFDUjtBQUNBIiwiZmlsZSI6IjcxLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gV29ya3Mgd2l0aCBfX3Byb3RvX18gb25seS4gT2xkIHY4IGNhbid0IHdvcmsgd2l0aCBudWxsIHByb3RvIG9iamVjdHMuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90byAqL1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBjaGVjayA9IGZ1bmN0aW9uIChPLCBwcm90bykge1xuICBhbk9iamVjdChPKTtcbiAgaWYgKCFpc09iamVjdChwcm90bykgJiYgcHJvdG8gIT09IG51bGwpIHRocm93IFR5cGVFcnJvcihwcm90byArIFwiOiBjYW4ndCBzZXQgYXMgcHJvdG90eXBlIVwiKTtcbn07XG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc2V0OiBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgKCdfX3Byb3RvX18nIGluIHt9ID8gLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICAgIGZ1bmN0aW9uICh0ZXN0LCBidWdneSwgc2V0KSB7XG4gICAgICB0cnkge1xuICAgICAgICBzZXQgPSByZXF1aXJlKCcuL19jdHgnKShGdW5jdGlvbi5jYWxsLCByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpLmYoT2JqZWN0LnByb3RvdHlwZSwgJ19fcHJvdG9fXycpLnNldCwgMik7XG4gICAgICAgIHNldCh0ZXN0LCBbXSk7XG4gICAgICAgIGJ1Z2d5ID0gISh0ZXN0IGluc3RhbmNlb2YgQXJyYXkpO1xuICAgICAgfSBjYXRjaCAoZSkgeyBidWdneSA9IHRydWU7IH1cbiAgICAgIHJldHVybiBmdW5jdGlvbiBzZXRQcm90b3R5cGVPZihPLCBwcm90bykge1xuICAgICAgICBjaGVjayhPLCBwcm90byk7XG4gICAgICAgIGlmIChidWdneSkgTy5fX3Byb3RvX18gPSBwcm90bztcbiAgICAgICAgZWxzZSBzZXQoTywgcHJvdG8pO1xuICAgICAgICByZXR1cm4gTztcbiAgICAgIH07XG4gICAgfSh7fSwgZmFsc2UpIDogdW5kZWZpbmVkKSxcbiAgY2hlY2s6IGNoZWNrXG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///71\n")},function(module,exports){eval("module.exports = '\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003' +\n '\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF';\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLXdzLmpzP2ZkZWYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSIsImZpbGUiOiI3Mi5qcyIsInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gJ1xceDA5XFx4MEFcXHgwQlxceDBDXFx4MERcXHgyMFxceEEwXFx1MTY4MFxcdTE4MEVcXHUyMDAwXFx1MjAwMVxcdTIwMDJcXHUyMDAzJyArXG4gICdcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBBXFx1MjAyRlxcdTIwNUZcXHUzMDAwXFx1MjAyOFxcdTIwMjlcXHVGRUZGJztcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///72\n")},function(module,exports,__webpack_require__){eval("var isObject = __webpack_require__(4);\nvar setPrototypeOf = __webpack_require__(71).set;\nmodule.exports = function (that, target, C) {\n var S = target.constructor;\n var P;\n if (S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && isObject(P) && setPrototypeOf) {\n setPrototypeOf(that, P);\n } return that;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faW5oZXJpdC1pZi1yZXF1aXJlZC5qcz81ZGJjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLHFCQUFxQixtQkFBTyxDQUFDLEVBQWM7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCIsImZpbGUiOiI3My5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIHNldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fc2V0LXByb3RvJykuc2V0O1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGhhdCwgdGFyZ2V0LCBDKSB7XG4gIHZhciBTID0gdGFyZ2V0LmNvbnN0cnVjdG9yO1xuICB2YXIgUDtcbiAgaWYgKFMgIT09IEMgJiYgdHlwZW9mIFMgPT0gJ2Z1bmN0aW9uJyAmJiAoUCA9IFMucHJvdG90eXBlKSAhPT0gQy5wcm90b3R5cGUgJiYgaXNPYmplY3QoUCkgJiYgc2V0UHJvdG90eXBlT2YpIHtcbiAgICBzZXRQcm90b3R5cGVPZih0aGF0LCBQKTtcbiAgfSByZXR1cm4gdGhhdDtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///73\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar toInteger = __webpack_require__(21);\nvar defined = __webpack_require__(24);\n\nmodule.exports = function repeat(count) {\n var str = String(defined(this));\n var res = '';\n var n = toInteger(count);\n if (n < 0 || n == Infinity) throw RangeError(\"Count can't be negative\");\n for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) res += str;\n return res;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLXJlcGVhdC5qcz85NzQ0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2QyxjQUFjLG1CQUFPLENBQUMsRUFBWTs7QUFFbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsTUFBTTtBQUNkO0FBQ0EiLCJmaWxlIjoiNzQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gcmVwZWF0KGNvdW50KSB7XG4gIHZhciBzdHIgPSBTdHJpbmcoZGVmaW5lZCh0aGlzKSk7XG4gIHZhciByZXMgPSAnJztcbiAgdmFyIG4gPSB0b0ludGVnZXIoY291bnQpO1xuICBpZiAobiA8IDAgfHwgbiA9PSBJbmZpbml0eSkgdGhyb3cgUmFuZ2VFcnJvcihcIkNvdW50IGNhbid0IGJlIG5lZ2F0aXZlXCIpO1xuICBmb3IgKDtuID4gMDsgKG4gPj4+PSAxKSAmJiAoc3RyICs9IHN0cikpIGlmIChuICYgMSkgcmVzICs9IHN0cjtcbiAgcmV0dXJuIHJlcztcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///74\n")},function(module,exports){eval("// 20.2.2.28 Math.sign(x)\nmodule.exports = Math.sign || function sign(x) {\n // eslint-disable-next-line no-self-compare\n return (x = +x) == 0 || x != x ? x : x < 0 ? -1 : 1;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWF0aC1zaWduLmpzPzk2ZmIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiI3NS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDIwLjIuMi4yOCBNYXRoLnNpZ24oeClcbm1vZHVsZS5leHBvcnRzID0gTWF0aC5zaWduIHx8IGZ1bmN0aW9uIHNpZ24oeCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gIHJldHVybiAoeCA9ICt4KSA9PSAwIHx8IHggIT0geCA/IHggOiB4IDwgMCA/IC0xIDogMTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///75\n")},function(module,exports){eval("// 20.2.2.14 Math.expm1(x)\nvar $expm1 = Math.expm1;\nmodule.exports = (!$expm1\n // Old FF bug\n || $expm1(10) > 22025.465794806719 || $expm1(10) < 22025.4657948067165168\n // Tor Browser bug\n || $expm1(-2e-17) != -2e-17\n) ? function expm1(x) {\n return (x = +x) == 0 ? x : x > -1e-6 && x < 1e-6 ? x + x * x / 2 : Math.exp(x) - 1;\n} : $expm1;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWF0aC1leHBtMS5qcz8yZDVjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiNzYuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyMC4yLjIuMTQgTWF0aC5leHBtMSh4KVxudmFyICRleHBtMSA9IE1hdGguZXhwbTE7XG5tb2R1bGUuZXhwb3J0cyA9ICghJGV4cG0xXG4gIC8vIE9sZCBGRiBidWdcbiAgfHwgJGV4cG0xKDEwKSA+IDIyMDI1LjQ2NTc5NDgwNjcxOSB8fCAkZXhwbTEoMTApIDwgMjIwMjUuNDY1Nzk0ODA2NzE2NTE2OFxuICAvLyBUb3IgQnJvd3NlciBidWdcbiAgfHwgJGV4cG0xKC0yZS0xNykgIT0gLTJlLTE3XG4pID8gZnVuY3Rpb24gZXhwbTEoeCkge1xuICByZXR1cm4gKHggPSAreCkgPT0gMCA/IHggOiB4ID4gLTFlLTYgJiYgeCA8IDFlLTYgPyB4ICsgeCAqIHggLyAyIDogTWF0aC5leHAoeCkgLSAxO1xufSA6ICRleHBtMTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///76\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar LIBRARY = __webpack_require__(29);\nvar $export = __webpack_require__(0);\nvar redefine = __webpack_require__(12);\nvar hide = __webpack_require__(11);\nvar Iterators = __webpack_require__(46);\nvar $iterCreate = __webpack_require__(78);\nvar setToStringTag = __webpack_require__(43);\nvar getPrototypeOf = __webpack_require__(17);\nvar ITERATOR = __webpack_require__(5)('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n $iterCreate(Constructor, NAME, next);\n var getMethod = function (kind) {\n if (!BUGGY && kind in proto) return proto[kind];\n switch (kind) {\n case KEYS: return function keys() { return new Constructor(this, kind); };\n case VALUES: return function values() { return new Constructor(this, kind); };\n } return function entries() { return new Constructor(this, kind); };\n };\n var TAG = NAME + ' Iterator';\n var DEF_VALUES = DEFAULT == VALUES;\n var VALUES_BUG = false;\n var proto = Base.prototype;\n var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n var $default = $native || getMethod(DEFAULT);\n var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n var methods, key, IteratorPrototype;\n // Fix native\n if ($anyNative) {\n IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n // Set @@toStringTag to native iterators\n setToStringTag(IteratorPrototype, TAG, true);\n // fix for some old engines\n if (!LIBRARY && typeof IteratorPrototype[ITERATOR] != 'function') hide(IteratorPrototype, ITERATOR, returnThis);\n }\n }\n // fix Array#{values, @@iterator}.name in V8 / FF\n if (DEF_VALUES && $native && $native.name !== VALUES) {\n VALUES_BUG = true;\n $default = function values() { return $native.call(this); };\n }\n // Define iterator\n if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n hide(proto, ITERATOR, $default);\n }\n // Plug for library\n Iterators[NAME] = $default;\n Iterators[TAG] = returnThis;\n if (DEFAULT) {\n methods = {\n values: DEF_VALUES ? $default : getMethod(VALUES),\n keys: IS_SET ? $default : getMethod(KEYS),\n entries: $entries\n };\n if (FORCED) for (key in methods) {\n if (!(key in proto)) redefine(proto, key, methods[key]);\n } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n }\n return methods;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlci1kZWZpbmUuanM/MDFmOSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGNBQWMsbUJBQU8sQ0FBQyxFQUFZO0FBQ2xDLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyxFQUFhO0FBQ3BDLFdBQVcsbUJBQU8sQ0FBQyxFQUFTO0FBQzVCLGdCQUFnQixtQkFBTyxDQUFDLEVBQWM7QUFDdEMsa0JBQWtCLG1CQUFPLENBQUMsRUFBZ0I7QUFDMUMscUJBQXFCLG1CQUFPLENBQUMsRUFBc0I7QUFDbkQscUJBQXFCLG1CQUFPLENBQUMsRUFBZTtBQUM1QyxlQUFlLG1CQUFPLENBQUMsQ0FBUTtBQUMvQiw4Q0FBOEM7QUFDOUM7QUFDQTtBQUNBOztBQUVBLDhCQUE4QixhQUFhOztBQUUzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUNBQXlDLG9DQUFvQztBQUM3RSw2Q0FBNkMsb0NBQW9DO0FBQ2pGLEtBQUssNEJBQTRCLG9DQUFvQztBQUNyRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLG1CQUFtQjtBQUNuQztBQUNBO0FBQ0Esa0NBQWtDLDJCQUEyQjtBQUM3RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EiLCJmaWxlIjoiNzcuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgTElCUkFSWSA9IHJlcXVpcmUoJy4vX2xpYnJhcnknKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJyk7XG52YXIgJGl0ZXJDcmVhdGUgPSByZXF1aXJlKCcuL19pdGVyLWNyZWF0ZScpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBJVEVSQVRPUiA9IHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpO1xudmFyIEJVR0dZID0gIShbXS5rZXlzICYmICduZXh0JyBpbiBbXS5rZXlzKCkpOyAvLyBTYWZhcmkgaGFzIGJ1Z2d5IGl0ZXJhdG9ycyB3L28gYG5leHRgXG52YXIgRkZfSVRFUkFUT1IgPSAnQEBpdGVyYXRvcic7XG52YXIgS0VZUyA9ICdrZXlzJztcbnZhciBWQUxVRVMgPSAndmFsdWVzJztcblxudmFyIHJldHVyblRoaXMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChCYXNlLCBOQU1FLCBDb25zdHJ1Y3RvciwgbmV4dCwgREVGQVVMVCwgSVNfU0VULCBGT1JDRUQpIHtcbiAgJGl0ZXJDcmVhdGUoQ29uc3RydWN0b3IsIE5BTUUsIG5leHQpO1xuICB2YXIgZ2V0TWV0aG9kID0gZnVuY3Rpb24gKGtpbmQpIHtcbiAgICBpZiAoIUJVR0dZICYmIGtpbmQgaW4gcHJvdG8pIHJldHVybiBwcm90b1traW5kXTtcbiAgICBzd2l0Y2ggKGtpbmQpIHtcbiAgICAgIGNhc2UgS0VZUzogcmV0dXJuIGZ1bmN0aW9uIGtleXMoKSB7IHJldHVybiBuZXcgQ29uc3RydWN0b3IodGhpcywga2luZCk7IH07XG4gICAgICBjYXNlIFZBTFVFUzogcmV0dXJuIGZ1bmN0aW9uIHZhbHVlcygpIHsgcmV0dXJuIG5ldyBDb25zdHJ1Y3Rvcih0aGlzLCBraW5kKTsgfTtcbiAgICB9IHJldHVybiBmdW5jdGlvbiBlbnRyaWVzKCkgeyByZXR1cm4gbmV3IENvbnN0cnVjdG9yKHRoaXMsIGtpbmQpOyB9O1xuICB9O1xuICB2YXIgVEFHID0gTkFNRSArICcgSXRlcmF0b3InO1xuICB2YXIgREVGX1ZBTFVFUyA9IERFRkFVTFQgPT0gVkFMVUVTO1xuICB2YXIgVkFMVUVTX0JVRyA9IGZhbHNlO1xuICB2YXIgcHJvdG8gPSBCYXNlLnByb3RvdHlwZTtcbiAgdmFyICRuYXRpdmUgPSBwcm90b1tJVEVSQVRPUl0gfHwgcHJvdG9bRkZfSVRFUkFUT1JdIHx8IERFRkFVTFQgJiYgcHJvdG9bREVGQVVMVF07XG4gIHZhciAkZGVmYXVsdCA9ICRuYXRpdmUgfHwgZ2V0TWV0aG9kKERFRkFVTFQpO1xuICB2YXIgJGVudHJpZXMgPSBERUZBVUxUID8gIURFRl9WQUxVRVMgPyAkZGVmYXVsdCA6IGdldE1ldGhvZCgnZW50cmllcycpIDogdW5kZWZpbmVkO1xuICB2YXIgJGFueU5hdGl2ZSA9IE5BTUUgPT0gJ0FycmF5JyA/IHByb3RvLmVudHJpZXMgfHwgJG5hdGl2ZSA6ICRuYXRpdmU7XG4gIHZhciBtZXRob2RzLCBrZXksIEl0ZXJhdG9yUHJvdG90eXBlO1xuICAvLyBGaXggbmF0aXZlXG4gIGlmICgkYW55TmF0aXZlKSB7XG4gICAgSXRlcmF0b3JQcm90b3R5cGUgPSBnZXRQcm90b3R5cGVPZigkYW55TmF0aXZlLmNhbGwobmV3IEJhc2UoKSkpO1xuICAgIGlmIChJdGVyYXRvclByb3RvdHlwZSAhPT0gT2JqZWN0LnByb3RvdHlwZSAmJiBJdGVyYXRvclByb3RvdHlwZS5uZXh0KSB7XG4gICAgICAvLyBTZXQgQEB0b1N0cmluZ1RhZyB0byBuYXRpdmUgaXRlcmF0b3JzXG4gICAgICBzZXRUb1N0cmluZ1RhZyhJdGVyYXRvclByb3RvdHlwZSwgVEFHLCB0cnVlKTtcbiAgICAgIC8vIGZpeCBmb3Igc29tZSBvbGQgZW5naW5lc1xuICAgICAgaWYgKCFMSUJSQVJZICYmIHR5cGVvZiBJdGVyYXRvclByb3RvdHlwZVtJVEVSQVRPUl0gIT0gJ2Z1bmN0aW9uJykgaGlkZShJdGVyYXRvclByb3RvdHlwZSwgSVRFUkFUT1IsIHJldHVyblRoaXMpO1xuICAgIH1cbiAgfVxuICAvLyBmaXggQXJyYXkje3ZhbHVlcywgQEBpdGVyYXRvcn0ubmFtZSBpbiBWOCAvIEZGXG4gIGlmIChERUZfVkFMVUVTICYmICRuYXRpdmUgJiYgJG5hdGl2ZS5uYW1lICE9PSBWQUxVRVMpIHtcbiAgICBWQUxVRVNfQlVHID0gdHJ1ZTtcbiAgICAkZGVmYXVsdCA9IGZ1bmN0aW9uIHZhbHVlcygpIHsgcmV0dXJuICRuYXRpdmUuY2FsbCh0aGlzKTsgfTtcbiAgfVxuICAvLyBEZWZpbmUgaXRlcmF0b3JcbiAgaWYgKCghTElCUkFSWSB8fCBGT1JDRUQpICYmIChCVUdHWSB8fCBWQUxVRVNfQlVHIHx8ICFwcm90b1tJVEVSQVRPUl0pKSB7XG4gICAgaGlkZShwcm90bywgSVRFUkFUT1IsICRkZWZhdWx0KTtcbiAgfVxuICAvLyBQbHVnIGZvciBsaWJyYXJ5XG4gIEl0ZXJhdG9yc1tOQU1FXSA9ICRkZWZhdWx0O1xuICBJdGVyYXRvcnNbVEFHXSA9IHJldHVyblRoaXM7XG4gIGlmIChERUZBVUxUKSB7XG4gICAgbWV0aG9kcyA9IHtcbiAgICAgIHZhbHVlczogREVGX1ZBTFVFUyA/ICRkZWZhdWx0IDogZ2V0TWV0aG9kKFZBTFVFUyksXG4gICAgICBrZXlzOiBJU19TRVQgPyAkZGVmYXVsdCA6IGdldE1ldGhvZChLRVlTKSxcbiAgICAgIGVudHJpZXM6ICRlbnRyaWVzXG4gICAgfTtcbiAgICBpZiAoRk9SQ0VEKSBmb3IgKGtleSBpbiBtZXRob2RzKSB7XG4gICAgICBpZiAoIShrZXkgaW4gcHJvdG8pKSByZWRlZmluZShwcm90bywga2V5LCBtZXRob2RzW2tleV0pO1xuICAgIH0gZWxzZSAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIChCVUdHWSB8fCBWQUxVRVNfQlVHKSwgTkFNRSwgbWV0aG9kcyk7XG4gIH1cbiAgcmV0dXJuIG1ldGhvZHM7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///77\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar create = __webpack_require__(36);\nvar descriptor = __webpack_require__(32);\nvar setToStringTag = __webpack_require__(43);\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\n__webpack_require__(11)(IteratorPrototype, __webpack_require__(5)('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n setToStringTag(Constructor, NAME + ' Iterator');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlci1jcmVhdGUuanM/NDFhMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGFBQWEsbUJBQU8sQ0FBQyxFQUFrQjtBQUN2QyxpQkFBaUIsbUJBQU8sQ0FBQyxFQUFrQjtBQUMzQyxxQkFBcUIsbUJBQU8sQ0FBQyxFQUFzQjtBQUNuRDs7QUFFQTtBQUNBLG1CQUFPLENBQUMsRUFBUyxxQkFBcUIsbUJBQU8sQ0FBQyxDQUFRLDRCQUE0QixhQUFhLEVBQUU7O0FBRWpHO0FBQ0EscURBQXFELDRCQUE0QjtBQUNqRjtBQUNBIiwiZmlsZSI6Ijc4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKTtcbnZhciBkZXNjcmlwdG9yID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBJdGVyYXRvclByb3RvdHlwZSA9IHt9O1xuXG4vLyAyNS4xLjIuMS4xICVJdGVyYXRvclByb3RvdHlwZSVbQEBpdGVyYXRvcl0oKVxucmVxdWlyZSgnLi9faGlkZScpKEl0ZXJhdG9yUHJvdG90eXBlLCByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBOQU1FLCBuZXh0KSB7XG4gIENvbnN0cnVjdG9yLnByb3RvdHlwZSA9IGNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSwgeyBuZXh0OiBkZXNjcmlwdG9yKDEsIG5leHQpIH0pO1xuICBzZXRUb1N0cmluZ1RhZyhDb25zdHJ1Y3RvciwgTkFNRSArICcgSXRlcmF0b3InKTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///78\n")},function(module,exports,__webpack_require__){eval("// helper for String#{startsWith, endsWith, includes}\nvar isRegExp = __webpack_require__(56);\nvar defined = __webpack_require__(24);\n\nmodule.exports = function (that, searchString, NAME) {\n if (isRegExp(searchString)) throw TypeError('String#' + NAME + \" doesn't accept regex!\");\n return String(defined(that));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLWNvbnRleHQuanM/ZDJjOCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxzQkFBc0I7QUFDdEIsZUFBZSxtQkFBTyxDQUFDLEVBQWM7QUFDckMsY0FBYyxtQkFBTyxDQUFDLEVBQVk7O0FBRWxDO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6Ijc5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaGVscGVyIGZvciBTdHJpbmcje3N0YXJ0c1dpdGgsIGVuZHNXaXRoLCBpbmNsdWRlc31cbnZhciBpc1JlZ0V4cCA9IHJlcXVpcmUoJy4vX2lzLXJlZ2V4cCcpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRoYXQsIHNlYXJjaFN0cmluZywgTkFNRSkge1xuICBpZiAoaXNSZWdFeHAoc2VhcmNoU3RyaW5nKSkgdGhyb3cgVHlwZUVycm9yKCdTdHJpbmcjJyArIE5BTUUgKyBcIiBkb2Vzbid0IGFjY2VwdCByZWdleCFcIik7XG4gIHJldHVybiBTdHJpbmcoZGVmaW5lZCh0aGF0KSk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///79\n")},function(module,exports,__webpack_require__){eval("var MATCH = __webpack_require__(5)('match');\nmodule.exports = function (KEY) {\n var re = /./;\n try {\n '/./'[KEY](re);\n } catch (e) {\n try {\n re[MATCH] = false;\n return !'/./'[KEY](re);\n } catch (f) { /* empty */ }\n } return true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZmFpbHMtaXMtcmVnZXhwLmpzPzUxNDciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSxtQkFBTyxDQUFDLENBQVE7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsS0FBSyxZQUFZO0FBQ2pCLEdBQUc7QUFDSCIsImZpbGUiOiI4MC5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBNQVRDSCA9IHJlcXVpcmUoJy4vX3drcycpKCdtYXRjaCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoS0VZKSB7XG4gIHZhciByZSA9IC8uLztcbiAgdHJ5IHtcbiAgICAnLy4vJ1tLRVldKHJlKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHRyeSB7XG4gICAgICByZVtNQVRDSF0gPSBmYWxzZTtcbiAgICAgIHJldHVybiAhJy8uLydbS0VZXShyZSk7XG4gICAgfSBjYXRjaCAoZikgeyAvKiBlbXB0eSAqLyB9XG4gIH0gcmV0dXJuIHRydWU7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///80\n")},function(module,exports,__webpack_require__){eval("// check on default Array iterator\nvar Iterators = __webpack_require__(46);\nvar ITERATOR = __webpack_require__(5)('iterator');\nvar ArrayProto = Array.prototype;\n\nmodule.exports = function (it) {\n return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtYXJyYXktaXRlci5qcz8zM2E0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsZ0JBQWdCLG1CQUFPLENBQUMsRUFBYztBQUN0QyxlQUFlLG1CQUFPLENBQUMsQ0FBUTtBQUMvQjs7QUFFQTtBQUNBO0FBQ0EiLCJmaWxlIjoiODEuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBjaGVjayBvbiBkZWZhdWx0IEFycmF5IGl0ZXJhdG9yXG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJyk7XG52YXIgSVRFUkFUT1IgPSByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKTtcbnZhciBBcnJheVByb3RvID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgIT09IHVuZGVmaW5lZCAmJiAoSXRlcmF0b3JzLkFycmF5ID09PSBpdCB8fCBBcnJheVByb3RvW0lURVJBVE9SXSA9PT0gaXQpO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///81\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $defineProperty = __webpack_require__(8);\nvar createDesc = __webpack_require__(32);\n\nmodule.exports = function (object, index, value) {\n if (index in object) $defineProperty.f(object, index, createDesc(0, value));\n else object[index] = value;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY3JlYXRlLXByb3BlcnR5LmpzP2YxYWUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixzQkFBc0IsbUJBQU8sQ0FBQyxDQUFjO0FBQzVDLGlCQUFpQixtQkFBTyxDQUFDLEVBQWtCOztBQUUzQztBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiI4Mi5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciAkZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciBjcmVhdGVEZXNjID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIGluZGV4LCB2YWx1ZSkge1xuICBpZiAoaW5kZXggaW4gb2JqZWN0KSAkZGVmaW5lUHJvcGVydHkuZihvYmplY3QsIGluZGV4LCBjcmVhdGVEZXNjKDAsIHZhbHVlKSk7XG4gIGVsc2Ugb2JqZWN0W2luZGV4XSA9IHZhbHVlO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///82\n")},function(module,exports,__webpack_require__){eval("var classof = __webpack_require__(44);\nvar ITERATOR = __webpack_require__(5)('iterator');\nvar Iterators = __webpack_require__(46);\nmodule.exports = __webpack_require__(18).getIteratorMethod = function (it) {\n if (it != undefined) return it[ITERATOR]\n || it['@@iterator']\n || Iterators[classof(it)];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9jb3JlLmdldC1pdGVyYXRvci1tZXRob2QuanM/MjdlZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLG1CQUFPLENBQUMsRUFBWTtBQUNsQyxlQUFlLG1CQUFPLENBQUMsQ0FBUTtBQUMvQixnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFjO0FBQ3RDLGlCQUFpQixtQkFBTyxDQUFDLEVBQVM7QUFDbEM7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiODMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4vX2NsYXNzb2YnKTtcbnZhciBJVEVSQVRPUiA9IHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19jb3JlJykuZ2V0SXRlcmF0b3JNZXRob2QgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGl0ICE9IHVuZGVmaW5lZCkgcmV0dXJuIGl0W0lURVJBVE9SXVxuICAgIHx8IGl0WydAQGl0ZXJhdG9yJ11cbiAgICB8fCBJdGVyYXRvcnNbY2xhc3NvZihpdCldO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///83\n")},function(module,exports,__webpack_require__){eval("// 9.4.2.3 ArraySpeciesCreate(originalArray, length)\nvar speciesConstructor = __webpack_require__(223);\n\nmodule.exports = function (original, length) {\n return new (speciesConstructor(original))(length);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktc3BlY2llcy1jcmVhdGUuanM/Y2QxYyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLHlCQUF5QixtQkFBTyxDQUFDLEdBQThCOztBQUUvRDtBQUNBO0FBQ0EiLCJmaWxlIjoiODQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyA5LjQuMi4zIEFycmF5U3BlY2llc0NyZWF0ZShvcmlnaW5hbEFycmF5LCBsZW5ndGgpXG52YXIgc3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi9fYXJyYXktc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcmlnaW5hbCwgbGVuZ3RoKSB7XG4gIHJldHVybiBuZXcgKHNwZWNpZXNDb25zdHJ1Y3RvcihvcmlnaW5hbCkpKGxlbmd0aCk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///84\n")},function(module,exports,__webpack_require__){"use strict";eval("// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\n\nvar toObject = __webpack_require__(9);\nvar toAbsoluteIndex = __webpack_require__(35);\nvar toLength = __webpack_require__(6);\nmodule.exports = function fill(value /* , start = 0, end = @length */) {\n var O = toObject(this);\n var length = toLength(O.length);\n var aLen = arguments.length;\n var index = toAbsoluteIndex(aLen > 1 ? arguments[1] : undefined, length);\n var end = aLen > 2 ? arguments[2] : undefined;\n var endPos = end === undefined ? length : toAbsoluteIndex(end, length);\n while (endPos > index) O[index++] = value;\n return O;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktZmlsbC5qcz8zNmJkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ2E7QUFDYixlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxzQkFBc0IsbUJBQU8sQ0FBQyxFQUFzQjtBQUNwRCxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiI4NS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDIyLjEuMy42IEFycmF5LnByb3RvdHlwZS5maWxsKHZhbHVlLCBzdGFydCA9IDAsIGVuZCA9IHRoaXMubGVuZ3RoKVxuJ3VzZSBzdHJpY3QnO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi9fdG8tYWJzb2x1dGUtaW5kZXgnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBmaWxsKHZhbHVlIC8qICwgc3RhcnQgPSAwLCBlbmQgPSBAbGVuZ3RoICovKSB7XG4gIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gIHZhciBsZW5ndGggPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgdmFyIGluZGV4ID0gdG9BYnNvbHV0ZUluZGV4KGFMZW4gPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkLCBsZW5ndGgpO1xuICB2YXIgZW5kID0gYUxlbiA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQ7XG4gIHZhciBlbmRQb3MgPSBlbmQgPT09IHVuZGVmaW5lZCA/IGxlbmd0aCA6IHRvQWJzb2x1dGVJbmRleChlbmQsIGxlbmd0aCk7XG4gIHdoaWxlIChlbmRQb3MgPiBpbmRleCkgT1tpbmRleCsrXSA9IHZhbHVlO1xuICByZXR1cm4gTztcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///85\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar addToUnscopables = __webpack_require__(31);\nvar step = __webpack_require__(112);\nvar Iterators = __webpack_require__(46);\nvar toIObject = __webpack_require__(15);\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = __webpack_require__(77)(Array, 'Array', function (iterated, kind) {\n this._t = toIObject(iterated); // target\n this._i = 0; // next index\n this._k = kind; // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var kind = this._k;\n var index = this._i++;\n if (!O || index >= O.length) {\n this._t = undefined;\n return step(1);\n }\n if (kind == 'keys') return step(0, index);\n if (kind == 'values') return step(0, O[index]);\n return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuaXRlcmF0b3IuanM/Y2FkZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLHVCQUF1QixtQkFBTyxDQUFDLEVBQXVCO0FBQ3RELFdBQVcsbUJBQU8sQ0FBQyxHQUFjO0FBQ2pDLGdCQUFnQixtQkFBTyxDQUFDLEVBQWM7QUFDdEMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTs7QUFFdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsbUJBQU8sQ0FBQyxFQUFnQjtBQUN6QyxnQ0FBZ0M7QUFDaEMsY0FBYztBQUNkLGlCQUFpQjtBQUNqQjtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0EiLCJmaWxlIjoiODYuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgYWRkVG9VbnNjb3BhYmxlcyA9IHJlcXVpcmUoJy4vX2FkZC10by11bnNjb3BhYmxlcycpO1xudmFyIHN0ZXAgPSByZXF1aXJlKCcuL19pdGVyLXN0ZXAnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG5cbi8vIDIyLjEuMy40IEFycmF5LnByb3RvdHlwZS5lbnRyaWVzKClcbi8vIDIyLjEuMy4xMyBBcnJheS5wcm90b3R5cGUua2V5cygpXG4vLyAyMi4xLjMuMjkgQXJyYXkucHJvdG90eXBlLnZhbHVlcygpXG4vLyAyMi4xLjMuMzAgQXJyYXkucHJvdG90eXBlW0BAaXRlcmF0b3JdKClcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9faXRlci1kZWZpbmUnKShBcnJheSwgJ0FycmF5JywgZnVuY3Rpb24gKGl0ZXJhdGVkLCBraW5kKSB7XG4gIHRoaXMuX3QgPSB0b0lPYmplY3QoaXRlcmF0ZWQpOyAvLyB0YXJnZXRcbiAgdGhpcy5faSA9IDA7ICAgICAgICAgICAgICAgICAgIC8vIG5leHQgaW5kZXhcbiAgdGhpcy5fayA9IGtpbmQ7ICAgICAgICAgICAgICAgIC8vIGtpbmRcbi8vIDIyLjEuNS4yLjEgJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlLm5leHQoKVxufSwgZnVuY3Rpb24gKCkge1xuICB2YXIgTyA9IHRoaXMuX3Q7XG4gIHZhciBraW5kID0gdGhpcy5faztcbiAgdmFyIGluZGV4ID0gdGhpcy5faSsrO1xuICBpZiAoIU8gfHwgaW5kZXggPj0gTy5sZW5ndGgpIHtcbiAgICB0aGlzLl90ID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiBzdGVwKDEpO1xuICB9XG4gIGlmIChraW5kID09ICdrZXlzJykgcmV0dXJuIHN0ZXAoMCwgaW5kZXgpO1xuICBpZiAoa2luZCA9PSAndmFsdWVzJykgcmV0dXJuIHN0ZXAoMCwgT1tpbmRleF0pO1xuICByZXR1cm4gc3RlcCgwLCBbaW5kZXgsIE9baW5kZXhdXSk7XG59LCAndmFsdWVzJyk7XG5cbi8vIGFyZ3VtZW50c0xpc3RbQEBpdGVyYXRvcl0gaXMgJUFycmF5UHJvdG9fdmFsdWVzJSAoOS40LjQuNiwgOS40LjQuNylcbkl0ZXJhdG9ycy5Bcmd1bWVudHMgPSBJdGVyYXRvcnMuQXJyYXk7XG5cbmFkZFRvVW5zY29wYWJsZXMoJ2tleXMnKTtcbmFkZFRvVW5zY29wYWJsZXMoJ3ZhbHVlcycpO1xuYWRkVG9VbnNjb3BhYmxlcygnZW50cmllcycpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///86\n")},function(module,exports,__webpack_require__){"use strict";eval("\n\nvar regexpFlags = __webpack_require__(50);\n\nvar nativeExec = RegExp.prototype.exec;\n// This always refers to the native implementation, because the\n// String#replace polyfill uses ./fix-regexp-well-known-symbol-logic.js,\n// which loads this file before patching the method.\nvar nativeReplace = String.prototype.replace;\n\nvar patchedExec = nativeExec;\n\nvar LAST_INDEX = 'lastIndex';\n\nvar UPDATES_LAST_INDEX_WRONG = (function () {\n var re1 = /a/,\n re2 = /b*/g;\n nativeExec.call(re1, 'a');\n nativeExec.call(re2, 'a');\n return re1[LAST_INDEX] !== 0 || re2[LAST_INDEX] !== 0;\n})();\n\n// nonparticipating capturing group, copied from es5-shim's String#split patch.\nvar NPCG_INCLUDED = /()??/.exec('')[1] !== undefined;\n\nvar PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED;\n\nif (PATCH) {\n patchedExec = function exec(str) {\n var re = this;\n var lastIndex, reCopy, match, i;\n\n if (NPCG_INCLUDED) {\n reCopy = new RegExp('^' + re.source + '$(?!\\\\s)', regexpFlags.call(re));\n }\n if (UPDATES_LAST_INDEX_WRONG) lastIndex = re[LAST_INDEX];\n\n match = nativeExec.call(re, str);\n\n if (UPDATES_LAST_INDEX_WRONG && match) {\n re[LAST_INDEX] = re.global ? match.index + match[0].length : lastIndex;\n }\n if (NPCG_INCLUDED && match && match.length > 1) {\n // Fix browsers whose `exec` methods don't consistently return `undefined`\n // for NPCG, like IE8. NOTE: This doesn' work for /(.?)?/\n // eslint-disable-next-line no-loop-func\n nativeReplace.call(match[0], reCopy, function () {\n for (i = 1; i < arguments.length - 2; i++) {\n if (arguments[i] === undefined) match[i] = undefined;\n }\n });\n }\n\n return match;\n };\n}\n\nmodule.exports = patchedExec;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcmVnZXhwLWV4ZWMuanM/NTIwYSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixrQkFBa0IsbUJBQU8sQ0FBQyxFQUFVOztBQUVwQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLDBCQUEwQjtBQUM3QztBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiI4Ny5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHJlZ2V4cEZsYWdzID0gcmVxdWlyZSgnLi9fZmxhZ3MnKTtcblxudmFyIG5hdGl2ZUV4ZWMgPSBSZWdFeHAucHJvdG90eXBlLmV4ZWM7XG4vLyBUaGlzIGFsd2F5cyByZWZlcnMgdG8gdGhlIG5hdGl2ZSBpbXBsZW1lbnRhdGlvbiwgYmVjYXVzZSB0aGVcbi8vIFN0cmluZyNyZXBsYWNlIHBvbHlmaWxsIHVzZXMgLi9maXgtcmVnZXhwLXdlbGwta25vd24tc3ltYm9sLWxvZ2ljLmpzLFxuLy8gd2hpY2ggbG9hZHMgdGhpcyBmaWxlIGJlZm9yZSBwYXRjaGluZyB0aGUgbWV0aG9kLlxudmFyIG5hdGl2ZVJlcGxhY2UgPSBTdHJpbmcucHJvdG90eXBlLnJlcGxhY2U7XG5cbnZhciBwYXRjaGVkRXhlYyA9IG5hdGl2ZUV4ZWM7XG5cbnZhciBMQVNUX0lOREVYID0gJ2xhc3RJbmRleCc7XG5cbnZhciBVUERBVEVTX0xBU1RfSU5ERVhfV1JPTkcgPSAoZnVuY3Rpb24gKCkge1xuICB2YXIgcmUxID0gL2EvLFxuICAgICAgcmUyID0gL2IqL2c7XG4gIG5hdGl2ZUV4ZWMuY2FsbChyZTEsICdhJyk7XG4gIG5hdGl2ZUV4ZWMuY2FsbChyZTIsICdhJyk7XG4gIHJldHVybiByZTFbTEFTVF9JTkRFWF0gIT09IDAgfHwgcmUyW0xBU1RfSU5ERVhdICE9PSAwO1xufSkoKTtcblxuLy8gbm9ucGFydGljaXBhdGluZyBjYXB0dXJpbmcgZ3JvdXAsIGNvcGllZCBmcm9tIGVzNS1zaGltJ3MgU3RyaW5nI3NwbGl0IHBhdGNoLlxudmFyIE5QQ0dfSU5DTFVERUQgPSAvKCk/Py8uZXhlYygnJylbMV0gIT09IHVuZGVmaW5lZDtcblxudmFyIFBBVENIID0gVVBEQVRFU19MQVNUX0lOREVYX1dST05HIHx8IE5QQ0dfSU5DTFVERUQ7XG5cbmlmIChQQVRDSCkge1xuICBwYXRjaGVkRXhlYyA9IGZ1bmN0aW9uIGV4ZWMoc3RyKSB7XG4gICAgdmFyIHJlID0gdGhpcztcbiAgICB2YXIgbGFzdEluZGV4LCByZUNvcHksIG1hdGNoLCBpO1xuXG4gICAgaWYgKE5QQ0dfSU5DTFVERUQpIHtcbiAgICAgIHJlQ29weSA9IG5ldyBSZWdFeHAoJ14nICsgcmUuc291cmNlICsgJyQoPyFcXFxccyknLCByZWdleHBGbGFncy5jYWxsKHJlKSk7XG4gICAgfVxuICAgIGlmIChVUERBVEVTX0xBU1RfSU5ERVhfV1JPTkcpIGxhc3RJbmRleCA9IHJlW0xBU1RfSU5ERVhdO1xuXG4gICAgbWF0Y2ggPSBuYXRpdmVFeGVjLmNhbGwocmUsIHN0cik7XG5cbiAgICBpZiAoVVBEQVRFU19MQVNUX0lOREVYX1dST05HICYmIG1hdGNoKSB7XG4gICAgICByZVtMQVNUX0lOREVYXSA9IHJlLmdsb2JhbCA/IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoIDogbGFzdEluZGV4O1xuICAgIH1cbiAgICBpZiAoTlBDR19JTkNMVURFRCAmJiBtYXRjaCAmJiBtYXRjaC5sZW5ndGggPiAxKSB7XG4gICAgICAvLyBGaXggYnJvd3NlcnMgd2hvc2UgYGV4ZWNgIG1ldGhvZHMgZG9uJ3QgY29uc2lzdGVudGx5IHJldHVybiBgdW5kZWZpbmVkYFxuICAgICAgLy8gZm9yIE5QQ0csIGxpa2UgSUU4LiBOT1RFOiBUaGlzIGRvZXNuJyB3b3JrIGZvciAvKC4/KT8vXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbG9vcC1mdW5jXG4gICAgICBuYXRpdmVSZXBsYWNlLmNhbGwobWF0Y2hbMF0sIHJlQ29weSwgZnVuY3Rpb24gKCkge1xuICAgICAgICBmb3IgKGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aCAtIDI7IGkrKykge1xuICAgICAgICAgIGlmIChhcmd1bWVudHNbaV0gPT09IHVuZGVmaW5lZCkgbWF0Y2hbaV0gPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBtYXRjaDtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBwYXRjaGVkRXhlYztcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///87\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar at = __webpack_require__(55)(true);\n\n // `AdvanceStringIndex` abstract operation\n// https://tc39.github.io/ecma262/#sec-advancestringindex\nmodule.exports = function (S, index, unicode) {\n return index + (unicode ? at(S, index).length : 1);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYWR2YW5jZS1zdHJpbmctaW5kZXguanM/MDM5MCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLFNBQVMsbUJBQU8sQ0FBQyxFQUFjOztBQUUvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6Ijg4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIGF0ID0gcmVxdWlyZSgnLi9fc3RyaW5nLWF0JykodHJ1ZSk7XG5cbiAvLyBgQWR2YW5jZVN0cmluZ0luZGV4YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFkdmFuY2VzdHJpbmdpbmRleFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoUywgaW5kZXgsIHVuaWNvZGUpIHtcbiAgcmV0dXJuIGluZGV4ICsgKHVuaWNvZGUgPyBhdChTLCBpbmRleCkubGVuZ3RoIDogMSk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///88\n")},function(module,exports,__webpack_require__){eval("var ctx = __webpack_require__(19);\nvar invoke = __webpack_require__(102);\nvar html = __webpack_require__(70);\nvar cel = __webpack_require__(66);\nvar global = __webpack_require__(2);\nvar process = global.process;\nvar setTask = global.setImmediate;\nvar clearTask = global.clearImmediate;\nvar MessageChannel = global.MessageChannel;\nvar Dispatch = global.Dispatch;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar defer, channel, port;\nvar run = function () {\n var id = +this;\n // eslint-disable-next-line no-prototype-builtins\n if (queue.hasOwnProperty(id)) {\n var fn = queue[id];\n delete queue[id];\n fn();\n }\n};\nvar listener = function (event) {\n run.call(event.data);\n};\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!setTask || !clearTask) {\n setTask = function setImmediate(fn) {\n var args = [];\n var i = 1;\n while (arguments.length > i) args.push(arguments[i++]);\n queue[++counter] = function () {\n // eslint-disable-next-line no-new-func\n invoke(typeof fn == 'function' ? fn : Function(fn), args);\n };\n defer(counter);\n return counter;\n };\n clearTask = function clearImmediate(id) {\n delete queue[id];\n };\n // Node.js 0.8-\n if (__webpack_require__(20)(process) == 'process') {\n defer = function (id) {\n process.nextTick(ctx(run, id, 1));\n };\n // Sphere (JS game engine) Dispatch API\n } else if (Dispatch && Dispatch.now) {\n defer = function (id) {\n Dispatch.now(ctx(run, id, 1));\n };\n // Browsers with MessageChannel, includes WebWorkers\n } else if (MessageChannel) {\n channel = new MessageChannel();\n port = channel.port2;\n channel.port1.onmessage = listener;\n defer = ctx(port.postMessage, port, 1);\n // Browsers with postMessage, skip WebWorkers\n // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts) {\n defer = function (id) {\n global.postMessage(id + '', '*');\n };\n global.addEventListener('message', listener, false);\n // IE8-\n } else if (ONREADYSTATECHANGE in cel('script')) {\n defer = function (id) {\n html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () {\n html.removeChild(this);\n run.call(id);\n };\n };\n // Rest old browsers\n } else {\n defer = function (id) {\n setTimeout(ctx(run, id, 1), 0);\n };\n }\n}\nmodule.exports = {\n set: setTask,\n clear: clearTask\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdGFzay5qcz8xOTkxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFVBQVUsbUJBQU8sQ0FBQyxFQUFRO0FBQzFCLGFBQWEsbUJBQU8sQ0FBQyxHQUFXO0FBQ2hDLFdBQVcsbUJBQU8sQ0FBQyxFQUFTO0FBQzVCLFVBQVUsbUJBQU8sQ0FBQyxFQUFlO0FBQ2pDLGFBQWEsbUJBQU8sQ0FBQyxDQUFXO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNLG1CQUFPLENBQUMsRUFBUTtBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiODkuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgaW52b2tlID0gcmVxdWlyZSgnLi9faW52b2tlJyk7XG52YXIgaHRtbCA9IHJlcXVpcmUoJy4vX2h0bWwnKTtcbnZhciBjZWwgPSByZXF1aXJlKCcuL19kb20tY3JlYXRlJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgcHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzO1xudmFyIHNldFRhc2sgPSBnbG9iYWwuc2V0SW1tZWRpYXRlO1xudmFyIGNsZWFyVGFzayA9IGdsb2JhbC5jbGVhckltbWVkaWF0ZTtcbnZhciBNZXNzYWdlQ2hhbm5lbCA9IGdsb2JhbC5NZXNzYWdlQ2hhbm5lbDtcbnZhciBEaXNwYXRjaCA9IGdsb2JhbC5EaXNwYXRjaDtcbnZhciBjb3VudGVyID0gMDtcbnZhciBxdWV1ZSA9IHt9O1xudmFyIE9OUkVBRFlTVEFURUNIQU5HRSA9ICdvbnJlYWR5c3RhdGVjaGFuZ2UnO1xudmFyIGRlZmVyLCBjaGFubmVsLCBwb3J0O1xudmFyIHJ1biA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGlkID0gK3RoaXM7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgaWYgKHF1ZXVlLmhhc093blByb3BlcnR5KGlkKSkge1xuICAgIHZhciBmbiA9IHF1ZXVlW2lkXTtcbiAgICBkZWxldGUgcXVldWVbaWRdO1xuICAgIGZuKCk7XG4gIH1cbn07XG52YXIgbGlzdGVuZXIgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgcnVuLmNhbGwoZXZlbnQuZGF0YSk7XG59O1xuLy8gTm9kZS5qcyAwLjkrICYgSUUxMCsgaGFzIHNldEltbWVkaWF0ZSwgb3RoZXJ3aXNlOlxuaWYgKCFzZXRUYXNrIHx8ICFjbGVhclRhc2spIHtcbiAgc2V0VGFzayA9IGZ1bmN0aW9uIHNldEltbWVkaWF0ZShmbikge1xuICAgIHZhciBhcmdzID0gW107XG4gICAgdmFyIGkgPSAxO1xuICAgIHdoaWxlIChhcmd1bWVudHMubGVuZ3RoID4gaSkgYXJncy5wdXNoKGFyZ3VtZW50c1tpKytdKTtcbiAgICBxdWV1ZVsrK2NvdW50ZXJdID0gZnVuY3Rpb24gKCkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jXG4gICAgICBpbnZva2UodHlwZW9mIGZuID09ICdmdW5jdGlvbicgPyBmbiA6IEZ1bmN0aW9uKGZuKSwgYXJncyk7XG4gICAgfTtcbiAgICBkZWZlcihjb3VudGVyKTtcbiAgICByZXR1cm4gY291bnRlcjtcbiAgfTtcbiAgY2xlYXJUYXNrID0gZnVuY3Rpb24gY2xlYXJJbW1lZGlhdGUoaWQpIHtcbiAgICBkZWxldGUgcXVldWVbaWRdO1xuICB9O1xuICAvLyBOb2RlLmpzIDAuOC1cbiAgaWYgKHJlcXVpcmUoJy4vX2NvZicpKHByb2Nlc3MpID09ICdwcm9jZXNzJykge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGN0eChydW4sIGlkLCAxKSk7XG4gICAgfTtcbiAgLy8gU3BoZXJlIChKUyBnYW1lIGVuZ2luZSkgRGlzcGF0Y2ggQVBJXG4gIH0gZWxzZSBpZiAoRGlzcGF0Y2ggJiYgRGlzcGF0Y2gubm93KSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIERpc3BhdGNoLm5vdyhjdHgocnVuLCBpZCwgMSkpO1xuICAgIH07XG4gIC8vIEJyb3dzZXJzIHdpdGggTWVzc2FnZUNoYW5uZWwsIGluY2x1ZGVzIFdlYldvcmtlcnNcbiAgfSBlbHNlIGlmIChNZXNzYWdlQ2hhbm5lbCkge1xuICAgIGNoYW5uZWwgPSBuZXcgTWVzc2FnZUNoYW5uZWwoKTtcbiAgICBwb3J0ID0gY2hhbm5lbC5wb3J0MjtcbiAgICBjaGFubmVsLnBvcnQxLm9ubWVzc2FnZSA9IGxpc3RlbmVyO1xuICAgIGRlZmVyID0gY3R4KHBvcnQucG9zdE1lc3NhZ2UsIHBvcnQsIDEpO1xuICAvLyBCcm93c2VycyB3aXRoIHBvc3RNZXNzYWdlLCBza2lwIFdlYldvcmtlcnNcbiAgLy8gSUU4IGhhcyBwb3N0TWVzc2FnZSwgYnV0IGl0J3Mgc3luYyAmIHR5cGVvZiBpdHMgcG9zdE1lc3NhZ2UgaXMgJ29iamVjdCdcbiAgfSBlbHNlIGlmIChnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lciAmJiB0eXBlb2YgcG9zdE1lc3NhZ2UgPT0gJ2Z1bmN0aW9uJyAmJiAhZ2xvYmFsLmltcG9ydFNjcmlwdHMpIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgZ2xvYmFsLnBvc3RNZXNzYWdlKGlkICsgJycsICcqJyk7XG4gICAgfTtcbiAgICBnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGxpc3RlbmVyLCBmYWxzZSk7XG4gIC8vIElFOC1cbiAgfSBlbHNlIGlmIChPTlJFQURZU1RBVEVDSEFOR0UgaW4gY2VsKCdzY3JpcHQnKSkge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBodG1sLmFwcGVuZENoaWxkKGNlbCgnc2NyaXB0JykpW09OUkVBRFlTVEFURUNIQU5HRV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGh0bWwucmVtb3ZlQ2hpbGQodGhpcyk7XG4gICAgICAgIHJ1bi5jYWxsKGlkKTtcbiAgICAgIH07XG4gICAgfTtcbiAgLy8gUmVzdCBvbGQgYnJvd3NlcnNcbiAgfSBlbHNlIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgc2V0VGltZW91dChjdHgocnVuLCBpZCwgMSksIDApO1xuICAgIH07XG4gIH1cbn1cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZXQ6IHNldFRhc2ssXG4gIGNsZWFyOiBjbGVhclRhc2tcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///89\n")},function(module,exports,__webpack_require__){eval("var global = __webpack_require__(2);\nvar macrotask = __webpack_require__(89).set;\nvar Observer = global.MutationObserver || global.WebKitMutationObserver;\nvar process = global.process;\nvar Promise = global.Promise;\nvar isNode = __webpack_require__(20)(process) == 'process';\n\nmodule.exports = function () {\n var head, last, notify;\n\n var flush = function () {\n var parent, fn;\n if (isNode && (parent = process.domain)) parent.exit();\n while (head) {\n fn = head.fn;\n head = head.next;\n try {\n fn();\n } catch (e) {\n if (head) notify();\n else last = undefined;\n throw e;\n }\n } last = undefined;\n if (parent) parent.enter();\n };\n\n // Node.js\n if (isNode) {\n notify = function () {\n process.nextTick(flush);\n };\n // browsers with MutationObserver, except iOS Safari - https://github.com/zloirock/core-js/issues/339\n } else if (Observer && !(global.navigator && global.navigator.standalone)) {\n var toggle = true;\n var node = document.createTextNode('');\n new Observer(flush).observe(node, { characterData: true }); // eslint-disable-line no-new\n notify = function () {\n node.data = toggle = !toggle;\n };\n // environments with maybe non-completely correct, but existent Promise\n } else if (Promise && Promise.resolve) {\n // Promise.resolve without an argument throws an error in LG WebOS 2\n var promise = Promise.resolve(undefined);\n notify = function () {\n promise.then(flush);\n };\n // for other environments - macrotask based on:\n // - setImmediate\n // - MessageChannel\n // - window.postMessag\n // - onreadystatechange\n // - setTimeout\n } else {\n notify = function () {\n // strange IE + webpack dev server bug - use .call(global)\n macrotask.call(global, flush);\n };\n }\n\n return function (fn) {\n var task = { fn: fn, next: undefined };\n if (last) last.next = task;\n if (!head) {\n head = task;\n notify();\n } last = task;\n };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWljcm90YXNrLmpzPzgwNzkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsYUFBYSxtQkFBTyxDQUFDLENBQVc7QUFDaEMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBUztBQUNqQztBQUNBO0FBQ0E7QUFDQSxhQUFhLG1CQUFPLENBQUMsRUFBUTs7QUFFN0I7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSx1Q0FBdUMsc0JBQXNCLEVBQUU7QUFDL0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EiLCJmaWxlIjoiOTAuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgbWFjcm90YXNrID0gcmVxdWlyZSgnLi9fdGFzaycpLnNldDtcbnZhciBPYnNlcnZlciA9IGdsb2JhbC5NdXRhdGlvbk9ic2VydmVyIHx8IGdsb2JhbC5XZWJLaXRNdXRhdGlvbk9ic2VydmVyO1xudmFyIHByb2Nlc3MgPSBnbG9iYWwucHJvY2VzcztcbnZhciBQcm9taXNlID0gZ2xvYmFsLlByb21pc2U7XG52YXIgaXNOb2RlID0gcmVxdWlyZSgnLi9fY29mJykocHJvY2VzcykgPT0gJ3Byb2Nlc3MnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGhlYWQsIGxhc3QsIG5vdGlmeTtcblxuICB2YXIgZmx1c2ggPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHBhcmVudCwgZm47XG4gICAgaWYgKGlzTm9kZSAmJiAocGFyZW50ID0gcHJvY2Vzcy5kb21haW4pKSBwYXJlbnQuZXhpdCgpO1xuICAgIHdoaWxlIChoZWFkKSB7XG4gICAgICBmbiA9IGhlYWQuZm47XG4gICAgICBoZWFkID0gaGVhZC5uZXh0O1xuICAgICAgdHJ5IHtcbiAgICAgICAgZm4oKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKGhlYWQpIG5vdGlmeSgpO1xuICAgICAgICBlbHNlIGxhc3QgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgfSBsYXN0ID0gdW5kZWZpbmVkO1xuICAgIGlmIChwYXJlbnQpIHBhcmVudC5lbnRlcigpO1xuICB9O1xuXG4gIC8vIE5vZGUuanNcbiAgaWYgKGlzTm9kZSkge1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soZmx1c2gpO1xuICAgIH07XG4gIC8vIGJyb3dzZXJzIHdpdGggTXV0YXRpb25PYnNlcnZlciwgZXhjZXB0IGlPUyBTYWZhcmkgLSBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvMzM5XG4gIH0gZWxzZSBpZiAoT2JzZXJ2ZXIgJiYgIShnbG9iYWwubmF2aWdhdG9yICYmIGdsb2JhbC5uYXZpZ2F0b3Iuc3RhbmRhbG9uZSkpIHtcbiAgICB2YXIgdG9nZ2xlID0gdHJ1ZTtcbiAgICB2YXIgbm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcnKTtcbiAgICBuZXcgT2JzZXJ2ZXIoZmx1c2gpLm9ic2VydmUobm9kZSwgeyBjaGFyYWN0ZXJEYXRhOiB0cnVlIH0pOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIG5vZGUuZGF0YSA9IHRvZ2dsZSA9ICF0b2dnbGU7XG4gICAgfTtcbiAgLy8gZW52aXJvbm1lbnRzIHdpdGggbWF5YmUgbm9uLWNvbXBsZXRlbHkgY29ycmVjdCwgYnV0IGV4aXN0ZW50IFByb21pc2VcbiAgfSBlbHNlIGlmIChQcm9taXNlICYmIFByb21pc2UucmVzb2x2ZSkge1xuICAgIC8vIFByb21pc2UucmVzb2x2ZSB3aXRob3V0IGFuIGFyZ3VtZW50IHRocm93cyBhbiBlcnJvciBpbiBMRyBXZWJPUyAyXG4gICAgdmFyIHByb21pc2UgPSBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBwcm9taXNlLnRoZW4oZmx1c2gpO1xuICAgIH07XG4gIC8vIGZvciBvdGhlciBlbnZpcm9ubWVudHMgLSBtYWNyb3Rhc2sgYmFzZWQgb246XG4gIC8vIC0gc2V0SW1tZWRpYXRlXG4gIC8vIC0gTWVzc2FnZUNoYW5uZWxcbiAgLy8gLSB3aW5kb3cucG9zdE1lc3NhZ1xuICAvLyAtIG9ucmVhZHlzdGF0ZWNoYW5nZVxuICAvLyAtIHNldFRpbWVvdXRcbiAgfSBlbHNlIHtcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBzdHJhbmdlIElFICsgd2VicGFjayBkZXYgc2VydmVyIGJ1ZyAtIHVzZSAuY2FsbChnbG9iYWwpXG4gICAgICBtYWNyb3Rhc2suY2FsbChnbG9iYWwsIGZsdXNoKTtcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChmbikge1xuICAgIHZhciB0YXNrID0geyBmbjogZm4sIG5leHQ6IHVuZGVmaW5lZCB9O1xuICAgIGlmIChsYXN0KSBsYXN0Lm5leHQgPSB0YXNrO1xuICAgIGlmICghaGVhZCkge1xuICAgICAgaGVhZCA9IHRhc2s7XG4gICAgICBub3RpZnkoKTtcbiAgICB9IGxhc3QgPSB0YXNrO1xuICB9O1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///90\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// 25.4.1.5 NewPromiseCapability(C)\nvar aFunction = __webpack_require__(10);\n\nfunction PromiseCapability(C) {\n var resolve, reject;\n this.promise = new C(function ($$resolve, $$reject) {\n if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n resolve = $$resolve;\n reject = $$reject;\n });\n this.resolve = aFunction(resolve);\n this.reject = aFunction(reject);\n}\n\nmodule.exports.f = function (C) {\n return new PromiseCapability(C);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbmV3LXByb21pc2UtY2FwYWJpbGl0eS5qcz9hNWI4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlOztBQUV2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSIsImZpbGUiOiI5MS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIDI1LjQuMS41IE5ld1Byb21pc2VDYXBhYmlsaXR5KEMpXG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xuXG5mdW5jdGlvbiBQcm9taXNlQ2FwYWJpbGl0eShDKSB7XG4gIHZhciByZXNvbHZlLCByZWplY3Q7XG4gIHRoaXMucHJvbWlzZSA9IG5ldyBDKGZ1bmN0aW9uICgkJHJlc29sdmUsICQkcmVqZWN0KSB7XG4gICAgaWYgKHJlc29sdmUgIT09IHVuZGVmaW5lZCB8fCByZWplY3QgIT09IHVuZGVmaW5lZCkgdGhyb3cgVHlwZUVycm9yKCdCYWQgUHJvbWlzZSBjb25zdHJ1Y3RvcicpO1xuICAgIHJlc29sdmUgPSAkJHJlc29sdmU7XG4gICAgcmVqZWN0ID0gJCRyZWplY3Q7XG4gIH0pO1xuICB0aGlzLnJlc29sdmUgPSBhRnVuY3Rpb24ocmVzb2x2ZSk7XG4gIHRoaXMucmVqZWN0ID0gYUZ1bmN0aW9uKHJlamVjdCk7XG59XG5cbm1vZHVsZS5leHBvcnRzLmYgPSBmdW5jdGlvbiAoQykge1xuICByZXR1cm4gbmV3IFByb21pc2VDYXBhYmlsaXR5KEMpO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///91\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar global = __webpack_require__(2);\nvar DESCRIPTORS = __webpack_require__(7);\nvar LIBRARY = __webpack_require__(29);\nvar $typed = __webpack_require__(62);\nvar hide = __webpack_require__(11);\nvar redefineAll = __webpack_require__(41);\nvar fails = __webpack_require__(3);\nvar anInstance = __webpack_require__(39);\nvar toInteger = __webpack_require__(21);\nvar toLength = __webpack_require__(6);\nvar toIndex = __webpack_require__(122);\nvar gOPN = __webpack_require__(37).f;\nvar dP = __webpack_require__(8).f;\nvar arrayFill = __webpack_require__(85);\nvar setToStringTag = __webpack_require__(43);\nvar ARRAY_BUFFER = 'ArrayBuffer';\nvar DATA_VIEW = 'DataView';\nvar PROTOTYPE = 'prototype';\nvar WRONG_LENGTH = 'Wrong length!';\nvar WRONG_INDEX = 'Wrong index!';\nvar $ArrayBuffer = global[ARRAY_BUFFER];\nvar $DataView = global[DATA_VIEW];\nvar Math = global.Math;\nvar RangeError = global.RangeError;\n// eslint-disable-next-line no-shadow-restricted-names\nvar Infinity = global.Infinity;\nvar BaseBuffer = $ArrayBuffer;\nvar abs = Math.abs;\nvar pow = Math.pow;\nvar floor = Math.floor;\nvar log = Math.log;\nvar LN2 = Math.LN2;\nvar BUFFER = 'buffer';\nvar BYTE_LENGTH = 'byteLength';\nvar BYTE_OFFSET = 'byteOffset';\nvar $BUFFER = DESCRIPTORS ? '_b' : BUFFER;\nvar $LENGTH = DESCRIPTORS ? '_l' : BYTE_LENGTH;\nvar $OFFSET = DESCRIPTORS ? '_o' : BYTE_OFFSET;\n\n// IEEE754 conversions based on https://github.com/feross/ieee754\nfunction packIEEE754(value, mLen, nBytes) {\n var buffer = new Array(nBytes);\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var rt = mLen === 23 ? pow(2, -24) - pow(2, -77) : 0;\n var i = 0;\n var s = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0;\n var e, m, c;\n value = abs(value);\n // eslint-disable-next-line no-self-compare\n if (value != value || value === Infinity) {\n // eslint-disable-next-line no-self-compare\n m = value != value ? 1 : 0;\n e = eMax;\n } else {\n e = floor(log(value) / LN2);\n if (value * (c = pow(2, -e)) < 1) {\n e--;\n c *= 2;\n }\n if (e + eBias >= 1) {\n value += rt / c;\n } else {\n value += rt * pow(2, 1 - eBias);\n }\n if (value * c >= 2) {\n e++;\n c /= 2;\n }\n if (e + eBias >= eMax) {\n m = 0;\n e = eMax;\n } else if (e + eBias >= 1) {\n m = (value * c - 1) * pow(2, mLen);\n e = e + eBias;\n } else {\n m = value * pow(2, eBias - 1) * pow(2, mLen);\n e = 0;\n }\n }\n for (; mLen >= 8; buffer[i++] = m & 255, m /= 256, mLen -= 8);\n e = e << mLen | m;\n eLen += mLen;\n for (; eLen > 0; buffer[i++] = e & 255, e /= 256, eLen -= 8);\n buffer[--i] |= s * 128;\n return buffer;\n}\nfunction unpackIEEE754(buffer, mLen, nBytes) {\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var nBits = eLen - 7;\n var i = nBytes - 1;\n var s = buffer[i--];\n var e = s & 127;\n var m;\n s >>= 7;\n for (; nBits > 0; e = e * 256 + buffer[i], i--, nBits -= 8);\n m = e & (1 << -nBits) - 1;\n e >>= -nBits;\n nBits += mLen;\n for (; nBits > 0; m = m * 256 + buffer[i], i--, nBits -= 8);\n if (e === 0) {\n e = 1 - eBias;\n } else if (e === eMax) {\n return m ? NaN : s ? -Infinity : Infinity;\n } else {\n m = m + pow(2, mLen);\n e = e - eBias;\n } return (s ? -1 : 1) * m * pow(2, e - mLen);\n}\n\nfunction unpackI32(bytes) {\n return bytes[3] << 24 | bytes[2] << 16 | bytes[1] << 8 | bytes[0];\n}\nfunction packI8(it) {\n return [it & 0xff];\n}\nfunction packI16(it) {\n return [it & 0xff, it >> 8 & 0xff];\n}\nfunction packI32(it) {\n return [it & 0xff, it >> 8 & 0xff, it >> 16 & 0xff, it >> 24 & 0xff];\n}\nfunction packF64(it) {\n return packIEEE754(it, 52, 8);\n}\nfunction packF32(it) {\n return packIEEE754(it, 23, 4);\n}\n\nfunction addGetter(C, key, internal) {\n dP(C[PROTOTYPE], key, { get: function () { return this[internal]; } });\n}\n\nfunction get(view, bytes, index, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = store.slice(start, start + bytes);\n return isLittleEndian ? pack : pack.reverse();\n}\nfunction set(view, bytes, index, conversion, value, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = conversion(+value);\n for (var i = 0; i < bytes; i++) store[start + i] = pack[isLittleEndian ? i : bytes - i - 1];\n}\n\nif (!$typed.ABV) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer, ARRAY_BUFFER);\n var byteLength = toIndex(length);\n this._b = arrayFill.call(new Array(byteLength), 0);\n this[$LENGTH] = byteLength;\n };\n\n $DataView = function DataView(buffer, byteOffset, byteLength) {\n anInstance(this, $DataView, DATA_VIEW);\n anInstance(buffer, $ArrayBuffer, DATA_VIEW);\n var bufferLength = buffer[$LENGTH];\n var offset = toInteger(byteOffset);\n if (offset < 0 || offset > bufferLength) throw RangeError('Wrong offset!');\n byteLength = byteLength === undefined ? bufferLength - offset : toLength(byteLength);\n if (offset + byteLength > bufferLength) throw RangeError(WRONG_LENGTH);\n this[$BUFFER] = buffer;\n this[$OFFSET] = offset;\n this[$LENGTH] = byteLength;\n };\n\n if (DESCRIPTORS) {\n addGetter($ArrayBuffer, BYTE_LENGTH, '_l');\n addGetter($DataView, BUFFER, '_b');\n addGetter($DataView, BYTE_LENGTH, '_l');\n addGetter($DataView, BYTE_OFFSET, '_o');\n }\n\n redefineAll($DataView[PROTOTYPE], {\n getInt8: function getInt8(byteOffset) {\n return get(this, 1, byteOffset)[0] << 24 >> 24;\n },\n getUint8: function getUint8(byteOffset) {\n return get(this, 1, byteOffset)[0];\n },\n getInt16: function getInt16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return (bytes[1] << 8 | bytes[0]) << 16 >> 16;\n },\n getUint16: function getUint16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return bytes[1] << 8 | bytes[0];\n },\n getInt32: function getInt32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1]));\n },\n getUint32: function getUint32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1])) >>> 0;\n },\n getFloat32: function getFloat32(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 4, byteOffset, arguments[1]), 23, 4);\n },\n getFloat64: function getFloat64(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 8, byteOffset, arguments[1]), 52, 8);\n },\n setInt8: function setInt8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setUint8: function setUint8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setInt16: function setInt16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setUint16: function setUint16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setInt32: function setInt32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setUint32: function setUint32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setFloat32: function setFloat32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packF32, value, arguments[2]);\n },\n setFloat64: function setFloat64(byteOffset, value /* , littleEndian */) {\n set(this, 8, byteOffset, packF64, value, arguments[2]);\n }\n });\n} else {\n if (!fails(function () {\n $ArrayBuffer(1);\n }) || !fails(function () {\n new $ArrayBuffer(-1); // eslint-disable-line no-new\n }) || fails(function () {\n new $ArrayBuffer(); // eslint-disable-line no-new\n new $ArrayBuffer(1.5); // eslint-disable-line no-new\n new $ArrayBuffer(NaN); // eslint-disable-line no-new\n return $ArrayBuffer.name != ARRAY_BUFFER;\n })) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer);\n return new BaseBuffer(toIndex(length));\n };\n var ArrayBufferProto = $ArrayBuffer[PROTOTYPE] = BaseBuffer[PROTOTYPE];\n for (var keys = gOPN(BaseBuffer), j = 0, key; keys.length > j;) {\n if (!((key = keys[j++]) in $ArrayBuffer)) hide($ArrayBuffer, key, BaseBuffer[key]);\n }\n if (!LIBRARY) ArrayBufferProto.constructor = $ArrayBuffer;\n }\n // iOS Safari 7.x bug\n var view = new $DataView(new $ArrayBuffer(2));\n var $setInt8 = $DataView[PROTOTYPE].setInt8;\n view.setInt8(0, 2147483648);\n view.setInt8(1, 2147483649);\n if (view.getInt8(0) || !view.getInt8(1)) redefineAll($DataView[PROTOTYPE], {\n setInt8: function setInt8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n },\n setUint8: function setUint8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n }\n }, true);\n}\nsetToStringTag($ArrayBuffer, ARRAY_BUFFER);\nsetToStringTag($DataView, DATA_VIEW);\nhide($DataView[PROTOTYPE], $typed.VIEW, true);\nexports[ARRAY_BUFFER] = $ArrayBuffer;\nexports[DATA_VIEW] = $DataView;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdHlwZWQtYnVmZmVyLmpzP2VkMGIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixhQUFhLG1CQUFPLENBQUMsQ0FBVztBQUNoQyxrQkFBa0IsbUJBQU8sQ0FBQyxDQUFnQjtBQUMxQyxjQUFjLG1CQUFPLENBQUMsRUFBWTtBQUNsQyxhQUFhLG1CQUFPLENBQUMsRUFBVTtBQUMvQixXQUFXLG1CQUFPLENBQUMsRUFBUztBQUM1QixrQkFBa0IsbUJBQU8sQ0FBQyxFQUFpQjtBQUMzQyxZQUFZLG1CQUFPLENBQUMsQ0FBVTtBQUM5QixpQkFBaUIsbUJBQU8sQ0FBQyxFQUFnQjtBQUN6QyxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGNBQWMsbUJBQU8sQ0FBQyxHQUFhO0FBQ25DLFdBQVcsbUJBQU8sQ0FBQyxFQUFnQjtBQUNuQyxTQUFTLG1CQUFPLENBQUMsQ0FBYztBQUMvQixnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDLHFCQUFxQixtQkFBTyxDQUFDLEVBQXNCO0FBQ25EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLFdBQVc7QUFDbkI7QUFDQTtBQUNBLFFBQVEsVUFBVTtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsV0FBVztBQUNuQjtBQUNBO0FBQ0E7QUFDQSxRQUFRLFdBQVc7QUFDbkI7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHlCQUF5QixtQkFBbUIsdUJBQXVCLEVBQUUsRUFBRTtBQUN2RTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixXQUFXO0FBQzVCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBO0FBQ0EsR0FBRztBQUNILHlCQUF5QjtBQUN6QixHQUFHO0FBQ0gsdUJBQXVCO0FBQ3ZCLDBCQUEwQjtBQUMxQiwwQkFBMEI7QUFDMUI7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlEQUFpRCxpQkFBaUI7QUFDbEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiOTIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpO1xudmFyIExJQlJBUlkgPSByZXF1aXJlKCcuL19saWJyYXJ5Jyk7XG52YXIgJHR5cGVkID0gcmVxdWlyZSgnLi9fdHlwZWQnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIHJlZGVmaW5lQWxsID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUtYWxsJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuL19hbi1pbnN0YW5jZScpO1xudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIHRvSW5kZXggPSByZXF1aXJlKCcuL190by1pbmRleCcpO1xudmFyIGdPUE4gPSByZXF1aXJlKCcuL19vYmplY3QtZ29wbicpLmY7XG52YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mO1xudmFyIGFycmF5RmlsbCA9IHJlcXVpcmUoJy4vX2FycmF5LWZpbGwnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgQVJSQVlfQlVGRkVSID0gJ0FycmF5QnVmZmVyJztcbnZhciBEQVRBX1ZJRVcgPSAnRGF0YVZpZXcnO1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xudmFyIFdST05HX0xFTkdUSCA9ICdXcm9uZyBsZW5ndGghJztcbnZhciBXUk9OR19JTkRFWCA9ICdXcm9uZyBpbmRleCEnO1xudmFyICRBcnJheUJ1ZmZlciA9IGdsb2JhbFtBUlJBWV9CVUZGRVJdO1xudmFyICREYXRhVmlldyA9IGdsb2JhbFtEQVRBX1ZJRVddO1xudmFyIE1hdGggPSBnbG9iYWwuTWF0aDtcbnZhciBSYW5nZUVycm9yID0gZ2xvYmFsLlJhbmdlRXJyb3I7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2hhZG93LXJlc3RyaWN0ZWQtbmFtZXNcbnZhciBJbmZpbml0eSA9IGdsb2JhbC5JbmZpbml0eTtcbnZhciBCYXNlQnVmZmVyID0gJEFycmF5QnVmZmVyO1xudmFyIGFicyA9IE1hdGguYWJzO1xudmFyIHBvdyA9IE1hdGgucG93O1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcbnZhciBsb2cgPSBNYXRoLmxvZztcbnZhciBMTjIgPSBNYXRoLkxOMjtcbnZhciBCVUZGRVIgPSAnYnVmZmVyJztcbnZhciBCWVRFX0xFTkdUSCA9ICdieXRlTGVuZ3RoJztcbnZhciBCWVRFX09GRlNFVCA9ICdieXRlT2Zmc2V0JztcbnZhciAkQlVGRkVSID0gREVTQ1JJUFRPUlMgPyAnX2InIDogQlVGRkVSO1xudmFyICRMRU5HVEggPSBERVNDUklQVE9SUyA/ICdfbCcgOiBCWVRFX0xFTkdUSDtcbnZhciAkT0ZGU0VUID0gREVTQ1JJUFRPUlMgPyAnX28nIDogQllURV9PRkZTRVQ7XG5cbi8vIElFRUU3NTQgY29udmVyc2lvbnMgYmFzZWQgb24gaHR0cHM6Ly9naXRodWIuY29tL2Zlcm9zcy9pZWVlNzU0XG5mdW5jdGlvbiBwYWNrSUVFRTc1NCh2YWx1ZSwgbUxlbiwgbkJ5dGVzKSB7XG4gIHZhciBidWZmZXIgPSBuZXcgQXJyYXkobkJ5dGVzKTtcbiAgdmFyIGVMZW4gPSBuQnl0ZXMgKiA4IC0gbUxlbiAtIDE7XG4gIHZhciBlTWF4ID0gKDEgPDwgZUxlbikgLSAxO1xuICB2YXIgZUJpYXMgPSBlTWF4ID4+IDE7XG4gIHZhciBydCA9IG1MZW4gPT09IDIzID8gcG93KDIsIC0yNCkgLSBwb3coMiwgLTc3KSA6IDA7XG4gIHZhciBpID0gMDtcbiAgdmFyIHMgPSB2YWx1ZSA8IDAgfHwgdmFsdWUgPT09IDAgJiYgMSAvIHZhbHVlIDwgMCA/IDEgOiAwO1xuICB2YXIgZSwgbSwgYztcbiAgdmFsdWUgPSBhYnModmFsdWUpO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gIGlmICh2YWx1ZSAhPSB2YWx1ZSB8fCB2YWx1ZSA9PT0gSW5maW5pdHkpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgbSA9IHZhbHVlICE9IHZhbHVlID8gMSA6IDA7XG4gICAgZSA9IGVNYXg7XG4gIH0gZWxzZSB7XG4gICAgZSA9IGZsb29yKGxvZyh2YWx1ZSkgLyBMTjIpO1xuICAgIGlmICh2YWx1ZSAqIChjID0gcG93KDIsIC1lKSkgPCAxKSB7XG4gICAgICBlLS07XG4gICAgICBjICo9IDI7XG4gICAgfVxuICAgIGlmIChlICsgZUJpYXMgPj0gMSkge1xuICAgICAgdmFsdWUgKz0gcnQgLyBjO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YWx1ZSArPSBydCAqIHBvdygyLCAxIC0gZUJpYXMpO1xuICAgIH1cbiAgICBpZiAodmFsdWUgKiBjID49IDIpIHtcbiAgICAgIGUrKztcbiAgICAgIGMgLz0gMjtcbiAgICB9XG4gICAgaWYgKGUgKyBlQmlhcyA+PSBlTWF4KSB7XG4gICAgICBtID0gMDtcbiAgICAgIGUgPSBlTWF4O1xuICAgIH0gZWxzZSBpZiAoZSArIGVCaWFzID49IDEpIHtcbiAgICAgIG0gPSAodmFsdWUgKiBjIC0gMSkgKiBwb3coMiwgbUxlbik7XG4gICAgICBlID0gZSArIGVCaWFzO1xuICAgIH0gZWxzZSB7XG4gICAgICBtID0gdmFsdWUgKiBwb3coMiwgZUJpYXMgLSAxKSAqIHBvdygyLCBtTGVuKTtcbiAgICAgIGUgPSAwO1xuICAgIH1cbiAgfVxuICBmb3IgKDsgbUxlbiA+PSA4OyBidWZmZXJbaSsrXSA9IG0gJiAyNTUsIG0gLz0gMjU2LCBtTGVuIC09IDgpO1xuICBlID0gZSA8PCBtTGVuIHwgbTtcbiAgZUxlbiArPSBtTGVuO1xuICBmb3IgKDsgZUxlbiA+IDA7IGJ1ZmZlcltpKytdID0gZSAmIDI1NSwgZSAvPSAyNTYsIGVMZW4gLT0gOCk7XG4gIGJ1ZmZlclstLWldIHw9IHMgKiAxMjg7XG4gIHJldHVybiBidWZmZXI7XG59XG5mdW5jdGlvbiB1bnBhY2tJRUVFNzU0KGJ1ZmZlciwgbUxlbiwgbkJ5dGVzKSB7XG4gIHZhciBlTGVuID0gbkJ5dGVzICogOCAtIG1MZW4gLSAxO1xuICB2YXIgZU1heCA9ICgxIDw8IGVMZW4pIC0gMTtcbiAgdmFyIGVCaWFzID0gZU1heCA+PiAxO1xuICB2YXIgbkJpdHMgPSBlTGVuIC0gNztcbiAgdmFyIGkgPSBuQnl0ZXMgLSAxO1xuICB2YXIgcyA9IGJ1ZmZlcltpLS1dO1xuICB2YXIgZSA9IHMgJiAxMjc7XG4gIHZhciBtO1xuICBzID4+PSA3O1xuICBmb3IgKDsgbkJpdHMgPiAwOyBlID0gZSAqIDI1NiArIGJ1ZmZlcltpXSwgaS0tLCBuQml0cyAtPSA4KTtcbiAgbSA9IGUgJiAoMSA8PCAtbkJpdHMpIC0gMTtcbiAgZSA+Pj0gLW5CaXRzO1xuICBuQml0cyArPSBtTGVuO1xuICBmb3IgKDsgbkJpdHMgPiAwOyBtID0gbSAqIDI1NiArIGJ1ZmZlcltpXSwgaS0tLCBuQml0cyAtPSA4KTtcbiAgaWYgKGUgPT09IDApIHtcbiAgICBlID0gMSAtIGVCaWFzO1xuICB9IGVsc2UgaWYgKGUgPT09IGVNYXgpIHtcbiAgICByZXR1cm4gbSA/IE5hTiA6IHMgPyAtSW5maW5pdHkgOiBJbmZpbml0eTtcbiAgfSBlbHNlIHtcbiAgICBtID0gbSArIHBvdygyLCBtTGVuKTtcbiAgICBlID0gZSAtIGVCaWFzO1xuICB9IHJldHVybiAocyA/IC0xIDogMSkgKiBtICogcG93KDIsIGUgLSBtTGVuKTtcbn1cblxuZnVuY3Rpb24gdW5wYWNrSTMyKGJ5dGVzKSB7XG4gIHJldHVybiBieXRlc1szXSA8PCAyNCB8IGJ5dGVzWzJdIDw8IDE2IHwgYnl0ZXNbMV0gPDwgOCB8IGJ5dGVzWzBdO1xufVxuZnVuY3Rpb24gcGFja0k4KGl0KSB7XG4gIHJldHVybiBbaXQgJiAweGZmXTtcbn1cbmZ1bmN0aW9uIHBhY2tJMTYoaXQpIHtcbiAgcmV0dXJuIFtpdCAmIDB4ZmYsIGl0ID4+IDggJiAweGZmXTtcbn1cbmZ1bmN0aW9uIHBhY2tJMzIoaXQpIHtcbiAgcmV0dXJuIFtpdCAmIDB4ZmYsIGl0ID4+IDggJiAweGZmLCBpdCA+PiAxNiAmIDB4ZmYsIGl0ID4+IDI0ICYgMHhmZl07XG59XG5mdW5jdGlvbiBwYWNrRjY0KGl0KSB7XG4gIHJldHVybiBwYWNrSUVFRTc1NChpdCwgNTIsIDgpO1xufVxuZnVuY3Rpb24gcGFja0YzMihpdCkge1xuICByZXR1cm4gcGFja0lFRUU3NTQoaXQsIDIzLCA0KTtcbn1cblxuZnVuY3Rpb24gYWRkR2V0dGVyKEMsIGtleSwgaW50ZXJuYWwpIHtcbiAgZFAoQ1tQUk9UT1RZUEVdLCBrZXksIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzW2ludGVybmFsXTsgfSB9KTtcbn1cblxuZnVuY3Rpb24gZ2V0KHZpZXcsIGJ5dGVzLCBpbmRleCwgaXNMaXR0bGVFbmRpYW4pIHtcbiAgdmFyIG51bUluZGV4ID0gK2luZGV4O1xuICB2YXIgaW50SW5kZXggPSB0b0luZGV4KG51bUluZGV4KTtcbiAgaWYgKGludEluZGV4ICsgYnl0ZXMgPiB2aWV3WyRMRU5HVEhdKSB0aHJvdyBSYW5nZUVycm9yKFdST05HX0lOREVYKTtcbiAgdmFyIHN0b3JlID0gdmlld1skQlVGRkVSXS5fYjtcbiAgdmFyIHN0YXJ0ID0gaW50SW5kZXggKyB2aWV3WyRPRkZTRVRdO1xuICB2YXIgcGFjayA9IHN0b3JlLnNsaWNlKHN0YXJ0LCBzdGFydCArIGJ5dGVzKTtcbiAgcmV0dXJuIGlzTGl0dGxlRW5kaWFuID8gcGFjayA6IHBhY2sucmV2ZXJzZSgpO1xufVxuZnVuY3Rpb24gc2V0KHZpZXcsIGJ5dGVzLCBpbmRleCwgY29udmVyc2lvbiwgdmFsdWUsIGlzTGl0dGxlRW5kaWFuKSB7XG4gIHZhciBudW1JbmRleCA9ICtpbmRleDtcbiAgdmFyIGludEluZGV4ID0gdG9JbmRleChudW1JbmRleCk7XG4gIGlmIChpbnRJbmRleCArIGJ5dGVzID4gdmlld1skTEVOR1RIXSkgdGhyb3cgUmFuZ2VFcnJvcihXUk9OR19JTkRFWCk7XG4gIHZhciBzdG9yZSA9IHZpZXdbJEJVRkZFUl0uX2I7XG4gIHZhciBzdGFydCA9IGludEluZGV4ICsgdmlld1skT0ZGU0VUXTtcbiAgdmFyIHBhY2sgPSBjb252ZXJzaW9uKCt2YWx1ZSk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYnl0ZXM7IGkrKykgc3RvcmVbc3RhcnQgKyBpXSA9IHBhY2tbaXNMaXR0bGVFbmRpYW4gPyBpIDogYnl0ZXMgLSBpIC0gMV07XG59XG5cbmlmICghJHR5cGVkLkFCVikge1xuICAkQXJyYXlCdWZmZXIgPSBmdW5jdGlvbiBBcnJheUJ1ZmZlcihsZW5ndGgpIHtcbiAgICBhbkluc3RhbmNlKHRoaXMsICRBcnJheUJ1ZmZlciwgQVJSQVlfQlVGRkVSKTtcbiAgICB2YXIgYnl0ZUxlbmd0aCA9IHRvSW5kZXgobGVuZ3RoKTtcbiAgICB0aGlzLl9iID0gYXJyYXlGaWxsLmNhbGwobmV3IEFycmF5KGJ5dGVMZW5ndGgpLCAwKTtcbiAgICB0aGlzWyRMRU5HVEhdID0gYnl0ZUxlbmd0aDtcbiAgfTtcblxuICAkRGF0YVZpZXcgPSBmdW5jdGlvbiBEYXRhVmlldyhidWZmZXIsIGJ5dGVPZmZzZXQsIGJ5dGVMZW5ndGgpIHtcbiAgICBhbkluc3RhbmNlKHRoaXMsICREYXRhVmlldywgREFUQV9WSUVXKTtcbiAgICBhbkluc3RhbmNlKGJ1ZmZlciwgJEFycmF5QnVmZmVyLCBEQVRBX1ZJRVcpO1xuICAgIHZhciBidWZmZXJMZW5ndGggPSBidWZmZXJbJExFTkdUSF07XG4gICAgdmFyIG9mZnNldCA9IHRvSW50ZWdlcihieXRlT2Zmc2V0KTtcbiAgICBpZiAob2Zmc2V0IDwgMCB8fCBvZmZzZXQgPiBidWZmZXJMZW5ndGgpIHRocm93IFJhbmdlRXJyb3IoJ1dyb25nIG9mZnNldCEnKTtcbiAgICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCA9PT0gdW5kZWZpbmVkID8gYnVmZmVyTGVuZ3RoIC0gb2Zmc2V0IDogdG9MZW5ndGgoYnl0ZUxlbmd0aCk7XG4gICAgaWYgKG9mZnNldCArIGJ5dGVMZW5ndGggPiBidWZmZXJMZW5ndGgpIHRocm93IFJhbmdlRXJyb3IoV1JPTkdfTEVOR1RIKTtcbiAgICB0aGlzWyRCVUZGRVJdID0gYnVmZmVyO1xuICAgIHRoaXNbJE9GRlNFVF0gPSBvZmZzZXQ7XG4gICAgdGhpc1skTEVOR1RIXSA9IGJ5dGVMZW5ndGg7XG4gIH07XG5cbiAgaWYgKERFU0NSSVBUT1JTKSB7XG4gICAgYWRkR2V0dGVyKCRBcnJheUJ1ZmZlciwgQllURV9MRU5HVEgsICdfbCcpO1xuICAgIGFkZEdldHRlcigkRGF0YVZpZXcsIEJVRkZFUiwgJ19iJyk7XG4gICAgYWRkR2V0dGVyKCREYXRhVmlldywgQllURV9MRU5HVEgsICdfbCcpO1xuICAgIGFkZEdldHRlcigkRGF0YVZpZXcsIEJZVEVfT0ZGU0VULCAnX28nKTtcbiAgfVxuXG4gIHJlZGVmaW5lQWxsKCREYXRhVmlld1tQUk9UT1RZUEVdLCB7XG4gICAgZ2V0SW50ODogZnVuY3Rpb24gZ2V0SW50OChieXRlT2Zmc2V0KSB7XG4gICAgICByZXR1cm4gZ2V0KHRoaXMsIDEsIGJ5dGVPZmZzZXQpWzBdIDw8IDI0ID4+IDI0O1xuICAgIH0sXG4gICAgZ2V0VWludDg6IGZ1bmN0aW9uIGdldFVpbnQ4KGJ5dGVPZmZzZXQpIHtcbiAgICAgIHJldHVybiBnZXQodGhpcywgMSwgYnl0ZU9mZnNldClbMF07XG4gICAgfSxcbiAgICBnZXRJbnQxNjogZnVuY3Rpb24gZ2V0SW50MTYoYnl0ZU9mZnNldCAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgdmFyIGJ5dGVzID0gZ2V0KHRoaXMsIDIsIGJ5dGVPZmZzZXQsIGFyZ3VtZW50c1sxXSk7XG4gICAgICByZXR1cm4gKGJ5dGVzWzFdIDw8IDggfCBieXRlc1swXSkgPDwgMTYgPj4gMTY7XG4gICAgfSxcbiAgICBnZXRVaW50MTY6IGZ1bmN0aW9uIGdldFVpbnQxNihieXRlT2Zmc2V0IC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICB2YXIgYnl0ZXMgPSBnZXQodGhpcywgMiwgYnl0ZU9mZnNldCwgYXJndW1lbnRzWzFdKTtcbiAgICAgIHJldHVybiBieXRlc1sxXSA8PCA4IHwgYnl0ZXNbMF07XG4gICAgfSxcbiAgICBnZXRJbnQzMjogZnVuY3Rpb24gZ2V0SW50MzIoYnl0ZU9mZnNldCAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgcmV0dXJuIHVucGFja0kzMihnZXQodGhpcywgNCwgYnl0ZU9mZnNldCwgYXJndW1lbnRzWzFdKSk7XG4gICAgfSxcbiAgICBnZXRVaW50MzI6IGZ1bmN0aW9uIGdldFVpbnQzMihieXRlT2Zmc2V0IC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICByZXR1cm4gdW5wYWNrSTMyKGdldCh0aGlzLCA0LCBieXRlT2Zmc2V0LCBhcmd1bWVudHNbMV0pKSA+Pj4gMDtcbiAgICB9LFxuICAgIGdldEZsb2F0MzI6IGZ1bmN0aW9uIGdldEZsb2F0MzIoYnl0ZU9mZnNldCAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgcmV0dXJuIHVucGFja0lFRUU3NTQoZ2V0KHRoaXMsIDQsIGJ5dGVPZmZzZXQsIGFyZ3VtZW50c1sxXSksIDIzLCA0KTtcbiAgICB9LFxuICAgIGdldEZsb2F0NjQ6IGZ1bmN0aW9uIGdldEZsb2F0NjQoYnl0ZU9mZnNldCAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgcmV0dXJuIHVucGFja0lFRUU3NTQoZ2V0KHRoaXMsIDgsIGJ5dGVPZmZzZXQsIGFyZ3VtZW50c1sxXSksIDUyLCA4KTtcbiAgICB9LFxuICAgIHNldEludDg6IGZ1bmN0aW9uIHNldEludDgoYnl0ZU9mZnNldCwgdmFsdWUpIHtcbiAgICAgIHNldCh0aGlzLCAxLCBieXRlT2Zmc2V0LCBwYWNrSTgsIHZhbHVlKTtcbiAgICB9LFxuICAgIHNldFVpbnQ4OiBmdW5jdGlvbiBzZXRVaW50OChieXRlT2Zmc2V0LCB2YWx1ZSkge1xuICAgICAgc2V0KHRoaXMsIDEsIGJ5dGVPZmZzZXQsIHBhY2tJOCwgdmFsdWUpO1xuICAgIH0sXG4gICAgc2V0SW50MTY6IGZ1bmN0aW9uIHNldEludDE2KGJ5dGVPZmZzZXQsIHZhbHVlIC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICBzZXQodGhpcywgMiwgYnl0ZU9mZnNldCwgcGFja0kxNiwgdmFsdWUsIGFyZ3VtZW50c1syXSk7XG4gICAgfSxcbiAgICBzZXRVaW50MTY6IGZ1bmN0aW9uIHNldFVpbnQxNihieXRlT2Zmc2V0LCB2YWx1ZSAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgc2V0KHRoaXMsIDIsIGJ5dGVPZmZzZXQsIHBhY2tJMTYsIHZhbHVlLCBhcmd1bWVudHNbMl0pO1xuICAgIH0sXG4gICAgc2V0SW50MzI6IGZ1bmN0aW9uIHNldEludDMyKGJ5dGVPZmZzZXQsIHZhbHVlIC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICBzZXQodGhpcywgNCwgYnl0ZU9mZnNldCwgcGFja0kzMiwgdmFsdWUsIGFyZ3VtZW50c1syXSk7XG4gICAgfSxcbiAgICBzZXRVaW50MzI6IGZ1bmN0aW9uIHNldFVpbnQzMihieXRlT2Zmc2V0LCB2YWx1ZSAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgc2V0KHRoaXMsIDQsIGJ5dGVPZmZzZXQsIHBhY2tJMzIsIHZhbHVlLCBhcmd1bWVudHNbMl0pO1xuICAgIH0sXG4gICAgc2V0RmxvYXQzMjogZnVuY3Rpb24gc2V0RmxvYXQzMihieXRlT2Zmc2V0LCB2YWx1ZSAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgc2V0KHRoaXMsIDQsIGJ5dGVPZmZzZXQsIHBhY2tGMzIsIHZhbHVlLCBhcmd1bWVudHNbMl0pO1xuICAgIH0sXG4gICAgc2V0RmxvYXQ2NDogZnVuY3Rpb24gc2V0RmxvYXQ2NChieXRlT2Zmc2V0LCB2YWx1ZSAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgc2V0KHRoaXMsIDgsIGJ5dGVPZmZzZXQsIHBhY2tGNjQsIHZhbHVlLCBhcmd1bWVudHNbMl0pO1xuICAgIH1cbiAgfSk7XG59IGVsc2Uge1xuICBpZiAoIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAkQXJyYXlCdWZmZXIoMSk7XG4gIH0pIHx8ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgbmV3ICRBcnJheUJ1ZmZlcigtMSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gIH0pIHx8IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICBuZXcgJEFycmF5QnVmZmVyKCk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgbmV3ICRBcnJheUJ1ZmZlcigxLjUpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgIG5ldyAkQXJyYXlCdWZmZXIoTmFOKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICByZXR1cm4gJEFycmF5QnVmZmVyLm5hbWUgIT0gQVJSQVlfQlVGRkVSO1xuICB9KSkge1xuICAgICRBcnJheUJ1ZmZlciA9IGZ1bmN0aW9uIEFycmF5QnVmZmVyKGxlbmd0aCkge1xuICAgICAgYW5JbnN0YW5jZSh0aGlzLCAkQXJyYXlCdWZmZXIpO1xuICAgICAgcmV0dXJuIG5ldyBCYXNlQnVmZmVyKHRvSW5kZXgobGVuZ3RoKSk7XG4gICAgfTtcbiAgICB2YXIgQXJyYXlCdWZmZXJQcm90byA9ICRBcnJheUJ1ZmZlcltQUk9UT1RZUEVdID0gQmFzZUJ1ZmZlcltQUk9UT1RZUEVdO1xuICAgIGZvciAodmFyIGtleXMgPSBnT1BOKEJhc2VCdWZmZXIpLCBqID0gMCwga2V5OyBrZXlzLmxlbmd0aCA+IGo7KSB7XG4gICAgICBpZiAoISgoa2V5ID0ga2V5c1tqKytdKSBpbiAkQXJyYXlCdWZmZXIpKSBoaWRlKCRBcnJheUJ1ZmZlciwga2V5LCBCYXNlQnVmZmVyW2tleV0pO1xuICAgIH1cbiAgICBpZiAoIUxJQlJBUlkpIEFycmF5QnVmZmVyUHJvdG8uY29uc3RydWN0b3IgPSAkQXJyYXlCdWZmZXI7XG4gIH1cbiAgLy8gaU9TIFNhZmFyaSA3LnggYnVnXG4gIHZhciB2aWV3ID0gbmV3ICREYXRhVmlldyhuZXcgJEFycmF5QnVmZmVyKDIpKTtcbiAgdmFyICRzZXRJbnQ4ID0gJERhdGFWaWV3W1BST1RPVFlQRV0uc2V0SW50ODtcbiAgdmlldy5zZXRJbnQ4KDAsIDIxNDc0ODM2NDgpO1xuICB2aWV3LnNldEludDgoMSwgMjE0NzQ4MzY0OSk7XG4gIGlmICh2aWV3LmdldEludDgoMCkgfHwgIXZpZXcuZ2V0SW50OCgxKSkgcmVkZWZpbmVBbGwoJERhdGFWaWV3W1BST1RPVFlQRV0sIHtcbiAgICBzZXRJbnQ4OiBmdW5jdGlvbiBzZXRJbnQ4KGJ5dGVPZmZzZXQsIHZhbHVlKSB7XG4gICAgICAkc2V0SW50OC5jYWxsKHRoaXMsIGJ5dGVPZmZzZXQsIHZhbHVlIDw8IDI0ID4+IDI0KTtcbiAgICB9LFxuICAgIHNldFVpbnQ4OiBmdW5jdGlvbiBzZXRVaW50OChieXRlT2Zmc2V0LCB2YWx1ZSkge1xuICAgICAgJHNldEludDguY2FsbCh0aGlzLCBieXRlT2Zmc2V0LCB2YWx1ZSA8PCAyNCA+PiAyNCk7XG4gICAgfVxuICB9LCB0cnVlKTtcbn1cbnNldFRvU3RyaW5nVGFnKCRBcnJheUJ1ZmZlciwgQVJSQVlfQlVGRkVSKTtcbnNldFRvU3RyaW5nVGFnKCREYXRhVmlldywgREFUQV9WSUVXKTtcbmhpZGUoJERhdGFWaWV3W1BST1RPVFlQRV0sICR0eXBlZC5WSUVXLCB0cnVlKTtcbmV4cG9ydHNbQVJSQVlfQlVGRkVSXSA9ICRBcnJheUJ1ZmZlcjtcbmV4cG9ydHNbREFUQV9WSUVXXSA9ICREYXRhVmlldztcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///92\n")},function(module,exports){eval('var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function("return this")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === "object") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it\'s\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULyh3ZWJwYWNrKS9idWlsZGluL2dsb2JhbC5qcz9jZDAwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsNENBQTRDOztBQUU1QyIsImZpbGUiOiI5My5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBnO1xuXG4vLyBUaGlzIHdvcmtzIGluIG5vbi1zdHJpY3QgbW9kZVxuZyA9IChmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXM7XG59KSgpO1xuXG50cnkge1xuXHQvLyBUaGlzIHdvcmtzIGlmIGV2YWwgaXMgYWxsb3dlZCAoc2VlIENTUClcblx0ZyA9IGcgfHwgbmV3IEZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKTtcbn0gY2F0Y2ggKGUpIHtcblx0Ly8gVGhpcyB3b3JrcyBpZiB0aGUgd2luZG93IHJlZmVyZW5jZSBpcyBhdmFpbGFibGVcblx0aWYgKHR5cGVvZiB3aW5kb3cgPT09IFwib2JqZWN0XCIpIGcgPSB3aW5kb3c7XG59XG5cbi8vIGcgY2FuIHN0aWxsIGJlIHVuZGVmaW5lZCwgYnV0IG5vdGhpbmcgdG8gZG8gYWJvdXQgaXQuLi5cbi8vIFdlIHJldHVybiB1bmRlZmluZWQsIGluc3RlYWQgb2Ygbm90aGluZyBoZXJlLCBzbyBpdCdzXG4vLyBlYXNpZXIgdG8gaGFuZGxlIHRoaXMgY2FzZS4gaWYoIWdsb2JhbCkgeyAuLi59XG5cbm1vZHVsZS5leHBvcnRzID0gZztcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///93\n')},function(module,exports,__webpack_require__){eval("module.exports = !__webpack_require__(7) && !__webpack_require__(3)(function () {\n return Object.defineProperty(__webpack_require__(66)('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faWU4LWRvbS1kZWZpbmUuanM/YzY5YSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxrQkFBa0IsbUJBQU8sQ0FBQyxDQUFnQixNQUFNLG1CQUFPLENBQUMsQ0FBVTtBQUNsRSwrQkFBK0IsbUJBQU8sQ0FBQyxFQUFlLGdCQUFnQixtQkFBbUIsVUFBVSxFQUFFLEVBQUU7QUFDdkcsQ0FBQyIsImZpbGUiOiI5NC5qcyIsInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gIXJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgIXJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHJlcXVpcmUoJy4vX2RvbS1jcmVhdGUnKSgnZGl2JyksICdhJywgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH0gfSkuYSAhPSA3O1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///94\n")},function(module,exports,__webpack_require__){eval("exports.f = __webpack_require__(5);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fd2tzLWV4dC5qcz8zN2M4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVksbUJBQU8sQ0FBQyxDQUFRIiwiZmlsZSI6Ijk1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0cy5mID0gcmVxdWlyZSgnLi9fd2tzJyk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///95\n")},function(module,exports,__webpack_require__){eval("var has = __webpack_require__(14);\nvar toIObject = __webpack_require__(15);\nvar arrayIndexOf = __webpack_require__(52)(false);\nvar IE_PROTO = __webpack_require__(68)('IE_PROTO');\n\nmodule.exports = function (object, names) {\n var O = toIObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (has(O, key = names[i++])) {\n ~arrayIndexOf(result, key) || result.push(key);\n }\n return result;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWtleXMtaW50ZXJuYWwuanM/Y2UxMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxVQUFVLG1CQUFPLENBQUMsRUFBUTtBQUMxQixnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDLG1CQUFtQixtQkFBTyxDQUFDLEVBQW1CO0FBQzlDLGVBQWUsbUJBQU8sQ0FBQyxFQUFlOztBQUV0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiOTYuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIGFycmF5SW5kZXhPZiA9IHJlcXVpcmUoJy4vX2FycmF5LWluY2x1ZGVzJykoZmFsc2UpO1xudmFyIElFX1BST1RPID0gcmVxdWlyZSgnLi9fc2hhcmVkLWtleScpKCdJRV9QUk9UTycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIG5hbWVzKSB7XG4gIHZhciBPID0gdG9JT2JqZWN0KG9iamVjdCk7XG4gIHZhciBpID0gMDtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIga2V5O1xuICBmb3IgKGtleSBpbiBPKSBpZiAoa2V5ICE9IElFX1BST1RPKSBoYXMoTywga2V5KSAmJiByZXN1bHQucHVzaChrZXkpO1xuICAvLyBEb24ndCBlbnVtIGJ1ZyAmIGhpZGRlbiBrZXlzXG4gIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSBpZiAoaGFzKE8sIGtleSA9IG5hbWVzW2krK10pKSB7XG4gICAgfmFycmF5SW5kZXhPZihyZXN1bHQsIGtleSkgfHwgcmVzdWx0LnB1c2goa2V5KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///96\n")},function(module,exports,__webpack_require__){eval("var dP = __webpack_require__(8);\nvar anObject = __webpack_require__(1);\nvar getKeys = __webpack_require__(34);\n\nmodule.exports = __webpack_require__(7) ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var keys = getKeys(Properties);\n var length = keys.length;\n var i = 0;\n var P;\n while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n return O;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWRwcy5qcz8xNDk1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFNBQVMsbUJBQU8sQ0FBQyxDQUFjO0FBQy9CLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGNBQWMsbUJBQU8sQ0FBQyxFQUFnQjs7QUFFdEMsaUJBQWlCLG1CQUFPLENBQUMsQ0FBZ0I7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiI5Ny5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgZ2V0S2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzIDogZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhPLCBQcm9wZXJ0aWVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICB2YXIga2V5cyA9IGdldEtleXMoUHJvcGVydGllcyk7XG4gIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgdmFyIGkgPSAwO1xuICB2YXIgUDtcbiAgd2hpbGUgKGxlbmd0aCA+IGkpIGRQLmYoTywgUCA9IGtleXNbaSsrXSwgUHJvcGVydGllc1tQXSk7XG4gIHJldHVybiBPO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///97\n")},function(module,exports,__webpack_require__){eval("// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nvar toIObject = __webpack_require__(15);\nvar gOPN = __webpack_require__(37).f;\nvar toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return gOPN(it);\n } catch (e) {\n return windowNames.slice();\n }\n};\n\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdvcG4tZXh0LmpzPzdiYmMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDLFdBQVcsbUJBQU8sQ0FBQyxFQUFnQjtBQUNuQyxpQkFBaUI7O0FBRWpCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EiLCJmaWxlIjoiOTguanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBmYWxsYmFjayBmb3IgSUUxMSBidWdneSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB3aXRoIGlmcmFtZSBhbmQgd2luZG93XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIGdPUE4gPSByZXF1aXJlKCcuL19vYmplY3QtZ29wbicpLmY7XG52YXIgdG9TdHJpbmcgPSB7fS50b1N0cmluZztcblxudmFyIHdpbmRvd05hbWVzID0gdHlwZW9mIHdpbmRvdyA9PSAnb2JqZWN0JyAmJiB3aW5kb3cgJiYgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXNcbiAgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh3aW5kb3cpIDogW107XG5cbnZhciBnZXRXaW5kb3dOYW1lcyA9IGZ1bmN0aW9uIChpdCkge1xuICB0cnkge1xuICAgIHJldHVybiBnT1BOKGl0KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiB3aW5kb3dOYW1lcy5zbGljZSgpO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cy5mID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhpdCkge1xuICByZXR1cm4gd2luZG93TmFtZXMgJiYgdG9TdHJpbmcuY2FsbChpdCkgPT0gJ1tvYmplY3QgV2luZG93XScgPyBnZXRXaW5kb3dOYW1lcyhpdCkgOiBnT1BOKHRvSU9iamVjdChpdCkpO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///98\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// 19.1.2.1 Object.assign(target, source, ...)\nvar DESCRIPTORS = __webpack_require__(7);\nvar getKeys = __webpack_require__(34);\nvar gOPS = __webpack_require__(53);\nvar pIE = __webpack_require__(49);\nvar toObject = __webpack_require__(9);\nvar IObject = __webpack_require__(48);\nvar $assign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || __webpack_require__(3)(function () {\n var A = {};\n var B = {};\n // eslint-disable-next-line no-undef\n var S = Symbol();\n var K = 'abcdefghijklmnopqrst';\n A[S] = 7;\n K.split('').forEach(function (k) { B[k] = k; });\n return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n var T = toObject(target);\n var aLen = arguments.length;\n var index = 1;\n var getSymbols = gOPS.f;\n var isEnum = pIE.f;\n while (aLen > index) {\n var S = IObject(arguments[index++]);\n var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);\n var length = keys.length;\n var j = 0;\n var key;\n while (length > j) {\n key = keys[j++];\n if (!DESCRIPTORS || isEnum.call(S, key)) T[key] = S[key];\n }\n } return T;\n} : $assign;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWFzc2lnbi5qcz83MzMzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxrQkFBa0IsbUJBQU8sQ0FBQyxDQUFnQjtBQUMxQyxjQUFjLG1CQUFPLENBQUMsRUFBZ0I7QUFDdEMsV0FBVyxtQkFBTyxDQUFDLEVBQWdCO0FBQ25DLFVBQVUsbUJBQU8sQ0FBQyxFQUFlO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGNBQWMsbUJBQU8sQ0FBQyxFQUFZO0FBQ2xDOztBQUVBO0FBQ0EsNkJBQTZCLG1CQUFPLENBQUMsQ0FBVTtBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0MsVUFBVSxFQUFFO0FBQ2hELG1CQUFtQixzQ0FBc0M7QUFDekQsQ0FBQyxxQ0FBcUM7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUMiLCJmaWxlIjoiOTkuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG4vLyAxOS4xLjIuMSBPYmplY3QuYXNzaWduKHRhcmdldCwgc291cmNlLCAuLi4pXG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpO1xudmFyIGdldEtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xudmFyIGdPUFMgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wcycpO1xudmFyIHBJRSA9IHJlcXVpcmUoJy4vX29iamVjdC1waWUnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIElPYmplY3QgPSByZXF1aXJlKCcuL19pb2JqZWN0Jyk7XG52YXIgJGFzc2lnbiA9IE9iamVjdC5hc3NpZ247XG5cbi8vIHNob3VsZCB3b3JrIHdpdGggc3ltYm9scyBhbmQgc2hvdWxkIGhhdmUgZGV0ZXJtaW5pc3RpYyBwcm9wZXJ0eSBvcmRlciAoVjggYnVnKVxubW9kdWxlLmV4cG9ydHMgPSAhJGFzc2lnbiB8fCByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgdmFyIEEgPSB7fTtcbiAgdmFyIEIgPSB7fTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gIHZhciBTID0gU3ltYm9sKCk7XG4gIHZhciBLID0gJ2FiY2RlZmdoaWprbG1ub3BxcnN0JztcbiAgQVtTXSA9IDc7XG4gIEsuc3BsaXQoJycpLmZvckVhY2goZnVuY3Rpb24gKGspIHsgQltrXSA9IGs7IH0pO1xuICByZXR1cm4gJGFzc2lnbih7fSwgQSlbU10gIT0gNyB8fCBPYmplY3Qua2V5cygkYXNzaWduKHt9LCBCKSkuam9pbignJykgIT0gSztcbn0pID8gZnVuY3Rpb24gYXNzaWduKHRhcmdldCwgc291cmNlKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgdmFyIFQgPSB0b09iamVjdCh0YXJnZXQpO1xuICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gIHZhciBpbmRleCA9IDE7XG4gIHZhciBnZXRTeW1ib2xzID0gZ09QUy5mO1xuICB2YXIgaXNFbnVtID0gcElFLmY7XG4gIHdoaWxlIChhTGVuID4gaW5kZXgpIHtcbiAgICB2YXIgUyA9IElPYmplY3QoYXJndW1lbnRzW2luZGV4KytdKTtcbiAgICB2YXIga2V5cyA9IGdldFN5bWJvbHMgPyBnZXRLZXlzKFMpLmNvbmNhdChnZXRTeW1ib2xzKFMpKSA6IGdldEtleXMoUyk7XG4gICAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICAgIHZhciBqID0gMDtcbiAgICB2YXIga2V5O1xuICAgIHdoaWxlIChsZW5ndGggPiBqKSB7XG4gICAgICBrZXkgPSBrZXlzW2orK107XG4gICAgICBpZiAoIURFU0NSSVBUT1JTIHx8IGlzRW51bS5jYWxsKFMsIGtleSkpIFRba2V5XSA9IFNba2V5XTtcbiAgICB9XG4gIH0gcmV0dXJuIFQ7XG59IDogJGFzc2lnbjtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///99\n")},function(module,exports){eval("// 7.2.9 SameValue(x, y)\nmodule.exports = Object.is || function is(x, y) {\n // eslint-disable-next-line no-self-compare\n return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2FtZS12YWx1ZS5qcz84M2ExIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMTAwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gNy4yLjkgU2FtZVZhbHVlKHgsIHkpXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5pcyB8fCBmdW5jdGlvbiBpcyh4LCB5KSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgcmV0dXJuIHggPT09IHkgPyB4ICE9PSAwIHx8IDEgLyB4ID09PSAxIC8geSA6IHggIT0geCAmJiB5ICE9IHk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///100\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar aFunction = __webpack_require__(10);\nvar isObject = __webpack_require__(4);\nvar invoke = __webpack_require__(102);\nvar arraySlice = [].slice;\nvar factories = {};\n\nvar construct = function (F, len, args) {\n if (!(len in factories)) {\n for (var n = [], i = 0; i < len; i++) n[i] = 'a[' + i + ']';\n // eslint-disable-next-line no-new-func\n factories[len] = Function('F,a', 'return new F(' + n.join(',') + ')');\n } return factories[len](F, args);\n};\n\nmodule.exports = Function.bind || function bind(that /* , ...args */) {\n var fn = aFunction(this);\n var partArgs = arraySlice.call(arguments, 1);\n var bound = function (/* args... */) {\n var args = partArgs.concat(arraySlice.call(arguments));\n return this instanceof bound ? construct(fn, args.length, args) : invoke(fn, args, that);\n };\n if (isObject(fn.prototype)) bound.prototype = fn.prototype;\n return bound;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYmluZC5qcz9mMGMxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2QyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxhQUFhLG1CQUFPLENBQUMsR0FBVztBQUNoQztBQUNBOztBQUVBO0FBQ0E7QUFDQSwyQkFBMkIsU0FBUztBQUNwQztBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjEwMS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBpbnZva2UgPSByZXF1aXJlKCcuL19pbnZva2UnKTtcbnZhciBhcnJheVNsaWNlID0gW10uc2xpY2U7XG52YXIgZmFjdG9yaWVzID0ge307XG5cbnZhciBjb25zdHJ1Y3QgPSBmdW5jdGlvbiAoRiwgbGVuLCBhcmdzKSB7XG4gIGlmICghKGxlbiBpbiBmYWN0b3JpZXMpKSB7XG4gICAgZm9yICh2YXIgbiA9IFtdLCBpID0gMDsgaSA8IGxlbjsgaSsrKSBuW2ldID0gJ2FbJyArIGkgKyAnXSc7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jXG4gICAgZmFjdG9yaWVzW2xlbl0gPSBGdW5jdGlvbignRixhJywgJ3JldHVybiBuZXcgRignICsgbi5qb2luKCcsJykgKyAnKScpO1xuICB9IHJldHVybiBmYWN0b3JpZXNbbGVuXShGLCBhcmdzKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gRnVuY3Rpb24uYmluZCB8fCBmdW5jdGlvbiBiaW5kKHRoYXQgLyogLCAuLi5hcmdzICovKSB7XG4gIHZhciBmbiA9IGFGdW5jdGlvbih0aGlzKTtcbiAgdmFyIHBhcnRBcmdzID0gYXJyYXlTbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gIHZhciBib3VuZCA9IGZ1bmN0aW9uICgvKiBhcmdzLi4uICovKSB7XG4gICAgdmFyIGFyZ3MgPSBwYXJ0QXJncy5jb25jYXQoYXJyYXlTbGljZS5jYWxsKGFyZ3VtZW50cykpO1xuICAgIHJldHVybiB0aGlzIGluc3RhbmNlb2YgYm91bmQgPyBjb25zdHJ1Y3QoZm4sIGFyZ3MubGVuZ3RoLCBhcmdzKSA6IGludm9rZShmbiwgYXJncywgdGhhdCk7XG4gIH07XG4gIGlmIChpc09iamVjdChmbi5wcm90b3R5cGUpKSBib3VuZC5wcm90b3R5cGUgPSBmbi5wcm90b3R5cGU7XG4gIHJldHVybiBib3VuZDtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///101\n")},function(module,exports){eval("// fast apply, http://jsperf.lnkit.com/fast-apply/5\nmodule.exports = function (fn, args, that) {\n var un = that === undefined;\n switch (args.length) {\n case 0: return un ? fn()\n : fn.call(that);\n case 1: return un ? fn(args[0])\n : fn.call(that, args[0]);\n case 2: return un ? fn(args[0], args[1])\n : fn.call(that, args[0], args[1]);\n case 3: return un ? fn(args[0], args[1], args[2])\n : fn.call(that, args[0], args[1], args[2]);\n case 4: return un ? fn(args[0], args[1], args[2], args[3])\n : fn.call(that, args[0], args[1], args[2], args[3]);\n } return fn.apply(that, args);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faW52b2tlLmpzPzMxZjQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCIsImZpbGUiOiIxMDIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBmYXN0IGFwcGx5LCBodHRwOi8vanNwZXJmLmxua2l0LmNvbS9mYXN0LWFwcGx5LzVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGZuLCBhcmdzLCB0aGF0KSB7XG4gIHZhciB1biA9IHRoYXQgPT09IHVuZGVmaW5lZDtcbiAgc3dpdGNoIChhcmdzLmxlbmd0aCkge1xuICAgIGNhc2UgMDogcmV0dXJuIHVuID8gZm4oKVxuICAgICAgICAgICAgICAgICAgICAgIDogZm4uY2FsbCh0aGF0KTtcbiAgICBjYXNlIDE6IHJldHVybiB1biA/IGZuKGFyZ3NbMF0pXG4gICAgICAgICAgICAgICAgICAgICAgOiBmbi5jYWxsKHRoYXQsIGFyZ3NbMF0pO1xuICAgIGNhc2UgMjogcmV0dXJuIHVuID8gZm4oYXJnc1swXSwgYXJnc1sxXSlcbiAgICAgICAgICAgICAgICAgICAgICA6IGZuLmNhbGwodGhhdCwgYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgY2FzZSAzOiByZXR1cm4gdW4gPyBmbihhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKVxuICAgICAgICAgICAgICAgICAgICAgIDogZm4uY2FsbCh0aGF0LCBhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcbiAgICBjYXNlIDQ6IHJldHVybiB1biA/IGZuKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10pXG4gICAgICAgICAgICAgICAgICAgICAgOiBmbi5jYWxsKHRoYXQsIGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10pO1xuICB9IHJldHVybiBmbi5hcHBseSh0aGF0LCBhcmdzKTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///102\n")},function(module,exports,__webpack_require__){eval("var $parseInt = __webpack_require__(2).parseInt;\nvar $trim = __webpack_require__(45).trim;\nvar ws = __webpack_require__(72);\nvar hex = /^[-+]?0[xX]/;\n\nmodule.exports = $parseInt(ws + '08') !== 8 || $parseInt(ws + '0x16') !== 22 ? function parseInt(str, radix) {\n var string = $trim(String(str), 3);\n return $parseInt(string, (radix >>> 0) || (hex.test(string) ? 16 : 10));\n} : $parseInt;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcGFyc2UtaW50LmpzPzNjYTUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZ0JBQWdCLG1CQUFPLENBQUMsQ0FBVztBQUNuQyxZQUFZLG1CQUFPLENBQUMsRUFBZ0I7QUFDcEMsU0FBUyxtQkFBTyxDQUFDLEVBQWM7QUFDL0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIxMDMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgJHBhcnNlSW50ID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykucGFyc2VJbnQ7XG52YXIgJHRyaW0gPSByZXF1aXJlKCcuL19zdHJpbmctdHJpbScpLnRyaW07XG52YXIgd3MgPSByZXF1aXJlKCcuL19zdHJpbmctd3MnKTtcbnZhciBoZXggPSAvXlstK10/MFt4WF0vO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICRwYXJzZUludCh3cyArICcwOCcpICE9PSA4IHx8ICRwYXJzZUludCh3cyArICcweDE2JykgIT09IDIyID8gZnVuY3Rpb24gcGFyc2VJbnQoc3RyLCByYWRpeCkge1xuICB2YXIgc3RyaW5nID0gJHRyaW0oU3RyaW5nKHN0ciksIDMpO1xuICByZXR1cm4gJHBhcnNlSW50KHN0cmluZywgKHJhZGl4ID4+PiAwKSB8fCAoaGV4LnRlc3Qoc3RyaW5nKSA/IDE2IDogMTApKTtcbn0gOiAkcGFyc2VJbnQ7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///103\n")},function(module,exports,__webpack_require__){eval("var $parseFloat = __webpack_require__(2).parseFloat;\nvar $trim = __webpack_require__(45).trim;\n\nmodule.exports = 1 / $parseFloat(__webpack_require__(72) + '-0') !== -Infinity ? function parseFloat(str) {\n var string = $trim(String(str), 3);\n var result = $parseFloat(string);\n return result === 0 && string.charAt(0) == '-' ? -0 : result;\n} : $parseFloat;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcGFyc2UtZmxvYXQuanM/ZDc1MiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxrQkFBa0IsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JDLFlBQVksbUJBQU8sQ0FBQyxFQUFnQjs7QUFFcEMsaUNBQWlDLG1CQUFPLENBQUMsRUFBYztBQUN2RDtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjEwNC5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciAkcGFyc2VGbG9hdCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLnBhcnNlRmxvYXQ7XG52YXIgJHRyaW0gPSByZXF1aXJlKCcuL19zdHJpbmctdHJpbScpLnRyaW07XG5cbm1vZHVsZS5leHBvcnRzID0gMSAvICRwYXJzZUZsb2F0KHJlcXVpcmUoJy4vX3N0cmluZy13cycpICsgJy0wJykgIT09IC1JbmZpbml0eSA/IGZ1bmN0aW9uIHBhcnNlRmxvYXQoc3RyKSB7XG4gIHZhciBzdHJpbmcgPSAkdHJpbShTdHJpbmcoc3RyKSwgMyk7XG4gIHZhciByZXN1bHQgPSAkcGFyc2VGbG9hdChzdHJpbmcpO1xuICByZXR1cm4gcmVzdWx0ID09PSAwICYmIHN0cmluZy5jaGFyQXQoMCkgPT0gJy0nID8gLTAgOiByZXN1bHQ7XG59IDogJHBhcnNlRmxvYXQ7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///104\n")},function(module,exports,__webpack_require__){eval("var cof = __webpack_require__(20);\nmodule.exports = function (it, msg) {\n if (typeof it != 'number' && cof(it) != 'Number') throw TypeError(msg);\n return +it;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYS1udW1iZXItdmFsdWUuanM/YmVmOSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxVQUFVLG1CQUFPLENBQUMsRUFBUTtBQUMxQjtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIxMDUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgbXNnKSB7XG4gIGlmICh0eXBlb2YgaXQgIT0gJ251bWJlcicgJiYgY29mKGl0KSAhPSAnTnVtYmVyJykgdGhyb3cgVHlwZUVycm9yKG1zZyk7XG4gIHJldHVybiAraXQ7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///105\n")},function(module,exports,__webpack_require__){eval("// 20.1.2.3 Number.isInteger(number)\nvar isObject = __webpack_require__(4);\nvar floor = Math.floor;\nmodule.exports = function isInteger(it) {\n return !isObject(it) && isFinite(it) && floor(it) === it;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtaW50ZWdlci5qcz85YzEyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckM7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMTA2LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMS4yLjMgTnVtYmVyLmlzSW50ZWdlcihudW1iZXIpXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzSW50ZWdlcihpdCkge1xuICByZXR1cm4gIWlzT2JqZWN0KGl0KSAmJiBpc0Zpbml0ZShpdCkgJiYgZmxvb3IoaXQpID09PSBpdDtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///106\n")},function(module,exports){eval("// 20.2.2.20 Math.log1p(x)\nmodule.exports = Math.log1p || function log1p(x) {\n return (x = +x) > -1e-8 && x < 1e-8 ? x - x * x / 2 : Math.log(1 + x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWF0aC1sb2cxcC5qcz9kNmM2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjEwNy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDIwLjIuMi4yMCBNYXRoLmxvZzFwKHgpXG5tb2R1bGUuZXhwb3J0cyA9IE1hdGgubG9nMXAgfHwgZnVuY3Rpb24gbG9nMXAoeCkge1xuICByZXR1cm4gKHggPSAreCkgPiAtMWUtOCAmJiB4IDwgMWUtOCA/IHggLSB4ICogeCAvIDIgOiBNYXRoLmxvZygxICsgeCk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///107\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.16 Math.fround(x)\nvar sign = __webpack_require__(75);\nvar pow = Math.pow;\nvar EPSILON = pow(2, -52);\nvar EPSILON32 = pow(2, -23);\nvar MAX32 = pow(2, 127) * (2 - EPSILON32);\nvar MIN32 = pow(2, -126);\n\nvar roundTiesToEven = function (n) {\n return n + 1 / EPSILON - 1 / EPSILON;\n};\n\nmodule.exports = Math.fround || function fround(x) {\n var $abs = Math.abs(x);\n var $sign = sign(x);\n var a, result;\n if ($abs < MIN32) return $sign * roundTiesToEven($abs / MIN32 / EPSILON32) * MIN32 * EPSILON32;\n a = (1 + EPSILON32 / EPSILON) * $abs;\n result = a - (a - $abs);\n // eslint-disable-next-line no-self-compare\n if (result > MAX32 || result != result) return $sign * Infinity;\n return $sign * result;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWF0aC1mcm91bmQuanM/OTFjYSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLFdBQVcsbUJBQU8sQ0FBQyxFQUFjO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMTA4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMi4yLjE2IE1hdGguZnJvdW5kKHgpXG52YXIgc2lnbiA9IHJlcXVpcmUoJy4vX21hdGgtc2lnbicpO1xudmFyIHBvdyA9IE1hdGgucG93O1xudmFyIEVQU0lMT04gPSBwb3coMiwgLTUyKTtcbnZhciBFUFNJTE9OMzIgPSBwb3coMiwgLTIzKTtcbnZhciBNQVgzMiA9IHBvdygyLCAxMjcpICogKDIgLSBFUFNJTE9OMzIpO1xudmFyIE1JTjMyID0gcG93KDIsIC0xMjYpO1xuXG52YXIgcm91bmRUaWVzVG9FdmVuID0gZnVuY3Rpb24gKG4pIHtcbiAgcmV0dXJuIG4gKyAxIC8gRVBTSUxPTiAtIDEgLyBFUFNJTE9OO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBNYXRoLmZyb3VuZCB8fCBmdW5jdGlvbiBmcm91bmQoeCkge1xuICB2YXIgJGFicyA9IE1hdGguYWJzKHgpO1xuICB2YXIgJHNpZ24gPSBzaWduKHgpO1xuICB2YXIgYSwgcmVzdWx0O1xuICBpZiAoJGFicyA8IE1JTjMyKSByZXR1cm4gJHNpZ24gKiByb3VuZFRpZXNUb0V2ZW4oJGFicyAvIE1JTjMyIC8gRVBTSUxPTjMyKSAqIE1JTjMyICogRVBTSUxPTjMyO1xuICBhID0gKDEgKyBFUFNJTE9OMzIgLyBFUFNJTE9OKSAqICRhYnM7XG4gIHJlc3VsdCA9IGEgLSAoYSAtICRhYnMpO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gIGlmIChyZXN1bHQgPiBNQVgzMiB8fCByZXN1bHQgIT0gcmVzdWx0KSByZXR1cm4gJHNpZ24gKiBJbmZpbml0eTtcbiAgcmV0dXJuICRzaWduICogcmVzdWx0O1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///108\n")},function(module,exports,__webpack_require__){eval("// call something on iterator step with safe closing on error\nvar anObject = __webpack_require__(1);\nmodule.exports = function (iterator, fn, value, entries) {\n try {\n return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n // 7.4.6 IteratorClose(iterator, completion)\n } catch (e) {\n var ret = iterator['return'];\n if (ret !== undefined) anObject(ret.call(iterator));\n throw e;\n }\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlci1jYWxsLmpzPzFmYTgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjEwOS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGNhbGwgc29tZXRoaW5nIG9uIGl0ZXJhdG9yIHN0ZXAgd2l0aCBzYWZlIGNsb3Npbmcgb24gZXJyb3JcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIGZuLCB2YWx1ZSwgZW50cmllcykge1xuICB0cnkge1xuICAgIHJldHVybiBlbnRyaWVzID8gZm4oYW5PYmplY3QodmFsdWUpWzBdLCB2YWx1ZVsxXSkgOiBmbih2YWx1ZSk7XG4gIC8vIDcuNC42IEl0ZXJhdG9yQ2xvc2UoaXRlcmF0b3IsIGNvbXBsZXRpb24pXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB2YXIgcmV0ID0gaXRlcmF0b3JbJ3JldHVybiddO1xuICAgIGlmIChyZXQgIT09IHVuZGVmaW5lZCkgYW5PYmplY3QocmV0LmNhbGwoaXRlcmF0b3IpKTtcbiAgICB0aHJvdyBlO1xuICB9XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///109\n")},function(module,exports,__webpack_require__){eval("var aFunction = __webpack_require__(10);\nvar toObject = __webpack_require__(9);\nvar IObject = __webpack_require__(48);\nvar toLength = __webpack_require__(6);\n\nmodule.exports = function (that, callbackfn, aLen, memo, isRight) {\n aFunction(callbackfn);\n var O = toObject(that);\n var self = IObject(O);\n var length = toLength(O.length);\n var index = isRight ? length - 1 : 0;\n var i = isRight ? -1 : 1;\n if (aLen < 2) for (;;) {\n if (index in self) {\n memo = self[index];\n index += i;\n break;\n }\n index += i;\n if (isRight ? index < 0 : length <= index) {\n throw TypeError('Reduce of empty array with no initial value');\n }\n }\n for (;isRight ? index >= 0 : length > index; index += i) if (index in self) {\n memo = callbackfn(memo, self[index], index, O);\n }\n return memo;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktcmVkdWNlLmpzPzdiMjMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2QyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxjQUFjLG1CQUFPLENBQUMsRUFBWTtBQUNsQyxlQUFlLG1CQUFPLENBQUMsQ0FBYzs7QUFFckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLHNDQUFzQztBQUM5QztBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIxMTAuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgSU9iamVjdCA9IHJlcXVpcmUoJy4vX2lvYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0aGF0LCBjYWxsYmFja2ZuLCBhTGVuLCBtZW1vLCBpc1JpZ2h0KSB7XG4gIGFGdW5jdGlvbihjYWxsYmFja2ZuKTtcbiAgdmFyIE8gPSB0b09iamVjdCh0aGF0KTtcbiAgdmFyIHNlbGYgPSBJT2JqZWN0KE8pO1xuICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICB2YXIgaW5kZXggPSBpc1JpZ2h0ID8gbGVuZ3RoIC0gMSA6IDA7XG4gIHZhciBpID0gaXNSaWdodCA/IC0xIDogMTtcbiAgaWYgKGFMZW4gPCAyKSBmb3IgKDs7KSB7XG4gICAgaWYgKGluZGV4IGluIHNlbGYpIHtcbiAgICAgIG1lbW8gPSBzZWxmW2luZGV4XTtcbiAgICAgIGluZGV4ICs9IGk7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgaW5kZXggKz0gaTtcbiAgICBpZiAoaXNSaWdodCA/IGluZGV4IDwgMCA6IGxlbmd0aCA8PSBpbmRleCkge1xuICAgICAgdGhyb3cgVHlwZUVycm9yKCdSZWR1Y2Ugb2YgZW1wdHkgYXJyYXkgd2l0aCBubyBpbml0aWFsIHZhbHVlJyk7XG4gICAgfVxuICB9XG4gIGZvciAoO2lzUmlnaHQgPyBpbmRleCA+PSAwIDogbGVuZ3RoID4gaW5kZXg7IGluZGV4ICs9IGkpIGlmIChpbmRleCBpbiBzZWxmKSB7XG4gICAgbWVtbyA9IGNhbGxiYWNrZm4obWVtbywgc2VsZltpbmRleF0sIGluZGV4LCBPKTtcbiAgfVxuICByZXR1cm4gbWVtbztcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///110\n")},function(module,exports,__webpack_require__){"use strict";eval("// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\n\nvar toObject = __webpack_require__(9);\nvar toAbsoluteIndex = __webpack_require__(35);\nvar toLength = __webpack_require__(6);\n\nmodule.exports = [].copyWithin || function copyWithin(target /* = 0 */, start /* = 0, end = @length */) {\n var O = toObject(this);\n var len = toLength(O.length);\n var to = toAbsoluteIndex(target, len);\n var from = toAbsoluteIndex(start, len);\n var end = arguments.length > 2 ? arguments[2] : undefined;\n var count = Math.min((end === undefined ? len : toAbsoluteIndex(end, len)) - from, len - to);\n var inc = 1;\n if (from < to && to < from + count) {\n inc = -1;\n from += count - 1;\n to += count - 1;\n }\n while (count-- > 0) {\n if (from in O) O[to] = O[from];\n else delete O[to];\n to += inc;\n from += inc;\n } return O;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktY29weS13aXRoaW4uanM/YmE5MiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNhO0FBQ2IsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsc0JBQXNCLG1CQUFPLENBQUMsRUFBc0I7QUFDcEQsZUFBZSxtQkFBTyxDQUFDLENBQWM7O0FBRXJDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCIsImZpbGUiOiIxMTEuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyMi4xLjMuMyBBcnJheS5wcm90b3R5cGUuY29weVdpdGhpbih0YXJnZXQsIHN0YXJ0LCBlbmQgPSB0aGlzLmxlbmd0aClcbid1c2Ugc3RyaWN0JztcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4vX3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBbXS5jb3B5V2l0aGluIHx8IGZ1bmN0aW9uIGNvcHlXaXRoaW4odGFyZ2V0IC8qID0gMCAqLywgc3RhcnQgLyogPSAwLCBlbmQgPSBAbGVuZ3RoICovKSB7XG4gIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gIHZhciBsZW4gPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gIHZhciB0byA9IHRvQWJzb2x1dGVJbmRleCh0YXJnZXQsIGxlbik7XG4gIHZhciBmcm9tID0gdG9BYnNvbHV0ZUluZGV4KHN0YXJ0LCBsZW4pO1xuICB2YXIgZW5kID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQ7XG4gIHZhciBjb3VudCA9IE1hdGgubWluKChlbmQgPT09IHVuZGVmaW5lZCA/IGxlbiA6IHRvQWJzb2x1dGVJbmRleChlbmQsIGxlbikpIC0gZnJvbSwgbGVuIC0gdG8pO1xuICB2YXIgaW5jID0gMTtcbiAgaWYgKGZyb20gPCB0byAmJiB0byA8IGZyb20gKyBjb3VudCkge1xuICAgIGluYyA9IC0xO1xuICAgIGZyb20gKz0gY291bnQgLSAxO1xuICAgIHRvICs9IGNvdW50IC0gMTtcbiAgfVxuICB3aGlsZSAoY291bnQtLSA+IDApIHtcbiAgICBpZiAoZnJvbSBpbiBPKSBPW3RvXSA9IE9bZnJvbV07XG4gICAgZWxzZSBkZWxldGUgT1t0b107XG4gICAgdG8gKz0gaW5jO1xuICAgIGZyb20gKz0gaW5jO1xuICB9IHJldHVybiBPO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///111\n")},function(module,exports){eval("module.exports = function (done, value) {\n return { value: value, done: !!done };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlci1zdGVwLmpzP2Q1M2IiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxVQUFVO0FBQ1YiLCJmaWxlIjoiMTEyLmpzIiwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZG9uZSwgdmFsdWUpIHtcbiAgcmV0dXJuIHsgdmFsdWU6IHZhbHVlLCBkb25lOiAhIWRvbmUgfTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///112\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar regexpExec = __webpack_require__(87);\n__webpack_require__(0)({\n target: 'RegExp',\n proto: true,\n forced: regexpExec !== /./.exec\n}, {\n exec: regexpExec\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLmV4ZWMuanM/YjBjNSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGlCQUFpQixtQkFBTyxDQUFDLEVBQWdCO0FBQ3pDLG1CQUFPLENBQUMsQ0FBVztBQUNuQjtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQSxDQUFDIiwiZmlsZSI6IjExMy5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciByZWdleHBFeGVjID0gcmVxdWlyZSgnLi9fcmVnZXhwLWV4ZWMnKTtcbnJlcXVpcmUoJy4vX2V4cG9ydCcpKHtcbiAgdGFyZ2V0OiAnUmVnRXhwJyxcbiAgcHJvdG86IHRydWUsXG4gIGZvcmNlZDogcmVnZXhwRXhlYyAhPT0gLy4vLmV4ZWNcbn0sIHtcbiAgZXhlYzogcmVnZXhwRXhlY1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///113\n")},function(module,exports,__webpack_require__){eval("// 21.2.5.3 get RegExp.prototype.flags()\nif (__webpack_require__(7) && /./g.flags != 'g') __webpack_require__(8).f(RegExp.prototype, 'flags', {\n configurable: true,\n get: __webpack_require__(50)\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLmZsYWdzLmpzPzM4NDYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxJQUFJLG1CQUFPLENBQUMsQ0FBZ0Isd0JBQXdCLG1CQUFPLENBQUMsQ0FBYztBQUMxRTtBQUNBLE9BQU8sbUJBQU8sQ0FBQyxFQUFVO0FBQ3pCLENBQUMiLCJmaWxlIjoiMTE0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjEuMi41LjMgZ2V0IFJlZ0V4cC5wcm90b3R5cGUuZmxhZ3MoKVxuaWYgKHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgLy4vZy5mbGFncyAhPSAnZycpIHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmYoUmVnRXhwLnByb3RvdHlwZSwgJ2ZsYWdzJywge1xuICBjb25maWd1cmFibGU6IHRydWUsXG4gIGdldDogcmVxdWlyZSgnLi9fZmxhZ3MnKVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///114\n")},function(module,exports){eval("module.exports = function (exec) {\n try {\n return { e: false, v: exec() };\n } catch (e) {\n return { e: true, v: e };\n }\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcGVyZm9ybS5qcz85YzgwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQSxZQUFZO0FBQ1osR0FBRztBQUNILFlBQVk7QUFDWjtBQUNBIiwiZmlsZSI6IjExNS5qcyIsInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4geyBlOiBmYWxzZSwgdjogZXhlYygpIH07XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4geyBlOiB0cnVlLCB2OiBlIH07XG4gIH1cbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///115\n")},function(module,exports,__webpack_require__){eval("var anObject = __webpack_require__(1);\nvar isObject = __webpack_require__(4);\nvar newPromiseCapability = __webpack_require__(91);\n\nmodule.exports = function (C, x) {\n anObject(C);\n if (isObject(x) && x.constructor === C) return x;\n var promiseCapability = newPromiseCapability.f(C);\n var resolve = promiseCapability.resolve;\n resolve(x);\n return promiseCapability.promise;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcHJvbWlzZS1yZXNvbHZlLmpzP2JjYWEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsMkJBQTJCLG1CQUFPLENBQUMsRUFBMkI7O0FBRTlEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMTE2LmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IHJlcXVpcmUoJy4vX25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQywgeCkge1xuICBhbk9iamVjdChDKTtcbiAgaWYgKGlzT2JqZWN0KHgpICYmIHguY29uc3RydWN0b3IgPT09IEMpIHJldHVybiB4O1xuICB2YXIgcHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eS5mKEMpO1xuICB2YXIgcmVzb2x2ZSA9IHByb21pc2VDYXBhYmlsaXR5LnJlc29sdmU7XG4gIHJlc29sdmUoeCk7XG4gIHJldHVybiBwcm9taXNlQ2FwYWJpbGl0eS5wcm9taXNlO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///116\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar strong = __webpack_require__(118);\nvar validate = __webpack_require__(42);\nvar MAP = 'Map';\n\n// 23.1 Map Objects\nmodule.exports = __webpack_require__(61)(MAP, function (get) {\n return function Map() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.1.3.6 Map.prototype.get(key)\n get: function get(key) {\n var entry = strong.getEntry(validate(this, MAP), key);\n return entry && entry.v;\n },\n // 23.1.3.9 Map.prototype.set(key, value)\n set: function set(key, value) {\n return strong.def(validate(this, MAP), key === 0 ? 0 : key, value);\n }\n}, strong, true);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWFwLmpzP2Y0MDAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixhQUFhLG1CQUFPLENBQUMsR0FBc0I7QUFDM0MsZUFBZSxtQkFBTyxDQUFDLEVBQXdCO0FBQy9DOztBQUVBO0FBQ0EsaUJBQWlCLG1CQUFPLENBQUMsRUFBZTtBQUN4Qyx5QkFBeUIsbUVBQW1FO0FBQzVGLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTE3LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIHN0cm9uZyA9IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24tc3Ryb25nJyk7XG52YXIgdmFsaWRhdGUgPSByZXF1aXJlKCcuL192YWxpZGF0ZS1jb2xsZWN0aW9uJyk7XG52YXIgTUFQID0gJ01hcCc7XG5cbi8vIDIzLjEgTWFwIE9iamVjdHNcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fY29sbGVjdGlvbicpKE1BUCwgZnVuY3Rpb24gKGdldCkge1xuICByZXR1cm4gZnVuY3Rpb24gTWFwKCkgeyByZXR1cm4gZ2V0KHRoaXMsIGFyZ3VtZW50cy5sZW5ndGggPiAwID8gYXJndW1lbnRzWzBdIDogdW5kZWZpbmVkKTsgfTtcbn0sIHtcbiAgLy8gMjMuMS4zLjYgTWFwLnByb3RvdHlwZS5nZXQoa2V5KVxuICBnZXQ6IGZ1bmN0aW9uIGdldChrZXkpIHtcbiAgICB2YXIgZW50cnkgPSBzdHJvbmcuZ2V0RW50cnkodmFsaWRhdGUodGhpcywgTUFQKSwga2V5KTtcbiAgICByZXR1cm4gZW50cnkgJiYgZW50cnkudjtcbiAgfSxcbiAgLy8gMjMuMS4zLjkgTWFwLnByb3RvdHlwZS5zZXQoa2V5LCB2YWx1ZSlcbiAgc2V0OiBmdW5jdGlvbiBzZXQoa2V5LCB2YWx1ZSkge1xuICAgIHJldHVybiBzdHJvbmcuZGVmKHZhbGlkYXRlKHRoaXMsIE1BUCksIGtleSA9PT0gMCA/IDAgOiBrZXksIHZhbHVlKTtcbiAgfVxufSwgc3Ryb25nLCB0cnVlKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///117\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar dP = __webpack_require__(8).f;\nvar create = __webpack_require__(36);\nvar redefineAll = __webpack_require__(41);\nvar ctx = __webpack_require__(19);\nvar anInstance = __webpack_require__(39);\nvar forOf = __webpack_require__(40);\nvar $iterDefine = __webpack_require__(77);\nvar step = __webpack_require__(112);\nvar setSpecies = __webpack_require__(38);\nvar DESCRIPTORS = __webpack_require__(7);\nvar fastKey = __webpack_require__(30).fastKey;\nvar validate = __webpack_require__(42);\nvar SIZE = DESCRIPTORS ? '_s' : 'size';\n\nvar getEntry = function (that, key) {\n // fast case\n var index = fastKey(key);\n var entry;\n if (index !== 'F') return that._i[index];\n // frozen object case\n for (entry = that._f; entry; entry = entry.n) {\n if (entry.k == key) return entry;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = create(null); // index\n that._f = undefined; // first entry\n that._l = undefined; // last entry\n that[SIZE] = 0; // size\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.1.3.1 Map.prototype.clear()\n // 23.2.3.2 Set.prototype.clear()\n clear: function clear() {\n for (var that = validate(this, NAME), data = that._i, entry = that._f; entry; entry = entry.n) {\n entry.r = true;\n if (entry.p) entry.p = entry.p.n = undefined;\n delete data[entry.i];\n }\n that._f = that._l = undefined;\n that[SIZE] = 0;\n },\n // 23.1.3.3 Map.prototype.delete(key)\n // 23.2.3.4 Set.prototype.delete(value)\n 'delete': function (key) {\n var that = validate(this, NAME);\n var entry = getEntry(that, key);\n if (entry) {\n var next = entry.n;\n var prev = entry.p;\n delete that._i[entry.i];\n entry.r = true;\n if (prev) prev.n = next;\n if (next) next.p = prev;\n if (that._f == entry) that._f = next;\n if (that._l == entry) that._l = prev;\n that[SIZE]--;\n } return !!entry;\n },\n // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined)\n // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined)\n forEach: function forEach(callbackfn /* , that = undefined */) {\n validate(this, NAME);\n var f = ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3);\n var entry;\n while (entry = entry ? entry.n : this._f) {\n f(entry.v, entry.k, this);\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n }\n },\n // 23.1.3.7 Map.prototype.has(key)\n // 23.2.3.7 Set.prototype.has(value)\n has: function has(key) {\n return !!getEntry(validate(this, NAME), key);\n }\n });\n if (DESCRIPTORS) dP(C.prototype, 'size', {\n get: function () {\n return validate(this, NAME)[SIZE];\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var entry = getEntry(that, key);\n var prev, index;\n // change existing entry\n if (entry) {\n entry.v = value;\n // create new entry\n } else {\n that._l = entry = {\n i: index = fastKey(key, true), // <- index\n k: key, // <- key\n v: value, // <- value\n p: prev = that._l, // <- previous entry\n n: undefined, // <- next entry\n r: false // <- removed\n };\n if (!that._f) that._f = entry;\n if (prev) prev.n = entry;\n that[SIZE]++;\n // add to index\n if (index !== 'F') that._i[index] = entry;\n } return that;\n },\n getEntry: getEntry,\n setStrong: function (C, NAME, IS_MAP) {\n // add .keys, .values, .entries, [@@iterator]\n // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11\n $iterDefine(C, NAME, function (iterated, kind) {\n this._t = validate(iterated, NAME); // target\n this._k = kind; // kind\n this._l = undefined; // previous\n }, function () {\n var that = this;\n var kind = that._k;\n var entry = that._l;\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n // get next entry\n if (!that._t || !(that._l = entry = entry ? entry.n : that._t._f)) {\n // or finish the iteration\n that._t = undefined;\n return step(1);\n }\n // return step by kind\n if (kind == 'keys') return step(0, entry.k);\n if (kind == 'values') return step(0, entry.v);\n return step(0, [entry.k, entry.v]);\n }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);\n\n // add [@@species], 23.1.2.2, 23.2.2.2\n setSpecies(NAME);\n }\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY29sbGVjdGlvbi1zdHJvbmcuanM/YzI2YiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLFNBQVMsbUJBQU8sQ0FBQyxDQUFjO0FBQy9CLGFBQWEsbUJBQU8sQ0FBQyxFQUFrQjtBQUN2QyxrQkFBa0IsbUJBQU8sQ0FBQyxFQUFpQjtBQUMzQyxVQUFVLG1CQUFPLENBQUMsRUFBUTtBQUMxQixpQkFBaUIsbUJBQU8sQ0FBQyxFQUFnQjtBQUN6QyxZQUFZLG1CQUFPLENBQUMsRUFBVztBQUMvQixrQkFBa0IsbUJBQU8sQ0FBQyxFQUFnQjtBQUMxQyxXQUFXLG1CQUFPLENBQUMsR0FBYztBQUNqQyxpQkFBaUIsbUJBQU8sQ0FBQyxFQUFnQjtBQUN6QyxrQkFBa0IsbUJBQU8sQ0FBQyxDQUFnQjtBQUMxQyxjQUFjLG1CQUFPLENBQUMsRUFBUztBQUMvQixlQUFlLG1CQUFPLENBQUMsRUFBd0I7QUFDL0M7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLE9BQU87QUFDOUI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCLDZCQUE2QjtBQUM3QiwwQkFBMEI7QUFDMUIsMEJBQTBCO0FBQzFCLHFCQUFxQjtBQUNyQjtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhFQUE4RSxPQUFPO0FBQ3JGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlDQUF5QztBQUN6QyxxQkFBcUI7QUFDckIsMEJBQTBCO0FBQzFCLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjExOC5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpO1xudmFyIHJlZGVmaW5lQWxsID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUtYWxsJyk7XG52YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG52YXIgZm9yT2YgPSByZXF1aXJlKCcuL19mb3Itb2YnKTtcbnZhciAkaXRlckRlZmluZSA9IHJlcXVpcmUoJy4vX2l0ZXItZGVmaW5lJyk7XG52YXIgc3RlcCA9IHJlcXVpcmUoJy4vX2l0ZXItc3RlcCcpO1xudmFyIHNldFNwZWNpZXMgPSByZXF1aXJlKCcuL19zZXQtc3BlY2llcycpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKTtcbnZhciBmYXN0S2V5ID0gcmVxdWlyZSgnLi9fbWV0YScpLmZhc3RLZXk7XG52YXIgdmFsaWRhdGUgPSByZXF1aXJlKCcuL192YWxpZGF0ZS1jb2xsZWN0aW9uJyk7XG52YXIgU0laRSA9IERFU0NSSVBUT1JTID8gJ19zJyA6ICdzaXplJztcblxudmFyIGdldEVudHJ5ID0gZnVuY3Rpb24gKHRoYXQsIGtleSkge1xuICAvLyBmYXN0IGNhc2VcbiAgdmFyIGluZGV4ID0gZmFzdEtleShrZXkpO1xuICB2YXIgZW50cnk7XG4gIGlmIChpbmRleCAhPT0gJ0YnKSByZXR1cm4gdGhhdC5faVtpbmRleF07XG4gIC8vIGZyb3plbiBvYmplY3QgY2FzZVxuICBmb3IgKGVudHJ5ID0gdGhhdC5fZjsgZW50cnk7IGVudHJ5ID0gZW50cnkubikge1xuICAgIGlmIChlbnRyeS5rID09IGtleSkgcmV0dXJuIGVudHJ5O1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZ2V0Q29uc3RydWN0b3I6IGZ1bmN0aW9uICh3cmFwcGVyLCBOQU1FLCBJU19NQVAsIEFEREVSKSB7XG4gICAgdmFyIEMgPSB3cmFwcGVyKGZ1bmN0aW9uICh0aGF0LCBpdGVyYWJsZSkge1xuICAgICAgYW5JbnN0YW5jZSh0aGF0LCBDLCBOQU1FLCAnX2knKTtcbiAgICAgIHRoYXQuX3QgPSBOQU1FOyAgICAgICAgIC8vIGNvbGxlY3Rpb24gdHlwZVxuICAgICAgdGhhdC5faSA9IGNyZWF0ZShudWxsKTsgLy8gaW5kZXhcbiAgICAgIHRoYXQuX2YgPSB1bmRlZmluZWQ7ICAgIC8vIGZpcnN0IGVudHJ5XG4gICAgICB0aGF0Ll9sID0gdW5kZWZpbmVkOyAgICAvLyBsYXN0IGVudHJ5XG4gICAgICB0aGF0W1NJWkVdID0gMDsgICAgICAgICAvLyBzaXplXG4gICAgICBpZiAoaXRlcmFibGUgIT0gdW5kZWZpbmVkKSBmb3JPZihpdGVyYWJsZSwgSVNfTUFQLCB0aGF0W0FEREVSXSwgdGhhdCk7XG4gICAgfSk7XG4gICAgcmVkZWZpbmVBbGwoQy5wcm90b3R5cGUsIHtcbiAgICAgIC8vIDIzLjEuMy4xIE1hcC5wcm90b3R5cGUuY2xlYXIoKVxuICAgICAgLy8gMjMuMi4zLjIgU2V0LnByb3RvdHlwZS5jbGVhcigpXG4gICAgICBjbGVhcjogZnVuY3Rpb24gY2xlYXIoKSB7XG4gICAgICAgIGZvciAodmFyIHRoYXQgPSB2YWxpZGF0ZSh0aGlzLCBOQU1FKSwgZGF0YSA9IHRoYXQuX2ksIGVudHJ5ID0gdGhhdC5fZjsgZW50cnk7IGVudHJ5ID0gZW50cnkubikge1xuICAgICAgICAgIGVudHJ5LnIgPSB0cnVlO1xuICAgICAgICAgIGlmIChlbnRyeS5wKSBlbnRyeS5wID0gZW50cnkucC5uID0gdW5kZWZpbmVkO1xuICAgICAgICAgIGRlbGV0ZSBkYXRhW2VudHJ5LmldO1xuICAgICAgICB9XG4gICAgICAgIHRoYXQuX2YgPSB0aGF0Ll9sID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGF0W1NJWkVdID0gMDtcbiAgICAgIH0sXG4gICAgICAvLyAyMy4xLjMuMyBNYXAucHJvdG90eXBlLmRlbGV0ZShrZXkpXG4gICAgICAvLyAyMy4yLjMuNCBTZXQucHJvdG90eXBlLmRlbGV0ZSh2YWx1ZSlcbiAgICAgICdkZWxldGUnOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHZhciB0aGF0ID0gdmFsaWRhdGUodGhpcywgTkFNRSk7XG4gICAgICAgIHZhciBlbnRyeSA9IGdldEVudHJ5KHRoYXQsIGtleSk7XG4gICAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICAgIHZhciBuZXh0ID0gZW50cnkubjtcbiAgICAgICAgICB2YXIgcHJldiA9IGVudHJ5LnA7XG4gICAgICAgICAgZGVsZXRlIHRoYXQuX2lbZW50cnkuaV07XG4gICAgICAgICAgZW50cnkuciA9IHRydWU7XG4gICAgICAgICAgaWYgKHByZXYpIHByZXYubiA9IG5leHQ7XG4gICAgICAgICAgaWYgKG5leHQpIG5leHQucCA9IHByZXY7XG4gICAgICAgICAgaWYgKHRoYXQuX2YgPT0gZW50cnkpIHRoYXQuX2YgPSBuZXh0O1xuICAgICAgICAgIGlmICh0aGF0Ll9sID09IGVudHJ5KSB0aGF0Ll9sID0gcHJldjtcbiAgICAgICAgICB0aGF0W1NJWkVdLS07XG4gICAgICAgIH0gcmV0dXJuICEhZW50cnk7XG4gICAgICB9LFxuICAgICAgLy8gMjMuMi4zLjYgU2V0LnByb3RvdHlwZS5mb3JFYWNoKGNhbGxiYWNrZm4sIHRoaXNBcmcgPSB1bmRlZmluZWQpXG4gICAgICAvLyAyMy4xLjMuNSBNYXAucHJvdG90eXBlLmZvckVhY2goY2FsbGJhY2tmbiwgdGhpc0FyZyA9IHVuZGVmaW5lZClcbiAgICAgIGZvckVhY2g6IGZ1bmN0aW9uIGZvckVhY2goY2FsbGJhY2tmbiAvKiAsIHRoYXQgPSB1bmRlZmluZWQgKi8pIHtcbiAgICAgICAgdmFsaWRhdGUodGhpcywgTkFNRSk7XG4gICAgICAgIHZhciBmID0gY3R4KGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkLCAzKTtcbiAgICAgICAgdmFyIGVudHJ5O1xuICAgICAgICB3aGlsZSAoZW50cnkgPSBlbnRyeSA/IGVudHJ5Lm4gOiB0aGlzLl9mKSB7XG4gICAgICAgICAgZihlbnRyeS52LCBlbnRyeS5rLCB0aGlzKTtcbiAgICAgICAgICAvLyByZXZlcnQgdG8gdGhlIGxhc3QgZXhpc3RpbmcgZW50cnlcbiAgICAgICAgICB3aGlsZSAoZW50cnkgJiYgZW50cnkucikgZW50cnkgPSBlbnRyeS5wO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgLy8gMjMuMS4zLjcgTWFwLnByb3RvdHlwZS5oYXMoa2V5KVxuICAgICAgLy8gMjMuMi4zLjcgU2V0LnByb3RvdHlwZS5oYXModmFsdWUpXG4gICAgICBoYXM6IGZ1bmN0aW9uIGhhcyhrZXkpIHtcbiAgICAgICAgcmV0dXJuICEhZ2V0RW50cnkodmFsaWRhdGUodGhpcywgTkFNRSksIGtleSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKERFU0NSSVBUT1JTKSBkUChDLnByb3RvdHlwZSwgJ3NpemUnLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHZhbGlkYXRlKHRoaXMsIE5BTUUpW1NJWkVdO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBDO1xuICB9LFxuICBkZWY6IGZ1bmN0aW9uICh0aGF0LCBrZXksIHZhbHVlKSB7XG4gICAgdmFyIGVudHJ5ID0gZ2V0RW50cnkodGhhdCwga2V5KTtcbiAgICB2YXIgcHJldiwgaW5kZXg7XG4gICAgLy8gY2hhbmdlIGV4aXN0aW5nIGVudHJ5XG4gICAgaWYgKGVudHJ5KSB7XG4gICAgICBlbnRyeS52ID0gdmFsdWU7XG4gICAgLy8gY3JlYXRlIG5ldyBlbnRyeVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGF0Ll9sID0gZW50cnkgPSB7XG4gICAgICAgIGk6IGluZGV4ID0gZmFzdEtleShrZXksIHRydWUpLCAvLyA8LSBpbmRleFxuICAgICAgICBrOiBrZXksICAgICAgICAgICAgICAgICAgICAgICAgLy8gPC0ga2V5XG4gICAgICAgIHY6IHZhbHVlLCAgICAgICAgICAgICAgICAgICAgICAvLyA8LSB2YWx1ZVxuICAgICAgICBwOiBwcmV2ID0gdGhhdC5fbCwgICAgICAgICAgICAgLy8gPC0gcHJldmlvdXMgZW50cnlcbiAgICAgICAgbjogdW5kZWZpbmVkLCAgICAgICAgICAgICAgICAgIC8vIDwtIG5leHQgZW50cnlcbiAgICAgICAgcjogZmFsc2UgICAgICAgICAgICAgICAgICAgICAgIC8vIDwtIHJlbW92ZWRcbiAgICAgIH07XG4gICAgICBpZiAoIXRoYXQuX2YpIHRoYXQuX2YgPSBlbnRyeTtcbiAgICAgIGlmIChwcmV2KSBwcmV2Lm4gPSBlbnRyeTtcbiAgICAgIHRoYXRbU0laRV0rKztcbiAgICAgIC8vIGFkZCB0byBpbmRleFxuICAgICAgaWYgKGluZGV4ICE9PSAnRicpIHRoYXQuX2lbaW5kZXhdID0gZW50cnk7XG4gICAgfSByZXR1cm4gdGhhdDtcbiAgfSxcbiAgZ2V0RW50cnk6IGdldEVudHJ5LFxuICBzZXRTdHJvbmc6IGZ1bmN0aW9uIChDLCBOQU1FLCBJU19NQVApIHtcbiAgICAvLyBhZGQgLmtleXMsIC52YWx1ZXMsIC5lbnRyaWVzLCBbQEBpdGVyYXRvcl1cbiAgICAvLyAyMy4xLjMuNCwgMjMuMS4zLjgsIDIzLjEuMy4xMSwgMjMuMS4zLjEyLCAyMy4yLjMuNSwgMjMuMi4zLjgsIDIzLjIuMy4xMCwgMjMuMi4zLjExXG4gICAgJGl0ZXJEZWZpbmUoQywgTkFNRSwgZnVuY3Rpb24gKGl0ZXJhdGVkLCBraW5kKSB7XG4gICAgICB0aGlzLl90ID0gdmFsaWRhdGUoaXRlcmF0ZWQsIE5BTUUpOyAvLyB0YXJnZXRcbiAgICAgIHRoaXMuX2sgPSBraW5kOyAgICAgICAgICAgICAgICAgICAgIC8vIGtpbmRcbiAgICAgIHRoaXMuX2wgPSB1bmRlZmluZWQ7ICAgICAgICAgICAgICAgIC8vIHByZXZpb3VzXG4gICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgdmFyIGtpbmQgPSB0aGF0Ll9rO1xuICAgICAgdmFyIGVudHJ5ID0gdGhhdC5fbDtcbiAgICAgIC8vIHJldmVydCB0byB0aGUgbGFzdCBleGlzdGluZyBlbnRyeVxuICAgICAgd2hpbGUgKGVudHJ5ICYmIGVudHJ5LnIpIGVudHJ5ID0gZW50cnkucDtcbiAgICAgIC8vIGdldCBuZXh0IGVudHJ5XG4gICAgICBpZiAoIXRoYXQuX3QgfHwgISh0aGF0Ll9sID0gZW50cnkgPSBlbnRyeSA/IGVudHJ5Lm4gOiB0aGF0Ll90Ll9mKSkge1xuICAgICAgICAvLyBvciBmaW5pc2ggdGhlIGl0ZXJhdGlvblxuICAgICAgICB0aGF0Ll90ID0gdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gc3RlcCgxKTtcbiAgICAgIH1cbiAgICAgIC8vIHJldHVybiBzdGVwIGJ5IGtpbmRcbiAgICAgIGlmIChraW5kID09ICdrZXlzJykgcmV0dXJuIHN0ZXAoMCwgZW50cnkuayk7XG4gICAgICBpZiAoa2luZCA9PSAndmFsdWVzJykgcmV0dXJuIHN0ZXAoMCwgZW50cnkudik7XG4gICAgICByZXR1cm4gc3RlcCgwLCBbZW50cnkuaywgZW50cnkudl0pO1xuICAgIH0sIElTX01BUCA/ICdlbnRyaWVzJyA6ICd2YWx1ZXMnLCAhSVNfTUFQLCB0cnVlKTtcblxuICAgIC8vIGFkZCBbQEBzcGVjaWVzXSwgMjMuMS4yLjIsIDIzLjIuMi4yXG4gICAgc2V0U3BlY2llcyhOQU1FKTtcbiAgfVxufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///118\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar strong = __webpack_require__(118);\nvar validate = __webpack_require__(42);\nvar SET = 'Set';\n\n// 23.2 Set Objects\nmodule.exports = __webpack_require__(61)(SET, function (get) {\n return function Set() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.2.3.1 Set.prototype.add(value)\n add: function add(value) {\n return strong.def(validate(this, SET), value = value === 0 ? 0 : value, value);\n }\n}, strong);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc2V0LmpzPzRmN2YiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixhQUFhLG1CQUFPLENBQUMsR0FBc0I7QUFDM0MsZUFBZSxtQkFBTyxDQUFDLEVBQXdCO0FBQy9DOztBQUVBO0FBQ0EsaUJBQWlCLG1CQUFPLENBQUMsRUFBZTtBQUN4Qyx5QkFBeUIsbUVBQW1FO0FBQzVGLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTE5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIHN0cm9uZyA9IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24tc3Ryb25nJyk7XG52YXIgdmFsaWRhdGUgPSByZXF1aXJlKCcuL192YWxpZGF0ZS1jb2xsZWN0aW9uJyk7XG52YXIgU0VUID0gJ1NldCc7XG5cbi8vIDIzLjIgU2V0IE9iamVjdHNcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fY29sbGVjdGlvbicpKFNFVCwgZnVuY3Rpb24gKGdldCkge1xuICByZXR1cm4gZnVuY3Rpb24gU2V0KCkgeyByZXR1cm4gZ2V0KHRoaXMsIGFyZ3VtZW50cy5sZW5ndGggPiAwID8gYXJndW1lbnRzWzBdIDogdW5kZWZpbmVkKTsgfTtcbn0sIHtcbiAgLy8gMjMuMi4zLjEgU2V0LnByb3RvdHlwZS5hZGQodmFsdWUpXG4gIGFkZDogZnVuY3Rpb24gYWRkKHZhbHVlKSB7XG4gICAgcmV0dXJuIHN0cm9uZy5kZWYodmFsaWRhdGUodGhpcywgU0VUKSwgdmFsdWUgPSB2YWx1ZSA9PT0gMCA/IDAgOiB2YWx1ZSwgdmFsdWUpO1xuICB9XG59LCBzdHJvbmcpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///119\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar global = __webpack_require__(2);\nvar each = __webpack_require__(26)(0);\nvar redefine = __webpack_require__(12);\nvar meta = __webpack_require__(30);\nvar assign = __webpack_require__(99);\nvar weak = __webpack_require__(121);\nvar isObject = __webpack_require__(4);\nvar validate = __webpack_require__(42);\nvar NATIVE_WEAK_MAP = __webpack_require__(42);\nvar IS_IE11 = !global.ActiveXObject && 'ActiveXObject' in global;\nvar WEAK_MAP = 'WeakMap';\nvar getWeak = meta.getWeak;\nvar isExtensible = Object.isExtensible;\nvar uncaughtFrozenStore = weak.ufstore;\nvar InternalMap;\n\nvar wrapper = function (get) {\n return function WeakMap() {\n return get(this, arguments.length > 0 ? arguments[0] : undefined);\n };\n};\n\nvar methods = {\n // 23.3.3.3 WeakMap.prototype.get(key)\n get: function get(key) {\n if (isObject(key)) {\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, WEAK_MAP)).get(key);\n return data ? data[this._i] : undefined;\n }\n },\n // 23.3.3.5 WeakMap.prototype.set(key, value)\n set: function set(key, value) {\n return weak.def(validate(this, WEAK_MAP), key, value);\n }\n};\n\n// 23.3 WeakMap Objects\nvar $WeakMap = module.exports = __webpack_require__(61)(WEAK_MAP, wrapper, methods, weak, true, true);\n\n// IE11 WeakMap frozen keys fix\nif (NATIVE_WEAK_MAP && IS_IE11) {\n InternalMap = weak.getConstructor(wrapper, WEAK_MAP);\n assign(InternalMap.prototype, methods);\n meta.NEED = true;\n each(['delete', 'has', 'get', 'set'], function (key) {\n var proto = $WeakMap.prototype;\n var method = proto[key];\n redefine(proto, key, function (a, b) {\n // store frozen objects on internal weakmap shim\n if (isObject(a) && !isExtensible(a)) {\n if (!this._f) this._f = new InternalMap();\n var result = this._f[key](a, b);\n return key == 'set' ? this : result;\n // store all the rest on native weakmap\n } return method.call(this, a, b);\n });\n });\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYud2Vhay1tYXAuanM/MTBhZCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGFBQWEsbUJBQU8sQ0FBQyxDQUFXO0FBQ2hDLFdBQVcsbUJBQU8sQ0FBQyxFQUFrQjtBQUNyQyxlQUFlLG1CQUFPLENBQUMsRUFBYTtBQUNwQyxXQUFXLG1CQUFPLENBQUMsRUFBUztBQUM1QixhQUFhLG1CQUFPLENBQUMsRUFBa0I7QUFDdkMsV0FBVyxtQkFBTyxDQUFDLEdBQW9CO0FBQ3ZDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGVBQWUsbUJBQU8sQ0FBQyxFQUF3QjtBQUMvQyxzQkFBc0IsbUJBQU8sQ0FBQyxFQUF3QjtBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxnQ0FBZ0MsbUJBQU8sQ0FBQyxFQUFlOztBQUV2RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMLEdBQUc7QUFDSCIsImZpbGUiOiIxMjAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgZWFjaCA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKSgwKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG52YXIgbWV0YSA9IHJlcXVpcmUoJy4vX21ldGEnKTtcbnZhciBhc3NpZ24gPSByZXF1aXJlKCcuL19vYmplY3QtYXNzaWduJyk7XG52YXIgd2VhayA9IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24td2VhaycpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgdmFsaWRhdGUgPSByZXF1aXJlKCcuL192YWxpZGF0ZS1jb2xsZWN0aW9uJyk7XG52YXIgTkFUSVZFX1dFQUtfTUFQID0gcmVxdWlyZSgnLi9fdmFsaWRhdGUtY29sbGVjdGlvbicpO1xudmFyIElTX0lFMTEgPSAhZ2xvYmFsLkFjdGl2ZVhPYmplY3QgJiYgJ0FjdGl2ZVhPYmplY3QnIGluIGdsb2JhbDtcbnZhciBXRUFLX01BUCA9ICdXZWFrTWFwJztcbnZhciBnZXRXZWFrID0gbWV0YS5nZXRXZWFrO1xudmFyIGlzRXh0ZW5zaWJsZSA9IE9iamVjdC5pc0V4dGVuc2libGU7XG52YXIgdW5jYXVnaHRGcm96ZW5TdG9yZSA9IHdlYWsudWZzdG9yZTtcbnZhciBJbnRlcm5hbE1hcDtcblxudmFyIHdyYXBwZXIgPSBmdW5jdGlvbiAoZ2V0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBXZWFrTWFwKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgYXJndW1lbnRzLmxlbmd0aCA+IDAgPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQpO1xuICB9O1xufTtcblxudmFyIG1ldGhvZHMgPSB7XG4gIC8vIDIzLjMuMy4zIFdlYWtNYXAucHJvdG90eXBlLmdldChrZXkpXG4gIGdldDogZnVuY3Rpb24gZ2V0KGtleSkge1xuICAgIGlmIChpc09iamVjdChrZXkpKSB7XG4gICAgICB2YXIgZGF0YSA9IGdldFdlYWsoa2V5KTtcbiAgICAgIGlmIChkYXRhID09PSB0cnVlKSByZXR1cm4gdW5jYXVnaHRGcm96ZW5TdG9yZSh2YWxpZGF0ZSh0aGlzLCBXRUFLX01BUCkpLmdldChrZXkpO1xuICAgICAgcmV0dXJuIGRhdGEgPyBkYXRhW3RoaXMuX2ldIDogdW5kZWZpbmVkO1xuICAgIH1cbiAgfSxcbiAgLy8gMjMuMy4zLjUgV2Vha01hcC5wcm90b3R5cGUuc2V0KGtleSwgdmFsdWUpXG4gIHNldDogZnVuY3Rpb24gc2V0KGtleSwgdmFsdWUpIHtcbiAgICByZXR1cm4gd2Vhay5kZWYodmFsaWRhdGUodGhpcywgV0VBS19NQVApLCBrZXksIHZhbHVlKTtcbiAgfVxufTtcblxuLy8gMjMuMyBXZWFrTWFwIE9iamVjdHNcbnZhciAkV2Vha01hcCA9IG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fY29sbGVjdGlvbicpKFdFQUtfTUFQLCB3cmFwcGVyLCBtZXRob2RzLCB3ZWFrLCB0cnVlLCB0cnVlKTtcblxuLy8gSUUxMSBXZWFrTWFwIGZyb3plbiBrZXlzIGZpeFxuaWYgKE5BVElWRV9XRUFLX01BUCAmJiBJU19JRTExKSB7XG4gIEludGVybmFsTWFwID0gd2Vhay5nZXRDb25zdHJ1Y3Rvcih3cmFwcGVyLCBXRUFLX01BUCk7XG4gIGFzc2lnbihJbnRlcm5hbE1hcC5wcm90b3R5cGUsIG1ldGhvZHMpO1xuICBtZXRhLk5FRUQgPSB0cnVlO1xuICBlYWNoKFsnZGVsZXRlJywgJ2hhcycsICdnZXQnLCAnc2V0J10sIGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgcHJvdG8gPSAkV2Vha01hcC5wcm90b3R5cGU7XG4gICAgdmFyIG1ldGhvZCA9IHByb3RvW2tleV07XG4gICAgcmVkZWZpbmUocHJvdG8sIGtleSwgZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgIC8vIHN0b3JlIGZyb3plbiBvYmplY3RzIG9uIGludGVybmFsIHdlYWttYXAgc2hpbVxuICAgICAgaWYgKGlzT2JqZWN0KGEpICYmICFpc0V4dGVuc2libGUoYSkpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9mKSB0aGlzLl9mID0gbmV3IEludGVybmFsTWFwKCk7XG4gICAgICAgIHZhciByZXN1bHQgPSB0aGlzLl9mW2tleV0oYSwgYik7XG4gICAgICAgIHJldHVybiBrZXkgPT0gJ3NldCcgPyB0aGlzIDogcmVzdWx0O1xuICAgICAgLy8gc3RvcmUgYWxsIHRoZSByZXN0IG9uIG5hdGl2ZSB3ZWFrbWFwXG4gICAgICB9IHJldHVybiBtZXRob2QuY2FsbCh0aGlzLCBhLCBiKTtcbiAgICB9KTtcbiAgfSk7XG59XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///120\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar redefineAll = __webpack_require__(41);\nvar getWeak = __webpack_require__(30).getWeak;\nvar anObject = __webpack_require__(1);\nvar isObject = __webpack_require__(4);\nvar anInstance = __webpack_require__(39);\nvar forOf = __webpack_require__(40);\nvar createArrayMethod = __webpack_require__(26);\nvar $has = __webpack_require__(14);\nvar validate = __webpack_require__(42);\nvar arrayFind = createArrayMethod(5);\nvar arrayFindIndex = createArrayMethod(6);\nvar id = 0;\n\n// fallback for uncaught frozen keys\nvar uncaughtFrozenStore = function (that) {\n return that._l || (that._l = new UncaughtFrozenStore());\n};\nvar UncaughtFrozenStore = function () {\n this.a = [];\n};\nvar findUncaughtFrozen = function (store, key) {\n return arrayFind(store.a, function (it) {\n return it[0] === key;\n });\n};\nUncaughtFrozenStore.prototype = {\n get: function (key) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) return entry[1];\n },\n has: function (key) {\n return !!findUncaughtFrozen(this, key);\n },\n set: function (key, value) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) entry[1] = value;\n else this.a.push([key, value]);\n },\n 'delete': function (key) {\n var index = arrayFindIndex(this.a, function (it) {\n return it[0] === key;\n });\n if (~index) this.a.splice(index, 1);\n return !!~index;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = id++; // collection id\n that._l = undefined; // leak store for uncaught frozen objects\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.3.3.2 WeakMap.prototype.delete(key)\n // 23.4.3.3 WeakSet.prototype.delete(value)\n 'delete': function (key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME))['delete'](key);\n return data && $has(data, this._i) && delete data[this._i];\n },\n // 23.3.3.4 WeakMap.prototype.has(key)\n // 23.4.3.4 WeakSet.prototype.has(value)\n has: function has(key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME)).has(key);\n return data && $has(data, this._i);\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var data = getWeak(anObject(key), true);\n if (data === true) uncaughtFrozenStore(that).set(key, value);\n else data[that._i] = value;\n return that;\n },\n ufstore: uncaughtFrozenStore\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY29sbGVjdGlvbi13ZWFrLmpzPzY0M2UiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixrQkFBa0IsbUJBQU8sQ0FBQyxFQUFpQjtBQUMzQyxjQUFjLG1CQUFPLENBQUMsRUFBUztBQUMvQixlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxpQkFBaUIsbUJBQU8sQ0FBQyxFQUFnQjtBQUN6QyxZQUFZLG1CQUFPLENBQUMsRUFBVztBQUMvQix3QkFBd0IsbUJBQU8sQ0FBQyxFQUFrQjtBQUNsRCxXQUFXLG1CQUFPLENBQUMsRUFBUTtBQUMzQixlQUFlLG1CQUFPLENBQUMsRUFBd0I7QUFDL0M7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckIscUJBQXFCO0FBQ3JCLDBCQUEwQjtBQUMxQjtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBIiwiZmlsZSI6IjEyMS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciByZWRlZmluZUFsbCA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lLWFsbCcpO1xudmFyIGdldFdlYWsgPSByZXF1aXJlKCcuL19tZXRhJykuZ2V0V2VhaztcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG52YXIgZm9yT2YgPSByZXF1aXJlKCcuL19mb3Itb2YnKTtcbnZhciBjcmVhdGVBcnJheU1ldGhvZCA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKTtcbnZhciAkaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgdmFsaWRhdGUgPSByZXF1aXJlKCcuL192YWxpZGF0ZS1jb2xsZWN0aW9uJyk7XG52YXIgYXJyYXlGaW5kID0gY3JlYXRlQXJyYXlNZXRob2QoNSk7XG52YXIgYXJyYXlGaW5kSW5kZXggPSBjcmVhdGVBcnJheU1ldGhvZCg2KTtcbnZhciBpZCA9IDA7XG5cbi8vIGZhbGxiYWNrIGZvciB1bmNhdWdodCBmcm96ZW4ga2V5c1xudmFyIHVuY2F1Z2h0RnJvemVuU3RvcmUgPSBmdW5jdGlvbiAodGhhdCkge1xuICByZXR1cm4gdGhhdC5fbCB8fCAodGhhdC5fbCA9IG5ldyBVbmNhdWdodEZyb3plblN0b3JlKCkpO1xufTtcbnZhciBVbmNhdWdodEZyb3plblN0b3JlID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmEgPSBbXTtcbn07XG52YXIgZmluZFVuY2F1Z2h0RnJvemVuID0gZnVuY3Rpb24gKHN0b3JlLCBrZXkpIHtcbiAgcmV0dXJuIGFycmF5RmluZChzdG9yZS5hLCBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gaXRbMF0gPT09IGtleTtcbiAgfSk7XG59O1xuVW5jYXVnaHRGcm96ZW5TdG9yZS5wcm90b3R5cGUgPSB7XG4gIGdldDogZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciBlbnRyeSA9IGZpbmRVbmNhdWdodEZyb3plbih0aGlzLCBrZXkpO1xuICAgIGlmIChlbnRyeSkgcmV0dXJuIGVudHJ5WzFdO1xuICB9LFxuICBoYXM6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICByZXR1cm4gISFmaW5kVW5jYXVnaHRGcm96ZW4odGhpcywga2V5KTtcbiAgfSxcbiAgc2V0OiBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgIHZhciBlbnRyeSA9IGZpbmRVbmNhdWdodEZyb3plbih0aGlzLCBrZXkpO1xuICAgIGlmIChlbnRyeSkgZW50cnlbMV0gPSB2YWx1ZTtcbiAgICBlbHNlIHRoaXMuYS5wdXNoKFtrZXksIHZhbHVlXSk7XG4gIH0sXG4gICdkZWxldGUnOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIGluZGV4ID0gYXJyYXlGaW5kSW5kZXgodGhpcy5hLCBmdW5jdGlvbiAoaXQpIHtcbiAgICAgIHJldHVybiBpdFswXSA9PT0ga2V5O1xuICAgIH0pO1xuICAgIGlmICh+aW5kZXgpIHRoaXMuYS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIHJldHVybiAhIX5pbmRleDtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGdldENvbnN0cnVjdG9yOiBmdW5jdGlvbiAod3JhcHBlciwgTkFNRSwgSVNfTUFQLCBBRERFUikge1xuICAgIHZhciBDID0gd3JhcHBlcihmdW5jdGlvbiAodGhhdCwgaXRlcmFibGUpIHtcbiAgICAgIGFuSW5zdGFuY2UodGhhdCwgQywgTkFNRSwgJ19pJyk7XG4gICAgICB0aGF0Ll90ID0gTkFNRTsgICAgICAvLyBjb2xsZWN0aW9uIHR5cGVcbiAgICAgIHRoYXQuX2kgPSBpZCsrOyAgICAgIC8vIGNvbGxlY3Rpb24gaWRcbiAgICAgIHRoYXQuX2wgPSB1bmRlZmluZWQ7IC8vIGxlYWsgc3RvcmUgZm9yIHVuY2F1Z2h0IGZyb3plbiBvYmplY3RzXG4gICAgICBpZiAoaXRlcmFibGUgIT0gdW5kZWZpbmVkKSBmb3JPZihpdGVyYWJsZSwgSVNfTUFQLCB0aGF0W0FEREVSXSwgdGhhdCk7XG4gICAgfSk7XG4gICAgcmVkZWZpbmVBbGwoQy5wcm90b3R5cGUsIHtcbiAgICAgIC8vIDIzLjMuMy4yIFdlYWtNYXAucHJvdG90eXBlLmRlbGV0ZShrZXkpXG4gICAgICAvLyAyMy40LjMuMyBXZWFrU2V0LnByb3RvdHlwZS5kZWxldGUodmFsdWUpXG4gICAgICAnZGVsZXRlJzogZnVuY3Rpb24gKGtleSkge1xuICAgICAgICBpZiAoIWlzT2JqZWN0KGtleSkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgdmFyIGRhdGEgPSBnZXRXZWFrKGtleSk7XG4gICAgICAgIGlmIChkYXRhID09PSB0cnVlKSByZXR1cm4gdW5jYXVnaHRGcm96ZW5TdG9yZSh2YWxpZGF0ZSh0aGlzLCBOQU1FKSlbJ2RlbGV0ZSddKGtleSk7XG4gICAgICAgIHJldHVybiBkYXRhICYmICRoYXMoZGF0YSwgdGhpcy5faSkgJiYgZGVsZXRlIGRhdGFbdGhpcy5faV07XG4gICAgICB9LFxuICAgICAgLy8gMjMuMy4zLjQgV2Vha01hcC5wcm90b3R5cGUuaGFzKGtleSlcbiAgICAgIC8vIDIzLjQuMy40IFdlYWtTZXQucHJvdG90eXBlLmhhcyh2YWx1ZSlcbiAgICAgIGhhczogZnVuY3Rpb24gaGFzKGtleSkge1xuICAgICAgICBpZiAoIWlzT2JqZWN0KGtleSkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgdmFyIGRhdGEgPSBnZXRXZWFrKGtleSk7XG4gICAgICAgIGlmIChkYXRhID09PSB0cnVlKSByZXR1cm4gdW5jYXVnaHRGcm96ZW5TdG9yZSh2YWxpZGF0ZSh0aGlzLCBOQU1FKSkuaGFzKGtleSk7XG4gICAgICAgIHJldHVybiBkYXRhICYmICRoYXMoZGF0YSwgdGhpcy5faSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIEM7XG4gIH0sXG4gIGRlZjogZnVuY3Rpb24gKHRoYXQsIGtleSwgdmFsdWUpIHtcbiAgICB2YXIgZGF0YSA9IGdldFdlYWsoYW5PYmplY3Qoa2V5KSwgdHJ1ZSk7XG4gICAgaWYgKGRhdGEgPT09IHRydWUpIHVuY2F1Z2h0RnJvemVuU3RvcmUodGhhdCkuc2V0KGtleSwgdmFsdWUpO1xuICAgIGVsc2UgZGF0YVt0aGF0Ll9pXSA9IHZhbHVlO1xuICAgIHJldHVybiB0aGF0O1xuICB9LFxuICB1ZnN0b3JlOiB1bmNhdWdodEZyb3plblN0b3JlXG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///121\n")},function(module,exports,__webpack_require__){eval("// https://tc39.github.io/ecma262/#sec-toindex\nvar toInteger = __webpack_require__(21);\nvar toLength = __webpack_require__(6);\nmodule.exports = function (it) {\n if (it === undefined) return 0;\n var number = toInteger(it);\n var length = toLength(number);\n if (number !== length) throw RangeError('Wrong length!');\n return length;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8taW5kZXguanM/MDlmYSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGdCQUFnQixtQkFBTyxDQUFDLEVBQWU7QUFDdkMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMTIyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtdG9pbmRleFxudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGl0ID09PSB1bmRlZmluZWQpIHJldHVybiAwO1xuICB2YXIgbnVtYmVyID0gdG9JbnRlZ2VyKGl0KTtcbiAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKG51bWJlcik7XG4gIGlmIChudW1iZXIgIT09IGxlbmd0aCkgdGhyb3cgUmFuZ2VFcnJvcignV3JvbmcgbGVuZ3RoIScpO1xuICByZXR1cm4gbGVuZ3RoO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///122\n")},function(module,exports,__webpack_require__){eval("// all object keys, includes non-enumerable and symbols\nvar gOPN = __webpack_require__(37);\nvar gOPS = __webpack_require__(53);\nvar anObject = __webpack_require__(1);\nvar Reflect = __webpack_require__(2).Reflect;\nmodule.exports = Reflect && Reflect.ownKeys || function ownKeys(it) {\n var keys = gOPN.f(anObject(it));\n var getSymbols = gOPS.f;\n return getSymbols ? keys.concat(getSymbols(it)) : keys;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb3duLWtleXMuanM/OTkwYiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLFdBQVcsbUJBQU8sQ0FBQyxFQUFnQjtBQUNuQyxXQUFXLG1CQUFPLENBQUMsRUFBZ0I7QUFDbkMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIxMjMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBhbGwgb2JqZWN0IGtleXMsIGluY2x1ZGVzIG5vbi1lbnVtZXJhYmxlIGFuZCBzeW1ib2xzXG52YXIgZ09QTiA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJyk7XG52YXIgZ09QUyA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BzJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBSZWZsZWN0ID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuUmVmbGVjdDtcbm1vZHVsZS5leHBvcnRzID0gUmVmbGVjdCAmJiBSZWZsZWN0Lm93bktleXMgfHwgZnVuY3Rpb24gb3duS2V5cyhpdCkge1xuICB2YXIga2V5cyA9IGdPUE4uZihhbk9iamVjdChpdCkpO1xuICB2YXIgZ2V0U3ltYm9scyA9IGdPUFMuZjtcbiAgcmV0dXJuIGdldFN5bWJvbHMgPyBrZXlzLmNvbmNhdChnZXRTeW1ib2xzKGl0KSkgOiBrZXlzO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///123\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// https://tc39.github.io/proposal-flatMap/#sec-FlattenIntoArray\nvar isArray = __webpack_require__(54);\nvar isObject = __webpack_require__(4);\nvar toLength = __webpack_require__(6);\nvar ctx = __webpack_require__(19);\nvar IS_CONCAT_SPREADABLE = __webpack_require__(5)('isConcatSpreadable');\n\nfunction flattenIntoArray(target, original, source, sourceLen, start, depth, mapper, thisArg) {\n var targetIndex = start;\n var sourceIndex = 0;\n var mapFn = mapper ? ctx(mapper, thisArg, 3) : false;\n var element, spreadable;\n\n while (sourceIndex < sourceLen) {\n if (sourceIndex in source) {\n element = mapFn ? mapFn(source[sourceIndex], sourceIndex, original) : source[sourceIndex];\n\n spreadable = false;\n if (isObject(element)) {\n spreadable = element[IS_CONCAT_SPREADABLE];\n spreadable = spreadable !== undefined ? !!spreadable : isArray(element);\n }\n\n if (spreadable && depth > 0) {\n targetIndex = flattenIntoArray(target, original, element, toLength(element.length), targetIndex, depth - 1) - 1;\n } else {\n if (targetIndex >= 0x1fffffffffffff) throw TypeError();\n target[targetIndex] = element;\n }\n\n targetIndex++;\n }\n sourceIndex++;\n }\n return targetIndex;\n}\n\nmodule.exports = flattenIntoArray;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZmxhdHRlbi1pbnRvLWFycmF5LmpzP2M0NWYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxFQUFhO0FBQ25DLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLFVBQVUsbUJBQU8sQ0FBQyxFQUFRO0FBQzFCLDJCQUEyQixtQkFBTyxDQUFDLENBQVE7O0FBRTNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6IjEyNC5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtZmxhdE1hcC8jc2VjLUZsYXR0ZW5JbnRvQXJyYXlcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi9faXMtYXJyYXknKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgSVNfQ09OQ0FUX1NQUkVBREFCTEUgPSByZXF1aXJlKCcuL193a3MnKSgnaXNDb25jYXRTcHJlYWRhYmxlJyk7XG5cbmZ1bmN0aW9uIGZsYXR0ZW5JbnRvQXJyYXkodGFyZ2V0LCBvcmlnaW5hbCwgc291cmNlLCBzb3VyY2VMZW4sIHN0YXJ0LCBkZXB0aCwgbWFwcGVyLCB0aGlzQXJnKSB7XG4gIHZhciB0YXJnZXRJbmRleCA9IHN0YXJ0O1xuICB2YXIgc291cmNlSW5kZXggPSAwO1xuICB2YXIgbWFwRm4gPSBtYXBwZXIgPyBjdHgobWFwcGVyLCB0aGlzQXJnLCAzKSA6IGZhbHNlO1xuICB2YXIgZWxlbWVudCwgc3ByZWFkYWJsZTtcblxuICB3aGlsZSAoc291cmNlSW5kZXggPCBzb3VyY2VMZW4pIHtcbiAgICBpZiAoc291cmNlSW5kZXggaW4gc291cmNlKSB7XG4gICAgICBlbGVtZW50ID0gbWFwRm4gPyBtYXBGbihzb3VyY2Vbc291cmNlSW5kZXhdLCBzb3VyY2VJbmRleCwgb3JpZ2luYWwpIDogc291cmNlW3NvdXJjZUluZGV4XTtcblxuICAgICAgc3ByZWFkYWJsZSA9IGZhbHNlO1xuICAgICAgaWYgKGlzT2JqZWN0KGVsZW1lbnQpKSB7XG4gICAgICAgIHNwcmVhZGFibGUgPSBlbGVtZW50W0lTX0NPTkNBVF9TUFJFQURBQkxFXTtcbiAgICAgICAgc3ByZWFkYWJsZSA9IHNwcmVhZGFibGUgIT09IHVuZGVmaW5lZCA/ICEhc3ByZWFkYWJsZSA6IGlzQXJyYXkoZWxlbWVudCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChzcHJlYWRhYmxlICYmIGRlcHRoID4gMCkge1xuICAgICAgICB0YXJnZXRJbmRleCA9IGZsYXR0ZW5JbnRvQXJyYXkodGFyZ2V0LCBvcmlnaW5hbCwgZWxlbWVudCwgdG9MZW5ndGgoZWxlbWVudC5sZW5ndGgpLCB0YXJnZXRJbmRleCwgZGVwdGggLSAxKSAtIDE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodGFyZ2V0SW5kZXggPj0gMHgxZmZmZmZmZmZmZmZmZikgdGhyb3cgVHlwZUVycm9yKCk7XG4gICAgICAgIHRhcmdldFt0YXJnZXRJbmRleF0gPSBlbGVtZW50O1xuICAgICAgfVxuXG4gICAgICB0YXJnZXRJbmRleCsrO1xuICAgIH1cbiAgICBzb3VyY2VJbmRleCsrO1xuICB9XG4gIHJldHVybiB0YXJnZXRJbmRleDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmbGF0dGVuSW50b0FycmF5O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///124\n")},function(module,exports,__webpack_require__){eval("// https://github.com/tc39/proposal-string-pad-start-end\nvar toLength = __webpack_require__(6);\nvar repeat = __webpack_require__(74);\nvar defined = __webpack_require__(24);\n\nmodule.exports = function (that, maxLength, fillString, left) {\n var S = String(defined(that));\n var stringLength = S.length;\n var fillStr = fillString === undefined ? ' ' : String(fillString);\n var intMaxLength = toLength(maxLength);\n if (intMaxLength <= stringLength || fillStr == '') return S;\n var fillLen = intMaxLength - stringLength;\n var stringFiller = repeat.call(fillStr, Math.ceil(fillLen / fillStr.length));\n if (stringFiller.length > fillLen) stringFiller = stringFiller.slice(0, fillLen);\n return left ? stringFiller + S : S + stringFiller;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLXBhZC5qcz8yZTA4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsYUFBYSxtQkFBTyxDQUFDLEVBQWtCO0FBQ3ZDLGNBQWMsbUJBQU8sQ0FBQyxFQUFZOztBQUVsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjEyNS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXN0cmluZy1wYWQtc3RhcnQtZW5kXG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciByZXBlYXQgPSByZXF1aXJlKCcuL19zdHJpbmctcmVwZWF0Jyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGhhdCwgbWF4TGVuZ3RoLCBmaWxsU3RyaW5nLCBsZWZ0KSB7XG4gIHZhciBTID0gU3RyaW5nKGRlZmluZWQodGhhdCkpO1xuICB2YXIgc3RyaW5nTGVuZ3RoID0gUy5sZW5ndGg7XG4gIHZhciBmaWxsU3RyID0gZmlsbFN0cmluZyA9PT0gdW5kZWZpbmVkID8gJyAnIDogU3RyaW5nKGZpbGxTdHJpbmcpO1xuICB2YXIgaW50TWF4TGVuZ3RoID0gdG9MZW5ndGgobWF4TGVuZ3RoKTtcbiAgaWYgKGludE1heExlbmd0aCA8PSBzdHJpbmdMZW5ndGggfHwgZmlsbFN0ciA9PSAnJykgcmV0dXJuIFM7XG4gIHZhciBmaWxsTGVuID0gaW50TWF4TGVuZ3RoIC0gc3RyaW5nTGVuZ3RoO1xuICB2YXIgc3RyaW5nRmlsbGVyID0gcmVwZWF0LmNhbGwoZmlsbFN0ciwgTWF0aC5jZWlsKGZpbGxMZW4gLyBmaWxsU3RyLmxlbmd0aCkpO1xuICBpZiAoc3RyaW5nRmlsbGVyLmxlbmd0aCA+IGZpbGxMZW4pIHN0cmluZ0ZpbGxlciA9IHN0cmluZ0ZpbGxlci5zbGljZSgwLCBmaWxsTGVuKTtcbiAgcmV0dXJuIGxlZnQgPyBzdHJpbmdGaWxsZXIgKyBTIDogUyArIHN0cmluZ0ZpbGxlcjtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///125\n")},function(module,exports,__webpack_require__){eval("var DESCRIPTORS = __webpack_require__(7);\nvar getKeys = __webpack_require__(34);\nvar toIObject = __webpack_require__(15);\nvar isEnum = __webpack_require__(49).f;\nmodule.exports = function (isEntries) {\n return function (it) {\n var O = toIObject(it);\n var keys = getKeys(O);\n var length = keys.length;\n var i = 0;\n var result = [];\n var key;\n while (length > i) {\n key = keys[i++];\n if (!DESCRIPTORS || isEnum.call(O, key)) {\n result.push(isEntries ? [key, O[key]] : O[key]);\n }\n }\n return result;\n };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LXRvLWFycmF5LmpzPzUwNGMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsa0JBQWtCLG1CQUFPLENBQUMsQ0FBZ0I7QUFDMUMsY0FBYyxtQkFBTyxDQUFDLEVBQWdCO0FBQ3RDLGdCQUFnQixtQkFBTyxDQUFDLEVBQWU7QUFDdkMsYUFBYSxtQkFBTyxDQUFDLEVBQWU7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIxMjYuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpO1xudmFyIGdldEtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciBpc0VudW0gPSByZXF1aXJlKCcuL19vYmplY3QtcGllJykuZjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGlzRW50cmllcykge1xuICByZXR1cm4gZnVuY3Rpb24gKGl0KSB7XG4gICAgdmFyIE8gPSB0b0lPYmplY3QoaXQpO1xuICAgIHZhciBrZXlzID0gZ2V0S2V5cyhPKTtcbiAgICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICB2YXIga2V5O1xuICAgIHdoaWxlIChsZW5ndGggPiBpKSB7XG4gICAgICBrZXkgPSBrZXlzW2krK107XG4gICAgICBpZiAoIURFU0NSSVBUT1JTIHx8IGlzRW51bS5jYWxsKE8sIGtleSkpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goaXNFbnRyaWVzID8gW2tleSwgT1trZXldXSA6IE9ba2V5XSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///126\n")},function(module,exports,__webpack_require__){eval('// https://github.com/DavidBruant/Map-Set.prototype.toJSON\nvar classof = __webpack_require__(44);\nvar from = __webpack_require__(128);\nmodule.exports = function (NAME) {\n return function toJSON() {\n if (classof(this) != NAME) throw TypeError(NAME + "#toJSON isn\'t generic");\n return from(this);\n };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY29sbGVjdGlvbi10by1qc29uLmpzPzQ0YjgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsRUFBWTtBQUNsQyxXQUFXLG1CQUFPLENBQUMsR0FBd0I7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjEyNy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9EYXZpZEJydWFudC9NYXAtU2V0LnByb3RvdHlwZS50b0pTT05cbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi9fY2xhc3NvZicpO1xudmFyIGZyb20gPSByZXF1aXJlKCcuL19hcnJheS1mcm9tLWl0ZXJhYmxlJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChOQU1FKSB7XG4gIHJldHVybiBmdW5jdGlvbiB0b0pTT04oKSB7XG4gICAgaWYgKGNsYXNzb2YodGhpcykgIT0gTkFNRSkgdGhyb3cgVHlwZUVycm9yKE5BTUUgKyBcIiN0b0pTT04gaXNuJ3QgZ2VuZXJpY1wiKTtcbiAgICByZXR1cm4gZnJvbSh0aGlzKTtcbiAgfTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///127\n')},function(module,exports,__webpack_require__){eval("var forOf = __webpack_require__(40);\n\nmodule.exports = function (iter, ITERATOR) {\n var result = [];\n forOf(iter, false, result.push, result, ITERATOR);\n return result;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktZnJvbS1pdGVyYWJsZS5qcz80Mzc5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVksbUJBQU8sQ0FBQyxFQUFXOztBQUUvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjEyOC5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBmb3JPZiA9IHJlcXVpcmUoJy4vX2Zvci1vZicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVyLCBJVEVSQVRPUikge1xuICB2YXIgcmVzdWx0ID0gW107XG4gIGZvck9mKGl0ZXIsIGZhbHNlLCByZXN1bHQucHVzaCwgcmVzdWx0LCBJVEVSQVRPUik7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///128\n")},function(module,exports){eval("// https://rwaldron.github.io/proposal-math-extensions/\nmodule.exports = Math.scale || function scale(x, inLow, inHigh, outLow, outHigh) {\n if (\n arguments.length === 0\n // eslint-disable-next-line no-self-compare\n || x != x\n // eslint-disable-next-line no-self-compare\n || inLow != inLow\n // eslint-disable-next-line no-self-compare\n || inHigh != inHigh\n // eslint-disable-next-line no-self-compare\n || outLow != outLow\n // eslint-disable-next-line no-self-compare\n || outHigh != outHigh\n ) return NaN;\n if (x === Infinity || x === -Infinity) return x;\n return (x - inLow) * (outHigh - outLow) / (inHigh - inLow) + outLow;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWF0aC1zY2FsZS5qcz9lOWQyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIxMjkuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBodHRwczovL3J3YWxkcm9uLmdpdGh1Yi5pby9wcm9wb3NhbC1tYXRoLWV4dGVuc2lvbnMvXG5tb2R1bGUuZXhwb3J0cyA9IE1hdGguc2NhbGUgfHwgZnVuY3Rpb24gc2NhbGUoeCwgaW5Mb3csIGluSGlnaCwgb3V0TG93LCBvdXRIaWdoKSB7XG4gIGlmIChcbiAgICBhcmd1bWVudHMubGVuZ3RoID09PSAwXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICB8fCB4ICE9IHhcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICAgIHx8IGluTG93ICE9IGluTG93XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICB8fCBpbkhpZ2ggIT0gaW5IaWdoXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICB8fCBvdXRMb3cgIT0gb3V0TG93XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICB8fCBvdXRIaWdoICE9IG91dEhpZ2hcbiAgKSByZXR1cm4gTmFOO1xuICBpZiAoeCA9PT0gSW5maW5pdHkgfHwgeCA9PT0gLUluZmluaXR5KSByZXR1cm4geDtcbiAgcmV0dXJuICh4IC0gaW5Mb3cpICogKG91dEhpZ2ggLSBvdXRMb3cpIC8gKGluSGlnaCAtIGluTG93KSArIG91dExvdztcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///129\n")},function(e,n,t){t(131),e.exports=t(333)},function(module,exports,__webpack_require__){"use strict";eval('/* WEBPACK VAR INJECTION */(function(global) {\n\n__webpack_require__(132);\n\n__webpack_require__(329);\n\n__webpack_require__(330);\n\nif (global._babelPolyfill) {\n throw new Error("only one instance of babel-polyfill is allowed");\n}\nglobal._babelPolyfill = true;\n\nvar DEFINE_PROPERTY = "defineProperty";\nfunction define(O, key, value) {\n O[key] || Object[DEFINE_PROPERTY](O, key, {\n writable: true,\n configurable: true,\n value: value\n });\n}\n\ndefine(String.prototype, "padLeft", "".padStart);\ndefine(String.prototype, "padRight", "".padEnd);\n\n"pop,reverse,shift,keys,values,entries,indexOf,every,some,forEach,map,filter,find,findIndex,includes,join,slice,concat,push,splice,unshift,sort,lastIndexOf,reduce,reduceRight,copyWithin,fill".split(",").forEach(function (key) {\n [][key] && define(Array, key, Function.call.bind([][key]));\n});\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(93)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL2xpYi9pbmRleC5qcz9kYjRkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDhDQUFhOztBQUViLG1CQUFPLENBQUMsR0FBYzs7QUFFdEIsbUJBQU8sQ0FBQyxHQUE2Qjs7QUFFckMsbUJBQU8sQ0FBQyxHQUEwQjs7QUFFbEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLENBQUMsRSIsImZpbGUiOiIxMzEuanMiLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxucmVxdWlyZShcImNvcmUtanMvc2hpbVwiKTtcblxucmVxdWlyZShcInJlZ2VuZXJhdG9yLXJ1bnRpbWUvcnVudGltZVwiKTtcblxucmVxdWlyZShcImNvcmUtanMvZm4vcmVnZXhwL2VzY2FwZVwiKTtcblxuaWYgKGdsb2JhbC5fYmFiZWxQb2x5ZmlsbCkge1xuICB0aHJvdyBuZXcgRXJyb3IoXCJvbmx5IG9uZSBpbnN0YW5jZSBvZiBiYWJlbC1wb2x5ZmlsbCBpcyBhbGxvd2VkXCIpO1xufVxuZ2xvYmFsLl9iYWJlbFBvbHlmaWxsID0gdHJ1ZTtcblxudmFyIERFRklORV9QUk9QRVJUWSA9IFwiZGVmaW5lUHJvcGVydHlcIjtcbmZ1bmN0aW9uIGRlZmluZShPLCBrZXksIHZhbHVlKSB7XG4gIE9ba2V5XSB8fCBPYmplY3RbREVGSU5FX1BST1BFUlRZXShPLCBrZXksIHtcbiAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgdmFsdWU6IHZhbHVlXG4gIH0pO1xufVxuXG5kZWZpbmUoU3RyaW5nLnByb3RvdHlwZSwgXCJwYWRMZWZ0XCIsIFwiXCIucGFkU3RhcnQpO1xuZGVmaW5lKFN0cmluZy5wcm90b3R5cGUsIFwicGFkUmlnaHRcIiwgXCJcIi5wYWRFbmQpO1xuXG5cInBvcCxyZXZlcnNlLHNoaWZ0LGtleXMsdmFsdWVzLGVudHJpZXMsaW5kZXhPZixldmVyeSxzb21lLGZvckVhY2gsbWFwLGZpbHRlcixmaW5kLGZpbmRJbmRleCxpbmNsdWRlcyxqb2luLHNsaWNlLGNvbmNhdCxwdXNoLHNwbGljZSx1bnNoaWZ0LHNvcnQsbGFzdEluZGV4T2YscmVkdWNlLHJlZHVjZVJpZ2h0LGNvcHlXaXRoaW4sZmlsbFwiLnNwbGl0KFwiLFwiKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgW11ba2V5XSAmJiBkZWZpbmUoQXJyYXksIGtleSwgRnVuY3Rpb24uY2FsbC5iaW5kKFtdW2tleV0pKTtcbn0pOyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///131\n')},function(module,exports,__webpack_require__){eval("__webpack_require__(133);\n__webpack_require__(136);\n__webpack_require__(137);\n__webpack_require__(138);\n__webpack_require__(139);\n__webpack_require__(140);\n__webpack_require__(141);\n__webpack_require__(142);\n__webpack_require__(143);\n__webpack_require__(144);\n__webpack_require__(145);\n__webpack_require__(146);\n__webpack_require__(147);\n__webpack_require__(148);\n__webpack_require__(149);\n__webpack_require__(150);\n__webpack_require__(151);\n__webpack_require__(152);\n__webpack_require__(153);\n__webpack_require__(154);\n__webpack_require__(155);\n__webpack_require__(156);\n__webpack_require__(157);\n__webpack_require__(158);\n__webpack_require__(159);\n__webpack_require__(160);\n__webpack_require__(161);\n__webpack_require__(162);\n__webpack_require__(163);\n__webpack_require__(164);\n__webpack_require__(165);\n__webpack_require__(166);\n__webpack_require__(167);\n__webpack_require__(168);\n__webpack_require__(169);\n__webpack_require__(170);\n__webpack_require__(171);\n__webpack_require__(172);\n__webpack_require__(173);\n__webpack_require__(174);\n__webpack_require__(175);\n__webpack_require__(176);\n__webpack_require__(177);\n__webpack_require__(178);\n__webpack_require__(179);\n__webpack_require__(180);\n__webpack_require__(181);\n__webpack_require__(182);\n__webpack_require__(183);\n__webpack_require__(184);\n__webpack_require__(185);\n__webpack_require__(186);\n__webpack_require__(187);\n__webpack_require__(188);\n__webpack_require__(189);\n__webpack_require__(190);\n__webpack_require__(191);\n__webpack_require__(192);\n__webpack_require__(193);\n__webpack_require__(194);\n__webpack_require__(195);\n__webpack_require__(196);\n__webpack_require__(197);\n__webpack_require__(198);\n__webpack_require__(199);\n__webpack_require__(200);\n__webpack_require__(201);\n__webpack_require__(202);\n__webpack_require__(203);\n__webpack_require__(204);\n__webpack_require__(205);\n__webpack_require__(206);\n__webpack_require__(207);\n__webpack_require__(208);\n__webpack_require__(209);\n__webpack_require__(210);\n__webpack_require__(211);\n__webpack_require__(213);\n__webpack_require__(214);\n__webpack_require__(216);\n__webpack_require__(217);\n__webpack_require__(218);\n__webpack_require__(219);\n__webpack_require__(220);\n__webpack_require__(221);\n__webpack_require__(222);\n__webpack_require__(224);\n__webpack_require__(225);\n__webpack_require__(226);\n__webpack_require__(227);\n__webpack_require__(228);\n__webpack_require__(229);\n__webpack_require__(230);\n__webpack_require__(231);\n__webpack_require__(232);\n__webpack_require__(233);\n__webpack_require__(234);\n__webpack_require__(235);\n__webpack_require__(236);\n__webpack_require__(86);\n__webpack_require__(237);\n__webpack_require__(113);\n__webpack_require__(238);\n__webpack_require__(114);\n__webpack_require__(239);\n__webpack_require__(240);\n__webpack_require__(241);\n__webpack_require__(242);\n__webpack_require__(243);\n__webpack_require__(117);\n__webpack_require__(119);\n__webpack_require__(120);\n__webpack_require__(244);\n__webpack_require__(245);\n__webpack_require__(246);\n__webpack_require__(247);\n__webpack_require__(248);\n__webpack_require__(249);\n__webpack_require__(250);\n__webpack_require__(251);\n__webpack_require__(252);\n__webpack_require__(253);\n__webpack_require__(254);\n__webpack_require__(255);\n__webpack_require__(256);\n__webpack_require__(257);\n__webpack_require__(258);\n__webpack_require__(259);\n__webpack_require__(260);\n__webpack_require__(261);\n__webpack_require__(262);\n__webpack_require__(263);\n__webpack_require__(264);\n__webpack_require__(265);\n__webpack_require__(266);\n__webpack_require__(267);\n__webpack_require__(268);\n__webpack_require__(269);\n__webpack_require__(270);\n__webpack_require__(271);\n__webpack_require__(272);\n__webpack_require__(273);\n__webpack_require__(274);\n__webpack_require__(275);\n__webpack_require__(276);\n__webpack_require__(277);\n__webpack_require__(278);\n__webpack_require__(279);\n__webpack_require__(280);\n__webpack_require__(281);\n__webpack_require__(282);\n__webpack_require__(283);\n__webpack_require__(284);\n__webpack_require__(285);\n__webpack_require__(286);\n__webpack_require__(287);\n__webpack_require__(288);\n__webpack_require__(289);\n__webpack_require__(290);\n__webpack_require__(291);\n__webpack_require__(292);\n__webpack_require__(293);\n__webpack_require__(294);\n__webpack_require__(295);\n__webpack_require__(296);\n__webpack_require__(297);\n__webpack_require__(298);\n__webpack_require__(299);\n__webpack_require__(300);\n__webpack_require__(301);\n__webpack_require__(302);\n__webpack_require__(303);\n__webpack_require__(304);\n__webpack_require__(305);\n__webpack_require__(306);\n__webpack_require__(307);\n__webpack_require__(308);\n__webpack_require__(309);\n__webpack_require__(310);\n__webpack_require__(311);\n__webpack_require__(312);\n__webpack_require__(313);\n__webpack_require__(314);\n__webpack_require__(315);\n__webpack_require__(316);\n__webpack_require__(317);\n__webpack_require__(318);\n__webpack_require__(319);\n__webpack_require__(320);\n__webpack_require__(321);\n__webpack_require__(322);\n__webpack_require__(323);\n__webpack_require__(324);\n__webpack_require__(325);\n__webpack_require__(326);\n__webpack_require__(327);\n__webpack_require__(328);\nmodule.exports = __webpack_require__(18);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvc2hpbS5qcz82NmY5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLG1CQUFPLENBQUMsR0FBc0I7QUFDOUIsbUJBQU8sQ0FBQyxHQUE2QjtBQUNyQyxtQkFBTyxDQUFDLEdBQXNDO0FBQzlDLG1CQUFPLENBQUMsR0FBd0M7QUFDaEQsbUJBQU8sQ0FBQyxHQUFrRDtBQUMxRCxtQkFBTyxDQUFDLEdBQXVDO0FBQy9DLG1CQUFPLENBQUMsR0FBMkI7QUFDbkMsbUJBQU8sQ0FBQyxHQUE2QztBQUNyRCxtQkFBTyxDQUFDLEdBQTZCO0FBQ3JDLG1CQUFPLENBQUMsR0FBMkI7QUFDbkMsbUJBQU8sQ0FBQyxHQUF5QztBQUNqRCxtQkFBTyxDQUFDLEdBQWdDO0FBQ3hDLG1CQUFPLENBQUMsR0FBZ0M7QUFDeEMsbUJBQU8sQ0FBQyxHQUFvQztBQUM1QyxtQkFBTyxDQUFDLEdBQTZCO0FBQ3JDLG1CQUFPLENBQUMsR0FBeUI7QUFDakMsbUJBQU8sQ0FBQyxHQUF1QztBQUMvQyxtQkFBTyxDQUFDLEdBQWdDO0FBQ3hDLG1CQUFPLENBQUMsR0FBNkI7QUFDckMsbUJBQU8sQ0FBQyxHQUE2QjtBQUNyQyxtQkFBTyxDQUFDLEdBQXFDO0FBQzdDLG1CQUFPLENBQUMsR0FBeUI7QUFDakMsbUJBQU8sQ0FBQyxHQUEyQjtBQUNuQyxtQkFBTyxDQUFDLEdBQWtDO0FBQzFDLG1CQUFPLENBQUMsR0FBK0I7QUFDdkMsbUJBQU8sQ0FBQyxHQUFtQztBQUMzQyxtQkFBTyxDQUFDLEdBQThCO0FBQ3RDLG1CQUFPLENBQUMsR0FBZ0M7QUFDeEMsbUJBQU8sQ0FBQyxHQUFpQztBQUN6QyxtQkFBTyxDQUFDLEdBQTZCO0FBQ3JDLG1CQUFPLENBQUMsR0FBc0M7QUFDOUMsbUJBQU8sQ0FBQyxHQUF1QztBQUMvQyxtQkFBTyxDQUFDLEdBQXVDO0FBQy9DLG1CQUFPLENBQUMsR0FBa0M7QUFDMUMsbUJBQU8sQ0FBQyxH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QkFBTyxDQUFDLEdBQWdDO0FBQ3hDLG1CQUFPLENBQUMsR0FBb0I7QUFDNUIsbUJBQU8sQ0FBQyxHQUEwQjtBQUNsQyxtQkFBTyxDQUFDLEdBQXNCO0FBQzlCLG1CQUFPLENBQUMsR0FBeUI7QUFDakMsbUJBQU8sQ0FBQyxHQUE0QjtBQUNwQyxpQkFBaUIsbUJBQU8sQ0FBQyxFQUFpQiIsImZpbGUiOiIxMzIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJyZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN5bWJvbCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuY3JlYXRlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5kZWZpbmUtcHJvcGVydHknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmRlZmluZS1wcm9wZXJ0aWVzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmdldC1wcm90b3R5cGUtb2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmtleXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmdldC1vd24tcHJvcGVydHktbmFtZXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmZyZWV6ZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3Quc2VhbCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QucHJldmVudC1leHRlbnNpb25zJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5pcy1mcm96ZW4nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmlzLXNlYWxlZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuaXMtZXh0ZW5zaWJsZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuYXNzaWduJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5pcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3Quc2V0LXByb3RvdHlwZS1vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QudG8tc3RyaW5nJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmZ1bmN0aW9uLmJpbmQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuZnVuY3Rpb24ubmFtZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5mdW5jdGlvbi5oYXMtaW5zdGFuY2UnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucGFyc2UtaW50Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnBhcnNlLWZsb2F0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5jb25zdHJ1Y3RvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIudG8tZml4ZWQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLnRvLXByZWNpc2lvbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIuZXBzaWxvbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIuaXMtZmluaXRlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5pcy1pbnRlZ2VyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5pcy1uYW4nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLmlzLXNhZmUtaW50ZWdlcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIubWF4LXNhZmUtaW50ZWdlcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIubWluLXNhZmUtaW50ZWdlcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIucGFyc2UtZmxvYXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLnBhcnNlLWludCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmFjb3NoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguYXNpbmgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5hdGFuaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmNicnQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5jbHozMicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmNvc2gnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5leHBtMScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmZyb3VuZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmh5cG90Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguaW11bCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmxvZzEwJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGgubG9nMXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5sb2cyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguc2lnbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLnNpbmgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC50YW5oJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGgudHJ1bmMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLmZyb20tY29kZS1wb2ludCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcucmF3Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy50cmltJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuY29kZS1wb2ludC1hdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuZW5kcy13aXRoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5pbmNsdWRlcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcucmVwZWF0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5zdGFydHMtd2l0aCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuYW5jaG9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5iaWcnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLmJsaW5rJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5ib2xkJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5maXhlZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuZm9udGNvbG9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5mb250c2l6ZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuaXRhbGljcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcubGluaycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuc21hbGwnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLnN0cmlrZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuc3ViJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5zdXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuZGF0ZS5ub3cnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuZGF0ZS50by1qc29uJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmRhdGUudG8taXNvLXN0cmluZycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5kYXRlLnRvLXN0cmluZycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5kYXRlLnRvLXByaW1pdGl2ZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5pcy1hcnJheScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5mcm9tJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5Lm9mJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmpvaW4nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuc2xpY2UnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuc29ydCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5mb3ItZWFjaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5tYXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuZmlsdGVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LnNvbWUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuZXZlcnknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkucmVkdWNlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LnJlZHVjZS1yaWdodCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5pbmRleC1vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5sYXN0LWluZGV4LW9mJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmNvcHktd2l0aGluJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmZpbGwnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuZmluZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5maW5kLWluZGV4Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LnNwZWNpZXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVnZXhwLmNvbnN0cnVjdG9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZ2V4cC5leGVjJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZ2V4cC50by1zdHJpbmcnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVnZXhwLmZsYWdzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZ2V4cC5tYXRjaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWdleHAucmVwbGFjZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWdleHAuc2VhcmNoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZ2V4cC5zcGxpdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5wcm9taXNlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hcCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zZXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYud2Vhay1tYXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYud2Vhay1zZXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQuYXJyYXktYnVmZmVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLmRhdGEtdmlldycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi50eXBlZC5pbnQ4LWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLnVpbnQ4LWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLnVpbnQ4LWNsYW1wZWQtYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQuaW50MTYtYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQudWludDE2LWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLmludDMyLWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLnVpbnQzMi1hcnJheScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi50eXBlZC5mbG9hdDMyLWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLmZsb2F0NjQtYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5hcHBseScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmNvbnN0cnVjdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmRlZmluZS1wcm9wZXJ0eScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmRlbGV0ZS1wcm9wZXJ0eScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmVudW1lcmF0ZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmdldCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmdldC1wcm90b3R5cGUtb2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5oYXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5pcy1leHRlbnNpYmxlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3Qub3duLWtleXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5wcmV2ZW50LWV4dGVuc2lvbnMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5zZXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5zZXQtcHJvdG90eXBlLW9mJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LmFycmF5LmluY2x1ZGVzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LmFycmF5LmZsYXQtbWFwJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LmFycmF5LmZsYXR0ZW4nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc3RyaW5nLmF0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnN0cmluZy5wYWQtc3RhcnQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc3RyaW5nLnBhZC1lbmQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc3RyaW5nLnRyaW0tbGVmdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zdHJpbmcudHJpbS1yaWdodCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zdHJpbmcubWF0Y2gtYWxsJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnN5bWJvbC5hc3luYy1pdGVyYXRvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zeW1ib2wub2JzZXJ2YWJsZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9ycycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5vYmplY3QudmFsdWVzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC5lbnRyaWVzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC5kZWZpbmUtZ2V0dGVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC5kZWZpbmUtc2V0dGVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC5sb29rdXAtZ2V0dGVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC5sb29rdXAtc2V0dGVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hcC50by1qc29uJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnNldC50by1qc29uJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hcC5vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zZXQub2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcud2Vhay1tYXAub2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcud2Vhay1zZXQub2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWFwLmZyb20nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc2V0LmZyb20nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcud2Vhay1tYXAuZnJvbScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy53ZWFrLXNldC5mcm9tJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lmdsb2JhbCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zeXN0ZW0uZ2xvYmFsJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LmVycm9yLmlzLWVycm9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGguY2xhbXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5kZWctcGVyLXJhZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLmRlZ3JlZXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5mc2NhbGUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5pYWRkaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLmlzdWJoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGguaW11bGgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5yYWQtcGVyLWRlZycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLnJhZGlhbnMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5zY2FsZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLnVtdWxoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGguc2lnbmJpdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5wcm9taXNlLmZpbmFsbHknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucHJvbWlzZS50cnknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5kZWZpbmUtbWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5kZWxldGUtbWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtbWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtbWV0YWRhdGEta2V5cycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5yZWZsZWN0LmdldC1vd24tbWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtb3duLW1ldGFkYXRhLWtleXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5oYXMtbWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5oYXMtb3duLW1ldGFkYXRhJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnJlZmxlY3QubWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuYXNhcCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5vYnNlcnZhYmxlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvd2ViLnRpbWVycycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL3dlYi5pbW1lZGlhdGUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy93ZWIuZG9tLml0ZXJhYmxlJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vbW9kdWxlcy9fY29yZScpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///132\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// ECMAScript 6 symbols shim\nvar global = __webpack_require__(2);\nvar has = __webpack_require__(14);\nvar DESCRIPTORS = __webpack_require__(7);\nvar $export = __webpack_require__(0);\nvar redefine = __webpack_require__(12);\nvar META = __webpack_require__(30).KEY;\nvar $fails = __webpack_require__(3);\nvar shared = __webpack_require__(47);\nvar setToStringTag = __webpack_require__(43);\nvar uid = __webpack_require__(33);\nvar wks = __webpack_require__(5);\nvar wksExt = __webpack_require__(95);\nvar wksDefine = __webpack_require__(67);\nvar enumKeys = __webpack_require__(135);\nvar isArray = __webpack_require__(54);\nvar anObject = __webpack_require__(1);\nvar isObject = __webpack_require__(4);\nvar toObject = __webpack_require__(9);\nvar toIObject = __webpack_require__(15);\nvar toPrimitive = __webpack_require__(23);\nvar createDesc = __webpack_require__(32);\nvar _create = __webpack_require__(36);\nvar gOPNExt = __webpack_require__(98);\nvar $GOPD = __webpack_require__(16);\nvar $GOPS = __webpack_require__(53);\nvar $DP = __webpack_require__(8);\nvar $keys = __webpack_require__(34);\nvar gOPD = $GOPD.f;\nvar dP = $DP.f;\nvar gOPN = gOPNExt.f;\nvar $Symbol = global.Symbol;\nvar $JSON = global.JSON;\nvar _stringify = $JSON && $JSON.stringify;\nvar PROTOTYPE = 'prototype';\nvar HIDDEN = wks('_hidden');\nvar TO_PRIMITIVE = wks('toPrimitive');\nvar isEnum = {}.propertyIsEnumerable;\nvar SymbolRegistry = shared('symbol-registry');\nvar AllSymbols = shared('symbols');\nvar OPSymbols = shared('op-symbols');\nvar ObjectProto = Object[PROTOTYPE];\nvar USE_NATIVE = typeof $Symbol == 'function' && !!$GOPS.f;\nvar QObject = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDesc = DESCRIPTORS && $fails(function () {\n return _create(dP({}, 'a', {\n get: function () { return dP(this, 'a', { value: 7 }).a; }\n })).a != 7;\n}) ? function (it, key, D) {\n var protoDesc = gOPD(ObjectProto, key);\n if (protoDesc) delete ObjectProto[key];\n dP(it, key, D);\n if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc);\n} : dP;\n\nvar wrap = function (tag) {\n var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);\n sym._k = tag;\n return sym;\n};\n\nvar isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n return it instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(it, key, D) {\n if (it === ObjectProto) $defineProperty(OPSymbols, key, D);\n anObject(it);\n key = toPrimitive(key, true);\n anObject(D);\n if (has(AllSymbols, key)) {\n if (!D.enumerable) {\n if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {}));\n it[HIDDEN][key] = true;\n } else {\n if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;\n D = _create(D, { enumerable: createDesc(0, false) });\n } return setSymbolDesc(it, key, D);\n } return dP(it, key, D);\n};\nvar $defineProperties = function defineProperties(it, P) {\n anObject(it);\n var keys = enumKeys(P = toIObject(P));\n var i = 0;\n var l = keys.length;\n var key;\n while (l > i) $defineProperty(it, key = keys[i++], P[key]);\n return it;\n};\nvar $create = function create(it, P) {\n return P === undefined ? _create(it) : $defineProperties(_create(it), P);\n};\nvar $propertyIsEnumerable = function propertyIsEnumerable(key) {\n var E = isEnum.call(this, key = toPrimitive(key, true));\n if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false;\n return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;\n};\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {\n it = toIObject(it);\n key = toPrimitive(key, true);\n if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return;\n var D = gOPD(it, key);\n if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;\n return D;\n};\nvar $getOwnPropertyNames = function getOwnPropertyNames(it) {\n var names = gOPN(toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);\n } return result;\n};\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(it) {\n var IS_OP = it === ObjectProto;\n var names = gOPN(IS_OP ? OPSymbols : toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]);\n } return result;\n};\n\n// 19.4.1.1 Symbol([description])\nif (!USE_NATIVE) {\n $Symbol = function Symbol() {\n if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');\n var tag = uid(arguments.length > 0 ? arguments[0] : undefined);\n var $set = function (value) {\n if (this === ObjectProto) $set.call(OPSymbols, value);\n if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n setSymbolDesc(this, tag, createDesc(1, value));\n };\n if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set });\n return wrap(tag);\n };\n redefine($Symbol[PROTOTYPE], 'toString', function toString() {\n return this._k;\n });\n\n $GOPD.f = $getOwnPropertyDescriptor;\n $DP.f = $defineProperty;\n __webpack_require__(37).f = gOPNExt.f = $getOwnPropertyNames;\n __webpack_require__(49).f = $propertyIsEnumerable;\n $GOPS.f = $getOwnPropertySymbols;\n\n if (DESCRIPTORS && !__webpack_require__(29)) {\n redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);\n }\n\n wksExt.f = function (name) {\n return wrap(wks(name));\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol });\n\nfor (var es6Symbols = (\n // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14\n 'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'\n).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]);\n\nfor (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]);\n\n$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {\n // 19.4.2.1 Symbol.for(key)\n 'for': function (key) {\n return has(SymbolRegistry, key += '')\n ? SymbolRegistry[key]\n : SymbolRegistry[key] = $Symbol(key);\n },\n // 19.4.2.5 Symbol.keyFor(sym)\n keyFor: function keyFor(sym) {\n if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');\n for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key;\n },\n useSetter: function () { setter = true; },\n useSimple: function () { setter = false; }\n});\n\n$export($export.S + $export.F * !USE_NATIVE, 'Object', {\n // 19.1.2.2 Object.create(O [, Properties])\n create: $create,\n // 19.1.2.4 Object.defineProperty(O, P, Attributes)\n defineProperty: $defineProperty,\n // 19.1.2.3 Object.defineProperties(O, Properties)\n defineProperties: $defineProperties,\n // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n // 19.1.2.7 Object.getOwnPropertyNames(O)\n getOwnPropertyNames: $getOwnPropertyNames,\n // 19.1.2.8 Object.getOwnPropertySymbols(O)\n getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// Chrome 38 and 39 `Object.getOwnPropertySymbols` fails on primitives\n// https://bugs.chromium.org/p/v8/issues/detail?id=3443\nvar FAILS_ON_PRIMITIVES = $fails(function () { $GOPS.f(1); });\n\n$export($export.S + $export.F * FAILS_ON_PRIMITIVES, 'Object', {\n getOwnPropertySymbols: function getOwnPropertySymbols(it) {\n return $GOPS.f(toObject(it));\n }\n});\n\n// 24.3.2 JSON.stringify(value [, replacer [, space]])\n$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () {\n var S = $Symbol();\n // MS Edge converts symbol values to JSON as {}\n // WebKit converts symbol values to JSON as null\n // V8 throws on boxed symbols\n return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}';\n})), 'JSON', {\n stringify: function stringify(it) {\n var args = [it];\n var i = 1;\n var replacer, $replacer;\n while (arguments.length > i) args.push(arguments[i++]);\n $replacer = replacer = args[1];\n if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n if (!isArray(replacer)) replacer = function (key, value) {\n if (typeof $replacer == 'function') value = $replacer.call(this, key, value);\n if (!isSymbol(value)) return value;\n };\n args[1] = replacer;\n return _stringify.apply($JSON, args);\n }\n});\n\n// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)\n$Symbol[PROTOTYPE][TO_PRIMITIVE] || __webpack_require__(11)($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n// 19.4.3.5 Symbol.prototype[@@toStringTag]\nsetToStringTag($Symbol, 'Symbol');\n// 20.2.1.9 Math[@@toStringTag]\nsetToStringTag(Math, 'Math', true);\n// 24.3.3 JSON[@@toStringTag]\nsetToStringTag(global.JSON, 'JSON', true);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3ltYm9sLmpzPzhhODEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBLGFBQWEsbUJBQU8sQ0FBQyxDQUFXO0FBQ2hDLFVBQVUsbUJBQU8sQ0FBQyxFQUFRO0FBQzFCLGtCQUFrQixtQkFBTyxDQUFDLENBQWdCO0FBQzFDLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyxFQUFhO0FBQ3BDLFdBQVcsbUJBQU8sQ0FBQyxFQUFTO0FBQzVCLGFBQWEsbUJBQU8sQ0FBQyxDQUFVO0FBQy9CLGFBQWEsbUJBQU8sQ0FBQyxFQUFXO0FBQ2hDLHFCQUFxQixtQkFBTyxDQUFDLEVBQXNCO0FBQ25ELFVBQVUsbUJBQU8sQ0FBQyxFQUFRO0FBQzFCLFVBQVUsbUJBQU8sQ0FBQyxDQUFRO0FBQzFCLGFBQWEsbUJBQU8sQ0FBQyxFQUFZO0FBQ2pDLGdCQUFnQixtQkFBTyxDQUFDLEVBQWU7QUFDdkMsZUFBZSxtQkFBTyxDQUFDLEdBQWM7QUFDckMsY0FBYyxtQkFBTyxDQUFDLEVBQWE7QUFDbkMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2QyxrQkFBa0IsbUJBQU8sQ0FBQyxFQUFpQjtBQUMzQyxpQkFBaUIsbUJBQU8sQ0FBQyxFQUFrQjtBQUMzQyxjQUFjLG1CQUFPLENBQUMsRUFBa0I7QUFDeEMsY0FBYyxtQkFBTyxDQUFDLEVBQW9CO0FBQzFDLFlBQVksbUJBQU8sQ0FBQyxFQUFnQjtBQUNwQyxZQUFZLG1CQUFPLENBQUMsRUFBZ0I7QUFDcEMsVUFBVSxtQkFBTyxDQUFDLENBQWM7QUFDaEMsWUFBWSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxzQkFBc0I7QUFDdEIsc0JBQXNCLHVCQUF1QixXQUFXLElBQUk7QUFDNUQsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyREFBMkQ7QUFDM0Q7QUFDQSxLQUFLO0FBQ0w7QUFDQSxzQkFBc0IsbUNBQW1DO0FBQ3pELEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdFQUFnRSxnQ0FBZ0M7QUFDaEc7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxFQUFFLG1CQUFPLENBQUMsRUFBZ0I7QUFDMUIsRUFBRSxtQkFBTyxDQUFDLEVBQWU7QUFDekI7O0FBRUEsc0JBQXNCLG1CQUFPLENBQUMsRUFBWTtBQUMxQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDBEQUEwRCxrQkFBa0I7O0FBRTVFO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQix1QkFBdUI7O0FBRTNDLG9EQUFvRCw2QkFBNkI7O0FBRWpGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCwwQkFBMEIsZUFBZSxFQUFFO0FBQzNDLDBCQUEwQixnQkFBZ0I7QUFDMUMsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBLDhDQUE4QyxZQUFZLEVBQUU7O0FBRTVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvREFBb0QsT0FBTyxRQUFRLGlDQUFpQztBQUNwRyxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0VBQXdFO0FBQ3hFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBLG9DQUFvQyxtQkFBTyxDQUFDLEVBQVM7QUFDckQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjEzMy5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIEVDTUFTY3JpcHQgNiBzeW1ib2xzIHNoaW1cbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUnKTtcbnZhciBNRVRBID0gcmVxdWlyZSgnLi9fbWV0YScpLktFWTtcbnZhciAkZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4vX3NoYXJlZCcpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuL191aWQnKTtcbnZhciB3a3MgPSByZXF1aXJlKCcuL193a3MnKTtcbnZhciB3a3NFeHQgPSByZXF1aXJlKCcuL193a3MtZXh0Jyk7XG52YXIgd2tzRGVmaW5lID0gcmVxdWlyZSgnLi9fd2tzLWRlZmluZScpO1xudmFyIGVudW1LZXlzID0gcmVxdWlyZSgnLi9fZW51bS1rZXlzJyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4vX2lzLWFycmF5Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG52YXIgY3JlYXRlRGVzYyA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKTtcbnZhciBfY3JlYXRlID0gcmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpO1xudmFyIGdPUE5FeHQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wbi1leHQnKTtcbnZhciAkR09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJyk7XG52YXIgJEdPUFMgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wcycpO1xudmFyICREUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xudmFyICRrZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcbnZhciBnT1BEID0gJEdPUEQuZjtcbnZhciBkUCA9ICREUC5mO1xudmFyIGdPUE4gPSBnT1BORXh0LmY7XG52YXIgJFN5bWJvbCA9IGdsb2JhbC5TeW1ib2w7XG52YXIgJEpTT04gPSBnbG9iYWwuSlNPTjtcbnZhciBfc3RyaW5naWZ5ID0gJEpTT04gJiYgJEpTT04uc3RyaW5naWZ5O1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xudmFyIEhJRERFTiA9IHdrcygnX2hpZGRlbicpO1xudmFyIFRPX1BSSU1JVElWRSA9IHdrcygndG9QcmltaXRpdmUnKTtcbnZhciBpc0VudW0gPSB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbnZhciBTeW1ib2xSZWdpc3RyeSA9IHNoYXJlZCgnc3ltYm9sLXJlZ2lzdHJ5Jyk7XG52YXIgQWxsU3ltYm9scyA9IHNoYXJlZCgnc3ltYm9scycpO1xudmFyIE9QU3ltYm9scyA9IHNoYXJlZCgnb3Atc3ltYm9scycpO1xudmFyIE9iamVjdFByb3RvID0gT2JqZWN0W1BST1RPVFlQRV07XG52YXIgVVNFX05BVElWRSA9IHR5cGVvZiAkU3ltYm9sID09ICdmdW5jdGlvbicgJiYgISEkR09QUy5mO1xudmFyIFFPYmplY3QgPSBnbG9iYWwuUU9iamVjdDtcbi8vIERvbid0IHVzZSBzZXR0ZXJzIGluIFF0IFNjcmlwdCwgaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzE3M1xudmFyIHNldHRlciA9ICFRT2JqZWN0IHx8ICFRT2JqZWN0W1BST1RPVFlQRV0gfHwgIVFPYmplY3RbUFJPVE9UWVBFXS5maW5kQ2hpbGQ7XG5cbi8vIGZhbGxiYWNrIGZvciBvbGQgQW5kcm9pZCwgaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTY4N1xudmFyIHNldFN5bWJvbERlc2MgPSBERVNDUklQVE9SUyAmJiAkZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gX2NyZWF0ZShkUCh7fSwgJ2EnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBkUCh0aGlzLCAnYScsIHsgdmFsdWU6IDcgfSkuYTsgfVxuICB9KSkuYSAhPSA3O1xufSkgPyBmdW5jdGlvbiAoaXQsIGtleSwgRCkge1xuICB2YXIgcHJvdG9EZXNjID0gZ09QRChPYmplY3RQcm90bywga2V5KTtcbiAgaWYgKHByb3RvRGVzYykgZGVsZXRlIE9iamVjdFByb3RvW2tleV07XG4gIGRQKGl0LCBrZXksIEQpO1xuICBpZiAocHJvdG9EZXNjICYmIGl0ICE9PSBPYmplY3RQcm90bykgZFAoT2JqZWN0UHJvdG8sIGtleSwgcHJvdG9EZXNjKTtcbn0gOiBkUDtcblxudmFyIHdyYXAgPSBmdW5jdGlvbiAodGFnKSB7XG4gIHZhciBzeW0gPSBBbGxTeW1ib2xzW3RhZ10gPSBfY3JlYXRlKCRTeW1ib2xbUFJPVE9UWVBFXSk7XG4gIHN5bS5fayA9IHRhZztcbiAgcmV0dXJuIHN5bTtcbn07XG5cbnZhciBpc1N5bWJvbCA9IFVTRV9OQVRJVkUgJiYgdHlwZW9mICRTeW1ib2wuaXRlcmF0b3IgPT0gJ3N5bWJvbCcgPyBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnc3ltYm9sJztcbn0gOiBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0IGluc3RhbmNlb2YgJFN5bWJvbDtcbn07XG5cbnZhciAkZGVmaW5lUHJvcGVydHkgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShpdCwga2V5LCBEKSB7XG4gIGlmIChpdCA9PT0gT2JqZWN0UHJvdG8pICRkZWZpbmVQcm9wZXJ0eShPUFN5bWJvbHMsIGtleSwgRCk7XG4gIGFuT2JqZWN0KGl0KTtcbiAga2V5ID0gdG9QcmltaXRpdmUoa2V5LCB0cnVlKTtcbiAgYW5PYmplY3QoRCk7XG4gIGlmIChoYXMoQWxsU3ltYm9scywga2V5KSkge1xuICAgIGlmICghRC5lbnVtZXJhYmxlKSB7XG4gICAgICBpZiAoIWhhcyhpdCwgSElEREVOKSkgZFAoaXQsIEhJRERFTiwgY3JlYXRlRGVzYygxLCB7fSkpO1xuICAgICAgaXRbSElEREVOXVtrZXldID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGhhcyhpdCwgSElEREVOKSAmJiBpdFtISURERU5dW2tleV0pIGl0W0hJRERFTl1ba2V5XSA9IGZhbHNlO1xuICAgICAgRCA9IF9jcmVhdGUoRCwgeyBlbnVtZXJhYmxlOiBjcmVhdGVEZXNjKDAsIGZhbHNlKSB9KTtcbiAgICB9IHJldHVybiBzZXRTeW1ib2xEZXNjKGl0LCBrZXksIEQpO1xuICB9IHJldHVybiBkUChpdCwga2V5LCBEKTtcbn07XG52YXIgJGRlZmluZVByb3BlcnRpZXMgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKGl0LCBQKSB7XG4gIGFuT2JqZWN0KGl0KTtcbiAgdmFyIGtleXMgPSBlbnVtS2V5cyhQID0gdG9JT2JqZWN0KFApKTtcbiAgdmFyIGkgPSAwO1xuICB2YXIgbCA9IGtleXMubGVuZ3RoO1xuICB2YXIga2V5O1xuICB3aGlsZSAobCA+IGkpICRkZWZpbmVQcm9wZXJ0eShpdCwga2V5ID0ga2V5c1tpKytdLCBQW2tleV0pO1xuICByZXR1cm4gaXQ7XG59O1xudmFyICRjcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUoaXQsIFApIHtcbiAgcmV0dXJuIFAgPT09IHVuZGVmaW5lZCA/IF9jcmVhdGUoaXQpIDogJGRlZmluZVByb3BlcnRpZXMoX2NyZWF0ZShpdCksIFApO1xufTtcbnZhciAkcHJvcGVydHlJc0VudW1lcmFibGUgPSBmdW5jdGlvbiBwcm9wZXJ0eUlzRW51bWVyYWJsZShrZXkpIHtcbiAgdmFyIEUgPSBpc0VudW0uY2FsbCh0aGlzLCBrZXkgPSB0b1ByaW1pdGl2ZShrZXksIHRydWUpKTtcbiAgaWYgKHRoaXMgPT09IE9iamVjdFByb3RvICYmIGhhcyhBbGxTeW1ib2xzLCBrZXkpICYmICFoYXMoT1BTeW1ib2xzLCBrZXkpKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiBFIHx8ICFoYXModGhpcywga2V5KSB8fCAhaGFzKEFsbFN5bWJvbHMsIGtleSkgfHwgaGFzKHRoaXMsIEhJRERFTikgJiYgdGhpc1tISURERU5dW2tleV0gPyBFIDogdHJ1ZTtcbn07XG52YXIgJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihpdCwga2V5KSB7XG4gIGl0ID0gdG9JT2JqZWN0KGl0KTtcbiAga2V5ID0gdG9QcmltaXRpdmUoa2V5LCB0cnVlKTtcbiAgaWYgKGl0ID09PSBPYmplY3RQcm90byAmJiBoYXMoQWxsU3ltYm9scywga2V5KSAmJiAhaGFzKE9QU3ltYm9scywga2V5KSkgcmV0dXJuO1xuICB2YXIgRCA9IGdPUEQoaXQsIGtleSk7XG4gIGlmIChEICYmIGhhcyhBbGxTeW1ib2xzLCBrZXkpICYmICEoaGFzKGl0LCBISURERU4pICYmIGl0W0hJRERFTl1ba2V5XSkpIEQuZW51bWVyYWJsZSA9IHRydWU7XG4gIHJldHVybiBEO1xufTtcbnZhciAkZ2V0T3duUHJvcGVydHlOYW1lcyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoaXQpIHtcbiAgdmFyIG5hbWVzID0gZ09QTih0b0lPYmplY3QoaXQpKTtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIgaSA9IDA7XG4gIHZhciBrZXk7XG4gIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSB7XG4gICAgaWYgKCFoYXMoQWxsU3ltYm9scywga2V5ID0gbmFtZXNbaSsrXSkgJiYga2V5ICE9IEhJRERFTiAmJiBrZXkgIT0gTUVUQSkgcmVzdWx0LnB1c2goa2V5KTtcbiAgfSByZXR1cm4gcmVzdWx0O1xufTtcbnZhciAkZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlTeW1ib2xzKGl0KSB7XG4gIHZhciBJU19PUCA9IGl0ID09PSBPYmplY3RQcm90bztcbiAgdmFyIG5hbWVzID0gZ09QTihJU19PUCA/IE9QU3ltYm9scyA6IHRvSU9iamVjdChpdCkpO1xuICB2YXIgcmVzdWx0ID0gW107XG4gIHZhciBpID0gMDtcbiAgdmFyIGtleTtcbiAgd2hpbGUgKG5hbWVzLmxlbmd0aCA+IGkpIHtcbiAgICBpZiAoaGFzKEFsbFN5bWJvbHMsIGtleSA9IG5hbWVzW2krK10pICYmIChJU19PUCA/IGhhcyhPYmplY3RQcm90bywga2V5KSA6IHRydWUpKSByZXN1bHQucHVzaChBbGxTeW1ib2xzW2tleV0pO1xuICB9IHJldHVybiByZXN1bHQ7XG59O1xuXG4vLyAxOS40LjEuMSBTeW1ib2woW2Rlc2NyaXB0aW9uXSlcbmlmICghVVNFX05BVElWRSkge1xuICAkU3ltYm9sID0gZnVuY3Rpb24gU3ltYm9sKCkge1xuICAgIGlmICh0aGlzIGluc3RhbmNlb2YgJFN5bWJvbCkgdGhyb3cgVHlwZUVycm9yKCdTeW1ib2wgaXMgbm90IGEgY29uc3RydWN0b3IhJyk7XG4gICAgdmFyIHRhZyA9IHVpZChhcmd1bWVudHMubGVuZ3RoID4gMCA/IGFyZ3VtZW50c1swXSA6IHVuZGVmaW5lZCk7XG4gICAgdmFyICRzZXQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIGlmICh0aGlzID09PSBPYmplY3RQcm90bykgJHNldC5jYWxsKE9QU3ltYm9scywgdmFsdWUpO1xuICAgICAgaWYgKGhhcyh0aGlzLCBISURERU4pICYmIGhhcyh0aGlzW0hJRERFTl0sIHRhZykpIHRoaXNbSElEREVOXVt0YWddID0gZmFsc2U7XG4gICAgICBzZXRTeW1ib2xEZXNjKHRoaXMsIHRhZywgY3JlYXRlRGVzYygxLCB2YWx1ZSkpO1xuICAgIH07XG4gICAgaWYgKERFU0NSSVBUT1JTICYmIHNldHRlcikgc2V0U3ltYm9sRGVzYyhPYmplY3RQcm90bywgdGFnLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgc2V0OiAkc2V0IH0pO1xuICAgIHJldHVybiB3cmFwKHRhZyk7XG4gIH07XG4gIHJlZGVmaW5lKCRTeW1ib2xbUFJPVE9UWVBFXSwgJ3RvU3RyaW5nJywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2s7XG4gIH0pO1xuXG4gICRHT1BELmYgPSAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuICAkRFAuZiA9ICRkZWZpbmVQcm9wZXJ0eTtcbiAgcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4nKS5mID0gZ09QTkV4dC5mID0gJGdldE93blByb3BlcnR5TmFtZXM7XG4gIHJlcXVpcmUoJy4vX29iamVjdC1waWUnKS5mID0gJHByb3BlcnR5SXNFbnVtZXJhYmxlO1xuICAkR09QUy5mID0gJGdldE93blByb3BlcnR5U3ltYm9scztcblxuICBpZiAoREVTQ1JJUFRPUlMgJiYgIXJlcXVpcmUoJy4vX2xpYnJhcnknKSkge1xuICAgIHJlZGVmaW5lKE9iamVjdFByb3RvLCAncHJvcGVydHlJc0VudW1lcmFibGUnLCAkcHJvcGVydHlJc0VudW1lcmFibGUsIHRydWUpO1xuICB9XG5cbiAgd2tzRXh0LmYgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHJldHVybiB3cmFwKHdrcyhuYW1lKSk7XG4gIH07XG59XG5cbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5XICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsIHsgU3ltYm9sOiAkU3ltYm9sIH0pO1xuXG5mb3IgKHZhciBlczZTeW1ib2xzID0gKFxuICAvLyAxOS40LjIuMiwgMTkuNC4yLjMsIDE5LjQuMi40LCAxOS40LjIuNiwgMTkuNC4yLjgsIDE5LjQuMi45LCAxOS40LjIuMTAsIDE5LjQuMi4xMSwgMTkuNC4yLjEyLCAxOS40LjIuMTMsIDE5LjQuMi4xNFxuICAnaGFzSW5zdGFuY2UsaXNDb25jYXRTcHJlYWRhYmxlLGl0ZXJhdG9yLG1hdGNoLHJlcGxhY2Usc2VhcmNoLHNwZWNpZXMsc3BsaXQsdG9QcmltaXRpdmUsdG9TdHJpbmdUYWcsdW5zY29wYWJsZXMnXG4pLnNwbGl0KCcsJyksIGogPSAwOyBlczZTeW1ib2xzLmxlbmd0aCA+IGo7KXdrcyhlczZTeW1ib2xzW2orK10pO1xuXG5mb3IgKHZhciB3ZWxsS25vd25TeW1ib2xzID0gJGtleXMod2tzLnN0b3JlKSwgayA9IDA7IHdlbGxLbm93blN5bWJvbHMubGVuZ3RoID4gazspIHdrc0RlZmluZSh3ZWxsS25vd25TeW1ib2xzW2srK10pO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFVU0VfTkFUSVZFLCAnU3ltYm9sJywge1xuICAvLyAxOS40LjIuMSBTeW1ib2wuZm9yKGtleSlcbiAgJ2Zvcic6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICByZXR1cm4gaGFzKFN5bWJvbFJlZ2lzdHJ5LCBrZXkgKz0gJycpXG4gICAgICA/IFN5bWJvbFJlZ2lzdHJ5W2tleV1cbiAgICAgIDogU3ltYm9sUmVnaXN0cnlba2V5XSA9ICRTeW1ib2woa2V5KTtcbiAgfSxcbiAgLy8gMTkuNC4yLjUgU3ltYm9sLmtleUZvcihzeW0pXG4gIGtleUZvcjogZnVuY3Rpb24ga2V5Rm9yKHN5bSkge1xuICAgIGlmICghaXNTeW1ib2woc3ltKSkgdGhyb3cgVHlwZUVycm9yKHN5bSArICcgaXMgbm90IGEgc3ltYm9sIScpO1xuICAgIGZvciAodmFyIGtleSBpbiBTeW1ib2xSZWdpc3RyeSkgaWYgKFN5bWJvbFJlZ2lzdHJ5W2tleV0gPT09IHN5bSkgcmV0dXJuIGtleTtcbiAgfSxcbiAgdXNlU2V0dGVyOiBmdW5jdGlvbiAoKSB7IHNldHRlciA9IHRydWU7IH0sXG4gIHVzZVNpbXBsZTogZnVuY3Rpb24gKCkgeyBzZXR0ZXIgPSBmYWxzZTsgfVxufSk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsICdPYmplY3QnLCB7XG4gIC8vIDE5LjEuMi4yIE9iamVjdC5jcmVhdGUoTyBbLCBQcm9wZXJ0aWVzXSlcbiAgY3JlYXRlOiAkY3JlYXRlLFxuICAvLyAxOS4xLjIuNCBPYmplY3QuZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcylcbiAgZGVmaW5lUHJvcGVydHk6ICRkZWZpbmVQcm9wZXJ0eSxcbiAgLy8gMTkuMS4yLjMgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTywgUHJvcGVydGllcylcbiAgZGVmaW5lUHJvcGVydGllczogJGRlZmluZVByb3BlcnRpZXMsXG4gIC8vIDE5LjEuMi42IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUClcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLFxuICAvLyAxOS4xLjIuNyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhPKVxuICBnZXRPd25Qcm9wZXJ0eU5hbWVzOiAkZ2V0T3duUHJvcGVydHlOYW1lcyxcbiAgLy8gMTkuMS4yLjggT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhPKVxuICBnZXRPd25Qcm9wZXJ0eVN5bWJvbHM6ICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHNcbn0pO1xuXG4vLyBDaHJvbWUgMzggYW5kIDM5IGBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzYCBmYWlscyBvbiBwcmltaXRpdmVzXG4vLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zNDQzXG52YXIgRkFJTFNfT05fUFJJTUlUSVZFUyA9ICRmYWlscyhmdW5jdGlvbiAoKSB7ICRHT1BTLmYoMSk7IH0pO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIEZBSUxTX09OX1BSSU1JVElWRVMsICdPYmplY3QnLCB7XG4gIGdldE93blByb3BlcnR5U3ltYm9sczogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlTeW1ib2xzKGl0KSB7XG4gICAgcmV0dXJuICRHT1BTLmYodG9PYmplY3QoaXQpKTtcbiAgfVxufSk7XG5cbi8vIDI0LjMuMiBKU09OLnN0cmluZ2lmeSh2YWx1ZSBbLCByZXBsYWNlciBbLCBzcGFjZV1dKVxuJEpTT04gJiYgJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAoIVVTRV9OQVRJVkUgfHwgJGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIFMgPSAkU3ltYm9sKCk7XG4gIC8vIE1TIEVkZ2UgY29udmVydHMgc3ltYm9sIHZhbHVlcyB0byBKU09OIGFzIHt9XG4gIC8vIFdlYktpdCBjb252ZXJ0cyBzeW1ib2wgdmFsdWVzIHRvIEpTT04gYXMgbnVsbFxuICAvLyBWOCB0aHJvd3Mgb24gYm94ZWQgc3ltYm9sc1xuICByZXR1cm4gX3N0cmluZ2lmeShbU10pICE9ICdbbnVsbF0nIHx8IF9zdHJpbmdpZnkoeyBhOiBTIH0pICE9ICd7fScgfHwgX3N0cmluZ2lmeShPYmplY3QoUykpICE9ICd7fSc7XG59KSksICdKU09OJywge1xuICBzdHJpbmdpZnk6IGZ1bmN0aW9uIHN0cmluZ2lmeShpdCkge1xuICAgIHZhciBhcmdzID0gW2l0XTtcbiAgICB2YXIgaSA9IDE7XG4gICAgdmFyIHJlcGxhY2VyLCAkcmVwbGFjZXI7XG4gICAgd2hpbGUgKGFyZ3VtZW50cy5sZW5ndGggPiBpKSBhcmdzLnB1c2goYXJndW1lbnRzW2krK10pO1xuICAgICRyZXBsYWNlciA9IHJlcGxhY2VyID0gYXJnc1sxXTtcbiAgICBpZiAoIWlzT2JqZWN0KHJlcGxhY2VyKSAmJiBpdCA9PT0gdW5kZWZpbmVkIHx8IGlzU3ltYm9sKGl0KSkgcmV0dXJuOyAvLyBJRTggcmV0dXJucyBzdHJpbmcgb24gdW5kZWZpbmVkXG4gICAgaWYgKCFpc0FycmF5KHJlcGxhY2VyKSkgcmVwbGFjZXIgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgICAgaWYgKHR5cGVvZiAkcmVwbGFjZXIgPT0gJ2Z1bmN0aW9uJykgdmFsdWUgPSAkcmVwbGFjZXIuY2FsbCh0aGlzLCBrZXksIHZhbHVlKTtcbiAgICAgIGlmICghaXNTeW1ib2wodmFsdWUpKSByZXR1cm4gdmFsdWU7XG4gICAgfTtcbiAgICBhcmdzWzFdID0gcmVwbGFjZXI7XG4gICAgcmV0dXJuIF9zdHJpbmdpZnkuYXBwbHkoJEpTT04sIGFyZ3MpO1xuICB9XG59KTtcblxuLy8gMTkuNC4zLjQgU3ltYm9sLnByb3RvdHlwZVtAQHRvUHJpbWl0aXZlXShoaW50KVxuJFN5bWJvbFtQUk9UT1RZUEVdW1RPX1BSSU1JVElWRV0gfHwgcmVxdWlyZSgnLi9faGlkZScpKCRTeW1ib2xbUFJPVE9UWVBFXSwgVE9fUFJJTUlUSVZFLCAkU3ltYm9sW1BST1RPVFlQRV0udmFsdWVPZik7XG4vLyAxOS40LjMuNSBTeW1ib2wucHJvdG90eXBlW0BAdG9TdHJpbmdUYWddXG5zZXRUb1N0cmluZ1RhZygkU3ltYm9sLCAnU3ltYm9sJyk7XG4vLyAyMC4yLjEuOSBNYXRoW0BAdG9TdHJpbmdUYWddXG5zZXRUb1N0cmluZ1RhZyhNYXRoLCAnTWF0aCcsIHRydWUpO1xuLy8gMjQuMy4zIEpTT05bQEB0b1N0cmluZ1RhZ11cbnNldFRvU3RyaW5nVGFnKGdsb2JhbC5KU09OLCAnSlNPTicsIHRydWUpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///133\n")},function(module,exports,__webpack_require__){eval("module.exports = __webpack_require__(47)('native-function-to-string', Function.toString);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZnVuY3Rpb24tdG8tc3RyaW5nLmpzP2ZhNWIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsaUJBQWlCLG1CQUFPLENBQUMsRUFBVyIsImZpbGUiOiIxMzQuanMiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX3NoYXJlZCcpKCduYXRpdmUtZnVuY3Rpb24tdG8tc3RyaW5nJywgRnVuY3Rpb24udG9TdHJpbmcpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///134\n")},function(module,exports,__webpack_require__){eval("// all enumerable object keys, includes symbols\nvar getKeys = __webpack_require__(34);\nvar gOPS = __webpack_require__(53);\nvar pIE = __webpack_require__(49);\nmodule.exports = function (it) {\n var result = getKeys(it);\n var getSymbols = gOPS.f;\n if (getSymbols) {\n var symbols = getSymbols(it);\n var isEnum = pIE.f;\n var i = 0;\n var key;\n while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);\n } return result;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZW51bS1rZXlzLmpzP2Q0YzAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsRUFBZ0I7QUFDdEMsV0FBVyxtQkFBTyxDQUFDLEVBQWdCO0FBQ25DLFVBQVUsbUJBQU8sQ0FBQyxFQUFlO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCIsImZpbGUiOiIxMzUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBhbGwgZW51bWVyYWJsZSBvYmplY3Qga2V5cywgaW5jbHVkZXMgc3ltYm9sc1xudmFyIGdldEtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xudmFyIGdPUFMgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wcycpO1xudmFyIHBJRSA9IHJlcXVpcmUoJy4vX29iamVjdC1waWUnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciByZXN1bHQgPSBnZXRLZXlzKGl0KTtcbiAgdmFyIGdldFN5bWJvbHMgPSBnT1BTLmY7XG4gIGlmIChnZXRTeW1ib2xzKSB7XG4gICAgdmFyIHN5bWJvbHMgPSBnZXRTeW1ib2xzKGl0KTtcbiAgICB2YXIgaXNFbnVtID0gcElFLmY7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBrZXk7XG4gICAgd2hpbGUgKHN5bWJvbHMubGVuZ3RoID4gaSkgaWYgKGlzRW51bS5jYWxsKGl0LCBrZXkgPSBzeW1ib2xzW2krK10pKSByZXN1bHQucHVzaChrZXkpO1xuICB9IHJldHVybiByZXN1bHQ7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///135\n")},function(module,exports,__webpack_require__){eval("var $export = __webpack_require__(0);\n// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\n$export($export.S, 'Object', { create: __webpack_require__(36) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmNyZWF0ZS5qcz84NDc4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDO0FBQ0EsOEJBQThCLFNBQVMsbUJBQU8sQ0FBQyxFQUFrQixHQUFHIiwiZmlsZSI6IjEzNi5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG4vLyAxOS4xLjIuMiAvIDE1LjIuMy41IE9iamVjdC5jcmVhdGUoTyBbLCBQcm9wZXJ0aWVzXSlcbiRleHBvcnQoJGV4cG9ydC5TLCAnT2JqZWN0JywgeyBjcmVhdGU6IHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKSB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///136\n")},function(module,exports,__webpack_require__){eval("var $export = __webpack_require__(0);\n// 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes)\n$export($export.S + $export.F * !__webpack_require__(7), 'Object', { defineProperty: __webpack_require__(8).f });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmRlZmluZS1wcm9wZXJ0eS5qcz8xYzAxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDO0FBQ0EsaUNBQWlDLG1CQUFPLENBQUMsQ0FBZ0IsY0FBYyxpQkFBaUIsbUJBQU8sQ0FBQyxDQUFjLEtBQUsiLCJmaWxlIjoiMTM3LmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbi8vIDE5LjEuMi40IC8gMTUuMi4zLjYgT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpLCAnT2JqZWN0JywgeyBkZWZpbmVQcm9wZXJ0eTogcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZiB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///137\n")},function(module,exports,__webpack_require__){eval("var $export = __webpack_require__(0);\n// 19.1.2.3 / 15.2.3.7 Object.defineProperties(O, Properties)\n$export($export.S + $export.F * !__webpack_require__(7), 'Object', { defineProperties: __webpack_require__(97) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmRlZmluZS1wcm9wZXJ0aWVzLmpzPzU4YjIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakM7QUFDQSxpQ0FBaUMsbUJBQU8sQ0FBQyxDQUFnQixjQUFjLG1CQUFtQixtQkFBTyxDQUFDLEVBQWUsR0FBRyIsImZpbGUiOiIxMzguanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuLy8gMTkuMS4yLjMgLyAxNS4yLjMuNyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhPLCBQcm9wZXJ0aWVzKVxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSwgJ09iamVjdCcsIHsgZGVmaW5lUHJvcGVydGllczogcmVxdWlyZSgnLi9fb2JqZWN0LWRwcycpIH0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///138\n")},function(module,exports,__webpack_require__){eval("// 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\nvar toIObject = __webpack_require__(15);\nvar $getOwnPropertyDescriptor = __webpack_require__(16).f;\n\n__webpack_require__(25)('getOwnPropertyDescriptor', function () {\n return function getOwnPropertyDescriptor(it, key) {\n return $getOwnPropertyDescriptor(toIObject(it), key);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvci5qcz85OTg2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2QyxnQ0FBZ0MsbUJBQU8sQ0FBQyxFQUFnQjs7QUFFeEQsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTM5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMTkuMS4yLjYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKVxudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKS5mO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2dldE93blByb3BlcnR5RGVzY3JpcHRvcicsIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihpdCwga2V5KSB7XG4gICAgcmV0dXJuICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodG9JT2JqZWN0KGl0KSwga2V5KTtcbiAgfTtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///139\n")},function(module,exports,__webpack_require__){eval("// 19.1.2.9 Object.getPrototypeOf(O)\nvar toObject = __webpack_require__(9);\nvar $getPrototypeOf = __webpack_require__(17);\n\n__webpack_require__(25)('getPrototypeOf', function () {\n return function getPrototypeOf(it) {\n return $getPrototypeOf(toObject(it));\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmdldC1wcm90b3R5cGUtb2YuanM/ZTRmNyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLHNCQUFzQixtQkFBTyxDQUFDLEVBQWU7O0FBRTdDLG1CQUFPLENBQUMsRUFBZTtBQUN2QjtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjE0MC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDE5LjEuMi45IE9iamVjdC5nZXRQcm90b3R5cGVPZihPKVxudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgJGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2dldFByb3RvdHlwZU9mJywgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gZnVuY3Rpb24gZ2V0UHJvdG90eXBlT2YoaXQpIHtcbiAgICByZXR1cm4gJGdldFByb3RvdHlwZU9mKHRvT2JqZWN0KGl0KSk7XG4gIH07XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///140\n")},function(module,exports,__webpack_require__){eval("// 19.1.2.14 Object.keys(O)\nvar toObject = __webpack_require__(9);\nvar $keys = __webpack_require__(34);\n\n__webpack_require__(25)('keys', function () {\n return function keys(it) {\n return $keys(toObject(it));\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmtleXMuanM/NDU2ZCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLFlBQVksbUJBQU8sQ0FBQyxFQUFnQjs7QUFFcEMsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTQxLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMTkuMS4yLjE0IE9iamVjdC5rZXlzKE8pXG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciAka2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgna2V5cycsIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGtleXMoaXQpIHtcbiAgICByZXR1cm4gJGtleXModG9PYmplY3QoaXQpKTtcbiAgfTtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///141\n")},function(module,exports,__webpack_require__){eval("// 19.1.2.7 Object.getOwnPropertyNames(O)\n__webpack_require__(25)('getOwnPropertyNames', function () {\n return __webpack_require__(98).f;\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmdldC1vd24tcHJvcGVydHktbmFtZXMuanM/MjVkYiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLG1CQUFPLENBQUMsRUFBZTtBQUN2QixTQUFTLG1CQUFPLENBQUMsRUFBb0I7QUFDckMsQ0FBQyIsImZpbGUiOiIxNDIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAxOS4xLjIuNyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhPKVxucmVxdWlyZSgnLi9fb2JqZWN0LXNhcCcpKCdnZXRPd25Qcm9wZXJ0eU5hbWVzJywgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4tZXh0JykuZjtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///142\n")},function(module,exports,__webpack_require__){eval("// 19.1.2.5 Object.freeze(O)\nvar isObject = __webpack_require__(4);\nvar meta = __webpack_require__(30).onFreeze;\n\n__webpack_require__(25)('freeze', function ($freeze) {\n return function freeze(it) {\n return $freeze && isObject(it) ? $freeze(meta(it)) : it;\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmZyZWV6ZS5qcz8wZDZkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsV0FBVyxtQkFBTyxDQUFDLEVBQVM7O0FBRTVCLG1CQUFPLENBQUMsRUFBZTtBQUN2QjtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjE0My5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDE5LjEuMi41IE9iamVjdC5mcmVlemUoTylcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIG1ldGEgPSByZXF1aXJlKCcuL19tZXRhJykub25GcmVlemU7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgnZnJlZXplJywgZnVuY3Rpb24gKCRmcmVlemUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGZyZWV6ZShpdCkge1xuICAgIHJldHVybiAkZnJlZXplICYmIGlzT2JqZWN0KGl0KSA/ICRmcmVlemUobWV0YShpdCkpIDogaXQ7XG4gIH07XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///143\n")},function(module,exports,__webpack_require__){eval("// 19.1.2.17 Object.seal(O)\nvar isObject = __webpack_require__(4);\nvar meta = __webpack_require__(30).onFreeze;\n\n__webpack_require__(25)('seal', function ($seal) {\n return function seal(it) {\n return $seal && isObject(it) ? $seal(meta(it)) : it;\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LnNlYWwuanM/Y2Y2YSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLFdBQVcsbUJBQU8sQ0FBQyxFQUFTOztBQUU1QixtQkFBTyxDQUFDLEVBQWU7QUFDdkI7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIxNDQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAxOS4xLjIuMTcgT2JqZWN0LnNlYWwoTylcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIG1ldGEgPSByZXF1aXJlKCcuL19tZXRhJykub25GcmVlemU7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgnc2VhbCcsIGZ1bmN0aW9uICgkc2VhbCkge1xuICByZXR1cm4gZnVuY3Rpb24gc2VhbChpdCkge1xuICAgIHJldHVybiAkc2VhbCAmJiBpc09iamVjdChpdCkgPyAkc2VhbChtZXRhKGl0KSkgOiBpdDtcbiAgfTtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///144\n")},function(module,exports,__webpack_require__){eval("// 19.1.2.15 Object.preventExtensions(O)\nvar isObject = __webpack_require__(4);\nvar meta = __webpack_require__(30).onFreeze;\n\n__webpack_require__(25)('preventExtensions', function ($preventExtensions) {\n return function preventExtensions(it) {\n return $preventExtensions && isObject(it) ? $preventExtensions(meta(it)) : it;\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LnByZXZlbnQtZXh0ZW5zaW9ucy5qcz85YWVhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsV0FBVyxtQkFBTyxDQUFDLEVBQVM7O0FBRTVCLG1CQUFPLENBQUMsRUFBZTtBQUN2QjtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjE0NS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDE5LjEuMi4xNSBPYmplY3QucHJldmVudEV4dGVuc2lvbnMoTylcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIG1ldGEgPSByZXF1aXJlKCcuL19tZXRhJykub25GcmVlemU7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgncHJldmVudEV4dGVuc2lvbnMnLCBmdW5jdGlvbiAoJHByZXZlbnRFeHRlbnNpb25zKSB7XG4gIHJldHVybiBmdW5jdGlvbiBwcmV2ZW50RXh0ZW5zaW9ucyhpdCkge1xuICAgIHJldHVybiAkcHJldmVudEV4dGVuc2lvbnMgJiYgaXNPYmplY3QoaXQpID8gJHByZXZlbnRFeHRlbnNpb25zKG1ldGEoaXQpKSA6IGl0O1xuICB9O1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///145\n")},function(module,exports,__webpack_require__){eval("// 19.1.2.12 Object.isFrozen(O)\nvar isObject = __webpack_require__(4);\n\n__webpack_require__(25)('isFrozen', function ($isFrozen) {\n return function isFrozen(it) {\n return isObject(it) ? $isFrozen ? $isFrozen(it) : false : true;\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmlzLWZyb3plbi5qcz82NmM4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsZUFBZSxtQkFBTyxDQUFDLENBQWM7O0FBRXJDLG1CQUFPLENBQUMsRUFBZTtBQUN2QjtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjE0Ni5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDE5LjEuMi4xMiBPYmplY3QuaXNGcm96ZW4oTylcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2lzRnJvemVuJywgZnVuY3Rpb24gKCRpc0Zyb3plbikge1xuICByZXR1cm4gZnVuY3Rpb24gaXNGcm96ZW4oaXQpIHtcbiAgICByZXR1cm4gaXNPYmplY3QoaXQpID8gJGlzRnJvemVuID8gJGlzRnJvemVuKGl0KSA6IGZhbHNlIDogdHJ1ZTtcbiAgfTtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///146\n")},function(module,exports,__webpack_require__){eval("// 19.1.2.13 Object.isSealed(O)\nvar isObject = __webpack_require__(4);\n\n__webpack_require__(25)('isSealed', function ($isSealed) {\n return function isSealed(it) {\n return isObject(it) ? $isSealed ? $isSealed(it) : false : true;\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmlzLXNlYWxlZC5qcz81N2YwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsZUFBZSxtQkFBTyxDQUFDLENBQWM7O0FBRXJDLG1CQUFPLENBQUMsRUFBZTtBQUN2QjtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjE0Ny5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDE5LjEuMi4xMyBPYmplY3QuaXNTZWFsZWQoTylcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2lzU2VhbGVkJywgZnVuY3Rpb24gKCRpc1NlYWxlZCkge1xuICByZXR1cm4gZnVuY3Rpb24gaXNTZWFsZWQoaXQpIHtcbiAgICByZXR1cm4gaXNPYmplY3QoaXQpID8gJGlzU2VhbGVkID8gJGlzU2VhbGVkKGl0KSA6IGZhbHNlIDogdHJ1ZTtcbiAgfTtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///147\n")},function(module,exports,__webpack_require__){eval("// 19.1.2.11 Object.isExtensible(O)\nvar isObject = __webpack_require__(4);\n\n__webpack_require__(25)('isExtensible', function ($isExtensible) {\n return function isExtensible(it) {\n return isObject(it) ? $isExtensible ? $isExtensible(it) : true : false;\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmlzLWV4dGVuc2libGUuanM/MTY1YiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGVBQWUsbUJBQU8sQ0FBQyxDQUFjOztBQUVyQyxtQkFBTyxDQUFDLEVBQWU7QUFDdkI7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIxNDguanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAxOS4xLjIuMTEgT2JqZWN0LmlzRXh0ZW5zaWJsZShPKVxudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgnaXNFeHRlbnNpYmxlJywgZnVuY3Rpb24gKCRpc0V4dGVuc2libGUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGlzRXh0ZW5zaWJsZShpdCkge1xuICAgIHJldHVybiBpc09iamVjdChpdCkgPyAkaXNFeHRlbnNpYmxlID8gJGlzRXh0ZW5zaWJsZShpdCkgOiB0cnVlIDogZmFsc2U7XG4gIH07XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///148\n")},function(module,exports,__webpack_require__){eval("// 19.1.3.1 Object.assign(target, source)\nvar $export = __webpack_require__(0);\n\n$export($export.S + $export.F, 'Object', { assign: __webpack_require__(99) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmFzc2lnbi5qcz9mNzUxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDLDBDQUEwQyxTQUFTLG1CQUFPLENBQUMsRUFBa0IsR0FBRyIsImZpbGUiOiIxNDkuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAxOS4xLjMuMSBPYmplY3QuYXNzaWduKHRhcmdldCwgc291cmNlKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYsICdPYmplY3QnLCB7IGFzc2lnbjogcmVxdWlyZSgnLi9fb2JqZWN0LWFzc2lnbicpIH0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///149\n")},function(module,exports,__webpack_require__){eval("// 19.1.3.10 Object.is(value1, value2)\nvar $export = __webpack_require__(0);\n$export($export.S, 'Object', { is: __webpack_require__(100) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmlzLmpzP2RiOTciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyw4QkFBOEIsS0FBSyxtQkFBTyxDQUFDLEdBQWUsR0FBRyIsImZpbGUiOiIxNTAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAxOS4xLjMuMTAgT2JqZWN0LmlzKHZhbHVlMSwgdmFsdWUyKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbiRleHBvcnQoJGV4cG9ydC5TLCAnT2JqZWN0JywgeyBpczogcmVxdWlyZSgnLi9fc2FtZS12YWx1ZScpIH0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///150\n")},function(module,exports,__webpack_require__){eval("// 19.1.3.19 Object.setPrototypeOf(O, proto)\nvar $export = __webpack_require__(0);\n$export($export.S, 'Object', { setPrototypeOf: __webpack_require__(71).set });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LnNldC1wcm90b3R5cGUtb2YuanM/ZmQyNCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLDhCQUE4QixpQkFBaUIsbUJBQU8sQ0FBQyxFQUFjLE9BQU8iLCJmaWxlIjoiMTUxLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMTkuMS4zLjE5IE9iamVjdC5zZXRQcm90b3R5cGVPZihPLCBwcm90bylcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG4kZXhwb3J0KCRleHBvcnQuUywgJ09iamVjdCcsIHsgc2V0UHJvdG90eXBlT2Y6IHJlcXVpcmUoJy4vX3NldC1wcm90bycpLnNldCB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///151\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// 19.1.3.6 Object.prototype.toString()\nvar classof = __webpack_require__(44);\nvar test = {};\ntest[__webpack_require__(5)('toStringTag')] = 'z';\nif (test + '' != '[object z]') {\n __webpack_require__(12)(Object.prototype, 'toString', function toString() {\n return '[object ' + classof(this) + ']';\n }, true);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LnRvLXN0cmluZy5qcz8wNmRiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxjQUFjLG1CQUFPLENBQUMsRUFBWTtBQUNsQztBQUNBLEtBQUssbUJBQU8sQ0FBQyxDQUFRO0FBQ3JCO0FBQ0EsRUFBRSxtQkFBTyxDQUFDLEVBQWE7QUFDdkI7QUFDQSxHQUFHO0FBQ0giLCJmaWxlIjoiMTUyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gMTkuMS4zLjYgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZygpXG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4vX2NsYXNzb2YnKTtcbnZhciB0ZXN0ID0ge307XG50ZXN0W3JlcXVpcmUoJy4vX3drcycpKCd0b1N0cmluZ1RhZycpXSA9ICd6JztcbmlmICh0ZXN0ICsgJycgIT0gJ1tvYmplY3Qgel0nKSB7XG4gIHJlcXVpcmUoJy4vX3JlZGVmaW5lJykoT2JqZWN0LnByb3RvdHlwZSwgJ3RvU3RyaW5nJywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuICdbb2JqZWN0ICcgKyBjbGFzc29mKHRoaXMpICsgJ10nO1xuICB9LCB0cnVlKTtcbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///152\n")},function(module,exports,__webpack_require__){eval("// 19.2.3.2 / 15.3.4.5 Function.prototype.bind(thisArg, args...)\nvar $export = __webpack_require__(0);\n\n$export($export.P, 'Function', { bind: __webpack_require__(101) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZnVuY3Rpb24uYmluZC5qcz9kOTJhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDLGdDQUFnQyxPQUFPLG1CQUFPLENBQUMsR0FBUyxHQUFHIiwiZmlsZSI6IjE1My5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDE5LjIuMy4yIC8gMTUuMy40LjUgRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQodGhpc0FyZywgYXJncy4uLilcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QLCAnRnVuY3Rpb24nLCB7IGJpbmQ6IHJlcXVpcmUoJy4vX2JpbmQnKSB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///153\n")},function(module,exports,__webpack_require__){eval("var dP = __webpack_require__(8).f;\nvar FProto = Function.prototype;\nvar nameRE = /^\\s*function ([^ (]*)/;\nvar NAME = 'name';\n\n// 19.2.4.2 name\nNAME in FProto || __webpack_require__(7) && dP(FProto, NAME, {\n configurable: true,\n get: function () {\n try {\n return ('' + this).match(nameRE)[1];\n } catch (e) {\n return '';\n }\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZnVuY3Rpb24ubmFtZS5qcz83ZjdmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFNBQVMsbUJBQU8sQ0FBQyxDQUFjO0FBQy9CO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGtCQUFrQixtQkFBTyxDQUFDLENBQWdCO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTU0LmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbnZhciBGUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGU7XG52YXIgbmFtZVJFID0gL15cXHMqZnVuY3Rpb24gKFteIChdKikvO1xudmFyIE5BTUUgPSAnbmFtZSc7XG5cbi8vIDE5LjIuNC4yIG5hbWVcbk5BTUUgaW4gRlByb3RvIHx8IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgZFAoRlByb3RvLCBOQU1FLCB7XG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiAoJycgKyB0aGlzKS5tYXRjaChuYW1lUkUpWzFdO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///154\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar isObject = __webpack_require__(4);\nvar getPrototypeOf = __webpack_require__(17);\nvar HAS_INSTANCE = __webpack_require__(5)('hasInstance');\nvar FunctionProto = Function.prototype;\n// 19.2.3.6 Function.prototype[@@hasInstance](V)\nif (!(HAS_INSTANCE in FunctionProto)) __webpack_require__(8).f(FunctionProto, HAS_INSTANCE, { value: function (O) {\n if (typeof this != 'function' || !isObject(O)) return false;\n if (!isObject(this.prototype)) return O instanceof this;\n // for environment w/o native `@@hasInstance` logic enough `instanceof`, but add this:\n while (O = getPrototypeOf(O)) if (this.prototype === O) return true;\n return false;\n} });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZnVuY3Rpb24uaGFzLWluc3RhbmNlLmpzPzIxN2IiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxxQkFBcUIsbUJBQU8sQ0FBQyxFQUFlO0FBQzVDLG1CQUFtQixtQkFBTyxDQUFDLENBQVE7QUFDbkM7QUFDQTtBQUNBLHNDQUFzQyxtQkFBTyxDQUFDLENBQWMsa0NBQWtDO0FBQzlGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLEVBQUUiLCJmaWxlIjoiMTU1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgSEFTX0lOU1RBTkNFID0gcmVxdWlyZSgnLi9fd2tzJykoJ2hhc0luc3RhbmNlJyk7XG52YXIgRnVuY3Rpb25Qcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbi8vIDE5LjIuMy42IEZ1bmN0aW9uLnByb3RvdHlwZVtAQGhhc0luc3RhbmNlXShWKVxuaWYgKCEoSEFTX0lOU1RBTkNFIGluIEZ1bmN0aW9uUHJvdG8pKSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mKEZ1bmN0aW9uUHJvdG8sIEhBU19JTlNUQU5DRSwgeyB2YWx1ZTogZnVuY3Rpb24gKE8pIHtcbiAgaWYgKHR5cGVvZiB0aGlzICE9ICdmdW5jdGlvbicgfHwgIWlzT2JqZWN0KE8pKSByZXR1cm4gZmFsc2U7XG4gIGlmICghaXNPYmplY3QodGhpcy5wcm90b3R5cGUpKSByZXR1cm4gTyBpbnN0YW5jZW9mIHRoaXM7XG4gIC8vIGZvciBlbnZpcm9ubWVudCB3L28gbmF0aXZlIGBAQGhhc0luc3RhbmNlYCBsb2dpYyBlbm91Z2ggYGluc3RhbmNlb2ZgLCBidXQgYWRkIHRoaXM6XG4gIHdoaWxlIChPID0gZ2V0UHJvdG90eXBlT2YoTykpIGlmICh0aGlzLnByb3RvdHlwZSA9PT0gTykgcmV0dXJuIHRydWU7XG4gIHJldHVybiBmYWxzZTtcbn0gfSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///155\n")},function(module,exports,__webpack_require__){eval("var $export = __webpack_require__(0);\nvar $parseInt = __webpack_require__(103);\n// 18.2.5 parseInt(string, radix)\n$export($export.G + $export.F * (parseInt != $parseInt), { parseInt: $parseInt });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucGFyc2UtaW50LmpzPzE4ZDAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsZ0JBQWdCLG1CQUFPLENBQUMsR0FBYztBQUN0QztBQUNBLDBEQUEwRCxzQkFBc0IiLCJmaWxlIjoiMTU2LmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkcGFyc2VJbnQgPSByZXF1aXJlKCcuL19wYXJzZS1pbnQnKTtcbi8vIDE4LjIuNSBwYXJzZUludChzdHJpbmcsIHJhZGl4KVxuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LkYgKiAocGFyc2VJbnQgIT0gJHBhcnNlSW50KSwgeyBwYXJzZUludDogJHBhcnNlSW50IH0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///156\n")},function(module,exports,__webpack_require__){eval("var $export = __webpack_require__(0);\nvar $parseFloat = __webpack_require__(104);\n// 18.2.4 parseFloat(string)\n$export($export.G + $export.F * (parseFloat != $parseFloat), { parseFloat: $parseFloat });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucGFyc2UtZmxvYXQuanM/YjcyYyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxrQkFBa0IsbUJBQU8sQ0FBQyxHQUFnQjtBQUMxQztBQUNBLDhEQUE4RCwwQkFBMEIiLCJmaWxlIjoiMTU3LmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkcGFyc2VGbG9hdCA9IHJlcXVpcmUoJy4vX3BhcnNlLWZsb2F0Jyk7XG4vLyAxOC4yLjQgcGFyc2VGbG9hdChzdHJpbmcpXG4kZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuRiAqIChwYXJzZUZsb2F0ICE9ICRwYXJzZUZsb2F0KSwgeyBwYXJzZUZsb2F0OiAkcGFyc2VGbG9hdCB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///157\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar global = __webpack_require__(2);\nvar has = __webpack_require__(14);\nvar cof = __webpack_require__(20);\nvar inheritIfRequired = __webpack_require__(73);\nvar toPrimitive = __webpack_require__(23);\nvar fails = __webpack_require__(3);\nvar gOPN = __webpack_require__(37).f;\nvar gOPD = __webpack_require__(16).f;\nvar dP = __webpack_require__(8).f;\nvar $trim = __webpack_require__(45).trim;\nvar NUMBER = 'Number';\nvar $Number = global[NUMBER];\nvar Base = $Number;\nvar proto = $Number.prototype;\n// Opera ~12 has broken Object#toString\nvar BROKEN_COF = cof(__webpack_require__(36)(proto)) == NUMBER;\nvar TRIM = 'trim' in String.prototype;\n\n// 7.1.3 ToNumber(argument)\nvar toNumber = function (argument) {\n var it = toPrimitive(argument, false);\n if (typeof it == 'string' && it.length > 2) {\n it = TRIM ? it.trim() : $trim(it, 3);\n var first = it.charCodeAt(0);\n var third, radix, maxCode;\n if (first === 43 || first === 45) {\n third = it.charCodeAt(2);\n if (third === 88 || third === 120) return NaN; // Number('+0x1') should be NaN, old V8 fix\n } else if (first === 48) {\n switch (it.charCodeAt(1)) {\n case 66: case 98: radix = 2; maxCode = 49; break; // fast equal /^0b[01]+$/i\n case 79: case 111: radix = 8; maxCode = 55; break; // fast equal /^0o[0-7]+$/i\n default: return +it;\n }\n for (var digits = it.slice(2), i = 0, l = digits.length, code; i < l; i++) {\n code = digits.charCodeAt(i);\n // parseInt parses a string to a first unavailable symbol\n // but ToNumber should return NaN if a string contains unavailable symbols\n if (code < 48 || code > maxCode) return NaN;\n } return parseInt(digits, radix);\n }\n } return +it;\n};\n\nif (!$Number(' 0o1') || !$Number('0b1') || $Number('+0x1')) {\n $Number = function Number(value) {\n var it = arguments.length < 1 ? 0 : value;\n var that = this;\n return that instanceof $Number\n // check on 1..constructor(foo) case\n && (BROKEN_COF ? fails(function () { proto.valueOf.call(that); }) : cof(that) != NUMBER)\n ? inheritIfRequired(new Base(toNumber(it)), that, $Number) : toNumber(it);\n };\n for (var keys = __webpack_require__(7) ? gOPN(Base) : (\n // ES3:\n 'MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,' +\n // ES6 (in case, if modules with ES6 Number statics required before):\n 'EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,' +\n 'MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger'\n ).split(','), j = 0, key; keys.length > j; j++) {\n if (has(Base, key = keys[j]) && !has($Number, key)) {\n dP($Number, key, gOPD(Base, key));\n }\n }\n $Number.prototype = proto;\n proto.constructor = $Number;\n __webpack_require__(12)(global, NUMBER, $Number);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLmNvbnN0cnVjdG9yLmpzP2M1ZjYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixhQUFhLG1CQUFPLENBQUMsQ0FBVztBQUNoQyxVQUFVLG1CQUFPLENBQUMsRUFBUTtBQUMxQixVQUFVLG1CQUFPLENBQUMsRUFBUTtBQUMxQix3QkFBd0IsbUJBQU8sQ0FBQyxFQUF3QjtBQUN4RCxrQkFBa0IsbUJBQU8sQ0FBQyxFQUFpQjtBQUMzQyxZQUFZLG1CQUFPLENBQUMsQ0FBVTtBQUM5QixXQUFXLG1CQUFPLENBQUMsRUFBZ0I7QUFDbkMsV0FBVyxtQkFBTyxDQUFDLEVBQWdCO0FBQ25DLFNBQVMsbUJBQU8sQ0FBQyxDQUFjO0FBQy9CLFlBQVksbUJBQU8sQ0FBQyxFQUFnQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLG1CQUFPLENBQUMsRUFBa0I7QUFDL0M7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0RBQW9EO0FBQ3BELEtBQUs7QUFDTDtBQUNBLG9DQUFvQyxjQUFjLE9BQU87QUFDekQscUNBQXFDLGNBQWMsT0FBTztBQUMxRDtBQUNBO0FBQ0Esb0VBQW9FLE9BQU87QUFDM0U7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMENBQTBDLDBCQUEwQixFQUFFO0FBQ3RFO0FBQ0E7QUFDQSxrQkFBa0IsbUJBQU8sQ0FBQyxDQUFnQjtBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCLGlCQUFpQjtBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLG1CQUFPLENBQUMsRUFBYTtBQUN2QiIsImZpbGUiOiIxNTguanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG52YXIgaW5oZXJpdElmUmVxdWlyZWQgPSByZXF1aXJlKCcuL19pbmhlcml0LWlmLXJlcXVpcmVkJyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgZ09QTiA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJykuZjtcbnZhciBnT1BEID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKS5mO1xudmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbnZhciAkdHJpbSA9IHJlcXVpcmUoJy4vX3N0cmluZy10cmltJykudHJpbTtcbnZhciBOVU1CRVIgPSAnTnVtYmVyJztcbnZhciAkTnVtYmVyID0gZ2xvYmFsW05VTUJFUl07XG52YXIgQmFzZSA9ICROdW1iZXI7XG52YXIgcHJvdG8gPSAkTnVtYmVyLnByb3RvdHlwZTtcbi8vIE9wZXJhIH4xMiBoYXMgYnJva2VuIE9iamVjdCN0b1N0cmluZ1xudmFyIEJST0tFTl9DT0YgPSBjb2YocmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpKHByb3RvKSkgPT0gTlVNQkVSO1xudmFyIFRSSU0gPSAndHJpbScgaW4gU3RyaW5nLnByb3RvdHlwZTtcblxuLy8gNy4xLjMgVG9OdW1iZXIoYXJndW1lbnQpXG52YXIgdG9OdW1iZXIgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdmFyIGl0ID0gdG9QcmltaXRpdmUoYXJndW1lbnQsIGZhbHNlKTtcbiAgaWYgKHR5cGVvZiBpdCA9PSAnc3RyaW5nJyAmJiBpdC5sZW5ndGggPiAyKSB7XG4gICAgaXQgPSBUUklNID8gaXQudHJpbSgpIDogJHRyaW0oaXQsIDMpO1xuICAgIHZhciBmaXJzdCA9IGl0LmNoYXJDb2RlQXQoMCk7XG4gICAgdmFyIHRoaXJkLCByYWRpeCwgbWF4Q29kZTtcbiAgICBpZiAoZmlyc3QgPT09IDQzIHx8IGZpcnN0ID09PSA0NSkge1xuICAgICAgdGhpcmQgPSBpdC5jaGFyQ29kZUF0KDIpO1xuICAgICAgaWYgKHRoaXJkID09PSA4OCB8fCB0aGlyZCA9PT0gMTIwKSByZXR1cm4gTmFOOyAvLyBOdW1iZXIoJysweDEnKSBzaG91bGQgYmUgTmFOLCBvbGQgVjggZml4XG4gICAgfSBlbHNlIGlmIChmaXJzdCA9PT0gNDgpIHtcbiAgICAgIHN3aXRjaCAoaXQuY2hhckNvZGVBdCgxKSkge1xuICAgICAgICBjYXNlIDY2OiBjYXNlIDk4OiByYWRpeCA9IDI7IG1heENvZGUgPSA0OTsgYnJlYWs7IC8vIGZhc3QgZXF1YWwgL14wYlswMV0rJC9pXG4gICAgICAgIGNhc2UgNzk6IGNhc2UgMTExOiByYWRpeCA9IDg7IG1heENvZGUgPSA1NTsgYnJlYWs7IC8vIGZhc3QgZXF1YWwgL14wb1swLTddKyQvaVxuICAgICAgICBkZWZhdWx0OiByZXR1cm4gK2l0O1xuICAgICAgfVxuICAgICAgZm9yICh2YXIgZGlnaXRzID0gaXQuc2xpY2UoMiksIGkgPSAwLCBsID0gZGlnaXRzLmxlbmd0aCwgY29kZTsgaSA8IGw7IGkrKykge1xuICAgICAgICBjb2RlID0gZGlnaXRzLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIC8vIHBhcnNlSW50IHBhcnNlcyBhIHN0cmluZyB0byBhIGZpcnN0IHVuYXZhaWxhYmxlIHN5bWJvbFxuICAgICAgICAvLyBidXQgVG9OdW1iZXIgc2hvdWxkIHJldHVybiBOYU4gaWYgYSBzdHJpbmcgY29udGFpbnMgdW5hdmFpbGFibGUgc3ltYm9sc1xuICAgICAgICBpZiAoY29kZSA8IDQ4IHx8IGNvZGUgPiBtYXhDb2RlKSByZXR1cm4gTmFOO1xuICAgICAgfSByZXR1cm4gcGFyc2VJbnQoZGlnaXRzLCByYWRpeCk7XG4gICAgfVxuICB9IHJldHVybiAraXQ7XG59O1xuXG5pZiAoISROdW1iZXIoJyAwbzEnKSB8fCAhJE51bWJlcignMGIxJykgfHwgJE51bWJlcignKzB4MScpKSB7XG4gICROdW1iZXIgPSBmdW5jdGlvbiBOdW1iZXIodmFsdWUpIHtcbiAgICB2YXIgaXQgPSBhcmd1bWVudHMubGVuZ3RoIDwgMSA/IDAgOiB2YWx1ZTtcbiAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgcmV0dXJuIHRoYXQgaW5zdGFuY2VvZiAkTnVtYmVyXG4gICAgICAvLyBjaGVjayBvbiAxLi5jb25zdHJ1Y3Rvcihmb28pIGNhc2VcbiAgICAgICYmIChCUk9LRU5fQ09GID8gZmFpbHMoZnVuY3Rpb24gKCkgeyBwcm90by52YWx1ZU9mLmNhbGwodGhhdCk7IH0pIDogY29mKHRoYXQpICE9IE5VTUJFUilcbiAgICAgICAgPyBpbmhlcml0SWZSZXF1aXJlZChuZXcgQmFzZSh0b051bWJlcihpdCkpLCB0aGF0LCAkTnVtYmVyKSA6IHRvTnVtYmVyKGl0KTtcbiAgfTtcbiAgZm9yICh2YXIga2V5cyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBnT1BOKEJhc2UpIDogKFxuICAgIC8vIEVTMzpcbiAgICAnTUFYX1ZBTFVFLE1JTl9WQUxVRSxOYU4sTkVHQVRJVkVfSU5GSU5JVFksUE9TSVRJVkVfSU5GSU5JVFksJyArXG4gICAgLy8gRVM2IChpbiBjYXNlLCBpZiBtb2R1bGVzIHdpdGggRVM2IE51bWJlciBzdGF0aWNzIHJlcXVpcmVkIGJlZm9yZSk6XG4gICAgJ0VQU0lMT04saXNGaW5pdGUsaXNJbnRlZ2VyLGlzTmFOLGlzU2FmZUludGVnZXIsTUFYX1NBRkVfSU5URUdFUiwnICtcbiAgICAnTUlOX1NBRkVfSU5URUdFUixwYXJzZUZsb2F0LHBhcnNlSW50LGlzSW50ZWdlcidcbiAgKS5zcGxpdCgnLCcpLCBqID0gMCwga2V5OyBrZXlzLmxlbmd0aCA+IGo7IGorKykge1xuICAgIGlmIChoYXMoQmFzZSwga2V5ID0ga2V5c1tqXSkgJiYgIWhhcygkTnVtYmVyLCBrZXkpKSB7XG4gICAgICBkUCgkTnVtYmVyLCBrZXksIGdPUEQoQmFzZSwga2V5KSk7XG4gICAgfVxuICB9XG4gICROdW1iZXIucHJvdG90eXBlID0gcHJvdG87XG4gIHByb3RvLmNvbnN0cnVjdG9yID0gJE51bWJlcjtcbiAgcmVxdWlyZSgnLi9fcmVkZWZpbmUnKShnbG9iYWwsIE5VTUJFUiwgJE51bWJlcik7XG59XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///158\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar toInteger = __webpack_require__(21);\nvar aNumberValue = __webpack_require__(105);\nvar repeat = __webpack_require__(74);\nvar $toFixed = 1.0.toFixed;\nvar floor = Math.floor;\nvar data = [0, 0, 0, 0, 0, 0];\nvar ERROR = 'Number.toFixed: incorrect invocation!';\nvar ZERO = '0';\n\nvar multiply = function (n, c) {\n var i = -1;\n var c2 = c;\n while (++i < 6) {\n c2 += n * data[i];\n data[i] = c2 % 1e7;\n c2 = floor(c2 / 1e7);\n }\n};\nvar divide = function (n) {\n var i = 6;\n var c = 0;\n while (--i >= 0) {\n c += data[i];\n data[i] = floor(c / n);\n c = (c % n) * 1e7;\n }\n};\nvar numToString = function () {\n var i = 6;\n var s = '';\n while (--i >= 0) {\n if (s !== '' || i === 0 || data[i] !== 0) {\n var t = String(data[i]);\n s = s === '' ? t : s + repeat.call(ZERO, 7 - t.length) + t;\n }\n } return s;\n};\nvar pow = function (x, n, acc) {\n return n === 0 ? acc : n % 2 === 1 ? pow(x, n - 1, acc * x) : pow(x * x, n / 2, acc);\n};\nvar log = function (x) {\n var n = 0;\n var x2 = x;\n while (x2 >= 4096) {\n n += 12;\n x2 /= 4096;\n }\n while (x2 >= 2) {\n n += 1;\n x2 /= 2;\n } return n;\n};\n\n$export($export.P + $export.F * (!!$toFixed && (\n 0.00008.toFixed(3) !== '0.000' ||\n 0.9.toFixed(0) !== '1' ||\n 1.255.toFixed(2) !== '1.25' ||\n 1000000000000000128.0.toFixed(0) !== '1000000000000000128'\n) || !__webpack_require__(3)(function () {\n // V8 ~ Android 4.3-\n $toFixed.call({});\n})), 'Number', {\n toFixed: function toFixed(fractionDigits) {\n var x = aNumberValue(this, ERROR);\n var f = toInteger(fractionDigits);\n var s = '';\n var m = ZERO;\n var e, z, j, k;\n if (f < 0 || f > 20) throw RangeError(ERROR);\n // eslint-disable-next-line no-self-compare\n if (x != x) return 'NaN';\n if (x <= -1e21 || x >= 1e21) return String(x);\n if (x < 0) {\n s = '-';\n x = -x;\n }\n if (x > 1e-21) {\n e = log(x * pow(2, 69, 1)) - 69;\n z = e < 0 ? x * pow(2, -e, 1) : x / pow(2, e, 1);\n z *= 0x10000000000000;\n e = 52 - e;\n if (e > 0) {\n multiply(0, z);\n j = f;\n while (j >= 7) {\n multiply(1e7, 0);\n j -= 7;\n }\n multiply(pow(10, j, 1), 0);\n j = e - 1;\n while (j >= 23) {\n divide(1 << 23);\n j -= 23;\n }\n divide(1 << j);\n multiply(1, 1);\n divide(2);\n m = numToString();\n } else {\n multiply(0, z);\n multiply(1 << -e, 0);\n m = numToString() + repeat.call(ZERO, f);\n }\n }\n if (f > 0) {\n k = m.length;\n m = s + (k <= f ? '0.' + repeat.call(ZERO, f - k) + m : m.slice(0, k - f) + '.' + m.slice(k - f));\n } else {\n m = s + m;\n } return m;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLnRvLWZpeGVkLmpzPzAzNmMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDLG1CQUFtQixtQkFBTyxDQUFDLEdBQW1CO0FBQzlDLGFBQWEsbUJBQU8sQ0FBQyxFQUFrQjtBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTSxtQkFBTyxDQUFDLENBQVU7QUFDeEI7QUFDQSxrQkFBa0I7QUFDbEIsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMO0FBQ0EsQ0FBQyIsImZpbGUiOiIxNTkuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciBhTnVtYmVyVmFsdWUgPSByZXF1aXJlKCcuL19hLW51bWJlci12YWx1ZScpO1xudmFyIHJlcGVhdCA9IHJlcXVpcmUoJy4vX3N0cmluZy1yZXBlYXQnKTtcbnZhciAkdG9GaXhlZCA9IDEuMC50b0ZpeGVkO1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcbnZhciBkYXRhID0gWzAsIDAsIDAsIDAsIDAsIDBdO1xudmFyIEVSUk9SID0gJ051bWJlci50b0ZpeGVkOiBpbmNvcnJlY3QgaW52b2NhdGlvbiEnO1xudmFyIFpFUk8gPSAnMCc7XG5cbnZhciBtdWx0aXBseSA9IGZ1bmN0aW9uIChuLCBjKSB7XG4gIHZhciBpID0gLTE7XG4gIHZhciBjMiA9IGM7XG4gIHdoaWxlICgrK2kgPCA2KSB7XG4gICAgYzIgKz0gbiAqIGRhdGFbaV07XG4gICAgZGF0YVtpXSA9IGMyICUgMWU3O1xuICAgIGMyID0gZmxvb3IoYzIgLyAxZTcpO1xuICB9XG59O1xudmFyIGRpdmlkZSA9IGZ1bmN0aW9uIChuKSB7XG4gIHZhciBpID0gNjtcbiAgdmFyIGMgPSAwO1xuICB3aGlsZSAoLS1pID49IDApIHtcbiAgICBjICs9IGRhdGFbaV07XG4gICAgZGF0YVtpXSA9IGZsb29yKGMgLyBuKTtcbiAgICBjID0gKGMgJSBuKSAqIDFlNztcbiAgfVxufTtcbnZhciBudW1Ub1N0cmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGkgPSA2O1xuICB2YXIgcyA9ICcnO1xuICB3aGlsZSAoLS1pID49IDApIHtcbiAgICBpZiAocyAhPT0gJycgfHwgaSA9PT0gMCB8fCBkYXRhW2ldICE9PSAwKSB7XG4gICAgICB2YXIgdCA9IFN0cmluZyhkYXRhW2ldKTtcbiAgICAgIHMgPSBzID09PSAnJyA/IHQgOiBzICsgcmVwZWF0LmNhbGwoWkVSTywgNyAtIHQubGVuZ3RoKSArIHQ7XG4gICAgfVxuICB9IHJldHVybiBzO1xufTtcbnZhciBwb3cgPSBmdW5jdGlvbiAoeCwgbiwgYWNjKSB7XG4gIHJldHVybiBuID09PSAwID8gYWNjIDogbiAlIDIgPT09IDEgPyBwb3coeCwgbiAtIDEsIGFjYyAqIHgpIDogcG93KHggKiB4LCBuIC8gMiwgYWNjKTtcbn07XG52YXIgbG9nID0gZnVuY3Rpb24gKHgpIHtcbiAgdmFyIG4gPSAwO1xuICB2YXIgeDIgPSB4O1xuICB3aGlsZSAoeDIgPj0gNDA5Nikge1xuICAgIG4gKz0gMTI7XG4gICAgeDIgLz0gNDA5NjtcbiAgfVxuICB3aGlsZSAoeDIgPj0gMikge1xuICAgIG4gKz0gMTtcbiAgICB4MiAvPSAyO1xuICB9IHJldHVybiBuO1xufTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoISEkdG9GaXhlZCAmJiAoXG4gIDAuMDAwMDgudG9GaXhlZCgzKSAhPT0gJzAuMDAwJyB8fFxuICAwLjkudG9GaXhlZCgwKSAhPT0gJzEnIHx8XG4gIDEuMjU1LnRvRml4ZWQoMikgIT09ICcxLjI1JyB8fFxuICAxMDAwMDAwMDAwMDAwMDAwMTI4LjAudG9GaXhlZCgwKSAhPT0gJzEwMDAwMDAwMDAwMDAwMDAxMjgnXG4pIHx8ICFyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgLy8gVjggfiBBbmRyb2lkIDQuMy1cbiAgJHRvRml4ZWQuY2FsbCh7fSk7XG59KSksICdOdW1iZXInLCB7XG4gIHRvRml4ZWQ6IGZ1bmN0aW9uIHRvRml4ZWQoZnJhY3Rpb25EaWdpdHMpIHtcbiAgICB2YXIgeCA9IGFOdW1iZXJWYWx1ZSh0aGlzLCBFUlJPUik7XG4gICAgdmFyIGYgPSB0b0ludGVnZXIoZnJhY3Rpb25EaWdpdHMpO1xuICAgIHZhciBzID0gJyc7XG4gICAgdmFyIG0gPSBaRVJPO1xuICAgIHZhciBlLCB6LCBqLCBrO1xuICAgIGlmIChmIDwgMCB8fCBmID4gMjApIHRocm93IFJhbmdlRXJyb3IoRVJST1IpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICBpZiAoeCAhPSB4KSByZXR1cm4gJ05hTic7XG4gICAgaWYgKHggPD0gLTFlMjEgfHwgeCA+PSAxZTIxKSByZXR1cm4gU3RyaW5nKHgpO1xuICAgIGlmICh4IDwgMCkge1xuICAgICAgcyA9ICctJztcbiAgICAgIHggPSAteDtcbiAgICB9XG4gICAgaWYgKHggPiAxZS0yMSkge1xuICAgICAgZSA9IGxvZyh4ICogcG93KDIsIDY5LCAxKSkgLSA2OTtcbiAgICAgIHogPSBlIDwgMCA/IHggKiBwb3coMiwgLWUsIDEpIDogeCAvIHBvdygyLCBlLCAxKTtcbiAgICAgIHogKj0gMHgxMDAwMDAwMDAwMDAwMDtcbiAgICAgIGUgPSA1MiAtIGU7XG4gICAgICBpZiAoZSA+IDApIHtcbiAgICAgICAgbXVsdGlwbHkoMCwgeik7XG4gICAgICAgIGogPSBmO1xuICAgICAgICB3aGlsZSAoaiA+PSA3KSB7XG4gICAgICAgICAgbXVsdGlwbHkoMWU3LCAwKTtcbiAgICAgICAgICBqIC09IDc7XG4gICAgICAgIH1cbiAgICAgICAgbXVsdGlwbHkocG93KDEwLCBqLCAxKSwgMCk7XG4gICAgICAgIGogPSBlIC0gMTtcbiAgICAgICAgd2hpbGUgKGogPj0gMjMpIHtcbiAgICAgICAgICBkaXZpZGUoMSA8PCAyMyk7XG4gICAgICAgICAgaiAtPSAyMztcbiAgICAgICAgfVxuICAgICAgICBkaXZpZGUoMSA8PCBqKTtcbiAgICAgICAgbXVsdGlwbHkoMSwgMSk7XG4gICAgICAgIGRpdmlkZSgyKTtcbiAgICAgICAgbSA9IG51bVRvU3RyaW5nKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBtdWx0aXBseSgwLCB6KTtcbiAgICAgICAgbXVsdGlwbHkoMSA8PCAtZSwgMCk7XG4gICAgICAgIG0gPSBudW1Ub1N0cmluZygpICsgcmVwZWF0LmNhbGwoWkVSTywgZik7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChmID4gMCkge1xuICAgICAgayA9IG0ubGVuZ3RoO1xuICAgICAgbSA9IHMgKyAoayA8PSBmID8gJzAuJyArIHJlcGVhdC5jYWxsKFpFUk8sIGYgLSBrKSArIG0gOiBtLnNsaWNlKDAsIGsgLSBmKSArICcuJyArIG0uc2xpY2UoayAtIGYpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbSA9IHMgKyBtO1xuICAgIH0gcmV0dXJuIG07XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///159\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar $fails = __webpack_require__(3);\nvar aNumberValue = __webpack_require__(105);\nvar $toPrecision = 1.0.toPrecision;\n\n$export($export.P + $export.F * ($fails(function () {\n // IE7-\n return $toPrecision.call(1, undefined) !== '1';\n}) || !$fails(function () {\n // V8 ~ Android 4.3-\n $toPrecision.call({});\n})), 'Number', {\n toPrecision: function toPrecision(precision) {\n var that = aNumberValue(this, 'Number#toPrecision: incorrect invocation!');\n return precision === undefined ? $toPrecision.call(that) : $toPrecision.call(that, precision);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLnRvLXByZWNpc2lvbi5qcz81NGE4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsYUFBYSxtQkFBTyxDQUFDLENBQVU7QUFDL0IsbUJBQW1CLG1CQUFPLENBQUMsR0FBbUI7QUFDOUM7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0Esc0JBQXNCO0FBQ3RCLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTYwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIGFOdW1iZXJWYWx1ZSA9IHJlcXVpcmUoJy4vX2EtbnVtYmVyLXZhbHVlJyk7XG52YXIgJHRvUHJlY2lzaW9uID0gMS4wLnRvUHJlY2lzaW9uO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICgkZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBJRTctXG4gIHJldHVybiAkdG9QcmVjaXNpb24uY2FsbCgxLCB1bmRlZmluZWQpICE9PSAnMSc7XG59KSB8fCAhJGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gVjggfiBBbmRyb2lkIDQuMy1cbiAgJHRvUHJlY2lzaW9uLmNhbGwoe30pO1xufSkpLCAnTnVtYmVyJywge1xuICB0b1ByZWNpc2lvbjogZnVuY3Rpb24gdG9QcmVjaXNpb24ocHJlY2lzaW9uKSB7XG4gICAgdmFyIHRoYXQgPSBhTnVtYmVyVmFsdWUodGhpcywgJ051bWJlciN0b1ByZWNpc2lvbjogaW5jb3JyZWN0IGludm9jYXRpb24hJyk7XG4gICAgcmV0dXJuIHByZWNpc2lvbiA9PT0gdW5kZWZpbmVkID8gJHRvUHJlY2lzaW9uLmNhbGwodGhhdCkgOiAkdG9QcmVjaXNpb24uY2FsbCh0aGF0LCBwcmVjaXNpb24pO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///160\n")},function(module,exports,__webpack_require__){eval("// 20.1.2.1 Number.EPSILON\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Number', { EPSILON: Math.pow(2, -52) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLmVwc2lsb24uanM/MmUzNyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXOztBQUVqQyw4QkFBOEIsNEJBQTRCIiwiZmlsZSI6IjE2MS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDIwLjEuMi4xIE51bWJlci5FUFNJTE9OXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ051bWJlcicsIHsgRVBTSUxPTjogTWF0aC5wb3coMiwgLTUyKSB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///161\n")},function(module,exports,__webpack_require__){eval("// 20.1.2.2 Number.isFinite(number)\nvar $export = __webpack_require__(0);\nvar _isFinite = __webpack_require__(2).isFinite;\n\n$export($export.S, 'Number', {\n isFinite: function isFinite(it) {\n return typeof it == 'number' && _isFinite(it);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLmlzLWZpbml0ZS5qcz9mY2EwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsZ0JBQWdCLG1CQUFPLENBQUMsQ0FBVzs7QUFFbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjE2Mi5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDIwLjEuMi4yIE51bWJlci5pc0Zpbml0ZShudW1iZXIpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIF9pc0Zpbml0ZSA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLmlzRmluaXRlO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ051bWJlcicsIHtcbiAgaXNGaW5pdGU6IGZ1bmN0aW9uIGlzRmluaXRlKGl0KSB7XG4gICAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnbnVtYmVyJyAmJiBfaXNGaW5pdGUoaXQpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///162\n")},function(module,exports,__webpack_require__){eval("// 20.1.2.3 Number.isInteger(number)\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Number', { isInteger: __webpack_require__(106) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLmlzLWludGVnZXIuanM/N2NkZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXOztBQUVqQyw4QkFBOEIsWUFBWSxtQkFBTyxDQUFDLEdBQWUsR0FBRyIsImZpbGUiOiIxNjMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyMC4xLjIuMyBOdW1iZXIuaXNJbnRlZ2VyKG51bWJlcilcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTnVtYmVyJywgeyBpc0ludGVnZXI6IHJlcXVpcmUoJy4vX2lzLWludGVnZXInKSB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///163\n")},function(module,exports,__webpack_require__){eval("// 20.1.2.4 Number.isNaN(number)\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Number', {\n isNaN: function isNaN(number) {\n // eslint-disable-next-line no-self-compare\n return number != number;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLmlzLW5hbi5qcz9lZTFkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjE2NC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDIwLjEuMi40IE51bWJlci5pc05hTihudW1iZXIpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ051bWJlcicsIHtcbiAgaXNOYU46IGZ1bmN0aW9uIGlzTmFOKG51bWJlcikge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICByZXR1cm4gbnVtYmVyICE9IG51bWJlcjtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///164\n")},function(module,exports,__webpack_require__){eval("// 20.1.2.5 Number.isSafeInteger(number)\nvar $export = __webpack_require__(0);\nvar isInteger = __webpack_require__(106);\nvar abs = Math.abs;\n\n$export($export.S, 'Number', {\n isSafeInteger: function isSafeInteger(number) {\n return isInteger(number) && abs(number) <= 0x1fffffffffffff;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLmlzLXNhZmUtaW50ZWdlci5qcz9iMWIxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsZ0JBQWdCLG1CQUFPLENBQUMsR0FBZTtBQUN2Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTY1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMS4yLjUgTnVtYmVyLmlzU2FmZUludGVnZXIobnVtYmVyKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBpc0ludGVnZXIgPSByZXF1aXJlKCcuL19pcy1pbnRlZ2VyJyk7XG52YXIgYWJzID0gTWF0aC5hYnM7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTnVtYmVyJywge1xuICBpc1NhZmVJbnRlZ2VyOiBmdW5jdGlvbiBpc1NhZmVJbnRlZ2VyKG51bWJlcikge1xuICAgIHJldHVybiBpc0ludGVnZXIobnVtYmVyKSAmJiBhYnMobnVtYmVyKSA8PSAweDFmZmZmZmZmZmZmZmZmO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///165\n")},function(module,exports,__webpack_require__){eval("// 20.1.2.6 Number.MAX_SAFE_INTEGER\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Number', { MAX_SAFE_INTEGER: 0x1fffffffffffff });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLm1heC1zYWZlLWludGVnZXIuanM/ODdmMyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXOztBQUVqQyw4QkFBOEIscUNBQXFDIiwiZmlsZSI6IjE2Ni5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDIwLjEuMi42IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ051bWJlcicsIHsgTUFYX1NBRkVfSU5URUdFUjogMHgxZmZmZmZmZmZmZmZmZiB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///166\n")},function(module,exports,__webpack_require__){eval("// 20.1.2.10 Number.MIN_SAFE_INTEGER\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Number', { MIN_SAFE_INTEGER: -0x1fffffffffffff });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLm1pbi1zYWZlLWludGVnZXIuanM/OTI3OCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXOztBQUVqQyw4QkFBOEIsc0NBQXNDIiwiZmlsZSI6IjE2Ny5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDIwLjEuMi4xMCBOdW1iZXIuTUlOX1NBRkVfSU5URUdFUlxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdOdW1iZXInLCB7IE1JTl9TQUZFX0lOVEVHRVI6IC0weDFmZmZmZmZmZmZmZmZmIH0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///167\n")},function(module,exports,__webpack_require__){eval("var $export = __webpack_require__(0);\nvar $parseFloat = __webpack_require__(104);\n// 20.1.2.12 Number.parseFloat(string)\n$export($export.S + $export.F * (Number.parseFloat != $parseFloat), 'Number', { parseFloat: $parseFloat });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLnBhcnNlLWZsb2F0LmpzPzVkZjIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsa0JBQWtCLG1CQUFPLENBQUMsR0FBZ0I7QUFDMUM7QUFDQSwrRUFBK0UsMEJBQTBCIiwiZmlsZSI6IjE2OC5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHBhcnNlRmxvYXQgPSByZXF1aXJlKCcuL19wYXJzZS1mbG9hdCcpO1xuLy8gMjAuMS4yLjEyIE51bWJlci5wYXJzZUZsb2F0KHN0cmluZylcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogKE51bWJlci5wYXJzZUZsb2F0ICE9ICRwYXJzZUZsb2F0KSwgJ051bWJlcicsIHsgcGFyc2VGbG9hdDogJHBhcnNlRmxvYXQgfSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///168\n")},function(module,exports,__webpack_require__){eval("var $export = __webpack_require__(0);\nvar $parseInt = __webpack_require__(103);\n// 20.1.2.13 Number.parseInt(string, radix)\n$export($export.S + $export.F * (Number.parseInt != $parseInt), 'Number', { parseInt: $parseInt });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLnBhcnNlLWludC5qcz8wNGZmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGdCQUFnQixtQkFBTyxDQUFDLEdBQWM7QUFDdEM7QUFDQSwyRUFBMkUsc0JBQXNCIiwiZmlsZSI6IjE2OS5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHBhcnNlSW50ID0gcmVxdWlyZSgnLi9fcGFyc2UtaW50Jyk7XG4vLyAyMC4xLjIuMTMgTnVtYmVyLnBhcnNlSW50KHN0cmluZywgcmFkaXgpXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIChOdW1iZXIucGFyc2VJbnQgIT0gJHBhcnNlSW50KSwgJ051bWJlcicsIHsgcGFyc2VJbnQ6ICRwYXJzZUludCB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///169\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.3 Math.acosh(x)\nvar $export = __webpack_require__(0);\nvar log1p = __webpack_require__(107);\nvar sqrt = Math.sqrt;\nvar $acosh = Math.acosh;\n\n$export($export.S + $export.F * !($acosh\n // V8 bug: https://code.google.com/p/v8/issues/detail?id=3509\n && Math.floor($acosh(Number.MAX_VALUE)) == 710\n // Tor Browser bug: Math.acosh(Infinity) -> NaN\n && $acosh(Infinity) == Infinity\n), 'Math', {\n acosh: function acosh(x) {\n return (x = +x) < 1 ? NaN : x > 94906265.62425156\n ? Math.log(x) + Math.LN2\n : log1p(x - 1 + sqrt(x - 1) * sqrt(x + 1));\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5hY29zaC5qcz83ZjI1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsWUFBWSxtQkFBTyxDQUFDLEdBQWU7QUFDbkM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIxNzAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyMC4yLjIuMyBNYXRoLmFjb3NoKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGxvZzFwID0gcmVxdWlyZSgnLi9fbWF0aC1sb2cxcCcpO1xudmFyIHNxcnQgPSBNYXRoLnNxcnQ7XG52YXIgJGFjb3NoID0gTWF0aC5hY29zaDtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhKCRhY29zaFxuICAvLyBWOCBidWc6IGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zNTA5XG4gICYmIE1hdGguZmxvb3IoJGFjb3NoKE51bWJlci5NQVhfVkFMVUUpKSA9PSA3MTBcbiAgLy8gVG9yIEJyb3dzZXIgYnVnOiBNYXRoLmFjb3NoKEluZmluaXR5KSAtPiBOYU5cbiAgJiYgJGFjb3NoKEluZmluaXR5KSA9PSBJbmZpbml0eVxuKSwgJ01hdGgnLCB7XG4gIGFjb3NoOiBmdW5jdGlvbiBhY29zaCh4KSB7XG4gICAgcmV0dXJuICh4ID0gK3gpIDwgMSA/IE5hTiA6IHggPiA5NDkwNjI2NS42MjQyNTE1NlxuICAgICAgPyBNYXRoLmxvZyh4KSArIE1hdGguTE4yXG4gICAgICA6IGxvZzFwKHggLSAxICsgc3FydCh4IC0gMSkgKiBzcXJ0KHggKyAxKSk7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///170\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.5 Math.asinh(x)\nvar $export = __webpack_require__(0);\nvar $asinh = Math.asinh;\n\nfunction asinh(x) {\n return !isFinite(x = +x) || x == 0 ? x : x < 0 ? -asinh(-x) : Math.log(x + Math.sqrt(x * x + 1));\n}\n\n// Tor Browser bug: Math.asinh(0) -> -0\n$export($export.S + $export.F * !($asinh && 1 / $asinh(0) > 0), 'Math', { asinh: asinh });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5hc2luaC5qcz81MzZiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakM7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EseUVBQXlFLGVBQWUiLCJmaWxlIjoiMTcxLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMi4yLjUgTWF0aC5hc2luaCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkYXNpbmggPSBNYXRoLmFzaW5oO1xuXG5mdW5jdGlvbiBhc2luaCh4KSB7XG4gIHJldHVybiAhaXNGaW5pdGUoeCA9ICt4KSB8fCB4ID09IDAgPyB4IDogeCA8IDAgPyAtYXNpbmgoLXgpIDogTWF0aC5sb2coeCArIE1hdGguc3FydCh4ICogeCArIDEpKTtcbn1cblxuLy8gVG9yIEJyb3dzZXIgYnVnOiBNYXRoLmFzaW5oKDApIC0+IC0wXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICEoJGFzaW5oICYmIDEgLyAkYXNpbmgoMCkgPiAwKSwgJ01hdGgnLCB7IGFzaW5oOiBhc2luaCB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///171\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.7 Math.atanh(x)\nvar $export = __webpack_require__(0);\nvar $atanh = Math.atanh;\n\n// Tor Browser bug: Math.atanh(-0) -> 0\n$export($export.S + $export.F * !($atanh && 1 / $atanh(-0) < 0), 'Math', {\n atanh: function atanh(x) {\n return (x = +x) == 0 ? x : Math.log((1 + x) / (1 - x)) / 2;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5hdGFuaC5qcz9kOWFiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTcyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMi4yLjcgTWF0aC5hdGFuaCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkYXRhbmggPSBNYXRoLmF0YW5oO1xuXG4vLyBUb3IgQnJvd3NlciBidWc6IE1hdGguYXRhbmgoLTApIC0+IDBcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogISgkYXRhbmggJiYgMSAvICRhdGFuaCgtMCkgPCAwKSwgJ01hdGgnLCB7XG4gIGF0YW5oOiBmdW5jdGlvbiBhdGFuaCh4KSB7XG4gICAgcmV0dXJuICh4ID0gK3gpID09IDAgPyB4IDogTWF0aC5sb2coKDEgKyB4KSAvICgxIC0geCkpIC8gMjtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///172\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.9 Math.cbrt(x)\nvar $export = __webpack_require__(0);\nvar sign = __webpack_require__(75);\n\n$export($export.S, 'Math', {\n cbrt: function cbrt(x) {\n return sign(x = +x) * Math.pow(Math.abs(x), 1 / 3);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5jYnJ0LmpzP2Y5YWIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxXQUFXLG1CQUFPLENBQUMsRUFBYzs7QUFFakM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjE3My5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDIwLjIuMi45IE1hdGguY2JydCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBzaWduID0gcmVxdWlyZSgnLi9fbWF0aC1zaWduJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgY2JydDogZnVuY3Rpb24gY2JydCh4KSB7XG4gICAgcmV0dXJuIHNpZ24oeCA9ICt4KSAqIE1hdGgucG93KE1hdGguYWJzKHgpLCAxIC8gMyk7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///173\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.11 Math.clz32(x)\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', {\n clz32: function clz32(x) {\n return (x >>>= 0) ? 31 - Math.floor(Math.log(x + 0.5) * Math.LOG2E) : 32;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5jbHozMi5qcz8zMmQ3Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIxNzQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyMC4yLjIuMTEgTWF0aC5jbHozMih4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBjbHozMjogZnVuY3Rpb24gY2x6MzIoeCkge1xuICAgIHJldHVybiAoeCA+Pj49IDApID8gMzEgLSBNYXRoLmZsb29yKE1hdGgubG9nKHggKyAwLjUpICogTWF0aC5MT0cyRSkgOiAzMjtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///174\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.12 Math.cosh(x)\nvar $export = __webpack_require__(0);\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n cosh: function cosh(x) {\n return (exp(x = +x) + exp(-x)) / 2;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5jb3NoLmpzPzI1YzkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTc1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMi4yLjEyIE1hdGguY29zaCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBleHAgPSBNYXRoLmV4cDtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBjb3NoOiBmdW5jdGlvbiBjb3NoKHgpIHtcbiAgICByZXR1cm4gKGV4cCh4ID0gK3gpICsgZXhwKC14KSkgLyAyO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///175\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.14 Math.expm1(x)\nvar $export = __webpack_require__(0);\nvar $expm1 = __webpack_require__(76);\n\n$export($export.S + $export.F * ($expm1 != Math.expm1), 'Math', { expm1: $expm1 });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5leHBtMS5qcz85ZjNjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsYUFBYSxtQkFBTyxDQUFDLEVBQWU7O0FBRXBDLGlFQUFpRSxnQkFBZ0IiLCJmaWxlIjoiMTc2LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMi4yLjE0IE1hdGguZXhwbTEoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGV4cG0xID0gcmVxdWlyZSgnLi9fbWF0aC1leHBtMScpO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICgkZXhwbTEgIT0gTWF0aC5leHBtMSksICdNYXRoJywgeyBleHBtMTogJGV4cG0xIH0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///176\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.16 Math.fround(x)\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', { fround: __webpack_require__(108) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5mcm91bmQuanM/MDQyZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXOztBQUVqQyw0QkFBNEIsU0FBUyxtQkFBTyxDQUFDLEdBQWdCLEdBQUciLCJmaWxlIjoiMTc3LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMi4yLjE2IE1hdGguZnJvdW5kKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7IGZyb3VuZDogcmVxdWlyZSgnLi9fbWF0aC1mcm91bmQnKSB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///177\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.17 Math.hypot([value1[, value2[, … ]]])\nvar $export = __webpack_require__(0);\nvar abs = Math.abs;\n\n$export($export.S, 'Math', {\n hypot: function hypot(value1, value2) { // eslint-disable-line no-unused-vars\n var sum = 0;\n var i = 0;\n var aLen = arguments.length;\n var larg = 0;\n var arg, div;\n while (i < aLen) {\n arg = abs(arguments[i++]);\n if (larg < arg) {\n div = larg / arg;\n sum = sum * div * div + 1;\n larg = arg;\n } else if (arg > 0) {\n div = arg / larg;\n sum += div * div;\n } else sum += arg;\n }\n return larg === Infinity ? Infinity : larg * Math.sqrt(sum);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5oeXBvdC5qcz9jN2M2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakM7O0FBRUE7QUFDQSx5Q0FBeUM7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTc4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMi4yLjE3IE1hdGguaHlwb3QoW3ZhbHVlMVssIHZhbHVlMlssIOKApiBdXV0pXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGFicyA9IE1hdGguYWJzO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGh5cG90OiBmdW5jdGlvbiBoeXBvdCh2YWx1ZTEsIHZhbHVlMikgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgdmFyIHN1bSA9IDA7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgbGFyZyA9IDA7XG4gICAgdmFyIGFyZywgZGl2O1xuICAgIHdoaWxlIChpIDwgYUxlbikge1xuICAgICAgYXJnID0gYWJzKGFyZ3VtZW50c1tpKytdKTtcbiAgICAgIGlmIChsYXJnIDwgYXJnKSB7XG4gICAgICAgIGRpdiA9IGxhcmcgLyBhcmc7XG4gICAgICAgIHN1bSA9IHN1bSAqIGRpdiAqIGRpdiArIDE7XG4gICAgICAgIGxhcmcgPSBhcmc7XG4gICAgICB9IGVsc2UgaWYgKGFyZyA+IDApIHtcbiAgICAgICAgZGl2ID0gYXJnIC8gbGFyZztcbiAgICAgICAgc3VtICs9IGRpdiAqIGRpdjtcbiAgICAgIH0gZWxzZSBzdW0gKz0gYXJnO1xuICAgIH1cbiAgICByZXR1cm4gbGFyZyA9PT0gSW5maW5pdHkgPyBJbmZpbml0eSA6IGxhcmcgKiBNYXRoLnNxcnQoc3VtKTtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///178\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.18 Math.imul(x, y)\nvar $export = __webpack_require__(0);\nvar $imul = Math.imul;\n\n// some WebKit versions fails with big numbers, some has wrong arity\n$export($export.S + $export.F * __webpack_require__(3)(function () {\n return $imul(0xffffffff, 5) != -5 || $imul.length != 2;\n}), 'Math', {\n imul: function imul(x, y) {\n var UINT16 = 0xffff;\n var xn = +x;\n var yn = +y;\n var xl = UINT16 & xn;\n var yl = UINT16 & yn;\n return 0 | xl * yl + ((UINT16 & xn >>> 16) * yl + xl * (UINT16 & yn >>> 16) << 16 >>> 0);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5pbXVsLmpzP2Y0ZmYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQzs7QUFFQTtBQUNBLGdDQUFnQyxtQkFBTyxDQUFDLENBQVU7QUFDbEQ7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTc5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMi4yLjE4IE1hdGguaW11bCh4LCB5KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkaW11bCA9IE1hdGguaW11bDtcblxuLy8gc29tZSBXZWJLaXQgdmVyc2lvbnMgZmFpbHMgd2l0aCBiaWcgbnVtYmVycywgc29tZSBoYXMgd3JvbmcgYXJpdHlcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAkaW11bCgweGZmZmZmZmZmLCA1KSAhPSAtNSB8fCAkaW11bC5sZW5ndGggIT0gMjtcbn0pLCAnTWF0aCcsIHtcbiAgaW11bDogZnVuY3Rpb24gaW11bCh4LCB5KSB7XG4gICAgdmFyIFVJTlQxNiA9IDB4ZmZmZjtcbiAgICB2YXIgeG4gPSAreDtcbiAgICB2YXIgeW4gPSAreTtcbiAgICB2YXIgeGwgPSBVSU5UMTYgJiB4bjtcbiAgICB2YXIgeWwgPSBVSU5UMTYgJiB5bjtcbiAgICByZXR1cm4gMCB8IHhsICogeWwgKyAoKFVJTlQxNiAmIHhuID4+PiAxNikgKiB5bCArIHhsICogKFVJTlQxNiAmIHluID4+PiAxNikgPDwgMTYgPj4+IDApO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///179\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.21 Math.log10(x)\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', {\n log10: function log10(x) {\n return Math.log(x) * Math.LOG10E;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5sb2cxMC5qcz83ODcyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIxODAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyMC4yLjIuMjEgTWF0aC5sb2cxMCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBsb2cxMDogZnVuY3Rpb24gbG9nMTAoeCkge1xuICAgIHJldHVybiBNYXRoLmxvZyh4KSAqIE1hdGguTE9HMTBFO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///180\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.20 Math.log1p(x)\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', { log1p: __webpack_require__(107) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5sb2cxcC5qcz8wNDlmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDLDRCQUE0QixRQUFRLG1CQUFPLENBQUMsR0FBZSxHQUFHIiwiZmlsZSI6IjE4MS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDIwLjIuMi4yMCBNYXRoLmxvZzFwKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7IGxvZzFwOiByZXF1aXJlKCcuL19tYXRoLWxvZzFwJykgfSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///181\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.22 Math.log2(x)\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', {\n log2: function log2(x) {\n return Math.log(x) / Math.LN2;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5sb2cyLmpzP2E2OWYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVzs7QUFFakM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjE4Mi5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDIwLjIuMi4yMiBNYXRoLmxvZzIoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgbG9nMjogZnVuY3Rpb24gbG9nMih4KSB7XG4gICAgcmV0dXJuIE1hdGgubG9nKHgpIC8gTWF0aC5MTjI7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///182\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.28 Math.sign(x)\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', { sign: __webpack_require__(75) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5zaWduLmpzPzBiMjEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVzs7QUFFakMsNEJBQTRCLE9BQU8sbUJBQU8sQ0FBQyxFQUFjLEdBQUciLCJmaWxlIjoiMTgzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMi4yLjI4IE1hdGguc2lnbih4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywgeyBzaWduOiByZXF1aXJlKCcuL19tYXRoLXNpZ24nKSB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///183\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.30 Math.sinh(x)\nvar $export = __webpack_require__(0);\nvar expm1 = __webpack_require__(76);\nvar exp = Math.exp;\n\n// V8 near Chromium 38 has a problem with very small numbers\n$export($export.S + $export.F * __webpack_require__(3)(function () {\n return !Math.sinh(-2e-17) != -2e-17;\n}), 'Math', {\n sinh: function sinh(x) {\n return Math.abs(x = +x) < 1\n ? (expm1(x) - expm1(-x)) / 2\n : (exp(x - 1) - exp(-x - 1)) * (Math.E / 2);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5zaW5oLmpzPzZjMWEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxZQUFZLG1CQUFPLENBQUMsRUFBZTtBQUNuQzs7QUFFQTtBQUNBLGdDQUFnQyxtQkFBTyxDQUFDLENBQVU7QUFDbEQ7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTg0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMi4yLjMwIE1hdGguc2luaCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBleHBtMSA9IHJlcXVpcmUoJy4vX21hdGgtZXhwbTEnKTtcbnZhciBleHAgPSBNYXRoLmV4cDtcblxuLy8gVjggbmVhciBDaHJvbWl1bSAzOCBoYXMgYSBwcm9ibGVtIHdpdGggdmVyeSBzbWFsbCBudW1iZXJzXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gIU1hdGguc2luaCgtMmUtMTcpICE9IC0yZS0xNztcbn0pLCAnTWF0aCcsIHtcbiAgc2luaDogZnVuY3Rpb24gc2luaCh4KSB7XG4gICAgcmV0dXJuIE1hdGguYWJzKHggPSAreCkgPCAxXG4gICAgICA/IChleHBtMSh4KSAtIGV4cG0xKC14KSkgLyAyXG4gICAgICA6IChleHAoeCAtIDEpIC0gZXhwKC14IC0gMSkpICogKE1hdGguRSAvIDIpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///184\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.33 Math.tanh(x)\nvar $export = __webpack_require__(0);\nvar expm1 = __webpack_require__(76);\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n tanh: function tanh(x) {\n var a = expm1(x = +x);\n var b = expm1(-x);\n return a == Infinity ? 1 : b == Infinity ? -1 : (a - b) / (exp(x) + exp(-x));\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC50YW5oLmpzP2M3YzYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxZQUFZLG1CQUFPLENBQUMsRUFBZTtBQUNuQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjE4NS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDIwLjIuMi4zMyBNYXRoLnRhbmgoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZXhwbTEgPSByZXF1aXJlKCcuL19tYXRoLWV4cG0xJyk7XG52YXIgZXhwID0gTWF0aC5leHA7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgdGFuaDogZnVuY3Rpb24gdGFuaCh4KSB7XG4gICAgdmFyIGEgPSBleHBtMSh4ID0gK3gpO1xuICAgIHZhciBiID0gZXhwbTEoLXgpO1xuICAgIHJldHVybiBhID09IEluZmluaXR5ID8gMSA6IGIgPT0gSW5maW5pdHkgPyAtMSA6IChhIC0gYikgLyAoZXhwKHgpICsgZXhwKC14KSk7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///185\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.34 Math.trunc(x)\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', {\n trunc: function trunc(it) {\n return (it > 0 ? Math.floor : Math.ceil)(it);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC50cnVuYy5qcz84NGI0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIxODYuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyMC4yLjIuMzQgTWF0aC50cnVuYyh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICB0cnVuYzogZnVuY3Rpb24gdHJ1bmMoaXQpIHtcbiAgICByZXR1cm4gKGl0ID4gMCA/IE1hdGguZmxvb3IgOiBNYXRoLmNlaWwpKGl0KTtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///186\n")},function(module,exports,__webpack_require__){eval("var $export = __webpack_require__(0);\nvar toAbsoluteIndex = __webpack_require__(35);\nvar fromCharCode = String.fromCharCode;\nvar $fromCodePoint = String.fromCodePoint;\n\n// length should be 1, old FF problem\n$export($export.S + $export.F * (!!$fromCodePoint && $fromCodePoint.length != 1), 'String', {\n // 21.1.2.2 String.fromCodePoint(...codePoints)\n fromCodePoint: function fromCodePoint(x) { // eslint-disable-line no-unused-vars\n var res = [];\n var aLen = arguments.length;\n var i = 0;\n var code;\n while (aLen > i) {\n code = +arguments[i++];\n if (toAbsoluteIndex(code, 0x10ffff) !== code) throw RangeError(code + ' is not a valid code point');\n res.push(code < 0x10000\n ? fromCharCode(code)\n : fromCharCode(((code -= 0x10000) >> 10) + 0xd800, code % 0x400 + 0xdc00)\n );\n } return res.join('');\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmZyb20tY29kZS1wb2ludC5qcz81Njk1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLHNCQUFzQixtQkFBTyxDQUFDLEVBQXNCO0FBQ3BEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsNENBQTRDO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxDQUFDIiwiZmlsZSI6IjE4Ny5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi9fdG8tYWJzb2x1dGUtaW5kZXgnKTtcbnZhciBmcm9tQ2hhckNvZGUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlO1xudmFyICRmcm9tQ29kZVBvaW50ID0gU3RyaW5nLmZyb21Db2RlUG9pbnQ7XG5cbi8vIGxlbmd0aCBzaG91bGQgYmUgMSwgb2xkIEZGIHByb2JsZW1cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogKCEhJGZyb21Db2RlUG9pbnQgJiYgJGZyb21Db2RlUG9pbnQubGVuZ3RoICE9IDEpLCAnU3RyaW5nJywge1xuICAvLyAyMS4xLjIuMiBTdHJpbmcuZnJvbUNvZGVQb2ludCguLi5jb2RlUG9pbnRzKVxuICBmcm9tQ29kZVBvaW50OiBmdW5jdGlvbiBmcm9tQ29kZVBvaW50KHgpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgIHZhciByZXMgPSBbXTtcbiAgICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBjb2RlO1xuICAgIHdoaWxlIChhTGVuID4gaSkge1xuICAgICAgY29kZSA9ICthcmd1bWVudHNbaSsrXTtcbiAgICAgIGlmICh0b0Fic29sdXRlSW5kZXgoY29kZSwgMHgxMGZmZmYpICE9PSBjb2RlKSB0aHJvdyBSYW5nZUVycm9yKGNvZGUgKyAnIGlzIG5vdCBhIHZhbGlkIGNvZGUgcG9pbnQnKTtcbiAgICAgIHJlcy5wdXNoKGNvZGUgPCAweDEwMDAwXG4gICAgICAgID8gZnJvbUNoYXJDb2RlKGNvZGUpXG4gICAgICAgIDogZnJvbUNoYXJDb2RlKCgoY29kZSAtPSAweDEwMDAwKSA+PiAxMCkgKyAweGQ4MDAsIGNvZGUgJSAweDQwMCArIDB4ZGMwMClcbiAgICAgICk7XG4gICAgfSByZXR1cm4gcmVzLmpvaW4oJycpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///187\n")},function(module,exports,__webpack_require__){eval("var $export = __webpack_require__(0);\nvar toIObject = __webpack_require__(15);\nvar toLength = __webpack_require__(6);\n\n$export($export.S, 'String', {\n // 21.1.2.4 String.raw(callSite, ...substitutions)\n raw: function raw(callSite) {\n var tpl = toIObject(callSite.raw);\n var len = toLength(tpl.length);\n var aLen = arguments.length;\n var res = [];\n var i = 0;\n while (len > i) {\n res.push(String(tpl[i++]));\n if (i < aLen) res.push(String(arguments[i]));\n } return res.join('');\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnJhdy5qcz83ODhkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGdCQUFnQixtQkFBTyxDQUFDLEVBQWU7QUFDdkMsZUFBZSxtQkFBTyxDQUFDLENBQWM7O0FBRXJDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxDQUFDIiwiZmlsZSI6IjE4OC5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnU3RyaW5nJywge1xuICAvLyAyMS4xLjIuNCBTdHJpbmcucmF3KGNhbGxTaXRlLCAuLi5zdWJzdGl0dXRpb25zKVxuICByYXc6IGZ1bmN0aW9uIHJhdyhjYWxsU2l0ZSkge1xuICAgIHZhciB0cGwgPSB0b0lPYmplY3QoY2FsbFNpdGUucmF3KTtcbiAgICB2YXIgbGVuID0gdG9MZW5ndGgodHBsLmxlbmd0aCk7XG4gICAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciByZXMgPSBbXTtcbiAgICB2YXIgaSA9IDA7XG4gICAgd2hpbGUgKGxlbiA+IGkpIHtcbiAgICAgIHJlcy5wdXNoKFN0cmluZyh0cGxbaSsrXSkpO1xuICAgICAgaWYgKGkgPCBhTGVuKSByZXMucHVzaChTdHJpbmcoYXJndW1lbnRzW2ldKSk7XG4gICAgfSByZXR1cm4gcmVzLmpvaW4oJycpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///188\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// 21.1.3.25 String.prototype.trim()\n__webpack_require__(45)('trim', function ($trim) {\n return function trim() {\n return $trim(this, 3);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnRyaW0uanM/NGYzNyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsbUJBQU8sQ0FBQyxFQUFnQjtBQUN4QjtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjE4OS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIDIxLjEuMy4yNSBTdHJpbmcucHJvdG90eXBlLnRyaW0oKVxucmVxdWlyZSgnLi9fc3RyaW5nLXRyaW0nKSgndHJpbScsIGZ1bmN0aW9uICgkdHJpbSkge1xuICByZXR1cm4gZnVuY3Rpb24gdHJpbSgpIHtcbiAgICByZXR1cm4gJHRyaW0odGhpcywgMyk7XG4gIH07XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///189\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $at = __webpack_require__(55)(true);\n\n// 21.1.3.27 String.prototype[@@iterator]()\n__webpack_require__(77)(String, 'String', function (iterated) {\n this._t = String(iterated); // target\n this._i = 0; // next index\n// 21.1.5.2.1 %StringIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var index = this._i;\n var point;\n if (index >= O.length) return { value: undefined, done: true };\n point = $at(O, index);\n this._i += point.length;\n return { value: point, done: false };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLml0ZXJhdG9yLmpzPzVkZjMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixVQUFVLG1CQUFPLENBQUMsRUFBYzs7QUFFaEM7QUFDQSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3hCLDZCQUE2QjtBQUM3QixjQUFjO0FBQ2Q7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDO0FBQ2pDO0FBQ0E7QUFDQSxVQUFVO0FBQ1YsQ0FBQyIsImZpbGUiOiIxOTAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgJGF0ID0gcmVxdWlyZSgnLi9fc3RyaW5nLWF0JykodHJ1ZSk7XG5cbi8vIDIxLjEuMy4yNyBTdHJpbmcucHJvdG90eXBlW0BAaXRlcmF0b3JdKClcbnJlcXVpcmUoJy4vX2l0ZXItZGVmaW5lJykoU3RyaW5nLCAnU3RyaW5nJywgZnVuY3Rpb24gKGl0ZXJhdGVkKSB7XG4gIHRoaXMuX3QgPSBTdHJpbmcoaXRlcmF0ZWQpOyAvLyB0YXJnZXRcbiAgdGhpcy5faSA9IDA7ICAgICAgICAgICAgICAgIC8vIG5leHQgaW5kZXhcbi8vIDIxLjEuNS4yLjEgJVN0cmluZ0l0ZXJhdG9yUHJvdG90eXBlJS5uZXh0KClcbn0sIGZ1bmN0aW9uICgpIHtcbiAgdmFyIE8gPSB0aGlzLl90O1xuICB2YXIgaW5kZXggPSB0aGlzLl9pO1xuICB2YXIgcG9pbnQ7XG4gIGlmIChpbmRleCA+PSBPLmxlbmd0aCkgcmV0dXJuIHsgdmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1ZSB9O1xuICBwb2ludCA9ICRhdChPLCBpbmRleCk7XG4gIHRoaXMuX2kgKz0gcG9pbnQubGVuZ3RoO1xuICByZXR1cm4geyB2YWx1ZTogcG9pbnQsIGRvbmU6IGZhbHNlIH07XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///190\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar $at = __webpack_require__(55)(false);\n$export($export.P, 'String', {\n // 21.1.3.3 String.prototype.codePointAt(pos)\n codePointAt: function codePointAt(pos) {\n return $at(this, pos);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmNvZGUtcG9pbnQtYXQuanM/YTAzMiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLFVBQVUsbUJBQU8sQ0FBQyxFQUFjO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjE5MS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGF0ID0gcmVxdWlyZSgnLi9fc3RyaW5nLWF0JykoZmFsc2UpO1xuJGV4cG9ydCgkZXhwb3J0LlAsICdTdHJpbmcnLCB7XG4gIC8vIDIxLjEuMy4zIFN0cmluZy5wcm90b3R5cGUuY29kZVBvaW50QXQocG9zKVxuICBjb2RlUG9pbnRBdDogZnVuY3Rpb24gY29kZVBvaW50QXQocG9zKSB7XG4gICAgcmV0dXJuICRhdCh0aGlzLCBwb3MpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///191\n")},function(module,exports,__webpack_require__){"use strict";eval("// 21.1.3.6 String.prototype.endsWith(searchString [, endPosition])\n\nvar $export = __webpack_require__(0);\nvar toLength = __webpack_require__(6);\nvar context = __webpack_require__(79);\nvar ENDS_WITH = 'endsWith';\nvar $endsWith = ''[ENDS_WITH];\n\n$export($export.P + $export.F * __webpack_require__(80)(ENDS_WITH), 'String', {\n endsWith: function endsWith(searchString /* , endPosition = @length */) {\n var that = context(this, searchString, ENDS_WITH);\n var endPosition = arguments.length > 1 ? arguments[1] : undefined;\n var len = toLength(that.length);\n var end = endPosition === undefined ? len : Math.min(toLength(endPosition), len);\n var search = String(searchString);\n return $endsWith\n ? $endsWith.call(that, search, end)\n : that.slice(end - search.length, end) === search;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmVuZHMtd2l0aC5qcz9hZWY2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ2E7QUFDYixjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxjQUFjLG1CQUFPLENBQUMsRUFBbUI7QUFDekM7QUFDQTs7QUFFQSxnQ0FBZ0MsbUJBQU8sQ0FBQyxFQUFvQjtBQUM1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTkyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjEuMS4zLjYgU3RyaW5nLnByb3RvdHlwZS5lbmRzV2l0aChzZWFyY2hTdHJpbmcgWywgZW5kUG9zaXRpb25dKVxuJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGNvbnRleHQgPSByZXF1aXJlKCcuL19zdHJpbmctY29udGV4dCcpO1xudmFyIEVORFNfV0lUSCA9ICdlbmRzV2l0aCc7XG52YXIgJGVuZHNXaXRoID0gJydbRU5EU19XSVRIXTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscy1pcy1yZWdleHAnKShFTkRTX1dJVEgpLCAnU3RyaW5nJywge1xuICBlbmRzV2l0aDogZnVuY3Rpb24gZW5kc1dpdGgoc2VhcmNoU3RyaW5nIC8qICwgZW5kUG9zaXRpb24gPSBAbGVuZ3RoICovKSB7XG4gICAgdmFyIHRoYXQgPSBjb250ZXh0KHRoaXMsIHNlYXJjaFN0cmluZywgRU5EU19XSVRIKTtcbiAgICB2YXIgZW5kUG9zaXRpb24gPSBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgbGVuID0gdG9MZW5ndGgodGhhdC5sZW5ndGgpO1xuICAgIHZhciBlbmQgPSBlbmRQb3NpdGlvbiA9PT0gdW5kZWZpbmVkID8gbGVuIDogTWF0aC5taW4odG9MZW5ndGgoZW5kUG9zaXRpb24pLCBsZW4pO1xuICAgIHZhciBzZWFyY2ggPSBTdHJpbmcoc2VhcmNoU3RyaW5nKTtcbiAgICByZXR1cm4gJGVuZHNXaXRoXG4gICAgICA/ICRlbmRzV2l0aC5jYWxsKHRoYXQsIHNlYXJjaCwgZW5kKVxuICAgICAgOiB0aGF0LnNsaWNlKGVuZCAtIHNlYXJjaC5sZW5ndGgsIGVuZCkgPT09IHNlYXJjaDtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///192\n")},function(module,exports,__webpack_require__){"use strict";eval("// 21.1.3.7 String.prototype.includes(searchString, position = 0)\n\nvar $export = __webpack_require__(0);\nvar context = __webpack_require__(79);\nvar INCLUDES = 'includes';\n\n$export($export.P + $export.F * __webpack_require__(80)(INCLUDES), 'String', {\n includes: function includes(searchString /* , position = 0 */) {\n return !!~context(this, searchString, INCLUDES)\n .indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmluY2x1ZGVzLmpzPzJmZGIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDYTtBQUNiLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGNBQWMsbUJBQU8sQ0FBQyxFQUFtQjtBQUN6Qzs7QUFFQSxnQ0FBZ0MsbUJBQU8sQ0FBQyxFQUFvQjtBQUM1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTkzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjEuMS4zLjcgU3RyaW5nLnByb3RvdHlwZS5pbmNsdWRlcyhzZWFyY2hTdHJpbmcsIHBvc2l0aW9uID0gMClcbid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgY29udGV4dCA9IHJlcXVpcmUoJy4vX3N0cmluZy1jb250ZXh0Jyk7XG52YXIgSU5DTFVERVMgPSAnaW5jbHVkZXMnO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzLWlzLXJlZ2V4cCcpKElOQ0xVREVTKSwgJ1N0cmluZycsIHtcbiAgaW5jbHVkZXM6IGZ1bmN0aW9uIGluY2x1ZGVzKHNlYXJjaFN0cmluZyAvKiAsIHBvc2l0aW9uID0gMCAqLykge1xuICAgIHJldHVybiAhIX5jb250ZXh0KHRoaXMsIHNlYXJjaFN0cmluZywgSU5DTFVERVMpXG4gICAgICAuaW5kZXhPZihzZWFyY2hTdHJpbmcsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///193\n")},function(module,exports,__webpack_require__){eval("var $export = __webpack_require__(0);\n\n$export($export.P, 'String', {\n // 21.1.3.13 String.prototype.repeat(count)\n repeat: __webpack_require__(74)\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnJlcGVhdC5qcz8xNGI5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXOztBQUVqQztBQUNBO0FBQ0EsVUFBVSxtQkFBTyxDQUFDLEVBQWtCO0FBQ3BDLENBQUMiLCJmaWxlIjoiMTk0LmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdTdHJpbmcnLCB7XG4gIC8vIDIxLjEuMy4xMyBTdHJpbmcucHJvdG90eXBlLnJlcGVhdChjb3VudClcbiAgcmVwZWF0OiByZXF1aXJlKCcuL19zdHJpbmctcmVwZWF0Jylcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///194\n")},function(module,exports,__webpack_require__){"use strict";eval("// 21.1.3.18 String.prototype.startsWith(searchString [, position ])\n\nvar $export = __webpack_require__(0);\nvar toLength = __webpack_require__(6);\nvar context = __webpack_require__(79);\nvar STARTS_WITH = 'startsWith';\nvar $startsWith = ''[STARTS_WITH];\n\n$export($export.P + $export.F * __webpack_require__(80)(STARTS_WITH), 'String', {\n startsWith: function startsWith(searchString /* , position = 0 */) {\n var that = context(this, searchString, STARTS_WITH);\n var index = toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length));\n var search = String(searchString);\n return $startsWith\n ? $startsWith.call(that, search, index)\n : that.slice(index, index + search.length) === search;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnN0YXJ0cy13aXRoLmpzP2Y1NTkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDYTtBQUNiLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGNBQWMsbUJBQU8sQ0FBQyxFQUFtQjtBQUN6QztBQUNBOztBQUVBLGdDQUFnQyxtQkFBTyxDQUFDLEVBQW9CO0FBQzVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjE5NS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDIxLjEuMy4xOCBTdHJpbmcucHJvdG90eXBlLnN0YXJ0c1dpdGgoc2VhcmNoU3RyaW5nIFssIHBvc2l0aW9uIF0pXG4ndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgY29udGV4dCA9IHJlcXVpcmUoJy4vX3N0cmluZy1jb250ZXh0Jyk7XG52YXIgU1RBUlRTX1dJVEggPSAnc3RhcnRzV2l0aCc7XG52YXIgJHN0YXJ0c1dpdGggPSAnJ1tTVEFSVFNfV0lUSF07XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMtaXMtcmVnZXhwJykoU1RBUlRTX1dJVEgpLCAnU3RyaW5nJywge1xuICBzdGFydHNXaXRoOiBmdW5jdGlvbiBzdGFydHNXaXRoKHNlYXJjaFN0cmluZyAvKiAsIHBvc2l0aW9uID0gMCAqLykge1xuICAgIHZhciB0aGF0ID0gY29udGV4dCh0aGlzLCBzZWFyY2hTdHJpbmcsIFNUQVJUU19XSVRIKTtcbiAgICB2YXIgaW5kZXggPSB0b0xlbmd0aChNYXRoLm1pbihhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCwgdGhhdC5sZW5ndGgpKTtcbiAgICB2YXIgc2VhcmNoID0gU3RyaW5nKHNlYXJjaFN0cmluZyk7XG4gICAgcmV0dXJuICRzdGFydHNXaXRoXG4gICAgICA/ICRzdGFydHNXaXRoLmNhbGwodGhhdCwgc2VhcmNoLCBpbmRleClcbiAgICAgIDogdGhhdC5zbGljZShpbmRleCwgaW5kZXggKyBzZWFyY2gubGVuZ3RoKSA9PT0gc2VhcmNoO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///195\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// B.2.3.2 String.prototype.anchor(name)\n__webpack_require__(13)('anchor', function (createHTML) {\n return function anchor(name) {\n return createHTML(this, 'a', 'name', name);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmFuY2hvci5qcz84NDQ5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTk2LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuMiBTdHJpbmcucHJvdG90eXBlLmFuY2hvcihuYW1lKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnYW5jaG9yJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGFuY2hvcihuYW1lKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ2EnLCAnbmFtZScsIG5hbWUpO1xuICB9O1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///196\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// B.2.3.3 String.prototype.big()\n__webpack_require__(13)('big', function (createHTML) {\n return function big() {\n return createHTML(this, 'big', '', '');\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmJpZy5qcz85Yzg2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTk3LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuMyBTdHJpbmcucHJvdG90eXBlLmJpZygpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdiaWcnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gYmlnKCkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdiaWcnLCAnJywgJycpO1xuICB9O1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///197\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// B.2.3.4 String.prototype.blink()\n__webpack_require__(13)('blink', function (createHTML) {\n return function blink() {\n return createHTML(this, 'blink', '', '');\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmJsaW5rLmpzP2ZhODMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBLG1CQUFPLENBQUMsRUFBZ0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIxOTguanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy40IFN0cmluZy5wcm90b3R5cGUuYmxpbmsoKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnYmxpbmsnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gYmxpbmsoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ2JsaW5rJywgJycsICcnKTtcbiAgfTtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///198\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// B.2.3.5 String.prototype.bold()\n__webpack_require__(13)('bold', function (createHTML) {\n return function bold() {\n return createHTML(this, 'b', '', '');\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmJvbGQuanM/NDhjMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsbUJBQU8sQ0FBQyxFQUFnQjtBQUN4QjtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjE5OS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjUgU3RyaW5nLnByb3RvdHlwZS5ib2xkKClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ2JvbGQnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gYm9sZCgpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnYicsICcnLCAnJyk7XG4gIH07XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///199\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// B.2.3.6 String.prototype.fixed()\n__webpack_require__(13)('fixed', function (createHTML) {\n return function fixed() {\n return createHTML(this, 'tt', '', '');\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmZpeGVkLmpzP2QyNjMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBLG1CQUFPLENBQUMsRUFBZ0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyMDAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy42IFN0cmluZy5wcm90b3R5cGUuZml4ZWQoKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnZml4ZWQnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gZml4ZWQoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ3R0JywgJycsICcnKTtcbiAgfTtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///200\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// B.2.3.7 String.prototype.fontcolor(color)\n__webpack_require__(13)('fontcolor', function (createHTML) {\n return function fontcolor(color) {\n return createHTML(this, 'font', 'color', color);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmZvbnRjb2xvci5qcz82YzM3Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjAxLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuNyBTdHJpbmcucHJvdG90eXBlLmZvbnRjb2xvcihjb2xvcilcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ2ZvbnRjb2xvcicsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBmb250Y29sb3IoY29sb3IpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnZm9udCcsICdjb2xvcicsIGNvbG9yKTtcbiAgfTtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///201\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// B.2.3.8 String.prototype.fontsize(size)\n__webpack_require__(13)('fontsize', function (createHTML) {\n return function fontsize(size) {\n return createHTML(this, 'font', 'size', size);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmZvbnRzaXplLmpzPzllYzgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBLG1CQUFPLENBQUMsRUFBZ0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyMDIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy44IFN0cmluZy5wcm90b3R5cGUuZm9udHNpemUoc2l6ZSlcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ2ZvbnRzaXplJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGZvbnRzaXplKHNpemUpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnZm9udCcsICdzaXplJywgc2l6ZSk7XG4gIH07XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///202\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// B.2.3.9 String.prototype.italics()\n__webpack_require__(13)('italics', function (createHTML) {\n return function italics() {\n return createHTML(this, 'i', '', '');\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLml0YWxpY3MuanM/ZDBiMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsbUJBQU8sQ0FBQyxFQUFnQjtBQUN4QjtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjIwMy5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjkgU3RyaW5nLnByb3RvdHlwZS5pdGFsaWNzKClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ2l0YWxpY3MnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gaXRhbGljcygpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnaScsICcnLCAnJyk7XG4gIH07XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///203\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// B.2.3.10 String.prototype.link(url)\n__webpack_require__(13)('link', function (createHTML) {\n return function link(url) {\n return createHTML(this, 'a', 'href', url);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmxpbmsuanM/YjU0YSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsbUJBQU8sQ0FBQyxFQUFnQjtBQUN4QjtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjIwNC5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjEwIFN0cmluZy5wcm90b3R5cGUubGluayh1cmwpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdsaW5rJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGxpbmsodXJsKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ2EnLCAnaHJlZicsIHVybCk7XG4gIH07XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///204\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// B.2.3.11 String.prototype.small()\n__webpack_require__(13)('small', function (createHTML) {\n return function small() {\n return createHTML(this, 'small', '', '');\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnNtYWxsLmpzP2YzODYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBLG1CQUFPLENBQUMsRUFBZ0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyMDUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy4xMSBTdHJpbmcucHJvdG90eXBlLnNtYWxsKClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ3NtYWxsJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHNtYWxsKCkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdzbWFsbCcsICcnLCAnJyk7XG4gIH07XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///205\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// B.2.3.12 String.prototype.strike()\n__webpack_require__(13)('strike', function (createHTML) {\n return function strike() {\n return createHTML(this, 'strike', '', '');\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnN0cmlrZS5qcz8xNDQ4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjA2LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuMTIgU3RyaW5nLnByb3RvdHlwZS5zdHJpa2UoKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnc3RyaWtlJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHN0cmlrZSgpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnc3RyaWtlJywgJycsICcnKTtcbiAgfTtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///206\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// B.2.3.13 String.prototype.sub()\n__webpack_require__(13)('sub', function (createHTML) {\n return function sub() {\n return createHTML(this, 'sub', '', '');\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnN1Yi5qcz82NzNlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjA3LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuMTMgU3RyaW5nLnByb3RvdHlwZS5zdWIoKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnc3ViJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHN1YigpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnc3ViJywgJycsICcnKTtcbiAgfTtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///207\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// B.2.3.14 String.prototype.sup()\n__webpack_require__(13)('sup', function (createHTML) {\n return function sup() {\n return createHTML(this, 'sup', '', '');\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnN1cC5qcz8yNDJhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjA4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuMTQgU3RyaW5nLnByb3RvdHlwZS5zdXAoKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnc3VwJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHN1cCgpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnc3VwJywgJycsICcnKTtcbiAgfTtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///208\n")},function(module,exports,__webpack_require__){eval("// 20.3.3.1 / 15.9.4.4 Date.now()\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Date', { now: function () { return new Date().getTime(); } });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZGF0ZS5ub3cuanM/NzhjZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXOztBQUVqQyw0QkFBNEIsbUJBQW1CLDZCQUE2QixFQUFFLEVBQUUiLCJmaWxlIjoiMjA5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMy4zLjEgLyAxNS45LjQuNCBEYXRlLm5vdygpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ0RhdGUnLCB7IG5vdzogZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IERhdGUoKS5nZXRUaW1lKCk7IH0gfSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///209\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar toObject = __webpack_require__(9);\nvar toPrimitive = __webpack_require__(23);\n\n$export($export.P + $export.F * __webpack_require__(3)(function () {\n return new Date(NaN).toJSON() !== null\n || Date.prototype.toJSON.call({ toISOString: function () { return 1; } }) !== 1;\n}), 'Date', {\n // eslint-disable-next-line no-unused-vars\n toJSON: function toJSON(key) {\n var O = toObject(this);\n var pv = toPrimitive(O);\n return typeof pv == 'number' && !isFinite(pv) ? null : O.toISOString();\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZGF0ZS50by1qc29uLmpzPzAyOTgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxrQkFBa0IsbUJBQU8sQ0FBQyxFQUFpQjs7QUFFM0MsZ0NBQWdDLG1CQUFPLENBQUMsQ0FBVTtBQUNsRDtBQUNBLG1DQUFtQywyQkFBMkIsVUFBVSxFQUFFLEVBQUU7QUFDNUUsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjEwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBuZXcgRGF0ZShOYU4pLnRvSlNPTigpICE9PSBudWxsXG4gICAgfHwgRGF0ZS5wcm90b3R5cGUudG9KU09OLmNhbGwoeyB0b0lTT1N0cmluZzogZnVuY3Rpb24gKCkgeyByZXR1cm4gMTsgfSB9KSAhPT0gMTtcbn0pLCAnRGF0ZScsIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gIHRvSlNPTjogZnVuY3Rpb24gdG9KU09OKGtleSkge1xuICAgIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gICAgdmFyIHB2ID0gdG9QcmltaXRpdmUoTyk7XG4gICAgcmV0dXJuIHR5cGVvZiBwdiA9PSAnbnVtYmVyJyAmJiAhaXNGaW5pdGUocHYpID8gbnVsbCA6IE8udG9JU09TdHJpbmcoKTtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///210\n")},function(module,exports,__webpack_require__){eval("// 20.3.4.36 / 15.9.5.43 Date.prototype.toISOString()\nvar $export = __webpack_require__(0);\nvar toISOString = __webpack_require__(212);\n\n// PhantomJS / old WebKit has a broken implementations\n$export($export.P + $export.F * (Date.prototype.toISOString !== toISOString), 'Date', {\n toISOString: toISOString\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZGF0ZS50by1pc28tc3RyaW5nLmpzPzhlYTUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxrQkFBa0IsbUJBQU8sQ0FBQyxHQUF1Qjs7QUFFakQ7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyMTEuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyMC4zLjQuMzYgLyAxNS45LjUuNDMgRGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmcoKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b0lTT1N0cmluZyA9IHJlcXVpcmUoJy4vX2RhdGUtdG8taXNvLXN0cmluZycpO1xuXG4vLyBQaGFudG9tSlMgLyBvbGQgV2ViS2l0IGhhcyBhIGJyb2tlbiBpbXBsZW1lbnRhdGlvbnNcbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKERhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nICE9PSB0b0lTT1N0cmluZyksICdEYXRlJywge1xuICB0b0lTT1N0cmluZzogdG9JU09TdHJpbmdcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///211\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// 20.3.4.36 / 15.9.5.43 Date.prototype.toISOString()\nvar fails = __webpack_require__(3);\nvar getTime = Date.prototype.getTime;\nvar $toISOString = Date.prototype.toISOString;\n\nvar lz = function (num) {\n return num > 9 ? num : '0' + num;\n};\n\n// PhantomJS / old WebKit has a broken implementations\nmodule.exports = (fails(function () {\n return $toISOString.call(new Date(-5e13 - 1)) != '0385-07-25T07:06:39.999Z';\n}) || !fails(function () {\n $toISOString.call(new Date(NaN));\n})) ? function toISOString() {\n if (!isFinite(getTime.call(this))) throw RangeError('Invalid time value');\n var d = this;\n var y = d.getUTCFullYear();\n var m = d.getUTCMilliseconds();\n var s = y < 0 ? '-' : y > 9999 ? '+' : '';\n return s + ('00000' + Math.abs(y)).slice(s ? -6 : -4) +\n '-' + lz(d.getUTCMonth() + 1) + '-' + lz(d.getUTCDate()) +\n 'T' + lz(d.getUTCHours()) + ':' + lz(d.getUTCMinutes()) +\n ':' + lz(d.getUTCSeconds()) + '.' + (m > 99 ? m : '0' + lz(m)) + 'Z';\n} : $toISOString;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZGF0ZS10by1pc28tc3RyaW5nLmpzPzhlZDAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBLFlBQVksbUJBQU8sQ0FBQyxDQUFVO0FBQzlCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjIxMi5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIDIwLjMuNC4zNiAvIDE1LjkuNS40MyBEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZygpXG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIGdldFRpbWUgPSBEYXRlLnByb3RvdHlwZS5nZXRUaW1lO1xudmFyICR0b0lTT1N0cmluZyA9IERhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nO1xuXG52YXIgbHogPSBmdW5jdGlvbiAobnVtKSB7XG4gIHJldHVybiBudW0gPiA5ID8gbnVtIDogJzAnICsgbnVtO1xufTtcblxuLy8gUGhhbnRvbUpTIC8gb2xkIFdlYktpdCBoYXMgYSBicm9rZW4gaW1wbGVtZW50YXRpb25zXG5tb2R1bGUuZXhwb3J0cyA9IChmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAkdG9JU09TdHJpbmcuY2FsbChuZXcgRGF0ZSgtNWUxMyAtIDEpKSAhPSAnMDM4NS0wNy0yNVQwNzowNjozOS45OTlaJztcbn0pIHx8ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICR0b0lTT1N0cmluZy5jYWxsKG5ldyBEYXRlKE5hTikpO1xufSkpID8gZnVuY3Rpb24gdG9JU09TdHJpbmcoKSB7XG4gIGlmICghaXNGaW5pdGUoZ2V0VGltZS5jYWxsKHRoaXMpKSkgdGhyb3cgUmFuZ2VFcnJvcignSW52YWxpZCB0aW1lIHZhbHVlJyk7XG4gIHZhciBkID0gdGhpcztcbiAgdmFyIHkgPSBkLmdldFVUQ0Z1bGxZZWFyKCk7XG4gIHZhciBtID0gZC5nZXRVVENNaWxsaXNlY29uZHMoKTtcbiAgdmFyIHMgPSB5IDwgMCA/ICctJyA6IHkgPiA5OTk5ID8gJysnIDogJyc7XG4gIHJldHVybiBzICsgKCcwMDAwMCcgKyBNYXRoLmFicyh5KSkuc2xpY2UocyA/IC02IDogLTQpICtcbiAgICAnLScgKyBseihkLmdldFVUQ01vbnRoKCkgKyAxKSArICctJyArIGx6KGQuZ2V0VVRDRGF0ZSgpKSArXG4gICAgJ1QnICsgbHooZC5nZXRVVENIb3VycygpKSArICc6JyArIGx6KGQuZ2V0VVRDTWludXRlcygpKSArXG4gICAgJzonICsgbHooZC5nZXRVVENTZWNvbmRzKCkpICsgJy4nICsgKG0gPiA5OSA/IG0gOiAnMCcgKyBseihtKSkgKyAnWic7XG59IDogJHRvSVNPU3RyaW5nO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///212\n")},function(module,exports,__webpack_require__){eval("var DateProto = Date.prototype;\nvar INVALID_DATE = 'Invalid Date';\nvar TO_STRING = 'toString';\nvar $toString = DateProto[TO_STRING];\nvar getTime = DateProto.getTime;\nif (new Date(NaN) + '' != INVALID_DATE) {\n __webpack_require__(12)(DateProto, TO_STRING, function toString() {\n var value = getTime.call(this);\n // eslint-disable-next-line no-self-compare\n return value === value ? $toString.call(this) : INVALID_DATE;\n });\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZGF0ZS50by1zdHJpbmcuanM/ODdiMyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLG1CQUFPLENBQUMsRUFBYTtBQUN2QjtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0giLCJmaWxlIjoiMjEzLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIERhdGVQcm90byA9IERhdGUucHJvdG90eXBlO1xudmFyIElOVkFMSURfREFURSA9ICdJbnZhbGlkIERhdGUnO1xudmFyIFRPX1NUUklORyA9ICd0b1N0cmluZyc7XG52YXIgJHRvU3RyaW5nID0gRGF0ZVByb3RvW1RPX1NUUklOR107XG52YXIgZ2V0VGltZSA9IERhdGVQcm90by5nZXRUaW1lO1xuaWYgKG5ldyBEYXRlKE5hTikgKyAnJyAhPSBJTlZBTElEX0RBVEUpIHtcbiAgcmVxdWlyZSgnLi9fcmVkZWZpbmUnKShEYXRlUHJvdG8sIFRPX1NUUklORywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgdmFyIHZhbHVlID0gZ2V0VGltZS5jYWxsKHRoaXMpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICByZXR1cm4gdmFsdWUgPT09IHZhbHVlID8gJHRvU3RyaW5nLmNhbGwodGhpcykgOiBJTlZBTElEX0RBVEU7XG4gIH0pO1xufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///213\n")},function(module,exports,__webpack_require__){eval("var TO_PRIMITIVE = __webpack_require__(5)('toPrimitive');\nvar proto = Date.prototype;\n\nif (!(TO_PRIMITIVE in proto)) __webpack_require__(11)(proto, TO_PRIMITIVE, __webpack_require__(215));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZGF0ZS50by1wcmltaXRpdmUuanM/YzhjZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxtQkFBbUIsbUJBQU8sQ0FBQyxDQUFRO0FBQ25DOztBQUVBLDhCQUE4QixtQkFBTyxDQUFDLEVBQVMsdUJBQXVCLG1CQUFPLENBQUMsR0FBc0IiLCJmaWxlIjoiMjE0LmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIFRPX1BSSU1JVElWRSA9IHJlcXVpcmUoJy4vX3drcycpKCd0b1ByaW1pdGl2ZScpO1xudmFyIHByb3RvID0gRGF0ZS5wcm90b3R5cGU7XG5cbmlmICghKFRPX1BSSU1JVElWRSBpbiBwcm90bykpIHJlcXVpcmUoJy4vX2hpZGUnKShwcm90bywgVE9fUFJJTUlUSVZFLCByZXF1aXJlKCcuL19kYXRlLXRvLXByaW1pdGl2ZScpKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///214\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar anObject = __webpack_require__(1);\nvar toPrimitive = __webpack_require__(23);\nvar NUMBER = 'number';\n\nmodule.exports = function (hint) {\n if (hint !== 'string' && hint !== NUMBER && hint !== 'default') throw TypeError('Incorrect hint');\n return toPrimitive(anObject(this), hint != NUMBER);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZGF0ZS10by1wcmltaXRpdmUuanM/ODM4MSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGtCQUFrQixtQkFBTyxDQUFDLEVBQWlCO0FBQzNDOztBQUVBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjIxNS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG52YXIgTlVNQkVSID0gJ251bWJlcic7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGhpbnQpIHtcbiAgaWYgKGhpbnQgIT09ICdzdHJpbmcnICYmIGhpbnQgIT09IE5VTUJFUiAmJiBoaW50ICE9PSAnZGVmYXVsdCcpIHRocm93IFR5cGVFcnJvcignSW5jb3JyZWN0IGhpbnQnKTtcbiAgcmV0dXJuIHRvUHJpbWl0aXZlKGFuT2JqZWN0KHRoaXMpLCBoaW50ICE9IE5VTUJFUik7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///215\n")},function(module,exports,__webpack_require__){eval("// 22.1.2.2 / 15.4.3.2 Array.isArray(arg)\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Array', { isArray: __webpack_require__(54) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuaXMtYXJyYXkuanM/MmNhZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXOztBQUVqQyw2QkFBNkIsVUFBVSxtQkFBTyxDQUFDLEVBQWEsR0FBRyIsImZpbGUiOiIyMTYuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyMi4xLjIuMiAvIDE1LjQuMy4yIEFycmF5LmlzQXJyYXkoYXJnKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdBcnJheScsIHsgaXNBcnJheTogcmVxdWlyZSgnLi9faXMtYXJyYXknKSB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///216\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar ctx = __webpack_require__(19);\nvar $export = __webpack_require__(0);\nvar toObject = __webpack_require__(9);\nvar call = __webpack_require__(109);\nvar isArrayIter = __webpack_require__(81);\nvar toLength = __webpack_require__(6);\nvar createProperty = __webpack_require__(82);\nvar getIterFn = __webpack_require__(83);\n\n$export($export.S + $export.F * !__webpack_require__(57)(function (iter) { Array.from(iter); }), 'Array', {\n // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)\n from: function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n var O = toObject(arrayLike);\n var C = typeof this == 'function' ? this : Array;\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var index = 0;\n var iterFn = getIterFn(O);\n var length, result, step, iterator;\n if (mapping) mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);\n // if object isn't iterable or it's array with default iterator - use simple case\n if (iterFn != undefined && !(C == Array && isArrayIter(iterFn))) {\n for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) {\n createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);\n }\n } else {\n length = toLength(O.length);\n for (result = new C(length); length > index; index++) {\n createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);\n }\n }\n result.length = index;\n return result;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZnJvbS5qcz8xYzRjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsVUFBVSxtQkFBTyxDQUFDLEVBQVE7QUFDMUIsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsV0FBVyxtQkFBTyxDQUFDLEdBQWM7QUFDakMsa0JBQWtCLG1CQUFPLENBQUMsRUFBa0I7QUFDNUMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMscUJBQXFCLG1CQUFPLENBQUMsRUFBb0I7QUFDakQsZ0JBQWdCLG1CQUFPLENBQUMsRUFBNEI7O0FBRXBELGlDQUFpQyxtQkFBTyxDQUFDLEVBQWdCLG1CQUFtQixrQkFBa0IsRUFBRTtBQUNoRztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVEQUF1RCxnQ0FBZ0M7QUFDdkY7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLGtDQUFrQyxnQkFBZ0I7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyMTcuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4vX2l0ZXItY2FsbCcpO1xudmFyIGlzQXJyYXlJdGVyID0gcmVxdWlyZSgnLi9faXMtYXJyYXktaXRlcicpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSByZXF1aXJlKCcuL19jcmVhdGUtcHJvcGVydHknKTtcbnZhciBnZXRJdGVyRm4gPSByZXF1aXJlKCcuL2NvcmUuZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19pdGVyLWRldGVjdCcpKGZ1bmN0aW9uIChpdGVyKSB7IEFycmF5LmZyb20oaXRlcik7IH0pLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMi4xIEFycmF5LmZyb20oYXJyYXlMaWtlLCBtYXBmbiA9IHVuZGVmaW5lZCwgdGhpc0FyZyA9IHVuZGVmaW5lZClcbiAgZnJvbTogZnVuY3Rpb24gZnJvbShhcnJheUxpa2UgLyogLCBtYXBmbiA9IHVuZGVmaW5lZCwgdGhpc0FyZyA9IHVuZGVmaW5lZCAqLykge1xuICAgIHZhciBPID0gdG9PYmplY3QoYXJyYXlMaWtlKTtcbiAgICB2YXIgQyA9IHR5cGVvZiB0aGlzID09ICdmdW5jdGlvbicgPyB0aGlzIDogQXJyYXk7XG4gICAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBtYXBmbiA9IGFMZW4gPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkO1xuICAgIHZhciBtYXBwaW5nID0gbWFwZm4gIT09IHVuZGVmaW5lZDtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciBpdGVyRm4gPSBnZXRJdGVyRm4oTyk7XG4gICAgdmFyIGxlbmd0aCwgcmVzdWx0LCBzdGVwLCBpdGVyYXRvcjtcbiAgICBpZiAobWFwcGluZykgbWFwZm4gPSBjdHgobWFwZm4sIGFMZW4gPiAyID8gYXJndW1lbnRzWzJdIDogdW5kZWZpbmVkLCAyKTtcbiAgICAvLyBpZiBvYmplY3QgaXNuJ3QgaXRlcmFibGUgb3IgaXQncyBhcnJheSB3aXRoIGRlZmF1bHQgaXRlcmF0b3IgLSB1c2Ugc2ltcGxlIGNhc2VcbiAgICBpZiAoaXRlckZuICE9IHVuZGVmaW5lZCAmJiAhKEMgPT0gQXJyYXkgJiYgaXNBcnJheUl0ZXIoaXRlckZuKSkpIHtcbiAgICAgIGZvciAoaXRlcmF0b3IgPSBpdGVyRm4uY2FsbChPKSwgcmVzdWx0ID0gbmV3IEMoKTsgIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lOyBpbmRleCsrKSB7XG4gICAgICAgIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwgaW5kZXgsIG1hcHBpbmcgPyBjYWxsKGl0ZXJhdG9yLCBtYXBmbiwgW3N0ZXAudmFsdWUsIGluZGV4XSwgdHJ1ZSkgOiBzdGVwLnZhbHVlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICAgICAgZm9yIChyZXN1bHQgPSBuZXcgQyhsZW5ndGgpOyBsZW5ndGggPiBpbmRleDsgaW5kZXgrKykge1xuICAgICAgICBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIGluZGV4LCBtYXBwaW5nID8gbWFwZm4oT1tpbmRleF0sIGluZGV4KSA6IE9baW5kZXhdKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmVzdWx0Lmxlbmd0aCA9IGluZGV4O1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///217\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar createProperty = __webpack_require__(82);\n\n// WebKit Array.of isn't generic\n$export($export.S + $export.F * __webpack_require__(3)(function () {\n function F() { /* empty */ }\n return !(Array.of.call(F) instanceof F);\n}), 'Array', {\n // 22.1.2.3 Array.of( ...items)\n of: function of(/* ...args */) {\n var index = 0;\n var aLen = arguments.length;\n var result = new (typeof this == 'function' ? this : Array)(aLen);\n while (aLen > index) createProperty(result, index, arguments[index++]);\n result.length = aLen;\n return result;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkub2YuanM/ZTgwNCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLHFCQUFxQixtQkFBTyxDQUFDLEVBQW9COztBQUVqRDtBQUNBLGdDQUFnQyxtQkFBTyxDQUFDLENBQVU7QUFDbEQsZ0JBQWdCO0FBQ2hCO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjE4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX2NyZWF0ZS1wcm9wZXJ0eScpO1xuXG4vLyBXZWJLaXQgQXJyYXkub2YgaXNuJ3QgZ2VuZXJpY1xuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gRigpIHsgLyogZW1wdHkgKi8gfVxuICByZXR1cm4gIShBcnJheS5vZi5jYWxsKEYpIGluc3RhbmNlb2YgRik7XG59KSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjIuMyBBcnJheS5vZiggLi4uaXRlbXMpXG4gIG9mOiBmdW5jdGlvbiBvZigvKiAuLi5hcmdzICovKSB7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIHJlc3VsdCA9IG5ldyAodHlwZW9mIHRoaXMgPT0gJ2Z1bmN0aW9uJyA/IHRoaXMgOiBBcnJheSkoYUxlbik7XG4gICAgd2hpbGUgKGFMZW4gPiBpbmRleCkgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBpbmRleCwgYXJndW1lbnRzW2luZGV4KytdKTtcbiAgICByZXN1bHQubGVuZ3RoID0gYUxlbjtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///218\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// 22.1.3.13 Array.prototype.join(separator)\nvar $export = __webpack_require__(0);\nvar toIObject = __webpack_require__(15);\nvar arrayJoin = [].join;\n\n// fallback for not array-like strings\n$export($export.P + $export.F * (__webpack_require__(48) != Object || !__webpack_require__(22)(arrayJoin)), 'Array', {\n join: function join(separator) {\n return arrayJoin.call(toIObject(this), separator === undefined ? ',' : separator);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuam9pbi5qcz8zNzNmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDOztBQUVBO0FBQ0EsaUNBQWlDLG1CQUFPLENBQUMsRUFBWSxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFrQjtBQUMvRjtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjIxOS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIDIyLjEuMy4xMyBBcnJheS5wcm90b3R5cGUuam9pbihzZXBhcmF0b3IpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciBhcnJheUpvaW4gPSBbXS5qb2luO1xuXG4vLyBmYWxsYmFjayBmb3Igbm90IGFycmF5LWxpa2Ugc3RyaW5nc1xuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAocmVxdWlyZSgnLi9faW9iamVjdCcpICE9IE9iamVjdCB8fCAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKGFycmF5Sm9pbikpLCAnQXJyYXknLCB7XG4gIGpvaW46IGZ1bmN0aW9uIGpvaW4oc2VwYXJhdG9yKSB7XG4gICAgcmV0dXJuIGFycmF5Sm9pbi5jYWxsKHRvSU9iamVjdCh0aGlzKSwgc2VwYXJhdG9yID09PSB1bmRlZmluZWQgPyAnLCcgOiBzZXBhcmF0b3IpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///219\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar html = __webpack_require__(70);\nvar cof = __webpack_require__(20);\nvar toAbsoluteIndex = __webpack_require__(35);\nvar toLength = __webpack_require__(6);\nvar arraySlice = [].slice;\n\n// fallback for not array-like ES3 strings and DOM objects\n$export($export.P + $export.F * __webpack_require__(3)(function () {\n if (html) arraySlice.call(html);\n}), 'Array', {\n slice: function slice(begin, end) {\n var len = toLength(this.length);\n var klass = cof(this);\n end = end === undefined ? len : end;\n if (klass == 'Array') return arraySlice.call(this, begin, end);\n var start = toAbsoluteIndex(begin, len);\n var upTo = toAbsoluteIndex(end, len);\n var size = toLength(upTo - start);\n var cloned = new Array(size);\n var i = 0;\n for (; i < size; i++) cloned[i] = klass == 'String'\n ? this.charAt(start + i)\n : this[start + i];\n return cloned;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuc2xpY2UuanM/MjNiZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLFdBQVcsbUJBQU8sQ0FBQyxFQUFTO0FBQzVCLFVBQVUsbUJBQU8sQ0FBQyxFQUFRO0FBQzFCLHNCQUFzQixtQkFBTyxDQUFDLEVBQXNCO0FBQ3BELGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDOztBQUVBO0FBQ0EsZ0NBQWdDLG1CQUFPLENBQUMsQ0FBVTtBQUNsRDtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsVUFBVTtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjIwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBodG1sID0gcmVxdWlyZSgnLi9faHRtbCcpO1xudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4vX3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBhcnJheVNsaWNlID0gW10uc2xpY2U7XG5cbi8vIGZhbGxiYWNrIGZvciBub3QgYXJyYXktbGlrZSBFUzMgc3RyaW5ncyBhbmQgRE9NIG9iamVjdHNcbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIGlmIChodG1sKSBhcnJheVNsaWNlLmNhbGwoaHRtbCk7XG59KSwgJ0FycmF5Jywge1xuICBzbGljZTogZnVuY3Rpb24gc2xpY2UoYmVnaW4sIGVuZCkge1xuICAgIHZhciBsZW4gPSB0b0xlbmd0aCh0aGlzLmxlbmd0aCk7XG4gICAgdmFyIGtsYXNzID0gY29mKHRoaXMpO1xuICAgIGVuZCA9IGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuIDogZW5kO1xuICAgIGlmIChrbGFzcyA9PSAnQXJyYXknKSByZXR1cm4gYXJyYXlTbGljZS5jYWxsKHRoaXMsIGJlZ2luLCBlbmQpO1xuICAgIHZhciBzdGFydCA9IHRvQWJzb2x1dGVJbmRleChiZWdpbiwgbGVuKTtcbiAgICB2YXIgdXBUbyA9IHRvQWJzb2x1dGVJbmRleChlbmQsIGxlbik7XG4gICAgdmFyIHNpemUgPSB0b0xlbmd0aCh1cFRvIC0gc3RhcnQpO1xuICAgIHZhciBjbG9uZWQgPSBuZXcgQXJyYXkoc2l6ZSk7XG4gICAgdmFyIGkgPSAwO1xuICAgIGZvciAoOyBpIDwgc2l6ZTsgaSsrKSBjbG9uZWRbaV0gPSBrbGFzcyA9PSAnU3RyaW5nJ1xuICAgICAgPyB0aGlzLmNoYXJBdChzdGFydCArIGkpXG4gICAgICA6IHRoaXNbc3RhcnQgKyBpXTtcbiAgICByZXR1cm4gY2xvbmVkO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///220\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar aFunction = __webpack_require__(10);\nvar toObject = __webpack_require__(9);\nvar fails = __webpack_require__(3);\nvar $sort = [].sort;\nvar test = [1, 2, 3];\n\n$export($export.P + $export.F * (fails(function () {\n // IE8-\n test.sort(undefined);\n}) || !fails(function () {\n // V8 bug\n test.sort(null);\n // Old WebKit\n}) || !__webpack_require__(22)($sort)), 'Array', {\n // 22.1.3.25 Array.prototype.sort(comparefn)\n sort: function sort(comparefn) {\n return comparefn === undefined\n ? $sort.call(toObject(this))\n : $sort.call(toObject(this), aFunction(comparefn));\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuc29ydC5qcz81NWRkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2QyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxZQUFZLG1CQUFPLENBQUMsQ0FBVTtBQUM5QjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQSxDQUFDLE1BQU0sbUJBQU8sQ0FBQyxFQUFrQjtBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjIyMS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyICRzb3J0ID0gW10uc29ydDtcbnZhciB0ZXN0ID0gWzEsIDIsIDNdO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIChmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIElFOC1cbiAgdGVzdC5zb3J0KHVuZGVmaW5lZCk7XG59KSB8fCAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBWOCBidWdcbiAgdGVzdC5zb3J0KG51bGwpO1xuICAvLyBPbGQgV2ViS2l0XG59KSB8fCAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKCRzb3J0KSksICdBcnJheScsIHtcbiAgLy8gMjIuMS4zLjI1IEFycmF5LnByb3RvdHlwZS5zb3J0KGNvbXBhcmVmbilcbiAgc29ydDogZnVuY3Rpb24gc29ydChjb21wYXJlZm4pIHtcbiAgICByZXR1cm4gY29tcGFyZWZuID09PSB1bmRlZmluZWRcbiAgICAgID8gJHNvcnQuY2FsbCh0b09iamVjdCh0aGlzKSlcbiAgICAgIDogJHNvcnQuY2FsbCh0b09iamVjdCh0aGlzKSwgYUZ1bmN0aW9uKGNvbXBhcmVmbikpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///221\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar $forEach = __webpack_require__(26)(0);\nvar STRICT = __webpack_require__(22)([].forEach, true);\n\n$export($export.P + $export.F * !STRICT, 'Array', {\n // 22.1.3.10 / 15.4.4.18 Array.prototype.forEach(callbackfn [, thisArg])\n forEach: function forEach(callbackfn /* , thisArg */) {\n return $forEach(this, callbackfn, arguments[1]);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZm9yLWVhY2guanM/ZjNlMiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyxFQUFrQjtBQUN6QyxhQUFhLG1CQUFPLENBQUMsRUFBa0I7O0FBRXZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjIyMi5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGZvckVhY2ggPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJykoMCk7XG52YXIgU1RSSUNUID0gcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKFtdLmZvckVhY2gsIHRydWUpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFTVFJJQ1QsICdBcnJheScsIHtcbiAgLy8gMjIuMS4zLjEwIC8gMTUuNC40LjE4IEFycmF5LnByb3RvdHlwZS5mb3JFYWNoKGNhbGxiYWNrZm4gWywgdGhpc0FyZ10pXG4gIGZvckVhY2g6IGZ1bmN0aW9uIGZvckVhY2goY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJGZvckVhY2godGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzWzFdKTtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///222\n")},function(module,exports,__webpack_require__){eval("var isObject = __webpack_require__(4);\nvar isArray = __webpack_require__(54);\nvar SPECIES = __webpack_require__(5)('species');\n\nmodule.exports = function (original) {\n var C;\n if (isArray(original)) {\n C = original.constructor;\n // cross-realm fallback\n if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;\n if (isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n } return C === undefined ? Array : C;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktc3BlY2llcy1jb25zdHJ1Y3Rvci5qcz9lODUzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGNBQWMsbUJBQU8sQ0FBQyxFQUFhO0FBQ25DLGNBQWMsbUJBQU8sQ0FBQyxDQUFROztBQUU5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCIsImZpbGUiOiIyMjMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi9faXMtYXJyYXknKTtcbnZhciBTUEVDSUVTID0gcmVxdWlyZSgnLi9fd2tzJykoJ3NwZWNpZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3JpZ2luYWwpIHtcbiAgdmFyIEM7XG4gIGlmIChpc0FycmF5KG9yaWdpbmFsKSkge1xuICAgIEMgPSBvcmlnaW5hbC5jb25zdHJ1Y3RvcjtcbiAgICAvLyBjcm9zcy1yZWFsbSBmYWxsYmFja1xuICAgIGlmICh0eXBlb2YgQyA9PSAnZnVuY3Rpb24nICYmIChDID09PSBBcnJheSB8fCBpc0FycmF5KEMucHJvdG90eXBlKSkpIEMgPSB1bmRlZmluZWQ7XG4gICAgaWYgKGlzT2JqZWN0KEMpKSB7XG4gICAgICBDID0gQ1tTUEVDSUVTXTtcbiAgICAgIGlmIChDID09PSBudWxsKSBDID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfSByZXR1cm4gQyA9PT0gdW5kZWZpbmVkID8gQXJyYXkgOiBDO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///223\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar $map = __webpack_require__(26)(1);\n\n$export($export.P + $export.F * !__webpack_require__(22)([].map, true), 'Array', {\n // 22.1.3.15 / 15.4.4.19 Array.prototype.map(callbackfn [, thisArg])\n map: function map(callbackfn /* , thisArg */) {\n return $map(this, callbackfn, arguments[1]);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkubWFwLmpzPzZkNjciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxXQUFXLG1CQUFPLENBQUMsRUFBa0I7O0FBRXJDLGlDQUFpQyxtQkFBTyxDQUFDLEVBQWtCO0FBQzNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyMjQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRtYXAgPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJykoMSk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogIXJlcXVpcmUoJy4vX3N0cmljdC1tZXRob2QnKShbXS5tYXAsIHRydWUpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy4xNSAvIDE1LjQuNC4xOSBBcnJheS5wcm90b3R5cGUubWFwKGNhbGxiYWNrZm4gWywgdGhpc0FyZ10pXG4gIG1hcDogZnVuY3Rpb24gbWFwKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgcmV0dXJuICRtYXAodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzWzFdKTtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///224\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar $filter = __webpack_require__(26)(2);\n\n$export($export.P + $export.F * !__webpack_require__(22)([].filter, true), 'Array', {\n // 22.1.3.7 / 15.4.4.20 Array.prototype.filter(callbackfn [, thisArg])\n filter: function filter(callbackfn /* , thisArg */) {\n return $filter(this, callbackfn, arguments[1]);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZmlsdGVyLmpzP2QyNWYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxjQUFjLG1CQUFPLENBQUMsRUFBa0I7O0FBRXhDLGlDQUFpQyxtQkFBTyxDQUFDLEVBQWtCO0FBQzNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyMjUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRmaWx0ZXIgPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJykoMik7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogIXJlcXVpcmUoJy4vX3N0cmljdC1tZXRob2QnKShbXS5maWx0ZXIsIHRydWUpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy43IC8gMTUuNC40LjIwIEFycmF5LnByb3RvdHlwZS5maWx0ZXIoY2FsbGJhY2tmbiBbLCB0aGlzQXJnXSlcbiAgZmlsdGVyOiBmdW5jdGlvbiBmaWx0ZXIoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJGZpbHRlcih0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHNbMV0pO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///225\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar $some = __webpack_require__(26)(3);\n\n$export($export.P + $export.F * !__webpack_require__(22)([].some, true), 'Array', {\n // 22.1.3.23 / 15.4.4.17 Array.prototype.some(callbackfn [, thisArg])\n some: function some(callbackfn /* , thisArg */) {\n return $some(this, callbackfn, arguments[1]);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuc29tZS5qcz83NTlmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsWUFBWSxtQkFBTyxDQUFDLEVBQWtCOztBQUV0QyxpQ0FBaUMsbUJBQU8sQ0FBQyxFQUFrQjtBQUMzRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjI2LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkc29tZSA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKSgzKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKFtdLnNvbWUsIHRydWUpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy4yMyAvIDE1LjQuNC4xNyBBcnJheS5wcm90b3R5cGUuc29tZShjYWxsYmFja2ZuIFssIHRoaXNBcmddKVxuICBzb21lOiBmdW5jdGlvbiBzb21lKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgcmV0dXJuICRzb21lKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50c1sxXSk7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///226\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar $every = __webpack_require__(26)(4);\n\n$export($export.P + $export.F * !__webpack_require__(22)([].every, true), 'Array', {\n // 22.1.3.5 / 15.4.4.16 Array.prototype.every(callbackfn [, thisArg])\n every: function every(callbackfn /* , thisArg */) {\n return $every(this, callbackfn, arguments[1]);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZXZlcnkuanM/NjA5NSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGFBQWEsbUJBQU8sQ0FBQyxFQUFrQjs7QUFFdkMsaUNBQWlDLG1CQUFPLENBQUMsRUFBa0I7QUFDM0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjIyNy5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGV2ZXJ5ID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpKDQpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoW10uZXZlcnksIHRydWUpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy41IC8gMTUuNC40LjE2IEFycmF5LnByb3RvdHlwZS5ldmVyeShjYWxsYmFja2ZuIFssIHRoaXNBcmddKVxuICBldmVyeTogZnVuY3Rpb24gZXZlcnkoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJGV2ZXJ5KHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50c1sxXSk7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///227\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar $reduce = __webpack_require__(110);\n\n$export($export.P + $export.F * !__webpack_require__(22)([].reduce, true), 'Array', {\n // 22.1.3.18 / 15.4.4.21 Array.prototype.reduce(callbackfn [, initialValue])\n reduce: function reduce(callbackfn /* , initialValue */) {\n return $reduce(this, callbackfn, arguments.length, arguments[1], false);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkucmVkdWNlLmpzPzBjZDgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxjQUFjLG1CQUFPLENBQUMsR0FBaUI7O0FBRXZDLGlDQUFpQyxtQkFBTyxDQUFDLEVBQWtCO0FBQzNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyMjguanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRyZWR1Y2UgPSByZXF1aXJlKCcuL19hcnJheS1yZWR1Y2UnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKFtdLnJlZHVjZSwgdHJ1ZSksICdBcnJheScsIHtcbiAgLy8gMjIuMS4zLjE4IC8gMTUuNC40LjIxIEFycmF5LnByb3RvdHlwZS5yZWR1Y2UoY2FsbGJhY2tmbiBbLCBpbml0aWFsVmFsdWVdKVxuICByZWR1Y2U6IGZ1bmN0aW9uIHJlZHVjZShjYWxsYmFja2ZuIC8qICwgaW5pdGlhbFZhbHVlICovKSB7XG4gICAgcmV0dXJuICRyZWR1Y2UodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCwgYXJndW1lbnRzWzFdLCBmYWxzZSk7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///228\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar $reduce = __webpack_require__(110);\n\n$export($export.P + $export.F * !__webpack_require__(22)([].reduceRight, true), 'Array', {\n // 22.1.3.19 / 15.4.4.22 Array.prototype.reduceRight(callbackfn [, initialValue])\n reduceRight: function reduceRight(callbackfn /* , initialValue */) {\n return $reduce(this, callbackfn, arguments.length, arguments[1], true);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkucmVkdWNlLXJpZ2h0LmpzPzQ4ZjgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxjQUFjLG1CQUFPLENBQUMsR0FBaUI7O0FBRXZDLGlDQUFpQyxtQkFBTyxDQUFDLEVBQWtCO0FBQzNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyMjkuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRyZWR1Y2UgPSByZXF1aXJlKCcuL19hcnJheS1yZWR1Y2UnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKFtdLnJlZHVjZVJpZ2h0LCB0cnVlKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMTkgLyAxNS40LjQuMjIgQXJyYXkucHJvdG90eXBlLnJlZHVjZVJpZ2h0KGNhbGxiYWNrZm4gWywgaW5pdGlhbFZhbHVlXSlcbiAgcmVkdWNlUmlnaHQ6IGZ1bmN0aW9uIHJlZHVjZVJpZ2h0KGNhbGxiYWNrZm4gLyogLCBpbml0aWFsVmFsdWUgKi8pIHtcbiAgICByZXR1cm4gJHJlZHVjZSh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoLCBhcmd1bWVudHNbMV0sIHRydWUpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///229\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar $indexOf = __webpack_require__(52)(false);\nvar $native = [].indexOf;\nvar NEGATIVE_ZERO = !!$native && 1 / [1].indexOf(1, -0) < 0;\n\n$export($export.P + $export.F * (NEGATIVE_ZERO || !__webpack_require__(22)($native)), 'Array', {\n // 22.1.3.11 / 15.4.4.14 Array.prototype.indexOf(searchElement [, fromIndex])\n indexOf: function indexOf(searchElement /* , fromIndex = 0 */) {\n return NEGATIVE_ZERO\n // convert -0 to +0\n ? $native.apply(this, arguments) || 0\n : $indexOf(this, searchElement, arguments[1]);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuaW5kZXgtb2YuanM/NTdlNyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyxFQUFtQjtBQUMxQztBQUNBOztBQUVBLG1EQUFtRCxtQkFBTyxDQUFDLEVBQWtCO0FBQzdFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyMzAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRpbmRleE9mID0gcmVxdWlyZSgnLi9fYXJyYXktaW5jbHVkZXMnKShmYWxzZSk7XG52YXIgJG5hdGl2ZSA9IFtdLmluZGV4T2Y7XG52YXIgTkVHQVRJVkVfWkVSTyA9ICEhJG5hdGl2ZSAmJiAxIC8gWzFdLmluZGV4T2YoMSwgLTApIDwgMDtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoTkVHQVRJVkVfWkVSTyB8fCAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKCRuYXRpdmUpKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMTEgLyAxNS40LjQuMTQgQXJyYXkucHJvdG90eXBlLmluZGV4T2Yoc2VhcmNoRWxlbWVudCBbLCBmcm9tSW5kZXhdKVxuICBpbmRleE9mOiBmdW5jdGlvbiBpbmRleE9mKHNlYXJjaEVsZW1lbnQgLyogLCBmcm9tSW5kZXggPSAwICovKSB7XG4gICAgcmV0dXJuIE5FR0FUSVZFX1pFUk9cbiAgICAgIC8vIGNvbnZlcnQgLTAgdG8gKzBcbiAgICAgID8gJG5hdGl2ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IDBcbiAgICAgIDogJGluZGV4T2YodGhpcywgc2VhcmNoRWxlbWVudCwgYXJndW1lbnRzWzFdKTtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///230\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar toIObject = __webpack_require__(15);\nvar toInteger = __webpack_require__(21);\nvar toLength = __webpack_require__(6);\nvar $native = [].lastIndexOf;\nvar NEGATIVE_ZERO = !!$native && 1 / [1].lastIndexOf(1, -0) < 0;\n\n$export($export.P + $export.F * (NEGATIVE_ZERO || !__webpack_require__(22)($native)), 'Array', {\n // 22.1.3.14 / 15.4.4.15 Array.prototype.lastIndexOf(searchElement [, fromIndex])\n lastIndexOf: function lastIndexOf(searchElement /* , fromIndex = @[*-1] */) {\n // convert -0 to +0\n if (NEGATIVE_ZERO) return $native.apply(this, arguments) || 0;\n var O = toIObject(this);\n var length = toLength(O.length);\n var index = length - 1;\n if (arguments.length > 1) index = Math.min(index, toInteger(arguments[1]));\n if (index < 0) index = length + index;\n for (;index >= 0; index--) if (index in O) if (O[index] === searchElement) return index || 0;\n return -1;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkubGFzdC1pbmRleC1vZi5qcz85ODY1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2QyxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDO0FBQ0E7O0FBRUEsbURBQW1ELG1CQUFPLENBQUMsRUFBa0I7QUFDN0U7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVSxXQUFXO0FBQ3JCO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjIzMS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyICRuYXRpdmUgPSBbXS5sYXN0SW5kZXhPZjtcbnZhciBORUdBVElWRV9aRVJPID0gISEkbmF0aXZlICYmIDEgLyBbMV0ubGFzdEluZGV4T2YoMSwgLTApIDwgMDtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoTkVHQVRJVkVfWkVSTyB8fCAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKCRuYXRpdmUpKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMTQgLyAxNS40LjQuMTUgQXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mKHNlYXJjaEVsZW1lbnQgWywgZnJvbUluZGV4XSlcbiAgbGFzdEluZGV4T2Y6IGZ1bmN0aW9uIGxhc3RJbmRleE9mKHNlYXJjaEVsZW1lbnQgLyogLCBmcm9tSW5kZXggPSBAWyotMV0gKi8pIHtcbiAgICAvLyBjb252ZXJ0IC0wIHRvICswXG4gICAgaWYgKE5FR0FUSVZFX1pFUk8pIHJldHVybiAkbmF0aXZlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgMDtcbiAgICB2YXIgTyA9IHRvSU9iamVjdCh0aGlzKTtcbiAgICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICAgIHZhciBpbmRleCA9IGxlbmd0aCAtIDE7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSBpbmRleCA9IE1hdGgubWluKGluZGV4LCB0b0ludGVnZXIoYXJndW1lbnRzWzFdKSk7XG4gICAgaWYgKGluZGV4IDwgMCkgaW5kZXggPSBsZW5ndGggKyBpbmRleDtcbiAgICBmb3IgKDtpbmRleCA+PSAwOyBpbmRleC0tKSBpZiAoaW5kZXggaW4gTykgaWYgKE9baW5kZXhdID09PSBzZWFyY2hFbGVtZW50KSByZXR1cm4gaW5kZXggfHwgMDtcbiAgICByZXR1cm4gLTE7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///231\n")},function(module,exports,__webpack_require__){eval("// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\nvar $export = __webpack_require__(0);\n\n$export($export.P, 'Array', { copyWithin: __webpack_require__(111) });\n\n__webpack_require__(31)('copyWithin');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuY29weS13aXRoaW4uanM/NzQ0ZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXOztBQUVqQyw2QkFBNkIsYUFBYSxtQkFBTyxDQUFDLEdBQXNCLEdBQUc7O0FBRTNFLG1CQUFPLENBQUMsRUFBdUIiLCJmaWxlIjoiMjMyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjIuMS4zLjMgQXJyYXkucHJvdG90eXBlLmNvcHlXaXRoaW4odGFyZ2V0LCBzdGFydCwgZW5kID0gdGhpcy5sZW5ndGgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCwgJ0FycmF5JywgeyBjb3B5V2l0aGluOiByZXF1aXJlKCcuL19hcnJheS1jb3B5LXdpdGhpbicpIH0pO1xuXG5yZXF1aXJlKCcuL19hZGQtdG8tdW5zY29wYWJsZXMnKSgnY29weVdpdGhpbicpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///232\n")},function(module,exports,__webpack_require__){eval("// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\nvar $export = __webpack_require__(0);\n\n$export($export.P, 'Array', { fill: __webpack_require__(85) });\n\n__webpack_require__(31)('fill');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZmlsbC5qcz82YzdiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDLDZCQUE2QixPQUFPLG1CQUFPLENBQUMsRUFBZSxHQUFHOztBQUU5RCxtQkFBTyxDQUFDLEVBQXVCIiwiZmlsZSI6IjIzMy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDIyLjEuMy42IEFycmF5LnByb3RvdHlwZS5maWxsKHZhbHVlLCBzdGFydCA9IDAsIGVuZCA9IHRoaXMubGVuZ3RoKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdBcnJheScsIHsgZmlsbDogcmVxdWlyZSgnLi9fYXJyYXktZmlsbCcpIH0pO1xuXG5yZXF1aXJlKCcuL19hZGQtdG8tdW5zY29wYWJsZXMnKSgnZmlsbCcpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///233\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// 22.1.3.8 Array.prototype.find(predicate, thisArg = undefined)\nvar $export = __webpack_require__(0);\nvar $find = __webpack_require__(26)(5);\nvar KEY = 'find';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n find: function find(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n__webpack_require__(31)(KEY);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZmluZC5qcz83NTE0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxZQUFZLG1CQUFPLENBQUMsRUFBa0I7QUFDdEM7QUFDQTtBQUNBO0FBQ0EsMENBQTBDLGdCQUFnQixFQUFFO0FBQzVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELG1CQUFPLENBQUMsRUFBdUIiLCJmaWxlIjoiMjM0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gMjIuMS4zLjggQXJyYXkucHJvdG90eXBlLmZpbmQocHJlZGljYXRlLCB0aGlzQXJnID0gdW5kZWZpbmVkKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkZmluZCA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKSg1KTtcbnZhciBLRVkgPSAnZmluZCc7XG52YXIgZm9yY2VkID0gdHJ1ZTtcbi8vIFNob3VsZG4ndCBza2lwIGhvbGVzXG5pZiAoS0VZIGluIFtdKSBBcnJheSgxKVtLRVldKGZ1bmN0aW9uICgpIHsgZm9yY2VkID0gZmFsc2U7IH0pO1xuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiBmb3JjZWQsICdBcnJheScsIHtcbiAgZmluZDogZnVuY3Rpb24gZmluZChjYWxsYmFja2ZuIC8qICwgdGhhdCA9IHVuZGVmaW5lZCAqLykge1xuICAgIHJldHVybiAkZmluZCh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xucmVxdWlyZSgnLi9fYWRkLXRvLXVuc2NvcGFibGVzJykoS0VZKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///234\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// 22.1.3.9 Array.prototype.findIndex(predicate, thisArg = undefined)\nvar $export = __webpack_require__(0);\nvar $find = __webpack_require__(26)(6);\nvar KEY = 'findIndex';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n findIndex: function findIndex(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n__webpack_require__(31)(KEY);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZmluZC1pbmRleC5qcz8yMGQ2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxZQUFZLG1CQUFPLENBQUMsRUFBa0I7QUFDdEM7QUFDQTtBQUNBO0FBQ0EsMENBQTBDLGdCQUFnQixFQUFFO0FBQzVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELG1CQUFPLENBQUMsRUFBdUIiLCJmaWxlIjoiMjM1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gMjIuMS4zLjkgQXJyYXkucHJvdG90eXBlLmZpbmRJbmRleChwcmVkaWNhdGUsIHRoaXNBcmcgPSB1bmRlZmluZWQpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRmaW5kID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpKDYpO1xudmFyIEtFWSA9ICdmaW5kSW5kZXgnO1xudmFyIGZvcmNlZCA9IHRydWU7XG4vLyBTaG91bGRuJ3Qgc2tpcCBob2xlc1xuaWYgKEtFWSBpbiBbXSkgQXJyYXkoMSlbS0VZXShmdW5jdGlvbiAoKSB7IGZvcmNlZCA9IGZhbHNlOyB9KTtcbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogZm9yY2VkLCAnQXJyYXknLCB7XG4gIGZpbmRJbmRleDogZnVuY3Rpb24gZmluZEluZGV4KGNhbGxiYWNrZm4gLyogLCB0aGF0ID0gdW5kZWZpbmVkICovKSB7XG4gICAgcmV0dXJuICRmaW5kKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG5yZXF1aXJlKCcuL19hZGQtdG8tdW5zY29wYWJsZXMnKShLRVkpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///235\n")},function(module,exports,__webpack_require__){eval("__webpack_require__(38)('Array');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuc3BlY2llcy5qcz9kMDRmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLG1CQUFPLENBQUMsRUFBZ0IiLCJmaWxlIjoiMjM2LmpzIiwic291cmNlc0NvbnRlbnQiOlsicmVxdWlyZSgnLi9fc2V0LXNwZWNpZXMnKSgnQXJyYXknKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///236\n")},function(module,exports,__webpack_require__){eval("var global = __webpack_require__(2);\nvar inheritIfRequired = __webpack_require__(73);\nvar dP = __webpack_require__(8).f;\nvar gOPN = __webpack_require__(37).f;\nvar isRegExp = __webpack_require__(56);\nvar $flags = __webpack_require__(50);\nvar $RegExp = global.RegExp;\nvar Base = $RegExp;\nvar proto = $RegExp.prototype;\nvar re1 = /a/g;\nvar re2 = /a/g;\n// \"new\" creates a new object, old webkit buggy here\nvar CORRECT_NEW = new $RegExp(re1) !== re1;\n\nif (__webpack_require__(7) && (!CORRECT_NEW || __webpack_require__(3)(function () {\n re2[__webpack_require__(5)('match')] = false;\n // RegExp constructor can alter flags and IsRegExp works correct with @@match\n return $RegExp(re1) != re1 || $RegExp(re2) == re2 || $RegExp(re1, 'i') != '/a/i';\n}))) {\n $RegExp = function RegExp(p, f) {\n var tiRE = this instanceof $RegExp;\n var piRE = isRegExp(p);\n var fiU = f === undefined;\n return !tiRE && piRE && p.constructor === $RegExp && fiU ? p\n : inheritIfRequired(CORRECT_NEW\n ? new Base(piRE && !fiU ? p.source : p, f)\n : Base((piRE = p instanceof $RegExp) ? p.source : p, piRE && fiU ? $flags.call(p) : f)\n , tiRE ? this : proto, $RegExp);\n };\n var proxy = function (key) {\n key in $RegExp || dP($RegExp, key, {\n configurable: true,\n get: function () { return Base[key]; },\n set: function (it) { Base[key] = it; }\n });\n };\n for (var keys = gOPN(Base), i = 0; keys.length > i;) proxy(keys[i++]);\n proto.constructor = $RegExp;\n $RegExp.prototype = proto;\n __webpack_require__(12)(global, 'RegExp', $RegExp);\n}\n\n__webpack_require__(38)('RegExp');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLmNvbnN0cnVjdG9yLmpzPzNiMmIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsYUFBYSxtQkFBTyxDQUFDLENBQVc7QUFDaEMsd0JBQXdCLG1CQUFPLENBQUMsRUFBd0I7QUFDeEQsU0FBUyxtQkFBTyxDQUFDLENBQWM7QUFDL0IsV0FBVyxtQkFBTyxDQUFDLEVBQWdCO0FBQ25DLGVBQWUsbUJBQU8sQ0FBQyxFQUFjO0FBQ3JDLGFBQWEsbUJBQU8sQ0FBQyxFQUFVO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLElBQUksbUJBQU8sQ0FBQyxDQUFnQixzQkFBc0IsbUJBQU8sQ0FBQyxDQUFVO0FBQ3BFLE1BQU0sbUJBQU8sQ0FBQyxDQUFRO0FBQ3RCO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0Isa0JBQWtCLEVBQUU7QUFDNUMsMEJBQTBCLGdCQUFnQjtBQUMxQyxLQUFLO0FBQ0w7QUFDQSxvQ0FBb0MsaUJBQWlCO0FBQ3JEO0FBQ0E7QUFDQSxFQUFFLG1CQUFPLENBQUMsRUFBYTtBQUN2Qjs7QUFFQSxtQkFBTyxDQUFDLEVBQWdCIiwiZmlsZSI6IjIzNy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBpbmhlcml0SWZSZXF1aXJlZCA9IHJlcXVpcmUoJy4vX2luaGVyaXQtaWYtcmVxdWlyZWQnKTtcbnZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgZ09QTiA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJykuZjtcbnZhciBpc1JlZ0V4cCA9IHJlcXVpcmUoJy4vX2lzLXJlZ2V4cCcpO1xudmFyICRmbGFncyA9IHJlcXVpcmUoJy4vX2ZsYWdzJyk7XG52YXIgJFJlZ0V4cCA9IGdsb2JhbC5SZWdFeHA7XG52YXIgQmFzZSA9ICRSZWdFeHA7XG52YXIgcHJvdG8gPSAkUmVnRXhwLnByb3RvdHlwZTtcbnZhciByZTEgPSAvYS9nO1xudmFyIHJlMiA9IC9hL2c7XG4vLyBcIm5ld1wiIGNyZWF0ZXMgYSBuZXcgb2JqZWN0LCBvbGQgd2Via2l0IGJ1Z2d5IGhlcmVcbnZhciBDT1JSRUNUX05FVyA9IG5ldyAkUmVnRXhwKHJlMSkgIT09IHJlMTtcblxuaWYgKHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgKCFDT1JSRUNUX05FVyB8fCByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgcmUyW3JlcXVpcmUoJy4vX3drcycpKCdtYXRjaCcpXSA9IGZhbHNlO1xuICAvLyBSZWdFeHAgY29uc3RydWN0b3IgY2FuIGFsdGVyIGZsYWdzIGFuZCBJc1JlZ0V4cCB3b3JrcyBjb3JyZWN0IHdpdGggQEBtYXRjaFxuICByZXR1cm4gJFJlZ0V4cChyZTEpICE9IHJlMSB8fCAkUmVnRXhwKHJlMikgPT0gcmUyIHx8ICRSZWdFeHAocmUxLCAnaScpICE9ICcvYS9pJztcbn0pKSkge1xuICAkUmVnRXhwID0gZnVuY3Rpb24gUmVnRXhwKHAsIGYpIHtcbiAgICB2YXIgdGlSRSA9IHRoaXMgaW5zdGFuY2VvZiAkUmVnRXhwO1xuICAgIHZhciBwaVJFID0gaXNSZWdFeHAocCk7XG4gICAgdmFyIGZpVSA9IGYgPT09IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gIXRpUkUgJiYgcGlSRSAmJiBwLmNvbnN0cnVjdG9yID09PSAkUmVnRXhwICYmIGZpVSA/IHBcbiAgICAgIDogaW5oZXJpdElmUmVxdWlyZWQoQ09SUkVDVF9ORVdcbiAgICAgICAgPyBuZXcgQmFzZShwaVJFICYmICFmaVUgPyBwLnNvdXJjZSA6IHAsIGYpXG4gICAgICAgIDogQmFzZSgocGlSRSA9IHAgaW5zdGFuY2VvZiAkUmVnRXhwKSA/IHAuc291cmNlIDogcCwgcGlSRSAmJiBmaVUgPyAkZmxhZ3MuY2FsbChwKSA6IGYpXG4gICAgICAsIHRpUkUgPyB0aGlzIDogcHJvdG8sICRSZWdFeHApO1xuICB9O1xuICB2YXIgcHJveHkgPSBmdW5jdGlvbiAoa2V5KSB7XG4gICAga2V5IGluICRSZWdFeHAgfHwgZFAoJFJlZ0V4cCwga2V5LCB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIEJhc2Vba2V5XTsgfSxcbiAgICAgIHNldDogZnVuY3Rpb24gKGl0KSB7IEJhc2Vba2V5XSA9IGl0OyB9XG4gICAgfSk7XG4gIH07XG4gIGZvciAodmFyIGtleXMgPSBnT1BOKEJhc2UpLCBpID0gMDsga2V5cy5sZW5ndGggPiBpOykgcHJveHkoa2V5c1tpKytdKTtcbiAgcHJvdG8uY29uc3RydWN0b3IgPSAkUmVnRXhwO1xuICAkUmVnRXhwLnByb3RvdHlwZSA9IHByb3RvO1xuICByZXF1aXJlKCcuL19yZWRlZmluZScpKGdsb2JhbCwgJ1JlZ0V4cCcsICRSZWdFeHApO1xufVxuXG5yZXF1aXJlKCcuL19zZXQtc3BlY2llcycpKCdSZWdFeHAnKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///237\n")},function(module,exports,__webpack_require__){"use strict";eval("\n__webpack_require__(114);\nvar anObject = __webpack_require__(1);\nvar $flags = __webpack_require__(50);\nvar DESCRIPTORS = __webpack_require__(7);\nvar TO_STRING = 'toString';\nvar $toString = /./[TO_STRING];\n\nvar define = function (fn) {\n __webpack_require__(12)(RegExp.prototype, TO_STRING, fn, true);\n};\n\n// 21.2.5.14 RegExp.prototype.toString()\nif (__webpack_require__(3)(function () { return $toString.call({ source: 'a', flags: 'b' }) != '/a/b'; })) {\n define(function toString() {\n var R = anObject(this);\n return '/'.concat(R.source, '/',\n 'flags' in R ? R.flags : !DESCRIPTORS && R instanceof RegExp ? $flags.call(R) : undefined);\n });\n// FF44- RegExp#toString has a wrong name\n} else if ($toString.name != TO_STRING) {\n define(function toString() {\n return $toString.call(this);\n });\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLnRvLXN0cmluZy5qcz82YjU0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsbUJBQU8sQ0FBQyxHQUFvQjtBQUM1QixlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxhQUFhLG1CQUFPLENBQUMsRUFBVTtBQUMvQixrQkFBa0IsbUJBQU8sQ0FBQyxDQUFnQjtBQUMxQztBQUNBOztBQUVBO0FBQ0EsRUFBRSxtQkFBTyxDQUFDLEVBQWE7QUFDdkI7O0FBRUE7QUFDQSxJQUFJLG1CQUFPLENBQUMsQ0FBVSxlQUFlLHdCQUF3QiwwQkFBMEIsWUFBWSxFQUFFO0FBQ3JHO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxHQUFHO0FBQ0giLCJmaWxlIjoiMjM4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi9lczYucmVnZXhwLmZsYWdzJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciAkZmxhZ3MgPSByZXF1aXJlKCcuL19mbGFncycpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKTtcbnZhciBUT19TVFJJTkcgPSAndG9TdHJpbmcnO1xudmFyICR0b1N0cmluZyA9IC8uL1tUT19TVFJJTkddO1xuXG52YXIgZGVmaW5lID0gZnVuY3Rpb24gKGZuKSB7XG4gIHJlcXVpcmUoJy4vX3JlZGVmaW5lJykoUmVnRXhwLnByb3RvdHlwZSwgVE9fU1RSSU5HLCBmbiwgdHJ1ZSk7XG59O1xuXG4vLyAyMS4yLjUuMTQgUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZygpXG5pZiAocmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7IHJldHVybiAkdG9TdHJpbmcuY2FsbCh7IHNvdXJjZTogJ2EnLCBmbGFnczogJ2InIH0pICE9ICcvYS9iJzsgfSkpIHtcbiAgZGVmaW5lKGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHZhciBSID0gYW5PYmplY3QodGhpcyk7XG4gICAgcmV0dXJuICcvJy5jb25jYXQoUi5zb3VyY2UsICcvJyxcbiAgICAgICdmbGFncycgaW4gUiA/IFIuZmxhZ3MgOiAhREVTQ1JJUFRPUlMgJiYgUiBpbnN0YW5jZW9mIFJlZ0V4cCA/ICRmbGFncy5jYWxsKFIpIDogdW5kZWZpbmVkKTtcbiAgfSk7XG4vLyBGRjQ0LSBSZWdFeHAjdG9TdHJpbmcgaGFzIGEgd3JvbmcgbmFtZVxufSBlbHNlIGlmICgkdG9TdHJpbmcubmFtZSAhPSBUT19TVFJJTkcpIHtcbiAgZGVmaW5lKGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiAkdG9TdHJpbmcuY2FsbCh0aGlzKTtcbiAgfSk7XG59XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///238\n")},function(module,exports,__webpack_require__){"use strict";eval("\n\nvar anObject = __webpack_require__(1);\nvar toLength = __webpack_require__(6);\nvar advanceStringIndex = __webpack_require__(88);\nvar regExpExec = __webpack_require__(58);\n\n// @@match logic\n__webpack_require__(59)('match', 1, function (defined, MATCH, $match, maybeCallNative) {\n return [\n // `String.prototype.match` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.match\n function match(regexp) {\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[MATCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[MATCH](String(O));\n },\n // `RegExp.prototype[@@match]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@match\n function (regexp) {\n var res = maybeCallNative($match, regexp, this);\n if (res.done) return res.value;\n var rx = anObject(regexp);\n var S = String(this);\n if (!rx.global) return regExpExec(rx, S);\n var fullUnicode = rx.unicode;\n rx.lastIndex = 0;\n var A = [];\n var n = 0;\n var result;\n while ((result = regExpExec(rx, S)) !== null) {\n var matchStr = String(result[0]);\n A[n] = matchStr;\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n n++;\n }\n return n === 0 ? null : A;\n }\n ];\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLm1hdGNoLmpzPzQ5MTciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWIsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMseUJBQXlCLG1CQUFPLENBQUMsRUFBeUI7QUFDMUQsaUJBQWlCLG1CQUFPLENBQUMsRUFBeUI7O0FBRWxEO0FBQ0EsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyMzkuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgYWR2YW5jZVN0cmluZ0luZGV4ID0gcmVxdWlyZSgnLi9fYWR2YW5jZS1zdHJpbmctaW5kZXgnKTtcbnZhciByZWdFeHBFeGVjID0gcmVxdWlyZSgnLi9fcmVnZXhwLWV4ZWMtYWJzdHJhY3QnKTtcblxuLy8gQEBtYXRjaCBsb2dpY1xucmVxdWlyZSgnLi9fZml4LXJlLXdrcycpKCdtYXRjaCcsIDEsIGZ1bmN0aW9uIChkZWZpbmVkLCBNQVRDSCwgJG1hdGNoLCBtYXliZUNhbGxOYXRpdmUpIHtcbiAgcmV0dXJuIFtcbiAgICAvLyBgU3RyaW5nLnByb3RvdHlwZS5tYXRjaGAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5tYXRjaFxuICAgIGZ1bmN0aW9uIG1hdGNoKHJlZ2V4cCkge1xuICAgICAgdmFyIE8gPSBkZWZpbmVkKHRoaXMpO1xuICAgICAgdmFyIGZuID0gcmVnZXhwID09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHJlZ2V4cFtNQVRDSF07XG4gICAgICByZXR1cm4gZm4gIT09IHVuZGVmaW5lZCA/IGZuLmNhbGwocmVnZXhwLCBPKSA6IG5ldyBSZWdFeHAocmVnZXhwKVtNQVRDSF0oU3RyaW5nKE8pKTtcbiAgICB9LFxuICAgIC8vIGBSZWdFeHAucHJvdG90eXBlW0BAbWF0Y2hdYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1yZWdleHAucHJvdG90eXBlLUBAbWF0Y2hcbiAgICBmdW5jdGlvbiAocmVnZXhwKSB7XG4gICAgICB2YXIgcmVzID0gbWF5YmVDYWxsTmF0aXZlKCRtYXRjaCwgcmVnZXhwLCB0aGlzKTtcbiAgICAgIGlmIChyZXMuZG9uZSkgcmV0dXJuIHJlcy52YWx1ZTtcbiAgICAgIHZhciByeCA9IGFuT2JqZWN0KHJlZ2V4cCk7XG4gICAgICB2YXIgUyA9IFN0cmluZyh0aGlzKTtcbiAgICAgIGlmICghcnguZ2xvYmFsKSByZXR1cm4gcmVnRXhwRXhlYyhyeCwgUyk7XG4gICAgICB2YXIgZnVsbFVuaWNvZGUgPSByeC51bmljb2RlO1xuICAgICAgcngubGFzdEluZGV4ID0gMDtcbiAgICAgIHZhciBBID0gW107XG4gICAgICB2YXIgbiA9IDA7XG4gICAgICB2YXIgcmVzdWx0O1xuICAgICAgd2hpbGUgKChyZXN1bHQgPSByZWdFeHBFeGVjKHJ4LCBTKSkgIT09IG51bGwpIHtcbiAgICAgICAgdmFyIG1hdGNoU3RyID0gU3RyaW5nKHJlc3VsdFswXSk7XG4gICAgICAgIEFbbl0gPSBtYXRjaFN0cjtcbiAgICAgICAgaWYgKG1hdGNoU3RyID09PSAnJykgcngubGFzdEluZGV4ID0gYWR2YW5jZVN0cmluZ0luZGV4KFMsIHRvTGVuZ3RoKHJ4Lmxhc3RJbmRleCksIGZ1bGxVbmljb2RlKTtcbiAgICAgICAgbisrO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG4gPT09IDAgPyBudWxsIDogQTtcbiAgICB9XG4gIF07XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///239\n")},function(module,exports,__webpack_require__){"use strict";eval("\n\nvar anObject = __webpack_require__(1);\nvar toObject = __webpack_require__(9);\nvar toLength = __webpack_require__(6);\nvar toInteger = __webpack_require__(21);\nvar advanceStringIndex = __webpack_require__(88);\nvar regExpExec = __webpack_require__(58);\nvar max = Math.max;\nvar min = Math.min;\nvar floor = Math.floor;\nvar SUBSTITUTION_SYMBOLS = /\\$([$&`']|\\d\\d?|<[^>]*>)/g;\nvar SUBSTITUTION_SYMBOLS_NO_NAMED = /\\$([$&`']|\\d\\d?)/g;\n\nvar maybeToString = function (it) {\n return it === undefined ? it : String(it);\n};\n\n// @@replace logic\n__webpack_require__(59)('replace', 2, function (defined, REPLACE, $replace, maybeCallNative) {\n return [\n // `String.prototype.replace` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.replace\n function replace(searchValue, replaceValue) {\n var O = defined(this);\n var fn = searchValue == undefined ? undefined : searchValue[REPLACE];\n return fn !== undefined\n ? fn.call(searchValue, O, replaceValue)\n : $replace.call(String(O), searchValue, replaceValue);\n },\n // `RegExp.prototype[@@replace]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@replace\n function (regexp, replaceValue) {\n var res = maybeCallNative($replace, regexp, this, replaceValue);\n if (res.done) return res.value;\n\n var rx = anObject(regexp);\n var S = String(this);\n var functionalReplace = typeof replaceValue === 'function';\n if (!functionalReplace) replaceValue = String(replaceValue);\n var global = rx.global;\n if (global) {\n var fullUnicode = rx.unicode;\n rx.lastIndex = 0;\n }\n var results = [];\n while (true) {\n var result = regExpExec(rx, S);\n if (result === null) break;\n results.push(result);\n if (!global) break;\n var matchStr = String(result[0]);\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n }\n var accumulatedResult = '';\n var nextSourcePosition = 0;\n for (var i = 0; i < results.length; i++) {\n result = results[i];\n var matched = String(result[0]);\n var position = max(min(toInteger(result.index), S.length), 0);\n var captures = [];\n // NOTE: This is equivalent to\n // captures = result.slice(1).map(maybeToString)\n // but for some reason `nativeSlice.call(result, 1, result.length)` (called in\n // the slice polyfill when slicing native arrays) \"doesn't work\" in safari 9 and\n // causes a crash (https://pastebin.com/N21QzeQA) when trying to debug it.\n for (var j = 1; j < result.length; j++) captures.push(maybeToString(result[j]));\n var namedCaptures = result.groups;\n if (functionalReplace) {\n var replacerArgs = [matched].concat(captures, position, S);\n if (namedCaptures !== undefined) replacerArgs.push(namedCaptures);\n var replacement = String(replaceValue.apply(undefined, replacerArgs));\n } else {\n replacement = getSubstitution(matched, S, position, captures, namedCaptures, replaceValue);\n }\n if (position >= nextSourcePosition) {\n accumulatedResult += S.slice(nextSourcePosition, position) + replacement;\n nextSourcePosition = position + matched.length;\n }\n }\n return accumulatedResult + S.slice(nextSourcePosition);\n }\n ];\n\n // https://tc39.github.io/ecma262/#sec-getsubstitution\n function getSubstitution(matched, str, position, captures, namedCaptures, replacement) {\n var tailPos = position + matched.length;\n var m = captures.length;\n var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED;\n if (namedCaptures !== undefined) {\n namedCaptures = toObject(namedCaptures);\n symbols = SUBSTITUTION_SYMBOLS;\n }\n return $replace.call(replacement, symbols, function (match, ch) {\n var capture;\n switch (ch.charAt(0)) {\n case '$': return '$';\n case '&': return matched;\n case '`': return str.slice(0, position);\n case \"'\": return str.slice(tailPos);\n case '<':\n capture = namedCaptures[ch.slice(1, -1)];\n break;\n default: // \\d\\d?\n var n = +ch;\n if (n === 0) return match;\n if (n > m) {\n var f = floor(n / 10);\n if (f === 0) return match;\n if (f <= m) return captures[f - 1] === undefined ? ch.charAt(1) : captures[f - 1] + ch.charAt(1);\n return match;\n }\n capture = captures[n - 1];\n }\n return capture === undefined ? '' : capture;\n });\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLnJlcGxhY2UuanM/YTQ4MSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDLHlCQUF5QixtQkFBTyxDQUFDLEVBQXlCO0FBQzFELGlCQUFpQixtQkFBTyxDQUFDLEVBQXlCO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIsb0JBQW9CO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixtQkFBbUI7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLENBQUMiLCJmaWxlIjoiMjQwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIGFkdmFuY2VTdHJpbmdJbmRleCA9IHJlcXVpcmUoJy4vX2FkdmFuY2Utc3RyaW5nLWluZGV4Jyk7XG52YXIgcmVnRXhwRXhlYyA9IHJlcXVpcmUoJy4vX3JlZ2V4cC1leGVjLWFic3RyYWN0Jyk7XG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgbWluID0gTWF0aC5taW47XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xudmFyIFNVQlNUSVRVVElPTl9TWU1CT0xTID0gL1xcJChbJCZgJ118XFxkXFxkP3w8W14+XSo+KS9nO1xudmFyIFNVQlNUSVRVVElPTl9TWU1CT0xTX05PX05BTUVEID0gL1xcJChbJCZgJ118XFxkXFxkPykvZztcblxudmFyIG1heWJlVG9TdHJpbmcgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ID09PSB1bmRlZmluZWQgPyBpdCA6IFN0cmluZyhpdCk7XG59O1xuXG4vLyBAQHJlcGxhY2UgbG9naWNcbnJlcXVpcmUoJy4vX2ZpeC1yZS13a3MnKSgncmVwbGFjZScsIDIsIGZ1bmN0aW9uIChkZWZpbmVkLCBSRVBMQUNFLCAkcmVwbGFjZSwgbWF5YmVDYWxsTmF0aXZlKSB7XG4gIHJldHVybiBbXG4gICAgLy8gYFN0cmluZy5wcm90b3R5cGUucmVwbGFjZWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlXG4gICAgZnVuY3Rpb24gcmVwbGFjZShzZWFyY2hWYWx1ZSwgcmVwbGFjZVZhbHVlKSB7XG4gICAgICB2YXIgTyA9IGRlZmluZWQodGhpcyk7XG4gICAgICB2YXIgZm4gPSBzZWFyY2hWYWx1ZSA9PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBzZWFyY2hWYWx1ZVtSRVBMQUNFXTtcbiAgICAgIHJldHVybiBmbiAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8gZm4uY2FsbChzZWFyY2hWYWx1ZSwgTywgcmVwbGFjZVZhbHVlKVxuICAgICAgICA6ICRyZXBsYWNlLmNhbGwoU3RyaW5nKE8pLCBzZWFyY2hWYWx1ZSwgcmVwbGFjZVZhbHVlKTtcbiAgICB9LFxuICAgIC8vIGBSZWdFeHAucHJvdG90eXBlW0BAcmVwbGFjZV1gIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXJlZ2V4cC5wcm90b3R5cGUtQEByZXBsYWNlXG4gICAgZnVuY3Rpb24gKHJlZ2V4cCwgcmVwbGFjZVZhbHVlKSB7XG4gICAgICB2YXIgcmVzID0gbWF5YmVDYWxsTmF0aXZlKCRyZXBsYWNlLCByZWdleHAsIHRoaXMsIHJlcGxhY2VWYWx1ZSk7XG4gICAgICBpZiAocmVzLmRvbmUpIHJldHVybiByZXMudmFsdWU7XG5cbiAgICAgIHZhciByeCA9IGFuT2JqZWN0KHJlZ2V4cCk7XG4gICAgICB2YXIgUyA9IFN0cmluZyh0aGlzKTtcbiAgICAgIHZhciBmdW5jdGlvbmFsUmVwbGFjZSA9IHR5cGVvZiByZXBsYWNlVmFsdWUgPT09ICdmdW5jdGlvbic7XG4gICAgICBpZiAoIWZ1bmN0aW9uYWxSZXBsYWNlKSByZXBsYWNlVmFsdWUgPSBTdHJpbmcocmVwbGFjZVZhbHVlKTtcbiAgICAgIHZhciBnbG9iYWwgPSByeC5nbG9iYWw7XG4gICAgICBpZiAoZ2xvYmFsKSB7XG4gICAgICAgIHZhciBmdWxsVW5pY29kZSA9IHJ4LnVuaWNvZGU7XG4gICAgICAgIHJ4Lmxhc3RJbmRleCA9IDA7XG4gICAgICB9XG4gICAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHJlZ0V4cEV4ZWMocngsIFMpO1xuICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsKSBicmVhaztcbiAgICAgICAgcmVzdWx0cy5wdXNoKHJlc3VsdCk7XG4gICAgICAgIGlmICghZ2xvYmFsKSBicmVhaztcbiAgICAgICAgdmFyIG1hdGNoU3RyID0gU3RyaW5nKHJlc3VsdFswXSk7XG4gICAgICAgIGlmIChtYXRjaFN0ciA9PT0gJycpIHJ4Lmxhc3RJbmRleCA9IGFkdmFuY2VTdHJpbmdJbmRleChTLCB0b0xlbmd0aChyeC5sYXN0SW5kZXgpLCBmdWxsVW5pY29kZSk7XG4gICAgICB9XG4gICAgICB2YXIgYWNjdW11bGF0ZWRSZXN1bHQgPSAnJztcbiAgICAgIHZhciBuZXh0U291cmNlUG9zaXRpb24gPSAwO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXN1bHRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdHNbaV07XG4gICAgICAgIHZhciBtYXRjaGVkID0gU3RyaW5nKHJlc3VsdFswXSk7XG4gICAgICAgIHZhciBwb3NpdGlvbiA9IG1heChtaW4odG9JbnRlZ2VyKHJlc3VsdC5pbmRleCksIFMubGVuZ3RoKSwgMCk7XG4gICAgICAgIHZhciBjYXB0dXJlcyA9IFtdO1xuICAgICAgICAvLyBOT1RFOiBUaGlzIGlzIGVxdWl2YWxlbnQgdG9cbiAgICAgICAgLy8gICBjYXB0dXJlcyA9IHJlc3VsdC5zbGljZSgxKS5tYXAobWF5YmVUb1N0cmluZylcbiAgICAgICAgLy8gYnV0IGZvciBzb21lIHJlYXNvbiBgbmF0aXZlU2xpY2UuY2FsbChyZXN1bHQsIDEsIHJlc3VsdC5sZW5ndGgpYCAoY2FsbGVkIGluXG4gICAgICAgIC8vIHRoZSBzbGljZSBwb2x5ZmlsbCB3aGVuIHNsaWNpbmcgbmF0aXZlIGFycmF5cykgXCJkb2Vzbid0IHdvcmtcIiBpbiBzYWZhcmkgOSBhbmRcbiAgICAgICAgLy8gY2F1c2VzIGEgY3Jhc2ggKGh0dHBzOi8vcGFzdGViaW4uY29tL04yMVF6ZVFBKSB3aGVuIHRyeWluZyB0byBkZWJ1ZyBpdC5cbiAgICAgICAgZm9yICh2YXIgaiA9IDE7IGogPCByZXN1bHQubGVuZ3RoOyBqKyspIGNhcHR1cmVzLnB1c2gobWF5YmVUb1N0cmluZyhyZXN1bHRbal0pKTtcbiAgICAgICAgdmFyIG5hbWVkQ2FwdHVyZXMgPSByZXN1bHQuZ3JvdXBzO1xuICAgICAgICBpZiAoZnVuY3Rpb25hbFJlcGxhY2UpIHtcbiAgICAgICAgICB2YXIgcmVwbGFjZXJBcmdzID0gW21hdGNoZWRdLmNvbmNhdChjYXB0dXJlcywgcG9zaXRpb24sIFMpO1xuICAgICAgICAgIGlmIChuYW1lZENhcHR1cmVzICE9PSB1bmRlZmluZWQpIHJlcGxhY2VyQXJncy5wdXNoKG5hbWVkQ2FwdHVyZXMpO1xuICAgICAgICAgIHZhciByZXBsYWNlbWVudCA9IFN0cmluZyhyZXBsYWNlVmFsdWUuYXBwbHkodW5kZWZpbmVkLCByZXBsYWNlckFyZ3MpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXBsYWNlbWVudCA9IGdldFN1YnN0aXR1dGlvbihtYXRjaGVkLCBTLCBwb3NpdGlvbiwgY2FwdHVyZXMsIG5hbWVkQ2FwdHVyZXMsIHJlcGxhY2VWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBvc2l0aW9uID49IG5leHRTb3VyY2VQb3NpdGlvbikge1xuICAgICAgICAgIGFjY3VtdWxhdGVkUmVzdWx0ICs9IFMuc2xpY2UobmV4dFNvdXJjZVBvc2l0aW9uLCBwb3NpdGlvbikgKyByZXBsYWNlbWVudDtcbiAgICAgICAgICBuZXh0U291cmNlUG9zaXRpb24gPSBwb3NpdGlvbiArIG1hdGNoZWQubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gYWNjdW11bGF0ZWRSZXN1bHQgKyBTLnNsaWNlKG5leHRTb3VyY2VQb3NpdGlvbik7XG4gICAgfVxuICBdO1xuXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtZ2V0c3Vic3RpdHV0aW9uXG4gIGZ1bmN0aW9uIGdldFN1YnN0aXR1dGlvbihtYXRjaGVkLCBzdHIsIHBvc2l0aW9uLCBjYXB0dXJlcywgbmFtZWRDYXB0dXJlcywgcmVwbGFjZW1lbnQpIHtcbiAgICB2YXIgdGFpbFBvcyA9IHBvc2l0aW9uICsgbWF0Y2hlZC5sZW5ndGg7XG4gICAgdmFyIG0gPSBjYXB0dXJlcy5sZW5ndGg7XG4gICAgdmFyIHN5bWJvbHMgPSBTVUJTVElUVVRJT05fU1lNQk9MU19OT19OQU1FRDtcbiAgICBpZiAobmFtZWRDYXB0dXJlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBuYW1lZENhcHR1cmVzID0gdG9PYmplY3QobmFtZWRDYXB0dXJlcyk7XG4gICAgICBzeW1ib2xzID0gU1VCU1RJVFVUSU9OX1NZTUJPTFM7XG4gICAgfVxuICAgIHJldHVybiAkcmVwbGFjZS5jYWxsKHJlcGxhY2VtZW50LCBzeW1ib2xzLCBmdW5jdGlvbiAobWF0Y2gsIGNoKSB7XG4gICAgICB2YXIgY2FwdHVyZTtcbiAgICAgIHN3aXRjaCAoY2guY2hhckF0KDApKSB7XG4gICAgICAgIGNhc2UgJyQnOiByZXR1cm4gJyQnO1xuICAgICAgICBjYXNlICcmJzogcmV0dXJuIG1hdGNoZWQ7XG4gICAgICAgIGNhc2UgJ2AnOiByZXR1cm4gc3RyLnNsaWNlKDAsIHBvc2l0aW9uKTtcbiAgICAgICAgY2FzZSBcIidcIjogcmV0dXJuIHN0ci5zbGljZSh0YWlsUG9zKTtcbiAgICAgICAgY2FzZSAnPCc6XG4gICAgICAgICAgY2FwdHVyZSA9IG5hbWVkQ2FwdHVyZXNbY2guc2xpY2UoMSwgLTEpXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDogLy8gXFxkXFxkP1xuICAgICAgICAgIHZhciBuID0gK2NoO1xuICAgICAgICAgIGlmIChuID09PSAwKSByZXR1cm4gbWF0Y2g7XG4gICAgICAgICAgaWYgKG4gPiBtKSB7XG4gICAgICAgICAgICB2YXIgZiA9IGZsb29yKG4gLyAxMCk7XG4gICAgICAgICAgICBpZiAoZiA9PT0gMCkgcmV0dXJuIG1hdGNoO1xuICAgICAgICAgICAgaWYgKGYgPD0gbSkgcmV0dXJuIGNhcHR1cmVzW2YgLSAxXSA9PT0gdW5kZWZpbmVkID8gY2guY2hhckF0KDEpIDogY2FwdHVyZXNbZiAtIDFdICsgY2guY2hhckF0KDEpO1xuICAgICAgICAgICAgcmV0dXJuIG1hdGNoO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXB0dXJlID0gY2FwdHVyZXNbbiAtIDFdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNhcHR1cmUgPT09IHVuZGVmaW5lZCA/ICcnIDogY2FwdHVyZTtcbiAgICB9KTtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///240\n")},function(module,exports,__webpack_require__){"use strict";eval("\n\nvar anObject = __webpack_require__(1);\nvar sameValue = __webpack_require__(100);\nvar regExpExec = __webpack_require__(58);\n\n// @@search logic\n__webpack_require__(59)('search', 1, function (defined, SEARCH, $search, maybeCallNative) {\n return [\n // `String.prototype.search` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.search\n function search(regexp) {\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[SEARCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[SEARCH](String(O));\n },\n // `RegExp.prototype[@@search]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@search\n function (regexp) {\n var res = maybeCallNative($search, regexp, this);\n if (res.done) return res.value;\n var rx = anObject(regexp);\n var S = String(this);\n var previousLastIndex = rx.lastIndex;\n if (!sameValue(previousLastIndex, 0)) rx.lastIndex = 0;\n var result = regExpExec(rx, S);\n if (!sameValue(rx.lastIndex, previousLastIndex)) rx.lastIndex = previousLastIndex;\n return result === null ? -1 : result.index;\n }\n ];\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLnNlYXJjaC5qcz8zODZkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhOztBQUViLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGdCQUFnQixtQkFBTyxDQUFDLEdBQWU7QUFDdkMsaUJBQWlCLG1CQUFPLENBQUMsRUFBeUI7O0FBRWxEO0FBQ0EsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjI0MS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgc2FtZVZhbHVlID0gcmVxdWlyZSgnLi9fc2FtZS12YWx1ZScpO1xudmFyIHJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuL19yZWdleHAtZXhlYy1hYnN0cmFjdCcpO1xuXG4vLyBAQHNlYXJjaCBsb2dpY1xucmVxdWlyZSgnLi9fZml4LXJlLXdrcycpKCdzZWFyY2gnLCAxLCBmdW5jdGlvbiAoZGVmaW5lZCwgU0VBUkNILCAkc2VhcmNoLCBtYXliZUNhbGxOYXRpdmUpIHtcbiAgcmV0dXJuIFtcbiAgICAvLyBgU3RyaW5nLnByb3RvdHlwZS5zZWFyY2hgIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUuc2VhcmNoXG4gICAgZnVuY3Rpb24gc2VhcmNoKHJlZ2V4cCkge1xuICAgICAgdmFyIE8gPSBkZWZpbmVkKHRoaXMpO1xuICAgICAgdmFyIGZuID0gcmVnZXhwID09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHJlZ2V4cFtTRUFSQ0hdO1xuICAgICAgcmV0dXJuIGZuICE9PSB1bmRlZmluZWQgPyBmbi5jYWxsKHJlZ2V4cCwgTykgOiBuZXcgUmVnRXhwKHJlZ2V4cClbU0VBUkNIXShTdHJpbmcoTykpO1xuICAgIH0sXG4gICAgLy8gYFJlZ0V4cC5wcm90b3R5cGVbQEBzZWFyY2hdYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1yZWdleHAucHJvdG90eXBlLUBAc2VhcmNoXG4gICAgZnVuY3Rpb24gKHJlZ2V4cCkge1xuICAgICAgdmFyIHJlcyA9IG1heWJlQ2FsbE5hdGl2ZSgkc2VhcmNoLCByZWdleHAsIHRoaXMpO1xuICAgICAgaWYgKHJlcy5kb25lKSByZXR1cm4gcmVzLnZhbHVlO1xuICAgICAgdmFyIHJ4ID0gYW5PYmplY3QocmVnZXhwKTtcbiAgICAgIHZhciBTID0gU3RyaW5nKHRoaXMpO1xuICAgICAgdmFyIHByZXZpb3VzTGFzdEluZGV4ID0gcngubGFzdEluZGV4O1xuICAgICAgaWYgKCFzYW1lVmFsdWUocHJldmlvdXNMYXN0SW5kZXgsIDApKSByeC5sYXN0SW5kZXggPSAwO1xuICAgICAgdmFyIHJlc3VsdCA9IHJlZ0V4cEV4ZWMocngsIFMpO1xuICAgICAgaWYgKCFzYW1lVmFsdWUocngubGFzdEluZGV4LCBwcmV2aW91c0xhc3RJbmRleCkpIHJ4Lmxhc3RJbmRleCA9IHByZXZpb3VzTGFzdEluZGV4O1xuICAgICAgcmV0dXJuIHJlc3VsdCA9PT0gbnVsbCA/IC0xIDogcmVzdWx0LmluZGV4O1xuICAgIH1cbiAgXTtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///241\n")},function(module,exports,__webpack_require__){"use strict";eval("\n\nvar isRegExp = __webpack_require__(56);\nvar anObject = __webpack_require__(1);\nvar speciesConstructor = __webpack_require__(51);\nvar advanceStringIndex = __webpack_require__(88);\nvar toLength = __webpack_require__(6);\nvar callRegExpExec = __webpack_require__(58);\nvar regexpExec = __webpack_require__(87);\nvar fails = __webpack_require__(3);\nvar $min = Math.min;\nvar $push = [].push;\nvar $SPLIT = 'split';\nvar LENGTH = 'length';\nvar LAST_INDEX = 'lastIndex';\nvar MAX_UINT32 = 0xffffffff;\n\n// babel-minify transpiles RegExp('x', 'y') -> /x/y and it causes SyntaxError\nvar SUPPORTS_Y = !fails(function () { RegExp(MAX_UINT32, 'y'); });\n\n// @@split logic\n__webpack_require__(59)('split', 2, function (defined, SPLIT, $split, maybeCallNative) {\n var internalSplit;\n if (\n 'abbc'[$SPLIT](/(b)*/)[1] == 'c' ||\n 'test'[$SPLIT](/(?:)/, -1)[LENGTH] != 4 ||\n 'ab'[$SPLIT](/(?:ab)*/)[LENGTH] != 2 ||\n '.'[$SPLIT](/(.?)(.?)/)[LENGTH] != 4 ||\n '.'[$SPLIT](/()()/)[LENGTH] > 1 ||\n ''[$SPLIT](/.?/)[LENGTH]\n ) {\n // based on es5-shim implementation, need to rework it\n internalSplit = function (separator, limit) {\n var string = String(this);\n if (separator === undefined && limit === 0) return [];\n // If `separator` is not a regex, use native split\n if (!isRegExp(separator)) return $split.call(string, separator, limit);\n var output = [];\n var flags = (separator.ignoreCase ? 'i' : '') +\n (separator.multiline ? 'm' : '') +\n (separator.unicode ? 'u' : '') +\n (separator.sticky ? 'y' : '');\n var lastLastIndex = 0;\n var splitLimit = limit === undefined ? MAX_UINT32 : limit >>> 0;\n // Make `global` and avoid `lastIndex` issues by working with a copy\n var separatorCopy = new RegExp(separator.source, flags + 'g');\n var match, lastIndex, lastLength;\n while (match = regexpExec.call(separatorCopy, string)) {\n lastIndex = separatorCopy[LAST_INDEX];\n if (lastIndex > lastLastIndex) {\n output.push(string.slice(lastLastIndex, match.index));\n if (match[LENGTH] > 1 && match.index < string[LENGTH]) $push.apply(output, match.slice(1));\n lastLength = match[0][LENGTH];\n lastLastIndex = lastIndex;\n if (output[LENGTH] >= splitLimit) break;\n }\n if (separatorCopy[LAST_INDEX] === match.index) separatorCopy[LAST_INDEX]++; // Avoid an infinite loop\n }\n if (lastLastIndex === string[LENGTH]) {\n if (lastLength || !separatorCopy.test('')) output.push('');\n } else output.push(string.slice(lastLastIndex));\n return output[LENGTH] > splitLimit ? output.slice(0, splitLimit) : output;\n };\n // Chakra, V8\n } else if ('0'[$SPLIT](undefined, 0)[LENGTH]) {\n internalSplit = function (separator, limit) {\n return separator === undefined && limit === 0 ? [] : $split.call(this, separator, limit);\n };\n } else {\n internalSplit = $split;\n }\n\n return [\n // `String.prototype.split` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.split\n function split(separator, limit) {\n var O = defined(this);\n var splitter = separator == undefined ? undefined : separator[SPLIT];\n return splitter !== undefined\n ? splitter.call(separator, O, limit)\n : internalSplit.call(String(O), separator, limit);\n },\n // `RegExp.prototype[@@split]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@split\n //\n // NOTE: This cannot be properly polyfilled in engines that don't support\n // the 'y' flag.\n function (regexp, limit) {\n var res = maybeCallNative(internalSplit, regexp, this, limit, internalSplit !== $split);\n if (res.done) return res.value;\n\n var rx = anObject(regexp);\n var S = String(this);\n var C = speciesConstructor(rx, RegExp);\n\n var unicodeMatching = rx.unicode;\n var flags = (rx.ignoreCase ? 'i' : '') +\n (rx.multiline ? 'm' : '') +\n (rx.unicode ? 'u' : '') +\n (SUPPORTS_Y ? 'y' : 'g');\n\n // ^(? + rx + ) is needed, in combination with some S slicing, to\n // simulate the 'y' flag.\n var splitter = new C(SUPPORTS_Y ? rx : '^(?:' + rx.source + ')', flags);\n var lim = limit === undefined ? MAX_UINT32 : limit >>> 0;\n if (lim === 0) return [];\n if (S.length === 0) return callRegExpExec(splitter, S) === null ? [S] : [];\n var p = 0;\n var q = 0;\n var A = [];\n while (q < S.length) {\n splitter.lastIndex = SUPPORTS_Y ? q : 0;\n var z = callRegExpExec(splitter, SUPPORTS_Y ? S : S.slice(q));\n var e;\n if (\n z === null ||\n (e = $min(toLength(splitter.lastIndex + (SUPPORTS_Y ? 0 : q)), S.length)) === p\n ) {\n q = advanceStringIndex(S, q, unicodeMatching);\n } else {\n A.push(S.slice(p, q));\n if (A.length === lim) return A;\n for (var i = 1; i <= z.length - 1; i++) {\n A.push(z[i]);\n if (A.length === lim) return A;\n }\n q = p = e;\n }\n }\n A.push(S.slice(p));\n return A;\n }\n ];\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLnNwbGl0LmpzPzI4YTUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWIsZUFBZSxtQkFBTyxDQUFDLEVBQWM7QUFDckMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMseUJBQXlCLG1CQUFPLENBQUMsRUFBd0I7QUFDekQseUJBQXlCLG1CQUFPLENBQUMsRUFBeUI7QUFDMUQsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMscUJBQXFCLG1CQUFPLENBQUMsRUFBeUI7QUFDdEQsaUJBQWlCLG1CQUFPLENBQUMsRUFBZ0I7QUFDekMsWUFBWSxtQkFBTyxDQUFDLENBQVU7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EscUNBQXFDLHlCQUF5QixFQUFFOztBQUVoRTtBQUNBLG1CQUFPLENBQUMsRUFBZTtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1GQUFtRjtBQUNuRjtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EseUJBQXlCLG1CQUFtQjtBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjQyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaXNSZWdFeHAgPSByZXF1aXJlKCcuL19pcy1yZWdleHAnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4vX3NwZWNpZXMtY29uc3RydWN0b3InKTtcbnZhciBhZHZhbmNlU3RyaW5nSW5kZXggPSByZXF1aXJlKCcuL19hZHZhbmNlLXN0cmluZy1pbmRleCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgY2FsbFJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuL19yZWdleHAtZXhlYy1hYnN0cmFjdCcpO1xudmFyIHJlZ2V4cEV4ZWMgPSByZXF1aXJlKCcuL19yZWdleHAtZXhlYycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciAkbWluID0gTWF0aC5taW47XG52YXIgJHB1c2ggPSBbXS5wdXNoO1xudmFyICRTUExJVCA9ICdzcGxpdCc7XG52YXIgTEVOR1RIID0gJ2xlbmd0aCc7XG52YXIgTEFTVF9JTkRFWCA9ICdsYXN0SW5kZXgnO1xudmFyIE1BWF9VSU5UMzIgPSAweGZmZmZmZmZmO1xuXG4vLyBiYWJlbC1taW5pZnkgdHJhbnNwaWxlcyBSZWdFeHAoJ3gnLCAneScpIC0+IC94L3kgYW5kIGl0IGNhdXNlcyBTeW50YXhFcnJvclxudmFyIFNVUFBPUlRTX1kgPSAhZmFpbHMoZnVuY3Rpb24gKCkgeyBSZWdFeHAoTUFYX1VJTlQzMiwgJ3knKTsgfSk7XG5cbi8vIEBAc3BsaXQgbG9naWNcbnJlcXVpcmUoJy4vX2ZpeC1yZS13a3MnKSgnc3BsaXQnLCAyLCBmdW5jdGlvbiAoZGVmaW5lZCwgU1BMSVQsICRzcGxpdCwgbWF5YmVDYWxsTmF0aXZlKSB7XG4gIHZhciBpbnRlcm5hbFNwbGl0O1xuICBpZiAoXG4gICAgJ2FiYmMnWyRTUExJVF0oLyhiKSovKVsxXSA9PSAnYycgfHxcbiAgICAndGVzdCdbJFNQTElUXSgvKD86KS8sIC0xKVtMRU5HVEhdICE9IDQgfHxcbiAgICAnYWInWyRTUExJVF0oLyg/OmFiKSovKVtMRU5HVEhdICE9IDIgfHxcbiAgICAnLidbJFNQTElUXSgvKC4/KSguPykvKVtMRU5HVEhdICE9IDQgfHxcbiAgICAnLidbJFNQTElUXSgvKCkoKS8pW0xFTkdUSF0gPiAxIHx8XG4gICAgJydbJFNQTElUXSgvLj8vKVtMRU5HVEhdXG4gICkge1xuICAgIC8vIGJhc2VkIG9uIGVzNS1zaGltIGltcGxlbWVudGF0aW9uLCBuZWVkIHRvIHJld29yayBpdFxuICAgIGludGVybmFsU3BsaXQgPSBmdW5jdGlvbiAoc2VwYXJhdG9yLCBsaW1pdCkge1xuICAgICAgdmFyIHN0cmluZyA9IFN0cmluZyh0aGlzKTtcbiAgICAgIGlmIChzZXBhcmF0b3IgPT09IHVuZGVmaW5lZCAmJiBsaW1pdCA9PT0gMCkgcmV0dXJuIFtdO1xuICAgICAgLy8gSWYgYHNlcGFyYXRvcmAgaXMgbm90IGEgcmVnZXgsIHVzZSBuYXRpdmUgc3BsaXRcbiAgICAgIGlmICghaXNSZWdFeHAoc2VwYXJhdG9yKSkgcmV0dXJuICRzcGxpdC5jYWxsKHN0cmluZywgc2VwYXJhdG9yLCBsaW1pdCk7XG4gICAgICB2YXIgb3V0cHV0ID0gW107XG4gICAgICB2YXIgZmxhZ3MgPSAoc2VwYXJhdG9yLmlnbm9yZUNhc2UgPyAnaScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHNlcGFyYXRvci5tdWx0aWxpbmUgPyAnbScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHNlcGFyYXRvci51bmljb2RlID8gJ3UnIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChzZXBhcmF0b3Iuc3RpY2t5ID8gJ3knIDogJycpO1xuICAgICAgdmFyIGxhc3RMYXN0SW5kZXggPSAwO1xuICAgICAgdmFyIHNwbGl0TGltaXQgPSBsaW1pdCA9PT0gdW5kZWZpbmVkID8gTUFYX1VJTlQzMiA6IGxpbWl0ID4+PiAwO1xuICAgICAgLy8gTWFrZSBgZ2xvYmFsYCBhbmQgYXZvaWQgYGxhc3RJbmRleGAgaXNzdWVzIGJ5IHdvcmtpbmcgd2l0aCBhIGNvcHlcbiAgICAgIHZhciBzZXBhcmF0b3JDb3B5ID0gbmV3IFJlZ0V4cChzZXBhcmF0b3Iuc291cmNlLCBmbGFncyArICdnJyk7XG4gICAgICB2YXIgbWF0Y2gsIGxhc3RJbmRleCwgbGFzdExlbmd0aDtcbiAgICAgIHdoaWxlIChtYXRjaCA9IHJlZ2V4cEV4ZWMuY2FsbChzZXBhcmF0b3JDb3B5LCBzdHJpbmcpKSB7XG4gICAgICAgIGxhc3RJbmRleCA9IHNlcGFyYXRvckNvcHlbTEFTVF9JTkRFWF07XG4gICAgICAgIGlmIChsYXN0SW5kZXggPiBsYXN0TGFzdEluZGV4KSB7XG4gICAgICAgICAgb3V0cHV0LnB1c2goc3RyaW5nLnNsaWNlKGxhc3RMYXN0SW5kZXgsIG1hdGNoLmluZGV4KSk7XG4gICAgICAgICAgaWYgKG1hdGNoW0xFTkdUSF0gPiAxICYmIG1hdGNoLmluZGV4IDwgc3RyaW5nW0xFTkdUSF0pICRwdXNoLmFwcGx5KG91dHB1dCwgbWF0Y2guc2xpY2UoMSkpO1xuICAgICAgICAgIGxhc3RMZW5ndGggPSBtYXRjaFswXVtMRU5HVEhdO1xuICAgICAgICAgIGxhc3RMYXN0SW5kZXggPSBsYXN0SW5kZXg7XG4gICAgICAgICAgaWYgKG91dHB1dFtMRU5HVEhdID49IHNwbGl0TGltaXQpIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzZXBhcmF0b3JDb3B5W0xBU1RfSU5ERVhdID09PSBtYXRjaC5pbmRleCkgc2VwYXJhdG9yQ29weVtMQVNUX0lOREVYXSsrOyAvLyBBdm9pZCBhbiBpbmZpbml0ZSBsb29wXG4gICAgICB9XG4gICAgICBpZiAobGFzdExhc3RJbmRleCA9PT0gc3RyaW5nW0xFTkdUSF0pIHtcbiAgICAgICAgaWYgKGxhc3RMZW5ndGggfHwgIXNlcGFyYXRvckNvcHkudGVzdCgnJykpIG91dHB1dC5wdXNoKCcnKTtcbiAgICAgIH0gZWxzZSBvdXRwdXQucHVzaChzdHJpbmcuc2xpY2UobGFzdExhc3RJbmRleCkpO1xuICAgICAgcmV0dXJuIG91dHB1dFtMRU5HVEhdID4gc3BsaXRMaW1pdCA/IG91dHB1dC5zbGljZSgwLCBzcGxpdExpbWl0KSA6IG91dHB1dDtcbiAgICB9O1xuICAvLyBDaGFrcmEsIFY4XG4gIH0gZWxzZSBpZiAoJzAnWyRTUExJVF0odW5kZWZpbmVkLCAwKVtMRU5HVEhdKSB7XG4gICAgaW50ZXJuYWxTcGxpdCA9IGZ1bmN0aW9uIChzZXBhcmF0b3IsIGxpbWl0KSB7XG4gICAgICByZXR1cm4gc2VwYXJhdG9yID09PSB1bmRlZmluZWQgJiYgbGltaXQgPT09IDAgPyBbXSA6ICRzcGxpdC5jYWxsKHRoaXMsIHNlcGFyYXRvciwgbGltaXQpO1xuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgaW50ZXJuYWxTcGxpdCA9ICRzcGxpdDtcbiAgfVxuXG4gIHJldHVybiBbXG4gICAgLy8gYFN0cmluZy5wcm90b3R5cGUuc3BsaXRgIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUuc3BsaXRcbiAgICBmdW5jdGlvbiBzcGxpdChzZXBhcmF0b3IsIGxpbWl0KSB7XG4gICAgICB2YXIgTyA9IGRlZmluZWQodGhpcyk7XG4gICAgICB2YXIgc3BsaXR0ZXIgPSBzZXBhcmF0b3IgPT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogc2VwYXJhdG9yW1NQTElUXTtcbiAgICAgIHJldHVybiBzcGxpdHRlciAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8gc3BsaXR0ZXIuY2FsbChzZXBhcmF0b3IsIE8sIGxpbWl0KVxuICAgICAgICA6IGludGVybmFsU3BsaXQuY2FsbChTdHJpbmcoTyksIHNlcGFyYXRvciwgbGltaXQpO1xuICAgIH0sXG4gICAgLy8gYFJlZ0V4cC5wcm90b3R5cGVbQEBzcGxpdF1gIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXJlZ2V4cC5wcm90b3R5cGUtQEBzcGxpdFxuICAgIC8vXG4gICAgLy8gTk9URTogVGhpcyBjYW5ub3QgYmUgcHJvcGVybHkgcG9seWZpbGxlZCBpbiBlbmdpbmVzIHRoYXQgZG9uJ3Qgc3VwcG9ydFxuICAgIC8vIHRoZSAneScgZmxhZy5cbiAgICBmdW5jdGlvbiAocmVnZXhwLCBsaW1pdCkge1xuICAgICAgdmFyIHJlcyA9IG1heWJlQ2FsbE5hdGl2ZShpbnRlcm5hbFNwbGl0LCByZWdleHAsIHRoaXMsIGxpbWl0LCBpbnRlcm5hbFNwbGl0ICE9PSAkc3BsaXQpO1xuICAgICAgaWYgKHJlcy5kb25lKSByZXR1cm4gcmVzLnZhbHVlO1xuXG4gICAgICB2YXIgcnggPSBhbk9iamVjdChyZWdleHApO1xuICAgICAgdmFyIFMgPSBTdHJpbmcodGhpcyk7XG4gICAgICB2YXIgQyA9IHNwZWNpZXNDb25zdHJ1Y3RvcihyeCwgUmVnRXhwKTtcblxuICAgICAgdmFyIHVuaWNvZGVNYXRjaGluZyA9IHJ4LnVuaWNvZGU7XG4gICAgICB2YXIgZmxhZ3MgPSAocnguaWdub3JlQ2FzZSA/ICdpJyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAocngubXVsdGlsaW5lID8gJ20nIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChyeC51bmljb2RlID8gJ3UnIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChTVVBQT1JUU19ZID8gJ3knIDogJ2cnKTtcblxuICAgICAgLy8gXig/ICsgcnggKyApIGlzIG5lZWRlZCwgaW4gY29tYmluYXRpb24gd2l0aCBzb21lIFMgc2xpY2luZywgdG9cbiAgICAgIC8vIHNpbXVsYXRlIHRoZSAneScgZmxhZy5cbiAgICAgIHZhciBzcGxpdHRlciA9IG5ldyBDKFNVUFBPUlRTX1kgPyByeCA6ICdeKD86JyArIHJ4LnNvdXJjZSArICcpJywgZmxhZ3MpO1xuICAgICAgdmFyIGxpbSA9IGxpbWl0ID09PSB1bmRlZmluZWQgPyBNQVhfVUlOVDMyIDogbGltaXQgPj4+IDA7XG4gICAgICBpZiAobGltID09PSAwKSByZXR1cm4gW107XG4gICAgICBpZiAoUy5sZW5ndGggPT09IDApIHJldHVybiBjYWxsUmVnRXhwRXhlYyhzcGxpdHRlciwgUykgPT09IG51bGwgPyBbU10gOiBbXTtcbiAgICAgIHZhciBwID0gMDtcbiAgICAgIHZhciBxID0gMDtcbiAgICAgIHZhciBBID0gW107XG4gICAgICB3aGlsZSAocSA8IFMubGVuZ3RoKSB7XG4gICAgICAgIHNwbGl0dGVyLmxhc3RJbmRleCA9IFNVUFBPUlRTX1kgPyBxIDogMDtcbiAgICAgICAgdmFyIHogPSBjYWxsUmVnRXhwRXhlYyhzcGxpdHRlciwgU1VQUE9SVFNfWSA/IFMgOiBTLnNsaWNlKHEpKTtcbiAgICAgICAgdmFyIGU7XG4gICAgICAgIGlmIChcbiAgICAgICAgICB6ID09PSBudWxsIHx8XG4gICAgICAgICAgKGUgPSAkbWluKHRvTGVuZ3RoKHNwbGl0dGVyLmxhc3RJbmRleCArIChTVVBQT1JUU19ZID8gMCA6IHEpKSwgUy5sZW5ndGgpKSA9PT0gcFxuICAgICAgICApIHtcbiAgICAgICAgICBxID0gYWR2YW5jZVN0cmluZ0luZGV4KFMsIHEsIHVuaWNvZGVNYXRjaGluZyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgQS5wdXNoKFMuc2xpY2UocCwgcSkpO1xuICAgICAgICAgIGlmIChBLmxlbmd0aCA9PT0gbGltKSByZXR1cm4gQTtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8PSB6Lmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICAgICAgQS5wdXNoKHpbaV0pO1xuICAgICAgICAgICAgaWYgKEEubGVuZ3RoID09PSBsaW0pIHJldHVybiBBO1xuICAgICAgICAgIH1cbiAgICAgICAgICBxID0gcCA9IGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIEEucHVzaChTLnNsaWNlKHApKTtcbiAgICAgIHJldHVybiBBO1xuICAgIH1cbiAgXTtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///242\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar LIBRARY = __webpack_require__(29);\nvar global = __webpack_require__(2);\nvar ctx = __webpack_require__(19);\nvar classof = __webpack_require__(44);\nvar $export = __webpack_require__(0);\nvar isObject = __webpack_require__(4);\nvar aFunction = __webpack_require__(10);\nvar anInstance = __webpack_require__(39);\nvar forOf = __webpack_require__(40);\nvar speciesConstructor = __webpack_require__(51);\nvar task = __webpack_require__(89).set;\nvar microtask = __webpack_require__(90)();\nvar newPromiseCapabilityModule = __webpack_require__(91);\nvar perform = __webpack_require__(115);\nvar userAgent = __webpack_require__(60);\nvar promiseResolve = __webpack_require__(116);\nvar PROMISE = 'Promise';\nvar TypeError = global.TypeError;\nvar process = global.process;\nvar versions = process && process.versions;\nvar v8 = versions && versions.v8 || '';\nvar $Promise = global[PROMISE];\nvar isNode = classof(process) == 'process';\nvar empty = function () { /* empty */ };\nvar Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper;\nvar newPromiseCapability = newGenericPromiseCapability = newPromiseCapabilityModule.f;\n\nvar USE_NATIVE = !!function () {\n try {\n // correct subclassing with @@species support\n var promise = $Promise.resolve(1);\n var FakePromise = (promise.constructor = {})[__webpack_require__(5)('species')] = function (exec) {\n exec(empty, empty);\n };\n // unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n return (isNode || typeof PromiseRejectionEvent == 'function')\n && promise.then(empty) instanceof FakePromise\n // v8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables\n // https://bugs.chromium.org/p/chromium/issues/detail?id=830565\n // we can't detect it synchronously, so just check versions\n && v8.indexOf('6.6') !== 0\n && userAgent.indexOf('Chrome/66') === -1;\n } catch (e) { /* empty */ }\n}();\n\n// helpers\nvar isThenable = function (it) {\n var then;\n return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\nvar notify = function (promise, isReject) {\n if (promise._n) return;\n promise._n = true;\n var chain = promise._c;\n microtask(function () {\n var value = promise._v;\n var ok = promise._s == 1;\n var i = 0;\n var run = function (reaction) {\n var handler = ok ? reaction.ok : reaction.fail;\n var resolve = reaction.resolve;\n var reject = reaction.reject;\n var domain = reaction.domain;\n var result, then, exited;\n try {\n if (handler) {\n if (!ok) {\n if (promise._h == 2) onHandleUnhandled(promise);\n promise._h = 1;\n }\n if (handler === true) result = value;\n else {\n if (domain) domain.enter();\n result = handler(value); // may throw\n if (domain) {\n domain.exit();\n exited = true;\n }\n }\n if (result === reaction.promise) {\n reject(TypeError('Promise-chain cycle'));\n } else if (then = isThenable(result)) {\n then.call(result, resolve, reject);\n } else resolve(result);\n } else reject(value);\n } catch (e) {\n if (domain && !exited) domain.exit();\n reject(e);\n }\n };\n while (chain.length > i) run(chain[i++]); // variable length - can't use forEach\n promise._c = [];\n promise._n = false;\n if (isReject && !promise._h) onUnhandled(promise);\n });\n};\nvar onUnhandled = function (promise) {\n task.call(global, function () {\n var value = promise._v;\n var unhandled = isUnhandled(promise);\n var result, handler, console;\n if (unhandled) {\n result = perform(function () {\n if (isNode) {\n process.emit('unhandledRejection', value, promise);\n } else if (handler = global.onunhandledrejection) {\n handler({ promise: promise, reason: value });\n } else if ((console = global.console) && console.error) {\n console.error('Unhandled promise rejection', value);\n }\n });\n // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n promise._h = isNode || isUnhandled(promise) ? 2 : 1;\n } promise._a = undefined;\n if (unhandled && result.e) throw result.v;\n });\n};\nvar isUnhandled = function (promise) {\n return promise._h !== 1 && (promise._a || promise._c).length === 0;\n};\nvar onHandleUnhandled = function (promise) {\n task.call(global, function () {\n var handler;\n if (isNode) {\n process.emit('rejectionHandled', promise);\n } else if (handler = global.onrejectionhandled) {\n handler({ promise: promise, reason: promise._v });\n }\n });\n};\nvar $reject = function (value) {\n var promise = this;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n promise._v = value;\n promise._s = 2;\n if (!promise._a) promise._a = promise._c.slice();\n notify(promise, true);\n};\nvar $resolve = function (value) {\n var promise = this;\n var then;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n try {\n if (promise === value) throw TypeError(\"Promise can't be resolved itself\");\n if (then = isThenable(value)) {\n microtask(function () {\n var wrapper = { _w: promise, _d: false }; // wrap\n try {\n then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));\n } catch (e) {\n $reject.call(wrapper, e);\n }\n });\n } else {\n promise._v = value;\n promise._s = 1;\n notify(promise, false);\n }\n } catch (e) {\n $reject.call({ _w: promise, _d: false }, e); // wrap\n }\n};\n\n// constructor polyfill\nif (!USE_NATIVE) {\n // 25.4.3.1 Promise(executor)\n $Promise = function Promise(executor) {\n anInstance(this, $Promise, PROMISE, '_h');\n aFunction(executor);\n Internal.call(this);\n try {\n executor(ctx($resolve, this, 1), ctx($reject, this, 1));\n } catch (err) {\n $reject.call(this, err);\n }\n };\n // eslint-disable-next-line no-unused-vars\n Internal = function Promise(executor) {\n this._c = []; // <- awaiting reactions\n this._a = undefined; // <- checked in isUnhandled reactions\n this._s = 0; // <- state\n this._d = false; // <- done\n this._v = undefined; // <- value\n this._h = 0; // <- rejection state, 0 - default, 1 - handled, 2 - unhandled\n this._n = false; // <- notify\n };\n Internal.prototype = __webpack_require__(41)($Promise.prototype, {\n // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)\n then: function then(onFulfilled, onRejected) {\n var reaction = newPromiseCapability(speciesConstructor(this, $Promise));\n reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\n reaction.fail = typeof onRejected == 'function' && onRejected;\n reaction.domain = isNode ? process.domain : undefined;\n this._c.push(reaction);\n if (this._a) this._a.push(reaction);\n if (this._s) notify(this, false);\n return reaction.promise;\n },\n // 25.4.5.1 Promise.prototype.catch(onRejected)\n 'catch': function (onRejected) {\n return this.then(undefined, onRejected);\n }\n });\n OwnPromiseCapability = function () {\n var promise = new Internal();\n this.promise = promise;\n this.resolve = ctx($resolve, promise, 1);\n this.reject = ctx($reject, promise, 1);\n };\n newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n return C === $Promise || C === Wrapper\n ? new OwnPromiseCapability(C)\n : newGenericPromiseCapability(C);\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Promise: $Promise });\n__webpack_require__(43)($Promise, PROMISE);\n__webpack_require__(38)(PROMISE);\nWrapper = __webpack_require__(18)[PROMISE];\n\n// statics\n$export($export.S + $export.F * !USE_NATIVE, PROMISE, {\n // 25.4.4.5 Promise.reject(r)\n reject: function reject(r) {\n var capability = newPromiseCapability(this);\n var $$reject = capability.reject;\n $$reject(r);\n return capability.promise;\n }\n});\n$export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {\n // 25.4.4.6 Promise.resolve(x)\n resolve: function resolve(x) {\n return promiseResolve(LIBRARY && this === Wrapper ? $Promise : this, x);\n }\n});\n$export($export.S + $export.F * !(USE_NATIVE && __webpack_require__(57)(function (iter) {\n $Promise.all(iter)['catch'](empty);\n})), PROMISE, {\n // 25.4.4.1 Promise.all(iterable)\n all: function all(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var values = [];\n var index = 0;\n var remaining = 1;\n forOf(iterable, false, function (promise) {\n var $index = index++;\n var alreadyCalled = false;\n values.push(undefined);\n remaining++;\n C.resolve(promise).then(function (value) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[$index] = value;\n --remaining || resolve(values);\n }, reject);\n });\n --remaining || resolve(values);\n });\n if (result.e) reject(result.v);\n return capability.promise;\n },\n // 25.4.4.4 Promise.race(iterable)\n race: function race(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var reject = capability.reject;\n var result = perform(function () {\n forOf(iterable, false, function (promise) {\n C.resolve(promise).then(capability.resolve, reject);\n });\n });\n if (result.e) reject(result.v);\n return capability.promise;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucHJvbWlzZS5qcz81NTFjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsY0FBYyxtQkFBTyxDQUFDLEVBQVk7QUFDbEMsYUFBYSxtQkFBTyxDQUFDLENBQVc7QUFDaEMsVUFBVSxtQkFBTyxDQUFDLEVBQVE7QUFDMUIsY0FBYyxtQkFBTyxDQUFDLEVBQVk7QUFDbEMsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2QyxpQkFBaUIsbUJBQU8sQ0FBQyxFQUFnQjtBQUN6QyxZQUFZLG1CQUFPLENBQUMsRUFBVztBQUMvQix5QkFBeUIsbUJBQU8sQ0FBQyxFQUF3QjtBQUN6RCxXQUFXLG1CQUFPLENBQUMsRUFBUztBQUM1QixnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFjO0FBQ3RDLGlDQUFpQyxtQkFBTyxDQUFDLEVBQTJCO0FBQ3BFLGNBQWMsbUJBQU8sQ0FBQyxHQUFZO0FBQ2xDLGdCQUFnQixtQkFBTyxDQUFDLEVBQWU7QUFDdkMscUJBQXFCLG1CQUFPLENBQUMsR0FBb0I7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtDQUErQyxFQUFFLG1CQUFPLENBQUMsQ0FBUTtBQUNqRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUcsWUFBWTtBQUNmLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0M7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQSxXQUFXO0FBQ1gsU0FBUztBQUNULE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZDQUE2QztBQUM3QztBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsbUJBQW1CLGtDQUFrQztBQUNyRCxTQUFTO0FBQ1Q7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxlQUFlLHVDQUF1QztBQUN0RDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLDBCQUEwQjtBQUNqRDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILGtCQUFrQix5QkFBeUIsS0FBSztBQUNoRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCLHdCQUF3QjtBQUN4QixnQkFBZ0I7QUFDaEIsb0JBQW9CO0FBQ3BCLHdCQUF3QjtBQUN4QixnQkFBZ0I7QUFDaEIsb0JBQW9CO0FBQ3BCO0FBQ0EsdUJBQXVCLG1CQUFPLENBQUMsRUFBaUI7QUFDaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDBEQUEwRCxvQkFBb0I7QUFDOUUsbUJBQU8sQ0FBQyxFQUFzQjtBQUM5QixtQkFBTyxDQUFDLEVBQWdCO0FBQ3hCLFVBQVUsbUJBQU8sQ0FBQyxFQUFTOztBQUUzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCxnREFBZ0QsbUJBQU8sQ0FBQyxFQUFnQjtBQUN4RTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULE9BQU87QUFDUDtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjQzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIExJQlJBUlkgPSByZXF1aXJlKCcuL19saWJyYXJ5Jyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4vX2NsYXNzb2YnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG52YXIgZm9yT2YgPSByZXF1aXJlKCcuL19mb3Itb2YnKTtcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuL19zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG52YXIgdGFzayA9IHJlcXVpcmUoJy4vX3Rhc2snKS5zZXQ7XG52YXIgbWljcm90YXNrID0gcmVxdWlyZSgnLi9fbWljcm90YXNrJykoKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZSA9IHJlcXVpcmUoJy4vX25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcbnZhciBwZXJmb3JtID0gcmVxdWlyZSgnLi9fcGVyZm9ybScpO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4vX3VzZXItYWdlbnQnKTtcbnZhciBwcm9taXNlUmVzb2x2ZSA9IHJlcXVpcmUoJy4vX3Byb21pc2UtcmVzb2x2ZScpO1xudmFyIFBST01JU0UgPSAnUHJvbWlzZSc7XG52YXIgVHlwZUVycm9yID0gZ2xvYmFsLlR5cGVFcnJvcjtcbnZhciBwcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3M7XG52YXIgdmVyc2lvbnMgPSBwcm9jZXNzICYmIHByb2Nlc3MudmVyc2lvbnM7XG52YXIgdjggPSB2ZXJzaW9ucyAmJiB2ZXJzaW9ucy52OCB8fCAnJztcbnZhciAkUHJvbWlzZSA9IGdsb2JhbFtQUk9NSVNFXTtcbnZhciBpc05vZGUgPSBjbGFzc29mKHByb2Nlc3MpID09ICdwcm9jZXNzJztcbnZhciBlbXB0eSA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcbnZhciBJbnRlcm5hbCwgbmV3R2VuZXJpY1Byb21pc2VDYXBhYmlsaXR5LCBPd25Qcm9taXNlQ2FwYWJpbGl0eSwgV3JhcHBlcjtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IG5ld0dlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmY7XG5cbnZhciBVU0VfTkFUSVZFID0gISFmdW5jdGlvbiAoKSB7XG4gIHRyeSB7XG4gICAgLy8gY29ycmVjdCBzdWJjbGFzc2luZyB3aXRoIEBAc3BlY2llcyBzdXBwb3J0XG4gICAgdmFyIHByb21pc2UgPSAkUHJvbWlzZS5yZXNvbHZlKDEpO1xuICAgIHZhciBGYWtlUHJvbWlzZSA9IChwcm9taXNlLmNvbnN0cnVjdG9yID0ge30pW3JlcXVpcmUoJy4vX3drcycpKCdzcGVjaWVzJyldID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgICAgIGV4ZWMoZW1wdHksIGVtcHR5KTtcbiAgICB9O1xuICAgIC8vIHVuaGFuZGxlZCByZWplY3Rpb25zIHRyYWNraW5nIHN1cHBvcnQsIE5vZGVKUyBQcm9taXNlIHdpdGhvdXQgaXQgZmFpbHMgQEBzcGVjaWVzIHRlc3RcbiAgICByZXR1cm4gKGlzTm9kZSB8fCB0eXBlb2YgUHJvbWlzZVJlamVjdGlvbkV2ZW50ID09ICdmdW5jdGlvbicpXG4gICAgICAmJiBwcm9taXNlLnRoZW4oZW1wdHkpIGluc3RhbmNlb2YgRmFrZVByb21pc2VcbiAgICAgIC8vIHY4IDYuNiAoTm9kZSAxMCBhbmQgQ2hyb21lIDY2KSBoYXZlIGEgYnVnIHdpdGggcmVzb2x2aW5nIGN1c3RvbSB0aGVuYWJsZXNcbiAgICAgIC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTgzMDU2NVxuICAgICAgLy8gd2UgY2FuJ3QgZGV0ZWN0IGl0IHN5bmNocm9ub3VzbHksIHNvIGp1c3QgY2hlY2sgdmVyc2lvbnNcbiAgICAgICYmIHY4LmluZGV4T2YoJzYuNicpICE9PSAwXG4gICAgICAmJiB1c2VyQWdlbnQuaW5kZXhPZignQ2hyb21lLzY2JykgPT09IC0xO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbn0oKTtcblxuLy8gaGVscGVyc1xudmFyIGlzVGhlbmFibGUgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIHRoZW47XG4gIHJldHVybiBpc09iamVjdChpdCkgJiYgdHlwZW9mICh0aGVuID0gaXQudGhlbikgPT0gJ2Z1bmN0aW9uJyA/IHRoZW4gOiBmYWxzZTtcbn07XG52YXIgbm90aWZ5ID0gZnVuY3Rpb24gKHByb21pc2UsIGlzUmVqZWN0KSB7XG4gIGlmIChwcm9taXNlLl9uKSByZXR1cm47XG4gIHByb21pc2UuX24gPSB0cnVlO1xuICB2YXIgY2hhaW4gPSBwcm9taXNlLl9jO1xuICBtaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgIHZhciB2YWx1ZSA9IHByb21pc2UuX3Y7XG4gICAgdmFyIG9rID0gcHJvbWlzZS5fcyA9PSAxO1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIgcnVuID0gZnVuY3Rpb24gKHJlYWN0aW9uKSB7XG4gICAgICB2YXIgaGFuZGxlciA9IG9rID8gcmVhY3Rpb24ub2sgOiByZWFjdGlvbi5mYWlsO1xuICAgICAgdmFyIHJlc29sdmUgPSByZWFjdGlvbi5yZXNvbHZlO1xuICAgICAgdmFyIHJlamVjdCA9IHJlYWN0aW9uLnJlamVjdDtcbiAgICAgIHZhciBkb21haW4gPSByZWFjdGlvbi5kb21haW47XG4gICAgICB2YXIgcmVzdWx0LCB0aGVuLCBleGl0ZWQ7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoaGFuZGxlcikge1xuICAgICAgICAgIGlmICghb2spIHtcbiAgICAgICAgICAgIGlmIChwcm9taXNlLl9oID09IDIpIG9uSGFuZGxlVW5oYW5kbGVkKHByb21pc2UpO1xuICAgICAgICAgICAgcHJvbWlzZS5faCA9IDE7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChoYW5kbGVyID09PSB0cnVlKSByZXN1bHQgPSB2YWx1ZTtcbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChkb21haW4pIGRvbWFpbi5lbnRlcigpO1xuICAgICAgICAgICAgcmVzdWx0ID0gaGFuZGxlcih2YWx1ZSk7IC8vIG1heSB0aHJvd1xuICAgICAgICAgICAgaWYgKGRvbWFpbikge1xuICAgICAgICAgICAgICBkb21haW4uZXhpdCgpO1xuICAgICAgICAgICAgICBleGl0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocmVzdWx0ID09PSByZWFjdGlvbi5wcm9taXNlKSB7XG4gICAgICAgICAgICByZWplY3QoVHlwZUVycm9yKCdQcm9taXNlLWNoYWluIGN5Y2xlJykpO1xuICAgICAgICAgIH0gZWxzZSBpZiAodGhlbiA9IGlzVGhlbmFibGUocmVzdWx0KSkge1xuICAgICAgICAgICAgdGhlbi5jYWxsKHJlc3VsdCwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICB9IGVsc2UgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICB9IGVsc2UgcmVqZWN0KHZhbHVlKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKGRvbWFpbiAmJiAhZXhpdGVkKSBkb21haW4uZXhpdCgpO1xuICAgICAgICByZWplY3QoZSk7XG4gICAgICB9XG4gICAgfTtcbiAgICB3aGlsZSAoY2hhaW4ubGVuZ3RoID4gaSkgcnVuKGNoYWluW2krK10pOyAvLyB2YXJpYWJsZSBsZW5ndGggLSBjYW4ndCB1c2UgZm9yRWFjaFxuICAgIHByb21pc2UuX2MgPSBbXTtcbiAgICBwcm9taXNlLl9uID0gZmFsc2U7XG4gICAgaWYgKGlzUmVqZWN0ICYmICFwcm9taXNlLl9oKSBvblVuaGFuZGxlZChwcm9taXNlKTtcbiAgfSk7XG59O1xudmFyIG9uVW5oYW5kbGVkID0gZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgdGFzay5jYWxsKGdsb2JhbCwgZnVuY3Rpb24gKCkge1xuICAgIHZhciB2YWx1ZSA9IHByb21pc2UuX3Y7XG4gICAgdmFyIHVuaGFuZGxlZCA9IGlzVW5oYW5kbGVkKHByb21pc2UpO1xuICAgIHZhciByZXN1bHQsIGhhbmRsZXIsIGNvbnNvbGU7XG4gICAgaWYgKHVuaGFuZGxlZCkge1xuICAgICAgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChpc05vZGUpIHtcbiAgICAgICAgICBwcm9jZXNzLmVtaXQoJ3VuaGFuZGxlZFJlamVjdGlvbicsIHZhbHVlLCBwcm9taXNlKTtcbiAgICAgICAgfSBlbHNlIGlmIChoYW5kbGVyID0gZ2xvYmFsLm9udW5oYW5kbGVkcmVqZWN0aW9uKSB7XG4gICAgICAgICAgaGFuZGxlcih7IHByb21pc2U6IHByb21pc2UsIHJlYXNvbjogdmFsdWUgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoKGNvbnNvbGUgPSBnbG9iYWwuY29uc29sZSkgJiYgY29uc29sZS5lcnJvcikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1VuaGFuZGxlZCBwcm9taXNlIHJlamVjdGlvbicsIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICAvLyBCcm93c2VycyBzaG91bGQgbm90IHRyaWdnZXIgYHJlamVjdGlvbkhhbmRsZWRgIGV2ZW50IGlmIGl0IHdhcyBoYW5kbGVkIGhlcmUsIE5vZGVKUyAtIHNob3VsZFxuICAgICAgcHJvbWlzZS5faCA9IGlzTm9kZSB8fCBpc1VuaGFuZGxlZChwcm9taXNlKSA/IDIgOiAxO1xuICAgIH0gcHJvbWlzZS5fYSA9IHVuZGVmaW5lZDtcbiAgICBpZiAodW5oYW5kbGVkICYmIHJlc3VsdC5lKSB0aHJvdyByZXN1bHQudjtcbiAgfSk7XG59O1xudmFyIGlzVW5oYW5kbGVkID0gZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgcmV0dXJuIHByb21pc2UuX2ggIT09IDEgJiYgKHByb21pc2UuX2EgfHwgcHJvbWlzZS5fYykubGVuZ3RoID09PSAwO1xufTtcbnZhciBvbkhhbmRsZVVuaGFuZGxlZCA9IGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gIHRhc2suY2FsbChnbG9iYWwsIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgaGFuZGxlcjtcbiAgICBpZiAoaXNOb2RlKSB7XG4gICAgICBwcm9jZXNzLmVtaXQoJ3JlamVjdGlvbkhhbmRsZWQnLCBwcm9taXNlKTtcbiAgICB9IGVsc2UgaWYgKGhhbmRsZXIgPSBnbG9iYWwub25yZWplY3Rpb25oYW5kbGVkKSB7XG4gICAgICBoYW5kbGVyKHsgcHJvbWlzZTogcHJvbWlzZSwgcmVhc29uOiBwcm9taXNlLl92IH0pO1xuICAgIH1cbiAgfSk7XG59O1xudmFyICRyZWplY3QgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgdmFyIHByb21pc2UgPSB0aGlzO1xuICBpZiAocHJvbWlzZS5fZCkgcmV0dXJuO1xuICBwcm9taXNlLl9kID0gdHJ1ZTtcbiAgcHJvbWlzZSA9IHByb21pc2UuX3cgfHwgcHJvbWlzZTsgLy8gdW53cmFwXG4gIHByb21pc2UuX3YgPSB2YWx1ZTtcbiAgcHJvbWlzZS5fcyA9IDI7XG4gIGlmICghcHJvbWlzZS5fYSkgcHJvbWlzZS5fYSA9IHByb21pc2UuX2Muc2xpY2UoKTtcbiAgbm90aWZ5KHByb21pc2UsIHRydWUpO1xufTtcbnZhciAkcmVzb2x2ZSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICB2YXIgcHJvbWlzZSA9IHRoaXM7XG4gIHZhciB0aGVuO1xuICBpZiAocHJvbWlzZS5fZCkgcmV0dXJuO1xuICBwcm9taXNlLl9kID0gdHJ1ZTtcbiAgcHJvbWlzZSA9IHByb21pc2UuX3cgfHwgcHJvbWlzZTsgLy8gdW53cmFwXG4gIHRyeSB7XG4gICAgaWYgKHByb21pc2UgPT09IHZhbHVlKSB0aHJvdyBUeXBlRXJyb3IoXCJQcm9taXNlIGNhbid0IGJlIHJlc29sdmVkIGl0c2VsZlwiKTtcbiAgICBpZiAodGhlbiA9IGlzVGhlbmFibGUodmFsdWUpKSB7XG4gICAgICBtaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgd3JhcHBlciA9IHsgX3c6IHByb21pc2UsIF9kOiBmYWxzZSB9OyAvLyB3cmFwXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdGhlbi5jYWxsKHZhbHVlLCBjdHgoJHJlc29sdmUsIHdyYXBwZXIsIDEpLCBjdHgoJHJlamVjdCwgd3JhcHBlciwgMSkpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgJHJlamVjdC5jYWxsKHdyYXBwZXIsIGUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJvbWlzZS5fdiA9IHZhbHVlO1xuICAgICAgcHJvbWlzZS5fcyA9IDE7XG4gICAgICBub3RpZnkocHJvbWlzZSwgZmFsc2UpO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgICRyZWplY3QuY2FsbCh7IF93OiBwcm9taXNlLCBfZDogZmFsc2UgfSwgZSk7IC8vIHdyYXBcbiAgfVxufTtcblxuLy8gY29uc3RydWN0b3IgcG9seWZpbGxcbmlmICghVVNFX05BVElWRSkge1xuICAvLyAyNS40LjMuMSBQcm9taXNlKGV4ZWN1dG9yKVxuICAkUHJvbWlzZSA9IGZ1bmN0aW9uIFByb21pc2UoZXhlY3V0b3IpIHtcbiAgICBhbkluc3RhbmNlKHRoaXMsICRQcm9taXNlLCBQUk9NSVNFLCAnX2gnKTtcbiAgICBhRnVuY3Rpb24oZXhlY3V0b3IpO1xuICAgIEludGVybmFsLmNhbGwodGhpcyk7XG4gICAgdHJ5IHtcbiAgICAgIGV4ZWN1dG9yKGN0eCgkcmVzb2x2ZSwgdGhpcywgMSksIGN0eCgkcmVqZWN0LCB0aGlzLCAxKSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAkcmVqZWN0LmNhbGwodGhpcywgZXJyKTtcbiAgICB9XG4gIH07XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuICBJbnRlcm5hbCA9IGZ1bmN0aW9uIFByb21pc2UoZXhlY3V0b3IpIHtcbiAgICB0aGlzLl9jID0gW107ICAgICAgICAgICAgIC8vIDwtIGF3YWl0aW5nIHJlYWN0aW9uc1xuICAgIHRoaXMuX2EgPSB1bmRlZmluZWQ7ICAgICAgLy8gPC0gY2hlY2tlZCBpbiBpc1VuaGFuZGxlZCByZWFjdGlvbnNcbiAgICB0aGlzLl9zID0gMDsgICAgICAgICAgICAgIC8vIDwtIHN0YXRlXG4gICAgdGhpcy5fZCA9IGZhbHNlOyAgICAgICAgICAvLyA8LSBkb25lXG4gICAgdGhpcy5fdiA9IHVuZGVmaW5lZDsgICAgICAvLyA8LSB2YWx1ZVxuICAgIHRoaXMuX2ggPSAwOyAgICAgICAgICAgICAgLy8gPC0gcmVqZWN0aW9uIHN0YXRlLCAwIC0gZGVmYXVsdCwgMSAtIGhhbmRsZWQsIDIgLSB1bmhhbmRsZWRcbiAgICB0aGlzLl9uID0gZmFsc2U7ICAgICAgICAgIC8vIDwtIG5vdGlmeVxuICB9O1xuICBJbnRlcm5hbC5wcm90b3R5cGUgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKSgkUHJvbWlzZS5wcm90b3R5cGUsIHtcbiAgICAvLyAyNS40LjUuMyBQcm9taXNlLnByb3RvdHlwZS50aGVuKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKVxuICAgIHRoZW46IGZ1bmN0aW9uIHRoZW4ob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpIHtcbiAgICAgIHZhciByZWFjdGlvbiA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KHNwZWNpZXNDb25zdHJ1Y3Rvcih0aGlzLCAkUHJvbWlzZSkpO1xuICAgICAgcmVhY3Rpb24ub2sgPSB0eXBlb2Ygb25GdWxmaWxsZWQgPT0gJ2Z1bmN0aW9uJyA/IG9uRnVsZmlsbGVkIDogdHJ1ZTtcbiAgICAgIHJlYWN0aW9uLmZhaWwgPSB0eXBlb2Ygb25SZWplY3RlZCA9PSAnZnVuY3Rpb24nICYmIG9uUmVqZWN0ZWQ7XG4gICAgICByZWFjdGlvbi5kb21haW4gPSBpc05vZGUgPyBwcm9jZXNzLmRvbWFpbiA6IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX2MucHVzaChyZWFjdGlvbik7XG4gICAgICBpZiAodGhpcy5fYSkgdGhpcy5fYS5wdXNoKHJlYWN0aW9uKTtcbiAgICAgIGlmICh0aGlzLl9zKSBub3RpZnkodGhpcywgZmFsc2UpO1xuICAgICAgcmV0dXJuIHJlYWN0aW9uLnByb21pc2U7XG4gICAgfSxcbiAgICAvLyAyNS40LjUuMSBQcm9taXNlLnByb3RvdHlwZS5jYXRjaChvblJlamVjdGVkKVxuICAgICdjYXRjaCc6IGZ1bmN0aW9uIChvblJlamVjdGVkKSB7XG4gICAgICByZXR1cm4gdGhpcy50aGVuKHVuZGVmaW5lZCwgb25SZWplY3RlZCk7XG4gICAgfVxuICB9KTtcbiAgT3duUHJvbWlzZUNhcGFiaWxpdHkgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHByb21pc2UgPSBuZXcgSW50ZXJuYWwoKTtcbiAgICB0aGlzLnByb21pc2UgPSBwcm9taXNlO1xuICAgIHRoaXMucmVzb2x2ZSA9IGN0eCgkcmVzb2x2ZSwgcHJvbWlzZSwgMSk7XG4gICAgdGhpcy5yZWplY3QgPSBjdHgoJHJlamVjdCwgcHJvbWlzZSwgMSk7XG4gIH07XG4gIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmYgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IGZ1bmN0aW9uIChDKSB7XG4gICAgcmV0dXJuIEMgPT09ICRQcm9taXNlIHx8IEMgPT09IFdyYXBwZXJcbiAgICAgID8gbmV3IE93blByb21pc2VDYXBhYmlsaXR5KEMpXG4gICAgICA6IG5ld0dlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eShDKTtcbiAgfTtcbn1cblxuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LlcgKyAkZXhwb3J0LkYgKiAhVVNFX05BVElWRSwgeyBQcm9taXNlOiAkUHJvbWlzZSB9KTtcbnJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJykoJFByb21pc2UsIFBST01JU0UpO1xucmVxdWlyZSgnLi9fc2V0LXNwZWNpZXMnKShQUk9NSVNFKTtcbldyYXBwZXIgPSByZXF1aXJlKCcuL19jb3JlJylbUFJPTUlTRV07XG5cbi8vIHN0YXRpY3NcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsIFBST01JU0UsIHtcbiAgLy8gMjUuNC40LjUgUHJvbWlzZS5yZWplY3QocilcbiAgcmVqZWN0OiBmdW5jdGlvbiByZWplY3Qocikge1xuICAgIHZhciBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkodGhpcyk7XG4gICAgdmFyICQkcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgJCRyZWplY3Qocik7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIChMSUJSQVJZIHx8ICFVU0VfTkFUSVZFKSwgUFJPTUlTRSwge1xuICAvLyAyNS40LjQuNiBQcm9taXNlLnJlc29sdmUoeClcbiAgcmVzb2x2ZTogZnVuY3Rpb24gcmVzb2x2ZSh4KSB7XG4gICAgcmV0dXJuIHByb21pc2VSZXNvbHZlKExJQlJBUlkgJiYgdGhpcyA9PT0gV3JhcHBlciA/ICRQcm9taXNlIDogdGhpcywgeCk7XG4gIH1cbn0pO1xuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhKFVTRV9OQVRJVkUgJiYgcmVxdWlyZSgnLi9faXRlci1kZXRlY3QnKShmdW5jdGlvbiAoaXRlcikge1xuICAkUHJvbWlzZS5hbGwoaXRlcilbJ2NhdGNoJ10oZW1wdHkpO1xufSkpLCBQUk9NSVNFLCB7XG4gIC8vIDI1LjQuNC4xIFByb21pc2UuYWxsKGl0ZXJhYmxlKVxuICBhbGw6IGZ1bmN0aW9uIGFsbChpdGVyYWJsZSkge1xuICAgIHZhciBDID0gdGhpcztcbiAgICB2YXIgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KEMpO1xuICAgIHZhciByZXNvbHZlID0gY2FwYWJpbGl0eS5yZXNvbHZlO1xuICAgIHZhciByZWplY3QgPSBjYXBhYmlsaXR5LnJlamVjdDtcbiAgICB2YXIgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgdmFsdWVzID0gW107XG4gICAgICB2YXIgaW5kZXggPSAwO1xuICAgICAgdmFyIHJlbWFpbmluZyA9IDE7XG4gICAgICBmb3JPZihpdGVyYWJsZSwgZmFsc2UsIGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gICAgICAgIHZhciAkaW5kZXggPSBpbmRleCsrO1xuICAgICAgICB2YXIgYWxyZWFkeUNhbGxlZCA9IGZhbHNlO1xuICAgICAgICB2YWx1ZXMucHVzaCh1bmRlZmluZWQpO1xuICAgICAgICByZW1haW5pbmcrKztcbiAgICAgICAgQy5yZXNvbHZlKHByb21pc2UpLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgaWYgKGFscmVhZHlDYWxsZWQpIHJldHVybjtcbiAgICAgICAgICBhbHJlYWR5Q2FsbGVkID0gdHJ1ZTtcbiAgICAgICAgICB2YWx1ZXNbJGluZGV4XSA9IHZhbHVlO1xuICAgICAgICAgIC0tcmVtYWluaW5nIHx8IHJlc29sdmUodmFsdWVzKTtcbiAgICAgICAgfSwgcmVqZWN0KTtcbiAgICAgIH0pO1xuICAgICAgLS1yZW1haW5pbmcgfHwgcmVzb2x2ZSh2YWx1ZXMpO1xuICAgIH0pO1xuICAgIGlmIChyZXN1bHQuZSkgcmVqZWN0KHJlc3VsdC52KTtcbiAgICByZXR1cm4gY2FwYWJpbGl0eS5wcm9taXNlO1xuICB9LFxuICAvLyAyNS40LjQuNCBQcm9taXNlLnJhY2UoaXRlcmFibGUpXG4gIHJhY2U6IGZ1bmN0aW9uIHJhY2UoaXRlcmFibGUpIHtcbiAgICB2YXIgQyA9IHRoaXM7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eShDKTtcbiAgICB2YXIgcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgdmFyIHJlc3VsdCA9IHBlcmZvcm0oZnVuY3Rpb24gKCkge1xuICAgICAgZm9yT2YoaXRlcmFibGUsIGZhbHNlLCBmdW5jdGlvbiAocHJvbWlzZSkge1xuICAgICAgICBDLnJlc29sdmUocHJvbWlzZSkudGhlbihjYXBhYmlsaXR5LnJlc29sdmUsIHJlamVjdCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBpZiAocmVzdWx0LmUpIHJlamVjdChyZXN1bHQudik7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///243\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar weak = __webpack_require__(121);\nvar validate = __webpack_require__(42);\nvar WEAK_SET = 'WeakSet';\n\n// 23.4 WeakSet Objects\n__webpack_require__(61)(WEAK_SET, function (get) {\n return function WeakSet() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.4.3.1 WeakSet.prototype.add(value)\n add: function add(value) {\n return weak.def(validate(this, WEAK_SET), value, true);\n }\n}, weak, false, true);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYud2Vhay1zZXQuanM/YzAyYiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLFdBQVcsbUJBQU8sQ0FBQyxHQUFvQjtBQUN2QyxlQUFlLG1CQUFPLENBQUMsRUFBd0I7QUFDL0M7O0FBRUE7QUFDQSxtQkFBTyxDQUFDLEVBQWU7QUFDdkIsNkJBQTZCLG1FQUFtRTtBQUNoRyxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjI0NC5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciB3ZWFrID0gcmVxdWlyZSgnLi9fY29sbGVjdGlvbi13ZWFrJyk7XG52YXIgdmFsaWRhdGUgPSByZXF1aXJlKCcuL192YWxpZGF0ZS1jb2xsZWN0aW9uJyk7XG52YXIgV0VBS19TRVQgPSAnV2Vha1NldCc7XG5cbi8vIDIzLjQgV2Vha1NldCBPYmplY3RzXG5yZXF1aXJlKCcuL19jb2xsZWN0aW9uJykoV0VBS19TRVQsIGZ1bmN0aW9uIChnZXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIFdlYWtTZXQoKSB7IHJldHVybiBnZXQodGhpcywgYXJndW1lbnRzLmxlbmd0aCA+IDAgPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQpOyB9O1xufSwge1xuICAvLyAyMy40LjMuMSBXZWFrU2V0LnByb3RvdHlwZS5hZGQodmFsdWUpXG4gIGFkZDogZnVuY3Rpb24gYWRkKHZhbHVlKSB7XG4gICAgcmV0dXJuIHdlYWsuZGVmKHZhbGlkYXRlKHRoaXMsIFdFQUtfU0VUKSwgdmFsdWUsIHRydWUpO1xuICB9XG59LCB3ZWFrLCBmYWxzZSwgdHJ1ZSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///244\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar $typed = __webpack_require__(62);\nvar buffer = __webpack_require__(92);\nvar anObject = __webpack_require__(1);\nvar toAbsoluteIndex = __webpack_require__(35);\nvar toLength = __webpack_require__(6);\nvar isObject = __webpack_require__(4);\nvar ArrayBuffer = __webpack_require__(2).ArrayBuffer;\nvar speciesConstructor = __webpack_require__(51);\nvar $ArrayBuffer = buffer.ArrayBuffer;\nvar $DataView = buffer.DataView;\nvar $isView = $typed.ABV && ArrayBuffer.isView;\nvar $slice = $ArrayBuffer.prototype.slice;\nvar VIEW = $typed.VIEW;\nvar ARRAY_BUFFER = 'ArrayBuffer';\n\n$export($export.G + $export.W + $export.F * (ArrayBuffer !== $ArrayBuffer), { ArrayBuffer: $ArrayBuffer });\n\n$export($export.S + $export.F * !$typed.CONSTR, ARRAY_BUFFER, {\n // 24.1.3.1 ArrayBuffer.isView(arg)\n isView: function isView(it) {\n return $isView && $isView(it) || isObject(it) && VIEW in it;\n }\n});\n\n$export($export.P + $export.U + $export.F * __webpack_require__(3)(function () {\n return !new $ArrayBuffer(2).slice(1, undefined).byteLength;\n}), ARRAY_BUFFER, {\n // 24.1.4.3 ArrayBuffer.prototype.slice(start, end)\n slice: function slice(start, end) {\n if ($slice !== undefined && end === undefined) return $slice.call(anObject(this), start); // FF fix\n var len = anObject(this).byteLength;\n var first = toAbsoluteIndex(start, len);\n var fin = toAbsoluteIndex(end === undefined ? len : end, len);\n var result = new (speciesConstructor(this, $ArrayBuffer))(toLength(fin - first));\n var viewS = new $DataView(this);\n var viewT = new $DataView(result);\n var index = 0;\n while (first < fin) {\n viewT.setUint8(index++, viewS.getUint8(first++));\n } return result;\n }\n});\n\n__webpack_require__(38)(ARRAY_BUFFER);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuYXJyYXktYnVmZmVyLmpzP2M2NmYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxhQUFhLG1CQUFPLENBQUMsRUFBVTtBQUMvQixhQUFhLG1CQUFPLENBQUMsRUFBaUI7QUFDdEMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsc0JBQXNCLG1CQUFPLENBQUMsRUFBc0I7QUFDcEQsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsa0JBQWtCLG1CQUFPLENBQUMsQ0FBVztBQUNyQyx5QkFBeUIsbUJBQU8sQ0FBQyxFQUF3QjtBQUN6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsNkVBQTZFLDRCQUE0Qjs7QUFFekc7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQsNENBQTRDLG1CQUFPLENBQUMsQ0FBVTtBQUM5RDtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsNkZBQTZGO0FBQzdGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLENBQUM7O0FBRUQsbUJBQU8sQ0FBQyxFQUFnQiIsImZpbGUiOiIyNDUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICR0eXBlZCA9IHJlcXVpcmUoJy4vX3R5cGVkJyk7XG52YXIgYnVmZmVyID0gcmVxdWlyZSgnLi9fdHlwZWQtYnVmZmVyJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuL190by1hYnNvbHV0ZS1pbmRleCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBBcnJheUJ1ZmZlciA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLkFycmF5QnVmZmVyO1xudmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4vX3NwZWNpZXMtY29uc3RydWN0b3InKTtcbnZhciAkQXJyYXlCdWZmZXIgPSBidWZmZXIuQXJyYXlCdWZmZXI7XG52YXIgJERhdGFWaWV3ID0gYnVmZmVyLkRhdGFWaWV3O1xudmFyICRpc1ZpZXcgPSAkdHlwZWQuQUJWICYmIEFycmF5QnVmZmVyLmlzVmlldztcbnZhciAkc2xpY2UgPSAkQXJyYXlCdWZmZXIucHJvdG90eXBlLnNsaWNlO1xudmFyIFZJRVcgPSAkdHlwZWQuVklFVztcbnZhciBBUlJBWV9CVUZGRVIgPSAnQXJyYXlCdWZmZXInO1xuXG4kZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuVyArICRleHBvcnQuRiAqIChBcnJheUJ1ZmZlciAhPT0gJEFycmF5QnVmZmVyKSwgeyBBcnJheUJ1ZmZlcjogJEFycmF5QnVmZmVyIH0pO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICEkdHlwZWQuQ09OU1RSLCBBUlJBWV9CVUZGRVIsIHtcbiAgLy8gMjQuMS4zLjEgQXJyYXlCdWZmZXIuaXNWaWV3KGFyZylcbiAgaXNWaWV3OiBmdW5jdGlvbiBpc1ZpZXcoaXQpIHtcbiAgICByZXR1cm4gJGlzVmlldyAmJiAkaXNWaWV3KGl0KSB8fCBpc09iamVjdChpdCkgJiYgVklFVyBpbiBpdDtcbiAgfVxufSk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5VICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAhbmV3ICRBcnJheUJ1ZmZlcigyKS5zbGljZSgxLCB1bmRlZmluZWQpLmJ5dGVMZW5ndGg7XG59KSwgQVJSQVlfQlVGRkVSLCB7XG4gIC8vIDI0LjEuNC4zIEFycmF5QnVmZmVyLnByb3RvdHlwZS5zbGljZShzdGFydCwgZW5kKVxuICBzbGljZTogZnVuY3Rpb24gc2xpY2Uoc3RhcnQsIGVuZCkge1xuICAgIGlmICgkc2xpY2UgIT09IHVuZGVmaW5lZCAmJiBlbmQgPT09IHVuZGVmaW5lZCkgcmV0dXJuICRzbGljZS5jYWxsKGFuT2JqZWN0KHRoaXMpLCBzdGFydCk7IC8vIEZGIGZpeFxuICAgIHZhciBsZW4gPSBhbk9iamVjdCh0aGlzKS5ieXRlTGVuZ3RoO1xuICAgIHZhciBmaXJzdCA9IHRvQWJzb2x1dGVJbmRleChzdGFydCwgbGVuKTtcbiAgICB2YXIgZmluID0gdG9BYnNvbHV0ZUluZGV4KGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuIDogZW5kLCBsZW4pO1xuICAgIHZhciByZXN1bHQgPSBuZXcgKHNwZWNpZXNDb25zdHJ1Y3Rvcih0aGlzLCAkQXJyYXlCdWZmZXIpKSh0b0xlbmd0aChmaW4gLSBmaXJzdCkpO1xuICAgIHZhciB2aWV3UyA9IG5ldyAkRGF0YVZpZXcodGhpcyk7XG4gICAgdmFyIHZpZXdUID0gbmV3ICREYXRhVmlldyhyZXN1bHQpO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgd2hpbGUgKGZpcnN0IDwgZmluKSB7XG4gICAgICB2aWV3VC5zZXRVaW50OChpbmRleCsrLCB2aWV3Uy5nZXRVaW50OChmaXJzdCsrKSk7XG4gICAgfSByZXR1cm4gcmVzdWx0O1xuICB9XG59KTtcblxucmVxdWlyZSgnLi9fc2V0LXNwZWNpZXMnKShBUlJBWV9CVUZGRVIpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///245\n")},function(module,exports,__webpack_require__){eval("var $export = __webpack_require__(0);\n$export($export.G + $export.W + $export.F * !__webpack_require__(62).ABV, {\n DataView: __webpack_require__(92).DataView\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuZGF0YS12aWV3LmpzPzI2MmYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsNkNBQTZDLG1CQUFPLENBQUMsRUFBVTtBQUMvRCxZQUFZLG1CQUFPLENBQUMsRUFBaUI7QUFDckMsQ0FBQyIsImZpbGUiOiIyNDYuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LlcgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fdHlwZWQnKS5BQlYsIHtcbiAgRGF0YVZpZXc6IHJlcXVpcmUoJy4vX3R5cGVkLWJ1ZmZlcicpLkRhdGFWaWV3XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///246\n")},function(module,exports,__webpack_require__){eval("__webpack_require__(27)('Int8', 1, function (init) {\n return function Int8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuaW50OC1hcnJheS5qcz9iMDVjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLG1CQUFPLENBQUMsRUFBZ0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyNDcuanMiLCJzb3VyY2VzQ29udGVudCI6WyJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdJbnQ4JywgMSwgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIEludDhBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///247\n")},function(module,exports,__webpack_require__){eval("__webpack_require__(27)('Uint8', 1, function (init) {\n return function Uint8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQudWludDgtYXJyYXkuanM/MzRlZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjQ4LmpzIiwic291cmNlc0NvbnRlbnQiOlsicmVxdWlyZSgnLi9fdHlwZWQtYXJyYXknKSgnVWludDgnLCAxLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gVWludDhBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///248\n")},function(module,exports,__webpack_require__){eval("__webpack_require__(27)('Uint8', 1, function (init) {\n return function Uint8ClampedArray(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n}, true);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQudWludDgtY2xhbXBlZC1hcnJheS5qcz82YWEyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLG1CQUFPLENBQUMsRUFBZ0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyNDkuanMiLCJzb3VyY2VzQ29udGVudCI6WyJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdVaW50OCcsIDEsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBVaW50OENsYW1wZWRBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSwgdHJ1ZSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///249\n")},function(module,exports,__webpack_require__){eval("__webpack_require__(27)('Int16', 2, function (init) {\n return function Int16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuaW50MTYtYXJyYXkuanM/MTVhYyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjUwLmpzIiwic291cmNlc0NvbnRlbnQiOlsicmVxdWlyZSgnLi9fdHlwZWQtYXJyYXknKSgnSW50MTYnLCAyLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gSW50MTZBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///250\n")},function(module,exports,__webpack_require__){eval("__webpack_require__(27)('Uint16', 2, function (init) {\n return function Uint16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQudWludDE2LWFycmF5LmpzP2FmNTYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsbUJBQU8sQ0FBQyxFQUFnQjtBQUN4QjtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjI1MS5qcyIsInNvdXJjZXNDb250ZW50IjpbInJlcXVpcmUoJy4vX3R5cGVkLWFycmF5JykoJ1VpbnQxNicsIDIsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBVaW50MTZBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///251\n")},function(module,exports,__webpack_require__){eval("__webpack_require__(27)('Int32', 4, function (init) {\n return function Int32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuaW50MzItYXJyYXkuanM/YjZlNCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjUyLmpzIiwic291cmNlc0NvbnRlbnQiOlsicmVxdWlyZSgnLi9fdHlwZWQtYXJyYXknKSgnSW50MzInLCA0LCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gSW50MzJBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///252\n")},function(module,exports,__webpack_require__){eval("__webpack_require__(27)('Uint32', 4, function (init) {\n return function Uint32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQudWludDMyLWFycmF5LmpzPzljMjkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsbUJBQU8sQ0FBQyxFQUFnQjtBQUN4QjtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjI1My5qcyIsInNvdXJjZXNDb250ZW50IjpbInJlcXVpcmUoJy4vX3R5cGVkLWFycmF5JykoJ1VpbnQzMicsIDQsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBVaW50MzJBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///253\n")},function(module,exports,__webpack_require__){eval("__webpack_require__(27)('Float32', 4, function (init) {\n return function Float32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuZmxvYXQzMi1hcnJheS5qcz82M2Q5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLG1CQUFPLENBQUMsRUFBZ0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyNTQuanMiLCJzb3VyY2VzQ29udGVudCI6WyJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdGbG9hdDMyJywgNCwgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIEZsb2F0MzJBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///254\n")},function(module,exports,__webpack_require__){eval("__webpack_require__(27)('Float64', 8, function (init) {\n return function Float64Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuZmxvYXQ2NC1hcnJheS5qcz80ZGRhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLG1CQUFPLENBQUMsRUFBZ0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyNTUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdGbG9hdDY0JywgOCwgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIEZsb2F0NjRBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///255\n")},function(module,exports,__webpack_require__){eval("// 26.1.1 Reflect.apply(target, thisArgument, argumentsList)\nvar $export = __webpack_require__(0);\nvar aFunction = __webpack_require__(10);\nvar anObject = __webpack_require__(1);\nvar rApply = (__webpack_require__(2).Reflect || {}).apply;\nvar fApply = Function.apply;\n// MS Edge argumentsList argument is optional\n$export($export.S + $export.F * !__webpack_require__(3)(function () {\n rApply(function () { /* empty */ });\n}), 'Reflect', {\n apply: function apply(target, thisArgument, argumentsList) {\n var T = aFunction(target);\n var L = anObject(argumentsList);\n return rApply ? rApply(T, thisArgument, L) : fApply.call(T, thisArgument, L);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5hcHBseS5qcz9kZjFiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2QyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxjQUFjLG1CQUFPLENBQUMsQ0FBVyxlQUFlO0FBQ2hEO0FBQ0E7QUFDQSxpQ0FBaUMsbUJBQU8sQ0FBQyxDQUFVO0FBQ25ELHNCQUFzQixjQUFjO0FBQ3BDLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyNTYuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyNi4xLjEgUmVmbGVjdC5hcHBseSh0YXJnZXQsIHRoaXNBcmd1bWVudCwgYXJndW1lbnRzTGlzdClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgckFwcGx5ID0gKHJlcXVpcmUoJy4vX2dsb2JhbCcpLlJlZmxlY3QgfHwge30pLmFwcGx5O1xudmFyIGZBcHBseSA9IEZ1bmN0aW9uLmFwcGx5O1xuLy8gTVMgRWRnZSBhcmd1bWVudHNMaXN0IGFyZ3VtZW50IGlzIG9wdGlvbmFsXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgckFwcGx5KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSk7XG59KSwgJ1JlZmxlY3QnLCB7XG4gIGFwcGx5OiBmdW5jdGlvbiBhcHBseSh0YXJnZXQsIHRoaXNBcmd1bWVudCwgYXJndW1lbnRzTGlzdCkge1xuICAgIHZhciBUID0gYUZ1bmN0aW9uKHRhcmdldCk7XG4gICAgdmFyIEwgPSBhbk9iamVjdChhcmd1bWVudHNMaXN0KTtcbiAgICByZXR1cm4gckFwcGx5ID8gckFwcGx5KFQsIHRoaXNBcmd1bWVudCwgTCkgOiBmQXBwbHkuY2FsbChULCB0aGlzQXJndW1lbnQsIEwpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///256\n")},function(module,exports,__webpack_require__){eval("// 26.1.2 Reflect.construct(target, argumentsList [, newTarget])\nvar $export = __webpack_require__(0);\nvar create = __webpack_require__(36);\nvar aFunction = __webpack_require__(10);\nvar anObject = __webpack_require__(1);\nvar isObject = __webpack_require__(4);\nvar fails = __webpack_require__(3);\nvar bind = __webpack_require__(101);\nvar rConstruct = (__webpack_require__(2).Reflect || {}).construct;\n\n// MS Edge supports only 2 arguments and argumentsList argument is optional\n// FF Nightly sets third argument as `new.target`, but does not create `this` from it\nvar NEW_TARGET_BUG = fails(function () {\n function F() { /* empty */ }\n return !(rConstruct(function () { /* empty */ }, [], F) instanceof F);\n});\nvar ARGS_BUG = !fails(function () {\n rConstruct(function () { /* empty */ });\n});\n\n$export($export.S + $export.F * (NEW_TARGET_BUG || ARGS_BUG), 'Reflect', {\n construct: function construct(Target, args /* , newTarget */) {\n aFunction(Target);\n anObject(args);\n var newTarget = arguments.length < 3 ? Target : aFunction(arguments[2]);\n if (ARGS_BUG && !NEW_TARGET_BUG) return rConstruct(Target, args, newTarget);\n if (Target == newTarget) {\n // w/o altered newTarget, optimization for 0-4 arguments\n switch (args.length) {\n case 0: return new Target();\n case 1: return new Target(args[0]);\n case 2: return new Target(args[0], args[1]);\n case 3: return new Target(args[0], args[1], args[2]);\n case 4: return new Target(args[0], args[1], args[2], args[3]);\n }\n // w/o altered newTarget, lot of arguments case\n var $args = [null];\n $args.push.apply($args, args);\n return new (bind.apply(Target, $args))();\n }\n // with altered newTarget, not support built-in constructors\n var proto = newTarget.prototype;\n var instance = create(isObject(proto) ? proto : Object.prototype);\n var result = Function.apply.call(Target, instance, args);\n return isObject(result) ? result : instance;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5jb25zdHJ1Y3QuanM/MjM5NyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGFBQWEsbUJBQU8sQ0FBQyxFQUFrQjtBQUN2QyxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLFlBQVksbUJBQU8sQ0FBQyxDQUFVO0FBQzlCLFdBQVcsbUJBQU8sQ0FBQyxHQUFTO0FBQzVCLGtCQUFrQixtQkFBTyxDQUFDLENBQVcsZUFBZTs7QUFFcEQ7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCLG1DQUFtQyxjQUFjO0FBQ2pELENBQUM7QUFDRDtBQUNBLDBCQUEwQixjQUFjO0FBQ3hDLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjU3LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjYuMS4yIFJlZmxlY3QuY29uc3RydWN0KHRhcmdldCwgYXJndW1lbnRzTGlzdCBbLCBuZXdUYXJnZXRdKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuL19vYmplY3QtY3JlYXRlJyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4vX2JpbmQnKTtcbnZhciByQ29uc3RydWN0ID0gKHJlcXVpcmUoJy4vX2dsb2JhbCcpLlJlZmxlY3QgfHwge30pLmNvbnN0cnVjdDtcblxuLy8gTVMgRWRnZSBzdXBwb3J0cyBvbmx5IDIgYXJndW1lbnRzIGFuZCBhcmd1bWVudHNMaXN0IGFyZ3VtZW50IGlzIG9wdGlvbmFsXG4vLyBGRiBOaWdodGx5IHNldHMgdGhpcmQgYXJndW1lbnQgYXMgYG5ldy50YXJnZXRgLCBidXQgZG9lcyBub3QgY3JlYXRlIGB0aGlzYCBmcm9tIGl0XG52YXIgTkVXX1RBUkdFVF9CVUcgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEYoKSB7IC8qIGVtcHR5ICovIH1cbiAgcmV0dXJuICEockNvbnN0cnVjdChmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0sIFtdLCBGKSBpbnN0YW5jZW9mIEYpO1xufSk7XG52YXIgQVJHU19CVUcgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICByQ29uc3RydWN0KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSk7XG59KTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAoTkVXX1RBUkdFVF9CVUcgfHwgQVJHU19CVUcpLCAnUmVmbGVjdCcsIHtcbiAgY29uc3RydWN0OiBmdW5jdGlvbiBjb25zdHJ1Y3QoVGFyZ2V0LCBhcmdzIC8qICwgbmV3VGFyZ2V0ICovKSB7XG4gICAgYUZ1bmN0aW9uKFRhcmdldCk7XG4gICAgYW5PYmplY3QoYXJncyk7XG4gICAgdmFyIG5ld1RhcmdldCA9IGFyZ3VtZW50cy5sZW5ndGggPCAzID8gVGFyZ2V0IDogYUZ1bmN0aW9uKGFyZ3VtZW50c1syXSk7XG4gICAgaWYgKEFSR1NfQlVHICYmICFORVdfVEFSR0VUX0JVRykgcmV0dXJuIHJDb25zdHJ1Y3QoVGFyZ2V0LCBhcmdzLCBuZXdUYXJnZXQpO1xuICAgIGlmIChUYXJnZXQgPT0gbmV3VGFyZ2V0KSB7XG4gICAgICAvLyB3L28gYWx0ZXJlZCBuZXdUYXJnZXQsIG9wdGltaXphdGlvbiBmb3IgMC00IGFyZ3VtZW50c1xuICAgICAgc3dpdGNoIChhcmdzLmxlbmd0aCkge1xuICAgICAgICBjYXNlIDA6IHJldHVybiBuZXcgVGFyZ2V0KCk7XG4gICAgICAgIGNhc2UgMTogcmV0dXJuIG5ldyBUYXJnZXQoYXJnc1swXSk7XG4gICAgICAgIGNhc2UgMjogcmV0dXJuIG5ldyBUYXJnZXQoYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgICAgIGNhc2UgMzogcmV0dXJuIG5ldyBUYXJnZXQoYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7XG4gICAgICAgIGNhc2UgNDogcmV0dXJuIG5ldyBUYXJnZXQoYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSk7XG4gICAgICB9XG4gICAgICAvLyB3L28gYWx0ZXJlZCBuZXdUYXJnZXQsIGxvdCBvZiBhcmd1bWVudHMgY2FzZVxuICAgICAgdmFyICRhcmdzID0gW251bGxdO1xuICAgICAgJGFyZ3MucHVzaC5hcHBseSgkYXJncywgYXJncyk7XG4gICAgICByZXR1cm4gbmV3IChiaW5kLmFwcGx5KFRhcmdldCwgJGFyZ3MpKSgpO1xuICAgIH1cbiAgICAvLyB3aXRoIGFsdGVyZWQgbmV3VGFyZ2V0LCBub3Qgc3VwcG9ydCBidWlsdC1pbiBjb25zdHJ1Y3RvcnNcbiAgICB2YXIgcHJvdG8gPSBuZXdUYXJnZXQucHJvdG90eXBlO1xuICAgIHZhciBpbnN0YW5jZSA9IGNyZWF0ZShpc09iamVjdChwcm90bykgPyBwcm90byA6IE9iamVjdC5wcm90b3R5cGUpO1xuICAgIHZhciByZXN1bHQgPSBGdW5jdGlvbi5hcHBseS5jYWxsKFRhcmdldCwgaW5zdGFuY2UsIGFyZ3MpO1xuICAgIHJldHVybiBpc09iamVjdChyZXN1bHQpID8gcmVzdWx0IDogaW5zdGFuY2U7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///257\n")},function(module,exports,__webpack_require__){eval("// 26.1.3 Reflect.defineProperty(target, propertyKey, attributes)\nvar dP = __webpack_require__(8);\nvar $export = __webpack_require__(0);\nvar anObject = __webpack_require__(1);\nvar toPrimitive = __webpack_require__(23);\n\n// MS Edge has broken Reflect.defineProperty - throwing instead of returning false\n$export($export.S + $export.F * __webpack_require__(3)(function () {\n // eslint-disable-next-line no-undef\n Reflect.defineProperty(dP.f({}, 1, { value: 1 }), 1, { value: 2 });\n}), 'Reflect', {\n defineProperty: function defineProperty(target, propertyKey, attributes) {\n anObject(target);\n propertyKey = toPrimitive(propertyKey, true);\n anObject(attributes);\n try {\n dP.f(target, propertyKey, attributes);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5kZWZpbmUtcHJvcGVydHkuanM/ODhjYSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLFNBQVMsbUJBQU8sQ0FBQyxDQUFjO0FBQy9CLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGtCQUFrQixtQkFBTyxDQUFDLEVBQWlCOztBQUUzQztBQUNBLGdDQUFnQyxtQkFBTyxDQUFDLENBQVU7QUFDbEQ7QUFDQSxnQ0FBZ0MsTUFBTSxXQUFXLE9BQU8sV0FBVztBQUNuRSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyNTguanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyNi4xLjMgUmVmbGVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5S2V5LCBhdHRyaWJ1dGVzKVxudmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcblxuLy8gTVMgRWRnZSBoYXMgYnJva2VuIFJlZmxlY3QuZGVmaW5lUHJvcGVydHkgLSB0aHJvd2luZyBpbnN0ZWFkIG9mIHJldHVybmluZyBmYWxzZVxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gIFJlZmxlY3QuZGVmaW5lUHJvcGVydHkoZFAuZih7fSwgMSwgeyB2YWx1ZTogMSB9KSwgMSwgeyB2YWx1ZTogMiB9KTtcbn0pLCAnUmVmbGVjdCcsIHtcbiAgZGVmaW5lUHJvcGVydHk6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHlLZXksIGF0dHJpYnV0ZXMpIHtcbiAgICBhbk9iamVjdCh0YXJnZXQpO1xuICAgIHByb3BlcnR5S2V5ID0gdG9QcmltaXRpdmUocHJvcGVydHlLZXksIHRydWUpO1xuICAgIGFuT2JqZWN0KGF0dHJpYnV0ZXMpO1xuICAgIHRyeSB7XG4gICAgICBkUC5mKHRhcmdldCwgcHJvcGVydHlLZXksIGF0dHJpYnV0ZXMpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///258\n")},function(module,exports,__webpack_require__){eval("// 26.1.4 Reflect.deleteProperty(target, propertyKey)\nvar $export = __webpack_require__(0);\nvar gOPD = __webpack_require__(16).f;\nvar anObject = __webpack_require__(1);\n\n$export($export.S, 'Reflect', {\n deleteProperty: function deleteProperty(target, propertyKey) {\n var desc = gOPD(anObject(target), propertyKey);\n return desc && !desc.configurable ? false : delete target[propertyKey];\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5kZWxldGUtcHJvcGVydHkuanM/YmExNiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLFdBQVcsbUJBQU8sQ0FBQyxFQUFnQjtBQUNuQyxlQUFlLG1CQUFPLENBQUMsQ0FBYzs7QUFFckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjU5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjYuMS40IFJlZmxlY3QuZGVsZXRlUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eUtleSlcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZ09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJykuZjtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7XG4gIGRlbGV0ZVByb3BlcnR5OiBmdW5jdGlvbiBkZWxldGVQcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5S2V5KSB7XG4gICAgdmFyIGRlc2MgPSBnT1BEKGFuT2JqZWN0KHRhcmdldCksIHByb3BlcnR5S2V5KTtcbiAgICByZXR1cm4gZGVzYyAmJiAhZGVzYy5jb25maWd1cmFibGUgPyBmYWxzZSA6IGRlbGV0ZSB0YXJnZXRbcHJvcGVydHlLZXldO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///259\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// 26.1.5 Reflect.enumerate(target)\nvar $export = __webpack_require__(0);\nvar anObject = __webpack_require__(1);\nvar Enumerate = function (iterated) {\n this._t = anObject(iterated); // target\n this._i = 0; // next index\n var keys = this._k = []; // keys\n var key;\n for (key in iterated) keys.push(key);\n};\n__webpack_require__(78)(Enumerate, 'Object', function () {\n var that = this;\n var keys = that._k;\n var key;\n do {\n if (that._i >= keys.length) return { value: undefined, done: true };\n } while (!((key = keys[that._i++]) in that._t));\n return { value: key, done: false };\n});\n\n$export($export.S, 'Reflect', {\n enumerate: function enumerate(target) {\n return new Enumerate(target);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5lbnVtZXJhdGUuanM/N2ZmNiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckM7QUFDQSwrQkFBK0I7QUFDL0IsY0FBYztBQUNkLDBCQUEwQjtBQUMxQjtBQUNBO0FBQ0E7QUFDQSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0NBQXdDO0FBQ3hDLEdBQUc7QUFDSCxVQUFVO0FBQ1YsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjYwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gMjYuMS41IFJlZmxlY3QuZW51bWVyYXRlKHRhcmdldClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBFbnVtZXJhdGUgPSBmdW5jdGlvbiAoaXRlcmF0ZWQpIHtcbiAgdGhpcy5fdCA9IGFuT2JqZWN0KGl0ZXJhdGVkKTsgLy8gdGFyZ2V0XG4gIHRoaXMuX2kgPSAwOyAgICAgICAgICAgICAgICAgIC8vIG5leHQgaW5kZXhcbiAgdmFyIGtleXMgPSB0aGlzLl9rID0gW107ICAgICAgLy8ga2V5c1xuICB2YXIga2V5O1xuICBmb3IgKGtleSBpbiBpdGVyYXRlZCkga2V5cy5wdXNoKGtleSk7XG59O1xucmVxdWlyZSgnLi9faXRlci1jcmVhdGUnKShFbnVtZXJhdGUsICdPYmplY3QnLCBmdW5jdGlvbiAoKSB7XG4gIHZhciB0aGF0ID0gdGhpcztcbiAgdmFyIGtleXMgPSB0aGF0Ll9rO1xuICB2YXIga2V5O1xuICBkbyB7XG4gICAgaWYgKHRoYXQuX2kgPj0ga2V5cy5sZW5ndGgpIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfTtcbiAgfSB3aGlsZSAoISgoa2V5ID0ga2V5c1t0aGF0Ll9pKytdKSBpbiB0aGF0Ll90KSk7XG4gIHJldHVybiB7IHZhbHVlOiBrZXksIGRvbmU6IGZhbHNlIH07XG59KTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0Jywge1xuICBlbnVtZXJhdGU6IGZ1bmN0aW9uIGVudW1lcmF0ZSh0YXJnZXQpIHtcbiAgICByZXR1cm4gbmV3IEVudW1lcmF0ZSh0YXJnZXQpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///260\n")},function(module,exports,__webpack_require__){eval("// 26.1.6 Reflect.get(target, propertyKey [, receiver])\nvar gOPD = __webpack_require__(16);\nvar getPrototypeOf = __webpack_require__(17);\nvar has = __webpack_require__(14);\nvar $export = __webpack_require__(0);\nvar isObject = __webpack_require__(4);\nvar anObject = __webpack_require__(1);\n\nfunction get(target, propertyKey /* , receiver */) {\n var receiver = arguments.length < 3 ? target : arguments[2];\n var desc, proto;\n if (anObject(target) === receiver) return target[propertyKey];\n if (desc = gOPD.f(target, propertyKey)) return has(desc, 'value')\n ? desc.value\n : desc.get !== undefined\n ? desc.get.call(receiver)\n : undefined;\n if (isObject(proto = getPrototypeOf(target))) return get(proto, propertyKey, receiver);\n}\n\n$export($export.S, 'Reflect', { get: get });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5nZXQuanM/ZDE4NSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLFdBQVcsbUJBQU8sQ0FBQyxFQUFnQjtBQUNuQyxxQkFBcUIsbUJBQU8sQ0FBQyxFQUFlO0FBQzVDLFVBQVUsbUJBQU8sQ0FBQyxFQUFRO0FBQzFCLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjOztBQUVyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLCtCQUErQixXQUFXIiwiZmlsZSI6IjI2MS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDI2LjEuNiBSZWZsZWN0LmdldCh0YXJnZXQsIHByb3BlcnR5S2V5IFssIHJlY2VpdmVyXSlcbnZhciBnT1BEID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xuXG5mdW5jdGlvbiBnZXQodGFyZ2V0LCBwcm9wZXJ0eUtleSAvKiAsIHJlY2VpdmVyICovKSB7XG4gIHZhciByZWNlaXZlciA9IGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdGFyZ2V0IDogYXJndW1lbnRzWzJdO1xuICB2YXIgZGVzYywgcHJvdG87XG4gIGlmIChhbk9iamVjdCh0YXJnZXQpID09PSByZWNlaXZlcikgcmV0dXJuIHRhcmdldFtwcm9wZXJ0eUtleV07XG4gIGlmIChkZXNjID0gZ09QRC5mKHRhcmdldCwgcHJvcGVydHlLZXkpKSByZXR1cm4gaGFzKGRlc2MsICd2YWx1ZScpXG4gICAgPyBkZXNjLnZhbHVlXG4gICAgOiBkZXNjLmdldCAhPT0gdW5kZWZpbmVkXG4gICAgICA/IGRlc2MuZ2V0LmNhbGwocmVjZWl2ZXIpXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgaWYgKGlzT2JqZWN0KHByb3RvID0gZ2V0UHJvdG90eXBlT2YodGFyZ2V0KSkpIHJldHVybiBnZXQocHJvdG8sIHByb3BlcnR5S2V5LCByZWNlaXZlcik7XG59XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHsgZ2V0OiBnZXQgfSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///261\n")},function(module,exports,__webpack_require__){eval("// 26.1.7 Reflect.getOwnPropertyDescriptor(target, propertyKey)\nvar gOPD = __webpack_require__(16);\nvar $export = __webpack_require__(0);\nvar anObject = __webpack_require__(1);\n\n$export($export.S, 'Reflect', {\n getOwnPropertyDescriptor: function getOwnPropertyDescriptor(target, propertyKey) {\n return gOPD.f(anObject(target), propertyKey);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanM/ZWJkZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLFdBQVcsbUJBQU8sQ0FBQyxFQUFnQjtBQUNuQyxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxlQUFlLG1CQUFPLENBQUMsQ0FBYzs7QUFFckM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjI2Mi5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDI2LjEuNyBSZWZsZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIHByb3BlcnR5S2V5KVxudmFyIGdPUEQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7XG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgcHJvcGVydHlLZXkpIHtcbiAgICByZXR1cm4gZ09QRC5mKGFuT2JqZWN0KHRhcmdldCksIHByb3BlcnR5S2V5KTtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///262\n")},function(module,exports,__webpack_require__){eval("// 26.1.8 Reflect.getPrototypeOf(target)\nvar $export = __webpack_require__(0);\nvar getProto = __webpack_require__(17);\nvar anObject = __webpack_require__(1);\n\n$export($export.S, 'Reflect', {\n getPrototypeOf: function getPrototypeOf(target) {\n return getProto(anObject(target));\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5nZXQtcHJvdG90eXBlLW9mLmpzPzJkMzQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxlQUFlLG1CQUFPLENBQUMsRUFBZTtBQUN0QyxlQUFlLG1CQUFPLENBQUMsQ0FBYzs7QUFFckM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjI2My5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDI2LjEuOCBSZWZsZWN0LmdldFByb3RvdHlwZU9mKHRhcmdldClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZ2V0UHJvdG8gPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0Jywge1xuICBnZXRQcm90b3R5cGVPZjogZnVuY3Rpb24gZ2V0UHJvdG90eXBlT2YodGFyZ2V0KSB7XG4gICAgcmV0dXJuIGdldFByb3RvKGFuT2JqZWN0KHRhcmdldCkpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///263\n")},function(module,exports,__webpack_require__){eval("// 26.1.9 Reflect.has(target, propertyKey)\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Reflect', {\n has: function has(target, propertyKey) {\n return propertyKey in target;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5oYXMuanM/ZjZiMyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXOztBQUVqQztBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjY0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjYuMS45IFJlZmxlY3QuaGFzKHRhcmdldCwgcHJvcGVydHlLZXkpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7XG4gIGhhczogZnVuY3Rpb24gaGFzKHRhcmdldCwgcHJvcGVydHlLZXkpIHtcbiAgICByZXR1cm4gcHJvcGVydHlLZXkgaW4gdGFyZ2V0O1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///264\n")},function(module,exports,__webpack_require__){eval("// 26.1.10 Reflect.isExtensible(target)\nvar $export = __webpack_require__(0);\nvar anObject = __webpack_require__(1);\nvar $isExtensible = Object.isExtensible;\n\n$export($export.S, 'Reflect', {\n isExtensible: function isExtensible(target) {\n anObject(target);\n return $isExtensible ? $isExtensible(target) : true;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5pcy1leHRlbnNpYmxlLmpzPzIyNTEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyNjUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyNi4xLjEwIFJlZmxlY3QuaXNFeHRlbnNpYmxlKHRhcmdldClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciAkaXNFeHRlbnNpYmxlID0gT2JqZWN0LmlzRXh0ZW5zaWJsZTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0Jywge1xuICBpc0V4dGVuc2libGU6IGZ1bmN0aW9uIGlzRXh0ZW5zaWJsZSh0YXJnZXQpIHtcbiAgICBhbk9iamVjdCh0YXJnZXQpO1xuICAgIHJldHVybiAkaXNFeHRlbnNpYmxlID8gJGlzRXh0ZW5zaWJsZSh0YXJnZXQpIDogdHJ1ZTtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///265\n")},function(module,exports,__webpack_require__){eval("// 26.1.11 Reflect.ownKeys(target)\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Reflect', { ownKeys: __webpack_require__(123) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5vd24ta2V5cy5qcz9jNjk4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDLCtCQUErQixVQUFVLG1CQUFPLENBQUMsR0FBYSxHQUFHIiwiZmlsZSI6IjI2Ni5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDI2LjEuMTEgUmVmbGVjdC5vd25LZXlzKHRhcmdldClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHsgb3duS2V5czogcmVxdWlyZSgnLi9fb3duLWtleXMnKSB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///266\n")},function(module,exports,__webpack_require__){eval("// 26.1.12 Reflect.preventExtensions(target)\nvar $export = __webpack_require__(0);\nvar anObject = __webpack_require__(1);\nvar $preventExtensions = Object.preventExtensions;\n\n$export($export.S, 'Reflect', {\n preventExtensions: function preventExtensions(target) {\n anObject(target);\n try {\n if ($preventExtensions) $preventExtensions(target);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5wcmV2ZW50LWV4dGVuc2lvbnMuanM/YTE5ZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjI2Ny5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDI2LjEuMTIgUmVmbGVjdC5wcmV2ZW50RXh0ZW5zaW9ucyh0YXJnZXQpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgJHByZXZlbnRFeHRlbnNpb25zID0gT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7XG4gIHByZXZlbnRFeHRlbnNpb25zOiBmdW5jdGlvbiBwcmV2ZW50RXh0ZW5zaW9ucyh0YXJnZXQpIHtcbiAgICBhbk9iamVjdCh0YXJnZXQpO1xuICAgIHRyeSB7XG4gICAgICBpZiAoJHByZXZlbnRFeHRlbnNpb25zKSAkcHJldmVudEV4dGVuc2lvbnModGFyZ2V0KTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///267\n")},function(module,exports,__webpack_require__){eval("// 26.1.13 Reflect.set(target, propertyKey, V [, receiver])\nvar dP = __webpack_require__(8);\nvar gOPD = __webpack_require__(16);\nvar getPrototypeOf = __webpack_require__(17);\nvar has = __webpack_require__(14);\nvar $export = __webpack_require__(0);\nvar createDesc = __webpack_require__(32);\nvar anObject = __webpack_require__(1);\nvar isObject = __webpack_require__(4);\n\nfunction set(target, propertyKey, V /* , receiver */) {\n var receiver = arguments.length < 4 ? target : arguments[3];\n var ownDesc = gOPD.f(anObject(target), propertyKey);\n var existingDescriptor, proto;\n if (!ownDesc) {\n if (isObject(proto = getPrototypeOf(target))) {\n return set(proto, propertyKey, V, receiver);\n }\n ownDesc = createDesc(0);\n }\n if (has(ownDesc, 'value')) {\n if (ownDesc.writable === false || !isObject(receiver)) return false;\n if (existingDescriptor = gOPD.f(receiver, propertyKey)) {\n if (existingDescriptor.get || existingDescriptor.set || existingDescriptor.writable === false) return false;\n existingDescriptor.value = V;\n dP.f(receiver, propertyKey, existingDescriptor);\n } else dP.f(receiver, propertyKey, createDesc(0, V));\n return true;\n }\n return ownDesc.set === undefined ? false : (ownDesc.set.call(receiver, V), true);\n}\n\n$export($export.S, 'Reflect', { set: set });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5zZXQuanM/OTI1MyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLFNBQVMsbUJBQU8sQ0FBQyxDQUFjO0FBQy9CLFdBQVcsbUJBQU8sQ0FBQyxFQUFnQjtBQUNuQyxxQkFBcUIsbUJBQU8sQ0FBQyxFQUFlO0FBQzVDLFVBQVUsbUJBQU8sQ0FBQyxFQUFRO0FBQzFCLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGlCQUFpQixtQkFBTyxDQUFDLEVBQWtCO0FBQzNDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjOztBQUVyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSwrQkFBK0IsV0FBVyIsImZpbGUiOiIyNjguanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyNi4xLjEzIFJlZmxlY3Quc2V0KHRhcmdldCwgcHJvcGVydHlLZXksIFYgWywgcmVjZWl2ZXJdKVxudmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG52YXIgZ09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGNyZWF0ZURlc2MgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xuXG5mdW5jdGlvbiBzZXQodGFyZ2V0LCBwcm9wZXJ0eUtleSwgViAvKiAsIHJlY2VpdmVyICovKSB7XG4gIHZhciByZWNlaXZlciA9IGFyZ3VtZW50cy5sZW5ndGggPCA0ID8gdGFyZ2V0IDogYXJndW1lbnRzWzNdO1xuICB2YXIgb3duRGVzYyA9IGdPUEQuZihhbk9iamVjdCh0YXJnZXQpLCBwcm9wZXJ0eUtleSk7XG4gIHZhciBleGlzdGluZ0Rlc2NyaXB0b3IsIHByb3RvO1xuICBpZiAoIW93bkRlc2MpIHtcbiAgICBpZiAoaXNPYmplY3QocHJvdG8gPSBnZXRQcm90b3R5cGVPZih0YXJnZXQpKSkge1xuICAgICAgcmV0dXJuIHNldChwcm90bywgcHJvcGVydHlLZXksIFYsIHJlY2VpdmVyKTtcbiAgICB9XG4gICAgb3duRGVzYyA9IGNyZWF0ZURlc2MoMCk7XG4gIH1cbiAgaWYgKGhhcyhvd25EZXNjLCAndmFsdWUnKSkge1xuICAgIGlmIChvd25EZXNjLndyaXRhYmxlID09PSBmYWxzZSB8fCAhaXNPYmplY3QocmVjZWl2ZXIpKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKGV4aXN0aW5nRGVzY3JpcHRvciA9IGdPUEQuZihyZWNlaXZlciwgcHJvcGVydHlLZXkpKSB7XG4gICAgICBpZiAoZXhpc3RpbmdEZXNjcmlwdG9yLmdldCB8fCBleGlzdGluZ0Rlc2NyaXB0b3Iuc2V0IHx8IGV4aXN0aW5nRGVzY3JpcHRvci53cml0YWJsZSA9PT0gZmFsc2UpIHJldHVybiBmYWxzZTtcbiAgICAgIGV4aXN0aW5nRGVzY3JpcHRvci52YWx1ZSA9IFY7XG4gICAgICBkUC5mKHJlY2VpdmVyLCBwcm9wZXJ0eUtleSwgZXhpc3RpbmdEZXNjcmlwdG9yKTtcbiAgICB9IGVsc2UgZFAuZihyZWNlaXZlciwgcHJvcGVydHlLZXksIGNyZWF0ZURlc2MoMCwgVikpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBvd25EZXNjLnNldCA9PT0gdW5kZWZpbmVkID8gZmFsc2UgOiAob3duRGVzYy5zZXQuY2FsbChyZWNlaXZlciwgViksIHRydWUpO1xufVxuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7IHNldDogc2V0IH0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///268\n")},function(module,exports,__webpack_require__){eval("// 26.1.14 Reflect.setPrototypeOf(target, proto)\nvar $export = __webpack_require__(0);\nvar setProto = __webpack_require__(71);\n\nif (setProto) $export($export.S, 'Reflect', {\n setPrototypeOf: function setPrototypeOf(target, proto) {\n setProto.check(target, proto);\n try {\n setProto.set(target, proto);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5zZXQtcHJvdG90eXBlLW9mLmpzPzkyNzUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxlQUFlLG1CQUFPLENBQUMsRUFBYzs7QUFFckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjY5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjYuMS4xNCBSZWZsZWN0LnNldFByb3RvdHlwZU9mKHRhcmdldCwgcHJvdG8pXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHNldFByb3RvID0gcmVxdWlyZSgnLi9fc2V0LXByb3RvJyk7XG5cbmlmIChzZXRQcm90bykgJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0Jywge1xuICBzZXRQcm90b3R5cGVPZjogZnVuY3Rpb24gc2V0UHJvdG90eXBlT2YodGFyZ2V0LCBwcm90bykge1xuICAgIHNldFByb3RvLmNoZWNrKHRhcmdldCwgcHJvdG8pO1xuICAgIHRyeSB7XG4gICAgICBzZXRQcm90by5zZXQodGFyZ2V0LCBwcm90byk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///269\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// https://github.com/tc39/Array.prototype.includes\nvar $export = __webpack_require__(0);\nvar $includes = __webpack_require__(52)(true);\n\n$export($export.P, 'Array', {\n includes: function includes(el /* , fromIndex = 0 */) {\n return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\n__webpack_require__(31)('includes');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuYXJyYXkuaW5jbHVkZXMuanM/Njc2MiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBbUI7O0FBRTNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRCxtQkFBTyxDQUFDLEVBQXVCIiwiZmlsZSI6IjI3MC5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L0FycmF5LnByb3RvdHlwZS5pbmNsdWRlc1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkaW5jbHVkZXMgPSByZXF1aXJlKCcuL19hcnJheS1pbmNsdWRlcycpKHRydWUpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCwgJ0FycmF5Jywge1xuICBpbmNsdWRlczogZnVuY3Rpb24gaW5jbHVkZXMoZWwgLyogLCBmcm9tSW5kZXggPSAwICovKSB7XG4gICAgcmV0dXJuICRpbmNsdWRlcyh0aGlzLCBlbCwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcblxucmVxdWlyZSgnLi9fYWRkLXRvLXVuc2NvcGFibGVzJykoJ2luY2x1ZGVzJyk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///270\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// https://tc39.github.io/proposal-flatMap/#sec-Array.prototype.flatMap\nvar $export = __webpack_require__(0);\nvar flattenIntoArray = __webpack_require__(124);\nvar toObject = __webpack_require__(9);\nvar toLength = __webpack_require__(6);\nvar aFunction = __webpack_require__(10);\nvar arraySpeciesCreate = __webpack_require__(84);\n\n$export($export.P, 'Array', {\n flatMap: function flatMap(callbackfn /* , thisArg */) {\n var O = toObject(this);\n var sourceLen, A;\n aFunction(callbackfn);\n sourceLen = toLength(O.length);\n A = arraySpeciesCreate(O, 0);\n flattenIntoArray(A, O, O, sourceLen, 0, 1, callbackfn, arguments[1]);\n return A;\n }\n});\n\n__webpack_require__(31)('flatMap');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuYXJyYXkuZmxhdC1tYXAuanM/ZTk1NiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsdUJBQXVCLG1CQUFPLENBQUMsR0FBdUI7QUFDdEQsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2Qyx5QkFBeUIsbUJBQU8sQ0FBQyxFQUF5Qjs7QUFFMUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVELG1CQUFPLENBQUMsRUFBdUIiLCJmaWxlIjoiMjcxLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1mbGF0TWFwLyNzZWMtQXJyYXkucHJvdG90eXBlLmZsYXRNYXBcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZmxhdHRlbkludG9BcnJheSA9IHJlcXVpcmUoJy4vX2ZsYXR0ZW4taW50by1hcnJheScpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgYXJyYXlTcGVjaWVzQ3JlYXRlID0gcmVxdWlyZSgnLi9fYXJyYXktc3BlY2llcy1jcmVhdGUnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdBcnJheScsIHtcbiAgZmxhdE1hcDogZnVuY3Rpb24gZmxhdE1hcChjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gICAgdmFyIHNvdXJjZUxlbiwgQTtcbiAgICBhRnVuY3Rpb24oY2FsbGJhY2tmbik7XG4gICAgc291cmNlTGVuID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICAgIEEgPSBhcnJheVNwZWNpZXNDcmVhdGUoTywgMCk7XG4gICAgZmxhdHRlbkludG9BcnJheShBLCBPLCBPLCBzb3VyY2VMZW4sIDAsIDEsIGNhbGxiYWNrZm4sIGFyZ3VtZW50c1sxXSk7XG4gICAgcmV0dXJuIEE7XG4gIH1cbn0pO1xuXG5yZXF1aXJlKCcuL19hZGQtdG8tdW5zY29wYWJsZXMnKSgnZmxhdE1hcCcpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///271\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// https://tc39.github.io/proposal-flatMap/#sec-Array.prototype.flatten\nvar $export = __webpack_require__(0);\nvar flattenIntoArray = __webpack_require__(124);\nvar toObject = __webpack_require__(9);\nvar toLength = __webpack_require__(6);\nvar toInteger = __webpack_require__(21);\nvar arraySpeciesCreate = __webpack_require__(84);\n\n$export($export.P, 'Array', {\n flatten: function flatten(/* depthArg = 1 */) {\n var depthArg = arguments[0];\n var O = toObject(this);\n var sourceLen = toLength(O.length);\n var A = arraySpeciesCreate(O, 0);\n flattenIntoArray(A, O, O, sourceLen, 0, depthArg === undefined ? 1 : toInteger(depthArg));\n return A;\n }\n});\n\n__webpack_require__(31)('flatten');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuYXJyYXkuZmxhdHRlbi5qcz83MWYxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyx1QkFBdUIsbUJBQU8sQ0FBQyxHQUF1QjtBQUN0RCxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDLHlCQUF5QixtQkFBTyxDQUFDLEVBQXlCOztBQUUxRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVELG1CQUFPLENBQUMsRUFBdUIiLCJmaWxlIjoiMjcyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1mbGF0TWFwLyNzZWMtQXJyYXkucHJvdG90eXBlLmZsYXR0ZW5cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZmxhdHRlbkludG9BcnJheSA9IHJlcXVpcmUoJy4vX2ZsYXR0ZW4taW50by1hcnJheScpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgYXJyYXlTcGVjaWVzQ3JlYXRlID0gcmVxdWlyZSgnLi9fYXJyYXktc3BlY2llcy1jcmVhdGUnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdBcnJheScsIHtcbiAgZmxhdHRlbjogZnVuY3Rpb24gZmxhdHRlbigvKiBkZXB0aEFyZyA9IDEgKi8pIHtcbiAgICB2YXIgZGVwdGhBcmcgPSBhcmd1bWVudHNbMF07XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgc291cmNlTGVuID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICAgIHZhciBBID0gYXJyYXlTcGVjaWVzQ3JlYXRlKE8sIDApO1xuICAgIGZsYXR0ZW5JbnRvQXJyYXkoQSwgTywgTywgc291cmNlTGVuLCAwLCBkZXB0aEFyZyA9PT0gdW5kZWZpbmVkID8gMSA6IHRvSW50ZWdlcihkZXB0aEFyZykpO1xuICAgIHJldHVybiBBO1xuICB9XG59KTtcblxucmVxdWlyZSgnLi9fYWRkLXRvLXVuc2NvcGFibGVzJykoJ2ZsYXR0ZW4nKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///272\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// https://github.com/mathiasbynens/String.prototype.at\nvar $export = __webpack_require__(0);\nvar $at = __webpack_require__(55)(true);\nvar $fails = __webpack_require__(3);\n\nvar FORCED = $fails(function () {\n return '𠮷'.at(0) !== '𠮷';\n});\n\n$export($export.P + $export.F * FORCED, 'String', {\n at: function at(pos) {\n return $at(this, pos);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLmF0LmpzPzM1MzUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLFVBQVUsbUJBQU8sQ0FBQyxFQUFjO0FBQ2hDLGFBQWEsbUJBQU8sQ0FBQyxDQUFVOztBQUUvQjtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjczLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL21hdGhpYXNieW5lbnMvU3RyaW5nLnByb3RvdHlwZS5hdFxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkYXQgPSByZXF1aXJlKCcuL19zdHJpbmctYXQnKSh0cnVlKTtcbnZhciAkZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xuXG52YXIgRk9SQ0VEID0gJGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICfwoK63Jy5hdCgwKSAhPT0gJ/CgrrcnO1xufSk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogRk9SQ0VELCAnU3RyaW5nJywge1xuICBhdDogZnVuY3Rpb24gYXQocG9zKSB7XG4gICAgcmV0dXJuICRhdCh0aGlzLCBwb3MpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///273\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = __webpack_require__(0);\nvar $pad = __webpack_require__(125);\nvar userAgent = __webpack_require__(60);\n\n// https://github.com/zloirock/core-js/issues/280\nvar WEBKIT_BUG = /Version\\/10\\.\\d+(\\.\\d+)?( Mobile\\/\\w+)? Safari\\//.test(userAgent);\n\n$export($export.P + $export.F * WEBKIT_BUG, 'String', {\n padStart: function padStart(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, true);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLnBhZC1zdGFydC5qcz9mNTc2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxXQUFXLG1CQUFPLENBQUMsR0FBZTtBQUNsQyxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlOztBQUV2QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyNzQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zdHJpbmctcGFkLXN0YXJ0LWVuZFxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkcGFkID0gcmVxdWlyZSgnLi9fc3RyaW5nLXBhZCcpO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4vX3VzZXItYWdlbnQnKTtcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzI4MFxudmFyIFdFQktJVF9CVUcgPSAvVmVyc2lvblxcLzEwXFwuXFxkKyhcXC5cXGQrKT8oIE1vYmlsZVxcL1xcdyspPyBTYWZhcmlcXC8vLnRlc3QodXNlckFnZW50KTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiBXRUJLSVRfQlVHLCAnU3RyaW5nJywge1xuICBwYWRTdGFydDogZnVuY3Rpb24gcGFkU3RhcnQobWF4TGVuZ3RoIC8qICwgZmlsbFN0cmluZyA9ICcgJyAqLykge1xuICAgIHJldHVybiAkcGFkKHRoaXMsIG1heExlbmd0aCwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQsIHRydWUpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///274\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = __webpack_require__(0);\nvar $pad = __webpack_require__(125);\nvar userAgent = __webpack_require__(60);\n\n// https://github.com/zloirock/core-js/issues/280\nvar WEBKIT_BUG = /Version\\/10\\.\\d+(\\.\\d+)?( Mobile\\/\\w+)? Safari\\//.test(userAgent);\n\n$export($export.P + $export.F * WEBKIT_BUG, 'String', {\n padEnd: function padEnd(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, false);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLnBhZC1lbmQuanM/ZWQ1MCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsV0FBVyxtQkFBTyxDQUFDLEdBQWU7QUFDbEMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTs7QUFFdkM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjc1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc3RyaW5nLXBhZC1zdGFydC1lbmRcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHBhZCA9IHJlcXVpcmUoJy4vX3N0cmluZy1wYWQnKTtcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuL191c2VyLWFnZW50Jyk7XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8yODBcbnZhciBXRUJLSVRfQlVHID0gL1ZlcnNpb25cXC8xMFxcLlxcZCsoXFwuXFxkKyk/KCBNb2JpbGVcXC9cXHcrKT8gU2FmYXJpXFwvLy50ZXN0KHVzZXJBZ2VudCk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogV0VCS0lUX0JVRywgJ1N0cmluZycsIHtcbiAgcGFkRW5kOiBmdW5jdGlvbiBwYWRFbmQobWF4TGVuZ3RoIC8qICwgZmlsbFN0cmluZyA9ICcgJyAqLykge1xuICAgIHJldHVybiAkcGFkKHRoaXMsIG1heExlbmd0aCwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQsIGZhbHNlKTtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///275\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// https://github.com/sebmarkbage/ecmascript-string-left-right-trim\n__webpack_require__(45)('trimLeft', function ($trim) {\n return function trimLeft() {\n return $trim(this, 1);\n };\n}, 'trimStart');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLnRyaW0tbGVmdC5qcz8yM2JlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjc2LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3NlYm1hcmtiYWdlL2VjbWFzY3JpcHQtc3RyaW5nLWxlZnQtcmlnaHQtdHJpbVxucmVxdWlyZSgnLi9fc3RyaW5nLXRyaW0nKSgndHJpbUxlZnQnLCBmdW5jdGlvbiAoJHRyaW0pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHRyaW1MZWZ0KCkge1xuICAgIHJldHVybiAkdHJpbSh0aGlzLCAxKTtcbiAgfTtcbn0sICd0cmltU3RhcnQnKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///276\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// https://github.com/sebmarkbage/ecmascript-string-left-right-trim\n__webpack_require__(45)('trimRight', function ($trim) {\n return function trimRight() {\n return $trim(this, 2);\n };\n}, 'trimEnd');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLnRyaW0tcmlnaHQuanM/N2MwZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsbUJBQU8sQ0FBQyxFQUFnQjtBQUN4QjtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjI3Ny5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9zZWJtYXJrYmFnZS9lY21hc2NyaXB0LXN0cmluZy1sZWZ0LXJpZ2h0LXRyaW1cbnJlcXVpcmUoJy4vX3N0cmluZy10cmltJykoJ3RyaW1SaWdodCcsIGZ1bmN0aW9uICgkdHJpbSkge1xuICByZXR1cm4gZnVuY3Rpb24gdHJpbVJpZ2h0KCkge1xuICAgIHJldHVybiAkdHJpbSh0aGlzLCAyKTtcbiAgfTtcbn0sICd0cmltRW5kJyk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///277\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// https://tc39.github.io/String.prototype.matchAll/\nvar $export = __webpack_require__(0);\nvar defined = __webpack_require__(24);\nvar toLength = __webpack_require__(6);\nvar isRegExp = __webpack_require__(56);\nvar getFlags = __webpack_require__(50);\nvar RegExpProto = RegExp.prototype;\n\nvar $RegExpStringIterator = function (regexp, string) {\n this._r = regexp;\n this._s = string;\n};\n\n__webpack_require__(78)($RegExpStringIterator, 'RegExp String', function next() {\n var match = this._r.exec(this._s);\n return { value: match, done: match === null };\n});\n\n$export($export.P, 'String', {\n matchAll: function matchAll(regexp) {\n defined(this);\n if (!isRegExp(regexp)) throw TypeError(regexp + ' is not a regexp!');\n var S = String(this);\n var flags = 'flags' in RegExpProto ? String(regexp.flags) : getFlags.call(regexp);\n var rx = new RegExp(regexp.source, ~flags.indexOf('g') ? flags : 'g' + flags);\n rx.lastIndex = toLength(regexp.lastIndex);\n return new $RegExpStringIterator(rx, S);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLm1hdGNoLWFsbC5qcz85ODhkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxjQUFjLG1CQUFPLENBQUMsRUFBWTtBQUNsQyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxlQUFlLG1CQUFPLENBQUMsRUFBYztBQUNyQyxlQUFlLG1CQUFPLENBQUMsRUFBVTtBQUNqQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3hCO0FBQ0EsVUFBVTtBQUNWLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjI3OC5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vU3RyaW5nLnByb3RvdHlwZS5tYXRjaEFsbC9cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGlzUmVnRXhwID0gcmVxdWlyZSgnLi9faXMtcmVnZXhwJyk7XG52YXIgZ2V0RmxhZ3MgPSByZXF1aXJlKCcuL19mbGFncycpO1xudmFyIFJlZ0V4cFByb3RvID0gUmVnRXhwLnByb3RvdHlwZTtcblxudmFyICRSZWdFeHBTdHJpbmdJdGVyYXRvciA9IGZ1bmN0aW9uIChyZWdleHAsIHN0cmluZykge1xuICB0aGlzLl9yID0gcmVnZXhwO1xuICB0aGlzLl9zID0gc3RyaW5nO1xufTtcblxucmVxdWlyZSgnLi9faXRlci1jcmVhdGUnKSgkUmVnRXhwU3RyaW5nSXRlcmF0b3IsICdSZWdFeHAgU3RyaW5nJywgZnVuY3Rpb24gbmV4dCgpIHtcbiAgdmFyIG1hdGNoID0gdGhpcy5fci5leGVjKHRoaXMuX3MpO1xuICByZXR1cm4geyB2YWx1ZTogbWF0Y2gsIGRvbmU6IG1hdGNoID09PSBudWxsIH07XG59KTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdTdHJpbmcnLCB7XG4gIG1hdGNoQWxsOiBmdW5jdGlvbiBtYXRjaEFsbChyZWdleHApIHtcbiAgICBkZWZpbmVkKHRoaXMpO1xuICAgIGlmICghaXNSZWdFeHAocmVnZXhwKSkgdGhyb3cgVHlwZUVycm9yKHJlZ2V4cCArICcgaXMgbm90IGEgcmVnZXhwIScpO1xuICAgIHZhciBTID0gU3RyaW5nKHRoaXMpO1xuICAgIHZhciBmbGFncyA9ICdmbGFncycgaW4gUmVnRXhwUHJvdG8gPyBTdHJpbmcocmVnZXhwLmZsYWdzKSA6IGdldEZsYWdzLmNhbGwocmVnZXhwKTtcbiAgICB2YXIgcnggPSBuZXcgUmVnRXhwKHJlZ2V4cC5zb3VyY2UsIH5mbGFncy5pbmRleE9mKCdnJykgPyBmbGFncyA6ICdnJyArIGZsYWdzKTtcbiAgICByeC5sYXN0SW5kZXggPSB0b0xlbmd0aChyZWdleHAubGFzdEluZGV4KTtcbiAgICByZXR1cm4gbmV3ICRSZWdFeHBTdHJpbmdJdGVyYXRvcihyeCwgUyk7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///278\n")},function(module,exports,__webpack_require__){eval("__webpack_require__(67)('asyncIterator');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3ltYm9sLmFzeW5jLWl0ZXJhdG9yLmpzP2FjNGQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsbUJBQU8sQ0FBQyxFQUFlIiwiZmlsZSI6IjI3OS5qcyIsInNvdXJjZXNDb250ZW50IjpbInJlcXVpcmUoJy4vX3drcy1kZWZpbmUnKSgnYXN5bmNJdGVyYXRvcicpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///279\n")},function(module,exports,__webpack_require__){eval("__webpack_require__(67)('observable');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3ltYm9sLm9ic2VydmFibGUuanM/YzdjYSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxtQkFBTyxDQUFDLEVBQWUiLCJmaWxlIjoiMjgwLmpzIiwic291cmNlc0NvbnRlbnQiOlsicmVxdWlyZSgnLi9fd2tzLWRlZmluZScpKCdvYnNlcnZhYmxlJyk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///280\n")},function(module,exports,__webpack_require__){eval("// https://github.com/tc39/proposal-object-getownpropertydescriptors\nvar $export = __webpack_require__(0);\nvar ownKeys = __webpack_require__(123);\nvar toIObject = __webpack_require__(15);\nvar gOPD = __webpack_require__(16);\nvar createProperty = __webpack_require__(82);\n\n$export($export.S, 'Object', {\n getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {\n var O = toIObject(object);\n var getDesc = gOPD.f;\n var keys = ownKeys(O);\n var result = {};\n var i = 0;\n var key, desc;\n while (keys.length > i) {\n desc = getDesc(O, key = keys[i++]);\n if (desc !== undefined) createProperty(result, key, desc);\n }\n return result;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JqZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcnMuanM/OGU2ZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGNBQWMsbUJBQU8sQ0FBQyxHQUFhO0FBQ25DLGdCQUFnQixtQkFBTyxDQUFDLEVBQWU7QUFDdkMsV0FBVyxtQkFBTyxDQUFDLEVBQWdCO0FBQ25DLHFCQUFxQixtQkFBTyxDQUFDLEVBQW9COztBQUVqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyODEuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yc1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBvd25LZXlzID0gcmVxdWlyZSgnLi9fb3duLWtleXMnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgZ09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJyk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSByZXF1aXJlKCcuL19jcmVhdGUtcHJvcGVydHknKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdPYmplY3QnLCB7XG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvcnM6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KSB7XG4gICAgdmFyIE8gPSB0b0lPYmplY3Qob2JqZWN0KTtcbiAgICB2YXIgZ2V0RGVzYyA9IGdPUEQuZjtcbiAgICB2YXIga2V5cyA9IG93bktleXMoTyk7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIga2V5LCBkZXNjO1xuICAgIHdoaWxlIChrZXlzLmxlbmd0aCA+IGkpIHtcbiAgICAgIGRlc2MgPSBnZXREZXNjKE8sIGtleSA9IGtleXNbaSsrXSk7XG4gICAgICBpZiAoZGVzYyAhPT0gdW5kZWZpbmVkKSBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIGtleSwgZGVzYyk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///281\n")},function(module,exports,__webpack_require__){eval("// https://github.com/tc39/proposal-object-values-entries\nvar $export = __webpack_require__(0);\nvar $values = __webpack_require__(126)(false);\n\n$export($export.S, 'Object', {\n values: function values(it) {\n return $values(it);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JqZWN0LnZhbHVlcy5qcz84NjE1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsY0FBYyxtQkFBTyxDQUFDLEdBQW9COztBQUUxQztBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjgyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtb2JqZWN0LXZhbHVlcy1lbnRyaWVzXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICR2YWx1ZXMgPSByZXF1aXJlKCcuL19vYmplY3QtdG8tYXJyYXknKShmYWxzZSk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnT2JqZWN0Jywge1xuICB2YWx1ZXM6IGZ1bmN0aW9uIHZhbHVlcyhpdCkge1xuICAgIHJldHVybiAkdmFsdWVzKGl0KTtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///282\n")},function(module,exports,__webpack_require__){eval("// https://github.com/tc39/proposal-object-values-entries\nvar $export = __webpack_require__(0);\nvar $entries = __webpack_require__(126)(true);\n\n$export($export.S, 'Object', {\n entries: function entries(it) {\n return $entries(it);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JqZWN0LmVudHJpZXMuanM/ZmZjMSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyxHQUFvQjs7QUFFM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjI4My5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLW9iamVjdC12YWx1ZXMtZW50cmllc1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkZW50cmllcyA9IHJlcXVpcmUoJy4vX29iamVjdC10by1hcnJheScpKHRydWUpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ09iamVjdCcsIHtcbiAgZW50cmllczogZnVuY3Rpb24gZW50cmllcyhpdCkge1xuICAgIHJldHVybiAkZW50cmllcyhpdCk7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///283\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar toObject = __webpack_require__(9);\nvar aFunction = __webpack_require__(10);\nvar $defineProperty = __webpack_require__(8);\n\n// B.2.2.2 Object.prototype.__defineGetter__(P, getter)\n__webpack_require__(7) && $export($export.P + __webpack_require__(63), 'Object', {\n __defineGetter__: function __defineGetter__(P, getter) {\n $defineProperty.f(toObject(this), P, { get: aFunction(getter), enumerable: true, configurable: true });\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JqZWN0LmRlZmluZS1nZXR0ZXIuanM/NDUwNCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGdCQUFnQixtQkFBTyxDQUFDLEVBQWU7QUFDdkMsc0JBQXNCLG1CQUFPLENBQUMsQ0FBYzs7QUFFNUM7QUFDQSxtQkFBTyxDQUFDLENBQWdCLHlCQUF5QixtQkFBTyxDQUFDLEVBQXNCO0FBQy9FO0FBQ0EsMENBQTBDLCtEQUErRDtBQUN6RztBQUNBLENBQUMiLCJmaWxlIjoiMjg0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciAkZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcblxuLy8gQi4yLjIuMiBPYmplY3QucHJvdG90eXBlLl9fZGVmaW5lR2V0dGVyX18oUCwgZ2V0dGVyKVxucmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSAmJiAkZXhwb3J0KCRleHBvcnQuUCArIHJlcXVpcmUoJy4vX29iamVjdC1mb3JjZWQtcGFtJyksICdPYmplY3QnLCB7XG4gIF9fZGVmaW5lR2V0dGVyX186IGZ1bmN0aW9uIF9fZGVmaW5lR2V0dGVyX18oUCwgZ2V0dGVyKSB7XG4gICAgJGRlZmluZVByb3BlcnR5LmYodG9PYmplY3QodGhpcyksIFAsIHsgZ2V0OiBhRnVuY3Rpb24oZ2V0dGVyKSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0pO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///284\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar toObject = __webpack_require__(9);\nvar aFunction = __webpack_require__(10);\nvar $defineProperty = __webpack_require__(8);\n\n// B.2.2.3 Object.prototype.__defineSetter__(P, setter)\n__webpack_require__(7) && $export($export.P + __webpack_require__(63), 'Object', {\n __defineSetter__: function __defineSetter__(P, setter) {\n $defineProperty.f(toObject(this), P, { set: aFunction(setter), enumerable: true, configurable: true });\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JqZWN0LmRlZmluZS1zZXR0ZXIuanM/ZmVlNyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGdCQUFnQixtQkFBTyxDQUFDLEVBQWU7QUFDdkMsc0JBQXNCLG1CQUFPLENBQUMsQ0FBYzs7QUFFNUM7QUFDQSxtQkFBTyxDQUFDLENBQWdCLHlCQUF5QixtQkFBTyxDQUFDLEVBQXNCO0FBQy9FO0FBQ0EsMENBQTBDLCtEQUErRDtBQUN6RztBQUNBLENBQUMiLCJmaWxlIjoiMjg1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciAkZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcblxuLy8gQi4yLjIuMyBPYmplY3QucHJvdG90eXBlLl9fZGVmaW5lU2V0dGVyX18oUCwgc2V0dGVyKVxucmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSAmJiAkZXhwb3J0KCRleHBvcnQuUCArIHJlcXVpcmUoJy4vX29iamVjdC1mb3JjZWQtcGFtJyksICdPYmplY3QnLCB7XG4gIF9fZGVmaW5lU2V0dGVyX186IGZ1bmN0aW9uIF9fZGVmaW5lU2V0dGVyX18oUCwgc2V0dGVyKSB7XG4gICAgJGRlZmluZVByb3BlcnR5LmYodG9PYmplY3QodGhpcyksIFAsIHsgc2V0OiBhRnVuY3Rpb24oc2V0dGVyKSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0pO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///285\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar toObject = __webpack_require__(9);\nvar toPrimitive = __webpack_require__(23);\nvar getPrototypeOf = __webpack_require__(17);\nvar getOwnPropertyDescriptor = __webpack_require__(16).f;\n\n// B.2.2.4 Object.prototype.__lookupGetter__(P)\n__webpack_require__(7) && $export($export.P + __webpack_require__(63), 'Object', {\n __lookupGetter__: function __lookupGetter__(P) {\n var O = toObject(this);\n var K = toPrimitive(P, true);\n var D;\n do {\n if (D = getOwnPropertyDescriptor(O, K)) return D.get;\n } while (O = getPrototypeOf(O));\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JqZWN0Lmxvb2t1cC1nZXR0ZXIuanM/YjlhMSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGtCQUFrQixtQkFBTyxDQUFDLEVBQWlCO0FBQzNDLHFCQUFxQixtQkFBTyxDQUFDLEVBQWU7QUFDNUMsK0JBQStCLG1CQUFPLENBQUMsRUFBZ0I7O0FBRXZEO0FBQ0EsbUJBQU8sQ0FBQyxDQUFnQix5QkFBeUIsbUJBQU8sQ0FBQyxFQUFzQjtBQUMvRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxDQUFDIiwiZmlsZSI6IjI4Ni5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJykuZjtcblxuLy8gQi4yLjIuNCBPYmplY3QucHJvdG90eXBlLl9fbG9va3VwR2V0dGVyX18oUClcbnJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgJGV4cG9ydCgkZXhwb3J0LlAgKyByZXF1aXJlKCcuL19vYmplY3QtZm9yY2VkLXBhbScpLCAnT2JqZWN0Jywge1xuICBfX2xvb2t1cEdldHRlcl9fOiBmdW5jdGlvbiBfX2xvb2t1cEdldHRlcl9fKFApIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBLID0gdG9QcmltaXRpdmUoUCwgdHJ1ZSk7XG4gICAgdmFyIEQ7XG4gICAgZG8ge1xuICAgICAgaWYgKEQgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgSykpIHJldHVybiBELmdldDtcbiAgICB9IHdoaWxlIChPID0gZ2V0UHJvdG90eXBlT2YoTykpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///286\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar toObject = __webpack_require__(9);\nvar toPrimitive = __webpack_require__(23);\nvar getPrototypeOf = __webpack_require__(17);\nvar getOwnPropertyDescriptor = __webpack_require__(16).f;\n\n// B.2.2.5 Object.prototype.__lookupSetter__(P)\n__webpack_require__(7) && $export($export.P + __webpack_require__(63), 'Object', {\n __lookupSetter__: function __lookupSetter__(P) {\n var O = toObject(this);\n var K = toPrimitive(P, true);\n var D;\n do {\n if (D = getOwnPropertyDescriptor(O, K)) return D.set;\n } while (O = getPrototypeOf(O));\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JqZWN0Lmxvb2t1cC1zZXR0ZXIuanM/NjRkNSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGtCQUFrQixtQkFBTyxDQUFDLEVBQWlCO0FBQzNDLHFCQUFxQixtQkFBTyxDQUFDLEVBQWU7QUFDNUMsK0JBQStCLG1CQUFPLENBQUMsRUFBZ0I7O0FBRXZEO0FBQ0EsbUJBQU8sQ0FBQyxDQUFnQix5QkFBeUIsbUJBQU8sQ0FBQyxFQUFzQjtBQUMvRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxDQUFDIiwiZmlsZSI6IjI4Ny5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJykuZjtcblxuLy8gQi4yLjIuNSBPYmplY3QucHJvdG90eXBlLl9fbG9va3VwU2V0dGVyX18oUClcbnJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgJGV4cG9ydCgkZXhwb3J0LlAgKyByZXF1aXJlKCcuL19vYmplY3QtZm9yY2VkLXBhbScpLCAnT2JqZWN0Jywge1xuICBfX2xvb2t1cFNldHRlcl9fOiBmdW5jdGlvbiBfX2xvb2t1cFNldHRlcl9fKFApIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBLID0gdG9QcmltaXRpdmUoUCwgdHJ1ZSk7XG4gICAgdmFyIEQ7XG4gICAgZG8ge1xuICAgICAgaWYgKEQgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgSykpIHJldHVybiBELnNldDtcbiAgICB9IHdoaWxlIChPID0gZ2V0UHJvdG90eXBlT2YoTykpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///287\n")},function(module,exports,__webpack_require__){eval("// https://github.com/DavidBruant/Map-Set.prototype.toJSON\nvar $export = __webpack_require__(0);\n\n$export($export.P + $export.R, 'Map', { toJSON: __webpack_require__(127)('Map') });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWFwLnRvLWpzb24uanM/NDcwNCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXOztBQUVqQyx1Q0FBdUMsU0FBUyxtQkFBTyxDQUFDLEdBQXVCLFVBQVUiLCJmaWxlIjoiMjg4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXRodWIuY29tL0RhdmlkQnJ1YW50L01hcC1TZXQucHJvdG90eXBlLnRvSlNPTlxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LlIsICdNYXAnLCB7IHRvSlNPTjogcmVxdWlyZSgnLi9fY29sbGVjdGlvbi10by1qc29uJykoJ01hcCcpIH0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///288\n")},function(module,exports,__webpack_require__){eval("// https://github.com/DavidBruant/Map-Set.prototype.toJSON\nvar $export = __webpack_require__(0);\n\n$export($export.P + $export.R, 'Set', { toJSON: __webpack_require__(127)('Set') });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc2V0LnRvLWpzb24uanM/ZGI5YSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXOztBQUVqQyx1Q0FBdUMsU0FBUyxtQkFBTyxDQUFDLEdBQXVCLFVBQVUiLCJmaWxlIjoiMjg5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXRodWIuY29tL0RhdmlkQnJ1YW50L01hcC1TZXQucHJvdG90eXBlLnRvSlNPTlxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LlIsICdTZXQnLCB7IHRvSlNPTjogcmVxdWlyZSgnLi9fY29sbGVjdGlvbi10by1qc29uJykoJ1NldCcpIH0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///289\n")},function(module,exports,__webpack_require__){eval("// https://tc39.github.io/proposal-setmap-offrom/#sec-map.of\n__webpack_require__(64)('Map');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWFwLm9mLmpzPzcyOWIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxtQkFBTyxDQUFDLEVBQXNCIiwiZmlsZSI6IjI5MC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS8jc2VjLW1hcC5vZlxucmVxdWlyZSgnLi9fc2V0LWNvbGxlY3Rpb24tb2YnKSgnTWFwJyk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///290\n")},function(module,exports,__webpack_require__){eval("// https://tc39.github.io/proposal-setmap-offrom/#sec-set.of\n__webpack_require__(64)('Set');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc2V0Lm9mLmpzPzk5YzUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxtQkFBTyxDQUFDLEVBQXNCIiwiZmlsZSI6IjI5MS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS8jc2VjLXNldC5vZlxucmVxdWlyZSgnLi9fc2V0LWNvbGxlY3Rpb24tb2YnKSgnU2V0Jyk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///291\n")},function(module,exports,__webpack_require__){eval("// https://tc39.github.io/proposal-setmap-offrom/#sec-weakmap.of\n__webpack_require__(64)('WeakMap');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcud2Vhay1tYXAub2YuanM/NzY0ZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLG1CQUFPLENBQUMsRUFBc0IiLCJmaWxlIjoiMjkyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tLyNzZWMtd2Vha21hcC5vZlxucmVxdWlyZSgnLi9fc2V0LWNvbGxlY3Rpb24tb2YnKSgnV2Vha01hcCcpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///292\n")},function(module,exports,__webpack_require__){eval("// https://tc39.github.io/proposal-setmap-offrom/#sec-weakset.of\n__webpack_require__(64)('WeakSet');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcud2Vhay1zZXQub2YuanM/YmRkMSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLG1CQUFPLENBQUMsRUFBc0IiLCJmaWxlIjoiMjkzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tLyNzZWMtd2Vha3NldC5vZlxucmVxdWlyZSgnLi9fc2V0LWNvbGxlY3Rpb24tb2YnKSgnV2Vha1NldCcpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///293\n")},function(module,exports,__webpack_require__){eval("// https://tc39.github.io/proposal-setmap-offrom/#sec-map.from\n__webpack_require__(65)('Map');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWFwLmZyb20uanM/NDE2YyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLG1CQUFPLENBQUMsRUFBd0IiLCJmaWxlIjoiMjk0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tLyNzZWMtbWFwLmZyb21cbnJlcXVpcmUoJy4vX3NldC1jb2xsZWN0aW9uLWZyb20nKSgnTWFwJyk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///294\n")},function(module,exports,__webpack_require__){eval("// https://tc39.github.io/proposal-setmap-offrom/#sec-set.from\n__webpack_require__(65)('Set');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc2V0LmZyb20uanM/ZGQ4YSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLG1CQUFPLENBQUMsRUFBd0IiLCJmaWxlIjoiMjk1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tLyNzZWMtc2V0LmZyb21cbnJlcXVpcmUoJy4vX3NldC1jb2xsZWN0aW9uLWZyb20nKSgnU2V0Jyk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///295\n")},function(module,exports,__webpack_require__){eval("// https://tc39.github.io/proposal-setmap-offrom/#sec-weakmap.from\n__webpack_require__(65)('WeakMap');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcud2Vhay1tYXAuZnJvbS5qcz81ZDQwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsbUJBQU8sQ0FBQyxFQUF3QiIsImZpbGUiOiIyOTYuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vI3NlYy13ZWFrbWFwLmZyb21cbnJlcXVpcmUoJy4vX3NldC1jb2xsZWN0aW9uLWZyb20nKSgnV2Vha01hcCcpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///296\n")},function(module,exports,__webpack_require__){eval("// https://tc39.github.io/proposal-setmap-offrom/#sec-weakset.from\n__webpack_require__(65)('WeakSet');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcud2Vhay1zZXQuZnJvbS5qcz81ZDkwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsbUJBQU8sQ0FBQyxFQUF3QiIsImZpbGUiOiIyOTcuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vI3NlYy13ZWFrc2V0LmZyb21cbnJlcXVpcmUoJy4vX3NldC1jb2xsZWN0aW9uLWZyb20nKSgnV2Vha1NldCcpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///297\n")},function(module,exports,__webpack_require__){eval("// https://github.com/tc39/proposal-global\nvar $export = __webpack_require__(0);\n\n$export($export.G, { global: __webpack_require__(2) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuZ2xvYmFsLmpzPzBjMzYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVzs7QUFFakMsb0JBQW9CLFNBQVMsbUJBQU8sQ0FBQyxDQUFXLEdBQUciLCJmaWxlIjoiMjk4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtZ2xvYmFsXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuRywgeyBnbG9iYWw6IHJlcXVpcmUoJy4vX2dsb2JhbCcpIH0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///298\n")},function(module,exports,__webpack_require__){eval("// https://github.com/tc39/proposal-global\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'System', { global: __webpack_require__(2) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3lzdGVtLmdsb2JhbC5qcz9hMjM0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDLDhCQUE4QixTQUFTLG1CQUFPLENBQUMsQ0FBVyxHQUFHIiwiZmlsZSI6IjI5OS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWdsb2JhbFxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdTeXN0ZW0nLCB7IGdsb2JhbDogcmVxdWlyZSgnLi9fZ2xvYmFsJykgfSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///299\n")},function(module,exports,__webpack_require__){eval("// https://github.com/ljharb/proposal-is-error\nvar $export = __webpack_require__(0);\nvar cof = __webpack_require__(20);\n\n$export($export.S, 'Error', {\n isError: function isError(it) {\n return cof(it) === 'Error';\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuZXJyb3IuaXMtZXJyb3IuanM/NDI3NiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLFVBQVUsbUJBQU8sQ0FBQyxFQUFROztBQUUxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMzAwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXRodWIuY29tL2xqaGFyYi9wcm9wb3NhbC1pcy1lcnJvclxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdFcnJvcicsIHtcbiAgaXNFcnJvcjogZnVuY3Rpb24gaXNFcnJvcihpdCkge1xuICAgIHJldHVybiBjb2YoaXQpID09PSAnRXJyb3InO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///300\n")},function(module,exports,__webpack_require__){eval("// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', {\n clamp: function clamp(x, lower, upper) {\n return Math.min(upper, Math.max(lower, x));\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5jbGFtcC5qcz8wOWUwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIzMDEuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBodHRwczovL3J3YWxkcm9uLmdpdGh1Yi5pby9wcm9wb3NhbC1tYXRoLWV4dGVuc2lvbnMvXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGNsYW1wOiBmdW5jdGlvbiBjbGFtcCh4LCBsb3dlciwgdXBwZXIpIHtcbiAgICByZXR1cm4gTWF0aC5taW4odXBwZXIsIE1hdGgubWF4KGxvd2VyLCB4KSk7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///301\n")},function(module,exports,__webpack_require__){eval("// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', { DEG_PER_RAD: Math.PI / 180 });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5kZWctcGVyLXJhZC5qcz8wYzAwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDLDRCQUE0Qiw2QkFBNkIiLCJmaWxlIjoiMzAyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9yd2FsZHJvbi5naXRodWIuaW8vcHJvcG9zYWwtbWF0aC1leHRlbnNpb25zL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywgeyBERUdfUEVSX1JBRDogTWF0aC5QSSAvIDE4MCB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///302\n")},function(module,exports,__webpack_require__){eval("// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = __webpack_require__(0);\nvar RAD_PER_DEG = 180 / Math.PI;\n\n$export($export.S, 'Math', {\n degrees: function degrees(radians) {\n return radians * RAD_PER_DEG;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5kZWdyZWVzLmpzPzI3NDgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMzAzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9yd2FsZHJvbi5naXRodWIuaW8vcHJvcG9zYWwtbWF0aC1leHRlbnNpb25zL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBSQURfUEVSX0RFRyA9IDE4MCAvIE1hdGguUEk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgZGVncmVlczogZnVuY3Rpb24gZGVncmVlcyhyYWRpYW5zKSB7XG4gICAgcmV0dXJuIHJhZGlhbnMgKiBSQURfUEVSX0RFRztcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///303\n")},function(module,exports,__webpack_require__){eval("// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = __webpack_require__(0);\nvar scale = __webpack_require__(129);\nvar fround = __webpack_require__(108);\n\n$export($export.S, 'Math', {\n fscale: function fscale(x, inLow, inHigh, outLow, outHigh) {\n return fround(scale(x, inLow, inHigh, outLow, outHigh));\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5mc2NhbGUuanM/MWY5MSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLFlBQVksbUJBQU8sQ0FBQyxHQUFlO0FBQ25DLGFBQWEsbUJBQU8sQ0FBQyxHQUFnQjs7QUFFckM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjMwNC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vcndhbGRyb24uZ2l0aHViLmlvL3Byb3Bvc2FsLW1hdGgtZXh0ZW5zaW9ucy9cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgc2NhbGUgPSByZXF1aXJlKCcuL19tYXRoLXNjYWxlJyk7XG52YXIgZnJvdW5kID0gcmVxdWlyZSgnLi9fbWF0aC1mcm91bmQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBmc2NhbGU6IGZ1bmN0aW9uIGZzY2FsZSh4LCBpbkxvdywgaW5IaWdoLCBvdXRMb3csIG91dEhpZ2gpIHtcbiAgICByZXR1cm4gZnJvdW5kKHNjYWxlKHgsIGluTG93LCBpbkhpZ2gsIG91dExvdywgb3V0SGlnaCkpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///304\n")},function(module,exports,__webpack_require__){eval("// https://gist.github.com/BrendanEich/4294d5c212a6d2254703\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', {\n iaddh: function iaddh(x0, x1, y0, y1) {\n var $x0 = x0 >>> 0;\n var $x1 = x1 >>> 0;\n var $y0 = y0 >>> 0;\n return $x1 + (y1 >>> 0) + (($x0 & $y0 | ($x0 | $y0) & ~($x0 + $y0 >>> 0)) >>> 31) | 0;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5pYWRkaC5qcz85YzAwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIzMDUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9CcmVuZGFuRWljaC80Mjk0ZDVjMjEyYTZkMjI1NDcwM1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBpYWRkaDogZnVuY3Rpb24gaWFkZGgoeDAsIHgxLCB5MCwgeTEpIHtcbiAgICB2YXIgJHgwID0geDAgPj4+IDA7XG4gICAgdmFyICR4MSA9IHgxID4+PiAwO1xuICAgIHZhciAkeTAgPSB5MCA+Pj4gMDtcbiAgICByZXR1cm4gJHgxICsgKHkxID4+PiAwKSArICgoJHgwICYgJHkwIHwgKCR4MCB8ICR5MCkgJiB+KCR4MCArICR5MCA+Pj4gMCkpID4+PiAzMSkgfCAwO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///305\n")},function(module,exports,__webpack_require__){eval("// https://gist.github.com/BrendanEich/4294d5c212a6d2254703\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', {\n isubh: function isubh(x0, x1, y0, y1) {\n var $x0 = x0 >>> 0;\n var $x1 = x1 >>> 0;\n var $y0 = y0 >>> 0;\n return $x1 - (y1 >>> 0) - ((~$x0 & $y0 | ~($x0 ^ $y0) & $x0 - $y0 >>> 0) >>> 31) | 0;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5pc3ViaC5qcz8yZjc4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIzMDYuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9CcmVuZGFuRWljaC80Mjk0ZDVjMjEyYTZkMjI1NDcwM1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBpc3ViaDogZnVuY3Rpb24gaXN1YmgoeDAsIHgxLCB5MCwgeTEpIHtcbiAgICB2YXIgJHgwID0geDAgPj4+IDA7XG4gICAgdmFyICR4MSA9IHgxID4+PiAwO1xuICAgIHZhciAkeTAgPSB5MCA+Pj4gMDtcbiAgICByZXR1cm4gJHgxIC0gKHkxID4+PiAwKSAtICgofiR4MCAmICR5MCB8IH4oJHgwIF4gJHkwKSAmICR4MCAtICR5MCA+Pj4gMCkgPj4+IDMxKSB8IDA7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///306\n")},function(module,exports,__webpack_require__){eval("// https://gist.github.com/BrendanEich/4294d5c212a6d2254703\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', {\n imulh: function imulh(u, v) {\n var UINT16 = 0xffff;\n var $u = +u;\n var $v = +v;\n var u0 = $u & UINT16;\n var v0 = $v & UINT16;\n var u1 = $u >> 16;\n var v1 = $v >> 16;\n var t = (u1 * v0 >>> 0) + (u0 * v0 >>> 16);\n return u1 * v1 + (t >> 16) + ((u0 * v1 >>> 0) + (t & UINT16) >> 16);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5pbXVsaC5qcz9iNGMyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMzA3LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vQnJlbmRhbkVpY2gvNDI5NGQ1YzIxMmE2ZDIyNTQ3MDNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgaW11bGg6IGZ1bmN0aW9uIGltdWxoKHUsIHYpIHtcbiAgICB2YXIgVUlOVDE2ID0gMHhmZmZmO1xuICAgIHZhciAkdSA9ICt1O1xuICAgIHZhciAkdiA9ICt2O1xuICAgIHZhciB1MCA9ICR1ICYgVUlOVDE2O1xuICAgIHZhciB2MCA9ICR2ICYgVUlOVDE2O1xuICAgIHZhciB1MSA9ICR1ID4+IDE2O1xuICAgIHZhciB2MSA9ICR2ID4+IDE2O1xuICAgIHZhciB0ID0gKHUxICogdjAgPj4+IDApICsgKHUwICogdjAgPj4+IDE2KTtcbiAgICByZXR1cm4gdTEgKiB2MSArICh0ID4+IDE2KSArICgodTAgKiB2MSA+Pj4gMCkgKyAodCAmIFVJTlQxNikgPj4gMTYpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///307\n")},function(module,exports,__webpack_require__){eval("// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', { RAD_PER_DEG: 180 / Math.PI });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5yYWQtcGVyLWRlZy5qcz8xZjE4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDLDRCQUE0Qiw2QkFBNkIiLCJmaWxlIjoiMzA4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9yd2FsZHJvbi5naXRodWIuaW8vcHJvcG9zYWwtbWF0aC1leHRlbnNpb25zL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywgeyBSQURfUEVSX0RFRzogMTgwIC8gTWF0aC5QSSB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///308\n")},function(module,exports,__webpack_require__){eval("// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = __webpack_require__(0);\nvar DEG_PER_RAD = Math.PI / 180;\n\n$export($export.S, 'Math', {\n radians: function radians(degrees) {\n return degrees * DEG_PER_RAD;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5yYWRpYW5zLmpzPzY5MmIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMzA5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9yd2FsZHJvbi5naXRodWIuaW8vcHJvcG9zYWwtbWF0aC1leHRlbnNpb25zL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBERUdfUEVSX1JBRCA9IE1hdGguUEkgLyAxODA7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgcmFkaWFuczogZnVuY3Rpb24gcmFkaWFucyhkZWdyZWVzKSB7XG4gICAgcmV0dXJuIGRlZ3JlZXMgKiBERUdfUEVSX1JBRDtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///309\n")},function(module,exports,__webpack_require__){eval("// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', { scale: __webpack_require__(129) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5zY2FsZS5qcz9jNzc1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDLDRCQUE0QixRQUFRLG1CQUFPLENBQUMsR0FBZSxHQUFHIiwiZmlsZSI6IjMxMC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vcndhbGRyb24uZ2l0aHViLmlvL3Byb3Bvc2FsLW1hdGgtZXh0ZW5zaW9ucy9cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHsgc2NhbGU6IHJlcXVpcmUoJy4vX21hdGgtc2NhbGUnKSB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///310\n")},function(module,exports,__webpack_require__){eval("// https://gist.github.com/BrendanEich/4294d5c212a6d2254703\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', {\n umulh: function umulh(u, v) {\n var UINT16 = 0xffff;\n var $u = +u;\n var $v = +v;\n var u0 = $u & UINT16;\n var v0 = $v & UINT16;\n var u1 = $u >>> 16;\n var v1 = $v >>> 16;\n var t = (u1 * v0 >>> 0) + (u0 * v0 >>> 16);\n return u1 * v1 + (t >>> 16) + ((u0 * v1 >>> 0) + (t & UINT16) >>> 16);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC51bXVsaC5qcz84YTVjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMzExLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vQnJlbmRhbkVpY2gvNDI5NGQ1YzIxMmE2ZDIyNTQ3MDNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgdW11bGg6IGZ1bmN0aW9uIHVtdWxoKHUsIHYpIHtcbiAgICB2YXIgVUlOVDE2ID0gMHhmZmZmO1xuICAgIHZhciAkdSA9ICt1O1xuICAgIHZhciAkdiA9ICt2O1xuICAgIHZhciB1MCA9ICR1ICYgVUlOVDE2O1xuICAgIHZhciB2MCA9ICR2ICYgVUlOVDE2O1xuICAgIHZhciB1MSA9ICR1ID4+PiAxNjtcbiAgICB2YXIgdjEgPSAkdiA+Pj4gMTY7XG4gICAgdmFyIHQgPSAodTEgKiB2MCA+Pj4gMCkgKyAodTAgKiB2MCA+Pj4gMTYpO1xuICAgIHJldHVybiB1MSAqIHYxICsgKHQgPj4+IDE2KSArICgodTAgKiB2MSA+Pj4gMCkgKyAodCAmIFVJTlQxNikgPj4+IDE2KTtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///311\n")},function(module,exports,__webpack_require__){eval("// http://jfbastien.github.io/papers/Math.signbit.html\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', { signbit: function signbit(x) {\n // eslint-disable-next-line no-self-compare\n return (x = +x) != x ? x : x == 0 ? 1 / x == Infinity : x > 0;\n} });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5zaWduYml0LmpzP2VkN2UiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVzs7QUFFakMsNEJBQTRCO0FBQzVCO0FBQ0E7QUFDQSxDQUFDLEVBQUUiLCJmaWxlIjoiMzEyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cDovL2pmYmFzdGllbi5naXRodWIuaW8vcGFwZXJzL01hdGguc2lnbmJpdC5odG1sXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7IHNpZ25iaXQ6IGZ1bmN0aW9uIHNpZ25iaXQoeCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gIHJldHVybiAoeCA9ICt4KSAhPSB4ID8geCA6IHggPT0gMCA/IDEgLyB4ID09IEluZmluaXR5IDogeCA+IDA7XG59IH0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///312\n")},function(module,exports,__webpack_require__){"use strict";eval("// https://github.com/tc39/proposal-promise-finally\n\nvar $export = __webpack_require__(0);\nvar core = __webpack_require__(18);\nvar global = __webpack_require__(2);\nvar speciesConstructor = __webpack_require__(51);\nvar promiseResolve = __webpack_require__(116);\n\n$export($export.P + $export.R, 'Promise', { 'finally': function (onFinally) {\n var C = speciesConstructor(this, core.Promise || global.Promise);\n var isFunction = typeof onFinally == 'function';\n return this.then(\n isFunction ? function (x) {\n return promiseResolve(C, onFinally()).then(function () { return x; });\n } : onFinally,\n isFunction ? function (e) {\n return promiseResolve(C, onFinally()).then(function () { throw e; });\n } : onFinally\n );\n} });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucHJvbWlzZS5maW5hbGx5LmpzPzA5N2QiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDYTtBQUNiLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLFdBQVcsbUJBQU8sQ0FBQyxFQUFTO0FBQzVCLGFBQWEsbUJBQU8sQ0FBQyxDQUFXO0FBQ2hDLHlCQUF5QixtQkFBTyxDQUFDLEVBQXdCO0FBQ3pELHFCQUFxQixtQkFBTyxDQUFDLEdBQW9COztBQUVqRCwyQ0FBMkM7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4REFBOEQsVUFBVSxFQUFFO0FBQzFFLEtBQUs7QUFDTDtBQUNBLDhEQUE4RCxTQUFTLEVBQUU7QUFDekUsS0FBSztBQUNMO0FBQ0EsQ0FBQyxFQUFFIiwiZmlsZSI6IjMxMy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXByb21pc2UtZmluYWxseVxuJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4vX3NwZWNpZXMtY29uc3RydWN0b3InKTtcbnZhciBwcm9taXNlUmVzb2x2ZSA9IHJlcXVpcmUoJy4vX3Byb21pc2UtcmVzb2x2ZScpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuUiwgJ1Byb21pc2UnLCB7ICdmaW5hbGx5JzogZnVuY3Rpb24gKG9uRmluYWxseSkge1xuICB2YXIgQyA9IHNwZWNpZXNDb25zdHJ1Y3Rvcih0aGlzLCBjb3JlLlByb21pc2UgfHwgZ2xvYmFsLlByb21pc2UpO1xuICB2YXIgaXNGdW5jdGlvbiA9IHR5cGVvZiBvbkZpbmFsbHkgPT0gJ2Z1bmN0aW9uJztcbiAgcmV0dXJuIHRoaXMudGhlbihcbiAgICBpc0Z1bmN0aW9uID8gZnVuY3Rpb24gKHgpIHtcbiAgICAgIHJldHVybiBwcm9taXNlUmVzb2x2ZShDLCBvbkZpbmFsbHkoKSkudGhlbihmdW5jdGlvbiAoKSB7IHJldHVybiB4OyB9KTtcbiAgICB9IDogb25GaW5hbGx5LFxuICAgIGlzRnVuY3Rpb24gPyBmdW5jdGlvbiAoZSkge1xuICAgICAgcmV0dXJuIHByb21pc2VSZXNvbHZlKEMsIG9uRmluYWxseSgpKS50aGVuKGZ1bmN0aW9uICgpIHsgdGhyb3cgZTsgfSk7XG4gICAgfSA6IG9uRmluYWxseVxuICApO1xufSB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///313\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// https://github.com/tc39/proposal-promise-try\nvar $export = __webpack_require__(0);\nvar newPromiseCapability = __webpack_require__(91);\nvar perform = __webpack_require__(115);\n\n$export($export.S, 'Promise', { 'try': function (callbackfn) {\n var promiseCapability = newPromiseCapability.f(this);\n var result = perform(callbackfn);\n (result.e ? promiseCapability.reject : promiseCapability.resolve)(result.v);\n return promiseCapability.promise;\n} });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucHJvbWlzZS50cnkuanM/YTljYyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsMkJBQTJCLG1CQUFPLENBQUMsRUFBMkI7QUFDOUQsY0FBYyxtQkFBTyxDQUFDLEdBQVk7O0FBRWxDLCtCQUErQjtBQUMvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsRUFBRSIsImZpbGUiOiIzMTQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1wcm9taXNlLXRyeVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IHJlcXVpcmUoJy4vX25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcbnZhciBwZXJmb3JtID0gcmVxdWlyZSgnLi9fcGVyZm9ybScpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1Byb21pc2UnLCB7ICd0cnknOiBmdW5jdGlvbiAoY2FsbGJhY2tmbikge1xuICB2YXIgcHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eS5mKHRoaXMpO1xuICB2YXIgcmVzdWx0ID0gcGVyZm9ybShjYWxsYmFja2ZuKTtcbiAgKHJlc3VsdC5lID8gcHJvbWlzZUNhcGFiaWxpdHkucmVqZWN0IDogcHJvbWlzZUNhcGFiaWxpdHkucmVzb2x2ZSkocmVzdWx0LnYpO1xuICByZXR1cm4gcHJvbWlzZUNhcGFiaWxpdHkucHJvbWlzZTtcbn0gfSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///314\n")},function(module,exports,__webpack_require__){eval("var metadata = __webpack_require__(28);\nvar anObject = __webpack_require__(1);\nvar toMetaKey = metadata.key;\nvar ordinaryDefineOwnMetadata = metadata.set;\n\nmetadata.exp({ defineMetadata: function defineMetadata(metadataKey, metadataValue, target, targetKey) {\n ordinaryDefineOwnMetadata(metadataKey, metadataValue, anObject(target), toMetaKey(targetKey));\n} });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5kZWZpbmUtbWV0YWRhdGEuanM/ZTNkMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxlQUFlLG1CQUFPLENBQUMsRUFBYTtBQUNwQyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQztBQUNBOztBQUVBLGNBQWM7QUFDZDtBQUNBLENBQUMsRUFBRSIsImZpbGUiOiIzMTUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgbWV0YWRhdGEgPSByZXF1aXJlKCcuL19tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgdG9NZXRhS2V5ID0gbWV0YWRhdGEua2V5O1xudmFyIG9yZGluYXJ5RGVmaW5lT3duTWV0YWRhdGEgPSBtZXRhZGF0YS5zZXQ7XG5cbm1ldGFkYXRhLmV4cCh7IGRlZmluZU1ldGFkYXRhOiBmdW5jdGlvbiBkZWZpbmVNZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSwgdGFyZ2V0LCB0YXJnZXRLZXkpIHtcbiAgb3JkaW5hcnlEZWZpbmVPd25NZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSwgYW5PYmplY3QodGFyZ2V0KSwgdG9NZXRhS2V5KHRhcmdldEtleSkpO1xufSB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///315\n")},function(module,exports,__webpack_require__){eval("var metadata = __webpack_require__(28);\nvar anObject = __webpack_require__(1);\nvar toMetaKey = metadata.key;\nvar getOrCreateMetadataMap = metadata.map;\nvar store = metadata.store;\n\nmetadata.exp({ deleteMetadata: function deleteMetadata(metadataKey, target /* , targetKey */) {\n var targetKey = arguments.length < 3 ? undefined : toMetaKey(arguments[2]);\n var metadataMap = getOrCreateMetadataMap(anObject(target), targetKey, false);\n if (metadataMap === undefined || !metadataMap['delete'](metadataKey)) return false;\n if (metadataMap.size) return true;\n var targetMetadata = store.get(target);\n targetMetadata['delete'](targetKey);\n return !!targetMetadata.size || store['delete'](target);\n} });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5kZWxldGUtbWV0YWRhdGEuanM/Y2VhZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxlQUFlLG1CQUFPLENBQUMsRUFBYTtBQUNwQyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQztBQUNBO0FBQ0E7O0FBRUEsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxFQUFFIiwiZmlsZSI6IjMxNi5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBtZXRhZGF0YSA9IHJlcXVpcmUoJy4vX21ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciB0b01ldGFLZXkgPSBtZXRhZGF0YS5rZXk7XG52YXIgZ2V0T3JDcmVhdGVNZXRhZGF0YU1hcCA9IG1ldGFkYXRhLm1hcDtcbnZhciBzdG9yZSA9IG1ldGFkYXRhLnN0b3JlO1xuXG5tZXRhZGF0YS5leHAoeyBkZWxldGVNZXRhZGF0YTogZnVuY3Rpb24gZGVsZXRlTWV0YWRhdGEobWV0YWRhdGFLZXksIHRhcmdldCAvKiAsIHRhcmdldEtleSAqLykge1xuICB2YXIgdGFyZ2V0S2V5ID0gYXJndW1lbnRzLmxlbmd0aCA8IDMgPyB1bmRlZmluZWQgOiB0b01ldGFLZXkoYXJndW1lbnRzWzJdKTtcbiAgdmFyIG1ldGFkYXRhTWFwID0gZ2V0T3JDcmVhdGVNZXRhZGF0YU1hcChhbk9iamVjdCh0YXJnZXQpLCB0YXJnZXRLZXksIGZhbHNlKTtcbiAgaWYgKG1ldGFkYXRhTWFwID09PSB1bmRlZmluZWQgfHwgIW1ldGFkYXRhTWFwWydkZWxldGUnXShtZXRhZGF0YUtleSkpIHJldHVybiBmYWxzZTtcbiAgaWYgKG1ldGFkYXRhTWFwLnNpemUpIHJldHVybiB0cnVlO1xuICB2YXIgdGFyZ2V0TWV0YWRhdGEgPSBzdG9yZS5nZXQodGFyZ2V0KTtcbiAgdGFyZ2V0TWV0YWRhdGFbJ2RlbGV0ZSddKHRhcmdldEtleSk7XG4gIHJldHVybiAhIXRhcmdldE1ldGFkYXRhLnNpemUgfHwgc3RvcmVbJ2RlbGV0ZSddKHRhcmdldCk7XG59IH0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///316\n")},function(module,exports,__webpack_require__){eval("var metadata = __webpack_require__(28);\nvar anObject = __webpack_require__(1);\nvar getPrototypeOf = __webpack_require__(17);\nvar ordinaryHasOwnMetadata = metadata.has;\nvar ordinaryGetOwnMetadata = metadata.get;\nvar toMetaKey = metadata.key;\n\nvar ordinaryGetMetadata = function (MetadataKey, O, P) {\n var hasOwn = ordinaryHasOwnMetadata(MetadataKey, O, P);\n if (hasOwn) return ordinaryGetOwnMetadata(MetadataKey, O, P);\n var parent = getPrototypeOf(O);\n return parent !== null ? ordinaryGetMetadata(MetadataKey, parent, P) : undefined;\n};\n\nmetadata.exp({ getMetadata: function getMetadata(metadataKey, target /* , targetKey */) {\n return ordinaryGetMetadata(metadataKey, anObject(target), arguments.length < 3 ? undefined : toMetaKey(arguments[2]));\n} });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtbWV0YWRhdGEuanM/ZTM5NCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxlQUFlLG1CQUFPLENBQUMsRUFBYTtBQUNwQyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxxQkFBcUIsbUJBQU8sQ0FBQyxFQUFlO0FBQzVDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsY0FBYztBQUNkO0FBQ0EsQ0FBQyxFQUFFIiwiZmlsZSI6IjMxNy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBtZXRhZGF0YSA9IHJlcXVpcmUoJy4vX21ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBvcmRpbmFyeUhhc093bk1ldGFkYXRhID0gbWV0YWRhdGEuaGFzO1xudmFyIG9yZGluYXJ5R2V0T3duTWV0YWRhdGEgPSBtZXRhZGF0YS5nZXQ7XG52YXIgdG9NZXRhS2V5ID0gbWV0YWRhdGEua2V5O1xuXG52YXIgb3JkaW5hcnlHZXRNZXRhZGF0YSA9IGZ1bmN0aW9uIChNZXRhZGF0YUtleSwgTywgUCkge1xuICB2YXIgaGFzT3duID0gb3JkaW5hcnlIYXNPd25NZXRhZGF0YShNZXRhZGF0YUtleSwgTywgUCk7XG4gIGlmIChoYXNPd24pIHJldHVybiBvcmRpbmFyeUdldE93bk1ldGFkYXRhKE1ldGFkYXRhS2V5LCBPLCBQKTtcbiAgdmFyIHBhcmVudCA9IGdldFByb3RvdHlwZU9mKE8pO1xuICByZXR1cm4gcGFyZW50ICE9PSBudWxsID8gb3JkaW5hcnlHZXRNZXRhZGF0YShNZXRhZGF0YUtleSwgcGFyZW50LCBQKSA6IHVuZGVmaW5lZDtcbn07XG5cbm1ldGFkYXRhLmV4cCh7IGdldE1ldGFkYXRhOiBmdW5jdGlvbiBnZXRNZXRhZGF0YShtZXRhZGF0YUtleSwgdGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gIHJldHVybiBvcmRpbmFyeUdldE1ldGFkYXRhKG1ldGFkYXRhS2V5LCBhbk9iamVjdCh0YXJnZXQpLCBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHVuZGVmaW5lZCA6IHRvTWV0YUtleShhcmd1bWVudHNbMl0pKTtcbn0gfSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///317\n")},function(module,exports,__webpack_require__){eval("var Set = __webpack_require__(119);\nvar from = __webpack_require__(128);\nvar metadata = __webpack_require__(28);\nvar anObject = __webpack_require__(1);\nvar getPrototypeOf = __webpack_require__(17);\nvar ordinaryOwnMetadataKeys = metadata.keys;\nvar toMetaKey = metadata.key;\n\nvar ordinaryMetadataKeys = function (O, P) {\n var oKeys = ordinaryOwnMetadataKeys(O, P);\n var parent = getPrototypeOf(O);\n if (parent === null) return oKeys;\n var pKeys = ordinaryMetadataKeys(parent, P);\n return pKeys.length ? oKeys.length ? from(new Set(oKeys.concat(pKeys))) : pKeys : oKeys;\n};\n\nmetadata.exp({ getMetadataKeys: function getMetadataKeys(target /* , targetKey */) {\n return ordinaryMetadataKeys(anObject(target), arguments.length < 2 ? undefined : toMetaKey(arguments[1]));\n} });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtbWV0YWRhdGEta2V5cy5qcz9iODBiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFVBQVUsbUJBQU8sQ0FBQyxHQUFXO0FBQzdCLFdBQVcsbUJBQU8sQ0FBQyxHQUF3QjtBQUMzQyxlQUFlLG1CQUFPLENBQUMsRUFBYTtBQUNwQyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxxQkFBcUIsbUJBQU8sQ0FBQyxFQUFlO0FBQzVDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsY0FBYztBQUNkO0FBQ0EsQ0FBQyxFQUFFIiwiZmlsZSI6IjMxOC5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBTZXQgPSByZXF1aXJlKCcuL2VzNi5zZXQnKTtcbnZhciBmcm9tID0gcmVxdWlyZSgnLi9fYXJyYXktZnJvbS1pdGVyYWJsZScpO1xudmFyIG1ldGFkYXRhID0gcmVxdWlyZSgnLi9fbWV0YWRhdGEnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIG9yZGluYXJ5T3duTWV0YWRhdGFLZXlzID0gbWV0YWRhdGEua2V5cztcbnZhciB0b01ldGFLZXkgPSBtZXRhZGF0YS5rZXk7XG5cbnZhciBvcmRpbmFyeU1ldGFkYXRhS2V5cyA9IGZ1bmN0aW9uIChPLCBQKSB7XG4gIHZhciBvS2V5cyA9IG9yZGluYXJ5T3duTWV0YWRhdGFLZXlzKE8sIFApO1xuICB2YXIgcGFyZW50ID0gZ2V0UHJvdG90eXBlT2YoTyk7XG4gIGlmIChwYXJlbnQgPT09IG51bGwpIHJldHVybiBvS2V5cztcbiAgdmFyIHBLZXlzID0gb3JkaW5hcnlNZXRhZGF0YUtleXMocGFyZW50LCBQKTtcbiAgcmV0dXJuIHBLZXlzLmxlbmd0aCA/IG9LZXlzLmxlbmd0aCA/IGZyb20obmV3IFNldChvS2V5cy5jb25jYXQocEtleXMpKSkgOiBwS2V5cyA6IG9LZXlzO1xufTtcblxubWV0YWRhdGEuZXhwKHsgZ2V0TWV0YWRhdGFLZXlzOiBmdW5jdGlvbiBnZXRNZXRhZGF0YUtleXModGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gIHJldHVybiBvcmRpbmFyeU1ldGFkYXRhS2V5cyhhbk9iamVjdCh0YXJnZXQpLCBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IHVuZGVmaW5lZCA6IHRvTWV0YUtleShhcmd1bWVudHNbMV0pKTtcbn0gfSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///318\n")},function(module,exports,__webpack_require__){eval("var metadata = __webpack_require__(28);\nvar anObject = __webpack_require__(1);\nvar ordinaryGetOwnMetadata = metadata.get;\nvar toMetaKey = metadata.key;\n\nmetadata.exp({ getOwnMetadata: function getOwnMetadata(metadataKey, target /* , targetKey */) {\n return ordinaryGetOwnMetadata(metadataKey, anObject(target)\n , arguments.length < 3 ? undefined : toMetaKey(arguments[2]));\n} });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtb3duLW1ldGFkYXRhLmpzPzA2YTciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxtQkFBTyxDQUFDLEVBQWE7QUFDcEMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckM7QUFDQTs7QUFFQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBLENBQUMsRUFBRSIsImZpbGUiOiIzMTkuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgbWV0YWRhdGEgPSByZXF1aXJlKCcuL19tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgb3JkaW5hcnlHZXRPd25NZXRhZGF0YSA9IG1ldGFkYXRhLmdldDtcbnZhciB0b01ldGFLZXkgPSBtZXRhZGF0YS5rZXk7XG5cbm1ldGFkYXRhLmV4cCh7IGdldE93bk1ldGFkYXRhOiBmdW5jdGlvbiBnZXRPd25NZXRhZGF0YShtZXRhZGF0YUtleSwgdGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gIHJldHVybiBvcmRpbmFyeUdldE93bk1ldGFkYXRhKG1ldGFkYXRhS2V5LCBhbk9iamVjdCh0YXJnZXQpXG4gICAgLCBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHVuZGVmaW5lZCA6IHRvTWV0YUtleShhcmd1bWVudHNbMl0pKTtcbn0gfSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///319\n")},function(module,exports,__webpack_require__){eval("var metadata = __webpack_require__(28);\nvar anObject = __webpack_require__(1);\nvar ordinaryOwnMetadataKeys = metadata.keys;\nvar toMetaKey = metadata.key;\n\nmetadata.exp({ getOwnMetadataKeys: function getOwnMetadataKeys(target /* , targetKey */) {\n return ordinaryOwnMetadataKeys(anObject(target), arguments.length < 2 ? undefined : toMetaKey(arguments[1]));\n} });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtb3duLW1ldGFkYXRhLWtleXMuanM/N2NkZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxlQUFlLG1CQUFPLENBQUMsRUFBYTtBQUNwQyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQztBQUNBOztBQUVBLGNBQWM7QUFDZDtBQUNBLENBQUMsRUFBRSIsImZpbGUiOiIzMjAuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgbWV0YWRhdGEgPSByZXF1aXJlKCcuL19tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgb3JkaW5hcnlPd25NZXRhZGF0YUtleXMgPSBtZXRhZGF0YS5rZXlzO1xudmFyIHRvTWV0YUtleSA9IG1ldGFkYXRhLmtleTtcblxubWV0YWRhdGEuZXhwKHsgZ2V0T3duTWV0YWRhdGFLZXlzOiBmdW5jdGlvbiBnZXRPd25NZXRhZGF0YUtleXModGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gIHJldHVybiBvcmRpbmFyeU93bk1ldGFkYXRhS2V5cyhhbk9iamVjdCh0YXJnZXQpLCBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IHVuZGVmaW5lZCA6IHRvTWV0YUtleShhcmd1bWVudHNbMV0pKTtcbn0gfSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///320\n")},function(module,exports,__webpack_require__){eval("var metadata = __webpack_require__(28);\nvar anObject = __webpack_require__(1);\nvar getPrototypeOf = __webpack_require__(17);\nvar ordinaryHasOwnMetadata = metadata.has;\nvar toMetaKey = metadata.key;\n\nvar ordinaryHasMetadata = function (MetadataKey, O, P) {\n var hasOwn = ordinaryHasOwnMetadata(MetadataKey, O, P);\n if (hasOwn) return true;\n var parent = getPrototypeOf(O);\n return parent !== null ? ordinaryHasMetadata(MetadataKey, parent, P) : false;\n};\n\nmetadata.exp({ hasMetadata: function hasMetadata(metadataKey, target /* , targetKey */) {\n return ordinaryHasMetadata(metadataKey, anObject(target), arguments.length < 3 ? undefined : toMetaKey(arguments[2]));\n} });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5oYXMtbWV0YWRhdGEuanM/ODk2ZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxlQUFlLG1CQUFPLENBQUMsRUFBYTtBQUNwQyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxxQkFBcUIsbUJBQU8sQ0FBQyxFQUFlO0FBQzVDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGNBQWM7QUFDZDtBQUNBLENBQUMsRUFBRSIsImZpbGUiOiIzMjEuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgbWV0YWRhdGEgPSByZXF1aXJlKCcuL19tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgb3JkaW5hcnlIYXNPd25NZXRhZGF0YSA9IG1ldGFkYXRhLmhhcztcbnZhciB0b01ldGFLZXkgPSBtZXRhZGF0YS5rZXk7XG5cbnZhciBvcmRpbmFyeUhhc01ldGFkYXRhID0gZnVuY3Rpb24gKE1ldGFkYXRhS2V5LCBPLCBQKSB7XG4gIHZhciBoYXNPd24gPSBvcmRpbmFyeUhhc093bk1ldGFkYXRhKE1ldGFkYXRhS2V5LCBPLCBQKTtcbiAgaWYgKGhhc093bikgcmV0dXJuIHRydWU7XG4gIHZhciBwYXJlbnQgPSBnZXRQcm90b3R5cGVPZihPKTtcbiAgcmV0dXJuIHBhcmVudCAhPT0gbnVsbCA/IG9yZGluYXJ5SGFzTWV0YWRhdGEoTWV0YWRhdGFLZXksIHBhcmVudCwgUCkgOiBmYWxzZTtcbn07XG5cbm1ldGFkYXRhLmV4cCh7IGhhc01ldGFkYXRhOiBmdW5jdGlvbiBoYXNNZXRhZGF0YShtZXRhZGF0YUtleSwgdGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gIHJldHVybiBvcmRpbmFyeUhhc01ldGFkYXRhKG1ldGFkYXRhS2V5LCBhbk9iamVjdCh0YXJnZXQpLCBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHVuZGVmaW5lZCA6IHRvTWV0YUtleShhcmd1bWVudHNbMl0pKTtcbn0gfSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///321\n")},function(module,exports,__webpack_require__){eval("var metadata = __webpack_require__(28);\nvar anObject = __webpack_require__(1);\nvar ordinaryHasOwnMetadata = metadata.has;\nvar toMetaKey = metadata.key;\n\nmetadata.exp({ hasOwnMetadata: function hasOwnMetadata(metadataKey, target /* , targetKey */) {\n return ordinaryHasOwnMetadata(metadataKey, anObject(target)\n , arguments.length < 3 ? undefined : toMetaKey(arguments[2]));\n} });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5oYXMtb3duLW1ldGFkYXRhLmpzP2VjMzkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxtQkFBTyxDQUFDLEVBQWE7QUFDcEMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckM7QUFDQTs7QUFFQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBLENBQUMsRUFBRSIsImZpbGUiOiIzMjIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgbWV0YWRhdGEgPSByZXF1aXJlKCcuL19tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgb3JkaW5hcnlIYXNPd25NZXRhZGF0YSA9IG1ldGFkYXRhLmhhcztcbnZhciB0b01ldGFLZXkgPSBtZXRhZGF0YS5rZXk7XG5cbm1ldGFkYXRhLmV4cCh7IGhhc093bk1ldGFkYXRhOiBmdW5jdGlvbiBoYXNPd25NZXRhZGF0YShtZXRhZGF0YUtleSwgdGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gIHJldHVybiBvcmRpbmFyeUhhc093bk1ldGFkYXRhKG1ldGFkYXRhS2V5LCBhbk9iamVjdCh0YXJnZXQpXG4gICAgLCBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHVuZGVmaW5lZCA6IHRvTWV0YUtleShhcmd1bWVudHNbMl0pKTtcbn0gfSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///322\n")},function(module,exports,__webpack_require__){eval("var $metadata = __webpack_require__(28);\nvar anObject = __webpack_require__(1);\nvar aFunction = __webpack_require__(10);\nvar toMetaKey = $metadata.key;\nvar ordinaryDefineOwnMetadata = $metadata.set;\n\n$metadata.exp({ metadata: function metadata(metadataKey, metadataValue) {\n return function decorator(target, targetKey) {\n ordinaryDefineOwnMetadata(\n metadataKey, metadataValue,\n (targetKey !== undefined ? anObject : aFunction)(target),\n toMetaKey(targetKey)\n );\n };\n} });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5tZXRhZGF0YS5qcz8zYTljIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGdCQUFnQixtQkFBTyxDQUFDLEVBQWE7QUFDckMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2QztBQUNBOztBQUVBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsRUFBRSIsImZpbGUiOiIzMjMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgJG1ldGFkYXRhID0gcmVxdWlyZSgnLi9fbWV0YWRhdGEnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciB0b01ldGFLZXkgPSAkbWV0YWRhdGEua2V5O1xudmFyIG9yZGluYXJ5RGVmaW5lT3duTWV0YWRhdGEgPSAkbWV0YWRhdGEuc2V0O1xuXG4kbWV0YWRhdGEuZXhwKHsgbWV0YWRhdGE6IGZ1bmN0aW9uIG1ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbiBkZWNvcmF0b3IodGFyZ2V0LCB0YXJnZXRLZXkpIHtcbiAgICBvcmRpbmFyeURlZmluZU93bk1ldGFkYXRhKFxuICAgICAgbWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUsXG4gICAgICAodGFyZ2V0S2V5ICE9PSB1bmRlZmluZWQgPyBhbk9iamVjdCA6IGFGdW5jdGlvbikodGFyZ2V0KSxcbiAgICAgIHRvTWV0YUtleSh0YXJnZXRLZXkpXG4gICAgKTtcbiAgfTtcbn0gfSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///323\n")},function(module,exports,__webpack_require__){eval("// https://github.com/rwaldron/tc39-notes/blob/master/es6/2014-09/sept-25.md#510-globalasap-for-enqueuing-a-microtask\nvar $export = __webpack_require__(0);\nvar microtask = __webpack_require__(90)();\nvar process = __webpack_require__(2).process;\nvar isNode = __webpack_require__(20)(process) == 'process';\n\n$export($export.G, {\n asap: function asap(fn) {\n var domain = isNode && process.domain;\n microtask(domain ? domain.bind(fn) : fn);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuYXNhcC5qcz8wZDI1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBYztBQUN0QyxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxhQUFhLG1CQUFPLENBQUMsRUFBUTs7QUFFN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMzI0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXRodWIuY29tL3J3YWxkcm9uL3RjMzktbm90ZXMvYmxvYi9tYXN0ZXIvZXM2LzIwMTQtMDkvc2VwdC0yNS5tZCM1MTAtZ2xvYmFsYXNhcC1mb3ItZW5xdWV1aW5nLWEtbWljcm90YXNrXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIG1pY3JvdGFzayA9IHJlcXVpcmUoJy4vX21pY3JvdGFzaycpKCk7XG52YXIgcHJvY2VzcyA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLnByb2Nlc3M7XG52YXIgaXNOb2RlID0gcmVxdWlyZSgnLi9fY29mJykocHJvY2VzcykgPT0gJ3Byb2Nlc3MnO1xuXG4kZXhwb3J0KCRleHBvcnQuRywge1xuICBhc2FwOiBmdW5jdGlvbiBhc2FwKGZuKSB7XG4gICAgdmFyIGRvbWFpbiA9IGlzTm9kZSAmJiBwcm9jZXNzLmRvbWFpbjtcbiAgICBtaWNyb3Rhc2soZG9tYWluID8gZG9tYWluLmJpbmQoZm4pIDogZm4pO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///324\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// https://github.com/zenparsing/es-observable\nvar $export = __webpack_require__(0);\nvar global = __webpack_require__(2);\nvar core = __webpack_require__(18);\nvar microtask = __webpack_require__(90)();\nvar OBSERVABLE = __webpack_require__(5)('observable');\nvar aFunction = __webpack_require__(10);\nvar anObject = __webpack_require__(1);\nvar anInstance = __webpack_require__(39);\nvar redefineAll = __webpack_require__(41);\nvar hide = __webpack_require__(11);\nvar forOf = __webpack_require__(40);\nvar RETURN = forOf.RETURN;\n\nvar getMethod = function (fn) {\n return fn == null ? undefined : aFunction(fn);\n};\n\nvar cleanupSubscription = function (subscription) {\n var cleanup = subscription._c;\n if (cleanup) {\n subscription._c = undefined;\n cleanup();\n }\n};\n\nvar subscriptionClosed = function (subscription) {\n return subscription._o === undefined;\n};\n\nvar closeSubscription = function (subscription) {\n if (!subscriptionClosed(subscription)) {\n subscription._o = undefined;\n cleanupSubscription(subscription);\n }\n};\n\nvar Subscription = function (observer, subscriber) {\n anObject(observer);\n this._c = undefined;\n this._o = observer;\n observer = new SubscriptionObserver(this);\n try {\n var cleanup = subscriber(observer);\n var subscription = cleanup;\n if (cleanup != null) {\n if (typeof cleanup.unsubscribe === 'function') cleanup = function () { subscription.unsubscribe(); };\n else aFunction(cleanup);\n this._c = cleanup;\n }\n } catch (e) {\n observer.error(e);\n return;\n } if (subscriptionClosed(this)) cleanupSubscription(this);\n};\n\nSubscription.prototype = redefineAll({}, {\n unsubscribe: function unsubscribe() { closeSubscription(this); }\n});\n\nvar SubscriptionObserver = function (subscription) {\n this._s = subscription;\n};\n\nSubscriptionObserver.prototype = redefineAll({}, {\n next: function next(value) {\n var subscription = this._s;\n if (!subscriptionClosed(subscription)) {\n var observer = subscription._o;\n try {\n var m = getMethod(observer.next);\n if (m) return m.call(observer, value);\n } catch (e) {\n try {\n closeSubscription(subscription);\n } finally {\n throw e;\n }\n }\n }\n },\n error: function error(value) {\n var subscription = this._s;\n if (subscriptionClosed(subscription)) throw value;\n var observer = subscription._o;\n subscription._o = undefined;\n try {\n var m = getMethod(observer.error);\n if (!m) throw value;\n value = m.call(observer, value);\n } catch (e) {\n try {\n cleanupSubscription(subscription);\n } finally {\n throw e;\n }\n } cleanupSubscription(subscription);\n return value;\n },\n complete: function complete(value) {\n var subscription = this._s;\n if (!subscriptionClosed(subscription)) {\n var observer = subscription._o;\n subscription._o = undefined;\n try {\n var m = getMethod(observer.complete);\n value = m ? m.call(observer, value) : undefined;\n } catch (e) {\n try {\n cleanupSubscription(subscription);\n } finally {\n throw e;\n }\n } cleanupSubscription(subscription);\n return value;\n }\n }\n});\n\nvar $Observable = function Observable(subscriber) {\n anInstance(this, $Observable, 'Observable', '_f')._f = aFunction(subscriber);\n};\n\nredefineAll($Observable.prototype, {\n subscribe: function subscribe(observer) {\n return new Subscription(observer, this._f);\n },\n forEach: function forEach(fn) {\n var that = this;\n return new (core.Promise || global.Promise)(function (resolve, reject) {\n aFunction(fn);\n var subscription = that.subscribe({\n next: function (value) {\n try {\n return fn(value);\n } catch (e) {\n reject(e);\n subscription.unsubscribe();\n }\n },\n error: reject,\n complete: resolve\n });\n });\n }\n});\n\nredefineAll($Observable, {\n from: function from(x) {\n var C = typeof this === 'function' ? this : $Observable;\n var method = getMethod(anObject(x)[OBSERVABLE]);\n if (method) {\n var observable = anObject(method.call(x));\n return observable.constructor === C ? observable : new C(function (observer) {\n return observable.subscribe(observer);\n });\n }\n return new C(function (observer) {\n var done = false;\n microtask(function () {\n if (!done) {\n try {\n if (forOf(x, false, function (it) {\n observer.next(it);\n if (done) return RETURN;\n }) === RETURN) return;\n } catch (e) {\n if (done) throw e;\n observer.error(e);\n return;\n } observer.complete();\n }\n });\n return function () { done = true; };\n });\n },\n of: function of() {\n for (var i = 0, l = arguments.length, items = new Array(l); i < l;) items[i] = arguments[i++];\n return new (typeof this === 'function' ? this : $Observable)(function (observer) {\n var done = false;\n microtask(function () {\n if (!done) {\n for (var j = 0; j < items.length; ++j) {\n observer.next(items[j]);\n if (done) return;\n } observer.complete();\n }\n });\n return function () { done = true; };\n });\n }\n});\n\nhide($Observable.prototype, OBSERVABLE, function () { return this; });\n\n$export($export.G, { Observable: $Observable });\n\n__webpack_require__(38)('Observable');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JzZXJ2YWJsZS5qcz8zN2I1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxhQUFhLG1CQUFPLENBQUMsQ0FBVztBQUNoQyxXQUFXLG1CQUFPLENBQUMsRUFBUztBQUM1QixnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFjO0FBQ3RDLGlCQUFpQixtQkFBTyxDQUFDLENBQVE7QUFDakMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2QyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxpQkFBaUIsbUJBQU8sQ0FBQyxFQUFnQjtBQUN6QyxrQkFBa0IsbUJBQU8sQ0FBQyxFQUFpQjtBQUMzQyxXQUFXLG1CQUFPLENBQUMsRUFBUztBQUM1QixZQUFZLG1CQUFPLENBQUMsRUFBVztBQUMvQjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0RUFBNEUsNEJBQTRCO0FBQ3hHO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBLHVDQUF1QztBQUN2Qyx1Q0FBdUMseUJBQXlCO0FBQ2hFLENBQUM7O0FBRUQ7QUFDQTtBQUNBOztBQUVBLCtDQUErQztBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYixXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0EsT0FBTztBQUNQLDBCQUEwQixhQUFhO0FBQ3ZDLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQSwrREFBK0QsT0FBTztBQUN0RTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QixrQkFBa0I7QUFDM0M7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBLE9BQU87QUFDUCwwQkFBMEIsYUFBYTtBQUN2QyxLQUFLO0FBQ0w7QUFDQSxDQUFDOztBQUVELHFEQUFxRCxhQUFhLEVBQUU7O0FBRXBFLG9CQUFvQiwwQkFBMEI7O0FBRTlDLG1CQUFPLENBQUMsRUFBZ0IiLCJmaWxlIjoiMzI1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3plbnBhcnNpbmcvZXMtb2JzZXJ2YWJsZVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIG1pY3JvdGFzayA9IHJlcXVpcmUoJy4vX21pY3JvdGFzaycpKCk7XG52YXIgT0JTRVJWQUJMRSA9IHJlcXVpcmUoJy4vX3drcycpKCdvYnNlcnZhYmxlJyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG52YXIgcmVkZWZpbmVBbGwgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIGZvck9mID0gcmVxdWlyZSgnLi9fZm9yLW9mJyk7XG52YXIgUkVUVVJOID0gZm9yT2YuUkVUVVJOO1xuXG52YXIgZ2V0TWV0aG9kID0gZnVuY3Rpb24gKGZuKSB7XG4gIHJldHVybiBmbiA9PSBudWxsID8gdW5kZWZpbmVkIDogYUZ1bmN0aW9uKGZuKTtcbn07XG5cbnZhciBjbGVhbnVwU3Vic2NyaXB0aW9uID0gZnVuY3Rpb24gKHN1YnNjcmlwdGlvbikge1xuICB2YXIgY2xlYW51cCA9IHN1YnNjcmlwdGlvbi5fYztcbiAgaWYgKGNsZWFudXApIHtcbiAgICBzdWJzY3JpcHRpb24uX2MgPSB1bmRlZmluZWQ7XG4gICAgY2xlYW51cCgpO1xuICB9XG59O1xuXG52YXIgc3Vic2NyaXB0aW9uQ2xvc2VkID0gZnVuY3Rpb24gKHN1YnNjcmlwdGlvbikge1xuICByZXR1cm4gc3Vic2NyaXB0aW9uLl9vID09PSB1bmRlZmluZWQ7XG59O1xuXG52YXIgY2xvc2VTdWJzY3JpcHRpb24gPSBmdW5jdGlvbiAoc3Vic2NyaXB0aW9uKSB7XG4gIGlmICghc3Vic2NyaXB0aW9uQ2xvc2VkKHN1YnNjcmlwdGlvbikpIHtcbiAgICBzdWJzY3JpcHRpb24uX28gPSB1bmRlZmluZWQ7XG4gICAgY2xlYW51cFN1YnNjcmlwdGlvbihzdWJzY3JpcHRpb24pO1xuICB9XG59O1xuXG52YXIgU3Vic2NyaXB0aW9uID0gZnVuY3Rpb24gKG9ic2VydmVyLCBzdWJzY3JpYmVyKSB7XG4gIGFuT2JqZWN0KG9ic2VydmVyKTtcbiAgdGhpcy5fYyA9IHVuZGVmaW5lZDtcbiAgdGhpcy5fbyA9IG9ic2VydmVyO1xuICBvYnNlcnZlciA9IG5ldyBTdWJzY3JpcHRpb25PYnNlcnZlcih0aGlzKTtcbiAgdHJ5IHtcbiAgICB2YXIgY2xlYW51cCA9IHN1YnNjcmliZXIob2JzZXJ2ZXIpO1xuICAgIHZhciBzdWJzY3JpcHRpb24gPSBjbGVhbnVwO1xuICAgIGlmIChjbGVhbnVwICE9IG51bGwpIHtcbiAgICAgIGlmICh0eXBlb2YgY2xlYW51cC51bnN1YnNjcmliZSA9PT0gJ2Z1bmN0aW9uJykgY2xlYW51cCA9IGZ1bmN0aW9uICgpIHsgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7IH07XG4gICAgICBlbHNlIGFGdW5jdGlvbihjbGVhbnVwKTtcbiAgICAgIHRoaXMuX2MgPSBjbGVhbnVwO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIG9ic2VydmVyLmVycm9yKGUpO1xuICAgIHJldHVybjtcbiAgfSBpZiAoc3Vic2NyaXB0aW9uQ2xvc2VkKHRoaXMpKSBjbGVhbnVwU3Vic2NyaXB0aW9uKHRoaXMpO1xufTtcblxuU3Vic2NyaXB0aW9uLnByb3RvdHlwZSA9IHJlZGVmaW5lQWxsKHt9LCB7XG4gIHVuc3Vic2NyaWJlOiBmdW5jdGlvbiB1bnN1YnNjcmliZSgpIHsgY2xvc2VTdWJzY3JpcHRpb24odGhpcyk7IH1cbn0pO1xuXG52YXIgU3Vic2NyaXB0aW9uT2JzZXJ2ZXIgPSBmdW5jdGlvbiAoc3Vic2NyaXB0aW9uKSB7XG4gIHRoaXMuX3MgPSBzdWJzY3JpcHRpb247XG59O1xuXG5TdWJzY3JpcHRpb25PYnNlcnZlci5wcm90b3R5cGUgPSByZWRlZmluZUFsbCh7fSwge1xuICBuZXh0OiBmdW5jdGlvbiBuZXh0KHZhbHVlKSB7XG4gICAgdmFyIHN1YnNjcmlwdGlvbiA9IHRoaXMuX3M7XG4gICAgaWYgKCFzdWJzY3JpcHRpb25DbG9zZWQoc3Vic2NyaXB0aW9uKSkge1xuICAgICAgdmFyIG9ic2VydmVyID0gc3Vic2NyaXB0aW9uLl9vO1xuICAgICAgdHJ5IHtcbiAgICAgICAgdmFyIG0gPSBnZXRNZXRob2Qob2JzZXJ2ZXIubmV4dCk7XG4gICAgICAgIGlmIChtKSByZXR1cm4gbS5jYWxsKG9ic2VydmVyLCB2YWx1ZSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY2xvc2VTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LFxuICBlcnJvcjogZnVuY3Rpb24gZXJyb3IodmFsdWUpIHtcbiAgICB2YXIgc3Vic2NyaXB0aW9uID0gdGhpcy5fcztcbiAgICBpZiAoc3Vic2NyaXB0aW9uQ2xvc2VkKHN1YnNjcmlwdGlvbikpIHRocm93IHZhbHVlO1xuICAgIHZhciBvYnNlcnZlciA9IHN1YnNjcmlwdGlvbi5fbztcbiAgICBzdWJzY3JpcHRpb24uX28gPSB1bmRlZmluZWQ7XG4gICAgdHJ5IHtcbiAgICAgIHZhciBtID0gZ2V0TWV0aG9kKG9ic2VydmVyLmVycm9yKTtcbiAgICAgIGlmICghbSkgdGhyb3cgdmFsdWU7XG4gICAgICB2YWx1ZSA9IG0uY2FsbChvYnNlcnZlciwgdmFsdWUpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNsZWFudXBTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgfSBjbGVhbnVwU3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvbik7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9LFxuICBjb21wbGV0ZTogZnVuY3Rpb24gY29tcGxldGUodmFsdWUpIHtcbiAgICB2YXIgc3Vic2NyaXB0aW9uID0gdGhpcy5fcztcbiAgICBpZiAoIXN1YnNjcmlwdGlvbkNsb3NlZChzdWJzY3JpcHRpb24pKSB7XG4gICAgICB2YXIgb2JzZXJ2ZXIgPSBzdWJzY3JpcHRpb24uX287XG4gICAgICBzdWJzY3JpcHRpb24uX28gPSB1bmRlZmluZWQ7XG4gICAgICB0cnkge1xuICAgICAgICB2YXIgbSA9IGdldE1ldGhvZChvYnNlcnZlci5jb21wbGV0ZSk7XG4gICAgICAgIHZhbHVlID0gbSA/IG0uY2FsbChvYnNlcnZlciwgdmFsdWUpIDogdW5kZWZpbmVkO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNsZWFudXBTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICB9IGNsZWFudXBTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKTtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gIH1cbn0pO1xuXG52YXIgJE9ic2VydmFibGUgPSBmdW5jdGlvbiBPYnNlcnZhYmxlKHN1YnNjcmliZXIpIHtcbiAgYW5JbnN0YW5jZSh0aGlzLCAkT2JzZXJ2YWJsZSwgJ09ic2VydmFibGUnLCAnX2YnKS5fZiA9IGFGdW5jdGlvbihzdWJzY3JpYmVyKTtcbn07XG5cbnJlZGVmaW5lQWxsKCRPYnNlcnZhYmxlLnByb3RvdHlwZSwge1xuICBzdWJzY3JpYmU6IGZ1bmN0aW9uIHN1YnNjcmliZShvYnNlcnZlcikge1xuICAgIHJldHVybiBuZXcgU3Vic2NyaXB0aW9uKG9ic2VydmVyLCB0aGlzLl9mKTtcbiAgfSxcbiAgZm9yRWFjaDogZnVuY3Rpb24gZm9yRWFjaChmbikge1xuICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICByZXR1cm4gbmV3IChjb3JlLlByb21pc2UgfHwgZ2xvYmFsLlByb21pc2UpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIGFGdW5jdGlvbihmbik7XG4gICAgICB2YXIgc3Vic2NyaXB0aW9uID0gdGhhdC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIGZuKHZhbHVlKTtcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgICBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiByZWplY3QsXG4gICAgICAgIGNvbXBsZXRlOiByZXNvbHZlXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxufSk7XG5cbnJlZGVmaW5lQWxsKCRPYnNlcnZhYmxlLCB7XG4gIGZyb206IGZ1bmN0aW9uIGZyb20oeCkge1xuICAgIHZhciBDID0gdHlwZW9mIHRoaXMgPT09ICdmdW5jdGlvbicgPyB0aGlzIDogJE9ic2VydmFibGU7XG4gICAgdmFyIG1ldGhvZCA9IGdldE1ldGhvZChhbk9iamVjdCh4KVtPQlNFUlZBQkxFXSk7XG4gICAgaWYgKG1ldGhvZCkge1xuICAgICAgdmFyIG9ic2VydmFibGUgPSBhbk9iamVjdChtZXRob2QuY2FsbCh4KSk7XG4gICAgICByZXR1cm4gb2JzZXJ2YWJsZS5jb25zdHJ1Y3RvciA9PT0gQyA/IG9ic2VydmFibGUgOiBuZXcgQyhmdW5jdGlvbiAob2JzZXJ2ZXIpIHtcbiAgICAgICAgcmV0dXJuIG9ic2VydmFibGUuc3Vic2NyaWJlKG9ic2VydmVyKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IEMoZnVuY3Rpb24gKG9ic2VydmVyKSB7XG4gICAgICB2YXIgZG9uZSA9IGZhbHNlO1xuICAgICAgbWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCFkb25lKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChmb3JPZih4LCBmYWxzZSwgZnVuY3Rpb24gKGl0KSB7XG4gICAgICAgICAgICAgIG9ic2VydmVyLm5leHQoaXQpO1xuICAgICAgICAgICAgICBpZiAoZG9uZSkgcmV0dXJuIFJFVFVSTjtcbiAgICAgICAgICAgIH0pID09PSBSRVRVUk4pIHJldHVybjtcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBpZiAoZG9uZSkgdGhyb3cgZTtcbiAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKGUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH0gb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyBkb25lID0gdHJ1ZTsgfTtcbiAgICB9KTtcbiAgfSxcbiAgb2Y6IGZ1bmN0aW9uIG9mKCkge1xuICAgIGZvciAodmFyIGkgPSAwLCBsID0gYXJndW1lbnRzLmxlbmd0aCwgaXRlbXMgPSBuZXcgQXJyYXkobCk7IGkgPCBsOykgaXRlbXNbaV0gPSBhcmd1bWVudHNbaSsrXTtcbiAgICByZXR1cm4gbmV3ICh0eXBlb2YgdGhpcyA9PT0gJ2Z1bmN0aW9uJyA/IHRoaXMgOiAkT2JzZXJ2YWJsZSkoZnVuY3Rpb24gKG9ic2VydmVyKSB7XG4gICAgICB2YXIgZG9uZSA9IGZhbHNlO1xuICAgICAgbWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCFkb25lKSB7XG4gICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBpdGVtcy5sZW5ndGg7ICsraikge1xuICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChpdGVtc1tqXSk7XG4gICAgICAgICAgICBpZiAoZG9uZSkgcmV0dXJuO1xuICAgICAgICAgIH0gb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyBkb25lID0gdHJ1ZTsgfTtcbiAgICB9KTtcbiAgfVxufSk7XG5cbmhpZGUoJE9ic2VydmFibGUucHJvdG90eXBlLCBPQlNFUlZBQkxFLCBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9KTtcblxuJGV4cG9ydCgkZXhwb3J0LkcsIHsgT2JzZXJ2YWJsZTogJE9ic2VydmFibGUgfSk7XG5cbnJlcXVpcmUoJy4vX3NldC1zcGVjaWVzJykoJ09ic2VydmFibGUnKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///325\n")},function(module,exports,__webpack_require__){eval("// ie9- setTimeout & setInterval additional parameters fix\nvar global = __webpack_require__(2);\nvar $export = __webpack_require__(0);\nvar userAgent = __webpack_require__(60);\nvar slice = [].slice;\nvar MSIE = /MSIE .\\./.test(userAgent); // <- dirty ie9- check\nvar wrap = function (set) {\n return function (fn, time /* , ...args */) {\n var boundArgs = arguments.length > 2;\n var args = boundArgs ? slice.call(arguments, 2) : false;\n return set(boundArgs ? function () {\n // eslint-disable-next-line no-new-func\n (typeof fn == 'function' ? fn : Function(fn)).apply(this, args);\n } : fn, time);\n };\n};\n$export($export.G + $export.B + $export.F * MSIE, {\n setTimeout: wrap(global.setTimeout),\n setInterval: wrap(global.setInterval)\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy93ZWIudGltZXJzLmpzPzQ3OTUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxhQUFhLG1CQUFPLENBQUMsQ0FBVztBQUNoQyxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDO0FBQ0Esc0NBQXNDO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjMyNi5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGllOS0gc2V0VGltZW91dCAmIHNldEludGVydmFsIGFkZGl0aW9uYWwgcGFyYW1ldGVycyBmaXhcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi9fdXNlci1hZ2VudCcpO1xudmFyIHNsaWNlID0gW10uc2xpY2U7XG52YXIgTVNJRSA9IC9NU0lFIC5cXC4vLnRlc3QodXNlckFnZW50KTsgLy8gPC0gZGlydHkgaWU5LSBjaGVja1xudmFyIHdyYXAgPSBmdW5jdGlvbiAoc2V0KSB7XG4gIHJldHVybiBmdW5jdGlvbiAoZm4sIHRpbWUgLyogLCAuLi5hcmdzICovKSB7XG4gICAgdmFyIGJvdW5kQXJncyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyO1xuICAgIHZhciBhcmdzID0gYm91bmRBcmdzID8gc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpIDogZmFsc2U7XG4gICAgcmV0dXJuIHNldChib3VuZEFyZ3MgPyBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmNcbiAgICAgICh0eXBlb2YgZm4gPT0gJ2Z1bmN0aW9uJyA/IGZuIDogRnVuY3Rpb24oZm4pKS5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9IDogZm4sIHRpbWUpO1xuICB9O1xufTtcbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5CICsgJGV4cG9ydC5GICogTVNJRSwge1xuICBzZXRUaW1lb3V0OiB3cmFwKGdsb2JhbC5zZXRUaW1lb3V0KSxcbiAgc2V0SW50ZXJ2YWw6IHdyYXAoZ2xvYmFsLnNldEludGVydmFsKVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///326\n")},function(module,exports,__webpack_require__){eval("var $export = __webpack_require__(0);\nvar $task = __webpack_require__(89);\n$export($export.G + $export.B, {\n setImmediate: $task.set,\n clearImmediate: $task.clear\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy93ZWIuaW1tZWRpYXRlLmpzPzEzMGYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsWUFBWSxtQkFBTyxDQUFDLEVBQVM7QUFDN0I7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIzMjcuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICR0YXNrID0gcmVxdWlyZSgnLi9fdGFzaycpO1xuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LkIsIHtcbiAgc2V0SW1tZWRpYXRlOiAkdGFzay5zZXQsXG4gIGNsZWFySW1tZWRpYXRlOiAkdGFzay5jbGVhclxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///327\n")},function(module,exports,__webpack_require__){eval("var $iterators = __webpack_require__(86);\nvar getKeys = __webpack_require__(34);\nvar redefine = __webpack_require__(12);\nvar global = __webpack_require__(2);\nvar hide = __webpack_require__(11);\nvar Iterators = __webpack_require__(46);\nvar wks = __webpack_require__(5);\nvar ITERATOR = wks('iterator');\nvar TO_STRING_TAG = wks('toStringTag');\nvar ArrayValues = Iterators.Array;\n\nvar DOMIterables = {\n CSSRuleList: true, // TODO: Not spec compliant, should be false.\n CSSStyleDeclaration: false,\n CSSValueList: false,\n ClientRectList: false,\n DOMRectList: false,\n DOMStringList: false,\n DOMTokenList: true,\n DataTransferItemList: false,\n FileList: false,\n HTMLAllCollection: false,\n HTMLCollection: false,\n HTMLFormElement: false,\n HTMLSelectElement: false,\n MediaList: true, // TODO: Not spec compliant, should be false.\n MimeTypeArray: false,\n NamedNodeMap: false,\n NodeList: true,\n PaintRequestList: false,\n Plugin: false,\n PluginArray: false,\n SVGLengthList: false,\n SVGNumberList: false,\n SVGPathSegList: false,\n SVGPointList: false,\n SVGStringList: false,\n SVGTransformList: false,\n SourceBufferList: false,\n StyleSheetList: true, // TODO: Not spec compliant, should be false.\n TextTrackCueList: false,\n TextTrackList: false,\n TouchList: false\n};\n\nfor (var collections = getKeys(DOMIterables), i = 0; i < collections.length; i++) {\n var NAME = collections[i];\n var explicit = DOMIterables[NAME];\n var Collection = global[NAME];\n var proto = Collection && Collection.prototype;\n var key;\n if (proto) {\n if (!proto[ITERATOR]) hide(proto, ITERATOR, ArrayValues);\n if (!proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n Iterators[NAME] = ArrayValues;\n if (explicit) for (key in $iterators) if (!proto[key]) redefine(proto, key, $iterators[key], true);\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy93ZWIuZG9tLml0ZXJhYmxlLmpzP2FjNmEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsaUJBQWlCLG1CQUFPLENBQUMsRUFBc0I7QUFDL0MsY0FBYyxtQkFBTyxDQUFDLEVBQWdCO0FBQ3RDLGVBQWUsbUJBQU8sQ0FBQyxFQUFhO0FBQ3BDLGFBQWEsbUJBQU8sQ0FBQyxDQUFXO0FBQ2hDLFdBQVcsbUJBQU8sQ0FBQyxFQUFTO0FBQzVCLGdCQUFnQixtQkFBTyxDQUFDLEVBQWM7QUFDdEMsVUFBVSxtQkFBTyxDQUFDLENBQVE7QUFDMUI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxvREFBb0Qsd0JBQXdCO0FBQzVFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIzMjguanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgJGl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vZXM2LmFycmF5Lml0ZXJhdG9yJyk7XG52YXIgZ2V0S2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJyk7XG52YXIgd2tzID0gcmVxdWlyZSgnLi9fd2tzJyk7XG52YXIgSVRFUkFUT1IgPSB3a3MoJ2l0ZXJhdG9yJyk7XG52YXIgVE9fU1RSSU5HX1RBRyA9IHdrcygndG9TdHJpbmdUYWcnKTtcbnZhciBBcnJheVZhbHVlcyA9IEl0ZXJhdG9ycy5BcnJheTtcblxudmFyIERPTUl0ZXJhYmxlcyA9IHtcbiAgQ1NTUnVsZUxpc3Q6IHRydWUsIC8vIFRPRE86IE5vdCBzcGVjIGNvbXBsaWFudCwgc2hvdWxkIGJlIGZhbHNlLlxuICBDU1NTdHlsZURlY2xhcmF0aW9uOiBmYWxzZSxcbiAgQ1NTVmFsdWVMaXN0OiBmYWxzZSxcbiAgQ2xpZW50UmVjdExpc3Q6IGZhbHNlLFxuICBET01SZWN0TGlzdDogZmFsc2UsXG4gIERPTVN0cmluZ0xpc3Q6IGZhbHNlLFxuICBET01Ub2tlbkxpc3Q6IHRydWUsXG4gIERhdGFUcmFuc2Zlckl0ZW1MaXN0OiBmYWxzZSxcbiAgRmlsZUxpc3Q6IGZhbHNlLFxuICBIVE1MQWxsQ29sbGVjdGlvbjogZmFsc2UsXG4gIEhUTUxDb2xsZWN0aW9uOiBmYWxzZSxcbiAgSFRNTEZvcm1FbGVtZW50OiBmYWxzZSxcbiAgSFRNTFNlbGVjdEVsZW1lbnQ6IGZhbHNlLFxuICBNZWRpYUxpc3Q6IHRydWUsIC8vIFRPRE86IE5vdCBzcGVjIGNvbXBsaWFudCwgc2hvdWxkIGJlIGZhbHNlLlxuICBNaW1lVHlwZUFycmF5OiBmYWxzZSxcbiAgTmFtZWROb2RlTWFwOiBmYWxzZSxcbiAgTm9kZUxpc3Q6IHRydWUsXG4gIFBhaW50UmVxdWVzdExpc3Q6IGZhbHNlLFxuICBQbHVnaW46IGZhbHNlLFxuICBQbHVnaW5BcnJheTogZmFsc2UsXG4gIFNWR0xlbmd0aExpc3Q6IGZhbHNlLFxuICBTVkdOdW1iZXJMaXN0OiBmYWxzZSxcbiAgU1ZHUGF0aFNlZ0xpc3Q6IGZhbHNlLFxuICBTVkdQb2ludExpc3Q6IGZhbHNlLFxuICBTVkdTdHJpbmdMaXN0OiBmYWxzZSxcbiAgU1ZHVHJhbnNmb3JtTGlzdDogZmFsc2UsXG4gIFNvdXJjZUJ1ZmZlckxpc3Q6IGZhbHNlLFxuICBTdHlsZVNoZWV0TGlzdDogdHJ1ZSwgLy8gVE9ETzogTm90IHNwZWMgY29tcGxpYW50LCBzaG91bGQgYmUgZmFsc2UuXG4gIFRleHRUcmFja0N1ZUxpc3Q6IGZhbHNlLFxuICBUZXh0VHJhY2tMaXN0OiBmYWxzZSxcbiAgVG91Y2hMaXN0OiBmYWxzZVxufTtcblxuZm9yICh2YXIgY29sbGVjdGlvbnMgPSBnZXRLZXlzKERPTUl0ZXJhYmxlcyksIGkgPSAwOyBpIDwgY29sbGVjdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgdmFyIE5BTUUgPSBjb2xsZWN0aW9uc1tpXTtcbiAgdmFyIGV4cGxpY2l0ID0gRE9NSXRlcmFibGVzW05BTUVdO1xuICB2YXIgQ29sbGVjdGlvbiA9IGdsb2JhbFtOQU1FXTtcbiAgdmFyIHByb3RvID0gQ29sbGVjdGlvbiAmJiBDb2xsZWN0aW9uLnByb3RvdHlwZTtcbiAgdmFyIGtleTtcbiAgaWYgKHByb3RvKSB7XG4gICAgaWYgKCFwcm90b1tJVEVSQVRPUl0pIGhpZGUocHJvdG8sIElURVJBVE9SLCBBcnJheVZhbHVlcyk7XG4gICAgaWYgKCFwcm90b1tUT19TVFJJTkdfVEFHXSkgaGlkZShwcm90bywgVE9fU1RSSU5HX1RBRywgTkFNRSk7XG4gICAgSXRlcmF0b3JzW05BTUVdID0gQXJyYXlWYWx1ZXM7XG4gICAgaWYgKGV4cGxpY2l0KSBmb3IgKGtleSBpbiAkaXRlcmF0b3JzKSBpZiAoIXByb3RvW2tleV0pIHJlZGVmaW5lKHByb3RvLCBrZXksICRpdGVyYXRvcnNba2V5XSwgdHJ1ZSk7XG4gIH1cbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///328\n")},function(module,exports,__webpack_require__){eval('/* WEBPACK VAR INJECTION */(function(global) {/**\n * Copyright (c) 2014, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * https://raw.github.com/facebook/regenerator/master/LICENSE file. An\n * additional grant of patent rights can be found in the PATENTS file in\n * the same directory.\n */\n\n!(function(global) {\n "use strict";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === "function" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || "@@iterator";\n var asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator";\n var toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag";\n\n var inModule = typeof module === "object";\n var runtime = global.regeneratorRuntime;\n if (runtime) {\n if (inModule) {\n // If regeneratorRuntime is defined globally and we\'re in a module,\n // make the exports object identical to regeneratorRuntime.\n module.exports = runtime;\n }\n // Don\'t bother evaluating the rest of this file if the runtime was\n // already defined globally.\n return;\n }\n\n // Define the runtime globally (as expected by generated code) as either\n // module.exports (if we\'re in a module) or a new, empty object.\n runtime = global.regeneratorRuntime = inModule ? module.exports : {};\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n runtime.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there\'s no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don\'t have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: "normal", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: "throw", arg: err };\n }\n }\n\n var GenStateSuspendedStart = "suspendedStart";\n var GenStateSuspendedYield = "suspendedYield";\n var GenStateExecuting = "executing";\n var GenStateCompleted = "completed";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don\'t natively support it.\n var IteratorPrototype = {};\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunctionPrototype[toStringTagSymbol] =\n GeneratorFunction.displayName = "GeneratorFunction";\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n ["next", "throw", "return"].forEach(function(method) {\n prototype[method] = function(arg) {\n return this._invoke(method, arg);\n };\n });\n }\n\n runtime.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === "function" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === "GeneratorFunction"\n : false;\n };\n\n runtime.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n if (!(toStringTagSymbol in genFun)) {\n genFun[toStringTagSymbol] = "GeneratorFunction";\n }\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, "__await")` to determine if the yielded value is\n // meant to be awaited.\n runtime.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === "throw") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === "object" &&\n hasOwn.call(value, "__await")) {\n return Promise.resolve(value.__await).then(function(value) {\n invoke("next", value, resolve, reject);\n }, function(err) {\n invoke("throw", err, resolve, reject);\n });\n }\n\n return Promise.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration. If the Promise is rejected, however, the\n // result for this iteration will be rejected with the same\n // reason. Note that rejections of yielded Promises are not\n // thrown back into the generator function, as is the case\n // when an awaited Promise is rejected. This difference in\n // behavior between yield and await is important, because it\n // allows the consumer to decide what to do with the yielded\n // rejection (swallow it and continue, manually .throw it back\n // into the generator, abandon iteration, whatever). With\n // await, by contrast, there is no opportunity to examine the\n // rejection reason outside the generator function, so the\n // only option is to throw it from the await expression, and\n // let the generator function handle the exception.\n result.value = unwrapped;\n resolve(result);\n }, reject);\n }\n }\n\n if (typeof global.process === "object" && global.process.domain) {\n invoke = global.process.domain.bind(invoke);\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new Promise(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n runtime.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n runtime.async = function(innerFn, outerFn, self, tryLocsList) {\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList)\n );\n\n return runtime.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error("Generator is already running");\n }\n\n if (state === GenStateCompleted) {\n if (method === "throw") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === "next") {\n // Setting context._sent for legacy support of Babel\'s\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === "throw") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === "return") {\n context.abrupt("return", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === "normal") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === "throw") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = "throw";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === "throw") {\n if (delegate.iterator.return) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = "return";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === "throw") {\n // If maybeInvokeDelegate(context) changed context.method from\n // "return" to "throw", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = "throw";\n context.arg = new TypeError(\n "The iterator does not provide a \'throw\' method");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === "throw") {\n context.method = "throw";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = "throw";\n context.arg = new TypeError("iterator result is not an object");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was "throw" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was "next", forget context.arg since it has been\n // "consumed" by the delegate iterator. If context.method was\n // "return", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== "return") {\n context.method = "next";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n Gp[toStringTagSymbol] = "Generator";\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers\' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn\'t happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return "[object Generator]";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = "normal";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: "root" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n runtime.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === "function") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n runtime.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel\'s\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = "next";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === "t" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === "throw") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = "throw";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = "next";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === "root") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle("end");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, "catchLoc");\n var hasFinally = hasOwn.call(entry, "finallyLoc");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error("try statement without catch or finally");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, "finallyLoc") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === "break" ||\n type === "continue") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = "next";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === "throw") {\n throw record.arg;\n }\n\n if (record.type === "break" ||\n record.type === "continue") {\n this.next = record.arg;\n } else if (record.type === "return") {\n this.rval = this.arg = record.arg;\n this.method = "return";\n this.next = "end";\n } else if (record.type === "normal" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n "catch": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === "throw") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error("illegal catch attempt");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === "next") {\n // Deliberately forget the last sent value so that we don\'t\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n})(\n // Among the various tricks for obtaining a reference to the global\n // object, this seems to be the most reliable technique that does not\n // use indirect eval (which violates Content Security Policy).\n typeof global === "object" ? global :\n typeof window === "object" ? window :\n typeof self === "object" ? self : this\n);\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(93)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9yZWdlbmVyYXRvci1ydW50aW1lL3J1bnRpbWUuanM/ZjNhMiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZCxLQUFLO0FBQ0wsY0FBYztBQUNkO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseURBQXlEO0FBQ3pEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBLFdBQVc7QUFDWDs7QUFFQTtBQUNBO0FBQ0Esd0NBQXdDLFdBQVc7QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDJCQUEyQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLFNBQVM7QUFDVDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esb0NBQW9DLGNBQWM7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlDQUFpQyxrQkFBa0I7QUFDbkQ7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGlCQUFpQjs7QUFFakI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLGlCQUFpQjtBQUN6QztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFlBQVk7QUFDWjtBQUNBOztBQUVBO0FBQ0EsWUFBWTtBQUNaOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsOENBQThDLFFBQVE7QUFDdEQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBOztBQUVBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7O0FBRUEsV0FBVztBQUNYO0FBQ0E7QUFDQTs7QUFFQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0EsOENBQThDLFFBQVE7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQSw4Q0FBOEMsUUFBUTtBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQSw4Q0FBOEMsUUFBUTtBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIzMjkuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxNCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBodHRwczovL3Jhdy5naXRodWIuY29tL2ZhY2Vib29rL3JlZ2VuZXJhdG9yL21hc3Rlci9MSUNFTlNFIGZpbGUuIEFuXG4gKiBhZGRpdGlvbmFsIGdyYW50IG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW5cbiAqIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqL1xuXG4hKGZ1bmN0aW9uKGdsb2JhbCkge1xuICBcInVzZSBzdHJpY3RcIjtcblxuICB2YXIgT3AgPSBPYmplY3QucHJvdG90eXBlO1xuICB2YXIgaGFzT3duID0gT3AuaGFzT3duUHJvcGVydHk7XG4gIHZhciB1bmRlZmluZWQ7IC8vIE1vcmUgY29tcHJlc3NpYmxlIHRoYW4gdm9pZCAwLlxuICB2YXIgJFN5bWJvbCA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiA/IFN5bWJvbCA6IHt9O1xuICB2YXIgaXRlcmF0b3JTeW1ib2wgPSAkU3ltYm9sLml0ZXJhdG9yIHx8IFwiQEBpdGVyYXRvclwiO1xuICB2YXIgYXN5bmNJdGVyYXRvclN5bWJvbCA9ICRTeW1ib2wuYXN5bmNJdGVyYXRvciB8fCBcIkBAYXN5bmNJdGVyYXRvclwiO1xuICB2YXIgdG9TdHJpbmdUYWdTeW1ib2wgPSAkU3ltYm9sLnRvU3RyaW5nVGFnIHx8IFwiQEB0b1N0cmluZ1RhZ1wiO1xuXG4gIHZhciBpbk1vZHVsZSA9IHR5cGVvZiBtb2R1bGUgPT09IFwib2JqZWN0XCI7XG4gIHZhciBydW50aW1lID0gZ2xvYmFsLnJlZ2VuZXJhdG9yUnVudGltZTtcbiAgaWYgKHJ1bnRpbWUpIHtcbiAgICBpZiAoaW5Nb2R1bGUpIHtcbiAgICAgIC8vIElmIHJlZ2VuZXJhdG9yUnVudGltZSBpcyBkZWZpbmVkIGdsb2JhbGx5IGFuZCB3ZSdyZSBpbiBhIG1vZHVsZSxcbiAgICAgIC8vIG1ha2UgdGhlIGV4cG9ydHMgb2JqZWN0IGlkZW50aWNhbCB0byByZWdlbmVyYXRvclJ1bnRpbWUuXG4gICAgICBtb2R1bGUuZXhwb3J0cyA9IHJ1bnRpbWU7XG4gICAgfVxuICAgIC8vIERvbid0IGJvdGhlciBldmFsdWF0aW5nIHRoZSByZXN0IG9mIHRoaXMgZmlsZSBpZiB0aGUgcnVudGltZSB3YXNcbiAgICAvLyBhbHJlYWR5IGRlZmluZWQgZ2xvYmFsbHkuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gRGVmaW5lIHRoZSBydW50aW1lIGdsb2JhbGx5IChhcyBleHBlY3RlZCBieSBnZW5lcmF0ZWQgY29kZSkgYXMgZWl0aGVyXG4gIC8vIG1vZHVsZS5leHBvcnRzIChpZiB3ZSdyZSBpbiBhIG1vZHVsZSkgb3IgYSBuZXcsIGVtcHR5IG9iamVjdC5cbiAgcnVudGltZSA9IGdsb2JhbC5yZWdlbmVyYXRvclJ1bnRpbWUgPSBpbk1vZHVsZSA/IG1vZHVsZS5leHBvcnRzIDoge307XG5cbiAgZnVuY3Rpb24gd3JhcChpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdCkge1xuICAgIC8vIElmIG91dGVyRm4gcHJvdmlkZWQgYW5kIG91dGVyRm4ucHJvdG90eXBlIGlzIGEgR2VuZXJhdG9yLCB0aGVuIG91dGVyRm4ucHJvdG90eXBlIGluc3RhbmNlb2YgR2VuZXJhdG9yLlxuICAgIHZhciBwcm90b0dlbmVyYXRvciA9IG91dGVyRm4gJiYgb3V0ZXJGbi5wcm90b3R5cGUgaW5zdGFuY2VvZiBHZW5lcmF0b3IgPyBvdXRlckZuIDogR2VuZXJhdG9yO1xuICAgIHZhciBnZW5lcmF0b3IgPSBPYmplY3QuY3JlYXRlKHByb3RvR2VuZXJhdG9yLnByb3RvdHlwZSk7XG4gICAgdmFyIGNvbnRleHQgPSBuZXcgQ29udGV4dCh0cnlMb2NzTGlzdCB8fCBbXSk7XG5cbiAgICAvLyBUaGUgLl9pbnZva2UgbWV0aG9kIHVuaWZpZXMgdGhlIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgLm5leHQsXG4gICAgLy8gLnRocm93LCBhbmQgLnJldHVybiBtZXRob2RzLlxuICAgIGdlbmVyYXRvci5faW52b2tlID0gbWFrZUludm9rZU1ldGhvZChpbm5lckZuLCBzZWxmLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBnZW5lcmF0b3I7XG4gIH1cbiAgcnVudGltZS53cmFwID0gd3JhcDtcblxuICAvLyBUcnkvY2F0Y2ggaGVscGVyIHRvIG1pbmltaXplIGRlb3B0aW1pemF0aW9ucy4gUmV0dXJucyBhIGNvbXBsZXRpb25cbiAgLy8gcmVjb3JkIGxpa2UgY29udGV4dC50cnlFbnRyaWVzW2ldLmNvbXBsZXRpb24uIFRoaXMgaW50ZXJmYWNlIGNvdWxkXG4gIC8vIGhhdmUgYmVlbiAoYW5kIHdhcyBwcmV2aW91c2x5KSBkZXNpZ25lZCB0byB0YWtlIGEgY2xvc3VyZSB0byBiZVxuICAvLyBpbnZva2VkIHdpdGhvdXQgYXJndW1lbnRzLCBidXQgaW4gYWxsIHRoZSBjYXNlcyB3ZSBjYXJlIGFib3V0IHdlXG4gIC8vIGFscmVhZHkgaGF2ZSBhbiBleGlzdGluZyBtZXRob2Qgd2Ugd2FudCB0byBjYWxsLCBzbyB0aGVyZSdzIG5vIG5lZWRcbiAgLy8gdG8gY3JlYXRlIGEgbmV3IGZ1bmN0aW9uIG9iamVjdC4gV2UgY2FuIGV2ZW4gZ2V0IGF3YXkgd2l0aCBhc3N1bWluZ1xuICAvLyB0aGUgbWV0aG9kIHRha2VzIGV4YWN0bHkgb25lIGFyZ3VtZW50LCBzaW5jZSB0aGF0IGhhcHBlbnMgdG8gYmUgdHJ1ZVxuICAvLyBpbiBldmVyeSBjYXNlLCBzbyB3ZSBkb24ndCBoYXZlIHRvIHRvdWNoIHRoZSBhcmd1bWVudHMgb2JqZWN0LiBUaGVcbiAgLy8gb25seSBhZGRpdGlvbmFsIGFsbG9jYXRpb24gcmVxdWlyZWQgaXMgdGhlIGNvbXBsZXRpb24gcmVjb3JkLCB3aGljaFxuICAvLyBoYXMgYSBzdGFibGUgc2hhcGUgYW5kIHNvIGhvcGVmdWxseSBzaG91bGQgYmUgY2hlYXAgdG8gYWxsb2NhdGUuXG4gIGZ1bmN0aW9uIHRyeUNhdGNoKGZuLCBvYmosIGFyZykge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4geyB0eXBlOiBcIm5vcm1hbFwiLCBhcmc6IGZuLmNhbGwob2JqLCBhcmcpIH07XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICByZXR1cm4geyB0eXBlOiBcInRocm93XCIsIGFyZzogZXJyIH07XG4gICAgfVxuICB9XG5cbiAgdmFyIEdlblN0YXRlU3VzcGVuZGVkU3RhcnQgPSBcInN1c3BlbmRlZFN0YXJ0XCI7XG4gIHZhciBHZW5TdGF0ZVN1c3BlbmRlZFlpZWxkID0gXCJzdXNwZW5kZWRZaWVsZFwiO1xuICB2YXIgR2VuU3RhdGVFeGVjdXRpbmcgPSBcImV4ZWN1dGluZ1wiO1xuICB2YXIgR2VuU3RhdGVDb21wbGV0ZWQgPSBcImNvbXBsZXRlZFwiO1xuXG4gIC8vIFJldHVybmluZyB0aGlzIG9iamVjdCBmcm9tIHRoZSBpbm5lckZuIGhhcyB0aGUgc2FtZSBlZmZlY3QgYXNcbiAgLy8gYnJlYWtpbmcgb3V0IG9mIHRoZSBkaXNwYXRjaCBzd2l0Y2ggc3RhdGVtZW50LlxuICB2YXIgQ29udGludWVTZW50aW5lbCA9IHt9O1xuXG4gIC8vIER1bW15IGNvbnN0cnVjdG9yIGZ1bmN0aW9ucyB0aGF0IHdlIHVzZSBhcyB0aGUgLmNvbnN0cnVjdG9yIGFuZFxuICAvLyAuY29uc3RydWN0b3IucHJvdG90eXBlIHByb3BlcnRpZXMgZm9yIGZ1bmN0aW9ucyB0aGF0IHJldHVybiBHZW5lcmF0b3JcbiAgLy8gb2JqZWN0cy4gRm9yIGZ1bGwgc3BlYyBjb21wbGlhbmNlLCB5b3UgbWF5IHdpc2ggdG8gY29uZmlndXJlIHlvdXJcbiAgLy8gbWluaWZpZXIgbm90IHRvIG1hbmdsZSB0aGUgbmFtZXMgb2YgdGhlc2UgdHdvIGZ1bmN0aW9ucy5cbiAgZnVuY3Rpb24gR2VuZXJhdG9yKCkge31cbiAgZnVuY3Rpb24gR2VuZXJhdG9yRnVuY3Rpb24oKSB7fVxuICBmdW5jdGlvbiBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSgpIHt9XG5cbiAgLy8gVGhpcyBpcyBhIHBvbHlmaWxsIGZvciAlSXRlcmF0b3JQcm90b3R5cGUlIGZvciBlbnZpcm9ubWVudHMgdGhhdFxuICAvLyBkb24ndCBuYXRpdmVseSBzdXBwb3J0IGl0LlxuICB2YXIgSXRlcmF0b3JQcm90b3R5cGUgPSB7fTtcbiAgSXRlcmF0b3JQcm90b3R5cGVbaXRlcmF0b3JTeW1ib2xdID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIHZhciBnZXRQcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZjtcbiAgdmFyIE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlID0gZ2V0UHJvdG8gJiYgZ2V0UHJvdG8oZ2V0UHJvdG8odmFsdWVzKFtdKSkpO1xuICBpZiAoTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUgJiZcbiAgICAgIE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlICE9PSBPcCAmJlxuICAgICAgaGFzT3duLmNhbGwoTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUsIGl0ZXJhdG9yU3ltYm9sKSkge1xuICAgIC8vIFRoaXMgZW52aXJvbm1lbnQgaGFzIGEgbmF0aXZlICVJdGVyYXRvclByb3RvdHlwZSU7IHVzZSBpdCBpbnN0ZWFkXG4gICAgLy8gb2YgdGhlIHBvbHlmaWxsLlxuICAgIEl0ZXJhdG9yUHJvdG90eXBlID0gTmF0aXZlSXRlcmF0b3JQcm90b3R5cGU7XG4gIH1cblxuICB2YXIgR3AgPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZS5wcm90b3R5cGUgPVxuICAgIEdlbmVyYXRvci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEl0ZXJhdG9yUHJvdG90eXBlKTtcbiAgR2VuZXJhdG9yRnVuY3Rpb24ucHJvdG90eXBlID0gR3AuY29uc3RydWN0b3IgPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZTtcbiAgR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUuY29uc3RydWN0b3IgPSBHZW5lcmF0b3JGdW5jdGlvbjtcbiAgR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGVbdG9TdHJpbmdUYWdTeW1ib2xdID1cbiAgICBHZW5lcmF0b3JGdW5jdGlvbi5kaXNwbGF5TmFtZSA9IFwiR2VuZXJhdG9yRnVuY3Rpb25cIjtcblxuICAvLyBIZWxwZXIgZm9yIGRlZmluaW5nIHRoZSAubmV4dCwgLnRocm93LCBhbmQgLnJldHVybiBtZXRob2RzIG9mIHRoZVxuICAvLyBJdGVyYXRvciBpbnRlcmZhY2UgaW4gdGVybXMgb2YgYSBzaW5nbGUgLl9pbnZva2UgbWV0aG9kLlxuICBmdW5jdGlvbiBkZWZpbmVJdGVyYXRvck1ldGhvZHMocHJvdG90eXBlKSB7XG4gICAgW1wibmV4dFwiLCBcInRocm93XCIsIFwicmV0dXJuXCJdLmZvckVhY2goZnVuY3Rpb24obWV0aG9kKSB7XG4gICAgICBwcm90b3R5cGVbbWV0aG9kXSA9IGZ1bmN0aW9uKGFyZykge1xuICAgICAgICByZXR1cm4gdGhpcy5faW52b2tlKG1ldGhvZCwgYXJnKTtcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBydW50aW1lLmlzR2VuZXJhdG9yRnVuY3Rpb24gPSBmdW5jdGlvbihnZW5GdW4pIHtcbiAgICB2YXIgY3RvciA9IHR5cGVvZiBnZW5GdW4gPT09IFwiZnVuY3Rpb25cIiAmJiBnZW5GdW4uY29uc3RydWN0b3I7XG4gICAgcmV0dXJuIGN0b3JcbiAgICAgID8gY3RvciA9PT0gR2VuZXJhdG9yRnVuY3Rpb24gfHxcbiAgICAgICAgLy8gRm9yIHRoZSBuYXRpdmUgR2VuZXJhdG9yRnVuY3Rpb24gY29uc3RydWN0b3IsIHRoZSBiZXN0IHdlIGNhblxuICAgICAgICAvLyBkbyBpcyB0byBjaGVjayBpdHMgLm5hbWUgcHJvcGVydHkuXG4gICAgICAgIChjdG9yLmRpc3BsYXlOYW1lIHx8IGN0b3IubmFtZSkgPT09IFwiR2VuZXJhdG9yRnVuY3Rpb25cIlxuICAgICAgOiBmYWxzZTtcbiAgfTtcblxuICBydW50aW1lLm1hcmsgPSBmdW5jdGlvbihnZW5GdW4pIHtcbiAgICBpZiAoT2JqZWN0LnNldFByb3RvdHlwZU9mKSB7XG4gICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YoZ2VuRnVuLCBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGdlbkZ1bi5fX3Byb3RvX18gPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZTtcbiAgICAgIGlmICghKHRvU3RyaW5nVGFnU3ltYm9sIGluIGdlbkZ1bikpIHtcbiAgICAgICAgZ2VuRnVuW3RvU3RyaW5nVGFnU3ltYm9sXSA9IFwiR2VuZXJhdG9yRnVuY3Rpb25cIjtcbiAgICAgIH1cbiAgICB9XG4gICAgZ2VuRnVuLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoR3ApO1xuICAgIHJldHVybiBnZW5GdW47XG4gIH07XG5cbiAgLy8gV2l0aGluIHRoZSBib2R5IG9mIGFueSBhc3luYyBmdW5jdGlvbiwgYGF3YWl0IHhgIGlzIHRyYW5zZm9ybWVkIHRvXG4gIC8vIGB5aWVsZCByZWdlbmVyYXRvclJ1bnRpbWUuYXdyYXAoeClgLCBzbyB0aGF0IHRoZSBydW50aW1lIGNhbiB0ZXN0XG4gIC8vIGBoYXNPd24uY2FsbCh2YWx1ZSwgXCJfX2F3YWl0XCIpYCB0byBkZXRlcm1pbmUgaWYgdGhlIHlpZWxkZWQgdmFsdWUgaXNcbiAgLy8gbWVhbnQgdG8gYmUgYXdhaXRlZC5cbiAgcnVudGltZS5hd3JhcCA9IGZ1bmN0aW9uKGFyZykge1xuICAgIHJldHVybiB7IF9fYXdhaXQ6IGFyZyB9O1xuICB9O1xuXG4gIGZ1bmN0aW9uIEFzeW5jSXRlcmF0b3IoZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gaW52b2tlKG1ldGhvZCwgYXJnLCByZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChnZW5lcmF0b3JbbWV0aG9kXSwgZ2VuZXJhdG9yLCBhcmcpO1xuICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgcmVqZWN0KHJlY29yZC5hcmcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHJlY29yZC5hcmc7XG4gICAgICAgIHZhciB2YWx1ZSA9IHJlc3VsdC52YWx1ZTtcbiAgICAgICAgaWYgKHZhbHVlICYmXG4gICAgICAgICAgICB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgICAgIGhhc093bi5jYWxsKHZhbHVlLCBcIl9fYXdhaXRcIikpIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHZhbHVlLl9fYXdhaXQpLnRoZW4oZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgICAgIGludm9rZShcIm5leHRcIiwgdmFsdWUsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgfSwgZnVuY3Rpb24oZXJyKSB7XG4gICAgICAgICAgICBpbnZva2UoXCJ0aHJvd1wiLCBlcnIsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHZhbHVlKS50aGVuKGZ1bmN0aW9uKHVud3JhcHBlZCkge1xuICAgICAgICAgIC8vIFdoZW4gYSB5aWVsZGVkIFByb21pc2UgaXMgcmVzb2x2ZWQsIGl0cyBmaW5hbCB2YWx1ZSBiZWNvbWVzXG4gICAgICAgICAgLy8gdGhlIC52YWx1ZSBvZiB0aGUgUHJvbWlzZTx7dmFsdWUsZG9uZX0+IHJlc3VsdCBmb3IgdGhlXG4gICAgICAgICAgLy8gY3VycmVudCBpdGVyYXRpb24uIElmIHRoZSBQcm9taXNlIGlzIHJlamVjdGVkLCBob3dldmVyLCB0aGVcbiAgICAgICAgICAvLyByZXN1bHQgZm9yIHRoaXMgaXRlcmF0aW9uIHdpbGwgYmUgcmVqZWN0ZWQgd2l0aCB0aGUgc2FtZVxuICAgICAgICAgIC8vIHJlYXNvbi4gTm90ZSB0aGF0IHJlamVjdGlvbnMgb2YgeWllbGRlZCBQcm9taXNlcyBhcmUgbm90XG4gICAgICAgICAgLy8gdGhyb3duIGJhY2sgaW50byB0aGUgZ2VuZXJhdG9yIGZ1bmN0aW9uLCBhcyBpcyB0aGUgY2FzZVxuICAgICAgICAgIC8vIHdoZW4gYW4gYXdhaXRlZCBQcm9taXNlIGlzIHJlamVjdGVkLiBUaGlzIGRpZmZlcmVuY2UgaW5cbiAgICAgICAgICAvLyBiZWhhdmlvciBiZXR3ZWVuIHlpZWxkIGFuZCBhd2FpdCBpcyBpbXBvcnRhbnQsIGJlY2F1c2UgaXRcbiAgICAgICAgICAvLyBhbGxvd3MgdGhlIGNvbnN1bWVyIHRvIGRlY2lkZSB3aGF0IHRvIGRvIHdpdGggdGhlIHlpZWxkZWRcbiAgICAgICAgICAvLyByZWplY3Rpb24gKHN3YWxsb3cgaXQgYW5kIGNvbnRpbnVlLCBtYW51YWxseSAudGhyb3cgaXQgYmFja1xuICAgICAgICAgIC8vIGludG8gdGhlIGdlbmVyYXRvciwgYWJhbmRvbiBpdGVyYXRpb24sIHdoYXRldmVyKS4gV2l0aFxuICAgICAgICAgIC8vIGF3YWl0LCBieSBjb250cmFzdCwgdGhlcmUgaXMgbm8gb3Bwb3J0dW5pdHkgdG8gZXhhbWluZSB0aGVcbiAgICAgICAgICAvLyByZWplY3Rpb24gcmVhc29uIG91dHNpZGUgdGhlIGdlbmVyYXRvciBmdW5jdGlvbiwgc28gdGhlXG4gICAgICAgICAgLy8gb25seSBvcHRpb24gaXMgdG8gdGhyb3cgaXQgZnJvbSB0aGUgYXdhaXQgZXhwcmVzc2lvbiwgYW5kXG4gICAgICAgICAgLy8gbGV0IHRoZSBnZW5lcmF0b3IgZnVuY3Rpb24gaGFuZGxlIHRoZSBleGNlcHRpb24uXG4gICAgICAgICAgcmVzdWx0LnZhbHVlID0gdW53cmFwcGVkO1xuICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgfSwgcmVqZWN0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGdsb2JhbC5wcm9jZXNzID09PSBcIm9iamVjdFwiICYmIGdsb2JhbC5wcm9jZXNzLmRvbWFpbikge1xuICAgICAgaW52b2tlID0gZ2xvYmFsLnByb2Nlc3MuZG9tYWluLmJpbmQoaW52b2tlKTtcbiAgICB9XG5cbiAgICB2YXIgcHJldmlvdXNQcm9taXNlO1xuXG4gICAgZnVuY3Rpb24gZW5xdWV1ZShtZXRob2QsIGFyZykge1xuICAgICAgZnVuY3Rpb24gY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICBpbnZva2UobWV0aG9kLCBhcmcsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcHJldmlvdXNQcm9taXNlID1cbiAgICAgICAgLy8gSWYgZW5xdWV1ZSBoYXMgYmVlbiBjYWxsZWQgYmVmb3JlLCB0aGVuIHdlIHdhbnQgdG8gd2FpdCB1bnRpbFxuICAgICAgICAvLyBhbGwgcHJldmlvdXMgUHJvbWlzZXMgaGF2ZSBiZWVuIHJlc29sdmVkIGJlZm9yZSBjYWxsaW5nIGludm9rZSxcbiAgICAgICAgLy8gc28gdGhhdCByZXN1bHRzIGFyZSBhbHdheXMgZGVsaXZlcmVkIGluIHRoZSBjb3JyZWN0IG9yZGVyLiBJZlxuICAgICAgICAvLyBlbnF1ZXVlIGhhcyBub3QgYmVlbiBjYWxsZWQgYmVmb3JlLCB0aGVuIGl0IGlzIGltcG9ydGFudCB0b1xuICAgICAgICAvLyBjYWxsIGludm9rZSBpbW1lZGlhdGVseSwgd2l0aG91dCB3YWl0aW5nIG9uIGEgY2FsbGJhY2sgdG8gZmlyZSxcbiAgICAgICAgLy8gc28gdGhhdCB0aGUgYXN5bmMgZ2VuZXJhdG9yIGZ1bmN0aW9uIGhhcyB0aGUgb3Bwb3J0dW5pdHkgdG8gZG9cbiAgICAgICAgLy8gYW55IG5lY2Vzc2FyeSBzZXR1cCBpbiBhIHByZWRpY3RhYmxlIHdheS4gVGhpcyBwcmVkaWN0YWJpbGl0eVxuICAgICAgICAvLyBpcyB3aHkgdGhlIFByb21pc2UgY29uc3RydWN0b3Igc3luY2hyb25vdXNseSBpbnZva2VzIGl0c1xuICAgICAgICAvLyBleGVjdXRvciBjYWxsYmFjaywgYW5kIHdoeSBhc3luYyBmdW5jdGlvbnMgc3luY2hyb25vdXNseVxuICAgICAgICAvLyBleGVjdXRlIGNvZGUgYmVmb3JlIHRoZSBmaXJzdCBhd2FpdC4gU2luY2Ugd2UgaW1wbGVtZW50IHNpbXBsZVxuICAgICAgICAvLyBhc3luYyBmdW5jdGlvbnMgaW4gdGVybXMgb2YgYXN5bmMgZ2VuZXJhdG9ycywgaXQgaXMgZXNwZWNpYWxseVxuICAgICAgICAvLyBpbXBvcnRhbnQgdG8gZ2V0IHRoaXMgcmlnaHQsIGV2ZW4gdGhvdWdoIGl0IHJlcXVpcmVzIGNhcmUuXG4gICAgICAgIHByZXZpb3VzUHJvbWlzZSA/IHByZXZpb3VzUHJvbWlzZS50aGVuKFxuICAgICAgICAgIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnLFxuICAgICAgICAgIC8vIEF2b2lkIHByb3BhZ2F0aW5nIGZhaWx1cmVzIHRvIFByb21pc2VzIHJldHVybmVkIGJ5IGxhdGVyXG4gICAgICAgICAgLy8gaW52b2NhdGlvbnMgb2YgdGhlIGl0ZXJhdG9yLlxuICAgICAgICAgIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnXG4gICAgICAgICkgOiBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZygpO1xuICAgIH1cblxuICAgIC8vIERlZmluZSB0aGUgdW5pZmllZCBoZWxwZXIgbWV0aG9kIHRoYXQgaXMgdXNlZCB0byBpbXBsZW1lbnQgLm5leHQsXG4gICAgLy8gLnRocm93LCBhbmQgLnJldHVybiAoc2VlIGRlZmluZUl0ZXJhdG9yTWV0aG9kcykuXG4gICAgdGhpcy5faW52b2tlID0gZW5xdWV1ZTtcbiAgfVxuXG4gIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhBc3luY0l0ZXJhdG9yLnByb3RvdHlwZSk7XG4gIEFzeW5jSXRlcmF0b3IucHJvdG90eXBlW2FzeW5jSXRlcmF0b3JTeW1ib2xdID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICBydW50aW1lLkFzeW5jSXRlcmF0b3IgPSBBc3luY0l0ZXJhdG9yO1xuXG4gIC8vIE5vdGUgdGhhdCBzaW1wbGUgYXN5bmMgZnVuY3Rpb25zIGFyZSBpbXBsZW1lbnRlZCBvbiB0b3Agb2ZcbiAgLy8gQXN5bmNJdGVyYXRvciBvYmplY3RzOyB0aGV5IGp1c3QgcmV0dXJuIGEgUHJvbWlzZSBmb3IgdGhlIHZhbHVlIG9mXG4gIC8vIHRoZSBmaW5hbCByZXN1bHQgcHJvZHVjZWQgYnkgdGhlIGl0ZXJhdG9yLlxuICBydW50aW1lLmFzeW5jID0gZnVuY3Rpb24oaW5uZXJGbiwgb3V0ZXJGbiwgc2VsZiwgdHJ5TG9jc0xpc3QpIHtcbiAgICB2YXIgaXRlciA9IG5ldyBBc3luY0l0ZXJhdG9yKFxuICAgICAgd3JhcChpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdClcbiAgICApO1xuXG4gICAgcmV0dXJuIHJ1bnRpbWUuaXNHZW5lcmF0b3JGdW5jdGlvbihvdXRlckZuKVxuICAgICAgPyBpdGVyIC8vIElmIG91dGVyRm4gaXMgYSBnZW5lcmF0b3IsIHJldHVybiB0aGUgZnVsbCBpdGVyYXRvci5cbiAgICAgIDogaXRlci5uZXh0KCkudGhlbihmdW5jdGlvbihyZXN1bHQpIHtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0LmRvbmUgPyByZXN1bHQudmFsdWUgOiBpdGVyLm5leHQoKTtcbiAgICAgICAgfSk7XG4gIH07XG5cbiAgZnVuY3Rpb24gbWFrZUludm9rZU1ldGhvZChpbm5lckZuLCBzZWxmLCBjb250ZXh0KSB7XG4gICAgdmFyIHN0YXRlID0gR2VuU3RhdGVTdXNwZW5kZWRTdGFydDtcblxuICAgIHJldHVybiBmdW5jdGlvbiBpbnZva2UobWV0aG9kLCBhcmcpIHtcbiAgICAgIGlmIChzdGF0ZSA9PT0gR2VuU3RhdGVFeGVjdXRpbmcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgcnVubmluZ1wiKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHN0YXRlID09PSBHZW5TdGF0ZUNvbXBsZXRlZCkge1xuICAgICAgICBpZiAobWV0aG9kID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICB0aHJvdyBhcmc7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBCZSBmb3JnaXZpbmcsIHBlciAyNS4zLjMuMy4zIG9mIHRoZSBzcGVjOlxuICAgICAgICAvLyBodHRwczovL3Blb3BsZS5tb3ppbGxhLm9yZy9+am9yZW5kb3JmZi9lczYtZHJhZnQuaHRtbCNzZWMtZ2VuZXJhdG9ycmVzdW1lXG4gICAgICAgIHJldHVybiBkb25lUmVzdWx0KCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnRleHQubWV0aG9kID0gbWV0aG9kO1xuICAgICAgY29udGV4dC5hcmcgPSBhcmc7XG5cbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIHZhciBkZWxlZ2F0ZSA9IGNvbnRleHQuZGVsZWdhdGU7XG4gICAgICAgIGlmIChkZWxlZ2F0ZSkge1xuICAgICAgICAgIHZhciBkZWxlZ2F0ZVJlc3VsdCA9IG1heWJlSW52b2tlRGVsZWdhdGUoZGVsZWdhdGUsIGNvbnRleHQpO1xuICAgICAgICAgIGlmIChkZWxlZ2F0ZVJlc3VsdCkge1xuICAgICAgICAgICAgaWYgKGRlbGVnYXRlUmVzdWx0ID09PSBDb250aW51ZVNlbnRpbmVsKSBjb250aW51ZTtcbiAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZVJlc3VsdDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29udGV4dC5tZXRob2QgPT09IFwibmV4dFwiKSB7XG4gICAgICAgICAgLy8gU2V0dGluZyBjb250ZXh0Ll9zZW50IGZvciBsZWdhY3kgc3VwcG9ydCBvZiBCYWJlbCdzXG4gICAgICAgICAgLy8gZnVuY3Rpb24uc2VudCBpbXBsZW1lbnRhdGlvbi5cbiAgICAgICAgICBjb250ZXh0LnNlbnQgPSBjb250ZXh0Ll9zZW50ID0gY29udGV4dC5hcmc7XG5cbiAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgaWYgKHN0YXRlID09PSBHZW5TdGF0ZVN1c3BlbmRlZFN0YXJ0KSB7XG4gICAgICAgICAgICBzdGF0ZSA9IEdlblN0YXRlQ29tcGxldGVkO1xuICAgICAgICAgICAgdGhyb3cgY29udGV4dC5hcmc7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29udGV4dC5kaXNwYXRjaEV4Y2VwdGlvbihjb250ZXh0LmFyZyk7XG5cbiAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJyZXR1cm5cIikge1xuICAgICAgICAgIGNvbnRleHQuYWJydXB0KFwicmV0dXJuXCIsIGNvbnRleHQuYXJnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN0YXRlID0gR2VuU3RhdGVFeGVjdXRpbmc7XG5cbiAgICAgICAgdmFyIHJlY29yZCA9IHRyeUNhdGNoKGlubmVyRm4sIHNlbGYsIGNvbnRleHQpO1xuICAgICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwibm9ybWFsXCIpIHtcbiAgICAgICAgICAvLyBJZiBhbiBleGNlcHRpb24gaXMgdGhyb3duIGZyb20gaW5uZXJGbiwgd2UgbGVhdmUgc3RhdGUgPT09XG4gICAgICAgICAgLy8gR2VuU3RhdGVFeGVjdXRpbmcgYW5kIGxvb3AgYmFjayBmb3IgYW5vdGhlciBpbnZvY2F0aW9uLlxuICAgICAgICAgIHN0YXRlID0gY29udGV4dC5kb25lXG4gICAgICAgICAgICA/IEdlblN0YXRlQ29tcGxldGVkXG4gICAgICAgICAgICA6IEdlblN0YXRlU3VzcGVuZGVkWWllbGQ7XG5cbiAgICAgICAgICBpZiAocmVjb3JkLmFyZyA9PT0gQ29udGludWVTZW50aW5lbCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHZhbHVlOiByZWNvcmQuYXJnLFxuICAgICAgICAgICAgZG9uZTogY29udGV4dC5kb25lXG4gICAgICAgICAgfTtcblxuICAgICAgICB9IGVsc2UgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICBzdGF0ZSA9IEdlblN0YXRlQ29tcGxldGVkO1xuICAgICAgICAgIC8vIERpc3BhdGNoIHRoZSBleGNlcHRpb24gYnkgbG9vcGluZyBiYWNrIGFyb3VuZCB0byB0aGVcbiAgICAgICAgICAvLyBjb250ZXh0LmRpc3BhdGNoRXhjZXB0aW9uKGNvbnRleHQuYXJnKSBjYWxsIGFib3ZlLlxuICAgICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiO1xuICAgICAgICAgIGNvbnRleHQuYXJnID0gcmVjb3JkLmFyZztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICAvLyBDYWxsIGRlbGVnYXRlLml0ZXJhdG9yW2NvbnRleHQubWV0aG9kXShjb250ZXh0LmFyZykgYW5kIGhhbmRsZSB0aGVcbiAgLy8gcmVzdWx0LCBlaXRoZXIgYnkgcmV0dXJuaW5nIGEgeyB2YWx1ZSwgZG9uZSB9IHJlc3VsdCBmcm9tIHRoZVxuICAvLyBkZWxlZ2F0ZSBpdGVyYXRvciwgb3IgYnkgbW9kaWZ5aW5nIGNvbnRleHQubWV0aG9kIGFuZCBjb250ZXh0LmFyZyxcbiAgLy8gc2V0dGluZyBjb250ZXh0LmRlbGVnYXRlIHRvIG51bGwsIGFuZCByZXR1cm5pbmcgdGhlIENvbnRpbnVlU2VudGluZWwuXG4gIGZ1bmN0aW9uIG1heWJlSW52b2tlRGVsZWdhdGUoZGVsZWdhdGUsIGNvbnRleHQpIHtcbiAgICB2YXIgbWV0aG9kID0gZGVsZWdhdGUuaXRlcmF0b3JbY29udGV4dC5tZXRob2RdO1xuICAgIGlmIChtZXRob2QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gQSAudGhyb3cgb3IgLnJldHVybiB3aGVuIHRoZSBkZWxlZ2F0ZSBpdGVyYXRvciBoYXMgbm8gLnRocm93XG4gICAgICAvLyBtZXRob2QgYWx3YXlzIHRlcm1pbmF0ZXMgdGhlIHlpZWxkKiBsb29wLlxuICAgICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG5cbiAgICAgIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIGlmIChkZWxlZ2F0ZS5pdGVyYXRvci5yZXR1cm4pIHtcbiAgICAgICAgICAvLyBJZiB0aGUgZGVsZWdhdGUgaXRlcmF0b3IgaGFzIGEgcmV0dXJuIG1ldGhvZCwgZ2l2ZSBpdCBhXG4gICAgICAgICAgLy8gY2hhbmNlIHRvIGNsZWFuIHVwLlxuICAgICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJyZXR1cm5cIjtcbiAgICAgICAgICBjb250ZXh0LmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICBtYXliZUludm9rZURlbGVnYXRlKGRlbGVnYXRlLCBjb250ZXh0KTtcblxuICAgICAgICAgIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgICAvLyBJZiBtYXliZUludm9rZURlbGVnYXRlKGNvbnRleHQpIGNoYW5nZWQgY29udGV4dC5tZXRob2QgZnJvbVxuICAgICAgICAgICAgLy8gXCJyZXR1cm5cIiB0byBcInRocm93XCIsIGxldCB0aGF0IG92ZXJyaWRlIHRoZSBUeXBlRXJyb3IgYmVsb3cuXG4gICAgICAgICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIjtcbiAgICAgICAgY29udGV4dC5hcmcgPSBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgIFwiVGhlIGl0ZXJhdG9yIGRvZXMgbm90IHByb3ZpZGUgYSAndGhyb3cnIG1ldGhvZFwiKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuXG4gICAgdmFyIHJlY29yZCA9IHRyeUNhdGNoKG1ldGhvZCwgZGVsZWdhdGUuaXRlcmF0b3IsIGNvbnRleHQuYXJnKTtcblxuICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICBjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIjtcbiAgICAgIGNvbnRleHQuYXJnID0gcmVjb3JkLmFyZztcbiAgICAgIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsO1xuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuXG4gICAgdmFyIGluZm8gPSByZWNvcmQuYXJnO1xuXG4gICAgaWYgKCEgaW5mbykge1xuICAgICAgY29udGV4dC5tZXRob2QgPSBcInRocm93XCI7XG4gICAgICBjb250ZXh0LmFyZyA9IG5ldyBUeXBlRXJyb3IoXCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdFwiKTtcbiAgICAgIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsO1xuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuXG4gICAgaWYgKGluZm8uZG9uZSkge1xuICAgICAgLy8gQXNzaWduIHRoZSByZXN1bHQgb2YgdGhlIGZpbmlzaGVkIGRlbGVnYXRlIHRvIHRoZSB0ZW1wb3JhcnlcbiAgICAgIC8vIHZhcmlhYmxlIHNwZWNpZmllZCBieSBkZWxlZ2F0ZS5yZXN1bHROYW1lIChzZWUgZGVsZWdhdGVZaWVsZCkuXG4gICAgICBjb250ZXh0W2RlbGVnYXRlLnJlc3VsdE5hbWVdID0gaW5mby52YWx1ZTtcblxuICAgICAgLy8gUmVzdW1lIGV4ZWN1dGlvbiBhdCB0aGUgZGVzaXJlZCBsb2NhdGlvbiAoc2VlIGRlbGVnYXRlWWllbGQpLlxuICAgICAgY29udGV4dC5uZXh0ID0gZGVsZWdhdGUubmV4dExvYztcblxuICAgICAgLy8gSWYgY29udGV4dC5tZXRob2Qgd2FzIFwidGhyb3dcIiBidXQgdGhlIGRlbGVnYXRlIGhhbmRsZWQgdGhlXG4gICAgICAvLyBleGNlcHRpb24sIGxldCB0aGUgb3V0ZXIgZ2VuZXJhdG9yIHByb2NlZWQgbm9ybWFsbHkuIElmXG4gICAgICAvLyBjb250ZXh0Lm1ldGhvZCB3YXMgXCJuZXh0XCIsIGZvcmdldCBjb250ZXh0LmFyZyBzaW5jZSBpdCBoYXMgYmVlblxuICAgICAgLy8gXCJjb25zdW1lZFwiIGJ5IHRoZSBkZWxlZ2F0ZSBpdGVyYXRvci4gSWYgY29udGV4dC5tZXRob2Qgd2FzXG4gICAgICAvLyBcInJldHVyblwiLCBhbGxvdyB0aGUgb3JpZ2luYWwgLnJldHVybiBjYWxsIHRvIGNvbnRpbnVlIGluIHRoZVxuICAgICAgLy8gb3V0ZXIgZ2VuZXJhdG9yLlxuICAgICAgaWYgKGNvbnRleHQubWV0aG9kICE9PSBcInJldHVyblwiKSB7XG4gICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJuZXh0XCI7XG4gICAgICAgIGNvbnRleHQuYXJnID0gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFJlLXlpZWxkIHRoZSByZXN1bHQgcmV0dXJuZWQgYnkgdGhlIGRlbGVnYXRlIG1ldGhvZC5cbiAgICAgIHJldHVybiBpbmZvO1xuICAgIH1cblxuICAgIC8vIFRoZSBkZWxlZ2F0ZSBpdGVyYXRvciBpcyBmaW5pc2hlZCwgc28gZm9yZ2V0IGl0IGFuZCBjb250aW51ZSB3aXRoXG4gICAgLy8gdGhlIG91dGVyIGdlbmVyYXRvci5cbiAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcbiAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgfVxuXG4gIC8vIERlZmluZSBHZW5lcmF0b3IucHJvdG90eXBlLntuZXh0LHRocm93LHJldHVybn0gaW4gdGVybXMgb2YgdGhlXG4gIC8vIHVuaWZpZWQgLl9pbnZva2UgaGVscGVyIG1ldGhvZC5cbiAgZGVmaW5lSXRlcmF0b3JNZXRob2RzKEdwKTtcblxuICBHcFt0b1N0cmluZ1RhZ1N5bWJvbF0gPSBcIkdlbmVyYXRvclwiO1xuXG4gIC8vIEEgR2VuZXJhdG9yIHNob3VsZCBhbHdheXMgcmV0dXJuIGl0c2VsZiBhcyB0aGUgaXRlcmF0b3Igb2JqZWN0IHdoZW4gdGhlXG4gIC8vIEBAaXRlcmF0b3IgZnVuY3Rpb24gaXMgY2FsbGVkIG9uIGl0LiBTb21lIGJyb3dzZXJzJyBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlXG4gIC8vIGl0ZXJhdG9yIHByb3RvdHlwZSBjaGFpbiBpbmNvcnJlY3RseSBpbXBsZW1lbnQgdGhpcywgY2F1c2luZyB0aGUgR2VuZXJhdG9yXG4gIC8vIG9iamVjdCB0byBub3QgYmUgcmV0dXJuZWQgZnJvbSB0aGlzIGNhbGwuIFRoaXMgZW5zdXJlcyB0aGF0IGRvZXNuJ3QgaGFwcGVuLlxuICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlZ2VuZXJhdG9yL2lzc3Vlcy8yNzQgZm9yIG1vcmUgZGV0YWlscy5cbiAgR3BbaXRlcmF0b3JTeW1ib2xdID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgR3AudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gXCJbb2JqZWN0IEdlbmVyYXRvcl1cIjtcbiAgfTtcblxuICBmdW5jdGlvbiBwdXNoVHJ5RW50cnkobG9jcykge1xuICAgIHZhciBlbnRyeSA9IHsgdHJ5TG9jOiBsb2NzWzBdIH07XG5cbiAgICBpZiAoMSBpbiBsb2NzKSB7XG4gICAgICBlbnRyeS5jYXRjaExvYyA9IGxvY3NbMV07XG4gICAgfVxuXG4gICAgaWYgKDIgaW4gbG9jcykge1xuICAgICAgZW50cnkuZmluYWxseUxvYyA9IGxvY3NbMl07XG4gICAgICBlbnRyeS5hZnRlckxvYyA9IGxvY3NbM107XG4gICAgfVxuXG4gICAgdGhpcy50cnlFbnRyaWVzLnB1c2goZW50cnkpO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVzZXRUcnlFbnRyeShlbnRyeSkge1xuICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uIHx8IHt9O1xuICAgIHJlY29yZC50eXBlID0gXCJub3JtYWxcIjtcbiAgICBkZWxldGUgcmVjb3JkLmFyZztcbiAgICBlbnRyeS5jb21wbGV0aW9uID0gcmVjb3JkO1xuICB9XG5cbiAgZnVuY3Rpb24gQ29udGV4dCh0cnlMb2NzTGlzdCkge1xuICAgIC8vIFRoZSByb290IGVudHJ5IG9iamVjdCAoZWZmZWN0aXZlbHkgYSB0cnkgc3RhdGVtZW50IHdpdGhvdXQgYSBjYXRjaFxuICAgIC8vIG9yIGEgZmluYWxseSBibG9jaykgZ2l2ZXMgdXMgYSBwbGFjZSB0byBzdG9yZSB2YWx1ZXMgdGhyb3duIGZyb21cbiAgICAvLyBsb2NhdGlvbnMgd2hlcmUgdGhlcmUgaXMgbm8gZW5jbG9zaW5nIHRyeSBzdGF0ZW1lbnQuXG4gICAgdGhpcy50cnlFbnRyaWVzID0gW3sgdHJ5TG9jOiBcInJvb3RcIiB9XTtcbiAgICB0cnlMb2NzTGlzdC5mb3JFYWNoKHB1c2hUcnlFbnRyeSwgdGhpcyk7XG4gICAgdGhpcy5yZXNldCh0cnVlKTtcbiAgfVxuXG4gIHJ1bnRpbWUua2V5cyA9IGZ1bmN0aW9uKG9iamVjdCkge1xuICAgIHZhciBrZXlzID0gW107XG4gICAgZm9yICh2YXIga2V5IGluIG9iamVjdCkge1xuICAgICAga2V5cy5wdXNoKGtleSk7XG4gICAgfVxuICAgIGtleXMucmV2ZXJzZSgpO1xuXG4gICAgLy8gUmF0aGVyIHRoYW4gcmV0dXJuaW5nIGFuIG9iamVjdCB3aXRoIGEgbmV4dCBtZXRob2QsIHdlIGtlZXBcbiAgICAvLyB0aGluZ3Mgc2ltcGxlIGFuZCByZXR1cm4gdGhlIG5leHQgZnVuY3Rpb24gaXRzZWxmLlxuICAgIHJldHVybiBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgd2hpbGUgKGtleXMubGVuZ3RoKSB7XG4gICAgICAgIHZhciBrZXkgPSBrZXlzLnBvcCgpO1xuICAgICAgICBpZiAoa2V5IGluIG9iamVjdCkge1xuICAgICAgICAgIG5leHQudmFsdWUgPSBrZXk7XG4gICAgICAgICAgbmV4dC5kb25lID0gZmFsc2U7XG4gICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gVG8gYXZvaWQgY3JlYXRpbmcgYW4gYWRkaXRpb25hbCBvYmplY3QsIHdlIGp1c3QgaGFuZyB0aGUgLnZhbHVlXG4gICAgICAvLyBhbmQgLmRvbmUgcHJvcGVydGllcyBvZmYgdGhlIG5leHQgZnVuY3Rpb24gb2JqZWN0IGl0c2VsZi4gVGhpc1xuICAgICAgLy8gYWxzbyBlbnN1cmVzIHRoYXQgdGhlIG1pbmlmaWVyIHdpbGwgbm90IGFub255bWl6ZSB0aGUgZnVuY3Rpb24uXG4gICAgICBuZXh0LmRvbmUgPSB0cnVlO1xuICAgICAgcmV0dXJuIG5leHQ7XG4gICAgfTtcbiAgfTtcblxuICBmdW5jdGlvbiB2YWx1ZXMoaXRlcmFibGUpIHtcbiAgICBpZiAoaXRlcmFibGUpIHtcbiAgICAgIHZhciBpdGVyYXRvck1ldGhvZCA9IGl0ZXJhYmxlW2l0ZXJhdG9yU3ltYm9sXTtcbiAgICAgIGlmIChpdGVyYXRvck1ldGhvZCkge1xuICAgICAgICByZXR1cm4gaXRlcmF0b3JNZXRob2QuY2FsbChpdGVyYWJsZSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgaXRlcmFibGUubmV4dCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHJldHVybiBpdGVyYWJsZTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFpc05hTihpdGVyYWJsZS5sZW5ndGgpKSB7XG4gICAgICAgIHZhciBpID0gLTEsIG5leHQgPSBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgIHdoaWxlICgrK2kgPCBpdGVyYWJsZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmIChoYXNPd24uY2FsbChpdGVyYWJsZSwgaSkpIHtcbiAgICAgICAgICAgICAgbmV4dC52YWx1ZSA9IGl0ZXJhYmxlW2ldO1xuICAgICAgICAgICAgICBuZXh0LmRvbmUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbmV4dC52YWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICBuZXh0LmRvbmUgPSB0cnVlO1xuXG4gICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIG5leHQubmV4dCA9IG5leHQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmV0dXJuIGFuIGl0ZXJhdG9yIHdpdGggbm8gdmFsdWVzLlxuICAgIHJldHVybiB7IG5leHQ6IGRvbmVSZXN1bHQgfTtcbiAgfVxuICBydW50aW1lLnZhbHVlcyA9IHZhbHVlcztcblxuICBmdW5jdGlvbiBkb25lUmVzdWx0KCkge1xuICAgIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfTtcbiAgfVxuXG4gIENvbnRleHQucHJvdG90eXBlID0ge1xuICAgIGNvbnN0cnVjdG9yOiBDb250ZXh0LFxuXG4gICAgcmVzZXQ6IGZ1bmN0aW9uKHNraXBUZW1wUmVzZXQpIHtcbiAgICAgIHRoaXMucHJldiA9IDA7XG4gICAgICB0aGlzLm5leHQgPSAwO1xuICAgICAgLy8gUmVzZXR0aW5nIGNvbnRleHQuX3NlbnQgZm9yIGxlZ2FjeSBzdXBwb3J0IG9mIEJhYmVsJ3NcbiAgICAgIC8vIGZ1bmN0aW9uLnNlbnQgaW1wbGVtZW50YXRpb24uXG4gICAgICB0aGlzLnNlbnQgPSB0aGlzLl9zZW50ID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5kb25lID0gZmFsc2U7XG4gICAgICB0aGlzLmRlbGVnYXRlID0gbnVsbDtcblxuICAgICAgdGhpcy5tZXRob2QgPSBcIm5leHRcIjtcbiAgICAgIHRoaXMuYXJnID0gdW5kZWZpbmVkO1xuXG4gICAgICB0aGlzLnRyeUVudHJpZXMuZm9yRWFjaChyZXNldFRyeUVudHJ5KTtcblxuICAgICAgaWYgKCFza2lwVGVtcFJlc2V0KSB7XG4gICAgICAgIGZvciAodmFyIG5hbWUgaW4gdGhpcykge1xuICAgICAgICAgIC8vIE5vdCBzdXJlIGFib3V0IHRoZSBvcHRpbWFsIG9yZGVyIG9mIHRoZXNlIGNvbmRpdGlvbnM6XG4gICAgICAgICAgaWYgKG5hbWUuY2hhckF0KDApID09PSBcInRcIiAmJlxuICAgICAgICAgICAgICBoYXNPd24uY2FsbCh0aGlzLCBuYW1lKSAmJlxuICAgICAgICAgICAgICAhaXNOYU4oK25hbWUuc2xpY2UoMSkpKSB7XG4gICAgICAgICAgICB0aGlzW25hbWVdID0gdW5kZWZpbmVkO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzdG9wOiBmdW5jdGlvbigpIHtcbiAgICAgIHRoaXMuZG9uZSA9IHRydWU7XG5cbiAgICAgIHZhciByb290RW50cnkgPSB0aGlzLnRyeUVudHJpZXNbMF07XG4gICAgICB2YXIgcm9vdFJlY29yZCA9IHJvb3RFbnRyeS5jb21wbGV0aW9uO1xuICAgICAgaWYgKHJvb3RSZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIHRocm93IHJvb3RSZWNvcmQuYXJnO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5ydmFsO1xuICAgIH0sXG5cbiAgICBkaXNwYXRjaEV4Y2VwdGlvbjogZnVuY3Rpb24oZXhjZXB0aW9uKSB7XG4gICAgICBpZiAodGhpcy5kb25lKSB7XG4gICAgICAgIHRocm93IGV4Y2VwdGlvbjtcbiAgICAgIH1cblxuICAgICAgdmFyIGNvbnRleHQgPSB0aGlzO1xuICAgICAgZnVuY3Rpb24gaGFuZGxlKGxvYywgY2F1Z2h0KSB7XG4gICAgICAgIHJlY29yZC50eXBlID0gXCJ0aHJvd1wiO1xuICAgICAgICByZWNvcmQuYXJnID0gZXhjZXB0aW9uO1xuICAgICAgICBjb250ZXh0Lm5leHQgPSBsb2M7XG5cbiAgICAgICAgaWYgKGNhdWdodCkge1xuICAgICAgICAgIC8vIElmIHRoZSBkaXNwYXRjaGVkIGV4Y2VwdGlvbiB3YXMgY2F1Z2h0IGJ5IGEgY2F0Y2ggYmxvY2ssXG4gICAgICAgICAgLy8gdGhlbiBsZXQgdGhhdCBjYXRjaCBibG9jayBoYW5kbGUgdGhlIGV4Y2VwdGlvbiBub3JtYWxseS5cbiAgICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgICAgIGNvbnRleHQuYXJnID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICEhIGNhdWdodDtcbiAgICAgIH1cblxuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uO1xuXG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPT09IFwicm9vdFwiKSB7XG4gICAgICAgICAgLy8gRXhjZXB0aW9uIHRocm93biBvdXRzaWRlIG9mIGFueSB0cnkgYmxvY2sgdGhhdCBjb3VsZCBoYW5kbGVcbiAgICAgICAgICAvLyBpdCwgc28gc2V0IHRoZSBjb21wbGV0aW9uIHZhbHVlIG9mIHRoZSBlbnRpcmUgZnVuY3Rpb24gdG9cbiAgICAgICAgICAvLyB0aHJvdyB0aGUgZXhjZXB0aW9uLlxuICAgICAgICAgIHJldHVybiBoYW5kbGUoXCJlbmRcIik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZW50cnkudHJ5TG9jIDw9IHRoaXMucHJldikge1xuICAgICAgICAgIHZhciBoYXNDYXRjaCA9IGhhc093bi5jYWxsKGVudHJ5LCBcImNhdGNoTG9jXCIpO1xuICAgICAgICAgIHZhciBoYXNGaW5hbGx5ID0gaGFzT3duLmNhbGwoZW50cnksIFwiZmluYWxseUxvY1wiKTtcblxuICAgICAgICAgIGlmIChoYXNDYXRjaCAmJiBoYXNGaW5hbGx5KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgZW50cnkuY2F0Y2hMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5jYXRjaExvYywgdHJ1ZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5maW5hbGx5TG9jKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0gZWxzZSBpZiAoaGFzQ2F0Y2gpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBlbnRyeS5jYXRjaExvYykge1xuICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlKGVudHJ5LmNhdGNoTG9jLCB0cnVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0gZWxzZSBpZiAoaGFzRmluYWxseSkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5maW5hbGx5TG9jKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ0cnkgc3RhdGVtZW50IHdpdGhvdXQgY2F0Y2ggb3IgZmluYWxseVwiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYWJydXB0OiBmdW5jdGlvbih0eXBlLCBhcmcpIHtcbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICBpZiAoZW50cnkudHJ5TG9jIDw9IHRoaXMucHJldiAmJlxuICAgICAgICAgICAgaGFzT3duLmNhbGwoZW50cnksIFwiZmluYWxseUxvY1wiKSAmJlxuICAgICAgICAgICAgdGhpcy5wcmV2IDwgZW50cnkuZmluYWxseUxvYykge1xuICAgICAgICAgIHZhciBmaW5hbGx5RW50cnkgPSBlbnRyeTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZmluYWxseUVudHJ5ICYmXG4gICAgICAgICAgKHR5cGUgPT09IFwiYnJlYWtcIiB8fFxuICAgICAgICAgICB0eXBlID09PSBcImNvbnRpbnVlXCIpICYmXG4gICAgICAgICAgZmluYWxseUVudHJ5LnRyeUxvYyA8PSBhcmcgJiZcbiAgICAgICAgICBhcmcgPD0gZmluYWxseUVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgLy8gSWdub3JlIHRoZSBmaW5hbGx5IGVudHJ5IGlmIGNvbnRyb2wgaXMgbm90IGp1bXBpbmcgdG8gYVxuICAgICAgICAvLyBsb2NhdGlvbiBvdXRzaWRlIHRoZSB0cnkvY2F0Y2ggYmxvY2suXG4gICAgICAgIGZpbmFsbHlFbnRyeSA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIHZhciByZWNvcmQgPSBmaW5hbGx5RW50cnkgPyBmaW5hbGx5RW50cnkuY29tcGxldGlvbiA6IHt9O1xuICAgICAgcmVjb3JkLnR5cGUgPSB0eXBlO1xuICAgICAgcmVjb3JkLmFyZyA9IGFyZztcblxuICAgICAgaWYgKGZpbmFsbHlFbnRyeSkge1xuICAgICAgICB0aGlzLm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgICB0aGlzLm5leHQgPSBmaW5hbGx5RW50cnkuZmluYWxseUxvYztcbiAgICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLmNvbXBsZXRlKHJlY29yZCk7XG4gICAgfSxcblxuICAgIGNvbXBsZXRlOiBmdW5jdGlvbihyZWNvcmQsIGFmdGVyTG9jKSB7XG4gICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICB0aHJvdyByZWNvcmQuYXJnO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwiYnJlYWtcIiB8fFxuICAgICAgICAgIHJlY29yZC50eXBlID09PSBcImNvbnRpbnVlXCIpIHtcbiAgICAgICAgdGhpcy5uZXh0ID0gcmVjb3JkLmFyZztcbiAgICAgIH0gZWxzZSBpZiAocmVjb3JkLnR5cGUgPT09IFwicmV0dXJuXCIpIHtcbiAgICAgICAgdGhpcy5ydmFsID0gdGhpcy5hcmcgPSByZWNvcmQuYXJnO1xuICAgICAgICB0aGlzLm1ldGhvZCA9IFwicmV0dXJuXCI7XG4gICAgICAgIHRoaXMubmV4dCA9IFwiZW5kXCI7XG4gICAgICB9IGVsc2UgaWYgKHJlY29yZC50eXBlID09PSBcIm5vcm1hbFwiICYmIGFmdGVyTG9jKSB7XG4gICAgICAgIHRoaXMubmV4dCA9IGFmdGVyTG9jO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICB9LFxuXG4gICAgZmluaXNoOiBmdW5jdGlvbihmaW5hbGx5TG9jKSB7XG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcbiAgICAgICAgaWYgKGVudHJ5LmZpbmFsbHlMb2MgPT09IGZpbmFsbHlMb2MpIHtcbiAgICAgICAgICB0aGlzLmNvbXBsZXRlKGVudHJ5LmNvbXBsZXRpb24sIGVudHJ5LmFmdGVyTG9jKTtcbiAgICAgICAgICByZXNldFRyeUVudHJ5KGVudHJ5KTtcbiAgICAgICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBcImNhdGNoXCI6IGZ1bmN0aW9uKHRyeUxvYykge1xuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPT09IHRyeUxvYykge1xuICAgICAgICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uO1xuICAgICAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgICB2YXIgdGhyb3duID0gcmVjb3JkLmFyZztcbiAgICAgICAgICAgIHJlc2V0VHJ5RW50cnkoZW50cnkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdGhyb3duO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFRoZSBjb250ZXh0LmNhdGNoIG1ldGhvZCBtdXN0IG9ubHkgYmUgY2FsbGVkIHdpdGggYSBsb2NhdGlvblxuICAgICAgLy8gYXJndW1lbnQgdGhhdCBjb3JyZXNwb25kcyB0byBhIGtub3duIGNhdGNoIGJsb2NrLlxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaWxsZWdhbCBjYXRjaCBhdHRlbXB0XCIpO1xuICAgIH0sXG5cbiAgICBkZWxlZ2F0ZVlpZWxkOiBmdW5jdGlvbihpdGVyYWJsZSwgcmVzdWx0TmFtZSwgbmV4dExvYykge1xuICAgICAgdGhpcy5kZWxlZ2F0ZSA9IHtcbiAgICAgICAgaXRlcmF0b3I6IHZhbHVlcyhpdGVyYWJsZSksXG4gICAgICAgIHJlc3VsdE5hbWU6IHJlc3VsdE5hbWUsXG4gICAgICAgIG5leHRMb2M6IG5leHRMb2NcbiAgICAgIH07XG5cbiAgICAgIGlmICh0aGlzLm1ldGhvZCA9PT0gXCJuZXh0XCIpIHtcbiAgICAgICAgLy8gRGVsaWJlcmF0ZWx5IGZvcmdldCB0aGUgbGFzdCBzZW50IHZhbHVlIHNvIHRoYXQgd2UgZG9uJ3RcbiAgICAgICAgLy8gYWNjaWRlbnRhbGx5IHBhc3MgaXQgb24gdG8gdGhlIGRlbGVnYXRlLlxuICAgICAgICB0aGlzLmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuICB9O1xufSkoXG4gIC8vIEFtb25nIHRoZSB2YXJpb3VzIHRyaWNrcyBmb3Igb2J0YWluaW5nIGEgcmVmZXJlbmNlIHRvIHRoZSBnbG9iYWxcbiAgLy8gb2JqZWN0LCB0aGlzIHNlZW1zIHRvIGJlIHRoZSBtb3N0IHJlbGlhYmxlIHRlY2huaXF1ZSB0aGF0IGRvZXMgbm90XG4gIC8vIHVzZSBpbmRpcmVjdCBldmFsICh3aGljaCB2aW9sYXRlcyBDb250ZW50IFNlY3VyaXR5IFBvbGljeSkuXG4gIHR5cGVvZiBnbG9iYWwgPT09IFwib2JqZWN0XCIgPyBnbG9iYWwgOlxuICB0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiID8gd2luZG93IDpcbiAgdHlwZW9mIHNlbGYgPT09IFwib2JqZWN0XCIgPyBzZWxmIDogdGhpc1xuKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///329\n')},function(module,exports,__webpack_require__){eval("__webpack_require__(331);\nmodule.exports = __webpack_require__(18).RegExp.escape;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvZm4vcmVnZXhwL2VzY2FwZS5qcz9mZDVhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLG1CQUFPLENBQUMsR0FBa0M7QUFDMUMsaUJBQWlCLG1CQUFPLENBQUMsRUFBcUIiLCJmaWxlIjoiMzMwLmpzIiwic291cmNlc0NvbnRlbnQiOlsicmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9jb3JlLnJlZ2V4cC5lc2NhcGUnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9fY29yZScpLlJlZ0V4cC5lc2NhcGU7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///330\n")},function(module,exports,__webpack_require__){eval("// https://github.com/benjamingr/RexExp.escape\nvar $export = __webpack_require__(0);\nvar $re = __webpack_require__(332)(/[\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n\n$export($export.S, 'RegExp', { escape: function escape(it) { return $re(it); } });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9jb3JlLnJlZ2V4cC5lc2NhcGUuanM/ZDBjYSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLFVBQVUsbUJBQU8sQ0FBQyxHQUFhLG9CQUFvQjs7QUFFbkQsOEJBQThCLDhCQUE4QixnQkFBZ0IsRUFBRSxFQUFFIiwiZmlsZSI6IjMzMS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9iZW5qYW1pbmdyL1JleEV4cC5lc2NhcGVcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHJlID0gcmVxdWlyZSgnLi9fcmVwbGFjZXInKSgvW1xcXFxeJCorPy4oKXxbXFxde31dL2csICdcXFxcJCYnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWdFeHAnLCB7IGVzY2FwZTogZnVuY3Rpb24gZXNjYXBlKGl0KSB7IHJldHVybiAkcmUoaXQpOyB9IH0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///331\n")},function(module,exports){eval("module.exports = function (regExp, replace) {\n var replacer = replace === Object(replace) ? function (part) {\n return replace[part];\n } : replace;\n return function (it) {\n return String(it).replace(regExp, replacer);\n };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcmVwbGFjZXIuanM/YWJkNyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMzMyLmpzIiwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAocmVnRXhwLCByZXBsYWNlKSB7XG4gIHZhciByZXBsYWNlciA9IHJlcGxhY2UgPT09IE9iamVjdChyZXBsYWNlKSA/IGZ1bmN0aW9uIChwYXJ0KSB7XG4gICAgcmV0dXJuIHJlcGxhY2VbcGFydF07XG4gIH0gOiByZXBsYWNlO1xuICByZXR1cm4gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIFN0cmluZyhpdCkucmVwbGFjZShyZWdFeHAsIHJlcGxhY2VyKTtcbiAgfTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///332\n")},function(module,__webpack_exports__,__webpack_require__){"use strict";eval('// ESM COMPAT FLAG\n__webpack_require__.r(__webpack_exports__);\n\n// CONCATENATED MODULE: ./src/core/Deferred.js\nfunction _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }\n\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\n\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."); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction _wrapNativeSuper(Class) { var _cache = typeof Map === "function" ? new Map() : undefined; _wrapNativeSuper = function _wrapNativeSuper(Class) { if (Class === null || !_isNativeFunction(Class)) return Class; if (typeof Class !== "function") { throw new TypeError("Super expression must either be null or a function"); } if (typeof _cache !== "undefined") { if (_cache.has(Class)) return _cache.get(Class); _cache.set(Class, Wrapper); } function Wrapper() { return _construct(Class, arguments, _getPrototypeOf(this).constructor); } Wrapper.prototype = Object.create(Class.prototype, { constructor: { value: Wrapper, enumerable: false, writable: true, configurable: true } }); return _setPrototypeOf(Wrapper, Class); }; return _wrapNativeSuper(Class); }\n\nfunction _construct(Parent, args, Class) { if (_isNativeReflectConstruct()) { _construct = Reflect.construct; } else { _construct = function _construct(Parent, args, Class) { var a = [null]; a.push.apply(a, args); var Constructor = Function.bind.apply(Parent, a); var instance = new Constructor(); if (Class) _setPrototypeOf(instance, Class.prototype); return instance; }; } return _construct.apply(null, arguments); }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _isNativeFunction(fn) { return Function.toString.call(fn).indexOf("[native code]") !== -1; }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/**\r\n * The built-in class for asynchronous Promises.\r\n * @external Promise\r\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise\r\n */\n\n/**\r\n * A Promise object that can be resolved, rejected or canceled at any time by the\r\n * user.\r\n *\r\n * @extends external:Promise\r\n */\nvar Deferred = /*#__PURE__*/function (_Promise) {\n _inherits(Deferred, _Promise);\n\n var _super = _createSuper(Deferred);\n\n /**\r\n * @constructor\r\n *\r\n * @param {Function} [executable=() => {}] - The function to be executed by the\r\n * constructor, during the process of constructing the promise. The signature\r\n * of this is expected to be: executable( resolutionFunc, rejectionFunc, cancellationFunc ).\r\n * @param {Function=} onResolve - Optional function to execute once the promise\r\n * is resolved.\r\n * @param {Function=} onReject - Optional function to execute once the promise\r\n * is rejected.\r\n * @param {Function=} onCancel - Optional function to execute if the user cancels\r\n * the promise. Canceling results in the promise having a status of \'resolved\'.\r\n */\n function Deferred() {\n var _this;\n\n var executable = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : function () {};\n var onResolve = arguments.length > 1 ? arguments[1] : undefined;\n var onReject = arguments.length > 2 ? arguments[2] : undefined;\n var onCancel = arguments.length > 3 ? arguments[3] : undefined;\n\n _classCallCheck(this, Deferred);\n\n if (typeof executable !== \'function\') {\n throw new Error("Cannot create new Deferred. Executable must be a function.");\n }\n\n if (typeof onResolve !== \'undefined\' && typeof onResolve !== \'function\') {\n throw new Error("Cannot create new Deferred. OnResolve must be a function.");\n }\n\n if (typeof onReject !== \'undefined\' && typeof onReject !== \'function\') {\n throw new Error("Cannot create new Deferred. OnReject must be a function.");\n }\n\n if (typeof onCancel !== \'undefined\' && typeof onCancel !== \'function\') {\n throw new Error("Cannot create new Deferred. OnCancel must be a function.");\n }\n\n var res;\n var rej;\n var cancel;\n var status = {\n resolved: false,\n rejected: false,\n canceled: false,\n pending: true\n };\n _this = _super.call(this, function (resolve, reject) {\n // Store the resolver\n res = function res(value) {\n if (status.pending) {\n status.resolved = true;\n status.pending = false;\n\n if (typeof onResolve === \'function\') {\n value = onResolve(value);\n }\n\n return resolve(value);\n }\n }; // Store the rejecter\n\n\n rej = function rej(value) {\n if (status.pending) {\n status.rejected = true;\n status.pending = false;\n\n if (typeof onReject === \'function\') {\n value = onReject(value);\n }\n\n return reject(value);\n }\n }; // Store the canceler\n\n\n cancel = function cancel(value) {\n if (status.pending) {\n status.canceled = true;\n status.pending = false;\n\n if (typeof onCancel === \'function\') {\n value = onCancel(value);\n }\n\n return resolve(value);\n }\n }; // Run the executable with custom resolver and rejecter\n\n\n executable(res, rej, cancel);\n });\n _this._status = status;\n _this._resolve = res;\n _this._reject = rej;\n _this._cancel = cancel;\n _this._executable = executable;\n return _this;\n }\n /**\r\n * Gets the resolved state of the promise.\r\n *\r\n * @readonly\r\n */\n\n\n _createClass(Deferred, [{\n key: "resolved",\n get: function get() {\n return this._status.resolved;\n }\n /**\r\n * Gets the rejected state of the promise.\r\n *\r\n * @readonly\r\n */\n\n }, {\n key: "rejected",\n get: function get() {\n return this._status.rejected;\n }\n /**\r\n * Gets the canceled state of the promise.\r\n *\r\n * @readonly\r\n */\n\n }, {\n key: "canceled",\n get: function get() {\n return this._status.canceled;\n }\n /**\r\n * Gets the pending state of the promise.\r\n *\r\n * @readonly\r\n */\n\n }, {\n key: "pending",\n get: function get() {\n return this._status.pending;\n }\n /**\r\n * Force the promise to resolve.\r\n *\r\n * @param {any=} value - Value to pass to the resolver.\r\n *\r\n * @returns {any} - The return value of the resolver function.\r\n */\n\n }, {\n key: "resolve",\n value: function resolve(value) {\n return this._resolve(value);\n }\n /**\r\n * Force the promise to reject.\r\n *\r\n * @param {any=} value - Value to pass to the rejecter.\r\n *\r\n * @returns {any} - The return value of the rejecter function.\r\n */\n\n }, {\n key: "reject",\n value: function reject(value) {\n return this._reject(value);\n }\n /**\r\n * Force the promise to resolve and set the canceled state to true.\r\n *\r\n * @param {any=} value - Value to pass to the canceller.\r\n *\r\n * @returns {any} - The return value of the canceller function.\r\n */\n\n }, {\n key: "cancel",\n value: function cancel(value) {\n return this._cancel(value);\n }\n /**\r\n * Run the promise function to try to resolve the promise. Promise must be\r\n * pending.\r\n *\r\n * @param {...any} args - Optional arguments to pass after resolve and reject.\r\n */\n\n }, {\n key: "execute",\n value: function execute() {\n if (this.pending) {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n this._executable.apply(this, [this._resolve, this._reject, this._cancel].concat(args));\n }\n }\n /**\r\n * Return a canceled deferred promise.\r\n *\r\n * @param {any=} value - Value to cancel the promise with.\r\n *\r\n * @returns {Deferred}\r\n */\n\n }], [{\n key: "cancel",\n value: function cancel(value) {\n return new Deferred(function (_resolve, _reject, cancel) {\n cancel(value);\n });\n }\n /**\r\n * Return a new Deferred promise that will resolve or reject once all promises\r\n * in the input array have been resolved or one promise is canceled or rejected.\r\n * Promises in the array that are Deferred promises will be manually resolved,\r\n * rejected or canceled when calling resolve, reject or cancel on the return promise.\r\n *\r\n * @param {Array.} iterable - An iterable such as an array.\r\n * @param {Function=} onResolve - Optional function to execute once the promise\r\n * is resolved.\r\n * @param {Function=} onReject - Optional function to execute once the promise\r\n * is rejected.\r\n * @param {Function=} onCancel - Optional function to execute if the user cancels\r\n * the promise. Canceling results in the promise having a status of \'canceled\'.\r\n *\r\n * @returns Deferred\r\n */\n\n }, {\n key: "all",\n value: function all(iterable, onResolve, onReject, onCancel) {\n if (iterable == null || typeof iterable[Symbol.iterator] !== \'function\') {\n var e = "Cannot execute Deferred.all. First argument must be iterable.";\n\n if (typeof onReject === \'function\') {\n e = onReject(e);\n }\n\n return Deferred.reject(e);\n }\n\n var array = _toConsumableArray(iterable);\n\n var deferred = array.filter(function (item) {\n return item instanceof Deferred;\n });\n var result = new Deferred(undefined, function (resolveValue) {\n deferred.forEach(function (item) {\n item.resolve(resolveValue);\n });\n deferred.length = 0;\n\n if (typeof onResolve === \'function\') {\n return onResolve(resolveValue);\n } else {\n return resolveValue;\n }\n }, function (error) {\n deferred.forEach(function (item) {\n item.reject(error);\n });\n deferred.length = 0;\n\n if (typeof onReject === \'function\') {\n return onReject(error);\n } else {\n return error;\n }\n }, function (cancelValue) {\n deferred.forEach(function (item) {\n item.cancel(cancelValue);\n });\n deferred.length = 0;\n\n if (typeof onCancel === \'function\') {\n return onCancel(cancelValue);\n } else {\n return cancelValue;\n }\n });\n var numItems = array.length;\n var itemTracker = {\n failed: false,\n numResolved: 0,\n resolutions: []\n };\n array.forEach(function (item, index) {\n if (itemTracker.failed) {\n return;\n } else if (!(item instanceof Promise)) {\n itemTracker.resolutions[index] = item;\n itemTracker.numResolved += 1;\n\n if (itemTracker.numResolved === numItems) {\n result.resolve(itemTracker.resolutions);\n }\n\n return;\n }\n\n item.then(function (value) {\n if (!itemTracker.failed && !item.canceled) {\n itemTracker.resolutions[index] = value;\n itemTracker.numResolved += 1;\n\n if (itemTracker.numResolved === numItems) {\n result.resolve(itemTracker.resolutions);\n }\n } else if (!itemTracker.failed) {\n itemTracker.failed = true;\n result.cancel(value);\n }\n }, function (error) {\n if (!itemTracker.failed) {\n itemTracker.failed = true;\n result.reject(error);\n }\n });\n });\n return result;\n }\n }]);\n\n return Deferred;\n}( /*#__PURE__*/_wrapNativeSuper(Promise));\n\n/* harmony default export */ var core_Deferred = (Deferred);\n// CONCATENATED MODULE: ./src/core/Utils.js\nfunction Utils_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction Utils_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction Utils_createClass(Constructor, protoProps, staticProps) { if (protoProps) Utils_defineProperties(Constructor.prototype, protoProps); if (staticProps) Utils_defineProperties(Constructor, staticProps); return Constructor; }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/**\r\n * A collection of useful generic functions.\r\n *\r\n * @hideconstructor\r\n */\n\nvar Utils_Utils = /*#__PURE__*/function () {\n function Utils() {\n Utils_classCallCheck(this, Utils);\n }\n\n Utils_createClass(Utils, null, [{\n key: "createId",\n value:\n /**\r\n * @static\r\n *\r\n * Generate a unique id\r\n *\r\n * @returns {String}\r\n */\n function createId() {\n return \'xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx\'.replace(/[xy]/g, function (c) {\n var randomNumber = Math.floor((Date.now() + Math.random() * 16) % 16);\n\n if (c === \'x\') {\n return randomNumber.toString(16);\n } // Set bit 6 and 7 to 0 and 1\n\n\n return (randomNumber & 0x3 | 0x8).toString(16);\n });\n }\n /**\r\n * @static\r\n *\r\n * Check a name string against an array of strings to determine if it is unique.\r\n * If it isn\'t, append incremented trailing integers to the end of the name\r\n * until it is unique.\r\n *\r\n * @param {string} name - String name to make unique.\r\n * @param {Array.=} nameArray - Array of string names to check agains.\r\n *\r\n * @returns {string}\r\n */\n\n }, {\n key: "getUniqueName",\n value: function getUniqueName(name) {\n var nameArray = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n\n // If the name isn\'t in the array return it right away\n if (!nameArray.includes(name)) {\n return name;\n }\n\n var nameSet = new Set(nameArray); // Separate the name into string and trailing numbers\n\n var matchGroup = name.match(/\\d*$/);\n var index = matchGroup.index;\n var baseName = name.slice(0, index);\n var increment = Number(matchGroup[0]); // Find the highest trailing number value for the base of the name\n\n nameSet.forEach(function (setName) {\n var setMatchGroup = setName.match(/\\d*$/);\n\n if (setName.slice(0, setMatchGroup.index) === baseName) {\n var setIncrement = Number(setMatchGroup[0]);\n\n if (setIncrement > increment) {\n increment = setIncrement;\n }\n }\n }); // Increment the highest trailing number and append to the name\n\n return "".concat(baseName).concat(increment + 1);\n }\n /**\r\n * Return a deferred promise that will wait a given number of seconds before\r\n * resolving. Pass delta time in milliseconds to the deferred promise\'s execute\r\n * method in an update loop to progress time.\r\n *\r\n * @param {number} [seconds=0] - Number of seconds to wait before resolving.\r\n * @param {Object=} options - Optional options object\r\n * @param {Function} [options.onFinish] - Callback to execute once the wait time\r\n * is met.\r\n * @param {Function=} options.onProgress - Callback to execute each time the wait\r\n * time progresses towards the target number of seconds. The amount of progress\r\n * as a 0-1 percentage is passed as an argument.\r\n * @param {Function=} options.onCancel - Callback to execute if the user cancels\r\n * the wait before completion.\r\n * @param {Function=} options.onError - Callback to execute if the wait stops\r\n * because an error is encountered. The error message is passed as a parameter.\r\n *\r\n * @returns {Deferred}\r\n */\n\n }, {\n key: "wait",\n value: function wait() {\n var seconds = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n\n var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n onFinish = _ref.onFinish,\n onProgress = _ref.onProgress,\n onCancel = _ref.onCancel,\n onError = _ref.onError;\n\n // Make sure seconds is numeric\n if (typeof seconds !== \'number\') {\n console.warn("Invalid seconds value ".concat(seconds, " for wait. Defaulting to 0."));\n seconds = 0;\n } // Resolve immediately if the wait time is not greater than 0\n\n\n if (seconds <= 0) {\n if (typeof onFinish === \'function\') {\n onFinish();\n }\n\n return core_Deferred.resolve();\n }\n\n var currentTime = 0;\n var totalTime = seconds * 1000; // convert to milliseconds\n // Executable to pass to Deferred, meant to be run in an update loop\n\n var onUpdate = function onUpdate(resolve, reject, _cancel) {\n var deltaTime = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;\n\n if (typeof deltaTime !== \'number\') {\n var e = new Error("Invalid property wait deltaTime. DeltaTime must be a number.");\n reject(e);\n return;\n } // Make sure time has passed\n\n\n if (deltaTime === 0) {\n return;\n } // Signal progress\n\n\n currentTime += deltaTime;\n\n if (currentTime < 0) {\n currentTime = 0;\n }\n\n if (typeof onProgress === \'function\') {\n onProgress(Math.min(currentTime / totalTime, 1));\n } // Signal completion once time is up\n\n\n if (currentTime >= totalTime) {\n resolve();\n }\n };\n\n return new core_Deferred(onUpdate, onFinish, onError, onCancel);\n }\n /**\r\n * Get a random float number between a min (inclusive) and max (exclusive) value\r\n * @param {number} min minimum value\r\n * @param {number} max maximum value\r\n * @returns {float}\r\n */\n\n }, {\n key: "getRandomFloat",\n value: function getRandomFloat(min, max) {\n return Math.random() * (max - min) + min;\n }\n /**\r\n * Get a random integer number between a min (inclusive) and max (exclusive) value\r\n * @param {number} min minimum value\r\n * @param {number} max maximum value\r\n * @returns {integer}\r\n */\n\n }, {\n key: "getRandomInt",\n value: function getRandomInt(min, max) {\n min = Math.ceil(min);\n max = Math.floor(max);\n return Math.floor(Math.random() * (max - min)) + min;\n }\n }]);\n\n return Utils;\n}();\n\n/* harmony default export */ var core_Utils = (Utils_Utils);\n// CONCATENATED MODULE: ./src/core/MathUtils.js\nfunction MathUtils_toConsumableArray(arr) { return MathUtils_arrayWithoutHoles(arr) || MathUtils_iterableToArray(arr) || MathUtils_unsupportedIterableToArray(arr) || MathUtils_nonIterableSpread(); }\n\nfunction MathUtils_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."); }\n\nfunction MathUtils_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return MathUtils_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return MathUtils_arrayLikeToArray(o, minLen); }\n\nfunction MathUtils_iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction MathUtils_arrayWithoutHoles(arr) { if (Array.isArray(arr)) return MathUtils_arrayLikeToArray(arr); }\n\nfunction MathUtils_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction MathUtils_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction MathUtils_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction MathUtils_createClass(Constructor, protoProps, staticProps) { if (protoProps) MathUtils_defineProperties(Constructor.prototype, protoProps); if (staticProps) MathUtils_defineProperties(Constructor, staticProps); return Constructor; }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\nvar RadianToDegree = 180 / Math.PI;\nvar DegreeToRadian = Math.PI / 180;\n/**\n * A collection of useful math functions.\n *\n * @hideconstructor\n */\n\nvar MathUtils = /*#__PURE__*/function () {\n function MathUtils() {\n MathUtils_classCallCheck(this, MathUtils);\n }\n\n MathUtils_createClass(MathUtils, null, [{\n key: "toDegrees",\n value:\n /**\n * Convert the given angle from radians to degrees.\n *\n * @param {number} radians - Angle in radians.\n *\n * @returns {number} - Angle in degrees.\n */\n function toDegrees(radians) {\n return radians * RadianToDegree;\n }\n /**\n * Convert the given angle from degrees to radians.\n *\n * @param {number} degrees - Angle in degrees.\n *\n * @returns {number} - Angle in radians.\n */\n\n }, {\n key: "toRadians",\n value: function toRadians(degrees) {\n return degrees * DegreeToRadian;\n }\n /**\n * Linearly interpolate between two values.\n *\n * @param {number} from - Start value.\n * @param {number} to - Target value.\n * @param {number} factor - 0-1 amount to interpolate between from and to.\n *\n * @returns {number}\n */\n\n }, {\n key: "lerp",\n value: function lerp(from, to, factor) {\n return from + (to - from) * factor;\n }\n /**\n * Clamp a number between 2 values.\n *\n * @param {number} value - Value to clamp.\n * @param {number} [min=0] - Minumum value.\n * @param {number} [max=1] - Maximum value.\n *\n * @returns {number}\n */\n\n }, {\n key: "clamp",\n value: function clamp(value) {\n var min = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var max = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;\n return Math.max(min, Math.min(value, max));\n }\n /**\n * Calculates the closest point on a given 2D line segement\n * from a given 2D point.\n *\n * @param {Array.} a - First point on line segment.\n * @param {Array.} b - Second point on line segment.\n * @param {Array.} p - 2D point.\n *\n * @returns {Array.}\n */\n\n }, {\n key: "closestPointOnLine",\n value: function closestPointOnLine(a, b, p) {\n var distSqr = MathUtils.distanceSquared(a, b); // Line segment is a single point\n\n if (distSqr === 0) {\n return a;\n }\n\n var t = ((p[0] - a[0]) * (b[0] - a[0]) + (p[1] - a[1]) * (b[1] - a[1])) / distSqr;\n\n var point = MathUtils_toConsumableArray(a);\n\n if (t > 1) {\n point = MathUtils_toConsumableArray(b);\n } else if (t > 0) {\n point = [a[0] + t * (b[0] - a[0]), a[1] + t * (b[1] - a[1])];\n }\n\n return point;\n }\n /**\n * Gets the distance squared for two 2D points.\n * @param {Array.} a - 2D point.\n * @param {Array.} b - 2D point.\n *\n * @returns {number}\n */\n\n }, {\n key: "distanceSquared",\n value: function distanceSquared(a, b) {\n return (a[0] - b[0]) * (a[0] - b[0]) + (a[1] - b[1]) * (a[1] - b[1]);\n }\n /**\n * Triangulates a set of 2D points using an implementation\n * of the Bowyer-Watson incremental Delaunay triangulation.\n *\n * @param {Array.>} vertices - Array of 2D points.\n *\n * @returns {Array.>} - Array of triangle indices.\n */\n\n }, {\n key: "getDelaunayTriangulation",\n value: function getDelaunayTriangulation(vertices) {\n if (!vertices || vertices.length < 3) {\n throw new Error("Cannot get delaunay triangulation for points ".concat(vertices, ". Input must contain at least three points."));\n }\n\n var minX = Number.POSITIVE_INFINITY;\n var minY = Number.POSITIVE_INFINITY;\n var maxX = Number.NEGATIVE_INFINITY;\n var maxY = Number.NEGATIVE_INFINITY;\n vertices.forEach(function (v) {\n minX = v[0] < minX ? v[0] : minX;\n minY = v[1] < minY ? v[1] : minY;\n maxX = v[0] > maxX ? v[0] : maxX;\n maxY = v[1] > maxY ? v[1] : maxY;\n });\n var dX = maxX - minX;\n var dY = maxY - minY;\n var midX = (minX + maxX) / 2;\n var midY = (minY + maxY) / 2;\n var dMax = dX > dY ? dX : dY;\n var superIndices = [vertices.length, vertices.length + 1, vertices.length + 2];\n var vertsWithSuper = [].concat(MathUtils_toConsumableArray(vertices), [[midX - 20 * dMax, midY - dMax], [midX, midY + 20 * dMax], [midX + 20 * dMax, midY - dMax]]);\n var superSortedIndices = MathUtils.sortPointsCCW(superIndices, vertsWithSuper);\n var superTriangle = {\n indices: superSortedIndices,\n edges: [[superSortedIndices[0], superSortedIndices[1]], [superSortedIndices[1], superSortedIndices[2]], [superSortedIndices[2], superSortedIndices[0]]]\n };\n var triangles = [superTriangle];\n vertsWithSuper.forEach(function (newVert, newIndex) {\n var invalidTriangles = [];\n triangles.forEach(function (triangle) {\n if (MathUtils.isPointInCircumCircle(vertsWithSuper[triangle.indices[0]], vertsWithSuper[triangle.indices[1]], vertsWithSuper[triangle.indices[2]], newVert)) {\n invalidTriangles.push(triangle);\n }\n });\n var boundingPoly = [];\n invalidTriangles.forEach(function (triangle) {\n triangle.edges.forEach(function (edge) {\n var count = 0;\n invalidTriangles.forEach(function (otherTriangle) {\n if (triangle !== otherTriangle) {\n otherTriangle.edges.forEach(function (otherEdge) {\n if (edge[0] === otherEdge[0] && edge[1] === otherEdge[1] || edge[1] === otherEdge[0] && edge[0] === otherEdge[1]) {\n count += 1;\n }\n });\n }\n });\n if (count === 0) boundingPoly.push(edge);\n });\n });\n invalidTriangles.forEach(function (triangle) {\n triangles.splice(triangles.indexOf(triangle), 1);\n });\n boundingPoly.forEach(function (edge) {\n var sortedIndices = MathUtils.sortPointsCCW([edge[0], edge[1], newIndex], vertsWithSuper);\n triangles.push({\n indices: sortedIndices,\n edges: [[sortedIndices[0], sortedIndices[1]], [sortedIndices[1], sortedIndices[2]], [sortedIndices[2], sortedIndices[0]]]\n });\n });\n });\n var trianglesToRemove = [];\n triangles.forEach(function (triangle) {\n triangle.indices.forEach(function (index) {\n if (superIndices.includes(index)) {\n trianglesToRemove.push(triangle);\n }\n });\n });\n trianglesToRemove.forEach(function (triangle) {\n var index = triangles.indexOf(triangle);\n\n if (index !== -1) {\n triangles.splice(index, 1);\n }\n });\n return triangles.map(function (triangle) {\n return triangle.indices;\n });\n }\n /**\n * Determines if a given 2D point is within the cicrumcircle\n * defined by three 2D points. The triangle points must be in\n * counter-clockwise order a -> b -> c.\n *\n * @param {Array.} a - First triangle point.\n * @param {Array.} b - Second triangle point.\n * @param {Array.} c - Third triangle point.\n * @param {Array.} p - 2D point.\n *\n * @returns {boolean}\n */\n\n }, {\n key: "isPointInCircumCircle",\n value: function isPointInCircumCircle(a, b, c, p) {\n var ax = a[0] - p[0];\n var ay = a[1] - p[1];\n var bx = b[0] - p[0];\n var by = b[1] - p[1];\n var cx = c[0] - p[0];\n var cy = c[1] - p[1];\n return (ax * ax + ay * ay) * (bx * cy - cx * by) - (bx * bx + by * by) * (ax * cy - cx * ay) + (cx * cx + cy * cy) * (ax * by - bx * ay) > 0;\n }\n /**\n * Determines if a given 2D point is within a given triangle.\n *\n * @param {Array.} a - First triangle point.\n * @param {Array.} b - Second triangle point.\n * @param {Array.} c - Third triangle point.\n * @param {Array.} p - 2D point.\n *\n * @returns {boolean}\n */\n\n }, {\n key: "isPointInTriangle",\n value: function isPointInTriangle(a, b, c, p) {\n var denom = (b[1] - c[1]) * (a[0] - c[0]) + (c[0] - b[0]) * (a[1] - c[1]);\n var aVal = ((b[1] - c[1]) * (p[0] - c[0]) + (c[0] - b[0]) * (p[1] - c[1])) / denom;\n var bVal = ((c[1] - a[1]) * (p[0] - c[0]) + (a[0] - c[0]) * (p[1] - c[1])) / denom;\n var cVal = 1 - aVal - bVal;\n return aVal >= 0 && aVal <= 1 && bVal >= 0 && bVal <= 1 && cVal >= 0 && cVal <= 1;\n }\n /**\n * Gets the sorted indices of a given set of 2D points in\n * counter-clockwise order.\n *\n * @param {Array.} indices - List of indices.\n * @param {Array.>} vertices - List of 2D points.\n *\n * @returns {Array.>} - List of sorted indices.\n */\n\n }, {\n key: "sortPointsCCW",\n value: function sortPointsCCW(indices, vertices) {\n var centroid = [0, 0];\n indices.forEach(function (index) {\n centroid[0] += vertices[index][0];\n centroid[1] += vertices[index][1];\n });\n centroid[0] /= indices.length;\n centroid[1] /= indices.length;\n indices.sort(function (a, b) {\n var bVal = Math.atan2(vertices[b][1] - centroid[1], vertices[b][0] - centroid[0]);\n var aVal = Math.atan2(vertices[a][1] - centroid[1], vertices[a][0] - centroid[0]);\n return aVal - bVal;\n });\n return indices;\n }\n /**\n * Cacluates the area of a triangle\n * @param {Array.} a - First triangle point.\n * @param {Array.} b - Second triangle point.\n * @param {Array.} c - Third triangle point.\n *\n * @returns {number}\n */\n\n }, {\n key: "triangleArea",\n value: function triangleArea(a, b, c) {\n return Math.abs((a[0] * (b[1] - c[1]) + b[0] * (c[1] - a[1]) + c[0] * (a[1] - b[1])) * 0.5);\n }\n /**\n * Return the magnitude of a given vector array.\n *\n * @param {Array.} vector - Array consisting of numbers.\n *\n * @returns {number}\n */\n\n }, {\n key: "getVectorMagnitude",\n value: function getVectorMagnitude(vector) {\n if (!(vector instanceof Array)) {\n throw new Error("Cannot get magnitude for vector ".concat(vector, ". Input must be an Array numbers."));\n }\n\n var reducer = function reducer(accumulator, currentValue) {\n if (typeof currentValue !== \'number\') {\n throw new Error("Cannot get magnitude for vector ".concat(vector, ". All items in the input Array must be numbers."));\n }\n\n return accumulator + Math.pow(currentValue, 2);\n };\n\n return Math.sqrt(vector.reduce(reducer, 0));\n }\n /**\n * Return the dot product between two vectors.\n *\n * @param {Array.} vectorA - Array consisting of numbers.\n * @param {Array.} vectorB - Array consisting of numbers.\n *\n * @returns {number}\n */\n\n }, {\n key: "getDotProduct",\n value: function getDotProduct(vectorA, vectorB) {\n if (!(vectorA instanceof Array) || !(vectorB instanceof Array) || vectorA.length !== vectorB.length) {\n throw new Error("Cannot get dot product between ".concat(vectorA, " and ").concat(vectorB, ". Inputs must be vectors of the same length."));\n }\n\n var result = 0;\n vectorA.forEach(function (valueA, index) {\n var valueB = vectorB[index];\n\n if (typeof valueA !== \'number\' || typeof valueB !== \'number\') {\n throw new Error("Cannot get dot product between ".concat(vectorA, " and ").concat(vectorB, ". Vectors must only consist of numeric values."));\n }\n\n result += valueA * valueB;\n });\n return result;\n }\n /**\n * Return the angle in radians between vectorA and vectorB.\n *\n * @param {Array.} vectorA - Array consisting of numbers.\n * @param {Array.} vectorB - Array consisting of numbers.\n *\n * @returns {number}\n */\n\n }, {\n key: "getAngleBetween",\n value: function getAngleBetween(vectorA, vectorB) {\n var normalA = this.normalizeVector(MathUtils_toConsumableArray(vectorA));\n var normalB = this.normalizeVector(MathUtils_toConsumableArray(vectorB));\n var dot = this.getDotProduct(normalA, normalB);\n return Math.acos(this.clamp(dot, -1, 1));\n }\n /**\n * Multiply a 3x3 rotation matrix with a vector3.\n *\n * @param {Array.} vector3 - Array consisting of 3 numbers representing\n * a direction vector.\n * @param {Array.} matrix3 - An array of 9 numbers representing a row\n * major rotation matrix.\n *\n * @returns {Array.} - An array of 3 numbers representing the new direction\n * of the vector.\n */\n\n }, {\n key: "rotateVector",\n value: function rotateVector(vector3, matrix3) {\n if (!(vector3 instanceof Array) || vector3.length !== 3 || !vector3.every(function (v) {\n return typeof v === \'number\';\n })) {\n throw new Error("Cannot rotate vector ".concat(vector3, " by rotation matrix ").concat(matrix3, ". Input vector must be an array of 3 numbers."));\n }\n\n if (!(matrix3 instanceof Array) || matrix3.length !== 9 || !matrix3.every(function (v) {\n return typeof v === \'number\';\n })) {\n throw new Error("Cannot rotate vector ".concat(vector3, " by rotation matrix ").concat(matrix3, ". Input matrix3 must be an array of 9 numbers."));\n }\n\n var x = matrix3[0] * vector3[0] + matrix3[3] * vector3[1] + matrix3[6] * vector3[2];\n var y = matrix3[1] * vector3[0] + matrix3[4] * vector3[1] + matrix3[7] * vector3[2];\n var z = matrix3[2] * vector3[0] + matrix3[5] * vector3[1] + matrix3[8] * vector3[2];\n return [x, y, z];\n }\n /**\n * Normalize a given vector array.\n *\n * @param {Array.} vector - Array consisting of numbers.\n *\n * @returns {Array.} The original vector with normalized values, for chaining.\n */\n\n }, {\n key: "normalizeVector",\n value: function normalizeVector(vector) {\n var magnitude = this.getVectorMagnitude(vector);\n\n if (magnitude === 0) {\n vector.fill(0);\n } else {\n vector.forEach(function (value, index) {\n vector[index] = value / magnitude;\n });\n }\n\n return vector;\n }\n /**\n * Extract the 3x3 rotation matrix from a given 4x4 transformation matrix.\n *\n * @param {Array.} matrix4 - An array of 16 numbers representing a row\n * major transformation matrix.\n *\n * @returns {Array.} - An array of 9 numbers representing a row major\n * rotation matrix.\n */\n\n }, {\n key: "getRotationMatrix",\n value: function getRotationMatrix(matrix4) {\n if (!(matrix4 instanceof Array) || matrix4.length !== 16 || !matrix4.every(function (v) {\n return typeof v === \'number\';\n })) {\n throw new Error("Cannot convert matrix ".concat(matrix4, " to a rotation matrix. Input matrix must be an array of 16 numbers."));\n } // Extract scale\n\n\n var scaleX = 1 / (this.getVectorMagnitude(matrix4.slice(0, 4)) || 1);\n var scaleY = 1 / (this.getVectorMagnitude(matrix4.slice(4, 8)) || 1);\n var scaleZ = 1 / (this.getVectorMagnitude(matrix4.slice(8, 12)) || 1);\n return [matrix4[0] * scaleX, matrix4[1] * scaleX, matrix4[2] * scaleX, matrix4[4] * scaleY, matrix4[5] * scaleY, matrix4[6] * scaleY, matrix4[8] * scaleZ, matrix4[9] * scaleZ, matrix4[10] * scaleZ];\n }\n /**\n * Return an array containing the spherical coordinates of the given cartesian\n * xyz coordinates.\n *\n * @private\n *\n * @param {number} x - Position along the x axis.\n * @param {number} y - Position along the y axis.\n * @param {number} z - Position along the z axis.\n *\n * @returns {Array.} - An array consisting of three numberes where index\n * 0 represents the radius, index 1 represents the vertical/polar angle in radians\n * and index 2 represents the horizontal/azimuthal angle in radians.\n */\n\n }, {\n key: "cartesianToSpherical",\n value: function cartesianToSpherical(x, y, z) {\n var r = this.getVectorMagnitude([x, y, z]); // Return identity if the vector has no length\n\n if (r === 0) {\n return [0, 0, 0];\n }\n\n return [r, Math.acos(this.clamp(y / r, -1, 1)), Math.atan2(x, z)];\n }\n /**\n * Gradually change a value of a numeric property towards a goal over time using\n * a critically damped spring function.\n *\n * @param {number} currentValue - The starting value.\n * @param {number} targetValue- The goal value.\n * @param {Array.} [valueStore = [0, 0]] - An Array consisting of two\n * numbers where the first number holds the result value and the second holds\n * the velocity that resulted in that value. The same array should be provided\n * with each call to this function.\n * @param {number} [deltaTime = 1e-7] - The time since the last call to this function\n * in seconds.\n * @param {number} [smoothTime = 0.3] - The approximate amount of time in seconds\n * it should take to reach the target value.\n * @param {number} [maxSpeed = 1e7] - A clamping value for the maximum speed the\n * value can change.\n *\n * @returns {Array.} - The valueStore array.\n */\n\n }, {\n key: "dampValue",\n value: function dampValue(currentValue, targetValue) {\n var valueStore = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [0, 0];\n var deltaTime = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 1e-7;\n var smoothTime = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0.3;\n var maxSpeed = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 1e7;\n smoothTime = Math.max(0.0001, smoothTime);\n deltaTime = Math.max(1e-7, deltaTime); // Find the delta between values and use it to estimate the previous value\n\n var clampTime = maxSpeed * smoothTime;\n var deltaValue = currentValue - targetValue;\n var clampDeltaValue = this.clamp(deltaValue, -clampTime, clampTime);\n var lastValue = currentValue - clampDeltaValue; // Calculate damping factors\n\n var d1 = 2 / smoothTime;\n var d2 = d1 * deltaTime;\n var d3 = 1 / (1 + d2 + 0.5 * Math.pow(d2, 2) + 0.25 * Math.pow(d2, 3));\n var d4 = (valueStore[1] + d1 * clampDeltaValue) * deltaTime; // Damp the target value and update the velocity\n\n valueStore[0] = lastValue + (clampDeltaValue + d4) * d3;\n valueStore[1] = (valueStore[1] - d1 * d4) * d3; // Prevent overshooting\n\n if (targetValue - currentValue > 0 === valueStore[0] > targetValue) {\n valueStore[0] = targetValue;\n valueStore[1] = (valueStore[0] - targetValue) / deltaTime;\n }\n\n return valueStore;\n }\n }]);\n\n return MathUtils;\n}();\n\n/* harmony default export */ var core_MathUtils = (MathUtils);\n// CONCATENATED MODULE: ./src/core/animpack/Easing.js\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/**\n * @typedef {Object} EasingObject Object containing easing functions\n * @property {Function} In - Easing \'In\' function. Should use the signature (k:number):number.\n * @property {Function} Out - Easing \'Out\' function. Should use the signature (k:number):number.\n * @property {Function} InOut - Easing \'InOut\' function. Should use the signature (k:number):number.\n */\n\n/**\n * Linear Easing\n * @type {EasingObject}\n */\nvar Linear = {\n None: function None(k) {\n return k;\n },\n In: function In(k) {\n return k;\n },\n Out: function Out(k) {\n return k;\n },\n InOut: function InOut(k) {\n return k;\n }\n};\n/**\n * Quadratic Easing\n * @type {EasingObject}\n */\n\nvar Quadratic = {\n In: function In(k) {\n return k * k;\n },\n Out: function Out(k) {\n return k * (2 - k);\n },\n InOut: function InOut(k) {\n k *= 2;\n\n if (k < 1) {\n return 0.5 * k * k;\n }\n\n return -0.5 * (--k * (k - 2) - 1);\n }\n};\n/**\n * Cubic Easing\n * @type {EasingObject}\n */\n\nvar Cubic = {\n In: function In(k) {\n return k * k * k;\n },\n Out: function Out(k) {\n return --k * k * k + 1;\n },\n InOut: function InOut(k) {\n k *= 2;\n\n if (k < 1) {\n return 0.5 * k * k * k;\n }\n\n k -= 2;\n return 0.5 * (k * k * k + 2);\n }\n};\n/**\n * Quartic Easing\n * @type {EasingObject}\n */\n\nvar Quartic = {\n In: function In(k) {\n return k * k * k * k;\n },\n Out: function Out(k) {\n return 1 - --k * k * k * k;\n },\n InOut: function InOut(k) {\n k *= 2;\n\n if (k < 1) {\n return 0.5 * k * k * k * k;\n }\n\n k -= 2;\n return -0.5 * (k * k * k * k - 2);\n }\n};\n/**\n * Quintic Easing\n * @type {EasingObject}\n */\n\nvar Quintic = {\n In: function In(k) {\n return k * k * k * k * k;\n },\n Out: function Out(k) {\n return --k * k * k * k * k + 1;\n },\n InOut: function InOut(k) {\n k *= 2;\n\n if (k < 1) {\n return 0.5 * k * k * k * k * k;\n }\n\n k -= 2;\n return 0.5 * (k * k * k * k * k + 2);\n }\n};\n/**\n * Sinusoidal Easing\n * @type {EasingObject}\n */\n\nvar Sinusoidal = {\n In: function In(k) {\n return 1 - Math.cos(k * Math.PI / 2);\n },\n Out: function Out(k) {\n return Math.sin(k * Math.PI / 2);\n },\n InOut: function InOut(k) {\n return 0.5 * (1 - Math.cos(Math.PI * k));\n }\n};\n/**\n * Exponential Easing\n * @type {EasingObject}\n */\n\nvar Exponential = {\n In: function In(k) {\n return k === 0 ? 0 : Math.pow(1024, k - 1);\n },\n Out: function Out(k) {\n return k === 1 ? 1 : 1 - Math.pow(2, -10 * k);\n },\n InOut: function InOut(k) {\n if (k === 0) {\n return 0;\n }\n\n if (k === 1) {\n return 1;\n }\n\n k *= 2;\n\n if (k < 1) {\n return 0.5 * Math.pow(1024, k - 1);\n }\n\n return 0.5 * (-Math.pow(2, -10 * (k - 1)) + 2);\n }\n};\n/**\n * Circular Easing\n * @type {EasingObject}\n */\n\nvar Circular = {\n In: function In(k) {\n return 1 - Math.sqrt(1 - k * k);\n },\n Out: function Out(k) {\n return Math.sqrt(1 - --k * k);\n },\n InOut: function InOut(k) {\n k *= 2;\n\n if (k < 1) {\n return -0.5 * (Math.sqrt(1 - k * k) - 1);\n }\n\n k -= 2;\n return 0.5 * (Math.sqrt(1 - k * k) + 1);\n }\n};\n/**\n * Elastic Easing\n * @type {EasingObject}\n */\n\nvar Elastic = {\n In: function In(k) {\n var s;\n var a = 0.1;\n var p = 0.4;\n\n if (k === 0) {\n return 0;\n }\n\n if (k === 1) {\n return 1;\n }\n\n if (!a || a < 1) {\n a = 1;\n s = p / 4;\n } else {\n s = p * Math.asin(1 / a) / (2 * Math.PI);\n }\n\n k -= 1;\n return -(a * Math.pow(2, 10 * k) * Math.sin((k - s) * (2 * Math.PI) / p));\n },\n Out: function Out(k) {\n var s;\n var a = 0.1;\n var p = 0.4;\n\n if (k === 0) {\n return 0;\n }\n\n if (k === 1) {\n return 1;\n }\n\n if (!a || a < 1) {\n a = 1;\n s = p / 4;\n } else {\n s = p * Math.asin(1 / a) / (2 * Math.PI);\n }\n\n return a * Math.pow(2, -10 * k) * Math.sin((k - s) * (2 * Math.PI) / p) + 1;\n },\n InOut: function InOut(k) {\n var s;\n var a = 0.1;\n var p = 0.4;\n\n if (k === 0) {\n return 0;\n }\n\n if (k === 1) {\n return 1;\n }\n\n if (!a || a < 1) {\n a = 1;\n s = p / 4;\n } else {\n s = p * Math.asin(1 / a) / (2 * Math.PI);\n }\n\n k *= 2;\n\n if (k < 1) {\n k -= 1;\n return -0.5 * (a * Math.pow(2, 10 * k) * Math.sin((k - s) * (2 * Math.PI) / p));\n }\n\n k -= 1;\n return a * Math.pow(2, -10 * k) * Math.sin((k - s) * (2 * Math.PI) / p) * 0.5 + 1;\n }\n};\n/**\n * Back Easing\n * @type {EasingObject}\n */\n\nvar Back = {\n In: function In(k) {\n var s = 1.70158;\n return k * k * ((s + 1) * k - s);\n },\n Out: function Out(k) {\n var s = 1.70158;\n return --k * k * ((s + 1) * k + s) + 1;\n },\n InOut: function InOut(k) {\n var s = 1.70158 * 1.525;\n k *= 2;\n\n if (k < 1) {\n return 0.5 * (k * k * ((s + 1) * k - s));\n }\n\n k -= 2;\n return 0.5 * (k * k * ((s + 1) * k + s) + 2);\n }\n};\n/**\n * Bounce Easing\n * @type {EasingObject}\n */\n\nvar Bounce = {\n In: function In(k) {\n return 1 - Bounce.Out(1 - k);\n },\n Out: function Out(k) {\n if (k < 1 / 2.75) {\n return 7.5625 * k * k;\n } else if (k < 2 / 2.75) {\n k -= 1.5;\n return 7.5625 * (k / 2.75) * k + 0.75;\n } else if (k < 2.5 / 2.75) {\n k -= 2.25;\n return 7.5625 * (k / 2.75) * k + 0.9375;\n }\n\n k -= 2.625;\n return 7.5625 * (k / 2.75) * k + 0.984375;\n },\n InOut: function InOut(k) {\n if (k < 0.5) {\n return Bounce.In(k * 2) * 0.5;\n }\n\n return Bounce.Out(k * 2 - 1) * 0.5 + 0.5;\n }\n};\n// CONCATENATED MODULE: ./src/core/Messenger.js\nfunction Messenger_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction Messenger_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction Messenger_createClass(Constructor, protoProps, staticProps) { if (protoProps) Messenger_defineProperties(Constructor.prototype, protoProps); if (staticProps) Messenger_defineProperties(Constructor, staticProps); return Constructor; }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/* eslint-disable no-underscore-dangle */\n\n/**\n * Class that can execute functions when local messages are received. Local messages\n * are prefixed with the instance\'s id.\n *\n * @alias core/Messenger\n *\n * @property {core/Messenger} GlobalMessenger - A messenger that can be used for\n * global messaging. When using static listen and emit methods they are executed\n * on this messenger.\n * @property {Object} EVENTS - Built-in events that the Messenger emits.\n */\n\nvar Messenger_Messenger = /*#__PURE__*/function () {\n /**\n * @constructor\n *\n * @param {any=} id - Id for the object. If none is provided a new id will\n * be created. Id should be able to be represented as a string.\n */\n function Messenger(id) {\n Messenger_classCallCheck(this, Messenger);\n\n this._id = id !== undefined ? id : core_Utils.createId();\n this._dispatcher = window;\n this._callbacks = {};\n this._eventListeners = {};\n }\n /**\n * Gets the string id of the object.\n *\n * @readonly\n * @type {string}\n */\n\n\n Messenger_createClass(Messenger, [{\n key: "id",\n get: function get() {\n return this._id;\n }\n /**\n * Prefix a message with the instance id.\n *\n * @private\n *\n * @param {string} message\n *\n * @returns {string}\n */\n\n }, {\n key: "_createLocalMessage",\n value: function _createLocalMessage(message) {\n return "".concat(this.id, ".").concat(message);\n }\n /**\n * Return a function that will call a callback function and supply the event\'s\n * detail property as an argument.\n *\n * @private\n *\n * @param {Function} callback\n *\n * @returns {Function}\n */\n\n }, {\n key: "_createListener",\n value: function _createListener(callback) {\n return function (e) {\n var value;\n\n if (e.detail !== null) {\n value = e.detail;\n }\n\n callback(value);\n };\n }\n /**\n * Create an event object and send it to listeners.\n *\n * @private\n *\n * @param {string} message - Event type name.\n * @param {any=} value - Value to send to listeners.\n *\n * @returns {CustomEvent}\n */\n\n }, {\n key: "_createEvent",\n value: function _createEvent(message, value) {\n return new CustomEvent(message, {\n detail: value\n });\n }\n /**\n * Register an event.\n *\n * @private\n *\n * @param {string} message - Event type name.\n * @param {Function} listener - A listener function generated using _createListener.\n */\n\n }, {\n key: "_addListener",\n value: function _addListener(message, listener) {\n this._dispatcher.addEventListener(this._createLocalMessage(message), listener);\n }\n /**\n * Unregister an event.\n *\n * @private\n *\n * @param {string} message - Event type name.\n * @param {Function} listener - A listener function generated using _createListener.\n */\n\n }, {\n key: "_removeListener",\n value: function _removeListener(message, listener) {\n this._dispatcher.removeEventListener(this._createLocalMessage(message), listener);\n }\n /**\n * Execute a function when a message is received for this object.\n *\n * @param {string} message - The message to listen for.\n * @param {Function} callback - Function to execute once the message is received.\n */\n\n }, {\n key: "listenTo",\n value: function listenTo(message, callback) {\n if (typeof callback !== \'function\') {\n throw new Error("Cannot add listener for ".concat(message, " on ").concat(this.id, ". Callback must be a function."));\n }\n\n if (this._callbacks[message] === undefined) {\n this._callbacks[message] = [];\n this._eventListeners[message] = [];\n }\n\n var listener = this._createListener(callback);\n\n this._callbacks[message].push(callback);\n\n this._eventListeners[message].push(listener);\n\n this._addListener(message, listener);\n }\n /**\n * Prevent a function from being executed when a message is received for this\n * object.\n *\n * @param {string} message - The message to stop listening for.\n * @param {Function=} callback - Optional callback to remove. If none is defined,\n * remove all callbacks for the message.\n */\n\n }, {\n key: "stopListening",\n value: function stopListening(message, callback) {\n if (this._callbacks[message] === undefined) {\n return;\n } else if (callback === undefined) {\n // If no callback was defined, call stopListening on all callbacks for the message\n for (var i = this._callbacks[message].length - 1; i > -1; i--) {\n this.stopListening(message, this._callbacks[message][i]);\n }\n\n return;\n } // If a callback was defined, make sure it\'s a listener\n\n\n var index = this._callbacks[message].indexOf(callback);\n\n if (index === -1) {\n return;\n }\n\n var listener = this._eventListeners[message][index];\n\n this._removeListener(message, listener);\n\n this._callbacks[message].splice(index, 1);\n\n this._eventListeners[message].splice(index, 1);\n\n if (this._callbacks[message].length === 0) {\n delete this._callbacks[message];\n delete this._eventListeners[message];\n }\n }\n /**\n * De-register callback(s) from being executed when messages matching the given\n * regular expression are received.\n *\n * @param {Regexp} regexp - regexp - The regular expression to filter messages with.\n * @param {Function=} callback - Optional callback to remove. If none is defined,\n * remove all callbacks for messages matching the regular expression.\n */\n\n }, {\n key: "stopListeningByRegexp",\n value: function stopListeningByRegexp(regexp, callback) {\n var _this = this;\n\n var messages = Object.keys(this._callbacks).filter(function (message) {\n return regexp.test(message);\n });\n messages.forEach(function (message) {\n _this.stopListening(message, callback);\n });\n }\n /**\n * Prevent any functions from being executed when any message is received for\n * this object.\n */\n\n }, {\n key: "stopListeningToAll",\n value: function stopListeningToAll() {\n var messages = Object.keys(this._callbacks);\n\n for (var i = messages.length - 1; i > -1; i--) {\n this.stopListening(messages[i]);\n }\n }\n /**\n * Send a message, causing listener functions for the message on this object\n * to be executed.\n *\n * @param {string} message - The message to emit.\n * @param {any=} value - Optional argument to pass to listener callbacks.\n */\n\n }, {\n key: "emit",\n value: function emit(message, value) {\n if (this._callbacks[message] === undefined) {\n return;\n }\n\n message = this._createLocalMessage(message);\n\n var event = this._createEvent(message, value);\n\n this._dispatcher.dispatchEvent(event);\n }\n /**\n * Execute a function when a message is received for the global Messenger instance.\n *\n * @static\n *\n * @param {string} message - The message to listen for.\n * @param {Function} callback - Function to execute once the message is received.\n */\n\n }], [{\n key: "listenTo",\n value: function listenTo(message, callback, messenger) {\n this.GlobalMessenger.listenTo(message, callback, messenger);\n }\n /**\n * Prevent a function from being executed when a message is received for the\n * global Messenger instance.\n *\n * @static\n *\n * @param {string} message - The message to stop listening for.\n * @param {Function=} callback - Optional callback to remove. If none is defined,\n * remove all callbacks for the message.\n */\n\n }, {\n key: "stopListening",\n value: function stopListening(message, callback) {\n this.GlobalMessenger.stopListening(message, callback);\n }\n /**\n * De-register callback(s) from being executed on the global messengerr instance\n * when messages matching the given regular expression are received.\n *\n * @param {Regexp} regexp - regexp - The regular expression to filter messages with.\n * @param {Function=} callback - Optional callback to remove. If none is defined,\n * remove all callbacks for messages matching the regular expression.\n */\n\n }, {\n key: "stopListeningByRegexp",\n value: function stopListeningByRegexp(regexp, callback) {\n var _this2 = this;\n\n var messages = Object.keys(this.GlobalMessenger._callbacks).filter(function (message) {\n return regexp.test(message);\n });\n messages.forEach(function (message) {\n _this2.stopListening(message, callback);\n });\n }\n /**\n * Prevent any functions from being executed when any message is received for\n * the global Messenger instance.\n *\n * @static\n */\n\n }, {\n key: "stopListeningToAll",\n value: function stopListeningToAll() {\n this.GlobalMessenger.stopListeningToAll();\n }\n /**\n * Send a message, causing listener functions for the message on the global Messenger\n * instance to be executed.\n *\n * @static\n *\n * @param {string} message - The message to emit.\n * @param {any=} value - Optional argument to pass to listener callbacks.\n */\n\n }, {\n key: "emit",\n value: function emit(message, value) {\n this.GlobalMessenger.emit(message, value);\n }\n }]);\n\n return Messenger;\n}();\n\nObject.defineProperties(Messenger_Messenger, {\n GlobalMessenger: {\n value: new Messenger_Messenger(),\n writable: false\n },\n EVENTS: {\n value: {},\n writable: false\n }\n});\n/* harmony default export */ var core_Messenger = (Messenger_Messenger);\n// CONCATENATED MODULE: ./src/Babylon.js/Messenger.js\nfunction Messenger_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { Messenger_typeof = function _typeof(obj) { return typeof obj; }; } else { Messenger_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return Messenger_typeof(obj); }\n\nfunction Babylon_js_Messenger_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction Babylon_js_Messenger_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction Babylon_js_Messenger_createClass(Constructor, protoProps, staticProps) { if (protoProps) Babylon_js_Messenger_defineProperties(Constructor.prototype, protoProps); if (staticProps) Babylon_js_Messenger_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return _get(target, property, receiver || target); }\n\nfunction _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = Messenger_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction Messenger_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) Messenger_setPrototypeOf(subClass, superClass); }\n\nfunction Messenger_setPrototypeOf(o, p) { Messenger_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return Messenger_setPrototypeOf(o, p); }\n\nfunction Messenger_createSuper(Derived) { var hasNativeReflectConstruct = Messenger_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = Messenger_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = Messenger_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return Messenger_possibleConstructorReturn(this, result); }; }\n\nfunction Messenger_possibleConstructorReturn(self, call) { if (call && (Messenger_typeof(call) === "object" || typeof call === "function")) { return call; } return Messenger_assertThisInitialized(self); }\n\nfunction Messenger_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction Messenger_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction Messenger_getPrototypeOf(o) { Messenger_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return Messenger_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/**\r\n * @extends core/Messenger\r\n * @alias Babylon.js/Messenger\r\n */\n\nvar Babylon_js_Messenger_Messenger = /*#__PURE__*/function (_CoreMessenger) {\n Messenger_inherits(Messenger, _CoreMessenger);\n\n var _super = Messenger_createSuper(Messenger);\n\n /**\r\n * @constructor\r\n *\r\n * @param {any=} id - Id for the object. If none is provided a new id will\r\n * be created. Id should be able to be represented as a string.\r\n */\n function Messenger(id) {\n var _this;\n\n Babylon_js_Messenger_classCallCheck(this, Messenger);\n\n _this = _super.call(this, id);\n _this._events = {};\n return _this;\n }\n\n Babylon_js_Messenger_createClass(Messenger, [{\n key: "_createListener",\n value: function _createListener(callback) {\n return function (value) {\n callback(value);\n };\n }\n }, {\n key: "_addListener",\n value: function _addListener(message, listener) {\n this._events[message].add(listener);\n }\n }, {\n key: "_removeListener",\n value: function _removeListener(message, listener) {\n this._events[message].removeCallback(listener);\n }\n }, {\n key: "listenTo",\n value: function listenTo(message, callback) {\n if (this._events[message] === undefined) {\n this._events[message] = new BABYLON.Observable();\n }\n\n try {\n _get(Messenger_getPrototypeOf(Messenger.prototype), "listenTo", this).call(this, message, callback);\n } catch (e) {\n // Clean up the observable if nothing is listening to it\n if (!this._events[message].hasObservers()) {\n delete this._events[message];\n throw e;\n }\n }\n }\n }, {\n key: "stopListening",\n value: function stopListening(message, callback) {\n var event = this._events[message];\n\n if (event === undefined) {\n return;\n }\n\n _get(Messenger_getPrototypeOf(Messenger.prototype), "stopListening", this).call(this, message, callback);\n\n if (!event.hasObservers()) {\n delete this._events[message];\n }\n }\n }, {\n key: "emit",\n value: function emit(message, value) {\n var event = this._events[message];\n\n if (event === undefined) {\n return;\n }\n\n event.notifyObservers(value);\n }\n }]);\n\n return Messenger;\n}(core_Messenger);\n\nObject.defineProperty(Babylon_js_Messenger_Messenger, \'GlobalMessenger\', {\n value: new Babylon_js_Messenger_Messenger(),\n writable: false\n});\n/* harmony default export */ var Babylon_js_Messenger = (Babylon_js_Messenger_Messenger);\n// CONCATENATED MODULE: ./src/core/AbstractHostFeature.js\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || AbstractHostFeature_unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\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."); }\n\nfunction AbstractHostFeature_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return AbstractHostFeature_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return AbstractHostFeature_arrayLikeToArray(o, minLen); }\n\nfunction AbstractHostFeature_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction AbstractHostFeature_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction AbstractHostFeature_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction AbstractHostFeature_createClass(Constructor, protoProps, staticProps) { if (protoProps) AbstractHostFeature_defineProperties(Constructor.prototype, protoProps); if (staticProps) AbstractHostFeature_defineProperties(Constructor, staticProps); return Constructor; }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/**\r\n * Base class for all host features. Keeps a reference to the host object managing\r\n * the feature.\r\n *\r\n * @abstract\r\n *\r\n * @property {Object} EVENTS - Built-in messages that the feature emits. When the\r\n * feature is added to a {@link core/HostObject}, event names will be prefixed by the\r\n * name of the feature class + \'.\'.\r\n * @property {string} [EVENTS.update=onUpdate] - Message that is emitted after\r\n * each call to [update]{@link AbstractHostFeature#update}.\r\n * @property {Object} SERVICES - Any AWS services that are necessary for the\r\n * feature to function.\r\n */\n\nvar AbstractHostFeature_AbstractHostFeature = /*#__PURE__*/function () {\n /**\r\n * @constructor\r\n *\r\n * @param {core/HostObject} host - The HostObject managing the feature.\r\n */\n function AbstractHostFeature(host) {\n AbstractHostFeature_classCallCheck(this, AbstractHostFeature);\n\n this._host = host;\n }\n /**\r\n * Adds a namespace to the host with the name of the feature to contain properties\r\n * and methods from the feature that users of the host need access to.\r\n */\n\n\n AbstractHostFeature_createClass(AbstractHostFeature, [{\n key: "installApi",\n value: function installApi() {\n var _this = this;\n\n var events = {};\n var api = {\n EVENTS: events\n }; // Add the class name to event names\n\n Object.entries(this.constructor.EVENTS).forEach(function (_ref) {\n var _ref2 = _slicedToArray(_ref, 2),\n name = _ref2[0],\n value = _ref2[1];\n\n events[name] = "".concat(_this.constructor.name, ".").concat(value);\n });\n this._host[this.constructor.name] = api;\n return api;\n }\n /**\r\n * Gets the host that manages the feature.\r\n *\r\n * @readonly\r\n */\n\n }, {\n key: "host",\n get: function get() {\n return this._host;\n }\n /**\r\n * Gets the engine owner object of the host.\r\n *\r\n * @readonly\r\n */\n\n }, {\n key: "owner",\n get: function get() {\n return this._host.owner;\n }\n /**\r\n * Listen to a feature message from the host object.\r\n *\r\n * @param {string} message - Message to listen for.\r\n * @param {Function} callback - The callback to execute when the message is received.\r\n */\n\n }, {\n key: "listenTo",\n value: function listenTo(message, callback) {\n this._host.listenTo(message, callback);\n }\n /**\r\n * Listen to a feature message from the global messenger. Feature messages will\r\n * be prefixed with the class name of the feature.\r\n *\r\n * @param {string} message - Message to listen for.\r\n * @param {Function} callback - The callback to execute when the message is received.\r\n */\n\n }, {\n key: "stopListening",\n value:\n /**\r\n * Stop listening to a message from the host object.\r\n *\r\n * @param {string} message - Message to stop listening for.\r\n * @param {Function=} callback - Optional callback to remove. If none is defined,\r\n * remove all callbacks for the message.\r\n */\n function stopListening(message, callback) {\n this._host.stopListening(message, callback);\n }\n /**\r\n * Stop listening to a message from the global messenger.\r\n *\r\n * @param {string} message - Message to stop listening for.\r\n * @param {Function=} callback - Optional callback to remove. If none is defined,\r\n * remove all callbacks for the message.\r\n */\n\n }, {\n key: "stopListeningByRegexp",\n value:\n /**\r\n * Stop listening to a message matching the given regular expression from the\r\n * host object.\r\n *\r\n * @param {Regexp} regexp - The regular expression to stop listening for.\r\n * @param {Function=} callback - Optional callback to remove. If none is defined,\r\n * remove all callbacks for the message.\r\n */\n function stopListeningByRegexp(regexp, callback) {\n this._host.stopListeningByRegexp(regexp, callback);\n }\n /**\r\n * Stop listening to a message matching the given regular expression from the\r\n * global messenger.\r\n *\r\n * @param {Regexp} regexp - The regular expression to stop listening for.\r\n * @param {Function=} callback - Optional callback to remove. If none is defined,\r\n * remove all callbacks for the message.\r\n */\n\n }, {\n key: "stopListeningToAll",\n value:\n /**\r\n * Stop listening to all messages.\r\n */\n function stopListeningToAll() {\n this._host.stopListeningToAll();\n }\n /**\r\n * Stop listening to all feature messages.\r\n */\n\n }, {\n key: "emit",\n value:\n /**\r\n * Emit feature messages from the host. Feature messages will be prefixed with\r\n * the class name of the feature.\r\n *\r\n * @param {string} message - The message to emit.\r\n * @param {any=} value - Optional parameter to pass to listener callbacks.\r\n */\n function emit(message, value) {\n message = "".concat(this.constructor.name, ".").concat(message);\n\n this._host.emit(message, value);\n }\n /**\r\n * Emit feature messages from the global messenger. Feature messages will be prefixed\r\n * with the class name of the feature.\r\n *\r\n * @param {string} message - The message to emit.\r\n * @param {any=} value - Optional parameter to pass to listener callbacks.\r\n */\n\n }, {\n key: "update",\n value:\n /**\r\n * Executes each time the host is updated.\r\n *\r\n * @param {number} deltaTime - Amount of time since the last host update was\r\n * called.\r\n */\n function update(deltaTime) {\n this.emit(this.constructor.EVENTS.update, deltaTime);\n }\n /**\r\n * Clean up once the feature is no longer in use. Remove the feature namespace\r\n * from the host and remove reference to the host.\r\n */\n\n }, {\n key: "discard",\n value: function discard() {\n var _this2 = this;\n\n Object.keys(this._host[this.constructor.name]).forEach(function (name) {\n delete _this2._host[_this2.constructor.name][name];\n });\n delete this._host[this.constructor.name];\n delete this._host;\n }\n /**\r\n * Applies a sequence of mixin class factory functions to this class and\r\n * returns the result. Each function is expected to return a class that\r\n * extends the class it was given. The functions are applied in the order\r\n * that parameters are given, meaning that the first factory will\r\n * extend this base class.\r\n *\r\n * @param {...Function} mixinClassFactories Class factory functions that will\r\n * be applied.\r\n *\r\n * @returns {Class} A class that is the result of applying the factory functions.\r\n * The resulting class will always inherit from AbstractHostFeature.\r\n */\n\n }], [{\n key: "listenTo",\n value: function listenTo(message, callback) {\n message = "".concat(this.name, ".").concat(message);\n Babylon_js_Messenger.listenTo(message, callback);\n }\n }, {\n key: "stopListening",\n value: function stopListening(message, callback) {\n message = "".concat(this.name, ".").concat(message);\n Babylon_js_Messenger.stopListening(message, callback);\n }\n }, {\n key: "stopListeningByRegexp",\n value: function stopListeningByRegexp(regexp, callback) {\n regexp = new RegExp("^".concat(this.name, ".").concat(regexp.source.replace(/\\^/, \'\')));\n Babylon_js_Messenger.stopListeningByRegexp(regexp, callback);\n }\n }, {\n key: "stopListeningToAll",\n value: function stopListeningToAll() {\n Babylon_js_Messenger.stopListeningByRegexp(new RegExp("^".concat(this.name, ".")));\n }\n }, {\n key: "emit",\n value: function emit(message, value) {\n message = "".concat(this.name, ".").concat(message);\n Babylon_js_Messenger.emit(message, value);\n }\n }, {\n key: "mix",\n value: function mix() {\n var ResultClass = this;\n\n for (var _len = arguments.length, mixinClassFactories = new Array(_len), _key = 0; _key < _len; _key++) {\n mixinClassFactories[_key] = arguments[_key];\n }\n\n mixinClassFactories.forEach(function (mixinClassFactory) {\n ResultClass = mixinClassFactory(ResultClass);\n });\n return ResultClass;\n }\n }]);\n\n return AbstractHostFeature;\n}();\n\nObject.defineProperties(AbstractHostFeature_AbstractHostFeature, {\n EVENTS: {\n value: {\n update: \'onUpdate\'\n },\n writable: false\n },\n SERVICES: {\n value: {},\n writable: false\n }\n});\n/* harmony default export */ var core_AbstractHostFeature = (AbstractHostFeature_AbstractHostFeature);\n// CONCATENATED MODULE: ./src/core/HostObject.js\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction HostObject_construct(Parent, args, Class) { if (HostObject_isNativeReflectConstruct()) { HostObject_construct = Reflect.construct; } else { HostObject_construct = function _construct(Parent, args, Class) { var a = [null]; a.push.apply(a, args); var Constructor = Function.bind.apply(Parent, a); var instance = new Constructor(); if (Class) HostObject_setPrototypeOf(instance, Class.prototype); return instance; }; } return HostObject_construct.apply(null, arguments); }\n\nfunction HostObject_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { HostObject_typeof = function _typeof(obj) { return typeof obj; }; } else { HostObject_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return HostObject_typeof(obj); }\n\nfunction HostObject_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction HostObject_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction HostObject_createClass(Constructor, protoProps, staticProps) { if (protoProps) HostObject_defineProperties(Constructor.prototype, protoProps); if (staticProps) HostObject_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction HostObject_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) HostObject_setPrototypeOf(subClass, superClass); }\n\nfunction HostObject_setPrototypeOf(o, p) { HostObject_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return HostObject_setPrototypeOf(o, p); }\n\nfunction HostObject_createSuper(Derived) { var hasNativeReflectConstruct = HostObject_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = HostObject_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = HostObject_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return HostObject_possibleConstructorReturn(this, result); }; }\n\nfunction HostObject_possibleConstructorReturn(self, call) { if (call && (HostObject_typeof(call) === "object" || typeof call === "function")) { return call; } return HostObject_assertThisInitialized(self); }\n\nfunction HostObject_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction HostObject_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction HostObject_getPrototypeOf(o) { HostObject_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return HostObject_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n/**\r\n * Object that manages access to all Host features. Contains a reference to\r\n * engine-specific visuals if applicable.\r\n *\r\n * @extends core/Messenger\r\n * @alias core/HostObject\r\n *\r\n * @property {Object} EVENTS - Built-in messages that the Messenger emits.\r\n * @property {string} [EVENTS.update=\'onUpdate\'] - Message that is emitted after\r\n * each call to [update]{@link core/HostObject#update}.\r\n * @property {string} [EVENTS.addFeature=\'onAddFeature\'] - Message that is emitted\r\n * after each call to [addFeature]{@link core/HostObject#addFeature}.\r\n * @property {string} [EVENTS.removeFeature=\'onRemoveFeature\'] - Message that is emitted\r\n * after each call to [removeFeature]{@link core/HostObject#removeFeature}.\r\n */\n\nvar HostObject_HostObject = /*#__PURE__*/function (_Messenger) {\n HostObject_inherits(HostObject, _Messenger);\n\n var _super = HostObject_createSuper(HostObject);\n\n /**\r\n * @constructor\r\n *\r\n * @param {Object=} options - Options for the host.\r\n * @param {Object=} options.owner - Optional engine-specific owner of the host.\r\n */\n function HostObject() {\n var _this;\n\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n _ref$owner = _ref.owner,\n owner = _ref$owner === void 0 ? {} : _ref$owner;\n\n HostObject_classCallCheck(this, HostObject);\n\n // If an owner is specified, use its id for messaging\n _this = _super.call(this, owner.id);\n _this._owner = owner;\n _this._features = {};\n _this._waits = [];\n _this._lastUpdate = _this.now;\n return _this;\n }\n /**\r\n * Gets the engine owner object of the host.\r\n *\r\n * @readonly\r\n * @type {Object}\r\n */\n\n\n HostObject_createClass(HostObject, [{\n key: "owner",\n get: function get() {\n return this._owner;\n }\n /**\r\n * Gets the current time in milliseconds.\r\n *\r\n * @readonly\r\n * @type {number}\r\n */\n\n }, {\n key: "now",\n get: function get() {\n return Date.now();\n }\n /**\r\n * Gets the amount of time in milliseconds since update was last called.\r\n *\r\n * @readonly\r\n * @type {number}\r\n */\n\n }, {\n key: "deltaTime",\n get: function get() {\n return this.now - this._lastUpdate;\n }\n /**\r\n * This function should be called in the engine\'s render loop. Executes update\r\n * loops for all features.\r\n */\n\n }, {\n key: "update",\n value: function update() {\n var currentTime = this.now;\n var dt = this.deltaTime; // Progress stored waits\n\n this._waits.forEach(function (wait) {\n wait.execute(dt);\n }); // Update all features\n\n\n Object.values(this._features).forEach(function (feature) {\n feature.update(dt);\n }); // Notify listeners an update occured\n\n this.emit(this.constructor.EVENTS.update, dt);\n this._lastUpdate = currentTime;\n }\n /**\r\n * Return a deferred promise that will wait a given number of seconds before\r\n * resolving. The host will continuously update the wait promise during the\r\n * update loop until it resolves.\r\n *\r\n * @param {number} [seconds=0] - Number of seconds to wait before resolving.\r\n * @param {Object=} options - Optional options object\r\n * @param {Function} [options.onFinish] - Callback to execute once the wait time\r\n * is met.\r\n * @param {Function=} options.onProgress - Callback to execute each time the wait\r\n * time progresses towards the target number of seconds. The amount of progress\r\n * as a 0-1 percentage is passed as an argument.\r\n * @param {Function=} options.onCancel - Callback to execute if the user cancels\r\n * the wait before completion.\r\n * @param {Function=} options.onError - Callback to execute if the wait stops\r\n * because an error is encountered. The error message is passed as a parameter.\r\n *\r\n * @returns {Deferred}\r\n */\n\n }, {\n key: "wait",\n value: function wait(seconds) {\n var _this2 = this;\n\n var _ref2 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n onFinish = _ref2.onFinish,\n onProgress = _ref2.onProgress,\n onCancel = _ref2.onCancel,\n onError = _ref2.onError;\n\n var wait = core_Utils.wait(seconds, {\n onFinish: onFinish,\n onProgress: onProgress,\n onCancel: onCancel,\n onError: onError\n });\n\n this._waits.push(wait); // Once the wait promise is no longer pending remove it from the waits array\n\n\n var onComplete = function onComplete() {\n _this2._waits.splice(_this2._waits.indexOf(wait), 1);\n };\n\n wait.then(onComplete, onComplete);\n return wait;\n }\n /**\r\n * Instantiate a new Host feature and store it. Features must inherit from\r\n * AbstractHostFeature.\r\n *\r\n * @param {Class} FeatureClass - Class that will instantiate the feature. Must\r\n * extend {@link AbstractHostFeature}.\r\n * @param {boolean} [force=false] - Whether or not to overwrite an existing\r\n * feature if one of this type already exists on the object.\r\n * @param {...any} args - Additional arguments to pass to the FeatureClass\r\n * constructor. The HostObject will always be passed as the first argument.\r\n *\r\n * @returns {boolean} - Whether or not a feature was successfully added.\r\n */\n\n }, {\n key: "addFeature",\n value: function addFeature(FeatureClass) {\n var force = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n var inputType = HostObject_typeof(FeatureClass); // Make sure the FeatureClass can be executed\n\n\n if (inputType !== \'function\') {\n throw new Error("Cannot add feature to host ".concat(this.id, ". FeatureClass must be a class."));\n } // Make sure the feature is a host feature\n else if (!(FeatureClass.prototype instanceof core_AbstractHostFeature)) {\n throw new Error("Cannot add feature ".concat(FeatureClass.name, " to host ").concat(this.id, ". FeatureClass must extend AbstractHostFeature."));\n } // Check if the FeatureClass already exists on this object\n\n\n if (this._features[FeatureClass.name] !== undefined) {\n if (force) {\n console.warn("Feature ".concat(FeatureClass.name, " already exists on host ").concat(this.id, ". Existing feature will be overwritten."));\n } else {\n throw new Error("Feature ".concat(FeatureClass.name, " already exists on host ").concat(this.id, ". Use \'force\' argument to overwrite the feature."));\n }\n } // Initialize the feature\n\n\n for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n args[_key - 2] = arguments[_key];\n }\n\n var feature = HostObject_construct(FeatureClass, [this].concat(args));\n\n feature.installApi();\n this._features[FeatureClass.name] = feature;\n this.emit(this.constructor.EVENTS.addFeature, FeatureClass.name);\n return true;\n }\n /**\r\n * Remove a feature from the object.\r\n *\r\n * @param {string} typeName - Name of the type of feature to remove.\r\n *\r\n * @returns {boolean} - Whether or not a feature was successfully removed.\r\n */\n\n }, {\n key: "removeFeature",\n value: function removeFeature(typeName) {\n if (this._features[typeName] === undefined) {\n console.warn("Feature of type ".concat(typeName, " does not exist on host ").concat(this.id, ". No feature will be removed."));\n return false;\n } else {\n // Remove the feature\n this.emit(this.constructor.EVENTS.removeFeature, typeName);\n\n this._features[typeName].discard();\n\n delete this._features[typeName];\n return true;\n }\n }\n /**\r\n * Indicate whether a specified feature is installed on the host.\r\n *\r\n * @param {string} typeName - Name of the type of feature to look for.\r\n *\r\n * @returns {boolean}\r\n */\n\n }, {\n key: "hasFeature",\n value: function hasFeature(typeName) {\n return !!this._features[typeName];\n }\n /**\r\n * List the names of the features installed on the host.\r\n *\r\n * @returns {Array.}\r\n */\n\n }, {\n key: "listFeatures",\n value: function listFeatures() {\n return Object.keys(this._features);\n }\n }]);\n\n return HostObject;\n}(Babylon_js_Messenger);\n\nObject.defineProperty(HostObject_HostObject, \'EVENTS\', {\n value: _objectSpread(_objectSpread({}, Object.getPrototypeOf(HostObject_HostObject).EVENTS), {}, {\n update: \'onUpdate\',\n addFeature: \'onAddFeature\',\n removeFeature: \'onRemoveFeature\'\n }),\n writable: false\n});\n/* harmony default export */ var core_HostObject = (HostObject_HostObject);\n// CONCATENATED MODULE: ./src/Babylon.js/HostObject.js\nfunction Babylon_js_HostObject_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { Babylon_js_HostObject_typeof = function _typeof(obj) { return typeof obj; }; } else { Babylon_js_HostObject_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return Babylon_js_HostObject_typeof(obj); }\n\nfunction Babylon_js_HostObject_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction Babylon_js_HostObject_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction Babylon_js_HostObject_createClass(Constructor, protoProps, staticProps) { if (protoProps) Babylon_js_HostObject_defineProperties(Constructor.prototype, protoProps); if (staticProps) Babylon_js_HostObject_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction Babylon_js_HostObject_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) Babylon_js_HostObject_setPrototypeOf(subClass, superClass); }\n\nfunction Babylon_js_HostObject_setPrototypeOf(o, p) { Babylon_js_HostObject_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return Babylon_js_HostObject_setPrototypeOf(o, p); }\n\nfunction Babylon_js_HostObject_createSuper(Derived) { var hasNativeReflectConstruct = Babylon_js_HostObject_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = Babylon_js_HostObject_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = Babylon_js_HostObject_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return Babylon_js_HostObject_possibleConstructorReturn(this, result); }; }\n\nfunction Babylon_js_HostObject_possibleConstructorReturn(self, call) { if (call && (Babylon_js_HostObject_typeof(call) === "object" || typeof call === "function")) { return call; } return Babylon_js_HostObject_assertThisInitialized(self); }\n\nfunction Babylon_js_HostObject_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction Babylon_js_HostObject_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction Babylon_js_HostObject_getPrototypeOf(o) { Babylon_js_HostObject_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return Babylon_js_HostObject_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/**\r\n * @extends core/HostObject\r\n * @alias Babylon.js/HostObject\r\n */\n\nvar Babylon_js_HostObject_HostObject = /*#__PURE__*/function (_CoreHostObject) {\n Babylon_js_HostObject_inherits(HostObject, _CoreHostObject);\n\n var _super = Babylon_js_HostObject_createSuper(HostObject);\n\n /**\r\n * @constructor\r\n *\r\n * @param {Object=} options - Options for the host.\r\n * @param {Object=} options.owner - Optional engine-specific owner of the host.\r\n */\n function HostObject() {\n var _this;\n\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n Babylon_js_HostObject_classCallCheck(this, HostObject);\n\n _this = _super.call(this, options);\n\n if (_this._owner) {\n Object.defineProperty(Babylon_js_HostObject_assertThisInitialized(_this), \'deltaTime\', {\n get: function get() {\n return _this._owner.getEngine().getDeltaTime();\n }\n });\n }\n\n return _this;\n }\n\n Babylon_js_HostObject_createClass(HostObject, [{\n key: "now",\n get: function get() {\n return BABYLON.PrecisionDate.Now;\n }\n }]);\n\n return HostObject;\n}(core_HostObject);\n\n/* harmony default export */ var Babylon_js_HostObject = (Babylon_js_HostObject_HostObject);\n// CONCATENATED MODULE: ./src/core/FeatureDependentInterface.js\nfunction FeatureDependentInterface_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { FeatureDependentInterface_typeof = function _typeof(obj) { return typeof obj; }; } else { FeatureDependentInterface_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return FeatureDependentInterface_typeof(obj); }\n\nfunction FeatureDependentInterface_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction FeatureDependentInterface_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { FeatureDependentInterface_ownKeys(Object(source), true).forEach(function (key) { FeatureDependentInterface_defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { FeatureDependentInterface_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction FeatureDependentInterface_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction FeatureDependentInterface_slicedToArray(arr, i) { return FeatureDependentInterface_arrayWithHoles(arr) || FeatureDependentInterface_iterableToArrayLimit(arr, i) || FeatureDependentInterface_unsupportedIterableToArray(arr, i) || FeatureDependentInterface_nonIterableRest(); }\n\nfunction FeatureDependentInterface_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."); }\n\nfunction FeatureDependentInterface_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return FeatureDependentInterface_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return FeatureDependentInterface_arrayLikeToArray(o, minLen); }\n\nfunction FeatureDependentInterface_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction FeatureDependentInterface_iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction FeatureDependentInterface_arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction FeatureDependentInterface_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { FeatureDependentInterface_get = Reflect.get; } else { FeatureDependentInterface_get = function _get(target, property, receiver) { var base = FeatureDependentInterface_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return FeatureDependentInterface_get(target, property, receiver || target); }\n\nfunction FeatureDependentInterface_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = FeatureDependentInterface_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction FeatureDependentInterface_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) FeatureDependentInterface_setPrototypeOf(subClass, superClass); }\n\nfunction FeatureDependentInterface_setPrototypeOf(o, p) { FeatureDependentInterface_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return FeatureDependentInterface_setPrototypeOf(o, p); }\n\nfunction FeatureDependentInterface_createSuper(Derived) { var hasNativeReflectConstruct = FeatureDependentInterface_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = FeatureDependentInterface_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = FeatureDependentInterface_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return FeatureDependentInterface_possibleConstructorReturn(this, result); }; }\n\nfunction FeatureDependentInterface_possibleConstructorReturn(self, call) { if (call && (FeatureDependentInterface_typeof(call) === "object" || typeof call === "function")) { return call; } return FeatureDependentInterface_assertThisInitialized(self); }\n\nfunction FeatureDependentInterface_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction FeatureDependentInterface_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction FeatureDependentInterface_getPrototypeOf(o) { FeatureDependentInterface_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return FeatureDependentInterface_getPrototypeOf(o); }\n\nfunction FeatureDependentInterface_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction FeatureDependentInterface_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction FeatureDependentInterface_createClass(Constructor, protoProps, staticProps) { if (protoProps) FeatureDependentInterface_defineProperties(Constructor.prototype, protoProps); if (staticProps) FeatureDependentInterface_defineProperties(Constructor, staticProps); return Constructor; }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/* eslint-disable no-unused-vars */\n\n/* eslint-disable max-classes-per-file */\n\n/**\n * Class factory interface for features that are dependent on other features being\n * present on the host. Event dependencies will be listened for when a feature of\n * matching type is added to the host and will stop being listened for when one\n * is removed. If the feature is already present when constructed, events will\n * be listened for right away.\n *\n * @interface\n *\n * @property {Object} EVENT_DEPENDENCIES - Events that the feature should start/stop\n * listening for when a feature of type FeatureName is added/removed from the host.\n * Event dependencies should follow the signature:\n * { FeatureName: { eventName: callbackName, ... }, ... }\n */\n\nvar FeatureDependentInterface_FeatureDependentInterface = /*#__PURE__*/function () {\n function FeatureDependentInterface() {\n FeatureDependentInterface_classCallCheck(this, FeatureDependentInterface);\n }\n\n FeatureDependentInterface_createClass(FeatureDependentInterface, [{\n key: "_onFeatureAdded",\n value:\n /**\n * Start listening for event dependencies that match the given feature type.\n *\n * @private\n *\n * @param {string} typeName - type of feature to listen for.\n */\n function _onFeatureAdded(typeName) {}\n /**\n * Stop listening for event dependencies that match the given feature type.\n *\n * @private\n *\n * @param {string} typeName - type of feature to stop listening for.\n */\n\n }, {\n key: "_onFeatureRemoved",\n value: function _onFeatureRemoved(typeName) {}\n /**\n * @augments {@link AbstractHostFeature#discard}\n */\n\n }, {\n key: "discard",\n value: function discard() {}\n /**\n * Creates a class that implements {@link FeatureDependentInterface} and extends\n * a specified base class.\n *\n * @param {Class} BaseClass - The class to extend.\n *\n * @return {Class} A class that extends `BaseClass` and implements {@link FeatureDependentInterface}.\n */\n\n }], [{\n key: "Mixin",\n value: function Mixin(BaseClass) {\n var FeatureDependentMixin = /*#__PURE__*/function (_BaseClass) {\n FeatureDependentInterface_inherits(FeatureDependentMixin, _BaseClass);\n\n var _super = FeatureDependentInterface_createSuper(FeatureDependentMixin);\n\n function FeatureDependentMixin(host) {\n var _this;\n\n FeatureDependentInterface_classCallCheck(this, FeatureDependentMixin);\n\n _this = _super.call(this, host);\n _this._host = host; // No need to listen for events if the mixin is in the prototype chain multiple times\n\n if (!_this._initialized) {\n _this._initialized = true; // Start listening for feature events\n\n _this._onFeatureAdded = _this._onFeatureAdded.bind(FeatureDependentInterface_assertThisInitialized(_this));\n _this._onFeatureRemoved = _this._onFeatureRemoved.bind(FeatureDependentInterface_assertThisInitialized(_this));\n\n _this._host.listenTo(Babylon_js_HostObject.EVENTS.addFeature, _this._onFeatureAdded);\n\n _this._host.listenTo(Babylon_js_HostObject.EVENTS.removeFeature, _this._onFeatureRemoved); // Register features that already exist\n\n\n Object.keys(_this.constructor.EVENT_DEPENDENCIES).forEach(function (typeName) {\n if (_this._host[typeName] !== undefined) {\n _this._onFeatureAdded(typeName);\n }\n });\n }\n\n return _this;\n }\n\n FeatureDependentInterface_createClass(FeatureDependentMixin, [{\n key: "_onFeatureAdded",\n value: function _onFeatureAdded(typeName) {\n var _this2 = this;\n\n if (this.constructor.EVENT_DEPENDENCIES[typeName] !== undefined) {\n var events = this.constructor.EVENT_DEPENDENCIES[typeName];\n Object.entries(events).forEach(function (_ref) {\n var _ref2 = FeatureDependentInterface_slicedToArray(_ref, 2),\n eventName = _ref2[0],\n callback = _ref2[1];\n\n _this2[callback] = _this2[callback].bind(_this2);\n\n _this2._host.listenTo(_this2._host[typeName].EVENTS[eventName], _this2[callback]);\n });\n }\n }\n }, {\n key: "_onFeatureRemoved",\n value: function _onFeatureRemoved(typeName) {\n var _this3 = this;\n\n if (this.constructor.EVENT_DEPENDENCIES[typeName] !== undefined) {\n var events = this.constructor.EVENT_DEPENDENCIES[typeName];\n Object.entries(events).forEach(function (_ref3) {\n var _ref4 = FeatureDependentInterface_slicedToArray(_ref3, 2),\n eventName = _ref4[0],\n callback = _ref4[1];\n\n _this3._host.stopListening(_this3._host[typeName].EVENTS[eventName], _this3[callback]);\n });\n }\n }\n }, {\n key: "discard",\n value: function discard() {\n var _this4 = this;\n\n // Stop listening for feature events\n this._host.stopListening(Babylon_js_HostObject.EVENTS.addFeature, this._onFeatureAdded);\n\n this._host.stopListening(Babylon_js_HostObject.EVENTS.removeFeature, this._onFeatureRemoved); // Stop listening to feature-specific events\n\n\n Object.keys(this.constructor.EVENT_DEPENDENCIES).forEach(function (typeName) {\n if (_this4._host[typeName] !== undefined) {\n _this4._onFeatureRemoved(typeName);\n }\n });\n\n FeatureDependentInterface_get(FeatureDependentInterface_getPrototypeOf(FeatureDependentMixin.prototype), "discard", this).call(this);\n }\n }]);\n\n return FeatureDependentMixin;\n }(BaseClass);\n\n var EVENT_DEPENDENCIES = BaseClass.EVENT_DEPENDENCIES || {};\n Object.defineProperties(FeatureDependentMixin, {\n EVENT_DEPENDENCIES: {\n value: FeatureDependentInterface_objectSpread({}, EVENT_DEPENDENCIES),\n writable: false\n }\n });\n return FeatureDependentMixin;\n }\n }]);\n\n return FeatureDependentInterface;\n}();\n/**\n * Event dependencies should follow the signature:\n * {\n * FeatureName: {\n * // Events that the feature should start/stop listening for when a feature\n * // of type FeatureName is added/removed from the host\n * {\n * eventName: callbackName,\n * ...\n * },\n * }\n * }\n */\n\n\nObject.defineProperties(FeatureDependentInterface_FeatureDependentInterface, {\n EVENT_DEPENDENCIES: {\n value: {},\n writable: false\n }\n});\n/* harmony default export */ var core_FeatureDependentInterface = (FeatureDependentInterface_FeatureDependentInterface);\n// CONCATENATED MODULE: ./src/core/animpack/AnimationFeatureDependentInterface.js\nfunction AnimationFeatureDependentInterface_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { AnimationFeatureDependentInterface_typeof = function _typeof(obj) { return typeof obj; }; } else { AnimationFeatureDependentInterface_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return AnimationFeatureDependentInterface_typeof(obj); }\n\nfunction AnimationFeatureDependentInterface_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction AnimationFeatureDependentInterface_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { AnimationFeatureDependentInterface_ownKeys(Object(source), true).forEach(function (key) { AnimationFeatureDependentInterface_defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { AnimationFeatureDependentInterface_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction AnimationFeatureDependentInterface_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction AnimationFeatureDependentInterface_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction AnimationFeatureDependentInterface_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction AnimationFeatureDependentInterface_createClass(Constructor, protoProps, staticProps) { if (protoProps) AnimationFeatureDependentInterface_defineProperties(Constructor.prototype, protoProps); if (staticProps) AnimationFeatureDependentInterface_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction AnimationFeatureDependentInterface_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) AnimationFeatureDependentInterface_setPrototypeOf(subClass, superClass); }\n\nfunction AnimationFeatureDependentInterface_setPrototypeOf(o, p) { AnimationFeatureDependentInterface_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return AnimationFeatureDependentInterface_setPrototypeOf(o, p); }\n\nfunction AnimationFeatureDependentInterface_createSuper(Derived) { var hasNativeReflectConstruct = AnimationFeatureDependentInterface_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = AnimationFeatureDependentInterface_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = AnimationFeatureDependentInterface_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return AnimationFeatureDependentInterface_possibleConstructorReturn(this, result); }; }\n\nfunction AnimationFeatureDependentInterface_possibleConstructorReturn(self, call) { if (call && (AnimationFeatureDependentInterface_typeof(call) === "object" || typeof call === "function")) { return call; } return AnimationFeatureDependentInterface_assertThisInitialized(self); }\n\nfunction AnimationFeatureDependentInterface_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction AnimationFeatureDependentInterface_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction AnimationFeatureDependentInterface_getPrototypeOf(o) { AnimationFeatureDependentInterface_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return AnimationFeatureDependentInterface_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/* eslint-disable no-unused-vars */\n\n/* eslint-disable max-classes-per-file */\n\n/**\n * Class factory interface for features that are dependent on the AnimationFeature\n * being present on the host. Layer and animation events will automatically be\n * listened for once a AnimationFeature is added to the host and stopped once it\n * is removed.\n *\n * @interface\n * @extends FeatureDependentInterface\n *\n * @property {Object} EVENT_DEPENDENCIES - Events that the feature should start/stop\n * listening for when a feature of type FeatureName is added/removed from the host.\n * @property {Object} EVENT_DEPENDENCIES.AnimationFeature - Events that are\n * specific to the AnimationFeature.\n * @property {string} [EVENT_DEPENDENCIES.AnimationFeature.addLayer=\'_onLayerAdded\'] -\n * The name of the method that will be executed when AnimationFeature addLayer\n * events are emitted.\n * @property {string} [EVENT_DEPENDENCIES.AnimationFeature.removeLayer=\'_onLayerRemoved\'] -\n * The name of the method that will be executed when AnimationFeature removeLayer\n * events are emitted.\n * @property {string} [EVENT_DEPENDENCIES.AnimationFeature.renameLayer=\'_onLayerRenamed\'] -\n * The name of the method that will be executed when AnimationFeature renameLayer\n * events are emitted.\n * @property {string} [EVENT_DEPENDENCIES.AnimationFeature.addAnimation=\'_onAnimationAdded\'] -\n * The name of the method that will be executed when AnimationFeature addAnimation\n * events are emitted.\n * @property {string} [EVENT_DEPENDENCIES.AnimationFeature.removeAnimation=\'_onAnimationRemoved\'] -\n * The name of the method that will be executed when AnimationFeature removeAnimation\n * events are emitted.\n * @property {string} [EVENT_DEPENDENCIES.AnimationFeature.renameAnimation=\'_onAnimationRenamed\'] -\n * The name of the method that will be executed when AnimationFeature renameAnimation\n * events are emitted.\n */\n\nvar AnimationFeatureDependentInterface_AnimationFeatureDependentInterface = /*#__PURE__*/function (_FeatureDependentInte) {\n AnimationFeatureDependentInterface_inherits(AnimationFeatureDependentInterface, _FeatureDependentInte);\n\n var _super = AnimationFeatureDependentInterface_createSuper(AnimationFeatureDependentInterface);\n\n function AnimationFeatureDependentInterface() {\n AnimationFeatureDependentInterface_classCallCheck(this, AnimationFeatureDependentInterface);\n\n return _super.apply(this, arguments);\n }\n\n AnimationFeatureDependentInterface_createClass(AnimationFeatureDependentInterface, [{\n key: "_onLayerAdded",\n value:\n /**\n * Executed when animation layer added events are caught.\n *\n * @private\n *\n * @param {string} name - Name of the layer that was added.\n */\n function _onLayerAdded(_ref) {\n var name = _ref.name;\n }\n /**\n * Executed when animation layer removed events are caught.\n *\n * @private\n *\n * @param {string} name - Name of the layer that was removed.\n */\n\n }, {\n key: "_onLayerRemoved",\n value: function _onLayerRemoved(_ref2) {\n var name = _ref2.name;\n }\n /**\n * Executed when animation layer renamed events are caught.\n *\n * @private\n *\n * @param {string} oldName - Name of the layer that was renamed.\n * @param {string} newName - New name of the layer.\n */\n\n }, {\n key: "_onLayerRenamed",\n value: function _onLayerRenamed(_ref3) {\n var oldName = _ref3.oldName,\n newName = _ref3.newName;\n }\n /**\n * Executed when animation added events are caught.\n *\n * @private\n *\n * @param {string} layerName - Name of the layer that an animation was added to.\n * @param {string} animationName - Name of the animation that was added.\n */\n\n }, {\n key: "_onAnimationAdded",\n value: function _onAnimationAdded(_ref4) {\n var layerName = _ref4.layerName,\n animationName = _ref4.animationName;\n }\n /**\n * Executed when animation removed events are caught.\n *\n * @private\n *\n * @param {string} layerName - Name of the layer that an animation was removed from.\n * @param {string} animationName - Name of the animation that was removed.\n */\n\n }, {\n key: "_onAnimationRemoved",\n value: function _onAnimationRemoved(_ref5) {\n var layerName = _ref5.layerName,\n animationName = _ref5.animationName;\n }\n /**\n * Executed when animation renamed events are caught.\n *\n * @private\n *\n * @param {string} layerName - Name of the layer that an animation belongs to.\n * @param {string} oldName - Name of the animation that was renamed.\n * @param {string} newName - New name of the animation.\n */\n\n }, {\n key: "_onAnimationRenamed",\n value: function _onAnimationRenamed(_ref6) {\n var layerName = _ref6.layerName,\n oldName = _ref6.oldName,\n newName = _ref6.newName;\n }\n /**\n * Creates a class that implements {@link AnimationFeatureDependentInterface}\n * and extends a specified base class.\n *\n * @param {Class} BaseClass - The class to extend.\n *\n * @return {Class} A class that extends `BaseClass` and implements {@link AnimationFeatureDependentInterface}.\n */\n\n }], [{\n key: "Mixin",\n value: function Mixin(BaseClass) {\n var ParentClass = core_FeatureDependentInterface.Mixin(BaseClass);\n\n var AnimationFeatureDependentMixin = /*#__PURE__*/function (_ParentClass) {\n AnimationFeatureDependentInterface_inherits(AnimationFeatureDependentMixin, _ParentClass);\n\n var _super2 = AnimationFeatureDependentInterface_createSuper(AnimationFeatureDependentMixin);\n\n function AnimationFeatureDependentMixin() {\n AnimationFeatureDependentInterface_classCallCheck(this, AnimationFeatureDependentMixin);\n\n return _super2.apply(this, arguments);\n }\n\n AnimationFeatureDependentInterface_createClass(AnimationFeatureDependentMixin, [{\n key: "_onLayerAdded",\n value: function _onLayerAdded(_ref7) {\n var name = _ref7.name;\n }\n }, {\n key: "_onLayerRemoved",\n value: function _onLayerRemoved(_ref8) {\n var name = _ref8.name;\n }\n }, {\n key: "_onLayerRenamed",\n value: function _onLayerRenamed(_ref9) {\n var oldName = _ref9.oldName,\n newName = _ref9.newName;\n }\n }, {\n key: "_onAnimationAdded",\n value: function _onAnimationAdded(_ref10) {\n var layerName = _ref10.layerName,\n animationName = _ref10.animationName;\n }\n }, {\n key: "_onAnimationRemoved",\n value: function _onAnimationRemoved(_ref11) {\n var layerName = _ref11.layerName,\n animationName = _ref11.animationName;\n }\n }, {\n key: "_onAnimationRenamed",\n value: function _onAnimationRenamed(_ref12) {\n var layerName = _ref12.layerName,\n oldName = _ref12.oldName,\n newName = _ref12.newName;\n }\n }]);\n\n return AnimationFeatureDependentMixin;\n }(ParentClass);\n\n Object.defineProperties(AnimationFeatureDependentMixin, {\n EVENT_DEPENDENCIES: {\n value: AnimationFeatureDependentInterface_objectSpread(AnimationFeatureDependentInterface_objectSpread({}, ParentClass.EVENT_DEPENDENCIES), AnimationFeatureDependentInterface.EVENT_DEPENDENCIES),\n writable: false\n }\n });\n return AnimationFeatureDependentMixin;\n }\n }]);\n\n return AnimationFeatureDependentInterface;\n}(core_FeatureDependentInterface);\n\nObject.defineProperties(AnimationFeatureDependentInterface_AnimationFeatureDependentInterface, {\n EVENT_DEPENDENCIES: {\n value: {\n AnimationFeature: {\n addLayer: \'_onLayerAdded\',\n removeLayer: \'_onLayerRemoved\',\n renameLayer: \'_onLayerRenamed\',\n addAnimation: \'_onAnimationAdded\',\n removeAnimation: \'_onAnimationRemoved\',\n renameAnimation: \'_onAnimationRenamed\'\n }\n },\n writable: false\n }\n});\n/* harmony default export */ var animpack_AnimationFeatureDependentInterface = (AnimationFeatureDependentInterface_AnimationFeatureDependentInterface);\n// CONCATENATED MODULE: ./src/core/animpack/ManagedAnimationLayerInterface.js\nfunction ManagedAnimationLayerInterface_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { ManagedAnimationLayerInterface_typeof = function _typeof(obj) { return typeof obj; }; } else { ManagedAnimationLayerInterface_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return ManagedAnimationLayerInterface_typeof(obj); }\n\nfunction ManagedAnimationLayerInterface_slicedToArray(arr, i) { return ManagedAnimationLayerInterface_arrayWithHoles(arr) || ManagedAnimationLayerInterface_iterableToArrayLimit(arr, i) || ManagedAnimationLayerInterface_unsupportedIterableToArray(arr, i) || ManagedAnimationLayerInterface_nonIterableRest(); }\n\nfunction ManagedAnimationLayerInterface_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."); }\n\nfunction ManagedAnimationLayerInterface_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return ManagedAnimationLayerInterface_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return ManagedAnimationLayerInterface_arrayLikeToArray(o, minLen); }\n\nfunction ManagedAnimationLayerInterface_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction ManagedAnimationLayerInterface_iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction ManagedAnimationLayerInterface_arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction ManagedAnimationLayerInterface_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction ManagedAnimationLayerInterface_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ManagedAnimationLayerInterface_ownKeys(Object(source), true).forEach(function (key) { ManagedAnimationLayerInterface_defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ManagedAnimationLayerInterface_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction ManagedAnimationLayerInterface_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction ManagedAnimationLayerInterface_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { ManagedAnimationLayerInterface_get = Reflect.get; } else { ManagedAnimationLayerInterface_get = function _get(target, property, receiver) { var base = ManagedAnimationLayerInterface_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return ManagedAnimationLayerInterface_get(target, property, receiver || target); }\n\nfunction ManagedAnimationLayerInterface_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = ManagedAnimationLayerInterface_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction ManagedAnimationLayerInterface_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction ManagedAnimationLayerInterface_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction ManagedAnimationLayerInterface_createClass(Constructor, protoProps, staticProps) { if (protoProps) ManagedAnimationLayerInterface_defineProperties(Constructor.prototype, protoProps); if (staticProps) ManagedAnimationLayerInterface_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction ManagedAnimationLayerInterface_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) ManagedAnimationLayerInterface_setPrototypeOf(subClass, superClass); }\n\nfunction ManagedAnimationLayerInterface_setPrototypeOf(o, p) { ManagedAnimationLayerInterface_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return ManagedAnimationLayerInterface_setPrototypeOf(o, p); }\n\nfunction ManagedAnimationLayerInterface_createSuper(Derived) { var hasNativeReflectConstruct = ManagedAnimationLayerInterface_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = ManagedAnimationLayerInterface_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = ManagedAnimationLayerInterface_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return ManagedAnimationLayerInterface_possibleConstructorReturn(this, result); }; }\n\nfunction ManagedAnimationLayerInterface_possibleConstructorReturn(self, call) { if (call && (ManagedAnimationLayerInterface_typeof(call) === "object" || typeof call === "function")) { return call; } return ManagedAnimationLayerInterface_assertThisInitialized(self); }\n\nfunction ManagedAnimationLayerInterface_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction ManagedAnimationLayerInterface_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction ManagedAnimationLayerInterface_getPrototypeOf(o) { ManagedAnimationLayerInterface_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return ManagedAnimationLayerInterface_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/* eslint-disable no-unused-vars */\n\n/* eslint-disable max-classes-per-file */\n\n/**\n * Class factory interface for that keeps track of layers and animations on a host.\n * Tracked assets are marked as inactive until layers and animations with matching\n * names are detected as present on the host.\n *\n * @interface\n * @extends AnimationFeatureDependentInterface\n *\n * @property {Object} DEFAULT_LAYER_OPTIONS - Default options to use when executing\n * {@link AnimationLayer} methods.\n * @property {number} [DEFAULT_LAYER_OPTIONS.blendTime=0.5] - Default time in seconds\n * to use when executing {@link AnimationLayer.setBlendWeight}.\n * @property {Object} [DEFAULT_LAYER_OPTIONS.animations={}] - Maps animation names\n * to default options objects to use for managed animations.\n */\n\nvar ManagedAnimationLayerInterface_ManagedAnimationLayerInterface = /*#__PURE__*/function (_AnimationFeatureDepe) {\n ManagedAnimationLayerInterface_inherits(ManagedAnimationLayerInterface, _AnimationFeatureDepe);\n\n var _super = ManagedAnimationLayerInterface_createSuper(ManagedAnimationLayerInterface);\n\n function ManagedAnimationLayerInterface() {\n ManagedAnimationLayerInterface_classCallCheck(this, ManagedAnimationLayerInterface);\n\n return _super.apply(this, arguments);\n }\n\n ManagedAnimationLayerInterface_createClass(ManagedAnimationLayerInterface, [{\n key: "registerLayer",\n value:\n /**\n * Start tracking keeping track of whether a layer with the given name is present\n * on the host.\n *\n * @param {string} name - Name of the layer to keep track of.\n * @param {Object=} options - Options for the layer.\n * @param {number=} options.blendTime - Default amount of time to use when\n * manipulating layer weights on this layer.\n * @param {Function=} options.easingFn - Default easing function to use when\n * manipulating layer weights on this layer.\n * @param {Object=} options.animations - Animations to keep track of on the layer.\n * Animations are represented as key/value pairs of animation names and their\n * options.\n */\n function registerLayer(name) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n }\n /**\n * Start tracking keeping track of whether an animation with the given name is\n * present on the host.\n *\n * @param {string} layerName - Name of the layer that will own the animation.\n * @param {string} animationName - Name of the animation to keep track of.\n * @param {Object=} options - Options for the animation.\n */\n\n }, {\n key: "registerAnimation",\n value: function registerAnimation(layerName, animationName) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n }\n /**\n * Set layer weights on tracked layers.\n *\n * @param {Function=} nameFilter - Predicate function to test each tracked layer\n * with. By default all layers will pass.\n * @param {number} weight - Weight value to set on layers.\n * @param {number=} seconds - Number of seconds it will take to reach the weight\n * on each layer. If undefined, each layers\' blendTime option is used.\n * @param {Function=} easingFn - Easing function to use when setting weight\n * on each layer. If undefined, each layers\' easingFn option is used.\n */\n\n }, {\n key: "setLayerWeights",\n value: function setLayerWeights() {\n var nameFilter = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : function () {\n return true;\n };\n var weight = arguments.length > 1 ? arguments[1] : undefined;\n var seconds = arguments.length > 2 ? arguments[2] : undefined;\n var easingFn = arguments.length > 3 ? arguments[3] : undefined;\n }\n /**\n * Set all tracked layers\' weights to 1.\n *\n * @param {number=} seconds - Number of seconds it will take to reach the weight\n * on each layer. If undefined, each layers\' blendTime option is used.\n * @param {Function=} easingFn - Easing function to use when setting weight\n * on each layer. If undefined, each layers\' easingFn option is used.\n */\n\n }, {\n key: "enable",\n value: function enable(seconds, easingFn) {}\n /**\n * Set all tracked layers\' weights to 0.\n *\n * @param {number=} seconds - Number of seconds it will take to reach the weight\n * on each layer. If undefined, each layers\' blendTime option is used.\n * @param {Function=} easingFn - Easing function to use when setting weight\n * on each layer. If undefined, each layers\' easingFn option is used.\n */\n\n }, {\n key: "disable",\n value: function disable(seconds, easingFn) {}\n /**\n * Creates a class that implements {@link ManagedAnimationLayerInterface}\n * and extends a specified base class.\n *\n * @param {Class} BaseClass - The class to extend.\n *\n * @return {Class} A class that extends `BaseClass` and implements {@link ManagedAnimationLayerInterface}.\n */\n\n }], [{\n key: "Mixin",\n value: function Mixin(BaseClass) {\n var ParentClass = animpack_AnimationFeatureDependentInterface.Mixin(BaseClass);\n\n var ManagedAnimationLayerMixin = /*#__PURE__*/function (_ParentClass) {\n ManagedAnimationLayerInterface_inherits(ManagedAnimationLayerMixin, _ParentClass);\n\n var _super2 = ManagedAnimationLayerInterface_createSuper(ManagedAnimationLayerMixin);\n\n function ManagedAnimationLayerMixin() {\n var _this;\n\n ManagedAnimationLayerInterface_classCallCheck(this, ManagedAnimationLayerMixin);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super2.call.apply(_super2, [this].concat(args));\n _this._managedLayers = {};\n return _this;\n }\n\n ManagedAnimationLayerInterface_createClass(ManagedAnimationLayerMixin, [{\n key: "_onFeatureAdded",\n value: function _onFeatureAdded(typeName) {\n var _this2 = this;\n\n ManagedAnimationLayerInterface_get(ManagedAnimationLayerInterface_getPrototypeOf(ManagedAnimationLayerMixin.prototype), "_onFeatureAdded", this).call(this, typeName);\n\n if (typeName !== \'AnimationFeature\') {\n return;\n }\n\n this._managedLayers = this._managedLayers || {}; // Detect new layers\n\n this._host.AnimationFeature.layers.forEach(function (name) {\n _this2._onLayerAdded({\n name: name\n });\n });\n }\n }, {\n key: "_onFeatureRemoved",\n value: function _onFeatureRemoved(typeName) {\n var _this3 = this;\n\n ManagedAnimationLayerInterface_get(ManagedAnimationLayerInterface_getPrototypeOf(ManagedAnimationLayerMixin.prototype), "_onFeatureRemoved", this).call(this, typeName);\n\n if (typeName !== \'AnimationFeature\') {\n return;\n }\n\n this._managedLayers = this._managedLayers || {}; // Deactivate the layers\n\n Object.keys(this._managedLayers).forEach(function (name) {\n _this3._onLayerRemoved({\n name: name\n });\n });\n }\n }, {\n key: "_onLayerAdded",\n value: function _onLayerAdded(_ref) {\n var _this4 = this;\n\n var name = _ref.name;\n\n // Mark the layer as active if it is managed\n if (this._managedLayers[name] !== undefined) {\n this._managedLayers[name].isActive = true; // Detect new animations\n\n this._host.AnimationFeature.getAnimations(name).forEach(function (animName) {\n _this4._onAnimationAdded({\n layerName: name,\n animationName: animName\n });\n });\n }\n }\n }, {\n key: "_onLayerRemoved",\n value: function _onLayerRemoved(_ref2) {\n var _this5 = this;\n\n var name = _ref2.name;\n\n // Deactivate the layer if it is managed\n if (this._managedLayers[name] !== undefined) {\n this._managedLayers[name].isActive = false; // Deactivate the animations\n\n Object.keys(this._managedLayers[name].animations).forEach(function (animName) {\n _this5._onAnimationRemoved({\n layerName: name,\n animationName: animName\n });\n });\n }\n }\n }, {\n key: "_onLayerRenamed",\n value: function _onLayerRenamed(_ref3) {\n var oldName = _ref3.oldName,\n newName = _ref3.newName;\n var layerOptions = this._managedLayers[oldName]; // Replace the layer key with the new name\n\n if (layerOptions !== undefined) {\n delete this._managedLayers[oldName];\n this._managedLayers[newName] = layerOptions;\n }\n }\n }, {\n key: "_onAnimationAdded",\n value: function _onAnimationAdded(_ref4) {\n var layerName = _ref4.layerName,\n animationName = _ref4.animationName;\n\n // Mark the animation as active if it is managed\n if (this._managedLayers[layerName] !== undefined && this._managedLayers[layerName].animations[animationName] !== undefined) {\n this._managedLayers[layerName].animations[animationName].isActive = true;\n }\n }\n }, {\n key: "_onAnimationRemoved",\n value: function _onAnimationRemoved(_ref5) {\n var layerName = _ref5.layerName,\n animationName = _ref5.animationName;\n\n // Deactivate the animation if it is managed\n if (this._managedLayers[layerName] !== undefined && this._managedLayers[layerName].animations[animationName] !== undefined) {\n this._managedLayers[layerName].animations[animationName].isActive = false;\n }\n }\n }, {\n key: "_onAnimationRenamed",\n value: function _onAnimationRenamed(_ref6) {\n var layerName = _ref6.layerName,\n oldName = _ref6.oldName,\n newName = _ref6.newName;\n\n if (this._managedLayers[layerName] !== undefined && this._managedLayers[layerName].animations[oldName] !== undefined) {\n // Replace the animation key with the new name\n var animOptions = this._managedLayers[layerName].animations[oldName];\n delete this._managedLayers[layerName].animations[oldName];\n this._managedLayers[layerName].animations[newName] = animOptions;\n }\n }\n }, {\n key: "registerLayer",\n value: function registerLayer(name) {\n var _this6 = this;\n\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n // Start with default options for each new layer\n if (this._managedLayers[name] === undefined) {\n this._managedLayers[name] = ManagedAnimationLayerInterface_objectSpread(ManagedAnimationLayerInterface_objectSpread({}, this.constructor.DEFAULT_LAYER_OPTIONS), {}, {\n animations: {}\n });\n } // Update all options except animations\n\n\n var layerOptions = this._managedLayers[name];\n options = ManagedAnimationLayerInterface_objectSpread({}, options);\n var animationOptions = options.animations || {};\n delete options.animations;\n Object.assign(layerOptions, options); // Check whether the layer can be manipulated now\n\n layerOptions.isActive = this._host.AnimationFeature !== undefined && this._host.AnimationFeature.layers.includes(name); // Register the animations\n\n Object.entries(animationOptions).forEach(function (_ref7) {\n var _ref8 = ManagedAnimationLayerInterface_slicedToArray(_ref7, 2),\n animName = _ref8[0],\n animOptions = _ref8[1];\n\n _this6.registerAnimation(name, animName, animOptions);\n });\n }\n }, {\n key: "registerAnimation",\n value: function registerAnimation(layerName, animationName) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n // Register the layer if it hasn\'t been registered yet\n if (this._managedLayers[layerName] === undefined) {\n this.registerLayer(layerName);\n } // Update animation options\n\n\n var animOptions = this._managedLayers[layerName].animations[animationName] || {};\n Object.assign(animOptions, options);\n this._managedLayers[layerName].animations[animationName] = animOptions; // Check whether the animation can be manipulated now\n\n this._managedLayers[layerName].animations[animationName].isActive = this._managedLayers[layerName].isActive && this._host.AnimationFeature.getAnimations(layerName).includes(animationName);\n }\n }, {\n key: "setLayerWeights",\n value: function setLayerWeights() {\n var _this7 = this;\n\n var nameFilter = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : function () {\n return true;\n };\n var weight = arguments.length > 1 ? arguments[1] : undefined;\n var seconds = arguments.length > 2 ? arguments[2] : undefined;\n var easingFn = arguments.length > 3 ? arguments[3] : undefined;\n var layerNames = Object.keys(this._managedLayers).filter(nameFilter);\n layerNames.forEach(function (name) {\n var layerOptions = _this7._managedLayers[name];\n\n if (layerOptions.isActive) {\n _this7._host.AnimationFeature.setLayerWeight(name, weight, seconds !== undefined ? seconds : layerOptions.blendTime, easingFn || layerOptions.easingFn);\n }\n });\n }\n }, {\n key: "enable",\n value: function enable(seconds, easingFn) {\n this.setLayerWeights(undefined, 1, seconds, easingFn);\n }\n }, {\n key: "disable",\n value: function disable(seconds, easingFn) {\n this.setLayerWeights(undefined, 0, seconds, easingFn);\n }\n }, {\n key: "installApi",\n value: function installApi() {\n var api = ManagedAnimationLayerInterface_get(ManagedAnimationLayerInterface_getPrototypeOf(ManagedAnimationLayerMixin.prototype), "installApi", this).call(this);\n\n Object.assign(api, {\n registerLayer: this.registerLayer.bind(this),\n registerAnimation: this.registerAnimation.bind(this),\n setLayerWeights: this.setLayerWeights.bind(this),\n enable: this.enable.bind(this),\n disable: this.disable.bind(this)\n });\n return api;\n }\n }]);\n\n return ManagedAnimationLayerMixin;\n }(ParentClass);\n\n Object.defineProperties(ManagedAnimationLayerMixin, {\n DEFAULT_LAYER_OPTIONS: {\n value: ManagedAnimationLayerInterface.DEFAULT_LAYER_OPTIONS,\n writable: false\n }\n });\n return ManagedAnimationLayerMixin;\n }\n }]);\n\n return ManagedAnimationLayerInterface;\n}(animpack_AnimationFeatureDependentInterface);\n\nObject.defineProperties(ManagedAnimationLayerInterface_ManagedAnimationLayerInterface, {\n DEFAULT_LAYER_OPTIONS: {\n value: {\n blendTime: 0.5,\n animations: {}\n },\n writable: false\n }\n});\n/* harmony default export */ var animpack_ManagedAnimationLayerInterface = (ManagedAnimationLayerInterface_ManagedAnimationLayerInterface);\n// CONCATENATED MODULE: ./src/core/awspack/TextToSpeechFeatureDependentInterface.js\nfunction TextToSpeechFeatureDependentInterface_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { TextToSpeechFeatureDependentInterface_typeof = function _typeof(obj) { return typeof obj; }; } else { TextToSpeechFeatureDependentInterface_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return TextToSpeechFeatureDependentInterface_typeof(obj); }\n\nfunction TextToSpeechFeatureDependentInterface_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction TextToSpeechFeatureDependentInterface_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { TextToSpeechFeatureDependentInterface_ownKeys(Object(source), true).forEach(function (key) { TextToSpeechFeatureDependentInterface_defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { TextToSpeechFeatureDependentInterface_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction TextToSpeechFeatureDependentInterface_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction TextToSpeechFeatureDependentInterface_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction TextToSpeechFeatureDependentInterface_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction TextToSpeechFeatureDependentInterface_createClass(Constructor, protoProps, staticProps) { if (protoProps) TextToSpeechFeatureDependentInterface_defineProperties(Constructor.prototype, protoProps); if (staticProps) TextToSpeechFeatureDependentInterface_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction TextToSpeechFeatureDependentInterface_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) TextToSpeechFeatureDependentInterface_setPrototypeOf(subClass, superClass); }\n\nfunction TextToSpeechFeatureDependentInterface_setPrototypeOf(o, p) { TextToSpeechFeatureDependentInterface_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return TextToSpeechFeatureDependentInterface_setPrototypeOf(o, p); }\n\nfunction TextToSpeechFeatureDependentInterface_createSuper(Derived) { var hasNativeReflectConstruct = TextToSpeechFeatureDependentInterface_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = TextToSpeechFeatureDependentInterface_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = TextToSpeechFeatureDependentInterface_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return TextToSpeechFeatureDependentInterface_possibleConstructorReturn(this, result); }; }\n\nfunction TextToSpeechFeatureDependentInterface_possibleConstructorReturn(self, call) { if (call && (TextToSpeechFeatureDependentInterface_typeof(call) === "object" || typeof call === "function")) { return call; } return TextToSpeechFeatureDependentInterface_assertThisInitialized(self); }\n\nfunction TextToSpeechFeatureDependentInterface_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction TextToSpeechFeatureDependentInterface_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction TextToSpeechFeatureDependentInterface_getPrototypeOf(o) { TextToSpeechFeatureDependentInterface_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return TextToSpeechFeatureDependentInterface_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/* eslint-disable max-classes-per-file */\n\n/**\n * Class factory interface for features that are dependent on the TextToSpeechFeature\n * being present on the host. Speech events will automatically be listened for once a\n * TextToSpeechFeature is added to the host and stopped once it is removed.\n *\n * @interface\n * @extends FeatureDependentInterface\n *\n * @property {Object} EVENT_DEPENDENCIES - Events that the feature should start/stop\n * listening for when a feature of type FeatureName is added/removed from the host.\n * @property {Object} EVENT_DEPENDENCIES.TextToSpeechFeature - Events that are\n * specific to the TextToSpeechFeature.\n * @property {string} [EVENT_DEPENDENCIES.TextToSpeechFeature.play=\'_onPlay\'] -\n * The name of the method that will be executed when TextToSpeechFeature play\n * events are emitted.\n * @property {string} [EVENT_DEPENDENCIES.TextToSpeechFeature.pause=\'_onPause\'] -\n * The name of the method that will be executed when TextToSpeechFeature pause\n * events are emitted.\n * @property {string} [EVENT_DEPENDENCIES.TextToSpeechFeature.resume=\'_onResume\'] -\n * The name of the method that will be executed when TextToSpeechFeature resume\n * events are emitted.\n * @property {string} [EVENT_DEPENDENCIES.TextToSpeechFeature.stop=\'_onStop\'] -\n * The name of the method that will be executed when TextToSpeechFeature stop\n * events are emitted.\n * @property {string} [EVENT_DEPENDENCIES.TextToSpeechFeature.sentence=\'_onSentence\'] -\n * The name of the method that will be executed when TextToSpeechFeature sentence\n * events are emitted.\n * @property {string} [EVENT_DEPENDENCIES.TextToSpeechFeature.word=\'_onWord\'] -\n * The name of the method that will be executed when TextToSpeechFeature word\n * events are emitted.\n * @property {string} [EVENT_DEPENDENCIES.TextToSpeechFeature.viseme=\'_onViseme\'] -\n * The name of the method that will be executed when TextToSpeechFeature viseme\n * events are emitted.\n * @property {string} [EVENT_DEPENDENCIES.TextToSpeechFeature.ssml=\'_onSsml\'] -\n * The name of the method that will be executed when TextToSpeechFeature ssml\n * events are emitted.\n */\n\nvar TextToSpeechFeatureDependentInterface_TextToSpeechFeatureDependentInterface = /*#__PURE__*/function (_FeatureDependentInte) {\n TextToSpeechFeatureDependentInterface_inherits(TextToSpeechFeatureDependentInterface, _FeatureDependentInte);\n\n var _super = TextToSpeechFeatureDependentInterface_createSuper(TextToSpeechFeatureDependentInterface);\n\n function TextToSpeechFeatureDependentInterface() {\n TextToSpeechFeatureDependentInterface_classCallCheck(this, TextToSpeechFeatureDependentInterface);\n\n return _super.apply(this, arguments);\n }\n\n TextToSpeechFeatureDependentInterface_createClass(TextToSpeechFeatureDependentInterface, [{\n key: "_onPlay",\n value:\n /**\n * Executed when speech play events are caught.\n *\n * @private\n */\n function _onPlay() {}\n /**\n * Executed when speech pause events are caught.\n *\n * @private\n */\n\n }, {\n key: "_onPause",\n value: function _onPause() {}\n /**\n * Executed when speech resume events are caught.\n *\n * @private\n */\n\n }, {\n key: "_onResume",\n value: function _onResume() {}\n /**\n * Executed when speech stop events are caught.\n *\n * @private\n */\n\n }, {\n key: "_onStop",\n value: function _onStop() {}\n /**\n * Executed when speech sentence events are caught.\n *\n * @private\n */\n\n }, {\n key: "_onSentence",\n value: function _onSentence() {}\n /**\n * Executed when speech word events are caught.\n *\n * @private\n */\n\n }, {\n key: "_onWord",\n value: function _onWord() {}\n /**\n * Executed when speech viseme events are caught.\n *\n * @private\n */\n\n }, {\n key: "_onViseme",\n value: function _onViseme() {}\n /**\n * Executed when speech ssml events are caught.\n *\n * @private\n */\n\n }, {\n key: "_onSsml",\n value: function _onSsml() {}\n /**\n * Creates a class that implements {@link TextToSpeechFeatureDependentInterface}\n * and extends a specified base class.\n *\n * @param {Class} BaseClass - The class to extend.\n *\n * @return {Class} A class that extends `BaseClass` and implements {@link TextToSpeechFeatureDependentInterface}.\n */\n\n }], [{\n key: "Mixin",\n value: function Mixin(BaseClass) {\n var ParentClass = core_FeatureDependentInterface.Mixin(BaseClass);\n\n var TextToSpeechFeatureDependentMixin = /*#__PURE__*/function (_ParentClass) {\n TextToSpeechFeatureDependentInterface_inherits(TextToSpeechFeatureDependentMixin, _ParentClass);\n\n var _super2 = TextToSpeechFeatureDependentInterface_createSuper(TextToSpeechFeatureDependentMixin);\n\n function TextToSpeechFeatureDependentMixin() {\n TextToSpeechFeatureDependentInterface_classCallCheck(this, TextToSpeechFeatureDependentMixin);\n\n return _super2.apply(this, arguments);\n }\n\n TextToSpeechFeatureDependentInterface_createClass(TextToSpeechFeatureDependentMixin, [{\n key: "_onPlay",\n value: function _onPlay() {}\n }, {\n key: "_onPause",\n value: function _onPause() {}\n }, {\n key: "_onResume",\n value: function _onResume() {}\n }, {\n key: "_onStop",\n value: function _onStop() {}\n }, {\n key: "_onSentence",\n value: function _onSentence() {}\n }, {\n key: "_onWord",\n value: function _onWord() {}\n }, {\n key: "_onViseme",\n value: function _onViseme() {}\n }, {\n key: "_onSsml",\n value: function _onSsml() {}\n }]);\n\n return TextToSpeechFeatureDependentMixin;\n }(ParentClass);\n\n Object.defineProperties(TextToSpeechFeatureDependentMixin, {\n EVENT_DEPENDENCIES: {\n value: TextToSpeechFeatureDependentInterface_objectSpread(TextToSpeechFeatureDependentInterface_objectSpread({}, ParentClass.EVENT_DEPENDENCIES), TextToSpeechFeatureDependentInterface.EVENT_DEPENDENCIES),\n writable: false\n }\n });\n return TextToSpeechFeatureDependentMixin;\n }\n }]);\n\n return TextToSpeechFeatureDependentInterface;\n}(core_FeatureDependentInterface);\n\nObject.defineProperties(TextToSpeechFeatureDependentInterface_TextToSpeechFeatureDependentInterface, {\n EVENT_DEPENDENCIES: {\n value: {\n TextToSpeechFeature: {\n play: \'_onPlay\',\n pause: \'_onPause\',\n resume: \'_onResume\',\n stop: \'_onStop\',\n sentence: \'_onSentence\',\n word: \'_onWord\',\n viseme: \'_onViseme\',\n ssml: \'_onSsml\'\n }\n },\n writable: false\n }\n});\n/* harmony default export */ var awspack_TextToSpeechFeatureDependentInterface = (TextToSpeechFeatureDependentInterface_TextToSpeechFeatureDependentInterface);\n// CONCATENATED MODULE: ./src/core/LipsyncFeature.js\nfunction LipsyncFeature_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { LipsyncFeature_typeof = function _typeof(obj) { return typeof obj; }; } else { LipsyncFeature_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return LipsyncFeature_typeof(obj); }\n\nfunction LipsyncFeature_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction LipsyncFeature_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { LipsyncFeature_ownKeys(Object(source), true).forEach(function (key) { LipsyncFeature_defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { LipsyncFeature_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction LipsyncFeature_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\n\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }\n\nfunction LipsyncFeature_slicedToArray(arr, i) { return LipsyncFeature_arrayWithHoles(arr) || LipsyncFeature_iterableToArrayLimit(arr, i) || LipsyncFeature_unsupportedIterableToArray(arr, i) || LipsyncFeature_nonIterableRest(); }\n\nfunction LipsyncFeature_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."); }\n\nfunction LipsyncFeature_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return LipsyncFeature_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return LipsyncFeature_arrayLikeToArray(o, minLen); }\n\nfunction LipsyncFeature_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction LipsyncFeature_iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction LipsyncFeature_arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction LipsyncFeature_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction LipsyncFeature_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction LipsyncFeature_createClass(Constructor, protoProps, staticProps) { if (protoProps) LipsyncFeature_defineProperties(Constructor.prototype, protoProps); if (staticProps) LipsyncFeature_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction LipsyncFeature_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { LipsyncFeature_get = Reflect.get; } else { LipsyncFeature_get = function _get(target, property, receiver) { var base = LipsyncFeature_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return LipsyncFeature_get(target, property, receiver || target); }\n\nfunction LipsyncFeature_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = LipsyncFeature_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction LipsyncFeature_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) LipsyncFeature_setPrototypeOf(subClass, superClass); }\n\nfunction LipsyncFeature_setPrototypeOf(o, p) { LipsyncFeature_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return LipsyncFeature_setPrototypeOf(o, p); }\n\nfunction LipsyncFeature_createSuper(Derived) { var hasNativeReflectConstruct = LipsyncFeature_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = LipsyncFeature_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = LipsyncFeature_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return LipsyncFeature_possibleConstructorReturn(this, result); }; }\n\nfunction LipsyncFeature_possibleConstructorReturn(self, call) { if (call && (LipsyncFeature_typeof(call) === "object" || typeof call === "function")) { return call; } return LipsyncFeature_assertThisInitialized(self); }\n\nfunction LipsyncFeature_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction LipsyncFeature_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction LipsyncFeature_getPrototypeOf(o) { LipsyncFeature_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return LipsyncFeature_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n\n\n/**\n * Default mapping of Polly viseme names to animation options objects.\n *\n * @property {Object} [sil={name: \'sil\'}]\n * @property {Object} [p={name: \'p\', overrideWeight: 0.9}]\n * @property {Object} [t={name: \'t\', blendTime: 0.2}]\n * @property {Object} [S={name: \'S\'}]\n * @property {Object} [T={name: \'T\'}]\n * @property {Object} [f={name: \'f\', overrideWeight: 0.75}]\n * @property {Object} [k={name: \'k\'}]\n * @property {Object} [i={name: \'i\'}]\n * @property {Object} [r={name: \'r\'}]\n * @property {Object} [s={name: \'s\', blendTime: 0.25}]\n * @property {Object} [u={name: \'u\'}]\n * @property {Object} [@={name: \'@\'}]\n * @property {Object} [a={name: \'a\'}]\n * @property {Object} [e={name: \'e\', blendTime: 0.2}]\n * @property {Object} [E={name: \'E\'}]\n * @property {Object} [o={name: \'o\'}]\n * @property {Object} [O={name: \'O\'}]\n */\n\nvar DefaultVisemeMap = {\n sil: {\n name: \'sil\'\n },\n p: {\n name: \'p\',\n overrideWeight: 0.9\n },\n t: {\n name: \'t\',\n blendTime: 0.2\n },\n S: {\n name: \'S\'\n },\n T: {\n name: \'T\'\n },\n f: {\n name: \'f\',\n overrideWeight: 0.75\n },\n k: {\n name: \'k\'\n },\n i: {\n name: \'i\'\n },\n r: {\n name: \'r\'\n },\n s: {\n name: \'s\',\n blendTime: 0.25\n },\n u: {\n name: \'u\'\n },\n \'@\': {\n name: \'@\'\n },\n a: {\n name: \'a\'\n },\n e: {\n name: \'e\',\n blendTime: 0.2\n },\n E: {\n name: \'E\'\n },\n o: {\n name: \'o\'\n },\n O: {\n name: \'O\'\n }\n};\n/**\n * Lipsync controls two types of movement: idle animation that should play while\n * speech is playing and viseme animations corresponding to Polly visemes whose\n * weights should be turned on and off as they are encountered in the Polly SSML\n * transcript. Layers owned by this feature will be enabled while speech is playing\n * and disabled once it stops.\n *\n * @extends AbstractHostFeature\n * @alias core/LipsyncFeature\n * @implements TextToSpeechFeatureDependentInterface\n * @implements ManagedAnimationLayerInterface\n */\n\nvar LipsyncFeature_LipsyncFeature = /*#__PURE__*/function (_AbstractHostFeature$) {\n LipsyncFeature_inherits(LipsyncFeature, _AbstractHostFeature$);\n\n var _super = LipsyncFeature_createSuper(LipsyncFeature);\n\n /**\n * @constructor\n *\n * @param {core/HostObject} host - Host that owns the feature.\n * @param {Object=} visemeOptions - Options for the viseme layers.\n * @param {number} [visemeOptions.blendTime=0.15] - Default amount of time it\n * will take to manipulate each freeBlend weight on the viseme states.\n * @param {Object} [visemeOptions.decayRate={amount: .5, seconds: .5}] - An object\n * describing the 0-1 factor viseme weight will decay if the viseme duration is\n * longer than the blendTime and the number of seconds it would take to decay\n * by that factor.\n * @param {number} [visemeOptions.easingFn=Quadratic.InOut] - Default easing function\n * to use when manipulating viseme freeBlend weights.\n * @param {Array.} [visemeOptions..layers=[]] - An array of layer options\n * objects to register as viseme layers.\n * @param {Object=} talkingOptions - Options for the talking layers.\n * @param {number} [talkingOptions.blendTime=0.75] - Default amount of time to\n * enable and disable the talking idle layers\n * @param {number} [talkingOptions.easingFn=Quadratic.InOut] - Default easing\n * function to use when manipulating weights on the talking idle layers.\n * @param {Array.} [talkingOptions.layers=[]] - An array of layer options\n * objects to register as talking layers.\n * @param {number} [visemeLeadTime=.067] - The amount of time to instruct the\n * TextToSpeechFeature to emit speechmarks before each one\'s actual timestamp\n * is reached. This will set the \'speechMarkOffset\' variable on the TextToSpeechFeature.\n */\n function LipsyncFeature(host) {\n var _this;\n\n var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n _ref$blendTime = _ref.blendTime,\n visemeBlendTime = _ref$blendTime === void 0 ? 0.15 : _ref$blendTime,\n _ref$decayRate = _ref.decayRate;\n\n _ref$decayRate = _ref$decayRate === void 0 ? {} : _ref$decayRate;\n var _ref$decayRate$amount = _ref$decayRate.amount,\n amount = _ref$decayRate$amount === void 0 ? 0.5 : _ref$decayRate$amount,\n _ref$decayRate$second = _ref$decayRate.seconds,\n seconds = _ref$decayRate$second === void 0 ? 0.5 : _ref$decayRate$second,\n _ref$easingFn = _ref.easingFn,\n visemeEasingFn = _ref$easingFn === void 0 ? Quadratic.InOut : _ref$easingFn,\n _ref$layers = _ref.layers,\n visemeLayers = _ref$layers === void 0 ? [] : _ref$layers;\n\n var _ref2 = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},\n _ref2$blendTime = _ref2.blendTime,\n talkingBlendTime = _ref2$blendTime === void 0 ? 0.75 : _ref2$blendTime,\n _ref2$easingFn = _ref2.easingFn,\n talkingEasingFn = _ref2$easingFn === void 0 ? Quadratic.InOut : _ref2$easingFn,\n _ref2$layers = _ref2.layers,\n talkingLayers = _ref2$layers === void 0 ? [] : _ref2$layers;\n\n var visemeLeadTime = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0.067;\n\n LipsyncFeature_classCallCheck(this, LipsyncFeature);\n\n _this = _super.call(this, host);\n _this._visemeLayers = {};\n _this._talkingLayers = {};\n _this.visemeLeadTime = visemeLeadTime; // Register the viseme layers\n\n visemeLayers.forEach(function (_ref3) {\n var name = _ref3.name,\n animation = _ref3.animation,\n _ref3$visemeMap = _ref3.visemeMap,\n visemeMap = _ref3$visemeMap === void 0 ? DefaultVisemeMap : _ref3$visemeMap;\n\n _this.registerVisemeLayer(name, {\n animation: animation,\n visemeMap: visemeMap,\n decayRate: {\n amount: amount,\n seconds: seconds\n },\n blendTime: visemeBlendTime,\n easingFn: visemeEasingFn\n });\n }); // Register the talking layers\n\n talkingLayers.forEach(function (_ref4) {\n var name = _ref4.name,\n animation = _ref4.animation;\n\n _this.registerTalkingLayer(name, {\n animation: animation,\n blendTime: talkingBlendTime,\n easingFn: talkingEasingFn\n });\n });\n return _this;\n }\n /**\n * Ensure that registered viseme animations are FreeBlendStates.\n *\n * @private\n *\n * @param {string} layerName - Name of the layer that contains the viseme animation.\n * @param {string} animationName - Name of the animation.\n */\n\n\n LipsyncFeature_createClass(LipsyncFeature, [{\n key: "_registerVisemeAnimation",\n value: function _registerVisemeAnimation(layerName, animationName) {\n if (this._managedLayers[layerName].animations[animationName].isActive) {\n if (this._host.AnimationFeature.getAnimationType(layerName, animationName) !== \'freeBlend\') {\n // Warn and deactivate if the registered state is not freeBlend\n console.warn("Cannot register Lipsync viseme animation ".concat(animationName, " on layer ").concat(layerName, " for host ").concat(this._host.id, ". Viseme animations must be of type \'freeBlend\'."));\n this._managedLayers[layerName].animations[animationName].isActive = false;\n } else {\n // Check if the blendWeights can be manipulated now\n var weightNames = this._host.AnimationFeature.getAnimationBlendNames(layerName, animationName);\n\n var visemeMap = this._managedLayers[layerName].animations[animationName].visemeMap;\n Object.values(visemeMap).forEach(function (visemeOptions) {\n visemeOptions.isActive = weightNames.includes(visemeOptions.name);\n });\n }\n }\n }\n /**\n * If the added feature is TextToSpeech, update its speechMarkOffset variable.\n *\n * @private\n *\n * @param {string} typeName - Name of the type of feature that was added.\n */\n\n }, {\n key: "_onFeatureAdded",\n value: function _onFeatureAdded(typeName) {\n this._visemeLayers = this._visemeLayers || {};\n this._talkingLayers = this._talkingLayers || {};\n\n LipsyncFeature_get(LipsyncFeature_getPrototypeOf(LipsyncFeature.prototype), "_onFeatureAdded", this).call(this, typeName);\n\n if (typeName === \'TextToSpeechFeature\') {\n this._host.TextToSpeechFeature.speechmarkOffset = -this._visemeLeadTime || 0;\n }\n }\n }, {\n key: "_onLayerAdded",\n value: function _onLayerAdded(_ref5) {\n var name = _ref5.name;\n\n LipsyncFeature_get(LipsyncFeature_getPrototypeOf(LipsyncFeature.prototype), "_onLayerAdded", this).call(this, {\n name: name\n }); // Validate the viseme animation\n\n\n if (this._visemeLayers[name] !== undefined) {\n this._registerVisemeAnimation(name, this._visemeLayers[name]);\n }\n }\n }, {\n key: "_onAnimationAdded",\n value: function _onAnimationAdded(_ref6) {\n var layerName = _ref6.layerName,\n animationName = _ref6.animationName;\n\n LipsyncFeature_get(LipsyncFeature_getPrototypeOf(LipsyncFeature.prototype), "_onAnimationAdded", this).call(this, {\n layerName: layerName\n }); // Validate the viseme animation\n\n\n if (this._visemeLayers[layerName] === animationName) {\n this._registerVisemeAnimation(layerName, this._visemeLayers[layerName]);\n }\n }\n }, {\n key: "_onPlay",\n value: function _onPlay() {\n var _this2 = this;\n\n // Turn on the layer weights\n this.enable(); // Set the current animations\n\n [this._visemeLayers, this._talkingLayers].forEach(function (layers) {\n Object.entries(layers).forEach(function (_ref7) {\n var _ref8 = LipsyncFeature_slicedToArray(_ref7, 2),\n layerName = _ref8[0],\n animationName = _ref8[1];\n\n if (_this2._managedLayers[layerName].animations[animationName].isActive) {\n _this2._host.AnimationFeature.resumeAnimation(layerName, animationName);\n }\n });\n });\n }\n }, {\n key: "_onPause",\n value: function _onPause() {\n this._onStop();\n }\n }, {\n key: "_onResume",\n value: function _onResume() {\n this._onPlay();\n }\n }, {\n key: "_onStop",\n value: function _onStop() {\n var _this3 = this;\n\n // Turn off the layer weights\n this.disable(); // Pause the current animations\n\n [this._visemeLayers, this._talkingLayers].forEach(function (layers) {\n Object.entries(layers).forEach(function (_ref9) {\n var _ref10 = LipsyncFeature_slicedToArray(_ref9, 2),\n layerName = _ref10[0],\n animationName = _ref10[1];\n\n if (_this3._managedLayers[layerName].animations[animationName].isActive) {\n _this3._host.AnimationFeature.pauseAnimation(layerName, animationName);\n }\n });\n });\n }\n /**\n * When viseme events are caught, turn on weight of the new viseme for the duration\n * of the speech mark, then turn weight back off.\n *\n * @private\n *\n * @param {Object} event - Event data passed from the speech.\n * @param {Object} event.mark - Speechmark object.\n */\n\n }, {\n key: "_onViseme",\n value: function () {\n var _onViseme2 = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee(_ref11) {\n var _this4 = this;\n\n var mark;\n return regeneratorRuntime.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n mark = _ref11.mark;\n Object.entries(this._visemeLayers).forEach(function (_ref12) {\n var _ref13 = LipsyncFeature_slicedToArray(_ref12, 2),\n layerName = _ref13[0],\n animName = _ref13[1];\n\n // Make sure the layer can be manipulated\n var _this4$_managedLayers = _this4._managedLayers[layerName].animations[animName],\n isActive = _this4$_managedLayers.isActive,\n visemeMap = _this4$_managedLayers.visemeMap;\n\n if (!isActive) {\n return;\n } // Take variables from the viseme if they exist and default to the layer\n\n\n var _this4$_managedLayers2 = LipsyncFeature_objectSpread(LipsyncFeature_objectSpread({}, _this4._managedLayers[layerName]), visemeMap[mark.value]),\n viseme = _this4$_managedLayers2.name,\n isVisemeActive = _this4$_managedLayers2.isActive,\n decayRate = _this4$_managedLayers2.decayRate,\n blendTime = _this4$_managedLayers2.blendTime,\n easingFn = _this4$_managedLayers2.easingFn,\n overrideWeight = _this4$_managedLayers2.overrideWeight;\n\n var visemeNames = _this4._host.AnimationFeature.getAnimationBlendNames(layerName, animName); // Make sure the new viseme has an active freeBlend weight\n\n\n if (!isVisemeActive || !visemeNames.includes(viseme)) {\n return;\n } // Find the peak weight for the viseme and the amount of time it should\n // take to reach it\n\n\n var weight = 1;\n var duration = mark.duration / 1000;\n\n if (duration < blendTime) {\n var lerpFactor = blendTime > 0 ? duration / blendTime : 1;\n weight = overrideWeight !== undefined ? overrideWeight : core_MathUtils.lerp(0, 1, lerpFactor);\n }\n\n var blendInTime = Math.min(duration, blendTime); // Find the amount and time viseme will be held for\n\n var holdTime = duration - blendTime;\n\n if (holdTime < 0) {\n // Perform in -> out animation\n _this4._animateSimpleViseme(layerName, animName, viseme, weight, blendInTime, blendTime, easingFn);\n } else {\n var _lerpFactor = decayRate.seconds > 0 ? holdTime / decayRate.seconds : 1; // Perform in -> hold -> out animation\n\n\n var decayWeight = core_MathUtils.lerp(weight, weight * decayRate.amount, Math.min(1, _lerpFactor));\n\n _this4._animateHeldViseme(layerName, animName, viseme, weight, decayWeight, blendInTime, holdTime, blendTime, easingFn);\n }\n });\n\n case 2:\n case "end":\n return _context.stop();\n }\n }\n }, _callee, this);\n }));\n\n function _onViseme(_x) {\n return _onViseme2.apply(this, arguments);\n }\n\n return _onViseme;\n }()\n /**\n * Animate a viseme blend weight towards a value and then back to zero.\n *\n * @private\n *\n * @param {string} layerName - Name of the layer that contains the viseme.\n * @param {string} animName - Name of the freeblend animation that contains\n * the viseme.\n * @param {string} visemeName - Name of the blend weight to manipulate.\n * @param {number} weight - Peak weight to animate towards.\n * @param {number} blendInTime - Amount of time it should take to reach the\n * peak weight.\n * @param {number} blendOutTime - Amount of time it should take to animate back\n * to zero after reaching the peak weight.\n * @param {Function} easingFn - Easing function to use during animation.\n */\n\n }, {\n key: "_animateSimpleViseme",\n value: function _animateSimpleViseme(layerName, animName, visemeName, peakWeight, blendInTime, blendOutTime, easingFn) {\n var _this5 = this;\n\n // Animate towards the peak value\n var weightPromise = this._host.AnimationFeature.setAnimationBlendWeight(layerName, animName, visemeName, peakWeight, blendInTime, easingFn); // Animate back to zero if there was no weight interruption\n\n\n weightPromise.then(function () {\n if (!weightPromise.canceled) {\n _this5._host.AnimationFeature.setAnimationBlendWeight(layerName, animName, visemeName, 0, blendOutTime, easingFn);\n }\n });\n }\n /**\n * Animate a viseme blend weight towards a value and then back to zero.\n *\n * @private\n *\n * @param {string} layerName - Name of the layer that contains the viseme.\n * @param {string} animName - Name of the freeblend animation that contains\n * the viseme.\n * @param {string} visemeName - Name of the blend weight to manipulate.\n * @param {number} peakWeight - Peak weight to animate towards.\n * @param {number} decayWeight - Weight to animate towards after reaching the\n * peak weight.\n * @param {number} blendInTime - Amount of time it should take to reach the\n * peak weight.\n * @param {number} holdTime - Amount of time it should take to reach the decay\n * weight after the peak weight has been reached.\n * @param {number} blendOutTime - Amount of time it should take to animate back\n * to zero after reaching the decay weight.\n * @param {Function} easingFn - Easing function to use during animation.\n */\n\n }, {\n key: "_animateHeldViseme",\n value: function () {\n var _animateHeldViseme2 = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2(layerName, animName, visemeName, peakWeight, decayWeight, blendInTime, holdTime, blendOutTime, easingFn) {\n var startPromise, holdPromise;\n return regeneratorRuntime.wrap(function _callee2$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n // Animate towards the peak value\n startPromise = this._host.AnimationFeature.setAnimationBlendWeight(layerName, animName, visemeName, peakWeight, blendInTime, easingFn);\n _context2.next = 3;\n return startPromise;\n\n case 3:\n if (startPromise.canceled) {\n _context2.next = 8;\n break;\n }\n\n // Animate towards the decay value if there was no weight interruption\n holdPromise = this._host.AnimationFeature.setAnimationBlendWeight(layerName, animName, visemeName, decayWeight, holdTime, easingFn);\n _context2.next = 7;\n return holdPromise;\n\n case 7:\n if (!holdPromise.canceled) {\n // Animate back to zero if there was no weight interruption\n this._host.AnimationFeature.setAnimationBlendWeight(layerName, animName, visemeName, 0, blendOutTime, easingFn);\n }\n\n case 8:\n case "end":\n return _context2.stop();\n }\n }\n }, _callee2, this);\n }));\n\n function _animateHeldViseme(_x2, _x3, _x4, _x5, _x6, _x7, _x8, _x9, _x10) {\n return _animateHeldViseme2.apply(this, arguments);\n }\n\n return _animateHeldViseme;\n }()\n /**\n * Gets and sets the amount of time in seconds to negatively offset speechmark\n * emission by.\n *\n * @type {number}\n */\n\n }, {\n key: "visemeLeadTime",\n get: function get() {\n return this._visemeLeadTime;\n },\n set: function set(seconds) {\n this._visemeLeadTime = seconds;\n\n if (this._host.TextToSpeechFeature) {\n this._host.TextToSpeechFeature.speechmarkOffset = -seconds;\n }\n }\n /**\n * Start keeping track of an animation layer that owns a freeBlend animation\n * with blendWeights corresponding to visemes.\n *\n * @param {string} layerName - Name of the layer to keep track of.\n * @param {Object=} options - Options for the layer.\n * @param {string} [options.animation=\'visemes\'] - Name of the animation on the\n * layer that will be played during speech. This animation must be of type\n * freeBlend.\n * @param {Object=} decayRate\n * @param {number} [decayRate.amount=0.5] - The percentage to decrease the viseme\'s\n * peak value by over time once the peak value has been reached.\n * @param {number} [decayRate.seconds=0.5] - The amount of time in seconds to\n * decrease the viseme\'s weight once it has reached its peak value.\n * @param {number=} [options.blendTime=[LipsyncFeature.DEFAULT_LAYER_OPTIONS.blendTime]{@link LipsyncFeature#DEFAULT_LAYER_OPTIONS#blendTime}] -\n * Default amount of time to use when manipulating animation blendWeights.\n * @param {Function=} options.easingFn - Default easing function to use when\n * manipulating animation blendWeights.\n * @param {Object} [options.visemeMap=DefaultVisemeMap] - Object containing key/value pairs of\n * Polly viseme names mapped to objects containing the name of the corresponding\n * animation blendWeight and any other animation options to use such as viseme\n * specific blend times and easing functions.\n */\n\n }, {\n key: "registerVisemeLayer",\n value: function registerVisemeLayer(layerName) {\n var _ref14 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n _ref14$animation = _ref14.animation,\n animation = _ref14$animation === void 0 ? \'visemes\' : _ref14$animation,\n _ref14$decayRate = _ref14.decayRate,\n decayRate = _ref14$decayRate === void 0 ? {\n amount: 0.5,\n seconds: 0.5\n } : _ref14$decayRate,\n _ref14$blendTime = _ref14.blendTime,\n blendTime = _ref14$blendTime === void 0 ? LipsyncFeature.DEFAULT_LAYER_OPTIONS.blendTime : _ref14$blendTime,\n easingFn = _ref14.easingFn,\n _ref14$visemeMap = _ref14.visemeMap,\n visemeMap = _ref14$visemeMap === void 0 ? DefaultVisemeMap : _ref14$visemeMap;\n\n // Register the layer and animation\n this.registerLayer(layerName, {\n decayRate: decayRate,\n blendTime: blendTime,\n easingFn: easingFn,\n animations: LipsyncFeature_defineProperty({}, animation, {\n visemeMap: visemeMap\n })\n });\n this._visemeLayers[layerName] = animation; // Validate the viseme animation\n\n this._registerVisemeAnimation(layerName, animation);\n }\n /**\n * Start keeping track of an animation layer that contains a looping animation\n * to be played during speech.\n *\n * @param {string} layerName - Name of the layer to keep track of.\n * @param {Object=} options - Options for the layer.\n * @param {string} [options.animation=\'stand_talk\'] - Name of the animation on the\n * layer that will be played during speech.\n * @param {number} [options.blendTime=[LipsyncFeature.DEFAULT_LAYER_OPTIONS.blendTime]{@link LipsyncFeature#DEFAULT_LAYER_OPTIONS#blendTime}] -\n * Default amount of time to use when manipulating the layer\'s weights.\n * @param {Function=} options.easingFn - Default easing function to use when\n * manipulating the layer\'s weights.\n */\n\n }, {\n key: "registerTalkingLayer",\n value: function registerTalkingLayer(layerName) {\n var _ref15 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n _ref15$animation = _ref15.animation,\n animation = _ref15$animation === void 0 ? \'stand_talk\' : _ref15$animation,\n _ref15$blendTime = _ref15.blendTime,\n blendTime = _ref15$blendTime === void 0 ? LipsyncFeature.DEFAULT_LAYER_OPTIONS.blendTime : _ref15$blendTime,\n easingFn = _ref15.easingFn;\n\n // Register the layer and animation\n this.registerLayer(layerName, {\n blendTime: blendTime,\n easingFn: easingFn,\n animations: LipsyncFeature_defineProperty({}, animation, {})\n });\n this._talkingLayers[layerName] = animation;\n }\n /**\n * Adds a namespace to the host with the name of the feature to contain properties\n * and methods from the feature that users of the host need access to.\n *\n * @see LipsyncFeature\n */\n\n }, {\n key: "installApi",\n value: function installApi() {\n var _this6 = this;\n\n /**\n * @inner\n * @namespace LipsyncFeature\n */\n var api = LipsyncFeature_get(LipsyncFeature_getPrototypeOf(LipsyncFeature.prototype), "installApi", this).call(this);\n /**\n * @memberof LipsyncFeature\n * @name registerLayer\n * @instance\n * @method\n * @see ManagedAnimationLayerInterface#registerLayer\n */\n\n /**\n * @memberof LipsyncFeature\n * @name registerAnimation\n * @instance\n * @method\n * @see ManagedAnimationLayerInterface#registerAnimation\n */\n\n /**\n * @memberof LipsyncFeature\n * @name setLayerWeights\n * @instance\n * @method\n * @see ManagedAnimationLayerInterface#setLayerWeights\n */\n\n /**\n * @memberof LipsyncFeature\n * @name enable\n * @instance\n * @method\n * @see ManagedAnimationLayerInterface#enable\n */\n\n /**\n * @memberof LipsyncFeature\n * @name disable\n * @instance\n * @method\n * @see ManagedAnimationLayerInterface#disable\n */\n\n\n Object.assign(api, {\n /**\n * @memberof LipsyncFeature\n * @instance\n * @method\n * @see core/LipsyncFeature#registerVisemeLayer\n */\n registerVisemeLayer: this.registerVisemeLayer.bind(this),\n\n /**\n * @memberof LipsyncFeature\n * @instance\n * @method\n * @see core/LipsyncFeature#registerTalkingLayer\n */\n registerTalkingLayer: this.registerTalkingLayer.bind(this)\n });\n /**\n * @memberof LipsyncFeature\n * @instance\n * @name visemeLeadTime\n * @see core/LipsyncFeature#visemeLeadTime\n */\n\n Object.defineProperty(api, \'visemeLeadTime\', {\n get: function get() {\n return _this6.visemeLeadTime;\n },\n set: function set(seconds) {\n _this6.visemeLeadTime = seconds;\n }\n });\n return api;\n }\n }]);\n\n return LipsyncFeature;\n}(core_AbstractHostFeature.mix(awspack_TextToSpeechFeatureDependentInterface.Mixin, animpack_ManagedAnimationLayerInterface.Mixin));\n\n/* harmony default export */ var core_LipsyncFeature = (LipsyncFeature_LipsyncFeature);\n\n// CONCATENATED MODULE: ./src/core/awspack/SSMLSpeechmarkInterface.js\nfunction SSMLSpeechmarkInterface_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { SSMLSpeechmarkInterface_typeof = function _typeof(obj) { return typeof obj; }; } else { SSMLSpeechmarkInterface_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return SSMLSpeechmarkInterface_typeof(obj); }\n\nfunction SSMLSpeechmarkInterface_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction SSMLSpeechmarkInterface_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction SSMLSpeechmarkInterface_createClass(Constructor, protoProps, staticProps) { if (protoProps) SSMLSpeechmarkInterface_defineProperties(Constructor.prototype, protoProps); if (staticProps) SSMLSpeechmarkInterface_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction SSMLSpeechmarkInterface_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) SSMLSpeechmarkInterface_setPrototypeOf(subClass, superClass); }\n\nfunction SSMLSpeechmarkInterface_setPrototypeOf(o, p) { SSMLSpeechmarkInterface_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return SSMLSpeechmarkInterface_setPrototypeOf(o, p); }\n\nfunction SSMLSpeechmarkInterface_createSuper(Derived) { var hasNativeReflectConstruct = SSMLSpeechmarkInterface_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = SSMLSpeechmarkInterface_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = SSMLSpeechmarkInterface_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return SSMLSpeechmarkInterface_possibleConstructorReturn(this, result); }; }\n\nfunction SSMLSpeechmarkInterface_possibleConstructorReturn(self, call) { if (call && (SSMLSpeechmarkInterface_typeof(call) === "object" || typeof call === "function")) { return call; } return SSMLSpeechmarkInterface_assertThisInitialized(self); }\n\nfunction SSMLSpeechmarkInterface_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction SSMLSpeechmarkInterface_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction SSMLSpeechmarkInterface_getPrototypeOf(o) { SSMLSpeechmarkInterface_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return SSMLSpeechmarkInterface_getPrototypeOf(o); }\n\n/* eslint-disable no-unused-vars */\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/* eslint-disable max-classes-per-file */\n\n/* eslint-disable no-empty */\n\n/**\n * Class factory interface for that registers callback method when a ssml speechmark event is emitted.\n *\n * @interface\n * @extends TextToSpeechFeatureDependentInterface\n */\n\nvar SSMLSpeechmarkInterface_SSMLSpeechmarkInterface = /*#__PURE__*/function (_TextToSpeechFeatureD) {\n SSMLSpeechmarkInterface_inherits(SSMLSpeechmarkInterface, _TextToSpeechFeatureD);\n\n var _super = SSMLSpeechmarkInterface_createSuper(SSMLSpeechmarkInterface);\n\n function SSMLSpeechmarkInterface() {\n SSMLSpeechmarkInterface_classCallCheck(this, SSMLSpeechmarkInterface);\n\n return _super.apply(this, arguments);\n }\n\n SSMLSpeechmarkInterface_createClass(SSMLSpeechmarkInterface, [{\n key: "_onSsml",\n value:\n /**\n * When ssml events are caught, this will try to parse the speech mark value and execute any function which meets criteria defined in the value.\n * Speech mark value will be treated as stringified json format containing required feature name, function name and argument array to pass in.\n * Example speech mark value might look like: \'{"feature":"GestureFeature", "method":"switchToGesture", "args":["genricA", 0.5]}\'\n *\n * @private\n *\n * @param {Object} event - Event data passed from the speech.\n * @param {Object} event.mark - Speechmark object.\n */\n function _onSsml(_ref) {\n var mark = _ref.mark;\n }\n /**\n * Creates a class that implements {@link SSMLSpeechmarkInterface}\n * and extends a specified base class.\n *\n * @param {Class} BaseClass - The class to extend.\n *\n * @return {Class} A class that extends `BaseClass` and implements {@link SSMLSpeechmarkInterface}.\n */\n\n }], [{\n key: "Mixin",\n value: function Mixin(BaseClass) {\n var ParentClass = awspack_TextToSpeechFeatureDependentInterface.Mixin(BaseClass);\n\n var SSMLSpeechMarkMixin = /*#__PURE__*/function (_ParentClass) {\n SSMLSpeechmarkInterface_inherits(SSMLSpeechMarkMixin, _ParentClass);\n\n var _super2 = SSMLSpeechmarkInterface_createSuper(SSMLSpeechMarkMixin);\n\n function SSMLSpeechMarkMixin() {\n SSMLSpeechmarkInterface_classCallCheck(this, SSMLSpeechMarkMixin);\n\n return _super2.apply(this, arguments);\n }\n\n SSMLSpeechmarkInterface_createClass(SSMLSpeechMarkMixin, [{\n key: "_onSsml",\n value: function _onSsml(_ref2) {\n var mark = _ref2.mark;\n\n try {\n var _JSON$parse = JSON.parse(mark.value),\n feature = _JSON$parse.feature,\n method = _JSON$parse.method,\n args = _JSON$parse.args;\n\n if (this.constructor.name === feature) {\n var callback = this[method];\n\n if (callback && typeof callback === \'function\') {\n callback.apply(this, args);\n } else {\n console.warn("Function ".concat(method, " does not exist within feature ").concat(feature));\n }\n }\n } catch (e) {}\n }\n }]);\n\n return SSMLSpeechMarkMixin;\n }(ParentClass);\n\n return SSMLSpeechMarkMixin;\n }\n }]);\n\n return SSMLSpeechmarkInterface;\n}(awspack_TextToSpeechFeatureDependentInterface);\n\n/* harmony default export */ var awspack_SSMLSpeechmarkInterface = (SSMLSpeechmarkInterface_SSMLSpeechmarkInterface);\n// CONCATENATED MODULE: ./src/core/GestureFeature.js\nfunction GestureFeature_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { GestureFeature_typeof = function _typeof(obj) { return typeof obj; }; } else { GestureFeature_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return GestureFeature_typeof(obj); }\n\nfunction GestureFeature_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction GestureFeature_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { GestureFeature_ownKeys(Object(source), true).forEach(function (key) { GestureFeature_defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { GestureFeature_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction GestureFeature_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction GestureFeature_slicedToArray(arr, i) { return GestureFeature_arrayWithHoles(arr) || GestureFeature_iterableToArrayLimit(arr, i) || GestureFeature_unsupportedIterableToArray(arr, i) || GestureFeature_nonIterableRest(); }\n\nfunction GestureFeature_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."); }\n\nfunction GestureFeature_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return GestureFeature_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return GestureFeature_arrayLikeToArray(o, minLen); }\n\nfunction GestureFeature_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction GestureFeature_iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction GestureFeature_arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction GestureFeature_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction GestureFeature_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction GestureFeature_createClass(Constructor, protoProps, staticProps) { if (protoProps) GestureFeature_defineProperties(Constructor.prototype, protoProps); if (staticProps) GestureFeature_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction GestureFeature_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { GestureFeature_get = Reflect.get; } else { GestureFeature_get = function _get(target, property, receiver) { var base = GestureFeature_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return GestureFeature_get(target, property, receiver || target); }\n\nfunction GestureFeature_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = GestureFeature_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction GestureFeature_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) GestureFeature_setPrototypeOf(subClass, superClass); }\n\nfunction GestureFeature_setPrototypeOf(o, p) { GestureFeature_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return GestureFeature_setPrototypeOf(o, p); }\n\nfunction GestureFeature_createSuper(Derived) { var hasNativeReflectConstruct = GestureFeature_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = GestureFeature_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = GestureFeature_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return GestureFeature_possibleConstructorReturn(this, result); }; }\n\nfunction GestureFeature_possibleConstructorReturn(self, call) { if (call && (GestureFeature_typeof(call) === "object" || typeof call === "function")) { return call; } return GestureFeature_assertThisInitialized(self); }\n\nfunction GestureFeature_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction GestureFeature_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction GestureFeature_getPrototypeOf(o) { GestureFeature_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return GestureFeature_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n\n\nvar DefaultGestureWords = {\n big: [\'add\', \'above\', \'authority\', \'big\', \'cover\', \'full\', \'fly\', \'grow\', \'growth\', \'high\', \'huge\', \'increase\', \'major\', \'majority\', \'large\', \'leader\', \'lot\', \'raise\', \'rise\', \'tall\'],\n heart: [\'accept\', \'admit\', \'believe\', \'care\', \'feeling\', \'feel\', \'friend\', \'grateful\', \'happy\', \'heart\', \'human\', \'pain\', \'save\', \'safe\', \'kind\', \'love\'],\n "in": [\'include\', \'including\', \'inside\', \'into\', \'now\', \'near\', \'nearest\', \'closest\', \'therein\', \'within\'],\n many: [\'all\', \'always\', \'any\', \'anyone\', \'among\', \'area\', \'around\', \'beautiful\', \'entire\', \'environment\', \'environments\', \'environmental\', \'everybody\', \'everyone\', \'everything\', \'audience\', \'total\', \'group\', \'groups\', \'million\', \'millions\', \'others\', \'billion\', \'billions\', \'hundred\', \'hundreds\', \'many\', \'thousand\', \'thousands\', \'world\', \'worlds\', \'outside\', \'reveal\'],\n movement: [\'away\', \'across\', \'ahead\', \'along\', \'far\', \'fast\', \'follow\', \'go\', \'leave\', \'move\', \'movement\', \'through\', \'throughout\', \'toward\', \'travel\', \'turned\', \'passed\'],\n one: [\'single\', \'one\', \'once\', \'first\', \'firstly\', \'only\', \'solo\', \'warned\', \'truly\', \'up\', \'alone\'],\n aggressive: [\'power\', \'powers\', \'powerful\', \'assert\', \'assertive\', \'strong\', \'stronger\', \'strongest\', \'strength\', \'flex\', \'dang\', \'damn\', \'damnit\', \'darn\', \'shucks\', \'doh\', \'drat\', \'angry\', \'angrier\', \'angriest\', \'aggressive\', \'annoyed\', \'annoying\', \'attack\', \'attacking\', \'offense\', \'offensive\', \'battle\'],\n you: [\'you\', \'yall\', "y\'all", \'your\', \'yours\', \'thou\', \'thy\'],\n defense: [\'defense\', \'fear\', \'repulsed\', \'scared\', \'scary\', \'scarier\', \'scariest\', \'fearful\', \'afraid\', \'cower\', \'cowers\', \'cowering\', \'hideous\', \'doomed\', \'terrified\', \'terrify\', \'terrifying\', \'terrifies\', \'spooky\', \'spookier\', \'spookiest\'],\n wave: [\'hello\', \'hi\', \'hiya\', \'howdy\', \'welcome\', \'aloha\', \'heya\', \'hey\', \'bye\', \'goodbye\', \'hola\', \'adios\', \'chao\'],\n self: [\'my\', \'I\', \'myself\', \'self\', "I\'ve", \'Ive\', \'me\', \'mine\', \'own\']\n};\n/**\n * Gesture allows you to play animations on demand on one or more layers from script\n * or ssml. If gesture is played that is a QueueState, the queue will automatically\n * be progressed after a given hold time if a looping queued state is reached. Gesture\n * layers can optionally be automatically disabled when no gesture animation is\n * in progress.\n *\n * @extends AbstractHostFeature\n * @implements SSMLSpeechmarkInterface\n * @implements ManagedAnimationLayerInterface\n */\n\nvar GestureFeature_GestureFeature = /*#__PURE__*/function (_AbstractHostFeature$) {\n GestureFeature_inherits(GestureFeature, _AbstractHostFeature$);\n\n var _super = GestureFeature_createSuper(GestureFeature);\n\n /**\n * @constructor\n *\n * @param {core/HostObject} host - Host object that owns the feature.\n * @param {Object=} options - Optional options for the feature.\n * @param {number} [options.holdTime = 3] - Amount of time in seconds that must\n * elapse before advancing a gesture that\'s a {@link QueueState} when the current\n * state in the queue is set to loop infinitely.\n * @param {number} [options.minimumInterval = 0.25] - The minimum amount of time\n * in seconds that must elapse before another gesture can be played.\n * @param {Object} layers - An object that maps layer names to layer options.\n * These are the layers that will be registered as tracked gesture layers. See\n * {@link ManagedAnimationLayerInterface#registerLayer} for more information\n * on expected format for each layer options object.\n */\n function GestureFeature(host) {\n var _this;\n\n var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n _ref$holdTime = _ref.holdTime,\n holdTime = _ref$holdTime === void 0 ? 3 : _ref$holdTime,\n _ref$minimumInterval = _ref.minimumInterval,\n minimumInterval = _ref$minimumInterval === void 0 ? 1 : _ref$minimumInterval,\n _ref$layers = _ref.layers,\n layers = _ref$layers === void 0 ? {} : _ref$layers;\n\n GestureFeature_classCallCheck(this, GestureFeature);\n\n _this = _super.call(this, host);\n _this.holdTime = holdTime;\n _this.minimumInterval = minimumInterval; // Register the gesture layers\n\n Object.entries(layers).forEach(function (_ref2) {\n var _ref3 = GestureFeature_slicedToArray(_ref2, 2),\n name = _ref3[0],\n _ref3$ = _ref3[1],\n options = _ref3$ === void 0 ? {} : _ref3$;\n\n _this.registerLayer(name, options);\n });\n return _this;\n }\n /**\n * Return a valid hold time value. If hold time isn\'t defined for the animation,\n * try to use the hold time for the layer. If that\'s not defined, fall back to\n * the hold time for the feature.\n *\n * @private\n *\n * @param {Object} layer - Managed layer options object.\n * @param {Object} animation - Managed animation options object.\n *\n * @returns {number}\n */\n\n\n GestureFeature_createClass(GestureFeature, [{\n key: "_getHoldTime",\n value: function _getHoldTime(layer, animation) {\n var layerHoldTime = layer.holdTime !== undefined ? layer.holdTime : this.holdTime;\n return animation.holdTime !== undefined ? animation.holdTime : layerHoldTime;\n }\n /**\n * Return a valid minimum interval value. If minimum interval isn\'t defined for\n * the animation, try to use the minimum interval for the layer. If that\'s not\n * defined, fall back to the minimum interval for the feature.\n *\n * @private\n *\n * @param {Object} layer - Managed layer options object.\n * @param {Object} animation - Managed animation options object.\n *\n * @returns {number}\n */\n\n }, {\n key: "_getMinimumInterval",\n value: function _getMinimumInterval(layer, animation) {\n var layerMinimumInterval = layer.minimumInterval !== undefined ? layer.minimumInterval : this.minimumInterval;\n return animation.minimumInterval !== undefined ? animation.minimumInterval : layerMinimumInterval;\n }\n /**\n * Callback for {@link core/AnimationFeature#playNextAnimation} event. If the\n * event is emitted for a managed animation and the new queued state cannot\n * advance on its own, start a new timer promise that will advance the queue\n * once it resolves.\n *\n * @private\n *\n * @param {Object} options - Options object passed from playNextAnimation event.\n * @param {string} layerName - Name of the layer that owns the queue state.\n * @param {string} animationName - Name of the queue state animation.\n * @param {boolean} canAdvance - Whether or not the current state in the queue\n * can advance on its own.\n * @param {boolean} isQueueEnd - Whether the current state in the queue is the last\n * state in the queue.\n */\n\n }, {\n key: "_onNext",\n value: function _onNext(_ref4) {\n var _this2 = this;\n\n var layerName = _ref4.layerName,\n animationName = _ref4.animationName,\n canAdvance = _ref4.canAdvance,\n isQueueEnd = _ref4.isQueueEnd;\n // Exit if this isn\'t a managed layer\n var layer = this._managedLayers[layerName];\n\n if (layer === undefined) {\n return;\n } // Exit if it isn\'t a managed animation\n\n\n var animation = layer.animations[animationName];\n\n if (animation === undefined) {\n return;\n } // Start a new timer for looping states that aren\'t the end of the queue\n\n\n if (!canAdvance && !isQueueEnd && layer.currentGesture === animationName) {\n var holdTime = this._getHoldTime(layer, animation);\n\n layer.holdTimer.cancel(); // Skip to the next animation right away if hold time is zero\n\n if (holdTime <= 0) {\n this._host.AnimationFeature.playNextAnimation(layerName, animationName);\n } // Wait for the given hold time before progressing\n else {\n layer.holdTimer = core_Utils.wait(holdTime, {\n onFinish: function onFinish() {\n // Advance the queue to the next state\n if (layer.currentGesture === animationName) {\n _this2._host.AnimationFeature.playNextAnimation(layerName, animationName);\n }\n }\n });\n }\n }\n }\n /**\n * Callback for {@link core/AnimationFeature#stopAnimation} event. If the\n * event is emitted for a managed animation cancel the layer\'s stored timers.\n * If the layer is set to auto-disable set its weight to 0.\n *\n * @private\n *\n * @param {Object} options - Options object passed from playNextAnimation event.\n * @param {string} layerName - Name of the layer that owns the stopped animation.\n * @param {string} animationName - Name of the animation that was stopped.\n */\n\n }, {\n key: "_onStop",\n value: function _onStop(_ref5) {\n var layerName = _ref5.layerName,\n animationName = _ref5.animationName;\n // Make sure the layer is managed\n var layer = this._managedLayers[layerName];\n\n if (layer === undefined) {\n return;\n } // Make sure the animation is managed\n\n\n var animation = layer.animations[animationName];\n\n if (animation !== undefined && animationName === layer.currentGesture) {\n layer.currentGesture = null;\n layer.playTimer = null;\n layer.holdTimer.cancel(); // Turn off layer weight\n\n if (layer.autoDisable) {\n this.setLayerWeights(function (name) {\n return name === layerName;\n }, 0);\n }\n }\n }\n }, {\n key: "_onAnimationAdded",\n value: function _onAnimationAdded(_ref6) {\n var layerName = _ref6.layerName,\n animationName = _ref6.animationName;\n var layer = this._managedLayers[layerName];\n\n if (layer !== undefined) {\n var animation = layer.animations[animationName]; // Register the animation as active if it is unmanaged\n\n if (animation === undefined) {\n this.registerAnimation(layerName, animationName);\n } // Mark the animation as active if it is managed\n else {\n animation.isActive = true;\n }\n }\n }\n }, {\n key: "registerLayer",\n value: function registerLayer(name) {\n var _this3 = this;\n\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n GestureFeature_get(GestureFeature_getPrototypeOf(GestureFeature.prototype), "registerLayer", this).call(this, name, GestureFeature_objectSpread(GestureFeature_objectSpread({}, options), {}, {\n holdTimer: core_Deferred.resolve(),\n playTimer: null,\n currentGesture: null\n }));\n\n if (this._managedLayers[name].isActive) {\n this._host.AnimationFeature.getAnimations(name).forEach(function (anim) {\n // Automatically register all animations on the layer\n if (_this3._managedLayers[name].animations[anim] === undefined) {\n _this3.registerAnimation(name, anim, _this3._managedLayers[name].animations[anim]);\n }\n });\n }\n }\n }, {\n key: "registerAnimation",\n value: function registerAnimation(layerName, animationName) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n // Try to fall back to a default word array\n if (!(options.words instanceof Array) && !(options.words instanceof Set)) {\n options.words = DefaultGestureWords[animationName] || [];\n }\n\n GestureFeature_get(GestureFeature_getPrototypeOf(GestureFeature.prototype), "registerAnimation", this).call(this, layerName, animationName, options);\n }\n /**\n * Create an object that maps ssml mark syntax required to play each gesture to\n * the words array associated with each gesture. Words arrays are defined at when\n * the gesture animation is registered. Gestures without associated words will\n * be excluded from the result. The resulting object can be used as an input\n * for {@link TextToSpeechUtils.autoGenerateSSMLMarks} to update a speech string\n * with the markup required to play gestures timed with their associated words.\n *\n * @returns {Object}\n */\n\n }, {\n key: "createGestureMap",\n value: function createGestureMap() {\n var _this4 = this;\n\n var gestureMap = {};\n Object.entries(this._managedLayers).forEach(function (_ref7) {\n var _ref8 = GestureFeature_slicedToArray(_ref7, 2),\n layerName = _ref8[0],\n animations = _ref8[1].animations;\n\n Object.entries(animations).forEach(function (_ref9) {\n var _ref10 = GestureFeature_slicedToArray(_ref9, 2),\n animationName = _ref10[0],\n _ref10$ = _ref10[1],\n holdTime = _ref10$.holdTime,\n minimumInterval = _ref10$.minimumInterval,\n words = _ref10$.words,\n transitionTime = _ref10$.transitionTime;\n\n // Only store gestures that have any associated words\n if (words.length) {\n var options = GestureFeature_objectSpread(GestureFeature_objectSpread(GestureFeature_objectSpread({}, holdTime && {\n holdTime: holdTime\n }), minimumInterval && {\n minimumInterval: minimumInterval\n }), transitionTime && {\n transitionTime: transitionTime\n });\n\n var key = {\n feature: _this4.constructor.name,\n method: \'playGesture\',\n args: [layerName, animationName, options]\n };\n gestureMap[JSON.stringify(key)] = words;\n }\n });\n });\n return gestureMap;\n }\n /**\n * Create an array that contains ssml mark syntax required to play each gesture\n * that does not have any associated words. The resulting array can be used as\n * an input for {@link TextToSpeechUtils.autoGenerateSSMLMarks} or\n * {@link TextToSpeechUtils.addMarksToUnmarkedSentences} to update a speech\n * string with the markup required to play random gestures at each unmarked\n * sentence in the string.\n *\n * @param {Array.=} layers - An array of names of managed layers to generate\n * marks for. If undefined, use all managed layers.\n *\n * @returns {Array.}\n */\n\n }, {\n key: "createGenericGestureArray",\n value: function createGenericGestureArray(layers) {\n var _this5 = this;\n\n var genericGestures = [];\n layers = layers || Object.keys(this._managedLayers);\n layers.forEach(function (layerName) {\n var layer = _this5._managedLayers[layerName]; // Make sure the layer is managed\n\n if (!layer) {\n return;\n }\n\n Object.entries(layer.animations).forEach(function (_ref11) {\n var _ref12 = GestureFeature_slicedToArray(_ref11, 2),\n animationName = _ref12[0],\n _ref12$ = _ref12[1],\n holdTime = _ref12$.holdTime,\n minimumInterval = _ref12$.minimumInterval,\n words = _ref12$.words,\n transitionTime = _ref12$.transitionTime;\n\n // Only store gestures that don\'t have any associated words\n if (!words.length) {\n var options = GestureFeature_objectSpread(GestureFeature_objectSpread(GestureFeature_objectSpread({}, holdTime && {\n holdTime: holdTime\n }), minimumInterval && {\n minimumInterval: minimumInterval\n }), transitionTime && {\n transitionTime: transitionTime\n });\n\n var key = JSON.stringify({\n feature: _this5.constructor.name,\n method: \'playGesture\',\n args: [layerName, animationName, options]\n });\n\n if (!genericGestures.includes(key)) {\n genericGestures.push(key);\n }\n }\n });\n });\n return genericGestures;\n }\n /**\n * Play a managed gesture animation.\n *\n * @param {string} layerName - The name of the layer that contains the gesture\n * animation.\n * @param {string} animationName - The name of the gesture animation.\n * @param {Object=} options - Optional gesture options.\n * @param {number=} options.holdTime - This option only applies to {@link QueueState}\n * gestures. When a QueueState gesture progresses to a looping state, this option\n * defines how many seconds should elapse before moving the queue forward. If\n * undefined, it will fall back first to the holdTime defined in the options when\n * the gesture animation was registered and then to the holdTime defined on the\n * feature.\n * @param {number=} options.minimumInterval - The minimum amount of time that\n * must have elapsed since the last time a gesture was played.\n */\n\n }, {\n key: "playGesture",\n value: function playGesture(layerName, animationName) {\n var _ref13 = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},\n holdTime = _ref13.holdTime,\n minimumInterval = _ref13.minimumInterval,\n transitionTime = _ref13.transitionTime,\n _ref13$force = _ref13.force,\n force = _ref13$force === void 0 ? false : _ref13$force;\n\n // Make sure the animation is registered\n if (this._managedLayers[layerName] === undefined || this._managedLayers[layerName].animations[animationName] === undefined) {\n this.registerAnimation(layerName, animationName, {\n holdTime: holdTime,\n minimumInterval: minimumInterval,\n transitionTime: transitionTime\n });\n }\n\n var layer = this._managedLayers[layerName];\n var animation = layer.animations[animationName]; // Make sure the animation is active\n\n if (!animation.isActive) {\n // Create warning message based on which object doesn\'t exist yet\n var typeName = layer.isActive ? \'animation\' : \'layer\';\n var message = "Skipping gesture ".concat(animationName, " on layer ").concat(layerName, " for host ").concat(this._host.id, ". No ").concat(typeName, " exists with this name yet.");\n console.warn(message);\n return core_Deferred.cancel({\n reason: \'inactive\',\n value: typeName\n });\n } // Check if the gesture is already playing\n\n\n var currentGesture = layer.currentGesture;\n\n if (currentGesture === animationName && !force) {\n var _message = "Skipping gesture ".concat(animationName, " on layer ").concat(layerName, " for host ").concat(this._host.id, ". The gesture is already playing. Use options.force to force the gesture replay, which may result in a hard transition.");\n\n console.warn(_message);\n return core_Deferred.cancel({\n reason: \'playing\',\n value: animationName\n });\n } // Update animation options\n\n\n if (holdTime !== undefined) {\n animation.holdTime = holdTime;\n }\n\n if (minimumInterval !== undefined) {\n animation.minimumInterval = minimumInterval;\n } else {\n minimumInterval = this._getMinimumInterval(layer, animation);\n } // Check the interval\n\n\n if (!force && layer.playTimer !== null && layer.playTimer < minimumInterval) {\n console.warn("Skipping gesture ".concat(animationName, " on layer ").concat(layerName, " for host ").concat(this._host.id, ". Minimum interval ").concat(minimumInterval, " has not been met."));\n return core_Deferred.cancel({\n reason: \'minimumInterval\',\n value: minimumInterval - layer.playTimer\n });\n } // Play the animation\n\n\n layer.currentGesture = animationName;\n layer.playTimer = 0;\n layer.holdTimer.cancel();\n\n if (layer.autoDisable) {\n this.setLayerWeights(function (name) {\n return name === layerName;\n }, 1);\n }\n\n return this._host.AnimationFeature.playAnimation(layerName, animationName, transitionTime);\n }\n }, {\n key: "update",\n value: function update(deltaTime) {\n var _this6 = this;\n\n GestureFeature_get(GestureFeature_getPrototypeOf(GestureFeature.prototype), "update", this).call(this, deltaTime); // Increment the timers\n\n\n Object.entries(this._managedLayers).forEach(function (_ref14) {\n var _ref15 = GestureFeature_slicedToArray(_ref14, 2),\n name = _ref15[0],\n options = _ref15[1];\n\n if (options.isActive && !_this6._host.AnimationFeature.getPaused(name)) {\n options.holdTimer.execute(deltaTime);\n\n if (options.playTimer !== null) {\n options.playTimer += deltaTime / 1000;\n }\n }\n });\n }\n }, {\n key: "installApi",\n value: function installApi() {\n /**\n * @inner\n * @namespace GestureFeature\n */\n var api = GestureFeature_get(GestureFeature_getPrototypeOf(GestureFeature.prototype), "installApi", this).call(this);\n\n Object.assign(api, {\n /**\n * @memberof GestureFeature\n * @instance\n * @method\n * @see GestureFeature#createGestureMap\n */\n createGestureMap: this.createGestureMap.bind(this),\n\n /**\n * @memberof GestureFeature\n * @instance\n * @method\n * @see GestureFeature#createGenericGestureArray\n */\n createGenericGestureArray: this.createGenericGestureArray.bind(this),\n\n /**\n * @memberof GestureFeature\n * @instance\n * @method\n * @see GestureFeature#playGesture\n */\n playGesture: this.playGesture.bind(this)\n });\n }\n }]);\n\n return GestureFeature;\n}(core_AbstractHostFeature.mix(awspack_SSMLSpeechmarkInterface.Mixin, animpack_ManagedAnimationLayerInterface.Mixin));\n\nObject.defineProperties(GestureFeature_GestureFeature, {\n DEFAULT_LAYER_OPTIONS: {\n value: GestureFeature_objectSpread(GestureFeature_objectSpread({}, GestureFeature_GestureFeature.DEFAULT_LAYER_OPTIONS), {}, {\n autoDisable: true\n }),\n writable: false\n },\n EVENT_DEPENDENCIES: {\n value: GestureFeature_objectSpread(GestureFeature_objectSpread({}, GestureFeature_GestureFeature.EVENT_DEPENDENCIES), {}, {\n AnimationFeature: GestureFeature_objectSpread(GestureFeature_objectSpread({}, GestureFeature_GestureFeature.EVENT_DEPENDENCIES.AnimationFeature), {}, {\n playNextAnimation: \'_onNext\',\n stopAnimation: \'_onStop\',\n interruptAnimation: \'_onStop\'\n })\n })\n }\n});\n/* harmony default export */ var core_GestureFeature = (GestureFeature_GestureFeature);\n\n// CONCATENATED MODULE: ./src/core/animpack/AnimationUtils.js\nfunction AnimationUtils_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction AnimationUtils_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction AnimationUtils_createClass(Constructor, protoProps, staticProps) { if (protoProps) AnimationUtils_defineProperties(Constructor.prototype, protoProps); if (staticProps) AnimationUtils_defineProperties(Constructor, staticProps); return Constructor; }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n\n/**\r\n * A collection of useful animation functions.\r\n *\r\n * @hideconstructor\r\n */\n\nvar AnimationUtils_AnimationUtils = /*#__PURE__*/function () {\n function AnimationUtils() {\n AnimationUtils_classCallCheck(this, AnimationUtils);\n }\n\n AnimationUtils_createClass(AnimationUtils, null, [{\n key: "lerp",\n value: function lerp(from, to, factor) {\n console.warn("AnimationUtils.lerp is being deprecated. Use MathUtils.lerp instead.");\n return core_MathUtils.lerp(from, to, factor);\n }\n /**\r\n * Clamp a number between 2 values.\r\n *\r\n * @param {number} value - Value to clamp.\r\n * @param {number} [min=0] - Minumum value.\r\n * @param {number} [max=1] - Maximum value.\r\n *\r\n * @returns {number}\r\n */\n\n }, {\n key: "clamp",\n value: function clamp(value) {\n var min = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var max = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;\n console.warn("AnimationUtils.clamp is being deprecated. Use MathUtils.clamp instead.");\n return core_MathUtils.clamp(value, min, max);\n }\n /**\r\n * Return a deferred promise that can be used to update the value of a numeric\r\n * property of this object over time. Pass delta time in milliseconds to the\r\n * deferred promise\'s execute method in an update loop to animate the property\r\n * towards the target value.\r\n *\r\n * @param {Object} propertyOwner - Object that contains the property to animation.\r\n * @param {string} propertyName - Name of the property to animate.\r\n * @param {number} targetValue - Target value to reach.\r\n * @param {Object=} options - Optional options object\r\n * @param {number} [options.seconds=0] - Number of seconds it will take to reach\r\n * the target value.\r\n * @param {Function} [options.easingFn=Linear.InOut] - Easing function to use for animation.\r\n * @param {Function} [options.onFinish] - Callback to execute once the animation completes.\r\n * The target value is passed as a parameter.\r\n * @param {Function=} options.onProgress - Callback to execute each time the animation\r\n * property is updated during the animation. The property\'s value at the time of\r\n * the update is passed as a parameter.\r\n * @param {Function=} options.onCancel - Callback to execute if the user cancels the\r\n * animation before completion. The animation property\'s value at the time of\r\n * cancel is passed as a parameter.\r\n * @param {Function=} options.onError - Callback to execute if the animation stops\r\n * because an error is encountered. The error message is passed as a parameter.\r\n *\r\n * @returns {Deferred} Resolves with the property\'s value once it reaches the\r\n * target value.\r\n */\n\n }, {\n key: "interpolateProperty",\n value: function interpolateProperty(propertyOwner, propertyName, targetValue) {\n var _ref = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {},\n _ref$seconds = _ref.seconds,\n seconds = _ref$seconds === void 0 ? 0 : _ref$seconds,\n easingFn = _ref.easingFn,\n _onFinish = _ref.onFinish,\n _onProgress = _ref.onProgress,\n _onCancel = _ref.onCancel,\n onError = _ref.onError;\n\n // Make sure property is an object\n if (!(propertyOwner instanceof Object)) {\n var e = new Error("Cannot interpolate property ".concat(propertyName, ". Property owner must be an object."));\n\n if (typeof onError === \'function\') {\n onError(e);\n }\n\n return core_Deferred.reject(e);\n } // Make sure property is numeric\n\n\n if (Number.isNaN(Number(propertyOwner[propertyName]))) {\n var _e = new Error("Cannot interpolate property ".concat(propertyName, ". Property must be numeric."));\n\n if (typeof onError === \'function\') {\n onError(_e);\n }\n\n return core_Deferred.reject(_e);\n } // Make sure the target value is numeric\n\n\n if (Number.isNaN(Number(targetValue))) {\n var _e2 = new Error("Cannot interpolate property ".concat(propertyName, " to value ").concat(targetValue, ". Target value must be numeric."));\n\n if (typeof onError === \'function\') {\n onError(_e2);\n }\n\n return core_Deferred.reject(_e2);\n } // Resolve immediately if the target has already been reached\n\n\n var startValue = propertyOwner[propertyName];\n\n if (startValue === targetValue) {\n if (typeof _onFinish === \'function\') {\n _onFinish(targetValue);\n }\n\n return core_Deferred.resolve(targetValue);\n } // Default to linear interpolation\n\n\n if (typeof easingFn !== \'function\') {\n if (easingFn !== undefined) {\n console.warn("Invalid property interpolation easingFn. Defaulting to linear interpolation.");\n }\n\n easingFn = Linear.InOut;\n }\n\n var interpolator = core_Utils.wait(seconds, {\n onFinish: function onFinish() {\n propertyOwner[propertyName] = targetValue;\n\n if (typeof _onFinish === \'function\') {\n _onFinish(targetValue);\n }\n },\n onCancel: function onCancel() {\n if (typeof _onCancel === \'function\') {\n _onCancel(propertyOwner[propertyName]);\n }\n },\n onProgress: function onProgress(progress) {\n if (propertyOwner[propertyName] !== targetValue) {\n // Calculate the lerp factor\n var easeFactor = easingFn(progress);\n\n if (typeof easeFactor !== \'number\') {\n var _e3 = new Error("Invalid property interpolation easingFn. EasingFn must return a number.");\n\n interpolator.reject(_e3);\n return;\n } // Update the value\n\n\n propertyOwner[propertyName] = core_MathUtils.lerp(startValue, targetValue, easeFactor);\n } // Signal progress\n\n\n if (typeof _onProgress === \'function\') {\n _onProgress(propertyOwner[propertyName]);\n } // Signal completion once time is up\n\n\n if (progress === 1) {\n propertyOwner[propertyName] = targetValue;\n interpolator.resolve(targetValue);\n }\n },\n onError: onError\n });\n return interpolator;\n }\n }]);\n\n return AnimationUtils;\n}();\n\n/* harmony default export */ var animpack_AnimationUtils = (AnimationUtils_AnimationUtils);\n// CONCATENATED MODULE: ./src/core/animpack/state/AbstractState.js\nfunction AbstractState_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction AbstractState_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction AbstractState_createClass(Constructor, protoProps, staticProps) { if (protoProps) AbstractState_defineProperties(Constructor.prototype, protoProps); if (staticProps) AbstractState_defineProperties(Constructor, staticProps); return Constructor; }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n/**\n * Base class for a state in our animation system.\n *\n * @abstract\n */\n\nvar AbstractState_AbstractState = /*#__PURE__*/function () {\n /**\n * @constructor\n *\n * @param {Object=} options - Options for the animation state.\n * @param {string=} options.name - Name for the animation state. Names must be\n * unique for the container the state is applied to and should be validated at\n * the container level. If no name is given it will default to the constructor\n * name.\n * @param {weight} [options.weight=0] - The 0-1 amount of influence the state will have.\n */\n function AbstractState() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n AbstractState_classCallCheck(this, AbstractState);\n\n this.name = options.name !== undefined ? options.name : this.constructor.name;\n this._weight = options.weight !== undefined ? core_MathUtils.clamp(options.weight, 0, 1) : 0;\n this._internalWeight = this._weight;\n this._paused = false;\n this._promises = {\n finish: core_Deferred.resolve(),\n weight: core_Deferred.resolve(),\n play: core_Deferred.resolve()\n };\n this._playCallbacks = {\n onFinish: undefined,\n onError: undefined,\n onCancel: undefined\n };\n }\n /**\n * Gets whether or not the state is currently paused.\n *\n * @type {number}\n */\n\n\n AbstractState_createClass(AbstractState, [{\n key: "paused",\n get: function get() {\n return this._paused;\n }\n /**\n * Gets and sets the user defined weight.\n *\n * @type {number}\n */\n\n }, {\n key: "weight",\n get: function get() {\n return this._weight;\n },\n set: function set(weight) {\n this._weight = core_MathUtils.clamp(weight, 0, 1);\n }\n /**\n * Gets whether or not the weight is currently being animated.\n *\n * @readonly\n * @type {boolean}\n */\n\n }, {\n key: "weightPending",\n get: function get() {\n return this._promises.weight && this._promises.weight.pending;\n }\n /**\n * Updates the user defined weight over time.\n *\n * @param {number} weight - The target weight value.\n * @param {number} [seconds=0] - The amount of time it will take to reach the\n * target weight.\n * @param {Function=} easingFn - The easing function to use for interpolation.\n *\n * @returns {Deferred}\n */\n\n }, {\n key: "setWeight",\n value: function setWeight(weight) {\n var seconds = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var easingFn = arguments.length > 2 ? arguments[2] : undefined;\n\n this._promises.weight.cancel();\n\n weight = core_MathUtils.clamp(weight);\n this._promises.weight = animpack_AnimationUtils.interpolateProperty(this, \'weight\', weight, {\n seconds: seconds,\n easingFn: easingFn\n });\n return this._promises.weight;\n }\n /**\n * Gets the internal weight.\n *\n * @readonly\n * @type {number}\n */\n\n }, {\n key: "internalWeight",\n get: function get() {\n return this._internalWeight;\n }\n /**\n * Multiplies the user weight by a factor to determine the internal weight.\n *\n * @param {number} factor - 0-1 multiplier to apply to the user weight.\n */\n\n }, {\n key: "updateInternalWeight",\n value: function updateInternalWeight(factor) {\n this._internalWeight = this._weight * factor;\n }\n /**\n * Update any values that need to be evaluated every frame.\n *\n * @param {number} deltaTime - Time in milliseconds since the last update.\n */\n\n }, {\n key: "update",\n value: function update(deltaTime) {\n if (!this._paused) {\n Object.values(this._promises).forEach(function (promise) {\n promise.execute(deltaTime);\n });\n }\n }\n /**\n * Start playback of the state from the beginning.\n *\n * @param {Function=} onFinish - Function to execute when the state finishes.\n * @param {Function=} onError - Function to execute if the state encounters\n * an error during playback.\n * @param {Function=} onCancel - Function to execute if playback is canceled.\n *\n * @returns {Deferred}\n */\n\n }, {\n key: "play",\n value: function play(onFinish, onError, onCancel) {\n this._paused = false;\n this._playCallbacks.onFinish = onFinish;\n this._playCallbacks.onError = onError;\n this._playCallbacks.onCancel = onCancel;\n this._promises.play = new core_Deferred(undefined, onFinish, onError, onCancel);\n this._promises.finish = core_Deferred.all([this._promises.play, this._promises.weight]);\n return this._promises.finish;\n }\n /**\n * Pause playback of the state. This prevents pending promises from being executed.\n *\n * @returns {boolean}\n */\n\n }, {\n key: "pause",\n value: function pause() {\n this._paused = true;\n return true;\n }\n /**\n * Resume playback of the state.\n *\n * @param {Function=} onFinish - Function to execute when the state finishes.\n * @param {Function=} onError - Function to execute if the state encounters\n * an error during playback.\n * @param {Function=} onCancel - Function to execute if playback is canceled.\n *\n * @returns {Deferred}\n */\n\n }, {\n key: "resume",\n value: function resume(onFinish, onError, onCancel) {\n this._paused = false;\n\n if (!this._promises.play.pending) {\n this._playCallbacks.onFinish = onFinish || this._playCallbacks.onFinish;\n this._playCallbacks.onError = onError || this._playCallbacks.onError;\n this._playCallbacks.onCancel = onCancel || this._playCallbacks.onCancel;\n this._promises.play = new core_Deferred(undefined, this._playCallbacks.onFinish, this._playCallbacks.onError, this._playCallbacks.onCancel);\n this._promises.finish = core_Deferred.all([this._promises.play, this._promises.weight]);\n }\n\n return this._promises.finish;\n }\n /**\n * Cancel playback of the state and cancel any pending promises.\n *\n * @returns {boolean}\n */\n\n }, {\n key: "cancel",\n value: function cancel() {\n this._paused = true;\n Object.values(this._promises).forEach(function (promise) {\n promise.cancel();\n });\n return true;\n }\n /**\n * Stop playback of the state and resolve any pending promises.\n *\n * @returns {boolean}\n */\n\n }, {\n key: "stop",\n value: function stop() {\n this._paused = true;\n Object.values(this._promises).forEach(function (promise) {\n promise.resolve();\n });\n return true;\n }\n /**\n * Cancel any pending promises and remove reference to them.\n */\n\n }, {\n key: "discard",\n value: function discard() {\n this.cancel();\n delete this._promises;\n }\n /**\n * Force the internal weight to 0. Should be called before switching or transitioning\n * to a new state.\n */\n\n }, {\n key: "deactivate",\n value: function deactivate() {\n this.updateInternalWeight(0);\n }\n }]);\n\n return AbstractState;\n}();\n\n/* harmony default export */ var state_AbstractState = (AbstractState_AbstractState);\n// CONCATENATED MODULE: ./src/core/animpack/state/TransitionState.js\nfunction TransitionState_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { TransitionState_typeof = function _typeof(obj) { return typeof obj; }; } else { TransitionState_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return TransitionState_typeof(obj); }\n\nfunction TransitionState_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction TransitionState_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction TransitionState_createClass(Constructor, protoProps, staticProps) { if (protoProps) TransitionState_defineProperties(Constructor.prototype, protoProps); if (staticProps) TransitionState_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction TransitionState_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { TransitionState_get = Reflect.get; } else { TransitionState_get = function _get(target, property, receiver) { var base = TransitionState_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return TransitionState_get(target, property, receiver || target); }\n\nfunction TransitionState_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = TransitionState_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction TransitionState_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) TransitionState_setPrototypeOf(subClass, superClass); }\n\nfunction TransitionState_setPrototypeOf(o, p) { TransitionState_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return TransitionState_setPrototypeOf(o, p); }\n\nfunction TransitionState_createSuper(Derived) { var hasNativeReflectConstruct = TransitionState_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = TransitionState_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = TransitionState_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return TransitionState_possibleConstructorReturn(this, result); }; }\n\nfunction TransitionState_possibleConstructorReturn(self, call) { if (call && (TransitionState_typeof(call) === "object" || typeof call === "function")) { return call; } return TransitionState_assertThisInitialized(self); }\n\nfunction TransitionState_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction TransitionState_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction TransitionState_getPrototypeOf(o) { TransitionState_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return TransitionState_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n/**\r\n * Class for smooth transitioning between states on an animation layer.\r\n *\r\n * @extends AbstractState\r\n */\n\nvar TransitionState_TransitionState = /*#__PURE__*/function (_AbstractState) {\n TransitionState_inherits(TransitionState, _AbstractState);\n\n var _super = TransitionState_createSuper(TransitionState);\n\n function TransitionState() {\n var _this;\n\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n TransitionState_classCallCheck(this, TransitionState);\n\n _this = _super.call(this, options);\n _this._to = null;\n _this._from = [];\n _this._weightPromise = core_Deferred.resolve();\n return _this;\n }\n\n TransitionState_createClass(TransitionState, [{\n key: "internalWeight",\n get: function get() {\n // Find the combined weight of all sub-states\n var totalWeight = 0;\n\n if (this._to) {\n totalWeight += this._to.weight;\n }\n\n this._from.forEach(function (state) {\n totalWeight += state.weight;\n });\n\n return totalWeight * this._internalWeight;\n }\n }, {\n key: "updateInternalWeight",\n value: function updateInternalWeight(factor) {\n var _this2 = this;\n\n TransitionState_get(TransitionState_getPrototypeOf(TransitionState.prototype), "updateInternalWeight", this).call(this, factor);\n\n this._from.forEach(function (state) {\n state.updateInternalWeight(_this2._internalWeight);\n });\n\n if (this._to) {\n this._to.updateInternalWeight(this._internalWeight);\n }\n }\n /**\r\n * Update sub-states the transition is controlling and start new weight\r\n * animations on each one. This should be called each time the current state of\r\n * an animation layer gets updated to a new value and a transition time greater\r\n * that zero is specified.\r\n *\r\n * @param {Array.} [currentStates=[]] - States whose weight values\r\n * will be animated to 0.\r\n * @param {AbstractState=} targetState - State whose weight will be animated\r\n * to 1.\r\n * @param {number} transitionTime - Amount of time it will in seconds take for\r\n * weight animations to complete.\r\n * @param {Function=} easingFn - Easing function to use for weight animations.\r\n * Default is Easing.Linear.InOut.\r\n * @param {Function=} onComplete - Function to execute once all weight animations\r\n * complete.\r\n */\n\n }, {\n key: "configure",\n value: function configure() {\n var currentStates = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n var targetState = arguments.length > 1 ? arguments[1] : undefined;\n var transitionTime = arguments.length > 2 ? arguments[2] : undefined;\n var easingFn = arguments.length > 3 ? arguments[3] : undefined;\n var onComplete = arguments.length > 4 ? arguments[4] : undefined;\n\n // Deactivate any states that aren\'t in the new configuration\n if (this._to === targetState || currentStates.includes(this._to)) {\n this._to = null;\n }\n\n this._from = this._from.filter(function (state) {\n return state !== targetState && !currentStates.includes(state);\n });\n this.deactivate();\n this._from = currentStates;\n this._to = targetState;\n this.reset(transitionTime, easingFn, onComplete);\n }\n /**\r\n * Start new weight animations state the transition controls. This should be called\r\n * if an animation is played with a transition time greater than zero and a transtion\r\n * to that animation was already in progress.\r\n *\r\n * @param {number} transitionTime - Amount of time it will in seconds take for\r\n * weight animations to complete.\r\n * @param {Function=} easingFn - Easing function to use for weight animations.\r\n * Default is Easing.Linear.InOut.\r\n * @param {Function=} onComplete - Function to execute once all weight animations\r\n * complete.\r\n */\n\n }, {\n key: "reset",\n value: function reset(transitionTime, easingFn, onComplete) {\n var _this3 = this;\n\n // Stop any pending promises\n this._weightPromise.cancel(); // Start tweening weight to 0 for the current states\n\n\n var weightPromises = this._from.map(function (state) {\n return state.setWeight(0, transitionTime, easingFn);\n }); // Start tweening weight to 1 for the target state\n\n\n if (this._to) {\n weightPromises.push(this._to.setWeight(1, transitionTime, easingFn));\n this.name = this._to.name;\n } else {\n this.name = null;\n }\n\n this._weightPromise = core_Deferred.all(weightPromises, function () {\n _this3._from.forEach(function (state) {\n state.cancel();\n state.deactivate();\n });\n\n if (typeof onComplete === \'function\') {\n onComplete();\n }\n });\n }\n }, {\n key: "play",\n value: function play(onFinish, onError, onCancel, onNext) {\n this._paused = false;\n this._playCallbacks.onFinish = onFinish;\n this._playCallbacks.onError = onError;\n this._playCallbacks.onCancel = onCancel;\n var promises = [this._weightPromise];\n\n this._from.forEach(function (state) {\n state.resume();\n });\n\n if (this._to) {\n this._promises.play = this._to.play(undefined, undefined, undefined, onNext);\n promises.push(this._promises.play);\n }\n\n this._promises.finish = core_Deferred.all(promises, onFinish, onError, onCancel);\n return this._promises.finish;\n }\n }, {\n key: "pause",\n value: function pause() {\n this._from.forEach(function (state) {\n state.pause();\n });\n\n if (this._to) {\n this._to.pause();\n }\n\n return TransitionState_get(TransitionState_getPrototypeOf(TransitionState.prototype), "pause", this).call(this);\n }\n }, {\n key: "resume",\n value: function resume(onFinish, onError, onCancel, onNext) {\n this._paused = false;\n\n if (!this._promises.play.pending) {\n this._playCallbacks.onFinish = onFinish || this._playCallbacks.onFinish;\n this._playCallbacks.onError = onError || this._playCallbacks.onError;\n this._playCallbacks.onCancel = onCancel || this._playCallbacks.onCancel;\n }\n\n var promises = [this._weightPromise];\n\n this._from.forEach(function (state) {\n state.resume();\n });\n\n if (this._to) {\n this._promises.play = this._to.resume(undefined, undefined, undefined, onNext);\n promises.push(this._promises.play);\n }\n\n this._promises.finish = core_Deferred.all(promises, this._playCallbacks.onFinish, this._playCallbacks.onError, this._playCallbacks.onCancel);\n return this._promises.finish;\n }\n }, {\n key: "cancel",\n value: function cancel() {\n this._from.forEach(function (state) {\n state.pause();\n });\n\n if (this._to) {\n this._to.cancel();\n }\n\n this._weightPromise.cancel();\n\n return TransitionState_get(TransitionState_getPrototypeOf(TransitionState.prototype), "cancel", this).call(this);\n }\n }, {\n key: "stop",\n value: function stop() {\n this._from.forEach(function (state) {\n state.pause();\n });\n\n if (this._to) {\n this._to.stop();\n }\n\n return TransitionState_get(TransitionState_getPrototypeOf(TransitionState.prototype), "stop", this).call(this);\n }\n }, {\n key: "update",\n value: function update(deltaTime) {\n TransitionState_get(TransitionState_getPrototypeOf(TransitionState.prototype), "update", this).call(this, deltaTime);\n\n this._from.forEach(function (state) {\n state.update(deltaTime);\n });\n\n if (this._to) {\n this._to.update(deltaTime);\n }\n }\n }, {\n key: "discard",\n value: function discard() {\n TransitionState_get(TransitionState_getPrototypeOf(TransitionState.prototype), "discard", this).call(this);\n\n this._weightPromise.cancel();\n\n delete this._weightPromise;\n this._to = null;\n this._from.length = 0;\n }\n }, {\n key: "deactivate",\n value: function deactivate() {\n if (this._to) {\n this._to.deactivate();\n }\n\n this._from.forEach(function (state) {\n state.deactivate();\n });\n }\n }]);\n\n return TransitionState;\n}(state_AbstractState);\n\n/* harmony default export */ var state_TransitionState = (TransitionState_TransitionState);\n// CONCATENATED MODULE: ./src/core/animpack/AnimationPlayerInterface.js\nfunction AnimationPlayerInterface_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { AnimationPlayerInterface_typeof = function _typeof(obj) { return typeof obj; }; } else { AnimationPlayerInterface_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return AnimationPlayerInterface_typeof(obj); }\n\nfunction AnimationPlayerInterface_toConsumableArray(arr) { return AnimationPlayerInterface_arrayWithoutHoles(arr) || AnimationPlayerInterface_iterableToArray(arr) || AnimationPlayerInterface_unsupportedIterableToArray(arr) || AnimationPlayerInterface_nonIterableSpread(); }\n\nfunction AnimationPlayerInterface_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."); }\n\nfunction AnimationPlayerInterface_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return AnimationPlayerInterface_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return AnimationPlayerInterface_arrayLikeToArray(o, minLen); }\n\nfunction AnimationPlayerInterface_iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction AnimationPlayerInterface_arrayWithoutHoles(arr) { if (Array.isArray(arr)) return AnimationPlayerInterface_arrayLikeToArray(arr); }\n\nfunction AnimationPlayerInterface_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction AnimationPlayerInterface_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { AnimationPlayerInterface_get = Reflect.get; } else { AnimationPlayerInterface_get = function _get(target, property, receiver) { var base = AnimationPlayerInterface_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return AnimationPlayerInterface_get(target, property, receiver || target); }\n\nfunction AnimationPlayerInterface_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = AnimationPlayerInterface_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction AnimationPlayerInterface_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) AnimationPlayerInterface_setPrototypeOf(subClass, superClass); }\n\nfunction AnimationPlayerInterface_setPrototypeOf(o, p) { AnimationPlayerInterface_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return AnimationPlayerInterface_setPrototypeOf(o, p); }\n\nfunction AnimationPlayerInterface_createSuper(Derived) { var hasNativeReflectConstruct = AnimationPlayerInterface_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = AnimationPlayerInterface_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = AnimationPlayerInterface_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return AnimationPlayerInterface_possibleConstructorReturn(this, result); }; }\n\nfunction AnimationPlayerInterface_possibleConstructorReturn(self, call) { if (call && (AnimationPlayerInterface_typeof(call) === "object" || typeof call === "function")) { return call; } return AnimationPlayerInterface_assertThisInitialized(self); }\n\nfunction AnimationPlayerInterface_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction AnimationPlayerInterface_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction AnimationPlayerInterface_getPrototypeOf(o) { AnimationPlayerInterface_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return AnimationPlayerInterface_getPrototypeOf(o); }\n\nfunction AnimationPlayerInterface_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction AnimationPlayerInterface_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction AnimationPlayerInterface_createClass(Constructor, protoProps, staticProps) { if (protoProps) AnimationPlayerInterface_defineProperties(Constructor.prototype, protoProps); if (staticProps) AnimationPlayerInterface_defineProperties(Constructor, staticProps); return Constructor; }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/* eslint-disable max-classes-per-file */\n\n/* eslint-disable no-unused-vars */\n\n/* eslint-disable no-empty-function */\n\n/* eslint-disable getter-return */\n\n/* eslint-disable no-useless-constructor */\n\n\n/**\n * Class factory interface for controlling playback of a collection of animations.\n * One animation can be played at any given time, crossfading between animations\n * will result in playing a {@link TransitionState}.\n *\n * @interface\n */\n\nvar AnimationPlayerInterface_AnimationPlayerInterface = /*#__PURE__*/function () {\n function AnimationPlayerInterface() {\n AnimationPlayerInterface_classCallCheck(this, AnimationPlayerInterface);\n }\n\n AnimationPlayerInterface_createClass(AnimationPlayerInterface, [{\n key: "paused",\n get:\n /**\n * Gets whether or not the player is updating states.\n *\n * @readonly\n * @type {boolean}\n */\n function get() {\n return this._paused;\n }\n /**\n * Gets and sets the default number of seconds it takes to transition to a new\n * animation.\n *\n * @type {number}\n */\n\n }, {\n key: "transitionTime",\n get: function get() {},\n set: function set(seconds) {}\n /**\n * Gets and sets the default easing function to use when transitioning and\n * setting weights.\n *\n * @type {Function}\n */\n\n }, {\n key: "easingFn",\n get: function get() {},\n set: function set(fn) {}\n /**\n * Gets the state the layer is currently in control of.\n *\n * @readonly\n * @type {AbstractState}\n */\n\n }, {\n key: "currentState",\n get: function get() {}\n /**\n * Gets the name of the state the layer is currently in control of.\n *\n * @readonly\n * @type {string}\n */\n\n }, {\n key: "currentAnimation",\n get: function get() {}\n /**\n * Gets whether or not the layer is currently transitioning to a new animation.\n *\n * @readonly\n * @type {boolean}\n */\n\n }, {\n key: "isTransitioning",\n get: function get() {}\n /**\n * Update the layer\'s current state to a new value. If transitionTime is defined\n * and greater than zero, perform a smooth blend between any states that currently\n * have non-zero weight values and the new state.\n *\n * @private\n *\n * @param {(string|null)} name - Name of the state to transition to.\n * @param {string} playMethod - Name of the operation being prepared for, to be\n * used in error messaging.\n * @param {number=} transitionTime - Amount of time in seconds it will take to\n * switch to the new state.\n * @param {Function=} easingFn - Easing function to use when transitioning to a\n * new state over time.\n * @param {Function=} onError - Function to execute if an error is encountered.\n */\n\n }, {\n key: "_prepareCurrentState",\n value: function _prepareCurrentState(name, playMethod, transitionTime, easingFn, onError) {}\n /**\n * Start playback an animation from the beginning.\n *\n * @param {string} name - Name of the animation to play.\n * @param {number=} transitionTime - Amount of time it will take before the\n * new state has full influence for the layer.\n * @param {Function=} easingFn - Easing function to use for blending if transitionTime\n * is greater than zero.\n * @param {Function=} onFinish - Function to execute when the animation finishes.\n * @param {Function=} onError - Function to execute if the animation encounters\n * an error during playback.\n * @param {Function=} onCancel - Function to execute if playback is canceled.\n * @param {Function=} onNext - Function to execute if an animation queue is\n * played and it advances to the next animation.\n *\n * @returns {Deferred}\n */\n\n }, {\n key: "playAnimation",\n value: function playAnimation(name, transitionTime, easingFn, onFinish, onError, onCancel, onNext) {}\n /**\n * Cancel playback of the current animation.\n *\n * @returns {boolean}\n */\n\n }, {\n key: "cancelAnimation",\n value: function cancelAnimation() {}\n /**\n * Pause playback of the current animation.\n *\n * @returns {boolean}\n */\n\n }, {\n key: "pauseAnimation",\n value: function pauseAnimation() {}\n /**\n * Resume playback of an animation.\n *\n * @param {string=} name - Name of the animation to resume playback for. Default\n * is the layer\'s current animation name.\n * @param {number=} transitionTime - Amount of time it will take before the\n * new state has full influence for the layer.\n * @param {Function=} onFinish - Function to execute when the state finishes.\n * @param {Function=} onError - Function to execute if the state encounters\n * an error during playback.\n * @param {Function=} onCancel - Function to execute if playback is canceled.\n * @param {Function=} onNext - Function to execute if an animation queue is\n * played and it advances to the next animation.\n *\n * @returns {Deferred}\n */\n\n }, {\n key: "resumeAnimation",\n value: function resumeAnimation(name, transitionTime, easingFn, onFinish, onError, onCancel, onNext) {}\n /**\n * Stop playback of the current animation.\n *\n * @returns {boolean}\n */\n\n }, {\n key: "stopAnimation",\n value: function stopAnimation() {}\n /**\n * Update the current animation.\n *\n * @param {number} deltaTime - Time in milliseconds since the last update.\n */\n\n }, {\n key: "update",\n value: function update(deltaTime) {}\n /**\n * Discard the transition state.\n */\n\n }, {\n key: "discard",\n value: function discard() {}\n /**\n * Creates a class that implements {@link AnimationPlayerInterface} and extends\n * a specified base class.\n *\n * @param {Class} [BaseClass = class{}] - The class to extend.\n *\n * @return {Class} A class that extends `BaseClass` and implements {@link AnimationPlayerInterface}.\n */\n\n }], [{\n key: "Mixin",\n value: function Mixin() {\n var BaseClass = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : /*#__PURE__*/function () {\n function _class() {\n AnimationPlayerInterface_classCallCheck(this, _class);\n }\n\n return _class;\n }();\n\n var AnimationPlayerMixin = /*#__PURE__*/function (_BaseClass) {\n AnimationPlayerInterface_inherits(AnimationPlayerMixin, _BaseClass);\n\n var _super = AnimationPlayerInterface_createSuper(AnimationPlayerMixin);\n\n function AnimationPlayerMixin() {\n var _this;\n\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n AnimationPlayerInterface_classCallCheck(this, AnimationPlayerMixin);\n\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\n _this = _super.call.apply(_super, [this, options].concat(args));\n _this._transitionState = new state_TransitionState();\n _this._states = _this._states !== undefined ? _this._states : new Map();\n _this._currentState = null;\n _this._paused = false;\n _this._transitionTime = Number(options.transitionTime) >= 0 ? Number(options.transitionTime) : 0;\n _this._easingFn = typeof options.easingFn === \'function\' ? options.easingFn : undefined;\n return _this;\n }\n\n AnimationPlayerInterface_createClass(AnimationPlayerMixin, [{\n key: "paused",\n get: function get() {\n return this._paused;\n }\n }, {\n key: "transitionTime",\n get: function get() {\n return this._transitionTime;\n },\n set: function set(seconds) {\n seconds = Number(seconds);\n\n if (!(seconds >= 0)) {\n throw new Error("Cannot set transition time for ".concat(this.constructor.name, " to ").concat(seconds, ". Seconds must be a numeric value greather than or equal to zero."));\n }\n\n this._transitionTime = seconds;\n }\n }, {\n key: "easingFn",\n get: function get() {\n return this._easingFn;\n },\n set: function set(fn) {\n this._easingFn = fn;\n }\n }, {\n key: "currentState",\n get: function get() {\n return this._currentState;\n }\n }, {\n key: "currentAnimation",\n get: function get() {\n if (this._currentState) {\n return this._currentState.name;\n }\n\n return null;\n }\n }, {\n key: "isTransitioning",\n get: function get() {\n return this._currentState === this._transitionState;\n }\n }, {\n key: "_prepareCurrentState",\n value: function _prepareCurrentState(name, playMethod, transitionTime, easingFn, onError) {\n var _this2 = this;\n\n if (name !== null && !this._states.has(name)) {\n var e = new Error("Cannot ".concat(playMethod, " animation ").concat(name, ". No animation exists with this name."));\n\n if (typeof onError === \'function\') {\n onError(e);\n }\n\n throw e;\n }\n\n var targetState = name !== null ? this._states.get(name) : null; // Make sure the new state isn\'t already playing\n\n if (this.currentAnimation !== name) {\n // Switch to the new state immediately\n if (transitionTime <= 0) {\n // Cancel the current state and set its weight to 0\n if (this._currentState) {\n this._currentState.cancel();\n\n this._currentState.weight = 0;\n\n this._currentState.deactivate();\n }\n\n this._currentState = targetState;\n } // Blend to the new state over time\n else {\n // Make sure to transition out of any states with non-zero weight\n var currentStates = AnimationPlayerInterface_toConsumableArray(this._states.values()).filter(function (s) {\n return s !== targetState && (s.weight || s.weightPending);\n }); // Update the transition state with new inputs\n\n\n this._transitionState.configure(currentStates, targetState, transitionTime, easingFn, function () {\n _this2._currentState = targetState;\n _this2._transitionState.weight = 0;\n });\n\n this._currentState = this._transitionState;\n }\n } else if (playMethod === \'play\') {\n this._currentState.cancel();\n\n if (this._currentState === this._transitionState) {\n this._transitionState.reset(transitionTime, easingFn, function () {\n _this2._currentState = targetState;\n _this2._transitionState.weight = 0;\n });\n }\n } // Update weight for the new current state so it has full influence for the player\n\n\n this._currentState.weight = 1;\n\n this._currentState.updateInternalWeight(this._internalWeight);\n }\n }, {\n key: "playAnimation",\n value: function playAnimation(name, transitionTime, easingFn, onFinish, onError, onCancel, onNext) {\n var error;\n var reject = false;\n\n try {\n this._prepareCurrentState(name, \'play\', transitionTime !== undefined ? transitionTime : this._transitionTime, easingFn !== undefined ? easingFn : this._easingFn, onError);\n } catch (e) {\n error = e;\n reject = true;\n }\n\n if (reject) {\n return core_Deferred.reject(error);\n }\n\n return this._currentState.play(onFinish, onError, onCancel, onNext);\n }\n }, {\n key: "pauseAnimation",\n value: function pauseAnimation() {\n if (this._currentState) {\n return this._currentState.pause();\n } else {\n return false;\n }\n }\n }, {\n key: "resumeAnimation",\n value: function resumeAnimation(name, transitionTime, easingFn, onFinish, onError, onCancel, onNext) {\n if (name === undefined && this._currentState) {\n name = this._currentState.name;\n }\n\n var error;\n var reject = false;\n\n try {\n this._prepareCurrentState(name, \'resume\', transitionTime !== undefined ? transitionTime : this._transitionTime, easingFn !== undefined ? easingFn : this._easingFn, onError);\n } catch (e) {\n error = e;\n reject = true;\n }\n\n if (reject) {\n return core_Deferred.reject(error);\n }\n\n return this._currentState.resume(onFinish, onError, onCancel, onNext);\n }\n }, {\n key: "cancelAnimation",\n value: function cancelAnimation() {\n if (this._currentState) {\n return this._currentState.cancel();\n } else {\n return false;\n }\n }\n }, {\n key: "stopAnimation",\n value: function stopAnimation() {\n if (this._currentState) {\n return this._currentState.stop();\n } else {\n return false;\n }\n }\n }, {\n key: "update",\n value: function update(deltaTime) {\n if (AnimationPlayerInterface_get(AnimationPlayerInterface_getPrototypeOf(AnimationPlayerMixin.prototype), "update", this)) {\n AnimationPlayerInterface_get(AnimationPlayerInterface_getPrototypeOf(AnimationPlayerMixin.prototype), "update", this).call(this, deltaTime);\n }\n\n if (this._currentState) {\n this._currentState.update(deltaTime);\n }\n }\n }, {\n key: "discard",\n value: function discard() {\n if (AnimationPlayerInterface_get(AnimationPlayerInterface_getPrototypeOf(AnimationPlayerMixin.prototype), "discard", this)) {\n AnimationPlayerInterface_get(AnimationPlayerInterface_getPrototypeOf(AnimationPlayerMixin.prototype), "discard", this).call(this);\n }\n\n this._transitionState.discard();\n\n delete this._transitionState;\n }\n }]);\n\n return AnimationPlayerMixin;\n }(BaseClass);\n\n return AnimationPlayerMixin;\n }\n }]);\n\n return AnimationPlayerInterface;\n}();\n\n/* harmony default export */ var animpack_AnimationPlayerInterface = (AnimationPlayerInterface_AnimationPlayerInterface);\n// CONCATENATED MODULE: ./src/core/animpack/state/StateContainerInterface.js\nfunction StateContainerInterface_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { StateContainerInterface_typeof = function _typeof(obj) { return typeof obj; }; } else { StateContainerInterface_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return StateContainerInterface_typeof(obj); }\n\nfunction StateContainerInterface_toConsumableArray(arr) { return StateContainerInterface_arrayWithoutHoles(arr) || StateContainerInterface_iterableToArray(arr) || StateContainerInterface_unsupportedIterableToArray(arr) || StateContainerInterface_nonIterableSpread(); }\n\nfunction StateContainerInterface_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."); }\n\nfunction StateContainerInterface_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return StateContainerInterface_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return StateContainerInterface_arrayLikeToArray(o, minLen); }\n\nfunction StateContainerInterface_iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction StateContainerInterface_arrayWithoutHoles(arr) { if (Array.isArray(arr)) return StateContainerInterface_arrayLikeToArray(arr); }\n\nfunction StateContainerInterface_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction StateContainerInterface_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) StateContainerInterface_setPrototypeOf(subClass, superClass); }\n\nfunction StateContainerInterface_setPrototypeOf(o, p) { StateContainerInterface_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return StateContainerInterface_setPrototypeOf(o, p); }\n\nfunction StateContainerInterface_createSuper(Derived) { var hasNativeReflectConstruct = StateContainerInterface_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = StateContainerInterface_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = StateContainerInterface_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return StateContainerInterface_possibleConstructorReturn(this, result); }; }\n\nfunction StateContainerInterface_possibleConstructorReturn(self, call) { if (call && (StateContainerInterface_typeof(call) === "object" || typeof call === "function")) { return call; } return StateContainerInterface_assertThisInitialized(self); }\n\nfunction StateContainerInterface_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction StateContainerInterface_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction StateContainerInterface_getPrototypeOf(o) { StateContainerInterface_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return StateContainerInterface_getPrototypeOf(o); }\n\nfunction StateContainerInterface_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction StateContainerInterface_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction StateContainerInterface_createClass(Constructor, protoProps, staticProps) { if (protoProps) StateContainerInterface_defineProperties(Constructor.prototype, protoProps); if (staticProps) StateContainerInterface_defineProperties(Constructor, staticProps); return Constructor; }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/* eslint-disable max-classes-per-file */\n\n/* eslint-disable no-unused-vars */\n\n/* eslint-disable no-empty-function */\n\n/* eslint-disable getter-return */\n\n/**\n * Class factory interface for manipulating a collection of {@link AbstractState}.\n *\n * @interface\n */\n\nvar StateContainerInterface_StateContainerInterface = /*#__PURE__*/function () {\n function StateContainerInterface() {\n StateContainerInterface_classCallCheck(this, StateContainerInterface);\n }\n\n StateContainerInterface_createClass(StateContainerInterface, [{\n key: "getState",\n value:\n /**\n * Return the state with the given name.\n *\n * @param {string} name - Name of the state.\n *\n * @returns {AbstractState}\n */\n function getState(name) {}\n /**\n * Gets an array of the names of all states in the container.\n *\n * @type {Array.}\n */\n\n }, {\n key: "getStateNames",\n value: function getStateNames() {}\n /**\n * Add a new state to be controlled by the container. States are stored keyed\n * by their name property, which must be unique. If it isn\'t, a number will\n * be added or incremented until a unique key is generated.\n *\n * @param {AbstractState} state - State to add to the container.\n *\n * @returns {string} - Unique name of the state.\n */\n\n }, {\n key: "addState",\n value: function addState(state) {}\n /**\n * Removes a state with the given name from the container.\n *\n * @param {string} name - Name of the state to remove.\n *\n * @returns {boolean} - Whether or not a state was removed.\n */\n\n }, {\n key: "removeState",\n value: function removeState(name) {}\n /**\n * Renames a state with the given name in the container. Name must be unique\n * to the container, if it isn\'t the name will be incremented until it is unique.\n *\n * @param {string} currentName - Name of the state to rename.\n * @param {string} newName - Name to update the state with.\n *\n * @returns {string} - Updated name for the state.\n */\n\n }, {\n key: "renameState",\n value: function renameState(currentName, newName) {}\n /**\n * Discards all states.\n */\n\n }, {\n key: "discardStates",\n value: function discardStates() {}\n /**\n * Creates a class that implements {@link StateContainerInterface} and extends\n * a specified base class.\n *\n * @param {Class} [BaseClass = class{}] - The class to extend.\n *\n * @return {Class} A class that extends `BaseClass` and implements {@link StateContainerInterface}.\n */\n\n }], [{\n key: "Mixin",\n value: function Mixin() {\n var BaseClass = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : /*#__PURE__*/function () {\n function _class() {\n StateContainerInterface_classCallCheck(this, _class);\n }\n\n return _class;\n }();\n\n /**\n * This mixin adds functionality for manipulating uniquely-named animation states in\n * a map.\n */\n var StateContainerMixin = /*#__PURE__*/function (_BaseClass) {\n StateContainerInterface_inherits(StateContainerMixin, _BaseClass);\n\n var _super = StateContainerInterface_createSuper(StateContainerMixin);\n\n function StateContainerMixin() {\n var _this;\n\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n StateContainerInterface_classCallCheck(this, StateContainerMixin);\n\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\n _this = _super.call.apply(_super, [this, options].concat(args));\n _this._states = _this._states !== undefined ? _this._states : new Map();\n return _this;\n }\n\n StateContainerInterface_createClass(StateContainerMixin, [{\n key: "getState",\n value: function getState(name) {\n return this._states.get(name);\n }\n }, {\n key: "getStateNames",\n value: function getStateNames() {\n return StateContainerInterface_toConsumableArray(this._states.keys());\n }\n }, {\n key: "addState",\n value: function addState(state) {\n // Make sure the state is not already in this container\n if (StateContainerInterface_toConsumableArray(this._states.values()).includes(state)) {\n console.warn("Cannot add animation to state ".concat(this.name, ". Animation was already added."));\n return state.name;\n } // Make sure the state name is unique\n\n\n var uniqueName = core_Utils.getUniqueName(state.name, StateContainerInterface_toConsumableArray(this._states.keys()));\n\n if (state.name !== uniqueName) {\n console.warn("Animation name ".concat(state.name, " is not unique for state ").concat(this.name, ". New animation will be added with name ").concat(uniqueName, "."));\n state.name = uniqueName;\n }\n\n this._states.set(state.name, state);\n\n return state.name;\n }\n }, {\n key: "removeState",\n value: function removeState(name) {\n // Check if the state is in this container\n if (!this._states || !this._states.has(name)) {\n console.warn("Did not remove animation ".concat(name, " from state ").concat(this.name, ". No animation exists with this name."));\n return false;\n }\n\n this._states.get(name).discard();\n\n this._states["delete"](name);\n\n return true;\n }\n }, {\n key: "renameState",\n value: function renameState(currentName, newName) {\n // Make sure the state is in this container\n if (!this._states || !this._states.has(currentName)) {\n throw new Error("Cannot rename animation ".concat(currentName, " in ").concat(this.name, ". No animation exists with this name."));\n }\n\n var state = this._states.get(currentName); // Exit if the names are the same\n\n\n if (currentName === newName) {\n return currentName;\n } // Make sure the name is unique\n\n\n var uniqueName = core_Utils.getUniqueName(newName, StateContainerInterface_toConsumableArray(this._states.keys()).filter(function (s) {\n return s.name !== currentName;\n }));\n\n if (newName !== uniqueName) {\n console.warn("Animation name ".concat(newName, " is not unique in state ").concat(this.name, ". Animation will be renamed to ").concat(uniqueName, "."));\n newName = uniqueName;\n }\n\n state.name = newName;\n\n this._states["delete"](currentName);\n\n this._states.set(state.name, state);\n\n return state.name;\n }\n }, {\n key: "discardStates",\n value: function discardStates() {\n this._states.forEach(function (state) {\n state.discard();\n });\n\n delete this._states;\n }\n }]);\n\n return StateContainerMixin;\n }(BaseClass);\n\n return StateContainerMixin;\n }\n }]);\n\n return StateContainerInterface;\n}();\n\n/* harmony default export */ var state_StateContainerInterface = (StateContainerInterface_StateContainerInterface);\n// CONCATENATED MODULE: ./src/core/animpack/state/QueueState.js\nfunction QueueState_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { QueueState_typeof = function _typeof(obj) { return typeof obj; }; } else { QueueState_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return QueueState_typeof(obj); }\n\nfunction QueueState_toConsumableArray(arr) { return QueueState_arrayWithoutHoles(arr) || QueueState_iterableToArray(arr) || QueueState_unsupportedIterableToArray(arr) || QueueState_nonIterableSpread(); }\n\nfunction QueueState_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."); }\n\nfunction QueueState_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return QueueState_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return QueueState_arrayLikeToArray(o, minLen); }\n\nfunction QueueState_iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction QueueState_arrayWithoutHoles(arr) { if (Array.isArray(arr)) return QueueState_arrayLikeToArray(arr); }\n\nfunction QueueState_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction QueueState_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction QueueState_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction QueueState_createClass(Constructor, protoProps, staticProps) { if (protoProps) QueueState_defineProperties(Constructor.prototype, protoProps); if (staticProps) QueueState_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction QueueState_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { QueueState_get = Reflect.get; } else { QueueState_get = function _get(target, property, receiver) { var base = QueueState_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return QueueState_get(target, property, receiver || target); }\n\nfunction QueueState_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = QueueState_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction QueueState_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) QueueState_setPrototypeOf(subClass, superClass); }\n\nfunction QueueState_setPrototypeOf(o, p) { QueueState_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return QueueState_setPrototypeOf(o, p); }\n\nfunction QueueState_createSuper(Derived) { var hasNativeReflectConstruct = QueueState_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = QueueState_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = QueueState_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return QueueState_possibleConstructorReturn(this, result); }; }\n\nfunction QueueState_possibleConstructorReturn(self, call) { if (call && (QueueState_typeof(call) === "object" || typeof call === "function")) { return call; } return QueueState_assertThisInitialized(self); }\n\nfunction QueueState_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction QueueState_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction QueueState_getPrototypeOf(o) { QueueState_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return QueueState_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n/**\n * Class for playing an ordered array of animation states in sequence.\n *\n * @extends AbstractState\n * @implements @AnimationPlayerInterface\n */\n\nvar QueueState = /*#__PURE__*/function (_AnimationPlayerInter) {\n QueueState_inherits(QueueState, _AnimationPlayerInter);\n\n var _super = QueueState_createSuper(QueueState);\n\n /**\n * @constructor\n *\n * @param {Object} [options={}] - Options for the state.\n * @param {boolean} [options.autoAdvance=true] - Whether to autmatically advance\n * to the next state in the queue as each state completes.\n * @param {Array.} [queueStates=[]] - Array of states to be played\n * in order.\n */\n function QueueState() {\n var _this;\n\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var queueStates = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n\n QueueState_classCallCheck(this, QueueState);\n\n _this = _super.call(this, options);\n queueStates.forEach(function (state) {\n _this.addState(state);\n });\n _this._queue = _this._states.keys();\n _this._done = true;\n return _this;\n }\n /**\n * Gets whether the animation queue has reached the end.\n */\n\n\n QueueState_createClass(QueueState, [{\n key: "done",\n get: function get() {\n return this._done;\n }\n /**\n * Gets the internal weight.\n *\n * @readonly\n * @type {number}\n */\n\n }, {\n key: "internalWeight",\n get: function get() {\n return this._currentState ? this._currentState.internalWeight * this._internalWeight : 0;\n }\n /**\n * Restart the queue iterator.\n *\n * @private\n */\n\n }, {\n key: "_reset",\n value: function _reset() {\n this._queue = this._states.keys();\n\n var _this$_queue$next = this._queue.next(),\n value = _this$_queue$next.value,\n done = _this$_queue$next.done;\n\n this._done = done;\n return value || null;\n }\n /**\n * Multiplies the user weight by a factor to determine the internal weight.\n *\n * @param {number} factor - 0-1 multiplier to apply to the user weight.\n */\n\n }, {\n key: "updateInternalWeight",\n value: function updateInternalWeight(factor) {\n QueueState_get(QueueState_getPrototypeOf(QueueState.prototype), "updateInternalWeight", this).call(this, factor);\n\n if (this._currentState) {\n this._currentState.updateInternalWeight(this._internalWeight);\n }\n }\n /**\n * Start the next animation in the queue.\n *\n * @param {Function=} onNext - Function to execute each time an animation completes\n * and the queue moves to the next animation.\n * @param {boolean} [wrap=false] - Whether or not to start the queue from the\n * beginning again if the end has been reached.\n *\n * @returns {Deferred}\n */\n\n }, {\n key: "next",\n value: function next(onNext) {\n var _this2 = this;\n\n var wrap = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n // Move the queue forward\n var _this$_queue$next2 = this._queue.next(),\n name = _this$_queue$next2.value,\n done = _this$_queue$next2.done;\n\n this._done = done;\n this._paused = false; // The queue has reached the end\n\n if (done) {\n // Start the queue over\n if (wrap) {\n return this.play(this._playCallbacks.onFinish, this._playCallbacks.onError, this._playCallbacks.onCancel, onNext);\n } // Stop the queue\n else {\n this._promises.finish.resolve();\n\n return this._promises.finish;\n }\n } // Signal the next animation is starting\n\n\n if (typeof onNext === \'function\') {\n var lastName = QueueState_toConsumableArray(this._states.keys())[this._states.size - 1];\n\n var isQueueEnd = name === lastName;\n onNext({\n name: name,\n canAdvance: this.getState(name).loopCount !== Infinity && !isQueueEnd,\n isQueueEnd: isQueueEnd\n });\n } // Start the next animation\n\n\n this.playAnimation(name, this._transitionTime, this._easingFn, function () {\n if (!_this2._paused && !_this2.isTransitioning) {\n _this2.next(onNext);\n }\n }, this._playCallbacks.onError);\n return this._promises.finish;\n }\n }, {\n key: "play",\n value: function play(onFinish, onError, onCancel, onNext) {\n var _this3 = this;\n\n var name = this._reset();\n\n QueueState_get(QueueState_getPrototypeOf(QueueState.prototype), "play", this).call(this, onFinish, onError, onCancel);\n\n if (this._done) {\n this._promises.finish.resolve();\n } else {\n // Signal the next animation is starting\n if (name !== this.currentAnimation && typeof onNext === \'function\') {\n var lastName = QueueState_toConsumableArray(this._states.keys())[this._states.size - 1];\n\n var isQueueEnd = name === lastName;\n onNext({\n name: name,\n canAdvance: name ? this.getState(name).loopCount !== Infinity && !isQueueEnd : true,\n isQueueEnd: !name || isQueueEnd\n });\n } // Start the next animation\n\n\n this.playAnimation(name, this._currentState ? this._transitionTime : 0, this._easingFn, function () {\n if (!_this3._paused && !_this3.isTransitioning) {\n _this3.next(onNext);\n }\n }, onError);\n }\n\n return this._promises.finish;\n }\n }, {\n key: "pause",\n value: function pause() {\n var paused = QueueState_get(QueueState_getPrototypeOf(QueueState.prototype), "pause", this).call(this);\n\n this.pauseAnimation();\n return paused;\n }\n }, {\n key: "resume",\n value: function resume(onFinish, onError, onCancel, onNext) {\n var _this4 = this;\n\n if (this._done) {\n return this.play(onFinish, onError, onCancel, onNext);\n } else {\n QueueState_get(QueueState_getPrototypeOf(QueueState.prototype), "resume", this).call(this, onFinish, onError, onCancel);\n\n this.resumeAnimation(this._currentState.name, this._transitionTime, this._easingFn, function () {\n if (!_this4._paused && !_this4.isTransitioning) {\n _this4.next(onNext);\n }\n }, onError);\n return this._promises.finish;\n }\n }\n }, {\n key: "cancel",\n value: function cancel() {\n var canceled = QueueState_get(QueueState_getPrototypeOf(QueueState.prototype), "cancel", this).call(this);\n\n if (this._currentState) {\n this._currentState.cancel();\n }\n\n return canceled;\n }\n }, {\n key: "stop",\n value: function stop() {\n var stopped = QueueState_get(QueueState_getPrototypeOf(QueueState.prototype), "stop", this).call(this);\n\n this.stopAnimation();\n this._done = true;\n return stopped;\n }\n }, {\n key: "discard",\n value: function discard() {\n QueueState_get(QueueState_getPrototypeOf(QueueState.prototype), "discard", this).call(this);\n\n this.discardStates();\n }\n }]);\n\n return QueueState;\n}(animpack_AnimationPlayerInterface.Mixin(state_StateContainerInterface.Mixin(state_AbstractState)));\n\n/* harmony default export */ var state_QueueState = (QueueState);\n// CONCATENATED MODULE: ./src/core/animpack/state/AbstractBlendState.js\nfunction AbstractBlendState_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { AbstractBlendState_typeof = function _typeof(obj) { return typeof obj; }; } else { AbstractBlendState_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return AbstractBlendState_typeof(obj); }\n\nfunction AbstractBlendState_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction AbstractBlendState_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction AbstractBlendState_createClass(Constructor, protoProps, staticProps) { if (protoProps) AbstractBlendState_defineProperties(Constructor.prototype, protoProps); if (staticProps) AbstractBlendState_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction AbstractBlendState_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { AbstractBlendState_get = Reflect.get; } else { AbstractBlendState_get = function _get(target, property, receiver) { var base = AbstractBlendState_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return AbstractBlendState_get(target, property, receiver || target); }\n\nfunction AbstractBlendState_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = AbstractBlendState_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction AbstractBlendState_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) AbstractBlendState_setPrototypeOf(subClass, superClass); }\n\nfunction AbstractBlendState_setPrototypeOf(o, p) { AbstractBlendState_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return AbstractBlendState_setPrototypeOf(o, p); }\n\nfunction AbstractBlendState_createSuper(Derived) { var hasNativeReflectConstruct = AbstractBlendState_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = AbstractBlendState_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = AbstractBlendState_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return AbstractBlendState_possibleConstructorReturn(this, result); }; }\n\nfunction AbstractBlendState_possibleConstructorReturn(self, call) { if (call && (AbstractBlendState_typeof(call) === "object" || typeof call === "function")) { return call; } return AbstractBlendState_assertThisInitialized(self); }\n\nfunction AbstractBlendState_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction AbstractBlendState_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction AbstractBlendState_getPrototypeOf(o) { AbstractBlendState_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return AbstractBlendState_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n\n/**\n * Base class for a state that blends a collection of {@link AbstractState}.\n *\n * @abstract\n * @implements StateContainerInterface\n */\n\nvar AbstractBlendState_AbstractBlendState = /*#__PURE__*/function (_StateContainerInterf) {\n AbstractBlendState_inherits(AbstractBlendState, _StateContainerInterf);\n\n var _super = AbstractBlendState_createSuper(AbstractBlendState);\n\n function AbstractBlendState() {\n var _this;\n\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var blendStates = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n\n AbstractBlendState_classCallCheck(this, AbstractBlendState);\n\n for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n args[_key - 2] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this, options].concat(args));\n blendStates.forEach(function (state) {\n _this.addState(state);\n });\n return _this;\n }\n /**\n * Gets the sum of internal weights of the sub-states.\n *\n * @readonly\n * @type {number}\n */\n\n\n AbstractBlendState_createClass(AbstractBlendState, [{\n key: "internalWeight",\n get: function get() {\n var blendWeights = 0;\n\n this._states.forEach(function (state) {\n blendWeights += state.internalWeight;\n });\n\n return blendWeights;\n }\n /**\n * Returns the weight of a state controlled by the container.\n *\n * @param {string} name - Name of the state to return the weight from.\n *\n * @returns {number} - Weight of the state.\n */\n\n }, {\n key: "getBlendWeight",\n value: function getBlendWeight(name) {\n // Make sure the name is valid\n var state = this.getState(name);\n\n if (state === undefined) {\n throw new Error("Cannot get weight of state ".concat(name, " from BlendState ").concat(this.name, ". No state exists with this name."));\n }\n\n return state.weight;\n }\n /**\n * Sets the weight of a state controlled by the container.\n *\n * @param {string} name - Name of the state to set the weight of.\n * @param {number} weight - Weight value to set on the state.\n *\n * @returns {Deferred}\n */\n\n }, {\n key: "setBlendWeight",\n value: function setBlendWeight(name, weight) {\n var seconds = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n var easingFn = arguments.length > 3 ? arguments[3] : undefined;\n // Make sure the name is valid\n var state = this.getState(name);\n\n if (state === undefined) {\n throw new Error("Cannot set weight of state ".concat(name, " from BlendState ").concat(this.name, ". No state exists with this name."));\n }\n\n weight = core_MathUtils.clamp(weight);\n return state.setWeight(weight, seconds, easingFn);\n }\n /**\n * Multiplies the weight of each sub-state by a factor to determine the internal weight.\n *\n * @param {number} factor - 0-1 multiplier to apply to the user weight.\n */\n\n }, {\n key: "updateInternalWeight",\n value: function updateInternalWeight(factor) {\n var _this2 = this;\n\n AbstractBlendState_get(AbstractBlendState_getPrototypeOf(AbstractBlendState.prototype), "updateInternalWeight", this).call(this, factor);\n\n this._states.forEach(function (state) {\n state.updateInternalWeight(_this2._internalWeight);\n });\n }\n /**\n * Update any values of the sub-states that need to be evaluated every frame.\n *\n * @param {number} deltaTime - Time in milliseconds since the last update.\n */\n\n }, {\n key: "update",\n value: function update(deltaTime) {\n AbstractBlendState_get(AbstractBlendState_getPrototypeOf(AbstractBlendState.prototype), "update", this).call(this, deltaTime);\n\n this._states.forEach(function (state) {\n state.update(deltaTime);\n });\n }\n /**\n * Start playback of the sub-states from the beginning.\n *\n * @param {Function=} onFinish - Function to execute when the state finishes.\n * @param {Function=} onError - Function to execute if the state encounters\n * an error during playback.\n * @param {Function=} onCancel - Function to execute if playback is canceled.\n *\n * @returns {Deferred}\n */\n\n }, {\n key: "play",\n value: function play(onFinish, onError, onCancel) {\n var promises = [AbstractBlendState_get(AbstractBlendState_getPrototypeOf(AbstractBlendState.prototype), "play", this).call(this)];\n\n this._states.forEach(function (state) {\n promises.push(state.play());\n });\n\n return core_Deferred.all(promises, onFinish, onError, onCancel);\n }\n /**\n * Pause playback of the sub-states. This prevents pending promises from being executed.\n *\n * @returns {boolean}\n */\n\n }, {\n key: "pause",\n value: function pause() {\n this._states.forEach(function (state) {\n state.pause();\n });\n\n return AbstractBlendState_get(AbstractBlendState_getPrototypeOf(AbstractBlendState.prototype), "pause", this).call(this);\n }\n /**\n * Resume playback of the sub-states.\n *\n * @param {Function=} onFinish - Function to execute when the state finishes.\n * @param {Function=} onError - Function to execute if the state encounters\n * an error during playback.\n * @param {Function=} onCancel - Function to execute if playback is canceled.\n *\n * @returns {Deferred}\n */\n\n }, {\n key: "resume",\n value: function resume(onFinish, onError, onCancel) {\n var promises = [AbstractBlendState_get(AbstractBlendState_getPrototypeOf(AbstractBlendState.prototype), "resume", this).call(this)];\n\n this._states.forEach(function (state) {\n promises.push(state.resume());\n });\n\n return core_Deferred.all(promises, onFinish, onError, onCancel);\n }\n /**\n * Cancel playback of the sub-states and cancel any pending promises.\n *\n * @returns {boolean}\n */\n\n }, {\n key: "cancel",\n value: function cancel() {\n this._states.forEach(function (state) {\n state.cancel();\n });\n\n return AbstractBlendState_get(AbstractBlendState_getPrototypeOf(AbstractBlendState.prototype), "cancel", this).call(this);\n }\n /**\n * Stop playback of the sub-states and resolve any pending promises.\n *\n * @returns {boolean}\n */\n\n }, {\n key: "stop",\n value: function stop() {\n this._states.forEach(function (state) {\n state.stop();\n });\n\n return AbstractBlendState_get(AbstractBlendState_getPrototypeOf(AbstractBlendState.prototype), "stop", this).call(this);\n }\n /**\n * Discards all sub-state resources.\n *\n * @returns {boolean}\n */\n\n }, {\n key: "discard",\n value: function discard() {\n AbstractBlendState_get(AbstractBlendState_getPrototypeOf(AbstractBlendState.prototype), "discard", this).call(this);\n\n this.discardStates();\n }\n }]);\n\n return AbstractBlendState;\n}(state_StateContainerInterface.Mixin(state_AbstractState));\n\n/* harmony default export */ var state_AbstractBlendState = (AbstractBlendState_AbstractBlendState);\n// CONCATENATED MODULE: ./src/core/animpack/state/FreeBlendState.js\nfunction FreeBlendState_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { FreeBlendState_typeof = function _typeof(obj) { return typeof obj; }; } else { FreeBlendState_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return FreeBlendState_typeof(obj); }\n\nfunction FreeBlendState_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction FreeBlendState_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction FreeBlendState_createClass(Constructor, protoProps, staticProps) { if (protoProps) FreeBlendState_defineProperties(Constructor.prototype, protoProps); if (staticProps) FreeBlendState_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction FreeBlendState_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { FreeBlendState_get = Reflect.get; } else { FreeBlendState_get = function _get(target, property, receiver) { var base = FreeBlendState_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return FreeBlendState_get(target, property, receiver || target); }\n\nfunction FreeBlendState_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = FreeBlendState_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction FreeBlendState_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) FreeBlendState_setPrototypeOf(subClass, superClass); }\n\nfunction FreeBlendState_setPrototypeOf(o, p) { FreeBlendState_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return FreeBlendState_setPrototypeOf(o, p); }\n\nfunction FreeBlendState_createSuper(Derived) { var hasNativeReflectConstruct = FreeBlendState_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = FreeBlendState_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = FreeBlendState_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return FreeBlendState_possibleConstructorReturn(this, result); }; }\n\nfunction FreeBlendState_possibleConstructorReturn(self, call) { if (call && (FreeBlendState_typeof(call) === "object" || typeof call === "function")) { return call; } return FreeBlendState_assertThisInitialized(self); }\n\nfunction FreeBlendState_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction FreeBlendState_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction FreeBlendState_getPrototypeOf(o) { FreeBlendState_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return FreeBlendState_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/**\n * Class for blending N number of blend states.\n *\n * @extends AbstractBlendState\n */\n\nvar FreeBlendState = /*#__PURE__*/function (_AbstractBlendState) {\n FreeBlendState_inherits(FreeBlendState, _AbstractBlendState);\n\n var _super = FreeBlendState_createSuper(FreeBlendState);\n\n /**\n * @constructor\n *\n * @param {Object} [options={}] - Options for the container state.\n * @param {Array.} [blendStates=[]] - Blend states to be controlled by\n * this container.\n */\n function FreeBlendState() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var blendStates = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n\n FreeBlendState_classCallCheck(this, FreeBlendState);\n\n return _super.call(this, options, blendStates);\n }\n\n FreeBlendState_createClass(FreeBlendState, [{\n key: "updateInternalWeight",\n value: function updateInternalWeight(factor) {\n var _this = this;\n\n FreeBlendState_get(FreeBlendState_getPrototypeOf(FreeBlendState.prototype), "updateInternalWeight", this).call(this, factor); // Determine the total active weight of blend states\n\n\n var sumWeights = 0;\n\n this._states.forEach(function (state) {\n sumWeights += state.weight;\n }); // Ensure the sum of blend state internal weights does not exceed container internal weight\n\n\n factor /= Math.max(sumWeights, 1); // Sum of blend state internal weights should not exceed container internal weight\n\n this._states.forEach(function (state) {\n state.updateInternalWeight(factor * _this._weight);\n });\n }\n }]);\n\n return FreeBlendState;\n}(state_AbstractBlendState);\n\n/* harmony default export */ var state_FreeBlendState = (FreeBlendState);\n// CONCATENATED MODULE: ./src/core/animpack/state/Blend1dState.js\nfunction Blend1dState_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { Blend1dState_typeof = function _typeof(obj) { return typeof obj; }; } else { Blend1dState_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return Blend1dState_typeof(obj); }\n\nfunction Blend1dState_toConsumableArray(arr) { return Blend1dState_arrayWithoutHoles(arr) || Blend1dState_iterableToArray(arr) || Blend1dState_unsupportedIterableToArray(arr) || Blend1dState_nonIterableSpread(); }\n\nfunction Blend1dState_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."); }\n\nfunction Blend1dState_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return Blend1dState_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return Blend1dState_arrayLikeToArray(o, minLen); }\n\nfunction Blend1dState_iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction Blend1dState_arrayWithoutHoles(arr) { if (Array.isArray(arr)) return Blend1dState_arrayLikeToArray(arr); }\n\nfunction Blend1dState_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction Blend1dState_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction Blend1dState_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { Blend1dState_ownKeys(Object(source), true).forEach(function (key) { Blend1dState_defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { Blend1dState_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction Blend1dState_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction Blend1dState_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction Blend1dState_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction Blend1dState_createClass(Constructor, protoProps, staticProps) { if (protoProps) Blend1dState_defineProperties(Constructor.prototype, protoProps); if (staticProps) Blend1dState_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction Blend1dState_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { Blend1dState_get = Reflect.get; } else { Blend1dState_get = function _get(target, property, receiver) { var base = Blend1dState_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return Blend1dState_get(target, property, receiver || target); }\n\nfunction Blend1dState_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = Blend1dState_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction Blend1dState_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) Blend1dState_setPrototypeOf(subClass, superClass); }\n\nfunction Blend1dState_setPrototypeOf(o, p) { Blend1dState_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return Blend1dState_setPrototypeOf(o, p); }\n\nfunction Blend1dState_createSuper(Derived) { var hasNativeReflectConstruct = Blend1dState_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = Blend1dState_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = Blend1dState_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return Blend1dState_possibleConstructorReturn(this, result); }; }\n\nfunction Blend1dState_possibleConstructorReturn(self, call) { if (call && (Blend1dState_typeof(call) === "object" || typeof call === "function")) { return call; } return Blend1dState_assertThisInitialized(self); }\n\nfunction Blend1dState_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction Blend1dState_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction Blend1dState_getPrototypeOf(o) { Blend1dState_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return Blend1dState_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n/**\n * Class for blending N number of blend states based on a single\n * parameter.\n *\n * @extends AbstractBlendState\n */\n\nvar Blend1dState_Blend1dState = /*#__PURE__*/function (_AbstractBlendState) {\n Blend1dState_inherits(Blend1dState, _AbstractBlendState);\n\n var _super = Blend1dState_createSuper(Blend1dState);\n\n /**\n * @constructor\n *\n * @param {Object} [options] - Options for the container state\n * @param {Array.} [blendStates=[]] - Blend states to be\n * controlled by this container.\n * @param {Array.} [blendThresholds=[]] - Threshold values for activating\n * each blend state.\n * @param {Array.} [phaseMatches=[]] - Booleans indicating whether or not\n * each blend state should be phase matched.\n */\n function Blend1dState() {\n var _this;\n\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var blendStates = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n var blendThresholds = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];\n var phaseMatches = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : [];\n\n Blend1dState_classCallCheck(this, Blend1dState);\n\n _this = _super.call(this, options, blendStates);\n _this._blendValue = 0;\n _this._promises = Blend1dState_objectSpread(Blend1dState_objectSpread({}, _this._promises), {}, {\n blendValue: core_Deferred.resolve()\n }); // Validate there are no duplicate thresholds\n\n var nonZeroDifferentSize = blendStates.length !== 0 && blendStates.length !== blendThresholds.length;\n\n if (nonZeroDifferentSize) {\n throw new Error("Cannot create Blend1dState with blendThresholds ".concat(blendThresholds, ". BlendThresholds count does not match blendStates count."));\n }\n\n var containsDuplicates = new Set(blendThresholds).size !== blendThresholds.length;\n\n if (containsDuplicates) {\n throw new Error("Cannot create Blend1dState with blendThresholds ".concat(blendThresholds, ". BlendThresholds contains duplicate values"));\n } // Initialize the thresholds map\n\n\n _this._thresholds = [];\n\n Blend1dState_toConsumableArray(_this._states.values()).forEach(function (state, index) {\n _this._thresholds.push({\n value: blendThresholds[index],\n name: state.name,\n phaseMatch: phaseMatches[index] || false\n });\n });\n\n _this._sortThresholds();\n\n _this._forceNoThresholdDupes = true;\n _this._phaseLeadState = null;\n\n _this._updateBlendWeights();\n\n return _this;\n }\n /**\n * Gets and sets the blend parameter value.\n */\n\n\n Blend1dState_createClass(Blend1dState, [{\n key: "blendValue",\n get: function get() {\n return this._blendValue;\n },\n set: function set(value) {\n this._blendValue = value;\n }\n /**\n * Gets whether or not the blend value is currently being animated.\n */\n\n }, {\n key: "blendValuePending",\n get: function get() {\n return this._promises.blendValue && this._promises.blendValue.pending;\n }\n /**\n * Updates the user defined weight over time.\n *\n * @param {null} name - Unused parameter.\n * @param {number} weight - The target weight value.\n * @param {number} [seconds=0] - The amount of time it will take to reach the\n * target weight.\n * @param {Function=} easingFn - The easing function to use for interpolation.\n *\n * @returns {Deferred}\n */\n\n }, {\n key: "setBlendWeight",\n value: function setBlendWeight(name, value) {\n var _this2 = this;\n\n var seconds = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n var easingFn = arguments.length > 3 ? arguments[3] : undefined;\n\n this._promises.blendValue.cancel();\n\n this._promises.blendValue = animpack_AnimationUtils.interpolateProperty(this, \'blendValue\', value, {\n seconds: seconds,\n easingFn: easingFn,\n onProgress: function onProgress() {\n _this2._updateBlendWeights();\n },\n onFinish: function onFinish() {\n _this2._updateBlendWeights();\n }\n });\n return this._promises.blendValue;\n }\n /**\n * Gets the user defined weight.\n *\n * @returns {number}\n */\n\n }, {\n key: "getBlendWeight",\n value: function getBlendWeight() {\n return this.blendValue;\n }\n }, {\n key: "addState",\n value: function addState(state) {\n var thresholdValue = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var phaseMatch = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n this._thresholds = this._thresholds || []; // Make sure there is not already a state with this threshold\n\n var sameValue = this._thresholds.find(function (threshold) {\n return threshold.value === thresholdValue;\n });\n\n if (this._forceNoThresholdDupes && sameValue !== undefined) {\n throw new Error("Cannot set blend threshold of ".concat(thresholdValue, " for state ").concat(state.name, " on ").concat(this.name, ". A state already exists with that threshold."));\n }\n\n Blend1dState_get(Blend1dState_getPrototypeOf(Blend1dState.prototype), "addState", this).call(this, state);\n\n this._thresholds.push({\n value: thresholdValue,\n name: state.name,\n phaseMatch: phaseMatch || false\n });\n\n this._sortThresholds();\n\n return state.name;\n }\n }, {\n key: "removeState",\n value: function removeState(name) {\n var removed = Blend1dState_get(Blend1dState_getPrototypeOf(Blend1dState.prototype), "removeState", this).call(this, name);\n\n if (removed) {\n var index = this._thresholds.findIndex(function (threshold) {\n return threshold.name === name;\n });\n\n this._thresholds.splice(index, 1);\n }\n\n return removed;\n }\n }, {\n key: "renameState",\n value: function renameState(currentName, newName) {\n newName = Blend1dState_get(Blend1dState_getPrototypeOf(Blend1dState.prototype), "renameState", this).call(this, currentName, newName);\n\n var threshold = this._thresholds.find(function (threshold) {\n return threshold.name === currentName;\n });\n\n threshold.name = newName;\n return newName;\n }\n /**\n * Gets the threshold value of a blend with the corresponding name.\n *\n * @param {string} name - Name of the blend to get the threshold of.\n *\n * @returns {number} Threhold value.\n */\n\n }, {\n key: "getBlendThreshold",\n value: function getBlendThreshold(name) {\n var threshold = this._thresholds.find(function (threshold) {\n return threshold.name === name;\n });\n\n if (threshold === undefined) {\n throw new Error("Cannot get blend threshold of state ".concat(name, " on ").concat(this.name, ". No state exists with that name."));\n }\n\n return threshold.value;\n }\n /**\n * Sets the threshold value of a blend with the corresponding name.\n *\n * @param {string} name - Name of the blend to set the threshold.\n * @param {number} value - Value of the threshold to set.\n *\n * @returns {number} Set threshold value.\n */\n\n }, {\n key: "setBlendThreshold",\n value: function setBlendThreshold(name, value) {\n // Make sure there is not already a state with this threshold\n var sameValue = this._thresholds.find(function (threshold) {\n return threshold.value === value;\n });\n\n if (sameValue !== undefined) {\n throw new Error("Cannot set blend threshold of ".concat(value, " for state ").concat(name, " on ").concat(this.name, ". A state already exists with that threshold."));\n }\n\n var threshold = this._thresholds.find(function (threshold) {\n return threshold.name === name;\n });\n\n if (threshold === undefined) {\n throw new Error("Cannot set blend threshold of state ".concat(name, " on ").concat(this.name, ". No state exists with that name."));\n }\n\n threshold.value = value;\n\n this._sortThresholds();\n\n return threshold.value;\n }\n }, {\n key: "updateInternalWeight",\n value: function updateInternalWeight(factor) {\n var _this3 = this;\n\n Blend1dState_get(Blend1dState_getPrototypeOf(Blend1dState.prototype), "updateInternalWeight", this).call(this, factor);\n\n if (this._phaseLeadState) {\n this._states.forEach(function (state) {\n if (state.weight !== 0) {\n state.normalizedTime = _this3._phaseLeadState.normalizedTime;\n }\n });\n }\n }\n /**\n * Updates the blend weights based on their corresponding threshold values\n * and the current blendValue. Additionally, sets a lead phase state if the\n * conditions for phase-matching have been satisfied.\n *\n * @private\n */\n\n }, {\n key: "_updateBlendWeights",\n value: function _updateBlendWeights() {\n var _this4 = this;\n\n if (this._thresholds.length === 0) return;\n\n if (this._thresholds.length === 1) {\n var state = this._states.get(this._thresholds[0].name);\n\n state.setWeight(1);\n return;\n } // Initially set all sub-state weights to zero\n\n\n this._states.forEach(function (state) {\n state.setWeight(0);\n });\n\n this._phaseLeadState = null; // Find the first threshold that is greater than or equal to the parameter value\n\n var targetIndex = this._thresholds.findIndex(function (threshold) {\n return threshold.value >= _this4._blendValue;\n });\n\n if (targetIndex === 0 || targetIndex === -1) {\n // Give one state full influence\n targetIndex = targetIndex === -1 ? this._thresholds.length - 1 : 0;\n\n var _state = this._states.get(this._thresholds[targetIndex].name);\n\n _state.setWeight(1);\n } else {\n // Linear interpolate influence between two states\n var thresholdA = this._thresholds[targetIndex - 1];\n var thresholdB = this._thresholds[targetIndex];\n var factorB = (this.blendValue - thresholdA.value) / (thresholdB.value - thresholdA.value);\n var factorA = 1 - factorB;\n\n var stateA = this._states.get(thresholdA.name);\n\n var stateB = this._states.get(thresholdB.name);\n\n stateA.setWeight(factorA);\n stateB.setWeight(factorB); // Set phase-matching if needed\n\n if (thresholdA.phaseMatch && thresholdB.phaseMatch) {\n this._phaseLeadState = factorA > factorB ? stateA : stateB;\n }\n }\n }\n /**\n * Sorts the thresholds from low to high based on value.\n *\n * @private\n */\n\n }, {\n key: "_sortThresholds",\n value: function _sortThresholds() {\n this._thresholds.sort(function (a, b) {\n return a.value - b.value;\n });\n }\n }]);\n\n return Blend1dState;\n}(state_AbstractBlendState);\n\n/* harmony default export */ var state_Blend1dState = (Blend1dState_Blend1dState);\n// CONCATENATED MODULE: ./src/core/animpack/state/Blend2dState.js\nfunction Blend2dState_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { Blend2dState_typeof = function _typeof(obj) { return typeof obj; }; } else { Blend2dState_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return Blend2dState_typeof(obj); }\n\nfunction Blend2dState_toConsumableArray(arr) { return Blend2dState_arrayWithoutHoles(arr) || Blend2dState_iterableToArray(arr) || Blend2dState_unsupportedIterableToArray(arr) || Blend2dState_nonIterableSpread(); }\n\nfunction Blend2dState_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."); }\n\nfunction Blend2dState_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return Blend2dState_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return Blend2dState_arrayLikeToArray(o, minLen); }\n\nfunction Blend2dState_iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction Blend2dState_arrayWithoutHoles(arr) { if (Array.isArray(arr)) return Blend2dState_arrayLikeToArray(arr); }\n\nfunction Blend2dState_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction Blend2dState_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction Blend2dState_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { Blend2dState_ownKeys(Object(source), true).forEach(function (key) { Blend2dState_defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { Blend2dState_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction Blend2dState_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction Blend2dState_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction Blend2dState_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction Blend2dState_createClass(Constructor, protoProps, staticProps) { if (protoProps) Blend2dState_defineProperties(Constructor.prototype, protoProps); if (staticProps) Blend2dState_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction Blend2dState_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { Blend2dState_get = Reflect.get; } else { Blend2dState_get = function _get(target, property, receiver) { var base = Blend2dState_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return Blend2dState_get(target, property, receiver || target); }\n\nfunction Blend2dState_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = Blend2dState_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction Blend2dState_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) Blend2dState_setPrototypeOf(subClass, superClass); }\n\nfunction Blend2dState_setPrototypeOf(o, p) { Blend2dState_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return Blend2dState_setPrototypeOf(o, p); }\n\nfunction Blend2dState_createSuper(Derived) { var hasNativeReflectConstruct = Blend2dState_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = Blend2dState_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = Blend2dState_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return Blend2dState_possibleConstructorReturn(this, result); }; }\n\nfunction Blend2dState_possibleConstructorReturn(self, call) { if (call && (Blend2dState_typeof(call) === "object" || typeof call === "function")) { return call; } return Blend2dState_assertThisInitialized(self); }\n\nfunction Blend2dState_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction Blend2dState_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction Blend2dState_getPrototypeOf(o) { Blend2dState_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return Blend2dState_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/* eslint-disable no-underscore-dangle */\n\n\n\n\n/**\n * Class for blending N number of blend states based on two\n * paramters.\n *\n * @extends AbstractBlendState\n */\n\nvar Blend2dState_Blend2dState = /*#__PURE__*/function (_AbstractBlendState) {\n Blend2dState_inherits(Blend2dState, _AbstractBlendState);\n\n var _super = Blend2dState_createSuper(Blend2dState);\n\n /**\n * @constructor\n *\n * @param {Object} [options] - Options for the container state\n * @param {Array.} [blendStates=[]] - Blend states to be\n * controlled by this container.\n * @param {Array.>} [blendThresholds=[]] - Threshold values for activating\n * each blend state.\n * @param {Array.} [phaseMatches=[]] - Booleans indicating whether or not\n * each blend state should be phase matched.\n */\n function Blend2dState() {\n var _this;\n\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var blendStates = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n var blendThresholds = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];\n var phaseMatches = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : [];\n\n Blend2dState_classCallCheck(this, Blend2dState);\n\n _this = _super.call(this, options, blendStates);\n\n if (blendStates.length !== blendThresholds.length) {\n throw new Error("Cannot create Blend2dState with blendStates ".concat(blendStates, " and blendThresholds ").concat(blendThresholds, ". Count of blendStates must match count of blendThresholds."));\n }\n\n blendThresholds.slice(0, blendThresholds.length - 1).forEach(function (threshold, index) {\n blendThresholds.slice(index + 1).forEach(function (otherThreshold) {\n if (threshold[0] === otherThreshold[0] && threshold[1] === otherThreshold[1]) {\n throw new Error("Cannot create Blend2dState with blendThresholds ".concat(blendThresholds, ". No duplicate values allowed in blendThresholds."));\n }\n });\n });\n _this._blendValueX = 0;\n _this._blendValueY = 0;\n _this._promises = Blend2dState_objectSpread(Blend2dState_objectSpread({}, _this._promises), {}, {\n blendValueX: core_Deferred.resolve(),\n blendValueY: core_Deferred.resolve()\n });\n _this._thresholds = [];\n\n Blend2dState_toConsumableArray(_this._states.values()).forEach(function (state, index) {\n _this._thresholds.push({\n name: state.name,\n phaseMatch: phaseMatches[index] || false\n });\n });\n\n _this._vertices = blendThresholds;\n\n if (_this._vertices.length >= 3) {\n _this._triangles = core_MathUtils.getDelaunayTriangulation(_this._vertices);\n }\n\n _this._phaseLeadState = null;\n\n _this._updateBlendWeights();\n\n return _this;\n }\n /**\n * Updates the user defined weight over time.\n *\n * @param {string} name - Name of blend weight to update.\n * @param {number} weight - Target weight value.\n * @param {number} [seconds=0] - The amount of time it will take to reach the\n * target value.\n * @param {Function=} easingFn - The easing function to use for interpolation.\n *\n * @returns {Deferred}\n */\n\n\n Blend2dState_createClass(Blend2dState, [{\n key: "setBlendWeight",\n value: function setBlendWeight(name, value) {\n var _this2 = this;\n\n var seconds = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n var easingFn = arguments.length > 3 ? arguments[3] : undefined;\n var property = "blendValue".concat(name.toUpperCase());\n\n if (property !== \'blendValueX\' && property !== \'blendValueY\') {\n throw new Error("Cannot set blend weight for ".concat(name, " on ").concat(this.name, ". Blend2dState only accepts \'X\' or \'Y\' for setBlendWeight"));\n }\n\n this._promises[property].cancel();\n\n this._promises[property] = animpack_AnimationUtils.interpolateProperty(this, property, value, {\n seconds: seconds,\n easingFn: easingFn,\n onProgress: function onProgress() {\n _this2._updateBlendWeights();\n },\n onFinish: function onFinish() {\n _this2._updateBlendWeights();\n }\n });\n return this._promises[property];\n }\n /**\n * Gets the user defined weight.\n *\n * @param {string} name - Name of blend weight.\n *\n * @returns {number}\n */\n\n }, {\n key: "getBlendWeight",\n value: function getBlendWeight(name) {\n var property = name.toUpperCase();\n\n if (property !== \'X\' && property !== \'Y\') {\n throw new Error("Cannot get blend weight for ".concat(name, " on ").concat(this.name, ". Blend2dState only accepts \'X\' or \'Y\' for getBlendWeight"));\n }\n\n return property === \'X\' ? this._blendValueX : this._blendValueY;\n }\n /**\n * Gets and sets the x blend weight.\n */\n\n }, {\n key: "blendValueX",\n get: function get() {\n return this._blendValueX;\n },\n set: function set(value) {\n this._blendValueX = value;\n }\n /**\n * Gets and sets the y blend weight.\n */\n\n }, {\n key: "blendValueY",\n get: function get() {\n return this._blendValueY;\n },\n set: function set(value) {\n this._blendValueY = value;\n }\n /**\n * Gets whether or not the x blend value is currently being animated.\n */\n\n }, {\n key: "blendValueXPending",\n get: function get() {\n return this._promises.blendValueX && this._promises.blendValueX.pending;\n }\n /**\n * Gets whether or not the y blend value is currently being animated.\n */\n\n }, {\n key: "blendValueYPending",\n get: function get() {\n return this._promises.blendValueY && this._promises.blendValueY.pending;\n }\n }, {\n key: "updateInternalWeight",\n value: function updateInternalWeight(factor) {\n var _this3 = this;\n\n Blend2dState_get(Blend2dState_getPrototypeOf(Blend2dState.prototype), "updateInternalWeight", this).call(this, factor);\n\n if (this._phaseLeadState) {\n Blend2dState_toConsumableArray(this._states.values()).forEach(function (state, index) {\n if (state.weight !== 0 && _this3._thresholds[index].phaseMatch) {\n state.normalizedTime = _this3._phaseLeadState.normalizedTime;\n }\n });\n }\n }\n /**\n * Updates the blend weights based on their corresponding threshold values\n * and the current [x,y] blendValue. Additionally, sets a lead phase state if the\n * conditions for phase-matching have been satisfied.\n *\n * @private\n */\n\n }, {\n key: "_updateBlendWeights",\n value: function _updateBlendWeights() {\n var _this4 = this;\n\n if (!this._vertices || this._vertices.length === 0) return;\n\n if (this._vertices.length === 1) {\n Blend2dState_toConsumableArray(this._states.values())[0].weight = 1;\n return;\n } // Initially set all sub-state weights to zero\n\n\n this._states.forEach(function (state) {\n state.setWeight(0);\n });\n\n this._phaseLeadState = null;\n var p = [this._blendValueX, this._blendValueY];\n\n if (this._vertices.length === 2) {\n this._setInfluenceClosestPointOnLine(p);\n } else {\n var triangle = this._triangles.find(function (triangle) {\n return core_MathUtils.isPointInTriangle(_this4._vertices[triangle[0]], _this4._vertices[triangle[1]], _this4._vertices[triangle[2]], p);\n });\n\n if (triangle) {\n this._setInfluenceTriangle(triangle, p);\n } else {\n this._setInfluenceClosestPointInTriangles(p);\n }\n }\n }\n /**\n * Sets blend weights for states corresponding to a\n * triangle of thresholds and a given [x,y] blendValues.\n *\n * @param {Array.>} triangle - Set of triangluated indices\n * that correspond to blend thresholds.\n * @param {Array.} p - Given [x,y] blendValue.\n *\n * @private\n */\n\n }, {\n key: "_setInfluenceTriangle",\n value: function _setInfluenceTriangle(triangle, p) {\n var areaA = core_MathUtils.triangleArea(this._vertices[triangle[1]], this._vertices[triangle[2]], p);\n var areaB = core_MathUtils.triangleArea(this._vertices[triangle[0]], this._vertices[triangle[2]], p);\n var areaC = core_MathUtils.triangleArea(this._vertices[triangle[0]], this._vertices[triangle[1]], p);\n var totalArea = areaA + areaB + areaC;\n var weightA = areaA / totalArea;\n var weightB = areaB / totalArea;\n var weightC = areaC / totalArea;\n var thresholdA = this._thresholds[triangle[0]];\n var thresholdB = this._thresholds[triangle[1]];\n var thresholdC = this._thresholds[triangle[2]];\n\n var stateA = this._states.get(thresholdA.name);\n\n var stateB = this._states.get(thresholdB.name);\n\n var stateC = this._states.get(thresholdC.name);\n\n stateA.setWeight(weightA);\n stateB.setWeight(weightB);\n stateC.setWeight(weightC);\n\n this._setPhaseLeadState([stateA, stateB, stateC], [thresholdA.phaseMatch, thresholdB.phaseMatch, thresholdC.phaseMatch]);\n }\n /**\n * Determines the closest point within a triangle of\n * thresholds based on the current [x,y] blendValues and\n * then sets blend weights for the corresponding states.\n *\n * @param {Array.} p - Given [x,y] blendValue.\n *\n * @private\n */\n\n }, {\n key: "_setInfluenceClosestPointInTriangles",\n value: function _setInfluenceClosestPointInTriangles(p) {\n var _this5 = this;\n\n var globalClosestPoint = null;\n var globalMinDist = Number.POSITIVE_INFINITY;\n var closestTriangle = -1;\n\n this._triangles.forEach(function (triangle, index) {\n var pointA = core_MathUtils.closestPointOnLine(_this5._vertices[triangle[0]], _this5._vertices[triangle[1]], p);\n var pointB = core_MathUtils.closestPointOnLine(_this5._vertices[triangle[1]], _this5._vertices[triangle[2]], p);\n var pointC = core_MathUtils.closestPointOnLine(_this5._vertices[triangle[2]], _this5._vertices[triangle[0]], p);\n var distA = core_MathUtils.distanceSquared(pointA, p);\n var distB = core_MathUtils.distanceSquared(pointB, p);\n var distC = core_MathUtils.distanceSquared(pointC, p);\n var localClosestPoint = pointC;\n var localMinDist = distC;\n\n if (distA < localMinDist) {\n localClosestPoint = pointA;\n localMinDist = distA;\n }\n\n if (distB < localMinDist) {\n localClosestPoint = pointB;\n localMinDist = distB;\n }\n\n if (localMinDist < globalMinDist) {\n globalMinDist = localMinDist;\n globalClosestPoint = Blend2dState_toConsumableArray(localClosestPoint);\n closestTriangle = index;\n }\n });\n\n this._setInfluenceTriangle(this._triangles[closestTriangle], globalClosestPoint);\n }\n /**\n * Determines the closest point on the line formed between the\n * two blend thresholds based on the current [x,y] blendValues and\n * then sets blend weights for the corresponding states.\n *\n * @param {Array.} p - Given [x,y] blendValue.\n *\n * @private\n */\n\n }, {\n key: "_setInfluenceClosestPointOnLine",\n value: function _setInfluenceClosestPointOnLine(p) {\n var closestPoint = core_MathUtils.closestPointOnLine(this._vertices[[0]], this._vertices[[1]], p);\n var distA = core_MathUtils.distanceSquared(this._vertices[0], closestPoint);\n var distB = core_MathUtils.distanceSquared(this._vertices[1], closestPoint);\n var weightA = distB / (distA + distB);\n var weightB = distA / (distA + distB);\n var thresholdA = this._thresholds[0];\n var thresholdB = this._thresholds[1];\n\n var stateA = this._states.get(thresholdA.name);\n\n var stateB = this._states.get(thresholdB.name);\n\n stateA.setWeight(weightA);\n stateB.setWeight(weightB);\n\n this._setPhaseLeadState([stateA, stateB], [thresholdA.phaseMatch, thresholdB.phaseMatch]);\n }\n /**\n * Sets a lead phase state if the conditions\n * for phase-matching are satisfied.\n *\n * @param {Array.} states - States to\n * check phase-matching criteria.\n * @param {Array.} phaseMatched - List of phase-match booleans.\n *\n * @private\n */\n\n }, {\n key: "_setPhaseLeadState",\n value: function _setPhaseLeadState(states, phaseMatched) {\n var _this6 = this;\n\n var max = 0;\n states.forEach(function (state, index) {\n if (phaseMatched[index] && state.weight > max) {\n _this6._phaseLeadState = state;\n max = state.weight;\n }\n });\n }\n }]);\n\n return Blend2dState;\n}(state_AbstractBlendState);\n\n/* harmony default export */ var state_Blend2dState = (Blend2dState_Blend2dState);\n// CONCATENATED MODULE: ./src/core/animpack/AnimationLayer.js\nfunction AnimationLayer_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { AnimationLayer_typeof = function _typeof(obj) { return typeof obj; }; } else { AnimationLayer_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return AnimationLayer_typeof(obj); }\n\nfunction AnimationLayer_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction AnimationLayer_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction AnimationLayer_createClass(Constructor, protoProps, staticProps) { if (protoProps) AnimationLayer_defineProperties(Constructor.prototype, protoProps); if (staticProps) AnimationLayer_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction AnimationLayer_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { AnimationLayer_get = Reflect.get; } else { AnimationLayer_get = function _get(target, property, receiver) { var base = AnimationLayer_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return AnimationLayer_get(target, property, receiver || target); }\n\nfunction AnimationLayer_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = AnimationLayer_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction AnimationLayer_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) AnimationLayer_setPrototypeOf(subClass, superClass); }\n\nfunction AnimationLayer_setPrototypeOf(o, p) { AnimationLayer_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return AnimationLayer_setPrototypeOf(o, p); }\n\nfunction AnimationLayer_createSuper(Derived) { var hasNativeReflectConstruct = AnimationLayer_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = AnimationLayer_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = AnimationLayer_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return AnimationLayer_possibleConstructorReturn(this, result); }; }\n\nfunction AnimationLayer_possibleConstructorReturn(self, call) { if (call && (AnimationLayer_typeof(call) === "object" || typeof call === "function")) { return call; } return AnimationLayer_assertThisInitialized(self); }\n\nfunction AnimationLayer_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction AnimationLayer_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction AnimationLayer_getPrototypeOf(o) { AnimationLayer_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return AnimationLayer_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n\n\n\n/**\n * Enum for types of {@link AnimationLayer} blending.\n *\n * @readonly\n * @enum {string}\n */\n\nvar LayerBlendModes = {\n Override: \'Override\',\n Additive: \'Additive\'\n};\n/**\n * The default blending mode {@link AnimationLayer}.\n *\n * @readonly\n * @type {string}\n */\n\nvar DefaultLayerBlendMode = \'Override\';\n/**\n * Checks if a given blendMode is present in the values of {@link LayerBlendModes}.\n * If it is, return the original value, otherwise return {@link DefaultLayerBlendMode}.\n *\n * @param {string} blendMode - The name of the type of blending.\n *\n * @returns {(string|DefaultLayerBlendMode)}\n */\n\nfunction validateBlendMode(blendMode) {\n if (Array.from(Object.values(LayerBlendModes)).includes(blendMode)) {\n return blendMode;\n } else {\n return DefaultLayerBlendMode;\n }\n}\n/**\n * Class for managing a set of animations where only one state can be active at\n * any given time.\n *\n * @implements AnimationPlayerInterface\n * @implements StateContainerInterface\n */\n\nvar AnimationLayer_AnimationLayer = /*#__PURE__*/function (_AnimationPlayerInter) {\n AnimationLayer_inherits(AnimationLayer, _AnimationPlayerInter);\n\n var _super = AnimationLayer_createSuper(AnimationLayer);\n\n /**\n * @constructor\n *\n * @param {Object=} options - Options for the animation layer.\n * @param {string} options.name - Name of the layer. Names must be unique to the\n * animation feature that contains the layer.\n * @param {LayerBlendModes} [options.blendMode=DefaultLayerBlendMode] -\n * Type of blending to use for all states controlled by the layer.\n * @param {number} [options.weight=1] - The amount of influence the layer\'s current\n * animation has over the result for the host.\n * @param {number} [options.transitionTime=0] - The default amount of time to use when\n * playing and resuming animations.\n * @param {Function=} options.easingFn - The default easing function to use when\n * transitioning between animations and setting layer weight.\n */\n function AnimationLayer() {\n var _this;\n\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n AnimationLayer_classCallCheck(this, AnimationLayer);\n\n _this = _super.call(this, options);\n _this.name = options.name === undefined ? \'AnimationLayer\' : options.name;\n _this._blendMode = Array.from(Object.values(LayerBlendModes)).includes(options.blendMode) ? options.blendMode : DefaultLayerBlendMode;\n _this._promises = {\n weight: core_Deferred.resolve()\n };\n _this._weightPaused = false;\n _this.weight = typeof options.weight === \'number\' ? options.weight : 1;\n _this._internalWeight = _this._weight;\n return _this;\n }\n /**\n * Gets the type of blending used for states controlled by the layer.\n *\n * @readonly\n * @type {string}\n */\n\n\n AnimationLayer_createClass(AnimationLayer, [{\n key: "blendMode",\n get: function get() {\n return this._blendMode;\n }\n /**\n * Gets and sets the amount of influence the layer\'s current animation has over\n * the result for the host.\n *\n * @type {number}\n */\n\n }, {\n key: "weight",\n get: function get() {\n return this._weight;\n }\n /**\n * Gets whether or not the layer\'s weight value is currently being animated.\n *\n * @readonly\n * @type {boolean}\n */\n ,\n set: function set(weight) {\n this._weight = core_MathUtils.clamp(weight, 0, 1);\n }\n }, {\n key: "weightPending",\n get: function get() {\n return this._promises.weight && this._promises.weight.pending;\n }\n /**\n * Pause the current animation state and any interpolation happening on the layer\'s\n * weight property.\n *\n * @returns {boolean}\n */\n\n }, {\n key: "pause",\n value: function pause() {\n this._paused = true;\n this._weightPaused = true;\n return this.pauseAnimation() || this.weightPending;\n }\n /**\n * Resume the current animation state and any interpolation happening on the layer\'s\n * weight property.\n *\n * @returns {boolean}\n */\n\n }, {\n key: "resume",\n value: function resume() {\n this._paused = false;\n this._weightPaused = false;\n var isWeightActive = this.weightPending;\n\n if (this._currentState) {\n return this.resumeAnimation() || isWeightActive;\n } else {\n return isWeightActive;\n }\n }\n /**\n * Updates the user defined weight over time.\n *\n * @param {number} weight - The target weight value.\n * @param {number} [seconds=0] - The amount of time it will take to reach the\n * target weight.\n * @param {Function=} easingFn - The easing function to use for interpolation.\n *\n * @returns {Deferred}\n */\n\n }, {\n key: "setWeight",\n value: function setWeight(weight) {\n var seconds = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var easingFn = arguments.length > 2 ? arguments[2] : undefined;\n\n if (this.weightPending) {\n this._promises.weight.cancel();\n }\n\n weight = core_MathUtils.clamp(weight);\n this._promises.weight = animpack_AnimationUtils.interpolateProperty(this, \'weight\', weight, {\n seconds: seconds,\n easingFn: easingFn !== undefined ? easingFn : this._easingFn\n });\n return this._promises.weight;\n }\n /**\n * Pause any interpolation happening on the layer\'s weight property.\n *\n * @returns {boolean}\n */\n\n }, {\n key: "pauseWeight",\n value: function pauseWeight() {\n this._weightPaused = true;\n return this.weightPending;\n }\n /**\n * Resume any interpolation happening on the layer\'s weight property.\n *\n * @returns {boolean}\n */\n\n }, {\n key: "resumeWeight",\n value: function resumeWeight() {\n this._weightPaused = false;\n return this.weightPending;\n }\n /**\n * Multiplies the user weight by a factor to determine the internal weight.\n *\n * @param {number} factor - 0-1 multiplier to apply to the user weight.\n */\n\n }, {\n key: "updateInternalWeight",\n value: function updateInternalWeight(factor) {\n this._internalWeight = this._weight * factor;\n\n if (this._currentState) {\n this._currentState.updateInternalWeight(this._internalWeight);\n }\n }\n /**\n * Returns the names of blend states in an animation.\n *\n * @param {string} animationName - Name of the animation.\n *\n * @returns {Array.} - Names of blend states.\n */\n\n }, {\n key: "getAnimationBlendNames",\n value: function getAnimationBlendNames(animationName) {\n var state = this.getState(animationName);\n\n if (state === undefined) {\n throw new Error("Cannot get blend names of animation ".concat(animationName, " on layer ").concat(this.name, ". No animation exists with this name."));\n }\n\n if (state instanceof state_AbstractBlendState) {\n return state.getStateNames();\n }\n\n throw new Error("Cannot get blend names of animation ".concat(animationName, " on layer ").concat(this.name, ". Animation is not an instance of AbstractBlendState."));\n }\n /**\n * Update the weight for a blend state of an animation.\n *\n * @param {string} animationName - Name of the animation containing the blend state\n * to update.\n * @param {string} blendName - Name of the blend state to update.\n * @param {number} weight - Weight value to set on the animation. This number shoudld be\n * in the 0-1 range.\n * @param {number=} seconds - Number of seconds it should take to reach the new weight.\n * Default is zero and will set immediately.\n * @param {Function=} easingFn - Easing function to use while interpolating the new\n * weight. Default is Easing.Linear.InOut.\n *\n * @returns {Deferred} - Promise that will resolve once the animation\'s weight reaches\n * the target value.\n */\n\n }, {\n key: "setAnimationBlendWeight",\n value: function setAnimationBlendWeight(animationName, blendName, weight) {\n var seconds = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;\n var easingFn = arguments.length > 4 ? arguments[4] : undefined;\n var state = this.getState(animationName);\n\n if (state === undefined) {\n throw new Error("Cannot set blend weight of animation ".concat(animationName, " on layer ").concat(this.name, ". No animation exists with this name."));\n }\n\n if (state instanceof state_AbstractBlendState) {\n return state.setBlendWeight(blendName, weight, seconds, easingFn);\n }\n\n throw new Error("Cannot set blend weight of animation ".concat(animationName, " on layer ").concat(this.name, ". Animation is not an instance of AbstractBlendState."));\n }\n /**\n * Returns the weight for a blend state of an animation.\n *\n * @param {string} animationName - Name of the animation containing the blend state\n * to update.\n * @param {string} blendName - Name of the blend state to retrieve the weight of.\n *\n * @returns {number} - Weight of the blend state.\n */\n\n }, {\n key: "getAnimationBlendWeight",\n value: function getAnimationBlendWeight(animationName, blendName) {\n var state = this.getState(animationName);\n\n if (state === undefined) {\n throw new Error("Cannot get blend weight of animation ".concat(animationName, " on layer ").concat(this.name, ". No animation exists with this name."));\n }\n\n if (state instanceof state_AbstractBlendState) {\n return state.getBlendWeight(blendName);\n }\n\n throw new Error("Cannot get blend weight of animation ".concat(animationName, " on layer ").concat(this.name, ". Animation is not an instance of AbstractBlendState."));\n }\n /**\n * Update any weight interpolators and the current animation.\n *\n * @param {number} deltaTime - Time in milliseconds since the last update.\n */\n\n }, {\n key: "update",\n value: function update(deltaTime) {\n AnimationLayer_get(AnimationLayer_getPrototypeOf(AnimationLayer.prototype), "update", this).call(this, deltaTime);\n\n if (!this._paused && !this._weightPaused) {\n this._promises.weight.execute(deltaTime);\n }\n }\n /**\n * Cancel any pending promises and discard states controlled by the layer.\n */\n\n }, {\n key: "discard",\n value: function discard() {\n AnimationLayer_get(AnimationLayer_getPrototypeOf(AnimationLayer.prototype), "discard", this).call(this);\n\n this.discardStates();\n\n this._promises.weight.cancel();\n\n delete this._promises;\n }\n }]);\n\n return AnimationLayer;\n}(animpack_AnimationPlayerInterface.Mixin(state_StateContainerInterface.Mixin()));\n\n/* harmony default export */ var animpack_AnimationLayer = (AnimationLayer_AnimationLayer);\n// CONCATENATED MODULE: ./src/core/animpack/state/SingleState.js\nfunction SingleState_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { SingleState_typeof = function _typeof(obj) { return typeof obj; }; } else { SingleState_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return SingleState_typeof(obj); }\n\nfunction SingleState_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction SingleState_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction SingleState_createClass(Constructor, protoProps, staticProps) { if (protoProps) SingleState_defineProperties(Constructor.prototype, protoProps); if (staticProps) SingleState_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction SingleState_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) SingleState_setPrototypeOf(subClass, superClass); }\n\nfunction SingleState_setPrototypeOf(o, p) { SingleState_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return SingleState_setPrototypeOf(o, p); }\n\nfunction SingleState_createSuper(Derived) { var hasNativeReflectConstruct = SingleState_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = SingleState_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = SingleState_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return SingleState_possibleConstructorReturn(this, result); }; }\n\nfunction SingleState_possibleConstructorReturn(self, call) { if (call && (SingleState_typeof(call) === "object" || typeof call === "function")) { return call; } return SingleState_assertThisInitialized(self); }\n\nfunction SingleState_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction SingleState_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction SingleState_getPrototypeOf(o) { SingleState_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return SingleState_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n\n/**\n * Class for playing a single animation clip.\n *\n * @extends AbstractState\n * @alias core/SingleState\n */\n\nvar SingleState_SingleState = /*#__PURE__*/function (_AbstractState) {\n SingleState_inherits(SingleState, _AbstractState);\n\n var _super = SingleState_createSuper(SingleState);\n\n /**\n * @constructor\n *\n * @param {Object=} options - Options for the animation state.\n * @param {string=} options.name - Name for the animation state. Names must be\n * unique for the layer the state is applied to.\n * @param {weight} [options.weight=0] - The 0-1 amount of influence the state will have.\n * @param {timeScale} [options.timeScale=1] - Factor to scale the playback speed of the\n * animation.\n * @param {number} [options.loopCount=Infinity] - Number of times the animation should\n * repeat before finishing.\n * @param {string} [options.blendMode=DefaultLayerBlendMode] - Type of\n * blending the animation should use.\n */\n function SingleState() {\n var _this;\n\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n SingleState_classCallCheck(this, SingleState);\n\n _this = _super.call(this, options);\n _this._timeScale = options.timeScale !== undefined ? options.timeScale : 1;\n _this._promises.timeScale = core_Deferred.resolve();\n _this._loopCount = options.loopCount !== undefined ? options.loopCount : Infinity;\n _this._blendMode = validateBlendMode(options.blendMode);\n return _this;\n }\n /**\n * Gets and sets the normalized playing time of the current animation\n *\n * @type {number}\n */\n\n\n SingleState_createClass(SingleState, [{\n key: "normalizedTime",\n get: function get() {\n return 0;\n },\n set: function set(time) {}\n /**\n * Gets and sets the a factor to scale animation playback speed with.\n *\n * @type {number}\n */\n\n }, {\n key: "timeScale",\n get: function get() {\n return this._timeScale;\n },\n set: function set(timeScale) {\n this._timeScale = timeScale;\n }\n /**\n * Gets whether or not the timeScale is currently being animated.\n *\n * @readonly\n * @type {boolean}\n */\n\n }, {\n key: "timeScalePending",\n get: function get() {\n return this._promises.timeScale.pending;\n }\n /**\n * Updates the timeScale value over time.\n *\n * @param {number} weight - The target timeScale value.\n * @param {number} [seconds=0] - The amount of time it will take to reach the\n * target timeScale.\n * @param {Function=} easingFn - The easing function to use for interpolation.\n *\n * @returns {Deferred}\n */\n\n }, {\n key: "setTimeScale",\n value: function setTimeScale(timeScale) {\n var seconds = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var easingFn = arguments.length > 2 ? arguments[2] : undefined;\n\n this._promises.timeScale.cancel();\n\n this._promises.timeScale = animpack_AnimationUtils.interpolateProperty(this, \'timeScale\', timeScale, {\n seconds: seconds,\n easingFn: easingFn\n });\n return this._promises.timeScale;\n }\n /**\n * Gets and sets the number of times the animation will repeat before finishing.\n *\n * @type {number}\n */\n\n }, {\n key: "loopCount",\n get: function get() {\n return this._loopCount;\n },\n set: function set(loopCount) {\n this._loopCount = loopCount;\n }\n /**\n * Gets the type of blending used for the animation.\n *\n * @readonly\n * @type {string}\n */\n\n }, {\n key: "blendMode",\n get: function get() {\n return this._blendMode;\n }\n }]);\n\n return SingleState;\n}(state_AbstractState);\n\n/* harmony default export */ var state_SingleState = (SingleState_SingleState);\n// CONCATENATED MODULE: ./src/core/animpack/state/RandomAnimationState.js\nfunction RandomAnimationState_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { RandomAnimationState_typeof = function _typeof(obj) { return typeof obj; }; } else { RandomAnimationState_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return RandomAnimationState_typeof(obj); }\n\nfunction RandomAnimationState_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction RandomAnimationState_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction RandomAnimationState_createClass(Constructor, protoProps, staticProps) { if (protoProps) RandomAnimationState_defineProperties(Constructor.prototype, protoProps); if (staticProps) RandomAnimationState_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction RandomAnimationState_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { RandomAnimationState_get = Reflect.get; } else { RandomAnimationState_get = function _get(target, property, receiver) { var base = RandomAnimationState_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return RandomAnimationState_get(target, property, receiver || target); }\n\nfunction RandomAnimationState_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = RandomAnimationState_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction RandomAnimationState_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) RandomAnimationState_setPrototypeOf(subClass, superClass); }\n\nfunction RandomAnimationState_setPrototypeOf(o, p) { RandomAnimationState_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return RandomAnimationState_setPrototypeOf(o, p); }\n\nfunction RandomAnimationState_createSuper(Derived) { var hasNativeReflectConstruct = RandomAnimationState_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = RandomAnimationState_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = RandomAnimationState_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return RandomAnimationState_possibleConstructorReturn(this, result); }; }\n\nfunction RandomAnimationState_possibleConstructorReturn(self, call) { if (call && (RandomAnimationState_typeof(call) === "object" || typeof call === "function")) { return call; } return RandomAnimationState_assertThisInitialized(self); }\n\nfunction RandomAnimationState_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction RandomAnimationState_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction RandomAnimationState_getPrototypeOf(o) { RandomAnimationState_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return RandomAnimationState_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n\n/**\n * Class for playing random animations at random intervals within this state.\n *\n * @extends AbstractState\n * @implements AnimationPlayerInterface\n * @implements StateContainerInterface\n */\n\nvar RandomAnimationState_RandomAnimationState = /*#__PURE__*/function (_AnimationPlayerInter) {\n RandomAnimationState_inherits(RandomAnimationState, _AnimationPlayerInter);\n\n var _super = RandomAnimationState_createSuper(RandomAnimationState);\n\n /**\n * @constructor\n *\n * @param {Object} [options={}] - Options for the container state.\n * @param {number} [options.playInterval=3] - The base animation playback interval.\n * @param {Array.} [subStates=[]] - states to be randomly picked to play\n */\n function RandomAnimationState() {\n var _this;\n\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var subStates = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n\n RandomAnimationState_classCallCheck(this, RandomAnimationState);\n\n _this = _super.call(this, options);\n _this._playInterval = options.playInterval ? options.playInterval : 3;\n subStates.forEach(function (state) {\n _this.addState(state);\n });\n return _this;\n }\n /**\n * Gets and sets the base animation play interval\n *\n * @type {float}\n */\n\n\n RandomAnimationState_createClass(RandomAnimationState, [{\n key: "playInterval",\n get: function get() {\n return this._playInterval;\n },\n set: function set(playInterval) {\n this._playInterval = playInterval;\n }\n /**\n * Reset the internal timer for animation play interval\n *\n * @private\n */\n\n }, {\n key: "_resetTimer",\n value: function _resetTimer() {\n var _this2 = this;\n\n var playTimer = core_Utils.getRandomFloat(this._playInterval / 4, this._playInterval * 2);\n\n var onFinish = function onFinish() {\n _this2.playRandomAnimation(_this2._playCallbacks.onError);\n };\n\n this._promises.timer = core_Utils.wait(playTimer, {\n onFinish: onFinish\n });\n }\n }, {\n key: "updateInternalWeight",\n value: function updateInternalWeight(factor) {\n RandomAnimationState_get(RandomAnimationState_getPrototypeOf(RandomAnimationState.prototype), "updateInternalWeight", this).call(this, factor);\n\n if (this._currentState) {\n this._currentState.updateInternalWeight(this._internalWeight);\n }\n }\n /**\n * Pick a random animation and utilize AnimationPlayerInterface to play that animation\n *\n * @param {Function=} onError - Function to execute if the state encounters\n * an error during playback.\n */\n\n }, {\n key: "playRandomAnimation",\n value: function playRandomAnimation(onError) {\n this._resetTimer();\n\n var states = this.getStateNames();\n\n if (this._currentState) {\n states.splice(states.indexOf(this._currentState.name), 1);\n }\n\n var randomState = states[core_Utils.getRandomInt(0, states.length)];\n this.playAnimation(randomState, this._transitionTime, this._easingFn, undefined, onError, undefined);\n }\n }, {\n key: "play",\n value: function play(onFinish, onError, onCancel) {\n this.playRandomAnimation(onError);\n return RandomAnimationState_get(RandomAnimationState_getPrototypeOf(RandomAnimationState.prototype), "play", this).call(this, onFinish, onError, onCancel);\n }\n }, {\n key: "pause",\n value: function pause() {\n return RandomAnimationState_get(RandomAnimationState_getPrototypeOf(RandomAnimationState.prototype), "pause", this).call(this) && this.pauseAnimation();\n }\n }, {\n key: "resume",\n value: function resume(onFinish, onError, onCancel) {\n if (this._currentState) {\n this.resumeAnimation(this._currentState.name, this._transitionTime, this._easingFn, undefined, onError, undefined);\n }\n\n return RandomAnimationState_get(RandomAnimationState_getPrototypeOf(RandomAnimationState.prototype), "resume", this).call(this, onFinish, onError, onCancel);\n }\n }, {\n key: "cancel",\n value: function cancel() {\n return RandomAnimationState_get(RandomAnimationState_getPrototypeOf(RandomAnimationState.prototype), "cancel", this).call(this) && this.cancelAnimation();\n }\n }, {\n key: "stop",\n value: function stop() {\n return RandomAnimationState_get(RandomAnimationState_getPrototypeOf(RandomAnimationState.prototype), "stop", this).call(this) && this.stopAnimation();\n }\n }, {\n key: "discard",\n value: function discard() {\n RandomAnimationState_get(RandomAnimationState_getPrototypeOf(RandomAnimationState.prototype), "discard", this).call(this);\n\n this.discardStates();\n }\n }]);\n\n return RandomAnimationState;\n}(animpack_AnimationPlayerInterface.Mixin(state_StateContainerInterface.Mixin(state_AbstractState)));\n\n/* harmony default export */ var state_RandomAnimationState = (RandomAnimationState_RandomAnimationState);\n// CONCATENATED MODULE: ./src/core/animpack/AnimationFeature.js\nfunction AnimationFeature_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { AnimationFeature_typeof = function _typeof(obj) { return typeof obj; }; } else { AnimationFeature_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return AnimationFeature_typeof(obj); }\n\nfunction AnimationFeature_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction AnimationFeature_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { AnimationFeature_ownKeys(Object(source), true).forEach(function (key) { AnimationFeature_defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { AnimationFeature_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction AnimationFeature_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction AnimationFeature_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction AnimationFeature_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction AnimationFeature_createClass(Constructor, protoProps, staticProps) { if (protoProps) AnimationFeature_defineProperties(Constructor.prototype, protoProps); if (staticProps) AnimationFeature_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction AnimationFeature_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { AnimationFeature_get = Reflect.get; } else { AnimationFeature_get = function _get(target, property, receiver) { var base = AnimationFeature_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return AnimationFeature_get(target, property, receiver || target); }\n\nfunction AnimationFeature_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = AnimationFeature_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction AnimationFeature_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) AnimationFeature_setPrototypeOf(subClass, superClass); }\n\nfunction AnimationFeature_setPrototypeOf(o, p) { AnimationFeature_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return AnimationFeature_setPrototypeOf(o, p); }\n\nfunction AnimationFeature_createSuper(Derived) { var hasNativeReflectConstruct = AnimationFeature_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = AnimationFeature_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = AnimationFeature_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return AnimationFeature_possibleConstructorReturn(this, result); }; }\n\nfunction AnimationFeature_possibleConstructorReturn(self, call) { if (call && (AnimationFeature_typeof(call) === "object" || typeof call === "function")) { return call; } return AnimationFeature_assertThisInitialized(self); }\n\nfunction AnimationFeature_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction AnimationFeature_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction AnimationFeature_getPrototypeOf(o) { AnimationFeature_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return AnimationFeature_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n\n\n\n\n\n\n\n/**\r\n * Enum for animation state classes.\r\n *\r\n * @readonly\r\n * @enum {Class}\r\n */\n\nvar AnimationTypes = {\n single: state_SingleState,\n freeBlend: state_FreeBlendState,\n queue: state_QueueState,\n randomAnimation: state_RandomAnimationState,\n blend1d: state_Blend1dState,\n blend2d: state_Blend2dState\n};\n/**\r\n * Feature for managing animations on an object.\r\n *\r\n * @extends AbstractHostFeature\r\n * @alias core/AnimationFeature\r\n *\r\n * @property {Object} EVENTS - Built-in messages that the feature emits. When the\r\n * feature is added to a {@link core/HostObject}, event names will be prefixed by the\r\n * name of the feature class + \'.\'.\r\n * @property {string} [EVENTS.addLayer=onAddLayerEvent] - Message that is emitted after\r\n * [addLayer]{@link core/AnimationFeature#addLayer} has been successfully executed.\r\n * An object representing the name of the layer that was added and its index in\r\n * the layer stack with the signature {name: string, index: number} is supplied\r\n * as an argument to listener functions.\r\n * @property {string} [EVENTS.removeLayer=onRemoveLayerEvent] - Message that is\r\n * emitted after [removeLayer]{@link core/AnimationFeature#removeLayer} has been\r\n * successfully executed. An object representing the name of the layer that was\r\n * removed and its index in the layer stack with the signature {name: string, index: number}\r\n * is supplied as an argument to listener functions.\r\n * @property {string} [EVENTS.renameLayer=onRenameLayerEvent] - Message that is\r\n * emitted after [renameLayer]{@link core/AnimationFeature#renameLayer} has been\r\n * successfully executed. An object representing the original name of the layer\r\n * that was renamed and its updated name with the signature {oldName: string, newName: string}\r\n * is supplied as an argument to listener functions.\r\n * @property {string} [EVENTS.addAnimation=onAddAnimationEvent] - Message that is\r\n * emitted after [addAnimation]{@link core/AnimationFeature#addAnimation} has been\r\n * successfully executed. An object representing the name of the layer that the\r\n * animation was added to and the name of the animation that was added with the\r\n * signature {layerName: string, animationName: string} is supplied as an argument\r\n * to listener functions.\r\n * @property {string} [EVENTS.removeAnimation=onRemovedAnimationEvent] - Message\r\n * that is emitted after [removeAnimation]{@link core/AnimationFeature#removeAnimation}\r\n * has been successfully executed. An object representing the name of the layer\r\n * that the animation was removed from and the name of the animation that was removed\r\n * with the signature {layerName: string, animationName: string} is supplied as\r\n * an argument to listener functions.\r\n * @property {string} [EVENTS.renameAnimation=onRenameAnimationEvent] - Message\r\n * that is emitted after [renameAnimation]{@link core/AnimationFeature#renameAnimation}\r\n * has been successfully executed. An object representing the name of the layer\r\n * that contains the animation that was renamed, the original name of the animation\r\n * that was renamed and its updated name with the signature {layerName: string, oldName: string, newName: string}\r\n * is supplied as an argument to listener functions.\r\n * @property {string} [EVENTS.play=onPlayEvent] - Message that is emitted after\r\n * each call to [play]{@link core/AnimationFeature#playAnimation}. An object representing\r\n * the name of the layer contains the animation that was played and the name of\r\n * the animation that was played with the signature {layerName: string, animationName: string}\r\n * is supplied as an argument to listener functions.\r\n * @property {string} [EVENTS.pause=onPauseEvent] - Message that is emitted after\r\n * each call to [pause]{@link core/AnimationFeature#pauseAnimation}. An object representing\r\n * the name of the layer contains the animation that was paused and the name of\r\n * the animation that was paused with the signature {layerName: string, animationName: string}\r\n * is supplied as an argument to listener functions.\r\n * @property {string} [EVENTS.resume=onResumeEvent] - Message that is emitted after\r\n * each call to [resume]{@link core/AnimationFeature#resumeAnimation}. An object representing\r\n * the name of the layer contains the animation that was resumed and the name of\r\n * the animation that was resumed with the signature {layerName: string, animationName: string}\r\n * is supplied as an argument to listener functions.\r\n * @property {string} [EVENTS.interrupt=onInterruptEvent] - Message that is emitted\r\n * if there is a current speech in progress and [play]{@link core/AnimationFeature#playAnimation}\r\n * or [resume]{@link core/AnimationFeature#resumeAnimation} are executed for a new speech.\r\n * An object representing the name of the layer contains the animation that was\r\n * interrupted and the name of the animation that was interrupted with the signature\r\n * {layerName: string, animationName: string} is supplied as an argument to listener\r\n * functions.\r\n * @property {string} [EVENTS.stop=onStopEvent] - Message that is emitted after\r\n * each call to [stop]{@link core/AnimationFeature#stopAnimation} and when a speech reaches\r\n * the end of playback. An object representing\r\n * the name of the layer contains the animation that was stopped and the name of\r\n * the animation that was stopped with the signature {layerName: string, animationName: string}\r\n * is supplied as an argument to listener functions.\r\n */\n\nvar AnimationFeature_AnimationFeature = /*#__PURE__*/function (_AbstractHostFeature) {\n AnimationFeature_inherits(AnimationFeature, _AbstractHostFeature);\n\n var _super = AnimationFeature_createSuper(AnimationFeature);\n\n /**\r\n * @constructor\r\n *\r\n * @param {core/HostObject} host - Host object that owns the feature.\r\n */\n function AnimationFeature(host) {\n var _this;\n\n AnimationFeature_classCallCheck(this, AnimationFeature);\n\n _this = _super.call(this, host);\n _this._layers = [];\n _this._layerMap = {};\n _this._paused = false;\n return _this;\n }\n /**\r\n * Make sure a supplied layer index is within the range of layers.\r\n *\r\n * @private\r\n *\r\n * @param {number} index\r\n * @param {boolean} [existing=true] - Whether the index represents and existing\r\n * layer or a new layer to be added.\r\n *\r\n * @returns {number=}\r\n */\n\n\n AnimationFeature_createClass(AnimationFeature, [{\n key: "_validateIndex",\n value: function _validateIndex(index) {\n var existing = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\n // Index is invalid if there are no layers and we\'re checking for an existing layer index\n if (this._layers.length === 0 && existing) {\n return undefined;\n }\n\n var lastIndex = existing ? this._layers.length - 1 : this._layers.length; // Count from the end of the array for negative indices\n\n if (index < 0) {\n index = lastIndex + index + 1;\n }\n\n if (index < 0 || index > lastIndex) {\n return undefined;\n } else {\n return index;\n }\n }\n /**\r\n * Re-evaluate internal weight values of layers starting from the top of the\r\n * stack. Override layers\' weights affect the values of all layers lower in the\r\n * stack.\r\n *\r\n * @private\r\n */\n\n }, {\n key: "_updateInternalWeights",\n value: function _updateInternalWeights() {\n var numLayers = this._layers.length;\n var weightMultiplier = 1; // Update internal weight values on layers in reverse order\n\n for (var i = numLayers - 1; i >= 0; i--) {\n var layer = this._layers[i];\n layer.updateInternalWeight(weightMultiplier); // If the layer is override, update the multiplier with the remainder of the full weight\n\n if (layer.blendMode === LayerBlendModes.Override && layer.currentState) {\n weightMultiplier *= 1 - layer.currentState.internalWeight;\n }\n }\n }\n /**\r\n * Return a new instance of a SingleState.\r\n *\r\n * @private\r\n *\r\n * @param {Object} options - Options to pass to the SingleState constructor.\r\n * @param {string=} options.name - Name for the animation state. Names must be\r\n * unique for the layer the state is applied to.\r\n * @param {weight} [options.weight=0] - The 0-1 amount of influence the state will have.\r\n * @param {timeScale} [options.timeScale=1] - Factor to scale the playback speed of the\r\n * animation.\r\n * @param {number} [options.loopCount=Infinity] - Number of times the animation should\r\n * repeat before finishing.\r\n * @param {string} [options.blendMode=LayerBlendModes[DefaultLayerBlendMode]] - Type of\r\n * blending the animation should use.\r\n *\r\n * @returns {core/SingleState}\r\n */\n\n }, {\n key: "_createSingleState",\n value: function _createSingleState(options) {\n return new state_SingleState(options);\n }\n /**\r\n * Return a new instance of a FreeBlendState.\r\n *\r\n * @private\r\n *\r\n * @param {Object} options - Options to pass to the FreeBlendState constructor.\r\n * @param {string=} options.name - Name for the animation state. Names must be\r\n * unique for the layer the state is applied to.\r\n * @param {weight} [options.weight=0] - The 0-1 amount of influence the state will have.\r\n * @param {timeScale} [options.timeScale=1] - Factor to scale the playback speed of the\r\n * animation.\r\n * @param {number} [options.loopCount=Infinity] - Number of times the animation should\r\n * repeat before finishing.\r\n * @param {string} [options.blendMode=LayerBlendModes[DefaultLayerBlendMode]] - Type of\r\n * blending the animation should use.\r\n * @param {Array.} [options.blendStateOptions] - Array of options used to create the\r\n * blend states for this container.\r\n *\r\n * @returns {FreeBlendState}\r\n */\n\n }, {\n key: "_createFreeBlendState",\n value: function _createFreeBlendState(options) {\n var _this2 = this;\n\n var _options$blendStateOp = options.blendStateOptions,\n blendStateOptions = _options$blendStateOp === void 0 ? [] : _options$blendStateOp;\n var blendStates = [];\n blendStateOptions.forEach(function (blendOptions) {\n blendStates.push(_this2._createSingleState(AnimationFeature_objectSpread(AnimationFeature_objectSpread({}, blendOptions), {}, {\n blendMode: options.blendMode\n })));\n });\n return new state_FreeBlendState(options, blendStates);\n }\n /**\r\n * Return a new instance of a QueueState.\r\n *\r\n * @private\r\n *\r\n * @param {Object} options - Options to pass to the QueueState constructor.\r\n * @param {string=} options.name - Name for the animation state. Names must be\r\n * unique for the layer the state is applied to.\r\n * @param {number} [options.weight=0] - The 0-1 amount of influence the state will have.\r\n * @param {number=} options.transitionTime - The amount of time it takes to transition\r\n * between queued states.\r\n * @param {string} [options.blendMode=LayerBlendModes[DefaultLayerBlendMode]] - Type of\r\n * blending the animation should use.\r\n * @param {Array.} [options.queueOptions] - Array of options used to create the\r\n * queue states for this container.\r\n *\r\n * @returns {QueueState}\r\n */\n\n }, {\n key: "_createQueueState",\n value: function _createQueueState(options) {\n var _this3 = this;\n\n var _options$queueOptions = options.queueOptions,\n queueOptions = _options$queueOptions === void 0 ? [] : _options$queueOptions;\n var queueStates = queueOptions.map(function (queueOption) {\n return _this3._createSingleState(AnimationFeature_objectSpread(AnimationFeature_objectSpread({\n transitionTime: options.transitionTime\n }, queueOption), {}, {\n blendMode: options.blendMode\n }));\n });\n return new state_QueueState(options, queueStates);\n }\n /**\r\n * Return a new instance of a Blend1dState.\r\n *\r\n * @private\r\n *\r\n * @param {Object} options - Options to pass to the Blend1dState constructor.\r\n * @param {string=} options.name - Name for the animation state. Names must be\r\n * unique for the layer the state is applied to.\r\n * @param {weight} [options.weight=0] - The 0-1 amount of influence the state will have.\r\n * @param {timeScale} [options.timeScale=1] - Factor to scale the playback speed of the\r\n * animation.\r\n * @param {number} [options.loopCount=Infinity] - Number of times the animation should\r\n * repeat before finishing.\r\n * @param {string} [options.blendMode=LayerBlendModes[DefaultLayerBlendMode]] - Type of\r\n * blending the animation should use.\r\n * @param {Array.} [options.blendStateOptions] - Array of options used to create the\r\n * blend states for this container.\r\n * @param {Array.} [options.blendThresholds] - Array of numbers used to set the\r\n * thresholds for each blend state in this container.\r\n * @param {Array.} [options.blendMatchPhases=[]] - Optional array of booleans used to\r\n * set whether or not each blend state in this container will match phases.\r\n *\r\n * @returns {Blend1dState}\r\n */\n\n }, {\n key: "_createBlend1dState",\n value: function _createBlend1dState(options) {\n var _this4 = this;\n\n var _options$blendStateOp2 = options.blendStateOptions,\n blendStateOptions = _options$blendStateOp2 === void 0 ? [] : _options$blendStateOp2;\n var _options$blendThresho = options.blendThresholds,\n blendThresholds = _options$blendThresho === void 0 ? [] : _options$blendThresho;\n var _options$blendMatchPh = options.blendMatchPhases,\n blendMatchPhases = _options$blendMatchPh === void 0 ? [] : _options$blendMatchPh;\n var blendStates = [];\n blendStateOptions.forEach(function (blendOptions) {\n blendStates.push(_this4._createSingleState(AnimationFeature_objectSpread(AnimationFeature_objectSpread({}, blendOptions), {}, {\n blendMode: options.blendMode\n })));\n });\n return new state_Blend1dState(options, blendStates, blendThresholds, blendMatchPhases);\n }\n /**\r\n * Return a new instance of a Blend2dState.\r\n *\r\n * @private\r\n *\r\n * @param {Object} options - Options to pass to the Blend1dState constructor.\r\n * @param {string=} options.name - Name for the animation state. Names must be\r\n * unique for the layer the state is applied to.\r\n * @param {weight} [options.weight=0] - The 0-1 amount of influence the state will have.\r\n * @param {timeScale} [options.timeScale=1] - Factor to scale the playback speed of the\r\n * animation.\r\n * @param {number} [options.loopCount=Infinity] - Number of times the animation should\r\n * repeat before finishing.\r\n * @param {string} [options.blendMode=LayerBlendModes[DefaultLayerBlendMode]] - Type of\r\n * blending the animation should use.\r\n * @param {Array.} [options.blendStateOptions] - Array of options used to create the\r\n * blend states for this container.\r\n * @param {Array.>} [options.blendThresholds] - Array of Array of numbers used to set the\r\n * thresholds for each blend state in this container.\r\n * @param {Array.} [options.blendMatchPhases=[]] - Optional array of booleans used to\r\n * set whether or not each blend state in this container will match phases.\r\n *\r\n * @returns {Blend1dState}\r\n */\n\n }, {\n key: "_createBlend2dState",\n value: function _createBlend2dState(options) {\n var _this5 = this;\n\n var _options$blendStateOp3 = options.blendStateOptions,\n blendStateOptions = _options$blendStateOp3 === void 0 ? [] : _options$blendStateOp3;\n var _options$blendThresho2 = options.blendThresholds,\n blendThresholds = _options$blendThresho2 === void 0 ? [] : _options$blendThresho2;\n var _options$blendMatchPh2 = options.blendMatchPhases,\n blendMatchPhases = _options$blendMatchPh2 === void 0 ? [] : _options$blendMatchPh2;\n var blendStates = [];\n blendStateOptions.forEach(function (blendOptions) {\n blendStates.push(_this5._createSingleState(AnimationFeature_objectSpread(AnimationFeature_objectSpread({}, blendOptions), {}, {\n blendMode: options.blendMode\n })));\n });\n return new state_Blend2dState(options, blendStates, blendThresholds, blendMatchPhases);\n }\n /**\r\n * Return a new instance of a RandomAnimationState.\r\n *\r\n * @private\r\n *\r\n * @param {Object} options - Options to pass to the RandomAnimationState constructor.\r\n * @param {string=} options.name - Name for the animation state. Names must be\r\n * unique for the layer the state is applied to.\r\n * @param {number} [options.playInterval=3] - The base animation playback interval.\r\n * @param {Array.} [options.subStateOptions] - Array of options used to create the\r\n * sub states for this container.\r\n *\r\n * @returns {RandomAnimationState}\r\n */\n\n }, {\n key: "_createRandomAnimationState",\n value: function _createRandomAnimationState(options) {\n var _this6 = this;\n\n var _options$subStateOpti = options.subStateOptions,\n subStateOptions = _options$subStateOpti === void 0 ? [] : _options$subStateOpti;\n var subStates = [];\n subStateOptions.forEach(function (subStateOptions) {\n subStates.push(_this6._createSingleState(AnimationFeature_objectSpread(AnimationFeature_objectSpread({}, subStateOptions), {}, {\n blendMode: options.blendMode\n })));\n });\n return new state_RandomAnimationState(options, subStates);\n }\n /**\r\n * Make sure the layer with the given name exists and return a unique version\r\n * of the animation name supplied for that layer.\r\n *\r\n * @private\r\n *\r\n * @param {string} layerName - Name of the layer to check against.\r\n * @param {string} animationName - Name of the animation to validate.\r\n *\r\n * @returns {string} Validated animation name.\r\n */\n\n }, {\n key: "_validateNewAnimation",\n value: function _validateNewAnimation(layerName, animationName) {\n // Make sure the layerName is valid\n var layer = this._layerMap[layerName];\n\n if (layer === undefined) {\n throw new Error("Cannot add animation to layer ".concat(layerName, " from host ").concat(this._host.id, ". No layer exists with this name."));\n } // Make sure the animationName is unique\n\n\n var name = core_Utils.getUniqueName(animationName, layer.getStateNames());\n\n if (name !== animationName) {\n console.warn("Animation name ".concat(animationName, " is not unique for layer ").concat(layer.name, ". Animation will be renamed to ").concat(name, "."));\n }\n\n return name;\n }\n /**\r\n * Gets whether or not all animations are paused.\r\n *\r\n * @readonly\r\n * @type {boolean}\r\n */\n\n }, {\n key: "paused",\n get: function get() {\n return this._paused;\n }\n /**\r\n * Gets an array of names of animation layers.\r\n *\r\n * @readonly\r\n * @type {Array.}\r\n */\n\n }, {\n key: "layers",\n get: function get() {\n return this._layers.map(function (layer) {\n return layer.name;\n });\n }\n /**\r\n * Create and store a new animation layer.\r\n *\r\n * @param {string} [name=\'NewLayer\'] - Name for the layer.\r\n * @param {Object} [options={}] - Options to pass to {@link AnimationLayer#constructor}\r\n * @param {index=} index - Index to insert the new layer at. If none is provided\r\n * it will be added to the end of the stack.\r\n *\r\n * @returns {number} Index of the new layer.\r\n */\n\n }, {\n key: "addLayer",\n value: function addLayer() {\n var name = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : \'NewLayer\';\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var index = arguments.length > 2 ? arguments[2] : undefined;\n var numLayers = this._layers.length;\n var layerIndex = index; // Make sure the given index is within the range of layers\n\n if (index === undefined || index === -1) {\n layerIndex = this._layers.length;\n } else {\n layerIndex = this._validateIndex(index, false);\n\n if (layerIndex === undefined) {\n // Insert at the beginning if the user passed in a negative index\n if (index < 0) {\n layerIndex = 0;\n } // Otherwise append to the end\n else {\n layerIndex = this._layers.length;\n }\n\n console.warn("Index ".concat(index, " is invalid for host ").concat(this._host.id, ". New layer will be added at the closest valid index: ").concat(layerIndex, "."));\n }\n } // Make sure the layer name is unique\n\n\n var layerName = core_Utils.getUniqueName(name, Object.keys(this._layerMap));\n\n if (name !== layerName) {\n console.warn("Layer name ".concat(name, " is not unique. New layer will be added with the name ").concat(layerName, "."));\n }\n\n var layer = new animpack_AnimationLayer(AnimationFeature_objectSpread(AnimationFeature_objectSpread({}, options), {}, {\n name: layerName\n }));\n this._layerMap[layerName] = layer;\n\n if (layerIndex === numLayers) {\n this._layers.push(layer);\n } else {\n this._layers.splice(layerIndex, 0, layer);\n } // Notify that a layer has been added to the feature\n\n\n var eventData = {\n name: layerName,\n index: layerIndex\n };\n this.emit(this.constructor.EVENTS.addLayer, eventData);\n return eventData;\n }\n /**\r\n * Remove an animation layer from the stack. Animations on this layer will no\r\n * longer be evaluated.\r\n *\r\n * @param {string} name - Name for the layer to remove.\r\n *\r\n * @returns {boolean} Whether or not removal was successful.\r\n */\n\n }, {\n key: "removeLayer",\n value: function removeLayer(name) {\n var layer = this._layerMap[name];\n\n if (layer === undefined) {\n console.warn("Did not remove layer ".concat(name, " from host ").concat(this._host.id, ". No layer exists with this name."));\n return false;\n }\n\n layer.discard();\n\n var index = this._layers.indexOf(layer);\n\n this._layers.splice(index, 1);\n\n delete this._layerMap[name]; // Notify that a layer has been removed from the feature\n\n this.emit(this.constructor.EVENTS.removeLayer, {\n name: name,\n index: index\n });\n return true;\n }\n /**\r\n * Re-order the layer stack so that the layer with the given name is positioned\r\n * at the given index.\r\n *\r\n * @param {string} name - Name of the layer to move.\r\n * @param {number} index - New index to position the layer at.\r\n *\r\n * @returns {number} The new index of the layer\r\n */\n\n }, {\n key: "moveLayer",\n value: function moveLayer(name, index) {\n // Make sure the name is valid\n var layer = this._layerMap[name];\n\n if (layer === undefined) {\n throw new Error("Cannot move layer ".concat(name, " from host ").concat(this._host.id, ". No layer exists with this name."));\n } // Make sure the index falls in the range of existing layers\n\n\n var layerIndex = this._validateIndex(index, true);\n\n var lastIndex = this._layers.length - 1;\n\n if (layerIndex === undefined) {\n throw new Error("Cannot move layer ".concat(name, " from host ").concat(this._host.id, " to index ").concat(index, ". Index must be in the 0 - ").concat(lastIndex, " range."));\n }\n\n var currentIndex = this._layers.indexOf(layer);\n\n if (currentIndex === layerIndex) {\n return;\n } // Remove from the current position\n\n\n this._layers.splice(currentIndex, 1); // Insert at the new position\n\n\n if (layerIndex === lastIndex) {\n this._layers.push(layer);\n } else {\n this._layers.splice(layerIndex, 0, layer);\n }\n\n return layerIndex;\n }\n /**\r\n * Update the name of a layer. Names must be unique, if the new name is not\r\n * unique it will have trailing numbers appended until it is unique.\r\n *\r\n * @param {string} currentName - Current name of the layer.\r\n * @param {string} newName - New name to set on the layer.\r\n *\r\n * @returns {string} The new name of the layer\r\n */\n\n }, {\n key: "renameLayer",\n value: function renameLayer(currentName, newName) {\n // Make sure the name is valid\n var layer = this._layerMap[currentName];\n\n if (layer === undefined) {\n throw new Error("Cannot rename layer ".concat(currentName, " from host ").concat(this._host.id, ". No layer exists with this name."));\n } // Make sure the layer name is unique\n\n\n var name = core_Utils.getUniqueName(newName, Object.keys(this._layerMap));\n\n if (name !== newName) {\n console.warn("Layer name ".concat(newName, " is not unique. Layer will be renamed to ").concat(name, "."));\n }\n\n delete this._layerMap[currentName];\n this._layerMap[name] = layer;\n layer.name = name; // Notify that a layer has been renamed on the feature\n\n this.emit(this.constructor.EVENTS.renameLayer, {\n oldName: currentName,\n newName: name\n });\n return name;\n }\n /**\r\n * Return the weight of an animation layer.\r\n *\r\n * @param {string} name - Name of the layer to return weight from.\r\n *\r\n * @returns {number}\r\n */\n\n }, {\n key: "getLayerWeight",\n value: function getLayerWeight(name) {\n // Make sure the name is valid\n var layer = this._layerMap[name];\n\n if (layer === undefined) {\n throw new Error("Cannot get weight on layer ".concat(name, " from host ").concat(this._host.id, ". No layer exists with this name."));\n }\n\n return layer.weight;\n }\n /**\r\n * Update the weight of an animation layer.\r\n *\r\n * @param {string} name - The name of the layer to update.\r\n * @param {number} weight - The weight value to set on the layer. This number\r\n * should be in the 0-1 range.\r\n * @param {number=} seconds - The number of seconds it should take to reach the\r\n * new weight. Default is zero and will set immediately.\r\n * @param {Function=} easingFn - The easing function to use while interpolating\r\n * the weight. Default is Easing.Linear.InOut.\r\n *\r\n * @returns {Deferred} A promise that will resolve once the layer\'s weight reaches\r\n * the target value.\r\n */\n\n }, {\n key: "setLayerWeight",\n value: function setLayerWeight(name, weight, seconds, easingFn) {\n // Make sure the name is valid\n var layer = this._layerMap[name];\n\n if (layer === undefined) {\n var e = "Cannot set weight on layer ".concat(name, " from host ").concat(this._host.id, ". No layer exists with this name.");\n return core_Deferred.reject(e);\n }\n\n return layer.setWeight(weight, seconds, easingFn);\n }\n /**\r\n * Returns the names of blend states in an animation in a layer.\r\n *\r\n * @param {string} layerName - Name of the layer containing the animation containing\r\n * the blend state to update.\r\n * @param {string} animationName - Name of the animation containing the blend state\r\n * to update.\r\n *\r\n * @returns {Array.} - Names of blend states.\r\n */\n\n }, {\n key: "getAnimationBlendNames",\n value: function getAnimationBlendNames(layerName, animationName) {\n var layer = this._layerMap[layerName];\n\n if (layer === undefined) {\n throw new Error("Cannot get blend names on layer ".concat(layerName, " from host ").concat(this._host.id, ". No layer exists with this name."));\n }\n\n return layer.getAnimationBlendNames(animationName);\n }\n /**\r\n * Update the weight for a blend state in an animation in a layer.\r\n *\r\n * @param {string} layerName - Name of the layer containing the animation containing\r\n * the blend state to update.\r\n * @param {string} animationName - Name of the animation containing the blend state\r\n * to update.\r\n * @param {string} blendName - Name of the blend state to update.\r\n * @param {number} weight - Weight value to set on the animation. This number shoudld be\r\n * in the 0-1 range.\r\n * @param {number=} seconds - Number of seconds it should take to reach the new weight.\r\n * Default is zero and will set immediately.\r\n * @param {Function=} easingFn - Easing function to use while interpolating the new\r\n * weight. Default is Easing.Linear.InOut.\r\n *\r\n * @returns {Deferred} - Promise that will resolve once the animation\'s weight reaches\r\n * the target value.\r\n */\n\n }, {\n key: "setAnimationBlendWeight",\n value: function setAnimationBlendWeight(layerName, animationName, blendName, weight, seconds, easingFn) {\n var layer = this._layerMap[layerName];\n\n if (layer === undefined) {\n var e = "Cannot set blend weight on layer ".concat(layerName, " from host ").concat(this._host.id, ". No layer exists with this name.");\n return core_Deferred.reject(e);\n }\n\n return layer.setAnimationBlendWeight(animationName, blendName, weight, seconds, easingFn);\n }\n /**\r\n * Returns the weight for a blend state in an animation in a layer.\r\n *\r\n * @param {string} layerName - Name of the layer containing the animation containing\r\n * the blend state to update.\r\n * @param {string} animationName - Name of the animation containing the blend state\r\n * to update.\r\n * @param {string} blendName - Name of the blend state to update.\r\n *\r\n * @returns {number} - Weight of the blend state.\r\n */\n\n }, {\n key: "getAnimationBlendWeight",\n value: function getAnimationBlendWeight(layerName, animationName, blendName) {\n var layer = this._layerMap[layerName];\n\n if (layer === undefined) {\n throw new Error("Cannot get blend weight on layer ".concat(layerName, " from host ").concat(this._host.id, ". No layer exists with this name."));\n }\n\n return layer.getAnimationBlendWeight(animationName, blendName);\n }\n /**\r\n * Pause weight interpolation animation on a layer with the given name.\r\n *\r\n * @param {string} name - Name of the layer to pause.\r\n *\r\n * @returns {boolean} - Whether or not there was an existing interpolation to pause.\r\n */\n\n }, {\n key: "pauseLayerWeight",\n value: function pauseLayerWeight(name) {\n // Make sure the name is valid\n var layer = this._layerMap[name];\n\n if (layer === undefined) {\n throw new Error("Cannot pause weight interpolation on layer ".concat(name, " from host ").concat(this._host.id, ". No layer exists with this name."));\n }\n\n return layer.pauseWeight();\n }\n /**\r\n * Resume weight interpolation animation on a layer with the given name.\r\n *\r\n * @param {string} name - Name of the layer to resume.\r\n *\r\n * @returns {Deferred} - Resolves once the layer\'s weight reaches its target value.\r\n */\n\n }, {\n key: "resumeLayerWeight",\n value: function resumeLayerWeight(name) {\n // Make sure the name is valid\n var layer = this._layerMap[name];\n\n if (layer === undefined) {\n var e = "Cannot resume weight interpolation on layer ".concat(name, " from host ").concat(this._host.id, ". No layer exists with this name.");\n return core_Deferred.reject(e);\n }\n\n return layer.resumeWeight();\n }\n /**\r\n * Pause current animation and weight interpolation animation on a layer with\r\n * the given name.\r\n *\r\n * @param {string} name - Name of the layer to pause.\r\n *\r\n * @returns {boolean} - Whether or not there was an existing interpolation or\r\n * current animation to pause.\r\n */\n\n }, {\n key: "pauseLayer",\n value: function pauseLayer(name) {\n // Make sure the name is valid\n var layer = this._layerMap[name];\n\n if (layer === undefined) {\n throw new Error("Cannot pause layer ".concat(name, " from host ").concat(this._host.id, ". No layer exists with this name."));\n }\n\n return layer.pause();\n }\n /**\r\n * Resume current animation and weight interpolation animation on a layer with\r\n * the given name.\r\n *\r\n * @param {string} name - Name of the layer to resume.\r\n *\r\n * @returns {Deferred} - Resolves once the layer\'s weight reaches its target value\r\n * and it\'s current animation finishes playing.\r\n */\n\n }, {\n key: "resumeLayer",\n value: function resumeLayer(name) {\n // Make sure the name is valid\n var layer = this._layerMap[name];\n\n if (layer === undefined) {\n var e = "Cannot resume layer ".concat(name, " from host ").concat(this._host.id, ". No layer exists with this name.");\n return core_Deferred.reject(e);\n }\n\n return layer.resume();\n }\n /**\r\n * Return whether or not the animation layer with the given name is currently\r\n * transitioning between animations.\r\n *\r\n * @param {string} layerName - Name of the layer to check.\r\n *\r\n * @returns {boolean}\r\n */\n\n }, {\n key: "getTransitioning",\n value: function getTransitioning(layerName) {\n // Make sure the layerName is valid\n var layer = this._layerMap[layerName];\n\n if (layer === undefined) {\n throw new Error("Get transitioning on layer ".concat(layerName, " from host ").concat(this._host.id, ". No layer exists with this name."));\n }\n\n return layer.isTransitioning;\n }\n /**\r\n * Return an array of the names of all states the layer with the given name controls.\r\n *\r\n * @param {string} layerName - Name of the layer to search.\r\n *\r\n * @returns {Array.}\r\n */\n\n }, {\n key: "getAnimations",\n value: function getAnimations(layerName) {\n // Make sure the layerName is valid\n var layer = this._layerMap[layerName];\n\n if (layer === undefined) {\n throw new Error("Get animations on layer ".concat(layerName, " from host ").concat(this._host.id, ". No layer exists with this name."));\n }\n\n return layer.getStateNames();\n }\n /**\r\n * Return the name of the state currently active on the layer with the given name.\r\n * Return null if there is no current animation for the layer.\r\n *\r\n * @param {string} layerName - Name of the layer.\r\n *\r\n * @returns {(string|null)}\r\n */\n\n }, {\n key: "getCurrentAnimation",\n value: function getCurrentAnimation(layerName) {\n // Make sure the layerName is valid\n var layer = this._layerMap[layerName];\n\n if (layer === undefined) {\n throw new Error("Get current animation on layer ".concat(layerName, " from host ").concat(this._host.id, ". No layer exists with this name."));\n }\n\n return layer.currentAnimation;\n }\n /**\r\n * Return whether or not a layer with the given name is currently playing an\r\n * animation and that animation is paused.\r\n *\r\n * @param {string} layerName - Name of the layer.\r\n *\r\n * @returns {boolean}\r\n */\n\n }, {\n key: "getPaused",\n value: function getPaused(layerName) {\n // Make sure the layerName is valid\n var layer = this._layerMap[layerName];\n\n if (layer === undefined) {\n throw new Error("Get paused on layer ".concat(layerName, " from host ").concat(this._host.id, ". No layer exists with this name."));\n }\n\n return layer.currentState && layer.currentState.paused;\n }\n /**\r\n * Return the type name of the given animation. @see AnimationTypes.\r\n *\r\n * @param {string} layerName - Name of the layer that contains the animation.\r\n * @param {string} animationName - Name of the animation to check.\r\n *\r\n * @returns {string}\r\n */\n\n }, {\n key: "getAnimationType",\n value: function getAnimationType(layerName, animationName) {\n // Make sure the layerName is valid\n var layer = this._layerMap[layerName];\n\n if (layer === undefined) {\n throw new Error("Get animation type on layer ".concat(layerName, " from host ").concat(this._host.id, ". No layer exists with this name."));\n }\n\n var state = layer.getState(animationName);\n\n if (state === undefined) {\n throw new Error("Get animation type for animation ".concat(animationName, " on layer ").concat(layerName, " from host ").concat(this._host.id, ". No animation exists with this name."));\n }\n\n var constructor = state.constructor;\n return Object.keys(AnimationTypes).find(function (typeName) {\n return AnimationTypes[typeName] === constructor;\n });\n }\n /**\r\n * Add a new animation to an animation layer.\r\n *\r\n * @param {string} layerName - Name of the layer to add the animation to.\r\n * @param {string} animationName - Name to use when calling the animation.\r\n * @param {Object=} options - Options to pass to the constructor for the new\r\n * SingleState animation.\r\n *\r\n * @returns {string} - The name of the animation that was added\r\n */\n\n }, {\n key: "addAnimation",\n value: function addAnimation(layerName, animationName) {\n var animationType = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : AnimationTypes.single;\n var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n options.name = this._validateNewAnimation(layerName, animationName); // Make sure the animation type is valid\n\n if (!Object.values(AnimationTypes).includes(animationType)) {\n throw new Error("Cannot add animation ".concat(animationName, " to layer ").concat(layerName, " on host ").concat(this._host.id, ". Invalid animation type."));\n }\n\n var layer = this._layerMap[layerName];\n options.blendMode = layer.blendMode;\n options.transitionTime = layer.transitionTime;\n var state = this["_create".concat(animationType.name)](options);\n var name = layer.addState(state); // Notify that an animation has been added to the feature\n\n this.emit(this.constructor.EVENTS.addAnimation, {\n layerName: layerName,\n animationName: name\n });\n return name;\n }\n /**\r\n * Remove an animation from an animation layer.\r\n *\r\n * @param {string} layerName - Name of the layer to remove the animation from.\r\n * @param {string} name - Name of the animation to remove.\r\n *\r\n * @returns {boolean}\r\n */\n\n }, {\n key: "removeAnimation",\n value: function removeAnimation(layerName, animationName) {\n // Make sure the name is valid\n var layer = this._layerMap[layerName];\n\n if (layer === undefined) {\n throw new Error("Cannot remove animation from layer ".concat(layerName, " from host ").concat(this._host.id, ". No layer exists with this name."));\n }\n\n var removed = layer.removeState(animationName); // Notify that an animation has been removed from the feature\n\n if (removed === true) {\n this.emit(this.constructor.EVENTS.removeAnimation, {\n layerName: layerName,\n animationName: animationName\n });\n }\n\n return removed;\n }\n /**\r\n * Update the name of an animation. Names must be unique on each layer, if the new\r\n * name is not unique it will have trailing numbers appended until it is unique.\r\n *\r\n * @param {string} layerName - Name of the layer that contains the animation that\r\n * will be renamed,\r\n * @param {string} currentAnimationName - Current name of the animation.\r\n * @param {string} newAnimationName - New name to set on the animation.\r\n *\r\n * @returns {string} - The new name of the animation\r\n */\n\n }, {\n key: "renameAnimation",\n value: function renameAnimation(layerName, currentAnimationName, newAnimationName) {\n var layer = this._layerMap[layerName];\n\n if (layer === undefined) {\n throw new Error("Cannot rename animation ".concat(currentAnimationName, " on layer ").concat(layerName, " for host ").concat(this._host.id, ". No layer exists with this name."));\n }\n\n var name = layer.renameState(currentAnimationName, newAnimationName); // Notify that an animation has been renamed on the feature\n\n this.emit(this.constructor.EVENTS.renameAnimation, {\n layerName: layerName,\n oldName: currentAnimationName,\n newName: name\n });\n return name;\n }\n /**\r\n * Pause the currently playing animation and play a new animation from the beginning.\r\n *\r\n * @param {string} layerName - Name of the layer that contains the animation.\r\n * @param {string} animationName - Name of the animation state to play.\r\n * @param {number=} seconds - The number of seconds it should take to transition\r\n * to the new animation. Default is zero and will set immediately.\r\n * @param {Function=} easingFn - The easing function to use while transitioning\r\n * between animations. Default is Easing.Linear.InOut.\r\n *\r\n * @returns {Deferred} - Resolves once the animation reaches the end of its\r\n * timeline. Looping animations can only resolve if they are interrupted or\r\n * manually stopped.\r\n */\n\n }, {\n key: "playAnimation",\n value: function playAnimation(layerName, animationName, seconds, easingFn) {\n var _this7 = this;\n\n var layer = this._layerMap[layerName];\n\n if (layer === undefined) {\n var e = "Cannot play animation ".concat(animationName, " on layer ").concat(layerName, " for host ").concat(this._host.id, ". No layer exists with this name.");\n return core_Deferred.reject(e);\n } // Notify that a new animation has begun\n\n\n this.emit(this.constructor.EVENTS.playAnimation, {\n layerName: layerName,\n animationName: animationName\n });\n return layer.playAnimation(animationName, seconds, easingFn, function () {\n // Notify that an animation has stopped\n _this7.emit(_this7.constructor.EVENTS.stopAnimation, {\n layerName: layerName,\n animationName: animationName\n });\n }, undefined, function () {\n // Notify that an animation has been interrupted\n _this7.emit(_this7.constructor.EVENTS.interruptAnimation, {\n layerName: layerName,\n animationName: animationName\n });\n }, function (_ref) {\n var name = _ref.name,\n canAdvance = _ref.canAdvance,\n isQueueEnd = _ref.isQueueEnd;\n\n if (layer.currentAnimation === animationName) {\n // Notify that a new animation has begun\n _this7.emit(_this7.constructor.EVENTS.playNextAnimation, {\n layerName: layerName,\n animationName: animationName,\n nextQueuedAnimation: name,\n canAdvance: canAdvance,\n isQueueEnd: isQueueEnd\n });\n }\n });\n }\n /**\r\n * Play the next animation in the queue of a QueueState animation.\r\n *\r\n * @param {string} layerName - Name of the layer that contains the queue animation.\r\n * @param {string=} animationName - Name of the animation queue animation. Defaults\r\n * to the name of the current animation for the layer.\r\n * @param {number=} seconds - The number of seconds it should take to transition\r\n * to the queue animation if it\'s not already currently playing. Default is zero\r\n * and will set immediately.\r\n * @param {Function=} easingFn - The easing function to use while transitioning\r\n * to the queue animation if it isn\'t already playing. Default is Easing.Linear.InOut.\r\n *\r\n * @returns {Deferred} - Resolves once the last animation in the queue finishes\r\n * playing.\r\n */\n\n }, {\n key: "playNextAnimation",\n value: function playNextAnimation(layerName, animationName, transitionTime, easingFn) {\n var _this8 = this;\n\n var layer = this._layerMap[layerName];\n\n if (layer === undefined) {\n var e = "Cannot play next animation on layer ".concat(layerName, " for host ").concat(this._host.id, ". No layer exists with this name.");\n return core_Deferred.reject(e);\n }\n\n if (animationName === undefined) {\n animationName = layer.currentAnimation;\n }\n\n var animation = layer.getState(layer.currentAnimation);\n\n if (animation === null) {\n var _e = "Cannot play next animation on layer ".concat(layerName, " for host ").concat(this._host.id, ". No animation exists with name ").concat(animationName, ".");\n\n return core_Deferred.reject(_e);\n } else if (this.getAnimationType(layerName, animationName) !== \'queue\') {\n var _e2 = "Cannot play next animation on layer ".concat(layerName, " for host ").concat(this._host.id, ". ").concat(animationName, " is not a queue state.");\n\n return core_Deferred.reject(_e2);\n }\n\n var onNext = function onNext(_ref2) {\n var name = _ref2.name,\n canAdvance = _ref2.canAdvance,\n isQueueEnd = _ref2.isQueueEnd;\n\n if (layer.currentAnimation === animationName) {\n // Notify that a new animation has begun\n _this8.emit(_this8.constructor.EVENTS.playNextAnimation, {\n layerName: layerName,\n animationName: animationName,\n nextQueuedAnimation: name,\n canAdvance: canAdvance,\n isQueueEnd: isQueueEnd\n });\n }\n }; // Make the queue animation current if it wasn\'t already\n\n\n if (layer.currentAnimation === null) {\n layer.resumeAnimation(animation.name, transitionTime, easingFn, undefined, undefined, undefined, onNext);\n }\n\n return animation.next(onNext, true);\n }\n /**\r\n * Pause the current animation on a layer.\r\n *\r\n * @param {string} name - Name of the layer to pause.\r\n *\r\n * @returns {boolean} Whether or not an animation was successfully paused.\r\n */\n\n }, {\n key: "pauseAnimation",\n value: function pauseAnimation(name) {\n var layer = this._layerMap[name];\n\n if (layer === undefined) {\n console.warn("Did not pause animation on layer ".concat(name, " for host ").concat(this._host.id, ". No layer exists with this name."));\n return false;\n }\n\n var paused = layer.pauseAnimation(); // Notify that an animation was paused\n\n if (paused) {\n var animationName = layer.currentAnimation;\n this.emit(this.constructor.EVENTS.pauseAnimation, {\n layerName: name,\n animationName: animationName\n });\n }\n\n return paused;\n }\n /**\r\n * Pause the currently playing animation and play a new animation from where it\r\n * last left off.\r\n *\r\n * @param {string} layerName - Name of the layer that contains the animation.\r\n * @param {string=} animationName - Name of the animation state to resume. Defaults\r\n * to the name of the current animation for the layer.\r\n * @param {number=} seconds - The number of seconds it should take to transition\r\n * to the new animation. Default is zero and will set immediately.\r\n * @param {Function=} easingFn - The easing function to use while transitioning\r\n * between animations. Default is Easing.Linear.InOut.\r\n *\r\n * @returns {Deferred} - Resolves once the animation reaches the end of its\r\n * timeline. Looping animations can only resolve if they are interrupted or\r\n * manually stopped.\r\n */\n\n }, {\n key: "resumeAnimation",\n value: function resumeAnimation(layerName, animationName, seconds, easingFn) {\n var _this9 = this;\n\n var layer = this._layerMap[layerName];\n\n if (layer === undefined) {\n var e = "Cannot resume animation ".concat(animationName, " on layer ").concat(layerName, " for host ").concat(this._host.id, ". No layer exists with this name.");\n return core_Deferred.reject(e);\n } // Notify that an animation was resumed\n\n\n this.emit(this.constructor.EVENTS.resumeAnimation, {\n layerName: layerName,\n animationName: animationName\n });\n return layer.resumeAnimation(animationName, seconds, easingFn, function () {\n // Notify that an animation has stopped\n _this9.emit(_this9.constructor.EVENTS.stopAnimation, {\n layerName: layerName,\n animationName: animationName\n });\n }, undefined, function () {\n // Notify that an animation has been interrupted\n _this9.emit(_this9.constructor.EVENTS.interruptAnimation, {\n layerName: layerName,\n animationName: animationName\n });\n }, function (_ref3) {\n var name = _ref3.name,\n canAdvance = _ref3.canAdvance,\n isQueueEnd = _ref3.isQueueEnd;\n\n if (layer.currentAnimation === animationName) {\n // Notify that a new animation has begun\n _this9.emit(_this9.constructor.EVENTS.playNextAnimation, {\n layerName: layerName,\n animationName: animationName,\n nextQueuedAnimation: name,\n canAdvance: canAdvance,\n isQueueEnd: isQueueEnd\n });\n }\n });\n }\n /**\r\n * Stop the current animation on a layer. Stop rewinds the animation to the\r\n * beginning and prevents it from progressing forward.\r\n *\r\n * @param {string} name - Name of the layer that contains the animation.\r\n *\r\n * @returns {boolean} Whether or not an animation was successfully stopped.\r\n */\n\n }, {\n key: "stopAnimation",\n value: function stopAnimation(name) {\n var layer = this._layerMap[name];\n\n if (layer === undefined) {\n console.warn("Did not stop animation on layer ".concat(name, " for host ").concat(this._host.id, ". No layer exists with this name."));\n return false;\n }\n\n return layer.stopAnimation();\n }\n /**\r\n * Pause current animation and weight interpolation animation on all layers.\r\n * @returns {boolean} - Whether or not there was an existing interpolation or\r\n * current animations to pause.\r\n */\n\n }, {\n key: "pause",\n value: function pause() {\n this._paused = true;\n var paused = false;\n\n this._layers.forEach(function (l) {\n if (l.pause()) {\n paused = true;\n }\n });\n\n return paused;\n }\n /**\r\n * Resume current animation and weight interpolation animation on all layers.\r\n * @returns {boolean} - Whether or not there was an existing interpolation or\r\n * current animations to resume.\r\n */\n\n }, {\n key: "resume",\n value: function resume() {\n this._paused = false;\n var resumed = false;\n\n this._layers.forEach(function (l) {\n if (l.resume()) {\n resumed = true;\n }\n });\n\n return resumed;\n }\n /**\r\n * Adds a namespace to the host with the name of the feature to contain properties\r\n * and methods from the feature that users of the host need access to.\r\n *\r\n * @see AnimationFeature\r\n */\n\n }, {\n key: "installApi",\n value: function installApi() {\n var _this10 = this;\n\n /**\r\n * @inner\r\n * @namespace AnimationFeature\r\n */\n var api = AnimationFeature_get(AnimationFeature_getPrototypeOf(AnimationFeature.prototype), "installApi", this).call(this);\n\n Object.defineProperties(api, {\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @see core/AnimationFeature#paused\r\n */\n paused: {\n get: function get() {\n return _this10.paused;\n }\n },\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @see core/AnimationFeature#layers\r\n */\n layers: {\n get: function get() {\n return _this10.layers;\n }\n }\n });\n Object.assign(api, {\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#addLayer\r\n */\n addLayer: this.addLayer.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#removeLayer\r\n */\n removeLayer: this.removeLayer.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#moveLayer\r\n */\n moveLayer: this.moveLayer.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#renameLayer\r\n */\n renameLayer: this.renameLayer.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#getLayerWeight\r\n */\n getLayerWeight: this.getLayerWeight.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#setLayerWeight\r\n */\n setLayerWeight: this.setLayerWeight.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#pauseLayerWeight\r\n */\n pauseLayerWeight: this.pauseLayerWeight.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#resumeLayerWeight\r\n */\n resumeLayerWeight: this.resumeLayerWeight.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#pauseLayer\r\n */\n pauseLayer: this.pauseLayer.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#resumeLayer\r\n */\n resumeLayer: this.resumeLayer.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#getTransitioning\r\n */\n getTransitioning: this.getTransitioning.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#getAnimations\r\n */\n getAnimations: this.getAnimations.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#getCurrentAnimation\r\n */\n getCurrentAnimation: this.getCurrentAnimation.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#getPaused\r\n */\n getPaused: this.getPaused.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#getAnimationType\r\n */\n getAnimationType: this.getAnimationType.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#addAnimation\r\n */\n addAnimation: this.addAnimation.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#removeAnimation\r\n */\n removeAnimation: this.removeAnimation.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#renameAnimation\r\n */\n renameAnimation: this.renameAnimation.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#getAnimationBlendNames\r\n */\n getAnimationBlendNames: this.getAnimationBlendNames.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#getAnimationBlendWeight\r\n */\n getAnimationBlendWeight: this.getAnimationBlendWeight.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#setAnimationBlendWeight\r\n */\n setAnimationBlendWeight: this.setAnimationBlendWeight.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#playAnimation\r\n */\n playAnimation: this.playAnimation.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#playNextAnimation\r\n */\n playNextAnimation: this.playNextAnimation.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#pauseAnimation\r\n */\n pauseAnimation: this.pauseAnimation.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#resumeAnimation\r\n */\n resumeAnimation: this.resumeAnimation.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#stopAnimation\r\n */\n stopAnimation: this.stopAnimation.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#pause\r\n */\n pause: this.pause.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#resume\r\n */\n resume: this.resume.bind(this)\n });\n }\n /**\r\n * Update each animation layer.\r\n *\r\n * @param {number} deltaTime - Time since the last update.\r\n */\n\n }, {\n key: "update",\n value: function update(deltaTime) {\n if (!this._layers.length) {\n return;\n }\n\n if (this._paused) {\n deltaTime = 0;\n } // Re-evaluate internal weights for layers\n\n\n this._updateInternalWeights(); // Update layers\n\n\n this._layers.forEach(function (layer) {\n layer.update(deltaTime);\n });\n\n AnimationFeature_get(AnimationFeature_getPrototypeOf(AnimationFeature.prototype), "update", this).call(this, deltaTime);\n }\n }, {\n key: "discard",\n value: function discard() {\n this._layers.forEach(function (layer) {\n layer.discard();\n });\n\n delete this._layers;\n delete this._layerMap;\n\n AnimationFeature_get(AnimationFeature_getPrototypeOf(AnimationFeature.prototype), "discard", this).call(this);\n }\n }]);\n\n return AnimationFeature;\n}(core_AbstractHostFeature);\n\nObject.defineProperty(AnimationFeature_AnimationFeature, \'EVENTS\', {\n value: AnimationFeature_objectSpread(AnimationFeature_objectSpread({}, Object.getPrototypeOf(core_AbstractHostFeature).EVENTS), {}, {\n addLayer: \'onAddLayerEvent\',\n removeLayer: \'onRemoveLayerEvent\',\n renameLayer: \'onRenameLayerEvent\',\n addAnimation: \'onAddAnimationEvent\',\n removeAnimation: \'onRemovedAnimationEvent\',\n renameAnimation: \'onRenameAnimationEvent\',\n playAnimation: \'onPlayEvent\',\n playNextAnimation: \'onNextEvent\',\n pauseAnimation: \'onPauseEvent\',\n resumeAnimation: \'onResumeEvent\',\n interruptAnimation: \'onInterruptEvent\',\n stopAnimation: \'onStopEvent\'\n })\n});\n/* harmony default export */ var animpack_AnimationFeature = (AnimationFeature_AnimationFeature);\n// CONCATENATED MODULE: ./src/core/PointOfInterestFeature.js\nfunction PointOfInterestFeature_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { PointOfInterestFeature_typeof = function _typeof(obj) { return typeof obj; }; } else { PointOfInterestFeature_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return PointOfInterestFeature_typeof(obj); }\n\nfunction PointOfInterestFeature_slicedToArray(arr, i) { return PointOfInterestFeature_arrayWithHoles(arr) || PointOfInterestFeature_iterableToArrayLimit(arr, i) || PointOfInterestFeature_unsupportedIterableToArray(arr, i) || PointOfInterestFeature_nonIterableRest(); }\n\nfunction PointOfInterestFeature_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."); }\n\nfunction PointOfInterestFeature_iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction PointOfInterestFeature_arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction PointOfInterestFeature_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction PointOfInterestFeature_toConsumableArray(arr) { return PointOfInterestFeature_arrayWithoutHoles(arr) || PointOfInterestFeature_iterableToArray(arr) || PointOfInterestFeature_unsupportedIterableToArray(arr) || PointOfInterestFeature_nonIterableSpread(); }\n\nfunction PointOfInterestFeature_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."); }\n\nfunction PointOfInterestFeature_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return PointOfInterestFeature_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return PointOfInterestFeature_arrayLikeToArray(o, minLen); }\n\nfunction PointOfInterestFeature_iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction PointOfInterestFeature_arrayWithoutHoles(arr) { if (Array.isArray(arr)) return PointOfInterestFeature_arrayLikeToArray(arr); }\n\nfunction PointOfInterestFeature_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction PointOfInterestFeature_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction PointOfInterestFeature_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction PointOfInterestFeature_createClass(Constructor, protoProps, staticProps) { if (protoProps) PointOfInterestFeature_defineProperties(Constructor.prototype, protoProps); if (staticProps) PointOfInterestFeature_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction PointOfInterestFeature_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { PointOfInterestFeature_get = Reflect.get; } else { PointOfInterestFeature_get = function _get(target, property, receiver) { var base = PointOfInterestFeature_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return PointOfInterestFeature_get(target, property, receiver || target); }\n\nfunction PointOfInterestFeature_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = PointOfInterestFeature_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction PointOfInterestFeature_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) PointOfInterestFeature_setPrototypeOf(subClass, superClass); }\n\nfunction PointOfInterestFeature_setPrototypeOf(o, p) { PointOfInterestFeature_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return PointOfInterestFeature_setPrototypeOf(o, p); }\n\nfunction PointOfInterestFeature_createSuper(Derived) { var hasNativeReflectConstruct = PointOfInterestFeature_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = PointOfInterestFeature_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = PointOfInterestFeature_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return PointOfInterestFeature_possibleConstructorReturn(this, result); }; }\n\nfunction PointOfInterestFeature_possibleConstructorReturn(self, call) { if (call && (PointOfInterestFeature_typeof(call) === "object" || typeof call === "function")) { return call; } return PointOfInterestFeature_assertThisInitialized(self); }\n\nfunction PointOfInterestFeature_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction PointOfInterestFeature_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction PointOfInterestFeature_getPrototypeOf(o) { PointOfInterestFeature_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return PointOfInterestFeature_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/* eslint-disable no-underscore-dangle */\n\n/* eslint-disable no-unused-vars */\n\n\n\n\n\n\n\n/**\n * Enum for axis directions.\n *\n * @readonly\n * @enum {Class}\n */\n\nvar AxisMap = {\n PositiveX: [1, 0, 0],\n NegativeX: [-1, 0, 0],\n PositiveY: [0, 1, 0],\n NegativeY: [0, -1, 0],\n PositiveZ: [0, 0, 1],\n NegativeZ: [0, 0, -1]\n};\nvar FaceTargetTypes = {\n EyeCenter: 0,\n EyeLeft: 1,\n EyeRight: 2,\n Mouth: 3\n}; // Average distance between pupils is .064m, golden ratio says that the distance\n// from center of the pupils to the center of the mouth should be about the same.\n\nvar FaceVectors = [[0, 0, 0], [-.032, 0, 0], [.032, 0, 0], [0, -.064, 0]]; // Time ranges to use when choosing a new random wait time between saccades\n\nvar MicroSaccadeWaitRanges = {\n "default": [0.8, 1.75],\n postMacro: [0.6, 1.3125]\n};\nvar MacroSaccadeWaitRanges = {\n "default": [5.0, 8.0],\n mouthTarget: [0.2, 0.75],\n // Look away from a mouth target the fastest\n eyeTarget: [1.5, 4.0]\n}; // Minimum angle in degrees the eye direction must change to trigger a blink animation\n\nvar BlinkThreshold = 35; // Maximum number of milliseconds to use for calculating look speed\n\nvar MaxDelta = 100 / 3;\n/**\n * PointOfInterest controls the gaze direction of the host. Given one or more\n * animations of type Blend2dState, it calculates the angles between the lookTracker\n * object (generally a joint in the host\'s skeleton) and the lookTarget (the object\n * the host should look at) and drives the managed Blend2dStates\' X and Y blend\n * values using the result. You can optionally add saccadic movement to any managed\n * animation to help make the host\'s eyes appear alive when focused on the same\n * point for exteded periods of time. If blink animations are specified, a blink\n * will be played during large changes in gaze direction.\n *\n * @extends AbstractHostFeature\n * @alias core/PointOfInterestFeature\n * @implements SSMLSpeechmarkInterface\n * @implements ManagedAnimationLayerInterface\n */\n\nvar PointOfInterestFeature_PointOfInterestFeature = /*#__PURE__*/function (_AbstractHostFeature$) {\n PointOfInterestFeature_inherits(PointOfInterestFeature, _AbstractHostFeature$);\n\n var _super = PointOfInterestFeature_createSuper(PointOfInterestFeature);\n\n /**\n * @constructor\n *\n * @param {core/HostObject} host - Host that owns the feature.\n * @param {Object=} options - Options for the feature.\n * @param {Object=} target - 3D transformation node that the host should try to\n * look at.\n * @param {Object} options.lookTracker - 3D transformation node that represents\n * the direction the host is currently looking during animation.\n * @param {Object=} options.scene - Engine-specific scene object that contains\n * the host. This object must be defined if using \'setTargetByName\' or \'SetTargetById\'\n * methods.\n * @param {Object=} lookOptions - Options for the look animation layers.\n * @param {number} [lookOptions.blendTime=0.1] - Default amount of time it will\n * take to manipulate the weights of the look layers.\n * @param {number} [lookOptions.easingFn=Quadratic.InOut] - Default easing function\n * to use when manipulating look layer weights.\n * @param {Array.} [lookOptions.layers=[]] - An array of layer options\n * objects to register as look layers.\n * @param {Object=} blinkOptions - Options for the blink animation layers.\n * @param {number} [blinkOptions.blendTime=0.075] - Default amount of time it\n * will take to manipulate the weights of the blink layers.\n * @param {number} [blinkOptions.easingFn=Quadratic.InOut] - Default easing function\n * to use when manipulating blink layer weights.\n * @param {Array.} [blinkOptions.layers=[]] - An array of layer options\n * objects to register as blink layers.\n */\n function PointOfInterestFeature(host) {\n var _this;\n\n var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n target = _ref.target,\n lookTracker = _ref.lookTracker,\n scene = _ref.scene;\n\n var _ref2 = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},\n _ref2$blendTime = _ref2.blendTime,\n lookBlendTime = _ref2$blendTime === void 0 ? 0.1 : _ref2$blendTime,\n _ref2$easingFn = _ref2.easingFn,\n lookEasingFn = _ref2$easingFn === void 0 ? Quadratic.InOut : _ref2$easingFn,\n _ref2$layers = _ref2.layers,\n lookLayers = _ref2$layers === void 0 ? [] : _ref2$layers;\n\n var _ref3 = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {},\n _ref3$blendTime = _ref3.blendTime,\n blinkBlendTime = _ref3$blendTime === void 0 ? 0.075 : _ref3$blendTime,\n _ref3$easingFn = _ref3.easingFn,\n blinkEasingFn = _ref3$easingFn === void 0 ? Quadratic.InOut : _ref3$easingFn,\n _ref3$layers = _ref3.layers,\n blinkLayers = _ref3$layers === void 0 ? [] : _ref3$layers;\n\n PointOfInterestFeature_classCallCheck(this, PointOfInterestFeature);\n\n _this = _super.call(this, host);\n\n if (!_this.constructor._validateTransformObject(lookTracker)) {\n throw new Error("Cannot initialize PointOfInterestFeature on host ".concat(_this._host.id, ". LookTracker must be defined as a valid transformation object."));\n }\n\n _this._lookTracker = lookTracker;\n _this._scene = scene;\n _this._target = target || null;\n _this._prevTargetPos = [0, 0, 0];\n _this._isTargetMoving = false;\n _this._lookLayers = _this._lookLayers || {};\n _this._trackingConfigs = _this._trackingConfigs || [];\n _this._blinkLayers = _this._blinkLayers || {}; // Register the look layers\n\n lookLayers.forEach(function (_ref4) {\n var name = _ref4.name,\n animation = _ref4.animation,\n maxSpeed = _ref4.maxSpeed,\n reference = _ref4.reference,\n forwardAxis = _ref4.forwardAxis,\n hasSaccade = _ref4.hasSaccade,\n blendTime = _ref4.blendTime,\n easingFn = _ref4.easingFn;\n\n _this.registerLookLayer(name, {\n animation: animation,\n maxSpeed: maxSpeed,\n reference: reference,\n forwardAxis: forwardAxis,\n hasSaccade: hasSaccade,\n blendTime: blendTime !== undefined ? blendTime : lookBlendTime,\n easingFn: easingFn !== undefined ? easingFn : lookEasingFn\n });\n }); // Register the blink layers\n\n blinkLayers.forEach(function (_ref5) {\n var name = _ref5.name,\n animation = _ref5.animation,\n blendTime = _ref5.blendTime,\n easingFn = _ref5.easingFn;\n\n _this.registerBlinkLayer(name, {\n animation: animation,\n blendTime: blendTime !== undefined ? blendTime : blinkBlendTime,\n easingFn: easingFn !== undefined ? easingFn : blinkEasingFn\n });\n });\n return _this;\n }\n /**\n * Gets and sets the target object the host should look at.\n *\n * @type {Object|null}\n */\n\n\n PointOfInterestFeature_createClass(PointOfInterestFeature, [{\n key: "target",\n get: function get() {\n return this._target;\n },\n set: function set(target) {\n this._target = target || null;\n }\n /**\n * Return a vector representing the global position of an object. Should be\n * overloaded for each rendering engine implementation.\n *\n * @private\n *\n * @param {any} _obj - Engine-specific 3D transform object.\n *\n * @returns {Array.} - An array consisting of three numbers representing\n * x, y and z coordinates.\n */\n\n }, {\n key: "_onLayerAdded",\n value: function _onLayerAdded(_ref6) {\n var name = _ref6.name;\n this._lookLayers = this._lookLayers || {};\n this._blinkLayers = this._blinkLayers || {};\n\n PointOfInterestFeature_get(PointOfInterestFeature_getPrototypeOf(PointOfInterestFeature.prototype), "_onLayerAdded", this).call(this, {\n name: name\n }); // Validate the look animation\n\n\n if (this._lookLayers[name] !== undefined) {\n this._registerLookAnimation(name, this._lookLayers[name]);\n }\n }\n }, {\n key: "_onAnimationAdded",\n value: function _onAnimationAdded(_ref7) {\n var layerName = _ref7.layerName,\n animationName = _ref7.animationName;\n this._lookLayers = this._lookLayers || {};\n this._blinkLayers = this._blinkLayers || {};\n\n PointOfInterestFeature_get(PointOfInterestFeature_getPrototypeOf(PointOfInterestFeature.prototype), "_onAnimationAdded", this).call(this, {\n layerName: layerName\n }); // Validate the look animation\n\n\n if (this._lookLayers[layerName] === animationName) {\n this._registerLookAnimation(layerName, animationName);\n }\n }\n /**\n * Ensure that registered look animations are Blend2dStates.\n *\n * @private\n *\n * @param {string} layerName - Name of the layer that contains the look animation.\n * @param {string} animationName - Name of the animation.\n */\n\n }, {\n key: "_registerLookAnimation",\n value: function _registerLookAnimation(layerName, animationName) {\n if (this._managedLayers[layerName].animations[animationName].isActive) {\n if (AnimationTypes[this._host.AnimationFeature.getAnimationType(layerName, animationName)] !== AnimationTypes.blend2d) {\n // Warn and deactivate if the registered state is not blend2d\n console.warn("Cannot register Point of Interest look animation ".concat(animationName, " on layer ").concat(layerName, " for host ").concat(this._host.id, ". Look animations must be of type \'blend2d\'."));\n this._managedLayers[layerName].animations[animationName].isActive = false;\n }\n }\n }\n /**\n * Check if the given object is not of an engine-specific type. Should\n * be overloaded for each rendering engine implementation.\n *\n * @private\n *\n * @param {any} obj - Object to validate.\n *\n * @returns {boolean}\n */\n\n }, {\n key: "_addTrackingConfig",\n value:\n /**\n * Check if the given configuration object has already been stored as a tracking\n * config. If it has, return the stored configuration. Otherwise, store and\n * return it.\n *\n * @private\n *\n * @param {Object} config - Object containing tracker, reference and forwardAxis\n * properties.\n *\n * @returns {Object}\n */\n function _addTrackingConfig(config) {\n var trackingConfig = this._trackingConfigs.find(function (c) {\n return c.reference === config.reference && c.forwardAxis === config.forwardAxis;\n });\n\n if (trackingConfig) {\n return trackingConfig;\n } else {\n config.angles = {\n h: 0,\n v: 0\n };\n config.prevAngles = {\n h: 0,\n v: 0\n };\n\n this._trackingConfigs.push(config);\n\n return config;\n }\n }\n /**\n * Return the distance between the look tracker and the look target.\n *\n * @private\n *\n * @returns {number}\n */\n\n }, {\n key: "_getTargetDistance",\n value: function _getTargetDistance() {\n // Find the vector between the global positions of tracker and target\n var sourcePosition = this.constructor._getWorldPosition(this._lookTracker);\n\n var targetPosition = this.constructor._getWorldPosition(this._target);\n\n var lookVector = [targetPosition[0] - sourcePosition[0], targetPosition[1] - sourcePosition[1], targetPosition[2] - sourcePosition[2]];\n return core_MathUtils.getVectorMagnitude(lookVector);\n }\n /**\n * Reset all stored tracking angles to 0.\n *\n * @private\n */\n\n }, {\n key: "_resetLookAngles",\n value: function _resetLookAngles() {\n this._trackingConfigs.forEach(function (_ref8) {\n var angles = _ref8.angles;\n angles.h = 0;\n angles.v = 0;\n });\n }\n /**\n * Store the difference in horizontal and vertical rotation for the tracker\'s\n * reference rotation and the direction of the target from the tracker.\n *\n * @private\n */\n\n }, {\n key: "_setLookAngles",\n value: function _setLookAngles() {\n var _this2 = this;\n\n // Get the current positions of the tracker and target objects\n var targetPos = this.constructor._getWorldPosition(this._target);\n\n var trackerPos = this.constructor._getWorldPosition(this._lookTracker); // Check if the target has moved\n\n\n this._isTargetMoving = core_MathUtils.getVectorMagnitude([targetPos[0] - this._prevTargetPos[0], targetPos[1] - this._prevTargetPos[1], targetPos[2] - this._prevTargetPos[2]]) > 0;\n Object.assign(this._prevTargetPos, targetPos); // Calculate the horizontal and vertical angles to rotate to the target\n\n var targetSpherical = core_MathUtils.cartesianToSpherical(targetPos[0] - trackerPos[0], targetPos[1] - trackerPos[1], targetPos[2] - trackerPos[2]);\n\n var targetAngles = this.constructor._sphericalToBlendValue(targetSpherical[1], targetSpherical[2]); // Calculate angles relative to the reference objects\n\n\n this._trackingConfigs.forEach(function (_ref9) {\n var reference = _ref9.reference,\n forwardAxis = _ref9.forwardAxis,\n angles = _ref9.angles;\n\n // Calculate the horizontal and vertical angles to rotate to the direction of the tracker\n var refDirection = _this2.constructor._getObjectDirection(reference, forwardAxis);\n\n var refSpherical = core_MathUtils.cartesianToSpherical.apply(core_MathUtils, PointOfInterestFeature_toConsumableArray(refDirection));\n\n var refAngles = _this2.constructor._sphericalToBlendValue(refSpherical[1], refSpherical[2]); // Store the difference\n\n\n angles.h = targetAngles.h - refAngles.h;\n angles.v = targetAngles.v - refAngles.v;\n });\n }\n /**\n * Return the horizontal and vertical angles it would require to simulate looking\n * at the given type of face target\n *\n * @private\n *\n * @param {number} targetType - Integer representing the FaceTargetType.\n *\n * @returns {Object}- An object with signature {r: number, h: number, v: number}\n * where \'r\' represents radius, h represents the horizontal/azimuthal angle and\n * v represents the vertical/polar angle.\n */\n\n }, {\n key: "_getFaceTargetAngles",\n value: function _getFaceTargetAngles(targetType) {\n // No offset when the target is the center of the eyes\n if (targetType === 0) {\n return {\n h: 0,\n v: 0\n };\n } // Build a vector to the face target type using the current distance to the target\n\n\n var distance = this._getTargetDistance(this._lookTracker);\n\n var faceVector = PointOfInterestFeature_toConsumableArray(FaceVectors[targetType]);\n\n faceVector[2] = distance;\n var spherical = core_MathUtils.cartesianToSpherical.apply(core_MathUtils, PointOfInterestFeature_toConsumableArray(faceVector)); // Make sure values are clamped within the range of motion of the human eye, in case the target is very close\n\n var blendValues = this.constructor._sphericalToBlendValue(spherical[1], spherical[2]);\n\n blendValues.h = core_MathUtils.clamp(blendValues.h, -35, 35);\n blendValues.v = core_MathUtils.clamp(blendValues.v, -25, 30);\n return blendValues;\n }\n /**\n * Updated the stored speed and duration variables for a layer based on the\n * change in horizontal and vertical angles of the tracker.\n *\n * @private\n *\n * @param {string} layerName - Name of the layer to store values on.\n * @param {number} h - Change in horizontal angle, in degrees.\n * @param {number} v - Change in vertical angle, in degrees.\n */\n\n }, {\n key: "_updateLayerSpeed",\n value: function _updateLayerSpeed(layerName, h, v) {\n var layer = this._managedLayers[layerName]; // From "Realistic Avatar and head Animation Using a Neurobiological Model of Visual Attention", Itti, Dhavale, Pighin\n\n layer.maxHSpeed = 473 * (1 - Math.exp(-h / 7.8));\n layer.maxVSpeed = 473 * (1 - Math.exp(-v / 7.8)); // From "Eyes Alive", Lee, Badler\n\n var D0 = 0.025;\n var d = 0.00235;\n layer.hDuration = D0 + d * h;\n layer.vDuration = D0 + d * v;\n }\n /**\n * Set the microSaccade object with new randomized values.\n *\n * @private\n *\n * @param {string} layerName - Name of the layer that owns the saccade motion.\n */\n\n }, {\n key: "_setMicroSaccade",\n value: function _setMicroSaccade(layerName) {\n var layer = this._managedLayers[layerName];\n var microSaccade = layer.microSaccade;\n\n if (this._target) {\n // Micro movements should be smaller when focused on a target\n microSaccade.h = core_Utils.getRandomFloat(.01, .15);\n microSaccade.v = core_Utils.getRandomFloat(.01, .15);\n } else {\n // Microsaccades. Encyclopedia of Neuroscience. (2009) Springer, Berlin, Heidelberg. https://doi.org/10.1007/978-3-540-29678-2_3492\n microSaccade.h = core_Utils.getRandomFloat(.01, .3);\n microSaccade.v = core_Utils.getRandomFloat(.01, .3);\n }\n\n this._updateLayerSpeed(layerName, microSaccade.h, microSaccade.v); // Restart the timer\n\n\n this._initializeMicroTimer.apply(this, [layerName].concat(PointOfInterestFeature_toConsumableArray(MicroSaccadeWaitRanges["default"])));\n }\n /**\n * Set the macroSaccade object with new randomized values.\n *\n * @private\n *\n * @param {string} layerName - Name of the layer that owns the saccade motion.\n */\n\n }, {\n key: "_setMacroSaccade",\n value: function _setMacroSaccade(layerName) {\n var layer = this._managedLayers[layerName];\n var macroSaccade = layer.macroSaccade;\n var macroSaccadeWaitRange; // Increase random value range when not focused on a target\n\n if (!this._target) {\n macroSaccadeWaitRange = MacroSaccadeWaitRanges["default"]; // Normal human horizontal eye rotation limit is about 35 degrees\n\n var hLimit = core_Utils.getRandomFloat(.143, .286);\n var hFactor = core_Utils.getRandomFloat(-hLimit, hLimit);\n macroSaccade.h = hFactor * 35; // Normal human vertical eye rotation limit is about 25 degrees upward and 30 degrees downward\n\n var vLimit = core_Utils.getRandomFloat(.093, .186);\n var vFactor = core_Utils.getRandomFloat(-vLimit, vLimit);\n macroSaccade.v = vFactor > 0 ? vFactor * 25 : vFactor * 30;\n } // Pick a new face target\n else {\n // Social triangle - saccade between eyes and mouth, weighted to look at eyes more often\n switch (layer.saccadeTarget) {\n case 1:\n macroSaccadeWaitRange = MacroSaccadeWaitRanges.eyeTarget;\n layer.saccadeTarget = Math.random() < 0.75 ? FaceTargetTypes.EyeRight : FaceTargetTypes.Mouth;\n break;\n\n case 2:\n macroSaccadeWaitRange = MacroSaccadeWaitRanges.eyeTarget;\n layer.saccadeTarget = Math.random() < 0.75 ? FaceTargetTypes.EyeLeft : FaceTargetTypes.Mouth;\n break;\n\n case 3:\n macroSaccadeWaitRange = MacroSaccadeWaitRanges.mouthTarget;\n layer.saccadeTarget = Math.random() < 0.5 ? FaceTargetTypes.EyeLeft : FaceTargetTypes.EyeRight;\n break;\n\n case 0:\n default:\n macroSaccadeWaitRange = MacroSaccadeWaitRanges.eyeTarget;\n layer.saccadeTarget = Math.random() < 0.5 ? FaceTargetTypes.EyeLeft : FaceTargetTypes.EyeRight;\n break;\n }\n\n var _this$_getFaceTargetA = this._getFaceTargetAngles(layer.saccadeTarget),\n h = _this$_getFaceTargetA.h,\n v = _this$_getFaceTargetA.v;\n\n macroSaccade.h = h;\n macroSaccade.v = v;\n }\n\n this._updateLayerSpeed(layerName, macroSaccade.h, macroSaccade.v); // Restart the timers\n\n\n this._initializeMicroTimer.apply(this, [layerName].concat(PointOfInterestFeature_toConsumableArray(MicroSaccadeWaitRanges.postMacro)));\n\n this._initializeMacroTimer.apply(this, [layerName].concat(PointOfInterestFeature_toConsumableArray(macroSaccadeWaitRange)));\n }\n /**\n * Start a new wait timer that will set a new micro saccade movement when it\n * resolves.\n *\n * @private\n *\n * @param {string} layerName - Name of the layer that owns the saccade motion.\n * @param {number} minWaitTime - Minimum number of seconds before a new saccade\n * will be triggered.\n * @param {number} maxWaitTime - Maximum number of seconds before a new saccade\n * will be triggered.\n */\n\n }, {\n key: "_initializeMicroTimer",\n value: function _initializeMicroTimer(layerName, minWaitTime, maxWaitTime) {\n var _this3 = this;\n\n var layer = this._managedLayers[layerName];\n var waitTime = core_Utils.getRandomFloat(minWaitTime, maxWaitTime);\n\n if (layer.microSaccadeTimer) {\n layer.microSaccadeTimer.cancel();\n }\n\n layer.microSaccadeTimer = core_Utils.wait(waitTime, {\n onFinish: function onFinish() {\n _this3._setMicroSaccade(layerName);\n }\n });\n }\n /**\n * Start a new wait timer that will set a new macro saccade movement when it\n * resolves.\n *\n * @private\n *\n * @param {string} layerName - Name of the layer that owns the saccade motion.\n * @param {number} minWaitTime - Minimum number of seconds before a new saccade\n * will be triggered.\n * @param {number} maxWaitTime - Maximum number of seconds before a new saccade\n * will be triggered.\n */\n\n }, {\n key: "_initializeMacroTimer",\n value: function _initializeMacroTimer(layerName, minWaitTime, maxWaitTime) {\n var _this4 = this;\n\n var layer = this._managedLayers[layerName];\n var waitTime = core_Utils.getRandomFloat(minWaitTime, maxWaitTime);\n\n if (layer.macroSaccadeTimer) {\n layer.macroSaccadeTimer.cancel();\n }\n\n layer.macroSaccadeTimer = core_Utils.wait(waitTime, {\n onFinish: function onFinish() {\n _this4._setMacroSaccade(layerName);\n }\n });\n }\n /**\n * Sets a new target to look at.\n *\n * @param {Object|null} target - The new target to look at.\n */\n\n }, {\n key: "setTarget",\n value: function setTarget(target) {\n this.target = target;\n }\n /**\n * Finds an object given its name and sets it as the new target to look at.\n * Should be overloaded for each rendering engine implementation.\n *\n * @param {string} target - Name to search for.\n */\n\n }, {\n key: "setTargetByName",\n value: function setTargetByName(name) {\n if (!name) {\n this._target = null;\n }\n\n if (!this._scene) {\n throw new Error("Cannot set PointOfInterestFeature target using name ".concat(name, " on host ").concat(this._host.id, ". Scene must be defined."));\n }\n }\n /**\n * Finds an object given its id and sets it as the new target to look at.\n * Should be overloaded for each rendering engine implementation.\n *\n * @param {string|number} target - Id to search for.\n */\n\n }, {\n key: "setTargetById",\n value: function setTargetById(id) {\n if (!id) {\n this._target = null;\n }\n\n if (!this._scene) {\n throw new Error("Cannot set PointOfInterestFeature target using id ".concat(id, " on host ").concat(this._host.id, ". Scene must be defined."));\n }\n }\n /**\n * Start keeping track of an animation layer that owns a blend2d animation with\n * blendWeights corresponding to horizontal and vertical look angles.\n *\n * @param {string} layerName - Name of the layer to keep track of.\n * @param {Object=} options - Options for the layer.\n * @param {string} [options.animation = \'look\'] - Name of the animation on the\n * layer whose blendWeights will be driven based on the angle between the lookTracker\n * and the lookTarget. This animation must be of type blend2d.\n * @param {number} [options.maxSpeed = 25] - The maximum speed at which the blend2d\n * blendWeights can be manipulated.\n * @param {string} [options.forwardAxis = \'PositiveZ\'] - Axis pointing from the\n * front of the lookReference object. Valid options are \'PositiveX\', \'NegativeX\',\n * \'PositiveY\', \'NegativeY\', \'PositiveZ\', \'NegativeZ\'.\n * @param {Object=} options.lookReference - 3D transformation node that the lookTracker\n * rotation limits should be calculated relative to. Defaults to the host owner.\n * @param {number} [options.hasSaccade = false] - Whether or not to include\n * saccadic motion onto the blendWeight animation. This should only be set to\n * true for blend2d animations representing eye animation.\n * @param {number=} [options.blendTime=[PointOfInterestFeature.DEFAULT_LAYER_OPTIONS.blendTime]{@link PointOfInterestFeature#DEFAULT_LAYER_OPTIONS#blendTime}] -\n * Default amount of time to use when manipulating layer weight.\n * @param {Function=} options.easingFn - Default easing function to use when\n * manipulating layer weight.\n */\n\n }, {\n key: "registerLookLayer",\n value: function registerLookLayer(layerName) {\n var _ref10 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n _ref10$animation = _ref10.animation,\n animation = _ref10$animation === void 0 ? \'look\' : _ref10$animation,\n _ref10$maxSpeed = _ref10.maxSpeed,\n maxSpeed = _ref10$maxSpeed === void 0 ? 25 : _ref10$maxSpeed,\n reference = _ref10.reference,\n _ref10$forwardAxis = _ref10.forwardAxis,\n forwardAxis = _ref10$forwardAxis === void 0 ? \'PositiveZ\' : _ref10$forwardAxis,\n _ref10$hasSaccade = _ref10.hasSaccade,\n hasSaccade = _ref10$hasSaccade === void 0 ? false : _ref10$hasSaccade,\n _ref10$blendTime = _ref10.blendTime,\n blendTime = _ref10$blendTime === void 0 ? PointOfInterestFeature.DEFAULT_LAYER_OPTIONS.blendTime : _ref10$blendTime,\n easingFn = _ref10.easingFn;\n\n // Validate reference object\n reference = reference || this._host.owner;\n\n if (!this.constructor._validateTransformObject(reference)) {\n throw new Error("Cannot initialize register look layer ".concat(layerName, " for PointOfInterestFeature on host ").concat(this._host.id, ". Reference must be defined as a valid transformation object."));\n } // Find vector associated with axis string\n\n\n forwardAxis = AxisMap[forwardAxis] !== undefined ? AxisMap[forwardAxis] : AxisMap.PositiveZ; // Store tracking configuration\n\n var trackingConfig = this._addTrackingConfig({\n reference: reference,\n forwardAxis: forwardAxis\n }); // Register the layer and animation\n\n\n this.registerLayer(layerName, {\n trackingConfig: trackingConfig,\n maxSpeed: maxSpeed,\n maxHSpeed: undefined,\n maxVSpeed: undefined,\n hDuration: undefined,\n vDuration: undefined,\n hVelocity: [0, 0],\n vVelocity: [0, 0],\n hasSaccade: hasSaccade,\n blendTime: blendTime,\n easingFn: easingFn,\n microSaccade: {\n h: 0,\n v: 0\n },\n macroSaccade: {\n h: 0,\n v: 0\n },\n saccadeTarget: FaceTargetTypes.EyeCenter,\n animations: PointOfInterestFeature_defineProperty({}, animation, {})\n });\n this._lookLayers[layerName] = animation; // Validate the look animation\n\n this._registerLookAnimation(layerName, animation); // Initialize saccade timers\n\n\n if (hasSaccade) {\n var macroSaccadeWaitRange = this._target ? MacroSaccadeWaitRanges.eyeTarget : MacroSaccadeWaitRanges["default"];\n\n this._initializeMicroTimer.apply(this, [layerName].concat(PointOfInterestFeature_toConsumableArray(MicroSaccadeWaitRanges["default"])));\n\n this._initializeMacroTimer.apply(this, [layerName].concat(PointOfInterestFeature_toConsumableArray(macroSaccadeWaitRange)));\n }\n }\n /**\n * Start keeping track of an animation layer that owns a blink animation. Blink\n * animations can be of any type, but if it is of type randomAnimation then a\n * it will be randomized each time a blink is called.\n *\n * @param {string} layerName - Name of the layer to keep track of.\n * @param {Object=} options - Options for the layer.\n * @param {string} [options.animation = \'blink\'] - Name of the blink animation\n * on the layer.\n * @param {number} [options.blendTime=[PointOfInterestFeature.DEFAULT_LAYER_OPTIONS.blendTime]{@link PointOfInterestFeature#DEFAULT_LAYER_OPTIONS#blendTime}] -\n * Default amount of time to use when manipulating the layer\'s weight.\n * @param {Function=} options.easingFn - Default easing function to use when\n * manipulating the layer\'s weight.\n */\n\n }, {\n key: "registerBlinkLayer",\n value: function registerBlinkLayer(layerName) {\n var _ref11 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n _ref11$animation = _ref11.animation,\n animation = _ref11$animation === void 0 ? \'blink\' : _ref11$animation,\n _ref11$blendTime = _ref11.blendTime,\n blendTime = _ref11$blendTime === void 0 ? PointOfInterestFeature.DEFAULT_LAYER_OPTIONS.blendTime : _ref11$blendTime,\n easingFn = _ref11.easingFn;\n\n // Register the layer and animation\n this.registerLayer(layerName, {\n blendTime: blendTime,\n easingFn: easingFn,\n animations: PointOfInterestFeature_defineProperty({}, animation, {})\n });\n this._blinkLayers[layerName] = animation;\n }\n }, {\n key: "update",\n value: function update(deltaTime) {\n var _this5 = this;\n\n PointOfInterestFeature_get(PointOfInterestFeature_getPrototypeOf(PointOfInterestFeature.prototype), "update", this).call(this, deltaTime); // Update the look angles\n\n\n if (this._target) {\n this._setLookAngles();\n } else {\n this._resetLookAngles();\n }\n\n var deltaSeconds = Math.min(deltaTime, MaxDelta) / 1000;\n var triggerBlink = false; // Set look blend values\n\n Object.entries(this._lookLayers).forEach(function (_ref12) {\n var _ref13 = PointOfInterestFeature_slicedToArray(_ref12, 2),\n layerName = _ref13[0],\n animName = _ref13[1];\n\n var options = _this5._managedLayers[layerName]; // Increment the saccade timers\n\n if (options.isActive && options.hasSaccade) {\n options.microSaccadeTimer.execute(deltaTime);\n options.macroSaccadeTimer.execute(deltaTime);\n } // Set the blend values\n\n\n if (options.animations[animName].isActive) {\n var currentH = _this5._host.AnimationFeature.getAnimationBlendWeight(layerName, animName, \'X\');\n\n var currentV = _this5._host.AnimationFeature.getAnimationBlendWeight(layerName, animName, \'Y\');\n\n var targetH = options.trackingConfig.angles.h;\n var targetV = options.trackingConfig.angles.v; // Check if the look angle has changed enough to trigger a blink\n\n if (_this5._isTargetMoving && !triggerBlink) {\n var prevTargetH = options.trackingConfig.prevAngles.h;\n var prevTargetV = options.trackingConfig.prevAngles.v;\n var changeAmount = core_MathUtils.toDegrees(core_MathUtils.getAngleBetween([prevTargetH, prevTargetV], [targetH, targetV]));\n\n if (changeAmount >= BlinkThreshold) {\n triggerBlink = true;\n }\n }\n\n options.trackingConfig.prevAngles.h = targetH;\n options.trackingConfig.prevAngles.v = targetV; // Add in the saccade movement\n\n if (options.hasSaccade) {\n core_MathUtils.dampValue(0, options.macroSaccade.h + options.macroSaccade.h, options.hVelocity, options.hDuration, options.maxHSpeed);\n targetH += options.hVelocity[0];\n core_MathUtils.dampValue(0, options.macroSaccade.v + options.macroSaccade.v, options.vVelocity, options.vDuration, options.maxVSpeed);\n targetV += options.vVelocity[0];\n } // Clamp to max speed\n\n\n var factor = core_MathUtils.clamp(deltaSeconds * options.maxSpeed, 0, 1);\n targetH = core_MathUtils.lerp(currentH, targetH, factor);\n targetV = core_MathUtils.lerp(currentV, targetV, factor); // Update the blend values\n\n _this5._host.AnimationFeature.setAnimationBlendWeight(layerName, animName, \'X\', targetH);\n\n _this5._host.AnimationFeature.setAnimationBlendWeight(layerName, animName, \'Y\', targetV);\n }\n });\n\n if (!triggerBlink || !this._isTargetMoving) {\n return;\n } // Execute blink\n\n\n Object.entries(this._blinkLayers).forEach(function (_ref14) {\n var _ref15 = PointOfInterestFeature_slicedToArray(_ref14, 2),\n layerName = _ref15[0],\n animName = _ref15[1];\n\n var animation = _this5._managedLayers[layerName].animations[animName];\n\n if (animation.isActive) {\n _this5._host.AnimationFeature.playAnimation(layerName, animName);\n }\n });\n }\n }, {\n key: "installApi",\n value: function installApi() {\n var _this6 = this;\n\n /**\n * @inner\n * @namespace PointOfInterestFeature\n */\n var api = PointOfInterestFeature_get(PointOfInterestFeature_getPrototypeOf(PointOfInterestFeature.prototype), "installApi", this).call(this);\n\n Object.defineProperties(api, {\n /**\n * @memberof PointOfInterestFeature\n * @instance\n * @see core/PointOfInterestFeature#target\n */\n target: {\n get: function get() {\n return _this6.target;\n },\n set: function set(target) {\n _this6.target = target;\n }\n }\n });\n Object.assign(api, {\n /**\n * @memberof PointOfInterestFeature\n * @instance\n * @method\n * @see core/PointOfInterestFeature#registerLookLayer\n */\n registerLookLayer: this.registerLookLayer.bind(this),\n\n /**\n * @memberof PointOfInterestFeature\n * @instance\n * @method\n * @see core/PointOfInterestFeature#registerBlinkLayer\n */\n registerBlinkLayer: this.registerBlinkLayer.bind(this),\n\n /**\n * @memberof PointOfInterestFeature\n * @instance\n * @method\n * @see core/PointOfInterestFeature#setTarget\n */\n setTarget: this.setTarget.bind(this),\n\n /**\n * @memberof PointOfInterestFeature\n * @instance\n * @method\n * @see core/PointOfInterestFeature#setTargetByName\n */\n setTargetByName: this.setTargetByName.bind(this),\n\n /**\n * @memberof PointOfInterestFeature\n * @instance\n * @method\n * @see core/PointOfInterestFeature#setTargetById\n */\n setTargetById: this.setTargetById.bind(this)\n });\n return api;\n }\n }], [{\n key: "_getWorldPosition",\n value: function _getWorldPosition(obj) {\n return [0, 0, 0];\n }\n /**\n * Return a matrix representing the global transformation matrix of an object.\n * Should be overloaded for each rendering engine implementation.\n *\n * @private\n *\n * @param {any} obj - Engine-specific 3D transform object.\n *\n * @returns {Array.} - An array consisting of 16 numbers representing\n * the 3d transformation.\n */\n\n }, {\n key: "_getWorldMatrix",\n value: function _getWorldMatrix(obj) {\n return [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1];\n }\n /**\n * Rotate the given local direction vector by the object\'s world rotation matrix.\n *\n * @private\n *\n * @param {any} obj - Engine-specific 3D transform object.\n * @param {Array.} forwardVector - Unit vector representing the local\n * forward direction of the object.\n *\n * @returns {Array.}\n */\n\n }, {\n key: "_getObjectDirection",\n value: function _getObjectDirection(obj) {\n var forwardVector = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : AxisMap.PositiveZ;\n var rotation = core_MathUtils.getRotationMatrix(this._getWorldMatrix(obj));\n return core_MathUtils.rotateVector(forwardVector, rotation);\n }\n /**\n * Calculate horizontal and vertical look angles in degrees given spherical theta\n * and phi angles in radians.\n *\n * @param {number} theta - Vertical/polar angle in radians where 0 points directly\n * along positive Y axis.\n * @param {number} phi - Horizontal/azimuthal angle in radians.\n *\n * @returns {Object} - An object with the signature {h: number, v: number} where\n * h represents horizontal rotation in degrees and v represents vertical rotation\n * in degrees.\n */\n\n }, {\n key: "_sphericalToBlendValue",\n value: function _sphericalToBlendValue(theta, phi) {\n var h = core_MathUtils.toDegrees(phi); // Offset the vertical angle so 0 is pointing forward instead of up\n\n var v = core_MathUtils.toDegrees(theta) - 90; // Convert vertical angle to -180, 180 range\n\n return {\n h: h,\n v: v\n };\n }\n }, {\n key: "_validateTransformObject",\n value: function _validateTransformObject(obj) {\n return obj instanceof Object;\n }\n }]);\n\n return PointOfInterestFeature;\n}(core_AbstractHostFeature.mix(awspack_SSMLSpeechmarkInterface.Mixin, animpack_ManagedAnimationLayerInterface.Mixin));\n\n/* harmony default export */ var core_PointOfInterestFeature = (PointOfInterestFeature_PointOfInterestFeature);\n\n// CONCATENATED MODULE: ./src/Babylon.js/PointOfInterestFeature.js\nfunction Babylon_js_PointOfInterestFeature_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { Babylon_js_PointOfInterestFeature_typeof = function _typeof(obj) { return typeof obj; }; } else { Babylon_js_PointOfInterestFeature_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return Babylon_js_PointOfInterestFeature_typeof(obj); }\n\nfunction Babylon_js_PointOfInterestFeature_toConsumableArray(arr) { return Babylon_js_PointOfInterestFeature_arrayWithoutHoles(arr) || Babylon_js_PointOfInterestFeature_iterableToArray(arr) || Babylon_js_PointOfInterestFeature_unsupportedIterableToArray(arr) || Babylon_js_PointOfInterestFeature_nonIterableSpread(); }\n\nfunction Babylon_js_PointOfInterestFeature_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."); }\n\nfunction Babylon_js_PointOfInterestFeature_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return Babylon_js_PointOfInterestFeature_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return Babylon_js_PointOfInterestFeature_arrayLikeToArray(o, minLen); }\n\nfunction Babylon_js_PointOfInterestFeature_iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction Babylon_js_PointOfInterestFeature_arrayWithoutHoles(arr) { if (Array.isArray(arr)) return Babylon_js_PointOfInterestFeature_arrayLikeToArray(arr); }\n\nfunction Babylon_js_PointOfInterestFeature_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction Babylon_js_PointOfInterestFeature_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction Babylon_js_PointOfInterestFeature_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction Babylon_js_PointOfInterestFeature_createClass(Constructor, protoProps, staticProps) { if (protoProps) Babylon_js_PointOfInterestFeature_defineProperties(Constructor.prototype, protoProps); if (staticProps) Babylon_js_PointOfInterestFeature_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction Babylon_js_PointOfInterestFeature_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { Babylon_js_PointOfInterestFeature_get = Reflect.get; } else { Babylon_js_PointOfInterestFeature_get = function _get(target, property, receiver) { var base = Babylon_js_PointOfInterestFeature_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return Babylon_js_PointOfInterestFeature_get(target, property, receiver || target); }\n\nfunction Babylon_js_PointOfInterestFeature_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = Babylon_js_PointOfInterestFeature_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction Babylon_js_PointOfInterestFeature_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) Babylon_js_PointOfInterestFeature_setPrototypeOf(subClass, superClass); }\n\nfunction Babylon_js_PointOfInterestFeature_setPrototypeOf(o, p) { Babylon_js_PointOfInterestFeature_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return Babylon_js_PointOfInterestFeature_setPrototypeOf(o, p); }\n\nfunction Babylon_js_PointOfInterestFeature_createSuper(Derived) { var hasNativeReflectConstruct = Babylon_js_PointOfInterestFeature_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = Babylon_js_PointOfInterestFeature_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = Babylon_js_PointOfInterestFeature_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return Babylon_js_PointOfInterestFeature_possibleConstructorReturn(this, result); }; }\n\nfunction Babylon_js_PointOfInterestFeature_possibleConstructorReturn(self, call) { if (call && (Babylon_js_PointOfInterestFeature_typeof(call) === "object" || typeof call === "function")) { return call; } return Babylon_js_PointOfInterestFeature_assertThisInitialized(self); }\n\nfunction Babylon_js_PointOfInterestFeature_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction Babylon_js_PointOfInterestFeature_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction Babylon_js_PointOfInterestFeature_getPrototypeOf(o) { Babylon_js_PointOfInterestFeature_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return Babylon_js_PointOfInterestFeature_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/**\n * @extends core/PointOfInterestFeature\n * @alias Babylon.js/PointOfInterestFeature\n */\n\nvar Babylon_js_PointOfInterestFeature_PointOfInterestFeature = /*#__PURE__*/function (_CorePointOfInterestF) {\n Babylon_js_PointOfInterestFeature_inherits(PointOfInterestFeature, _CorePointOfInterestF);\n\n var _super = Babylon_js_PointOfInterestFeature_createSuper(PointOfInterestFeature);\n\n function PointOfInterestFeature() {\n Babylon_js_PointOfInterestFeature_classCallCheck(this, PointOfInterestFeature);\n\n return _super.apply(this, arguments);\n }\n\n Babylon_js_PointOfInterestFeature_createClass(PointOfInterestFeature, [{\n key: "_validateTransformObject",\n value: function _validateTransformObject(obj) {\n return obj instanceof BABYLON.TransformNode;\n }\n }, {\n key: "setTargetByName",\n value: function setTargetByName(name) {\n Babylon_js_PointOfInterestFeature_get(Babylon_js_PointOfInterestFeature_getPrototypeOf(PointOfInterestFeature.prototype), "setTargetByName", this).call(this, name);\n\n if (!name) {\n return;\n }\n\n this.target = this._scene.getTransformNodeByName(name);\n }\n }, {\n key: "setTargetById",\n value: function setTargetById(id) {\n Babylon_js_PointOfInterestFeature_get(Babylon_js_PointOfInterestFeature_getPrototypeOf(PointOfInterestFeature.prototype), "setTargetByName", this).call(this, id);\n\n if (!id) {\n return;\n }\n\n this.target = this._scene.getTransformNodeByID(id);\n }\n }], [{\n key: "_getWorldPosition",\n value: function _getWorldPosition(obj) {\n return obj.getWorldMatrix().m.slice(12, 15);\n }\n }, {\n key: "_getWorldMatrix",\n value: function _getWorldMatrix(obj) {\n return Babylon_js_PointOfInterestFeature_toConsumableArray(obj.getWorldMatrix().m);\n }\n }]);\n\n return PointOfInterestFeature;\n}(core_PointOfInterestFeature);\n\n/* harmony default export */ var Babylon_js_PointOfInterestFeature = (Babylon_js_PointOfInterestFeature_PointOfInterestFeature);\n\n// CONCATENATED MODULE: ./src/Babylon.js/HostEnvironment.js\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n// eslint-disable-next-line import/prefer-default-export\nvar env = \'babylon\';\n// CONCATENATED MODULE: ./src/core/awspack/TextToSpeechUtils.js\nfunction TextToSpeechUtils_toConsumableArray(arr) { return TextToSpeechUtils_arrayWithoutHoles(arr) || TextToSpeechUtils_iterableToArray(arr) || TextToSpeechUtils_unsupportedIterableToArray(arr) || TextToSpeechUtils_nonIterableSpread(); }\n\nfunction TextToSpeechUtils_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."); }\n\nfunction TextToSpeechUtils_iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction TextToSpeechUtils_arrayWithoutHoles(arr) { if (Array.isArray(arr)) return TextToSpeechUtils_arrayLikeToArray(arr); }\n\nfunction TextToSpeechUtils_slicedToArray(arr, i) { return TextToSpeechUtils_arrayWithHoles(arr) || TextToSpeechUtils_iterableToArrayLimit(arr, i) || TextToSpeechUtils_unsupportedIterableToArray(arr, i) || TextToSpeechUtils_nonIterableRest(); }\n\nfunction TextToSpeechUtils_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."); }\n\nfunction TextToSpeechUtils_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return TextToSpeechUtils_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return TextToSpeechUtils_arrayLikeToArray(o, minLen); }\n\nfunction TextToSpeechUtils_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction TextToSpeechUtils_iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction TextToSpeechUtils_arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction TextToSpeechUtils_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { TextToSpeechUtils_typeof = function _typeof(obj) { return typeof obj; }; } else { TextToSpeechUtils_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return TextToSpeechUtils_typeof(obj); }\n\nfunction TextToSpeechUtils_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction TextToSpeechUtils_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction TextToSpeechUtils_createClass(Constructor, protoProps, staticProps) { if (protoProps) TextToSpeechUtils_defineProperties(Constructor.prototype, protoProps); if (staticProps) TextToSpeechUtils_defineProperties(Constructor, staticProps); return Constructor; }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/**\n * A collection of useful text-to-speech functions.\n *\n * @hideconstructor\n */\n\nvar TextToSpeechUtils_TextToSpeechUtils = /*#__PURE__*/function () {\n function TextToSpeechUtils() {\n TextToSpeechUtils_classCallCheck(this, TextToSpeechUtils);\n }\n\n TextToSpeechUtils_createClass(TextToSpeechUtils, null, [{\n key: "autoGenerateSSMLMarks",\n value:\n /**\n * Returns a new string with SSML marks inserted based on\n * matches between the input string and the input map. The\n * word matches are case-insensitive. Words within existing\n * SSML tags will not be affected. Input text will be surrounded\n * by tags if needed.\n *\n * @param {string} text - Input string.\n * @param {object} map - Input object that maps mark keys\n * to arrays of words. Example:\n *\n * {\n * \'mark:sad\' : [\'sad\', \'blue\', \'down\'],\n * \'mark:happy\' : [\'joy\', \'glad\', \'great\'],\n * \'mark:no\' : [\'no\', \'nah\', \'nay\', \'sure\']\n * }\n * @param {Array.} [randomMarks = []] - If there are sentences that don\'t\n * match any words from the map object, marks from this array will be randomly\n * chosen and inserted.\n *\n * @returns {string} - Updated input string.\n */\n function autoGenerateSSMLMarks(text, map) {\n var _this = this;\n\n var randomMarks = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];\n\n if (TextToSpeechUtils_typeof(map) !== \'object\' || map === null) {\n throw new Error("Cannot generate SSML marks for text \\"".concat(text, "\\" because map is not an object."));\n } // process the input map into an internal format\n\n\n var internalMap = this._processInputMap(map);\n\n var speakTags = [\'\', \'\'];\n var ssmlMarkRegex = //;\n var ssmlTagRegex = /<[^>]*>/g; // Identify any existing SSML tags\n\n var existingTags = [];\n var result = ssmlTagRegex.exec(text);\n\n while (result !== null) {\n existingTags.push({\n start: result.index,\n end: result.index + result[0].length,\n text: result[0]\n });\n result = ssmlTagRegex.exec(text);\n }\n\n var chunks = [];\n var index = 0;\n var ssmlMarkResult;\n var duplicateMarkToCheck = [];\n existingTags.forEach(function (existingTag) {\n var substr = text.slice(index, existingTag.start);\n\n if (substr !== \'\') {\n // auto-mark non-tag text\n chunks.push(_this._insertMarks(substr, internalMap, duplicateMarkToCheck));\n duplicateMarkToCheck = [];\n }\n\n ssmlMarkResult = ssmlMarkRegex.exec(existingTag.text);\n\n if (ssmlMarkResult !== null) {\n var markText = ssmlMarkResult[1];\n duplicateMarkToCheck.push(markText);\n } else if (!speakTags.includes(existingTag.text)) {\n chunks.push(existingTag.text);\n } // advance the index\n\n\n index = existingTag.end;\n });\n chunks.push(this._insertMarks(text.slice(index), internalMap, duplicateMarkToCheck));\n var markedText = chunks.join(\'\');\n\n if (randomMarks && randomMarks.length > 0) {\n // add random marks to any unmarked sentences\n markedText = this.addMarksToUnmarkedSentences(markedText, randomMarks);\n }\n\n return TextToSpeechUtils.validateText(markedText);\n }\n /**\n * Returns a new string with a random SSML mark inserted at each sentence that\n * does not already contain an SSML mark.\n *\n * @param {string} text - Input string.\n * @param {Array.} marks - Any array of random SSML marks to choose from\n * when modifying the text.\n *\n * @returns {string}\n */\n\n }, {\n key: "addMarksToUnmarkedSentences",\n value: function addMarksToUnmarkedSentences(text, marks) {\n if (!marks || marks.length === 0) return text;\n var ssmlMarkRegex = //g;\n var ssmlTagRegex = /<[^>]*>/g; // Find the indices of any marks in the text\n\n var markIndices = [];\n var markResult = ssmlMarkRegex.exec(text);\n\n while (markResult !== null) {\n markIndices.push(markResult.index);\n markResult = ssmlMarkRegex.exec(text);\n } // Find all SSML tags in the text\n\n\n var existingTags = [];\n var ssmlResult = ssmlTagRegex.exec(text);\n\n while (ssmlResult !== null) {\n existingTags.push({\n start: ssmlResult.index,\n end: ssmlResult.index + ssmlResult[0].length,\n text: ssmlResult[0]\n });\n ssmlResult = ssmlTagRegex.exec(text);\n } // Create a copy of the text with all SSML marks replaces with whitespace\n\n\n var cleanedText = text.slice();\n existingTags.forEach(function (existingSsml) {\n var whitespace = new Array(existingSsml.text.length + 1).join(\' \');\n cleanedText = [cleanedText.slice(0, existingSsml.start), whitespace, cleanedText.slice(existingSsml.end)].join(\'\');\n });\n\n var sentenceEndIndices = this._getSentenceEnds(cleanedText); // Only insert random marks into sentences that don\'t already have any\n\n\n var prevIndex = 0;\n var targetIndices = sentenceEndIndices.filter(function (index) {\n var containsMark = markIndices.findIndex(function (markIndex) {\n return prevIndex <= markIndex && index > markIndex;\n }) !== -1;\n prevIndex = index;\n return !containsMark;\n });\n\n var randomMarkedText = this._insertRandomMarksAt(text, targetIndices, marks);\n\n return randomMarkedText;\n }\n /**\n * Generate a version of given text that is enclosed by Polly ssml speak tags.\n *\n * @param {string} text - The text to validate.\n *\n * @returns {string} - Updated input string.\n */\n\n }, {\n key: "validateText",\n value: function validateText(text) {\n if (!text) {\n text = \'\';\n } else {\n text = text.replace(/(^\\s*<\\s*speak\\s*)>\\s*|(^\\s*)/, \'\').replace(/(\\s*<\\s*\\/\\s*speak\\s*>\\s*$|\\s*$)/, \'\');\n }\n\n return text;\n }\n /**\n * Parse an input string and insert SSML marks based on\n * word matches in a map.\n *\n * @private\n *\n * @param {string} text - Input string.\n * @param {Array.} [indices = []] - An array of indices in the text input\n * where random marks should be inserted.\n * @param {Array.} [marks = []] - An array of mark strings to choose\n * from when inserting random marks.\n *\n * @returns {string} - Updated input string.\n */\n\n }, {\n key: "_insertRandomMarksAt",\n value: function _insertRandomMarksAt(text) {\n var indices = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n var marks = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];\n\n if (!marks || marks.length === 0 || !indices || indices.length === 0) {\n return text;\n }\n\n var offset = 0;\n indices.forEach(function (index) {\n var randomMark = "");\n text = [text.slice(0, index + offset), randomMark, text.slice(index + offset)].join(\'\');\n offset += randomMark.length;\n });\n return text;\n }\n /**\n * Parses a string of text and returns an array containing the indices\n * of the last character in a sentence that is not in the following list:\n * (\'.\', \'?\', \'!\')\n *\n * @private\n *\n * @param {string} text - Text to process for end of sentence\n * indices.\n *\n * @returns {Array.} - Array of end of sentence indices.\n */\n\n }, {\n key: "_getSentenceEnds",\n value: function _getSentenceEnds(text) {\n var sentenceRegex = /[^.!?]+[.!?]+/g;\n var endSentenceRegex = /[.!?]+/;\n var result = sentenceRegex.exec(text);\n var sentenceEnds = [];\n\n while (result !== null) {\n // find the last non-punctuation character\n var punctResult = endSentenceRegex.exec(result[0]);\n sentenceEnds.push(result.index + result[0].length - punctResult[0].length);\n result = sentenceRegex.exec(text);\n }\n\n return sentenceEnds;\n }\n /**\n * Parse an input string and insert SSML marks based on\n * word matches in a map.\n *\n * @private\n *\n * @param {string} text - Input string.\n * @param {Map} map - Mapping of words to mark values that\n * will be inserted as the value for a mark\'s \'name\' attribute.\n * @param {Array} duplicatesToCheck - A list of mark values to check for duplicate against the first word\n *\n * @returns {string} - Updated input string.\n */\n\n }, {\n key: "_insertMarks",\n value: function _insertMarks(text, map, duplicatesToCheck) {\n if (text === \'\') return text;\n var wordRegex = /\\w+|\\s+|[^\\s\\w]+/g;\n var lowerCaseWord;\n var checkDuplicate = true;\n var markedWords = text.match(wordRegex).map(function (word) {\n lowerCaseWord = word.toLowerCase();\n\n if (map.has(lowerCaseWord)) {\n var marks = map.get(lowerCaseWord).map(function (mark) {\n if (checkDuplicate) {\n checkDuplicate = false;\n return duplicatesToCheck.includes(mark) ? \'\' : "");\n } else {\n return "");\n }\n });\n return "".concat(marks.join(\'\')).concat(word);\n } else {\n checkDuplicate = false;\n return word;\n }\n });\n var existingMarks = duplicatesToCheck.map(function (mark) {\n return "");\n });\n return "".concat(existingMarks.join(\'\')).concat(markedWords.join(\'\'));\n }\n /**\n * Processes an input object for mapping an array\n * of words to specific mark keys. Converts the input\n * map into a Map with a more efficient format for\n * performing mark injection.\n *\n * @private\n *\n * @param {object} map - Input object that maps mark keys\n * to arrays of words.\n *\n * @returns {Map} - Map for internal use.\n */\n\n }, {\n key: "_processInputMap",\n value: function _processInputMap(map) {\n var internalMap = new Map();\n var list = [];\n Object.entries(map).forEach(function (_ref) {\n var _ref2 = TextToSpeechUtils_slicedToArray(_ref, 2),\n key = _ref2[0],\n value = _ref2[1];\n\n if (!Array.isArray(value)) {\n throw new Error("Cannot generate SSML marks from map \\"".concat(map, "\\" because value for key \'").concat(key, "\' is not an array."));\n }\n\n value.forEach(function (word) {\n var lowerCaseWord = word.toLowerCase();\n list = internalMap.get(lowerCaseWord);\n\n if (list !== undefined && !list.includes(key)) {\n internalMap.set(lowerCaseWord, [].concat(TextToSpeechUtils_toConsumableArray(list), [key]));\n } else {\n internalMap.set(lowerCaseWord, [key]);\n }\n });\n });\n return internalMap;\n }\n }]);\n\n return TextToSpeechUtils;\n}();\n\n/* harmony default export */ var awspack_TextToSpeechUtils = (TextToSpeechUtils_TextToSpeechUtils);\n// CONCATENATED MODULE: ./src/core/awspack/AbstractSpeech.js\nfunction AbstractSpeech_toConsumableArray(arr) { return AbstractSpeech_arrayWithoutHoles(arr) || AbstractSpeech_iterableToArray(arr) || AbstractSpeech_unsupportedIterableToArray(arr) || AbstractSpeech_nonIterableSpread(); }\n\nfunction AbstractSpeech_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."); }\n\nfunction AbstractSpeech_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return AbstractSpeech_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return AbstractSpeech_arrayLikeToArray(o, minLen); }\n\nfunction AbstractSpeech_iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction AbstractSpeech_arrayWithoutHoles(arr) { if (Array.isArray(arr)) return AbstractSpeech_arrayLikeToArray(arr); }\n\nfunction AbstractSpeech_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction AbstractSpeech_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction AbstractSpeech_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction AbstractSpeech_createClass(Constructor, protoProps, staticProps) { if (protoProps) AbstractSpeech_defineProperties(Constructor.prototype, protoProps); if (staticProps) AbstractSpeech_defineProperties(Constructor, staticProps); return Constructor; }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/**\r\n * Class that can play back audio generated by AWS Polly and synchronized emit\r\n * speechmark messages.\r\n *\r\n * @abstract\r\n */\n\nvar AbstractSpeech_AbstractSpeech = /*#__PURE__*/function () {\n /**\r\n * @constructor\r\n *\r\n * @param {core/TextToSpeechFeature} speaker - The feature that owns the Speech and\r\n * will emit speechmark messages.\r\n * @param {string} text - The text of the speech.\r\n * @param {Array.} [speechmarks=[]] - An array of speechmark objects representing\r\n * the text and timing of the speech.\r\n */\n function AbstractSpeech(speaker, text) {\n var speechmarks = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];\n\n AbstractSpeech_classCallCheck(this, AbstractSpeech);\n\n this._speaker = speaker;\n this._text = text;\n this._speechmarks = speechmarks;\n this._speechmarkOffset = 0;\n\n this._reset();\n }\n /**\r\n * Reset tracking properties.\r\n *\r\n * @private\r\n *\r\n * @param {number} [currentTime=0] - Time to use for _startTime.\r\n */\n\n\n AbstractSpeech_createClass(AbstractSpeech, [{\n key: "_reset",\n value: function _reset() {\n var currentTime = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n this._startTime = currentTime;\n this._localTime = 0;\n this._pauseTime = 0;\n this._playing = false;\n this._markIter = this._speechmarks.values();\n\n var _this$_markIter$next = this._markIter.next(),\n value = _this$_markIter$next.value,\n done = _this$_markIter$next.done;\n\n this._currentMark = value;\n this._endTime = this._speechmarks.length ? this._speechmarks[this._speechmarks.length - 1].time : 0;\n this._done = done;\n this._promise = null;\n }\n /**\r\n * Create a new promise that will stop playback and emit messages for this speech.\r\n *\r\n * @param {Function=} onFinish - Funciton to execute once the speech stops.\r\n * @param {onError=} onError - Function to execute if the speech encounters an\r\n * error.\r\n * @param {Function=} onInterrupt - Function to execute if the speech is canceled.\r\n *\r\n * @returns {Deferred}\r\n *\r\n * @private\r\n */\n\n }, {\n key: "_createPromise",\n value: function _createPromise(onFinish, onError, onInterrupt) {\n var _this = this;\n\n var onResolve = function onResolve(value) {\n _this._playing = false;\n\n _this._speaker.emit(_this._speaker.constructor.EVENTS.stop, _this);\n\n _this._speaker.constructor.emit(_this._speaker.constructor.EVENTS.stop, _this);\n\n if (typeof onFinish === \'function\') {\n onFinish(value);\n }\n };\n\n var onReject = function onReject(e) {\n _this._playing = false;\n\n _this._speaker.emit(_this._speaker.constructor.EVENTS.stop, _this);\n\n _this._speaker.constructor.emit(_this._speaker.constructor.EVENTS.stop, _this);\n\n console.error("".concat(_this.constructor.name, " encountered an unexpected error: ").concat(e));\n\n if (typeof onError === \'function\') {\n onError(e);\n }\n };\n\n var onCancel = function onCancel(value) {\n _this._playing = false;\n\n _this._speaker.emit(_this._speaker.constructor.EVENTS.interrupt, _this);\n\n _this._speaker.constructor.emit(_this._speaker.constructor.EVENTS.interrupt, _this);\n\n if (typeof onInterrupt === \'function\') {\n onInterrupt(value);\n }\n };\n\n this._promise = new core_Deferred(undefined, onResolve, onReject, onCancel);\n return this._promise;\n }\n /**\r\n * Return whether or not the speech has reached it\'s end.\r\n *\r\n * @private\r\n *\r\n * @returns {boolean}\r\n */\n\n }, {\n key: "_checkFinished",\n value: function _checkFinished() {\n return this._done && this._localTime >= this._endTime;\n }\n /**\r\n * Gets the playback state of the audio.\r\n *\r\n * @readonly\r\n * @type {boolean}\r\n */\n\n }, {\n key: "playing",\n get: function get() {\n return this._playing;\n }\n /**\r\n * Gets the text of the speech.\r\n *\r\n * @readonly\r\n * @type {string}\r\n */\n\n }, {\n key: "text",\n get: function get() {\n return this._text;\n }\n /**\r\n * Gets a shallow copy of the speechmarks array for the speech.\r\n *\r\n * @readonly\r\n * @type {Array.}\r\n */\n\n }, {\n key: "speechmarks",\n get: function get() {\n return AbstractSpeech_toConsumableArray(this._speechmarks);\n }\n /**\r\n * Gets and sets the number of seconds to offset speechmark emission.\r\n * @type {number}\r\n */\n\n }, {\n key: "speechmarkOffset",\n get: function get() {\n return this._speechmarkOffset / 1000;\n },\n set: function set(offset) {\n this._speechmarkOffset = offset * 1000; // Store as milliseconds\n }\n /**\r\n * Emit speechmark messages as they are encountered in sync with audio.\r\n *\r\n * @param {number} currentTime - Current global time when update was called.\r\n */\n\n }, {\n key: "update",\n value: function update(currentTime) {\n if (!this._playing) {\n return;\n } // Update local audio time\n\n\n this._localTime = currentTime - this._startTime;\n\n if (!this._done) {\n // Emit speechmark messages for marks up to the current time\n while (!this._done && this._currentMark.time + this._speechmarkOffset <= this._localTime) {\n this._speaker.emit(this._speaker.constructor.EVENTS[this._currentMark.type], {\n speech: this,\n mark: this._currentMark\n });\n\n var _this$_markIter$next2 = this._markIter.next(),\n value = _this$_markIter$next2.value,\n done = _this$_markIter$next2.done;\n\n this._currentMark = value;\n this._done = done;\n }\n } // End playback\n\n\n if (this._checkFinished()) {\n this.stop();\n\n this._reset();\n }\n }\n /**\r\n * Play the speech from the beginning.\r\n *\r\n * @param {number} currentTime - Current global time when play was called.\r\n * @param {Function=} onFinish - Optional function to execute once the speech\r\n * promise resolves.\r\n * @param {Function=} onError - Optional function to execute if the speech\r\n * encounters and error during playback.\r\n * @param {Function=} onInterrupt - Optional function to execute if the speech\r\n * is canceled.\r\n *\r\n * @returns {Deferred} Resolves once the speech reaches the end of playback.\r\n */\n\n }, {\n key: "play",\n value: function play(currentTime, onFinish, onError, onInterrupt) {\n this._reset(currentTime);\n\n this._playing = true;\n\n this._speaker.emit(this._speaker.constructor.EVENTS.play, this);\n\n this._speaker.constructor.emit(this._speaker.constructor.EVENTS.play, this);\n\n return this._createPromise(onFinish, onError, onInterrupt);\n }\n /**\r\n * Pause the speech at the current time.\r\n *\r\n * @param {number} currentTime - Current global time when pause was called.\r\n */\n\n }, {\n key: "pause",\n value: function pause(currentTime) {\n this._playing = false;\n this._pauseTime = currentTime;\n\n this._speaker.emit(this._speaker.constructor.EVENTS.pause, this);\n\n this._speaker.constructor.emit(this._speaker.constructor.EVENTS.pause, this);\n }\n /**\r\n * Resume the speech at the current time.\r\n *\r\n * @param {number} currentTime - Current global time when resume was called.\r\n * @param {Function=} onFinish - Optional function to execute once the speech\r\n * promise resolves.\r\n * @param {Function=} onError - Optional function to execute if the speech\r\n * encounters and error during playback.\r\n * @param {Function=} onInterrupt - Optional function to execute if the speech\r\n * is canceled.\r\n *\r\n * @returns {Deferred} Resolves once the speech reaches the end of playback.\r\n */\n\n }, {\n key: "resume",\n value: function resume(currentTime, onFinish, onError, onInterrupt) {\n // Play from the beginning if the speech hasn\'t played yet\n if (!this._promise) {\n this._reset(currentTime);\n\n this._createPromise(onFinish, onError, onInterrupt);\n }\n\n this._playing = true;\n this._startTime += currentTime - this._pauseTime;\n\n this._speaker.emit(this._speaker.constructor.EVENTS.resume, this);\n\n this._speaker.constructor.emit(this._speaker.constructor.EVENTS.resume, this);\n\n return this._promise;\n }\n /**\r\n * Cancels playback of the speech at the current time. Cancel the speech promise.\r\n */\n\n }, {\n key: "cancel",\n value: function cancel() {\n if (this._promise) {\n this._promise.cancel();\n\n this._promise = null;\n }\n\n this._playing = false;\n }\n /**\r\n * Stop the speech and reset time to the beginning. Resolve the speech promise.\r\n */\n\n }, {\n key: "stop",\n value: function stop() {\n if (this._promise) {\n this._promise.resolve();\n\n this._promise = null;\n }\n\n this._playing = false;\n }\n }]);\n\n return AbstractSpeech;\n}();\n\n/* harmony default export */ var awspack_AbstractSpeech = (AbstractSpeech_AbstractSpeech);\n// CONCATENATED MODULE: ./src/core/awspack/AbstractTextToSpeechFeature.js\nfunction AbstractTextToSpeechFeature_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { AbstractTextToSpeechFeature_typeof = function _typeof(obj) { return typeof obj; }; } else { AbstractTextToSpeechFeature_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return AbstractTextToSpeechFeature_typeof(obj); }\n\nfunction AbstractTextToSpeechFeature_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction AbstractTextToSpeechFeature_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { AbstractTextToSpeechFeature_ownKeys(Object(source), true).forEach(function (key) { AbstractTextToSpeechFeature_defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { AbstractTextToSpeechFeature_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction AbstractTextToSpeechFeature_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction AbstractTextToSpeechFeature_slicedToArray(arr, i) { return AbstractTextToSpeechFeature_arrayWithHoles(arr) || AbstractTextToSpeechFeature_iterableToArrayLimit(arr, i) || AbstractTextToSpeechFeature_unsupportedIterableToArray(arr, i) || AbstractTextToSpeechFeature_nonIterableRest(); }\n\nfunction AbstractTextToSpeechFeature_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."); }\n\nfunction AbstractTextToSpeechFeature_iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction AbstractTextToSpeechFeature_arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction AbstractTextToSpeechFeature_toConsumableArray(arr) { return AbstractTextToSpeechFeature_arrayWithoutHoles(arr) || AbstractTextToSpeechFeature_iterableToArray(arr) || AbstractTextToSpeechFeature_unsupportedIterableToArray(arr) || AbstractTextToSpeechFeature_nonIterableSpread(); }\n\nfunction AbstractTextToSpeechFeature_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."); }\n\nfunction AbstractTextToSpeechFeature_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return AbstractTextToSpeechFeature_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return AbstractTextToSpeechFeature_arrayLikeToArray(o, minLen); }\n\nfunction AbstractTextToSpeechFeature_iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction AbstractTextToSpeechFeature_arrayWithoutHoles(arr) { if (Array.isArray(arr)) return AbstractTextToSpeechFeature_arrayLikeToArray(arr); }\n\nfunction AbstractTextToSpeechFeature_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction AbstractTextToSpeechFeature_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction AbstractTextToSpeechFeature_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction AbstractTextToSpeechFeature_createClass(Constructor, protoProps, staticProps) { if (protoProps) AbstractTextToSpeechFeature_defineProperties(Constructor.prototype, protoProps); if (staticProps) AbstractTextToSpeechFeature_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction AbstractTextToSpeechFeature_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { AbstractTextToSpeechFeature_get = Reflect.get; } else { AbstractTextToSpeechFeature_get = function _get(target, property, receiver) { var base = AbstractTextToSpeechFeature_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return AbstractTextToSpeechFeature_get(target, property, receiver || target); }\n\nfunction AbstractTextToSpeechFeature_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = AbstractTextToSpeechFeature_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction AbstractTextToSpeechFeature_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) AbstractTextToSpeechFeature_setPrototypeOf(subClass, superClass); }\n\nfunction AbstractTextToSpeechFeature_setPrototypeOf(o, p) { AbstractTextToSpeechFeature_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return AbstractTextToSpeechFeature_setPrototypeOf(o, p); }\n\nfunction AbstractTextToSpeechFeature_createSuper(Derived) { var hasNativeReflectConstruct = AbstractTextToSpeechFeature_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = AbstractTextToSpeechFeature_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = AbstractTextToSpeechFeature_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return AbstractTextToSpeechFeature_possibleConstructorReturn(this, result); }; }\n\nfunction AbstractTextToSpeechFeature_possibleConstructorReturn(self, call) { if (call && (AbstractTextToSpeechFeature_typeof(call) === "object" || typeof call === "function")) { return call; } return AbstractTextToSpeechFeature_assertThisInitialized(self); }\n\nfunction AbstractTextToSpeechFeature_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction AbstractTextToSpeechFeature_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction AbstractTextToSpeechFeature_getPrototypeOf(o) { AbstractTextToSpeechFeature_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return AbstractTextToSpeechFeature_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n\n\n\n/**\r\n * The Amazon Polly service object.\r\n * @external Polly\r\n * @see https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Polly.html\r\n */\n\n/**\r\n * The presigner object that can be used to generate presigned urls for the Polly service.\r\n * @external Presigner\r\n * @see https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Polly/Presigner.html\r\n */\n// Available options for Polly\n\nvar engines = [\'standard\', \'neural\'];\nvar audioFormats = [\'mp3\', \'ogg_vorbis\', \'pcm\'];\nvar speechmarkTypes = [\'sentence\', \'ssml\', \'viseme\', \'word\'];\nvar sampleRates = {\n mp3: {\n rates: [\'8000\', \'16000\', \'22050\', \'24000\'],\n defaults: {\n standard: \'2050\',\n neural: \'2400\'\n }\n },\n pcm: {\n rates: [\'8000\', \'16000\'],\n defaults: {\n standard: \'1600\',\n neural: \'1600\'\n }\n }\n};\nsampleRates.ogg_vorbis = sampleRates.mp3;\nvar awsVersion;\n/**\r\n * Base class for turning text input into playable audio. There should be one instance\r\n * per speaker, each instance can play only one piece of text at a time.\r\n *\r\n * @extends AbstractHostFeature\r\n * @abstract\r\n *\r\n * @property {(number|undefined)} AWS_VERSION - Gets the version of AWS SDK being\r\n * used. Will be undefined until [initializeService]{@link AbstractTextToSpeechFeature.initializeService}\r\n * has been successfully executed.\r\n * @property {string} [POLLY_MIN_NEURAL_VERSION=\'2.503\'] - Gets the minimum version\r\n * of the AWS SDK that is necessary to use neural voices with AWS Polly.\r\n * @property {Object} POLLY_DEFAULTS - Default values to use with calls to {@link external:Polly}.\r\n * @property {string} [POLLY_DEFAULTS.Engine=\'standard\']\r\n * @property {Array.} [POLLY_DEFAULTS.LexiconNames=[]]\r\n * @property {string} [POLLY_DEFAULTS.OutputFormat=\'mp3\']\r\n * @property {string} [POLLY_DEFAULTS.SampleRate=\'22050\']\r\n * @property {string} [POLLY_DEFAULTS.Text=\'\']\r\n * @property {string} [POLLY_DEFAULTS.TextType=\'ssml\']\r\n * @property {string} [POLLY_DEFAULTS.VoiceId=\'Amy\']\r\n * @property {string} [POLLY_DEFAULTS.LanguageCode=\'en-GB\']\r\n * @property {string} [POLLY_DEFAULTS.LanguageName=\'British English\']\r\n * @property {Array.} [POLLY_VOICES=[]] - An array of voices available in\r\n * Polly. Will be empty until [initializeService]{@link AbstractTextToSpeechFeature.initializeService}\r\n * has been successfully executed. See [Polly Documentation]{@link https://docs.aws.amazon.com/polly/latest/dg/voicelist.html}\r\n * for a full list of available voices.\r\n * @property {Object} [POLLY_LANGUAGES={}] - An object that maps language names\r\n * to language codes that are available in Polly. Will be empty until\r\n * [initializeService]{@link AbstractTextToSpeechFeature.initializeService}\r\n * has been successfully executed. See [Polly Documentation]{@link https://docs.aws.amazon.com/polly/latest/dg/SupportedLanguage.html}\r\n * for a full list of available languages and corresponding codes.\r\n * @property {Object} [POLLY_LANGUAGE_CODES={}] - An object that maps language codes\r\n * to language names that are available in Polly. Will be empty until\r\n * [initializeService]{@link AbstractTextToSpeechFeature.initializeService}\r\n * has been successfully executed. See [Polly Documentation]{@link https://docs.aws.amazon.com/polly/latest/dg/SupportedLanguage.html}\r\n * for a full list of available languages and corresponding codes.\r\n * @property {Object} EVENTS - Built-in messages that the feature emits. When the\r\n * feature is added to a {@link core/HostObject}, event names will be prefixed by the\r\n * name of the feature class + \'.\'.\r\n * @property {string} [EVENTS.ready=onReadyEvent] - Message that is emitted after\r\n * [initializeService]{@link AbstractTextToSpeechFeature.initializeService} has been\r\n * successfully executed.\r\n * @property {string} [EVENTS.play=onPlayEvent] - Message that is emitted after\r\n * each call to [play]{@link AbstractTextToSpeechFeature#play}. The speech that was played\r\n * is supplied as an argument to listener functions.\r\n * @property {string} [EVENTS.pause=onPauseEvent] - Message that is emitted after\r\n * each call to [pause]{@link AbstractTextToSpeechFeature#pause}. The speech that was paused\r\n * is supplied as an argument to listener functions.\r\n * @property {string} [EVENTS.resume=onResumeEvent] - Message that is emitted after\r\n * each call to [resume]{@link AbstractTextToSpeechFeature#resume}. The speech that was\r\n * resumed is supplied as an argument to listener functions.\r\n * @property {string} [EVENTS.interrupt=onInterruptEvent] - Message that is emitted\r\n * if there is a current speech in progress and [play]{@link AbstractTextToSpeechFeature#play}\r\n * or [resume]{@link AbstractTextToSpeechFeature#resume} are executed for a new speech.\r\n * The speech that was interrupted is supplied as an argument to listener functions.\r\n * @property {string} [EVENTS.stop=onStopEvent] - Message that is emitted after\r\n * each call to [stop]{@link AbstractTextToSpeechFeature#stop} and when a speech reaches\r\n * the end of playback. The speech that was stopped is supplied as an argument\r\n * to listener functions.\r\n * @property {string} [EVENTS.sentence=onSentenceEvent] - Message that is emitted\r\n * each time a sentence speechmark is encountered whose timestamp matches up with\r\n * the speech audio\'s current time. The sentence speechmark object is supplied as\r\n * an argument to listener functions.\r\n * @property {string} [EVENTS.word=onWordEvent] - Message that is emitted\r\n * each time a word speechmark is encountered whose timestamp matches up with\r\n * the speech audio\'s current time. The word speechmark object is supplied as\r\n * an argument to listener functions.\r\n * @property {string} [EVENTS.viseme=onVisemeEvent] - Message that is emitted\r\n * each time a viseme speechmark is encountered whose timestamp matches up with\r\n * the speech audio\'s current time. The viseme speechmark object is supplied as\r\n * an argument to listener functions.\r\n * @property {string} [EVENTS.ssml=onSsmlEvent] - Message that is emitted\r\n * each time a ssml speechmark is encountered whose timestamp matches up with\r\n * the speech audio\'s current time. The ssml speechmark object is supplied as\r\n * an argument to listener functions.\r\n * @property {Object} SERVICES - AWS services that are necessary for the feature\r\n * to function.\r\n * @property {external:Polly} SERVICES.polly - The Polly service that is used\r\n * to synthesize speechmarks. Will be undefined until [initializeService]{@link AbstractTextToSpeechFeature.initializeService}\r\n * has been successfully executed\r\n * @property {external:Presigner} SERVICES.presigner - The Polly Presigner\r\n * object that is used to synthesize speech audio. Will be undefined until\r\n * [initializeService]{@link AbstractTextToSpeechFeature.initializeService}\r\n * has been successfully executed.\r\n */\n\nvar AbstractTextToSpeechFeature_AbstractTextToSpeechFeature = /*#__PURE__*/function (_AbstractHostFeature) {\n AbstractTextToSpeechFeature_inherits(AbstractTextToSpeechFeature, _AbstractHostFeature);\n\n var _super = AbstractTextToSpeechFeature_createSuper(AbstractTextToSpeechFeature);\n\n /**\r\n * @constructor\r\n *\r\n * @param {core/HostObject} host - Host object managing the feature.\r\n * @param {Object=} options - Options that will be sent to Polly for each speech.\r\n * @param {string=} options.voice - The name of the Polly voice to use for all speech.\r\n * @param {string=} options.engine - The name of the Polly engine to use for all speech.\r\n * @param {string=} options.language - The name of the language to use for all speech.\r\n * @param {audioFormat} [options.audioFormat=\'mp3\'] - The format to use for generated\r\n * audio for all speeches.\r\n * @param {string=} options.sampleRate - The sample rate for audio files for all\r\n * speeches.\r\n * @param {number} [options.speechmarkOffset=0] - Amount of time in seconds to\r\n * offset speechmark event emission from the audio.\r\n * @param {number} [options.minEndMarkDuration=.05] - The minimum amount of time\r\n * in seconds that the last speechmark of each type in a speech can have its\r\n * duration property set to.\r\n * @param {number} [options.volume=1] - The default volume to play speech audio\r\n * with.\r\n */\n function AbstractTextToSpeechFeature(host) {\n var _this;\n\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n voice: undefined,\n engine: undefined,\n language: undefined,\n audioFormat: \'mp3\',\n sampleRate: undefined,\n speechmarkOffset: 0,\n minEndMarkDuration: 0.05,\n volume: 1\n };\n\n AbstractTextToSpeechFeature_classCallCheck(this, AbstractTextToSpeechFeature);\n\n _this = _super.call(this, host);\n _this._speechCache = {};\n _this._currentSpeech = null;\n _this._currentPromise = null;\n _this._isValidated = false;\n _this.speechmarkOffset = Number.isNaN(Number(options.speechmarkOffset)) ? 0 : Number(options.speechmarkOffset);\n _this.minEndMarkDuration = Number.isNaN(Number(options.minEndMarkDuration)) ? 0 : Number(options.minEndMarkDuration);\n _this.volume = Number.isNaN(Number(options.volume)) ? 1 : Number(options.volume);\n _this._promises = {\n volume: core_Deferred.resolve()\n };\n _this._volumePaused = false; // Set default options for each speech\n\n _this._voice = options.voice || _this.constructor.POLLY_DEFAULTS.VoiceId;\n _this._language = options.language || _this.constructor.POLLY_DEFAULTS.LanguageName;\n _this._engine = engines.includes(options.engine) ? options.engine : _this.constructor.POLLY_DEFAULTS.Engine;\n _this._audioFormat = audioFormats.includes(options.audioFormat) ? options.audioFormat : _this.constructor.POLLY_DEFAULTS.OutputFormat;\n _this._sampleRate = sampleRates[_this._audioFormat].rates.includes(options.sampleRate) ? options.sampleRate : _this.constructor.POLLY_DEFAULTS.SampleRate;\n return _this;\n }\n /**\r\n * Store Polly, Presigner and AWS SDK Version for use across all instances.\r\n *\r\n * @param {external:Polly} polly - Polly instance to use to generate speechmarks.\r\n * @param {external:Presigner} presigner - Presigner instance to use to generate\r\n * audio URLs.\r\n * @param {string} version - Version of the AWS SDK to use to validate voice options.\r\n */\n\n\n AbstractTextToSpeechFeature_createClass(AbstractTextToSpeechFeature, [{\n key: "currentSpeech",\n get:\n /**\r\n * Gets the text of the currently playing speech.\r\n *\r\n * @readonly\r\n * @type {string}\r\n */\n function get() {\n if (this._currentSpeech) {\n return this._currentSpeech.text;\n } else {\n return null;\n }\n }\n /**\r\n * Gets and sets the number of seconds to offset speechmark emission.\r\n *\r\n * @type {number}\r\n */\n\n }, {\n key: "speechmarkOffset",\n get: function get() {\n return this._speechmarkOffset;\n },\n set: function set(offset) {\n this._speechmarkOffset = offset;\n\n if (this._currentSpeech) {\n this._currentSpeech.speechmarkOffset = offset;\n }\n }\n /**\r\n * Gets and sets the The minimum amount of time in seconds that the last\r\n * speechmark of each type in a speech can have its duration property set to.\r\n *\r\n * @type number\r\n */\n\n }, {\n key: "minEndMarkDuration",\n get: function get() {\n return this._minEndMarkDuration / 1000;\n },\n set: function set(duration) {\n this._minEndMarkDuration = duration * 1000;\n }\n /**\r\n * Appends the Sumerian Hosts custom user-agent to a string if it is not\r\n * already present.\r\n *\r\n * @private\r\n *\r\n * @param {string} currentUserAgent - String to append to if needed.\r\n *\r\n * @returns {string}\r\n */\n\n }, {\n key: "_validateEngine",\n value:\n /**\r\n * Checks if a given engine type is compatible with the AWS SDK version. If it\r\n * is, return the original value. Otherwise return a default.\r\n *\r\n * @private\r\n *\r\n * @param {string} engine - The type of Polly voice engine to validate.\r\n *\r\n * @returns {string}\r\n */\n function _validateEngine(engine) {\n // Default to the standard engine if neural is not available for this version\n if (engine === undefined || this.constructor.AWS_VERSION < this.constructor.POLLY_MIN_NEURAL_VERSION) {\n engine = this.constructor.POLLY_DEFAULTS.Engine;\n }\n\n return engine;\n }\n /**\r\n * Checks if a given audio format type is compatible with Polly. If it is, return\r\n * the original value. Otherwise return a default.\r\n *\r\n * @private\r\n *\r\n * @param {string} engine - The type of Polly voice engine to validate.\r\n *\r\n * @returns {string}\r\n */\n\n }, {\n key: "_validateFormat",\n value: function _validateFormat(format) {\n if (format === undefined || !audioFormats.includes(format)) {\n format = this.constructor.POLLY_DEFAULTS.OutputFormat;\n }\n\n return format;\n }\n /**\r\n * Checks if a given audio sampling rate is compatible with the current audio\r\n * format. If it is, return the original value. Otherwise return a default.\r\n *\r\n * @private\r\n *\r\n * @param {string} engine - The type of Polly voice engine to validate.\r\n *\r\n * @returns {string}\r\n */\n\n }, {\n key: "_validateRate",\n value: function _validateRate(rate) {\n // Use default if specified sample rate is not valid for the audio format\n if (rate === undefined || !sampleRates[this._audioFormat].rates.includes(rate)) {\n rate = sampleRates[this._audioFormat].defaults[this._engine];\n }\n\n return rate;\n }\n /**\r\n * Checks if a given Polly voice id is compatible with the current Polly engine.\r\n * If it is, return the original value. Otherwise return a default.\r\n *\r\n * @private\r\n *\r\n * @param {string} engine - The type of Polly voice engine to validate.\r\n *\r\n * @returns {string}\r\n */\n\n }, {\n key: "_validateVoice",\n value: function _validateVoice(voiceId) {\n var voice = this.constructor.POLLY_VOICES.find(function (v) {\n return v.Id === voiceId;\n }); // Use the default voice if the voice isn\'t supported by the engine\n\n if (voice === undefined || !voice.SupportedEngines.includes(this._engine)) {\n voiceId = this.constructor.POLLY_DEFAULTS.VoiceId;\n }\n\n return voiceId;\n }\n /**\r\n * Checks if a given Polly language is compatible with the current Polly voice.\r\n * If it is, return the original value. Otherwise return a default.\r\n *\r\n * @private\r\n *\r\n * @param {string} engine - The type of Polly voice engine to validate.\r\n *\r\n * @returns {string}\r\n */\n\n }, {\n key: "_validateLanguage",\n value: function _validateLanguage(language) {\n var _this2 = this;\n\n var voice = this.constructor.POLLY_VOICES.find(function (v) {\n return v.Id === _this2._voice;\n });\n var languageCode = this.constructor.POLLY_LANGUAGES[language]; // Find the languages available for the current voice\n\n var availableCodes = [voice.LanguageCode];\n\n if (voice.AdditionalLanguageCodes) {\n availableCodes.push.apply(availableCodes, AbstractTextToSpeechFeature_toConsumableArray(voice.AdditionalLanguageCodes));\n } // If the current voice doesn\'t support the language, use its default\n\n\n if (!availableCodes.includes(languageCode)) {\n language = this.constructor.POLLY_LANGUAGE_CODES[voice.LanguageCode];\n }\n\n return language;\n }\n /**\r\n * Validate the current Polly options to make sure they are compatible with each\r\n * other.\r\n *\r\n * @private\r\n */\n\n }, {\n key: "_validate",\n value: function _validate() {\n // Validate speech parameters\n this._engine = this._validateEngine(this._engine);\n this._audioFormat = this._validateFormat(this._audioFormat);\n this._sampleRate = this._validateRate(this._sampleRate);\n this._voice = this._validateVoice(this._voice);\n this._language = this._validateLanguage(this._language);\n this._isValidated = true;\n }\n /**\r\n * Return an object containing parameters compatible with Polly.synthesizeSpeech.\r\n *\r\n * @private\r\n *\r\n * @returns {Object}\r\n */\n\n }, {\n key: "_getConfig",\n value: function _getConfig() {\n // Make sure parameters have been validated\n if (this.constructor.isReady && !this._isValidated) {\n this._validate();\n } // Create a config object compatible with Polly\n\n\n return {\n Engine: this._engine,\n OutputFormat: this._audioFormat,\n SampleRate: this._sampleRate,\n VoiceId: this._voice,\n LanguageCode: this.constructor.POLLY_LANGUAGES[this._language]\n };\n }\n /**\r\n * Update Polly parameters with options from a given config. All stored speeches\r\n * will be updated to use the new parameters, unless the speech text is contained\r\n * in the \'skipSpeeches\' parameter.\r\n *\r\n * @private\r\n *\r\n * @param {Object} config - Polly parameter options to overwrite.\r\n * @param {Array.} skipSpeeches - Text of any speeches that should not\r\n * have parameters updated.\r\n *\r\n * @returns {Object}\r\n */\n\n }, {\n key: "_updateConfig",\n value: function _updateConfig(config) {\n var _this3 = this;\n\n var skipSpeeches = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n\n var currentConfig = this._getConfig();\n\n if (!config) {\n return currentConfig;\n }\n\n this._isValidated = false;\n var currentConfigStr = JSON.stringify(currentConfig); // Update options\n\n if (config.Engine) {\n this._engine = config.Engine;\n }\n\n if (config.audioFormat) {\n this._audioFormat = config.audioFormat;\n }\n\n if (config.SampleRate) {\n this._sampleRate = config.SampleRate;\n }\n\n if (config.VoiceId) {\n this._voice = config.VoiceId;\n }\n\n if (config.Language) {\n this._language = config.Language;\n } // Validate the config\n\n\n var validConfig = this._getConfig(); // Exit if nothing has changed\n\n\n var configStr = JSON.stringify(validConfig);\n\n if (currentConfigStr === configStr) {\n this._isValidated = true;\n return validConfig;\n } // Update all cached configs\n\n\n Object.entries(this._speechCache).forEach(function (_ref) {\n var _ref2 = AbstractTextToSpeechFeature_slicedToArray(_ref, 2),\n text = _ref2[0],\n speech = _ref2[1];\n\n // Check if this is a skipped speech\n if (skipSpeeches.includes(text)) {\n return;\n }\n\n var speechConfigStr = JSON.stringify(speech.config); // Update the speech with new parameters\n\n if (speechConfigStr !== configStr) {\n _this3._updateSpeech(text, validConfig);\n }\n });\n return validConfig;\n }\n /**\r\n * Update an existing speech, or add a new speech with new Polly parameters with\r\n * options from a given config.\r\n *\r\n * @private\r\n *\r\n * @param {string} text - The text of the speech to update.\r\n * @param {Object} config - Polly parameter options to update.\r\n * @param {boolean} [force=false] - Whether to force the speech to be updated\r\n * if no parameters have changes.\r\n *\r\n * @returns {AbstractSpeech}\r\n */\n\n }, {\n key: "_updateSpeech",\n value: function _updateSpeech(text, config) {\n var _this4 = this;\n\n var force = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n var speech = this._speechCache[text] || {}; // Exit if nothing has changed and force is false\n\n if (!force && config !== undefined && speech.config && JSON.stringify(config) === JSON.stringify(speech.config)) {\n return speech;\n } // Create separate parameters for audio and speechmark generation\n\n\n var audioParams = AbstractTextToSpeechFeature_objectSpread(AbstractTextToSpeechFeature_objectSpread({}, config), {}, {\n Text: text,\n TextType: \'ssml\'\n });\n\n var speechmarkParams = AbstractTextToSpeechFeature_objectSpread(AbstractTextToSpeechFeature_objectSpread({}, audioParams), {}, {\n OutputFormat: \'json\',\n SpeechMarkTypes: speechmarkTypes\n }); // Generate audio and speechmarks\n\n\n speech.config = config;\n speech.promise = Promise.all([this._synthesizeSpeechmarks(speechmarkParams), this._synthesizeAudio(audioParams)]).then(function (results) {\n return _this4._createSpeech.apply(_this4, [text].concat(AbstractTextToSpeechFeature_toConsumableArray(results)));\n });\n this._speechCache[text] = speech;\n return speech;\n }\n /**\r\n * Create a new Speech object for the speaker.\r\n *\r\n * @private\r\n *\r\n * @param {TextToSpeech} speaker - The TextToSpeech instance that will own the speech.\r\n * @param {string} text - Text of the speech.\r\n * @param {Object} speechmarks - Speechmarks for the speech.\r\n * @param {Object} audioConfig - Audio for the speech.\r\n *\r\n * @returns {AbstractSpeech}\r\n */\n\n }, {\n key: "_createSpeech",\n value: function _createSpeech(text, speechmarks, audioConfig) {\n return new awspack_AbstractSpeech(this, text, speechmarks, audioConfig);\n }\n /**\r\n * Create presigned URL of speech audio for the given speech text.\r\n *\r\n * @private\r\n *\r\n * @param {Object} params - Parameters object compatible with Polly.synthesizeSpeech.\r\n *\r\n * @returns {Deferred} Resolves with an object containing the audio URL.\r\n */\n\n }, {\n key: "_synthesizeAudio",\n value: function _synthesizeAudio(params) {\n var _this5 = this;\n\n return new core_Deferred(function (resolve, reject) {\n _this5.constructor.SERVICES.presigner.getSynthesizeSpeechUrl(params, function (error, url) {\n if (!error) {\n resolve({\n url: url\n });\n } else {\n reject(error);\n }\n });\n });\n }\n /**\r\n * Retrieves and parses speechmarks for the given speech text.\r\n *\r\n * @private\r\n *\r\n * @param {Object} params - Parameters object compatible with Polly.synthesizeSpeech.\r\n *\r\n * @returns {Deferred} Resolves with an array of speechmark objects\r\n */\n\n }, {\n key: "_synthesizeSpeechmarks",\n value: function _synthesizeSpeechmarks(params) {\n var _this6 = this;\n\n return this.constructor.SERVICES.polly.synthesizeSpeech(params).promise().then(function (result) {\n // Convert charcodes to string\n var jsonString = JSON.stringify(result.AudioStream);\n var json = JSON.parse(jsonString);\n var dataStr = json.data.map(function (c) {\n return String.fromCharCode(c);\n }).join(\'\');\n var markTypes = {\n sentence: [],\n word: [],\n viseme: [],\n ssml: []\n };\n var endMarkTypes = {\n sentence: null,\n word: null,\n viseme: null,\n ssml: null\n }; // Split by enclosing {} to create speechmark objects\n\n var speechMarks = AbstractTextToSpeechFeature_toConsumableArray(dataStr.matchAll(/\\{.*?\\}(?=\\n|$)/gm)).map(function (match) {\n var mark = JSON.parse(match[0]); // Set the duration of the last speechmark stored matching this one\'s type\n\n var numMarks = markTypes[mark.type].length;\n\n if (numMarks > 0) {\n var lastMark = markTypes[mark.type][numMarks - 1];\n lastMark.duration = mark.time - lastMark.time;\n }\n\n markTypes[mark.type].push(mark);\n endMarkTypes[mark.type] = mark;\n return mark;\n }); // Find the time of the latest speechmark\n\n\n var endTimes = [];\n\n if (endMarkTypes.sentence) {\n endTimes.push(endMarkTypes.sentence.time);\n }\n\n if (endMarkTypes.word) {\n endTimes.push(endMarkTypes.word.time);\n }\n\n if (endMarkTypes.viseme) {\n endTimes.push(endMarkTypes.viseme.time);\n }\n\n if (endMarkTypes.ssml) {\n endTimes.push(endMarkTypes.ssml.time);\n }\n\n var endTime = Math.max.apply(Math, endTimes); // Calculate duration for the ending speechMarks of each type\n\n if (endMarkTypes.sentence) {\n endMarkTypes.sentence.duration = Math.max(_this6._minEndMarkDuration, endTime - endMarkTypes.sentence.time);\n }\n\n if (endMarkTypes.word) {\n endMarkTypes.word.duration = Math.max(_this6._minEndMarkDuration, endTime - endMarkTypes.word.time);\n }\n\n if (endMarkTypes.viseme) {\n endMarkTypes.viseme.duration = Math.max(_this6._minEndMarkDuration, endTime - endMarkTypes.viseme.time);\n }\n\n if (endMarkTypes.ssml) {\n endMarkTypes.ssml.duration = Math.max(_this6._minEndMarkDuration, endTime - endMarkTypes.ssml.time);\n }\n\n return speechMarks;\n });\n }\n /**\r\n * Returns a Speech object that has the given text.\r\n *\r\n * @private\r\n *\r\n * @param {string} text - The text content of the Speech.\r\n * @param {Object=} config - Options to update the Speech with.\r\n *\r\n * @returns {Deferred} Resolves with Speech or null;\r\n */\n\n }, {\n key: "_getSpeech",\n value: function _getSpeech(text, config) {\n // Make sure AWS services exist\n if (!this.constructor.isReady) {\n var e = \'AWS services have not been initialized.\';\n return core_Deferred.reject(e);\n } // Make sure its possible to generate speeches\n\n\n if (!text) {\n var _e2 = \'Cannot play a speech with no text.\';\n return core_Deferred.reject(_e2);\n } // Update the speech with options\n\n\n text = awspack_TextToSpeechUtils.validateText(text);\n config = this._updateConfig(config, text);\n return this._updateSpeech(text, config).promise;\n }\n /**\r\n * Adds a namespace to the host with the name of the feature to contain properties\r\n * and methods from the feature that users of the host need access to.\r\n *\r\n * @see TextToSpeechFeature\r\n */\n\n }, {\n key: "installApi",\n value: function installApi() {\n var _this7 = this;\n\n /**\r\n * @inner\r\n * @namespace TextToSpeechFeature\r\n */\n var api = AbstractTextToSpeechFeature_get(AbstractTextToSpeechFeature_getPrototypeOf(AbstractTextToSpeechFeature.prototype), "installApi", this).call(this);\n\n Object.assign(api, {\n /**\r\n * @memberof TextToSpeechFeature\r\n * @instance\r\n * @method\r\n * @see AbstractTextToSpeechFeature#play\r\n */\n play: this.play.bind(this),\n\n /**\r\n * @memberof TextToSpeechFeature\r\n * @instance\r\n * @method\r\n * @see AbstractTextToSpeechFeature#pause\r\n */\n pause: this.pause.bind(this),\n\n /**\r\n * @memberof TextToSpeechFeature\r\n * @instance\r\n * @method\r\n * @see AbstractTextToSpeechFeature#resume\r\n */\n resume: this.resume.bind(this),\n\n /**\r\n * @memberof TextToSpeechFeature\r\n * @instance\r\n * @method\r\n * @see AbstractTextToSpeechFeature#stop\r\n */\n stop: this.stop.bind(this),\n\n /**\r\n * @memberof TextToSpeechFeature\r\n * @instance\r\n * @method\r\n * @see AbstractTextToSpeechFeature#getVolume\r\n */\n getVolume: this.getVolume.bind(this),\n\n /**\r\n * @memberof TextToSpeechFeature\r\n * @instance\r\n * @method\r\n * @see AbstractTextToSpeechFeature#setVolume\r\n */\n setVolume: this.setVolume.bind(this),\n\n /**\r\n * @memberof TextToSpeechFeature\r\n * @instance\r\n * @method\r\n * @see AbstractTextToSpeechFeature#pauseVolume\r\n */\n pauseVolume: this.pauseVolume.bind(this),\n\n /**\r\n * @memberof TextToSpeechFeature\r\n * @instance\r\n * @method\r\n * @see AbstractTextToSpeechFeature#resumeVolume\r\n */\n resumeVolume: this.resumeVolume.bind(this)\n });\n Object.defineProperties(api, {\n /**\r\n * @memberof TextToSpeechFeature\r\n * @instance\r\n * @see AbstractTextToSpeechFeature#speechmarkOffset\r\n */\n speechmarkOffset: {\n get: function get() {\n return _this7.speechmarkOffset;\n },\n set: function set(offset) {\n _this7.speechmarkOffset = offset;\n }\n }\n });\n return api;\n }\n /**\r\n * Gets and sets the volume used for all audio clips played by the speaker.\r\n *\r\n * @type {number}\r\n */\n\n }, {\n key: "volume",\n get: function get() {\n return this._volume;\n }\n /**\r\n * Gets whether or not the speaker\'s volume value is currently being tweened.\r\n *\r\n * @readonly\r\n * @type {boolean}\r\n */\n ,\n set: function set(volume) {\n this._volume = core_MathUtils.clamp(volume);\n }\n }, {\n key: "volumePending",\n get: function get() {\n return this._promises.volume && this._promises.volume.pending;\n }\n /**\r\n * Gets the volume used for all audio clips played by the speaker.\r\n *\r\n * @returns {number}\r\n */\n\n }, {\n key: "getVolume",\n value: function getVolume() {\n return this.volume;\n }\n /**\r\n * Updates the volume used for all audio clips played by the speaker over time.\r\n *\r\n * @param {number} volume - Target volume value.\r\n * @param {number} [seconds=0] - Amount of time it will take to reach the target\r\n * volume.\r\n * @param {Function=} easingFn - Easing function used for interpolation.\r\n *\r\n * @returns {Deferred}\r\n */\n\n }, {\n key: "setVolume",\n value: function setVolume(volume) {\n var seconds = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var easingFn = arguments.length > 2 ? arguments[2] : undefined;\n\n if (this.volumePending) {\n this._promises.volume.cancel();\n }\n\n volume = core_MathUtils.clamp(volume);\n this._promises.volume = animpack_AnimationUtils.interpolateProperty(this, \'volume\', volume, {\n seconds: seconds,\n easingFn: easingFn\n });\n return this._promises.volume;\n }\n /**\r\n * Pause interpolation happening on the speaker\'s volume property.\r\n *\r\n * @returns {boolean}\r\n */\n\n }, {\n key: "pauseVolume",\n value: function pauseVolume() {\n this._volumePaused = true;\n return this.volumePending;\n }\n /**\r\n * Resume any interpolation happening on the speaker\'s volume property.\r\n *\r\n * @returns {boolean}\r\n */\n\n }, {\n key: "resumeVolume",\n value: function resumeVolume() {\n this._volumePaused = false;\n return this.volumePending;\n }\n /**\r\n * Update the currently playing speech.\r\n *\r\n * @param {number} deltaTime - Time since the last update.\r\n */\n\n }, {\n key: "update",\n value: function update(deltaTime) {\n if (!this._volumePaused) {\n this._promises.volume.execute(deltaTime);\n }\n\n if (this._currentSpeech && this._currentSpeech.playing) {\n this._currentSpeech.volume = this._volume;\n\n this._currentSpeech.update(this._host.now);\n\n AbstractTextToSpeechFeature_get(AbstractTextToSpeechFeature_getPrototypeOf(AbstractTextToSpeechFeature.prototype), "update", this).call(this, deltaTime);\n }\n }\n /**\r\n * Set the current speech to a new asset and update the speech\'s speechmark\r\n * offset value to match that of the feature.\r\n *\r\n * @private\r\n *\r\n * @param {AbstractSpeech} speech - Speech to set as current.\r\n */\n\n }, {\n key: "_setCurrentSpeech",\n value: function _setCurrentSpeech(speech) {\n speech.speechmarkOffset = this._speechmarkOffset;\n this._currentSpeech = speech;\n }\n /**\r\n * Create a promise that will play/resume a speech with the given text after\r\n * the audio context attempts to resume and speech audio is retrieved from Polly.\r\n *\r\n * @private\r\n *\r\n * @param {string} text - The text of the new speech to play.\r\n * @param {Object=} config - Optional parameters for the speech.\r\n * @param {string} [playMethod = \'play\'] - Method to execute on the resulting\r\n * Speech object. Valid options are \'play\' and \'resume\'.\r\n */\n\n }, {\n key: "_startSpeech",\n value: function _startSpeech(text, config) {\n var _this8 = this;\n\n var playMethod = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : \'play\';\n\n // If no text is provided, try to use the current speech\n if (text === undefined && playMethod === \'resume\' && this._currentSpeech) {\n text = this._currentSpeech.text;\n }\n\n var currentPromise = this._currentPromise || {\n play: new core_Deferred(undefined, function () {\n currentPromise.speech.cancel();\n }, function () {\n currentPromise.speech.cancel();\n }, function () {\n currentPromise.speech.cancel();\n }),\n speech: new core_Deferred()\n };\n this._currentPromise = currentPromise;\n\n this._getSpeech(text, config).then(function (speech) {\n // Exit if the promise is no longer pending because of user interaction\n if (!currentPromise.play.pending) {\n return;\n } else if (_this8._currentPromise !== currentPromise) {\n // Cancel if another call to play has already been made\n currentPromise.play.cancel();\n return;\n } // Reset current speech when the speech ends\n\n\n var onFinish = function onFinish() {\n _this8._currentSpeech = null;\n _this8._currentPromise = null;\n }; // Cancel the currently playing speech\n\n\n if (_this8._currentSpeech && _this8._currentSpeech.playing) {\n if (playMethod === \'play\') {\n _this8._currentSpeech.cancel();\n } else if (playMethod === \'resume\' && _this8._currentSpeech.audio !== speech.audio) {\n _this8._currentSpeech.cancel();\n }\n }\n\n _this8._setCurrentSpeech(speech); // Play the speech\n\n\n currentPromise.speech = speech[playMethod](_this8._host.now, onFinish, onFinish, onFinish);\n currentPromise.speech.then(function () {\n if (currentPromise.speech.resolved) {\n currentPromise.play.resolve();\n } else {\n currentPromise.play.cancel();\n }\n })["catch"](function (error) {\n currentPromise.play.reject(error);\n });\n })["catch"](function (e) {\n e = "Cannot ".concat(playMethod, " speech ").concat(text, " on host ").concat(_this8.host.id, ". ").concat(e);\n currentPromise.play.reject(e);\n });\n\n return currentPromise.play;\n }\n /**\r\n * Stop any speeches currently playing and play a new speech from the beginning.\r\n *\r\n * @param {string} text - The text of the new speech to play.\r\n * @param {Object=} config - Optional parameters for the speech.\r\n *\r\n * @returns {Deferred}\r\n */\n\n }, {\n key: "play",\n value: function play(text, config) {\n return this._startSpeech(text, config, \'play\');\n }\n /**\r\n * If a speech is currently playing, pause it at the current time.\r\n */\n\n }, {\n key: "pause",\n value: function pause() {\n if (this._currentSpeech && this._currentSpeech.playing) {\n this._currentSpeech.pause(this._host.now);\n } else {\n console.warn("Cannot pause speech on host ".concat(this.host.id, ". No speech is currently playing"));\n }\n }\n /**\r\n * Stop any speeches currently playing and resume a new speech from the current\r\n * time.\r\n *\r\n * @param {string=} text - The text of the new speech to play. If undefined and\r\n * there is a current speech that is paused, the current speech will be resumed.\r\n * @param {Object=} config - Optional parameters for the speech.\r\n *\r\n * @returns {Deferred}\r\n */\n\n }, {\n key: "resume",\n value: function resume(text, config) {\n return this._startSpeech(text, config, \'resume\');\n }\n /**\r\n * If a speech is currently playing, stop playback and reset time.\r\n */\n\n }, {\n key: "stop",\n value: function stop() {\n if (this._currentSpeech && this._currentSpeech.playing) {\n this._currentSpeech.stop();\n\n this._currentSpeech = null;\n } else {\n console.warn("Cannot stop speech on host ".concat(this.host.id, ". No speech is currently playing."));\n }\n }\n }, {\n key: "discard",\n value: function discard() {\n if (this._currentSpeech && this._currentSpeech.playing) {\n this._currentSpeech.stop();\n }\n\n delete this._speechCache;\n\n AbstractTextToSpeechFeature_get(AbstractTextToSpeechFeature_getPrototypeOf(AbstractTextToSpeechFeature.prototype), "discard", this).call(this);\n }\n }], [{\n key: "initializeService",\n value: function initializeService(polly, presigner, version) {\n var _this9 = this;\n\n // Make sure all were defined\n if (polly === undefined || presigner === undefined || version === undefined) {\n throw new Error(\'Cannot initialize TextToSpeech feature. All arguments must be defined.\');\n } // Add sumerian hosts user-agent\n\n\n if (polly.config) {\n polly.config.customUserAgent = this._withCustomUserAgent(polly.config.customUserAgent);\n }\n\n if (presigner.service && presigner.service.config) {\n presigner.service.config.customUserAgent = this._withCustomUserAgent(presigner.service.config.customUserAgent);\n }\n\n this._isReady = false; // Store parameters\n\n this.SERVICES.polly = polly;\n this.SERVICES.presigner = presigner;\n awsVersion = version; // Clear the current polly objects\n\n var availableVoices = this.POLLY_VOICES;\n availableVoices.length = 0;\n var availableLanguages = this.POLLY_LANGUAGES;\n Object.keys(availableLanguages).forEach(function (name) {\n delete availableLanguages[name];\n });\n var availableLanguageCodes = this.POLLY_LANGUAGE_CODES;\n Object.keys(availableLanguageCodes).forEach(function (name) {\n delete availableLanguageCodes[name];\n }); // Re-populate according to version\n\n var minNeuralSdk = this.POLLY_MIN_NEURAL_VERSION;\n return this.SERVICES.polly.describeVoices().promise().then(function (response) {\n var allCodes = {};\n response.Voices.forEach(function (voice) {\n if (voice.SupportedEngines.includes(\'standard\') || version >= minNeuralSdk) {\n availableVoices.push(voice);\n }\n\n availableVoices.forEach(function (voice) {\n availableLanguages[voice.LanguageName] = voice.LanguageCode;\n allCodes[voice.LanguageCode] = voice.LanguageName;\n });\n });\n Object.entries(availableLanguages).forEach(function (_ref3) {\n var _ref4 = AbstractTextToSpeechFeature_slicedToArray(_ref3, 2),\n name = _ref4[0],\n code = _ref4[1];\n\n availableLanguageCodes[code] = name;\n }); // Notify that we\'re ready to generate speeches\n\n _this9._isReady = true;\n\n _this9.emit(_this9.EVENTS.ready);\n });\n }\n /**\r\n * Indicates whether or not the class is capable of generating speech audio. Polly,\r\n * Presigner and AWS SDK version number must have been defined using\r\n * [initializeService]{@link AbstractTextToSpeechFeature.initializeService}.\r\n *\r\n * @readonly\r\n * @type {boolean}\r\n */\n\n }, {\n key: "isReady",\n get: function get() {\n return this._isReady;\n }\n }, {\n key: "_withCustomUserAgent",\n value: function _withCustomUserAgent(currentUserAgent) {\n var sumerianHostsUserAgent = \'request-source/SumerianHosts\';\n\n if (currentUserAgent == null) {\n return sumerianHostsUserAgent;\n }\n\n if (currentUserAgent.indexOf(sumerianHostsUserAgent) !== -1) {\n return currentUserAgent;\n }\n\n return currentUserAgent.concat(\' \', sumerianHostsUserAgent);\n }\n }]);\n\n return AbstractTextToSpeechFeature;\n}(core_AbstractHostFeature);\n\nObject.defineProperties(AbstractTextToSpeechFeature_AbstractTextToSpeechFeature, {\n AWS_VERSION: {\n get: function get() {\n return awsVersion;\n }\n },\n POLLY_MIN_NEURAL_VERSION: {\n value: \'2.503\',\n writable: false\n },\n POLLY_DEFAULTS: {\n value: {\n Engine: \'standard\',\n LexiconNames: [],\n OutputFormat: \'mp3\',\n SampleRate: \'22050\',\n Text: \'\',\n TextType: \'ssml\',\n VoiceId: \'Amy\',\n LanguageCode: \'en-GB\',\n LanguageName: \'British English\'\n },\n writable: false\n },\n POLLY_VOICES: {\n value: [],\n writable: false\n },\n POLLY_LANGUAGES: {\n value: {},\n writable: false\n },\n POLLY_LANGUAGE_CODES: {\n value: {},\n writable: false\n },\n _isReady: {\n value: false,\n writable: true\n },\n EVENTS: {\n value: AbstractTextToSpeechFeature_objectSpread(AbstractTextToSpeechFeature_objectSpread({}, Object.getPrototypeOf(AbstractTextToSpeechFeature_AbstractTextToSpeechFeature).EVENTS), {}, {\n ready: \'onReadyEvent\',\n play: \'onPlayEvent\',\n pause: \'onPauseEvent\',\n resume: \'onResumeEvent\',\n interrupt: \'onInterruptEvent\',\n stop: \'onStopEvent\',\n sentence: \'onSentenceEvent\',\n word: \'onWordEvent\',\n viseme: \'onVisemeEvent\',\n ssml: \'onSsmlEvent\'\n })\n },\n SERVICES: {\n value: AbstractTextToSpeechFeature_objectSpread(AbstractTextToSpeechFeature_objectSpread({}, Object.getPrototypeOf(AbstractTextToSpeechFeature_AbstractTextToSpeechFeature).SERVICES), {}, {\n polly: undefined,\n presigner: undefined\n })\n }\n});\n/* harmony default export */ var awspack_AbstractTextToSpeechFeature = (AbstractTextToSpeechFeature_AbstractTextToSpeechFeature);\n// CONCATENATED MODULE: ./src/core/awspack/Speech.js\nfunction Speech_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { Speech_typeof = function _typeof(obj) { return typeof obj; }; } else { Speech_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return Speech_typeof(obj); }\n\nfunction Speech_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction Speech_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction Speech_createClass(Constructor, protoProps, staticProps) { if (protoProps) Speech_defineProperties(Constructor.prototype, protoProps); if (staticProps) Speech_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction Speech_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { Speech_get = Reflect.get; } else { Speech_get = function _get(target, property, receiver) { var base = Speech_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return Speech_get(target, property, receiver || target); }\n\nfunction Speech_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = Speech_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction Speech_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) Speech_setPrototypeOf(subClass, superClass); }\n\nfunction Speech_setPrototypeOf(o, p) { Speech_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return Speech_setPrototypeOf(o, p); }\n\nfunction Speech_createSuper(Derived) { var hasNativeReflectConstruct = Speech_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = Speech_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = Speech_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return Speech_possibleConstructorReturn(this, result); }; }\n\nfunction Speech_possibleConstructorReturn(self, call) { if (call && (Speech_typeof(call) === "object" || typeof call === "function")) { return call; } return Speech_assertThisInitialized(self); }\n\nfunction Speech_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction Speech_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction Speech_getPrototypeOf(o) { Speech_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return Speech_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/**\r\n * The built-in class for asynchronous Promises.\r\n * @external Audio\r\n * @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLAudioElement/Audio\r\n */\n\n/**\r\n * @extends AbstractSpeech\r\n * @alias core/Speech\r\n */\n\nvar Speech_Speech = /*#__PURE__*/function (_AbstractSpeech) {\n Speech_inherits(Speech, _AbstractSpeech);\n\n var _super = Speech_createSuper(Speech);\n\n /**\r\n * @constructor\r\n *\r\n * @param {TextToSpeech} speaker - The owner of the Speech that will emit speechmark\r\n * messages.\r\n * @param {string} text - The text of the speech.\r\n * @param {Array.} [speechmarks=[]] - An array of speechmark objects representing\r\n * the text and timing of the speech.\r\n * @param {Object} audioConfig - Object containing audio and url.\r\n * @param {external:Audio} audioConfig.audio - Playable audio object.\r\n */\n function Speech(speaker, text) {\n var _this;\n\n var speechmarks = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];\n var audioConfig = arguments.length > 3 ? arguments[3] : undefined;\n\n Speech_classCallCheck(this, Speech);\n\n _this = _super.call(this, speaker, text, speechmarks);\n _this._audio = audioConfig.audio; // Keep track of whether the audio has finished playing through\n\n _this._audio.onended = function () {\n _this._audioFinished = true;\n };\n\n _this._audioFinished = true;\n return _this;\n }\n\n Speech_createClass(Speech, [{\n key: "_checkFinished",\n value: function _checkFinished() {\n return this._audioFinished && Speech_get(Speech_getPrototypeOf(Speech.prototype), "_checkFinished", this).call(this);\n }\n /**\r\n * Gets the playable audio for the speech.\r\n *\r\n * @readonly\r\n * @type {external:Audio}\r\n */\n\n }, {\n key: "audio",\n get: function get() {\n return this._audio;\n }\n /**\r\n * Gets the audio volume for the speech.\r\n *\r\n * @type {number}\r\n */\n\n }, {\n key: "volume",\n get: function get() {\n return this._audio.volume;\n }\n /**\r\n * Sets the audio volume for the speech.\r\n */\n ,\n set: function set(volume) {\n this._audio.volume = volume;\n }\n /**\r\n * Set the audio\'s current local time and play it.\r\n *\r\n * @private\r\n */\n\n }, {\n key: "_playAudio",\n value: function _playAudio() {\n var _this2 = this;\n\n if (this._speechmarkOffset < 0) {\n this._audio.currentTime = this._speechmarkOffset;\n setTimeout(function () {\n if (_this2._playing) {\n _this2._audio.currentTime = (_this2._localTime + _this2._speechmarkOffset) / 1000;\n\n _this2._audio.play();\n }\n }, -this._speechmarkOffset);\n } else {\n this._audio.currentTime = 0;\n\n this._audio.play();\n }\n }\n /**\r\n * Pause the audio once it is playable.\r\n *\r\n * @private\r\n */\n\n }, {\n key: "_pauseAudio",\n value: function _pauseAudio() {\n var _this3 = this;\n\n this._audio.play().then(function () {\n if (!_this3._playing) {\n _this3._audio.pause();\n }\n });\n }\n }, {\n key: "play",\n value: function play(currentTime, onFinish, onError, onInterrupt) {\n this._audioFinished = false;\n\n this._playAudio();\n\n return Speech_get(Speech_getPrototypeOf(Speech.prototype), "play", this).call(this, currentTime, onFinish, onError, onInterrupt);\n }\n }, {\n key: "pause",\n value: function pause(currentTime) {\n this._pauseAudio();\n\n Speech_get(Speech_getPrototypeOf(Speech.prototype), "pause", this).call(this, currentTime);\n }\n }, {\n key: "resume",\n value: function resume(currentTime, onFinish, onError, onInterrupt) {\n this._audioFinished = false;\n\n this._audio.play();\n\n return Speech_get(Speech_getPrototypeOf(Speech.prototype), "resume", this).call(this, currentTime, onFinish, onError, onInterrupt);\n }\n }, {\n key: "cancel",\n value: function cancel() {\n this._pauseAudio();\n\n Speech_get(Speech_getPrototypeOf(Speech.prototype), "cancel", this).call(this);\n }\n }, {\n key: "stop",\n value: function stop() {\n this._pauseAudio();\n\n this._audio.currentTime = 0;\n\n Speech_get(Speech_getPrototypeOf(Speech.prototype), "stop", this).call(this);\n }\n }]);\n\n return Speech;\n}(awspack_AbstractSpeech);\n\n/* harmony default export */ var awspack_Speech = (Speech_Speech);\n// CONCATENATED MODULE: ./src/Babylon.js/awspack/Speech.js\nfunction awspack_Speech_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { awspack_Speech_typeof = function _typeof(obj) { return typeof obj; }; } else { awspack_Speech_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return awspack_Speech_typeof(obj); }\n\nfunction awspack_Speech_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction awspack_Speech_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction awspack_Speech_createClass(Constructor, protoProps, staticProps) { if (protoProps) awspack_Speech_defineProperties(Constructor.prototype, protoProps); if (staticProps) awspack_Speech_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction awspack_Speech_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { awspack_Speech_get = Reflect.get; } else { awspack_Speech_get = function _get(target, property, receiver) { var base = awspack_Speech_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return awspack_Speech_get(target, property, receiver || target); }\n\nfunction awspack_Speech_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = awspack_Speech_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction awspack_Speech_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) awspack_Speech_setPrototypeOf(subClass, superClass); }\n\nfunction awspack_Speech_setPrototypeOf(o, p) { awspack_Speech_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return awspack_Speech_setPrototypeOf(o, p); }\n\nfunction awspack_Speech_createSuper(Derived) { var hasNativeReflectConstruct = awspack_Speech_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = awspack_Speech_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = awspack_Speech_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return awspack_Speech_possibleConstructorReturn(this, result); }; }\n\nfunction awspack_Speech_possibleConstructorReturn(self, call) { if (call && (awspack_Speech_typeof(call) === "object" || typeof call === "function")) { return call; } return awspack_Speech_assertThisInitialized(self); }\n\nfunction awspack_Speech_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction awspack_Speech_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction awspack_Speech_getPrototypeOf(o) { awspack_Speech_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return awspack_Speech_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n/**\r\n * @extends core/Speech\r\n * @alias Babylon.js/Speech\r\n */\n\nvar awspack_Speech_Speech = /*#__PURE__*/function (_CoreSpeech) {\n awspack_Speech_inherits(Speech, _CoreSpeech);\n\n var _super = awspack_Speech_createSuper(Speech);\n\n /**\r\n * @constructor\r\n *\r\n * @param {Babylon.js/TextToSpeechFeature} speaker - The owner of the Speech\r\n * that will emit speechmark messages.\r\n * @param {string} text - The text of the speech.\r\n * @param {Array.} [speechmarks=[]] - An array of speechmark objects representing\r\n * the text and timing of the speech.\r\n * @param {Object} audioConfig - Object containing audio and url.\r\n * @param {external:Audio} audioConfig.audio - Playable audio object.\r\n */\n function Speech() {\n var _this;\n\n awspack_Speech_classCallCheck(this, Speech);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _this._audio.onEndedObservable.add(function () {\n _this._audioFinished = true;\n });\n\n return _this;\n }\n\n awspack_Speech_createClass(Speech, [{\n key: "_playAudio",\n value: function _playAudio() {\n if (this._speechmarkOffset < 0) {\n this._audio.play(-this._speechmarkOffset / 1000);\n } else {\n this._audio.play();\n }\n }\n }, {\n key: "_pauseAudio",\n value: function _pauseAudio() {\n this._audio.pause();\n }\n }, {\n key: "volume",\n get: function get() {\n return this._audio.getVolume();\n },\n set: function set(volume) {\n this._audio.setVolume(volume);\n }\n }, {\n key: "play",\n value: function play(currentTime, onFinish, onError, onInterrupt) {\n this._audio.stop();\n\n return awspack_Speech_get(awspack_Speech_getPrototypeOf(Speech.prototype), "play", this).call(this, currentTime, onFinish, onError, onInterrupt);\n }\n }, {\n key: "stop",\n value: function stop() {\n this._audio.stop();\n\n awspack_AbstractSpeech.prototype.stop.call(this);\n }\n }]);\n\n return Speech;\n}(awspack_Speech);\n\n/* harmony default export */ var Babylon_js_awspack_Speech = (awspack_Speech_Speech);\n// CONCATENATED MODULE: ./src/core/awspack/TextToSpeechFeature.js\nfunction TextToSpeechFeature_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { TextToSpeechFeature_typeof = function _typeof(obj) { return typeof obj; }; } else { TextToSpeechFeature_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return TextToSpeechFeature_typeof(obj); }\n\nfunction TextToSpeechFeature_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction TextToSpeechFeature_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction TextToSpeechFeature_createClass(Constructor, protoProps, staticProps) { if (protoProps) TextToSpeechFeature_defineProperties(Constructor.prototype, protoProps); if (staticProps) TextToSpeechFeature_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction TextToSpeechFeature_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { TextToSpeechFeature_get = Reflect.get; } else { TextToSpeechFeature_get = function _get(target, property, receiver) { var base = TextToSpeechFeature_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return TextToSpeechFeature_get(target, property, receiver || target); }\n\nfunction TextToSpeechFeature_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = TextToSpeechFeature_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction TextToSpeechFeature_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) TextToSpeechFeature_setPrototypeOf(subClass, superClass); }\n\nfunction TextToSpeechFeature_setPrototypeOf(o, p) { TextToSpeechFeature_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return TextToSpeechFeature_setPrototypeOf(o, p); }\n\nfunction TextToSpeechFeature_createSuper(Derived) { var hasNativeReflectConstruct = TextToSpeechFeature_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = TextToSpeechFeature_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = TextToSpeechFeature_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return TextToSpeechFeature_possibleConstructorReturn(this, result); }; }\n\nfunction TextToSpeechFeature_possibleConstructorReturn(self, call) { if (call && (TextToSpeechFeature_typeof(call) === "object" || typeof call === "function")) { return call; } return TextToSpeechFeature_assertThisInitialized(self); }\n\nfunction TextToSpeechFeature_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction TextToSpeechFeature_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction TextToSpeechFeature_getPrototypeOf(o) { TextToSpeechFeature_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return TextToSpeechFeature_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n/**\r\n * @extends AbstractTextToSpeechFeature\r\n * @alias core/TextToSpeechFeature\r\n */\n\nvar TextToSpeechFeature_TextToSpeechFeature = /*#__PURE__*/function (_AbstractTextToSpeech) {\n TextToSpeechFeature_inherits(TextToSpeechFeature, _AbstractTextToSpeech);\n\n var _super = TextToSpeechFeature_createSuper(TextToSpeechFeature);\n\n function TextToSpeechFeature() {\n var _this;\n\n TextToSpeechFeature_classCallCheck(this, TextToSpeechFeature);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n _this._enabled = false;\n\n _this._setAudioContext();\n\n _this._observeAudioContext();\n\n return _this;\n }\n /**\r\n * Store the audio context that will be used to ensure audio can be played.\r\n *\r\n * @private\r\n */\n\n\n TextToSpeechFeature_createClass(TextToSpeechFeature, [{\n key: "_setAudioContext",\n value: function _setAudioContext() {\n this._audioContext = new AudioContext();\n }\n /**\r\n * Listen for state changes on the audio context to determine whether the feature\r\n * is enabled.\r\n *\r\n * @private\r\n */\n\n }, {\n key: "_observeAudioContext",\n value: function _observeAudioContext() {\n var _this2 = this;\n\n if (this._audioContext) {\n this._audioContext.onstatechange = function () {\n if (_this2._audioContext.state === \'running\') {\n _this2._enabled = true;\n } else {\n _this2._enabled = false;\n console.warn(\'The audio context is not running. Speech will not be able to be played until it is resumed. Use the "TextToSpeechFeature.resumeAudio" method to try to resume it after a user gesture.\');\n }\n };\n\n this._audioContext.onstatechange();\n }\n }\n /**\r\n * Create an Audio object of speech audio for the given speech text.\r\n *\r\n * @private\r\n *\r\n * @param {Object} params - Parameters object compatible with Polly.synthesizeSpeech.\r\n *\r\n * @returns {Promise} Resolves with an object containing the audio URL and Audio\r\n * object.\r\n */\n\n }, {\n key: "_synthesizeAudio",\n value: function _synthesizeAudio(params) {\n var _this3 = this;\n\n return TextToSpeechFeature_get(TextToSpeechFeature_getPrototypeOf(TextToSpeechFeature.prototype), "_synthesizeAudio", this).call(this, params).then(function (result) {\n var url = result.url; // Create an Audio object that points to the presigned url\n\n var audio = new Audio(url);\n audio.loop = _this3.loop;\n audio.crossOrigin = \'anonymous\';\n audio.preload = \'auto\';\n result.audio = audio;\n return new Promise(function (resolve) {\n // Resolve once the minimum amount is loaded\n audio.addEventListener(\'canplaythrough\', function () {\n resolve(result);\n }); // Start loading the audio\n\n document.body.appendChild(audio);\n audio.load();\n });\n });\n }\n /**\r\n * Create a new Speech object for the speaker.\r\n *\r\n * @private\r\n *\r\n * @param {TextToSpeech} speaker - The TextToSpeech instance that will own the speech.\r\n * @param {string} text - Text of the speech.\r\n * @param {Object} speechmarks - Speechmarks for the speech.\r\n * @param {Object} audioConfig - Audio for the speech.\r\n *\r\n * @returns {AbstractSpeech}\r\n */\n\n }, {\n key: "_createSpeech",\n value: function _createSpeech(text, speechmarks, audioConfig) {\n return new Babylon_js_awspack_Speech(this, text, speechmarks, audioConfig);\n }\n /**\r\n * Gets whether or not the audio context is running and speech can be played.\r\n *\r\n * @readonly\r\n * @type {boolean}\r\n */\n\n }, {\n key: "enabled",\n get: function get() {\n return this._enabled;\n }\n /**\r\n * Try to resume the audio context. This will be automatically executed each time\r\n * speech is played or resumed. If using manually, it should be called after a\r\n * user interaction occurs.\r\n *\r\n * @returns {Deferred} - Resolves once the audio context has resumed.\r\n */\n\n }, {\n key: "resumeAudio",\n value: function resumeAudio() {\n var _this4 = this;\n\n var promise = new core_Deferred(function (resolve, reject) {\n _this4._audioContext.resume().then(function () {\n _this4._enabled = true;\n resolve();\n })["catch"](function (e) {\n _this4._enabled = false;\n reject(e);\n });\n });\n return promise;\n }\n }, {\n key: "_startSpeech",\n value: function _startSpeech(text, config) {\n var _this5 = this;\n\n var playMethod = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : \'play\';\n var currentPromise = {\n play: new core_Deferred(undefined, function () {\n currentPromise.speech.cancel();\n }, function () {\n currentPromise.speech.cancel();\n }, function () {\n currentPromise.speech.cancel();\n }),\n speech: new core_Deferred()\n };\n this._currentPromise = currentPromise; // Try to start the audio context\n\n this.resumeAudio().then(function () {\n // Exit if the promise is no longer pending because of user interaction\n if (!currentPromise.play.pending) {\n return;\n } // Cancel if another call to play has already been made\n else if (_this5._currentPromise !== currentPromise) {\n currentPromise.play.cancel();\n return;\n } // The audio context is running so the speech can be played\n\n\n if (_this5._enabled) {\n TextToSpeechFeature_get(TextToSpeechFeature_getPrototypeOf(TextToSpeechFeature.prototype), "_startSpeech", _this5).call(_this5, text, config, playMethod);\n } // Reject if the audio context is not running\n else {\n currentPromise.reject(new Error("Cannot ".concat(playMethod, " speech on host ").concat(_this5._host.id, ". The audio context is not running. Use the \\"TextToSpeechFeature.resumeAudio\\" method to try to resume it after a user gesture.")));\n }\n });\n return currentPromise.play;\n }\n }, {\n key: "play",\n value: function play(text, config) {\n return this._startSpeech(text, config, \'play\');\n }\n }, {\n key: "resume",\n value: function resume(text, config) {\n return this._startSpeech(text, config, \'resume\');\n }\n }, {\n key: "installApi",\n value: function installApi() {\n var _this6 = this;\n\n var api = TextToSpeechFeature_get(TextToSpeechFeature_getPrototypeOf(TextToSpeechFeature.prototype), "installApi", this).call(this);\n\n Object.defineProperties(api, {\n /**\r\n * @memberof TextToSpeechFeature\r\n * @instance\r\n * @see core/TextToSpeechFeature#enabled\r\n */\n enabled: {\n get: function get() {\n return _this6._enabled;\n }\n }\n });\n return api;\n }\n }]);\n\n return TextToSpeechFeature;\n}(awspack_AbstractTextToSpeechFeature);\n\n/* harmony default export */ var awspack_TextToSpeechFeature = (TextToSpeechFeature_TextToSpeechFeature);\n// CONCATENATED MODULE: ./src/Babylon.js/awspack/TextToSpeechFeature.js\nfunction awspack_TextToSpeechFeature_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { awspack_TextToSpeechFeature_typeof = function _typeof(obj) { return typeof obj; }; } else { awspack_TextToSpeechFeature_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return awspack_TextToSpeechFeature_typeof(obj); }\n\nfunction awspack_TextToSpeechFeature_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction awspack_TextToSpeechFeature_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction awspack_TextToSpeechFeature_createClass(Constructor, protoProps, staticProps) { if (protoProps) awspack_TextToSpeechFeature_defineProperties(Constructor.prototype, protoProps); if (staticProps) awspack_TextToSpeechFeature_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction awspack_TextToSpeechFeature_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { awspack_TextToSpeechFeature_get = Reflect.get; } else { awspack_TextToSpeechFeature_get = function _get(target, property, receiver) { var base = awspack_TextToSpeechFeature_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return awspack_TextToSpeechFeature_get(target, property, receiver || target); }\n\nfunction awspack_TextToSpeechFeature_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = awspack_TextToSpeechFeature_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction awspack_TextToSpeechFeature_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) awspack_TextToSpeechFeature_setPrototypeOf(subClass, superClass); }\n\nfunction awspack_TextToSpeechFeature_setPrototypeOf(o, p) { awspack_TextToSpeechFeature_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return awspack_TextToSpeechFeature_setPrototypeOf(o, p); }\n\nfunction awspack_TextToSpeechFeature_createSuper(Derived) { var hasNativeReflectConstruct = awspack_TextToSpeechFeature_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = awspack_TextToSpeechFeature_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = awspack_TextToSpeechFeature_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return awspack_TextToSpeechFeature_possibleConstructorReturn(this, result); }; }\n\nfunction awspack_TextToSpeechFeature_possibleConstructorReturn(self, call) { if (call && (awspack_TextToSpeechFeature_typeof(call) === "object" || typeof call === "function")) { return call; } return awspack_TextToSpeechFeature_assertThisInitialized(self); }\n\nfunction awspack_TextToSpeechFeature_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction awspack_TextToSpeechFeature_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction awspack_TextToSpeechFeature_getPrototypeOf(o) { awspack_TextToSpeechFeature_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return awspack_TextToSpeechFeature_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n/**\r\n * Babylonjs Scene object\r\n * @external "BABYLON.Scene"\r\n * @see https://doc.babylonjs.com/api/classes/babylon.scene\r\n */\n\n/**\r\n * Babylonjs Mesh object\r\n * @external "BABYLON.Mesh"\r\n * @see https://doc.babylonjs.com/api/classes/babylon.mesh\r\n */\n\n/**\r\n * @extends core/TextToSpeechFeature\r\n * @alias Babylon.js/TextToSpeechFeature\r\n */\n\nvar awspack_TextToSpeechFeature_TextToSpeechFeature = /*#__PURE__*/function (_CoreTextToSpeechFeat) {\n awspack_TextToSpeechFeature_inherits(TextToSpeechFeature, _CoreTextToSpeechFeat);\n\n var _super = awspack_TextToSpeechFeature_createSuper(TextToSpeechFeature);\n\n /**\r\n * @constructor\r\n *\r\n * @param {Babylon.js/HostObject} host - Host object managing the feature.\r\n * @param {Object=} options - Options that will be sent to Polly for each speech.\r\n * @param {external:"BABYLON.Scene"} options.scene - Babylon scene containing the host owner.\r\n * @param {external:"BABYLON.Mesh"=} options.attachTo - Optional mesh to attach the speech\r\n * audio to.\r\n */\n function TextToSpeechFeature(host) {\n var _this;\n\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n voice: undefined,\n engine: undefined,\n language: undefined,\n audioFormat: \'mp3\',\n sampleRate: undefined,\n scene: undefined,\n attachTo: undefined\n };\n\n awspack_TextToSpeechFeature_classCallCheck(this, TextToSpeechFeature);\n\n _this = _super.call(this, host, options);\n _this._scene = options.scene;\n _this._attachTo = options.attachTo || host.owner;\n return _this;\n }\n\n awspack_TextToSpeechFeature_createClass(TextToSpeechFeature, [{\n key: "_setAudioContext",\n value: function _setAudioContext() {\n this._audioContext = BABYLON.Engine.audioEngine.audioContext;\n }\n }, {\n key: "_observeAudioContext",\n value: function _observeAudioContext() {\n var _this2 = this;\n\n if (this._audioContext) {\n awspack_TextToSpeechFeature_get(awspack_TextToSpeechFeature_getPrototypeOf(TextToSpeechFeature.prototype), "_observeAudioContext", this).call(this);\n\n var onstatechange = this._audioContext.onstatechange;\n\n this._audioContext.onstatechange = function () {\n onstatechange();\n\n if (_this2._enabled) {\n BABYLON.Engine.audioEngine.unlock();\n }\n };\n }\n }\n }, {\n key: "_synthesizeAudio",\n value: function _synthesizeAudio(params) {\n var _this3 = this;\n\n // Babylon audio will create the web Audio object, so we don\'t need coreAws.TextToSpeechFeature\n // to create it. Use AbstractTextToSpeechFeature.prototype._synthesizeAudio instead.\n // eslint-disable-next-line no-underscore-dangle\n return awspack_AbstractTextToSpeechFeature.prototype._synthesizeAudio.call(this, params).then(function (result) {\n return new Promise(function (resolve) {\n var url = result.url;\n var name = params.Text;\n result.audio = new BABYLON.Sound(name, url, _this3._scene, function () {\n resolve(result);\n }, {\n streaming: true,\n skipCodecCheck: true\n });\n\n if (_this3._attachTo !== undefined) {\n result.audio.attachToMesh(_this3._attachTo);\n }\n });\n });\n }\n }]);\n\n return TextToSpeechFeature;\n}(awspack_TextToSpeechFeature);\n\n/* harmony default export */ var Babylon_js_awspack_TextToSpeechFeature = (awspack_TextToSpeechFeature_TextToSpeechFeature);\n// CONCATENATED MODULE: ./src/Babylon.js/awspack/index.js\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n/**\r\n * @module babylon/awspack\r\n */\n\n/* harmony default export */ var awspack = ({\n /**\r\n * @see Babylon.js/TextToSpeechFeature\r\n */\n TextToSpeechFeature: Babylon_js_awspack_TextToSpeechFeature,\n\n /**\r\n * @see core/TextToSpeechUtils\r\n */\n TextToSpeechUtils: awspack_TextToSpeechUtils,\n\n /**\r\n * @see Babylon.js/Speech\r\n */\n Speech: Babylon_js_awspack_Speech\n});\n// CONCATENATED MODULE: ./src/Babylon.js/animpack/state/SingleState.js\nfunction state_SingleState_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { state_SingleState_typeof = function _typeof(obj) { return typeof obj; }; } else { state_SingleState_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return state_SingleState_typeof(obj); }\n\nfunction SingleState_toConsumableArray(arr) { return SingleState_arrayWithoutHoles(arr) || SingleState_iterableToArray(arr) || SingleState_unsupportedIterableToArray(arr) || SingleState_nonIterableSpread(); }\n\nfunction SingleState_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."); }\n\nfunction SingleState_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return SingleState_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return SingleState_arrayLikeToArray(o, minLen); }\n\nfunction SingleState_iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction SingleState_arrayWithoutHoles(arr) { if (Array.isArray(arr)) return SingleState_arrayLikeToArray(arr); }\n\nfunction SingleState_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction state_SingleState_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction state_SingleState_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction state_SingleState_createClass(Constructor, protoProps, staticProps) { if (protoProps) state_SingleState_defineProperties(Constructor.prototype, protoProps); if (staticProps) state_SingleState_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction SingleState_set(target, property, value, receiver) { if (typeof Reflect !== "undefined" && Reflect.set) { SingleState_set = Reflect.set; } else { SingleState_set = function set(target, property, value, receiver) { var base = SingleState_superPropBase(target, property); var desc; if (base) { desc = Object.getOwnPropertyDescriptor(base, property); if (desc.set) { desc.set.call(receiver, value); return true; } else if (!desc.writable) { return false; } } desc = Object.getOwnPropertyDescriptor(receiver, property); if (desc) { if (!desc.writable) { return false; } desc.value = value; Object.defineProperty(receiver, property, desc); } else { SingleState_defineProperty(receiver, property, value); } return true; }; } return SingleState_set(target, property, value, receiver); }\n\nfunction _set(target, property, value, receiver, isStrict) { var s = SingleState_set(target, property, value, receiver || target); if (!s && isStrict) { throw new Error(\'failed to set property\'); } return value; }\n\nfunction SingleState_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction SingleState_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { SingleState_get = Reflect.get; } else { SingleState_get = function _get(target, property, receiver) { var base = SingleState_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return SingleState_get(target, property, receiver || target); }\n\nfunction SingleState_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = state_SingleState_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction state_SingleState_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) state_SingleState_setPrototypeOf(subClass, superClass); }\n\nfunction state_SingleState_setPrototypeOf(o, p) { state_SingleState_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return state_SingleState_setPrototypeOf(o, p); }\n\nfunction state_SingleState_createSuper(Derived) { var hasNativeReflectConstruct = state_SingleState_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = state_SingleState_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = state_SingleState_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return state_SingleState_possibleConstructorReturn(this, result); }; }\n\nfunction state_SingleState_possibleConstructorReturn(self, call) { if (call && (state_SingleState_typeof(call) === "object" || typeof call === "function")) { return call; } return state_SingleState_assertThisInitialized(self); }\n\nfunction state_SingleState_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction state_SingleState_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction state_SingleState_getPrototypeOf(o) { state_SingleState_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return state_SingleState_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n/**\r\n * Babylonjs AnimationGroup object\r\n * @external "BABYLON.AnimationGroup"\r\n * @see https://doc.babylonjs.com/api/classes/babylon.animationgroup\r\n */\n\nvar babylonBlendModes = {\n Override: false,\n Additive: true\n};\n/**\r\n * @extends core/SingleState\r\n * @alias Babylon.js/SingleState\r\n */\n\nvar state_SingleState_SingleState = /*#__PURE__*/function (_CoreSingleState) {\n state_SingleState_inherits(SingleState, _CoreSingleState);\n\n var _super = state_SingleState_createSuper(SingleState);\n\n /**\r\n * @constructor\r\n *\r\n * @param {Object=} options - Options for the animation state.\r\n * @param {external:"BABYLON.AnimationGroup"} babylonGroup - The animation group that controls\r\n * playback of the animation.\r\n * @param {external:"BABYLON.Scene"} babylonScene - The scene containing the babylonGroup.\r\n **/\n function SingleState() {\n var _this;\n\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var babylonGroup = arguments.length > 1 ? arguments[1] : undefined;\n var babylonScene = arguments.length > 2 ? arguments[2] : undefined;\n\n state_SingleState_classCallCheck(this, SingleState);\n\n _this = _super.call(this, options);\n _this._onFinishedEvent = _this._onFinishedEvent.bind(state_SingleState_assertThisInitialized(_this));\n _this._onLoopEvent = _this._onLoopEvent.bind(state_SingleState_assertThisInitialized(_this));\n _this._from = Number.isNaN(Number(options.from)) ? babylonGroup.from : Number(options.from);\n _this._to = Number.isNaN(Number(options.to)) ? babylonGroup.to : Number(options.to);\n babylonGroup.normalize(_this._from, _this._to);\n _this._babylonScene = babylonScene;\n _this._babylonAnimations = SingleState_toConsumableArray(babylonGroup.targetedAnimations);\n _this._babylonAnimatables = [];\n _this._babylonNumAnimations = _this._babylonAnimations.length;\n _this._babylonLoopCount = _this._loopCount * _this._babylonNumAnimations;\n _this._looped = 0;\n _this._finished = 0;\n _this._started = false;\n return _this;\n }\n\n state_SingleState_createClass(SingleState, [{\n key: "normalizedTime",\n get: function get() {\n var animatable = this._babylonAnimatables[0];\n\n if (animatable && animatable.masterFrame) {\n return (animatable.masterFrame - this._from) / (this._to - this._from);\n }\n\n return 0;\n },\n set: function set(time) {\n var _this2 = this;\n\n time = core_MathUtils.clamp(time);\n\n this._babylonAnimatables.forEach(function (animatable) {\n var targetFrame = (_this2._to - _this2._from) * time + _this2._from;\n animatable.goToFrame(targetFrame);\n });\n }\n }, {\n key: "timeScale",\n get: function get() {\n return SingleState_get(state_SingleState_getPrototypeOf(SingleState.prototype), "timeScale", this);\n },\n set: function set(timeScale) {\n _set(state_SingleState_getPrototypeOf(SingleState.prototype), "timeScale", timeScale, this, true);\n\n this._babylonAnimatables.forEach(function (animatable) {\n animatable.speedRatio = timeScale;\n });\n }\n }, {\n key: "loopCount",\n get: function get() {\n return SingleState_get(state_SingleState_getPrototypeOf(SingleState.prototype), "loopCount", this);\n },\n set: function set(loopCount) {\n _set(state_SingleState_getPrototypeOf(SingleState.prototype), "loopCount", loopCount, this, true);\n\n this._babylonAnimatables.forEach(function (animatable) {\n animatable.loopAnimation = loopCount > 1;\n });\n }\n /**\r\n * Stop and discard of currently stored animatables and generate new ones that\r\n * are paused.\r\n *\r\n * @private\r\n */\n\n }, {\n key: "_createAnimatables",\n value: function _createAnimatables() {\n var _this3 = this;\n\n // Create new animatables\n var oldAnimatables = SingleState_toConsumableArray(this._babylonAnimatables);\n\n this._babylonAnimatables.length = 0;\n\n this._babylonAnimations.forEach(function (targetedAnimation) {\n var animatable = _this3._babylonScene.beginDirectAnimation(targetedAnimation.target, [targetedAnimation.animation], _this3._from, _this3._to, _this3._loopCount > 1, 0, _this3._onFinishedEvent, _this3._onLoopEvent, babylonBlendModes[_this3._blendMode]);\n\n animatable.weight = _this3._internalWeight;\n animatable.disposeOnEnd = false;\n\n _this3._babylonAnimatables.push(animatable);\n }); // Dispose of the old animatables\n\n\n oldAnimatables.forEach(function (animatable) {\n animatable.stop();\n });\n }\n /**\r\n * Reset variables and animations. Should be called before playing from the\r\n * beginning and if calling stop.\r\n *\r\n * @private\r\n */\n\n }, {\n key: "_reset",\n value: function _reset() {\n this._looped = 0;\n this._finished = 0;\n this._started = true;\n\n this._createAnimatables();\n }\n /**\r\n * Pause the animation and reset counters once the animation finishes.\r\n *\r\n * @private\r\n */\n\n }, {\n key: "_onFinishedEvent",\n value: function _onFinishedEvent() {\n this._finished += 1;\n\n if (this._finished === this._babylonNumAnimations) {\n this._looped = 0;\n this._finished = 0; // Pause the animations\n\n this._babylonAnimatables.forEach(function (animatable) {\n animatable.speedRatio = 0;\n });\n\n this._promises.play.resolve(); // Stop evaluating interpolators if they have already completed\n\n\n if (!this.weightPending && !this.timeScalePending) {\n this._paused = true;\n }\n }\n }\n /**\r\n * Increment loop counter for each animation loop. If loop counter meets\r\n * loopCount, notifiy that the animation has finished.\r\n *\r\n * @private\r\n */\n\n }, {\n key: "_onLoopEvent",\n value: function _onLoopEvent() {\n this._looped += 1; // Signal the state has finished\n\n if (this._looped === this._babylonLoopCount) {\n this._finished = this._babylonNumAnimations - 1;\n\n this._onFinishedEvent();\n }\n }\n }, {\n key: "updateInternalWeight",\n value: function updateInternalWeight(factor) {\n var _this4 = this;\n\n SingleState_get(state_SingleState_getPrototypeOf(SingleState.prototype), "updateInternalWeight", this).call(this, factor);\n\n this._babylonAnimatables.forEach(function (animatable) {\n animatable.weight = _this4._internalWeight;\n });\n }\n }, {\n key: "play",\n value: function play(onFinish, onError, onCancel) {\n this._reset();\n\n this.timeScale = this._timeScale;\n return SingleState_get(state_SingleState_getPrototypeOf(SingleState.prototype), "play", this).call(this, onFinish, onError, onCancel);\n }\n }, {\n key: "pause",\n value: function pause() {\n this._babylonAnimatables.forEach(function (animatable) {\n animatable.speedRatio = 0;\n });\n\n return SingleState_get(state_SingleState_getPrototypeOf(SingleState.prototype), "pause", this).call(this);\n }\n }, {\n key: "resume",\n value: function resume(onFinish, onError, onCancel) {\n if (!this._started) {\n this._reset();\n }\n\n this.timeScale = this._timeScale;\n return SingleState_get(state_SingleState_getPrototypeOf(SingleState.prototype), "resume", this).call(this, onFinish, onError, onCancel);\n }\n }, {\n key: "cancel",\n value: function cancel() {\n this._babylonAnimatables.forEach(function (animatable) {\n animatable.speedRatio = 0;\n });\n\n return SingleState_get(state_SingleState_getPrototypeOf(SingleState.prototype), "cancel", this).call(this);\n }\n }, {\n key: "stop",\n value: function stop() {\n this._reset();\n\n return SingleState_get(state_SingleState_getPrototypeOf(SingleState.prototype), "stop", this).call(this);\n }\n }, {\n key: "discard",\n value: function discard() {\n SingleState_get(state_SingleState_getPrototypeOf(SingleState.prototype), "discard", this).call(this); // Dispose of the babylon resources\n\n\n this._babylonAnimatables.forEach(function (animatable) {\n animatable.stop();\n });\n\n delete this._babylonAnimations;\n delete this._babylonAnimatables;\n delete this._babylonScene;\n }\n }, {\n key: "deactivate",\n value: function deactivate() {\n SingleState_get(state_SingleState_getPrototypeOf(SingleState.prototype), "deactivate", this).call(this);\n\n this._createAnimatables();\n }\n }]);\n\n return SingleState;\n}(state_SingleState);\n\n/* harmony default export */ var animpack_state_SingleState = (state_SingleState_SingleState);\n// CONCATENATED MODULE: ./src/Babylon.js/animpack/AnimationFeature.js\nfunction animpack_AnimationFeature_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { animpack_AnimationFeature_typeof = function _typeof(obj) { return typeof obj; }; } else { animpack_AnimationFeature_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return animpack_AnimationFeature_typeof(obj); }\n\nfunction animpack_AnimationFeature_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction animpack_AnimationFeature_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction animpack_AnimationFeature_createClass(Constructor, protoProps, staticProps) { if (protoProps) animpack_AnimationFeature_defineProperties(Constructor.prototype, protoProps); if (staticProps) animpack_AnimationFeature_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction animpack_AnimationFeature_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { animpack_AnimationFeature_get = Reflect.get; } else { animpack_AnimationFeature_get = function _get(target, property, receiver) { var base = animpack_AnimationFeature_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return animpack_AnimationFeature_get(target, property, receiver || target); }\n\nfunction animpack_AnimationFeature_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = animpack_AnimationFeature_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction animpack_AnimationFeature_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) animpack_AnimationFeature_setPrototypeOf(subClass, superClass); }\n\nfunction animpack_AnimationFeature_setPrototypeOf(o, p) { animpack_AnimationFeature_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return animpack_AnimationFeature_setPrototypeOf(o, p); }\n\nfunction animpack_AnimationFeature_createSuper(Derived) { var hasNativeReflectConstruct = animpack_AnimationFeature_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = animpack_AnimationFeature_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = animpack_AnimationFeature_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return animpack_AnimationFeature_possibleConstructorReturn(this, result); }; }\n\nfunction animpack_AnimationFeature_possibleConstructorReturn(self, call) { if (call && (animpack_AnimationFeature_typeof(call) === "object" || typeof call === "function")) { return call; } return animpack_AnimationFeature_assertThisInitialized(self); }\n\nfunction animpack_AnimationFeature_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction animpack_AnimationFeature_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction animpack_AnimationFeature_getPrototypeOf(o) { animpack_AnimationFeature_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return animpack_AnimationFeature_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\nAnimationTypes.single = animpack_state_SingleState;\n\n/**\n * @extends core/AnimationFeature\n * @alias Babylon.js/AnimationFeature\n */\n\nvar animpack_AnimationFeature_AnimationFeature = /*#__PURE__*/function (_CoreAnimationFeature) {\n animpack_AnimationFeature_inherits(AnimationFeature, _CoreAnimationFeature);\n\n var _super = animpack_AnimationFeature_createSuper(AnimationFeature);\n\n /**\n * @constructor\n *\n * @param {Babylon.js/HostObject} host - Host object that owns the feature.\n */\n function AnimationFeature(host) {\n var _this;\n\n animpack_AnimationFeature_classCallCheck(this, AnimationFeature);\n\n _this = _super.call(this, host);\n _this._babylonScene = host.owner.getScene();\n return _this;\n }\n\n animpack_AnimationFeature_createClass(AnimationFeature, [{\n key: "_createSingleState",\n value: function _createSingleState(options) {\n return new animpack_state_SingleState(options, options.clip, this._babylonScene);\n }\n }, {\n key: "discard",\n value: function discard() {\n delete this._babylonScene;\n\n animpack_AnimationFeature_get(animpack_AnimationFeature_getPrototypeOf(AnimationFeature.prototype), "discard", this).call(this);\n }\n }]);\n\n return AnimationFeature;\n}(animpack_AnimationFeature);\n\n/* harmony default export */ var Babylon_js_animpack_AnimationFeature = (animpack_AnimationFeature_AnimationFeature);\n// CONCATENATED MODULE: ./src/Babylon.js/animpack/index.js\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/**\r\n * @module babylon/animpack\r\n */\n\n\n\n\n\n\n\n\n\n\n\n/**\r\n * @namespace\r\n */\n\nvar Easing = {\n /**\r\n * @see Linear\r\n */\n Linear: Linear,\n\n /**\r\n * @see Quadratic\r\n */\n Quadratic: Quadratic,\n\n /**\r\n * @see Cubic\r\n */\n Cubic: Cubic,\n\n /**\r\n * @see Quartic\r\n */\n Quartic: Quartic,\n\n /**\r\n * @see Quintic\r\n */\n Quintic: Quintic,\n\n /**\r\n * @see Sinusoidal\r\n */\n Sinusoidal: Sinusoidal,\n\n /**\r\n * @see Exponential\r\n */\n Exponential: Exponential,\n\n /**\r\n * @see Circular\r\n */\n Circular: Circular,\n\n /**\r\n * @see Elastic\r\n */\n Elastic: Elastic,\n\n /**\r\n * @see Back\r\n */\n Back: Back,\n\n /**\r\n * @see Bounce\r\n */\n Bounce: Bounce\n};\n/* harmony default export */ var animpack = ({\n /**\r\n * @see Babylon.js/AnimationFeature\r\n */\n AnimationFeature: Babylon_js_animpack_AnimationFeature,\n\n /**\r\n * @see AnimationLayer\r\n */\n AnimationLayer: animpack_AnimationLayer,\n\n /**\r\n * @see Babylon.js/SingleState\r\n */\n SingleState: animpack_state_SingleState,\n\n /**\r\n * @see TransitionState\r\n */\n TransitionState: state_TransitionState,\n\n /**\r\n * @see FreeBlendState\r\n */\n FreeBlendState: state_FreeBlendState,\n\n /**\r\n * @see QueueState\r\n */\n QueueState: state_QueueState,\n\n /**\r\n * @see RandomAnimationState\r\n */\n RandomAnimationState: state_RandomAnimationState,\n\n /**\r\n * @see Blend1dState\r\n */\n Blend1dState: state_Blend1dState,\n\n /**\r\n * @see Blend2dState\r\n */\n Blend2dState: state_Blend2dState,\n\n /**\r\n * @see AnimationUtils\r\n */\n AnimationUtils: animpack_AnimationUtils,\n\n /**\r\n * @see Easing\r\n */\n Easing: Easing,\n\n /**\r\n * @see LayerBlendModes\r\n */\n LayerBlendModes: LayerBlendModes,\n\n /**\r\n * @see DefaultLayerBlendMode\r\n */\n DefaultLayerBlendMode: DefaultLayerBlendMode,\n\n /**\r\n * @see AnimationTypes\r\n */\n AnimationTypes: AnimationTypes\n});\n// CONCATENATED MODULE: ./src/Babylon.js/index.js\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/**\r\n * @module babylon/HOST\r\n */\n\n\n\n\n\n\n\n\n\n\n\n/* harmony default export */ var Babylon_js = __webpack_exports__["default"] = ({\n /**\r\n * @see env\r\n */\n env: env,\n\n /**\r\n * @see Utils\r\n */\n Utils: core_Utils,\n\n /**\r\n * @see MathUtils\r\n */\n MathUtils: core_MathUtils,\n\n /**\r\n * @see Deferred\r\n */\n Deferred: core_Deferred,\n\n /**\r\n * @see Babylon.js/Messenger\r\n */\n Messenger: Babylon_js_Messenger,\n\n /**\r\n * @see Babylon.js/HostObject\r\n */\n HostObject: Babylon_js_HostObject,\n\n /**\r\n * @see core/LipsyncFeature\r\n */\n LipsyncFeature: core_LipsyncFeature,\n\n /**\r\n * @see GestureFeature\r\n */\n GestureFeature: core_GestureFeature,\n\n /**\r\n * @see Babylon.js/PointOfInterestFeature\r\n */\n PointOfInterestFeature: Babylon_js_PointOfInterestFeature,\n\n /**\r\n * @see DefaultVisemeMap\r\n */\n DefaultVisemeMap: DefaultVisemeMap,\n\n /**\r\n * @see DefaultGestureWords\r\n */\n DefaultGestureWords: DefaultGestureWords,\n\n /**\r\n * @see AxisMap\r\n */\n AxisMap: AxisMap,\n\n /**\r\n * @see module:babylon/awspack\r\n */\n aws: awspack,\n\n /**\r\n * @see module:babylon/animpack\r\n */\n anim: animpack\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vc3JjL2NvcmUvRGVmZXJyZWQuanM/Njg4ZSIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL2NvcmUvVXRpbHMuanM/YmYyNCIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL2NvcmUvTWF0aFV0aWxzLmpzPzgxZTciLCJ3ZWJwYWNrOi8vSE9TVC8uL3NyYy9jb3JlL2FuaW1wYWNrL0Vhc2luZy5qcz81ODZjIiwid2VicGFjazovL0hPU1QvLi9zcmMvY29yZS9NZXNzZW5nZXIuanM/ZDAwNiIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL0JhYnlsb24uanMvTWVzc2VuZ2VyLmpzPzA3ZjgiLCJ3ZWJwYWNrOi8vSE9TVC8uL3NyYy9jb3JlL0Fic3RyYWN0SG9zdEZlYXR1cmUuanM/MjM2ZSIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL2NvcmUvSG9zdE9iamVjdC5qcz83NWU3Iiwid2VicGFjazovL0hPU1QvLi9zcmMvQmFieWxvbi5qcy9Ib3N0T2JqZWN0LmpzPzRhZTEiLCJ3ZWJwYWNrOi8vSE9TVC8uL3NyYy9jb3JlL0ZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2UuanM/MDZiYiIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL2NvcmUvYW5pbXBhY2svQW5pbWF0aW9uRmVhdHVyZURlcGVuZGVudEludGVyZmFjZS5qcz82ZTYzIiwid2VicGFjazovL0hPU1QvLi9zcmMvY29yZS9hbmltcGFjay9NYW5hZ2VkQW5pbWF0aW9uTGF5ZXJJbnRlcmZhY2UuanM/NDdkNSIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL2NvcmUvYXdzcGFjay9UZXh0VG9TcGVlY2hGZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlLmpzP2JjYWQiLCJ3ZWJwYWNrOi8vSE9TVC8uL3NyYy9jb3JlL0xpcHN5bmNGZWF0dXJlLmpzPzhkM2EiLCJ3ZWJwYWNrOi8vSE9TVC8uL3NyYy9jb3JlL2F3c3BhY2svU1NNTFNwZWVjaG1hcmtJbnRlcmZhY2UuanM/Y2E3NCIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL2NvcmUvR2VzdHVyZUZlYXR1cmUuanM/ZGIzOSIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL2NvcmUvYW5pbXBhY2svQW5pbWF0aW9uVXRpbHMuanM/MTE0OCIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL2NvcmUvYW5pbXBhY2svc3RhdGUvQWJzdHJhY3RTdGF0ZS5qcz8yZjg3Iiwid2VicGFjazovL0hPU1QvLi9zcmMvY29yZS9hbmltcGFjay9zdGF0ZS9UcmFuc2l0aW9uU3RhdGUuanM/OWU3NyIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL2NvcmUvYW5pbXBhY2svQW5pbWF0aW9uUGxheWVySW50ZXJmYWNlLmpzPzczM2UiLCJ3ZWJwYWNrOi8vSE9TVC8uL3NyYy9jb3JlL2FuaW1wYWNrL3N0YXRlL1N0YXRlQ29udGFpbmVySW50ZXJmYWNlLmpzPzI2NTkiLCJ3ZWJwYWNrOi8vSE9TVC8uL3NyYy9jb3JlL2FuaW1wYWNrL3N0YXRlL1F1ZXVlU3RhdGUuanM/MGM0YSIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL2NvcmUvYW5pbXBhY2svc3RhdGUvQWJzdHJhY3RCbGVuZFN0YXRlLmpzPzY2OTciLCJ3ZWJwYWNrOi8vSE9TVC8uL3NyYy9jb3JlL2FuaW1wYWNrL3N0YXRlL0ZyZWVCbGVuZFN0YXRlLmpzP2Q2NzUiLCJ3ZWJwYWNrOi8vSE9TVC8uL3NyYy9jb3JlL2FuaW1wYWNrL3N0YXRlL0JsZW5kMWRTdGF0ZS5qcz9hNzQyIiwid2VicGFjazovL0hPU1QvLi9zcmMvY29yZS9hbmltcGFjay9zdGF0ZS9CbGVuZDJkU3RhdGUuanM/ODE2MyIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL2NvcmUvYW5pbXBhY2svQW5pbWF0aW9uTGF5ZXIuanM/YmVlYyIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL2NvcmUvYW5pbXBhY2svc3RhdGUvU2luZ2xlU3RhdGUuanM/NGYxNCIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL2NvcmUvYW5pbXBhY2svc3RhdGUvUmFuZG9tQW5pbWF0aW9uU3RhdGUuanM/NDQ5MyIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL2NvcmUvYW5pbXBhY2svQW5pbWF0aW9uRmVhdHVyZS5qcz9lYmRlIiwid2VicGFjazovL0hPU1QvLi9zcmMvY29yZS9Qb2ludE9mSW50ZXJlc3RGZWF0dXJlLmpzP2RlZTUiLCJ3ZWJwYWNrOi8vSE9TVC8uL3NyYy9CYWJ5bG9uLmpzL1BvaW50T2ZJbnRlcmVzdEZlYXR1cmUuanM/ODBjZiIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL0JhYnlsb24uanMvSG9zdEVudmlyb25tZW50LmpzP2MwYWMiLCJ3ZWJwYWNrOi8vSE9TVC8uL3NyYy9jb3JlL2F3c3BhY2svVGV4dFRvU3BlZWNoVXRpbHMuanM/NzU1ZCIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL2NvcmUvYXdzcGFjay9BYnN0cmFjdFNwZWVjaC5qcz83ZjFjIiwid2VicGFjazovL0hPU1QvLi9zcmMvY29yZS9hd3NwYWNrL0Fic3RyYWN0VGV4dFRvU3BlZWNoRmVhdHVyZS5qcz8zNDFmIiwid2VicGFjazovL0hPU1QvLi9zcmMvY29yZS9hd3NwYWNrL1NwZWVjaC5qcz8yYTQxIiwid2VicGFjazovL0hPU1QvLi9zcmMvQmFieWxvbi5qcy9hd3NwYWNrL1NwZWVjaC5qcz9lZDA5Iiwid2VicGFjazovL0hPU1QvLi9zcmMvY29yZS9hd3NwYWNrL1RleHRUb1NwZWVjaEZlYXR1cmUuanM/NWE4NSIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL0JhYnlsb24uanMvYXdzcGFjay9UZXh0VG9TcGVlY2hGZWF0dXJlLmpzP2IwYzEiLCJ3ZWJwYWNrOi8vSE9TVC8uL3NyYy9CYWJ5bG9uLmpzL2F3c3BhY2svaW5kZXguanM/M2MyYyIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL0JhYnlsb24uanMvYW5pbXBhY2svc3RhdGUvU2luZ2xlU3RhdGUuanM/ZTQzMSIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL0JhYnlsb24uanMvYW5pbXBhY2svQW5pbWF0aW9uRmVhdHVyZS5qcz9jMTY4Iiwid2VicGFjazovL0hPU1QvLi9zcmMvQmFieWxvbi5qcy9hbmltcGFjay9pbmRleC5qcz84ZDU3Iiwid2VicGFjazovL0hPU1QvLi9zcmMvQmFieWxvbi5qcy9pbmRleC5qcz9iZTM3Il0sIm5hbWVzIjpbIkRlZmVycmVkIiwiZXhlY3V0YWJsZSIsIm9uUmVzb2x2ZSIsIm9uUmVqZWN0Iiwib25DYW5jZWwiLCJFcnJvciIsInJlcyIsInJlaiIsImNhbmNlbCIsInN0YXR1cyIsInJlc29sdmVkIiwicmVqZWN0ZWQiLCJjYW5jZWxlZCIsInBlbmRpbmciLCJyZXNvbHZlIiwicmVqZWN0IiwidmFsdWUiLCJfc3RhdHVzIiwiX3Jlc29sdmUiLCJfcmVqZWN0IiwiX2NhbmNlbCIsIl9leGVjdXRhYmxlIiwiYXJncyIsIml0ZXJhYmxlIiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJlIiwiYXJyYXkiLCJkZWZlcnJlZCIsImZpbHRlciIsIml0ZW0iLCJyZXN1bHQiLCJ1bmRlZmluZWQiLCJyZXNvbHZlVmFsdWUiLCJmb3JFYWNoIiwibGVuZ3RoIiwiZXJyb3IiLCJjYW5jZWxWYWx1ZSIsIm51bUl0ZW1zIiwiaXRlbVRyYWNrZXIiLCJmYWlsZWQiLCJudW1SZXNvbHZlZCIsInJlc29sdXRpb25zIiwiaW5kZXgiLCJQcm9taXNlIiwidGhlbiIsIlV0aWxzIiwicmVwbGFjZSIsImMiLCJyYW5kb21OdW1iZXIiLCJNYXRoIiwiZmxvb3IiLCJEYXRlIiwibm93IiwicmFuZG9tIiwidG9TdHJpbmciLCJuYW1lIiwibmFtZUFycmF5IiwiaW5jbHVkZXMiLCJuYW1lU2V0IiwiU2V0IiwibWF0Y2hHcm91cCIsIm1hdGNoIiwiYmFzZU5hbWUiLCJzbGljZSIsImluY3JlbWVudCIsIk51bWJlciIsInNldE5hbWUiLCJzZXRNYXRjaEdyb3VwIiwic2V0SW5jcmVtZW50Iiwic2Vjb25kcyIsIm9uRmluaXNoIiwib25Qcm9ncmVzcyIsIm9uRXJyb3IiLCJjb25zb2xlIiwid2FybiIsImN1cnJlbnRUaW1lIiwidG90YWxUaW1lIiwib25VcGRhdGUiLCJkZWx0YVRpbWUiLCJtaW4iLCJtYXgiLCJjZWlsIiwiUmFkaWFuVG9EZWdyZWUiLCJQSSIsIkRlZ3JlZVRvUmFkaWFuIiwiTWF0aFV0aWxzIiwicmFkaWFucyIsImRlZ3JlZXMiLCJmcm9tIiwidG8iLCJmYWN0b3IiLCJhIiwiYiIsInAiLCJkaXN0U3FyIiwiZGlzdGFuY2VTcXVhcmVkIiwidCIsInBvaW50IiwidmVydGljZXMiLCJtaW5YIiwiUE9TSVRJVkVfSU5GSU5JVFkiLCJtaW5ZIiwibWF4WCIsIk5FR0FUSVZFX0lORklOSVRZIiwibWF4WSIsInYiLCJkWCIsImRZIiwibWlkWCIsIm1pZFkiLCJkTWF4Iiwic3VwZXJJbmRpY2VzIiwidmVydHNXaXRoU3VwZXIiLCJzdXBlclNvcnRlZEluZGljZXMiLCJzb3J0UG9pbnRzQ0NXIiwic3VwZXJUcmlhbmdsZSIsImluZGljZXMiLCJlZGdlcyIsInRyaWFuZ2xlcyIsIm5ld1ZlcnQiLCJuZXdJbmRleCIsImludmFsaWRUcmlhbmdsZXMiLCJ0cmlhbmdsZSIsImlzUG9pbnRJbkNpcmN1bUNpcmNsZSIsInB1c2giLCJib3VuZGluZ1BvbHkiLCJlZGdlIiwiY291bnQiLCJvdGhlclRyaWFuZ2xlIiwib3RoZXJFZGdlIiwic3BsaWNlIiwiaW5kZXhPZiIsInNvcnRlZEluZGljZXMiLCJ0cmlhbmdsZXNUb1JlbW92ZSIsIm1hcCIsImF4IiwiYXkiLCJieCIsImJ5IiwiY3giLCJjeSIsImRlbm9tIiwiYVZhbCIsImJWYWwiLCJjVmFsIiwiY2VudHJvaWQiLCJzb3J0IiwiYXRhbjIiLCJhYnMiLCJ2ZWN0b3IiLCJBcnJheSIsInJlZHVjZXIiLCJhY2N1bXVsYXRvciIsImN1cnJlbnRWYWx1ZSIsInNxcnQiLCJyZWR1Y2UiLCJ2ZWN0b3JBIiwidmVjdG9yQiIsInZhbHVlQSIsInZhbHVlQiIsIm5vcm1hbEEiLCJub3JtYWxpemVWZWN0b3IiLCJub3JtYWxCIiwiZG90IiwiZ2V0RG90UHJvZHVjdCIsImFjb3MiLCJjbGFtcCIsInZlY3RvcjMiLCJtYXRyaXgzIiwiZXZlcnkiLCJ4IiwieSIsInoiLCJtYWduaXR1ZGUiLCJnZXRWZWN0b3JNYWduaXR1ZGUiLCJmaWxsIiwibWF0cml4NCIsInNjYWxlWCIsInNjYWxlWSIsInNjYWxlWiIsInIiLCJ0YXJnZXRWYWx1ZSIsInZhbHVlU3RvcmUiLCJzbW9vdGhUaW1lIiwibWF4U3BlZWQiLCJjbGFtcFRpbWUiLCJkZWx0YVZhbHVlIiwiY2xhbXBEZWx0YVZhbHVlIiwibGFzdFZhbHVlIiwiZDEiLCJkMiIsImQzIiwiZDQiLCJMaW5lYXIiLCJOb25lIiwiayIsIkluIiwiT3V0IiwiSW5PdXQiLCJRdWFkcmF0aWMiLCJDdWJpYyIsIlF1YXJ0aWMiLCJRdWludGljIiwiU2ludXNvaWRhbCIsImNvcyIsInNpbiIsIkV4cG9uZW50aWFsIiwiQ2lyY3VsYXIiLCJFbGFzdGljIiwicyIsImFzaW4iLCJCYWNrIiwiQm91bmNlIiwiTWVzc2VuZ2VyIiwiaWQiLCJfaWQiLCJjcmVhdGVJZCIsIl9kaXNwYXRjaGVyIiwid2luZG93IiwiX2NhbGxiYWNrcyIsIl9ldmVudExpc3RlbmVycyIsIm1lc3NhZ2UiLCJjYWxsYmFjayIsImRldGFpbCIsIkN1c3RvbUV2ZW50IiwibGlzdGVuZXIiLCJhZGRFdmVudExpc3RlbmVyIiwiX2NyZWF0ZUxvY2FsTWVzc2FnZSIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJfY3JlYXRlTGlzdGVuZXIiLCJfYWRkTGlzdGVuZXIiLCJpIiwic3RvcExpc3RlbmluZyIsIl9yZW1vdmVMaXN0ZW5lciIsInJlZ2V4cCIsIm1lc3NhZ2VzIiwiT2JqZWN0Iiwia2V5cyIsInRlc3QiLCJldmVudCIsIl9jcmVhdGVFdmVudCIsImRpc3BhdGNoRXZlbnQiLCJtZXNzZW5nZXIiLCJHbG9iYWxNZXNzZW5nZXIiLCJsaXN0ZW5UbyIsInN0b3BMaXN0ZW5pbmdUb0FsbCIsImVtaXQiLCJkZWZpbmVQcm9wZXJ0aWVzIiwid3JpdGFibGUiLCJFVkVOVFMiLCJfZXZlbnRzIiwiYWRkIiwicmVtb3ZlQ2FsbGJhY2siLCJCQUJZTE9OIiwiT2JzZXJ2YWJsZSIsImhhc09ic2VydmVycyIsIm5vdGlmeU9ic2VydmVycyIsIkNvcmVNZXNzZW5nZXIiLCJkZWZpbmVQcm9wZXJ0eSIsIkFic3RyYWN0SG9zdEZlYXR1cmUiLCJob3N0IiwiX2hvc3QiLCJldmVudHMiLCJhcGkiLCJlbnRyaWVzIiwiY29uc3RydWN0b3IiLCJvd25lciIsInN0b3BMaXN0ZW5pbmdCeVJlZ2V4cCIsInVwZGF0ZSIsIlJlZ0V4cCIsInNvdXJjZSIsIlJlc3VsdENsYXNzIiwibWl4aW5DbGFzc0ZhY3RvcmllcyIsIm1peGluQ2xhc3NGYWN0b3J5IiwiU0VSVklDRVMiLCJIb3N0T2JqZWN0IiwiX293bmVyIiwiX2ZlYXR1cmVzIiwiX3dhaXRzIiwiX2xhc3RVcGRhdGUiLCJkdCIsIndhaXQiLCJleGVjdXRlIiwidmFsdWVzIiwiZmVhdHVyZSIsIm9uQ29tcGxldGUiLCJGZWF0dXJlQ2xhc3MiLCJmb3JjZSIsImlucHV0VHlwZSIsInByb3RvdHlwZSIsImluc3RhbGxBcGkiLCJhZGRGZWF0dXJlIiwidHlwZU5hbWUiLCJyZW1vdmVGZWF0dXJlIiwiZGlzY2FyZCIsImdldFByb3RvdHlwZU9mIiwib3B0aW9ucyIsImdldCIsImdldEVuZ2luZSIsImdldERlbHRhVGltZSIsIlByZWNpc2lvbkRhdGUiLCJOb3ciLCJDb3JlSG9zdE9iamVjdCIsIkZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2UiLCJCYXNlQ2xhc3MiLCJGZWF0dXJlRGVwZW5kZW50TWl4aW4iLCJfaW5pdGlhbGl6ZWQiLCJfb25GZWF0dXJlQWRkZWQiLCJiaW5kIiwiX29uRmVhdHVyZVJlbW92ZWQiLCJFVkVOVF9ERVBFTkRFTkNJRVMiLCJldmVudE5hbWUiLCJBbmltYXRpb25GZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlIiwib2xkTmFtZSIsIm5ld05hbWUiLCJsYXllck5hbWUiLCJhbmltYXRpb25OYW1lIiwiUGFyZW50Q2xhc3MiLCJNaXhpbiIsIkFuaW1hdGlvbkZlYXR1cmVEZXBlbmRlbnRNaXhpbiIsIkFuaW1hdGlvbkZlYXR1cmUiLCJhZGRMYXllciIsInJlbW92ZUxheWVyIiwicmVuYW1lTGF5ZXIiLCJhZGRBbmltYXRpb24iLCJyZW1vdmVBbmltYXRpb24iLCJyZW5hbWVBbmltYXRpb24iLCJNYW5hZ2VkQW5pbWF0aW9uTGF5ZXJJbnRlcmZhY2UiLCJuYW1lRmlsdGVyIiwid2VpZ2h0IiwiZWFzaW5nRm4iLCJNYW5hZ2VkQW5pbWF0aW9uTGF5ZXJNaXhpbiIsIl9tYW5hZ2VkTGF5ZXJzIiwibGF5ZXJzIiwiX29uTGF5ZXJBZGRlZCIsIl9vbkxheWVyUmVtb3ZlZCIsImlzQWN0aXZlIiwiZ2V0QW5pbWF0aW9ucyIsImFuaW1OYW1lIiwiX29uQW5pbWF0aW9uQWRkZWQiLCJhbmltYXRpb25zIiwiX29uQW5pbWF0aW9uUmVtb3ZlZCIsImxheWVyT3B0aW9ucyIsImFuaW1PcHRpb25zIiwiREVGQVVMVF9MQVlFUl9PUFRJT05TIiwiYW5pbWF0aW9uT3B0aW9ucyIsImFzc2lnbiIsInJlZ2lzdGVyQW5pbWF0aW9uIiwicmVnaXN0ZXJMYXllciIsImxheWVyTmFtZXMiLCJzZXRMYXllcldlaWdodCIsImJsZW5kVGltZSIsInNldExheWVyV2VpZ2h0cyIsImVuYWJsZSIsImRpc2FibGUiLCJUZXh0VG9TcGVlY2hGZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlIiwiVGV4dFRvU3BlZWNoRmVhdHVyZURlcGVuZGVudE1peGluIiwiVGV4dFRvU3BlZWNoRmVhdHVyZSIsInBsYXkiLCJwYXVzZSIsInJlc3VtZSIsInN0b3AiLCJzZW50ZW5jZSIsIndvcmQiLCJ2aXNlbWUiLCJzc21sIiwiRGVmYXVsdFZpc2VtZU1hcCIsInNpbCIsIm92ZXJyaWRlV2VpZ2h0IiwiUyIsIlQiLCJmIiwidSIsIkUiLCJvIiwiTyIsIkxpcHN5bmNGZWF0dXJlIiwidmlzZW1lQmxlbmRUaW1lIiwiZGVjYXlSYXRlIiwiYW1vdW50IiwidmlzZW1lRWFzaW5nRm4iLCJ2aXNlbWVMYXllcnMiLCJ0YWxraW5nQmxlbmRUaW1lIiwidGFsa2luZ0Vhc2luZ0ZuIiwidGFsa2luZ0xheWVycyIsInZpc2VtZUxlYWRUaW1lIiwiX3Zpc2VtZUxheWVycyIsIl90YWxraW5nTGF5ZXJzIiwiYW5pbWF0aW9uIiwidmlzZW1lTWFwIiwicmVnaXN0ZXJWaXNlbWVMYXllciIsInJlZ2lzdGVyVGFsa2luZ0xheWVyIiwiZ2V0QW5pbWF0aW9uVHlwZSIsIndlaWdodE5hbWVzIiwiZ2V0QW5pbWF0aW9uQmxlbmROYW1lcyIsInZpc2VtZU9wdGlvbnMiLCJzcGVlY2htYXJrT2Zmc2V0IiwiX3Zpc2VtZUxlYWRUaW1lIiwiX3JlZ2lzdGVyVmlzZW1lQW5pbWF0aW9uIiwicmVzdW1lQW5pbWF0aW9uIiwiX29uU3RvcCIsIl9vblBsYXkiLCJwYXVzZUFuaW1hdGlvbiIsIm1hcmsiLCJpc1Zpc2VtZUFjdGl2ZSIsInZpc2VtZU5hbWVzIiwiZHVyYXRpb24iLCJsZXJwRmFjdG9yIiwibGVycCIsImJsZW5kSW5UaW1lIiwiaG9sZFRpbWUiLCJfYW5pbWF0ZVNpbXBsZVZpc2VtZSIsImRlY2F5V2VpZ2h0IiwiX2FuaW1hdGVIZWxkVmlzZW1lIiwidmlzZW1lTmFtZSIsInBlYWtXZWlnaHQiLCJibGVuZE91dFRpbWUiLCJ3ZWlnaHRQcm9taXNlIiwic2V0QW5pbWF0aW9uQmxlbmRXZWlnaHQiLCJzdGFydFByb21pc2UiLCJob2xkUHJvbWlzZSIsInNldCIsIm1peCIsIlNTTUxTcGVlY2htYXJrSW50ZXJmYWNlIiwiU1NNTFNwZWVjaE1hcmtNaXhpbiIsIkpTT04iLCJwYXJzZSIsIm1ldGhvZCIsImFwcGx5IiwiRGVmYXVsdEdlc3R1cmVXb3JkcyIsImJpZyIsImhlYXJ0IiwibWFueSIsIm1vdmVtZW50Iiwib25lIiwiYWdncmVzc2l2ZSIsInlvdSIsImRlZmVuc2UiLCJ3YXZlIiwic2VsZiIsIkdlc3R1cmVGZWF0dXJlIiwibWluaW11bUludGVydmFsIiwibGF5ZXIiLCJsYXllckhvbGRUaW1lIiwibGF5ZXJNaW5pbXVtSW50ZXJ2YWwiLCJjYW5BZHZhbmNlIiwiaXNRdWV1ZUVuZCIsImN1cnJlbnRHZXN0dXJlIiwiX2dldEhvbGRUaW1lIiwiaG9sZFRpbWVyIiwicGxheU5leHRBbmltYXRpb24iLCJwbGF5VGltZXIiLCJhdXRvRGlzYWJsZSIsImFuaW0iLCJ3b3JkcyIsImdlc3R1cmVNYXAiLCJ0cmFuc2l0aW9uVGltZSIsImtleSIsInN0cmluZ2lmeSIsImdlbmVyaWNHZXN0dXJlcyIsInJlYXNvbiIsIl9nZXRNaW5pbXVtSW50ZXJ2YWwiLCJwbGF5QW5pbWF0aW9uIiwiZ2V0UGF1c2VkIiwiY3JlYXRlR2VzdHVyZU1hcCIsImNyZWF0ZUdlbmVyaWNHZXN0dXJlQXJyYXkiLCJwbGF5R2VzdHVyZSIsInN0b3BBbmltYXRpb24iLCJpbnRlcnJ1cHRBbmltYXRpb24iLCJBbmltYXRpb25VdGlscyIsInByb3BlcnR5T3duZXIiLCJwcm9wZXJ0eU5hbWUiLCJpc05hTiIsInN0YXJ0VmFsdWUiLCJpbnRlcnBvbGF0b3IiLCJwcm9ncmVzcyIsImVhc2VGYWN0b3IiLCJBYnN0cmFjdFN0YXRlIiwiX3dlaWdodCIsIl9pbnRlcm5hbFdlaWdodCIsIl9wYXVzZWQiLCJfcHJvbWlzZXMiLCJmaW5pc2giLCJfcGxheUNhbGxiYWNrcyIsImludGVycG9sYXRlUHJvcGVydHkiLCJwcm9taXNlIiwiYWxsIiwidXBkYXRlSW50ZXJuYWxXZWlnaHQiLCJUcmFuc2l0aW9uU3RhdGUiLCJfdG8iLCJfZnJvbSIsIl93ZWlnaHRQcm9taXNlIiwidG90YWxXZWlnaHQiLCJzdGF0ZSIsImN1cnJlbnRTdGF0ZXMiLCJ0YXJnZXRTdGF0ZSIsImRlYWN0aXZhdGUiLCJyZXNldCIsIndlaWdodFByb21pc2VzIiwic2V0V2VpZ2h0Iiwib25OZXh0IiwicHJvbWlzZXMiLCJBbmltYXRpb25QbGF5ZXJJbnRlcmZhY2UiLCJmbiIsInBsYXlNZXRob2QiLCJBbmltYXRpb25QbGF5ZXJNaXhpbiIsIl90cmFuc2l0aW9uU3RhdGUiLCJfc3RhdGVzIiwiTWFwIiwiX2N1cnJlbnRTdGF0ZSIsIl90cmFuc2l0aW9uVGltZSIsIl9lYXNpbmdGbiIsImhhcyIsImN1cnJlbnRBbmltYXRpb24iLCJ3ZWlnaHRQZW5kaW5nIiwiY29uZmlndXJlIiwiX3ByZXBhcmVDdXJyZW50U3RhdGUiLCJTdGF0ZUNvbnRhaW5lckludGVyZmFjZSIsImN1cnJlbnROYW1lIiwiU3RhdGVDb250YWluZXJNaXhpbiIsInVuaXF1ZU5hbWUiLCJnZXRVbmlxdWVOYW1lIiwiUXVldWVTdGF0ZSIsInF1ZXVlU3RhdGVzIiwiYWRkU3RhdGUiLCJfcXVldWUiLCJfZG9uZSIsImludGVybmFsV2VpZ2h0IiwibmV4dCIsImRvbmUiLCJ3cmFwIiwibGFzdE5hbWUiLCJzaXplIiwiZ2V0U3RhdGUiLCJsb29wQ291bnQiLCJJbmZpbml0eSIsImlzVHJhbnNpdGlvbmluZyIsIl9yZXNldCIsInBhdXNlZCIsInN0b3BwZWQiLCJkaXNjYXJkU3RhdGVzIiwiQWJzdHJhY3RCbGVuZFN0YXRlIiwiYmxlbmRTdGF0ZXMiLCJibGVuZFdlaWdodHMiLCJGcmVlQmxlbmRTdGF0ZSIsInN1bVdlaWdodHMiLCJCbGVuZDFkU3RhdGUiLCJibGVuZFRocmVzaG9sZHMiLCJwaGFzZU1hdGNoZXMiLCJfYmxlbmRWYWx1ZSIsImJsZW5kVmFsdWUiLCJub25aZXJvRGlmZmVyZW50U2l6ZSIsImNvbnRhaW5zRHVwbGljYXRlcyIsIl90aHJlc2hvbGRzIiwicGhhc2VNYXRjaCIsIl9zb3J0VGhyZXNob2xkcyIsIl9mb3JjZU5vVGhyZXNob2xkRHVwZXMiLCJfcGhhc2VMZWFkU3RhdGUiLCJfdXBkYXRlQmxlbmRXZWlnaHRzIiwidGhyZXNob2xkVmFsdWUiLCJzYW1lVmFsdWUiLCJmaW5kIiwidGhyZXNob2xkIiwicmVtb3ZlZCIsImZpbmRJbmRleCIsIm5vcm1hbGl6ZWRUaW1lIiwidGFyZ2V0SW5kZXgiLCJ0aHJlc2hvbGRBIiwidGhyZXNob2xkQiIsImZhY3RvckIiLCJmYWN0b3JBIiwic3RhdGVBIiwic3RhdGVCIiwiQmxlbmQyZFN0YXRlIiwib3RoZXJUaHJlc2hvbGQiLCJfYmxlbmRWYWx1ZVgiLCJfYmxlbmRWYWx1ZVkiLCJibGVuZFZhbHVlWCIsImJsZW5kVmFsdWVZIiwiX3ZlcnRpY2VzIiwiX3RyaWFuZ2xlcyIsImdldERlbGF1bmF5VHJpYW5ndWxhdGlvbiIsInByb3BlcnR5IiwidG9VcHBlckNhc2UiLCJfc2V0SW5mbHVlbmNlQ2xvc2VzdFBvaW50T25MaW5lIiwiaXNQb2ludEluVHJpYW5nbGUiLCJfc2V0SW5mbHVlbmNlVHJpYW5nbGUiLCJfc2V0SW5mbHVlbmNlQ2xvc2VzdFBvaW50SW5UcmlhbmdsZXMiLCJhcmVhQSIsInRyaWFuZ2xlQXJlYSIsImFyZWFCIiwiYXJlYUMiLCJ0b3RhbEFyZWEiLCJ3ZWlnaHRBIiwid2VpZ2h0QiIsIndlaWdodEMiLCJ0aHJlc2hvbGRDIiwic3RhdGVDIiwiX3NldFBoYXNlTGVhZFN0YXRlIiwiZ2xvYmFsQ2xvc2VzdFBvaW50IiwiZ2xvYmFsTWluRGlzdCIsImNsb3Nlc3RUcmlhbmdsZSIsInBvaW50QSIsImNsb3Nlc3RQb2ludE9uTGluZSIsInBvaW50QiIsInBvaW50QyIsImRpc3RBIiwiZGlzdEIiLCJkaXN0QyIsImxvY2FsQ2xvc2VzdFBvaW50IiwibG9jYWxNaW5EaXN0IiwiY2xvc2VzdFBvaW50Iiwic3RhdGVzIiwicGhhc2VNYXRjaGVkIiwiTGF5ZXJCbGVuZE1vZGVzIiwiT3ZlcnJpZGUiLCJBZGRpdGl2ZSIsIkRlZmF1bHRMYXllckJsZW5kTW9kZSIsInZhbGlkYXRlQmxlbmRNb2RlIiwiYmxlbmRNb2RlIiwiQW5pbWF0aW9uTGF5ZXIiLCJfYmxlbmRNb2RlIiwiX3dlaWdodFBhdXNlZCIsImlzV2VpZ2h0QWN0aXZlIiwiZ2V0U3RhdGVOYW1lcyIsImJsZW5kTmFtZSIsInNldEJsZW5kV2VpZ2h0IiwiZ2V0QmxlbmRXZWlnaHQiLCJTaW5nbGVTdGF0ZSIsIl90aW1lU2NhbGUiLCJ0aW1lU2NhbGUiLCJfbG9vcENvdW50IiwidGltZSIsIlJhbmRvbUFuaW1hdGlvblN0YXRlIiwic3ViU3RhdGVzIiwiX3BsYXlJbnRlcnZhbCIsInBsYXlJbnRlcnZhbCIsImdldFJhbmRvbUZsb2F0IiwicGxheVJhbmRvbUFuaW1hdGlvbiIsInRpbWVyIiwiX3Jlc2V0VGltZXIiLCJyYW5kb21TdGF0ZSIsImdldFJhbmRvbUludCIsImNhbmNlbEFuaW1hdGlvbiIsIkFuaW1hdGlvblR5cGVzIiwic2luZ2xlIiwiZnJlZUJsZW5kIiwicXVldWUiLCJyYW5kb21BbmltYXRpb24iLCJibGVuZDFkIiwiYmxlbmQyZCIsIl9sYXllcnMiLCJfbGF5ZXJNYXAiLCJleGlzdGluZyIsImxhc3RJbmRleCIsIm51bUxheWVycyIsIndlaWdodE11bHRpcGxpZXIiLCJjdXJyZW50U3RhdGUiLCJibGVuZFN0YXRlT3B0aW9ucyIsImJsZW5kT3B0aW9ucyIsIl9jcmVhdGVTaW5nbGVTdGF0ZSIsInF1ZXVlT3B0aW9ucyIsInF1ZXVlT3B0aW9uIiwiYmxlbmRNYXRjaFBoYXNlcyIsInN1YlN0YXRlT3B0aW9ucyIsImxheWVySW5kZXgiLCJfdmFsaWRhdGVJbmRleCIsImV2ZW50RGF0YSIsImN1cnJlbnRJbmRleCIsImdldEFuaW1hdGlvbkJsZW5kV2VpZ2h0IiwicGF1c2VXZWlnaHQiLCJyZXN1bWVXZWlnaHQiLCJhbmltYXRpb25UeXBlIiwiX3ZhbGlkYXRlTmV3QW5pbWF0aW9uIiwicmVtb3ZlU3RhdGUiLCJjdXJyZW50QW5pbWF0aW9uTmFtZSIsIm5ld0FuaW1hdGlvbk5hbWUiLCJyZW5hbWVTdGF0ZSIsIm5leHRRdWV1ZWRBbmltYXRpb24iLCJsIiwicmVzdW1lZCIsIm1vdmVMYXllciIsImdldExheWVyV2VpZ2h0IiwicGF1c2VMYXllcldlaWdodCIsInJlc3VtZUxheWVyV2VpZ2h0IiwicGF1c2VMYXllciIsInJlc3VtZUxheWVyIiwiZ2V0VHJhbnNpdGlvbmluZyIsImdldEN1cnJlbnRBbmltYXRpb24iLCJfdXBkYXRlSW50ZXJuYWxXZWlnaHRzIiwiQXhpc01hcCIsIlBvc2l0aXZlWCIsIk5lZ2F0aXZlWCIsIlBvc2l0aXZlWSIsIk5lZ2F0aXZlWSIsIlBvc2l0aXZlWiIsIk5lZ2F0aXZlWiIsIkZhY2VUYXJnZXRUeXBlcyIsIkV5ZUNlbnRlciIsIkV5ZUxlZnQiLCJFeWVSaWdodCIsIk1vdXRoIiwiRmFjZVZlY3RvcnMiLCJNaWNyb1NhY2NhZGVXYWl0UmFuZ2VzIiwicG9zdE1hY3JvIiwiTWFjcm9TYWNjYWRlV2FpdFJhbmdlcyIsIm1vdXRoVGFyZ2V0IiwiZXllVGFyZ2V0IiwiQmxpbmtUaHJlc2hvbGQiLCJNYXhEZWx0YSIsIlBvaW50T2ZJbnRlcmVzdEZlYXR1cmUiLCJ0YXJnZXQiLCJsb29rVHJhY2tlciIsInNjZW5lIiwibG9va0JsZW5kVGltZSIsImxvb2tFYXNpbmdGbiIsImxvb2tMYXllcnMiLCJibGlua0JsZW5kVGltZSIsImJsaW5rRWFzaW5nRm4iLCJibGlua0xheWVycyIsIl92YWxpZGF0ZVRyYW5zZm9ybU9iamVjdCIsIl9sb29rVHJhY2tlciIsIl9zY2VuZSIsIl90YXJnZXQiLCJfcHJldlRhcmdldFBvcyIsIl9pc1RhcmdldE1vdmluZyIsIl9sb29rTGF5ZXJzIiwiX3RyYWNraW5nQ29uZmlncyIsIl9ibGlua0xheWVycyIsInJlZmVyZW5jZSIsImZvcndhcmRBeGlzIiwiaGFzU2FjY2FkZSIsInJlZ2lzdGVyTG9va0xheWVyIiwicmVnaXN0ZXJCbGlua0xheWVyIiwiX3JlZ2lzdGVyTG9va0FuaW1hdGlvbiIsImNvbmZpZyIsInRyYWNraW5nQ29uZmlnIiwiYW5nbGVzIiwiaCIsInByZXZBbmdsZXMiLCJzb3VyY2VQb3NpdGlvbiIsIl9nZXRXb3JsZFBvc2l0aW9uIiwidGFyZ2V0UG9zaXRpb24iLCJsb29rVmVjdG9yIiwidGFyZ2V0UG9zIiwidHJhY2tlclBvcyIsInRhcmdldFNwaGVyaWNhbCIsImNhcnRlc2lhblRvU3BoZXJpY2FsIiwidGFyZ2V0QW5nbGVzIiwiX3NwaGVyaWNhbFRvQmxlbmRWYWx1ZSIsInJlZkRpcmVjdGlvbiIsIl9nZXRPYmplY3REaXJlY3Rpb24iLCJyZWZTcGhlcmljYWwiLCJyZWZBbmdsZXMiLCJ0YXJnZXRUeXBlIiwiZGlzdGFuY2UiLCJfZ2V0VGFyZ2V0RGlzdGFuY2UiLCJmYWNlVmVjdG9yIiwic3BoZXJpY2FsIiwiYmxlbmRWYWx1ZXMiLCJtYXhIU3BlZWQiLCJleHAiLCJtYXhWU3BlZWQiLCJEMCIsImQiLCJoRHVyYXRpb24iLCJ2RHVyYXRpb24iLCJtaWNyb1NhY2NhZGUiLCJfdXBkYXRlTGF5ZXJTcGVlZCIsIl9pbml0aWFsaXplTWljcm9UaW1lciIsIm1hY3JvU2FjY2FkZSIsIm1hY3JvU2FjY2FkZVdhaXRSYW5nZSIsImhMaW1pdCIsImhGYWN0b3IiLCJ2TGltaXQiLCJ2RmFjdG9yIiwic2FjY2FkZVRhcmdldCIsIl9nZXRGYWNlVGFyZ2V0QW5nbGVzIiwiX2luaXRpYWxpemVNYWNyb1RpbWVyIiwibWluV2FpdFRpbWUiLCJtYXhXYWl0VGltZSIsIndhaXRUaW1lIiwibWljcm9TYWNjYWRlVGltZXIiLCJfc2V0TWljcm9TYWNjYWRlIiwibWFjcm9TYWNjYWRlVGltZXIiLCJfc2V0TWFjcm9TYWNjYWRlIiwiX2FkZFRyYWNraW5nQ29uZmlnIiwiaFZlbG9jaXR5IiwidlZlbG9jaXR5IiwiX3NldExvb2tBbmdsZXMiLCJfcmVzZXRMb29rQW5nbGVzIiwiZGVsdGFTZWNvbmRzIiwidHJpZ2dlckJsaW5rIiwiY3VycmVudEgiLCJjdXJyZW50ViIsInRhcmdldEgiLCJ0YXJnZXRWIiwicHJldlRhcmdldEgiLCJwcmV2VGFyZ2V0ViIsImNoYW5nZUFtb3VudCIsInRvRGVncmVlcyIsImdldEFuZ2xlQmV0d2VlbiIsImRhbXBWYWx1ZSIsInNldFRhcmdldCIsInNldFRhcmdldEJ5TmFtZSIsInNldFRhcmdldEJ5SWQiLCJvYmoiLCJmb3J3YXJkVmVjdG9yIiwicm90YXRpb24iLCJnZXRSb3RhdGlvbk1hdHJpeCIsIl9nZXRXb3JsZE1hdHJpeCIsInJvdGF0ZVZlY3RvciIsInRoZXRhIiwicGhpIiwiVHJhbnNmb3JtTm9kZSIsImdldFRyYW5zZm9ybU5vZGVCeU5hbWUiLCJnZXRUcmFuc2Zvcm1Ob2RlQnlJRCIsImdldFdvcmxkTWF0cml4IiwibSIsIkNvcmVQb2ludE9mSW50ZXJlc3RGZWF0dXJlIiwiZW52IiwiVGV4dFRvU3BlZWNoVXRpbHMiLCJ0ZXh0IiwicmFuZG9tTWFya3MiLCJpbnRlcm5hbE1hcCIsIl9wcm9jZXNzSW5wdXRNYXAiLCJzcGVha1RhZ3MiLCJzc21sTWFya1JlZ2V4Iiwic3NtbFRhZ1JlZ2V4IiwiZXhpc3RpbmdUYWdzIiwiZXhlYyIsInN0YXJ0IiwiZW5kIiwiY2h1bmtzIiwic3NtbE1hcmtSZXN1bHQiLCJkdXBsaWNhdGVNYXJrVG9DaGVjayIsImV4aXN0aW5nVGFnIiwic3Vic3RyIiwiX2luc2VydE1hcmtzIiwibWFya1RleHQiLCJtYXJrZWRUZXh0Iiwiam9pbiIsImFkZE1hcmtzVG9Vbm1hcmtlZFNlbnRlbmNlcyIsInZhbGlkYXRlVGV4dCIsIm1hcmtzIiwibWFya0luZGljZXMiLCJtYXJrUmVzdWx0Iiwic3NtbFJlc3VsdCIsImNsZWFuZWRUZXh0IiwiZXhpc3RpbmdTc21sIiwid2hpdGVzcGFjZSIsInNlbnRlbmNlRW5kSW5kaWNlcyIsIl9nZXRTZW50ZW5jZUVuZHMiLCJwcmV2SW5kZXgiLCJ0YXJnZXRJbmRpY2VzIiwiY29udGFpbnNNYXJrIiwibWFya0luZGV4IiwicmFuZG9tTWFya2VkVGV4dCIsIl9pbnNlcnRSYW5kb21NYXJrc0F0Iiwib2Zmc2V0IiwicmFuZG9tTWFyayIsInNlbnRlbmNlUmVnZXgiLCJlbmRTZW50ZW5jZVJlZ2V4Iiwic2VudGVuY2VFbmRzIiwicHVuY3RSZXN1bHQiLCJkdXBsaWNhdGVzVG9DaGVjayIsIndvcmRSZWdleCIsImxvd2VyQ2FzZVdvcmQiLCJjaGVja0R1cGxpY2F0ZSIsIm1hcmtlZFdvcmRzIiwidG9Mb3dlckNhc2UiLCJleGlzdGluZ01hcmtzIiwibGlzdCIsImlzQXJyYXkiLCJBYnN0cmFjdFNwZWVjaCIsInNwZWFrZXIiLCJzcGVlY2htYXJrcyIsIl9zcGVha2VyIiwiX3RleHQiLCJfc3BlZWNobWFya3MiLCJfc3BlZWNobWFya09mZnNldCIsIl9zdGFydFRpbWUiLCJfbG9jYWxUaW1lIiwiX3BhdXNlVGltZSIsIl9wbGF5aW5nIiwiX21hcmtJdGVyIiwiX2N1cnJlbnRNYXJrIiwiX2VuZFRpbWUiLCJfcHJvbWlzZSIsIm9uSW50ZXJydXB0IiwiaW50ZXJydXB0IiwidHlwZSIsInNwZWVjaCIsIl9jaGVja0ZpbmlzaGVkIiwiX2NyZWF0ZVByb21pc2UiLCJlbmdpbmVzIiwiYXVkaW9Gb3JtYXRzIiwic3BlZWNobWFya1R5cGVzIiwic2FtcGxlUmF0ZXMiLCJtcDMiLCJyYXRlcyIsImRlZmF1bHRzIiwic3RhbmRhcmQiLCJuZXVyYWwiLCJwY20iLCJvZ2dfdm9yYmlzIiwiYXdzVmVyc2lvbiIsIkFic3RyYWN0VGV4dFRvU3BlZWNoRmVhdHVyZSIsInZvaWNlIiwiZW5naW5lIiwibGFuZ3VhZ2UiLCJhdWRpb0Zvcm1hdCIsInNhbXBsZVJhdGUiLCJtaW5FbmRNYXJrRHVyYXRpb24iLCJ2b2x1bWUiLCJfc3BlZWNoQ2FjaGUiLCJfY3VycmVudFNwZWVjaCIsIl9jdXJyZW50UHJvbWlzZSIsIl9pc1ZhbGlkYXRlZCIsIl92b2x1bWVQYXVzZWQiLCJfdm9pY2UiLCJQT0xMWV9ERUZBVUxUUyIsIlZvaWNlSWQiLCJfbGFuZ3VhZ2UiLCJMYW5ndWFnZU5hbWUiLCJfZW5naW5lIiwiRW5naW5lIiwiX2F1ZGlvRm9ybWF0IiwiT3V0cHV0Rm9ybWF0IiwiX3NhbXBsZVJhdGUiLCJTYW1wbGVSYXRlIiwiX21pbkVuZE1hcmtEdXJhdGlvbiIsIkFXU19WRVJTSU9OIiwiUE9MTFlfTUlOX05FVVJBTF9WRVJTSU9OIiwiZm9ybWF0IiwicmF0ZSIsInZvaWNlSWQiLCJQT0xMWV9WT0lDRVMiLCJJZCIsIlN1cHBvcnRlZEVuZ2luZXMiLCJsYW5ndWFnZUNvZGUiLCJQT0xMWV9MQU5HVUFHRVMiLCJhdmFpbGFibGVDb2RlcyIsIkxhbmd1YWdlQ29kZSIsIkFkZGl0aW9uYWxMYW5ndWFnZUNvZGVzIiwiUE9MTFlfTEFOR1VBR0VfQ09ERVMiLCJfdmFsaWRhdGVFbmdpbmUiLCJfdmFsaWRhdGVGb3JtYXQiLCJfdmFsaWRhdGVSYXRlIiwiX3ZhbGlkYXRlVm9pY2UiLCJfdmFsaWRhdGVMYW5ndWFnZSIsImlzUmVhZHkiLCJfdmFsaWRhdGUiLCJza2lwU3BlZWNoZXMiLCJjdXJyZW50Q29uZmlnIiwiX2dldENvbmZpZyIsImN1cnJlbnRDb25maWdTdHIiLCJMYW5ndWFnZSIsInZhbGlkQ29uZmlnIiwiY29uZmlnU3RyIiwic3BlZWNoQ29uZmlnU3RyIiwiX3VwZGF0ZVNwZWVjaCIsImF1ZGlvUGFyYW1zIiwiVGV4dCIsIlRleHRUeXBlIiwic3BlZWNobWFya1BhcmFtcyIsIlNwZWVjaE1hcmtUeXBlcyIsIl9zeW50aGVzaXplU3BlZWNobWFya3MiLCJfc3ludGhlc2l6ZUF1ZGlvIiwicmVzdWx0cyIsIl9jcmVhdGVTcGVlY2giLCJhdWRpb0NvbmZpZyIsIlNwZWVjaCIsInBhcmFtcyIsInByZXNpZ25lciIsImdldFN5bnRoZXNpemVTcGVlY2hVcmwiLCJ1cmwiLCJwb2xseSIsInN5bnRoZXNpemVTcGVlY2giLCJqc29uU3RyaW5nIiwiQXVkaW9TdHJlYW0iLCJqc29uIiwiZGF0YVN0ciIsImRhdGEiLCJTdHJpbmciLCJmcm9tQ2hhckNvZGUiLCJtYXJrVHlwZXMiLCJlbmRNYXJrVHlwZXMiLCJzcGVlY2hNYXJrcyIsIm1hdGNoQWxsIiwibnVtTWFya3MiLCJsYXN0TWFyayIsImVuZFRpbWVzIiwiZW5kVGltZSIsIl91cGRhdGVDb25maWciLCJnZXRWb2x1bWUiLCJzZXRWb2x1bWUiLCJwYXVzZVZvbHVtZSIsInJlc3VtZVZvbHVtZSIsIl92b2x1bWUiLCJ2b2x1bWVQZW5kaW5nIiwicGxheWluZyIsImN1cnJlbnRQcm9taXNlIiwiX2dldFNwZWVjaCIsImF1ZGlvIiwiX3NldEN1cnJlbnRTcGVlY2giLCJfc3RhcnRTcGVlY2giLCJ2ZXJzaW9uIiwiY3VzdG9tVXNlckFnZW50IiwiX3dpdGhDdXN0b21Vc2VyQWdlbnQiLCJzZXJ2aWNlIiwiX2lzUmVhZHkiLCJhdmFpbGFibGVWb2ljZXMiLCJhdmFpbGFibGVMYW5ndWFnZXMiLCJhdmFpbGFibGVMYW5ndWFnZUNvZGVzIiwibWluTmV1cmFsU2RrIiwiZGVzY3JpYmVWb2ljZXMiLCJyZXNwb25zZSIsImFsbENvZGVzIiwiVm9pY2VzIiwiY29kZSIsInJlYWR5IiwiY3VycmVudFVzZXJBZ2VudCIsInN1bWVyaWFuSG9zdHNVc2VyQWdlbnQiLCJjb25jYXQiLCJMZXhpY29uTmFtZXMiLCJfYXVkaW8iLCJvbmVuZGVkIiwiX2F1ZGlvRmluaXNoZWQiLCJzZXRUaW1lb3V0IiwiX3BsYXlBdWRpbyIsIl9wYXVzZUF1ZGlvIiwib25FbmRlZE9ic2VydmFibGUiLCJjYWxsIiwiQ29yZVNwZWVjaCIsIl9lbmFibGVkIiwiX3NldEF1ZGlvQ29udGV4dCIsIl9vYnNlcnZlQXVkaW9Db250ZXh0IiwiX2F1ZGlvQ29udGV4dCIsIkF1ZGlvQ29udGV4dCIsIm9uc3RhdGVjaGFuZ2UiLCJBdWRpbyIsImxvb3AiLCJjcm9zc09yaWdpbiIsInByZWxvYWQiLCJkb2N1bWVudCIsImJvZHkiLCJhcHBlbmRDaGlsZCIsImxvYWQiLCJyZXN1bWVBdWRpbyIsImVuYWJsZWQiLCJhdHRhY2hUbyIsIl9hdHRhY2hUbyIsImF1ZGlvRW5naW5lIiwiYXVkaW9Db250ZXh0IiwidW5sb2NrIiwiU291bmQiLCJzdHJlYW1pbmciLCJza2lwQ29kZWNDaGVjayIsImF0dGFjaFRvTWVzaCIsIkNvcmVUZXh0VG9TcGVlY2hGZWF0dXJlIiwiYmFieWxvbkJsZW5kTW9kZXMiLCJiYWJ5bG9uR3JvdXAiLCJiYWJ5bG9uU2NlbmUiLCJfb25GaW5pc2hlZEV2ZW50IiwiX29uTG9vcEV2ZW50Iiwibm9ybWFsaXplIiwiX2JhYnlsb25TY2VuZSIsIl9iYWJ5bG9uQW5pbWF0aW9ucyIsInRhcmdldGVkQW5pbWF0aW9ucyIsIl9iYWJ5bG9uQW5pbWF0YWJsZXMiLCJfYmFieWxvbk51bUFuaW1hdGlvbnMiLCJfYmFieWxvbkxvb3BDb3VudCIsIl9sb29wZWQiLCJfZmluaXNoZWQiLCJfc3RhcnRlZCIsImFuaW1hdGFibGUiLCJtYXN0ZXJGcmFtZSIsInRhcmdldEZyYW1lIiwiZ29Ub0ZyYW1lIiwic3BlZWRSYXRpbyIsImxvb3BBbmltYXRpb24iLCJvbGRBbmltYXRhYmxlcyIsInRhcmdldGVkQW5pbWF0aW9uIiwiYmVnaW5EaXJlY3RBbmltYXRpb24iLCJkaXNwb3NlT25FbmQiLCJfY3JlYXRlQW5pbWF0YWJsZXMiLCJ0aW1lU2NhbGVQZW5kaW5nIiwiQ29yZVNpbmdsZVN0YXRlIiwiZ2V0U2NlbmUiLCJjbGlwIiwiQ29yZUFuaW1hdGlvbkZlYXR1cmUiLCJFYXNpbmciLCJhd3MiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtJQUNNQSxROzs7OztBQUNKO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Usc0JBQWtFO0FBQUE7O0FBQUEsUUFBdERDLFVBQXNELHVFQUF6QyxZQUFNLENBQUUsQ0FBaUM7QUFBQSxRQUEvQkMsU0FBK0I7QUFBQSxRQUFwQkMsUUFBb0I7QUFBQSxRQUFWQyxRQUFVOztBQUFBOztBQUNoRSxRQUFJLE9BQU9ILFVBQVAsS0FBc0IsVUFBMUIsRUFBc0M7QUFDcEMsWUFBTSxJQUFJSSxLQUFKLDhEQUFOO0FBR0Q7O0FBRUQsUUFBSSxPQUFPSCxTQUFQLEtBQXFCLFdBQXJCLElBQW9DLE9BQU9BLFNBQVAsS0FBcUIsVUFBN0QsRUFBeUU7QUFDdkUsWUFBTSxJQUFJRyxLQUFKLDZEQUFOO0FBR0Q7O0FBRUQsUUFBSSxPQUFPRixRQUFQLEtBQW9CLFdBQXBCLElBQW1DLE9BQU9BLFFBQVAsS0FBb0IsVUFBM0QsRUFBdUU7QUFDckUsWUFBTSxJQUFJRSxLQUFKLDREQUFOO0FBR0Q7O0FBRUQsUUFBSSxPQUFPRCxRQUFQLEtBQW9CLFdBQXBC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YjtBQUNGO0FBQ0E7QUFDRTlkLGlCQUFlLEVBQWZBLGVBaERhOztBQWlEYjtBQUNGO0FBQ0E7QUFDRUcsdUJBQXFCLEVBQXJCQSxxQkFwRGE7O0FBcURiO0FBQ0Y7QUFDQTtBQUNFMkIsZ0JBQWMsRUFBZEEsY0FBY0E7QUF4REQsQ0FBZixFOztBQ25GQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFZTtBQUNiO0FBQ0Y7QUFDQTtBQUNFZ0wsS0FBRyxFQUFIQSxHQUphOztBQUtiO0FBQ0Y7QUFDQTtBQUNFdndCLE9BQUssRUFBTEEsVUFSYTs7QUFTYjtBQUNGO0FBQ0E7QUFDRXdDLFdBQVMsRUFBVEEsY0FaYTs7QUFhYjtBQUNGO0FBQ0E7QUFDRXRGLFVBQVEsRUFBUkEsYUFoQmE7O0FBaUJiO0FBQ0Y7QUFDQTtBQUNFc04sV0FBUyxFQUFUQSxvQkFwQmE7O0FBcUJiO0FBQ0Y7QUFDQTtBQUNFOEQsWUFBVSxFQUFWQSxxQkF4QmE7O0FBeUJiO0FBQ0Y7QUFDQTtBQUNFcUcsZ0JBQWMsRUFBZEEsbUJBNUJhOztBQTZCYjtBQUNGO0FBQ0E7QUFDRWdFLGdCQUFjLEVBQWRBLG1CQWhDYTs7QUFpQ2I7QUFDRjtBQUNBO0FBQ0U4USx3QkFBc0IsRUFBdEJBLGlDQXBDYTs7QUFxQ2I7QUFDRjtBQUNBO0FBQ0V4VixrQkFBZ0IsRUFBaEJBLGdCQXhDYTs7QUF5Q2I7QUFDRjtBQUNBO0FBQ0UrRCxxQkFBbUIsRUFBbkJBLG1CQTVDYTs7QUE2Q2I7QUFDRjtBQUNBO0FBQ0VxUSxTQUFPLEVBQVBBLE9BaERhOztBQWlEYjtBQUNGO0FBQ0E7QUFDRW1aLEtBQUcsRUFBSEEsT0FwRGE7O0FBcURiO0FBQ0Y7QUFDQTtBQUNFaG9CLE1BQUksRUFBSkEsUUFBSUE7QUF4RFMsQ0FBZiIsImZpbGUiOiIzMzMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cclxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVC0wXHJcblxyXG4vKipcclxuICogVGhlIGJ1aWx0LWluIGNsYXNzIGZvciBhc3luY2hyb25vdXMgUHJvbWlzZXMuXHJcbiAqIEBleHRlcm5hbCBQcm9taXNlXHJcbiAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvUHJvbWlzZVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBBIFByb21pc2Ugb2JqZWN0IHRoYXQgY2FuIGJlIHJlc29sdmVkLCByZWplY3RlZCBvciBjYW5jZWxlZCBhdCBhbnkgdGltZSBieSB0aGVcclxuICogdXNlci5cclxuICpcclxuICogQGV4dGVuZHMgZXh0ZXJuYWw6UHJvbWlzZVxyXG4gKi9cclxuY2xhc3MgRGVmZXJyZWQgZXh0ZW5kcyBQcm9taXNlIHtcclxuICAvKipcclxuICAgKiBAY29uc3RydWN0b3JcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IFtleGVjdXRhYmxlPSgpID0+IHt9XSAtIFRoZSBmdW5jdGlvbiB0byBiZSBleGVjdXRlZCBieSB0aGVcclxuICAgKiBjb25zdHJ1Y3RvciwgZHVyaW5nIHRoZSBwcm9jZXNzIG9mIGNvbnN0cnVjdGluZyB0aGUgcHJvbWlzZS4gVGhlIHNpZ25hdHVyZVxyXG4gICAqIG9mIHRoaXMgaXMgZXhwZWN0ZWQgdG8gYmU6IGV4ZWN1dGFibGUoICByZXNvbHV0aW9uRnVuYywgcmVqZWN0aW9uRnVuYywgY2FuY2VsbGF0aW9uRnVuYyApLlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvblJlc29sdmUgLSBPcHRpb25hbCBmdW5jdGlvbiB0byBleGVjdXRlIG9uY2UgdGhlIHByb21pc2VcclxuICAgKiBpcyByZXNvbHZlZC5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb25SZWplY3QgLSBPcHRpb25hbCBmdW5jdGlvbiB0byBleGVjdXRlIG9uY2UgdGhlIHByb21pc2VcclxuICAgKiBpcyByZWplY3RlZC5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb25DYW5jZWwgLSBPcHRpb25hbCBmdW5jdGlvbiB0byBleGVjdXRlIGlmIHRoZSB1c2VyIGNhbmNlbHNcclxuICAgKiB0aGUgcHJvbWlzZS4gQ2FuY2VsaW5nIHJlc3VsdHMgaW4gdGhlIHByb21pc2UgaGF2aW5nIGEgc3RhdHVzIG9mICdyZXNvbHZlZCcuXHJcbiAgICovXHJcbiAgY29uc3RydWN0b3IoZXhlY3V0YWJsZSA9ICgpID0+IHt9LCBvblJlc29sdmUsIG9uUmVqZWN0LCBvbkNhbmNlbCkge1xyXG4gICAgaWYgKHR5cGVvZiBleGVjdXRhYmxlICE9PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgQ2Fubm90IGNyZWF0ZSBuZXcgRGVmZXJyZWQuIEV4ZWN1dGFibGUgbXVzdCBiZSBhIGZ1bmN0aW9uLmBcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodHlwZW9mIG9uUmVzb2x2ZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIG9uUmVzb2x2ZSAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgYENhbm5vdCBjcmVhdGUgbmV3IERlZmVycmVkLiBPblJlc29sdmUgbXVzdCBiZSBhIGZ1bmN0aW9uLmBcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodHlwZW9mIG9uUmVqZWN0ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygb25SZWplY3QgIT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgIGBDYW5ub3QgY3JlYXRlIG5ldyBEZWZlcnJlZC4gT25SZWplY3QgbXVzdCBiZSBhIGZ1bmN0aW9uLmBcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodHlwZW9mIG9uQ2FuY2VsICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygb25DYW5jZWwgIT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgIGBDYW5ub3QgY3JlYXRlIG5ldyBEZWZlcnJlZC4gT25DYW5jZWwgbXVzdCBiZSBhIGZ1bmN0aW9uLmBcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgcmVzO1xyXG4gICAgbGV0IHJlajtcclxuICAgIGxldCBjYW5jZWw7XHJcbiAgICBjb25zdCBzdGF0dXMgPSB7XHJcbiAgICAgIHJlc29sdmVkOiBmYWxzZSxcclxuICAgICAgcmVqZWN0ZWQ6IGZhbHNlLFxyXG4gICAgICBjYW5jZWxlZDogZmFsc2UsXHJcbiAgICAgIHBlbmRpbmc6IHRydWUsXHJcbiAgICB9O1xyXG5cclxuICAgIHN1cGVyKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgLy8gU3RvcmUgdGhlIHJlc29sdmVyXHJcbiAgICAgIHJlcyA9IHZhbHVlID0+IHtcclxuICAgICAgICBpZiAoc3RhdHVzLnBlbmRpbmcpIHtcclxuICAgICAgICAgIHN0YXR1cy5yZXNvbHZlZCA9IHRydWU7XHJcbiAgICAgICAgICBzdGF0dXMucGVuZGluZyA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgIGlmICh0eXBlb2Ygb25SZXNvbHZlID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIHZhbHVlID0gb25SZXNvbHZlKHZhbHVlKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICByZXR1cm4gcmVzb2x2ZSh2YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9O1xyXG5cclxuICAgICAgLy8gU3RvcmUgdGhlIHJlamVjdGVyXHJcbiAgICAgIHJlaiA9IHZhbHVlID0+IHtcclxuICAgICAgICBpZiAoc3RhdHVzLnBlbmRpbmcpIHtcclxuICAgICAgICAgIHN0YXR1cy5yZWplY3RlZCA9IHRydWU7XHJcbiAgICAgICAgICBzdGF0dXMucGVuZGluZyA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgIGlmICh0eXBlb2Ygb25SZWplY3QgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgdmFsdWUgPSBvblJlamVjdCh2YWx1ZSk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgcmV0dXJuIHJlamVjdCh2YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9O1xyXG5cclxuICAgICAgLy8gU3RvcmUgdGhlIGNhbmNlbGVyXHJcbiAgICAgIGNhbmNlbCA9IHZhbHVlID0+IHtcclxuICAgICAgICBpZiAoc3RhdHVzLnBlbmRpbmcpIHtcclxuICAgICAgICAgIHN0YXR1cy5jYW5jZWxlZCA9IHRydWU7XHJcbiAgICAgICAgICBzdGF0dXMucGVuZGluZyA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgIGlmICh0eXBlb2Ygb25DYW5jZWwgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgdmFsdWUgPSBvbkNhbmNlbCh2YWx1ZSk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgcmV0dXJuIHJlc29sdmUodmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfTtcclxuXHJcbiAgICAgIC8vIFJ1biB0aGUgZXhlY3V0YWJsZSB3aXRoIGN1c3RvbSByZXNvbHZlciBhbmQgcmVqZWN0ZXJcclxuICAgICAgZXhlY3V0YWJsZShyZXMsIHJlaiwgY2FuY2VsKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuX3N0YXR1cyA9IHN0YXR1cztcclxuICAgIHRoaXMuX3Jlc29sdmUgPSByZXM7XHJcbiAgICB0aGlzLl9yZWplY3QgPSByZWo7XHJcbiAgICB0aGlzLl9jYW5jZWwgPSBjYW5jZWw7XHJcbiAgICB0aGlzLl9leGVjdXRhYmxlID0gZXhlY3V0YWJsZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIHJlc29sdmVkIHN0YXRlIG9mIHRoZSBwcm9taXNlLlxyXG4gICAqXHJcbiAgICogQHJlYWRvbmx5XHJcbiAgICovXHJcbiAgZ2V0IHJlc29sdmVkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3N0YXR1cy5yZXNvbHZlZDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIHJlamVjdGVkIHN0YXRlIG9mIHRoZSBwcm9taXNlLlxyXG4gICAqXHJcbiAgICogQHJlYWRvbmx5XHJcbiAgICovXHJcbiAgZ2V0IHJlamVjdGVkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3N0YXR1cy5yZWplY3RlZDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIGNhbmNlbGVkIHN0YXRlIG9mIHRoZSBwcm9taXNlLlxyXG4gICAqXHJcbiAgICogQHJlYWRvbmx5XHJcbiAgICovXHJcbiAgZ2V0IGNhbmNlbGVkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3N0YXR1cy5jYW5jZWxlZDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIHBlbmRpbmcgc3RhdGUgb2YgdGhlIHByb21pc2UuXHJcbiAgICpcclxuICAgKiBAcmVhZG9ubHlcclxuICAgKi9cclxuICBnZXQgcGVuZGluZygpIHtcclxuICAgIHJldHVybiB0aGlzLl9zdGF0dXMucGVuZGluZztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEZvcmNlIHRoZSBwcm9taXNlIHRvIHJlc29sdmUuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge2FueT19IHZhbHVlIC0gVmFsdWUgdG8gcGFzcyB0byB0aGUgcmVzb2x2ZXIuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7YW55fSAtIFRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIHJlc29sdmVyIGZ1bmN0aW9uLlxyXG4gICAqL1xyXG4gIHJlc29sdmUodmFsdWUpIHtcclxuICAgIHJldHVybiB0aGlzLl9yZXNvbHZlKHZhbHVlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEZvcmNlIHRoZSBwcm9taXNlIHRvIHJlamVjdC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7YW55PX0gdmFsdWUgLSBWYWx1ZSB0byBwYXNzIHRvIHRoZSByZWplY3Rlci5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHthbnl9IC0gVGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgcmVqZWN0ZXIgZnVuY3Rpb24uXHJcbiAgICovXHJcbiAgcmVqZWN0KHZhbHVlKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fcmVqZWN0KHZhbHVlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEZvcmNlIHRoZSBwcm9taXNlIHRvIHJlc29sdmUgYW5kIHNldCB0aGUgY2FuY2VsZWQgc3RhdGUgdG8gdHJ1ZS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7YW55PX0gdmFsdWUgLSBWYWx1ZSB0byBwYXNzIHRvIHRoZSBjYW5jZWxsZXIuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7YW55fSAtIFRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGNhbmNlbGxlciBmdW5jdGlvbi5cclxuICAgKi9cclxuICBjYW5jZWwodmFsdWUpIHtcclxuICAgIHJldHVybiB0aGlzLl9jYW5jZWwodmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUnVuIHRoZSBwcm9taXNlIGZ1bmN0aW9uIHRvIHRyeSB0byByZXNvbHZlIHRoZSBwcm9taXNlLiBQcm9taXNlIG11c3QgYmVcclxuICAgKiBwZW5kaW5nLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHsuLi5hbnl9IGFyZ3MgLSBPcHRpb25hbCBhcmd1bWVudHMgdG8gcGFzcyBhZnRlciByZXNvbHZlIGFuZCByZWplY3QuXHJcbiAgICovXHJcbiAgZXhlY3V0ZSguLi5hcmdzKSB7XHJcbiAgICBpZiAodGhpcy5wZW5kaW5nKSB7XHJcbiAgICAgIHRoaXMuX2V4ZWN1dGFibGUodGhpcy5fcmVzb2x2ZSwgdGhpcy5fcmVqZWN0LCB0aGlzLl9jYW5jZWwsIC4uLmFyZ3MpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIGEgY2FuY2VsZWQgZGVmZXJyZWQgcHJvbWlzZS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7YW55PX0gdmFsdWUgLSBWYWx1ZSB0byBjYW5jZWwgdGhlIHByb21pc2Ugd2l0aC5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtEZWZlcnJlZH1cclxuICAgKi9cclxuICBzdGF0aWMgY2FuY2VsKHZhbHVlKSB7XHJcbiAgICByZXR1cm4gbmV3IERlZmVycmVkKChfcmVzb2x2ZSwgX3JlamVjdCwgY2FuY2VsKSA9PiB7XHJcbiAgICAgIGNhbmNlbCh2YWx1ZSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWZlcnJlZCBwcm9taXNlIHRoYXQgd2lsbCByZXNvbHZlIG9yIHJlamVjdCBvbmNlIGFsbCBwcm9taXNlc1xyXG4gICAqIGluIHRoZSBpbnB1dCBhcnJheSBoYXZlIGJlZW4gcmVzb2x2ZWQgb3Igb25lIHByb21pc2UgaXMgY2FuY2VsZWQgb3IgcmVqZWN0ZWQuXHJcbiAgICogUHJvbWlzZXMgaW4gdGhlIGFycmF5IHRoYXQgYXJlIERlZmVycmVkIHByb21pc2VzIHdpbGwgYmUgbWFudWFsbHkgcmVzb2x2ZWQsXHJcbiAgICogcmVqZWN0ZWQgb3IgY2FuY2VsZWQgd2hlbiBjYWxsaW5nIHJlc29sdmUsIHJlamVjdCBvciBjYW5jZWwgb24gdGhlIHJldHVybiBwcm9taXNlLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtBcnJheS48YW55Pn0gaXRlcmFibGUgLSBBbiBpdGVyYWJsZSBzdWNoIGFzIGFuIGFycmF5LlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvblJlc29sdmUgLSBPcHRpb25hbCBmdW5jdGlvbiB0byBleGVjdXRlIG9uY2UgdGhlIHByb21pc2VcclxuICAgKiBpcyByZXNvbHZlZC5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb25SZWplY3QgLSBPcHRpb25hbCBmdW5jdGlvbiB0byBleGVjdXRlIG9uY2UgdGhlIHByb21pc2VcclxuICAgKiBpcyByZWplY3RlZC5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb25DYW5jZWwgLSBPcHRpb25hbCBmdW5jdGlvbiB0byBleGVjdXRlIGlmIHRoZSB1c2VyIGNhbmNlbHNcclxuICAgKiB0aGUgcHJvbWlzZS4gQ2FuY2VsaW5nIHJlc3VsdHMgaW4gdGhlIHByb21pc2UgaGF2aW5nIGEgc3RhdHVzIG9mICdjYW5jZWxlZCcuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyBEZWZlcnJlZFxyXG4gICAqL1xyXG4gIHN0YXRpYyBhbGwoaXRlcmFibGUsIG9uUmVzb2x2ZSwgb25SZWplY3QsIG9uQ2FuY2VsKSB7XHJcbiAgICBpZiAoaXRlcmFibGUgPT0gbnVsbCB8fCB0eXBlb2YgaXRlcmFibGVbU3ltYm9sLml0ZXJhdG9yXSAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICBsZXQgZSA9IGBDYW5ub3QgZXhlY3V0ZSBEZWZlcnJlZC5hbGwuIEZpcnN0IGFyZ3VtZW50IG11c3QgYmUgaXRlcmFibGUuYDtcclxuXHJcbiAgICAgIGlmICh0eXBlb2Ygb25SZWplY3QgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICBlID0gb25SZWplY3QoZSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBEZWZlcnJlZC5yZWplY3QoZSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgYXJyYXkgPSBbLi4uaXRlcmFibGVdO1xyXG4gICAgY29uc3QgZGVmZXJyZWQgPSBhcnJheS5maWx0ZXIoaXRlbSA9PiBpdGVtIGluc3RhbmNlb2YgRGVmZXJyZWQpO1xyXG5cclxuICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBEZWZlcnJlZChcclxuICAgICAgdW5kZWZpbmVkLFxyXG4gICAgICByZXNvbHZlVmFsdWUgPT4ge1xyXG4gICAgICAgIGRlZmVycmVkLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgICBpdGVtLnJlc29sdmUocmVzb2x2ZVZhbHVlKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBkZWZlcnJlZC5sZW5ndGggPSAwO1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIG9uUmVzb2x2ZSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgcmV0dXJuIG9uUmVzb2x2ZShyZXNvbHZlVmFsdWUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICByZXR1cm4gcmVzb2x2ZVZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgZXJyb3IgPT4ge1xyXG4gICAgICAgIGRlZmVycmVkLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgICBpdGVtLnJlamVjdChlcnJvcik7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgZGVmZXJyZWQubGVuZ3RoID0gMDtcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiBvblJlamVjdCA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgcmV0dXJuIG9uUmVqZWN0KGVycm9yKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmV0dXJuIGVycm9yO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgY2FuY2VsVmFsdWUgPT4ge1xyXG4gICAgICAgIGRlZmVycmVkLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgICBpdGVtLmNhbmNlbChjYW5jZWxWYWx1ZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgZGVmZXJyZWQubGVuZ3RoID0gMDtcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiBvbkNhbmNlbCA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgcmV0dXJuIG9uQ2FuY2VsKGNhbmNlbFZhbHVlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmV0dXJuIGNhbmNlbFZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCBudW1JdGVtcyA9IGFycmF5Lmxlbmd0aDtcclxuICAgIGNvbnN0IGl0ZW1UcmFja2VyID0ge1xyXG4gICAgICBmYWlsZWQ6IGZhbHNlLFxyXG4gICAgICBudW1SZXNvbHZlZDogMCxcclxuICAgICAgcmVzb2x1dGlvbnM6IFtdXHJcbiAgICB9XHJcblxyXG4gICAgYXJyYXkuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcclxuICAgICAgaWYgKGl0ZW1UcmFja2VyLmZhaWxlZCkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfSBlbHNlIGlmICghKGl0ZW0gaW5zdGFuY2VvZiBQcm9taXNlKSkge1xyXG4gICAgICAgIGl0ZW1UcmFja2VyLnJlc29sdXRpb25zW2luZGV4XSA9IGl0ZW07XHJcbiAgICAgICAgaXRlbVRyYWNrZXIubnVtUmVzb2x2ZWQgKz0gMTtcclxuXHJcbiAgICAgICAgaWYgKGl0ZW1UcmFja2VyLm51bVJlc29sdmVkID09PSBudW1JdGVtcykge1xyXG4gICAgICAgICAgcmVzdWx0LnJlc29sdmUoaXRlbVRyYWNrZXIucmVzb2x1dGlvbnMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGl0ZW0udGhlbihcclxuICAgICAgICB2YWx1ZSA9PiB7XHJcbiAgICAgICAgICBpZiAoIWl0ZW1UcmFja2VyLmZhaWxlZCAmJiAhaXRlbS5jYW5jZWxlZCkge1xyXG4gICAgICAgICAgICBpdGVtVHJhY2tlci5yZXNvbHV0aW9uc1tpbmRleF0gPSB2YWx1ZTtcclxuICAgICAgICAgICAgaXRlbVRyYWNrZXIubnVtUmVzb2x2ZWQgKz0gMTtcclxuXHJcbiAgICAgICAgICAgIGlmIChpdGVtVHJhY2tlci5udW1SZXNvbHZlZCA9PT0gbnVtSXRlbXMpIHtcclxuICAgICAgICAgICAgICByZXN1bHQucmVzb2x2ZShpdGVtVHJhY2tlci5yZXNvbHV0aW9ucyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSBpZiAoIWl0ZW1UcmFja2VyLmZhaWxlZCkge1xyXG4gICAgICAgICAgICBpdGVtVHJhY2tlci5mYWlsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICByZXN1bHQuY2FuY2VsKHZhbHVlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yID0+IHtcclxuICAgICAgICAgIGlmICghaXRlbVRyYWNrZXIuZmFpbGVkKSB7XHJcbiAgICAgICAgICAgIGl0ZW1UcmFja2VyLmZhaWxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHJlc3VsdC5yZWplY3QoZXJyb3IpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBEZWZlcnJlZDtcclxuIiwiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXHJcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxyXG5pbXBvcnQgRGVmZXJyZWQgZnJvbSAnY29yZS9EZWZlcnJlZCc7XHJcblxyXG4vKipcclxuICogQSBjb2xsZWN0aW9uIG9mIHVzZWZ1bCBnZW5lcmljIGZ1bmN0aW9ucy5cclxuICpcclxuICogQGhpZGVjb25zdHJ1Y3RvclxyXG4gKi9cclxuY2xhc3MgVXRpbHMge1xyXG4gIC8qKlxyXG4gICAqIEBzdGF0aWNcclxuICAgKlxyXG4gICAqIEdlbmVyYXRlIGEgdW5pcXVlIGlkXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7U3RyaW5nfVxyXG4gICAqL1xyXG4gIHN0YXRpYyBjcmVhdGVJZCgpIHtcclxuICAgIHJldHVybiAneHh4eHh4eHh4eHh4NHh4eHl4eHh4eHh4eHh4eHh4eHgnLnJlcGxhY2UoL1t4eV0vZywgYyA9PiB7XHJcbiAgICAgIGNvbnN0IHJhbmRvbU51bWJlciA9IE1hdGguZmxvb3IoKERhdGUubm93KCkgKyBNYXRoLnJhbmRvbSgpICogMTYpICUgMTYpO1xyXG4gICAgICBpZiAoYyA9PT0gJ3gnKSB7XHJcbiAgICAgICAgcmV0dXJuIHJhbmRvbU51bWJlci50b1N0cmluZygxNik7XHJcbiAgICAgIH1cclxuICAgICAgLy8gU2V0IGJpdCA2IGFuZCA3IHRvIDAgYW5kIDFcclxuICAgICAgcmV0dXJuICgocmFuZG9tTnVtYmVyICYgMHgzKSB8IDB4OCkudG9TdHJpbmcoMTYpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAc3RhdGljXHJcbiAgICpcclxuICAgKiBDaGVjayBhIG5hbWUgc3RyaW5nIGFnYWluc3QgYW4gYXJyYXkgb2Ygc3RyaW5ncyB0byBkZXRlcm1pbmUgaWYgaXQgaXMgdW5pcXVlLlxyXG4gICAqIElmIGl0IGlzbid0LCBhcHBlbmQgaW5jcmVtZW50ZWQgdHJhaWxpbmcgaW50ZWdlcnMgdG8gdGhlIGVuZCBvZiB0aGUgbmFtZVxyXG4gICAqIHVudGlsIGl0IGlzIHVuaXF1ZS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gU3RyaW5nIG5hbWUgdG8gbWFrZSB1bmlxdWUuXHJcbiAgICogQHBhcmFtIHtBcnJheS48c3RyaW5nPj19IG5hbWVBcnJheSAtIEFycmF5IG9mIHN0cmluZyBuYW1lcyB0byBjaGVjayBhZ2FpbnMuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxyXG4gICAqL1xyXG4gIHN0YXRpYyBnZXRVbmlxdWVOYW1lKG5hbWUsIG5hbWVBcnJheSA9IFtdKSB7XHJcbiAgICAvLyBJZiB0aGUgbmFtZSBpc24ndCBpbiB0aGUgYXJyYXkgcmV0dXJuIGl0IHJpZ2h0IGF3YXlcclxuICAgIGlmICghbmFtZUFycmF5LmluY2x1ZGVzKG5hbWUpKSB7XHJcbiAgICAgIHJldHVybiBuYW1lO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IG5hbWVTZXQgPSBuZXcgU2V0KG5hbWVBcnJheSk7XHJcblxyXG4gICAgLy8gU2VwYXJhdGUgdGhlIG5hbWUgaW50byBzdHJpbmcgYW5kIHRyYWlsaW5nIG51bWJlcnNcclxuICAgIGNvbnN0IG1hdGNoR3JvdXAgPSBuYW1lLm1hdGNoKC9cXGQqJC8pO1xyXG4gICAgY29uc3Qge2luZGV4fSA9IG1hdGNoR3JvdXA7XHJcbiAgICBjb25zdCBiYXNlTmFtZSA9IG5hbWUuc2xpY2UoMCwgaW5kZXgpO1xyXG4gICAgbGV0IGluY3JlbWVudCA9IE51bWJlcihtYXRjaEdyb3VwWzBdKTtcclxuXHJcbiAgICAvLyBGaW5kIHRoZSBoaWdoZXN0IHRyYWlsaW5nIG51bWJlciB2YWx1ZSBmb3IgdGhlIGJhc2Ugb2YgdGhlIG5hbWVcclxuICAgIG5hbWVTZXQuZm9yRWFjaChzZXROYW1lID0+IHtcclxuICAgICAgY29uc3Qgc2V0TWF0Y2hHcm91cCA9IHNldE5hbWUubWF0Y2goL1xcZCokLyk7XHJcblxyXG4gICAgICBpZiAoc2V0TmFtZS5zbGljZSgwLCBzZXRNYXRjaEdyb3VwLmluZGV4KSA9PT0gYmFzZU5hbWUpIHtcclxuICAgICAgICBjb25zdCBzZXRJbmNyZW1lbnQgPSBOdW1iZXIoc2V0TWF0Y2hHcm91cFswXSk7XHJcblxyXG4gICAgICAgIGlmIChzZXRJbmNyZW1lbnQgPiBpbmNyZW1lbnQpIHtcclxuICAgICAgICAgIGluY3JlbWVudCA9IHNldEluY3JlbWVudDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIC8vIEluY3JlbWVudCB0aGUgaGlnaGVzdCB0cmFpbGluZyBudW1iZXIgYW5kIGFwcGVuZCB0byB0aGUgbmFtZVxyXG4gICAgcmV0dXJuIGAke2Jhc2VOYW1lfSR7aW5jcmVtZW50ICsgMX1gO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIGEgZGVmZXJyZWQgcHJvbWlzZSB0aGF0IHdpbGwgd2FpdCBhIGdpdmVuIG51bWJlciBvZiBzZWNvbmRzIGJlZm9yZVxyXG4gICAqIHJlc29sdmluZy4gUGFzcyBkZWx0YSB0aW1lIGluIG1pbGxpc2Vjb25kcyB0byB0aGUgZGVmZXJyZWQgcHJvbWlzZSdzIGV4ZWN1dGVcclxuICAgKiBtZXRob2QgaW4gYW4gdXBkYXRlIGxvb3AgdG8gcHJvZ3Jlc3MgdGltZS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbc2Vjb25kcz0wXSAtIE51bWJlciBvZiBzZWNvbmRzIHRvIHdhaXQgYmVmb3JlIHJlc29sdmluZy5cclxuICAgKiBAcGFyYW0ge09iamVjdD19IG9wdGlvbnMgLSBPcHRpb25hbCBvcHRpb25zIG9iamVjdFxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRpb25zLm9uRmluaXNoXSAtIENhbGxiYWNrIHRvIGV4ZWN1dGUgb25jZSB0aGUgd2FpdCB0aW1lXHJcbiAgICogaXMgbWV0LlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvcHRpb25zLm9uUHJvZ3Jlc3MgLSBDYWxsYmFjayB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgd2FpdFxyXG4gICAqIHRpbWUgcHJvZ3Jlc3NlcyB0b3dhcmRzIHRoZSB0YXJnZXQgbnVtYmVyIG9mIHNlY29uZHMuIFRoZSBhbW91bnQgb2YgcHJvZ3Jlc3NcclxuICAgKiBhcyBhIDAtMSBwZXJjZW50YWdlIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudC5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb3B0aW9ucy5vbkNhbmNlbCAtIENhbGxiYWNrIHRvIGV4ZWN1dGUgaWYgdGhlIHVzZXIgY2FuY2Vsc1xyXG4gICAqIHRoZSB3YWl0IGJlZm9yZSBjb21wbGV0aW9uLlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvcHRpb25zLm9uRXJyb3IgLSBDYWxsYmFjayB0byBleGVjdXRlIGlmIHRoZSB3YWl0IHN0b3BzXHJcbiAgICogYmVjYXVzZSBhbiBlcnJvciBpcyBlbmNvdW50ZXJlZC4gVGhlIGVycm9yIG1lc3NhZ2UgaXMgcGFzc2VkIGFzIGEgcGFyYW1ldGVyLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0RlZmVycmVkfVxyXG4gICAqL1xyXG4gIHN0YXRpYyB3YWl0KHNlY29uZHMgPSAwLCB7b25GaW5pc2gsIG9uUHJvZ3Jlc3MsIG9uQ2FuY2VsLCBvbkVycm9yfSA9IHt9KSB7XHJcbiAgICAvLyBNYWtlIHN1cmUgc2Vjb25kcyBpcyBudW1lcmljXHJcbiAgICBpZiAodHlwZW9mIHNlY29uZHMgIT09ICdudW1iZXInKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICBgSW52YWxpZCBzZWNvbmRzIHZhbHVlICR7c2Vjb25kc30gZm9yIHdhaXQuIERlZmF1bHRpbmcgdG8gMC5gXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBzZWNvbmRzID0gMDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBSZXNvbHZlIGltbWVkaWF0ZWx5IGlmIHRoZSB3YWl0IHRpbWUgaXMgbm90IGdyZWF0ZXIgdGhhbiAwXHJcbiAgICBpZiAoc2Vjb25kcyA8PSAwKSB7XHJcbiAgICAgIGlmICh0eXBlb2Ygb25GaW5pc2ggPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICBvbkZpbmlzaCgpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gRGVmZXJyZWQucmVzb2x2ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBjdXJyZW50VGltZSA9IDA7XHJcbiAgICBjb25zdCB0b3RhbFRpbWUgPSBzZWNvbmRzICogMTAwMDsgLy8gY29udmVydCB0byBtaWxsaXNlY29uZHNcclxuXHJcbiAgICAvLyBFeGVjdXRhYmxlIHRvIHBhc3MgdG8gRGVmZXJyZWQsIG1lYW50IHRvIGJlIHJ1biBpbiBhbiB1cGRhdGUgbG9vcFxyXG4gICAgY29uc3Qgb25VcGRhdGUgPSAocmVzb2x2ZSwgcmVqZWN0LCBfY2FuY2VsLCBkZWx0YVRpbWUgPSAwKSA9PiB7XHJcbiAgICAgIGlmICh0eXBlb2YgZGVsdGFUaW1lICE9PSAnbnVtYmVyJykge1xyXG4gICAgICAgIGNvbnN0IGUgPSBuZXcgRXJyb3IoXHJcbiAgICAgICAgICBgSW52YWxpZCBwcm9wZXJ0eSB3YWl0IGRlbHRhVGltZS4gRGVsdGFUaW1lIG11c3QgYmUgYSBudW1iZXIuYFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgcmVqZWN0KGUpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gTWFrZSBzdXJlIHRpbWUgaGFzIHBhc3NlZFxyXG4gICAgICBpZiAoZGVsdGFUaW1lID09PSAwKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBTaWduYWwgcHJvZ3Jlc3NcclxuICAgICAgY3VycmVudFRpbWUgKz0gZGVsdGFUaW1lO1xyXG4gICAgICBpZiAoY3VycmVudFRpbWUgPCAwKSB7XHJcbiAgICAgICAgY3VycmVudFRpbWUgPSAwO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodHlwZW9mIG9uUHJvZ3Jlc3MgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICBvblByb2dyZXNzKE1hdGgubWluKGN1cnJlbnRUaW1lIC8gdG90YWxUaW1lLCAxKSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIFNpZ25hbCBjb21wbGV0aW9uIG9uY2UgdGltZSBpcyB1cFxyXG4gICAgICBpZiAoY3VycmVudFRpbWUgPj0gdG90YWxUaW1lKSB7XHJcbiAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiBuZXcgRGVmZXJyZWQob25VcGRhdGUsIG9uRmluaXNoLCBvbkVycm9yLCBvbkNhbmNlbCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgICogR2V0IGEgcmFuZG9tIGZsb2F0IG51bWJlciBiZXR3ZWVuIGEgbWluIChpbmNsdXNpdmUpIGFuZCBtYXggKGV4Y2x1c2l2ZSkgdmFsdWVcclxuICAgICogQHBhcmFtIHtudW1iZXJ9IG1pbiBtaW5pbXVtIHZhbHVlXHJcbiAgICAqIEBwYXJhbSB7bnVtYmVyfSBtYXggbWF4aW11bSB2YWx1ZVxyXG4gICAgKiBAcmV0dXJucyB7ZmxvYXR9XHJcbiAgICAqL1xyXG4gIHN0YXRpYyBnZXRSYW5kb21GbG9hdChtaW4sIG1heCkge1xyXG4gICAgcmV0dXJuIE1hdGgucmFuZG9tKCkgKiAobWF4IC0gbWluKSArIG1pbjtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAgKiBHZXQgYSByYW5kb20gaW50ZWdlciBudW1iZXIgYmV0d2VlbiBhIG1pbiAoaW5jbHVzaXZlKSBhbmQgbWF4IChleGNsdXNpdmUpIHZhbHVlXHJcbiAgICAqIEBwYXJhbSB7bnVtYmVyfSBtaW4gbWluaW11bSB2YWx1ZVxyXG4gICAgKiBAcGFyYW0ge251bWJlcn0gbWF4IG1heGltdW0gdmFsdWVcclxuICAgICogQHJldHVybnMge2ludGVnZXJ9XHJcbiAgICAqL1xyXG4gIHN0YXRpYyBnZXRSYW5kb21JbnQobWluLCBtYXgpIHtcclxuICAgIG1pbiA9IE1hdGguY2VpbChtaW4pO1xyXG4gICAgbWF4ID0gTWF0aC5mbG9vcihtYXgpO1xyXG4gICAgcmV0dXJuIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIChtYXggLSBtaW4pKSArIG1pbjtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IFV0aWxzO1xyXG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxuY29uc3QgUmFkaWFuVG9EZWdyZWUgPSAxODAgLyBNYXRoLlBJO1xuY29uc3QgRGVncmVlVG9SYWRpYW4gPSBNYXRoLlBJIC8gMTgwO1xuXG4vKipcbiAqIEEgY29sbGVjdGlvbiBvZiB1c2VmdWwgbWF0aCBmdW5jdGlvbnMuXG4gKlxuICogQGhpZGVjb25zdHJ1Y3RvclxuICovXG5jbGFzcyBNYXRoVXRpbHMge1xuICAvKipcbiAgICogQ29udmVydCB0aGUgZ2l2ZW4gYW5nbGUgZnJvbSByYWRpYW5zIHRvIGRlZ3JlZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSByYWRpYW5zIC0gQW5nbGUgaW4gcmFkaWFucy5cbiAgICpcbiAgICogQHJldHVybnMge251bWJlcn0gLSBBbmdsZSBpbiBkZWdyZWVzLlxuICAgKi9cbiAgc3RhdGljIHRvRGVncmVlcyhyYWRpYW5zKSB7XG4gICAgcmV0dXJuIHJhZGlhbnMgKiBSYWRpYW5Ub0RlZ3JlZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0IHRoZSBnaXZlbiBhbmdsZSBmcm9tIGRlZ3JlZXMgdG8gcmFkaWFucy5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGRlZ3JlZXMgLSBBbmdsZSBpbiBkZWdyZWVzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSAtIEFuZ2xlIGluIHJhZGlhbnMuXG4gICAqL1xuICBzdGF0aWMgdG9SYWRpYW5zKGRlZ3JlZXMpIHtcbiAgICByZXR1cm4gZGVncmVlcyAqIERlZ3JlZVRvUmFkaWFuO1xuICB9XG5cbiAgLyoqXG4gICAqIExpbmVhcmx5IGludGVycG9sYXRlIGJldHdlZW4gdHdvIHZhbHVlcy5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGZyb20gLSBTdGFydCB2YWx1ZS5cbiAgICogQHBhcmFtIHtudW1iZXJ9IHRvIC0gVGFyZ2V0IHZhbHVlLlxuICAgKiBAcGFyYW0ge251bWJlcn0gZmFjdG9yIC0gMC0xIGFtb3VudCB0byBpbnRlcnBvbGF0ZSBiZXR3ZWVuIGZyb20gYW5kIHRvLlxuICAgKlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgc3RhdGljIGxlcnAoZnJvbSwgdG8sIGZhY3Rvcikge1xuICAgIHJldHVybiBmcm9tICsgKHRvIC0gZnJvbSkgKiBmYWN0b3I7XG4gIH1cblxuICAvKipcbiAgICogQ2xhbXAgYSBudW1iZXIgYmV0d2VlbiAyIHZhbHVlcy5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIC0gVmFsdWUgdG8gY2xhbXAuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbbWluPTBdIC0gTWludW11bSB2YWx1ZS5cbiAgICogQHBhcmFtIHtudW1iZXJ9IFttYXg9MV0gLSBNYXhpbXVtIHZhbHVlLlxuICAgKlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgc3RhdGljIGNsYW1wKHZhbHVlLCBtaW4gPSAwLCBtYXggPSAxKSB7XG4gICAgcmV0dXJuIE1hdGgubWF4KG1pbiwgTWF0aC5taW4odmFsdWUsIG1heCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZXMgdGhlIGNsb3Nlc3QgcG9pbnQgb24gYSBnaXZlbiAyRCBsaW5lIHNlZ2VtZW50XG4gICAqIGZyb20gYSBnaXZlbiAyRCBwb2ludC5cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gYSAtIEZpcnN0IHBvaW50IG9uIGxpbmUgc2VnbWVudC5cbiAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gYiAtIFNlY29uZCBwb2ludCBvbiBsaW5lIHNlZ21lbnQuXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IHAgLSAyRCBwb2ludC5cbiAgICpcbiAgICogQHJldHVybnMge0FycmF5LjxudW1iZXI+fVxuICAgKi9cbiAgc3RhdGljIGNsb3Nlc3RQb2ludE9uTGluZShhLCBiLCBwKSB7XG4gICAgY29uc3QgZGlzdFNxciA9IE1hdGhVdGlscy5kaXN0YW5jZVNxdWFyZWQoYSwgYik7XG5cbiAgICAvLyBMaW5lIHNlZ21lbnQgaXMgYSBzaW5nbGUgcG9pbnRcbiAgICBpZiAoZGlzdFNxciA9PT0gMCkge1xuICAgICAgcmV0dXJuIGE7XG4gICAgfVxuXG4gICAgY29uc3QgdCA9XG4gICAgICAoKHBbMF0gLSBhWzBdKSAqIChiWzBdIC0gYVswXSkgKyAocFsxXSAtIGFbMV0pICogKGJbMV0gLSBhWzFdKSkgLyBkaXN0U3FyO1xuXG4gICAgbGV0IHBvaW50ID0gWy4uLmFdO1xuICAgIGlmICh0ID4gMSkge1xuICAgICAgcG9pbnQgPSBbLi4uYl07XG4gICAgfSBlbHNlIGlmICh0ID4gMCkge1xuICAgICAgcG9pbnQgPSBbYVswXSArIHQgKiAoYlswXSAtIGFbMF0pLCBhWzFdICsgdCAqIChiWzFdIC0gYVsxXSldO1xuICAgIH1cblxuICAgIHJldHVybiBwb2ludDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBkaXN0YW5jZSBzcXVhcmVkIGZvciB0d28gMkQgcG9pbnRzLlxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBhIC0gMkQgcG9pbnQuXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IGIgLSAyRCBwb2ludC5cbiAgICpcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIHN0YXRpYyBkaXN0YW5jZVNxdWFyZWQoYSwgYikge1xuICAgIHJldHVybiAoYVswXSAtIGJbMF0pICogKGFbMF0gLSBiWzBdKSArIChhWzFdIC0gYlsxXSkgKiAoYVsxXSAtIGJbMV0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyaWFuZ3VsYXRlcyBhIHNldCBvZiAyRCBwb2ludHMgdXNpbmcgYW4gaW1wbGVtZW50YXRpb25cbiAgICogb2YgdGhlIEJvd3llci1XYXRzb24gaW5jcmVtZW50YWwgRGVsYXVuYXkgdHJpYW5ndWxhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheS48QXJyYXkuPG51bWJlcj4+fSB2ZXJ0aWNlcyAtIEFycmF5IG9mIDJEIHBvaW50cy5cbiAgICpcbiAgICogQHJldHVybnMge0FycmF5LjxBcnJheTxudW1iZXI+Pn0gLSBBcnJheSBvZiB0cmlhbmdsZSBpbmRpY2VzLlxuICAgKi9cbiAgc3RhdGljIGdldERlbGF1bmF5VHJpYW5ndWxhdGlvbih2ZXJ0aWNlcykge1xuICAgIGlmICghdmVydGljZXMgfHwgdmVydGljZXMubGVuZ3RoIDwgMykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQ2Fubm90IGdldCBkZWxhdW5heSB0cmlhbmd1bGF0aW9uIGZvciBwb2ludHMgJHt2ZXJ0aWNlc30uIElucHV0IG11c3QgY29udGFpbiBhdCBsZWFzdCB0aHJlZSBwb2ludHMuYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBsZXQgbWluWCA9IE51bWJlci5QT1NJVElWRV9JTkZJTklUWTtcbiAgICBsZXQgbWluWSA9IE51bWJlci5QT1NJVElWRV9JTkZJTklUWTtcbiAgICBsZXQgbWF4WCA9IE51bWJlci5ORUdBVElWRV9JTkZJTklUWTtcbiAgICBsZXQgbWF4WSA9IE51bWJlci5ORUdBVElWRV9JTkZJTklUWTtcblxuICAgIHZlcnRpY2VzLmZvckVhY2godiA9PiB7XG4gICAgICBtaW5YID0gdlswXSA8IG1pblggPyB2WzBdIDogbWluWDtcbiAgICAgIG1pblkgPSB2WzFdIDwgbWluWSA/IHZbMV0gOiBtaW5ZO1xuICAgICAgbWF4WCA9IHZbMF0gPiBtYXhYID8gdlswXSA6IG1heFg7XG4gICAgICBtYXhZID0gdlsxXSA+IG1heFkgPyB2WzFdIDogbWF4WTtcbiAgICB9KTtcblxuICAgIGNvbnN0IGRYID0gbWF4WCAtIG1pblg7XG4gICAgY29uc3QgZFkgPSBtYXhZIC0gbWluWTtcbiAgICBjb25zdCBtaWRYID0gKG1pblggKyBtYXhYKSAvIDI7XG4gICAgY29uc3QgbWlkWSA9IChtaW5ZICsgbWF4WSkgLyAyO1xuICAgIGNvbnN0IGRNYXggPSBkWCA+IGRZID8gZFggOiBkWTtcblxuICAgIGNvbnN0IHN1cGVySW5kaWNlcyA9IFtcbiAgICAgIHZlcnRpY2VzLmxlbmd0aCxcbiAgICAgIHZlcnRpY2VzLmxlbmd0aCArIDEsXG4gICAgICB2ZXJ0aWNlcy5sZW5ndGggKyAyLFxuICAgIF07XG5cbiAgICBjb25zdCB2ZXJ0c1dpdGhTdXBlciA9IFtcbiAgICAgIC4uLnZlcnRpY2VzLFxuICAgICAgW21pZFggLSAyMCAqIGRNYXgsIG1pZFkgLSBkTWF4XSxcbiAgICAgIFttaWRYLCBtaWRZICsgMjAgKiBkTWF4XSxcbiAgICAgIFttaWRYICsgMjAgKiBkTWF4LCBtaWRZIC0gZE1heF0sXG4gICAgXTtcblxuICAgIGNvbnN0IHN1cGVyU29ydGVkSW5kaWNlcyA9IE1hdGhVdGlscy5zb3J0UG9pbnRzQ0NXKFxuICAgICAgc3VwZXJJbmRpY2VzLFxuICAgICAgdmVydHNXaXRoU3VwZXJcbiAgICApO1xuXG4gICAgY29uc3Qgc3VwZXJUcmlhbmdsZSA9IHtcbiAgICAgIGluZGljZXM6IHN1cGVyU29ydGVkSW5kaWNlcyxcbiAgICAgIGVkZ2VzOiBbXG4gICAgICAgIFtzdXBlclNvcnRlZEluZGljZXNbMF0sIHN1cGVyU29ydGVkSW5kaWNlc1sxXV0sXG4gICAgICAgIFtzdXBlclNvcnRlZEluZGljZXNbMV0sIHN1cGVyU29ydGVkSW5kaWNlc1syXV0sXG4gICAgICAgIFtzdXBlclNvcnRlZEluZGljZXNbMl0sIHN1cGVyU29ydGVkSW5kaWNlc1swXV0sXG4gICAgICBdLFxuICAgIH07XG5cbiAgICBjb25zdCB0cmlhbmdsZXMgPSBbc3VwZXJUcmlhbmdsZV07XG5cbiAgICB2ZXJ0c1dpdGhTdXBlci5mb3JFYWNoKChuZXdWZXJ0LCBuZXdJbmRleCkgPT4ge1xuICAgICAgY29uc3QgaW52YWxpZFRyaWFuZ2xlcyA9IFtdO1xuICAgICAgdHJpYW5nbGVzLmZvckVhY2godHJpYW5nbGUgPT4ge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgTWF0aFV0aWxzLmlzUG9pbnRJbkNpcmN1bUNpcmNsZShcbiAgICAgICAgICAgIHZlcnRzV2l0aFN1cGVyW3RyaWFuZ2xlLmluZGljZXNbMF1dLFxuICAgICAgICAgICAgdmVydHNXaXRoU3VwZXJbdHJpYW5nbGUuaW5kaWNlc1sxXV0sXG4gICAgICAgICAgICB2ZXJ0c1dpdGhTdXBlclt0cmlhbmdsZS5pbmRpY2VzWzJdXSxcbiAgICAgICAgICAgIG5ld1ZlcnRcbiAgICAgICAgICApXG4gICAgICAgICkge1xuICAgICAgICAgIGludmFsaWRUcmlhbmdsZXMucHVzaCh0cmlhbmdsZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBib3VuZGluZ1BvbHkgPSBbXTtcbiAgICAgIGludmFsaWRUcmlhbmdsZXMuZm9yRWFjaCh0cmlhbmdsZSA9PiB7XG4gICAgICAgIHRyaWFuZ2xlLmVkZ2VzLmZvckVhY2goZWRnZSA9PiB7XG4gICAgICAgICAgbGV0IGNvdW50ID0gMDtcbiAgICAgICAgICBpbnZhbGlkVHJpYW5nbGVzLmZvckVhY2gob3RoZXJUcmlhbmdsZSA9PiB7XG4gICAgICAgICAgICBpZiAodHJpYW5nbGUgIT09IG90aGVyVHJpYW5nbGUpIHtcbiAgICAgICAgICAgICAgb3RoZXJUcmlhbmdsZS5lZGdlcy5mb3JFYWNoKG90aGVyRWRnZSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgKGVkZ2VbMF0gPT09IG90aGVyRWRnZVswXSAmJiBlZGdlWzFdID09PSBvdGhlckVkZ2VbMV0pIHx8XG4gICAgICAgICAgICAgICAgICAoZWRnZVsxXSA9PT0gb3RoZXJFZGdlWzBdICYmIGVkZ2VbMF0gPT09IG90aGVyRWRnZVsxXSlcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgIGNvdW50ICs9IDE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpZiAoY291bnQgPT09IDApIGJvdW5kaW5nUG9seS5wdXNoKGVkZ2UpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBpbnZhbGlkVHJpYW5nbGVzLmZvckVhY2godHJpYW5nbGUgPT4ge1xuICAgICAgICB0cmlhbmdsZXMuc3BsaWNlKHRyaWFuZ2xlcy5pbmRleE9mKHRyaWFuZ2xlKSwgMSk7XG4gICAgICB9KTtcblxuICAgICAgYm91bmRpbmdQb2x5LmZvckVhY2goZWRnZSA9PiB7XG4gICAgICAgIGNvbnN0IHNvcnRlZEluZGljZXMgPSBNYXRoVXRpbHMuc29ydFBvaW50c0NDVyhcbiAgICAgICAgICBbZWRnZVswXSwgZWRnZVsxXSwgbmV3SW5kZXhdLFxuICAgICAgICAgIHZlcnRzV2l0aFN1cGVyXG4gICAgICAgICk7XG5cbiAgICAgICAgdHJpYW5nbGVzLnB1c2goe1xuICAgICAgICAgIGluZGljZXM6IHNvcnRlZEluZGljZXMsXG4gICAgICAgICAgZWRnZXM6IFtcbiAgICAgICAgICAgIFtzb3J0ZWRJbmRpY2VzWzBdLCBzb3J0ZWRJbmRpY2VzWzFdXSxcbiAgICAgICAgICAgIFtzb3J0ZWRJbmRpY2VzWzFdLCBzb3J0ZWRJbmRpY2VzWzJdXSxcbiAgICAgICAgICAgIFtzb3J0ZWRJbmRpY2VzWzJdLCBzb3J0ZWRJbmRpY2VzWzBdXSxcbiAgICAgICAgICBdLFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgY29uc3QgdHJpYW5nbGVzVG9SZW1vdmUgPSBbXTtcbiAgICB0cmlhbmdsZXMuZm9yRWFjaCh0cmlhbmdsZSA9PiB7XG4gICAgICB0cmlhbmdsZS5pbmRpY2VzLmZvckVhY2goaW5kZXggPT4ge1xuICAgICAgICBpZiAoc3VwZXJJbmRpY2VzLmluY2x1ZGVzKGluZGV4KSkge1xuICAgICAgICAgIHRyaWFuZ2xlc1RvUmVtb3ZlLnB1c2godHJpYW5nbGUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRyaWFuZ2xlc1RvUmVtb3ZlLmZvckVhY2godHJpYW5nbGUgPT4ge1xuICAgICAgY29uc3QgaW5kZXggPSB0cmlhbmdsZXMuaW5kZXhPZih0cmlhbmdsZSk7XG4gICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgIHRyaWFuZ2xlcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRyaWFuZ2xlcy5tYXAodHJpYW5nbGUgPT4gdHJpYW5nbGUuaW5kaWNlcyk7XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyBpZiBhIGdpdmVuIDJEIHBvaW50IGlzIHdpdGhpbiB0aGUgY2ljcnVtY2lyY2xlXG4gICAqIGRlZmluZWQgYnkgdGhyZWUgMkQgcG9pbnRzLiBUaGUgdHJpYW5nbGUgcG9pbnRzIG11c3QgYmUgaW5cbiAgICogY291bnRlci1jbG9ja3dpc2Ugb3JkZXIgYSAtPiBiIC0+IGMuXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IGEgLSBGaXJzdCB0cmlhbmdsZSBwb2ludC5cbiAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gYiAtIFNlY29uZCB0cmlhbmdsZSBwb2ludC5cbiAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gYyAtIFRoaXJkIHRyaWFuZ2xlIHBvaW50LlxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBwIC0gMkQgcG9pbnQuXG4gICAqXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgc3RhdGljIGlzUG9pbnRJbkNpcmN1bUNpcmNsZShhLCBiLCBjLCBwKSB7XG4gICAgY29uc3QgYXggPSBhWzBdIC0gcFswXTtcbiAgICBjb25zdCBheSA9IGFbMV0gLSBwWzFdO1xuICAgIGNvbnN0IGJ4ID0gYlswXSAtIHBbMF07XG4gICAgY29uc3QgYnkgPSBiWzFdIC0gcFsxXTtcbiAgICBjb25zdCBjeCA9IGNbMF0gLSBwWzBdO1xuICAgIGNvbnN0IGN5ID0gY1sxXSAtIHBbMV07XG5cbiAgICByZXR1cm4gKFxuICAgICAgKGF4ICogYXggKyBheSAqIGF5KSAqIChieCAqIGN5IC0gY3ggKiBieSkgLVxuICAgICAgICAoYnggKiBieCArIGJ5ICogYnkpICogKGF4ICogY3kgLSBjeCAqIGF5KSArXG4gICAgICAgIChjeCAqIGN4ICsgY3kgKiBjeSkgKiAoYXggKiBieSAtIGJ4ICogYXkpID5cbiAgICAgIDBcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgaWYgYSBnaXZlbiAyRCBwb2ludCBpcyB3aXRoaW4gYSBnaXZlbiB0cmlhbmdsZS5cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gYSAtIEZpcnN0IHRyaWFuZ2xlIHBvaW50LlxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBiIC0gU2Vjb25kIHRyaWFuZ2xlIHBvaW50LlxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBjIC0gVGhpcmQgdHJpYW5nbGUgcG9pbnQuXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IHAgLSAyRCBwb2ludC5cbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBzdGF0aWMgaXNQb2ludEluVHJpYW5nbGUoYSwgYiwgYywgcCkge1xuICAgIGNvbnN0IGRlbm9tID0gKGJbMV0gLSBjWzFdKSAqIChhWzBdIC0gY1swXSkgKyAoY1swXSAtIGJbMF0pICogKGFbMV0gLSBjWzFdKTtcbiAgICBjb25zdCBhVmFsID1cbiAgICAgICgoYlsxXSAtIGNbMV0pICogKHBbMF0gLSBjWzBdKSArIChjWzBdIC0gYlswXSkgKiAocFsxXSAtIGNbMV0pKSAvIGRlbm9tO1xuICAgIGNvbnN0IGJWYWwgPVxuICAgICAgKChjWzFdIC0gYVsxXSkgKiAocFswXSAtIGNbMF0pICsgKGFbMF0gLSBjWzBdKSAqIChwWzFdIC0gY1sxXSkpIC8gZGVub207XG4gICAgY29uc3QgY1ZhbCA9IDEgLSBhVmFsIC0gYlZhbDtcblxuICAgIHJldHVybiAoXG4gICAgICBhVmFsID49IDAgJiYgYVZhbCA8PSAxICYmIGJWYWwgPj0gMCAmJiBiVmFsIDw9IDEgJiYgY1ZhbCA+PSAwICYmIGNWYWwgPD0gMVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgc29ydGVkIGluZGljZXMgb2YgYSBnaXZlbiBzZXQgb2YgMkQgcG9pbnRzIGluXG4gICAqIGNvdW50ZXItY2xvY2t3aXNlIG9yZGVyLlxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBpbmRpY2VzIC0gTGlzdCBvZiBpbmRpY2VzLlxuICAgKiBAcGFyYW0ge0FycmF5LjxBcnJheS48bnVtYmVyPj59IHZlcnRpY2VzIC0gTGlzdCBvZiAyRCBwb2ludHMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtBcnJheS48QXJyYXkuPG51bWJlcj4+fSAtIExpc3Qgb2Ygc29ydGVkIGluZGljZXMuXG4gICAqL1xuICBzdGF0aWMgc29ydFBvaW50c0NDVyhpbmRpY2VzLCB2ZXJ0aWNlcykge1xuICAgIGNvbnN0IGNlbnRyb2lkID0gWzAsIDBdO1xuICAgIGluZGljZXMuZm9yRWFjaChpbmRleCA9PiB7XG4gICAgICBjZW50cm9pZFswXSArPSB2ZXJ0aWNlc1tpbmRleF1bMF07XG4gICAgICBjZW50cm9pZFsxXSArPSB2ZXJ0aWNlc1tpbmRleF1bMV07XG4gICAgfSk7XG4gICAgY2VudHJvaWRbMF0gLz0gaW5kaWNlcy5sZW5ndGg7XG4gICAgY2VudHJvaWRbMV0gLz0gaW5kaWNlcy5sZW5ndGg7XG5cbiAgICBpbmRpY2VzLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgIGNvbnN0IGJWYWwgPSBNYXRoLmF0YW4yKFxuICAgICAgICB2ZXJ0aWNlc1tiXVsxXSAtIGNlbnRyb2lkWzFdLFxuICAgICAgICB2ZXJ0aWNlc1tiXVswXSAtIGNlbnRyb2lkWzBdXG4gICAgICApO1xuICAgICAgY29uc3QgYVZhbCA9IE1hdGguYXRhbjIoXG4gICAgICAgIHZlcnRpY2VzW2FdWzFdIC0gY2VudHJvaWRbMV0sXG4gICAgICAgIHZlcnRpY2VzW2FdWzBdIC0gY2VudHJvaWRbMF1cbiAgICAgICk7XG5cbiAgICAgIHJldHVybiBhVmFsIC0gYlZhbDtcbiAgICB9KTtcblxuICAgIHJldHVybiBpbmRpY2VzO1xuICB9XG5cbiAgLyoqXG4gICAqIENhY2x1YXRlcyB0aGUgYXJlYSBvZiBhIHRyaWFuZ2xlXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IGEgLSBGaXJzdCB0cmlhbmdsZSBwb2ludC5cbiAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gYiAtIFNlY29uZCB0cmlhbmdsZSBwb2ludC5cbiAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gYyAtIFRoaXJkIHRyaWFuZ2xlIHBvaW50LlxuICAgKlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgc3RhdGljIHRyaWFuZ2xlQXJlYShhLCBiLCBjKSB7XG4gICAgcmV0dXJuIE1hdGguYWJzKFxuICAgICAgKGFbMF0gKiAoYlsxXSAtIGNbMV0pICsgYlswXSAqIChjWzFdIC0gYVsxXSkgKyBjWzBdICogKGFbMV0gLSBiWzFdKSkgKiAwLjVcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgbWFnbml0dWRlIG9mIGEgZ2l2ZW4gdmVjdG9yIGFycmF5LlxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSB2ZWN0b3IgLSBBcnJheSBjb25zaXN0aW5nIG9mIG51bWJlcnMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICBzdGF0aWMgZ2V0VmVjdG9yTWFnbml0dWRlKHZlY3Rvcikge1xuICAgIGlmICghKHZlY3RvciBpbnN0YW5jZW9mIEFycmF5KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQ2Fubm90IGdldCBtYWduaXR1ZGUgZm9yIHZlY3RvciAke3ZlY3Rvcn0uIElucHV0IG11c3QgYmUgYW4gQXJyYXkgbnVtYmVycy5gXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHJlZHVjZXIgPSAoYWNjdW11bGF0b3IsIGN1cnJlbnRWYWx1ZSkgPT4ge1xuICAgICAgaWYgKHR5cGVvZiBjdXJyZW50VmFsdWUgIT09ICdudW1iZXInKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgQ2Fubm90IGdldCBtYWduaXR1ZGUgZm9yIHZlY3RvciAke3ZlY3Rvcn0uIEFsbCBpdGVtcyBpbiB0aGUgaW5wdXQgQXJyYXkgbXVzdCBiZSBudW1iZXJzLmBcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGFjY3VtdWxhdG9yICsgKGN1cnJlbnRWYWx1ZSAqKiAyKTtcbiAgICB9XG5cbiAgICByZXR1cm4gTWF0aC5zcXJ0KHZlY3Rvci5yZWR1Y2UocmVkdWNlciwgMCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgZG90IHByb2R1Y3QgYmV0d2VlbiB0d28gdmVjdG9ycy5cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gdmVjdG9yQSAtIEFycmF5IGNvbnNpc3Rpbmcgb2YgbnVtYmVycy5cbiAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gdmVjdG9yQiAtIEFycmF5IGNvbnNpc3Rpbmcgb2YgbnVtYmVycy5cbiAgICpcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIHN0YXRpYyBnZXREb3RQcm9kdWN0KHZlY3RvckEsIHZlY3RvckIpIHtcbiAgICBpZiAoISh2ZWN0b3JBIGluc3RhbmNlb2YgQXJyYXkpIHx8ICEodmVjdG9yQiBpbnN0YW5jZW9mIEFycmF5KSB8fCB2ZWN0b3JBLmxlbmd0aCAhPT0gdmVjdG9yQi5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGdldCBkb3QgcHJvZHVjdCBiZXR3ZWVuICR7dmVjdG9yQX0gYW5kICR7dmVjdG9yQn0uIElucHV0cyBtdXN0IGJlIHZlY3RvcnMgb2YgdGhlIHNhbWUgbGVuZ3RoLmApO1xuICAgIH1cblxuICAgIGxldCByZXN1bHQgPSAwO1xuICAgIHZlY3RvckEuZm9yRWFjaCgodmFsdWVBLCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgdmFsdWVCID0gdmVjdG9yQltpbmRleF07XG5cbiAgICAgIGlmICh0eXBlb2YgdmFsdWVBICE9PSAnbnVtYmVyJyB8fCB0eXBlb2YgdmFsdWVCICE9PSAnbnVtYmVyJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBnZXQgZG90IHByb2R1Y3QgYmV0d2VlbiAke3ZlY3RvckF9IGFuZCAke3ZlY3RvckJ9LiBWZWN0b3JzIG11c3Qgb25seSBjb25zaXN0IG9mIG51bWVyaWMgdmFsdWVzLmApO1xuICAgICAgfVxuXG4gICAgICByZXN1bHQgKz0gdmFsdWVBICogdmFsdWVCO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIGFuZ2xlIGluIHJhZGlhbnMgYmV0d2VlbiB2ZWN0b3JBIGFuZCB2ZWN0b3JCLlxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSB2ZWN0b3JBIC0gQXJyYXkgY29uc2lzdGluZyBvZiBudW1iZXJzLlxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSB2ZWN0b3JCIC0gQXJyYXkgY29uc2lzdGluZyBvZiBudW1iZXJzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgc3RhdGljIGdldEFuZ2xlQmV0d2Vlbih2ZWN0b3JBLCB2ZWN0b3JCKSB7XG4gICAgY29uc3Qgbm9ybWFsQSA9IHRoaXMubm9ybWFsaXplVmVjdG9yKFsuLi52ZWN0b3JBXSk7XG4gICAgY29uc3Qgbm9ybWFsQiA9IHRoaXMubm9ybWFsaXplVmVjdG9yKFsuLi52ZWN0b3JCXSk7XG4gICAgY29uc3QgZG90ID0gdGhpcy5nZXREb3RQcm9kdWN0KG5vcm1hbEEsIG5vcm1hbEIpO1xuXG4gICAgcmV0dXJuIE1hdGguYWNvcyh0aGlzLmNsYW1wKGRvdCwgLTEsIDEpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNdWx0aXBseSBhIDN4MyByb3RhdGlvbiBtYXRyaXggd2l0aCBhIHZlY3RvcjMuXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IHZlY3RvcjMgLSBBcnJheSBjb25zaXN0aW5nIG9mIDMgbnVtYmVycyByZXByZXNlbnRpbmdcbiAgICogYSBkaXJlY3Rpb24gdmVjdG9yLlxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBtYXRyaXgzIC0gQW4gYXJyYXkgb2YgOSBudW1iZXJzIHJlcHJlc2VudGluZyBhIHJvd1xuICAgKiBtYWpvciByb3RhdGlvbiBtYXRyaXguXG4gICAqXG4gICAqIEByZXR1cm5zIHtBcnJheS48bnVtYmVyPn0gLSBBbiBhcnJheSBvZiAzIG51bWJlcnMgcmVwcmVzZW50aW5nIHRoZSBuZXcgZGlyZWN0aW9uXG4gICAqIG9mIHRoZSB2ZWN0b3IuXG4gICAqL1xuICBzdGF0aWMgcm90YXRlVmVjdG9yKHZlY3RvcjMsIG1hdHJpeDMpIHtcbiAgICBpZiAoISh2ZWN0b3IzIGluc3RhbmNlb2YgQXJyYXkpXG4gICAgICB8fCB2ZWN0b3IzLmxlbmd0aCAhPT0gM1xuICAgICAgfHwgIXZlY3RvcjMuZXZlcnkodiA9PiB0eXBlb2YgdiA9PT0gJ251bWJlcicpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBDYW5ub3Qgcm90YXRlIHZlY3RvciAke3ZlY3RvcjN9IGJ5IHJvdGF0aW9uIG1hdHJpeCAke21hdHJpeDN9LiBJbnB1dCB2ZWN0b3IgbXVzdCBiZSBhbiBhcnJheSBvZiAzIG51bWJlcnMuYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoIShtYXRyaXgzIGluc3RhbmNlb2YgQXJyYXkpXG4gICAgICB8fCBtYXRyaXgzLmxlbmd0aCAhPT0gOVxuICAgICAgfHwgIW1hdHJpeDMuZXZlcnkodiA9PiB0eXBlb2YgdiA9PT0gJ251bWJlcicpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBDYW5ub3Qgcm90YXRlIHZlY3RvciAke3ZlY3RvcjN9IGJ5IHJvdGF0aW9uIG1hdHJpeCAke21hdHJpeDN9LiBJbnB1dCBtYXRyaXgzIG11c3QgYmUgYW4gYXJyYXkgb2YgOSBudW1iZXJzLmBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgeCA9IG1hdHJpeDNbMF0gKiB2ZWN0b3IzWzBdXG4gICAgICArIG1hdHJpeDNbM10gKiB2ZWN0b3IzWzFdXG4gICAgICArIG1hdHJpeDNbNl0gKiB2ZWN0b3IzWzJdO1xuICAgIGNvbnN0IHkgPSBtYXRyaXgzWzFdICogdmVjdG9yM1swXVxuICAgICAgKyBtYXRyaXgzWzRdICogdmVjdG9yM1sxXVxuICAgICAgKyBtYXRyaXgzWzddICogdmVjdG9yM1syXTtcbiAgICBjb25zdCB6ID0gbWF0cml4M1syXSAqIHZlY3RvcjNbMF1cbiAgICAgICsgbWF0cml4M1s1XSAqIHZlY3RvcjNbMV1cbiAgICAgICsgbWF0cml4M1s4XSAqIHZlY3RvcjNbMl07XG5cbiAgICByZXR1cm4gW3gsIHksIHpdO1xuICB9XG5cbiAgLyoqXG4gICAqIE5vcm1hbGl6ZSBhIGdpdmVuIHZlY3RvciBhcnJheS5cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gdmVjdG9yIC0gQXJyYXkgY29uc2lzdGluZyBvZiBudW1iZXJzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7QXJyYXkuPG51bWJlcj59IFRoZSBvcmlnaW5hbCB2ZWN0b3Igd2l0aCBub3JtYWxpemVkIHZhbHVlcywgZm9yIGNoYWluaW5nLlxuICAgKi9cbiAgc3RhdGljIG5vcm1hbGl6ZVZlY3Rvcih2ZWN0b3IpIHtcbiAgICBjb25zdCBtYWduaXR1ZGUgPSB0aGlzLmdldFZlY3Rvck1hZ25pdHVkZSh2ZWN0b3IpO1xuXG4gICAgaWYgKG1hZ25pdHVkZSA9PT0gMCkge1xuICAgICAgdmVjdG9yLmZpbGwoMClcbiAgICB9IGVsc2Uge1xuICAgICAgdmVjdG9yLmZvckVhY2goKHZhbHVlLCBpbmRleCkgPT4ge1xuICAgICAgICB2ZWN0b3JbaW5kZXhdID0gdmFsdWUgLyBtYWduaXR1ZGU7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmVjdG9yO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4dHJhY3QgdGhlIDN4MyByb3RhdGlvbiBtYXRyaXggZnJvbSBhIGdpdmVuIDR4NCB0cmFuc2Zvcm1hdGlvbiBtYXRyaXguXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IG1hdHJpeDQgLSBBbiBhcnJheSBvZiAxNiBudW1iZXJzIHJlcHJlc2VudGluZyBhIHJvd1xuICAgKiBtYWpvciB0cmFuc2Zvcm1hdGlvbiBtYXRyaXguXG4gICAqXG4gICAqIEByZXR1cm5zIHtBcnJheS48bnVtYmVyPn0gLSBBbiBhcnJheSBvZiA5IG51bWJlcnMgcmVwcmVzZW50aW5nIGEgcm93IG1ham9yXG4gICAqIHJvdGF0aW9uIG1hdHJpeC5cbiAgICovXG4gIHN0YXRpYyBnZXRSb3RhdGlvbk1hdHJpeChtYXRyaXg0KSB7XG4gICAgaWYgKCEobWF0cml4NCBpbnN0YW5jZW9mIEFycmF5KVxuICAgICAgfHwgbWF0cml4NC5sZW5ndGggIT09IDE2XG4gICAgICB8fCAhbWF0cml4NC5ldmVyeSh2ID0+IHR5cGVvZiB2ID09PSAnbnVtYmVyJykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYENhbm5vdCBjb252ZXJ0IG1hdHJpeCAke21hdHJpeDR9IHRvIGEgcm90YXRpb24gbWF0cml4LiBJbnB1dCBtYXRyaXggbXVzdCBiZSBhbiBhcnJheSBvZiAxNiBudW1iZXJzLmBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gRXh0cmFjdCBzY2FsZVxuICAgIGNvbnN0IHNjYWxlWCA9IDEgLyAodGhpcy5nZXRWZWN0b3JNYWduaXR1ZGUobWF0cml4NC5zbGljZSgwLCA0KSkgfHwgMSk7XG4gICAgY29uc3Qgc2NhbGVZID0gMSAvICh0aGlzLmdldFZlY3Rvck1hZ25pdHVkZShtYXRyaXg0LnNsaWNlKDQsIDgpKSB8fCAxKTtcbiAgICBjb25zdCBzY2FsZVogPSAxIC8gKHRoaXMuZ2V0VmVjdG9yTWFnbml0dWRlKG1hdHJpeDQuc2xpY2UoOCwgMTIpKSB8fCAxKTtcblxuICAgIHJldHVybiBbXG4gICAgICBtYXRyaXg0WzBdICogc2NhbGVYLCBtYXRyaXg0WzFdICogc2NhbGVYLCBtYXRyaXg0WzJdICogc2NhbGVYLFxuICAgICAgbWF0cml4NFs0XSAqIHNjYWxlWSwgbWF0cml4NFs1XSAqIHNjYWxlWSwgbWF0cml4NFs2XSAqIHNjYWxlWSxcbiAgICAgIG1hdHJpeDRbOF0gKiBzY2FsZVosIG1hdHJpeDRbOV0gKiBzY2FsZVosIG1hdHJpeDRbMTBdICogc2NhbGVaXG4gICAgXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYW4gYXJyYXkgY29udGFpbmluZyB0aGUgc3BoZXJpY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBnaXZlbiBjYXJ0ZXNpYW5cbiAgICogeHl6IGNvb3JkaW5hdGVzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0geCAtIFBvc2l0aW9uIGFsb25nIHRoZSB4IGF4aXMuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gUG9zaXRpb24gYWxvbmcgdGhlIHkgYXhpcy5cbiAgICogQHBhcmFtIHtudW1iZXJ9IHogLSBQb3NpdGlvbiBhbG9uZyB0aGUgeiBheGlzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7QXJyYXkuPG51bWJlcj59IC0gQW4gYXJyYXkgY29uc2lzdGluZyBvZiB0aHJlZSBudW1iZXJlcyB3aGVyZSBpbmRleFxuICAgKiAwIHJlcHJlc2VudHMgdGhlIHJhZGl1cywgaW5kZXggMSByZXByZXNlbnRzIHRoZSB2ZXJ0aWNhbC9wb2xhciBhbmdsZSBpbiByYWRpYW5zXG4gICAqIGFuZCBpbmRleCAyIHJlcHJlc2VudHMgdGhlIGhvcml6b250YWwvYXppbXV0aGFsIGFuZ2xlIGluIHJhZGlhbnMuXG4gICAqL1xuICBzdGF0aWMgY2FydGVzaWFuVG9TcGhlcmljYWwoeCwgeSwgeikge1xuICAgIGNvbnN0IHIgPSB0aGlzLmdldFZlY3Rvck1hZ25pdHVkZShbeCwgeSwgel0pO1xuXG4gICAgLy8gUmV0dXJuIGlkZW50aXR5IGlmIHRoZSB2ZWN0b3IgaGFzIG5vIGxlbmd0aFxuICAgIGlmIChyID09PSAwKSB7XG4gICAgICByZXR1cm4gWzAsIDAsIDBdO1xuICAgIH1cblxuICAgIHJldHVybiBbXG4gICAgICByLFxuICAgICAgTWF0aC5hY29zKHRoaXMuY2xhbXAoeSAvIHIsIC0gMSwgMSkpLFxuICAgICAgTWF0aC5hdGFuMih4LCB6KSxcbiAgICBdO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYWR1YWxseSBjaGFuZ2UgYSB2YWx1ZSBvZiBhIG51bWVyaWMgcHJvcGVydHkgdG93YXJkcyBhIGdvYWwgb3ZlciB0aW1lIHVzaW5nXG4gICAqIGEgY3JpdGljYWxseSBkYW1wZWQgc3ByaW5nIGZ1bmN0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gY3VycmVudFZhbHVlIC0gVGhlIHN0YXJ0aW5nIHZhbHVlLlxuICAgKiBAcGFyYW0ge251bWJlcn0gdGFyZ2V0VmFsdWUtIFRoZSBnb2FsIHZhbHVlLlxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBbdmFsdWVTdG9yZSA9IFswLCAwXV0gLSBBbiBBcnJheSBjb25zaXN0aW5nIG9mIHR3b1xuICAgKiBudW1iZXJzIHdoZXJlIHRoZSBmaXJzdCBudW1iZXIgaG9sZHMgdGhlIHJlc3VsdCB2YWx1ZSBhbmQgdGhlIHNlY29uZCBob2xkc1xuICAgKiB0aGUgdmVsb2NpdHkgdGhhdCByZXN1bHRlZCBpbiB0aGF0IHZhbHVlLiBUaGUgc2FtZSBhcnJheSBzaG91bGQgYmUgcHJvdmlkZWRcbiAgICogd2l0aCBlYWNoIGNhbGwgdG8gdGhpcyBmdW5jdGlvbi5cbiAgICogQHBhcmFtIHtudW1iZXJ9IFtkZWx0YVRpbWUgPSAxZS03XSAtIFRoZSB0aW1lIHNpbmNlIHRoZSBsYXN0IGNhbGwgdG8gdGhpcyBmdW5jdGlvblxuICAgKiBpbiBzZWNvbmRzLlxuICAgKiBAcGFyYW0ge251bWJlcn0gW3Ntb290aFRpbWUgPSAwLjNdIC0gVGhlIGFwcHJveGltYXRlIGFtb3VudCBvZiB0aW1lIGluIHNlY29uZHNcbiAgICogaXQgc2hvdWxkIHRha2UgdG8gcmVhY2ggdGhlIHRhcmdldCB2YWx1ZS5cbiAgICogQHBhcmFtIHtudW1iZXJ9IFttYXhTcGVlZCA9IDFlN10gLSBBIGNsYW1waW5nIHZhbHVlIGZvciB0aGUgbWF4aW11bSBzcGVlZCB0aGVcbiAgICogdmFsdWUgY2FuIGNoYW5nZS5cbiAgICpcbiAgICogQHJldHVybnMge0FycmF5LjxudW1iZXI+fSAtIFRoZSB2YWx1ZVN0b3JlIGFycmF5LlxuICAgKi9cbiAgc3RhdGljIGRhbXBWYWx1ZShcbiAgICBjdXJyZW50VmFsdWUsXG4gICAgdGFyZ2V0VmFsdWUsXG4gICAgdmFsdWVTdG9yZSA9IFswLCAwXSxcbiAgICBkZWx0YVRpbWUgPSAxZS03LFxuICAgIHNtb290aFRpbWUgPSAwLjMsXG4gICAgbWF4U3BlZWQgPSAxZTdcbiAgKSB7XG4gICAgc21vb3RoVGltZSA9IE1hdGgubWF4KDAuMDAwMSwgc21vb3RoVGltZSk7XG4gICAgZGVsdGFUaW1lID0gTWF0aC5tYXgoMWUtNywgZGVsdGFUaW1lKTtcblxuICAgIC8vIEZpbmQgdGhlIGRlbHRhIGJldHdlZW4gdmFsdWVzIGFuZCB1c2UgaXQgdG8gZXN0aW1hdGUgdGhlIHByZXZpb3VzIHZhbHVlXG4gICAgY29uc3QgY2xhbXBUaW1lID0gbWF4U3BlZWQgKiBzbW9vdGhUaW1lO1xuICAgIGNvbnN0IGRlbHRhVmFsdWUgPSBjdXJyZW50VmFsdWUgLSB0YXJnZXRWYWx1ZTtcbiAgICBjb25zdCBjbGFtcERlbHRhVmFsdWUgPSB0aGlzLmNsYW1wKGRlbHRhVmFsdWUsIC1jbGFtcFRpbWUsIGNsYW1wVGltZSk7XG4gICAgY29uc3QgbGFzdFZhbHVlID0gY3VycmVudFZhbHVlIC0gY2xhbXBEZWx0YVZhbHVlO1xuXG4gICAgLy8gQ2FsY3VsYXRlIGRhbXBpbmcgZmFjdG9yc1xuICAgIGNvbnN0IGQxID0gMiAvIHNtb290aFRpbWU7XG4gICAgY29uc3QgZDIgPSBkMSAqIGRlbHRhVGltZTtcbiAgICBjb25zdCBkMyA9IDEgLyAoMSArIGQyICsgMC41ICogZDIgKiogMiArIDAuMjUgKiBkMiAqKiAzKTtcbiAgICBjb25zdCBkNCA9ICh2YWx1ZVN0b3JlWzFdICsgZDEgKiBjbGFtcERlbHRhVmFsdWUpICogZGVsdGFUaW1lO1xuXG4gICAgLy8gRGFtcCB0aGUgdGFyZ2V0IHZhbHVlIGFuZCB1cGRhdGUgdGhlIHZlbG9jaXR5XG4gICAgdmFsdWVTdG9yZVswXSA9IGxhc3RWYWx1ZSArIChjbGFtcERlbHRhVmFsdWUgKyBkNCkgKiBkMztcbiAgICB2YWx1ZVN0b3JlWzFdID0gKHZhbHVlU3RvcmVbMV0gLSBkMSAqIGQ0KSAqIGQzO1xuXG4gICAgLy8gUHJldmVudCBvdmVyc2hvb3RpbmdcbiAgICBpZiAodGFyZ2V0VmFsdWUgLSBjdXJyZW50VmFsdWUgPiAwID09PSB2YWx1ZVN0b3JlWzBdID4gdGFyZ2V0VmFsdWUpIHtcbiAgICAgIHZhbHVlU3RvcmVbMF0gPSB0YXJnZXRWYWx1ZTtcbiAgICAgIHZhbHVlU3RvcmVbMV0gPSAodmFsdWVTdG9yZVswXSAtIHRhcmdldFZhbHVlKSAvIGRlbHRhVGltZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWVTdG9yZTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBNYXRoVXRpbHM7XG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBFYXNpbmdPYmplY3QgT2JqZWN0IGNvbnRhaW5pbmcgZWFzaW5nIGZ1bmN0aW9uc1xuICogQHByb3BlcnR5IHtGdW5jdGlvbn0gSW4gLSBFYXNpbmcgJ0luJyBmdW5jdGlvbi4gU2hvdWxkIHVzZSB0aGUgc2lnbmF0dXJlIChrOm51bWJlcik6bnVtYmVyLlxuICogQHByb3BlcnR5IHtGdW5jdGlvbn0gT3V0IC0gRWFzaW5nICdPdXQnIGZ1bmN0aW9uLiBTaG91bGQgdXNlIHRoZSBzaWduYXR1cmUgKGs6bnVtYmVyKTpudW1iZXIuXG4gKiBAcHJvcGVydHkge0Z1bmN0aW9ufSBJbk91dCAtIEVhc2luZyAnSW5PdXQnIGZ1bmN0aW9uLiBTaG91bGQgdXNlIHRoZSBzaWduYXR1cmUgKGs6bnVtYmVyKTpudW1iZXIuXG4gKi9cblxuLyoqXG4gKiBMaW5lYXIgRWFzaW5nXG4gKiBAdHlwZSB7RWFzaW5nT2JqZWN0fVxuICovXG5leHBvcnQgY29uc3QgTGluZWFyID0ge1xuICBOb25lKGspIHtcbiAgICByZXR1cm4gaztcbiAgfSxcbiAgSW4oaykge1xuICAgIHJldHVybiBrO1xuICB9LFxuICBPdXQoaykge1xuICAgIHJldHVybiBrO1xuICB9LFxuICBJbk91dChrKSB7XG4gICAgcmV0dXJuIGs7XG4gIH0sXG59O1xuXG4vKipcbiAqIFF1YWRyYXRpYyBFYXNpbmdcbiAqIEB0eXBlIHtFYXNpbmdPYmplY3R9XG4gKi9cbmV4cG9ydCBjb25zdCBRdWFkcmF0aWMgPSB7XG4gIEluKGspIHtcbiAgICByZXR1cm4gayAqIGs7XG4gIH0sXG4gIE91dChrKSB7XG4gICAgcmV0dXJuIGsgKiAoMiAtIGspO1xuICB9LFxuICBJbk91dChrKSB7XG4gICAgayAqPSAyO1xuICAgIGlmIChrIDwgMSkge1xuICAgICAgcmV0dXJuIDAuNSAqIGsgKiBrO1xuICAgIH1cbiAgICByZXR1cm4gLTAuNSAqICgtLWsgKiAoayAtIDIpIC0gMSk7XG4gIH0sXG59O1xuXG4vKipcbiAqIEN1YmljIEVhc2luZ1xuICogQHR5cGUge0Vhc2luZ09iamVjdH1cbiAqL1xuZXhwb3J0IGNvbnN0IEN1YmljID0ge1xuICBJbihrKSB7XG4gICAgcmV0dXJuIGsgKiBrICogaztcbiAgfSxcbiAgT3V0KGspIHtcbiAgICByZXR1cm4gLS1rICogayAqIGsgKyAxO1xuICB9LFxuICBJbk91dChrKSB7XG4gICAgayAqPSAyO1xuICAgIGlmIChrIDwgMSkge1xuICAgICAgcmV0dXJuIDAuNSAqIGsgKiBrICogaztcbiAgICB9XG5cbiAgICBrIC09IDI7XG4gICAgcmV0dXJuIDAuNSAqIChrICogayAqIGsgKyAyKTtcbiAgfSxcbn07XG5cbi8qKlxuICogUXVhcnRpYyBFYXNpbmdcbiAqIEB0eXBlIHtFYXNpbmdPYmplY3R9XG4gKi9cbmV4cG9ydCBjb25zdCBRdWFydGljID0ge1xuICBJbihrKSB7XG4gICAgcmV0dXJuIGsgKiBrICogayAqIGs7XG4gIH0sXG4gIE91dChrKSB7XG4gICAgcmV0dXJuIDEgLSAtLWsgKiBrICogayAqIGs7XG4gIH0sXG4gIEluT3V0KGspIHtcbiAgICBrICo9IDI7XG4gICAgaWYgKGsgPCAxKSB7XG4gICAgICByZXR1cm4gMC41ICogayAqIGsgKiBrICogaztcbiAgICB9XG5cbiAgICBrIC09IDI7XG4gICAgcmV0dXJuIC0wLjUgKiAoayAqIGsgKiBrICogayAtIDIpO1xuICB9LFxufTtcblxuLyoqXG4gKiBRdWludGljIEVhc2luZ1xuICogQHR5cGUge0Vhc2luZ09iamVjdH1cbiAqL1xuZXhwb3J0IGNvbnN0IFF1aW50aWMgPSB7XG4gIEluKGspIHtcbiAgICByZXR1cm4gayAqIGsgKiBrICogayAqIGs7XG4gIH0sXG4gIE91dChrKSB7XG4gICAgcmV0dXJuIC0tayAqIGsgKiBrICogayAqIGsgKyAxO1xuICB9LFxuICBJbk91dChrKSB7XG4gICAgayAqPSAyO1xuICAgIGlmIChrIDwgMSkge1xuICAgICAgcmV0dXJuIDAuNSAqIGsgKiBrICogayAqIGsgKiBrO1xuICAgIH1cblxuICAgIGsgLT0gMjtcbiAgICByZXR1cm4gMC41ICogKGsgKiBrICogayAqIGsgKiBrICsgMik7XG4gIH0sXG59O1xuXG4vKipcbiAqIFNpbnVzb2lkYWwgRWFzaW5nXG4gKiBAdHlwZSB7RWFzaW5nT2JqZWN0fVxuICovXG5leHBvcnQgY29uc3QgU2ludXNvaWRhbCA9IHtcbiAgSW4oaykge1xuICAgIHJldHVybiAxIC0gTWF0aC5jb3MoKGsgKiBNYXRoLlBJKSAvIDIpO1xuICB9LFxuICBPdXQoaykge1xuICAgIHJldHVybiBNYXRoLnNpbigoayAqIE1hdGguUEkpIC8gMik7XG4gIH0sXG4gIEluT3V0KGspIHtcbiAgICByZXR1cm4gMC41ICogKDEgLSBNYXRoLmNvcyhNYXRoLlBJICogaykpO1xuICB9LFxufTtcblxuLyoqXG4gKiBFeHBvbmVudGlhbCBFYXNpbmdcbiAqIEB0eXBlIHtFYXNpbmdPYmplY3R9XG4gKi9cbmV4cG9ydCBjb25zdCBFeHBvbmVudGlhbCA9IHtcbiAgSW4oaykge1xuICAgIHJldHVybiBrID09PSAwID8gMCA6IDEwMjQgKiogKGsgLSAxKTtcbiAgfSxcbiAgT3V0KGspIHtcbiAgICByZXR1cm4gayA9PT0gMSA/IDEgOiAxIC0gMiAqKiAoLTEwICogayk7XG4gIH0sXG4gIEluT3V0KGspIHtcbiAgICBpZiAoayA9PT0gMCkge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICAgIGlmIChrID09PSAxKSB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG5cbiAgICBrICo9IDI7XG4gICAgaWYgKGsgPCAxKSB7XG4gICAgICByZXR1cm4gMC41ICogMTAyNCAqKiAoayAtIDEpO1xuICAgIH1cbiAgICByZXR1cm4gMC41ICogKC0oMiAqKiAoLTEwICogKGsgLSAxKSkpICsgMik7XG4gIH0sXG59O1xuXG4vKipcbiAqIENpcmN1bGFyIEVhc2luZ1xuICogQHR5cGUge0Vhc2luZ09iamVjdH1cbiAqL1xuZXhwb3J0IGNvbnN0IENpcmN1bGFyID0ge1xuICBJbihrKSB7XG4gICAgcmV0dXJuIDEgLSBNYXRoLnNxcnQoMSAtIGsgKiBrKTtcbiAgfSxcbiAgT3V0KGspIHtcbiAgICByZXR1cm4gTWF0aC5zcXJ0KDEgLSAtLWsgKiBrKTtcbiAgfSxcbiAgSW5PdXQoaykge1xuICAgIGsgKj0gMjtcbiAgICBpZiAoayA8IDEpIHtcbiAgICAgIHJldHVybiAtMC41ICogKE1hdGguc3FydCgxIC0gayAqIGspIC0gMSk7XG4gICAgfVxuXG4gICAgayAtPSAyO1xuICAgIHJldHVybiAwLjUgKiAoTWF0aC5zcXJ0KDEgLSBrICogaykgKyAxKTtcbiAgfSxcbn07XG5cbi8qKlxuICogRWxhc3RpYyBFYXNpbmdcbiAqIEB0eXBlIHtFYXNpbmdPYmplY3R9XG4gKi9cbmV4cG9ydCBjb25zdCBFbGFzdGljID0ge1xuICBJbihrKSB7XG4gICAgbGV0IHM7XG4gICAgbGV0IGEgPSAwLjE7XG4gICAgY29uc3QgcCA9IDAuNDtcblxuICAgIGlmIChrID09PSAwKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICBpZiAoayA9PT0gMSkge1xuICAgICAgcmV0dXJuIDE7XG4gICAgfVxuXG4gICAgaWYgKCFhIHx8IGEgPCAxKSB7XG4gICAgICBhID0gMTtcbiAgICAgIHMgPSBwIC8gNDtcbiAgICB9IGVsc2Uge1xuICAgICAgcyA9IChwICogTWF0aC5hc2luKDEgLyBhKSkgLyAoMiAqIE1hdGguUEkpO1xuICAgIH1cblxuICAgIGsgLT0gMTtcbiAgICByZXR1cm4gLShhICogMiAqKiAoMTAgKiBrKSAqIE1hdGguc2luKCgoayAtIHMpICogKDIgKiBNYXRoLlBJKSkgLyBwKSk7XG4gIH0sXG4gIE91dChrKSB7XG4gICAgbGV0IHM7XG4gICAgbGV0IGEgPSAwLjE7XG4gICAgY29uc3QgcCA9IDAuNDtcblxuICAgIGlmIChrID09PSAwKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICBpZiAoayA9PT0gMSkge1xuICAgICAgcmV0dXJuIDE7XG4gICAgfVxuXG4gICAgaWYgKCFhIHx8IGEgPCAxKSB7XG4gICAgICBhID0gMTtcbiAgICAgIHMgPSBwIC8gNDtcbiAgICB9IGVsc2Uge1xuICAgICAgcyA9IChwICogTWF0aC5hc2luKDEgLyBhKSkgLyAoMiAqIE1hdGguUEkpO1xuICAgIH1cblxuICAgIHJldHVybiBhICogMiAqKiAoLTEwICogaykgKiBNYXRoLnNpbigoKGsgLSBzKSAqICgyICogTWF0aC5QSSkpIC8gcCkgKyAxO1xuICB9LFxuICBJbk91dChrKSB7XG4gICAgbGV0IHM7XG4gICAgbGV0IGEgPSAwLjE7XG4gICAgY29uc3QgcCA9IDAuNDtcblxuICAgIGlmIChrID09PSAwKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICBpZiAoayA9PT0gMSkge1xuICAgICAgcmV0dXJuIDE7XG4gICAgfVxuXG4gICAgaWYgKCFhIHx8IGEgPCAxKSB7XG4gICAgICBhID0gMTtcbiAgICAgIHMgPSBwIC8gNDtcbiAgICB9IGVsc2Uge1xuICAgICAgcyA9IChwICogTWF0aC5hc2luKDEgLyBhKSkgLyAoMiAqIE1hdGguUEkpO1xuICAgIH1cblxuICAgIGsgKj0gMjtcbiAgICBpZiAoayA8IDEpIHtcbiAgICAgIGsgLT0gMTtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIC0wLjUgKiAoYSAqIDIgKiogKDEwICogaykgKiBNYXRoLnNpbigoKGsgLSBzKSAqICgyICogTWF0aC5QSSkpIC8gcCkpXG4gICAgICApO1xuICAgIH1cblxuICAgIGsgLT0gMTtcbiAgICByZXR1cm4gKFxuICAgICAgYSAqIDIgKiogKC0xMCAqIGspICogTWF0aC5zaW4oKChrIC0gcykgKiAoMiAqIE1hdGguUEkpKSAvIHApICogMC41ICsgMVxuICAgICk7XG4gIH0sXG59O1xuXG4vKipcbiAqIEJhY2sgRWFzaW5nXG4gKiBAdHlwZSB7RWFzaW5nT2JqZWN0fVxuICovXG5leHBvcnQgY29uc3QgQmFjayA9IHtcbiAgSW4oaykge1xuICAgIGNvbnN0IHMgPSAxLjcwMTU4O1xuICAgIHJldHVybiBrICogayAqICgocyArIDEpICogayAtIHMpO1xuICB9LFxuICBPdXQoaykge1xuICAgIGNvbnN0IHMgPSAxLjcwMTU4O1xuICAgIHJldHVybiAtLWsgKiBrICogKChzICsgMSkgKiBrICsgcykgKyAxO1xuICB9LFxuICBJbk91dChrKSB7XG4gICAgY29uc3QgcyA9IDEuNzAxNTggKiAxLjUyNTtcbiAgICBrICo9IDI7XG4gICAgaWYgKGsgPCAxKSB7XG4gICAgICByZXR1cm4gMC41ICogKGsgKiBrICogKChzICsgMSkgKiBrIC0gcykpO1xuICAgIH1cblxuICAgIGsgLT0gMjtcbiAgICByZXR1cm4gMC41ICogKGsgKiBrICogKChzICsgMSkgKiBrICsgcykgKyAyKTtcbiAgfSxcbn07XG5cbi8qKlxuICogQm91bmNlIEVhc2luZ1xuICogQHR5cGUge0Vhc2luZ09iamVjdH1cbiAqL1xuZXhwb3J0IGNvbnN0IEJvdW5jZSA9IHtcbiAgSW4oaykge1xuICAgIHJldHVybiAxIC0gQm91bmNlLk91dCgxIC0gayk7XG4gIH0sXG4gIE91dChrKSB7XG4gICAgaWYgKGsgPCAxIC8gMi43NSkge1xuICAgICAgcmV0dXJuIDcuNTYyNSAqIGsgKiBrO1xuICAgIH0gZWxzZSBpZiAoayA8IDIgLyAyLjc1KSB7XG4gICAgICBrIC09IDEuNTtcbiAgICAgIHJldHVybiA3LjU2MjUgKiAoayAvIDIuNzUpICogayArIDAuNzU7XG4gICAgfSBlbHNlIGlmIChrIDwgMi41IC8gMi43NSkge1xuICAgICAgayAtPSAyLjI1O1xuICAgICAgcmV0dXJuIDcuNTYyNSAqIChrIC8gMi43NSkgKiBrICsgMC45Mzc1O1xuICAgIH1cbiAgICBrIC09IDIuNjI1O1xuICAgIHJldHVybiA3LjU2MjUgKiAoayAvIDIuNzUpICogayArIDAuOTg0Mzc1O1xuICB9LFxuICBJbk91dChrKSB7XG4gICAgaWYgKGsgPCAwLjUpIHtcbiAgICAgIHJldHVybiBCb3VuY2UuSW4oayAqIDIpICogMC41O1xuICAgIH1cbiAgICByZXR1cm4gQm91bmNlLk91dChrICogMiAtIDEpICogMC41ICsgMC41O1xuICB9LFxufTtcbiIsIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVC0wXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bmRlcnNjb3JlLWRhbmdsZSAqL1xuaW1wb3J0IFV0aWxzIGZyb20gJy4vVXRpbHMnO1xuXG4vKipcbiAqIENsYXNzIHRoYXQgY2FuIGV4ZWN1dGUgZnVuY3Rpb25zIHdoZW4gbG9jYWwgbWVzc2FnZXMgYXJlIHJlY2VpdmVkLiBMb2NhbCBtZXNzYWdlc1xuICogYXJlIHByZWZpeGVkIHdpdGggdGhlIGluc3RhbmNlJ3MgaWQuXG4gKlxuICogQGFsaWFzIGNvcmUvTWVzc2VuZ2VyXG4gKlxuICogQHByb3BlcnR5IHtjb3JlL01lc3Nlbmdlcn0gR2xvYmFsTWVzc2VuZ2VyIC0gQSBtZXNzZW5nZXIgdGhhdCBjYW4gYmUgdXNlZCBmb3JcbiAqIGdsb2JhbCBtZXNzYWdpbmcuIFdoZW4gdXNpbmcgc3RhdGljIGxpc3RlbiBhbmQgZW1pdCBtZXRob2RzIHRoZXkgYXJlIGV4ZWN1dGVkXG4gKiBvbiB0aGlzIG1lc3Nlbmdlci5cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBFVkVOVFMgLSBCdWlsdC1pbiBldmVudHMgdGhhdCB0aGUgTWVzc2VuZ2VyIGVtaXRzLlxuICovXG5jbGFzcyBNZXNzZW5nZXIge1xuICAvKipcbiAgICogQGNvbnN0cnVjdG9yXG4gICAqXG4gICAqIEBwYXJhbSB7YW55PX0gaWQgLSBJZCBmb3IgdGhlIG9iamVjdC4gSWYgbm9uZSBpcyBwcm92aWRlZCBhIG5ldyBpZCB3aWxsXG4gICAqIGJlIGNyZWF0ZWQuIElkIHNob3VsZCBiZSBhYmxlIHRvIGJlIHJlcHJlc2VudGVkIGFzIGEgc3RyaW5nLlxuICAgKi9cbiAgY29uc3RydWN0b3IoaWQpIHtcbiAgICB0aGlzLl9pZCA9IGlkICE9PSB1bmRlZmluZWQgPyBpZCA6IFV0aWxzLmNyZWF0ZUlkKCk7XG4gICAgdGhpcy5fZGlzcGF0Y2hlciA9IHdpbmRvdztcbiAgICB0aGlzLl9jYWxsYmFja3MgPSB7fTtcbiAgICB0aGlzLl9ldmVudExpc3RlbmVycyA9IHt9O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHN0cmluZyBpZCBvZiB0aGUgb2JqZWN0LlxuICAgKlxuICAgKiBAcmVhZG9ubHlcbiAgICogQHR5cGUge3N0cmluZ31cbiAgICovXG4gIGdldCBpZCgpIHtcbiAgICByZXR1cm4gdGhpcy5faWQ7XG4gIH1cblxuICAvKipcbiAgICogUHJlZml4IGEgbWVzc2FnZSB3aXRoIHRoZSBpbnN0YW5jZSBpZC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2VcbiAgICpcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG4gIF9jcmVhdGVMb2NhbE1lc3NhZ2UobWVzc2FnZSkge1xuICAgIHJldHVybiBgJHt0aGlzLmlkfS4ke21lc3NhZ2V9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSBmdW5jdGlvbiB0aGF0IHdpbGwgY2FsbCBhIGNhbGxiYWNrIGZ1bmN0aW9uIGFuZCBzdXBwbHkgdGhlIGV2ZW50J3NcbiAgICogZGV0YWlsIHByb3BlcnR5IGFzIGFuIGFyZ3VtZW50LlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICAgKlxuICAgKiBAcmV0dXJucyB7RnVuY3Rpb259XG4gICAqL1xuICBfY3JlYXRlTGlzdGVuZXIoY2FsbGJhY2spIHtcbiAgICByZXR1cm4gZSA9PiB7XG4gICAgICBsZXQgdmFsdWU7XG5cbiAgICAgIGlmIChlLmRldGFpbCAhPT0gbnVsbCkge1xuICAgICAgICB2YWx1ZSA9IGUuZGV0YWlsO1xuICAgICAgfVxuXG4gICAgICBjYWxsYmFjayh2YWx1ZSk7XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gZXZlbnQgb2JqZWN0IGFuZCBzZW5kIGl0IHRvIGxpc3RlbmVycy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgLSBFdmVudCB0eXBlIG5hbWUuXG4gICAqIEBwYXJhbSB7YW55PX0gdmFsdWUgLSBWYWx1ZSB0byBzZW5kIHRvIGxpc3RlbmVycy5cbiAgICpcbiAgICogQHJldHVybnMge0N1c3RvbUV2ZW50fVxuICAgKi9cbiAgX2NyZWF0ZUV2ZW50KG1lc3NhZ2UsIHZhbHVlKSB7XG4gICAgcmV0dXJuIG5ldyBDdXN0b21FdmVudChtZXNzYWdlLCB7ZGV0YWlsOiB2YWx1ZX0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVyIGFuIGV2ZW50LlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSAtIEV2ZW50IHR5cGUgbmFtZS5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gbGlzdGVuZXIgLSBBIGxpc3RlbmVyIGZ1bmN0aW9uIGdlbmVyYXRlZCB1c2luZyBfY3JlYXRlTGlzdGVuZXIuXG4gICAqL1xuICBfYWRkTGlzdGVuZXIobWVzc2FnZSwgbGlzdGVuZXIpIHtcbiAgICB0aGlzLl9kaXNwYXRjaGVyLmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICB0aGlzLl9jcmVhdGVMb2NhbE1lc3NhZ2UobWVzc2FnZSksXG4gICAgICBsaXN0ZW5lclxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogVW5yZWdpc3RlciBhbiBldmVudC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgLSBFdmVudCB0eXBlIG5hbWUuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGxpc3RlbmVyIC0gQSBsaXN0ZW5lciBmdW5jdGlvbiBnZW5lcmF0ZWQgdXNpbmcgX2NyZWF0ZUxpc3RlbmVyLlxuICAgKi9cbiAgX3JlbW92ZUxpc3RlbmVyKG1lc3NhZ2UsIGxpc3RlbmVyKSB7XG4gICAgdGhpcy5fZGlzcGF0Y2hlci5yZW1vdmVFdmVudExpc3RlbmVyKFxuICAgICAgdGhpcy5fY3JlYXRlTG9jYWxNZXNzYWdlKG1lc3NhZ2UpLFxuICAgICAgbGlzdGVuZXJcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGUgYSBmdW5jdGlvbiB3aGVuIGEgbWVzc2FnZSBpcyByZWNlaXZlZCBmb3IgdGhpcyBvYmplY3QuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIC0gVGhlIG1lc3NhZ2UgdG8gbGlzdGVuIGZvci5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgLSBGdW5jdGlvbiB0byBleGVjdXRlIG9uY2UgdGhlIG1lc3NhZ2UgaXMgcmVjZWl2ZWQuXG4gICAqL1xuICBsaXN0ZW5UbyhtZXNzYWdlLCBjYWxsYmFjaykge1xuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYENhbm5vdCBhZGQgbGlzdGVuZXIgZm9yICR7bWVzc2FnZX0gb24gJHt0aGlzLmlkfS4gQ2FsbGJhY2sgbXVzdCBiZSBhIGZ1bmN0aW9uLmBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2NhbGxiYWNrc1ttZXNzYWdlXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLl9jYWxsYmFja3NbbWVzc2FnZV0gPSBbXTtcbiAgICAgIHRoaXMuX2V2ZW50TGlzdGVuZXJzW21lc3NhZ2VdID0gW107XG4gICAgfVxuXG4gICAgY29uc3QgbGlzdGVuZXIgPSB0aGlzLl9jcmVhdGVMaXN0ZW5lcihjYWxsYmFjayk7XG4gICAgdGhpcy5fY2FsbGJhY2tzW21lc3NhZ2VdLnB1c2goY2FsbGJhY2spO1xuICAgIHRoaXMuX2V2ZW50TGlzdGVuZXJzW21lc3NhZ2VdLnB1c2gobGlzdGVuZXIpO1xuXG4gICAgdGhpcy5fYWRkTGlzdGVuZXIobWVzc2FnZSwgbGlzdGVuZXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIFByZXZlbnQgYSBmdW5jdGlvbiBmcm9tIGJlaW5nIGV4ZWN1dGVkIHdoZW4gYSBtZXNzYWdlIGlzIHJlY2VpdmVkIGZvciB0aGlzXG4gICAqIG9iamVjdC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgLSBUaGUgbWVzc2FnZSB0byBzdG9wIGxpc3RlbmluZyBmb3IuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBjYWxsYmFjayAtIE9wdGlvbmFsIGNhbGxiYWNrIHRvIHJlbW92ZS4gSWYgbm9uZSBpcyBkZWZpbmVkLFxuICAgKiByZW1vdmUgYWxsIGNhbGxiYWNrcyBmb3IgdGhlIG1lc3NhZ2UuXG4gICAqL1xuICBzdG9wTGlzdGVuaW5nKG1lc3NhZ2UsIGNhbGxiYWNrKSB7XG4gICAgaWYgKHRoaXMuX2NhbGxiYWNrc1ttZXNzYWdlXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIGlmIChjYWxsYmFjayA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBJZiBubyBjYWxsYmFjayB3YXMgZGVmaW5lZCwgY2FsbCBzdG9wTGlzdGVuaW5nIG9uIGFsbCBjYWxsYmFja3MgZm9yIHRoZSBtZXNzYWdlXG4gICAgICBmb3IgKGxldCBpID0gdGhpcy5fY2FsbGJhY2tzW21lc3NhZ2VdLmxlbmd0aCAtIDE7IGkgPiAtMTsgaS0tKSB7XG4gICAgICAgIHRoaXMuc3RvcExpc3RlbmluZyhtZXNzYWdlLCB0aGlzLl9jYWxsYmFja3NbbWVzc2FnZV1baV0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gSWYgYSBjYWxsYmFjayB3YXMgZGVmaW5lZCwgbWFrZSBzdXJlIGl0J3MgYSBsaXN0ZW5lclxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fY2FsbGJhY2tzW21lc3NhZ2VdLmluZGV4T2YoY2FsbGJhY2spO1xuICAgIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBsaXN0ZW5lciA9IHRoaXMuX2V2ZW50TGlzdGVuZXJzW21lc3NhZ2VdW2luZGV4XTtcbiAgICB0aGlzLl9yZW1vdmVMaXN0ZW5lcihtZXNzYWdlLCBsaXN0ZW5lcik7XG5cbiAgICB0aGlzLl9jYWxsYmFja3NbbWVzc2FnZV0uc3BsaWNlKGluZGV4LCAxKTtcbiAgICB0aGlzLl9ldmVudExpc3RlbmVyc1ttZXNzYWdlXS5zcGxpY2UoaW5kZXgsIDEpO1xuXG4gICAgaWYgKHRoaXMuX2NhbGxiYWNrc1ttZXNzYWdlXS5sZW5ndGggPT09IDApIHtcbiAgICAgIGRlbGV0ZSB0aGlzLl9jYWxsYmFja3NbbWVzc2FnZV07XG4gICAgICBkZWxldGUgdGhpcy5fZXZlbnRMaXN0ZW5lcnNbbWVzc2FnZV07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIERlLXJlZ2lzdGVyIGNhbGxiYWNrKHMpIGZyb20gYmVpbmcgZXhlY3V0ZWQgd2hlbiBtZXNzYWdlcyBtYXRjaGluZyB0aGUgZ2l2ZW5cbiAgICogcmVndWxhciBleHByZXNzaW9uIGFyZSByZWNlaXZlZC5cbiAgICpcbiAgICogQHBhcmFtIHtSZWdleHB9IHJlZ2V4cCAtIHJlZ2V4cCAtIFRoZSByZWd1bGFyIGV4cHJlc3Npb24gdG8gZmlsdGVyIG1lc3NhZ2VzIHdpdGguXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBjYWxsYmFjayAtIE9wdGlvbmFsIGNhbGxiYWNrIHRvIHJlbW92ZS4gSWYgbm9uZSBpcyBkZWZpbmVkLFxuICAgKiByZW1vdmUgYWxsIGNhbGxiYWNrcyBmb3IgbWVzc2FnZXMgbWF0Y2hpbmcgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbi5cbiAgICovXG4gIHN0b3BMaXN0ZW5pbmdCeVJlZ2V4cChyZWdleHAsIGNhbGxiYWNrKSB7XG4gICAgY29uc3QgbWVzc2FnZXMgPSBPYmplY3Qua2V5cyh0aGlzLl9jYWxsYmFja3MpLmZpbHRlcihtZXNzYWdlID0+IHJlZ2V4cC50ZXN0KG1lc3NhZ2UpKTtcblxuICAgIG1lc3NhZ2VzLmZvckVhY2gobWVzc2FnZSA9PiB7XG4gICAgICB0aGlzLnN0b3BMaXN0ZW5pbmcobWVzc2FnZSwgY2FsbGJhY2spO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFByZXZlbnQgYW55IGZ1bmN0aW9ucyBmcm9tIGJlaW5nIGV4ZWN1dGVkIHdoZW4gYW55IG1lc3NhZ2UgaXMgcmVjZWl2ZWQgZm9yXG4gICAqIHRoaXMgb2JqZWN0LlxuICAgKi9cbiAgc3RvcExpc3RlbmluZ1RvQWxsKCkge1xuICAgIGNvbnN0IG1lc3NhZ2VzID0gT2JqZWN0LmtleXModGhpcy5fY2FsbGJhY2tzKTtcblxuICAgIGZvciAobGV0IGkgPSBtZXNzYWdlcy5sZW5ndGggLSAxOyBpID4gLTE7IGktLSkge1xuICAgICAgdGhpcy5zdG9wTGlzdGVuaW5nKG1lc3NhZ2VzW2ldKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2VuZCBhIG1lc3NhZ2UsIGNhdXNpbmcgbGlzdGVuZXIgZnVuY3Rpb25zIGZvciB0aGUgbWVzc2FnZSBvbiB0aGlzIG9iamVjdFxuICAgKiB0byBiZSBleGVjdXRlZC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgLSBUaGUgbWVzc2FnZSB0byBlbWl0LlxuICAgKiBAcGFyYW0ge2FueT19IHZhbHVlIC0gT3B0aW9uYWwgYXJndW1lbnQgdG8gcGFzcyB0byBsaXN0ZW5lciBjYWxsYmFja3MuXG4gICAqL1xuICBlbWl0KG1lc3NhZ2UsIHZhbHVlKSB7XG4gICAgaWYgKHRoaXMuX2NhbGxiYWNrc1ttZXNzYWdlXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbWVzc2FnZSA9IHRoaXMuX2NyZWF0ZUxvY2FsTWVzc2FnZShtZXNzYWdlKTtcbiAgICBjb25zdCBldmVudCA9IHRoaXMuX2NyZWF0ZUV2ZW50KG1lc3NhZ2UsIHZhbHVlKTtcbiAgICB0aGlzLl9kaXNwYXRjaGVyLmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGUgYSBmdW5jdGlvbiB3aGVuIGEgbWVzc2FnZSBpcyByZWNlaXZlZCBmb3IgdGhlIGdsb2JhbCBNZXNzZW5nZXIgaW5zdGFuY2UuXG4gICAqXG4gICAqIEBzdGF0aWNcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgLSBUaGUgbWVzc2FnZSB0byBsaXN0ZW4gZm9yLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayAtIEZ1bmN0aW9uIHRvIGV4ZWN1dGUgb25jZSB0aGUgbWVzc2FnZSBpcyByZWNlaXZlZC5cbiAgICovXG4gIHN0YXRpYyBsaXN0ZW5UbyhtZXNzYWdlLCBjYWxsYmFjaywgbWVzc2VuZ2VyKSB7XG4gICAgdGhpcy5HbG9iYWxNZXNzZW5nZXIubGlzdGVuVG8obWVzc2FnZSwgY2FsbGJhY2ssIG1lc3Nlbmdlcik7XG4gIH1cblxuICAvKipcbiAgICogUHJldmVudCBhIGZ1bmN0aW9uIGZyb20gYmVpbmcgZXhlY3V0ZWQgd2hlbiBhIG1lc3NhZ2UgaXMgcmVjZWl2ZWQgZm9yIHRoZVxuICAgKiBnbG9iYWwgTWVzc2VuZ2VyIGluc3RhbmNlLlxuICAgKlxuICAgKiBAc3RhdGljXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIC0gVGhlIG1lc3NhZ2UgdG8gc3RvcCBsaXN0ZW5pbmcgZm9yLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gY2FsbGJhY2sgLSBPcHRpb25hbCBjYWxsYmFjayB0byByZW1vdmUuIElmIG5vbmUgaXMgZGVmaW5lZCxcbiAgICogcmVtb3ZlIGFsbCBjYWxsYmFja3MgZm9yIHRoZSBtZXNzYWdlLlxuICAgKi9cbiAgc3RhdGljIHN0b3BMaXN0ZW5pbmcobWVzc2FnZSwgY2FsbGJhY2spIHtcbiAgICB0aGlzLkdsb2JhbE1lc3Nlbmdlci5zdG9wTGlzdGVuaW5nKG1lc3NhZ2UsIGNhbGxiYWNrKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZS1yZWdpc3RlciBjYWxsYmFjayhzKSBmcm9tIGJlaW5nIGV4ZWN1dGVkIG9uIHRoZSBnbG9iYWwgbWVzc2VuZ2VyciBpbnN0YW5jZVxuICAgKiB3aGVuIG1lc3NhZ2VzIG1hdGNoaW5nIHRoZSBnaXZlbiByZWd1bGFyIGV4cHJlc3Npb24gYXJlIHJlY2VpdmVkLlxuICAgKlxuICAgKiBAcGFyYW0ge1JlZ2V4cH0gcmVnZXhwIC0gcmVnZXhwIC0gVGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiB0byBmaWx0ZXIgbWVzc2FnZXMgd2l0aC5cbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IGNhbGxiYWNrIC0gT3B0aW9uYWwgY2FsbGJhY2sgdG8gcmVtb3ZlLiBJZiBub25lIGlzIGRlZmluZWQsXG4gICAqIHJlbW92ZSBhbGwgY2FsbGJhY2tzIGZvciBtZXNzYWdlcyBtYXRjaGluZyB0aGUgcmVndWxhciBleHByZXNzaW9uLlxuICAgKi9cbiAgc3RhdGljIHN0b3BMaXN0ZW5pbmdCeVJlZ2V4cChyZWdleHAsIGNhbGxiYWNrKSB7XG4gICAgY29uc3QgbWVzc2FnZXMgPSBPYmplY3Qua2V5cyh0aGlzLkdsb2JhbE1lc3Nlbmdlci5fY2FsbGJhY2tzKS5maWx0ZXIoXG4gICAgICBtZXNzYWdlID0+IHJlZ2V4cC50ZXN0KG1lc3NhZ2UpXG4gICAgKTtcblxuICAgIG1lc3NhZ2VzLmZvckVhY2gobWVzc2FnZSA9PiB7XG4gICAgICB0aGlzLnN0b3BMaXN0ZW5pbmcobWVzc2FnZSwgY2FsbGJhY2spO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFByZXZlbnQgYW55IGZ1bmN0aW9ucyBmcm9tIGJlaW5nIGV4ZWN1dGVkIHdoZW4gYW55IG1lc3NhZ2UgaXMgcmVjZWl2ZWQgZm9yXG4gICAqIHRoZSBnbG9iYWwgTWVzc2VuZ2VyIGluc3RhbmNlLlxuICAgKlxuICAgKiBAc3RhdGljXG4gICAqL1xuICBzdGF0aWMgc3RvcExpc3RlbmluZ1RvQWxsKCkge1xuICAgIHRoaXMuR2xvYmFsTWVzc2VuZ2VyLnN0b3BMaXN0ZW5pbmdUb0FsbCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlbmQgYSBtZXNzYWdlLCBjYXVzaW5nIGxpc3RlbmVyIGZ1bmN0aW9ucyBmb3IgdGhlIG1lc3NhZ2Ugb24gdGhlIGdsb2JhbCBNZXNzZW5nZXJcbiAgICogaW5zdGFuY2UgdG8gYmUgZXhlY3V0ZWQuXG4gICAqXG4gICAqIEBzdGF0aWNcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgLSBUaGUgbWVzc2FnZSB0byBlbWl0LlxuICAgKiBAcGFyYW0ge2FueT19IHZhbHVlIC0gT3B0aW9uYWwgYXJndW1lbnQgdG8gcGFzcyB0byBsaXN0ZW5lciBjYWxsYmFja3MuXG4gICAqL1xuICBzdGF0aWMgZW1pdChtZXNzYWdlLCB2YWx1ZSkge1xuICAgIHRoaXMuR2xvYmFsTWVzc2VuZ2VyLmVtaXQobWVzc2FnZSwgdmFsdWUpO1xuICB9XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE1lc3Nlbmdlciwge1xuICBHbG9iYWxNZXNzZW5nZXI6IHtcbiAgICB2YWx1ZTogbmV3IE1lc3NlbmdlcigpLFxuICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgfSxcbiAgRVZFTlRTOiB7XG4gICAgdmFsdWU6IHt9LFxuICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgfSxcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBNZXNzZW5nZXI7XG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cclxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVC0wXHJcbmltcG9ydCBDb3JlTWVzc2VuZ2VyIGZyb20gJ2NvcmUvTWVzc2VuZ2VyJztcclxuXHJcbi8qKlxyXG4gKiBAZXh0ZW5kcyBjb3JlL01lc3NlbmdlclxyXG4gKiBAYWxpYXMgQmFieWxvbi5qcy9NZXNzZW5nZXJcclxuICovXHJcbmNsYXNzIE1lc3NlbmdlciBleHRlbmRzIENvcmVNZXNzZW5nZXIge1xyXG4gIC8qKlxyXG4gICAqIEBjb25zdHJ1Y3RvclxyXG4gICAqXHJcbiAgICogQHBhcmFtIHthbnk9fSBpZCAtIElkIGZvciB0aGUgb2JqZWN0LiBJZiBub25lIGlzIHByb3ZpZGVkIGEgbmV3IGlkIHdpbGxcclxuICAgKiBiZSBjcmVhdGVkLiBJZCBzaG91bGQgYmUgYWJsZSB0byBiZSByZXByZXNlbnRlZCBhcyBhIHN0cmluZy5cclxuICAgKi9cclxuICBjb25zdHJ1Y3RvcihpZCkge1xyXG4gICAgc3VwZXIoaWQpO1xyXG5cclxuICAgIHRoaXMuX2V2ZW50cyA9IHt9O1xyXG4gIH1cclxuXHJcbiAgX2NyZWF0ZUxpc3RlbmVyKGNhbGxiYWNrKSB7XHJcbiAgICByZXR1cm4gdmFsdWUgPT4ge1xyXG4gICAgICBjYWxsYmFjayh2YWx1ZSk7XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgX2FkZExpc3RlbmVyKG1lc3NhZ2UsIGxpc3RlbmVyKSB7XHJcbiAgICB0aGlzLl9ldmVudHNbbWVzc2FnZV0uYWRkKGxpc3RlbmVyKTtcclxuICB9XHJcblxyXG4gIF9yZW1vdmVMaXN0ZW5lcihtZXNzYWdlLCBsaXN0ZW5lcikge1xyXG4gICAgdGhpcy5fZXZlbnRzW21lc3NhZ2VdLnJlbW92ZUNhbGxiYWNrKGxpc3RlbmVyKTtcclxuICB9XHJcblxyXG4gIGxpc3RlblRvKG1lc3NhZ2UsIGNhbGxiYWNrKSB7XHJcbiAgICBpZiAodGhpcy5fZXZlbnRzW21lc3NhZ2VdID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhpcy5fZXZlbnRzW21lc3NhZ2VdID0gbmV3IEJBQllMT04uT2JzZXJ2YWJsZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIHN1cGVyLmxpc3RlblRvKG1lc3NhZ2UsIGNhbGxiYWNrKTtcclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgLy8gQ2xlYW4gdXAgdGhlIG9ic2VydmFibGUgaWYgbm90aGluZyBpcyBsaXN0ZW5pbmcgdG8gaXRcclxuICAgICAgaWYgKCF0aGlzLl9ldmVudHNbbWVzc2FnZV0uaGFzT2JzZXJ2ZXJzKCkpIHtcclxuICAgICAgICBkZWxldGUgdGhpcy5fZXZlbnRzW21lc3NhZ2VdO1xyXG5cclxuICAgICAgICB0aHJvdyBlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzdG9wTGlzdGVuaW5nKG1lc3NhZ2UsIGNhbGxiYWNrKSB7XHJcbiAgICBjb25zdCBldmVudCA9IHRoaXMuX2V2ZW50c1ttZXNzYWdlXTtcclxuXHJcbiAgICBpZiAoZXZlbnQgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgc3VwZXIuc3RvcExpc3RlbmluZyhtZXNzYWdlLCBjYWxsYmFjayk7XHJcblxyXG4gICAgaWYgKCFldmVudC5oYXNPYnNlcnZlcnMoKSkge1xyXG4gICAgICBkZWxldGUgdGhpcy5fZXZlbnRzW21lc3NhZ2VdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZW1pdChtZXNzYWdlLCB2YWx1ZSkge1xyXG4gICAgY29uc3QgZXZlbnQgPSB0aGlzLl9ldmVudHNbbWVzc2FnZV07XHJcblxyXG4gICAgaWYgKGV2ZW50ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGV2ZW50Lm5vdGlmeU9ic2VydmVycyh2YWx1ZSk7XHJcbiAgfVxyXG59XHJcblxyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoTWVzc2VuZ2VyLCAnR2xvYmFsTWVzc2VuZ2VyJywge1xyXG4gIHZhbHVlOiBuZXcgTWVzc2VuZ2VyKCksXHJcbiAgd3JpdGFibGU6IGZhbHNlLFxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IE1lc3NlbmdlcjtcclxuIiwiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXHJcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxyXG5pbXBvcnQgTWVzc2VuZ2VyIGZyb20gJ2FwcC9NZXNzZW5nZXInO1xyXG5cclxuLyoqXHJcbiAqIEJhc2UgY2xhc3MgZm9yIGFsbCBob3N0IGZlYXR1cmVzLiBLZWVwcyBhIHJlZmVyZW5jZSB0byB0aGUgaG9zdCBvYmplY3QgbWFuYWdpbmdcclxuICogdGhlIGZlYXR1cmUuXHJcbiAqXHJcbiAqIEBhYnN0cmFjdFxyXG4gKlxyXG4gKiBAcHJvcGVydHkge09iamVjdH0gRVZFTlRTIC0gQnVpbHQtaW4gbWVzc2FnZXMgdGhhdCB0aGUgZmVhdHVyZSBlbWl0cy4gV2hlbiB0aGVcclxuICogZmVhdHVyZSBpcyBhZGRlZCB0byBhIHtAbGluayBjb3JlL0hvc3RPYmplY3R9LCBldmVudCBuYW1lcyB3aWxsIGJlIHByZWZpeGVkIGJ5IHRoZVxyXG4gKiBuYW1lIG9mIHRoZSBmZWF0dXJlIGNsYXNzICsgJy4nLlxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW0VWRU5UUy51cGRhdGU9b25VcGRhdGVdIC0gTWVzc2FnZSB0aGF0IGlzIGVtaXR0ZWQgYWZ0ZXJcclxuICogZWFjaCBjYWxsIHRvIFt1cGRhdGVde0BsaW5rIEFic3RyYWN0SG9zdEZlYXR1cmUjdXBkYXRlfS5cclxuICogQHByb3BlcnR5IHtPYmplY3R9IFNFUlZJQ0VTIC0gQW55IEFXUyBzZXJ2aWNlcyB0aGF0IGFyZSBuZWNlc3NhcnkgZm9yIHRoZVxyXG4gKiBmZWF0dXJlIHRvIGZ1bmN0aW9uLlxyXG4gKi9cclxuY2xhc3MgQWJzdHJhY3RIb3N0RmVhdHVyZSB7XHJcbiAgLyoqXHJcbiAgICogQGNvbnN0cnVjdG9yXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge2NvcmUvSG9zdE9iamVjdH0gaG9zdCAtIFRoZSBIb3N0T2JqZWN0IG1hbmFnaW5nIHRoZSBmZWF0dXJlLlxyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKGhvc3QpIHtcclxuICAgIHRoaXMuX2hvc3QgPSBob3N0O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWRkcyBhIG5hbWVzcGFjZSB0byB0aGUgaG9zdCB3aXRoIHRoZSBuYW1lIG9mIHRoZSBmZWF0dXJlIHRvIGNvbnRhaW4gcHJvcGVydGllc1xyXG4gICAqIGFuZCBtZXRob2RzIGZyb20gdGhlIGZlYXR1cmUgdGhhdCB1c2VycyBvZiB0aGUgaG9zdCBuZWVkIGFjY2VzcyB0by5cclxuICAgKi9cclxuICBpbnN0YWxsQXBpKCkge1xyXG4gICAgY29uc3QgZXZlbnRzID0ge307XHJcbiAgICBjb25zdCBhcGkgPSB7RVZFTlRTOiBldmVudHN9O1xyXG5cclxuICAgIC8vIEFkZCB0aGUgY2xhc3MgbmFtZSB0byBldmVudCBuYW1lc1xyXG4gICAgT2JqZWN0LmVudHJpZXModGhpcy5jb25zdHJ1Y3Rvci5FVkVOVFMpLmZvckVhY2goKFtuYW1lLCB2YWx1ZV0pID0+IHtcclxuICAgICAgZXZlbnRzW25hbWVdID0gYCR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfS4ke3ZhbHVlfWA7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLl9ob3N0W3RoaXMuY29uc3RydWN0b3IubmFtZV0gPSBhcGk7XHJcblxyXG4gICAgcmV0dXJuIGFwaTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIGhvc3QgdGhhdCBtYW5hZ2VzIHRoZSBmZWF0dXJlLlxyXG4gICAqXHJcbiAgICogQHJlYWRvbmx5XHJcbiAgICovXHJcbiAgZ2V0IGhvc3QoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5faG9zdDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIGVuZ2luZSBvd25lciBvYmplY3Qgb2YgdGhlIGhvc3QuXHJcbiAgICpcclxuICAgKiBAcmVhZG9ubHlcclxuICAgKi9cclxuICBnZXQgb3duZXIoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5faG9zdC5vd25lcjtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIExpc3RlbiB0byBhIGZlYXR1cmUgbWVzc2FnZSBmcm9tIHRoZSBob3N0IG9iamVjdC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIC0gTWVzc2FnZSB0byBsaXN0ZW4gZm9yLlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIC0gVGhlIGNhbGxiYWNrIHRvIGV4ZWN1dGUgd2hlbiB0aGUgbWVzc2FnZSBpcyByZWNlaXZlZC5cclxuICAgKi9cclxuICBsaXN0ZW5UbyhtZXNzYWdlLCBjYWxsYmFjaykge1xyXG4gICAgdGhpcy5faG9zdC5saXN0ZW5UbyhtZXNzYWdlLCBjYWxsYmFjayk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBMaXN0ZW4gdG8gYSBmZWF0dXJlIG1lc3NhZ2UgZnJvbSB0aGUgZ2xvYmFsIG1lc3Nlbmdlci4gRmVhdHVyZSBtZXNzYWdlcyB3aWxsXHJcbiAgICogYmUgcHJlZml4ZWQgd2l0aCB0aGUgY2xhc3MgbmFtZSBvZiB0aGUgZmVhdHVyZS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIC0gTWVzc2FnZSB0byBsaXN0ZW4gZm9yLlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIC0gVGhlIGNhbGxiYWNrIHRvIGV4ZWN1dGUgd2hlbiB0aGUgbWVzc2FnZSBpcyByZWNlaXZlZC5cclxuICAgKi9cclxuICBzdGF0aWMgbGlzdGVuVG8obWVzc2FnZSwgY2FsbGJhY2spIHtcclxuICAgIG1lc3NhZ2UgPSBgJHt0aGlzLm5hbWV9LiR7bWVzc2FnZX1gO1xyXG4gICAgTWVzc2VuZ2VyLmxpc3RlblRvKG1lc3NhZ2UsIGNhbGxiYWNrKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFN0b3AgbGlzdGVuaW5nIHRvIGEgbWVzc2FnZSBmcm9tIHRoZSBob3N0IG9iamVjdC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIC0gTWVzc2FnZSB0byBzdG9wIGxpc3RlbmluZyBmb3IuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IGNhbGxiYWNrIC0gT3B0aW9uYWwgY2FsbGJhY2sgdG8gcmVtb3ZlLiBJZiBub25lIGlzIGRlZmluZWQsXHJcbiAgICogcmVtb3ZlIGFsbCBjYWxsYmFja3MgZm9yIHRoZSBtZXNzYWdlLlxyXG4gICAqL1xyXG4gIHN0b3BMaXN0ZW5pbmcobWVzc2FnZSwgY2FsbGJhY2spIHtcclxuICAgIHRoaXMuX2hvc3Quc3RvcExpc3RlbmluZyhtZXNzYWdlLCBjYWxsYmFjayk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTdG9wIGxpc3RlbmluZyB0byBhIG1lc3NhZ2UgZnJvbSB0aGUgZ2xvYmFsIG1lc3Nlbmdlci5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIC0gTWVzc2FnZSB0byBzdG9wIGxpc3RlbmluZyBmb3IuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IGNhbGxiYWNrIC0gT3B0aW9uYWwgY2FsbGJhY2sgdG8gcmVtb3ZlLiBJZiBub25lIGlzIGRlZmluZWQsXHJcbiAgICogcmVtb3ZlIGFsbCBjYWxsYmFja3MgZm9yIHRoZSBtZXNzYWdlLlxyXG4gICAqL1xyXG4gIHN0YXRpYyBzdG9wTGlzdGVuaW5nKG1lc3NhZ2UsIGNhbGxiYWNrKSB7XHJcbiAgICBtZXNzYWdlID0gYCR7dGhpcy5uYW1lfS4ke21lc3NhZ2V9YDtcclxuICAgIE1lc3Nlbmdlci5zdG9wTGlzdGVuaW5nKG1lc3NhZ2UsIGNhbGxiYWNrKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFN0b3AgbGlzdGVuaW5nIHRvIGEgbWVzc2FnZSBtYXRjaGluZyB0aGUgZ2l2ZW4gcmVndWxhciBleHByZXNzaW9uIGZyb20gdGhlXHJcbiAgICogaG9zdCBvYmplY3QuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge1JlZ2V4cH0gcmVnZXhwIC0gVGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiB0byBzdG9wIGxpc3RlbmluZyBmb3IuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IGNhbGxiYWNrIC0gT3B0aW9uYWwgY2FsbGJhY2sgdG8gcmVtb3ZlLiBJZiBub25lIGlzIGRlZmluZWQsXHJcbiAgICogcmVtb3ZlIGFsbCBjYWxsYmFja3MgZm9yIHRoZSBtZXNzYWdlLlxyXG4gICAqL1xyXG4gIHN0b3BMaXN0ZW5pbmdCeVJlZ2V4cChyZWdleHAsIGNhbGxiYWNrKSB7XHJcbiAgICB0aGlzLl9ob3N0LnN0b3BMaXN0ZW5pbmdCeVJlZ2V4cChyZWdleHAsIGNhbGxiYWNrKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFN0b3AgbGlzdGVuaW5nIHRvIGEgbWVzc2FnZSBtYXRjaGluZyB0aGUgZ2l2ZW4gcmVndWxhciBleHByZXNzaW9uIGZyb20gdGhlXHJcbiAgICogZ2xvYmFsIG1lc3Nlbmdlci5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7UmVnZXhwfSByZWdleHAgLSBUaGUgcmVndWxhciBleHByZXNzaW9uIHRvIHN0b3AgbGlzdGVuaW5nIGZvci5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gY2FsbGJhY2sgLSBPcHRpb25hbCBjYWxsYmFjayB0byByZW1vdmUuIElmIG5vbmUgaXMgZGVmaW5lZCxcclxuICAgKiByZW1vdmUgYWxsIGNhbGxiYWNrcyBmb3IgdGhlIG1lc3NhZ2UuXHJcbiAgICovXHJcbiAgc3RhdGljIHN0b3BMaXN0ZW5pbmdCeVJlZ2V4cChyZWdleHAsIGNhbGxiYWNrKSB7XHJcbiAgICByZWdleHAgPSBuZXcgUmVnRXhwKGBeJHt0aGlzLm5hbWV9LiR7cmVnZXhwLnNvdXJjZS5yZXBsYWNlKC9cXF4vLCAnJyl9YCk7XHJcbiAgICBNZXNzZW5nZXIuc3RvcExpc3RlbmluZ0J5UmVnZXhwKHJlZ2V4cCwgY2FsbGJhY2spO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU3RvcCBsaXN0ZW5pbmcgdG8gYWxsIG1lc3NhZ2VzLlxyXG4gICAqL1xyXG4gIHN0b3BMaXN0ZW5pbmdUb0FsbCgpIHtcclxuICAgIHRoaXMuX2hvc3Quc3RvcExpc3RlbmluZ1RvQWxsKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTdG9wIGxpc3RlbmluZyB0byBhbGwgZmVhdHVyZSBtZXNzYWdlcy5cclxuICAgKi9cclxuICBzdGF0aWMgc3RvcExpc3RlbmluZ1RvQWxsKCkge1xyXG4gICAgTWVzc2VuZ2VyLnN0b3BMaXN0ZW5pbmdCeVJlZ2V4cChuZXcgUmVnRXhwKGBeJHt0aGlzLm5hbWV9LmApKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEVtaXQgZmVhdHVyZSBtZXNzYWdlcyBmcm9tIHRoZSBob3N0LiBGZWF0dXJlIG1lc3NhZ2VzIHdpbGwgYmUgcHJlZml4ZWQgd2l0aFxyXG4gICAqIHRoZSBjbGFzcyBuYW1lIG9mIHRoZSBmZWF0dXJlLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgLSBUaGUgbWVzc2FnZSB0byBlbWl0LlxyXG4gICAqIEBwYXJhbSB7YW55PX0gdmFsdWUgLSBPcHRpb25hbCBwYXJhbWV0ZXIgdG8gcGFzcyB0byBsaXN0ZW5lciBjYWxsYmFja3MuXHJcbiAgICovXHJcbiAgZW1pdChtZXNzYWdlLCB2YWx1ZSkge1xyXG4gICAgbWVzc2FnZSA9IGAke3RoaXMuY29uc3RydWN0b3IubmFtZX0uJHttZXNzYWdlfWA7XHJcbiAgICB0aGlzLl9ob3N0LmVtaXQobWVzc2FnZSwgdmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRW1pdCBmZWF0dXJlIG1lc3NhZ2VzIGZyb20gdGhlIGdsb2JhbCBtZXNzZW5nZXIuIEZlYXR1cmUgbWVzc2FnZXMgd2lsbCBiZSBwcmVmaXhlZFxyXG4gICAqIHdpdGggdGhlIGNsYXNzIG5hbWUgb2YgdGhlIGZlYXR1cmUuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSAtIFRoZSBtZXNzYWdlIHRvIGVtaXQuXHJcbiAgICogQHBhcmFtIHthbnk9fSB2YWx1ZSAtIE9wdGlvbmFsIHBhcmFtZXRlciB0byBwYXNzIHRvIGxpc3RlbmVyIGNhbGxiYWNrcy5cclxuICAgKi9cclxuICBzdGF0aWMgZW1pdChtZXNzYWdlLCB2YWx1ZSkge1xyXG4gICAgbWVzc2FnZSA9IGAke3RoaXMubmFtZX0uJHttZXNzYWdlfWA7XHJcbiAgICBNZXNzZW5nZXIuZW1pdChtZXNzYWdlLCB2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFeGVjdXRlcyBlYWNoIHRpbWUgdGhlIGhvc3QgaXMgdXBkYXRlZC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBkZWx0YVRpbWUgLSBBbW91bnQgb2YgdGltZSBzaW5jZSB0aGUgbGFzdCBob3N0IHVwZGF0ZSB3YXNcclxuICAgKiBjYWxsZWQuXHJcbiAgICovXHJcbiAgdXBkYXRlKGRlbHRhVGltZSkge1xyXG4gICAgdGhpcy5lbWl0KHRoaXMuY29uc3RydWN0b3IuRVZFTlRTLnVwZGF0ZSwgZGVsdGFUaW1lKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENsZWFuIHVwIG9uY2UgdGhlIGZlYXR1cmUgaXMgbm8gbG9uZ2VyIGluIHVzZS4gUmVtb3ZlIHRoZSBmZWF0dXJlIG5hbWVzcGFjZVxyXG4gICAqIGZyb20gdGhlIGhvc3QgYW5kIHJlbW92ZSByZWZlcmVuY2UgdG8gdGhlIGhvc3QuXHJcbiAgICovXHJcbiAgZGlzY2FyZCgpIHtcclxuICAgIE9iamVjdC5rZXlzKHRoaXMuX2hvc3RbdGhpcy5jb25zdHJ1Y3Rvci5uYW1lXSkuZm9yRWFjaChuYW1lID0+IHtcclxuICAgICAgZGVsZXRlIHRoaXMuX2hvc3RbdGhpcy5jb25zdHJ1Y3Rvci5uYW1lXVtuYW1lXTtcclxuICAgIH0pO1xyXG5cclxuICAgIGRlbGV0ZSB0aGlzLl9ob3N0W3RoaXMuY29uc3RydWN0b3IubmFtZV07XHJcbiAgICBkZWxldGUgdGhpcy5faG9zdDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFwcGxpZXMgYSBzZXF1ZW5jZSBvZiBtaXhpbiBjbGFzcyBmYWN0b3J5IGZ1bmN0aW9ucyB0byB0aGlzIGNsYXNzIGFuZFxyXG4gICAqIHJldHVybnMgdGhlIHJlc3VsdC4gRWFjaCBmdW5jdGlvbiBpcyBleHBlY3RlZCB0byByZXR1cm4gYSBjbGFzcyB0aGF0XHJcbiAgICogZXh0ZW5kcyB0aGUgY2xhc3MgaXQgd2FzIGdpdmVuLiBUaGUgZnVuY3Rpb25zIGFyZSBhcHBsaWVkIGluIHRoZSBvcmRlclxyXG4gICAqIHRoYXQgcGFyYW1ldGVycyBhcmUgZ2l2ZW4sIG1lYW5pbmcgdGhhdCB0aGUgZmlyc3QgZmFjdG9yeSB3aWxsXHJcbiAgICogZXh0ZW5kIHRoaXMgYmFzZSBjbGFzcy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7Li4uRnVuY3Rpb259IG1peGluQ2xhc3NGYWN0b3JpZXMgQ2xhc3MgZmFjdG9yeSBmdW5jdGlvbnMgdGhhdCB3aWxsXHJcbiAgICogYmUgYXBwbGllZC5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtDbGFzc30gQSBjbGFzcyB0aGF0IGlzIHRoZSByZXN1bHQgb2YgYXBwbHlpbmcgdGhlIGZhY3RvcnkgZnVuY3Rpb25zLlxyXG4gICAqIFRoZSByZXN1bHRpbmcgY2xhc3Mgd2lsbCBhbHdheXMgaW5oZXJpdCBmcm9tIEFic3RyYWN0SG9zdEZlYXR1cmUuXHJcbiAgICovXHJcbiAgc3RhdGljIG1peCguLi5taXhpbkNsYXNzRmFjdG9yaWVzKSB7XHJcbiAgICBsZXQgUmVzdWx0Q2xhc3MgPSB0aGlzO1xyXG5cclxuICAgIG1peGluQ2xhc3NGYWN0b3JpZXMuZm9yRWFjaChtaXhpbkNsYXNzRmFjdG9yeSA9PiB7XHJcbiAgICAgIFJlc3VsdENsYXNzID0gbWl4aW5DbGFzc0ZhY3RvcnkoUmVzdWx0Q2xhc3MpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIFJlc3VsdENsYXNzO1xyXG4gIH1cclxufVxyXG5cclxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQWJzdHJhY3RIb3N0RmVhdHVyZSwge1xyXG4gIEVWRU5UUzoge1xyXG4gICAgdmFsdWU6IHtcclxuICAgICAgdXBkYXRlOiAnb25VcGRhdGUnLFxyXG4gICAgfSxcclxuICAgIHdyaXRhYmxlOiBmYWxzZSxcclxuICB9LFxyXG4gIFNFUlZJQ0VTOiB7XHJcbiAgICB2YWx1ZToge30sXHJcbiAgICB3cml0YWJsZTogZmFsc2UsXHJcbiAgfSxcclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBBYnN0cmFjdEhvc3RGZWF0dXJlO1xyXG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cclxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVC0wXHJcbmltcG9ydCBNZXNzZW5nZXIgZnJvbSAnYXBwL01lc3Nlbmdlcic7XHJcbmltcG9ydCBBYnN0cmFjdEhvc3RGZWF0dXJlIGZyb20gJy4vQWJzdHJhY3RIb3N0RmVhdHVyZSc7XHJcbmltcG9ydCBVdGlscyBmcm9tICcuL1V0aWxzJztcclxuXHJcbi8qKlxyXG4gKiBPYmplY3QgdGhhdCBtYW5hZ2VzIGFjY2VzcyB0byBhbGwgSG9zdCBmZWF0dXJlcy4gQ29udGFpbnMgYSByZWZlcmVuY2UgdG9cclxuICogZW5naW5lLXNwZWNpZmljIHZpc3VhbHMgaWYgYXBwbGljYWJsZS5cclxuICpcclxuICogQGV4dGVuZHMgY29yZS9NZXNzZW5nZXJcclxuICogQGFsaWFzIGNvcmUvSG9zdE9iamVjdFxyXG4gKlxyXG4gKiBAcHJvcGVydHkge09iamVjdH0gRVZFTlRTIC0gQnVpbHQtaW4gbWVzc2FnZXMgdGhhdCB0aGUgTWVzc2VuZ2VyIGVtaXRzLlxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW0VWRU5UUy51cGRhdGU9J29uVXBkYXRlJ10gLSBNZXNzYWdlIHRoYXQgaXMgZW1pdHRlZCBhZnRlclxyXG4gKiBlYWNoIGNhbGwgdG8gW3VwZGF0ZV17QGxpbmsgY29yZS9Ib3N0T2JqZWN0I3VwZGF0ZX0uXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbRVZFTlRTLmFkZEZlYXR1cmU9J29uQWRkRmVhdHVyZSddIC0gTWVzc2FnZSB0aGF0IGlzIGVtaXR0ZWRcclxuICogYWZ0ZXIgZWFjaCBjYWxsIHRvIFthZGRGZWF0dXJlXXtAbGluayBjb3JlL0hvc3RPYmplY3QjYWRkRmVhdHVyZX0uXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbRVZFTlRTLnJlbW92ZUZlYXR1cmU9J29uUmVtb3ZlRmVhdHVyZSddIC0gTWVzc2FnZSB0aGF0IGlzIGVtaXR0ZWRcclxuICogYWZ0ZXIgZWFjaCBjYWxsIHRvIFtyZW1vdmVGZWF0dXJlXXtAbGluayBjb3JlL0hvc3RPYmplY3QjcmVtb3ZlRmVhdHVyZX0uXHJcbiAqL1xyXG5jbGFzcyBIb3N0T2JqZWN0IGV4dGVuZHMgTWVzc2VuZ2VyIHtcclxuICAvKipcclxuICAgKiBAY29uc3RydWN0b3JcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0PX0gb3B0aW9ucyAtIE9wdGlvbnMgZm9yIHRoZSBob3N0LlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0PX0gb3B0aW9ucy5vd25lciAtIE9wdGlvbmFsIGVuZ2luZS1zcGVjaWZpYyBvd25lciBvZiB0aGUgaG9zdC5cclxuICAgKi9cclxuICBjb25zdHJ1Y3Rvcih7b3duZXIgPSB7fX0gPSB7fSkge1xyXG4gICAgLy8gSWYgYW4gb3duZXIgaXMgc3BlY2lmaWVkLCB1c2UgaXRzIGlkIGZvciBtZXNzYWdpbmdcclxuICAgIHN1cGVyKG93bmVyLmlkKTtcclxuXHJcbiAgICB0aGlzLl9vd25lciA9IG93bmVyO1xyXG4gICAgdGhpcy5fZmVhdHVyZXMgPSB7fTtcclxuICAgIHRoaXMuX3dhaXRzID0gW107XHJcbiAgICB0aGlzLl9sYXN0VXBkYXRlID0gdGhpcy5ub3c7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSBlbmdpbmUgb3duZXIgb2JqZWN0IG9mIHRoZSBob3N0LlxyXG4gICAqXHJcbiAgICogQHJlYWRvbmx5XHJcbiAgICogQHR5cGUge09iamVjdH1cclxuICAgKi9cclxuICBnZXQgb3duZXIoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fb3duZXI7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSBjdXJyZW50IHRpbWUgaW4gbWlsbGlzZWNvbmRzLlxyXG4gICAqXHJcbiAgICogQHJlYWRvbmx5XHJcbiAgICogQHR5cGUge251bWJlcn1cclxuICAgKi9cclxuICBnZXQgbm93KCkge1xyXG4gICAgcmV0dXJuIERhdGUubm93KCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSBhbW91bnQgb2YgdGltZSBpbiBtaWxsaXNlY29uZHMgc2luY2UgdXBkYXRlIHdhcyBsYXN0IGNhbGxlZC5cclxuICAgKlxyXG4gICAqIEByZWFkb25seVxyXG4gICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICovXHJcbiAgZ2V0IGRlbHRhVGltZSgpIHtcclxuICAgIHJldHVybiB0aGlzLm5vdyAtIHRoaXMuX2xhc3RVcGRhdGU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgaW4gdGhlIGVuZ2luZSdzIHJlbmRlciBsb29wLiBFeGVjdXRlcyB1cGRhdGVcclxuICAgKiBsb29wcyBmb3IgYWxsIGZlYXR1cmVzLlxyXG4gICAqL1xyXG4gIHVwZGF0ZSgpIHtcclxuICAgIGNvbnN0IGN1cnJlbnRUaW1lID0gdGhpcy5ub3c7XHJcbiAgICBjb25zdCBkdCA9IHRoaXMuZGVsdGFUaW1lO1xyXG5cclxuICAgIC8vIFByb2dyZXNzIHN0b3JlZCB3YWl0c1xyXG4gICAgdGhpcy5fd2FpdHMuZm9yRWFjaCh3YWl0ID0+IHtcclxuICAgICAgd2FpdC5leGVjdXRlKGR0KTtcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIFVwZGF0ZSBhbGwgZmVhdHVyZXNcclxuICAgIE9iamVjdC52YWx1ZXModGhpcy5fZmVhdHVyZXMpLmZvckVhY2goZmVhdHVyZSA9PiB7XHJcbiAgICAgIGZlYXR1cmUudXBkYXRlKGR0KTtcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIE5vdGlmeSBsaXN0ZW5lcnMgYW4gdXBkYXRlIG9jY3VyZWRcclxuICAgIHRoaXMuZW1pdCh0aGlzLmNvbnN0cnVjdG9yLkVWRU5UUy51cGRhdGUsIGR0KTtcclxuXHJcbiAgICB0aGlzLl9sYXN0VXBkYXRlID0gY3VycmVudFRpbWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gYSBkZWZlcnJlZCBwcm9taXNlIHRoYXQgd2lsbCB3YWl0IGEgZ2l2ZW4gbnVtYmVyIG9mIHNlY29uZHMgYmVmb3JlXHJcbiAgICogcmVzb2x2aW5nLiBUaGUgaG9zdCB3aWxsIGNvbnRpbnVvdXNseSB1cGRhdGUgdGhlIHdhaXQgcHJvbWlzZSBkdXJpbmcgdGhlXHJcbiAgICogdXBkYXRlIGxvb3AgdW50aWwgaXQgcmVzb2x2ZXMuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge251bWJlcn0gW3NlY29uZHM9MF0gLSBOdW1iZXIgb2Ygc2Vjb25kcyB0byB3YWl0IGJlZm9yZSByZXNvbHZpbmcuXHJcbiAgICogQHBhcmFtIHtPYmplY3Q9fSBvcHRpb25zIC0gT3B0aW9uYWwgb3B0aW9ucyBvYmplY3RcclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0aW9ucy5vbkZpbmlzaF0gLSBDYWxsYmFjayB0byBleGVjdXRlIG9uY2UgdGhlIHdhaXQgdGltZVxyXG4gICAqIGlzIG1ldC5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb3B0aW9ucy5vblByb2dyZXNzIC0gQ2FsbGJhY2sgdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIHdhaXRcclxuICAgKiB0aW1lIHByb2dyZXNzZXMgdG93YXJkcyB0aGUgdGFyZ2V0IG51bWJlciBvZiBzZWNvbmRzLiBUaGUgYW1vdW50IG9mIHByb2dyZXNzXHJcbiAgICogYXMgYSAwLTEgcGVyY2VudGFnZSBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnQuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9wdGlvbnMub25DYW5jZWwgLSBDYWxsYmFjayB0byBleGVjdXRlIGlmIHRoZSB1c2VyIGNhbmNlbHNcclxuICAgKiB0aGUgd2FpdCBiZWZvcmUgY29tcGxldGlvbi5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb3B0aW9ucy5vbkVycm9yIC0gQ2FsbGJhY2sgdG8gZXhlY3V0ZSBpZiB0aGUgd2FpdCBzdG9wc1xyXG4gICAqIGJlY2F1c2UgYW4gZXJyb3IgaXMgZW5jb3VudGVyZWQuIFRoZSBlcnJvciBtZXNzYWdlIGlzIHBhc3NlZCBhcyBhIHBhcmFtZXRlci5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtEZWZlcnJlZH1cclxuICAgKi9cclxuICB3YWl0KHNlY29uZHMsIHtvbkZpbmlzaCwgb25Qcm9ncmVzcywgb25DYW5jZWwsIG9uRXJyb3J9ID0ge30pIHtcclxuICAgIGNvbnN0IHdhaXQgPSBVdGlscy53YWl0KHNlY29uZHMsIHtvbkZpbmlzaCwgb25Qcm9ncmVzcywgb25DYW5jZWwsIG9uRXJyb3J9KTtcclxuICAgIHRoaXMuX3dhaXRzLnB1c2god2FpdCk7XHJcblxyXG4gICAgLy8gT25jZSB0aGUgd2FpdCBwcm9taXNlIGlzIG5vIGxvbmdlciBwZW5kaW5nIHJlbW92ZSBpdCBmcm9tIHRoZSB3YWl0cyBhcnJheVxyXG4gICAgY29uc3Qgb25Db21wbGV0ZSA9ICgpID0+IHtcclxuICAgICAgdGhpcy5fd2FpdHMuc3BsaWNlKHRoaXMuX3dhaXRzLmluZGV4T2Yod2FpdCksIDEpO1xyXG4gICAgfTtcclxuICAgIHdhaXQudGhlbihvbkNvbXBsZXRlLCBvbkNvbXBsZXRlKTtcclxuXHJcbiAgICByZXR1cm4gd2FpdDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEluc3RhbnRpYXRlIGEgbmV3IEhvc3QgZmVhdHVyZSBhbmQgc3RvcmUgaXQuIEZlYXR1cmVzIG11c3QgaW5oZXJpdCBmcm9tXHJcbiAgICogQWJzdHJhY3RIb3N0RmVhdHVyZS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7Q2xhc3N9IEZlYXR1cmVDbGFzcyAtIENsYXNzIHRoYXQgd2lsbCBpbnN0YW50aWF0ZSB0aGUgZmVhdHVyZS4gTXVzdFxyXG4gICAqIGV4dGVuZCB7QGxpbmsgQWJzdHJhY3RIb3N0RmVhdHVyZX0uXHJcbiAgICogQHBhcmFtIHtib29sZWFufSBbZm9yY2U9ZmFsc2VdIC0gV2hldGhlciBvciBub3QgdG8gb3ZlcndyaXRlIGFuIGV4aXN0aW5nXHJcbiAgICogZmVhdHVyZSBpZiBvbmUgb2YgdGhpcyB0eXBlIGFscmVhZHkgZXhpc3RzIG9uIHRoZSBvYmplY3QuXHJcbiAgICogQHBhcmFtICB7Li4uYW55fSBhcmdzIC0gQWRkaXRpb25hbCBhcmd1bWVudHMgdG8gcGFzcyB0byB0aGUgRmVhdHVyZUNsYXNzXHJcbiAgICogY29uc3RydWN0b3IuIFRoZSBIb3N0T2JqZWN0IHdpbGwgYWx3YXlzIGJlIHBhc3NlZCBhcyB0aGUgZmlyc3QgYXJndW1lbnQuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSBXaGV0aGVyIG9yIG5vdCBhIGZlYXR1cmUgd2FzIHN1Y2Nlc3NmdWxseSBhZGRlZC5cclxuICAgKi9cclxuICBhZGRGZWF0dXJlKEZlYXR1cmVDbGFzcywgZm9yY2UgPSBmYWxzZSwgLi4uYXJncykge1xyXG4gICAgY29uc3QgaW5wdXRUeXBlID0gdHlwZW9mIEZlYXR1cmVDbGFzcztcclxuXHJcbiAgICAvLyBNYWtlIHN1cmUgdGhlIEZlYXR1cmVDbGFzcyBjYW4gYmUgZXhlY3V0ZWRcclxuICAgIGlmIChpbnB1dFR5cGUgIT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgIGBDYW5ub3QgYWRkIGZlYXR1cmUgdG8gaG9zdCAke3RoaXMuaWR9LiBGZWF0dXJlQ2xhc3MgbXVzdCBiZSBhIGNsYXNzLmBcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIC8vIE1ha2Ugc3VyZSB0aGUgZmVhdHVyZSBpcyBhIGhvc3QgZmVhdHVyZVxyXG4gICAgZWxzZSBpZiAoIShGZWF0dXJlQ2xhc3MucHJvdG90eXBlIGluc3RhbmNlb2YgQWJzdHJhY3RIb3N0RmVhdHVyZSkpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgIGBDYW5ub3QgYWRkIGZlYXR1cmUgJHtGZWF0dXJlQ2xhc3MubmFtZX0gdG8gaG9zdCAke3RoaXMuaWR9LiBGZWF0dXJlQ2xhc3MgbXVzdCBleHRlbmQgQWJzdHJhY3RIb3N0RmVhdHVyZS5gXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ2hlY2sgaWYgdGhlIEZlYXR1cmVDbGFzcyBhbHJlYWR5IGV4aXN0cyBvbiB0aGlzIG9iamVjdFxyXG4gICAgaWYgKHRoaXMuX2ZlYXR1cmVzW0ZlYXR1cmVDbGFzcy5uYW1lXSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGlmIChmb3JjZSkge1xyXG4gICAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICAgIGBGZWF0dXJlICR7RmVhdHVyZUNsYXNzLm5hbWV9IGFscmVhZHkgZXhpc3RzIG9uIGhvc3QgJHt0aGlzLmlkfS4gRXhpc3RpbmcgZmVhdHVyZSB3aWxsIGJlIG92ZXJ3cml0dGVuLmBcclxuICAgICAgICApO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICAgIGBGZWF0dXJlICR7RmVhdHVyZUNsYXNzLm5hbWV9IGFscmVhZHkgZXhpc3RzIG9uIGhvc3QgJHt0aGlzLmlkfS4gVXNlICdmb3JjZScgYXJndW1lbnQgdG8gb3ZlcndyaXRlIHRoZSBmZWF0dXJlLmBcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gSW5pdGlhbGl6ZSB0aGUgZmVhdHVyZVxyXG4gICAgY29uc3QgZmVhdHVyZSA9IG5ldyBGZWF0dXJlQ2xhc3ModGhpcywgLi4uYXJncyk7XHJcbiAgICBmZWF0dXJlLmluc3RhbGxBcGkoKTtcclxuXHJcbiAgICB0aGlzLl9mZWF0dXJlc1tGZWF0dXJlQ2xhc3MubmFtZV0gPSBmZWF0dXJlO1xyXG4gICAgdGhpcy5lbWl0KHRoaXMuY29uc3RydWN0b3IuRVZFTlRTLmFkZEZlYXR1cmUsIEZlYXR1cmVDbGFzcy5uYW1lKTtcclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlbW92ZSBhIGZlYXR1cmUgZnJvbSB0aGUgb2JqZWN0LlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHR5cGVOYW1lIC0gTmFtZSBvZiB0aGUgdHlwZSBvZiBmZWF0dXJlIHRvIHJlbW92ZS5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtib29sZWFufSAtIFdoZXRoZXIgb3Igbm90IGEgZmVhdHVyZSB3YXMgc3VjY2Vzc2Z1bGx5IHJlbW92ZWQuXHJcbiAgICovXHJcbiAgcmVtb3ZlRmVhdHVyZSh0eXBlTmFtZSkge1xyXG4gICAgaWYgKHRoaXMuX2ZlYXR1cmVzW3R5cGVOYW1lXSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICBgRmVhdHVyZSBvZiB0eXBlICR7dHlwZU5hbWV9IGRvZXMgbm90IGV4aXN0IG9uIGhvc3QgJHt0aGlzLmlkfS4gTm8gZmVhdHVyZSB3aWxsIGJlIHJlbW92ZWQuYFxyXG4gICAgICApO1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBSZW1vdmUgdGhlIGZlYXR1cmVcclxuICAgICAgdGhpcy5lbWl0KHRoaXMuY29uc3RydWN0b3IuRVZFTlRTLnJlbW92ZUZlYXR1cmUsIHR5cGVOYW1lKTtcclxuICAgICAgdGhpcy5fZmVhdHVyZXNbdHlwZU5hbWVdLmRpc2NhcmQoKTtcclxuICAgICAgZGVsZXRlIHRoaXMuX2ZlYXR1cmVzW3R5cGVOYW1lXTtcclxuXHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSW5kaWNhdGUgd2hldGhlciBhIHNwZWNpZmllZCBmZWF0dXJlIGlzIGluc3RhbGxlZCBvbiB0aGUgaG9zdC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlTmFtZSAtIE5hbWUgb2YgdGhlIHR5cGUgb2YgZmVhdHVyZSB0byBsb29rIGZvci5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gICAqL1xyXG4gIGhhc0ZlYXR1cmUodHlwZU5hbWUpIHtcclxuICAgIHJldHVybiAhIXRoaXMuX2ZlYXR1cmVzW3R5cGVOYW1lXTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIExpc3QgdGhlIG5hbWVzIG9mIHRoZSBmZWF0dXJlcyBpbnN0YWxsZWQgb24gdGhlIGhvc3QuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7QXJyYXkuPHN0cmluZz59XHJcbiAgICovXHJcbiAgbGlzdEZlYXR1cmVzKCkge1xyXG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuX2ZlYXR1cmVzKTtcclxuICB9XHJcbn1cclxuXHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIb3N0T2JqZWN0LCAnRVZFTlRTJywge1xyXG4gIHZhbHVlOiB7XHJcbiAgICAuLi5PYmplY3QuZ2V0UHJvdG90eXBlT2YoSG9zdE9iamVjdCkuRVZFTlRTLFxyXG4gICAgdXBkYXRlOiAnb25VcGRhdGUnLFxyXG4gICAgYWRkRmVhdHVyZTogJ29uQWRkRmVhdHVyZScsXHJcbiAgICByZW1vdmVGZWF0dXJlOiAnb25SZW1vdmVGZWF0dXJlJyxcclxuICB9LFxyXG4gIHdyaXRhYmxlOiBmYWxzZSxcclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBIb3N0T2JqZWN0O1xyXG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cclxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVC0wXHJcbmltcG9ydCBDb3JlSG9zdE9iamVjdCBmcm9tICdjb3JlL0hvc3RPYmplY3QnO1xyXG5cclxuLyoqXHJcbiAqIEBleHRlbmRzIGNvcmUvSG9zdE9iamVjdFxyXG4gKiBAYWxpYXMgQmFieWxvbi5qcy9Ib3N0T2JqZWN0XHJcbiAqL1xyXG5jbGFzcyBIb3N0T2JqZWN0IGV4dGVuZHMgQ29yZUhvc3RPYmplY3Qge1xyXG4gIC8qKlxyXG4gICAqIEBjb25zdHJ1Y3RvclxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtPYmplY3Q9fSBvcHRpb25zIC0gT3B0aW9ucyBmb3IgdGhlIGhvc3QuXHJcbiAgICogQHBhcmFtIHtPYmplY3Q9fSBvcHRpb25zLm93bmVyIC0gT3B0aW9uYWwgZW5naW5lLXNwZWNpZmljIG93bmVyIG9mIHRoZSBob3N0LlxyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMgPSB7fSkge1xyXG4gICAgc3VwZXIob3B0aW9ucyk7XHJcblxyXG4gICAgaWYgKHRoaXMuX293bmVyKSB7XHJcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnZGVsdGFUaW1lJywge1xyXG4gICAgICAgIGdldDogKCkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuX293bmVyLmdldEVuZ2luZSgpLmdldERlbHRhVGltZSgpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IG5vdygpIHtcclxuICAgIHJldHVybiBCQUJZTE9OLlByZWNpc2lvbkRhdGUuTm93O1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgSG9zdE9iamVjdDtcclxuIiwiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTBcblxuLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1jbGFzc2VzLXBlci1maWxlICovXG5pbXBvcnQgSG9zdE9iamVjdCBmcm9tICdhcHAvSG9zdE9iamVjdCc7XG5cbi8qKlxuICogQ2xhc3MgZmFjdG9yeSBpbnRlcmZhY2UgZm9yIGZlYXR1cmVzIHRoYXQgYXJlIGRlcGVuZGVudCBvbiBvdGhlciBmZWF0dXJlcyBiZWluZ1xuICogcHJlc2VudCBvbiB0aGUgaG9zdC4gRXZlbnQgZGVwZW5kZW5jaWVzIHdpbGwgYmUgbGlzdGVuZWQgZm9yIHdoZW4gYSBmZWF0dXJlIG9mXG4gKiBtYXRjaGluZyB0eXBlIGlzIGFkZGVkIHRvIHRoZSBob3N0IGFuZCB3aWxsIHN0b3AgYmVpbmcgbGlzdGVuZWQgZm9yIHdoZW4gb25lXG4gKiBpcyByZW1vdmVkLiBJZiB0aGUgZmVhdHVyZSBpcyBhbHJlYWR5IHByZXNlbnQgd2hlbiBjb25zdHJ1Y3RlZCwgZXZlbnRzIHdpbGxcbiAqIGJlIGxpc3RlbmVkIGZvciByaWdodCBhd2F5LlxuICpcbiAqIEBpbnRlcmZhY2VcbiAqXG4gKiBAcHJvcGVydHkge09iamVjdH0gRVZFTlRfREVQRU5ERU5DSUVTIC0gRXZlbnRzIHRoYXQgdGhlIGZlYXR1cmUgc2hvdWxkIHN0YXJ0L3N0b3BcbiAqIGxpc3RlbmluZyBmb3Igd2hlbiBhIGZlYXR1cmUgb2YgdHlwZSBGZWF0dXJlTmFtZSBpcyBhZGRlZC9yZW1vdmVkIGZyb20gdGhlIGhvc3QuXG4gKiBFdmVudCBkZXBlbmRlbmNpZXMgc2hvdWxkIGZvbGxvdyB0aGUgc2lnbmF0dXJlOlxuICogIHsgRmVhdHVyZU5hbWU6IHsgZXZlbnROYW1lOiBjYWxsYmFja05hbWUsIC4uLiB9LCAuLi4gfVxuICovXG5jbGFzcyBGZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlIHtcbiAgLyoqXG4gICAqIFN0YXJ0IGxpc3RlbmluZyBmb3IgZXZlbnQgZGVwZW5kZW5jaWVzIHRoYXQgbWF0Y2ggdGhlIGdpdmVuIGZlYXR1cmUgdHlwZS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHR5cGVOYW1lIC0gdHlwZSBvZiBmZWF0dXJlIHRvIGxpc3RlbiBmb3IuXG4gICAqL1xuICBfb25GZWF0dXJlQWRkZWQodHlwZU5hbWUpIHt9XG5cbiAgLyoqXG4gICAqIFN0b3AgbGlzdGVuaW5nIGZvciBldmVudCBkZXBlbmRlbmNpZXMgdGhhdCBtYXRjaCB0aGUgZ2l2ZW4gZmVhdHVyZSB0eXBlLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdHlwZU5hbWUgLSB0eXBlIG9mIGZlYXR1cmUgdG8gc3RvcCBsaXN0ZW5pbmcgZm9yLlxuICAgKi9cbiAgX29uRmVhdHVyZVJlbW92ZWQodHlwZU5hbWUpIHt9XG5cbiAgLyoqXG4gICAqIEBhdWdtZW50cyB7QGxpbmsgQWJzdHJhY3RIb3N0RmVhdHVyZSNkaXNjYXJkfVxuICAgKi9cbiAgZGlzY2FyZCgpIHt9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBjbGFzcyB0aGF0IGltcGxlbWVudHMge0BsaW5rIEZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2V9IGFuZCBleHRlbmRzXG4gICAqIGEgc3BlY2lmaWVkIGJhc2UgY2xhc3MuXG4gICAqXG4gICAqIEBwYXJhbSB7Q2xhc3N9IEJhc2VDbGFzcyAtIFRoZSBjbGFzcyB0byBleHRlbmQuXG4gICAqXG4gICAqIEByZXR1cm4ge0NsYXNzfSBBIGNsYXNzIHRoYXQgZXh0ZW5kcyBgQmFzZUNsYXNzYCBhbmQgaW1wbGVtZW50cyB7QGxpbmsgRmVhdHVyZURlcGVuZGVudEludGVyZmFjZX0uXG4gICAqL1xuICBzdGF0aWMgTWl4aW4oQmFzZUNsYXNzKSB7XG4gICAgY29uc3QgRmVhdHVyZURlcGVuZGVudE1peGluID0gY2xhc3MgZXh0ZW5kcyBCYXNlQ2xhc3Mge1xuICAgICAgY29uc3RydWN0b3IoaG9zdCkge1xuICAgICAgICBzdXBlcihob3N0KTtcbiAgICAgICAgdGhpcy5faG9zdCA9IGhvc3Q7XG5cbiAgICAgICAgLy8gTm8gbmVlZCB0byBsaXN0ZW4gZm9yIGV2ZW50cyBpZiB0aGUgbWl4aW4gaXMgaW4gdGhlIHByb3RvdHlwZSBjaGFpbiBtdWx0aXBsZSB0aW1lc1xuICAgICAgICBpZiAoIXRoaXMuX2luaXRpYWxpemVkKSB7XG4gICAgICAgICAgdGhpcy5faW5pdGlhbGl6ZWQgPSB0cnVlO1xuXG4gICAgICAgICAgLy8gU3RhcnQgbGlzdGVuaW5nIGZvciBmZWF0dXJlIGV2ZW50c1xuICAgICAgICAgIHRoaXMuX29uRmVhdHVyZUFkZGVkID0gdGhpcy5fb25GZWF0dXJlQWRkZWQuYmluZCh0aGlzKTtcbiAgICAgICAgICB0aGlzLl9vbkZlYXR1cmVSZW1vdmVkID0gdGhpcy5fb25GZWF0dXJlUmVtb3ZlZC5iaW5kKHRoaXMpO1xuXG4gICAgICAgICAgdGhpcy5faG9zdC5saXN0ZW5UbyhcbiAgICAgICAgICAgIEhvc3RPYmplY3QuRVZFTlRTLmFkZEZlYXR1cmUsXG4gICAgICAgICAgICB0aGlzLl9vbkZlYXR1cmVBZGRlZFxuICAgICAgICAgICk7XG4gICAgICAgICAgdGhpcy5faG9zdC5saXN0ZW5UbyhcbiAgICAgICAgICAgIEhvc3RPYmplY3QuRVZFTlRTLnJlbW92ZUZlYXR1cmUsXG4gICAgICAgICAgICB0aGlzLl9vbkZlYXR1cmVSZW1vdmVkXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIC8vIFJlZ2lzdGVyIGZlYXR1cmVzIHRoYXQgYWxyZWFkeSBleGlzdFxuICAgICAgICAgIE9iamVjdC5rZXlzKHRoaXMuY29uc3RydWN0b3IuRVZFTlRfREVQRU5ERU5DSUVTKS5mb3JFYWNoKHR5cGVOYW1lID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9ob3N0W3R5cGVOYW1lXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIHRoaXMuX29uRmVhdHVyZUFkZGVkKHR5cGVOYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBfb25GZWF0dXJlQWRkZWQodHlwZU5hbWUpIHtcbiAgICAgICAgaWYgKHRoaXMuY29uc3RydWN0b3IuRVZFTlRfREVQRU5ERU5DSUVTW3R5cGVOYW1lXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgY29uc3QgZXZlbnRzID0gdGhpcy5jb25zdHJ1Y3Rvci5FVkVOVF9ERVBFTkRFTkNJRVNbdHlwZU5hbWVdO1xuXG4gICAgICAgICAgT2JqZWN0LmVudHJpZXMoZXZlbnRzKS5mb3JFYWNoKChbZXZlbnROYW1lLCBjYWxsYmFja10pID0+IHtcbiAgICAgICAgICAgIHRoaXNbY2FsbGJhY2tdID0gdGhpc1tjYWxsYmFja10uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuX2hvc3QubGlzdGVuVG8oXG4gICAgICAgICAgICAgIHRoaXMuX2hvc3RbdHlwZU5hbWVdLkVWRU5UU1tldmVudE5hbWVdLFxuICAgICAgICAgICAgICB0aGlzW2NhbGxiYWNrXVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBfb25GZWF0dXJlUmVtb3ZlZCh0eXBlTmFtZSkge1xuICAgICAgICBpZiAodGhpcy5jb25zdHJ1Y3Rvci5FVkVOVF9ERVBFTkRFTkNJRVNbdHlwZU5hbWVdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBjb25zdCBldmVudHMgPSB0aGlzLmNvbnN0cnVjdG9yLkVWRU5UX0RFUEVOREVOQ0lFU1t0eXBlTmFtZV07XG5cbiAgICAgICAgICBPYmplY3QuZW50cmllcyhldmVudHMpLmZvckVhY2goKFtldmVudE5hbWUsIGNhbGxiYWNrXSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5faG9zdC5zdG9wTGlzdGVuaW5nKFxuICAgICAgICAgICAgICB0aGlzLl9ob3N0W3R5cGVOYW1lXS5FVkVOVFNbZXZlbnROYW1lXSxcbiAgICAgICAgICAgICAgdGhpc1tjYWxsYmFja11cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZGlzY2FyZCgpIHtcbiAgICAgICAgLy8gU3RvcCBsaXN0ZW5pbmcgZm9yIGZlYXR1cmUgZXZlbnRzXG4gICAgICAgIHRoaXMuX2hvc3Quc3RvcExpc3RlbmluZyhcbiAgICAgICAgICBIb3N0T2JqZWN0LkVWRU5UUy5hZGRGZWF0dXJlLFxuICAgICAgICAgIHRoaXMuX29uRmVhdHVyZUFkZGVkXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuX2hvc3Quc3RvcExpc3RlbmluZyhcbiAgICAgICAgICBIb3N0T2JqZWN0LkVWRU5UUy5yZW1vdmVGZWF0dXJlLFxuICAgICAgICAgIHRoaXMuX29uRmVhdHVyZVJlbW92ZWRcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBTdG9wIGxpc3RlbmluZyB0byBmZWF0dXJlLXNwZWNpZmljIGV2ZW50c1xuICAgICAgICBPYmplY3Qua2V5cyh0aGlzLmNvbnN0cnVjdG9yLkVWRU5UX0RFUEVOREVOQ0lFUykuZm9yRWFjaCh0eXBlTmFtZSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuX2hvc3RbdHlwZU5hbWVdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX29uRmVhdHVyZVJlbW92ZWQodHlwZU5hbWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgc3VwZXIuZGlzY2FyZCgpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBFVkVOVF9ERVBFTkRFTkNJRVMgPSBCYXNlQ2xhc3MuRVZFTlRfREVQRU5ERU5DSUVTIHx8IHt9O1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRmVhdHVyZURlcGVuZGVudE1peGluLCB7XG4gICAgICBFVkVOVF9ERVBFTkRFTkNJRVM6IHtcbiAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAuLi5FVkVOVF9ERVBFTkRFTkNJRVMsXG4gICAgICAgIH0sXG4gICAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gRmVhdHVyZURlcGVuZGVudE1peGluO1xuICB9XG59XG5cbi8qKlxuICogRXZlbnQgZGVwZW5kZW5jaWVzIHNob3VsZCBmb2xsb3cgdGhlIHNpZ25hdHVyZTpcbiAqIHtcbiAqICBGZWF0dXJlTmFtZToge1xuICogICAgLy8gRXZlbnRzIHRoYXQgdGhlIGZlYXR1cmUgc2hvdWxkIHN0YXJ0L3N0b3AgbGlzdGVuaW5nIGZvciB3aGVuIGEgZmVhdHVyZVxuICogICAgLy8gb2YgdHlwZSBGZWF0dXJlTmFtZSBpcyBhZGRlZC9yZW1vdmVkIGZyb20gdGhlIGhvc3RcbiAqICAgIHtcbiAqICAgICAgZXZlbnROYW1lOiBjYWxsYmFja05hbWUsXG4gKiAgICAgIC4uLlxuICogICAgfSxcbiAqICB9XG4gKiB9XG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2UsIHtcbiAgRVZFTlRfREVQRU5ERU5DSUVTOiB7XG4gICAgdmFsdWU6IHt9LFxuICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgfSxcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBGZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlO1xuIiwiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTBcblxuLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1jbGFzc2VzLXBlci1maWxlICovXG5pbXBvcnQgRmVhdHVyZURlcGVuZGVudEludGVyZmFjZSBmcm9tICdjb3JlL0ZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2UnO1xuXG4vKipcbiAqIENsYXNzIGZhY3RvcnkgaW50ZXJmYWNlIGZvciBmZWF0dXJlcyB0aGF0IGFyZSBkZXBlbmRlbnQgb24gdGhlIEFuaW1hdGlvbkZlYXR1cmVcbiAqIGJlaW5nIHByZXNlbnQgb24gdGhlIGhvc3QuIExheWVyIGFuZCBhbmltYXRpb24gZXZlbnRzIHdpbGwgYXV0b21hdGljYWxseSBiZVxuICogbGlzdGVuZWQgZm9yIG9uY2UgYSBBbmltYXRpb25GZWF0dXJlIGlzIGFkZGVkIHRvIHRoZSBob3N0IGFuZCBzdG9wcGVkIG9uY2UgaXRcbiAqIGlzIHJlbW92ZWQuXG4gKlxuICogQGludGVyZmFjZVxuICogQGV4dGVuZHMgRmVhdHVyZURlcGVuZGVudEludGVyZmFjZVxuICpcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBFVkVOVF9ERVBFTkRFTkNJRVMgLSBFdmVudHMgdGhhdCB0aGUgZmVhdHVyZSBzaG91bGQgc3RhcnQvc3RvcFxuICogbGlzdGVuaW5nIGZvciB3aGVuIGEgZmVhdHVyZSBvZiB0eXBlIEZlYXR1cmVOYW1lIGlzIGFkZGVkL3JlbW92ZWQgZnJvbSB0aGUgaG9zdC5cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBFVkVOVF9ERVBFTkRFTkNJRVMuQW5pbWF0aW9uRmVhdHVyZSAtIEV2ZW50cyB0aGF0IGFyZVxuICogc3BlY2lmaWMgdG8gdGhlIEFuaW1hdGlvbkZlYXR1cmUuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW0VWRU5UX0RFUEVOREVOQ0lFUy5BbmltYXRpb25GZWF0dXJlLmFkZExheWVyPSdfb25MYXllckFkZGVkJ10gLVxuICogVGhlIG5hbWUgb2YgdGhlIG1ldGhvZCB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQgd2hlbiBBbmltYXRpb25GZWF0dXJlIGFkZExheWVyXG4gKiBldmVudHMgYXJlIGVtaXR0ZWQuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW0VWRU5UX0RFUEVOREVOQ0lFUy5BbmltYXRpb25GZWF0dXJlLnJlbW92ZUxheWVyPSdfb25MYXllclJlbW92ZWQnXSAtXG4gKiBUaGUgbmFtZSBvZiB0aGUgbWV0aG9kIHRoYXQgd2lsbCBiZSBleGVjdXRlZCB3aGVuIEFuaW1hdGlvbkZlYXR1cmUgcmVtb3ZlTGF5ZXJcbiAqIGV2ZW50cyBhcmUgZW1pdHRlZC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbRVZFTlRfREVQRU5ERU5DSUVTLkFuaW1hdGlvbkZlYXR1cmUucmVuYW1lTGF5ZXI9J19vbkxheWVyUmVuYW1lZCddIC1cbiAqIFRoZSBuYW1lIG9mIHRoZSBtZXRob2QgdGhhdCB3aWxsIGJlIGV4ZWN1dGVkIHdoZW4gQW5pbWF0aW9uRmVhdHVyZSByZW5hbWVMYXllclxuICogZXZlbnRzIGFyZSBlbWl0dGVkLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtFVkVOVF9ERVBFTkRFTkNJRVMuQW5pbWF0aW9uRmVhdHVyZS5hZGRBbmltYXRpb249J19vbkFuaW1hdGlvbkFkZGVkJ10gLVxuICogVGhlIG5hbWUgb2YgdGhlIG1ldGhvZCB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQgd2hlbiBBbmltYXRpb25GZWF0dXJlIGFkZEFuaW1hdGlvblxuICogZXZlbnRzIGFyZSBlbWl0dGVkLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtFVkVOVF9ERVBFTkRFTkNJRVMuQW5pbWF0aW9uRmVhdHVyZS5yZW1vdmVBbmltYXRpb249J19vbkFuaW1hdGlvblJlbW92ZWQnXSAtXG4gKiBUaGUgbmFtZSBvZiB0aGUgbWV0aG9kIHRoYXQgd2lsbCBiZSBleGVjdXRlZCB3aGVuIEFuaW1hdGlvbkZlYXR1cmUgcmVtb3ZlQW5pbWF0aW9uXG4gKiBldmVudHMgYXJlIGVtaXR0ZWQuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW0VWRU5UX0RFUEVOREVOQ0lFUy5BbmltYXRpb25GZWF0dXJlLnJlbmFtZUFuaW1hdGlvbj0nX29uQW5pbWF0aW9uUmVuYW1lZCddIC1cbiAqIFRoZSBuYW1lIG9mIHRoZSBtZXRob2QgdGhhdCB3aWxsIGJlIGV4ZWN1dGVkIHdoZW4gQW5pbWF0aW9uRmVhdHVyZSByZW5hbWVBbmltYXRpb25cbiAqIGV2ZW50cyBhcmUgZW1pdHRlZC5cbiAqL1xuY2xhc3MgQW5pbWF0aW9uRmVhdHVyZURlcGVuZGVudEludGVyZmFjZSBleHRlbmRzIEZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2Uge1xuICAvKipcbiAgICogRXhlY3V0ZWQgd2hlbiBhbmltYXRpb24gbGF5ZXIgYWRkZWQgZXZlbnRzIGFyZSBjYXVnaHQuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gTmFtZSBvZiB0aGUgbGF5ZXIgdGhhdCB3YXMgYWRkZWQuXG4gICAqL1xuICBfb25MYXllckFkZGVkKHtuYW1lfSkge31cblxuICAvKipcbiAgICogRXhlY3V0ZWQgd2hlbiBhbmltYXRpb24gbGF5ZXIgcmVtb3ZlZCBldmVudHMgYXJlIGNhdWdodC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBOYW1lIG9mIHRoZSBsYXllciB0aGF0IHdhcyByZW1vdmVkLlxuICAgKi9cbiAgX29uTGF5ZXJSZW1vdmVkKHtuYW1lfSkge31cblxuICAvKipcbiAgICogRXhlY3V0ZWQgd2hlbiBhbmltYXRpb24gbGF5ZXIgcmVuYW1lZCBldmVudHMgYXJlIGNhdWdodC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9sZE5hbWUgLSBOYW1lIG9mIHRoZSBsYXllciB0aGF0IHdhcyByZW5hbWVkLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmV3TmFtZSAtIE5ldyBuYW1lIG9mIHRoZSBsYXllci5cbiAgICovXG4gIF9vbkxheWVyUmVuYW1lZCh7b2xkTmFtZSwgbmV3TmFtZX0pIHt9XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGVkIHdoZW4gYW5pbWF0aW9uIGFkZGVkIGV2ZW50cyBhcmUgY2F1Z2h0LlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGF5ZXJOYW1lIC0gTmFtZSBvZiB0aGUgbGF5ZXIgdGhhdCBhbiBhbmltYXRpb24gd2FzIGFkZGVkIHRvLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYW5pbWF0aW9uTmFtZSAtIE5hbWUgb2YgdGhlIGFuaW1hdGlvbiB0aGF0IHdhcyBhZGRlZC5cbiAgICovXG4gIF9vbkFuaW1hdGlvbkFkZGVkKHtsYXllck5hbWUsIGFuaW1hdGlvbk5hbWV9KSB7fVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlZCB3aGVuIGFuaW1hdGlvbiByZW1vdmVkIGV2ZW50cyBhcmUgY2F1Z2h0LlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGF5ZXJOYW1lIC0gTmFtZSBvZiB0aGUgbGF5ZXIgdGhhdCBhbiBhbmltYXRpb24gd2FzIHJlbW92ZWQgZnJvbS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGFuaW1hdGlvbk5hbWUgLSBOYW1lIG9mIHRoZSBhbmltYXRpb24gdGhhdCB3YXMgcmVtb3ZlZC5cbiAgICovXG4gIF9vbkFuaW1hdGlvblJlbW92ZWQoe2xheWVyTmFtZSwgYW5pbWF0aW9uTmFtZX0pIHt9XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGVkIHdoZW4gYW5pbWF0aW9uIHJlbmFtZWQgZXZlbnRzIGFyZSBjYXVnaHQuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllck5hbWUgLSBOYW1lIG9mIHRoZSBsYXllciB0aGF0IGFuIGFuaW1hdGlvbiBiZWxvbmdzIHRvLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gb2xkTmFtZSAtIE5hbWUgb2YgdGhlIGFuaW1hdGlvbiB0aGF0IHdhcyByZW5hbWVkLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmV3TmFtZSAtIE5ldyBuYW1lIG9mIHRoZSBhbmltYXRpb24uXG4gICAqL1xuICBfb25BbmltYXRpb25SZW5hbWVkKHtsYXllck5hbWUsIG9sZE5hbWUsIG5ld05hbWV9KSB7fVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgY2xhc3MgdGhhdCBpbXBsZW1lbnRzIHtAbGluayBBbmltYXRpb25GZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlfVxuICAgKiBhbmQgZXh0ZW5kcyBhIHNwZWNpZmllZCBiYXNlIGNsYXNzLlxuICAgKlxuICAgKiBAcGFyYW0ge0NsYXNzfSBCYXNlQ2xhc3MgLSBUaGUgY2xhc3MgdG8gZXh0ZW5kLlxuICAgKlxuICAgKiBAcmV0dXJuIHtDbGFzc30gQSBjbGFzcyB0aGF0IGV4dGVuZHMgYEJhc2VDbGFzc2AgYW5kIGltcGxlbWVudHMge0BsaW5rIEFuaW1hdGlvbkZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2V9LlxuICAgKi9cbiAgc3RhdGljIE1peGluKEJhc2VDbGFzcykge1xuICAgIGNvbnN0IFBhcmVudENsYXNzID0gRmVhdHVyZURlcGVuZGVudEludGVyZmFjZS5NaXhpbihCYXNlQ2xhc3MpO1xuICAgIGNvbnN0IEFuaW1hdGlvbkZlYXR1cmVEZXBlbmRlbnRNaXhpbiA9IGNsYXNzIGV4dGVuZHMgUGFyZW50Q2xhc3Mge1xuICAgICAgX29uTGF5ZXJBZGRlZCh7bmFtZX0pIHt9XG5cbiAgICAgIF9vbkxheWVyUmVtb3ZlZCh7bmFtZX0pIHt9XG5cbiAgICAgIF9vbkxheWVyUmVuYW1lZCh7b2xkTmFtZSwgbmV3TmFtZX0pIHt9XG5cbiAgICAgIF9vbkFuaW1hdGlvbkFkZGVkKHtsYXllck5hbWUsIGFuaW1hdGlvbk5hbWV9KSB7fVxuXG4gICAgICBfb25BbmltYXRpb25SZW1vdmVkKHtsYXllck5hbWUsIGFuaW1hdGlvbk5hbWV9KSB7fVxuXG4gICAgICBfb25BbmltYXRpb25SZW5hbWVkKHtsYXllck5hbWUsIG9sZE5hbWUsIG5ld05hbWV9KSB7fVxuICAgIH07XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhBbmltYXRpb25GZWF0dXJlRGVwZW5kZW50TWl4aW4sIHtcbiAgICAgIEVWRU5UX0RFUEVOREVOQ0lFUzoge1xuICAgICAgICB2YWx1ZToge1xuICAgICAgICAgIC4uLlBhcmVudENsYXNzLkVWRU5UX0RFUEVOREVOQ0lFUyxcbiAgICAgICAgICAuLi5BbmltYXRpb25GZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlLkVWRU5UX0RFUEVOREVOQ0lFUyxcbiAgICAgICAgfSxcbiAgICAgICAgd3JpdGFibGU6IGZhbHNlLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBBbmltYXRpb25GZWF0dXJlRGVwZW5kZW50TWl4aW47XG4gIH1cbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQW5pbWF0aW9uRmVhdHVyZURlcGVuZGVudEludGVyZmFjZSwge1xuICBFVkVOVF9ERVBFTkRFTkNJRVM6IHtcbiAgICB2YWx1ZToge1xuICAgICAgQW5pbWF0aW9uRmVhdHVyZToge1xuICAgICAgICBhZGRMYXllcjogJ19vbkxheWVyQWRkZWQnLFxuICAgICAgICByZW1vdmVMYXllcjogJ19vbkxheWVyUmVtb3ZlZCcsXG4gICAgICAgIHJlbmFtZUxheWVyOiAnX29uTGF5ZXJSZW5hbWVkJyxcbiAgICAgICAgYWRkQW5pbWF0aW9uOiAnX29uQW5pbWF0aW9uQWRkZWQnLFxuICAgICAgICByZW1vdmVBbmltYXRpb246ICdfb25BbmltYXRpb25SZW1vdmVkJyxcbiAgICAgICAgcmVuYW1lQW5pbWF0aW9uOiAnX29uQW5pbWF0aW9uUmVuYW1lZCcsXG4gICAgICB9LFxuICAgIH0sXG4gICAgd3JpdGFibGU6IGZhbHNlLFxuICB9LFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IEFuaW1hdGlvbkZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2U7XG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWNsYXNzZXMtcGVyLWZpbGUgKi9cbmltcG9ydCBBbmltYXRpb25GZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlIGZyb20gJ2NvcmUvYW5pbXBhY2svQW5pbWF0aW9uRmVhdHVyZURlcGVuZGVudEludGVyZmFjZSc7XG5cbi8qKlxuICogQ2xhc3MgZmFjdG9yeSBpbnRlcmZhY2UgZm9yIHRoYXQga2VlcHMgdHJhY2sgb2YgbGF5ZXJzIGFuZCBhbmltYXRpb25zIG9uIGEgaG9zdC5cbiAqIFRyYWNrZWQgYXNzZXRzIGFyZSBtYXJrZWQgYXMgaW5hY3RpdmUgdW50aWwgbGF5ZXJzIGFuZCBhbmltYXRpb25zIHdpdGggbWF0Y2hpbmdcbiAqIG5hbWVzIGFyZSBkZXRlY3RlZCBhcyBwcmVzZW50IG9uIHRoZSBob3N0LlxuICpcbiAqIEBpbnRlcmZhY2VcbiAqIEBleHRlbmRzIEFuaW1hdGlvbkZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2VcbiAqXG4gKiBAcHJvcGVydHkge09iamVjdH0gREVGQVVMVF9MQVlFUl9PUFRJT05TIC0gRGVmYXVsdCBvcHRpb25zIHRvIHVzZSB3aGVuIGV4ZWN1dGluZ1xuICoge0BsaW5rIEFuaW1hdGlvbkxheWVyfSBtZXRob2RzLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtERUZBVUxUX0xBWUVSX09QVElPTlMuYmxlbmRUaW1lPTAuNV0gLSBEZWZhdWx0IHRpbWUgaW4gc2Vjb25kc1xuICogdG8gdXNlIHdoZW4gZXhlY3V0aW5nIHtAbGluayBBbmltYXRpb25MYXllci5zZXRCbGVuZFdlaWdodH0uXG4gKiBAcHJvcGVydHkge09iamVjdH0gW0RFRkFVTFRfTEFZRVJfT1BUSU9OUy5hbmltYXRpb25zPXt9XSAtIE1hcHMgYW5pbWF0aW9uIG5hbWVzXG4gKiB0byBkZWZhdWx0IG9wdGlvbnMgb2JqZWN0cyB0byB1c2UgZm9yIG1hbmFnZWQgYW5pbWF0aW9ucy5cbiAqL1xuY2xhc3MgTWFuYWdlZEFuaW1hdGlvbkxheWVySW50ZXJmYWNlIGV4dGVuZHMgQW5pbWF0aW9uRmVhdHVyZURlcGVuZGVudEludGVyZmFjZSB7XG4gIC8qKlxuICAgKiBTdGFydCB0cmFja2luZyBrZWVwaW5nIHRyYWNrIG9mIHdoZXRoZXIgYSBsYXllciB3aXRoIHRoZSBnaXZlbiBuYW1lIGlzIHByZXNlbnRcbiAgICogb24gdGhlIGhvc3QuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gTmFtZSBvZiB0aGUgbGF5ZXIgdG8ga2VlcCB0cmFjayBvZi5cbiAgICogQHBhcmFtIHtPYmplY3Q9fSBvcHRpb25zIC0gT3B0aW9ucyBmb3IgdGhlIGxheWVyLlxuICAgKiBAcGFyYW0ge251bWJlcj19IG9wdGlvbnMuYmxlbmRUaW1lIC0gRGVmYXVsdCBhbW91bnQgb2YgdGltZSB0byB1c2Ugd2hlblxuICAgKiBtYW5pcHVsYXRpbmcgbGF5ZXIgd2VpZ2h0cyBvbiB0aGlzIGxheWVyLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb3B0aW9ucy5lYXNpbmdGbiAtIERlZmF1bHQgZWFzaW5nIGZ1bmN0aW9uIHRvIHVzZSB3aGVuXG4gICAqIG1hbmlwdWxhdGluZyBsYXllciB3ZWlnaHRzIG9uIHRoaXMgbGF5ZXIuXG4gICAqIEBwYXJhbSB7T2JqZWN0PX0gb3B0aW9ucy5hbmltYXRpb25zIC0gQW5pbWF0aW9ucyB0byBrZWVwIHRyYWNrIG9mIG9uIHRoZSBsYXllci5cbiAgICogQW5pbWF0aW9ucyBhcmUgcmVwcmVzZW50ZWQgYXMga2V5L3ZhbHVlIHBhaXJzIG9mIGFuaW1hdGlvbiBuYW1lcyBhbmQgdGhlaXJcbiAgICogb3B0aW9ucy5cbiAgICovXG4gIHJlZ2lzdGVyTGF5ZXIobmFtZSwgb3B0aW9ucyA9IHt9KSB7fVxuXG4gIC8qKlxuICAgKiBTdGFydCB0cmFja2luZyBrZWVwaW5nIHRyYWNrIG9mIHdoZXRoZXIgYW4gYW5pbWF0aW9uIHdpdGggdGhlIGdpdmVuIG5hbWUgaXNcbiAgICogcHJlc2VudCBvbiB0aGUgaG9zdC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVyTmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRoYXQgd2lsbCBvd24gdGhlIGFuaW1hdGlvbi5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGFuaW1hdGlvbk5hbWUgLSBOYW1lIG9mIHRoZSBhbmltYXRpb24gdG8ga2VlcCB0cmFjayBvZi5cbiAgICogQHBhcmFtIHtPYmplY3Q9fSBvcHRpb25zIC0gT3B0aW9ucyBmb3IgdGhlIGFuaW1hdGlvbi5cbiAgICovXG4gIHJlZ2lzdGVyQW5pbWF0aW9uKGxheWVyTmFtZSwgYW5pbWF0aW9uTmFtZSwgb3B0aW9ucyA9IHt9KSB7fVxuXG4gIC8qKlxuICAgKiBTZXQgbGF5ZXIgd2VpZ2h0cyBvbiB0cmFja2VkIGxheWVycy5cbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG5hbWVGaWx0ZXIgLSBQcmVkaWNhdGUgZnVuY3Rpb24gdG8gdGVzdCBlYWNoIHRyYWNrZWQgbGF5ZXJcbiAgICogd2l0aC4gQnkgZGVmYXVsdCBhbGwgbGF5ZXJzIHdpbGwgcGFzcy5cbiAgICogQHBhcmFtIHtudW1iZXJ9IHdlaWdodCAtIFdlaWdodCB2YWx1ZSB0byBzZXQgb24gbGF5ZXJzLlxuICAgKiBAcGFyYW0ge251bWJlcj19IHNlY29uZHMgLSBOdW1iZXIgb2Ygc2Vjb25kcyBpdCB3aWxsIHRha2UgdG8gcmVhY2ggdGhlIHdlaWdodFxuICAgKiBvbiBlYWNoIGxheWVyLiBJZiB1bmRlZmluZWQsIGVhY2ggbGF5ZXJzJyBibGVuZFRpbWUgb3B0aW9uIGlzIHVzZWQuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBlYXNpbmdGbiAtIEVhc2luZyBmdW5jdGlvbiB0byB1c2Ugd2hlbiBzZXR0aW5nIHdlaWdodFxuICAgKiBvbiBlYWNoIGxheWVyLiBJZiB1bmRlZmluZWQsIGVhY2ggbGF5ZXJzJyBlYXNpbmdGbiBvcHRpb24gaXMgdXNlZC5cbiAgICovXG4gIHNldExheWVyV2VpZ2h0cyhuYW1lRmlsdGVyID0gKCkgPT4gdHJ1ZSwgd2VpZ2h0LCBzZWNvbmRzLCBlYXNpbmdGbikge31cblxuICAvKipcbiAgICogU2V0IGFsbCB0cmFja2VkIGxheWVycycgd2VpZ2h0cyB0byAxLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcj19IHNlY29uZHMgLSBOdW1iZXIgb2Ygc2Vjb25kcyBpdCB3aWxsIHRha2UgdG8gcmVhY2ggdGhlIHdlaWdodFxuICAgKiBvbiBlYWNoIGxheWVyLiBJZiB1bmRlZmluZWQsIGVhY2ggbGF5ZXJzJyBibGVuZFRpbWUgb3B0aW9uIGlzIHVzZWQuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBlYXNpbmdGbiAtIEVhc2luZyBmdW5jdGlvbiB0byB1c2Ugd2hlbiBzZXR0aW5nIHdlaWdodFxuICAgKiBvbiBlYWNoIGxheWVyLiBJZiB1bmRlZmluZWQsIGVhY2ggbGF5ZXJzJyBlYXNpbmdGbiBvcHRpb24gaXMgdXNlZC5cbiAgICovXG4gIGVuYWJsZShzZWNvbmRzLCBlYXNpbmdGbikge31cblxuICAvKipcbiAgICogU2V0IGFsbCB0cmFja2VkIGxheWVycycgd2VpZ2h0cyB0byAwLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcj19IHNlY29uZHMgLSBOdW1iZXIgb2Ygc2Vjb25kcyBpdCB3aWxsIHRha2UgdG8gcmVhY2ggdGhlIHdlaWdodFxuICAgKiBvbiBlYWNoIGxheWVyLiBJZiB1bmRlZmluZWQsIGVhY2ggbGF5ZXJzJyBibGVuZFRpbWUgb3B0aW9uIGlzIHVzZWQuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBlYXNpbmdGbiAtIEVhc2luZyBmdW5jdGlvbiB0byB1c2Ugd2hlbiBzZXR0aW5nIHdlaWdodFxuICAgKiBvbiBlYWNoIGxheWVyLiBJZiB1bmRlZmluZWQsIGVhY2ggbGF5ZXJzJyBlYXNpbmdGbiBvcHRpb24gaXMgdXNlZC5cbiAgICovXG4gIGRpc2FibGUoc2Vjb25kcywgZWFzaW5nRm4pIHt9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBjbGFzcyB0aGF0IGltcGxlbWVudHMge0BsaW5rIE1hbmFnZWRBbmltYXRpb25MYXllckludGVyZmFjZX1cbiAgICogYW5kIGV4dGVuZHMgYSBzcGVjaWZpZWQgYmFzZSBjbGFzcy5cbiAgICpcbiAgICogQHBhcmFtIHtDbGFzc30gQmFzZUNsYXNzIC0gVGhlIGNsYXNzIHRvIGV4dGVuZC5cbiAgICpcbiAgICogQHJldHVybiB7Q2xhc3N9IEEgY2xhc3MgdGhhdCBleHRlbmRzIGBCYXNlQ2xhc3NgIGFuZCBpbXBsZW1lbnRzIHtAbGluayBNYW5hZ2VkQW5pbWF0aW9uTGF5ZXJJbnRlcmZhY2V9LlxuICAgKi9cbiAgc3RhdGljIE1peGluKEJhc2VDbGFzcykge1xuICAgIGNvbnN0IFBhcmVudENsYXNzID0gQW5pbWF0aW9uRmVhdHVyZURlcGVuZGVudEludGVyZmFjZS5NaXhpbihCYXNlQ2xhc3MpO1xuICAgIGNvbnN0IE1hbmFnZWRBbmltYXRpb25MYXllck1peGluID0gY2xhc3MgZXh0ZW5kcyBQYXJlbnRDbGFzcyB7XG4gICAgICBjb25zdHJ1Y3RvciguLi5hcmdzKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3MpO1xuXG4gICAgICAgIHRoaXMuX21hbmFnZWRMYXllcnMgPSB7fTtcbiAgICAgIH1cblxuICAgICAgX29uRmVhdHVyZUFkZGVkKHR5cGVOYW1lKSB7XG4gICAgICAgIHN1cGVyLl9vbkZlYXR1cmVBZGRlZCh0eXBlTmFtZSk7XG5cbiAgICAgICAgaWYgKHR5cGVOYW1lICE9PSAnQW5pbWF0aW9uRmVhdHVyZScpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9tYW5hZ2VkTGF5ZXJzID0gdGhpcy5fbWFuYWdlZExheWVycyB8fCB7fTtcblxuICAgICAgICAvLyBEZXRlY3QgbmV3IGxheWVyc1xuICAgICAgICB0aGlzLl9ob3N0LkFuaW1hdGlvbkZlYXR1cmUubGF5ZXJzLmZvckVhY2gobmFtZSA9PiB7XG4gICAgICAgICAgdGhpcy5fb25MYXllckFkZGVkKHtuYW1lfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBfb25GZWF0dXJlUmVtb3ZlZCh0eXBlTmFtZSkge1xuICAgICAgICBzdXBlci5fb25GZWF0dXJlUmVtb3ZlZCh0eXBlTmFtZSk7XG5cbiAgICAgICAgaWYgKHR5cGVOYW1lICE9PSAnQW5pbWF0aW9uRmVhdHVyZScpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9tYW5hZ2VkTGF5ZXJzID0gdGhpcy5fbWFuYWdlZExheWVycyB8fCB7fTtcblxuICAgICAgICAvLyBEZWFjdGl2YXRlIHRoZSBsYXllcnNcbiAgICAgICAgT2JqZWN0LmtleXModGhpcy5fbWFuYWdlZExheWVycykuZm9yRWFjaChuYW1lID0+IHtcbiAgICAgICAgICB0aGlzLl9vbkxheWVyUmVtb3ZlZCh7bmFtZX0pO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgX29uTGF5ZXJBZGRlZCh7bmFtZX0pIHtcbiAgICAgICAgLy8gTWFyayB0aGUgbGF5ZXIgYXMgYWN0aXZlIGlmIGl0IGlzIG1hbmFnZWRcbiAgICAgICAgaWYgKHRoaXMuX21hbmFnZWRMYXllcnNbbmFtZV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRoaXMuX21hbmFnZWRMYXllcnNbbmFtZV0uaXNBY3RpdmUgPSB0cnVlO1xuXG4gICAgICAgICAgLy8gRGV0ZWN0IG5ldyBhbmltYXRpb25zXG4gICAgICAgICAgdGhpcy5faG9zdC5BbmltYXRpb25GZWF0dXJlLmdldEFuaW1hdGlvbnMobmFtZSkuZm9yRWFjaChhbmltTmFtZSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9vbkFuaW1hdGlvbkFkZGVkKHtsYXllck5hbWU6IG5hbWUsIGFuaW1hdGlvbk5hbWU6IGFuaW1OYW1lfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgX29uTGF5ZXJSZW1vdmVkKHtuYW1lfSkge1xuICAgICAgICAvLyBEZWFjdGl2YXRlIHRoZSBsYXllciBpZiBpdCBpcyBtYW5hZ2VkXG4gICAgICAgIGlmICh0aGlzLl9tYW5hZ2VkTGF5ZXJzW25hbWVdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLl9tYW5hZ2VkTGF5ZXJzW25hbWVdLmlzQWN0aXZlID0gZmFsc2U7XG5cbiAgICAgICAgICAvLyBEZWFjdGl2YXRlIHRoZSBhbmltYXRpb25zXG4gICAgICAgICAgT2JqZWN0LmtleXModGhpcy5fbWFuYWdlZExheWVyc1tuYW1lXS5hbmltYXRpb25zKS5mb3JFYWNoKFxuICAgICAgICAgICAgYW5pbU5hbWUgPT4ge1xuICAgICAgICAgICAgICB0aGlzLl9vbkFuaW1hdGlvblJlbW92ZWQoe1xuICAgICAgICAgICAgICAgIGxheWVyTmFtZTogbmFtZSxcbiAgICAgICAgICAgICAgICBhbmltYXRpb25OYW1lOiBhbmltTmFtZSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBfb25MYXllclJlbmFtZWQoe29sZE5hbWUsIG5ld05hbWV9KSB7XG4gICAgICAgIGNvbnN0IGxheWVyT3B0aW9ucyA9IHRoaXMuX21hbmFnZWRMYXllcnNbb2xkTmFtZV07XG5cbiAgICAgICAgLy8gUmVwbGFjZSB0aGUgbGF5ZXIga2V5IHdpdGggdGhlIG5ldyBuYW1lXG4gICAgICAgIGlmIChsYXllck9wdGlvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGRlbGV0ZSB0aGlzLl9tYW5hZ2VkTGF5ZXJzW29sZE5hbWVdO1xuICAgICAgICAgIHRoaXMuX21hbmFnZWRMYXllcnNbbmV3TmFtZV0gPSBsYXllck9wdGlvbnM7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgX29uQW5pbWF0aW9uQWRkZWQoe2xheWVyTmFtZSwgYW5pbWF0aW9uTmFtZX0pIHtcbiAgICAgICAgLy8gTWFyayB0aGUgYW5pbWF0aW9uIGFzIGFjdGl2ZSBpZiBpdCBpcyBtYW5hZ2VkXG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aGlzLl9tYW5hZ2VkTGF5ZXJzW2xheWVyTmFtZV0gIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgIHRoaXMuX21hbmFnZWRMYXllcnNbbGF5ZXJOYW1lXS5hbmltYXRpb25zW2FuaW1hdGlvbk5hbWVdICE9PSB1bmRlZmluZWRcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5fbWFuYWdlZExheWVyc1tsYXllck5hbWVdLmFuaW1hdGlvbnNbXG4gICAgICAgICAgICBhbmltYXRpb25OYW1lXG4gICAgICAgICAgXS5pc0FjdGl2ZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgX29uQW5pbWF0aW9uUmVtb3ZlZCh7bGF5ZXJOYW1lLCBhbmltYXRpb25OYW1lfSkge1xuICAgICAgICAvLyBEZWFjdGl2YXRlIHRoZSBhbmltYXRpb24gaWYgaXQgaXMgbWFuYWdlZFxuICAgICAgICBpZiAoXG4gICAgICAgICAgdGhpcy5fbWFuYWdlZExheWVyc1tsYXllck5hbWVdICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICB0aGlzLl9tYW5hZ2VkTGF5ZXJzW2xheWVyTmFtZV0uYW5pbWF0aW9uc1thbmltYXRpb25OYW1lXSAhPT0gdW5kZWZpbmVkXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMuX21hbmFnZWRMYXllcnNbbGF5ZXJOYW1lXS5hbmltYXRpb25zW1xuICAgICAgICAgICAgYW5pbWF0aW9uTmFtZVxuICAgICAgICAgIF0uaXNBY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBfb25BbmltYXRpb25SZW5hbWVkKHtsYXllck5hbWUsIG9sZE5hbWUsIG5ld05hbWV9KSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aGlzLl9tYW5hZ2VkTGF5ZXJzW2xheWVyTmFtZV0gIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgIHRoaXMuX21hbmFnZWRMYXllcnNbbGF5ZXJOYW1lXS5hbmltYXRpb25zW29sZE5hbWVdICE9PSB1bmRlZmluZWRcbiAgICAgICAgKSB7XG4gICAgICAgICAgLy8gUmVwbGFjZSB0aGUgYW5pbWF0aW9uIGtleSB3aXRoIHRoZSBuZXcgbmFtZVxuICAgICAgICAgIGNvbnN0IGFuaW1PcHRpb25zID0gdGhpcy5fbWFuYWdlZExheWVyc1tsYXllck5hbWVdLmFuaW1hdGlvbnNbXG4gICAgICAgICAgICBvbGROYW1lXG4gICAgICAgICAgXTtcbiAgICAgICAgICBkZWxldGUgdGhpcy5fbWFuYWdlZExheWVyc1tsYXllck5hbWVdLmFuaW1hdGlvbnNbb2xkTmFtZV07XG4gICAgICAgICAgdGhpcy5fbWFuYWdlZExheWVyc1tsYXllck5hbWVdLmFuaW1hdGlvbnNbbmV3TmFtZV0gPSBhbmltT3B0aW9ucztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZWdpc3RlckxheWVyKG5hbWUsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICAvLyBTdGFydCB3aXRoIGRlZmF1bHQgb3B0aW9ucyBmb3IgZWFjaCBuZXcgbGF5ZXJcbiAgICAgICAgaWYgKHRoaXMuX21hbmFnZWRMYXllcnNbbmFtZV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRoaXMuX21hbmFnZWRMYXllcnNbbmFtZV0gPSB7XG4gICAgICAgICAgICAuLi50aGlzLmNvbnN0cnVjdG9yLkRFRkFVTFRfTEFZRVJfT1BUSU9OUyxcbiAgICAgICAgICAgIGFuaW1hdGlvbnM6IHt9LFxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBVcGRhdGUgYWxsIG9wdGlvbnMgZXhjZXB0IGFuaW1hdGlvbnNcbiAgICAgICAgY29uc3QgbGF5ZXJPcHRpb25zID0gdGhpcy5fbWFuYWdlZExheWVyc1tuYW1lXTtcbiAgICAgICAgb3B0aW9ucyA9IHsuLi5vcHRpb25zfTtcbiAgICAgICAgY29uc3QgYW5pbWF0aW9uT3B0aW9ucyA9IG9wdGlvbnMuYW5pbWF0aW9ucyB8fCB7fTtcbiAgICAgICAgZGVsZXRlIG9wdGlvbnMuYW5pbWF0aW9ucztcbiAgICAgICAgT2JqZWN0LmFzc2lnbihsYXllck9wdGlvbnMsIG9wdGlvbnMpO1xuXG4gICAgICAgIC8vIENoZWNrIHdoZXRoZXIgdGhlIGxheWVyIGNhbiBiZSBtYW5pcHVsYXRlZCBub3dcbiAgICAgICAgbGF5ZXJPcHRpb25zLmlzQWN0aXZlID1cbiAgICAgICAgICB0aGlzLl9ob3N0LkFuaW1hdGlvbkZlYXR1cmUgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgIHRoaXMuX2hvc3QuQW5pbWF0aW9uRmVhdHVyZS5sYXllcnMuaW5jbHVkZXMobmFtZSk7XG5cbiAgICAgICAgLy8gUmVnaXN0ZXIgdGhlIGFuaW1hdGlvbnNcbiAgICAgICAgT2JqZWN0LmVudHJpZXMoYW5pbWF0aW9uT3B0aW9ucykuZm9yRWFjaCgoW2FuaW1OYW1lLCBhbmltT3B0aW9uc10pID0+IHtcbiAgICAgICAgICB0aGlzLnJlZ2lzdGVyQW5pbWF0aW9uKG5hbWUsIGFuaW1OYW1lLCBhbmltT3B0aW9ucyk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICByZWdpc3RlckFuaW1hdGlvbihsYXllck5hbWUsIGFuaW1hdGlvbk5hbWUsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICAvLyBSZWdpc3RlciB0aGUgbGF5ZXIgaWYgaXQgaGFzbid0IGJlZW4gcmVnaXN0ZXJlZCB5ZXRcbiAgICAgICAgaWYgKHRoaXMuX21hbmFnZWRMYXllcnNbbGF5ZXJOYW1lXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhpcy5yZWdpc3RlckxheWVyKGxheWVyTmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBVcGRhdGUgYW5pbWF0aW9uIG9wdGlvbnNcbiAgICAgICAgY29uc3QgYW5pbU9wdGlvbnMgPVxuICAgICAgICAgIHRoaXMuX21hbmFnZWRMYXllcnNbbGF5ZXJOYW1lXS5hbmltYXRpb25zW2FuaW1hdGlvbk5hbWVdIHx8IHt9O1xuICAgICAgICBPYmplY3QuYXNzaWduKGFuaW1PcHRpb25zLCBvcHRpb25zKTtcbiAgICAgICAgdGhpcy5fbWFuYWdlZExheWVyc1tsYXllck5hbWVdLmFuaW1hdGlvbnNbYW5pbWF0aW9uTmFtZV0gPSBhbmltT3B0aW9ucztcblxuICAgICAgICAvLyBDaGVjayB3aGV0aGVyIHRoZSBhbmltYXRpb24gY2FuIGJlIG1hbmlwdWxhdGVkIG5vd1xuICAgICAgICB0aGlzLl9tYW5hZ2VkTGF5ZXJzW2xheWVyTmFtZV0uYW5pbWF0aW9uc1thbmltYXRpb25OYW1lXS5pc0FjdGl2ZSA9XG4gICAgICAgICAgdGhpcy5fbWFuYWdlZExheWVyc1tsYXllck5hbWVdLmlzQWN0aXZlICYmXG4gICAgICAgICAgdGhpcy5faG9zdC5BbmltYXRpb25GZWF0dXJlLmdldEFuaW1hdGlvbnMobGF5ZXJOYW1lKS5pbmNsdWRlcyhcbiAgICAgICAgICAgIGFuaW1hdGlvbk5hbWVcbiAgICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBzZXRMYXllcldlaWdodHMobmFtZUZpbHRlciA9ICgpID0+IHRydWUsIHdlaWdodCwgc2Vjb25kcywgZWFzaW5nRm4pIHtcbiAgICAgICAgY29uc3QgbGF5ZXJOYW1lcyA9IE9iamVjdC5rZXlzKHRoaXMuX21hbmFnZWRMYXllcnMpLmZpbHRlcihuYW1lRmlsdGVyKTtcblxuICAgICAgICBsYXllck5hbWVzLmZvckVhY2gobmFtZSA9PiB7XG4gICAgICAgICAgY29uc3QgbGF5ZXJPcHRpb25zID0gdGhpcy5fbWFuYWdlZExheWVyc1tuYW1lXTtcblxuICAgICAgICAgIGlmIChsYXllck9wdGlvbnMuaXNBY3RpdmUpIHtcbiAgICAgICAgICAgIHRoaXMuX2hvc3QuQW5pbWF0aW9uRmVhdHVyZS5zZXRMYXllcldlaWdodChcbiAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgd2VpZ2h0LFxuICAgICAgICAgICAgICBzZWNvbmRzICE9PSB1bmRlZmluZWQgPyBzZWNvbmRzIDogbGF5ZXJPcHRpb25zLmJsZW5kVGltZSxcbiAgICAgICAgICAgICAgZWFzaW5nRm4gfHwgbGF5ZXJPcHRpb25zLmVhc2luZ0ZuXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGVuYWJsZShzZWNvbmRzLCBlYXNpbmdGbikge1xuICAgICAgICB0aGlzLnNldExheWVyV2VpZ2h0cyh1bmRlZmluZWQsIDEsIHNlY29uZHMsIGVhc2luZ0ZuKTtcbiAgICAgIH1cblxuICAgICAgZGlzYWJsZShzZWNvbmRzLCBlYXNpbmdGbikge1xuICAgICAgICB0aGlzLnNldExheWVyV2VpZ2h0cyh1bmRlZmluZWQsIDAsIHNlY29uZHMsIGVhc2luZ0ZuKTtcbiAgICAgIH1cblxuICAgICAgaW5zdGFsbEFwaSgpIHtcbiAgICAgICAgY29uc3QgYXBpID0gc3VwZXIuaW5zdGFsbEFwaSgpO1xuXG4gICAgICAgIE9iamVjdC5hc3NpZ24oYXBpLCB7XG4gICAgICAgICAgcmVnaXN0ZXJMYXllcjogdGhpcy5yZWdpc3RlckxheWVyLmJpbmQodGhpcyksXG4gICAgICAgICAgcmVnaXN0ZXJBbmltYXRpb246IHRoaXMucmVnaXN0ZXJBbmltYXRpb24uYmluZCh0aGlzKSxcbiAgICAgICAgICBzZXRMYXllcldlaWdodHM6IHRoaXMuc2V0TGF5ZXJXZWlnaHRzLmJpbmQodGhpcyksXG4gICAgICAgICAgZW5hYmxlOiB0aGlzLmVuYWJsZS5iaW5kKHRoaXMpLFxuICAgICAgICAgIGRpc2FibGU6IHRoaXMuZGlzYWJsZS5iaW5kKHRoaXMpLFxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gYXBpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhNYW5hZ2VkQW5pbWF0aW9uTGF5ZXJNaXhpbiwge1xuICAgICAgREVGQVVMVF9MQVlFUl9PUFRJT05TOiB7XG4gICAgICAgIHZhbHVlOiBNYW5hZ2VkQW5pbWF0aW9uTGF5ZXJJbnRlcmZhY2UuREVGQVVMVF9MQVlFUl9PUFRJT05TLFxuICAgICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIE1hbmFnZWRBbmltYXRpb25MYXllck1peGluO1xuICB9XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE1hbmFnZWRBbmltYXRpb25MYXllckludGVyZmFjZSwge1xuICBERUZBVUxUX0xBWUVSX09QVElPTlM6IHtcbiAgICB2YWx1ZToge2JsZW5kVGltZTogMC41LCBhbmltYXRpb25zOiB7fX0sXG4gICAgd3JpdGFibGU6IGZhbHNlLFxuICB9LFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IE1hbmFnZWRBbmltYXRpb25MYXllckludGVyZmFjZTtcbiIsIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVC0wXG5cbi8qIGVzbGludC1kaXNhYmxlIG1heC1jbGFzc2VzLXBlci1maWxlICovXG5pbXBvcnQgRmVhdHVyZURlcGVuZGVudEludGVyZmFjZSBmcm9tICdjb3JlL0ZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2UnO1xuXG4vKipcbiAqIENsYXNzIGZhY3RvcnkgaW50ZXJmYWNlIGZvciBmZWF0dXJlcyB0aGF0IGFyZSBkZXBlbmRlbnQgb24gdGhlIFRleHRUb1NwZWVjaEZlYXR1cmVcbiAqIGJlaW5nIHByZXNlbnQgb24gdGhlIGhvc3QuIFNwZWVjaCBldmVudHMgd2lsbCBhdXRvbWF0aWNhbGx5IGJlIGxpc3RlbmVkIGZvciBvbmNlIGFcbiAqIFRleHRUb1NwZWVjaEZlYXR1cmUgaXMgYWRkZWQgdG8gdGhlIGhvc3QgYW5kIHN0b3BwZWQgb25jZSBpdCBpcyByZW1vdmVkLlxuICpcbiAqIEBpbnRlcmZhY2VcbiAqIEBleHRlbmRzIEZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2VcbiAqXG4gKiBAcHJvcGVydHkge09iamVjdH0gRVZFTlRfREVQRU5ERU5DSUVTIC0gRXZlbnRzIHRoYXQgdGhlIGZlYXR1cmUgc2hvdWxkIHN0YXJ0L3N0b3BcbiAqIGxpc3RlbmluZyBmb3Igd2hlbiBhIGZlYXR1cmUgb2YgdHlwZSBGZWF0dXJlTmFtZSBpcyBhZGRlZC9yZW1vdmVkIGZyb20gdGhlIGhvc3QuXG4gKiBAcHJvcGVydHkge09iamVjdH0gRVZFTlRfREVQRU5ERU5DSUVTLlRleHRUb1NwZWVjaEZlYXR1cmUgLSBFdmVudHMgdGhhdCBhcmVcbiAqIHNwZWNpZmljIHRvIHRoZSBUZXh0VG9TcGVlY2hGZWF0dXJlLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtFVkVOVF9ERVBFTkRFTkNJRVMuVGV4dFRvU3BlZWNoRmVhdHVyZS5wbGF5PSdfb25QbGF5J10gLVxuICogVGhlIG5hbWUgb2YgdGhlIG1ldGhvZCB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQgd2hlbiBUZXh0VG9TcGVlY2hGZWF0dXJlIHBsYXlcbiAqIGV2ZW50cyBhcmUgZW1pdHRlZC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbRVZFTlRfREVQRU5ERU5DSUVTLlRleHRUb1NwZWVjaEZlYXR1cmUucGF1c2U9J19vblBhdXNlJ10gLVxuICogVGhlIG5hbWUgb2YgdGhlIG1ldGhvZCB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQgd2hlbiBUZXh0VG9TcGVlY2hGZWF0dXJlIHBhdXNlXG4gKiBldmVudHMgYXJlIGVtaXR0ZWQuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW0VWRU5UX0RFUEVOREVOQ0lFUy5UZXh0VG9TcGVlY2hGZWF0dXJlLnJlc3VtZT0nX29uUmVzdW1lJ10gLVxuICogVGhlIG5hbWUgb2YgdGhlIG1ldGhvZCB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQgd2hlbiBUZXh0VG9TcGVlY2hGZWF0dXJlIHJlc3VtZVxuICogZXZlbnRzIGFyZSBlbWl0dGVkLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtFVkVOVF9ERVBFTkRFTkNJRVMuVGV4dFRvU3BlZWNoRmVhdHVyZS5zdG9wPSdfb25TdG9wJ10gLVxuICogVGhlIG5hbWUgb2YgdGhlIG1ldGhvZCB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQgd2hlbiBUZXh0VG9TcGVlY2hGZWF0dXJlIHN0b3BcbiAqIGV2ZW50cyBhcmUgZW1pdHRlZC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbRVZFTlRfREVQRU5ERU5DSUVTLlRleHRUb1NwZWVjaEZlYXR1cmUuc2VudGVuY2U9J19vblNlbnRlbmNlJ10gLVxuICogVGhlIG5hbWUgb2YgdGhlIG1ldGhvZCB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQgd2hlbiBUZXh0VG9TcGVlY2hGZWF0dXJlIHNlbnRlbmNlXG4gKiBldmVudHMgYXJlIGVtaXR0ZWQuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW0VWRU5UX0RFUEVOREVOQ0lFUy5UZXh0VG9TcGVlY2hGZWF0dXJlLndvcmQ9J19vbldvcmQnXSAtXG4gKiBUaGUgbmFtZSBvZiB0aGUgbWV0aG9kIHRoYXQgd2lsbCBiZSBleGVjdXRlZCB3aGVuIFRleHRUb1NwZWVjaEZlYXR1cmUgd29yZFxuICogZXZlbnRzIGFyZSBlbWl0dGVkLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtFVkVOVF9ERVBFTkRFTkNJRVMuVGV4dFRvU3BlZWNoRmVhdHVyZS52aXNlbWU9J19vblZpc2VtZSddIC1cbiAqIFRoZSBuYW1lIG9mIHRoZSBtZXRob2QgdGhhdCB3aWxsIGJlIGV4ZWN1dGVkIHdoZW4gVGV4dFRvU3BlZWNoRmVhdHVyZSB2aXNlbWVcbiAqIGV2ZW50cyBhcmUgZW1pdHRlZC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbRVZFTlRfREVQRU5ERU5DSUVTLlRleHRUb1NwZWVjaEZlYXR1cmUuc3NtbD0nX29uU3NtbCddIC1cbiAqIFRoZSBuYW1lIG9mIHRoZSBtZXRob2QgdGhhdCB3aWxsIGJlIGV4ZWN1dGVkIHdoZW4gVGV4dFRvU3BlZWNoRmVhdHVyZSBzc21sXG4gKiBldmVudHMgYXJlIGVtaXR0ZWQuXG4gKi9cbmNsYXNzIFRleHRUb1NwZWVjaEZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2UgZXh0ZW5kcyBGZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlIHtcbiAgLyoqXG4gICAqIEV4ZWN1dGVkIHdoZW4gc3BlZWNoIHBsYXkgZXZlbnRzIGFyZSBjYXVnaHQuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfb25QbGF5KCkge31cblxuICAvKipcbiAgICogRXhlY3V0ZWQgd2hlbiBzcGVlY2ggcGF1c2UgZXZlbnRzIGFyZSBjYXVnaHQuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfb25QYXVzZSgpIHt9XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGVkIHdoZW4gc3BlZWNoIHJlc3VtZSBldmVudHMgYXJlIGNhdWdodC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9vblJlc3VtZSgpIHt9XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGVkIHdoZW4gc3BlZWNoIHN0b3AgZXZlbnRzIGFyZSBjYXVnaHQuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfb25TdG9wKCkge31cblxuICAvKipcbiAgICogRXhlY3V0ZWQgd2hlbiBzcGVlY2ggc2VudGVuY2UgZXZlbnRzIGFyZSBjYXVnaHQuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfb25TZW50ZW5jZSgpIHt9XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGVkIHdoZW4gc3BlZWNoIHdvcmQgZXZlbnRzIGFyZSBjYXVnaHQuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfb25Xb3JkKCkge31cblxuICAvKipcbiAgICogRXhlY3V0ZWQgd2hlbiBzcGVlY2ggdmlzZW1lIGV2ZW50cyBhcmUgY2F1Z2h0LlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX29uVmlzZW1lKCkge31cblxuICAvKipcbiAgICogRXhlY3V0ZWQgd2hlbiBzcGVlY2ggc3NtbCBldmVudHMgYXJlIGNhdWdodC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9vblNzbWwoKSB7fVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgY2xhc3MgdGhhdCBpbXBsZW1lbnRzIHtAbGluayBUZXh0VG9TcGVlY2hGZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlfVxuICAgKiBhbmQgZXh0ZW5kcyBhIHNwZWNpZmllZCBiYXNlIGNsYXNzLlxuICAgKlxuICAgKiBAcGFyYW0ge0NsYXNzfSBCYXNlQ2xhc3MgLSBUaGUgY2xhc3MgdG8gZXh0ZW5kLlxuICAgKlxuICAgKiBAcmV0dXJuIHtDbGFzc30gQSBjbGFzcyB0aGF0IGV4dGVuZHMgYEJhc2VDbGFzc2AgYW5kIGltcGxlbWVudHMge0BsaW5rIFRleHRUb1NwZWVjaEZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2V9LlxuICAgKi9cbiAgc3RhdGljIE1peGluKEJhc2VDbGFzcykge1xuICAgIGNvbnN0IFBhcmVudENsYXNzID0gRmVhdHVyZURlcGVuZGVudEludGVyZmFjZS5NaXhpbihCYXNlQ2xhc3MpO1xuICAgIGNvbnN0IFRleHRUb1NwZWVjaEZlYXR1cmVEZXBlbmRlbnRNaXhpbiA9IGNsYXNzIGV4dGVuZHMgUGFyZW50Q2xhc3Mge1xuICAgICAgX29uUGxheSgpIHt9XG5cbiAgICAgIF9vblBhdXNlKCkge31cblxuICAgICAgX29uUmVzdW1lKCkge31cblxuICAgICAgX29uU3RvcCgpIHt9XG5cbiAgICAgIF9vblNlbnRlbmNlKCkge31cblxuICAgICAgX29uV29yZCgpIHt9XG5cbiAgICAgIF9vblZpc2VtZSgpIHt9XG5cbiAgICAgIF9vblNzbWwoKSB7fVxuICAgIH07XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhUZXh0VG9TcGVlY2hGZWF0dXJlRGVwZW5kZW50TWl4aW4sIHtcbiAgICAgIEVWRU5UX0RFUEVOREVOQ0lFUzoge1xuICAgICAgICB2YWx1ZToge1xuICAgICAgICAgIC4uLlBhcmVudENsYXNzLkVWRU5UX0RFUEVOREVOQ0lFUyxcbiAgICAgICAgICAuLi5UZXh0VG9TcGVlY2hGZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlLkVWRU5UX0RFUEVOREVOQ0lFUyxcbiAgICAgICAgfSxcbiAgICAgICAgd3JpdGFibGU6IGZhbHNlLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBUZXh0VG9TcGVlY2hGZWF0dXJlRGVwZW5kZW50TWl4aW47XG4gIH1cbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVGV4dFRvU3BlZWNoRmVhdHVyZURlcGVuZGVudEludGVyZmFjZSwge1xuICBFVkVOVF9ERVBFTkRFTkNJRVM6IHtcbiAgICB2YWx1ZToge1xuICAgICAgVGV4dFRvU3BlZWNoRmVhdHVyZToge1xuICAgICAgICBwbGF5OiAnX29uUGxheScsXG4gICAgICAgIHBhdXNlOiAnX29uUGF1c2UnLFxuICAgICAgICByZXN1bWU6ICdfb25SZXN1bWUnLFxuICAgICAgICBzdG9wOiAnX29uU3RvcCcsXG4gICAgICAgIHNlbnRlbmNlOiAnX29uU2VudGVuY2UnLFxuICAgICAgICB3b3JkOiAnX29uV29yZCcsXG4gICAgICAgIHZpc2VtZTogJ19vblZpc2VtZScsXG4gICAgICAgIHNzbWw6ICdfb25Tc21sJyxcbiAgICAgIH0sXG4gICAgfSxcbiAgICB3cml0YWJsZTogZmFsc2UsXG4gIH0sXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgVGV4dFRvU3BlZWNoRmVhdHVyZURlcGVuZGVudEludGVyZmFjZTtcbiIsIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVC0wXG5pbXBvcnQgTWF0aFV0aWxzIGZyb20gJy4vTWF0aFV0aWxzJztcbmltcG9ydCB7UXVhZHJhdGljfSBmcm9tICcuL2FuaW1wYWNrL0Vhc2luZyc7XG5pbXBvcnQgTWFuYWdlZEFuaW1hdGlvbkxheWVySW50ZXJmYWNlIGZyb20gJy4vYW5pbXBhY2svTWFuYWdlZEFuaW1hdGlvbkxheWVySW50ZXJmYWNlJztcbmltcG9ydCBUZXh0VG9TcGVlY2hGZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlIGZyb20gJy4vYXdzcGFjay9UZXh0VG9TcGVlY2hGZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlJztcbmltcG9ydCBBYnN0cmFjdEhvc3RGZWF0dXJlIGZyb20gJy4vQWJzdHJhY3RIb3N0RmVhdHVyZSc7XG5cbi8qKlxuICogRGVmYXVsdCBtYXBwaW5nIG9mIFBvbGx5IHZpc2VtZSBuYW1lcyB0byBhbmltYXRpb24gb3B0aW9ucyBvYmplY3RzLlxuICpcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBbc2lsPXtuYW1lOiAnc2lsJ31dXG4gKiBAcHJvcGVydHkge09iamVjdH0gW3A9e25hbWU6ICdwJywgb3ZlcnJpZGVXZWlnaHQ6IDAuOX1dXG4gKiBAcHJvcGVydHkge09iamVjdH0gW3Q9e25hbWU6ICd0JywgYmxlbmRUaW1lOiAwLjJ9XVxuICogQHByb3BlcnR5IHtPYmplY3R9IFtTPXtuYW1lOiAnUyd9XVxuICogQHByb3BlcnR5IHtPYmplY3R9IFtUPXtuYW1lOiAnVCd9XVxuICogQHByb3BlcnR5IHtPYmplY3R9IFtmPXtuYW1lOiAnZicsIG92ZXJyaWRlV2VpZ2h0OiAwLjc1fV1cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBbaz17bmFtZTogJ2snfV1cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBbaT17bmFtZTogJ2knfV1cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBbcj17bmFtZTogJ3InfV1cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBbcz17bmFtZTogJ3MnLCBibGVuZFRpbWU6IDAuMjV9XVxuICogQHByb3BlcnR5IHtPYmplY3R9IFt1PXtuYW1lOiAndSd9XVxuICogQHByb3BlcnR5IHtPYmplY3R9IFtAPXtuYW1lOiAnQCd9XVxuICogQHByb3BlcnR5IHtPYmplY3R9IFthPXtuYW1lOiAnYSd9XVxuICogQHByb3BlcnR5IHtPYmplY3R9IFtlPXtuYW1lOiAnZScsIGJsZW5kVGltZTogMC4yfV1cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBbRT17bmFtZTogJ0UnfV1cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBbbz17bmFtZTogJ28nfV1cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBbTz17bmFtZTogJ08nfV1cbiAqL1xuY29uc3QgRGVmYXVsdFZpc2VtZU1hcCA9IHtcbiAgc2lsOiB7bmFtZTogJ3NpbCd9LFxuICBwOiB7bmFtZTogJ3AnLCBvdmVycmlkZVdlaWdodDogMC45fSxcbiAgdDoge25hbWU6ICd0JywgYmxlbmRUaW1lOiAwLjJ9LFxuICBTOiB7bmFtZTogJ1MnfSxcbiAgVDoge25hbWU6ICdUJ30sXG4gIGY6IHtuYW1lOiAnZicsIG92ZXJyaWRlV2VpZ2h0OiAwLjc1fSxcbiAgazoge25hbWU6ICdrJ30sXG4gIGk6IHtuYW1lOiAnaSd9LFxuICByOiB7bmFtZTogJ3InfSxcbiAgczoge25hbWU6ICdzJywgYmxlbmRUaW1lOiAwLjI1fSxcbiAgdToge25hbWU6ICd1J30sXG4gICdAJzoge25hbWU6ICdAJ30sXG4gIGE6IHtuYW1lOiAnYSd9LFxuICBlOiB7bmFtZTogJ2UnLCBibGVuZFRpbWU6IDAuMn0sXG4gIEU6IHtuYW1lOiAnRSd9LFxuICBvOiB7bmFtZTogJ28nfSxcbiAgTzoge25hbWU6ICdPJ30sXG59O1xuXG4vKipcbiAqIExpcHN5bmMgY29udHJvbHMgdHdvIHR5cGVzIG9mIG1vdmVtZW50OiBpZGxlIGFuaW1hdGlvbiB0aGF0IHNob3VsZCBwbGF5IHdoaWxlXG4gKiBzcGVlY2ggaXMgcGxheWluZyBhbmQgdmlzZW1lIGFuaW1hdGlvbnMgY29ycmVzcG9uZGluZyB0byBQb2xseSB2aXNlbWVzIHdob3NlXG4gKiB3ZWlnaHRzIHNob3VsZCBiZSB0dXJuZWQgb24gYW5kIG9mZiBhcyB0aGV5IGFyZSBlbmNvdW50ZXJlZCBpbiB0aGUgUG9sbHkgU1NNTFxuICogdHJhbnNjcmlwdC4gTGF5ZXJzIG93bmVkIGJ5IHRoaXMgZmVhdHVyZSB3aWxsIGJlIGVuYWJsZWQgd2hpbGUgc3BlZWNoIGlzIHBsYXlpbmdcbiAqIGFuZCBkaXNhYmxlZCBvbmNlIGl0IHN0b3BzLlxuICpcbiAqIEBleHRlbmRzIEFic3RyYWN0SG9zdEZlYXR1cmVcbiAqIEBhbGlhcyBjb3JlL0xpcHN5bmNGZWF0dXJlXG4gKiBAaW1wbGVtZW50cyBUZXh0VG9TcGVlY2hGZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlXG4gKiBAaW1wbGVtZW50cyBNYW5hZ2VkQW5pbWF0aW9uTGF5ZXJJbnRlcmZhY2VcbiAqL1xuY2xhc3MgTGlwc3luY0ZlYXR1cmUgZXh0ZW5kcyBBYnN0cmFjdEhvc3RGZWF0dXJlLm1peChcbiAgVGV4dFRvU3BlZWNoRmVhdHVyZURlcGVuZGVudEludGVyZmFjZS5NaXhpbixcbiAgTWFuYWdlZEFuaW1hdGlvbkxheWVySW50ZXJmYWNlLk1peGluXG4pIHtcbiAgLyoqXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKlxuICAgKiBAcGFyYW0ge2NvcmUvSG9zdE9iamVjdH0gaG9zdCAtIEhvc3QgdGhhdCBvd25zIHRoZSBmZWF0dXJlLlxuICAgKiBAcGFyYW0ge09iamVjdD19IHZpc2VtZU9wdGlvbnMgLSBPcHRpb25zIGZvciB0aGUgdmlzZW1lIGxheWVycy5cbiAgICogQHBhcmFtIHtudW1iZXJ9IFt2aXNlbWVPcHRpb25zLmJsZW5kVGltZT0wLjE1XSAtIERlZmF1bHQgYW1vdW50IG9mIHRpbWUgaXRcbiAgICogd2lsbCB0YWtlIHRvIG1hbmlwdWxhdGUgZWFjaCBmcmVlQmxlbmQgd2VpZ2h0IG9uIHRoZSB2aXNlbWUgc3RhdGVzLlxuICAgKiBAcGFyYW0ge09iamVjdH0gW3Zpc2VtZU9wdGlvbnMuZGVjYXlSYXRlPXthbW91bnQ6IC41LCBzZWNvbmRzOiAuNX1dIC0gQW4gb2JqZWN0XG4gICAqIGRlc2NyaWJpbmcgdGhlIDAtMSBmYWN0b3IgdmlzZW1lIHdlaWdodCB3aWxsIGRlY2F5IGlmIHRoZSB2aXNlbWUgZHVyYXRpb24gaXNcbiAgICogbG9uZ2VyIHRoYW4gdGhlIGJsZW5kVGltZSBhbmQgdGhlIG51bWJlciBvZiBzZWNvbmRzIGl0IHdvdWxkIHRha2UgdG8gZGVjYXlcbiAgICogYnkgdGhhdCBmYWN0b3IuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbdmlzZW1lT3B0aW9ucy5lYXNpbmdGbj1RdWFkcmF0aWMuSW5PdXRdIC0gRGVmYXVsdCBlYXNpbmcgZnVuY3Rpb25cbiAgICogdG8gdXNlIHdoZW4gbWFuaXB1bGF0aW5nIHZpc2VtZSBmcmVlQmxlbmQgd2VpZ2h0cy5cbiAgICogQHBhcmFtIHtBcnJheS48T2JqZWN0Pn0gW3Zpc2VtZU9wdGlvbnMuLmxheWVycz1bXV0gLSBBbiBhcnJheSBvZiBsYXllciBvcHRpb25zXG4gICAqIG9iamVjdHMgdG8gcmVnaXN0ZXIgYXMgdmlzZW1lIGxheWVycy5cbiAgICogQHBhcmFtIHtPYmplY3Q9fSB0YWxraW5nT3B0aW9ucyAtIE9wdGlvbnMgZm9yIHRoZSB0YWxraW5nIGxheWVycy5cbiAgICogQHBhcmFtIHtudW1iZXJ9IFt0YWxraW5nT3B0aW9ucy5ibGVuZFRpbWU9MC43NV0gLSBEZWZhdWx0IGFtb3VudCBvZiB0aW1lIHRvXG4gICAqIGVuYWJsZSBhbmQgZGlzYWJsZSB0aGUgdGFsa2luZyBpZGxlIGxheWVyc1xuICAgKiBAcGFyYW0ge251bWJlcn0gW3RhbGtpbmdPcHRpb25zLmVhc2luZ0ZuPVF1YWRyYXRpYy5Jbk91dF0gLSBEZWZhdWx0IGVhc2luZ1xuICAgKiBmdW5jdGlvbiB0byB1c2Ugd2hlbiBtYW5pcHVsYXRpbmcgd2VpZ2h0cyBvbiB0aGUgdGFsa2luZyBpZGxlIGxheWVycy5cbiAgICogQHBhcmFtIHtBcnJheS48T2JqZWN0Pn0gW3RhbGtpbmdPcHRpb25zLmxheWVycz1bXV0gLSBBbiBhcnJheSBvZiBsYXllciBvcHRpb25zXG4gICAqIG9iamVjdHMgdG8gcmVnaXN0ZXIgYXMgdGFsa2luZyBsYXllcnMuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbdmlzZW1lTGVhZFRpbWU9LjA2N10gLSBUaGUgYW1vdW50IG9mIHRpbWUgdG8gaW5zdHJ1Y3QgdGhlXG4gICAqIFRleHRUb1NwZWVjaEZlYXR1cmUgdG8gZW1pdCBzcGVlY2htYXJrcyBiZWZvcmUgZWFjaCBvbmUncyBhY3R1YWwgdGltZXN0YW1wXG4gICAqIGlzIHJlYWNoZWQuIFRoaXMgd2lsbCBzZXQgdGhlICdzcGVlY2hNYXJrT2Zmc2V0JyB2YXJpYWJsZSBvbiB0aGUgVGV4dFRvU3BlZWNoRmVhdHVyZS5cbiAgICovXG4gIGNvbnN0cnVjdG9yKFxuICAgIGhvc3QsXG4gICAge1xuICAgICAgYmxlbmRUaW1lOiB2aXNlbWVCbGVuZFRpbWUgPSAwLjE1LFxuICAgICAgZGVjYXlSYXRlOiB7YW1vdW50ID0gMC41LCBzZWNvbmRzID0gMC41fSA9IHt9LFxuICAgICAgZWFzaW5nRm46IHZpc2VtZUVhc2luZ0ZuID0gUXVhZHJhdGljLkluT3V0LFxuICAgICAgbGF5ZXJzOiB2aXNlbWVMYXllcnMgPSBbXSxcbiAgICB9ID0ge30sXG4gICAge1xuICAgICAgYmxlbmRUaW1lOiB0YWxraW5nQmxlbmRUaW1lID0gMC43NSxcbiAgICAgIGVhc2luZ0ZuOiB0YWxraW5nRWFzaW5nRm4gPSBRdWFkcmF0aWMuSW5PdXQsXG4gICAgICBsYXllcnM6IHRhbGtpbmdMYXllcnMgPSBbXSxcbiAgICB9ID0ge30sXG4gICAgdmlzZW1lTGVhZFRpbWUgPSAwLjA2N1xuICApIHtcbiAgICBzdXBlcihob3N0KTtcblxuICAgIHRoaXMuX3Zpc2VtZUxheWVycyA9IHt9O1xuICAgIHRoaXMuX3RhbGtpbmdMYXllcnMgPSB7fTtcbiAgICB0aGlzLnZpc2VtZUxlYWRUaW1lID0gdmlzZW1lTGVhZFRpbWU7XG5cbiAgICAvLyBSZWdpc3RlciB0aGUgdmlzZW1lIGxheWVyc1xuICAgIHZpc2VtZUxheWVycy5mb3JFYWNoKCh7bmFtZSwgYW5pbWF0aW9uLCB2aXNlbWVNYXAgPSBEZWZhdWx0VmlzZW1lTWFwfSkgPT4ge1xuICAgICAgdGhpcy5yZWdpc3RlclZpc2VtZUxheWVyKG5hbWUsIHtcbiAgICAgICAgYW5pbWF0aW9uLFxuICAgICAgICB2aXNlbWVNYXAsXG4gICAgICAgIGRlY2F5UmF0ZToge2Ftb3VudCwgc2Vjb25kc30sXG4gICAgICAgIGJsZW5kVGltZTogdmlzZW1lQmxlbmRUaW1lLFxuICAgICAgICBlYXNpbmdGbjogdmlzZW1lRWFzaW5nRm4sXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIC8vIFJlZ2lzdGVyIHRoZSB0YWxraW5nIGxheWVyc1xuICAgIHRhbGtpbmdMYXllcnMuZm9yRWFjaCgoe25hbWUsIGFuaW1hdGlvbn0pID0+IHtcbiAgICAgIHRoaXMucmVnaXN0ZXJUYWxraW5nTGF5ZXIobmFtZSwge1xuICAgICAgICBhbmltYXRpb24sXG4gICAgICAgIGJsZW5kVGltZTogdGFsa2luZ0JsZW5kVGltZSxcbiAgICAgICAgZWFzaW5nRm46IHRhbGtpbmdFYXNpbmdGbixcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEVuc3VyZSB0aGF0IHJlZ2lzdGVyZWQgdmlzZW1lIGFuaW1hdGlvbnMgYXJlIEZyZWVCbGVuZFN0YXRlcy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVyTmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRoYXQgY29udGFpbnMgdGhlIHZpc2VtZSBhbmltYXRpb24uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhbmltYXRpb25OYW1lIC0gTmFtZSBvZiB0aGUgYW5pbWF0aW9uLlxuICAgKi9cbiAgX3JlZ2lzdGVyVmlzZW1lQW5pbWF0aW9uKGxheWVyTmFtZSwgYW5pbWF0aW9uTmFtZSkge1xuICAgIGlmICh0aGlzLl9tYW5hZ2VkTGF5ZXJzW2xheWVyTmFtZV0uYW5pbWF0aW9uc1thbmltYXRpb25OYW1lXS5pc0FjdGl2ZSkge1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLl9ob3N0LkFuaW1hdGlvbkZlYXR1cmUuZ2V0QW5pbWF0aW9uVHlwZShcbiAgICAgICAgICBsYXllck5hbWUsXG4gICAgICAgICAgYW5pbWF0aW9uTmFtZVxuICAgICAgICApICE9PSAnZnJlZUJsZW5kJ1xuICAgICAgKSB7XG4gICAgICAgIC8vIFdhcm4gYW5kIGRlYWN0aXZhdGUgaWYgdGhlIHJlZ2lzdGVyZWQgc3RhdGUgaXMgbm90IGZyZWVCbGVuZFxuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgYENhbm5vdCByZWdpc3RlciBMaXBzeW5jIHZpc2VtZSBhbmltYXRpb24gJHthbmltYXRpb25OYW1lfSBvbiBsYXllciAke2xheWVyTmFtZX0gZm9yIGhvc3QgJHt0aGlzLl9ob3N0LmlkfS4gVmlzZW1lIGFuaW1hdGlvbnMgbXVzdCBiZSBvZiB0eXBlICdmcmVlQmxlbmQnLmBcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5fbWFuYWdlZExheWVyc1tsYXllck5hbWVdLmFuaW1hdGlvbnNbXG4gICAgICAgICAgYW5pbWF0aW9uTmFtZVxuICAgICAgICBdLmlzQWN0aXZlID0gZmFsc2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBDaGVjayBpZiB0aGUgYmxlbmRXZWlnaHRzIGNhbiBiZSBtYW5pcHVsYXRlZCBub3dcbiAgICAgICAgY29uc3Qgd2VpZ2h0TmFtZXMgPSB0aGlzLl9ob3N0LkFuaW1hdGlvbkZlYXR1cmUuZ2V0QW5pbWF0aW9uQmxlbmROYW1lcyhcbiAgICAgICAgICBsYXllck5hbWUsXG4gICAgICAgICAgYW5pbWF0aW9uTmFtZVxuICAgICAgICApO1xuICAgICAgICBjb25zdCB7dmlzZW1lTWFwfSA9IHRoaXMuX21hbmFnZWRMYXllcnNbbGF5ZXJOYW1lXS5hbmltYXRpb25zW1xuICAgICAgICAgIGFuaW1hdGlvbk5hbWVcbiAgICAgICAgXTtcblxuICAgICAgICBPYmplY3QudmFsdWVzKHZpc2VtZU1hcCkuZm9yRWFjaCh2aXNlbWVPcHRpb25zID0+IHtcbiAgICAgICAgICB2aXNlbWVPcHRpb25zLmlzQWN0aXZlID0gd2VpZ2h0TmFtZXMuaW5jbHVkZXModmlzZW1lT3B0aW9ucy5uYW1lKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIElmIHRoZSBhZGRlZCBmZWF0dXJlIGlzIFRleHRUb1NwZWVjaCwgdXBkYXRlIGl0cyBzcGVlY2hNYXJrT2Zmc2V0IHZhcmlhYmxlLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdHlwZU5hbWUgLSBOYW1lIG9mIHRoZSB0eXBlIG9mIGZlYXR1cmUgdGhhdCB3YXMgYWRkZWQuXG4gICAqL1xuICBfb25GZWF0dXJlQWRkZWQodHlwZU5hbWUpIHtcbiAgICB0aGlzLl92aXNlbWVMYXllcnMgPSB0aGlzLl92aXNlbWVMYXllcnMgfHwge307XG4gICAgdGhpcy5fdGFsa2luZ0xheWVycyA9IHRoaXMuX3RhbGtpbmdMYXllcnMgfHwge307XG5cbiAgICBzdXBlci5fb25GZWF0dXJlQWRkZWQodHlwZU5hbWUpO1xuXG4gICAgaWYgKHR5cGVOYW1lID09PSAnVGV4dFRvU3BlZWNoRmVhdHVyZScpIHtcbiAgICAgIHRoaXMuX2hvc3QuVGV4dFRvU3BlZWNoRmVhdHVyZS5zcGVlY2htYXJrT2Zmc2V0ID1cbiAgICAgICAgLXRoaXMuX3Zpc2VtZUxlYWRUaW1lIHx8IDA7XG4gICAgfVxuICB9XG5cbiAgX29uTGF5ZXJBZGRlZCh7bmFtZX0pIHtcbiAgICBzdXBlci5fb25MYXllckFkZGVkKHtuYW1lfSk7XG5cbiAgICAvLyBWYWxpZGF0ZSB0aGUgdmlzZW1lIGFuaW1hdGlvblxuICAgIGlmICh0aGlzLl92aXNlbWVMYXllcnNbbmFtZV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5fcmVnaXN0ZXJWaXNlbWVBbmltYXRpb24obmFtZSwgdGhpcy5fdmlzZW1lTGF5ZXJzW25hbWVdKTtcbiAgICB9XG4gIH1cblxuICBfb25BbmltYXRpb25BZGRlZCh7bGF5ZXJOYW1lLCBhbmltYXRpb25OYW1lfSkge1xuICAgIHN1cGVyLl9vbkFuaW1hdGlvbkFkZGVkKHtsYXllck5hbWV9KTtcblxuICAgIC8vIFZhbGlkYXRlIHRoZSB2aXNlbWUgYW5pbWF0aW9uXG4gICAgaWYgKHRoaXMuX3Zpc2VtZUxheWVyc1tsYXllck5hbWVdID09PSBhbmltYXRpb25OYW1lKSB7XG4gICAgICB0aGlzLl9yZWdpc3RlclZpc2VtZUFuaW1hdGlvbihsYXllck5hbWUsIHRoaXMuX3Zpc2VtZUxheWVyc1tsYXllck5hbWVdKTtcbiAgICB9XG4gIH1cblxuICBfb25QbGF5KCkge1xuICAgIC8vIFR1cm4gb24gdGhlIGxheWVyIHdlaWdodHNcbiAgICB0aGlzLmVuYWJsZSgpO1xuXG4gICAgLy8gU2V0IHRoZSBjdXJyZW50IGFuaW1hdGlvbnNcbiAgICBbdGhpcy5fdmlzZW1lTGF5ZXJzLCB0aGlzLl90YWxraW5nTGF5ZXJzXS5mb3JFYWNoKGxheWVycyA9PiB7XG4gICAgICBPYmplY3QuZW50cmllcyhsYXllcnMpLmZvckVhY2goKFtsYXllck5hbWUsIGFuaW1hdGlvbk5hbWVdKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLl9tYW5hZ2VkTGF5ZXJzW2xheWVyTmFtZV0uYW5pbWF0aW9uc1thbmltYXRpb25OYW1lXS5pc0FjdGl2ZSkge1xuICAgICAgICAgIHRoaXMuX2hvc3QuQW5pbWF0aW9uRmVhdHVyZS5yZXN1bWVBbmltYXRpb24obGF5ZXJOYW1lLCBhbmltYXRpb25OYW1lKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBfb25QYXVzZSgpIHtcbiAgICB0aGlzLl9vblN0b3AoKTtcbiAgfVxuXG4gIF9vblJlc3VtZSgpIHtcbiAgICB0aGlzLl9vblBsYXkoKTtcbiAgfVxuXG4gIF9vblN0b3AoKSB7XG4gICAgLy8gVHVybiBvZmYgdGhlIGxheWVyIHdlaWdodHNcbiAgICB0aGlzLmRpc2FibGUoKTtcblxuICAgIC8vIFBhdXNlIHRoZSBjdXJyZW50IGFuaW1hdGlvbnNcbiAgICBbdGhpcy5fdmlzZW1lTGF5ZXJzLCB0aGlzLl90YWxraW5nTGF5ZXJzXS5mb3JFYWNoKGxheWVycyA9PiB7XG4gICAgICBPYmplY3QuZW50cmllcyhsYXllcnMpLmZvckVhY2goKFtsYXllck5hbWUsIGFuaW1hdGlvbk5hbWVdKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLl9tYW5hZ2VkTGF5ZXJzW2xheWVyTmFtZV0uYW5pbWF0aW9uc1thbmltYXRpb25OYW1lXS5pc0FjdGl2ZSkge1xuICAgICAgICAgIHRoaXMuX2hvc3QuQW5pbWF0aW9uRmVhdHVyZS5wYXVzZUFuaW1hdGlvbihsYXllck5hbWUsIGFuaW1hdGlvbk5hbWUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGVuIHZpc2VtZSBldmVudHMgYXJlIGNhdWdodCwgdHVybiBvbiB3ZWlnaHQgb2YgdGhlIG5ldyB2aXNlbWUgZm9yIHRoZSBkdXJhdGlvblxuICAgKiBvZiB0aGUgc3BlZWNoIG1hcmssIHRoZW4gdHVybiB3ZWlnaHQgYmFjayBvZmYuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBldmVudCAtIEV2ZW50IGRhdGEgcGFzc2VkIGZyb20gdGhlIHNwZWVjaC5cbiAgICogQHBhcmFtIHtPYmplY3R9IGV2ZW50Lm1hcmsgLSBTcGVlY2htYXJrIG9iamVjdC5cbiAgICovXG4gIGFzeW5jIF9vblZpc2VtZSh7bWFya30pIHtcbiAgICBPYmplY3QuZW50cmllcyh0aGlzLl92aXNlbWVMYXllcnMpLmZvckVhY2goKFtsYXllck5hbWUsIGFuaW1OYW1lXSkgPT4ge1xuICAgICAgLy8gTWFrZSBzdXJlIHRoZSBsYXllciBjYW4gYmUgbWFuaXB1bGF0ZWRcbiAgICAgIGNvbnN0IHtpc0FjdGl2ZSwgdmlzZW1lTWFwfSA9IHRoaXMuX21hbmFnZWRMYXllcnNbbGF5ZXJOYW1lXS5hbmltYXRpb25zW1xuICAgICAgICBhbmltTmFtZVxuICAgICAgXTtcblxuICAgICAgaWYgKCFpc0FjdGl2ZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIFRha2UgdmFyaWFibGVzIGZyb20gdGhlIHZpc2VtZSBpZiB0aGV5IGV4aXN0IGFuZCBkZWZhdWx0IHRvIHRoZSBsYXllclxuICAgICAgY29uc3Qge1xuICAgICAgICBuYW1lOiB2aXNlbWUsXG4gICAgICAgIGlzQWN0aXZlOiBpc1Zpc2VtZUFjdGl2ZSxcbiAgICAgICAgZGVjYXlSYXRlLFxuICAgICAgICBibGVuZFRpbWUsXG4gICAgICAgIGVhc2luZ0ZuLFxuICAgICAgICBvdmVycmlkZVdlaWdodCxcbiAgICAgIH0gPSB7XG4gICAgICAgIC4uLnRoaXMuX21hbmFnZWRMYXllcnNbbGF5ZXJOYW1lXSxcbiAgICAgICAgLi4udmlzZW1lTWFwW21hcmsudmFsdWVdLFxuICAgICAgfTtcblxuICAgICAgY29uc3QgdmlzZW1lTmFtZXMgPSB0aGlzLl9ob3N0LkFuaW1hdGlvbkZlYXR1cmUuZ2V0QW5pbWF0aW9uQmxlbmROYW1lcyhcbiAgICAgICAgbGF5ZXJOYW1lLFxuICAgICAgICBhbmltTmFtZVxuICAgICAgKTtcblxuICAgICAgLy8gTWFrZSBzdXJlIHRoZSBuZXcgdmlzZW1lIGhhcyBhbiBhY3RpdmUgZnJlZUJsZW5kIHdlaWdodFxuICAgICAgaWYgKCFpc1Zpc2VtZUFjdGl2ZSB8fCAhdmlzZW1lTmFtZXMuaW5jbHVkZXModmlzZW1lKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIEZpbmQgdGhlIHBlYWsgd2VpZ2h0IGZvciB0aGUgdmlzZW1lIGFuZCB0aGUgYW1vdW50IG9mIHRpbWUgaXQgc2hvdWxkXG4gICAgICAvLyB0YWtlIHRvIHJlYWNoIGl0XG4gICAgICBsZXQgd2VpZ2h0ID0gMTtcbiAgICAgIGNvbnN0IGR1cmF0aW9uID0gbWFyay5kdXJhdGlvbiAvIDEwMDA7XG4gICAgICBpZiAoZHVyYXRpb24gPCBibGVuZFRpbWUpIHtcbiAgICAgICAgY29uc3QgbGVycEZhY3RvciA9IGJsZW5kVGltZSA+IDAgPyBkdXJhdGlvbiAvIGJsZW5kVGltZSA6IDE7XG4gICAgICAgIHdlaWdodCA9XG4gICAgICAgICAgb3ZlcnJpZGVXZWlnaHQgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyBvdmVycmlkZVdlaWdodFxuICAgICAgICAgICAgOiBNYXRoVXRpbHMubGVycCgwLCAxLCBsZXJwRmFjdG9yKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGJsZW5kSW5UaW1lID0gTWF0aC5taW4oZHVyYXRpb24sIGJsZW5kVGltZSk7XG5cbiAgICAgIC8vIEZpbmQgdGhlIGFtb3VudCBhbmQgdGltZSB2aXNlbWUgd2lsbCBiZSBoZWxkIGZvclxuICAgICAgY29uc3QgaG9sZFRpbWUgPSBkdXJhdGlvbiAtIGJsZW5kVGltZTtcblxuICAgICAgaWYgKGhvbGRUaW1lIDwgMCkge1xuICAgICAgICAvLyBQZXJmb3JtIGluIC0+IG91dCBhbmltYXRpb25cbiAgICAgICAgdGhpcy5fYW5pbWF0ZVNpbXBsZVZpc2VtZShcbiAgICAgICAgICBsYXllck5hbWUsXG4gICAgICAgICAgYW5pbU5hbWUsXG4gICAgICAgICAgdmlzZW1lLFxuICAgICAgICAgIHdlaWdodCxcbiAgICAgICAgICBibGVuZEluVGltZSxcbiAgICAgICAgICBibGVuZFRpbWUsXG4gICAgICAgICAgZWFzaW5nRm5cbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGxlcnBGYWN0b3IgPVxuICAgICAgICAgIGRlY2F5UmF0ZS5zZWNvbmRzID4gMCA/IGhvbGRUaW1lIC8gZGVjYXlSYXRlLnNlY29uZHMgOiAxO1xuICAgICAgICAvLyBQZXJmb3JtIGluIC0+IGhvbGQgLT4gb3V0IGFuaW1hdGlvblxuICAgICAgICBjb25zdCBkZWNheVdlaWdodCA9IE1hdGhVdGlscy5sZXJwKFxuICAgICAgICAgIHdlaWdodCxcbiAgICAgICAgICB3ZWlnaHQgKiBkZWNheVJhdGUuYW1vdW50LFxuICAgICAgICAgIE1hdGgubWluKDEsIGxlcnBGYWN0b3IpXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuX2FuaW1hdGVIZWxkVmlzZW1lKFxuICAgICAgICAgIGxheWVyTmFtZSxcbiAgICAgICAgICBhbmltTmFtZSxcbiAgICAgICAgICB2aXNlbWUsXG4gICAgICAgICAgd2VpZ2h0LFxuICAgICAgICAgIGRlY2F5V2VpZ2h0LFxuICAgICAgICAgIGJsZW5kSW5UaW1lLFxuICAgICAgICAgIGhvbGRUaW1lLFxuICAgICAgICAgIGJsZW5kVGltZSxcbiAgICAgICAgICBlYXNpbmdGblxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFuaW1hdGUgYSB2aXNlbWUgYmxlbmQgd2VpZ2h0IHRvd2FyZHMgYSB2YWx1ZSBhbmQgdGhlbiBiYWNrIHRvIHplcm8uXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllck5hbWUgLSBOYW1lIG9mIHRoZSBsYXllciB0aGF0IGNvbnRhaW5zIHRoZSB2aXNlbWUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhbmltTmFtZSAtIE5hbWUgb2YgdGhlIGZyZWVibGVuZCBhbmltYXRpb24gdGhhdCBjb250YWluc1xuICAgKiB0aGUgdmlzZW1lLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdmlzZW1lTmFtZSAtIE5hbWUgb2YgdGhlIGJsZW5kIHdlaWdodCB0byBtYW5pcHVsYXRlLlxuICAgKiBAcGFyYW0ge251bWJlcn0gd2VpZ2h0IC0gUGVhayB3ZWlnaHQgdG8gYW5pbWF0ZSB0b3dhcmRzLlxuICAgKiBAcGFyYW0ge251bWJlcn0gYmxlbmRJblRpbWUgLSBBbW91bnQgb2YgdGltZSBpdCBzaG91bGQgdGFrZSB0byByZWFjaCB0aGVcbiAgICogcGVhayB3ZWlnaHQuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBibGVuZE91dFRpbWUgLSBBbW91bnQgb2YgdGltZSBpdCBzaG91bGQgdGFrZSB0byBhbmltYXRlIGJhY2tcbiAgICogdG8gemVybyBhZnRlciByZWFjaGluZyB0aGUgcGVhayB3ZWlnaHQuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGVhc2luZ0ZuIC0gRWFzaW5nIGZ1bmN0aW9uIHRvIHVzZSBkdXJpbmcgYW5pbWF0aW9uLlxuICAgKi9cbiAgX2FuaW1hdGVTaW1wbGVWaXNlbWUoXG4gICAgbGF5ZXJOYW1lLFxuICAgIGFuaW1OYW1lLFxuICAgIHZpc2VtZU5hbWUsXG4gICAgcGVha1dlaWdodCxcbiAgICBibGVuZEluVGltZSxcbiAgICBibGVuZE91dFRpbWUsXG4gICAgZWFzaW5nRm5cbiAgKSB7XG4gICAgLy8gQW5pbWF0ZSB0b3dhcmRzIHRoZSBwZWFrIHZhbHVlXG4gICAgY29uc3Qgd2VpZ2h0UHJvbWlzZSA9IHRoaXMuX2hvc3QuQW5pbWF0aW9uRmVhdHVyZS5zZXRBbmltYXRpb25CbGVuZFdlaWdodChcbiAgICAgIGxheWVyTmFtZSxcbiAgICAgIGFuaW1OYW1lLFxuICAgICAgdmlzZW1lTmFtZSxcbiAgICAgIHBlYWtXZWlnaHQsXG4gICAgICBibGVuZEluVGltZSxcbiAgICAgIGVhc2luZ0ZuXG4gICAgKTtcblxuICAgIC8vIEFuaW1hdGUgYmFjayB0byB6ZXJvIGlmIHRoZXJlIHdhcyBubyB3ZWlnaHQgaW50ZXJydXB0aW9uXG4gICAgd2VpZ2h0UHJvbWlzZS50aGVuKCgpID0+IHtcbiAgICAgIGlmICghd2VpZ2h0UHJvbWlzZS5jYW5jZWxlZCkge1xuICAgICAgICB0aGlzLl9ob3N0LkFuaW1hdGlvbkZlYXR1cmUuc2V0QW5pbWF0aW9uQmxlbmRXZWlnaHQoXG4gICAgICAgICAgbGF5ZXJOYW1lLFxuICAgICAgICAgIGFuaW1OYW1lLFxuICAgICAgICAgIHZpc2VtZU5hbWUsXG4gICAgICAgICAgMCxcbiAgICAgICAgICBibGVuZE91dFRpbWUsXG4gICAgICAgICAgZWFzaW5nRm5cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbmltYXRlIGEgdmlzZW1lIGJsZW5kIHdlaWdodCB0b3dhcmRzIGEgdmFsdWUgYW5kIHRoZW4gYmFjayB0byB6ZXJvLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGF5ZXJOYW1lIC0gTmFtZSBvZiB0aGUgbGF5ZXIgdGhhdCBjb250YWlucyB0aGUgdmlzZW1lLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYW5pbU5hbWUgLSBOYW1lIG9mIHRoZSBmcmVlYmxlbmQgYW5pbWF0aW9uIHRoYXQgY29udGFpbnNcbiAgICogdGhlIHZpc2VtZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHZpc2VtZU5hbWUgLSBOYW1lIG9mIHRoZSBibGVuZCB3ZWlnaHQgdG8gbWFuaXB1bGF0ZS5cbiAgICogQHBhcmFtIHtudW1iZXJ9IHBlYWtXZWlnaHQgLSBQZWFrIHdlaWdodCB0byBhbmltYXRlIHRvd2FyZHMuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBkZWNheVdlaWdodCAtIFdlaWdodCB0byBhbmltYXRlIHRvd2FyZHMgYWZ0ZXIgcmVhY2hpbmcgdGhlXG4gICAqIHBlYWsgd2VpZ2h0LlxuICAgKiBAcGFyYW0ge251bWJlcn0gYmxlbmRJblRpbWUgLSBBbW91bnQgb2YgdGltZSBpdCBzaG91bGQgdGFrZSB0byByZWFjaCB0aGVcbiAgICogcGVhayB3ZWlnaHQuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBob2xkVGltZSAtIEFtb3VudCBvZiB0aW1lIGl0IHNob3VsZCB0YWtlIHRvIHJlYWNoIHRoZSBkZWNheVxuICAgKiB3ZWlnaHQgYWZ0ZXIgdGhlIHBlYWsgd2VpZ2h0IGhhcyBiZWVuIHJlYWNoZWQuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBibGVuZE91dFRpbWUgLSBBbW91bnQgb2YgdGltZSBpdCBzaG91bGQgdGFrZSB0byBhbmltYXRlIGJhY2tcbiAgICogdG8gemVybyBhZnRlciByZWFjaGluZyB0aGUgZGVjYXkgd2VpZ2h0LlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBlYXNpbmdGbiAtIEVhc2luZyBmdW5jdGlvbiB0byB1c2UgZHVyaW5nIGFuaW1hdGlvbi5cbiAgICovXG4gIGFzeW5jIF9hbmltYXRlSGVsZFZpc2VtZShcbiAgICBsYXllck5hbWUsXG4gICAgYW5pbU5hbWUsXG4gICAgdmlzZW1lTmFtZSxcbiAgICBwZWFrV2VpZ2h0LFxuICAgIGRlY2F5V2VpZ2h0LFxuICAgIGJsZW5kSW5UaW1lLFxuICAgIGhvbGRUaW1lLFxuICAgIGJsZW5kT3V0VGltZSxcbiAgICBlYXNpbmdGblxuICApIHtcbiAgICAvLyBBbmltYXRlIHRvd2FyZHMgdGhlIHBlYWsgdmFsdWVcbiAgICBjb25zdCBzdGFydFByb21pc2UgPSB0aGlzLl9ob3N0LkFuaW1hdGlvbkZlYXR1cmUuc2V0QW5pbWF0aW9uQmxlbmRXZWlnaHQoXG4gICAgICBsYXllck5hbWUsXG4gICAgICBhbmltTmFtZSxcbiAgICAgIHZpc2VtZU5hbWUsXG4gICAgICBwZWFrV2VpZ2h0LFxuICAgICAgYmxlbmRJblRpbWUsXG4gICAgICBlYXNpbmdGblxuICAgICk7XG5cbiAgICBhd2FpdCBzdGFydFByb21pc2U7XG5cbiAgICBpZiAoIXN0YXJ0UHJvbWlzZS5jYW5jZWxlZCkge1xuICAgICAgLy8gQW5pbWF0ZSB0b3dhcmRzIHRoZSBkZWNheSB2YWx1ZSBpZiB0aGVyZSB3YXMgbm8gd2VpZ2h0IGludGVycnVwdGlvblxuICAgICAgY29uc3QgaG9sZFByb21pc2UgPSB0aGlzLl9ob3N0LkFuaW1hdGlvbkZlYXR1cmUuc2V0QW5pbWF0aW9uQmxlbmRXZWlnaHQoXG4gICAgICAgIGxheWVyTmFtZSxcbiAgICAgICAgYW5pbU5hbWUsXG4gICAgICAgIHZpc2VtZU5hbWUsXG4gICAgICAgIGRlY2F5V2VpZ2h0LFxuICAgICAgICBob2xkVGltZSxcbiAgICAgICAgZWFzaW5nRm5cbiAgICAgICk7XG5cbiAgICAgIGF3YWl0IGhvbGRQcm9taXNlO1xuXG4gICAgICBpZiAoIWhvbGRQcm9taXNlLmNhbmNlbGVkKSB7XG4gICAgICAgIC8vIEFuaW1hdGUgYmFjayB0byB6ZXJvIGlmIHRoZXJlIHdhcyBubyB3ZWlnaHQgaW50ZXJydXB0aW9uXG4gICAgICAgIHRoaXMuX2hvc3QuQW5pbWF0aW9uRmVhdHVyZS5zZXRBbmltYXRpb25CbGVuZFdlaWdodChcbiAgICAgICAgICBsYXllck5hbWUsXG4gICAgICAgICAgYW5pbU5hbWUsXG4gICAgICAgICAgdmlzZW1lTmFtZSxcbiAgICAgICAgICAwLFxuICAgICAgICAgIGJsZW5kT3V0VGltZSxcbiAgICAgICAgICBlYXNpbmdGblxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGFuZCBzZXRzIHRoZSBhbW91bnQgb2YgdGltZSBpbiBzZWNvbmRzIHRvIG5lZ2F0aXZlbHkgb2Zmc2V0IHNwZWVjaG1hcmtcbiAgICogZW1pc3Npb24gYnkuXG4gICAqXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqL1xuICBnZXQgdmlzZW1lTGVhZFRpbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Zpc2VtZUxlYWRUaW1lO1xuICB9XG5cbiAgc2V0IHZpc2VtZUxlYWRUaW1lKHNlY29uZHMpIHtcbiAgICB0aGlzLl92aXNlbWVMZWFkVGltZSA9IHNlY29uZHM7XG5cbiAgICBpZiAodGhpcy5faG9zdC5UZXh0VG9TcGVlY2hGZWF0dXJlKSB7XG4gICAgICB0aGlzLl9ob3N0LlRleHRUb1NwZWVjaEZlYXR1cmUuc3BlZWNobWFya09mZnNldCA9IC1zZWNvbmRzO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFydCBrZWVwaW5nIHRyYWNrIG9mIGFuIGFuaW1hdGlvbiBsYXllciB0aGF0IG93bnMgYSBmcmVlQmxlbmQgYW5pbWF0aW9uXG4gICAqIHdpdGggYmxlbmRXZWlnaHRzIGNvcnJlc3BvbmRpbmcgdG8gdmlzZW1lcy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVyTmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRvIGtlZXAgdHJhY2sgb2YuXG4gICAqIEBwYXJhbSB7T2JqZWN0PX0gb3B0aW9ucyAtIE9wdGlvbnMgZm9yIHRoZSBsYXllci5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmFuaW1hdGlvbj0ndmlzZW1lcyddIC0gTmFtZSBvZiB0aGUgYW5pbWF0aW9uIG9uIHRoZVxuICAgKiBsYXllciB0aGF0IHdpbGwgYmUgcGxheWVkIGR1cmluZyBzcGVlY2guIFRoaXMgYW5pbWF0aW9uIG11c3QgYmUgb2YgdHlwZVxuICAgKiBmcmVlQmxlbmQuXG4gICAqIEBwYXJhbSB7T2JqZWN0PX0gZGVjYXlSYXRlXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbZGVjYXlSYXRlLmFtb3VudD0wLjVdIC0gVGhlIHBlcmNlbnRhZ2UgdG8gZGVjcmVhc2UgdGhlIHZpc2VtZSdzXG4gICAqIHBlYWsgdmFsdWUgYnkgb3ZlciB0aW1lIG9uY2UgdGhlIHBlYWsgdmFsdWUgaGFzIGJlZW4gcmVhY2hlZC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IFtkZWNheVJhdGUuc2Vjb25kcz0wLjVdIC0gVGhlIGFtb3VudCBvZiB0aW1lIGluIHNlY29uZHMgdG9cbiAgICogZGVjcmVhc2UgdGhlIHZpc2VtZSdzIHdlaWdodCBvbmNlIGl0IGhhcyByZWFjaGVkIGl0cyBwZWFrIHZhbHVlLlxuICAgKiBAcGFyYW0ge251bWJlcj19IFtvcHRpb25zLmJsZW5kVGltZT1bTGlwc3luY0ZlYXR1cmUuREVGQVVMVF9MQVlFUl9PUFRJT05TLmJsZW5kVGltZV17QGxpbmsgTGlwc3luY0ZlYXR1cmUjREVGQVVMVF9MQVlFUl9PUFRJT05TI2JsZW5kVGltZX1dIC1cbiAgICogRGVmYXVsdCBhbW91bnQgb2YgdGltZSB0byB1c2Ugd2hlbiBtYW5pcHVsYXRpbmcgYW5pbWF0aW9uIGJsZW5kV2VpZ2h0cy5cbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9wdGlvbnMuZWFzaW5nRm4gLSBEZWZhdWx0IGVhc2luZyBmdW5jdGlvbiB0byB1c2Ugd2hlblxuICAgKiBtYW5pcHVsYXRpbmcgYW5pbWF0aW9uIGJsZW5kV2VpZ2h0cy5cbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zLnZpc2VtZU1hcD1EZWZhdWx0VmlzZW1lTWFwXSAtIE9iamVjdCBjb250YWluaW5nIGtleS92YWx1ZSBwYWlycyBvZlxuICAgKiBQb2xseSB2aXNlbWUgbmFtZXMgbWFwcGVkIHRvIG9iamVjdHMgY29udGFpbmluZyB0aGUgbmFtZSBvZiB0aGUgY29ycmVzcG9uZGluZ1xuICAgKiBhbmltYXRpb24gYmxlbmRXZWlnaHQgYW5kIGFueSBvdGhlciBhbmltYXRpb24gb3B0aW9ucyB0byB1c2Ugc3VjaCBhcyB2aXNlbWVcbiAgICogc3BlY2lmaWMgYmxlbmQgdGltZXMgYW5kIGVhc2luZyBmdW5jdGlvbnMuXG4gICAqL1xuICByZWdpc3RlclZpc2VtZUxheWVyKFxuICAgIGxheWVyTmFtZSxcbiAgICB7XG4gICAgICBhbmltYXRpb24gPSAndmlzZW1lcycsXG4gICAgICBkZWNheVJhdGUgPSB7YW1vdW50OiAwLjUsIHNlY29uZHM6IDAuNX0sXG4gICAgICBibGVuZFRpbWUgPSBMaXBzeW5jRmVhdHVyZS5ERUZBVUxUX0xBWUVSX09QVElPTlMuYmxlbmRUaW1lLFxuICAgICAgZWFzaW5nRm4sXG4gICAgICB2aXNlbWVNYXAgPSBEZWZhdWx0VmlzZW1lTWFwLFxuICAgIH0gPSB7fVxuICApIHtcbiAgICAvLyBSZWdpc3RlciB0aGUgbGF5ZXIgYW5kIGFuaW1hdGlvblxuICAgIHRoaXMucmVnaXN0ZXJMYXllcihsYXllck5hbWUsIHtcbiAgICAgIGRlY2F5UmF0ZSxcbiAgICAgIGJsZW5kVGltZSxcbiAgICAgIGVhc2luZ0ZuLFxuICAgICAgYW5pbWF0aW9uczoge1thbmltYXRpb25dOiB7dmlzZW1lTWFwfX0sXG4gICAgfSk7XG4gICAgdGhpcy5fdmlzZW1lTGF5ZXJzW2xheWVyTmFtZV0gPSBhbmltYXRpb247XG5cbiAgICAvLyBWYWxpZGF0ZSB0aGUgdmlzZW1lIGFuaW1hdGlvblxuICAgIHRoaXMuX3JlZ2lzdGVyVmlzZW1lQW5pbWF0aW9uKGxheWVyTmFtZSwgYW5pbWF0aW9uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFydCBrZWVwaW5nIHRyYWNrIG9mIGFuIGFuaW1hdGlvbiBsYXllciB0aGF0IGNvbnRhaW5zIGEgbG9vcGluZyBhbmltYXRpb25cbiAgICogdG8gYmUgcGxheWVkIGR1cmluZyBzcGVlY2guXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllck5hbWUgLSBOYW1lIG9mIHRoZSBsYXllciB0byBrZWVwIHRyYWNrIG9mLlxuICAgKiBAcGFyYW0ge09iamVjdD19IG9wdGlvbnMgLSBPcHRpb25zIGZvciB0aGUgbGF5ZXIuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5hbmltYXRpb249J3N0YW5kX3RhbGsnXSAtIE5hbWUgb2YgdGhlIGFuaW1hdGlvbiBvbiB0aGVcbiAgICogbGF5ZXIgdGhhdCB3aWxsIGJlIHBsYXllZCBkdXJpbmcgc3BlZWNoLlxuICAgKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMuYmxlbmRUaW1lPVtMaXBzeW5jRmVhdHVyZS5ERUZBVUxUX0xBWUVSX09QVElPTlMuYmxlbmRUaW1lXXtAbGluayBMaXBzeW5jRmVhdHVyZSNERUZBVUxUX0xBWUVSX09QVElPTlMjYmxlbmRUaW1lfV0gLVxuICAgKiBEZWZhdWx0IGFtb3VudCBvZiB0aW1lIHRvIHVzZSB3aGVuIG1hbmlwdWxhdGluZyB0aGUgbGF5ZXIncyB3ZWlnaHRzLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb3B0aW9ucy5lYXNpbmdGbiAtIERlZmF1bHQgZWFzaW5nIGZ1bmN0aW9uIHRvIHVzZSB3aGVuXG4gICAqIG1hbmlwdWxhdGluZyB0aGUgbGF5ZXIncyB3ZWlnaHRzLlxuICAgKi9cbiAgcmVnaXN0ZXJUYWxraW5nTGF5ZXIoXG4gICAgbGF5ZXJOYW1lLFxuICAgIHtcbiAgICAgIGFuaW1hdGlvbiA9ICdzdGFuZF90YWxrJyxcbiAgICAgIGJsZW5kVGltZSA9IExpcHN5bmNGZWF0dXJlLkRFRkFVTFRfTEFZRVJfT1BUSU9OUy5ibGVuZFRpbWUsXG4gICAgICBlYXNpbmdGbixcbiAgICB9ID0ge31cbiAgKSB7XG4gICAgLy8gUmVnaXN0ZXIgdGhlIGxheWVyIGFuZCBhbmltYXRpb25cbiAgICB0aGlzLnJlZ2lzdGVyTGF5ZXIobGF5ZXJOYW1lLCB7XG4gICAgICBibGVuZFRpbWUsXG4gICAgICBlYXNpbmdGbixcbiAgICAgIGFuaW1hdGlvbnM6IHtbYW5pbWF0aW9uXToge319LFxuICAgIH0pO1xuICAgIHRoaXMuX3RhbGtpbmdMYXllcnNbbGF5ZXJOYW1lXSA9IGFuaW1hdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgbmFtZXNwYWNlIHRvIHRoZSBob3N0IHdpdGggdGhlIG5hbWUgb2YgdGhlIGZlYXR1cmUgdG8gY29udGFpbiBwcm9wZXJ0aWVzXG4gICAqIGFuZCBtZXRob2RzIGZyb20gdGhlIGZlYXR1cmUgdGhhdCB1c2VycyBvZiB0aGUgaG9zdCBuZWVkIGFjY2VzcyB0by5cbiAgICpcbiAgICogQHNlZSBMaXBzeW5jRmVhdHVyZVxuICAgKi9cbiAgaW5zdGFsbEFwaSgpIHtcbiAgICAvKipcbiAgICAgKiBAaW5uZXJcbiAgICAgKiBAbmFtZXNwYWNlIExpcHN5bmNGZWF0dXJlXG4gICAgICovXG4gICAgY29uc3QgYXBpID0gc3VwZXIuaW5zdGFsbEFwaSgpO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlcm9mIExpcHN5bmNGZWF0dXJlXG4gICAgICogQG5hbWUgcmVnaXN0ZXJMYXllclxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqIEBtZXRob2RcbiAgICAgKiBAc2VlIE1hbmFnZWRBbmltYXRpb25MYXllckludGVyZmFjZSNyZWdpc3RlckxheWVyXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyb2YgTGlwc3luY0ZlYXR1cmVcbiAgICAgKiBAbmFtZSByZWdpc3RlckFuaW1hdGlvblxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqIEBtZXRob2RcbiAgICAgKiBAc2VlIE1hbmFnZWRBbmltYXRpb25MYXllckludGVyZmFjZSNyZWdpc3RlckFuaW1hdGlvblxuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlcm9mIExpcHN5bmNGZWF0dXJlXG4gICAgICogQG5hbWUgc2V0TGF5ZXJXZWlnaHRzXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBzZWUgTWFuYWdlZEFuaW1hdGlvbkxheWVySW50ZXJmYWNlI3NldExheWVyV2VpZ2h0c1xuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlcm9mIExpcHN5bmNGZWF0dXJlXG4gICAgICogQG5hbWUgZW5hYmxlXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBzZWUgTWFuYWdlZEFuaW1hdGlvbkxheWVySW50ZXJmYWNlI2VuYWJsZVxuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlcm9mIExpcHN5bmNGZWF0dXJlXG4gICAgICogQG5hbWUgZGlzYWJsZVxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqIEBtZXRob2RcbiAgICAgKiBAc2VlIE1hbmFnZWRBbmltYXRpb25MYXllckludGVyZmFjZSNkaXNhYmxlXG4gICAgICovXG5cbiAgICBPYmplY3QuYXNzaWduKGFwaSwge1xuICAgICAgLyoqXG4gICAgICAgKiBAbWVtYmVyb2YgTGlwc3luY0ZlYXR1cmVcbiAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICogQG1ldGhvZFxuICAgICAgICogQHNlZSBjb3JlL0xpcHN5bmNGZWF0dXJlI3JlZ2lzdGVyVmlzZW1lTGF5ZXJcbiAgICAgICAqL1xuICAgICAgcmVnaXN0ZXJWaXNlbWVMYXllcjogdGhpcy5yZWdpc3RlclZpc2VtZUxheWVyLmJpbmQodGhpcyksXG4gICAgICAvKipcbiAgICAgICAqIEBtZW1iZXJvZiBMaXBzeW5jRmVhdHVyZVxuICAgICAgICogQGluc3RhbmNlXG4gICAgICAgKiBAbWV0aG9kXG4gICAgICAgKiBAc2VlIGNvcmUvTGlwc3luY0ZlYXR1cmUjcmVnaXN0ZXJUYWxraW5nTGF5ZXJcbiAgICAgICAqL1xuICAgICAgcmVnaXN0ZXJUYWxraW5nTGF5ZXI6IHRoaXMucmVnaXN0ZXJUYWxraW5nTGF5ZXIuYmluZCh0aGlzKSxcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXJvZiBMaXBzeW5jRmVhdHVyZVxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqIEBuYW1lIHZpc2VtZUxlYWRUaW1lXG4gICAgICogQHNlZSBjb3JlL0xpcHN5bmNGZWF0dXJlI3Zpc2VtZUxlYWRUaW1lXG4gICAgICovXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGFwaSwgJ3Zpc2VtZUxlYWRUaW1lJywge1xuICAgICAgZ2V0OiAoKSA9PiB0aGlzLnZpc2VtZUxlYWRUaW1lLFxuICAgICAgc2V0OiBzZWNvbmRzID0+IHtcbiAgICAgICAgdGhpcy52aXNlbWVMZWFkVGltZSA9IHNlY29uZHM7XG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGFwaTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBMaXBzeW5jRmVhdHVyZTtcbmV4cG9ydCB7RGVmYXVsdFZpc2VtZU1hcH07XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xuLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTBcblxuLyogZXNsaW50LWRpc2FibGUgbWF4LWNsYXNzZXMtcGVyLWZpbGUgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLWVtcHR5ICovXG5pbXBvcnQgVGV4dFRvU3BlZWNoRmVhdHVyZURlcGVuZGVudEludGVyZmFjZSBmcm9tICdjb3JlL2F3c3BhY2svVGV4dFRvU3BlZWNoRmVhdHVyZURlcGVuZGVudEludGVyZmFjZSc7XG5cbi8qKlxuICogQ2xhc3MgZmFjdG9yeSBpbnRlcmZhY2UgZm9yIHRoYXQgcmVnaXN0ZXJzIGNhbGxiYWNrIG1ldGhvZCB3aGVuIGEgc3NtbCBzcGVlY2htYXJrIGV2ZW50IGlzIGVtaXR0ZWQuXG4gKlxuICogQGludGVyZmFjZVxuICogQGV4dGVuZHMgVGV4dFRvU3BlZWNoRmVhdHVyZURlcGVuZGVudEludGVyZmFjZVxuICovXG5jbGFzcyBTU01MU3BlZWNobWFya0ludGVyZmFjZSBleHRlbmRzIFRleHRUb1NwZWVjaEZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2Uge1xuICAvKipcbiAgICogV2hlbiBzc21sIGV2ZW50cyBhcmUgY2F1Z2h0LCB0aGlzIHdpbGwgdHJ5IHRvIHBhcnNlIHRoZSBzcGVlY2ggbWFyayB2YWx1ZSBhbmQgZXhlY3V0ZSBhbnkgZnVuY3Rpb24gd2hpY2ggbWVldHMgY3JpdGVyaWEgZGVmaW5lZCBpbiB0aGUgdmFsdWUuXG4gICAqIFNwZWVjaCBtYXJrIHZhbHVlIHdpbGwgYmUgdHJlYXRlZCBhcyBzdHJpbmdpZmllZCBqc29uIGZvcm1hdCBjb250YWluaW5nIHJlcXVpcmVkIGZlYXR1cmUgbmFtZSwgZnVuY3Rpb24gbmFtZSBhbmQgYXJndW1lbnQgYXJyYXkgdG8gcGFzcyBpbi5cbiAgICogRXhhbXBsZSBzcGVlY2ggbWFyayB2YWx1ZSBtaWdodCBsb29rIGxpa2U6ICd7XCJmZWF0dXJlXCI6XCJHZXN0dXJlRmVhdHVyZVwiLCBcIm1ldGhvZFwiOlwic3dpdGNoVG9HZXN0dXJlXCIsIFwiYXJnc1wiOltcImdlbnJpY0FcIiwgMC41XX0nXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBldmVudCAtIEV2ZW50IGRhdGEgcGFzc2VkIGZyb20gdGhlIHNwZWVjaC5cbiAgICogQHBhcmFtIHtPYmplY3R9IGV2ZW50Lm1hcmsgLSBTcGVlY2htYXJrIG9iamVjdC5cbiAgICovXG4gIF9vblNzbWwoe21hcmt9KSB7fVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgY2xhc3MgdGhhdCBpbXBsZW1lbnRzIHtAbGluayBTU01MU3BlZWNobWFya0ludGVyZmFjZX1cbiAgICogYW5kIGV4dGVuZHMgYSBzcGVjaWZpZWQgYmFzZSBjbGFzcy5cbiAgICpcbiAgICogQHBhcmFtIHtDbGFzc30gQmFzZUNsYXNzIC0gVGhlIGNsYXNzIHRvIGV4dGVuZC5cbiAgICpcbiAgICogQHJldHVybiB7Q2xhc3N9IEEgY2xhc3MgdGhhdCBleHRlbmRzIGBCYXNlQ2xhc3NgIGFuZCBpbXBsZW1lbnRzIHtAbGluayBTU01MU3BlZWNobWFya0ludGVyZmFjZX0uXG4gICAqL1xuICBzdGF0aWMgTWl4aW4oQmFzZUNsYXNzKSB7XG4gICAgY29uc3QgUGFyZW50Q2xhc3MgPSBUZXh0VG9TcGVlY2hGZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlLk1peGluKEJhc2VDbGFzcyk7XG4gICAgY29uc3QgU1NNTFNwZWVjaE1hcmtNaXhpbiA9IGNsYXNzIGV4dGVuZHMgUGFyZW50Q2xhc3Mge1xuICAgICAgX29uU3NtbCh7bWFya30pIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCB7ZmVhdHVyZSwgbWV0aG9kLCBhcmdzfSA9IEpTT04ucGFyc2UobWFyay52YWx1ZSk7XG4gICAgICAgICAgaWYgKHRoaXMuY29uc3RydWN0b3IubmFtZSA9PT0gZmVhdHVyZSkge1xuICAgICAgICAgICAgY29uc3QgY2FsbGJhY2sgPSB0aGlzW21ldGhvZF07XG4gICAgICAgICAgICBpZiAoY2FsbGJhY2sgJiYgdHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KHRoaXMsIGFyZ3MpXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjb25zb2xlLndhcm4oYEZ1bmN0aW9uICR7bWV0aG9kfSBkb2VzIG5vdCBleGlzdCB3aXRoaW4gZmVhdHVyZSAke2ZlYXR1cmV9YClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2goZSkge31cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIFNTTUxTcGVlY2hNYXJrTWl4aW47XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgU1NNTFNwZWVjaG1hcmtJbnRlcmZhY2U7XG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxuaW1wb3J0IE1hbmFnZWRBbmltYXRpb25MYXllckludGVyZmFjZSBmcm9tICcuL2FuaW1wYWNrL01hbmFnZWRBbmltYXRpb25MYXllckludGVyZmFjZSc7XG5pbXBvcnQgU1NNTFNwZWVjaG1hcmtJbnRlcmZhY2UgZnJvbSAnLi9hd3NwYWNrL1NTTUxTcGVlY2htYXJrSW50ZXJmYWNlJztcbmltcG9ydCBBYnN0cmFjdEhvc3RGZWF0dXJlIGZyb20gJy4vQWJzdHJhY3RIb3N0RmVhdHVyZSc7XG5pbXBvcnQgRGVmZXJyZWQgZnJvbSAnLi9EZWZlcnJlZCc7XG5pbXBvcnQgVXRpbHMgZnJvbSAnLi9VdGlscyc7XG5cbmNvbnN0IERlZmF1bHRHZXN0dXJlV29yZHMgPSB7XG4gIGJpZzogW1xuICAgICdhZGQnLFxuICAgICdhYm92ZScsXG4gICAgJ2F1dGhvcml0eScsXG4gICAgJ2JpZycsXG4gICAgJ2NvdmVyJyxcbiAgICAnZnVsbCcsXG4gICAgJ2ZseScsXG4gICAgJ2dyb3cnLFxuICAgICdncm93dGgnLFxuICAgICdoaWdoJyxcbiAgICAnaHVnZScsXG4gICAgJ2luY3JlYXNlJyxcbiAgICAnbWFqb3InLFxuICAgICdtYWpvcml0eScsXG4gICAgJ2xhcmdlJyxcbiAgICAnbGVhZGVyJyxcbiAgICAnbG90JyxcbiAgICAncmFpc2UnLFxuICAgICdyaXNlJyxcbiAgICAndGFsbCcsXG4gIF0sXG4gIGhlYXJ0OiBbXG4gICAgJ2FjY2VwdCcsXG4gICAgJ2FkbWl0JyxcbiAgICAnYmVsaWV2ZScsXG4gICAgJ2NhcmUnLFxuICAgICdmZWVsaW5nJyxcbiAgICAnZmVlbCcsXG4gICAgJ2ZyaWVuZCcsXG4gICAgJ2dyYXRlZnVsJyxcbiAgICAnaGFwcHknLFxuICAgICdoZWFydCcsXG4gICAgJ2h1bWFuJyxcbiAgICAncGFpbicsXG4gICAgJ3NhdmUnLFxuICAgICdzYWZlJyxcbiAgICAna2luZCcsXG4gICAgJ2xvdmUnLFxuICBdLFxuICBpbjogW1xuICAgICdpbmNsdWRlJyxcbiAgICAnaW5jbHVkaW5nJyxcbiAgICAnaW5zaWRlJyxcbiAgICAnaW50bycsXG4gICAgJ25vdycsXG4gICAgJ25lYXInLFxuICAgICduZWFyZXN0JyxcbiAgICAnY2xvc2VzdCcsXG4gICAgJ3RoZXJlaW4nLFxuICAgICd3aXRoaW4nLFxuICBdLFxuICBtYW55OiBbXG4gICAgJ2FsbCcsXG4gICAgJ2Fsd2F5cycsXG4gICAgJ2FueScsXG4gICAgJ2FueW9uZScsXG4gICAgJ2Ftb25nJyxcbiAgICAnYXJlYScsXG4gICAgJ2Fyb3VuZCcsXG4gICAgJ2JlYXV0aWZ1bCcsXG4gICAgJ2VudGlyZScsXG4gICAgJ2Vudmlyb25tZW50JyxcbiAgICAnZW52aXJvbm1lbnRzJyxcbiAgICAnZW52aXJvbm1lbnRhbCcsXG4gICAgJ2V2ZXJ5Ym9keScsXG4gICAgJ2V2ZXJ5b25lJyxcbiAgICAnZXZlcnl0aGluZycsXG4gICAgJ2F1ZGllbmNlJyxcbiAgICAndG90YWwnLFxuICAgICdncm91cCcsXG4gICAgJ2dyb3VwcycsXG4gICAgJ21pbGxpb24nLFxuICAgICdtaWxsaW9ucycsXG4gICAgJ290aGVycycsXG4gICAgJ2JpbGxpb24nLFxuICAgICdiaWxsaW9ucycsXG4gICAgJ2h1bmRyZWQnLFxuICAgICdodW5kcmVkcycsXG4gICAgJ21hbnknLFxuICAgICd0aG91c2FuZCcsXG4gICAgJ3Rob3VzYW5kcycsXG4gICAgJ3dvcmxkJyxcbiAgICAnd29ybGRzJyxcbiAgICAnb3V0c2lkZScsXG4gICAgJ3JldmVhbCcsXG4gIF0sXG4gIG1vdmVtZW50OiBbXG4gICAgJ2F3YXknLFxuICAgICdhY3Jvc3MnLFxuICAgICdhaGVhZCcsXG4gICAgJ2Fsb25nJyxcbiAgICAnZmFyJyxcbiAgICAnZmFzdCcsXG4gICAgJ2ZvbGxvdycsXG4gICAgJ2dvJyxcbiAgICAnbGVhdmUnLFxuICAgICdtb3ZlJyxcbiAgICAnbW92ZW1lbnQnLFxuICAgICd0aHJvdWdoJyxcbiAgICAndGhyb3VnaG91dCcsXG4gICAgJ3Rvd2FyZCcsXG4gICAgJ3RyYXZlbCcsXG4gICAgJ3R1cm5lZCcsXG4gICAgJ3Bhc3NlZCcsXG4gIF0sXG4gIG9uZTogW1xuICAgICdzaW5nbGUnLFxuICAgICdvbmUnLFxuICAgICdvbmNlJyxcbiAgICAnZmlyc3QnLFxuICAgICdmaXJzdGx5JyxcbiAgICAnb25seScsXG4gICAgJ3NvbG8nLFxuICAgICd3YXJuZWQnLFxuICAgICd0cnVseScsXG4gICAgJ3VwJyxcbiAgICAnYWxvbmUnLFxuICBdLFxuICBhZ2dyZXNzaXZlOiBbXG4gICAgJ3Bvd2VyJyxcbiAgICAncG93ZXJzJyxcbiAgICAncG93ZXJmdWwnLFxuICAgICdhc3NlcnQnLFxuICAgICdhc3NlcnRpdmUnLFxuICAgICdzdHJvbmcnLFxuICAgICdzdHJvbmdlcicsXG4gICAgJ3N0cm9uZ2VzdCcsXG4gICAgJ3N0cmVuZ3RoJyxcbiAgICAnZmxleCcsXG4gICAgJ2RhbmcnLFxuICAgICdkYW1uJyxcbiAgICAnZGFtbml0JyxcbiAgICAnZGFybicsXG4gICAgJ3NodWNrcycsXG4gICAgJ2RvaCcsXG4gICAgJ2RyYXQnLFxuICAgICdhbmdyeScsXG4gICAgJ2FuZ3JpZXInLFxuICAgICdhbmdyaWVzdCcsXG4gICAgJ2FnZ3Jlc3NpdmUnLFxuICAgICdhbm5veWVkJyxcbiAgICAnYW5ub3lpbmcnLFxuICAgICdhdHRhY2snLFxuICAgICdhdHRhY2tpbmcnLFxuICAgICdvZmZlbnNlJyxcbiAgICAnb2ZmZW5zaXZlJyxcbiAgICAnYmF0dGxlJyxcbiAgXSxcbiAgeW91OiBbJ3lvdScsICd5YWxsJywgXCJ5J2FsbFwiLCAneW91cicsICd5b3VycycsICd0aG91JywgJ3RoeSddLFxuICBkZWZlbnNlOiBbXG4gICAgJ2RlZmVuc2UnLFxuICAgICdmZWFyJyxcbiAgICAncmVwdWxzZWQnLFxuICAgICdzY2FyZWQnLFxuICAgICdzY2FyeScsXG4gICAgJ3NjYXJpZXInLFxuICAgICdzY2FyaWVzdCcsXG4gICAgJ2ZlYXJmdWwnLFxuICAgICdhZnJhaWQnLFxuICAgICdjb3dlcicsXG4gICAgJ2Nvd2VycycsXG4gICAgJ2Nvd2VyaW5nJyxcbiAgICAnaGlkZW91cycsXG4gICAgJ2Rvb21lZCcsXG4gICAgJ3RlcnJpZmllZCcsXG4gICAgJ3RlcnJpZnknLFxuICAgICd0ZXJyaWZ5aW5nJyxcbiAgICAndGVycmlmaWVzJyxcbiAgICAnc3Bvb2t5JyxcbiAgICAnc3Bvb2tpZXInLFxuICAgICdzcG9va2llc3QnLFxuICBdLFxuICB3YXZlOiBbXG4gICAgJ2hlbGxvJyxcbiAgICAnaGknLFxuICAgICdoaXlhJyxcbiAgICAnaG93ZHknLFxuICAgICd3ZWxjb21lJyxcbiAgICAnYWxvaGEnLFxuICAgICdoZXlhJyxcbiAgICAnaGV5JyxcbiAgICAnYnllJyxcbiAgICAnZ29vZGJ5ZScsXG4gICAgJ2hvbGEnLFxuICAgICdhZGlvcycsXG4gICAgJ2NoYW8nLFxuICBdLFxuICBzZWxmOiBbJ215JywgJ0knLCAnbXlzZWxmJywgJ3NlbGYnLCBcIkkndmVcIiwgJ0l2ZScsICdtZScsICdtaW5lJywgJ293biddLFxufTtcblxuLyoqXG4gKiBHZXN0dXJlIGFsbG93cyB5b3UgdG8gcGxheSBhbmltYXRpb25zIG9uIGRlbWFuZCBvbiBvbmUgb3IgbW9yZSBsYXllcnMgZnJvbSBzY3JpcHRcbiAqIG9yIHNzbWwuIElmIGdlc3R1cmUgaXMgcGxheWVkIHRoYXQgaXMgYSBRdWV1ZVN0YXRlLCB0aGUgcXVldWUgd2lsbCBhdXRvbWF0aWNhbGx5XG4gKiBiZSBwcm9ncmVzc2VkIGFmdGVyIGEgZ2l2ZW4gaG9sZCB0aW1lIGlmIGEgbG9vcGluZyBxdWV1ZWQgc3RhdGUgaXMgcmVhY2hlZC4gR2VzdHVyZVxuICogbGF5ZXJzIGNhbiBvcHRpb25hbGx5IGJlIGF1dG9tYXRpY2FsbHkgZGlzYWJsZWQgd2hlbiBubyBnZXN0dXJlIGFuaW1hdGlvbiBpc1xuICogaW4gcHJvZ3Jlc3MuXG4gKlxuICogQGV4dGVuZHMgQWJzdHJhY3RIb3N0RmVhdHVyZVxuICogQGltcGxlbWVudHMgU1NNTFNwZWVjaG1hcmtJbnRlcmZhY2VcbiAqIEBpbXBsZW1lbnRzIE1hbmFnZWRBbmltYXRpb25MYXllckludGVyZmFjZVxuICovXG5jbGFzcyBHZXN0dXJlRmVhdHVyZSBleHRlbmRzIEFic3RyYWN0SG9zdEZlYXR1cmUubWl4KFxuICBTU01MU3BlZWNobWFya0ludGVyZmFjZS5NaXhpbixcbiAgTWFuYWdlZEFuaW1hdGlvbkxheWVySW50ZXJmYWNlLk1peGluXG4pIHtcbiAgLyoqXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKlxuICAgKiBAcGFyYW0ge2NvcmUvSG9zdE9iamVjdH0gaG9zdCAtIEhvc3Qgb2JqZWN0IHRoYXQgb3ducyB0aGUgZmVhdHVyZS5cbiAgICogQHBhcmFtIHtPYmplY3Q9fSBvcHRpb25zIC0gT3B0aW9uYWwgb3B0aW9ucyBmb3IgdGhlIGZlYXR1cmUuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5ob2xkVGltZSA9IDNdIC0gQW1vdW50IG9mIHRpbWUgaW4gc2Vjb25kcyB0aGF0IG11c3RcbiAgICogZWxhcHNlIGJlZm9yZSBhZHZhbmNpbmcgYSBnZXN0dXJlIHRoYXQncyBhIHtAbGluayBRdWV1ZVN0YXRlfSB3aGVuIHRoZSBjdXJyZW50XG4gICAqIHN0YXRlIGluIHRoZSBxdWV1ZSBpcyBzZXQgdG8gbG9vcCBpbmZpbml0ZWx5LlxuICAgKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMubWluaW11bUludGVydmFsID0gMC4yNV0gLSBUaGUgbWluaW11bSBhbW91bnQgb2YgdGltZVxuICAgKiBpbiBzZWNvbmRzIHRoYXQgbXVzdCBlbGFwc2UgYmVmb3JlIGFub3RoZXIgZ2VzdHVyZSBjYW4gYmUgcGxheWVkLlxuICAgKiBAcGFyYW0gIHtPYmplY3R9IGxheWVycyAtIEFuIG9iamVjdCB0aGF0IG1hcHMgbGF5ZXIgbmFtZXMgdG8gbGF5ZXIgb3B0aW9ucy5cbiAgICogVGhlc2UgYXJlIHRoZSBsYXllcnMgdGhhdCB3aWxsIGJlIHJlZ2lzdGVyZWQgYXMgdHJhY2tlZCBnZXN0dXJlIGxheWVycy4gU2VlXG4gICAqIHtAbGluayBNYW5hZ2VkQW5pbWF0aW9uTGF5ZXJJbnRlcmZhY2UjcmVnaXN0ZXJMYXllcn0gZm9yIG1vcmUgaW5mb3JtYXRpb25cbiAgICogb24gZXhwZWN0ZWQgZm9ybWF0IGZvciBlYWNoIGxheWVyIG9wdGlvbnMgb2JqZWN0LlxuICAgKi9cbiAgY29uc3RydWN0b3IoaG9zdCwge2hvbGRUaW1lID0gMywgbWluaW11bUludGVydmFsID0gMSwgbGF5ZXJzID0ge319ID0ge30pIHtcbiAgICBzdXBlcihob3N0KTtcblxuICAgIHRoaXMuaG9sZFRpbWUgPSBob2xkVGltZTtcbiAgICB0aGlzLm1pbmltdW1JbnRlcnZhbCA9IG1pbmltdW1JbnRlcnZhbDtcblxuICAgIC8vIFJlZ2lzdGVyIHRoZSBnZXN0dXJlIGxheWVyc1xuICAgIE9iamVjdC5lbnRyaWVzKGxheWVycykuZm9yRWFjaCgoW25hbWUsIG9wdGlvbnMgPSB7fV0pID0+IHtcbiAgICAgIHRoaXMucmVnaXN0ZXJMYXllcihuYW1lLCBvcHRpb25zKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSB2YWxpZCBob2xkIHRpbWUgdmFsdWUuIElmIGhvbGQgdGltZSBpc24ndCBkZWZpbmVkIGZvciB0aGUgYW5pbWF0aW9uLFxuICAgKiB0cnkgdG8gdXNlIHRoZSBob2xkIHRpbWUgZm9yIHRoZSBsYXllci4gSWYgdGhhdCdzIG5vdCBkZWZpbmVkLCBmYWxsIGJhY2sgdG9cbiAgICogdGhlIGhvbGQgdGltZSBmb3IgdGhlIGZlYXR1cmUuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBsYXllciAtIE1hbmFnZWQgbGF5ZXIgb3B0aW9ucyBvYmplY3QuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBhbmltYXRpb24gLSBNYW5hZ2VkIGFuaW1hdGlvbiBvcHRpb25zIG9iamVjdC5cbiAgICpcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIF9nZXRIb2xkVGltZShsYXllciwgYW5pbWF0aW9uKSB7XG4gICAgY29uc3QgbGF5ZXJIb2xkVGltZSA9XG4gICAgICBsYXllci5ob2xkVGltZSAhPT0gdW5kZWZpbmVkID8gbGF5ZXIuaG9sZFRpbWUgOiB0aGlzLmhvbGRUaW1lO1xuXG4gICAgcmV0dXJuIGFuaW1hdGlvbi5ob2xkVGltZSAhPT0gdW5kZWZpbmVkXG4gICAgICA/IGFuaW1hdGlvbi5ob2xkVGltZVxuICAgICAgOiBsYXllckhvbGRUaW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIHZhbGlkIG1pbmltdW0gaW50ZXJ2YWwgdmFsdWUuIElmIG1pbmltdW0gaW50ZXJ2YWwgaXNuJ3QgZGVmaW5lZCBmb3JcbiAgICogdGhlIGFuaW1hdGlvbiwgdHJ5IHRvIHVzZSB0aGUgbWluaW11bSBpbnRlcnZhbCBmb3IgdGhlIGxheWVyLiBJZiB0aGF0J3Mgbm90XG4gICAqIGRlZmluZWQsIGZhbGwgYmFjayB0byB0aGUgbWluaW11bSBpbnRlcnZhbCBmb3IgdGhlIGZlYXR1cmUuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBsYXllciAtIE1hbmFnZWQgbGF5ZXIgb3B0aW9ucyBvYmplY3QuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBhbmltYXRpb24gLSBNYW5hZ2VkIGFuaW1hdGlvbiBvcHRpb25zIG9iamVjdC5cbiAgICpcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIF9nZXRNaW5pbXVtSW50ZXJ2YWwobGF5ZXIsIGFuaW1hdGlvbikge1xuICAgIGNvbnN0IGxheWVyTWluaW11bUludGVydmFsID1cbiAgICAgIGxheWVyLm1pbmltdW1JbnRlcnZhbCAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8gbGF5ZXIubWluaW11bUludGVydmFsXG4gICAgICAgIDogdGhpcy5taW5pbXVtSW50ZXJ2YWw7XG5cbiAgICByZXR1cm4gYW5pbWF0aW9uLm1pbmltdW1JbnRlcnZhbCAhPT0gdW5kZWZpbmVkXG4gICAgICA/IGFuaW1hdGlvbi5taW5pbXVtSW50ZXJ2YWxcbiAgICAgIDogbGF5ZXJNaW5pbXVtSW50ZXJ2YWw7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbGJhY2sgZm9yIHtAbGluayBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjcGxheU5leHRBbmltYXRpb259IGV2ZW50LiBJZiB0aGVcbiAgICogZXZlbnQgaXMgZW1pdHRlZCBmb3IgYSBtYW5hZ2VkIGFuaW1hdGlvbiBhbmQgdGhlIG5ldyBxdWV1ZWQgc3RhdGUgY2Fubm90XG4gICAqIGFkdmFuY2Ugb24gaXRzIG93biwgc3RhcnQgYSBuZXcgdGltZXIgcHJvbWlzZSB0aGF0IHdpbGwgYWR2YW5jZSB0aGUgcXVldWVcbiAgICogb25jZSBpdCByZXNvbHZlcy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBPcHRpb25zIG9iamVjdCBwYXNzZWQgZnJvbSBwbGF5TmV4dEFuaW1hdGlvbiBldmVudC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVyTmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRoYXQgb3ducyB0aGUgcXVldWUgc3RhdGUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhbmltYXRpb25OYW1lIC0gTmFtZSBvZiB0aGUgcXVldWUgc3RhdGUgYW5pbWF0aW9uLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGNhbkFkdmFuY2UgLSBXaGV0aGVyIG9yIG5vdCB0aGUgY3VycmVudCBzdGF0ZSBpbiB0aGUgcXVldWVcbiAgICogY2FuIGFkdmFuY2Ugb24gaXRzIG93bi5cbiAgICogQHBhcmFtIHtib29sZWFufSBpc1F1ZXVlRW5kIC0gV2hldGhlciB0aGUgY3VycmVudCBzdGF0ZSBpbiB0aGUgcXVldWUgaXMgdGhlIGxhc3RcbiAgICogc3RhdGUgaW4gdGhlIHF1ZXVlLlxuICAgKi9cbiAgX29uTmV4dCh7bGF5ZXJOYW1lLCBhbmltYXRpb25OYW1lLCBjYW5BZHZhbmNlLCBpc1F1ZXVlRW5kfSkge1xuICAgIC8vIEV4aXQgaWYgdGhpcyBpc24ndCBhIG1hbmFnZWQgbGF5ZXJcbiAgICBjb25zdCBsYXllciA9IHRoaXMuX21hbmFnZWRMYXllcnNbbGF5ZXJOYW1lXTtcbiAgICBpZiAobGF5ZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEV4aXQgaWYgaXQgaXNuJ3QgYSBtYW5hZ2VkIGFuaW1hdGlvblxuICAgIGNvbnN0IGFuaW1hdGlvbiA9IGxheWVyLmFuaW1hdGlvbnNbYW5pbWF0aW9uTmFtZV07XG4gICAgaWYgKGFuaW1hdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gU3RhcnQgYSBuZXcgdGltZXIgZm9yIGxvb3Bpbmcgc3RhdGVzIHRoYXQgYXJlbid0IHRoZSBlbmQgb2YgdGhlIHF1ZXVlXG4gICAgaWYgKCFjYW5BZHZhbmNlICYmICFpc1F1ZXVlRW5kICYmIGxheWVyLmN1cnJlbnRHZXN0dXJlID09PSBhbmltYXRpb25OYW1lKSB7XG4gICAgICBjb25zdCBob2xkVGltZSA9IHRoaXMuX2dldEhvbGRUaW1lKGxheWVyLCBhbmltYXRpb24pO1xuICAgICAgbGF5ZXIuaG9sZFRpbWVyLmNhbmNlbCgpO1xuXG4gICAgICAvLyBTa2lwIHRvIHRoZSBuZXh0IGFuaW1hdGlvbiByaWdodCBhd2F5IGlmIGhvbGQgdGltZSBpcyB6ZXJvXG4gICAgICBpZiAoaG9sZFRpbWUgPD0gMCkge1xuICAgICAgICB0aGlzLl9ob3N0LkFuaW1hdGlvbkZlYXR1cmUucGxheU5leHRBbmltYXRpb24obGF5ZXJOYW1lLCBhbmltYXRpb25OYW1lKTtcbiAgICAgIH1cblxuICAgICAgLy8gV2FpdCBmb3IgdGhlIGdpdmVuIGhvbGQgdGltZSBiZWZvcmUgcHJvZ3Jlc3NpbmdcbiAgICAgIGVsc2Uge1xuICAgICAgICBsYXllci5ob2xkVGltZXIgPSBVdGlscy53YWl0KGhvbGRUaW1lLCB7XG4gICAgICAgICAgb25GaW5pc2g6ICgpID0+IHtcbiAgICAgICAgICAgIC8vIEFkdmFuY2UgdGhlIHF1ZXVlIHRvIHRoZSBuZXh0IHN0YXRlXG4gICAgICAgICAgICBpZiAobGF5ZXIuY3VycmVudEdlc3R1cmUgPT09IGFuaW1hdGlvbk5hbWUpIHtcbiAgICAgICAgICAgICAgdGhpcy5faG9zdC5BbmltYXRpb25GZWF0dXJlLnBsYXlOZXh0QW5pbWF0aW9uKFxuICAgICAgICAgICAgICAgIGxheWVyTmFtZSxcbiAgICAgICAgICAgICAgICBhbmltYXRpb25OYW1lXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIGZvciB7QGxpbmsgY29yZS9BbmltYXRpb25GZWF0dXJlI3N0b3BBbmltYXRpb259IGV2ZW50LiBJZiB0aGVcbiAgICogZXZlbnQgaXMgZW1pdHRlZCBmb3IgYSBtYW5hZ2VkIGFuaW1hdGlvbiBjYW5jZWwgdGhlIGxheWVyJ3Mgc3RvcmVkIHRpbWVycy5cbiAgICogSWYgdGhlIGxheWVyIGlzIHNldCB0byBhdXRvLWRpc2FibGUgc2V0IGl0cyB3ZWlnaHQgdG8gMC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBPcHRpb25zIG9iamVjdCBwYXNzZWQgZnJvbSBwbGF5TmV4dEFuaW1hdGlvbiBldmVudC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVyTmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRoYXQgb3ducyB0aGUgc3RvcHBlZCBhbmltYXRpb24uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhbmltYXRpb25OYW1lIC0gTmFtZSBvZiB0aGUgYW5pbWF0aW9uIHRoYXQgd2FzIHN0b3BwZWQuXG4gICAqL1xuICBfb25TdG9wKHtsYXllck5hbWUsIGFuaW1hdGlvbk5hbWV9KSB7XG4gICAgLy8gTWFrZSBzdXJlIHRoZSBsYXllciBpcyBtYW5hZ2VkXG4gICAgY29uc3QgbGF5ZXIgPSB0aGlzLl9tYW5hZ2VkTGF5ZXJzW2xheWVyTmFtZV07XG4gICAgaWYgKGxheWVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBNYWtlIHN1cmUgdGhlIGFuaW1hdGlvbiBpcyBtYW5hZ2VkXG4gICAgY29uc3QgYW5pbWF0aW9uID0gbGF5ZXIuYW5pbWF0aW9uc1thbmltYXRpb25OYW1lXTtcbiAgICBpZiAoYW5pbWF0aW9uICE9PSB1bmRlZmluZWQgJiYgYW5pbWF0aW9uTmFtZSA9PT0gbGF5ZXIuY3VycmVudEdlc3R1cmUpIHtcbiAgICAgIGxheWVyLmN1cnJlbnRHZXN0dXJlID0gbnVsbDtcbiAgICAgIGxheWVyLnBsYXlUaW1lciA9IG51bGw7XG4gICAgICBsYXllci5ob2xkVGltZXIuY2FuY2VsKCk7XG5cbiAgICAgIC8vIFR1cm4gb2ZmIGxheWVyIHdlaWdodFxuICAgICAgaWYgKGxheWVyLmF1dG9EaXNhYmxlKSB7XG4gICAgICAgIHRoaXMuc2V0TGF5ZXJXZWlnaHRzKG5hbWUgPT4gbmFtZSA9PT0gbGF5ZXJOYW1lLCAwKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBfb25BbmltYXRpb25BZGRlZCh7bGF5ZXJOYW1lLCBhbmltYXRpb25OYW1lfSkge1xuICAgIGNvbnN0IGxheWVyID0gdGhpcy5fbWFuYWdlZExheWVyc1tsYXllck5hbWVdO1xuXG4gICAgaWYgKGxheWVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IGFuaW1hdGlvbiA9IGxheWVyLmFuaW1hdGlvbnNbYW5pbWF0aW9uTmFtZV07XG5cbiAgICAgIC8vIFJlZ2lzdGVyIHRoZSBhbmltYXRpb24gYXMgYWN0aXZlIGlmIGl0IGlzIHVubWFuYWdlZFxuICAgICAgaWYgKGFuaW1hdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJBbmltYXRpb24obGF5ZXJOYW1lLCBhbmltYXRpb25OYW1lKTtcbiAgICAgIH1cbiAgICAgIC8vIE1hcmsgdGhlIGFuaW1hdGlvbiBhcyBhY3RpdmUgaWYgaXQgaXMgbWFuYWdlZFxuICAgICAgZWxzZSB7XG4gICAgICAgIGFuaW1hdGlvbi5pc0FjdGl2ZSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmVnaXN0ZXJMYXllcihuYW1lLCBvcHRpb25zID0ge30pIHtcbiAgICBzdXBlci5yZWdpc3RlckxheWVyKG5hbWUsIHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBob2xkVGltZXI6IERlZmVycmVkLnJlc29sdmUoKSxcbiAgICAgIHBsYXlUaW1lcjogbnVsbCxcbiAgICAgIGN1cnJlbnRHZXN0dXJlOiBudWxsLFxuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMuX21hbmFnZWRMYXllcnNbbmFtZV0uaXNBY3RpdmUpIHtcbiAgICAgIHRoaXMuX2hvc3QuQW5pbWF0aW9uRmVhdHVyZS5nZXRBbmltYXRpb25zKG5hbWUpLmZvckVhY2goYW5pbSA9PiB7XG4gICAgICAgIC8vIEF1dG9tYXRpY2FsbHkgcmVnaXN0ZXIgYWxsIGFuaW1hdGlvbnMgb24gdGhlIGxheWVyXG4gICAgICAgIGlmICh0aGlzLl9tYW5hZ2VkTGF5ZXJzW25hbWVdLmFuaW1hdGlvbnNbYW5pbV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRoaXMucmVnaXN0ZXJBbmltYXRpb24oXG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgYW5pbSxcbiAgICAgICAgICAgIHRoaXMuX21hbmFnZWRMYXllcnNbbmFtZV0uYW5pbWF0aW9uc1thbmltXVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHJlZ2lzdGVyQW5pbWF0aW9uKGxheWVyTmFtZSwgYW5pbWF0aW9uTmFtZSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgLy8gVHJ5IHRvIGZhbGwgYmFjayB0byBhIGRlZmF1bHQgd29yZCBhcnJheVxuICAgIGlmICghKG9wdGlvbnMud29yZHMgaW5zdGFuY2VvZiBBcnJheSkgJiYgIShvcHRpb25zLndvcmRzIGluc3RhbmNlb2YgU2V0KSkge1xuICAgICAgb3B0aW9ucy53b3JkcyA9IERlZmF1bHRHZXN0dXJlV29yZHNbYW5pbWF0aW9uTmFtZV0gfHwgW107XG4gICAgfVxuXG4gICAgc3VwZXIucmVnaXN0ZXJBbmltYXRpb24obGF5ZXJOYW1lLCBhbmltYXRpb25OYW1lLCBvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gb2JqZWN0IHRoYXQgbWFwcyBzc21sIG1hcmsgc3ludGF4IHJlcXVpcmVkIHRvIHBsYXkgZWFjaCBnZXN0dXJlIHRvXG4gICAqIHRoZSB3b3JkcyBhcnJheSBhc3NvY2lhdGVkIHdpdGggZWFjaCBnZXN0dXJlLiBXb3JkcyBhcnJheXMgYXJlIGRlZmluZWQgYXQgd2hlblxuICAgKiB0aGUgZ2VzdHVyZSBhbmltYXRpb24gaXMgcmVnaXN0ZXJlZC4gR2VzdHVyZXMgd2l0aG91dCBhc3NvY2lhdGVkIHdvcmRzIHdpbGxcbiAgICogYmUgZXhjbHVkZWQgZnJvbSB0aGUgcmVzdWx0LiBUaGUgcmVzdWx0aW5nIG9iamVjdCBjYW4gYmUgdXNlZCBhcyBhbiBpbnB1dFxuICAgKiBmb3Ige0BsaW5rIFRleHRUb1NwZWVjaFV0aWxzLmF1dG9HZW5lcmF0ZVNTTUxNYXJrc30gdG8gdXBkYXRlIGEgc3BlZWNoIHN0cmluZ1xuICAgKiB3aXRoIHRoZSBtYXJrdXAgcmVxdWlyZWQgdG8gcGxheSBnZXN0dXJlcyB0aW1lZCB3aXRoIHRoZWlyIGFzc29jaWF0ZWQgd29yZHMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtPYmplY3R9XG4gICAqL1xuICBjcmVhdGVHZXN0dXJlTWFwKCkge1xuICAgIGNvbnN0IGdlc3R1cmVNYXAgPSB7fTtcblxuICAgIE9iamVjdC5lbnRyaWVzKHRoaXMuX21hbmFnZWRMYXllcnMpLmZvckVhY2goKFtsYXllck5hbWUsIHthbmltYXRpb25zfV0pID0+IHtcbiAgICAgIE9iamVjdC5lbnRyaWVzKGFuaW1hdGlvbnMpLmZvckVhY2goXG4gICAgICAgIChbXG4gICAgICAgICAgYW5pbWF0aW9uTmFtZSxcbiAgICAgICAgICB7aG9sZFRpbWUsIG1pbmltdW1JbnRlcnZhbCwgd29yZHMsIHRyYW5zaXRpb25UaW1lfSxcbiAgICAgICAgXSkgPT4ge1xuICAgICAgICAgIC8vIE9ubHkgc3RvcmUgZ2VzdHVyZXMgdGhhdCBoYXZlIGFueSBhc3NvY2lhdGVkIHdvcmRzXG4gICAgICAgICAgaWYgKHdvcmRzLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgLi4uKGhvbGRUaW1lICYmIHsgaG9sZFRpbWUgfSksXG4gICAgICAgICAgICAgIC4uLihtaW5pbXVtSW50ZXJ2YWwgJiYgeyBtaW5pbXVtSW50ZXJ2YWwgfSksXG4gICAgICAgICAgICAgIC4uLih0cmFuc2l0aW9uVGltZSAmJiB7IHRyYW5zaXRpb25UaW1lIH0pLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IHtcbiAgICAgICAgICAgICAgZmVhdHVyZTogdGhpcy5jb25zdHJ1Y3Rvci5uYW1lLFxuICAgICAgICAgICAgICBtZXRob2Q6ICdwbGF5R2VzdHVyZScsXG4gICAgICAgICAgICAgIGFyZ3M6IFtsYXllck5hbWUsIGFuaW1hdGlvbk5hbWUsIG9wdGlvbnNdLFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgZ2VzdHVyZU1hcFtKU09OLnN0cmluZ2lmeShrZXkpXSA9IHdvcmRzO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBnZXN0dXJlTWFwO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBhcnJheSB0aGF0IGNvbnRhaW5zIHNzbWwgbWFyayBzeW50YXggcmVxdWlyZWQgdG8gcGxheSBlYWNoIGdlc3R1cmVcbiAgICogdGhhdCBkb2VzIG5vdCBoYXZlIGFueSBhc3NvY2lhdGVkIHdvcmRzLiBUaGUgcmVzdWx0aW5nIGFycmF5IGNhbiBiZSB1c2VkIGFzXG4gICAqIGFuIGlucHV0IGZvciB7QGxpbmsgVGV4dFRvU3BlZWNoVXRpbHMuYXV0b0dlbmVyYXRlU1NNTE1hcmtzfSBvclxuICAgKiB7QGxpbmsgVGV4dFRvU3BlZWNoVXRpbHMuYWRkTWFya3NUb1VubWFya2VkU2VudGVuY2VzfSB0byB1cGRhdGUgYSBzcGVlY2hcbiAgICogc3RyaW5nIHdpdGggdGhlIG1hcmt1cCByZXF1aXJlZCB0byBwbGF5IHJhbmRvbSBnZXN0dXJlcyBhdCBlYWNoIHVubWFya2VkXG4gICAqIHNlbnRlbmNlIGluIHRoZSBzdHJpbmcuXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkuPHN0cmluZz49fSBsYXllcnMgLSBBbiBhcnJheSBvZiBuYW1lcyBvZiBtYW5hZ2VkIGxheWVycyB0byBnZW5lcmF0ZVxuICAgKiBtYXJrcyBmb3IuIElmIHVuZGVmaW5lZCwgdXNlIGFsbCBtYW5hZ2VkIGxheWVycy5cbiAgICpcbiAgICogQHJldHVybnMge0FycmF5LjxzdHJpbmc+fVxuICAgKi9cbiAgY3JlYXRlR2VuZXJpY0dlc3R1cmVBcnJheShsYXllcnMpIHtcbiAgICBjb25zdCBnZW5lcmljR2VzdHVyZXMgPSBbXTtcbiAgICBsYXllcnMgPSBsYXllcnMgfHwgT2JqZWN0LmtleXModGhpcy5fbWFuYWdlZExheWVycyk7XG5cbiAgICBsYXllcnMuZm9yRWFjaChsYXllck5hbWUgPT4ge1xuICAgICAgY29uc3QgbGF5ZXIgPSB0aGlzLl9tYW5hZ2VkTGF5ZXJzW2xheWVyTmFtZV07XG5cbiAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgbGF5ZXIgaXMgbWFuYWdlZFxuICAgICAgaWYgKCFsYXllcikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIE9iamVjdC5lbnRyaWVzKGxheWVyLmFuaW1hdGlvbnMpLmZvckVhY2goXG4gICAgICAgIChbXG4gICAgICAgICAgYW5pbWF0aW9uTmFtZSxcbiAgICAgICAgICB7IGhvbGRUaW1lLCBtaW5pbXVtSW50ZXJ2YWwsIHdvcmRzLCB0cmFuc2l0aW9uVGltZSB9LFxuICAgICAgICBdKSA9PiB7XG4gICAgICAgICAgLy8gT25seSBzdG9yZSBnZXN0dXJlcyB0aGF0IGRvbid0IGhhdmUgYW55IGFzc29jaWF0ZWQgd29yZHNcbiAgICAgICAgICBpZiAoIXdvcmRzLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgLi4uKGhvbGRUaW1lICYmIHsgaG9sZFRpbWUgfSksXG4gICAgICAgICAgICAgIC4uLihtaW5pbXVtSW50ZXJ2YWwgJiYgeyBtaW5pbXVtSW50ZXJ2YWwgfSksXG4gICAgICAgICAgICAgIC4uLih0cmFuc2l0aW9uVGltZSAmJiB7IHRyYW5zaXRpb25UaW1lIH0pLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgZmVhdHVyZTogdGhpcy5jb25zdHJ1Y3Rvci5uYW1lLFxuICAgICAgICAgICAgICBtZXRob2Q6ICdwbGF5R2VzdHVyZScsXG4gICAgICAgICAgICAgIGFyZ3M6IFtsYXllck5hbWUsIGFuaW1hdGlvbk5hbWUsIG9wdGlvbnNdLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmICghZ2VuZXJpY0dlc3R1cmVzLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgICAgICAgZ2VuZXJpY0dlc3R1cmVzLnB1c2goa2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZ2VuZXJpY0dlc3R1cmVzO1xuICB9XG5cbiAgLyoqXG4gICAqIFBsYXkgYSBtYW5hZ2VkIGdlc3R1cmUgYW5pbWF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGF5ZXJOYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGxheWVyIHRoYXQgY29udGFpbnMgdGhlIGdlc3R1cmVcbiAgICogYW5pbWF0aW9uLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYW5pbWF0aW9uTmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBnZXN0dXJlIGFuaW1hdGlvbi5cbiAgICogQHBhcmFtIHtPYmplY3Q9fSBvcHRpb25zIC0gT3B0aW9uYWwgZ2VzdHVyZSBvcHRpb25zLlxuICAgKiBAcGFyYW0ge251bWJlcj19IG9wdGlvbnMuaG9sZFRpbWUgLSBUaGlzIG9wdGlvbiBvbmx5IGFwcGxpZXMgdG8ge0BsaW5rIFF1ZXVlU3RhdGV9XG4gICAqIGdlc3R1cmVzLiBXaGVuIGEgUXVldWVTdGF0ZSBnZXN0dXJlIHByb2dyZXNzZXMgdG8gYSBsb29waW5nIHN0YXRlLCB0aGlzIG9wdGlvblxuICAgKiBkZWZpbmVzIGhvdyBtYW55IHNlY29uZHMgc2hvdWxkIGVsYXBzZSBiZWZvcmUgbW92aW5nIHRoZSBxdWV1ZSBmb3J3YXJkLiBJZlxuICAgKiB1bmRlZmluZWQsIGl0IHdpbGwgZmFsbCBiYWNrIGZpcnN0IHRvIHRoZSBob2xkVGltZSBkZWZpbmVkIGluIHRoZSBvcHRpb25zIHdoZW5cbiAgICogdGhlIGdlc3R1cmUgYW5pbWF0aW9uIHdhcyByZWdpc3RlcmVkIGFuZCB0aGVuIHRvIHRoZSBob2xkVGltZSBkZWZpbmVkIG9uIHRoZVxuICAgKiBmZWF0dXJlLlxuICAgKiBAcGFyYW0ge251bWJlcj19IG9wdGlvbnMubWluaW11bUludGVydmFsIC0gVGhlIG1pbmltdW0gYW1vdW50IG9mIHRpbWUgdGhhdFxuICAgKiBtdXN0IGhhdmUgZWxhcHNlZCBzaW5jZSB0aGUgbGFzdCB0aW1lIGEgZ2VzdHVyZSB3YXMgcGxheWVkLlxuICAgKi9cbiAgcGxheUdlc3R1cmUoXG4gICAgbGF5ZXJOYW1lLFxuICAgIGFuaW1hdGlvbk5hbWUsXG4gICAge2hvbGRUaW1lLCBtaW5pbXVtSW50ZXJ2YWwsIHRyYW5zaXRpb25UaW1lLCBmb3JjZSA9IGZhbHNlfSA9IHt9XG4gICkge1xuICAgIC8vIE1ha2Ugc3VyZSB0aGUgYW5pbWF0aW9uIGlzIHJlZ2lzdGVyZWRcbiAgICBpZiAoXG4gICAgICB0aGlzLl9tYW5hZ2VkTGF5ZXJzW2xheWVyTmFtZV0gPT09IHVuZGVmaW5lZCB8fFxuICAgICAgdGhpcy5fbWFuYWdlZExheWVyc1tsYXllck5hbWVdLmFuaW1hdGlvbnNbYW5pbWF0aW9uTmFtZV0gPT09IHVuZGVmaW5lZFxuICAgICkge1xuICAgICAgdGhpcy5yZWdpc3RlckFuaW1hdGlvbihsYXllck5hbWUsIGFuaW1hdGlvbk5hbWUsIHtcbiAgICAgICAgaG9sZFRpbWUsXG4gICAgICAgIG1pbmltdW1JbnRlcnZhbCxcbiAgICAgICAgdHJhbnNpdGlvblRpbWUsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBsYXllciA9IHRoaXMuX21hbmFnZWRMYXllcnNbbGF5ZXJOYW1lXTtcbiAgICBjb25zdCBhbmltYXRpb24gPSBsYXllci5hbmltYXRpb25zW2FuaW1hdGlvbk5hbWVdO1xuXG4gICAgLy8gTWFrZSBzdXJlIHRoZSBhbmltYXRpb24gaXMgYWN0aXZlXG4gICAgaWYgKCFhbmltYXRpb24uaXNBY3RpdmUpIHtcbiAgICAgIC8vIENyZWF0ZSB3YXJuaW5nIG1lc3NhZ2UgYmFzZWQgb24gd2hpY2ggb2JqZWN0IGRvZXNuJ3QgZXhpc3QgeWV0XG4gICAgICBjb25zdCB0eXBlTmFtZSA9IGxheWVyLmlzQWN0aXZlID8gJ2FuaW1hdGlvbicgOiAnbGF5ZXInO1xuICAgICAgY29uc3QgbWVzc2FnZSA9IGBTa2lwcGluZyBnZXN0dXJlICR7YW5pbWF0aW9uTmFtZX0gb24gbGF5ZXIgJHtsYXllck5hbWV9IGZvciBob3N0ICR7dGhpcy5faG9zdC5pZH0uIE5vICR7dHlwZU5hbWV9IGV4aXN0cyB3aXRoIHRoaXMgbmFtZSB5ZXQuYDtcblxuICAgICAgY29uc29sZS53YXJuKG1lc3NhZ2UpO1xuICAgICAgcmV0dXJuIERlZmVycmVkLmNhbmNlbCh7cmVhc29uOiAnaW5hY3RpdmUnLCB2YWx1ZTogdHlwZU5hbWV9KTtcbiAgICB9XG5cbiAgICAvLyBDaGVjayBpZiB0aGUgZ2VzdHVyZSBpcyBhbHJlYWR5IHBsYXlpbmdcbiAgICBjb25zdCB7Y3VycmVudEdlc3R1cmV9ID0gbGF5ZXI7XG4gICAgaWYgKGN1cnJlbnRHZXN0dXJlID09PSBhbmltYXRpb25OYW1lICYmICFmb3JjZSkge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IGBTa2lwcGluZyBnZXN0dXJlICR7YW5pbWF0aW9uTmFtZX0gb24gbGF5ZXIgJHtsYXllck5hbWV9IGZvciBob3N0ICR7dGhpcy5faG9zdC5pZH0uIFRoZSBnZXN0dXJlIGlzIGFscmVhZHkgcGxheWluZy4gVXNlIG9wdGlvbnMuZm9yY2UgdG8gZm9yY2UgdGhlIGdlc3R1cmUgcmVwbGF5LCB3aGljaCBtYXkgcmVzdWx0IGluIGEgaGFyZCB0cmFuc2l0aW9uLmA7XG5cbiAgICAgIGNvbnNvbGUud2FybihtZXNzYWdlKTtcbiAgICAgIHJldHVybiBEZWZlcnJlZC5jYW5jZWwoe3JlYXNvbjogJ3BsYXlpbmcnLCB2YWx1ZTogYW5pbWF0aW9uTmFtZX0pO1xuICAgIH1cblxuICAgIC8vIFVwZGF0ZSBhbmltYXRpb24gb3B0aW9uc1xuICAgIGlmIChob2xkVGltZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBhbmltYXRpb24uaG9sZFRpbWUgPSBob2xkVGltZTtcbiAgICB9XG5cbiAgICBpZiAobWluaW11bUludGVydmFsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGFuaW1hdGlvbi5taW5pbXVtSW50ZXJ2YWwgPSBtaW5pbXVtSW50ZXJ2YWw7XG4gICAgfSBlbHNlIHtcbiAgICAgIG1pbmltdW1JbnRlcnZhbCA9IHRoaXMuX2dldE1pbmltdW1JbnRlcnZhbChsYXllciwgYW5pbWF0aW9uKTtcbiAgICB9XG5cbiAgICAvLyBDaGVjayB0aGUgaW50ZXJ2YWxcbiAgICBpZiAoIWZvcmNlICYmIGxheWVyLnBsYXlUaW1lciAhPT0gbnVsbCAmJiBsYXllci5wbGF5VGltZXIgPCBtaW5pbXVtSW50ZXJ2YWwpIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgYFNraXBwaW5nIGdlc3R1cmUgJHthbmltYXRpb25OYW1lfSBvbiBsYXllciAke2xheWVyTmFtZX0gZm9yIGhvc3QgJHt0aGlzLl9ob3N0LmlkfS4gTWluaW11bSBpbnRlcnZhbCAke21pbmltdW1JbnRlcnZhbH0gaGFzIG5vdCBiZWVuIG1ldC5gXG4gICAgICApO1xuICAgICAgcmV0dXJuIERlZmVycmVkLmNhbmNlbCh7XG4gICAgICAgIHJlYXNvbjogJ21pbmltdW1JbnRlcnZhbCcsXG4gICAgICAgIHZhbHVlOiBtaW5pbXVtSW50ZXJ2YWwgLSBsYXllci5wbGF5VGltZXIsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBQbGF5IHRoZSBhbmltYXRpb25cbiAgICBsYXllci5jdXJyZW50R2VzdHVyZSA9IGFuaW1hdGlvbk5hbWU7XG4gICAgbGF5ZXIucGxheVRpbWVyID0gMDtcbiAgICBsYXllci5ob2xkVGltZXIuY2FuY2VsKCk7XG4gICAgaWYgKGxheWVyLmF1dG9EaXNhYmxlKSB7XG4gICAgICB0aGlzLnNldExheWVyV2VpZ2h0cyhuYW1lID0+IG5hbWUgPT09IGxheWVyTmFtZSwgMSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2hvc3QuQW5pbWF0aW9uRmVhdHVyZS5wbGF5QW5pbWF0aW9uKFxuICAgICAgbGF5ZXJOYW1lLFxuICAgICAgYW5pbWF0aW9uTmFtZSxcbiAgICAgIHRyYW5zaXRpb25UaW1lXG4gICAgKTtcbiAgfVxuXG4gIHVwZGF0ZShkZWx0YVRpbWUpIHtcbiAgICBzdXBlci51cGRhdGUoZGVsdGFUaW1lKTtcblxuICAgIC8vIEluY3JlbWVudCB0aGUgdGltZXJzXG4gICAgT2JqZWN0LmVudHJpZXModGhpcy5fbWFuYWdlZExheWVycykuZm9yRWFjaCgoW25hbWUsIG9wdGlvbnNdKSA9PiB7XG4gICAgICBpZiAob3B0aW9ucy5pc0FjdGl2ZSAmJiAhdGhpcy5faG9zdC5BbmltYXRpb25GZWF0dXJlLmdldFBhdXNlZChuYW1lKSkge1xuICAgICAgICBvcHRpb25zLmhvbGRUaW1lci5leGVjdXRlKGRlbHRhVGltZSk7XG5cbiAgICAgICAgaWYgKG9wdGlvbnMucGxheVRpbWVyICE9PSBudWxsKSB7XG4gICAgICAgICAgb3B0aW9ucy5wbGF5VGltZXIgKz0gZGVsdGFUaW1lIC8gMTAwMDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgaW5zdGFsbEFwaSgpIHtcbiAgICAvKipcbiAgICAgKiBAaW5uZXJcbiAgICAgKiBAbmFtZXNwYWNlIEdlc3R1cmVGZWF0dXJlXG4gICAgICovXG4gICAgY29uc3QgYXBpID0gc3VwZXIuaW5zdGFsbEFwaSgpO1xuXG4gICAgT2JqZWN0LmFzc2lnbihhcGksIHtcbiAgICAgIC8qKlxuICAgICAgICogQG1lbWJlcm9mIEdlc3R1cmVGZWF0dXJlXG4gICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAqIEBtZXRob2RcbiAgICAgICAqIEBzZWUgR2VzdHVyZUZlYXR1cmUjY3JlYXRlR2VzdHVyZU1hcFxuICAgICAgICovXG4gICAgICBjcmVhdGVHZXN0dXJlTWFwOiB0aGlzLmNyZWF0ZUdlc3R1cmVNYXAuYmluZCh0aGlzKSxcbiAgICAgIC8qKlxuICAgICAgICogQG1lbWJlcm9mIEdlc3R1cmVGZWF0dXJlXG4gICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAqIEBtZXRob2RcbiAgICAgICAqIEBzZWUgR2VzdHVyZUZlYXR1cmUjY3JlYXRlR2VuZXJpY0dlc3R1cmVBcnJheVxuICAgICAgICovXG4gICAgICBjcmVhdGVHZW5lcmljR2VzdHVyZUFycmF5OiB0aGlzLmNyZWF0ZUdlbmVyaWNHZXN0dXJlQXJyYXkuYmluZCh0aGlzKSxcbiAgICAgIC8qKlxuICAgICAgICogQG1lbWJlcm9mIEdlc3R1cmVGZWF0dXJlXG4gICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAqIEBtZXRob2RcbiAgICAgICAqIEBzZWUgR2VzdHVyZUZlYXR1cmUjcGxheUdlc3R1cmVcbiAgICAgICAqL1xuICAgICAgcGxheUdlc3R1cmU6IHRoaXMucGxheUdlc3R1cmUuYmluZCh0aGlzKSxcbiAgICB9KTtcbiAgfVxufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhHZXN0dXJlRmVhdHVyZSwge1xuICBERUZBVUxUX0xBWUVSX09QVElPTlM6IHtcbiAgICB2YWx1ZToge1xuICAgICAgLi4uR2VzdHVyZUZlYXR1cmUuREVGQVVMVF9MQVlFUl9PUFRJT05TLFxuICAgICAgYXV0b0Rpc2FibGU6IHRydWUsXG4gICAgfSxcbiAgICB3cml0YWJsZTogZmFsc2UsXG4gIH0sXG4gIEVWRU5UX0RFUEVOREVOQ0lFUzoge1xuICAgIHZhbHVlOiB7XG4gICAgICAuLi5HZXN0dXJlRmVhdHVyZS5FVkVOVF9ERVBFTkRFTkNJRVMsXG4gICAgICBBbmltYXRpb25GZWF0dXJlOiB7XG4gICAgICAgIC4uLkdlc3R1cmVGZWF0dXJlLkVWRU5UX0RFUEVOREVOQ0lFUy5BbmltYXRpb25GZWF0dXJlLFxuICAgICAgICBwbGF5TmV4dEFuaW1hdGlvbjogJ19vbk5leHQnLFxuICAgICAgICBzdG9wQW5pbWF0aW9uOiAnX29uU3RvcCcsXG4gICAgICAgIGludGVycnVwdEFuaW1hdGlvbjogJ19vblN0b3AnXG4gICAgICB9LFxuICAgIH0sXG4gIH0sXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgR2VzdHVyZUZlYXR1cmU7XG5leHBvcnQge0RlZmF1bHRHZXN0dXJlV29yZHN9O1xuIiwiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXHJcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxyXG5pbXBvcnQgRGVmZXJyZWQgZnJvbSAnY29yZS9EZWZlcnJlZCc7XHJcbmltcG9ydCBVdGlscyBmcm9tICdjb3JlL1V0aWxzJztcclxuaW1wb3J0IE1hdGhVdGlscyBmcm9tICdjb3JlL01hdGhVdGlscyc7XHJcbmltcG9ydCB7TGluZWFyfSBmcm9tICcuL0Vhc2luZyc7XHJcblxyXG4vKipcclxuICogQSBjb2xsZWN0aW9uIG9mIHVzZWZ1bCBhbmltYXRpb24gZnVuY3Rpb25zLlxyXG4gKlxyXG4gKiBAaGlkZWNvbnN0cnVjdG9yXHJcbiAqL1xyXG5jbGFzcyBBbmltYXRpb25VdGlscyB7XHJcbiAgc3RhdGljIGxlcnAoZnJvbSwgdG8sIGZhY3Rvcikge1xyXG4gICAgY29uc29sZS53YXJuKGBBbmltYXRpb25VdGlscy5sZXJwIGlzIGJlaW5nIGRlcHJlY2F0ZWQuIFVzZSBNYXRoVXRpbHMubGVycCBpbnN0ZWFkLmApO1xyXG5cclxuICAgIHJldHVybiBNYXRoVXRpbHMubGVycChmcm9tLCB0bywgZmFjdG9yKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENsYW1wIGEgbnVtYmVyIGJldHdlZW4gMiB2YWx1ZXMuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgLSBWYWx1ZSB0byBjbGFtcC5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gW21pbj0wXSAtIE1pbnVtdW0gdmFsdWUuXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IFttYXg9MV0gLSBNYXhpbXVtIHZhbHVlLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge251bWJlcn1cclxuICAgKi9cclxuICBzdGF0aWMgY2xhbXAodmFsdWUsIG1pbiA9IDAsIG1heCA9IDEpIHtcclxuICAgIGNvbnNvbGUud2FybihgQW5pbWF0aW9uVXRpbHMuY2xhbXAgaXMgYmVpbmcgZGVwcmVjYXRlZC4gVXNlIE1hdGhVdGlscy5jbGFtcCBpbnN0ZWFkLmApO1xyXG5cclxuICAgIHJldHVybiBNYXRoVXRpbHMuY2xhbXAodmFsdWUsIG1pbiwgbWF4KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiBhIGRlZmVycmVkIHByb21pc2UgdGhhdCBjYW4gYmUgdXNlZCB0byB1cGRhdGUgdGhlIHZhbHVlIG9mIGEgbnVtZXJpY1xyXG4gICAqIHByb3BlcnR5IG9mIHRoaXMgb2JqZWN0IG92ZXIgdGltZS4gUGFzcyBkZWx0YSB0aW1lIGluIG1pbGxpc2Vjb25kcyB0byB0aGVcclxuICAgKiBkZWZlcnJlZCBwcm9taXNlJ3MgZXhlY3V0ZSBtZXRob2QgaW4gYW4gdXBkYXRlIGxvb3AgdG8gYW5pbWF0ZSB0aGUgcHJvcGVydHlcclxuICAgKiB0b3dhcmRzIHRoZSB0YXJnZXQgdmFsdWUuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge09iamVjdH0gcHJvcGVydHlPd25lciAtIE9iamVjdCB0aGF0IGNvbnRhaW5zIHRoZSBwcm9wZXJ0eSB0byBhbmltYXRpb24uXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5TmFtZSAtIE5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIGFuaW1hdGUuXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IHRhcmdldFZhbHVlIC0gVGFyZ2V0IHZhbHVlIHRvIHJlYWNoLlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0PX0gb3B0aW9ucyAtIE9wdGlvbmFsIG9wdGlvbnMgb2JqZWN0XHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLnNlY29uZHM9MF0gLSBOdW1iZXIgb2Ygc2Vjb25kcyBpdCB3aWxsIHRha2UgdG8gcmVhY2hcclxuICAgKiB0aGUgdGFyZ2V0IHZhbHVlLlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRpb25zLmVhc2luZ0ZuPUxpbmVhci5Jbk91dF0gLSBFYXNpbmcgZnVuY3Rpb24gdG8gdXNlIGZvciBhbmltYXRpb24uXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdGlvbnMub25GaW5pc2hdIC0gQ2FsbGJhY2sgdG8gZXhlY3V0ZSBvbmNlIHRoZSBhbmltYXRpb24gY29tcGxldGVzLlxyXG4gICAqIFRoZSB0YXJnZXQgdmFsdWUgaXMgcGFzc2VkIGFzIGEgcGFyYW1ldGVyLlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvcHRpb25zLm9uUHJvZ3Jlc3MgLSBDYWxsYmFjayB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgYW5pbWF0aW9uXHJcbiAgICogcHJvcGVydHkgaXMgdXBkYXRlZCBkdXJpbmcgdGhlIGFuaW1hdGlvbi4gVGhlIHByb3BlcnR5J3MgdmFsdWUgYXQgdGhlIHRpbWUgb2ZcclxuICAgKiB0aGUgdXBkYXRlIGlzIHBhc3NlZCBhcyBhIHBhcmFtZXRlci5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb3B0aW9ucy5vbkNhbmNlbCAtIENhbGxiYWNrIHRvIGV4ZWN1dGUgaWYgdGhlIHVzZXIgY2FuY2VscyB0aGVcclxuICAgKiBhbmltYXRpb24gYmVmb3JlIGNvbXBsZXRpb24uIFRoZSBhbmltYXRpb24gcHJvcGVydHkncyB2YWx1ZSBhdCB0aGUgdGltZSBvZlxyXG4gICAqIGNhbmNlbCBpcyBwYXNzZWQgYXMgYSBwYXJhbWV0ZXIuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9wdGlvbnMub25FcnJvciAtIENhbGxiYWNrIHRvIGV4ZWN1dGUgaWYgdGhlIGFuaW1hdGlvbiBzdG9wc1xyXG4gICAqIGJlY2F1c2UgYW4gZXJyb3IgaXMgZW5jb3VudGVyZWQuIFRoZSBlcnJvciBtZXNzYWdlIGlzIHBhc3NlZCBhcyBhIHBhcmFtZXRlci5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtEZWZlcnJlZH0gUmVzb2x2ZXMgd2l0aCB0aGUgcHJvcGVydHkncyB2YWx1ZSBvbmNlIGl0IHJlYWNoZXMgdGhlXHJcbiAgICogdGFyZ2V0IHZhbHVlLlxyXG4gICAqL1xyXG4gIHN0YXRpYyBpbnRlcnBvbGF0ZVByb3BlcnR5KFxyXG4gICAgcHJvcGVydHlPd25lcixcclxuICAgIHByb3BlcnR5TmFtZSxcclxuICAgIHRhcmdldFZhbHVlLFxyXG4gICAge3NlY29uZHMgPSAwLCBlYXNpbmdGbiwgb25GaW5pc2gsIG9uUHJvZ3Jlc3MsIG9uQ2FuY2VsLCBvbkVycm9yfSA9IHt9XHJcbiAgKSB7XHJcbiAgICAvLyBNYWtlIHN1cmUgcHJvcGVydHkgaXMgYW4gb2JqZWN0XHJcbiAgICBpZiAoIShwcm9wZXJ0eU93bmVyIGluc3RhbmNlb2YgT2JqZWN0KSkge1xyXG4gICAgICBjb25zdCBlID0gbmV3IEVycm9yKFxyXG4gICAgICAgIGBDYW5ub3QgaW50ZXJwb2xhdGUgcHJvcGVydHkgJHtwcm9wZXJ0eU5hbWV9LiBQcm9wZXJ0eSBvd25lciBtdXN0IGJlIGFuIG9iamVjdC5gXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBpZiAodHlwZW9mIG9uRXJyb3IgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICBvbkVycm9yKGUpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gRGVmZXJyZWQucmVqZWN0KGUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIE1ha2Ugc3VyZSBwcm9wZXJ0eSBpcyBudW1lcmljXHJcbiAgICBpZiAoTnVtYmVyLmlzTmFOKE51bWJlcihwcm9wZXJ0eU93bmVyW3Byb3BlcnR5TmFtZV0pKSkge1xyXG4gICAgICBjb25zdCBlID0gbmV3IEVycm9yKFxyXG4gICAgICAgIGBDYW5ub3QgaW50ZXJwb2xhdGUgcHJvcGVydHkgJHtwcm9wZXJ0eU5hbWV9LiBQcm9wZXJ0eSBtdXN0IGJlIG51bWVyaWMuYFxyXG4gICAgICApO1xyXG5cclxuICAgICAgaWYgKHR5cGVvZiBvbkVycm9yID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgb25FcnJvcihlKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIERlZmVycmVkLnJlamVjdChlKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBNYWtlIHN1cmUgdGhlIHRhcmdldCB2YWx1ZSBpcyBudW1lcmljXHJcbiAgICBpZiAoTnVtYmVyLmlzTmFOKE51bWJlcih0YXJnZXRWYWx1ZSkpKSB7XHJcbiAgICAgIGNvbnN0IGUgPSBuZXcgRXJyb3IoXHJcbiAgICAgICAgYENhbm5vdCBpbnRlcnBvbGF0ZSBwcm9wZXJ0eSAke3Byb3BlcnR5TmFtZX0gdG8gdmFsdWUgJHt0YXJnZXRWYWx1ZX0uIFRhcmdldCB2YWx1ZSBtdXN0IGJlIG51bWVyaWMuYFxyXG4gICAgICApO1xyXG5cclxuICAgICAgaWYgKHR5cGVvZiBvbkVycm9yID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgb25FcnJvcihlKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIERlZmVycmVkLnJlamVjdChlKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBSZXNvbHZlIGltbWVkaWF0ZWx5IGlmIHRoZSB0YXJnZXQgaGFzIGFscmVhZHkgYmVlbiByZWFjaGVkXHJcbiAgICBjb25zdCBzdGFydFZhbHVlID0gcHJvcGVydHlPd25lcltwcm9wZXJ0eU5hbWVdO1xyXG5cclxuICAgIGlmIChzdGFydFZhbHVlID09PSB0YXJnZXRWYWx1ZSkge1xyXG4gICAgICBpZiAodHlwZW9mIG9uRmluaXNoID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgb25GaW5pc2godGFyZ2V0VmFsdWUpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gRGVmZXJyZWQucmVzb2x2ZSh0YXJnZXRWYWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gRGVmYXVsdCB0byBsaW5lYXIgaW50ZXJwb2xhdGlvblxyXG4gICAgaWYgKHR5cGVvZiBlYXNpbmdGbiAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICBpZiAoZWFzaW5nRm4gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICAgIGBJbnZhbGlkIHByb3BlcnR5IGludGVycG9sYXRpb24gZWFzaW5nRm4uIERlZmF1bHRpbmcgdG8gbGluZWFyIGludGVycG9sYXRpb24uYFxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGVhc2luZ0ZuID0gTGluZWFyLkluT3V0O1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGludGVycG9sYXRvciA9IFV0aWxzLndhaXQoc2Vjb25kcywge1xyXG4gICAgICBvbkZpbmlzaDogKCkgPT4ge1xyXG4gICAgICAgIHByb3BlcnR5T3duZXJbcHJvcGVydHlOYW1lXSA9IHRhcmdldFZhbHVlO1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIG9uRmluaXNoID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICBvbkZpbmlzaCh0YXJnZXRWYWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICBvbkNhbmNlbDogKCkgPT4ge1xyXG4gICAgICAgIGlmICh0eXBlb2Ygb25DYW5jZWwgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgIG9uQ2FuY2VsKHByb3BlcnR5T3duZXJbcHJvcGVydHlOYW1lXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICBvblByb2dyZXNzOiBwcm9ncmVzcyA9PiB7XHJcbiAgICAgICAgaWYgKHByb3BlcnR5T3duZXJbcHJvcGVydHlOYW1lXSAhPT0gdGFyZ2V0VmFsdWUpIHtcclxuICAgICAgICAgIC8vIENhbGN1bGF0ZSB0aGUgbGVycCBmYWN0b3JcclxuICAgICAgICAgIGNvbnN0IGVhc2VGYWN0b3IgPSBlYXNpbmdGbihwcm9ncmVzcyk7XHJcblxyXG4gICAgICAgICAgaWYgKHR5cGVvZiBlYXNlRmFjdG9yICE9PSAnbnVtYmVyJykge1xyXG4gICAgICAgICAgICBjb25zdCBlID0gbmV3IEVycm9yKFxyXG4gICAgICAgICAgICAgIGBJbnZhbGlkIHByb3BlcnR5IGludGVycG9sYXRpb24gZWFzaW5nRm4uIEVhc2luZ0ZuIG11c3QgcmV0dXJuIGEgbnVtYmVyLmBcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgaW50ZXJwb2xhdG9yLnJlamVjdChlKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgdmFsdWVcclxuICAgICAgICAgIHByb3BlcnR5T3duZXJbcHJvcGVydHlOYW1lXSA9IE1hdGhVdGlscy5sZXJwKFxyXG4gICAgICAgICAgICBzdGFydFZhbHVlLFxyXG4gICAgICAgICAgICB0YXJnZXRWYWx1ZSxcclxuICAgICAgICAgICAgZWFzZUZhY3RvclxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFNpZ25hbCBwcm9ncmVzc1xyXG4gICAgICAgIGlmICh0eXBlb2Ygb25Qcm9ncmVzcyA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgb25Qcm9ncmVzcyhwcm9wZXJ0eU93bmVyW3Byb3BlcnR5TmFtZV0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gU2lnbmFsIGNvbXBsZXRpb24gb25jZSB0aW1lIGlzIHVwXHJcbiAgICAgICAgaWYgKHByb2dyZXNzID09PSAxKSB7XHJcbiAgICAgICAgICBwcm9wZXJ0eU93bmVyW3Byb3BlcnR5TmFtZV0gPSB0YXJnZXRWYWx1ZTtcclxuICAgICAgICAgIGludGVycG9sYXRvci5yZXNvbHZlKHRhcmdldFZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIG9uRXJyb3IsXHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gaW50ZXJwb2xhdG9yO1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgQW5pbWF0aW9uVXRpbHM7XHJcbiIsIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVC0wXG5pbXBvcnQgRGVmZXJyZWQgZnJvbSAnY29yZS9EZWZlcnJlZCc7XG5pbXBvcnQgTWF0aFV0aWxzIGZyb20gJ2NvcmUvTWF0aFV0aWxzJztcbmltcG9ydCBBbmltYXRpb25VdGlscyBmcm9tICcuLi9BbmltYXRpb25VdGlscyc7XG5cbi8qKlxuICogQmFzZSBjbGFzcyBmb3IgYSBzdGF0ZSBpbiBvdXIgYW5pbWF0aW9uIHN5c3RlbS5cbiAqXG4gKiBAYWJzdHJhY3RcbiAqL1xuY2xhc3MgQWJzdHJhY3RTdGF0ZSB7XG4gIC8qKlxuICAgKiBAY29uc3RydWN0b3JcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3Q9fSBvcHRpb25zIC0gT3B0aW9ucyBmb3IgdGhlIGFuaW1hdGlvbiBzdGF0ZS5cbiAgICogQHBhcmFtIHtzdHJpbmc9fSBvcHRpb25zLm5hbWUgLSBOYW1lIGZvciB0aGUgYW5pbWF0aW9uIHN0YXRlLiBOYW1lcyBtdXN0IGJlXG4gICAqIHVuaXF1ZSBmb3IgdGhlIGNvbnRhaW5lciB0aGUgc3RhdGUgaXMgYXBwbGllZCB0byBhbmQgc2hvdWxkIGJlIHZhbGlkYXRlZCBhdFxuICAgKiB0aGUgY29udGFpbmVyIGxldmVsLiBJZiBubyBuYW1lIGlzIGdpdmVuIGl0IHdpbGwgZGVmYXVsdCB0byB0aGUgY29uc3RydWN0b3JcbiAgICogbmFtZS5cbiAgICogQHBhcmFtIHt3ZWlnaHR9IFtvcHRpb25zLndlaWdodD0wXSAtIFRoZSAwLTEgYW1vdW50IG9mIGluZmx1ZW5jZSB0aGUgc3RhdGUgd2lsbCBoYXZlLlxuICAgKi9cbiAgY29uc3RydWN0b3Iob3B0aW9ucyA9IHt9KSB7XG4gICAgdGhpcy5uYW1lID1cbiAgICAgIG9wdGlvbnMubmFtZSAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5uYW1lIDogdGhpcy5jb25zdHJ1Y3Rvci5uYW1lO1xuICAgIHRoaXMuX3dlaWdodCA9XG4gICAgICBvcHRpb25zLndlaWdodCAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8gTWF0aFV0aWxzLmNsYW1wKG9wdGlvbnMud2VpZ2h0LCAwLCAxKVxuICAgICAgICA6IDA7XG4gICAgdGhpcy5faW50ZXJuYWxXZWlnaHQgPSB0aGlzLl93ZWlnaHQ7XG4gICAgdGhpcy5fcGF1c2VkID0gZmFsc2U7XG5cbiAgICB0aGlzLl9wcm9taXNlcyA9IHtcbiAgICAgIGZpbmlzaDogRGVmZXJyZWQucmVzb2x2ZSgpLFxuICAgICAgd2VpZ2h0OiBEZWZlcnJlZC5yZXNvbHZlKCksXG4gICAgICBwbGF5OiBEZWZlcnJlZC5yZXNvbHZlKCksXG4gICAgfTtcblxuICAgIHRoaXMuX3BsYXlDYWxsYmFja3MgPSB7XG4gICAgICBvbkZpbmlzaDogdW5kZWZpbmVkLFxuICAgICAgb25FcnJvcjogdW5kZWZpbmVkLFxuICAgICAgb25DYW5jZWw6IHVuZGVmaW5lZCxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgd2hldGhlciBvciBub3QgdGhlIHN0YXRlIGlzIGN1cnJlbnRseSBwYXVzZWQuXG4gICAqXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqL1xuICBnZXQgcGF1c2VkKCkge1xuICAgIHJldHVybiB0aGlzLl9wYXVzZWQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBhbmQgc2V0cyB0aGUgdXNlciBkZWZpbmVkIHdlaWdodC5cbiAgICpcbiAgICogQHR5cGUge251bWJlcn1cbiAgICovXG4gIGdldCB3ZWlnaHQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3dlaWdodDtcbiAgfVxuXG4gIHNldCB3ZWlnaHQod2VpZ2h0KSB7XG4gICAgdGhpcy5fd2VpZ2h0ID0gTWF0aFV0aWxzLmNsYW1wKHdlaWdodCwgMCwgMSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB3aGV0aGVyIG9yIG5vdCB0aGUgd2VpZ2h0IGlzIGN1cnJlbnRseSBiZWluZyBhbmltYXRlZC5cbiAgICpcbiAgICogQHJlYWRvbmx5XG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKi9cbiAgZ2V0IHdlaWdodFBlbmRpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Byb21pc2VzLndlaWdodCAmJiB0aGlzLl9wcm9taXNlcy53ZWlnaHQucGVuZGluZztcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSB1c2VyIGRlZmluZWQgd2VpZ2h0IG92ZXIgdGltZS5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHdlaWdodCAtIFRoZSB0YXJnZXQgd2VpZ2h0IHZhbHVlLlxuICAgKiBAcGFyYW0ge251bWJlcn0gW3NlY29uZHM9MF0gLSBUaGUgYW1vdW50IG9mIHRpbWUgaXQgd2lsbCB0YWtlIHRvIHJlYWNoIHRoZVxuICAgKiB0YXJnZXQgd2VpZ2h0LlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gZWFzaW5nRm4gLSBUaGUgZWFzaW5nIGZ1bmN0aW9uIHRvIHVzZSBmb3IgaW50ZXJwb2xhdGlvbi5cbiAgICpcbiAgICogQHJldHVybnMge0RlZmVycmVkfVxuICAgKi9cbiAgc2V0V2VpZ2h0KHdlaWdodCwgc2Vjb25kcyA9IDAsIGVhc2luZ0ZuKSB7XG4gICAgdGhpcy5fcHJvbWlzZXMud2VpZ2h0LmNhbmNlbCgpO1xuICAgIHdlaWdodCA9IE1hdGhVdGlscy5jbGFtcCh3ZWlnaHQpO1xuXG4gICAgdGhpcy5fcHJvbWlzZXMud2VpZ2h0ID0gQW5pbWF0aW9uVXRpbHMuaW50ZXJwb2xhdGVQcm9wZXJ0eShcbiAgICAgIHRoaXMsXG4gICAgICAnd2VpZ2h0JyxcbiAgICAgIHdlaWdodCxcbiAgICAgIHtzZWNvbmRzLCBlYXNpbmdGbn1cbiAgICApO1xuXG4gICAgcmV0dXJuIHRoaXMuX3Byb21pc2VzLndlaWdodDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBpbnRlcm5hbCB3ZWlnaHQuXG4gICAqXG4gICAqIEByZWFkb25seVxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0IGludGVybmFsV2VpZ2h0KCkge1xuICAgIHJldHVybiB0aGlzLl9pbnRlcm5hbFdlaWdodDtcbiAgfVxuXG4gIC8qKlxuICAgKiBNdWx0aXBsaWVzIHRoZSB1c2VyIHdlaWdodCBieSBhIGZhY3RvciB0byBkZXRlcm1pbmUgdGhlIGludGVybmFsIHdlaWdodC5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGZhY3RvciAtIDAtMSBtdWx0aXBsaWVyIHRvIGFwcGx5IHRvIHRoZSB1c2VyIHdlaWdodC5cbiAgICovXG4gIHVwZGF0ZUludGVybmFsV2VpZ2h0KGZhY3Rvcikge1xuICAgIHRoaXMuX2ludGVybmFsV2VpZ2h0ID0gdGhpcy5fd2VpZ2h0ICogZmFjdG9yO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBhbnkgdmFsdWVzIHRoYXQgbmVlZCB0byBiZSBldmFsdWF0ZWQgZXZlcnkgZnJhbWUuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBkZWx0YVRpbWUgLSBUaW1lIGluIG1pbGxpc2Vjb25kcyBzaW5jZSB0aGUgbGFzdCB1cGRhdGUuXG4gICAqL1xuICB1cGRhdGUoZGVsdGFUaW1lKSB7XG4gICAgaWYgKCF0aGlzLl9wYXVzZWQpIHtcbiAgICAgIE9iamVjdC52YWx1ZXModGhpcy5fcHJvbWlzZXMpLmZvckVhY2gocHJvbWlzZSA9PiB7XG4gICAgICAgIHByb21pc2UuZXhlY3V0ZShkZWx0YVRpbWUpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFN0YXJ0IHBsYXliYWNrIG9mIHRoZSBzdGF0ZSBmcm9tIHRoZSBiZWdpbm5pbmcuXG4gICAqXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvbkZpbmlzaCAtIEZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgc3RhdGUgZmluaXNoZXMuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvbkVycm9yIC0gRnVuY3Rpb24gdG8gZXhlY3V0ZSBpZiB0aGUgc3RhdGUgZW5jb3VudGVyc1xuICAgKiBhbiBlcnJvciBkdXJpbmcgcGxheWJhY2suXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvbkNhbmNlbCAtIEZ1bmN0aW9uIHRvIGV4ZWN1dGUgaWYgcGxheWJhY2sgaXMgY2FuY2VsZWQuXG4gICAqXG4gICAqIEByZXR1cm5zIHtEZWZlcnJlZH1cbiAgICovXG4gIHBsYXkob25GaW5pc2gsIG9uRXJyb3IsIG9uQ2FuY2VsKSB7XG4gICAgdGhpcy5fcGF1c2VkID0gZmFsc2U7XG4gICAgdGhpcy5fcGxheUNhbGxiYWNrcy5vbkZpbmlzaCA9IG9uRmluaXNoO1xuICAgIHRoaXMuX3BsYXlDYWxsYmFja3Mub25FcnJvciA9IG9uRXJyb3I7XG4gICAgdGhpcy5fcGxheUNhbGxiYWNrcy5vbkNhbmNlbCA9IG9uQ2FuY2VsO1xuXG4gICAgdGhpcy5fcHJvbWlzZXMucGxheSA9IG5ldyBEZWZlcnJlZCh1bmRlZmluZWQsIG9uRmluaXNoLCBvbkVycm9yLCBvbkNhbmNlbCk7XG4gICAgdGhpcy5fcHJvbWlzZXMuZmluaXNoID0gRGVmZXJyZWQuYWxsKFtcbiAgICAgIHRoaXMuX3Byb21pc2VzLnBsYXksXG4gICAgICB0aGlzLl9wcm9taXNlcy53ZWlnaHQsXG4gICAgXSk7XG5cbiAgICByZXR1cm4gdGhpcy5fcHJvbWlzZXMuZmluaXNoO1xuICB9XG5cbiAgLyoqXG4gICAqIFBhdXNlIHBsYXliYWNrIG9mIHRoZSBzdGF0ZS4gVGhpcyBwcmV2ZW50cyBwZW5kaW5nIHByb21pc2VzIGZyb20gYmVpbmcgZXhlY3V0ZWQuXG4gICAqXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgcGF1c2UoKSB7XG4gICAgdGhpcy5fcGF1c2VkID0gdHJ1ZTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXN1bWUgcGxheWJhY2sgb2YgdGhlIHN0YXRlLlxuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb25GaW5pc2ggLSBGdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIHN0YXRlIGZpbmlzaGVzLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb25FcnJvciAtIEZ1bmN0aW9uIHRvIGV4ZWN1dGUgaWYgdGhlIHN0YXRlIGVuY291bnRlcnNcbiAgICogYW4gZXJyb3IgZHVyaW5nIHBsYXliYWNrLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb25DYW5jZWwgLSBGdW5jdGlvbiB0byBleGVjdXRlIGlmIHBsYXliYWNrIGlzIGNhbmNlbGVkLlxuICAgKlxuICAgKiBAcmV0dXJucyB7RGVmZXJyZWR9XG4gICAqL1xuICByZXN1bWUob25GaW5pc2gsIG9uRXJyb3IsIG9uQ2FuY2VsKSB7XG4gICAgdGhpcy5fcGF1c2VkID0gZmFsc2U7XG5cbiAgICBpZiAoIXRoaXMuX3Byb21pc2VzLnBsYXkucGVuZGluZykge1xuICAgICAgdGhpcy5fcGxheUNhbGxiYWNrcy5vbkZpbmlzaCA9IG9uRmluaXNoIHx8IHRoaXMuX3BsYXlDYWxsYmFja3Mub25GaW5pc2g7XG4gICAgICB0aGlzLl9wbGF5Q2FsbGJhY2tzLm9uRXJyb3IgPSBvbkVycm9yIHx8IHRoaXMuX3BsYXlDYWxsYmFja3Mub25FcnJvcjtcbiAgICAgIHRoaXMuX3BsYXlDYWxsYmFja3Mub25DYW5jZWwgPSBvbkNhbmNlbCB8fCB0aGlzLl9wbGF5Q2FsbGJhY2tzLm9uQ2FuY2VsO1xuXG4gICAgICB0aGlzLl9wcm9taXNlcy5wbGF5ID0gbmV3IERlZmVycmVkKFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIHRoaXMuX3BsYXlDYWxsYmFja3Mub25GaW5pc2gsXG4gICAgICAgIHRoaXMuX3BsYXlDYWxsYmFja3Mub25FcnJvcixcbiAgICAgICAgdGhpcy5fcGxheUNhbGxiYWNrcy5vbkNhbmNlbFxuICAgICAgKTtcbiAgICAgIHRoaXMuX3Byb21pc2VzLmZpbmlzaCA9IERlZmVycmVkLmFsbChbXG4gICAgICAgIHRoaXMuX3Byb21pc2VzLnBsYXksXG4gICAgICAgIHRoaXMuX3Byb21pc2VzLndlaWdodCxcbiAgICAgIF0pO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9wcm9taXNlcy5maW5pc2g7XG4gIH1cblxuICAvKipcbiAgICogQ2FuY2VsIHBsYXliYWNrIG9mIHRoZSBzdGF0ZSBhbmQgY2FuY2VsIGFueSBwZW5kaW5nIHByb21pc2VzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGNhbmNlbCgpIHtcbiAgICB0aGlzLl9wYXVzZWQgPSB0cnVlO1xuXG4gICAgT2JqZWN0LnZhbHVlcyh0aGlzLl9wcm9taXNlcykuZm9yRWFjaChwcm9taXNlID0+IHtcbiAgICAgIHByb21pc2UuY2FuY2VsKCk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdG9wIHBsYXliYWNrIG9mIHRoZSBzdGF0ZSBhbmQgcmVzb2x2ZSBhbnkgcGVuZGluZyBwcm9taXNlcy5cbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBzdG9wKCkge1xuICAgIHRoaXMuX3BhdXNlZCA9IHRydWU7XG5cbiAgICBPYmplY3QudmFsdWVzKHRoaXMuX3Byb21pc2VzKS5mb3JFYWNoKHByb21pc2UgPT4ge1xuICAgICAgcHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYW5jZWwgYW55IHBlbmRpbmcgcHJvbWlzZXMgYW5kIHJlbW92ZSByZWZlcmVuY2UgdG8gdGhlbS5cbiAgICovXG4gIGRpc2NhcmQoKSB7XG4gICAgdGhpcy5jYW5jZWwoKTtcblxuICAgIGRlbGV0ZSB0aGlzLl9wcm9taXNlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBGb3JjZSB0aGUgaW50ZXJuYWwgd2VpZ2h0IHRvIDAuIFNob3VsZCBiZSBjYWxsZWQgYmVmb3JlIHN3aXRjaGluZyBvciB0cmFuc2l0aW9uaW5nXG4gICAqIHRvIGEgbmV3IHN0YXRlLlxuICAgKi9cbiAgZGVhY3RpdmF0ZSgpIHtcbiAgICB0aGlzLnVwZGF0ZUludGVybmFsV2VpZ2h0KDApO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEFic3RyYWN0U3RhdGU7XG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cclxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVC0wXHJcbmltcG9ydCBEZWZlcnJlZCBmcm9tICdjb3JlL0RlZmVycmVkJztcclxuaW1wb3J0IEFic3RyYWN0U3RhdGUgZnJvbSAnLi9BYnN0cmFjdFN0YXRlJztcclxuXHJcbi8qKlxyXG4gKiBDbGFzcyBmb3Igc21vb3RoIHRyYW5zaXRpb25pbmcgYmV0d2VlbiBzdGF0ZXMgb24gYW4gYW5pbWF0aW9uIGxheWVyLlxyXG4gKlxyXG4gKiBAZXh0ZW5kcyBBYnN0cmFjdFN0YXRlXHJcbiAqL1xyXG5jbGFzcyBUcmFuc2l0aW9uU3RhdGUgZXh0ZW5kcyBBYnN0cmFjdFN0YXRlIHtcclxuICBjb25zdHJ1Y3RvcihvcHRpb25zID0ge30pIHtcclxuICAgIHN1cGVyKG9wdGlvbnMpO1xyXG5cclxuICAgIHRoaXMuX3RvID0gbnVsbDtcclxuICAgIHRoaXMuX2Zyb20gPSBbXTtcclxuICAgIHRoaXMuX3dlaWdodFByb21pc2UgPSBEZWZlcnJlZC5yZXNvbHZlKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgaW50ZXJuYWxXZWlnaHQoKSB7XHJcbiAgICAvLyBGaW5kIHRoZSBjb21iaW5lZCB3ZWlnaHQgb2YgYWxsIHN1Yi1zdGF0ZXNcclxuICAgIGxldCB0b3RhbFdlaWdodCA9IDA7XHJcblxyXG4gICAgaWYgKHRoaXMuX3RvKSB7XHJcbiAgICAgIHRvdGFsV2VpZ2h0ICs9IHRoaXMuX3RvLndlaWdodDtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9mcm9tLmZvckVhY2goc3RhdGUgPT4ge1xyXG4gICAgICB0b3RhbFdlaWdodCArPSBzdGF0ZS53ZWlnaHQ7XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gdG90YWxXZWlnaHQgKiB0aGlzLl9pbnRlcm5hbFdlaWdodDtcclxuICB9XHJcblxyXG4gIHVwZGF0ZUludGVybmFsV2VpZ2h0KGZhY3Rvcikge1xyXG4gICAgc3VwZXIudXBkYXRlSW50ZXJuYWxXZWlnaHQoZmFjdG9yKTtcclxuXHJcbiAgICB0aGlzLl9mcm9tLmZvckVhY2goc3RhdGUgPT4ge1xyXG4gICAgICBzdGF0ZS51cGRhdGVJbnRlcm5hbFdlaWdodCh0aGlzLl9pbnRlcm5hbFdlaWdodCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAodGhpcy5fdG8pIHtcclxuICAgICAgdGhpcy5fdG8udXBkYXRlSW50ZXJuYWxXZWlnaHQodGhpcy5faW50ZXJuYWxXZWlnaHQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlIHN1Yi1zdGF0ZXMgdGhlIHRyYW5zaXRpb24gaXMgY29udHJvbGxpbmcgYW5kIHN0YXJ0IG5ldyB3ZWlnaHRcclxuICAgKiBhbmltYXRpb25zIG9uIGVhY2ggb25lLiBUaGlzIHNob3VsZCBiZSBjYWxsZWQgZWFjaCB0aW1lIHRoZSBjdXJyZW50IHN0YXRlIG9mXHJcbiAgICogYW4gYW5pbWF0aW9uIGxheWVyIGdldHMgdXBkYXRlZCB0byBhIG5ldyB2YWx1ZSBhbmQgYSB0cmFuc2l0aW9uIHRpbWUgZ3JlYXRlclxyXG4gICAqIHRoYXQgemVybyBpcyBzcGVjaWZpZWQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge0FycmF5LjxBYnN0cmFjdFN0YXRlPn0gW2N1cnJlbnRTdGF0ZXM9W11dIC0gU3RhdGVzIHdob3NlIHdlaWdodCB2YWx1ZXNcclxuICAgKiB3aWxsIGJlIGFuaW1hdGVkIHRvIDAuXHJcbiAgICogQHBhcmFtIHtBYnN0cmFjdFN0YXRlPX0gdGFyZ2V0U3RhdGUgLSBTdGF0ZSB3aG9zZSB3ZWlnaHQgd2lsbCBiZSBhbmltYXRlZFxyXG4gICAqIHRvIDEuXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IHRyYW5zaXRpb25UaW1lIC0gQW1vdW50IG9mIHRpbWUgaXQgd2lsbCBpbiBzZWNvbmRzIHRha2UgZm9yXHJcbiAgICogd2VpZ2h0IGFuaW1hdGlvbnMgdG8gY29tcGxldGUuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IGVhc2luZ0ZuIC0gRWFzaW5nIGZ1bmN0aW9uIHRvIHVzZSBmb3Igd2VpZ2h0IGFuaW1hdGlvbnMuXHJcbiAgICogRGVmYXVsdCBpcyBFYXNpbmcuTGluZWFyLkluT3V0LlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvbkNvbXBsZXRlIC0gRnVuY3Rpb24gdG8gZXhlY3V0ZSBvbmNlIGFsbCB3ZWlnaHQgYW5pbWF0aW9uc1xyXG4gICAqIGNvbXBsZXRlLlxyXG4gICAqL1xyXG4gIGNvbmZpZ3VyZShcclxuICAgIGN1cnJlbnRTdGF0ZXMgPSBbXSxcclxuICAgIHRhcmdldFN0YXRlLFxyXG4gICAgdHJhbnNpdGlvblRpbWUsXHJcbiAgICBlYXNpbmdGbixcclxuICAgIG9uQ29tcGxldGVcclxuICApIHtcclxuICAgIC8vIERlYWN0aXZhdGUgYW55IHN0YXRlcyB0aGF0IGFyZW4ndCBpbiB0aGUgbmV3IGNvbmZpZ3VyYXRpb25cclxuICAgIGlmICh0aGlzLl90byA9PT0gdGFyZ2V0U3RhdGUgfHwgY3VycmVudFN0YXRlcy5pbmNsdWRlcyh0aGlzLl90bykpIHtcclxuICAgICAgdGhpcy5fdG8gPSBudWxsO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fZnJvbSA9IHRoaXMuX2Zyb20uZmlsdGVyKFxyXG4gICAgICBzdGF0ZSA9PiBzdGF0ZSAhPT0gdGFyZ2V0U3RhdGUgJiYgIWN1cnJlbnRTdGF0ZXMuaW5jbHVkZXMoc3RhdGUpXHJcbiAgICApO1xyXG4gICAgdGhpcy5kZWFjdGl2YXRlKCk7XHJcblxyXG4gICAgdGhpcy5fZnJvbSA9IGN1cnJlbnRTdGF0ZXM7XHJcbiAgICB0aGlzLl90byA9IHRhcmdldFN0YXRlO1xyXG4gICAgdGhpcy5yZXNldCh0cmFuc2l0aW9uVGltZSwgZWFzaW5nRm4sIG9uQ29tcGxldGUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU3RhcnQgbmV3IHdlaWdodCBhbmltYXRpb25zIHN0YXRlIHRoZSB0cmFuc2l0aW9uIGNvbnRyb2xzLiBUaGlzIHNob3VsZCBiZSBjYWxsZWRcclxuICAgKiBpZiBhbiBhbmltYXRpb24gaXMgcGxheWVkIHdpdGggYSB0cmFuc2l0aW9uIHRpbWUgZ3JlYXRlciB0aGFuIHplcm8gYW5kIGEgdHJhbnN0aW9uXHJcbiAgICogdG8gdGhhdCBhbmltYXRpb24gd2FzIGFscmVhZHkgaW4gcHJvZ3Jlc3MuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge251bWJlcn0gdHJhbnNpdGlvblRpbWUgLSBBbW91bnQgb2YgdGltZSBpdCB3aWxsIGluIHNlY29uZHMgdGFrZSBmb3JcclxuICAgKiB3ZWlnaHQgYW5pbWF0aW9ucyB0byBjb21wbGV0ZS5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gZWFzaW5nRm4gLSBFYXNpbmcgZnVuY3Rpb24gdG8gdXNlIGZvciB3ZWlnaHQgYW5pbWF0aW9ucy5cclxuICAgKiBEZWZhdWx0IGlzIEVhc2luZy5MaW5lYXIuSW5PdXQuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9uQ29tcGxldGUgLSBGdW5jdGlvbiB0byBleGVjdXRlIG9uY2UgYWxsIHdlaWdodCBhbmltYXRpb25zXHJcbiAgICogY29tcGxldGUuXHJcbiAgICovXHJcbiAgcmVzZXQodHJhbnNpdGlvblRpbWUsIGVhc2luZ0ZuLCBvbkNvbXBsZXRlKSB7XHJcbiAgICAvLyBTdG9wIGFueSBwZW5kaW5nIHByb21pc2VzXHJcbiAgICB0aGlzLl93ZWlnaHRQcm9taXNlLmNhbmNlbCgpO1xyXG5cclxuICAgIC8vIFN0YXJ0IHR3ZWVuaW5nIHdlaWdodCB0byAwIGZvciB0aGUgY3VycmVudCBzdGF0ZXNcclxuICAgIGNvbnN0IHdlaWdodFByb21pc2VzID0gdGhpcy5fZnJvbS5tYXAoc3RhdGUgPT5cclxuICAgICAgc3RhdGUuc2V0V2VpZ2h0KDAsIHRyYW5zaXRpb25UaW1lLCBlYXNpbmdGbilcclxuICAgICk7XHJcblxyXG4gICAgLy8gU3RhcnQgdHdlZW5pbmcgd2VpZ2h0IHRvIDEgZm9yIHRoZSB0YXJnZXQgc3RhdGVcclxuICAgIGlmICh0aGlzLl90bykge1xyXG4gICAgICB3ZWlnaHRQcm9taXNlcy5wdXNoKHRoaXMuX3RvLnNldFdlaWdodCgxLCB0cmFuc2l0aW9uVGltZSwgZWFzaW5nRm4pKTtcclxuICAgICAgdGhpcy5uYW1lID0gdGhpcy5fdG8ubmFtZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMubmFtZSA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fd2VpZ2h0UHJvbWlzZSA9IERlZmVycmVkLmFsbCh3ZWlnaHRQcm9taXNlcywgKCkgPT4ge1xyXG4gICAgICB0aGlzLl9mcm9tLmZvckVhY2goc3RhdGUgPT4ge1xyXG4gICAgICAgIHN0YXRlLmNhbmNlbCgpO1xyXG4gICAgICAgIHN0YXRlLmRlYWN0aXZhdGUoKTtcclxuICAgICAgfSk7XHJcbiAgICAgIGlmICh0eXBlb2Ygb25Db21wbGV0ZSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgIG9uQ29tcGxldGUoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwbGF5KG9uRmluaXNoLCBvbkVycm9yLCBvbkNhbmNlbCwgb25OZXh0KSB7XHJcbiAgICB0aGlzLl9wYXVzZWQgPSBmYWxzZTtcclxuICAgIHRoaXMuX3BsYXlDYWxsYmFja3Mub25GaW5pc2ggPSBvbkZpbmlzaDtcclxuICAgIHRoaXMuX3BsYXlDYWxsYmFja3Mub25FcnJvciA9IG9uRXJyb3I7XHJcbiAgICB0aGlzLl9wbGF5Q2FsbGJhY2tzLm9uQ2FuY2VsID0gb25DYW5jZWw7XHJcblxyXG4gICAgY29uc3QgcHJvbWlzZXMgPSBbdGhpcy5fd2VpZ2h0UHJvbWlzZV07XHJcblxyXG4gICAgdGhpcy5fZnJvbS5mb3JFYWNoKHN0YXRlID0+IHtcclxuICAgICAgc3RhdGUucmVzdW1lKCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAodGhpcy5fdG8pIHtcclxuICAgICAgdGhpcy5fcHJvbWlzZXMucGxheSA9IHRoaXMuX3RvLnBsYXkoXHJcbiAgICAgICAgdW5kZWZpbmVkLFxyXG4gICAgICAgIHVuZGVmaW5lZCxcclxuICAgICAgICB1bmRlZmluZWQsXHJcbiAgICAgICAgb25OZXh0XHJcbiAgICAgICk7XHJcbiAgICAgIHByb21pc2VzLnB1c2godGhpcy5fcHJvbWlzZXMucGxheSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fcHJvbWlzZXMuZmluaXNoID0gRGVmZXJyZWQuYWxsKHByb21pc2VzLCBvbkZpbmlzaCwgb25FcnJvciwgb25DYW5jZWwpO1xyXG4gICAgcmV0dXJuIHRoaXMuX3Byb21pc2VzLmZpbmlzaDtcclxuICB9XHJcblxyXG4gIHBhdXNlKCkge1xyXG4gICAgdGhpcy5fZnJvbS5mb3JFYWNoKHN0YXRlID0+IHtcclxuICAgICAgc3RhdGUucGF1c2UoKTtcclxuICAgIH0pO1xyXG5cclxuICAgIGlmICh0aGlzLl90bykge1xyXG4gICAgICB0aGlzLl90by5wYXVzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBzdXBlci5wYXVzZSgpO1xyXG4gIH1cclxuXHJcbiAgcmVzdW1lKG9uRmluaXNoLCBvbkVycm9yLCBvbkNhbmNlbCwgb25OZXh0KSB7XHJcbiAgICB0aGlzLl9wYXVzZWQgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAoIXRoaXMuX3Byb21pc2VzLnBsYXkucGVuZGluZykge1xyXG4gICAgICB0aGlzLl9wbGF5Q2FsbGJhY2tzLm9uRmluaXNoID0gb25GaW5pc2ggfHwgdGhpcy5fcGxheUNhbGxiYWNrcy5vbkZpbmlzaDtcclxuICAgICAgdGhpcy5fcGxheUNhbGxiYWNrcy5vbkVycm9yID0gb25FcnJvciB8fCB0aGlzLl9wbGF5Q2FsbGJhY2tzLm9uRXJyb3I7XHJcbiAgICAgIHRoaXMuX3BsYXlDYWxsYmFja3Mub25DYW5jZWwgPSBvbkNhbmNlbCB8fCB0aGlzLl9wbGF5Q2FsbGJhY2tzLm9uQ2FuY2VsO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHByb21pc2VzID0gW3RoaXMuX3dlaWdodFByb21pc2VdO1xyXG5cclxuICAgIHRoaXMuX2Zyb20uZm9yRWFjaChzdGF0ZSA9PiB7XHJcbiAgICAgIHN0YXRlLnJlc3VtZSgpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKHRoaXMuX3RvKSB7XHJcbiAgICAgIHRoaXMuX3Byb21pc2VzLnBsYXkgPSB0aGlzLl90by5yZXN1bWUoXHJcbiAgICAgICAgdW5kZWZpbmVkLFxyXG4gICAgICAgIHVuZGVmaW5lZCxcclxuICAgICAgICB1bmRlZmluZWQsXHJcbiAgICAgICAgb25OZXh0XHJcbiAgICAgICk7XHJcbiAgICAgIHByb21pc2VzLnB1c2godGhpcy5fcHJvbWlzZXMucGxheSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fcHJvbWlzZXMuZmluaXNoID0gRGVmZXJyZWQuYWxsKFxyXG4gICAgICBwcm9taXNlcyxcclxuICAgICAgdGhpcy5fcGxheUNhbGxiYWNrcy5vbkZpbmlzaCxcclxuICAgICAgdGhpcy5fcGxheUNhbGxiYWNrcy5vbkVycm9yLFxyXG4gICAgICB0aGlzLl9wbGF5Q2FsbGJhY2tzLm9uQ2FuY2VsXHJcbiAgICApO1xyXG4gICAgcmV0dXJuIHRoaXMuX3Byb21pc2VzLmZpbmlzaDtcclxuICB9XHJcblxyXG4gIGNhbmNlbCgpIHtcclxuICAgIHRoaXMuX2Zyb20uZm9yRWFjaChzdGF0ZSA9PiB7XHJcbiAgICAgIHN0YXRlLnBhdXNlKCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAodGhpcy5fdG8pIHtcclxuICAgICAgdGhpcy5fdG8uY2FuY2VsKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fd2VpZ2h0UHJvbWlzZS5jYW5jZWwoKTtcclxuXHJcbiAgICByZXR1cm4gc3VwZXIuY2FuY2VsKCk7XHJcbiAgfVxyXG5cclxuICBzdG9wKCkge1xyXG4gICAgdGhpcy5fZnJvbS5mb3JFYWNoKHN0YXRlID0+IHtcclxuICAgICAgc3RhdGUucGF1c2UoKTtcclxuICAgIH0pO1xyXG5cclxuICAgIGlmICh0aGlzLl90bykge1xyXG4gICAgICB0aGlzLl90by5zdG9wKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHN1cGVyLnN0b3AoKTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZShkZWx0YVRpbWUpIHtcclxuICAgIHN1cGVyLnVwZGF0ZShkZWx0YVRpbWUpO1xyXG5cclxuICAgIHRoaXMuX2Zyb20uZm9yRWFjaChzdGF0ZSA9PiB7XHJcbiAgICAgIHN0YXRlLnVwZGF0ZShkZWx0YVRpbWUpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKHRoaXMuX3RvKSB7XHJcbiAgICAgIHRoaXMuX3RvLnVwZGF0ZShkZWx0YVRpbWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZGlzY2FyZCgpIHtcclxuICAgIHN1cGVyLmRpc2NhcmQoKTtcclxuXHJcbiAgICB0aGlzLl93ZWlnaHRQcm9taXNlLmNhbmNlbCgpO1xyXG4gICAgZGVsZXRlIHRoaXMuX3dlaWdodFByb21pc2U7XHJcbiAgICB0aGlzLl90byA9IG51bGw7XHJcbiAgICB0aGlzLl9mcm9tLmxlbmd0aCA9IDA7XHJcbiAgfVxyXG5cclxuICBkZWFjdGl2YXRlKCkge1xyXG4gICAgaWYgKHRoaXMuX3RvKSB7XHJcbiAgICAgIHRoaXMuX3RvLmRlYWN0aXZhdGUoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9mcm9tLmZvckVhY2goc3RhdGUgPT4ge1xyXG4gICAgICBzdGF0ZS5kZWFjdGl2YXRlKCk7XHJcbiAgICB9KTtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IFRyYW5zaXRpb25TdGF0ZTtcclxuIiwiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTBcbi8qIGVzbGludC1kaXNhYmxlIG1heC1jbGFzc2VzLXBlci1maWxlICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tZW1wdHktZnVuY3Rpb24gKi9cbi8qIGVzbGludC1kaXNhYmxlIGdldHRlci1yZXR1cm4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLXVzZWxlc3MtY29uc3RydWN0b3IgKi9cbmltcG9ydCBUcmFuc2l0aW9uU3RhdGUgZnJvbSAnLi9zdGF0ZS9UcmFuc2l0aW9uU3RhdGUnO1xuaW1wb3J0IERlZmVycmVkIGZyb20gJy4uL0RlZmVycmVkJztcblxuLyoqXG4gKiBDbGFzcyBmYWN0b3J5IGludGVyZmFjZSBmb3IgY29udHJvbGxpbmcgcGxheWJhY2sgb2YgYSBjb2xsZWN0aW9uIG9mIGFuaW1hdGlvbnMuXG4gKiBPbmUgYW5pbWF0aW9uIGNhbiBiZSBwbGF5ZWQgYXQgYW55IGdpdmVuIHRpbWUsIGNyb3NzZmFkaW5nIGJldHdlZW4gYW5pbWF0aW9uc1xuICogd2lsbCByZXN1bHQgaW4gcGxheWluZyBhIHtAbGluayBUcmFuc2l0aW9uU3RhdGV9LlxuICpcbiAqIEBpbnRlcmZhY2VcbiAqL1xuY2xhc3MgQW5pbWF0aW9uUGxheWVySW50ZXJmYWNlIHtcbiAgLyoqXG4gICAqIEdldHMgd2hldGhlciBvciBub3QgdGhlIHBsYXllciBpcyB1cGRhdGluZyBzdGF0ZXMuXG4gICAqXG4gICAqIEByZWFkb25seVxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICovXG4gIGdldCBwYXVzZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3BhdXNlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGFuZCBzZXRzIHRoZSBkZWZhdWx0IG51bWJlciBvZiBzZWNvbmRzIGl0IHRha2VzIHRvIHRyYW5zaXRpb24gdG8gYSBuZXdcbiAgICogYW5pbWF0aW9uLlxuICAgKlxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0IHRyYW5zaXRpb25UaW1lKCkge31cblxuICBzZXQgdHJhbnNpdGlvblRpbWUoc2Vjb25kcykge31cblxuICAvKipcbiAgICogR2V0cyBhbmQgc2V0cyB0aGUgZGVmYXVsdCBlYXNpbmcgZnVuY3Rpb24gdG8gdXNlIHdoZW4gdHJhbnNpdGlvbmluZyBhbmRcbiAgICogc2V0dGluZyB3ZWlnaHRzLlxuICAgKlxuICAgKiBAdHlwZSB7RnVuY3Rpb259XG4gICAqL1xuICBnZXQgZWFzaW5nRm4oKSB7fVxuXG4gIHNldCBlYXNpbmdGbihmbikge31cblxuICAvKipcbiAgICogR2V0cyB0aGUgc3RhdGUgdGhlIGxheWVyIGlzIGN1cnJlbnRseSBpbiBjb250cm9sIG9mLlxuICAgKlxuICAgKiBAcmVhZG9ubHlcbiAgICogQHR5cGUge0Fic3RyYWN0U3RhdGV9XG4gICAqL1xuICBnZXQgY3VycmVudFN0YXRlKCkge31cblxuICAvKipcbiAgICogR2V0cyB0aGUgbmFtZSBvZiB0aGUgc3RhdGUgdGhlIGxheWVyIGlzIGN1cnJlbnRseSBpbiBjb250cm9sIG9mLlxuICAgKlxuICAgKiBAcmVhZG9ubHlcbiAgICogQHR5cGUge3N0cmluZ31cbiAgICovXG4gIGdldCBjdXJyZW50QW5pbWF0aW9uKCkge31cblxuICAvKipcbiAgICogR2V0cyB3aGV0aGVyIG9yIG5vdCB0aGUgbGF5ZXIgaXMgY3VycmVudGx5IHRyYW5zaXRpb25pbmcgdG8gYSBuZXcgYW5pbWF0aW9uLlxuICAgKlxuICAgKiBAcmVhZG9ubHlcbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqL1xuICBnZXQgaXNUcmFuc2l0aW9uaW5nKCkge31cblxuICAvKipcbiAgICogVXBkYXRlIHRoZSBsYXllcidzIGN1cnJlbnQgc3RhdGUgdG8gYSBuZXcgdmFsdWUuIElmIHRyYW5zaXRpb25UaW1lIGlzIGRlZmluZWRcbiAgICogYW5kIGdyZWF0ZXIgdGhhbiB6ZXJvLCBwZXJmb3JtIGEgc21vb3RoIGJsZW5kIGJldHdlZW4gYW55IHN0YXRlcyB0aGF0IGN1cnJlbnRseVxuICAgKiBoYXZlIG5vbi16ZXJvIHdlaWdodCB2YWx1ZXMgYW5kIHRoZSBuZXcgc3RhdGUuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqXG4gICAqIEBwYXJhbSB7KHN0cmluZ3xudWxsKX0gbmFtZSAtIE5hbWUgb2YgdGhlIHN0YXRlIHRvIHRyYW5zaXRpb24gdG8uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwbGF5TWV0aG9kIC0gTmFtZSBvZiB0aGUgb3BlcmF0aW9uIGJlaW5nIHByZXBhcmVkIGZvciwgdG8gYmVcbiAgICogdXNlZCBpbiBlcnJvciBtZXNzYWdpbmcuXG4gICAqIEBwYXJhbSB7bnVtYmVyPX0gdHJhbnNpdGlvblRpbWUgLSBBbW91bnQgb2YgdGltZSBpbiBzZWNvbmRzIGl0IHdpbGwgdGFrZSB0b1xuICAgKiBzd2l0Y2ggdG8gdGhlIG5ldyBzdGF0ZS5cbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IGVhc2luZ0ZuIC0gRWFzaW5nIGZ1bmN0aW9uIHRvIHVzZSB3aGVuIHRyYW5zaXRpb25pbmcgdG8gYVxuICAgKiBuZXcgc3RhdGUgb3ZlciB0aW1lLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb25FcnJvciAtIEZ1bmN0aW9uIHRvIGV4ZWN1dGUgaWYgYW4gZXJyb3IgaXMgZW5jb3VudGVyZWQuXG4gICAqL1xuICBfcHJlcGFyZUN1cnJlbnRTdGF0ZShuYW1lLCBwbGF5TWV0aG9kLCB0cmFuc2l0aW9uVGltZSwgZWFzaW5nRm4sIG9uRXJyb3IpIHt9XG5cbiAgLyoqXG4gICAqIFN0YXJ0IHBsYXliYWNrIGFuIGFuaW1hdGlvbiBmcm9tIHRoZSBiZWdpbm5pbmcuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gTmFtZSBvZiB0aGUgYW5pbWF0aW9uIHRvIHBsYXkuXG4gICAqIEBwYXJhbSB7bnVtYmVyPX0gdHJhbnNpdGlvblRpbWUgLSBBbW91bnQgb2YgdGltZSBpdCB3aWxsIHRha2UgYmVmb3JlIHRoZVxuICAgKiBuZXcgc3RhdGUgaGFzIGZ1bGwgaW5mbHVlbmNlIGZvciB0aGUgbGF5ZXIuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBlYXNpbmdGbiAtIEVhc2luZyBmdW5jdGlvbiB0byB1c2UgZm9yIGJsZW5kaW5nIGlmIHRyYW5zaXRpb25UaW1lXG4gICAqIGlzIGdyZWF0ZXIgdGhhbiB6ZXJvLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb25GaW5pc2ggLSBGdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGFuaW1hdGlvbiBmaW5pc2hlcy5cbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9uRXJyb3IgLSBGdW5jdGlvbiB0byBleGVjdXRlIGlmIHRoZSBhbmltYXRpb24gZW5jb3VudGVyc1xuICAgKiBhbiBlcnJvciBkdXJpbmcgcGxheWJhY2suXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvbkNhbmNlbCAtIEZ1bmN0aW9uIHRvIGV4ZWN1dGUgaWYgcGxheWJhY2sgaXMgY2FuY2VsZWQuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvbk5leHQgLSBGdW5jdGlvbiB0byBleGVjdXRlIGlmIGFuIGFuaW1hdGlvbiBxdWV1ZSBpc1xuICAgKiBwbGF5ZWQgYW5kIGl0IGFkdmFuY2VzIHRvIHRoZSBuZXh0IGFuaW1hdGlvbi5cbiAgICpcbiAgICogQHJldHVybnMge0RlZmVycmVkfVxuICAgKi9cbiAgcGxheUFuaW1hdGlvbihcbiAgICBuYW1lLFxuICAgIHRyYW5zaXRpb25UaW1lLFxuICAgIGVhc2luZ0ZuLFxuICAgIG9uRmluaXNoLFxuICAgIG9uRXJyb3IsXG4gICAgb25DYW5jZWwsXG4gICAgb25OZXh0XG4gICkge31cblxuICAvKipcbiAgICogQ2FuY2VsIHBsYXliYWNrIG9mIHRoZSBjdXJyZW50IGFuaW1hdGlvbi5cbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBjYW5jZWxBbmltYXRpb24oKSB7fVxuXG4gIC8qKlxuICAgKiBQYXVzZSBwbGF5YmFjayBvZiB0aGUgY3VycmVudCBhbmltYXRpb24uXG4gICAqXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgcGF1c2VBbmltYXRpb24oKSB7fVxuXG4gIC8qKlxuICAgKiBSZXN1bWUgcGxheWJhY2sgb2YgYW4gYW5pbWF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZz19IG5hbWUgLSBOYW1lIG9mIHRoZSBhbmltYXRpb24gdG8gcmVzdW1lIHBsYXliYWNrIGZvci4gRGVmYXVsdFxuICAgKiBpcyB0aGUgbGF5ZXIncyBjdXJyZW50IGFuaW1hdGlvbiBuYW1lLlxuICAgKiBAcGFyYW0ge251bWJlcj19IHRyYW5zaXRpb25UaW1lIC0gQW1vdW50IG9mIHRpbWUgaXQgd2lsbCB0YWtlIGJlZm9yZSB0aGVcbiAgICogbmV3IHN0YXRlIGhhcyBmdWxsIGluZmx1ZW5jZSBmb3IgdGhlIGxheWVyLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb25GaW5pc2ggLSBGdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIHN0YXRlIGZpbmlzaGVzLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb25FcnJvciAtIEZ1bmN0aW9uIHRvIGV4ZWN1dGUgaWYgdGhlIHN0YXRlIGVuY291bnRlcnNcbiAgICogYW4gZXJyb3IgZHVyaW5nIHBsYXliYWNrLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb25DYW5jZWwgLSBGdW5jdGlvbiB0byBleGVjdXRlIGlmIHBsYXliYWNrIGlzIGNhbmNlbGVkLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb25OZXh0IC0gRnVuY3Rpb24gdG8gZXhlY3V0ZSBpZiBhbiBhbmltYXRpb24gcXVldWUgaXNcbiAgICogcGxheWVkIGFuZCBpdCBhZHZhbmNlcyB0byB0aGUgbmV4dCBhbmltYXRpb24uXG4gICAqXG4gICAqIEByZXR1cm5zIHtEZWZlcnJlZH1cbiAgICovXG4gIHJlc3VtZUFuaW1hdGlvbihcbiAgICBuYW1lLFxuICAgIHRyYW5zaXRpb25UaW1lLFxuICAgIGVhc2luZ0ZuLFxuICAgIG9uRmluaXNoLFxuICAgIG9uRXJyb3IsXG4gICAgb25DYW5jZWwsXG4gICAgb25OZXh0XG4gICkge31cblxuICAvKipcbiAgICogU3RvcCBwbGF5YmFjayBvZiB0aGUgY3VycmVudCBhbmltYXRpb24uXG4gICAqXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgc3RvcEFuaW1hdGlvbigpIHt9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSB0aGUgY3VycmVudCBhbmltYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBkZWx0YVRpbWUgLSBUaW1lIGluIG1pbGxpc2Vjb25kcyBzaW5jZSB0aGUgbGFzdCB1cGRhdGUuXG4gICAqL1xuICB1cGRhdGUoZGVsdGFUaW1lKSB7fVxuXG4gIC8qKlxuICAgKiBEaXNjYXJkIHRoZSB0cmFuc2l0aW9uIHN0YXRlLlxuICAgKi9cbiAgZGlzY2FyZCgpIHt9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBjbGFzcyB0aGF0IGltcGxlbWVudHMge0BsaW5rIEFuaW1hdGlvblBsYXllckludGVyZmFjZX0gYW5kIGV4dGVuZHNcbiAgICogYSBzcGVjaWZpZWQgYmFzZSBjbGFzcy5cbiAgICpcbiAgICogQHBhcmFtIHtDbGFzc30gW0Jhc2VDbGFzcyA9IGNsYXNze31dIC0gVGhlIGNsYXNzIHRvIGV4dGVuZC5cbiAgICpcbiAgICogQHJldHVybiB7Q2xhc3N9IEEgY2xhc3MgdGhhdCBleHRlbmRzIGBCYXNlQ2xhc3NgIGFuZCBpbXBsZW1lbnRzIHtAbGluayBBbmltYXRpb25QbGF5ZXJJbnRlcmZhY2V9LlxuICAgKi9cbiAgc3RhdGljIE1peGluKEJhc2VDbGFzcyA9IGNsYXNzIHt9KSB7XG4gICAgY29uc3QgQW5pbWF0aW9uUGxheWVyTWl4aW4gPSBjbGFzcyBleHRlbmRzIEJhc2VDbGFzcyB7XG4gICAgICBjb25zdHJ1Y3RvcihvcHRpb25zID0ge30sIC4uLmFyZ3MpIHtcbiAgICAgICAgc3VwZXIob3B0aW9ucywgLi4uYXJncyk7XG5cbiAgICAgICAgdGhpcy5fdHJhbnNpdGlvblN0YXRlID0gbmV3IFRyYW5zaXRpb25TdGF0ZSgpO1xuICAgICAgICB0aGlzLl9zdGF0ZXMgPSB0aGlzLl9zdGF0ZXMgIT09IHVuZGVmaW5lZCA/IHRoaXMuX3N0YXRlcyA6IG5ldyBNYXAoKTtcbiAgICAgICAgdGhpcy5fY3VycmVudFN0YXRlID0gbnVsbDtcbiAgICAgICAgdGhpcy5fcGF1c2VkID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5fdHJhbnNpdGlvblRpbWUgPVxuICAgICAgICAgIE51bWJlcihvcHRpb25zLnRyYW5zaXRpb25UaW1lKSA+PSAwXG4gICAgICAgICAgICA/IE51bWJlcihvcHRpb25zLnRyYW5zaXRpb25UaW1lKVxuICAgICAgICAgICAgOiAwO1xuXG4gICAgICAgIHRoaXMuX2Vhc2luZ0ZuID1cbiAgICAgICAgICB0eXBlb2Ygb3B0aW9ucy5lYXNpbmdGbiA9PT0gJ2Z1bmN0aW9uJyA/IG9wdGlvbnMuZWFzaW5nRm4gOiB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIGdldCBwYXVzZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wYXVzZWQ7XG4gICAgICB9XG5cbiAgICAgIGdldCB0cmFuc2l0aW9uVGltZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RyYW5zaXRpb25UaW1lO1xuICAgICAgfVxuXG4gICAgICBzZXQgdHJhbnNpdGlvblRpbWUoc2Vjb25kcykge1xuICAgICAgICBzZWNvbmRzID0gTnVtYmVyKHNlY29uZHMpO1xuXG4gICAgICAgIGlmICghKHNlY29uZHMgPj0gMCkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgQ2Fubm90IHNldCB0cmFuc2l0aW9uIHRpbWUgZm9yICR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfSB0byAke3NlY29uZHN9LiBTZWNvbmRzIG11c3QgYmUgYSBudW1lcmljIHZhbHVlIGdyZWF0aGVyIHRoYW4gb3IgZXF1YWwgdG8gemVyby5gXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3RyYW5zaXRpb25UaW1lID0gc2Vjb25kcztcbiAgICAgIH1cblxuICAgICAgZ2V0IGVhc2luZ0ZuKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZWFzaW5nRm47XG4gICAgICB9XG5cbiAgICAgIHNldCBlYXNpbmdGbihmbikge1xuICAgICAgICB0aGlzLl9lYXNpbmdGbiA9IGZuO1xuICAgICAgfVxuXG4gICAgICBnZXQgY3VycmVudFN0YXRlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY3VycmVudFN0YXRlO1xuICAgICAgfVxuXG4gICAgICBnZXQgY3VycmVudEFuaW1hdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRTdGF0ZSkge1xuICAgICAgICAgIHJldHVybiB0aGlzLl9jdXJyZW50U3RhdGUubmFtZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBnZXQgaXNUcmFuc2l0aW9uaW5nKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY3VycmVudFN0YXRlID09PSB0aGlzLl90cmFuc2l0aW9uU3RhdGU7XG4gICAgICB9XG5cbiAgICAgIF9wcmVwYXJlQ3VycmVudFN0YXRlKFxuICAgICAgICBuYW1lLFxuICAgICAgICBwbGF5TWV0aG9kLFxuICAgICAgICB0cmFuc2l0aW9uVGltZSxcbiAgICAgICAgZWFzaW5nRm4sXG4gICAgICAgIG9uRXJyb3JcbiAgICAgICkge1xuICAgICAgICBpZiAobmFtZSAhPT0gbnVsbCAmJiAhdGhpcy5fc3RhdGVzLmhhcyhuYW1lKSkge1xuICAgICAgICAgIGNvbnN0IGUgPSBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgQ2Fubm90ICR7cGxheU1ldGhvZH0gYW5pbWF0aW9uICR7bmFtZX0uIE5vIGFuaW1hdGlvbiBleGlzdHMgd2l0aCB0aGlzIG5hbWUuYFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAodHlwZW9mIG9uRXJyb3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIG9uRXJyb3IoZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHRhcmdldFN0YXRlID0gbmFtZSAhPT0gbnVsbCA/IHRoaXMuX3N0YXRlcy5nZXQobmFtZSkgOiBudWxsO1xuXG4gICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgbmV3IHN0YXRlIGlzbid0IGFscmVhZHkgcGxheWluZ1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50QW5pbWF0aW9uICE9PSBuYW1lKSB7XG4gICAgICAgICAgLy8gU3dpdGNoIHRvIHRoZSBuZXcgc3RhdGUgaW1tZWRpYXRlbHlcbiAgICAgICAgICBpZiAodHJhbnNpdGlvblRpbWUgPD0gMCkge1xuICAgICAgICAgICAgLy8gQ2FuY2VsIHRoZSBjdXJyZW50IHN0YXRlIGFuZCBzZXQgaXRzIHdlaWdodCB0byAwXG4gICAgICAgICAgICBpZiAodGhpcy5fY3VycmVudFN0YXRlKSB7XG4gICAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRTdGF0ZS5jYW5jZWwoKTtcbiAgICAgICAgICAgICAgdGhpcy5fY3VycmVudFN0YXRlLndlaWdodCA9IDA7XG4gICAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRTdGF0ZS5kZWFjdGl2YXRlKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRTdGF0ZSA9IHRhcmdldFN0YXRlO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBCbGVuZCB0byB0aGUgbmV3IHN0YXRlIG92ZXIgdGltZVxuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRvIHRyYW5zaXRpb24gb3V0IG9mIGFueSBzdGF0ZXMgd2l0aCBub24temVybyB3ZWlnaHRcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRTdGF0ZXMgPSBbLi4udGhpcy5fc3RhdGVzLnZhbHVlcygpXS5maWx0ZXIoXG4gICAgICAgICAgICAgIHMgPT4gcyAhPT0gdGFyZ2V0U3RhdGUgJiYgKHMud2VpZ2h0IHx8IHMud2VpZ2h0UGVuZGluZylcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgdHJhbnNpdGlvbiBzdGF0ZSB3aXRoIG5ldyBpbnB1dHNcbiAgICAgICAgICAgIHRoaXMuX3RyYW5zaXRpb25TdGF0ZS5jb25maWd1cmUoXG4gICAgICAgICAgICAgIGN1cnJlbnRTdGF0ZXMsXG4gICAgICAgICAgICAgIHRhcmdldFN0YXRlLFxuICAgICAgICAgICAgICB0cmFuc2l0aW9uVGltZSxcbiAgICAgICAgICAgICAgZWFzaW5nRm4sXG4gICAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jdXJyZW50U3RhdGUgPSB0YXJnZXRTdGF0ZTtcbiAgICAgICAgICAgICAgICB0aGlzLl90cmFuc2l0aW9uU3RhdGUud2VpZ2h0ID0gMDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgdGhpcy5fY3VycmVudFN0YXRlID0gdGhpcy5fdHJhbnNpdGlvblN0YXRlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChwbGF5TWV0aG9kID09PSAncGxheScpIHtcbiAgICAgICAgICB0aGlzLl9jdXJyZW50U3RhdGUuY2FuY2VsKCk7XG5cbiAgICAgICAgICBpZiAodGhpcy5fY3VycmVudFN0YXRlID09PSB0aGlzLl90cmFuc2l0aW9uU3RhdGUpIHtcbiAgICAgICAgICAgIHRoaXMuX3RyYW5zaXRpb25TdGF0ZS5yZXNldCh0cmFuc2l0aW9uVGltZSwgZWFzaW5nRm4sICgpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5fY3VycmVudFN0YXRlID0gdGFyZ2V0U3RhdGU7XG4gICAgICAgICAgICAgIHRoaXMuX3RyYW5zaXRpb25TdGF0ZS53ZWlnaHQgPSAwO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gVXBkYXRlIHdlaWdodCBmb3IgdGhlIG5ldyBjdXJyZW50IHN0YXRlIHNvIGl0IGhhcyBmdWxsIGluZmx1ZW5jZSBmb3IgdGhlIHBsYXllclxuICAgICAgICB0aGlzLl9jdXJyZW50U3RhdGUud2VpZ2h0ID0gMTtcbiAgICAgICAgdGhpcy5fY3VycmVudFN0YXRlLnVwZGF0ZUludGVybmFsV2VpZ2h0KHRoaXMuX2ludGVybmFsV2VpZ2h0KTtcbiAgICAgIH1cblxuICAgICAgcGxheUFuaW1hdGlvbihcbiAgICAgICAgbmFtZSxcbiAgICAgICAgdHJhbnNpdGlvblRpbWUsXG4gICAgICAgIGVhc2luZ0ZuLFxuICAgICAgICBvbkZpbmlzaCxcbiAgICAgICAgb25FcnJvcixcbiAgICAgICAgb25DYW5jZWwsXG4gICAgICAgIG9uTmV4dFxuICAgICAgKSB7XG4gICAgICAgIGxldCBlcnJvcjtcbiAgICAgICAgbGV0IHJlamVjdCA9IGZhbHNlO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHRoaXMuX3ByZXBhcmVDdXJyZW50U3RhdGUoXG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgJ3BsYXknLFxuICAgICAgICAgICAgdHJhbnNpdGlvblRpbWUgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICA/IHRyYW5zaXRpb25UaW1lXG4gICAgICAgICAgICAgIDogdGhpcy5fdHJhbnNpdGlvblRpbWUsXG4gICAgICAgICAgICBlYXNpbmdGbiAhPT0gdW5kZWZpbmVkID8gZWFzaW5nRm4gOiB0aGlzLl9lYXNpbmdGbixcbiAgICAgICAgICAgIG9uRXJyb3JcbiAgICAgICAgICApO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgZXJyb3IgPSBlO1xuICAgICAgICAgIHJlamVjdCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmVqZWN0KSB7XG4gICAgICAgICAgcmV0dXJuIERlZmVycmVkLnJlamVjdChlcnJvcik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5fY3VycmVudFN0YXRlLnBsYXkob25GaW5pc2gsIG9uRXJyb3IsIG9uQ2FuY2VsLCBvbk5leHQpO1xuICAgICAgfVxuXG4gICAgICBwYXVzZUFuaW1hdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRTdGF0ZSkge1xuICAgICAgICAgIHJldHVybiB0aGlzLl9jdXJyZW50U3RhdGUucGF1c2UoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmVzdW1lQW5pbWF0aW9uKFxuICAgICAgICBuYW1lLFxuICAgICAgICB0cmFuc2l0aW9uVGltZSxcbiAgICAgICAgZWFzaW5nRm4sXG4gICAgICAgIG9uRmluaXNoLFxuICAgICAgICBvbkVycm9yLFxuICAgICAgICBvbkNhbmNlbCxcbiAgICAgICAgb25OZXh0XG4gICAgICApIHtcbiAgICAgICAgaWYgKG5hbWUgPT09IHVuZGVmaW5lZCAmJiB0aGlzLl9jdXJyZW50U3RhdGUpIHtcbiAgICAgICAgICBuYW1lID0gdGhpcy5fY3VycmVudFN0YXRlLm5hbWU7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgZXJyb3I7XG4gICAgICAgIGxldCByZWplY3QgPSBmYWxzZTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB0aGlzLl9wcmVwYXJlQ3VycmVudFN0YXRlKFxuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICdyZXN1bWUnLFxuICAgICAgICAgICAgdHJhbnNpdGlvblRpbWUgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICA/IHRyYW5zaXRpb25UaW1lXG4gICAgICAgICAgICAgIDogdGhpcy5fdHJhbnNpdGlvblRpbWUsXG4gICAgICAgICAgICBlYXNpbmdGbiAhPT0gdW5kZWZpbmVkID8gZWFzaW5nRm4gOiB0aGlzLl9lYXNpbmdGbixcbiAgICAgICAgICAgIG9uRXJyb3JcbiAgICAgICAgICApO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgZXJyb3IgPSBlO1xuICAgICAgICAgIHJlamVjdCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmVqZWN0KSB7XG4gICAgICAgICAgcmV0dXJuIERlZmVycmVkLnJlamVjdChlcnJvcik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5fY3VycmVudFN0YXRlLnJlc3VtZShvbkZpbmlzaCwgb25FcnJvciwgb25DYW5jZWwsIG9uTmV4dCk7XG4gICAgICB9XG5cbiAgICAgIGNhbmNlbEFuaW1hdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRTdGF0ZSkge1xuICAgICAgICAgIHJldHVybiB0aGlzLl9jdXJyZW50U3RhdGUuY2FuY2VsKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHN0b3BBbmltYXRpb24oKSB7XG4gICAgICAgIGlmICh0aGlzLl9jdXJyZW50U3RhdGUpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5fY3VycmVudFN0YXRlLnN0b3AoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdXBkYXRlKGRlbHRhVGltZSkge1xuICAgICAgICBpZiAoc3VwZXIudXBkYXRlKSB7XG4gICAgICAgICAgc3VwZXIudXBkYXRlKGRlbHRhVGltZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fY3VycmVudFN0YXRlKSB7XG4gICAgICAgICAgdGhpcy5fY3VycmVudFN0YXRlLnVwZGF0ZShkZWx0YVRpbWUpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGRpc2NhcmQoKSB7XG4gICAgICAgIGlmIChzdXBlci5kaXNjYXJkKSB7XG4gICAgICAgICAgc3VwZXIuZGlzY2FyZCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fdHJhbnNpdGlvblN0YXRlLmRpc2NhcmQoKTtcbiAgICAgICAgZGVsZXRlIHRoaXMuX3RyYW5zaXRpb25TdGF0ZTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIEFuaW1hdGlvblBsYXllck1peGluO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEFuaW1hdGlvblBsYXllckludGVyZmFjZTtcbiIsIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVC0wXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtY2xhc3Nlcy1wZXItZmlsZSAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLWVtcHR5LWZ1bmN0aW9uICovXG4vKiBlc2xpbnQtZGlzYWJsZSBnZXR0ZXItcmV0dXJuICovXG5cbmltcG9ydCBVdGlscyBmcm9tICcuLi8uLi9VdGlscyc7XG5cbi8qKlxuICogQ2xhc3MgZmFjdG9yeSBpbnRlcmZhY2UgZm9yIG1hbmlwdWxhdGluZyBhIGNvbGxlY3Rpb24gb2Yge0BsaW5rIEFic3RyYWN0U3RhdGV9LlxuICpcbiAqIEBpbnRlcmZhY2VcbiAqL1xuY2xhc3MgU3RhdGVDb250YWluZXJJbnRlcmZhY2Uge1xuICAvKipcbiAgICogUmV0dXJuIHRoZSBzdGF0ZSB3aXRoIHRoZSBnaXZlbiBuYW1lLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIE5hbWUgb2YgdGhlIHN0YXRlLlxuICAgKlxuICAgKiBAcmV0dXJucyB7QWJzdHJhY3RTdGF0ZX1cbiAgICovXG4gIGdldFN0YXRlKG5hbWUpIHt9XG5cbiAgLyoqXG4gICAqIEdldHMgYW4gYXJyYXkgb2YgdGhlIG5hbWVzIG9mIGFsbCBzdGF0ZXMgaW4gdGhlIGNvbnRhaW5lci5cbiAgICpcbiAgICogQHR5cGUge0FycmF5LjxzdHJpbmc+fVxuICAgKi9cbiAgZ2V0U3RhdGVOYW1lcygpIHt9XG5cbiAgLyoqXG4gICAqIEFkZCBhIG5ldyBzdGF0ZSB0byBiZSBjb250cm9sbGVkIGJ5IHRoZSBjb250YWluZXIuIFN0YXRlcyBhcmUgc3RvcmVkIGtleWVkXG4gICAqIGJ5IHRoZWlyIG5hbWUgcHJvcGVydHksIHdoaWNoIG11c3QgYmUgdW5pcXVlLiBJZiBpdCBpc24ndCwgYSBudW1iZXIgd2lsbFxuICAgKiBiZSBhZGRlZCBvciBpbmNyZW1lbnRlZCB1bnRpbCBhIHVuaXF1ZSBrZXkgaXMgZ2VuZXJhdGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge0Fic3RyYWN0U3RhdGV9IHN0YXRlIC0gU3RhdGUgdG8gYWRkIHRvIHRoZSBjb250YWluZXIuXG4gICAqXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IC0gVW5pcXVlIG5hbWUgb2YgdGhlIHN0YXRlLlxuICAgKi9cbiAgYWRkU3RhdGUoc3RhdGUpIHt9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgYSBzdGF0ZSB3aXRoIHRoZSBnaXZlbiBuYW1lIGZyb20gdGhlIGNvbnRhaW5lci5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBOYW1lIG9mIHRoZSBzdGF0ZSB0byByZW1vdmUuXG4gICAqXG4gICAqIEByZXR1cm5zIHtib29sZWFufSAtIFdoZXRoZXIgb3Igbm90IGEgc3RhdGUgd2FzIHJlbW92ZWQuXG4gICAqL1xuICByZW1vdmVTdGF0ZShuYW1lKSB7fVxuXG4gIC8qKlxuICAgKiBSZW5hbWVzIGEgc3RhdGUgd2l0aCB0aGUgZ2l2ZW4gbmFtZSBpbiB0aGUgY29udGFpbmVyLiBOYW1lIG11c3QgYmUgdW5pcXVlXG4gICAqIHRvIHRoZSBjb250YWluZXIsIGlmIGl0IGlzbid0IHRoZSBuYW1lIHdpbGwgYmUgaW5jcmVtZW50ZWQgdW50aWwgaXQgaXMgdW5pcXVlLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY3VycmVudE5hbWUgLSBOYW1lIG9mIHRoZSBzdGF0ZSB0byByZW5hbWUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuZXdOYW1lIC0gTmFtZSB0byB1cGRhdGUgdGhlIHN0YXRlIHdpdGguXG4gICAqXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IC0gVXBkYXRlZCBuYW1lIGZvciB0aGUgc3RhdGUuXG4gICAqL1xuICByZW5hbWVTdGF0ZShjdXJyZW50TmFtZSwgbmV3TmFtZSkge31cblxuICAvKipcbiAgICogRGlzY2FyZHMgYWxsIHN0YXRlcy5cbiAgICovXG4gIGRpc2NhcmRTdGF0ZXMoKSB7fVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgY2xhc3MgdGhhdCBpbXBsZW1lbnRzIHtAbGluayBTdGF0ZUNvbnRhaW5lckludGVyZmFjZX0gYW5kIGV4dGVuZHNcbiAgICogYSBzcGVjaWZpZWQgYmFzZSBjbGFzcy5cbiAgICpcbiAgICogQHBhcmFtIHtDbGFzc30gW0Jhc2VDbGFzcyA9IGNsYXNze31dIC0gVGhlIGNsYXNzIHRvIGV4dGVuZC5cbiAgICpcbiAgICogQHJldHVybiB7Q2xhc3N9IEEgY2xhc3MgdGhhdCBleHRlbmRzIGBCYXNlQ2xhc3NgIGFuZCBpbXBsZW1lbnRzIHtAbGluayBTdGF0ZUNvbnRhaW5lckludGVyZmFjZX0uXG4gICAqL1xuICBzdGF0aWMgTWl4aW4oQmFzZUNsYXNzID0gY2xhc3Mge30pIHtcbiAgICAvKipcbiAgICAgKiBUaGlzIG1peGluIGFkZHMgZnVuY3Rpb25hbGl0eSBmb3IgbWFuaXB1bGF0aW5nIHVuaXF1ZWx5LW5hbWVkIGFuaW1hdGlvbiBzdGF0ZXMgaW5cbiAgICAgKiBhIG1hcC5cbiAgICAgKi9cbiAgICBjb25zdCBTdGF0ZUNvbnRhaW5lck1peGluID0gY2xhc3MgZXh0ZW5kcyBCYXNlQ2xhc3Mge1xuICAgICAgY29uc3RydWN0b3Iob3B0aW9ucyA9IHt9LCAuLi5hcmdzKSB7XG4gICAgICAgIHN1cGVyKG9wdGlvbnMsIC4uLmFyZ3MpO1xuXG4gICAgICAgIHRoaXMuX3N0YXRlcyA9IHRoaXMuX3N0YXRlcyAhPT0gdW5kZWZpbmVkID8gdGhpcy5fc3RhdGVzIDogbmV3IE1hcCgpO1xuICAgICAgfVxuXG4gICAgICBnZXRTdGF0ZShuYW1lKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zdGF0ZXMuZ2V0KG5hbWUpO1xuICAgICAgfVxuXG4gICAgICBnZXRTdGF0ZU5hbWVzKCkge1xuICAgICAgICByZXR1cm4gWy4uLnRoaXMuX3N0YXRlcy5rZXlzKCldO1xuICAgICAgfVxuXG4gICAgICBhZGRTdGF0ZShzdGF0ZSkge1xuICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIHN0YXRlIGlzIG5vdCBhbHJlYWR5IGluIHRoaXMgY29udGFpbmVyXG4gICAgICAgIGlmIChbLi4udGhpcy5fc3RhdGVzLnZhbHVlcygpXS5pbmNsdWRlcyhzdGF0ZSkpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICBgQ2Fubm90IGFkZCBhbmltYXRpb24gdG8gc3RhdGUgJHt0aGlzLm5hbWV9LiBBbmltYXRpb24gd2FzIGFscmVhZHkgYWRkZWQuYFxuICAgICAgICAgICk7XG4gICAgICAgICAgcmV0dXJuIHN0YXRlLm5hbWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIHN0YXRlIG5hbWUgaXMgdW5pcXVlXG4gICAgICAgIGNvbnN0IHVuaXF1ZU5hbWUgPSBVdGlscy5nZXRVbmlxdWVOYW1lKHN0YXRlLm5hbWUsIFtcbiAgICAgICAgICAuLi50aGlzLl9zdGF0ZXMua2V5cygpLFxuICAgICAgICBdKTtcblxuICAgICAgICBpZiAoc3RhdGUubmFtZSAhPT0gdW5pcXVlTmFtZSkge1xuICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgIGBBbmltYXRpb24gbmFtZSAke3N0YXRlLm5hbWV9IGlzIG5vdCB1bmlxdWUgZm9yIHN0YXRlICR7dGhpcy5uYW1lfS4gTmV3IGFuaW1hdGlvbiB3aWxsIGJlIGFkZGVkIHdpdGggbmFtZSAke3VuaXF1ZU5hbWV9LmBcbiAgICAgICAgICApO1xuICAgICAgICAgIHN0YXRlLm5hbWUgPSB1bmlxdWVOYW1lO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fc3RhdGVzLnNldChzdGF0ZS5uYW1lLCBzdGF0ZSk7XG5cbiAgICAgICAgcmV0dXJuIHN0YXRlLm5hbWU7XG4gICAgICB9XG5cbiAgICAgIHJlbW92ZVN0YXRlKG5hbWUpIHtcbiAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIHN0YXRlIGlzIGluIHRoaXMgY29udGFpbmVyXG4gICAgICAgIGlmICghdGhpcy5fc3RhdGVzIHx8ICF0aGlzLl9zdGF0ZXMuaGFzKG5hbWUpKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgYERpZCBub3QgcmVtb3ZlIGFuaW1hdGlvbiAke25hbWV9IGZyb20gc3RhdGUgJHt0aGlzLm5hbWV9LiBObyBhbmltYXRpb24gZXhpc3RzIHdpdGggdGhpcyBuYW1lLmBcbiAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3N0YXRlcy5nZXQobmFtZSkuZGlzY2FyZCgpO1xuICAgICAgICB0aGlzLl9zdGF0ZXMuZGVsZXRlKG5hbWUpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgcmVuYW1lU3RhdGUoY3VycmVudE5hbWUsIG5ld05hbWUpIHtcbiAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBzdGF0ZSBpcyBpbiB0aGlzIGNvbnRhaW5lclxuICAgICAgICBpZiAoIXRoaXMuX3N0YXRlcyB8fCAhdGhpcy5fc3RhdGVzLmhhcyhjdXJyZW50TmFtZSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgQ2Fubm90IHJlbmFtZSBhbmltYXRpb24gJHtjdXJyZW50TmFtZX0gaW4gJHt0aGlzLm5hbWV9LiBObyBhbmltYXRpb24gZXhpc3RzIHdpdGggdGhpcyBuYW1lLmBcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzLl9zdGF0ZXMuZ2V0KGN1cnJlbnROYW1lKTtcblxuICAgICAgICAvLyBFeGl0IGlmIHRoZSBuYW1lcyBhcmUgdGhlIHNhbWVcbiAgICAgICAgaWYgKGN1cnJlbnROYW1lID09PSBuZXdOYW1lKSB7XG4gICAgICAgICAgcmV0dXJuIGN1cnJlbnROYW1lO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBuYW1lIGlzIHVuaXF1ZVxuICAgICAgICBjb25zdCB1bmlxdWVOYW1lID0gVXRpbHMuZ2V0VW5pcXVlTmFtZShcbiAgICAgICAgICBuZXdOYW1lLFxuICAgICAgICAgIFsuLi50aGlzLl9zdGF0ZXMua2V5cygpXS5maWx0ZXIocyA9PiBzLm5hbWUgIT09IGN1cnJlbnROYW1lKVxuICAgICAgICApO1xuXG4gICAgICAgIGlmIChuZXdOYW1lICE9PSB1bmlxdWVOYW1lKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgYEFuaW1hdGlvbiBuYW1lICR7bmV3TmFtZX0gaXMgbm90IHVuaXF1ZSBpbiBzdGF0ZSAke3RoaXMubmFtZX0uIEFuaW1hdGlvbiB3aWxsIGJlIHJlbmFtZWQgdG8gJHt1bmlxdWVOYW1lfS5gXG4gICAgICAgICAgKTtcbiAgICAgICAgICBuZXdOYW1lID0gdW5pcXVlTmFtZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN0YXRlLm5hbWUgPSBuZXdOYW1lO1xuICAgICAgICB0aGlzLl9zdGF0ZXMuZGVsZXRlKGN1cnJlbnROYW1lKTtcbiAgICAgICAgdGhpcy5fc3RhdGVzLnNldChzdGF0ZS5uYW1lLCBzdGF0ZSk7XG5cbiAgICAgICAgcmV0dXJuIHN0YXRlLm5hbWU7XG4gICAgICB9XG5cbiAgICAgIGRpc2NhcmRTdGF0ZXMoKSB7XG4gICAgICAgIHRoaXMuX3N0YXRlcy5mb3JFYWNoKHN0YXRlID0+IHtcbiAgICAgICAgICBzdGF0ZS5kaXNjYXJkKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRlbGV0ZSB0aGlzLl9zdGF0ZXM7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gU3RhdGVDb250YWluZXJNaXhpbjtcbiAgfVxufVxuZXhwb3J0IGRlZmF1bHQgU3RhdGVDb250YWluZXJJbnRlcmZhY2U7XG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxuaW1wb3J0IEFic3RyYWN0U3RhdGUgZnJvbSAnLi9BYnN0cmFjdFN0YXRlJztcbmltcG9ydCBBbmltYXRpb25QbGF5ZXJJbnRlcmZhY2UgZnJvbSAnLi4vQW5pbWF0aW9uUGxheWVySW50ZXJmYWNlJztcbmltcG9ydCBTdGF0ZUNvbnRhaW5lckludGVyZmFjZSBmcm9tICcuL1N0YXRlQ29udGFpbmVySW50ZXJmYWNlJztcblxuLyoqXG4gKiBDbGFzcyBmb3IgcGxheWluZyBhbiBvcmRlcmVkIGFycmF5IG9mIGFuaW1hdGlvbiBzdGF0ZXMgaW4gc2VxdWVuY2UuXG4gKlxuICogQGV4dGVuZHMgQWJzdHJhY3RTdGF0ZVxuICogQGltcGxlbWVudHMgQEFuaW1hdGlvblBsYXllckludGVyZmFjZVxuICovXG5jbGFzcyBRdWV1ZVN0YXRlIGV4dGVuZHMgQW5pbWF0aW9uUGxheWVySW50ZXJmYWNlLk1peGluKFxuICBTdGF0ZUNvbnRhaW5lckludGVyZmFjZS5NaXhpbihBYnN0cmFjdFN0YXRlKVxuKSB7XG4gIC8qKlxuICAgKiBAY29uc3RydWN0b3JcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XSAtIE9wdGlvbnMgZm9yIHRoZSBzdGF0ZS5cbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5hdXRvQWR2YW5jZT10cnVlXSAtIFdoZXRoZXIgdG8gYXV0bWF0aWNhbGx5IGFkdmFuY2VcbiAgICogdG8gdGhlIG5leHQgc3RhdGUgaW4gdGhlIHF1ZXVlIGFzIGVhY2ggc3RhdGUgY29tcGxldGVzLlxuICAgKiBAcGFyYW0ge0FycmF5LjxBYnN0cmFjdFN0YXRlPn0gW3F1ZXVlU3RhdGVzPVtdXSAtIEFycmF5IG9mIHN0YXRlcyB0byBiZSBwbGF5ZWRcbiAgICogaW4gb3JkZXIuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihvcHRpb25zID0ge30sIHF1ZXVlU3RhdGVzID0gW10pIHtcbiAgICBzdXBlcihvcHRpb25zKTtcblxuICAgIHF1ZXVlU3RhdGVzLmZvckVhY2goc3RhdGUgPT4ge1xuICAgICAgdGhpcy5hZGRTdGF0ZShzdGF0ZSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLl9xdWV1ZSA9IHRoaXMuX3N0YXRlcy5rZXlzKCk7XG4gICAgdGhpcy5fZG9uZSA9IHRydWU7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB3aGV0aGVyIHRoZSBhbmltYXRpb24gcXVldWUgaGFzIHJlYWNoZWQgdGhlIGVuZC5cbiAgICovXG4gIGdldCBkb25lKCkge1xuICAgIHJldHVybiB0aGlzLl9kb25lO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGludGVybmFsIHdlaWdodC5cbiAgICpcbiAgICogQHJlYWRvbmx5XG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqL1xuICBnZXQgaW50ZXJuYWxXZWlnaHQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRTdGF0ZVxuICAgICAgPyB0aGlzLl9jdXJyZW50U3RhdGUuaW50ZXJuYWxXZWlnaHQgKiB0aGlzLl9pbnRlcm5hbFdlaWdodFxuICAgICAgOiAwO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc3RhcnQgdGhlIHF1ZXVlIGl0ZXJhdG9yLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3Jlc2V0KCkge1xuICAgIHRoaXMuX3F1ZXVlID0gdGhpcy5fc3RhdGVzLmtleXMoKTtcbiAgICBjb25zdCB7dmFsdWUsIGRvbmV9ID0gdGhpcy5fcXVldWUubmV4dCgpO1xuICAgIHRoaXMuX2RvbmUgPSBkb25lO1xuXG4gICAgcmV0dXJuIHZhbHVlIHx8IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogTXVsdGlwbGllcyB0aGUgdXNlciB3ZWlnaHQgYnkgYSBmYWN0b3IgdG8gZGV0ZXJtaW5lIHRoZSBpbnRlcm5hbCB3ZWlnaHQuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBmYWN0b3IgLSAwLTEgbXVsdGlwbGllciB0byBhcHBseSB0byB0aGUgdXNlciB3ZWlnaHQuXG4gICAqL1xuICB1cGRhdGVJbnRlcm5hbFdlaWdodChmYWN0b3IpIHtcbiAgICBzdXBlci51cGRhdGVJbnRlcm5hbFdlaWdodChmYWN0b3IpO1xuXG4gICAgaWYgKHRoaXMuX2N1cnJlbnRTdGF0ZSkge1xuICAgICAgdGhpcy5fY3VycmVudFN0YXRlLnVwZGF0ZUludGVybmFsV2VpZ2h0KHRoaXMuX2ludGVybmFsV2VpZ2h0KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU3RhcnQgdGhlIG5leHQgYW5pbWF0aW9uIGluIHRoZSBxdWV1ZS5cbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9uTmV4dCAtIEZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIGFuIGFuaW1hdGlvbiBjb21wbGV0ZXNcbiAgICogYW5kIHRoZSBxdWV1ZSBtb3ZlcyB0byB0aGUgbmV4dCBhbmltYXRpb24uXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3dyYXA9ZmFsc2VdIC0gV2hldGhlciBvciBub3QgdG8gc3RhcnQgdGhlIHF1ZXVlIGZyb20gdGhlXG4gICAqIGJlZ2lubmluZyBhZ2FpbiBpZiB0aGUgZW5kIGhhcyBiZWVuIHJlYWNoZWQuXG4gICAqXG4gICAqIEByZXR1cm5zIHtEZWZlcnJlZH1cbiAgICovXG4gIG5leHQob25OZXh0LCB3cmFwID0gZmFsc2UpIHtcbiAgICAvLyBNb3ZlIHRoZSBxdWV1ZSBmb3J3YXJkXG4gICAgY29uc3Qge3ZhbHVlOiBuYW1lLCBkb25lfSA9IHRoaXMuX3F1ZXVlLm5leHQoKTtcbiAgICB0aGlzLl9kb25lID0gZG9uZTtcbiAgICB0aGlzLl9wYXVzZWQgPSBmYWxzZTtcblxuICAgIC8vIFRoZSBxdWV1ZSBoYXMgcmVhY2hlZCB0aGUgZW5kXG4gICAgaWYgKGRvbmUpIHtcbiAgICAgIC8vIFN0YXJ0IHRoZSBxdWV1ZSBvdmVyXG4gICAgICBpZiAod3JhcCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wbGF5KFxuICAgICAgICAgIHRoaXMuX3BsYXlDYWxsYmFja3Mub25GaW5pc2gsXG4gICAgICAgICAgdGhpcy5fcGxheUNhbGxiYWNrcy5vbkVycm9yLFxuICAgICAgICAgIHRoaXMuX3BsYXlDYWxsYmFja3Mub25DYW5jZWwsXG4gICAgICAgICAgb25OZXh0XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICAvLyBTdG9wIHRoZSBxdWV1ZVxuICAgICAgZWxzZSB7XG4gICAgICAgIHRoaXMuX3Byb21pc2VzLmZpbmlzaC5yZXNvbHZlKCk7XG4gICAgICAgIHJldHVybiB0aGlzLl9wcm9taXNlcy5maW5pc2g7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2lnbmFsIHRoZSBuZXh0IGFuaW1hdGlvbiBpcyBzdGFydGluZ1xuICAgIGlmICh0eXBlb2Ygb25OZXh0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb25zdCBsYXN0TmFtZSA9IFsuLi50aGlzLl9zdGF0ZXMua2V5cygpXVt0aGlzLl9zdGF0ZXMuc2l6ZSAtIDFdO1xuICAgICAgY29uc3QgaXNRdWV1ZUVuZCA9IG5hbWUgPT09IGxhc3ROYW1lO1xuICAgICAgb25OZXh0KHtcbiAgICAgICAgbmFtZSxcbiAgICAgICAgY2FuQWR2YW5jZTogdGhpcy5nZXRTdGF0ZShuYW1lKS5sb29wQ291bnQgIT09IEluZmluaXR5ICYmICFpc1F1ZXVlRW5kLFxuICAgICAgICBpc1F1ZXVlRW5kLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gU3RhcnQgdGhlIG5leHQgYW5pbWF0aW9uXG4gICAgdGhpcy5wbGF5QW5pbWF0aW9uKFxuICAgICAgbmFtZSxcbiAgICAgIHRoaXMuX3RyYW5zaXRpb25UaW1lLFxuICAgICAgdGhpcy5fZWFzaW5nRm4sXG4gICAgICAoKSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5fcGF1c2VkICYmICF0aGlzLmlzVHJhbnNpdGlvbmluZykge1xuICAgICAgICAgIHRoaXMubmV4dChvbk5leHQpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgdGhpcy5fcGxheUNhbGxiYWNrcy5vbkVycm9yXG4gICAgKTtcblxuICAgIHJldHVybiB0aGlzLl9wcm9taXNlcy5maW5pc2g7XG4gIH1cblxuICBwbGF5KG9uRmluaXNoLCBvbkVycm9yLCBvbkNhbmNlbCwgb25OZXh0KSB7XG4gICAgY29uc3QgbmFtZSA9IHRoaXMuX3Jlc2V0KCk7XG4gICAgc3VwZXIucGxheShvbkZpbmlzaCwgb25FcnJvciwgb25DYW5jZWwpO1xuXG4gICAgaWYgKHRoaXMuX2RvbmUpIHtcbiAgICAgIHRoaXMuX3Byb21pc2VzLmZpbmlzaC5yZXNvbHZlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFNpZ25hbCB0aGUgbmV4dCBhbmltYXRpb24gaXMgc3RhcnRpbmdcbiAgICAgIGlmIChuYW1lICE9PSB0aGlzLmN1cnJlbnRBbmltYXRpb24gJiYgdHlwZW9mIG9uTmV4dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjb25zdCBsYXN0TmFtZSA9IFsuLi50aGlzLl9zdGF0ZXMua2V5cygpXVt0aGlzLl9zdGF0ZXMuc2l6ZSAtIDFdO1xuICAgICAgICBjb25zdCBpc1F1ZXVlRW5kID0gbmFtZSA9PT0gbGFzdE5hbWU7XG4gICAgICAgIG9uTmV4dCh7XG4gICAgICAgICAgbmFtZSxcbiAgICAgICAgICBjYW5BZHZhbmNlOiBuYW1lXG4gICAgICAgICAgICA/IHRoaXMuZ2V0U3RhdGUobmFtZSkubG9vcENvdW50ICE9PSBJbmZpbml0eSAmJiAhaXNRdWV1ZUVuZFxuICAgICAgICAgICAgOiB0cnVlLFxuICAgICAgICAgIGlzUXVldWVFbmQ6ICFuYW1lIHx8IGlzUXVldWVFbmQsXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICAvLyBTdGFydCB0aGUgbmV4dCBhbmltYXRpb25cbiAgICAgIHRoaXMucGxheUFuaW1hdGlvbihcbiAgICAgICAgbmFtZSxcbiAgICAgICAgdGhpcy5fY3VycmVudFN0YXRlID8gdGhpcy5fdHJhbnNpdGlvblRpbWUgOiAwLFxuICAgICAgICB0aGlzLl9lYXNpbmdGbixcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIGlmICghdGhpcy5fcGF1c2VkICYmICF0aGlzLmlzVHJhbnNpdGlvbmluZykge1xuICAgICAgICAgICAgdGhpcy5uZXh0KG9uTmV4dCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBvbkVycm9yXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9wcm9taXNlcy5maW5pc2g7XG4gIH1cblxuICBwYXVzZSgpIHtcbiAgICBjb25zdCBwYXVzZWQgPSBzdXBlci5wYXVzZSgpO1xuICAgIHRoaXMucGF1c2VBbmltYXRpb24oKTtcblxuICAgIHJldHVybiBwYXVzZWQ7XG4gIH1cblxuICByZXN1bWUob25GaW5pc2gsIG9uRXJyb3IsIG9uQ2FuY2VsLCBvbk5leHQpIHtcbiAgICBpZiAodGhpcy5fZG9uZSkge1xuICAgICAgcmV0dXJuIHRoaXMucGxheShvbkZpbmlzaCwgb25FcnJvciwgb25DYW5jZWwsIG9uTmV4dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN1cGVyLnJlc3VtZShvbkZpbmlzaCwgb25FcnJvciwgb25DYW5jZWwpO1xuXG4gICAgICB0aGlzLnJlc3VtZUFuaW1hdGlvbihcbiAgICAgICAgdGhpcy5fY3VycmVudFN0YXRlLm5hbWUsXG4gICAgICAgIHRoaXMuX3RyYW5zaXRpb25UaW1lLFxuICAgICAgICB0aGlzLl9lYXNpbmdGbixcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIGlmICghdGhpcy5fcGF1c2VkICYmICF0aGlzLmlzVHJhbnNpdGlvbmluZykge1xuICAgICAgICAgICAgdGhpcy5uZXh0KG9uTmV4dCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBvbkVycm9yXG4gICAgICApO1xuXG4gICAgICByZXR1cm4gdGhpcy5fcHJvbWlzZXMuZmluaXNoO1xuICAgIH1cbiAgfVxuXG4gIGNhbmNlbCgpIHtcbiAgICBjb25zdCBjYW5jZWxlZCA9IHN1cGVyLmNhbmNlbCgpO1xuXG4gICAgaWYgKHRoaXMuX2N1cnJlbnRTdGF0ZSkge1xuICAgICAgdGhpcy5fY3VycmVudFN0YXRlLmNhbmNlbCgpO1xuICAgIH1cblxuICAgIHJldHVybiBjYW5jZWxlZDtcbiAgfVxuXG4gIHN0b3AoKSB7XG4gICAgY29uc3Qgc3RvcHBlZCA9IHN1cGVyLnN0b3AoKTtcbiAgICB0aGlzLnN0b3BBbmltYXRpb24oKTtcbiAgICB0aGlzLl9kb25lID0gdHJ1ZTtcblxuICAgIHJldHVybiBzdG9wcGVkO1xuICB9XG5cbiAgZGlzY2FyZCgpIHtcbiAgICBzdXBlci5kaXNjYXJkKCk7XG5cbiAgICB0aGlzLmRpc2NhcmRTdGF0ZXMoKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBRdWV1ZVN0YXRlO1xuIiwiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTBcbmltcG9ydCBEZWZlcnJlZCBmcm9tICdjb3JlL0RlZmVycmVkJztcbmltcG9ydCBNYXRoVXRpbHMgZnJvbSAnY29yZS9NYXRoVXRpbHMnO1xuaW1wb3J0IEFic3RyYWN0U3RhdGUgZnJvbSAnLi9BYnN0cmFjdFN0YXRlJztcbmltcG9ydCBTdGF0ZUNvbnRhaW5lckludGVyZmFjZSBmcm9tICcuL1N0YXRlQ29udGFpbmVySW50ZXJmYWNlJztcblxuLyoqXG4gKiBCYXNlIGNsYXNzIGZvciBhIHN0YXRlIHRoYXQgYmxlbmRzIGEgY29sbGVjdGlvbiBvZiB7QGxpbmsgQWJzdHJhY3RTdGF0ZX0uXG4gKlxuICogQGFic3RyYWN0XG4gKiBAaW1wbGVtZW50cyBTdGF0ZUNvbnRhaW5lckludGVyZmFjZVxuICovXG5jbGFzcyBBYnN0cmFjdEJsZW5kU3RhdGUgZXh0ZW5kcyBTdGF0ZUNvbnRhaW5lckludGVyZmFjZS5NaXhpbihBYnN0cmFjdFN0YXRlKSB7XG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMgPSB7fSwgYmxlbmRTdGF0ZXMgPSBbXSwgLi4uYXJncykge1xuICAgIHN1cGVyKG9wdGlvbnMsIC4uLmFyZ3MpO1xuICAgIGJsZW5kU3RhdGVzLmZvckVhY2goc3RhdGUgPT4ge1xuICAgICAgdGhpcy5hZGRTdGF0ZShzdGF0ZSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgc3VtIG9mIGludGVybmFsIHdlaWdodHMgb2YgdGhlIHN1Yi1zdGF0ZXMuXG4gICAqXG4gICAqIEByZWFkb25seVxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0IGludGVybmFsV2VpZ2h0KCkge1xuICAgIGxldCBibGVuZFdlaWdodHMgPSAwO1xuICAgIHRoaXMuX3N0YXRlcy5mb3JFYWNoKHN0YXRlID0+IHtcbiAgICAgIGJsZW5kV2VpZ2h0cyArPSBzdGF0ZS5pbnRlcm5hbFdlaWdodDtcbiAgICB9KTtcbiAgICByZXR1cm4gYmxlbmRXZWlnaHRzO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHdlaWdodCBvZiBhIHN0YXRlIGNvbnRyb2xsZWQgYnkgdGhlIGNvbnRhaW5lci5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBOYW1lIG9mIHRoZSBzdGF0ZSB0byByZXR1cm4gdGhlIHdlaWdodCBmcm9tLlxuICAgKlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSAtIFdlaWdodCBvZiB0aGUgc3RhdGUuXG4gICAqL1xuICBnZXRCbGVuZFdlaWdodChuYW1lKSB7XG4gICAgLy8gTWFrZSBzdXJlIHRoZSBuYW1lIGlzIHZhbGlkXG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzLmdldFN0YXRlKG5hbWUpO1xuICAgIGlmIChzdGF0ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBDYW5ub3QgZ2V0IHdlaWdodCBvZiBzdGF0ZSAke25hbWV9IGZyb20gQmxlbmRTdGF0ZSAke3RoaXMubmFtZX0uIE5vIHN0YXRlIGV4aXN0cyB3aXRoIHRoaXMgbmFtZS5gXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBzdGF0ZS53ZWlnaHQ7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgd2VpZ2h0IG9mIGEgc3RhdGUgY29udHJvbGxlZCBieSB0aGUgY29udGFpbmVyLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIE5hbWUgb2YgdGhlIHN0YXRlIHRvIHNldCB0aGUgd2VpZ2h0IG9mLlxuICAgKiBAcGFyYW0ge251bWJlcn0gd2VpZ2h0IC0gV2VpZ2h0IHZhbHVlIHRvIHNldCBvbiB0aGUgc3RhdGUuXG4gICAqXG4gICAqIEByZXR1cm5zIHtEZWZlcnJlZH1cbiAgICovXG4gIHNldEJsZW5kV2VpZ2h0KG5hbWUsIHdlaWdodCwgc2Vjb25kcyA9IDAsIGVhc2luZ0ZuKSB7XG4gICAgLy8gTWFrZSBzdXJlIHRoZSBuYW1lIGlzIHZhbGlkXG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzLmdldFN0YXRlKG5hbWUpO1xuXG4gICAgaWYgKHN0YXRlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYENhbm5vdCBzZXQgd2VpZ2h0IG9mIHN0YXRlICR7bmFtZX0gZnJvbSBCbGVuZFN0YXRlICR7dGhpcy5uYW1lfS4gTm8gc3RhdGUgZXhpc3RzIHdpdGggdGhpcyBuYW1lLmBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgd2VpZ2h0ID0gTWF0aFV0aWxzLmNsYW1wKHdlaWdodCk7XG4gICAgcmV0dXJuIHN0YXRlLnNldFdlaWdodCh3ZWlnaHQsIHNlY29uZHMsIGVhc2luZ0ZuKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNdWx0aXBsaWVzIHRoZSB3ZWlnaHQgb2YgZWFjaCBzdWItc3RhdGUgYnkgYSBmYWN0b3IgdG8gZGV0ZXJtaW5lIHRoZSBpbnRlcm5hbCB3ZWlnaHQuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBmYWN0b3IgLSAwLTEgbXVsdGlwbGllciB0byBhcHBseSB0byB0aGUgdXNlciB3ZWlnaHQuXG4gICAqL1xuICB1cGRhdGVJbnRlcm5hbFdlaWdodChmYWN0b3IpIHtcbiAgICBzdXBlci51cGRhdGVJbnRlcm5hbFdlaWdodChmYWN0b3IpO1xuXG4gICAgdGhpcy5fc3RhdGVzLmZvckVhY2goc3RhdGUgPT4ge1xuICAgICAgc3RhdGUudXBkYXRlSW50ZXJuYWxXZWlnaHQodGhpcy5faW50ZXJuYWxXZWlnaHQpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBhbnkgdmFsdWVzIG9mIHRoZSBzdWItc3RhdGVzIHRoYXQgbmVlZCB0byBiZSBldmFsdWF0ZWQgZXZlcnkgZnJhbWUuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBkZWx0YVRpbWUgLSBUaW1lIGluIG1pbGxpc2Vjb25kcyBzaW5jZSB0aGUgbGFzdCB1cGRhdGUuXG4gICAqL1xuICB1cGRhdGUoZGVsdGFUaW1lKSB7XG4gICAgc3VwZXIudXBkYXRlKGRlbHRhVGltZSk7XG5cbiAgICB0aGlzLl9zdGF0ZXMuZm9yRWFjaChzdGF0ZSA9PiB7XG4gICAgICBzdGF0ZS51cGRhdGUoZGVsdGFUaW1lKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFydCBwbGF5YmFjayBvZiB0aGUgc3ViLXN0YXRlcyBmcm9tIHRoZSBiZWdpbm5pbmcuXG4gICAqXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvbkZpbmlzaCAtIEZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgc3RhdGUgZmluaXNoZXMuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvbkVycm9yIC0gRnVuY3Rpb24gdG8gZXhlY3V0ZSBpZiB0aGUgc3RhdGUgZW5jb3VudGVyc1xuICAgKiBhbiBlcnJvciBkdXJpbmcgcGxheWJhY2suXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvbkNhbmNlbCAtIEZ1bmN0aW9uIHRvIGV4ZWN1dGUgaWYgcGxheWJhY2sgaXMgY2FuY2VsZWQuXG4gICAqXG4gICAqIEByZXR1cm5zIHtEZWZlcnJlZH1cbiAgICovXG4gIHBsYXkob25GaW5pc2gsIG9uRXJyb3IsIG9uQ2FuY2VsKSB7XG4gICAgY29uc3QgcHJvbWlzZXMgPSBbc3VwZXIucGxheSgpXTtcblxuICAgIHRoaXMuX3N0YXRlcy5mb3JFYWNoKHN0YXRlID0+IHtcbiAgICAgIHByb21pc2VzLnB1c2goc3RhdGUucGxheSgpKTtcbiAgICB9KTtcbiAgICByZXR1cm4gRGVmZXJyZWQuYWxsKHByb21pc2VzLCBvbkZpbmlzaCwgb25FcnJvciwgb25DYW5jZWwpO1xuICB9XG5cbiAgLyoqXG4gICAqIFBhdXNlIHBsYXliYWNrIG9mIHRoZSBzdWItc3RhdGVzLiBUaGlzIHByZXZlbnRzIHBlbmRpbmcgcHJvbWlzZXMgZnJvbSBiZWluZyBleGVjdXRlZC5cbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBwYXVzZSgpIHtcbiAgICB0aGlzLl9zdGF0ZXMuZm9yRWFjaChzdGF0ZSA9PiB7XG4gICAgICBzdGF0ZS5wYXVzZSgpO1xuICAgIH0pO1xuICAgIHJldHVybiBzdXBlci5wYXVzZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc3VtZSBwbGF5YmFjayBvZiB0aGUgc3ViLXN0YXRlcy5cbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9uRmluaXNoIC0gRnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBzdGF0ZSBmaW5pc2hlcy5cbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9uRXJyb3IgLSBGdW5jdGlvbiB0byBleGVjdXRlIGlmIHRoZSBzdGF0ZSBlbmNvdW50ZXJzXG4gICAqIGFuIGVycm9yIGR1cmluZyBwbGF5YmFjay5cbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9uQ2FuY2VsIC0gRnVuY3Rpb24gdG8gZXhlY3V0ZSBpZiBwbGF5YmFjayBpcyBjYW5jZWxlZC5cbiAgICpcbiAgICogQHJldHVybnMge0RlZmVycmVkfVxuICAgKi9cbiAgcmVzdW1lKG9uRmluaXNoLCBvbkVycm9yLCBvbkNhbmNlbCkge1xuICAgIGNvbnN0IHByb21pc2VzID0gW3N1cGVyLnJlc3VtZSgpXTtcblxuICAgIHRoaXMuX3N0YXRlcy5mb3JFYWNoKHN0YXRlID0+IHtcbiAgICAgIHByb21pc2VzLnB1c2goc3RhdGUucmVzdW1lKCkpO1xuICAgIH0pO1xuICAgIHJldHVybiBEZWZlcnJlZC5hbGwocHJvbWlzZXMsIG9uRmluaXNoLCBvbkVycm9yLCBvbkNhbmNlbCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FuY2VsIHBsYXliYWNrIG9mIHRoZSBzdWItc3RhdGVzIGFuZCBjYW5jZWwgYW55IHBlbmRpbmcgcHJvbWlzZXMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgY2FuY2VsKCkge1xuICAgIHRoaXMuX3N0YXRlcy5mb3JFYWNoKHN0YXRlID0+IHtcbiAgICAgIHN0YXRlLmNhbmNlbCgpO1xuICAgIH0pO1xuICAgIHJldHVybiBzdXBlci5jYW5jZWwoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdG9wIHBsYXliYWNrIG9mIHRoZSBzdWItc3RhdGVzIGFuZCByZXNvbHZlIGFueSBwZW5kaW5nIHByb21pc2VzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIHN0b3AoKSB7XG4gICAgdGhpcy5fc3RhdGVzLmZvckVhY2goc3RhdGUgPT4ge1xuICAgICAgc3RhdGUuc3RvcCgpO1xuICAgIH0pO1xuICAgIHJldHVybiBzdXBlci5zdG9wKCk7XG4gIH1cblxuICAvKipcbiAgICogRGlzY2FyZHMgYWxsIHN1Yi1zdGF0ZSByZXNvdXJjZXMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgZGlzY2FyZCgpIHtcbiAgICBzdXBlci5kaXNjYXJkKCk7XG5cbiAgICB0aGlzLmRpc2NhcmRTdGF0ZXMoKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBBYnN0cmFjdEJsZW5kU3RhdGU7XG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxuaW1wb3J0IEFic3RyYWN0QmxlbmRTdGF0ZSBmcm9tICcuL0Fic3RyYWN0QmxlbmRTdGF0ZSc7XG5cbi8qKlxuICogQ2xhc3MgZm9yIGJsZW5kaW5nIE4gbnVtYmVyIG9mIGJsZW5kIHN0YXRlcy5cbiAqXG4gKiBAZXh0ZW5kcyBBYnN0cmFjdEJsZW5kU3RhdGVcbiAqL1xuY2xhc3MgRnJlZUJsZW5kU3RhdGUgZXh0ZW5kcyBBYnN0cmFjdEJsZW5kU3RhdGUge1xuICAvKipcbiAgICogQGNvbnN0cnVjdG9yXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV0gLSBPcHRpb25zIGZvciB0aGUgY29udGFpbmVyIHN0YXRlLlxuICAgKiBAcGFyYW0ge0FycmF5LjxBYnN0cmFjdFN0YXRlPn0gW2JsZW5kU3RhdGVzPVtdXSAtIEJsZW5kIHN0YXRlcyB0byBiZSBjb250cm9sbGVkIGJ5XG4gICAqIHRoaXMgY29udGFpbmVyLlxuICAgKi9cbiAgY29uc3RydWN0b3Iob3B0aW9ucyA9IHt9LCBibGVuZFN0YXRlcyA9IFtdKSB7XG4gICAgc3VwZXIob3B0aW9ucywgYmxlbmRTdGF0ZXMpO1xuICB9XG5cbiAgdXBkYXRlSW50ZXJuYWxXZWlnaHQoZmFjdG9yKSB7XG4gICAgc3VwZXIudXBkYXRlSW50ZXJuYWxXZWlnaHQoZmFjdG9yKTtcblxuICAgIC8vIERldGVybWluZSB0aGUgdG90YWwgYWN0aXZlIHdlaWdodCBvZiBibGVuZCBzdGF0ZXNcbiAgICBsZXQgc3VtV2VpZ2h0cyA9IDA7XG5cbiAgICB0aGlzLl9zdGF0ZXMuZm9yRWFjaChzdGF0ZSA9PiB7XG4gICAgICBzdW1XZWlnaHRzICs9IHN0YXRlLndlaWdodDtcbiAgICB9KTtcblxuICAgIC8vIEVuc3VyZSB0aGUgc3VtIG9mIGJsZW5kIHN0YXRlIGludGVybmFsIHdlaWdodHMgZG9lcyBub3QgZXhjZWVkIGNvbnRhaW5lciBpbnRlcm5hbCB3ZWlnaHRcbiAgICBmYWN0b3IgLz0gTWF0aC5tYXgoc3VtV2VpZ2h0cywgMSk7XG5cbiAgICAvLyBTdW0gb2YgYmxlbmQgc3RhdGUgaW50ZXJuYWwgd2VpZ2h0cyBzaG91bGQgbm90IGV4Y2VlZCBjb250YWluZXIgaW50ZXJuYWwgd2VpZ2h0XG4gICAgdGhpcy5fc3RhdGVzLmZvckVhY2goc3RhdGUgPT4ge1xuICAgICAgc3RhdGUudXBkYXRlSW50ZXJuYWxXZWlnaHQoZmFjdG9yICogdGhpcy5fd2VpZ2h0KTtcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBGcmVlQmxlbmRTdGF0ZTtcbiIsIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVC0wXG5pbXBvcnQgRGVmZXJyZWQgZnJvbSAnY29yZS9EZWZlcnJlZCc7XG5pbXBvcnQgQWJzdHJhY3RCbGVuZFN0YXRlIGZyb20gJy4vQWJzdHJhY3RCbGVuZFN0YXRlJztcbmltcG9ydCBBbmltYXRpb25VdGlscyBmcm9tICcuLi9BbmltYXRpb25VdGlscyc7XG5cbi8qKlxuICogQ2xhc3MgZm9yIGJsZW5kaW5nIE4gbnVtYmVyIG9mIGJsZW5kIHN0YXRlcyBiYXNlZCBvbiBhIHNpbmdsZVxuICogcGFyYW1ldGVyLlxuICpcbiAqIEBleHRlbmRzIEFic3RyYWN0QmxlbmRTdGF0ZVxuICovXG5jbGFzcyBCbGVuZDFkU3RhdGUgZXh0ZW5kcyBBYnN0cmFjdEJsZW5kU3RhdGUge1xuICAvKipcbiAgICogQGNvbnN0cnVjdG9yXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gLSBPcHRpb25zIGZvciB0aGUgY29udGFpbmVyIHN0YXRlXG4gICAqIEBwYXJhbSB7QXJyYXkuPEFic3RyYWN0QmxlbmRTdGF0ZT59IFtibGVuZFN0YXRlcz1bXV0gLSBCbGVuZCBzdGF0ZXMgdG8gYmVcbiAgICogY29udHJvbGxlZCBieSB0aGlzIGNvbnRhaW5lci5cbiAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gW2JsZW5kVGhyZXNob2xkcz1bXV0gLSBUaHJlc2hvbGQgdmFsdWVzIGZvciBhY3RpdmF0aW5nXG4gICAqIGVhY2ggYmxlbmQgc3RhdGUuXG4gICAqIEBwYXJhbSB7QXJyYXkuPGJvb2xlYW4+fSBbcGhhc2VNYXRjaGVzPVtdXSAtIEJvb2xlYW5zIGluZGljYXRpbmcgd2hldGhlciBvciBub3RcbiAgICogZWFjaCBibGVuZCBzdGF0ZSBzaG91bGQgYmUgcGhhc2UgbWF0Y2hlZC5cbiAgICovXG4gIGNvbnN0cnVjdG9yKFxuICAgIG9wdGlvbnMgPSB7fSxcbiAgICBibGVuZFN0YXRlcyA9IFtdLFxuICAgIGJsZW5kVGhyZXNob2xkcyA9IFtdLFxuICAgIHBoYXNlTWF0Y2hlcyA9IFtdXG4gICkge1xuICAgIHN1cGVyKG9wdGlvbnMsIGJsZW5kU3RhdGVzKTtcblxuICAgIHRoaXMuX2JsZW5kVmFsdWUgPSAwO1xuICAgIHRoaXMuX3Byb21pc2VzID0ge1xuICAgICAgLi4udGhpcy5fcHJvbWlzZXMsXG4gICAgICBibGVuZFZhbHVlOiBEZWZlcnJlZC5yZXNvbHZlKCksXG4gICAgfTtcblxuICAgIC8vIFZhbGlkYXRlIHRoZXJlIGFyZSBubyBkdXBsaWNhdGUgdGhyZXNob2xkc1xuICAgIGNvbnN0IG5vblplcm9EaWZmZXJlbnRTaXplID1cbiAgICAgIGJsZW5kU3RhdGVzLmxlbmd0aCAhPT0gMCAmJiBibGVuZFN0YXRlcy5sZW5ndGggIT09IGJsZW5kVGhyZXNob2xkcy5sZW5ndGg7XG4gICAgaWYgKG5vblplcm9EaWZmZXJlbnRTaXplKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBDYW5ub3QgY3JlYXRlIEJsZW5kMWRTdGF0ZSB3aXRoIGJsZW5kVGhyZXNob2xkcyAke2JsZW5kVGhyZXNob2xkc30uIEJsZW5kVGhyZXNob2xkcyBjb3VudCBkb2VzIG5vdCBtYXRjaCBibGVuZFN0YXRlcyBjb3VudC5gXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbnRhaW5zRHVwbGljYXRlcyA9XG4gICAgICBuZXcgU2V0KGJsZW5kVGhyZXNob2xkcykuc2l6ZSAhPT0gYmxlbmRUaHJlc2hvbGRzLmxlbmd0aDtcbiAgICBpZiAoY29udGFpbnNEdXBsaWNhdGVzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBDYW5ub3QgY3JlYXRlIEJsZW5kMWRTdGF0ZSB3aXRoIGJsZW5kVGhyZXNob2xkcyAke2JsZW5kVGhyZXNob2xkc30uIEJsZW5kVGhyZXNob2xkcyBjb250YWlucyBkdXBsaWNhdGUgdmFsdWVzYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBJbml0aWFsaXplIHRoZSB0aHJlc2hvbGRzIG1hcFxuICAgIHRoaXMuX3RocmVzaG9sZHMgPSBbXTtcbiAgICBbLi4udGhpcy5fc3RhdGVzLnZhbHVlcygpXS5mb3JFYWNoKChzdGF0ZSwgaW5kZXgpID0+IHtcbiAgICAgIHRoaXMuX3RocmVzaG9sZHMucHVzaCh7XG4gICAgICAgIHZhbHVlOiBibGVuZFRocmVzaG9sZHNbaW5kZXhdLFxuICAgICAgICBuYW1lOiBzdGF0ZS5uYW1lLFxuICAgICAgICBwaGFzZU1hdGNoOiBwaGFzZU1hdGNoZXNbaW5kZXhdIHx8IGZhbHNlLFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLl9zb3J0VGhyZXNob2xkcygpO1xuICAgIHRoaXMuX2ZvcmNlTm9UaHJlc2hvbGREdXBlcyA9IHRydWU7XG5cbiAgICB0aGlzLl9waGFzZUxlYWRTdGF0ZSA9IG51bGw7XG5cbiAgICB0aGlzLl91cGRhdGVCbGVuZFdlaWdodHMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGFuZCBzZXRzIHRoZSBibGVuZCBwYXJhbWV0ZXIgdmFsdWUuXG4gICAqL1xuICBnZXQgYmxlbmRWYWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fYmxlbmRWYWx1ZTtcbiAgfVxuXG4gIHNldCBibGVuZFZhbHVlKHZhbHVlKSB7XG4gICAgdGhpcy5fYmxlbmRWYWx1ZSA9IHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgd2hldGhlciBvciBub3QgdGhlIGJsZW5kIHZhbHVlIGlzIGN1cnJlbnRseSBiZWluZyBhbmltYXRlZC5cbiAgICovXG4gIGdldCBibGVuZFZhbHVlUGVuZGluZygpIHtcbiAgICByZXR1cm4gdGhpcy5fcHJvbWlzZXMuYmxlbmRWYWx1ZSAmJiB0aGlzLl9wcm9taXNlcy5ibGVuZFZhbHVlLnBlbmRpbmc7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgdXNlciBkZWZpbmVkIHdlaWdodCBvdmVyIHRpbWUuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVsbH0gbmFtZSAtIFVudXNlZCBwYXJhbWV0ZXIuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB3ZWlnaHQgLSBUaGUgdGFyZ2V0IHdlaWdodCB2YWx1ZS5cbiAgICogQHBhcmFtIHtudW1iZXJ9IFtzZWNvbmRzPTBdIC0gVGhlIGFtb3VudCBvZiB0aW1lIGl0IHdpbGwgdGFrZSB0byByZWFjaCB0aGVcbiAgICogdGFyZ2V0IHdlaWdodC5cbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IGVhc2luZ0ZuIC0gVGhlIGVhc2luZyBmdW5jdGlvbiB0byB1c2UgZm9yIGludGVycG9sYXRpb24uXG4gICAqXG4gICAqIEByZXR1cm5zIHtEZWZlcnJlZH1cbiAgICovXG4gIHNldEJsZW5kV2VpZ2h0KG5hbWUsIHZhbHVlLCBzZWNvbmRzID0gMCwgZWFzaW5nRm4pIHtcbiAgICB0aGlzLl9wcm9taXNlcy5ibGVuZFZhbHVlLmNhbmNlbCgpO1xuXG4gICAgdGhpcy5fcHJvbWlzZXMuYmxlbmRWYWx1ZSA9IEFuaW1hdGlvblV0aWxzLmludGVycG9sYXRlUHJvcGVydHkoXG4gICAgICB0aGlzLFxuICAgICAgJ2JsZW5kVmFsdWUnLFxuICAgICAgdmFsdWUsXG4gICAgICB7XG4gICAgICAgIHNlY29uZHMsXG4gICAgICAgIGVhc2luZ0ZuLFxuICAgICAgICBvblByb2dyZXNzOiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5fdXBkYXRlQmxlbmRXZWlnaHRzKCk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uRmluaXNoOiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5fdXBkYXRlQmxlbmRXZWlnaHRzKCk7XG4gICAgICAgIH0sXG4gICAgICB9XG4gICAgKTtcblxuICAgIHJldHVybiB0aGlzLl9wcm9taXNlcy5ibGVuZFZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHVzZXIgZGVmaW5lZCB3ZWlnaHQuXG4gICAqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICBnZXRCbGVuZFdlaWdodCgpIHtcbiAgICByZXR1cm4gdGhpcy5ibGVuZFZhbHVlO1xuICB9XG5cbiAgYWRkU3RhdGUoc3RhdGUsIHRocmVzaG9sZFZhbHVlID0gMCwgcGhhc2VNYXRjaCA9IGZhbHNlKSB7XG4gICAgdGhpcy5fdGhyZXNob2xkcyA9IHRoaXMuX3RocmVzaG9sZHMgfHwgW107XG5cbiAgICAvLyBNYWtlIHN1cmUgdGhlcmUgaXMgbm90IGFscmVhZHkgYSBzdGF0ZSB3aXRoIHRoaXMgdGhyZXNob2xkXG4gICAgY29uc3Qgc2FtZVZhbHVlID0gdGhpcy5fdGhyZXNob2xkcy5maW5kKFxuICAgICAgdGhyZXNob2xkID0+IHRocmVzaG9sZC52YWx1ZSA9PT0gdGhyZXNob2xkVmFsdWVcbiAgICApO1xuICAgIGlmICh0aGlzLl9mb3JjZU5vVGhyZXNob2xkRHVwZXMgJiYgc2FtZVZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYENhbm5vdCBzZXQgYmxlbmQgdGhyZXNob2xkIG9mICR7dGhyZXNob2xkVmFsdWV9IGZvciBzdGF0ZSAke3N0YXRlLm5hbWV9IG9uICR7dGhpcy5uYW1lfS4gQSBzdGF0ZSBhbHJlYWR5IGV4aXN0cyB3aXRoIHRoYXQgdGhyZXNob2xkLmBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgc3VwZXIuYWRkU3RhdGUoc3RhdGUpO1xuICAgIHRoaXMuX3RocmVzaG9sZHMucHVzaCh7XG4gICAgICB2YWx1ZTogdGhyZXNob2xkVmFsdWUsXG4gICAgICBuYW1lOiBzdGF0ZS5uYW1lLFxuICAgICAgcGhhc2VNYXRjaDogcGhhc2VNYXRjaCB8fCBmYWxzZSxcbiAgICB9KTtcblxuICAgIHRoaXMuX3NvcnRUaHJlc2hvbGRzKCk7XG5cbiAgICByZXR1cm4gc3RhdGUubmFtZTtcbiAgfVxuXG4gIHJlbW92ZVN0YXRlKG5hbWUpIHtcbiAgICBjb25zdCByZW1vdmVkID0gc3VwZXIucmVtb3ZlU3RhdGUobmFtZSk7XG5cbiAgICBpZiAocmVtb3ZlZCkge1xuICAgICAgY29uc3QgaW5kZXggPSB0aGlzLl90aHJlc2hvbGRzLmZpbmRJbmRleChcbiAgICAgICAgdGhyZXNob2xkID0+IHRocmVzaG9sZC5uYW1lID09PSBuYW1lXG4gICAgICApO1xuICAgICAgdGhpcy5fdGhyZXNob2xkcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cblxuICAgIHJldHVybiByZW1vdmVkO1xuICB9XG5cbiAgcmVuYW1lU3RhdGUoY3VycmVudE5hbWUsIG5ld05hbWUpIHtcbiAgICBuZXdOYW1lID0gc3VwZXIucmVuYW1lU3RhdGUoY3VycmVudE5hbWUsIG5ld05hbWUpO1xuXG4gICAgY29uc3QgdGhyZXNob2xkID0gdGhpcy5fdGhyZXNob2xkcy5maW5kKFxuICAgICAgdGhyZXNob2xkID0+IHRocmVzaG9sZC5uYW1lID09PSBjdXJyZW50TmFtZVxuICAgICk7XG4gICAgdGhyZXNob2xkLm5hbWUgPSBuZXdOYW1lO1xuXG4gICAgcmV0dXJuIG5ld05hbWU7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgdGhyZXNob2xkIHZhbHVlIG9mIGEgYmxlbmQgd2l0aCB0aGUgY29ycmVzcG9uZGluZyBuYW1lLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIE5hbWUgb2YgdGhlIGJsZW5kIHRvIGdldCB0aGUgdGhyZXNob2xkIG9mLlxuICAgKlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBUaHJlaG9sZCB2YWx1ZS5cbiAgICovXG4gIGdldEJsZW5kVGhyZXNob2xkKG5hbWUpIHtcbiAgICBjb25zdCB0aHJlc2hvbGQgPSB0aGlzLl90aHJlc2hvbGRzLmZpbmQoXG4gICAgICB0aHJlc2hvbGQgPT4gdGhyZXNob2xkLm5hbWUgPT09IG5hbWVcbiAgICApO1xuXG4gICAgaWYgKHRocmVzaG9sZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBDYW5ub3QgZ2V0IGJsZW5kIHRocmVzaG9sZCBvZiBzdGF0ZSAke25hbWV9IG9uICR7dGhpcy5uYW1lfS4gTm8gc3RhdGUgZXhpc3RzIHdpdGggdGhhdCBuYW1lLmBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRocmVzaG9sZC52YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSB0aHJlc2hvbGQgdmFsdWUgb2YgYSBibGVuZCB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIG5hbWUuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gTmFtZSBvZiB0aGUgYmxlbmQgdG8gc2V0IHRoZSB0aHJlc2hvbGQuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSAtIFZhbHVlIG9mIHRoZSB0aHJlc2hvbGQgdG8gc2V0LlxuICAgKlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBTZXQgdGhyZXNob2xkIHZhbHVlLlxuICAgKi9cbiAgc2V0QmxlbmRUaHJlc2hvbGQobmFtZSwgdmFsdWUpIHtcbiAgICAvLyBNYWtlIHN1cmUgdGhlcmUgaXMgbm90IGFscmVhZHkgYSBzdGF0ZSB3aXRoIHRoaXMgdGhyZXNob2xkXG4gICAgY29uc3Qgc2FtZVZhbHVlID0gdGhpcy5fdGhyZXNob2xkcy5maW5kKFxuICAgICAgdGhyZXNob2xkID0+IHRocmVzaG9sZC52YWx1ZSA9PT0gdmFsdWVcbiAgICApO1xuICAgIGlmIChzYW1lVmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQ2Fubm90IHNldCBibGVuZCB0aHJlc2hvbGQgb2YgJHt2YWx1ZX0gZm9yIHN0YXRlICR7bmFtZX0gb24gJHt0aGlzLm5hbWV9LiBBIHN0YXRlIGFscmVhZHkgZXhpc3RzIHdpdGggdGhhdCB0aHJlc2hvbGQuYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCB0aHJlc2hvbGQgPSB0aGlzLl90aHJlc2hvbGRzLmZpbmQoXG4gICAgICB0aHJlc2hvbGQgPT4gdGhyZXNob2xkLm5hbWUgPT09IG5hbWVcbiAgICApO1xuXG4gICAgaWYgKHRocmVzaG9sZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBDYW5ub3Qgc2V0IGJsZW5kIHRocmVzaG9sZCBvZiBzdGF0ZSAke25hbWV9IG9uICR7dGhpcy5uYW1lfS4gTm8gc3RhdGUgZXhpc3RzIHdpdGggdGhhdCBuYW1lLmBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhyZXNob2xkLnZhbHVlID0gdmFsdWU7XG5cbiAgICB0aGlzLl9zb3J0VGhyZXNob2xkcygpO1xuXG4gICAgcmV0dXJuIHRocmVzaG9sZC52YWx1ZTtcbiAgfVxuXG4gIHVwZGF0ZUludGVybmFsV2VpZ2h0KGZhY3Rvcikge1xuICAgIHN1cGVyLnVwZGF0ZUludGVybmFsV2VpZ2h0KGZhY3Rvcik7XG5cbiAgICBpZiAodGhpcy5fcGhhc2VMZWFkU3RhdGUpIHtcbiAgICAgIHRoaXMuX3N0YXRlcy5mb3JFYWNoKHN0YXRlID0+IHtcbiAgICAgICAgaWYgKHN0YXRlLndlaWdodCAhPT0gMCkge1xuICAgICAgICAgIHN0YXRlLm5vcm1hbGl6ZWRUaW1lID0gdGhpcy5fcGhhc2VMZWFkU3RhdGUubm9ybWFsaXplZFRpbWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBibGVuZCB3ZWlnaHRzIGJhc2VkIG9uIHRoZWlyIGNvcnJlc3BvbmRpbmcgdGhyZXNob2xkIHZhbHVlc1xuICAgKiBhbmQgdGhlIGN1cnJlbnQgYmxlbmRWYWx1ZS4gQWRkaXRpb25hbGx5LCBzZXRzIGEgbGVhZCBwaGFzZSBzdGF0ZSBpZiB0aGVcbiAgICogY29uZGl0aW9ucyBmb3IgcGhhc2UtbWF0Y2hpbmcgaGF2ZSBiZWVuIHNhdGlzZmllZC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF91cGRhdGVCbGVuZFdlaWdodHMoKSB7XG4gICAgaWYgKHRoaXMuX3RocmVzaG9sZHMubGVuZ3RoID09PSAwKSByZXR1cm47XG5cbiAgICBpZiAodGhpcy5fdGhyZXNob2xkcy5sZW5ndGggPT09IDEpIHtcbiAgICAgIGNvbnN0IHN0YXRlID0gdGhpcy5fc3RhdGVzLmdldCh0aGlzLl90aHJlc2hvbGRzWzBdLm5hbWUpO1xuICAgICAgc3RhdGUuc2V0V2VpZ2h0KDEpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEluaXRpYWxseSBzZXQgYWxsIHN1Yi1zdGF0ZSB3ZWlnaHRzIHRvIHplcm9cbiAgICB0aGlzLl9zdGF0ZXMuZm9yRWFjaChzdGF0ZSA9PiB7XG4gICAgICBzdGF0ZS5zZXRXZWlnaHQoMCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLl9waGFzZUxlYWRTdGF0ZSA9IG51bGw7XG5cbiAgICAvLyBGaW5kIHRoZSBmaXJzdCB0aHJlc2hvbGQgdGhhdCBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhlIHBhcmFtZXRlciB2YWx1ZVxuICAgIGxldCB0YXJnZXRJbmRleCA9IHRoaXMuX3RocmVzaG9sZHMuZmluZEluZGV4KHRocmVzaG9sZCA9PiB7XG4gICAgICByZXR1cm4gdGhyZXNob2xkLnZhbHVlID49IHRoaXMuX2JsZW5kVmFsdWU7XG4gICAgfSk7XG5cbiAgICBpZiAodGFyZ2V0SW5kZXggPT09IDAgfHwgdGFyZ2V0SW5kZXggPT09IC0xKSB7XG4gICAgICAvLyBHaXZlIG9uZSBzdGF0ZSBmdWxsIGluZmx1ZW5jZVxuICAgICAgdGFyZ2V0SW5kZXggPSB0YXJnZXRJbmRleCA9PT0gLTEgPyB0aGlzLl90aHJlc2hvbGRzLmxlbmd0aCAtIDEgOiAwO1xuICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzLl9zdGF0ZXMuZ2V0KHRoaXMuX3RocmVzaG9sZHNbdGFyZ2V0SW5kZXhdLm5hbWUpO1xuICAgICAgc3RhdGUuc2V0V2VpZ2h0KDEpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBMaW5lYXIgaW50ZXJwb2xhdGUgaW5mbHVlbmNlIGJldHdlZW4gdHdvIHN0YXRlc1xuICAgICAgY29uc3QgdGhyZXNob2xkQSA9IHRoaXMuX3RocmVzaG9sZHNbdGFyZ2V0SW5kZXggLSAxXTtcbiAgICAgIGNvbnN0IHRocmVzaG9sZEIgPSB0aGlzLl90aHJlc2hvbGRzW3RhcmdldEluZGV4XTtcblxuICAgICAgY29uc3QgZmFjdG9yQiA9XG4gICAgICAgICh0aGlzLmJsZW5kVmFsdWUgLSB0aHJlc2hvbGRBLnZhbHVlKSAvXG4gICAgICAgICh0aHJlc2hvbGRCLnZhbHVlIC0gdGhyZXNob2xkQS52YWx1ZSk7XG4gICAgICBjb25zdCBmYWN0b3JBID0gMSAtIGZhY3RvckI7XG5cbiAgICAgIGNvbnN0IHN0YXRlQSA9IHRoaXMuX3N0YXRlcy5nZXQodGhyZXNob2xkQS5uYW1lKTtcbiAgICAgIGNvbnN0IHN0YXRlQiA9IHRoaXMuX3N0YXRlcy5nZXQodGhyZXNob2xkQi5uYW1lKTtcblxuICAgICAgc3RhdGVBLnNldFdlaWdodChmYWN0b3JBKTtcbiAgICAgIHN0YXRlQi5zZXRXZWlnaHQoZmFjdG9yQik7XG5cbiAgICAgIC8vIFNldCBwaGFzZS1tYXRjaGluZyBpZiBuZWVkZWRcbiAgICAgIGlmICh0aHJlc2hvbGRBLnBoYXNlTWF0Y2ggJiYgdGhyZXNob2xkQi5waGFzZU1hdGNoKSB7XG4gICAgICAgIHRoaXMuX3BoYXNlTGVhZFN0YXRlID0gZmFjdG9yQSA+IGZhY3RvckIgPyBzdGF0ZUEgOiBzdGF0ZUI7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNvcnRzIHRoZSB0aHJlc2hvbGRzIGZyb20gbG93IHRvIGhpZ2ggYmFzZWQgb24gdmFsdWUuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc29ydFRocmVzaG9sZHMoKSB7XG4gICAgdGhpcy5fdGhyZXNob2xkcy5zb3J0KChhLCBiKSA9PiBhLnZhbHVlIC0gYi52YWx1ZSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQmxlbmQxZFN0YXRlO1xuIiwiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTBcbi8qIGVzbGludC1kaXNhYmxlIG5vLXVuZGVyc2NvcmUtZGFuZ2xlICovXG5pbXBvcnQgRGVmZXJyZWQgZnJvbSAnY29yZS9EZWZlcnJlZCc7XG5pbXBvcnQgTWF0aFV0aWxzIGZyb20gJ2NvcmUvTWF0aFV0aWxzJztcbmltcG9ydCBBYnN0cmFjdEJsZW5kU3RhdGUgZnJvbSAnLi9BYnN0cmFjdEJsZW5kU3RhdGUnO1xuaW1wb3J0IEFuaW1hdGlvblV0aWxzIGZyb20gJy4uL0FuaW1hdGlvblV0aWxzJztcblxuLyoqXG4gKiBDbGFzcyBmb3IgYmxlbmRpbmcgTiBudW1iZXIgb2YgYmxlbmQgc3RhdGVzIGJhc2VkIG9uIHR3b1xuICogcGFyYW10ZXJzLlxuICpcbiAqIEBleHRlbmRzIEFic3RyYWN0QmxlbmRTdGF0ZVxuICovXG5jbGFzcyBCbGVuZDJkU3RhdGUgZXh0ZW5kcyBBYnN0cmFjdEJsZW5kU3RhdGUge1xuICAvKipcbiAgICogQGNvbnN0cnVjdG9yXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gLSBPcHRpb25zIGZvciB0aGUgY29udGFpbmVyIHN0YXRlXG4gICAqIEBwYXJhbSB7QXJyYXkuPEFic3RyYWN0QmxlbmRTdGF0ZT59IFtibGVuZFN0YXRlcz1bXV0gLSBCbGVuZCBzdGF0ZXMgdG8gYmVcbiAgICogY29udHJvbGxlZCBieSB0aGlzIGNvbnRhaW5lci5cbiAgICogQHBhcmFtIHtBcnJheS48QXJyYXkuPG51bWJlcj4+fSBbYmxlbmRUaHJlc2hvbGRzPVtdXSAtIFRocmVzaG9sZCB2YWx1ZXMgZm9yIGFjdGl2YXRpbmdcbiAgICogZWFjaCBibGVuZCBzdGF0ZS5cbiAgICogQHBhcmFtIHtBcnJheS48Ym9vbGVhbj59IFtwaGFzZU1hdGNoZXM9W11dIC0gQm9vbGVhbnMgaW5kaWNhdGluZyB3aGV0aGVyIG9yIG5vdFxuICAgKiBlYWNoIGJsZW5kIHN0YXRlIHNob3VsZCBiZSBwaGFzZSBtYXRjaGVkLlxuICAgKi9cbiAgY29uc3RydWN0b3IoXG4gICAgb3B0aW9ucyA9IHt9LFxuICAgIGJsZW5kU3RhdGVzID0gW10sXG4gICAgYmxlbmRUaHJlc2hvbGRzID0gW10sXG4gICAgcGhhc2VNYXRjaGVzID0gW11cbiAgKSB7XG4gICAgc3VwZXIob3B0aW9ucywgYmxlbmRTdGF0ZXMpO1xuXG4gICAgaWYgKGJsZW5kU3RhdGVzLmxlbmd0aCAhPT0gYmxlbmRUaHJlc2hvbGRzLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQ2Fubm90IGNyZWF0ZSBCbGVuZDJkU3RhdGUgd2l0aCBibGVuZFN0YXRlcyAke2JsZW5kU3RhdGVzfSBhbmQgYmxlbmRUaHJlc2hvbGRzICR7YmxlbmRUaHJlc2hvbGRzfS4gQ291bnQgb2YgYmxlbmRTdGF0ZXMgbXVzdCBtYXRjaCBjb3VudCBvZiBibGVuZFRocmVzaG9sZHMuYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBibGVuZFRocmVzaG9sZHNcbiAgICAgIC5zbGljZSgwLCBibGVuZFRocmVzaG9sZHMubGVuZ3RoIC0gMSlcbiAgICAgIC5mb3JFYWNoKCh0aHJlc2hvbGQsIGluZGV4KSA9PiB7XG4gICAgICAgIGJsZW5kVGhyZXNob2xkcy5zbGljZShpbmRleCArIDEpLmZvckVhY2gob3RoZXJUaHJlc2hvbGQgPT4ge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHRocmVzaG9sZFswXSA9PT0gb3RoZXJUaHJlc2hvbGRbMF0gJiZcbiAgICAgICAgICAgIHRocmVzaG9sZFsxXSA9PT0gb3RoZXJUaHJlc2hvbGRbMV1cbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgYENhbm5vdCBjcmVhdGUgQmxlbmQyZFN0YXRlIHdpdGggYmxlbmRUaHJlc2hvbGRzICR7YmxlbmRUaHJlc2hvbGRzfS4gTm8gZHVwbGljYXRlIHZhbHVlcyBhbGxvd2VkIGluIGJsZW5kVGhyZXNob2xkcy5gXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgIHRoaXMuX2JsZW5kVmFsdWVYID0gMDtcbiAgICB0aGlzLl9ibGVuZFZhbHVlWSA9IDA7XG5cbiAgICB0aGlzLl9wcm9taXNlcyA9IHtcbiAgICAgIC4uLnRoaXMuX3Byb21pc2VzLFxuICAgICAgYmxlbmRWYWx1ZVg6IERlZmVycmVkLnJlc29sdmUoKSxcbiAgICAgIGJsZW5kVmFsdWVZOiBEZWZlcnJlZC5yZXNvbHZlKCksXG4gICAgfTtcblxuICAgIHRoaXMuX3RocmVzaG9sZHMgPSBbXTtcbiAgICBbLi4udGhpcy5fc3RhdGVzLnZhbHVlcygpXS5mb3JFYWNoKChzdGF0ZSwgaW5kZXgpID0+IHtcbiAgICAgIHRoaXMuX3RocmVzaG9sZHMucHVzaCh7XG4gICAgICAgIG5hbWU6IHN0YXRlLm5hbWUsXG4gICAgICAgIHBoYXNlTWF0Y2g6IHBoYXNlTWF0Y2hlc1tpbmRleF0gfHwgZmFsc2UsXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRoaXMuX3ZlcnRpY2VzID0gYmxlbmRUaHJlc2hvbGRzO1xuXG4gICAgaWYgKHRoaXMuX3ZlcnRpY2VzLmxlbmd0aCA+PSAzKSB7XG4gICAgICB0aGlzLl90cmlhbmdsZXMgPSBNYXRoVXRpbHMuZ2V0RGVsYXVuYXlUcmlhbmd1bGF0aW9uKHRoaXMuX3ZlcnRpY2VzKTtcbiAgICB9XG5cbiAgICB0aGlzLl9waGFzZUxlYWRTdGF0ZSA9IG51bGw7XG5cbiAgICB0aGlzLl91cGRhdGVCbGVuZFdlaWdodHMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSB1c2VyIGRlZmluZWQgd2VpZ2h0IG92ZXIgdGltZS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBOYW1lIG9mIGJsZW5kIHdlaWdodCB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB3ZWlnaHQgLSBUYXJnZXQgd2VpZ2h0IHZhbHVlLlxuICAgKiBAcGFyYW0ge251bWJlcn0gW3NlY29uZHM9MF0gLSBUaGUgYW1vdW50IG9mIHRpbWUgaXQgd2lsbCB0YWtlIHRvIHJlYWNoIHRoZVxuICAgKiB0YXJnZXQgdmFsdWUuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBlYXNpbmdGbiAtIFRoZSBlYXNpbmcgZnVuY3Rpb24gdG8gdXNlIGZvciBpbnRlcnBvbGF0aW9uLlxuICAgKlxuICAgKiBAcmV0dXJucyB7RGVmZXJyZWR9XG4gICAqL1xuICBzZXRCbGVuZFdlaWdodChuYW1lLCB2YWx1ZSwgc2Vjb25kcyA9IDAsIGVhc2luZ0ZuKSB7XG4gICAgY29uc3QgcHJvcGVydHkgPSBgYmxlbmRWYWx1ZSR7bmFtZS50b1VwcGVyQ2FzZSgpfWA7XG4gICAgaWYgKHByb3BlcnR5ICE9PSAnYmxlbmRWYWx1ZVgnICYmIHByb3BlcnR5ICE9PSAnYmxlbmRWYWx1ZVknKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBDYW5ub3Qgc2V0IGJsZW5kIHdlaWdodCBmb3IgJHtuYW1lfSBvbiAke3RoaXMubmFtZX0uIEJsZW5kMmRTdGF0ZSBvbmx5IGFjY2VwdHMgJ1gnIG9yICdZJyBmb3Igc2V0QmxlbmRXZWlnaHRgXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMuX3Byb21pc2VzW3Byb3BlcnR5XS5jYW5jZWwoKTtcblxuICAgIHRoaXMuX3Byb21pc2VzW3Byb3BlcnR5XSA9IEFuaW1hdGlvblV0aWxzLmludGVycG9sYXRlUHJvcGVydHkoXG4gICAgICB0aGlzLFxuICAgICAgcHJvcGVydHksXG4gICAgICB2YWx1ZSxcbiAgICAgIHtcbiAgICAgICAgc2Vjb25kcyxcbiAgICAgICAgZWFzaW5nRm4sXG4gICAgICAgIG9uUHJvZ3Jlc3M6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLl91cGRhdGVCbGVuZFdlaWdodHMoKTtcbiAgICAgICAgfSxcbiAgICAgICAgb25GaW5pc2g6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLl91cGRhdGVCbGVuZFdlaWdodHMoKTtcbiAgICAgICAgfSxcbiAgICAgIH1cbiAgICApO1xuXG4gICAgcmV0dXJuIHRoaXMuX3Byb21pc2VzW3Byb3BlcnR5XTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSB1c2VyIGRlZmluZWQgd2VpZ2h0LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIE5hbWUgb2YgYmxlbmQgd2VpZ2h0LlxuICAgKlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0QmxlbmRXZWlnaHQobmFtZSkge1xuICAgIGNvbnN0IHByb3BlcnR5ID0gbmFtZS50b1VwcGVyQ2FzZSgpO1xuICAgIGlmIChwcm9wZXJ0eSAhPT0gJ1gnICYmIHByb3BlcnR5ICE9PSAnWScpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYENhbm5vdCBnZXQgYmxlbmQgd2VpZ2h0IGZvciAke25hbWV9IG9uICR7dGhpcy5uYW1lfS4gQmxlbmQyZFN0YXRlIG9ubHkgYWNjZXB0cyAnWCcgb3IgJ1knIGZvciBnZXRCbGVuZFdlaWdodGBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb3BlcnR5ID09PSAnWCcgPyB0aGlzLl9ibGVuZFZhbHVlWCA6IHRoaXMuX2JsZW5kVmFsdWVZO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgYW5kIHNldHMgdGhlIHggYmxlbmQgd2VpZ2h0LlxuICAgKi9cbiAgZ2V0IGJsZW5kVmFsdWVYKCkge1xuICAgIHJldHVybiB0aGlzLl9ibGVuZFZhbHVlWDtcbiAgfVxuXG4gIHNldCBibGVuZFZhbHVlWCh2YWx1ZSkge1xuICAgIHRoaXMuX2JsZW5kVmFsdWVYID0gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBhbmQgc2V0cyB0aGUgeSBibGVuZCB3ZWlnaHQuXG4gICAqL1xuICBnZXQgYmxlbmRWYWx1ZVkoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2JsZW5kVmFsdWVZO1xuICB9XG5cbiAgc2V0IGJsZW5kVmFsdWVZKHZhbHVlKSB7XG4gICAgdGhpcy5fYmxlbmRWYWx1ZVkgPSB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHdoZXRoZXIgb3Igbm90IHRoZSB4IGJsZW5kIHZhbHVlIGlzIGN1cnJlbnRseSBiZWluZyBhbmltYXRlZC5cbiAgICovXG4gIGdldCBibGVuZFZhbHVlWFBlbmRpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Byb21pc2VzLmJsZW5kVmFsdWVYICYmIHRoaXMuX3Byb21pc2VzLmJsZW5kVmFsdWVYLnBlbmRpbmc7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB3aGV0aGVyIG9yIG5vdCB0aGUgeSBibGVuZCB2YWx1ZSBpcyBjdXJyZW50bHkgYmVpbmcgYW5pbWF0ZWQuXG4gICAqL1xuICBnZXQgYmxlbmRWYWx1ZVlQZW5kaW5nKCkge1xuICAgIHJldHVybiB0aGlzLl9wcm9taXNlcy5ibGVuZFZhbHVlWSAmJiB0aGlzLl9wcm9taXNlcy5ibGVuZFZhbHVlWS5wZW5kaW5nO1xuICB9XG5cbiAgdXBkYXRlSW50ZXJuYWxXZWlnaHQoZmFjdG9yKSB7XG4gICAgc3VwZXIudXBkYXRlSW50ZXJuYWxXZWlnaHQoZmFjdG9yKTtcblxuICAgIGlmICh0aGlzLl9waGFzZUxlYWRTdGF0ZSkge1xuICAgICAgWy4uLnRoaXMuX3N0YXRlcy52YWx1ZXMoKV0uZm9yRWFjaCgoc3RhdGUsIGluZGV4KSA9PiB7XG4gICAgICAgIGlmIChzdGF0ZS53ZWlnaHQgIT09IDAgJiYgdGhpcy5fdGhyZXNob2xkc1tpbmRleF0ucGhhc2VNYXRjaCkge1xuICAgICAgICAgIHN0YXRlLm5vcm1hbGl6ZWRUaW1lID0gdGhpcy5fcGhhc2VMZWFkU3RhdGUubm9ybWFsaXplZFRpbWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBibGVuZCB3ZWlnaHRzIGJhc2VkIG9uIHRoZWlyIGNvcnJlc3BvbmRpbmcgdGhyZXNob2xkIHZhbHVlc1xuICAgKiBhbmQgdGhlIGN1cnJlbnQgW3gseV0gYmxlbmRWYWx1ZS4gQWRkaXRpb25hbGx5LCBzZXRzIGEgbGVhZCBwaGFzZSBzdGF0ZSBpZiB0aGVcbiAgICogY29uZGl0aW9ucyBmb3IgcGhhc2UtbWF0Y2hpbmcgaGF2ZSBiZWVuIHNhdGlzZmllZC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF91cGRhdGVCbGVuZFdlaWdodHMoKSB7XG4gICAgaWYgKCF0aGlzLl92ZXJ0aWNlcyB8fCB0aGlzLl92ZXJ0aWNlcy5sZW5ndGggPT09IDApIHJldHVybjtcblxuICAgIGlmICh0aGlzLl92ZXJ0aWNlcy5sZW5ndGggPT09IDEpIHtcbiAgICAgIFsuLi50aGlzLl9zdGF0ZXMudmFsdWVzKCldWzBdLndlaWdodCA9IDE7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gSW5pdGlhbGx5IHNldCBhbGwgc3ViLXN0YXRlIHdlaWdodHMgdG8gemVyb1xuICAgIHRoaXMuX3N0YXRlcy5mb3JFYWNoKHN0YXRlID0+IHtcbiAgICAgIHN0YXRlLnNldFdlaWdodCgwKTtcbiAgICB9KTtcbiAgICB0aGlzLl9waGFzZUxlYWRTdGF0ZSA9IG51bGw7XG5cbiAgICBjb25zdCBwID0gW3RoaXMuX2JsZW5kVmFsdWVYLCB0aGlzLl9ibGVuZFZhbHVlWV07XG5cbiAgICBpZiAodGhpcy5fdmVydGljZXMubGVuZ3RoID09PSAyKSB7XG4gICAgICB0aGlzLl9zZXRJbmZsdWVuY2VDbG9zZXN0UG9pbnRPbkxpbmUocCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHRyaWFuZ2xlID0gdGhpcy5fdHJpYW5nbGVzLmZpbmQodHJpYW5nbGUgPT4ge1xuICAgICAgICByZXR1cm4gTWF0aFV0aWxzLmlzUG9pbnRJblRyaWFuZ2xlKFxuICAgICAgICAgIHRoaXMuX3ZlcnRpY2VzW3RyaWFuZ2xlWzBdXSxcbiAgICAgICAgICB0aGlzLl92ZXJ0aWNlc1t0cmlhbmdsZVsxXV0sXG4gICAgICAgICAgdGhpcy5fdmVydGljZXNbdHJpYW5nbGVbMl1dLFxuICAgICAgICAgIHBcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAodHJpYW5nbGUpIHtcbiAgICAgICAgdGhpcy5fc2V0SW5mbHVlbmNlVHJpYW5nbGUodHJpYW5nbGUsIHApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fc2V0SW5mbHVlbmNlQ2xvc2VzdFBvaW50SW5UcmlhbmdsZXMocCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgYmxlbmQgd2VpZ2h0cyBmb3Igc3RhdGVzIGNvcnJlc3BvbmRpbmcgdG8gYVxuICAgKiB0cmlhbmdsZSBvZiB0aHJlc2hvbGRzIGFuZCBhIGdpdmVuIFt4LHldIGJsZW5kVmFsdWVzLlxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5LjxBcnJheS48bnVtYmVyPj59IHRyaWFuZ2xlIC0gU2V0IG9mIHRyaWFuZ2x1YXRlZCBpbmRpY2VzXG4gICAqIHRoYXQgY29ycmVzcG9uZCB0byBibGVuZCB0aHJlc2hvbGRzLlxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBwIC0gR2l2ZW4gW3gseV0gYmxlbmRWYWx1ZS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9zZXRJbmZsdWVuY2VUcmlhbmdsZSh0cmlhbmdsZSwgcCkge1xuICAgIGNvbnN0IGFyZWFBID0gTWF0aFV0aWxzLnRyaWFuZ2xlQXJlYShcbiAgICAgIHRoaXMuX3ZlcnRpY2VzW3RyaWFuZ2xlWzFdXSxcbiAgICAgIHRoaXMuX3ZlcnRpY2VzW3RyaWFuZ2xlWzJdXSxcbiAgICAgIHBcbiAgICApO1xuXG4gICAgY29uc3QgYXJlYUIgPSBNYXRoVXRpbHMudHJpYW5nbGVBcmVhKFxuICAgICAgdGhpcy5fdmVydGljZXNbdHJpYW5nbGVbMF1dLFxuICAgICAgdGhpcy5fdmVydGljZXNbdHJpYW5nbGVbMl1dLFxuICAgICAgcFxuICAgICk7XG5cbiAgICBjb25zdCBhcmVhQyA9IE1hdGhVdGlscy50cmlhbmdsZUFyZWEoXG4gICAgICB0aGlzLl92ZXJ0aWNlc1t0cmlhbmdsZVswXV0sXG4gICAgICB0aGlzLl92ZXJ0aWNlc1t0cmlhbmdsZVsxXV0sXG4gICAgICBwXG4gICAgKTtcblxuICAgIGNvbnN0IHRvdGFsQXJlYSA9IGFyZWFBICsgYXJlYUIgKyBhcmVhQztcblxuICAgIGNvbnN0IHdlaWdodEEgPSBhcmVhQSAvIHRvdGFsQXJlYTtcbiAgICBjb25zdCB3ZWlnaHRCID0gYXJlYUIgLyB0b3RhbEFyZWE7XG4gICAgY29uc3Qgd2VpZ2h0QyA9IGFyZWFDIC8gdG90YWxBcmVhO1xuXG4gICAgY29uc3QgdGhyZXNob2xkQSA9IHRoaXMuX3RocmVzaG9sZHNbdHJpYW5nbGVbMF1dO1xuICAgIGNvbnN0IHRocmVzaG9sZEIgPSB0aGlzLl90aHJlc2hvbGRzW3RyaWFuZ2xlWzFdXTtcbiAgICBjb25zdCB0aHJlc2hvbGRDID0gdGhpcy5fdGhyZXNob2xkc1t0cmlhbmdsZVsyXV07XG5cbiAgICBjb25zdCBzdGF0ZUEgPSB0aGlzLl9zdGF0ZXMuZ2V0KHRocmVzaG9sZEEubmFtZSk7XG4gICAgY29uc3Qgc3RhdGVCID0gdGhpcy5fc3RhdGVzLmdldCh0aHJlc2hvbGRCLm5hbWUpO1xuICAgIGNvbnN0IHN0YXRlQyA9IHRoaXMuX3N0YXRlcy5nZXQodGhyZXNob2xkQy5uYW1lKTtcblxuICAgIHN0YXRlQS5zZXRXZWlnaHQod2VpZ2h0QSk7XG4gICAgc3RhdGVCLnNldFdlaWdodCh3ZWlnaHRCKTtcbiAgICBzdGF0ZUMuc2V0V2VpZ2h0KHdlaWdodEMpO1xuXG4gICAgdGhpcy5fc2V0UGhhc2VMZWFkU3RhdGUoXG4gICAgICBbc3RhdGVBLCBzdGF0ZUIsIHN0YXRlQ10sXG4gICAgICBbdGhyZXNob2xkQS5waGFzZU1hdGNoLCB0aHJlc2hvbGRCLnBoYXNlTWF0Y2gsIHRocmVzaG9sZEMucGhhc2VNYXRjaF1cbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgdGhlIGNsb3Nlc3QgcG9pbnQgd2l0aGluIGEgdHJpYW5nbGUgb2ZcbiAgICogdGhyZXNob2xkcyBiYXNlZCBvbiB0aGUgY3VycmVudCBbeCx5XSBibGVuZFZhbHVlcyBhbmRcbiAgICogdGhlbiBzZXRzIGJsZW5kIHdlaWdodHMgZm9yIHRoZSBjb3JyZXNwb25kaW5nIHN0YXRlcy5cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gcCAtIEdpdmVuIFt4LHldIGJsZW5kVmFsdWUuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc2V0SW5mbHVlbmNlQ2xvc2VzdFBvaW50SW5UcmlhbmdsZXMocCkge1xuICAgIGxldCBnbG9iYWxDbG9zZXN0UG9pbnQgPSBudWxsO1xuICAgIGxldCBnbG9iYWxNaW5EaXN0ID0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO1xuICAgIGxldCBjbG9zZXN0VHJpYW5nbGUgPSAtMTtcblxuICAgIHRoaXMuX3RyaWFuZ2xlcy5mb3JFYWNoKCh0cmlhbmdsZSwgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IHBvaW50QSA9IE1hdGhVdGlscy5jbG9zZXN0UG9pbnRPbkxpbmUoXG4gICAgICAgIHRoaXMuX3ZlcnRpY2VzW3RyaWFuZ2xlWzBdXSxcbiAgICAgICAgdGhpcy5fdmVydGljZXNbdHJpYW5nbGVbMV1dLFxuICAgICAgICBwXG4gICAgICApO1xuICAgICAgY29uc3QgcG9pbnRCID0gTWF0aFV0aWxzLmNsb3Nlc3RQb2ludE9uTGluZShcbiAgICAgICAgdGhpcy5fdmVydGljZXNbdHJpYW5nbGVbMV1dLFxuICAgICAgICB0aGlzLl92ZXJ0aWNlc1t0cmlhbmdsZVsyXV0sXG4gICAgICAgIHBcbiAgICAgICk7XG4gICAgICBjb25zdCBwb2ludEMgPSBNYXRoVXRpbHMuY2xvc2VzdFBvaW50T25MaW5lKFxuICAgICAgICB0aGlzLl92ZXJ0aWNlc1t0cmlhbmdsZVsyXV0sXG4gICAgICAgIHRoaXMuX3ZlcnRpY2VzW3RyaWFuZ2xlWzBdXSxcbiAgICAgICAgcFxuICAgICAgKTtcblxuICAgICAgY29uc3QgZGlzdEEgPSBNYXRoVXRpbHMuZGlzdGFuY2VTcXVhcmVkKHBvaW50QSwgcCk7XG4gICAgICBjb25zdCBkaXN0QiA9IE1hdGhVdGlscy5kaXN0YW5jZVNxdWFyZWQocG9pbnRCLCBwKTtcbiAgICAgIGNvbnN0IGRpc3RDID0gTWF0aFV0aWxzLmRpc3RhbmNlU3F1YXJlZChwb2ludEMsIHApO1xuXG4gICAgICBsZXQgbG9jYWxDbG9zZXN0UG9pbnQgPSBwb2ludEM7XG4gICAgICBsZXQgbG9jYWxNaW5EaXN0ID0gZGlzdEM7XG5cbiAgICAgIGlmIChkaXN0QSA8IGxvY2FsTWluRGlzdCkge1xuICAgICAgICBsb2NhbENsb3Nlc3RQb2ludCA9IHBvaW50QTtcbiAgICAgICAgbG9jYWxNaW5EaXN0ID0gZGlzdEE7XG4gICAgICB9XG4gICAgICBpZiAoZGlzdEIgPCBsb2NhbE1pbkRpc3QpIHtcbiAgICAgICAgbG9jYWxDbG9zZXN0UG9pbnQgPSBwb2ludEI7XG4gICAgICAgIGxvY2FsTWluRGlzdCA9IGRpc3RCO1xuICAgICAgfVxuXG4gICAgICBpZiAobG9jYWxNaW5EaXN0IDwgZ2xvYmFsTWluRGlzdCkge1xuICAgICAgICBnbG9iYWxNaW5EaXN0ID0gbG9jYWxNaW5EaXN0O1xuICAgICAgICBnbG9iYWxDbG9zZXN0UG9pbnQgPSBbLi4ubG9jYWxDbG9zZXN0UG9pbnRdO1xuICAgICAgICBjbG9zZXN0VHJpYW5nbGUgPSBpbmRleDtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuX3NldEluZmx1ZW5jZVRyaWFuZ2xlKFxuICAgICAgdGhpcy5fdHJpYW5nbGVzW2Nsb3Nlc3RUcmlhbmdsZV0sXG4gICAgICBnbG9iYWxDbG9zZXN0UG9pbnRcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgdGhlIGNsb3Nlc3QgcG9pbnQgb24gdGhlIGxpbmUgZm9ybWVkIGJldHdlZW4gdGhlXG4gICAqIHR3byBibGVuZCB0aHJlc2hvbGRzIGJhc2VkIG9uIHRoZSBjdXJyZW50IFt4LHldIGJsZW5kVmFsdWVzIGFuZFxuICAgKiB0aGVuIHNldHMgYmxlbmQgd2VpZ2h0cyBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgc3RhdGVzLlxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBwIC0gR2l2ZW4gW3gseV0gYmxlbmRWYWx1ZS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9zZXRJbmZsdWVuY2VDbG9zZXN0UG9pbnRPbkxpbmUocCkge1xuICAgIGNvbnN0IGNsb3Nlc3RQb2ludCA9IE1hdGhVdGlscy5jbG9zZXN0UG9pbnRPbkxpbmUoXG4gICAgICB0aGlzLl92ZXJ0aWNlc1tbMF1dLFxuICAgICAgdGhpcy5fdmVydGljZXNbWzFdXSxcbiAgICAgIHBcbiAgICApO1xuXG4gICAgY29uc3QgZGlzdEEgPSBNYXRoVXRpbHMuZGlzdGFuY2VTcXVhcmVkKHRoaXMuX3ZlcnRpY2VzWzBdLCBjbG9zZXN0UG9pbnQpO1xuICAgIGNvbnN0IGRpc3RCID0gTWF0aFV0aWxzLmRpc3RhbmNlU3F1YXJlZCh0aGlzLl92ZXJ0aWNlc1sxXSwgY2xvc2VzdFBvaW50KTtcblxuICAgIGNvbnN0IHdlaWdodEEgPSBkaXN0QiAvIChkaXN0QSArIGRpc3RCKTtcbiAgICBjb25zdCB3ZWlnaHRCID0gZGlzdEEgLyAoZGlzdEEgKyBkaXN0Qik7XG5cbiAgICBjb25zdCB0aHJlc2hvbGRBID0gdGhpcy5fdGhyZXNob2xkc1swXTtcbiAgICBjb25zdCB0aHJlc2hvbGRCID0gdGhpcy5fdGhyZXNob2xkc1sxXTtcblxuICAgIGNvbnN0IHN0YXRlQSA9IHRoaXMuX3N0YXRlcy5nZXQodGhyZXNob2xkQS5uYW1lKTtcbiAgICBjb25zdCBzdGF0ZUIgPSB0aGlzLl9zdGF0ZXMuZ2V0KHRocmVzaG9sZEIubmFtZSk7XG5cbiAgICBzdGF0ZUEuc2V0V2VpZ2h0KHdlaWdodEEpO1xuICAgIHN0YXRlQi5zZXRXZWlnaHQod2VpZ2h0Qik7XG5cbiAgICB0aGlzLl9zZXRQaGFzZUxlYWRTdGF0ZShcbiAgICAgIFtzdGF0ZUEsIHN0YXRlQl0sXG4gICAgICBbdGhyZXNob2xkQS5waGFzZU1hdGNoLCB0aHJlc2hvbGRCLnBoYXNlTWF0Y2hdXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIGEgbGVhZCBwaGFzZSBzdGF0ZSBpZiB0aGUgY29uZGl0aW9uc1xuICAgKiBmb3IgcGhhc2UtbWF0Y2hpbmcgYXJlIHNhdGlzZmllZC5cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheS48QWJzdHJhY3RCbGVuZFN0YXRlPn0gc3RhdGVzIC0gU3RhdGVzIHRvXG4gICAqIGNoZWNrIHBoYXNlLW1hdGNoaW5nIGNyaXRlcmlhLlxuICAgKiBAcGFyYW0ge0FycmF5Ljxib29sZWFuPn0gcGhhc2VNYXRjaGVkIC0gTGlzdCBvZiBwaGFzZS1tYXRjaCBib29sZWFucy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9zZXRQaGFzZUxlYWRTdGF0ZShzdGF0ZXMsIHBoYXNlTWF0Y2hlZCkge1xuICAgIGxldCBtYXggPSAwO1xuICAgIHN0YXRlcy5mb3JFYWNoKChzdGF0ZSwgaW5kZXgpID0+IHtcbiAgICAgIGlmIChwaGFzZU1hdGNoZWRbaW5kZXhdICYmIHN0YXRlLndlaWdodCA+IG1heCkge1xuICAgICAgICB0aGlzLl9waGFzZUxlYWRTdGF0ZSA9IHN0YXRlO1xuICAgICAgICBtYXggPSBzdGF0ZS53ZWlnaHQ7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQmxlbmQyZFN0YXRlO1xuIiwiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTBcbmltcG9ydCBBYnN0cmFjdEJsZW5kU3RhdGUgZnJvbSAnLi9zdGF0ZS9BYnN0cmFjdEJsZW5kU3RhdGUnO1xuaW1wb3J0IEFuaW1hdGlvblBsYXllckludGVyZmFjZSBmcm9tICcuL0FuaW1hdGlvblBsYXllckludGVyZmFjZSc7XG5pbXBvcnQgQW5pbWF0aW9uVXRpbHMgZnJvbSAnLi9BbmltYXRpb25VdGlscyc7XG5pbXBvcnQgTWF0aFV0aWxzIGZyb20gJy4uL01hdGhVdGlscyc7XG5pbXBvcnQgRGVmZXJyZWQgZnJvbSAnLi4vRGVmZXJyZWQnO1xuaW1wb3J0IFN0YXRlQ29udGFpbmVySW50ZXJmYWNlIGZyb20gJy4vc3RhdGUvU3RhdGVDb250YWluZXJJbnRlcmZhY2UnO1xuXG4vKipcbiAqIEVudW0gZm9yIHR5cGVzIG9mIHtAbGluayBBbmltYXRpb25MYXllcn0gYmxlbmRpbmcuXG4gKlxuICogQHJlYWRvbmx5XG4gKiBAZW51bSB7c3RyaW5nfVxuICovXG5leHBvcnQgY29uc3QgTGF5ZXJCbGVuZE1vZGVzID0ge092ZXJyaWRlOiAnT3ZlcnJpZGUnLCBBZGRpdGl2ZTogJ0FkZGl0aXZlJ307XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgYmxlbmRpbmcgbW9kZSB7QGxpbmsgQW5pbWF0aW9uTGF5ZXJ9LlxuICpcbiAqIEByZWFkb25seVxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuZXhwb3J0IGNvbnN0IERlZmF1bHRMYXllckJsZW5kTW9kZSA9ICdPdmVycmlkZSc7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgZ2l2ZW4gYmxlbmRNb2RlIGlzIHByZXNlbnQgaW4gdGhlIHZhbHVlcyBvZiB7QGxpbmsgTGF5ZXJCbGVuZE1vZGVzfS5cbiAqIElmIGl0IGlzLCByZXR1cm4gdGhlIG9yaWdpbmFsIHZhbHVlLCBvdGhlcndpc2UgcmV0dXJuIHtAbGluayBEZWZhdWx0TGF5ZXJCbGVuZE1vZGV9LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBibGVuZE1vZGUgLSBUaGUgbmFtZSBvZiB0aGUgdHlwZSBvZiBibGVuZGluZy5cbiAqXG4gKiBAcmV0dXJucyB7KHN0cmluZ3xEZWZhdWx0TGF5ZXJCbGVuZE1vZGUpfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVCbGVuZE1vZGUoYmxlbmRNb2RlKSB7XG4gIGlmIChBcnJheS5mcm9tKE9iamVjdC52YWx1ZXMoTGF5ZXJCbGVuZE1vZGVzKSkuaW5jbHVkZXMoYmxlbmRNb2RlKSkge1xuICAgIHJldHVybiBibGVuZE1vZGU7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIERlZmF1bHRMYXllckJsZW5kTW9kZTtcbiAgfVxufVxuXG4vKipcbiAqIENsYXNzIGZvciBtYW5hZ2luZyBhIHNldCBvZiBhbmltYXRpb25zIHdoZXJlIG9ubHkgb25lIHN0YXRlIGNhbiBiZSBhY3RpdmUgYXRcbiAqIGFueSBnaXZlbiB0aW1lLlxuICpcbiAqIEBpbXBsZW1lbnRzIEFuaW1hdGlvblBsYXllckludGVyZmFjZVxuICogQGltcGxlbWVudHMgU3RhdGVDb250YWluZXJJbnRlcmZhY2VcbiAqL1xuY2xhc3MgQW5pbWF0aW9uTGF5ZXIgZXh0ZW5kcyBBbmltYXRpb25QbGF5ZXJJbnRlcmZhY2UuTWl4aW4oXG4gIFN0YXRlQ29udGFpbmVySW50ZXJmYWNlLk1peGluKClcbikge1xuICAvKipcbiAgICogQGNvbnN0cnVjdG9yXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0PX0gb3B0aW9ucyAtICBPcHRpb25zIGZvciB0aGUgYW5pbWF0aW9uIGxheWVyLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0aW9ucy5uYW1lIC0gTmFtZSBvZiB0aGUgbGF5ZXIuIE5hbWVzIG11c3QgYmUgdW5pcXVlIHRvIHRoZVxuICAgKiBhbmltYXRpb24gZmVhdHVyZSB0aGF0IGNvbnRhaW5zIHRoZSBsYXllci5cbiAgICogQHBhcmFtIHtMYXllckJsZW5kTW9kZXN9IFtvcHRpb25zLmJsZW5kTW9kZT1EZWZhdWx0TGF5ZXJCbGVuZE1vZGVdIC1cbiAgICogVHlwZSBvZiBibGVuZGluZyB0byB1c2UgZm9yIGFsbCBzdGF0ZXMgY29udHJvbGxlZCBieSB0aGUgbGF5ZXIuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy53ZWlnaHQ9MV0gLSBUaGUgYW1vdW50IG9mIGluZmx1ZW5jZSB0aGUgbGF5ZXIncyBjdXJyZW50XG4gICAqIGFuaW1hdGlvbiBoYXMgb3ZlciB0aGUgcmVzdWx0IGZvciB0aGUgaG9zdC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLnRyYW5zaXRpb25UaW1lPTBdIC0gVGhlIGRlZmF1bHQgYW1vdW50IG9mIHRpbWUgdG8gdXNlIHdoZW5cbiAgICogcGxheWluZyBhbmQgcmVzdW1pbmcgYW5pbWF0aW9ucy5cbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9wdGlvbnMuZWFzaW5nRm4gLSBUaGUgZGVmYXVsdCBlYXNpbmcgZnVuY3Rpb24gdG8gdXNlIHdoZW5cbiAgICogdHJhbnNpdGlvbmluZyBiZXR3ZWVuIGFuaW1hdGlvbnMgYW5kIHNldHRpbmcgbGF5ZXIgd2VpZ2h0LlxuICAgKi9cbiAgY29uc3RydWN0b3Iob3B0aW9ucyA9IHt9KSB7XG4gICAgc3VwZXIob3B0aW9ucyk7XG5cbiAgICB0aGlzLm5hbWUgPSBvcHRpb25zLm5hbWUgPT09IHVuZGVmaW5lZCA/ICdBbmltYXRpb25MYXllcicgOiBvcHRpb25zLm5hbWU7XG4gICAgdGhpcy5fYmxlbmRNb2RlID0gQXJyYXkuZnJvbShPYmplY3QudmFsdWVzKExheWVyQmxlbmRNb2RlcykpLmluY2x1ZGVzKFxuICAgICAgb3B0aW9ucy5ibGVuZE1vZGVcbiAgICApXG4gICAgICA/IG9wdGlvbnMuYmxlbmRNb2RlXG4gICAgICA6IERlZmF1bHRMYXllckJsZW5kTW9kZTtcbiAgICB0aGlzLl9wcm9taXNlcyA9IHtcbiAgICAgIHdlaWdodDogRGVmZXJyZWQucmVzb2x2ZSgpLFxuICAgIH07XG4gICAgdGhpcy5fd2VpZ2h0UGF1c2VkID0gZmFsc2U7XG5cbiAgICB0aGlzLndlaWdodCA9IHR5cGVvZiBvcHRpb25zLndlaWdodCA9PT0gJ251bWJlcicgPyBvcHRpb25zLndlaWdodCA6IDE7XG4gICAgdGhpcy5faW50ZXJuYWxXZWlnaHQgPSB0aGlzLl93ZWlnaHQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgdHlwZSBvZiBibGVuZGluZyB1c2VkIGZvciBzdGF0ZXMgY29udHJvbGxlZCBieSB0aGUgbGF5ZXIuXG4gICAqXG4gICAqIEByZWFkb25seVxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKi9cbiAgZ2V0IGJsZW5kTW9kZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fYmxlbmRNb2RlO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgYW5kIHNldHMgdGhlIGFtb3VudCBvZiBpbmZsdWVuY2UgdGhlIGxheWVyJ3MgY3VycmVudCBhbmltYXRpb24gaGFzIG92ZXJcbiAgICogdGhlIHJlc3VsdCBmb3IgdGhlIGhvc3QuXG4gICAqXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqL1xuICBzZXQgd2VpZ2h0KHdlaWdodCkge1xuICAgIHRoaXMuX3dlaWdodCA9IE1hdGhVdGlscy5jbGFtcCh3ZWlnaHQsIDAsIDEpO1xuICB9XG5cbiAgZ2V0IHdlaWdodCgpIHtcbiAgICByZXR1cm4gdGhpcy5fd2VpZ2h0O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgd2hldGhlciBvciBub3QgdGhlIGxheWVyJ3Mgd2VpZ2h0IHZhbHVlIGlzIGN1cnJlbnRseSBiZWluZyBhbmltYXRlZC5cbiAgICpcbiAgICogQHJlYWRvbmx5XG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKi9cbiAgZ2V0IHdlaWdodFBlbmRpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Byb21pc2VzLndlaWdodCAmJiB0aGlzLl9wcm9taXNlcy53ZWlnaHQucGVuZGluZztcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXVzZSB0aGUgY3VycmVudCBhbmltYXRpb24gc3RhdGUgYW5kIGFueSBpbnRlcnBvbGF0aW9uIGhhcHBlbmluZyBvbiB0aGUgbGF5ZXInc1xuICAgKiB3ZWlnaHQgcHJvcGVydHkuXG4gICAqXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgcGF1c2UoKSB7XG4gICAgdGhpcy5fcGF1c2VkID0gdHJ1ZTtcbiAgICB0aGlzLl93ZWlnaHRQYXVzZWQgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXMucGF1c2VBbmltYXRpb24oKSB8fCB0aGlzLndlaWdodFBlbmRpbmc7XG4gIH1cblxuICAvKipcbiAgICogUmVzdW1lIHRoZSBjdXJyZW50IGFuaW1hdGlvbiBzdGF0ZSBhbmQgYW55IGludGVycG9sYXRpb24gaGFwcGVuaW5nIG9uIHRoZSBsYXllcidzXG4gICAqIHdlaWdodCBwcm9wZXJ0eS5cbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICByZXN1bWUoKSB7XG4gICAgdGhpcy5fcGF1c2VkID0gZmFsc2U7XG4gICAgdGhpcy5fd2VpZ2h0UGF1c2VkID0gZmFsc2U7XG5cbiAgICBjb25zdCBpc1dlaWdodEFjdGl2ZSA9IHRoaXMud2VpZ2h0UGVuZGluZztcblxuICAgIGlmICh0aGlzLl9jdXJyZW50U3RhdGUpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlc3VtZUFuaW1hdGlvbigpIHx8IGlzV2VpZ2h0QWN0aXZlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gaXNXZWlnaHRBY3RpdmU7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIHVzZXIgZGVmaW5lZCB3ZWlnaHQgb3ZlciB0aW1lLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gd2VpZ2h0IC0gVGhlIHRhcmdldCB3ZWlnaHQgdmFsdWUuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbc2Vjb25kcz0wXSAtIFRoZSBhbW91bnQgb2YgdGltZSBpdCB3aWxsIHRha2UgdG8gcmVhY2ggdGhlXG4gICAqIHRhcmdldCB3ZWlnaHQuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBlYXNpbmdGbiAtIFRoZSBlYXNpbmcgZnVuY3Rpb24gdG8gdXNlIGZvciBpbnRlcnBvbGF0aW9uLlxuICAgKlxuICAgKiBAcmV0dXJucyB7RGVmZXJyZWR9XG4gICAqL1xuICBzZXRXZWlnaHQod2VpZ2h0LCBzZWNvbmRzID0gMCwgZWFzaW5nRm4pIHtcbiAgICBpZiAodGhpcy53ZWlnaHRQZW5kaW5nKSB7XG4gICAgICB0aGlzLl9wcm9taXNlcy53ZWlnaHQuY2FuY2VsKCk7XG4gICAgfVxuXG4gICAgd2VpZ2h0ID0gTWF0aFV0aWxzLmNsYW1wKHdlaWdodCk7XG4gICAgdGhpcy5fcHJvbWlzZXMud2VpZ2h0ID0gQW5pbWF0aW9uVXRpbHMuaW50ZXJwb2xhdGVQcm9wZXJ0eShcbiAgICAgIHRoaXMsXG4gICAgICAnd2VpZ2h0JyxcbiAgICAgIHdlaWdodCxcbiAgICAgIHtcbiAgICAgICAgc2Vjb25kcyxcbiAgICAgICAgZWFzaW5nRm46IGVhc2luZ0ZuICE9PSB1bmRlZmluZWQgPyBlYXNpbmdGbiA6IHRoaXMuX2Vhc2luZ0ZuLFxuICAgICAgfVxuICAgICk7XG5cbiAgICByZXR1cm4gdGhpcy5fcHJvbWlzZXMud2VpZ2h0O1xuICB9XG5cbiAgLyoqXG4gICAqIFBhdXNlIGFueSBpbnRlcnBvbGF0aW9uIGhhcHBlbmluZyBvbiB0aGUgbGF5ZXIncyB3ZWlnaHQgcHJvcGVydHkuXG4gICAqXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgcGF1c2VXZWlnaHQoKSB7XG4gICAgdGhpcy5fd2VpZ2h0UGF1c2VkID0gdHJ1ZTtcblxuICAgIHJldHVybiB0aGlzLndlaWdodFBlbmRpbmc7XG4gIH1cblxuICAvKipcbiAgICogUmVzdW1lIGFueSBpbnRlcnBvbGF0aW9uIGhhcHBlbmluZyBvbiB0aGUgbGF5ZXIncyB3ZWlnaHQgcHJvcGVydHkuXG4gICAqXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgcmVzdW1lV2VpZ2h0KCkge1xuICAgIHRoaXMuX3dlaWdodFBhdXNlZCA9IGZhbHNlO1xuXG4gICAgcmV0dXJuIHRoaXMud2VpZ2h0UGVuZGluZztcbiAgfVxuXG4gIC8qKlxuICAgKiBNdWx0aXBsaWVzIHRoZSB1c2VyIHdlaWdodCBieSBhIGZhY3RvciB0byBkZXRlcm1pbmUgdGhlIGludGVybmFsIHdlaWdodC5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGZhY3RvciAtIDAtMSBtdWx0aXBsaWVyIHRvIGFwcGx5IHRvIHRoZSB1c2VyIHdlaWdodC5cbiAgICovXG4gIHVwZGF0ZUludGVybmFsV2VpZ2h0KGZhY3Rvcikge1xuICAgIHRoaXMuX2ludGVybmFsV2VpZ2h0ID0gdGhpcy5fd2VpZ2h0ICogZmFjdG9yO1xuXG4gICAgaWYgKHRoaXMuX2N1cnJlbnRTdGF0ZSkge1xuICAgICAgdGhpcy5fY3VycmVudFN0YXRlLnVwZGF0ZUludGVybmFsV2VpZ2h0KHRoaXMuX2ludGVybmFsV2VpZ2h0KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgbmFtZXMgb2YgYmxlbmQgc3RhdGVzIGluIGFuIGFuaW1hdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFuaW1hdGlvbk5hbWUgLSBOYW1lIG9mIHRoZSBhbmltYXRpb24uXG4gICAqXG4gICAqIEByZXR1cm5zIHtBcnJheS48c3RyaW5nPn0gLSBOYW1lcyBvZiBibGVuZCBzdGF0ZXMuXG4gICAqL1xuICBnZXRBbmltYXRpb25CbGVuZE5hbWVzKGFuaW1hdGlvbk5hbWUpIHtcbiAgICBjb25zdCBzdGF0ZSA9IHRoaXMuZ2V0U3RhdGUoYW5pbWF0aW9uTmFtZSk7XG5cbiAgICBpZiAoc3RhdGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQ2Fubm90IGdldCBibGVuZCBuYW1lcyBvZiBhbmltYXRpb24gJHthbmltYXRpb25OYW1lfSBvbiBsYXllciAke3RoaXMubmFtZX0uIE5vIGFuaW1hdGlvbiBleGlzdHMgd2l0aCB0aGlzIG5hbWUuYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdGUgaW5zdGFuY2VvZiBBYnN0cmFjdEJsZW5kU3RhdGUpIHtcbiAgICAgIHJldHVybiBzdGF0ZS5nZXRTdGF0ZU5hbWVzKCk7XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYENhbm5vdCBnZXQgYmxlbmQgbmFtZXMgb2YgYW5pbWF0aW9uICR7YW5pbWF0aW9uTmFtZX0gb24gbGF5ZXIgJHt0aGlzLm5hbWV9LiBBbmltYXRpb24gaXMgbm90IGFuIGluc3RhbmNlIG9mIEFic3RyYWN0QmxlbmRTdGF0ZS5gXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgdGhlIHdlaWdodCBmb3IgYSBibGVuZCBzdGF0ZSBvZiBhbiBhbmltYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhbmltYXRpb25OYW1lIC0gTmFtZSBvZiB0aGUgYW5pbWF0aW9uIGNvbnRhaW5pbmcgdGhlIGJsZW5kIHN0YXRlXG4gICAqIHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGJsZW5kTmFtZSAtIE5hbWUgb2YgdGhlIGJsZW5kIHN0YXRlIHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtudW1iZXJ9IHdlaWdodCAtIFdlaWdodCB2YWx1ZSB0byBzZXQgb24gdGhlIGFuaW1hdGlvbi4gVGhpcyBudW1iZXIgc2hvdWRsZCBiZVxuICAgKiBpbiB0aGUgMC0xIHJhbmdlLlxuICAgKiBAcGFyYW0ge251bWJlcj19IHNlY29uZHMgLSBOdW1iZXIgb2Ygc2Vjb25kcyBpdCBzaG91bGQgdGFrZSB0byByZWFjaCB0aGUgbmV3IHdlaWdodC5cbiAgICogRGVmYXVsdCBpcyB6ZXJvIGFuZCB3aWxsIHNldCBpbW1lZGlhdGVseS5cbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IGVhc2luZ0ZuIC0gRWFzaW5nIGZ1bmN0aW9uIHRvIHVzZSB3aGlsZSBpbnRlcnBvbGF0aW5nIHRoZSBuZXdcbiAgICogd2VpZ2h0LiBEZWZhdWx0IGlzIEVhc2luZy5MaW5lYXIuSW5PdXQuXG4gICAqXG4gICAqIEByZXR1cm5zIHtEZWZlcnJlZH0gLSBQcm9taXNlIHRoYXQgd2lsbCByZXNvbHZlIG9uY2UgdGhlIGFuaW1hdGlvbidzIHdlaWdodCByZWFjaGVzXG4gICAqIHRoZSB0YXJnZXQgdmFsdWUuXG4gICAqL1xuICBzZXRBbmltYXRpb25CbGVuZFdlaWdodChcbiAgICBhbmltYXRpb25OYW1lLFxuICAgIGJsZW5kTmFtZSxcbiAgICB3ZWlnaHQsXG4gICAgc2Vjb25kcyA9IDAsXG4gICAgZWFzaW5nRm5cbiAgKSB7XG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzLmdldFN0YXRlKGFuaW1hdGlvbk5hbWUpO1xuXG4gICAgaWYgKHN0YXRlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYENhbm5vdCBzZXQgYmxlbmQgd2VpZ2h0IG9mIGFuaW1hdGlvbiAke2FuaW1hdGlvbk5hbWV9IG9uIGxheWVyICR7dGhpcy5uYW1lfS4gTm8gYW5pbWF0aW9uIGV4aXN0cyB3aXRoIHRoaXMgbmFtZS5gXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChzdGF0ZSBpbnN0YW5jZW9mIEFic3RyYWN0QmxlbmRTdGF0ZSkge1xuICAgICAgcmV0dXJuIHN0YXRlLnNldEJsZW5kV2VpZ2h0KGJsZW5kTmFtZSwgd2VpZ2h0LCBzZWNvbmRzLCBlYXNpbmdGbik7XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYENhbm5vdCBzZXQgYmxlbmQgd2VpZ2h0IG9mIGFuaW1hdGlvbiAke2FuaW1hdGlvbk5hbWV9IG9uIGxheWVyICR7dGhpcy5uYW1lfS4gQW5pbWF0aW9uIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBBYnN0cmFjdEJsZW5kU3RhdGUuYFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgd2VpZ2h0IGZvciBhIGJsZW5kIHN0YXRlIG9mIGFuIGFuaW1hdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFuaW1hdGlvbk5hbWUgLSBOYW1lIG9mIHRoZSBhbmltYXRpb24gY29udGFpbmluZyB0aGUgYmxlbmQgc3RhdGVcbiAgICogdG8gdXBkYXRlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYmxlbmROYW1lIC0gTmFtZSBvZiB0aGUgYmxlbmQgc3RhdGUgdG8gcmV0cmlldmUgdGhlIHdlaWdodCBvZi5cbiAgICpcbiAgICogQHJldHVybnMge251bWJlcn0gLSBXZWlnaHQgb2YgdGhlIGJsZW5kIHN0YXRlLlxuICAgKi9cbiAgZ2V0QW5pbWF0aW9uQmxlbmRXZWlnaHQoYW5pbWF0aW9uTmFtZSwgYmxlbmROYW1lKSB7XG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzLmdldFN0YXRlKGFuaW1hdGlvbk5hbWUpO1xuXG4gICAgaWYgKHN0YXRlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYENhbm5vdCBnZXQgYmxlbmQgd2VpZ2h0IG9mIGFuaW1hdGlvbiAke2FuaW1hdGlvbk5hbWV9IG9uIGxheWVyICR7dGhpcy5uYW1lfS4gTm8gYW5pbWF0aW9uIGV4aXN0cyB3aXRoIHRoaXMgbmFtZS5gXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChzdGF0ZSBpbnN0YW5jZW9mIEFic3RyYWN0QmxlbmRTdGF0ZSkge1xuICAgICAgcmV0dXJuIHN0YXRlLmdldEJsZW5kV2VpZ2h0KGJsZW5kTmFtZSk7XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYENhbm5vdCBnZXQgYmxlbmQgd2VpZ2h0IG9mIGFuaW1hdGlvbiAke2FuaW1hdGlvbk5hbWV9IG9uIGxheWVyICR7dGhpcy5uYW1lfS4gQW5pbWF0aW9uIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBBYnN0cmFjdEJsZW5kU3RhdGUuYFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIGFueSB3ZWlnaHQgaW50ZXJwb2xhdG9ycyBhbmQgdGhlIGN1cnJlbnQgYW5pbWF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gZGVsdGFUaW1lIC0gVGltZSBpbiBtaWxsaXNlY29uZHMgc2luY2UgdGhlIGxhc3QgdXBkYXRlLlxuICAgKi9cbiAgdXBkYXRlKGRlbHRhVGltZSkge1xuICAgIHN1cGVyLnVwZGF0ZShkZWx0YVRpbWUpO1xuXG4gICAgaWYgKCF0aGlzLl9wYXVzZWQgJiYgIXRoaXMuX3dlaWdodFBhdXNlZCkge1xuICAgICAgdGhpcy5fcHJvbWlzZXMud2VpZ2h0LmV4ZWN1dGUoZGVsdGFUaW1lKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2FuY2VsIGFueSBwZW5kaW5nIHByb21pc2VzIGFuZCBkaXNjYXJkIHN0YXRlcyBjb250cm9sbGVkIGJ5IHRoZSBsYXllci5cbiAgICovXG4gIGRpc2NhcmQoKSB7XG4gICAgc3VwZXIuZGlzY2FyZCgpO1xuXG4gICAgdGhpcy5kaXNjYXJkU3RhdGVzKCk7XG5cbiAgICB0aGlzLl9wcm9taXNlcy53ZWlnaHQuY2FuY2VsKCk7XG4gICAgZGVsZXRlIHRoaXMuX3Byb21pc2VzO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEFuaW1hdGlvbkxheWVyO1xuIiwiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTBcbmltcG9ydCBEZWZlcnJlZCBmcm9tICdjb3JlL0RlZmVycmVkJztcbmltcG9ydCBBYnN0cmFjdFN0YXRlIGZyb20gJy4vQWJzdHJhY3RTdGF0ZSc7XG5pbXBvcnQge3ZhbGlkYXRlQmxlbmRNb2RlfSBmcm9tICcuLi9BbmltYXRpb25MYXllcic7XG5pbXBvcnQgQW5pbWF0aW9uVXRpbHMgZnJvbSAnLi4vQW5pbWF0aW9uVXRpbHMnO1xuXG4vKipcbiAqIENsYXNzIGZvciBwbGF5aW5nIGEgc2luZ2xlIGFuaW1hdGlvbiBjbGlwLlxuICpcbiAqIEBleHRlbmRzIEFic3RyYWN0U3RhdGVcbiAqIEBhbGlhcyBjb3JlL1NpbmdsZVN0YXRlXG4gKi9cbmNsYXNzIFNpbmdsZVN0YXRlIGV4dGVuZHMgQWJzdHJhY3RTdGF0ZSB7XG4gIC8qKlxuICAgKiBAY29uc3RydWN0b3JcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3Q9fSBvcHRpb25zIC0gT3B0aW9ucyBmb3IgdGhlIGFuaW1hdGlvbiBzdGF0ZS5cbiAgICogQHBhcmFtIHtzdHJpbmc9fSBvcHRpb25zLm5hbWUgLSBOYW1lIGZvciB0aGUgYW5pbWF0aW9uIHN0YXRlLiBOYW1lcyBtdXN0IGJlXG4gICAqIHVuaXF1ZSBmb3IgdGhlIGxheWVyIHRoZSBzdGF0ZSBpcyBhcHBsaWVkIHRvLlxuICAgKiBAcGFyYW0ge3dlaWdodH0gW29wdGlvbnMud2VpZ2h0PTBdIC0gVGhlIDAtMSBhbW91bnQgb2YgaW5mbHVlbmNlIHRoZSBzdGF0ZSB3aWxsIGhhdmUuXG4gICAqIEBwYXJhbSB7dGltZVNjYWxlfSBbb3B0aW9ucy50aW1lU2NhbGU9MV0gLSBGYWN0b3IgdG8gc2NhbGUgdGhlIHBsYXliYWNrIHNwZWVkIG9mIHRoZVxuICAgKiBhbmltYXRpb24uXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5sb29wQ291bnQ9SW5maW5pdHldIC0gTnVtYmVyIG9mIHRpbWVzIHRoZSBhbmltYXRpb24gc2hvdWxkXG4gICAqIHJlcGVhdCBiZWZvcmUgZmluaXNoaW5nLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuYmxlbmRNb2RlPURlZmF1bHRMYXllckJsZW5kTW9kZV0gLSBUeXBlIG9mXG4gICAqIGJsZW5kaW5nIHRoZSBhbmltYXRpb24gc2hvdWxkIHVzZS5cbiAgICovXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMgPSB7fSkge1xuICAgIHN1cGVyKG9wdGlvbnMpO1xuXG4gICAgdGhpcy5fdGltZVNjYWxlID0gb3B0aW9ucy50aW1lU2NhbGUgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMudGltZVNjYWxlIDogMTtcbiAgICB0aGlzLl9wcm9taXNlcy50aW1lU2NhbGUgPSBEZWZlcnJlZC5yZXNvbHZlKCk7XG4gICAgdGhpcy5fbG9vcENvdW50ID1cbiAgICAgIG9wdGlvbnMubG9vcENvdW50ICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLmxvb3BDb3VudCA6IEluZmluaXR5O1xuICAgIHRoaXMuX2JsZW5kTW9kZSA9IHZhbGlkYXRlQmxlbmRNb2RlKG9wdGlvbnMuYmxlbmRNb2RlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGFuZCBzZXRzIHRoZSBub3JtYWxpemVkIHBsYXlpbmcgdGltZSBvZiB0aGUgY3VycmVudCBhbmltYXRpb25cbiAgICpcbiAgICogQHR5cGUge251bWJlcn1cbiAgICovXG4gIGdldCBub3JtYWxpemVkVGltZSgpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIHNldCBub3JtYWxpemVkVGltZSh0aW1lKSB7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBhbmQgc2V0cyB0aGUgYSBmYWN0b3IgdG8gc2NhbGUgYW5pbWF0aW9uIHBsYXliYWNrIHNwZWVkIHdpdGguXG4gICAqXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqL1xuICBnZXQgdGltZVNjYWxlKCkge1xuICAgIHJldHVybiB0aGlzLl90aW1lU2NhbGU7XG4gIH1cblxuICBzZXQgdGltZVNjYWxlKHRpbWVTY2FsZSkge1xuICAgIHRoaXMuX3RpbWVTY2FsZSA9IHRpbWVTY2FsZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHdoZXRoZXIgb3Igbm90IHRoZSB0aW1lU2NhbGUgaXMgY3VycmVudGx5IGJlaW5nIGFuaW1hdGVkLlxuICAgKlxuICAgKiBAcmVhZG9ubHlcbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqL1xuICBnZXQgdGltZVNjYWxlUGVuZGluZygpIHtcbiAgICByZXR1cm4gdGhpcy5fcHJvbWlzZXMudGltZVNjYWxlLnBlbmRpbmc7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgdGltZVNjYWxlIHZhbHVlIG92ZXIgdGltZS5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHdlaWdodCAtIFRoZSB0YXJnZXQgdGltZVNjYWxlIHZhbHVlLlxuICAgKiBAcGFyYW0ge251bWJlcn0gW3NlY29uZHM9MF0gLSBUaGUgYW1vdW50IG9mIHRpbWUgaXQgd2lsbCB0YWtlIHRvIHJlYWNoIHRoZVxuICAgKiB0YXJnZXQgdGltZVNjYWxlLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gZWFzaW5nRm4gLSBUaGUgZWFzaW5nIGZ1bmN0aW9uIHRvIHVzZSBmb3IgaW50ZXJwb2xhdGlvbi5cbiAgICpcbiAgICogQHJldHVybnMge0RlZmVycmVkfVxuICAgKi9cbiAgc2V0VGltZVNjYWxlKHRpbWVTY2FsZSwgc2Vjb25kcyA9IDAsIGVhc2luZ0ZuKSB7XG4gICAgdGhpcy5fcHJvbWlzZXMudGltZVNjYWxlLmNhbmNlbCgpO1xuXG4gICAgdGhpcy5fcHJvbWlzZXMudGltZVNjYWxlID0gQW5pbWF0aW9uVXRpbHMuaW50ZXJwb2xhdGVQcm9wZXJ0eShcbiAgICAgIHRoaXMsXG4gICAgICAndGltZVNjYWxlJyxcbiAgICAgIHRpbWVTY2FsZSxcbiAgICAgIHtzZWNvbmRzLCBlYXNpbmdGbn1cbiAgICApO1xuXG4gICAgcmV0dXJuIHRoaXMuX3Byb21pc2VzLnRpbWVTY2FsZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGFuZCBzZXRzIHRoZSBudW1iZXIgb2YgdGltZXMgdGhlIGFuaW1hdGlvbiB3aWxsIHJlcGVhdCBiZWZvcmUgZmluaXNoaW5nLlxuICAgKlxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0IGxvb3BDb3VudCgpIHtcbiAgICByZXR1cm4gdGhpcy5fbG9vcENvdW50O1xuICB9XG5cbiAgc2V0IGxvb3BDb3VudChsb29wQ291bnQpIHtcbiAgICB0aGlzLl9sb29wQ291bnQgPSBsb29wQ291bnQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgdHlwZSBvZiBibGVuZGluZyB1c2VkIGZvciB0aGUgYW5pbWF0aW9uLlxuICAgKlxuICAgKiBAcmVhZG9ubHlcbiAgICogQHR5cGUge3N0cmluZ31cbiAgICovXG4gIGdldCBibGVuZE1vZGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2JsZW5kTW9kZTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBTaW5nbGVTdGF0ZTtcbiIsIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVC0wXG5pbXBvcnQgQWJzdHJhY3RTdGF0ZSBmcm9tICcuL0Fic3RyYWN0U3RhdGUnO1xuaW1wb3J0IFN0YXRlQ29udGFpbmVySW50ZXJmYWNlIGZyb20gJy4vU3RhdGVDb250YWluZXJJbnRlcmZhY2UnO1xuaW1wb3J0IEFuaW1hdGlvblBsYXllckludGVyZmFjZSBmcm9tICcuLi9BbmltYXRpb25QbGF5ZXJJbnRlcmZhY2UnO1xuaW1wb3J0IFV0aWxzIGZyb20gJy4uLy4uL1V0aWxzJztcblxuLyoqXG4gKiBDbGFzcyBmb3IgcGxheWluZyByYW5kb20gYW5pbWF0aW9ucyBhdCByYW5kb20gaW50ZXJ2YWxzIHdpdGhpbiB0aGlzIHN0YXRlLlxuICpcbiAqIEBleHRlbmRzIEFic3RyYWN0U3RhdGVcbiAqIEBpbXBsZW1lbnRzIEFuaW1hdGlvblBsYXllckludGVyZmFjZVxuICogQGltcGxlbWVudHMgU3RhdGVDb250YWluZXJJbnRlcmZhY2VcbiAqL1xuY2xhc3MgUmFuZG9tQW5pbWF0aW9uU3RhdGUgZXh0ZW5kcyBBbmltYXRpb25QbGF5ZXJJbnRlcmZhY2UuTWl4aW4oU3RhdGVDb250YWluZXJJbnRlcmZhY2UuTWl4aW4oQWJzdHJhY3RTdGF0ZSkpIHtcbiAgLyoqXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIC0gT3B0aW9ucyBmb3IgdGhlIGNvbnRhaW5lciBzdGF0ZS5cbiAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLnBsYXlJbnRlcnZhbD0zXSAtIFRoZSBiYXNlIGFuaW1hdGlvbiBwbGF5YmFjayBpbnRlcnZhbC5cbiAgICogQHBhcmFtIHtBcnJheS48QWJzdHJhY3RTdGF0ZT59IFtzdWJTdGF0ZXM9W11dIC0gc3RhdGVzIHRvIGJlIHJhbmRvbWx5IHBpY2tlZCB0byBwbGF5XG4gICAqL1xuICBjb25zdHJ1Y3RvcihvcHRpb25zID0ge30sIHN1YlN0YXRlcyA9IFtdKSB7XG4gICAgc3VwZXIob3B0aW9ucyk7XG5cbiAgICB0aGlzLl9wbGF5SW50ZXJ2YWwgPSBvcHRpb25zLnBsYXlJbnRlcnZhbCA/IG9wdGlvbnMucGxheUludGVydmFsIDogMztcblxuICAgIHN1YlN0YXRlcy5mb3JFYWNoKHN0YXRlID0+IHtcbiAgICAgIHRoaXMuYWRkU3RhdGUoc3RhdGUpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgYW5kIHNldHMgdGhlIGJhc2UgYW5pbWF0aW9uIHBsYXkgaW50ZXJ2YWxcbiAgICpcbiAgICogQHR5cGUge2Zsb2F0fVxuICAgKi9cbiAgZ2V0IHBsYXlJbnRlcnZhbCgpIHtcbiAgICByZXR1cm4gdGhpcy5fcGxheUludGVydmFsO1xuICB9XG5cbiAgc2V0IHBsYXlJbnRlcnZhbChwbGF5SW50ZXJ2YWwpIHtcbiAgICB0aGlzLl9wbGF5SW50ZXJ2YWwgPSBwbGF5SW50ZXJ2YWw7XG4gIH1cblxuICAvKipcbiAgICogUmVzZXQgdGhlIGludGVybmFsIHRpbWVyIGZvciBhbmltYXRpb24gcGxheSBpbnRlcnZhbFxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3Jlc2V0VGltZXIoKSB7XG4gICAgY29uc3QgcGxheVRpbWVyID0gVXRpbHMuZ2V0UmFuZG9tRmxvYXQodGhpcy5fcGxheUludGVydmFsIC8gNCwgdGhpcy5fcGxheUludGVydmFsICogMik7XG4gICAgY29uc3Qgb25GaW5pc2ggPSAoKSA9PiB7XG4gICAgICB0aGlzLnBsYXlSYW5kb21BbmltYXRpb24odGhpcy5fcGxheUNhbGxiYWNrcy5vbkVycm9yKTtcbiAgICB9XG4gICAgdGhpcy5fcHJvbWlzZXMudGltZXIgPSBVdGlscy53YWl0KHBsYXlUaW1lciwge29uRmluaXNofSk7XG4gIH1cblxuICB1cGRhdGVJbnRlcm5hbFdlaWdodChmYWN0b3IpIHtcbiAgICBzdXBlci51cGRhdGVJbnRlcm5hbFdlaWdodChmYWN0b3IpO1xuXG4gICAgaWYgKHRoaXMuX2N1cnJlbnRTdGF0ZSkge1xuICAgICAgdGhpcy5fY3VycmVudFN0YXRlLnVwZGF0ZUludGVybmFsV2VpZ2h0KHRoaXMuX2ludGVybmFsV2VpZ2h0KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUGljayBhIHJhbmRvbSBhbmltYXRpb24gYW5kIHV0aWxpemUgQW5pbWF0aW9uUGxheWVySW50ZXJmYWNlIHRvIHBsYXkgdGhhdCBhbmltYXRpb25cbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9uRXJyb3IgLSBGdW5jdGlvbiB0byBleGVjdXRlIGlmIHRoZSBzdGF0ZSBlbmNvdW50ZXJzXG4gICAqIGFuIGVycm9yIGR1cmluZyBwbGF5YmFjay5cbiAgICovXG4gIHBsYXlSYW5kb21BbmltYXRpb24ob25FcnJvcikge1xuICAgIHRoaXMuX3Jlc2V0VGltZXIoKTtcblxuICAgIGNvbnN0IHN0YXRlcyA9IHRoaXMuZ2V0U3RhdGVOYW1lcygpO1xuICAgIGlmICh0aGlzLl9jdXJyZW50U3RhdGUpIHtcbiAgICAgIHN0YXRlcy5zcGxpY2Uoc3RhdGVzLmluZGV4T2YodGhpcy5fY3VycmVudFN0YXRlLm5hbWUpLCAxKTtcbiAgICB9XG4gICAgY29uc3QgcmFuZG9tU3RhdGUgPSAgc3RhdGVzW1V0aWxzLmdldFJhbmRvbUludCgwLCBzdGF0ZXMubGVuZ3RoKV07XG5cbiAgICB0aGlzLnBsYXlBbmltYXRpb24ocmFuZG9tU3RhdGUsIHRoaXMuX3RyYW5zaXRpb25UaW1lLCB0aGlzLl9lYXNpbmdGbiwgdW5kZWZpbmVkLCBvbkVycm9yLCB1bmRlZmluZWQpO1xuICB9XG5cbiAgcGxheShvbkZpbmlzaCwgb25FcnJvciwgb25DYW5jZWwpIHtcbiAgICB0aGlzLnBsYXlSYW5kb21BbmltYXRpb24ob25FcnJvcik7XG4gICAgcmV0dXJuIHN1cGVyLnBsYXkob25GaW5pc2gsIG9uRXJyb3IsIG9uQ2FuY2VsKTtcbiAgfVxuXG4gIHBhdXNlKCkge1xuICAgIHJldHVybiBzdXBlci5wYXVzZSgpICYmIHRoaXMucGF1c2VBbmltYXRpb24oKTtcbiAgfVxuXG4gIHJlc3VtZShvbkZpbmlzaCwgb25FcnJvciwgb25DYW5jZWwpIHtcbiAgICBpZiAodGhpcy5fY3VycmVudFN0YXRlKSB7XG4gICAgICB0aGlzLnJlc3VtZUFuaW1hdGlvbih0aGlzLl9jdXJyZW50U3RhdGUubmFtZSwgdGhpcy5fdHJhbnNpdGlvblRpbWUsIHRoaXMuX2Vhc2luZ0ZuLCB1bmRlZmluZWQsIG9uRXJyb3IsIHVuZGVmaW5lZCk7XG4gICAgfVxuICAgIHJldHVybiBzdXBlci5yZXN1bWUob25GaW5pc2gsIG9uRXJyb3IsIG9uQ2FuY2VsKTtcbiAgfVxuXG4gIGNhbmNlbCgpIHtcbiAgICByZXR1cm4gc3VwZXIuY2FuY2VsKCkgJiYgdGhpcy5jYW5jZWxBbmltYXRpb24oKTtcbiAgfVxuXG4gIHN0b3AoKSB7XG4gICAgcmV0dXJuIHN1cGVyLnN0b3AoKSAmJiB0aGlzLnN0b3BBbmltYXRpb24oKTtcbiAgfVxuXG4gIGRpc2NhcmQoKSB7XG4gICAgc3VwZXIuZGlzY2FyZCgpO1xuICAgIHRoaXMuZGlzY2FyZFN0YXRlcygpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFJhbmRvbUFuaW1hdGlvblN0YXRlO1xuIiwiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXHJcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxyXG5pbXBvcnQgQWJzdHJhY3RIb3N0RmVhdHVyZSBmcm9tICdjb3JlL0Fic3RyYWN0SG9zdEZlYXR1cmUnO1xyXG5pbXBvcnQgVXRpbHMgZnJvbSAnY29yZS9VdGlscyc7XHJcbmltcG9ydCBRdWV1ZVN0YXRlIGZyb20gJy4vc3RhdGUvUXVldWVTdGF0ZSc7XHJcbmltcG9ydCBGcmVlQmxlbmRTdGF0ZSBmcm9tICcuL3N0YXRlL0ZyZWVCbGVuZFN0YXRlJztcclxuaW1wb3J0IEJsZW5kMWRTdGF0ZSBmcm9tICcuL3N0YXRlL0JsZW5kMWRTdGF0ZSc7XHJcbmltcG9ydCBCbGVuZDJkU3RhdGUgZnJvbSAnLi9zdGF0ZS9CbGVuZDJkU3RhdGUnO1xyXG5pbXBvcnQgU2luZ2xlU3RhdGUgZnJvbSAnLi9zdGF0ZS9TaW5nbGVTdGF0ZSc7XHJcbmltcG9ydCBSYW5kb21BbmltYXRpb25TdGF0ZSBmcm9tICcuL3N0YXRlL1JhbmRvbUFuaW1hdGlvblN0YXRlJztcclxuaW1wb3J0IEFuaW1hdGlvbkxheWVyLCB7TGF5ZXJCbGVuZE1vZGVzfSBmcm9tICcuL0FuaW1hdGlvbkxheWVyJztcclxuaW1wb3J0IERlZmVycmVkIGZyb20gJy4uL0RlZmVycmVkJztcclxuXHJcbi8qKlxyXG4gKiBFbnVtIGZvciBhbmltYXRpb24gc3RhdGUgY2xhc3Nlcy5cclxuICpcclxuICogQHJlYWRvbmx5XHJcbiAqIEBlbnVtIHtDbGFzc31cclxuICovXHJcbmV4cG9ydCBjb25zdCBBbmltYXRpb25UeXBlcyA9IHtcclxuICBzaW5nbGU6IFNpbmdsZVN0YXRlLFxyXG4gIGZyZWVCbGVuZDogRnJlZUJsZW5kU3RhdGUsXHJcbiAgcXVldWU6IFF1ZXVlU3RhdGUsXHJcbiAgcmFuZG9tQW5pbWF0aW9uOiBSYW5kb21BbmltYXRpb25TdGF0ZSxcclxuICBibGVuZDFkOiBCbGVuZDFkU3RhdGUsXHJcbiAgYmxlbmQyZDogQmxlbmQyZFN0YXRlLFxyXG59O1xyXG5cclxuLyoqXHJcbiAqIEZlYXR1cmUgZm9yIG1hbmFnaW5nIGFuaW1hdGlvbnMgb24gYW4gb2JqZWN0LlxyXG4gKlxyXG4gKiBAZXh0ZW5kcyBBYnN0cmFjdEhvc3RGZWF0dXJlXHJcbiAqIEBhbGlhcyBjb3JlL0FuaW1hdGlvbkZlYXR1cmVcclxuICpcclxuICogQHByb3BlcnR5IHtPYmplY3R9IEVWRU5UUyAtIEJ1aWx0LWluIG1lc3NhZ2VzIHRoYXQgdGhlIGZlYXR1cmUgZW1pdHMuIFdoZW4gdGhlXHJcbiAqIGZlYXR1cmUgaXMgYWRkZWQgdG8gYSB7QGxpbmsgY29yZS9Ib3N0T2JqZWN0fSwgZXZlbnQgbmFtZXMgd2lsbCBiZSBwcmVmaXhlZCBieSB0aGVcclxuICogbmFtZSBvZiB0aGUgZmVhdHVyZSBjbGFzcyArICcuJy5cclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtFVkVOVFMuYWRkTGF5ZXI9b25BZGRMYXllckV2ZW50XSAtIE1lc3NhZ2UgdGhhdCBpcyBlbWl0dGVkIGFmdGVyXHJcbiAqIFthZGRMYXllcl17QGxpbmsgY29yZS9BbmltYXRpb25GZWF0dXJlI2FkZExheWVyfSBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgZXhlY3V0ZWQuXHJcbiAqIEFuIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIG5hbWUgb2YgdGhlIGxheWVyIHRoYXQgd2FzIGFkZGVkIGFuZCBpdHMgaW5kZXggaW5cclxuICogdGhlIGxheWVyIHN0YWNrIHdpdGggdGhlIHNpZ25hdHVyZSB7bmFtZTogc3RyaW5nLCBpbmRleDogbnVtYmVyfSBpcyBzdXBwbGllZFxyXG4gKiBhcyBhbiBhcmd1bWVudCB0byBsaXN0ZW5lciBmdW5jdGlvbnMuXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbRVZFTlRTLnJlbW92ZUxheWVyPW9uUmVtb3ZlTGF5ZXJFdmVudF0gLSBNZXNzYWdlIHRoYXQgaXNcclxuICogZW1pdHRlZCBhZnRlciBbcmVtb3ZlTGF5ZXJde0BsaW5rIGNvcmUvQW5pbWF0aW9uRmVhdHVyZSNyZW1vdmVMYXllcn0gaGFzIGJlZW5cclxuICogc3VjY2Vzc2Z1bGx5IGV4ZWN1dGVkLiBBbiBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBuYW1lIG9mIHRoZSBsYXllciB0aGF0IHdhc1xyXG4gKiByZW1vdmVkIGFuZCBpdHMgaW5kZXggaW4gdGhlIGxheWVyIHN0YWNrIHdpdGggdGhlIHNpZ25hdHVyZSB7bmFtZTogc3RyaW5nLCBpbmRleDogbnVtYmVyfVxyXG4gKiBpcyBzdXBwbGllZCBhcyBhbiBhcmd1bWVudCB0byBsaXN0ZW5lciBmdW5jdGlvbnMuXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbRVZFTlRTLnJlbmFtZUxheWVyPW9uUmVuYW1lTGF5ZXJFdmVudF0gLSBNZXNzYWdlIHRoYXQgaXNcclxuICogZW1pdHRlZCBhZnRlciBbcmVuYW1lTGF5ZXJde0BsaW5rIGNvcmUvQW5pbWF0aW9uRmVhdHVyZSNyZW5hbWVMYXllcn0gaGFzIGJlZW5cclxuICogc3VjY2Vzc2Z1bGx5IGV4ZWN1dGVkLiBBbiBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBvcmlnaW5hbCBuYW1lIG9mIHRoZSBsYXllclxyXG4gKiB0aGF0IHdhcyByZW5hbWVkIGFuZCBpdHMgdXBkYXRlZCBuYW1lIHdpdGggdGhlIHNpZ25hdHVyZSB7b2xkTmFtZTogc3RyaW5nLCBuZXdOYW1lOiBzdHJpbmd9XHJcbiAqIGlzIHN1cHBsaWVkIGFzIGFuIGFyZ3VtZW50IHRvIGxpc3RlbmVyIGZ1bmN0aW9ucy5cclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtFVkVOVFMuYWRkQW5pbWF0aW9uPW9uQWRkQW5pbWF0aW9uRXZlbnRdIC0gTWVzc2FnZSB0aGF0IGlzXHJcbiAqIGVtaXR0ZWQgYWZ0ZXIgW2FkZEFuaW1hdGlvbl17QGxpbmsgY29yZS9BbmltYXRpb25GZWF0dXJlI2FkZEFuaW1hdGlvbn0gaGFzIGJlZW5cclxuICogc3VjY2Vzc2Z1bGx5IGV4ZWN1dGVkLiBBbiBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBuYW1lIG9mIHRoZSBsYXllciB0aGF0IHRoZVxyXG4gKiBhbmltYXRpb24gd2FzIGFkZGVkIHRvIGFuZCB0aGUgbmFtZSBvZiB0aGUgYW5pbWF0aW9uIHRoYXQgd2FzIGFkZGVkIHdpdGggdGhlXHJcbiAqIHNpZ25hdHVyZSB7bGF5ZXJOYW1lOiBzdHJpbmcsIGFuaW1hdGlvbk5hbWU6IHN0cmluZ30gaXMgc3VwcGxpZWQgYXMgYW4gYXJndW1lbnRcclxuICogdG8gbGlzdGVuZXIgZnVuY3Rpb25zLlxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW0VWRU5UUy5yZW1vdmVBbmltYXRpb249b25SZW1vdmVkQW5pbWF0aW9uRXZlbnRdIC0gTWVzc2FnZVxyXG4gKiB0aGF0IGlzIGVtaXR0ZWQgYWZ0ZXIgW3JlbW92ZUFuaW1hdGlvbl17QGxpbmsgY29yZS9BbmltYXRpb25GZWF0dXJlI3JlbW92ZUFuaW1hdGlvbn1cclxuICogaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IGV4ZWN1dGVkLiBBbiBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBuYW1lIG9mIHRoZSBsYXllclxyXG4gKiB0aGF0IHRoZSBhbmltYXRpb24gd2FzIHJlbW92ZWQgZnJvbSBhbmQgdGhlIG5hbWUgb2YgdGhlIGFuaW1hdGlvbiB0aGF0IHdhcyByZW1vdmVkXHJcbiAqIHdpdGggdGhlIHNpZ25hdHVyZSB7bGF5ZXJOYW1lOiBzdHJpbmcsIGFuaW1hdGlvbk5hbWU6IHN0cmluZ30gaXMgc3VwcGxpZWQgYXNcclxuICogYW4gYXJndW1lbnQgdG8gbGlzdGVuZXIgZnVuY3Rpb25zLlxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW0VWRU5UUy5yZW5hbWVBbmltYXRpb249b25SZW5hbWVBbmltYXRpb25FdmVudF0gLSBNZXNzYWdlXHJcbiAqIHRoYXQgaXMgZW1pdHRlZCBhZnRlciBbcmVuYW1lQW5pbWF0aW9uXXtAbGluayBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjcmVuYW1lQW5pbWF0aW9ufVxyXG4gKiBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgZXhlY3V0ZWQuIEFuIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIG5hbWUgb2YgdGhlIGxheWVyXHJcbiAqIHRoYXQgY29udGFpbnMgdGhlIGFuaW1hdGlvbiB0aGF0IHdhcyByZW5hbWVkLCB0aGUgb3JpZ2luYWwgbmFtZSBvZiB0aGUgYW5pbWF0aW9uXHJcbiAqIHRoYXQgd2FzIHJlbmFtZWQgYW5kIGl0cyB1cGRhdGVkIG5hbWUgd2l0aCB0aGUgc2lnbmF0dXJlIHtsYXllck5hbWU6IHN0cmluZywgb2xkTmFtZTogc3RyaW5nLCBuZXdOYW1lOiBzdHJpbmd9XHJcbiAqIGlzIHN1cHBsaWVkIGFzIGFuIGFyZ3VtZW50IHRvIGxpc3RlbmVyIGZ1bmN0aW9ucy5cclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtFVkVOVFMucGxheT1vblBsYXlFdmVudF0gLSBNZXNzYWdlIHRoYXQgaXMgZW1pdHRlZCBhZnRlclxyXG4gKiBlYWNoIGNhbGwgdG8gW3BsYXlde0BsaW5rIGNvcmUvQW5pbWF0aW9uRmVhdHVyZSNwbGF5QW5pbWF0aW9ufS4gQW4gb2JqZWN0IHJlcHJlc2VudGluZ1xyXG4gKiB0aGUgbmFtZSBvZiB0aGUgbGF5ZXIgY29udGFpbnMgdGhlIGFuaW1hdGlvbiB0aGF0IHdhcyBwbGF5ZWQgYW5kIHRoZSBuYW1lIG9mXHJcbiAqIHRoZSBhbmltYXRpb24gdGhhdCB3YXMgcGxheWVkIHdpdGggdGhlIHNpZ25hdHVyZSB7bGF5ZXJOYW1lOiBzdHJpbmcsIGFuaW1hdGlvbk5hbWU6IHN0cmluZ31cclxuICogaXMgc3VwcGxpZWQgYXMgYW4gYXJndW1lbnQgdG8gbGlzdGVuZXIgZnVuY3Rpb25zLlxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW0VWRU5UUy5wYXVzZT1vblBhdXNlRXZlbnRdIC0gTWVzc2FnZSB0aGF0IGlzIGVtaXR0ZWQgYWZ0ZXJcclxuICogZWFjaCBjYWxsIHRvIFtwYXVzZV17QGxpbmsgY29yZS9BbmltYXRpb25GZWF0dXJlI3BhdXNlQW5pbWF0aW9ufS4gQW4gb2JqZWN0IHJlcHJlc2VudGluZ1xyXG4gKiB0aGUgbmFtZSBvZiB0aGUgbGF5ZXIgY29udGFpbnMgdGhlIGFuaW1hdGlvbiB0aGF0IHdhcyBwYXVzZWQgYW5kIHRoZSBuYW1lIG9mXHJcbiAqIHRoZSBhbmltYXRpb24gdGhhdCB3YXMgcGF1c2VkIHdpdGggdGhlIHNpZ25hdHVyZSB7bGF5ZXJOYW1lOiBzdHJpbmcsIGFuaW1hdGlvbk5hbWU6IHN0cmluZ31cclxuICogaXMgc3VwcGxpZWQgYXMgYW4gYXJndW1lbnQgdG8gbGlzdGVuZXIgZnVuY3Rpb25zLlxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW0VWRU5UUy5yZXN1bWU9b25SZXN1bWVFdmVudF0gLSBNZXNzYWdlIHRoYXQgaXMgZW1pdHRlZCBhZnRlclxyXG4gKiBlYWNoIGNhbGwgdG8gW3Jlc3VtZV17QGxpbmsgY29yZS9BbmltYXRpb25GZWF0dXJlI3Jlc3VtZUFuaW1hdGlvbn0uIEFuIG9iamVjdCByZXByZXNlbnRpbmdcclxuICogdGhlIG5hbWUgb2YgdGhlIGxheWVyIGNvbnRhaW5zIHRoZSBhbmltYXRpb24gdGhhdCB3YXMgcmVzdW1lZCBhbmQgdGhlIG5hbWUgb2ZcclxuICogdGhlIGFuaW1hdGlvbiB0aGF0IHdhcyByZXN1bWVkIHdpdGggdGhlIHNpZ25hdHVyZSB7bGF5ZXJOYW1lOiBzdHJpbmcsIGFuaW1hdGlvbk5hbWU6IHN0cmluZ31cclxuICogaXMgc3VwcGxpZWQgYXMgYW4gYXJndW1lbnQgdG8gbGlzdGVuZXIgZnVuY3Rpb25zLlxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW0VWRU5UUy5pbnRlcnJ1cHQ9b25JbnRlcnJ1cHRFdmVudF0gLSBNZXNzYWdlIHRoYXQgaXMgZW1pdHRlZFxyXG4gKiBpZiB0aGVyZSBpcyBhIGN1cnJlbnQgc3BlZWNoIGluIHByb2dyZXNzIGFuZCBbcGxheV17QGxpbmsgY29yZS9BbmltYXRpb25GZWF0dXJlI3BsYXlBbmltYXRpb259XHJcbiAqIG9yIFtyZXN1bWVde0BsaW5rIGNvcmUvQW5pbWF0aW9uRmVhdHVyZSNyZXN1bWVBbmltYXRpb259IGFyZSBleGVjdXRlZCBmb3IgYSBuZXcgc3BlZWNoLlxyXG4gKiBBbiBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBuYW1lIG9mIHRoZSBsYXllciBjb250YWlucyB0aGUgYW5pbWF0aW9uIHRoYXQgd2FzXHJcbiAqIGludGVycnVwdGVkIGFuZCB0aGUgbmFtZSBvZiB0aGUgYW5pbWF0aW9uIHRoYXQgd2FzIGludGVycnVwdGVkIHdpdGggdGhlIHNpZ25hdHVyZVxyXG4gKiB7bGF5ZXJOYW1lOiBzdHJpbmcsIGFuaW1hdGlvbk5hbWU6IHN0cmluZ30gaXMgc3VwcGxpZWQgYXMgYW4gYXJndW1lbnQgdG8gbGlzdGVuZXJcclxuICogZnVuY3Rpb25zLlxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW0VWRU5UUy5zdG9wPW9uU3RvcEV2ZW50XSAtIE1lc3NhZ2UgdGhhdCBpcyBlbWl0dGVkIGFmdGVyXHJcbiAqIGVhY2ggY2FsbCB0byBbc3RvcF17QGxpbmsgY29yZS9BbmltYXRpb25GZWF0dXJlI3N0b3BBbmltYXRpb259IGFuZCB3aGVuIGEgc3BlZWNoIHJlYWNoZXNcclxuICogdGhlIGVuZCBvZiBwbGF5YmFjay4gQW4gb2JqZWN0IHJlcHJlc2VudGluZ1xyXG4gKiB0aGUgbmFtZSBvZiB0aGUgbGF5ZXIgY29udGFpbnMgdGhlIGFuaW1hdGlvbiB0aGF0IHdhcyBzdG9wcGVkIGFuZCB0aGUgbmFtZSBvZlxyXG4gKiB0aGUgYW5pbWF0aW9uIHRoYXQgd2FzIHN0b3BwZWQgd2l0aCB0aGUgc2lnbmF0dXJlIHtsYXllck5hbWU6IHN0cmluZywgYW5pbWF0aW9uTmFtZTogc3RyaW5nfVxyXG4gKiBpcyBzdXBwbGllZCBhcyBhbiBhcmd1bWVudCB0byBsaXN0ZW5lciBmdW5jdGlvbnMuXHJcbiAqL1xyXG5jbGFzcyBBbmltYXRpb25GZWF0dXJlIGV4dGVuZHMgQWJzdHJhY3RIb3N0RmVhdHVyZSB7XHJcbiAgLyoqXHJcbiAgICogQGNvbnN0cnVjdG9yXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge2NvcmUvSG9zdE9iamVjdH0gaG9zdCAtIEhvc3Qgb2JqZWN0IHRoYXQgb3ducyB0aGUgZmVhdHVyZS5cclxuICAgKi9cclxuICBjb25zdHJ1Y3Rvcihob3N0KSB7XHJcbiAgICBzdXBlcihob3N0KTtcclxuXHJcbiAgICB0aGlzLl9sYXllcnMgPSBbXTtcclxuICAgIHRoaXMuX2xheWVyTWFwID0ge307XHJcbiAgICB0aGlzLl9wYXVzZWQgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ha2Ugc3VyZSBhIHN1cHBsaWVkIGxheWVyIGluZGV4IGlzIHdpdGhpbiB0aGUgcmFuZ2Ugb2YgbGF5ZXJzLlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxyXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2V4aXN0aW5nPXRydWVdIC0gV2hldGhlciB0aGUgaW5kZXggcmVwcmVzZW50cyBhbmQgZXhpc3RpbmdcclxuICAgKiBsYXllciBvciBhIG5ldyBsYXllciB0byBiZSBhZGRlZC5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtudW1iZXI9fVxyXG4gICAqL1xyXG4gIF92YWxpZGF0ZUluZGV4KGluZGV4LCBleGlzdGluZyA9IHRydWUpIHtcclxuICAgIC8vIEluZGV4IGlzIGludmFsaWQgaWYgdGhlcmUgYXJlIG5vIGxheWVycyBhbmQgd2UncmUgY2hlY2tpbmcgZm9yIGFuIGV4aXN0aW5nIGxheWVyIGluZGV4XHJcbiAgICBpZiAodGhpcy5fbGF5ZXJzLmxlbmd0aCA9PT0gMCAmJiBleGlzdGluZykge1xyXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGxhc3RJbmRleCA9IGV4aXN0aW5nID8gdGhpcy5fbGF5ZXJzLmxlbmd0aCAtIDEgOiB0aGlzLl9sYXllcnMubGVuZ3RoO1xyXG5cclxuICAgIC8vIENvdW50IGZyb20gdGhlIGVuZCBvZiB0aGUgYXJyYXkgZm9yIG5lZ2F0aXZlIGluZGljZXNcclxuICAgIGlmIChpbmRleCA8IDApIHtcclxuICAgICAgaW5kZXggPSBsYXN0SW5kZXggKyBpbmRleCArIDE7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+IGxhc3RJbmRleCkge1xyXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIGluZGV4O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmUtZXZhbHVhdGUgaW50ZXJuYWwgd2VpZ2h0IHZhbHVlcyBvZiBsYXllcnMgc3RhcnRpbmcgZnJvbSB0aGUgdG9wIG9mIHRoZVxyXG4gICAqIHN0YWNrLiBPdmVycmlkZSBsYXllcnMnIHdlaWdodHMgYWZmZWN0IHRoZSB2YWx1ZXMgb2YgYWxsIGxheWVycyBsb3dlciBpbiB0aGVcclxuICAgKiBzdGFjay5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICovXHJcbiAgX3VwZGF0ZUludGVybmFsV2VpZ2h0cygpIHtcclxuICAgIGNvbnN0IG51bUxheWVycyA9IHRoaXMuX2xheWVycy5sZW5ndGg7XHJcbiAgICBsZXQgd2VpZ2h0TXVsdGlwbGllciA9IDE7XHJcblxyXG4gICAgLy8gVXBkYXRlIGludGVybmFsIHdlaWdodCB2YWx1ZXMgb24gbGF5ZXJzIGluIHJldmVyc2Ugb3JkZXJcclxuICAgIGZvciAobGV0IGkgPSBudW1MYXllcnMgLSAxOyBpID49IDA7IGktLSkge1xyXG4gICAgICBjb25zdCBsYXllciA9IHRoaXMuX2xheWVyc1tpXTtcclxuICAgICAgbGF5ZXIudXBkYXRlSW50ZXJuYWxXZWlnaHQod2VpZ2h0TXVsdGlwbGllcik7XHJcblxyXG4gICAgICAvLyBJZiB0aGUgbGF5ZXIgaXMgb3ZlcnJpZGUsIHVwZGF0ZSB0aGUgbXVsdGlwbGllciB3aXRoIHRoZSByZW1haW5kZXIgb2YgdGhlIGZ1bGwgd2VpZ2h0XHJcbiAgICAgIGlmIChsYXllci5ibGVuZE1vZGUgPT09IExheWVyQmxlbmRNb2Rlcy5PdmVycmlkZSAmJiBsYXllci5jdXJyZW50U3RhdGUpIHtcclxuICAgICAgICB3ZWlnaHRNdWx0aXBsaWVyICo9IDEgLSBsYXllci5jdXJyZW50U3RhdGUuaW50ZXJuYWxXZWlnaHQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiBhIG5ldyBpbnN0YW5jZSBvZiBhIFNpbmdsZVN0YXRlLlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gT3B0aW9ucyB0byBwYXNzIHRvIHRoZSBTaW5nbGVTdGF0ZSBjb25zdHJ1Y3Rvci5cclxuICAgKiBAcGFyYW0ge3N0cmluZz19IG9wdGlvbnMubmFtZSAtIE5hbWUgZm9yIHRoZSBhbmltYXRpb24gc3RhdGUuIE5hbWVzIG11c3QgYmVcclxuICAgKiB1bmlxdWUgZm9yIHRoZSBsYXllciB0aGUgc3RhdGUgaXMgYXBwbGllZCB0by5cclxuICAgKiBAcGFyYW0ge3dlaWdodH0gW29wdGlvbnMud2VpZ2h0PTBdIC0gVGhlIDAtMSBhbW91bnQgb2YgaW5mbHVlbmNlIHRoZSBzdGF0ZSB3aWxsIGhhdmUuXHJcbiAgICogQHBhcmFtIHt0aW1lU2NhbGV9IFtvcHRpb25zLnRpbWVTY2FsZT0xXSAtIEZhY3RvciB0byBzY2FsZSB0aGUgcGxheWJhY2sgc3BlZWQgb2YgdGhlXHJcbiAgICogYW5pbWF0aW9uLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5sb29wQ291bnQ9SW5maW5pdHldIC0gTnVtYmVyIG9mIHRpbWVzIHRoZSBhbmltYXRpb24gc2hvdWxkXHJcbiAgICogcmVwZWF0IGJlZm9yZSBmaW5pc2hpbmcuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmJsZW5kTW9kZT1MYXllckJsZW5kTW9kZXNbRGVmYXVsdExheWVyQmxlbmRNb2RlXV0gLSBUeXBlIG9mXHJcbiAgICogYmxlbmRpbmcgdGhlIGFuaW1hdGlvbiBzaG91bGQgdXNlLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge2NvcmUvU2luZ2xlU3RhdGV9XHJcbiAgICovXHJcbiAgX2NyZWF0ZVNpbmdsZVN0YXRlKG9wdGlvbnMpIHtcclxuICAgIHJldHVybiBuZXcgU2luZ2xlU3RhdGUob3B0aW9ucyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gYSBuZXcgaW5zdGFuY2Ugb2YgYSBGcmVlQmxlbmRTdGF0ZS5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gcGFzcyB0byB0aGUgRnJlZUJsZW5kU3RhdGUgY29uc3RydWN0b3IuXHJcbiAgICogQHBhcmFtIHtzdHJpbmc9fSBvcHRpb25zLm5hbWUgLSBOYW1lIGZvciB0aGUgYW5pbWF0aW9uIHN0YXRlLiBOYW1lcyBtdXN0IGJlXHJcbiAgICogdW5pcXVlIGZvciB0aGUgbGF5ZXIgdGhlIHN0YXRlIGlzIGFwcGxpZWQgdG8uXHJcbiAgICogQHBhcmFtIHt3ZWlnaHR9IFtvcHRpb25zLndlaWdodD0wXSAtIFRoZSAwLTEgYW1vdW50IG9mIGluZmx1ZW5jZSB0aGUgc3RhdGUgd2lsbCBoYXZlLlxyXG4gICAqIEBwYXJhbSB7dGltZVNjYWxlfSBbb3B0aW9ucy50aW1lU2NhbGU9MV0gLSBGYWN0b3IgdG8gc2NhbGUgdGhlIHBsYXliYWNrIHNwZWVkIG9mIHRoZVxyXG4gICAqIGFuaW1hdGlvbi5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMubG9vcENvdW50PUluZmluaXR5XSAtIE51bWJlciBvZiB0aW1lcyB0aGUgYW5pbWF0aW9uIHNob3VsZFxyXG4gICAqIHJlcGVhdCBiZWZvcmUgZmluaXNoaW5nLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5ibGVuZE1vZGU9TGF5ZXJCbGVuZE1vZGVzW0RlZmF1bHRMYXllckJsZW5kTW9kZV1dIC0gVHlwZSBvZlxyXG4gICAqIGJsZW5kaW5nIHRoZSBhbmltYXRpb24gc2hvdWxkIHVzZS5cclxuICAgKiBAcGFyYW0ge0FycmF5LjxPYmplY3Q+fSBbb3B0aW9ucy5ibGVuZFN0YXRlT3B0aW9uc10gLSBBcnJheSBvZiBvcHRpb25zIHVzZWQgdG8gY3JlYXRlIHRoZVxyXG4gICAqIGJsZW5kIHN0YXRlcyBmb3IgdGhpcyBjb250YWluZXIuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7RnJlZUJsZW5kU3RhdGV9XHJcbiAgICovXHJcbiAgX2NyZWF0ZUZyZWVCbGVuZFN0YXRlKG9wdGlvbnMpIHtcclxuICAgIGNvbnN0IHtibGVuZFN0YXRlT3B0aW9ucyA9IFtdfSA9IG9wdGlvbnM7XHJcblxyXG4gICAgY29uc3QgYmxlbmRTdGF0ZXMgPSBbXTtcclxuICAgIGJsZW5kU3RhdGVPcHRpb25zLmZvckVhY2goYmxlbmRPcHRpb25zID0+IHtcclxuICAgICAgYmxlbmRTdGF0ZXMucHVzaChcclxuICAgICAgICB0aGlzLl9jcmVhdGVTaW5nbGVTdGF0ZSh7Li4uYmxlbmRPcHRpb25zLCBibGVuZE1vZGU6IG9wdGlvbnMuYmxlbmRNb2RlfSlcclxuICAgICAgKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBuZXcgRnJlZUJsZW5kU3RhdGUob3B0aW9ucywgYmxlbmRTdGF0ZXMpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIGEgbmV3IGluc3RhbmNlIG9mIGEgUXVldWVTdGF0ZS5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gcGFzcyB0byB0aGUgUXVldWVTdGF0ZSBjb25zdHJ1Y3Rvci5cclxuICAgKiBAcGFyYW0ge3N0cmluZz19IG9wdGlvbnMubmFtZSAtIE5hbWUgZm9yIHRoZSBhbmltYXRpb24gc3RhdGUuIE5hbWVzIG11c3QgYmVcclxuICAgKiB1bmlxdWUgZm9yIHRoZSBsYXllciB0aGUgc3RhdGUgaXMgYXBwbGllZCB0by5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMud2VpZ2h0PTBdIC0gVGhlIDAtMSBhbW91bnQgb2YgaW5mbHVlbmNlIHRoZSBzdGF0ZSB3aWxsIGhhdmUuXHJcbiAgICogQHBhcmFtIHtudW1iZXI9fSBvcHRpb25zLnRyYW5zaXRpb25UaW1lIC0gVGhlIGFtb3VudCBvZiB0aW1lIGl0IHRha2VzIHRvIHRyYW5zaXRpb25cclxuICAgKiBiZXR3ZWVuIHF1ZXVlZCBzdGF0ZXMuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmJsZW5kTW9kZT1MYXllckJsZW5kTW9kZXNbRGVmYXVsdExheWVyQmxlbmRNb2RlXV0gLSBUeXBlIG9mXHJcbiAgICogYmxlbmRpbmcgdGhlIGFuaW1hdGlvbiBzaG91bGQgdXNlLlxyXG4gICAqIEBwYXJhbSB7QXJyYXkuPE9iamVjdD59IFtvcHRpb25zLnF1ZXVlT3B0aW9uc10gLSBBcnJheSBvZiBvcHRpb25zIHVzZWQgdG8gY3JlYXRlIHRoZVxyXG4gICAqIHF1ZXVlIHN0YXRlcyBmb3IgdGhpcyBjb250YWluZXIuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7UXVldWVTdGF0ZX1cclxuICAgKi9cclxuICBfY3JlYXRlUXVldWVTdGF0ZShvcHRpb25zKSB7XHJcbiAgICBjb25zdCB7cXVldWVPcHRpb25zID0gW119ID0gb3B0aW9ucztcclxuXHJcbiAgICBjb25zdCBxdWV1ZVN0YXRlcyA9IHF1ZXVlT3B0aW9ucy5tYXAocXVldWVPcHRpb24gPT5cclxuICAgICAgdGhpcy5fY3JlYXRlU2luZ2xlU3RhdGUoe1xyXG4gICAgICAgIHRyYW5zaXRpb25UaW1lOiBvcHRpb25zLnRyYW5zaXRpb25UaW1lLFxyXG4gICAgICAgIC4uLnF1ZXVlT3B0aW9uLFxyXG4gICAgICAgIGJsZW5kTW9kZTogb3B0aW9ucy5ibGVuZE1vZGUsXHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG5cclxuICAgIHJldHVybiBuZXcgUXVldWVTdGF0ZShvcHRpb25zLCBxdWV1ZVN0YXRlcyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gYSBuZXcgaW5zdGFuY2Ugb2YgYSBCbGVuZDFkU3RhdGUuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBPcHRpb25zIHRvIHBhc3MgdG8gdGhlIEJsZW5kMWRTdGF0ZSBjb25zdHJ1Y3Rvci5cclxuICAgKiBAcGFyYW0ge3N0cmluZz19IG9wdGlvbnMubmFtZSAtIE5hbWUgZm9yIHRoZSBhbmltYXRpb24gc3RhdGUuIE5hbWVzIG11c3QgYmVcclxuICAgKiB1bmlxdWUgZm9yIHRoZSBsYXllciB0aGUgc3RhdGUgaXMgYXBwbGllZCB0by5cclxuICAgKiBAcGFyYW0ge3dlaWdodH0gW29wdGlvbnMud2VpZ2h0PTBdIC0gVGhlIDAtMSBhbW91bnQgb2YgaW5mbHVlbmNlIHRoZSBzdGF0ZSB3aWxsIGhhdmUuXHJcbiAgICogQHBhcmFtIHt0aW1lU2NhbGV9IFtvcHRpb25zLnRpbWVTY2FsZT0xXSAtIEZhY3RvciB0byBzY2FsZSB0aGUgcGxheWJhY2sgc3BlZWQgb2YgdGhlXHJcbiAgICogYW5pbWF0aW9uLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5sb29wQ291bnQ9SW5maW5pdHldIC0gTnVtYmVyIG9mIHRpbWVzIHRoZSBhbmltYXRpb24gc2hvdWxkXHJcbiAgICogcmVwZWF0IGJlZm9yZSBmaW5pc2hpbmcuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmJsZW5kTW9kZT1MYXllckJsZW5kTW9kZXNbRGVmYXVsdExheWVyQmxlbmRNb2RlXV0gLSBUeXBlIG9mXHJcbiAgICogYmxlbmRpbmcgdGhlIGFuaW1hdGlvbiBzaG91bGQgdXNlLlxyXG4gICAqIEBwYXJhbSB7QXJyYXkuPE9iamVjdD59IFtvcHRpb25zLmJsZW5kU3RhdGVPcHRpb25zXSAtIEFycmF5IG9mIG9wdGlvbnMgdXNlZCB0byBjcmVhdGUgdGhlXHJcbiAgICogYmxlbmQgc3RhdGVzIGZvciB0aGlzIGNvbnRhaW5lci5cclxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBbb3B0aW9ucy5ibGVuZFRocmVzaG9sZHNdIC0gQXJyYXkgb2YgbnVtYmVycyB1c2VkIHRvIHNldCB0aGVcclxuICAgKiB0aHJlc2hvbGRzIGZvciBlYWNoIGJsZW5kIHN0YXRlIGluIHRoaXMgY29udGFpbmVyLlxyXG4gICAqIEBwYXJhbSB7QXJyYXkuPGJvb2xlYW4+fSBbb3B0aW9ucy5ibGVuZE1hdGNoUGhhc2VzPVtdXSAtIE9wdGlvbmFsIGFycmF5IG9mIGJvb2xlYW5zIHVzZWQgdG9cclxuICAgKiBzZXQgd2hldGhlciBvciBub3QgZWFjaCBibGVuZCBzdGF0ZSBpbiB0aGlzIGNvbnRhaW5lciB3aWxsIG1hdGNoIHBoYXNlcy5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtCbGVuZDFkU3RhdGV9XHJcbiAgICovXHJcbiAgX2NyZWF0ZUJsZW5kMWRTdGF0ZShvcHRpb25zKSB7XHJcbiAgICBjb25zdCB7YmxlbmRTdGF0ZU9wdGlvbnMgPSBbXX0gPSBvcHRpb25zO1xyXG4gICAgY29uc3Qge2JsZW5kVGhyZXNob2xkcyA9IFtdfSA9IG9wdGlvbnM7XHJcbiAgICBjb25zdCB7YmxlbmRNYXRjaFBoYXNlcyA9IFtdfSA9IG9wdGlvbnM7XHJcblxyXG4gICAgY29uc3QgYmxlbmRTdGF0ZXMgPSBbXTtcclxuICAgIGJsZW5kU3RhdGVPcHRpb25zLmZvckVhY2goYmxlbmRPcHRpb25zID0+IHtcclxuICAgICAgYmxlbmRTdGF0ZXMucHVzaChcclxuICAgICAgICB0aGlzLl9jcmVhdGVTaW5nbGVTdGF0ZSh7Li4uYmxlbmRPcHRpb25zLCBibGVuZE1vZGU6IG9wdGlvbnMuYmxlbmRNb2RlfSlcclxuICAgICAgKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBuZXcgQmxlbmQxZFN0YXRlKFxyXG4gICAgICBvcHRpb25zLFxyXG4gICAgICBibGVuZFN0YXRlcyxcclxuICAgICAgYmxlbmRUaHJlc2hvbGRzLFxyXG4gICAgICBibGVuZE1hdGNoUGhhc2VzXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIGEgbmV3IGluc3RhbmNlIG9mIGEgQmxlbmQyZFN0YXRlLlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gT3B0aW9ucyB0byBwYXNzIHRvIHRoZSBCbGVuZDFkU3RhdGUgY29uc3RydWN0b3IuXHJcbiAgICogQHBhcmFtIHtzdHJpbmc9fSBvcHRpb25zLm5hbWUgLSBOYW1lIGZvciB0aGUgYW5pbWF0aW9uIHN0YXRlLiBOYW1lcyBtdXN0IGJlXHJcbiAgICogdW5pcXVlIGZvciB0aGUgbGF5ZXIgdGhlIHN0YXRlIGlzIGFwcGxpZWQgdG8uXHJcbiAgICogQHBhcmFtIHt3ZWlnaHR9IFtvcHRpb25zLndlaWdodD0wXSAtIFRoZSAwLTEgYW1vdW50IG9mIGluZmx1ZW5jZSB0aGUgc3RhdGUgd2lsbCBoYXZlLlxyXG4gICAqIEBwYXJhbSB7dGltZVNjYWxlfSBbb3B0aW9ucy50aW1lU2NhbGU9MV0gLSBGYWN0b3IgdG8gc2NhbGUgdGhlIHBsYXliYWNrIHNwZWVkIG9mIHRoZVxyXG4gICAqIGFuaW1hdGlvbi5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMubG9vcENvdW50PUluZmluaXR5XSAtIE51bWJlciBvZiB0aW1lcyB0aGUgYW5pbWF0aW9uIHNob3VsZFxyXG4gICAqIHJlcGVhdCBiZWZvcmUgZmluaXNoaW5nLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5ibGVuZE1vZGU9TGF5ZXJCbGVuZE1vZGVzW0RlZmF1bHRMYXllckJsZW5kTW9kZV1dIC0gVHlwZSBvZlxyXG4gICAqIGJsZW5kaW5nIHRoZSBhbmltYXRpb24gc2hvdWxkIHVzZS5cclxuICAgKiBAcGFyYW0ge0FycmF5LjxPYmplY3Q+fSBbb3B0aW9ucy5ibGVuZFN0YXRlT3B0aW9uc10gLSBBcnJheSBvZiBvcHRpb25zIHVzZWQgdG8gY3JlYXRlIHRoZVxyXG4gICAqIGJsZW5kIHN0YXRlcyBmb3IgdGhpcyBjb250YWluZXIuXHJcbiAgICogQHBhcmFtIHtBcnJheS48QXJyYXkuPG51bWJlcj4+fSBbb3B0aW9ucy5ibGVuZFRocmVzaG9sZHNdIC0gQXJyYXkgb2YgQXJyYXkgb2YgbnVtYmVycyB1c2VkIHRvIHNldCB0aGVcclxuICAgKiB0aHJlc2hvbGRzIGZvciBlYWNoIGJsZW5kIHN0YXRlIGluIHRoaXMgY29udGFpbmVyLlxyXG4gICAqIEBwYXJhbSB7QXJyYXkuPGJvb2xlYW4+fSBbb3B0aW9ucy5ibGVuZE1hdGNoUGhhc2VzPVtdXSAtIE9wdGlvbmFsIGFycmF5IG9mIGJvb2xlYW5zIHVzZWQgdG9cclxuICAgKiBzZXQgd2hldGhlciBvciBub3QgZWFjaCBibGVuZCBzdGF0ZSBpbiB0aGlzIGNvbnRhaW5lciB3aWxsIG1hdGNoIHBoYXNlcy5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtCbGVuZDFkU3RhdGV9XHJcbiAgICovXHJcbiAgX2NyZWF0ZUJsZW5kMmRTdGF0ZShvcHRpb25zKSB7XHJcbiAgICBjb25zdCB7YmxlbmRTdGF0ZU9wdGlvbnMgPSBbXX0gPSBvcHRpb25zO1xyXG4gICAgY29uc3Qge2JsZW5kVGhyZXNob2xkcyA9IFtdfSA9IG9wdGlvbnM7XHJcbiAgICBjb25zdCB7YmxlbmRNYXRjaFBoYXNlcyA9IFtdfSA9IG9wdGlvbnM7XHJcblxyXG4gICAgY29uc3QgYmxlbmRTdGF0ZXMgPSBbXTtcclxuICAgIGJsZW5kU3RhdGVPcHRpb25zLmZvckVhY2goYmxlbmRPcHRpb25zID0+IHtcclxuICAgICAgYmxlbmRTdGF0ZXMucHVzaChcclxuICAgICAgICB0aGlzLl9jcmVhdGVTaW5nbGVTdGF0ZSh7Li4uYmxlbmRPcHRpb25zLCBibGVuZE1vZGU6IG9wdGlvbnMuYmxlbmRNb2RlfSlcclxuICAgICAgKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBuZXcgQmxlbmQyZFN0YXRlKFxyXG4gICAgICBvcHRpb25zLFxyXG4gICAgICBibGVuZFN0YXRlcyxcclxuICAgICAgYmxlbmRUaHJlc2hvbGRzLFxyXG4gICAgICBibGVuZE1hdGNoUGhhc2VzXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIGEgbmV3IGluc3RhbmNlIG9mIGEgUmFuZG9tQW5pbWF0aW9uU3RhdGUuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBPcHRpb25zIHRvIHBhc3MgdG8gdGhlIFJhbmRvbUFuaW1hdGlvblN0YXRlIGNvbnN0cnVjdG9yLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nPX0gb3B0aW9ucy5uYW1lIC0gTmFtZSBmb3IgdGhlIGFuaW1hdGlvbiBzdGF0ZS4gTmFtZXMgbXVzdCBiZVxyXG4gICAqIHVuaXF1ZSBmb3IgdGhlIGxheWVyIHRoZSBzdGF0ZSBpcyBhcHBsaWVkIHRvLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5wbGF5SW50ZXJ2YWw9M10gLSBUaGUgYmFzZSBhbmltYXRpb24gcGxheWJhY2sgaW50ZXJ2YWwuXHJcbiAgICogQHBhcmFtIHtBcnJheS48T2JqZWN0Pn0gW29wdGlvbnMuc3ViU3RhdGVPcHRpb25zXSAtIEFycmF5IG9mIG9wdGlvbnMgdXNlZCB0byBjcmVhdGUgdGhlXHJcbiAgICogc3ViIHN0YXRlcyBmb3IgdGhpcyBjb250YWluZXIuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7UmFuZG9tQW5pbWF0aW9uU3RhdGV9XHJcbiAgICovXHJcbiAgX2NyZWF0ZVJhbmRvbUFuaW1hdGlvblN0YXRlKG9wdGlvbnMpIHtcclxuICAgIGNvbnN0IHtzdWJTdGF0ZU9wdGlvbnMgPSBbXX0gPSBvcHRpb25zO1xyXG5cclxuICAgIGNvbnN0IHN1YlN0YXRlcyA9IFtdO1xyXG4gICAgc3ViU3RhdGVPcHRpb25zLmZvckVhY2goc3ViU3RhdGVPcHRpb25zID0+IHtcclxuICAgICAgc3ViU3RhdGVzLnB1c2goXHJcbiAgICAgICAgdGhpcy5fY3JlYXRlU2luZ2xlU3RhdGUoe1xyXG4gICAgICAgICAgLi4uc3ViU3RhdGVPcHRpb25zLFxyXG4gICAgICAgICAgYmxlbmRNb2RlOiBvcHRpb25zLmJsZW5kTW9kZSxcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIG5ldyBSYW5kb21BbmltYXRpb25TdGF0ZShvcHRpb25zLCBzdWJTdGF0ZXMpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWFrZSBzdXJlIHRoZSBsYXllciB3aXRoIHRoZSBnaXZlbiBuYW1lIGV4aXN0cyBhbmQgcmV0dXJuIGEgdW5pcXVlIHZlcnNpb25cclxuICAgKiBvZiB0aGUgYW5pbWF0aW9uIG5hbWUgc3VwcGxpZWQgZm9yIHRoYXQgbGF5ZXIuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVyTmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRvIGNoZWNrIGFnYWluc3QuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFuaW1hdGlvbk5hbWUgLSBOYW1lIG9mIHRoZSBhbmltYXRpb24gdG8gdmFsaWRhdGUuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBWYWxpZGF0ZWQgYW5pbWF0aW9uIG5hbWUuXHJcbiAgICovXHJcbiAgX3ZhbGlkYXRlTmV3QW5pbWF0aW9uKGxheWVyTmFtZSwgYW5pbWF0aW9uTmFtZSkge1xyXG4gICAgLy8gTWFrZSBzdXJlIHRoZSBsYXllck5hbWUgaXMgdmFsaWRcclxuICAgIGNvbnN0IGxheWVyID0gdGhpcy5fbGF5ZXJNYXBbbGF5ZXJOYW1lXTtcclxuXHJcbiAgICBpZiAobGF5ZXIgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgYENhbm5vdCBhZGQgYW5pbWF0aW9uIHRvIGxheWVyICR7bGF5ZXJOYW1lfSBmcm9tIGhvc3QgJHt0aGlzLl9ob3N0LmlkfS4gTm8gbGF5ZXIgZXhpc3RzIHdpdGggdGhpcyBuYW1lLmBcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBNYWtlIHN1cmUgdGhlIGFuaW1hdGlvbk5hbWUgaXMgdW5pcXVlXHJcbiAgICBjb25zdCBuYW1lID0gVXRpbHMuZ2V0VW5pcXVlTmFtZShhbmltYXRpb25OYW1lLCBsYXllci5nZXRTdGF0ZU5hbWVzKCkpO1xyXG5cclxuICAgIGlmIChuYW1lICE9PSBhbmltYXRpb25OYW1lKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICBgQW5pbWF0aW9uIG5hbWUgJHthbmltYXRpb25OYW1lfSBpcyBub3QgdW5pcXVlIGZvciBsYXllciAke2xheWVyLm5hbWV9LiBBbmltYXRpb24gd2lsbCBiZSByZW5hbWVkIHRvICR7bmFtZX0uYFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBuYW1lO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyB3aGV0aGVyIG9yIG5vdCBhbGwgYW5pbWF0aW9ucyBhcmUgcGF1c2VkLlxyXG4gICAqXHJcbiAgICogQHJlYWRvbmx5XHJcbiAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICovXHJcbiAgZ2V0IHBhdXNlZCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9wYXVzZWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIGFuIGFycmF5IG9mIG5hbWVzIG9mIGFuaW1hdGlvbiBsYXllcnMuXHJcbiAgICpcclxuICAgKiBAcmVhZG9ubHlcclxuICAgKiBAdHlwZSB7QXJyYXkuPHN0cmluZz59XHJcbiAgICovXHJcbiAgZ2V0IGxheWVycygpIHtcclxuICAgIHJldHVybiB0aGlzLl9sYXllcnMubWFwKGxheWVyID0+IGxheWVyLm5hbWUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlIGFuZCBzdG9yZSBhIG5ldyBhbmltYXRpb24gbGF5ZXIuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gW25hbWU9J05ld0xheWVyJ10gLSBOYW1lIGZvciB0aGUgbGF5ZXIuXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XSAtIE9wdGlvbnMgdG8gcGFzcyB0byB7QGxpbmsgQW5pbWF0aW9uTGF5ZXIjY29uc3RydWN0b3J9XHJcbiAgICogQHBhcmFtIHtpbmRleD19IGluZGV4IC0gSW5kZXggdG8gaW5zZXJ0IHRoZSBuZXcgbGF5ZXIgYXQuIElmIG5vbmUgaXMgcHJvdmlkZWRcclxuICAgKiBpdCB3aWxsIGJlIGFkZGVkIHRvIHRoZSBlbmQgb2YgdGhlIHN0YWNrLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge251bWJlcn0gSW5kZXggb2YgdGhlIG5ldyBsYXllci5cclxuICAgKi9cclxuICBhZGRMYXllcihuYW1lID0gJ05ld0xheWVyJywgb3B0aW9ucyA9IHt9LCBpbmRleCkge1xyXG4gICAgY29uc3QgbnVtTGF5ZXJzID0gdGhpcy5fbGF5ZXJzLmxlbmd0aDtcclxuICAgIGxldCBsYXllckluZGV4ID0gaW5kZXg7XHJcblxyXG4gICAgLy8gTWFrZSBzdXJlIHRoZSBnaXZlbiBpbmRleCBpcyB3aXRoaW4gdGhlIHJhbmdlIG9mIGxheWVyc1xyXG4gICAgaWYgKGluZGV4ID09PSB1bmRlZmluZWQgfHwgaW5kZXggPT09IC0xKSB7XHJcbiAgICAgIGxheWVySW5kZXggPSB0aGlzLl9sYXllcnMubGVuZ3RoO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbGF5ZXJJbmRleCA9IHRoaXMuX3ZhbGlkYXRlSW5kZXgoaW5kZXgsIGZhbHNlKTtcclxuXHJcbiAgICAgIGlmIChsYXllckluZGV4ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAvLyBJbnNlcnQgYXQgdGhlIGJlZ2lubmluZyBpZiB0aGUgdXNlciBwYXNzZWQgaW4gYSBuZWdhdGl2ZSBpbmRleFxyXG4gICAgICAgIGlmIChpbmRleCA8IDApIHtcclxuICAgICAgICAgIGxheWVySW5kZXggPSAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBPdGhlcndpc2UgYXBwZW5kIHRvIHRoZSBlbmRcclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGxheWVySW5kZXggPSB0aGlzLl9sYXllcnMubGVuZ3RoO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgICAgYEluZGV4ICR7aW5kZXh9IGlzIGludmFsaWQgZm9yIGhvc3QgJHt0aGlzLl9ob3N0LmlkfS4gTmV3IGxheWVyIHdpbGwgYmUgYWRkZWQgYXQgdGhlIGNsb3Nlc3QgdmFsaWQgaW5kZXg6ICR7bGF5ZXJJbmRleH0uYFxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBNYWtlIHN1cmUgdGhlIGxheWVyIG5hbWUgaXMgdW5pcXVlXHJcbiAgICBjb25zdCBsYXllck5hbWUgPSBVdGlscy5nZXRVbmlxdWVOYW1lKG5hbWUsIE9iamVjdC5rZXlzKHRoaXMuX2xheWVyTWFwKSk7XHJcblxyXG4gICAgaWYgKG5hbWUgIT09IGxheWVyTmFtZSkge1xyXG4gICAgICBjb25zb2xlLndhcm4oXHJcbiAgICAgICAgYExheWVyIG5hbWUgJHtuYW1lfSBpcyBub3QgdW5pcXVlLiBOZXcgbGF5ZXIgd2lsbCBiZSBhZGRlZCB3aXRoIHRoZSBuYW1lICR7bGF5ZXJOYW1lfS5gXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgbGF5ZXIgPSBuZXcgQW5pbWF0aW9uTGF5ZXIoey4uLm9wdGlvbnMsIG5hbWU6IGxheWVyTmFtZX0pO1xyXG4gICAgdGhpcy5fbGF5ZXJNYXBbbGF5ZXJOYW1lXSA9IGxheWVyO1xyXG5cclxuICAgIGlmIChsYXllckluZGV4ID09PSBudW1MYXllcnMpIHtcclxuICAgICAgdGhpcy5fbGF5ZXJzLnB1c2gobGF5ZXIpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fbGF5ZXJzLnNwbGljZShsYXllckluZGV4LCAwLCBsYXllcik7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gTm90aWZ5IHRoYXQgYSBsYXllciBoYXMgYmVlbiBhZGRlZCB0byB0aGUgZmVhdHVyZVxyXG4gICAgY29uc3QgZXZlbnREYXRhID0ge25hbWU6IGxheWVyTmFtZSwgaW5kZXg6IGxheWVySW5kZXh9O1xyXG4gICAgdGhpcy5lbWl0KHRoaXMuY29uc3RydWN0b3IuRVZFTlRTLmFkZExheWVyLCBldmVudERhdGEpO1xyXG5cclxuICAgIHJldHVybiBldmVudERhdGE7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZW1vdmUgYW4gYW5pbWF0aW9uIGxheWVyIGZyb20gdGhlIHN0YWNrLiBBbmltYXRpb25zIG9uIHRoaXMgbGF5ZXIgd2lsbCBub1xyXG4gICAqIGxvbmdlciBiZSBldmFsdWF0ZWQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIE5hbWUgZm9yIHRoZSBsYXllciB0byByZW1vdmUuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciBvciBub3QgcmVtb3ZhbCB3YXMgc3VjY2Vzc2Z1bC5cclxuICAgKi9cclxuICByZW1vdmVMYXllcihuYW1lKSB7XHJcbiAgICBjb25zdCBsYXllciA9IHRoaXMuX2xheWVyTWFwW25hbWVdO1xyXG5cclxuICAgIGlmIChsYXllciA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICBgRGlkIG5vdCByZW1vdmUgbGF5ZXIgJHtuYW1lfSBmcm9tIGhvc3QgJHt0aGlzLl9ob3N0LmlkfS4gTm8gbGF5ZXIgZXhpc3RzIHdpdGggdGhpcyBuYW1lLmBcclxuICAgICAgKTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGxheWVyLmRpc2NhcmQoKTtcclxuXHJcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuX2xheWVycy5pbmRleE9mKGxheWVyKTtcclxuICAgIHRoaXMuX2xheWVycy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgZGVsZXRlIHRoaXMuX2xheWVyTWFwW25hbWVdO1xyXG5cclxuICAgIC8vIE5vdGlmeSB0aGF0IGEgbGF5ZXIgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIHRoZSBmZWF0dXJlXHJcbiAgICB0aGlzLmVtaXQodGhpcy5jb25zdHJ1Y3Rvci5FVkVOVFMucmVtb3ZlTGF5ZXIsIHtuYW1lLCBpbmRleH0pO1xyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmUtb3JkZXIgdGhlIGxheWVyIHN0YWNrIHNvIHRoYXQgdGhlIGxheWVyIHdpdGggdGhlIGdpdmVuIG5hbWUgaXMgcG9zaXRpb25lZFxyXG4gICAqIGF0IHRoZSBnaXZlbiBpbmRleC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gTmFtZSBvZiB0aGUgbGF5ZXIgdG8gbW92ZS5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXggLSBOZXcgaW5kZXggdG8gcG9zaXRpb24gdGhlIGxheWVyIGF0LlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge251bWJlcn0gVGhlIG5ldyBpbmRleCBvZiB0aGUgbGF5ZXJcclxuICAgKi9cclxuICBtb3ZlTGF5ZXIobmFtZSwgaW5kZXgpIHtcclxuICAgIC8vIE1ha2Ugc3VyZSB0aGUgbmFtZSBpcyB2YWxpZFxyXG4gICAgY29uc3QgbGF5ZXIgPSB0aGlzLl9sYXllck1hcFtuYW1lXTtcclxuXHJcbiAgICBpZiAobGF5ZXIgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgYENhbm5vdCBtb3ZlIGxheWVyICR7bmFtZX0gZnJvbSBob3N0ICR7dGhpcy5faG9zdC5pZH0uIE5vIGxheWVyIGV4aXN0cyB3aXRoIHRoaXMgbmFtZS5gXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gTWFrZSBzdXJlIHRoZSBpbmRleCBmYWxscyBpbiB0aGUgcmFuZ2Ugb2YgZXhpc3RpbmcgbGF5ZXJzXHJcbiAgICBjb25zdCBsYXllckluZGV4ID0gdGhpcy5fdmFsaWRhdGVJbmRleChpbmRleCwgdHJ1ZSk7XHJcbiAgICBjb25zdCBsYXN0SW5kZXggPSB0aGlzLl9sYXllcnMubGVuZ3RoIC0gMTtcclxuXHJcbiAgICBpZiAobGF5ZXJJbmRleCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgQ2Fubm90IG1vdmUgbGF5ZXIgJHtuYW1lfSBmcm9tIGhvc3QgJHt0aGlzLl9ob3N0LmlkfSB0byBpbmRleCAke2luZGV4fS4gSW5kZXggbXVzdCBiZSBpbiB0aGUgMCAtICR7bGFzdEluZGV4fSByYW5nZS5gXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgY3VycmVudEluZGV4ID0gdGhpcy5fbGF5ZXJzLmluZGV4T2YobGF5ZXIpO1xyXG4gICAgaWYgKGN1cnJlbnRJbmRleCA9PT0gbGF5ZXJJbmRleCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUmVtb3ZlIGZyb20gdGhlIGN1cnJlbnQgcG9zaXRpb25cclxuICAgIHRoaXMuX2xheWVycy5zcGxpY2UoY3VycmVudEluZGV4LCAxKTtcclxuXHJcbiAgICAvLyBJbnNlcnQgYXQgdGhlIG5ldyBwb3NpdGlvblxyXG4gICAgaWYgKGxheWVySW5kZXggPT09IGxhc3RJbmRleCkge1xyXG4gICAgICB0aGlzLl9sYXllcnMucHVzaChsYXllcik7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9sYXllcnMuc3BsaWNlKGxheWVySW5kZXgsIDAsIGxheWVyKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbGF5ZXJJbmRleDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZSB0aGUgbmFtZSBvZiBhIGxheWVyLiBOYW1lcyBtdXN0IGJlIHVuaXF1ZSwgaWYgdGhlIG5ldyBuYW1lIGlzIG5vdFxyXG4gICAqIHVuaXF1ZSBpdCB3aWxsIGhhdmUgdHJhaWxpbmcgbnVtYmVycyBhcHBlbmRlZCB1bnRpbCBpdCBpcyB1bmlxdWUuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gY3VycmVudE5hbWUgLSBDdXJyZW50IG5hbWUgb2YgdGhlIGxheWVyLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuZXdOYW1lIC0gTmV3IG5hbWUgdG8gc2V0IG9uIHRoZSBsYXllci5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBuZXcgbmFtZSBvZiB0aGUgbGF5ZXJcclxuICAgKi9cclxuICByZW5hbWVMYXllcihjdXJyZW50TmFtZSwgbmV3TmFtZSkge1xyXG4gICAgLy8gTWFrZSBzdXJlIHRoZSBuYW1lIGlzIHZhbGlkXHJcbiAgICBjb25zdCBsYXllciA9IHRoaXMuX2xheWVyTWFwW2N1cnJlbnROYW1lXTtcclxuXHJcbiAgICBpZiAobGF5ZXIgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgYENhbm5vdCByZW5hbWUgbGF5ZXIgJHtjdXJyZW50TmFtZX0gZnJvbSBob3N0ICR7dGhpcy5faG9zdC5pZH0uIE5vIGxheWVyIGV4aXN0cyB3aXRoIHRoaXMgbmFtZS5gXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gTWFrZSBzdXJlIHRoZSBsYXllciBuYW1lIGlzIHVuaXF1ZVxyXG4gICAgY29uc3QgbmFtZSA9IFV0aWxzLmdldFVuaXF1ZU5hbWUobmV3TmFtZSwgT2JqZWN0LmtleXModGhpcy5fbGF5ZXJNYXApKTtcclxuXHJcbiAgICBpZiAobmFtZSAhPT0gbmV3TmFtZSkge1xyXG4gICAgICBjb25zb2xlLndhcm4oXHJcbiAgICAgICAgYExheWVyIG5hbWUgJHtuZXdOYW1lfSBpcyBub3QgdW5pcXVlLiBMYXllciB3aWxsIGJlIHJlbmFtZWQgdG8gJHtuYW1lfS5gXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgZGVsZXRlIHRoaXMuX2xheWVyTWFwW2N1cnJlbnROYW1lXTtcclxuICAgIHRoaXMuX2xheWVyTWFwW25hbWVdID0gbGF5ZXI7XHJcbiAgICBsYXllci5uYW1lID0gbmFtZTtcclxuXHJcbiAgICAvLyBOb3RpZnkgdGhhdCBhIGxheWVyIGhhcyBiZWVuIHJlbmFtZWQgb24gdGhlIGZlYXR1cmVcclxuICAgIHRoaXMuZW1pdCh0aGlzLmNvbnN0cnVjdG9yLkVWRU5UUy5yZW5hbWVMYXllciwge1xyXG4gICAgICBvbGROYW1lOiBjdXJyZW50TmFtZSxcclxuICAgICAgbmV3TmFtZTogbmFtZSxcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBuYW1lO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIHRoZSB3ZWlnaHQgb2YgYW4gYW5pbWF0aW9uIGxheWVyLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBOYW1lIG9mIHRoZSBsYXllciB0byByZXR1cm4gd2VpZ2h0IGZyb20uXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxyXG4gICAqL1xyXG4gIGdldExheWVyV2VpZ2h0KG5hbWUpIHtcclxuICAgIC8vIE1ha2Ugc3VyZSB0aGUgbmFtZSBpcyB2YWxpZFxyXG4gICAgY29uc3QgbGF5ZXIgPSB0aGlzLl9sYXllck1hcFtuYW1lXTtcclxuXHJcbiAgICBpZiAobGF5ZXIgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgYENhbm5vdCBnZXQgd2VpZ2h0IG9uIGxheWVyICR7bmFtZX0gZnJvbSBob3N0ICR7dGhpcy5faG9zdC5pZH0uIE5vIGxheWVyIGV4aXN0cyB3aXRoIHRoaXMgbmFtZS5gXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGxheWVyLndlaWdodDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZSB0aGUgd2VpZ2h0IG9mIGFuIGFuaW1hdGlvbiBsYXllci5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGxheWVyIHRvIHVwZGF0ZS5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gd2VpZ2h0IC0gVGhlIHdlaWdodCB2YWx1ZSB0byBzZXQgb24gdGhlIGxheWVyLiBUaGlzIG51bWJlclxyXG4gICAqIHNob3VsZCBiZSBpbiB0aGUgMC0xIHJhbmdlLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyPX0gc2Vjb25kcyAtIFRoZSBudW1iZXIgb2Ygc2Vjb25kcyBpdCBzaG91bGQgdGFrZSB0byByZWFjaCB0aGVcclxuICAgKiBuZXcgd2VpZ2h0LiBEZWZhdWx0IGlzIHplcm8gYW5kIHdpbGwgc2V0IGltbWVkaWF0ZWx5LlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBlYXNpbmdGbiAtIFRoZSBlYXNpbmcgZnVuY3Rpb24gdG8gdXNlIHdoaWxlIGludGVycG9sYXRpbmdcclxuICAgKiB0aGUgd2VpZ2h0LiBEZWZhdWx0IGlzIEVhc2luZy5MaW5lYXIuSW5PdXQuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7RGVmZXJyZWR9IEEgcHJvbWlzZSB0aGF0IHdpbGwgcmVzb2x2ZSBvbmNlIHRoZSBsYXllcidzIHdlaWdodCByZWFjaGVzXHJcbiAgICogdGhlIHRhcmdldCB2YWx1ZS5cclxuICAgKi9cclxuICBzZXRMYXllcldlaWdodChuYW1lLCB3ZWlnaHQsIHNlY29uZHMsIGVhc2luZ0ZuKSB7XHJcbiAgICAvLyBNYWtlIHN1cmUgdGhlIG5hbWUgaXMgdmFsaWRcclxuICAgIGNvbnN0IGxheWVyID0gdGhpcy5fbGF5ZXJNYXBbbmFtZV07XHJcblxyXG4gICAgaWYgKGxheWVyID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgY29uc3QgZSA9IGBDYW5ub3Qgc2V0IHdlaWdodCBvbiBsYXllciAke25hbWV9IGZyb20gaG9zdCAke3RoaXMuX2hvc3QuaWR9LiBObyBsYXllciBleGlzdHMgd2l0aCB0aGlzIG5hbWUuYDtcclxuICAgICAgcmV0dXJuIERlZmVycmVkLnJlamVjdChlKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbGF5ZXIuc2V0V2VpZ2h0KHdlaWdodCwgc2Vjb25kcywgZWFzaW5nRm4pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgbmFtZXMgb2YgYmxlbmQgc3RhdGVzIGluIGFuIGFuaW1hdGlvbiBpbiBhIGxheWVyLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVyTmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIGNvbnRhaW5pbmcgdGhlIGFuaW1hdGlvbiBjb250YWluaW5nXHJcbiAgICogdGhlIGJsZW5kIHN0YXRlIHRvIHVwZGF0ZS5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gYW5pbWF0aW9uTmFtZSAtIE5hbWUgb2YgdGhlIGFuaW1hdGlvbiBjb250YWluaW5nIHRoZSBibGVuZCBzdGF0ZVxyXG4gICAqIHRvIHVwZGF0ZS5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtBcnJheS48c3RyaW5nPn0gLSBOYW1lcyBvZiBibGVuZCBzdGF0ZXMuXHJcbiAgICovXHJcbiAgZ2V0QW5pbWF0aW9uQmxlbmROYW1lcyhsYXllck5hbWUsIGFuaW1hdGlvbk5hbWUpIHtcclxuICAgIGNvbnN0IGxheWVyID0gdGhpcy5fbGF5ZXJNYXBbbGF5ZXJOYW1lXTtcclxuXHJcbiAgICBpZiAobGF5ZXIgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgYENhbm5vdCBnZXQgYmxlbmQgbmFtZXMgb24gbGF5ZXIgJHtsYXllck5hbWV9IGZyb20gaG9zdCAke3RoaXMuX2hvc3QuaWR9LiBObyBsYXllciBleGlzdHMgd2l0aCB0aGlzIG5hbWUuYFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBsYXllci5nZXRBbmltYXRpb25CbGVuZE5hbWVzKGFuaW1hdGlvbk5hbWUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlIHRoZSB3ZWlnaHQgZm9yIGEgYmxlbmQgc3RhdGUgaW4gYW4gYW5pbWF0aW9uIGluIGEgbGF5ZXIuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGF5ZXJOYW1lIC0gTmFtZSBvZiB0aGUgbGF5ZXIgY29udGFpbmluZyB0aGUgYW5pbWF0aW9uIGNvbnRhaW5pbmdcclxuICAgKiB0aGUgYmxlbmQgc3RhdGUgdG8gdXBkYXRlLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhbmltYXRpb25OYW1lIC0gTmFtZSBvZiB0aGUgYW5pbWF0aW9uIGNvbnRhaW5pbmcgdGhlIGJsZW5kIHN0YXRlXHJcbiAgICogdG8gdXBkYXRlLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBibGVuZE5hbWUgLSBOYW1lIG9mIHRoZSBibGVuZCBzdGF0ZSB0byB1cGRhdGUuXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IHdlaWdodCAtIFdlaWdodCB2YWx1ZSB0byBzZXQgb24gdGhlIGFuaW1hdGlvbi4gVGhpcyBudW1iZXIgc2hvdWRsZCBiZVxyXG4gICAqIGluIHRoZSAwLTEgcmFuZ2UuXHJcbiAgICogQHBhcmFtIHtudW1iZXI9fSBzZWNvbmRzIC0gTnVtYmVyIG9mIHNlY29uZHMgaXQgc2hvdWxkIHRha2UgdG8gcmVhY2ggdGhlIG5ldyB3ZWlnaHQuXHJcbiAgICogRGVmYXVsdCBpcyB6ZXJvIGFuZCB3aWxsIHNldCBpbW1lZGlhdGVseS5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gZWFzaW5nRm4gLSBFYXNpbmcgZnVuY3Rpb24gdG8gdXNlIHdoaWxlIGludGVycG9sYXRpbmcgdGhlIG5ld1xyXG4gICAqIHdlaWdodC4gRGVmYXVsdCBpcyBFYXNpbmcuTGluZWFyLkluT3V0LlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0RlZmVycmVkfSAtIFByb21pc2UgdGhhdCB3aWxsIHJlc29sdmUgb25jZSB0aGUgYW5pbWF0aW9uJ3Mgd2VpZ2h0IHJlYWNoZXNcclxuICAgKiB0aGUgdGFyZ2V0IHZhbHVlLlxyXG4gICAqL1xyXG4gIHNldEFuaW1hdGlvbkJsZW5kV2VpZ2h0KFxyXG4gICAgbGF5ZXJOYW1lLFxyXG4gICAgYW5pbWF0aW9uTmFtZSxcclxuICAgIGJsZW5kTmFtZSxcclxuICAgIHdlaWdodCxcclxuICAgIHNlY29uZHMsXHJcbiAgICBlYXNpbmdGblxyXG4gICkge1xyXG4gICAgY29uc3QgbGF5ZXIgPSB0aGlzLl9sYXllck1hcFtsYXllck5hbWVdO1xyXG5cclxuICAgIGlmIChsYXllciA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGNvbnN0IGUgPSBgQ2Fubm90IHNldCBibGVuZCB3ZWlnaHQgb24gbGF5ZXIgJHtsYXllck5hbWV9IGZyb20gaG9zdCAke3RoaXMuX2hvc3QuaWR9LiBObyBsYXllciBleGlzdHMgd2l0aCB0aGlzIG5hbWUuYDtcclxuICAgICAgcmV0dXJuIERlZmVycmVkLnJlamVjdChlKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbGF5ZXIuc2V0QW5pbWF0aW9uQmxlbmRXZWlnaHQoXHJcbiAgICAgIGFuaW1hdGlvbk5hbWUsXHJcbiAgICAgIGJsZW5kTmFtZSxcclxuICAgICAgd2VpZ2h0LFxyXG4gICAgICBzZWNvbmRzLFxyXG4gICAgICBlYXNpbmdGblxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdGhlIHdlaWdodCBmb3IgYSBibGVuZCBzdGF0ZSBpbiBhbiBhbmltYXRpb24gaW4gYSBsYXllci5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllck5hbWUgLSBOYW1lIG9mIHRoZSBsYXllciBjb250YWluaW5nIHRoZSBhbmltYXRpb24gY29udGFpbmluZ1xyXG4gICAqIHRoZSBibGVuZCBzdGF0ZSB0byB1cGRhdGUuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFuaW1hdGlvbk5hbWUgLSBOYW1lIG9mIHRoZSBhbmltYXRpb24gY29udGFpbmluZyB0aGUgYmxlbmQgc3RhdGVcclxuICAgKiB0byB1cGRhdGUuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGJsZW5kTmFtZSAtIE5hbWUgb2YgdGhlIGJsZW5kIHN0YXRlIHRvIHVwZGF0ZS5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IC0gV2VpZ2h0IG9mIHRoZSBibGVuZCBzdGF0ZS5cclxuICAgKi9cclxuICBnZXRBbmltYXRpb25CbGVuZFdlaWdodChsYXllck5hbWUsIGFuaW1hdGlvbk5hbWUsIGJsZW5kTmFtZSkge1xyXG4gICAgY29uc3QgbGF5ZXIgPSB0aGlzLl9sYXllck1hcFtsYXllck5hbWVdO1xyXG5cclxuICAgIGlmIChsYXllciA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgQ2Fubm90IGdldCBibGVuZCB3ZWlnaHQgb24gbGF5ZXIgJHtsYXllck5hbWV9IGZyb20gaG9zdCAke3RoaXMuX2hvc3QuaWR9LiBObyBsYXllciBleGlzdHMgd2l0aCB0aGlzIG5hbWUuYFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBsYXllci5nZXRBbmltYXRpb25CbGVuZFdlaWdodChhbmltYXRpb25OYW1lLCBibGVuZE5hbWUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUGF1c2Ugd2VpZ2h0IGludGVycG9sYXRpb24gYW5pbWF0aW9uIG9uIGEgbGF5ZXIgd2l0aCB0aGUgZ2l2ZW4gbmFtZS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gTmFtZSBvZiB0aGUgbGF5ZXIgdG8gcGF1c2UuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSBXaGV0aGVyIG9yIG5vdCB0aGVyZSB3YXMgYW4gZXhpc3RpbmcgaW50ZXJwb2xhdGlvbiB0byBwYXVzZS5cclxuICAgKi9cclxuICBwYXVzZUxheWVyV2VpZ2h0KG5hbWUpIHtcclxuICAgIC8vIE1ha2Ugc3VyZSB0aGUgbmFtZSBpcyB2YWxpZFxyXG4gICAgY29uc3QgbGF5ZXIgPSB0aGlzLl9sYXllck1hcFtuYW1lXTtcclxuXHJcbiAgICBpZiAobGF5ZXIgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgYENhbm5vdCBwYXVzZSB3ZWlnaHQgaW50ZXJwb2xhdGlvbiBvbiBsYXllciAke25hbWV9IGZyb20gaG9zdCAke3RoaXMuX2hvc3QuaWR9LiBObyBsYXllciBleGlzdHMgd2l0aCB0aGlzIG5hbWUuYFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBsYXllci5wYXVzZVdlaWdodCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVzdW1lIHdlaWdodCBpbnRlcnBvbGF0aW9uIGFuaW1hdGlvbiBvbiBhIGxheWVyIHdpdGggdGhlIGdpdmVuIG5hbWUuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRvIHJlc3VtZS5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtEZWZlcnJlZH0gLSBSZXNvbHZlcyBvbmNlIHRoZSBsYXllcidzIHdlaWdodCByZWFjaGVzIGl0cyB0YXJnZXQgdmFsdWUuXHJcbiAgICovXHJcbiAgcmVzdW1lTGF5ZXJXZWlnaHQobmFtZSkge1xyXG4gICAgLy8gTWFrZSBzdXJlIHRoZSBuYW1lIGlzIHZhbGlkXHJcbiAgICBjb25zdCBsYXllciA9IHRoaXMuX2xheWVyTWFwW25hbWVdO1xyXG5cclxuICAgIGlmIChsYXllciA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGNvbnN0IGUgPSBgQ2Fubm90IHJlc3VtZSB3ZWlnaHQgaW50ZXJwb2xhdGlvbiBvbiBsYXllciAke25hbWV9IGZyb20gaG9zdCAke3RoaXMuX2hvc3QuaWR9LiBObyBsYXllciBleGlzdHMgd2l0aCB0aGlzIG5hbWUuYDtcclxuICAgICAgcmV0dXJuIERlZmVycmVkLnJlamVjdChlKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbGF5ZXIucmVzdW1lV2VpZ2h0KCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQYXVzZSBjdXJyZW50IGFuaW1hdGlvbiBhbmQgd2VpZ2h0IGludGVycG9sYXRpb24gYW5pbWF0aW9uIG9uIGEgbGF5ZXIgd2l0aFxyXG4gICAqIHRoZSBnaXZlbiBuYW1lLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBOYW1lIG9mIHRoZSBsYXllciB0byBwYXVzZS5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtib29sZWFufSAtIFdoZXRoZXIgb3Igbm90IHRoZXJlIHdhcyBhbiBleGlzdGluZyBpbnRlcnBvbGF0aW9uIG9yXHJcbiAgICogY3VycmVudCBhbmltYXRpb24gdG8gcGF1c2UuXHJcbiAgICovXHJcbiAgcGF1c2VMYXllcihuYW1lKSB7XHJcbiAgICAvLyBNYWtlIHN1cmUgdGhlIG5hbWUgaXMgdmFsaWRcclxuICAgIGNvbnN0IGxheWVyID0gdGhpcy5fbGF5ZXJNYXBbbmFtZV07XHJcblxyXG4gICAgaWYgKGxheWVyID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgIGBDYW5ub3QgcGF1c2UgbGF5ZXIgJHtuYW1lfSBmcm9tIGhvc3QgJHt0aGlzLl9ob3N0LmlkfS4gTm8gbGF5ZXIgZXhpc3RzIHdpdGggdGhpcyBuYW1lLmBcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbGF5ZXIucGF1c2UoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlc3VtZSBjdXJyZW50IGFuaW1hdGlvbiBhbmQgd2VpZ2h0IGludGVycG9sYXRpb24gYW5pbWF0aW9uIG9uIGEgbGF5ZXIgd2l0aFxyXG4gICAqIHRoZSBnaXZlbiBuYW1lLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBOYW1lIG9mIHRoZSBsYXllciB0byByZXN1bWUuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7RGVmZXJyZWR9IC0gUmVzb2x2ZXMgb25jZSB0aGUgbGF5ZXIncyB3ZWlnaHQgcmVhY2hlcyBpdHMgdGFyZ2V0IHZhbHVlXHJcbiAgICogYW5kIGl0J3MgY3VycmVudCBhbmltYXRpb24gZmluaXNoZXMgcGxheWluZy5cclxuICAgKi9cclxuICByZXN1bWVMYXllcihuYW1lKSB7XHJcbiAgICAvLyBNYWtlIHN1cmUgdGhlIG5hbWUgaXMgdmFsaWRcclxuICAgIGNvbnN0IGxheWVyID0gdGhpcy5fbGF5ZXJNYXBbbmFtZV07XHJcblxyXG4gICAgaWYgKGxheWVyID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgY29uc3QgZSA9IGBDYW5ub3QgcmVzdW1lIGxheWVyICR7bmFtZX0gZnJvbSBob3N0ICR7dGhpcy5faG9zdC5pZH0uIE5vIGxheWVyIGV4aXN0cyB3aXRoIHRoaXMgbmFtZS5gO1xyXG4gICAgICByZXR1cm4gRGVmZXJyZWQucmVqZWN0KGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBsYXllci5yZXN1bWUoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiB3aGV0aGVyIG9yIG5vdCB0aGUgYW5pbWF0aW9uIGxheWVyIHdpdGggdGhlIGdpdmVuIG5hbWUgaXMgY3VycmVudGx5XHJcbiAgICogdHJhbnNpdGlvbmluZyBiZXR3ZWVuIGFuaW1hdGlvbnMuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGF5ZXJOYW1lIC0gTmFtZSBvZiB0aGUgbGF5ZXIgdG8gY2hlY2suXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuICAgKi9cclxuICBnZXRUcmFuc2l0aW9uaW5nKGxheWVyTmFtZSkge1xyXG4gICAgLy8gTWFrZSBzdXJlIHRoZSBsYXllck5hbWUgaXMgdmFsaWRcclxuICAgIGNvbnN0IGxheWVyID0gdGhpcy5fbGF5ZXJNYXBbbGF5ZXJOYW1lXTtcclxuXHJcbiAgICBpZiAobGF5ZXIgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgYEdldCB0cmFuc2l0aW9uaW5nIG9uIGxheWVyICR7bGF5ZXJOYW1lfSBmcm9tIGhvc3QgJHt0aGlzLl9ob3N0LmlkfS4gTm8gbGF5ZXIgZXhpc3RzIHdpdGggdGhpcyBuYW1lLmBcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbGF5ZXIuaXNUcmFuc2l0aW9uaW5nO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIGFuIGFycmF5IG9mIHRoZSBuYW1lcyBvZiBhbGwgc3RhdGVzIHRoZSBsYXllciB3aXRoIHRoZSBnaXZlbiBuYW1lIGNvbnRyb2xzLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVyTmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRvIHNlYXJjaC5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtBcnJheS48c3RyaW5nPn1cclxuICAgKi9cclxuICBnZXRBbmltYXRpb25zKGxheWVyTmFtZSkge1xyXG4gICAgLy8gTWFrZSBzdXJlIHRoZSBsYXllck5hbWUgaXMgdmFsaWRcclxuICAgIGNvbnN0IGxheWVyID0gdGhpcy5fbGF5ZXJNYXBbbGF5ZXJOYW1lXTtcclxuXHJcbiAgICBpZiAobGF5ZXIgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgYEdldCBhbmltYXRpb25zIG9uIGxheWVyICR7bGF5ZXJOYW1lfSBmcm9tIGhvc3QgJHt0aGlzLl9ob3N0LmlkfS4gTm8gbGF5ZXIgZXhpc3RzIHdpdGggdGhpcyBuYW1lLmBcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbGF5ZXIuZ2V0U3RhdGVOYW1lcygpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIHRoZSBuYW1lIG9mIHRoZSBzdGF0ZSBjdXJyZW50bHkgYWN0aXZlIG9uIHRoZSBsYXllciB3aXRoIHRoZSBnaXZlbiBuYW1lLlxyXG4gICAqIFJldHVybiBudWxsIGlmIHRoZXJlIGlzIG5vIGN1cnJlbnQgYW5pbWF0aW9uIGZvciB0aGUgbGF5ZXIuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGF5ZXJOYW1lIC0gTmFtZSBvZiB0aGUgbGF5ZXIuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7KHN0cmluZ3xudWxsKX1cclxuICAgKi9cclxuICBnZXRDdXJyZW50QW5pbWF0aW9uKGxheWVyTmFtZSkge1xyXG4gICAgLy8gTWFrZSBzdXJlIHRoZSBsYXllck5hbWUgaXMgdmFsaWRcclxuICAgIGNvbnN0IGxheWVyID0gdGhpcy5fbGF5ZXJNYXBbbGF5ZXJOYW1lXTtcclxuXHJcbiAgICBpZiAobGF5ZXIgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgYEdldCBjdXJyZW50IGFuaW1hdGlvbiBvbiBsYXllciAke2xheWVyTmFtZX0gZnJvbSBob3N0ICR7dGhpcy5faG9zdC5pZH0uIE5vIGxheWVyIGV4aXN0cyB3aXRoIHRoaXMgbmFtZS5gXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGxheWVyLmN1cnJlbnRBbmltYXRpb247XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gd2hldGhlciBvciBub3QgYSBsYXllciB3aXRoIHRoZSBnaXZlbiBuYW1lIGlzIGN1cnJlbnRseSBwbGF5aW5nIGFuXHJcbiAgICogYW5pbWF0aW9uIGFuZCB0aGF0IGFuaW1hdGlvbiBpcyBwYXVzZWQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGF5ZXJOYW1lIC0gTmFtZSBvZiB0aGUgbGF5ZXIuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuICAgKi9cclxuICBnZXRQYXVzZWQobGF5ZXJOYW1lKSB7XHJcbiAgICAvLyBNYWtlIHN1cmUgdGhlIGxheWVyTmFtZSBpcyB2YWxpZFxyXG4gICAgY29uc3QgbGF5ZXIgPSB0aGlzLl9sYXllck1hcFtsYXllck5hbWVdO1xyXG5cclxuICAgIGlmIChsYXllciA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgR2V0IHBhdXNlZCBvbiBsYXllciAke2xheWVyTmFtZX0gZnJvbSBob3N0ICR7dGhpcy5faG9zdC5pZH0uIE5vIGxheWVyIGV4aXN0cyB3aXRoIHRoaXMgbmFtZS5gXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGxheWVyLmN1cnJlbnRTdGF0ZSAmJiBsYXllci5jdXJyZW50U3RhdGUucGF1c2VkO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIHRoZSB0eXBlIG5hbWUgb2YgdGhlIGdpdmVuIGFuaW1hdGlvbi4gQHNlZSBBbmltYXRpb25UeXBlcy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllck5hbWUgLSBOYW1lIG9mIHRoZSBsYXllciB0aGF0IGNvbnRhaW5zIHRoZSBhbmltYXRpb24uXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFuaW1hdGlvbk5hbWUgLSBOYW1lIG9mIHRoZSBhbmltYXRpb24gdG8gY2hlY2suXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxyXG4gICAqL1xyXG4gIGdldEFuaW1hdGlvblR5cGUobGF5ZXJOYW1lLCBhbmltYXRpb25OYW1lKSB7XHJcbiAgICAvLyBNYWtlIHN1cmUgdGhlIGxheWVyTmFtZSBpcyB2YWxpZFxyXG4gICAgY29uc3QgbGF5ZXIgPSB0aGlzLl9sYXllck1hcFtsYXllck5hbWVdO1xyXG5cclxuICAgIGlmIChsYXllciA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgR2V0IGFuaW1hdGlvbiB0eXBlIG9uIGxheWVyICR7bGF5ZXJOYW1lfSBmcm9tIGhvc3QgJHt0aGlzLl9ob3N0LmlkfS4gTm8gbGF5ZXIgZXhpc3RzIHdpdGggdGhpcyBuYW1lLmBcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBzdGF0ZSA9IGxheWVyLmdldFN0YXRlKGFuaW1hdGlvbk5hbWUpO1xyXG5cclxuICAgIGlmIChzdGF0ZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgR2V0IGFuaW1hdGlvbiB0eXBlIGZvciBhbmltYXRpb24gJHthbmltYXRpb25OYW1lfSBvbiBsYXllciAke2xheWVyTmFtZX0gZnJvbSBob3N0ICR7dGhpcy5faG9zdC5pZH0uIE5vIGFuaW1hdGlvbiBleGlzdHMgd2l0aCB0aGlzIG5hbWUuYFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHtjb25zdHJ1Y3Rvcn0gPSBzdGF0ZTtcclxuXHJcbiAgICByZXR1cm4gT2JqZWN0LmtleXMoQW5pbWF0aW9uVHlwZXMpLmZpbmQoXHJcbiAgICAgIHR5cGVOYW1lID0+IEFuaW1hdGlvblR5cGVzW3R5cGVOYW1lXSA9PT0gY29uc3RydWN0b3JcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBZGQgYSBuZXcgYW5pbWF0aW9uIHRvIGFuIGFuaW1hdGlvbiBsYXllci5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllck5hbWUgLSBOYW1lIG9mIHRoZSBsYXllciB0byBhZGQgdGhlIGFuaW1hdGlvbiB0by5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gYW5pbWF0aW9uTmFtZSAtIE5hbWUgdG8gdXNlIHdoZW4gY2FsbGluZyB0aGUgYW5pbWF0aW9uLlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0PX0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gcGFzcyB0byB0aGUgY29uc3RydWN0b3IgZm9yIHRoZSBuZXdcclxuICAgKiBTaW5nbGVTdGF0ZSBhbmltYXRpb24uXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSAtIFRoZSBuYW1lIG9mIHRoZSBhbmltYXRpb24gdGhhdCB3YXMgYWRkZWRcclxuICAgKi9cclxuICBhZGRBbmltYXRpb24oXHJcbiAgICBsYXllck5hbWUsXHJcbiAgICBhbmltYXRpb25OYW1lLFxyXG4gICAgYW5pbWF0aW9uVHlwZSA9IEFuaW1hdGlvblR5cGVzLnNpbmdsZSxcclxuICAgIG9wdGlvbnMgPSB7fVxyXG4gICkge1xyXG4gICAgb3B0aW9ucy5uYW1lID0gdGhpcy5fdmFsaWRhdGVOZXdBbmltYXRpb24obGF5ZXJOYW1lLCBhbmltYXRpb25OYW1lKTtcclxuXHJcbiAgICAvLyBNYWtlIHN1cmUgdGhlIGFuaW1hdGlvbiB0eXBlIGlzIHZhbGlkXHJcbiAgICBpZiAoIU9iamVjdC52YWx1ZXMoQW5pbWF0aW9uVHlwZXMpLmluY2x1ZGVzKGFuaW1hdGlvblR5cGUpKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgQ2Fubm90IGFkZCBhbmltYXRpb24gJHthbmltYXRpb25OYW1lfSB0byBsYXllciAke2xheWVyTmFtZX0gb24gaG9zdCAke3RoaXMuX2hvc3QuaWR9LiBJbnZhbGlkIGFuaW1hdGlvbiB0eXBlLmBcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBsYXllciA9IHRoaXMuX2xheWVyTWFwW2xheWVyTmFtZV07XHJcbiAgICBvcHRpb25zLmJsZW5kTW9kZSA9IGxheWVyLmJsZW5kTW9kZTtcclxuICAgIG9wdGlvbnMudHJhbnNpdGlvblRpbWUgPSBsYXllci50cmFuc2l0aW9uVGltZTtcclxuICAgIGNvbnN0IHN0YXRlID0gdGhpc1tgX2NyZWF0ZSR7YW5pbWF0aW9uVHlwZS5uYW1lfWBdKG9wdGlvbnMpO1xyXG5cclxuICAgIGNvbnN0IG5hbWUgPSBsYXllci5hZGRTdGF0ZShzdGF0ZSk7XHJcblxyXG4gICAgLy8gTm90aWZ5IHRoYXQgYW4gYW5pbWF0aW9uIGhhcyBiZWVuIGFkZGVkIHRvIHRoZSBmZWF0dXJlXHJcbiAgICB0aGlzLmVtaXQodGhpcy5jb25zdHJ1Y3Rvci5FVkVOVFMuYWRkQW5pbWF0aW9uLCB7XHJcbiAgICAgIGxheWVyTmFtZSxcclxuICAgICAgYW5pbWF0aW9uTmFtZTogbmFtZSxcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBuYW1lO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVtb3ZlIGFuIGFuaW1hdGlvbiBmcm9tIGFuIGFuaW1hdGlvbiBsYXllci5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllck5hbWUgLSBOYW1lIG9mIHRoZSBsYXllciB0byByZW1vdmUgdGhlIGFuaW1hdGlvbiBmcm9tLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gTmFtZSBvZiB0aGUgYW5pbWF0aW9uIHRvIHJlbW92ZS5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gICAqL1xyXG4gIHJlbW92ZUFuaW1hdGlvbihsYXllck5hbWUsIGFuaW1hdGlvbk5hbWUpIHtcclxuICAgIC8vIE1ha2Ugc3VyZSB0aGUgbmFtZSBpcyB2YWxpZFxyXG4gICAgY29uc3QgbGF5ZXIgPSB0aGlzLl9sYXllck1hcFtsYXllck5hbWVdO1xyXG5cclxuICAgIGlmIChsYXllciA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgQ2Fubm90IHJlbW92ZSBhbmltYXRpb24gZnJvbSBsYXllciAke2xheWVyTmFtZX0gZnJvbSBob3N0ICR7dGhpcy5faG9zdC5pZH0uIE5vIGxheWVyIGV4aXN0cyB3aXRoIHRoaXMgbmFtZS5gXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgcmVtb3ZlZCA9IGxheWVyLnJlbW92ZVN0YXRlKGFuaW1hdGlvbk5hbWUpO1xyXG5cclxuICAgIC8vIE5vdGlmeSB0aGF0IGFuIGFuaW1hdGlvbiBoYXMgYmVlbiByZW1vdmVkIGZyb20gdGhlIGZlYXR1cmVcclxuICAgIGlmIChyZW1vdmVkID09PSB0cnVlKSB7XHJcbiAgICAgIHRoaXMuZW1pdCh0aGlzLmNvbnN0cnVjdG9yLkVWRU5UUy5yZW1vdmVBbmltYXRpb24sIHtcclxuICAgICAgICBsYXllck5hbWUsXHJcbiAgICAgICAgYW5pbWF0aW9uTmFtZSxcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHJlbW92ZWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGUgdGhlIG5hbWUgb2YgYW4gYW5pbWF0aW9uLiBOYW1lcyBtdXN0IGJlIHVuaXF1ZSBvbiBlYWNoIGxheWVyLCBpZiB0aGUgbmV3XHJcbiAgICogbmFtZSBpcyBub3QgdW5pcXVlIGl0IHdpbGwgaGF2ZSB0cmFpbGluZyBudW1iZXJzIGFwcGVuZGVkIHVudGlsIGl0IGlzIHVuaXF1ZS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllck5hbWUgLSBOYW1lIG9mIHRoZSBsYXllciB0aGF0IGNvbnRhaW5zIHRoZSBhbmltYXRpb24gdGhhdFxyXG4gICAqIHdpbGwgYmUgcmVuYW1lZCxcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gY3VycmVudEFuaW1hdGlvbk5hbWUgLSBDdXJyZW50IG5hbWUgb2YgdGhlIGFuaW1hdGlvbi5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmV3QW5pbWF0aW9uTmFtZSAtIE5ldyBuYW1lIHRvIHNldCBvbiB0aGUgYW5pbWF0aW9uLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge3N0cmluZ30gLSBUaGUgbmV3IG5hbWUgb2YgdGhlIGFuaW1hdGlvblxyXG4gICAqL1xyXG4gIHJlbmFtZUFuaW1hdGlvbihsYXllck5hbWUsIGN1cnJlbnRBbmltYXRpb25OYW1lLCBuZXdBbmltYXRpb25OYW1lKSB7XHJcbiAgICBjb25zdCBsYXllciA9IHRoaXMuX2xheWVyTWFwW2xheWVyTmFtZV07XHJcblxyXG4gICAgaWYgKGxheWVyID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgIGBDYW5ub3QgcmVuYW1lIGFuaW1hdGlvbiAke2N1cnJlbnRBbmltYXRpb25OYW1lfSBvbiBsYXllciAke2xheWVyTmFtZX0gZm9yIGhvc3QgJHt0aGlzLl9ob3N0LmlkfS4gTm8gbGF5ZXIgZXhpc3RzIHdpdGggdGhpcyBuYW1lLmBcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBuYW1lID0gbGF5ZXIucmVuYW1lU3RhdGUoY3VycmVudEFuaW1hdGlvbk5hbWUsIG5ld0FuaW1hdGlvbk5hbWUpO1xyXG5cclxuICAgIC8vIE5vdGlmeSB0aGF0IGFuIGFuaW1hdGlvbiBoYXMgYmVlbiByZW5hbWVkIG9uIHRoZSBmZWF0dXJlXHJcbiAgICB0aGlzLmVtaXQodGhpcy5jb25zdHJ1Y3Rvci5FVkVOVFMucmVuYW1lQW5pbWF0aW9uLCB7XHJcbiAgICAgIGxheWVyTmFtZSxcclxuICAgICAgb2xkTmFtZTogY3VycmVudEFuaW1hdGlvbk5hbWUsXHJcbiAgICAgIG5ld05hbWU6IG5hbWUsXHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gbmFtZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFBhdXNlIHRoZSBjdXJyZW50bHkgcGxheWluZyBhbmltYXRpb24gYW5kIHBsYXkgYSBuZXcgYW5pbWF0aW9uIGZyb20gdGhlIGJlZ2lubmluZy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllck5hbWUgLSBOYW1lIG9mIHRoZSBsYXllciB0aGF0IGNvbnRhaW5zIHRoZSBhbmltYXRpb24uXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFuaW1hdGlvbk5hbWUgLSBOYW1lIG9mIHRoZSBhbmltYXRpb24gc3RhdGUgdG8gcGxheS5cclxuICAgKiBAcGFyYW0ge251bWJlcj19IHNlY29uZHMgLSBUaGUgbnVtYmVyIG9mIHNlY29uZHMgaXQgc2hvdWxkIHRha2UgdG8gdHJhbnNpdGlvblxyXG4gICAqIHRvIHRoZSBuZXcgYW5pbWF0aW9uLiBEZWZhdWx0IGlzIHplcm8gYW5kIHdpbGwgc2V0IGltbWVkaWF0ZWx5LlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBlYXNpbmdGbiAtIFRoZSBlYXNpbmcgZnVuY3Rpb24gdG8gdXNlIHdoaWxlIHRyYW5zaXRpb25pbmdcclxuICAgKiBiZXR3ZWVuIGFuaW1hdGlvbnMuIERlZmF1bHQgaXMgRWFzaW5nLkxpbmVhci5Jbk91dC5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtEZWZlcnJlZH0gLSBSZXNvbHZlcyBvbmNlIHRoZSBhbmltYXRpb24gcmVhY2hlcyB0aGUgZW5kIG9mIGl0c1xyXG4gICAqIHRpbWVsaW5lLiBMb29waW5nIGFuaW1hdGlvbnMgY2FuIG9ubHkgcmVzb2x2ZSBpZiB0aGV5IGFyZSBpbnRlcnJ1cHRlZCBvclxyXG4gICAqIG1hbnVhbGx5IHN0b3BwZWQuXHJcbiAgICovXHJcbiAgcGxheUFuaW1hdGlvbihsYXllck5hbWUsIGFuaW1hdGlvbk5hbWUsIHNlY29uZHMsIGVhc2luZ0ZuKSB7XHJcbiAgICBjb25zdCBsYXllciA9IHRoaXMuX2xheWVyTWFwW2xheWVyTmFtZV07XHJcblxyXG4gICAgaWYgKGxheWVyID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgY29uc3QgZSA9IGBDYW5ub3QgcGxheSBhbmltYXRpb24gJHthbmltYXRpb25OYW1lfSBvbiBsYXllciAke2xheWVyTmFtZX0gZm9yIGhvc3QgJHt0aGlzLl9ob3N0LmlkfS4gTm8gbGF5ZXIgZXhpc3RzIHdpdGggdGhpcyBuYW1lLmA7XHJcbiAgICAgIHJldHVybiBEZWZlcnJlZC5yZWplY3QoZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gTm90aWZ5IHRoYXQgYSBuZXcgYW5pbWF0aW9uIGhhcyBiZWd1blxyXG4gICAgdGhpcy5lbWl0KHRoaXMuY29uc3RydWN0b3IuRVZFTlRTLnBsYXlBbmltYXRpb24sIHtcclxuICAgICAgbGF5ZXJOYW1lLFxyXG4gICAgICBhbmltYXRpb25OYW1lLFxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIGxheWVyLnBsYXlBbmltYXRpb24oXHJcbiAgICAgIGFuaW1hdGlvbk5hbWUsXHJcbiAgICAgIHNlY29uZHMsXHJcbiAgICAgIGVhc2luZ0ZuLFxyXG4gICAgICAoKSA9PiB7XHJcbiAgICAgICAgLy8gTm90aWZ5IHRoYXQgYW4gYW5pbWF0aW9uIGhhcyBzdG9wcGVkXHJcbiAgICAgICAgdGhpcy5lbWl0KHRoaXMuY29uc3RydWN0b3IuRVZFTlRTLnN0b3BBbmltYXRpb24sIHtcclxuICAgICAgICAgIGxheWVyTmFtZSxcclxuICAgICAgICAgIGFuaW1hdGlvbk5hbWUsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0sXHJcbiAgICAgIHVuZGVmaW5lZCxcclxuICAgICAgKCkgPT4ge1xyXG4gICAgICAgIC8vIE5vdGlmeSB0aGF0IGFuIGFuaW1hdGlvbiBoYXMgYmVlbiBpbnRlcnJ1cHRlZFxyXG4gICAgICAgIHRoaXMuZW1pdCh0aGlzLmNvbnN0cnVjdG9yLkVWRU5UUy5pbnRlcnJ1cHRBbmltYXRpb24sIHtcclxuICAgICAgICAgIGxheWVyTmFtZSxcclxuICAgICAgICAgIGFuaW1hdGlvbk5hbWUsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0sXHJcbiAgICAgICh7bmFtZSwgY2FuQWR2YW5jZSwgaXNRdWV1ZUVuZH0pID0+IHtcclxuICAgICAgICBpZiAobGF5ZXIuY3VycmVudEFuaW1hdGlvbiA9PT0gYW5pbWF0aW9uTmFtZSkge1xyXG4gICAgICAgICAgLy8gTm90aWZ5IHRoYXQgYSBuZXcgYW5pbWF0aW9uIGhhcyBiZWd1blxyXG4gICAgICAgICAgdGhpcy5lbWl0KHRoaXMuY29uc3RydWN0b3IuRVZFTlRTLnBsYXlOZXh0QW5pbWF0aW9uLCB7XHJcbiAgICAgICAgICAgIGxheWVyTmFtZSxcclxuICAgICAgICAgICAgYW5pbWF0aW9uTmFtZSxcclxuICAgICAgICAgICAgbmV4dFF1ZXVlZEFuaW1hdGlvbjogbmFtZSxcclxuICAgICAgICAgICAgY2FuQWR2YW5jZSxcclxuICAgICAgICAgICAgaXNRdWV1ZUVuZCxcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFBsYXkgdGhlIG5leHQgYW5pbWF0aW9uIGluIHRoZSBxdWV1ZSBvZiBhIFF1ZXVlU3RhdGUgYW5pbWF0aW9uLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVyTmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRoYXQgY29udGFpbnMgdGhlIHF1ZXVlIGFuaW1hdGlvbi5cclxuICAgKiBAcGFyYW0ge3N0cmluZz19IGFuaW1hdGlvbk5hbWUgLSBOYW1lIG9mIHRoZSBhbmltYXRpb24gcXVldWUgYW5pbWF0aW9uLiBEZWZhdWx0c1xyXG4gICAqIHRvIHRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IGFuaW1hdGlvbiBmb3IgdGhlIGxheWVyLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyPX0gc2Vjb25kcyAtIFRoZSBudW1iZXIgb2Ygc2Vjb25kcyBpdCBzaG91bGQgdGFrZSB0byB0cmFuc2l0aW9uXHJcbiAgICogdG8gdGhlIHF1ZXVlIGFuaW1hdGlvbiBpZiBpdCdzIG5vdCBhbHJlYWR5IGN1cnJlbnRseSBwbGF5aW5nLiBEZWZhdWx0IGlzIHplcm9cclxuICAgKiBhbmQgd2lsbCBzZXQgaW1tZWRpYXRlbHkuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IGVhc2luZ0ZuIC0gVGhlIGVhc2luZyBmdW5jdGlvbiB0byB1c2Ugd2hpbGUgdHJhbnNpdGlvbmluZ1xyXG4gICAqIHRvIHRoZSBxdWV1ZSBhbmltYXRpb24gaWYgaXQgaXNuJ3QgYWxyZWFkeSBwbGF5aW5nLiBEZWZhdWx0IGlzIEVhc2luZy5MaW5lYXIuSW5PdXQuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7RGVmZXJyZWR9IC0gUmVzb2x2ZXMgb25jZSB0aGUgbGFzdCBhbmltYXRpb24gaW4gdGhlIHF1ZXVlIGZpbmlzaGVzXHJcbiAgICogcGxheWluZy5cclxuICAgKi9cclxuICBwbGF5TmV4dEFuaW1hdGlvbihsYXllck5hbWUsIGFuaW1hdGlvbk5hbWUsIHRyYW5zaXRpb25UaW1lLCBlYXNpbmdGbikge1xyXG4gICAgY29uc3QgbGF5ZXIgPSB0aGlzLl9sYXllck1hcFtsYXllck5hbWVdO1xyXG5cclxuICAgIGlmIChsYXllciA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGNvbnN0IGUgPSBgQ2Fubm90IHBsYXkgbmV4dCBhbmltYXRpb24gb24gbGF5ZXIgJHtsYXllck5hbWV9IGZvciBob3N0ICR7dGhpcy5faG9zdC5pZH0uIE5vIGxheWVyIGV4aXN0cyB3aXRoIHRoaXMgbmFtZS5gO1xyXG4gICAgICByZXR1cm4gRGVmZXJyZWQucmVqZWN0KGUpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChhbmltYXRpb25OYW1lID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgYW5pbWF0aW9uTmFtZSA9IGxheWVyLmN1cnJlbnRBbmltYXRpb247XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgYW5pbWF0aW9uID0gbGF5ZXIuZ2V0U3RhdGUobGF5ZXIuY3VycmVudEFuaW1hdGlvbik7XHJcblxyXG4gICAgaWYgKGFuaW1hdGlvbiA9PT0gbnVsbCkge1xyXG4gICAgICBjb25zdCBlID0gYENhbm5vdCBwbGF5IG5leHQgYW5pbWF0aW9uIG9uIGxheWVyICR7bGF5ZXJOYW1lfSBmb3IgaG9zdCAke3RoaXMuX2hvc3QuaWR9LiBObyBhbmltYXRpb24gZXhpc3RzIHdpdGggbmFtZSAke2FuaW1hdGlvbk5hbWV9LmA7XHJcbiAgICAgIHJldHVybiBEZWZlcnJlZC5yZWplY3QoZSk7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuZ2V0QW5pbWF0aW9uVHlwZShsYXllck5hbWUsIGFuaW1hdGlvbk5hbWUpICE9PSAncXVldWUnKSB7XHJcbiAgICAgIGNvbnN0IGUgPSBgQ2Fubm90IHBsYXkgbmV4dCBhbmltYXRpb24gb24gbGF5ZXIgJHtsYXllck5hbWV9IGZvciBob3N0ICR7dGhpcy5faG9zdC5pZH0uICR7YW5pbWF0aW9uTmFtZX0gaXMgbm90IGEgcXVldWUgc3RhdGUuYDtcclxuICAgICAgcmV0dXJuIERlZmVycmVkLnJlamVjdChlKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBvbk5leHQgPSAoe25hbWUsIGNhbkFkdmFuY2UsIGlzUXVldWVFbmR9KSA9PiB7XHJcbiAgICAgIGlmIChsYXllci5jdXJyZW50QW5pbWF0aW9uID09PSBhbmltYXRpb25OYW1lKSB7XHJcbiAgICAgICAgLy8gTm90aWZ5IHRoYXQgYSBuZXcgYW5pbWF0aW9uIGhhcyBiZWd1blxyXG4gICAgICAgIHRoaXMuZW1pdCh0aGlzLmNvbnN0cnVjdG9yLkVWRU5UUy5wbGF5TmV4dEFuaW1hdGlvbiwge1xyXG4gICAgICAgICAgbGF5ZXJOYW1lLFxyXG4gICAgICAgICAgYW5pbWF0aW9uTmFtZSxcclxuICAgICAgICAgIG5leHRRdWV1ZWRBbmltYXRpb246IG5hbWUsXHJcbiAgICAgICAgICBjYW5BZHZhbmNlLFxyXG4gICAgICAgICAgaXNRdWV1ZUVuZCxcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICAvLyBNYWtlIHRoZSBxdWV1ZSBhbmltYXRpb24gY3VycmVudCBpZiBpdCB3YXNuJ3QgYWxyZWFkeVxyXG4gICAgaWYgKGxheWVyLmN1cnJlbnRBbmltYXRpb24gPT09IG51bGwpIHtcclxuICAgICAgbGF5ZXIucmVzdW1lQW5pbWF0aW9uKFxyXG4gICAgICAgIGFuaW1hdGlvbi5uYW1lLFxyXG4gICAgICAgIHRyYW5zaXRpb25UaW1lLFxyXG4gICAgICAgIGVhc2luZ0ZuLFxyXG4gICAgICAgIHVuZGVmaW5lZCxcclxuICAgICAgICB1bmRlZmluZWQsXHJcbiAgICAgICAgdW5kZWZpbmVkLFxyXG4gICAgICAgIG9uTmV4dFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBhbmltYXRpb24ubmV4dChvbk5leHQsIHRydWUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUGF1c2UgdGhlIGN1cnJlbnQgYW5pbWF0aW9uIG9uIGEgbGF5ZXIuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRvIHBhdXNlLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgb3Igbm90IGFuIGFuaW1hdGlvbiB3YXMgc3VjY2Vzc2Z1bGx5IHBhdXNlZC5cclxuICAgKi9cclxuICBwYXVzZUFuaW1hdGlvbihuYW1lKSB7XHJcbiAgICBjb25zdCBsYXllciA9IHRoaXMuX2xheWVyTWFwW25hbWVdO1xyXG5cclxuICAgIGlmIChsYXllciA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICBgRGlkIG5vdCBwYXVzZSBhbmltYXRpb24gb24gbGF5ZXIgJHtuYW1lfSBmb3IgaG9zdCAke3RoaXMuX2hvc3QuaWR9LiBObyBsYXllciBleGlzdHMgd2l0aCB0aGlzIG5hbWUuYFxyXG4gICAgICApO1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgcGF1c2VkID0gbGF5ZXIucGF1c2VBbmltYXRpb24oKTtcclxuXHJcbiAgICAvLyBOb3RpZnkgdGhhdCBhbiBhbmltYXRpb24gd2FzIHBhdXNlZFxyXG4gICAgaWYgKHBhdXNlZCkge1xyXG4gICAgICBjb25zdCBhbmltYXRpb25OYW1lID0gbGF5ZXIuY3VycmVudEFuaW1hdGlvbjtcclxuICAgICAgdGhpcy5lbWl0KHRoaXMuY29uc3RydWN0b3IuRVZFTlRTLnBhdXNlQW5pbWF0aW9uLCB7XHJcbiAgICAgICAgbGF5ZXJOYW1lOiBuYW1lLFxyXG4gICAgICAgIGFuaW1hdGlvbk5hbWUsXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBwYXVzZWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQYXVzZSB0aGUgY3VycmVudGx5IHBsYXlpbmcgYW5pbWF0aW9uIGFuZCBwbGF5IGEgbmV3IGFuaW1hdGlvbiBmcm9tIHdoZXJlIGl0XHJcbiAgICogbGFzdCBsZWZ0IG9mZi5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllck5hbWUgLSBOYW1lIG9mIHRoZSBsYXllciB0aGF0IGNvbnRhaW5zIHRoZSBhbmltYXRpb24uXHJcbiAgICogQHBhcmFtIHtzdHJpbmc9fSBhbmltYXRpb25OYW1lIC0gTmFtZSBvZiB0aGUgYW5pbWF0aW9uIHN0YXRlIHRvIHJlc3VtZS4gRGVmYXVsdHNcclxuICAgKiB0byB0aGUgbmFtZSBvZiB0aGUgY3VycmVudCBhbmltYXRpb24gZm9yIHRoZSBsYXllci5cclxuICAgKiBAcGFyYW0ge251bWJlcj19IHNlY29uZHMgLSBUaGUgbnVtYmVyIG9mIHNlY29uZHMgaXQgc2hvdWxkIHRha2UgdG8gdHJhbnNpdGlvblxyXG4gICAqIHRvIHRoZSBuZXcgYW5pbWF0aW9uLiBEZWZhdWx0IGlzIHplcm8gYW5kIHdpbGwgc2V0IGltbWVkaWF0ZWx5LlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBlYXNpbmdGbiAtIFRoZSBlYXNpbmcgZnVuY3Rpb24gdG8gdXNlIHdoaWxlIHRyYW5zaXRpb25pbmdcclxuICAgKiBiZXR3ZWVuIGFuaW1hdGlvbnMuIERlZmF1bHQgaXMgRWFzaW5nLkxpbmVhci5Jbk91dC5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtEZWZlcnJlZH0gLSBSZXNvbHZlcyBvbmNlIHRoZSBhbmltYXRpb24gcmVhY2hlcyB0aGUgZW5kIG9mIGl0c1xyXG4gICAqIHRpbWVsaW5lLiBMb29waW5nIGFuaW1hdGlvbnMgY2FuIG9ubHkgcmVzb2x2ZSBpZiB0aGV5IGFyZSBpbnRlcnJ1cHRlZCBvclxyXG4gICAqIG1hbnVhbGx5IHN0b3BwZWQuXHJcbiAgICovXHJcbiAgcmVzdW1lQW5pbWF0aW9uKGxheWVyTmFtZSwgYW5pbWF0aW9uTmFtZSwgc2Vjb25kcywgZWFzaW5nRm4pIHtcclxuICAgIGNvbnN0IGxheWVyID0gdGhpcy5fbGF5ZXJNYXBbbGF5ZXJOYW1lXTtcclxuXHJcbiAgICBpZiAobGF5ZXIgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBjb25zdCBlID0gYENhbm5vdCByZXN1bWUgYW5pbWF0aW9uICR7YW5pbWF0aW9uTmFtZX0gb24gbGF5ZXIgJHtsYXllck5hbWV9IGZvciBob3N0ICR7dGhpcy5faG9zdC5pZH0uIE5vIGxheWVyIGV4aXN0cyB3aXRoIHRoaXMgbmFtZS5gO1xyXG4gICAgICByZXR1cm4gRGVmZXJyZWQucmVqZWN0KGUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIE5vdGlmeSB0aGF0IGFuIGFuaW1hdGlvbiB3YXMgcmVzdW1lZFxyXG4gICAgdGhpcy5lbWl0KHRoaXMuY29uc3RydWN0b3IuRVZFTlRTLnJlc3VtZUFuaW1hdGlvbiwge1xyXG4gICAgICBsYXllck5hbWUsXHJcbiAgICAgIGFuaW1hdGlvbk5hbWUsXHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gbGF5ZXIucmVzdW1lQW5pbWF0aW9uKFxyXG4gICAgICBhbmltYXRpb25OYW1lLFxyXG4gICAgICBzZWNvbmRzLFxyXG4gICAgICBlYXNpbmdGbixcclxuICAgICAgKCkgPT4ge1xyXG4gICAgICAgIC8vIE5vdGlmeSB0aGF0IGFuIGFuaW1hdGlvbiBoYXMgc3RvcHBlZFxyXG4gICAgICAgIHRoaXMuZW1pdCh0aGlzLmNvbnN0cnVjdG9yLkVWRU5UUy5zdG9wQW5pbWF0aW9uLCB7XHJcbiAgICAgICAgICBsYXllck5hbWUsXHJcbiAgICAgICAgICBhbmltYXRpb25OYW1lLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9LFxyXG4gICAgICB1bmRlZmluZWQsXHJcbiAgICAgICgpID0+IHtcclxuICAgICAgICAvLyBOb3RpZnkgdGhhdCBhbiBhbmltYXRpb24gaGFzIGJlZW4gaW50ZXJydXB0ZWRcclxuICAgICAgICB0aGlzLmVtaXQodGhpcy5jb25zdHJ1Y3Rvci5FVkVOVFMuaW50ZXJydXB0QW5pbWF0aW9uLCB7XHJcbiAgICAgICAgICBsYXllck5hbWUsXHJcbiAgICAgICAgICBhbmltYXRpb25OYW1lLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9LFxyXG4gICAgICAoe25hbWUsIGNhbkFkdmFuY2UsIGlzUXVldWVFbmR9KSA9PiB7XHJcbiAgICAgICAgaWYgKGxheWVyLmN1cnJlbnRBbmltYXRpb24gPT09IGFuaW1hdGlvbk5hbWUpIHtcclxuICAgICAgICAgIC8vIE5vdGlmeSB0aGF0IGEgbmV3IGFuaW1hdGlvbiBoYXMgYmVndW5cclxuICAgICAgICAgIHRoaXMuZW1pdCh0aGlzLmNvbnN0cnVjdG9yLkVWRU5UUy5wbGF5TmV4dEFuaW1hdGlvbiwge1xyXG4gICAgICAgICAgICBsYXllck5hbWUsXHJcbiAgICAgICAgICAgIGFuaW1hdGlvbk5hbWUsXHJcbiAgICAgICAgICAgIG5leHRRdWV1ZWRBbmltYXRpb246IG5hbWUsXHJcbiAgICAgICAgICAgIGNhbkFkdmFuY2UsXHJcbiAgICAgICAgICAgIGlzUXVldWVFbmQsXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTdG9wIHRoZSBjdXJyZW50IGFuaW1hdGlvbiBvbiBhIGxheWVyLiBTdG9wIHJld2luZHMgdGhlIGFuaW1hdGlvbiB0byB0aGVcclxuICAgKiBiZWdpbm5pbmcgYW5kIHByZXZlbnRzIGl0IGZyb20gcHJvZ3Jlc3NpbmcgZm9yd2FyZC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gTmFtZSBvZiB0aGUgbGF5ZXIgdGhhdCBjb250YWlucyB0aGUgYW5pbWF0aW9uLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgb3Igbm90IGFuIGFuaW1hdGlvbiB3YXMgc3VjY2Vzc2Z1bGx5IHN0b3BwZWQuXHJcbiAgICovXHJcbiAgc3RvcEFuaW1hdGlvbihuYW1lKSB7XHJcbiAgICBjb25zdCBsYXllciA9IHRoaXMuX2xheWVyTWFwW25hbWVdO1xyXG5cclxuICAgIGlmIChsYXllciA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICBgRGlkIG5vdCBzdG9wIGFuaW1hdGlvbiBvbiBsYXllciAke25hbWV9IGZvciBob3N0ICR7dGhpcy5faG9zdC5pZH0uIE5vIGxheWVyIGV4aXN0cyB3aXRoIHRoaXMgbmFtZS5gXHJcbiAgICAgICk7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbGF5ZXIuc3RvcEFuaW1hdGlvbigpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUGF1c2UgY3VycmVudCBhbmltYXRpb24gYW5kIHdlaWdodCBpbnRlcnBvbGF0aW9uIGFuaW1hdGlvbiBvbiBhbGwgbGF5ZXJzLlxyXG5cclxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSBXaGV0aGVyIG9yIG5vdCB0aGVyZSB3YXMgYW4gZXhpc3RpbmcgaW50ZXJwb2xhdGlvbiBvclxyXG4gICAqIGN1cnJlbnQgYW5pbWF0aW9ucyB0byBwYXVzZS5cclxuICAgKi9cclxuICBwYXVzZSgpIHtcclxuICAgIHRoaXMuX3BhdXNlZCA9IHRydWU7XHJcblxyXG4gICAgbGV0IHBhdXNlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5fbGF5ZXJzLmZvckVhY2gobCA9PiB7XHJcbiAgICAgIGlmIChsLnBhdXNlKCkpIHtcclxuICAgICAgICBwYXVzZWQgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gcGF1c2VkO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVzdW1lIGN1cnJlbnQgYW5pbWF0aW9uIGFuZCB3ZWlnaHQgaW50ZXJwb2xhdGlvbiBhbmltYXRpb24gb24gYWxsIGxheWVycy5cclxuXHJcbiAgICogQHJldHVybnMge2Jvb2xlYW59IC0gV2hldGhlciBvciBub3QgdGhlcmUgd2FzIGFuIGV4aXN0aW5nIGludGVycG9sYXRpb24gb3JcclxuICAgKiBjdXJyZW50IGFuaW1hdGlvbnMgdG8gcmVzdW1lLlxyXG4gICAqL1xyXG4gIHJlc3VtZSgpIHtcclxuICAgIHRoaXMuX3BhdXNlZCA9IGZhbHNlO1xyXG5cclxuICAgIGxldCByZXN1bWVkID0gZmFsc2U7XHJcbiAgICB0aGlzLl9sYXllcnMuZm9yRWFjaChsID0+IHtcclxuICAgICAgaWYgKGwucmVzdW1lKCkpIHtcclxuICAgICAgICByZXN1bWVkID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIHJlc3VtZWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBZGRzIGEgbmFtZXNwYWNlIHRvIHRoZSBob3N0IHdpdGggdGhlIG5hbWUgb2YgdGhlIGZlYXR1cmUgdG8gY29udGFpbiBwcm9wZXJ0aWVzXHJcbiAgICogYW5kIG1ldGhvZHMgZnJvbSB0aGUgZmVhdHVyZSB0aGF0IHVzZXJzIG9mIHRoZSBob3N0IG5lZWQgYWNjZXNzIHRvLlxyXG4gICAqXHJcbiAgICogQHNlZSBBbmltYXRpb25GZWF0dXJlXHJcbiAgICovXHJcbiAgaW5zdGFsbEFwaSgpIHtcclxuICAgIC8qKlxyXG4gICAgICogQGlubmVyXHJcbiAgICAgKiBAbmFtZXNwYWNlIEFuaW1hdGlvbkZlYXR1cmVcclxuICAgICAqL1xyXG4gICAgY29uc3QgYXBpID0gc3VwZXIuaW5zdGFsbEFwaSgpO1xyXG5cclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGFwaSwge1xyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIEFuaW1hdGlvbkZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBzZWUgY29yZS9BbmltYXRpb25GZWF0dXJlI3BhdXNlZFxyXG4gICAgICAgKi9cclxuICAgICAgcGF1c2VkOiB7XHJcbiAgICAgICAgZ2V0OiAoKSA9PiB0aGlzLnBhdXNlZCxcclxuICAgICAgfSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBtZW1iZXJvZiBBbmltYXRpb25GZWF0dXJlXHJcbiAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgKiBAc2VlIGNvcmUvQW5pbWF0aW9uRmVhdHVyZSNsYXllcnNcclxuICAgICAgICovXHJcbiAgICAgIGxheWVyczoge1xyXG4gICAgICAgIGdldDogKCkgPT4gdGhpcy5sYXllcnMsXHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuXHJcbiAgICBPYmplY3QuYXNzaWduKGFwaSwge1xyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIEFuaW1hdGlvbkZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBtZXRob2RcclxuICAgICAgICogQHNlZSBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjYWRkTGF5ZXJcclxuICAgICAgICovXHJcbiAgICAgIGFkZExheWVyOiB0aGlzLmFkZExheWVyLmJpbmQodGhpcyksXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbWVtYmVyb2YgQW5pbWF0aW9uRmVhdHVyZVxyXG4gICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICogQG1ldGhvZFxyXG4gICAgICAgKiBAc2VlIGNvcmUvQW5pbWF0aW9uRmVhdHVyZSNyZW1vdmVMYXllclxyXG4gICAgICAgKi9cclxuICAgICAgcmVtb3ZlTGF5ZXI6IHRoaXMucmVtb3ZlTGF5ZXIuYmluZCh0aGlzKSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBtZW1iZXJvZiBBbmltYXRpb25GZWF0dXJlXHJcbiAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgKiBAbWV0aG9kXHJcbiAgICAgICAqIEBzZWUgY29yZS9BbmltYXRpb25GZWF0dXJlI21vdmVMYXllclxyXG4gICAgICAgKi9cclxuICAgICAgbW92ZUxheWVyOiB0aGlzLm1vdmVMYXllci5iaW5kKHRoaXMpLFxyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIEFuaW1hdGlvbkZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBtZXRob2RcclxuICAgICAgICogQHNlZSBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjcmVuYW1lTGF5ZXJcclxuICAgICAgICovXHJcbiAgICAgIHJlbmFtZUxheWVyOiB0aGlzLnJlbmFtZUxheWVyLmJpbmQodGhpcyksXHJcblxyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIEFuaW1hdGlvbkZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBtZXRob2RcclxuICAgICAgICogQHNlZSBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjZ2V0TGF5ZXJXZWlnaHRcclxuICAgICAgICovXHJcbiAgICAgIGdldExheWVyV2VpZ2h0OiB0aGlzLmdldExheWVyV2VpZ2h0LmJpbmQodGhpcyksXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbWVtYmVyb2YgQW5pbWF0aW9uRmVhdHVyZVxyXG4gICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICogQG1ldGhvZFxyXG4gICAgICAgKiBAc2VlIGNvcmUvQW5pbWF0aW9uRmVhdHVyZSNzZXRMYXllcldlaWdodFxyXG4gICAgICAgKi9cclxuICAgICAgc2V0TGF5ZXJXZWlnaHQ6IHRoaXMuc2V0TGF5ZXJXZWlnaHQuYmluZCh0aGlzKSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBtZW1iZXJvZiBBbmltYXRpb25GZWF0dXJlXHJcbiAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgKiBAbWV0aG9kXHJcbiAgICAgICAqIEBzZWUgY29yZS9BbmltYXRpb25GZWF0dXJlI3BhdXNlTGF5ZXJXZWlnaHRcclxuICAgICAgICovXHJcbiAgICAgIHBhdXNlTGF5ZXJXZWlnaHQ6IHRoaXMucGF1c2VMYXllcldlaWdodC5iaW5kKHRoaXMpLFxyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIEFuaW1hdGlvbkZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBtZXRob2RcclxuICAgICAgICogQHNlZSBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjcmVzdW1lTGF5ZXJXZWlnaHRcclxuICAgICAgICovXHJcbiAgICAgIHJlc3VtZUxheWVyV2VpZ2h0OiB0aGlzLnJlc3VtZUxheWVyV2VpZ2h0LmJpbmQodGhpcyksXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbWVtYmVyb2YgQW5pbWF0aW9uRmVhdHVyZVxyXG4gICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICogQG1ldGhvZFxyXG4gICAgICAgKiBAc2VlIGNvcmUvQW5pbWF0aW9uRmVhdHVyZSNwYXVzZUxheWVyXHJcbiAgICAgICAqL1xyXG4gICAgICBwYXVzZUxheWVyOiB0aGlzLnBhdXNlTGF5ZXIuYmluZCh0aGlzKSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBtZW1iZXJvZiBBbmltYXRpb25GZWF0dXJlXHJcbiAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgKiBAbWV0aG9kXHJcbiAgICAgICAqIEBzZWUgY29yZS9BbmltYXRpb25GZWF0dXJlI3Jlc3VtZUxheWVyXHJcbiAgICAgICAqL1xyXG4gICAgICByZXN1bWVMYXllcjogdGhpcy5yZXN1bWVMYXllci5iaW5kKHRoaXMpLFxyXG5cclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBtZW1iZXJvZiBBbmltYXRpb25GZWF0dXJlXHJcbiAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgKiBAbWV0aG9kXHJcbiAgICAgICAqIEBzZWUgY29yZS9BbmltYXRpb25GZWF0dXJlI2dldFRyYW5zaXRpb25pbmdcclxuICAgICAgICovXHJcbiAgICAgIGdldFRyYW5zaXRpb25pbmc6IHRoaXMuZ2V0VHJhbnNpdGlvbmluZy5iaW5kKHRoaXMpLFxyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIEFuaW1hdGlvbkZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBtZXRob2RcclxuICAgICAgICogQHNlZSBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjZ2V0QW5pbWF0aW9uc1xyXG4gICAgICAgKi9cclxuICAgICAgZ2V0QW5pbWF0aW9uczogdGhpcy5nZXRBbmltYXRpb25zLmJpbmQodGhpcyksXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbWVtYmVyb2YgQW5pbWF0aW9uRmVhdHVyZVxyXG4gICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICogQG1ldGhvZFxyXG4gICAgICAgKiBAc2VlIGNvcmUvQW5pbWF0aW9uRmVhdHVyZSNnZXRDdXJyZW50QW5pbWF0aW9uXHJcbiAgICAgICAqL1xyXG4gICAgICBnZXRDdXJyZW50QW5pbWF0aW9uOiB0aGlzLmdldEN1cnJlbnRBbmltYXRpb24uYmluZCh0aGlzKSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBtZW1iZXJvZiBBbmltYXRpb25GZWF0dXJlXHJcbiAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgKiBAbWV0aG9kXHJcbiAgICAgICAqIEBzZWUgY29yZS9BbmltYXRpb25GZWF0dXJlI2dldFBhdXNlZFxyXG4gICAgICAgKi9cclxuICAgICAgZ2V0UGF1c2VkOiB0aGlzLmdldFBhdXNlZC5iaW5kKHRoaXMpLFxyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIEFuaW1hdGlvbkZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBtZXRob2RcclxuICAgICAgICogQHNlZSBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjZ2V0QW5pbWF0aW9uVHlwZVxyXG4gICAgICAgKi9cclxuICAgICAgZ2V0QW5pbWF0aW9uVHlwZTogdGhpcy5nZXRBbmltYXRpb25UeXBlLmJpbmQodGhpcyksXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbWVtYmVyb2YgQW5pbWF0aW9uRmVhdHVyZVxyXG4gICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICogQG1ldGhvZFxyXG4gICAgICAgKiBAc2VlIGNvcmUvQW5pbWF0aW9uRmVhdHVyZSNhZGRBbmltYXRpb25cclxuICAgICAgICovXHJcbiAgICAgIGFkZEFuaW1hdGlvbjogdGhpcy5hZGRBbmltYXRpb24uYmluZCh0aGlzKSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBtZW1iZXJvZiBBbmltYXRpb25GZWF0dXJlXHJcbiAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgKiBAbWV0aG9kXHJcbiAgICAgICAqIEBzZWUgY29yZS9BbmltYXRpb25GZWF0dXJlI3JlbW92ZUFuaW1hdGlvblxyXG4gICAgICAgKi9cclxuICAgICAgcmVtb3ZlQW5pbWF0aW9uOiB0aGlzLnJlbW92ZUFuaW1hdGlvbi5iaW5kKHRoaXMpLFxyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIEFuaW1hdGlvbkZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBtZXRob2RcclxuICAgICAgICogQHNlZSBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjcmVuYW1lQW5pbWF0aW9uXHJcbiAgICAgICAqL1xyXG4gICAgICByZW5hbWVBbmltYXRpb246IHRoaXMucmVuYW1lQW5pbWF0aW9uLmJpbmQodGhpcyksXHJcblxyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIEFuaW1hdGlvbkZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBtZXRob2RcclxuICAgICAgICogQHNlZSBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjZ2V0QW5pbWF0aW9uQmxlbmROYW1lc1xyXG4gICAgICAgKi9cclxuICAgICAgZ2V0QW5pbWF0aW9uQmxlbmROYW1lczogdGhpcy5nZXRBbmltYXRpb25CbGVuZE5hbWVzLmJpbmQodGhpcyksXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbWVtYmVyb2YgQW5pbWF0aW9uRmVhdHVyZVxyXG4gICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICogQG1ldGhvZFxyXG4gICAgICAgKiBAc2VlIGNvcmUvQW5pbWF0aW9uRmVhdHVyZSNnZXRBbmltYXRpb25CbGVuZFdlaWdodFxyXG4gICAgICAgKi9cclxuICAgICAgZ2V0QW5pbWF0aW9uQmxlbmRXZWlnaHQ6IHRoaXMuZ2V0QW5pbWF0aW9uQmxlbmRXZWlnaHQuYmluZCh0aGlzKSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBtZW1iZXJvZiBBbmltYXRpb25GZWF0dXJlXHJcbiAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgKiBAbWV0aG9kXHJcbiAgICAgICAqIEBzZWUgY29yZS9BbmltYXRpb25GZWF0dXJlI3NldEFuaW1hdGlvbkJsZW5kV2VpZ2h0XHJcbiAgICAgICAqL1xyXG4gICAgICBzZXRBbmltYXRpb25CbGVuZFdlaWdodDogdGhpcy5zZXRBbmltYXRpb25CbGVuZFdlaWdodC5iaW5kKHRoaXMpLFxyXG5cclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBtZW1iZXJvZiBBbmltYXRpb25GZWF0dXJlXHJcbiAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgKiBAbWV0aG9kXHJcbiAgICAgICAqIEBzZWUgY29yZS9BbmltYXRpb25GZWF0dXJlI3BsYXlBbmltYXRpb25cclxuICAgICAgICovXHJcbiAgICAgIHBsYXlBbmltYXRpb246IHRoaXMucGxheUFuaW1hdGlvbi5iaW5kKHRoaXMpLFxyXG5cclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBtZW1iZXJvZiBBbmltYXRpb25GZWF0dXJlXHJcbiAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgKiBAbWV0aG9kXHJcbiAgICAgICAqIEBzZWUgY29yZS9BbmltYXRpb25GZWF0dXJlI3BsYXlOZXh0QW5pbWF0aW9uXHJcbiAgICAgICAqL1xyXG4gICAgICBwbGF5TmV4dEFuaW1hdGlvbjogdGhpcy5wbGF5TmV4dEFuaW1hdGlvbi5iaW5kKHRoaXMpLFxyXG5cclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBtZW1iZXJvZiBBbmltYXRpb25GZWF0dXJlXHJcbiAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgKiBAbWV0aG9kXHJcbiAgICAgICAqIEBzZWUgY29yZS9BbmltYXRpb25GZWF0dXJlI3BhdXNlQW5pbWF0aW9uXHJcbiAgICAgICAqL1xyXG4gICAgICBwYXVzZUFuaW1hdGlvbjogdGhpcy5wYXVzZUFuaW1hdGlvbi5iaW5kKHRoaXMpLFxyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIEFuaW1hdGlvbkZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBtZXRob2RcclxuICAgICAgICogQHNlZSBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjcmVzdW1lQW5pbWF0aW9uXHJcbiAgICAgICAqL1xyXG4gICAgICByZXN1bWVBbmltYXRpb246IHRoaXMucmVzdW1lQW5pbWF0aW9uLmJpbmQodGhpcyksXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbWVtYmVyb2YgQW5pbWF0aW9uRmVhdHVyZVxyXG4gICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICogQG1ldGhvZFxyXG4gICAgICAgKiBAc2VlIGNvcmUvQW5pbWF0aW9uRmVhdHVyZSNzdG9wQW5pbWF0aW9uXHJcbiAgICAgICAqL1xyXG4gICAgICBzdG9wQW5pbWF0aW9uOiB0aGlzLnN0b3BBbmltYXRpb24uYmluZCh0aGlzKSxcclxuXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbWVtYmVyb2YgQW5pbWF0aW9uRmVhdHVyZVxyXG4gICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICogQG1ldGhvZFxyXG4gICAgICAgKiBAc2VlIGNvcmUvQW5pbWF0aW9uRmVhdHVyZSNwYXVzZVxyXG4gICAgICAgKi9cclxuICAgICAgcGF1c2U6IHRoaXMucGF1c2UuYmluZCh0aGlzKSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBtZW1iZXJvZiBBbmltYXRpb25GZWF0dXJlXHJcbiAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgKiBAbWV0aG9kXHJcbiAgICAgICAqIEBzZWUgY29yZS9BbmltYXRpb25GZWF0dXJlI3Jlc3VtZVxyXG4gICAgICAgKi9cclxuICAgICAgcmVzdW1lOiB0aGlzLnJlc3VtZS5iaW5kKHRoaXMpLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGUgZWFjaCBhbmltYXRpb24gbGF5ZXIuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge251bWJlcn0gZGVsdGFUaW1lIC0gVGltZSBzaW5jZSB0aGUgbGFzdCB1cGRhdGUuXHJcbiAgICovXHJcbiAgdXBkYXRlKGRlbHRhVGltZSkge1xyXG4gICAgaWYgKCF0aGlzLl9sYXllcnMubGVuZ3RoKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5fcGF1c2VkKSB7XHJcbiAgICAgIGRlbHRhVGltZSA9IDA7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUmUtZXZhbHVhdGUgaW50ZXJuYWwgd2VpZ2h0cyBmb3IgbGF5ZXJzXHJcbiAgICB0aGlzLl91cGRhdGVJbnRlcm5hbFdlaWdodHMoKTtcclxuXHJcbiAgICAvLyBVcGRhdGUgbGF5ZXJzXHJcbiAgICB0aGlzLl9sYXllcnMuZm9yRWFjaChsYXllciA9PiB7XHJcbiAgICAgIGxheWVyLnVwZGF0ZShkZWx0YVRpbWUpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgc3VwZXIudXBkYXRlKGRlbHRhVGltZSk7XHJcbiAgfVxyXG5cclxuICBkaXNjYXJkKCkge1xyXG4gICAgdGhpcy5fbGF5ZXJzLmZvckVhY2gobGF5ZXIgPT4ge1xyXG4gICAgICBsYXllci5kaXNjYXJkKCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBkZWxldGUgdGhpcy5fbGF5ZXJzO1xyXG4gICAgZGVsZXRlIHRoaXMuX2xheWVyTWFwO1xyXG5cclxuICAgIHN1cGVyLmRpc2NhcmQoKTtcclxuICB9XHJcbn1cclxuXHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShBbmltYXRpb25GZWF0dXJlLCAnRVZFTlRTJywge1xyXG4gIHZhbHVlOiB7XHJcbiAgICAuLi5PYmplY3QuZ2V0UHJvdG90eXBlT2YoQWJzdHJhY3RIb3N0RmVhdHVyZSkuRVZFTlRTLFxyXG4gICAgYWRkTGF5ZXI6ICdvbkFkZExheWVyRXZlbnQnLFxyXG4gICAgcmVtb3ZlTGF5ZXI6ICdvblJlbW92ZUxheWVyRXZlbnQnLFxyXG4gICAgcmVuYW1lTGF5ZXI6ICdvblJlbmFtZUxheWVyRXZlbnQnLFxyXG4gICAgYWRkQW5pbWF0aW9uOiAnb25BZGRBbmltYXRpb25FdmVudCcsXHJcbiAgICByZW1vdmVBbmltYXRpb246ICdvblJlbW92ZWRBbmltYXRpb25FdmVudCcsXHJcbiAgICByZW5hbWVBbmltYXRpb246ICdvblJlbmFtZUFuaW1hdGlvbkV2ZW50JyxcclxuICAgIHBsYXlBbmltYXRpb246ICdvblBsYXlFdmVudCcsXHJcbiAgICBwbGF5TmV4dEFuaW1hdGlvbjogJ29uTmV4dEV2ZW50JyxcclxuICAgIHBhdXNlQW5pbWF0aW9uOiAnb25QYXVzZUV2ZW50JyxcclxuICAgIHJlc3VtZUFuaW1hdGlvbjogJ29uUmVzdW1lRXZlbnQnLFxyXG4gICAgaW50ZXJydXB0QW5pbWF0aW9uOiAnb25JbnRlcnJ1cHRFdmVudCcsXHJcbiAgICBzdG9wQW5pbWF0aW9uOiAnb25TdG9wRXZlbnQnLFxyXG4gIH0sXHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgQW5pbWF0aW9uRmVhdHVyZTtcclxuIiwiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTBcbi8qIGVzbGludC1kaXNhYmxlIG5vLXVuZGVyc2NvcmUtZGFuZ2xlICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xuaW1wb3J0IE1hbmFnZWRBbmltYXRpb25MYXllckludGVyZmFjZSBmcm9tICcuL2FuaW1wYWNrL01hbmFnZWRBbmltYXRpb25MYXllckludGVyZmFjZSc7XG5pbXBvcnQgeyBBbmltYXRpb25UeXBlcyB9IGZyb20gJy4vYW5pbXBhY2svQW5pbWF0aW9uRmVhdHVyZSc7XG5pbXBvcnQgU1NNTFNwZWVjaG1hcmtJbnRlcmZhY2UgZnJvbSAnLi9hd3NwYWNrL1NTTUxTcGVlY2htYXJrSW50ZXJmYWNlJztcbmltcG9ydCBBYnN0cmFjdEhvc3RGZWF0dXJlIGZyb20gJy4vQWJzdHJhY3RIb3N0RmVhdHVyZSc7XG5pbXBvcnQgeyBRdWFkcmF0aWMgfSBmcm9tICcuL2FuaW1wYWNrL0Vhc2luZyc7XG5pbXBvcnQgTWF0aFV0aWxzIGZyb20gJy4vTWF0aFV0aWxzJztcbmltcG9ydCBVdGlscyBmcm9tICcuL1V0aWxzJztcblxuLyoqXG4gKiBFbnVtIGZvciBheGlzIGRpcmVjdGlvbnMuXG4gKlxuICogQHJlYWRvbmx5XG4gKiBAZW51bSB7Q2xhc3N9XG4gKi9cbmNvbnN0IEF4aXNNYXAgPSB7XG4gIFBvc2l0aXZlWDogWzEsIDAsIDBdLFxuICBOZWdhdGl2ZVg6IFstMSwgMCwgMF0sXG4gIFBvc2l0aXZlWTogWzAsIDEsIDBdLFxuICBOZWdhdGl2ZVk6IFswLCAtMSwgMF0sXG4gIFBvc2l0aXZlWjogWzAsIDAsIDFdLFxuICBOZWdhdGl2ZVo6IFswLCAwLCAtMV0sXG59O1xuXG5jb25zdCBGYWNlVGFyZ2V0VHlwZXMgPSB7XG4gIEV5ZUNlbnRlcjogMCxcbiAgRXllTGVmdDogMSxcbiAgRXllUmlnaHQ6IDIsXG4gIE1vdXRoOiAzLFxufVxuXG4vLyBBdmVyYWdlIGRpc3RhbmNlIGJldHdlZW4gcHVwaWxzIGlzIC4wNjRtLCBnb2xkZW4gcmF0aW8gc2F5cyB0aGF0IHRoZSBkaXN0YW5jZVxuLy8gZnJvbSBjZW50ZXIgb2YgdGhlIHB1cGlscyB0byB0aGUgY2VudGVyIG9mIHRoZSBtb3V0aCBzaG91bGQgYmUgYWJvdXQgdGhlIHNhbWUuXG5jb25zdCBGYWNlVmVjdG9ycyA9IFtcbiAgWzAsIDAsIDBdLFxuICBbLS4wMzIsIDAsIDBdLFxuICBbLjAzMiwgMCwgMF0sXG4gIFswLCAtLjA2NCwgMF1cbl07XG5cbi8vIFRpbWUgcmFuZ2VzIHRvIHVzZSB3aGVuIGNob29zaW5nIGEgbmV3IHJhbmRvbSB3YWl0IHRpbWUgYmV0d2VlbiBzYWNjYWRlc1xuY29uc3QgTWljcm9TYWNjYWRlV2FpdFJhbmdlcyA9IHtcbiAgZGVmYXVsdDogWzAuOCwgMS43NV0sXG4gIHBvc3RNYWNybzogWzAuNiwgMS4zMTI1XSxcbn07XG5cbmNvbnN0IE1hY3JvU2FjY2FkZVdhaXRSYW5nZXMgPSB7XG4gIGRlZmF1bHQ6IFs1LjAsIDguMF0sXG4gIG1vdXRoVGFyZ2V0OiBbMC4yLCAwLjc1XSwgLy8gTG9vayBhd2F5IGZyb20gYSBtb3V0aCB0YXJnZXQgdGhlIGZhc3Rlc3RcbiAgZXllVGFyZ2V0OiBbMS41LCA0LjBdXG59O1xuXG4vLyBNaW5pbXVtIGFuZ2xlIGluIGRlZ3JlZXMgdGhlIGV5ZSBkaXJlY3Rpb24gbXVzdCBjaGFuZ2UgdG8gdHJpZ2dlciBhIGJsaW5rIGFuaW1hdGlvblxuY29uc3QgQmxpbmtUaHJlc2hvbGQgPSAzNTtcblxuLy8gTWF4aW11bSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIHVzZSBmb3IgY2FsY3VsYXRpbmcgbG9vayBzcGVlZFxuY29uc3QgTWF4RGVsdGEgPSAxMDAgLyAzO1xuXG4vKipcbiAqIFBvaW50T2ZJbnRlcmVzdCBjb250cm9scyB0aGUgZ2F6ZSBkaXJlY3Rpb24gb2YgdGhlIGhvc3QuIEdpdmVuIG9uZSBvciBtb3JlXG4gKiBhbmltYXRpb25zIG9mIHR5cGUgQmxlbmQyZFN0YXRlLCBpdCBjYWxjdWxhdGVzIHRoZSBhbmdsZXMgYmV0d2VlbiB0aGUgbG9va1RyYWNrZXJcbiAqIG9iamVjdCAoZ2VuZXJhbGx5IGEgam9pbnQgaW4gdGhlIGhvc3QncyBza2VsZXRvbikgYW5kIHRoZSBsb29rVGFyZ2V0ICh0aGUgb2JqZWN0XG4gKiB0aGUgaG9zdCBzaG91bGQgbG9vayBhdCkgYW5kIGRyaXZlcyB0aGUgbWFuYWdlZCBCbGVuZDJkU3RhdGVzJyBYIGFuZCBZIGJsZW5kXG4gKiB2YWx1ZXMgdXNpbmcgdGhlIHJlc3VsdC4gWW91IGNhbiBvcHRpb25hbGx5IGFkZCBzYWNjYWRpYyBtb3ZlbWVudCB0byBhbnkgbWFuYWdlZFxuICogYW5pbWF0aW9uIHRvIGhlbHAgbWFrZSB0aGUgaG9zdCdzIGV5ZXMgYXBwZWFyIGFsaXZlIHdoZW4gZm9jdXNlZCBvbiB0aGUgc2FtZVxuICogcG9pbnQgZm9yIGV4dGVkZWQgcGVyaW9kcyBvZiB0aW1lLiBJZiBibGluayBhbmltYXRpb25zIGFyZSBzcGVjaWZpZWQsIGEgYmxpbmtcbiAqIHdpbGwgYmUgcGxheWVkIGR1cmluZyBsYXJnZSBjaGFuZ2VzIGluIGdhemUgZGlyZWN0aW9uLlxuICpcbiAqIEBleHRlbmRzIEFic3RyYWN0SG9zdEZlYXR1cmVcbiAqIEBhbGlhcyBjb3JlL1BvaW50T2ZJbnRlcmVzdEZlYXR1cmVcbiAqIEBpbXBsZW1lbnRzIFNTTUxTcGVlY2htYXJrSW50ZXJmYWNlXG4gKiBAaW1wbGVtZW50cyBNYW5hZ2VkQW5pbWF0aW9uTGF5ZXJJbnRlcmZhY2VcbiAqL1xuY2xhc3MgUG9pbnRPZkludGVyZXN0RmVhdHVyZSBleHRlbmRzIEFic3RyYWN0SG9zdEZlYXR1cmUubWl4KFxuICBTU01MU3BlZWNobWFya0ludGVyZmFjZS5NaXhpbixcbiAgTWFuYWdlZEFuaW1hdGlvbkxheWVySW50ZXJmYWNlLk1peGluXG4pIHtcbiAgLyoqXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKlxuICAgKiBAcGFyYW0ge2NvcmUvSG9zdE9iamVjdH0gaG9zdCAtIEhvc3QgdGhhdCBvd25zIHRoZSBmZWF0dXJlLlxuICAgKiBAcGFyYW0ge09iamVjdD19IG9wdGlvbnMgLSBPcHRpb25zIGZvciB0aGUgZmVhdHVyZS5cbiAgICogQHBhcmFtIHtPYmplY3Q9fSB0YXJnZXQgLSAzRCB0cmFuc2Zvcm1hdGlvbiBub2RlIHRoYXQgdGhlIGhvc3Qgc2hvdWxkIHRyeSB0b1xuICAgKiBsb29rIGF0LlxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucy5sb29rVHJhY2tlciAtIDNEIHRyYW5zZm9ybWF0aW9uIG5vZGUgdGhhdCByZXByZXNlbnRzXG4gICAqIHRoZSBkaXJlY3Rpb24gdGhlIGhvc3QgaXMgY3VycmVudGx5IGxvb2tpbmcgZHVyaW5nIGFuaW1hdGlvbi5cbiAgICogQHBhcmFtIHtPYmplY3Q9fSBvcHRpb25zLnNjZW5lIC0gRW5naW5lLXNwZWNpZmljIHNjZW5lIG9iamVjdCB0aGF0IGNvbnRhaW5zXG4gICAqIHRoZSBob3N0LiBUaGlzIG9iamVjdCBtdXN0IGJlIGRlZmluZWQgaWYgdXNpbmcgJ3NldFRhcmdldEJ5TmFtZScgb3IgJ1NldFRhcmdldEJ5SWQnXG4gICAqIG1ldGhvZHMuXG4gICAqIEBwYXJhbSB7T2JqZWN0PX0gbG9va09wdGlvbnMgLSBPcHRpb25zIGZvciB0aGUgbG9vayBhbmltYXRpb24gbGF5ZXJzLlxuICAgKiBAcGFyYW0ge251bWJlcn0gW2xvb2tPcHRpb25zLmJsZW5kVGltZT0wLjFdIC0gRGVmYXVsdCBhbW91bnQgb2YgdGltZSBpdCB3aWxsXG4gICAqIHRha2UgdG8gbWFuaXB1bGF0ZSB0aGUgd2VpZ2h0cyBvZiB0aGUgbG9vayBsYXllcnMuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbbG9va09wdGlvbnMuZWFzaW5nRm49UXVhZHJhdGljLkluT3V0XSAtIERlZmF1bHQgZWFzaW5nIGZ1bmN0aW9uXG4gICAqIHRvIHVzZSB3aGVuIG1hbmlwdWxhdGluZyBsb29rIGxheWVyIHdlaWdodHMuXG4gICAqIEBwYXJhbSB7QXJyYXkuPE9iamVjdD59IFtsb29rT3B0aW9ucy5sYXllcnM9W11dIC0gQW4gYXJyYXkgb2YgbGF5ZXIgb3B0aW9uc1xuICAgKiBvYmplY3RzIHRvIHJlZ2lzdGVyIGFzIGxvb2sgbGF5ZXJzLlxuICAgKiBAcGFyYW0ge09iamVjdD19IGJsaW5rT3B0aW9ucyAtIE9wdGlvbnMgZm9yIHRoZSBibGluayBhbmltYXRpb24gbGF5ZXJzLlxuICAgKiBAcGFyYW0ge251bWJlcn0gW2JsaW5rT3B0aW9ucy5ibGVuZFRpbWU9MC4wNzVdIC0gRGVmYXVsdCBhbW91bnQgb2YgdGltZSBpdFxuICAgKiB3aWxsIHRha2UgdG8gbWFuaXB1bGF0ZSB0aGUgd2VpZ2h0cyBvZiB0aGUgYmxpbmsgbGF5ZXJzLlxuICAgKiBAcGFyYW0ge251bWJlcn0gW2JsaW5rT3B0aW9ucy5lYXNpbmdGbj1RdWFkcmF0aWMuSW5PdXRdIC0gRGVmYXVsdCBlYXNpbmcgZnVuY3Rpb25cbiAgICogdG8gdXNlIHdoZW4gbWFuaXB1bGF0aW5nIGJsaW5rIGxheWVyIHdlaWdodHMuXG4gICAqIEBwYXJhbSB7QXJyYXkuPE9iamVjdD59IFtibGlua09wdGlvbnMubGF5ZXJzPVtdXSAtIEFuIGFycmF5IG9mIGxheWVyIG9wdGlvbnNcbiAgICogb2JqZWN0cyB0byByZWdpc3RlciBhcyBibGluayBsYXllcnMuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihcbiAgICBob3N0LFxuICAgIHtcbiAgICAgIHRhcmdldCxcbiAgICAgIGxvb2tUcmFja2VyLFxuICAgICAgc2NlbmVcbiAgICB9ID0ge30sXG4gICAge1xuICAgICAgYmxlbmRUaW1lOiBsb29rQmxlbmRUaW1lID0gMC4xLFxuICAgICAgZWFzaW5nRm46IGxvb2tFYXNpbmdGbiA9IFF1YWRyYXRpYy5Jbk91dCxcbiAgICAgIGxheWVyczogbG9va0xheWVycyA9IFtdLFxuICAgIH0gPSB7fSxcbiAgICB7XG4gICAgICBibGVuZFRpbWU6IGJsaW5rQmxlbmRUaW1lID0gMC4wNzUsXG4gICAgICBlYXNpbmdGbjogYmxpbmtFYXNpbmdGbiA9IFF1YWRyYXRpYy5Jbk91dCxcbiAgICAgIGxheWVyczogYmxpbmtMYXllcnMgPSBbXSxcbiAgICB9ID0ge31cbiAgKSB7XG4gICAgc3VwZXIoaG9zdCk7XG5cbiAgICBpZiAoIXRoaXMuY29uc3RydWN0b3IuX3ZhbGlkYXRlVHJhbnNmb3JtT2JqZWN0KGxvb2tUcmFja2VyKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgaW5pdGlhbGl6ZSBQb2ludE9mSW50ZXJlc3RGZWF0dXJlIG9uIGhvc3QgJHt0aGlzLl9ob3N0LmlkfS4gTG9va1RyYWNrZXIgbXVzdCBiZSBkZWZpbmVkIGFzIGEgdmFsaWQgdHJhbnNmb3JtYXRpb24gb2JqZWN0LmApO1xuICAgIH1cbiAgICB0aGlzLl9sb29rVHJhY2tlciA9IGxvb2tUcmFja2VyO1xuXG4gICAgdGhpcy5fc2NlbmUgPSBzY2VuZTtcbiAgICB0aGlzLl90YXJnZXQgPSB0YXJnZXQgfHwgbnVsbDtcbiAgICB0aGlzLl9wcmV2VGFyZ2V0UG9zID0gWzAsIDAsIDBdO1xuICAgIHRoaXMuX2lzVGFyZ2V0TW92aW5nID0gZmFsc2U7XG4gICAgdGhpcy5fbG9va0xheWVycyA9IHRoaXMuX2xvb2tMYXllcnMgfHwge307XG4gICAgdGhpcy5fdHJhY2tpbmdDb25maWdzID0gdGhpcy5fdHJhY2tpbmdDb25maWdzIHx8IFtdO1xuICAgIHRoaXMuX2JsaW5rTGF5ZXJzID0gdGhpcy5fYmxpbmtMYXllcnMgfHwge307XG5cbiAgICAvLyBSZWdpc3RlciB0aGUgbG9vayBsYXllcnNcbiAgICBsb29rTGF5ZXJzLmZvckVhY2goKHtcbiAgICAgIG5hbWUsXG4gICAgICBhbmltYXRpb24sXG4gICAgICBtYXhTcGVlZCxcbiAgICAgIHJlZmVyZW5jZSxcbiAgICAgIGZvcndhcmRBeGlzLFxuICAgICAgaGFzU2FjY2FkZSxcbiAgICAgIGJsZW5kVGltZSxcbiAgICAgIGVhc2luZ0ZuXG4gICAgfSkgPT4ge1xuICAgICAgdGhpcy5yZWdpc3Rlckxvb2tMYXllcihuYW1lLCB7XG4gICAgICAgIGFuaW1hdGlvbixcbiAgICAgICAgbWF4U3BlZWQsXG4gICAgICAgIHJlZmVyZW5jZSxcbiAgICAgICAgZm9yd2FyZEF4aXMsXG4gICAgICAgIGhhc1NhY2NhZGUsXG4gICAgICAgIGJsZW5kVGltZTogYmxlbmRUaW1lICE9PSB1bmRlZmluZWQgPyBibGVuZFRpbWUgOiBsb29rQmxlbmRUaW1lLFxuICAgICAgICBlYXNpbmdGbjogZWFzaW5nRm4gIT09IHVuZGVmaW5lZCA/IGVhc2luZ0ZuIDogbG9va0Vhc2luZ0ZuLFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICAvLyBSZWdpc3RlciB0aGUgYmxpbmsgbGF5ZXJzXG4gICAgYmxpbmtMYXllcnMuZm9yRWFjaCgoeyBuYW1lLCBhbmltYXRpb24sIGJsZW5kVGltZSwgZWFzaW5nRm4gfSkgPT4ge1xuICAgICAgdGhpcy5yZWdpc3RlckJsaW5rTGF5ZXIobmFtZSwge1xuICAgICAgICBhbmltYXRpb24sXG4gICAgICAgIGJsZW5kVGltZTogYmxlbmRUaW1lICE9PSB1bmRlZmluZWQgPyBibGVuZFRpbWUgOiBibGlua0JsZW5kVGltZSxcbiAgICAgICAgZWFzaW5nRm46IGVhc2luZ0ZuICE9PSB1bmRlZmluZWQgPyBlYXNpbmdGbiA6IGJsaW5rRWFzaW5nRm4sXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGFuZCBzZXRzIHRoZSB0YXJnZXQgb2JqZWN0IHRoZSBob3N0IHNob3VsZCBsb29rIGF0LlxuICAgKlxuICAgKiBAdHlwZSB7T2JqZWN0fG51bGx9XG4gICAqL1xuICBnZXQgdGFyZ2V0KCkge1xuICAgIHJldHVybiB0aGlzLl90YXJnZXQ7XG4gIH1cblxuICBzZXQgdGFyZ2V0KHRhcmdldCkge1xuICAgIHRoaXMuX3RhcmdldCA9IHRhcmdldCB8fCBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIHZlY3RvciByZXByZXNlbnRpbmcgdGhlIGdsb2JhbCBwb3NpdGlvbiBvZiBhbiBvYmplY3QuIFNob3VsZCBiZVxuICAgKiBvdmVybG9hZGVkIGZvciBlYWNoIHJlbmRlcmluZyBlbmdpbmUgaW1wbGVtZW50YXRpb24uXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqXG4gICAqIEBwYXJhbSB7YW55fSBfb2JqIC0gRW5naW5lLXNwZWNpZmljIDNEIHRyYW5zZm9ybSBvYmplY3QuXG4gICAqXG4gICAqIEByZXR1cm5zIHtBcnJheS48bnVtYmVyPn0gLSBBbiBhcnJheSBjb25zaXN0aW5nIG9mIHRocmVlIG51bWJlcnMgcmVwcmVzZW50aW5nXG4gICAqIHgsIHkgYW5kIHogY29vcmRpbmF0ZXMuXG4gICAqL1xuICBzdGF0aWMgX2dldFdvcmxkUG9zaXRpb24ob2JqKSB7XG4gICAgcmV0dXJuIFswLCAwLCAwXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSBtYXRyaXggcmVwcmVzZW50aW5nIHRoZSBnbG9iYWwgdHJhbnNmb3JtYXRpb24gbWF0cml4IG9mIGFuIG9iamVjdC5cbiAgICogU2hvdWxkIGJlIG92ZXJsb2FkZWQgZm9yIGVhY2ggcmVuZGVyaW5nIGVuZ2luZSBpbXBsZW1lbnRhdGlvbi5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICpcbiAgICogQHBhcmFtIHthbnl9IG9iaiAtIEVuZ2luZS1zcGVjaWZpYyAzRCB0cmFuc2Zvcm0gb2JqZWN0LlxuICAgKlxuICAgKiBAcmV0dXJucyB7QXJyYXkuPG51bWJlcj59IC0gQW4gYXJyYXkgY29uc2lzdGluZyBvZiAxNiBudW1iZXJzIHJlcHJlc2VudGluZ1xuICAgKiB0aGUgM2QgdHJhbnNmb3JtYXRpb24uXG4gICAqL1xuICBzdGF0aWMgX2dldFdvcmxkTWF0cml4KG9iaikge1xuICAgIHJldHVybiBbMSwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMCwgMV07XG4gIH1cblxuICAvKipcbiAgICogUm90YXRlIHRoZSBnaXZlbiBsb2NhbCBkaXJlY3Rpb24gdmVjdG9yIGJ5IHRoZSBvYmplY3QncyB3b3JsZCByb3RhdGlvbiBtYXRyaXguXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqXG4gICAqIEBwYXJhbSB7YW55fSBvYmogLSBFbmdpbmUtc3BlY2lmaWMgM0QgdHJhbnNmb3JtIG9iamVjdC5cbiAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gZm9yd2FyZFZlY3RvciAtIFVuaXQgdmVjdG9yIHJlcHJlc2VudGluZyB0aGUgbG9jYWxcbiAgICogZm9yd2FyZCBkaXJlY3Rpb24gb2YgdGhlIG9iamVjdC5cbiAgICpcbiAgICogQHJldHVybnMge0FycmF5LjxudW1iZXI+fVxuICAgKi9cbiAgc3RhdGljIF9nZXRPYmplY3REaXJlY3Rpb24ob2JqLCBmb3J3YXJkVmVjdG9yID0gQXhpc01hcC5Qb3NpdGl2ZVopIHtcbiAgICBjb25zdCByb3RhdGlvbiA9IE1hdGhVdGlscy5nZXRSb3RhdGlvbk1hdHJpeCh0aGlzLl9nZXRXb3JsZE1hdHJpeChvYmopKTtcblxuICAgIHJldHVybiBNYXRoVXRpbHMucm90YXRlVmVjdG9yKGZvcndhcmRWZWN0b3IsIHJvdGF0aW9uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgaG9yaXpvbnRhbCBhbmQgdmVydGljYWwgbG9vayBhbmdsZXMgaW4gZGVncmVlcyBnaXZlbiBzcGhlcmljYWwgdGhldGFcbiAgICogYW5kIHBoaSBhbmdsZXMgaW4gcmFkaWFucy5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHRoZXRhIC0gVmVydGljYWwvcG9sYXIgYW5nbGUgaW4gcmFkaWFucyB3aGVyZSAwIHBvaW50cyBkaXJlY3RseVxuICAgKiBhbG9uZyBwb3NpdGl2ZSBZIGF4aXMuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBwaGkgLSBIb3Jpem9udGFsL2F6aW11dGhhbCBhbmdsZSBpbiByYWRpYW5zLlxuICAgKlxuICAgKiBAcmV0dXJucyB7T2JqZWN0fSAtIEFuIG9iamVjdCB3aXRoIHRoZSBzaWduYXR1cmUge2g6IG51bWJlciwgdjogbnVtYmVyfSB3aGVyZVxuICAgKiBoIHJlcHJlc2VudHMgaG9yaXpvbnRhbCByb3RhdGlvbiBpbiBkZWdyZWVzIGFuZCB2IHJlcHJlc2VudHMgdmVydGljYWwgcm90YXRpb25cbiAgICogaW4gZGVncmVlcy5cbiAgICovXG4gIHN0YXRpYyBfc3BoZXJpY2FsVG9CbGVuZFZhbHVlKHRoZXRhLCBwaGkpIHtcbiAgICBjb25zdCBoID0gTWF0aFV0aWxzLnRvRGVncmVlcyhwaGkpO1xuXG4gICAgLy8gT2Zmc2V0IHRoZSB2ZXJ0aWNhbCBhbmdsZSBzbyAwIGlzIHBvaW50aW5nIGZvcndhcmQgaW5zdGVhZCBvZiB1cFxuICAgIGNvbnN0IHYgPSBNYXRoVXRpbHMudG9EZWdyZWVzKHRoZXRhKSAtIDkwO1xuXG4gICAgLy8gQ29udmVydCB2ZXJ0aWNhbCBhbmdsZSB0byAtMTgwLCAxODAgcmFuZ2VcbiAgICByZXR1cm4geyBoLCB2IH1cbiAgfVxuXG4gIF9vbkxheWVyQWRkZWQoeyBuYW1lIH0pIHtcbiAgICB0aGlzLl9sb29rTGF5ZXJzID0gdGhpcy5fbG9va0xheWVycyB8fCB7fTtcbiAgICB0aGlzLl9ibGlua0xheWVycyA9IHRoaXMuX2JsaW5rTGF5ZXJzIHx8IHt9O1xuXG4gICAgc3VwZXIuX29uTGF5ZXJBZGRlZCh7IG5hbWUgfSk7XG5cbiAgICAvLyBWYWxpZGF0ZSB0aGUgbG9vayBhbmltYXRpb25cbiAgICBpZiAodGhpcy5fbG9va0xheWVyc1tuYW1lXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLl9yZWdpc3Rlckxvb2tBbmltYXRpb24obmFtZSwgdGhpcy5fbG9va0xheWVyc1tuYW1lXSk7XG4gICAgfVxuICB9XG5cbiAgX29uQW5pbWF0aW9uQWRkZWQoeyBsYXllck5hbWUsIGFuaW1hdGlvbk5hbWUgfSkge1xuICAgIHRoaXMuX2xvb2tMYXllcnMgPSB0aGlzLl9sb29rTGF5ZXJzIHx8IHt9O1xuICAgIHRoaXMuX2JsaW5rTGF5ZXJzID0gdGhpcy5fYmxpbmtMYXllcnMgfHwge307XG5cbiAgICBzdXBlci5fb25BbmltYXRpb25BZGRlZCh7IGxheWVyTmFtZSB9KTtcblxuICAgIC8vIFZhbGlkYXRlIHRoZSBsb29rIGFuaW1hdGlvblxuICAgIGlmICh0aGlzLl9sb29rTGF5ZXJzW2xheWVyTmFtZV0gPT09IGFuaW1hdGlvbk5hbWUpIHtcbiAgICAgIHRoaXMuX3JlZ2lzdGVyTG9va0FuaW1hdGlvbihsYXllck5hbWUsIGFuaW1hdGlvbk5hbWUpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBFbnN1cmUgdGhhdCByZWdpc3RlcmVkIGxvb2sgYW5pbWF0aW9ucyBhcmUgQmxlbmQyZFN0YXRlcy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVyTmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRoYXQgY29udGFpbnMgdGhlIGxvb2sgYW5pbWF0aW9uLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYW5pbWF0aW9uTmFtZSAtIE5hbWUgb2YgdGhlIGFuaW1hdGlvbi5cbiAgICovXG4gIF9yZWdpc3Rlckxvb2tBbmltYXRpb24obGF5ZXJOYW1lLCBhbmltYXRpb25OYW1lKSB7XG4gICAgaWYgKHRoaXMuX21hbmFnZWRMYXllcnNbbGF5ZXJOYW1lXS5hbmltYXRpb25zW2FuaW1hdGlvbk5hbWVdLmlzQWN0aXZlKSB7XG4gICAgICBpZiAoXG4gICAgICAgIEFuaW1hdGlvblR5cGVzW3RoaXMuX2hvc3QuQW5pbWF0aW9uRmVhdHVyZS5nZXRBbmltYXRpb25UeXBlKFxuICAgICAgICAgIGxheWVyTmFtZSxcbiAgICAgICAgICBhbmltYXRpb25OYW1lXG4gICAgICAgICldICE9PSBBbmltYXRpb25UeXBlcy5ibGVuZDJkXG4gICAgICApIHtcbiAgICAgICAgLy8gV2FybiBhbmQgZGVhY3RpdmF0ZSBpZiB0aGUgcmVnaXN0ZXJlZCBzdGF0ZSBpcyBub3QgYmxlbmQyZFxuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgYENhbm5vdCByZWdpc3RlciBQb2ludCBvZiBJbnRlcmVzdCBsb29rIGFuaW1hdGlvbiAke2FuaW1hdGlvbk5hbWV9IG9uIGxheWVyICR7bGF5ZXJOYW1lfSBmb3IgaG9zdCAke3RoaXMuX2hvc3QuaWR9LiBMb29rIGFuaW1hdGlvbnMgbXVzdCBiZSBvZiB0eXBlICdibGVuZDJkJy5gXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuX21hbmFnZWRMYXllcnNbbGF5ZXJOYW1lXS5hbmltYXRpb25zW1xuICAgICAgICAgIGFuaW1hdGlvbk5hbWVcbiAgICAgICAgXS5pc0FjdGl2ZSA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiB0aGUgZ2l2ZW4gb2JqZWN0IGlzIG5vdCBvZiBhbiBlbmdpbmUtc3BlY2lmaWMgdHlwZS4gU2hvdWxkXG4gICAqIGJlIG92ZXJsb2FkZWQgZm9yIGVhY2ggcmVuZGVyaW5nIGVuZ2luZSBpbXBsZW1lbnRhdGlvbi5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICpcbiAgICogQHBhcmFtIHthbnl9IG9iaiAtIE9iamVjdCB0byB2YWxpZGF0ZS5cbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBzdGF0aWMgX3ZhbGlkYXRlVHJhbnNmb3JtT2JqZWN0KG9iaikge1xuICAgIHJldHVybiBvYmogaW5zdGFuY2VvZiBPYmplY3Q7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgdGhlIGdpdmVuIGNvbmZpZ3VyYXRpb24gb2JqZWN0IGhhcyBhbHJlYWR5IGJlZW4gc3RvcmVkIGFzIGEgdHJhY2tpbmdcbiAgICogY29uZmlnLiBJZiBpdCBoYXMsIHJldHVybiB0aGUgc3RvcmVkIGNvbmZpZ3VyYXRpb24uIE90aGVyd2lzZSwgc3RvcmUgYW5kXG4gICAqIHJldHVybiBpdC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyAtIE9iamVjdCBjb250YWluaW5nIHRyYWNrZXIsIHJlZmVyZW5jZSBhbmQgZm9yd2FyZEF4aXNcbiAgICogcHJvcGVydGllcy5cbiAgICpcbiAgICogQHJldHVybnMge09iamVjdH1cbiAgICovXG4gIF9hZGRUcmFja2luZ0NvbmZpZyhjb25maWcpIHtcbiAgICBjb25zdCB0cmFja2luZ0NvbmZpZyA9IHRoaXMuX3RyYWNraW5nQ29uZmlncy5maW5kKGMgPT5cbiAgICAgIGMucmVmZXJlbmNlID09PSBjb25maWcucmVmZXJlbmNlICYmIGMuZm9yd2FyZEF4aXMgPT09IGNvbmZpZy5mb3J3YXJkQXhpc1xuICAgICk7XG5cbiAgICBpZiAodHJhY2tpbmdDb25maWcpIHtcbiAgICAgIHJldHVybiB0cmFja2luZ0NvbmZpZztcbiAgICB9IGVsc2Uge1xuICAgICAgY29uZmlnLmFuZ2xlcyA9IHsgaDogMCwgdjogMCB9O1xuICAgICAgY29uZmlnLnByZXZBbmdsZXMgPSB7IGg6IDAsIHY6IDAgfTtcbiAgICAgIHRoaXMuX3RyYWNraW5nQ29uZmlncy5wdXNoKGNvbmZpZyk7XG4gICAgICByZXR1cm4gY29uZmlnO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIGRpc3RhbmNlIGJldHdlZW4gdGhlIGxvb2sgdHJhY2tlciBhbmQgdGhlIGxvb2sgdGFyZ2V0LlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgX2dldFRhcmdldERpc3RhbmNlKCkge1xuICAgIC8vIEZpbmQgdGhlIHZlY3RvciBiZXR3ZWVuIHRoZSBnbG9iYWwgcG9zaXRpb25zIG9mIHRyYWNrZXIgYW5kIHRhcmdldFxuICAgIGNvbnN0IHNvdXJjZVBvc2l0aW9uID0gdGhpcy5jb25zdHJ1Y3Rvci5fZ2V0V29ybGRQb3NpdGlvbih0aGlzLl9sb29rVHJhY2tlcik7XG4gICAgY29uc3QgdGFyZ2V0UG9zaXRpb24gPSB0aGlzLmNvbnN0cnVjdG9yLl9nZXRXb3JsZFBvc2l0aW9uKHRoaXMuX3RhcmdldCk7XG4gICAgY29uc3QgbG9va1ZlY3RvciA9IFtcbiAgICAgIHRhcmdldFBvc2l0aW9uWzBdIC0gc291cmNlUG9zaXRpb25bMF0sXG4gICAgICB0YXJnZXRQb3NpdGlvblsxXSAtIHNvdXJjZVBvc2l0aW9uWzFdLFxuICAgICAgdGFyZ2V0UG9zaXRpb25bMl0gLSBzb3VyY2VQb3NpdGlvblsyXVxuICAgIF07XG5cbiAgICByZXR1cm4gTWF0aFV0aWxzLmdldFZlY3Rvck1hZ25pdHVkZShsb29rVmVjdG9yKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldCBhbGwgc3RvcmVkIHRyYWNraW5nIGFuZ2xlcyB0byAwLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3Jlc2V0TG9va0FuZ2xlcygpIHtcbiAgICB0aGlzLl90cmFja2luZ0NvbmZpZ3MuZm9yRWFjaCgoeyBhbmdsZXMgfSkgPT4ge1xuICAgICAgYW5nbGVzLmggPSAwO1xuICAgICAgYW5nbGVzLnYgPSAwO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0b3JlIHRoZSBkaWZmZXJlbmNlIGluIGhvcml6b250YWwgYW5kIHZlcnRpY2FsIHJvdGF0aW9uIGZvciB0aGUgdHJhY2tlcidzXG4gICAqIHJlZmVyZW5jZSByb3RhdGlvbiBhbmQgdGhlIGRpcmVjdGlvbiBvZiB0aGUgdGFyZ2V0IGZyb20gdGhlIHRyYWNrZXIuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc2V0TG9va0FuZ2xlcygpIHtcbiAgICAvLyBHZXQgdGhlIGN1cnJlbnQgcG9zaXRpb25zIG9mIHRoZSB0cmFja2VyIGFuZCB0YXJnZXQgb2JqZWN0c1xuICAgIGNvbnN0IHRhcmdldFBvcyA9IHRoaXMuY29uc3RydWN0b3IuX2dldFdvcmxkUG9zaXRpb24odGhpcy5fdGFyZ2V0KTtcbiAgICBjb25zdCB0cmFja2VyUG9zID0gdGhpcy5jb25zdHJ1Y3Rvci5fZ2V0V29ybGRQb3NpdGlvbih0aGlzLl9sb29rVHJhY2tlcik7XG5cbiAgICAvLyBDaGVjayBpZiB0aGUgdGFyZ2V0IGhhcyBtb3ZlZFxuICAgIHRoaXMuX2lzVGFyZ2V0TW92aW5nID0gTWF0aFV0aWxzLmdldFZlY3Rvck1hZ25pdHVkZShbXG4gICAgICB0YXJnZXRQb3NbMF0gLSB0aGlzLl9wcmV2VGFyZ2V0UG9zWzBdLFxuICAgICAgdGFyZ2V0UG9zWzFdIC0gdGhpcy5fcHJldlRhcmdldFBvc1sxXSxcbiAgICAgIHRhcmdldFBvc1syXSAtIHRoaXMuX3ByZXZUYXJnZXRQb3NbMl1dXG4gICAgKSA+IDA7XG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLl9wcmV2VGFyZ2V0UG9zLCB0YXJnZXRQb3MpO1xuXG5cbiAgICAvLyBDYWxjdWxhdGUgdGhlIGhvcml6b250YWwgYW5kIHZlcnRpY2FsIGFuZ2xlcyB0byByb3RhdGUgdG8gdGhlIHRhcmdldFxuICAgIGNvbnN0IHRhcmdldFNwaGVyaWNhbCA9IE1hdGhVdGlscy5jYXJ0ZXNpYW5Ub1NwaGVyaWNhbChcbiAgICAgIHRhcmdldFBvc1swXSAtIHRyYWNrZXJQb3NbMF0sXG4gICAgICB0YXJnZXRQb3NbMV0gLSB0cmFja2VyUG9zWzFdLFxuICAgICAgdGFyZ2V0UG9zWzJdIC0gdHJhY2tlclBvc1syXVxuICAgICk7XG4gICAgY29uc3QgdGFyZ2V0QW5nbGVzID0gdGhpcy5jb25zdHJ1Y3Rvci5fc3BoZXJpY2FsVG9CbGVuZFZhbHVlKFxuICAgICAgdGFyZ2V0U3BoZXJpY2FsWzFdLFxuICAgICAgdGFyZ2V0U3BoZXJpY2FsWzJdXG4gICAgKTtcblxuICAgIC8vIENhbGN1bGF0ZSBhbmdsZXMgcmVsYXRpdmUgdG8gdGhlIHJlZmVyZW5jZSBvYmplY3RzXG4gICAgdGhpcy5fdHJhY2tpbmdDb25maWdzLmZvckVhY2goKHtcbiAgICAgIHJlZmVyZW5jZSxcbiAgICAgIGZvcndhcmRBeGlzLFxuICAgICAgYW5nbGVzXG4gICAgfSkgPT4ge1xuICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBob3Jpem9udGFsIGFuZCB2ZXJ0aWNhbCBhbmdsZXMgdG8gcm90YXRlIHRvIHRoZSBkaXJlY3Rpb24gb2YgdGhlIHRyYWNrZXJcbiAgICAgIGNvbnN0IHJlZkRpcmVjdGlvbiA9IHRoaXMuY29uc3RydWN0b3IuX2dldE9iamVjdERpcmVjdGlvbihcbiAgICAgICAgcmVmZXJlbmNlLFxuICAgICAgICBmb3J3YXJkQXhpcyxcbiAgICAgICk7XG4gICAgICBjb25zdCByZWZTcGhlcmljYWwgPSBNYXRoVXRpbHMuY2FydGVzaWFuVG9TcGhlcmljYWwoLi4ucmVmRGlyZWN0aW9uKTtcbiAgICAgIGNvbnN0IHJlZkFuZ2xlcyA9IHRoaXMuY29uc3RydWN0b3IuX3NwaGVyaWNhbFRvQmxlbmRWYWx1ZShcbiAgICAgICAgcmVmU3BoZXJpY2FsWzFdLFxuICAgICAgICByZWZTcGhlcmljYWxbMl1cbiAgICAgICk7XG5cbiAgICAgIC8vIFN0b3JlIHRoZSBkaWZmZXJlbmNlXG4gICAgICBhbmdsZXMuaCA9IHRhcmdldEFuZ2xlcy5oIC0gcmVmQW5nbGVzLmg7XG4gICAgICBhbmdsZXMudiA9IHRhcmdldEFuZ2xlcy52IC0gcmVmQW5nbGVzLnY7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBob3Jpem9udGFsIGFuZCB2ZXJ0aWNhbCBhbmdsZXMgaXQgd291bGQgcmVxdWlyZSB0byBzaW11bGF0ZSBsb29raW5nXG4gICAqIGF0IHRoZSBnaXZlbiB0eXBlIG9mIGZhY2UgdGFyZ2V0XG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB0YXJnZXRUeXBlIC0gSW50ZWdlciByZXByZXNlbnRpbmcgdGhlIEZhY2VUYXJnZXRUeXBlLlxuICAgKlxuICAgKiBAcmV0dXJucyB7T2JqZWN0fS0gQW4gb2JqZWN0IHdpdGggc2lnbmF0dXJlIHtyOiBudW1iZXIsIGg6IG51bWJlciwgdjogbnVtYmVyfVxuICAgKiB3aGVyZSAncicgcmVwcmVzZW50cyByYWRpdXMsIGggcmVwcmVzZW50cyB0aGUgaG9yaXpvbnRhbC9hemltdXRoYWwgYW5nbGUgYW5kXG4gICAqIHYgcmVwcmVzZW50cyB0aGUgdmVydGljYWwvcG9sYXIgYW5nbGUuXG4gICAqL1xuICBfZ2V0RmFjZVRhcmdldEFuZ2xlcyh0YXJnZXRUeXBlKSB7XG4gICAgLy8gTm8gb2Zmc2V0IHdoZW4gdGhlIHRhcmdldCBpcyB0aGUgY2VudGVyIG9mIHRoZSBleWVzXG4gICAgaWYgKHRhcmdldFR5cGUgPT09IDApIHtcbiAgICAgIHJldHVybiB7IGg6IDAsIHY6IDAgfTtcbiAgICB9XG5cbiAgICAvLyBCdWlsZCBhIHZlY3RvciB0byB0aGUgZmFjZSB0YXJnZXQgdHlwZSB1c2luZyB0aGUgY3VycmVudCBkaXN0YW5jZSB0byB0aGUgdGFyZ2V0XG4gICAgY29uc3QgZGlzdGFuY2UgPSB0aGlzLl9nZXRUYXJnZXREaXN0YW5jZSh0aGlzLl9sb29rVHJhY2tlcik7XG4gICAgY29uc3QgZmFjZVZlY3RvciA9IFsuLi5GYWNlVmVjdG9yc1t0YXJnZXRUeXBlXV07XG4gICAgZmFjZVZlY3RvclsyXSA9IGRpc3RhbmNlO1xuICAgIGNvbnN0IHNwaGVyaWNhbCA9IE1hdGhVdGlscy5jYXJ0ZXNpYW5Ub1NwaGVyaWNhbCguLi5mYWNlVmVjdG9yKTtcblxuICAgIC8vIE1ha2Ugc3VyZSB2YWx1ZXMgYXJlIGNsYW1wZWQgd2l0aGluIHRoZSByYW5nZSBvZiBtb3Rpb24gb2YgdGhlIGh1bWFuIGV5ZSwgaW4gY2FzZSB0aGUgdGFyZ2V0IGlzIHZlcnkgY2xvc2VcbiAgICBjb25zdCBibGVuZFZhbHVlcyA9IHRoaXMuY29uc3RydWN0b3IuX3NwaGVyaWNhbFRvQmxlbmRWYWx1ZShzcGhlcmljYWxbMV0sIHNwaGVyaWNhbFsyXSk7XG4gICAgYmxlbmRWYWx1ZXMuaCA9IE1hdGhVdGlscy5jbGFtcChibGVuZFZhbHVlcy5oLCAtMzUsIDM1KTtcbiAgICBibGVuZFZhbHVlcy52ID0gTWF0aFV0aWxzLmNsYW1wKGJsZW5kVmFsdWVzLnYsIC0yNSwgMzApO1xuXG4gICAgcmV0dXJuIGJsZW5kVmFsdWVzO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZWQgdGhlIHN0b3JlZCBzcGVlZCBhbmQgZHVyYXRpb24gdmFyaWFibGVzIGZvciBhIGxheWVyIGJhc2VkIG9uIHRoZVxuICAgKiBjaGFuZ2UgaW4gaG9yaXpvbnRhbCBhbmQgdmVydGljYWwgYW5nbGVzIG9mIHRoZSB0cmFja2VyLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGF5ZXJOYW1lIC0gTmFtZSBvZiB0aGUgbGF5ZXIgdG8gc3RvcmUgdmFsdWVzIG9uLlxuICAgKiBAcGFyYW0ge251bWJlcn0gaCAtIENoYW5nZSBpbiBob3Jpem9udGFsIGFuZ2xlLCBpbiBkZWdyZWVzLlxuICAgKiBAcGFyYW0ge251bWJlcn0gdiAtIENoYW5nZSBpbiB2ZXJ0aWNhbCBhbmdsZSwgaW4gZGVncmVlcy5cbiAgICovXG4gIF91cGRhdGVMYXllclNwZWVkKGxheWVyTmFtZSwgaCwgdikge1xuICAgIGNvbnN0IGxheWVyID0gdGhpcy5fbWFuYWdlZExheWVyc1tsYXllck5hbWVdO1xuXG4gICAgLy8gRnJvbSBcIlJlYWxpc3RpYyBBdmF0YXIgYW5kIGhlYWQgQW5pbWF0aW9uIFVzaW5nIGEgTmV1cm9iaW9sb2dpY2FsIE1vZGVsIG9mIFZpc3VhbCBBdHRlbnRpb25cIiwgSXR0aSwgRGhhdmFsZSwgUGlnaGluXG4gICAgbGF5ZXIubWF4SFNwZWVkID0gNDczICogKDEgLSBNYXRoLmV4cCgtaCAvIDcuOCkpO1xuICAgIGxheWVyLm1heFZTcGVlZCA9IDQ3MyAqICgxIC0gTWF0aC5leHAoLXYgLyA3LjgpKTtcblxuICAgIC8vIEZyb20gXCJFeWVzIEFsaXZlXCIsIExlZSwgQmFkbGVyXG4gICAgY29uc3QgRDAgPSAwLjAyNTtcbiAgICBjb25zdCBkID0gMC4wMDIzNTtcbiAgICBsYXllci5oRHVyYXRpb24gPSBEMCArIGQgKiBoO1xuICAgIGxheWVyLnZEdXJhdGlvbiA9IEQwICsgZCAqIHY7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBtaWNyb1NhY2NhZGUgb2JqZWN0IHdpdGggbmV3IHJhbmRvbWl6ZWQgdmFsdWVzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGF5ZXJOYW1lIC0gTmFtZSBvZiB0aGUgbGF5ZXIgdGhhdCBvd25zIHRoZSBzYWNjYWRlIG1vdGlvbi5cbiAgICovXG4gIF9zZXRNaWNyb1NhY2NhZGUobGF5ZXJOYW1lKSB7XG4gICAgY29uc3QgbGF5ZXIgPSB0aGlzLl9tYW5hZ2VkTGF5ZXJzW2xheWVyTmFtZV07XG4gICAgY29uc3QgeyBtaWNyb1NhY2NhZGUgfSA9IGxheWVyO1xuXG4gICAgaWYgKHRoaXMuX3RhcmdldCkge1xuICAgICAgLy8gTWljcm8gbW92ZW1lbnRzIHNob3VsZCBiZSBzbWFsbGVyIHdoZW4gZm9jdXNlZCBvbiBhIHRhcmdldFxuICAgICAgbWljcm9TYWNjYWRlLmggPSBVdGlscy5nZXRSYW5kb21GbG9hdCguMDEsIC4xNSk7XG4gICAgICBtaWNyb1NhY2NhZGUudiA9IFV0aWxzLmdldFJhbmRvbUZsb2F0KC4wMSwgLjE1KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTWljcm9zYWNjYWRlcy4gRW5jeWNsb3BlZGlhIG9mIE5ldXJvc2NpZW5jZS4gKDIwMDkpIFNwcmluZ2VyLCBCZXJsaW4sIEhlaWRlbGJlcmcuIGh0dHBzOi8vZG9pLm9yZy8xMC4xMDA3Lzk3OC0zLTU0MC0yOTY3OC0yXzM0OTJcbiAgICAgIG1pY3JvU2FjY2FkZS5oID0gVXRpbHMuZ2V0UmFuZG9tRmxvYXQoLjAxLCAuMyk7XG4gICAgICBtaWNyb1NhY2NhZGUudiA9IFV0aWxzLmdldFJhbmRvbUZsb2F0KC4wMSwgLjMpO1xuICAgIH1cblxuICAgIHRoaXMuX3VwZGF0ZUxheWVyU3BlZWQobGF5ZXJOYW1lLCBtaWNyb1NhY2NhZGUuaCwgbWljcm9TYWNjYWRlLnYpO1xuXG4gICAgLy8gUmVzdGFydCB0aGUgdGltZXJcbiAgICB0aGlzLl9pbml0aWFsaXplTWljcm9UaW1lcihsYXllck5hbWUsIC4uLk1pY3JvU2FjY2FkZVdhaXRSYW5nZXMuZGVmYXVsdCk7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBtYWNyb1NhY2NhZGUgb2JqZWN0IHdpdGggbmV3IHJhbmRvbWl6ZWQgdmFsdWVzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGF5ZXJOYW1lIC0gTmFtZSBvZiB0aGUgbGF5ZXIgdGhhdCBvd25zIHRoZSBzYWNjYWRlIG1vdGlvbi5cbiAgICovXG4gIF9zZXRNYWNyb1NhY2NhZGUobGF5ZXJOYW1lKSB7XG4gICAgY29uc3QgbGF5ZXIgPSB0aGlzLl9tYW5hZ2VkTGF5ZXJzW2xheWVyTmFtZV07XG4gICAgY29uc3QgeyBtYWNyb1NhY2NhZGUgfSA9IGxheWVyO1xuICAgIGxldCBtYWNyb1NhY2NhZGVXYWl0UmFuZ2U7XG5cbiAgICAvLyBJbmNyZWFzZSByYW5kb20gdmFsdWUgcmFuZ2Ugd2hlbiBub3QgZm9jdXNlZCBvbiBhIHRhcmdldFxuICAgIGlmICghdGhpcy5fdGFyZ2V0KSB7XG4gICAgICBtYWNyb1NhY2NhZGVXYWl0UmFuZ2UgPSBNYWNyb1NhY2NhZGVXYWl0UmFuZ2VzLmRlZmF1bHQ7XG5cbiAgICAgIC8vIE5vcm1hbCBodW1hbiBob3Jpem9udGFsIGV5ZSByb3RhdGlvbiBsaW1pdCBpcyBhYm91dCAzNSBkZWdyZWVzXG4gICAgICBjb25zdCBoTGltaXQgPSBVdGlscy5nZXRSYW5kb21GbG9hdCguMTQzLCAuMjg2KTtcbiAgICAgIGNvbnN0IGhGYWN0b3IgPSBVdGlscy5nZXRSYW5kb21GbG9hdCgtaExpbWl0LCBoTGltaXQpO1xuICAgICAgbWFjcm9TYWNjYWRlLmggPSBoRmFjdG9yICogMzU7XG5cbiAgICAgIC8vIE5vcm1hbCBodW1hbiB2ZXJ0aWNhbCBleWUgcm90YXRpb24gbGltaXQgaXMgYWJvdXQgMjUgZGVncmVlcyB1cHdhcmQgYW5kIDMwIGRlZ3JlZXMgZG93bndhcmRcbiAgICAgIGNvbnN0IHZMaW1pdCA9IFV0aWxzLmdldFJhbmRvbUZsb2F0KC4wOTMsIC4xODYpO1xuICAgICAgY29uc3QgdkZhY3RvciA9IFV0aWxzLmdldFJhbmRvbUZsb2F0KC12TGltaXQsIHZMaW1pdCk7XG4gICAgICBtYWNyb1NhY2NhZGUudiA9IHZGYWN0b3IgPiAwID8gdkZhY3RvciAqIDI1IDogdkZhY3RvciAqIDMwO1xuICAgIH1cblxuICAgIC8vIFBpY2sgYSBuZXcgZmFjZSB0YXJnZXRcbiAgICBlbHNlIHtcbiAgICAgIC8vIFNvY2lhbCB0cmlhbmdsZSAtIHNhY2NhZGUgYmV0d2VlbiBleWVzIGFuZCBtb3V0aCwgd2VpZ2h0ZWQgdG8gbG9vayBhdCBleWVzIG1vcmUgb2Z0ZW5cbiAgICAgIHN3aXRjaCAobGF5ZXIuc2FjY2FkZVRhcmdldCkge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgbWFjcm9TYWNjYWRlV2FpdFJhbmdlID0gTWFjcm9TYWNjYWRlV2FpdFJhbmdlcy5leWVUYXJnZXQ7XG4gICAgICAgICAgbGF5ZXIuc2FjY2FkZVRhcmdldCA9IE1hdGgucmFuZG9tKCkgPCAwLjc1ID8gRmFjZVRhcmdldFR5cGVzLkV5ZVJpZ2h0XG4gICAgICAgICAgICA6IEZhY2VUYXJnZXRUeXBlcy5Nb3V0aDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIG1hY3JvU2FjY2FkZVdhaXRSYW5nZSA9IE1hY3JvU2FjY2FkZVdhaXRSYW5nZXMuZXllVGFyZ2V0O1xuICAgICAgICAgIGxheWVyLnNhY2NhZGVUYXJnZXQgPSBNYXRoLnJhbmRvbSgpIDwgMC43NSA/IEZhY2VUYXJnZXRUeXBlcy5FeWVMZWZ0XG4gICAgICAgICAgICA6IEZhY2VUYXJnZXRUeXBlcy5Nb3V0aDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIG1hY3JvU2FjY2FkZVdhaXRSYW5nZSA9IE1hY3JvU2FjY2FkZVdhaXRSYW5nZXMubW91dGhUYXJnZXQ7XG4gICAgICAgICAgbGF5ZXIuc2FjY2FkZVRhcmdldCA9IE1hdGgucmFuZG9tKCkgPCAwLjUgPyBGYWNlVGFyZ2V0VHlwZXMuRXllTGVmdFxuICAgICAgICAgICAgOiBGYWNlVGFyZ2V0VHlwZXMuRXllUmlnaHQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBtYWNyb1NhY2NhZGVXYWl0UmFuZ2UgPSBNYWNyb1NhY2NhZGVXYWl0UmFuZ2VzLmV5ZVRhcmdldDtcbiAgICAgICAgICBsYXllci5zYWNjYWRlVGFyZ2V0ID0gTWF0aC5yYW5kb20oKSA8IDAuNSA/IEZhY2VUYXJnZXRUeXBlcy5FeWVMZWZ0XG4gICAgICAgICAgICA6IEZhY2VUYXJnZXRUeXBlcy5FeWVSaWdodDtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgY29uc3QgeyBoLCB2IH0gPSB0aGlzLl9nZXRGYWNlVGFyZ2V0QW5nbGVzKGxheWVyLnNhY2NhZGVUYXJnZXQpO1xuICAgICAgbWFjcm9TYWNjYWRlLmggPSBoO1xuICAgICAgbWFjcm9TYWNjYWRlLnYgPSB2O1xuICAgIH1cblxuICAgIHRoaXMuX3VwZGF0ZUxheWVyU3BlZWQobGF5ZXJOYW1lLCBtYWNyb1NhY2NhZGUuaCwgbWFjcm9TYWNjYWRlLnYpO1xuXG4gICAgLy8gUmVzdGFydCB0aGUgdGltZXJzXG4gICAgdGhpcy5faW5pdGlhbGl6ZU1pY3JvVGltZXIobGF5ZXJOYW1lLCAuLi5NaWNyb1NhY2NhZGVXYWl0UmFuZ2VzLnBvc3RNYWNybyk7XG4gICAgdGhpcy5faW5pdGlhbGl6ZU1hY3JvVGltZXIobGF5ZXJOYW1lLCAuLi5tYWNyb1NhY2NhZGVXYWl0UmFuZ2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0YXJ0IGEgbmV3IHdhaXQgdGltZXIgdGhhdCB3aWxsIHNldCBhIG5ldyBtaWNybyBzYWNjYWRlIG1vdmVtZW50IHdoZW4gaXRcbiAgICogcmVzb2x2ZXMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllck5hbWUgLSBOYW1lIG9mIHRoZSBsYXllciB0aGF0IG93bnMgdGhlIHNhY2NhZGUgbW90aW9uLlxuICAgKiBAcGFyYW0ge251bWJlcn0gbWluV2FpdFRpbWUgLSBNaW5pbXVtIG51bWJlciBvZiBzZWNvbmRzIGJlZm9yZSBhIG5ldyBzYWNjYWRlXG4gICAqIHdpbGwgYmUgdHJpZ2dlcmVkLlxuICAgKiBAcGFyYW0ge251bWJlcn0gbWF4V2FpdFRpbWUgLSBNYXhpbXVtIG51bWJlciBvZiBzZWNvbmRzIGJlZm9yZSBhIG5ldyBzYWNjYWRlXG4gICAqIHdpbGwgYmUgdHJpZ2dlcmVkLlxuICAgKi9cbiAgX2luaXRpYWxpemVNaWNyb1RpbWVyKGxheWVyTmFtZSwgbWluV2FpdFRpbWUsIG1heFdhaXRUaW1lKSB7XG4gICAgY29uc3QgbGF5ZXIgPSB0aGlzLl9tYW5hZ2VkTGF5ZXJzW2xheWVyTmFtZV07XG4gICAgY29uc3Qgd2FpdFRpbWUgPSBVdGlscy5nZXRSYW5kb21GbG9hdChtaW5XYWl0VGltZSwgbWF4V2FpdFRpbWUpO1xuXG4gICAgaWYgKGxheWVyLm1pY3JvU2FjY2FkZVRpbWVyKSB7XG4gICAgICBsYXllci5taWNyb1NhY2NhZGVUaW1lci5jYW5jZWwoKTtcbiAgICB9XG4gICAgbGF5ZXIubWljcm9TYWNjYWRlVGltZXIgPSBVdGlscy53YWl0KHdhaXRUaW1lLCB7XG4gICAgICBvbkZpbmlzaDogKCkgPT4geyB0aGlzLl9zZXRNaWNyb1NhY2NhZGUobGF5ZXJOYW1lKSB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogU3RhcnQgYSBuZXcgd2FpdCB0aW1lciB0aGF0IHdpbGwgc2V0IGEgbmV3IG1hY3JvIHNhY2NhZGUgbW92ZW1lbnQgd2hlbiBpdFxuICAgKiByZXNvbHZlcy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVyTmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRoYXQgb3ducyB0aGUgc2FjY2FkZSBtb3Rpb24uXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBtaW5XYWl0VGltZSAtIE1pbmltdW0gbnVtYmVyIG9mIHNlY29uZHMgYmVmb3JlIGEgbmV3IHNhY2NhZGVcbiAgICogd2lsbCBiZSB0cmlnZ2VyZWQuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBtYXhXYWl0VGltZSAtIE1heGltdW0gbnVtYmVyIG9mIHNlY29uZHMgYmVmb3JlIGEgbmV3IHNhY2NhZGVcbiAgICogd2lsbCBiZSB0cmlnZ2VyZWQuXG4gICAqL1xuICBfaW5pdGlhbGl6ZU1hY3JvVGltZXIobGF5ZXJOYW1lLCBtaW5XYWl0VGltZSwgbWF4V2FpdFRpbWUpIHtcbiAgICBjb25zdCBsYXllciA9IHRoaXMuX21hbmFnZWRMYXllcnNbbGF5ZXJOYW1lXTtcbiAgICBjb25zdCB3YWl0VGltZSA9IFV0aWxzLmdldFJhbmRvbUZsb2F0KG1pbldhaXRUaW1lLCBtYXhXYWl0VGltZSk7XG5cbiAgICBpZiAobGF5ZXIubWFjcm9TYWNjYWRlVGltZXIpIHtcbiAgICAgIGxheWVyLm1hY3JvU2FjY2FkZVRpbWVyLmNhbmNlbCgpO1xuICAgIH1cbiAgICBsYXllci5tYWNyb1NhY2NhZGVUaW1lciA9IFV0aWxzLndhaXQod2FpdFRpbWUsIHtcbiAgICAgIG9uRmluaXNoOiAoKSA9PiB7IHRoaXMuX3NldE1hY3JvU2FjY2FkZShsYXllck5hbWUpIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIGEgbmV3IHRhcmdldCB0byBsb29rIGF0LlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdHxudWxsfSB0YXJnZXQgLSBUaGUgbmV3IHRhcmdldCB0byBsb29rIGF0LlxuICAgKi9cbiAgc2V0VGFyZ2V0KHRhcmdldCkge1xuICAgIHRoaXMudGFyZ2V0ID0gdGFyZ2V0O1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmRzIGFuIG9iamVjdCBnaXZlbiBpdHMgbmFtZSBhbmQgc2V0cyBpdCBhcyB0aGUgbmV3IHRhcmdldCB0byBsb29rIGF0LlxuICAgKiBTaG91bGQgYmUgb3ZlcmxvYWRlZCBmb3IgZWFjaCByZW5kZXJpbmcgZW5naW5lIGltcGxlbWVudGF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFyZ2V0IC0gTmFtZSB0byBzZWFyY2ggZm9yLlxuICAgKi9cbiAgc2V0VGFyZ2V0QnlOYW1lKG5hbWUpIHtcbiAgICBpZiAoIW5hbWUpIHtcbiAgICAgIHRoaXMuX3RhcmdldCA9IG51bGw7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLl9zY2VuZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3Qgc2V0IFBvaW50T2ZJbnRlcmVzdEZlYXR1cmUgdGFyZ2V0IHVzaW5nIG5hbWUgJHtuYW1lfSBvbiBob3N0ICR7dGhpcy5faG9zdC5pZH0uIFNjZW5lIG11c3QgYmUgZGVmaW5lZC5gKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRmluZHMgYW4gb2JqZWN0IGdpdmVuIGl0cyBpZCBhbmQgc2V0cyBpdCBhcyB0aGUgbmV3IHRhcmdldCB0byBsb29rIGF0LlxuICAgKiBTaG91bGQgYmUgb3ZlcmxvYWRlZCBmb3IgZWFjaCByZW5kZXJpbmcgZW5naW5lIGltcGxlbWVudGF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IHRhcmdldCAtIElkIHRvIHNlYXJjaCBmb3IuXG4gICAqL1xuICBzZXRUYXJnZXRCeUlkKGlkKSB7XG4gICAgaWYgKCFpZCkge1xuICAgICAgdGhpcy5fdGFyZ2V0ID0gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuX3NjZW5lKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBzZXQgUG9pbnRPZkludGVyZXN0RmVhdHVyZSB0YXJnZXQgdXNpbmcgaWQgJHtpZH0gb24gaG9zdCAke3RoaXMuX2hvc3QuaWR9LiBTY2VuZSBtdXN0IGJlIGRlZmluZWQuYCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFN0YXJ0IGtlZXBpbmcgdHJhY2sgb2YgYW4gYW5pbWF0aW9uIGxheWVyIHRoYXQgb3ducyBhIGJsZW5kMmQgYW5pbWF0aW9uIHdpdGhcbiAgICogYmxlbmRXZWlnaHRzIGNvcnJlc3BvbmRpbmcgdG8gaG9yaXpvbnRhbCBhbmQgdmVydGljYWwgbG9vayBhbmdsZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllck5hbWUgLSBOYW1lIG9mIHRoZSBsYXllciB0byBrZWVwIHRyYWNrIG9mLlxuICAgKiBAcGFyYW0ge09iamVjdD19IG9wdGlvbnMgLSBPcHRpb25zIGZvciB0aGUgbGF5ZXIuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5hbmltYXRpb24gPSAnbG9vayddIC0gTmFtZSBvZiB0aGUgYW5pbWF0aW9uIG9uIHRoZVxuICAgKiBsYXllciB3aG9zZSBibGVuZFdlaWdodHMgd2lsbCBiZSBkcml2ZW4gYmFzZWQgb24gdGhlIGFuZ2xlIGJldHdlZW4gdGhlIGxvb2tUcmFja2VyXG4gICAqIGFuZCB0aGUgbG9va1RhcmdldC4gVGhpcyBhbmltYXRpb24gbXVzdCBiZSBvZiB0eXBlIGJsZW5kMmQuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5tYXhTcGVlZCA9IDI1XSAtIFRoZSBtYXhpbXVtIHNwZWVkIGF0IHdoaWNoIHRoZSBibGVuZDJkXG4gICAqIGJsZW5kV2VpZ2h0cyBjYW4gYmUgbWFuaXB1bGF0ZWQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5mb3J3YXJkQXhpcyA9ICdQb3NpdGl2ZVonXSAtIEF4aXMgcG9pbnRpbmcgZnJvbSB0aGVcbiAgICogZnJvbnQgb2YgdGhlIGxvb2tSZWZlcmVuY2Ugb2JqZWN0LiBWYWxpZCBvcHRpb25zIGFyZSAnUG9zaXRpdmVYJywgJ05lZ2F0aXZlWCcsXG4gICAqICdQb3NpdGl2ZVknLCAnTmVnYXRpdmVZJywgJ1Bvc2l0aXZlWicsICdOZWdhdGl2ZVonLlxuICAgKiBAcGFyYW0ge09iamVjdD19IG9wdGlvbnMubG9va1JlZmVyZW5jZSAtIDNEIHRyYW5zZm9ybWF0aW9uIG5vZGUgdGhhdCB0aGUgbG9va1RyYWNrZXJcbiAgICogcm90YXRpb24gbGltaXRzIHNob3VsZCBiZSBjYWxjdWxhdGVkIHJlbGF0aXZlIHRvLiBEZWZhdWx0cyB0byB0aGUgaG9zdCBvd25lci5cbiAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLmhhc1NhY2NhZGUgPSBmYWxzZV0gLSBXaGV0aGVyIG9yIG5vdCB0byBpbmNsdWRlXG4gICAqIHNhY2NhZGljIG1vdGlvbiBvbnRvIHRoZSBibGVuZFdlaWdodCBhbmltYXRpb24uIFRoaXMgc2hvdWxkIG9ubHkgYmUgc2V0IHRvXG4gICAqIHRydWUgZm9yIGJsZW5kMmQgYW5pbWF0aW9ucyByZXByZXNlbnRpbmcgZXllIGFuaW1hdGlvbi5cbiAgICogQHBhcmFtIHtudW1iZXI9fSBbb3B0aW9ucy5ibGVuZFRpbWU9W1BvaW50T2ZJbnRlcmVzdEZlYXR1cmUuREVGQVVMVF9MQVlFUl9PUFRJT05TLmJsZW5kVGltZV17QGxpbmsgUG9pbnRPZkludGVyZXN0RmVhdHVyZSNERUZBVUxUX0xBWUVSX09QVElPTlMjYmxlbmRUaW1lfV0gLVxuICAgKiBEZWZhdWx0IGFtb3VudCBvZiB0aW1lIHRvIHVzZSB3aGVuIG1hbmlwdWxhdGluZyBsYXllciB3ZWlnaHQuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvcHRpb25zLmVhc2luZ0ZuIC0gRGVmYXVsdCBlYXNpbmcgZnVuY3Rpb24gdG8gdXNlIHdoZW5cbiAgICogbWFuaXB1bGF0aW5nIGxheWVyIHdlaWdodC5cbiAgICovXG4gIHJlZ2lzdGVyTG9va0xheWVyKFxuICAgIGxheWVyTmFtZSxcbiAgICB7XG4gICAgICBhbmltYXRpb24gPSAnbG9vaycsXG4gICAgICBtYXhTcGVlZCA9IDI1LFxuICAgICAgcmVmZXJlbmNlLFxuICAgICAgZm9yd2FyZEF4aXMgPSAnUG9zaXRpdmVaJyxcbiAgICAgIGhhc1NhY2NhZGUgPSBmYWxzZSxcbiAgICAgIGJsZW5kVGltZSA9IFBvaW50T2ZJbnRlcmVzdEZlYXR1cmUuREVGQVVMVF9MQVlFUl9PUFRJT05TLmJsZW5kVGltZSxcbiAgICAgIGVhc2luZ0ZuXG4gICAgfSA9IHt9XG4gICkge1xuICAgIC8vIFZhbGlkYXRlIHJlZmVyZW5jZSBvYmplY3RcbiAgICByZWZlcmVuY2UgPSByZWZlcmVuY2UgfHwgdGhpcy5faG9zdC5vd25lcjtcblxuICAgIGlmICghdGhpcy5jb25zdHJ1Y3Rvci5fdmFsaWRhdGVUcmFuc2Zvcm1PYmplY3QocmVmZXJlbmNlKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgaW5pdGlhbGl6ZSByZWdpc3RlciBsb29rIGxheWVyICR7bGF5ZXJOYW1lfSBmb3IgUG9pbnRPZkludGVyZXN0RmVhdHVyZSBvbiBob3N0ICR7dGhpcy5faG9zdC5pZH0uIFJlZmVyZW5jZSBtdXN0IGJlIGRlZmluZWQgYXMgYSB2YWxpZCB0cmFuc2Zvcm1hdGlvbiBvYmplY3QuYCk7XG4gICAgfVxuXG4gICAgLy8gRmluZCB2ZWN0b3IgYXNzb2NpYXRlZCB3aXRoIGF4aXMgc3RyaW5nXG4gICAgZm9yd2FyZEF4aXMgPSBBeGlzTWFwW2ZvcndhcmRBeGlzXSAhPT0gdW5kZWZpbmVkXG4gICAgICA/IEF4aXNNYXBbZm9yd2FyZEF4aXNdXG4gICAgICA6IEF4aXNNYXAuUG9zaXRpdmVaO1xuXG4gICAgLy8gU3RvcmUgdHJhY2tpbmcgY29uZmlndXJhdGlvblxuICAgIGNvbnN0IHRyYWNraW5nQ29uZmlnID0gdGhpcy5fYWRkVHJhY2tpbmdDb25maWcoe1xuICAgICAgcmVmZXJlbmNlLFxuICAgICAgZm9yd2FyZEF4aXNcbiAgICB9KTtcblxuICAgIC8vIFJlZ2lzdGVyIHRoZSBsYXllciBhbmQgYW5pbWF0aW9uXG4gICAgdGhpcy5yZWdpc3RlckxheWVyKGxheWVyTmFtZSwge1xuICAgICAgdHJhY2tpbmdDb25maWcsXG4gICAgICBtYXhTcGVlZCxcbiAgICAgIG1heEhTcGVlZDogdW5kZWZpbmVkLFxuICAgICAgbWF4VlNwZWVkOiB1bmRlZmluZWQsXG4gICAgICBoRHVyYXRpb246IHVuZGVmaW5lZCxcbiAgICAgIHZEdXJhdGlvbjogdW5kZWZpbmVkLFxuICAgICAgaFZlbG9jaXR5OiBbMCwgMF0sXG4gICAgICB2VmVsb2NpdHk6IFswLCAwXSxcbiAgICAgIGhhc1NhY2NhZGUsXG4gICAgICBibGVuZFRpbWUsXG4gICAgICBlYXNpbmdGbixcbiAgICAgIG1pY3JvU2FjY2FkZTogeyBoOiAwLCB2OiAwIH0sXG4gICAgICBtYWNyb1NhY2NhZGU6IHsgaDogMCwgdjogMCB9LFxuICAgICAgc2FjY2FkZVRhcmdldDogRmFjZVRhcmdldFR5cGVzLkV5ZUNlbnRlcixcbiAgICAgIGFuaW1hdGlvbnM6IHsgW2FuaW1hdGlvbl06IHt9IH0sXG4gICAgfSk7XG4gICAgdGhpcy5fbG9va0xheWVyc1tsYXllck5hbWVdID0gYW5pbWF0aW9uO1xuXG4gICAgLy8gVmFsaWRhdGUgdGhlIGxvb2sgYW5pbWF0aW9uXG4gICAgdGhpcy5fcmVnaXN0ZXJMb29rQW5pbWF0aW9uKGxheWVyTmFtZSwgYW5pbWF0aW9uKTtcblxuICAgIC8vIEluaXRpYWxpemUgc2FjY2FkZSB0aW1lcnNcbiAgICBpZiAoaGFzU2FjY2FkZSkge1xuICAgICAgY29uc3QgbWFjcm9TYWNjYWRlV2FpdFJhbmdlID0gdGhpcy5fdGFyZ2V0XG4gICAgICAgID8gTWFjcm9TYWNjYWRlV2FpdFJhbmdlcy5leWVUYXJnZXRcbiAgICAgICAgOiBNYWNyb1NhY2NhZGVXYWl0UmFuZ2VzLmRlZmF1bHQ7XG4gICAgICB0aGlzLl9pbml0aWFsaXplTWljcm9UaW1lcihsYXllck5hbWUsIC4uLk1pY3JvU2FjY2FkZVdhaXRSYW5nZXMuZGVmYXVsdCk7XG4gICAgICB0aGlzLl9pbml0aWFsaXplTWFjcm9UaW1lcihsYXllck5hbWUsIC4uLm1hY3JvU2FjY2FkZVdhaXRSYW5nZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFN0YXJ0IGtlZXBpbmcgdHJhY2sgb2YgYW4gYW5pbWF0aW9uIGxheWVyIHRoYXQgb3ducyBhIGJsaW5rIGFuaW1hdGlvbi4gQmxpbmtcbiAgICogYW5pbWF0aW9ucyBjYW4gYmUgb2YgYW55IHR5cGUsIGJ1dCBpZiBpdCBpcyBvZiB0eXBlIHJhbmRvbUFuaW1hdGlvbiB0aGVuIGFcbiAgICogaXQgd2lsbCBiZSByYW5kb21pemVkIGVhY2ggdGltZSBhIGJsaW5rIGlzIGNhbGxlZC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVyTmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRvIGtlZXAgdHJhY2sgb2YuXG4gICAqIEBwYXJhbSB7T2JqZWN0PX0gb3B0aW9ucyAtIE9wdGlvbnMgZm9yIHRoZSBsYXllci5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmFuaW1hdGlvbiA9ICdibGluayddIC0gTmFtZSBvZiB0aGUgYmxpbmsgYW5pbWF0aW9uXG4gICAqIG9uIHRoZSBsYXllci5cbiAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLmJsZW5kVGltZT1bUG9pbnRPZkludGVyZXN0RmVhdHVyZS5ERUZBVUxUX0xBWUVSX09QVElPTlMuYmxlbmRUaW1lXXtAbGluayBQb2ludE9mSW50ZXJlc3RGZWF0dXJlI0RFRkFVTFRfTEFZRVJfT1BUSU9OUyNibGVuZFRpbWV9XSAtXG4gICAqIERlZmF1bHQgYW1vdW50IG9mIHRpbWUgdG8gdXNlIHdoZW4gbWFuaXB1bGF0aW5nIHRoZSBsYXllcidzIHdlaWdodC5cbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9wdGlvbnMuZWFzaW5nRm4gLSBEZWZhdWx0IGVhc2luZyBmdW5jdGlvbiB0byB1c2Ugd2hlblxuICAgKiBtYW5pcHVsYXRpbmcgdGhlIGxheWVyJ3Mgd2VpZ2h0LlxuICAgKi9cbiAgcmVnaXN0ZXJCbGlua0xheWVyKFxuICAgIGxheWVyTmFtZSxcbiAgICB7XG4gICAgICBhbmltYXRpb24gPSAnYmxpbmsnLFxuICAgICAgYmxlbmRUaW1lID0gUG9pbnRPZkludGVyZXN0RmVhdHVyZS5ERUZBVUxUX0xBWUVSX09QVElPTlMuYmxlbmRUaW1lLFxuICAgICAgZWFzaW5nRm5cbiAgICB9ID0ge31cbiAgKSB7XG4gICAgLy8gUmVnaXN0ZXIgdGhlIGxheWVyIGFuZCBhbmltYXRpb25cbiAgICB0aGlzLnJlZ2lzdGVyTGF5ZXIobGF5ZXJOYW1lLCB7XG4gICAgICBibGVuZFRpbWUsXG4gICAgICBlYXNpbmdGbixcbiAgICAgIGFuaW1hdGlvbnM6IHsgW2FuaW1hdGlvbl06IHt9IH0sXG4gICAgfSk7XG4gICAgdGhpcy5fYmxpbmtMYXllcnNbbGF5ZXJOYW1lXSA9IGFuaW1hdGlvbjtcbiAgfVxuXG4gIHVwZGF0ZShkZWx0YVRpbWUpIHtcbiAgICBzdXBlci51cGRhdGUoZGVsdGFUaW1lKTtcblxuICAgIC8vIFVwZGF0ZSB0aGUgbG9vayBhbmdsZXNcbiAgICBpZiAodGhpcy5fdGFyZ2V0KSB7XG4gICAgICB0aGlzLl9zZXRMb29rQW5nbGVzKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3Jlc2V0TG9va0FuZ2xlcygpO1xuICAgIH1cblxuICAgIGNvbnN0IGRlbHRhU2Vjb25kcyA9IE1hdGgubWluKGRlbHRhVGltZSwgTWF4RGVsdGEpIC8gMTAwMDtcbiAgICBsZXQgdHJpZ2dlckJsaW5rID0gZmFsc2U7XG5cbiAgICAvLyBTZXQgbG9vayBibGVuZCB2YWx1ZXNcbiAgICBPYmplY3QuZW50cmllcyh0aGlzLl9sb29rTGF5ZXJzKS5mb3JFYWNoKChbbGF5ZXJOYW1lLCBhbmltTmFtZV0pID0+IHtcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLl9tYW5hZ2VkTGF5ZXJzW2xheWVyTmFtZV07XG5cbiAgICAgIC8vIEluY3JlbWVudCB0aGUgc2FjY2FkZSB0aW1lcnNcbiAgICAgIGlmIChvcHRpb25zLmlzQWN0aXZlICYmIG9wdGlvbnMuaGFzU2FjY2FkZSkge1xuICAgICAgICBvcHRpb25zLm1pY3JvU2FjY2FkZVRpbWVyLmV4ZWN1dGUoZGVsdGFUaW1lKTtcbiAgICAgICAgb3B0aW9ucy5tYWNyb1NhY2NhZGVUaW1lci5leGVjdXRlKGRlbHRhVGltZSk7XG4gICAgICB9XG5cbiAgICAgIC8vIFNldCB0aGUgYmxlbmQgdmFsdWVzXG4gICAgICBpZiAob3B0aW9ucy5hbmltYXRpb25zW2FuaW1OYW1lXS5pc0FjdGl2ZSkge1xuICAgICAgICBjb25zdCBjdXJyZW50SCA9IHRoaXMuX2hvc3QuQW5pbWF0aW9uRmVhdHVyZS5nZXRBbmltYXRpb25CbGVuZFdlaWdodChcbiAgICAgICAgICBsYXllck5hbWUsIGFuaW1OYW1lLCAnWCdcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgY3VycmVudFYgPSB0aGlzLl9ob3N0LkFuaW1hdGlvbkZlYXR1cmUuZ2V0QW5pbWF0aW9uQmxlbmRXZWlnaHQoXG4gICAgICAgICAgbGF5ZXJOYW1lLCBhbmltTmFtZSwgJ1knXG4gICAgICAgICk7XG5cbiAgICAgICAgbGV0IHRhcmdldEggPSBvcHRpb25zLnRyYWNraW5nQ29uZmlnLmFuZ2xlcy5oO1xuICAgICAgICBsZXQgdGFyZ2V0ViA9IG9wdGlvbnMudHJhY2tpbmdDb25maWcuYW5nbGVzLnY7XG5cbiAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGxvb2sgYW5nbGUgaGFzIGNoYW5nZWQgZW5vdWdoIHRvIHRyaWdnZXIgYSBibGlua1xuICAgICAgICBpZiAodGhpcy5faXNUYXJnZXRNb3ZpbmcgJiYgIXRyaWdnZXJCbGluaykge1xuICAgICAgICAgIGNvbnN0IHByZXZUYXJnZXRIID0gb3B0aW9ucy50cmFja2luZ0NvbmZpZy5wcmV2QW5nbGVzLmg7XG4gICAgICAgICAgY29uc3QgcHJldlRhcmdldFYgPSBvcHRpb25zLnRyYWNraW5nQ29uZmlnLnByZXZBbmdsZXMudjtcbiAgICAgICAgICBjb25zdCBjaGFuZ2VBbW91bnQgPSBNYXRoVXRpbHMudG9EZWdyZWVzKFxuICAgICAgICAgICAgTWF0aFV0aWxzLmdldEFuZ2xlQmV0d2VlbihcbiAgICAgICAgICAgICAgW3ByZXZUYXJnZXRILCBwcmV2VGFyZ2V0Vl0sXG4gICAgICAgICAgICAgIFt0YXJnZXRILCB0YXJnZXRWXVxuICAgICAgICAgICAgKVxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAoY2hhbmdlQW1vdW50ID49IEJsaW5rVGhyZXNob2xkKSB7XG4gICAgICAgICAgICB0cmlnZ2VyQmxpbmsgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIG9wdGlvbnMudHJhY2tpbmdDb25maWcucHJldkFuZ2xlcy5oID0gdGFyZ2V0SDtcbiAgICAgICAgb3B0aW9ucy50cmFja2luZ0NvbmZpZy5wcmV2QW5nbGVzLnYgPSB0YXJnZXRWO1xuXG4gICAgICAgIC8vIEFkZCBpbiB0aGUgc2FjY2FkZSBtb3ZlbWVudFxuICAgICAgICBpZiAob3B0aW9ucy5oYXNTYWNjYWRlKSB7XG4gICAgICAgICAgTWF0aFV0aWxzLmRhbXBWYWx1ZShcbiAgICAgICAgICAgIDAsXG4gICAgICAgICAgICBvcHRpb25zLm1hY3JvU2FjY2FkZS5oICsgb3B0aW9ucy5tYWNyb1NhY2NhZGUuaCxcbiAgICAgICAgICAgIG9wdGlvbnMuaFZlbG9jaXR5LFxuICAgICAgICAgICAgb3B0aW9ucy5oRHVyYXRpb24sXG4gICAgICAgICAgICBvcHRpb25zLm1heEhTcGVlZFxuICAgICAgICAgICk7XG4gICAgICAgICAgdGFyZ2V0SCArPSBvcHRpb25zLmhWZWxvY2l0eVswXTtcbiAgICAgICAgICBNYXRoVXRpbHMuZGFtcFZhbHVlKFxuICAgICAgICAgICAgMCxcbiAgICAgICAgICAgIG9wdGlvbnMubWFjcm9TYWNjYWRlLnYgKyBvcHRpb25zLm1hY3JvU2FjY2FkZS52LFxuICAgICAgICAgICAgb3B0aW9ucy52VmVsb2NpdHksXG4gICAgICAgICAgICBvcHRpb25zLnZEdXJhdGlvbixcbiAgICAgICAgICAgIG9wdGlvbnMubWF4VlNwZWVkXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0YXJnZXRWICs9IG9wdGlvbnMudlZlbG9jaXR5WzBdO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ2xhbXAgdG8gbWF4IHNwZWVkXG4gICAgICAgIGNvbnN0IGZhY3RvciA9IE1hdGhVdGlscy5jbGFtcChkZWx0YVNlY29uZHMgKiBvcHRpb25zLm1heFNwZWVkLCAwLCAxKTtcbiAgICAgICAgdGFyZ2V0SCA9IE1hdGhVdGlscy5sZXJwKGN1cnJlbnRILCB0YXJnZXRILCBmYWN0b3IpO1xuICAgICAgICB0YXJnZXRWID0gTWF0aFV0aWxzLmxlcnAoY3VycmVudFYsIHRhcmdldFYsIGZhY3Rvcik7XG5cbiAgICAgICAgLy8gVXBkYXRlIHRoZSBibGVuZCB2YWx1ZXNcbiAgICAgICAgdGhpcy5faG9zdC5BbmltYXRpb25GZWF0dXJlLnNldEFuaW1hdGlvbkJsZW5kV2VpZ2h0KFxuICAgICAgICAgIGxheWVyTmFtZSxcbiAgICAgICAgICBhbmltTmFtZSxcbiAgICAgICAgICAnWCcsXG4gICAgICAgICAgdGFyZ2V0SFxuICAgICAgICApO1xuICAgICAgICB0aGlzLl9ob3N0LkFuaW1hdGlvbkZlYXR1cmUuc2V0QW5pbWF0aW9uQmxlbmRXZWlnaHQoXG4gICAgICAgICAgbGF5ZXJOYW1lLFxuICAgICAgICAgIGFuaW1OYW1lLFxuICAgICAgICAgICdZJyxcbiAgICAgICAgICB0YXJnZXRWXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoIXRyaWdnZXJCbGluayB8fCAhdGhpcy5faXNUYXJnZXRNb3ZpbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBFeGVjdXRlIGJsaW5rXG4gICAgT2JqZWN0LmVudHJpZXModGhpcy5fYmxpbmtMYXllcnMpLmZvckVhY2goKFtsYXllck5hbWUsIGFuaW1OYW1lXSkgPT4ge1xuICAgICAgY29uc3QgYW5pbWF0aW9uID0gdGhpcy5fbWFuYWdlZExheWVyc1tsYXllck5hbWVdLmFuaW1hdGlvbnNbYW5pbU5hbWVdO1xuXG4gICAgICBpZiAoYW5pbWF0aW9uLmlzQWN0aXZlKSB7XG4gICAgICAgIHRoaXMuX2hvc3QuQW5pbWF0aW9uRmVhdHVyZS5wbGF5QW5pbWF0aW9uKGxheWVyTmFtZSwgYW5pbU5hbWUpO1xuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBpbnN0YWxsQXBpKCkge1xuICAgIC8qKlxuICAgICAqIEBpbm5lclxuICAgICAqIEBuYW1lc3BhY2UgUG9pbnRPZkludGVyZXN0RmVhdHVyZVxuICAgICAqL1xuICAgIGNvbnN0IGFwaSA9IHN1cGVyLmluc3RhbGxBcGkoKTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGFwaSwge1xuICAgICAgLyoqXG4gICAgICAgKiBAbWVtYmVyb2YgUG9pbnRPZkludGVyZXN0RmVhdHVyZVxuICAgICAgICogQGluc3RhbmNlXG4gICAgICAgKiBAc2VlIGNvcmUvUG9pbnRPZkludGVyZXN0RmVhdHVyZSN0YXJnZXRcbiAgICAgICAqL1xuICAgICAgdGFyZ2V0OiB7XG4gICAgICAgIGdldDogKCkgPT4gdGhpcy50YXJnZXQsXG4gICAgICAgIHNldDogdGFyZ2V0ID0+IHsgdGhpcy50YXJnZXQgPSB0YXJnZXQgfSxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICBPYmplY3QuYXNzaWduKGFwaSwge1xuICAgICAgLyoqXG4gICAgICAgKiBAbWVtYmVyb2YgUG9pbnRPZkludGVyZXN0RmVhdHVyZVxuICAgICAgICogQGluc3RhbmNlXG4gICAgICAgKiBAbWV0aG9kXG4gICAgICAgKiBAc2VlIGNvcmUvUG9pbnRPZkludGVyZXN0RmVhdHVyZSNyZWdpc3Rlckxvb2tMYXllclxuICAgICAgICovXG4gICAgICByZWdpc3Rlckxvb2tMYXllcjogdGhpcy5yZWdpc3Rlckxvb2tMYXllci5iaW5kKHRoaXMpLFxuICAgICAgLyoqXG4gICAgICAgKiBAbWVtYmVyb2YgUG9pbnRPZkludGVyZXN0RmVhdHVyZVxuICAgICAgICogQGluc3RhbmNlXG4gICAgICAgKiBAbWV0aG9kXG4gICAgICAgKiBAc2VlIGNvcmUvUG9pbnRPZkludGVyZXN0RmVhdHVyZSNyZWdpc3RlckJsaW5rTGF5ZXJcbiAgICAgICAqL1xuICAgICAgcmVnaXN0ZXJCbGlua0xheWVyOiB0aGlzLnJlZ2lzdGVyQmxpbmtMYXllci5iaW5kKHRoaXMpLFxuICAgICAgLyoqXG4gICAgICAgKiBAbWVtYmVyb2YgUG9pbnRPZkludGVyZXN0RmVhdHVyZVxuICAgICAgICogQGluc3RhbmNlXG4gICAgICAgKiBAbWV0aG9kXG4gICAgICAgKiBAc2VlIGNvcmUvUG9pbnRPZkludGVyZXN0RmVhdHVyZSNzZXRUYXJnZXRcbiAgICAgICAqL1xuICAgICAgc2V0VGFyZ2V0OiB0aGlzLnNldFRhcmdldC5iaW5kKHRoaXMpLFxuICAgICAgLyoqXG4gICAgICAgKiBAbWVtYmVyb2YgUG9pbnRPZkludGVyZXN0RmVhdHVyZVxuICAgICAgICogQGluc3RhbmNlXG4gICAgICAgKiBAbWV0aG9kXG4gICAgICAgKiBAc2VlIGNvcmUvUG9pbnRPZkludGVyZXN0RmVhdHVyZSNzZXRUYXJnZXRCeU5hbWVcbiAgICAgICAqL1xuICAgICAgc2V0VGFyZ2V0QnlOYW1lOiB0aGlzLnNldFRhcmdldEJ5TmFtZS5iaW5kKHRoaXMpLFxuICAgICAgLyoqXG4gICAgICAgKiBAbWVtYmVyb2YgUG9pbnRPZkludGVyZXN0RmVhdHVyZVxuICAgICAgICogQGluc3RhbmNlXG4gICAgICAgKiBAbWV0aG9kXG4gICAgICAgKiBAc2VlIGNvcmUvUG9pbnRPZkludGVyZXN0RmVhdHVyZSNzZXRUYXJnZXRCeUlkXG4gICAgICAgKi9cbiAgICAgIHNldFRhcmdldEJ5SWQ6IHRoaXMuc2V0VGFyZ2V0QnlJZC5iaW5kKHRoaXMpLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGFwaTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBQb2ludE9mSW50ZXJlc3RGZWF0dXJlO1xuZXhwb3J0IHsgQXhpc01hcCB9OyIsIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVC0wXG5pbXBvcnQgQ29yZVBvaW50T2ZJbnRlcmVzdEZlYXR1cmUsIHsgQXhpc01hcCB9IGZyb20gJ2NvcmUvUG9pbnRPZkludGVyZXN0RmVhdHVyZSc7XG5cbi8qKlxuICogQGV4dGVuZHMgY29yZS9Qb2ludE9mSW50ZXJlc3RGZWF0dXJlXG4gKiBAYWxpYXMgQmFieWxvbi5qcy9Qb2ludE9mSW50ZXJlc3RGZWF0dXJlXG4gKi9cbmNsYXNzIFBvaW50T2ZJbnRlcmVzdEZlYXR1cmUgZXh0ZW5kcyBDb3JlUG9pbnRPZkludGVyZXN0RmVhdHVyZSB7XG4gIHN0YXRpYyBfZ2V0V29ybGRQb3NpdGlvbihvYmopIHtcbiAgICByZXR1cm4gb2JqLmdldFdvcmxkTWF0cml4KCkubS5zbGljZSgxMiwgMTUpO1xuICB9XG5cbiAgc3RhdGljIF9nZXRXb3JsZE1hdHJpeChvYmopIHtcbiAgICByZXR1cm4gWy4uLm9iai5nZXRXb3JsZE1hdHJpeCgpLm1dO1xuICB9XG5cbiAgX3ZhbGlkYXRlVHJhbnNmb3JtT2JqZWN0KG9iaikge1xuICAgIHJldHVybiBvYmogaW5zdGFuY2VvZiBCQUJZTE9OLlRyYW5zZm9ybU5vZGU7XG4gIH1cblxuICBzZXRUYXJnZXRCeU5hbWUobmFtZSkge1xuICAgIHN1cGVyLnNldFRhcmdldEJ5TmFtZShuYW1lKTtcbiAgICBpZiAoIW5hbWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnRhcmdldCA9IHRoaXMuX3NjZW5lLmdldFRyYW5zZm9ybU5vZGVCeU5hbWUobmFtZSk7XG4gIH1cblxuICBzZXRUYXJnZXRCeUlkKGlkKSB7XG4gICAgc3VwZXIuc2V0VGFyZ2V0QnlOYW1lKGlkKTtcbiAgICBpZiAoIWlkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy50YXJnZXQgPSB0aGlzLl9zY2VuZS5nZXRUcmFuc2Zvcm1Ob2RlQnlJRChpZCk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgUG9pbnRPZkludGVyZXN0RmVhdHVyZTtcbmV4cG9ydCB7IEF4aXNNYXAgfTtcbiIsIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxyXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTBcclxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9wcmVmZXItZGVmYXVsdC1leHBvcnRcclxuZXhwb3J0IGNvbnN0IGVudiA9ICdiYWJ5bG9uJztcclxuIiwiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTBcblxuaW1wb3J0IFV0aWxzIGZyb20gJ2NvcmUvVXRpbHMnO1xuXG4vKipcbiAqIEEgY29sbGVjdGlvbiBvZiB1c2VmdWwgdGV4dC10by1zcGVlY2ggZnVuY3Rpb25zLlxuICpcbiAqIEBoaWRlY29uc3RydWN0b3JcbiAqL1xuY2xhc3MgVGV4dFRvU3BlZWNoVXRpbHMge1xuICAvKipcbiAgICogUmV0dXJucyBhIG5ldyBzdHJpbmcgd2l0aCBTU01MIG1hcmtzIGluc2VydGVkIGJhc2VkIG9uXG4gICAqIG1hdGNoZXMgYmV0d2VlbiB0aGUgaW5wdXQgc3RyaW5nIGFuZCB0aGUgaW5wdXQgbWFwLiBUaGVcbiAgICogd29yZCBtYXRjaGVzIGFyZSBjYXNlLWluc2Vuc2l0aXZlLiBXb3JkcyB3aXRoaW4gZXhpc3RpbmdcbiAgICogU1NNTCB0YWdzIHdpbGwgbm90IGJlIGFmZmVjdGVkLiBJbnB1dCB0ZXh0IHdpbGwgYmUgc3Vycm91bmRlZFxuICAgKiBieSA8c3BlYWs+PC9zcGVhaz4gdGFncyBpZiBuZWVkZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gSW5wdXQgc3RyaW5nLlxuICAgKiBAcGFyYW0ge29iamVjdH0gbWFwIC0gSW5wdXQgb2JqZWN0IHRoYXQgbWFwcyBtYXJrIGtleXNcbiAgICogdG8gYXJyYXlzIG9mIHdvcmRzLiBFeGFtcGxlOlxuICAgKlxuICAgKiAge1xuICAgKiAgICAnbWFyazpzYWQnIDogWydzYWQnLCAnYmx1ZScsICdkb3duJ10sXG4gICAqICAgICdtYXJrOmhhcHB5JyA6IFsnam95JywgJ2dsYWQnLCAnZ3JlYXQnXSxcbiAgICogICAgJ21hcms6bm8nIDogWydubycsICduYWgnLCAnbmF5JywgJ3N1cmUnXVxuICAgKiAgfVxuICAgKiBAcGFyYW0ge0FycmF5LjxzdHJpbmc+fSBbcmFuZG9tTWFya3MgPSBbXV0gLSBJZiB0aGVyZSBhcmUgc2VudGVuY2VzIHRoYXQgZG9uJ3RcbiAgICogbWF0Y2ggYW55IHdvcmRzIGZyb20gdGhlIG1hcCBvYmplY3QsIG1hcmtzIGZyb20gdGhpcyBhcnJheSB3aWxsIGJlIHJhbmRvbWx5XG4gICAqIGNob3NlbiBhbmQgaW5zZXJ0ZWQuXG4gICAqXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IC0gVXBkYXRlZCBpbnB1dCBzdHJpbmcuXG4gICAqL1xuICBzdGF0aWMgYXV0b0dlbmVyYXRlU1NNTE1hcmtzKHRleHQsIG1hcCwgcmFuZG9tTWFya3MgPSBbXSkge1xuICAgIGlmICh0eXBlb2YgbWFwICE9PSAnb2JqZWN0JyB8fCBtYXAgPT09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYENhbm5vdCBnZW5lcmF0ZSBTU01MIG1hcmtzIGZvciB0ZXh0IFwiJHt0ZXh0fVwiIGJlY2F1c2UgbWFwIGlzIG5vdCBhbiBvYmplY3QuYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBwcm9jZXNzIHRoZSBpbnB1dCBtYXAgaW50byBhbiBpbnRlcm5hbCBmb3JtYXRcbiAgICBjb25zdCBpbnRlcm5hbE1hcCA9IHRoaXMuX3Byb2Nlc3NJbnB1dE1hcChtYXApO1xuXG4gICAgY29uc3Qgc3BlYWtUYWdzID0gWyc8c3BlYWs+JywgJzwvc3BlYWs+J107XG4gICAgY29uc3Qgc3NtbE1hcmtSZWdleCA9IC88bWFyayBuYW1lPSg/OlwifCcpKC4qPykoPzpcInwnKVxcLz4vO1xuICAgIGNvbnN0IHNzbWxUYWdSZWdleCA9IC88W14+XSo+L2c7XG5cbiAgICAvLyBJZGVudGlmeSBhbnkgZXhpc3RpbmcgU1NNTCB0YWdzXG4gICAgY29uc3QgZXhpc3RpbmdUYWdzID0gW107XG4gICAgbGV0IHJlc3VsdCA9IHNzbWxUYWdSZWdleC5leGVjKHRleHQpO1xuXG4gICAgd2hpbGUgKHJlc3VsdCAhPT0gbnVsbCkge1xuICAgICAgZXhpc3RpbmdUYWdzLnB1c2goe1xuICAgICAgICBzdGFydDogcmVzdWx0LmluZGV4LFxuICAgICAgICBlbmQ6IHJlc3VsdC5pbmRleCArIHJlc3VsdFswXS5sZW5ndGgsXG4gICAgICAgIHRleHQ6IHJlc3VsdFswXSxcbiAgICAgIH0pO1xuXG4gICAgICByZXN1bHQgPSBzc21sVGFnUmVnZXguZXhlYyh0ZXh0KTtcbiAgICB9XG5cbiAgICBjb25zdCBjaHVua3MgPSBbXTtcbiAgICBsZXQgaW5kZXggPSAwO1xuICAgIGxldCBzc21sTWFya1Jlc3VsdDtcbiAgICBsZXQgZHVwbGljYXRlTWFya1RvQ2hlY2sgPSBbXTtcbiAgICBleGlzdGluZ1RhZ3MuZm9yRWFjaChleGlzdGluZ1RhZyA9PiB7XG4gICAgICBjb25zdCBzdWJzdHIgPSB0ZXh0LnNsaWNlKGluZGV4LCBleGlzdGluZ1RhZy5zdGFydCk7XG5cbiAgICAgIGlmIChzdWJzdHIgIT09ICcnKSB7XG4gICAgICAgIC8vIGF1dG8tbWFyayBub24tdGFnIHRleHRcbiAgICAgICAgY2h1bmtzLnB1c2goXG4gICAgICAgICAgdGhpcy5faW5zZXJ0TWFya3Moc3Vic3RyLCBpbnRlcm5hbE1hcCwgZHVwbGljYXRlTWFya1RvQ2hlY2spXG4gICAgICAgICk7XG5cbiAgICAgICAgZHVwbGljYXRlTWFya1RvQ2hlY2sgPSBbXTtcbiAgICAgIH1cblxuICAgICAgc3NtbE1hcmtSZXN1bHQgPSBzc21sTWFya1JlZ2V4LmV4ZWMoZXhpc3RpbmdUYWcudGV4dCk7XG5cbiAgICAgIGlmIChzc21sTWFya1Jlc3VsdCAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCBtYXJrVGV4dCA9IHNzbWxNYXJrUmVzdWx0WzFdO1xuICAgICAgICBkdXBsaWNhdGVNYXJrVG9DaGVjay5wdXNoKG1hcmtUZXh0KTtcbiAgICAgIH0gZWxzZSBpZiAoIXNwZWFrVGFncy5pbmNsdWRlcyhleGlzdGluZ1RhZy50ZXh0KSkge1xuICAgICAgICBjaHVua3MucHVzaChleGlzdGluZ1RhZy50ZXh0KTtcbiAgICAgIH1cblxuICAgICAgLy8gYWR2YW5jZSB0aGUgaW5kZXhcbiAgICAgIGluZGV4ID0gZXhpc3RpbmdUYWcuZW5kO1xuICAgIH0pO1xuXG4gICAgY2h1bmtzLnB1c2goXG4gICAgICB0aGlzLl9pbnNlcnRNYXJrcyh0ZXh0LnNsaWNlKGluZGV4KSwgaW50ZXJuYWxNYXAsIGR1cGxpY2F0ZU1hcmtUb0NoZWNrKVxuICAgICk7XG5cbiAgICBsZXQgbWFya2VkVGV4dCA9IGNodW5rcy5qb2luKCcnKTtcblxuICAgIGlmIChyYW5kb21NYXJrcyAmJiByYW5kb21NYXJrcy5sZW5ndGggPiAwKSB7XG4gICAgICAvLyBhZGQgcmFuZG9tIG1hcmtzIHRvIGFueSB1bm1hcmtlZCBzZW50ZW5jZXNcbiAgICAgIG1hcmtlZFRleHQgPSB0aGlzLmFkZE1hcmtzVG9Vbm1hcmtlZFNlbnRlbmNlcyhcbiAgICAgICAgbWFya2VkVGV4dCxcbiAgICAgICAgcmFuZG9tTWFya3NcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIFRleHRUb1NwZWVjaFV0aWxzLnZhbGlkYXRlVGV4dChtYXJrZWRUZXh0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgbmV3IHN0cmluZyB3aXRoIGEgcmFuZG9tIFNTTUwgbWFyayBpbnNlcnRlZCBhdCBlYWNoIHNlbnRlbmNlIHRoYXRcbiAgICogZG9lcyBub3QgYWxyZWFkeSBjb250YWluIGFuIFNTTUwgbWFyay5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSBJbnB1dCBzdHJpbmcuXG4gICAqIEBwYXJhbSB7QXJyYXkuPHN0cmluZz59IG1hcmtzIC0gQW55IGFycmF5IG9mIHJhbmRvbSBTU01MIG1hcmtzIHRvIGNob29zZSBmcm9tXG4gICAqIHdoZW4gbW9kaWZ5aW5nIHRoZSB0ZXh0LlxuICAgKlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cbiAgc3RhdGljIGFkZE1hcmtzVG9Vbm1hcmtlZFNlbnRlbmNlcyh0ZXh0LCBtYXJrcykge1xuICAgIGlmICghbWFya3MgfHwgbWFya3MubGVuZ3RoID09PSAwKSByZXR1cm4gdGV4dDtcblxuICAgIGNvbnN0IHNzbWxNYXJrUmVnZXggPSAvPG1hcmsgbmFtZT0oPzpcInwnKSguKj8pKD86XCJ8JylcXC8+L2c7XG4gICAgY29uc3Qgc3NtbFRhZ1JlZ2V4ID0gLzxbXj5dKj4vZztcblxuICAgIC8vIEZpbmQgdGhlIGluZGljZXMgb2YgYW55IG1hcmtzIGluIHRoZSB0ZXh0XG4gICAgY29uc3QgbWFya0luZGljZXMgPSBbXTtcbiAgICBsZXQgbWFya1Jlc3VsdCA9IHNzbWxNYXJrUmVnZXguZXhlYyh0ZXh0KTtcblxuICAgIHdoaWxlIChtYXJrUmVzdWx0ICE9PSBudWxsKSB7XG4gICAgICBtYXJrSW5kaWNlcy5wdXNoKG1hcmtSZXN1bHQuaW5kZXgpO1xuICAgICAgbWFya1Jlc3VsdCA9IHNzbWxNYXJrUmVnZXguZXhlYyh0ZXh0KTtcbiAgICB9XG5cbiAgICAvLyBGaW5kIGFsbCBTU01MIHRhZ3MgaW4gdGhlIHRleHRcbiAgICBjb25zdCBleGlzdGluZ1RhZ3MgPSBbXTtcbiAgICBsZXQgc3NtbFJlc3VsdCA9IHNzbWxUYWdSZWdleC5leGVjKHRleHQpO1xuICAgIHdoaWxlIChzc21sUmVzdWx0ICE9PSBudWxsKSB7XG4gICAgICBleGlzdGluZ1RhZ3MucHVzaCh7XG4gICAgICAgIHN0YXJ0OiBzc21sUmVzdWx0LmluZGV4LFxuICAgICAgICBlbmQ6IHNzbWxSZXN1bHQuaW5kZXggKyBzc21sUmVzdWx0WzBdLmxlbmd0aCxcbiAgICAgICAgdGV4dDogc3NtbFJlc3VsdFswXSxcbiAgICAgIH0pO1xuICAgICAgc3NtbFJlc3VsdCA9IHNzbWxUYWdSZWdleC5leGVjKHRleHQpO1xuICAgIH1cblxuICAgIC8vIENyZWF0ZSBhIGNvcHkgb2YgdGhlIHRleHQgd2l0aCBhbGwgU1NNTCBtYXJrcyByZXBsYWNlcyB3aXRoIHdoaXRlc3BhY2VcbiAgICBsZXQgY2xlYW5lZFRleHQgPSB0ZXh0LnNsaWNlKCk7XG4gICAgZXhpc3RpbmdUYWdzLmZvckVhY2goZXhpc3RpbmdTc21sID0+IHtcbiAgICAgIGNvbnN0IHdoaXRlc3BhY2UgPSBuZXcgQXJyYXkoZXhpc3RpbmdTc21sLnRleHQubGVuZ3RoICsgMSkuam9pbignICcpO1xuICAgICAgY2xlYW5lZFRleHQgPSBbXG4gICAgICAgIGNsZWFuZWRUZXh0LnNsaWNlKDAsIGV4aXN0aW5nU3NtbC5zdGFydCksXG4gICAgICAgIHdoaXRlc3BhY2UsXG4gICAgICAgIGNsZWFuZWRUZXh0LnNsaWNlKGV4aXN0aW5nU3NtbC5lbmQpLFxuICAgICAgXS5qb2luKCcnKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IHNlbnRlbmNlRW5kSW5kaWNlcyA9IHRoaXMuX2dldFNlbnRlbmNlRW5kcyhjbGVhbmVkVGV4dCk7XG5cbiAgICAvLyBPbmx5IGluc2VydCByYW5kb20gbWFya3MgaW50byBzZW50ZW5jZXMgdGhhdCBkb24ndCBhbHJlYWR5IGhhdmUgYW55XG4gICAgbGV0IHByZXZJbmRleCA9IDA7XG4gICAgY29uc3QgdGFyZ2V0SW5kaWNlcyA9IHNlbnRlbmNlRW5kSW5kaWNlcy5maWx0ZXIoaW5kZXggPT4ge1xuICAgICAgY29uc3QgY29udGFpbnNNYXJrID1cbiAgICAgICAgbWFya0luZGljZXMuZmluZEluZGV4KG1hcmtJbmRleCA9PiB7XG4gICAgICAgICAgcmV0dXJuIHByZXZJbmRleCA8PSBtYXJrSW5kZXggJiYgaW5kZXggPiBtYXJrSW5kZXg7XG4gICAgICAgIH0pICE9PSAtMTtcbiAgICAgIHByZXZJbmRleCA9IGluZGV4O1xuICAgICAgcmV0dXJuICFjb250YWluc01hcms7XG4gICAgfSk7XG5cbiAgICBjb25zdCByYW5kb21NYXJrZWRUZXh0ID0gdGhpcy5faW5zZXJ0UmFuZG9tTWFya3NBdChcbiAgICAgIHRleHQsXG4gICAgICB0YXJnZXRJbmRpY2VzLFxuICAgICAgbWFya3NcbiAgICApO1xuXG4gICAgcmV0dXJuIHJhbmRvbU1hcmtlZFRleHQ7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGUgYSB2ZXJzaW9uIG9mIGdpdmVuIHRleHQgdGhhdCBpcyBlbmNsb3NlZCBieSBQb2xseSBzc21sIHNwZWFrIHRhZ3MuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gVGhlIHRleHQgdG8gdmFsaWRhdGUuXG4gICAqXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IC0gVXBkYXRlZCBpbnB1dCBzdHJpbmcuXG4gICAqL1xuICBzdGF0aWMgdmFsaWRhdGVUZXh0KHRleHQpIHtcbiAgICBpZiAoIXRleHQpIHtcbiAgICAgIHRleHQgPSAnPHNwZWFrPjwvc3BlYWs+JztcbiAgICB9IGVsc2Uge1xuICAgICAgdGV4dCA9IHRleHRcbiAgICAgICAgLnJlcGxhY2UoLyheXFxzKjxcXHMqc3BlYWtcXHMqKT5cXHMqfCheXFxzKikvLCAnPHNwZWFrPicpXG4gICAgICAgIC5yZXBsYWNlKC8oXFxzKjxcXHMqXFwvXFxzKnNwZWFrXFxzKj5cXHMqJHxcXHMqJCkvLCAnPC9zcGVhaz4nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGV4dDtcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJzZSBhbiBpbnB1dCBzdHJpbmcgYW5kIGluc2VydCBTU01MIG1hcmtzIGJhc2VkIG9uXG4gICAqIHdvcmQgbWF0Y2hlcyBpbiBhIG1hcC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSBJbnB1dCBzdHJpbmcuXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IFtpbmRpY2VzID0gW11dIC0gQW4gYXJyYXkgb2YgaW5kaWNlcyBpbiB0aGUgdGV4dCBpbnB1dFxuICAgKiB3aGVyZSByYW5kb20gbWFya3Mgc2hvdWxkIGJlIGluc2VydGVkLlxuICAgKiBAcGFyYW0ge0FycmF5LjxzdHJpbmc+fSBbbWFya3MgPSBbXV0gLSBBbiBhcnJheSBvZiBtYXJrIHN0cmluZ3MgdG8gY2hvb3NlXG4gICAqIGZyb20gd2hlbiBpbnNlcnRpbmcgcmFuZG9tIG1hcmtzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSAtIFVwZGF0ZWQgaW5wdXQgc3RyaW5nLlxuICAgKi9cbiAgc3RhdGljIF9pbnNlcnRSYW5kb21NYXJrc0F0KHRleHQsIGluZGljZXMgPSBbXSwgbWFya3MgPSBbXSkge1xuICAgIGlmICghbWFya3MgfHwgbWFya3MubGVuZ3RoID09PSAwIHx8ICFpbmRpY2VzIHx8IGluZGljZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gdGV4dDtcbiAgICB9XG5cbiAgICBsZXQgb2Zmc2V0ID0gMDtcbiAgICBpbmRpY2VzLmZvckVhY2goaW5kZXggPT4ge1xuICAgICAgY29uc3QgcmFuZG9tTWFyayA9IGA8bWFyayBuYW1lPScke1xuICAgICAgICBtYXJrc1tVdGlscy5nZXRSYW5kb21JbnQoMCwgbWFya3MubGVuZ3RoKV1cbiAgICAgIH0nLz5gO1xuICAgICAgdGV4dCA9IFtcbiAgICAgICAgdGV4dC5zbGljZSgwLCBpbmRleCArIG9mZnNldCksXG4gICAgICAgIHJhbmRvbU1hcmssXG4gICAgICAgIHRleHQuc2xpY2UoaW5kZXggKyBvZmZzZXQpLFxuICAgICAgXS5qb2luKCcnKTtcbiAgICAgIG9mZnNldCArPSByYW5kb21NYXJrLmxlbmd0aDtcbiAgICB9KTtcblxuICAgIHJldHVybiB0ZXh0O1xuICB9XG5cbiAgLyoqXG4gICAqIFBhcnNlcyBhIHN0cmluZyBvZiB0ZXh0IGFuZCByZXR1cm5zIGFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGluZGljZXNcbiAgICogb2YgdGhlIGxhc3QgY2hhcmFjdGVyIGluIGEgc2VudGVuY2UgdGhhdCBpcyBub3QgaW4gdGhlIGZvbGxvd2luZyBsaXN0OlxuICAgKiAgKCcuJywgJz8nLCAnIScpXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gVGV4dCB0byBwcm9jZXNzIGZvciBlbmQgb2Ygc2VudGVuY2VcbiAgICogaW5kaWNlcy5cbiAgICpcbiAgICogQHJldHVybnMge0FycmF5LjxudW1iZXI+fSAtIEFycmF5IG9mIGVuZCBvZiBzZW50ZW5jZSBpbmRpY2VzLlxuICAgKi9cbiAgc3RhdGljIF9nZXRTZW50ZW5jZUVuZHModGV4dCkge1xuICAgIGNvbnN0IHNlbnRlbmNlUmVnZXggPSAvW14uIT9dK1suIT9dKy9nO1xuICAgIGNvbnN0IGVuZFNlbnRlbmNlUmVnZXggPSAvWy4hP10rLztcblxuICAgIGxldCByZXN1bHQgPSBzZW50ZW5jZVJlZ2V4LmV4ZWModGV4dCk7XG4gICAgY29uc3Qgc2VudGVuY2VFbmRzID0gW107XG4gICAgd2hpbGUgKHJlc3VsdCAhPT0gbnVsbCkge1xuICAgICAgLy8gZmluZCB0aGUgbGFzdCBub24tcHVuY3R1YXRpb24gY2hhcmFjdGVyXG4gICAgICBjb25zdCBwdW5jdFJlc3VsdCA9IGVuZFNlbnRlbmNlUmVnZXguZXhlYyhyZXN1bHRbMF0pO1xuICAgICAgc2VudGVuY2VFbmRzLnB1c2goXG4gICAgICAgIHJlc3VsdC5pbmRleCArIHJlc3VsdFswXS5sZW5ndGggLSBwdW5jdFJlc3VsdFswXS5sZW5ndGhcbiAgICAgICk7XG4gICAgICByZXN1bHQgPSBzZW50ZW5jZVJlZ2V4LmV4ZWModGV4dCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNlbnRlbmNlRW5kcztcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJzZSBhbiBpbnB1dCBzdHJpbmcgYW5kIGluc2VydCBTU01MIG1hcmtzIGJhc2VkIG9uXG4gICAqIHdvcmQgbWF0Y2hlcyBpbiBhIG1hcC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSBJbnB1dCBzdHJpbmcuXG4gICAqIEBwYXJhbSB7TWFwfSBtYXAgLSBNYXBwaW5nIG9mIHdvcmRzIHRvIG1hcmsgdmFsdWVzIHRoYXRcbiAgICogd2lsbCBiZSBpbnNlcnRlZCBhcyB0aGUgdmFsdWUgZm9yIGEgbWFyaydzICduYW1lJyBhdHRyaWJ1dGUuXG4gICAqIEBwYXJhbSB7QXJyYXl9IGR1cGxpY2F0ZXNUb0NoZWNrIC0gQSBsaXN0IG9mIG1hcmsgdmFsdWVzIHRvIGNoZWNrIGZvciBkdXBsaWNhdGUgYWdhaW5zdCB0aGUgZmlyc3Qgd29yZFxuICAgKlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSAtIFVwZGF0ZWQgaW5wdXQgc3RyaW5nLlxuICAgKi9cbiAgc3RhdGljIF9pbnNlcnRNYXJrcyh0ZXh0LCBtYXAsIGR1cGxpY2F0ZXNUb0NoZWNrKSB7XG4gICAgaWYgKHRleHQgPT09ICcnKSByZXR1cm4gdGV4dDtcblxuICAgIGNvbnN0IHdvcmRSZWdleCA9IC9cXHcrfFxccyt8W15cXHNcXHddKy9nO1xuXG4gICAgbGV0IGxvd2VyQ2FzZVdvcmQ7XG4gICAgbGV0IGNoZWNrRHVwbGljYXRlID0gdHJ1ZTtcbiAgICBjb25zdCBtYXJrZWRXb3JkcyA9IHRleHQubWF0Y2god29yZFJlZ2V4KS5tYXAod29yZCA9PiB7XG4gICAgICBsb3dlckNhc2VXb3JkID0gd29yZC50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICBpZiAobWFwLmhhcyhsb3dlckNhc2VXb3JkKSkge1xuICAgICAgICBjb25zdCBtYXJrcyA9IG1hcC5nZXQobG93ZXJDYXNlV29yZCkubWFwKG1hcmsgPT4ge1xuICAgICAgICAgIGlmIChjaGVja0R1cGxpY2F0ZSkge1xuICAgICAgICAgICAgY2hlY2tEdXBsaWNhdGUgPSBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybiBkdXBsaWNhdGVzVG9DaGVjay5pbmNsdWRlcyhtYXJrKVxuICAgICAgICAgICAgICA/ICcnXG4gICAgICAgICAgICAgIDogYDxtYXJrIG5hbWU9JyR7bWFya30nLz5gO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gYDxtYXJrIG5hbWU9JyR7bWFya30nLz5gO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBgJHttYXJrcy5qb2luKCcnKX0ke3dvcmR9YDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNoZWNrRHVwbGljYXRlID0gZmFsc2U7XG4gICAgICAgIHJldHVybiB3b3JkO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29uc3QgZXhpc3RpbmdNYXJrcyA9IGR1cGxpY2F0ZXNUb0NoZWNrLm1hcChtYXJrID0+IHtcbiAgICAgIHJldHVybiBgPG1hcmsgbmFtZT0nJHttYXJrfScvPmA7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gYCR7ZXhpc3RpbmdNYXJrcy5qb2luKCcnKX0ke21hcmtlZFdvcmRzLmpvaW4oJycpfWA7XG4gIH1cblxuICAvKipcbiAgICogUHJvY2Vzc2VzIGFuIGlucHV0IG9iamVjdCBmb3IgbWFwcGluZyBhbiBhcnJheVxuICAgKiBvZiB3b3JkcyB0byBzcGVjaWZpYyBtYXJrIGtleXMuIENvbnZlcnRzIHRoZSBpbnB1dFxuICAgKiBtYXAgaW50byBhIE1hcCB3aXRoIGEgbW9yZSBlZmZpY2llbnQgZm9ybWF0IGZvclxuICAgKiBwZXJmb3JtaW5nIG1hcmsgaW5qZWN0aW9uLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gbWFwIC0gSW5wdXQgb2JqZWN0IHRoYXQgbWFwcyBtYXJrIGtleXNcbiAgICogdG8gYXJyYXlzIG9mIHdvcmRzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7TWFwfSAtIE1hcCBmb3IgaW50ZXJuYWwgdXNlLlxuICAgKi9cbiAgc3RhdGljIF9wcm9jZXNzSW5wdXRNYXAobWFwKSB7XG4gICAgY29uc3QgaW50ZXJuYWxNYXAgPSBuZXcgTWFwKCk7XG5cbiAgICBsZXQgbGlzdCA9IFtdO1xuICAgIE9iamVjdC5lbnRyaWVzKG1hcCkuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgQ2Fubm90IGdlbmVyYXRlIFNTTUwgbWFya3MgZnJvbSBtYXAgXCIke21hcH1cIiBiZWNhdXNlIHZhbHVlIGZvciBrZXkgJyR7a2V5fScgaXMgbm90IGFuIGFycmF5LmBcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgdmFsdWUuZm9yRWFjaCh3b3JkID0+IHtcbiAgICAgICAgY29uc3QgbG93ZXJDYXNlV29yZCA9IHdvcmQudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgbGlzdCA9IGludGVybmFsTWFwLmdldChsb3dlckNhc2VXb3JkKTtcblxuICAgICAgICBpZiAobGlzdCAhPT0gdW5kZWZpbmVkICYmICFsaXN0LmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgICBpbnRlcm5hbE1hcC5zZXQobG93ZXJDYXNlV29yZCwgWy4uLmxpc3QsIGtleV0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGludGVybmFsTWFwLnNldChsb3dlckNhc2VXb3JkLCBba2V5XSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGludGVybmFsTWFwO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFRleHRUb1NwZWVjaFV0aWxzO1xuIiwiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXHJcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxyXG5pbXBvcnQgRGVmZXJyZWQgZnJvbSAnY29yZS9EZWZlcnJlZCc7XHJcblxyXG4vKipcclxuICogQ2xhc3MgdGhhdCBjYW4gcGxheSBiYWNrIGF1ZGlvIGdlbmVyYXRlZCBieSBBV1MgUG9sbHkgYW5kIHN5bmNocm9uaXplZCBlbWl0XHJcbiAqIHNwZWVjaG1hcmsgbWVzc2FnZXMuXHJcbiAqXHJcbiAqIEBhYnN0cmFjdFxyXG4gKi9cclxuY2xhc3MgQWJzdHJhY3RTcGVlY2gge1xyXG4gIC8qKlxyXG4gICAqIEBjb25zdHJ1Y3RvclxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtjb3JlL1RleHRUb1NwZWVjaEZlYXR1cmV9IHNwZWFrZXIgLSBUaGUgZmVhdHVyZSB0aGF0IG93bnMgdGhlIFNwZWVjaCBhbmRcclxuICAgKiB3aWxsIGVtaXQgc3BlZWNobWFyayBtZXNzYWdlcy5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIFRoZSB0ZXh0IG9mIHRoZSBzcGVlY2guXHJcbiAgICogQHBhcmFtIHtBcnJheS48T2JqZWN0Pn0gW3NwZWVjaG1hcmtzPVtdXSAtIEFuIGFycmF5IG9mIHNwZWVjaG1hcmsgb2JqZWN0cyByZXByZXNlbnRpbmdcclxuICAgKiB0aGUgdGV4dCBhbmQgdGltaW5nIG9mIHRoZSBzcGVlY2guXHJcbiAgICovXHJcbiAgY29uc3RydWN0b3Ioc3BlYWtlciwgdGV4dCwgc3BlZWNobWFya3MgPSBbXSkge1xyXG4gICAgdGhpcy5fc3BlYWtlciA9IHNwZWFrZXI7XHJcbiAgICB0aGlzLl90ZXh0ID0gdGV4dDtcclxuICAgIHRoaXMuX3NwZWVjaG1hcmtzID0gc3BlZWNobWFya3M7XHJcbiAgICB0aGlzLl9zcGVlY2htYXJrT2Zmc2V0ID0gMDtcclxuICAgIHRoaXMuX3Jlc2V0KCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXNldCB0cmFja2luZyBwcm9wZXJ0aWVzLlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbY3VycmVudFRpbWU9MF0gLSBUaW1lIHRvIHVzZSBmb3IgX3N0YXJ0VGltZS5cclxuICAgKi9cclxuICBfcmVzZXQoY3VycmVudFRpbWUgPSAwKSB7XHJcbiAgICB0aGlzLl9zdGFydFRpbWUgPSBjdXJyZW50VGltZTtcclxuICAgIHRoaXMuX2xvY2FsVGltZSA9IDA7XHJcbiAgICB0aGlzLl9wYXVzZVRpbWUgPSAwO1xyXG4gICAgdGhpcy5fcGxheWluZyA9IGZhbHNlO1xyXG4gICAgdGhpcy5fbWFya0l0ZXIgPSB0aGlzLl9zcGVlY2htYXJrcy52YWx1ZXMoKTtcclxuICAgIGNvbnN0IHt2YWx1ZSwgZG9uZX0gPSB0aGlzLl9tYXJrSXRlci5uZXh0KCk7XHJcbiAgICB0aGlzLl9jdXJyZW50TWFyayA9IHZhbHVlO1xyXG4gICAgdGhpcy5fZW5kVGltZSA9IHRoaXMuX3NwZWVjaG1hcmtzLmxlbmd0aFxyXG4gICAgICA/IHRoaXMuX3NwZWVjaG1hcmtzW3RoaXMuX3NwZWVjaG1hcmtzLmxlbmd0aCAtIDFdLnRpbWVcclxuICAgICAgOiAwO1xyXG4gICAgdGhpcy5fZG9uZSA9IGRvbmU7XHJcbiAgICB0aGlzLl9wcm9taXNlID0gbnVsbDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZSBhIG5ldyBwcm9taXNlIHRoYXQgd2lsbCBzdG9wIHBsYXliYWNrIGFuZCBlbWl0IG1lc3NhZ2VzIGZvciB0aGlzIHNwZWVjaC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvbkZpbmlzaCAtIEZ1bmNpdG9uIHRvIGV4ZWN1dGUgb25jZSB0aGUgc3BlZWNoIHN0b3BzLlxyXG4gICAqIEBwYXJhbSB7b25FcnJvcj19IG9uRXJyb3IgLSBGdW5jdGlvbiB0byBleGVjdXRlIGlmIHRoZSBzcGVlY2ggZW5jb3VudGVycyBhblxyXG4gICAqIGVycm9yLlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvbkludGVycnVwdCAtIEZ1bmN0aW9uIHRvIGV4ZWN1dGUgaWYgdGhlIHNwZWVjaCBpcyBjYW5jZWxlZC5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtEZWZlcnJlZH1cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICovXHJcbiAgX2NyZWF0ZVByb21pc2Uob25GaW5pc2gsIG9uRXJyb3IsIG9uSW50ZXJydXB0KSB7XHJcbiAgICBjb25zdCBvblJlc29sdmUgPSB2YWx1ZSA9PiB7XHJcbiAgICAgIHRoaXMuX3BsYXlpbmcgPSBmYWxzZTtcclxuXHJcbiAgICAgIHRoaXMuX3NwZWFrZXIuZW1pdCh0aGlzLl9zcGVha2VyLmNvbnN0cnVjdG9yLkVWRU5UUy5zdG9wLCB0aGlzKTtcclxuICAgICAgdGhpcy5fc3BlYWtlci5jb25zdHJ1Y3Rvci5lbWl0KFxyXG4gICAgICAgIHRoaXMuX3NwZWFrZXIuY29uc3RydWN0b3IuRVZFTlRTLnN0b3AsXHJcbiAgICAgICAgdGhpc1xyXG4gICAgICApO1xyXG5cclxuICAgICAgaWYgKHR5cGVvZiBvbkZpbmlzaCA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgIG9uRmluaXNoKHZhbHVlKTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBvblJlamVjdCA9IGUgPT4ge1xyXG4gICAgICB0aGlzLl9wbGF5aW5nID0gZmFsc2U7XHJcblxyXG4gICAgICB0aGlzLl9zcGVha2VyLmVtaXQodGhpcy5fc3BlYWtlci5jb25zdHJ1Y3Rvci5FVkVOVFMuc3RvcCwgdGhpcyk7XHJcbiAgICAgIHRoaXMuX3NwZWFrZXIuY29uc3RydWN0b3IuZW1pdChcclxuICAgICAgICB0aGlzLl9zcGVha2VyLmNvbnN0cnVjdG9yLkVWRU5UUy5zdG9wLFxyXG4gICAgICAgIHRoaXNcclxuICAgICAgKTtcclxuXHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoXHJcbiAgICAgICAgYCR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfSBlbmNvdW50ZXJlZCBhbiB1bmV4cGVjdGVkIGVycm9yOiAke2V9YFxyXG4gICAgICApO1xyXG5cclxuICAgICAgaWYgKHR5cGVvZiBvbkVycm9yID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgb25FcnJvcihlKTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBvbkNhbmNlbCA9IHZhbHVlID0+IHtcclxuICAgICAgdGhpcy5fcGxheWluZyA9IGZhbHNlO1xyXG5cclxuICAgICAgdGhpcy5fc3BlYWtlci5lbWl0KHRoaXMuX3NwZWFrZXIuY29uc3RydWN0b3IuRVZFTlRTLmludGVycnVwdCwgdGhpcyk7XHJcbiAgICAgIHRoaXMuX3NwZWFrZXIuY29uc3RydWN0b3IuZW1pdChcclxuICAgICAgICB0aGlzLl9zcGVha2VyLmNvbnN0cnVjdG9yLkVWRU5UUy5pbnRlcnJ1cHQsXHJcbiAgICAgICAgdGhpc1xyXG4gICAgICApO1xyXG5cclxuICAgICAgaWYgKHR5cGVvZiBvbkludGVycnVwdCA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgIG9uSW50ZXJydXB0KHZhbHVlKTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLl9wcm9taXNlID0gbmV3IERlZmVycmVkKHVuZGVmaW5lZCwgb25SZXNvbHZlLCBvblJlamVjdCwgb25DYW5jZWwpO1xyXG5cclxuICAgIHJldHVybiB0aGlzLl9wcm9taXNlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIHdoZXRoZXIgb3Igbm90IHRoZSBzcGVlY2ggaGFzIHJlYWNoZWQgaXQncyBlbmQuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAgICovXHJcbiAgX2NoZWNrRmluaXNoZWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fZG9uZSAmJiB0aGlzLl9sb2NhbFRpbWUgPj0gdGhpcy5fZW5kVGltZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIHBsYXliYWNrIHN0YXRlIG9mIHRoZSBhdWRpby5cclxuICAgKlxyXG4gICAqIEByZWFkb25seVxyXG4gICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAqL1xyXG4gIGdldCBwbGF5aW5nKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3BsYXlpbmc7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSB0ZXh0IG9mIHRoZSBzcGVlY2guXHJcbiAgICpcclxuICAgKiBAcmVhZG9ubHlcclxuICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAqL1xyXG4gIGdldCB0ZXh0KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3RleHQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIGEgc2hhbGxvdyBjb3B5IG9mIHRoZSBzcGVlY2htYXJrcyBhcnJheSBmb3IgdGhlIHNwZWVjaC5cclxuICAgKlxyXG4gICAqIEByZWFkb25seVxyXG4gICAqIEB0eXBlIHtBcnJheS48T2JqZWN0Pn1cclxuICAgKi9cclxuICBnZXQgc3BlZWNobWFya3MoKSB7XHJcbiAgICByZXR1cm4gWy4uLnRoaXMuX3NwZWVjaG1hcmtzXTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgYW5kIHNldHMgdGhlIG51bWJlciBvZiBzZWNvbmRzIHRvIG9mZnNldCBzcGVlY2htYXJrIGVtaXNzaW9uLlxyXG4gICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICovXHJcbiAgZ2V0IHNwZWVjaG1hcmtPZmZzZXQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fc3BlZWNobWFya09mZnNldCAvIDEwMDA7XHJcbiAgfVxyXG5cclxuICBzZXQgc3BlZWNobWFya09mZnNldChvZmZzZXQpIHtcclxuICAgIHRoaXMuX3NwZWVjaG1hcmtPZmZzZXQgPSBvZmZzZXQgKiAxMDAwOyAvLyBTdG9yZSBhcyBtaWxsaXNlY29uZHNcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEVtaXQgc3BlZWNobWFyayBtZXNzYWdlcyBhcyB0aGV5IGFyZSBlbmNvdW50ZXJlZCBpbiBzeW5jIHdpdGggYXVkaW8uXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge251bWJlcn0gY3VycmVudFRpbWUgLSBDdXJyZW50IGdsb2JhbCB0aW1lIHdoZW4gdXBkYXRlIHdhcyBjYWxsZWQuXHJcbiAgICovXHJcbiAgdXBkYXRlKGN1cnJlbnRUaW1lKSB7XHJcbiAgICBpZiAoIXRoaXMuX3BsYXlpbmcpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFVwZGF0ZSBsb2NhbCBhdWRpbyB0aW1lXHJcbiAgICB0aGlzLl9sb2NhbFRpbWUgPSBjdXJyZW50VGltZSAtIHRoaXMuX3N0YXJ0VGltZTtcclxuXHJcbiAgICBpZiAoIXRoaXMuX2RvbmUpIHtcclxuICAgICAgLy8gRW1pdCBzcGVlY2htYXJrIG1lc3NhZ2VzIGZvciBtYXJrcyB1cCB0byB0aGUgY3VycmVudCB0aW1lXHJcbiAgICAgIHdoaWxlIChcclxuICAgICAgICAhdGhpcy5fZG9uZSAmJlxyXG4gICAgICAgIHRoaXMuX2N1cnJlbnRNYXJrLnRpbWUgKyB0aGlzLl9zcGVlY2htYXJrT2Zmc2V0IDw9IHRoaXMuX2xvY2FsVGltZVxyXG4gICAgICApIHtcclxuICAgICAgICB0aGlzLl9zcGVha2VyLmVtaXQoXHJcbiAgICAgICAgICB0aGlzLl9zcGVha2VyLmNvbnN0cnVjdG9yLkVWRU5UU1t0aGlzLl9jdXJyZW50TWFyay50eXBlXSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgc3BlZWNoOiB0aGlzLFxyXG4gICAgICAgICAgICBtYXJrOiB0aGlzLl9jdXJyZW50TWFyayxcclxuICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbnN0IHt2YWx1ZSwgZG9uZX0gPSB0aGlzLl9tYXJrSXRlci5uZXh0KCk7XHJcblxyXG4gICAgICAgIHRoaXMuX2N1cnJlbnRNYXJrID0gdmFsdWU7XHJcbiAgICAgICAgdGhpcy5fZG9uZSA9IGRvbmU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBFbmQgcGxheWJhY2tcclxuICAgIGlmICh0aGlzLl9jaGVja0ZpbmlzaGVkKCkpIHtcclxuICAgICAgdGhpcy5zdG9wKCk7XHJcbiAgICAgIHRoaXMuX3Jlc2V0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQbGF5IHRoZSBzcGVlY2ggZnJvbSB0aGUgYmVnaW5uaW5nLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IGN1cnJlbnRUaW1lIC0gQ3VycmVudCBnbG9iYWwgdGltZSB3aGVuIHBsYXkgd2FzIGNhbGxlZC5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb25GaW5pc2ggLSBPcHRpb25hbCBmdW5jdGlvbiB0byBleGVjdXRlIG9uY2UgdGhlIHNwZWVjaFxyXG4gICAqIHByb21pc2UgcmVzb2x2ZXMuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9uRXJyb3IgLSBPcHRpb25hbCBmdW5jdGlvbiB0byBleGVjdXRlIGlmIHRoZSBzcGVlY2hcclxuICAgKiBlbmNvdW50ZXJzIGFuZCBlcnJvciBkdXJpbmcgcGxheWJhY2suXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9uSW50ZXJydXB0IC0gT3B0aW9uYWwgZnVuY3Rpb24gdG8gZXhlY3V0ZSBpZiB0aGUgc3BlZWNoXHJcbiAgICogaXMgY2FuY2VsZWQuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7RGVmZXJyZWR9IFJlc29sdmVzIG9uY2UgdGhlIHNwZWVjaCByZWFjaGVzIHRoZSBlbmQgb2YgcGxheWJhY2suXHJcbiAgICovXHJcbiAgcGxheShjdXJyZW50VGltZSwgb25GaW5pc2gsIG9uRXJyb3IsIG9uSW50ZXJydXB0KSB7XHJcbiAgICB0aGlzLl9yZXNldChjdXJyZW50VGltZSk7XHJcbiAgICB0aGlzLl9wbGF5aW5nID0gdHJ1ZTtcclxuXHJcbiAgICB0aGlzLl9zcGVha2VyLmVtaXQodGhpcy5fc3BlYWtlci5jb25zdHJ1Y3Rvci5FVkVOVFMucGxheSwgdGhpcyk7XHJcbiAgICB0aGlzLl9zcGVha2VyLmNvbnN0cnVjdG9yLmVtaXQodGhpcy5fc3BlYWtlci5jb25zdHJ1Y3Rvci5FVkVOVFMucGxheSwgdGhpcyk7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuX2NyZWF0ZVByb21pc2Uob25GaW5pc2gsIG9uRXJyb3IsIG9uSW50ZXJydXB0KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFBhdXNlIHRoZSBzcGVlY2ggYXQgdGhlIGN1cnJlbnQgdGltZS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBjdXJyZW50VGltZSAtIEN1cnJlbnQgZ2xvYmFsIHRpbWUgd2hlbiBwYXVzZSB3YXMgY2FsbGVkLlxyXG4gICAqL1xyXG4gIHBhdXNlKGN1cnJlbnRUaW1lKSB7XHJcbiAgICB0aGlzLl9wbGF5aW5nID0gZmFsc2U7XHJcbiAgICB0aGlzLl9wYXVzZVRpbWUgPSBjdXJyZW50VGltZTtcclxuXHJcbiAgICB0aGlzLl9zcGVha2VyLmVtaXQodGhpcy5fc3BlYWtlci5jb25zdHJ1Y3Rvci5FVkVOVFMucGF1c2UsIHRoaXMpO1xyXG4gICAgdGhpcy5fc3BlYWtlci5jb25zdHJ1Y3Rvci5lbWl0KFxyXG4gICAgICB0aGlzLl9zcGVha2VyLmNvbnN0cnVjdG9yLkVWRU5UUy5wYXVzZSxcclxuICAgICAgdGhpc1xyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlc3VtZSB0aGUgc3BlZWNoIGF0IHRoZSBjdXJyZW50IHRpbWUuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge251bWJlcn0gY3VycmVudFRpbWUgLSBDdXJyZW50IGdsb2JhbCB0aW1lIHdoZW4gcmVzdW1lIHdhcyBjYWxsZWQuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9uRmluaXNoIC0gT3B0aW9uYWwgZnVuY3Rpb24gdG8gZXhlY3V0ZSBvbmNlIHRoZSBzcGVlY2hcclxuICAgKiBwcm9taXNlIHJlc29sdmVzLlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvbkVycm9yIC0gT3B0aW9uYWwgZnVuY3Rpb24gdG8gZXhlY3V0ZSBpZiB0aGUgc3BlZWNoXHJcbiAgICogZW5jb3VudGVycyBhbmQgZXJyb3IgZHVyaW5nIHBsYXliYWNrLlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvbkludGVycnVwdCAtIE9wdGlvbmFsIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgaWYgdGhlIHNwZWVjaFxyXG4gICAqIGlzIGNhbmNlbGVkLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0RlZmVycmVkfSBSZXNvbHZlcyBvbmNlIHRoZSBzcGVlY2ggcmVhY2hlcyB0aGUgZW5kIG9mIHBsYXliYWNrLlxyXG4gICAqL1xyXG4gIHJlc3VtZShjdXJyZW50VGltZSwgb25GaW5pc2gsIG9uRXJyb3IsIG9uSW50ZXJydXB0KSB7XHJcbiAgICAvLyBQbGF5IGZyb20gdGhlIGJlZ2lubmluZyBpZiB0aGUgc3BlZWNoIGhhc24ndCBwbGF5ZWQgeWV0XHJcbiAgICBpZiAoIXRoaXMuX3Byb21pc2UpIHtcclxuICAgICAgdGhpcy5fcmVzZXQoY3VycmVudFRpbWUpO1xyXG4gICAgICB0aGlzLl9jcmVhdGVQcm9taXNlKG9uRmluaXNoLCBvbkVycm9yLCBvbkludGVycnVwdCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fcGxheWluZyA9IHRydWU7XHJcbiAgICB0aGlzLl9zdGFydFRpbWUgKz0gY3VycmVudFRpbWUgLSB0aGlzLl9wYXVzZVRpbWU7XHJcblxyXG4gICAgdGhpcy5fc3BlYWtlci5lbWl0KHRoaXMuX3NwZWFrZXIuY29uc3RydWN0b3IuRVZFTlRTLnJlc3VtZSwgdGhpcyk7XHJcbiAgICB0aGlzLl9zcGVha2VyLmNvbnN0cnVjdG9yLmVtaXQoXHJcbiAgICAgIHRoaXMuX3NwZWFrZXIuY29uc3RydWN0b3IuRVZFTlRTLnJlc3VtZSxcclxuICAgICAgdGhpc1xyXG4gICAgKTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5fcHJvbWlzZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENhbmNlbHMgcGxheWJhY2sgb2YgdGhlIHNwZWVjaCBhdCB0aGUgY3VycmVudCB0aW1lLiBDYW5jZWwgdGhlIHNwZWVjaCBwcm9taXNlLlxyXG4gICAqL1xyXG4gIGNhbmNlbCgpIHtcclxuICAgIGlmICh0aGlzLl9wcm9taXNlKSB7XHJcbiAgICAgIHRoaXMuX3Byb21pc2UuY2FuY2VsKCk7XHJcbiAgICAgIHRoaXMuX3Byb21pc2UgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX3BsYXlpbmcgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFN0b3AgdGhlIHNwZWVjaCBhbmQgcmVzZXQgdGltZSB0byB0aGUgYmVnaW5uaW5nLiBSZXNvbHZlIHRoZSBzcGVlY2ggcHJvbWlzZS5cclxuICAgKi9cclxuICBzdG9wKCkge1xyXG4gICAgaWYgKHRoaXMuX3Byb21pc2UpIHtcclxuICAgICAgdGhpcy5fcHJvbWlzZS5yZXNvbHZlKCk7XHJcbiAgICAgIHRoaXMuX3Byb21pc2UgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX3BsYXlpbmcgPSBmYWxzZTtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IEFic3RyYWN0U3BlZWNoO1xyXG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cclxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVC0wXHJcbmltcG9ydCBBYnN0cmFjdEhvc3RGZWF0dXJlIGZyb20gJ2NvcmUvQWJzdHJhY3RIb3N0RmVhdHVyZSc7XHJcbmltcG9ydCBBbmltYXRpb25VdGlscyBmcm9tICdjb3JlL2FuaW1wYWNrL0FuaW1hdGlvblV0aWxzJztcclxuaW1wb3J0IE1hdGhVdGlscyBmcm9tICdjb3JlL01hdGhVdGlscyc7XHJcbmltcG9ydCBEZWZlcnJlZCBmcm9tICdjb3JlL0RlZmVycmVkJztcclxuaW1wb3J0IFNwZWVjaCBmcm9tICcuL0Fic3RyYWN0U3BlZWNoJztcclxuaW1wb3J0IFRleHRUb1NwZWVjaFV0aWxzIGZyb20gJy4vVGV4dFRvU3BlZWNoVXRpbHMnO1xyXG5cclxuLyoqXHJcbiAqIFRoZSBBbWF6b24gUG9sbHkgc2VydmljZSBvYmplY3QuXHJcbiAqIEBleHRlcm5hbCBQb2xseVxyXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NKYXZhU2NyaXB0U0RLL2xhdGVzdC9BV1MvUG9sbHkuaHRtbFxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUgcHJlc2lnbmVyIG9iamVjdCB0aGF0IGNhbiBiZSB1c2VkIHRvIGdlbmVyYXRlIHByZXNpZ25lZCB1cmxzIGZvciB0aGUgUG9sbHkgc2VydmljZS5cclxuICogQGV4dGVybmFsIFByZXNpZ25lclxyXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NKYXZhU2NyaXB0U0RLL2xhdGVzdC9BV1MvUG9sbHkvUHJlc2lnbmVyLmh0bWxcclxuICovXHJcblxyXG4vLyBBdmFpbGFibGUgb3B0aW9ucyBmb3IgUG9sbHlcclxuY29uc3QgZW5naW5lcyA9IFsnc3RhbmRhcmQnLCAnbmV1cmFsJ107XHJcbmNvbnN0IGF1ZGlvRm9ybWF0cyA9IFsnbXAzJywgJ29nZ192b3JiaXMnLCAncGNtJ107XHJcbmNvbnN0IHNwZWVjaG1hcmtUeXBlcyA9IFsnc2VudGVuY2UnLCAnc3NtbCcsICd2aXNlbWUnLCAnd29yZCddO1xyXG5jb25zdCBzYW1wbGVSYXRlcyA9IHtcclxuICBtcDM6IHtcclxuICAgIHJhdGVzOiBbJzgwMDAnLCAnMTYwMDAnLCAnMjIwNTAnLCAnMjQwMDAnXSxcclxuICAgIGRlZmF1bHRzOiB7XHJcbiAgICAgIHN0YW5kYXJkOiAnMjA1MCcsXHJcbiAgICAgIG5ldXJhbDogJzI0MDAnLFxyXG4gICAgfSxcclxuICB9LFxyXG4gIHBjbToge1xyXG4gICAgcmF0ZXM6IFsnODAwMCcsICcxNjAwMCddLFxyXG4gICAgZGVmYXVsdHM6IHtcclxuICAgICAgc3RhbmRhcmQ6ICcxNjAwJyxcclxuICAgICAgbmV1cmFsOiAnMTYwMCcsXHJcbiAgICB9LFxyXG4gIH0sXHJcbn07XHJcbnNhbXBsZVJhdGVzLm9nZ192b3JiaXMgPSBzYW1wbGVSYXRlcy5tcDM7XHJcbmxldCBhd3NWZXJzaW9uO1xyXG5cclxuLyoqXHJcbiAqIEJhc2UgY2xhc3MgZm9yIHR1cm5pbmcgdGV4dCBpbnB1dCBpbnRvIHBsYXlhYmxlIGF1ZGlvLiBUaGVyZSBzaG91bGQgYmUgb25lIGluc3RhbmNlXHJcbiAqIHBlciBzcGVha2VyLCBlYWNoIGluc3RhbmNlIGNhbiBwbGF5IG9ubHkgb25lIHBpZWNlIG9mIHRleHQgYXQgYSB0aW1lLlxyXG4gKlxyXG4gKiBAZXh0ZW5kcyBBYnN0cmFjdEhvc3RGZWF0dXJlXHJcbiAqIEBhYnN0cmFjdFxyXG4gKlxyXG4gKiBAcHJvcGVydHkgeyhudW1iZXJ8dW5kZWZpbmVkKX0gQVdTX1ZFUlNJT04gLSBHZXRzIHRoZSB2ZXJzaW9uIG9mIEFXUyBTREsgYmVpbmdcclxuICogdXNlZC4gV2lsbCBiZSB1bmRlZmluZWQgdW50aWwgW2luaXRpYWxpemVTZXJ2aWNlXXtAbGluayBBYnN0cmFjdFRleHRUb1NwZWVjaEZlYXR1cmUuaW5pdGlhbGl6ZVNlcnZpY2V9XHJcbiAqIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBleGVjdXRlZC5cclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtQT0xMWV9NSU5fTkVVUkFMX1ZFUlNJT049JzIuNTAzJ10gLSBHZXRzIHRoZSBtaW5pbXVtIHZlcnNpb25cclxuICogb2YgdGhlIEFXUyBTREsgdGhhdCBpcyBuZWNlc3NhcnkgdG8gdXNlIG5ldXJhbCB2b2ljZXMgd2l0aCBBV1MgUG9sbHkuXHJcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBQT0xMWV9ERUZBVUxUUyAtIERlZmF1bHQgdmFsdWVzIHRvIHVzZSB3aXRoIGNhbGxzIHRvIHtAbGluayBleHRlcm5hbDpQb2xseX0uXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbUE9MTFlfREVGQVVMVFMuRW5naW5lPSdzdGFuZGFyZCddXHJcbiAqIEBwcm9wZXJ0eSB7QXJyYXkuPHN0cmluZz59IFtQT0xMWV9ERUZBVUxUUy5MZXhpY29uTmFtZXM9W11dXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbUE9MTFlfREVGQVVMVFMuT3V0cHV0Rm9ybWF0PSdtcDMnXVxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW1BPTExZX0RFRkFVTFRTLlNhbXBsZVJhdGU9JzIyMDUwJ11cclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtQT0xMWV9ERUZBVUxUUy5UZXh0PScnXVxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW1BPTExZX0RFRkFVTFRTLlRleHRUeXBlPSdzc21sJ11cclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtQT0xMWV9ERUZBVUxUUy5Wb2ljZUlkPSdBbXknXVxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW1BPTExZX0RFRkFVTFRTLkxhbmd1YWdlQ29kZT0nZW4tR0InXVxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW1BPTExZX0RFRkFVTFRTLkxhbmd1YWdlTmFtZT0nQnJpdGlzaCBFbmdsaXNoJ11cclxuICogQHByb3BlcnR5IHtBcnJheS48c3RyaW5nPn0gW1BPTExZX1ZPSUNFUz1bXV0gLSBBbiBhcnJheSBvZiB2b2ljZXMgYXZhaWxhYmxlIGluXHJcbiAqIFBvbGx5LiBXaWxsIGJlIGVtcHR5IHVudGlsIFtpbml0aWFsaXplU2VydmljZV17QGxpbmsgQWJzdHJhY3RUZXh0VG9TcGVlY2hGZWF0dXJlLmluaXRpYWxpemVTZXJ2aWNlfVxyXG4gKiBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgZXhlY3V0ZWQuIFNlZSBbUG9sbHkgRG9jdW1lbnRhdGlvbl17QGxpbmsgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3BvbGx5L2xhdGVzdC9kZy92b2ljZWxpc3QuaHRtbH1cclxuICogZm9yIGEgZnVsbCBsaXN0IG9mIGF2YWlsYWJsZSB2b2ljZXMuXHJcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBbUE9MTFlfTEFOR1VBR0VTPXt9XSAtIEFuIG9iamVjdCB0aGF0IG1hcHMgbGFuZ3VhZ2UgbmFtZXNcclxuICogdG8gbGFuZ3VhZ2UgY29kZXMgdGhhdCBhcmUgYXZhaWxhYmxlIGluIFBvbGx5LiBXaWxsIGJlIGVtcHR5IHVudGlsXHJcbiAqIFtpbml0aWFsaXplU2VydmljZV17QGxpbmsgQWJzdHJhY3RUZXh0VG9TcGVlY2hGZWF0dXJlLmluaXRpYWxpemVTZXJ2aWNlfVxyXG4gKiBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgZXhlY3V0ZWQuIFNlZSBbUG9sbHkgRG9jdW1lbnRhdGlvbl17QGxpbmsgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3BvbGx5L2xhdGVzdC9kZy9TdXBwb3J0ZWRMYW5ndWFnZS5odG1sfVxyXG4gKiBmb3IgYSBmdWxsIGxpc3Qgb2YgYXZhaWxhYmxlIGxhbmd1YWdlcyBhbmQgY29ycmVzcG9uZGluZyBjb2Rlcy5cclxuICogQHByb3BlcnR5IHtPYmplY3R9IFtQT0xMWV9MQU5HVUFHRV9DT0RFUz17fV0gLSBBbiBvYmplY3QgdGhhdCBtYXBzIGxhbmd1YWdlIGNvZGVzXHJcbiAqIHRvIGxhbmd1YWdlIG5hbWVzIHRoYXQgYXJlIGF2YWlsYWJsZSBpbiBQb2xseS4gV2lsbCBiZSBlbXB0eSB1bnRpbFxyXG4gKiBbaW5pdGlhbGl6ZVNlcnZpY2Vde0BsaW5rIEFic3RyYWN0VGV4dFRvU3BlZWNoRmVhdHVyZS5pbml0aWFsaXplU2VydmljZX1cclxuICogaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IGV4ZWN1dGVkLiBTZWUgW1BvbGx5IERvY3VtZW50YXRpb25de0BsaW5rIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9wb2xseS9sYXRlc3QvZGcvU3VwcG9ydGVkTGFuZ3VhZ2UuaHRtbH1cclxuICogZm9yIGEgZnVsbCBsaXN0IG9mIGF2YWlsYWJsZSBsYW5ndWFnZXMgYW5kIGNvcnJlc3BvbmRpbmcgY29kZXMuXHJcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBFVkVOVFMgLSBCdWlsdC1pbiBtZXNzYWdlcyB0aGF0IHRoZSBmZWF0dXJlIGVtaXRzLiBXaGVuIHRoZVxyXG4gKiBmZWF0dXJlIGlzIGFkZGVkIHRvIGEge0BsaW5rIGNvcmUvSG9zdE9iamVjdH0sIGV2ZW50IG5hbWVzIHdpbGwgYmUgcHJlZml4ZWQgYnkgdGhlXHJcbiAqIG5hbWUgb2YgdGhlIGZlYXR1cmUgY2xhc3MgKyAnLicuXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbRVZFTlRTLnJlYWR5PW9uUmVhZHlFdmVudF0gLSBNZXNzYWdlIHRoYXQgaXMgZW1pdHRlZCBhZnRlclxyXG4gKiBbaW5pdGlhbGl6ZVNlcnZpY2Vde0BsaW5rIEFic3RyYWN0VGV4dFRvU3BlZWNoRmVhdHVyZS5pbml0aWFsaXplU2VydmljZX0gaGFzIGJlZW5cclxuICogc3VjY2Vzc2Z1bGx5IGV4ZWN1dGVkLlxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW0VWRU5UUy5wbGF5PW9uUGxheUV2ZW50XSAtIE1lc3NhZ2UgdGhhdCBpcyBlbWl0dGVkIGFmdGVyXHJcbiAqIGVhY2ggY2FsbCB0byBbcGxheV17QGxpbmsgQWJzdHJhY3RUZXh0VG9TcGVlY2hGZWF0dXJlI3BsYXl9LiBUaGUgc3BlZWNoIHRoYXQgd2FzIHBsYXllZFxyXG4gKiBpcyBzdXBwbGllZCBhcyBhbiBhcmd1bWVudCB0byBsaXN0ZW5lciBmdW5jdGlvbnMuXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbRVZFTlRTLnBhdXNlPW9uUGF1c2VFdmVudF0gLSBNZXNzYWdlIHRoYXQgaXMgZW1pdHRlZCBhZnRlclxyXG4gKiBlYWNoIGNhbGwgdG8gW3BhdXNlXXtAbGluayBBYnN0cmFjdFRleHRUb1NwZWVjaEZlYXR1cmUjcGF1c2V9LiBUaGUgc3BlZWNoIHRoYXQgd2FzIHBhdXNlZFxyXG4gKiBpcyBzdXBwbGllZCBhcyBhbiBhcmd1bWVudCB0byBsaXN0ZW5lciBmdW5jdGlvbnMuXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbRVZFTlRTLnJlc3VtZT1vblJlc3VtZUV2ZW50XSAtIE1lc3NhZ2UgdGhhdCBpcyBlbWl0dGVkIGFmdGVyXHJcbiAqIGVhY2ggY2FsbCB0byBbcmVzdW1lXXtAbGluayBBYnN0cmFjdFRleHRUb1NwZWVjaEZlYXR1cmUjcmVzdW1lfS4gVGhlIHNwZWVjaCB0aGF0IHdhc1xyXG4gKiByZXN1bWVkIGlzIHN1cHBsaWVkIGFzIGFuIGFyZ3VtZW50IHRvIGxpc3RlbmVyIGZ1bmN0aW9ucy5cclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtFVkVOVFMuaW50ZXJydXB0PW9uSW50ZXJydXB0RXZlbnRdIC0gTWVzc2FnZSB0aGF0IGlzIGVtaXR0ZWRcclxuICogaWYgdGhlcmUgaXMgYSBjdXJyZW50IHNwZWVjaCBpbiBwcm9ncmVzcyBhbmQgW3BsYXlde0BsaW5rIEFic3RyYWN0VGV4dFRvU3BlZWNoRmVhdHVyZSNwbGF5fVxyXG4gKiBvciBbcmVzdW1lXXtAbGluayBBYnN0cmFjdFRleHRUb1NwZWVjaEZlYXR1cmUjcmVzdW1lfSBhcmUgZXhlY3V0ZWQgZm9yIGEgbmV3IHNwZWVjaC5cclxuICogVGhlIHNwZWVjaCB0aGF0IHdhcyBpbnRlcnJ1cHRlZCBpcyBzdXBwbGllZCBhcyBhbiBhcmd1bWVudCB0byBsaXN0ZW5lciBmdW5jdGlvbnMuXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbRVZFTlRTLnN0b3A9b25TdG9wRXZlbnRdIC0gTWVzc2FnZSB0aGF0IGlzIGVtaXR0ZWQgYWZ0ZXJcclxuICogZWFjaCBjYWxsIHRvIFtzdG9wXXtAbGluayBBYnN0cmFjdFRleHRUb1NwZWVjaEZlYXR1cmUjc3RvcH0gYW5kIHdoZW4gYSBzcGVlY2ggcmVhY2hlc1xyXG4gKiB0aGUgZW5kIG9mIHBsYXliYWNrLiBUaGUgc3BlZWNoIHRoYXQgd2FzIHN0b3BwZWQgaXMgc3VwcGxpZWQgYXMgYW4gYXJndW1lbnRcclxuICogdG8gbGlzdGVuZXIgZnVuY3Rpb25zLlxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW0VWRU5UUy5zZW50ZW5jZT1vblNlbnRlbmNlRXZlbnRdIC0gTWVzc2FnZSB0aGF0IGlzIGVtaXR0ZWRcclxuICogZWFjaCB0aW1lIGEgc2VudGVuY2Ugc3BlZWNobWFyayBpcyBlbmNvdW50ZXJlZCB3aG9zZSB0aW1lc3RhbXAgbWF0Y2hlcyB1cCB3aXRoXHJcbiAqIHRoZSBzcGVlY2ggYXVkaW8ncyBjdXJyZW50IHRpbWUuIFRoZSBzZW50ZW5jZSBzcGVlY2htYXJrIG9iamVjdCBpcyBzdXBwbGllZCBhc1xyXG4gKiBhbiBhcmd1bWVudCB0byBsaXN0ZW5lciBmdW5jdGlvbnMuXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbRVZFTlRTLndvcmQ9b25Xb3JkRXZlbnRdIC0gTWVzc2FnZSB0aGF0IGlzIGVtaXR0ZWRcclxuICogZWFjaCB0aW1lIGEgd29yZCBzcGVlY2htYXJrIGlzIGVuY291bnRlcmVkIHdob3NlIHRpbWVzdGFtcCBtYXRjaGVzIHVwIHdpdGhcclxuICogdGhlIHNwZWVjaCBhdWRpbydzIGN1cnJlbnQgdGltZS4gVGhlIHdvcmQgc3BlZWNobWFyayBvYmplY3QgaXMgc3VwcGxpZWQgYXNcclxuICogYW4gYXJndW1lbnQgdG8gbGlzdGVuZXIgZnVuY3Rpb25zLlxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW0VWRU5UUy52aXNlbWU9b25WaXNlbWVFdmVudF0gLSBNZXNzYWdlIHRoYXQgaXMgZW1pdHRlZFxyXG4gKiBlYWNoIHRpbWUgYSB2aXNlbWUgc3BlZWNobWFyayBpcyBlbmNvdW50ZXJlZCB3aG9zZSB0aW1lc3RhbXAgbWF0Y2hlcyB1cCB3aXRoXHJcbiAqIHRoZSBzcGVlY2ggYXVkaW8ncyBjdXJyZW50IHRpbWUuIFRoZSB2aXNlbWUgc3BlZWNobWFyayBvYmplY3QgaXMgc3VwcGxpZWQgYXNcclxuICogYW4gYXJndW1lbnQgdG8gbGlzdGVuZXIgZnVuY3Rpb25zLlxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW0VWRU5UUy5zc21sPW9uU3NtbEV2ZW50XSAtIE1lc3NhZ2UgdGhhdCBpcyBlbWl0dGVkXHJcbiAqIGVhY2ggdGltZSBhIHNzbWwgc3BlZWNobWFyayBpcyBlbmNvdW50ZXJlZCB3aG9zZSB0aW1lc3RhbXAgbWF0Y2hlcyB1cCB3aXRoXHJcbiAqIHRoZSBzcGVlY2ggYXVkaW8ncyBjdXJyZW50IHRpbWUuIFRoZSBzc21sIHNwZWVjaG1hcmsgb2JqZWN0IGlzIHN1cHBsaWVkIGFzXHJcbiAqIGFuIGFyZ3VtZW50IHRvIGxpc3RlbmVyIGZ1bmN0aW9ucy5cclxuICogQHByb3BlcnR5IHtPYmplY3R9IFNFUlZJQ0VTIC0gQVdTIHNlcnZpY2VzIHRoYXQgYXJlIG5lY2Vzc2FyeSBmb3IgdGhlIGZlYXR1cmVcclxuICogdG8gZnVuY3Rpb24uXHJcbiAqIEBwcm9wZXJ0eSB7ZXh0ZXJuYWw6UG9sbHl9IFNFUlZJQ0VTLnBvbGx5IC0gVGhlIFBvbGx5IHNlcnZpY2UgdGhhdCBpcyB1c2VkXHJcbiAqIHRvIHN5bnRoZXNpemUgc3BlZWNobWFya3MuIFdpbGwgYmUgdW5kZWZpbmVkIHVudGlsIFtpbml0aWFsaXplU2VydmljZV17QGxpbmsgQWJzdHJhY3RUZXh0VG9TcGVlY2hGZWF0dXJlLmluaXRpYWxpemVTZXJ2aWNlfVxyXG4gKiBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgZXhlY3V0ZWRcclxuICogQHByb3BlcnR5IHtleHRlcm5hbDpQcmVzaWduZXJ9IFNFUlZJQ0VTLnByZXNpZ25lciAtIFRoZSBQb2xseSBQcmVzaWduZXJcclxuICogb2JqZWN0IHRoYXQgaXMgdXNlZCB0byBzeW50aGVzaXplIHNwZWVjaCBhdWRpby4gV2lsbCBiZSB1bmRlZmluZWQgdW50aWxcclxuICogW2luaXRpYWxpemVTZXJ2aWNlXXtAbGluayBBYnN0cmFjdFRleHRUb1NwZWVjaEZlYXR1cmUuaW5pdGlhbGl6ZVNlcnZpY2V9XHJcbiAqIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBleGVjdXRlZC5cclxuICovXHJcbmNsYXNzIEFic3RyYWN0VGV4dFRvU3BlZWNoRmVhdHVyZSBleHRlbmRzIEFic3RyYWN0SG9zdEZlYXR1cmUge1xyXG4gIC8qKlxyXG4gICAqIEBjb25zdHJ1Y3RvclxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtjb3JlL0hvc3RPYmplY3R9IGhvc3QgLSBIb3N0IG9iamVjdCBtYW5hZ2luZyB0aGUgZmVhdHVyZS5cclxuICAgKiBAcGFyYW0ge09iamVjdD19IG9wdGlvbnMgLSBPcHRpb25zIHRoYXQgd2lsbCBiZSBzZW50IHRvIFBvbGx5IGZvciBlYWNoIHNwZWVjaC5cclxuICAgKiBAcGFyYW0ge3N0cmluZz19IG9wdGlvbnMudm9pY2UgLSBUaGUgbmFtZSBvZiB0aGUgUG9sbHkgdm9pY2UgdG8gdXNlIGZvciBhbGwgc3BlZWNoLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nPX0gb3B0aW9ucy5lbmdpbmUgLSBUaGUgbmFtZSBvZiB0aGUgUG9sbHkgZW5naW5lIHRvIHVzZSBmb3IgYWxsIHNwZWVjaC5cclxuICAgKiBAcGFyYW0ge3N0cmluZz19IG9wdGlvbnMubGFuZ3VhZ2UgLSBUaGUgbmFtZSBvZiB0aGUgbGFuZ3VhZ2UgdG8gdXNlIGZvciBhbGwgc3BlZWNoLlxyXG4gICAqIEBwYXJhbSB7YXVkaW9Gb3JtYXR9IFtvcHRpb25zLmF1ZGlvRm9ybWF0PSdtcDMnXSAtIFRoZSBmb3JtYXQgdG8gdXNlIGZvciBnZW5lcmF0ZWRcclxuICAgKiBhdWRpbyBmb3IgYWxsIHNwZWVjaGVzLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nPX0gb3B0aW9ucy5zYW1wbGVSYXRlIC0gVGhlIHNhbXBsZSByYXRlIGZvciBhdWRpbyBmaWxlcyBmb3IgYWxsXHJcbiAgICogc3BlZWNoZXMuXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLnNwZWVjaG1hcmtPZmZzZXQ9MF0gLSBBbW91bnQgb2YgdGltZSBpbiBzZWNvbmRzIHRvXHJcbiAgICogb2Zmc2V0IHNwZWVjaG1hcmsgZXZlbnQgZW1pc3Npb24gZnJvbSB0aGUgYXVkaW8uXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLm1pbkVuZE1hcmtEdXJhdGlvbj0uMDVdIC0gVGhlIG1pbmltdW0gYW1vdW50IG9mIHRpbWVcclxuICAgKiBpbiBzZWNvbmRzIHRoYXQgdGhlIGxhc3Qgc3BlZWNobWFyayBvZiBlYWNoIHR5cGUgaW4gYSBzcGVlY2ggY2FuIGhhdmUgaXRzXHJcbiAgICogZHVyYXRpb24gcHJvcGVydHkgc2V0IHRvLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy52b2x1bWU9MV0gLSBUaGUgZGVmYXVsdCB2b2x1bWUgdG8gcGxheSBzcGVlY2ggYXVkaW9cclxuICAgKiB3aXRoLlxyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgaG9zdCxcclxuICAgIG9wdGlvbnMgPSB7XHJcbiAgICAgIHZvaWNlOiB1bmRlZmluZWQsXHJcbiAgICAgIGVuZ2luZTogdW5kZWZpbmVkLFxyXG4gICAgICBsYW5ndWFnZTogdW5kZWZpbmVkLFxyXG4gICAgICBhdWRpb0Zvcm1hdDogJ21wMycsXHJcbiAgICAgIHNhbXBsZVJhdGU6IHVuZGVmaW5lZCxcclxuICAgICAgc3BlZWNobWFya09mZnNldDogMCxcclxuICAgICAgbWluRW5kTWFya0R1cmF0aW9uOiAwLjA1LFxyXG4gICAgICB2b2x1bWU6IDEsXHJcbiAgICB9XHJcbiAgKSB7XHJcbiAgICBzdXBlcihob3N0KTtcclxuXHJcbiAgICB0aGlzLl9zcGVlY2hDYWNoZSA9IHt9O1xyXG4gICAgdGhpcy5fY3VycmVudFNwZWVjaCA9IG51bGw7XHJcbiAgICB0aGlzLl9jdXJyZW50UHJvbWlzZSA9IG51bGw7XHJcbiAgICB0aGlzLl9pc1ZhbGlkYXRlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5zcGVlY2htYXJrT2Zmc2V0ID0gTnVtYmVyLmlzTmFOKE51bWJlcihvcHRpb25zLnNwZWVjaG1hcmtPZmZzZXQpKVxyXG4gICAgICA/IDBcclxuICAgICAgOiBOdW1iZXIob3B0aW9ucy5zcGVlY2htYXJrT2Zmc2V0KTtcclxuICAgIHRoaXMubWluRW5kTWFya0R1cmF0aW9uID0gTnVtYmVyLmlzTmFOKE51bWJlcihvcHRpb25zLm1pbkVuZE1hcmtEdXJhdGlvbikpXHJcbiAgICAgID8gMFxyXG4gICAgICA6IE51bWJlcihvcHRpb25zLm1pbkVuZE1hcmtEdXJhdGlvbik7XHJcbiAgICB0aGlzLnZvbHVtZSA9IE51bWJlci5pc05hTihOdW1iZXIob3B0aW9ucy52b2x1bWUpKVxyXG4gICAgICA/IDFcclxuICAgICAgOiBOdW1iZXIob3B0aW9ucy52b2x1bWUpO1xyXG4gICAgdGhpcy5fcHJvbWlzZXMgPSB7XHJcbiAgICAgIHZvbHVtZTogRGVmZXJyZWQucmVzb2x2ZSgpLFxyXG4gICAgfTtcclxuICAgIHRoaXMuX3ZvbHVtZVBhdXNlZCA9IGZhbHNlO1xyXG5cclxuICAgIC8vIFNldCBkZWZhdWx0IG9wdGlvbnMgZm9yIGVhY2ggc3BlZWNoXHJcbiAgICB0aGlzLl92b2ljZSA9IG9wdGlvbnMudm9pY2UgfHwgdGhpcy5jb25zdHJ1Y3Rvci5QT0xMWV9ERUZBVUxUUy5Wb2ljZUlkO1xyXG4gICAgdGhpcy5fbGFuZ3VhZ2UgPSBvcHRpb25zLmxhbmd1YWdlIHx8IHRoaXMuY29uc3RydWN0b3IuUE9MTFlfREVGQVVMVFMuTGFuZ3VhZ2VOYW1lO1xyXG4gICAgdGhpcy5fZW5naW5lID0gZW5naW5lcy5pbmNsdWRlcyhvcHRpb25zLmVuZ2luZSlcclxuICAgICAgPyBvcHRpb25zLmVuZ2luZVxyXG4gICAgICA6IHRoaXMuY29uc3RydWN0b3IuUE9MTFlfREVGQVVMVFMuRW5naW5lO1xyXG4gICAgdGhpcy5fYXVkaW9Gb3JtYXQgPSBhdWRpb0Zvcm1hdHMuaW5jbHVkZXMob3B0aW9ucy5hdWRpb0Zvcm1hdClcclxuICAgICAgPyBvcHRpb25zLmF1ZGlvRm9ybWF0XHJcbiAgICAgIDogdGhpcy5jb25zdHJ1Y3Rvci5QT0xMWV9ERUZBVUxUUy5PdXRwdXRGb3JtYXQ7XHJcbiAgICB0aGlzLl9zYW1wbGVSYXRlID0gc2FtcGxlUmF0ZXNbdGhpcy5fYXVkaW9Gb3JtYXRdLnJhdGVzLmluY2x1ZGVzKFxyXG4gICAgICBvcHRpb25zLnNhbXBsZVJhdGVcclxuICAgIClcclxuICAgICAgPyBvcHRpb25zLnNhbXBsZVJhdGVcclxuICAgICAgOiB0aGlzLmNvbnN0cnVjdG9yLlBPTExZX0RFRkFVTFRTLlNhbXBsZVJhdGU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTdG9yZSBQb2xseSwgUHJlc2lnbmVyIGFuZCBBV1MgU0RLIFZlcnNpb24gZm9yIHVzZSBhY3Jvc3MgYWxsIGluc3RhbmNlcy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7ZXh0ZXJuYWw6UG9sbHl9IHBvbGx5IC0gUG9sbHkgaW5zdGFuY2UgdG8gdXNlIHRvIGdlbmVyYXRlIHNwZWVjaG1hcmtzLlxyXG4gICAqIEBwYXJhbSB7ZXh0ZXJuYWw6UHJlc2lnbmVyfSBwcmVzaWduZXIgLSBQcmVzaWduZXIgaW5zdGFuY2UgdG8gdXNlIHRvIGdlbmVyYXRlXHJcbiAgICogYXVkaW8gVVJMcy5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdmVyc2lvbiAtIFZlcnNpb24gb2YgdGhlIEFXUyBTREsgdG8gdXNlIHRvIHZhbGlkYXRlIHZvaWNlIG9wdGlvbnMuXHJcbiAgICovXHJcbiAgc3RhdGljIGluaXRpYWxpemVTZXJ2aWNlKHBvbGx5LCBwcmVzaWduZXIsIHZlcnNpb24pIHtcclxuICAgIC8vIE1ha2Ugc3VyZSBhbGwgd2VyZSBkZWZpbmVkXHJcbiAgICBpZiAoXHJcbiAgICAgIHBvbGx5ID09PSB1bmRlZmluZWRcclxuICAgICAgfHwgcHJlc2lnbmVyID09PSB1bmRlZmluZWRcclxuICAgICAgfHwgdmVyc2lvbiA9PT0gdW5kZWZpbmVkXHJcbiAgICApIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgICdDYW5ub3QgaW5pdGlhbGl6ZSBUZXh0VG9TcGVlY2ggZmVhdHVyZS4gQWxsIGFyZ3VtZW50cyBtdXN0IGJlIGRlZmluZWQuJ1xyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEFkZCBzdW1lcmlhbiBob3N0cyB1c2VyLWFnZW50XHJcbiAgICBpZiAocG9sbHkuY29uZmlnKSB7XHJcbiAgICAgIHBvbGx5LmNvbmZpZy5jdXN0b21Vc2VyQWdlbnQgPSB0aGlzLl93aXRoQ3VzdG9tVXNlckFnZW50KFxyXG4gICAgICAgIHBvbGx5LmNvbmZpZy5jdXN0b21Vc2VyQWdlbnRcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIGlmIChwcmVzaWduZXIuc2VydmljZSAmJiBwcmVzaWduZXIuc2VydmljZS5jb25maWcpIHtcclxuICAgICAgcHJlc2lnbmVyLnNlcnZpY2UuY29uZmlnLmN1c3RvbVVzZXJBZ2VudCA9IHRoaXMuX3dpdGhDdXN0b21Vc2VyQWdlbnQoXHJcbiAgICAgICAgcHJlc2lnbmVyLnNlcnZpY2UuY29uZmlnLmN1c3RvbVVzZXJBZ2VudFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX2lzUmVhZHkgPSBmYWxzZTtcclxuXHJcbiAgICAvLyBTdG9yZSBwYXJhbWV0ZXJzXHJcbiAgICB0aGlzLlNFUlZJQ0VTLnBvbGx5ID0gcG9sbHk7XHJcbiAgICB0aGlzLlNFUlZJQ0VTLnByZXNpZ25lciA9IHByZXNpZ25lcjtcclxuICAgIGF3c1ZlcnNpb24gPSB2ZXJzaW9uO1xyXG5cclxuICAgIC8vIENsZWFyIHRoZSBjdXJyZW50IHBvbGx5IG9iamVjdHNcclxuICAgIGNvbnN0IGF2YWlsYWJsZVZvaWNlcyA9IHRoaXMuUE9MTFlfVk9JQ0VTO1xyXG4gICAgYXZhaWxhYmxlVm9pY2VzLmxlbmd0aCA9IDA7XHJcblxyXG4gICAgY29uc3QgYXZhaWxhYmxlTGFuZ3VhZ2VzID0gdGhpcy5QT0xMWV9MQU5HVUFHRVM7XHJcbiAgICBPYmplY3Qua2V5cyhhdmFpbGFibGVMYW5ndWFnZXMpLmZvckVhY2gobmFtZSA9PiB7XHJcbiAgICAgIGRlbGV0ZSBhdmFpbGFibGVMYW5ndWFnZXNbbmFtZV07XHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCBhdmFpbGFibGVMYW5ndWFnZUNvZGVzID0gdGhpcy5QT0xMWV9MQU5HVUFHRV9DT0RFUztcclxuICAgIE9iamVjdC5rZXlzKGF2YWlsYWJsZUxhbmd1YWdlQ29kZXMpLmZvckVhY2gobmFtZSA9PiB7XHJcbiAgICAgIGRlbGV0ZSBhdmFpbGFibGVMYW5ndWFnZUNvZGVzW25hbWVdO1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gUmUtcG9wdWxhdGUgYWNjb3JkaW5nIHRvIHZlcnNpb25cclxuICAgIGNvbnN0IG1pbk5ldXJhbFNkayA9IHRoaXMuUE9MTFlfTUlOX05FVVJBTF9WRVJTSU9OO1xyXG5cclxuICAgIHJldHVybiB0aGlzLlNFUlZJQ0VTLnBvbGx5XHJcbiAgICAgIC5kZXNjcmliZVZvaWNlcygpXHJcbiAgICAgIC5wcm9taXNlKClcclxuICAgICAgLnRoZW4ocmVzcG9uc2UgPT4ge1xyXG4gICAgICAgIGNvbnN0IGFsbENvZGVzID0ge307XHJcblxyXG4gICAgICAgIHJlc3BvbnNlLlZvaWNlcy5mb3JFYWNoKHZvaWNlID0+IHtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgdm9pY2UuU3VwcG9ydGVkRW5naW5lcy5pbmNsdWRlcygnc3RhbmRhcmQnKVxyXG4gICAgICAgICAgICB8fCB2ZXJzaW9uID49IG1pbk5ldXJhbFNka1xyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGF2YWlsYWJsZVZvaWNlcy5wdXNoKHZvaWNlKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBhdmFpbGFibGVWb2ljZXMuZm9yRWFjaCh2b2ljZSA9PiB7XHJcbiAgICAgICAgICAgIGF2YWlsYWJsZUxhbmd1YWdlc1t2b2ljZS5MYW5ndWFnZU5hbWVdID0gdm9pY2UuTGFuZ3VhZ2VDb2RlO1xyXG4gICAgICAgICAgICBhbGxDb2Rlc1t2b2ljZS5MYW5ndWFnZUNvZGVdID0gdm9pY2UuTGFuZ3VhZ2VOYW1lO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIE9iamVjdC5lbnRyaWVzKGF2YWlsYWJsZUxhbmd1YWdlcykuZm9yRWFjaCgoW25hbWUsIGNvZGVdKSA9PiB7XHJcbiAgICAgICAgICBhdmFpbGFibGVMYW5ndWFnZUNvZGVzW2NvZGVdID0gbmFtZTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgLy8gTm90aWZ5IHRoYXQgd2UncmUgcmVhZHkgdG8gZ2VuZXJhdGUgc3BlZWNoZXNcclxuICAgICAgICB0aGlzLl9pc1JlYWR5ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmVtaXQodGhpcy5FVkVOVFMucmVhZHkpO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgY2xhc3MgaXMgY2FwYWJsZSBvZiBnZW5lcmF0aW5nIHNwZWVjaCBhdWRpby4gUG9sbHksXHJcbiAgICogUHJlc2lnbmVyIGFuZCBBV1MgU0RLIHZlcnNpb24gbnVtYmVyIG11c3QgaGF2ZSBiZWVuIGRlZmluZWQgdXNpbmdcclxuICAgKiBbaW5pdGlhbGl6ZVNlcnZpY2Vde0BsaW5rIEFic3RyYWN0VGV4dFRvU3BlZWNoRmVhdHVyZS5pbml0aWFsaXplU2VydmljZX0uXHJcbiAgICpcclxuICAgKiBAcmVhZG9ubHlcclxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgKi9cclxuICBzdGF0aWMgZ2V0IGlzUmVhZHkoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5faXNSZWFkeTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIHRleHQgb2YgdGhlIGN1cnJlbnRseSBwbGF5aW5nIHNwZWVjaC5cclxuICAgKlxyXG4gICAqIEByZWFkb25seVxyXG4gICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICovXHJcbiAgZ2V0IGN1cnJlbnRTcGVlY2goKSB7XHJcbiAgICBpZiAodGhpcy5fY3VycmVudFNwZWVjaCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5fY3VycmVudFNwZWVjaC50ZXh0O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIGFuZCBzZXRzIHRoZSBudW1iZXIgb2Ygc2Vjb25kcyB0byBvZmZzZXQgc3BlZWNobWFyayBlbWlzc2lvbi5cclxuICAgKlxyXG4gICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICovXHJcbiAgZ2V0IHNwZWVjaG1hcmtPZmZzZXQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fc3BlZWNobWFya09mZnNldDtcclxuICB9XHJcblxyXG4gIHNldCBzcGVlY2htYXJrT2Zmc2V0KG9mZnNldCkge1xyXG4gICAgdGhpcy5fc3BlZWNobWFya09mZnNldCA9IG9mZnNldDtcclxuXHJcbiAgICBpZiAodGhpcy5fY3VycmVudFNwZWVjaCkge1xyXG4gICAgICB0aGlzLl9jdXJyZW50U3BlZWNoLnNwZWVjaG1hcmtPZmZzZXQgPSBvZmZzZXQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIGFuZCBzZXRzIHRoZSBUaGUgbWluaW11bSBhbW91bnQgb2YgdGltZSBpbiBzZWNvbmRzIHRoYXQgdGhlIGxhc3RcclxuICAgKiBzcGVlY2htYXJrIG9mIGVhY2ggdHlwZSBpbiBhIHNwZWVjaCBjYW4gaGF2ZSBpdHMgZHVyYXRpb24gcHJvcGVydHkgc2V0IHRvLlxyXG4gICAqXHJcbiAgICogQHR5cGUgbnVtYmVyXHJcbiAgICovXHJcbiAgZ2V0IG1pbkVuZE1hcmtEdXJhdGlvbigpIHtcclxuICAgIHJldHVybiB0aGlzLl9taW5FbmRNYXJrRHVyYXRpb24gLyAxMDAwO1xyXG4gIH1cclxuXHJcbiAgc2V0IG1pbkVuZE1hcmtEdXJhdGlvbihkdXJhdGlvbikge1xyXG4gICAgdGhpcy5fbWluRW5kTWFya0R1cmF0aW9uID0gZHVyYXRpb24gKiAxMDAwO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQXBwZW5kcyB0aGUgU3VtZXJpYW4gSG9zdHMgY3VzdG9tIHVzZXItYWdlbnQgdG8gYSBzdHJpbmcgaWYgaXQgaXMgbm90XHJcbiAgICogYWxyZWFkeSBwcmVzZW50LlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjdXJyZW50VXNlckFnZW50IC0gU3RyaW5nIHRvIGFwcGVuZCB0byBpZiBuZWVkZWQuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxyXG4gICAqL1xyXG4gIHN0YXRpYyBfd2l0aEN1c3RvbVVzZXJBZ2VudChjdXJyZW50VXNlckFnZW50KSB7XHJcbiAgICBjb25zdCBzdW1lcmlhbkhvc3RzVXNlckFnZW50ID0gJ3JlcXVlc3Qtc291cmNlL1N1bWVyaWFuSG9zdHMnO1xyXG5cclxuICAgIGlmIChjdXJyZW50VXNlckFnZW50ID09IG51bGwpIHtcclxuICAgICAgcmV0dXJuIHN1bWVyaWFuSG9zdHNVc2VyQWdlbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGN1cnJlbnRVc2VyQWdlbnQuaW5kZXhPZihzdW1lcmlhbkhvc3RzVXNlckFnZW50KSAhPT0gLTEpIHtcclxuICAgICAgcmV0dXJuIGN1cnJlbnRVc2VyQWdlbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGN1cnJlbnRVc2VyQWdlbnQuY29uY2F0KCcgJywgc3VtZXJpYW5Ib3N0c1VzZXJBZ2VudCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDaGVja3MgaWYgYSBnaXZlbiBlbmdpbmUgdHlwZSBpcyBjb21wYXRpYmxlIHdpdGggdGhlIEFXUyBTREsgdmVyc2lvbi4gSWYgaXRcclxuICAgKiBpcywgcmV0dXJuIHRoZSBvcmlnaW5hbCB2YWx1ZS4gT3RoZXJ3aXNlIHJldHVybiBhIGRlZmF1bHQuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGVuZ2luZSAtIFRoZSB0eXBlIG9mIFBvbGx5IHZvaWNlIGVuZ2luZSB0byB2YWxpZGF0ZS5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XHJcbiAgICovXHJcbiAgX3ZhbGlkYXRlRW5naW5lKGVuZ2luZSkge1xyXG4gICAgLy8gRGVmYXVsdCB0byB0aGUgc3RhbmRhcmQgZW5naW5lIGlmIG5ldXJhbCBpcyBub3QgYXZhaWxhYmxlIGZvciB0aGlzIHZlcnNpb25cclxuICAgIGlmIChcclxuICAgICAgZW5naW5lID09PSB1bmRlZmluZWRcclxuICAgICAgfHwgdGhpcy5jb25zdHJ1Y3Rvci5BV1NfVkVSU0lPTiA8IHRoaXMuY29uc3RydWN0b3IuUE9MTFlfTUlOX05FVVJBTF9WRVJTSU9OXHJcbiAgICApIHtcclxuICAgICAgZW5naW5lID0gdGhpcy5jb25zdHJ1Y3Rvci5QT0xMWV9ERUZBVUxUUy5FbmdpbmU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGVuZ2luZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENoZWNrcyBpZiBhIGdpdmVuIGF1ZGlvIGZvcm1hdCB0eXBlIGlzIGNvbXBhdGlibGUgd2l0aCBQb2xseS4gSWYgaXQgaXMsIHJldHVyblxyXG4gICAqIHRoZSBvcmlnaW5hbCB2YWx1ZS4gT3RoZXJ3aXNlIHJldHVybiBhIGRlZmF1bHQuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGVuZ2luZSAtIFRoZSB0eXBlIG9mIFBvbGx5IHZvaWNlIGVuZ2luZSB0byB2YWxpZGF0ZS5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XHJcbiAgICovXHJcbiAgX3ZhbGlkYXRlRm9ybWF0KGZvcm1hdCkge1xyXG4gICAgaWYgKGZvcm1hdCA9PT0gdW5kZWZpbmVkIHx8ICFhdWRpb0Zvcm1hdHMuaW5jbHVkZXMoZm9ybWF0KSkge1xyXG4gICAgICBmb3JtYXQgPSB0aGlzLmNvbnN0cnVjdG9yLlBPTExZX0RFRkFVTFRTLk91dHB1dEZvcm1hdDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZm9ybWF0O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2hlY2tzIGlmIGEgZ2l2ZW4gYXVkaW8gc2FtcGxpbmcgcmF0ZSBpcyBjb21wYXRpYmxlIHdpdGggdGhlIGN1cnJlbnQgYXVkaW9cclxuICAgKiBmb3JtYXQuIElmIGl0IGlzLCByZXR1cm4gdGhlIG9yaWdpbmFsIHZhbHVlLiBPdGhlcndpc2UgcmV0dXJuIGEgZGVmYXVsdC5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gZW5naW5lIC0gVGhlIHR5cGUgb2YgUG9sbHkgdm9pY2UgZW5naW5lIHRvIHZhbGlkYXRlLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge3N0cmluZ31cclxuICAgKi9cclxuICBfdmFsaWRhdGVSYXRlKHJhdGUpIHtcclxuICAgIC8vIFVzZSBkZWZhdWx0IGlmIHNwZWNpZmllZCBzYW1wbGUgcmF0ZSBpcyBub3QgdmFsaWQgZm9yIHRoZSBhdWRpbyBmb3JtYXRcclxuICAgIGlmIChcclxuICAgICAgcmF0ZSA9PT0gdW5kZWZpbmVkXHJcbiAgICAgIHx8ICFzYW1wbGVSYXRlc1t0aGlzLl9hdWRpb0Zvcm1hdF0ucmF0ZXMuaW5jbHVkZXMocmF0ZSlcclxuICAgICkge1xyXG4gICAgICByYXRlID0gc2FtcGxlUmF0ZXNbdGhpcy5fYXVkaW9Gb3JtYXRdLmRlZmF1bHRzW3RoaXMuX2VuZ2luZV07XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHJhdGU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDaGVja3MgaWYgYSBnaXZlbiBQb2xseSB2b2ljZSBpZCBpcyBjb21wYXRpYmxlIHdpdGggdGhlIGN1cnJlbnQgUG9sbHkgZW5naW5lLlxyXG4gICAqIElmIGl0IGlzLCByZXR1cm4gdGhlIG9yaWdpbmFsIHZhbHVlLiBPdGhlcndpc2UgcmV0dXJuIGEgZGVmYXVsdC5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gZW5naW5lIC0gVGhlIHR5cGUgb2YgUG9sbHkgdm9pY2UgZW5naW5lIHRvIHZhbGlkYXRlLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge3N0cmluZ31cclxuICAgKi9cclxuICBfdmFsaWRhdGVWb2ljZSh2b2ljZUlkKSB7XHJcbiAgICBjb25zdCB2b2ljZSA9IHRoaXMuY29uc3RydWN0b3IuUE9MTFlfVk9JQ0VTLmZpbmQodiA9PiB2LklkID09PSB2b2ljZUlkKTtcclxuXHJcbiAgICAvLyBVc2UgdGhlIGRlZmF1bHQgdm9pY2UgaWYgdGhlIHZvaWNlIGlzbid0IHN1cHBvcnRlZCBieSB0aGUgZW5naW5lXHJcbiAgICBpZiAodm9pY2UgPT09IHVuZGVmaW5lZCB8fCAhdm9pY2UuU3VwcG9ydGVkRW5naW5lcy5pbmNsdWRlcyh0aGlzLl9lbmdpbmUpKSB7XHJcbiAgICAgIHZvaWNlSWQgPSB0aGlzLmNvbnN0cnVjdG9yLlBPTExZX0RFRkFVTFRTLlZvaWNlSWQ7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHZvaWNlSWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDaGVja3MgaWYgYSBnaXZlbiBQb2xseSBsYW5ndWFnZSBpcyBjb21wYXRpYmxlIHdpdGggdGhlIGN1cnJlbnQgUG9sbHkgdm9pY2UuXHJcbiAgICogSWYgaXQgaXMsIHJldHVybiB0aGUgb3JpZ2luYWwgdmFsdWUuIE90aGVyd2lzZSByZXR1cm4gYSBkZWZhdWx0LlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBlbmdpbmUgLSBUaGUgdHlwZSBvZiBQb2xseSB2b2ljZSBlbmdpbmUgdG8gdmFsaWRhdGUuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxyXG4gICAqL1xyXG4gIF92YWxpZGF0ZUxhbmd1YWdlKGxhbmd1YWdlKSB7XHJcbiAgICBjb25zdCB2b2ljZSA9IHRoaXMuY29uc3RydWN0b3IuUE9MTFlfVk9JQ0VTLmZpbmQodiA9PiB2LklkID09PSB0aGlzLl92b2ljZSk7XHJcbiAgICBjb25zdCBsYW5ndWFnZUNvZGUgPSB0aGlzLmNvbnN0cnVjdG9yLlBPTExZX0xBTkdVQUdFU1tsYW5ndWFnZV07XHJcblxyXG4gICAgLy8gRmluZCB0aGUgbGFuZ3VhZ2VzIGF2YWlsYWJsZSBmb3IgdGhlIGN1cnJlbnQgdm9pY2VcclxuICAgIGNvbnN0IGF2YWlsYWJsZUNvZGVzID0gW3ZvaWNlLkxhbmd1YWdlQ29kZV07XHJcbiAgICBpZiAodm9pY2UuQWRkaXRpb25hbExhbmd1YWdlQ29kZXMpIHtcclxuICAgICAgYXZhaWxhYmxlQ29kZXMucHVzaCguLi52b2ljZS5BZGRpdGlvbmFsTGFuZ3VhZ2VDb2Rlcyk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gSWYgdGhlIGN1cnJlbnQgdm9pY2UgZG9lc24ndCBzdXBwb3J0IHRoZSBsYW5ndWFnZSwgdXNlIGl0cyBkZWZhdWx0XHJcbiAgICBpZiAoIWF2YWlsYWJsZUNvZGVzLmluY2x1ZGVzKGxhbmd1YWdlQ29kZSkpIHtcclxuICAgICAgbGFuZ3VhZ2UgPSB0aGlzLmNvbnN0cnVjdG9yLlBPTExZX0xBTkdVQUdFX0NPREVTW3ZvaWNlLkxhbmd1YWdlQ29kZV07XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGxhbmd1YWdlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVmFsaWRhdGUgdGhlIGN1cnJlbnQgUG9sbHkgb3B0aW9ucyB0byBtYWtlIHN1cmUgdGhleSBhcmUgY29tcGF0aWJsZSB3aXRoIGVhY2hcclxuICAgKiBvdGhlci5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICovXHJcbiAgX3ZhbGlkYXRlKCkge1xyXG4gICAgLy8gVmFsaWRhdGUgc3BlZWNoIHBhcmFtZXRlcnNcclxuICAgIHRoaXMuX2VuZ2luZSA9IHRoaXMuX3ZhbGlkYXRlRW5naW5lKHRoaXMuX2VuZ2luZSk7XHJcbiAgICB0aGlzLl9hdWRpb0Zvcm1hdCA9IHRoaXMuX3ZhbGlkYXRlRm9ybWF0KHRoaXMuX2F1ZGlvRm9ybWF0KTtcclxuICAgIHRoaXMuX3NhbXBsZVJhdGUgPSB0aGlzLl92YWxpZGF0ZVJhdGUodGhpcy5fc2FtcGxlUmF0ZSk7XHJcbiAgICB0aGlzLl92b2ljZSA9IHRoaXMuX3ZhbGlkYXRlVm9pY2UodGhpcy5fdm9pY2UpO1xyXG4gICAgdGhpcy5fbGFuZ3VhZ2UgPSB0aGlzLl92YWxpZGF0ZUxhbmd1YWdlKHRoaXMuX2xhbmd1YWdlKTtcclxuICAgIHRoaXMuX2lzVmFsaWRhdGVkID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiBhbiBvYmplY3QgY29udGFpbmluZyBwYXJhbWV0ZXJzIGNvbXBhdGlibGUgd2l0aCBQb2xseS5zeW50aGVzaXplU3BlZWNoLlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtPYmplY3R9XHJcbiAgICovXHJcbiAgX2dldENvbmZpZygpIHtcclxuICAgIC8vIE1ha2Ugc3VyZSBwYXJhbWV0ZXJzIGhhdmUgYmVlbiB2YWxpZGF0ZWRcclxuICAgIGlmICh0aGlzLmNvbnN0cnVjdG9yLmlzUmVhZHkgJiYgIXRoaXMuX2lzVmFsaWRhdGVkKSB7XHJcbiAgICAgIHRoaXMuX3ZhbGlkYXRlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ3JlYXRlIGEgY29uZmlnIG9iamVjdCBjb21wYXRpYmxlIHdpdGggUG9sbHlcclxuICAgIHJldHVybiB7XHJcbiAgICAgIEVuZ2luZTogdGhpcy5fZW5naW5lLFxyXG4gICAgICBPdXRwdXRGb3JtYXQ6IHRoaXMuX2F1ZGlvRm9ybWF0LFxyXG4gICAgICBTYW1wbGVSYXRlOiB0aGlzLl9zYW1wbGVSYXRlLFxyXG4gICAgICBWb2ljZUlkOiB0aGlzLl92b2ljZSxcclxuICAgICAgTGFuZ3VhZ2VDb2RlOiB0aGlzLmNvbnN0cnVjdG9yLlBPTExZX0xBTkdVQUdFU1t0aGlzLl9sYW5ndWFnZV0sXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlIFBvbGx5IHBhcmFtZXRlcnMgd2l0aCBvcHRpb25zIGZyb20gYSBnaXZlbiBjb25maWcuIEFsbCBzdG9yZWQgc3BlZWNoZXNcclxuICAgKiB3aWxsIGJlIHVwZGF0ZWQgdG8gdXNlIHRoZSBuZXcgcGFyYW1ldGVycywgdW5sZXNzIHRoZSBzcGVlY2ggdGV4dCBpcyBjb250YWluZWRcclxuICAgKiBpbiB0aGUgJ3NraXBTcGVlY2hlcycgcGFyYW1ldGVyLlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcgLSBQb2xseSBwYXJhbWV0ZXIgb3B0aW9ucyB0byBvdmVyd3JpdGUuXHJcbiAgICogQHBhcmFtIHtBcnJheS48c3RyaW5nPn0gc2tpcFNwZWVjaGVzIC0gVGV4dCBvZiBhbnkgc3BlZWNoZXMgdGhhdCBzaG91bGQgbm90XHJcbiAgICogaGF2ZSBwYXJhbWV0ZXJzIHVwZGF0ZWQuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7T2JqZWN0fVxyXG4gICAqL1xyXG4gIF91cGRhdGVDb25maWcoY29uZmlnLCBza2lwU3BlZWNoZXMgPSBbXSkge1xyXG4gICAgY29uc3QgY3VycmVudENvbmZpZyA9IHRoaXMuX2dldENvbmZpZygpO1xyXG4gICAgaWYgKCFjb25maWcpIHtcclxuICAgICAgcmV0dXJuIGN1cnJlbnRDb25maWc7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5faXNWYWxpZGF0ZWQgPSBmYWxzZTtcclxuICAgIGNvbnN0IGN1cnJlbnRDb25maWdTdHIgPSBKU09OLnN0cmluZ2lmeShjdXJyZW50Q29uZmlnKTtcclxuXHJcbiAgICAvLyBVcGRhdGUgb3B0aW9uc1xyXG4gICAgaWYgKGNvbmZpZy5FbmdpbmUpIHtcclxuICAgICAgdGhpcy5fZW5naW5lID0gY29uZmlnLkVuZ2luZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoY29uZmlnLmF1ZGlvRm9ybWF0KSB7XHJcbiAgICAgIHRoaXMuX2F1ZGlvRm9ybWF0ID0gY29uZmlnLmF1ZGlvRm9ybWF0O1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjb25maWcuU2FtcGxlUmF0ZSkge1xyXG4gICAgICB0aGlzLl9zYW1wbGVSYXRlID0gY29uZmlnLlNhbXBsZVJhdGU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNvbmZpZy5Wb2ljZUlkKSB7XHJcbiAgICAgIHRoaXMuX3ZvaWNlID0gY29uZmlnLlZvaWNlSWQ7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNvbmZpZy5MYW5ndWFnZSkge1xyXG4gICAgICB0aGlzLl9sYW5ndWFnZSA9IGNvbmZpZy5MYW5ndWFnZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBWYWxpZGF0ZSB0aGUgY29uZmlnXHJcbiAgICBjb25zdCB2YWxpZENvbmZpZyA9IHRoaXMuX2dldENvbmZpZygpO1xyXG5cclxuICAgIC8vIEV4aXQgaWYgbm90aGluZyBoYXMgY2hhbmdlZFxyXG4gICAgY29uc3QgY29uZmlnU3RyID0gSlNPTi5zdHJpbmdpZnkodmFsaWRDb25maWcpO1xyXG4gICAgaWYgKGN1cnJlbnRDb25maWdTdHIgPT09IGNvbmZpZ1N0cikge1xyXG4gICAgICB0aGlzLl9pc1ZhbGlkYXRlZCA9IHRydWU7XHJcbiAgICAgIHJldHVybiB2YWxpZENvbmZpZztcclxuICAgIH1cclxuXHJcbiAgICAvLyBVcGRhdGUgYWxsIGNhY2hlZCBjb25maWdzXHJcbiAgICBPYmplY3QuZW50cmllcyh0aGlzLl9zcGVlY2hDYWNoZSkuZm9yRWFjaCgoW3RleHQsIHNwZWVjaF0pID0+IHtcclxuICAgICAgLy8gQ2hlY2sgaWYgdGhpcyBpcyBhIHNraXBwZWQgc3BlZWNoXHJcbiAgICAgIGlmIChza2lwU3BlZWNoZXMuaW5jbHVkZXModGV4dCkpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IHNwZWVjaENvbmZpZ1N0ciA9IEpTT04uc3RyaW5naWZ5KHNwZWVjaC5jb25maWcpO1xyXG5cclxuICAgICAgLy8gVXBkYXRlIHRoZSBzcGVlY2ggd2l0aCBuZXcgcGFyYW1ldGVyc1xyXG4gICAgICBpZiAoc3BlZWNoQ29uZmlnU3RyICE9PSBjb25maWdTdHIpIHtcclxuICAgICAgICB0aGlzLl91cGRhdGVTcGVlY2godGV4dCwgdmFsaWRDb25maWcpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gdmFsaWRDb25maWc7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGUgYW4gZXhpc3Rpbmcgc3BlZWNoLCBvciBhZGQgYSBuZXcgc3BlZWNoIHdpdGggbmV3IFBvbGx5IHBhcmFtZXRlcnMgd2l0aFxyXG4gICAqIG9wdGlvbnMgZnJvbSBhIGdpdmVuIGNvbmZpZy5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIFRoZSB0ZXh0IG9mIHRoZSBzcGVlY2ggdG8gdXBkYXRlLlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcgLSBQb2xseSBwYXJhbWV0ZXIgb3B0aW9ucyB0byB1cGRhdGUuXHJcbiAgICogQHBhcmFtIHtib29sZWFufSBbZm9yY2U9ZmFsc2VdIC0gV2hldGhlciB0byBmb3JjZSB0aGUgc3BlZWNoIHRvIGJlIHVwZGF0ZWRcclxuICAgKiBpZiBubyBwYXJhbWV0ZXJzIGhhdmUgY2hhbmdlcy5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtBYnN0cmFjdFNwZWVjaH1cclxuICAgKi9cclxuICBfdXBkYXRlU3BlZWNoKHRleHQsIGNvbmZpZywgZm9yY2UgPSBmYWxzZSkge1xyXG4gICAgY29uc3Qgc3BlZWNoID0gdGhpcy5fc3BlZWNoQ2FjaGVbdGV4dF0gfHwge307XHJcbiAgICAvLyBFeGl0IGlmIG5vdGhpbmcgaGFzIGNoYW5nZWQgYW5kIGZvcmNlIGlzIGZhbHNlXHJcbiAgICBpZiAoXHJcbiAgICAgICFmb3JjZVxyXG4gICAgICAmJiBjb25maWcgIT09IHVuZGVmaW5lZFxyXG4gICAgICAmJiBzcGVlY2guY29uZmlnXHJcbiAgICAgICYmIEpTT04uc3RyaW5naWZ5KGNvbmZpZykgPT09IEpTT04uc3RyaW5naWZ5KHNwZWVjaC5jb25maWcpXHJcbiAgICApIHtcclxuICAgICAgcmV0dXJuIHNwZWVjaDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBDcmVhdGUgc2VwYXJhdGUgcGFyYW1ldGVycyBmb3IgYXVkaW8gYW5kIHNwZWVjaG1hcmsgZ2VuZXJhdGlvblxyXG4gICAgY29uc3QgYXVkaW9QYXJhbXMgPSB7XHJcbiAgICAgIC4uLmNvbmZpZyxcclxuICAgICAgVGV4dDogdGV4dCxcclxuICAgICAgVGV4dFR5cGU6ICdzc21sJyxcclxuICAgIH07XHJcbiAgICBjb25zdCBzcGVlY2htYXJrUGFyYW1zID0ge1xyXG4gICAgICAuLi5hdWRpb1BhcmFtcyxcclxuICAgICAgT3V0cHV0Rm9ybWF0OiAnanNvbicsXHJcbiAgICAgIFNwZWVjaE1hcmtUeXBlczogc3BlZWNobWFya1R5cGVzLFxyXG4gICAgfTtcclxuXHJcbiAgICAvLyBHZW5lcmF0ZSBhdWRpbyBhbmQgc3BlZWNobWFya3NcclxuICAgIHNwZWVjaC5jb25maWcgPSBjb25maWc7XHJcbiAgICBzcGVlY2gucHJvbWlzZSA9IFByb21pc2UuYWxsKFtcclxuICAgICAgdGhpcy5fc3ludGhlc2l6ZVNwZWVjaG1hcmtzKHNwZWVjaG1hcmtQYXJhbXMpLFxyXG4gICAgICB0aGlzLl9zeW50aGVzaXplQXVkaW8oYXVkaW9QYXJhbXMpLFxyXG4gICAgXSkudGhlbihyZXN1bHRzID0+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuX2NyZWF0ZVNwZWVjaCh0ZXh0LCAuLi5yZXN1bHRzKTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5fc3BlZWNoQ2FjaGVbdGV4dF0gPSBzcGVlY2g7XHJcblxyXG4gICAgcmV0dXJuIHNwZWVjaDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZSBhIG5ldyBTcGVlY2ggb2JqZWN0IGZvciB0aGUgc3BlYWtlci5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge1RleHRUb1NwZWVjaH0gc3BlYWtlciAtIFRoZSBUZXh0VG9TcGVlY2ggaW5zdGFuY2UgdGhhdCB3aWxsIG93biB0aGUgc3BlZWNoLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gVGV4dCBvZiB0aGUgc3BlZWNoLlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBzcGVlY2htYXJrcyAtIFNwZWVjaG1hcmtzIGZvciB0aGUgc3BlZWNoLlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBhdWRpb0NvbmZpZyAtIEF1ZGlvIGZvciB0aGUgc3BlZWNoLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0Fic3RyYWN0U3BlZWNofVxyXG4gICAqL1xyXG4gIF9jcmVhdGVTcGVlY2godGV4dCwgc3BlZWNobWFya3MsIGF1ZGlvQ29uZmlnKSB7XHJcbiAgICByZXR1cm4gbmV3IFNwZWVjaCh0aGlzLCB0ZXh0LCBzcGVlY2htYXJrcywgYXVkaW9Db25maWcpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlIHByZXNpZ25lZCBVUkwgb2Ygc3BlZWNoIGF1ZGlvIGZvciB0aGUgZ2l2ZW4gc3BlZWNoIHRleHQuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IHBhcmFtcyAtIFBhcmFtZXRlcnMgb2JqZWN0IGNvbXBhdGlibGUgd2l0aCBQb2xseS5zeW50aGVzaXplU3BlZWNoLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0RlZmVycmVkfSBSZXNvbHZlcyB3aXRoIGFuIG9iamVjdCBjb250YWluaW5nIHRoZSBhdWRpbyBVUkwuXHJcbiAgICovXHJcbiAgX3N5bnRoZXNpemVBdWRpbyhwYXJhbXMpIHtcclxuICAgIHJldHVybiBuZXcgRGVmZXJyZWQoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICB0aGlzLmNvbnN0cnVjdG9yLlNFUlZJQ0VTLnByZXNpZ25lci5nZXRTeW50aGVzaXplU3BlZWNoVXJsKFxyXG4gICAgICAgIHBhcmFtcyxcclxuICAgICAgICBmdW5jdGlvbiAoZXJyb3IsIHVybCkge1xyXG4gICAgICAgICAgaWYgKCFlcnJvcikge1xyXG4gICAgICAgICAgICByZXNvbHZlKHsgdXJsIH0pO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHJpZXZlcyBhbmQgcGFyc2VzIHNwZWVjaG1hcmtzIGZvciB0aGUgZ2l2ZW4gc3BlZWNoIHRleHQuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IHBhcmFtcyAtIFBhcmFtZXRlcnMgb2JqZWN0IGNvbXBhdGlibGUgd2l0aCBQb2xseS5zeW50aGVzaXplU3BlZWNoLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0RlZmVycmVkfSBSZXNvbHZlcyB3aXRoIGFuIGFycmF5IG9mIHNwZWVjaG1hcmsgb2JqZWN0c1xyXG4gICAqL1xyXG4gIF9zeW50aGVzaXplU3BlZWNobWFya3MocGFyYW1zKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5TRVJWSUNFUy5wb2xseVxyXG4gICAgICAuc3ludGhlc2l6ZVNwZWVjaChwYXJhbXMpXHJcbiAgICAgIC5wcm9taXNlKClcclxuICAgICAgLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAvLyBDb252ZXJ0IGNoYXJjb2RlcyB0byBzdHJpbmdcclxuICAgICAgICBjb25zdCBqc29uU3RyaW5nID0gSlNPTi5zdHJpbmdpZnkocmVzdWx0LkF1ZGlvU3RyZWFtKTtcclxuICAgICAgICBjb25zdCBqc29uID0gSlNPTi5wYXJzZShqc29uU3RyaW5nKTtcclxuICAgICAgICBjb25zdCBkYXRhU3RyID0ganNvbi5kYXRhLm1hcChjID0+IFN0cmluZy5mcm9tQ2hhckNvZGUoYykpLmpvaW4oJycpO1xyXG5cclxuICAgICAgICBjb25zdCBtYXJrVHlwZXMgPSB7XHJcbiAgICAgICAgICBzZW50ZW5jZTogW10sXHJcbiAgICAgICAgICB3b3JkOiBbXSxcclxuICAgICAgICAgIHZpc2VtZTogW10sXHJcbiAgICAgICAgICBzc21sOiBbXSxcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbnN0IGVuZE1hcmtUeXBlcyA9IHtcclxuICAgICAgICAgIHNlbnRlbmNlOiBudWxsLFxyXG4gICAgICAgICAgd29yZDogbnVsbCxcclxuICAgICAgICAgIHZpc2VtZTogbnVsbCxcclxuICAgICAgICAgIHNzbWw6IG51bGwsXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgLy8gU3BsaXQgYnkgZW5jbG9zaW5nIHt9IHRvIGNyZWF0ZSBzcGVlY2htYXJrIG9iamVjdHNcclxuICAgICAgICBjb25zdCBzcGVlY2hNYXJrcyA9IFsuLi5kYXRhU3RyLm1hdGNoQWxsKC9cXHsuKj9cXH0oPz1cXG58JCkvZ20pXS5tYXAoXHJcbiAgICAgICAgICBtYXRjaCA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1hcmsgPSBKU09OLnBhcnNlKG1hdGNoWzBdKTtcclxuXHJcbiAgICAgICAgICAgIC8vIFNldCB0aGUgZHVyYXRpb24gb2YgdGhlIGxhc3Qgc3BlZWNobWFyayBzdG9yZWQgbWF0Y2hpbmcgdGhpcyBvbmUncyB0eXBlXHJcbiAgICAgICAgICAgIGNvbnN0IG51bU1hcmtzID0gbWFya1R5cGVzW21hcmsudHlwZV0ubGVuZ3RoO1xyXG4gICAgICAgICAgICBpZiAobnVtTWFya3MgPiAwKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgbGFzdE1hcmsgPSBtYXJrVHlwZXNbbWFyay50eXBlXVtudW1NYXJrcyAtIDFdO1xyXG4gICAgICAgICAgICAgIGxhc3RNYXJrLmR1cmF0aW9uID0gbWFyay50aW1lIC0gbGFzdE1hcmsudGltZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbWFya1R5cGVzW21hcmsudHlwZV0ucHVzaChtYXJrKTtcclxuICAgICAgICAgICAgZW5kTWFya1R5cGVzW21hcmsudHlwZV0gPSBtYXJrO1xyXG4gICAgICAgICAgICByZXR1cm4gbWFyaztcclxuICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG5cclxuICAgICAgICAvLyBGaW5kIHRoZSB0aW1lIG9mIHRoZSBsYXRlc3Qgc3BlZWNobWFya1xyXG4gICAgICAgIGNvbnN0IGVuZFRpbWVzID0gW107XHJcbiAgICAgICAgaWYgKGVuZE1hcmtUeXBlcy5zZW50ZW5jZSkge1xyXG4gICAgICAgICAgZW5kVGltZXMucHVzaChlbmRNYXJrVHlwZXMuc2VudGVuY2UudGltZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChlbmRNYXJrVHlwZXMud29yZCkge1xyXG4gICAgICAgICAgZW5kVGltZXMucHVzaChlbmRNYXJrVHlwZXMud29yZC50aW1lKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGVuZE1hcmtUeXBlcy52aXNlbWUpIHtcclxuICAgICAgICAgIGVuZFRpbWVzLnB1c2goZW5kTWFya1R5cGVzLnZpc2VtZS50aW1lKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGVuZE1hcmtUeXBlcy5zc21sKSB7XHJcbiAgICAgICAgICBlbmRUaW1lcy5wdXNoKGVuZE1hcmtUeXBlcy5zc21sLnRpbWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBlbmRUaW1lID0gTWF0aC5tYXgoLi4uZW5kVGltZXMpO1xyXG5cclxuICAgICAgICAvLyBDYWxjdWxhdGUgZHVyYXRpb24gZm9yIHRoZSBlbmRpbmcgc3BlZWNoTWFya3Mgb2YgZWFjaCB0eXBlXHJcbiAgICAgICAgaWYgKGVuZE1hcmtUeXBlcy5zZW50ZW5jZSkge1xyXG4gICAgICAgICAgZW5kTWFya1R5cGVzLnNlbnRlbmNlLmR1cmF0aW9uID0gTWF0aC5tYXgoXHJcbiAgICAgICAgICAgIHRoaXMuX21pbkVuZE1hcmtEdXJhdGlvbixcclxuICAgICAgICAgICAgZW5kVGltZSAtIGVuZE1hcmtUeXBlcy5zZW50ZW5jZS50aW1lXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZW5kTWFya1R5cGVzLndvcmQpIHtcclxuICAgICAgICAgIGVuZE1hcmtUeXBlcy53b3JkLmR1cmF0aW9uID0gTWF0aC5tYXgoXHJcbiAgICAgICAgICAgIHRoaXMuX21pbkVuZE1hcmtEdXJhdGlvbixcclxuICAgICAgICAgICAgZW5kVGltZSAtIGVuZE1hcmtUeXBlcy53b3JkLnRpbWVcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChlbmRNYXJrVHlwZXMudmlzZW1lKSB7XHJcbiAgICAgICAgICBlbmRNYXJrVHlwZXMudmlzZW1lLmR1cmF0aW9uID0gTWF0aC5tYXgoXHJcbiAgICAgICAgICAgIHRoaXMuX21pbkVuZE1hcmtEdXJhdGlvbixcclxuICAgICAgICAgICAgZW5kVGltZSAtIGVuZE1hcmtUeXBlcy52aXNlbWUudGltZVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGVuZE1hcmtUeXBlcy5zc21sKSB7XHJcbiAgICAgICAgICBlbmRNYXJrVHlwZXMuc3NtbC5kdXJhdGlvbiA9IE1hdGgubWF4KFxyXG4gICAgICAgICAgICB0aGlzLl9taW5FbmRNYXJrRHVyYXRpb24sXHJcbiAgICAgICAgICAgIGVuZFRpbWUgLSBlbmRNYXJrVHlwZXMuc3NtbC50aW1lXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHNwZWVjaE1hcmtzO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgYSBTcGVlY2ggb2JqZWN0IHRoYXQgaGFzIHRoZSBnaXZlbiB0ZXh0LlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gVGhlIHRleHQgY29udGVudCBvZiB0aGUgU3BlZWNoLlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0PX0gY29uZmlnIC0gT3B0aW9ucyB0byB1cGRhdGUgdGhlIFNwZWVjaCB3aXRoLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0RlZmVycmVkfSBSZXNvbHZlcyB3aXRoIFNwZWVjaCBvciBudWxsO1xyXG4gICAqL1xyXG4gIF9nZXRTcGVlY2godGV4dCwgY29uZmlnKSB7XHJcbiAgICAvLyBNYWtlIHN1cmUgQVdTIHNlcnZpY2VzIGV4aXN0XHJcbiAgICBpZiAoIXRoaXMuY29uc3RydWN0b3IuaXNSZWFkeSkge1xyXG4gICAgICBjb25zdCBlID0gJ0FXUyBzZXJ2aWNlcyBoYXZlIG5vdCBiZWVuIGluaXRpYWxpemVkLic7XHJcbiAgICAgIHJldHVybiBEZWZlcnJlZC5yZWplY3QoZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gTWFrZSBzdXJlIGl0cyBwb3NzaWJsZSB0byBnZW5lcmF0ZSBzcGVlY2hlc1xyXG4gICAgaWYgKCF0ZXh0KSB7XHJcbiAgICAgIGNvbnN0IGUgPSAnQ2Fubm90IHBsYXkgYSBzcGVlY2ggd2l0aCBubyB0ZXh0Lic7XHJcbiAgICAgIHJldHVybiBEZWZlcnJlZC5yZWplY3QoZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gVXBkYXRlIHRoZSBzcGVlY2ggd2l0aCBvcHRpb25zXHJcbiAgICB0ZXh0ID0gVGV4dFRvU3BlZWNoVXRpbHMudmFsaWRhdGVUZXh0KHRleHQpO1xyXG4gICAgY29uZmlnID0gdGhpcy5fdXBkYXRlQ29uZmlnKGNvbmZpZywgdGV4dCk7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuX3VwZGF0ZVNwZWVjaCh0ZXh0LCBjb25maWcpLnByb21pc2U7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBZGRzIGEgbmFtZXNwYWNlIHRvIHRoZSBob3N0IHdpdGggdGhlIG5hbWUgb2YgdGhlIGZlYXR1cmUgdG8gY29udGFpbiBwcm9wZXJ0aWVzXHJcbiAgICogYW5kIG1ldGhvZHMgZnJvbSB0aGUgZmVhdHVyZSB0aGF0IHVzZXJzIG9mIHRoZSBob3N0IG5lZWQgYWNjZXNzIHRvLlxyXG4gICAqXHJcbiAgICogQHNlZSBUZXh0VG9TcGVlY2hGZWF0dXJlXHJcbiAgICovXHJcbiAgaW5zdGFsbEFwaSgpIHtcclxuICAgIC8qKlxyXG4gICAgICogQGlubmVyXHJcbiAgICAgKiBAbmFtZXNwYWNlIFRleHRUb1NwZWVjaEZlYXR1cmVcclxuICAgICAqL1xyXG4gICAgY29uc3QgYXBpID0gc3VwZXIuaW5zdGFsbEFwaSgpO1xyXG5cclxuICAgIE9iamVjdC5hc3NpZ24oYXBpLCB7XHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbWVtYmVyb2YgVGV4dFRvU3BlZWNoRmVhdHVyZVxyXG4gICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICogQG1ldGhvZFxyXG4gICAgICAgKiBAc2VlIEFic3RyYWN0VGV4dFRvU3BlZWNoRmVhdHVyZSNwbGF5XHJcbiAgICAgICAqL1xyXG4gICAgICBwbGF5OiB0aGlzLnBsYXkuYmluZCh0aGlzKSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBtZW1iZXJvZiBUZXh0VG9TcGVlY2hGZWF0dXJlXHJcbiAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgKiBAbWV0aG9kXHJcbiAgICAgICAqIEBzZWUgQWJzdHJhY3RUZXh0VG9TcGVlY2hGZWF0dXJlI3BhdXNlXHJcbiAgICAgICAqL1xyXG4gICAgICBwYXVzZTogdGhpcy5wYXVzZS5iaW5kKHRoaXMpLFxyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIFRleHRUb1NwZWVjaEZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBtZXRob2RcclxuICAgICAgICogQHNlZSBBYnN0cmFjdFRleHRUb1NwZWVjaEZlYXR1cmUjcmVzdW1lXHJcbiAgICAgICAqL1xyXG4gICAgICByZXN1bWU6IHRoaXMucmVzdW1lLmJpbmQodGhpcyksXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbWVtYmVyb2YgVGV4dFRvU3BlZWNoRmVhdHVyZVxyXG4gICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICogQG1ldGhvZFxyXG4gICAgICAgKiBAc2VlIEFic3RyYWN0VGV4dFRvU3BlZWNoRmVhdHVyZSNzdG9wXHJcbiAgICAgICAqL1xyXG4gICAgICBzdG9wOiB0aGlzLnN0b3AuYmluZCh0aGlzKSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBtZW1iZXJvZiBUZXh0VG9TcGVlY2hGZWF0dXJlXHJcbiAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgKiBAbWV0aG9kXHJcbiAgICAgICAqIEBzZWUgQWJzdHJhY3RUZXh0VG9TcGVlY2hGZWF0dXJlI2dldFZvbHVtZVxyXG4gICAgICAgKi9cclxuICAgICAgZ2V0Vm9sdW1lOiB0aGlzLmdldFZvbHVtZS5iaW5kKHRoaXMpLFxyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIFRleHRUb1NwZWVjaEZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBtZXRob2RcclxuICAgICAgICogQHNlZSBBYnN0cmFjdFRleHRUb1NwZWVjaEZlYXR1cmUjc2V0Vm9sdW1lXHJcbiAgICAgICAqL1xyXG4gICAgICBzZXRWb2x1bWU6IHRoaXMuc2V0Vm9sdW1lLmJpbmQodGhpcyksXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbWVtYmVyb2YgVGV4dFRvU3BlZWNoRmVhdHVyZVxyXG4gICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICogQG1ldGhvZFxyXG4gICAgICAgKiBAc2VlIEFic3RyYWN0VGV4dFRvU3BlZWNoRmVhdHVyZSNwYXVzZVZvbHVtZVxyXG4gICAgICAgKi9cclxuICAgICAgcGF1c2VWb2x1bWU6IHRoaXMucGF1c2VWb2x1bWUuYmluZCh0aGlzKSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBtZW1iZXJvZiBUZXh0VG9TcGVlY2hGZWF0dXJlXHJcbiAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgKiBAbWV0aG9kXHJcbiAgICAgICAqIEBzZWUgQWJzdHJhY3RUZXh0VG9TcGVlY2hGZWF0dXJlI3Jlc3VtZVZvbHVtZVxyXG4gICAgICAgKi9cclxuICAgICAgcmVzdW1lVm9sdW1lOiB0aGlzLnJlc3VtZVZvbHVtZS5iaW5kKHRoaXMpLFxyXG4gICAgfSk7XHJcblxyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoYXBpLCB7XHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbWVtYmVyb2YgVGV4dFRvU3BlZWNoRmVhdHVyZVxyXG4gICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICogQHNlZSBBYnN0cmFjdFRleHRUb1NwZWVjaEZlYXR1cmUjc3BlZWNobWFya09mZnNldFxyXG4gICAgICAgKi9cclxuICAgICAgc3BlZWNobWFya09mZnNldDoge1xyXG4gICAgICAgIGdldDogKCkgPT4gdGhpcy5zcGVlY2htYXJrT2Zmc2V0LFxyXG4gICAgICAgIHNldDogb2Zmc2V0ID0+IHtcclxuICAgICAgICAgIHRoaXMuc3BlZWNobWFya09mZnNldCA9IG9mZnNldDtcclxuICAgICAgICB9LFxyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIGFwaTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgYW5kIHNldHMgdGhlIHZvbHVtZSB1c2VkIGZvciBhbGwgYXVkaW8gY2xpcHMgcGxheWVkIGJ5IHRoZSBzcGVha2VyLlxyXG4gICAqXHJcbiAgICogQHR5cGUge251bWJlcn1cclxuICAgKi9cclxuICBzZXQgdm9sdW1lKHZvbHVtZSkge1xyXG4gICAgdGhpcy5fdm9sdW1lID0gTWF0aFV0aWxzLmNsYW1wKHZvbHVtZSk7XHJcbiAgfVxyXG5cclxuICBnZXQgdm9sdW1lKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3ZvbHVtZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgd2hldGhlciBvciBub3QgdGhlIHNwZWFrZXIncyB2b2x1bWUgdmFsdWUgaXMgY3VycmVudGx5IGJlaW5nIHR3ZWVuZWQuXHJcbiAgICpcclxuICAgKiBAcmVhZG9ubHlcclxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgKi9cclxuICBnZXQgdm9sdW1lUGVuZGluZygpIHtcclxuICAgIHJldHVybiB0aGlzLl9wcm9taXNlcy52b2x1bWUgJiYgdGhpcy5fcHJvbWlzZXMudm9sdW1lLnBlbmRpbmc7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSB2b2x1bWUgdXNlZCBmb3IgYWxsIGF1ZGlvIGNsaXBzIHBsYXllZCBieSB0aGUgc3BlYWtlci5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XHJcbiAgICovXHJcbiAgZ2V0Vm9sdW1lKCkge1xyXG4gICAgcmV0dXJuIHRoaXMudm9sdW1lO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlcyB0aGUgdm9sdW1lIHVzZWQgZm9yIGFsbCBhdWRpbyBjbGlwcyBwbGF5ZWQgYnkgdGhlIHNwZWFrZXIgb3ZlciB0aW1lLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IHZvbHVtZSAtIFRhcmdldCB2b2x1bWUgdmFsdWUuXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtzZWNvbmRzPTBdIC0gQW1vdW50IG9mIHRpbWUgaXQgd2lsbCB0YWtlIHRvIHJlYWNoIHRoZSB0YXJnZXRcclxuICAgKiB2b2x1bWUuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IGVhc2luZ0ZuIC0gRWFzaW5nIGZ1bmN0aW9uIHVzZWQgZm9yIGludGVycG9sYXRpb24uXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7RGVmZXJyZWR9XHJcbiAgICovXHJcbiAgc2V0Vm9sdW1lKHZvbHVtZSwgc2Vjb25kcyA9IDAsIGVhc2luZ0ZuKSB7XHJcbiAgICBpZiAodGhpcy52b2x1bWVQZW5kaW5nKSB7XHJcbiAgICAgIHRoaXMuX3Byb21pc2VzLnZvbHVtZS5jYW5jZWwoKTtcclxuICAgIH1cclxuXHJcbiAgICB2b2x1bWUgPSBNYXRoVXRpbHMuY2xhbXAodm9sdW1lKTtcclxuICAgIHRoaXMuX3Byb21pc2VzLnZvbHVtZSA9IEFuaW1hdGlvblV0aWxzLmludGVycG9sYXRlUHJvcGVydHkoXHJcbiAgICAgIHRoaXMsXHJcbiAgICAgICd2b2x1bWUnLFxyXG4gICAgICB2b2x1bWUsXHJcbiAgICAgIHsgc2Vjb25kcywgZWFzaW5nRm4gfVxyXG4gICAgKTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5fcHJvbWlzZXMudm9sdW1lO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUGF1c2UgaW50ZXJwb2xhdGlvbiBoYXBwZW5pbmcgb24gdGhlIHNwZWFrZXIncyB2b2x1bWUgcHJvcGVydHkuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuICAgKi9cclxuICBwYXVzZVZvbHVtZSgpIHtcclxuICAgIHRoaXMuX3ZvbHVtZVBhdXNlZCA9IHRydWU7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMudm9sdW1lUGVuZGluZztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlc3VtZSBhbnkgaW50ZXJwb2xhdGlvbiBoYXBwZW5pbmcgb24gdGhlIHNwZWFrZXIncyB2b2x1bWUgcHJvcGVydHkuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuICAgKi9cclxuICByZXN1bWVWb2x1bWUoKSB7XHJcbiAgICB0aGlzLl92b2x1bWVQYXVzZWQgPSBmYWxzZTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy52b2x1bWVQZW5kaW5nO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlIHRoZSBjdXJyZW50bHkgcGxheWluZyBzcGVlY2guXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge251bWJlcn0gZGVsdGFUaW1lIC0gVGltZSBzaW5jZSB0aGUgbGFzdCB1cGRhdGUuXHJcbiAgICovXHJcbiAgdXBkYXRlKGRlbHRhVGltZSkge1xyXG4gICAgaWYgKCF0aGlzLl92b2x1bWVQYXVzZWQpIHtcclxuICAgICAgdGhpcy5fcHJvbWlzZXMudm9sdW1lLmV4ZWN1dGUoZGVsdGFUaW1lKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5fY3VycmVudFNwZWVjaCAmJiB0aGlzLl9jdXJyZW50U3BlZWNoLnBsYXlpbmcpIHtcclxuICAgICAgdGhpcy5fY3VycmVudFNwZWVjaC52b2x1bWUgPSB0aGlzLl92b2x1bWU7XHJcbiAgICAgIHRoaXMuX2N1cnJlbnRTcGVlY2gudXBkYXRlKHRoaXMuX2hvc3Qubm93KTtcclxuICAgICAgc3VwZXIudXBkYXRlKGRlbHRhVGltZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXQgdGhlIGN1cnJlbnQgc3BlZWNoIHRvIGEgbmV3IGFzc2V0IGFuZCB1cGRhdGUgdGhlIHNwZWVjaCdzIHNwZWVjaG1hcmtcclxuICAgKiBvZmZzZXQgdmFsdWUgdG8gbWF0Y2ggdGhhdCBvZiB0aGUgZmVhdHVyZS5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge0Fic3RyYWN0U3BlZWNofSBzcGVlY2ggLSBTcGVlY2ggdG8gc2V0IGFzIGN1cnJlbnQuXHJcbiAgICovXHJcbiAgX3NldEN1cnJlbnRTcGVlY2goc3BlZWNoKSB7XHJcbiAgICBzcGVlY2guc3BlZWNobWFya09mZnNldCA9IHRoaXMuX3NwZWVjaG1hcmtPZmZzZXQ7XHJcbiAgICB0aGlzLl9jdXJyZW50U3BlZWNoID0gc3BlZWNoO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlIGEgcHJvbWlzZSB0aGF0IHdpbGwgcGxheS9yZXN1bWUgYSBzcGVlY2ggd2l0aCB0aGUgZ2l2ZW4gdGV4dCBhZnRlclxyXG4gICAqIHRoZSBhdWRpbyBjb250ZXh0IGF0dGVtcHRzIHRvIHJlc3VtZSBhbmQgc3BlZWNoIGF1ZGlvIGlzIHJldHJpZXZlZCBmcm9tIFBvbGx5LlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gVGhlIHRleHQgb2YgdGhlIG5ldyBzcGVlY2ggdG8gcGxheS5cclxuICAgKiBAcGFyYW0ge09iamVjdD19IGNvbmZpZyAtIE9wdGlvbmFsIHBhcmFtZXRlcnMgZm9yIHRoZSBzcGVlY2guXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtwbGF5TWV0aG9kID0gJ3BsYXknXSAtIE1ldGhvZCB0byBleGVjdXRlIG9uIHRoZSByZXN1bHRpbmdcclxuICAgKiBTcGVlY2ggb2JqZWN0LiBWYWxpZCBvcHRpb25zIGFyZSAncGxheScgYW5kICdyZXN1bWUnLlxyXG4gICAqL1xyXG4gIF9zdGFydFNwZWVjaCh0ZXh0LCBjb25maWcsIHBsYXlNZXRob2QgPSAncGxheScpIHtcclxuICAgIC8vIElmIG5vIHRleHQgaXMgcHJvdmlkZWQsIHRyeSB0byB1c2UgdGhlIGN1cnJlbnQgc3BlZWNoXHJcbiAgICBpZiAodGV4dCA9PT0gdW5kZWZpbmVkICYmIHBsYXlNZXRob2QgPT09ICdyZXN1bWUnICYmIHRoaXMuX2N1cnJlbnRTcGVlY2gpIHtcclxuICAgICAgdGV4dCA9IHRoaXMuX2N1cnJlbnRTcGVlY2gudGV4dDtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBjdXJyZW50UHJvbWlzZSA9IHRoaXMuX2N1cnJlbnRQcm9taXNlIHx8IHtcclxuICAgICAgcGxheTogbmV3IERlZmVycmVkKFxyXG4gICAgICAgIHVuZGVmaW5lZCxcclxuICAgICAgICAoKSA9PiB7IGN1cnJlbnRQcm9taXNlLnNwZWVjaC5jYW5jZWwoKTsgfSxcclxuICAgICAgICAoKSA9PiB7IGN1cnJlbnRQcm9taXNlLnNwZWVjaC5jYW5jZWwoKTsgfSxcclxuICAgICAgICAoKSA9PiB7IGN1cnJlbnRQcm9taXNlLnNwZWVjaC5jYW5jZWwoKTsgfVxyXG4gICAgICApLFxyXG4gICAgICBzcGVlY2g6IG5ldyBEZWZlcnJlZCgpLFxyXG4gICAgfTtcclxuICAgIHRoaXMuX2N1cnJlbnRQcm9taXNlID0gY3VycmVudFByb21pc2U7XHJcblxyXG4gICAgdGhpcy5fZ2V0U3BlZWNoKHRleHQsIGNvbmZpZylcclxuICAgICAgLnRoZW4oc3BlZWNoID0+IHtcclxuICAgICAgICAvLyBFeGl0IGlmIHRoZSBwcm9taXNlIGlzIG5vIGxvbmdlciBwZW5kaW5nIGJlY2F1c2Ugb2YgdXNlciBpbnRlcmFjdGlvblxyXG4gICAgICAgIGlmICghY3VycmVudFByb21pc2UucGxheS5wZW5kaW5nKSB7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9jdXJyZW50UHJvbWlzZSAhPT0gY3VycmVudFByb21pc2UpIHtcclxuICAgICAgICAgIC8vIENhbmNlbCBpZiBhbm90aGVyIGNhbGwgdG8gcGxheSBoYXMgYWxyZWFkeSBiZWVuIG1hZGVcclxuICAgICAgICAgIGN1cnJlbnRQcm9taXNlLnBsYXkuY2FuY2VsKCk7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBSZXNldCBjdXJyZW50IHNwZWVjaCB3aGVuIHRoZSBzcGVlY2ggZW5kc1xyXG4gICAgICAgIGNvbnN0IG9uRmluaXNoID0gKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5fY3VycmVudFNwZWVjaCA9IG51bGw7XHJcbiAgICAgICAgICB0aGlzLl9jdXJyZW50UHJvbWlzZSA9IG51bGw7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgLy8gQ2FuY2VsIHRoZSBjdXJyZW50bHkgcGxheWluZyBzcGVlY2hcclxuICAgICAgICBpZiAodGhpcy5fY3VycmVudFNwZWVjaCAmJiB0aGlzLl9jdXJyZW50U3BlZWNoLnBsYXlpbmcpIHtcclxuICAgICAgICAgIGlmIChwbGF5TWV0aG9kID09PSAncGxheScpIHtcclxuICAgICAgICAgICAgdGhpcy5fY3VycmVudFNwZWVjaC5jYW5jZWwoKTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAocGxheU1ldGhvZCA9PT0gJ3Jlc3VtZSdcclxuICAgICAgICAgICAgJiYgdGhpcy5fY3VycmVudFNwZWVjaC5hdWRpbyAhPT0gc3BlZWNoLmF1ZGlvKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRTcGVlY2guY2FuY2VsKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9zZXRDdXJyZW50U3BlZWNoKHNwZWVjaCk7XHJcblxyXG4gICAgICAgIC8vIFBsYXkgdGhlIHNwZWVjaFxyXG4gICAgICAgIGN1cnJlbnRQcm9taXNlLnNwZWVjaCA9IHNwZWVjaFtwbGF5TWV0aG9kXSh0aGlzLl9ob3N0Lm5vdywgb25GaW5pc2gsIG9uRmluaXNoLCBvbkZpbmlzaCk7XHJcbiAgICAgICAgY3VycmVudFByb21pc2Uuc3BlZWNoLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgaWYgKGN1cnJlbnRQcm9taXNlLnNwZWVjaC5yZXNvbHZlZCkge1xyXG4gICAgICAgICAgICBjdXJyZW50UHJvbWlzZS5wbGF5LnJlc29sdmUoKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGN1cnJlbnRQcm9taXNlLnBsYXkuY2FuY2VsKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSkuY2F0Y2goZXJyb3IgPT4ge1xyXG4gICAgICAgICAgY3VycmVudFByb21pc2UucGxheS5yZWplY3QoZXJyb3IpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KVxyXG4gICAgICAuY2F0Y2goZSA9PiB7XHJcbiAgICAgICAgZSA9IGBDYW5ub3QgJHtwbGF5TWV0aG9kfSBzcGVlY2ggJHt0ZXh0fSBvbiBob3N0ICR7dGhpcy5ob3N0LmlkfS4gJHtlfWA7XHJcbiAgICAgICAgY3VycmVudFByb21pc2UucGxheS5yZWplY3QoZSk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBjdXJyZW50UHJvbWlzZS5wbGF5O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU3RvcCBhbnkgc3BlZWNoZXMgY3VycmVudGx5IHBsYXlpbmcgYW5kIHBsYXkgYSBuZXcgc3BlZWNoIGZyb20gdGhlIGJlZ2lubmluZy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gVGhlIHRleHQgb2YgdGhlIG5ldyBzcGVlY2ggdG8gcGxheS5cclxuICAgKiBAcGFyYW0ge09iamVjdD19IGNvbmZpZyAtIE9wdGlvbmFsIHBhcmFtZXRlcnMgZm9yIHRoZSBzcGVlY2guXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7RGVmZXJyZWR9XHJcbiAgICovXHJcbiAgcGxheSh0ZXh0LCBjb25maWcpIHtcclxuICAgIHJldHVybiB0aGlzLl9zdGFydFNwZWVjaCh0ZXh0LCBjb25maWcsICdwbGF5Jyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJZiBhIHNwZWVjaCBpcyBjdXJyZW50bHkgcGxheWluZywgcGF1c2UgaXQgYXQgdGhlIGN1cnJlbnQgdGltZS5cclxuICAgKi9cclxuICBwYXVzZSgpIHtcclxuICAgIGlmICh0aGlzLl9jdXJyZW50U3BlZWNoICYmIHRoaXMuX2N1cnJlbnRTcGVlY2gucGxheWluZykge1xyXG4gICAgICB0aGlzLl9jdXJyZW50U3BlZWNoLnBhdXNlKHRoaXMuX2hvc3Qubm93KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICBgQ2Fubm90IHBhdXNlIHNwZWVjaCBvbiBob3N0ICR7dGhpcy5ob3N0LmlkfS4gTm8gc3BlZWNoIGlzIGN1cnJlbnRseSBwbGF5aW5nYFxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU3RvcCBhbnkgc3BlZWNoZXMgY3VycmVudGx5IHBsYXlpbmcgYW5kIHJlc3VtZSBhIG5ldyBzcGVlY2ggZnJvbSB0aGUgY3VycmVudFxyXG4gICAqIHRpbWUuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZz19IHRleHQgLSBUaGUgdGV4dCBvZiB0aGUgbmV3IHNwZWVjaCB0byBwbGF5LiBJZiB1bmRlZmluZWQgYW5kXHJcbiAgICogdGhlcmUgaXMgYSBjdXJyZW50IHNwZWVjaCB0aGF0IGlzIHBhdXNlZCwgdGhlIGN1cnJlbnQgc3BlZWNoIHdpbGwgYmUgcmVzdW1lZC5cclxuICAgKiBAcGFyYW0ge09iamVjdD19IGNvbmZpZyAtIE9wdGlvbmFsIHBhcmFtZXRlcnMgZm9yIHRoZSBzcGVlY2guXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7RGVmZXJyZWR9XHJcbiAgICovXHJcbiAgcmVzdW1lKHRleHQsIGNvbmZpZykge1xyXG4gICAgcmV0dXJuIHRoaXMuX3N0YXJ0U3BlZWNoKHRleHQsIGNvbmZpZywgJ3Jlc3VtZScpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSWYgYSBzcGVlY2ggaXMgY3VycmVudGx5IHBsYXlpbmcsIHN0b3AgcGxheWJhY2sgYW5kIHJlc2V0IHRpbWUuXHJcbiAgICovXHJcbiAgc3RvcCgpIHtcclxuICAgIGlmICh0aGlzLl9jdXJyZW50U3BlZWNoICYmIHRoaXMuX2N1cnJlbnRTcGVlY2gucGxheWluZykge1xyXG4gICAgICB0aGlzLl9jdXJyZW50U3BlZWNoLnN0b3AoKTtcclxuICAgICAgdGhpcy5fY3VycmVudFNwZWVjaCA9IG51bGw7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLndhcm4oXHJcbiAgICAgICAgYENhbm5vdCBzdG9wIHNwZWVjaCBvbiBob3N0ICR7dGhpcy5ob3N0LmlkfS4gTm8gc3BlZWNoIGlzIGN1cnJlbnRseSBwbGF5aW5nLmBcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGRpc2NhcmQoKSB7XHJcbiAgICBpZiAodGhpcy5fY3VycmVudFNwZWVjaCAmJiB0aGlzLl9jdXJyZW50U3BlZWNoLnBsYXlpbmcpIHtcclxuICAgICAgdGhpcy5fY3VycmVudFNwZWVjaC5zdG9wKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZGVsZXRlIHRoaXMuX3NwZWVjaENhY2hlO1xyXG5cclxuICAgIHN1cGVyLmRpc2NhcmQoKTtcclxuICB9XHJcbn1cclxuXHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEFic3RyYWN0VGV4dFRvU3BlZWNoRmVhdHVyZSwge1xyXG4gIEFXU19WRVJTSU9OOiB7XHJcbiAgICBnZXQ6ICgpID0+IGF3c1ZlcnNpb24sXHJcbiAgfSxcclxuICBQT0xMWV9NSU5fTkVVUkFMX1ZFUlNJT046IHtcclxuICAgIHZhbHVlOiAnMi41MDMnLFxyXG4gICAgd3JpdGFibGU6IGZhbHNlLFxyXG4gIH0sXHJcbiAgUE9MTFlfREVGQVVMVFM6IHtcclxuICAgIHZhbHVlOiB7XHJcbiAgICAgIEVuZ2luZTogJ3N0YW5kYXJkJyxcclxuICAgICAgTGV4aWNvbk5hbWVzOiBbXSxcclxuICAgICAgT3V0cHV0Rm9ybWF0OiAnbXAzJyxcclxuICAgICAgU2FtcGxlUmF0ZTogJzIyMDUwJyxcclxuICAgICAgVGV4dDogJycsXHJcbiAgICAgIFRleHRUeXBlOiAnc3NtbCcsXHJcbiAgICAgIFZvaWNlSWQ6ICdBbXknLFxyXG4gICAgICBMYW5ndWFnZUNvZGU6ICdlbi1HQicsXHJcbiAgICAgIExhbmd1YWdlTmFtZTogJ0JyaXRpc2ggRW5nbGlzaCcsXHJcbiAgICB9LFxyXG4gICAgd3JpdGFibGU6IGZhbHNlLFxyXG4gIH0sXHJcbiAgUE9MTFlfVk9JQ0VTOiB7XHJcbiAgICB2YWx1ZTogW10sXHJcbiAgICB3cml0YWJsZTogZmFsc2UsXHJcbiAgfSxcclxuICBQT0xMWV9MQU5HVUFHRVM6IHtcclxuICAgIHZhbHVlOiB7fSxcclxuICAgIHdyaXRhYmxlOiBmYWxzZSxcclxuICB9LFxyXG4gIFBPTExZX0xBTkdVQUdFX0NPREVTOiB7XHJcbiAgICB2YWx1ZToge30sXHJcbiAgICB3cml0YWJsZTogZmFsc2UsXHJcbiAgfSxcclxuICBfaXNSZWFkeToge1xyXG4gICAgdmFsdWU6IGZhbHNlLFxyXG4gICAgd3JpdGFibGU6IHRydWUsXHJcbiAgfSxcclxuICBFVkVOVFM6IHtcclxuICAgIHZhbHVlOiB7XHJcbiAgICAgIC4uLk9iamVjdC5nZXRQcm90b3R5cGVPZihBYnN0cmFjdFRleHRUb1NwZWVjaEZlYXR1cmUpLkVWRU5UUyxcclxuICAgICAgcmVhZHk6ICdvblJlYWR5RXZlbnQnLFxyXG4gICAgICBwbGF5OiAnb25QbGF5RXZlbnQnLFxyXG4gICAgICBwYXVzZTogJ29uUGF1c2VFdmVudCcsXHJcbiAgICAgIHJlc3VtZTogJ29uUmVzdW1lRXZlbnQnLFxyXG4gICAgICBpbnRlcnJ1cHQ6ICdvbkludGVycnVwdEV2ZW50JyxcclxuICAgICAgc3RvcDogJ29uU3RvcEV2ZW50JyxcclxuICAgICAgc2VudGVuY2U6ICdvblNlbnRlbmNlRXZlbnQnLFxyXG4gICAgICB3b3JkOiAnb25Xb3JkRXZlbnQnLFxyXG4gICAgICB2aXNlbWU6ICdvblZpc2VtZUV2ZW50JyxcclxuICAgICAgc3NtbDogJ29uU3NtbEV2ZW50JyxcclxuICAgIH0sXHJcbiAgfSxcclxuICBTRVJWSUNFUzoge1xyXG4gICAgdmFsdWU6IHtcclxuICAgICAgLi4uT2JqZWN0LmdldFByb3RvdHlwZU9mKEFic3RyYWN0VGV4dFRvU3BlZWNoRmVhdHVyZSkuU0VSVklDRVMsXHJcbiAgICAgIHBvbGx5OiB1bmRlZmluZWQsXHJcbiAgICAgIHByZXNpZ25lcjogdW5kZWZpbmVkLFxyXG4gICAgfSxcclxuICB9LFxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IEFic3RyYWN0VGV4dFRvU3BlZWNoRmVhdHVyZTtcclxuIiwiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXHJcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxyXG5pbXBvcnQgQWJzdHJhY3RTcGVlY2ggZnJvbSAnLi9BYnN0cmFjdFNwZWVjaCc7XHJcblxyXG4vKipcclxuICogVGhlIGJ1aWx0LWluIGNsYXNzIGZvciBhc3luY2hyb25vdXMgUHJvbWlzZXMuXHJcbiAqIEBleHRlcm5hbCBBdWRpb1xyXG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9IVE1MQXVkaW9FbGVtZW50L0F1ZGlvXHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEBleHRlbmRzIEFic3RyYWN0U3BlZWNoXHJcbiAqIEBhbGlhcyBjb3JlL1NwZWVjaFxyXG4gKi9cclxuY2xhc3MgU3BlZWNoIGV4dGVuZHMgQWJzdHJhY3RTcGVlY2gge1xyXG4gIC8qKlxyXG4gICAqIEBjb25zdHJ1Y3RvclxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtUZXh0VG9TcGVlY2h9IHNwZWFrZXIgLSBUaGUgb3duZXIgb2YgdGhlIFNwZWVjaCB0aGF0IHdpbGwgZW1pdCBzcGVlY2htYXJrXHJcbiAgICogbWVzc2FnZXMuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSBUaGUgdGV4dCBvZiB0aGUgc3BlZWNoLlxyXG4gICAqIEBwYXJhbSB7QXJyYXkuPE9iamVjdD59IFtzcGVlY2htYXJrcz1bXV0gLSBBbiBhcnJheSBvZiBzcGVlY2htYXJrIG9iamVjdHMgcmVwcmVzZW50aW5nXHJcbiAgICogdGhlIHRleHQgYW5kIHRpbWluZyBvZiB0aGUgc3BlZWNoLlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBhdWRpb0NvbmZpZyAtIE9iamVjdCBjb250YWluaW5nIGF1ZGlvIGFuZCB1cmwuXHJcbiAgICogQHBhcmFtIHtleHRlcm5hbDpBdWRpb30gYXVkaW9Db25maWcuYXVkaW8gLSBQbGF5YWJsZSBhdWRpbyBvYmplY3QuXHJcbiAgICovXHJcbiAgY29uc3RydWN0b3Ioc3BlYWtlciwgdGV4dCwgc3BlZWNobWFya3MgPSBbXSwgYXVkaW9Db25maWcpIHtcclxuICAgIHN1cGVyKHNwZWFrZXIsIHRleHQsIHNwZWVjaG1hcmtzKTtcclxuICAgIHRoaXMuX2F1ZGlvID0gYXVkaW9Db25maWcuYXVkaW87XHJcblxyXG4gICAgLy8gS2VlcCB0cmFjayBvZiB3aGV0aGVyIHRoZSBhdWRpbyBoYXMgZmluaXNoZWQgcGxheWluZyB0aHJvdWdoXHJcbiAgICB0aGlzLl9hdWRpby5vbmVuZGVkID0gKCkgPT4ge1xyXG4gICAgICB0aGlzLl9hdWRpb0ZpbmlzaGVkID0gdHJ1ZTtcclxuICAgIH07XHJcbiAgICB0aGlzLl9hdWRpb0ZpbmlzaGVkID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIF9jaGVja0ZpbmlzaGVkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2F1ZGlvRmluaXNoZWQgJiYgc3VwZXIuX2NoZWNrRmluaXNoZWQoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIHBsYXlhYmxlIGF1ZGlvIGZvciB0aGUgc3BlZWNoLlxyXG4gICAqXHJcbiAgICogQHJlYWRvbmx5XHJcbiAgICogQHR5cGUge2V4dGVybmFsOkF1ZGlvfVxyXG4gICAqL1xyXG4gIGdldCBhdWRpbygpIHtcclxuICAgIHJldHVybiB0aGlzLl9hdWRpbztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIGF1ZGlvIHZvbHVtZSBmb3IgdGhlIHNwZWVjaC5cclxuICAgKlxyXG4gICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICovXHJcbiAgZ2V0IHZvbHVtZSgpIHtcclxuICAgIHJldHVybiB0aGlzLl9hdWRpby52b2x1bWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXRzIHRoZSBhdWRpbyB2b2x1bWUgZm9yIHRoZSBzcGVlY2guXHJcbiAgICovXHJcbiAgc2V0IHZvbHVtZSh2b2x1bWUpIHtcclxuICAgIHRoaXMuX2F1ZGlvLnZvbHVtZSA9IHZvbHVtZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldCB0aGUgYXVkaW8ncyBjdXJyZW50IGxvY2FsIHRpbWUgYW5kIHBsYXkgaXQuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIF9wbGF5QXVkaW8oKSB7XHJcbiAgICBpZiAodGhpcy5fc3BlZWNobWFya09mZnNldCA8IDApIHtcclxuICAgICAgdGhpcy5fYXVkaW8uY3VycmVudFRpbWUgPSB0aGlzLl9zcGVlY2htYXJrT2Zmc2V0O1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5fcGxheWluZykge1xyXG4gICAgICAgICAgdGhpcy5fYXVkaW8uY3VycmVudFRpbWUgPVxyXG4gICAgICAgICAgICAodGhpcy5fbG9jYWxUaW1lICsgdGhpcy5fc3BlZWNobWFya09mZnNldCkgLyAxMDAwO1xyXG4gICAgICAgICAgdGhpcy5fYXVkaW8ucGxheSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSwgLXRoaXMuX3NwZWVjaG1hcmtPZmZzZXQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fYXVkaW8uY3VycmVudFRpbWUgPSAwO1xyXG4gICAgICB0aGlzLl9hdWRpby5wbGF5KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQYXVzZSB0aGUgYXVkaW8gb25jZSBpdCBpcyBwbGF5YWJsZS5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICovXHJcbiAgX3BhdXNlQXVkaW8oKSB7XHJcbiAgICB0aGlzLl9hdWRpby5wbGF5KCkudGhlbigoKSA9PiB7XHJcbiAgICAgIGlmICghdGhpcy5fcGxheWluZykge1xyXG4gICAgICAgIHRoaXMuX2F1ZGlvLnBhdXNlKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcGxheShjdXJyZW50VGltZSwgb25GaW5pc2gsIG9uRXJyb3IsIG9uSW50ZXJydXB0KSB7XHJcbiAgICB0aGlzLl9hdWRpb0ZpbmlzaGVkID0gZmFsc2U7XHJcbiAgICB0aGlzLl9wbGF5QXVkaW8oKTtcclxuXHJcbiAgICByZXR1cm4gc3VwZXIucGxheShjdXJyZW50VGltZSwgb25GaW5pc2gsIG9uRXJyb3IsIG9uSW50ZXJydXB0KTtcclxuICB9XHJcblxyXG4gIHBhdXNlKGN1cnJlbnRUaW1lKSB7XHJcbiAgICB0aGlzLl9wYXVzZUF1ZGlvKCk7XHJcbiAgICBzdXBlci5wYXVzZShjdXJyZW50VGltZSk7XHJcbiAgfVxyXG5cclxuICByZXN1bWUoY3VycmVudFRpbWUsIG9uRmluaXNoLCBvbkVycm9yLCBvbkludGVycnVwdCkge1xyXG4gICAgdGhpcy5fYXVkaW9GaW5pc2hlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5fYXVkaW8ucGxheSgpO1xyXG5cclxuICAgIHJldHVybiBzdXBlci5yZXN1bWUoY3VycmVudFRpbWUsIG9uRmluaXNoLCBvbkVycm9yLCBvbkludGVycnVwdCk7XHJcbiAgfVxyXG5cclxuICBjYW5jZWwoKSB7XHJcbiAgICB0aGlzLl9wYXVzZUF1ZGlvKCk7XHJcbiAgICBzdXBlci5jYW5jZWwoKTtcclxuICB9XHJcblxyXG4gIHN0b3AoKSB7XHJcbiAgICB0aGlzLl9wYXVzZUF1ZGlvKCk7XHJcbiAgICB0aGlzLl9hdWRpby5jdXJyZW50VGltZSA9IDA7XHJcbiAgICBzdXBlci5zdG9wKCk7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBTcGVlY2g7XHJcbiIsIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxyXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTBcclxuaW1wb3J0IENvcmVTcGVlY2ggZnJvbSAnY29yZS9hd3NwYWNrL1NwZWVjaCc7XHJcbmltcG9ydCBBYnN0cmFjdFNwZWVjaCBmcm9tICdjb3JlL2F3c3BhY2svQWJzdHJhY3RTcGVlY2gnO1xyXG5cclxuLyoqXHJcbiAqIEBleHRlbmRzIGNvcmUvU3BlZWNoXHJcbiAqIEBhbGlhcyBCYWJ5bG9uLmpzL1NwZWVjaFxyXG4gKi9cclxuY2xhc3MgU3BlZWNoIGV4dGVuZHMgQ29yZVNwZWVjaCB7XHJcbiAgLyoqXHJcbiAgICogQGNvbnN0cnVjdG9yXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge0JhYnlsb24uanMvVGV4dFRvU3BlZWNoRmVhdHVyZX0gc3BlYWtlciAtIFRoZSBvd25lciBvZiB0aGUgU3BlZWNoXHJcbiAgICogdGhhdCB3aWxsIGVtaXQgc3BlZWNobWFyayBtZXNzYWdlcy5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIFRoZSB0ZXh0IG9mIHRoZSBzcGVlY2guXHJcbiAgICogQHBhcmFtIHtBcnJheS48T2JqZWN0Pn0gW3NwZWVjaG1hcmtzPVtdXSAtIEFuIGFycmF5IG9mIHNwZWVjaG1hcmsgb2JqZWN0cyByZXByZXNlbnRpbmdcclxuICAgKiB0aGUgdGV4dCBhbmQgdGltaW5nIG9mIHRoZSBzcGVlY2guXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IGF1ZGlvQ29uZmlnIC0gT2JqZWN0IGNvbnRhaW5pbmcgYXVkaW8gYW5kIHVybC5cclxuICAgKiBAcGFyYW0ge2V4dGVybmFsOkF1ZGlvfSBhdWRpb0NvbmZpZy5hdWRpbyAtIFBsYXlhYmxlIGF1ZGlvIG9iamVjdC5cclxuICAgKi9cclxuICBjb25zdHJ1Y3RvciguLi5hcmdzKSB7XHJcbiAgICBzdXBlciguLi5hcmdzKTtcclxuXHJcbiAgICB0aGlzLl9hdWRpby5vbkVuZGVkT2JzZXJ2YWJsZS5hZGQoKCkgPT4ge1xyXG4gICAgICB0aGlzLl9hdWRpb0ZpbmlzaGVkID0gdHJ1ZTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgX3BsYXlBdWRpbygpIHtcclxuICAgIGlmICh0aGlzLl9zcGVlY2htYXJrT2Zmc2V0IDwgMCkge1xyXG4gICAgICB0aGlzLl9hdWRpby5wbGF5KC10aGlzLl9zcGVlY2htYXJrT2Zmc2V0IC8gMTAwMCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9hdWRpby5wbGF5KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBfcGF1c2VBdWRpbygpIHtcclxuICAgIHRoaXMuX2F1ZGlvLnBhdXNlKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgdm9sdW1lKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2F1ZGlvLmdldFZvbHVtZSgpO1xyXG4gIH1cclxuXHJcbiAgc2V0IHZvbHVtZSh2b2x1bWUpIHtcclxuICAgIHRoaXMuX2F1ZGlvLnNldFZvbHVtZSh2b2x1bWUpO1xyXG4gIH1cclxuXHJcbiAgcGxheShjdXJyZW50VGltZSwgb25GaW5pc2gsIG9uRXJyb3IsIG9uSW50ZXJydXB0KSB7XHJcbiAgICB0aGlzLl9hdWRpby5zdG9wKCk7XHJcblxyXG4gICAgcmV0dXJuIHN1cGVyLnBsYXkoY3VycmVudFRpbWUsIG9uRmluaXNoLCBvbkVycm9yLCBvbkludGVycnVwdCk7XHJcbiAgfVxyXG5cclxuICBzdG9wKCkge1xyXG4gICAgdGhpcy5fYXVkaW8uc3RvcCgpO1xyXG5cclxuICAgIEFic3RyYWN0U3BlZWNoLnByb3RvdHlwZS5zdG9wLmNhbGwodGhpcyk7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBTcGVlY2g7XHJcbiIsIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxyXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTBcclxuaW1wb3J0IFNwZWVjaCBmcm9tICdhcHAvYXdzcGFjay9TcGVlY2gnO1xyXG5pbXBvcnQgRGVmZXJyZWQgZnJvbSAnY29yZS9EZWZlcnJlZCc7XHJcbmltcG9ydCBBYnN0cmFjdFRleHRUb1NwZWVjaEZlYXR1cmUgZnJvbSAnLi9BYnN0cmFjdFRleHRUb1NwZWVjaEZlYXR1cmUnO1xyXG5cclxuLyoqXHJcbiAqIEBleHRlbmRzIEFic3RyYWN0VGV4dFRvU3BlZWNoRmVhdHVyZVxyXG4gKiBAYWxpYXMgY29yZS9UZXh0VG9TcGVlY2hGZWF0dXJlXHJcbiAqL1xyXG5jbGFzcyBUZXh0VG9TcGVlY2hGZWF0dXJlIGV4dGVuZHMgQWJzdHJhY3RUZXh0VG9TcGVlY2hGZWF0dXJlIHtcclxuICBjb25zdHJ1Y3RvciguLi5hcmdzKSB7XHJcbiAgICBzdXBlciguLi5hcmdzKTtcclxuXHJcbiAgICB0aGlzLl9lbmFibGVkID0gZmFsc2U7XHJcbiAgICB0aGlzLl9zZXRBdWRpb0NvbnRleHQoKTtcclxuICAgIHRoaXMuX29ic2VydmVBdWRpb0NvbnRleHQoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFN0b3JlIHRoZSBhdWRpbyBjb250ZXh0IHRoYXQgd2lsbCBiZSB1c2VkIHRvIGVuc3VyZSBhdWRpbyBjYW4gYmUgcGxheWVkLlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBfc2V0QXVkaW9Db250ZXh0KCkge1xyXG4gICAgdGhpcy5fYXVkaW9Db250ZXh0ID0gbmV3IEF1ZGlvQ29udGV4dCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTGlzdGVuIGZvciBzdGF0ZSBjaGFuZ2VzIG9uIHRoZSBhdWRpbyBjb250ZXh0IHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSBmZWF0dXJlXHJcbiAgICogaXMgZW5hYmxlZC5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICovXHJcbiAgX29ic2VydmVBdWRpb0NvbnRleHQoKSB7XHJcbiAgICBpZiAodGhpcy5fYXVkaW9Db250ZXh0KSB7XHJcbiAgICAgIHRoaXMuX2F1ZGlvQ29udGV4dC5vbnN0YXRlY2hhbmdlID0gKCkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLl9hdWRpb0NvbnRleHQuc3RhdGUgPT09ICdydW5uaW5nJykge1xyXG4gICAgICAgICAgdGhpcy5fZW5hYmxlZCA9IHRydWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuX2VuYWJsZWQgPSBmYWxzZTtcclxuICAgICAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICAgICAgJ1RoZSBhdWRpbyBjb250ZXh0IGlzIG5vdCBydW5uaW5nLiBTcGVlY2ggd2lsbCBub3QgYmUgYWJsZSB0byBiZSBwbGF5ZWQgdW50aWwgaXQgaXMgcmVzdW1lZC4gVXNlIHRoZSBcIlRleHRUb1NwZWVjaEZlYXR1cmUucmVzdW1lQXVkaW9cIiBtZXRob2QgdG8gdHJ5IHRvIHJlc3VtZSBpdCBhZnRlciBhIHVzZXIgZ2VzdHVyZS4nXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgfTtcclxuXHJcbiAgICAgIHRoaXMuX2F1ZGlvQ29udGV4dC5vbnN0YXRlY2hhbmdlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGUgYW4gQXVkaW8gb2JqZWN0IG9mIHNwZWVjaCBhdWRpbyBmb3IgdGhlIGdpdmVuIHNwZWVjaCB0ZXh0LlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXMgLSBQYXJhbWV0ZXJzIG9iamVjdCBjb21wYXRpYmxlIHdpdGggUG9sbHkuc3ludGhlc2l6ZVNwZWVjaC5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfSBSZXNvbHZlcyB3aXRoIGFuIG9iamVjdCBjb250YWluaW5nIHRoZSBhdWRpbyBVUkwgYW5kIEF1ZGlvXHJcbiAgICogb2JqZWN0LlxyXG4gICAqL1xyXG4gIF9zeW50aGVzaXplQXVkaW8ocGFyYW1zKSB7XHJcbiAgICByZXR1cm4gc3VwZXIuX3N5bnRoZXNpemVBdWRpbyhwYXJhbXMpLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgY29uc3Qge3VybH0gPSByZXN1bHQ7XHJcblxyXG4gICAgICAvLyBDcmVhdGUgYW4gQXVkaW8gb2JqZWN0IHRoYXQgcG9pbnRzIHRvIHRoZSBwcmVzaWduZWQgdXJsXHJcbiAgICAgIGNvbnN0IGF1ZGlvID0gbmV3IEF1ZGlvKHVybCk7XHJcbiAgICAgIGF1ZGlvLmxvb3AgPSB0aGlzLmxvb3A7XHJcbiAgICAgIGF1ZGlvLmNyb3NzT3JpZ2luID0gJ2Fub255bW91cyc7XHJcbiAgICAgIGF1ZGlvLnByZWxvYWQgPSAnYXV0byc7XHJcbiAgICAgIHJlc3VsdC5hdWRpbyA9IGF1ZGlvO1xyXG5cclxuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xyXG4gICAgICAgIC8vIFJlc29sdmUgb25jZSB0aGUgbWluaW11bSBhbW91bnQgaXMgbG9hZGVkXHJcbiAgICAgICAgYXVkaW8uYWRkRXZlbnRMaXN0ZW5lcignY2FucGxheXRocm91Z2gnLCAoKSA9PiB7XHJcbiAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIC8vIFN0YXJ0IGxvYWRpbmcgdGhlIGF1ZGlvXHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChhdWRpbyk7XHJcbiAgICAgICAgYXVkaW8ubG9hZCgpO1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlIGEgbmV3IFNwZWVjaCBvYmplY3QgZm9yIHRoZSBzcGVha2VyLlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7VGV4dFRvU3BlZWNofSBzcGVha2VyIC0gVGhlIFRleHRUb1NwZWVjaCBpbnN0YW5jZSB0aGF0IHdpbGwgb3duIHRoZSBzcGVlY2guXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSBUZXh0IG9mIHRoZSBzcGVlY2guXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IHNwZWVjaG1hcmtzIC0gU3BlZWNobWFya3MgZm9yIHRoZSBzcGVlY2guXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IGF1ZGlvQ29uZmlnIC0gQXVkaW8gZm9yIHRoZSBzcGVlY2guXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7QWJzdHJhY3RTcGVlY2h9XHJcbiAgICovXHJcbiAgX2NyZWF0ZVNwZWVjaCh0ZXh0LCBzcGVlY2htYXJrcywgYXVkaW9Db25maWcpIHtcclxuICAgIHJldHVybiBuZXcgU3BlZWNoKHRoaXMsIHRleHQsIHNwZWVjaG1hcmtzLCBhdWRpb0NvbmZpZyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHdoZXRoZXIgb3Igbm90IHRoZSBhdWRpbyBjb250ZXh0IGlzIHJ1bm5pbmcgYW5kIHNwZWVjaCBjYW4gYmUgcGxheWVkLlxyXG4gICAqXHJcbiAgICogQHJlYWRvbmx5XHJcbiAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICovXHJcbiAgZ2V0IGVuYWJsZWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fZW5hYmxlZDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRyeSB0byByZXN1bWUgdGhlIGF1ZGlvIGNvbnRleHQuIFRoaXMgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGV4ZWN1dGVkIGVhY2ggdGltZVxyXG4gICAqIHNwZWVjaCBpcyBwbGF5ZWQgb3IgcmVzdW1lZC4gSWYgdXNpbmcgbWFudWFsbHksIGl0IHNob3VsZCBiZSBjYWxsZWQgYWZ0ZXIgYVxyXG4gICAqIHVzZXIgaW50ZXJhY3Rpb24gb2NjdXJzLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0RlZmVycmVkfSAtIFJlc29sdmVzIG9uY2UgdGhlIGF1ZGlvIGNvbnRleHQgaGFzIHJlc3VtZWQuXHJcbiAgICovXHJcbiAgcmVzdW1lQXVkaW8oKSB7XHJcbiAgICBjb25zdCBwcm9taXNlID0gbmV3IERlZmVycmVkKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgdGhpcy5fYXVkaW9Db250ZXh0XHJcbiAgICAgICAgLnJlc3VtZSgpXHJcbiAgICAgICAgLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5fZW5hYmxlZCA9IHRydWU7XHJcbiAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuY2F0Y2goZSA9PiB7XHJcbiAgICAgICAgICB0aGlzLl9lbmFibGVkID0gZmFsc2U7XHJcbiAgICAgICAgICByZWplY3QoZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBwcm9taXNlO1xyXG4gIH1cclxuXHJcbiAgX3N0YXJ0U3BlZWNoKHRleHQsIGNvbmZpZywgcGxheU1ldGhvZCA9ICdwbGF5Jykge1xyXG4gICAgY29uc3QgY3VycmVudFByb21pc2UgPSB7XHJcbiAgICAgIHBsYXk6IG5ldyBEZWZlcnJlZChcclxuICAgICAgICB1bmRlZmluZWQsXHJcbiAgICAgICAgKCkgPT4geyBjdXJyZW50UHJvbWlzZS5zcGVlY2guY2FuY2VsKCk7IH0sXHJcbiAgICAgICAgKCkgPT4geyBjdXJyZW50UHJvbWlzZS5zcGVlY2guY2FuY2VsKCk7IH0sXHJcbiAgICAgICAgKCkgPT4geyBjdXJyZW50UHJvbWlzZS5zcGVlY2guY2FuY2VsKCk7IH1cclxuICAgICAgKSxcclxuICAgICAgc3BlZWNoOiBuZXcgRGVmZXJyZWQoKSxcclxuICAgIH07XHJcbiAgICB0aGlzLl9jdXJyZW50UHJvbWlzZSA9IGN1cnJlbnRQcm9taXNlO1xyXG5cclxuICAgIC8vIFRyeSB0byBzdGFydCB0aGUgYXVkaW8gY29udGV4dFxyXG4gICAgdGhpcy5yZXN1bWVBdWRpbygpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAvLyBFeGl0IGlmIHRoZSBwcm9taXNlIGlzIG5vIGxvbmdlciBwZW5kaW5nIGJlY2F1c2Ugb2YgdXNlciBpbnRlcmFjdGlvblxyXG4gICAgICBpZiAoIWN1cnJlbnRQcm9taXNlLnBsYXkucGVuZGluZykge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICAvLyBDYW5jZWwgaWYgYW5vdGhlciBjYWxsIHRvIHBsYXkgaGFzIGFscmVhZHkgYmVlbiBtYWRlXHJcbiAgICAgIGVsc2UgaWYgKHRoaXMuX2N1cnJlbnRQcm9taXNlICE9PSBjdXJyZW50UHJvbWlzZSkge1xyXG4gICAgICAgIGN1cnJlbnRQcm9taXNlLnBsYXkuY2FuY2VsKCk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBUaGUgYXVkaW8gY29udGV4dCBpcyBydW5uaW5nIHNvIHRoZSBzcGVlY2ggY2FuIGJlIHBsYXllZFxyXG4gICAgICBpZiAodGhpcy5fZW5hYmxlZCkge1xyXG4gICAgICAgIHN1cGVyLl9zdGFydFNwZWVjaCh0ZXh0LCBjb25maWcsIHBsYXlNZXRob2QpO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIFJlamVjdCBpZiB0aGUgYXVkaW8gY29udGV4dCBpcyBub3QgcnVubmluZ1xyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBjdXJyZW50UHJvbWlzZS5yZWplY3QoXHJcbiAgICAgICAgICBuZXcgRXJyb3IoXHJcbiAgICAgICAgICAgIGBDYW5ub3QgJHtwbGF5TWV0aG9kfSBzcGVlY2ggb24gaG9zdCAke3RoaXMuX2hvc3QuaWR9LiBUaGUgYXVkaW8gY29udGV4dCBpcyBub3QgcnVubmluZy4gVXNlIHRoZSBcIlRleHRUb1NwZWVjaEZlYXR1cmUucmVzdW1lQXVkaW9cIiBtZXRob2QgdG8gdHJ5IHRvIHJlc3VtZSBpdCBhZnRlciBhIHVzZXIgZ2VzdHVyZS5gXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIGN1cnJlbnRQcm9taXNlLnBsYXk7XHJcbiAgfVxyXG5cclxuICBwbGF5KHRleHQsIGNvbmZpZykge1xyXG4gICAgcmV0dXJuIHRoaXMuX3N0YXJ0U3BlZWNoKHRleHQsIGNvbmZpZywgJ3BsYXknKTtcclxuICB9XHJcblxyXG4gIHJlc3VtZSh0ZXh0LCBjb25maWcpIHtcclxuICAgIHJldHVybiB0aGlzLl9zdGFydFNwZWVjaCh0ZXh0LCBjb25maWcsICdyZXN1bWUnKTtcclxuICB9XHJcblxyXG4gIGluc3RhbGxBcGkoKSB7XHJcbiAgICBjb25zdCBhcGkgPSBzdXBlci5pbnN0YWxsQXBpKCk7XHJcblxyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoYXBpLCB7XHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbWVtYmVyb2YgVGV4dFRvU3BlZWNoRmVhdHVyZVxyXG4gICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICogQHNlZSBjb3JlL1RleHRUb1NwZWVjaEZlYXR1cmUjZW5hYmxlZFxyXG4gICAgICAgKi9cclxuICAgICAgZW5hYmxlZDoge1xyXG4gICAgICAgIGdldDogKCkgPT4gdGhpcy5fZW5hYmxlZCxcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBhcGk7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBUZXh0VG9TcGVlY2hGZWF0dXJlO1xyXG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cclxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVC0wXHJcbmltcG9ydCBBYnN0cmFjdFRleHRUb1NwZWVjaEZlYXR1cmUgZnJvbSAnY29yZS9hd3NwYWNrL0Fic3RyYWN0VGV4dFRvU3BlZWNoRmVhdHVyZSc7XHJcbmltcG9ydCBDb3JlVGV4dFRvU3BlZWNoRmVhdHVyZSBmcm9tICdjb3JlL2F3c3BhY2svVGV4dFRvU3BlZWNoRmVhdHVyZSc7XHJcblxyXG4vKipcclxuICogQmFieWxvbmpzIFNjZW5lIG9iamVjdFxyXG4gKiBAZXh0ZXJuYWwgXCJCQUJZTE9OLlNjZW5lXCJcclxuICogQHNlZSBodHRwczovL2RvYy5iYWJ5bG9uanMuY29tL2FwaS9jbGFzc2VzL2JhYnlsb24uc2NlbmVcclxuICovXHJcblxyXG4vKipcclxuICogQmFieWxvbmpzIE1lc2ggb2JqZWN0XHJcbiAqIEBleHRlcm5hbCBcIkJBQllMT04uTWVzaFwiXHJcbiAqIEBzZWUgaHR0cHM6Ly9kb2MuYmFieWxvbmpzLmNvbS9hcGkvY2xhc3Nlcy9iYWJ5bG9uLm1lc2hcclxuICovXHJcblxyXG4vKipcclxuICogQGV4dGVuZHMgY29yZS9UZXh0VG9TcGVlY2hGZWF0dXJlXHJcbiAqIEBhbGlhcyBCYWJ5bG9uLmpzL1RleHRUb1NwZWVjaEZlYXR1cmVcclxuICovXHJcbmNsYXNzIFRleHRUb1NwZWVjaEZlYXR1cmUgZXh0ZW5kcyBDb3JlVGV4dFRvU3BlZWNoRmVhdHVyZSB7XHJcbiAgLyoqXHJcbiAgICogQGNvbnN0cnVjdG9yXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge0JhYnlsb24uanMvSG9zdE9iamVjdH0gaG9zdCAtIEhvc3Qgb2JqZWN0IG1hbmFnaW5nIHRoZSBmZWF0dXJlLlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0PX0gb3B0aW9ucyAtIE9wdGlvbnMgdGhhdCB3aWxsIGJlIHNlbnQgdG8gUG9sbHkgZm9yIGVhY2ggc3BlZWNoLlxyXG4gICAqIEBwYXJhbSB7ZXh0ZXJuYWw6XCJCQUJZTE9OLlNjZW5lXCJ9IG9wdGlvbnMuc2NlbmUgLSBCYWJ5bG9uIHNjZW5lIGNvbnRhaW5pbmcgdGhlIGhvc3Qgb3duZXIuXHJcbiAgICogQHBhcmFtIHtleHRlcm5hbDpcIkJBQllMT04uTWVzaFwiPX0gb3B0aW9ucy5hdHRhY2hUbyAtIE9wdGlvbmFsIG1lc2ggdG8gYXR0YWNoIHRoZSBzcGVlY2hcclxuICAgKiBhdWRpbyB0by5cclxuICAgKi9cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIGhvc3QsXHJcbiAgICBvcHRpb25zID0ge1xyXG4gICAgICB2b2ljZTogdW5kZWZpbmVkLFxyXG4gICAgICBlbmdpbmU6IHVuZGVmaW5lZCxcclxuICAgICAgbGFuZ3VhZ2U6IHVuZGVmaW5lZCxcclxuICAgICAgYXVkaW9Gb3JtYXQ6ICdtcDMnLFxyXG4gICAgICBzYW1wbGVSYXRlOiB1bmRlZmluZWQsXHJcbiAgICAgIHNjZW5lOiB1bmRlZmluZWQsXHJcbiAgICAgIGF0dGFjaFRvOiB1bmRlZmluZWQsXHJcbiAgICB9XHJcbiAgKSB7XHJcbiAgICBzdXBlcihob3N0LCBvcHRpb25zKTtcclxuICAgIHRoaXMuX3NjZW5lID0gb3B0aW9ucy5zY2VuZTtcclxuICAgIHRoaXMuX2F0dGFjaFRvID0gb3B0aW9ucy5hdHRhY2hUbyB8fCBob3N0Lm93bmVyO1xyXG4gIH1cclxuXHJcbiAgX3NldEF1ZGlvQ29udGV4dCgpIHtcclxuICAgIHRoaXMuX2F1ZGlvQ29udGV4dCA9IEJBQllMT04uRW5naW5lLmF1ZGlvRW5naW5lLmF1ZGlvQ29udGV4dDtcclxuICB9XHJcblxyXG4gIF9vYnNlcnZlQXVkaW9Db250ZXh0KCkge1xyXG4gICAgaWYgKHRoaXMuX2F1ZGlvQ29udGV4dCkge1xyXG4gICAgICBzdXBlci5fb2JzZXJ2ZUF1ZGlvQ29udGV4dCgpO1xyXG4gICAgICBjb25zdCB7b25zdGF0ZWNoYW5nZX0gPSB0aGlzLl9hdWRpb0NvbnRleHQ7XHJcbiAgICAgIHRoaXMuX2F1ZGlvQ29udGV4dC5vbnN0YXRlY2hhbmdlID0gKCkgPT4ge1xyXG4gICAgICAgIG9uc3RhdGVjaGFuZ2UoKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX2VuYWJsZWQpIHtcclxuICAgICAgICAgIEJBQllMT04uRW5naW5lLmF1ZGlvRW5naW5lLnVubG9jaygpO1xyXG4gICAgICAgIH1cclxuICAgICAgfTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIF9zeW50aGVzaXplQXVkaW8ocGFyYW1zKSB7XHJcbiAgICAvLyBCYWJ5bG9uIGF1ZGlvIHdpbGwgY3JlYXRlIHRoZSB3ZWIgQXVkaW8gb2JqZWN0LCBzbyB3ZSBkb24ndCBuZWVkIGNvcmVBd3MuVGV4dFRvU3BlZWNoRmVhdHVyZVxyXG4gICAgLy8gdG8gY3JlYXRlIGl0LiBVc2UgQWJzdHJhY3RUZXh0VG9TcGVlY2hGZWF0dXJlLnByb3RvdHlwZS5fc3ludGhlc2l6ZUF1ZGlvIGluc3RlYWQuXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZXJzY29yZS1kYW5nbGVcclxuICAgIHJldHVybiBBYnN0cmFjdFRleHRUb1NwZWVjaEZlYXR1cmUucHJvdG90eXBlLl9zeW50aGVzaXplQXVkaW9cclxuICAgICAgLmNhbGwodGhpcywgcGFyYW1zKVxyXG4gICAgICAudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcclxuICAgICAgICAgIGNvbnN0IHt1cmx9ID0gcmVzdWx0O1xyXG4gICAgICAgICAgY29uc3QgbmFtZSA9IHBhcmFtcy5UZXh0O1xyXG4gICAgICAgICAgcmVzdWx0LmF1ZGlvID0gbmV3IEJBQllMT04uU291bmQoXHJcbiAgICAgICAgICAgIG5hbWUsXHJcbiAgICAgICAgICAgIHVybCxcclxuICAgICAgICAgICAgdGhpcy5fc2NlbmUsXHJcbiAgICAgICAgICAgICgpID0+IHtcclxuICAgICAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtzdHJlYW1pbmc6IHRydWUsIHNraXBDb2RlY0NoZWNrOiB0cnVlfVxyXG4gICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICBpZiAodGhpcy5fYXR0YWNoVG8gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICByZXN1bHQuYXVkaW8uYXR0YWNoVG9NZXNoKHRoaXMuX2F0dGFjaFRvKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBUZXh0VG9TcGVlY2hGZWF0dXJlO1xyXG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cclxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVC0wXHJcbmltcG9ydCBUZXh0VG9TcGVlY2hVdGlscyBmcm9tICdjb3JlL2F3c3BhY2svVGV4dFRvU3BlZWNoVXRpbHMnO1xyXG5pbXBvcnQgVGV4dFRvU3BlZWNoRmVhdHVyZSBmcm9tICcuL1RleHRUb1NwZWVjaEZlYXR1cmUnO1xyXG5pbXBvcnQgU3BlZWNoIGZyb20gJy4vU3BlZWNoJztcclxuXHJcbi8qKlxyXG4gKiBAbW9kdWxlIGJhYnlsb24vYXdzcGFja1xyXG4gKi9cclxuXHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICAvKipcclxuICAgKiBAc2VlIEJhYnlsb24uanMvVGV4dFRvU3BlZWNoRmVhdHVyZVxyXG4gICAqL1xyXG4gIFRleHRUb1NwZWVjaEZlYXR1cmUsXHJcbiAgLyoqXHJcbiAgICogQHNlZSBjb3JlL1RleHRUb1NwZWVjaFV0aWxzXHJcbiAgICovXHJcbiAgVGV4dFRvU3BlZWNoVXRpbHMsXHJcbiAgLyoqXHJcbiAgICogQHNlZSBCYWJ5bG9uLmpzL1NwZWVjaFxyXG4gICAqL1xyXG4gIFNwZWVjaCxcclxufTtcclxuIiwiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXHJcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxyXG5pbXBvcnQgQ29yZVNpbmdsZVN0YXRlIGZyb20gJ2NvcmUvYW5pbXBhY2svc3RhdGUvU2luZ2xlU3RhdGUnO1xyXG5pbXBvcnQgTWF0aFV0aWxzIGZyb20gJ2NvcmUvTWF0aFV0aWxzJztcclxuXHJcbi8qKlxyXG4gKiBCYWJ5bG9uanMgQW5pbWF0aW9uR3JvdXAgb2JqZWN0XHJcbiAqIEBleHRlcm5hbCBcIkJBQllMT04uQW5pbWF0aW9uR3JvdXBcIlxyXG4gKiBAc2VlIGh0dHBzOi8vZG9jLmJhYnlsb25qcy5jb20vYXBpL2NsYXNzZXMvYmFieWxvbi5hbmltYXRpb25ncm91cFxyXG4gKi9cclxuXHJcbmNvbnN0IGJhYnlsb25CbGVuZE1vZGVzID0ge1xyXG4gIE92ZXJyaWRlOiBmYWxzZSxcclxuICBBZGRpdGl2ZTogdHJ1ZSxcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAZXh0ZW5kcyBjb3JlL1NpbmdsZVN0YXRlXHJcbiAqIEBhbGlhcyBCYWJ5bG9uLmpzL1NpbmdsZVN0YXRlXHJcbiAqL1xyXG5jbGFzcyBTaW5nbGVTdGF0ZSBleHRlbmRzIENvcmVTaW5nbGVTdGF0ZSB7XHJcbiAgLyoqXHJcbiAgICogQGNvbnN0cnVjdG9yXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge09iamVjdD19IG9wdGlvbnMgLSBPcHRpb25zIGZvciB0aGUgYW5pbWF0aW9uIHN0YXRlLlxyXG4gICAqIEBwYXJhbSB7ZXh0ZXJuYWw6XCJCQUJZTE9OLkFuaW1hdGlvbkdyb3VwXCJ9IGJhYnlsb25Hcm91cCAtIFRoZSBhbmltYXRpb24gZ3JvdXAgdGhhdCBjb250cm9sc1xyXG4gICAqIHBsYXliYWNrIG9mIHRoZSBhbmltYXRpb24uXHJcbiAgICogQHBhcmFtIHtleHRlcm5hbDpcIkJBQllMT04uU2NlbmVcIn0gYmFieWxvblNjZW5lIC0gVGhlIHNjZW5lIGNvbnRhaW5pbmcgdGhlIGJhYnlsb25Hcm91cC5cclxuICAgKiovXHJcbiAgY29uc3RydWN0b3Iob3B0aW9ucyA9IHt9LCBiYWJ5bG9uR3JvdXAsIGJhYnlsb25TY2VuZSkge1xyXG4gICAgc3VwZXIob3B0aW9ucyk7XHJcbiAgICB0aGlzLl9vbkZpbmlzaGVkRXZlbnQgPSB0aGlzLl9vbkZpbmlzaGVkRXZlbnQuYmluZCh0aGlzKTtcclxuICAgIHRoaXMuX29uTG9vcEV2ZW50ID0gdGhpcy5fb25Mb29wRXZlbnQuYmluZCh0aGlzKTtcclxuXHJcbiAgICB0aGlzLl9mcm9tID0gTnVtYmVyLmlzTmFOKE51bWJlcihvcHRpb25zLmZyb20pKVxyXG4gICAgICA/IGJhYnlsb25Hcm91cC5mcm9tXHJcbiAgICAgIDogTnVtYmVyKG9wdGlvbnMuZnJvbSk7XHJcbiAgICB0aGlzLl90byA9IE51bWJlci5pc05hTihOdW1iZXIob3B0aW9ucy50bykpXHJcbiAgICAgID8gYmFieWxvbkdyb3VwLnRvXHJcbiAgICAgIDogTnVtYmVyKG9wdGlvbnMudG8pO1xyXG4gICAgYmFieWxvbkdyb3VwLm5vcm1hbGl6ZSh0aGlzLl9mcm9tLCB0aGlzLl90byk7XHJcbiAgICB0aGlzLl9iYWJ5bG9uU2NlbmUgPSBiYWJ5bG9uU2NlbmU7XHJcbiAgICB0aGlzLl9iYWJ5bG9uQW5pbWF0aW9ucyA9IFsuLi5iYWJ5bG9uR3JvdXAudGFyZ2V0ZWRBbmltYXRpb25zXTtcclxuICAgIHRoaXMuX2JhYnlsb25BbmltYXRhYmxlcyA9IFtdO1xyXG4gICAgdGhpcy5fYmFieWxvbk51bUFuaW1hdGlvbnMgPSB0aGlzLl9iYWJ5bG9uQW5pbWF0aW9ucy5sZW5ndGg7XHJcbiAgICB0aGlzLl9iYWJ5bG9uTG9vcENvdW50ID0gdGhpcy5fbG9vcENvdW50ICogdGhpcy5fYmFieWxvbk51bUFuaW1hdGlvbnM7XHJcbiAgICB0aGlzLl9sb29wZWQgPSAwO1xyXG4gICAgdGhpcy5fZmluaXNoZWQgPSAwO1xyXG4gICAgdGhpcy5fc3RhcnRlZCA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgZ2V0IG5vcm1hbGl6ZWRUaW1lKCkge1xyXG4gICAgY29uc3QgYW5pbWF0YWJsZSA9IHRoaXMuX2JhYnlsb25BbmltYXRhYmxlc1swXTtcclxuICAgIGlmIChhbmltYXRhYmxlICYmIGFuaW1hdGFibGUubWFzdGVyRnJhbWUpIHtcclxuICAgICAgcmV0dXJuIChhbmltYXRhYmxlLm1hc3RlckZyYW1lIC0gdGhpcy5fZnJvbSkvKHRoaXMuX3RvIC0gdGhpcy5fZnJvbSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gMDtcclxuICB9XHJcblxyXG4gIHNldCBub3JtYWxpemVkVGltZSh0aW1lKSB7XHJcbiAgICB0aW1lID0gTWF0aFV0aWxzLmNsYW1wKHRpbWUpO1xyXG4gICAgdGhpcy5fYmFieWxvbkFuaW1hdGFibGVzLmZvckVhY2goKGFuaW1hdGFibGUpID0+IHtcclxuICAgICAgY29uc3QgdGFyZ2V0RnJhbWUgPSAodGhpcy5fdG8gLSB0aGlzLl9mcm9tKSAqIHRpbWUgKyB0aGlzLl9mcm9tO1xyXG4gICAgICBhbmltYXRhYmxlLmdvVG9GcmFtZSh0YXJnZXRGcmFtZSlcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHRpbWVTY2FsZSgpIHtcclxuICAgIHJldHVybiBzdXBlci50aW1lU2NhbGU7XHJcbiAgfVxyXG5cclxuICBzZXQgdGltZVNjYWxlKHRpbWVTY2FsZSkge1xyXG4gICAgc3VwZXIudGltZVNjYWxlID0gdGltZVNjYWxlO1xyXG5cclxuICAgIHRoaXMuX2JhYnlsb25BbmltYXRhYmxlcy5mb3JFYWNoKGFuaW1hdGFibGUgPT4ge1xyXG4gICAgICBhbmltYXRhYmxlLnNwZWVkUmF0aW8gPSB0aW1lU2NhbGU7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldCBsb29wQ291bnQoKSB7XHJcbiAgICByZXR1cm4gc3VwZXIubG9vcENvdW50O1xyXG4gIH1cclxuXHJcbiAgc2V0IGxvb3BDb3VudChsb29wQ291bnQpIHtcclxuICAgIHN1cGVyLmxvb3BDb3VudCA9IGxvb3BDb3VudDtcclxuXHJcbiAgICB0aGlzLl9iYWJ5bG9uQW5pbWF0YWJsZXMuZm9yRWFjaChhbmltYXRhYmxlID0+IHtcclxuICAgICAgYW5pbWF0YWJsZS5sb29wQW5pbWF0aW9uID0gbG9vcENvdW50ID4gMTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU3RvcCBhbmQgZGlzY2FyZCBvZiBjdXJyZW50bHkgc3RvcmVkIGFuaW1hdGFibGVzIGFuZCBnZW5lcmF0ZSBuZXcgb25lcyB0aGF0XHJcbiAgICogYXJlIHBhdXNlZC5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICovXHJcbiAgX2NyZWF0ZUFuaW1hdGFibGVzKCkge1xyXG4gICAgLy8gQ3JlYXRlIG5ldyBhbmltYXRhYmxlc1xyXG4gICAgY29uc3Qgb2xkQW5pbWF0YWJsZXMgPSBbLi4udGhpcy5fYmFieWxvbkFuaW1hdGFibGVzXTtcclxuICAgIHRoaXMuX2JhYnlsb25BbmltYXRhYmxlcy5sZW5ndGggPSAwO1xyXG4gICAgdGhpcy5fYmFieWxvbkFuaW1hdGlvbnMuZm9yRWFjaCh0YXJnZXRlZEFuaW1hdGlvbiA9PiB7XHJcbiAgICAgIGNvbnN0IGFuaW1hdGFibGUgPSB0aGlzLl9iYWJ5bG9uU2NlbmUuYmVnaW5EaXJlY3RBbmltYXRpb24oXHJcbiAgICAgICAgdGFyZ2V0ZWRBbmltYXRpb24udGFyZ2V0LFxyXG4gICAgICAgIFt0YXJnZXRlZEFuaW1hdGlvbi5hbmltYXRpb25dLFxyXG4gICAgICAgIHRoaXMuX2Zyb20sXHJcbiAgICAgICAgdGhpcy5fdG8sXHJcbiAgICAgICAgdGhpcy5fbG9vcENvdW50ID4gMSxcclxuICAgICAgICAwLFxyXG4gICAgICAgIHRoaXMuX29uRmluaXNoZWRFdmVudCxcclxuICAgICAgICB0aGlzLl9vbkxvb3BFdmVudCxcclxuICAgICAgICBiYWJ5bG9uQmxlbmRNb2Rlc1t0aGlzLl9ibGVuZE1vZGVdXHJcbiAgICAgICk7XHJcbiAgICAgIGFuaW1hdGFibGUud2VpZ2h0ID0gdGhpcy5faW50ZXJuYWxXZWlnaHQ7XHJcbiAgICAgIGFuaW1hdGFibGUuZGlzcG9zZU9uRW5kID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuX2JhYnlsb25BbmltYXRhYmxlcy5wdXNoKGFuaW1hdGFibGUpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gRGlzcG9zZSBvZiB0aGUgb2xkIGFuaW1hdGFibGVzXHJcbiAgICBvbGRBbmltYXRhYmxlcy5mb3JFYWNoKGFuaW1hdGFibGUgPT4ge1xyXG4gICAgICBhbmltYXRhYmxlLnN0b3AoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVzZXQgdmFyaWFibGVzIGFuZCBhbmltYXRpb25zLiBTaG91bGQgYmUgY2FsbGVkIGJlZm9yZSBwbGF5aW5nIGZyb20gdGhlXHJcbiAgICogYmVnaW5uaW5nIGFuZCBpZiBjYWxsaW5nIHN0b3AuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIF9yZXNldCgpIHtcclxuICAgIHRoaXMuX2xvb3BlZCA9IDA7XHJcbiAgICB0aGlzLl9maW5pc2hlZCA9IDA7XHJcbiAgICB0aGlzLl9zdGFydGVkID0gdHJ1ZTtcclxuICAgIHRoaXMuX2NyZWF0ZUFuaW1hdGFibGVzKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQYXVzZSB0aGUgYW5pbWF0aW9uIGFuZCByZXNldCBjb3VudGVycyBvbmNlIHRoZSBhbmltYXRpb24gZmluaXNoZXMuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIF9vbkZpbmlzaGVkRXZlbnQoKSB7XHJcbiAgICB0aGlzLl9maW5pc2hlZCArPSAxO1xyXG5cclxuICAgIGlmICh0aGlzLl9maW5pc2hlZCA9PT0gdGhpcy5fYmFieWxvbk51bUFuaW1hdGlvbnMpIHtcclxuICAgICAgdGhpcy5fbG9vcGVkID0gMDtcclxuICAgICAgdGhpcy5fZmluaXNoZWQgPSAwO1xyXG5cclxuICAgICAgLy8gUGF1c2UgdGhlIGFuaW1hdGlvbnNcclxuICAgICAgdGhpcy5fYmFieWxvbkFuaW1hdGFibGVzLmZvckVhY2goYW5pbWF0YWJsZSA9PiB7XHJcbiAgICAgICAgYW5pbWF0YWJsZS5zcGVlZFJhdGlvID0gMDtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICB0aGlzLl9wcm9taXNlcy5wbGF5LnJlc29sdmUoKTtcclxuXHJcbiAgICAgIC8vIFN0b3AgZXZhbHVhdGluZyBpbnRlcnBvbGF0b3JzIGlmIHRoZXkgaGF2ZSBhbHJlYWR5IGNvbXBsZXRlZFxyXG4gICAgICBpZiAoIXRoaXMud2VpZ2h0UGVuZGluZyAmJiAhdGhpcy50aW1lU2NhbGVQZW5kaW5nKSB7XHJcbiAgICAgICAgdGhpcy5fcGF1c2VkID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSW5jcmVtZW50IGxvb3AgY291bnRlciBmb3IgZWFjaCBhbmltYXRpb24gbG9vcC4gSWYgbG9vcCBjb3VudGVyIG1lZXRzXHJcbiAgICogbG9vcENvdW50LCBub3RpZml5IHRoYXQgdGhlIGFuaW1hdGlvbiBoYXMgZmluaXNoZWQuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIF9vbkxvb3BFdmVudCgpIHtcclxuICAgIHRoaXMuX2xvb3BlZCArPSAxO1xyXG5cclxuICAgIC8vIFNpZ25hbCB0aGUgc3RhdGUgaGFzIGZpbmlzaGVkXHJcbiAgICBpZiAodGhpcy5fbG9vcGVkID09PSB0aGlzLl9iYWJ5bG9uTG9vcENvdW50KSB7XHJcbiAgICAgIHRoaXMuX2ZpbmlzaGVkID0gdGhpcy5fYmFieWxvbk51bUFuaW1hdGlvbnMgLSAxO1xyXG4gICAgICB0aGlzLl9vbkZpbmlzaGVkRXZlbnQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHVwZGF0ZUludGVybmFsV2VpZ2h0KGZhY3Rvcikge1xyXG4gICAgc3VwZXIudXBkYXRlSW50ZXJuYWxXZWlnaHQoZmFjdG9yKTtcclxuXHJcbiAgICB0aGlzLl9iYWJ5bG9uQW5pbWF0YWJsZXMuZm9yRWFjaChhbmltYXRhYmxlID0+IHtcclxuICAgICAgYW5pbWF0YWJsZS53ZWlnaHQgPSB0aGlzLl9pbnRlcm5hbFdlaWdodDtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcGxheShvbkZpbmlzaCwgb25FcnJvciwgb25DYW5jZWwpIHtcclxuICAgIHRoaXMuX3Jlc2V0KCk7XHJcbiAgICB0aGlzLnRpbWVTY2FsZSA9IHRoaXMuX3RpbWVTY2FsZTtcclxuXHJcbiAgICByZXR1cm4gc3VwZXIucGxheShvbkZpbmlzaCwgb25FcnJvciwgb25DYW5jZWwpO1xyXG4gIH1cclxuXHJcbiAgcGF1c2UoKSB7XHJcbiAgICB0aGlzLl9iYWJ5bG9uQW5pbWF0YWJsZXMuZm9yRWFjaChhbmltYXRhYmxlID0+IHtcclxuICAgICAgYW5pbWF0YWJsZS5zcGVlZFJhdGlvID0gMDtcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBzdXBlci5wYXVzZSgpO1xyXG4gIH1cclxuXHJcbiAgcmVzdW1lKG9uRmluaXNoLCBvbkVycm9yLCBvbkNhbmNlbCkge1xyXG4gICAgaWYgKCF0aGlzLl9zdGFydGVkKSB7XHJcbiAgICAgIHRoaXMuX3Jlc2V0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy50aW1lU2NhbGUgPSB0aGlzLl90aW1lU2NhbGU7XHJcblxyXG4gICAgcmV0dXJuIHN1cGVyLnJlc3VtZShvbkZpbmlzaCwgb25FcnJvciwgb25DYW5jZWwpO1xyXG4gIH1cclxuXHJcbiAgY2FuY2VsKCkge1xyXG4gICAgdGhpcy5fYmFieWxvbkFuaW1hdGFibGVzLmZvckVhY2goYW5pbWF0YWJsZSA9PiB7XHJcbiAgICAgIGFuaW1hdGFibGUuc3BlZWRSYXRpbyA9IDA7XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gc3VwZXIuY2FuY2VsKCk7XHJcbiAgfVxyXG5cclxuICBzdG9wKCkge1xyXG4gICAgdGhpcy5fcmVzZXQoKTtcclxuXHJcbiAgICByZXR1cm4gc3VwZXIuc3RvcCgpO1xyXG4gIH1cclxuXHJcbiAgZGlzY2FyZCgpIHtcclxuICAgIHN1cGVyLmRpc2NhcmQoKTtcclxuXHJcbiAgICAvLyBEaXNwb3NlIG9mIHRoZSBiYWJ5bG9uIHJlc291cmNlc1xyXG4gICAgdGhpcy5fYmFieWxvbkFuaW1hdGFibGVzLmZvckVhY2goYW5pbWF0YWJsZSA9PiB7XHJcbiAgICAgIGFuaW1hdGFibGUuc3RvcCgpO1xyXG4gICAgfSk7XHJcbiAgICBkZWxldGUgdGhpcy5fYmFieWxvbkFuaW1hdGlvbnM7XHJcbiAgICBkZWxldGUgdGhpcy5fYmFieWxvbkFuaW1hdGFibGVzO1xyXG4gICAgZGVsZXRlIHRoaXMuX2JhYnlsb25TY2VuZTtcclxuICB9XHJcblxyXG4gIGRlYWN0aXZhdGUoKSB7XHJcbiAgICBzdXBlci5kZWFjdGl2YXRlKCk7XHJcblxyXG4gICAgdGhpcy5fY3JlYXRlQW5pbWF0YWJsZXMoKTtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IFNpbmdsZVN0YXRlO1xyXG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxuaW1wb3J0IENvcmVBbmltYXRpb25GZWF0dXJlLCB7XG4gIEFuaW1hdGlvblR5cGVzLFxufSBmcm9tICdjb3JlL2FuaW1wYWNrL0FuaW1hdGlvbkZlYXR1cmUnO1xuaW1wb3J0IFNpbmdsZVN0YXRlIGZyb20gJy4vc3RhdGUvU2luZ2xlU3RhdGUnO1xuXG5BbmltYXRpb25UeXBlcy5zaW5nbGUgPSBTaW5nbGVTdGF0ZTtcbmV4cG9ydCB7QW5pbWF0aW9uVHlwZXN9O1xuXG4vKipcbiAqIEBleHRlbmRzIGNvcmUvQW5pbWF0aW9uRmVhdHVyZVxuICogQGFsaWFzIEJhYnlsb24uanMvQW5pbWF0aW9uRmVhdHVyZVxuICovXG5jbGFzcyBBbmltYXRpb25GZWF0dXJlIGV4dGVuZHMgQ29yZUFuaW1hdGlvbkZlYXR1cmUge1xuICAvKipcbiAgICogQGNvbnN0cnVjdG9yXG4gICAqXG4gICAqIEBwYXJhbSB7QmFieWxvbi5qcy9Ib3N0T2JqZWN0fSBob3N0IC0gSG9zdCBvYmplY3QgdGhhdCBvd25zIHRoZSBmZWF0dXJlLlxuICAgKi9cbiAgY29uc3RydWN0b3IoaG9zdCkge1xuICAgIHN1cGVyKGhvc3QpO1xuXG4gICAgdGhpcy5fYmFieWxvblNjZW5lID0gaG9zdC5vd25lci5nZXRTY2VuZSgpO1xuICB9XG5cbiAgX2NyZWF0ZVNpbmdsZVN0YXRlKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gbmV3IFNpbmdsZVN0YXRlKG9wdGlvbnMsIG9wdGlvbnMuY2xpcCwgdGhpcy5fYmFieWxvblNjZW5lKTtcbiAgfVxuXG4gIGRpc2NhcmQoKSB7XG4gICAgZGVsZXRlIHRoaXMuX2JhYnlsb25TY2VuZTtcblxuICAgIHN1cGVyLmRpc2NhcmQoKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBBbmltYXRpb25GZWF0dXJlO1xuIiwiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXHJcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxyXG5cclxuLyoqXHJcbiAqIEBtb2R1bGUgYmFieWxvbi9hbmltcGFja1xyXG4gKi9cclxuXHJcbmltcG9ydCB7XHJcbiAgTGluZWFyLFxyXG4gIFF1YWRyYXRpYyxcclxuICBDdWJpYyxcclxuICBRdWFydGljLFxyXG4gIFF1aW50aWMsXHJcbiAgU2ludXNvaWRhbCxcclxuICBFeHBvbmVudGlhbCxcclxuICBDaXJjdWxhcixcclxuICBFbGFzdGljLFxyXG4gIEJhY2ssXHJcbiAgQm91bmNlLFxyXG59IGZyb20gJ2NvcmUvYW5pbXBhY2svRWFzaW5nJztcclxuaW1wb3J0IEFuaW1hdGlvblV0aWxzIGZyb20gJ2NvcmUvYW5pbXBhY2svQW5pbWF0aW9uVXRpbHMnO1xyXG5pbXBvcnQgVHJhbnNpdGlvblN0YXRlIGZyb20gJ2NvcmUvYW5pbXBhY2svc3RhdGUvVHJhbnNpdGlvblN0YXRlJztcclxuaW1wb3J0IEZyZWVCbGVuZFN0YXRlIGZyb20gJ2NvcmUvYW5pbXBhY2svc3RhdGUvRnJlZUJsZW5kU3RhdGUnO1xyXG5pbXBvcnQgUXVldWVTdGF0ZSBmcm9tICdjb3JlL2FuaW1wYWNrL3N0YXRlL1F1ZXVlU3RhdGUnO1xyXG5pbXBvcnQgUmFuZG9tQW5pbWF0aW9uU3RhdGUgZnJvbSAnY29yZS9hbmltcGFjay9zdGF0ZS9SYW5kb21BbmltYXRpb25TdGF0ZSc7XHJcbmltcG9ydCBCbGVuZDFkU3RhdGUgZnJvbSAnY29yZS9hbmltcGFjay9zdGF0ZS9CbGVuZDFkU3RhdGUnO1xyXG5pbXBvcnQgQmxlbmQyZFN0YXRlIGZyb20gJ2NvcmUvYW5pbXBhY2svc3RhdGUvQmxlbmQyZFN0YXRlJztcclxuaW1wb3J0IEFuaW1hdGlvbkxheWVyLCB7XHJcbiAgTGF5ZXJCbGVuZE1vZGVzLFxyXG4gIERlZmF1bHRMYXllckJsZW5kTW9kZSxcclxufSBmcm9tICdjb3JlL2FuaW1wYWNrL0FuaW1hdGlvbkxheWVyJztcclxuaW1wb3J0IEFuaW1hdGlvbkZlYXR1cmUsIHtBbmltYXRpb25UeXBlc30gZnJvbSAnLi9BbmltYXRpb25GZWF0dXJlJztcclxuaW1wb3J0IFNpbmdsZVN0YXRlIGZyb20gJy4vc3RhdGUvU2luZ2xlU3RhdGUnO1xyXG5cclxuLyoqXHJcbiAqIEBuYW1lc3BhY2VcclxuICovXHJcbmNvbnN0IEVhc2luZyA9IHtcclxuICAvKipcclxuICAgKiBAc2VlIExpbmVhclxyXG4gICAqL1xyXG4gIExpbmVhcixcclxuICAvKipcclxuICAgKiBAc2VlIFF1YWRyYXRpY1xyXG4gICAqL1xyXG4gIFF1YWRyYXRpYyxcclxuICAvKipcclxuICAgKiBAc2VlIEN1YmljXHJcbiAgICovXHJcbiAgQ3ViaWMsXHJcbiAgLyoqXHJcbiAgICogQHNlZSBRdWFydGljXHJcbiAgICovXHJcbiAgUXVhcnRpYyxcclxuICAvKipcclxuICAgKiBAc2VlIFF1aW50aWNcclxuICAgKi9cclxuICBRdWludGljLFxyXG4gIC8qKlxyXG4gICAqIEBzZWUgU2ludXNvaWRhbFxyXG4gICAqL1xyXG4gIFNpbnVzb2lkYWwsXHJcbiAgLyoqXHJcbiAgICogQHNlZSBFeHBvbmVudGlhbFxyXG4gICAqL1xyXG4gIEV4cG9uZW50aWFsLFxyXG4gIC8qKlxyXG4gICAqIEBzZWUgQ2lyY3VsYXJcclxuICAgKi9cclxuICBDaXJjdWxhcixcclxuICAvKipcclxuICAgKiBAc2VlIEVsYXN0aWNcclxuICAgKi9cclxuICBFbGFzdGljLFxyXG4gIC8qKlxyXG4gICAqIEBzZWUgQmFja1xyXG4gICAqL1xyXG4gIEJhY2ssXHJcbiAgLyoqXHJcbiAgICogQHNlZSBCb3VuY2VcclxuICAgKi9cclxuICBCb3VuY2UsXHJcbn07XHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICAvKipcclxuICAgKiBAc2VlIEJhYnlsb24uanMvQW5pbWF0aW9uRmVhdHVyZVxyXG4gICAqL1xyXG4gIEFuaW1hdGlvbkZlYXR1cmUsXHJcbiAgLyoqXHJcbiAgICogQHNlZSBBbmltYXRpb25MYXllclxyXG4gICAqL1xyXG4gIEFuaW1hdGlvbkxheWVyLFxyXG4gIC8qKlxyXG4gICAqIEBzZWUgQmFieWxvbi5qcy9TaW5nbGVTdGF0ZVxyXG4gICAqL1xyXG4gIFNpbmdsZVN0YXRlLFxyXG4gIC8qKlxyXG4gICAqIEBzZWUgVHJhbnNpdGlvblN0YXRlXHJcbiAgICovXHJcbiAgVHJhbnNpdGlvblN0YXRlLFxyXG4gIC8qKlxyXG4gICAqIEBzZWUgRnJlZUJsZW5kU3RhdGVcclxuICAgKi9cclxuICBGcmVlQmxlbmRTdGF0ZSxcclxuICAvKipcclxuICAgKiBAc2VlIFF1ZXVlU3RhdGVcclxuICAgKi9cclxuICBRdWV1ZVN0YXRlLFxyXG4gIC8qKlxyXG4gICAqIEBzZWUgUmFuZG9tQW5pbWF0aW9uU3RhdGVcclxuICAgKi9cclxuICBSYW5kb21BbmltYXRpb25TdGF0ZSxcclxuICAvKipcclxuICAgKiBAc2VlIEJsZW5kMWRTdGF0ZVxyXG4gICAqL1xyXG4gIEJsZW5kMWRTdGF0ZSxcclxuICAvKipcclxuICAgKiBAc2VlIEJsZW5kMmRTdGF0ZVxyXG4gICAqL1xyXG4gIEJsZW5kMmRTdGF0ZSxcclxuICAvKipcclxuICAgKiBAc2VlIEFuaW1hdGlvblV0aWxzXHJcbiAgICovXHJcbiAgQW5pbWF0aW9uVXRpbHMsXHJcbiAgLyoqXHJcbiAgICogQHNlZSBFYXNpbmdcclxuICAgKi9cclxuICBFYXNpbmcsXHJcbiAgLyoqXHJcbiAgICogQHNlZSBMYXllckJsZW5kTW9kZXNcclxuICAgKi9cclxuICBMYXllckJsZW5kTW9kZXMsXHJcbiAgLyoqXHJcbiAgICogQHNlZSBEZWZhdWx0TGF5ZXJCbGVuZE1vZGVcclxuICAgKi9cclxuICBEZWZhdWx0TGF5ZXJCbGVuZE1vZGUsXHJcbiAgLyoqXHJcbiAgICogQHNlZSBBbmltYXRpb25UeXBlc1xyXG4gICAqL1xyXG4gIEFuaW1hdGlvblR5cGVzLFxyXG59O1xyXG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cclxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVC0wXHJcblxyXG4vKipcclxuICogQG1vZHVsZSBiYWJ5bG9uL0hPU1RcclxuICovXHJcblxyXG5pbXBvcnQgVXRpbHMgZnJvbSAnY29yZS9VdGlscyc7XHJcbmltcG9ydCBNYXRoVXRpbHMgZnJvbSAnY29yZS9NYXRoVXRpbHMnO1xyXG5pbXBvcnQgRGVmZXJyZWQgZnJvbSAnY29yZS9EZWZlcnJlZCc7XHJcbmltcG9ydCBMaXBzeW5jRmVhdHVyZSwge0RlZmF1bHRWaXNlbWVNYXB9IGZyb20gJ2NvcmUvTGlwc3luY0ZlYXR1cmUnO1xyXG5pbXBvcnQgR2VzdHVyZUZlYXR1cmUsIHtEZWZhdWx0R2VzdHVyZVdvcmRzfSBmcm9tICdjb3JlL0dlc3R1cmVGZWF0dXJlJztcclxuaW1wb3J0IFBvaW50T2ZJbnRlcmVzdEZlYXR1cmUsIHtBeGlzTWFwfSBmcm9tICcuL1BvaW50T2ZJbnRlcmVzdEZlYXR1cmUnO1xyXG5pbXBvcnQge2Vudn0gZnJvbSAnLi9Ib3N0RW52aXJvbm1lbnQnO1xyXG5pbXBvcnQgTWVzc2VuZ2VyIGZyb20gJy4vTWVzc2VuZ2VyJztcclxuaW1wb3J0IEhvc3RPYmplY3QgZnJvbSAnLi9Ib3N0T2JqZWN0JztcclxuXHJcbmltcG9ydCBhd3MgZnJvbSAnLi9hd3NwYWNrJztcclxuaW1wb3J0IGFuaW0gZnJvbSAnLi9hbmltcGFjayc7XHJcblxyXG5leHBvcnQgZGVmYXVsdCB7XHJcbiAgLyoqXHJcbiAgICogQHNlZSBlbnZcclxuICAgKi9cclxuICBlbnYsXHJcbiAgLyoqXHJcbiAgICogQHNlZSBVdGlsc1xyXG4gICAqL1xyXG4gIFV0aWxzLFxyXG4gIC8qKlxyXG4gICAqIEBzZWUgTWF0aFV0aWxzXHJcbiAgICovXHJcbiAgTWF0aFV0aWxzLFxyXG4gIC8qKlxyXG4gICAqIEBzZWUgRGVmZXJyZWRcclxuICAgKi9cclxuICBEZWZlcnJlZCxcclxuICAvKipcclxuICAgKiBAc2VlIEJhYnlsb24uanMvTWVzc2VuZ2VyXHJcbiAgICovXHJcbiAgTWVzc2VuZ2VyLFxyXG4gIC8qKlxyXG4gICAqIEBzZWUgQmFieWxvbi5qcy9Ib3N0T2JqZWN0XHJcbiAgICovXHJcbiAgSG9zdE9iamVjdCxcclxuICAvKipcclxuICAgKiBAc2VlIGNvcmUvTGlwc3luY0ZlYXR1cmVcclxuICAgKi9cclxuICBMaXBzeW5jRmVhdHVyZSxcclxuICAvKipcclxuICAgKiBAc2VlIEdlc3R1cmVGZWF0dXJlXHJcbiAgICovXHJcbiAgR2VzdHVyZUZlYXR1cmUsXHJcbiAgLyoqXHJcbiAgICogQHNlZSBCYWJ5bG9uLmpzL1BvaW50T2ZJbnRlcmVzdEZlYXR1cmVcclxuICAgKi9cclxuICBQb2ludE9mSW50ZXJlc3RGZWF0dXJlLFxyXG4gIC8qKlxyXG4gICAqIEBzZWUgRGVmYXVsdFZpc2VtZU1hcFxyXG4gICAqL1xyXG4gIERlZmF1bHRWaXNlbWVNYXAsXHJcbiAgLyoqXHJcbiAgICogQHNlZSBEZWZhdWx0R2VzdHVyZVdvcmRzXHJcbiAgICovXHJcbiAgRGVmYXVsdEdlc3R1cmVXb3JkcyxcclxuICAvKipcclxuICAgKiBAc2VlIEF4aXNNYXBcclxuICAgKi9cclxuICBBeGlzTWFwLFxyXG4gIC8qKlxyXG4gICAqIEBzZWUgbW9kdWxlOmJhYnlsb24vYXdzcGFja1xyXG4gICAqL1xyXG4gIGF3cyxcclxuICAvKipcclxuICAgKiBAc2VlIG1vZHVsZTpiYWJ5bG9uL2FuaW1wYWNrXHJcbiAgICovXHJcbiAgYW5pbSxcclxufTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///333\n')}]).default})); \ No newline at end of file +!function(e,n){"object"==typeof exports&&"object"==typeof module?module.exports=n():"function"==typeof define&&define.amd?define("HOST",[],n):"object"==typeof exports?exports.HOST=n():e.HOST=n()}("undefined"!=typeof self?self:"undefined"!=typeof global?global:this,(function(){return function(e){var n={};function t(c){if(n[c])return n[c].exports;var a=n[c]={i:c,l:!1,exports:{}};return e[c].call(a.exports,a,a.exports,t),a.l=!0,a.exports}return t.m=e,t.c=n,t.d=function(e,n,c){t.o(e,n)||Object.defineProperty(e,n,{enumerable:!0,get:c})},t.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},t.t=function(e,n){if(1&n&&(e=t(e)),8&n)return e;if(4&n&&"object"==typeof e&&e&&e.__esModule)return e;var c=Object.create(null);if(t.r(c),Object.defineProperty(c,"default",{enumerable:!0,value:e}),2&n&&"string"!=typeof e)for(var a in e)t.d(c,a,function(n){return e[n]}.bind(null,a));return c},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},t.p="",t(t.s=130)}([function(module,exports,__webpack_require__){eval("var global = __webpack_require__(2);\nvar core = __webpack_require__(18);\nvar hide = __webpack_require__(11);\nvar redefine = __webpack_require__(12);\nvar ctx = __webpack_require__(19);\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n var IS_FORCED = type & $export.F;\n var IS_GLOBAL = type & $export.G;\n var IS_STATIC = type & $export.S;\n var IS_PROTO = type & $export.P;\n var IS_BIND = type & $export.B;\n var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE];\n var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});\n var key, own, out, exp;\n if (IS_GLOBAL) source = name;\n for (key in source) {\n // contains in native\n own = !IS_FORCED && target && target[key] !== undefined;\n // export native or passed\n out = (own ? target : source)[key];\n // bind timers to global for call from export context\n exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n // extend global\n if (target) redefine(target, key, out, type & $export.U);\n // export\n if (exports[key] != out) hide(exports, key, exp);\n if (IS_PROTO && expProto[key] != out) expProto[key] = out;\n }\n};\nglobal.core = core;\n// type bitmap\n$export.F = 1; // forced\n$export.G = 2; // global\n$export.S = 4; // static\n$export.P = 8; // proto\n$export.B = 16; // bind\n$export.W = 32; // wrap\n$export.U = 64; // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZXhwb3J0LmpzPzVjYTEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsYUFBYSxtQkFBTyxDQUFDLENBQVc7QUFDaEMsV0FBVyxtQkFBTyxDQUFDLEVBQVM7QUFDNUIsV0FBVyxtQkFBTyxDQUFDLEVBQVM7QUFDNUIsZUFBZSxtQkFBTyxDQUFDLEVBQWE7QUFDcEMsVUFBVSxtQkFBTyxDQUFDLEVBQVE7QUFDMUI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0ZBQWtGLHVCQUF1QjtBQUN6RyxpRUFBaUU7QUFDakUsK0RBQStEO0FBQy9EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZCxjQUFjO0FBQ2QsY0FBYztBQUNkLGNBQWM7QUFDZCxlQUFlO0FBQ2YsZUFBZTtBQUNmLGVBQWU7QUFDZixnQkFBZ0I7QUFDaEIiLCJmaWxlIjoiMC5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xuXG52YXIgJGV4cG9ydCA9IGZ1bmN0aW9uICh0eXBlLCBuYW1lLCBzb3VyY2UpIHtcbiAgdmFyIElTX0ZPUkNFRCA9IHR5cGUgJiAkZXhwb3J0LkY7XG4gIHZhciBJU19HTE9CQUwgPSB0eXBlICYgJGV4cG9ydC5HO1xuICB2YXIgSVNfU1RBVElDID0gdHlwZSAmICRleHBvcnQuUztcbiAgdmFyIElTX1BST1RPID0gdHlwZSAmICRleHBvcnQuUDtcbiAgdmFyIElTX0JJTkQgPSB0eXBlICYgJGV4cG9ydC5CO1xuICB2YXIgdGFyZ2V0ID0gSVNfR0xPQkFMID8gZ2xvYmFsIDogSVNfU1RBVElDID8gZ2xvYmFsW25hbWVdIHx8IChnbG9iYWxbbmFtZV0gPSB7fSkgOiAoZ2xvYmFsW25hbWVdIHx8IHt9KVtQUk9UT1RZUEVdO1xuICB2YXIgZXhwb3J0cyA9IElTX0dMT0JBTCA/IGNvcmUgOiBjb3JlW25hbWVdIHx8IChjb3JlW25hbWVdID0ge30pO1xuICB2YXIgZXhwUHJvdG8gPSBleHBvcnRzW1BST1RPVFlQRV0gfHwgKGV4cG9ydHNbUFJPVE9UWVBFXSA9IHt9KTtcbiAgdmFyIGtleSwgb3duLCBvdXQsIGV4cDtcbiAgaWYgKElTX0dMT0JBTCkgc291cmNlID0gbmFtZTtcbiAgZm9yIChrZXkgaW4gc291cmNlKSB7XG4gICAgLy8gY29udGFpbnMgaW4gbmF0aXZlXG4gICAgb3duID0gIUlTX0ZPUkNFRCAmJiB0YXJnZXQgJiYgdGFyZ2V0W2tleV0gIT09IHVuZGVmaW5lZDtcbiAgICAvLyBleHBvcnQgbmF0aXZlIG9yIHBhc3NlZFxuICAgIG91dCA9IChvd24gPyB0YXJnZXQgOiBzb3VyY2UpW2tleV07XG4gICAgLy8gYmluZCB0aW1lcnMgdG8gZ2xvYmFsIGZvciBjYWxsIGZyb20gZXhwb3J0IGNvbnRleHRcbiAgICBleHAgPSBJU19CSU5EICYmIG93biA/IGN0eChvdXQsIGdsb2JhbCkgOiBJU19QUk9UTyAmJiB0eXBlb2Ygb3V0ID09ICdmdW5jdGlvbicgPyBjdHgoRnVuY3Rpb24uY2FsbCwgb3V0KSA6IG91dDtcbiAgICAvLyBleHRlbmQgZ2xvYmFsXG4gICAgaWYgKHRhcmdldCkgcmVkZWZpbmUodGFyZ2V0LCBrZXksIG91dCwgdHlwZSAmICRleHBvcnQuVSk7XG4gICAgLy8gZXhwb3J0XG4gICAgaWYgKGV4cG9ydHNba2V5XSAhPSBvdXQpIGhpZGUoZXhwb3J0cywga2V5LCBleHApO1xuICAgIGlmIChJU19QUk9UTyAmJiBleHBQcm90b1trZXldICE9IG91dCkgZXhwUHJvdG9ba2V5XSA9IG91dDtcbiAgfVxufTtcbmdsb2JhbC5jb3JlID0gY29yZTtcbi8vIHR5cGUgYml0bWFwXG4kZXhwb3J0LkYgPSAxOyAgIC8vIGZvcmNlZFxuJGV4cG9ydC5HID0gMjsgICAvLyBnbG9iYWxcbiRleHBvcnQuUyA9IDQ7ICAgLy8gc3RhdGljXG4kZXhwb3J0LlAgPSA4OyAgIC8vIHByb3RvXG4kZXhwb3J0LkIgPSAxNjsgIC8vIGJpbmRcbiRleHBvcnQuVyA9IDMyOyAgLy8gd3JhcFxuJGV4cG9ydC5VID0gNjQ7ICAvLyBzYWZlXG4kZXhwb3J0LlIgPSAxMjg7IC8vIHJlYWwgcHJvdG8gbWV0aG9kIGZvciBgbGlicmFyeWBcbm1vZHVsZS5leHBvcnRzID0gJGV4cG9ydDtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///0\n")},function(module,exports,__webpack_require__){eval("var isObject = __webpack_require__(4);\nmodule.exports = function (it) {\n if (!isObject(it)) throw TypeError(it + ' is not an object!');\n return it;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYW4tb2JqZWN0LmpzP2NiN2MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckM7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMS5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKCFpc09iamVjdChpdCkpIHRocm93IFR5cGVFcnJvcihpdCArICcgaXMgbm90IGFuIG9iamVjdCEnKTtcbiAgcmV0dXJuIGl0O1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///1\n")},function(module,exports){eval("// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n ? window : typeof self != 'undefined' && self.Math == Math ? self\n // eslint-disable-next-line no-new-func\n : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZ2xvYmFsLmpzPzc3MjYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlDQUF5QyIsImZpbGUiOiIyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzg2I2lzc3VlY29tbWVudC0xMTU3NTkwMjhcbnZhciBnbG9iYWwgPSBtb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiB3aW5kb3cgIT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93Lk1hdGggPT0gTWF0aFxuICA/IHdpbmRvdyA6IHR5cGVvZiBzZWxmICE9ICd1bmRlZmluZWQnICYmIHNlbGYuTWF0aCA9PSBNYXRoID8gc2VsZlxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmNcbiAgOiBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuaWYgKHR5cGVvZiBfX2cgPT0gJ251bWJlcicpIF9fZyA9IGdsb2JhbDsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bmRlZlxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2\n")},function(module,exports){eval("module.exports = function (exec) {\n try {\n return !!exec();\n } catch (e) {\n return true;\n }\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZmFpbHMuanM/NzllNSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBIiwiZmlsZSI6IjMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICEhZXhlYygpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///3\n")},function(module,exports){eval("module.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtb2JqZWN0LmpzP2QzZjQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBIiwiZmlsZSI6IjQuanMiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09PSAnb2JqZWN0JyA/IGl0ICE9PSBudWxsIDogdHlwZW9mIGl0ID09PSAnZnVuY3Rpb24nO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4\n")},function(module,exports,__webpack_require__){eval("var store = __webpack_require__(47)('wks');\nvar uid = __webpack_require__(33);\nvar Symbol = __webpack_require__(2).Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n return store[name] || (store[name] =\n USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fd2tzLmpzPzJiNGMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSxtQkFBTyxDQUFDLEVBQVc7QUFDL0IsVUFBVSxtQkFBTyxDQUFDLEVBQVE7QUFDMUIsYUFBYSxtQkFBTyxDQUFDLENBQVc7QUFDaEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiNS5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBzdG9yZSA9IHJlcXVpcmUoJy4vX3NoYXJlZCcpKCd3a3MnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuL191aWQnKTtcbnZhciBTeW1ib2wgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5TeW1ib2w7XG52YXIgVVNFX1NZTUJPTCA9IHR5cGVvZiBTeW1ib2wgPT0gJ2Z1bmN0aW9uJztcblxudmFyICRleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZSkge1xuICByZXR1cm4gc3RvcmVbbmFtZV0gfHwgKHN0b3JlW25hbWVdID1cbiAgICBVU0VfU1lNQk9MICYmIFN5bWJvbFtuYW1lXSB8fCAoVVNFX1NZTUJPTCA/IFN5bWJvbCA6IHVpZCkoJ1N5bWJvbC4nICsgbmFtZSkpO1xufTtcblxuJGV4cG9ydHMuc3RvcmUgPSBzdG9yZTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///5\n")},function(module,exports,__webpack_require__){eval("// 7.1.15 ToLength\nvar toInteger = __webpack_require__(21);\nvar min = Math.min;\nmodule.exports = function (it) {\n return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8tbGVuZ3RoLmpzPzlkZWYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDO0FBQ0E7QUFDQSwyREFBMkQ7QUFDM0QiLCJmaWxlIjoiNi5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDcuMS4xNSBUb0xlbmd0aFxudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciBtaW4gPSBNYXRoLm1pbjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCA+IDAgPyBtaW4odG9JbnRlZ2VyKGl0KSwgMHgxZmZmZmZmZmZmZmZmZikgOiAwOyAvLyBwb3coMiwgNTMpIC0gMSA9PSA5MDA3MTk5MjU0NzQwOTkxXG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///6\n")},function(module,exports,__webpack_require__){eval("// Thank's IE8 for his funny defineProperty\nmodule.exports = !__webpack_require__(3)(function () {\n return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZGVzY3JpcHRvcnMuanM/OWUxZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGtCQUFrQixtQkFBTyxDQUFDLENBQVU7QUFDcEMsaUNBQWlDLFFBQVEsbUJBQW1CLFVBQVUsRUFBRSxFQUFFO0FBQzFFLENBQUMiLCJmaWxlIjoiNy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIFRoYW5rJ3MgSUU4IGZvciBoaXMgZnVubnkgZGVmaW5lUHJvcGVydHlcbm1vZHVsZS5leHBvcnRzID0gIXJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAnYScsIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9IH0pLmEgIT0gNztcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7\n")},function(module,exports,__webpack_require__){eval("var anObject = __webpack_require__(1);\nvar IE8_DOM_DEFINE = __webpack_require__(94);\nvar toPrimitive = __webpack_require__(23);\nvar dP = Object.defineProperty;\n\nexports.f = __webpack_require__(7) ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return dP(O, P, Attributes);\n } catch (e) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWRwLmpzPzg2Y2MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMscUJBQXFCLG1CQUFPLENBQUMsRUFBbUI7QUFDaEQsa0JBQWtCLG1CQUFPLENBQUMsRUFBaUI7QUFDM0M7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLENBQWdCO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHLFlBQVk7QUFDZjtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiI4LmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuL19pZTgtZG9tLWRlZmluZScpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG52YXIgZFAgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG5cbmV4cG9ydHMuZiA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICBQID0gdG9QcmltaXRpdmUoUCwgdHJ1ZSk7XG4gIGFuT2JqZWN0KEF0dHJpYnV0ZXMpO1xuICBpZiAoSUU4X0RPTV9ERUZJTkUpIHRyeSB7XG4gICAgcmV0dXJuIGRQKE8sIFAsIEF0dHJpYnV0ZXMpO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKCdnZXQnIGluIEF0dHJpYnV0ZXMgfHwgJ3NldCcgaW4gQXR0cmlidXRlcykgdGhyb3cgVHlwZUVycm9yKCdBY2Nlc3NvcnMgbm90IHN1cHBvcnRlZCEnKTtcbiAgaWYgKCd2YWx1ZScgaW4gQXR0cmlidXRlcykgT1tQXSA9IEF0dHJpYnV0ZXMudmFsdWU7XG4gIHJldHVybiBPO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///8\n")},function(module,exports,__webpack_require__){eval("// 7.1.13 ToObject(argument)\nvar defined = __webpack_require__(24);\nmodule.exports = function (it) {\n return Object(defined(it));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8tb2JqZWN0LmpzPzRiZjgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsRUFBWTtBQUNsQztBQUNBO0FBQ0EiLCJmaWxlIjoiOS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDcuMS4xMyBUb09iamVjdChhcmd1bWVudClcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIE9iamVjdChkZWZpbmVkKGl0KSk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9\n")},function(module,exports){eval("module.exports = function (it) {\n if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n return it;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYS1mdW5jdGlvbi5qcz9kOGU4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjEwLmpzIiwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKHR5cGVvZiBpdCAhPSAnZnVuY3Rpb24nKSB0aHJvdyBUeXBlRXJyb3IoaXQgKyAnIGlzIG5vdCBhIGZ1bmN0aW9uIScpO1xuICByZXR1cm4gaXQ7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///10\n")},function(module,exports,__webpack_require__){eval("var dP = __webpack_require__(8);\nvar createDesc = __webpack_require__(32);\nmodule.exports = __webpack_require__(7) ? function (object, key, value) {\n return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faGlkZS5qcz8zMmU5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFNBQVMsbUJBQU8sQ0FBQyxDQUFjO0FBQy9CLGlCQUFpQixtQkFBTyxDQUFDLEVBQWtCO0FBQzNDLGlCQUFpQixtQkFBTyxDQUFDLENBQWdCO0FBQ3pDO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSIsImZpbGUiOiIxMS5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xudmFyIGNyZWF0ZURlc2MgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIHJldHVybiBkUC5mKG9iamVjdCwga2V5LCBjcmVhdGVEZXNjKDEsIHZhbHVlKSk7XG59IDogZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICBvYmplY3Rba2V5XSA9IHZhbHVlO1xuICByZXR1cm4gb2JqZWN0O1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///11\n")},function(module,exports,__webpack_require__){eval("var global = __webpack_require__(2);\nvar hide = __webpack_require__(11);\nvar has = __webpack_require__(14);\nvar SRC = __webpack_require__(33)('src');\nvar $toString = __webpack_require__(134);\nvar TO_STRING = 'toString';\nvar TPL = ('' + $toString).split(TO_STRING);\n\n__webpack_require__(18).inspectSource = function (it) {\n return $toString.call(it);\n};\n\n(module.exports = function (O, key, val, safe) {\n var isFunction = typeof val == 'function';\n if (isFunction) has(val, 'name') || hide(val, 'name', key);\n if (O[key] === val) return;\n if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));\n if (O === global) {\n O[key] = val;\n } else if (!safe) {\n delete O[key];\n hide(O, key, val);\n } else if (O[key]) {\n O[key] = val;\n } else {\n hide(O, key, val);\n }\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, TO_STRING, function toString() {\n return typeof this == 'function' && this[SRC] || $toString.call(this);\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcmVkZWZpbmUuanM/MmFiYSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxhQUFhLG1CQUFPLENBQUMsQ0FBVztBQUNoQyxXQUFXLG1CQUFPLENBQUMsRUFBUztBQUM1QixVQUFVLG1CQUFPLENBQUMsRUFBUTtBQUMxQixVQUFVLG1CQUFPLENBQUMsRUFBUTtBQUMxQixnQkFBZ0IsbUJBQU8sQ0FBQyxHQUF1QjtBQUMvQztBQUNBOztBQUVBLG1CQUFPLENBQUMsRUFBUztBQUNqQjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0EsQ0FBQyIsImZpbGUiOiIxMi5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIFNSQyA9IHJlcXVpcmUoJy4vX3VpZCcpKCdzcmMnKTtcbnZhciAkdG9TdHJpbmcgPSByZXF1aXJlKCcuL19mdW5jdGlvbi10by1zdHJpbmcnKTtcbnZhciBUT19TVFJJTkcgPSAndG9TdHJpbmcnO1xudmFyIFRQTCA9ICgnJyArICR0b1N0cmluZykuc3BsaXQoVE9fU1RSSU5HKTtcblxucmVxdWlyZSgnLi9fY29yZScpLmluc3BlY3RTb3VyY2UgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuICR0b1N0cmluZy5jYWxsKGl0KTtcbn07XG5cbihtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBrZXksIHZhbCwgc2FmZSkge1xuICB2YXIgaXNGdW5jdGlvbiA9IHR5cGVvZiB2YWwgPT0gJ2Z1bmN0aW9uJztcbiAgaWYgKGlzRnVuY3Rpb24pIGhhcyh2YWwsICduYW1lJykgfHwgaGlkZSh2YWwsICduYW1lJywga2V5KTtcbiAgaWYgKE9ba2V5XSA9PT0gdmFsKSByZXR1cm47XG4gIGlmIChpc0Z1bmN0aW9uKSBoYXModmFsLCBTUkMpIHx8IGhpZGUodmFsLCBTUkMsIE9ba2V5XSA/ICcnICsgT1trZXldIDogVFBMLmpvaW4oU3RyaW5nKGtleSkpKTtcbiAgaWYgKE8gPT09IGdsb2JhbCkge1xuICAgIE9ba2V5XSA9IHZhbDtcbiAgfSBlbHNlIGlmICghc2FmZSkge1xuICAgIGRlbGV0ZSBPW2tleV07XG4gICAgaGlkZShPLCBrZXksIHZhbCk7XG4gIH0gZWxzZSBpZiAoT1trZXldKSB7XG4gICAgT1trZXldID0gdmFsO1xuICB9IGVsc2Uge1xuICAgIGhpZGUoTywga2V5LCB2YWwpO1xuICB9XG4vLyBhZGQgZmFrZSBGdW5jdGlvbiN0b1N0cmluZyBmb3IgY29ycmVjdCB3b3JrIHdyYXBwZWQgbWV0aG9kcyAvIGNvbnN0cnVjdG9ycyB3aXRoIG1ldGhvZHMgbGlrZSBMb0Rhc2ggaXNOYXRpdmVcbn0pKEZ1bmN0aW9uLnByb3RvdHlwZSwgVE9fU1RSSU5HLCBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgcmV0dXJuIHR5cGVvZiB0aGlzID09ICdmdW5jdGlvbicgJiYgdGhpc1tTUkNdIHx8ICR0b1N0cmluZy5jYWxsKHRoaXMpO1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///12\n")},function(module,exports,__webpack_require__){eval("var $export = __webpack_require__(0);\nvar fails = __webpack_require__(3);\nvar defined = __webpack_require__(24);\nvar quot = /\"/g;\n// B.2.3.2.1 CreateHTML(string, tag, attribute, value)\nvar createHTML = function (string, tag, attribute, value) {\n var S = String(defined(string));\n var p1 = '<' + tag;\n if (attribute !== '') p1 += ' ' + attribute + '=\"' + String(value).replace(quot, '"') + '\"';\n return p1 + '>' + S + '';\n};\nmodule.exports = function (NAME, exec) {\n var O = {};\n O[NAME] = exec(createHTML);\n $export($export.P + $export.F * fails(function () {\n var test = ''[NAME]('\"');\n return test !== test.toLowerCase() || test.split('\"').length > 3;\n }), 'String', O);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLWh0bWwuanM/Mzg2YiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxZQUFZLG1CQUFPLENBQUMsQ0FBVTtBQUM5QixjQUFjLG1CQUFPLENBQUMsRUFBWTtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEZBQTBGO0FBQzFGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0giLCJmaWxlIjoiMTMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xudmFyIHF1b3QgPSAvXCIvZztcbi8vIEIuMi4zLjIuMSBDcmVhdGVIVE1MKHN0cmluZywgdGFnLCBhdHRyaWJ1dGUsIHZhbHVlKVxudmFyIGNyZWF0ZUhUTUwgPSBmdW5jdGlvbiAoc3RyaW5nLCB0YWcsIGF0dHJpYnV0ZSwgdmFsdWUpIHtcbiAgdmFyIFMgPSBTdHJpbmcoZGVmaW5lZChzdHJpbmcpKTtcbiAgdmFyIHAxID0gJzwnICsgdGFnO1xuICBpZiAoYXR0cmlidXRlICE9PSAnJykgcDEgKz0gJyAnICsgYXR0cmlidXRlICsgJz1cIicgKyBTdHJpbmcodmFsdWUpLnJlcGxhY2UocXVvdCwgJyZxdW90OycpICsgJ1wiJztcbiAgcmV0dXJuIHAxICsgJz4nICsgUyArICc8LycgKyB0YWcgKyAnPic7XG59O1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTkFNRSwgZXhlYykge1xuICB2YXIgTyA9IHt9O1xuICBPW05BTUVdID0gZXhlYyhjcmVhdGVIVE1MKTtcbiAgJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHRlc3QgPSAnJ1tOQU1FXSgnXCInKTtcbiAgICByZXR1cm4gdGVzdCAhPT0gdGVzdC50b0xvd2VyQ2FzZSgpIHx8IHRlc3Quc3BsaXQoJ1wiJykubGVuZ3RoID4gMztcbiAgfSksICdTdHJpbmcnLCBPKTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///13\n")},function(module,exports){eval("var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faGFzLmpzPzY5YTgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdUJBQXVCO0FBQ3ZCO0FBQ0E7QUFDQSIsImZpbGUiOiIxNC5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBoYXNPd25Qcm9wZXJ0eSA9IHt9Lmhhc093blByb3BlcnR5O1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIGtleSkge1xuICByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbChpdCwga2V5KTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///14\n")},function(module,exports,__webpack_require__){eval("// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = __webpack_require__(48);\nvar defined = __webpack_require__(24);\nmodule.exports = function (it) {\n return IObject(defined(it));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8taW9iamVjdC5qcz82ODIxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLEVBQVk7QUFDbEMsY0FBYyxtQkFBTyxDQUFDLEVBQVk7QUFDbEM7QUFDQTtBQUNBIiwiZmlsZSI6IjE1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gdG8gaW5kZXhlZCBvYmplY3QsIHRvT2JqZWN0IHdpdGggZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBzdHJpbmdzXG52YXIgSU9iamVjdCA9IHJlcXVpcmUoJy4vX2lvYmplY3QnKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIElPYmplY3QoZGVmaW5lZChpdCkpO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///15\n")},function(module,exports,__webpack_require__){eval("var pIE = __webpack_require__(49);\nvar createDesc = __webpack_require__(32);\nvar toIObject = __webpack_require__(15);\nvar toPrimitive = __webpack_require__(23);\nvar has = __webpack_require__(14);\nvar IE8_DOM_DEFINE = __webpack_require__(94);\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nexports.f = __webpack_require__(7) ? gOPD : function getOwnPropertyDescriptor(O, P) {\n O = toIObject(O);\n P = toPrimitive(P, true);\n if (IE8_DOM_DEFINE) try {\n return gOPD(O, P);\n } catch (e) { /* empty */ }\n if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdvcGQuanM/MTFlOSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxVQUFVLG1CQUFPLENBQUMsRUFBZTtBQUNqQyxpQkFBaUIsbUJBQU8sQ0FBQyxFQUFrQjtBQUMzQyxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDLGtCQUFrQixtQkFBTyxDQUFDLEVBQWlCO0FBQzNDLFVBQVUsbUJBQU8sQ0FBQyxFQUFRO0FBQzFCLHFCQUFxQixtQkFBTyxDQUFDLEVBQW1CO0FBQ2hEOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxDQUFnQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUcsWUFBWTtBQUNmO0FBQ0EiLCJmaWxlIjoiMTYuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgcElFID0gcmVxdWlyZSgnLi9fb2JqZWN0LXBpZScpO1xudmFyIGNyZWF0ZURlc2MgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuL19pZTgtZG9tLWRlZmluZScpO1xudmFyIGdPUEQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG5leHBvcnRzLmYgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gZ09QRCA6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKSB7XG4gIE8gPSB0b0lPYmplY3QoTyk7XG4gIFAgPSB0b1ByaW1pdGl2ZShQLCB0cnVlKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiBnT1BEKE8sIFApO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKGhhcyhPLCBQKSkgcmV0dXJuIGNyZWF0ZURlc2MoIXBJRS5mLmNhbGwoTywgUCksIE9bUF0pO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///16\n")},function(module,exports,__webpack_require__){eval("// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = __webpack_require__(14);\nvar toObject = __webpack_require__(9);\nvar IE_PROTO = __webpack_require__(68)('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n O = toObject(O);\n if (has(O, IE_PROTO)) return O[IE_PROTO];\n if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n return O.constructor.prototype;\n } return O instanceof Object ? ObjectProto : null;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdwby5qcz8zOGZkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsVUFBVSxtQkFBTyxDQUFDLEVBQVE7QUFDMUIsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZUFBZSxtQkFBTyxDQUFDLEVBQWU7QUFDdEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCIsImZpbGUiOiIxNy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDE5LjEuMi45IC8gMTUuMi4zLjIgT2JqZWN0LmdldFByb3RvdHlwZU9mKE8pXG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciBJRV9QUk9UTyA9IHJlcXVpcmUoJy4vX3NoYXJlZC1rZXknKSgnSUVfUFJPVE8nKTtcbnZhciBPYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmdldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIChPKSB7XG4gIE8gPSB0b09iamVjdChPKTtcbiAgaWYgKGhhcyhPLCBJRV9QUk9UTykpIHJldHVybiBPW0lFX1BST1RPXTtcbiAgaWYgKHR5cGVvZiBPLmNvbnN0cnVjdG9yID09ICdmdW5jdGlvbicgJiYgTyBpbnN0YW5jZW9mIE8uY29uc3RydWN0b3IpIHtcbiAgICByZXR1cm4gTy5jb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG4gIH0gcmV0dXJuIE8gaW5zdGFuY2VvZiBPYmplY3QgPyBPYmplY3RQcm90byA6IG51bGw7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///17\n")},function(module,exports){eval("var core = module.exports = { version: '2.6.12' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY29yZS5qcz84Mzc4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDZCQUE2QjtBQUM3Qix1Q0FBdUMiLCJmaWxlIjoiMTguanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgY29yZSA9IG1vZHVsZS5leHBvcnRzID0geyB2ZXJzaW9uOiAnMi42LjEyJyB9O1xuaWYgKHR5cGVvZiBfX2UgPT0gJ251bWJlcicpIF9fZSA9IGNvcmU7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///18\n")},function(module,exports,__webpack_require__){eval("// optional / simple context binding\nvar aFunction = __webpack_require__(10);\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY3R4LmpzPzliNDMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIxOS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIG9wdGlvbmFsIC8gc2ltcGxlIGNvbnRleHQgYmluZGluZ1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGZuLCB0aGF0LCBsZW5ndGgpIHtcbiAgYUZ1bmN0aW9uKGZuKTtcbiAgaWYgKHRoYXQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGZuO1xuICBzd2l0Y2ggKGxlbmd0aCkge1xuICAgIGNhc2UgMTogcmV0dXJuIGZ1bmN0aW9uIChhKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhKTtcbiAgICB9O1xuICAgIGNhc2UgMjogcmV0dXJuIGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhLCBiKTtcbiAgICB9O1xuICAgIGNhc2UgMzogcmV0dXJuIGZ1bmN0aW9uIChhLCBiLCBjKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhLCBiLCBjKTtcbiAgICB9O1xuICB9XG4gIHJldHVybiBmdW5jdGlvbiAoLyogLi4uYXJncyAqLykge1xuICAgIHJldHVybiBmbi5hcHBseSh0aGF0LCBhcmd1bWVudHMpO1xuICB9O1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///19\n")},function(module,exports){eval("var toString = {}.toString;\n\nmodule.exports = function (it) {\n return toString.call(it).slice(8, -1);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY29mLmpzPzJkOTUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsaUJBQWlCOztBQUVqQjtBQUNBO0FBQ0EiLCJmaWxlIjoiMjAuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgdG9TdHJpbmcgPSB7fS50b1N0cmluZztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwoaXQpLnNsaWNlKDgsIC0xKTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///20\n")},function(module,exports){eval("// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8taW50ZWdlci5qcz80NTg4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIyMS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDcuMS40IFRvSW50ZWdlclxudmFyIGNlaWwgPSBNYXRoLmNlaWw7XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGlzTmFOKGl0ID0gK2l0KSA/IDAgOiAoaXQgPiAwID8gZmxvb3IgOiBjZWlsKShpdCk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///21\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar fails = __webpack_require__(3);\n\nmodule.exports = function (method, arg) {\n return !!method && fails(function () {\n // eslint-disable-next-line no-useless-call\n arg ? method.call(null, function () { /* empty */ }, 1) : method.call(null);\n });\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaWN0LW1ldGhvZC5qcz8yZjIxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsWUFBWSxtQkFBTyxDQUFDLENBQVU7O0FBRTlCO0FBQ0E7QUFDQTtBQUNBLHlDQUF5QyxjQUFjO0FBQ3ZELEdBQUc7QUFDSCIsImZpbGUiOiIyMi5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG1ldGhvZCwgYXJnKSB7XG4gIHJldHVybiAhIW1ldGhvZCAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZWxlc3MtY2FsbFxuICAgIGFyZyA/IG1ldGhvZC5jYWxsKG51bGwsIGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSwgMSkgOiBtZXRob2QuY2FsbChudWxsKTtcbiAgfSk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///22\n")},function(module,exports,__webpack_require__){eval("// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = __webpack_require__(4);\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n if (!isObject(it)) return it;\n var fn, val;\n if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8tcHJpbWl0aXZlLmpzPzZhOTkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIyMy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDcuMS4xIFRvUHJpbWl0aXZlKGlucHV0IFssIFByZWZlcnJlZFR5cGVdKVxudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG4vLyBpbnN0ZWFkIG9mIHRoZSBFUzYgc3BlYyB2ZXJzaW9uLCB3ZSBkaWRuJ3QgaW1wbGVtZW50IEBAdG9QcmltaXRpdmUgY2FzZVxuLy8gYW5kIHRoZSBzZWNvbmQgYXJndW1lbnQgLSBmbGFnIC0gcHJlZmVycmVkIHR5cGUgaXMgYSBzdHJpbmdcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBTKSB7XG4gIGlmICghaXNPYmplY3QoaXQpKSByZXR1cm4gaXQ7XG4gIHZhciBmbiwgdmFsO1xuICBpZiAoUyAmJiB0eXBlb2YgKGZuID0gaXQudG9TdHJpbmcpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaXQpKSkgcmV0dXJuIHZhbDtcbiAgaWYgKHR5cGVvZiAoZm4gPSBpdC52YWx1ZU9mKSA9PSAnZnVuY3Rpb24nICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGl0KSkpIHJldHVybiB2YWw7XG4gIGlmICghUyAmJiB0eXBlb2YgKGZuID0gaXQudG9TdHJpbmcpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaXQpKSkgcmV0dXJuIHZhbDtcbiAgdGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///23\n")},function(module,exports){eval('// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError("Can\'t call method on " + it);\n return it;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZGVmaW5lZC5qcz9iZTEzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMjQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyA3LjIuMSBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGFyZ3VtZW50KVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGl0ID09IHVuZGVmaW5lZCkgdGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gIFwiICsgaXQpO1xuICByZXR1cm4gaXQ7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///24\n')},function(module,exports,__webpack_require__){eval("// most Object methods by ES6 should accept primitives\nvar $export = __webpack_require__(0);\nvar core = __webpack_require__(18);\nvar fails = __webpack_require__(3);\nmodule.exports = function (KEY, exec) {\n var fn = (core.Object || {})[KEY] || Object[KEY];\n var exp = {};\n exp[KEY] = exec(fn);\n $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LXNhcC5qcz81ZWRhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsV0FBVyxtQkFBTyxDQUFDLEVBQVM7QUFDNUIsWUFBWSxtQkFBTyxDQUFDLENBQVU7QUFDOUI7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBLHFEQUFxRCxPQUFPLEVBQUU7QUFDOUQiLCJmaWxlIjoiMjUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBtb3N0IE9iamVjdCBtZXRob2RzIGJ5IEVTNiBzaG91bGQgYWNjZXB0IHByaW1pdGl2ZXNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgY29yZSA9IHJlcXVpcmUoJy4vX2NvcmUnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChLRVksIGV4ZWMpIHtcbiAgdmFyIGZuID0gKGNvcmUuT2JqZWN0IHx8IHt9KVtLRVldIHx8IE9iamVjdFtLRVldO1xuICB2YXIgZXhwID0ge307XG4gIGV4cFtLRVldID0gZXhlYyhmbik7XG4gICRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogZmFpbHMoZnVuY3Rpb24gKCkgeyBmbigxKTsgfSksICdPYmplY3QnLCBleHApO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///25\n")},function(module,exports,__webpack_require__){eval("// 0 -> Array#forEach\n// 1 -> Array#map\n// 2 -> Array#filter\n// 3 -> Array#some\n// 4 -> Array#every\n// 5 -> Array#find\n// 6 -> Array#findIndex\nvar ctx = __webpack_require__(19);\nvar IObject = __webpack_require__(48);\nvar toObject = __webpack_require__(9);\nvar toLength = __webpack_require__(6);\nvar asc = __webpack_require__(84);\nmodule.exports = function (TYPE, $create) {\n var IS_MAP = TYPE == 1;\n var IS_FILTER = TYPE == 2;\n var IS_SOME = TYPE == 3;\n var IS_EVERY = TYPE == 4;\n var IS_FIND_INDEX = TYPE == 6;\n var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n var create = $create || asc;\n return function ($this, callbackfn, that) {\n var O = toObject($this);\n var self = IObject(O);\n var f = ctx(callbackfn, that, 3);\n var length = toLength(self.length);\n var index = 0;\n var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;\n var val, res;\n for (;length > index; index++) if (NO_HOLES || index in self) {\n val = self[index];\n res = f(val, index, O);\n if (TYPE) {\n if (IS_MAP) result[index] = res; // map\n else if (res) switch (TYPE) {\n case 3: return true; // some\n case 5: return val; // find\n case 6: return index; // findIndex\n case 2: result.push(val); // filter\n } else if (IS_EVERY) return false; // every\n }\n }\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;\n };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktbWV0aG9kcy5qcz8wYTQ5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVSxtQkFBTyxDQUFDLEVBQVE7QUFDMUIsY0FBYyxtQkFBTyxDQUFDLEVBQVk7QUFDbEMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsVUFBVSxtQkFBTyxDQUFDLEVBQXlCO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVSxlQUFlO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBLHdDQUF3QztBQUN4QztBQUNBLDhCQUE4QjtBQUM5Qiw2QkFBNkI7QUFDN0IsK0JBQStCO0FBQy9CLG1DQUFtQztBQUNuQyxTQUFTLGlDQUFpQztBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjI2LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMCAtPiBBcnJheSNmb3JFYWNoXG4vLyAxIC0+IEFycmF5I21hcFxuLy8gMiAtPiBBcnJheSNmaWx0ZXJcbi8vIDMgLT4gQXJyYXkjc29tZVxuLy8gNCAtPiBBcnJheSNldmVyeVxuLy8gNSAtPiBBcnJheSNmaW5kXG4vLyA2IC0+IEFycmF5I2ZpbmRJbmRleFxudmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIElPYmplY3QgPSByZXF1aXJlKCcuL19pb2JqZWN0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGFzYyA9IHJlcXVpcmUoJy4vX2FycmF5LXNwZWNpZXMtY3JlYXRlJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChUWVBFLCAkY3JlYXRlKSB7XG4gIHZhciBJU19NQVAgPSBUWVBFID09IDE7XG4gIHZhciBJU19GSUxURVIgPSBUWVBFID09IDI7XG4gIHZhciBJU19TT01FID0gVFlQRSA9PSAzO1xuICB2YXIgSVNfRVZFUlkgPSBUWVBFID09IDQ7XG4gIHZhciBJU19GSU5EX0lOREVYID0gVFlQRSA9PSA2O1xuICB2YXIgTk9fSE9MRVMgPSBUWVBFID09IDUgfHwgSVNfRklORF9JTkRFWDtcbiAgdmFyIGNyZWF0ZSA9ICRjcmVhdGUgfHwgYXNjO1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBjYWxsYmFja2ZuLCB0aGF0KSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCgkdGhpcyk7XG4gICAgdmFyIHNlbGYgPSBJT2JqZWN0KE8pO1xuICAgIHZhciBmID0gY3R4KGNhbGxiYWNrZm4sIHRoYXQsIDMpO1xuICAgIHZhciBsZW5ndGggPSB0b0xlbmd0aChzZWxmLmxlbmd0aCk7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgcmVzdWx0ID0gSVNfTUFQID8gY3JlYXRlKCR0aGlzLCBsZW5ndGgpIDogSVNfRklMVEVSID8gY3JlYXRlKCR0aGlzLCAwKSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgdmFsLCByZXM7XG4gICAgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIGlmIChOT19IT0xFUyB8fCBpbmRleCBpbiBzZWxmKSB7XG4gICAgICB2YWwgPSBzZWxmW2luZGV4XTtcbiAgICAgIHJlcyA9IGYodmFsLCBpbmRleCwgTyk7XG4gICAgICBpZiAoVFlQRSkge1xuICAgICAgICBpZiAoSVNfTUFQKSByZXN1bHRbaW5kZXhdID0gcmVzOyAgIC8vIG1hcFxuICAgICAgICBlbHNlIGlmIChyZXMpIHN3aXRjaCAoVFlQRSkge1xuICAgICAgICAgIGNhc2UgMzogcmV0dXJuIHRydWU7ICAgICAgICAgICAgIC8vIHNvbWVcbiAgICAgICAgICBjYXNlIDU6IHJldHVybiB2YWw7ICAgICAgICAgICAgICAvLyBmaW5kXG4gICAgICAgICAgY2FzZSA2OiByZXR1cm4gaW5kZXg7ICAgICAgICAgICAgLy8gZmluZEluZGV4XG4gICAgICAgICAgY2FzZSAyOiByZXN1bHQucHVzaCh2YWwpOyAgICAgICAgLy8gZmlsdGVyXG4gICAgICAgIH0gZWxzZSBpZiAoSVNfRVZFUlkpIHJldHVybiBmYWxzZTsgLy8gZXZlcnlcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIElTX0ZJTkRfSU5ERVggPyAtMSA6IElTX1NPTUUgfHwgSVNfRVZFUlkgPyBJU19FVkVSWSA6IHJlc3VsdDtcbiAgfTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///26\n")},function(module,exports,__webpack_require__){"use strict";eval("\nif (__webpack_require__(7)) {\n var LIBRARY = __webpack_require__(29);\n var global = __webpack_require__(2);\n var fails = __webpack_require__(3);\n var $export = __webpack_require__(0);\n var $typed = __webpack_require__(62);\n var $buffer = __webpack_require__(92);\n var ctx = __webpack_require__(19);\n var anInstance = __webpack_require__(39);\n var propertyDesc = __webpack_require__(32);\n var hide = __webpack_require__(11);\n var redefineAll = __webpack_require__(41);\n var toInteger = __webpack_require__(21);\n var toLength = __webpack_require__(6);\n var toIndex = __webpack_require__(122);\n var toAbsoluteIndex = __webpack_require__(35);\n var toPrimitive = __webpack_require__(23);\n var has = __webpack_require__(14);\n var classof = __webpack_require__(44);\n var isObject = __webpack_require__(4);\n var toObject = __webpack_require__(9);\n var isArrayIter = __webpack_require__(81);\n var create = __webpack_require__(36);\n var getPrototypeOf = __webpack_require__(17);\n var gOPN = __webpack_require__(37).f;\n var getIterFn = __webpack_require__(83);\n var uid = __webpack_require__(33);\n var wks = __webpack_require__(5);\n var createArrayMethod = __webpack_require__(26);\n var createArrayIncludes = __webpack_require__(52);\n var speciesConstructor = __webpack_require__(51);\n var ArrayIterators = __webpack_require__(86);\n var Iterators = __webpack_require__(46);\n var $iterDetect = __webpack_require__(57);\n var setSpecies = __webpack_require__(38);\n var arrayFill = __webpack_require__(85);\n var arrayCopyWithin = __webpack_require__(111);\n var $DP = __webpack_require__(8);\n var $GOPD = __webpack_require__(16);\n var dP = $DP.f;\n var gOPD = $GOPD.f;\n var RangeError = global.RangeError;\n var TypeError = global.TypeError;\n var Uint8Array = global.Uint8Array;\n var ARRAY_BUFFER = 'ArrayBuffer';\n var SHARED_BUFFER = 'Shared' + ARRAY_BUFFER;\n var BYTES_PER_ELEMENT = 'BYTES_PER_ELEMENT';\n var PROTOTYPE = 'prototype';\n var ArrayProto = Array[PROTOTYPE];\n var $ArrayBuffer = $buffer.ArrayBuffer;\n var $DataView = $buffer.DataView;\n var arrayForEach = createArrayMethod(0);\n var arrayFilter = createArrayMethod(2);\n var arraySome = createArrayMethod(3);\n var arrayEvery = createArrayMethod(4);\n var arrayFind = createArrayMethod(5);\n var arrayFindIndex = createArrayMethod(6);\n var arrayIncludes = createArrayIncludes(true);\n var arrayIndexOf = createArrayIncludes(false);\n var arrayValues = ArrayIterators.values;\n var arrayKeys = ArrayIterators.keys;\n var arrayEntries = ArrayIterators.entries;\n var arrayLastIndexOf = ArrayProto.lastIndexOf;\n var arrayReduce = ArrayProto.reduce;\n var arrayReduceRight = ArrayProto.reduceRight;\n var arrayJoin = ArrayProto.join;\n var arraySort = ArrayProto.sort;\n var arraySlice = ArrayProto.slice;\n var arrayToString = ArrayProto.toString;\n var arrayToLocaleString = ArrayProto.toLocaleString;\n var ITERATOR = wks('iterator');\n var TAG = wks('toStringTag');\n var TYPED_CONSTRUCTOR = uid('typed_constructor');\n var DEF_CONSTRUCTOR = uid('def_constructor');\n var ALL_CONSTRUCTORS = $typed.CONSTR;\n var TYPED_ARRAY = $typed.TYPED;\n var VIEW = $typed.VIEW;\n var WRONG_LENGTH = 'Wrong length!';\n\n var $map = createArrayMethod(1, function (O, length) {\n return allocate(speciesConstructor(O, O[DEF_CONSTRUCTOR]), length);\n });\n\n var LITTLE_ENDIAN = fails(function () {\n // eslint-disable-next-line no-undef\n return new Uint8Array(new Uint16Array([1]).buffer)[0] === 1;\n });\n\n var FORCED_SET = !!Uint8Array && !!Uint8Array[PROTOTYPE].set && fails(function () {\n new Uint8Array(1).set({});\n });\n\n var toOffset = function (it, BYTES) {\n var offset = toInteger(it);\n if (offset < 0 || offset % BYTES) throw RangeError('Wrong offset!');\n return offset;\n };\n\n var validate = function (it) {\n if (isObject(it) && TYPED_ARRAY in it) return it;\n throw TypeError(it + ' is not a typed array!');\n };\n\n var allocate = function (C, length) {\n if (!(isObject(C) && TYPED_CONSTRUCTOR in C)) {\n throw TypeError('It is not a typed array constructor!');\n } return new C(length);\n };\n\n var speciesFromList = function (O, list) {\n return fromList(speciesConstructor(O, O[DEF_CONSTRUCTOR]), list);\n };\n\n var fromList = function (C, list) {\n var index = 0;\n var length = list.length;\n var result = allocate(C, length);\n while (length > index) result[index] = list[index++];\n return result;\n };\n\n var addGetter = function (it, key, internal) {\n dP(it, key, { get: function () { return this._d[internal]; } });\n };\n\n var $from = function from(source /* , mapfn, thisArg */) {\n var O = toObject(source);\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var iterFn = getIterFn(O);\n var i, length, values, result, step, iterator;\n if (iterFn != undefined && !isArrayIter(iterFn)) {\n for (iterator = iterFn.call(O), values = [], i = 0; !(step = iterator.next()).done; i++) {\n values.push(step.value);\n } O = values;\n }\n if (mapping && aLen > 2) mapfn = ctx(mapfn, arguments[2], 2);\n for (i = 0, length = toLength(O.length), result = allocate(this, length); length > i; i++) {\n result[i] = mapping ? mapfn(O[i], i) : O[i];\n }\n return result;\n };\n\n var $of = function of(/* ...items */) {\n var index = 0;\n var length = arguments.length;\n var result = allocate(this, length);\n while (length > index) result[index] = arguments[index++];\n return result;\n };\n\n // iOS Safari 6.x fails here\n var TO_LOCALE_BUG = !!Uint8Array && fails(function () { arrayToLocaleString.call(new Uint8Array(1)); });\n\n var $toLocaleString = function toLocaleString() {\n return arrayToLocaleString.apply(TO_LOCALE_BUG ? arraySlice.call(validate(this)) : validate(this), arguments);\n };\n\n var proto = {\n copyWithin: function copyWithin(target, start /* , end */) {\n return arrayCopyWithin.call(validate(this), target, start, arguments.length > 2 ? arguments[2] : undefined);\n },\n every: function every(callbackfn /* , thisArg */) {\n return arrayEvery(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n fill: function fill(value /* , start, end */) { // eslint-disable-line no-unused-vars\n return arrayFill.apply(validate(this), arguments);\n },\n filter: function filter(callbackfn /* , thisArg */) {\n return speciesFromList(this, arrayFilter(validate(this), callbackfn,\n arguments.length > 1 ? arguments[1] : undefined));\n },\n find: function find(predicate /* , thisArg */) {\n return arrayFind(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n findIndex: function findIndex(predicate /* , thisArg */) {\n return arrayFindIndex(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n forEach: function forEach(callbackfn /* , thisArg */) {\n arrayForEach(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n indexOf: function indexOf(searchElement /* , fromIndex */) {\n return arrayIndexOf(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n includes: function includes(searchElement /* , fromIndex */) {\n return arrayIncludes(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n join: function join(separator) { // eslint-disable-line no-unused-vars\n return arrayJoin.apply(validate(this), arguments);\n },\n lastIndexOf: function lastIndexOf(searchElement /* , fromIndex */) { // eslint-disable-line no-unused-vars\n return arrayLastIndexOf.apply(validate(this), arguments);\n },\n map: function map(mapfn /* , thisArg */) {\n return $map(validate(this), mapfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n reduce: function reduce(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduce.apply(validate(this), arguments);\n },\n reduceRight: function reduceRight(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduceRight.apply(validate(this), arguments);\n },\n reverse: function reverse() {\n var that = this;\n var length = validate(that).length;\n var middle = Math.floor(length / 2);\n var index = 0;\n var value;\n while (index < middle) {\n value = that[index];\n that[index++] = that[--length];\n that[length] = value;\n } return that;\n },\n some: function some(callbackfn /* , thisArg */) {\n return arraySome(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n sort: function sort(comparefn) {\n return arraySort.call(validate(this), comparefn);\n },\n subarray: function subarray(begin, end) {\n var O = validate(this);\n var length = O.length;\n var $begin = toAbsoluteIndex(begin, length);\n return new (speciesConstructor(O, O[DEF_CONSTRUCTOR]))(\n O.buffer,\n O.byteOffset + $begin * O.BYTES_PER_ELEMENT,\n toLength((end === undefined ? length : toAbsoluteIndex(end, length)) - $begin)\n );\n }\n };\n\n var $slice = function slice(start, end) {\n return speciesFromList(this, arraySlice.call(validate(this), start, end));\n };\n\n var $set = function set(arrayLike /* , offset */) {\n validate(this);\n var offset = toOffset(arguments[1], 1);\n var length = this.length;\n var src = toObject(arrayLike);\n var len = toLength(src.length);\n var index = 0;\n if (len + offset > length) throw RangeError(WRONG_LENGTH);\n while (index < len) this[offset + index] = src[index++];\n };\n\n var $iterators = {\n entries: function entries() {\n return arrayEntries.call(validate(this));\n },\n keys: function keys() {\n return arrayKeys.call(validate(this));\n },\n values: function values() {\n return arrayValues.call(validate(this));\n }\n };\n\n var isTAIndex = function (target, key) {\n return isObject(target)\n && target[TYPED_ARRAY]\n && typeof key != 'symbol'\n && key in target\n && String(+key) == String(key);\n };\n var $getDesc = function getOwnPropertyDescriptor(target, key) {\n return isTAIndex(target, key = toPrimitive(key, true))\n ? propertyDesc(2, target[key])\n : gOPD(target, key);\n };\n var $setDesc = function defineProperty(target, key, desc) {\n if (isTAIndex(target, key = toPrimitive(key, true))\n && isObject(desc)\n && has(desc, 'value')\n && !has(desc, 'get')\n && !has(desc, 'set')\n // TODO: add validation descriptor w/o calling accessors\n && !desc.configurable\n && (!has(desc, 'writable') || desc.writable)\n && (!has(desc, 'enumerable') || desc.enumerable)\n ) {\n target[key] = desc.value;\n return target;\n } return dP(target, key, desc);\n };\n\n if (!ALL_CONSTRUCTORS) {\n $GOPD.f = $getDesc;\n $DP.f = $setDesc;\n }\n\n $export($export.S + $export.F * !ALL_CONSTRUCTORS, 'Object', {\n getOwnPropertyDescriptor: $getDesc,\n defineProperty: $setDesc\n });\n\n if (fails(function () { arrayToString.call({}); })) {\n arrayToString = arrayToLocaleString = function toString() {\n return arrayJoin.call(this);\n };\n }\n\n var $TypedArrayPrototype$ = redefineAll({}, proto);\n redefineAll($TypedArrayPrototype$, $iterators);\n hide($TypedArrayPrototype$, ITERATOR, $iterators.values);\n redefineAll($TypedArrayPrototype$, {\n slice: $slice,\n set: $set,\n constructor: function () { /* noop */ },\n toString: arrayToString,\n toLocaleString: $toLocaleString\n });\n addGetter($TypedArrayPrototype$, 'buffer', 'b');\n addGetter($TypedArrayPrototype$, 'byteOffset', 'o');\n addGetter($TypedArrayPrototype$, 'byteLength', 'l');\n addGetter($TypedArrayPrototype$, 'length', 'e');\n dP($TypedArrayPrototype$, TAG, {\n get: function () { return this[TYPED_ARRAY]; }\n });\n\n // eslint-disable-next-line max-statements\n module.exports = function (KEY, BYTES, wrapper, CLAMPED) {\n CLAMPED = !!CLAMPED;\n var NAME = KEY + (CLAMPED ? 'Clamped' : '') + 'Array';\n var GETTER = 'get' + KEY;\n var SETTER = 'set' + KEY;\n var TypedArray = global[NAME];\n var Base = TypedArray || {};\n var TAC = TypedArray && getPrototypeOf(TypedArray);\n var FORCED = !TypedArray || !$typed.ABV;\n var O = {};\n var TypedArrayPrototype = TypedArray && TypedArray[PROTOTYPE];\n var getter = function (that, index) {\n var data = that._d;\n return data.v[GETTER](index * BYTES + data.o, LITTLE_ENDIAN);\n };\n var setter = function (that, index, value) {\n var data = that._d;\n if (CLAMPED) value = (value = Math.round(value)) < 0 ? 0 : value > 0xff ? 0xff : value & 0xff;\n data.v[SETTER](index * BYTES + data.o, value, LITTLE_ENDIAN);\n };\n var addElement = function (that, index) {\n dP(that, index, {\n get: function () {\n return getter(this, index);\n },\n set: function (value) {\n return setter(this, index, value);\n },\n enumerable: true\n });\n };\n if (FORCED) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME, '_d');\n var index = 0;\n var offset = 0;\n var buffer, byteLength, length, klass;\n if (!isObject(data)) {\n length = toIndex(data);\n byteLength = length * BYTES;\n buffer = new $ArrayBuffer(byteLength);\n } else if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n buffer = data;\n offset = toOffset($offset, BYTES);\n var $len = data.byteLength;\n if ($length === undefined) {\n if ($len % BYTES) throw RangeError(WRONG_LENGTH);\n byteLength = $len - offset;\n if (byteLength < 0) throw RangeError(WRONG_LENGTH);\n } else {\n byteLength = toLength($length) * BYTES;\n if (byteLength + offset > $len) throw RangeError(WRONG_LENGTH);\n }\n length = byteLength / BYTES;\n } else if (TYPED_ARRAY in data) {\n return fromList(TypedArray, data);\n } else {\n return $from.call(TypedArray, data);\n }\n hide(that, '_d', {\n b: buffer,\n o: offset,\n l: byteLength,\n e: length,\n v: new $DataView(buffer)\n });\n while (index < length) addElement(that, index++);\n });\n TypedArrayPrototype = TypedArray[PROTOTYPE] = create($TypedArrayPrototype$);\n hide(TypedArrayPrototype, 'constructor', TypedArray);\n } else if (!fails(function () {\n TypedArray(1);\n }) || !fails(function () {\n new TypedArray(-1); // eslint-disable-line no-new\n }) || !$iterDetect(function (iter) {\n new TypedArray(); // eslint-disable-line no-new\n new TypedArray(null); // eslint-disable-line no-new\n new TypedArray(1.5); // eslint-disable-line no-new\n new TypedArray(iter); // eslint-disable-line no-new\n }, true)) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME);\n var klass;\n // `ws` module bug, temporarily remove validation length for Uint8Array\n // https://github.com/websockets/ws/pull/645\n if (!isObject(data)) return new Base(toIndex(data));\n if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n return $length !== undefined\n ? new Base(data, toOffset($offset, BYTES), $length)\n : $offset !== undefined\n ? new Base(data, toOffset($offset, BYTES))\n : new Base(data);\n }\n if (TYPED_ARRAY in data) return fromList(TypedArray, data);\n return $from.call(TypedArray, data);\n });\n arrayForEach(TAC !== Function.prototype ? gOPN(Base).concat(gOPN(TAC)) : gOPN(Base), function (key) {\n if (!(key in TypedArray)) hide(TypedArray, key, Base[key]);\n });\n TypedArray[PROTOTYPE] = TypedArrayPrototype;\n if (!LIBRARY) TypedArrayPrototype.constructor = TypedArray;\n }\n var $nativeIterator = TypedArrayPrototype[ITERATOR];\n var CORRECT_ITER_NAME = !!$nativeIterator\n && ($nativeIterator.name == 'values' || $nativeIterator.name == undefined);\n var $iterator = $iterators.values;\n hide(TypedArray, TYPED_CONSTRUCTOR, true);\n hide(TypedArrayPrototype, TYPED_ARRAY, NAME);\n hide(TypedArrayPrototype, VIEW, true);\n hide(TypedArrayPrototype, DEF_CONSTRUCTOR, TypedArray);\n\n if (CLAMPED ? new TypedArray(1)[TAG] != NAME : !(TAG in TypedArrayPrototype)) {\n dP(TypedArrayPrototype, TAG, {\n get: function () { return NAME; }\n });\n }\n\n O[NAME] = TypedArray;\n\n $export($export.G + $export.W + $export.F * (TypedArray != Base), O);\n\n $export($export.S, NAME, {\n BYTES_PER_ELEMENT: BYTES\n });\n\n $export($export.S + $export.F * fails(function () { Base.of.call(TypedArray, 1); }), NAME, {\n from: $from,\n of: $of\n });\n\n if (!(BYTES_PER_ELEMENT in TypedArrayPrototype)) hide(TypedArrayPrototype, BYTES_PER_ELEMENT, BYTES);\n\n $export($export.P, NAME, proto);\n\n setSpecies(NAME);\n\n $export($export.P + $export.F * FORCED_SET, NAME, { set: $set });\n\n $export($export.P + $export.F * !CORRECT_ITER_NAME, NAME, $iterators);\n\n if (!LIBRARY && TypedArrayPrototype.toString != arrayToString) TypedArrayPrototype.toString = arrayToString;\n\n $export($export.P + $export.F * fails(function () {\n new TypedArray(1).slice();\n }), NAME, { slice: $slice });\n\n $export($export.P + $export.F * (fails(function () {\n return [1, 2].toLocaleString() != new TypedArray([1, 2]).toLocaleString();\n }) || !fails(function () {\n TypedArrayPrototype.toLocaleString.call([1, 2]);\n })), NAME, { toLocaleString: $toLocaleString });\n\n Iterators[NAME] = CORRECT_ITER_NAME ? $nativeIterator : $iterator;\n if (!LIBRARY && !CORRECT_ITER_NAME) hide(TypedArrayPrototype, ITERATOR, $iterator);\n };\n} else module.exports = function () { /* empty */ };\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdHlwZWQtYXJyYXkuanM/ZWMzMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLElBQUksbUJBQU8sQ0FBQyxDQUFnQjtBQUM1QixnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFZO0FBQ3BDLGVBQWUsbUJBQU8sQ0FBQyxDQUFXO0FBQ2xDLGNBQWMsbUJBQU8sQ0FBQyxDQUFVO0FBQ2hDLGdCQUFnQixtQkFBTyxDQUFDLENBQVc7QUFDbkMsZUFBZSxtQkFBTyxDQUFDLEVBQVU7QUFDakMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBaUI7QUFDekMsWUFBWSxtQkFBTyxDQUFDLEVBQVE7QUFDNUIsbUJBQW1CLG1CQUFPLENBQUMsRUFBZ0I7QUFDM0MscUJBQXFCLG1CQUFPLENBQUMsRUFBa0I7QUFDL0MsYUFBYSxtQkFBTyxDQUFDLEVBQVM7QUFDOUIsb0JBQW9CLG1CQUFPLENBQUMsRUFBaUI7QUFDN0Msa0JBQWtCLG1CQUFPLENBQUMsRUFBZTtBQUN6QyxpQkFBaUIsbUJBQU8sQ0FBQyxDQUFjO0FBQ3ZDLGdCQUFnQixtQkFBTyxDQUFDLEdBQWE7QUFDckMsd0JBQXdCLG1CQUFPLENBQUMsRUFBc0I7QUFDdEQsb0JBQW9CLG1CQUFPLENBQUMsRUFBaUI7QUFDN0MsWUFBWSxtQkFBTyxDQUFDLEVBQVE7QUFDNUIsZ0JBQWdCLG1CQUFPLENBQUMsRUFBWTtBQUNwQyxpQkFBaUIsbUJBQU8sQ0FBQyxDQUFjO0FBQ3ZDLGlCQUFpQixtQkFBTyxDQUFDLENBQWM7QUFDdkMsb0JBQW9CLG1CQUFPLENBQUMsRUFBa0I7QUFDOUMsZUFBZSxtQkFBTyxDQUFDLEVBQWtCO0FBQ3pDLHVCQUF1QixtQkFBTyxDQUFDLEVBQWU7QUFDOUMsYUFBYSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3JDLGtCQUFrQixtQkFBTyxDQUFDLEVBQTRCO0FBQ3RELFlBQVksbUJBQU8sQ0FBQyxFQUFRO0FBQzVC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O0FBQ3ZDLE9BQU87QUFDUDs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTCx1REFBdUQsNkJBQTZCLEVBQUU7QUFDdEY7QUFDQTtBQUNBLEtBQUs7O0FBRUw7O0FBRUE7O0FBRUE7O0FBRUEsdURBQXVELFlBQVk7O0FBRW5FOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxLQUFLLFVBQVUsZ0JBQWdCOztBQUUvQjtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSyxXQUFXLGtDQUFrQzs7QUFFbEQ7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxvQ0FBb0MiLCJmaWxlIjoiMjcuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5pZiAocmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSkge1xuICB2YXIgTElCUkFSWSA9IHJlcXVpcmUoJy4vX2xpYnJhcnknKTtcbiAgdmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xuICB2YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xuICB2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuICB2YXIgJHR5cGVkID0gcmVxdWlyZSgnLi9fdHlwZWQnKTtcbiAgdmFyICRidWZmZXIgPSByZXF1aXJlKCcuL190eXBlZC1idWZmZXInKTtcbiAgdmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xuICB2YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG4gIHZhciBwcm9wZXJ0eURlc2MgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG4gIHZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xuICB2YXIgcmVkZWZpbmVBbGwgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKTtcbiAgdmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbiAgdmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG4gIHZhciB0b0luZGV4ID0gcmVxdWlyZSgnLi9fdG8taW5kZXgnKTtcbiAgdmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4vX3RvLWFic29sdXRlLWluZGV4Jyk7XG4gIHZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xuICB2YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG4gIHZhciBjbGFzc29mID0gcmVxdWlyZSgnLi9fY2xhc3NvZicpO1xuICB2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbiAgdmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG4gIHZhciBpc0FycmF5SXRlciA9IHJlcXVpcmUoJy4vX2lzLWFycmF5LWl0ZXInKTtcbiAgdmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKTtcbiAgdmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xuICB2YXIgZ09QTiA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJykuZjtcbiAgdmFyIGdldEl0ZXJGbiA9IHJlcXVpcmUoJy4vY29yZS5nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG4gIHZhciB1aWQgPSByZXF1aXJlKCcuL191aWQnKTtcbiAgdmFyIHdrcyA9IHJlcXVpcmUoJy4vX3drcycpO1xuICB2YXIgY3JlYXRlQXJyYXlNZXRob2QgPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJyk7XG4gIHZhciBjcmVhdGVBcnJheUluY2x1ZGVzID0gcmVxdWlyZSgnLi9fYXJyYXktaW5jbHVkZXMnKTtcbiAgdmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4vX3NwZWNpZXMtY29uc3RydWN0b3InKTtcbiAgdmFyIEFycmF5SXRlcmF0b3JzID0gcmVxdWlyZSgnLi9lczYuYXJyYXkuaXRlcmF0b3InKTtcbiAgdmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xuICB2YXIgJGl0ZXJEZXRlY3QgPSByZXF1aXJlKCcuL19pdGVyLWRldGVjdCcpO1xuICB2YXIgc2V0U3BlY2llcyA9IHJlcXVpcmUoJy4vX3NldC1zcGVjaWVzJyk7XG4gIHZhciBhcnJheUZpbGwgPSByZXF1aXJlKCcuL19hcnJheS1maWxsJyk7XG4gIHZhciBhcnJheUNvcHlXaXRoaW4gPSByZXF1aXJlKCcuL19hcnJheS1jb3B5LXdpdGhpbicpO1xuICB2YXIgJERQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG4gIHZhciAkR09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJyk7XG4gIHZhciBkUCA9ICREUC5mO1xuICB2YXIgZ09QRCA9ICRHT1BELmY7XG4gIHZhciBSYW5nZUVycm9yID0gZ2xvYmFsLlJhbmdlRXJyb3I7XG4gIHZhciBUeXBlRXJyb3IgPSBnbG9iYWwuVHlwZUVycm9yO1xuICB2YXIgVWludDhBcnJheSA9IGdsb2JhbC5VaW50OEFycmF5O1xuICB2YXIgQVJSQVlfQlVGRkVSID0gJ0FycmF5QnVmZmVyJztcbiAgdmFyIFNIQVJFRF9CVUZGRVIgPSAnU2hhcmVkJyArIEFSUkFZX0JVRkZFUjtcbiAgdmFyIEJZVEVTX1BFUl9FTEVNRU5UID0gJ0JZVEVTX1BFUl9FTEVNRU5UJztcbiAgdmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xuICB2YXIgQXJyYXlQcm90byA9IEFycmF5W1BST1RPVFlQRV07XG4gIHZhciAkQXJyYXlCdWZmZXIgPSAkYnVmZmVyLkFycmF5QnVmZmVyO1xuICB2YXIgJERhdGFWaWV3ID0gJGJ1ZmZlci5EYXRhVmlldztcbiAgdmFyIGFycmF5Rm9yRWFjaCA9IGNyZWF0ZUFycmF5TWV0aG9kKDApO1xuICB2YXIgYXJyYXlGaWx0ZXIgPSBjcmVhdGVBcnJheU1ldGhvZCgyKTtcbiAgdmFyIGFycmF5U29tZSA9IGNyZWF0ZUFycmF5TWV0aG9kKDMpO1xuICB2YXIgYXJyYXlFdmVyeSA9IGNyZWF0ZUFycmF5TWV0aG9kKDQpO1xuICB2YXIgYXJyYXlGaW5kID0gY3JlYXRlQXJyYXlNZXRob2QoNSk7XG4gIHZhciBhcnJheUZpbmRJbmRleCA9IGNyZWF0ZUFycmF5TWV0aG9kKDYpO1xuICB2YXIgYXJyYXlJbmNsdWRlcyA9IGNyZWF0ZUFycmF5SW5jbHVkZXModHJ1ZSk7XG4gIHZhciBhcnJheUluZGV4T2YgPSBjcmVhdGVBcnJheUluY2x1ZGVzKGZhbHNlKTtcbiAgdmFyIGFycmF5VmFsdWVzID0gQXJyYXlJdGVyYXRvcnMudmFsdWVzO1xuICB2YXIgYXJyYXlLZXlzID0gQXJyYXlJdGVyYXRvcnMua2V5cztcbiAgdmFyIGFycmF5RW50cmllcyA9IEFycmF5SXRlcmF0b3JzLmVudHJpZXM7XG4gIHZhciBhcnJheUxhc3RJbmRleE9mID0gQXJyYXlQcm90by5sYXN0SW5kZXhPZjtcbiAgdmFyIGFycmF5UmVkdWNlID0gQXJyYXlQcm90by5yZWR1Y2U7XG4gIHZhciBhcnJheVJlZHVjZVJpZ2h0ID0gQXJyYXlQcm90by5yZWR1Y2VSaWdodDtcbiAgdmFyIGFycmF5Sm9pbiA9IEFycmF5UHJvdG8uam9pbjtcbiAgdmFyIGFycmF5U29ydCA9IEFycmF5UHJvdG8uc29ydDtcbiAgdmFyIGFycmF5U2xpY2UgPSBBcnJheVByb3RvLnNsaWNlO1xuICB2YXIgYXJyYXlUb1N0cmluZyA9IEFycmF5UHJvdG8udG9TdHJpbmc7XG4gIHZhciBhcnJheVRvTG9jYWxlU3RyaW5nID0gQXJyYXlQcm90by50b0xvY2FsZVN0cmluZztcbiAgdmFyIElURVJBVE9SID0gd2tzKCdpdGVyYXRvcicpO1xuICB2YXIgVEFHID0gd2tzKCd0b1N0cmluZ1RhZycpO1xuICB2YXIgVFlQRURfQ09OU1RSVUNUT1IgPSB1aWQoJ3R5cGVkX2NvbnN0cnVjdG9yJyk7XG4gIHZhciBERUZfQ09OU1RSVUNUT1IgPSB1aWQoJ2RlZl9jb25zdHJ1Y3RvcicpO1xuICB2YXIgQUxMX0NPTlNUUlVDVE9SUyA9ICR0eXBlZC5DT05TVFI7XG4gIHZhciBUWVBFRF9BUlJBWSA9ICR0eXBlZC5UWVBFRDtcbiAgdmFyIFZJRVcgPSAkdHlwZWQuVklFVztcbiAgdmFyIFdST05HX0xFTkdUSCA9ICdXcm9uZyBsZW5ndGghJztcblxuICB2YXIgJG1hcCA9IGNyZWF0ZUFycmF5TWV0aG9kKDEsIGZ1bmN0aW9uIChPLCBsZW5ndGgpIHtcbiAgICByZXR1cm4gYWxsb2NhdGUoc3BlY2llc0NvbnN0cnVjdG9yKE8sIE9bREVGX0NPTlNUUlVDVE9SXSksIGxlbmd0aCk7XG4gIH0pO1xuXG4gIHZhciBMSVRUTEVfRU5ESUFOID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICAgIHJldHVybiBuZXcgVWludDhBcnJheShuZXcgVWludDE2QXJyYXkoWzFdKS5idWZmZXIpWzBdID09PSAxO1xuICB9KTtcblxuICB2YXIgRk9SQ0VEX1NFVCA9ICEhVWludDhBcnJheSAmJiAhIVVpbnQ4QXJyYXlbUFJPVE9UWVBFXS5zZXQgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIG5ldyBVaW50OEFycmF5KDEpLnNldCh7fSk7XG4gIH0pO1xuXG4gIHZhciB0b09mZnNldCA9IGZ1bmN0aW9uIChpdCwgQllURVMpIHtcbiAgICB2YXIgb2Zmc2V0ID0gdG9JbnRlZ2VyKGl0KTtcbiAgICBpZiAob2Zmc2V0IDwgMCB8fCBvZmZzZXQgJSBCWVRFUykgdGhyb3cgUmFuZ2VFcnJvcignV3Jvbmcgb2Zmc2V0IScpO1xuICAgIHJldHVybiBvZmZzZXQ7XG4gIH07XG5cbiAgdmFyIHZhbGlkYXRlID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgaWYgKGlzT2JqZWN0KGl0KSAmJiBUWVBFRF9BUlJBWSBpbiBpdCkgcmV0dXJuIGl0O1xuICAgIHRocm93IFR5cGVFcnJvcihpdCArICcgaXMgbm90IGEgdHlwZWQgYXJyYXkhJyk7XG4gIH07XG5cbiAgdmFyIGFsbG9jYXRlID0gZnVuY3Rpb24gKEMsIGxlbmd0aCkge1xuICAgIGlmICghKGlzT2JqZWN0KEMpICYmIFRZUEVEX0NPTlNUUlVDVE9SIGluIEMpKSB7XG4gICAgICB0aHJvdyBUeXBlRXJyb3IoJ0l0IGlzIG5vdCBhIHR5cGVkIGFycmF5IGNvbnN0cnVjdG9yIScpO1xuICAgIH0gcmV0dXJuIG5ldyBDKGxlbmd0aCk7XG4gIH07XG5cbiAgdmFyIHNwZWNpZXNGcm9tTGlzdCA9IGZ1bmN0aW9uIChPLCBsaXN0KSB7XG4gICAgcmV0dXJuIGZyb21MaXN0KHNwZWNpZXNDb25zdHJ1Y3RvcihPLCBPW0RFRl9DT05TVFJVQ1RPUl0pLCBsaXN0KTtcbiAgfTtcblxuICB2YXIgZnJvbUxpc3QgPSBmdW5jdGlvbiAoQywgbGlzdCkge1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGxlbmd0aCA9IGxpc3QubGVuZ3RoO1xuICAgIHZhciByZXN1bHQgPSBhbGxvY2F0ZShDLCBsZW5ndGgpO1xuICAgIHdoaWxlIChsZW5ndGggPiBpbmRleCkgcmVzdWx0W2luZGV4XSA9IGxpc3RbaW5kZXgrK107XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICB2YXIgYWRkR2V0dGVyID0gZnVuY3Rpb24gKGl0LCBrZXksIGludGVybmFsKSB7XG4gICAgZFAoaXQsIGtleSwgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMuX2RbaW50ZXJuYWxdOyB9IH0pO1xuICB9O1xuXG4gIHZhciAkZnJvbSA9IGZ1bmN0aW9uIGZyb20oc291cmNlIC8qICwgbWFwZm4sIHRoaXNBcmcgKi8pIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHNvdXJjZSk7XG4gICAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBtYXBmbiA9IGFMZW4gPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkO1xuICAgIHZhciBtYXBwaW5nID0gbWFwZm4gIT09IHVuZGVmaW5lZDtcbiAgICB2YXIgaXRlckZuID0gZ2V0SXRlckZuKE8pO1xuICAgIHZhciBpLCBsZW5ndGgsIHZhbHVlcywgcmVzdWx0LCBzdGVwLCBpdGVyYXRvcjtcbiAgICBpZiAoaXRlckZuICE9IHVuZGVmaW5lZCAmJiAhaXNBcnJheUl0ZXIoaXRlckZuKSkge1xuICAgICAgZm9yIChpdGVyYXRvciA9IGl0ZXJGbi5jYWxsKE8pLCB2YWx1ZXMgPSBbXSwgaSA9IDA7ICEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZTsgaSsrKSB7XG4gICAgICAgIHZhbHVlcy5wdXNoKHN0ZXAudmFsdWUpO1xuICAgICAgfSBPID0gdmFsdWVzO1xuICAgIH1cbiAgICBpZiAobWFwcGluZyAmJiBhTGVuID4gMikgbWFwZm4gPSBjdHgobWFwZm4sIGFyZ3VtZW50c1syXSwgMik7XG4gICAgZm9yIChpID0gMCwgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpLCByZXN1bHQgPSBhbGxvY2F0ZSh0aGlzLCBsZW5ndGgpOyBsZW5ndGggPiBpOyBpKyspIHtcbiAgICAgIHJlc3VsdFtpXSA9IG1hcHBpbmcgPyBtYXBmbihPW2ldLCBpKSA6IE9baV07XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgdmFyICRvZiA9IGZ1bmN0aW9uIG9mKC8qIC4uLml0ZW1zICovKSB7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgcmVzdWx0ID0gYWxsb2NhdGUodGhpcywgbGVuZ3RoKTtcbiAgICB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIHJlc3VsdFtpbmRleF0gPSBhcmd1bWVudHNbaW5kZXgrK107XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvLyBpT1MgU2FmYXJpIDYueCBmYWlscyBoZXJlXG4gIHZhciBUT19MT0NBTEVfQlVHID0gISFVaW50OEFycmF5ICYmIGZhaWxzKGZ1bmN0aW9uICgpIHsgYXJyYXlUb0xvY2FsZVN0cmluZy5jYWxsKG5ldyBVaW50OEFycmF5KDEpKTsgfSk7XG5cbiAgdmFyICR0b0xvY2FsZVN0cmluZyA9IGZ1bmN0aW9uIHRvTG9jYWxlU3RyaW5nKCkge1xuICAgIHJldHVybiBhcnJheVRvTG9jYWxlU3RyaW5nLmFwcGx5KFRPX0xPQ0FMRV9CVUcgPyBhcnJheVNsaWNlLmNhbGwodmFsaWRhdGUodGhpcykpIDogdmFsaWRhdGUodGhpcyksIGFyZ3VtZW50cyk7XG4gIH07XG5cbiAgdmFyIHByb3RvID0ge1xuICAgIGNvcHlXaXRoaW46IGZ1bmN0aW9uIGNvcHlXaXRoaW4odGFyZ2V0LCBzdGFydCAvKiAsIGVuZCAqLykge1xuICAgICAgcmV0dXJuIGFycmF5Q29weVdpdGhpbi5jYWxsKHZhbGlkYXRlKHRoaXMpLCB0YXJnZXQsIHN0YXJ0LCBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBldmVyeTogZnVuY3Rpb24gZXZlcnkoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICAgIHJldHVybiBhcnJheUV2ZXJ5KHZhbGlkYXRlKHRoaXMpLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBmaWxsOiBmdW5jdGlvbiBmaWxsKHZhbHVlIC8qICwgc3RhcnQsIGVuZCAqLykgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgICByZXR1cm4gYXJyYXlGaWxsLmFwcGx5KHZhbGlkYXRlKHRoaXMpLCBhcmd1bWVudHMpO1xuICAgIH0sXG4gICAgZmlsdGVyOiBmdW5jdGlvbiBmaWx0ZXIoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICAgIHJldHVybiBzcGVjaWVzRnJvbUxpc3QodGhpcywgYXJyYXlGaWx0ZXIodmFsaWRhdGUodGhpcyksIGNhbGxiYWNrZm4sXG4gICAgICAgIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKSk7XG4gICAgfSxcbiAgICBmaW5kOiBmdW5jdGlvbiBmaW5kKHByZWRpY2F0ZSAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICAgIHJldHVybiBhcnJheUZpbmQodmFsaWRhdGUodGhpcyksIHByZWRpY2F0ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgZmluZEluZGV4OiBmdW5jdGlvbiBmaW5kSW5kZXgocHJlZGljYXRlIC8qICwgdGhpc0FyZyAqLykge1xuICAgICAgcmV0dXJuIGFycmF5RmluZEluZGV4KHZhbGlkYXRlKHRoaXMpLCBwcmVkaWNhdGUsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgIGZvckVhY2g6IGZ1bmN0aW9uIGZvckVhY2goY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICAgIGFycmF5Rm9yRWFjaCh2YWxpZGF0ZSh0aGlzKSwgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgaW5kZXhPZjogZnVuY3Rpb24gaW5kZXhPZihzZWFyY2hFbGVtZW50IC8qICwgZnJvbUluZGV4ICovKSB7XG4gICAgICByZXR1cm4gYXJyYXlJbmRleE9mKHZhbGlkYXRlKHRoaXMpLCBzZWFyY2hFbGVtZW50LCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBpbmNsdWRlczogZnVuY3Rpb24gaW5jbHVkZXMoc2VhcmNoRWxlbWVudCAvKiAsIGZyb21JbmRleCAqLykge1xuICAgICAgcmV0dXJuIGFycmF5SW5jbHVkZXModmFsaWRhdGUodGhpcyksIHNlYXJjaEVsZW1lbnQsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgIGpvaW46IGZ1bmN0aW9uIGpvaW4oc2VwYXJhdG9yKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICAgIHJldHVybiBhcnJheUpvaW4uYXBwbHkodmFsaWRhdGUodGhpcyksIGFyZ3VtZW50cyk7XG4gICAgfSxcbiAgICBsYXN0SW5kZXhPZjogZnVuY3Rpb24gbGFzdEluZGV4T2Yoc2VhcmNoRWxlbWVudCAvKiAsIGZyb21JbmRleCAqLykgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgICByZXR1cm4gYXJyYXlMYXN0SW5kZXhPZi5hcHBseSh2YWxpZGF0ZSh0aGlzKSwgYXJndW1lbnRzKTtcbiAgICB9LFxuICAgIG1hcDogZnVuY3Rpb24gbWFwKG1hcGZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgICAgcmV0dXJuICRtYXAodmFsaWRhdGUodGhpcyksIG1hcGZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICByZWR1Y2U6IGZ1bmN0aW9uIHJlZHVjZShjYWxsYmFja2ZuIC8qICwgaW5pdGlhbFZhbHVlICovKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICAgIHJldHVybiBhcnJheVJlZHVjZS5hcHBseSh2YWxpZGF0ZSh0aGlzKSwgYXJndW1lbnRzKTtcbiAgICB9LFxuICAgIHJlZHVjZVJpZ2h0OiBmdW5jdGlvbiByZWR1Y2VSaWdodChjYWxsYmFja2ZuIC8qICwgaW5pdGlhbFZhbHVlICovKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICAgIHJldHVybiBhcnJheVJlZHVjZVJpZ2h0LmFwcGx5KHZhbGlkYXRlKHRoaXMpLCBhcmd1bWVudHMpO1xuICAgIH0sXG4gICAgcmV2ZXJzZTogZnVuY3Rpb24gcmV2ZXJzZSgpIHtcbiAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgIHZhciBsZW5ndGggPSB2YWxpZGF0ZSh0aGF0KS5sZW5ndGg7XG4gICAgICB2YXIgbWlkZGxlID0gTWF0aC5mbG9vcihsZW5ndGggLyAyKTtcbiAgICAgIHZhciBpbmRleCA9IDA7XG4gICAgICB2YXIgdmFsdWU7XG4gICAgICB3aGlsZSAoaW5kZXggPCBtaWRkbGUpIHtcbiAgICAgICAgdmFsdWUgPSB0aGF0W2luZGV4XTtcbiAgICAgICAgdGhhdFtpbmRleCsrXSA9IHRoYXRbLS1sZW5ndGhdO1xuICAgICAgICB0aGF0W2xlbmd0aF0gPSB2YWx1ZTtcbiAgICAgIH0gcmV0dXJuIHRoYXQ7XG4gICAgfSxcbiAgICBzb21lOiBmdW5jdGlvbiBzb21lKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgICByZXR1cm4gYXJyYXlTb21lKHZhbGlkYXRlKHRoaXMpLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBzb3J0OiBmdW5jdGlvbiBzb3J0KGNvbXBhcmVmbikge1xuICAgICAgcmV0dXJuIGFycmF5U29ydC5jYWxsKHZhbGlkYXRlKHRoaXMpLCBjb21wYXJlZm4pO1xuICAgIH0sXG4gICAgc3ViYXJyYXk6IGZ1bmN0aW9uIHN1YmFycmF5KGJlZ2luLCBlbmQpIHtcbiAgICAgIHZhciBPID0gdmFsaWRhdGUodGhpcyk7XG4gICAgICB2YXIgbGVuZ3RoID0gTy5sZW5ndGg7XG4gICAgICB2YXIgJGJlZ2luID0gdG9BYnNvbHV0ZUluZGV4KGJlZ2luLCBsZW5ndGgpO1xuICAgICAgcmV0dXJuIG5ldyAoc3BlY2llc0NvbnN0cnVjdG9yKE8sIE9bREVGX0NPTlNUUlVDVE9SXSkpKFxuICAgICAgICBPLmJ1ZmZlcixcbiAgICAgICAgTy5ieXRlT2Zmc2V0ICsgJGJlZ2luICogTy5CWVRFU19QRVJfRUxFTUVOVCxcbiAgICAgICAgdG9MZW5ndGgoKGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuZ3RoIDogdG9BYnNvbHV0ZUluZGV4KGVuZCwgbGVuZ3RoKSkgLSAkYmVnaW4pXG4gICAgICApO1xuICAgIH1cbiAgfTtcblxuICB2YXIgJHNsaWNlID0gZnVuY3Rpb24gc2xpY2Uoc3RhcnQsIGVuZCkge1xuICAgIHJldHVybiBzcGVjaWVzRnJvbUxpc3QodGhpcywgYXJyYXlTbGljZS5jYWxsKHZhbGlkYXRlKHRoaXMpLCBzdGFydCwgZW5kKSk7XG4gIH07XG5cbiAgdmFyICRzZXQgPSBmdW5jdGlvbiBzZXQoYXJyYXlMaWtlIC8qICwgb2Zmc2V0ICovKSB7XG4gICAgdmFsaWRhdGUodGhpcyk7XG4gICAgdmFyIG9mZnNldCA9IHRvT2Zmc2V0KGFyZ3VtZW50c1sxXSwgMSk7XG4gICAgdmFyIGxlbmd0aCA9IHRoaXMubGVuZ3RoO1xuICAgIHZhciBzcmMgPSB0b09iamVjdChhcnJheUxpa2UpO1xuICAgIHZhciBsZW4gPSB0b0xlbmd0aChzcmMubGVuZ3RoKTtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIGlmIChsZW4gKyBvZmZzZXQgPiBsZW5ndGgpIHRocm93IFJhbmdlRXJyb3IoV1JPTkdfTEVOR1RIKTtcbiAgICB3aGlsZSAoaW5kZXggPCBsZW4pIHRoaXNbb2Zmc2V0ICsgaW5kZXhdID0gc3JjW2luZGV4KytdO1xuICB9O1xuXG4gIHZhciAkaXRlcmF0b3JzID0ge1xuICAgIGVudHJpZXM6IGZ1bmN0aW9uIGVudHJpZXMoKSB7XG4gICAgICByZXR1cm4gYXJyYXlFbnRyaWVzLmNhbGwodmFsaWRhdGUodGhpcykpO1xuICAgIH0sXG4gICAga2V5czogZnVuY3Rpb24ga2V5cygpIHtcbiAgICAgIHJldHVybiBhcnJheUtleXMuY2FsbCh2YWxpZGF0ZSh0aGlzKSk7XG4gICAgfSxcbiAgICB2YWx1ZXM6IGZ1bmN0aW9uIHZhbHVlcygpIHtcbiAgICAgIHJldHVybiBhcnJheVZhbHVlcy5jYWxsKHZhbGlkYXRlKHRoaXMpKTtcbiAgICB9XG4gIH07XG5cbiAgdmFyIGlzVEFJbmRleCA9IGZ1bmN0aW9uICh0YXJnZXQsIGtleSkge1xuICAgIHJldHVybiBpc09iamVjdCh0YXJnZXQpXG4gICAgICAmJiB0YXJnZXRbVFlQRURfQVJSQVldXG4gICAgICAmJiB0eXBlb2Yga2V5ICE9ICdzeW1ib2wnXG4gICAgICAmJiBrZXkgaW4gdGFyZ2V0XG4gICAgICAmJiBTdHJpbmcoK2tleSkgPT0gU3RyaW5nKGtleSk7XG4gIH07XG4gIHZhciAkZ2V0RGVzYyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkge1xuICAgIHJldHVybiBpc1RBSW5kZXgodGFyZ2V0LCBrZXkgPSB0b1ByaW1pdGl2ZShrZXksIHRydWUpKVxuICAgICAgPyBwcm9wZXJ0eURlc2MoMiwgdGFyZ2V0W2tleV0pXG4gICAgICA6IGdPUEQodGFyZ2V0LCBrZXkpO1xuICB9O1xuICB2YXIgJHNldERlc2MgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgZGVzYykge1xuICAgIGlmIChpc1RBSW5kZXgodGFyZ2V0LCBrZXkgPSB0b1ByaW1pdGl2ZShrZXksIHRydWUpKVxuICAgICAgJiYgaXNPYmplY3QoZGVzYylcbiAgICAgICYmIGhhcyhkZXNjLCAndmFsdWUnKVxuICAgICAgJiYgIWhhcyhkZXNjLCAnZ2V0JylcbiAgICAgICYmICFoYXMoZGVzYywgJ3NldCcpXG4gICAgICAvLyBUT0RPOiBhZGQgdmFsaWRhdGlvbiBkZXNjcmlwdG9yIHcvbyBjYWxsaW5nIGFjY2Vzc29yc1xuICAgICAgJiYgIWRlc2MuY29uZmlndXJhYmxlXG4gICAgICAmJiAoIWhhcyhkZXNjLCAnd3JpdGFibGUnKSB8fCBkZXNjLndyaXRhYmxlKVxuICAgICAgJiYgKCFoYXMoZGVzYywgJ2VudW1lcmFibGUnKSB8fCBkZXNjLmVudW1lcmFibGUpXG4gICAgKSB7XG4gICAgICB0YXJnZXRba2V5XSA9IGRlc2MudmFsdWU7XG4gICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH0gcmV0dXJuIGRQKHRhcmdldCwga2V5LCBkZXNjKTtcbiAgfTtcblxuICBpZiAoIUFMTF9DT05TVFJVQ1RPUlMpIHtcbiAgICAkR09QRC5mID0gJGdldERlc2M7XG4gICAgJERQLmYgPSAkc2V0RGVzYztcbiAgfVxuXG4gICRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIUFMTF9DT05TVFJVQ1RPUlMsICdPYmplY3QnLCB7XG4gICAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiAkZ2V0RGVzYyxcbiAgICBkZWZpbmVQcm9wZXJ0eTogJHNldERlc2NcbiAgfSk7XG5cbiAgaWYgKGZhaWxzKGZ1bmN0aW9uICgpIHsgYXJyYXlUb1N0cmluZy5jYWxsKHt9KTsgfSkpIHtcbiAgICBhcnJheVRvU3RyaW5nID0gYXJyYXlUb0xvY2FsZVN0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgICAgcmV0dXJuIGFycmF5Sm9pbi5jYWxsKHRoaXMpO1xuICAgIH07XG4gIH1cblxuICB2YXIgJFR5cGVkQXJyYXlQcm90b3R5cGUkID0gcmVkZWZpbmVBbGwoe30sIHByb3RvKTtcbiAgcmVkZWZpbmVBbGwoJFR5cGVkQXJyYXlQcm90b3R5cGUkLCAkaXRlcmF0b3JzKTtcbiAgaGlkZSgkVHlwZWRBcnJheVByb3RvdHlwZSQsIElURVJBVE9SLCAkaXRlcmF0b3JzLnZhbHVlcyk7XG4gIHJlZGVmaW5lQWxsKCRUeXBlZEFycmF5UHJvdG90eXBlJCwge1xuICAgIHNsaWNlOiAkc2xpY2UsXG4gICAgc2V0OiAkc2V0LFxuICAgIGNvbnN0cnVjdG9yOiBmdW5jdGlvbiAoKSB7IC8qIG5vb3AgKi8gfSxcbiAgICB0b1N0cmluZzogYXJyYXlUb1N0cmluZyxcbiAgICB0b0xvY2FsZVN0cmluZzogJHRvTG9jYWxlU3RyaW5nXG4gIH0pO1xuICBhZGRHZXR0ZXIoJFR5cGVkQXJyYXlQcm90b3R5cGUkLCAnYnVmZmVyJywgJ2InKTtcbiAgYWRkR2V0dGVyKCRUeXBlZEFycmF5UHJvdG90eXBlJCwgJ2J5dGVPZmZzZXQnLCAnbycpO1xuICBhZGRHZXR0ZXIoJFR5cGVkQXJyYXlQcm90b3R5cGUkLCAnYnl0ZUxlbmd0aCcsICdsJyk7XG4gIGFkZEdldHRlcigkVHlwZWRBcnJheVByb3RvdHlwZSQsICdsZW5ndGgnLCAnZScpO1xuICBkUCgkVHlwZWRBcnJheVByb3RvdHlwZSQsIFRBRywge1xuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpc1tUWVBFRF9BUlJBWV07IH1cbiAgfSk7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1zdGF0ZW1lbnRzXG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEtFWSwgQllURVMsIHdyYXBwZXIsIENMQU1QRUQpIHtcbiAgICBDTEFNUEVEID0gISFDTEFNUEVEO1xuICAgIHZhciBOQU1FID0gS0VZICsgKENMQU1QRUQgPyAnQ2xhbXBlZCcgOiAnJykgKyAnQXJyYXknO1xuICAgIHZhciBHRVRURVIgPSAnZ2V0JyArIEtFWTtcbiAgICB2YXIgU0VUVEVSID0gJ3NldCcgKyBLRVk7XG4gICAgdmFyIFR5cGVkQXJyYXkgPSBnbG9iYWxbTkFNRV07XG4gICAgdmFyIEJhc2UgPSBUeXBlZEFycmF5IHx8IHt9O1xuICAgIHZhciBUQUMgPSBUeXBlZEFycmF5ICYmIGdldFByb3RvdHlwZU9mKFR5cGVkQXJyYXkpO1xuICAgIHZhciBGT1JDRUQgPSAhVHlwZWRBcnJheSB8fCAhJHR5cGVkLkFCVjtcbiAgICB2YXIgTyA9IHt9O1xuICAgIHZhciBUeXBlZEFycmF5UHJvdG90eXBlID0gVHlwZWRBcnJheSAmJiBUeXBlZEFycmF5W1BST1RPVFlQRV07XG4gICAgdmFyIGdldHRlciA9IGZ1bmN0aW9uICh0aGF0LCBpbmRleCkge1xuICAgICAgdmFyIGRhdGEgPSB0aGF0Ll9kO1xuICAgICAgcmV0dXJuIGRhdGEudltHRVRURVJdKGluZGV4ICogQllURVMgKyBkYXRhLm8sIExJVFRMRV9FTkRJQU4pO1xuICAgIH07XG4gICAgdmFyIHNldHRlciA9IGZ1bmN0aW9uICh0aGF0LCBpbmRleCwgdmFsdWUpIHtcbiAgICAgIHZhciBkYXRhID0gdGhhdC5fZDtcbiAgICAgIGlmIChDTEFNUEVEKSB2YWx1ZSA9ICh2YWx1ZSA9IE1hdGgucm91bmQodmFsdWUpKSA8IDAgPyAwIDogdmFsdWUgPiAweGZmID8gMHhmZiA6IHZhbHVlICYgMHhmZjtcbiAgICAgIGRhdGEudltTRVRURVJdKGluZGV4ICogQllURVMgKyBkYXRhLm8sIHZhbHVlLCBMSVRUTEVfRU5ESUFOKTtcbiAgICB9O1xuICAgIHZhciBhZGRFbGVtZW50ID0gZnVuY3Rpb24gKHRoYXQsIGluZGV4KSB7XG4gICAgICBkUCh0aGF0LCBpbmRleCwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gZ2V0dGVyKHRoaXMsIGluZGV4KTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICByZXR1cm4gc2V0dGVyKHRoaXMsIGluZGV4LCB2YWx1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IHRydWVcbiAgICAgIH0pO1xuICAgIH07XG4gICAgaWYgKEZPUkNFRCkge1xuICAgICAgVHlwZWRBcnJheSA9IHdyYXBwZXIoZnVuY3Rpb24gKHRoYXQsIGRhdGEsICRvZmZzZXQsICRsZW5ndGgpIHtcbiAgICAgICAgYW5JbnN0YW5jZSh0aGF0LCBUeXBlZEFycmF5LCBOQU1FLCAnX2QnKTtcbiAgICAgICAgdmFyIGluZGV4ID0gMDtcbiAgICAgICAgdmFyIG9mZnNldCA9IDA7XG4gICAgICAgIHZhciBidWZmZXIsIGJ5dGVMZW5ndGgsIGxlbmd0aCwga2xhc3M7XG4gICAgICAgIGlmICghaXNPYmplY3QoZGF0YSkpIHtcbiAgICAgICAgICBsZW5ndGggPSB0b0luZGV4KGRhdGEpO1xuICAgICAgICAgIGJ5dGVMZW5ndGggPSBsZW5ndGggKiBCWVRFUztcbiAgICAgICAgICBidWZmZXIgPSBuZXcgJEFycmF5QnVmZmVyKGJ5dGVMZW5ndGgpO1xuICAgICAgICB9IGVsc2UgaWYgKGRhdGEgaW5zdGFuY2VvZiAkQXJyYXlCdWZmZXIgfHwgKGtsYXNzID0gY2xhc3NvZihkYXRhKSkgPT0gQVJSQVlfQlVGRkVSIHx8IGtsYXNzID09IFNIQVJFRF9CVUZGRVIpIHtcbiAgICAgICAgICBidWZmZXIgPSBkYXRhO1xuICAgICAgICAgIG9mZnNldCA9IHRvT2Zmc2V0KCRvZmZzZXQsIEJZVEVTKTtcbiAgICAgICAgICB2YXIgJGxlbiA9IGRhdGEuYnl0ZUxlbmd0aDtcbiAgICAgICAgICBpZiAoJGxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBpZiAoJGxlbiAlIEJZVEVTKSB0aHJvdyBSYW5nZUVycm9yKFdST05HX0xFTkdUSCk7XG4gICAgICAgICAgICBieXRlTGVuZ3RoID0gJGxlbiAtIG9mZnNldDtcbiAgICAgICAgICAgIGlmIChieXRlTGVuZ3RoIDwgMCkgdGhyb3cgUmFuZ2VFcnJvcihXUk9OR19MRU5HVEgpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBieXRlTGVuZ3RoID0gdG9MZW5ndGgoJGxlbmd0aCkgKiBCWVRFUztcbiAgICAgICAgICAgIGlmIChieXRlTGVuZ3RoICsgb2Zmc2V0ID4gJGxlbikgdGhyb3cgUmFuZ2VFcnJvcihXUk9OR19MRU5HVEgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBsZW5ndGggPSBieXRlTGVuZ3RoIC8gQllURVM7XG4gICAgICAgIH0gZWxzZSBpZiAoVFlQRURfQVJSQVkgaW4gZGF0YSkge1xuICAgICAgICAgIHJldHVybiBmcm9tTGlzdChUeXBlZEFycmF5LCBkYXRhKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gJGZyb20uY2FsbChUeXBlZEFycmF5LCBkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBoaWRlKHRoYXQsICdfZCcsIHtcbiAgICAgICAgICBiOiBidWZmZXIsXG4gICAgICAgICAgbzogb2Zmc2V0LFxuICAgICAgICAgIGw6IGJ5dGVMZW5ndGgsXG4gICAgICAgICAgZTogbGVuZ3RoLFxuICAgICAgICAgIHY6IG5ldyAkRGF0YVZpZXcoYnVmZmVyKVxuICAgICAgICB9KTtcbiAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSBhZGRFbGVtZW50KHRoYXQsIGluZGV4KyspO1xuICAgICAgfSk7XG4gICAgICBUeXBlZEFycmF5UHJvdG90eXBlID0gVHlwZWRBcnJheVtQUk9UT1RZUEVdID0gY3JlYXRlKCRUeXBlZEFycmF5UHJvdG90eXBlJCk7XG4gICAgICBoaWRlKFR5cGVkQXJyYXlQcm90b3R5cGUsICdjb25zdHJ1Y3RvcicsIFR5cGVkQXJyYXkpO1xuICAgIH0gZWxzZSBpZiAoIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAgIFR5cGVkQXJyYXkoMSk7XG4gICAgfSkgfHwgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAgIG5ldyBUeXBlZEFycmF5KC0xKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICB9KSB8fCAhJGl0ZXJEZXRlY3QoZnVuY3Rpb24gKGl0ZXIpIHtcbiAgICAgIG5ldyBUeXBlZEFycmF5KCk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgICBuZXcgVHlwZWRBcnJheShudWxsKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICAgIG5ldyBUeXBlZEFycmF5KDEuNSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgICBuZXcgVHlwZWRBcnJheShpdGVyKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICB9LCB0cnVlKSkge1xuICAgICAgVHlwZWRBcnJheSA9IHdyYXBwZXIoZnVuY3Rpb24gKHRoYXQsIGRhdGEsICRvZmZzZXQsICRsZW5ndGgpIHtcbiAgICAgICAgYW5JbnN0YW5jZSh0aGF0LCBUeXBlZEFycmF5LCBOQU1FKTtcbiAgICAgICAgdmFyIGtsYXNzO1xuICAgICAgICAvLyBgd3NgIG1vZHVsZSBidWcsIHRlbXBvcmFyaWx5IHJlbW92ZSB2YWxpZGF0aW9uIGxlbmd0aCBmb3IgVWludDhBcnJheVxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vd2Vic29ja2V0cy93cy9wdWxsLzY0NVxuICAgICAgICBpZiAoIWlzT2JqZWN0KGRhdGEpKSByZXR1cm4gbmV3IEJhc2UodG9JbmRleChkYXRhKSk7XG4gICAgICAgIGlmIChkYXRhIGluc3RhbmNlb2YgJEFycmF5QnVmZmVyIHx8IChrbGFzcyA9IGNsYXNzb2YoZGF0YSkpID09IEFSUkFZX0JVRkZFUiB8fCBrbGFzcyA9PSBTSEFSRURfQlVGRkVSKSB7XG4gICAgICAgICAgcmV0dXJuICRsZW5ndGggIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyBuZXcgQmFzZShkYXRhLCB0b09mZnNldCgkb2Zmc2V0LCBCWVRFUyksICRsZW5ndGgpXG4gICAgICAgICAgICA6ICRvZmZzZXQgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICA/IG5ldyBCYXNlKGRhdGEsIHRvT2Zmc2V0KCRvZmZzZXQsIEJZVEVTKSlcbiAgICAgICAgICAgICAgOiBuZXcgQmFzZShkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoVFlQRURfQVJSQVkgaW4gZGF0YSkgcmV0dXJuIGZyb21MaXN0KFR5cGVkQXJyYXksIGRhdGEpO1xuICAgICAgICByZXR1cm4gJGZyb20uY2FsbChUeXBlZEFycmF5LCBkYXRhKTtcbiAgICAgIH0pO1xuICAgICAgYXJyYXlGb3JFYWNoKFRBQyAhPT0gRnVuY3Rpb24ucHJvdG90eXBlID8gZ09QTihCYXNlKS5jb25jYXQoZ09QTihUQUMpKSA6IGdPUE4oQmFzZSksIGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgaWYgKCEoa2V5IGluIFR5cGVkQXJyYXkpKSBoaWRlKFR5cGVkQXJyYXksIGtleSwgQmFzZVtrZXldKTtcbiAgICAgIH0pO1xuICAgICAgVHlwZWRBcnJheVtQUk9UT1RZUEVdID0gVHlwZWRBcnJheVByb3RvdHlwZTtcbiAgICAgIGlmICghTElCUkFSWSkgVHlwZWRBcnJheVByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFR5cGVkQXJyYXk7XG4gICAgfVxuICAgIHZhciAkbmF0aXZlSXRlcmF0b3IgPSBUeXBlZEFycmF5UHJvdG90eXBlW0lURVJBVE9SXTtcbiAgICB2YXIgQ09SUkVDVF9JVEVSX05BTUUgPSAhISRuYXRpdmVJdGVyYXRvclxuICAgICAgJiYgKCRuYXRpdmVJdGVyYXRvci5uYW1lID09ICd2YWx1ZXMnIHx8ICRuYXRpdmVJdGVyYXRvci5uYW1lID09IHVuZGVmaW5lZCk7XG4gICAgdmFyICRpdGVyYXRvciA9ICRpdGVyYXRvcnMudmFsdWVzO1xuICAgIGhpZGUoVHlwZWRBcnJheSwgVFlQRURfQ09OU1RSVUNUT1IsIHRydWUpO1xuICAgIGhpZGUoVHlwZWRBcnJheVByb3RvdHlwZSwgVFlQRURfQVJSQVksIE5BTUUpO1xuICAgIGhpZGUoVHlwZWRBcnJheVByb3RvdHlwZSwgVklFVywgdHJ1ZSk7XG4gICAgaGlkZShUeXBlZEFycmF5UHJvdG90eXBlLCBERUZfQ09OU1RSVUNUT1IsIFR5cGVkQXJyYXkpO1xuXG4gICAgaWYgKENMQU1QRUQgPyBuZXcgVHlwZWRBcnJheSgxKVtUQUddICE9IE5BTUUgOiAhKFRBRyBpbiBUeXBlZEFycmF5UHJvdG90eXBlKSkge1xuICAgICAgZFAoVHlwZWRBcnJheVByb3RvdHlwZSwgVEFHLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gTkFNRTsgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgT1tOQU1FXSA9IFR5cGVkQXJyYXk7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuVyArICRleHBvcnQuRiAqIChUeXBlZEFycmF5ICE9IEJhc2UpLCBPKTtcblxuICAgICRleHBvcnQoJGV4cG9ydC5TLCBOQU1FLCB7XG4gICAgICBCWVRFU19QRVJfRUxFTUVOVDogQllURVNcbiAgICB9KTtcblxuICAgICRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogZmFpbHMoZnVuY3Rpb24gKCkgeyBCYXNlLm9mLmNhbGwoVHlwZWRBcnJheSwgMSk7IH0pLCBOQU1FLCB7XG4gICAgICBmcm9tOiAkZnJvbSxcbiAgICAgIG9mOiAkb2ZcbiAgICB9KTtcblxuICAgIGlmICghKEJZVEVTX1BFUl9FTEVNRU5UIGluIFR5cGVkQXJyYXlQcm90b3R5cGUpKSBoaWRlKFR5cGVkQXJyYXlQcm90b3R5cGUsIEJZVEVTX1BFUl9FTEVNRU5ULCBCWVRFUyk7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuUCwgTkFNRSwgcHJvdG8pO1xuXG4gICAgc2V0U3BlY2llcyhOQU1FKTtcblxuICAgICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogRk9SQ0VEX1NFVCwgTkFNRSwgeyBzZXQ6ICRzZXQgfSk7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFDT1JSRUNUX0lURVJfTkFNRSwgTkFNRSwgJGl0ZXJhdG9ycyk7XG5cbiAgICBpZiAoIUxJQlJBUlkgJiYgVHlwZWRBcnJheVByb3RvdHlwZS50b1N0cmluZyAhPSBhcnJheVRvU3RyaW5nKSBUeXBlZEFycmF5UHJvdG90eXBlLnRvU3RyaW5nID0gYXJyYXlUb1N0cmluZztcblxuICAgICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgICAgbmV3IFR5cGVkQXJyYXkoMSkuc2xpY2UoKTtcbiAgICB9KSwgTkFNRSwgeyBzbGljZTogJHNsaWNlIH0pO1xuXG4gICAgJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIFsxLCAyXS50b0xvY2FsZVN0cmluZygpICE9IG5ldyBUeXBlZEFycmF5KFsxLCAyXSkudG9Mb2NhbGVTdHJpbmcoKTtcbiAgICB9KSB8fCAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgICAgVHlwZWRBcnJheVByb3RvdHlwZS50b0xvY2FsZVN0cmluZy5jYWxsKFsxLCAyXSk7XG4gICAgfSkpLCBOQU1FLCB7IHRvTG9jYWxlU3RyaW5nOiAkdG9Mb2NhbGVTdHJpbmcgfSk7XG5cbiAgICBJdGVyYXRvcnNbTkFNRV0gPSBDT1JSRUNUX0lURVJfTkFNRSA/ICRuYXRpdmVJdGVyYXRvciA6ICRpdGVyYXRvcjtcbiAgICBpZiAoIUxJQlJBUlkgJiYgIUNPUlJFQ1RfSVRFUl9OQU1FKSBoaWRlKFR5cGVkQXJyYXlQcm90b3R5cGUsIElURVJBVE9SLCAkaXRlcmF0b3IpO1xuICB9O1xufSBlbHNlIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///27\n")},function(module,exports,__webpack_require__){eval("var Map = __webpack_require__(117);\nvar $export = __webpack_require__(0);\nvar shared = __webpack_require__(47)('metadata');\nvar store = shared.store || (shared.store = new (__webpack_require__(120))());\n\nvar getOrCreateMetadataMap = function (target, targetKey, create) {\n var targetMetadata = store.get(target);\n if (!targetMetadata) {\n if (!create) return undefined;\n store.set(target, targetMetadata = new Map());\n }\n var keyMetadata = targetMetadata.get(targetKey);\n if (!keyMetadata) {\n if (!create) return undefined;\n targetMetadata.set(targetKey, keyMetadata = new Map());\n } return keyMetadata;\n};\nvar ordinaryHasOwnMetadata = function (MetadataKey, O, P) {\n var metadataMap = getOrCreateMetadataMap(O, P, false);\n return metadataMap === undefined ? false : metadataMap.has(MetadataKey);\n};\nvar ordinaryGetOwnMetadata = function (MetadataKey, O, P) {\n var metadataMap = getOrCreateMetadataMap(O, P, false);\n return metadataMap === undefined ? undefined : metadataMap.get(MetadataKey);\n};\nvar ordinaryDefineOwnMetadata = function (MetadataKey, MetadataValue, O, P) {\n getOrCreateMetadataMap(O, P, true).set(MetadataKey, MetadataValue);\n};\nvar ordinaryOwnMetadataKeys = function (target, targetKey) {\n var metadataMap = getOrCreateMetadataMap(target, targetKey, false);\n var keys = [];\n if (metadataMap) metadataMap.forEach(function (_, key) { keys.push(key); });\n return keys;\n};\nvar toMetaKey = function (it) {\n return it === undefined || typeof it == 'symbol' ? it : String(it);\n};\nvar exp = function (O) {\n $export($export.S, 'Reflect', O);\n};\n\nmodule.exports = {\n store: store,\n map: getOrCreateMetadataMap,\n has: ordinaryHasOwnMetadata,\n get: ordinaryGetOwnMetadata,\n set: ordinaryDefineOwnMetadata,\n keys: ordinaryOwnMetadataKeys,\n key: toMetaKey,\n exp: exp\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWV0YWRhdGEuanM/MzdhNyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxVQUFVLG1CQUFPLENBQUMsR0FBVztBQUM3QixjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxhQUFhLG1CQUFPLENBQUMsRUFBVztBQUNoQyxpREFBaUQsbUJBQU8sQ0FBQyxHQUFnQjs7QUFFekU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMERBQTBELGdCQUFnQixFQUFFO0FBQzVFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMjguanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgTWFwID0gcmVxdWlyZSgnLi9lczYubWFwJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4vX3NoYXJlZCcpKCdtZXRhZGF0YScpO1xudmFyIHN0b3JlID0gc2hhcmVkLnN0b3JlIHx8IChzaGFyZWQuc3RvcmUgPSBuZXcgKHJlcXVpcmUoJy4vZXM2LndlYWstbWFwJykpKCkpO1xuXG52YXIgZ2V0T3JDcmVhdGVNZXRhZGF0YU1hcCA9IGZ1bmN0aW9uICh0YXJnZXQsIHRhcmdldEtleSwgY3JlYXRlKSB7XG4gIHZhciB0YXJnZXRNZXRhZGF0YSA9IHN0b3JlLmdldCh0YXJnZXQpO1xuICBpZiAoIXRhcmdldE1ldGFkYXRhKSB7XG4gICAgaWYgKCFjcmVhdGUpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgc3RvcmUuc2V0KHRhcmdldCwgdGFyZ2V0TWV0YWRhdGEgPSBuZXcgTWFwKCkpO1xuICB9XG4gIHZhciBrZXlNZXRhZGF0YSA9IHRhcmdldE1ldGFkYXRhLmdldCh0YXJnZXRLZXkpO1xuICBpZiAoIWtleU1ldGFkYXRhKSB7XG4gICAgaWYgKCFjcmVhdGUpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgdGFyZ2V0TWV0YWRhdGEuc2V0KHRhcmdldEtleSwga2V5TWV0YWRhdGEgPSBuZXcgTWFwKCkpO1xuICB9IHJldHVybiBrZXlNZXRhZGF0YTtcbn07XG52YXIgb3JkaW5hcnlIYXNPd25NZXRhZGF0YSA9IGZ1bmN0aW9uIChNZXRhZGF0YUtleSwgTywgUCkge1xuICB2YXIgbWV0YWRhdGFNYXAgPSBnZXRPckNyZWF0ZU1ldGFkYXRhTWFwKE8sIFAsIGZhbHNlKTtcbiAgcmV0dXJuIG1ldGFkYXRhTWFwID09PSB1bmRlZmluZWQgPyBmYWxzZSA6IG1ldGFkYXRhTWFwLmhhcyhNZXRhZGF0YUtleSk7XG59O1xudmFyIG9yZGluYXJ5R2V0T3duTWV0YWRhdGEgPSBmdW5jdGlvbiAoTWV0YWRhdGFLZXksIE8sIFApIHtcbiAgdmFyIG1ldGFkYXRhTWFwID0gZ2V0T3JDcmVhdGVNZXRhZGF0YU1hcChPLCBQLCBmYWxzZSk7XG4gIHJldHVybiBtZXRhZGF0YU1hcCA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogbWV0YWRhdGFNYXAuZ2V0KE1ldGFkYXRhS2V5KTtcbn07XG52YXIgb3JkaW5hcnlEZWZpbmVPd25NZXRhZGF0YSA9IGZ1bmN0aW9uIChNZXRhZGF0YUtleSwgTWV0YWRhdGFWYWx1ZSwgTywgUCkge1xuICBnZXRPckNyZWF0ZU1ldGFkYXRhTWFwKE8sIFAsIHRydWUpLnNldChNZXRhZGF0YUtleSwgTWV0YWRhdGFWYWx1ZSk7XG59O1xudmFyIG9yZGluYXJ5T3duTWV0YWRhdGFLZXlzID0gZnVuY3Rpb24gKHRhcmdldCwgdGFyZ2V0S2V5KSB7XG4gIHZhciBtZXRhZGF0YU1hcCA9IGdldE9yQ3JlYXRlTWV0YWRhdGFNYXAodGFyZ2V0LCB0YXJnZXRLZXksIGZhbHNlKTtcbiAgdmFyIGtleXMgPSBbXTtcbiAgaWYgKG1ldGFkYXRhTWFwKSBtZXRhZGF0YU1hcC5mb3JFYWNoKGZ1bmN0aW9uIChfLCBrZXkpIHsga2V5cy5wdXNoKGtleSk7IH0pO1xuICByZXR1cm4ga2V5cztcbn07XG52YXIgdG9NZXRhS2V5ID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiBpdCA9PSAnc3ltYm9sJyA/IGl0IDogU3RyaW5nKGl0KTtcbn07XG52YXIgZXhwID0gZnVuY3Rpb24gKE8pIHtcbiAgJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0JywgTyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc3RvcmU6IHN0b3JlLFxuICBtYXA6IGdldE9yQ3JlYXRlTWV0YWRhdGFNYXAsXG4gIGhhczogb3JkaW5hcnlIYXNPd25NZXRhZGF0YSxcbiAgZ2V0OiBvcmRpbmFyeUdldE93bk1ldGFkYXRhLFxuICBzZXQ6IG9yZGluYXJ5RGVmaW5lT3duTWV0YWRhdGEsXG4gIGtleXM6IG9yZGluYXJ5T3duTWV0YWRhdGFLZXlzLFxuICBrZXk6IHRvTWV0YUtleSxcbiAgZXhwOiBleHBcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///28\n")},function(module,exports){eval("module.exports = false;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbGlicmFyeS5qcz8yZDAwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBIiwiZmlsZSI6IjI5LmpzIiwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBmYWxzZTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///29\n")},function(module,exports,__webpack_require__){eval("var META = __webpack_require__(33)('meta');\nvar isObject = __webpack_require__(4);\nvar has = __webpack_require__(14);\nvar setDesc = __webpack_require__(8).f;\nvar id = 0;\nvar isExtensible = Object.isExtensible || function () {\n return true;\n};\nvar FREEZE = !__webpack_require__(3)(function () {\n return isExtensible(Object.preventExtensions({}));\n});\nvar setMeta = function (it) {\n setDesc(it, META, { value: {\n i: 'O' + ++id, // object ID\n w: {} // weak collections IDs\n } });\n};\nvar fastKey = function (it, create) {\n // return primitive with prefix\n if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return 'F';\n // not necessary to add metadata\n if (!create) return 'E';\n // add missing metadata\n setMeta(it);\n // return object ID\n } return it[META].i;\n};\nvar getWeak = function (it, create) {\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return true;\n // not necessary to add metadata\n if (!create) return false;\n // add missing metadata\n setMeta(it);\n // return hash weak collections IDs\n } return it[META].w;\n};\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);\n return it;\n};\nvar meta = module.exports = {\n KEY: META,\n NEED: false,\n fastKey: fastKey,\n getWeak: getWeak,\n onFreeze: onFreeze\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWV0YS5qcz82N2FiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFdBQVcsbUJBQU8sQ0FBQyxFQUFRO0FBQzNCLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLFVBQVUsbUJBQU8sQ0FBQyxFQUFRO0FBQzFCLGNBQWMsbUJBQU8sQ0FBQyxDQUFjO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVU7QUFDaEMsaURBQWlEO0FBQ2pELENBQUM7QUFDRDtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBLFNBQVM7QUFDVCxHQUFHLEVBQUU7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMzAuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgTUVUQSA9IHJlcXVpcmUoJy4vX3VpZCcpKCdtZXRhJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciBzZXREZXNjID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbnZhciBpZCA9IDA7XG52YXIgaXNFeHRlbnNpYmxlID0gT2JqZWN0LmlzRXh0ZW5zaWJsZSB8fCBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0cnVlO1xufTtcbnZhciBGUkVFWkUgPSAhcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBpc0V4dGVuc2libGUoT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKHt9KSk7XG59KTtcbnZhciBzZXRNZXRhID0gZnVuY3Rpb24gKGl0KSB7XG4gIHNldERlc2MoaXQsIE1FVEEsIHsgdmFsdWU6IHtcbiAgICBpOiAnTycgKyArK2lkLCAvLyBvYmplY3QgSURcbiAgICB3OiB7fSAgICAgICAgICAvLyB3ZWFrIGNvbGxlY3Rpb25zIElEc1xuICB9IH0pO1xufTtcbnZhciBmYXN0S2V5ID0gZnVuY3Rpb24gKGl0LCBjcmVhdGUpIHtcbiAgLy8gcmV0dXJuIHByaW1pdGl2ZSB3aXRoIHByZWZpeFxuICBpZiAoIWlzT2JqZWN0KGl0KSkgcmV0dXJuIHR5cGVvZiBpdCA9PSAnc3ltYm9sJyA/IGl0IDogKHR5cGVvZiBpdCA9PSAnc3RyaW5nJyA/ICdTJyA6ICdQJykgKyBpdDtcbiAgaWYgKCFoYXMoaXQsIE1FVEEpKSB7XG4gICAgLy8gY2FuJ3Qgc2V0IG1ldGFkYXRhIHRvIHVuY2F1Z2h0IGZyb3plbiBvYmplY3RcbiAgICBpZiAoIWlzRXh0ZW5zaWJsZShpdCkpIHJldHVybiAnRic7XG4gICAgLy8gbm90IG5lY2Vzc2FyeSB0byBhZGQgbWV0YWRhdGFcbiAgICBpZiAoIWNyZWF0ZSkgcmV0dXJuICdFJztcbiAgICAvLyBhZGQgbWlzc2luZyBtZXRhZGF0YVxuICAgIHNldE1ldGEoaXQpO1xuICAvLyByZXR1cm4gb2JqZWN0IElEXG4gIH0gcmV0dXJuIGl0W01FVEFdLmk7XG59O1xudmFyIGdldFdlYWsgPSBmdW5jdGlvbiAoaXQsIGNyZWF0ZSkge1xuICBpZiAoIWhhcyhpdCwgTUVUQSkpIHtcbiAgICAvLyBjYW4ndCBzZXQgbWV0YWRhdGEgdG8gdW5jYXVnaHQgZnJvemVuIG9iamVjdFxuICAgIGlmICghaXNFeHRlbnNpYmxlKGl0KSkgcmV0dXJuIHRydWU7XG4gICAgLy8gbm90IG5lY2Vzc2FyeSB0byBhZGQgbWV0YWRhdGFcbiAgICBpZiAoIWNyZWF0ZSkgcmV0dXJuIGZhbHNlO1xuICAgIC8vIGFkZCBtaXNzaW5nIG1ldGFkYXRhXG4gICAgc2V0TWV0YShpdCk7XG4gIC8vIHJldHVybiBoYXNoIHdlYWsgY29sbGVjdGlvbnMgSURzXG4gIH0gcmV0dXJuIGl0W01FVEFdLnc7XG59O1xuLy8gYWRkIG1ldGFkYXRhIG9uIGZyZWV6ZS1mYW1pbHkgbWV0aG9kcyBjYWxsaW5nXG52YXIgb25GcmVlemUgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKEZSRUVaRSAmJiBtZXRhLk5FRUQgJiYgaXNFeHRlbnNpYmxlKGl0KSAmJiAhaGFzKGl0LCBNRVRBKSkgc2V0TWV0YShpdCk7XG4gIHJldHVybiBpdDtcbn07XG52YXIgbWV0YSA9IG1vZHVsZS5leHBvcnRzID0ge1xuICBLRVk6IE1FVEEsXG4gIE5FRUQ6IGZhbHNlLFxuICBmYXN0S2V5OiBmYXN0S2V5LFxuICBnZXRXZWFrOiBnZXRXZWFrLFxuICBvbkZyZWV6ZTogb25GcmVlemVcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///30\n")},function(module,exports,__webpack_require__){eval("// 22.1.3.31 Array.prototype[@@unscopables]\nvar UNSCOPABLES = __webpack_require__(5)('unscopables');\nvar ArrayProto = Array.prototype;\nif (ArrayProto[UNSCOPABLES] == undefined) __webpack_require__(11)(ArrayProto, UNSCOPABLES, {});\nmodule.exports = function (key) {\n ArrayProto[UNSCOPABLES][key] = true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYWRkLXRvLXVuc2NvcGFibGVzLmpzPzljNmMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxrQkFBa0IsbUJBQU8sQ0FBQyxDQUFRO0FBQ2xDO0FBQ0EsMENBQTBDLG1CQUFPLENBQUMsRUFBUyw2QkFBNkI7QUFDeEY7QUFDQTtBQUNBIiwiZmlsZSI6IjMxLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjIuMS4zLjMxIEFycmF5LnByb3RvdHlwZVtAQHVuc2NvcGFibGVzXVxudmFyIFVOU0NPUEFCTEVTID0gcmVxdWlyZSgnLi9fd2tzJykoJ3Vuc2NvcGFibGVzJyk7XG52YXIgQXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZTtcbmlmIChBcnJheVByb3RvW1VOU0NPUEFCTEVTXSA9PSB1bmRlZmluZWQpIHJlcXVpcmUoJy4vX2hpZGUnKShBcnJheVByb3RvLCBVTlNDT1BBQkxFUywge30pO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIEFycmF5UHJvdG9bVU5TQ09QQUJMRVNdW2tleV0gPSB0cnVlO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///31\n")},function(module,exports){eval("module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcHJvcGVydHktZGVzYy5qcz80NjMwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMzIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChiaXRtYXAsIHZhbHVlKSB7XG4gIHJldHVybiB7XG4gICAgZW51bWVyYWJsZTogIShiaXRtYXAgJiAxKSxcbiAgICBjb25maWd1cmFibGU6ICEoYml0bWFwICYgMiksXG4gICAgd3JpdGFibGU6ICEoYml0bWFwICYgNCksXG4gICAgdmFsdWU6IHZhbHVlXG4gIH07XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///32\n")},function(module,exports){eval("var id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdWlkLmpzP2NhNWEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIzMy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBpZCA9IDA7XG52YXIgcHggPSBNYXRoLnJhbmRvbSgpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiAnU3ltYm9sKCcuY29uY2F0KGtleSA9PT0gdW5kZWZpbmVkID8gJycgOiBrZXksICcpXycsICgrK2lkICsgcHgpLnRvU3RyaW5nKDM2KSk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///33\n")},function(module,exports,__webpack_require__){eval("// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = __webpack_require__(96);\nvar enumBugKeys = __webpack_require__(69);\n\nmodule.exports = Object.keys || function keys(O) {\n return $keys(O, enumBugKeys);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWtleXMuanM/MGQ1OCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLFlBQVksbUJBQU8sQ0FBQyxFQUF5QjtBQUM3QyxrQkFBa0IsbUJBQU8sQ0FBQyxFQUFrQjs7QUFFNUM7QUFDQTtBQUNBIiwiZmlsZSI6IjM0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMTkuMS4yLjE0IC8gMTUuMi4zLjE0IE9iamVjdC5rZXlzKE8pXG52YXIgJGtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cy1pbnRlcm5hbCcpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi9fZW51bS1idWcta2V5cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIGtleXMoTykge1xuICByZXR1cm4gJGtleXMoTywgZW51bUJ1Z0tleXMpO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///34\n")},function(module,exports,__webpack_require__){eval("var toInteger = __webpack_require__(21);\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n index = toInteger(index);\n return index < 0 ? max(index + length, 0) : min(index, length);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8tYWJzb2x1dGUtaW5kZXguanM/NzdmMSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIzNS5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgbWluID0gTWF0aC5taW47XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbmRleCwgbGVuZ3RoKSB7XG4gIGluZGV4ID0gdG9JbnRlZ2VyKGluZGV4KTtcbiAgcmV0dXJuIGluZGV4IDwgMCA/IG1heChpbmRleCArIGxlbmd0aCwgMCkgOiBtaW4oaW5kZXgsIGxlbmd0aCk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///35\n")},function(module,exports,__webpack_require__){eval("// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = __webpack_require__(1);\nvar dPs = __webpack_require__(97);\nvar enumBugKeys = __webpack_require__(69);\nvar IE_PROTO = __webpack_require__(68)('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = __webpack_require__(66)('iframe');\n var i = enumBugKeys.length;\n var lt = '<';\n var gt = '>';\n var iframeDocument;\n iframe.style.display = 'none';\n __webpack_require__(70).appendChild(iframe);\n iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n // createDict = iframe.contentWindow.Object;\n // html.removeChild(iframe);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n iframeDocument.close();\n createDict = iframeDocument.F;\n while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n Empty[PROTOTYPE] = anObject(O);\n result = new Empty();\n Empty[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = createDict();\n return Properties === undefined ? result : dPs(result, Properties);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWNyZWF0ZS5qcz8yYWViIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsVUFBVSxtQkFBTyxDQUFDLEVBQWU7QUFDakMsa0JBQWtCLG1CQUFPLENBQUMsRUFBa0I7QUFDNUMsZUFBZSxtQkFBTyxDQUFDLEVBQWU7QUFDdEMseUJBQXlCO0FBQ3pCOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsbUJBQU8sQ0FBQyxFQUFlO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLG1CQUFPLENBQUMsRUFBUztBQUNuQiw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBIiwiZmlsZSI6IjM2LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMTkuMS4yLjIgLyAxNS4yLjMuNSBPYmplY3QuY3JlYXRlKE8gWywgUHJvcGVydGllc10pXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBkUHMgPSByZXF1aXJlKCcuL19vYmplY3QtZHBzJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuL19lbnVtLWJ1Zy1rZXlzJyk7XG52YXIgSUVfUFJPVE8gPSByZXF1aXJlKCcuL19zaGFyZWQta2V5JykoJ0lFX1BST1RPJyk7XG52YXIgRW1wdHkgPSBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH07XG52YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG5cbi8vIENyZWF0ZSBvYmplY3Qgd2l0aCBmYWtlIGBudWxsYCBwcm90b3R5cGU6IHVzZSBpZnJhbWUgT2JqZWN0IHdpdGggY2xlYXJlZCBwcm90b3R5cGVcbnZhciBjcmVhdGVEaWN0ID0gZnVuY3Rpb24gKCkge1xuICAvLyBUaHJhc2gsIHdhc3RlIGFuZCBzb2RvbXk6IElFIEdDIGJ1Z1xuICB2YXIgaWZyYW1lID0gcmVxdWlyZSgnLi9fZG9tLWNyZWF0ZScpKCdpZnJhbWUnKTtcbiAgdmFyIGkgPSBlbnVtQnVnS2V5cy5sZW5ndGg7XG4gIHZhciBsdCA9ICc8JztcbiAgdmFyIGd0ID0gJz4nO1xuICB2YXIgaWZyYW1lRG9jdW1lbnQ7XG4gIGlmcmFtZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICByZXF1aXJlKCcuL19odG1sJykuYXBwZW5kQ2hpbGQoaWZyYW1lKTtcbiAgaWZyYW1lLnNyYyA9ICdqYXZhc2NyaXB0Oic7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tc2NyaXB0LXVybFxuICAvLyBjcmVhdGVEaWN0ID0gaWZyYW1lLmNvbnRlbnRXaW5kb3cuT2JqZWN0O1xuICAvLyBodG1sLnJlbW92ZUNoaWxkKGlmcmFtZSk7XG4gIGlmcmFtZURvY3VtZW50ID0gaWZyYW1lLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQ7XG4gIGlmcmFtZURvY3VtZW50Lm9wZW4oKTtcbiAgaWZyYW1lRG9jdW1lbnQud3JpdGUobHQgKyAnc2NyaXB0JyArIGd0ICsgJ2RvY3VtZW50LkY9T2JqZWN0JyArIGx0ICsgJy9zY3JpcHQnICsgZ3QpO1xuICBpZnJhbWVEb2N1bWVudC5jbG9zZSgpO1xuICBjcmVhdGVEaWN0ID0gaWZyYW1lRG9jdW1lbnQuRjtcbiAgd2hpbGUgKGktLSkgZGVsZXRlIGNyZWF0ZURpY3RbUFJPVE9UWVBFXVtlbnVtQnVnS2V5c1tpXV07XG4gIHJldHVybiBjcmVhdGVEaWN0KCk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5jcmVhdGUgfHwgZnVuY3Rpb24gY3JlYXRlKE8sIFByb3BlcnRpZXMpIHtcbiAgdmFyIHJlc3VsdDtcbiAgaWYgKE8gIT09IG51bGwpIHtcbiAgICBFbXB0eVtQUk9UT1RZUEVdID0gYW5PYmplY3QoTyk7XG4gICAgcmVzdWx0ID0gbmV3IEVtcHR5KCk7XG4gICAgRW1wdHlbUFJPVE9UWVBFXSA9IG51bGw7XG4gICAgLy8gYWRkIFwiX19wcm90b19fXCIgZm9yIE9iamVjdC5nZXRQcm90b3R5cGVPZiBwb2x5ZmlsbFxuICAgIHJlc3VsdFtJRV9QUk9UT10gPSBPO1xuICB9IGVsc2UgcmVzdWx0ID0gY3JlYXRlRGljdCgpO1xuICByZXR1cm4gUHJvcGVydGllcyA9PT0gdW5kZWZpbmVkID8gcmVzdWx0IDogZFBzKHJlc3VsdCwgUHJvcGVydGllcyk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///36\n")},function(module,exports,__webpack_require__){eval("// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\nvar $keys = __webpack_require__(96);\nvar hiddenKeys = __webpack_require__(69).concat('length', 'prototype');\n\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return $keys(O, hiddenKeys);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdvcG4uanM/OTA5MyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLFlBQVksbUJBQU8sQ0FBQyxFQUF5QjtBQUM3QyxpQkFBaUIsbUJBQU8sQ0FBQyxFQUFrQjs7QUFFM0M7QUFDQTtBQUNBIiwiZmlsZSI6IjM3LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMTkuMS4yLjcgLyAxNS4yLjMuNCBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhPKVxudmFyICRrZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMtaW50ZXJuYWwnKTtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi9fZW51bS1idWcta2V5cycpLmNvbmNhdCgnbGVuZ3RoJywgJ3Byb3RvdHlwZScpO1xuXG5leHBvcnRzLmYgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB8fCBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKE8pIHtcbiAgcmV0dXJuICRrZXlzKE8sIGhpZGRlbktleXMpO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///37\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar global = __webpack_require__(2);\nvar dP = __webpack_require__(8);\nvar DESCRIPTORS = __webpack_require__(7);\nvar SPECIES = __webpack_require__(5)('species');\n\nmodule.exports = function (KEY) {\n var C = global[KEY];\n if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2V0LXNwZWNpZXMuanM/N2E1NiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGFBQWEsbUJBQU8sQ0FBQyxDQUFXO0FBQ2hDLFNBQVMsbUJBQU8sQ0FBQyxDQUFjO0FBQy9CLGtCQUFrQixtQkFBTyxDQUFDLENBQWdCO0FBQzFDLGNBQWMsbUJBQU8sQ0FBQyxDQUFROztBQUU5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQixhQUFhO0FBQ25DLEdBQUc7QUFDSCIsImZpbGUiOiIzOC5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKTtcbnZhciBTUEVDSUVTID0gcmVxdWlyZSgnLi9fd2tzJykoJ3NwZWNpZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoS0VZKSB7XG4gIHZhciBDID0gZ2xvYmFsW0tFWV07XG4gIGlmIChERVNDUklQVE9SUyAmJiBDICYmICFDW1NQRUNJRVNdKSBkUC5mKEMsIFNQRUNJRVMsIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9XG4gIH0pO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///38\n")},function(module,exports){eval("module.exports = function (it, Constructor, name, forbiddenField) {\n if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) {\n throw TypeError(name + ': incorrect invocation!');\n } return it;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYW4taW5zdGFuY2UuanM/ZjYwNSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0giLCJmaWxlIjoiMzkuanMiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgQ29uc3RydWN0b3IsIG5hbWUsIGZvcmJpZGRlbkZpZWxkKSB7XG4gIGlmICghKGl0IGluc3RhbmNlb2YgQ29uc3RydWN0b3IpIHx8IChmb3JiaWRkZW5GaWVsZCAhPT0gdW5kZWZpbmVkICYmIGZvcmJpZGRlbkZpZWxkIGluIGl0KSkge1xuICAgIHRocm93IFR5cGVFcnJvcihuYW1lICsgJzogaW5jb3JyZWN0IGludm9jYXRpb24hJyk7XG4gIH0gcmV0dXJuIGl0O1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///39\n")},function(module,exports,__webpack_require__){eval("var ctx = __webpack_require__(19);\nvar call = __webpack_require__(109);\nvar isArrayIter = __webpack_require__(81);\nvar anObject = __webpack_require__(1);\nvar toLength = __webpack_require__(6);\nvar getIterFn = __webpack_require__(83);\nvar BREAK = {};\nvar RETURN = {};\nvar exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {\n var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable);\n var f = ctx(fn, that, entries ? 2 : 1);\n var index = 0;\n var length, step, iterator, result;\n if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');\n // fast case for arrays with default iterator\n if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {\n result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);\n if (result === BREAK || result === RETURN) return result;\n } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {\n result = call(iterator, f, step.value, entries);\n if (result === BREAK || result === RETURN) return result;\n }\n};\nexports.BREAK = BREAK;\nexports.RETURN = RETURN;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZm9yLW9mLmpzPzRhNTkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsVUFBVSxtQkFBTyxDQUFDLEVBQVE7QUFDMUIsV0FBVyxtQkFBTyxDQUFDLEdBQWM7QUFDakMsa0JBQWtCLG1CQUFPLENBQUMsRUFBa0I7QUFDNUMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBNEI7QUFDcEQ7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDLGlCQUFpQixFQUFFO0FBQzFEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtRUFBbUUsZ0JBQWdCO0FBQ25GO0FBQ0E7QUFDQSxHQUFHLDRDQUE0QyxnQ0FBZ0M7QUFDL0U7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjQwLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuL19pdGVyLWNhbGwnKTtcbnZhciBpc0FycmF5SXRlciA9IHJlcXVpcmUoJy4vX2lzLWFycmF5LWl0ZXInKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgZ2V0SXRlckZuID0gcmVxdWlyZSgnLi9jb3JlLmdldC1pdGVyYXRvci1tZXRob2QnKTtcbnZhciBCUkVBSyA9IHt9O1xudmFyIFJFVFVSTiA9IHt9O1xudmFyIGV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVyYWJsZSwgZW50cmllcywgZm4sIHRoYXQsIElURVJBVE9SKSB7XG4gIHZhciBpdGVyRm4gPSBJVEVSQVRPUiA/IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGl0ZXJhYmxlOyB9IDogZ2V0SXRlckZuKGl0ZXJhYmxlKTtcbiAgdmFyIGYgPSBjdHgoZm4sIHRoYXQsIGVudHJpZXMgPyAyIDogMSk7XG4gIHZhciBpbmRleCA9IDA7XG4gIHZhciBsZW5ndGgsIHN0ZXAsIGl0ZXJhdG9yLCByZXN1bHQ7XG4gIGlmICh0eXBlb2YgaXRlckZuICE9ICdmdW5jdGlvbicpIHRocm93IFR5cGVFcnJvcihpdGVyYWJsZSArICcgaXMgbm90IGl0ZXJhYmxlIScpO1xuICAvLyBmYXN0IGNhc2UgZm9yIGFycmF5cyB3aXRoIGRlZmF1bHQgaXRlcmF0b3JcbiAgaWYgKGlzQXJyYXlJdGVyKGl0ZXJGbikpIGZvciAobGVuZ3RoID0gdG9MZW5ndGgoaXRlcmFibGUubGVuZ3RoKTsgbGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIHtcbiAgICByZXN1bHQgPSBlbnRyaWVzID8gZihhbk9iamVjdChzdGVwID0gaXRlcmFibGVbaW5kZXhdKVswXSwgc3RlcFsxXSkgOiBmKGl0ZXJhYmxlW2luZGV4XSk7XG4gICAgaWYgKHJlc3VsdCA9PT0gQlJFQUsgfHwgcmVzdWx0ID09PSBSRVRVUk4pIHJldHVybiByZXN1bHQ7XG4gIH0gZWxzZSBmb3IgKGl0ZXJhdG9yID0gaXRlckZuLmNhbGwoaXRlcmFibGUpOyAhKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmU7KSB7XG4gICAgcmVzdWx0ID0gY2FsbChpdGVyYXRvciwgZiwgc3RlcC52YWx1ZSwgZW50cmllcyk7XG4gICAgaWYgKHJlc3VsdCA9PT0gQlJFQUsgfHwgcmVzdWx0ID09PSBSRVRVUk4pIHJldHVybiByZXN1bHQ7XG4gIH1cbn07XG5leHBvcnRzLkJSRUFLID0gQlJFQUs7XG5leHBvcnRzLlJFVFVSTiA9IFJFVFVSTjtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///40\n")},function(module,exports,__webpack_require__){eval("var redefine = __webpack_require__(12);\nmodule.exports = function (target, src, safe) {\n for (var key in src) redefine(target, key, src[key], safe);\n return target;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcmVkZWZpbmUtYWxsLmpzP2RjYmMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxtQkFBTyxDQUFDLEVBQWE7QUFDcEM7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiNDEuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGFyZ2V0LCBzcmMsIHNhZmUpIHtcbiAgZm9yICh2YXIga2V5IGluIHNyYykgcmVkZWZpbmUodGFyZ2V0LCBrZXksIHNyY1trZXldLCBzYWZlKTtcbiAgcmV0dXJuIHRhcmdldDtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///41\n")},function(module,exports,__webpack_require__){eval("var isObject = __webpack_require__(4);\nmodule.exports = function (it, TYPE) {\n if (!isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!');\n return it;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdmFsaWRhdGUtY29sbGVjdGlvbi5qcz9iMzlhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjQyLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgVFlQRSkge1xuICBpZiAoIWlzT2JqZWN0KGl0KSB8fCBpdC5fdCAhPT0gVFlQRSkgdGhyb3cgVHlwZUVycm9yKCdJbmNvbXBhdGlibGUgcmVjZWl2ZXIsICcgKyBUWVBFICsgJyByZXF1aXJlZCEnKTtcbiAgcmV0dXJuIGl0O1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///42\n")},function(module,exports,__webpack_require__){eval("var def = __webpack_require__(8).f;\nvar has = __webpack_require__(14);\nvar TAG = __webpack_require__(5)('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2V0LXRvLXN0cmluZy10YWcuanM/N2YyMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxVQUFVLG1CQUFPLENBQUMsQ0FBYztBQUNoQyxVQUFVLG1CQUFPLENBQUMsRUFBUTtBQUMxQixVQUFVLG1CQUFPLENBQUMsQ0FBUTs7QUFFMUI7QUFDQSxvRUFBb0UsaUNBQWlDO0FBQ3JHIiwiZmlsZSI6IjQzLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGRlZiA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgVEFHID0gcmVxdWlyZSgnLi9fd2tzJykoJ3RvU3RyaW5nVGFnJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCB0YWcsIHN0YXQpIHtcbiAgaWYgKGl0ICYmICFoYXMoaXQgPSBzdGF0ID8gaXQgOiBpdC5wcm90b3R5cGUsIFRBRykpIGRlZihpdCwgVEFHLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgdmFsdWU6IHRhZyB9KTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///43\n")},function(module,exports,__webpack_require__){eval("// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = __webpack_require__(20);\nvar TAG = __webpack_require__(5)('toStringTag');\n// ES3 wrong here\nvar ARG = cof(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (e) { /* empty */ }\n};\n\nmodule.exports = function (it) {\n var O, T, B;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n // builtinTag case\n : ARG ? cof(O)\n // ES3 arguments fallback\n : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY2xhc3NvZi5qcz8yM2M2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsVUFBVSxtQkFBTyxDQUFDLEVBQVE7QUFDMUIsVUFBVSxtQkFBTyxDQUFDLENBQVE7QUFDMUI7QUFDQSwyQkFBMkIsa0JBQWtCLEVBQUU7O0FBRS9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRyxZQUFZO0FBQ2Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiNDQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBnZXR0aW5nIHRhZyBmcm9tIDE5LjEuMy42IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcoKVxudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xudmFyIFRBRyA9IHJlcXVpcmUoJy4vX3drcycpKCd0b1N0cmluZ1RhZycpO1xuLy8gRVMzIHdyb25nIGhlcmVcbnZhciBBUkcgPSBjb2YoZnVuY3Rpb24gKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpID09ICdBcmd1bWVudHMnO1xuXG4vLyBmYWxsYmFjayBmb3IgSUUxMSBTY3JpcHQgQWNjZXNzIERlbmllZCBlcnJvclxudmFyIHRyeUdldCA9IGZ1bmN0aW9uIChpdCwga2V5KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGl0W2tleV07XG4gIH0gY2F0Y2ggKGUpIHsgLyogZW1wdHkgKi8gfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIE8sIFQsIEI7XG4gIHJldHVybiBpdCA9PT0gdW5kZWZpbmVkID8gJ1VuZGVmaW5lZCcgOiBpdCA9PT0gbnVsbCA/ICdOdWxsJ1xuICAgIC8vIEBAdG9TdHJpbmdUYWcgY2FzZVxuICAgIDogdHlwZW9mIChUID0gdHJ5R2V0KE8gPSBPYmplY3QoaXQpLCBUQUcpKSA9PSAnc3RyaW5nJyA/IFRcbiAgICAvLyBidWlsdGluVGFnIGNhc2VcbiAgICA6IEFSRyA/IGNvZihPKVxuICAgIC8vIEVTMyBhcmd1bWVudHMgZmFsbGJhY2tcbiAgICA6IChCID0gY29mKE8pKSA9PSAnT2JqZWN0JyAmJiB0eXBlb2YgTy5jYWxsZWUgPT0gJ2Z1bmN0aW9uJyA/ICdBcmd1bWVudHMnIDogQjtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///44\n")},function(module,exports,__webpack_require__){eval("var $export = __webpack_require__(0);\nvar defined = __webpack_require__(24);\nvar fails = __webpack_require__(3);\nvar spaces = __webpack_require__(72);\nvar space = '[' + spaces + ']';\nvar non = '\\u200b\\u0085';\nvar ltrim = RegExp('^' + space + space + '*');\nvar rtrim = RegExp(space + space + '*$');\n\nvar exporter = function (KEY, exec, ALIAS) {\n var exp = {};\n var FORCE = fails(function () {\n return !!spaces[KEY]() || non[KEY]() != non;\n });\n var fn = exp[KEY] = FORCE ? exec(trim) : spaces[KEY];\n if (ALIAS) exp[ALIAS] = fn;\n $export($export.P + $export.F * FORCE, 'String', exp);\n};\n\n// 1 -> String#trimLeft\n// 2 -> String#trimRight\n// 3 -> String#trim\nvar trim = exporter.trim = function (string, TYPE) {\n string = String(defined(string));\n if (TYPE & 1) string = string.replace(ltrim, '');\n if (TYPE & 2) string = string.replace(rtrim, '');\n return string;\n};\n\nmodule.exports = exporter;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLXRyaW0uanM/YWE3NyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxjQUFjLG1CQUFPLENBQUMsRUFBWTtBQUNsQyxZQUFZLG1CQUFPLENBQUMsQ0FBVTtBQUM5QixhQUFhLG1CQUFPLENBQUMsRUFBYztBQUNuQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiNDUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIHNwYWNlcyA9IHJlcXVpcmUoJy4vX3N0cmluZy13cycpO1xudmFyIHNwYWNlID0gJ1snICsgc3BhY2VzICsgJ10nO1xudmFyIG5vbiA9ICdcXHUyMDBiXFx1MDA4NSc7XG52YXIgbHRyaW0gPSBSZWdFeHAoJ14nICsgc3BhY2UgKyBzcGFjZSArICcqJyk7XG52YXIgcnRyaW0gPSBSZWdFeHAoc3BhY2UgKyBzcGFjZSArICcqJCcpO1xuXG52YXIgZXhwb3J0ZXIgPSBmdW5jdGlvbiAoS0VZLCBleGVjLCBBTElBUykge1xuICB2YXIgZXhwID0ge307XG4gIHZhciBGT1JDRSA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gISFzcGFjZXNbS0VZXSgpIHx8IG5vbltLRVldKCkgIT0gbm9uO1xuICB9KTtcbiAgdmFyIGZuID0gZXhwW0tFWV0gPSBGT1JDRSA/IGV4ZWModHJpbSkgOiBzcGFjZXNbS0VZXTtcbiAgaWYgKEFMSUFTKSBleHBbQUxJQVNdID0gZm47XG4gICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogRk9SQ0UsICdTdHJpbmcnLCBleHApO1xufTtcblxuLy8gMSAtPiBTdHJpbmcjdHJpbUxlZnRcbi8vIDIgLT4gU3RyaW5nI3RyaW1SaWdodFxuLy8gMyAtPiBTdHJpbmcjdHJpbVxudmFyIHRyaW0gPSBleHBvcnRlci50cmltID0gZnVuY3Rpb24gKHN0cmluZywgVFlQRSkge1xuICBzdHJpbmcgPSBTdHJpbmcoZGVmaW5lZChzdHJpbmcpKTtcbiAgaWYgKFRZUEUgJiAxKSBzdHJpbmcgPSBzdHJpbmcucmVwbGFjZShsdHJpbSwgJycpO1xuICBpZiAoVFlQRSAmIDIpIHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKHJ0cmltLCAnJyk7XG4gIHJldHVybiBzdHJpbmc7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydGVyO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///45\n")},function(module,exports){eval("module.exports = {};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlcmF0b3JzLmpzPzg0ZjIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEiLCJmaWxlIjoiNDYuanMiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IHt9O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///46\n")},function(module,exports,__webpack_require__){eval("var core = __webpack_require__(18);\nvar global = __webpack_require__(2);\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\n\n(module.exports = function (key, value) {\n return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n version: core.version,\n mode: __webpack_require__(29) ? 'pure' : 'global',\n copyright: '© 2020 Denis Pushkarev (zloirock.ru)'\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2hhcmVkLmpzPzU1MzciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsV0FBVyxtQkFBTyxDQUFDLEVBQVM7QUFDNUIsYUFBYSxtQkFBTyxDQUFDLENBQVc7QUFDaEM7QUFDQSxrREFBa0Q7O0FBRWxEO0FBQ0EscUVBQXFFO0FBQ3JFLENBQUM7QUFDRDtBQUNBLFFBQVEsbUJBQU8sQ0FBQyxFQUFZO0FBQzVCO0FBQ0EsQ0FBQyIsImZpbGUiOiI0Ny5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIFNIQVJFRCA9ICdfX2NvcmUtanNfc2hhcmVkX18nO1xudmFyIHN0b3JlID0gZ2xvYmFsW1NIQVJFRF0gfHwgKGdsb2JhbFtTSEFSRURdID0ge30pO1xuXG4obW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICByZXR1cm4gc3RvcmVba2V5XSB8fCAoc3RvcmVba2V5XSA9IHZhbHVlICE9PSB1bmRlZmluZWQgPyB2YWx1ZSA6IHt9KTtcbn0pKCd2ZXJzaW9ucycsIFtdKS5wdXNoKHtcbiAgdmVyc2lvbjogY29yZS52ZXJzaW9uLFxuICBtb2RlOiByZXF1aXJlKCcuL19saWJyYXJ5JykgPyAncHVyZScgOiAnZ2xvYmFsJyxcbiAgY29weXJpZ2h0OiAnwqkgMjAyMCBEZW5pcyBQdXNoa2FyZXYgKHpsb2lyb2NrLnJ1KSdcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///47\n")},function(module,exports,__webpack_require__){eval("// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = __webpack_require__(20);\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n return cof(it) == 'String' ? it.split('') : Object(it);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faW9iamVjdC5qcz82MjZhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsVUFBVSxtQkFBTyxDQUFDLEVBQVE7QUFDMUI7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiNDguanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIGFuZCBub24tZW51bWVyYWJsZSBvbGQgVjggc3RyaW5nc1xudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QoJ3onKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKSA/IE9iamVjdCA6IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gY29mKGl0KSA9PSAnU3RyaW5nJyA/IGl0LnNwbGl0KCcnKSA6IE9iamVjdChpdCk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///48\n")},function(module,exports){eval("exports.f = {}.propertyIsEnumerable;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LXBpZS5qcz81MmE3Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMiLCJmaWxlIjoiNDkuanMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnRzLmYgPSB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///49\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// 21.2.5.3 get RegExp.prototype.flags\nvar anObject = __webpack_require__(1);\nmodule.exports = function () {\n var that = anObject(this);\n var result = '';\n if (that.global) result += 'g';\n if (that.ignoreCase) result += 'i';\n if (that.multiline) result += 'm';\n if (that.unicode) result += 'u';\n if (that.sticky) result += 'y';\n return result;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZmxhZ3MuanM/MGJmYiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiNTAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG4vLyAyMS4yLjUuMyBnZXQgUmVnRXhwLnByb3RvdHlwZS5mbGFnc1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHRoYXQgPSBhbk9iamVjdCh0aGlzKTtcbiAgdmFyIHJlc3VsdCA9ICcnO1xuICBpZiAodGhhdC5nbG9iYWwpIHJlc3VsdCArPSAnZyc7XG4gIGlmICh0aGF0Lmlnbm9yZUNhc2UpIHJlc3VsdCArPSAnaSc7XG4gIGlmICh0aGF0Lm11bHRpbGluZSkgcmVzdWx0ICs9ICdtJztcbiAgaWYgKHRoYXQudW5pY29kZSkgcmVzdWx0ICs9ICd1JztcbiAgaWYgKHRoYXQuc3RpY2t5KSByZXN1bHQgKz0gJ3knO1xuICByZXR1cm4gcmVzdWx0O1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///50\n")},function(module,exports,__webpack_require__){eval("// 7.3.20 SpeciesConstructor(O, defaultConstructor)\nvar anObject = __webpack_require__(1);\nvar aFunction = __webpack_require__(10);\nvar SPECIES = __webpack_require__(5)('species');\nmodule.exports = function (O, D) {\n var C = anObject(O).constructor;\n var S;\n return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3BlY2llcy1jb25zdHJ1Y3Rvci5qcz9lYmQ2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2QyxjQUFjLG1CQUFPLENBQUMsQ0FBUTtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjUxLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gNy4zLjIwIFNwZWNpZXNDb25zdHJ1Y3RvcihPLCBkZWZhdWx0Q29uc3RydWN0b3IpXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgU1BFQ0lFUyA9IHJlcXVpcmUoJy4vX3drcycpKCdzcGVjaWVzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBEKSB7XG4gIHZhciBDID0gYW5PYmplY3QoTykuY29uc3RydWN0b3I7XG4gIHZhciBTO1xuICByZXR1cm4gQyA9PT0gdW5kZWZpbmVkIHx8IChTID0gYW5PYmplY3QoQylbU1BFQ0lFU10pID09IHVuZGVmaW5lZCA/IEQgOiBhRnVuY3Rpb24oUyk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///51\n")},function(module,exports,__webpack_require__){eval("// false -> Array#indexOf\n// true -> Array#includes\nvar toIObject = __webpack_require__(15);\nvar toLength = __webpack_require__(6);\nvar toAbsoluteIndex = __webpack_require__(35);\nmodule.exports = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIObject($this);\n var length = toLength(O.length);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n if (O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktaW5jbHVkZXMuanM/YzM2NiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0EsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2QyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxzQkFBc0IsbUJBQU8sQ0FBQyxFQUFzQjtBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUssWUFBWSxlQUFlO0FBQ2hDO0FBQ0EsS0FBSztBQUNMO0FBQ0EiLCJmaWxlIjoiNTIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBmYWxzZSAtPiBBcnJheSNpbmRleE9mXG4vLyB0cnVlICAtPiBBcnJheSNpbmNsdWRlc1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4vX3RvLWFic29sdXRlLWluZGV4Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChJU19JTkNMVURFUykge1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBlbCwgZnJvbUluZGV4KSB7XG4gICAgdmFyIE8gPSB0b0lPYmplY3QoJHRoaXMpO1xuICAgIHZhciBsZW5ndGggPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gICAgdmFyIGluZGV4ID0gdG9BYnNvbHV0ZUluZGV4KGZyb21JbmRleCwgbGVuZ3RoKTtcbiAgICB2YXIgdmFsdWU7XG4gICAgLy8gQXJyYXkjaW5jbHVkZXMgdXNlcyBTYW1lVmFsdWVaZXJvIGVxdWFsaXR5IGFsZ29yaXRobVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICBpZiAoSVNfSU5DTFVERVMgJiYgZWwgIT0gZWwpIHdoaWxlIChsZW5ndGggPiBpbmRleCkge1xuICAgICAgdmFsdWUgPSBPW2luZGV4KytdO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgICAgaWYgKHZhbHVlICE9IHZhbHVlKSByZXR1cm4gdHJ1ZTtcbiAgICAvLyBBcnJheSNpbmRleE9mIGlnbm9yZXMgaG9sZXMsIEFycmF5I2luY2x1ZGVzIC0gbm90XG4gICAgfSBlbHNlIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSBpZiAoSVNfSU5DTFVERVMgfHwgaW5kZXggaW4gTykge1xuICAgICAgaWYgKE9baW5kZXhdID09PSBlbCkgcmV0dXJuIElTX0lOQ0xVREVTIHx8IGluZGV4IHx8IDA7XG4gICAgfSByZXR1cm4gIUlTX0lOQ0xVREVTICYmIC0xO1xuICB9O1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///52\n")},function(module,exports){eval("exports.f = Object.getOwnPropertySymbols;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdvcHMuanM/MjYyMSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSIsImZpbGUiOiI1My5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///53\n")},function(module,exports,__webpack_require__){eval("// 7.2.2 IsArray(argument)\nvar cof = __webpack_require__(20);\nmodule.exports = Array.isArray || function isArray(arg) {\n return cof(arg) == 'Array';\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtYXJyYXkuanM/MTE2OSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLFVBQVUsbUJBQU8sQ0FBQyxFQUFRO0FBQzFCO0FBQ0E7QUFDQSIsImZpbGUiOiI1NC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDcuMi4yIElzQXJyYXkoYXJndW1lbnQpXG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG5tb2R1bGUuZXhwb3J0cyA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gaXNBcnJheShhcmcpIHtcbiAgcmV0dXJuIGNvZihhcmcpID09ICdBcnJheSc7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///54\n")},function(module,exports,__webpack_require__){eval("var toInteger = __webpack_require__(21);\nvar defined = __webpack_require__(24);\n// true -> String#at\n// false -> String#codePointAt\nmodule.exports = function (TO_STRING) {\n return function (that, pos) {\n var s = String(defined(that));\n var i = toInteger(pos);\n var l = s.length;\n var a, b;\n if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n a = s.charCodeAt(i);\n return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n ? TO_STRING ? s.charAt(i) : a\n : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLWF0LmpzPzAyZjQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2QyxjQUFjLG1CQUFPLENBQUMsRUFBWTtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiNTUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG4vLyB0cnVlICAtPiBTdHJpbmcjYXRcbi8vIGZhbHNlIC0+IFN0cmluZyNjb2RlUG9pbnRBdFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoVE9fU1RSSU5HKSB7XG4gIHJldHVybiBmdW5jdGlvbiAodGhhdCwgcG9zKSB7XG4gICAgdmFyIHMgPSBTdHJpbmcoZGVmaW5lZCh0aGF0KSk7XG4gICAgdmFyIGkgPSB0b0ludGVnZXIocG9zKTtcbiAgICB2YXIgbCA9IHMubGVuZ3RoO1xuICAgIHZhciBhLCBiO1xuICAgIGlmIChpIDwgMCB8fCBpID49IGwpIHJldHVybiBUT19TVFJJTkcgPyAnJyA6IHVuZGVmaW5lZDtcbiAgICBhID0gcy5jaGFyQ29kZUF0KGkpO1xuICAgIHJldHVybiBhIDwgMHhkODAwIHx8IGEgPiAweGRiZmYgfHwgaSArIDEgPT09IGwgfHwgKGIgPSBzLmNoYXJDb2RlQXQoaSArIDEpKSA8IDB4ZGMwMCB8fCBiID4gMHhkZmZmXG4gICAgICA/IFRPX1NUUklORyA/IHMuY2hhckF0KGkpIDogYVxuICAgICAgOiBUT19TVFJJTkcgPyBzLnNsaWNlKGksIGkgKyAyKSA6IChhIC0gMHhkODAwIDw8IDEwKSArIChiIC0gMHhkYzAwKSArIDB4MTAwMDA7XG4gIH07XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///55\n")},function(module,exports,__webpack_require__){eval("// 7.2.8 IsRegExp(argument)\nvar isObject = __webpack_require__(4);\nvar cof = __webpack_require__(20);\nvar MATCH = __webpack_require__(5)('match');\nmodule.exports = function (it) {\n var isRegExp;\n return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtcmVnZXhwLmpzP2FhZTMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxVQUFVLG1CQUFPLENBQUMsRUFBUTtBQUMxQixZQUFZLG1CQUFPLENBQUMsQ0FBUTtBQUM1QjtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiI1Ni5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDcuMi44IElzUmVnRXhwKGFyZ3VtZW50KVxudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG52YXIgTUFUQ0ggPSByZXF1aXJlKCcuL193a3MnKSgnbWF0Y2gnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBpc1JlZ0V4cDtcbiAgcmV0dXJuIGlzT2JqZWN0KGl0KSAmJiAoKGlzUmVnRXhwID0gaXRbTUFUQ0hdKSAhPT0gdW5kZWZpbmVkID8gISFpc1JlZ0V4cCA6IGNvZihpdCkgPT0gJ1JlZ0V4cCcpO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///56\n")},function(module,exports,__webpack_require__){eval("var ITERATOR = __webpack_require__(5)('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var riter = [7][ITERATOR]();\n riter['return'] = function () { SAFE_CLOSING = true; };\n // eslint-disable-next-line no-throw-literal\n Array.from(riter, function () { throw 2; });\n} catch (e) { /* empty */ }\n\nmodule.exports = function (exec, skipClosing) {\n if (!skipClosing && !SAFE_CLOSING) return false;\n var safe = false;\n try {\n var arr = [7];\n var iter = arr[ITERATOR]();\n iter.next = function () { return { done: safe = true }; };\n arr[ITERATOR] = function () { return iter; };\n exec(arr);\n } catch (e) { /* empty */ }\n return safe;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlci1kZXRlY3QuanM/NWNjNSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxlQUFlLG1CQUFPLENBQUMsQ0FBUTtBQUMvQjs7QUFFQTtBQUNBO0FBQ0EsaUNBQWlDLHFCQUFxQjtBQUN0RDtBQUNBLGlDQUFpQyxTQUFTLEVBQUU7QUFDNUMsQ0FBQyxZQUFZOztBQUViO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QixTQUFTLHFCQUFxQjtBQUMzRCxpQ0FBaUMsYUFBYTtBQUM5QztBQUNBLEdBQUcsWUFBWTtBQUNmO0FBQ0EiLCJmaWxlIjoiNTcuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgSVRFUkFUT1IgPSByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKTtcbnZhciBTQUZFX0NMT1NJTkcgPSBmYWxzZTtcblxudHJ5IHtcbiAgdmFyIHJpdGVyID0gWzddW0lURVJBVE9SXSgpO1xuICByaXRlclsncmV0dXJuJ10gPSBmdW5jdGlvbiAoKSB7IFNBRkVfQ0xPU0lORyA9IHRydWU7IH07XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby10aHJvdy1saXRlcmFsXG4gIEFycmF5LmZyb20ocml0ZXIsIGZ1bmN0aW9uICgpIHsgdGhyb3cgMjsgfSk7XG59IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYywgc2tpcENsb3NpbmcpIHtcbiAgaWYgKCFza2lwQ2xvc2luZyAmJiAhU0FGRV9DTE9TSU5HKSByZXR1cm4gZmFsc2U7XG4gIHZhciBzYWZlID0gZmFsc2U7XG4gIHRyeSB7XG4gICAgdmFyIGFyciA9IFs3XTtcbiAgICB2YXIgaXRlciA9IGFycltJVEVSQVRPUl0oKTtcbiAgICBpdGVyLm5leHQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB7IGRvbmU6IHNhZmUgPSB0cnVlIH07IH07XG4gICAgYXJyW0lURVJBVE9SXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGl0ZXI7IH07XG4gICAgZXhlYyhhcnIpO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbiAgcmV0dXJuIHNhZmU7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///57\n")},function(module,exports,__webpack_require__){"use strict";eval("\n\nvar classof = __webpack_require__(44);\nvar builtinExec = RegExp.prototype.exec;\n\n // `RegExpExec` abstract operation\n// https://tc39.github.io/ecma262/#sec-regexpexec\nmodule.exports = function (R, S) {\n var exec = R.exec;\n if (typeof exec === 'function') {\n var result = exec.call(R, S);\n if (typeof result !== 'object') {\n throw new TypeError('RegExp exec method returned something other than an Object or null');\n }\n return result;\n }\n if (classof(R) !== 'RegExp') {\n throw new TypeError('RegExp#exec called on incompatible receiver');\n }\n return builtinExec.call(R, S);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcmVnZXhwLWV4ZWMtYWJzdHJhY3QuanM/NWYxYiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixjQUFjLG1CQUFPLENBQUMsRUFBWTtBQUNsQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiI1OC5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuL19jbGFzc29mJyk7XG52YXIgYnVpbHRpbkV4ZWMgPSBSZWdFeHAucHJvdG90eXBlLmV4ZWM7XG5cbiAvLyBgUmVnRXhwRXhlY2AgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1yZWdleHBleGVjXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChSLCBTKSB7XG4gIHZhciBleGVjID0gUi5leGVjO1xuICBpZiAodHlwZW9mIGV4ZWMgPT09ICdmdW5jdGlvbicpIHtcbiAgICB2YXIgcmVzdWx0ID0gZXhlYy5jYWxsKFIsIFMpO1xuICAgIGlmICh0eXBlb2YgcmVzdWx0ICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUmVnRXhwIGV4ZWMgbWV0aG9kIHJldHVybmVkIHNvbWV0aGluZyBvdGhlciB0aGFuIGFuIE9iamVjdCBvciBudWxsJyk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgaWYgKGNsYXNzb2YoUikgIT09ICdSZWdFeHAnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUmVnRXhwI2V4ZWMgY2FsbGVkIG9uIGluY29tcGF0aWJsZSByZWNlaXZlcicpO1xuICB9XG4gIHJldHVybiBidWlsdGluRXhlYy5jYWxsKFIsIFMpO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///58\n")},function(module,exports,__webpack_require__){"use strict";eval("\n__webpack_require__(113);\nvar redefine = __webpack_require__(12);\nvar hide = __webpack_require__(11);\nvar fails = __webpack_require__(3);\nvar defined = __webpack_require__(24);\nvar wks = __webpack_require__(5);\nvar regexpExec = __webpack_require__(87);\n\nvar SPECIES = wks('species');\n\nvar REPLACE_SUPPORTS_NAMED_GROUPS = !fails(function () {\n // #replace needs built-in support for named groups.\n // #match works fine because it just return the exec results, even if it has\n // a \"grops\" property.\n var re = /./;\n re.exec = function () {\n var result = [];\n result.groups = { a: '7' };\n return result;\n };\n return ''.replace(re, '$') !== '7';\n});\n\nvar SPLIT_WORKS_WITH_OVERWRITTEN_EXEC = (function () {\n // Chrome 51 has a buggy \"split\" implementation when RegExp#exec !== nativeExec\n var re = /(?:)/;\n var originalExec = re.exec;\n re.exec = function () { return originalExec.apply(this, arguments); };\n var result = 'ab'.split(re);\n return result.length === 2 && result[0] === 'a' && result[1] === 'b';\n})();\n\nmodule.exports = function (KEY, length, exec) {\n var SYMBOL = wks(KEY);\n\n var DELEGATES_TO_SYMBOL = !fails(function () {\n // String methods call symbol-named RegEp methods\n var O = {};\n O[SYMBOL] = function () { return 7; };\n return ''[KEY](O) != 7;\n });\n\n var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL ? !fails(function () {\n // Symbol-named RegExp methods call .exec\n var execCalled = false;\n var re = /a/;\n re.exec = function () { execCalled = true; return null; };\n if (KEY === 'split') {\n // RegExp[@@split] doesn't call the regex's exec method, but first creates\n // a new one. We need to return the patched regex when creating the new one.\n re.constructor = {};\n re.constructor[SPECIES] = function () { return re; };\n }\n re[SYMBOL]('');\n return !execCalled;\n }) : undefined;\n\n if (\n !DELEGATES_TO_SYMBOL ||\n !DELEGATES_TO_EXEC ||\n (KEY === 'replace' && !REPLACE_SUPPORTS_NAMED_GROUPS) ||\n (KEY === 'split' && !SPLIT_WORKS_WITH_OVERWRITTEN_EXEC)\n ) {\n var nativeRegExpMethod = /./[SYMBOL];\n var fns = exec(\n defined,\n SYMBOL,\n ''[KEY],\n function maybeCallNative(nativeMethod, regexp, str, arg2, forceStringMethod) {\n if (regexp.exec === regexpExec) {\n if (DELEGATES_TO_SYMBOL && !forceStringMethod) {\n // The native String method already delegates to @@method (this\n // polyfilled function), leasing to infinite recursion.\n // We avoid it by directly calling the native @@method method.\n return { done: true, value: nativeRegExpMethod.call(regexp, str, arg2) };\n }\n return { done: true, value: nativeMethod.call(str, regexp, arg2) };\n }\n return { done: false };\n }\n );\n var strfn = fns[0];\n var rxfn = fns[1];\n\n redefine(String.prototype, KEY, strfn);\n hide(RegExp.prototype, SYMBOL, length == 2\n // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)\n // 21.2.5.11 RegExp.prototype[@@split](string, limit)\n ? function (string, arg) { return rxfn.call(string, this, arg); }\n // 21.2.5.6 RegExp.prototype[@@match](string)\n // 21.2.5.9 RegExp.prototype[@@search](string)\n : function (string) { return rxfn.call(string, this); }\n );\n }\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZml4LXJlLXdrcy5qcz8yMTRmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsbUJBQU8sQ0FBQyxHQUFtQjtBQUMzQixlQUFlLG1CQUFPLENBQUMsRUFBYTtBQUNwQyxXQUFXLG1CQUFPLENBQUMsRUFBUztBQUM1QixZQUFZLG1CQUFPLENBQUMsQ0FBVTtBQUM5QixjQUFjLG1CQUFPLENBQUMsRUFBWTtBQUNsQyxVQUFVLG1CQUFPLENBQUMsQ0FBUTtBQUMxQixpQkFBaUIsbUJBQU8sQ0FBQyxFQUFnQjs7QUFFekM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5Qiw0Q0FBNEM7QUFDckU7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkIsVUFBVTtBQUN2QztBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkIsbUJBQW1CLGFBQWE7QUFDM0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkMsV0FBVztBQUN4RDtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0I7QUFDcEI7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0MscUNBQXFDO0FBQ3JFO0FBQ0E7QUFDQSwyQkFBMkIsZ0NBQWdDO0FBQzNEO0FBQ0E7QUFDQSIsImZpbGUiOiI1OS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4vZXM2LnJlZ2V4cC5leGVjJyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG52YXIgd2tzID0gcmVxdWlyZSgnLi9fd2tzJyk7XG52YXIgcmVnZXhwRXhlYyA9IHJlcXVpcmUoJy4vX3JlZ2V4cC1leGVjJyk7XG5cbnZhciBTUEVDSUVTID0gd2tzKCdzcGVjaWVzJyk7XG5cbnZhciBSRVBMQUNFX1NVUFBPUlRTX05BTUVEX0dST1VQUyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vICNyZXBsYWNlIG5lZWRzIGJ1aWx0LWluIHN1cHBvcnQgZm9yIG5hbWVkIGdyb3Vwcy5cbiAgLy8gI21hdGNoIHdvcmtzIGZpbmUgYmVjYXVzZSBpdCBqdXN0IHJldHVybiB0aGUgZXhlYyByZXN1bHRzLCBldmVuIGlmIGl0IGhhc1xuICAvLyBhIFwiZ3JvcHNcIiBwcm9wZXJ0eS5cbiAgdmFyIHJlID0gLy4vO1xuICByZS5leGVjID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICByZXN1bHQuZ3JvdXBzID0geyBhOiAnNycgfTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuICByZXR1cm4gJycucmVwbGFjZShyZSwgJyQ8YT4nKSAhPT0gJzcnO1xufSk7XG5cbnZhciBTUExJVF9XT1JLU19XSVRIX09WRVJXUklUVEVOX0VYRUMgPSAoZnVuY3Rpb24gKCkge1xuICAvLyBDaHJvbWUgNTEgaGFzIGEgYnVnZ3kgXCJzcGxpdFwiIGltcGxlbWVudGF0aW9uIHdoZW4gUmVnRXhwI2V4ZWMgIT09IG5hdGl2ZUV4ZWNcbiAgdmFyIHJlID0gLyg/OikvO1xuICB2YXIgb3JpZ2luYWxFeGVjID0gcmUuZXhlYztcbiAgcmUuZXhlYyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG9yaWdpbmFsRXhlYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9O1xuICB2YXIgcmVzdWx0ID0gJ2FiJy5zcGxpdChyZSk7XG4gIHJldHVybiByZXN1bHQubGVuZ3RoID09PSAyICYmIHJlc3VsdFswXSA9PT0gJ2EnICYmIHJlc3VsdFsxXSA9PT0gJ2InO1xufSkoKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoS0VZLCBsZW5ndGgsIGV4ZWMpIHtcbiAgdmFyIFNZTUJPTCA9IHdrcyhLRVkpO1xuXG4gIHZhciBERUxFR0FURVNfVE9fU1lNQk9MID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAvLyBTdHJpbmcgbWV0aG9kcyBjYWxsIHN5bWJvbC1uYW1lZCBSZWdFcCBtZXRob2RzXG4gICAgdmFyIE8gPSB7fTtcbiAgICBPW1NZTUJPTF0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9O1xuICAgIHJldHVybiAnJ1tLRVldKE8pICE9IDc7XG4gIH0pO1xuXG4gIHZhciBERUxFR0FURVNfVE9fRVhFQyA9IERFTEVHQVRFU19UT19TWU1CT0wgPyAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIFN5bWJvbC1uYW1lZCBSZWdFeHAgbWV0aG9kcyBjYWxsIC5leGVjXG4gICAgdmFyIGV4ZWNDYWxsZWQgPSBmYWxzZTtcbiAgICB2YXIgcmUgPSAvYS87XG4gICAgcmUuZXhlYyA9IGZ1bmN0aW9uICgpIHsgZXhlY0NhbGxlZCA9IHRydWU7IHJldHVybiBudWxsOyB9O1xuICAgIGlmIChLRVkgPT09ICdzcGxpdCcpIHtcbiAgICAgIC8vIFJlZ0V4cFtAQHNwbGl0XSBkb2Vzbid0IGNhbGwgdGhlIHJlZ2V4J3MgZXhlYyBtZXRob2QsIGJ1dCBmaXJzdCBjcmVhdGVzXG4gICAgICAvLyBhIG5ldyBvbmUuIFdlIG5lZWQgdG8gcmV0dXJuIHRoZSBwYXRjaGVkIHJlZ2V4IHdoZW4gY3JlYXRpbmcgdGhlIG5ldyBvbmUuXG4gICAgICByZS5jb25zdHJ1Y3RvciA9IHt9O1xuICAgICAgcmUuY29uc3RydWN0b3JbU1BFQ0lFU10gPSBmdW5jdGlvbiAoKSB7IHJldHVybiByZTsgfTtcbiAgICB9XG4gICAgcmVbU1lNQk9MXSgnJyk7XG4gICAgcmV0dXJuICFleGVjQ2FsbGVkO1xuICB9KSA6IHVuZGVmaW5lZDtcblxuICBpZiAoXG4gICAgIURFTEVHQVRFU19UT19TWU1CT0wgfHxcbiAgICAhREVMRUdBVEVTX1RPX0VYRUMgfHxcbiAgICAoS0VZID09PSAncmVwbGFjZScgJiYgIVJFUExBQ0VfU1VQUE9SVFNfTkFNRURfR1JPVVBTKSB8fFxuICAgIChLRVkgPT09ICdzcGxpdCcgJiYgIVNQTElUX1dPUktTX1dJVEhfT1ZFUldSSVRURU5fRVhFQylcbiAgKSB7XG4gICAgdmFyIG5hdGl2ZVJlZ0V4cE1ldGhvZCA9IC8uL1tTWU1CT0xdO1xuICAgIHZhciBmbnMgPSBleGVjKFxuICAgICAgZGVmaW5lZCxcbiAgICAgIFNZTUJPTCxcbiAgICAgICcnW0tFWV0sXG4gICAgICBmdW5jdGlvbiBtYXliZUNhbGxOYXRpdmUobmF0aXZlTWV0aG9kLCByZWdleHAsIHN0ciwgYXJnMiwgZm9yY2VTdHJpbmdNZXRob2QpIHtcbiAgICAgICAgaWYgKHJlZ2V4cC5leGVjID09PSByZWdleHBFeGVjKSB7XG4gICAgICAgICAgaWYgKERFTEVHQVRFU19UT19TWU1CT0wgJiYgIWZvcmNlU3RyaW5nTWV0aG9kKSB7XG4gICAgICAgICAgICAvLyBUaGUgbmF0aXZlIFN0cmluZyBtZXRob2QgYWxyZWFkeSBkZWxlZ2F0ZXMgdG8gQEBtZXRob2QgKHRoaXNcbiAgICAgICAgICAgIC8vIHBvbHlmaWxsZWQgZnVuY3Rpb24pLCBsZWFzaW5nIHRvIGluZmluaXRlIHJlY3Vyc2lvbi5cbiAgICAgICAgICAgIC8vIFdlIGF2b2lkIGl0IGJ5IGRpcmVjdGx5IGNhbGxpbmcgdGhlIG5hdGl2ZSBAQG1ldGhvZCBtZXRob2QuXG4gICAgICAgICAgICByZXR1cm4geyBkb25lOiB0cnVlLCB2YWx1ZTogbmF0aXZlUmVnRXhwTWV0aG9kLmNhbGwocmVnZXhwLCBzdHIsIGFyZzIpIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB7IGRvbmU6IHRydWUsIHZhbHVlOiBuYXRpdmVNZXRob2QuY2FsbChzdHIsIHJlZ2V4cCwgYXJnMikgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBkb25lOiBmYWxzZSB9O1xuICAgICAgfVxuICAgICk7XG4gICAgdmFyIHN0cmZuID0gZm5zWzBdO1xuICAgIHZhciByeGZuID0gZm5zWzFdO1xuXG4gICAgcmVkZWZpbmUoU3RyaW5nLnByb3RvdHlwZSwgS0VZLCBzdHJmbik7XG4gICAgaGlkZShSZWdFeHAucHJvdG90eXBlLCBTWU1CT0wsIGxlbmd0aCA9PSAyXG4gICAgICAvLyAyMS4yLjUuOCBSZWdFeHAucHJvdG90eXBlW0BAcmVwbGFjZV0oc3RyaW5nLCByZXBsYWNlVmFsdWUpXG4gICAgICAvLyAyMS4yLjUuMTEgUmVnRXhwLnByb3RvdHlwZVtAQHNwbGl0XShzdHJpbmcsIGxpbWl0KVxuICAgICAgPyBmdW5jdGlvbiAoc3RyaW5nLCBhcmcpIHsgcmV0dXJuIHJ4Zm4uY2FsbChzdHJpbmcsIHRoaXMsIGFyZyk7IH1cbiAgICAgIC8vIDIxLjIuNS42IFJlZ0V4cC5wcm90b3R5cGVbQEBtYXRjaF0oc3RyaW5nKVxuICAgICAgLy8gMjEuMi41LjkgUmVnRXhwLnByb3RvdHlwZVtAQHNlYXJjaF0oc3RyaW5nKVxuICAgICAgOiBmdW5jdGlvbiAoc3RyaW5nKSB7IHJldHVybiByeGZuLmNhbGwoc3RyaW5nLCB0aGlzKTsgfVxuICAgICk7XG4gIH1cbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///59\n")},function(module,exports,__webpack_require__){eval("var global = __webpack_require__(2);\nvar navigator = global.navigator;\n\nmodule.exports = navigator && navigator.userAgent || '';\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdXNlci1hZ2VudC5qcz9hMjVmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGFBQWEsbUJBQU8sQ0FBQyxDQUFXO0FBQ2hDOztBQUVBIiwiZmlsZSI6IjYwLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIG5hdmlnYXRvciA9IGdsb2JhbC5uYXZpZ2F0b3I7XG5cbm1vZHVsZS5leHBvcnRzID0gbmF2aWdhdG9yICYmIG5hdmlnYXRvci51c2VyQWdlbnQgfHwgJyc7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///60\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar global = __webpack_require__(2);\nvar $export = __webpack_require__(0);\nvar redefine = __webpack_require__(12);\nvar redefineAll = __webpack_require__(41);\nvar meta = __webpack_require__(30);\nvar forOf = __webpack_require__(40);\nvar anInstance = __webpack_require__(39);\nvar isObject = __webpack_require__(4);\nvar fails = __webpack_require__(3);\nvar $iterDetect = __webpack_require__(57);\nvar setToStringTag = __webpack_require__(43);\nvar inheritIfRequired = __webpack_require__(73);\n\nmodule.exports = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) {\n var Base = global[NAME];\n var C = Base;\n var ADDER = IS_MAP ? 'set' : 'add';\n var proto = C && C.prototype;\n var O = {};\n var fixMethod = function (KEY) {\n var fn = proto[KEY];\n redefine(proto, KEY,\n KEY == 'delete' ? function (a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'has' ? function has(a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'get' ? function get(a) {\n return IS_WEAK && !isObject(a) ? undefined : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'add' ? function add(a) { fn.call(this, a === 0 ? 0 : a); return this; }\n : function set(a, b) { fn.call(this, a === 0 ? 0 : a, b); return this; }\n );\n };\n if (typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function () {\n new C().entries().next();\n }))) {\n // create collection constructor\n C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);\n redefineAll(C.prototype, methods);\n meta.NEED = true;\n } else {\n var instance = new C();\n // early implementations not supports chaining\n var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;\n // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false\n var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); });\n // most early implementations doesn't supports iterables, most modern - not close it correctly\n var ACCEPT_ITERABLES = $iterDetect(function (iter) { new C(iter); }); // eslint-disable-line no-new\n // for early implementations -0 and +0 not the same\n var BUGGY_ZERO = !IS_WEAK && fails(function () {\n // V8 ~ Chromium 42- fails only with 5+ elements\n var $instance = new C();\n var index = 5;\n while (index--) $instance[ADDER](index, index);\n return !$instance.has(-0);\n });\n if (!ACCEPT_ITERABLES) {\n C = wrapper(function (target, iterable) {\n anInstance(target, C, NAME);\n var that = inheritIfRequired(new Base(), target, C);\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n return that;\n });\n C.prototype = proto;\n proto.constructor = C;\n }\n if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {\n fixMethod('delete');\n fixMethod('has');\n IS_MAP && fixMethod('get');\n }\n if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);\n // weak collections should not contains .clear method\n if (IS_WEAK && proto.clear) delete proto.clear;\n }\n\n setToStringTag(C, NAME);\n\n O[NAME] = C;\n $export($export.G + $export.W + $export.F * (C != Base), O);\n\n if (!IS_WEAK) common.setStrong(C, NAME, IS_MAP);\n\n return C;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY29sbGVjdGlvbi5qcz9lMGI4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsYUFBYSxtQkFBTyxDQUFDLENBQVc7QUFDaEMsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsZUFBZSxtQkFBTyxDQUFDLEVBQWE7QUFDcEMsa0JBQWtCLG1CQUFPLENBQUMsRUFBaUI7QUFDM0MsV0FBVyxtQkFBTyxDQUFDLEVBQVM7QUFDNUIsWUFBWSxtQkFBTyxDQUFDLEVBQVc7QUFDL0IsaUJBQWlCLG1CQUFPLENBQUMsRUFBZ0I7QUFDekMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsWUFBWSxtQkFBTyxDQUFDLENBQVU7QUFDOUIsa0JBQWtCLG1CQUFPLENBQUMsRUFBZ0I7QUFDMUMscUJBQXFCLG1CQUFPLENBQUMsRUFBc0I7QUFDbkQsd0JBQXdCLG1CQUFPLENBQUMsRUFBd0I7O0FBRXhEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxPQUFPO0FBQ1A7QUFDQSxPQUFPLG1DQUFtQyxnQ0FBZ0MsYUFBYTtBQUN2Riw4QkFBOEIsbUNBQW1DLGFBQWE7QUFDOUU7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLHFEQUFxRDtBQUNyRDtBQUNBLGtEQUFrRCxpQkFBaUIsRUFBRTtBQUNyRTtBQUNBLHdEQUF3RCxhQUFhLEVBQUUsRUFBRTtBQUN6RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSIsImZpbGUiOiI2MS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIHJlZGVmaW5lQWxsID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUtYWxsJyk7XG52YXIgbWV0YSA9IHJlcXVpcmUoJy4vX21ldGEnKTtcbnZhciBmb3JPZiA9IHJlcXVpcmUoJy4vX2Zvci1vZicpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuL19hbi1pbnN0YW5jZScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyICRpdGVyRGV0ZWN0ID0gcmVxdWlyZSgnLi9faXRlci1kZXRlY3QnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgaW5oZXJpdElmUmVxdWlyZWQgPSByZXF1aXJlKCcuL19pbmhlcml0LWlmLXJlcXVpcmVkJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE5BTUUsIHdyYXBwZXIsIG1ldGhvZHMsIGNvbW1vbiwgSVNfTUFQLCBJU19XRUFLKSB7XG4gIHZhciBCYXNlID0gZ2xvYmFsW05BTUVdO1xuICB2YXIgQyA9IEJhc2U7XG4gIHZhciBBRERFUiA9IElTX01BUCA/ICdzZXQnIDogJ2FkZCc7XG4gIHZhciBwcm90byA9IEMgJiYgQy5wcm90b3R5cGU7XG4gIHZhciBPID0ge307XG4gIHZhciBmaXhNZXRob2QgPSBmdW5jdGlvbiAoS0VZKSB7XG4gICAgdmFyIGZuID0gcHJvdG9bS0VZXTtcbiAgICByZWRlZmluZShwcm90bywgS0VZLFxuICAgICAgS0VZID09ICdkZWxldGUnID8gZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgcmV0dXJuIElTX1dFQUsgJiYgIWlzT2JqZWN0KGEpID8gZmFsc2UgOiBmbi5jYWxsKHRoaXMsIGEgPT09IDAgPyAwIDogYSk7XG4gICAgICB9IDogS0VZID09ICdoYXMnID8gZnVuY3Rpb24gaGFzKGEpIHtcbiAgICAgICAgcmV0dXJuIElTX1dFQUsgJiYgIWlzT2JqZWN0KGEpID8gZmFsc2UgOiBmbi5jYWxsKHRoaXMsIGEgPT09IDAgPyAwIDogYSk7XG4gICAgICB9IDogS0VZID09ICdnZXQnID8gZnVuY3Rpb24gZ2V0KGEpIHtcbiAgICAgICAgcmV0dXJuIElTX1dFQUsgJiYgIWlzT2JqZWN0KGEpID8gdW5kZWZpbmVkIDogZm4uY2FsbCh0aGlzLCBhID09PSAwID8gMCA6IGEpO1xuICAgICAgfSA6IEtFWSA9PSAnYWRkJyA/IGZ1bmN0aW9uIGFkZChhKSB7IGZuLmNhbGwodGhpcywgYSA9PT0gMCA/IDAgOiBhKTsgcmV0dXJuIHRoaXM7IH1cbiAgICAgICAgOiBmdW5jdGlvbiBzZXQoYSwgYikgeyBmbi5jYWxsKHRoaXMsIGEgPT09IDAgPyAwIDogYSwgYik7IHJldHVybiB0aGlzOyB9XG4gICAgKTtcbiAgfTtcbiAgaWYgKHR5cGVvZiBDICE9ICdmdW5jdGlvbicgfHwgIShJU19XRUFLIHx8IHByb3RvLmZvckVhY2ggJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICBuZXcgQygpLmVudHJpZXMoKS5uZXh0KCk7XG4gIH0pKSkge1xuICAgIC8vIGNyZWF0ZSBjb2xsZWN0aW9uIGNvbnN0cnVjdG9yXG4gICAgQyA9IGNvbW1vbi5nZXRDb25zdHJ1Y3Rvcih3cmFwcGVyLCBOQU1FLCBJU19NQVAsIEFEREVSKTtcbiAgICByZWRlZmluZUFsbChDLnByb3RvdHlwZSwgbWV0aG9kcyk7XG4gICAgbWV0YS5ORUVEID0gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgaW5zdGFuY2UgPSBuZXcgQygpO1xuICAgIC8vIGVhcmx5IGltcGxlbWVudGF0aW9ucyBub3Qgc3VwcG9ydHMgY2hhaW5pbmdcbiAgICB2YXIgSEFTTlRfQ0hBSU5JTkcgPSBpbnN0YW5jZVtBRERFUl0oSVNfV0VBSyA/IHt9IDogLTAsIDEpICE9IGluc3RhbmNlO1xuICAgIC8vIFY4IH4gIENocm9taXVtIDQwLSB3ZWFrLWNvbGxlY3Rpb25zIHRocm93cyBvbiBwcmltaXRpdmVzLCBidXQgc2hvdWxkIHJldHVybiBmYWxzZVxuICAgIHZhciBUSFJPV1NfT05fUFJJTUlUSVZFUyA9IGZhaWxzKGZ1bmN0aW9uICgpIHsgaW5zdGFuY2UuaGFzKDEpOyB9KTtcbiAgICAvLyBtb3N0IGVhcmx5IGltcGxlbWVudGF0aW9ucyBkb2Vzbid0IHN1cHBvcnRzIGl0ZXJhYmxlcywgbW9zdCBtb2Rlcm4gLSBub3QgY2xvc2UgaXQgY29ycmVjdGx5XG4gICAgdmFyIEFDQ0VQVF9JVEVSQUJMRVMgPSAkaXRlckRldGVjdChmdW5jdGlvbiAoaXRlcikgeyBuZXcgQyhpdGVyKTsgfSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgLy8gZm9yIGVhcmx5IGltcGxlbWVudGF0aW9ucyAtMCBhbmQgKzAgbm90IHRoZSBzYW1lXG4gICAgdmFyIEJVR0dZX1pFUk8gPSAhSVNfV0VBSyAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBWOCB+IENocm9taXVtIDQyLSBmYWlscyBvbmx5IHdpdGggNSsgZWxlbWVudHNcbiAgICAgIHZhciAkaW5zdGFuY2UgPSBuZXcgQygpO1xuICAgICAgdmFyIGluZGV4ID0gNTtcbiAgICAgIHdoaWxlIChpbmRleC0tKSAkaW5zdGFuY2VbQURERVJdKGluZGV4LCBpbmRleCk7XG4gICAgICByZXR1cm4gISRpbnN0YW5jZS5oYXMoLTApO1xuICAgIH0pO1xuICAgIGlmICghQUNDRVBUX0lURVJBQkxFUykge1xuICAgICAgQyA9IHdyYXBwZXIoZnVuY3Rpb24gKHRhcmdldCwgaXRlcmFibGUpIHtcbiAgICAgICAgYW5JbnN0YW5jZSh0YXJnZXQsIEMsIE5BTUUpO1xuICAgICAgICB2YXIgdGhhdCA9IGluaGVyaXRJZlJlcXVpcmVkKG5ldyBCYXNlKCksIHRhcmdldCwgQyk7XG4gICAgICAgIGlmIChpdGVyYWJsZSAhPSB1bmRlZmluZWQpIGZvck9mKGl0ZXJhYmxlLCBJU19NQVAsIHRoYXRbQURERVJdLCB0aGF0KTtcbiAgICAgICAgcmV0dXJuIHRoYXQ7XG4gICAgICB9KTtcbiAgICAgIEMucHJvdG90eXBlID0gcHJvdG87XG4gICAgICBwcm90by5jb25zdHJ1Y3RvciA9IEM7XG4gICAgfVxuICAgIGlmIChUSFJPV1NfT05fUFJJTUlUSVZFUyB8fCBCVUdHWV9aRVJPKSB7XG4gICAgICBmaXhNZXRob2QoJ2RlbGV0ZScpO1xuICAgICAgZml4TWV0aG9kKCdoYXMnKTtcbiAgICAgIElTX01BUCAmJiBmaXhNZXRob2QoJ2dldCcpO1xuICAgIH1cbiAgICBpZiAoQlVHR1lfWkVSTyB8fCBIQVNOVF9DSEFJTklORykgZml4TWV0aG9kKEFEREVSKTtcbiAgICAvLyB3ZWFrIGNvbGxlY3Rpb25zIHNob3VsZCBub3QgY29udGFpbnMgLmNsZWFyIG1ldGhvZFxuICAgIGlmIChJU19XRUFLICYmIHByb3RvLmNsZWFyKSBkZWxldGUgcHJvdG8uY2xlYXI7XG4gIH1cblxuICBzZXRUb1N0cmluZ1RhZyhDLCBOQU1FKTtcblxuICBPW05BTUVdID0gQztcbiAgJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LlcgKyAkZXhwb3J0LkYgKiAoQyAhPSBCYXNlKSwgTyk7XG5cbiAgaWYgKCFJU19XRUFLKSBjb21tb24uc2V0U3Ryb25nKEMsIE5BTUUsIElTX01BUCk7XG5cbiAgcmV0dXJuIEM7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///61\n")},function(module,exports,__webpack_require__){eval("var global = __webpack_require__(2);\nvar hide = __webpack_require__(11);\nvar uid = __webpack_require__(33);\nvar TYPED = uid('typed_array');\nvar VIEW = uid('view');\nvar ABV = !!(global.ArrayBuffer && global.DataView);\nvar CONSTR = ABV;\nvar i = 0;\nvar l = 9;\nvar Typed;\n\nvar TypedArrayConstructors = (\n 'Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array'\n).split(',');\n\nwhile (i < l) {\n if (Typed = global[TypedArrayConstructors[i++]]) {\n hide(Typed.prototype, TYPED, true);\n hide(Typed.prototype, VIEW, true);\n } else CONSTR = false;\n}\n\nmodule.exports = {\n ABV: ABV,\n CONSTR: CONSTR,\n TYPED: TYPED,\n VIEW: VIEW\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdHlwZWQuanM/MGY4OCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxhQUFhLG1CQUFPLENBQUMsQ0FBVztBQUNoQyxXQUFXLG1CQUFPLENBQUMsRUFBUztBQUM1QixVQUFVLG1CQUFPLENBQUMsRUFBUTtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjYyLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi9fdWlkJyk7XG52YXIgVFlQRUQgPSB1aWQoJ3R5cGVkX2FycmF5Jyk7XG52YXIgVklFVyA9IHVpZCgndmlldycpO1xudmFyIEFCViA9ICEhKGdsb2JhbC5BcnJheUJ1ZmZlciAmJiBnbG9iYWwuRGF0YVZpZXcpO1xudmFyIENPTlNUUiA9IEFCVjtcbnZhciBpID0gMDtcbnZhciBsID0gOTtcbnZhciBUeXBlZDtcblxudmFyIFR5cGVkQXJyYXlDb25zdHJ1Y3RvcnMgPSAoXG4gICdJbnQ4QXJyYXksVWludDhBcnJheSxVaW50OENsYW1wZWRBcnJheSxJbnQxNkFycmF5LFVpbnQxNkFycmF5LEludDMyQXJyYXksVWludDMyQXJyYXksRmxvYXQzMkFycmF5LEZsb2F0NjRBcnJheSdcbikuc3BsaXQoJywnKTtcblxud2hpbGUgKGkgPCBsKSB7XG4gIGlmIChUeXBlZCA9IGdsb2JhbFtUeXBlZEFycmF5Q29uc3RydWN0b3JzW2krK11dKSB7XG4gICAgaGlkZShUeXBlZC5wcm90b3R5cGUsIFRZUEVELCB0cnVlKTtcbiAgICBoaWRlKFR5cGVkLnByb3RvdHlwZSwgVklFVywgdHJ1ZSk7XG4gIH0gZWxzZSBDT05TVFIgPSBmYWxzZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEFCVjogQUJWLFxuICBDT05TVFI6IENPTlNUUixcbiAgVFlQRUQ6IFRZUEVELFxuICBWSUVXOiBWSUVXXG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///62\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// Forced replacement prototype accessors methods\nmodule.exports = __webpack_require__(29) || !__webpack_require__(3)(function () {\n var K = Math.random();\n // In FF throws only define methods\n // eslint-disable-next-line no-undef, no-useless-call\n __defineSetter__.call(null, K, function () { /* empty */ });\n delete __webpack_require__(2)[K];\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWZvcmNlZC1wYW0uanM/YzViNCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsaUJBQWlCLG1CQUFPLENBQUMsRUFBWSxNQUFNLG1CQUFPLENBQUMsQ0FBVTtBQUM3RDtBQUNBO0FBQ0E7QUFDQSw4Q0FBOEMsY0FBYztBQUM1RCxTQUFTLG1CQUFPLENBQUMsQ0FBVztBQUM1QixDQUFDIiwiZmlsZSI6IjYzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gRm9yY2VkIHJlcGxhY2VtZW50IHByb3RvdHlwZSBhY2Nlc3NvcnMgbWV0aG9kc1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19saWJyYXJ5JykgfHwgIXJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICB2YXIgSyA9IE1hdGgucmFuZG9tKCk7XG4gIC8vIEluIEZGIHRocm93cyBvbmx5IGRlZmluZSBtZXRob2RzXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZiwgbm8tdXNlbGVzcy1jYWxsXG4gIF9fZGVmaW5lU2V0dGVyX18uY2FsbChudWxsLCBLLCBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pO1xuICBkZWxldGUgcmVxdWlyZSgnLi9fZ2xvYmFsJylbS107XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///63\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// https://tc39.github.io/proposal-setmap-offrom/\nvar $export = __webpack_require__(0);\n\nmodule.exports = function (COLLECTION) {\n $export($export.S, COLLECTION, { of: function of() {\n var length = arguments.length;\n var A = new Array(length);\n while (length--) A[length] = arguments[length];\n return new this(A);\n } });\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2V0LWNvbGxlY3Rpb24tb2YuanM/YzZhMSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDO0FBQ0Esa0NBQWtDO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRyxFQUFFO0FBQ0wiLCJmaWxlIjoiNjQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChDT0xMRUNUSU9OKSB7XG4gICRleHBvcnQoJGV4cG9ydC5TLCBDT0xMRUNUSU9OLCB7IG9mOiBmdW5jdGlvbiBvZigpIHtcbiAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgQSA9IG5ldyBBcnJheShsZW5ndGgpO1xuICAgIHdoaWxlIChsZW5ndGgtLSkgQVtsZW5ndGhdID0gYXJndW1lbnRzW2xlbmd0aF07XG4gICAgcmV0dXJuIG5ldyB0aGlzKEEpO1xuICB9IH0pO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///64\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// https://tc39.github.io/proposal-setmap-offrom/\nvar $export = __webpack_require__(0);\nvar aFunction = __webpack_require__(10);\nvar ctx = __webpack_require__(19);\nvar forOf = __webpack_require__(40);\n\nmodule.exports = function (COLLECTION) {\n $export($export.S, COLLECTION, { from: function from(source /* , mapFn, thisArg */) {\n var mapFn = arguments[1];\n var mapping, A, n, cb;\n aFunction(this);\n mapping = mapFn !== undefined;\n if (mapping) aFunction(mapFn);\n if (source == undefined) return new this();\n A = [];\n if (mapping) {\n n = 0;\n cb = ctx(mapFn, arguments[2], 2);\n forOf(source, false, function (nextItem) {\n A.push(cb(nextItem, n++));\n });\n } else {\n forOf(source, false, A.push, A);\n }\n return new this(A);\n } });\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2V0LWNvbGxlY3Rpb24tZnJvbS5qcz8yOGU0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDLFVBQVUsbUJBQU8sQ0FBQyxFQUFRO0FBQzFCLFlBQVksbUJBQU8sQ0FBQyxFQUFXOztBQUUvQjtBQUNBLGtDQUFrQztBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEdBQUcsRUFBRTtBQUNMIiwiZmlsZSI6IjY1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgZm9yT2YgPSByZXF1aXJlKCcuL19mb3Itb2YnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQ09MTEVDVElPTikge1xuICAkZXhwb3J0KCRleHBvcnQuUywgQ09MTEVDVElPTiwgeyBmcm9tOiBmdW5jdGlvbiBmcm9tKHNvdXJjZSAvKiAsIG1hcEZuLCB0aGlzQXJnICovKSB7XG4gICAgdmFyIG1hcEZuID0gYXJndW1lbnRzWzFdO1xuICAgIHZhciBtYXBwaW5nLCBBLCBuLCBjYjtcbiAgICBhRnVuY3Rpb24odGhpcyk7XG4gICAgbWFwcGluZyA9IG1hcEZuICE9PSB1bmRlZmluZWQ7XG4gICAgaWYgKG1hcHBpbmcpIGFGdW5jdGlvbihtYXBGbik7XG4gICAgaWYgKHNvdXJjZSA9PSB1bmRlZmluZWQpIHJldHVybiBuZXcgdGhpcygpO1xuICAgIEEgPSBbXTtcbiAgICBpZiAobWFwcGluZykge1xuICAgICAgbiA9IDA7XG4gICAgICBjYiA9IGN0eChtYXBGbiwgYXJndW1lbnRzWzJdLCAyKTtcbiAgICAgIGZvck9mKHNvdXJjZSwgZmFsc2UsIGZ1bmN0aW9uIChuZXh0SXRlbSkge1xuICAgICAgICBBLnB1c2goY2IobmV4dEl0ZW0sIG4rKykpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvck9mKHNvdXJjZSwgZmFsc2UsIEEucHVzaCwgQSk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgdGhpcyhBKTtcbiAgfSB9KTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///65\n")},function(module,exports,__webpack_require__){eval("var isObject = __webpack_require__(4);\nvar document = __webpack_require__(2).document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n return is ? document.createElement(it) : {};\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZG9tLWNyZWF0ZS5qcz8yMzBlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGVBQWUsbUJBQU8sQ0FBQyxDQUFXO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiNjYuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBkb2N1bWVudCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLmRvY3VtZW50O1xuLy8gdHlwZW9mIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQgaXMgJ29iamVjdCcgaW4gb2xkIElFXG52YXIgaXMgPSBpc09iamVjdChkb2N1bWVudCkgJiYgaXNPYmplY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXMgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGl0KSA6IHt9O1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///66\n")},function(module,exports,__webpack_require__){eval("var global = __webpack_require__(2);\nvar core = __webpack_require__(18);\nvar LIBRARY = __webpack_require__(29);\nvar wksExt = __webpack_require__(95);\nvar defineProperty = __webpack_require__(8).f;\nmodule.exports = function (name) {\n var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});\n if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) });\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fd2tzLWRlZmluZS5qcz8zYTcyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGFBQWEsbUJBQU8sQ0FBQyxDQUFXO0FBQ2hDLFdBQVcsbUJBQU8sQ0FBQyxFQUFTO0FBQzVCLGNBQWMsbUJBQU8sQ0FBQyxFQUFZO0FBQ2xDLGFBQWEsbUJBQU8sQ0FBQyxFQUFZO0FBQ2pDLHFCQUFxQixtQkFBTyxDQUFDLENBQWM7QUFDM0M7QUFDQSwwREFBMEQsc0JBQXNCO0FBQ2hGLGtGQUFrRix3QkFBd0I7QUFDMUciLCJmaWxlIjoiNjcuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgY29yZSA9IHJlcXVpcmUoJy4vX2NvcmUnKTtcbnZhciBMSUJSQVJZID0gcmVxdWlyZSgnLi9fbGlicmFyeScpO1xudmFyIHdrc0V4dCA9IHJlcXVpcmUoJy4vX3drcy1leHQnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIHZhciAkU3ltYm9sID0gY29yZS5TeW1ib2wgfHwgKGNvcmUuU3ltYm9sID0gTElCUkFSWSA/IHt9IDogZ2xvYmFsLlN5bWJvbCB8fCB7fSk7XG4gIGlmIChuYW1lLmNoYXJBdCgwKSAhPSAnXycgJiYgIShuYW1lIGluICRTeW1ib2wpKSBkZWZpbmVQcm9wZXJ0eSgkU3ltYm9sLCBuYW1lLCB7IHZhbHVlOiB3a3NFeHQuZihuYW1lKSB9KTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///67\n")},function(module,exports,__webpack_require__){eval("var shared = __webpack_require__(47)('keys');\nvar uid = __webpack_require__(33);\nmodule.exports = function (key) {\n return shared[key] || (shared[key] = uid(key));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2hhcmVkLWtleS5qcz82MTNiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGFBQWEsbUJBQU8sQ0FBQyxFQUFXO0FBQ2hDLFVBQVUsbUJBQU8sQ0FBQyxFQUFRO0FBQzFCO0FBQ0E7QUFDQSIsImZpbGUiOiI2OC5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBzaGFyZWQgPSByZXF1aXJlKCcuL19zaGFyZWQnKSgna2V5cycpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4vX3VpZCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiBzaGFyZWRba2V5XSB8fCAoc2hhcmVkW2tleV0gPSB1aWQoa2V5KSk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///68\n")},function(module,exports){eval("// IE 8- don't enum bug keys\nmodule.exports = (\n 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZW51bS1idWcta2V5cy5qcz9lMTFlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjY5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gSUUgOC0gZG9uJ3QgZW51bSBidWcga2V5c1xubW9kdWxlLmV4cG9ydHMgPSAoXG4gICdjb25zdHJ1Y3RvcixoYXNPd25Qcm9wZXJ0eSxpc1Byb3RvdHlwZU9mLHByb3BlcnR5SXNFbnVtZXJhYmxlLHRvTG9jYWxlU3RyaW5nLHRvU3RyaW5nLHZhbHVlT2YnXG4pLnNwbGl0KCcsJyk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///69\n")},function(module,exports,__webpack_require__){eval("var document = __webpack_require__(2).document;\nmodule.exports = document && document.documentElement;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faHRtbC5qcz9mYWIyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGVBQWUsbUJBQU8sQ0FBQyxDQUFXO0FBQ2xDIiwiZmlsZSI6IjcwLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGRvY3VtZW50ID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuZG9jdW1lbnQ7XG5tb2R1bGUuZXhwb3J0cyA9IGRvY3VtZW50ICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///70\n")},function(module,exports,__webpack_require__){eval("// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nvar isObject = __webpack_require__(4);\nvar anObject = __webpack_require__(1);\nvar check = function (O, proto) {\n anObject(O);\n if (!isObject(proto) && proto !== null) throw TypeError(proto + \": can't set as prototype!\");\n};\nmodule.exports = {\n set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line\n function (test, buggy, set) {\n try {\n set = __webpack_require__(19)(Function.call, __webpack_require__(16).f(Object.prototype, '__proto__').set, 2);\n set(test, []);\n buggy = !(test instanceof Array);\n } catch (e) { buggy = true; }\n return function setPrototypeOf(O, proto) {\n check(O, proto);\n if (buggy) O.__proto__ = proto;\n else set(O, proto);\n return O;\n };\n }({}, false) : undefined),\n check: check\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2V0LXByb3RvLmpzPzhiOTciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrREFBa0Q7QUFDbEQ7QUFDQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxFQUFRLGlCQUFpQixtQkFBTyxDQUFDLEVBQWdCO0FBQ3ZFO0FBQ0E7QUFDQSxPQUFPLFlBQVksY0FBYztBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLLEdBQUc7QUFDUjtBQUNBIiwiZmlsZSI6IjcxLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gV29ya3Mgd2l0aCBfX3Byb3RvX18gb25seS4gT2xkIHY4IGNhbid0IHdvcmsgd2l0aCBudWxsIHByb3RvIG9iamVjdHMuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90byAqL1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBjaGVjayA9IGZ1bmN0aW9uIChPLCBwcm90bykge1xuICBhbk9iamVjdChPKTtcbiAgaWYgKCFpc09iamVjdChwcm90bykgJiYgcHJvdG8gIT09IG51bGwpIHRocm93IFR5cGVFcnJvcihwcm90byArIFwiOiBjYW4ndCBzZXQgYXMgcHJvdG90eXBlIVwiKTtcbn07XG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc2V0OiBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgKCdfX3Byb3RvX18nIGluIHt9ID8gLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICAgIGZ1bmN0aW9uICh0ZXN0LCBidWdneSwgc2V0KSB7XG4gICAgICB0cnkge1xuICAgICAgICBzZXQgPSByZXF1aXJlKCcuL19jdHgnKShGdW5jdGlvbi5jYWxsLCByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpLmYoT2JqZWN0LnByb3RvdHlwZSwgJ19fcHJvdG9fXycpLnNldCwgMik7XG4gICAgICAgIHNldCh0ZXN0LCBbXSk7XG4gICAgICAgIGJ1Z2d5ID0gISh0ZXN0IGluc3RhbmNlb2YgQXJyYXkpO1xuICAgICAgfSBjYXRjaCAoZSkgeyBidWdneSA9IHRydWU7IH1cbiAgICAgIHJldHVybiBmdW5jdGlvbiBzZXRQcm90b3R5cGVPZihPLCBwcm90bykge1xuICAgICAgICBjaGVjayhPLCBwcm90byk7XG4gICAgICAgIGlmIChidWdneSkgTy5fX3Byb3RvX18gPSBwcm90bztcbiAgICAgICAgZWxzZSBzZXQoTywgcHJvdG8pO1xuICAgICAgICByZXR1cm4gTztcbiAgICAgIH07XG4gICAgfSh7fSwgZmFsc2UpIDogdW5kZWZpbmVkKSxcbiAgY2hlY2s6IGNoZWNrXG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///71\n")},function(module,exports){eval("module.exports = '\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003' +\n '\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF';\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLXdzLmpzP2ZkZWYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSIsImZpbGUiOiI3Mi5qcyIsInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gJ1xceDA5XFx4MEFcXHgwQlxceDBDXFx4MERcXHgyMFxceEEwXFx1MTY4MFxcdTE4MEVcXHUyMDAwXFx1MjAwMVxcdTIwMDJcXHUyMDAzJyArXG4gICdcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBBXFx1MjAyRlxcdTIwNUZcXHUzMDAwXFx1MjAyOFxcdTIwMjlcXHVGRUZGJztcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///72\n")},function(module,exports,__webpack_require__){eval("var isObject = __webpack_require__(4);\nvar setPrototypeOf = __webpack_require__(71).set;\nmodule.exports = function (that, target, C) {\n var S = target.constructor;\n var P;\n if (S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && isObject(P) && setPrototypeOf) {\n setPrototypeOf(that, P);\n } return that;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faW5oZXJpdC1pZi1yZXF1aXJlZC5qcz81ZGJjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLHFCQUFxQixtQkFBTyxDQUFDLEVBQWM7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCIsImZpbGUiOiI3My5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIHNldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fc2V0LXByb3RvJykuc2V0O1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGhhdCwgdGFyZ2V0LCBDKSB7XG4gIHZhciBTID0gdGFyZ2V0LmNvbnN0cnVjdG9yO1xuICB2YXIgUDtcbiAgaWYgKFMgIT09IEMgJiYgdHlwZW9mIFMgPT0gJ2Z1bmN0aW9uJyAmJiAoUCA9IFMucHJvdG90eXBlKSAhPT0gQy5wcm90b3R5cGUgJiYgaXNPYmplY3QoUCkgJiYgc2V0UHJvdG90eXBlT2YpIHtcbiAgICBzZXRQcm90b3R5cGVPZih0aGF0LCBQKTtcbiAgfSByZXR1cm4gdGhhdDtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///73\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar toInteger = __webpack_require__(21);\nvar defined = __webpack_require__(24);\n\nmodule.exports = function repeat(count) {\n var str = String(defined(this));\n var res = '';\n var n = toInteger(count);\n if (n < 0 || n == Infinity) throw RangeError(\"Count can't be negative\");\n for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) res += str;\n return res;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLXJlcGVhdC5qcz85NzQ0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2QyxjQUFjLG1CQUFPLENBQUMsRUFBWTs7QUFFbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsTUFBTTtBQUNkO0FBQ0EiLCJmaWxlIjoiNzQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gcmVwZWF0KGNvdW50KSB7XG4gIHZhciBzdHIgPSBTdHJpbmcoZGVmaW5lZCh0aGlzKSk7XG4gIHZhciByZXMgPSAnJztcbiAgdmFyIG4gPSB0b0ludGVnZXIoY291bnQpO1xuICBpZiAobiA8IDAgfHwgbiA9PSBJbmZpbml0eSkgdGhyb3cgUmFuZ2VFcnJvcihcIkNvdW50IGNhbid0IGJlIG5lZ2F0aXZlXCIpO1xuICBmb3IgKDtuID4gMDsgKG4gPj4+PSAxKSAmJiAoc3RyICs9IHN0cikpIGlmIChuICYgMSkgcmVzICs9IHN0cjtcbiAgcmV0dXJuIHJlcztcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///74\n")},function(module,exports){eval("// 20.2.2.28 Math.sign(x)\nmodule.exports = Math.sign || function sign(x) {\n // eslint-disable-next-line no-self-compare\n return (x = +x) == 0 || x != x ? x : x < 0 ? -1 : 1;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWF0aC1zaWduLmpzPzk2ZmIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiI3NS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDIwLjIuMi4yOCBNYXRoLnNpZ24oeClcbm1vZHVsZS5leHBvcnRzID0gTWF0aC5zaWduIHx8IGZ1bmN0aW9uIHNpZ24oeCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gIHJldHVybiAoeCA9ICt4KSA9PSAwIHx8IHggIT0geCA/IHggOiB4IDwgMCA/IC0xIDogMTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///75\n")},function(module,exports){eval("// 20.2.2.14 Math.expm1(x)\nvar $expm1 = Math.expm1;\nmodule.exports = (!$expm1\n // Old FF bug\n || $expm1(10) > 22025.465794806719 || $expm1(10) < 22025.4657948067165168\n // Tor Browser bug\n || $expm1(-2e-17) != -2e-17\n) ? function expm1(x) {\n return (x = +x) == 0 ? x : x > -1e-6 && x < 1e-6 ? x + x * x / 2 : Math.exp(x) - 1;\n} : $expm1;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWF0aC1leHBtMS5qcz8yZDVjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiNzYuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyMC4yLjIuMTQgTWF0aC5leHBtMSh4KVxudmFyICRleHBtMSA9IE1hdGguZXhwbTE7XG5tb2R1bGUuZXhwb3J0cyA9ICghJGV4cG0xXG4gIC8vIE9sZCBGRiBidWdcbiAgfHwgJGV4cG0xKDEwKSA+IDIyMDI1LjQ2NTc5NDgwNjcxOSB8fCAkZXhwbTEoMTApIDwgMjIwMjUuNDY1Nzk0ODA2NzE2NTE2OFxuICAvLyBUb3IgQnJvd3NlciBidWdcbiAgfHwgJGV4cG0xKC0yZS0xNykgIT0gLTJlLTE3XG4pID8gZnVuY3Rpb24gZXhwbTEoeCkge1xuICByZXR1cm4gKHggPSAreCkgPT0gMCA/IHggOiB4ID4gLTFlLTYgJiYgeCA8IDFlLTYgPyB4ICsgeCAqIHggLyAyIDogTWF0aC5leHAoeCkgLSAxO1xufSA6ICRleHBtMTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///76\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar LIBRARY = __webpack_require__(29);\nvar $export = __webpack_require__(0);\nvar redefine = __webpack_require__(12);\nvar hide = __webpack_require__(11);\nvar Iterators = __webpack_require__(46);\nvar $iterCreate = __webpack_require__(78);\nvar setToStringTag = __webpack_require__(43);\nvar getPrototypeOf = __webpack_require__(17);\nvar ITERATOR = __webpack_require__(5)('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n $iterCreate(Constructor, NAME, next);\n var getMethod = function (kind) {\n if (!BUGGY && kind in proto) return proto[kind];\n switch (kind) {\n case KEYS: return function keys() { return new Constructor(this, kind); };\n case VALUES: return function values() { return new Constructor(this, kind); };\n } return function entries() { return new Constructor(this, kind); };\n };\n var TAG = NAME + ' Iterator';\n var DEF_VALUES = DEFAULT == VALUES;\n var VALUES_BUG = false;\n var proto = Base.prototype;\n var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n var $default = $native || getMethod(DEFAULT);\n var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n var methods, key, IteratorPrototype;\n // Fix native\n if ($anyNative) {\n IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n // Set @@toStringTag to native iterators\n setToStringTag(IteratorPrototype, TAG, true);\n // fix for some old engines\n if (!LIBRARY && typeof IteratorPrototype[ITERATOR] != 'function') hide(IteratorPrototype, ITERATOR, returnThis);\n }\n }\n // fix Array#{values, @@iterator}.name in V8 / FF\n if (DEF_VALUES && $native && $native.name !== VALUES) {\n VALUES_BUG = true;\n $default = function values() { return $native.call(this); };\n }\n // Define iterator\n if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n hide(proto, ITERATOR, $default);\n }\n // Plug for library\n Iterators[NAME] = $default;\n Iterators[TAG] = returnThis;\n if (DEFAULT) {\n methods = {\n values: DEF_VALUES ? $default : getMethod(VALUES),\n keys: IS_SET ? $default : getMethod(KEYS),\n entries: $entries\n };\n if (FORCED) for (key in methods) {\n if (!(key in proto)) redefine(proto, key, methods[key]);\n } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n }\n return methods;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlci1kZWZpbmUuanM/MDFmOSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGNBQWMsbUJBQU8sQ0FBQyxFQUFZO0FBQ2xDLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyxFQUFhO0FBQ3BDLFdBQVcsbUJBQU8sQ0FBQyxFQUFTO0FBQzVCLGdCQUFnQixtQkFBTyxDQUFDLEVBQWM7QUFDdEMsa0JBQWtCLG1CQUFPLENBQUMsRUFBZ0I7QUFDMUMscUJBQXFCLG1CQUFPLENBQUMsRUFBc0I7QUFDbkQscUJBQXFCLG1CQUFPLENBQUMsRUFBZTtBQUM1QyxlQUFlLG1CQUFPLENBQUMsQ0FBUTtBQUMvQiw4Q0FBOEM7QUFDOUM7QUFDQTtBQUNBOztBQUVBLDhCQUE4QixhQUFhOztBQUUzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUNBQXlDLG9DQUFvQztBQUM3RSw2Q0FBNkMsb0NBQW9DO0FBQ2pGLEtBQUssNEJBQTRCLG9DQUFvQztBQUNyRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLG1CQUFtQjtBQUNuQztBQUNBO0FBQ0Esa0NBQWtDLDJCQUEyQjtBQUM3RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EiLCJmaWxlIjoiNzcuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgTElCUkFSWSA9IHJlcXVpcmUoJy4vX2xpYnJhcnknKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJyk7XG52YXIgJGl0ZXJDcmVhdGUgPSByZXF1aXJlKCcuL19pdGVyLWNyZWF0ZScpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBJVEVSQVRPUiA9IHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpO1xudmFyIEJVR0dZID0gIShbXS5rZXlzICYmICduZXh0JyBpbiBbXS5rZXlzKCkpOyAvLyBTYWZhcmkgaGFzIGJ1Z2d5IGl0ZXJhdG9ycyB3L28gYG5leHRgXG52YXIgRkZfSVRFUkFUT1IgPSAnQEBpdGVyYXRvcic7XG52YXIgS0VZUyA9ICdrZXlzJztcbnZhciBWQUxVRVMgPSAndmFsdWVzJztcblxudmFyIHJldHVyblRoaXMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChCYXNlLCBOQU1FLCBDb25zdHJ1Y3RvciwgbmV4dCwgREVGQVVMVCwgSVNfU0VULCBGT1JDRUQpIHtcbiAgJGl0ZXJDcmVhdGUoQ29uc3RydWN0b3IsIE5BTUUsIG5leHQpO1xuICB2YXIgZ2V0TWV0aG9kID0gZnVuY3Rpb24gKGtpbmQpIHtcbiAgICBpZiAoIUJVR0dZICYmIGtpbmQgaW4gcHJvdG8pIHJldHVybiBwcm90b1traW5kXTtcbiAgICBzd2l0Y2ggKGtpbmQpIHtcbiAgICAgIGNhc2UgS0VZUzogcmV0dXJuIGZ1bmN0aW9uIGtleXMoKSB7IHJldHVybiBuZXcgQ29uc3RydWN0b3IodGhpcywga2luZCk7IH07XG4gICAgICBjYXNlIFZBTFVFUzogcmV0dXJuIGZ1bmN0aW9uIHZhbHVlcygpIHsgcmV0dXJuIG5ldyBDb25zdHJ1Y3Rvcih0aGlzLCBraW5kKTsgfTtcbiAgICB9IHJldHVybiBmdW5jdGlvbiBlbnRyaWVzKCkgeyByZXR1cm4gbmV3IENvbnN0cnVjdG9yKHRoaXMsIGtpbmQpOyB9O1xuICB9O1xuICB2YXIgVEFHID0gTkFNRSArICcgSXRlcmF0b3InO1xuICB2YXIgREVGX1ZBTFVFUyA9IERFRkFVTFQgPT0gVkFMVUVTO1xuICB2YXIgVkFMVUVTX0JVRyA9IGZhbHNlO1xuICB2YXIgcHJvdG8gPSBCYXNlLnByb3RvdHlwZTtcbiAgdmFyICRuYXRpdmUgPSBwcm90b1tJVEVSQVRPUl0gfHwgcHJvdG9bRkZfSVRFUkFUT1JdIHx8IERFRkFVTFQgJiYgcHJvdG9bREVGQVVMVF07XG4gIHZhciAkZGVmYXVsdCA9ICRuYXRpdmUgfHwgZ2V0TWV0aG9kKERFRkFVTFQpO1xuICB2YXIgJGVudHJpZXMgPSBERUZBVUxUID8gIURFRl9WQUxVRVMgPyAkZGVmYXVsdCA6IGdldE1ldGhvZCgnZW50cmllcycpIDogdW5kZWZpbmVkO1xuICB2YXIgJGFueU5hdGl2ZSA9IE5BTUUgPT0gJ0FycmF5JyA/IHByb3RvLmVudHJpZXMgfHwgJG5hdGl2ZSA6ICRuYXRpdmU7XG4gIHZhciBtZXRob2RzLCBrZXksIEl0ZXJhdG9yUHJvdG90eXBlO1xuICAvLyBGaXggbmF0aXZlXG4gIGlmICgkYW55TmF0aXZlKSB7XG4gICAgSXRlcmF0b3JQcm90b3R5cGUgPSBnZXRQcm90b3R5cGVPZigkYW55TmF0aXZlLmNhbGwobmV3IEJhc2UoKSkpO1xuICAgIGlmIChJdGVyYXRvclByb3RvdHlwZSAhPT0gT2JqZWN0LnByb3RvdHlwZSAmJiBJdGVyYXRvclByb3RvdHlwZS5uZXh0KSB7XG4gICAgICAvLyBTZXQgQEB0b1N0cmluZ1RhZyB0byBuYXRpdmUgaXRlcmF0b3JzXG4gICAgICBzZXRUb1N0cmluZ1RhZyhJdGVyYXRvclByb3RvdHlwZSwgVEFHLCB0cnVlKTtcbiAgICAgIC8vIGZpeCBmb3Igc29tZSBvbGQgZW5naW5lc1xuICAgICAgaWYgKCFMSUJSQVJZICYmIHR5cGVvZiBJdGVyYXRvclByb3RvdHlwZVtJVEVSQVRPUl0gIT0gJ2Z1bmN0aW9uJykgaGlkZShJdGVyYXRvclByb3RvdHlwZSwgSVRFUkFUT1IsIHJldHVyblRoaXMpO1xuICAgIH1cbiAgfVxuICAvLyBmaXggQXJyYXkje3ZhbHVlcywgQEBpdGVyYXRvcn0ubmFtZSBpbiBWOCAvIEZGXG4gIGlmIChERUZfVkFMVUVTICYmICRuYXRpdmUgJiYgJG5hdGl2ZS5uYW1lICE9PSBWQUxVRVMpIHtcbiAgICBWQUxVRVNfQlVHID0gdHJ1ZTtcbiAgICAkZGVmYXVsdCA9IGZ1bmN0aW9uIHZhbHVlcygpIHsgcmV0dXJuICRuYXRpdmUuY2FsbCh0aGlzKTsgfTtcbiAgfVxuICAvLyBEZWZpbmUgaXRlcmF0b3JcbiAgaWYgKCghTElCUkFSWSB8fCBGT1JDRUQpICYmIChCVUdHWSB8fCBWQUxVRVNfQlVHIHx8ICFwcm90b1tJVEVSQVRPUl0pKSB7XG4gICAgaGlkZShwcm90bywgSVRFUkFUT1IsICRkZWZhdWx0KTtcbiAgfVxuICAvLyBQbHVnIGZvciBsaWJyYXJ5XG4gIEl0ZXJhdG9yc1tOQU1FXSA9ICRkZWZhdWx0O1xuICBJdGVyYXRvcnNbVEFHXSA9IHJldHVyblRoaXM7XG4gIGlmIChERUZBVUxUKSB7XG4gICAgbWV0aG9kcyA9IHtcbiAgICAgIHZhbHVlczogREVGX1ZBTFVFUyA/ICRkZWZhdWx0IDogZ2V0TWV0aG9kKFZBTFVFUyksXG4gICAgICBrZXlzOiBJU19TRVQgPyAkZGVmYXVsdCA6IGdldE1ldGhvZChLRVlTKSxcbiAgICAgIGVudHJpZXM6ICRlbnRyaWVzXG4gICAgfTtcbiAgICBpZiAoRk9SQ0VEKSBmb3IgKGtleSBpbiBtZXRob2RzKSB7XG4gICAgICBpZiAoIShrZXkgaW4gcHJvdG8pKSByZWRlZmluZShwcm90bywga2V5LCBtZXRob2RzW2tleV0pO1xuICAgIH0gZWxzZSAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIChCVUdHWSB8fCBWQUxVRVNfQlVHKSwgTkFNRSwgbWV0aG9kcyk7XG4gIH1cbiAgcmV0dXJuIG1ldGhvZHM7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///77\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar create = __webpack_require__(36);\nvar descriptor = __webpack_require__(32);\nvar setToStringTag = __webpack_require__(43);\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\n__webpack_require__(11)(IteratorPrototype, __webpack_require__(5)('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n setToStringTag(Constructor, NAME + ' Iterator');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlci1jcmVhdGUuanM/NDFhMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGFBQWEsbUJBQU8sQ0FBQyxFQUFrQjtBQUN2QyxpQkFBaUIsbUJBQU8sQ0FBQyxFQUFrQjtBQUMzQyxxQkFBcUIsbUJBQU8sQ0FBQyxFQUFzQjtBQUNuRDs7QUFFQTtBQUNBLG1CQUFPLENBQUMsRUFBUyxxQkFBcUIsbUJBQU8sQ0FBQyxDQUFRLDRCQUE0QixhQUFhLEVBQUU7O0FBRWpHO0FBQ0EscURBQXFELDRCQUE0QjtBQUNqRjtBQUNBIiwiZmlsZSI6Ijc4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKTtcbnZhciBkZXNjcmlwdG9yID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBJdGVyYXRvclByb3RvdHlwZSA9IHt9O1xuXG4vLyAyNS4xLjIuMS4xICVJdGVyYXRvclByb3RvdHlwZSVbQEBpdGVyYXRvcl0oKVxucmVxdWlyZSgnLi9faGlkZScpKEl0ZXJhdG9yUHJvdG90eXBlLCByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBOQU1FLCBuZXh0KSB7XG4gIENvbnN0cnVjdG9yLnByb3RvdHlwZSA9IGNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSwgeyBuZXh0OiBkZXNjcmlwdG9yKDEsIG5leHQpIH0pO1xuICBzZXRUb1N0cmluZ1RhZyhDb25zdHJ1Y3RvciwgTkFNRSArICcgSXRlcmF0b3InKTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///78\n")},function(module,exports,__webpack_require__){eval("// helper for String#{startsWith, endsWith, includes}\nvar isRegExp = __webpack_require__(56);\nvar defined = __webpack_require__(24);\n\nmodule.exports = function (that, searchString, NAME) {\n if (isRegExp(searchString)) throw TypeError('String#' + NAME + \" doesn't accept regex!\");\n return String(defined(that));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLWNvbnRleHQuanM/ZDJjOCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxzQkFBc0I7QUFDdEIsZUFBZSxtQkFBTyxDQUFDLEVBQWM7QUFDckMsY0FBYyxtQkFBTyxDQUFDLEVBQVk7O0FBRWxDO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6Ijc5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaGVscGVyIGZvciBTdHJpbmcje3N0YXJ0c1dpdGgsIGVuZHNXaXRoLCBpbmNsdWRlc31cbnZhciBpc1JlZ0V4cCA9IHJlcXVpcmUoJy4vX2lzLXJlZ2V4cCcpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRoYXQsIHNlYXJjaFN0cmluZywgTkFNRSkge1xuICBpZiAoaXNSZWdFeHAoc2VhcmNoU3RyaW5nKSkgdGhyb3cgVHlwZUVycm9yKCdTdHJpbmcjJyArIE5BTUUgKyBcIiBkb2Vzbid0IGFjY2VwdCByZWdleCFcIik7XG4gIHJldHVybiBTdHJpbmcoZGVmaW5lZCh0aGF0KSk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///79\n")},function(module,exports,__webpack_require__){eval("var MATCH = __webpack_require__(5)('match');\nmodule.exports = function (KEY) {\n var re = /./;\n try {\n '/./'[KEY](re);\n } catch (e) {\n try {\n re[MATCH] = false;\n return !'/./'[KEY](re);\n } catch (f) { /* empty */ }\n } return true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZmFpbHMtaXMtcmVnZXhwLmpzPzUxNDciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSxtQkFBTyxDQUFDLENBQVE7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsS0FBSyxZQUFZO0FBQ2pCLEdBQUc7QUFDSCIsImZpbGUiOiI4MC5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBNQVRDSCA9IHJlcXVpcmUoJy4vX3drcycpKCdtYXRjaCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoS0VZKSB7XG4gIHZhciByZSA9IC8uLztcbiAgdHJ5IHtcbiAgICAnLy4vJ1tLRVldKHJlKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHRyeSB7XG4gICAgICByZVtNQVRDSF0gPSBmYWxzZTtcbiAgICAgIHJldHVybiAhJy8uLydbS0VZXShyZSk7XG4gICAgfSBjYXRjaCAoZikgeyAvKiBlbXB0eSAqLyB9XG4gIH0gcmV0dXJuIHRydWU7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///80\n")},function(module,exports,__webpack_require__){eval("// check on default Array iterator\nvar Iterators = __webpack_require__(46);\nvar ITERATOR = __webpack_require__(5)('iterator');\nvar ArrayProto = Array.prototype;\n\nmodule.exports = function (it) {\n return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtYXJyYXktaXRlci5qcz8zM2E0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsZ0JBQWdCLG1CQUFPLENBQUMsRUFBYztBQUN0QyxlQUFlLG1CQUFPLENBQUMsQ0FBUTtBQUMvQjs7QUFFQTtBQUNBO0FBQ0EiLCJmaWxlIjoiODEuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBjaGVjayBvbiBkZWZhdWx0IEFycmF5IGl0ZXJhdG9yXG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJyk7XG52YXIgSVRFUkFUT1IgPSByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKTtcbnZhciBBcnJheVByb3RvID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgIT09IHVuZGVmaW5lZCAmJiAoSXRlcmF0b3JzLkFycmF5ID09PSBpdCB8fCBBcnJheVByb3RvW0lURVJBVE9SXSA9PT0gaXQpO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///81\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $defineProperty = __webpack_require__(8);\nvar createDesc = __webpack_require__(32);\n\nmodule.exports = function (object, index, value) {\n if (index in object) $defineProperty.f(object, index, createDesc(0, value));\n else object[index] = value;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY3JlYXRlLXByb3BlcnR5LmpzP2YxYWUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixzQkFBc0IsbUJBQU8sQ0FBQyxDQUFjO0FBQzVDLGlCQUFpQixtQkFBTyxDQUFDLEVBQWtCOztBQUUzQztBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiI4Mi5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciAkZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciBjcmVhdGVEZXNjID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIGluZGV4LCB2YWx1ZSkge1xuICBpZiAoaW5kZXggaW4gb2JqZWN0KSAkZGVmaW5lUHJvcGVydHkuZihvYmplY3QsIGluZGV4LCBjcmVhdGVEZXNjKDAsIHZhbHVlKSk7XG4gIGVsc2Ugb2JqZWN0W2luZGV4XSA9IHZhbHVlO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///82\n")},function(module,exports,__webpack_require__){eval("var classof = __webpack_require__(44);\nvar ITERATOR = __webpack_require__(5)('iterator');\nvar Iterators = __webpack_require__(46);\nmodule.exports = __webpack_require__(18).getIteratorMethod = function (it) {\n if (it != undefined) return it[ITERATOR]\n || it['@@iterator']\n || Iterators[classof(it)];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9jb3JlLmdldC1pdGVyYXRvci1tZXRob2QuanM/MjdlZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLG1CQUFPLENBQUMsRUFBWTtBQUNsQyxlQUFlLG1CQUFPLENBQUMsQ0FBUTtBQUMvQixnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFjO0FBQ3RDLGlCQUFpQixtQkFBTyxDQUFDLEVBQVM7QUFDbEM7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiODMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4vX2NsYXNzb2YnKTtcbnZhciBJVEVSQVRPUiA9IHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19jb3JlJykuZ2V0SXRlcmF0b3JNZXRob2QgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGl0ICE9IHVuZGVmaW5lZCkgcmV0dXJuIGl0W0lURVJBVE9SXVxuICAgIHx8IGl0WydAQGl0ZXJhdG9yJ11cbiAgICB8fCBJdGVyYXRvcnNbY2xhc3NvZihpdCldO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///83\n")},function(module,exports,__webpack_require__){eval("// 9.4.2.3 ArraySpeciesCreate(originalArray, length)\nvar speciesConstructor = __webpack_require__(223);\n\nmodule.exports = function (original, length) {\n return new (speciesConstructor(original))(length);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktc3BlY2llcy1jcmVhdGUuanM/Y2QxYyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLHlCQUF5QixtQkFBTyxDQUFDLEdBQThCOztBQUUvRDtBQUNBO0FBQ0EiLCJmaWxlIjoiODQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyA5LjQuMi4zIEFycmF5U3BlY2llc0NyZWF0ZShvcmlnaW5hbEFycmF5LCBsZW5ndGgpXG52YXIgc3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi9fYXJyYXktc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcmlnaW5hbCwgbGVuZ3RoKSB7XG4gIHJldHVybiBuZXcgKHNwZWNpZXNDb25zdHJ1Y3RvcihvcmlnaW5hbCkpKGxlbmd0aCk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///84\n")},function(module,exports,__webpack_require__){"use strict";eval("// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\n\nvar toObject = __webpack_require__(9);\nvar toAbsoluteIndex = __webpack_require__(35);\nvar toLength = __webpack_require__(6);\nmodule.exports = function fill(value /* , start = 0, end = @length */) {\n var O = toObject(this);\n var length = toLength(O.length);\n var aLen = arguments.length;\n var index = toAbsoluteIndex(aLen > 1 ? arguments[1] : undefined, length);\n var end = aLen > 2 ? arguments[2] : undefined;\n var endPos = end === undefined ? length : toAbsoluteIndex(end, length);\n while (endPos > index) O[index++] = value;\n return O;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktZmlsbC5qcz8zNmJkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ2E7QUFDYixlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxzQkFBc0IsbUJBQU8sQ0FBQyxFQUFzQjtBQUNwRCxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiI4NS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDIyLjEuMy42IEFycmF5LnByb3RvdHlwZS5maWxsKHZhbHVlLCBzdGFydCA9IDAsIGVuZCA9IHRoaXMubGVuZ3RoKVxuJ3VzZSBzdHJpY3QnO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi9fdG8tYWJzb2x1dGUtaW5kZXgnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBmaWxsKHZhbHVlIC8qICwgc3RhcnQgPSAwLCBlbmQgPSBAbGVuZ3RoICovKSB7XG4gIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gIHZhciBsZW5ndGggPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgdmFyIGluZGV4ID0gdG9BYnNvbHV0ZUluZGV4KGFMZW4gPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkLCBsZW5ndGgpO1xuICB2YXIgZW5kID0gYUxlbiA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQ7XG4gIHZhciBlbmRQb3MgPSBlbmQgPT09IHVuZGVmaW5lZCA/IGxlbmd0aCA6IHRvQWJzb2x1dGVJbmRleChlbmQsIGxlbmd0aCk7XG4gIHdoaWxlIChlbmRQb3MgPiBpbmRleCkgT1tpbmRleCsrXSA9IHZhbHVlO1xuICByZXR1cm4gTztcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///85\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar addToUnscopables = __webpack_require__(31);\nvar step = __webpack_require__(112);\nvar Iterators = __webpack_require__(46);\nvar toIObject = __webpack_require__(15);\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = __webpack_require__(77)(Array, 'Array', function (iterated, kind) {\n this._t = toIObject(iterated); // target\n this._i = 0; // next index\n this._k = kind; // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var kind = this._k;\n var index = this._i++;\n if (!O || index >= O.length) {\n this._t = undefined;\n return step(1);\n }\n if (kind == 'keys') return step(0, index);\n if (kind == 'values') return step(0, O[index]);\n return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuaXRlcmF0b3IuanM/Y2FkZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLHVCQUF1QixtQkFBTyxDQUFDLEVBQXVCO0FBQ3RELFdBQVcsbUJBQU8sQ0FBQyxHQUFjO0FBQ2pDLGdCQUFnQixtQkFBTyxDQUFDLEVBQWM7QUFDdEMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTs7QUFFdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsbUJBQU8sQ0FBQyxFQUFnQjtBQUN6QyxnQ0FBZ0M7QUFDaEMsY0FBYztBQUNkLGlCQUFpQjtBQUNqQjtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0EiLCJmaWxlIjoiODYuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgYWRkVG9VbnNjb3BhYmxlcyA9IHJlcXVpcmUoJy4vX2FkZC10by11bnNjb3BhYmxlcycpO1xudmFyIHN0ZXAgPSByZXF1aXJlKCcuL19pdGVyLXN0ZXAnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG5cbi8vIDIyLjEuMy40IEFycmF5LnByb3RvdHlwZS5lbnRyaWVzKClcbi8vIDIyLjEuMy4xMyBBcnJheS5wcm90b3R5cGUua2V5cygpXG4vLyAyMi4xLjMuMjkgQXJyYXkucHJvdG90eXBlLnZhbHVlcygpXG4vLyAyMi4xLjMuMzAgQXJyYXkucHJvdG90eXBlW0BAaXRlcmF0b3JdKClcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9faXRlci1kZWZpbmUnKShBcnJheSwgJ0FycmF5JywgZnVuY3Rpb24gKGl0ZXJhdGVkLCBraW5kKSB7XG4gIHRoaXMuX3QgPSB0b0lPYmplY3QoaXRlcmF0ZWQpOyAvLyB0YXJnZXRcbiAgdGhpcy5faSA9IDA7ICAgICAgICAgICAgICAgICAgIC8vIG5leHQgaW5kZXhcbiAgdGhpcy5fayA9IGtpbmQ7ICAgICAgICAgICAgICAgIC8vIGtpbmRcbi8vIDIyLjEuNS4yLjEgJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlLm5leHQoKVxufSwgZnVuY3Rpb24gKCkge1xuICB2YXIgTyA9IHRoaXMuX3Q7XG4gIHZhciBraW5kID0gdGhpcy5faztcbiAgdmFyIGluZGV4ID0gdGhpcy5faSsrO1xuICBpZiAoIU8gfHwgaW5kZXggPj0gTy5sZW5ndGgpIHtcbiAgICB0aGlzLl90ID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiBzdGVwKDEpO1xuICB9XG4gIGlmIChraW5kID09ICdrZXlzJykgcmV0dXJuIHN0ZXAoMCwgaW5kZXgpO1xuICBpZiAoa2luZCA9PSAndmFsdWVzJykgcmV0dXJuIHN0ZXAoMCwgT1tpbmRleF0pO1xuICByZXR1cm4gc3RlcCgwLCBbaW5kZXgsIE9baW5kZXhdXSk7XG59LCAndmFsdWVzJyk7XG5cbi8vIGFyZ3VtZW50c0xpc3RbQEBpdGVyYXRvcl0gaXMgJUFycmF5UHJvdG9fdmFsdWVzJSAoOS40LjQuNiwgOS40LjQuNylcbkl0ZXJhdG9ycy5Bcmd1bWVudHMgPSBJdGVyYXRvcnMuQXJyYXk7XG5cbmFkZFRvVW5zY29wYWJsZXMoJ2tleXMnKTtcbmFkZFRvVW5zY29wYWJsZXMoJ3ZhbHVlcycpO1xuYWRkVG9VbnNjb3BhYmxlcygnZW50cmllcycpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///86\n")},function(module,exports,__webpack_require__){"use strict";eval("\n\nvar regexpFlags = __webpack_require__(50);\n\nvar nativeExec = RegExp.prototype.exec;\n// This always refers to the native implementation, because the\n// String#replace polyfill uses ./fix-regexp-well-known-symbol-logic.js,\n// which loads this file before patching the method.\nvar nativeReplace = String.prototype.replace;\n\nvar patchedExec = nativeExec;\n\nvar LAST_INDEX = 'lastIndex';\n\nvar UPDATES_LAST_INDEX_WRONG = (function () {\n var re1 = /a/,\n re2 = /b*/g;\n nativeExec.call(re1, 'a');\n nativeExec.call(re2, 'a');\n return re1[LAST_INDEX] !== 0 || re2[LAST_INDEX] !== 0;\n})();\n\n// nonparticipating capturing group, copied from es5-shim's String#split patch.\nvar NPCG_INCLUDED = /()??/.exec('')[1] !== undefined;\n\nvar PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED;\n\nif (PATCH) {\n patchedExec = function exec(str) {\n var re = this;\n var lastIndex, reCopy, match, i;\n\n if (NPCG_INCLUDED) {\n reCopy = new RegExp('^' + re.source + '$(?!\\\\s)', regexpFlags.call(re));\n }\n if (UPDATES_LAST_INDEX_WRONG) lastIndex = re[LAST_INDEX];\n\n match = nativeExec.call(re, str);\n\n if (UPDATES_LAST_INDEX_WRONG && match) {\n re[LAST_INDEX] = re.global ? match.index + match[0].length : lastIndex;\n }\n if (NPCG_INCLUDED && match && match.length > 1) {\n // Fix browsers whose `exec` methods don't consistently return `undefined`\n // for NPCG, like IE8. NOTE: This doesn' work for /(.?)?/\n // eslint-disable-next-line no-loop-func\n nativeReplace.call(match[0], reCopy, function () {\n for (i = 1; i < arguments.length - 2; i++) {\n if (arguments[i] === undefined) match[i] = undefined;\n }\n });\n }\n\n return match;\n };\n}\n\nmodule.exports = patchedExec;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcmVnZXhwLWV4ZWMuanM/NTIwYSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixrQkFBa0IsbUJBQU8sQ0FBQyxFQUFVOztBQUVwQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLDBCQUEwQjtBQUM3QztBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiI4Ny5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHJlZ2V4cEZsYWdzID0gcmVxdWlyZSgnLi9fZmxhZ3MnKTtcblxudmFyIG5hdGl2ZUV4ZWMgPSBSZWdFeHAucHJvdG90eXBlLmV4ZWM7XG4vLyBUaGlzIGFsd2F5cyByZWZlcnMgdG8gdGhlIG5hdGl2ZSBpbXBsZW1lbnRhdGlvbiwgYmVjYXVzZSB0aGVcbi8vIFN0cmluZyNyZXBsYWNlIHBvbHlmaWxsIHVzZXMgLi9maXgtcmVnZXhwLXdlbGwta25vd24tc3ltYm9sLWxvZ2ljLmpzLFxuLy8gd2hpY2ggbG9hZHMgdGhpcyBmaWxlIGJlZm9yZSBwYXRjaGluZyB0aGUgbWV0aG9kLlxudmFyIG5hdGl2ZVJlcGxhY2UgPSBTdHJpbmcucHJvdG90eXBlLnJlcGxhY2U7XG5cbnZhciBwYXRjaGVkRXhlYyA9IG5hdGl2ZUV4ZWM7XG5cbnZhciBMQVNUX0lOREVYID0gJ2xhc3RJbmRleCc7XG5cbnZhciBVUERBVEVTX0xBU1RfSU5ERVhfV1JPTkcgPSAoZnVuY3Rpb24gKCkge1xuICB2YXIgcmUxID0gL2EvLFxuICAgICAgcmUyID0gL2IqL2c7XG4gIG5hdGl2ZUV4ZWMuY2FsbChyZTEsICdhJyk7XG4gIG5hdGl2ZUV4ZWMuY2FsbChyZTIsICdhJyk7XG4gIHJldHVybiByZTFbTEFTVF9JTkRFWF0gIT09IDAgfHwgcmUyW0xBU1RfSU5ERVhdICE9PSAwO1xufSkoKTtcblxuLy8gbm9ucGFydGljaXBhdGluZyBjYXB0dXJpbmcgZ3JvdXAsIGNvcGllZCBmcm9tIGVzNS1zaGltJ3MgU3RyaW5nI3NwbGl0IHBhdGNoLlxudmFyIE5QQ0dfSU5DTFVERUQgPSAvKCk/Py8uZXhlYygnJylbMV0gIT09IHVuZGVmaW5lZDtcblxudmFyIFBBVENIID0gVVBEQVRFU19MQVNUX0lOREVYX1dST05HIHx8IE5QQ0dfSU5DTFVERUQ7XG5cbmlmIChQQVRDSCkge1xuICBwYXRjaGVkRXhlYyA9IGZ1bmN0aW9uIGV4ZWMoc3RyKSB7XG4gICAgdmFyIHJlID0gdGhpcztcbiAgICB2YXIgbGFzdEluZGV4LCByZUNvcHksIG1hdGNoLCBpO1xuXG4gICAgaWYgKE5QQ0dfSU5DTFVERUQpIHtcbiAgICAgIHJlQ29weSA9IG5ldyBSZWdFeHAoJ14nICsgcmUuc291cmNlICsgJyQoPyFcXFxccyknLCByZWdleHBGbGFncy5jYWxsKHJlKSk7XG4gICAgfVxuICAgIGlmIChVUERBVEVTX0xBU1RfSU5ERVhfV1JPTkcpIGxhc3RJbmRleCA9IHJlW0xBU1RfSU5ERVhdO1xuXG4gICAgbWF0Y2ggPSBuYXRpdmVFeGVjLmNhbGwocmUsIHN0cik7XG5cbiAgICBpZiAoVVBEQVRFU19MQVNUX0lOREVYX1dST05HICYmIG1hdGNoKSB7XG4gICAgICByZVtMQVNUX0lOREVYXSA9IHJlLmdsb2JhbCA/IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoIDogbGFzdEluZGV4O1xuICAgIH1cbiAgICBpZiAoTlBDR19JTkNMVURFRCAmJiBtYXRjaCAmJiBtYXRjaC5sZW5ndGggPiAxKSB7XG4gICAgICAvLyBGaXggYnJvd3NlcnMgd2hvc2UgYGV4ZWNgIG1ldGhvZHMgZG9uJ3QgY29uc2lzdGVudGx5IHJldHVybiBgdW5kZWZpbmVkYFxuICAgICAgLy8gZm9yIE5QQ0csIGxpa2UgSUU4LiBOT1RFOiBUaGlzIGRvZXNuJyB3b3JrIGZvciAvKC4/KT8vXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbG9vcC1mdW5jXG4gICAgICBuYXRpdmVSZXBsYWNlLmNhbGwobWF0Y2hbMF0sIHJlQ29weSwgZnVuY3Rpb24gKCkge1xuICAgICAgICBmb3IgKGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aCAtIDI7IGkrKykge1xuICAgICAgICAgIGlmIChhcmd1bWVudHNbaV0gPT09IHVuZGVmaW5lZCkgbWF0Y2hbaV0gPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBtYXRjaDtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBwYXRjaGVkRXhlYztcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///87\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar at = __webpack_require__(55)(true);\n\n // `AdvanceStringIndex` abstract operation\n// https://tc39.github.io/ecma262/#sec-advancestringindex\nmodule.exports = function (S, index, unicode) {\n return index + (unicode ? at(S, index).length : 1);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYWR2YW5jZS1zdHJpbmctaW5kZXguanM/MDM5MCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLFNBQVMsbUJBQU8sQ0FBQyxFQUFjOztBQUUvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6Ijg4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIGF0ID0gcmVxdWlyZSgnLi9fc3RyaW5nLWF0JykodHJ1ZSk7XG5cbiAvLyBgQWR2YW5jZVN0cmluZ0luZGV4YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFkdmFuY2VzdHJpbmdpbmRleFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoUywgaW5kZXgsIHVuaWNvZGUpIHtcbiAgcmV0dXJuIGluZGV4ICsgKHVuaWNvZGUgPyBhdChTLCBpbmRleCkubGVuZ3RoIDogMSk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///88\n")},function(module,exports,__webpack_require__){eval("var ctx = __webpack_require__(19);\nvar invoke = __webpack_require__(102);\nvar html = __webpack_require__(70);\nvar cel = __webpack_require__(66);\nvar global = __webpack_require__(2);\nvar process = global.process;\nvar setTask = global.setImmediate;\nvar clearTask = global.clearImmediate;\nvar MessageChannel = global.MessageChannel;\nvar Dispatch = global.Dispatch;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar defer, channel, port;\nvar run = function () {\n var id = +this;\n // eslint-disable-next-line no-prototype-builtins\n if (queue.hasOwnProperty(id)) {\n var fn = queue[id];\n delete queue[id];\n fn();\n }\n};\nvar listener = function (event) {\n run.call(event.data);\n};\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!setTask || !clearTask) {\n setTask = function setImmediate(fn) {\n var args = [];\n var i = 1;\n while (arguments.length > i) args.push(arguments[i++]);\n queue[++counter] = function () {\n // eslint-disable-next-line no-new-func\n invoke(typeof fn == 'function' ? fn : Function(fn), args);\n };\n defer(counter);\n return counter;\n };\n clearTask = function clearImmediate(id) {\n delete queue[id];\n };\n // Node.js 0.8-\n if (__webpack_require__(20)(process) == 'process') {\n defer = function (id) {\n process.nextTick(ctx(run, id, 1));\n };\n // Sphere (JS game engine) Dispatch API\n } else if (Dispatch && Dispatch.now) {\n defer = function (id) {\n Dispatch.now(ctx(run, id, 1));\n };\n // Browsers with MessageChannel, includes WebWorkers\n } else if (MessageChannel) {\n channel = new MessageChannel();\n port = channel.port2;\n channel.port1.onmessage = listener;\n defer = ctx(port.postMessage, port, 1);\n // Browsers with postMessage, skip WebWorkers\n // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts) {\n defer = function (id) {\n global.postMessage(id + '', '*');\n };\n global.addEventListener('message', listener, false);\n // IE8-\n } else if (ONREADYSTATECHANGE in cel('script')) {\n defer = function (id) {\n html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () {\n html.removeChild(this);\n run.call(id);\n };\n };\n // Rest old browsers\n } else {\n defer = function (id) {\n setTimeout(ctx(run, id, 1), 0);\n };\n }\n}\nmodule.exports = {\n set: setTask,\n clear: clearTask\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdGFzay5qcz8xOTkxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFVBQVUsbUJBQU8sQ0FBQyxFQUFRO0FBQzFCLGFBQWEsbUJBQU8sQ0FBQyxHQUFXO0FBQ2hDLFdBQVcsbUJBQU8sQ0FBQyxFQUFTO0FBQzVCLFVBQVUsbUJBQU8sQ0FBQyxFQUFlO0FBQ2pDLGFBQWEsbUJBQU8sQ0FBQyxDQUFXO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNLG1CQUFPLENBQUMsRUFBUTtBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiODkuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgaW52b2tlID0gcmVxdWlyZSgnLi9faW52b2tlJyk7XG52YXIgaHRtbCA9IHJlcXVpcmUoJy4vX2h0bWwnKTtcbnZhciBjZWwgPSByZXF1aXJlKCcuL19kb20tY3JlYXRlJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgcHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzO1xudmFyIHNldFRhc2sgPSBnbG9iYWwuc2V0SW1tZWRpYXRlO1xudmFyIGNsZWFyVGFzayA9IGdsb2JhbC5jbGVhckltbWVkaWF0ZTtcbnZhciBNZXNzYWdlQ2hhbm5lbCA9IGdsb2JhbC5NZXNzYWdlQ2hhbm5lbDtcbnZhciBEaXNwYXRjaCA9IGdsb2JhbC5EaXNwYXRjaDtcbnZhciBjb3VudGVyID0gMDtcbnZhciBxdWV1ZSA9IHt9O1xudmFyIE9OUkVBRFlTVEFURUNIQU5HRSA9ICdvbnJlYWR5c3RhdGVjaGFuZ2UnO1xudmFyIGRlZmVyLCBjaGFubmVsLCBwb3J0O1xudmFyIHJ1biA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGlkID0gK3RoaXM7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgaWYgKHF1ZXVlLmhhc093blByb3BlcnR5KGlkKSkge1xuICAgIHZhciBmbiA9IHF1ZXVlW2lkXTtcbiAgICBkZWxldGUgcXVldWVbaWRdO1xuICAgIGZuKCk7XG4gIH1cbn07XG52YXIgbGlzdGVuZXIgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgcnVuLmNhbGwoZXZlbnQuZGF0YSk7XG59O1xuLy8gTm9kZS5qcyAwLjkrICYgSUUxMCsgaGFzIHNldEltbWVkaWF0ZSwgb3RoZXJ3aXNlOlxuaWYgKCFzZXRUYXNrIHx8ICFjbGVhclRhc2spIHtcbiAgc2V0VGFzayA9IGZ1bmN0aW9uIHNldEltbWVkaWF0ZShmbikge1xuICAgIHZhciBhcmdzID0gW107XG4gICAgdmFyIGkgPSAxO1xuICAgIHdoaWxlIChhcmd1bWVudHMubGVuZ3RoID4gaSkgYXJncy5wdXNoKGFyZ3VtZW50c1tpKytdKTtcbiAgICBxdWV1ZVsrK2NvdW50ZXJdID0gZnVuY3Rpb24gKCkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jXG4gICAgICBpbnZva2UodHlwZW9mIGZuID09ICdmdW5jdGlvbicgPyBmbiA6IEZ1bmN0aW9uKGZuKSwgYXJncyk7XG4gICAgfTtcbiAgICBkZWZlcihjb3VudGVyKTtcbiAgICByZXR1cm4gY291bnRlcjtcbiAgfTtcbiAgY2xlYXJUYXNrID0gZnVuY3Rpb24gY2xlYXJJbW1lZGlhdGUoaWQpIHtcbiAgICBkZWxldGUgcXVldWVbaWRdO1xuICB9O1xuICAvLyBOb2RlLmpzIDAuOC1cbiAgaWYgKHJlcXVpcmUoJy4vX2NvZicpKHByb2Nlc3MpID09ICdwcm9jZXNzJykge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGN0eChydW4sIGlkLCAxKSk7XG4gICAgfTtcbiAgLy8gU3BoZXJlIChKUyBnYW1lIGVuZ2luZSkgRGlzcGF0Y2ggQVBJXG4gIH0gZWxzZSBpZiAoRGlzcGF0Y2ggJiYgRGlzcGF0Y2gubm93KSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIERpc3BhdGNoLm5vdyhjdHgocnVuLCBpZCwgMSkpO1xuICAgIH07XG4gIC8vIEJyb3dzZXJzIHdpdGggTWVzc2FnZUNoYW5uZWwsIGluY2x1ZGVzIFdlYldvcmtlcnNcbiAgfSBlbHNlIGlmIChNZXNzYWdlQ2hhbm5lbCkge1xuICAgIGNoYW5uZWwgPSBuZXcgTWVzc2FnZUNoYW5uZWwoKTtcbiAgICBwb3J0ID0gY2hhbm5lbC5wb3J0MjtcbiAgICBjaGFubmVsLnBvcnQxLm9ubWVzc2FnZSA9IGxpc3RlbmVyO1xuICAgIGRlZmVyID0gY3R4KHBvcnQucG9zdE1lc3NhZ2UsIHBvcnQsIDEpO1xuICAvLyBCcm93c2VycyB3aXRoIHBvc3RNZXNzYWdlLCBza2lwIFdlYldvcmtlcnNcbiAgLy8gSUU4IGhhcyBwb3N0TWVzc2FnZSwgYnV0IGl0J3Mgc3luYyAmIHR5cGVvZiBpdHMgcG9zdE1lc3NhZ2UgaXMgJ29iamVjdCdcbiAgfSBlbHNlIGlmIChnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lciAmJiB0eXBlb2YgcG9zdE1lc3NhZ2UgPT0gJ2Z1bmN0aW9uJyAmJiAhZ2xvYmFsLmltcG9ydFNjcmlwdHMpIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgZ2xvYmFsLnBvc3RNZXNzYWdlKGlkICsgJycsICcqJyk7XG4gICAgfTtcbiAgICBnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGxpc3RlbmVyLCBmYWxzZSk7XG4gIC8vIElFOC1cbiAgfSBlbHNlIGlmIChPTlJFQURZU1RBVEVDSEFOR0UgaW4gY2VsKCdzY3JpcHQnKSkge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBodG1sLmFwcGVuZENoaWxkKGNlbCgnc2NyaXB0JykpW09OUkVBRFlTVEFURUNIQU5HRV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGh0bWwucmVtb3ZlQ2hpbGQodGhpcyk7XG4gICAgICAgIHJ1bi5jYWxsKGlkKTtcbiAgICAgIH07XG4gICAgfTtcbiAgLy8gUmVzdCBvbGQgYnJvd3NlcnNcbiAgfSBlbHNlIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgc2V0VGltZW91dChjdHgocnVuLCBpZCwgMSksIDApO1xuICAgIH07XG4gIH1cbn1cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZXQ6IHNldFRhc2ssXG4gIGNsZWFyOiBjbGVhclRhc2tcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///89\n")},function(module,exports,__webpack_require__){eval("var global = __webpack_require__(2);\nvar macrotask = __webpack_require__(89).set;\nvar Observer = global.MutationObserver || global.WebKitMutationObserver;\nvar process = global.process;\nvar Promise = global.Promise;\nvar isNode = __webpack_require__(20)(process) == 'process';\n\nmodule.exports = function () {\n var head, last, notify;\n\n var flush = function () {\n var parent, fn;\n if (isNode && (parent = process.domain)) parent.exit();\n while (head) {\n fn = head.fn;\n head = head.next;\n try {\n fn();\n } catch (e) {\n if (head) notify();\n else last = undefined;\n throw e;\n }\n } last = undefined;\n if (parent) parent.enter();\n };\n\n // Node.js\n if (isNode) {\n notify = function () {\n process.nextTick(flush);\n };\n // browsers with MutationObserver, except iOS Safari - https://github.com/zloirock/core-js/issues/339\n } else if (Observer && !(global.navigator && global.navigator.standalone)) {\n var toggle = true;\n var node = document.createTextNode('');\n new Observer(flush).observe(node, { characterData: true }); // eslint-disable-line no-new\n notify = function () {\n node.data = toggle = !toggle;\n };\n // environments with maybe non-completely correct, but existent Promise\n } else if (Promise && Promise.resolve) {\n // Promise.resolve without an argument throws an error in LG WebOS 2\n var promise = Promise.resolve(undefined);\n notify = function () {\n promise.then(flush);\n };\n // for other environments - macrotask based on:\n // - setImmediate\n // - MessageChannel\n // - window.postMessag\n // - onreadystatechange\n // - setTimeout\n } else {\n notify = function () {\n // strange IE + webpack dev server bug - use .call(global)\n macrotask.call(global, flush);\n };\n }\n\n return function (fn) {\n var task = { fn: fn, next: undefined };\n if (last) last.next = task;\n if (!head) {\n head = task;\n notify();\n } last = task;\n };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWljcm90YXNrLmpzPzgwNzkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsYUFBYSxtQkFBTyxDQUFDLENBQVc7QUFDaEMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBUztBQUNqQztBQUNBO0FBQ0E7QUFDQSxhQUFhLG1CQUFPLENBQUMsRUFBUTs7QUFFN0I7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSx1Q0FBdUMsc0JBQXNCLEVBQUU7QUFDL0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EiLCJmaWxlIjoiOTAuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgbWFjcm90YXNrID0gcmVxdWlyZSgnLi9fdGFzaycpLnNldDtcbnZhciBPYnNlcnZlciA9IGdsb2JhbC5NdXRhdGlvbk9ic2VydmVyIHx8IGdsb2JhbC5XZWJLaXRNdXRhdGlvbk9ic2VydmVyO1xudmFyIHByb2Nlc3MgPSBnbG9iYWwucHJvY2VzcztcbnZhciBQcm9taXNlID0gZ2xvYmFsLlByb21pc2U7XG52YXIgaXNOb2RlID0gcmVxdWlyZSgnLi9fY29mJykocHJvY2VzcykgPT0gJ3Byb2Nlc3MnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGhlYWQsIGxhc3QsIG5vdGlmeTtcblxuICB2YXIgZmx1c2ggPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHBhcmVudCwgZm47XG4gICAgaWYgKGlzTm9kZSAmJiAocGFyZW50ID0gcHJvY2Vzcy5kb21haW4pKSBwYXJlbnQuZXhpdCgpO1xuICAgIHdoaWxlIChoZWFkKSB7XG4gICAgICBmbiA9IGhlYWQuZm47XG4gICAgICBoZWFkID0gaGVhZC5uZXh0O1xuICAgICAgdHJ5IHtcbiAgICAgICAgZm4oKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKGhlYWQpIG5vdGlmeSgpO1xuICAgICAgICBlbHNlIGxhc3QgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgfSBsYXN0ID0gdW5kZWZpbmVkO1xuICAgIGlmIChwYXJlbnQpIHBhcmVudC5lbnRlcigpO1xuICB9O1xuXG4gIC8vIE5vZGUuanNcbiAgaWYgKGlzTm9kZSkge1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soZmx1c2gpO1xuICAgIH07XG4gIC8vIGJyb3dzZXJzIHdpdGggTXV0YXRpb25PYnNlcnZlciwgZXhjZXB0IGlPUyBTYWZhcmkgLSBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvMzM5XG4gIH0gZWxzZSBpZiAoT2JzZXJ2ZXIgJiYgIShnbG9iYWwubmF2aWdhdG9yICYmIGdsb2JhbC5uYXZpZ2F0b3Iuc3RhbmRhbG9uZSkpIHtcbiAgICB2YXIgdG9nZ2xlID0gdHJ1ZTtcbiAgICB2YXIgbm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcnKTtcbiAgICBuZXcgT2JzZXJ2ZXIoZmx1c2gpLm9ic2VydmUobm9kZSwgeyBjaGFyYWN0ZXJEYXRhOiB0cnVlIH0pOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIG5vZGUuZGF0YSA9IHRvZ2dsZSA9ICF0b2dnbGU7XG4gICAgfTtcbiAgLy8gZW52aXJvbm1lbnRzIHdpdGggbWF5YmUgbm9uLWNvbXBsZXRlbHkgY29ycmVjdCwgYnV0IGV4aXN0ZW50IFByb21pc2VcbiAgfSBlbHNlIGlmIChQcm9taXNlICYmIFByb21pc2UucmVzb2x2ZSkge1xuICAgIC8vIFByb21pc2UucmVzb2x2ZSB3aXRob3V0IGFuIGFyZ3VtZW50IHRocm93cyBhbiBlcnJvciBpbiBMRyBXZWJPUyAyXG4gICAgdmFyIHByb21pc2UgPSBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBwcm9taXNlLnRoZW4oZmx1c2gpO1xuICAgIH07XG4gIC8vIGZvciBvdGhlciBlbnZpcm9ubWVudHMgLSBtYWNyb3Rhc2sgYmFzZWQgb246XG4gIC8vIC0gc2V0SW1tZWRpYXRlXG4gIC8vIC0gTWVzc2FnZUNoYW5uZWxcbiAgLy8gLSB3aW5kb3cucG9zdE1lc3NhZ1xuICAvLyAtIG9ucmVhZHlzdGF0ZWNoYW5nZVxuICAvLyAtIHNldFRpbWVvdXRcbiAgfSBlbHNlIHtcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBzdHJhbmdlIElFICsgd2VicGFjayBkZXYgc2VydmVyIGJ1ZyAtIHVzZSAuY2FsbChnbG9iYWwpXG4gICAgICBtYWNyb3Rhc2suY2FsbChnbG9iYWwsIGZsdXNoKTtcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChmbikge1xuICAgIHZhciB0YXNrID0geyBmbjogZm4sIG5leHQ6IHVuZGVmaW5lZCB9O1xuICAgIGlmIChsYXN0KSBsYXN0Lm5leHQgPSB0YXNrO1xuICAgIGlmICghaGVhZCkge1xuICAgICAgaGVhZCA9IHRhc2s7XG4gICAgICBub3RpZnkoKTtcbiAgICB9IGxhc3QgPSB0YXNrO1xuICB9O1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///90\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// 25.4.1.5 NewPromiseCapability(C)\nvar aFunction = __webpack_require__(10);\n\nfunction PromiseCapability(C) {\n var resolve, reject;\n this.promise = new C(function ($$resolve, $$reject) {\n if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n resolve = $$resolve;\n reject = $$reject;\n });\n this.resolve = aFunction(resolve);\n this.reject = aFunction(reject);\n}\n\nmodule.exports.f = function (C) {\n return new PromiseCapability(C);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbmV3LXByb21pc2UtY2FwYWJpbGl0eS5qcz9hNWI4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlOztBQUV2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSIsImZpbGUiOiI5MS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIDI1LjQuMS41IE5ld1Byb21pc2VDYXBhYmlsaXR5KEMpXG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xuXG5mdW5jdGlvbiBQcm9taXNlQ2FwYWJpbGl0eShDKSB7XG4gIHZhciByZXNvbHZlLCByZWplY3Q7XG4gIHRoaXMucHJvbWlzZSA9IG5ldyBDKGZ1bmN0aW9uICgkJHJlc29sdmUsICQkcmVqZWN0KSB7XG4gICAgaWYgKHJlc29sdmUgIT09IHVuZGVmaW5lZCB8fCByZWplY3QgIT09IHVuZGVmaW5lZCkgdGhyb3cgVHlwZUVycm9yKCdCYWQgUHJvbWlzZSBjb25zdHJ1Y3RvcicpO1xuICAgIHJlc29sdmUgPSAkJHJlc29sdmU7XG4gICAgcmVqZWN0ID0gJCRyZWplY3Q7XG4gIH0pO1xuICB0aGlzLnJlc29sdmUgPSBhRnVuY3Rpb24ocmVzb2x2ZSk7XG4gIHRoaXMucmVqZWN0ID0gYUZ1bmN0aW9uKHJlamVjdCk7XG59XG5cbm1vZHVsZS5leHBvcnRzLmYgPSBmdW5jdGlvbiAoQykge1xuICByZXR1cm4gbmV3IFByb21pc2VDYXBhYmlsaXR5KEMpO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///91\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar global = __webpack_require__(2);\nvar DESCRIPTORS = __webpack_require__(7);\nvar LIBRARY = __webpack_require__(29);\nvar $typed = __webpack_require__(62);\nvar hide = __webpack_require__(11);\nvar redefineAll = __webpack_require__(41);\nvar fails = __webpack_require__(3);\nvar anInstance = __webpack_require__(39);\nvar toInteger = __webpack_require__(21);\nvar toLength = __webpack_require__(6);\nvar toIndex = __webpack_require__(122);\nvar gOPN = __webpack_require__(37).f;\nvar dP = __webpack_require__(8).f;\nvar arrayFill = __webpack_require__(85);\nvar setToStringTag = __webpack_require__(43);\nvar ARRAY_BUFFER = 'ArrayBuffer';\nvar DATA_VIEW = 'DataView';\nvar PROTOTYPE = 'prototype';\nvar WRONG_LENGTH = 'Wrong length!';\nvar WRONG_INDEX = 'Wrong index!';\nvar $ArrayBuffer = global[ARRAY_BUFFER];\nvar $DataView = global[DATA_VIEW];\nvar Math = global.Math;\nvar RangeError = global.RangeError;\n// eslint-disable-next-line no-shadow-restricted-names\nvar Infinity = global.Infinity;\nvar BaseBuffer = $ArrayBuffer;\nvar abs = Math.abs;\nvar pow = Math.pow;\nvar floor = Math.floor;\nvar log = Math.log;\nvar LN2 = Math.LN2;\nvar BUFFER = 'buffer';\nvar BYTE_LENGTH = 'byteLength';\nvar BYTE_OFFSET = 'byteOffset';\nvar $BUFFER = DESCRIPTORS ? '_b' : BUFFER;\nvar $LENGTH = DESCRIPTORS ? '_l' : BYTE_LENGTH;\nvar $OFFSET = DESCRIPTORS ? '_o' : BYTE_OFFSET;\n\n// IEEE754 conversions based on https://github.com/feross/ieee754\nfunction packIEEE754(value, mLen, nBytes) {\n var buffer = new Array(nBytes);\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var rt = mLen === 23 ? pow(2, -24) - pow(2, -77) : 0;\n var i = 0;\n var s = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0;\n var e, m, c;\n value = abs(value);\n // eslint-disable-next-line no-self-compare\n if (value != value || value === Infinity) {\n // eslint-disable-next-line no-self-compare\n m = value != value ? 1 : 0;\n e = eMax;\n } else {\n e = floor(log(value) / LN2);\n if (value * (c = pow(2, -e)) < 1) {\n e--;\n c *= 2;\n }\n if (e + eBias >= 1) {\n value += rt / c;\n } else {\n value += rt * pow(2, 1 - eBias);\n }\n if (value * c >= 2) {\n e++;\n c /= 2;\n }\n if (e + eBias >= eMax) {\n m = 0;\n e = eMax;\n } else if (e + eBias >= 1) {\n m = (value * c - 1) * pow(2, mLen);\n e = e + eBias;\n } else {\n m = value * pow(2, eBias - 1) * pow(2, mLen);\n e = 0;\n }\n }\n for (; mLen >= 8; buffer[i++] = m & 255, m /= 256, mLen -= 8);\n e = e << mLen | m;\n eLen += mLen;\n for (; eLen > 0; buffer[i++] = e & 255, e /= 256, eLen -= 8);\n buffer[--i] |= s * 128;\n return buffer;\n}\nfunction unpackIEEE754(buffer, mLen, nBytes) {\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var nBits = eLen - 7;\n var i = nBytes - 1;\n var s = buffer[i--];\n var e = s & 127;\n var m;\n s >>= 7;\n for (; nBits > 0; e = e * 256 + buffer[i], i--, nBits -= 8);\n m = e & (1 << -nBits) - 1;\n e >>= -nBits;\n nBits += mLen;\n for (; nBits > 0; m = m * 256 + buffer[i], i--, nBits -= 8);\n if (e === 0) {\n e = 1 - eBias;\n } else if (e === eMax) {\n return m ? NaN : s ? -Infinity : Infinity;\n } else {\n m = m + pow(2, mLen);\n e = e - eBias;\n } return (s ? -1 : 1) * m * pow(2, e - mLen);\n}\n\nfunction unpackI32(bytes) {\n return bytes[3] << 24 | bytes[2] << 16 | bytes[1] << 8 | bytes[0];\n}\nfunction packI8(it) {\n return [it & 0xff];\n}\nfunction packI16(it) {\n return [it & 0xff, it >> 8 & 0xff];\n}\nfunction packI32(it) {\n return [it & 0xff, it >> 8 & 0xff, it >> 16 & 0xff, it >> 24 & 0xff];\n}\nfunction packF64(it) {\n return packIEEE754(it, 52, 8);\n}\nfunction packF32(it) {\n return packIEEE754(it, 23, 4);\n}\n\nfunction addGetter(C, key, internal) {\n dP(C[PROTOTYPE], key, { get: function () { return this[internal]; } });\n}\n\nfunction get(view, bytes, index, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = store.slice(start, start + bytes);\n return isLittleEndian ? pack : pack.reverse();\n}\nfunction set(view, bytes, index, conversion, value, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = conversion(+value);\n for (var i = 0; i < bytes; i++) store[start + i] = pack[isLittleEndian ? i : bytes - i - 1];\n}\n\nif (!$typed.ABV) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer, ARRAY_BUFFER);\n var byteLength = toIndex(length);\n this._b = arrayFill.call(new Array(byteLength), 0);\n this[$LENGTH] = byteLength;\n };\n\n $DataView = function DataView(buffer, byteOffset, byteLength) {\n anInstance(this, $DataView, DATA_VIEW);\n anInstance(buffer, $ArrayBuffer, DATA_VIEW);\n var bufferLength = buffer[$LENGTH];\n var offset = toInteger(byteOffset);\n if (offset < 0 || offset > bufferLength) throw RangeError('Wrong offset!');\n byteLength = byteLength === undefined ? bufferLength - offset : toLength(byteLength);\n if (offset + byteLength > bufferLength) throw RangeError(WRONG_LENGTH);\n this[$BUFFER] = buffer;\n this[$OFFSET] = offset;\n this[$LENGTH] = byteLength;\n };\n\n if (DESCRIPTORS) {\n addGetter($ArrayBuffer, BYTE_LENGTH, '_l');\n addGetter($DataView, BUFFER, '_b');\n addGetter($DataView, BYTE_LENGTH, '_l');\n addGetter($DataView, BYTE_OFFSET, '_o');\n }\n\n redefineAll($DataView[PROTOTYPE], {\n getInt8: function getInt8(byteOffset) {\n return get(this, 1, byteOffset)[0] << 24 >> 24;\n },\n getUint8: function getUint8(byteOffset) {\n return get(this, 1, byteOffset)[0];\n },\n getInt16: function getInt16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return (bytes[1] << 8 | bytes[0]) << 16 >> 16;\n },\n getUint16: function getUint16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return bytes[1] << 8 | bytes[0];\n },\n getInt32: function getInt32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1]));\n },\n getUint32: function getUint32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1])) >>> 0;\n },\n getFloat32: function getFloat32(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 4, byteOffset, arguments[1]), 23, 4);\n },\n getFloat64: function getFloat64(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 8, byteOffset, arguments[1]), 52, 8);\n },\n setInt8: function setInt8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setUint8: function setUint8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setInt16: function setInt16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setUint16: function setUint16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setInt32: function setInt32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setUint32: function setUint32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setFloat32: function setFloat32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packF32, value, arguments[2]);\n },\n setFloat64: function setFloat64(byteOffset, value /* , littleEndian */) {\n set(this, 8, byteOffset, packF64, value, arguments[2]);\n }\n });\n} else {\n if (!fails(function () {\n $ArrayBuffer(1);\n }) || !fails(function () {\n new $ArrayBuffer(-1); // eslint-disable-line no-new\n }) || fails(function () {\n new $ArrayBuffer(); // eslint-disable-line no-new\n new $ArrayBuffer(1.5); // eslint-disable-line no-new\n new $ArrayBuffer(NaN); // eslint-disable-line no-new\n return $ArrayBuffer.name != ARRAY_BUFFER;\n })) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer);\n return new BaseBuffer(toIndex(length));\n };\n var ArrayBufferProto = $ArrayBuffer[PROTOTYPE] = BaseBuffer[PROTOTYPE];\n for (var keys = gOPN(BaseBuffer), j = 0, key; keys.length > j;) {\n if (!((key = keys[j++]) in $ArrayBuffer)) hide($ArrayBuffer, key, BaseBuffer[key]);\n }\n if (!LIBRARY) ArrayBufferProto.constructor = $ArrayBuffer;\n }\n // iOS Safari 7.x bug\n var view = new $DataView(new $ArrayBuffer(2));\n var $setInt8 = $DataView[PROTOTYPE].setInt8;\n view.setInt8(0, 2147483648);\n view.setInt8(1, 2147483649);\n if (view.getInt8(0) || !view.getInt8(1)) redefineAll($DataView[PROTOTYPE], {\n setInt8: function setInt8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n },\n setUint8: function setUint8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n }\n }, true);\n}\nsetToStringTag($ArrayBuffer, ARRAY_BUFFER);\nsetToStringTag($DataView, DATA_VIEW);\nhide($DataView[PROTOTYPE], $typed.VIEW, true);\nexports[ARRAY_BUFFER] = $ArrayBuffer;\nexports[DATA_VIEW] = $DataView;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdHlwZWQtYnVmZmVyLmpzP2VkMGIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixhQUFhLG1CQUFPLENBQUMsQ0FBVztBQUNoQyxrQkFBa0IsbUJBQU8sQ0FBQyxDQUFnQjtBQUMxQyxjQUFjLG1CQUFPLENBQUMsRUFBWTtBQUNsQyxhQUFhLG1CQUFPLENBQUMsRUFBVTtBQUMvQixXQUFXLG1CQUFPLENBQUMsRUFBUztBQUM1QixrQkFBa0IsbUJBQU8sQ0FBQyxFQUFpQjtBQUMzQyxZQUFZLG1CQUFPLENBQUMsQ0FBVTtBQUM5QixpQkFBaUIsbUJBQU8sQ0FBQyxFQUFnQjtBQUN6QyxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGNBQWMsbUJBQU8sQ0FBQyxHQUFhO0FBQ25DLFdBQVcsbUJBQU8sQ0FBQyxFQUFnQjtBQUNuQyxTQUFTLG1CQUFPLENBQUMsQ0FBYztBQUMvQixnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDLHFCQUFxQixtQkFBTyxDQUFDLEVBQXNCO0FBQ25EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLFdBQVc7QUFDbkI7QUFDQTtBQUNBLFFBQVEsVUFBVTtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsV0FBVztBQUNuQjtBQUNBO0FBQ0E7QUFDQSxRQUFRLFdBQVc7QUFDbkI7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHlCQUF5QixtQkFBbUIsdUJBQXVCLEVBQUUsRUFBRTtBQUN2RTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixXQUFXO0FBQzVCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBO0FBQ0EsR0FBRztBQUNILHlCQUF5QjtBQUN6QixHQUFHO0FBQ0gsdUJBQXVCO0FBQ3ZCLDBCQUEwQjtBQUMxQiwwQkFBMEI7QUFDMUI7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlEQUFpRCxpQkFBaUI7QUFDbEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiOTIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpO1xudmFyIExJQlJBUlkgPSByZXF1aXJlKCcuL19saWJyYXJ5Jyk7XG52YXIgJHR5cGVkID0gcmVxdWlyZSgnLi9fdHlwZWQnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIHJlZGVmaW5lQWxsID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUtYWxsJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuL19hbi1pbnN0YW5jZScpO1xudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIHRvSW5kZXggPSByZXF1aXJlKCcuL190by1pbmRleCcpO1xudmFyIGdPUE4gPSByZXF1aXJlKCcuL19vYmplY3QtZ29wbicpLmY7XG52YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mO1xudmFyIGFycmF5RmlsbCA9IHJlcXVpcmUoJy4vX2FycmF5LWZpbGwnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgQVJSQVlfQlVGRkVSID0gJ0FycmF5QnVmZmVyJztcbnZhciBEQVRBX1ZJRVcgPSAnRGF0YVZpZXcnO1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xudmFyIFdST05HX0xFTkdUSCA9ICdXcm9uZyBsZW5ndGghJztcbnZhciBXUk9OR19JTkRFWCA9ICdXcm9uZyBpbmRleCEnO1xudmFyICRBcnJheUJ1ZmZlciA9IGdsb2JhbFtBUlJBWV9CVUZGRVJdO1xudmFyICREYXRhVmlldyA9IGdsb2JhbFtEQVRBX1ZJRVddO1xudmFyIE1hdGggPSBnbG9iYWwuTWF0aDtcbnZhciBSYW5nZUVycm9yID0gZ2xvYmFsLlJhbmdlRXJyb3I7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2hhZG93LXJlc3RyaWN0ZWQtbmFtZXNcbnZhciBJbmZpbml0eSA9IGdsb2JhbC5JbmZpbml0eTtcbnZhciBCYXNlQnVmZmVyID0gJEFycmF5QnVmZmVyO1xudmFyIGFicyA9IE1hdGguYWJzO1xudmFyIHBvdyA9IE1hdGgucG93O1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcbnZhciBsb2cgPSBNYXRoLmxvZztcbnZhciBMTjIgPSBNYXRoLkxOMjtcbnZhciBCVUZGRVIgPSAnYnVmZmVyJztcbnZhciBCWVRFX0xFTkdUSCA9ICdieXRlTGVuZ3RoJztcbnZhciBCWVRFX09GRlNFVCA9ICdieXRlT2Zmc2V0JztcbnZhciAkQlVGRkVSID0gREVTQ1JJUFRPUlMgPyAnX2InIDogQlVGRkVSO1xudmFyICRMRU5HVEggPSBERVNDUklQVE9SUyA/ICdfbCcgOiBCWVRFX0xFTkdUSDtcbnZhciAkT0ZGU0VUID0gREVTQ1JJUFRPUlMgPyAnX28nIDogQllURV9PRkZTRVQ7XG5cbi8vIElFRUU3NTQgY29udmVyc2lvbnMgYmFzZWQgb24gaHR0cHM6Ly9naXRodWIuY29tL2Zlcm9zcy9pZWVlNzU0XG5mdW5jdGlvbiBwYWNrSUVFRTc1NCh2YWx1ZSwgbUxlbiwgbkJ5dGVzKSB7XG4gIHZhciBidWZmZXIgPSBuZXcgQXJyYXkobkJ5dGVzKTtcbiAgdmFyIGVMZW4gPSBuQnl0ZXMgKiA4IC0gbUxlbiAtIDE7XG4gIHZhciBlTWF4ID0gKDEgPDwgZUxlbikgLSAxO1xuICB2YXIgZUJpYXMgPSBlTWF4ID4+IDE7XG4gIHZhciBydCA9IG1MZW4gPT09IDIzID8gcG93KDIsIC0yNCkgLSBwb3coMiwgLTc3KSA6IDA7XG4gIHZhciBpID0gMDtcbiAgdmFyIHMgPSB2YWx1ZSA8IDAgfHwgdmFsdWUgPT09IDAgJiYgMSAvIHZhbHVlIDwgMCA/IDEgOiAwO1xuICB2YXIgZSwgbSwgYztcbiAgdmFsdWUgPSBhYnModmFsdWUpO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gIGlmICh2YWx1ZSAhPSB2YWx1ZSB8fCB2YWx1ZSA9PT0gSW5maW5pdHkpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgbSA9IHZhbHVlICE9IHZhbHVlID8gMSA6IDA7XG4gICAgZSA9IGVNYXg7XG4gIH0gZWxzZSB7XG4gICAgZSA9IGZsb29yKGxvZyh2YWx1ZSkgLyBMTjIpO1xuICAgIGlmICh2YWx1ZSAqIChjID0gcG93KDIsIC1lKSkgPCAxKSB7XG4gICAgICBlLS07XG4gICAgICBjICo9IDI7XG4gICAgfVxuICAgIGlmIChlICsgZUJpYXMgPj0gMSkge1xuICAgICAgdmFsdWUgKz0gcnQgLyBjO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YWx1ZSArPSBydCAqIHBvdygyLCAxIC0gZUJpYXMpO1xuICAgIH1cbiAgICBpZiAodmFsdWUgKiBjID49IDIpIHtcbiAgICAgIGUrKztcbiAgICAgIGMgLz0gMjtcbiAgICB9XG4gICAgaWYgKGUgKyBlQmlhcyA+PSBlTWF4KSB7XG4gICAgICBtID0gMDtcbiAgICAgIGUgPSBlTWF4O1xuICAgIH0gZWxzZSBpZiAoZSArIGVCaWFzID49IDEpIHtcbiAgICAgIG0gPSAodmFsdWUgKiBjIC0gMSkgKiBwb3coMiwgbUxlbik7XG4gICAgICBlID0gZSArIGVCaWFzO1xuICAgIH0gZWxzZSB7XG4gICAgICBtID0gdmFsdWUgKiBwb3coMiwgZUJpYXMgLSAxKSAqIHBvdygyLCBtTGVuKTtcbiAgICAgIGUgPSAwO1xuICAgIH1cbiAgfVxuICBmb3IgKDsgbUxlbiA+PSA4OyBidWZmZXJbaSsrXSA9IG0gJiAyNTUsIG0gLz0gMjU2LCBtTGVuIC09IDgpO1xuICBlID0gZSA8PCBtTGVuIHwgbTtcbiAgZUxlbiArPSBtTGVuO1xuICBmb3IgKDsgZUxlbiA+IDA7IGJ1ZmZlcltpKytdID0gZSAmIDI1NSwgZSAvPSAyNTYsIGVMZW4gLT0gOCk7XG4gIGJ1ZmZlclstLWldIHw9IHMgKiAxMjg7XG4gIHJldHVybiBidWZmZXI7XG59XG5mdW5jdGlvbiB1bnBhY2tJRUVFNzU0KGJ1ZmZlciwgbUxlbiwgbkJ5dGVzKSB7XG4gIHZhciBlTGVuID0gbkJ5dGVzICogOCAtIG1MZW4gLSAxO1xuICB2YXIgZU1heCA9ICgxIDw8IGVMZW4pIC0gMTtcbiAgdmFyIGVCaWFzID0gZU1heCA+PiAxO1xuICB2YXIgbkJpdHMgPSBlTGVuIC0gNztcbiAgdmFyIGkgPSBuQnl0ZXMgLSAxO1xuICB2YXIgcyA9IGJ1ZmZlcltpLS1dO1xuICB2YXIgZSA9IHMgJiAxMjc7XG4gIHZhciBtO1xuICBzID4+PSA3O1xuICBmb3IgKDsgbkJpdHMgPiAwOyBlID0gZSAqIDI1NiArIGJ1ZmZlcltpXSwgaS0tLCBuQml0cyAtPSA4KTtcbiAgbSA9IGUgJiAoMSA8PCAtbkJpdHMpIC0gMTtcbiAgZSA+Pj0gLW5CaXRzO1xuICBuQml0cyArPSBtTGVuO1xuICBmb3IgKDsgbkJpdHMgPiAwOyBtID0gbSAqIDI1NiArIGJ1ZmZlcltpXSwgaS0tLCBuQml0cyAtPSA4KTtcbiAgaWYgKGUgPT09IDApIHtcbiAgICBlID0gMSAtIGVCaWFzO1xuICB9IGVsc2UgaWYgKGUgPT09IGVNYXgpIHtcbiAgICByZXR1cm4gbSA/IE5hTiA6IHMgPyAtSW5maW5pdHkgOiBJbmZpbml0eTtcbiAgfSBlbHNlIHtcbiAgICBtID0gbSArIHBvdygyLCBtTGVuKTtcbiAgICBlID0gZSAtIGVCaWFzO1xuICB9IHJldHVybiAocyA/IC0xIDogMSkgKiBtICogcG93KDIsIGUgLSBtTGVuKTtcbn1cblxuZnVuY3Rpb24gdW5wYWNrSTMyKGJ5dGVzKSB7XG4gIHJldHVybiBieXRlc1szXSA8PCAyNCB8IGJ5dGVzWzJdIDw8IDE2IHwgYnl0ZXNbMV0gPDwgOCB8IGJ5dGVzWzBdO1xufVxuZnVuY3Rpb24gcGFja0k4KGl0KSB7XG4gIHJldHVybiBbaXQgJiAweGZmXTtcbn1cbmZ1bmN0aW9uIHBhY2tJMTYoaXQpIHtcbiAgcmV0dXJuIFtpdCAmIDB4ZmYsIGl0ID4+IDggJiAweGZmXTtcbn1cbmZ1bmN0aW9uIHBhY2tJMzIoaXQpIHtcbiAgcmV0dXJuIFtpdCAmIDB4ZmYsIGl0ID4+IDggJiAweGZmLCBpdCA+PiAxNiAmIDB4ZmYsIGl0ID4+IDI0ICYgMHhmZl07XG59XG5mdW5jdGlvbiBwYWNrRjY0KGl0KSB7XG4gIHJldHVybiBwYWNrSUVFRTc1NChpdCwgNTIsIDgpO1xufVxuZnVuY3Rpb24gcGFja0YzMihpdCkge1xuICByZXR1cm4gcGFja0lFRUU3NTQoaXQsIDIzLCA0KTtcbn1cblxuZnVuY3Rpb24gYWRkR2V0dGVyKEMsIGtleSwgaW50ZXJuYWwpIHtcbiAgZFAoQ1tQUk9UT1RZUEVdLCBrZXksIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzW2ludGVybmFsXTsgfSB9KTtcbn1cblxuZnVuY3Rpb24gZ2V0KHZpZXcsIGJ5dGVzLCBpbmRleCwgaXNMaXR0bGVFbmRpYW4pIHtcbiAgdmFyIG51bUluZGV4ID0gK2luZGV4O1xuICB2YXIgaW50SW5kZXggPSB0b0luZGV4KG51bUluZGV4KTtcbiAgaWYgKGludEluZGV4ICsgYnl0ZXMgPiB2aWV3WyRMRU5HVEhdKSB0aHJvdyBSYW5nZUVycm9yKFdST05HX0lOREVYKTtcbiAgdmFyIHN0b3JlID0gdmlld1skQlVGRkVSXS5fYjtcbiAgdmFyIHN0YXJ0ID0gaW50SW5kZXggKyB2aWV3WyRPRkZTRVRdO1xuICB2YXIgcGFjayA9IHN0b3JlLnNsaWNlKHN0YXJ0LCBzdGFydCArIGJ5dGVzKTtcbiAgcmV0dXJuIGlzTGl0dGxlRW5kaWFuID8gcGFjayA6IHBhY2sucmV2ZXJzZSgpO1xufVxuZnVuY3Rpb24gc2V0KHZpZXcsIGJ5dGVzLCBpbmRleCwgY29udmVyc2lvbiwgdmFsdWUsIGlzTGl0dGxlRW5kaWFuKSB7XG4gIHZhciBudW1JbmRleCA9ICtpbmRleDtcbiAgdmFyIGludEluZGV4ID0gdG9JbmRleChudW1JbmRleCk7XG4gIGlmIChpbnRJbmRleCArIGJ5dGVzID4gdmlld1skTEVOR1RIXSkgdGhyb3cgUmFuZ2VFcnJvcihXUk9OR19JTkRFWCk7XG4gIHZhciBzdG9yZSA9IHZpZXdbJEJVRkZFUl0uX2I7XG4gIHZhciBzdGFydCA9IGludEluZGV4ICsgdmlld1skT0ZGU0VUXTtcbiAgdmFyIHBhY2sgPSBjb252ZXJzaW9uKCt2YWx1ZSk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYnl0ZXM7IGkrKykgc3RvcmVbc3RhcnQgKyBpXSA9IHBhY2tbaXNMaXR0bGVFbmRpYW4gPyBpIDogYnl0ZXMgLSBpIC0gMV07XG59XG5cbmlmICghJHR5cGVkLkFCVikge1xuICAkQXJyYXlCdWZmZXIgPSBmdW5jdGlvbiBBcnJheUJ1ZmZlcihsZW5ndGgpIHtcbiAgICBhbkluc3RhbmNlKHRoaXMsICRBcnJheUJ1ZmZlciwgQVJSQVlfQlVGRkVSKTtcbiAgICB2YXIgYnl0ZUxlbmd0aCA9IHRvSW5kZXgobGVuZ3RoKTtcbiAgICB0aGlzLl9iID0gYXJyYXlGaWxsLmNhbGwobmV3IEFycmF5KGJ5dGVMZW5ndGgpLCAwKTtcbiAgICB0aGlzWyRMRU5HVEhdID0gYnl0ZUxlbmd0aDtcbiAgfTtcblxuICAkRGF0YVZpZXcgPSBmdW5jdGlvbiBEYXRhVmlldyhidWZmZXIsIGJ5dGVPZmZzZXQsIGJ5dGVMZW5ndGgpIHtcbiAgICBhbkluc3RhbmNlKHRoaXMsICREYXRhVmlldywgREFUQV9WSUVXKTtcbiAgICBhbkluc3RhbmNlKGJ1ZmZlciwgJEFycmF5QnVmZmVyLCBEQVRBX1ZJRVcpO1xuICAgIHZhciBidWZmZXJMZW5ndGggPSBidWZmZXJbJExFTkdUSF07XG4gICAgdmFyIG9mZnNldCA9IHRvSW50ZWdlcihieXRlT2Zmc2V0KTtcbiAgICBpZiAob2Zmc2V0IDwgMCB8fCBvZmZzZXQgPiBidWZmZXJMZW5ndGgpIHRocm93IFJhbmdlRXJyb3IoJ1dyb25nIG9mZnNldCEnKTtcbiAgICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCA9PT0gdW5kZWZpbmVkID8gYnVmZmVyTGVuZ3RoIC0gb2Zmc2V0IDogdG9MZW5ndGgoYnl0ZUxlbmd0aCk7XG4gICAgaWYgKG9mZnNldCArIGJ5dGVMZW5ndGggPiBidWZmZXJMZW5ndGgpIHRocm93IFJhbmdlRXJyb3IoV1JPTkdfTEVOR1RIKTtcbiAgICB0aGlzWyRCVUZGRVJdID0gYnVmZmVyO1xuICAgIHRoaXNbJE9GRlNFVF0gPSBvZmZzZXQ7XG4gICAgdGhpc1skTEVOR1RIXSA9IGJ5dGVMZW5ndGg7XG4gIH07XG5cbiAgaWYgKERFU0NSSVBUT1JTKSB7XG4gICAgYWRkR2V0dGVyKCRBcnJheUJ1ZmZlciwgQllURV9MRU5HVEgsICdfbCcpO1xuICAgIGFkZEdldHRlcigkRGF0YVZpZXcsIEJVRkZFUiwgJ19iJyk7XG4gICAgYWRkR2V0dGVyKCREYXRhVmlldywgQllURV9MRU5HVEgsICdfbCcpO1xuICAgIGFkZEdldHRlcigkRGF0YVZpZXcsIEJZVEVfT0ZGU0VULCAnX28nKTtcbiAgfVxuXG4gIHJlZGVmaW5lQWxsKCREYXRhVmlld1tQUk9UT1RZUEVdLCB7XG4gICAgZ2V0SW50ODogZnVuY3Rpb24gZ2V0SW50OChieXRlT2Zmc2V0KSB7XG4gICAgICByZXR1cm4gZ2V0KHRoaXMsIDEsIGJ5dGVPZmZzZXQpWzBdIDw8IDI0ID4+IDI0O1xuICAgIH0sXG4gICAgZ2V0VWludDg6IGZ1bmN0aW9uIGdldFVpbnQ4KGJ5dGVPZmZzZXQpIHtcbiAgICAgIHJldHVybiBnZXQodGhpcywgMSwgYnl0ZU9mZnNldClbMF07XG4gICAgfSxcbiAgICBnZXRJbnQxNjogZnVuY3Rpb24gZ2V0SW50MTYoYnl0ZU9mZnNldCAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgdmFyIGJ5dGVzID0gZ2V0KHRoaXMsIDIsIGJ5dGVPZmZzZXQsIGFyZ3VtZW50c1sxXSk7XG4gICAgICByZXR1cm4gKGJ5dGVzWzFdIDw8IDggfCBieXRlc1swXSkgPDwgMTYgPj4gMTY7XG4gICAgfSxcbiAgICBnZXRVaW50MTY6IGZ1bmN0aW9uIGdldFVpbnQxNihieXRlT2Zmc2V0IC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICB2YXIgYnl0ZXMgPSBnZXQodGhpcywgMiwgYnl0ZU9mZnNldCwgYXJndW1lbnRzWzFdKTtcbiAgICAgIHJldHVybiBieXRlc1sxXSA8PCA4IHwgYnl0ZXNbMF07XG4gICAgfSxcbiAgICBnZXRJbnQzMjogZnVuY3Rpb24gZ2V0SW50MzIoYnl0ZU9mZnNldCAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgcmV0dXJuIHVucGFja0kzMihnZXQodGhpcywgNCwgYnl0ZU9mZnNldCwgYXJndW1lbnRzWzFdKSk7XG4gICAgfSxcbiAgICBnZXRVaW50MzI6IGZ1bmN0aW9uIGdldFVpbnQzMihieXRlT2Zmc2V0IC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICByZXR1cm4gdW5wYWNrSTMyKGdldCh0aGlzLCA0LCBieXRlT2Zmc2V0LCBhcmd1bWVudHNbMV0pKSA+Pj4gMDtcbiAgICB9LFxuICAgIGdldEZsb2F0MzI6IGZ1bmN0aW9uIGdldEZsb2F0MzIoYnl0ZU9mZnNldCAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgcmV0dXJuIHVucGFja0lFRUU3NTQoZ2V0KHRoaXMsIDQsIGJ5dGVPZmZzZXQsIGFyZ3VtZW50c1sxXSksIDIzLCA0KTtcbiAgICB9LFxuICAgIGdldEZsb2F0NjQ6IGZ1bmN0aW9uIGdldEZsb2F0NjQoYnl0ZU9mZnNldCAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgcmV0dXJuIHVucGFja0lFRUU3NTQoZ2V0KHRoaXMsIDgsIGJ5dGVPZmZzZXQsIGFyZ3VtZW50c1sxXSksIDUyLCA4KTtcbiAgICB9LFxuICAgIHNldEludDg6IGZ1bmN0aW9uIHNldEludDgoYnl0ZU9mZnNldCwgdmFsdWUpIHtcbiAgICAgIHNldCh0aGlzLCAxLCBieXRlT2Zmc2V0LCBwYWNrSTgsIHZhbHVlKTtcbiAgICB9LFxuICAgIHNldFVpbnQ4OiBmdW5jdGlvbiBzZXRVaW50OChieXRlT2Zmc2V0LCB2YWx1ZSkge1xuICAgICAgc2V0KHRoaXMsIDEsIGJ5dGVPZmZzZXQsIHBhY2tJOCwgdmFsdWUpO1xuICAgIH0sXG4gICAgc2V0SW50MTY6IGZ1bmN0aW9uIHNldEludDE2KGJ5dGVPZmZzZXQsIHZhbHVlIC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICBzZXQodGhpcywgMiwgYnl0ZU9mZnNldCwgcGFja0kxNiwgdmFsdWUsIGFyZ3VtZW50c1syXSk7XG4gICAgfSxcbiAgICBzZXRVaW50MTY6IGZ1bmN0aW9uIHNldFVpbnQxNihieXRlT2Zmc2V0LCB2YWx1ZSAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgc2V0KHRoaXMsIDIsIGJ5dGVPZmZzZXQsIHBhY2tJMTYsIHZhbHVlLCBhcmd1bWVudHNbMl0pO1xuICAgIH0sXG4gICAgc2V0SW50MzI6IGZ1bmN0aW9uIHNldEludDMyKGJ5dGVPZmZzZXQsIHZhbHVlIC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICBzZXQodGhpcywgNCwgYnl0ZU9mZnNldCwgcGFja0kzMiwgdmFsdWUsIGFyZ3VtZW50c1syXSk7XG4gICAgfSxcbiAgICBzZXRVaW50MzI6IGZ1bmN0aW9uIHNldFVpbnQzMihieXRlT2Zmc2V0LCB2YWx1ZSAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgc2V0KHRoaXMsIDQsIGJ5dGVPZmZzZXQsIHBhY2tJMzIsIHZhbHVlLCBhcmd1bWVudHNbMl0pO1xuICAgIH0sXG4gICAgc2V0RmxvYXQzMjogZnVuY3Rpb24gc2V0RmxvYXQzMihieXRlT2Zmc2V0LCB2YWx1ZSAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgc2V0KHRoaXMsIDQsIGJ5dGVPZmZzZXQsIHBhY2tGMzIsIHZhbHVlLCBhcmd1bWVudHNbMl0pO1xuICAgIH0sXG4gICAgc2V0RmxvYXQ2NDogZnVuY3Rpb24gc2V0RmxvYXQ2NChieXRlT2Zmc2V0LCB2YWx1ZSAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgc2V0KHRoaXMsIDgsIGJ5dGVPZmZzZXQsIHBhY2tGNjQsIHZhbHVlLCBhcmd1bWVudHNbMl0pO1xuICAgIH1cbiAgfSk7XG59IGVsc2Uge1xuICBpZiAoIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAkQXJyYXlCdWZmZXIoMSk7XG4gIH0pIHx8ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgbmV3ICRBcnJheUJ1ZmZlcigtMSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gIH0pIHx8IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICBuZXcgJEFycmF5QnVmZmVyKCk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgbmV3ICRBcnJheUJ1ZmZlcigxLjUpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgIG5ldyAkQXJyYXlCdWZmZXIoTmFOKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICByZXR1cm4gJEFycmF5QnVmZmVyLm5hbWUgIT0gQVJSQVlfQlVGRkVSO1xuICB9KSkge1xuICAgICRBcnJheUJ1ZmZlciA9IGZ1bmN0aW9uIEFycmF5QnVmZmVyKGxlbmd0aCkge1xuICAgICAgYW5JbnN0YW5jZSh0aGlzLCAkQXJyYXlCdWZmZXIpO1xuICAgICAgcmV0dXJuIG5ldyBCYXNlQnVmZmVyKHRvSW5kZXgobGVuZ3RoKSk7XG4gICAgfTtcbiAgICB2YXIgQXJyYXlCdWZmZXJQcm90byA9ICRBcnJheUJ1ZmZlcltQUk9UT1RZUEVdID0gQmFzZUJ1ZmZlcltQUk9UT1RZUEVdO1xuICAgIGZvciAodmFyIGtleXMgPSBnT1BOKEJhc2VCdWZmZXIpLCBqID0gMCwga2V5OyBrZXlzLmxlbmd0aCA+IGo7KSB7XG4gICAgICBpZiAoISgoa2V5ID0ga2V5c1tqKytdKSBpbiAkQXJyYXlCdWZmZXIpKSBoaWRlKCRBcnJheUJ1ZmZlciwga2V5LCBCYXNlQnVmZmVyW2tleV0pO1xuICAgIH1cbiAgICBpZiAoIUxJQlJBUlkpIEFycmF5QnVmZmVyUHJvdG8uY29uc3RydWN0b3IgPSAkQXJyYXlCdWZmZXI7XG4gIH1cbiAgLy8gaU9TIFNhZmFyaSA3LnggYnVnXG4gIHZhciB2aWV3ID0gbmV3ICREYXRhVmlldyhuZXcgJEFycmF5QnVmZmVyKDIpKTtcbiAgdmFyICRzZXRJbnQ4ID0gJERhdGFWaWV3W1BST1RPVFlQRV0uc2V0SW50ODtcbiAgdmlldy5zZXRJbnQ4KDAsIDIxNDc0ODM2NDgpO1xuICB2aWV3LnNldEludDgoMSwgMjE0NzQ4MzY0OSk7XG4gIGlmICh2aWV3LmdldEludDgoMCkgfHwgIXZpZXcuZ2V0SW50OCgxKSkgcmVkZWZpbmVBbGwoJERhdGFWaWV3W1BST1RPVFlQRV0sIHtcbiAgICBzZXRJbnQ4OiBmdW5jdGlvbiBzZXRJbnQ4KGJ5dGVPZmZzZXQsIHZhbHVlKSB7XG4gICAgICAkc2V0SW50OC5jYWxsKHRoaXMsIGJ5dGVPZmZzZXQsIHZhbHVlIDw8IDI0ID4+IDI0KTtcbiAgICB9LFxuICAgIHNldFVpbnQ4OiBmdW5jdGlvbiBzZXRVaW50OChieXRlT2Zmc2V0LCB2YWx1ZSkge1xuICAgICAgJHNldEludDguY2FsbCh0aGlzLCBieXRlT2Zmc2V0LCB2YWx1ZSA8PCAyNCA+PiAyNCk7XG4gICAgfVxuICB9LCB0cnVlKTtcbn1cbnNldFRvU3RyaW5nVGFnKCRBcnJheUJ1ZmZlciwgQVJSQVlfQlVGRkVSKTtcbnNldFRvU3RyaW5nVGFnKCREYXRhVmlldywgREFUQV9WSUVXKTtcbmhpZGUoJERhdGFWaWV3W1BST1RPVFlQRV0sICR0eXBlZC5WSUVXLCB0cnVlKTtcbmV4cG9ydHNbQVJSQVlfQlVGRkVSXSA9ICRBcnJheUJ1ZmZlcjtcbmV4cG9ydHNbREFUQV9WSUVXXSA9ICREYXRhVmlldztcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///92\n")},function(module,exports){eval('var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function("return this")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === "object") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it\'s\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULyh3ZWJwYWNrKS9idWlsZGluL2dsb2JhbC5qcz9jZDAwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsNENBQTRDOztBQUU1QyIsImZpbGUiOiI5My5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBnO1xuXG4vLyBUaGlzIHdvcmtzIGluIG5vbi1zdHJpY3QgbW9kZVxuZyA9IChmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXM7XG59KSgpO1xuXG50cnkge1xuXHQvLyBUaGlzIHdvcmtzIGlmIGV2YWwgaXMgYWxsb3dlZCAoc2VlIENTUClcblx0ZyA9IGcgfHwgbmV3IEZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKTtcbn0gY2F0Y2ggKGUpIHtcblx0Ly8gVGhpcyB3b3JrcyBpZiB0aGUgd2luZG93IHJlZmVyZW5jZSBpcyBhdmFpbGFibGVcblx0aWYgKHR5cGVvZiB3aW5kb3cgPT09IFwib2JqZWN0XCIpIGcgPSB3aW5kb3c7XG59XG5cbi8vIGcgY2FuIHN0aWxsIGJlIHVuZGVmaW5lZCwgYnV0IG5vdGhpbmcgdG8gZG8gYWJvdXQgaXQuLi5cbi8vIFdlIHJldHVybiB1bmRlZmluZWQsIGluc3RlYWQgb2Ygbm90aGluZyBoZXJlLCBzbyBpdCdzXG4vLyBlYXNpZXIgdG8gaGFuZGxlIHRoaXMgY2FzZS4gaWYoIWdsb2JhbCkgeyAuLi59XG5cbm1vZHVsZS5leHBvcnRzID0gZztcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///93\n')},function(module,exports,__webpack_require__){eval("module.exports = !__webpack_require__(7) && !__webpack_require__(3)(function () {\n return Object.defineProperty(__webpack_require__(66)('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faWU4LWRvbS1kZWZpbmUuanM/YzY5YSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxrQkFBa0IsbUJBQU8sQ0FBQyxDQUFnQixNQUFNLG1CQUFPLENBQUMsQ0FBVTtBQUNsRSwrQkFBK0IsbUJBQU8sQ0FBQyxFQUFlLGdCQUFnQixtQkFBbUIsVUFBVSxFQUFFLEVBQUU7QUFDdkcsQ0FBQyIsImZpbGUiOiI5NC5qcyIsInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gIXJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgIXJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHJlcXVpcmUoJy4vX2RvbS1jcmVhdGUnKSgnZGl2JyksICdhJywgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH0gfSkuYSAhPSA3O1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///94\n")},function(module,exports,__webpack_require__){eval("exports.f = __webpack_require__(5);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fd2tzLWV4dC5qcz8zN2M4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVksbUJBQU8sQ0FBQyxDQUFRIiwiZmlsZSI6Ijk1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0cy5mID0gcmVxdWlyZSgnLi9fd2tzJyk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///95\n")},function(module,exports,__webpack_require__){eval("var has = __webpack_require__(14);\nvar toIObject = __webpack_require__(15);\nvar arrayIndexOf = __webpack_require__(52)(false);\nvar IE_PROTO = __webpack_require__(68)('IE_PROTO');\n\nmodule.exports = function (object, names) {\n var O = toIObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (has(O, key = names[i++])) {\n ~arrayIndexOf(result, key) || result.push(key);\n }\n return result;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWtleXMtaW50ZXJuYWwuanM/Y2UxMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxVQUFVLG1CQUFPLENBQUMsRUFBUTtBQUMxQixnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDLG1CQUFtQixtQkFBTyxDQUFDLEVBQW1CO0FBQzlDLGVBQWUsbUJBQU8sQ0FBQyxFQUFlOztBQUV0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiOTYuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIGFycmF5SW5kZXhPZiA9IHJlcXVpcmUoJy4vX2FycmF5LWluY2x1ZGVzJykoZmFsc2UpO1xudmFyIElFX1BST1RPID0gcmVxdWlyZSgnLi9fc2hhcmVkLWtleScpKCdJRV9QUk9UTycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIG5hbWVzKSB7XG4gIHZhciBPID0gdG9JT2JqZWN0KG9iamVjdCk7XG4gIHZhciBpID0gMDtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIga2V5O1xuICBmb3IgKGtleSBpbiBPKSBpZiAoa2V5ICE9IElFX1BST1RPKSBoYXMoTywga2V5KSAmJiByZXN1bHQucHVzaChrZXkpO1xuICAvLyBEb24ndCBlbnVtIGJ1ZyAmIGhpZGRlbiBrZXlzXG4gIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSBpZiAoaGFzKE8sIGtleSA9IG5hbWVzW2krK10pKSB7XG4gICAgfmFycmF5SW5kZXhPZihyZXN1bHQsIGtleSkgfHwgcmVzdWx0LnB1c2goa2V5KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///96\n")},function(module,exports,__webpack_require__){eval("var dP = __webpack_require__(8);\nvar anObject = __webpack_require__(1);\nvar getKeys = __webpack_require__(34);\n\nmodule.exports = __webpack_require__(7) ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var keys = getKeys(Properties);\n var length = keys.length;\n var i = 0;\n var P;\n while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n return O;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWRwcy5qcz8xNDk1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFNBQVMsbUJBQU8sQ0FBQyxDQUFjO0FBQy9CLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGNBQWMsbUJBQU8sQ0FBQyxFQUFnQjs7QUFFdEMsaUJBQWlCLG1CQUFPLENBQUMsQ0FBZ0I7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiI5Ny5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgZ2V0S2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzIDogZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhPLCBQcm9wZXJ0aWVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICB2YXIga2V5cyA9IGdldEtleXMoUHJvcGVydGllcyk7XG4gIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgdmFyIGkgPSAwO1xuICB2YXIgUDtcbiAgd2hpbGUgKGxlbmd0aCA+IGkpIGRQLmYoTywgUCA9IGtleXNbaSsrXSwgUHJvcGVydGllc1tQXSk7XG4gIHJldHVybiBPO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///97\n")},function(module,exports,__webpack_require__){eval("// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nvar toIObject = __webpack_require__(15);\nvar gOPN = __webpack_require__(37).f;\nvar toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return gOPN(it);\n } catch (e) {\n return windowNames.slice();\n }\n};\n\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdvcG4tZXh0LmpzPzdiYmMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDLFdBQVcsbUJBQU8sQ0FBQyxFQUFnQjtBQUNuQyxpQkFBaUI7O0FBRWpCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EiLCJmaWxlIjoiOTguanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBmYWxsYmFjayBmb3IgSUUxMSBidWdneSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB3aXRoIGlmcmFtZSBhbmQgd2luZG93XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIGdPUE4gPSByZXF1aXJlKCcuL19vYmplY3QtZ29wbicpLmY7XG52YXIgdG9TdHJpbmcgPSB7fS50b1N0cmluZztcblxudmFyIHdpbmRvd05hbWVzID0gdHlwZW9mIHdpbmRvdyA9PSAnb2JqZWN0JyAmJiB3aW5kb3cgJiYgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXNcbiAgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh3aW5kb3cpIDogW107XG5cbnZhciBnZXRXaW5kb3dOYW1lcyA9IGZ1bmN0aW9uIChpdCkge1xuICB0cnkge1xuICAgIHJldHVybiBnT1BOKGl0KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiB3aW5kb3dOYW1lcy5zbGljZSgpO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cy5mID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhpdCkge1xuICByZXR1cm4gd2luZG93TmFtZXMgJiYgdG9TdHJpbmcuY2FsbChpdCkgPT0gJ1tvYmplY3QgV2luZG93XScgPyBnZXRXaW5kb3dOYW1lcyhpdCkgOiBnT1BOKHRvSU9iamVjdChpdCkpO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///98\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// 19.1.2.1 Object.assign(target, source, ...)\nvar DESCRIPTORS = __webpack_require__(7);\nvar getKeys = __webpack_require__(34);\nvar gOPS = __webpack_require__(53);\nvar pIE = __webpack_require__(49);\nvar toObject = __webpack_require__(9);\nvar IObject = __webpack_require__(48);\nvar $assign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || __webpack_require__(3)(function () {\n var A = {};\n var B = {};\n // eslint-disable-next-line no-undef\n var S = Symbol();\n var K = 'abcdefghijklmnopqrst';\n A[S] = 7;\n K.split('').forEach(function (k) { B[k] = k; });\n return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n var T = toObject(target);\n var aLen = arguments.length;\n var index = 1;\n var getSymbols = gOPS.f;\n var isEnum = pIE.f;\n while (aLen > index) {\n var S = IObject(arguments[index++]);\n var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);\n var length = keys.length;\n var j = 0;\n var key;\n while (length > j) {\n key = keys[j++];\n if (!DESCRIPTORS || isEnum.call(S, key)) T[key] = S[key];\n }\n } return T;\n} : $assign;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWFzc2lnbi5qcz83MzMzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxrQkFBa0IsbUJBQU8sQ0FBQyxDQUFnQjtBQUMxQyxjQUFjLG1CQUFPLENBQUMsRUFBZ0I7QUFDdEMsV0FBVyxtQkFBTyxDQUFDLEVBQWdCO0FBQ25DLFVBQVUsbUJBQU8sQ0FBQyxFQUFlO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGNBQWMsbUJBQU8sQ0FBQyxFQUFZO0FBQ2xDOztBQUVBO0FBQ0EsNkJBQTZCLG1CQUFPLENBQUMsQ0FBVTtBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0MsVUFBVSxFQUFFO0FBQ2hELG1CQUFtQixzQ0FBc0M7QUFDekQsQ0FBQyxxQ0FBcUM7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUMiLCJmaWxlIjoiOTkuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG4vLyAxOS4xLjIuMSBPYmplY3QuYXNzaWduKHRhcmdldCwgc291cmNlLCAuLi4pXG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpO1xudmFyIGdldEtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xudmFyIGdPUFMgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wcycpO1xudmFyIHBJRSA9IHJlcXVpcmUoJy4vX29iamVjdC1waWUnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIElPYmplY3QgPSByZXF1aXJlKCcuL19pb2JqZWN0Jyk7XG52YXIgJGFzc2lnbiA9IE9iamVjdC5hc3NpZ247XG5cbi8vIHNob3VsZCB3b3JrIHdpdGggc3ltYm9scyBhbmQgc2hvdWxkIGhhdmUgZGV0ZXJtaW5pc3RpYyBwcm9wZXJ0eSBvcmRlciAoVjggYnVnKVxubW9kdWxlLmV4cG9ydHMgPSAhJGFzc2lnbiB8fCByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgdmFyIEEgPSB7fTtcbiAgdmFyIEIgPSB7fTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gIHZhciBTID0gU3ltYm9sKCk7XG4gIHZhciBLID0gJ2FiY2RlZmdoaWprbG1ub3BxcnN0JztcbiAgQVtTXSA9IDc7XG4gIEsuc3BsaXQoJycpLmZvckVhY2goZnVuY3Rpb24gKGspIHsgQltrXSA9IGs7IH0pO1xuICByZXR1cm4gJGFzc2lnbih7fSwgQSlbU10gIT0gNyB8fCBPYmplY3Qua2V5cygkYXNzaWduKHt9LCBCKSkuam9pbignJykgIT0gSztcbn0pID8gZnVuY3Rpb24gYXNzaWduKHRhcmdldCwgc291cmNlKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgdmFyIFQgPSB0b09iamVjdCh0YXJnZXQpO1xuICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gIHZhciBpbmRleCA9IDE7XG4gIHZhciBnZXRTeW1ib2xzID0gZ09QUy5mO1xuICB2YXIgaXNFbnVtID0gcElFLmY7XG4gIHdoaWxlIChhTGVuID4gaW5kZXgpIHtcbiAgICB2YXIgUyA9IElPYmplY3QoYXJndW1lbnRzW2luZGV4KytdKTtcbiAgICB2YXIga2V5cyA9IGdldFN5bWJvbHMgPyBnZXRLZXlzKFMpLmNvbmNhdChnZXRTeW1ib2xzKFMpKSA6IGdldEtleXMoUyk7XG4gICAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICAgIHZhciBqID0gMDtcbiAgICB2YXIga2V5O1xuICAgIHdoaWxlIChsZW5ndGggPiBqKSB7XG4gICAgICBrZXkgPSBrZXlzW2orK107XG4gICAgICBpZiAoIURFU0NSSVBUT1JTIHx8IGlzRW51bS5jYWxsKFMsIGtleSkpIFRba2V5XSA9IFNba2V5XTtcbiAgICB9XG4gIH0gcmV0dXJuIFQ7XG59IDogJGFzc2lnbjtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///99\n")},function(module,exports){eval("// 7.2.9 SameValue(x, y)\nmodule.exports = Object.is || function is(x, y) {\n // eslint-disable-next-line no-self-compare\n return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2FtZS12YWx1ZS5qcz84M2ExIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMTAwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gNy4yLjkgU2FtZVZhbHVlKHgsIHkpXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5pcyB8fCBmdW5jdGlvbiBpcyh4LCB5KSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgcmV0dXJuIHggPT09IHkgPyB4ICE9PSAwIHx8IDEgLyB4ID09PSAxIC8geSA6IHggIT0geCAmJiB5ICE9IHk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///100\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar aFunction = __webpack_require__(10);\nvar isObject = __webpack_require__(4);\nvar invoke = __webpack_require__(102);\nvar arraySlice = [].slice;\nvar factories = {};\n\nvar construct = function (F, len, args) {\n if (!(len in factories)) {\n for (var n = [], i = 0; i < len; i++) n[i] = 'a[' + i + ']';\n // eslint-disable-next-line no-new-func\n factories[len] = Function('F,a', 'return new F(' + n.join(',') + ')');\n } return factories[len](F, args);\n};\n\nmodule.exports = Function.bind || function bind(that /* , ...args */) {\n var fn = aFunction(this);\n var partArgs = arraySlice.call(arguments, 1);\n var bound = function (/* args... */) {\n var args = partArgs.concat(arraySlice.call(arguments));\n return this instanceof bound ? construct(fn, args.length, args) : invoke(fn, args, that);\n };\n if (isObject(fn.prototype)) bound.prototype = fn.prototype;\n return bound;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYmluZC5qcz9mMGMxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2QyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxhQUFhLG1CQUFPLENBQUMsR0FBVztBQUNoQztBQUNBOztBQUVBO0FBQ0E7QUFDQSwyQkFBMkIsU0FBUztBQUNwQztBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjEwMS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBpbnZva2UgPSByZXF1aXJlKCcuL19pbnZva2UnKTtcbnZhciBhcnJheVNsaWNlID0gW10uc2xpY2U7XG52YXIgZmFjdG9yaWVzID0ge307XG5cbnZhciBjb25zdHJ1Y3QgPSBmdW5jdGlvbiAoRiwgbGVuLCBhcmdzKSB7XG4gIGlmICghKGxlbiBpbiBmYWN0b3JpZXMpKSB7XG4gICAgZm9yICh2YXIgbiA9IFtdLCBpID0gMDsgaSA8IGxlbjsgaSsrKSBuW2ldID0gJ2FbJyArIGkgKyAnXSc7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jXG4gICAgZmFjdG9yaWVzW2xlbl0gPSBGdW5jdGlvbignRixhJywgJ3JldHVybiBuZXcgRignICsgbi5qb2luKCcsJykgKyAnKScpO1xuICB9IHJldHVybiBmYWN0b3JpZXNbbGVuXShGLCBhcmdzKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gRnVuY3Rpb24uYmluZCB8fCBmdW5jdGlvbiBiaW5kKHRoYXQgLyogLCAuLi5hcmdzICovKSB7XG4gIHZhciBmbiA9IGFGdW5jdGlvbih0aGlzKTtcbiAgdmFyIHBhcnRBcmdzID0gYXJyYXlTbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gIHZhciBib3VuZCA9IGZ1bmN0aW9uICgvKiBhcmdzLi4uICovKSB7XG4gICAgdmFyIGFyZ3MgPSBwYXJ0QXJncy5jb25jYXQoYXJyYXlTbGljZS5jYWxsKGFyZ3VtZW50cykpO1xuICAgIHJldHVybiB0aGlzIGluc3RhbmNlb2YgYm91bmQgPyBjb25zdHJ1Y3QoZm4sIGFyZ3MubGVuZ3RoLCBhcmdzKSA6IGludm9rZShmbiwgYXJncywgdGhhdCk7XG4gIH07XG4gIGlmIChpc09iamVjdChmbi5wcm90b3R5cGUpKSBib3VuZC5wcm90b3R5cGUgPSBmbi5wcm90b3R5cGU7XG4gIHJldHVybiBib3VuZDtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///101\n")},function(module,exports){eval("// fast apply, http://jsperf.lnkit.com/fast-apply/5\nmodule.exports = function (fn, args, that) {\n var un = that === undefined;\n switch (args.length) {\n case 0: return un ? fn()\n : fn.call(that);\n case 1: return un ? fn(args[0])\n : fn.call(that, args[0]);\n case 2: return un ? fn(args[0], args[1])\n : fn.call(that, args[0], args[1]);\n case 3: return un ? fn(args[0], args[1], args[2])\n : fn.call(that, args[0], args[1], args[2]);\n case 4: return un ? fn(args[0], args[1], args[2], args[3])\n : fn.call(that, args[0], args[1], args[2], args[3]);\n } return fn.apply(that, args);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faW52b2tlLmpzPzMxZjQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCIsImZpbGUiOiIxMDIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBmYXN0IGFwcGx5LCBodHRwOi8vanNwZXJmLmxua2l0LmNvbS9mYXN0LWFwcGx5LzVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGZuLCBhcmdzLCB0aGF0KSB7XG4gIHZhciB1biA9IHRoYXQgPT09IHVuZGVmaW5lZDtcbiAgc3dpdGNoIChhcmdzLmxlbmd0aCkge1xuICAgIGNhc2UgMDogcmV0dXJuIHVuID8gZm4oKVxuICAgICAgICAgICAgICAgICAgICAgIDogZm4uY2FsbCh0aGF0KTtcbiAgICBjYXNlIDE6IHJldHVybiB1biA/IGZuKGFyZ3NbMF0pXG4gICAgICAgICAgICAgICAgICAgICAgOiBmbi5jYWxsKHRoYXQsIGFyZ3NbMF0pO1xuICAgIGNhc2UgMjogcmV0dXJuIHVuID8gZm4oYXJnc1swXSwgYXJnc1sxXSlcbiAgICAgICAgICAgICAgICAgICAgICA6IGZuLmNhbGwodGhhdCwgYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgY2FzZSAzOiByZXR1cm4gdW4gPyBmbihhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKVxuICAgICAgICAgICAgICAgICAgICAgIDogZm4uY2FsbCh0aGF0LCBhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcbiAgICBjYXNlIDQ6IHJldHVybiB1biA/IGZuKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10pXG4gICAgICAgICAgICAgICAgICAgICAgOiBmbi5jYWxsKHRoYXQsIGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10pO1xuICB9IHJldHVybiBmbi5hcHBseSh0aGF0LCBhcmdzKTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///102\n")},function(module,exports,__webpack_require__){eval("var $parseInt = __webpack_require__(2).parseInt;\nvar $trim = __webpack_require__(45).trim;\nvar ws = __webpack_require__(72);\nvar hex = /^[-+]?0[xX]/;\n\nmodule.exports = $parseInt(ws + '08') !== 8 || $parseInt(ws + '0x16') !== 22 ? function parseInt(str, radix) {\n var string = $trim(String(str), 3);\n return $parseInt(string, (radix >>> 0) || (hex.test(string) ? 16 : 10));\n} : $parseInt;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcGFyc2UtaW50LmpzPzNjYTUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZ0JBQWdCLG1CQUFPLENBQUMsQ0FBVztBQUNuQyxZQUFZLG1CQUFPLENBQUMsRUFBZ0I7QUFDcEMsU0FBUyxtQkFBTyxDQUFDLEVBQWM7QUFDL0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIxMDMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgJHBhcnNlSW50ID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykucGFyc2VJbnQ7XG52YXIgJHRyaW0gPSByZXF1aXJlKCcuL19zdHJpbmctdHJpbScpLnRyaW07XG52YXIgd3MgPSByZXF1aXJlKCcuL19zdHJpbmctd3MnKTtcbnZhciBoZXggPSAvXlstK10/MFt4WF0vO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICRwYXJzZUludCh3cyArICcwOCcpICE9PSA4IHx8ICRwYXJzZUludCh3cyArICcweDE2JykgIT09IDIyID8gZnVuY3Rpb24gcGFyc2VJbnQoc3RyLCByYWRpeCkge1xuICB2YXIgc3RyaW5nID0gJHRyaW0oU3RyaW5nKHN0ciksIDMpO1xuICByZXR1cm4gJHBhcnNlSW50KHN0cmluZywgKHJhZGl4ID4+PiAwKSB8fCAoaGV4LnRlc3Qoc3RyaW5nKSA/IDE2IDogMTApKTtcbn0gOiAkcGFyc2VJbnQ7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///103\n")},function(module,exports,__webpack_require__){eval("var $parseFloat = __webpack_require__(2).parseFloat;\nvar $trim = __webpack_require__(45).trim;\n\nmodule.exports = 1 / $parseFloat(__webpack_require__(72) + '-0') !== -Infinity ? function parseFloat(str) {\n var string = $trim(String(str), 3);\n var result = $parseFloat(string);\n return result === 0 && string.charAt(0) == '-' ? -0 : result;\n} : $parseFloat;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcGFyc2UtZmxvYXQuanM/ZDc1MiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxrQkFBa0IsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JDLFlBQVksbUJBQU8sQ0FBQyxFQUFnQjs7QUFFcEMsaUNBQWlDLG1CQUFPLENBQUMsRUFBYztBQUN2RDtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjEwNC5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciAkcGFyc2VGbG9hdCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLnBhcnNlRmxvYXQ7XG52YXIgJHRyaW0gPSByZXF1aXJlKCcuL19zdHJpbmctdHJpbScpLnRyaW07XG5cbm1vZHVsZS5leHBvcnRzID0gMSAvICRwYXJzZUZsb2F0KHJlcXVpcmUoJy4vX3N0cmluZy13cycpICsgJy0wJykgIT09IC1JbmZpbml0eSA/IGZ1bmN0aW9uIHBhcnNlRmxvYXQoc3RyKSB7XG4gIHZhciBzdHJpbmcgPSAkdHJpbShTdHJpbmcoc3RyKSwgMyk7XG4gIHZhciByZXN1bHQgPSAkcGFyc2VGbG9hdChzdHJpbmcpO1xuICByZXR1cm4gcmVzdWx0ID09PSAwICYmIHN0cmluZy5jaGFyQXQoMCkgPT0gJy0nID8gLTAgOiByZXN1bHQ7XG59IDogJHBhcnNlRmxvYXQ7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///104\n")},function(module,exports,__webpack_require__){eval("var cof = __webpack_require__(20);\nmodule.exports = function (it, msg) {\n if (typeof it != 'number' && cof(it) != 'Number') throw TypeError(msg);\n return +it;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYS1udW1iZXItdmFsdWUuanM/YmVmOSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxVQUFVLG1CQUFPLENBQUMsRUFBUTtBQUMxQjtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIxMDUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgbXNnKSB7XG4gIGlmICh0eXBlb2YgaXQgIT0gJ251bWJlcicgJiYgY29mKGl0KSAhPSAnTnVtYmVyJykgdGhyb3cgVHlwZUVycm9yKG1zZyk7XG4gIHJldHVybiAraXQ7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///105\n")},function(module,exports,__webpack_require__){eval("// 20.1.2.3 Number.isInteger(number)\nvar isObject = __webpack_require__(4);\nvar floor = Math.floor;\nmodule.exports = function isInteger(it) {\n return !isObject(it) && isFinite(it) && floor(it) === it;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtaW50ZWdlci5qcz85YzEyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckM7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMTA2LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMS4yLjMgTnVtYmVyLmlzSW50ZWdlcihudW1iZXIpXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzSW50ZWdlcihpdCkge1xuICByZXR1cm4gIWlzT2JqZWN0KGl0KSAmJiBpc0Zpbml0ZShpdCkgJiYgZmxvb3IoaXQpID09PSBpdDtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///106\n")},function(module,exports){eval("// 20.2.2.20 Math.log1p(x)\nmodule.exports = Math.log1p || function log1p(x) {\n return (x = +x) > -1e-8 && x < 1e-8 ? x - x * x / 2 : Math.log(1 + x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWF0aC1sb2cxcC5qcz9kNmM2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjEwNy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDIwLjIuMi4yMCBNYXRoLmxvZzFwKHgpXG5tb2R1bGUuZXhwb3J0cyA9IE1hdGgubG9nMXAgfHwgZnVuY3Rpb24gbG9nMXAoeCkge1xuICByZXR1cm4gKHggPSAreCkgPiAtMWUtOCAmJiB4IDwgMWUtOCA/IHggLSB4ICogeCAvIDIgOiBNYXRoLmxvZygxICsgeCk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///107\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.16 Math.fround(x)\nvar sign = __webpack_require__(75);\nvar pow = Math.pow;\nvar EPSILON = pow(2, -52);\nvar EPSILON32 = pow(2, -23);\nvar MAX32 = pow(2, 127) * (2 - EPSILON32);\nvar MIN32 = pow(2, -126);\n\nvar roundTiesToEven = function (n) {\n return n + 1 / EPSILON - 1 / EPSILON;\n};\n\nmodule.exports = Math.fround || function fround(x) {\n var $abs = Math.abs(x);\n var $sign = sign(x);\n var a, result;\n if ($abs < MIN32) return $sign * roundTiesToEven($abs / MIN32 / EPSILON32) * MIN32 * EPSILON32;\n a = (1 + EPSILON32 / EPSILON) * $abs;\n result = a - (a - $abs);\n // eslint-disable-next-line no-self-compare\n if (result > MAX32 || result != result) return $sign * Infinity;\n return $sign * result;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWF0aC1mcm91bmQuanM/OTFjYSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLFdBQVcsbUJBQU8sQ0FBQyxFQUFjO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMTA4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMi4yLjE2IE1hdGguZnJvdW5kKHgpXG52YXIgc2lnbiA9IHJlcXVpcmUoJy4vX21hdGgtc2lnbicpO1xudmFyIHBvdyA9IE1hdGgucG93O1xudmFyIEVQU0lMT04gPSBwb3coMiwgLTUyKTtcbnZhciBFUFNJTE9OMzIgPSBwb3coMiwgLTIzKTtcbnZhciBNQVgzMiA9IHBvdygyLCAxMjcpICogKDIgLSBFUFNJTE9OMzIpO1xudmFyIE1JTjMyID0gcG93KDIsIC0xMjYpO1xuXG52YXIgcm91bmRUaWVzVG9FdmVuID0gZnVuY3Rpb24gKG4pIHtcbiAgcmV0dXJuIG4gKyAxIC8gRVBTSUxPTiAtIDEgLyBFUFNJTE9OO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBNYXRoLmZyb3VuZCB8fCBmdW5jdGlvbiBmcm91bmQoeCkge1xuICB2YXIgJGFicyA9IE1hdGguYWJzKHgpO1xuICB2YXIgJHNpZ24gPSBzaWduKHgpO1xuICB2YXIgYSwgcmVzdWx0O1xuICBpZiAoJGFicyA8IE1JTjMyKSByZXR1cm4gJHNpZ24gKiByb3VuZFRpZXNUb0V2ZW4oJGFicyAvIE1JTjMyIC8gRVBTSUxPTjMyKSAqIE1JTjMyICogRVBTSUxPTjMyO1xuICBhID0gKDEgKyBFUFNJTE9OMzIgLyBFUFNJTE9OKSAqICRhYnM7XG4gIHJlc3VsdCA9IGEgLSAoYSAtICRhYnMpO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gIGlmIChyZXN1bHQgPiBNQVgzMiB8fCByZXN1bHQgIT0gcmVzdWx0KSByZXR1cm4gJHNpZ24gKiBJbmZpbml0eTtcbiAgcmV0dXJuICRzaWduICogcmVzdWx0O1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///108\n")},function(module,exports,__webpack_require__){eval("// call something on iterator step with safe closing on error\nvar anObject = __webpack_require__(1);\nmodule.exports = function (iterator, fn, value, entries) {\n try {\n return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n // 7.4.6 IteratorClose(iterator, completion)\n } catch (e) {\n var ret = iterator['return'];\n if (ret !== undefined) anObject(ret.call(iterator));\n throw e;\n }\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlci1jYWxsLmpzPzFmYTgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjEwOS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGNhbGwgc29tZXRoaW5nIG9uIGl0ZXJhdG9yIHN0ZXAgd2l0aCBzYWZlIGNsb3Npbmcgb24gZXJyb3JcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIGZuLCB2YWx1ZSwgZW50cmllcykge1xuICB0cnkge1xuICAgIHJldHVybiBlbnRyaWVzID8gZm4oYW5PYmplY3QodmFsdWUpWzBdLCB2YWx1ZVsxXSkgOiBmbih2YWx1ZSk7XG4gIC8vIDcuNC42IEl0ZXJhdG9yQ2xvc2UoaXRlcmF0b3IsIGNvbXBsZXRpb24pXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB2YXIgcmV0ID0gaXRlcmF0b3JbJ3JldHVybiddO1xuICAgIGlmIChyZXQgIT09IHVuZGVmaW5lZCkgYW5PYmplY3QocmV0LmNhbGwoaXRlcmF0b3IpKTtcbiAgICB0aHJvdyBlO1xuICB9XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///109\n")},function(module,exports,__webpack_require__){eval("var aFunction = __webpack_require__(10);\nvar toObject = __webpack_require__(9);\nvar IObject = __webpack_require__(48);\nvar toLength = __webpack_require__(6);\n\nmodule.exports = function (that, callbackfn, aLen, memo, isRight) {\n aFunction(callbackfn);\n var O = toObject(that);\n var self = IObject(O);\n var length = toLength(O.length);\n var index = isRight ? length - 1 : 0;\n var i = isRight ? -1 : 1;\n if (aLen < 2) for (;;) {\n if (index in self) {\n memo = self[index];\n index += i;\n break;\n }\n index += i;\n if (isRight ? index < 0 : length <= index) {\n throw TypeError('Reduce of empty array with no initial value');\n }\n }\n for (;isRight ? index >= 0 : length > index; index += i) if (index in self) {\n memo = callbackfn(memo, self[index], index, O);\n }\n return memo;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktcmVkdWNlLmpzPzdiMjMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2QyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxjQUFjLG1CQUFPLENBQUMsRUFBWTtBQUNsQyxlQUFlLG1CQUFPLENBQUMsQ0FBYzs7QUFFckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLHNDQUFzQztBQUM5QztBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIxMTAuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgSU9iamVjdCA9IHJlcXVpcmUoJy4vX2lvYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0aGF0LCBjYWxsYmFja2ZuLCBhTGVuLCBtZW1vLCBpc1JpZ2h0KSB7XG4gIGFGdW5jdGlvbihjYWxsYmFja2ZuKTtcbiAgdmFyIE8gPSB0b09iamVjdCh0aGF0KTtcbiAgdmFyIHNlbGYgPSBJT2JqZWN0KE8pO1xuICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICB2YXIgaW5kZXggPSBpc1JpZ2h0ID8gbGVuZ3RoIC0gMSA6IDA7XG4gIHZhciBpID0gaXNSaWdodCA/IC0xIDogMTtcbiAgaWYgKGFMZW4gPCAyKSBmb3IgKDs7KSB7XG4gICAgaWYgKGluZGV4IGluIHNlbGYpIHtcbiAgICAgIG1lbW8gPSBzZWxmW2luZGV4XTtcbiAgICAgIGluZGV4ICs9IGk7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgaW5kZXggKz0gaTtcbiAgICBpZiAoaXNSaWdodCA/IGluZGV4IDwgMCA6IGxlbmd0aCA8PSBpbmRleCkge1xuICAgICAgdGhyb3cgVHlwZUVycm9yKCdSZWR1Y2Ugb2YgZW1wdHkgYXJyYXkgd2l0aCBubyBpbml0aWFsIHZhbHVlJyk7XG4gICAgfVxuICB9XG4gIGZvciAoO2lzUmlnaHQgPyBpbmRleCA+PSAwIDogbGVuZ3RoID4gaW5kZXg7IGluZGV4ICs9IGkpIGlmIChpbmRleCBpbiBzZWxmKSB7XG4gICAgbWVtbyA9IGNhbGxiYWNrZm4obWVtbywgc2VsZltpbmRleF0sIGluZGV4LCBPKTtcbiAgfVxuICByZXR1cm4gbWVtbztcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///110\n")},function(module,exports,__webpack_require__){"use strict";eval("// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\n\nvar toObject = __webpack_require__(9);\nvar toAbsoluteIndex = __webpack_require__(35);\nvar toLength = __webpack_require__(6);\n\nmodule.exports = [].copyWithin || function copyWithin(target /* = 0 */, start /* = 0, end = @length */) {\n var O = toObject(this);\n var len = toLength(O.length);\n var to = toAbsoluteIndex(target, len);\n var from = toAbsoluteIndex(start, len);\n var end = arguments.length > 2 ? arguments[2] : undefined;\n var count = Math.min((end === undefined ? len : toAbsoluteIndex(end, len)) - from, len - to);\n var inc = 1;\n if (from < to && to < from + count) {\n inc = -1;\n from += count - 1;\n to += count - 1;\n }\n while (count-- > 0) {\n if (from in O) O[to] = O[from];\n else delete O[to];\n to += inc;\n from += inc;\n } return O;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktY29weS13aXRoaW4uanM/YmE5MiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNhO0FBQ2IsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsc0JBQXNCLG1CQUFPLENBQUMsRUFBc0I7QUFDcEQsZUFBZSxtQkFBTyxDQUFDLENBQWM7O0FBRXJDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCIsImZpbGUiOiIxMTEuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyMi4xLjMuMyBBcnJheS5wcm90b3R5cGUuY29weVdpdGhpbih0YXJnZXQsIHN0YXJ0LCBlbmQgPSB0aGlzLmxlbmd0aClcbid1c2Ugc3RyaWN0JztcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4vX3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBbXS5jb3B5V2l0aGluIHx8IGZ1bmN0aW9uIGNvcHlXaXRoaW4odGFyZ2V0IC8qID0gMCAqLywgc3RhcnQgLyogPSAwLCBlbmQgPSBAbGVuZ3RoICovKSB7XG4gIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gIHZhciBsZW4gPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gIHZhciB0byA9IHRvQWJzb2x1dGVJbmRleCh0YXJnZXQsIGxlbik7XG4gIHZhciBmcm9tID0gdG9BYnNvbHV0ZUluZGV4KHN0YXJ0LCBsZW4pO1xuICB2YXIgZW5kID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQ7XG4gIHZhciBjb3VudCA9IE1hdGgubWluKChlbmQgPT09IHVuZGVmaW5lZCA/IGxlbiA6IHRvQWJzb2x1dGVJbmRleChlbmQsIGxlbikpIC0gZnJvbSwgbGVuIC0gdG8pO1xuICB2YXIgaW5jID0gMTtcbiAgaWYgKGZyb20gPCB0byAmJiB0byA8IGZyb20gKyBjb3VudCkge1xuICAgIGluYyA9IC0xO1xuICAgIGZyb20gKz0gY291bnQgLSAxO1xuICAgIHRvICs9IGNvdW50IC0gMTtcbiAgfVxuICB3aGlsZSAoY291bnQtLSA+IDApIHtcbiAgICBpZiAoZnJvbSBpbiBPKSBPW3RvXSA9IE9bZnJvbV07XG4gICAgZWxzZSBkZWxldGUgT1t0b107XG4gICAgdG8gKz0gaW5jO1xuICAgIGZyb20gKz0gaW5jO1xuICB9IHJldHVybiBPO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///111\n")},function(module,exports){eval("module.exports = function (done, value) {\n return { value: value, done: !!done };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlci1zdGVwLmpzP2Q1M2IiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxVQUFVO0FBQ1YiLCJmaWxlIjoiMTEyLmpzIiwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZG9uZSwgdmFsdWUpIHtcbiAgcmV0dXJuIHsgdmFsdWU6IHZhbHVlLCBkb25lOiAhIWRvbmUgfTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///112\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar regexpExec = __webpack_require__(87);\n__webpack_require__(0)({\n target: 'RegExp',\n proto: true,\n forced: regexpExec !== /./.exec\n}, {\n exec: regexpExec\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLmV4ZWMuanM/YjBjNSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGlCQUFpQixtQkFBTyxDQUFDLEVBQWdCO0FBQ3pDLG1CQUFPLENBQUMsQ0FBVztBQUNuQjtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQSxDQUFDIiwiZmlsZSI6IjExMy5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciByZWdleHBFeGVjID0gcmVxdWlyZSgnLi9fcmVnZXhwLWV4ZWMnKTtcbnJlcXVpcmUoJy4vX2V4cG9ydCcpKHtcbiAgdGFyZ2V0OiAnUmVnRXhwJyxcbiAgcHJvdG86IHRydWUsXG4gIGZvcmNlZDogcmVnZXhwRXhlYyAhPT0gLy4vLmV4ZWNcbn0sIHtcbiAgZXhlYzogcmVnZXhwRXhlY1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///113\n")},function(module,exports,__webpack_require__){eval("// 21.2.5.3 get RegExp.prototype.flags()\nif (__webpack_require__(7) && /./g.flags != 'g') __webpack_require__(8).f(RegExp.prototype, 'flags', {\n configurable: true,\n get: __webpack_require__(50)\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLmZsYWdzLmpzPzM4NDYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxJQUFJLG1CQUFPLENBQUMsQ0FBZ0Isd0JBQXdCLG1CQUFPLENBQUMsQ0FBYztBQUMxRTtBQUNBLE9BQU8sbUJBQU8sQ0FBQyxFQUFVO0FBQ3pCLENBQUMiLCJmaWxlIjoiMTE0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjEuMi41LjMgZ2V0IFJlZ0V4cC5wcm90b3R5cGUuZmxhZ3MoKVxuaWYgKHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgLy4vZy5mbGFncyAhPSAnZycpIHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmYoUmVnRXhwLnByb3RvdHlwZSwgJ2ZsYWdzJywge1xuICBjb25maWd1cmFibGU6IHRydWUsXG4gIGdldDogcmVxdWlyZSgnLi9fZmxhZ3MnKVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///114\n")},function(module,exports){eval("module.exports = function (exec) {\n try {\n return { e: false, v: exec() };\n } catch (e) {\n return { e: true, v: e };\n }\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcGVyZm9ybS5qcz85YzgwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQSxZQUFZO0FBQ1osR0FBRztBQUNILFlBQVk7QUFDWjtBQUNBIiwiZmlsZSI6IjExNS5qcyIsInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4geyBlOiBmYWxzZSwgdjogZXhlYygpIH07XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4geyBlOiB0cnVlLCB2OiBlIH07XG4gIH1cbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///115\n")},function(module,exports,__webpack_require__){eval("var anObject = __webpack_require__(1);\nvar isObject = __webpack_require__(4);\nvar newPromiseCapability = __webpack_require__(91);\n\nmodule.exports = function (C, x) {\n anObject(C);\n if (isObject(x) && x.constructor === C) return x;\n var promiseCapability = newPromiseCapability.f(C);\n var resolve = promiseCapability.resolve;\n resolve(x);\n return promiseCapability.promise;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcHJvbWlzZS1yZXNvbHZlLmpzP2JjYWEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsMkJBQTJCLG1CQUFPLENBQUMsRUFBMkI7O0FBRTlEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMTE2LmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IHJlcXVpcmUoJy4vX25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQywgeCkge1xuICBhbk9iamVjdChDKTtcbiAgaWYgKGlzT2JqZWN0KHgpICYmIHguY29uc3RydWN0b3IgPT09IEMpIHJldHVybiB4O1xuICB2YXIgcHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eS5mKEMpO1xuICB2YXIgcmVzb2x2ZSA9IHByb21pc2VDYXBhYmlsaXR5LnJlc29sdmU7XG4gIHJlc29sdmUoeCk7XG4gIHJldHVybiBwcm9taXNlQ2FwYWJpbGl0eS5wcm9taXNlO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///116\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar strong = __webpack_require__(118);\nvar validate = __webpack_require__(42);\nvar MAP = 'Map';\n\n// 23.1 Map Objects\nmodule.exports = __webpack_require__(61)(MAP, function (get) {\n return function Map() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.1.3.6 Map.prototype.get(key)\n get: function get(key) {\n var entry = strong.getEntry(validate(this, MAP), key);\n return entry && entry.v;\n },\n // 23.1.3.9 Map.prototype.set(key, value)\n set: function set(key, value) {\n return strong.def(validate(this, MAP), key === 0 ? 0 : key, value);\n }\n}, strong, true);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWFwLmpzP2Y0MDAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixhQUFhLG1CQUFPLENBQUMsR0FBc0I7QUFDM0MsZUFBZSxtQkFBTyxDQUFDLEVBQXdCO0FBQy9DOztBQUVBO0FBQ0EsaUJBQWlCLG1CQUFPLENBQUMsRUFBZTtBQUN4Qyx5QkFBeUIsbUVBQW1FO0FBQzVGLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTE3LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIHN0cm9uZyA9IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24tc3Ryb25nJyk7XG52YXIgdmFsaWRhdGUgPSByZXF1aXJlKCcuL192YWxpZGF0ZS1jb2xsZWN0aW9uJyk7XG52YXIgTUFQID0gJ01hcCc7XG5cbi8vIDIzLjEgTWFwIE9iamVjdHNcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fY29sbGVjdGlvbicpKE1BUCwgZnVuY3Rpb24gKGdldCkge1xuICByZXR1cm4gZnVuY3Rpb24gTWFwKCkgeyByZXR1cm4gZ2V0KHRoaXMsIGFyZ3VtZW50cy5sZW5ndGggPiAwID8gYXJndW1lbnRzWzBdIDogdW5kZWZpbmVkKTsgfTtcbn0sIHtcbiAgLy8gMjMuMS4zLjYgTWFwLnByb3RvdHlwZS5nZXQoa2V5KVxuICBnZXQ6IGZ1bmN0aW9uIGdldChrZXkpIHtcbiAgICB2YXIgZW50cnkgPSBzdHJvbmcuZ2V0RW50cnkodmFsaWRhdGUodGhpcywgTUFQKSwga2V5KTtcbiAgICByZXR1cm4gZW50cnkgJiYgZW50cnkudjtcbiAgfSxcbiAgLy8gMjMuMS4zLjkgTWFwLnByb3RvdHlwZS5zZXQoa2V5LCB2YWx1ZSlcbiAgc2V0OiBmdW5jdGlvbiBzZXQoa2V5LCB2YWx1ZSkge1xuICAgIHJldHVybiBzdHJvbmcuZGVmKHZhbGlkYXRlKHRoaXMsIE1BUCksIGtleSA9PT0gMCA/IDAgOiBrZXksIHZhbHVlKTtcbiAgfVxufSwgc3Ryb25nLCB0cnVlKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///117\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar dP = __webpack_require__(8).f;\nvar create = __webpack_require__(36);\nvar redefineAll = __webpack_require__(41);\nvar ctx = __webpack_require__(19);\nvar anInstance = __webpack_require__(39);\nvar forOf = __webpack_require__(40);\nvar $iterDefine = __webpack_require__(77);\nvar step = __webpack_require__(112);\nvar setSpecies = __webpack_require__(38);\nvar DESCRIPTORS = __webpack_require__(7);\nvar fastKey = __webpack_require__(30).fastKey;\nvar validate = __webpack_require__(42);\nvar SIZE = DESCRIPTORS ? '_s' : 'size';\n\nvar getEntry = function (that, key) {\n // fast case\n var index = fastKey(key);\n var entry;\n if (index !== 'F') return that._i[index];\n // frozen object case\n for (entry = that._f; entry; entry = entry.n) {\n if (entry.k == key) return entry;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = create(null); // index\n that._f = undefined; // first entry\n that._l = undefined; // last entry\n that[SIZE] = 0; // size\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.1.3.1 Map.prototype.clear()\n // 23.2.3.2 Set.prototype.clear()\n clear: function clear() {\n for (var that = validate(this, NAME), data = that._i, entry = that._f; entry; entry = entry.n) {\n entry.r = true;\n if (entry.p) entry.p = entry.p.n = undefined;\n delete data[entry.i];\n }\n that._f = that._l = undefined;\n that[SIZE] = 0;\n },\n // 23.1.3.3 Map.prototype.delete(key)\n // 23.2.3.4 Set.prototype.delete(value)\n 'delete': function (key) {\n var that = validate(this, NAME);\n var entry = getEntry(that, key);\n if (entry) {\n var next = entry.n;\n var prev = entry.p;\n delete that._i[entry.i];\n entry.r = true;\n if (prev) prev.n = next;\n if (next) next.p = prev;\n if (that._f == entry) that._f = next;\n if (that._l == entry) that._l = prev;\n that[SIZE]--;\n } return !!entry;\n },\n // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined)\n // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined)\n forEach: function forEach(callbackfn /* , that = undefined */) {\n validate(this, NAME);\n var f = ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3);\n var entry;\n while (entry = entry ? entry.n : this._f) {\n f(entry.v, entry.k, this);\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n }\n },\n // 23.1.3.7 Map.prototype.has(key)\n // 23.2.3.7 Set.prototype.has(value)\n has: function has(key) {\n return !!getEntry(validate(this, NAME), key);\n }\n });\n if (DESCRIPTORS) dP(C.prototype, 'size', {\n get: function () {\n return validate(this, NAME)[SIZE];\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var entry = getEntry(that, key);\n var prev, index;\n // change existing entry\n if (entry) {\n entry.v = value;\n // create new entry\n } else {\n that._l = entry = {\n i: index = fastKey(key, true), // <- index\n k: key, // <- key\n v: value, // <- value\n p: prev = that._l, // <- previous entry\n n: undefined, // <- next entry\n r: false // <- removed\n };\n if (!that._f) that._f = entry;\n if (prev) prev.n = entry;\n that[SIZE]++;\n // add to index\n if (index !== 'F') that._i[index] = entry;\n } return that;\n },\n getEntry: getEntry,\n setStrong: function (C, NAME, IS_MAP) {\n // add .keys, .values, .entries, [@@iterator]\n // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11\n $iterDefine(C, NAME, function (iterated, kind) {\n this._t = validate(iterated, NAME); // target\n this._k = kind; // kind\n this._l = undefined; // previous\n }, function () {\n var that = this;\n var kind = that._k;\n var entry = that._l;\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n // get next entry\n if (!that._t || !(that._l = entry = entry ? entry.n : that._t._f)) {\n // or finish the iteration\n that._t = undefined;\n return step(1);\n }\n // return step by kind\n if (kind == 'keys') return step(0, entry.k);\n if (kind == 'values') return step(0, entry.v);\n return step(0, [entry.k, entry.v]);\n }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);\n\n // add [@@species], 23.1.2.2, 23.2.2.2\n setSpecies(NAME);\n }\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY29sbGVjdGlvbi1zdHJvbmcuanM/YzI2YiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLFNBQVMsbUJBQU8sQ0FBQyxDQUFjO0FBQy9CLGFBQWEsbUJBQU8sQ0FBQyxFQUFrQjtBQUN2QyxrQkFBa0IsbUJBQU8sQ0FBQyxFQUFpQjtBQUMzQyxVQUFVLG1CQUFPLENBQUMsRUFBUTtBQUMxQixpQkFBaUIsbUJBQU8sQ0FBQyxFQUFnQjtBQUN6QyxZQUFZLG1CQUFPLENBQUMsRUFBVztBQUMvQixrQkFBa0IsbUJBQU8sQ0FBQyxFQUFnQjtBQUMxQyxXQUFXLG1CQUFPLENBQUMsR0FBYztBQUNqQyxpQkFBaUIsbUJBQU8sQ0FBQyxFQUFnQjtBQUN6QyxrQkFBa0IsbUJBQU8sQ0FBQyxDQUFnQjtBQUMxQyxjQUFjLG1CQUFPLENBQUMsRUFBUztBQUMvQixlQUFlLG1CQUFPLENBQUMsRUFBd0I7QUFDL0M7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLE9BQU87QUFDOUI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCLDZCQUE2QjtBQUM3QiwwQkFBMEI7QUFDMUIsMEJBQTBCO0FBQzFCLHFCQUFxQjtBQUNyQjtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhFQUE4RSxPQUFPO0FBQ3JGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlDQUF5QztBQUN6QyxxQkFBcUI7QUFDckIsMEJBQTBCO0FBQzFCLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjExOC5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpO1xudmFyIHJlZGVmaW5lQWxsID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUtYWxsJyk7XG52YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG52YXIgZm9yT2YgPSByZXF1aXJlKCcuL19mb3Itb2YnKTtcbnZhciAkaXRlckRlZmluZSA9IHJlcXVpcmUoJy4vX2l0ZXItZGVmaW5lJyk7XG52YXIgc3RlcCA9IHJlcXVpcmUoJy4vX2l0ZXItc3RlcCcpO1xudmFyIHNldFNwZWNpZXMgPSByZXF1aXJlKCcuL19zZXQtc3BlY2llcycpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKTtcbnZhciBmYXN0S2V5ID0gcmVxdWlyZSgnLi9fbWV0YScpLmZhc3RLZXk7XG52YXIgdmFsaWRhdGUgPSByZXF1aXJlKCcuL192YWxpZGF0ZS1jb2xsZWN0aW9uJyk7XG52YXIgU0laRSA9IERFU0NSSVBUT1JTID8gJ19zJyA6ICdzaXplJztcblxudmFyIGdldEVudHJ5ID0gZnVuY3Rpb24gKHRoYXQsIGtleSkge1xuICAvLyBmYXN0IGNhc2VcbiAgdmFyIGluZGV4ID0gZmFzdEtleShrZXkpO1xuICB2YXIgZW50cnk7XG4gIGlmIChpbmRleCAhPT0gJ0YnKSByZXR1cm4gdGhhdC5faVtpbmRleF07XG4gIC8vIGZyb3plbiBvYmplY3QgY2FzZVxuICBmb3IgKGVudHJ5ID0gdGhhdC5fZjsgZW50cnk7IGVudHJ5ID0gZW50cnkubikge1xuICAgIGlmIChlbnRyeS5rID09IGtleSkgcmV0dXJuIGVudHJ5O1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZ2V0Q29uc3RydWN0b3I6IGZ1bmN0aW9uICh3cmFwcGVyLCBOQU1FLCBJU19NQVAsIEFEREVSKSB7XG4gICAgdmFyIEMgPSB3cmFwcGVyKGZ1bmN0aW9uICh0aGF0LCBpdGVyYWJsZSkge1xuICAgICAgYW5JbnN0YW5jZSh0aGF0LCBDLCBOQU1FLCAnX2knKTtcbiAgICAgIHRoYXQuX3QgPSBOQU1FOyAgICAgICAgIC8vIGNvbGxlY3Rpb24gdHlwZVxuICAgICAgdGhhdC5faSA9IGNyZWF0ZShudWxsKTsgLy8gaW5kZXhcbiAgICAgIHRoYXQuX2YgPSB1bmRlZmluZWQ7ICAgIC8vIGZpcnN0IGVudHJ5XG4gICAgICB0aGF0Ll9sID0gdW5kZWZpbmVkOyAgICAvLyBsYXN0IGVudHJ5XG4gICAgICB0aGF0W1NJWkVdID0gMDsgICAgICAgICAvLyBzaXplXG4gICAgICBpZiAoaXRlcmFibGUgIT0gdW5kZWZpbmVkKSBmb3JPZihpdGVyYWJsZSwgSVNfTUFQLCB0aGF0W0FEREVSXSwgdGhhdCk7XG4gICAgfSk7XG4gICAgcmVkZWZpbmVBbGwoQy5wcm90b3R5cGUsIHtcbiAgICAgIC8vIDIzLjEuMy4xIE1hcC5wcm90b3R5cGUuY2xlYXIoKVxuICAgICAgLy8gMjMuMi4zLjIgU2V0LnByb3RvdHlwZS5jbGVhcigpXG4gICAgICBjbGVhcjogZnVuY3Rpb24gY2xlYXIoKSB7XG4gICAgICAgIGZvciAodmFyIHRoYXQgPSB2YWxpZGF0ZSh0aGlzLCBOQU1FKSwgZGF0YSA9IHRoYXQuX2ksIGVudHJ5ID0gdGhhdC5fZjsgZW50cnk7IGVudHJ5ID0gZW50cnkubikge1xuICAgICAgICAgIGVudHJ5LnIgPSB0cnVlO1xuICAgICAgICAgIGlmIChlbnRyeS5wKSBlbnRyeS5wID0gZW50cnkucC5uID0gdW5kZWZpbmVkO1xuICAgICAgICAgIGRlbGV0ZSBkYXRhW2VudHJ5LmldO1xuICAgICAgICB9XG4gICAgICAgIHRoYXQuX2YgPSB0aGF0Ll9sID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGF0W1NJWkVdID0gMDtcbiAgICAgIH0sXG4gICAgICAvLyAyMy4xLjMuMyBNYXAucHJvdG90eXBlLmRlbGV0ZShrZXkpXG4gICAgICAvLyAyMy4yLjMuNCBTZXQucHJvdG90eXBlLmRlbGV0ZSh2YWx1ZSlcbiAgICAgICdkZWxldGUnOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHZhciB0aGF0ID0gdmFsaWRhdGUodGhpcywgTkFNRSk7XG4gICAgICAgIHZhciBlbnRyeSA9IGdldEVudHJ5KHRoYXQsIGtleSk7XG4gICAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICAgIHZhciBuZXh0ID0gZW50cnkubjtcbiAgICAgICAgICB2YXIgcHJldiA9IGVudHJ5LnA7XG4gICAgICAgICAgZGVsZXRlIHRoYXQuX2lbZW50cnkuaV07XG4gICAgICAgICAgZW50cnkuciA9IHRydWU7XG4gICAgICAgICAgaWYgKHByZXYpIHByZXYubiA9IG5leHQ7XG4gICAgICAgICAgaWYgKG5leHQpIG5leHQucCA9IHByZXY7XG4gICAgICAgICAgaWYgKHRoYXQuX2YgPT0gZW50cnkpIHRoYXQuX2YgPSBuZXh0O1xuICAgICAgICAgIGlmICh0aGF0Ll9sID09IGVudHJ5KSB0aGF0Ll9sID0gcHJldjtcbiAgICAgICAgICB0aGF0W1NJWkVdLS07XG4gICAgICAgIH0gcmV0dXJuICEhZW50cnk7XG4gICAgICB9LFxuICAgICAgLy8gMjMuMi4zLjYgU2V0LnByb3RvdHlwZS5mb3JFYWNoKGNhbGxiYWNrZm4sIHRoaXNBcmcgPSB1bmRlZmluZWQpXG4gICAgICAvLyAyMy4xLjMuNSBNYXAucHJvdG90eXBlLmZvckVhY2goY2FsbGJhY2tmbiwgdGhpc0FyZyA9IHVuZGVmaW5lZClcbiAgICAgIGZvckVhY2g6IGZ1bmN0aW9uIGZvckVhY2goY2FsbGJhY2tmbiAvKiAsIHRoYXQgPSB1bmRlZmluZWQgKi8pIHtcbiAgICAgICAgdmFsaWRhdGUodGhpcywgTkFNRSk7XG4gICAgICAgIHZhciBmID0gY3R4KGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkLCAzKTtcbiAgICAgICAgdmFyIGVudHJ5O1xuICAgICAgICB3aGlsZSAoZW50cnkgPSBlbnRyeSA/IGVudHJ5Lm4gOiB0aGlzLl9mKSB7XG4gICAgICAgICAgZihlbnRyeS52LCBlbnRyeS5rLCB0aGlzKTtcbiAgICAgICAgICAvLyByZXZlcnQgdG8gdGhlIGxhc3QgZXhpc3RpbmcgZW50cnlcbiAgICAgICAgICB3aGlsZSAoZW50cnkgJiYgZW50cnkucikgZW50cnkgPSBlbnRyeS5wO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgLy8gMjMuMS4zLjcgTWFwLnByb3RvdHlwZS5oYXMoa2V5KVxuICAgICAgLy8gMjMuMi4zLjcgU2V0LnByb3RvdHlwZS5oYXModmFsdWUpXG4gICAgICBoYXM6IGZ1bmN0aW9uIGhhcyhrZXkpIHtcbiAgICAgICAgcmV0dXJuICEhZ2V0RW50cnkodmFsaWRhdGUodGhpcywgTkFNRSksIGtleSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKERFU0NSSVBUT1JTKSBkUChDLnByb3RvdHlwZSwgJ3NpemUnLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHZhbGlkYXRlKHRoaXMsIE5BTUUpW1NJWkVdO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBDO1xuICB9LFxuICBkZWY6IGZ1bmN0aW9uICh0aGF0LCBrZXksIHZhbHVlKSB7XG4gICAgdmFyIGVudHJ5ID0gZ2V0RW50cnkodGhhdCwga2V5KTtcbiAgICB2YXIgcHJldiwgaW5kZXg7XG4gICAgLy8gY2hhbmdlIGV4aXN0aW5nIGVudHJ5XG4gICAgaWYgKGVudHJ5KSB7XG4gICAgICBlbnRyeS52ID0gdmFsdWU7XG4gICAgLy8gY3JlYXRlIG5ldyBlbnRyeVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGF0Ll9sID0gZW50cnkgPSB7XG4gICAgICAgIGk6IGluZGV4ID0gZmFzdEtleShrZXksIHRydWUpLCAvLyA8LSBpbmRleFxuICAgICAgICBrOiBrZXksICAgICAgICAgICAgICAgICAgICAgICAgLy8gPC0ga2V5XG4gICAgICAgIHY6IHZhbHVlLCAgICAgICAgICAgICAgICAgICAgICAvLyA8LSB2YWx1ZVxuICAgICAgICBwOiBwcmV2ID0gdGhhdC5fbCwgICAgICAgICAgICAgLy8gPC0gcHJldmlvdXMgZW50cnlcbiAgICAgICAgbjogdW5kZWZpbmVkLCAgICAgICAgICAgICAgICAgIC8vIDwtIG5leHQgZW50cnlcbiAgICAgICAgcjogZmFsc2UgICAgICAgICAgICAgICAgICAgICAgIC8vIDwtIHJlbW92ZWRcbiAgICAgIH07XG4gICAgICBpZiAoIXRoYXQuX2YpIHRoYXQuX2YgPSBlbnRyeTtcbiAgICAgIGlmIChwcmV2KSBwcmV2Lm4gPSBlbnRyeTtcbiAgICAgIHRoYXRbU0laRV0rKztcbiAgICAgIC8vIGFkZCB0byBpbmRleFxuICAgICAgaWYgKGluZGV4ICE9PSAnRicpIHRoYXQuX2lbaW5kZXhdID0gZW50cnk7XG4gICAgfSByZXR1cm4gdGhhdDtcbiAgfSxcbiAgZ2V0RW50cnk6IGdldEVudHJ5LFxuICBzZXRTdHJvbmc6IGZ1bmN0aW9uIChDLCBOQU1FLCBJU19NQVApIHtcbiAgICAvLyBhZGQgLmtleXMsIC52YWx1ZXMsIC5lbnRyaWVzLCBbQEBpdGVyYXRvcl1cbiAgICAvLyAyMy4xLjMuNCwgMjMuMS4zLjgsIDIzLjEuMy4xMSwgMjMuMS4zLjEyLCAyMy4yLjMuNSwgMjMuMi4zLjgsIDIzLjIuMy4xMCwgMjMuMi4zLjExXG4gICAgJGl0ZXJEZWZpbmUoQywgTkFNRSwgZnVuY3Rpb24gKGl0ZXJhdGVkLCBraW5kKSB7XG4gICAgICB0aGlzLl90ID0gdmFsaWRhdGUoaXRlcmF0ZWQsIE5BTUUpOyAvLyB0YXJnZXRcbiAgICAgIHRoaXMuX2sgPSBraW5kOyAgICAgICAgICAgICAgICAgICAgIC8vIGtpbmRcbiAgICAgIHRoaXMuX2wgPSB1bmRlZmluZWQ7ICAgICAgICAgICAgICAgIC8vIHByZXZpb3VzXG4gICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgdmFyIGtpbmQgPSB0aGF0Ll9rO1xuICAgICAgdmFyIGVudHJ5ID0gdGhhdC5fbDtcbiAgICAgIC8vIHJldmVydCB0byB0aGUgbGFzdCBleGlzdGluZyBlbnRyeVxuICAgICAgd2hpbGUgKGVudHJ5ICYmIGVudHJ5LnIpIGVudHJ5ID0gZW50cnkucDtcbiAgICAgIC8vIGdldCBuZXh0IGVudHJ5XG4gICAgICBpZiAoIXRoYXQuX3QgfHwgISh0aGF0Ll9sID0gZW50cnkgPSBlbnRyeSA/IGVudHJ5Lm4gOiB0aGF0Ll90Ll9mKSkge1xuICAgICAgICAvLyBvciBmaW5pc2ggdGhlIGl0ZXJhdGlvblxuICAgICAgICB0aGF0Ll90ID0gdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gc3RlcCgxKTtcbiAgICAgIH1cbiAgICAgIC8vIHJldHVybiBzdGVwIGJ5IGtpbmRcbiAgICAgIGlmIChraW5kID09ICdrZXlzJykgcmV0dXJuIHN0ZXAoMCwgZW50cnkuayk7XG4gICAgICBpZiAoa2luZCA9PSAndmFsdWVzJykgcmV0dXJuIHN0ZXAoMCwgZW50cnkudik7XG4gICAgICByZXR1cm4gc3RlcCgwLCBbZW50cnkuaywgZW50cnkudl0pO1xuICAgIH0sIElTX01BUCA/ICdlbnRyaWVzJyA6ICd2YWx1ZXMnLCAhSVNfTUFQLCB0cnVlKTtcblxuICAgIC8vIGFkZCBbQEBzcGVjaWVzXSwgMjMuMS4yLjIsIDIzLjIuMi4yXG4gICAgc2V0U3BlY2llcyhOQU1FKTtcbiAgfVxufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///118\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar strong = __webpack_require__(118);\nvar validate = __webpack_require__(42);\nvar SET = 'Set';\n\n// 23.2 Set Objects\nmodule.exports = __webpack_require__(61)(SET, function (get) {\n return function Set() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.2.3.1 Set.prototype.add(value)\n add: function add(value) {\n return strong.def(validate(this, SET), value = value === 0 ? 0 : value, value);\n }\n}, strong);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc2V0LmpzPzRmN2YiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixhQUFhLG1CQUFPLENBQUMsR0FBc0I7QUFDM0MsZUFBZSxtQkFBTyxDQUFDLEVBQXdCO0FBQy9DOztBQUVBO0FBQ0EsaUJBQWlCLG1CQUFPLENBQUMsRUFBZTtBQUN4Qyx5QkFBeUIsbUVBQW1FO0FBQzVGLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTE5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIHN0cm9uZyA9IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24tc3Ryb25nJyk7XG52YXIgdmFsaWRhdGUgPSByZXF1aXJlKCcuL192YWxpZGF0ZS1jb2xsZWN0aW9uJyk7XG52YXIgU0VUID0gJ1NldCc7XG5cbi8vIDIzLjIgU2V0IE9iamVjdHNcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fY29sbGVjdGlvbicpKFNFVCwgZnVuY3Rpb24gKGdldCkge1xuICByZXR1cm4gZnVuY3Rpb24gU2V0KCkgeyByZXR1cm4gZ2V0KHRoaXMsIGFyZ3VtZW50cy5sZW5ndGggPiAwID8gYXJndW1lbnRzWzBdIDogdW5kZWZpbmVkKTsgfTtcbn0sIHtcbiAgLy8gMjMuMi4zLjEgU2V0LnByb3RvdHlwZS5hZGQodmFsdWUpXG4gIGFkZDogZnVuY3Rpb24gYWRkKHZhbHVlKSB7XG4gICAgcmV0dXJuIHN0cm9uZy5kZWYodmFsaWRhdGUodGhpcywgU0VUKSwgdmFsdWUgPSB2YWx1ZSA9PT0gMCA/IDAgOiB2YWx1ZSwgdmFsdWUpO1xuICB9XG59LCBzdHJvbmcpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///119\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar global = __webpack_require__(2);\nvar each = __webpack_require__(26)(0);\nvar redefine = __webpack_require__(12);\nvar meta = __webpack_require__(30);\nvar assign = __webpack_require__(99);\nvar weak = __webpack_require__(121);\nvar isObject = __webpack_require__(4);\nvar validate = __webpack_require__(42);\nvar NATIVE_WEAK_MAP = __webpack_require__(42);\nvar IS_IE11 = !global.ActiveXObject && 'ActiveXObject' in global;\nvar WEAK_MAP = 'WeakMap';\nvar getWeak = meta.getWeak;\nvar isExtensible = Object.isExtensible;\nvar uncaughtFrozenStore = weak.ufstore;\nvar InternalMap;\n\nvar wrapper = function (get) {\n return function WeakMap() {\n return get(this, arguments.length > 0 ? arguments[0] : undefined);\n };\n};\n\nvar methods = {\n // 23.3.3.3 WeakMap.prototype.get(key)\n get: function get(key) {\n if (isObject(key)) {\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, WEAK_MAP)).get(key);\n return data ? data[this._i] : undefined;\n }\n },\n // 23.3.3.5 WeakMap.prototype.set(key, value)\n set: function set(key, value) {\n return weak.def(validate(this, WEAK_MAP), key, value);\n }\n};\n\n// 23.3 WeakMap Objects\nvar $WeakMap = module.exports = __webpack_require__(61)(WEAK_MAP, wrapper, methods, weak, true, true);\n\n// IE11 WeakMap frozen keys fix\nif (NATIVE_WEAK_MAP && IS_IE11) {\n InternalMap = weak.getConstructor(wrapper, WEAK_MAP);\n assign(InternalMap.prototype, methods);\n meta.NEED = true;\n each(['delete', 'has', 'get', 'set'], function (key) {\n var proto = $WeakMap.prototype;\n var method = proto[key];\n redefine(proto, key, function (a, b) {\n // store frozen objects on internal weakmap shim\n if (isObject(a) && !isExtensible(a)) {\n if (!this._f) this._f = new InternalMap();\n var result = this._f[key](a, b);\n return key == 'set' ? this : result;\n // store all the rest on native weakmap\n } return method.call(this, a, b);\n });\n });\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYud2Vhay1tYXAuanM/MTBhZCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGFBQWEsbUJBQU8sQ0FBQyxDQUFXO0FBQ2hDLFdBQVcsbUJBQU8sQ0FBQyxFQUFrQjtBQUNyQyxlQUFlLG1CQUFPLENBQUMsRUFBYTtBQUNwQyxXQUFXLG1CQUFPLENBQUMsRUFBUztBQUM1QixhQUFhLG1CQUFPLENBQUMsRUFBa0I7QUFDdkMsV0FBVyxtQkFBTyxDQUFDLEdBQW9CO0FBQ3ZDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGVBQWUsbUJBQU8sQ0FBQyxFQUF3QjtBQUMvQyxzQkFBc0IsbUJBQU8sQ0FBQyxFQUF3QjtBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxnQ0FBZ0MsbUJBQU8sQ0FBQyxFQUFlOztBQUV2RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMLEdBQUc7QUFDSCIsImZpbGUiOiIxMjAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgZWFjaCA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKSgwKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG52YXIgbWV0YSA9IHJlcXVpcmUoJy4vX21ldGEnKTtcbnZhciBhc3NpZ24gPSByZXF1aXJlKCcuL19vYmplY3QtYXNzaWduJyk7XG52YXIgd2VhayA9IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24td2VhaycpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgdmFsaWRhdGUgPSByZXF1aXJlKCcuL192YWxpZGF0ZS1jb2xsZWN0aW9uJyk7XG52YXIgTkFUSVZFX1dFQUtfTUFQID0gcmVxdWlyZSgnLi9fdmFsaWRhdGUtY29sbGVjdGlvbicpO1xudmFyIElTX0lFMTEgPSAhZ2xvYmFsLkFjdGl2ZVhPYmplY3QgJiYgJ0FjdGl2ZVhPYmplY3QnIGluIGdsb2JhbDtcbnZhciBXRUFLX01BUCA9ICdXZWFrTWFwJztcbnZhciBnZXRXZWFrID0gbWV0YS5nZXRXZWFrO1xudmFyIGlzRXh0ZW5zaWJsZSA9IE9iamVjdC5pc0V4dGVuc2libGU7XG52YXIgdW5jYXVnaHRGcm96ZW5TdG9yZSA9IHdlYWsudWZzdG9yZTtcbnZhciBJbnRlcm5hbE1hcDtcblxudmFyIHdyYXBwZXIgPSBmdW5jdGlvbiAoZ2V0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBXZWFrTWFwKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgYXJndW1lbnRzLmxlbmd0aCA+IDAgPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQpO1xuICB9O1xufTtcblxudmFyIG1ldGhvZHMgPSB7XG4gIC8vIDIzLjMuMy4zIFdlYWtNYXAucHJvdG90eXBlLmdldChrZXkpXG4gIGdldDogZnVuY3Rpb24gZ2V0KGtleSkge1xuICAgIGlmIChpc09iamVjdChrZXkpKSB7XG4gICAgICB2YXIgZGF0YSA9IGdldFdlYWsoa2V5KTtcbiAgICAgIGlmIChkYXRhID09PSB0cnVlKSByZXR1cm4gdW5jYXVnaHRGcm96ZW5TdG9yZSh2YWxpZGF0ZSh0aGlzLCBXRUFLX01BUCkpLmdldChrZXkpO1xuICAgICAgcmV0dXJuIGRhdGEgPyBkYXRhW3RoaXMuX2ldIDogdW5kZWZpbmVkO1xuICAgIH1cbiAgfSxcbiAgLy8gMjMuMy4zLjUgV2Vha01hcC5wcm90b3R5cGUuc2V0KGtleSwgdmFsdWUpXG4gIHNldDogZnVuY3Rpb24gc2V0KGtleSwgdmFsdWUpIHtcbiAgICByZXR1cm4gd2Vhay5kZWYodmFsaWRhdGUodGhpcywgV0VBS19NQVApLCBrZXksIHZhbHVlKTtcbiAgfVxufTtcblxuLy8gMjMuMyBXZWFrTWFwIE9iamVjdHNcbnZhciAkV2Vha01hcCA9IG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fY29sbGVjdGlvbicpKFdFQUtfTUFQLCB3cmFwcGVyLCBtZXRob2RzLCB3ZWFrLCB0cnVlLCB0cnVlKTtcblxuLy8gSUUxMSBXZWFrTWFwIGZyb3plbiBrZXlzIGZpeFxuaWYgKE5BVElWRV9XRUFLX01BUCAmJiBJU19JRTExKSB7XG4gIEludGVybmFsTWFwID0gd2Vhay5nZXRDb25zdHJ1Y3Rvcih3cmFwcGVyLCBXRUFLX01BUCk7XG4gIGFzc2lnbihJbnRlcm5hbE1hcC5wcm90b3R5cGUsIG1ldGhvZHMpO1xuICBtZXRhLk5FRUQgPSB0cnVlO1xuICBlYWNoKFsnZGVsZXRlJywgJ2hhcycsICdnZXQnLCAnc2V0J10sIGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgcHJvdG8gPSAkV2Vha01hcC5wcm90b3R5cGU7XG4gICAgdmFyIG1ldGhvZCA9IHByb3RvW2tleV07XG4gICAgcmVkZWZpbmUocHJvdG8sIGtleSwgZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgIC8vIHN0b3JlIGZyb3plbiBvYmplY3RzIG9uIGludGVybmFsIHdlYWttYXAgc2hpbVxuICAgICAgaWYgKGlzT2JqZWN0KGEpICYmICFpc0V4dGVuc2libGUoYSkpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9mKSB0aGlzLl9mID0gbmV3IEludGVybmFsTWFwKCk7XG4gICAgICAgIHZhciByZXN1bHQgPSB0aGlzLl9mW2tleV0oYSwgYik7XG4gICAgICAgIHJldHVybiBrZXkgPT0gJ3NldCcgPyB0aGlzIDogcmVzdWx0O1xuICAgICAgLy8gc3RvcmUgYWxsIHRoZSByZXN0IG9uIG5hdGl2ZSB3ZWFrbWFwXG4gICAgICB9IHJldHVybiBtZXRob2QuY2FsbCh0aGlzLCBhLCBiKTtcbiAgICB9KTtcbiAgfSk7XG59XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///120\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar redefineAll = __webpack_require__(41);\nvar getWeak = __webpack_require__(30).getWeak;\nvar anObject = __webpack_require__(1);\nvar isObject = __webpack_require__(4);\nvar anInstance = __webpack_require__(39);\nvar forOf = __webpack_require__(40);\nvar createArrayMethod = __webpack_require__(26);\nvar $has = __webpack_require__(14);\nvar validate = __webpack_require__(42);\nvar arrayFind = createArrayMethod(5);\nvar arrayFindIndex = createArrayMethod(6);\nvar id = 0;\n\n// fallback for uncaught frozen keys\nvar uncaughtFrozenStore = function (that) {\n return that._l || (that._l = new UncaughtFrozenStore());\n};\nvar UncaughtFrozenStore = function () {\n this.a = [];\n};\nvar findUncaughtFrozen = function (store, key) {\n return arrayFind(store.a, function (it) {\n return it[0] === key;\n });\n};\nUncaughtFrozenStore.prototype = {\n get: function (key) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) return entry[1];\n },\n has: function (key) {\n return !!findUncaughtFrozen(this, key);\n },\n set: function (key, value) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) entry[1] = value;\n else this.a.push([key, value]);\n },\n 'delete': function (key) {\n var index = arrayFindIndex(this.a, function (it) {\n return it[0] === key;\n });\n if (~index) this.a.splice(index, 1);\n return !!~index;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = id++; // collection id\n that._l = undefined; // leak store for uncaught frozen objects\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.3.3.2 WeakMap.prototype.delete(key)\n // 23.4.3.3 WeakSet.prototype.delete(value)\n 'delete': function (key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME))['delete'](key);\n return data && $has(data, this._i) && delete data[this._i];\n },\n // 23.3.3.4 WeakMap.prototype.has(key)\n // 23.4.3.4 WeakSet.prototype.has(value)\n has: function has(key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME)).has(key);\n return data && $has(data, this._i);\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var data = getWeak(anObject(key), true);\n if (data === true) uncaughtFrozenStore(that).set(key, value);\n else data[that._i] = value;\n return that;\n },\n ufstore: uncaughtFrozenStore\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY29sbGVjdGlvbi13ZWFrLmpzPzY0M2UiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixrQkFBa0IsbUJBQU8sQ0FBQyxFQUFpQjtBQUMzQyxjQUFjLG1CQUFPLENBQUMsRUFBUztBQUMvQixlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxpQkFBaUIsbUJBQU8sQ0FBQyxFQUFnQjtBQUN6QyxZQUFZLG1CQUFPLENBQUMsRUFBVztBQUMvQix3QkFBd0IsbUJBQU8sQ0FBQyxFQUFrQjtBQUNsRCxXQUFXLG1CQUFPLENBQUMsRUFBUTtBQUMzQixlQUFlLG1CQUFPLENBQUMsRUFBd0I7QUFDL0M7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckIscUJBQXFCO0FBQ3JCLDBCQUEwQjtBQUMxQjtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBIiwiZmlsZSI6IjEyMS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciByZWRlZmluZUFsbCA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lLWFsbCcpO1xudmFyIGdldFdlYWsgPSByZXF1aXJlKCcuL19tZXRhJykuZ2V0V2VhaztcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG52YXIgZm9yT2YgPSByZXF1aXJlKCcuL19mb3Itb2YnKTtcbnZhciBjcmVhdGVBcnJheU1ldGhvZCA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKTtcbnZhciAkaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgdmFsaWRhdGUgPSByZXF1aXJlKCcuL192YWxpZGF0ZS1jb2xsZWN0aW9uJyk7XG52YXIgYXJyYXlGaW5kID0gY3JlYXRlQXJyYXlNZXRob2QoNSk7XG52YXIgYXJyYXlGaW5kSW5kZXggPSBjcmVhdGVBcnJheU1ldGhvZCg2KTtcbnZhciBpZCA9IDA7XG5cbi8vIGZhbGxiYWNrIGZvciB1bmNhdWdodCBmcm96ZW4ga2V5c1xudmFyIHVuY2F1Z2h0RnJvemVuU3RvcmUgPSBmdW5jdGlvbiAodGhhdCkge1xuICByZXR1cm4gdGhhdC5fbCB8fCAodGhhdC5fbCA9IG5ldyBVbmNhdWdodEZyb3plblN0b3JlKCkpO1xufTtcbnZhciBVbmNhdWdodEZyb3plblN0b3JlID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmEgPSBbXTtcbn07XG52YXIgZmluZFVuY2F1Z2h0RnJvemVuID0gZnVuY3Rpb24gKHN0b3JlLCBrZXkpIHtcbiAgcmV0dXJuIGFycmF5RmluZChzdG9yZS5hLCBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gaXRbMF0gPT09IGtleTtcbiAgfSk7XG59O1xuVW5jYXVnaHRGcm96ZW5TdG9yZS5wcm90b3R5cGUgPSB7XG4gIGdldDogZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciBlbnRyeSA9IGZpbmRVbmNhdWdodEZyb3plbih0aGlzLCBrZXkpO1xuICAgIGlmIChlbnRyeSkgcmV0dXJuIGVudHJ5WzFdO1xuICB9LFxuICBoYXM6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICByZXR1cm4gISFmaW5kVW5jYXVnaHRGcm96ZW4odGhpcywga2V5KTtcbiAgfSxcbiAgc2V0OiBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgIHZhciBlbnRyeSA9IGZpbmRVbmNhdWdodEZyb3plbih0aGlzLCBrZXkpO1xuICAgIGlmIChlbnRyeSkgZW50cnlbMV0gPSB2YWx1ZTtcbiAgICBlbHNlIHRoaXMuYS5wdXNoKFtrZXksIHZhbHVlXSk7XG4gIH0sXG4gICdkZWxldGUnOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIGluZGV4ID0gYXJyYXlGaW5kSW5kZXgodGhpcy5hLCBmdW5jdGlvbiAoaXQpIHtcbiAgICAgIHJldHVybiBpdFswXSA9PT0ga2V5O1xuICAgIH0pO1xuICAgIGlmICh+aW5kZXgpIHRoaXMuYS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIHJldHVybiAhIX5pbmRleDtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGdldENvbnN0cnVjdG9yOiBmdW5jdGlvbiAod3JhcHBlciwgTkFNRSwgSVNfTUFQLCBBRERFUikge1xuICAgIHZhciBDID0gd3JhcHBlcihmdW5jdGlvbiAodGhhdCwgaXRlcmFibGUpIHtcbiAgICAgIGFuSW5zdGFuY2UodGhhdCwgQywgTkFNRSwgJ19pJyk7XG4gICAgICB0aGF0Ll90ID0gTkFNRTsgICAgICAvLyBjb2xsZWN0aW9uIHR5cGVcbiAgICAgIHRoYXQuX2kgPSBpZCsrOyAgICAgIC8vIGNvbGxlY3Rpb24gaWRcbiAgICAgIHRoYXQuX2wgPSB1bmRlZmluZWQ7IC8vIGxlYWsgc3RvcmUgZm9yIHVuY2F1Z2h0IGZyb3plbiBvYmplY3RzXG4gICAgICBpZiAoaXRlcmFibGUgIT0gdW5kZWZpbmVkKSBmb3JPZihpdGVyYWJsZSwgSVNfTUFQLCB0aGF0W0FEREVSXSwgdGhhdCk7XG4gICAgfSk7XG4gICAgcmVkZWZpbmVBbGwoQy5wcm90b3R5cGUsIHtcbiAgICAgIC8vIDIzLjMuMy4yIFdlYWtNYXAucHJvdG90eXBlLmRlbGV0ZShrZXkpXG4gICAgICAvLyAyMy40LjMuMyBXZWFrU2V0LnByb3RvdHlwZS5kZWxldGUodmFsdWUpXG4gICAgICAnZGVsZXRlJzogZnVuY3Rpb24gKGtleSkge1xuICAgICAgICBpZiAoIWlzT2JqZWN0KGtleSkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgdmFyIGRhdGEgPSBnZXRXZWFrKGtleSk7XG4gICAgICAgIGlmIChkYXRhID09PSB0cnVlKSByZXR1cm4gdW5jYXVnaHRGcm96ZW5TdG9yZSh2YWxpZGF0ZSh0aGlzLCBOQU1FKSlbJ2RlbGV0ZSddKGtleSk7XG4gICAgICAgIHJldHVybiBkYXRhICYmICRoYXMoZGF0YSwgdGhpcy5faSkgJiYgZGVsZXRlIGRhdGFbdGhpcy5faV07XG4gICAgICB9LFxuICAgICAgLy8gMjMuMy4zLjQgV2Vha01hcC5wcm90b3R5cGUuaGFzKGtleSlcbiAgICAgIC8vIDIzLjQuMy40IFdlYWtTZXQucHJvdG90eXBlLmhhcyh2YWx1ZSlcbiAgICAgIGhhczogZnVuY3Rpb24gaGFzKGtleSkge1xuICAgICAgICBpZiAoIWlzT2JqZWN0KGtleSkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgdmFyIGRhdGEgPSBnZXRXZWFrKGtleSk7XG4gICAgICAgIGlmIChkYXRhID09PSB0cnVlKSByZXR1cm4gdW5jYXVnaHRGcm96ZW5TdG9yZSh2YWxpZGF0ZSh0aGlzLCBOQU1FKSkuaGFzKGtleSk7XG4gICAgICAgIHJldHVybiBkYXRhICYmICRoYXMoZGF0YSwgdGhpcy5faSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIEM7XG4gIH0sXG4gIGRlZjogZnVuY3Rpb24gKHRoYXQsIGtleSwgdmFsdWUpIHtcbiAgICB2YXIgZGF0YSA9IGdldFdlYWsoYW5PYmplY3Qoa2V5KSwgdHJ1ZSk7XG4gICAgaWYgKGRhdGEgPT09IHRydWUpIHVuY2F1Z2h0RnJvemVuU3RvcmUodGhhdCkuc2V0KGtleSwgdmFsdWUpO1xuICAgIGVsc2UgZGF0YVt0aGF0Ll9pXSA9IHZhbHVlO1xuICAgIHJldHVybiB0aGF0O1xuICB9LFxuICB1ZnN0b3JlOiB1bmNhdWdodEZyb3plblN0b3JlXG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///121\n")},function(module,exports,__webpack_require__){eval("// https://tc39.github.io/ecma262/#sec-toindex\nvar toInteger = __webpack_require__(21);\nvar toLength = __webpack_require__(6);\nmodule.exports = function (it) {\n if (it === undefined) return 0;\n var number = toInteger(it);\n var length = toLength(number);\n if (number !== length) throw RangeError('Wrong length!');\n return length;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8taW5kZXguanM/MDlmYSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGdCQUFnQixtQkFBTyxDQUFDLEVBQWU7QUFDdkMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMTIyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtdG9pbmRleFxudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGl0ID09PSB1bmRlZmluZWQpIHJldHVybiAwO1xuICB2YXIgbnVtYmVyID0gdG9JbnRlZ2VyKGl0KTtcbiAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKG51bWJlcik7XG4gIGlmIChudW1iZXIgIT09IGxlbmd0aCkgdGhyb3cgUmFuZ2VFcnJvcignV3JvbmcgbGVuZ3RoIScpO1xuICByZXR1cm4gbGVuZ3RoO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///122\n")},function(module,exports,__webpack_require__){eval("// all object keys, includes non-enumerable and symbols\nvar gOPN = __webpack_require__(37);\nvar gOPS = __webpack_require__(53);\nvar anObject = __webpack_require__(1);\nvar Reflect = __webpack_require__(2).Reflect;\nmodule.exports = Reflect && Reflect.ownKeys || function ownKeys(it) {\n var keys = gOPN.f(anObject(it));\n var getSymbols = gOPS.f;\n return getSymbols ? keys.concat(getSymbols(it)) : keys;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb3duLWtleXMuanM/OTkwYiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLFdBQVcsbUJBQU8sQ0FBQyxFQUFnQjtBQUNuQyxXQUFXLG1CQUFPLENBQUMsRUFBZ0I7QUFDbkMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIxMjMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBhbGwgb2JqZWN0IGtleXMsIGluY2x1ZGVzIG5vbi1lbnVtZXJhYmxlIGFuZCBzeW1ib2xzXG52YXIgZ09QTiA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJyk7XG52YXIgZ09QUyA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BzJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBSZWZsZWN0ID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuUmVmbGVjdDtcbm1vZHVsZS5leHBvcnRzID0gUmVmbGVjdCAmJiBSZWZsZWN0Lm93bktleXMgfHwgZnVuY3Rpb24gb3duS2V5cyhpdCkge1xuICB2YXIga2V5cyA9IGdPUE4uZihhbk9iamVjdChpdCkpO1xuICB2YXIgZ2V0U3ltYm9scyA9IGdPUFMuZjtcbiAgcmV0dXJuIGdldFN5bWJvbHMgPyBrZXlzLmNvbmNhdChnZXRTeW1ib2xzKGl0KSkgOiBrZXlzO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///123\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// https://tc39.github.io/proposal-flatMap/#sec-FlattenIntoArray\nvar isArray = __webpack_require__(54);\nvar isObject = __webpack_require__(4);\nvar toLength = __webpack_require__(6);\nvar ctx = __webpack_require__(19);\nvar IS_CONCAT_SPREADABLE = __webpack_require__(5)('isConcatSpreadable');\n\nfunction flattenIntoArray(target, original, source, sourceLen, start, depth, mapper, thisArg) {\n var targetIndex = start;\n var sourceIndex = 0;\n var mapFn = mapper ? ctx(mapper, thisArg, 3) : false;\n var element, spreadable;\n\n while (sourceIndex < sourceLen) {\n if (sourceIndex in source) {\n element = mapFn ? mapFn(source[sourceIndex], sourceIndex, original) : source[sourceIndex];\n\n spreadable = false;\n if (isObject(element)) {\n spreadable = element[IS_CONCAT_SPREADABLE];\n spreadable = spreadable !== undefined ? !!spreadable : isArray(element);\n }\n\n if (spreadable && depth > 0) {\n targetIndex = flattenIntoArray(target, original, element, toLength(element.length), targetIndex, depth - 1) - 1;\n } else {\n if (targetIndex >= 0x1fffffffffffff) throw TypeError();\n target[targetIndex] = element;\n }\n\n targetIndex++;\n }\n sourceIndex++;\n }\n return targetIndex;\n}\n\nmodule.exports = flattenIntoArray;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZmxhdHRlbi1pbnRvLWFycmF5LmpzP2M0NWYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxFQUFhO0FBQ25DLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLFVBQVUsbUJBQU8sQ0FBQyxFQUFRO0FBQzFCLDJCQUEyQixtQkFBTyxDQUFDLENBQVE7O0FBRTNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6IjEyNC5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtZmxhdE1hcC8jc2VjLUZsYXR0ZW5JbnRvQXJyYXlcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi9faXMtYXJyYXknKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgSVNfQ09OQ0FUX1NQUkVBREFCTEUgPSByZXF1aXJlKCcuL193a3MnKSgnaXNDb25jYXRTcHJlYWRhYmxlJyk7XG5cbmZ1bmN0aW9uIGZsYXR0ZW5JbnRvQXJyYXkodGFyZ2V0LCBvcmlnaW5hbCwgc291cmNlLCBzb3VyY2VMZW4sIHN0YXJ0LCBkZXB0aCwgbWFwcGVyLCB0aGlzQXJnKSB7XG4gIHZhciB0YXJnZXRJbmRleCA9IHN0YXJ0O1xuICB2YXIgc291cmNlSW5kZXggPSAwO1xuICB2YXIgbWFwRm4gPSBtYXBwZXIgPyBjdHgobWFwcGVyLCB0aGlzQXJnLCAzKSA6IGZhbHNlO1xuICB2YXIgZWxlbWVudCwgc3ByZWFkYWJsZTtcblxuICB3aGlsZSAoc291cmNlSW5kZXggPCBzb3VyY2VMZW4pIHtcbiAgICBpZiAoc291cmNlSW5kZXggaW4gc291cmNlKSB7XG4gICAgICBlbGVtZW50ID0gbWFwRm4gPyBtYXBGbihzb3VyY2Vbc291cmNlSW5kZXhdLCBzb3VyY2VJbmRleCwgb3JpZ2luYWwpIDogc291cmNlW3NvdXJjZUluZGV4XTtcblxuICAgICAgc3ByZWFkYWJsZSA9IGZhbHNlO1xuICAgICAgaWYgKGlzT2JqZWN0KGVsZW1lbnQpKSB7XG4gICAgICAgIHNwcmVhZGFibGUgPSBlbGVtZW50W0lTX0NPTkNBVF9TUFJFQURBQkxFXTtcbiAgICAgICAgc3ByZWFkYWJsZSA9IHNwcmVhZGFibGUgIT09IHVuZGVmaW5lZCA/ICEhc3ByZWFkYWJsZSA6IGlzQXJyYXkoZWxlbWVudCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChzcHJlYWRhYmxlICYmIGRlcHRoID4gMCkge1xuICAgICAgICB0YXJnZXRJbmRleCA9IGZsYXR0ZW5JbnRvQXJyYXkodGFyZ2V0LCBvcmlnaW5hbCwgZWxlbWVudCwgdG9MZW5ndGgoZWxlbWVudC5sZW5ndGgpLCB0YXJnZXRJbmRleCwgZGVwdGggLSAxKSAtIDE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodGFyZ2V0SW5kZXggPj0gMHgxZmZmZmZmZmZmZmZmZikgdGhyb3cgVHlwZUVycm9yKCk7XG4gICAgICAgIHRhcmdldFt0YXJnZXRJbmRleF0gPSBlbGVtZW50O1xuICAgICAgfVxuXG4gICAgICB0YXJnZXRJbmRleCsrO1xuICAgIH1cbiAgICBzb3VyY2VJbmRleCsrO1xuICB9XG4gIHJldHVybiB0YXJnZXRJbmRleDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmbGF0dGVuSW50b0FycmF5O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///124\n")},function(module,exports,__webpack_require__){eval("// https://github.com/tc39/proposal-string-pad-start-end\nvar toLength = __webpack_require__(6);\nvar repeat = __webpack_require__(74);\nvar defined = __webpack_require__(24);\n\nmodule.exports = function (that, maxLength, fillString, left) {\n var S = String(defined(that));\n var stringLength = S.length;\n var fillStr = fillString === undefined ? ' ' : String(fillString);\n var intMaxLength = toLength(maxLength);\n if (intMaxLength <= stringLength || fillStr == '') return S;\n var fillLen = intMaxLength - stringLength;\n var stringFiller = repeat.call(fillStr, Math.ceil(fillLen / fillStr.length));\n if (stringFiller.length > fillLen) stringFiller = stringFiller.slice(0, fillLen);\n return left ? stringFiller + S : S + stringFiller;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLXBhZC5qcz8yZTA4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsYUFBYSxtQkFBTyxDQUFDLEVBQWtCO0FBQ3ZDLGNBQWMsbUJBQU8sQ0FBQyxFQUFZOztBQUVsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjEyNS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXN0cmluZy1wYWQtc3RhcnQtZW5kXG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciByZXBlYXQgPSByZXF1aXJlKCcuL19zdHJpbmctcmVwZWF0Jyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGhhdCwgbWF4TGVuZ3RoLCBmaWxsU3RyaW5nLCBsZWZ0KSB7XG4gIHZhciBTID0gU3RyaW5nKGRlZmluZWQodGhhdCkpO1xuICB2YXIgc3RyaW5nTGVuZ3RoID0gUy5sZW5ndGg7XG4gIHZhciBmaWxsU3RyID0gZmlsbFN0cmluZyA9PT0gdW5kZWZpbmVkID8gJyAnIDogU3RyaW5nKGZpbGxTdHJpbmcpO1xuICB2YXIgaW50TWF4TGVuZ3RoID0gdG9MZW5ndGgobWF4TGVuZ3RoKTtcbiAgaWYgKGludE1heExlbmd0aCA8PSBzdHJpbmdMZW5ndGggfHwgZmlsbFN0ciA9PSAnJykgcmV0dXJuIFM7XG4gIHZhciBmaWxsTGVuID0gaW50TWF4TGVuZ3RoIC0gc3RyaW5nTGVuZ3RoO1xuICB2YXIgc3RyaW5nRmlsbGVyID0gcmVwZWF0LmNhbGwoZmlsbFN0ciwgTWF0aC5jZWlsKGZpbGxMZW4gLyBmaWxsU3RyLmxlbmd0aCkpO1xuICBpZiAoc3RyaW5nRmlsbGVyLmxlbmd0aCA+IGZpbGxMZW4pIHN0cmluZ0ZpbGxlciA9IHN0cmluZ0ZpbGxlci5zbGljZSgwLCBmaWxsTGVuKTtcbiAgcmV0dXJuIGxlZnQgPyBzdHJpbmdGaWxsZXIgKyBTIDogUyArIHN0cmluZ0ZpbGxlcjtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///125\n")},function(module,exports,__webpack_require__){eval("var DESCRIPTORS = __webpack_require__(7);\nvar getKeys = __webpack_require__(34);\nvar toIObject = __webpack_require__(15);\nvar isEnum = __webpack_require__(49).f;\nmodule.exports = function (isEntries) {\n return function (it) {\n var O = toIObject(it);\n var keys = getKeys(O);\n var length = keys.length;\n var i = 0;\n var result = [];\n var key;\n while (length > i) {\n key = keys[i++];\n if (!DESCRIPTORS || isEnum.call(O, key)) {\n result.push(isEntries ? [key, O[key]] : O[key]);\n }\n }\n return result;\n };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LXRvLWFycmF5LmpzPzUwNGMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsa0JBQWtCLG1CQUFPLENBQUMsQ0FBZ0I7QUFDMUMsY0FBYyxtQkFBTyxDQUFDLEVBQWdCO0FBQ3RDLGdCQUFnQixtQkFBTyxDQUFDLEVBQWU7QUFDdkMsYUFBYSxtQkFBTyxDQUFDLEVBQWU7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIxMjYuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpO1xudmFyIGdldEtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciBpc0VudW0gPSByZXF1aXJlKCcuL19vYmplY3QtcGllJykuZjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGlzRW50cmllcykge1xuICByZXR1cm4gZnVuY3Rpb24gKGl0KSB7XG4gICAgdmFyIE8gPSB0b0lPYmplY3QoaXQpO1xuICAgIHZhciBrZXlzID0gZ2V0S2V5cyhPKTtcbiAgICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICB2YXIga2V5O1xuICAgIHdoaWxlIChsZW5ndGggPiBpKSB7XG4gICAgICBrZXkgPSBrZXlzW2krK107XG4gICAgICBpZiAoIURFU0NSSVBUT1JTIHx8IGlzRW51bS5jYWxsKE8sIGtleSkpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goaXNFbnRyaWVzID8gW2tleSwgT1trZXldXSA6IE9ba2V5XSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///126\n")},function(module,exports,__webpack_require__){eval('// https://github.com/DavidBruant/Map-Set.prototype.toJSON\nvar classof = __webpack_require__(44);\nvar from = __webpack_require__(128);\nmodule.exports = function (NAME) {\n return function toJSON() {\n if (classof(this) != NAME) throw TypeError(NAME + "#toJSON isn\'t generic");\n return from(this);\n };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY29sbGVjdGlvbi10by1qc29uLmpzPzQ0YjgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsRUFBWTtBQUNsQyxXQUFXLG1CQUFPLENBQUMsR0FBd0I7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjEyNy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9EYXZpZEJydWFudC9NYXAtU2V0LnByb3RvdHlwZS50b0pTT05cbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi9fY2xhc3NvZicpO1xudmFyIGZyb20gPSByZXF1aXJlKCcuL19hcnJheS1mcm9tLWl0ZXJhYmxlJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChOQU1FKSB7XG4gIHJldHVybiBmdW5jdGlvbiB0b0pTT04oKSB7XG4gICAgaWYgKGNsYXNzb2YodGhpcykgIT0gTkFNRSkgdGhyb3cgVHlwZUVycm9yKE5BTUUgKyBcIiN0b0pTT04gaXNuJ3QgZ2VuZXJpY1wiKTtcbiAgICByZXR1cm4gZnJvbSh0aGlzKTtcbiAgfTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///127\n')},function(module,exports,__webpack_require__){eval("var forOf = __webpack_require__(40);\n\nmodule.exports = function (iter, ITERATOR) {\n var result = [];\n forOf(iter, false, result.push, result, ITERATOR);\n return result;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktZnJvbS1pdGVyYWJsZS5qcz80Mzc5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVksbUJBQU8sQ0FBQyxFQUFXOztBQUUvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjEyOC5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBmb3JPZiA9IHJlcXVpcmUoJy4vX2Zvci1vZicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVyLCBJVEVSQVRPUikge1xuICB2YXIgcmVzdWx0ID0gW107XG4gIGZvck9mKGl0ZXIsIGZhbHNlLCByZXN1bHQucHVzaCwgcmVzdWx0LCBJVEVSQVRPUik7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///128\n")},function(module,exports){eval("// https://rwaldron.github.io/proposal-math-extensions/\nmodule.exports = Math.scale || function scale(x, inLow, inHigh, outLow, outHigh) {\n if (\n arguments.length === 0\n // eslint-disable-next-line no-self-compare\n || x != x\n // eslint-disable-next-line no-self-compare\n || inLow != inLow\n // eslint-disable-next-line no-self-compare\n || inHigh != inHigh\n // eslint-disable-next-line no-self-compare\n || outLow != outLow\n // eslint-disable-next-line no-self-compare\n || outHigh != outHigh\n ) return NaN;\n if (x === Infinity || x === -Infinity) return x;\n return (x - inLow) * (outHigh - outLow) / (inHigh - inLow) + outLow;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWF0aC1zY2FsZS5qcz9lOWQyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIxMjkuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBodHRwczovL3J3YWxkcm9uLmdpdGh1Yi5pby9wcm9wb3NhbC1tYXRoLWV4dGVuc2lvbnMvXG5tb2R1bGUuZXhwb3J0cyA9IE1hdGguc2NhbGUgfHwgZnVuY3Rpb24gc2NhbGUoeCwgaW5Mb3csIGluSGlnaCwgb3V0TG93LCBvdXRIaWdoKSB7XG4gIGlmIChcbiAgICBhcmd1bWVudHMubGVuZ3RoID09PSAwXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICB8fCB4ICE9IHhcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICAgIHx8IGluTG93ICE9IGluTG93XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICB8fCBpbkhpZ2ggIT0gaW5IaWdoXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICB8fCBvdXRMb3cgIT0gb3V0TG93XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICB8fCBvdXRIaWdoICE9IG91dEhpZ2hcbiAgKSByZXR1cm4gTmFOO1xuICBpZiAoeCA9PT0gSW5maW5pdHkgfHwgeCA9PT0gLUluZmluaXR5KSByZXR1cm4geDtcbiAgcmV0dXJuICh4IC0gaW5Mb3cpICogKG91dEhpZ2ggLSBvdXRMb3cpIC8gKGluSGlnaCAtIGluTG93KSArIG91dExvdztcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///129\n")},function(e,n,t){t(131),e.exports=t(333)},function(module,exports,__webpack_require__){"use strict";eval('/* WEBPACK VAR INJECTION */(function(global) {\n\n__webpack_require__(132);\n\n__webpack_require__(329);\n\n__webpack_require__(330);\n\nif (global._babelPolyfill) {\n throw new Error("only one instance of babel-polyfill is allowed");\n}\nglobal._babelPolyfill = true;\n\nvar DEFINE_PROPERTY = "defineProperty";\nfunction define(O, key, value) {\n O[key] || Object[DEFINE_PROPERTY](O, key, {\n writable: true,\n configurable: true,\n value: value\n });\n}\n\ndefine(String.prototype, "padLeft", "".padStart);\ndefine(String.prototype, "padRight", "".padEnd);\n\n"pop,reverse,shift,keys,values,entries,indexOf,every,some,forEach,map,filter,find,findIndex,includes,join,slice,concat,push,splice,unshift,sort,lastIndexOf,reduce,reduceRight,copyWithin,fill".split(",").forEach(function (key) {\n [][key] && define(Array, key, Function.call.bind([][key]));\n});\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(93)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL2xpYi9pbmRleC5qcz9kYjRkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDhDQUFhOztBQUViLG1CQUFPLENBQUMsR0FBYzs7QUFFdEIsbUJBQU8sQ0FBQyxHQUE2Qjs7QUFFckMsbUJBQU8sQ0FBQyxHQUEwQjs7QUFFbEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLENBQUMsRSIsImZpbGUiOiIxMzEuanMiLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxucmVxdWlyZShcImNvcmUtanMvc2hpbVwiKTtcblxucmVxdWlyZShcInJlZ2VuZXJhdG9yLXJ1bnRpbWUvcnVudGltZVwiKTtcblxucmVxdWlyZShcImNvcmUtanMvZm4vcmVnZXhwL2VzY2FwZVwiKTtcblxuaWYgKGdsb2JhbC5fYmFiZWxQb2x5ZmlsbCkge1xuICB0aHJvdyBuZXcgRXJyb3IoXCJvbmx5IG9uZSBpbnN0YW5jZSBvZiBiYWJlbC1wb2x5ZmlsbCBpcyBhbGxvd2VkXCIpO1xufVxuZ2xvYmFsLl9iYWJlbFBvbHlmaWxsID0gdHJ1ZTtcblxudmFyIERFRklORV9QUk9QRVJUWSA9IFwiZGVmaW5lUHJvcGVydHlcIjtcbmZ1bmN0aW9uIGRlZmluZShPLCBrZXksIHZhbHVlKSB7XG4gIE9ba2V5XSB8fCBPYmplY3RbREVGSU5FX1BST1BFUlRZXShPLCBrZXksIHtcbiAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgdmFsdWU6IHZhbHVlXG4gIH0pO1xufVxuXG5kZWZpbmUoU3RyaW5nLnByb3RvdHlwZSwgXCJwYWRMZWZ0XCIsIFwiXCIucGFkU3RhcnQpO1xuZGVmaW5lKFN0cmluZy5wcm90b3R5cGUsIFwicGFkUmlnaHRcIiwgXCJcIi5wYWRFbmQpO1xuXG5cInBvcCxyZXZlcnNlLHNoaWZ0LGtleXMsdmFsdWVzLGVudHJpZXMsaW5kZXhPZixldmVyeSxzb21lLGZvckVhY2gsbWFwLGZpbHRlcixmaW5kLGZpbmRJbmRleCxpbmNsdWRlcyxqb2luLHNsaWNlLGNvbmNhdCxwdXNoLHNwbGljZSx1bnNoaWZ0LHNvcnQsbGFzdEluZGV4T2YscmVkdWNlLHJlZHVjZVJpZ2h0LGNvcHlXaXRoaW4sZmlsbFwiLnNwbGl0KFwiLFwiKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgW11ba2V5XSAmJiBkZWZpbmUoQXJyYXksIGtleSwgRnVuY3Rpb24uY2FsbC5iaW5kKFtdW2tleV0pKTtcbn0pOyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///131\n')},function(module,exports,__webpack_require__){eval("__webpack_require__(133);\n__webpack_require__(136);\n__webpack_require__(137);\n__webpack_require__(138);\n__webpack_require__(139);\n__webpack_require__(140);\n__webpack_require__(141);\n__webpack_require__(142);\n__webpack_require__(143);\n__webpack_require__(144);\n__webpack_require__(145);\n__webpack_require__(146);\n__webpack_require__(147);\n__webpack_require__(148);\n__webpack_require__(149);\n__webpack_require__(150);\n__webpack_require__(151);\n__webpack_require__(152);\n__webpack_require__(153);\n__webpack_require__(154);\n__webpack_require__(155);\n__webpack_require__(156);\n__webpack_require__(157);\n__webpack_require__(158);\n__webpack_require__(159);\n__webpack_require__(160);\n__webpack_require__(161);\n__webpack_require__(162);\n__webpack_require__(163);\n__webpack_require__(164);\n__webpack_require__(165);\n__webpack_require__(166);\n__webpack_require__(167);\n__webpack_require__(168);\n__webpack_require__(169);\n__webpack_require__(170);\n__webpack_require__(171);\n__webpack_require__(172);\n__webpack_require__(173);\n__webpack_require__(174);\n__webpack_require__(175);\n__webpack_require__(176);\n__webpack_require__(177);\n__webpack_require__(178);\n__webpack_require__(179);\n__webpack_require__(180);\n__webpack_require__(181);\n__webpack_require__(182);\n__webpack_require__(183);\n__webpack_require__(184);\n__webpack_require__(185);\n__webpack_require__(186);\n__webpack_require__(187);\n__webpack_require__(188);\n__webpack_require__(189);\n__webpack_require__(190);\n__webpack_require__(191);\n__webpack_require__(192);\n__webpack_require__(193);\n__webpack_require__(194);\n__webpack_require__(195);\n__webpack_require__(196);\n__webpack_require__(197);\n__webpack_require__(198);\n__webpack_require__(199);\n__webpack_require__(200);\n__webpack_require__(201);\n__webpack_require__(202);\n__webpack_require__(203);\n__webpack_require__(204);\n__webpack_require__(205);\n__webpack_require__(206);\n__webpack_require__(207);\n__webpack_require__(208);\n__webpack_require__(209);\n__webpack_require__(210);\n__webpack_require__(211);\n__webpack_require__(213);\n__webpack_require__(214);\n__webpack_require__(216);\n__webpack_require__(217);\n__webpack_require__(218);\n__webpack_require__(219);\n__webpack_require__(220);\n__webpack_require__(221);\n__webpack_require__(222);\n__webpack_require__(224);\n__webpack_require__(225);\n__webpack_require__(226);\n__webpack_require__(227);\n__webpack_require__(228);\n__webpack_require__(229);\n__webpack_require__(230);\n__webpack_require__(231);\n__webpack_require__(232);\n__webpack_require__(233);\n__webpack_require__(234);\n__webpack_require__(235);\n__webpack_require__(236);\n__webpack_require__(86);\n__webpack_require__(237);\n__webpack_require__(113);\n__webpack_require__(238);\n__webpack_require__(114);\n__webpack_require__(239);\n__webpack_require__(240);\n__webpack_require__(241);\n__webpack_require__(242);\n__webpack_require__(243);\n__webpack_require__(117);\n__webpack_require__(119);\n__webpack_require__(120);\n__webpack_require__(244);\n__webpack_require__(245);\n__webpack_require__(246);\n__webpack_require__(247);\n__webpack_require__(248);\n__webpack_require__(249);\n__webpack_require__(250);\n__webpack_require__(251);\n__webpack_require__(252);\n__webpack_require__(253);\n__webpack_require__(254);\n__webpack_require__(255);\n__webpack_require__(256);\n__webpack_require__(257);\n__webpack_require__(258);\n__webpack_require__(259);\n__webpack_require__(260);\n__webpack_require__(261);\n__webpack_require__(262);\n__webpack_require__(263);\n__webpack_require__(264);\n__webpack_require__(265);\n__webpack_require__(266);\n__webpack_require__(267);\n__webpack_require__(268);\n__webpack_require__(269);\n__webpack_require__(270);\n__webpack_require__(271);\n__webpack_require__(272);\n__webpack_require__(273);\n__webpack_require__(274);\n__webpack_require__(275);\n__webpack_require__(276);\n__webpack_require__(277);\n__webpack_require__(278);\n__webpack_require__(279);\n__webpack_require__(280);\n__webpack_require__(281);\n__webpack_require__(282);\n__webpack_require__(283);\n__webpack_require__(284);\n__webpack_require__(285);\n__webpack_require__(286);\n__webpack_require__(287);\n__webpack_require__(288);\n__webpack_require__(289);\n__webpack_require__(290);\n__webpack_require__(291);\n__webpack_require__(292);\n__webpack_require__(293);\n__webpack_require__(294);\n__webpack_require__(295);\n__webpack_require__(296);\n__webpack_require__(297);\n__webpack_require__(298);\n__webpack_require__(299);\n__webpack_require__(300);\n__webpack_require__(301);\n__webpack_require__(302);\n__webpack_require__(303);\n__webpack_require__(304);\n__webpack_require__(305);\n__webpack_require__(306);\n__webpack_require__(307);\n__webpack_require__(308);\n__webpack_require__(309);\n__webpack_require__(310);\n__webpack_require__(311);\n__webpack_require__(312);\n__webpack_require__(313);\n__webpack_require__(314);\n__webpack_require__(315);\n__webpack_require__(316);\n__webpack_require__(317);\n__webpack_require__(318);\n__webpack_require__(319);\n__webpack_require__(320);\n__webpack_require__(321);\n__webpack_require__(322);\n__webpack_require__(323);\n__webpack_require__(324);\n__webpack_require__(325);\n__webpack_require__(326);\n__webpack_require__(327);\n__webpack_require__(328);\nmodule.exports = __webpack_require__(18);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvc2hpbS5qcz82NmY5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLG1CQUFPLENBQUMsR0FBc0I7QUFDOUIsbUJBQU8sQ0FBQyxHQUE2QjtBQUNyQyxtQkFBTyxDQUFDLEdBQXNDO0FBQzlDLG1CQUFPLENBQUMsR0FBd0M7QUFDaEQsbUJBQU8sQ0FBQyxHQUFrRDtBQUMxRCxtQkFBTyxDQUFDLEdBQXVDO0FBQy9DLG1CQUFPLENBQUMsR0FBMkI7QUFDbkMsbUJBQU8sQ0FBQyxHQUE2QztBQUNyRCxtQkFBTyxDQUFDLEdBQTZCO0FBQ3JDLG1CQUFPLENBQUMsR0FBMkI7QUFDbkMsbUJBQU8sQ0FBQyxHQUF5QztBQUNqRCxtQkFBTyxDQUFDLEdBQWdDO0FBQ3hDLG1CQUFPLENBQUMsR0FBZ0M7QUFDeEMsbUJBQU8sQ0FBQyxHQUFvQztBQUM1QyxtQkFBTyxDQUFDLEdBQTZCO0FBQ3JDLG1CQUFPLENBQUMsR0FBeUI7QUFDakMsbUJBQU8sQ0FBQyxHQUF1QztBQUMvQyxtQkFBTyxDQUFDLEdBQWdDO0FBQ3hDLG1CQUFPLENBQUMsR0FBNkI7QUFDckMsbUJBQU8sQ0FBQyxHQUE2QjtBQUNyQyxtQkFBTyxDQUFDLEdBQXFDO0FBQzdDLG1CQUFPLENBQUMsR0FBeUI7QUFDakMsbUJBQU8sQ0FBQyxHQUEyQjtBQUNuQyxtQkFBTyxDQUFDLEdBQWtDO0FBQzFDLG1CQUFPLENBQUMsR0FBK0I7QUFDdkMsbUJBQU8sQ0FBQyxHQUFtQztBQUMzQyxtQkFBTyxDQUFDLEdBQThCO0FBQ3RDLG1CQUFPLENBQUMsR0FBZ0M7QUFDeEMsbUJBQU8sQ0FBQyxHQUFpQztBQUN6QyxtQkFBTyxDQUFDLEdBQTZCO0FBQ3JDLG1CQUFPLENBQUMsR0FBc0M7QUFDOUMsbUJBQU8sQ0FBQyxHQUF1QztBQUMvQyxtQkFBTyxDQUFDLEdBQXVDO0FBQy9DLG1CQUFPLENBQUMsR0FBa0M7QUFDMUMsbUJBQU8sQ0FBQyxH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QkFBTyxDQUFDLEdBQWdDO0FBQ3hDLG1CQUFPLENBQUMsR0FBb0I7QUFDNUIsbUJBQU8sQ0FBQyxHQUEwQjtBQUNsQyxtQkFBTyxDQUFDLEdBQXNCO0FBQzlCLG1CQUFPLENBQUMsR0FBeUI7QUFDakMsbUJBQU8sQ0FBQyxHQUE0QjtBQUNwQyxpQkFBaUIsbUJBQU8sQ0FBQyxFQUFpQiIsImZpbGUiOiIxMzIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJyZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN5bWJvbCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuY3JlYXRlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5kZWZpbmUtcHJvcGVydHknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmRlZmluZS1wcm9wZXJ0aWVzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmdldC1wcm90b3R5cGUtb2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmtleXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmdldC1vd24tcHJvcGVydHktbmFtZXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmZyZWV6ZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3Quc2VhbCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QucHJldmVudC1leHRlbnNpb25zJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5pcy1mcm96ZW4nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmlzLXNlYWxlZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuaXMtZXh0ZW5zaWJsZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuYXNzaWduJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5pcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3Quc2V0LXByb3RvdHlwZS1vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QudG8tc3RyaW5nJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmZ1bmN0aW9uLmJpbmQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuZnVuY3Rpb24ubmFtZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5mdW5jdGlvbi5oYXMtaW5zdGFuY2UnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucGFyc2UtaW50Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnBhcnNlLWZsb2F0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5jb25zdHJ1Y3RvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIudG8tZml4ZWQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLnRvLXByZWNpc2lvbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIuZXBzaWxvbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIuaXMtZmluaXRlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5pcy1pbnRlZ2VyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5pcy1uYW4nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLmlzLXNhZmUtaW50ZWdlcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIubWF4LXNhZmUtaW50ZWdlcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIubWluLXNhZmUtaW50ZWdlcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIucGFyc2UtZmxvYXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLnBhcnNlLWludCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmFjb3NoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguYXNpbmgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5hdGFuaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmNicnQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5jbHozMicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmNvc2gnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5leHBtMScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmZyb3VuZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmh5cG90Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguaW11bCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmxvZzEwJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGgubG9nMXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5sb2cyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguc2lnbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLnNpbmgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC50YW5oJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGgudHJ1bmMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLmZyb20tY29kZS1wb2ludCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcucmF3Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy50cmltJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuY29kZS1wb2ludC1hdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuZW5kcy13aXRoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5pbmNsdWRlcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcucmVwZWF0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5zdGFydHMtd2l0aCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuYW5jaG9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5iaWcnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLmJsaW5rJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5ib2xkJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5maXhlZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuZm9udGNvbG9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5mb250c2l6ZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuaXRhbGljcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcubGluaycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuc21hbGwnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLnN0cmlrZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuc3ViJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5zdXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuZGF0ZS5ub3cnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuZGF0ZS50by1qc29uJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmRhdGUudG8taXNvLXN0cmluZycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5kYXRlLnRvLXN0cmluZycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5kYXRlLnRvLXByaW1pdGl2ZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5pcy1hcnJheScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5mcm9tJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5Lm9mJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmpvaW4nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuc2xpY2UnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuc29ydCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5mb3ItZWFjaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5tYXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuZmlsdGVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LnNvbWUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuZXZlcnknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkucmVkdWNlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LnJlZHVjZS1yaWdodCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5pbmRleC1vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5sYXN0LWluZGV4LW9mJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmNvcHktd2l0aGluJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmZpbGwnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuZmluZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5maW5kLWluZGV4Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LnNwZWNpZXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVnZXhwLmNvbnN0cnVjdG9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZ2V4cC5leGVjJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZ2V4cC50by1zdHJpbmcnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVnZXhwLmZsYWdzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZ2V4cC5tYXRjaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWdleHAucmVwbGFjZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWdleHAuc2VhcmNoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZ2V4cC5zcGxpdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5wcm9taXNlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hcCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zZXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYud2Vhay1tYXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYud2Vhay1zZXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQuYXJyYXktYnVmZmVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLmRhdGEtdmlldycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi50eXBlZC5pbnQ4LWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLnVpbnQ4LWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLnVpbnQ4LWNsYW1wZWQtYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQuaW50MTYtYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQudWludDE2LWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLmludDMyLWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLnVpbnQzMi1hcnJheScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi50eXBlZC5mbG9hdDMyLWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLmZsb2F0NjQtYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5hcHBseScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmNvbnN0cnVjdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmRlZmluZS1wcm9wZXJ0eScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmRlbGV0ZS1wcm9wZXJ0eScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmVudW1lcmF0ZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmdldCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmdldC1wcm90b3R5cGUtb2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5oYXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5pcy1leHRlbnNpYmxlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3Qub3duLWtleXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5wcmV2ZW50LWV4dGVuc2lvbnMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5zZXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5zZXQtcHJvdG90eXBlLW9mJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LmFycmF5LmluY2x1ZGVzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LmFycmF5LmZsYXQtbWFwJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LmFycmF5LmZsYXR0ZW4nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc3RyaW5nLmF0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnN0cmluZy5wYWQtc3RhcnQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc3RyaW5nLnBhZC1lbmQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc3RyaW5nLnRyaW0tbGVmdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zdHJpbmcudHJpbS1yaWdodCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zdHJpbmcubWF0Y2gtYWxsJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnN5bWJvbC5hc3luYy1pdGVyYXRvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zeW1ib2wub2JzZXJ2YWJsZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9ycycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5vYmplY3QudmFsdWVzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC5lbnRyaWVzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC5kZWZpbmUtZ2V0dGVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC5kZWZpbmUtc2V0dGVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC5sb29rdXAtZ2V0dGVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC5sb29rdXAtc2V0dGVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hcC50by1qc29uJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnNldC50by1qc29uJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hcC5vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zZXQub2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcud2Vhay1tYXAub2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcud2Vhay1zZXQub2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWFwLmZyb20nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc2V0LmZyb20nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcud2Vhay1tYXAuZnJvbScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy53ZWFrLXNldC5mcm9tJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lmdsb2JhbCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zeXN0ZW0uZ2xvYmFsJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LmVycm9yLmlzLWVycm9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGguY2xhbXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5kZWctcGVyLXJhZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLmRlZ3JlZXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5mc2NhbGUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5pYWRkaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLmlzdWJoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGguaW11bGgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5yYWQtcGVyLWRlZycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLnJhZGlhbnMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5zY2FsZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLnVtdWxoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGguc2lnbmJpdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5wcm9taXNlLmZpbmFsbHknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucHJvbWlzZS50cnknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5kZWZpbmUtbWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5kZWxldGUtbWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtbWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtbWV0YWRhdGEta2V5cycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5yZWZsZWN0LmdldC1vd24tbWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtb3duLW1ldGFkYXRhLWtleXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5oYXMtbWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5oYXMtb3duLW1ldGFkYXRhJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnJlZmxlY3QubWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuYXNhcCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5vYnNlcnZhYmxlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvd2ViLnRpbWVycycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL3dlYi5pbW1lZGlhdGUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy93ZWIuZG9tLml0ZXJhYmxlJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vbW9kdWxlcy9fY29yZScpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///132\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// ECMAScript 6 symbols shim\nvar global = __webpack_require__(2);\nvar has = __webpack_require__(14);\nvar DESCRIPTORS = __webpack_require__(7);\nvar $export = __webpack_require__(0);\nvar redefine = __webpack_require__(12);\nvar META = __webpack_require__(30).KEY;\nvar $fails = __webpack_require__(3);\nvar shared = __webpack_require__(47);\nvar setToStringTag = __webpack_require__(43);\nvar uid = __webpack_require__(33);\nvar wks = __webpack_require__(5);\nvar wksExt = __webpack_require__(95);\nvar wksDefine = __webpack_require__(67);\nvar enumKeys = __webpack_require__(135);\nvar isArray = __webpack_require__(54);\nvar anObject = __webpack_require__(1);\nvar isObject = __webpack_require__(4);\nvar toObject = __webpack_require__(9);\nvar toIObject = __webpack_require__(15);\nvar toPrimitive = __webpack_require__(23);\nvar createDesc = __webpack_require__(32);\nvar _create = __webpack_require__(36);\nvar gOPNExt = __webpack_require__(98);\nvar $GOPD = __webpack_require__(16);\nvar $GOPS = __webpack_require__(53);\nvar $DP = __webpack_require__(8);\nvar $keys = __webpack_require__(34);\nvar gOPD = $GOPD.f;\nvar dP = $DP.f;\nvar gOPN = gOPNExt.f;\nvar $Symbol = global.Symbol;\nvar $JSON = global.JSON;\nvar _stringify = $JSON && $JSON.stringify;\nvar PROTOTYPE = 'prototype';\nvar HIDDEN = wks('_hidden');\nvar TO_PRIMITIVE = wks('toPrimitive');\nvar isEnum = {}.propertyIsEnumerable;\nvar SymbolRegistry = shared('symbol-registry');\nvar AllSymbols = shared('symbols');\nvar OPSymbols = shared('op-symbols');\nvar ObjectProto = Object[PROTOTYPE];\nvar USE_NATIVE = typeof $Symbol == 'function' && !!$GOPS.f;\nvar QObject = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDesc = DESCRIPTORS && $fails(function () {\n return _create(dP({}, 'a', {\n get: function () { return dP(this, 'a', { value: 7 }).a; }\n })).a != 7;\n}) ? function (it, key, D) {\n var protoDesc = gOPD(ObjectProto, key);\n if (protoDesc) delete ObjectProto[key];\n dP(it, key, D);\n if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc);\n} : dP;\n\nvar wrap = function (tag) {\n var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);\n sym._k = tag;\n return sym;\n};\n\nvar isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n return it instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(it, key, D) {\n if (it === ObjectProto) $defineProperty(OPSymbols, key, D);\n anObject(it);\n key = toPrimitive(key, true);\n anObject(D);\n if (has(AllSymbols, key)) {\n if (!D.enumerable) {\n if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {}));\n it[HIDDEN][key] = true;\n } else {\n if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;\n D = _create(D, { enumerable: createDesc(0, false) });\n } return setSymbolDesc(it, key, D);\n } return dP(it, key, D);\n};\nvar $defineProperties = function defineProperties(it, P) {\n anObject(it);\n var keys = enumKeys(P = toIObject(P));\n var i = 0;\n var l = keys.length;\n var key;\n while (l > i) $defineProperty(it, key = keys[i++], P[key]);\n return it;\n};\nvar $create = function create(it, P) {\n return P === undefined ? _create(it) : $defineProperties(_create(it), P);\n};\nvar $propertyIsEnumerable = function propertyIsEnumerable(key) {\n var E = isEnum.call(this, key = toPrimitive(key, true));\n if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false;\n return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;\n};\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {\n it = toIObject(it);\n key = toPrimitive(key, true);\n if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return;\n var D = gOPD(it, key);\n if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;\n return D;\n};\nvar $getOwnPropertyNames = function getOwnPropertyNames(it) {\n var names = gOPN(toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);\n } return result;\n};\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(it) {\n var IS_OP = it === ObjectProto;\n var names = gOPN(IS_OP ? OPSymbols : toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]);\n } return result;\n};\n\n// 19.4.1.1 Symbol([description])\nif (!USE_NATIVE) {\n $Symbol = function Symbol() {\n if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');\n var tag = uid(arguments.length > 0 ? arguments[0] : undefined);\n var $set = function (value) {\n if (this === ObjectProto) $set.call(OPSymbols, value);\n if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n setSymbolDesc(this, tag, createDesc(1, value));\n };\n if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set });\n return wrap(tag);\n };\n redefine($Symbol[PROTOTYPE], 'toString', function toString() {\n return this._k;\n });\n\n $GOPD.f = $getOwnPropertyDescriptor;\n $DP.f = $defineProperty;\n __webpack_require__(37).f = gOPNExt.f = $getOwnPropertyNames;\n __webpack_require__(49).f = $propertyIsEnumerable;\n $GOPS.f = $getOwnPropertySymbols;\n\n if (DESCRIPTORS && !__webpack_require__(29)) {\n redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);\n }\n\n wksExt.f = function (name) {\n return wrap(wks(name));\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol });\n\nfor (var es6Symbols = (\n // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14\n 'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'\n).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]);\n\nfor (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]);\n\n$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {\n // 19.4.2.1 Symbol.for(key)\n 'for': function (key) {\n return has(SymbolRegistry, key += '')\n ? SymbolRegistry[key]\n : SymbolRegistry[key] = $Symbol(key);\n },\n // 19.4.2.5 Symbol.keyFor(sym)\n keyFor: function keyFor(sym) {\n if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');\n for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key;\n },\n useSetter: function () { setter = true; },\n useSimple: function () { setter = false; }\n});\n\n$export($export.S + $export.F * !USE_NATIVE, 'Object', {\n // 19.1.2.2 Object.create(O [, Properties])\n create: $create,\n // 19.1.2.4 Object.defineProperty(O, P, Attributes)\n defineProperty: $defineProperty,\n // 19.1.2.3 Object.defineProperties(O, Properties)\n defineProperties: $defineProperties,\n // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n // 19.1.2.7 Object.getOwnPropertyNames(O)\n getOwnPropertyNames: $getOwnPropertyNames,\n // 19.1.2.8 Object.getOwnPropertySymbols(O)\n getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// Chrome 38 and 39 `Object.getOwnPropertySymbols` fails on primitives\n// https://bugs.chromium.org/p/v8/issues/detail?id=3443\nvar FAILS_ON_PRIMITIVES = $fails(function () { $GOPS.f(1); });\n\n$export($export.S + $export.F * FAILS_ON_PRIMITIVES, 'Object', {\n getOwnPropertySymbols: function getOwnPropertySymbols(it) {\n return $GOPS.f(toObject(it));\n }\n});\n\n// 24.3.2 JSON.stringify(value [, replacer [, space]])\n$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () {\n var S = $Symbol();\n // MS Edge converts symbol values to JSON as {}\n // WebKit converts symbol values to JSON as null\n // V8 throws on boxed symbols\n return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}';\n})), 'JSON', {\n stringify: function stringify(it) {\n var args = [it];\n var i = 1;\n var replacer, $replacer;\n while (arguments.length > i) args.push(arguments[i++]);\n $replacer = replacer = args[1];\n if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n if (!isArray(replacer)) replacer = function (key, value) {\n if (typeof $replacer == 'function') value = $replacer.call(this, key, value);\n if (!isSymbol(value)) return value;\n };\n args[1] = replacer;\n return _stringify.apply($JSON, args);\n }\n});\n\n// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)\n$Symbol[PROTOTYPE][TO_PRIMITIVE] || __webpack_require__(11)($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n// 19.4.3.5 Symbol.prototype[@@toStringTag]\nsetToStringTag($Symbol, 'Symbol');\n// 20.2.1.9 Math[@@toStringTag]\nsetToStringTag(Math, 'Math', true);\n// 24.3.3 JSON[@@toStringTag]\nsetToStringTag(global.JSON, 'JSON', true);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3ltYm9sLmpzPzhhODEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBLGFBQWEsbUJBQU8sQ0FBQyxDQUFXO0FBQ2hDLFVBQVUsbUJBQU8sQ0FBQyxFQUFRO0FBQzFCLGtCQUFrQixtQkFBTyxDQUFDLENBQWdCO0FBQzFDLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyxFQUFhO0FBQ3BDLFdBQVcsbUJBQU8sQ0FBQyxFQUFTO0FBQzVCLGFBQWEsbUJBQU8sQ0FBQyxDQUFVO0FBQy9CLGFBQWEsbUJBQU8sQ0FBQyxFQUFXO0FBQ2hDLHFCQUFxQixtQkFBTyxDQUFDLEVBQXNCO0FBQ25ELFVBQVUsbUJBQU8sQ0FBQyxFQUFRO0FBQzFCLFVBQVUsbUJBQU8sQ0FBQyxDQUFRO0FBQzFCLGFBQWEsbUJBQU8sQ0FBQyxFQUFZO0FBQ2pDLGdCQUFnQixtQkFBTyxDQUFDLEVBQWU7QUFDdkMsZUFBZSxtQkFBTyxDQUFDLEdBQWM7QUFDckMsY0FBYyxtQkFBTyxDQUFDLEVBQWE7QUFDbkMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2QyxrQkFBa0IsbUJBQU8sQ0FBQyxFQUFpQjtBQUMzQyxpQkFBaUIsbUJBQU8sQ0FBQyxFQUFrQjtBQUMzQyxjQUFjLG1CQUFPLENBQUMsRUFBa0I7QUFDeEMsY0FBYyxtQkFBTyxDQUFDLEVBQW9CO0FBQzFDLFlBQVksbUJBQU8sQ0FBQyxFQUFnQjtBQUNwQyxZQUFZLG1CQUFPLENBQUMsRUFBZ0I7QUFDcEMsVUFBVSxtQkFBTyxDQUFDLENBQWM7QUFDaEMsWUFBWSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxzQkFBc0I7QUFDdEIsc0JBQXNCLHVCQUF1QixXQUFXLElBQUk7QUFDNUQsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyREFBMkQ7QUFDM0Q7QUFDQSxLQUFLO0FBQ0w7QUFDQSxzQkFBc0IsbUNBQW1DO0FBQ3pELEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdFQUFnRSxnQ0FBZ0M7QUFDaEc7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxFQUFFLG1CQUFPLENBQUMsRUFBZ0I7QUFDMUIsRUFBRSxtQkFBTyxDQUFDLEVBQWU7QUFDekI7O0FBRUEsc0JBQXNCLG1CQUFPLENBQUMsRUFBWTtBQUMxQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDBEQUEwRCxrQkFBa0I7O0FBRTVFO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQix1QkFBdUI7O0FBRTNDLG9EQUFvRCw2QkFBNkI7O0FBRWpGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCwwQkFBMEIsZUFBZSxFQUFFO0FBQzNDLDBCQUEwQixnQkFBZ0I7QUFDMUMsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBLDhDQUE4QyxZQUFZLEVBQUU7O0FBRTVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvREFBb0QsT0FBTyxRQUFRLGlDQUFpQztBQUNwRyxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0VBQXdFO0FBQ3hFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBLG9DQUFvQyxtQkFBTyxDQUFDLEVBQVM7QUFDckQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjEzMy5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIEVDTUFTY3JpcHQgNiBzeW1ib2xzIHNoaW1cbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUnKTtcbnZhciBNRVRBID0gcmVxdWlyZSgnLi9fbWV0YScpLktFWTtcbnZhciAkZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4vX3NoYXJlZCcpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuL191aWQnKTtcbnZhciB3a3MgPSByZXF1aXJlKCcuL193a3MnKTtcbnZhciB3a3NFeHQgPSByZXF1aXJlKCcuL193a3MtZXh0Jyk7XG52YXIgd2tzRGVmaW5lID0gcmVxdWlyZSgnLi9fd2tzLWRlZmluZScpO1xudmFyIGVudW1LZXlzID0gcmVxdWlyZSgnLi9fZW51bS1rZXlzJyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4vX2lzLWFycmF5Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG52YXIgY3JlYXRlRGVzYyA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKTtcbnZhciBfY3JlYXRlID0gcmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpO1xudmFyIGdPUE5FeHQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wbi1leHQnKTtcbnZhciAkR09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJyk7XG52YXIgJEdPUFMgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wcycpO1xudmFyICREUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xudmFyICRrZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcbnZhciBnT1BEID0gJEdPUEQuZjtcbnZhciBkUCA9ICREUC5mO1xudmFyIGdPUE4gPSBnT1BORXh0LmY7XG52YXIgJFN5bWJvbCA9IGdsb2JhbC5TeW1ib2w7XG52YXIgJEpTT04gPSBnbG9iYWwuSlNPTjtcbnZhciBfc3RyaW5naWZ5ID0gJEpTT04gJiYgJEpTT04uc3RyaW5naWZ5O1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xudmFyIEhJRERFTiA9IHdrcygnX2hpZGRlbicpO1xudmFyIFRPX1BSSU1JVElWRSA9IHdrcygndG9QcmltaXRpdmUnKTtcbnZhciBpc0VudW0gPSB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbnZhciBTeW1ib2xSZWdpc3RyeSA9IHNoYXJlZCgnc3ltYm9sLXJlZ2lzdHJ5Jyk7XG52YXIgQWxsU3ltYm9scyA9IHNoYXJlZCgnc3ltYm9scycpO1xudmFyIE9QU3ltYm9scyA9IHNoYXJlZCgnb3Atc3ltYm9scycpO1xudmFyIE9iamVjdFByb3RvID0gT2JqZWN0W1BST1RPVFlQRV07XG52YXIgVVNFX05BVElWRSA9IHR5cGVvZiAkU3ltYm9sID09ICdmdW5jdGlvbicgJiYgISEkR09QUy5mO1xudmFyIFFPYmplY3QgPSBnbG9iYWwuUU9iamVjdDtcbi8vIERvbid0IHVzZSBzZXR0ZXJzIGluIFF0IFNjcmlwdCwgaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzE3M1xudmFyIHNldHRlciA9ICFRT2JqZWN0IHx8ICFRT2JqZWN0W1BST1RPVFlQRV0gfHwgIVFPYmplY3RbUFJPVE9UWVBFXS5maW5kQ2hpbGQ7XG5cbi8vIGZhbGxiYWNrIGZvciBvbGQgQW5kcm9pZCwgaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTY4N1xudmFyIHNldFN5bWJvbERlc2MgPSBERVNDUklQVE9SUyAmJiAkZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gX2NyZWF0ZShkUCh7fSwgJ2EnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBkUCh0aGlzLCAnYScsIHsgdmFsdWU6IDcgfSkuYTsgfVxuICB9KSkuYSAhPSA3O1xufSkgPyBmdW5jdGlvbiAoaXQsIGtleSwgRCkge1xuICB2YXIgcHJvdG9EZXNjID0gZ09QRChPYmplY3RQcm90bywga2V5KTtcbiAgaWYgKHByb3RvRGVzYykgZGVsZXRlIE9iamVjdFByb3RvW2tleV07XG4gIGRQKGl0LCBrZXksIEQpO1xuICBpZiAocHJvdG9EZXNjICYmIGl0ICE9PSBPYmplY3RQcm90bykgZFAoT2JqZWN0UHJvdG8sIGtleSwgcHJvdG9EZXNjKTtcbn0gOiBkUDtcblxudmFyIHdyYXAgPSBmdW5jdGlvbiAodGFnKSB7XG4gIHZhciBzeW0gPSBBbGxTeW1ib2xzW3RhZ10gPSBfY3JlYXRlKCRTeW1ib2xbUFJPVE9UWVBFXSk7XG4gIHN5bS5fayA9IHRhZztcbiAgcmV0dXJuIHN5bTtcbn07XG5cbnZhciBpc1N5bWJvbCA9IFVTRV9OQVRJVkUgJiYgdHlwZW9mICRTeW1ib2wuaXRlcmF0b3IgPT0gJ3N5bWJvbCcgPyBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnc3ltYm9sJztcbn0gOiBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0IGluc3RhbmNlb2YgJFN5bWJvbDtcbn07XG5cbnZhciAkZGVmaW5lUHJvcGVydHkgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShpdCwga2V5LCBEKSB7XG4gIGlmIChpdCA9PT0gT2JqZWN0UHJvdG8pICRkZWZpbmVQcm9wZXJ0eShPUFN5bWJvbHMsIGtleSwgRCk7XG4gIGFuT2JqZWN0KGl0KTtcbiAga2V5ID0gdG9QcmltaXRpdmUoa2V5LCB0cnVlKTtcbiAgYW5PYmplY3QoRCk7XG4gIGlmIChoYXMoQWxsU3ltYm9scywga2V5KSkge1xuICAgIGlmICghRC5lbnVtZXJhYmxlKSB7XG4gICAgICBpZiAoIWhhcyhpdCwgSElEREVOKSkgZFAoaXQsIEhJRERFTiwgY3JlYXRlRGVzYygxLCB7fSkpO1xuICAgICAgaXRbSElEREVOXVtrZXldID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGhhcyhpdCwgSElEREVOKSAmJiBpdFtISURERU5dW2tleV0pIGl0W0hJRERFTl1ba2V5XSA9IGZhbHNlO1xuICAgICAgRCA9IF9jcmVhdGUoRCwgeyBlbnVtZXJhYmxlOiBjcmVhdGVEZXNjKDAsIGZhbHNlKSB9KTtcbiAgICB9IHJldHVybiBzZXRTeW1ib2xEZXNjKGl0LCBrZXksIEQpO1xuICB9IHJldHVybiBkUChpdCwga2V5LCBEKTtcbn07XG52YXIgJGRlZmluZVByb3BlcnRpZXMgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKGl0LCBQKSB7XG4gIGFuT2JqZWN0KGl0KTtcbiAgdmFyIGtleXMgPSBlbnVtS2V5cyhQID0gdG9JT2JqZWN0KFApKTtcbiAgdmFyIGkgPSAwO1xuICB2YXIgbCA9IGtleXMubGVuZ3RoO1xuICB2YXIga2V5O1xuICB3aGlsZSAobCA+IGkpICRkZWZpbmVQcm9wZXJ0eShpdCwga2V5ID0ga2V5c1tpKytdLCBQW2tleV0pO1xuICByZXR1cm4gaXQ7XG59O1xudmFyICRjcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUoaXQsIFApIHtcbiAgcmV0dXJuIFAgPT09IHVuZGVmaW5lZCA/IF9jcmVhdGUoaXQpIDogJGRlZmluZVByb3BlcnRpZXMoX2NyZWF0ZShpdCksIFApO1xufTtcbnZhciAkcHJvcGVydHlJc0VudW1lcmFibGUgPSBmdW5jdGlvbiBwcm9wZXJ0eUlzRW51bWVyYWJsZShrZXkpIHtcbiAgdmFyIEUgPSBpc0VudW0uY2FsbCh0aGlzLCBrZXkgPSB0b1ByaW1pdGl2ZShrZXksIHRydWUpKTtcbiAgaWYgKHRoaXMgPT09IE9iamVjdFByb3RvICYmIGhhcyhBbGxTeW1ib2xzLCBrZXkpICYmICFoYXMoT1BTeW1ib2xzLCBrZXkpKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiBFIHx8ICFoYXModGhpcywga2V5KSB8fCAhaGFzKEFsbFN5bWJvbHMsIGtleSkgfHwgaGFzKHRoaXMsIEhJRERFTikgJiYgdGhpc1tISURERU5dW2tleV0gPyBFIDogdHJ1ZTtcbn07XG52YXIgJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihpdCwga2V5KSB7XG4gIGl0ID0gdG9JT2JqZWN0KGl0KTtcbiAga2V5ID0gdG9QcmltaXRpdmUoa2V5LCB0cnVlKTtcbiAgaWYgKGl0ID09PSBPYmplY3RQcm90byAmJiBoYXMoQWxsU3ltYm9scywga2V5KSAmJiAhaGFzKE9QU3ltYm9scywga2V5KSkgcmV0dXJuO1xuICB2YXIgRCA9IGdPUEQoaXQsIGtleSk7XG4gIGlmIChEICYmIGhhcyhBbGxTeW1ib2xzLCBrZXkpICYmICEoaGFzKGl0LCBISURERU4pICYmIGl0W0hJRERFTl1ba2V5XSkpIEQuZW51bWVyYWJsZSA9IHRydWU7XG4gIHJldHVybiBEO1xufTtcbnZhciAkZ2V0T3duUHJvcGVydHlOYW1lcyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoaXQpIHtcbiAgdmFyIG5hbWVzID0gZ09QTih0b0lPYmplY3QoaXQpKTtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIgaSA9IDA7XG4gIHZhciBrZXk7XG4gIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSB7XG4gICAgaWYgKCFoYXMoQWxsU3ltYm9scywga2V5ID0gbmFtZXNbaSsrXSkgJiYga2V5ICE9IEhJRERFTiAmJiBrZXkgIT0gTUVUQSkgcmVzdWx0LnB1c2goa2V5KTtcbiAgfSByZXR1cm4gcmVzdWx0O1xufTtcbnZhciAkZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlTeW1ib2xzKGl0KSB7XG4gIHZhciBJU19PUCA9IGl0ID09PSBPYmplY3RQcm90bztcbiAgdmFyIG5hbWVzID0gZ09QTihJU19PUCA/IE9QU3ltYm9scyA6IHRvSU9iamVjdChpdCkpO1xuICB2YXIgcmVzdWx0ID0gW107XG4gIHZhciBpID0gMDtcbiAgdmFyIGtleTtcbiAgd2hpbGUgKG5hbWVzLmxlbmd0aCA+IGkpIHtcbiAgICBpZiAoaGFzKEFsbFN5bWJvbHMsIGtleSA9IG5hbWVzW2krK10pICYmIChJU19PUCA/IGhhcyhPYmplY3RQcm90bywga2V5KSA6IHRydWUpKSByZXN1bHQucHVzaChBbGxTeW1ib2xzW2tleV0pO1xuICB9IHJldHVybiByZXN1bHQ7XG59O1xuXG4vLyAxOS40LjEuMSBTeW1ib2woW2Rlc2NyaXB0aW9uXSlcbmlmICghVVNFX05BVElWRSkge1xuICAkU3ltYm9sID0gZnVuY3Rpb24gU3ltYm9sKCkge1xuICAgIGlmICh0aGlzIGluc3RhbmNlb2YgJFN5bWJvbCkgdGhyb3cgVHlwZUVycm9yKCdTeW1ib2wgaXMgbm90IGEgY29uc3RydWN0b3IhJyk7XG4gICAgdmFyIHRhZyA9IHVpZChhcmd1bWVudHMubGVuZ3RoID4gMCA/IGFyZ3VtZW50c1swXSA6IHVuZGVmaW5lZCk7XG4gICAgdmFyICRzZXQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIGlmICh0aGlzID09PSBPYmplY3RQcm90bykgJHNldC5jYWxsKE9QU3ltYm9scywgdmFsdWUpO1xuICAgICAgaWYgKGhhcyh0aGlzLCBISURERU4pICYmIGhhcyh0aGlzW0hJRERFTl0sIHRhZykpIHRoaXNbSElEREVOXVt0YWddID0gZmFsc2U7XG4gICAgICBzZXRTeW1ib2xEZXNjKHRoaXMsIHRhZywgY3JlYXRlRGVzYygxLCB2YWx1ZSkpO1xuICAgIH07XG4gICAgaWYgKERFU0NSSVBUT1JTICYmIHNldHRlcikgc2V0U3ltYm9sRGVzYyhPYmplY3RQcm90bywgdGFnLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgc2V0OiAkc2V0IH0pO1xuICAgIHJldHVybiB3cmFwKHRhZyk7XG4gIH07XG4gIHJlZGVmaW5lKCRTeW1ib2xbUFJPVE9UWVBFXSwgJ3RvU3RyaW5nJywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2s7XG4gIH0pO1xuXG4gICRHT1BELmYgPSAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuICAkRFAuZiA9ICRkZWZpbmVQcm9wZXJ0eTtcbiAgcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4nKS5mID0gZ09QTkV4dC5mID0gJGdldE93blByb3BlcnR5TmFtZXM7XG4gIHJlcXVpcmUoJy4vX29iamVjdC1waWUnKS5mID0gJHByb3BlcnR5SXNFbnVtZXJhYmxlO1xuICAkR09QUy5mID0gJGdldE93blByb3BlcnR5U3ltYm9scztcblxuICBpZiAoREVTQ1JJUFRPUlMgJiYgIXJlcXVpcmUoJy4vX2xpYnJhcnknKSkge1xuICAgIHJlZGVmaW5lKE9iamVjdFByb3RvLCAncHJvcGVydHlJc0VudW1lcmFibGUnLCAkcHJvcGVydHlJc0VudW1lcmFibGUsIHRydWUpO1xuICB9XG5cbiAgd2tzRXh0LmYgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHJldHVybiB3cmFwKHdrcyhuYW1lKSk7XG4gIH07XG59XG5cbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5XICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsIHsgU3ltYm9sOiAkU3ltYm9sIH0pO1xuXG5mb3IgKHZhciBlczZTeW1ib2xzID0gKFxuICAvLyAxOS40LjIuMiwgMTkuNC4yLjMsIDE5LjQuMi40LCAxOS40LjIuNiwgMTkuNC4yLjgsIDE5LjQuMi45LCAxOS40LjIuMTAsIDE5LjQuMi4xMSwgMTkuNC4yLjEyLCAxOS40LjIuMTMsIDE5LjQuMi4xNFxuICAnaGFzSW5zdGFuY2UsaXNDb25jYXRTcHJlYWRhYmxlLGl0ZXJhdG9yLG1hdGNoLHJlcGxhY2Usc2VhcmNoLHNwZWNpZXMsc3BsaXQsdG9QcmltaXRpdmUsdG9TdHJpbmdUYWcsdW5zY29wYWJsZXMnXG4pLnNwbGl0KCcsJyksIGogPSAwOyBlczZTeW1ib2xzLmxlbmd0aCA+IGo7KXdrcyhlczZTeW1ib2xzW2orK10pO1xuXG5mb3IgKHZhciB3ZWxsS25vd25TeW1ib2xzID0gJGtleXMod2tzLnN0b3JlKSwgayA9IDA7IHdlbGxLbm93blN5bWJvbHMubGVuZ3RoID4gazspIHdrc0RlZmluZSh3ZWxsS25vd25TeW1ib2xzW2srK10pO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFVU0VfTkFUSVZFLCAnU3ltYm9sJywge1xuICAvLyAxOS40LjIuMSBTeW1ib2wuZm9yKGtleSlcbiAgJ2Zvcic6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICByZXR1cm4gaGFzKFN5bWJvbFJlZ2lzdHJ5LCBrZXkgKz0gJycpXG4gICAgICA/IFN5bWJvbFJlZ2lzdHJ5W2tleV1cbiAgICAgIDogU3ltYm9sUmVnaXN0cnlba2V5XSA9ICRTeW1ib2woa2V5KTtcbiAgfSxcbiAgLy8gMTkuNC4yLjUgU3ltYm9sLmtleUZvcihzeW0pXG4gIGtleUZvcjogZnVuY3Rpb24ga2V5Rm9yKHN5bSkge1xuICAgIGlmICghaXNTeW1ib2woc3ltKSkgdGhyb3cgVHlwZUVycm9yKHN5bSArICcgaXMgbm90IGEgc3ltYm9sIScpO1xuICAgIGZvciAodmFyIGtleSBpbiBTeW1ib2xSZWdpc3RyeSkgaWYgKFN5bWJvbFJlZ2lzdHJ5W2tleV0gPT09IHN5bSkgcmV0dXJuIGtleTtcbiAgfSxcbiAgdXNlU2V0dGVyOiBmdW5jdGlvbiAoKSB7IHNldHRlciA9IHRydWU7IH0sXG4gIHVzZVNpbXBsZTogZnVuY3Rpb24gKCkgeyBzZXR0ZXIgPSBmYWxzZTsgfVxufSk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsICdPYmplY3QnLCB7XG4gIC8vIDE5LjEuMi4yIE9iamVjdC5jcmVhdGUoTyBbLCBQcm9wZXJ0aWVzXSlcbiAgY3JlYXRlOiAkY3JlYXRlLFxuICAvLyAxOS4xLjIuNCBPYmplY3QuZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcylcbiAgZGVmaW5lUHJvcGVydHk6ICRkZWZpbmVQcm9wZXJ0eSxcbiAgLy8gMTkuMS4yLjMgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTywgUHJvcGVydGllcylcbiAgZGVmaW5lUHJvcGVydGllczogJGRlZmluZVByb3BlcnRpZXMsXG4gIC8vIDE5LjEuMi42IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUClcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLFxuICAvLyAxOS4xLjIuNyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhPKVxuICBnZXRPd25Qcm9wZXJ0eU5hbWVzOiAkZ2V0T3duUHJvcGVydHlOYW1lcyxcbiAgLy8gMTkuMS4yLjggT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhPKVxuICBnZXRPd25Qcm9wZXJ0eVN5bWJvbHM6ICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHNcbn0pO1xuXG4vLyBDaHJvbWUgMzggYW5kIDM5IGBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzYCBmYWlscyBvbiBwcmltaXRpdmVzXG4vLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zNDQzXG52YXIgRkFJTFNfT05fUFJJTUlUSVZFUyA9ICRmYWlscyhmdW5jdGlvbiAoKSB7ICRHT1BTLmYoMSk7IH0pO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIEZBSUxTX09OX1BSSU1JVElWRVMsICdPYmplY3QnLCB7XG4gIGdldE93blByb3BlcnR5U3ltYm9sczogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlTeW1ib2xzKGl0KSB7XG4gICAgcmV0dXJuICRHT1BTLmYodG9PYmplY3QoaXQpKTtcbiAgfVxufSk7XG5cbi8vIDI0LjMuMiBKU09OLnN0cmluZ2lmeSh2YWx1ZSBbLCByZXBsYWNlciBbLCBzcGFjZV1dKVxuJEpTT04gJiYgJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAoIVVTRV9OQVRJVkUgfHwgJGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIFMgPSAkU3ltYm9sKCk7XG4gIC8vIE1TIEVkZ2UgY29udmVydHMgc3ltYm9sIHZhbHVlcyB0byBKU09OIGFzIHt9XG4gIC8vIFdlYktpdCBjb252ZXJ0cyBzeW1ib2wgdmFsdWVzIHRvIEpTT04gYXMgbnVsbFxuICAvLyBWOCB0aHJvd3Mgb24gYm94ZWQgc3ltYm9sc1xuICByZXR1cm4gX3N0cmluZ2lmeShbU10pICE9ICdbbnVsbF0nIHx8IF9zdHJpbmdpZnkoeyBhOiBTIH0pICE9ICd7fScgfHwgX3N0cmluZ2lmeShPYmplY3QoUykpICE9ICd7fSc7XG59KSksICdKU09OJywge1xuICBzdHJpbmdpZnk6IGZ1bmN0aW9uIHN0cmluZ2lmeShpdCkge1xuICAgIHZhciBhcmdzID0gW2l0XTtcbiAgICB2YXIgaSA9IDE7XG4gICAgdmFyIHJlcGxhY2VyLCAkcmVwbGFjZXI7XG4gICAgd2hpbGUgKGFyZ3VtZW50cy5sZW5ndGggPiBpKSBhcmdzLnB1c2goYXJndW1lbnRzW2krK10pO1xuICAgICRyZXBsYWNlciA9IHJlcGxhY2VyID0gYXJnc1sxXTtcbiAgICBpZiAoIWlzT2JqZWN0KHJlcGxhY2VyKSAmJiBpdCA9PT0gdW5kZWZpbmVkIHx8IGlzU3ltYm9sKGl0KSkgcmV0dXJuOyAvLyBJRTggcmV0dXJucyBzdHJpbmcgb24gdW5kZWZpbmVkXG4gICAgaWYgKCFpc0FycmF5KHJlcGxhY2VyKSkgcmVwbGFjZXIgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgICAgaWYgKHR5cGVvZiAkcmVwbGFjZXIgPT0gJ2Z1bmN0aW9uJykgdmFsdWUgPSAkcmVwbGFjZXIuY2FsbCh0aGlzLCBrZXksIHZhbHVlKTtcbiAgICAgIGlmICghaXNTeW1ib2wodmFsdWUpKSByZXR1cm4gdmFsdWU7XG4gICAgfTtcbiAgICBhcmdzWzFdID0gcmVwbGFjZXI7XG4gICAgcmV0dXJuIF9zdHJpbmdpZnkuYXBwbHkoJEpTT04sIGFyZ3MpO1xuICB9XG59KTtcblxuLy8gMTkuNC4zLjQgU3ltYm9sLnByb3RvdHlwZVtAQHRvUHJpbWl0aXZlXShoaW50KVxuJFN5bWJvbFtQUk9UT1RZUEVdW1RPX1BSSU1JVElWRV0gfHwgcmVxdWlyZSgnLi9faGlkZScpKCRTeW1ib2xbUFJPVE9UWVBFXSwgVE9fUFJJTUlUSVZFLCAkU3ltYm9sW1BST1RPVFlQRV0udmFsdWVPZik7XG4vLyAxOS40LjMuNSBTeW1ib2wucHJvdG90eXBlW0BAdG9TdHJpbmdUYWddXG5zZXRUb1N0cmluZ1RhZygkU3ltYm9sLCAnU3ltYm9sJyk7XG4vLyAyMC4yLjEuOSBNYXRoW0BAdG9TdHJpbmdUYWddXG5zZXRUb1N0cmluZ1RhZyhNYXRoLCAnTWF0aCcsIHRydWUpO1xuLy8gMjQuMy4zIEpTT05bQEB0b1N0cmluZ1RhZ11cbnNldFRvU3RyaW5nVGFnKGdsb2JhbC5KU09OLCAnSlNPTicsIHRydWUpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///133\n")},function(module,exports,__webpack_require__){eval("module.exports = __webpack_require__(47)('native-function-to-string', Function.toString);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZnVuY3Rpb24tdG8tc3RyaW5nLmpzP2ZhNWIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsaUJBQWlCLG1CQUFPLENBQUMsRUFBVyIsImZpbGUiOiIxMzQuanMiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX3NoYXJlZCcpKCduYXRpdmUtZnVuY3Rpb24tdG8tc3RyaW5nJywgRnVuY3Rpb24udG9TdHJpbmcpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///134\n")},function(module,exports,__webpack_require__){eval("// all enumerable object keys, includes symbols\nvar getKeys = __webpack_require__(34);\nvar gOPS = __webpack_require__(53);\nvar pIE = __webpack_require__(49);\nmodule.exports = function (it) {\n var result = getKeys(it);\n var getSymbols = gOPS.f;\n if (getSymbols) {\n var symbols = getSymbols(it);\n var isEnum = pIE.f;\n var i = 0;\n var key;\n while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);\n } return result;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZW51bS1rZXlzLmpzP2Q0YzAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsRUFBZ0I7QUFDdEMsV0FBVyxtQkFBTyxDQUFDLEVBQWdCO0FBQ25DLFVBQVUsbUJBQU8sQ0FBQyxFQUFlO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCIsImZpbGUiOiIxMzUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBhbGwgZW51bWVyYWJsZSBvYmplY3Qga2V5cywgaW5jbHVkZXMgc3ltYm9sc1xudmFyIGdldEtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xudmFyIGdPUFMgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wcycpO1xudmFyIHBJRSA9IHJlcXVpcmUoJy4vX29iamVjdC1waWUnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciByZXN1bHQgPSBnZXRLZXlzKGl0KTtcbiAgdmFyIGdldFN5bWJvbHMgPSBnT1BTLmY7XG4gIGlmIChnZXRTeW1ib2xzKSB7XG4gICAgdmFyIHN5bWJvbHMgPSBnZXRTeW1ib2xzKGl0KTtcbiAgICB2YXIgaXNFbnVtID0gcElFLmY7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBrZXk7XG4gICAgd2hpbGUgKHN5bWJvbHMubGVuZ3RoID4gaSkgaWYgKGlzRW51bS5jYWxsKGl0LCBrZXkgPSBzeW1ib2xzW2krK10pKSByZXN1bHQucHVzaChrZXkpO1xuICB9IHJldHVybiByZXN1bHQ7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///135\n")},function(module,exports,__webpack_require__){eval("var $export = __webpack_require__(0);\n// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\n$export($export.S, 'Object', { create: __webpack_require__(36) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmNyZWF0ZS5qcz84NDc4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDO0FBQ0EsOEJBQThCLFNBQVMsbUJBQU8sQ0FBQyxFQUFrQixHQUFHIiwiZmlsZSI6IjEzNi5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG4vLyAxOS4xLjIuMiAvIDE1LjIuMy41IE9iamVjdC5jcmVhdGUoTyBbLCBQcm9wZXJ0aWVzXSlcbiRleHBvcnQoJGV4cG9ydC5TLCAnT2JqZWN0JywgeyBjcmVhdGU6IHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKSB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///136\n")},function(module,exports,__webpack_require__){eval("var $export = __webpack_require__(0);\n// 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes)\n$export($export.S + $export.F * !__webpack_require__(7), 'Object', { defineProperty: __webpack_require__(8).f });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmRlZmluZS1wcm9wZXJ0eS5qcz8xYzAxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDO0FBQ0EsaUNBQWlDLG1CQUFPLENBQUMsQ0FBZ0IsY0FBYyxpQkFBaUIsbUJBQU8sQ0FBQyxDQUFjLEtBQUsiLCJmaWxlIjoiMTM3LmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbi8vIDE5LjEuMi40IC8gMTUuMi4zLjYgT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpLCAnT2JqZWN0JywgeyBkZWZpbmVQcm9wZXJ0eTogcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZiB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///137\n")},function(module,exports,__webpack_require__){eval("var $export = __webpack_require__(0);\n// 19.1.2.3 / 15.2.3.7 Object.defineProperties(O, Properties)\n$export($export.S + $export.F * !__webpack_require__(7), 'Object', { defineProperties: __webpack_require__(97) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmRlZmluZS1wcm9wZXJ0aWVzLmpzPzU4YjIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakM7QUFDQSxpQ0FBaUMsbUJBQU8sQ0FBQyxDQUFnQixjQUFjLG1CQUFtQixtQkFBTyxDQUFDLEVBQWUsR0FBRyIsImZpbGUiOiIxMzguanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuLy8gMTkuMS4yLjMgLyAxNS4yLjMuNyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhPLCBQcm9wZXJ0aWVzKVxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSwgJ09iamVjdCcsIHsgZGVmaW5lUHJvcGVydGllczogcmVxdWlyZSgnLi9fb2JqZWN0LWRwcycpIH0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///138\n")},function(module,exports,__webpack_require__){eval("// 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\nvar toIObject = __webpack_require__(15);\nvar $getOwnPropertyDescriptor = __webpack_require__(16).f;\n\n__webpack_require__(25)('getOwnPropertyDescriptor', function () {\n return function getOwnPropertyDescriptor(it, key) {\n return $getOwnPropertyDescriptor(toIObject(it), key);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvci5qcz85OTg2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2QyxnQ0FBZ0MsbUJBQU8sQ0FBQyxFQUFnQjs7QUFFeEQsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTM5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMTkuMS4yLjYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKVxudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKS5mO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2dldE93blByb3BlcnR5RGVzY3JpcHRvcicsIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihpdCwga2V5KSB7XG4gICAgcmV0dXJuICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodG9JT2JqZWN0KGl0KSwga2V5KTtcbiAgfTtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///139\n")},function(module,exports,__webpack_require__){eval("// 19.1.2.9 Object.getPrototypeOf(O)\nvar toObject = __webpack_require__(9);\nvar $getPrototypeOf = __webpack_require__(17);\n\n__webpack_require__(25)('getPrototypeOf', function () {\n return function getPrototypeOf(it) {\n return $getPrototypeOf(toObject(it));\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmdldC1wcm90b3R5cGUtb2YuanM/ZTRmNyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLHNCQUFzQixtQkFBTyxDQUFDLEVBQWU7O0FBRTdDLG1CQUFPLENBQUMsRUFBZTtBQUN2QjtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjE0MC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDE5LjEuMi45IE9iamVjdC5nZXRQcm90b3R5cGVPZihPKVxudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgJGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2dldFByb3RvdHlwZU9mJywgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gZnVuY3Rpb24gZ2V0UHJvdG90eXBlT2YoaXQpIHtcbiAgICByZXR1cm4gJGdldFByb3RvdHlwZU9mKHRvT2JqZWN0KGl0KSk7XG4gIH07XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///140\n")},function(module,exports,__webpack_require__){eval("// 19.1.2.14 Object.keys(O)\nvar toObject = __webpack_require__(9);\nvar $keys = __webpack_require__(34);\n\n__webpack_require__(25)('keys', function () {\n return function keys(it) {\n return $keys(toObject(it));\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmtleXMuanM/NDU2ZCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLFlBQVksbUJBQU8sQ0FBQyxFQUFnQjs7QUFFcEMsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTQxLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMTkuMS4yLjE0IE9iamVjdC5rZXlzKE8pXG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciAka2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgna2V5cycsIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGtleXMoaXQpIHtcbiAgICByZXR1cm4gJGtleXModG9PYmplY3QoaXQpKTtcbiAgfTtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///141\n")},function(module,exports,__webpack_require__){eval("// 19.1.2.7 Object.getOwnPropertyNames(O)\n__webpack_require__(25)('getOwnPropertyNames', function () {\n return __webpack_require__(98).f;\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmdldC1vd24tcHJvcGVydHktbmFtZXMuanM/MjVkYiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLG1CQUFPLENBQUMsRUFBZTtBQUN2QixTQUFTLG1CQUFPLENBQUMsRUFBb0I7QUFDckMsQ0FBQyIsImZpbGUiOiIxNDIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAxOS4xLjIuNyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhPKVxucmVxdWlyZSgnLi9fb2JqZWN0LXNhcCcpKCdnZXRPd25Qcm9wZXJ0eU5hbWVzJywgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4tZXh0JykuZjtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///142\n")},function(module,exports,__webpack_require__){eval("// 19.1.2.5 Object.freeze(O)\nvar isObject = __webpack_require__(4);\nvar meta = __webpack_require__(30).onFreeze;\n\n__webpack_require__(25)('freeze', function ($freeze) {\n return function freeze(it) {\n return $freeze && isObject(it) ? $freeze(meta(it)) : it;\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmZyZWV6ZS5qcz8wZDZkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsV0FBVyxtQkFBTyxDQUFDLEVBQVM7O0FBRTVCLG1CQUFPLENBQUMsRUFBZTtBQUN2QjtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjE0My5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDE5LjEuMi41IE9iamVjdC5mcmVlemUoTylcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIG1ldGEgPSByZXF1aXJlKCcuL19tZXRhJykub25GcmVlemU7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgnZnJlZXplJywgZnVuY3Rpb24gKCRmcmVlemUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGZyZWV6ZShpdCkge1xuICAgIHJldHVybiAkZnJlZXplICYmIGlzT2JqZWN0KGl0KSA/ICRmcmVlemUobWV0YShpdCkpIDogaXQ7XG4gIH07XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///143\n")},function(module,exports,__webpack_require__){eval("// 19.1.2.17 Object.seal(O)\nvar isObject = __webpack_require__(4);\nvar meta = __webpack_require__(30).onFreeze;\n\n__webpack_require__(25)('seal', function ($seal) {\n return function seal(it) {\n return $seal && isObject(it) ? $seal(meta(it)) : it;\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LnNlYWwuanM/Y2Y2YSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLFdBQVcsbUJBQU8sQ0FBQyxFQUFTOztBQUU1QixtQkFBTyxDQUFDLEVBQWU7QUFDdkI7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIxNDQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAxOS4xLjIuMTcgT2JqZWN0LnNlYWwoTylcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIG1ldGEgPSByZXF1aXJlKCcuL19tZXRhJykub25GcmVlemU7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgnc2VhbCcsIGZ1bmN0aW9uICgkc2VhbCkge1xuICByZXR1cm4gZnVuY3Rpb24gc2VhbChpdCkge1xuICAgIHJldHVybiAkc2VhbCAmJiBpc09iamVjdChpdCkgPyAkc2VhbChtZXRhKGl0KSkgOiBpdDtcbiAgfTtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///144\n")},function(module,exports,__webpack_require__){eval("// 19.1.2.15 Object.preventExtensions(O)\nvar isObject = __webpack_require__(4);\nvar meta = __webpack_require__(30).onFreeze;\n\n__webpack_require__(25)('preventExtensions', function ($preventExtensions) {\n return function preventExtensions(it) {\n return $preventExtensions && isObject(it) ? $preventExtensions(meta(it)) : it;\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LnByZXZlbnQtZXh0ZW5zaW9ucy5qcz85YWVhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsV0FBVyxtQkFBTyxDQUFDLEVBQVM7O0FBRTVCLG1CQUFPLENBQUMsRUFBZTtBQUN2QjtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjE0NS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDE5LjEuMi4xNSBPYmplY3QucHJldmVudEV4dGVuc2lvbnMoTylcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIG1ldGEgPSByZXF1aXJlKCcuL19tZXRhJykub25GcmVlemU7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgncHJldmVudEV4dGVuc2lvbnMnLCBmdW5jdGlvbiAoJHByZXZlbnRFeHRlbnNpb25zKSB7XG4gIHJldHVybiBmdW5jdGlvbiBwcmV2ZW50RXh0ZW5zaW9ucyhpdCkge1xuICAgIHJldHVybiAkcHJldmVudEV4dGVuc2lvbnMgJiYgaXNPYmplY3QoaXQpID8gJHByZXZlbnRFeHRlbnNpb25zKG1ldGEoaXQpKSA6IGl0O1xuICB9O1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///145\n")},function(module,exports,__webpack_require__){eval("// 19.1.2.12 Object.isFrozen(O)\nvar isObject = __webpack_require__(4);\n\n__webpack_require__(25)('isFrozen', function ($isFrozen) {\n return function isFrozen(it) {\n return isObject(it) ? $isFrozen ? $isFrozen(it) : false : true;\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmlzLWZyb3plbi5qcz82NmM4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsZUFBZSxtQkFBTyxDQUFDLENBQWM7O0FBRXJDLG1CQUFPLENBQUMsRUFBZTtBQUN2QjtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjE0Ni5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDE5LjEuMi4xMiBPYmplY3QuaXNGcm96ZW4oTylcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2lzRnJvemVuJywgZnVuY3Rpb24gKCRpc0Zyb3plbikge1xuICByZXR1cm4gZnVuY3Rpb24gaXNGcm96ZW4oaXQpIHtcbiAgICByZXR1cm4gaXNPYmplY3QoaXQpID8gJGlzRnJvemVuID8gJGlzRnJvemVuKGl0KSA6IGZhbHNlIDogdHJ1ZTtcbiAgfTtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///146\n")},function(module,exports,__webpack_require__){eval("// 19.1.2.13 Object.isSealed(O)\nvar isObject = __webpack_require__(4);\n\n__webpack_require__(25)('isSealed', function ($isSealed) {\n return function isSealed(it) {\n return isObject(it) ? $isSealed ? $isSealed(it) : false : true;\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmlzLXNlYWxlZC5qcz81N2YwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsZUFBZSxtQkFBTyxDQUFDLENBQWM7O0FBRXJDLG1CQUFPLENBQUMsRUFBZTtBQUN2QjtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjE0Ny5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDE5LjEuMi4xMyBPYmplY3QuaXNTZWFsZWQoTylcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2lzU2VhbGVkJywgZnVuY3Rpb24gKCRpc1NlYWxlZCkge1xuICByZXR1cm4gZnVuY3Rpb24gaXNTZWFsZWQoaXQpIHtcbiAgICByZXR1cm4gaXNPYmplY3QoaXQpID8gJGlzU2VhbGVkID8gJGlzU2VhbGVkKGl0KSA6IGZhbHNlIDogdHJ1ZTtcbiAgfTtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///147\n")},function(module,exports,__webpack_require__){eval("// 19.1.2.11 Object.isExtensible(O)\nvar isObject = __webpack_require__(4);\n\n__webpack_require__(25)('isExtensible', function ($isExtensible) {\n return function isExtensible(it) {\n return isObject(it) ? $isExtensible ? $isExtensible(it) : true : false;\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmlzLWV4dGVuc2libGUuanM/MTY1YiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGVBQWUsbUJBQU8sQ0FBQyxDQUFjOztBQUVyQyxtQkFBTyxDQUFDLEVBQWU7QUFDdkI7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIxNDguanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAxOS4xLjIuMTEgT2JqZWN0LmlzRXh0ZW5zaWJsZShPKVxudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgnaXNFeHRlbnNpYmxlJywgZnVuY3Rpb24gKCRpc0V4dGVuc2libGUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGlzRXh0ZW5zaWJsZShpdCkge1xuICAgIHJldHVybiBpc09iamVjdChpdCkgPyAkaXNFeHRlbnNpYmxlID8gJGlzRXh0ZW5zaWJsZShpdCkgOiB0cnVlIDogZmFsc2U7XG4gIH07XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///148\n")},function(module,exports,__webpack_require__){eval("// 19.1.3.1 Object.assign(target, source)\nvar $export = __webpack_require__(0);\n\n$export($export.S + $export.F, 'Object', { assign: __webpack_require__(99) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmFzc2lnbi5qcz9mNzUxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDLDBDQUEwQyxTQUFTLG1CQUFPLENBQUMsRUFBa0IsR0FBRyIsImZpbGUiOiIxNDkuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAxOS4xLjMuMSBPYmplY3QuYXNzaWduKHRhcmdldCwgc291cmNlKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYsICdPYmplY3QnLCB7IGFzc2lnbjogcmVxdWlyZSgnLi9fb2JqZWN0LWFzc2lnbicpIH0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///149\n")},function(module,exports,__webpack_require__){eval("// 19.1.3.10 Object.is(value1, value2)\nvar $export = __webpack_require__(0);\n$export($export.S, 'Object', { is: __webpack_require__(100) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmlzLmpzP2RiOTciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyw4QkFBOEIsS0FBSyxtQkFBTyxDQUFDLEdBQWUsR0FBRyIsImZpbGUiOiIxNTAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAxOS4xLjMuMTAgT2JqZWN0LmlzKHZhbHVlMSwgdmFsdWUyKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbiRleHBvcnQoJGV4cG9ydC5TLCAnT2JqZWN0JywgeyBpczogcmVxdWlyZSgnLi9fc2FtZS12YWx1ZScpIH0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///150\n")},function(module,exports,__webpack_require__){eval("// 19.1.3.19 Object.setPrototypeOf(O, proto)\nvar $export = __webpack_require__(0);\n$export($export.S, 'Object', { setPrototypeOf: __webpack_require__(71).set });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LnNldC1wcm90b3R5cGUtb2YuanM/ZmQyNCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLDhCQUE4QixpQkFBaUIsbUJBQU8sQ0FBQyxFQUFjLE9BQU8iLCJmaWxlIjoiMTUxLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMTkuMS4zLjE5IE9iamVjdC5zZXRQcm90b3R5cGVPZihPLCBwcm90bylcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG4kZXhwb3J0KCRleHBvcnQuUywgJ09iamVjdCcsIHsgc2V0UHJvdG90eXBlT2Y6IHJlcXVpcmUoJy4vX3NldC1wcm90bycpLnNldCB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///151\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// 19.1.3.6 Object.prototype.toString()\nvar classof = __webpack_require__(44);\nvar test = {};\ntest[__webpack_require__(5)('toStringTag')] = 'z';\nif (test + '' != '[object z]') {\n __webpack_require__(12)(Object.prototype, 'toString', function toString() {\n return '[object ' + classof(this) + ']';\n }, true);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LnRvLXN0cmluZy5qcz8wNmRiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxjQUFjLG1CQUFPLENBQUMsRUFBWTtBQUNsQztBQUNBLEtBQUssbUJBQU8sQ0FBQyxDQUFRO0FBQ3JCO0FBQ0EsRUFBRSxtQkFBTyxDQUFDLEVBQWE7QUFDdkI7QUFDQSxHQUFHO0FBQ0giLCJmaWxlIjoiMTUyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gMTkuMS4zLjYgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZygpXG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4vX2NsYXNzb2YnKTtcbnZhciB0ZXN0ID0ge307XG50ZXN0W3JlcXVpcmUoJy4vX3drcycpKCd0b1N0cmluZ1RhZycpXSA9ICd6JztcbmlmICh0ZXN0ICsgJycgIT0gJ1tvYmplY3Qgel0nKSB7XG4gIHJlcXVpcmUoJy4vX3JlZGVmaW5lJykoT2JqZWN0LnByb3RvdHlwZSwgJ3RvU3RyaW5nJywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuICdbb2JqZWN0ICcgKyBjbGFzc29mKHRoaXMpICsgJ10nO1xuICB9LCB0cnVlKTtcbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///152\n")},function(module,exports,__webpack_require__){eval("// 19.2.3.2 / 15.3.4.5 Function.prototype.bind(thisArg, args...)\nvar $export = __webpack_require__(0);\n\n$export($export.P, 'Function', { bind: __webpack_require__(101) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZnVuY3Rpb24uYmluZC5qcz9kOTJhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDLGdDQUFnQyxPQUFPLG1CQUFPLENBQUMsR0FBUyxHQUFHIiwiZmlsZSI6IjE1My5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDE5LjIuMy4yIC8gMTUuMy40LjUgRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQodGhpc0FyZywgYXJncy4uLilcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QLCAnRnVuY3Rpb24nLCB7IGJpbmQ6IHJlcXVpcmUoJy4vX2JpbmQnKSB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///153\n")},function(module,exports,__webpack_require__){eval("var dP = __webpack_require__(8).f;\nvar FProto = Function.prototype;\nvar nameRE = /^\\s*function ([^ (]*)/;\nvar NAME = 'name';\n\n// 19.2.4.2 name\nNAME in FProto || __webpack_require__(7) && dP(FProto, NAME, {\n configurable: true,\n get: function () {\n try {\n return ('' + this).match(nameRE)[1];\n } catch (e) {\n return '';\n }\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZnVuY3Rpb24ubmFtZS5qcz83ZjdmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFNBQVMsbUJBQU8sQ0FBQyxDQUFjO0FBQy9CO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGtCQUFrQixtQkFBTyxDQUFDLENBQWdCO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTU0LmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbnZhciBGUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGU7XG52YXIgbmFtZVJFID0gL15cXHMqZnVuY3Rpb24gKFteIChdKikvO1xudmFyIE5BTUUgPSAnbmFtZSc7XG5cbi8vIDE5LjIuNC4yIG5hbWVcbk5BTUUgaW4gRlByb3RvIHx8IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgZFAoRlByb3RvLCBOQU1FLCB7XG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiAoJycgKyB0aGlzKS5tYXRjaChuYW1lUkUpWzFdO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///154\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar isObject = __webpack_require__(4);\nvar getPrototypeOf = __webpack_require__(17);\nvar HAS_INSTANCE = __webpack_require__(5)('hasInstance');\nvar FunctionProto = Function.prototype;\n// 19.2.3.6 Function.prototype[@@hasInstance](V)\nif (!(HAS_INSTANCE in FunctionProto)) __webpack_require__(8).f(FunctionProto, HAS_INSTANCE, { value: function (O) {\n if (typeof this != 'function' || !isObject(O)) return false;\n if (!isObject(this.prototype)) return O instanceof this;\n // for environment w/o native `@@hasInstance` logic enough `instanceof`, but add this:\n while (O = getPrototypeOf(O)) if (this.prototype === O) return true;\n return false;\n} });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZnVuY3Rpb24uaGFzLWluc3RhbmNlLmpzPzIxN2IiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxxQkFBcUIsbUJBQU8sQ0FBQyxFQUFlO0FBQzVDLG1CQUFtQixtQkFBTyxDQUFDLENBQVE7QUFDbkM7QUFDQTtBQUNBLHNDQUFzQyxtQkFBTyxDQUFDLENBQWMsa0NBQWtDO0FBQzlGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLEVBQUUiLCJmaWxlIjoiMTU1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgSEFTX0lOU1RBTkNFID0gcmVxdWlyZSgnLi9fd2tzJykoJ2hhc0luc3RhbmNlJyk7XG52YXIgRnVuY3Rpb25Qcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbi8vIDE5LjIuMy42IEZ1bmN0aW9uLnByb3RvdHlwZVtAQGhhc0luc3RhbmNlXShWKVxuaWYgKCEoSEFTX0lOU1RBTkNFIGluIEZ1bmN0aW9uUHJvdG8pKSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mKEZ1bmN0aW9uUHJvdG8sIEhBU19JTlNUQU5DRSwgeyB2YWx1ZTogZnVuY3Rpb24gKE8pIHtcbiAgaWYgKHR5cGVvZiB0aGlzICE9ICdmdW5jdGlvbicgfHwgIWlzT2JqZWN0KE8pKSByZXR1cm4gZmFsc2U7XG4gIGlmICghaXNPYmplY3QodGhpcy5wcm90b3R5cGUpKSByZXR1cm4gTyBpbnN0YW5jZW9mIHRoaXM7XG4gIC8vIGZvciBlbnZpcm9ubWVudCB3L28gbmF0aXZlIGBAQGhhc0luc3RhbmNlYCBsb2dpYyBlbm91Z2ggYGluc3RhbmNlb2ZgLCBidXQgYWRkIHRoaXM6XG4gIHdoaWxlIChPID0gZ2V0UHJvdG90eXBlT2YoTykpIGlmICh0aGlzLnByb3RvdHlwZSA9PT0gTykgcmV0dXJuIHRydWU7XG4gIHJldHVybiBmYWxzZTtcbn0gfSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///155\n")},function(module,exports,__webpack_require__){eval("var $export = __webpack_require__(0);\nvar $parseInt = __webpack_require__(103);\n// 18.2.5 parseInt(string, radix)\n$export($export.G + $export.F * (parseInt != $parseInt), { parseInt: $parseInt });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucGFyc2UtaW50LmpzPzE4ZDAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsZ0JBQWdCLG1CQUFPLENBQUMsR0FBYztBQUN0QztBQUNBLDBEQUEwRCxzQkFBc0IiLCJmaWxlIjoiMTU2LmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkcGFyc2VJbnQgPSByZXF1aXJlKCcuL19wYXJzZS1pbnQnKTtcbi8vIDE4LjIuNSBwYXJzZUludChzdHJpbmcsIHJhZGl4KVxuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LkYgKiAocGFyc2VJbnQgIT0gJHBhcnNlSW50KSwgeyBwYXJzZUludDogJHBhcnNlSW50IH0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///156\n")},function(module,exports,__webpack_require__){eval("var $export = __webpack_require__(0);\nvar $parseFloat = __webpack_require__(104);\n// 18.2.4 parseFloat(string)\n$export($export.G + $export.F * (parseFloat != $parseFloat), { parseFloat: $parseFloat });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucGFyc2UtZmxvYXQuanM/YjcyYyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxrQkFBa0IsbUJBQU8sQ0FBQyxHQUFnQjtBQUMxQztBQUNBLDhEQUE4RCwwQkFBMEIiLCJmaWxlIjoiMTU3LmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkcGFyc2VGbG9hdCA9IHJlcXVpcmUoJy4vX3BhcnNlLWZsb2F0Jyk7XG4vLyAxOC4yLjQgcGFyc2VGbG9hdChzdHJpbmcpXG4kZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuRiAqIChwYXJzZUZsb2F0ICE9ICRwYXJzZUZsb2F0KSwgeyBwYXJzZUZsb2F0OiAkcGFyc2VGbG9hdCB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///157\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar global = __webpack_require__(2);\nvar has = __webpack_require__(14);\nvar cof = __webpack_require__(20);\nvar inheritIfRequired = __webpack_require__(73);\nvar toPrimitive = __webpack_require__(23);\nvar fails = __webpack_require__(3);\nvar gOPN = __webpack_require__(37).f;\nvar gOPD = __webpack_require__(16).f;\nvar dP = __webpack_require__(8).f;\nvar $trim = __webpack_require__(45).trim;\nvar NUMBER = 'Number';\nvar $Number = global[NUMBER];\nvar Base = $Number;\nvar proto = $Number.prototype;\n// Opera ~12 has broken Object#toString\nvar BROKEN_COF = cof(__webpack_require__(36)(proto)) == NUMBER;\nvar TRIM = 'trim' in String.prototype;\n\n// 7.1.3 ToNumber(argument)\nvar toNumber = function (argument) {\n var it = toPrimitive(argument, false);\n if (typeof it == 'string' && it.length > 2) {\n it = TRIM ? it.trim() : $trim(it, 3);\n var first = it.charCodeAt(0);\n var third, radix, maxCode;\n if (first === 43 || first === 45) {\n third = it.charCodeAt(2);\n if (third === 88 || third === 120) return NaN; // Number('+0x1') should be NaN, old V8 fix\n } else if (first === 48) {\n switch (it.charCodeAt(1)) {\n case 66: case 98: radix = 2; maxCode = 49; break; // fast equal /^0b[01]+$/i\n case 79: case 111: radix = 8; maxCode = 55; break; // fast equal /^0o[0-7]+$/i\n default: return +it;\n }\n for (var digits = it.slice(2), i = 0, l = digits.length, code; i < l; i++) {\n code = digits.charCodeAt(i);\n // parseInt parses a string to a first unavailable symbol\n // but ToNumber should return NaN if a string contains unavailable symbols\n if (code < 48 || code > maxCode) return NaN;\n } return parseInt(digits, radix);\n }\n } return +it;\n};\n\nif (!$Number(' 0o1') || !$Number('0b1') || $Number('+0x1')) {\n $Number = function Number(value) {\n var it = arguments.length < 1 ? 0 : value;\n var that = this;\n return that instanceof $Number\n // check on 1..constructor(foo) case\n && (BROKEN_COF ? fails(function () { proto.valueOf.call(that); }) : cof(that) != NUMBER)\n ? inheritIfRequired(new Base(toNumber(it)), that, $Number) : toNumber(it);\n };\n for (var keys = __webpack_require__(7) ? gOPN(Base) : (\n // ES3:\n 'MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,' +\n // ES6 (in case, if modules with ES6 Number statics required before):\n 'EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,' +\n 'MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger'\n ).split(','), j = 0, key; keys.length > j; j++) {\n if (has(Base, key = keys[j]) && !has($Number, key)) {\n dP($Number, key, gOPD(Base, key));\n }\n }\n $Number.prototype = proto;\n proto.constructor = $Number;\n __webpack_require__(12)(global, NUMBER, $Number);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLmNvbnN0cnVjdG9yLmpzP2M1ZjYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixhQUFhLG1CQUFPLENBQUMsQ0FBVztBQUNoQyxVQUFVLG1CQUFPLENBQUMsRUFBUTtBQUMxQixVQUFVLG1CQUFPLENBQUMsRUFBUTtBQUMxQix3QkFBd0IsbUJBQU8sQ0FBQyxFQUF3QjtBQUN4RCxrQkFBa0IsbUJBQU8sQ0FBQyxFQUFpQjtBQUMzQyxZQUFZLG1CQUFPLENBQUMsQ0FBVTtBQUM5QixXQUFXLG1CQUFPLENBQUMsRUFBZ0I7QUFDbkMsV0FBVyxtQkFBTyxDQUFDLEVBQWdCO0FBQ25DLFNBQVMsbUJBQU8sQ0FBQyxDQUFjO0FBQy9CLFlBQVksbUJBQU8sQ0FBQyxFQUFnQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLG1CQUFPLENBQUMsRUFBa0I7QUFDL0M7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0RBQW9EO0FBQ3BELEtBQUs7QUFDTDtBQUNBLG9DQUFvQyxjQUFjLE9BQU87QUFDekQscUNBQXFDLGNBQWMsT0FBTztBQUMxRDtBQUNBO0FBQ0Esb0VBQW9FLE9BQU87QUFDM0U7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMENBQTBDLDBCQUEwQixFQUFFO0FBQ3RFO0FBQ0E7QUFDQSxrQkFBa0IsbUJBQU8sQ0FBQyxDQUFnQjtBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCLGlCQUFpQjtBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLG1CQUFPLENBQUMsRUFBYTtBQUN2QiIsImZpbGUiOiIxNTguanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG52YXIgaW5oZXJpdElmUmVxdWlyZWQgPSByZXF1aXJlKCcuL19pbmhlcml0LWlmLXJlcXVpcmVkJyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgZ09QTiA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJykuZjtcbnZhciBnT1BEID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKS5mO1xudmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbnZhciAkdHJpbSA9IHJlcXVpcmUoJy4vX3N0cmluZy10cmltJykudHJpbTtcbnZhciBOVU1CRVIgPSAnTnVtYmVyJztcbnZhciAkTnVtYmVyID0gZ2xvYmFsW05VTUJFUl07XG52YXIgQmFzZSA9ICROdW1iZXI7XG52YXIgcHJvdG8gPSAkTnVtYmVyLnByb3RvdHlwZTtcbi8vIE9wZXJhIH4xMiBoYXMgYnJva2VuIE9iamVjdCN0b1N0cmluZ1xudmFyIEJST0tFTl9DT0YgPSBjb2YocmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpKHByb3RvKSkgPT0gTlVNQkVSO1xudmFyIFRSSU0gPSAndHJpbScgaW4gU3RyaW5nLnByb3RvdHlwZTtcblxuLy8gNy4xLjMgVG9OdW1iZXIoYXJndW1lbnQpXG52YXIgdG9OdW1iZXIgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdmFyIGl0ID0gdG9QcmltaXRpdmUoYXJndW1lbnQsIGZhbHNlKTtcbiAgaWYgKHR5cGVvZiBpdCA9PSAnc3RyaW5nJyAmJiBpdC5sZW5ndGggPiAyKSB7XG4gICAgaXQgPSBUUklNID8gaXQudHJpbSgpIDogJHRyaW0oaXQsIDMpO1xuICAgIHZhciBmaXJzdCA9IGl0LmNoYXJDb2RlQXQoMCk7XG4gICAgdmFyIHRoaXJkLCByYWRpeCwgbWF4Q29kZTtcbiAgICBpZiAoZmlyc3QgPT09IDQzIHx8IGZpcnN0ID09PSA0NSkge1xuICAgICAgdGhpcmQgPSBpdC5jaGFyQ29kZUF0KDIpO1xuICAgICAgaWYgKHRoaXJkID09PSA4OCB8fCB0aGlyZCA9PT0gMTIwKSByZXR1cm4gTmFOOyAvLyBOdW1iZXIoJysweDEnKSBzaG91bGQgYmUgTmFOLCBvbGQgVjggZml4XG4gICAgfSBlbHNlIGlmIChmaXJzdCA9PT0gNDgpIHtcbiAgICAgIHN3aXRjaCAoaXQuY2hhckNvZGVBdCgxKSkge1xuICAgICAgICBjYXNlIDY2OiBjYXNlIDk4OiByYWRpeCA9IDI7IG1heENvZGUgPSA0OTsgYnJlYWs7IC8vIGZhc3QgZXF1YWwgL14wYlswMV0rJC9pXG4gICAgICAgIGNhc2UgNzk6IGNhc2UgMTExOiByYWRpeCA9IDg7IG1heENvZGUgPSA1NTsgYnJlYWs7IC8vIGZhc3QgZXF1YWwgL14wb1swLTddKyQvaVxuICAgICAgICBkZWZhdWx0OiByZXR1cm4gK2l0O1xuICAgICAgfVxuICAgICAgZm9yICh2YXIgZGlnaXRzID0gaXQuc2xpY2UoMiksIGkgPSAwLCBsID0gZGlnaXRzLmxlbmd0aCwgY29kZTsgaSA8IGw7IGkrKykge1xuICAgICAgICBjb2RlID0gZGlnaXRzLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIC8vIHBhcnNlSW50IHBhcnNlcyBhIHN0cmluZyB0byBhIGZpcnN0IHVuYXZhaWxhYmxlIHN5bWJvbFxuICAgICAgICAvLyBidXQgVG9OdW1iZXIgc2hvdWxkIHJldHVybiBOYU4gaWYgYSBzdHJpbmcgY29udGFpbnMgdW5hdmFpbGFibGUgc3ltYm9sc1xuICAgICAgICBpZiAoY29kZSA8IDQ4IHx8IGNvZGUgPiBtYXhDb2RlKSByZXR1cm4gTmFOO1xuICAgICAgfSByZXR1cm4gcGFyc2VJbnQoZGlnaXRzLCByYWRpeCk7XG4gICAgfVxuICB9IHJldHVybiAraXQ7XG59O1xuXG5pZiAoISROdW1iZXIoJyAwbzEnKSB8fCAhJE51bWJlcignMGIxJykgfHwgJE51bWJlcignKzB4MScpKSB7XG4gICROdW1iZXIgPSBmdW5jdGlvbiBOdW1iZXIodmFsdWUpIHtcbiAgICB2YXIgaXQgPSBhcmd1bWVudHMubGVuZ3RoIDwgMSA/IDAgOiB2YWx1ZTtcbiAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgcmV0dXJuIHRoYXQgaW5zdGFuY2VvZiAkTnVtYmVyXG4gICAgICAvLyBjaGVjayBvbiAxLi5jb25zdHJ1Y3Rvcihmb28pIGNhc2VcbiAgICAgICYmIChCUk9LRU5fQ09GID8gZmFpbHMoZnVuY3Rpb24gKCkgeyBwcm90by52YWx1ZU9mLmNhbGwodGhhdCk7IH0pIDogY29mKHRoYXQpICE9IE5VTUJFUilcbiAgICAgICAgPyBpbmhlcml0SWZSZXF1aXJlZChuZXcgQmFzZSh0b051bWJlcihpdCkpLCB0aGF0LCAkTnVtYmVyKSA6IHRvTnVtYmVyKGl0KTtcbiAgfTtcbiAgZm9yICh2YXIga2V5cyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBnT1BOKEJhc2UpIDogKFxuICAgIC8vIEVTMzpcbiAgICAnTUFYX1ZBTFVFLE1JTl9WQUxVRSxOYU4sTkVHQVRJVkVfSU5GSU5JVFksUE9TSVRJVkVfSU5GSU5JVFksJyArXG4gICAgLy8gRVM2IChpbiBjYXNlLCBpZiBtb2R1bGVzIHdpdGggRVM2IE51bWJlciBzdGF0aWNzIHJlcXVpcmVkIGJlZm9yZSk6XG4gICAgJ0VQU0lMT04saXNGaW5pdGUsaXNJbnRlZ2VyLGlzTmFOLGlzU2FmZUludGVnZXIsTUFYX1NBRkVfSU5URUdFUiwnICtcbiAgICAnTUlOX1NBRkVfSU5URUdFUixwYXJzZUZsb2F0LHBhcnNlSW50LGlzSW50ZWdlcidcbiAgKS5zcGxpdCgnLCcpLCBqID0gMCwga2V5OyBrZXlzLmxlbmd0aCA+IGo7IGorKykge1xuICAgIGlmIChoYXMoQmFzZSwga2V5ID0ga2V5c1tqXSkgJiYgIWhhcygkTnVtYmVyLCBrZXkpKSB7XG4gICAgICBkUCgkTnVtYmVyLCBrZXksIGdPUEQoQmFzZSwga2V5KSk7XG4gICAgfVxuICB9XG4gICROdW1iZXIucHJvdG90eXBlID0gcHJvdG87XG4gIHByb3RvLmNvbnN0cnVjdG9yID0gJE51bWJlcjtcbiAgcmVxdWlyZSgnLi9fcmVkZWZpbmUnKShnbG9iYWwsIE5VTUJFUiwgJE51bWJlcik7XG59XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///158\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar toInteger = __webpack_require__(21);\nvar aNumberValue = __webpack_require__(105);\nvar repeat = __webpack_require__(74);\nvar $toFixed = 1.0.toFixed;\nvar floor = Math.floor;\nvar data = [0, 0, 0, 0, 0, 0];\nvar ERROR = 'Number.toFixed: incorrect invocation!';\nvar ZERO = '0';\n\nvar multiply = function (n, c) {\n var i = -1;\n var c2 = c;\n while (++i < 6) {\n c2 += n * data[i];\n data[i] = c2 % 1e7;\n c2 = floor(c2 / 1e7);\n }\n};\nvar divide = function (n) {\n var i = 6;\n var c = 0;\n while (--i >= 0) {\n c += data[i];\n data[i] = floor(c / n);\n c = (c % n) * 1e7;\n }\n};\nvar numToString = function () {\n var i = 6;\n var s = '';\n while (--i >= 0) {\n if (s !== '' || i === 0 || data[i] !== 0) {\n var t = String(data[i]);\n s = s === '' ? t : s + repeat.call(ZERO, 7 - t.length) + t;\n }\n } return s;\n};\nvar pow = function (x, n, acc) {\n return n === 0 ? acc : n % 2 === 1 ? pow(x, n - 1, acc * x) : pow(x * x, n / 2, acc);\n};\nvar log = function (x) {\n var n = 0;\n var x2 = x;\n while (x2 >= 4096) {\n n += 12;\n x2 /= 4096;\n }\n while (x2 >= 2) {\n n += 1;\n x2 /= 2;\n } return n;\n};\n\n$export($export.P + $export.F * (!!$toFixed && (\n 0.00008.toFixed(3) !== '0.000' ||\n 0.9.toFixed(0) !== '1' ||\n 1.255.toFixed(2) !== '1.25' ||\n 1000000000000000128.0.toFixed(0) !== '1000000000000000128'\n) || !__webpack_require__(3)(function () {\n // V8 ~ Android 4.3-\n $toFixed.call({});\n})), 'Number', {\n toFixed: function toFixed(fractionDigits) {\n var x = aNumberValue(this, ERROR);\n var f = toInteger(fractionDigits);\n var s = '';\n var m = ZERO;\n var e, z, j, k;\n if (f < 0 || f > 20) throw RangeError(ERROR);\n // eslint-disable-next-line no-self-compare\n if (x != x) return 'NaN';\n if (x <= -1e21 || x >= 1e21) return String(x);\n if (x < 0) {\n s = '-';\n x = -x;\n }\n if (x > 1e-21) {\n e = log(x * pow(2, 69, 1)) - 69;\n z = e < 0 ? x * pow(2, -e, 1) : x / pow(2, e, 1);\n z *= 0x10000000000000;\n e = 52 - e;\n if (e > 0) {\n multiply(0, z);\n j = f;\n while (j >= 7) {\n multiply(1e7, 0);\n j -= 7;\n }\n multiply(pow(10, j, 1), 0);\n j = e - 1;\n while (j >= 23) {\n divide(1 << 23);\n j -= 23;\n }\n divide(1 << j);\n multiply(1, 1);\n divide(2);\n m = numToString();\n } else {\n multiply(0, z);\n multiply(1 << -e, 0);\n m = numToString() + repeat.call(ZERO, f);\n }\n }\n if (f > 0) {\n k = m.length;\n m = s + (k <= f ? '0.' + repeat.call(ZERO, f - k) + m : m.slice(0, k - f) + '.' + m.slice(k - f));\n } else {\n m = s + m;\n } return m;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLnRvLWZpeGVkLmpzPzAzNmMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDLG1CQUFtQixtQkFBTyxDQUFDLEdBQW1CO0FBQzlDLGFBQWEsbUJBQU8sQ0FBQyxFQUFrQjtBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTSxtQkFBTyxDQUFDLENBQVU7QUFDeEI7QUFDQSxrQkFBa0I7QUFDbEIsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMO0FBQ0EsQ0FBQyIsImZpbGUiOiIxNTkuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciBhTnVtYmVyVmFsdWUgPSByZXF1aXJlKCcuL19hLW51bWJlci12YWx1ZScpO1xudmFyIHJlcGVhdCA9IHJlcXVpcmUoJy4vX3N0cmluZy1yZXBlYXQnKTtcbnZhciAkdG9GaXhlZCA9IDEuMC50b0ZpeGVkO1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcbnZhciBkYXRhID0gWzAsIDAsIDAsIDAsIDAsIDBdO1xudmFyIEVSUk9SID0gJ051bWJlci50b0ZpeGVkOiBpbmNvcnJlY3QgaW52b2NhdGlvbiEnO1xudmFyIFpFUk8gPSAnMCc7XG5cbnZhciBtdWx0aXBseSA9IGZ1bmN0aW9uIChuLCBjKSB7XG4gIHZhciBpID0gLTE7XG4gIHZhciBjMiA9IGM7XG4gIHdoaWxlICgrK2kgPCA2KSB7XG4gICAgYzIgKz0gbiAqIGRhdGFbaV07XG4gICAgZGF0YVtpXSA9IGMyICUgMWU3O1xuICAgIGMyID0gZmxvb3IoYzIgLyAxZTcpO1xuICB9XG59O1xudmFyIGRpdmlkZSA9IGZ1bmN0aW9uIChuKSB7XG4gIHZhciBpID0gNjtcbiAgdmFyIGMgPSAwO1xuICB3aGlsZSAoLS1pID49IDApIHtcbiAgICBjICs9IGRhdGFbaV07XG4gICAgZGF0YVtpXSA9IGZsb29yKGMgLyBuKTtcbiAgICBjID0gKGMgJSBuKSAqIDFlNztcbiAgfVxufTtcbnZhciBudW1Ub1N0cmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGkgPSA2O1xuICB2YXIgcyA9ICcnO1xuICB3aGlsZSAoLS1pID49IDApIHtcbiAgICBpZiAocyAhPT0gJycgfHwgaSA9PT0gMCB8fCBkYXRhW2ldICE9PSAwKSB7XG4gICAgICB2YXIgdCA9IFN0cmluZyhkYXRhW2ldKTtcbiAgICAgIHMgPSBzID09PSAnJyA/IHQgOiBzICsgcmVwZWF0LmNhbGwoWkVSTywgNyAtIHQubGVuZ3RoKSArIHQ7XG4gICAgfVxuICB9IHJldHVybiBzO1xufTtcbnZhciBwb3cgPSBmdW5jdGlvbiAoeCwgbiwgYWNjKSB7XG4gIHJldHVybiBuID09PSAwID8gYWNjIDogbiAlIDIgPT09IDEgPyBwb3coeCwgbiAtIDEsIGFjYyAqIHgpIDogcG93KHggKiB4LCBuIC8gMiwgYWNjKTtcbn07XG52YXIgbG9nID0gZnVuY3Rpb24gKHgpIHtcbiAgdmFyIG4gPSAwO1xuICB2YXIgeDIgPSB4O1xuICB3aGlsZSAoeDIgPj0gNDA5Nikge1xuICAgIG4gKz0gMTI7XG4gICAgeDIgLz0gNDA5NjtcbiAgfVxuICB3aGlsZSAoeDIgPj0gMikge1xuICAgIG4gKz0gMTtcbiAgICB4MiAvPSAyO1xuICB9IHJldHVybiBuO1xufTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoISEkdG9GaXhlZCAmJiAoXG4gIDAuMDAwMDgudG9GaXhlZCgzKSAhPT0gJzAuMDAwJyB8fFxuICAwLjkudG9GaXhlZCgwKSAhPT0gJzEnIHx8XG4gIDEuMjU1LnRvRml4ZWQoMikgIT09ICcxLjI1JyB8fFxuICAxMDAwMDAwMDAwMDAwMDAwMTI4LjAudG9GaXhlZCgwKSAhPT0gJzEwMDAwMDAwMDAwMDAwMDAxMjgnXG4pIHx8ICFyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgLy8gVjggfiBBbmRyb2lkIDQuMy1cbiAgJHRvRml4ZWQuY2FsbCh7fSk7XG59KSksICdOdW1iZXInLCB7XG4gIHRvRml4ZWQ6IGZ1bmN0aW9uIHRvRml4ZWQoZnJhY3Rpb25EaWdpdHMpIHtcbiAgICB2YXIgeCA9IGFOdW1iZXJWYWx1ZSh0aGlzLCBFUlJPUik7XG4gICAgdmFyIGYgPSB0b0ludGVnZXIoZnJhY3Rpb25EaWdpdHMpO1xuICAgIHZhciBzID0gJyc7XG4gICAgdmFyIG0gPSBaRVJPO1xuICAgIHZhciBlLCB6LCBqLCBrO1xuICAgIGlmIChmIDwgMCB8fCBmID4gMjApIHRocm93IFJhbmdlRXJyb3IoRVJST1IpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICBpZiAoeCAhPSB4KSByZXR1cm4gJ05hTic7XG4gICAgaWYgKHggPD0gLTFlMjEgfHwgeCA+PSAxZTIxKSByZXR1cm4gU3RyaW5nKHgpO1xuICAgIGlmICh4IDwgMCkge1xuICAgICAgcyA9ICctJztcbiAgICAgIHggPSAteDtcbiAgICB9XG4gICAgaWYgKHggPiAxZS0yMSkge1xuICAgICAgZSA9IGxvZyh4ICogcG93KDIsIDY5LCAxKSkgLSA2OTtcbiAgICAgIHogPSBlIDwgMCA/IHggKiBwb3coMiwgLWUsIDEpIDogeCAvIHBvdygyLCBlLCAxKTtcbiAgICAgIHogKj0gMHgxMDAwMDAwMDAwMDAwMDtcbiAgICAgIGUgPSA1MiAtIGU7XG4gICAgICBpZiAoZSA+IDApIHtcbiAgICAgICAgbXVsdGlwbHkoMCwgeik7XG4gICAgICAgIGogPSBmO1xuICAgICAgICB3aGlsZSAoaiA+PSA3KSB7XG4gICAgICAgICAgbXVsdGlwbHkoMWU3LCAwKTtcbiAgICAgICAgICBqIC09IDc7XG4gICAgICAgIH1cbiAgICAgICAgbXVsdGlwbHkocG93KDEwLCBqLCAxKSwgMCk7XG4gICAgICAgIGogPSBlIC0gMTtcbiAgICAgICAgd2hpbGUgKGogPj0gMjMpIHtcbiAgICAgICAgICBkaXZpZGUoMSA8PCAyMyk7XG4gICAgICAgICAgaiAtPSAyMztcbiAgICAgICAgfVxuICAgICAgICBkaXZpZGUoMSA8PCBqKTtcbiAgICAgICAgbXVsdGlwbHkoMSwgMSk7XG4gICAgICAgIGRpdmlkZSgyKTtcbiAgICAgICAgbSA9IG51bVRvU3RyaW5nKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBtdWx0aXBseSgwLCB6KTtcbiAgICAgICAgbXVsdGlwbHkoMSA8PCAtZSwgMCk7XG4gICAgICAgIG0gPSBudW1Ub1N0cmluZygpICsgcmVwZWF0LmNhbGwoWkVSTywgZik7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChmID4gMCkge1xuICAgICAgayA9IG0ubGVuZ3RoO1xuICAgICAgbSA9IHMgKyAoayA8PSBmID8gJzAuJyArIHJlcGVhdC5jYWxsKFpFUk8sIGYgLSBrKSArIG0gOiBtLnNsaWNlKDAsIGsgLSBmKSArICcuJyArIG0uc2xpY2UoayAtIGYpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbSA9IHMgKyBtO1xuICAgIH0gcmV0dXJuIG07XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///159\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar $fails = __webpack_require__(3);\nvar aNumberValue = __webpack_require__(105);\nvar $toPrecision = 1.0.toPrecision;\n\n$export($export.P + $export.F * ($fails(function () {\n // IE7-\n return $toPrecision.call(1, undefined) !== '1';\n}) || !$fails(function () {\n // V8 ~ Android 4.3-\n $toPrecision.call({});\n})), 'Number', {\n toPrecision: function toPrecision(precision) {\n var that = aNumberValue(this, 'Number#toPrecision: incorrect invocation!');\n return precision === undefined ? $toPrecision.call(that) : $toPrecision.call(that, precision);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLnRvLXByZWNpc2lvbi5qcz81NGE4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsYUFBYSxtQkFBTyxDQUFDLENBQVU7QUFDL0IsbUJBQW1CLG1CQUFPLENBQUMsR0FBbUI7QUFDOUM7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0Esc0JBQXNCO0FBQ3RCLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTYwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIGFOdW1iZXJWYWx1ZSA9IHJlcXVpcmUoJy4vX2EtbnVtYmVyLXZhbHVlJyk7XG52YXIgJHRvUHJlY2lzaW9uID0gMS4wLnRvUHJlY2lzaW9uO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICgkZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBJRTctXG4gIHJldHVybiAkdG9QcmVjaXNpb24uY2FsbCgxLCB1bmRlZmluZWQpICE9PSAnMSc7XG59KSB8fCAhJGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gVjggfiBBbmRyb2lkIDQuMy1cbiAgJHRvUHJlY2lzaW9uLmNhbGwoe30pO1xufSkpLCAnTnVtYmVyJywge1xuICB0b1ByZWNpc2lvbjogZnVuY3Rpb24gdG9QcmVjaXNpb24ocHJlY2lzaW9uKSB7XG4gICAgdmFyIHRoYXQgPSBhTnVtYmVyVmFsdWUodGhpcywgJ051bWJlciN0b1ByZWNpc2lvbjogaW5jb3JyZWN0IGludm9jYXRpb24hJyk7XG4gICAgcmV0dXJuIHByZWNpc2lvbiA9PT0gdW5kZWZpbmVkID8gJHRvUHJlY2lzaW9uLmNhbGwodGhhdCkgOiAkdG9QcmVjaXNpb24uY2FsbCh0aGF0LCBwcmVjaXNpb24pO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///160\n")},function(module,exports,__webpack_require__){eval("// 20.1.2.1 Number.EPSILON\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Number', { EPSILON: Math.pow(2, -52) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLmVwc2lsb24uanM/MmUzNyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXOztBQUVqQyw4QkFBOEIsNEJBQTRCIiwiZmlsZSI6IjE2MS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDIwLjEuMi4xIE51bWJlci5FUFNJTE9OXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ051bWJlcicsIHsgRVBTSUxPTjogTWF0aC5wb3coMiwgLTUyKSB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///161\n")},function(module,exports,__webpack_require__){eval("// 20.1.2.2 Number.isFinite(number)\nvar $export = __webpack_require__(0);\nvar _isFinite = __webpack_require__(2).isFinite;\n\n$export($export.S, 'Number', {\n isFinite: function isFinite(it) {\n return typeof it == 'number' && _isFinite(it);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLmlzLWZpbml0ZS5qcz9mY2EwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsZ0JBQWdCLG1CQUFPLENBQUMsQ0FBVzs7QUFFbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjE2Mi5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDIwLjEuMi4yIE51bWJlci5pc0Zpbml0ZShudW1iZXIpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIF9pc0Zpbml0ZSA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLmlzRmluaXRlO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ051bWJlcicsIHtcbiAgaXNGaW5pdGU6IGZ1bmN0aW9uIGlzRmluaXRlKGl0KSB7XG4gICAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnbnVtYmVyJyAmJiBfaXNGaW5pdGUoaXQpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///162\n")},function(module,exports,__webpack_require__){eval("// 20.1.2.3 Number.isInteger(number)\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Number', { isInteger: __webpack_require__(106) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLmlzLWludGVnZXIuanM/N2NkZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXOztBQUVqQyw4QkFBOEIsWUFBWSxtQkFBTyxDQUFDLEdBQWUsR0FBRyIsImZpbGUiOiIxNjMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyMC4xLjIuMyBOdW1iZXIuaXNJbnRlZ2VyKG51bWJlcilcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTnVtYmVyJywgeyBpc0ludGVnZXI6IHJlcXVpcmUoJy4vX2lzLWludGVnZXInKSB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///163\n")},function(module,exports,__webpack_require__){eval("// 20.1.2.4 Number.isNaN(number)\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Number', {\n isNaN: function isNaN(number) {\n // eslint-disable-next-line no-self-compare\n return number != number;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLmlzLW5hbi5qcz9lZTFkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjE2NC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDIwLjEuMi40IE51bWJlci5pc05hTihudW1iZXIpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ051bWJlcicsIHtcbiAgaXNOYU46IGZ1bmN0aW9uIGlzTmFOKG51bWJlcikge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICByZXR1cm4gbnVtYmVyICE9IG51bWJlcjtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///164\n")},function(module,exports,__webpack_require__){eval("// 20.1.2.5 Number.isSafeInteger(number)\nvar $export = __webpack_require__(0);\nvar isInteger = __webpack_require__(106);\nvar abs = Math.abs;\n\n$export($export.S, 'Number', {\n isSafeInteger: function isSafeInteger(number) {\n return isInteger(number) && abs(number) <= 0x1fffffffffffff;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLmlzLXNhZmUtaW50ZWdlci5qcz9iMWIxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsZ0JBQWdCLG1CQUFPLENBQUMsR0FBZTtBQUN2Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTY1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMS4yLjUgTnVtYmVyLmlzU2FmZUludGVnZXIobnVtYmVyKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBpc0ludGVnZXIgPSByZXF1aXJlKCcuL19pcy1pbnRlZ2VyJyk7XG52YXIgYWJzID0gTWF0aC5hYnM7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTnVtYmVyJywge1xuICBpc1NhZmVJbnRlZ2VyOiBmdW5jdGlvbiBpc1NhZmVJbnRlZ2VyKG51bWJlcikge1xuICAgIHJldHVybiBpc0ludGVnZXIobnVtYmVyKSAmJiBhYnMobnVtYmVyKSA8PSAweDFmZmZmZmZmZmZmZmZmO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///165\n")},function(module,exports,__webpack_require__){eval("// 20.1.2.6 Number.MAX_SAFE_INTEGER\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Number', { MAX_SAFE_INTEGER: 0x1fffffffffffff });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLm1heC1zYWZlLWludGVnZXIuanM/ODdmMyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXOztBQUVqQyw4QkFBOEIscUNBQXFDIiwiZmlsZSI6IjE2Ni5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDIwLjEuMi42IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ051bWJlcicsIHsgTUFYX1NBRkVfSU5URUdFUjogMHgxZmZmZmZmZmZmZmZmZiB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///166\n")},function(module,exports,__webpack_require__){eval("// 20.1.2.10 Number.MIN_SAFE_INTEGER\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Number', { MIN_SAFE_INTEGER: -0x1fffffffffffff });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLm1pbi1zYWZlLWludGVnZXIuanM/OTI3OCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXOztBQUVqQyw4QkFBOEIsc0NBQXNDIiwiZmlsZSI6IjE2Ny5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDIwLjEuMi4xMCBOdW1iZXIuTUlOX1NBRkVfSU5URUdFUlxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdOdW1iZXInLCB7IE1JTl9TQUZFX0lOVEVHRVI6IC0weDFmZmZmZmZmZmZmZmZmIH0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///167\n")},function(module,exports,__webpack_require__){eval("var $export = __webpack_require__(0);\nvar $parseFloat = __webpack_require__(104);\n// 20.1.2.12 Number.parseFloat(string)\n$export($export.S + $export.F * (Number.parseFloat != $parseFloat), 'Number', { parseFloat: $parseFloat });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLnBhcnNlLWZsb2F0LmpzPzVkZjIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsa0JBQWtCLG1CQUFPLENBQUMsR0FBZ0I7QUFDMUM7QUFDQSwrRUFBK0UsMEJBQTBCIiwiZmlsZSI6IjE2OC5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHBhcnNlRmxvYXQgPSByZXF1aXJlKCcuL19wYXJzZS1mbG9hdCcpO1xuLy8gMjAuMS4yLjEyIE51bWJlci5wYXJzZUZsb2F0KHN0cmluZylcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogKE51bWJlci5wYXJzZUZsb2F0ICE9ICRwYXJzZUZsb2F0KSwgJ051bWJlcicsIHsgcGFyc2VGbG9hdDogJHBhcnNlRmxvYXQgfSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///168\n")},function(module,exports,__webpack_require__){eval("var $export = __webpack_require__(0);\nvar $parseInt = __webpack_require__(103);\n// 20.1.2.13 Number.parseInt(string, radix)\n$export($export.S + $export.F * (Number.parseInt != $parseInt), 'Number', { parseInt: $parseInt });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLnBhcnNlLWludC5qcz8wNGZmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGdCQUFnQixtQkFBTyxDQUFDLEdBQWM7QUFDdEM7QUFDQSwyRUFBMkUsc0JBQXNCIiwiZmlsZSI6IjE2OS5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHBhcnNlSW50ID0gcmVxdWlyZSgnLi9fcGFyc2UtaW50Jyk7XG4vLyAyMC4xLjIuMTMgTnVtYmVyLnBhcnNlSW50KHN0cmluZywgcmFkaXgpXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIChOdW1iZXIucGFyc2VJbnQgIT0gJHBhcnNlSW50KSwgJ051bWJlcicsIHsgcGFyc2VJbnQ6ICRwYXJzZUludCB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///169\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.3 Math.acosh(x)\nvar $export = __webpack_require__(0);\nvar log1p = __webpack_require__(107);\nvar sqrt = Math.sqrt;\nvar $acosh = Math.acosh;\n\n$export($export.S + $export.F * !($acosh\n // V8 bug: https://code.google.com/p/v8/issues/detail?id=3509\n && Math.floor($acosh(Number.MAX_VALUE)) == 710\n // Tor Browser bug: Math.acosh(Infinity) -> NaN\n && $acosh(Infinity) == Infinity\n), 'Math', {\n acosh: function acosh(x) {\n return (x = +x) < 1 ? NaN : x > 94906265.62425156\n ? Math.log(x) + Math.LN2\n : log1p(x - 1 + sqrt(x - 1) * sqrt(x + 1));\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5hY29zaC5qcz83ZjI1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsWUFBWSxtQkFBTyxDQUFDLEdBQWU7QUFDbkM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIxNzAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyMC4yLjIuMyBNYXRoLmFjb3NoKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGxvZzFwID0gcmVxdWlyZSgnLi9fbWF0aC1sb2cxcCcpO1xudmFyIHNxcnQgPSBNYXRoLnNxcnQ7XG52YXIgJGFjb3NoID0gTWF0aC5hY29zaDtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhKCRhY29zaFxuICAvLyBWOCBidWc6IGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zNTA5XG4gICYmIE1hdGguZmxvb3IoJGFjb3NoKE51bWJlci5NQVhfVkFMVUUpKSA9PSA3MTBcbiAgLy8gVG9yIEJyb3dzZXIgYnVnOiBNYXRoLmFjb3NoKEluZmluaXR5KSAtPiBOYU5cbiAgJiYgJGFjb3NoKEluZmluaXR5KSA9PSBJbmZpbml0eVxuKSwgJ01hdGgnLCB7XG4gIGFjb3NoOiBmdW5jdGlvbiBhY29zaCh4KSB7XG4gICAgcmV0dXJuICh4ID0gK3gpIDwgMSA/IE5hTiA6IHggPiA5NDkwNjI2NS42MjQyNTE1NlxuICAgICAgPyBNYXRoLmxvZyh4KSArIE1hdGguTE4yXG4gICAgICA6IGxvZzFwKHggLSAxICsgc3FydCh4IC0gMSkgKiBzcXJ0KHggKyAxKSk7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///170\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.5 Math.asinh(x)\nvar $export = __webpack_require__(0);\nvar $asinh = Math.asinh;\n\nfunction asinh(x) {\n return !isFinite(x = +x) || x == 0 ? x : x < 0 ? -asinh(-x) : Math.log(x + Math.sqrt(x * x + 1));\n}\n\n// Tor Browser bug: Math.asinh(0) -> -0\n$export($export.S + $export.F * !($asinh && 1 / $asinh(0) > 0), 'Math', { asinh: asinh });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5hc2luaC5qcz81MzZiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakM7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EseUVBQXlFLGVBQWUiLCJmaWxlIjoiMTcxLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMi4yLjUgTWF0aC5hc2luaCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkYXNpbmggPSBNYXRoLmFzaW5oO1xuXG5mdW5jdGlvbiBhc2luaCh4KSB7XG4gIHJldHVybiAhaXNGaW5pdGUoeCA9ICt4KSB8fCB4ID09IDAgPyB4IDogeCA8IDAgPyAtYXNpbmgoLXgpIDogTWF0aC5sb2coeCArIE1hdGguc3FydCh4ICogeCArIDEpKTtcbn1cblxuLy8gVG9yIEJyb3dzZXIgYnVnOiBNYXRoLmFzaW5oKDApIC0+IC0wXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICEoJGFzaW5oICYmIDEgLyAkYXNpbmgoMCkgPiAwKSwgJ01hdGgnLCB7IGFzaW5oOiBhc2luaCB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///171\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.7 Math.atanh(x)\nvar $export = __webpack_require__(0);\nvar $atanh = Math.atanh;\n\n// Tor Browser bug: Math.atanh(-0) -> 0\n$export($export.S + $export.F * !($atanh && 1 / $atanh(-0) < 0), 'Math', {\n atanh: function atanh(x) {\n return (x = +x) == 0 ? x : Math.log((1 + x) / (1 - x)) / 2;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5hdGFuaC5qcz9kOWFiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTcyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMi4yLjcgTWF0aC5hdGFuaCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkYXRhbmggPSBNYXRoLmF0YW5oO1xuXG4vLyBUb3IgQnJvd3NlciBidWc6IE1hdGguYXRhbmgoLTApIC0+IDBcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogISgkYXRhbmggJiYgMSAvICRhdGFuaCgtMCkgPCAwKSwgJ01hdGgnLCB7XG4gIGF0YW5oOiBmdW5jdGlvbiBhdGFuaCh4KSB7XG4gICAgcmV0dXJuICh4ID0gK3gpID09IDAgPyB4IDogTWF0aC5sb2coKDEgKyB4KSAvICgxIC0geCkpIC8gMjtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///172\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.9 Math.cbrt(x)\nvar $export = __webpack_require__(0);\nvar sign = __webpack_require__(75);\n\n$export($export.S, 'Math', {\n cbrt: function cbrt(x) {\n return sign(x = +x) * Math.pow(Math.abs(x), 1 / 3);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5jYnJ0LmpzP2Y5YWIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxXQUFXLG1CQUFPLENBQUMsRUFBYzs7QUFFakM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjE3My5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDIwLjIuMi45IE1hdGguY2JydCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBzaWduID0gcmVxdWlyZSgnLi9fbWF0aC1zaWduJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgY2JydDogZnVuY3Rpb24gY2JydCh4KSB7XG4gICAgcmV0dXJuIHNpZ24oeCA9ICt4KSAqIE1hdGgucG93KE1hdGguYWJzKHgpLCAxIC8gMyk7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///173\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.11 Math.clz32(x)\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', {\n clz32: function clz32(x) {\n return (x >>>= 0) ? 31 - Math.floor(Math.log(x + 0.5) * Math.LOG2E) : 32;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5jbHozMi5qcz8zMmQ3Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIxNzQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyMC4yLjIuMTEgTWF0aC5jbHozMih4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBjbHozMjogZnVuY3Rpb24gY2x6MzIoeCkge1xuICAgIHJldHVybiAoeCA+Pj49IDApID8gMzEgLSBNYXRoLmZsb29yKE1hdGgubG9nKHggKyAwLjUpICogTWF0aC5MT0cyRSkgOiAzMjtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///174\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.12 Math.cosh(x)\nvar $export = __webpack_require__(0);\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n cosh: function cosh(x) {\n return (exp(x = +x) + exp(-x)) / 2;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5jb3NoLmpzPzI1YzkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTc1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMi4yLjEyIE1hdGguY29zaCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBleHAgPSBNYXRoLmV4cDtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBjb3NoOiBmdW5jdGlvbiBjb3NoKHgpIHtcbiAgICByZXR1cm4gKGV4cCh4ID0gK3gpICsgZXhwKC14KSkgLyAyO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///175\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.14 Math.expm1(x)\nvar $export = __webpack_require__(0);\nvar $expm1 = __webpack_require__(76);\n\n$export($export.S + $export.F * ($expm1 != Math.expm1), 'Math', { expm1: $expm1 });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5leHBtMS5qcz85ZjNjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsYUFBYSxtQkFBTyxDQUFDLEVBQWU7O0FBRXBDLGlFQUFpRSxnQkFBZ0IiLCJmaWxlIjoiMTc2LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMi4yLjE0IE1hdGguZXhwbTEoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGV4cG0xID0gcmVxdWlyZSgnLi9fbWF0aC1leHBtMScpO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICgkZXhwbTEgIT0gTWF0aC5leHBtMSksICdNYXRoJywgeyBleHBtMTogJGV4cG0xIH0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///176\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.16 Math.fround(x)\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', { fround: __webpack_require__(108) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5mcm91bmQuanM/MDQyZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXOztBQUVqQyw0QkFBNEIsU0FBUyxtQkFBTyxDQUFDLEdBQWdCLEdBQUciLCJmaWxlIjoiMTc3LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMi4yLjE2IE1hdGguZnJvdW5kKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7IGZyb3VuZDogcmVxdWlyZSgnLi9fbWF0aC1mcm91bmQnKSB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///177\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.17 Math.hypot([value1[, value2[, … ]]])\nvar $export = __webpack_require__(0);\nvar abs = Math.abs;\n\n$export($export.S, 'Math', {\n hypot: function hypot(value1, value2) { // eslint-disable-line no-unused-vars\n var sum = 0;\n var i = 0;\n var aLen = arguments.length;\n var larg = 0;\n var arg, div;\n while (i < aLen) {\n arg = abs(arguments[i++]);\n if (larg < arg) {\n div = larg / arg;\n sum = sum * div * div + 1;\n larg = arg;\n } else if (arg > 0) {\n div = arg / larg;\n sum += div * div;\n } else sum += arg;\n }\n return larg === Infinity ? Infinity : larg * Math.sqrt(sum);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5oeXBvdC5qcz9jN2M2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakM7O0FBRUE7QUFDQSx5Q0FBeUM7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTc4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMi4yLjE3IE1hdGguaHlwb3QoW3ZhbHVlMVssIHZhbHVlMlssIOKApiBdXV0pXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGFicyA9IE1hdGguYWJzO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGh5cG90OiBmdW5jdGlvbiBoeXBvdCh2YWx1ZTEsIHZhbHVlMikgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgdmFyIHN1bSA9IDA7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgbGFyZyA9IDA7XG4gICAgdmFyIGFyZywgZGl2O1xuICAgIHdoaWxlIChpIDwgYUxlbikge1xuICAgICAgYXJnID0gYWJzKGFyZ3VtZW50c1tpKytdKTtcbiAgICAgIGlmIChsYXJnIDwgYXJnKSB7XG4gICAgICAgIGRpdiA9IGxhcmcgLyBhcmc7XG4gICAgICAgIHN1bSA9IHN1bSAqIGRpdiAqIGRpdiArIDE7XG4gICAgICAgIGxhcmcgPSBhcmc7XG4gICAgICB9IGVsc2UgaWYgKGFyZyA+IDApIHtcbiAgICAgICAgZGl2ID0gYXJnIC8gbGFyZztcbiAgICAgICAgc3VtICs9IGRpdiAqIGRpdjtcbiAgICAgIH0gZWxzZSBzdW0gKz0gYXJnO1xuICAgIH1cbiAgICByZXR1cm4gbGFyZyA9PT0gSW5maW5pdHkgPyBJbmZpbml0eSA6IGxhcmcgKiBNYXRoLnNxcnQoc3VtKTtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///178\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.18 Math.imul(x, y)\nvar $export = __webpack_require__(0);\nvar $imul = Math.imul;\n\n// some WebKit versions fails with big numbers, some has wrong arity\n$export($export.S + $export.F * __webpack_require__(3)(function () {\n return $imul(0xffffffff, 5) != -5 || $imul.length != 2;\n}), 'Math', {\n imul: function imul(x, y) {\n var UINT16 = 0xffff;\n var xn = +x;\n var yn = +y;\n var xl = UINT16 & xn;\n var yl = UINT16 & yn;\n return 0 | xl * yl + ((UINT16 & xn >>> 16) * yl + xl * (UINT16 & yn >>> 16) << 16 >>> 0);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5pbXVsLmpzP2Y0ZmYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQzs7QUFFQTtBQUNBLGdDQUFnQyxtQkFBTyxDQUFDLENBQVU7QUFDbEQ7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTc5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMi4yLjE4IE1hdGguaW11bCh4LCB5KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkaW11bCA9IE1hdGguaW11bDtcblxuLy8gc29tZSBXZWJLaXQgdmVyc2lvbnMgZmFpbHMgd2l0aCBiaWcgbnVtYmVycywgc29tZSBoYXMgd3JvbmcgYXJpdHlcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAkaW11bCgweGZmZmZmZmZmLCA1KSAhPSAtNSB8fCAkaW11bC5sZW5ndGggIT0gMjtcbn0pLCAnTWF0aCcsIHtcbiAgaW11bDogZnVuY3Rpb24gaW11bCh4LCB5KSB7XG4gICAgdmFyIFVJTlQxNiA9IDB4ZmZmZjtcbiAgICB2YXIgeG4gPSAreDtcbiAgICB2YXIgeW4gPSAreTtcbiAgICB2YXIgeGwgPSBVSU5UMTYgJiB4bjtcbiAgICB2YXIgeWwgPSBVSU5UMTYgJiB5bjtcbiAgICByZXR1cm4gMCB8IHhsICogeWwgKyAoKFVJTlQxNiAmIHhuID4+PiAxNikgKiB5bCArIHhsICogKFVJTlQxNiAmIHluID4+PiAxNikgPDwgMTYgPj4+IDApO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///179\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.21 Math.log10(x)\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', {\n log10: function log10(x) {\n return Math.log(x) * Math.LOG10E;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5sb2cxMC5qcz83ODcyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIxODAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyMC4yLjIuMjEgTWF0aC5sb2cxMCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBsb2cxMDogZnVuY3Rpb24gbG9nMTAoeCkge1xuICAgIHJldHVybiBNYXRoLmxvZyh4KSAqIE1hdGguTE9HMTBFO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///180\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.20 Math.log1p(x)\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', { log1p: __webpack_require__(107) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5sb2cxcC5qcz8wNDlmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDLDRCQUE0QixRQUFRLG1CQUFPLENBQUMsR0FBZSxHQUFHIiwiZmlsZSI6IjE4MS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDIwLjIuMi4yMCBNYXRoLmxvZzFwKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7IGxvZzFwOiByZXF1aXJlKCcuL19tYXRoLWxvZzFwJykgfSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///181\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.22 Math.log2(x)\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', {\n log2: function log2(x) {\n return Math.log(x) / Math.LN2;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5sb2cyLmpzP2E2OWYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVzs7QUFFakM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjE4Mi5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDIwLjIuMi4yMiBNYXRoLmxvZzIoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgbG9nMjogZnVuY3Rpb24gbG9nMih4KSB7XG4gICAgcmV0dXJuIE1hdGgubG9nKHgpIC8gTWF0aC5MTjI7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///182\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.28 Math.sign(x)\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', { sign: __webpack_require__(75) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5zaWduLmpzPzBiMjEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVzs7QUFFakMsNEJBQTRCLE9BQU8sbUJBQU8sQ0FBQyxFQUFjLEdBQUciLCJmaWxlIjoiMTgzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMi4yLjI4IE1hdGguc2lnbih4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywgeyBzaWduOiByZXF1aXJlKCcuL19tYXRoLXNpZ24nKSB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///183\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.30 Math.sinh(x)\nvar $export = __webpack_require__(0);\nvar expm1 = __webpack_require__(76);\nvar exp = Math.exp;\n\n// V8 near Chromium 38 has a problem with very small numbers\n$export($export.S + $export.F * __webpack_require__(3)(function () {\n return !Math.sinh(-2e-17) != -2e-17;\n}), 'Math', {\n sinh: function sinh(x) {\n return Math.abs(x = +x) < 1\n ? (expm1(x) - expm1(-x)) / 2\n : (exp(x - 1) - exp(-x - 1)) * (Math.E / 2);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5zaW5oLmpzPzZjMWEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxZQUFZLG1CQUFPLENBQUMsRUFBZTtBQUNuQzs7QUFFQTtBQUNBLGdDQUFnQyxtQkFBTyxDQUFDLENBQVU7QUFDbEQ7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTg0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMi4yLjMwIE1hdGguc2luaCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBleHBtMSA9IHJlcXVpcmUoJy4vX21hdGgtZXhwbTEnKTtcbnZhciBleHAgPSBNYXRoLmV4cDtcblxuLy8gVjggbmVhciBDaHJvbWl1bSAzOCBoYXMgYSBwcm9ibGVtIHdpdGggdmVyeSBzbWFsbCBudW1iZXJzXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gIU1hdGguc2luaCgtMmUtMTcpICE9IC0yZS0xNztcbn0pLCAnTWF0aCcsIHtcbiAgc2luaDogZnVuY3Rpb24gc2luaCh4KSB7XG4gICAgcmV0dXJuIE1hdGguYWJzKHggPSAreCkgPCAxXG4gICAgICA/IChleHBtMSh4KSAtIGV4cG0xKC14KSkgLyAyXG4gICAgICA6IChleHAoeCAtIDEpIC0gZXhwKC14IC0gMSkpICogKE1hdGguRSAvIDIpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///184\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.33 Math.tanh(x)\nvar $export = __webpack_require__(0);\nvar expm1 = __webpack_require__(76);\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n tanh: function tanh(x) {\n var a = expm1(x = +x);\n var b = expm1(-x);\n return a == Infinity ? 1 : b == Infinity ? -1 : (a - b) / (exp(x) + exp(-x));\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC50YW5oLmpzP2M3YzYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxZQUFZLG1CQUFPLENBQUMsRUFBZTtBQUNuQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjE4NS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDIwLjIuMi4zMyBNYXRoLnRhbmgoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZXhwbTEgPSByZXF1aXJlKCcuL19tYXRoLWV4cG0xJyk7XG52YXIgZXhwID0gTWF0aC5leHA7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgdGFuaDogZnVuY3Rpb24gdGFuaCh4KSB7XG4gICAgdmFyIGEgPSBleHBtMSh4ID0gK3gpO1xuICAgIHZhciBiID0gZXhwbTEoLXgpO1xuICAgIHJldHVybiBhID09IEluZmluaXR5ID8gMSA6IGIgPT0gSW5maW5pdHkgPyAtMSA6IChhIC0gYikgLyAoZXhwKHgpICsgZXhwKC14KSk7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///185\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.34 Math.trunc(x)\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', {\n trunc: function trunc(it) {\n return (it > 0 ? Math.floor : Math.ceil)(it);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC50cnVuYy5qcz84NGI0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIxODYuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyMC4yLjIuMzQgTWF0aC50cnVuYyh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICB0cnVuYzogZnVuY3Rpb24gdHJ1bmMoaXQpIHtcbiAgICByZXR1cm4gKGl0ID4gMCA/IE1hdGguZmxvb3IgOiBNYXRoLmNlaWwpKGl0KTtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///186\n")},function(module,exports,__webpack_require__){eval("var $export = __webpack_require__(0);\nvar toAbsoluteIndex = __webpack_require__(35);\nvar fromCharCode = String.fromCharCode;\nvar $fromCodePoint = String.fromCodePoint;\n\n// length should be 1, old FF problem\n$export($export.S + $export.F * (!!$fromCodePoint && $fromCodePoint.length != 1), 'String', {\n // 21.1.2.2 String.fromCodePoint(...codePoints)\n fromCodePoint: function fromCodePoint(x) { // eslint-disable-line no-unused-vars\n var res = [];\n var aLen = arguments.length;\n var i = 0;\n var code;\n while (aLen > i) {\n code = +arguments[i++];\n if (toAbsoluteIndex(code, 0x10ffff) !== code) throw RangeError(code + ' is not a valid code point');\n res.push(code < 0x10000\n ? fromCharCode(code)\n : fromCharCode(((code -= 0x10000) >> 10) + 0xd800, code % 0x400 + 0xdc00)\n );\n } return res.join('');\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmZyb20tY29kZS1wb2ludC5qcz81Njk1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLHNCQUFzQixtQkFBTyxDQUFDLEVBQXNCO0FBQ3BEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsNENBQTRDO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxDQUFDIiwiZmlsZSI6IjE4Ny5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi9fdG8tYWJzb2x1dGUtaW5kZXgnKTtcbnZhciBmcm9tQ2hhckNvZGUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlO1xudmFyICRmcm9tQ29kZVBvaW50ID0gU3RyaW5nLmZyb21Db2RlUG9pbnQ7XG5cbi8vIGxlbmd0aCBzaG91bGQgYmUgMSwgb2xkIEZGIHByb2JsZW1cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogKCEhJGZyb21Db2RlUG9pbnQgJiYgJGZyb21Db2RlUG9pbnQubGVuZ3RoICE9IDEpLCAnU3RyaW5nJywge1xuICAvLyAyMS4xLjIuMiBTdHJpbmcuZnJvbUNvZGVQb2ludCguLi5jb2RlUG9pbnRzKVxuICBmcm9tQ29kZVBvaW50OiBmdW5jdGlvbiBmcm9tQ29kZVBvaW50KHgpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgIHZhciByZXMgPSBbXTtcbiAgICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBjb2RlO1xuICAgIHdoaWxlIChhTGVuID4gaSkge1xuICAgICAgY29kZSA9ICthcmd1bWVudHNbaSsrXTtcbiAgICAgIGlmICh0b0Fic29sdXRlSW5kZXgoY29kZSwgMHgxMGZmZmYpICE9PSBjb2RlKSB0aHJvdyBSYW5nZUVycm9yKGNvZGUgKyAnIGlzIG5vdCBhIHZhbGlkIGNvZGUgcG9pbnQnKTtcbiAgICAgIHJlcy5wdXNoKGNvZGUgPCAweDEwMDAwXG4gICAgICAgID8gZnJvbUNoYXJDb2RlKGNvZGUpXG4gICAgICAgIDogZnJvbUNoYXJDb2RlKCgoY29kZSAtPSAweDEwMDAwKSA+PiAxMCkgKyAweGQ4MDAsIGNvZGUgJSAweDQwMCArIDB4ZGMwMClcbiAgICAgICk7XG4gICAgfSByZXR1cm4gcmVzLmpvaW4oJycpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///187\n")},function(module,exports,__webpack_require__){eval("var $export = __webpack_require__(0);\nvar toIObject = __webpack_require__(15);\nvar toLength = __webpack_require__(6);\n\n$export($export.S, 'String', {\n // 21.1.2.4 String.raw(callSite, ...substitutions)\n raw: function raw(callSite) {\n var tpl = toIObject(callSite.raw);\n var len = toLength(tpl.length);\n var aLen = arguments.length;\n var res = [];\n var i = 0;\n while (len > i) {\n res.push(String(tpl[i++]));\n if (i < aLen) res.push(String(arguments[i]));\n } return res.join('');\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnJhdy5qcz83ODhkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGdCQUFnQixtQkFBTyxDQUFDLEVBQWU7QUFDdkMsZUFBZSxtQkFBTyxDQUFDLENBQWM7O0FBRXJDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxDQUFDIiwiZmlsZSI6IjE4OC5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnU3RyaW5nJywge1xuICAvLyAyMS4xLjIuNCBTdHJpbmcucmF3KGNhbGxTaXRlLCAuLi5zdWJzdGl0dXRpb25zKVxuICByYXc6IGZ1bmN0aW9uIHJhdyhjYWxsU2l0ZSkge1xuICAgIHZhciB0cGwgPSB0b0lPYmplY3QoY2FsbFNpdGUucmF3KTtcbiAgICB2YXIgbGVuID0gdG9MZW5ndGgodHBsLmxlbmd0aCk7XG4gICAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciByZXMgPSBbXTtcbiAgICB2YXIgaSA9IDA7XG4gICAgd2hpbGUgKGxlbiA+IGkpIHtcbiAgICAgIHJlcy5wdXNoKFN0cmluZyh0cGxbaSsrXSkpO1xuICAgICAgaWYgKGkgPCBhTGVuKSByZXMucHVzaChTdHJpbmcoYXJndW1lbnRzW2ldKSk7XG4gICAgfSByZXR1cm4gcmVzLmpvaW4oJycpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///188\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// 21.1.3.25 String.prototype.trim()\n__webpack_require__(45)('trim', function ($trim) {\n return function trim() {\n return $trim(this, 3);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnRyaW0uanM/NGYzNyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsbUJBQU8sQ0FBQyxFQUFnQjtBQUN4QjtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjE4OS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIDIxLjEuMy4yNSBTdHJpbmcucHJvdG90eXBlLnRyaW0oKVxucmVxdWlyZSgnLi9fc3RyaW5nLXRyaW0nKSgndHJpbScsIGZ1bmN0aW9uICgkdHJpbSkge1xuICByZXR1cm4gZnVuY3Rpb24gdHJpbSgpIHtcbiAgICByZXR1cm4gJHRyaW0odGhpcywgMyk7XG4gIH07XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///189\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $at = __webpack_require__(55)(true);\n\n// 21.1.3.27 String.prototype[@@iterator]()\n__webpack_require__(77)(String, 'String', function (iterated) {\n this._t = String(iterated); // target\n this._i = 0; // next index\n// 21.1.5.2.1 %StringIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var index = this._i;\n var point;\n if (index >= O.length) return { value: undefined, done: true };\n point = $at(O, index);\n this._i += point.length;\n return { value: point, done: false };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLml0ZXJhdG9yLmpzPzVkZjMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixVQUFVLG1CQUFPLENBQUMsRUFBYzs7QUFFaEM7QUFDQSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3hCLDZCQUE2QjtBQUM3QixjQUFjO0FBQ2Q7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDO0FBQ2pDO0FBQ0E7QUFDQSxVQUFVO0FBQ1YsQ0FBQyIsImZpbGUiOiIxOTAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgJGF0ID0gcmVxdWlyZSgnLi9fc3RyaW5nLWF0JykodHJ1ZSk7XG5cbi8vIDIxLjEuMy4yNyBTdHJpbmcucHJvdG90eXBlW0BAaXRlcmF0b3JdKClcbnJlcXVpcmUoJy4vX2l0ZXItZGVmaW5lJykoU3RyaW5nLCAnU3RyaW5nJywgZnVuY3Rpb24gKGl0ZXJhdGVkKSB7XG4gIHRoaXMuX3QgPSBTdHJpbmcoaXRlcmF0ZWQpOyAvLyB0YXJnZXRcbiAgdGhpcy5faSA9IDA7ICAgICAgICAgICAgICAgIC8vIG5leHQgaW5kZXhcbi8vIDIxLjEuNS4yLjEgJVN0cmluZ0l0ZXJhdG9yUHJvdG90eXBlJS5uZXh0KClcbn0sIGZ1bmN0aW9uICgpIHtcbiAgdmFyIE8gPSB0aGlzLl90O1xuICB2YXIgaW5kZXggPSB0aGlzLl9pO1xuICB2YXIgcG9pbnQ7XG4gIGlmIChpbmRleCA+PSBPLmxlbmd0aCkgcmV0dXJuIHsgdmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1ZSB9O1xuICBwb2ludCA9ICRhdChPLCBpbmRleCk7XG4gIHRoaXMuX2kgKz0gcG9pbnQubGVuZ3RoO1xuICByZXR1cm4geyB2YWx1ZTogcG9pbnQsIGRvbmU6IGZhbHNlIH07XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///190\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar $at = __webpack_require__(55)(false);\n$export($export.P, 'String', {\n // 21.1.3.3 String.prototype.codePointAt(pos)\n codePointAt: function codePointAt(pos) {\n return $at(this, pos);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmNvZGUtcG9pbnQtYXQuanM/YTAzMiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLFVBQVUsbUJBQU8sQ0FBQyxFQUFjO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjE5MS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGF0ID0gcmVxdWlyZSgnLi9fc3RyaW5nLWF0JykoZmFsc2UpO1xuJGV4cG9ydCgkZXhwb3J0LlAsICdTdHJpbmcnLCB7XG4gIC8vIDIxLjEuMy4zIFN0cmluZy5wcm90b3R5cGUuY29kZVBvaW50QXQocG9zKVxuICBjb2RlUG9pbnRBdDogZnVuY3Rpb24gY29kZVBvaW50QXQocG9zKSB7XG4gICAgcmV0dXJuICRhdCh0aGlzLCBwb3MpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///191\n")},function(module,exports,__webpack_require__){"use strict";eval("// 21.1.3.6 String.prototype.endsWith(searchString [, endPosition])\n\nvar $export = __webpack_require__(0);\nvar toLength = __webpack_require__(6);\nvar context = __webpack_require__(79);\nvar ENDS_WITH = 'endsWith';\nvar $endsWith = ''[ENDS_WITH];\n\n$export($export.P + $export.F * __webpack_require__(80)(ENDS_WITH), 'String', {\n endsWith: function endsWith(searchString /* , endPosition = @length */) {\n var that = context(this, searchString, ENDS_WITH);\n var endPosition = arguments.length > 1 ? arguments[1] : undefined;\n var len = toLength(that.length);\n var end = endPosition === undefined ? len : Math.min(toLength(endPosition), len);\n var search = String(searchString);\n return $endsWith\n ? $endsWith.call(that, search, end)\n : that.slice(end - search.length, end) === search;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmVuZHMtd2l0aC5qcz9hZWY2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ2E7QUFDYixjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxjQUFjLG1CQUFPLENBQUMsRUFBbUI7QUFDekM7QUFDQTs7QUFFQSxnQ0FBZ0MsbUJBQU8sQ0FBQyxFQUFvQjtBQUM1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTkyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjEuMS4zLjYgU3RyaW5nLnByb3RvdHlwZS5lbmRzV2l0aChzZWFyY2hTdHJpbmcgWywgZW5kUG9zaXRpb25dKVxuJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGNvbnRleHQgPSByZXF1aXJlKCcuL19zdHJpbmctY29udGV4dCcpO1xudmFyIEVORFNfV0lUSCA9ICdlbmRzV2l0aCc7XG52YXIgJGVuZHNXaXRoID0gJydbRU5EU19XSVRIXTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscy1pcy1yZWdleHAnKShFTkRTX1dJVEgpLCAnU3RyaW5nJywge1xuICBlbmRzV2l0aDogZnVuY3Rpb24gZW5kc1dpdGgoc2VhcmNoU3RyaW5nIC8qICwgZW5kUG9zaXRpb24gPSBAbGVuZ3RoICovKSB7XG4gICAgdmFyIHRoYXQgPSBjb250ZXh0KHRoaXMsIHNlYXJjaFN0cmluZywgRU5EU19XSVRIKTtcbiAgICB2YXIgZW5kUG9zaXRpb24gPSBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgbGVuID0gdG9MZW5ndGgodGhhdC5sZW5ndGgpO1xuICAgIHZhciBlbmQgPSBlbmRQb3NpdGlvbiA9PT0gdW5kZWZpbmVkID8gbGVuIDogTWF0aC5taW4odG9MZW5ndGgoZW5kUG9zaXRpb24pLCBsZW4pO1xuICAgIHZhciBzZWFyY2ggPSBTdHJpbmcoc2VhcmNoU3RyaW5nKTtcbiAgICByZXR1cm4gJGVuZHNXaXRoXG4gICAgICA/ICRlbmRzV2l0aC5jYWxsKHRoYXQsIHNlYXJjaCwgZW5kKVxuICAgICAgOiB0aGF0LnNsaWNlKGVuZCAtIHNlYXJjaC5sZW5ndGgsIGVuZCkgPT09IHNlYXJjaDtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///192\n")},function(module,exports,__webpack_require__){"use strict";eval("// 21.1.3.7 String.prototype.includes(searchString, position = 0)\n\nvar $export = __webpack_require__(0);\nvar context = __webpack_require__(79);\nvar INCLUDES = 'includes';\n\n$export($export.P + $export.F * __webpack_require__(80)(INCLUDES), 'String', {\n includes: function includes(searchString /* , position = 0 */) {\n return !!~context(this, searchString, INCLUDES)\n .indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmluY2x1ZGVzLmpzPzJmZGIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDYTtBQUNiLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGNBQWMsbUJBQU8sQ0FBQyxFQUFtQjtBQUN6Qzs7QUFFQSxnQ0FBZ0MsbUJBQU8sQ0FBQyxFQUFvQjtBQUM1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTkzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjEuMS4zLjcgU3RyaW5nLnByb3RvdHlwZS5pbmNsdWRlcyhzZWFyY2hTdHJpbmcsIHBvc2l0aW9uID0gMClcbid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgY29udGV4dCA9IHJlcXVpcmUoJy4vX3N0cmluZy1jb250ZXh0Jyk7XG52YXIgSU5DTFVERVMgPSAnaW5jbHVkZXMnO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzLWlzLXJlZ2V4cCcpKElOQ0xVREVTKSwgJ1N0cmluZycsIHtcbiAgaW5jbHVkZXM6IGZ1bmN0aW9uIGluY2x1ZGVzKHNlYXJjaFN0cmluZyAvKiAsIHBvc2l0aW9uID0gMCAqLykge1xuICAgIHJldHVybiAhIX5jb250ZXh0KHRoaXMsIHNlYXJjaFN0cmluZywgSU5DTFVERVMpXG4gICAgICAuaW5kZXhPZihzZWFyY2hTdHJpbmcsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///193\n")},function(module,exports,__webpack_require__){eval("var $export = __webpack_require__(0);\n\n$export($export.P, 'String', {\n // 21.1.3.13 String.prototype.repeat(count)\n repeat: __webpack_require__(74)\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnJlcGVhdC5qcz8xNGI5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXOztBQUVqQztBQUNBO0FBQ0EsVUFBVSxtQkFBTyxDQUFDLEVBQWtCO0FBQ3BDLENBQUMiLCJmaWxlIjoiMTk0LmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdTdHJpbmcnLCB7XG4gIC8vIDIxLjEuMy4xMyBTdHJpbmcucHJvdG90eXBlLnJlcGVhdChjb3VudClcbiAgcmVwZWF0OiByZXF1aXJlKCcuL19zdHJpbmctcmVwZWF0Jylcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///194\n")},function(module,exports,__webpack_require__){"use strict";eval("// 21.1.3.18 String.prototype.startsWith(searchString [, position ])\n\nvar $export = __webpack_require__(0);\nvar toLength = __webpack_require__(6);\nvar context = __webpack_require__(79);\nvar STARTS_WITH = 'startsWith';\nvar $startsWith = ''[STARTS_WITH];\n\n$export($export.P + $export.F * __webpack_require__(80)(STARTS_WITH), 'String', {\n startsWith: function startsWith(searchString /* , position = 0 */) {\n var that = context(this, searchString, STARTS_WITH);\n var index = toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length));\n var search = String(searchString);\n return $startsWith\n ? $startsWith.call(that, search, index)\n : that.slice(index, index + search.length) === search;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnN0YXJ0cy13aXRoLmpzP2Y1NTkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDYTtBQUNiLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGNBQWMsbUJBQU8sQ0FBQyxFQUFtQjtBQUN6QztBQUNBOztBQUVBLGdDQUFnQyxtQkFBTyxDQUFDLEVBQW9CO0FBQzVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjE5NS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDIxLjEuMy4xOCBTdHJpbmcucHJvdG90eXBlLnN0YXJ0c1dpdGgoc2VhcmNoU3RyaW5nIFssIHBvc2l0aW9uIF0pXG4ndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgY29udGV4dCA9IHJlcXVpcmUoJy4vX3N0cmluZy1jb250ZXh0Jyk7XG52YXIgU1RBUlRTX1dJVEggPSAnc3RhcnRzV2l0aCc7XG52YXIgJHN0YXJ0c1dpdGggPSAnJ1tTVEFSVFNfV0lUSF07XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMtaXMtcmVnZXhwJykoU1RBUlRTX1dJVEgpLCAnU3RyaW5nJywge1xuICBzdGFydHNXaXRoOiBmdW5jdGlvbiBzdGFydHNXaXRoKHNlYXJjaFN0cmluZyAvKiAsIHBvc2l0aW9uID0gMCAqLykge1xuICAgIHZhciB0aGF0ID0gY29udGV4dCh0aGlzLCBzZWFyY2hTdHJpbmcsIFNUQVJUU19XSVRIKTtcbiAgICB2YXIgaW5kZXggPSB0b0xlbmd0aChNYXRoLm1pbihhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCwgdGhhdC5sZW5ndGgpKTtcbiAgICB2YXIgc2VhcmNoID0gU3RyaW5nKHNlYXJjaFN0cmluZyk7XG4gICAgcmV0dXJuICRzdGFydHNXaXRoXG4gICAgICA/ICRzdGFydHNXaXRoLmNhbGwodGhhdCwgc2VhcmNoLCBpbmRleClcbiAgICAgIDogdGhhdC5zbGljZShpbmRleCwgaW5kZXggKyBzZWFyY2gubGVuZ3RoKSA9PT0gc2VhcmNoO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///195\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// B.2.3.2 String.prototype.anchor(name)\n__webpack_require__(13)('anchor', function (createHTML) {\n return function anchor(name) {\n return createHTML(this, 'a', 'name', name);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmFuY2hvci5qcz84NDQ5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTk2LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuMiBTdHJpbmcucHJvdG90eXBlLmFuY2hvcihuYW1lKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnYW5jaG9yJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGFuY2hvcihuYW1lKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ2EnLCAnbmFtZScsIG5hbWUpO1xuICB9O1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///196\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// B.2.3.3 String.prototype.big()\n__webpack_require__(13)('big', function (createHTML) {\n return function big() {\n return createHTML(this, 'big', '', '');\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmJpZy5qcz85Yzg2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTk3LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuMyBTdHJpbmcucHJvdG90eXBlLmJpZygpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdiaWcnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gYmlnKCkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdiaWcnLCAnJywgJycpO1xuICB9O1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///197\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// B.2.3.4 String.prototype.blink()\n__webpack_require__(13)('blink', function (createHTML) {\n return function blink() {\n return createHTML(this, 'blink', '', '');\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmJsaW5rLmpzP2ZhODMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBLG1CQUFPLENBQUMsRUFBZ0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIxOTguanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy40IFN0cmluZy5wcm90b3R5cGUuYmxpbmsoKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnYmxpbmsnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gYmxpbmsoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ2JsaW5rJywgJycsICcnKTtcbiAgfTtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///198\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// B.2.3.5 String.prototype.bold()\n__webpack_require__(13)('bold', function (createHTML) {\n return function bold() {\n return createHTML(this, 'b', '', '');\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmJvbGQuanM/NDhjMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsbUJBQU8sQ0FBQyxFQUFnQjtBQUN4QjtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjE5OS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjUgU3RyaW5nLnByb3RvdHlwZS5ib2xkKClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ2JvbGQnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gYm9sZCgpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnYicsICcnLCAnJyk7XG4gIH07XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///199\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// B.2.3.6 String.prototype.fixed()\n__webpack_require__(13)('fixed', function (createHTML) {\n return function fixed() {\n return createHTML(this, 'tt', '', '');\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmZpeGVkLmpzP2QyNjMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBLG1CQUFPLENBQUMsRUFBZ0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyMDAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy42IFN0cmluZy5wcm90b3R5cGUuZml4ZWQoKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnZml4ZWQnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gZml4ZWQoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ3R0JywgJycsICcnKTtcbiAgfTtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///200\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// B.2.3.7 String.prototype.fontcolor(color)\n__webpack_require__(13)('fontcolor', function (createHTML) {\n return function fontcolor(color) {\n return createHTML(this, 'font', 'color', color);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmZvbnRjb2xvci5qcz82YzM3Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjAxLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuNyBTdHJpbmcucHJvdG90eXBlLmZvbnRjb2xvcihjb2xvcilcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ2ZvbnRjb2xvcicsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBmb250Y29sb3IoY29sb3IpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnZm9udCcsICdjb2xvcicsIGNvbG9yKTtcbiAgfTtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///201\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// B.2.3.8 String.prototype.fontsize(size)\n__webpack_require__(13)('fontsize', function (createHTML) {\n return function fontsize(size) {\n return createHTML(this, 'font', 'size', size);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmZvbnRzaXplLmpzPzllYzgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBLG1CQUFPLENBQUMsRUFBZ0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyMDIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy44IFN0cmluZy5wcm90b3R5cGUuZm9udHNpemUoc2l6ZSlcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ2ZvbnRzaXplJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGZvbnRzaXplKHNpemUpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnZm9udCcsICdzaXplJywgc2l6ZSk7XG4gIH07XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///202\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// B.2.3.9 String.prototype.italics()\n__webpack_require__(13)('italics', function (createHTML) {\n return function italics() {\n return createHTML(this, 'i', '', '');\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLml0YWxpY3MuanM/ZDBiMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsbUJBQU8sQ0FBQyxFQUFnQjtBQUN4QjtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjIwMy5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjkgU3RyaW5nLnByb3RvdHlwZS5pdGFsaWNzKClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ2l0YWxpY3MnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gaXRhbGljcygpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnaScsICcnLCAnJyk7XG4gIH07XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///203\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// B.2.3.10 String.prototype.link(url)\n__webpack_require__(13)('link', function (createHTML) {\n return function link(url) {\n return createHTML(this, 'a', 'href', url);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmxpbmsuanM/YjU0YSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsbUJBQU8sQ0FBQyxFQUFnQjtBQUN4QjtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjIwNC5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjEwIFN0cmluZy5wcm90b3R5cGUubGluayh1cmwpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdsaW5rJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGxpbmsodXJsKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ2EnLCAnaHJlZicsIHVybCk7XG4gIH07XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///204\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// B.2.3.11 String.prototype.small()\n__webpack_require__(13)('small', function (createHTML) {\n return function small() {\n return createHTML(this, 'small', '', '');\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnNtYWxsLmpzP2YzODYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBLG1CQUFPLENBQUMsRUFBZ0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyMDUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy4xMSBTdHJpbmcucHJvdG90eXBlLnNtYWxsKClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ3NtYWxsJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHNtYWxsKCkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdzbWFsbCcsICcnLCAnJyk7XG4gIH07XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///205\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// B.2.3.12 String.prototype.strike()\n__webpack_require__(13)('strike', function (createHTML) {\n return function strike() {\n return createHTML(this, 'strike', '', '');\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnN0cmlrZS5qcz8xNDQ4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjA2LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuMTIgU3RyaW5nLnByb3RvdHlwZS5zdHJpa2UoKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnc3RyaWtlJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHN0cmlrZSgpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnc3RyaWtlJywgJycsICcnKTtcbiAgfTtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///206\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// B.2.3.13 String.prototype.sub()\n__webpack_require__(13)('sub', function (createHTML) {\n return function sub() {\n return createHTML(this, 'sub', '', '');\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnN1Yi5qcz82NzNlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjA3LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuMTMgU3RyaW5nLnByb3RvdHlwZS5zdWIoKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnc3ViJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHN1YigpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnc3ViJywgJycsICcnKTtcbiAgfTtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///207\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// B.2.3.14 String.prototype.sup()\n__webpack_require__(13)('sup', function (createHTML) {\n return function sup() {\n return createHTML(this, 'sup', '', '');\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnN1cC5qcz8yNDJhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjA4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuMTQgU3RyaW5nLnByb3RvdHlwZS5zdXAoKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnc3VwJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHN1cCgpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnc3VwJywgJycsICcnKTtcbiAgfTtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///208\n")},function(module,exports,__webpack_require__){eval("// 20.3.3.1 / 15.9.4.4 Date.now()\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Date', { now: function () { return new Date().getTime(); } });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZGF0ZS5ub3cuanM/NzhjZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXOztBQUVqQyw0QkFBNEIsbUJBQW1CLDZCQUE2QixFQUFFLEVBQUUiLCJmaWxlIjoiMjA5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMy4zLjEgLyAxNS45LjQuNCBEYXRlLm5vdygpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ0RhdGUnLCB7IG5vdzogZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IERhdGUoKS5nZXRUaW1lKCk7IH0gfSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///209\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar toObject = __webpack_require__(9);\nvar toPrimitive = __webpack_require__(23);\n\n$export($export.P + $export.F * __webpack_require__(3)(function () {\n return new Date(NaN).toJSON() !== null\n || Date.prototype.toJSON.call({ toISOString: function () { return 1; } }) !== 1;\n}), 'Date', {\n // eslint-disable-next-line no-unused-vars\n toJSON: function toJSON(key) {\n var O = toObject(this);\n var pv = toPrimitive(O);\n return typeof pv == 'number' && !isFinite(pv) ? null : O.toISOString();\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZGF0ZS50by1qc29uLmpzPzAyOTgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxrQkFBa0IsbUJBQU8sQ0FBQyxFQUFpQjs7QUFFM0MsZ0NBQWdDLG1CQUFPLENBQUMsQ0FBVTtBQUNsRDtBQUNBLG1DQUFtQywyQkFBMkIsVUFBVSxFQUFFLEVBQUU7QUFDNUUsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjEwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBuZXcgRGF0ZShOYU4pLnRvSlNPTigpICE9PSBudWxsXG4gICAgfHwgRGF0ZS5wcm90b3R5cGUudG9KU09OLmNhbGwoeyB0b0lTT1N0cmluZzogZnVuY3Rpb24gKCkgeyByZXR1cm4gMTsgfSB9KSAhPT0gMTtcbn0pLCAnRGF0ZScsIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gIHRvSlNPTjogZnVuY3Rpb24gdG9KU09OKGtleSkge1xuICAgIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gICAgdmFyIHB2ID0gdG9QcmltaXRpdmUoTyk7XG4gICAgcmV0dXJuIHR5cGVvZiBwdiA9PSAnbnVtYmVyJyAmJiAhaXNGaW5pdGUocHYpID8gbnVsbCA6IE8udG9JU09TdHJpbmcoKTtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///210\n")},function(module,exports,__webpack_require__){eval("// 20.3.4.36 / 15.9.5.43 Date.prototype.toISOString()\nvar $export = __webpack_require__(0);\nvar toISOString = __webpack_require__(212);\n\n// PhantomJS / old WebKit has a broken implementations\n$export($export.P + $export.F * (Date.prototype.toISOString !== toISOString), 'Date', {\n toISOString: toISOString\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZGF0ZS50by1pc28tc3RyaW5nLmpzPzhlYTUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxrQkFBa0IsbUJBQU8sQ0FBQyxHQUF1Qjs7QUFFakQ7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyMTEuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyMC4zLjQuMzYgLyAxNS45LjUuNDMgRGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmcoKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b0lTT1N0cmluZyA9IHJlcXVpcmUoJy4vX2RhdGUtdG8taXNvLXN0cmluZycpO1xuXG4vLyBQaGFudG9tSlMgLyBvbGQgV2ViS2l0IGhhcyBhIGJyb2tlbiBpbXBsZW1lbnRhdGlvbnNcbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKERhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nICE9PSB0b0lTT1N0cmluZyksICdEYXRlJywge1xuICB0b0lTT1N0cmluZzogdG9JU09TdHJpbmdcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///211\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// 20.3.4.36 / 15.9.5.43 Date.prototype.toISOString()\nvar fails = __webpack_require__(3);\nvar getTime = Date.prototype.getTime;\nvar $toISOString = Date.prototype.toISOString;\n\nvar lz = function (num) {\n return num > 9 ? num : '0' + num;\n};\n\n// PhantomJS / old WebKit has a broken implementations\nmodule.exports = (fails(function () {\n return $toISOString.call(new Date(-5e13 - 1)) != '0385-07-25T07:06:39.999Z';\n}) || !fails(function () {\n $toISOString.call(new Date(NaN));\n})) ? function toISOString() {\n if (!isFinite(getTime.call(this))) throw RangeError('Invalid time value');\n var d = this;\n var y = d.getUTCFullYear();\n var m = d.getUTCMilliseconds();\n var s = y < 0 ? '-' : y > 9999 ? '+' : '';\n return s + ('00000' + Math.abs(y)).slice(s ? -6 : -4) +\n '-' + lz(d.getUTCMonth() + 1) + '-' + lz(d.getUTCDate()) +\n 'T' + lz(d.getUTCHours()) + ':' + lz(d.getUTCMinutes()) +\n ':' + lz(d.getUTCSeconds()) + '.' + (m > 99 ? m : '0' + lz(m)) + 'Z';\n} : $toISOString;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZGF0ZS10by1pc28tc3RyaW5nLmpzPzhlZDAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBLFlBQVksbUJBQU8sQ0FBQyxDQUFVO0FBQzlCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjIxMi5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIDIwLjMuNC4zNiAvIDE1LjkuNS40MyBEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZygpXG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIGdldFRpbWUgPSBEYXRlLnByb3RvdHlwZS5nZXRUaW1lO1xudmFyICR0b0lTT1N0cmluZyA9IERhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nO1xuXG52YXIgbHogPSBmdW5jdGlvbiAobnVtKSB7XG4gIHJldHVybiBudW0gPiA5ID8gbnVtIDogJzAnICsgbnVtO1xufTtcblxuLy8gUGhhbnRvbUpTIC8gb2xkIFdlYktpdCBoYXMgYSBicm9rZW4gaW1wbGVtZW50YXRpb25zXG5tb2R1bGUuZXhwb3J0cyA9IChmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAkdG9JU09TdHJpbmcuY2FsbChuZXcgRGF0ZSgtNWUxMyAtIDEpKSAhPSAnMDM4NS0wNy0yNVQwNzowNjozOS45OTlaJztcbn0pIHx8ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICR0b0lTT1N0cmluZy5jYWxsKG5ldyBEYXRlKE5hTikpO1xufSkpID8gZnVuY3Rpb24gdG9JU09TdHJpbmcoKSB7XG4gIGlmICghaXNGaW5pdGUoZ2V0VGltZS5jYWxsKHRoaXMpKSkgdGhyb3cgUmFuZ2VFcnJvcignSW52YWxpZCB0aW1lIHZhbHVlJyk7XG4gIHZhciBkID0gdGhpcztcbiAgdmFyIHkgPSBkLmdldFVUQ0Z1bGxZZWFyKCk7XG4gIHZhciBtID0gZC5nZXRVVENNaWxsaXNlY29uZHMoKTtcbiAgdmFyIHMgPSB5IDwgMCA/ICctJyA6IHkgPiA5OTk5ID8gJysnIDogJyc7XG4gIHJldHVybiBzICsgKCcwMDAwMCcgKyBNYXRoLmFicyh5KSkuc2xpY2UocyA/IC02IDogLTQpICtcbiAgICAnLScgKyBseihkLmdldFVUQ01vbnRoKCkgKyAxKSArICctJyArIGx6KGQuZ2V0VVRDRGF0ZSgpKSArXG4gICAgJ1QnICsgbHooZC5nZXRVVENIb3VycygpKSArICc6JyArIGx6KGQuZ2V0VVRDTWludXRlcygpKSArXG4gICAgJzonICsgbHooZC5nZXRVVENTZWNvbmRzKCkpICsgJy4nICsgKG0gPiA5OSA/IG0gOiAnMCcgKyBseihtKSkgKyAnWic7XG59IDogJHRvSVNPU3RyaW5nO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///212\n")},function(module,exports,__webpack_require__){eval("var DateProto = Date.prototype;\nvar INVALID_DATE = 'Invalid Date';\nvar TO_STRING = 'toString';\nvar $toString = DateProto[TO_STRING];\nvar getTime = DateProto.getTime;\nif (new Date(NaN) + '' != INVALID_DATE) {\n __webpack_require__(12)(DateProto, TO_STRING, function toString() {\n var value = getTime.call(this);\n // eslint-disable-next-line no-self-compare\n return value === value ? $toString.call(this) : INVALID_DATE;\n });\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZGF0ZS50by1zdHJpbmcuanM/ODdiMyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLG1CQUFPLENBQUMsRUFBYTtBQUN2QjtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0giLCJmaWxlIjoiMjEzLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIERhdGVQcm90byA9IERhdGUucHJvdG90eXBlO1xudmFyIElOVkFMSURfREFURSA9ICdJbnZhbGlkIERhdGUnO1xudmFyIFRPX1NUUklORyA9ICd0b1N0cmluZyc7XG52YXIgJHRvU3RyaW5nID0gRGF0ZVByb3RvW1RPX1NUUklOR107XG52YXIgZ2V0VGltZSA9IERhdGVQcm90by5nZXRUaW1lO1xuaWYgKG5ldyBEYXRlKE5hTikgKyAnJyAhPSBJTlZBTElEX0RBVEUpIHtcbiAgcmVxdWlyZSgnLi9fcmVkZWZpbmUnKShEYXRlUHJvdG8sIFRPX1NUUklORywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgdmFyIHZhbHVlID0gZ2V0VGltZS5jYWxsKHRoaXMpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICByZXR1cm4gdmFsdWUgPT09IHZhbHVlID8gJHRvU3RyaW5nLmNhbGwodGhpcykgOiBJTlZBTElEX0RBVEU7XG4gIH0pO1xufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///213\n")},function(module,exports,__webpack_require__){eval("var TO_PRIMITIVE = __webpack_require__(5)('toPrimitive');\nvar proto = Date.prototype;\n\nif (!(TO_PRIMITIVE in proto)) __webpack_require__(11)(proto, TO_PRIMITIVE, __webpack_require__(215));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZGF0ZS50by1wcmltaXRpdmUuanM/YzhjZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxtQkFBbUIsbUJBQU8sQ0FBQyxDQUFRO0FBQ25DOztBQUVBLDhCQUE4QixtQkFBTyxDQUFDLEVBQVMsdUJBQXVCLG1CQUFPLENBQUMsR0FBc0IiLCJmaWxlIjoiMjE0LmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIFRPX1BSSU1JVElWRSA9IHJlcXVpcmUoJy4vX3drcycpKCd0b1ByaW1pdGl2ZScpO1xudmFyIHByb3RvID0gRGF0ZS5wcm90b3R5cGU7XG5cbmlmICghKFRPX1BSSU1JVElWRSBpbiBwcm90bykpIHJlcXVpcmUoJy4vX2hpZGUnKShwcm90bywgVE9fUFJJTUlUSVZFLCByZXF1aXJlKCcuL19kYXRlLXRvLXByaW1pdGl2ZScpKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///214\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar anObject = __webpack_require__(1);\nvar toPrimitive = __webpack_require__(23);\nvar NUMBER = 'number';\n\nmodule.exports = function (hint) {\n if (hint !== 'string' && hint !== NUMBER && hint !== 'default') throw TypeError('Incorrect hint');\n return toPrimitive(anObject(this), hint != NUMBER);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZGF0ZS10by1wcmltaXRpdmUuanM/ODM4MSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGtCQUFrQixtQkFBTyxDQUFDLEVBQWlCO0FBQzNDOztBQUVBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjIxNS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG52YXIgTlVNQkVSID0gJ251bWJlcic7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGhpbnQpIHtcbiAgaWYgKGhpbnQgIT09ICdzdHJpbmcnICYmIGhpbnQgIT09IE5VTUJFUiAmJiBoaW50ICE9PSAnZGVmYXVsdCcpIHRocm93IFR5cGVFcnJvcignSW5jb3JyZWN0IGhpbnQnKTtcbiAgcmV0dXJuIHRvUHJpbWl0aXZlKGFuT2JqZWN0KHRoaXMpLCBoaW50ICE9IE5VTUJFUik7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///215\n")},function(module,exports,__webpack_require__){eval("// 22.1.2.2 / 15.4.3.2 Array.isArray(arg)\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Array', { isArray: __webpack_require__(54) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuaXMtYXJyYXkuanM/MmNhZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXOztBQUVqQyw2QkFBNkIsVUFBVSxtQkFBTyxDQUFDLEVBQWEsR0FBRyIsImZpbGUiOiIyMTYuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyMi4xLjIuMiAvIDE1LjQuMy4yIEFycmF5LmlzQXJyYXkoYXJnKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdBcnJheScsIHsgaXNBcnJheTogcmVxdWlyZSgnLi9faXMtYXJyYXknKSB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///216\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar ctx = __webpack_require__(19);\nvar $export = __webpack_require__(0);\nvar toObject = __webpack_require__(9);\nvar call = __webpack_require__(109);\nvar isArrayIter = __webpack_require__(81);\nvar toLength = __webpack_require__(6);\nvar createProperty = __webpack_require__(82);\nvar getIterFn = __webpack_require__(83);\n\n$export($export.S + $export.F * !__webpack_require__(57)(function (iter) { Array.from(iter); }), 'Array', {\n // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)\n from: function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n var O = toObject(arrayLike);\n var C = typeof this == 'function' ? this : Array;\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var index = 0;\n var iterFn = getIterFn(O);\n var length, result, step, iterator;\n if (mapping) mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);\n // if object isn't iterable or it's array with default iterator - use simple case\n if (iterFn != undefined && !(C == Array && isArrayIter(iterFn))) {\n for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) {\n createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);\n }\n } else {\n length = toLength(O.length);\n for (result = new C(length); length > index; index++) {\n createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);\n }\n }\n result.length = index;\n return result;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZnJvbS5qcz8xYzRjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsVUFBVSxtQkFBTyxDQUFDLEVBQVE7QUFDMUIsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsV0FBVyxtQkFBTyxDQUFDLEdBQWM7QUFDakMsa0JBQWtCLG1CQUFPLENBQUMsRUFBa0I7QUFDNUMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMscUJBQXFCLG1CQUFPLENBQUMsRUFBb0I7QUFDakQsZ0JBQWdCLG1CQUFPLENBQUMsRUFBNEI7O0FBRXBELGlDQUFpQyxtQkFBTyxDQUFDLEVBQWdCLG1CQUFtQixrQkFBa0IsRUFBRTtBQUNoRztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVEQUF1RCxnQ0FBZ0M7QUFDdkY7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLGtDQUFrQyxnQkFBZ0I7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyMTcuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4vX2l0ZXItY2FsbCcpO1xudmFyIGlzQXJyYXlJdGVyID0gcmVxdWlyZSgnLi9faXMtYXJyYXktaXRlcicpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSByZXF1aXJlKCcuL19jcmVhdGUtcHJvcGVydHknKTtcbnZhciBnZXRJdGVyRm4gPSByZXF1aXJlKCcuL2NvcmUuZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19pdGVyLWRldGVjdCcpKGZ1bmN0aW9uIChpdGVyKSB7IEFycmF5LmZyb20oaXRlcik7IH0pLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMi4xIEFycmF5LmZyb20oYXJyYXlMaWtlLCBtYXBmbiA9IHVuZGVmaW5lZCwgdGhpc0FyZyA9IHVuZGVmaW5lZClcbiAgZnJvbTogZnVuY3Rpb24gZnJvbShhcnJheUxpa2UgLyogLCBtYXBmbiA9IHVuZGVmaW5lZCwgdGhpc0FyZyA9IHVuZGVmaW5lZCAqLykge1xuICAgIHZhciBPID0gdG9PYmplY3QoYXJyYXlMaWtlKTtcbiAgICB2YXIgQyA9IHR5cGVvZiB0aGlzID09ICdmdW5jdGlvbicgPyB0aGlzIDogQXJyYXk7XG4gICAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBtYXBmbiA9IGFMZW4gPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkO1xuICAgIHZhciBtYXBwaW5nID0gbWFwZm4gIT09IHVuZGVmaW5lZDtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciBpdGVyRm4gPSBnZXRJdGVyRm4oTyk7XG4gICAgdmFyIGxlbmd0aCwgcmVzdWx0LCBzdGVwLCBpdGVyYXRvcjtcbiAgICBpZiAobWFwcGluZykgbWFwZm4gPSBjdHgobWFwZm4sIGFMZW4gPiAyID8gYXJndW1lbnRzWzJdIDogdW5kZWZpbmVkLCAyKTtcbiAgICAvLyBpZiBvYmplY3QgaXNuJ3QgaXRlcmFibGUgb3IgaXQncyBhcnJheSB3aXRoIGRlZmF1bHQgaXRlcmF0b3IgLSB1c2Ugc2ltcGxlIGNhc2VcbiAgICBpZiAoaXRlckZuICE9IHVuZGVmaW5lZCAmJiAhKEMgPT0gQXJyYXkgJiYgaXNBcnJheUl0ZXIoaXRlckZuKSkpIHtcbiAgICAgIGZvciAoaXRlcmF0b3IgPSBpdGVyRm4uY2FsbChPKSwgcmVzdWx0ID0gbmV3IEMoKTsgIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lOyBpbmRleCsrKSB7XG4gICAgICAgIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwgaW5kZXgsIG1hcHBpbmcgPyBjYWxsKGl0ZXJhdG9yLCBtYXBmbiwgW3N0ZXAudmFsdWUsIGluZGV4XSwgdHJ1ZSkgOiBzdGVwLnZhbHVlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICAgICAgZm9yIChyZXN1bHQgPSBuZXcgQyhsZW5ndGgpOyBsZW5ndGggPiBpbmRleDsgaW5kZXgrKykge1xuICAgICAgICBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIGluZGV4LCBtYXBwaW5nID8gbWFwZm4oT1tpbmRleF0sIGluZGV4KSA6IE9baW5kZXhdKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmVzdWx0Lmxlbmd0aCA9IGluZGV4O1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///217\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar createProperty = __webpack_require__(82);\n\n// WebKit Array.of isn't generic\n$export($export.S + $export.F * __webpack_require__(3)(function () {\n function F() { /* empty */ }\n return !(Array.of.call(F) instanceof F);\n}), 'Array', {\n // 22.1.2.3 Array.of( ...items)\n of: function of(/* ...args */) {\n var index = 0;\n var aLen = arguments.length;\n var result = new (typeof this == 'function' ? this : Array)(aLen);\n while (aLen > index) createProperty(result, index, arguments[index++]);\n result.length = aLen;\n return result;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkub2YuanM/ZTgwNCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLHFCQUFxQixtQkFBTyxDQUFDLEVBQW9COztBQUVqRDtBQUNBLGdDQUFnQyxtQkFBTyxDQUFDLENBQVU7QUFDbEQsZ0JBQWdCO0FBQ2hCO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjE4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX2NyZWF0ZS1wcm9wZXJ0eScpO1xuXG4vLyBXZWJLaXQgQXJyYXkub2YgaXNuJ3QgZ2VuZXJpY1xuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gRigpIHsgLyogZW1wdHkgKi8gfVxuICByZXR1cm4gIShBcnJheS5vZi5jYWxsKEYpIGluc3RhbmNlb2YgRik7XG59KSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjIuMyBBcnJheS5vZiggLi4uaXRlbXMpXG4gIG9mOiBmdW5jdGlvbiBvZigvKiAuLi5hcmdzICovKSB7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIHJlc3VsdCA9IG5ldyAodHlwZW9mIHRoaXMgPT0gJ2Z1bmN0aW9uJyA/IHRoaXMgOiBBcnJheSkoYUxlbik7XG4gICAgd2hpbGUgKGFMZW4gPiBpbmRleCkgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBpbmRleCwgYXJndW1lbnRzW2luZGV4KytdKTtcbiAgICByZXN1bHQubGVuZ3RoID0gYUxlbjtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///218\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// 22.1.3.13 Array.prototype.join(separator)\nvar $export = __webpack_require__(0);\nvar toIObject = __webpack_require__(15);\nvar arrayJoin = [].join;\n\n// fallback for not array-like strings\n$export($export.P + $export.F * (__webpack_require__(48) != Object || !__webpack_require__(22)(arrayJoin)), 'Array', {\n join: function join(separator) {\n return arrayJoin.call(toIObject(this), separator === undefined ? ',' : separator);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuam9pbi5qcz8zNzNmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDOztBQUVBO0FBQ0EsaUNBQWlDLG1CQUFPLENBQUMsRUFBWSxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFrQjtBQUMvRjtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjIxOS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIDIyLjEuMy4xMyBBcnJheS5wcm90b3R5cGUuam9pbihzZXBhcmF0b3IpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciBhcnJheUpvaW4gPSBbXS5qb2luO1xuXG4vLyBmYWxsYmFjayBmb3Igbm90IGFycmF5LWxpa2Ugc3RyaW5nc1xuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAocmVxdWlyZSgnLi9faW9iamVjdCcpICE9IE9iamVjdCB8fCAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKGFycmF5Sm9pbikpLCAnQXJyYXknLCB7XG4gIGpvaW46IGZ1bmN0aW9uIGpvaW4oc2VwYXJhdG9yKSB7XG4gICAgcmV0dXJuIGFycmF5Sm9pbi5jYWxsKHRvSU9iamVjdCh0aGlzKSwgc2VwYXJhdG9yID09PSB1bmRlZmluZWQgPyAnLCcgOiBzZXBhcmF0b3IpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///219\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar html = __webpack_require__(70);\nvar cof = __webpack_require__(20);\nvar toAbsoluteIndex = __webpack_require__(35);\nvar toLength = __webpack_require__(6);\nvar arraySlice = [].slice;\n\n// fallback for not array-like ES3 strings and DOM objects\n$export($export.P + $export.F * __webpack_require__(3)(function () {\n if (html) arraySlice.call(html);\n}), 'Array', {\n slice: function slice(begin, end) {\n var len = toLength(this.length);\n var klass = cof(this);\n end = end === undefined ? len : end;\n if (klass == 'Array') return arraySlice.call(this, begin, end);\n var start = toAbsoluteIndex(begin, len);\n var upTo = toAbsoluteIndex(end, len);\n var size = toLength(upTo - start);\n var cloned = new Array(size);\n var i = 0;\n for (; i < size; i++) cloned[i] = klass == 'String'\n ? this.charAt(start + i)\n : this[start + i];\n return cloned;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuc2xpY2UuanM/MjNiZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLFdBQVcsbUJBQU8sQ0FBQyxFQUFTO0FBQzVCLFVBQVUsbUJBQU8sQ0FBQyxFQUFRO0FBQzFCLHNCQUFzQixtQkFBTyxDQUFDLEVBQXNCO0FBQ3BELGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDOztBQUVBO0FBQ0EsZ0NBQWdDLG1CQUFPLENBQUMsQ0FBVTtBQUNsRDtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsVUFBVTtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjIwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBodG1sID0gcmVxdWlyZSgnLi9faHRtbCcpO1xudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4vX3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBhcnJheVNsaWNlID0gW10uc2xpY2U7XG5cbi8vIGZhbGxiYWNrIGZvciBub3QgYXJyYXktbGlrZSBFUzMgc3RyaW5ncyBhbmQgRE9NIG9iamVjdHNcbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIGlmIChodG1sKSBhcnJheVNsaWNlLmNhbGwoaHRtbCk7XG59KSwgJ0FycmF5Jywge1xuICBzbGljZTogZnVuY3Rpb24gc2xpY2UoYmVnaW4sIGVuZCkge1xuICAgIHZhciBsZW4gPSB0b0xlbmd0aCh0aGlzLmxlbmd0aCk7XG4gICAgdmFyIGtsYXNzID0gY29mKHRoaXMpO1xuICAgIGVuZCA9IGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuIDogZW5kO1xuICAgIGlmIChrbGFzcyA9PSAnQXJyYXknKSByZXR1cm4gYXJyYXlTbGljZS5jYWxsKHRoaXMsIGJlZ2luLCBlbmQpO1xuICAgIHZhciBzdGFydCA9IHRvQWJzb2x1dGVJbmRleChiZWdpbiwgbGVuKTtcbiAgICB2YXIgdXBUbyA9IHRvQWJzb2x1dGVJbmRleChlbmQsIGxlbik7XG4gICAgdmFyIHNpemUgPSB0b0xlbmd0aCh1cFRvIC0gc3RhcnQpO1xuICAgIHZhciBjbG9uZWQgPSBuZXcgQXJyYXkoc2l6ZSk7XG4gICAgdmFyIGkgPSAwO1xuICAgIGZvciAoOyBpIDwgc2l6ZTsgaSsrKSBjbG9uZWRbaV0gPSBrbGFzcyA9PSAnU3RyaW5nJ1xuICAgICAgPyB0aGlzLmNoYXJBdChzdGFydCArIGkpXG4gICAgICA6IHRoaXNbc3RhcnQgKyBpXTtcbiAgICByZXR1cm4gY2xvbmVkO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///220\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar aFunction = __webpack_require__(10);\nvar toObject = __webpack_require__(9);\nvar fails = __webpack_require__(3);\nvar $sort = [].sort;\nvar test = [1, 2, 3];\n\n$export($export.P + $export.F * (fails(function () {\n // IE8-\n test.sort(undefined);\n}) || !fails(function () {\n // V8 bug\n test.sort(null);\n // Old WebKit\n}) || !__webpack_require__(22)($sort)), 'Array', {\n // 22.1.3.25 Array.prototype.sort(comparefn)\n sort: function sort(comparefn) {\n return comparefn === undefined\n ? $sort.call(toObject(this))\n : $sort.call(toObject(this), aFunction(comparefn));\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuc29ydC5qcz81NWRkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2QyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxZQUFZLG1CQUFPLENBQUMsQ0FBVTtBQUM5QjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQSxDQUFDLE1BQU0sbUJBQU8sQ0FBQyxFQUFrQjtBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjIyMS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyICRzb3J0ID0gW10uc29ydDtcbnZhciB0ZXN0ID0gWzEsIDIsIDNdO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIChmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIElFOC1cbiAgdGVzdC5zb3J0KHVuZGVmaW5lZCk7XG59KSB8fCAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBWOCBidWdcbiAgdGVzdC5zb3J0KG51bGwpO1xuICAvLyBPbGQgV2ViS2l0XG59KSB8fCAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKCRzb3J0KSksICdBcnJheScsIHtcbiAgLy8gMjIuMS4zLjI1IEFycmF5LnByb3RvdHlwZS5zb3J0KGNvbXBhcmVmbilcbiAgc29ydDogZnVuY3Rpb24gc29ydChjb21wYXJlZm4pIHtcbiAgICByZXR1cm4gY29tcGFyZWZuID09PSB1bmRlZmluZWRcbiAgICAgID8gJHNvcnQuY2FsbCh0b09iamVjdCh0aGlzKSlcbiAgICAgIDogJHNvcnQuY2FsbCh0b09iamVjdCh0aGlzKSwgYUZ1bmN0aW9uKGNvbXBhcmVmbikpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///221\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar $forEach = __webpack_require__(26)(0);\nvar STRICT = __webpack_require__(22)([].forEach, true);\n\n$export($export.P + $export.F * !STRICT, 'Array', {\n // 22.1.3.10 / 15.4.4.18 Array.prototype.forEach(callbackfn [, thisArg])\n forEach: function forEach(callbackfn /* , thisArg */) {\n return $forEach(this, callbackfn, arguments[1]);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZm9yLWVhY2guanM/ZjNlMiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyxFQUFrQjtBQUN6QyxhQUFhLG1CQUFPLENBQUMsRUFBa0I7O0FBRXZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjIyMi5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGZvckVhY2ggPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJykoMCk7XG52YXIgU1RSSUNUID0gcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKFtdLmZvckVhY2gsIHRydWUpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFTVFJJQ1QsICdBcnJheScsIHtcbiAgLy8gMjIuMS4zLjEwIC8gMTUuNC40LjE4IEFycmF5LnByb3RvdHlwZS5mb3JFYWNoKGNhbGxiYWNrZm4gWywgdGhpc0FyZ10pXG4gIGZvckVhY2g6IGZ1bmN0aW9uIGZvckVhY2goY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJGZvckVhY2godGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzWzFdKTtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///222\n")},function(module,exports,__webpack_require__){eval("var isObject = __webpack_require__(4);\nvar isArray = __webpack_require__(54);\nvar SPECIES = __webpack_require__(5)('species');\n\nmodule.exports = function (original) {\n var C;\n if (isArray(original)) {\n C = original.constructor;\n // cross-realm fallback\n if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;\n if (isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n } return C === undefined ? Array : C;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktc3BlY2llcy1jb25zdHJ1Y3Rvci5qcz9lODUzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGNBQWMsbUJBQU8sQ0FBQyxFQUFhO0FBQ25DLGNBQWMsbUJBQU8sQ0FBQyxDQUFROztBQUU5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCIsImZpbGUiOiIyMjMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi9faXMtYXJyYXknKTtcbnZhciBTUEVDSUVTID0gcmVxdWlyZSgnLi9fd2tzJykoJ3NwZWNpZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3JpZ2luYWwpIHtcbiAgdmFyIEM7XG4gIGlmIChpc0FycmF5KG9yaWdpbmFsKSkge1xuICAgIEMgPSBvcmlnaW5hbC5jb25zdHJ1Y3RvcjtcbiAgICAvLyBjcm9zcy1yZWFsbSBmYWxsYmFja1xuICAgIGlmICh0eXBlb2YgQyA9PSAnZnVuY3Rpb24nICYmIChDID09PSBBcnJheSB8fCBpc0FycmF5KEMucHJvdG90eXBlKSkpIEMgPSB1bmRlZmluZWQ7XG4gICAgaWYgKGlzT2JqZWN0KEMpKSB7XG4gICAgICBDID0gQ1tTUEVDSUVTXTtcbiAgICAgIGlmIChDID09PSBudWxsKSBDID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfSByZXR1cm4gQyA9PT0gdW5kZWZpbmVkID8gQXJyYXkgOiBDO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///223\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar $map = __webpack_require__(26)(1);\n\n$export($export.P + $export.F * !__webpack_require__(22)([].map, true), 'Array', {\n // 22.1.3.15 / 15.4.4.19 Array.prototype.map(callbackfn [, thisArg])\n map: function map(callbackfn /* , thisArg */) {\n return $map(this, callbackfn, arguments[1]);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkubWFwLmpzPzZkNjciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxXQUFXLG1CQUFPLENBQUMsRUFBa0I7O0FBRXJDLGlDQUFpQyxtQkFBTyxDQUFDLEVBQWtCO0FBQzNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyMjQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRtYXAgPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJykoMSk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogIXJlcXVpcmUoJy4vX3N0cmljdC1tZXRob2QnKShbXS5tYXAsIHRydWUpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy4xNSAvIDE1LjQuNC4xOSBBcnJheS5wcm90b3R5cGUubWFwKGNhbGxiYWNrZm4gWywgdGhpc0FyZ10pXG4gIG1hcDogZnVuY3Rpb24gbWFwKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgcmV0dXJuICRtYXAodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzWzFdKTtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///224\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar $filter = __webpack_require__(26)(2);\n\n$export($export.P + $export.F * !__webpack_require__(22)([].filter, true), 'Array', {\n // 22.1.3.7 / 15.4.4.20 Array.prototype.filter(callbackfn [, thisArg])\n filter: function filter(callbackfn /* , thisArg */) {\n return $filter(this, callbackfn, arguments[1]);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZmlsdGVyLmpzP2QyNWYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxjQUFjLG1CQUFPLENBQUMsRUFBa0I7O0FBRXhDLGlDQUFpQyxtQkFBTyxDQUFDLEVBQWtCO0FBQzNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyMjUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRmaWx0ZXIgPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJykoMik7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogIXJlcXVpcmUoJy4vX3N0cmljdC1tZXRob2QnKShbXS5maWx0ZXIsIHRydWUpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy43IC8gMTUuNC40LjIwIEFycmF5LnByb3RvdHlwZS5maWx0ZXIoY2FsbGJhY2tmbiBbLCB0aGlzQXJnXSlcbiAgZmlsdGVyOiBmdW5jdGlvbiBmaWx0ZXIoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJGZpbHRlcih0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHNbMV0pO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///225\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar $some = __webpack_require__(26)(3);\n\n$export($export.P + $export.F * !__webpack_require__(22)([].some, true), 'Array', {\n // 22.1.3.23 / 15.4.4.17 Array.prototype.some(callbackfn [, thisArg])\n some: function some(callbackfn /* , thisArg */) {\n return $some(this, callbackfn, arguments[1]);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuc29tZS5qcz83NTlmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsWUFBWSxtQkFBTyxDQUFDLEVBQWtCOztBQUV0QyxpQ0FBaUMsbUJBQU8sQ0FBQyxFQUFrQjtBQUMzRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjI2LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkc29tZSA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKSgzKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKFtdLnNvbWUsIHRydWUpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy4yMyAvIDE1LjQuNC4xNyBBcnJheS5wcm90b3R5cGUuc29tZShjYWxsYmFja2ZuIFssIHRoaXNBcmddKVxuICBzb21lOiBmdW5jdGlvbiBzb21lKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgcmV0dXJuICRzb21lKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50c1sxXSk7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///226\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar $every = __webpack_require__(26)(4);\n\n$export($export.P + $export.F * !__webpack_require__(22)([].every, true), 'Array', {\n // 22.1.3.5 / 15.4.4.16 Array.prototype.every(callbackfn [, thisArg])\n every: function every(callbackfn /* , thisArg */) {\n return $every(this, callbackfn, arguments[1]);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZXZlcnkuanM/NjA5NSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGFBQWEsbUJBQU8sQ0FBQyxFQUFrQjs7QUFFdkMsaUNBQWlDLG1CQUFPLENBQUMsRUFBa0I7QUFDM0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjIyNy5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGV2ZXJ5ID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpKDQpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoW10uZXZlcnksIHRydWUpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy41IC8gMTUuNC40LjE2IEFycmF5LnByb3RvdHlwZS5ldmVyeShjYWxsYmFja2ZuIFssIHRoaXNBcmddKVxuICBldmVyeTogZnVuY3Rpb24gZXZlcnkoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJGV2ZXJ5KHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50c1sxXSk7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///227\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar $reduce = __webpack_require__(110);\n\n$export($export.P + $export.F * !__webpack_require__(22)([].reduce, true), 'Array', {\n // 22.1.3.18 / 15.4.4.21 Array.prototype.reduce(callbackfn [, initialValue])\n reduce: function reduce(callbackfn /* , initialValue */) {\n return $reduce(this, callbackfn, arguments.length, arguments[1], false);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkucmVkdWNlLmpzPzBjZDgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxjQUFjLG1CQUFPLENBQUMsR0FBaUI7O0FBRXZDLGlDQUFpQyxtQkFBTyxDQUFDLEVBQWtCO0FBQzNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyMjguanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRyZWR1Y2UgPSByZXF1aXJlKCcuL19hcnJheS1yZWR1Y2UnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKFtdLnJlZHVjZSwgdHJ1ZSksICdBcnJheScsIHtcbiAgLy8gMjIuMS4zLjE4IC8gMTUuNC40LjIxIEFycmF5LnByb3RvdHlwZS5yZWR1Y2UoY2FsbGJhY2tmbiBbLCBpbml0aWFsVmFsdWVdKVxuICByZWR1Y2U6IGZ1bmN0aW9uIHJlZHVjZShjYWxsYmFja2ZuIC8qICwgaW5pdGlhbFZhbHVlICovKSB7XG4gICAgcmV0dXJuICRyZWR1Y2UodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCwgYXJndW1lbnRzWzFdLCBmYWxzZSk7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///228\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar $reduce = __webpack_require__(110);\n\n$export($export.P + $export.F * !__webpack_require__(22)([].reduceRight, true), 'Array', {\n // 22.1.3.19 / 15.4.4.22 Array.prototype.reduceRight(callbackfn [, initialValue])\n reduceRight: function reduceRight(callbackfn /* , initialValue */) {\n return $reduce(this, callbackfn, arguments.length, arguments[1], true);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkucmVkdWNlLXJpZ2h0LmpzPzQ4ZjgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxjQUFjLG1CQUFPLENBQUMsR0FBaUI7O0FBRXZDLGlDQUFpQyxtQkFBTyxDQUFDLEVBQWtCO0FBQzNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyMjkuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRyZWR1Y2UgPSByZXF1aXJlKCcuL19hcnJheS1yZWR1Y2UnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKFtdLnJlZHVjZVJpZ2h0LCB0cnVlKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMTkgLyAxNS40LjQuMjIgQXJyYXkucHJvdG90eXBlLnJlZHVjZVJpZ2h0KGNhbGxiYWNrZm4gWywgaW5pdGlhbFZhbHVlXSlcbiAgcmVkdWNlUmlnaHQ6IGZ1bmN0aW9uIHJlZHVjZVJpZ2h0KGNhbGxiYWNrZm4gLyogLCBpbml0aWFsVmFsdWUgKi8pIHtcbiAgICByZXR1cm4gJHJlZHVjZSh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoLCBhcmd1bWVudHNbMV0sIHRydWUpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///229\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar $indexOf = __webpack_require__(52)(false);\nvar $native = [].indexOf;\nvar NEGATIVE_ZERO = !!$native && 1 / [1].indexOf(1, -0) < 0;\n\n$export($export.P + $export.F * (NEGATIVE_ZERO || !__webpack_require__(22)($native)), 'Array', {\n // 22.1.3.11 / 15.4.4.14 Array.prototype.indexOf(searchElement [, fromIndex])\n indexOf: function indexOf(searchElement /* , fromIndex = 0 */) {\n return NEGATIVE_ZERO\n // convert -0 to +0\n ? $native.apply(this, arguments) || 0\n : $indexOf(this, searchElement, arguments[1]);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuaW5kZXgtb2YuanM/NTdlNyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyxFQUFtQjtBQUMxQztBQUNBOztBQUVBLG1EQUFtRCxtQkFBTyxDQUFDLEVBQWtCO0FBQzdFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyMzAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRpbmRleE9mID0gcmVxdWlyZSgnLi9fYXJyYXktaW5jbHVkZXMnKShmYWxzZSk7XG52YXIgJG5hdGl2ZSA9IFtdLmluZGV4T2Y7XG52YXIgTkVHQVRJVkVfWkVSTyA9ICEhJG5hdGl2ZSAmJiAxIC8gWzFdLmluZGV4T2YoMSwgLTApIDwgMDtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoTkVHQVRJVkVfWkVSTyB8fCAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKCRuYXRpdmUpKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMTEgLyAxNS40LjQuMTQgQXJyYXkucHJvdG90eXBlLmluZGV4T2Yoc2VhcmNoRWxlbWVudCBbLCBmcm9tSW5kZXhdKVxuICBpbmRleE9mOiBmdW5jdGlvbiBpbmRleE9mKHNlYXJjaEVsZW1lbnQgLyogLCBmcm9tSW5kZXggPSAwICovKSB7XG4gICAgcmV0dXJuIE5FR0FUSVZFX1pFUk9cbiAgICAgIC8vIGNvbnZlcnQgLTAgdG8gKzBcbiAgICAgID8gJG5hdGl2ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IDBcbiAgICAgIDogJGluZGV4T2YodGhpcywgc2VhcmNoRWxlbWVudCwgYXJndW1lbnRzWzFdKTtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///230\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar toIObject = __webpack_require__(15);\nvar toInteger = __webpack_require__(21);\nvar toLength = __webpack_require__(6);\nvar $native = [].lastIndexOf;\nvar NEGATIVE_ZERO = !!$native && 1 / [1].lastIndexOf(1, -0) < 0;\n\n$export($export.P + $export.F * (NEGATIVE_ZERO || !__webpack_require__(22)($native)), 'Array', {\n // 22.1.3.14 / 15.4.4.15 Array.prototype.lastIndexOf(searchElement [, fromIndex])\n lastIndexOf: function lastIndexOf(searchElement /* , fromIndex = @[*-1] */) {\n // convert -0 to +0\n if (NEGATIVE_ZERO) return $native.apply(this, arguments) || 0;\n var O = toIObject(this);\n var length = toLength(O.length);\n var index = length - 1;\n if (arguments.length > 1) index = Math.min(index, toInteger(arguments[1]));\n if (index < 0) index = length + index;\n for (;index >= 0; index--) if (index in O) if (O[index] === searchElement) return index || 0;\n return -1;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkubGFzdC1pbmRleC1vZi5qcz85ODY1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2QyxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDO0FBQ0E7O0FBRUEsbURBQW1ELG1CQUFPLENBQUMsRUFBa0I7QUFDN0U7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVSxXQUFXO0FBQ3JCO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjIzMS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyICRuYXRpdmUgPSBbXS5sYXN0SW5kZXhPZjtcbnZhciBORUdBVElWRV9aRVJPID0gISEkbmF0aXZlICYmIDEgLyBbMV0ubGFzdEluZGV4T2YoMSwgLTApIDwgMDtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoTkVHQVRJVkVfWkVSTyB8fCAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKCRuYXRpdmUpKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMTQgLyAxNS40LjQuMTUgQXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mKHNlYXJjaEVsZW1lbnQgWywgZnJvbUluZGV4XSlcbiAgbGFzdEluZGV4T2Y6IGZ1bmN0aW9uIGxhc3RJbmRleE9mKHNlYXJjaEVsZW1lbnQgLyogLCBmcm9tSW5kZXggPSBAWyotMV0gKi8pIHtcbiAgICAvLyBjb252ZXJ0IC0wIHRvICswXG4gICAgaWYgKE5FR0FUSVZFX1pFUk8pIHJldHVybiAkbmF0aXZlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgMDtcbiAgICB2YXIgTyA9IHRvSU9iamVjdCh0aGlzKTtcbiAgICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICAgIHZhciBpbmRleCA9IGxlbmd0aCAtIDE7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSBpbmRleCA9IE1hdGgubWluKGluZGV4LCB0b0ludGVnZXIoYXJndW1lbnRzWzFdKSk7XG4gICAgaWYgKGluZGV4IDwgMCkgaW5kZXggPSBsZW5ndGggKyBpbmRleDtcbiAgICBmb3IgKDtpbmRleCA+PSAwOyBpbmRleC0tKSBpZiAoaW5kZXggaW4gTykgaWYgKE9baW5kZXhdID09PSBzZWFyY2hFbGVtZW50KSByZXR1cm4gaW5kZXggfHwgMDtcbiAgICByZXR1cm4gLTE7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///231\n")},function(module,exports,__webpack_require__){eval("// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\nvar $export = __webpack_require__(0);\n\n$export($export.P, 'Array', { copyWithin: __webpack_require__(111) });\n\n__webpack_require__(31)('copyWithin');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuY29weS13aXRoaW4uanM/NzQ0ZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXOztBQUVqQyw2QkFBNkIsYUFBYSxtQkFBTyxDQUFDLEdBQXNCLEdBQUc7O0FBRTNFLG1CQUFPLENBQUMsRUFBdUIiLCJmaWxlIjoiMjMyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjIuMS4zLjMgQXJyYXkucHJvdG90eXBlLmNvcHlXaXRoaW4odGFyZ2V0LCBzdGFydCwgZW5kID0gdGhpcy5sZW5ndGgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCwgJ0FycmF5JywgeyBjb3B5V2l0aGluOiByZXF1aXJlKCcuL19hcnJheS1jb3B5LXdpdGhpbicpIH0pO1xuXG5yZXF1aXJlKCcuL19hZGQtdG8tdW5zY29wYWJsZXMnKSgnY29weVdpdGhpbicpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///232\n")},function(module,exports,__webpack_require__){eval("// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\nvar $export = __webpack_require__(0);\n\n$export($export.P, 'Array', { fill: __webpack_require__(85) });\n\n__webpack_require__(31)('fill');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZmlsbC5qcz82YzdiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDLDZCQUE2QixPQUFPLG1CQUFPLENBQUMsRUFBZSxHQUFHOztBQUU5RCxtQkFBTyxDQUFDLEVBQXVCIiwiZmlsZSI6IjIzMy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDIyLjEuMy42IEFycmF5LnByb3RvdHlwZS5maWxsKHZhbHVlLCBzdGFydCA9IDAsIGVuZCA9IHRoaXMubGVuZ3RoKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdBcnJheScsIHsgZmlsbDogcmVxdWlyZSgnLi9fYXJyYXktZmlsbCcpIH0pO1xuXG5yZXF1aXJlKCcuL19hZGQtdG8tdW5zY29wYWJsZXMnKSgnZmlsbCcpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///233\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// 22.1.3.8 Array.prototype.find(predicate, thisArg = undefined)\nvar $export = __webpack_require__(0);\nvar $find = __webpack_require__(26)(5);\nvar KEY = 'find';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n find: function find(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n__webpack_require__(31)(KEY);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZmluZC5qcz83NTE0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxZQUFZLG1CQUFPLENBQUMsRUFBa0I7QUFDdEM7QUFDQTtBQUNBO0FBQ0EsMENBQTBDLGdCQUFnQixFQUFFO0FBQzVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELG1CQUFPLENBQUMsRUFBdUIiLCJmaWxlIjoiMjM0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gMjIuMS4zLjggQXJyYXkucHJvdG90eXBlLmZpbmQocHJlZGljYXRlLCB0aGlzQXJnID0gdW5kZWZpbmVkKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkZmluZCA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKSg1KTtcbnZhciBLRVkgPSAnZmluZCc7XG52YXIgZm9yY2VkID0gdHJ1ZTtcbi8vIFNob3VsZG4ndCBza2lwIGhvbGVzXG5pZiAoS0VZIGluIFtdKSBBcnJheSgxKVtLRVldKGZ1bmN0aW9uICgpIHsgZm9yY2VkID0gZmFsc2U7IH0pO1xuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiBmb3JjZWQsICdBcnJheScsIHtcbiAgZmluZDogZnVuY3Rpb24gZmluZChjYWxsYmFja2ZuIC8qICwgdGhhdCA9IHVuZGVmaW5lZCAqLykge1xuICAgIHJldHVybiAkZmluZCh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xucmVxdWlyZSgnLi9fYWRkLXRvLXVuc2NvcGFibGVzJykoS0VZKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///234\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// 22.1.3.9 Array.prototype.findIndex(predicate, thisArg = undefined)\nvar $export = __webpack_require__(0);\nvar $find = __webpack_require__(26)(6);\nvar KEY = 'findIndex';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n findIndex: function findIndex(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n__webpack_require__(31)(KEY);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZmluZC1pbmRleC5qcz8yMGQ2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxZQUFZLG1CQUFPLENBQUMsRUFBa0I7QUFDdEM7QUFDQTtBQUNBO0FBQ0EsMENBQTBDLGdCQUFnQixFQUFFO0FBQzVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELG1CQUFPLENBQUMsRUFBdUIiLCJmaWxlIjoiMjM1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gMjIuMS4zLjkgQXJyYXkucHJvdG90eXBlLmZpbmRJbmRleChwcmVkaWNhdGUsIHRoaXNBcmcgPSB1bmRlZmluZWQpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRmaW5kID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpKDYpO1xudmFyIEtFWSA9ICdmaW5kSW5kZXgnO1xudmFyIGZvcmNlZCA9IHRydWU7XG4vLyBTaG91bGRuJ3Qgc2tpcCBob2xlc1xuaWYgKEtFWSBpbiBbXSkgQXJyYXkoMSlbS0VZXShmdW5jdGlvbiAoKSB7IGZvcmNlZCA9IGZhbHNlOyB9KTtcbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogZm9yY2VkLCAnQXJyYXknLCB7XG4gIGZpbmRJbmRleDogZnVuY3Rpb24gZmluZEluZGV4KGNhbGxiYWNrZm4gLyogLCB0aGF0ID0gdW5kZWZpbmVkICovKSB7XG4gICAgcmV0dXJuICRmaW5kKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG5yZXF1aXJlKCcuL19hZGQtdG8tdW5zY29wYWJsZXMnKShLRVkpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///235\n")},function(module,exports,__webpack_require__){eval("__webpack_require__(38)('Array');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuc3BlY2llcy5qcz9kMDRmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLG1CQUFPLENBQUMsRUFBZ0IiLCJmaWxlIjoiMjM2LmpzIiwic291cmNlc0NvbnRlbnQiOlsicmVxdWlyZSgnLi9fc2V0LXNwZWNpZXMnKSgnQXJyYXknKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///236\n")},function(module,exports,__webpack_require__){eval("var global = __webpack_require__(2);\nvar inheritIfRequired = __webpack_require__(73);\nvar dP = __webpack_require__(8).f;\nvar gOPN = __webpack_require__(37).f;\nvar isRegExp = __webpack_require__(56);\nvar $flags = __webpack_require__(50);\nvar $RegExp = global.RegExp;\nvar Base = $RegExp;\nvar proto = $RegExp.prototype;\nvar re1 = /a/g;\nvar re2 = /a/g;\n// \"new\" creates a new object, old webkit buggy here\nvar CORRECT_NEW = new $RegExp(re1) !== re1;\n\nif (__webpack_require__(7) && (!CORRECT_NEW || __webpack_require__(3)(function () {\n re2[__webpack_require__(5)('match')] = false;\n // RegExp constructor can alter flags and IsRegExp works correct with @@match\n return $RegExp(re1) != re1 || $RegExp(re2) == re2 || $RegExp(re1, 'i') != '/a/i';\n}))) {\n $RegExp = function RegExp(p, f) {\n var tiRE = this instanceof $RegExp;\n var piRE = isRegExp(p);\n var fiU = f === undefined;\n return !tiRE && piRE && p.constructor === $RegExp && fiU ? p\n : inheritIfRequired(CORRECT_NEW\n ? new Base(piRE && !fiU ? p.source : p, f)\n : Base((piRE = p instanceof $RegExp) ? p.source : p, piRE && fiU ? $flags.call(p) : f)\n , tiRE ? this : proto, $RegExp);\n };\n var proxy = function (key) {\n key in $RegExp || dP($RegExp, key, {\n configurable: true,\n get: function () { return Base[key]; },\n set: function (it) { Base[key] = it; }\n });\n };\n for (var keys = gOPN(Base), i = 0; keys.length > i;) proxy(keys[i++]);\n proto.constructor = $RegExp;\n $RegExp.prototype = proto;\n __webpack_require__(12)(global, 'RegExp', $RegExp);\n}\n\n__webpack_require__(38)('RegExp');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLmNvbnN0cnVjdG9yLmpzPzNiMmIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsYUFBYSxtQkFBTyxDQUFDLENBQVc7QUFDaEMsd0JBQXdCLG1CQUFPLENBQUMsRUFBd0I7QUFDeEQsU0FBUyxtQkFBTyxDQUFDLENBQWM7QUFDL0IsV0FBVyxtQkFBTyxDQUFDLEVBQWdCO0FBQ25DLGVBQWUsbUJBQU8sQ0FBQyxFQUFjO0FBQ3JDLGFBQWEsbUJBQU8sQ0FBQyxFQUFVO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLElBQUksbUJBQU8sQ0FBQyxDQUFnQixzQkFBc0IsbUJBQU8sQ0FBQyxDQUFVO0FBQ3BFLE1BQU0sbUJBQU8sQ0FBQyxDQUFRO0FBQ3RCO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0Isa0JBQWtCLEVBQUU7QUFDNUMsMEJBQTBCLGdCQUFnQjtBQUMxQyxLQUFLO0FBQ0w7QUFDQSxvQ0FBb0MsaUJBQWlCO0FBQ3JEO0FBQ0E7QUFDQSxFQUFFLG1CQUFPLENBQUMsRUFBYTtBQUN2Qjs7QUFFQSxtQkFBTyxDQUFDLEVBQWdCIiwiZmlsZSI6IjIzNy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBpbmhlcml0SWZSZXF1aXJlZCA9IHJlcXVpcmUoJy4vX2luaGVyaXQtaWYtcmVxdWlyZWQnKTtcbnZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgZ09QTiA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJykuZjtcbnZhciBpc1JlZ0V4cCA9IHJlcXVpcmUoJy4vX2lzLXJlZ2V4cCcpO1xudmFyICRmbGFncyA9IHJlcXVpcmUoJy4vX2ZsYWdzJyk7XG52YXIgJFJlZ0V4cCA9IGdsb2JhbC5SZWdFeHA7XG52YXIgQmFzZSA9ICRSZWdFeHA7XG52YXIgcHJvdG8gPSAkUmVnRXhwLnByb3RvdHlwZTtcbnZhciByZTEgPSAvYS9nO1xudmFyIHJlMiA9IC9hL2c7XG4vLyBcIm5ld1wiIGNyZWF0ZXMgYSBuZXcgb2JqZWN0LCBvbGQgd2Via2l0IGJ1Z2d5IGhlcmVcbnZhciBDT1JSRUNUX05FVyA9IG5ldyAkUmVnRXhwKHJlMSkgIT09IHJlMTtcblxuaWYgKHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgKCFDT1JSRUNUX05FVyB8fCByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgcmUyW3JlcXVpcmUoJy4vX3drcycpKCdtYXRjaCcpXSA9IGZhbHNlO1xuICAvLyBSZWdFeHAgY29uc3RydWN0b3IgY2FuIGFsdGVyIGZsYWdzIGFuZCBJc1JlZ0V4cCB3b3JrcyBjb3JyZWN0IHdpdGggQEBtYXRjaFxuICByZXR1cm4gJFJlZ0V4cChyZTEpICE9IHJlMSB8fCAkUmVnRXhwKHJlMikgPT0gcmUyIHx8ICRSZWdFeHAocmUxLCAnaScpICE9ICcvYS9pJztcbn0pKSkge1xuICAkUmVnRXhwID0gZnVuY3Rpb24gUmVnRXhwKHAsIGYpIHtcbiAgICB2YXIgdGlSRSA9IHRoaXMgaW5zdGFuY2VvZiAkUmVnRXhwO1xuICAgIHZhciBwaVJFID0gaXNSZWdFeHAocCk7XG4gICAgdmFyIGZpVSA9IGYgPT09IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gIXRpUkUgJiYgcGlSRSAmJiBwLmNvbnN0cnVjdG9yID09PSAkUmVnRXhwICYmIGZpVSA/IHBcbiAgICAgIDogaW5oZXJpdElmUmVxdWlyZWQoQ09SUkVDVF9ORVdcbiAgICAgICAgPyBuZXcgQmFzZShwaVJFICYmICFmaVUgPyBwLnNvdXJjZSA6IHAsIGYpXG4gICAgICAgIDogQmFzZSgocGlSRSA9IHAgaW5zdGFuY2VvZiAkUmVnRXhwKSA/IHAuc291cmNlIDogcCwgcGlSRSAmJiBmaVUgPyAkZmxhZ3MuY2FsbChwKSA6IGYpXG4gICAgICAsIHRpUkUgPyB0aGlzIDogcHJvdG8sICRSZWdFeHApO1xuICB9O1xuICB2YXIgcHJveHkgPSBmdW5jdGlvbiAoa2V5KSB7XG4gICAga2V5IGluICRSZWdFeHAgfHwgZFAoJFJlZ0V4cCwga2V5LCB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIEJhc2Vba2V5XTsgfSxcbiAgICAgIHNldDogZnVuY3Rpb24gKGl0KSB7IEJhc2Vba2V5XSA9IGl0OyB9XG4gICAgfSk7XG4gIH07XG4gIGZvciAodmFyIGtleXMgPSBnT1BOKEJhc2UpLCBpID0gMDsga2V5cy5sZW5ndGggPiBpOykgcHJveHkoa2V5c1tpKytdKTtcbiAgcHJvdG8uY29uc3RydWN0b3IgPSAkUmVnRXhwO1xuICAkUmVnRXhwLnByb3RvdHlwZSA9IHByb3RvO1xuICByZXF1aXJlKCcuL19yZWRlZmluZScpKGdsb2JhbCwgJ1JlZ0V4cCcsICRSZWdFeHApO1xufVxuXG5yZXF1aXJlKCcuL19zZXQtc3BlY2llcycpKCdSZWdFeHAnKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///237\n")},function(module,exports,__webpack_require__){"use strict";eval("\n__webpack_require__(114);\nvar anObject = __webpack_require__(1);\nvar $flags = __webpack_require__(50);\nvar DESCRIPTORS = __webpack_require__(7);\nvar TO_STRING = 'toString';\nvar $toString = /./[TO_STRING];\n\nvar define = function (fn) {\n __webpack_require__(12)(RegExp.prototype, TO_STRING, fn, true);\n};\n\n// 21.2.5.14 RegExp.prototype.toString()\nif (__webpack_require__(3)(function () { return $toString.call({ source: 'a', flags: 'b' }) != '/a/b'; })) {\n define(function toString() {\n var R = anObject(this);\n return '/'.concat(R.source, '/',\n 'flags' in R ? R.flags : !DESCRIPTORS && R instanceof RegExp ? $flags.call(R) : undefined);\n });\n// FF44- RegExp#toString has a wrong name\n} else if ($toString.name != TO_STRING) {\n define(function toString() {\n return $toString.call(this);\n });\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLnRvLXN0cmluZy5qcz82YjU0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsbUJBQU8sQ0FBQyxHQUFvQjtBQUM1QixlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxhQUFhLG1CQUFPLENBQUMsRUFBVTtBQUMvQixrQkFBa0IsbUJBQU8sQ0FBQyxDQUFnQjtBQUMxQztBQUNBOztBQUVBO0FBQ0EsRUFBRSxtQkFBTyxDQUFDLEVBQWE7QUFDdkI7O0FBRUE7QUFDQSxJQUFJLG1CQUFPLENBQUMsQ0FBVSxlQUFlLHdCQUF3QiwwQkFBMEIsWUFBWSxFQUFFO0FBQ3JHO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxHQUFHO0FBQ0giLCJmaWxlIjoiMjM4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi9lczYucmVnZXhwLmZsYWdzJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciAkZmxhZ3MgPSByZXF1aXJlKCcuL19mbGFncycpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKTtcbnZhciBUT19TVFJJTkcgPSAndG9TdHJpbmcnO1xudmFyICR0b1N0cmluZyA9IC8uL1tUT19TVFJJTkddO1xuXG52YXIgZGVmaW5lID0gZnVuY3Rpb24gKGZuKSB7XG4gIHJlcXVpcmUoJy4vX3JlZGVmaW5lJykoUmVnRXhwLnByb3RvdHlwZSwgVE9fU1RSSU5HLCBmbiwgdHJ1ZSk7XG59O1xuXG4vLyAyMS4yLjUuMTQgUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZygpXG5pZiAocmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7IHJldHVybiAkdG9TdHJpbmcuY2FsbCh7IHNvdXJjZTogJ2EnLCBmbGFnczogJ2InIH0pICE9ICcvYS9iJzsgfSkpIHtcbiAgZGVmaW5lKGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHZhciBSID0gYW5PYmplY3QodGhpcyk7XG4gICAgcmV0dXJuICcvJy5jb25jYXQoUi5zb3VyY2UsICcvJyxcbiAgICAgICdmbGFncycgaW4gUiA/IFIuZmxhZ3MgOiAhREVTQ1JJUFRPUlMgJiYgUiBpbnN0YW5jZW9mIFJlZ0V4cCA/ICRmbGFncy5jYWxsKFIpIDogdW5kZWZpbmVkKTtcbiAgfSk7XG4vLyBGRjQ0LSBSZWdFeHAjdG9TdHJpbmcgaGFzIGEgd3JvbmcgbmFtZVxufSBlbHNlIGlmICgkdG9TdHJpbmcubmFtZSAhPSBUT19TVFJJTkcpIHtcbiAgZGVmaW5lKGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiAkdG9TdHJpbmcuY2FsbCh0aGlzKTtcbiAgfSk7XG59XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///238\n")},function(module,exports,__webpack_require__){"use strict";eval("\n\nvar anObject = __webpack_require__(1);\nvar toLength = __webpack_require__(6);\nvar advanceStringIndex = __webpack_require__(88);\nvar regExpExec = __webpack_require__(58);\n\n// @@match logic\n__webpack_require__(59)('match', 1, function (defined, MATCH, $match, maybeCallNative) {\n return [\n // `String.prototype.match` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.match\n function match(regexp) {\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[MATCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[MATCH](String(O));\n },\n // `RegExp.prototype[@@match]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@match\n function (regexp) {\n var res = maybeCallNative($match, regexp, this);\n if (res.done) return res.value;\n var rx = anObject(regexp);\n var S = String(this);\n if (!rx.global) return regExpExec(rx, S);\n var fullUnicode = rx.unicode;\n rx.lastIndex = 0;\n var A = [];\n var n = 0;\n var result;\n while ((result = regExpExec(rx, S)) !== null) {\n var matchStr = String(result[0]);\n A[n] = matchStr;\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n n++;\n }\n return n === 0 ? null : A;\n }\n ];\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLm1hdGNoLmpzPzQ5MTciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWIsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMseUJBQXlCLG1CQUFPLENBQUMsRUFBeUI7QUFDMUQsaUJBQWlCLG1CQUFPLENBQUMsRUFBeUI7O0FBRWxEO0FBQ0EsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyMzkuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgYWR2YW5jZVN0cmluZ0luZGV4ID0gcmVxdWlyZSgnLi9fYWR2YW5jZS1zdHJpbmctaW5kZXgnKTtcbnZhciByZWdFeHBFeGVjID0gcmVxdWlyZSgnLi9fcmVnZXhwLWV4ZWMtYWJzdHJhY3QnKTtcblxuLy8gQEBtYXRjaCBsb2dpY1xucmVxdWlyZSgnLi9fZml4LXJlLXdrcycpKCdtYXRjaCcsIDEsIGZ1bmN0aW9uIChkZWZpbmVkLCBNQVRDSCwgJG1hdGNoLCBtYXliZUNhbGxOYXRpdmUpIHtcbiAgcmV0dXJuIFtcbiAgICAvLyBgU3RyaW5nLnByb3RvdHlwZS5tYXRjaGAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5tYXRjaFxuICAgIGZ1bmN0aW9uIG1hdGNoKHJlZ2V4cCkge1xuICAgICAgdmFyIE8gPSBkZWZpbmVkKHRoaXMpO1xuICAgICAgdmFyIGZuID0gcmVnZXhwID09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHJlZ2V4cFtNQVRDSF07XG4gICAgICByZXR1cm4gZm4gIT09IHVuZGVmaW5lZCA/IGZuLmNhbGwocmVnZXhwLCBPKSA6IG5ldyBSZWdFeHAocmVnZXhwKVtNQVRDSF0oU3RyaW5nKE8pKTtcbiAgICB9LFxuICAgIC8vIGBSZWdFeHAucHJvdG90eXBlW0BAbWF0Y2hdYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1yZWdleHAucHJvdG90eXBlLUBAbWF0Y2hcbiAgICBmdW5jdGlvbiAocmVnZXhwKSB7XG4gICAgICB2YXIgcmVzID0gbWF5YmVDYWxsTmF0aXZlKCRtYXRjaCwgcmVnZXhwLCB0aGlzKTtcbiAgICAgIGlmIChyZXMuZG9uZSkgcmV0dXJuIHJlcy52YWx1ZTtcbiAgICAgIHZhciByeCA9IGFuT2JqZWN0KHJlZ2V4cCk7XG4gICAgICB2YXIgUyA9IFN0cmluZyh0aGlzKTtcbiAgICAgIGlmICghcnguZ2xvYmFsKSByZXR1cm4gcmVnRXhwRXhlYyhyeCwgUyk7XG4gICAgICB2YXIgZnVsbFVuaWNvZGUgPSByeC51bmljb2RlO1xuICAgICAgcngubGFzdEluZGV4ID0gMDtcbiAgICAgIHZhciBBID0gW107XG4gICAgICB2YXIgbiA9IDA7XG4gICAgICB2YXIgcmVzdWx0O1xuICAgICAgd2hpbGUgKChyZXN1bHQgPSByZWdFeHBFeGVjKHJ4LCBTKSkgIT09IG51bGwpIHtcbiAgICAgICAgdmFyIG1hdGNoU3RyID0gU3RyaW5nKHJlc3VsdFswXSk7XG4gICAgICAgIEFbbl0gPSBtYXRjaFN0cjtcbiAgICAgICAgaWYgKG1hdGNoU3RyID09PSAnJykgcngubGFzdEluZGV4ID0gYWR2YW5jZVN0cmluZ0luZGV4KFMsIHRvTGVuZ3RoKHJ4Lmxhc3RJbmRleCksIGZ1bGxVbmljb2RlKTtcbiAgICAgICAgbisrO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG4gPT09IDAgPyBudWxsIDogQTtcbiAgICB9XG4gIF07XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///239\n")},function(module,exports,__webpack_require__){"use strict";eval("\n\nvar anObject = __webpack_require__(1);\nvar toObject = __webpack_require__(9);\nvar toLength = __webpack_require__(6);\nvar toInteger = __webpack_require__(21);\nvar advanceStringIndex = __webpack_require__(88);\nvar regExpExec = __webpack_require__(58);\nvar max = Math.max;\nvar min = Math.min;\nvar floor = Math.floor;\nvar SUBSTITUTION_SYMBOLS = /\\$([$&`']|\\d\\d?|<[^>]*>)/g;\nvar SUBSTITUTION_SYMBOLS_NO_NAMED = /\\$([$&`']|\\d\\d?)/g;\n\nvar maybeToString = function (it) {\n return it === undefined ? it : String(it);\n};\n\n// @@replace logic\n__webpack_require__(59)('replace', 2, function (defined, REPLACE, $replace, maybeCallNative) {\n return [\n // `String.prototype.replace` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.replace\n function replace(searchValue, replaceValue) {\n var O = defined(this);\n var fn = searchValue == undefined ? undefined : searchValue[REPLACE];\n return fn !== undefined\n ? fn.call(searchValue, O, replaceValue)\n : $replace.call(String(O), searchValue, replaceValue);\n },\n // `RegExp.prototype[@@replace]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@replace\n function (regexp, replaceValue) {\n var res = maybeCallNative($replace, regexp, this, replaceValue);\n if (res.done) return res.value;\n\n var rx = anObject(regexp);\n var S = String(this);\n var functionalReplace = typeof replaceValue === 'function';\n if (!functionalReplace) replaceValue = String(replaceValue);\n var global = rx.global;\n if (global) {\n var fullUnicode = rx.unicode;\n rx.lastIndex = 0;\n }\n var results = [];\n while (true) {\n var result = regExpExec(rx, S);\n if (result === null) break;\n results.push(result);\n if (!global) break;\n var matchStr = String(result[0]);\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n }\n var accumulatedResult = '';\n var nextSourcePosition = 0;\n for (var i = 0; i < results.length; i++) {\n result = results[i];\n var matched = String(result[0]);\n var position = max(min(toInteger(result.index), S.length), 0);\n var captures = [];\n // NOTE: This is equivalent to\n // captures = result.slice(1).map(maybeToString)\n // but for some reason `nativeSlice.call(result, 1, result.length)` (called in\n // the slice polyfill when slicing native arrays) \"doesn't work\" in safari 9 and\n // causes a crash (https://pastebin.com/N21QzeQA) when trying to debug it.\n for (var j = 1; j < result.length; j++) captures.push(maybeToString(result[j]));\n var namedCaptures = result.groups;\n if (functionalReplace) {\n var replacerArgs = [matched].concat(captures, position, S);\n if (namedCaptures !== undefined) replacerArgs.push(namedCaptures);\n var replacement = String(replaceValue.apply(undefined, replacerArgs));\n } else {\n replacement = getSubstitution(matched, S, position, captures, namedCaptures, replaceValue);\n }\n if (position >= nextSourcePosition) {\n accumulatedResult += S.slice(nextSourcePosition, position) + replacement;\n nextSourcePosition = position + matched.length;\n }\n }\n return accumulatedResult + S.slice(nextSourcePosition);\n }\n ];\n\n // https://tc39.github.io/ecma262/#sec-getsubstitution\n function getSubstitution(matched, str, position, captures, namedCaptures, replacement) {\n var tailPos = position + matched.length;\n var m = captures.length;\n var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED;\n if (namedCaptures !== undefined) {\n namedCaptures = toObject(namedCaptures);\n symbols = SUBSTITUTION_SYMBOLS;\n }\n return $replace.call(replacement, symbols, function (match, ch) {\n var capture;\n switch (ch.charAt(0)) {\n case '$': return '$';\n case '&': return matched;\n case '`': return str.slice(0, position);\n case \"'\": return str.slice(tailPos);\n case '<':\n capture = namedCaptures[ch.slice(1, -1)];\n break;\n default: // \\d\\d?\n var n = +ch;\n if (n === 0) return match;\n if (n > m) {\n var f = floor(n / 10);\n if (f === 0) return match;\n if (f <= m) return captures[f - 1] === undefined ? ch.charAt(1) : captures[f - 1] + ch.charAt(1);\n return match;\n }\n capture = captures[n - 1];\n }\n return capture === undefined ? '' : capture;\n });\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLnJlcGxhY2UuanM/YTQ4MSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDLHlCQUF5QixtQkFBTyxDQUFDLEVBQXlCO0FBQzFELGlCQUFpQixtQkFBTyxDQUFDLEVBQXlCO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIsb0JBQW9CO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixtQkFBbUI7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLENBQUMiLCJmaWxlIjoiMjQwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIGFkdmFuY2VTdHJpbmdJbmRleCA9IHJlcXVpcmUoJy4vX2FkdmFuY2Utc3RyaW5nLWluZGV4Jyk7XG52YXIgcmVnRXhwRXhlYyA9IHJlcXVpcmUoJy4vX3JlZ2V4cC1leGVjLWFic3RyYWN0Jyk7XG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgbWluID0gTWF0aC5taW47XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xudmFyIFNVQlNUSVRVVElPTl9TWU1CT0xTID0gL1xcJChbJCZgJ118XFxkXFxkP3w8W14+XSo+KS9nO1xudmFyIFNVQlNUSVRVVElPTl9TWU1CT0xTX05PX05BTUVEID0gL1xcJChbJCZgJ118XFxkXFxkPykvZztcblxudmFyIG1heWJlVG9TdHJpbmcgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ID09PSB1bmRlZmluZWQgPyBpdCA6IFN0cmluZyhpdCk7XG59O1xuXG4vLyBAQHJlcGxhY2UgbG9naWNcbnJlcXVpcmUoJy4vX2ZpeC1yZS13a3MnKSgncmVwbGFjZScsIDIsIGZ1bmN0aW9uIChkZWZpbmVkLCBSRVBMQUNFLCAkcmVwbGFjZSwgbWF5YmVDYWxsTmF0aXZlKSB7XG4gIHJldHVybiBbXG4gICAgLy8gYFN0cmluZy5wcm90b3R5cGUucmVwbGFjZWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlXG4gICAgZnVuY3Rpb24gcmVwbGFjZShzZWFyY2hWYWx1ZSwgcmVwbGFjZVZhbHVlKSB7XG4gICAgICB2YXIgTyA9IGRlZmluZWQodGhpcyk7XG4gICAgICB2YXIgZm4gPSBzZWFyY2hWYWx1ZSA9PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBzZWFyY2hWYWx1ZVtSRVBMQUNFXTtcbiAgICAgIHJldHVybiBmbiAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8gZm4uY2FsbChzZWFyY2hWYWx1ZSwgTywgcmVwbGFjZVZhbHVlKVxuICAgICAgICA6ICRyZXBsYWNlLmNhbGwoU3RyaW5nKE8pLCBzZWFyY2hWYWx1ZSwgcmVwbGFjZVZhbHVlKTtcbiAgICB9LFxuICAgIC8vIGBSZWdFeHAucHJvdG90eXBlW0BAcmVwbGFjZV1gIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXJlZ2V4cC5wcm90b3R5cGUtQEByZXBsYWNlXG4gICAgZnVuY3Rpb24gKHJlZ2V4cCwgcmVwbGFjZVZhbHVlKSB7XG4gICAgICB2YXIgcmVzID0gbWF5YmVDYWxsTmF0aXZlKCRyZXBsYWNlLCByZWdleHAsIHRoaXMsIHJlcGxhY2VWYWx1ZSk7XG4gICAgICBpZiAocmVzLmRvbmUpIHJldHVybiByZXMudmFsdWU7XG5cbiAgICAgIHZhciByeCA9IGFuT2JqZWN0KHJlZ2V4cCk7XG4gICAgICB2YXIgUyA9IFN0cmluZyh0aGlzKTtcbiAgICAgIHZhciBmdW5jdGlvbmFsUmVwbGFjZSA9IHR5cGVvZiByZXBsYWNlVmFsdWUgPT09ICdmdW5jdGlvbic7XG4gICAgICBpZiAoIWZ1bmN0aW9uYWxSZXBsYWNlKSByZXBsYWNlVmFsdWUgPSBTdHJpbmcocmVwbGFjZVZhbHVlKTtcbiAgICAgIHZhciBnbG9iYWwgPSByeC5nbG9iYWw7XG4gICAgICBpZiAoZ2xvYmFsKSB7XG4gICAgICAgIHZhciBmdWxsVW5pY29kZSA9IHJ4LnVuaWNvZGU7XG4gICAgICAgIHJ4Lmxhc3RJbmRleCA9IDA7XG4gICAgICB9XG4gICAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHJlZ0V4cEV4ZWMocngsIFMpO1xuICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsKSBicmVhaztcbiAgICAgICAgcmVzdWx0cy5wdXNoKHJlc3VsdCk7XG4gICAgICAgIGlmICghZ2xvYmFsKSBicmVhaztcbiAgICAgICAgdmFyIG1hdGNoU3RyID0gU3RyaW5nKHJlc3VsdFswXSk7XG4gICAgICAgIGlmIChtYXRjaFN0ciA9PT0gJycpIHJ4Lmxhc3RJbmRleCA9IGFkdmFuY2VTdHJpbmdJbmRleChTLCB0b0xlbmd0aChyeC5sYXN0SW5kZXgpLCBmdWxsVW5pY29kZSk7XG4gICAgICB9XG4gICAgICB2YXIgYWNjdW11bGF0ZWRSZXN1bHQgPSAnJztcbiAgICAgIHZhciBuZXh0U291cmNlUG9zaXRpb24gPSAwO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXN1bHRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdHNbaV07XG4gICAgICAgIHZhciBtYXRjaGVkID0gU3RyaW5nKHJlc3VsdFswXSk7XG4gICAgICAgIHZhciBwb3NpdGlvbiA9IG1heChtaW4odG9JbnRlZ2VyKHJlc3VsdC5pbmRleCksIFMubGVuZ3RoKSwgMCk7XG4gICAgICAgIHZhciBjYXB0dXJlcyA9IFtdO1xuICAgICAgICAvLyBOT1RFOiBUaGlzIGlzIGVxdWl2YWxlbnQgdG9cbiAgICAgICAgLy8gICBjYXB0dXJlcyA9IHJlc3VsdC5zbGljZSgxKS5tYXAobWF5YmVUb1N0cmluZylcbiAgICAgICAgLy8gYnV0IGZvciBzb21lIHJlYXNvbiBgbmF0aXZlU2xpY2UuY2FsbChyZXN1bHQsIDEsIHJlc3VsdC5sZW5ndGgpYCAoY2FsbGVkIGluXG4gICAgICAgIC8vIHRoZSBzbGljZSBwb2x5ZmlsbCB3aGVuIHNsaWNpbmcgbmF0aXZlIGFycmF5cykgXCJkb2Vzbid0IHdvcmtcIiBpbiBzYWZhcmkgOSBhbmRcbiAgICAgICAgLy8gY2F1c2VzIGEgY3Jhc2ggKGh0dHBzOi8vcGFzdGViaW4uY29tL04yMVF6ZVFBKSB3aGVuIHRyeWluZyB0byBkZWJ1ZyBpdC5cbiAgICAgICAgZm9yICh2YXIgaiA9IDE7IGogPCByZXN1bHQubGVuZ3RoOyBqKyspIGNhcHR1cmVzLnB1c2gobWF5YmVUb1N0cmluZyhyZXN1bHRbal0pKTtcbiAgICAgICAgdmFyIG5hbWVkQ2FwdHVyZXMgPSByZXN1bHQuZ3JvdXBzO1xuICAgICAgICBpZiAoZnVuY3Rpb25hbFJlcGxhY2UpIHtcbiAgICAgICAgICB2YXIgcmVwbGFjZXJBcmdzID0gW21hdGNoZWRdLmNvbmNhdChjYXB0dXJlcywgcG9zaXRpb24sIFMpO1xuICAgICAgICAgIGlmIChuYW1lZENhcHR1cmVzICE9PSB1bmRlZmluZWQpIHJlcGxhY2VyQXJncy5wdXNoKG5hbWVkQ2FwdHVyZXMpO1xuICAgICAgICAgIHZhciByZXBsYWNlbWVudCA9IFN0cmluZyhyZXBsYWNlVmFsdWUuYXBwbHkodW5kZWZpbmVkLCByZXBsYWNlckFyZ3MpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXBsYWNlbWVudCA9IGdldFN1YnN0aXR1dGlvbihtYXRjaGVkLCBTLCBwb3NpdGlvbiwgY2FwdHVyZXMsIG5hbWVkQ2FwdHVyZXMsIHJlcGxhY2VWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBvc2l0aW9uID49IG5leHRTb3VyY2VQb3NpdGlvbikge1xuICAgICAgICAgIGFjY3VtdWxhdGVkUmVzdWx0ICs9IFMuc2xpY2UobmV4dFNvdXJjZVBvc2l0aW9uLCBwb3NpdGlvbikgKyByZXBsYWNlbWVudDtcbiAgICAgICAgICBuZXh0U291cmNlUG9zaXRpb24gPSBwb3NpdGlvbiArIG1hdGNoZWQubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gYWNjdW11bGF0ZWRSZXN1bHQgKyBTLnNsaWNlKG5leHRTb3VyY2VQb3NpdGlvbik7XG4gICAgfVxuICBdO1xuXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtZ2V0c3Vic3RpdHV0aW9uXG4gIGZ1bmN0aW9uIGdldFN1YnN0aXR1dGlvbihtYXRjaGVkLCBzdHIsIHBvc2l0aW9uLCBjYXB0dXJlcywgbmFtZWRDYXB0dXJlcywgcmVwbGFjZW1lbnQpIHtcbiAgICB2YXIgdGFpbFBvcyA9IHBvc2l0aW9uICsgbWF0Y2hlZC5sZW5ndGg7XG4gICAgdmFyIG0gPSBjYXB0dXJlcy5sZW5ndGg7XG4gICAgdmFyIHN5bWJvbHMgPSBTVUJTVElUVVRJT05fU1lNQk9MU19OT19OQU1FRDtcbiAgICBpZiAobmFtZWRDYXB0dXJlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBuYW1lZENhcHR1cmVzID0gdG9PYmplY3QobmFtZWRDYXB0dXJlcyk7XG4gICAgICBzeW1ib2xzID0gU1VCU1RJVFVUSU9OX1NZTUJPTFM7XG4gICAgfVxuICAgIHJldHVybiAkcmVwbGFjZS5jYWxsKHJlcGxhY2VtZW50LCBzeW1ib2xzLCBmdW5jdGlvbiAobWF0Y2gsIGNoKSB7XG4gICAgICB2YXIgY2FwdHVyZTtcbiAgICAgIHN3aXRjaCAoY2guY2hhckF0KDApKSB7XG4gICAgICAgIGNhc2UgJyQnOiByZXR1cm4gJyQnO1xuICAgICAgICBjYXNlICcmJzogcmV0dXJuIG1hdGNoZWQ7XG4gICAgICAgIGNhc2UgJ2AnOiByZXR1cm4gc3RyLnNsaWNlKDAsIHBvc2l0aW9uKTtcbiAgICAgICAgY2FzZSBcIidcIjogcmV0dXJuIHN0ci5zbGljZSh0YWlsUG9zKTtcbiAgICAgICAgY2FzZSAnPCc6XG4gICAgICAgICAgY2FwdHVyZSA9IG5hbWVkQ2FwdHVyZXNbY2guc2xpY2UoMSwgLTEpXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDogLy8gXFxkXFxkP1xuICAgICAgICAgIHZhciBuID0gK2NoO1xuICAgICAgICAgIGlmIChuID09PSAwKSByZXR1cm4gbWF0Y2g7XG4gICAgICAgICAgaWYgKG4gPiBtKSB7XG4gICAgICAgICAgICB2YXIgZiA9IGZsb29yKG4gLyAxMCk7XG4gICAgICAgICAgICBpZiAoZiA9PT0gMCkgcmV0dXJuIG1hdGNoO1xuICAgICAgICAgICAgaWYgKGYgPD0gbSkgcmV0dXJuIGNhcHR1cmVzW2YgLSAxXSA9PT0gdW5kZWZpbmVkID8gY2guY2hhckF0KDEpIDogY2FwdHVyZXNbZiAtIDFdICsgY2guY2hhckF0KDEpO1xuICAgICAgICAgICAgcmV0dXJuIG1hdGNoO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXB0dXJlID0gY2FwdHVyZXNbbiAtIDFdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNhcHR1cmUgPT09IHVuZGVmaW5lZCA/ICcnIDogY2FwdHVyZTtcbiAgICB9KTtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///240\n")},function(module,exports,__webpack_require__){"use strict";eval("\n\nvar anObject = __webpack_require__(1);\nvar sameValue = __webpack_require__(100);\nvar regExpExec = __webpack_require__(58);\n\n// @@search logic\n__webpack_require__(59)('search', 1, function (defined, SEARCH, $search, maybeCallNative) {\n return [\n // `String.prototype.search` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.search\n function search(regexp) {\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[SEARCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[SEARCH](String(O));\n },\n // `RegExp.prototype[@@search]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@search\n function (regexp) {\n var res = maybeCallNative($search, regexp, this);\n if (res.done) return res.value;\n var rx = anObject(regexp);\n var S = String(this);\n var previousLastIndex = rx.lastIndex;\n if (!sameValue(previousLastIndex, 0)) rx.lastIndex = 0;\n var result = regExpExec(rx, S);\n if (!sameValue(rx.lastIndex, previousLastIndex)) rx.lastIndex = previousLastIndex;\n return result === null ? -1 : result.index;\n }\n ];\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLnNlYXJjaC5qcz8zODZkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhOztBQUViLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGdCQUFnQixtQkFBTyxDQUFDLEdBQWU7QUFDdkMsaUJBQWlCLG1CQUFPLENBQUMsRUFBeUI7O0FBRWxEO0FBQ0EsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjI0MS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgc2FtZVZhbHVlID0gcmVxdWlyZSgnLi9fc2FtZS12YWx1ZScpO1xudmFyIHJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuL19yZWdleHAtZXhlYy1hYnN0cmFjdCcpO1xuXG4vLyBAQHNlYXJjaCBsb2dpY1xucmVxdWlyZSgnLi9fZml4LXJlLXdrcycpKCdzZWFyY2gnLCAxLCBmdW5jdGlvbiAoZGVmaW5lZCwgU0VBUkNILCAkc2VhcmNoLCBtYXliZUNhbGxOYXRpdmUpIHtcbiAgcmV0dXJuIFtcbiAgICAvLyBgU3RyaW5nLnByb3RvdHlwZS5zZWFyY2hgIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUuc2VhcmNoXG4gICAgZnVuY3Rpb24gc2VhcmNoKHJlZ2V4cCkge1xuICAgICAgdmFyIE8gPSBkZWZpbmVkKHRoaXMpO1xuICAgICAgdmFyIGZuID0gcmVnZXhwID09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHJlZ2V4cFtTRUFSQ0hdO1xuICAgICAgcmV0dXJuIGZuICE9PSB1bmRlZmluZWQgPyBmbi5jYWxsKHJlZ2V4cCwgTykgOiBuZXcgUmVnRXhwKHJlZ2V4cClbU0VBUkNIXShTdHJpbmcoTykpO1xuICAgIH0sXG4gICAgLy8gYFJlZ0V4cC5wcm90b3R5cGVbQEBzZWFyY2hdYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1yZWdleHAucHJvdG90eXBlLUBAc2VhcmNoXG4gICAgZnVuY3Rpb24gKHJlZ2V4cCkge1xuICAgICAgdmFyIHJlcyA9IG1heWJlQ2FsbE5hdGl2ZSgkc2VhcmNoLCByZWdleHAsIHRoaXMpO1xuICAgICAgaWYgKHJlcy5kb25lKSByZXR1cm4gcmVzLnZhbHVlO1xuICAgICAgdmFyIHJ4ID0gYW5PYmplY3QocmVnZXhwKTtcbiAgICAgIHZhciBTID0gU3RyaW5nKHRoaXMpO1xuICAgICAgdmFyIHByZXZpb3VzTGFzdEluZGV4ID0gcngubGFzdEluZGV4O1xuICAgICAgaWYgKCFzYW1lVmFsdWUocHJldmlvdXNMYXN0SW5kZXgsIDApKSByeC5sYXN0SW5kZXggPSAwO1xuICAgICAgdmFyIHJlc3VsdCA9IHJlZ0V4cEV4ZWMocngsIFMpO1xuICAgICAgaWYgKCFzYW1lVmFsdWUocngubGFzdEluZGV4LCBwcmV2aW91c0xhc3RJbmRleCkpIHJ4Lmxhc3RJbmRleCA9IHByZXZpb3VzTGFzdEluZGV4O1xuICAgICAgcmV0dXJuIHJlc3VsdCA9PT0gbnVsbCA/IC0xIDogcmVzdWx0LmluZGV4O1xuICAgIH1cbiAgXTtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///241\n")},function(module,exports,__webpack_require__){"use strict";eval("\n\nvar isRegExp = __webpack_require__(56);\nvar anObject = __webpack_require__(1);\nvar speciesConstructor = __webpack_require__(51);\nvar advanceStringIndex = __webpack_require__(88);\nvar toLength = __webpack_require__(6);\nvar callRegExpExec = __webpack_require__(58);\nvar regexpExec = __webpack_require__(87);\nvar fails = __webpack_require__(3);\nvar $min = Math.min;\nvar $push = [].push;\nvar $SPLIT = 'split';\nvar LENGTH = 'length';\nvar LAST_INDEX = 'lastIndex';\nvar MAX_UINT32 = 0xffffffff;\n\n// babel-minify transpiles RegExp('x', 'y') -> /x/y and it causes SyntaxError\nvar SUPPORTS_Y = !fails(function () { RegExp(MAX_UINT32, 'y'); });\n\n// @@split logic\n__webpack_require__(59)('split', 2, function (defined, SPLIT, $split, maybeCallNative) {\n var internalSplit;\n if (\n 'abbc'[$SPLIT](/(b)*/)[1] == 'c' ||\n 'test'[$SPLIT](/(?:)/, -1)[LENGTH] != 4 ||\n 'ab'[$SPLIT](/(?:ab)*/)[LENGTH] != 2 ||\n '.'[$SPLIT](/(.?)(.?)/)[LENGTH] != 4 ||\n '.'[$SPLIT](/()()/)[LENGTH] > 1 ||\n ''[$SPLIT](/.?/)[LENGTH]\n ) {\n // based on es5-shim implementation, need to rework it\n internalSplit = function (separator, limit) {\n var string = String(this);\n if (separator === undefined && limit === 0) return [];\n // If `separator` is not a regex, use native split\n if (!isRegExp(separator)) return $split.call(string, separator, limit);\n var output = [];\n var flags = (separator.ignoreCase ? 'i' : '') +\n (separator.multiline ? 'm' : '') +\n (separator.unicode ? 'u' : '') +\n (separator.sticky ? 'y' : '');\n var lastLastIndex = 0;\n var splitLimit = limit === undefined ? MAX_UINT32 : limit >>> 0;\n // Make `global` and avoid `lastIndex` issues by working with a copy\n var separatorCopy = new RegExp(separator.source, flags + 'g');\n var match, lastIndex, lastLength;\n while (match = regexpExec.call(separatorCopy, string)) {\n lastIndex = separatorCopy[LAST_INDEX];\n if (lastIndex > lastLastIndex) {\n output.push(string.slice(lastLastIndex, match.index));\n if (match[LENGTH] > 1 && match.index < string[LENGTH]) $push.apply(output, match.slice(1));\n lastLength = match[0][LENGTH];\n lastLastIndex = lastIndex;\n if (output[LENGTH] >= splitLimit) break;\n }\n if (separatorCopy[LAST_INDEX] === match.index) separatorCopy[LAST_INDEX]++; // Avoid an infinite loop\n }\n if (lastLastIndex === string[LENGTH]) {\n if (lastLength || !separatorCopy.test('')) output.push('');\n } else output.push(string.slice(lastLastIndex));\n return output[LENGTH] > splitLimit ? output.slice(0, splitLimit) : output;\n };\n // Chakra, V8\n } else if ('0'[$SPLIT](undefined, 0)[LENGTH]) {\n internalSplit = function (separator, limit) {\n return separator === undefined && limit === 0 ? [] : $split.call(this, separator, limit);\n };\n } else {\n internalSplit = $split;\n }\n\n return [\n // `String.prototype.split` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.split\n function split(separator, limit) {\n var O = defined(this);\n var splitter = separator == undefined ? undefined : separator[SPLIT];\n return splitter !== undefined\n ? splitter.call(separator, O, limit)\n : internalSplit.call(String(O), separator, limit);\n },\n // `RegExp.prototype[@@split]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@split\n //\n // NOTE: This cannot be properly polyfilled in engines that don't support\n // the 'y' flag.\n function (regexp, limit) {\n var res = maybeCallNative(internalSplit, regexp, this, limit, internalSplit !== $split);\n if (res.done) return res.value;\n\n var rx = anObject(regexp);\n var S = String(this);\n var C = speciesConstructor(rx, RegExp);\n\n var unicodeMatching = rx.unicode;\n var flags = (rx.ignoreCase ? 'i' : '') +\n (rx.multiline ? 'm' : '') +\n (rx.unicode ? 'u' : '') +\n (SUPPORTS_Y ? 'y' : 'g');\n\n // ^(? + rx + ) is needed, in combination with some S slicing, to\n // simulate the 'y' flag.\n var splitter = new C(SUPPORTS_Y ? rx : '^(?:' + rx.source + ')', flags);\n var lim = limit === undefined ? MAX_UINT32 : limit >>> 0;\n if (lim === 0) return [];\n if (S.length === 0) return callRegExpExec(splitter, S) === null ? [S] : [];\n var p = 0;\n var q = 0;\n var A = [];\n while (q < S.length) {\n splitter.lastIndex = SUPPORTS_Y ? q : 0;\n var z = callRegExpExec(splitter, SUPPORTS_Y ? S : S.slice(q));\n var e;\n if (\n z === null ||\n (e = $min(toLength(splitter.lastIndex + (SUPPORTS_Y ? 0 : q)), S.length)) === p\n ) {\n q = advanceStringIndex(S, q, unicodeMatching);\n } else {\n A.push(S.slice(p, q));\n if (A.length === lim) return A;\n for (var i = 1; i <= z.length - 1; i++) {\n A.push(z[i]);\n if (A.length === lim) return A;\n }\n q = p = e;\n }\n }\n A.push(S.slice(p));\n return A;\n }\n ];\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLnNwbGl0LmpzPzI4YTUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWIsZUFBZSxtQkFBTyxDQUFDLEVBQWM7QUFDckMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMseUJBQXlCLG1CQUFPLENBQUMsRUFBd0I7QUFDekQseUJBQXlCLG1CQUFPLENBQUMsRUFBeUI7QUFDMUQsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMscUJBQXFCLG1CQUFPLENBQUMsRUFBeUI7QUFDdEQsaUJBQWlCLG1CQUFPLENBQUMsRUFBZ0I7QUFDekMsWUFBWSxtQkFBTyxDQUFDLENBQVU7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EscUNBQXFDLHlCQUF5QixFQUFFOztBQUVoRTtBQUNBLG1CQUFPLENBQUMsRUFBZTtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1GQUFtRjtBQUNuRjtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EseUJBQXlCLG1CQUFtQjtBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjQyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaXNSZWdFeHAgPSByZXF1aXJlKCcuL19pcy1yZWdleHAnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4vX3NwZWNpZXMtY29uc3RydWN0b3InKTtcbnZhciBhZHZhbmNlU3RyaW5nSW5kZXggPSByZXF1aXJlKCcuL19hZHZhbmNlLXN0cmluZy1pbmRleCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgY2FsbFJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuL19yZWdleHAtZXhlYy1hYnN0cmFjdCcpO1xudmFyIHJlZ2V4cEV4ZWMgPSByZXF1aXJlKCcuL19yZWdleHAtZXhlYycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciAkbWluID0gTWF0aC5taW47XG52YXIgJHB1c2ggPSBbXS5wdXNoO1xudmFyICRTUExJVCA9ICdzcGxpdCc7XG52YXIgTEVOR1RIID0gJ2xlbmd0aCc7XG52YXIgTEFTVF9JTkRFWCA9ICdsYXN0SW5kZXgnO1xudmFyIE1BWF9VSU5UMzIgPSAweGZmZmZmZmZmO1xuXG4vLyBiYWJlbC1taW5pZnkgdHJhbnNwaWxlcyBSZWdFeHAoJ3gnLCAneScpIC0+IC94L3kgYW5kIGl0IGNhdXNlcyBTeW50YXhFcnJvclxudmFyIFNVUFBPUlRTX1kgPSAhZmFpbHMoZnVuY3Rpb24gKCkgeyBSZWdFeHAoTUFYX1VJTlQzMiwgJ3knKTsgfSk7XG5cbi8vIEBAc3BsaXQgbG9naWNcbnJlcXVpcmUoJy4vX2ZpeC1yZS13a3MnKSgnc3BsaXQnLCAyLCBmdW5jdGlvbiAoZGVmaW5lZCwgU1BMSVQsICRzcGxpdCwgbWF5YmVDYWxsTmF0aXZlKSB7XG4gIHZhciBpbnRlcm5hbFNwbGl0O1xuICBpZiAoXG4gICAgJ2FiYmMnWyRTUExJVF0oLyhiKSovKVsxXSA9PSAnYycgfHxcbiAgICAndGVzdCdbJFNQTElUXSgvKD86KS8sIC0xKVtMRU5HVEhdICE9IDQgfHxcbiAgICAnYWInWyRTUExJVF0oLyg/OmFiKSovKVtMRU5HVEhdICE9IDIgfHxcbiAgICAnLidbJFNQTElUXSgvKC4/KSguPykvKVtMRU5HVEhdICE9IDQgfHxcbiAgICAnLidbJFNQTElUXSgvKCkoKS8pW0xFTkdUSF0gPiAxIHx8XG4gICAgJydbJFNQTElUXSgvLj8vKVtMRU5HVEhdXG4gICkge1xuICAgIC8vIGJhc2VkIG9uIGVzNS1zaGltIGltcGxlbWVudGF0aW9uLCBuZWVkIHRvIHJld29yayBpdFxuICAgIGludGVybmFsU3BsaXQgPSBmdW5jdGlvbiAoc2VwYXJhdG9yLCBsaW1pdCkge1xuICAgICAgdmFyIHN0cmluZyA9IFN0cmluZyh0aGlzKTtcbiAgICAgIGlmIChzZXBhcmF0b3IgPT09IHVuZGVmaW5lZCAmJiBsaW1pdCA9PT0gMCkgcmV0dXJuIFtdO1xuICAgICAgLy8gSWYgYHNlcGFyYXRvcmAgaXMgbm90IGEgcmVnZXgsIHVzZSBuYXRpdmUgc3BsaXRcbiAgICAgIGlmICghaXNSZWdFeHAoc2VwYXJhdG9yKSkgcmV0dXJuICRzcGxpdC5jYWxsKHN0cmluZywgc2VwYXJhdG9yLCBsaW1pdCk7XG4gICAgICB2YXIgb3V0cHV0ID0gW107XG4gICAgICB2YXIgZmxhZ3MgPSAoc2VwYXJhdG9yLmlnbm9yZUNhc2UgPyAnaScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHNlcGFyYXRvci5tdWx0aWxpbmUgPyAnbScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHNlcGFyYXRvci51bmljb2RlID8gJ3UnIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChzZXBhcmF0b3Iuc3RpY2t5ID8gJ3knIDogJycpO1xuICAgICAgdmFyIGxhc3RMYXN0SW5kZXggPSAwO1xuICAgICAgdmFyIHNwbGl0TGltaXQgPSBsaW1pdCA9PT0gdW5kZWZpbmVkID8gTUFYX1VJTlQzMiA6IGxpbWl0ID4+PiAwO1xuICAgICAgLy8gTWFrZSBgZ2xvYmFsYCBhbmQgYXZvaWQgYGxhc3RJbmRleGAgaXNzdWVzIGJ5IHdvcmtpbmcgd2l0aCBhIGNvcHlcbiAgICAgIHZhciBzZXBhcmF0b3JDb3B5ID0gbmV3IFJlZ0V4cChzZXBhcmF0b3Iuc291cmNlLCBmbGFncyArICdnJyk7XG4gICAgICB2YXIgbWF0Y2gsIGxhc3RJbmRleCwgbGFzdExlbmd0aDtcbiAgICAgIHdoaWxlIChtYXRjaCA9IHJlZ2V4cEV4ZWMuY2FsbChzZXBhcmF0b3JDb3B5LCBzdHJpbmcpKSB7XG4gICAgICAgIGxhc3RJbmRleCA9IHNlcGFyYXRvckNvcHlbTEFTVF9JTkRFWF07XG4gICAgICAgIGlmIChsYXN0SW5kZXggPiBsYXN0TGFzdEluZGV4KSB7XG4gICAgICAgICAgb3V0cHV0LnB1c2goc3RyaW5nLnNsaWNlKGxhc3RMYXN0SW5kZXgsIG1hdGNoLmluZGV4KSk7XG4gICAgICAgICAgaWYgKG1hdGNoW0xFTkdUSF0gPiAxICYmIG1hdGNoLmluZGV4IDwgc3RyaW5nW0xFTkdUSF0pICRwdXNoLmFwcGx5KG91dHB1dCwgbWF0Y2guc2xpY2UoMSkpO1xuICAgICAgICAgIGxhc3RMZW5ndGggPSBtYXRjaFswXVtMRU5HVEhdO1xuICAgICAgICAgIGxhc3RMYXN0SW5kZXggPSBsYXN0SW5kZXg7XG4gICAgICAgICAgaWYgKG91dHB1dFtMRU5HVEhdID49IHNwbGl0TGltaXQpIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzZXBhcmF0b3JDb3B5W0xBU1RfSU5ERVhdID09PSBtYXRjaC5pbmRleCkgc2VwYXJhdG9yQ29weVtMQVNUX0lOREVYXSsrOyAvLyBBdm9pZCBhbiBpbmZpbml0ZSBsb29wXG4gICAgICB9XG4gICAgICBpZiAobGFzdExhc3RJbmRleCA9PT0gc3RyaW5nW0xFTkdUSF0pIHtcbiAgICAgICAgaWYgKGxhc3RMZW5ndGggfHwgIXNlcGFyYXRvckNvcHkudGVzdCgnJykpIG91dHB1dC5wdXNoKCcnKTtcbiAgICAgIH0gZWxzZSBvdXRwdXQucHVzaChzdHJpbmcuc2xpY2UobGFzdExhc3RJbmRleCkpO1xuICAgICAgcmV0dXJuIG91dHB1dFtMRU5HVEhdID4gc3BsaXRMaW1pdCA/IG91dHB1dC5zbGljZSgwLCBzcGxpdExpbWl0KSA6IG91dHB1dDtcbiAgICB9O1xuICAvLyBDaGFrcmEsIFY4XG4gIH0gZWxzZSBpZiAoJzAnWyRTUExJVF0odW5kZWZpbmVkLCAwKVtMRU5HVEhdKSB7XG4gICAgaW50ZXJuYWxTcGxpdCA9IGZ1bmN0aW9uIChzZXBhcmF0b3IsIGxpbWl0KSB7XG4gICAgICByZXR1cm4gc2VwYXJhdG9yID09PSB1bmRlZmluZWQgJiYgbGltaXQgPT09IDAgPyBbXSA6ICRzcGxpdC5jYWxsKHRoaXMsIHNlcGFyYXRvciwgbGltaXQpO1xuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgaW50ZXJuYWxTcGxpdCA9ICRzcGxpdDtcbiAgfVxuXG4gIHJldHVybiBbXG4gICAgLy8gYFN0cmluZy5wcm90b3R5cGUuc3BsaXRgIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUuc3BsaXRcbiAgICBmdW5jdGlvbiBzcGxpdChzZXBhcmF0b3IsIGxpbWl0KSB7XG4gICAgICB2YXIgTyA9IGRlZmluZWQodGhpcyk7XG4gICAgICB2YXIgc3BsaXR0ZXIgPSBzZXBhcmF0b3IgPT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogc2VwYXJhdG9yW1NQTElUXTtcbiAgICAgIHJldHVybiBzcGxpdHRlciAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8gc3BsaXR0ZXIuY2FsbChzZXBhcmF0b3IsIE8sIGxpbWl0KVxuICAgICAgICA6IGludGVybmFsU3BsaXQuY2FsbChTdHJpbmcoTyksIHNlcGFyYXRvciwgbGltaXQpO1xuICAgIH0sXG4gICAgLy8gYFJlZ0V4cC5wcm90b3R5cGVbQEBzcGxpdF1gIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXJlZ2V4cC5wcm90b3R5cGUtQEBzcGxpdFxuICAgIC8vXG4gICAgLy8gTk9URTogVGhpcyBjYW5ub3QgYmUgcHJvcGVybHkgcG9seWZpbGxlZCBpbiBlbmdpbmVzIHRoYXQgZG9uJ3Qgc3VwcG9ydFxuICAgIC8vIHRoZSAneScgZmxhZy5cbiAgICBmdW5jdGlvbiAocmVnZXhwLCBsaW1pdCkge1xuICAgICAgdmFyIHJlcyA9IG1heWJlQ2FsbE5hdGl2ZShpbnRlcm5hbFNwbGl0LCByZWdleHAsIHRoaXMsIGxpbWl0LCBpbnRlcm5hbFNwbGl0ICE9PSAkc3BsaXQpO1xuICAgICAgaWYgKHJlcy5kb25lKSByZXR1cm4gcmVzLnZhbHVlO1xuXG4gICAgICB2YXIgcnggPSBhbk9iamVjdChyZWdleHApO1xuICAgICAgdmFyIFMgPSBTdHJpbmcodGhpcyk7XG4gICAgICB2YXIgQyA9IHNwZWNpZXNDb25zdHJ1Y3RvcihyeCwgUmVnRXhwKTtcblxuICAgICAgdmFyIHVuaWNvZGVNYXRjaGluZyA9IHJ4LnVuaWNvZGU7XG4gICAgICB2YXIgZmxhZ3MgPSAocnguaWdub3JlQ2FzZSA/ICdpJyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAocngubXVsdGlsaW5lID8gJ20nIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChyeC51bmljb2RlID8gJ3UnIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChTVVBQT1JUU19ZID8gJ3knIDogJ2cnKTtcblxuICAgICAgLy8gXig/ICsgcnggKyApIGlzIG5lZWRlZCwgaW4gY29tYmluYXRpb24gd2l0aCBzb21lIFMgc2xpY2luZywgdG9cbiAgICAgIC8vIHNpbXVsYXRlIHRoZSAneScgZmxhZy5cbiAgICAgIHZhciBzcGxpdHRlciA9IG5ldyBDKFNVUFBPUlRTX1kgPyByeCA6ICdeKD86JyArIHJ4LnNvdXJjZSArICcpJywgZmxhZ3MpO1xuICAgICAgdmFyIGxpbSA9IGxpbWl0ID09PSB1bmRlZmluZWQgPyBNQVhfVUlOVDMyIDogbGltaXQgPj4+IDA7XG4gICAgICBpZiAobGltID09PSAwKSByZXR1cm4gW107XG4gICAgICBpZiAoUy5sZW5ndGggPT09IDApIHJldHVybiBjYWxsUmVnRXhwRXhlYyhzcGxpdHRlciwgUykgPT09IG51bGwgPyBbU10gOiBbXTtcbiAgICAgIHZhciBwID0gMDtcbiAgICAgIHZhciBxID0gMDtcbiAgICAgIHZhciBBID0gW107XG4gICAgICB3aGlsZSAocSA8IFMubGVuZ3RoKSB7XG4gICAgICAgIHNwbGl0dGVyLmxhc3RJbmRleCA9IFNVUFBPUlRTX1kgPyBxIDogMDtcbiAgICAgICAgdmFyIHogPSBjYWxsUmVnRXhwRXhlYyhzcGxpdHRlciwgU1VQUE9SVFNfWSA/IFMgOiBTLnNsaWNlKHEpKTtcbiAgICAgICAgdmFyIGU7XG4gICAgICAgIGlmIChcbiAgICAgICAgICB6ID09PSBudWxsIHx8XG4gICAgICAgICAgKGUgPSAkbWluKHRvTGVuZ3RoKHNwbGl0dGVyLmxhc3RJbmRleCArIChTVVBQT1JUU19ZID8gMCA6IHEpKSwgUy5sZW5ndGgpKSA9PT0gcFxuICAgICAgICApIHtcbiAgICAgICAgICBxID0gYWR2YW5jZVN0cmluZ0luZGV4KFMsIHEsIHVuaWNvZGVNYXRjaGluZyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgQS5wdXNoKFMuc2xpY2UocCwgcSkpO1xuICAgICAgICAgIGlmIChBLmxlbmd0aCA9PT0gbGltKSByZXR1cm4gQTtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8PSB6Lmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICAgICAgQS5wdXNoKHpbaV0pO1xuICAgICAgICAgICAgaWYgKEEubGVuZ3RoID09PSBsaW0pIHJldHVybiBBO1xuICAgICAgICAgIH1cbiAgICAgICAgICBxID0gcCA9IGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIEEucHVzaChTLnNsaWNlKHApKTtcbiAgICAgIHJldHVybiBBO1xuICAgIH1cbiAgXTtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///242\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar LIBRARY = __webpack_require__(29);\nvar global = __webpack_require__(2);\nvar ctx = __webpack_require__(19);\nvar classof = __webpack_require__(44);\nvar $export = __webpack_require__(0);\nvar isObject = __webpack_require__(4);\nvar aFunction = __webpack_require__(10);\nvar anInstance = __webpack_require__(39);\nvar forOf = __webpack_require__(40);\nvar speciesConstructor = __webpack_require__(51);\nvar task = __webpack_require__(89).set;\nvar microtask = __webpack_require__(90)();\nvar newPromiseCapabilityModule = __webpack_require__(91);\nvar perform = __webpack_require__(115);\nvar userAgent = __webpack_require__(60);\nvar promiseResolve = __webpack_require__(116);\nvar PROMISE = 'Promise';\nvar TypeError = global.TypeError;\nvar process = global.process;\nvar versions = process && process.versions;\nvar v8 = versions && versions.v8 || '';\nvar $Promise = global[PROMISE];\nvar isNode = classof(process) == 'process';\nvar empty = function () { /* empty */ };\nvar Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper;\nvar newPromiseCapability = newGenericPromiseCapability = newPromiseCapabilityModule.f;\n\nvar USE_NATIVE = !!function () {\n try {\n // correct subclassing with @@species support\n var promise = $Promise.resolve(1);\n var FakePromise = (promise.constructor = {})[__webpack_require__(5)('species')] = function (exec) {\n exec(empty, empty);\n };\n // unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n return (isNode || typeof PromiseRejectionEvent == 'function')\n && promise.then(empty) instanceof FakePromise\n // v8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables\n // https://bugs.chromium.org/p/chromium/issues/detail?id=830565\n // we can't detect it synchronously, so just check versions\n && v8.indexOf('6.6') !== 0\n && userAgent.indexOf('Chrome/66') === -1;\n } catch (e) { /* empty */ }\n}();\n\n// helpers\nvar isThenable = function (it) {\n var then;\n return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\nvar notify = function (promise, isReject) {\n if (promise._n) return;\n promise._n = true;\n var chain = promise._c;\n microtask(function () {\n var value = promise._v;\n var ok = promise._s == 1;\n var i = 0;\n var run = function (reaction) {\n var handler = ok ? reaction.ok : reaction.fail;\n var resolve = reaction.resolve;\n var reject = reaction.reject;\n var domain = reaction.domain;\n var result, then, exited;\n try {\n if (handler) {\n if (!ok) {\n if (promise._h == 2) onHandleUnhandled(promise);\n promise._h = 1;\n }\n if (handler === true) result = value;\n else {\n if (domain) domain.enter();\n result = handler(value); // may throw\n if (domain) {\n domain.exit();\n exited = true;\n }\n }\n if (result === reaction.promise) {\n reject(TypeError('Promise-chain cycle'));\n } else if (then = isThenable(result)) {\n then.call(result, resolve, reject);\n } else resolve(result);\n } else reject(value);\n } catch (e) {\n if (domain && !exited) domain.exit();\n reject(e);\n }\n };\n while (chain.length > i) run(chain[i++]); // variable length - can't use forEach\n promise._c = [];\n promise._n = false;\n if (isReject && !promise._h) onUnhandled(promise);\n });\n};\nvar onUnhandled = function (promise) {\n task.call(global, function () {\n var value = promise._v;\n var unhandled = isUnhandled(promise);\n var result, handler, console;\n if (unhandled) {\n result = perform(function () {\n if (isNode) {\n process.emit('unhandledRejection', value, promise);\n } else if (handler = global.onunhandledrejection) {\n handler({ promise: promise, reason: value });\n } else if ((console = global.console) && console.error) {\n console.error('Unhandled promise rejection', value);\n }\n });\n // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n promise._h = isNode || isUnhandled(promise) ? 2 : 1;\n } promise._a = undefined;\n if (unhandled && result.e) throw result.v;\n });\n};\nvar isUnhandled = function (promise) {\n return promise._h !== 1 && (promise._a || promise._c).length === 0;\n};\nvar onHandleUnhandled = function (promise) {\n task.call(global, function () {\n var handler;\n if (isNode) {\n process.emit('rejectionHandled', promise);\n } else if (handler = global.onrejectionhandled) {\n handler({ promise: promise, reason: promise._v });\n }\n });\n};\nvar $reject = function (value) {\n var promise = this;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n promise._v = value;\n promise._s = 2;\n if (!promise._a) promise._a = promise._c.slice();\n notify(promise, true);\n};\nvar $resolve = function (value) {\n var promise = this;\n var then;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n try {\n if (promise === value) throw TypeError(\"Promise can't be resolved itself\");\n if (then = isThenable(value)) {\n microtask(function () {\n var wrapper = { _w: promise, _d: false }; // wrap\n try {\n then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));\n } catch (e) {\n $reject.call(wrapper, e);\n }\n });\n } else {\n promise._v = value;\n promise._s = 1;\n notify(promise, false);\n }\n } catch (e) {\n $reject.call({ _w: promise, _d: false }, e); // wrap\n }\n};\n\n// constructor polyfill\nif (!USE_NATIVE) {\n // 25.4.3.1 Promise(executor)\n $Promise = function Promise(executor) {\n anInstance(this, $Promise, PROMISE, '_h');\n aFunction(executor);\n Internal.call(this);\n try {\n executor(ctx($resolve, this, 1), ctx($reject, this, 1));\n } catch (err) {\n $reject.call(this, err);\n }\n };\n // eslint-disable-next-line no-unused-vars\n Internal = function Promise(executor) {\n this._c = []; // <- awaiting reactions\n this._a = undefined; // <- checked in isUnhandled reactions\n this._s = 0; // <- state\n this._d = false; // <- done\n this._v = undefined; // <- value\n this._h = 0; // <- rejection state, 0 - default, 1 - handled, 2 - unhandled\n this._n = false; // <- notify\n };\n Internal.prototype = __webpack_require__(41)($Promise.prototype, {\n // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)\n then: function then(onFulfilled, onRejected) {\n var reaction = newPromiseCapability(speciesConstructor(this, $Promise));\n reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\n reaction.fail = typeof onRejected == 'function' && onRejected;\n reaction.domain = isNode ? process.domain : undefined;\n this._c.push(reaction);\n if (this._a) this._a.push(reaction);\n if (this._s) notify(this, false);\n return reaction.promise;\n },\n // 25.4.5.1 Promise.prototype.catch(onRejected)\n 'catch': function (onRejected) {\n return this.then(undefined, onRejected);\n }\n });\n OwnPromiseCapability = function () {\n var promise = new Internal();\n this.promise = promise;\n this.resolve = ctx($resolve, promise, 1);\n this.reject = ctx($reject, promise, 1);\n };\n newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n return C === $Promise || C === Wrapper\n ? new OwnPromiseCapability(C)\n : newGenericPromiseCapability(C);\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Promise: $Promise });\n__webpack_require__(43)($Promise, PROMISE);\n__webpack_require__(38)(PROMISE);\nWrapper = __webpack_require__(18)[PROMISE];\n\n// statics\n$export($export.S + $export.F * !USE_NATIVE, PROMISE, {\n // 25.4.4.5 Promise.reject(r)\n reject: function reject(r) {\n var capability = newPromiseCapability(this);\n var $$reject = capability.reject;\n $$reject(r);\n return capability.promise;\n }\n});\n$export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {\n // 25.4.4.6 Promise.resolve(x)\n resolve: function resolve(x) {\n return promiseResolve(LIBRARY && this === Wrapper ? $Promise : this, x);\n }\n});\n$export($export.S + $export.F * !(USE_NATIVE && __webpack_require__(57)(function (iter) {\n $Promise.all(iter)['catch'](empty);\n})), PROMISE, {\n // 25.4.4.1 Promise.all(iterable)\n all: function all(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var values = [];\n var index = 0;\n var remaining = 1;\n forOf(iterable, false, function (promise) {\n var $index = index++;\n var alreadyCalled = false;\n values.push(undefined);\n remaining++;\n C.resolve(promise).then(function (value) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[$index] = value;\n --remaining || resolve(values);\n }, reject);\n });\n --remaining || resolve(values);\n });\n if (result.e) reject(result.v);\n return capability.promise;\n },\n // 25.4.4.4 Promise.race(iterable)\n race: function race(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var reject = capability.reject;\n var result = perform(function () {\n forOf(iterable, false, function (promise) {\n C.resolve(promise).then(capability.resolve, reject);\n });\n });\n if (result.e) reject(result.v);\n return capability.promise;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucHJvbWlzZS5qcz81NTFjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsY0FBYyxtQkFBTyxDQUFDLEVBQVk7QUFDbEMsYUFBYSxtQkFBTyxDQUFDLENBQVc7QUFDaEMsVUFBVSxtQkFBTyxDQUFDLEVBQVE7QUFDMUIsY0FBYyxtQkFBTyxDQUFDLEVBQVk7QUFDbEMsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2QyxpQkFBaUIsbUJBQU8sQ0FBQyxFQUFnQjtBQUN6QyxZQUFZLG1CQUFPLENBQUMsRUFBVztBQUMvQix5QkFBeUIsbUJBQU8sQ0FBQyxFQUF3QjtBQUN6RCxXQUFXLG1CQUFPLENBQUMsRUFBUztBQUM1QixnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFjO0FBQ3RDLGlDQUFpQyxtQkFBTyxDQUFDLEVBQTJCO0FBQ3BFLGNBQWMsbUJBQU8sQ0FBQyxHQUFZO0FBQ2xDLGdCQUFnQixtQkFBTyxDQUFDLEVBQWU7QUFDdkMscUJBQXFCLG1CQUFPLENBQUMsR0FBb0I7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtDQUErQyxFQUFFLG1CQUFPLENBQUMsQ0FBUTtBQUNqRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUcsWUFBWTtBQUNmLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0M7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQSxXQUFXO0FBQ1gsU0FBUztBQUNULE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZDQUE2QztBQUM3QztBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsbUJBQW1CLGtDQUFrQztBQUNyRCxTQUFTO0FBQ1Q7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxlQUFlLHVDQUF1QztBQUN0RDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLDBCQUEwQjtBQUNqRDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILGtCQUFrQix5QkFBeUIsS0FBSztBQUNoRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCLHdCQUF3QjtBQUN4QixnQkFBZ0I7QUFDaEIsb0JBQW9CO0FBQ3BCLHdCQUF3QjtBQUN4QixnQkFBZ0I7QUFDaEIsb0JBQW9CO0FBQ3BCO0FBQ0EsdUJBQXVCLG1CQUFPLENBQUMsRUFBaUI7QUFDaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDBEQUEwRCxvQkFBb0I7QUFDOUUsbUJBQU8sQ0FBQyxFQUFzQjtBQUM5QixtQkFBTyxDQUFDLEVBQWdCO0FBQ3hCLFVBQVUsbUJBQU8sQ0FBQyxFQUFTOztBQUUzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCxnREFBZ0QsbUJBQU8sQ0FBQyxFQUFnQjtBQUN4RTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULE9BQU87QUFDUDtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjQzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIExJQlJBUlkgPSByZXF1aXJlKCcuL19saWJyYXJ5Jyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4vX2NsYXNzb2YnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG52YXIgZm9yT2YgPSByZXF1aXJlKCcuL19mb3Itb2YnKTtcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuL19zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG52YXIgdGFzayA9IHJlcXVpcmUoJy4vX3Rhc2snKS5zZXQ7XG52YXIgbWljcm90YXNrID0gcmVxdWlyZSgnLi9fbWljcm90YXNrJykoKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZSA9IHJlcXVpcmUoJy4vX25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcbnZhciBwZXJmb3JtID0gcmVxdWlyZSgnLi9fcGVyZm9ybScpO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4vX3VzZXItYWdlbnQnKTtcbnZhciBwcm9taXNlUmVzb2x2ZSA9IHJlcXVpcmUoJy4vX3Byb21pc2UtcmVzb2x2ZScpO1xudmFyIFBST01JU0UgPSAnUHJvbWlzZSc7XG52YXIgVHlwZUVycm9yID0gZ2xvYmFsLlR5cGVFcnJvcjtcbnZhciBwcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3M7XG52YXIgdmVyc2lvbnMgPSBwcm9jZXNzICYmIHByb2Nlc3MudmVyc2lvbnM7XG52YXIgdjggPSB2ZXJzaW9ucyAmJiB2ZXJzaW9ucy52OCB8fCAnJztcbnZhciAkUHJvbWlzZSA9IGdsb2JhbFtQUk9NSVNFXTtcbnZhciBpc05vZGUgPSBjbGFzc29mKHByb2Nlc3MpID09ICdwcm9jZXNzJztcbnZhciBlbXB0eSA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcbnZhciBJbnRlcm5hbCwgbmV3R2VuZXJpY1Byb21pc2VDYXBhYmlsaXR5LCBPd25Qcm9taXNlQ2FwYWJpbGl0eSwgV3JhcHBlcjtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IG5ld0dlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmY7XG5cbnZhciBVU0VfTkFUSVZFID0gISFmdW5jdGlvbiAoKSB7XG4gIHRyeSB7XG4gICAgLy8gY29ycmVjdCBzdWJjbGFzc2luZyB3aXRoIEBAc3BlY2llcyBzdXBwb3J0XG4gICAgdmFyIHByb21pc2UgPSAkUHJvbWlzZS5yZXNvbHZlKDEpO1xuICAgIHZhciBGYWtlUHJvbWlzZSA9IChwcm9taXNlLmNvbnN0cnVjdG9yID0ge30pW3JlcXVpcmUoJy4vX3drcycpKCdzcGVjaWVzJyldID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgICAgIGV4ZWMoZW1wdHksIGVtcHR5KTtcbiAgICB9O1xuICAgIC8vIHVuaGFuZGxlZCByZWplY3Rpb25zIHRyYWNraW5nIHN1cHBvcnQsIE5vZGVKUyBQcm9taXNlIHdpdGhvdXQgaXQgZmFpbHMgQEBzcGVjaWVzIHRlc3RcbiAgICByZXR1cm4gKGlzTm9kZSB8fCB0eXBlb2YgUHJvbWlzZVJlamVjdGlvbkV2ZW50ID09ICdmdW5jdGlvbicpXG4gICAgICAmJiBwcm9taXNlLnRoZW4oZW1wdHkpIGluc3RhbmNlb2YgRmFrZVByb21pc2VcbiAgICAgIC8vIHY4IDYuNiAoTm9kZSAxMCBhbmQgQ2hyb21lIDY2KSBoYXZlIGEgYnVnIHdpdGggcmVzb2x2aW5nIGN1c3RvbSB0aGVuYWJsZXNcbiAgICAgIC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTgzMDU2NVxuICAgICAgLy8gd2UgY2FuJ3QgZGV0ZWN0IGl0IHN5bmNocm9ub3VzbHksIHNvIGp1c3QgY2hlY2sgdmVyc2lvbnNcbiAgICAgICYmIHY4LmluZGV4T2YoJzYuNicpICE9PSAwXG4gICAgICAmJiB1c2VyQWdlbnQuaW5kZXhPZignQ2hyb21lLzY2JykgPT09IC0xO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbn0oKTtcblxuLy8gaGVscGVyc1xudmFyIGlzVGhlbmFibGUgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIHRoZW47XG4gIHJldHVybiBpc09iamVjdChpdCkgJiYgdHlwZW9mICh0aGVuID0gaXQudGhlbikgPT0gJ2Z1bmN0aW9uJyA/IHRoZW4gOiBmYWxzZTtcbn07XG52YXIgbm90aWZ5ID0gZnVuY3Rpb24gKHByb21pc2UsIGlzUmVqZWN0KSB7XG4gIGlmIChwcm9taXNlLl9uKSByZXR1cm47XG4gIHByb21pc2UuX24gPSB0cnVlO1xuICB2YXIgY2hhaW4gPSBwcm9taXNlLl9jO1xuICBtaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgIHZhciB2YWx1ZSA9IHByb21pc2UuX3Y7XG4gICAgdmFyIG9rID0gcHJvbWlzZS5fcyA9PSAxO1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIgcnVuID0gZnVuY3Rpb24gKHJlYWN0aW9uKSB7XG4gICAgICB2YXIgaGFuZGxlciA9IG9rID8gcmVhY3Rpb24ub2sgOiByZWFjdGlvbi5mYWlsO1xuICAgICAgdmFyIHJlc29sdmUgPSByZWFjdGlvbi5yZXNvbHZlO1xuICAgICAgdmFyIHJlamVjdCA9IHJlYWN0aW9uLnJlamVjdDtcbiAgICAgIHZhciBkb21haW4gPSByZWFjdGlvbi5kb21haW47XG4gICAgICB2YXIgcmVzdWx0LCB0aGVuLCBleGl0ZWQ7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoaGFuZGxlcikge1xuICAgICAgICAgIGlmICghb2spIHtcbiAgICAgICAgICAgIGlmIChwcm9taXNlLl9oID09IDIpIG9uSGFuZGxlVW5oYW5kbGVkKHByb21pc2UpO1xuICAgICAgICAgICAgcHJvbWlzZS5faCA9IDE7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChoYW5kbGVyID09PSB0cnVlKSByZXN1bHQgPSB2YWx1ZTtcbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChkb21haW4pIGRvbWFpbi5lbnRlcigpO1xuICAgICAgICAgICAgcmVzdWx0ID0gaGFuZGxlcih2YWx1ZSk7IC8vIG1heSB0aHJvd1xuICAgICAgICAgICAgaWYgKGRvbWFpbikge1xuICAgICAgICAgICAgICBkb21haW4uZXhpdCgpO1xuICAgICAgICAgICAgICBleGl0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocmVzdWx0ID09PSByZWFjdGlvbi5wcm9taXNlKSB7XG4gICAgICAgICAgICByZWplY3QoVHlwZUVycm9yKCdQcm9taXNlLWNoYWluIGN5Y2xlJykpO1xuICAgICAgICAgIH0gZWxzZSBpZiAodGhlbiA9IGlzVGhlbmFibGUocmVzdWx0KSkge1xuICAgICAgICAgICAgdGhlbi5jYWxsKHJlc3VsdCwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICB9IGVsc2UgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICB9IGVsc2UgcmVqZWN0KHZhbHVlKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKGRvbWFpbiAmJiAhZXhpdGVkKSBkb21haW4uZXhpdCgpO1xuICAgICAgICByZWplY3QoZSk7XG4gICAgICB9XG4gICAgfTtcbiAgICB3aGlsZSAoY2hhaW4ubGVuZ3RoID4gaSkgcnVuKGNoYWluW2krK10pOyAvLyB2YXJpYWJsZSBsZW5ndGggLSBjYW4ndCB1c2UgZm9yRWFjaFxuICAgIHByb21pc2UuX2MgPSBbXTtcbiAgICBwcm9taXNlLl9uID0gZmFsc2U7XG4gICAgaWYgKGlzUmVqZWN0ICYmICFwcm9taXNlLl9oKSBvblVuaGFuZGxlZChwcm9taXNlKTtcbiAgfSk7XG59O1xudmFyIG9uVW5oYW5kbGVkID0gZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgdGFzay5jYWxsKGdsb2JhbCwgZnVuY3Rpb24gKCkge1xuICAgIHZhciB2YWx1ZSA9IHByb21pc2UuX3Y7XG4gICAgdmFyIHVuaGFuZGxlZCA9IGlzVW5oYW5kbGVkKHByb21pc2UpO1xuICAgIHZhciByZXN1bHQsIGhhbmRsZXIsIGNvbnNvbGU7XG4gICAgaWYgKHVuaGFuZGxlZCkge1xuICAgICAgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChpc05vZGUpIHtcbiAgICAgICAgICBwcm9jZXNzLmVtaXQoJ3VuaGFuZGxlZFJlamVjdGlvbicsIHZhbHVlLCBwcm9taXNlKTtcbiAgICAgICAgfSBlbHNlIGlmIChoYW5kbGVyID0gZ2xvYmFsLm9udW5oYW5kbGVkcmVqZWN0aW9uKSB7XG4gICAgICAgICAgaGFuZGxlcih7IHByb21pc2U6IHByb21pc2UsIHJlYXNvbjogdmFsdWUgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoKGNvbnNvbGUgPSBnbG9iYWwuY29uc29sZSkgJiYgY29uc29sZS5lcnJvcikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1VuaGFuZGxlZCBwcm9taXNlIHJlamVjdGlvbicsIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICAvLyBCcm93c2VycyBzaG91bGQgbm90IHRyaWdnZXIgYHJlamVjdGlvbkhhbmRsZWRgIGV2ZW50IGlmIGl0IHdhcyBoYW5kbGVkIGhlcmUsIE5vZGVKUyAtIHNob3VsZFxuICAgICAgcHJvbWlzZS5faCA9IGlzTm9kZSB8fCBpc1VuaGFuZGxlZChwcm9taXNlKSA/IDIgOiAxO1xuICAgIH0gcHJvbWlzZS5fYSA9IHVuZGVmaW5lZDtcbiAgICBpZiAodW5oYW5kbGVkICYmIHJlc3VsdC5lKSB0aHJvdyByZXN1bHQudjtcbiAgfSk7XG59O1xudmFyIGlzVW5oYW5kbGVkID0gZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgcmV0dXJuIHByb21pc2UuX2ggIT09IDEgJiYgKHByb21pc2UuX2EgfHwgcHJvbWlzZS5fYykubGVuZ3RoID09PSAwO1xufTtcbnZhciBvbkhhbmRsZVVuaGFuZGxlZCA9IGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gIHRhc2suY2FsbChnbG9iYWwsIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgaGFuZGxlcjtcbiAgICBpZiAoaXNOb2RlKSB7XG4gICAgICBwcm9jZXNzLmVtaXQoJ3JlamVjdGlvbkhhbmRsZWQnLCBwcm9taXNlKTtcbiAgICB9IGVsc2UgaWYgKGhhbmRsZXIgPSBnbG9iYWwub25yZWplY3Rpb25oYW5kbGVkKSB7XG4gICAgICBoYW5kbGVyKHsgcHJvbWlzZTogcHJvbWlzZSwgcmVhc29uOiBwcm9taXNlLl92IH0pO1xuICAgIH1cbiAgfSk7XG59O1xudmFyICRyZWplY3QgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgdmFyIHByb21pc2UgPSB0aGlzO1xuICBpZiAocHJvbWlzZS5fZCkgcmV0dXJuO1xuICBwcm9taXNlLl9kID0gdHJ1ZTtcbiAgcHJvbWlzZSA9IHByb21pc2UuX3cgfHwgcHJvbWlzZTsgLy8gdW53cmFwXG4gIHByb21pc2UuX3YgPSB2YWx1ZTtcbiAgcHJvbWlzZS5fcyA9IDI7XG4gIGlmICghcHJvbWlzZS5fYSkgcHJvbWlzZS5fYSA9IHByb21pc2UuX2Muc2xpY2UoKTtcbiAgbm90aWZ5KHByb21pc2UsIHRydWUpO1xufTtcbnZhciAkcmVzb2x2ZSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICB2YXIgcHJvbWlzZSA9IHRoaXM7XG4gIHZhciB0aGVuO1xuICBpZiAocHJvbWlzZS5fZCkgcmV0dXJuO1xuICBwcm9taXNlLl9kID0gdHJ1ZTtcbiAgcHJvbWlzZSA9IHByb21pc2UuX3cgfHwgcHJvbWlzZTsgLy8gdW53cmFwXG4gIHRyeSB7XG4gICAgaWYgKHByb21pc2UgPT09IHZhbHVlKSB0aHJvdyBUeXBlRXJyb3IoXCJQcm9taXNlIGNhbid0IGJlIHJlc29sdmVkIGl0c2VsZlwiKTtcbiAgICBpZiAodGhlbiA9IGlzVGhlbmFibGUodmFsdWUpKSB7XG4gICAgICBtaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgd3JhcHBlciA9IHsgX3c6IHByb21pc2UsIF9kOiBmYWxzZSB9OyAvLyB3cmFwXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdGhlbi5jYWxsKHZhbHVlLCBjdHgoJHJlc29sdmUsIHdyYXBwZXIsIDEpLCBjdHgoJHJlamVjdCwgd3JhcHBlciwgMSkpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgJHJlamVjdC5jYWxsKHdyYXBwZXIsIGUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJvbWlzZS5fdiA9IHZhbHVlO1xuICAgICAgcHJvbWlzZS5fcyA9IDE7XG4gICAgICBub3RpZnkocHJvbWlzZSwgZmFsc2UpO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgICRyZWplY3QuY2FsbCh7IF93OiBwcm9taXNlLCBfZDogZmFsc2UgfSwgZSk7IC8vIHdyYXBcbiAgfVxufTtcblxuLy8gY29uc3RydWN0b3IgcG9seWZpbGxcbmlmICghVVNFX05BVElWRSkge1xuICAvLyAyNS40LjMuMSBQcm9taXNlKGV4ZWN1dG9yKVxuICAkUHJvbWlzZSA9IGZ1bmN0aW9uIFByb21pc2UoZXhlY3V0b3IpIHtcbiAgICBhbkluc3RhbmNlKHRoaXMsICRQcm9taXNlLCBQUk9NSVNFLCAnX2gnKTtcbiAgICBhRnVuY3Rpb24oZXhlY3V0b3IpO1xuICAgIEludGVybmFsLmNhbGwodGhpcyk7XG4gICAgdHJ5IHtcbiAgICAgIGV4ZWN1dG9yKGN0eCgkcmVzb2x2ZSwgdGhpcywgMSksIGN0eCgkcmVqZWN0LCB0aGlzLCAxKSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAkcmVqZWN0LmNhbGwodGhpcywgZXJyKTtcbiAgICB9XG4gIH07XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuICBJbnRlcm5hbCA9IGZ1bmN0aW9uIFByb21pc2UoZXhlY3V0b3IpIHtcbiAgICB0aGlzLl9jID0gW107ICAgICAgICAgICAgIC8vIDwtIGF3YWl0aW5nIHJlYWN0aW9uc1xuICAgIHRoaXMuX2EgPSB1bmRlZmluZWQ7ICAgICAgLy8gPC0gY2hlY2tlZCBpbiBpc1VuaGFuZGxlZCByZWFjdGlvbnNcbiAgICB0aGlzLl9zID0gMDsgICAgICAgICAgICAgIC8vIDwtIHN0YXRlXG4gICAgdGhpcy5fZCA9IGZhbHNlOyAgICAgICAgICAvLyA8LSBkb25lXG4gICAgdGhpcy5fdiA9IHVuZGVmaW5lZDsgICAgICAvLyA8LSB2YWx1ZVxuICAgIHRoaXMuX2ggPSAwOyAgICAgICAgICAgICAgLy8gPC0gcmVqZWN0aW9uIHN0YXRlLCAwIC0gZGVmYXVsdCwgMSAtIGhhbmRsZWQsIDIgLSB1bmhhbmRsZWRcbiAgICB0aGlzLl9uID0gZmFsc2U7ICAgICAgICAgIC8vIDwtIG5vdGlmeVxuICB9O1xuICBJbnRlcm5hbC5wcm90b3R5cGUgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKSgkUHJvbWlzZS5wcm90b3R5cGUsIHtcbiAgICAvLyAyNS40LjUuMyBQcm9taXNlLnByb3RvdHlwZS50aGVuKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKVxuICAgIHRoZW46IGZ1bmN0aW9uIHRoZW4ob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpIHtcbiAgICAgIHZhciByZWFjdGlvbiA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KHNwZWNpZXNDb25zdHJ1Y3Rvcih0aGlzLCAkUHJvbWlzZSkpO1xuICAgICAgcmVhY3Rpb24ub2sgPSB0eXBlb2Ygb25GdWxmaWxsZWQgPT0gJ2Z1bmN0aW9uJyA/IG9uRnVsZmlsbGVkIDogdHJ1ZTtcbiAgICAgIHJlYWN0aW9uLmZhaWwgPSB0eXBlb2Ygb25SZWplY3RlZCA9PSAnZnVuY3Rpb24nICYmIG9uUmVqZWN0ZWQ7XG4gICAgICByZWFjdGlvbi5kb21haW4gPSBpc05vZGUgPyBwcm9jZXNzLmRvbWFpbiA6IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX2MucHVzaChyZWFjdGlvbik7XG4gICAgICBpZiAodGhpcy5fYSkgdGhpcy5fYS5wdXNoKHJlYWN0aW9uKTtcbiAgICAgIGlmICh0aGlzLl9zKSBub3RpZnkodGhpcywgZmFsc2UpO1xuICAgICAgcmV0dXJuIHJlYWN0aW9uLnByb21pc2U7XG4gICAgfSxcbiAgICAvLyAyNS40LjUuMSBQcm9taXNlLnByb3RvdHlwZS5jYXRjaChvblJlamVjdGVkKVxuICAgICdjYXRjaCc6IGZ1bmN0aW9uIChvblJlamVjdGVkKSB7XG4gICAgICByZXR1cm4gdGhpcy50aGVuKHVuZGVmaW5lZCwgb25SZWplY3RlZCk7XG4gICAgfVxuICB9KTtcbiAgT3duUHJvbWlzZUNhcGFiaWxpdHkgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHByb21pc2UgPSBuZXcgSW50ZXJuYWwoKTtcbiAgICB0aGlzLnByb21pc2UgPSBwcm9taXNlO1xuICAgIHRoaXMucmVzb2x2ZSA9IGN0eCgkcmVzb2x2ZSwgcHJvbWlzZSwgMSk7XG4gICAgdGhpcy5yZWplY3QgPSBjdHgoJHJlamVjdCwgcHJvbWlzZSwgMSk7XG4gIH07XG4gIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmYgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IGZ1bmN0aW9uIChDKSB7XG4gICAgcmV0dXJuIEMgPT09ICRQcm9taXNlIHx8IEMgPT09IFdyYXBwZXJcbiAgICAgID8gbmV3IE93blByb21pc2VDYXBhYmlsaXR5KEMpXG4gICAgICA6IG5ld0dlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eShDKTtcbiAgfTtcbn1cblxuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LlcgKyAkZXhwb3J0LkYgKiAhVVNFX05BVElWRSwgeyBQcm9taXNlOiAkUHJvbWlzZSB9KTtcbnJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJykoJFByb21pc2UsIFBST01JU0UpO1xucmVxdWlyZSgnLi9fc2V0LXNwZWNpZXMnKShQUk9NSVNFKTtcbldyYXBwZXIgPSByZXF1aXJlKCcuL19jb3JlJylbUFJPTUlTRV07XG5cbi8vIHN0YXRpY3NcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsIFBST01JU0UsIHtcbiAgLy8gMjUuNC40LjUgUHJvbWlzZS5yZWplY3QocilcbiAgcmVqZWN0OiBmdW5jdGlvbiByZWplY3Qocikge1xuICAgIHZhciBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkodGhpcyk7XG4gICAgdmFyICQkcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgJCRyZWplY3Qocik7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIChMSUJSQVJZIHx8ICFVU0VfTkFUSVZFKSwgUFJPTUlTRSwge1xuICAvLyAyNS40LjQuNiBQcm9taXNlLnJlc29sdmUoeClcbiAgcmVzb2x2ZTogZnVuY3Rpb24gcmVzb2x2ZSh4KSB7XG4gICAgcmV0dXJuIHByb21pc2VSZXNvbHZlKExJQlJBUlkgJiYgdGhpcyA9PT0gV3JhcHBlciA/ICRQcm9taXNlIDogdGhpcywgeCk7XG4gIH1cbn0pO1xuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhKFVTRV9OQVRJVkUgJiYgcmVxdWlyZSgnLi9faXRlci1kZXRlY3QnKShmdW5jdGlvbiAoaXRlcikge1xuICAkUHJvbWlzZS5hbGwoaXRlcilbJ2NhdGNoJ10oZW1wdHkpO1xufSkpLCBQUk9NSVNFLCB7XG4gIC8vIDI1LjQuNC4xIFByb21pc2UuYWxsKGl0ZXJhYmxlKVxuICBhbGw6IGZ1bmN0aW9uIGFsbChpdGVyYWJsZSkge1xuICAgIHZhciBDID0gdGhpcztcbiAgICB2YXIgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KEMpO1xuICAgIHZhciByZXNvbHZlID0gY2FwYWJpbGl0eS5yZXNvbHZlO1xuICAgIHZhciByZWplY3QgPSBjYXBhYmlsaXR5LnJlamVjdDtcbiAgICB2YXIgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgdmFsdWVzID0gW107XG4gICAgICB2YXIgaW5kZXggPSAwO1xuICAgICAgdmFyIHJlbWFpbmluZyA9IDE7XG4gICAgICBmb3JPZihpdGVyYWJsZSwgZmFsc2UsIGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gICAgICAgIHZhciAkaW5kZXggPSBpbmRleCsrO1xuICAgICAgICB2YXIgYWxyZWFkeUNhbGxlZCA9IGZhbHNlO1xuICAgICAgICB2YWx1ZXMucHVzaCh1bmRlZmluZWQpO1xuICAgICAgICByZW1haW5pbmcrKztcbiAgICAgICAgQy5yZXNvbHZlKHByb21pc2UpLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgaWYgKGFscmVhZHlDYWxsZWQpIHJldHVybjtcbiAgICAgICAgICBhbHJlYWR5Q2FsbGVkID0gdHJ1ZTtcbiAgICAgICAgICB2YWx1ZXNbJGluZGV4XSA9IHZhbHVlO1xuICAgICAgICAgIC0tcmVtYWluaW5nIHx8IHJlc29sdmUodmFsdWVzKTtcbiAgICAgICAgfSwgcmVqZWN0KTtcbiAgICAgIH0pO1xuICAgICAgLS1yZW1haW5pbmcgfHwgcmVzb2x2ZSh2YWx1ZXMpO1xuICAgIH0pO1xuICAgIGlmIChyZXN1bHQuZSkgcmVqZWN0KHJlc3VsdC52KTtcbiAgICByZXR1cm4gY2FwYWJpbGl0eS5wcm9taXNlO1xuICB9LFxuICAvLyAyNS40LjQuNCBQcm9taXNlLnJhY2UoaXRlcmFibGUpXG4gIHJhY2U6IGZ1bmN0aW9uIHJhY2UoaXRlcmFibGUpIHtcbiAgICB2YXIgQyA9IHRoaXM7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eShDKTtcbiAgICB2YXIgcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgdmFyIHJlc3VsdCA9IHBlcmZvcm0oZnVuY3Rpb24gKCkge1xuICAgICAgZm9yT2YoaXRlcmFibGUsIGZhbHNlLCBmdW5jdGlvbiAocHJvbWlzZSkge1xuICAgICAgICBDLnJlc29sdmUocHJvbWlzZSkudGhlbihjYXBhYmlsaXR5LnJlc29sdmUsIHJlamVjdCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBpZiAocmVzdWx0LmUpIHJlamVjdChyZXN1bHQudik7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///243\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar weak = __webpack_require__(121);\nvar validate = __webpack_require__(42);\nvar WEAK_SET = 'WeakSet';\n\n// 23.4 WeakSet Objects\n__webpack_require__(61)(WEAK_SET, function (get) {\n return function WeakSet() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.4.3.1 WeakSet.prototype.add(value)\n add: function add(value) {\n return weak.def(validate(this, WEAK_SET), value, true);\n }\n}, weak, false, true);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYud2Vhay1zZXQuanM/YzAyYiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLFdBQVcsbUJBQU8sQ0FBQyxHQUFvQjtBQUN2QyxlQUFlLG1CQUFPLENBQUMsRUFBd0I7QUFDL0M7O0FBRUE7QUFDQSxtQkFBTyxDQUFDLEVBQWU7QUFDdkIsNkJBQTZCLG1FQUFtRTtBQUNoRyxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjI0NC5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciB3ZWFrID0gcmVxdWlyZSgnLi9fY29sbGVjdGlvbi13ZWFrJyk7XG52YXIgdmFsaWRhdGUgPSByZXF1aXJlKCcuL192YWxpZGF0ZS1jb2xsZWN0aW9uJyk7XG52YXIgV0VBS19TRVQgPSAnV2Vha1NldCc7XG5cbi8vIDIzLjQgV2Vha1NldCBPYmplY3RzXG5yZXF1aXJlKCcuL19jb2xsZWN0aW9uJykoV0VBS19TRVQsIGZ1bmN0aW9uIChnZXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIFdlYWtTZXQoKSB7IHJldHVybiBnZXQodGhpcywgYXJndW1lbnRzLmxlbmd0aCA+IDAgPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQpOyB9O1xufSwge1xuICAvLyAyMy40LjMuMSBXZWFrU2V0LnByb3RvdHlwZS5hZGQodmFsdWUpXG4gIGFkZDogZnVuY3Rpb24gYWRkKHZhbHVlKSB7XG4gICAgcmV0dXJuIHdlYWsuZGVmKHZhbGlkYXRlKHRoaXMsIFdFQUtfU0VUKSwgdmFsdWUsIHRydWUpO1xuICB9XG59LCB3ZWFrLCBmYWxzZSwgdHJ1ZSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///244\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar $typed = __webpack_require__(62);\nvar buffer = __webpack_require__(92);\nvar anObject = __webpack_require__(1);\nvar toAbsoluteIndex = __webpack_require__(35);\nvar toLength = __webpack_require__(6);\nvar isObject = __webpack_require__(4);\nvar ArrayBuffer = __webpack_require__(2).ArrayBuffer;\nvar speciesConstructor = __webpack_require__(51);\nvar $ArrayBuffer = buffer.ArrayBuffer;\nvar $DataView = buffer.DataView;\nvar $isView = $typed.ABV && ArrayBuffer.isView;\nvar $slice = $ArrayBuffer.prototype.slice;\nvar VIEW = $typed.VIEW;\nvar ARRAY_BUFFER = 'ArrayBuffer';\n\n$export($export.G + $export.W + $export.F * (ArrayBuffer !== $ArrayBuffer), { ArrayBuffer: $ArrayBuffer });\n\n$export($export.S + $export.F * !$typed.CONSTR, ARRAY_BUFFER, {\n // 24.1.3.1 ArrayBuffer.isView(arg)\n isView: function isView(it) {\n return $isView && $isView(it) || isObject(it) && VIEW in it;\n }\n});\n\n$export($export.P + $export.U + $export.F * __webpack_require__(3)(function () {\n return !new $ArrayBuffer(2).slice(1, undefined).byteLength;\n}), ARRAY_BUFFER, {\n // 24.1.4.3 ArrayBuffer.prototype.slice(start, end)\n slice: function slice(start, end) {\n if ($slice !== undefined && end === undefined) return $slice.call(anObject(this), start); // FF fix\n var len = anObject(this).byteLength;\n var first = toAbsoluteIndex(start, len);\n var fin = toAbsoluteIndex(end === undefined ? len : end, len);\n var result = new (speciesConstructor(this, $ArrayBuffer))(toLength(fin - first));\n var viewS = new $DataView(this);\n var viewT = new $DataView(result);\n var index = 0;\n while (first < fin) {\n viewT.setUint8(index++, viewS.getUint8(first++));\n } return result;\n }\n});\n\n__webpack_require__(38)(ARRAY_BUFFER);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuYXJyYXktYnVmZmVyLmpzP2M2NmYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxhQUFhLG1CQUFPLENBQUMsRUFBVTtBQUMvQixhQUFhLG1CQUFPLENBQUMsRUFBaUI7QUFDdEMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsc0JBQXNCLG1CQUFPLENBQUMsRUFBc0I7QUFDcEQsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsa0JBQWtCLG1CQUFPLENBQUMsQ0FBVztBQUNyQyx5QkFBeUIsbUJBQU8sQ0FBQyxFQUF3QjtBQUN6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsNkVBQTZFLDRCQUE0Qjs7QUFFekc7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQsNENBQTRDLG1CQUFPLENBQUMsQ0FBVTtBQUM5RDtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsNkZBQTZGO0FBQzdGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLENBQUM7O0FBRUQsbUJBQU8sQ0FBQyxFQUFnQiIsImZpbGUiOiIyNDUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICR0eXBlZCA9IHJlcXVpcmUoJy4vX3R5cGVkJyk7XG52YXIgYnVmZmVyID0gcmVxdWlyZSgnLi9fdHlwZWQtYnVmZmVyJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuL190by1hYnNvbHV0ZS1pbmRleCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBBcnJheUJ1ZmZlciA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLkFycmF5QnVmZmVyO1xudmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4vX3NwZWNpZXMtY29uc3RydWN0b3InKTtcbnZhciAkQXJyYXlCdWZmZXIgPSBidWZmZXIuQXJyYXlCdWZmZXI7XG52YXIgJERhdGFWaWV3ID0gYnVmZmVyLkRhdGFWaWV3O1xudmFyICRpc1ZpZXcgPSAkdHlwZWQuQUJWICYmIEFycmF5QnVmZmVyLmlzVmlldztcbnZhciAkc2xpY2UgPSAkQXJyYXlCdWZmZXIucHJvdG90eXBlLnNsaWNlO1xudmFyIFZJRVcgPSAkdHlwZWQuVklFVztcbnZhciBBUlJBWV9CVUZGRVIgPSAnQXJyYXlCdWZmZXInO1xuXG4kZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuVyArICRleHBvcnQuRiAqIChBcnJheUJ1ZmZlciAhPT0gJEFycmF5QnVmZmVyKSwgeyBBcnJheUJ1ZmZlcjogJEFycmF5QnVmZmVyIH0pO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICEkdHlwZWQuQ09OU1RSLCBBUlJBWV9CVUZGRVIsIHtcbiAgLy8gMjQuMS4zLjEgQXJyYXlCdWZmZXIuaXNWaWV3KGFyZylcbiAgaXNWaWV3OiBmdW5jdGlvbiBpc1ZpZXcoaXQpIHtcbiAgICByZXR1cm4gJGlzVmlldyAmJiAkaXNWaWV3KGl0KSB8fCBpc09iamVjdChpdCkgJiYgVklFVyBpbiBpdDtcbiAgfVxufSk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5VICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAhbmV3ICRBcnJheUJ1ZmZlcigyKS5zbGljZSgxLCB1bmRlZmluZWQpLmJ5dGVMZW5ndGg7XG59KSwgQVJSQVlfQlVGRkVSLCB7XG4gIC8vIDI0LjEuNC4zIEFycmF5QnVmZmVyLnByb3RvdHlwZS5zbGljZShzdGFydCwgZW5kKVxuICBzbGljZTogZnVuY3Rpb24gc2xpY2Uoc3RhcnQsIGVuZCkge1xuICAgIGlmICgkc2xpY2UgIT09IHVuZGVmaW5lZCAmJiBlbmQgPT09IHVuZGVmaW5lZCkgcmV0dXJuICRzbGljZS5jYWxsKGFuT2JqZWN0KHRoaXMpLCBzdGFydCk7IC8vIEZGIGZpeFxuICAgIHZhciBsZW4gPSBhbk9iamVjdCh0aGlzKS5ieXRlTGVuZ3RoO1xuICAgIHZhciBmaXJzdCA9IHRvQWJzb2x1dGVJbmRleChzdGFydCwgbGVuKTtcbiAgICB2YXIgZmluID0gdG9BYnNvbHV0ZUluZGV4KGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuIDogZW5kLCBsZW4pO1xuICAgIHZhciByZXN1bHQgPSBuZXcgKHNwZWNpZXNDb25zdHJ1Y3Rvcih0aGlzLCAkQXJyYXlCdWZmZXIpKSh0b0xlbmd0aChmaW4gLSBmaXJzdCkpO1xuICAgIHZhciB2aWV3UyA9IG5ldyAkRGF0YVZpZXcodGhpcyk7XG4gICAgdmFyIHZpZXdUID0gbmV3ICREYXRhVmlldyhyZXN1bHQpO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgd2hpbGUgKGZpcnN0IDwgZmluKSB7XG4gICAgICB2aWV3VC5zZXRVaW50OChpbmRleCsrLCB2aWV3Uy5nZXRVaW50OChmaXJzdCsrKSk7XG4gICAgfSByZXR1cm4gcmVzdWx0O1xuICB9XG59KTtcblxucmVxdWlyZSgnLi9fc2V0LXNwZWNpZXMnKShBUlJBWV9CVUZGRVIpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///245\n")},function(module,exports,__webpack_require__){eval("var $export = __webpack_require__(0);\n$export($export.G + $export.W + $export.F * !__webpack_require__(62).ABV, {\n DataView: __webpack_require__(92).DataView\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuZGF0YS12aWV3LmpzPzI2MmYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsNkNBQTZDLG1CQUFPLENBQUMsRUFBVTtBQUMvRCxZQUFZLG1CQUFPLENBQUMsRUFBaUI7QUFDckMsQ0FBQyIsImZpbGUiOiIyNDYuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LlcgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fdHlwZWQnKS5BQlYsIHtcbiAgRGF0YVZpZXc6IHJlcXVpcmUoJy4vX3R5cGVkLWJ1ZmZlcicpLkRhdGFWaWV3XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///246\n")},function(module,exports,__webpack_require__){eval("__webpack_require__(27)('Int8', 1, function (init) {\n return function Int8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuaW50OC1hcnJheS5qcz9iMDVjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLG1CQUFPLENBQUMsRUFBZ0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyNDcuanMiLCJzb3VyY2VzQ29udGVudCI6WyJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdJbnQ4JywgMSwgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIEludDhBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///247\n")},function(module,exports,__webpack_require__){eval("__webpack_require__(27)('Uint8', 1, function (init) {\n return function Uint8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQudWludDgtYXJyYXkuanM/MzRlZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjQ4LmpzIiwic291cmNlc0NvbnRlbnQiOlsicmVxdWlyZSgnLi9fdHlwZWQtYXJyYXknKSgnVWludDgnLCAxLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gVWludDhBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///248\n")},function(module,exports,__webpack_require__){eval("__webpack_require__(27)('Uint8', 1, function (init) {\n return function Uint8ClampedArray(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n}, true);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQudWludDgtY2xhbXBlZC1hcnJheS5qcz82YWEyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLG1CQUFPLENBQUMsRUFBZ0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyNDkuanMiLCJzb3VyY2VzQ29udGVudCI6WyJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdVaW50OCcsIDEsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBVaW50OENsYW1wZWRBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSwgdHJ1ZSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///249\n")},function(module,exports,__webpack_require__){eval("__webpack_require__(27)('Int16', 2, function (init) {\n return function Int16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuaW50MTYtYXJyYXkuanM/MTVhYyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjUwLmpzIiwic291cmNlc0NvbnRlbnQiOlsicmVxdWlyZSgnLi9fdHlwZWQtYXJyYXknKSgnSW50MTYnLCAyLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gSW50MTZBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///250\n")},function(module,exports,__webpack_require__){eval("__webpack_require__(27)('Uint16', 2, function (init) {\n return function Uint16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQudWludDE2LWFycmF5LmpzP2FmNTYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsbUJBQU8sQ0FBQyxFQUFnQjtBQUN4QjtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjI1MS5qcyIsInNvdXJjZXNDb250ZW50IjpbInJlcXVpcmUoJy4vX3R5cGVkLWFycmF5JykoJ1VpbnQxNicsIDIsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBVaW50MTZBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///251\n")},function(module,exports,__webpack_require__){eval("__webpack_require__(27)('Int32', 4, function (init) {\n return function Int32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuaW50MzItYXJyYXkuanM/YjZlNCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjUyLmpzIiwic291cmNlc0NvbnRlbnQiOlsicmVxdWlyZSgnLi9fdHlwZWQtYXJyYXknKSgnSW50MzInLCA0LCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gSW50MzJBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///252\n")},function(module,exports,__webpack_require__){eval("__webpack_require__(27)('Uint32', 4, function (init) {\n return function Uint32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQudWludDMyLWFycmF5LmpzPzljMjkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsbUJBQU8sQ0FBQyxFQUFnQjtBQUN4QjtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjI1My5qcyIsInNvdXJjZXNDb250ZW50IjpbInJlcXVpcmUoJy4vX3R5cGVkLWFycmF5JykoJ1VpbnQzMicsIDQsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBVaW50MzJBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///253\n")},function(module,exports,__webpack_require__){eval("__webpack_require__(27)('Float32', 4, function (init) {\n return function Float32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuZmxvYXQzMi1hcnJheS5qcz82M2Q5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLG1CQUFPLENBQUMsRUFBZ0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyNTQuanMiLCJzb3VyY2VzQ29udGVudCI6WyJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdGbG9hdDMyJywgNCwgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIEZsb2F0MzJBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///254\n")},function(module,exports,__webpack_require__){eval("__webpack_require__(27)('Float64', 8, function (init) {\n return function Float64Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuZmxvYXQ2NC1hcnJheS5qcz80ZGRhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLG1CQUFPLENBQUMsRUFBZ0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyNTUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdGbG9hdDY0JywgOCwgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIEZsb2F0NjRBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///255\n")},function(module,exports,__webpack_require__){eval("// 26.1.1 Reflect.apply(target, thisArgument, argumentsList)\nvar $export = __webpack_require__(0);\nvar aFunction = __webpack_require__(10);\nvar anObject = __webpack_require__(1);\nvar rApply = (__webpack_require__(2).Reflect || {}).apply;\nvar fApply = Function.apply;\n// MS Edge argumentsList argument is optional\n$export($export.S + $export.F * !__webpack_require__(3)(function () {\n rApply(function () { /* empty */ });\n}), 'Reflect', {\n apply: function apply(target, thisArgument, argumentsList) {\n var T = aFunction(target);\n var L = anObject(argumentsList);\n return rApply ? rApply(T, thisArgument, L) : fApply.call(T, thisArgument, L);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5hcHBseS5qcz9kZjFiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2QyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxjQUFjLG1CQUFPLENBQUMsQ0FBVyxlQUFlO0FBQ2hEO0FBQ0E7QUFDQSxpQ0FBaUMsbUJBQU8sQ0FBQyxDQUFVO0FBQ25ELHNCQUFzQixjQUFjO0FBQ3BDLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyNTYuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyNi4xLjEgUmVmbGVjdC5hcHBseSh0YXJnZXQsIHRoaXNBcmd1bWVudCwgYXJndW1lbnRzTGlzdClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgckFwcGx5ID0gKHJlcXVpcmUoJy4vX2dsb2JhbCcpLlJlZmxlY3QgfHwge30pLmFwcGx5O1xudmFyIGZBcHBseSA9IEZ1bmN0aW9uLmFwcGx5O1xuLy8gTVMgRWRnZSBhcmd1bWVudHNMaXN0IGFyZ3VtZW50IGlzIG9wdGlvbmFsXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgckFwcGx5KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSk7XG59KSwgJ1JlZmxlY3QnLCB7XG4gIGFwcGx5OiBmdW5jdGlvbiBhcHBseSh0YXJnZXQsIHRoaXNBcmd1bWVudCwgYXJndW1lbnRzTGlzdCkge1xuICAgIHZhciBUID0gYUZ1bmN0aW9uKHRhcmdldCk7XG4gICAgdmFyIEwgPSBhbk9iamVjdChhcmd1bWVudHNMaXN0KTtcbiAgICByZXR1cm4gckFwcGx5ID8gckFwcGx5KFQsIHRoaXNBcmd1bWVudCwgTCkgOiBmQXBwbHkuY2FsbChULCB0aGlzQXJndW1lbnQsIEwpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///256\n")},function(module,exports,__webpack_require__){eval("// 26.1.2 Reflect.construct(target, argumentsList [, newTarget])\nvar $export = __webpack_require__(0);\nvar create = __webpack_require__(36);\nvar aFunction = __webpack_require__(10);\nvar anObject = __webpack_require__(1);\nvar isObject = __webpack_require__(4);\nvar fails = __webpack_require__(3);\nvar bind = __webpack_require__(101);\nvar rConstruct = (__webpack_require__(2).Reflect || {}).construct;\n\n// MS Edge supports only 2 arguments and argumentsList argument is optional\n// FF Nightly sets third argument as `new.target`, but does not create `this` from it\nvar NEW_TARGET_BUG = fails(function () {\n function F() { /* empty */ }\n return !(rConstruct(function () { /* empty */ }, [], F) instanceof F);\n});\nvar ARGS_BUG = !fails(function () {\n rConstruct(function () { /* empty */ });\n});\n\n$export($export.S + $export.F * (NEW_TARGET_BUG || ARGS_BUG), 'Reflect', {\n construct: function construct(Target, args /* , newTarget */) {\n aFunction(Target);\n anObject(args);\n var newTarget = arguments.length < 3 ? Target : aFunction(arguments[2]);\n if (ARGS_BUG && !NEW_TARGET_BUG) return rConstruct(Target, args, newTarget);\n if (Target == newTarget) {\n // w/o altered newTarget, optimization for 0-4 arguments\n switch (args.length) {\n case 0: return new Target();\n case 1: return new Target(args[0]);\n case 2: return new Target(args[0], args[1]);\n case 3: return new Target(args[0], args[1], args[2]);\n case 4: return new Target(args[0], args[1], args[2], args[3]);\n }\n // w/o altered newTarget, lot of arguments case\n var $args = [null];\n $args.push.apply($args, args);\n return new (bind.apply(Target, $args))();\n }\n // with altered newTarget, not support built-in constructors\n var proto = newTarget.prototype;\n var instance = create(isObject(proto) ? proto : Object.prototype);\n var result = Function.apply.call(Target, instance, args);\n return isObject(result) ? result : instance;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5jb25zdHJ1Y3QuanM/MjM5NyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGFBQWEsbUJBQU8sQ0FBQyxFQUFrQjtBQUN2QyxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLFlBQVksbUJBQU8sQ0FBQyxDQUFVO0FBQzlCLFdBQVcsbUJBQU8sQ0FBQyxHQUFTO0FBQzVCLGtCQUFrQixtQkFBTyxDQUFDLENBQVcsZUFBZTs7QUFFcEQ7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCLG1DQUFtQyxjQUFjO0FBQ2pELENBQUM7QUFDRDtBQUNBLDBCQUEwQixjQUFjO0FBQ3hDLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjU3LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjYuMS4yIFJlZmxlY3QuY29uc3RydWN0KHRhcmdldCwgYXJndW1lbnRzTGlzdCBbLCBuZXdUYXJnZXRdKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuL19vYmplY3QtY3JlYXRlJyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4vX2JpbmQnKTtcbnZhciByQ29uc3RydWN0ID0gKHJlcXVpcmUoJy4vX2dsb2JhbCcpLlJlZmxlY3QgfHwge30pLmNvbnN0cnVjdDtcblxuLy8gTVMgRWRnZSBzdXBwb3J0cyBvbmx5IDIgYXJndW1lbnRzIGFuZCBhcmd1bWVudHNMaXN0IGFyZ3VtZW50IGlzIG9wdGlvbmFsXG4vLyBGRiBOaWdodGx5IHNldHMgdGhpcmQgYXJndW1lbnQgYXMgYG5ldy50YXJnZXRgLCBidXQgZG9lcyBub3QgY3JlYXRlIGB0aGlzYCBmcm9tIGl0XG52YXIgTkVXX1RBUkdFVF9CVUcgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEYoKSB7IC8qIGVtcHR5ICovIH1cbiAgcmV0dXJuICEockNvbnN0cnVjdChmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0sIFtdLCBGKSBpbnN0YW5jZW9mIEYpO1xufSk7XG52YXIgQVJHU19CVUcgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICByQ29uc3RydWN0KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSk7XG59KTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAoTkVXX1RBUkdFVF9CVUcgfHwgQVJHU19CVUcpLCAnUmVmbGVjdCcsIHtcbiAgY29uc3RydWN0OiBmdW5jdGlvbiBjb25zdHJ1Y3QoVGFyZ2V0LCBhcmdzIC8qICwgbmV3VGFyZ2V0ICovKSB7XG4gICAgYUZ1bmN0aW9uKFRhcmdldCk7XG4gICAgYW5PYmplY3QoYXJncyk7XG4gICAgdmFyIG5ld1RhcmdldCA9IGFyZ3VtZW50cy5sZW5ndGggPCAzID8gVGFyZ2V0IDogYUZ1bmN0aW9uKGFyZ3VtZW50c1syXSk7XG4gICAgaWYgKEFSR1NfQlVHICYmICFORVdfVEFSR0VUX0JVRykgcmV0dXJuIHJDb25zdHJ1Y3QoVGFyZ2V0LCBhcmdzLCBuZXdUYXJnZXQpO1xuICAgIGlmIChUYXJnZXQgPT0gbmV3VGFyZ2V0KSB7XG4gICAgICAvLyB3L28gYWx0ZXJlZCBuZXdUYXJnZXQsIG9wdGltaXphdGlvbiBmb3IgMC00IGFyZ3VtZW50c1xuICAgICAgc3dpdGNoIChhcmdzLmxlbmd0aCkge1xuICAgICAgICBjYXNlIDA6IHJldHVybiBuZXcgVGFyZ2V0KCk7XG4gICAgICAgIGNhc2UgMTogcmV0dXJuIG5ldyBUYXJnZXQoYXJnc1swXSk7XG4gICAgICAgIGNhc2UgMjogcmV0dXJuIG5ldyBUYXJnZXQoYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgICAgIGNhc2UgMzogcmV0dXJuIG5ldyBUYXJnZXQoYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7XG4gICAgICAgIGNhc2UgNDogcmV0dXJuIG5ldyBUYXJnZXQoYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSk7XG4gICAgICB9XG4gICAgICAvLyB3L28gYWx0ZXJlZCBuZXdUYXJnZXQsIGxvdCBvZiBhcmd1bWVudHMgY2FzZVxuICAgICAgdmFyICRhcmdzID0gW251bGxdO1xuICAgICAgJGFyZ3MucHVzaC5hcHBseSgkYXJncywgYXJncyk7XG4gICAgICByZXR1cm4gbmV3IChiaW5kLmFwcGx5KFRhcmdldCwgJGFyZ3MpKSgpO1xuICAgIH1cbiAgICAvLyB3aXRoIGFsdGVyZWQgbmV3VGFyZ2V0LCBub3Qgc3VwcG9ydCBidWlsdC1pbiBjb25zdHJ1Y3RvcnNcbiAgICB2YXIgcHJvdG8gPSBuZXdUYXJnZXQucHJvdG90eXBlO1xuICAgIHZhciBpbnN0YW5jZSA9IGNyZWF0ZShpc09iamVjdChwcm90bykgPyBwcm90byA6IE9iamVjdC5wcm90b3R5cGUpO1xuICAgIHZhciByZXN1bHQgPSBGdW5jdGlvbi5hcHBseS5jYWxsKFRhcmdldCwgaW5zdGFuY2UsIGFyZ3MpO1xuICAgIHJldHVybiBpc09iamVjdChyZXN1bHQpID8gcmVzdWx0IDogaW5zdGFuY2U7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///257\n")},function(module,exports,__webpack_require__){eval("// 26.1.3 Reflect.defineProperty(target, propertyKey, attributes)\nvar dP = __webpack_require__(8);\nvar $export = __webpack_require__(0);\nvar anObject = __webpack_require__(1);\nvar toPrimitive = __webpack_require__(23);\n\n// MS Edge has broken Reflect.defineProperty - throwing instead of returning false\n$export($export.S + $export.F * __webpack_require__(3)(function () {\n // eslint-disable-next-line no-undef\n Reflect.defineProperty(dP.f({}, 1, { value: 1 }), 1, { value: 2 });\n}), 'Reflect', {\n defineProperty: function defineProperty(target, propertyKey, attributes) {\n anObject(target);\n propertyKey = toPrimitive(propertyKey, true);\n anObject(attributes);\n try {\n dP.f(target, propertyKey, attributes);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5kZWZpbmUtcHJvcGVydHkuanM/ODhjYSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLFNBQVMsbUJBQU8sQ0FBQyxDQUFjO0FBQy9CLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGtCQUFrQixtQkFBTyxDQUFDLEVBQWlCOztBQUUzQztBQUNBLGdDQUFnQyxtQkFBTyxDQUFDLENBQVU7QUFDbEQ7QUFDQSxnQ0FBZ0MsTUFBTSxXQUFXLE9BQU8sV0FBVztBQUNuRSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyNTguanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyNi4xLjMgUmVmbGVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5S2V5LCBhdHRyaWJ1dGVzKVxudmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcblxuLy8gTVMgRWRnZSBoYXMgYnJva2VuIFJlZmxlY3QuZGVmaW5lUHJvcGVydHkgLSB0aHJvd2luZyBpbnN0ZWFkIG9mIHJldHVybmluZyBmYWxzZVxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gIFJlZmxlY3QuZGVmaW5lUHJvcGVydHkoZFAuZih7fSwgMSwgeyB2YWx1ZTogMSB9KSwgMSwgeyB2YWx1ZTogMiB9KTtcbn0pLCAnUmVmbGVjdCcsIHtcbiAgZGVmaW5lUHJvcGVydHk6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHlLZXksIGF0dHJpYnV0ZXMpIHtcbiAgICBhbk9iamVjdCh0YXJnZXQpO1xuICAgIHByb3BlcnR5S2V5ID0gdG9QcmltaXRpdmUocHJvcGVydHlLZXksIHRydWUpO1xuICAgIGFuT2JqZWN0KGF0dHJpYnV0ZXMpO1xuICAgIHRyeSB7XG4gICAgICBkUC5mKHRhcmdldCwgcHJvcGVydHlLZXksIGF0dHJpYnV0ZXMpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///258\n")},function(module,exports,__webpack_require__){eval("// 26.1.4 Reflect.deleteProperty(target, propertyKey)\nvar $export = __webpack_require__(0);\nvar gOPD = __webpack_require__(16).f;\nvar anObject = __webpack_require__(1);\n\n$export($export.S, 'Reflect', {\n deleteProperty: function deleteProperty(target, propertyKey) {\n var desc = gOPD(anObject(target), propertyKey);\n return desc && !desc.configurable ? false : delete target[propertyKey];\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5kZWxldGUtcHJvcGVydHkuanM/YmExNiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLFdBQVcsbUJBQU8sQ0FBQyxFQUFnQjtBQUNuQyxlQUFlLG1CQUFPLENBQUMsQ0FBYzs7QUFFckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjU5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjYuMS40IFJlZmxlY3QuZGVsZXRlUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eUtleSlcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZ09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJykuZjtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7XG4gIGRlbGV0ZVByb3BlcnR5OiBmdW5jdGlvbiBkZWxldGVQcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5S2V5KSB7XG4gICAgdmFyIGRlc2MgPSBnT1BEKGFuT2JqZWN0KHRhcmdldCksIHByb3BlcnR5S2V5KTtcbiAgICByZXR1cm4gZGVzYyAmJiAhZGVzYy5jb25maWd1cmFibGUgPyBmYWxzZSA6IGRlbGV0ZSB0YXJnZXRbcHJvcGVydHlLZXldO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///259\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// 26.1.5 Reflect.enumerate(target)\nvar $export = __webpack_require__(0);\nvar anObject = __webpack_require__(1);\nvar Enumerate = function (iterated) {\n this._t = anObject(iterated); // target\n this._i = 0; // next index\n var keys = this._k = []; // keys\n var key;\n for (key in iterated) keys.push(key);\n};\n__webpack_require__(78)(Enumerate, 'Object', function () {\n var that = this;\n var keys = that._k;\n var key;\n do {\n if (that._i >= keys.length) return { value: undefined, done: true };\n } while (!((key = keys[that._i++]) in that._t));\n return { value: key, done: false };\n});\n\n$export($export.S, 'Reflect', {\n enumerate: function enumerate(target) {\n return new Enumerate(target);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5lbnVtZXJhdGUuanM/N2ZmNiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckM7QUFDQSwrQkFBK0I7QUFDL0IsY0FBYztBQUNkLDBCQUEwQjtBQUMxQjtBQUNBO0FBQ0E7QUFDQSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0NBQXdDO0FBQ3hDLEdBQUc7QUFDSCxVQUFVO0FBQ1YsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjYwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gMjYuMS41IFJlZmxlY3QuZW51bWVyYXRlKHRhcmdldClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBFbnVtZXJhdGUgPSBmdW5jdGlvbiAoaXRlcmF0ZWQpIHtcbiAgdGhpcy5fdCA9IGFuT2JqZWN0KGl0ZXJhdGVkKTsgLy8gdGFyZ2V0XG4gIHRoaXMuX2kgPSAwOyAgICAgICAgICAgICAgICAgIC8vIG5leHQgaW5kZXhcbiAgdmFyIGtleXMgPSB0aGlzLl9rID0gW107ICAgICAgLy8ga2V5c1xuICB2YXIga2V5O1xuICBmb3IgKGtleSBpbiBpdGVyYXRlZCkga2V5cy5wdXNoKGtleSk7XG59O1xucmVxdWlyZSgnLi9faXRlci1jcmVhdGUnKShFbnVtZXJhdGUsICdPYmplY3QnLCBmdW5jdGlvbiAoKSB7XG4gIHZhciB0aGF0ID0gdGhpcztcbiAgdmFyIGtleXMgPSB0aGF0Ll9rO1xuICB2YXIga2V5O1xuICBkbyB7XG4gICAgaWYgKHRoYXQuX2kgPj0ga2V5cy5sZW5ndGgpIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfTtcbiAgfSB3aGlsZSAoISgoa2V5ID0ga2V5c1t0aGF0Ll9pKytdKSBpbiB0aGF0Ll90KSk7XG4gIHJldHVybiB7IHZhbHVlOiBrZXksIGRvbmU6IGZhbHNlIH07XG59KTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0Jywge1xuICBlbnVtZXJhdGU6IGZ1bmN0aW9uIGVudW1lcmF0ZSh0YXJnZXQpIHtcbiAgICByZXR1cm4gbmV3IEVudW1lcmF0ZSh0YXJnZXQpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///260\n")},function(module,exports,__webpack_require__){eval("// 26.1.6 Reflect.get(target, propertyKey [, receiver])\nvar gOPD = __webpack_require__(16);\nvar getPrototypeOf = __webpack_require__(17);\nvar has = __webpack_require__(14);\nvar $export = __webpack_require__(0);\nvar isObject = __webpack_require__(4);\nvar anObject = __webpack_require__(1);\n\nfunction get(target, propertyKey /* , receiver */) {\n var receiver = arguments.length < 3 ? target : arguments[2];\n var desc, proto;\n if (anObject(target) === receiver) return target[propertyKey];\n if (desc = gOPD.f(target, propertyKey)) return has(desc, 'value')\n ? desc.value\n : desc.get !== undefined\n ? desc.get.call(receiver)\n : undefined;\n if (isObject(proto = getPrototypeOf(target))) return get(proto, propertyKey, receiver);\n}\n\n$export($export.S, 'Reflect', { get: get });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5nZXQuanM/ZDE4NSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLFdBQVcsbUJBQU8sQ0FBQyxFQUFnQjtBQUNuQyxxQkFBcUIsbUJBQU8sQ0FBQyxFQUFlO0FBQzVDLFVBQVUsbUJBQU8sQ0FBQyxFQUFRO0FBQzFCLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjOztBQUVyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLCtCQUErQixXQUFXIiwiZmlsZSI6IjI2MS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDI2LjEuNiBSZWZsZWN0LmdldCh0YXJnZXQsIHByb3BlcnR5S2V5IFssIHJlY2VpdmVyXSlcbnZhciBnT1BEID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xuXG5mdW5jdGlvbiBnZXQodGFyZ2V0LCBwcm9wZXJ0eUtleSAvKiAsIHJlY2VpdmVyICovKSB7XG4gIHZhciByZWNlaXZlciA9IGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdGFyZ2V0IDogYXJndW1lbnRzWzJdO1xuICB2YXIgZGVzYywgcHJvdG87XG4gIGlmIChhbk9iamVjdCh0YXJnZXQpID09PSByZWNlaXZlcikgcmV0dXJuIHRhcmdldFtwcm9wZXJ0eUtleV07XG4gIGlmIChkZXNjID0gZ09QRC5mKHRhcmdldCwgcHJvcGVydHlLZXkpKSByZXR1cm4gaGFzKGRlc2MsICd2YWx1ZScpXG4gICAgPyBkZXNjLnZhbHVlXG4gICAgOiBkZXNjLmdldCAhPT0gdW5kZWZpbmVkXG4gICAgICA/IGRlc2MuZ2V0LmNhbGwocmVjZWl2ZXIpXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgaWYgKGlzT2JqZWN0KHByb3RvID0gZ2V0UHJvdG90eXBlT2YodGFyZ2V0KSkpIHJldHVybiBnZXQocHJvdG8sIHByb3BlcnR5S2V5LCByZWNlaXZlcik7XG59XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHsgZ2V0OiBnZXQgfSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///261\n")},function(module,exports,__webpack_require__){eval("// 26.1.7 Reflect.getOwnPropertyDescriptor(target, propertyKey)\nvar gOPD = __webpack_require__(16);\nvar $export = __webpack_require__(0);\nvar anObject = __webpack_require__(1);\n\n$export($export.S, 'Reflect', {\n getOwnPropertyDescriptor: function getOwnPropertyDescriptor(target, propertyKey) {\n return gOPD.f(anObject(target), propertyKey);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanM/ZWJkZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLFdBQVcsbUJBQU8sQ0FBQyxFQUFnQjtBQUNuQyxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxlQUFlLG1CQUFPLENBQUMsQ0FBYzs7QUFFckM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjI2Mi5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDI2LjEuNyBSZWZsZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIHByb3BlcnR5S2V5KVxudmFyIGdPUEQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7XG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgcHJvcGVydHlLZXkpIHtcbiAgICByZXR1cm4gZ09QRC5mKGFuT2JqZWN0KHRhcmdldCksIHByb3BlcnR5S2V5KTtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///262\n")},function(module,exports,__webpack_require__){eval("// 26.1.8 Reflect.getPrototypeOf(target)\nvar $export = __webpack_require__(0);\nvar getProto = __webpack_require__(17);\nvar anObject = __webpack_require__(1);\n\n$export($export.S, 'Reflect', {\n getPrototypeOf: function getPrototypeOf(target) {\n return getProto(anObject(target));\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5nZXQtcHJvdG90eXBlLW9mLmpzPzJkMzQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxlQUFlLG1CQUFPLENBQUMsRUFBZTtBQUN0QyxlQUFlLG1CQUFPLENBQUMsQ0FBYzs7QUFFckM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjI2My5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDI2LjEuOCBSZWZsZWN0LmdldFByb3RvdHlwZU9mKHRhcmdldClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZ2V0UHJvdG8gPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0Jywge1xuICBnZXRQcm90b3R5cGVPZjogZnVuY3Rpb24gZ2V0UHJvdG90eXBlT2YodGFyZ2V0KSB7XG4gICAgcmV0dXJuIGdldFByb3RvKGFuT2JqZWN0KHRhcmdldCkpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///263\n")},function(module,exports,__webpack_require__){eval("// 26.1.9 Reflect.has(target, propertyKey)\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Reflect', {\n has: function has(target, propertyKey) {\n return propertyKey in target;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5oYXMuanM/ZjZiMyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXOztBQUVqQztBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjY0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjYuMS45IFJlZmxlY3QuaGFzKHRhcmdldCwgcHJvcGVydHlLZXkpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7XG4gIGhhczogZnVuY3Rpb24gaGFzKHRhcmdldCwgcHJvcGVydHlLZXkpIHtcbiAgICByZXR1cm4gcHJvcGVydHlLZXkgaW4gdGFyZ2V0O1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///264\n")},function(module,exports,__webpack_require__){eval("// 26.1.10 Reflect.isExtensible(target)\nvar $export = __webpack_require__(0);\nvar anObject = __webpack_require__(1);\nvar $isExtensible = Object.isExtensible;\n\n$export($export.S, 'Reflect', {\n isExtensible: function isExtensible(target) {\n anObject(target);\n return $isExtensible ? $isExtensible(target) : true;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5pcy1leHRlbnNpYmxlLmpzPzIyNTEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyNjUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyNi4xLjEwIFJlZmxlY3QuaXNFeHRlbnNpYmxlKHRhcmdldClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciAkaXNFeHRlbnNpYmxlID0gT2JqZWN0LmlzRXh0ZW5zaWJsZTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0Jywge1xuICBpc0V4dGVuc2libGU6IGZ1bmN0aW9uIGlzRXh0ZW5zaWJsZSh0YXJnZXQpIHtcbiAgICBhbk9iamVjdCh0YXJnZXQpO1xuICAgIHJldHVybiAkaXNFeHRlbnNpYmxlID8gJGlzRXh0ZW5zaWJsZSh0YXJnZXQpIDogdHJ1ZTtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///265\n")},function(module,exports,__webpack_require__){eval("// 26.1.11 Reflect.ownKeys(target)\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Reflect', { ownKeys: __webpack_require__(123) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5vd24ta2V5cy5qcz9jNjk4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDLCtCQUErQixVQUFVLG1CQUFPLENBQUMsR0FBYSxHQUFHIiwiZmlsZSI6IjI2Ni5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDI2LjEuMTEgUmVmbGVjdC5vd25LZXlzKHRhcmdldClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHsgb3duS2V5czogcmVxdWlyZSgnLi9fb3duLWtleXMnKSB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///266\n")},function(module,exports,__webpack_require__){eval("// 26.1.12 Reflect.preventExtensions(target)\nvar $export = __webpack_require__(0);\nvar anObject = __webpack_require__(1);\nvar $preventExtensions = Object.preventExtensions;\n\n$export($export.S, 'Reflect', {\n preventExtensions: function preventExtensions(target) {\n anObject(target);\n try {\n if ($preventExtensions) $preventExtensions(target);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5wcmV2ZW50LWV4dGVuc2lvbnMuanM/YTE5ZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjI2Ny5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDI2LjEuMTIgUmVmbGVjdC5wcmV2ZW50RXh0ZW5zaW9ucyh0YXJnZXQpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgJHByZXZlbnRFeHRlbnNpb25zID0gT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7XG4gIHByZXZlbnRFeHRlbnNpb25zOiBmdW5jdGlvbiBwcmV2ZW50RXh0ZW5zaW9ucyh0YXJnZXQpIHtcbiAgICBhbk9iamVjdCh0YXJnZXQpO1xuICAgIHRyeSB7XG4gICAgICBpZiAoJHByZXZlbnRFeHRlbnNpb25zKSAkcHJldmVudEV4dGVuc2lvbnModGFyZ2V0KTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///267\n")},function(module,exports,__webpack_require__){eval("// 26.1.13 Reflect.set(target, propertyKey, V [, receiver])\nvar dP = __webpack_require__(8);\nvar gOPD = __webpack_require__(16);\nvar getPrototypeOf = __webpack_require__(17);\nvar has = __webpack_require__(14);\nvar $export = __webpack_require__(0);\nvar createDesc = __webpack_require__(32);\nvar anObject = __webpack_require__(1);\nvar isObject = __webpack_require__(4);\n\nfunction set(target, propertyKey, V /* , receiver */) {\n var receiver = arguments.length < 4 ? target : arguments[3];\n var ownDesc = gOPD.f(anObject(target), propertyKey);\n var existingDescriptor, proto;\n if (!ownDesc) {\n if (isObject(proto = getPrototypeOf(target))) {\n return set(proto, propertyKey, V, receiver);\n }\n ownDesc = createDesc(0);\n }\n if (has(ownDesc, 'value')) {\n if (ownDesc.writable === false || !isObject(receiver)) return false;\n if (existingDescriptor = gOPD.f(receiver, propertyKey)) {\n if (existingDescriptor.get || existingDescriptor.set || existingDescriptor.writable === false) return false;\n existingDescriptor.value = V;\n dP.f(receiver, propertyKey, existingDescriptor);\n } else dP.f(receiver, propertyKey, createDesc(0, V));\n return true;\n }\n return ownDesc.set === undefined ? false : (ownDesc.set.call(receiver, V), true);\n}\n\n$export($export.S, 'Reflect', { set: set });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5zZXQuanM/OTI1MyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLFNBQVMsbUJBQU8sQ0FBQyxDQUFjO0FBQy9CLFdBQVcsbUJBQU8sQ0FBQyxFQUFnQjtBQUNuQyxxQkFBcUIsbUJBQU8sQ0FBQyxFQUFlO0FBQzVDLFVBQVUsbUJBQU8sQ0FBQyxFQUFRO0FBQzFCLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGlCQUFpQixtQkFBTyxDQUFDLEVBQWtCO0FBQzNDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjOztBQUVyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSwrQkFBK0IsV0FBVyIsImZpbGUiOiIyNjguanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyNi4xLjEzIFJlZmxlY3Quc2V0KHRhcmdldCwgcHJvcGVydHlLZXksIFYgWywgcmVjZWl2ZXJdKVxudmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG52YXIgZ09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGNyZWF0ZURlc2MgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xuXG5mdW5jdGlvbiBzZXQodGFyZ2V0LCBwcm9wZXJ0eUtleSwgViAvKiAsIHJlY2VpdmVyICovKSB7XG4gIHZhciByZWNlaXZlciA9IGFyZ3VtZW50cy5sZW5ndGggPCA0ID8gdGFyZ2V0IDogYXJndW1lbnRzWzNdO1xuICB2YXIgb3duRGVzYyA9IGdPUEQuZihhbk9iamVjdCh0YXJnZXQpLCBwcm9wZXJ0eUtleSk7XG4gIHZhciBleGlzdGluZ0Rlc2NyaXB0b3IsIHByb3RvO1xuICBpZiAoIW93bkRlc2MpIHtcbiAgICBpZiAoaXNPYmplY3QocHJvdG8gPSBnZXRQcm90b3R5cGVPZih0YXJnZXQpKSkge1xuICAgICAgcmV0dXJuIHNldChwcm90bywgcHJvcGVydHlLZXksIFYsIHJlY2VpdmVyKTtcbiAgICB9XG4gICAgb3duRGVzYyA9IGNyZWF0ZURlc2MoMCk7XG4gIH1cbiAgaWYgKGhhcyhvd25EZXNjLCAndmFsdWUnKSkge1xuICAgIGlmIChvd25EZXNjLndyaXRhYmxlID09PSBmYWxzZSB8fCAhaXNPYmplY3QocmVjZWl2ZXIpKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKGV4aXN0aW5nRGVzY3JpcHRvciA9IGdPUEQuZihyZWNlaXZlciwgcHJvcGVydHlLZXkpKSB7XG4gICAgICBpZiAoZXhpc3RpbmdEZXNjcmlwdG9yLmdldCB8fCBleGlzdGluZ0Rlc2NyaXB0b3Iuc2V0IHx8IGV4aXN0aW5nRGVzY3JpcHRvci53cml0YWJsZSA9PT0gZmFsc2UpIHJldHVybiBmYWxzZTtcbiAgICAgIGV4aXN0aW5nRGVzY3JpcHRvci52YWx1ZSA9IFY7XG4gICAgICBkUC5mKHJlY2VpdmVyLCBwcm9wZXJ0eUtleSwgZXhpc3RpbmdEZXNjcmlwdG9yKTtcbiAgICB9IGVsc2UgZFAuZihyZWNlaXZlciwgcHJvcGVydHlLZXksIGNyZWF0ZURlc2MoMCwgVikpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBvd25EZXNjLnNldCA9PT0gdW5kZWZpbmVkID8gZmFsc2UgOiAob3duRGVzYy5zZXQuY2FsbChyZWNlaXZlciwgViksIHRydWUpO1xufVxuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7IHNldDogc2V0IH0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///268\n")},function(module,exports,__webpack_require__){eval("// 26.1.14 Reflect.setPrototypeOf(target, proto)\nvar $export = __webpack_require__(0);\nvar setProto = __webpack_require__(71);\n\nif (setProto) $export($export.S, 'Reflect', {\n setPrototypeOf: function setPrototypeOf(target, proto) {\n setProto.check(target, proto);\n try {\n setProto.set(target, proto);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5zZXQtcHJvdG90eXBlLW9mLmpzPzkyNzUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxlQUFlLG1CQUFPLENBQUMsRUFBYzs7QUFFckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjY5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjYuMS4xNCBSZWZsZWN0LnNldFByb3RvdHlwZU9mKHRhcmdldCwgcHJvdG8pXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHNldFByb3RvID0gcmVxdWlyZSgnLi9fc2V0LXByb3RvJyk7XG5cbmlmIChzZXRQcm90bykgJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0Jywge1xuICBzZXRQcm90b3R5cGVPZjogZnVuY3Rpb24gc2V0UHJvdG90eXBlT2YodGFyZ2V0LCBwcm90bykge1xuICAgIHNldFByb3RvLmNoZWNrKHRhcmdldCwgcHJvdG8pO1xuICAgIHRyeSB7XG4gICAgICBzZXRQcm90by5zZXQodGFyZ2V0LCBwcm90byk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///269\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// https://github.com/tc39/Array.prototype.includes\nvar $export = __webpack_require__(0);\nvar $includes = __webpack_require__(52)(true);\n\n$export($export.P, 'Array', {\n includes: function includes(el /* , fromIndex = 0 */) {\n return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\n__webpack_require__(31)('includes');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuYXJyYXkuaW5jbHVkZXMuanM/Njc2MiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBbUI7O0FBRTNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRCxtQkFBTyxDQUFDLEVBQXVCIiwiZmlsZSI6IjI3MC5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L0FycmF5LnByb3RvdHlwZS5pbmNsdWRlc1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkaW5jbHVkZXMgPSByZXF1aXJlKCcuL19hcnJheS1pbmNsdWRlcycpKHRydWUpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCwgJ0FycmF5Jywge1xuICBpbmNsdWRlczogZnVuY3Rpb24gaW5jbHVkZXMoZWwgLyogLCBmcm9tSW5kZXggPSAwICovKSB7XG4gICAgcmV0dXJuICRpbmNsdWRlcyh0aGlzLCBlbCwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcblxucmVxdWlyZSgnLi9fYWRkLXRvLXVuc2NvcGFibGVzJykoJ2luY2x1ZGVzJyk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///270\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// https://tc39.github.io/proposal-flatMap/#sec-Array.prototype.flatMap\nvar $export = __webpack_require__(0);\nvar flattenIntoArray = __webpack_require__(124);\nvar toObject = __webpack_require__(9);\nvar toLength = __webpack_require__(6);\nvar aFunction = __webpack_require__(10);\nvar arraySpeciesCreate = __webpack_require__(84);\n\n$export($export.P, 'Array', {\n flatMap: function flatMap(callbackfn /* , thisArg */) {\n var O = toObject(this);\n var sourceLen, A;\n aFunction(callbackfn);\n sourceLen = toLength(O.length);\n A = arraySpeciesCreate(O, 0);\n flattenIntoArray(A, O, O, sourceLen, 0, 1, callbackfn, arguments[1]);\n return A;\n }\n});\n\n__webpack_require__(31)('flatMap');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuYXJyYXkuZmxhdC1tYXAuanM/ZTk1NiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsdUJBQXVCLG1CQUFPLENBQUMsR0FBdUI7QUFDdEQsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2Qyx5QkFBeUIsbUJBQU8sQ0FBQyxFQUF5Qjs7QUFFMUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVELG1CQUFPLENBQUMsRUFBdUIiLCJmaWxlIjoiMjcxLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1mbGF0TWFwLyNzZWMtQXJyYXkucHJvdG90eXBlLmZsYXRNYXBcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZmxhdHRlbkludG9BcnJheSA9IHJlcXVpcmUoJy4vX2ZsYXR0ZW4taW50by1hcnJheScpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgYXJyYXlTcGVjaWVzQ3JlYXRlID0gcmVxdWlyZSgnLi9fYXJyYXktc3BlY2llcy1jcmVhdGUnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdBcnJheScsIHtcbiAgZmxhdE1hcDogZnVuY3Rpb24gZmxhdE1hcChjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gICAgdmFyIHNvdXJjZUxlbiwgQTtcbiAgICBhRnVuY3Rpb24oY2FsbGJhY2tmbik7XG4gICAgc291cmNlTGVuID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICAgIEEgPSBhcnJheVNwZWNpZXNDcmVhdGUoTywgMCk7XG4gICAgZmxhdHRlbkludG9BcnJheShBLCBPLCBPLCBzb3VyY2VMZW4sIDAsIDEsIGNhbGxiYWNrZm4sIGFyZ3VtZW50c1sxXSk7XG4gICAgcmV0dXJuIEE7XG4gIH1cbn0pO1xuXG5yZXF1aXJlKCcuL19hZGQtdG8tdW5zY29wYWJsZXMnKSgnZmxhdE1hcCcpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///271\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// https://tc39.github.io/proposal-flatMap/#sec-Array.prototype.flatten\nvar $export = __webpack_require__(0);\nvar flattenIntoArray = __webpack_require__(124);\nvar toObject = __webpack_require__(9);\nvar toLength = __webpack_require__(6);\nvar toInteger = __webpack_require__(21);\nvar arraySpeciesCreate = __webpack_require__(84);\n\n$export($export.P, 'Array', {\n flatten: function flatten(/* depthArg = 1 */) {\n var depthArg = arguments[0];\n var O = toObject(this);\n var sourceLen = toLength(O.length);\n var A = arraySpeciesCreate(O, 0);\n flattenIntoArray(A, O, O, sourceLen, 0, depthArg === undefined ? 1 : toInteger(depthArg));\n return A;\n }\n});\n\n__webpack_require__(31)('flatten');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuYXJyYXkuZmxhdHRlbi5qcz83MWYxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyx1QkFBdUIsbUJBQU8sQ0FBQyxHQUF1QjtBQUN0RCxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDLHlCQUF5QixtQkFBTyxDQUFDLEVBQXlCOztBQUUxRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVELG1CQUFPLENBQUMsRUFBdUIiLCJmaWxlIjoiMjcyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1mbGF0TWFwLyNzZWMtQXJyYXkucHJvdG90eXBlLmZsYXR0ZW5cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZmxhdHRlbkludG9BcnJheSA9IHJlcXVpcmUoJy4vX2ZsYXR0ZW4taW50by1hcnJheScpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgYXJyYXlTcGVjaWVzQ3JlYXRlID0gcmVxdWlyZSgnLi9fYXJyYXktc3BlY2llcy1jcmVhdGUnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdBcnJheScsIHtcbiAgZmxhdHRlbjogZnVuY3Rpb24gZmxhdHRlbigvKiBkZXB0aEFyZyA9IDEgKi8pIHtcbiAgICB2YXIgZGVwdGhBcmcgPSBhcmd1bWVudHNbMF07XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgc291cmNlTGVuID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICAgIHZhciBBID0gYXJyYXlTcGVjaWVzQ3JlYXRlKE8sIDApO1xuICAgIGZsYXR0ZW5JbnRvQXJyYXkoQSwgTywgTywgc291cmNlTGVuLCAwLCBkZXB0aEFyZyA9PT0gdW5kZWZpbmVkID8gMSA6IHRvSW50ZWdlcihkZXB0aEFyZykpO1xuICAgIHJldHVybiBBO1xuICB9XG59KTtcblxucmVxdWlyZSgnLi9fYWRkLXRvLXVuc2NvcGFibGVzJykoJ2ZsYXR0ZW4nKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///272\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// https://github.com/mathiasbynens/String.prototype.at\nvar $export = __webpack_require__(0);\nvar $at = __webpack_require__(55)(true);\nvar $fails = __webpack_require__(3);\n\nvar FORCED = $fails(function () {\n return '𠮷'.at(0) !== '𠮷';\n});\n\n$export($export.P + $export.F * FORCED, 'String', {\n at: function at(pos) {\n return $at(this, pos);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLmF0LmpzPzM1MzUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLFVBQVUsbUJBQU8sQ0FBQyxFQUFjO0FBQ2hDLGFBQWEsbUJBQU8sQ0FBQyxDQUFVOztBQUUvQjtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjczLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL21hdGhpYXNieW5lbnMvU3RyaW5nLnByb3RvdHlwZS5hdFxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkYXQgPSByZXF1aXJlKCcuL19zdHJpbmctYXQnKSh0cnVlKTtcbnZhciAkZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xuXG52YXIgRk9SQ0VEID0gJGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICfwoK63Jy5hdCgwKSAhPT0gJ/CgrrcnO1xufSk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogRk9SQ0VELCAnU3RyaW5nJywge1xuICBhdDogZnVuY3Rpb24gYXQocG9zKSB7XG4gICAgcmV0dXJuICRhdCh0aGlzLCBwb3MpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///273\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = __webpack_require__(0);\nvar $pad = __webpack_require__(125);\nvar userAgent = __webpack_require__(60);\n\n// https://github.com/zloirock/core-js/issues/280\nvar WEBKIT_BUG = /Version\\/10\\.\\d+(\\.\\d+)?( Mobile\\/\\w+)? Safari\\//.test(userAgent);\n\n$export($export.P + $export.F * WEBKIT_BUG, 'String', {\n padStart: function padStart(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, true);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLnBhZC1zdGFydC5qcz9mNTc2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxXQUFXLG1CQUFPLENBQUMsR0FBZTtBQUNsQyxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlOztBQUV2QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyNzQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zdHJpbmctcGFkLXN0YXJ0LWVuZFxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkcGFkID0gcmVxdWlyZSgnLi9fc3RyaW5nLXBhZCcpO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4vX3VzZXItYWdlbnQnKTtcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzI4MFxudmFyIFdFQktJVF9CVUcgPSAvVmVyc2lvblxcLzEwXFwuXFxkKyhcXC5cXGQrKT8oIE1vYmlsZVxcL1xcdyspPyBTYWZhcmlcXC8vLnRlc3QodXNlckFnZW50KTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiBXRUJLSVRfQlVHLCAnU3RyaW5nJywge1xuICBwYWRTdGFydDogZnVuY3Rpb24gcGFkU3RhcnQobWF4TGVuZ3RoIC8qICwgZmlsbFN0cmluZyA9ICcgJyAqLykge1xuICAgIHJldHVybiAkcGFkKHRoaXMsIG1heExlbmd0aCwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQsIHRydWUpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///274\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = __webpack_require__(0);\nvar $pad = __webpack_require__(125);\nvar userAgent = __webpack_require__(60);\n\n// https://github.com/zloirock/core-js/issues/280\nvar WEBKIT_BUG = /Version\\/10\\.\\d+(\\.\\d+)?( Mobile\\/\\w+)? Safari\\//.test(userAgent);\n\n$export($export.P + $export.F * WEBKIT_BUG, 'String', {\n padEnd: function padEnd(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, false);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLnBhZC1lbmQuanM/ZWQ1MCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsV0FBVyxtQkFBTyxDQUFDLEdBQWU7QUFDbEMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTs7QUFFdkM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjc1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc3RyaW5nLXBhZC1zdGFydC1lbmRcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHBhZCA9IHJlcXVpcmUoJy4vX3N0cmluZy1wYWQnKTtcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuL191c2VyLWFnZW50Jyk7XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8yODBcbnZhciBXRUJLSVRfQlVHID0gL1ZlcnNpb25cXC8xMFxcLlxcZCsoXFwuXFxkKyk/KCBNb2JpbGVcXC9cXHcrKT8gU2FmYXJpXFwvLy50ZXN0KHVzZXJBZ2VudCk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogV0VCS0lUX0JVRywgJ1N0cmluZycsIHtcbiAgcGFkRW5kOiBmdW5jdGlvbiBwYWRFbmQobWF4TGVuZ3RoIC8qICwgZmlsbFN0cmluZyA9ICcgJyAqLykge1xuICAgIHJldHVybiAkcGFkKHRoaXMsIG1heExlbmd0aCwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQsIGZhbHNlKTtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///275\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// https://github.com/sebmarkbage/ecmascript-string-left-right-trim\n__webpack_require__(45)('trimLeft', function ($trim) {\n return function trimLeft() {\n return $trim(this, 1);\n };\n}, 'trimStart');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLnRyaW0tbGVmdC5qcz8yM2JlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjc2LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3NlYm1hcmtiYWdlL2VjbWFzY3JpcHQtc3RyaW5nLWxlZnQtcmlnaHQtdHJpbVxucmVxdWlyZSgnLi9fc3RyaW5nLXRyaW0nKSgndHJpbUxlZnQnLCBmdW5jdGlvbiAoJHRyaW0pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHRyaW1MZWZ0KCkge1xuICAgIHJldHVybiAkdHJpbSh0aGlzLCAxKTtcbiAgfTtcbn0sICd0cmltU3RhcnQnKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///276\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// https://github.com/sebmarkbage/ecmascript-string-left-right-trim\n__webpack_require__(45)('trimRight', function ($trim) {\n return function trimRight() {\n return $trim(this, 2);\n };\n}, 'trimEnd');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLnRyaW0tcmlnaHQuanM/N2MwZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsbUJBQU8sQ0FBQyxFQUFnQjtBQUN4QjtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjI3Ny5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9zZWJtYXJrYmFnZS9lY21hc2NyaXB0LXN0cmluZy1sZWZ0LXJpZ2h0LXRyaW1cbnJlcXVpcmUoJy4vX3N0cmluZy10cmltJykoJ3RyaW1SaWdodCcsIGZ1bmN0aW9uICgkdHJpbSkge1xuICByZXR1cm4gZnVuY3Rpb24gdHJpbVJpZ2h0KCkge1xuICAgIHJldHVybiAkdHJpbSh0aGlzLCAyKTtcbiAgfTtcbn0sICd0cmltRW5kJyk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///277\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// https://tc39.github.io/String.prototype.matchAll/\nvar $export = __webpack_require__(0);\nvar defined = __webpack_require__(24);\nvar toLength = __webpack_require__(6);\nvar isRegExp = __webpack_require__(56);\nvar getFlags = __webpack_require__(50);\nvar RegExpProto = RegExp.prototype;\n\nvar $RegExpStringIterator = function (regexp, string) {\n this._r = regexp;\n this._s = string;\n};\n\n__webpack_require__(78)($RegExpStringIterator, 'RegExp String', function next() {\n var match = this._r.exec(this._s);\n return { value: match, done: match === null };\n});\n\n$export($export.P, 'String', {\n matchAll: function matchAll(regexp) {\n defined(this);\n if (!isRegExp(regexp)) throw TypeError(regexp + ' is not a regexp!');\n var S = String(this);\n var flags = 'flags' in RegExpProto ? String(regexp.flags) : getFlags.call(regexp);\n var rx = new RegExp(regexp.source, ~flags.indexOf('g') ? flags : 'g' + flags);\n rx.lastIndex = toLength(regexp.lastIndex);\n return new $RegExpStringIterator(rx, S);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLm1hdGNoLWFsbC5qcz85ODhkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxjQUFjLG1CQUFPLENBQUMsRUFBWTtBQUNsQyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxlQUFlLG1CQUFPLENBQUMsRUFBYztBQUNyQyxlQUFlLG1CQUFPLENBQUMsRUFBVTtBQUNqQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3hCO0FBQ0EsVUFBVTtBQUNWLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjI3OC5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vU3RyaW5nLnByb3RvdHlwZS5tYXRjaEFsbC9cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGlzUmVnRXhwID0gcmVxdWlyZSgnLi9faXMtcmVnZXhwJyk7XG52YXIgZ2V0RmxhZ3MgPSByZXF1aXJlKCcuL19mbGFncycpO1xudmFyIFJlZ0V4cFByb3RvID0gUmVnRXhwLnByb3RvdHlwZTtcblxudmFyICRSZWdFeHBTdHJpbmdJdGVyYXRvciA9IGZ1bmN0aW9uIChyZWdleHAsIHN0cmluZykge1xuICB0aGlzLl9yID0gcmVnZXhwO1xuICB0aGlzLl9zID0gc3RyaW5nO1xufTtcblxucmVxdWlyZSgnLi9faXRlci1jcmVhdGUnKSgkUmVnRXhwU3RyaW5nSXRlcmF0b3IsICdSZWdFeHAgU3RyaW5nJywgZnVuY3Rpb24gbmV4dCgpIHtcbiAgdmFyIG1hdGNoID0gdGhpcy5fci5leGVjKHRoaXMuX3MpO1xuICByZXR1cm4geyB2YWx1ZTogbWF0Y2gsIGRvbmU6IG1hdGNoID09PSBudWxsIH07XG59KTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdTdHJpbmcnLCB7XG4gIG1hdGNoQWxsOiBmdW5jdGlvbiBtYXRjaEFsbChyZWdleHApIHtcbiAgICBkZWZpbmVkKHRoaXMpO1xuICAgIGlmICghaXNSZWdFeHAocmVnZXhwKSkgdGhyb3cgVHlwZUVycm9yKHJlZ2V4cCArICcgaXMgbm90IGEgcmVnZXhwIScpO1xuICAgIHZhciBTID0gU3RyaW5nKHRoaXMpO1xuICAgIHZhciBmbGFncyA9ICdmbGFncycgaW4gUmVnRXhwUHJvdG8gPyBTdHJpbmcocmVnZXhwLmZsYWdzKSA6IGdldEZsYWdzLmNhbGwocmVnZXhwKTtcbiAgICB2YXIgcnggPSBuZXcgUmVnRXhwKHJlZ2V4cC5zb3VyY2UsIH5mbGFncy5pbmRleE9mKCdnJykgPyBmbGFncyA6ICdnJyArIGZsYWdzKTtcbiAgICByeC5sYXN0SW5kZXggPSB0b0xlbmd0aChyZWdleHAubGFzdEluZGV4KTtcbiAgICByZXR1cm4gbmV3ICRSZWdFeHBTdHJpbmdJdGVyYXRvcihyeCwgUyk7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///278\n")},function(module,exports,__webpack_require__){eval("__webpack_require__(67)('asyncIterator');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3ltYm9sLmFzeW5jLWl0ZXJhdG9yLmpzP2FjNGQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsbUJBQU8sQ0FBQyxFQUFlIiwiZmlsZSI6IjI3OS5qcyIsInNvdXJjZXNDb250ZW50IjpbInJlcXVpcmUoJy4vX3drcy1kZWZpbmUnKSgnYXN5bmNJdGVyYXRvcicpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///279\n")},function(module,exports,__webpack_require__){eval("__webpack_require__(67)('observable');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3ltYm9sLm9ic2VydmFibGUuanM/YzdjYSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxtQkFBTyxDQUFDLEVBQWUiLCJmaWxlIjoiMjgwLmpzIiwic291cmNlc0NvbnRlbnQiOlsicmVxdWlyZSgnLi9fd2tzLWRlZmluZScpKCdvYnNlcnZhYmxlJyk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///280\n")},function(module,exports,__webpack_require__){eval("// https://github.com/tc39/proposal-object-getownpropertydescriptors\nvar $export = __webpack_require__(0);\nvar ownKeys = __webpack_require__(123);\nvar toIObject = __webpack_require__(15);\nvar gOPD = __webpack_require__(16);\nvar createProperty = __webpack_require__(82);\n\n$export($export.S, 'Object', {\n getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {\n var O = toIObject(object);\n var getDesc = gOPD.f;\n var keys = ownKeys(O);\n var result = {};\n var i = 0;\n var key, desc;\n while (keys.length > i) {\n desc = getDesc(O, key = keys[i++]);\n if (desc !== undefined) createProperty(result, key, desc);\n }\n return result;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JqZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcnMuanM/OGU2ZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGNBQWMsbUJBQU8sQ0FBQyxHQUFhO0FBQ25DLGdCQUFnQixtQkFBTyxDQUFDLEVBQWU7QUFDdkMsV0FBVyxtQkFBTyxDQUFDLEVBQWdCO0FBQ25DLHFCQUFxQixtQkFBTyxDQUFDLEVBQW9COztBQUVqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyODEuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yc1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBvd25LZXlzID0gcmVxdWlyZSgnLi9fb3duLWtleXMnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgZ09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJyk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSByZXF1aXJlKCcuL19jcmVhdGUtcHJvcGVydHknKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdPYmplY3QnLCB7XG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvcnM6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KSB7XG4gICAgdmFyIE8gPSB0b0lPYmplY3Qob2JqZWN0KTtcbiAgICB2YXIgZ2V0RGVzYyA9IGdPUEQuZjtcbiAgICB2YXIga2V5cyA9IG93bktleXMoTyk7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIga2V5LCBkZXNjO1xuICAgIHdoaWxlIChrZXlzLmxlbmd0aCA+IGkpIHtcbiAgICAgIGRlc2MgPSBnZXREZXNjKE8sIGtleSA9IGtleXNbaSsrXSk7XG4gICAgICBpZiAoZGVzYyAhPT0gdW5kZWZpbmVkKSBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIGtleSwgZGVzYyk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///281\n")},function(module,exports,__webpack_require__){eval("// https://github.com/tc39/proposal-object-values-entries\nvar $export = __webpack_require__(0);\nvar $values = __webpack_require__(126)(false);\n\n$export($export.S, 'Object', {\n values: function values(it) {\n return $values(it);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JqZWN0LnZhbHVlcy5qcz84NjE1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsY0FBYyxtQkFBTyxDQUFDLEdBQW9COztBQUUxQztBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjgyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtb2JqZWN0LXZhbHVlcy1lbnRyaWVzXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICR2YWx1ZXMgPSByZXF1aXJlKCcuL19vYmplY3QtdG8tYXJyYXknKShmYWxzZSk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnT2JqZWN0Jywge1xuICB2YWx1ZXM6IGZ1bmN0aW9uIHZhbHVlcyhpdCkge1xuICAgIHJldHVybiAkdmFsdWVzKGl0KTtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///282\n")},function(module,exports,__webpack_require__){eval("// https://github.com/tc39/proposal-object-values-entries\nvar $export = __webpack_require__(0);\nvar $entries = __webpack_require__(126)(true);\n\n$export($export.S, 'Object', {\n entries: function entries(it) {\n return $entries(it);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JqZWN0LmVudHJpZXMuanM/ZmZjMSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyxHQUFvQjs7QUFFM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjI4My5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLW9iamVjdC12YWx1ZXMtZW50cmllc1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkZW50cmllcyA9IHJlcXVpcmUoJy4vX29iamVjdC10by1hcnJheScpKHRydWUpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ09iamVjdCcsIHtcbiAgZW50cmllczogZnVuY3Rpb24gZW50cmllcyhpdCkge1xuICAgIHJldHVybiAkZW50cmllcyhpdCk7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///283\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar toObject = __webpack_require__(9);\nvar aFunction = __webpack_require__(10);\nvar $defineProperty = __webpack_require__(8);\n\n// B.2.2.2 Object.prototype.__defineGetter__(P, getter)\n__webpack_require__(7) && $export($export.P + __webpack_require__(63), 'Object', {\n __defineGetter__: function __defineGetter__(P, getter) {\n $defineProperty.f(toObject(this), P, { get: aFunction(getter), enumerable: true, configurable: true });\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JqZWN0LmRlZmluZS1nZXR0ZXIuanM/NDUwNCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGdCQUFnQixtQkFBTyxDQUFDLEVBQWU7QUFDdkMsc0JBQXNCLG1CQUFPLENBQUMsQ0FBYzs7QUFFNUM7QUFDQSxtQkFBTyxDQUFDLENBQWdCLHlCQUF5QixtQkFBTyxDQUFDLEVBQXNCO0FBQy9FO0FBQ0EsMENBQTBDLCtEQUErRDtBQUN6RztBQUNBLENBQUMiLCJmaWxlIjoiMjg0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciAkZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcblxuLy8gQi4yLjIuMiBPYmplY3QucHJvdG90eXBlLl9fZGVmaW5lR2V0dGVyX18oUCwgZ2V0dGVyKVxucmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSAmJiAkZXhwb3J0KCRleHBvcnQuUCArIHJlcXVpcmUoJy4vX29iamVjdC1mb3JjZWQtcGFtJyksICdPYmplY3QnLCB7XG4gIF9fZGVmaW5lR2V0dGVyX186IGZ1bmN0aW9uIF9fZGVmaW5lR2V0dGVyX18oUCwgZ2V0dGVyKSB7XG4gICAgJGRlZmluZVByb3BlcnR5LmYodG9PYmplY3QodGhpcyksIFAsIHsgZ2V0OiBhRnVuY3Rpb24oZ2V0dGVyKSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0pO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///284\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar toObject = __webpack_require__(9);\nvar aFunction = __webpack_require__(10);\nvar $defineProperty = __webpack_require__(8);\n\n// B.2.2.3 Object.prototype.__defineSetter__(P, setter)\n__webpack_require__(7) && $export($export.P + __webpack_require__(63), 'Object', {\n __defineSetter__: function __defineSetter__(P, setter) {\n $defineProperty.f(toObject(this), P, { set: aFunction(setter), enumerable: true, configurable: true });\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JqZWN0LmRlZmluZS1zZXR0ZXIuanM/ZmVlNyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGdCQUFnQixtQkFBTyxDQUFDLEVBQWU7QUFDdkMsc0JBQXNCLG1CQUFPLENBQUMsQ0FBYzs7QUFFNUM7QUFDQSxtQkFBTyxDQUFDLENBQWdCLHlCQUF5QixtQkFBTyxDQUFDLEVBQXNCO0FBQy9FO0FBQ0EsMENBQTBDLCtEQUErRDtBQUN6RztBQUNBLENBQUMiLCJmaWxlIjoiMjg1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciAkZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcblxuLy8gQi4yLjIuMyBPYmplY3QucHJvdG90eXBlLl9fZGVmaW5lU2V0dGVyX18oUCwgc2V0dGVyKVxucmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSAmJiAkZXhwb3J0KCRleHBvcnQuUCArIHJlcXVpcmUoJy4vX29iamVjdC1mb3JjZWQtcGFtJyksICdPYmplY3QnLCB7XG4gIF9fZGVmaW5lU2V0dGVyX186IGZ1bmN0aW9uIF9fZGVmaW5lU2V0dGVyX18oUCwgc2V0dGVyKSB7XG4gICAgJGRlZmluZVByb3BlcnR5LmYodG9PYmplY3QodGhpcyksIFAsIHsgc2V0OiBhRnVuY3Rpb24oc2V0dGVyKSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0pO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///285\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar toObject = __webpack_require__(9);\nvar toPrimitive = __webpack_require__(23);\nvar getPrototypeOf = __webpack_require__(17);\nvar getOwnPropertyDescriptor = __webpack_require__(16).f;\n\n// B.2.2.4 Object.prototype.__lookupGetter__(P)\n__webpack_require__(7) && $export($export.P + __webpack_require__(63), 'Object', {\n __lookupGetter__: function __lookupGetter__(P) {\n var O = toObject(this);\n var K = toPrimitive(P, true);\n var D;\n do {\n if (D = getOwnPropertyDescriptor(O, K)) return D.get;\n } while (O = getPrototypeOf(O));\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JqZWN0Lmxvb2t1cC1nZXR0ZXIuanM/YjlhMSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGtCQUFrQixtQkFBTyxDQUFDLEVBQWlCO0FBQzNDLHFCQUFxQixtQkFBTyxDQUFDLEVBQWU7QUFDNUMsK0JBQStCLG1CQUFPLENBQUMsRUFBZ0I7O0FBRXZEO0FBQ0EsbUJBQU8sQ0FBQyxDQUFnQix5QkFBeUIsbUJBQU8sQ0FBQyxFQUFzQjtBQUMvRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxDQUFDIiwiZmlsZSI6IjI4Ni5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJykuZjtcblxuLy8gQi4yLjIuNCBPYmplY3QucHJvdG90eXBlLl9fbG9va3VwR2V0dGVyX18oUClcbnJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgJGV4cG9ydCgkZXhwb3J0LlAgKyByZXF1aXJlKCcuL19vYmplY3QtZm9yY2VkLXBhbScpLCAnT2JqZWN0Jywge1xuICBfX2xvb2t1cEdldHRlcl9fOiBmdW5jdGlvbiBfX2xvb2t1cEdldHRlcl9fKFApIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBLID0gdG9QcmltaXRpdmUoUCwgdHJ1ZSk7XG4gICAgdmFyIEQ7XG4gICAgZG8ge1xuICAgICAgaWYgKEQgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgSykpIHJldHVybiBELmdldDtcbiAgICB9IHdoaWxlIChPID0gZ2V0UHJvdG90eXBlT2YoTykpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///286\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar toObject = __webpack_require__(9);\nvar toPrimitive = __webpack_require__(23);\nvar getPrototypeOf = __webpack_require__(17);\nvar getOwnPropertyDescriptor = __webpack_require__(16).f;\n\n// B.2.2.5 Object.prototype.__lookupSetter__(P)\n__webpack_require__(7) && $export($export.P + __webpack_require__(63), 'Object', {\n __lookupSetter__: function __lookupSetter__(P) {\n var O = toObject(this);\n var K = toPrimitive(P, true);\n var D;\n do {\n if (D = getOwnPropertyDescriptor(O, K)) return D.set;\n } while (O = getPrototypeOf(O));\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JqZWN0Lmxvb2t1cC1zZXR0ZXIuanM/NjRkNSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGtCQUFrQixtQkFBTyxDQUFDLEVBQWlCO0FBQzNDLHFCQUFxQixtQkFBTyxDQUFDLEVBQWU7QUFDNUMsK0JBQStCLG1CQUFPLENBQUMsRUFBZ0I7O0FBRXZEO0FBQ0EsbUJBQU8sQ0FBQyxDQUFnQix5QkFBeUIsbUJBQU8sQ0FBQyxFQUFzQjtBQUMvRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxDQUFDIiwiZmlsZSI6IjI4Ny5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJykuZjtcblxuLy8gQi4yLjIuNSBPYmplY3QucHJvdG90eXBlLl9fbG9va3VwU2V0dGVyX18oUClcbnJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgJGV4cG9ydCgkZXhwb3J0LlAgKyByZXF1aXJlKCcuL19vYmplY3QtZm9yY2VkLXBhbScpLCAnT2JqZWN0Jywge1xuICBfX2xvb2t1cFNldHRlcl9fOiBmdW5jdGlvbiBfX2xvb2t1cFNldHRlcl9fKFApIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBLID0gdG9QcmltaXRpdmUoUCwgdHJ1ZSk7XG4gICAgdmFyIEQ7XG4gICAgZG8ge1xuICAgICAgaWYgKEQgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgSykpIHJldHVybiBELnNldDtcbiAgICB9IHdoaWxlIChPID0gZ2V0UHJvdG90eXBlT2YoTykpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///287\n")},function(module,exports,__webpack_require__){eval("// https://github.com/DavidBruant/Map-Set.prototype.toJSON\nvar $export = __webpack_require__(0);\n\n$export($export.P + $export.R, 'Map', { toJSON: __webpack_require__(127)('Map') });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWFwLnRvLWpzb24uanM/NDcwNCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXOztBQUVqQyx1Q0FBdUMsU0FBUyxtQkFBTyxDQUFDLEdBQXVCLFVBQVUiLCJmaWxlIjoiMjg4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXRodWIuY29tL0RhdmlkQnJ1YW50L01hcC1TZXQucHJvdG90eXBlLnRvSlNPTlxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LlIsICdNYXAnLCB7IHRvSlNPTjogcmVxdWlyZSgnLi9fY29sbGVjdGlvbi10by1qc29uJykoJ01hcCcpIH0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///288\n")},function(module,exports,__webpack_require__){eval("// https://github.com/DavidBruant/Map-Set.prototype.toJSON\nvar $export = __webpack_require__(0);\n\n$export($export.P + $export.R, 'Set', { toJSON: __webpack_require__(127)('Set') });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc2V0LnRvLWpzb24uanM/ZGI5YSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXOztBQUVqQyx1Q0FBdUMsU0FBUyxtQkFBTyxDQUFDLEdBQXVCLFVBQVUiLCJmaWxlIjoiMjg5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXRodWIuY29tL0RhdmlkQnJ1YW50L01hcC1TZXQucHJvdG90eXBlLnRvSlNPTlxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LlIsICdTZXQnLCB7IHRvSlNPTjogcmVxdWlyZSgnLi9fY29sbGVjdGlvbi10by1qc29uJykoJ1NldCcpIH0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///289\n")},function(module,exports,__webpack_require__){eval("// https://tc39.github.io/proposal-setmap-offrom/#sec-map.of\n__webpack_require__(64)('Map');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWFwLm9mLmpzPzcyOWIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxtQkFBTyxDQUFDLEVBQXNCIiwiZmlsZSI6IjI5MC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS8jc2VjLW1hcC5vZlxucmVxdWlyZSgnLi9fc2V0LWNvbGxlY3Rpb24tb2YnKSgnTWFwJyk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///290\n")},function(module,exports,__webpack_require__){eval("// https://tc39.github.io/proposal-setmap-offrom/#sec-set.of\n__webpack_require__(64)('Set');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc2V0Lm9mLmpzPzk5YzUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxtQkFBTyxDQUFDLEVBQXNCIiwiZmlsZSI6IjI5MS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS8jc2VjLXNldC5vZlxucmVxdWlyZSgnLi9fc2V0LWNvbGxlY3Rpb24tb2YnKSgnU2V0Jyk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///291\n")},function(module,exports,__webpack_require__){eval("// https://tc39.github.io/proposal-setmap-offrom/#sec-weakmap.of\n__webpack_require__(64)('WeakMap');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcud2Vhay1tYXAub2YuanM/NzY0ZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLG1CQUFPLENBQUMsRUFBc0IiLCJmaWxlIjoiMjkyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tLyNzZWMtd2Vha21hcC5vZlxucmVxdWlyZSgnLi9fc2V0LWNvbGxlY3Rpb24tb2YnKSgnV2Vha01hcCcpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///292\n")},function(module,exports,__webpack_require__){eval("// https://tc39.github.io/proposal-setmap-offrom/#sec-weakset.of\n__webpack_require__(64)('WeakSet');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcud2Vhay1zZXQub2YuanM/YmRkMSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLG1CQUFPLENBQUMsRUFBc0IiLCJmaWxlIjoiMjkzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tLyNzZWMtd2Vha3NldC5vZlxucmVxdWlyZSgnLi9fc2V0LWNvbGxlY3Rpb24tb2YnKSgnV2Vha1NldCcpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///293\n")},function(module,exports,__webpack_require__){eval("// https://tc39.github.io/proposal-setmap-offrom/#sec-map.from\n__webpack_require__(65)('Map');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWFwLmZyb20uanM/NDE2YyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLG1CQUFPLENBQUMsRUFBd0IiLCJmaWxlIjoiMjk0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tLyNzZWMtbWFwLmZyb21cbnJlcXVpcmUoJy4vX3NldC1jb2xsZWN0aW9uLWZyb20nKSgnTWFwJyk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///294\n")},function(module,exports,__webpack_require__){eval("// https://tc39.github.io/proposal-setmap-offrom/#sec-set.from\n__webpack_require__(65)('Set');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc2V0LmZyb20uanM/ZGQ4YSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLG1CQUFPLENBQUMsRUFBd0IiLCJmaWxlIjoiMjk1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tLyNzZWMtc2V0LmZyb21cbnJlcXVpcmUoJy4vX3NldC1jb2xsZWN0aW9uLWZyb20nKSgnU2V0Jyk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///295\n")},function(module,exports,__webpack_require__){eval("// https://tc39.github.io/proposal-setmap-offrom/#sec-weakmap.from\n__webpack_require__(65)('WeakMap');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcud2Vhay1tYXAuZnJvbS5qcz81ZDQwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsbUJBQU8sQ0FBQyxFQUF3QiIsImZpbGUiOiIyOTYuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vI3NlYy13ZWFrbWFwLmZyb21cbnJlcXVpcmUoJy4vX3NldC1jb2xsZWN0aW9uLWZyb20nKSgnV2Vha01hcCcpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///296\n")},function(module,exports,__webpack_require__){eval("// https://tc39.github.io/proposal-setmap-offrom/#sec-weakset.from\n__webpack_require__(65)('WeakSet');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcud2Vhay1zZXQuZnJvbS5qcz81ZDkwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsbUJBQU8sQ0FBQyxFQUF3QiIsImZpbGUiOiIyOTcuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vI3NlYy13ZWFrc2V0LmZyb21cbnJlcXVpcmUoJy4vX3NldC1jb2xsZWN0aW9uLWZyb20nKSgnV2Vha1NldCcpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///297\n")},function(module,exports,__webpack_require__){eval("// https://github.com/tc39/proposal-global\nvar $export = __webpack_require__(0);\n\n$export($export.G, { global: __webpack_require__(2) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuZ2xvYmFsLmpzPzBjMzYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVzs7QUFFakMsb0JBQW9CLFNBQVMsbUJBQU8sQ0FBQyxDQUFXLEdBQUciLCJmaWxlIjoiMjk4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtZ2xvYmFsXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuRywgeyBnbG9iYWw6IHJlcXVpcmUoJy4vX2dsb2JhbCcpIH0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///298\n")},function(module,exports,__webpack_require__){eval("// https://github.com/tc39/proposal-global\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'System', { global: __webpack_require__(2) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3lzdGVtLmdsb2JhbC5qcz9hMjM0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDLDhCQUE4QixTQUFTLG1CQUFPLENBQUMsQ0FBVyxHQUFHIiwiZmlsZSI6IjI5OS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWdsb2JhbFxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdTeXN0ZW0nLCB7IGdsb2JhbDogcmVxdWlyZSgnLi9fZ2xvYmFsJykgfSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///299\n")},function(module,exports,__webpack_require__){eval("// https://github.com/ljharb/proposal-is-error\nvar $export = __webpack_require__(0);\nvar cof = __webpack_require__(20);\n\n$export($export.S, 'Error', {\n isError: function isError(it) {\n return cof(it) === 'Error';\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuZXJyb3IuaXMtZXJyb3IuanM/NDI3NiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLFVBQVUsbUJBQU8sQ0FBQyxFQUFROztBQUUxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMzAwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXRodWIuY29tL2xqaGFyYi9wcm9wb3NhbC1pcy1lcnJvclxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdFcnJvcicsIHtcbiAgaXNFcnJvcjogZnVuY3Rpb24gaXNFcnJvcihpdCkge1xuICAgIHJldHVybiBjb2YoaXQpID09PSAnRXJyb3InO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///300\n")},function(module,exports,__webpack_require__){eval("// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', {\n clamp: function clamp(x, lower, upper) {\n return Math.min(upper, Math.max(lower, x));\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5jbGFtcC5qcz8wOWUwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIzMDEuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBodHRwczovL3J3YWxkcm9uLmdpdGh1Yi5pby9wcm9wb3NhbC1tYXRoLWV4dGVuc2lvbnMvXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGNsYW1wOiBmdW5jdGlvbiBjbGFtcCh4LCBsb3dlciwgdXBwZXIpIHtcbiAgICByZXR1cm4gTWF0aC5taW4odXBwZXIsIE1hdGgubWF4KGxvd2VyLCB4KSk7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///301\n")},function(module,exports,__webpack_require__){eval("// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', { DEG_PER_RAD: Math.PI / 180 });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5kZWctcGVyLXJhZC5qcz8wYzAwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDLDRCQUE0Qiw2QkFBNkIiLCJmaWxlIjoiMzAyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9yd2FsZHJvbi5naXRodWIuaW8vcHJvcG9zYWwtbWF0aC1leHRlbnNpb25zL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywgeyBERUdfUEVSX1JBRDogTWF0aC5QSSAvIDE4MCB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///302\n")},function(module,exports,__webpack_require__){eval("// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = __webpack_require__(0);\nvar RAD_PER_DEG = 180 / Math.PI;\n\n$export($export.S, 'Math', {\n degrees: function degrees(radians) {\n return radians * RAD_PER_DEG;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5kZWdyZWVzLmpzPzI3NDgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMzAzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9yd2FsZHJvbi5naXRodWIuaW8vcHJvcG9zYWwtbWF0aC1leHRlbnNpb25zL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBSQURfUEVSX0RFRyA9IDE4MCAvIE1hdGguUEk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgZGVncmVlczogZnVuY3Rpb24gZGVncmVlcyhyYWRpYW5zKSB7XG4gICAgcmV0dXJuIHJhZGlhbnMgKiBSQURfUEVSX0RFRztcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///303\n")},function(module,exports,__webpack_require__){eval("// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = __webpack_require__(0);\nvar scale = __webpack_require__(129);\nvar fround = __webpack_require__(108);\n\n$export($export.S, 'Math', {\n fscale: function fscale(x, inLow, inHigh, outLow, outHigh) {\n return fround(scale(x, inLow, inHigh, outLow, outHigh));\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5mc2NhbGUuanM/MWY5MSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLFlBQVksbUJBQU8sQ0FBQyxHQUFlO0FBQ25DLGFBQWEsbUJBQU8sQ0FBQyxHQUFnQjs7QUFFckM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjMwNC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vcndhbGRyb24uZ2l0aHViLmlvL3Byb3Bvc2FsLW1hdGgtZXh0ZW5zaW9ucy9cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgc2NhbGUgPSByZXF1aXJlKCcuL19tYXRoLXNjYWxlJyk7XG52YXIgZnJvdW5kID0gcmVxdWlyZSgnLi9fbWF0aC1mcm91bmQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBmc2NhbGU6IGZ1bmN0aW9uIGZzY2FsZSh4LCBpbkxvdywgaW5IaWdoLCBvdXRMb3csIG91dEhpZ2gpIHtcbiAgICByZXR1cm4gZnJvdW5kKHNjYWxlKHgsIGluTG93LCBpbkhpZ2gsIG91dExvdywgb3V0SGlnaCkpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///304\n")},function(module,exports,__webpack_require__){eval("// https://gist.github.com/BrendanEich/4294d5c212a6d2254703\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', {\n iaddh: function iaddh(x0, x1, y0, y1) {\n var $x0 = x0 >>> 0;\n var $x1 = x1 >>> 0;\n var $y0 = y0 >>> 0;\n return $x1 + (y1 >>> 0) + (($x0 & $y0 | ($x0 | $y0) & ~($x0 + $y0 >>> 0)) >>> 31) | 0;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5pYWRkaC5qcz85YzAwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIzMDUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9CcmVuZGFuRWljaC80Mjk0ZDVjMjEyYTZkMjI1NDcwM1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBpYWRkaDogZnVuY3Rpb24gaWFkZGgoeDAsIHgxLCB5MCwgeTEpIHtcbiAgICB2YXIgJHgwID0geDAgPj4+IDA7XG4gICAgdmFyICR4MSA9IHgxID4+PiAwO1xuICAgIHZhciAkeTAgPSB5MCA+Pj4gMDtcbiAgICByZXR1cm4gJHgxICsgKHkxID4+PiAwKSArICgoJHgwICYgJHkwIHwgKCR4MCB8ICR5MCkgJiB+KCR4MCArICR5MCA+Pj4gMCkpID4+PiAzMSkgfCAwO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///305\n")},function(module,exports,__webpack_require__){eval("// https://gist.github.com/BrendanEich/4294d5c212a6d2254703\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', {\n isubh: function isubh(x0, x1, y0, y1) {\n var $x0 = x0 >>> 0;\n var $x1 = x1 >>> 0;\n var $y0 = y0 >>> 0;\n return $x1 - (y1 >>> 0) - ((~$x0 & $y0 | ~($x0 ^ $y0) & $x0 - $y0 >>> 0) >>> 31) | 0;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5pc3ViaC5qcz8yZjc4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIzMDYuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9CcmVuZGFuRWljaC80Mjk0ZDVjMjEyYTZkMjI1NDcwM1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBpc3ViaDogZnVuY3Rpb24gaXN1YmgoeDAsIHgxLCB5MCwgeTEpIHtcbiAgICB2YXIgJHgwID0geDAgPj4+IDA7XG4gICAgdmFyICR4MSA9IHgxID4+PiAwO1xuICAgIHZhciAkeTAgPSB5MCA+Pj4gMDtcbiAgICByZXR1cm4gJHgxIC0gKHkxID4+PiAwKSAtICgofiR4MCAmICR5MCB8IH4oJHgwIF4gJHkwKSAmICR4MCAtICR5MCA+Pj4gMCkgPj4+IDMxKSB8IDA7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///306\n")},function(module,exports,__webpack_require__){eval("// https://gist.github.com/BrendanEich/4294d5c212a6d2254703\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', {\n imulh: function imulh(u, v) {\n var UINT16 = 0xffff;\n var $u = +u;\n var $v = +v;\n var u0 = $u & UINT16;\n var v0 = $v & UINT16;\n var u1 = $u >> 16;\n var v1 = $v >> 16;\n var t = (u1 * v0 >>> 0) + (u0 * v0 >>> 16);\n return u1 * v1 + (t >> 16) + ((u0 * v1 >>> 0) + (t & UINT16) >> 16);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5pbXVsaC5qcz9iNGMyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMzA3LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vQnJlbmRhbkVpY2gvNDI5NGQ1YzIxMmE2ZDIyNTQ3MDNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgaW11bGg6IGZ1bmN0aW9uIGltdWxoKHUsIHYpIHtcbiAgICB2YXIgVUlOVDE2ID0gMHhmZmZmO1xuICAgIHZhciAkdSA9ICt1O1xuICAgIHZhciAkdiA9ICt2O1xuICAgIHZhciB1MCA9ICR1ICYgVUlOVDE2O1xuICAgIHZhciB2MCA9ICR2ICYgVUlOVDE2O1xuICAgIHZhciB1MSA9ICR1ID4+IDE2O1xuICAgIHZhciB2MSA9ICR2ID4+IDE2O1xuICAgIHZhciB0ID0gKHUxICogdjAgPj4+IDApICsgKHUwICogdjAgPj4+IDE2KTtcbiAgICByZXR1cm4gdTEgKiB2MSArICh0ID4+IDE2KSArICgodTAgKiB2MSA+Pj4gMCkgKyAodCAmIFVJTlQxNikgPj4gMTYpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///307\n")},function(module,exports,__webpack_require__){eval("// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', { RAD_PER_DEG: 180 / Math.PI });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5yYWQtcGVyLWRlZy5qcz8xZjE4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDLDRCQUE0Qiw2QkFBNkIiLCJmaWxlIjoiMzA4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9yd2FsZHJvbi5naXRodWIuaW8vcHJvcG9zYWwtbWF0aC1leHRlbnNpb25zL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywgeyBSQURfUEVSX0RFRzogMTgwIC8gTWF0aC5QSSB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///308\n")},function(module,exports,__webpack_require__){eval("// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = __webpack_require__(0);\nvar DEG_PER_RAD = Math.PI / 180;\n\n$export($export.S, 'Math', {\n radians: function radians(degrees) {\n return degrees * DEG_PER_RAD;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5yYWRpYW5zLmpzPzY5MmIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMzA5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9yd2FsZHJvbi5naXRodWIuaW8vcHJvcG9zYWwtbWF0aC1leHRlbnNpb25zL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBERUdfUEVSX1JBRCA9IE1hdGguUEkgLyAxODA7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgcmFkaWFuczogZnVuY3Rpb24gcmFkaWFucyhkZWdyZWVzKSB7XG4gICAgcmV0dXJuIGRlZ3JlZXMgKiBERUdfUEVSX1JBRDtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///309\n")},function(module,exports,__webpack_require__){eval("// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', { scale: __webpack_require__(129) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5zY2FsZS5qcz9jNzc1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDLDRCQUE0QixRQUFRLG1CQUFPLENBQUMsR0FBZSxHQUFHIiwiZmlsZSI6IjMxMC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vcndhbGRyb24uZ2l0aHViLmlvL3Byb3Bvc2FsLW1hdGgtZXh0ZW5zaW9ucy9cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHsgc2NhbGU6IHJlcXVpcmUoJy4vX21hdGgtc2NhbGUnKSB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///310\n")},function(module,exports,__webpack_require__){eval("// https://gist.github.com/BrendanEich/4294d5c212a6d2254703\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', {\n umulh: function umulh(u, v) {\n var UINT16 = 0xffff;\n var $u = +u;\n var $v = +v;\n var u0 = $u & UINT16;\n var v0 = $v & UINT16;\n var u1 = $u >>> 16;\n var v1 = $v >>> 16;\n var t = (u1 * v0 >>> 0) + (u0 * v0 >>> 16);\n return u1 * v1 + (t >>> 16) + ((u0 * v1 >>> 0) + (t & UINT16) >>> 16);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC51bXVsaC5qcz84YTVjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMzExLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vQnJlbmRhbkVpY2gvNDI5NGQ1YzIxMmE2ZDIyNTQ3MDNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgdW11bGg6IGZ1bmN0aW9uIHVtdWxoKHUsIHYpIHtcbiAgICB2YXIgVUlOVDE2ID0gMHhmZmZmO1xuICAgIHZhciAkdSA9ICt1O1xuICAgIHZhciAkdiA9ICt2O1xuICAgIHZhciB1MCA9ICR1ICYgVUlOVDE2O1xuICAgIHZhciB2MCA9ICR2ICYgVUlOVDE2O1xuICAgIHZhciB1MSA9ICR1ID4+PiAxNjtcbiAgICB2YXIgdjEgPSAkdiA+Pj4gMTY7XG4gICAgdmFyIHQgPSAodTEgKiB2MCA+Pj4gMCkgKyAodTAgKiB2MCA+Pj4gMTYpO1xuICAgIHJldHVybiB1MSAqIHYxICsgKHQgPj4+IDE2KSArICgodTAgKiB2MSA+Pj4gMCkgKyAodCAmIFVJTlQxNikgPj4+IDE2KTtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///311\n")},function(module,exports,__webpack_require__){eval("// http://jfbastien.github.io/papers/Math.signbit.html\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', { signbit: function signbit(x) {\n // eslint-disable-next-line no-self-compare\n return (x = +x) != x ? x : x == 0 ? 1 / x == Infinity : x > 0;\n} });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5zaWduYml0LmpzP2VkN2UiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVzs7QUFFakMsNEJBQTRCO0FBQzVCO0FBQ0E7QUFDQSxDQUFDLEVBQUUiLCJmaWxlIjoiMzEyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cDovL2pmYmFzdGllbi5naXRodWIuaW8vcGFwZXJzL01hdGguc2lnbmJpdC5odG1sXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7IHNpZ25iaXQ6IGZ1bmN0aW9uIHNpZ25iaXQoeCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gIHJldHVybiAoeCA9ICt4KSAhPSB4ID8geCA6IHggPT0gMCA/IDEgLyB4ID09IEluZmluaXR5IDogeCA+IDA7XG59IH0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///312\n")},function(module,exports,__webpack_require__){"use strict";eval("// https://github.com/tc39/proposal-promise-finally\n\nvar $export = __webpack_require__(0);\nvar core = __webpack_require__(18);\nvar global = __webpack_require__(2);\nvar speciesConstructor = __webpack_require__(51);\nvar promiseResolve = __webpack_require__(116);\n\n$export($export.P + $export.R, 'Promise', { 'finally': function (onFinally) {\n var C = speciesConstructor(this, core.Promise || global.Promise);\n var isFunction = typeof onFinally == 'function';\n return this.then(\n isFunction ? function (x) {\n return promiseResolve(C, onFinally()).then(function () { return x; });\n } : onFinally,\n isFunction ? function (e) {\n return promiseResolve(C, onFinally()).then(function () { throw e; });\n } : onFinally\n );\n} });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucHJvbWlzZS5maW5hbGx5LmpzPzA5N2QiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDYTtBQUNiLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLFdBQVcsbUJBQU8sQ0FBQyxFQUFTO0FBQzVCLGFBQWEsbUJBQU8sQ0FBQyxDQUFXO0FBQ2hDLHlCQUF5QixtQkFBTyxDQUFDLEVBQXdCO0FBQ3pELHFCQUFxQixtQkFBTyxDQUFDLEdBQW9COztBQUVqRCwyQ0FBMkM7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4REFBOEQsVUFBVSxFQUFFO0FBQzFFLEtBQUs7QUFDTDtBQUNBLDhEQUE4RCxTQUFTLEVBQUU7QUFDekUsS0FBSztBQUNMO0FBQ0EsQ0FBQyxFQUFFIiwiZmlsZSI6IjMxMy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXByb21pc2UtZmluYWxseVxuJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4vX3NwZWNpZXMtY29uc3RydWN0b3InKTtcbnZhciBwcm9taXNlUmVzb2x2ZSA9IHJlcXVpcmUoJy4vX3Byb21pc2UtcmVzb2x2ZScpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuUiwgJ1Byb21pc2UnLCB7ICdmaW5hbGx5JzogZnVuY3Rpb24gKG9uRmluYWxseSkge1xuICB2YXIgQyA9IHNwZWNpZXNDb25zdHJ1Y3Rvcih0aGlzLCBjb3JlLlByb21pc2UgfHwgZ2xvYmFsLlByb21pc2UpO1xuICB2YXIgaXNGdW5jdGlvbiA9IHR5cGVvZiBvbkZpbmFsbHkgPT0gJ2Z1bmN0aW9uJztcbiAgcmV0dXJuIHRoaXMudGhlbihcbiAgICBpc0Z1bmN0aW9uID8gZnVuY3Rpb24gKHgpIHtcbiAgICAgIHJldHVybiBwcm9taXNlUmVzb2x2ZShDLCBvbkZpbmFsbHkoKSkudGhlbihmdW5jdGlvbiAoKSB7IHJldHVybiB4OyB9KTtcbiAgICB9IDogb25GaW5hbGx5LFxuICAgIGlzRnVuY3Rpb24gPyBmdW5jdGlvbiAoZSkge1xuICAgICAgcmV0dXJuIHByb21pc2VSZXNvbHZlKEMsIG9uRmluYWxseSgpKS50aGVuKGZ1bmN0aW9uICgpIHsgdGhyb3cgZTsgfSk7XG4gICAgfSA6IG9uRmluYWxseVxuICApO1xufSB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///313\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// https://github.com/tc39/proposal-promise-try\nvar $export = __webpack_require__(0);\nvar newPromiseCapability = __webpack_require__(91);\nvar perform = __webpack_require__(115);\n\n$export($export.S, 'Promise', { 'try': function (callbackfn) {\n var promiseCapability = newPromiseCapability.f(this);\n var result = perform(callbackfn);\n (result.e ? promiseCapability.reject : promiseCapability.resolve)(result.v);\n return promiseCapability.promise;\n} });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucHJvbWlzZS50cnkuanM/YTljYyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsMkJBQTJCLG1CQUFPLENBQUMsRUFBMkI7QUFDOUQsY0FBYyxtQkFBTyxDQUFDLEdBQVk7O0FBRWxDLCtCQUErQjtBQUMvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsRUFBRSIsImZpbGUiOiIzMTQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1wcm9taXNlLXRyeVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IHJlcXVpcmUoJy4vX25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcbnZhciBwZXJmb3JtID0gcmVxdWlyZSgnLi9fcGVyZm9ybScpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1Byb21pc2UnLCB7ICd0cnknOiBmdW5jdGlvbiAoY2FsbGJhY2tmbikge1xuICB2YXIgcHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eS5mKHRoaXMpO1xuICB2YXIgcmVzdWx0ID0gcGVyZm9ybShjYWxsYmFja2ZuKTtcbiAgKHJlc3VsdC5lID8gcHJvbWlzZUNhcGFiaWxpdHkucmVqZWN0IDogcHJvbWlzZUNhcGFiaWxpdHkucmVzb2x2ZSkocmVzdWx0LnYpO1xuICByZXR1cm4gcHJvbWlzZUNhcGFiaWxpdHkucHJvbWlzZTtcbn0gfSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///314\n")},function(module,exports,__webpack_require__){eval("var metadata = __webpack_require__(28);\nvar anObject = __webpack_require__(1);\nvar toMetaKey = metadata.key;\nvar ordinaryDefineOwnMetadata = metadata.set;\n\nmetadata.exp({ defineMetadata: function defineMetadata(metadataKey, metadataValue, target, targetKey) {\n ordinaryDefineOwnMetadata(metadataKey, metadataValue, anObject(target), toMetaKey(targetKey));\n} });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5kZWZpbmUtbWV0YWRhdGEuanM/ZTNkMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxlQUFlLG1CQUFPLENBQUMsRUFBYTtBQUNwQyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQztBQUNBOztBQUVBLGNBQWM7QUFDZDtBQUNBLENBQUMsRUFBRSIsImZpbGUiOiIzMTUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgbWV0YWRhdGEgPSByZXF1aXJlKCcuL19tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgdG9NZXRhS2V5ID0gbWV0YWRhdGEua2V5O1xudmFyIG9yZGluYXJ5RGVmaW5lT3duTWV0YWRhdGEgPSBtZXRhZGF0YS5zZXQ7XG5cbm1ldGFkYXRhLmV4cCh7IGRlZmluZU1ldGFkYXRhOiBmdW5jdGlvbiBkZWZpbmVNZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSwgdGFyZ2V0LCB0YXJnZXRLZXkpIHtcbiAgb3JkaW5hcnlEZWZpbmVPd25NZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSwgYW5PYmplY3QodGFyZ2V0KSwgdG9NZXRhS2V5KHRhcmdldEtleSkpO1xufSB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///315\n")},function(module,exports,__webpack_require__){eval("var metadata = __webpack_require__(28);\nvar anObject = __webpack_require__(1);\nvar toMetaKey = metadata.key;\nvar getOrCreateMetadataMap = metadata.map;\nvar store = metadata.store;\n\nmetadata.exp({ deleteMetadata: function deleteMetadata(metadataKey, target /* , targetKey */) {\n var targetKey = arguments.length < 3 ? undefined : toMetaKey(arguments[2]);\n var metadataMap = getOrCreateMetadataMap(anObject(target), targetKey, false);\n if (metadataMap === undefined || !metadataMap['delete'](metadataKey)) return false;\n if (metadataMap.size) return true;\n var targetMetadata = store.get(target);\n targetMetadata['delete'](targetKey);\n return !!targetMetadata.size || store['delete'](target);\n} });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5kZWxldGUtbWV0YWRhdGEuanM/Y2VhZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxlQUFlLG1CQUFPLENBQUMsRUFBYTtBQUNwQyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQztBQUNBO0FBQ0E7O0FBRUEsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxFQUFFIiwiZmlsZSI6IjMxNi5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBtZXRhZGF0YSA9IHJlcXVpcmUoJy4vX21ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciB0b01ldGFLZXkgPSBtZXRhZGF0YS5rZXk7XG52YXIgZ2V0T3JDcmVhdGVNZXRhZGF0YU1hcCA9IG1ldGFkYXRhLm1hcDtcbnZhciBzdG9yZSA9IG1ldGFkYXRhLnN0b3JlO1xuXG5tZXRhZGF0YS5leHAoeyBkZWxldGVNZXRhZGF0YTogZnVuY3Rpb24gZGVsZXRlTWV0YWRhdGEobWV0YWRhdGFLZXksIHRhcmdldCAvKiAsIHRhcmdldEtleSAqLykge1xuICB2YXIgdGFyZ2V0S2V5ID0gYXJndW1lbnRzLmxlbmd0aCA8IDMgPyB1bmRlZmluZWQgOiB0b01ldGFLZXkoYXJndW1lbnRzWzJdKTtcbiAgdmFyIG1ldGFkYXRhTWFwID0gZ2V0T3JDcmVhdGVNZXRhZGF0YU1hcChhbk9iamVjdCh0YXJnZXQpLCB0YXJnZXRLZXksIGZhbHNlKTtcbiAgaWYgKG1ldGFkYXRhTWFwID09PSB1bmRlZmluZWQgfHwgIW1ldGFkYXRhTWFwWydkZWxldGUnXShtZXRhZGF0YUtleSkpIHJldHVybiBmYWxzZTtcbiAgaWYgKG1ldGFkYXRhTWFwLnNpemUpIHJldHVybiB0cnVlO1xuICB2YXIgdGFyZ2V0TWV0YWRhdGEgPSBzdG9yZS5nZXQodGFyZ2V0KTtcbiAgdGFyZ2V0TWV0YWRhdGFbJ2RlbGV0ZSddKHRhcmdldEtleSk7XG4gIHJldHVybiAhIXRhcmdldE1ldGFkYXRhLnNpemUgfHwgc3RvcmVbJ2RlbGV0ZSddKHRhcmdldCk7XG59IH0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///316\n")},function(module,exports,__webpack_require__){eval("var metadata = __webpack_require__(28);\nvar anObject = __webpack_require__(1);\nvar getPrototypeOf = __webpack_require__(17);\nvar ordinaryHasOwnMetadata = metadata.has;\nvar ordinaryGetOwnMetadata = metadata.get;\nvar toMetaKey = metadata.key;\n\nvar ordinaryGetMetadata = function (MetadataKey, O, P) {\n var hasOwn = ordinaryHasOwnMetadata(MetadataKey, O, P);\n if (hasOwn) return ordinaryGetOwnMetadata(MetadataKey, O, P);\n var parent = getPrototypeOf(O);\n return parent !== null ? ordinaryGetMetadata(MetadataKey, parent, P) : undefined;\n};\n\nmetadata.exp({ getMetadata: function getMetadata(metadataKey, target /* , targetKey */) {\n return ordinaryGetMetadata(metadataKey, anObject(target), arguments.length < 3 ? undefined : toMetaKey(arguments[2]));\n} });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtbWV0YWRhdGEuanM/ZTM5NCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxlQUFlLG1CQUFPLENBQUMsRUFBYTtBQUNwQyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxxQkFBcUIsbUJBQU8sQ0FBQyxFQUFlO0FBQzVDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsY0FBYztBQUNkO0FBQ0EsQ0FBQyxFQUFFIiwiZmlsZSI6IjMxNy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBtZXRhZGF0YSA9IHJlcXVpcmUoJy4vX21ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBvcmRpbmFyeUhhc093bk1ldGFkYXRhID0gbWV0YWRhdGEuaGFzO1xudmFyIG9yZGluYXJ5R2V0T3duTWV0YWRhdGEgPSBtZXRhZGF0YS5nZXQ7XG52YXIgdG9NZXRhS2V5ID0gbWV0YWRhdGEua2V5O1xuXG52YXIgb3JkaW5hcnlHZXRNZXRhZGF0YSA9IGZ1bmN0aW9uIChNZXRhZGF0YUtleSwgTywgUCkge1xuICB2YXIgaGFzT3duID0gb3JkaW5hcnlIYXNPd25NZXRhZGF0YShNZXRhZGF0YUtleSwgTywgUCk7XG4gIGlmIChoYXNPd24pIHJldHVybiBvcmRpbmFyeUdldE93bk1ldGFkYXRhKE1ldGFkYXRhS2V5LCBPLCBQKTtcbiAgdmFyIHBhcmVudCA9IGdldFByb3RvdHlwZU9mKE8pO1xuICByZXR1cm4gcGFyZW50ICE9PSBudWxsID8gb3JkaW5hcnlHZXRNZXRhZGF0YShNZXRhZGF0YUtleSwgcGFyZW50LCBQKSA6IHVuZGVmaW5lZDtcbn07XG5cbm1ldGFkYXRhLmV4cCh7IGdldE1ldGFkYXRhOiBmdW5jdGlvbiBnZXRNZXRhZGF0YShtZXRhZGF0YUtleSwgdGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gIHJldHVybiBvcmRpbmFyeUdldE1ldGFkYXRhKG1ldGFkYXRhS2V5LCBhbk9iamVjdCh0YXJnZXQpLCBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHVuZGVmaW5lZCA6IHRvTWV0YUtleShhcmd1bWVudHNbMl0pKTtcbn0gfSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///317\n")},function(module,exports,__webpack_require__){eval("var Set = __webpack_require__(119);\nvar from = __webpack_require__(128);\nvar metadata = __webpack_require__(28);\nvar anObject = __webpack_require__(1);\nvar getPrototypeOf = __webpack_require__(17);\nvar ordinaryOwnMetadataKeys = metadata.keys;\nvar toMetaKey = metadata.key;\n\nvar ordinaryMetadataKeys = function (O, P) {\n var oKeys = ordinaryOwnMetadataKeys(O, P);\n var parent = getPrototypeOf(O);\n if (parent === null) return oKeys;\n var pKeys = ordinaryMetadataKeys(parent, P);\n return pKeys.length ? oKeys.length ? from(new Set(oKeys.concat(pKeys))) : pKeys : oKeys;\n};\n\nmetadata.exp({ getMetadataKeys: function getMetadataKeys(target /* , targetKey */) {\n return ordinaryMetadataKeys(anObject(target), arguments.length < 2 ? undefined : toMetaKey(arguments[1]));\n} });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtbWV0YWRhdGEta2V5cy5qcz9iODBiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFVBQVUsbUJBQU8sQ0FBQyxHQUFXO0FBQzdCLFdBQVcsbUJBQU8sQ0FBQyxHQUF3QjtBQUMzQyxlQUFlLG1CQUFPLENBQUMsRUFBYTtBQUNwQyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxxQkFBcUIsbUJBQU8sQ0FBQyxFQUFlO0FBQzVDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsY0FBYztBQUNkO0FBQ0EsQ0FBQyxFQUFFIiwiZmlsZSI6IjMxOC5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBTZXQgPSByZXF1aXJlKCcuL2VzNi5zZXQnKTtcbnZhciBmcm9tID0gcmVxdWlyZSgnLi9fYXJyYXktZnJvbS1pdGVyYWJsZScpO1xudmFyIG1ldGFkYXRhID0gcmVxdWlyZSgnLi9fbWV0YWRhdGEnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIG9yZGluYXJ5T3duTWV0YWRhdGFLZXlzID0gbWV0YWRhdGEua2V5cztcbnZhciB0b01ldGFLZXkgPSBtZXRhZGF0YS5rZXk7XG5cbnZhciBvcmRpbmFyeU1ldGFkYXRhS2V5cyA9IGZ1bmN0aW9uIChPLCBQKSB7XG4gIHZhciBvS2V5cyA9IG9yZGluYXJ5T3duTWV0YWRhdGFLZXlzKE8sIFApO1xuICB2YXIgcGFyZW50ID0gZ2V0UHJvdG90eXBlT2YoTyk7XG4gIGlmIChwYXJlbnQgPT09IG51bGwpIHJldHVybiBvS2V5cztcbiAgdmFyIHBLZXlzID0gb3JkaW5hcnlNZXRhZGF0YUtleXMocGFyZW50LCBQKTtcbiAgcmV0dXJuIHBLZXlzLmxlbmd0aCA/IG9LZXlzLmxlbmd0aCA/IGZyb20obmV3IFNldChvS2V5cy5jb25jYXQocEtleXMpKSkgOiBwS2V5cyA6IG9LZXlzO1xufTtcblxubWV0YWRhdGEuZXhwKHsgZ2V0TWV0YWRhdGFLZXlzOiBmdW5jdGlvbiBnZXRNZXRhZGF0YUtleXModGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gIHJldHVybiBvcmRpbmFyeU1ldGFkYXRhS2V5cyhhbk9iamVjdCh0YXJnZXQpLCBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IHVuZGVmaW5lZCA6IHRvTWV0YUtleShhcmd1bWVudHNbMV0pKTtcbn0gfSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///318\n")},function(module,exports,__webpack_require__){eval("var metadata = __webpack_require__(28);\nvar anObject = __webpack_require__(1);\nvar ordinaryGetOwnMetadata = metadata.get;\nvar toMetaKey = metadata.key;\n\nmetadata.exp({ getOwnMetadata: function getOwnMetadata(metadataKey, target /* , targetKey */) {\n return ordinaryGetOwnMetadata(metadataKey, anObject(target)\n , arguments.length < 3 ? undefined : toMetaKey(arguments[2]));\n} });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtb3duLW1ldGFkYXRhLmpzPzA2YTciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxtQkFBTyxDQUFDLEVBQWE7QUFDcEMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckM7QUFDQTs7QUFFQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBLENBQUMsRUFBRSIsImZpbGUiOiIzMTkuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgbWV0YWRhdGEgPSByZXF1aXJlKCcuL19tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgb3JkaW5hcnlHZXRPd25NZXRhZGF0YSA9IG1ldGFkYXRhLmdldDtcbnZhciB0b01ldGFLZXkgPSBtZXRhZGF0YS5rZXk7XG5cbm1ldGFkYXRhLmV4cCh7IGdldE93bk1ldGFkYXRhOiBmdW5jdGlvbiBnZXRPd25NZXRhZGF0YShtZXRhZGF0YUtleSwgdGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gIHJldHVybiBvcmRpbmFyeUdldE93bk1ldGFkYXRhKG1ldGFkYXRhS2V5LCBhbk9iamVjdCh0YXJnZXQpXG4gICAgLCBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHVuZGVmaW5lZCA6IHRvTWV0YUtleShhcmd1bWVudHNbMl0pKTtcbn0gfSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///319\n")},function(module,exports,__webpack_require__){eval("var metadata = __webpack_require__(28);\nvar anObject = __webpack_require__(1);\nvar ordinaryOwnMetadataKeys = metadata.keys;\nvar toMetaKey = metadata.key;\n\nmetadata.exp({ getOwnMetadataKeys: function getOwnMetadataKeys(target /* , targetKey */) {\n return ordinaryOwnMetadataKeys(anObject(target), arguments.length < 2 ? undefined : toMetaKey(arguments[1]));\n} });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtb3duLW1ldGFkYXRhLWtleXMuanM/N2NkZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxlQUFlLG1CQUFPLENBQUMsRUFBYTtBQUNwQyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQztBQUNBOztBQUVBLGNBQWM7QUFDZDtBQUNBLENBQUMsRUFBRSIsImZpbGUiOiIzMjAuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgbWV0YWRhdGEgPSByZXF1aXJlKCcuL19tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgb3JkaW5hcnlPd25NZXRhZGF0YUtleXMgPSBtZXRhZGF0YS5rZXlzO1xudmFyIHRvTWV0YUtleSA9IG1ldGFkYXRhLmtleTtcblxubWV0YWRhdGEuZXhwKHsgZ2V0T3duTWV0YWRhdGFLZXlzOiBmdW5jdGlvbiBnZXRPd25NZXRhZGF0YUtleXModGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gIHJldHVybiBvcmRpbmFyeU93bk1ldGFkYXRhS2V5cyhhbk9iamVjdCh0YXJnZXQpLCBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IHVuZGVmaW5lZCA6IHRvTWV0YUtleShhcmd1bWVudHNbMV0pKTtcbn0gfSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///320\n")},function(module,exports,__webpack_require__){eval("var metadata = __webpack_require__(28);\nvar anObject = __webpack_require__(1);\nvar getPrototypeOf = __webpack_require__(17);\nvar ordinaryHasOwnMetadata = metadata.has;\nvar toMetaKey = metadata.key;\n\nvar ordinaryHasMetadata = function (MetadataKey, O, P) {\n var hasOwn = ordinaryHasOwnMetadata(MetadataKey, O, P);\n if (hasOwn) return true;\n var parent = getPrototypeOf(O);\n return parent !== null ? ordinaryHasMetadata(MetadataKey, parent, P) : false;\n};\n\nmetadata.exp({ hasMetadata: function hasMetadata(metadataKey, target /* , targetKey */) {\n return ordinaryHasMetadata(metadataKey, anObject(target), arguments.length < 3 ? undefined : toMetaKey(arguments[2]));\n} });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5oYXMtbWV0YWRhdGEuanM/ODk2ZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxlQUFlLG1CQUFPLENBQUMsRUFBYTtBQUNwQyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxxQkFBcUIsbUJBQU8sQ0FBQyxFQUFlO0FBQzVDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGNBQWM7QUFDZDtBQUNBLENBQUMsRUFBRSIsImZpbGUiOiIzMjEuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgbWV0YWRhdGEgPSByZXF1aXJlKCcuL19tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgb3JkaW5hcnlIYXNPd25NZXRhZGF0YSA9IG1ldGFkYXRhLmhhcztcbnZhciB0b01ldGFLZXkgPSBtZXRhZGF0YS5rZXk7XG5cbnZhciBvcmRpbmFyeUhhc01ldGFkYXRhID0gZnVuY3Rpb24gKE1ldGFkYXRhS2V5LCBPLCBQKSB7XG4gIHZhciBoYXNPd24gPSBvcmRpbmFyeUhhc093bk1ldGFkYXRhKE1ldGFkYXRhS2V5LCBPLCBQKTtcbiAgaWYgKGhhc093bikgcmV0dXJuIHRydWU7XG4gIHZhciBwYXJlbnQgPSBnZXRQcm90b3R5cGVPZihPKTtcbiAgcmV0dXJuIHBhcmVudCAhPT0gbnVsbCA/IG9yZGluYXJ5SGFzTWV0YWRhdGEoTWV0YWRhdGFLZXksIHBhcmVudCwgUCkgOiBmYWxzZTtcbn07XG5cbm1ldGFkYXRhLmV4cCh7IGhhc01ldGFkYXRhOiBmdW5jdGlvbiBoYXNNZXRhZGF0YShtZXRhZGF0YUtleSwgdGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gIHJldHVybiBvcmRpbmFyeUhhc01ldGFkYXRhKG1ldGFkYXRhS2V5LCBhbk9iamVjdCh0YXJnZXQpLCBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHVuZGVmaW5lZCA6IHRvTWV0YUtleShhcmd1bWVudHNbMl0pKTtcbn0gfSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///321\n")},function(module,exports,__webpack_require__){eval("var metadata = __webpack_require__(28);\nvar anObject = __webpack_require__(1);\nvar ordinaryHasOwnMetadata = metadata.has;\nvar toMetaKey = metadata.key;\n\nmetadata.exp({ hasOwnMetadata: function hasOwnMetadata(metadataKey, target /* , targetKey */) {\n return ordinaryHasOwnMetadata(metadataKey, anObject(target)\n , arguments.length < 3 ? undefined : toMetaKey(arguments[2]));\n} });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5oYXMtb3duLW1ldGFkYXRhLmpzP2VjMzkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxtQkFBTyxDQUFDLEVBQWE7QUFDcEMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckM7QUFDQTs7QUFFQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBLENBQUMsRUFBRSIsImZpbGUiOiIzMjIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgbWV0YWRhdGEgPSByZXF1aXJlKCcuL19tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgb3JkaW5hcnlIYXNPd25NZXRhZGF0YSA9IG1ldGFkYXRhLmhhcztcbnZhciB0b01ldGFLZXkgPSBtZXRhZGF0YS5rZXk7XG5cbm1ldGFkYXRhLmV4cCh7IGhhc093bk1ldGFkYXRhOiBmdW5jdGlvbiBoYXNPd25NZXRhZGF0YShtZXRhZGF0YUtleSwgdGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gIHJldHVybiBvcmRpbmFyeUhhc093bk1ldGFkYXRhKG1ldGFkYXRhS2V5LCBhbk9iamVjdCh0YXJnZXQpXG4gICAgLCBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHVuZGVmaW5lZCA6IHRvTWV0YUtleShhcmd1bWVudHNbMl0pKTtcbn0gfSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///322\n")},function(module,exports,__webpack_require__){eval("var $metadata = __webpack_require__(28);\nvar anObject = __webpack_require__(1);\nvar aFunction = __webpack_require__(10);\nvar toMetaKey = $metadata.key;\nvar ordinaryDefineOwnMetadata = $metadata.set;\n\n$metadata.exp({ metadata: function metadata(metadataKey, metadataValue) {\n return function decorator(target, targetKey) {\n ordinaryDefineOwnMetadata(\n metadataKey, metadataValue,\n (targetKey !== undefined ? anObject : aFunction)(target),\n toMetaKey(targetKey)\n );\n };\n} });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5tZXRhZGF0YS5qcz8zYTljIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGdCQUFnQixtQkFBTyxDQUFDLEVBQWE7QUFDckMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2QztBQUNBOztBQUVBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsRUFBRSIsImZpbGUiOiIzMjMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgJG1ldGFkYXRhID0gcmVxdWlyZSgnLi9fbWV0YWRhdGEnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciB0b01ldGFLZXkgPSAkbWV0YWRhdGEua2V5O1xudmFyIG9yZGluYXJ5RGVmaW5lT3duTWV0YWRhdGEgPSAkbWV0YWRhdGEuc2V0O1xuXG4kbWV0YWRhdGEuZXhwKHsgbWV0YWRhdGE6IGZ1bmN0aW9uIG1ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbiBkZWNvcmF0b3IodGFyZ2V0LCB0YXJnZXRLZXkpIHtcbiAgICBvcmRpbmFyeURlZmluZU93bk1ldGFkYXRhKFxuICAgICAgbWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUsXG4gICAgICAodGFyZ2V0S2V5ICE9PSB1bmRlZmluZWQgPyBhbk9iamVjdCA6IGFGdW5jdGlvbikodGFyZ2V0KSxcbiAgICAgIHRvTWV0YUtleSh0YXJnZXRLZXkpXG4gICAgKTtcbiAgfTtcbn0gfSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///323\n")},function(module,exports,__webpack_require__){eval("// https://github.com/rwaldron/tc39-notes/blob/master/es6/2014-09/sept-25.md#510-globalasap-for-enqueuing-a-microtask\nvar $export = __webpack_require__(0);\nvar microtask = __webpack_require__(90)();\nvar process = __webpack_require__(2).process;\nvar isNode = __webpack_require__(20)(process) == 'process';\n\n$export($export.G, {\n asap: function asap(fn) {\n var domain = isNode && process.domain;\n microtask(domain ? domain.bind(fn) : fn);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuYXNhcC5qcz8wZDI1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBYztBQUN0QyxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxhQUFhLG1CQUFPLENBQUMsRUFBUTs7QUFFN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMzI0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXRodWIuY29tL3J3YWxkcm9uL3RjMzktbm90ZXMvYmxvYi9tYXN0ZXIvZXM2LzIwMTQtMDkvc2VwdC0yNS5tZCM1MTAtZ2xvYmFsYXNhcC1mb3ItZW5xdWV1aW5nLWEtbWljcm90YXNrXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIG1pY3JvdGFzayA9IHJlcXVpcmUoJy4vX21pY3JvdGFzaycpKCk7XG52YXIgcHJvY2VzcyA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLnByb2Nlc3M7XG52YXIgaXNOb2RlID0gcmVxdWlyZSgnLi9fY29mJykocHJvY2VzcykgPT0gJ3Byb2Nlc3MnO1xuXG4kZXhwb3J0KCRleHBvcnQuRywge1xuICBhc2FwOiBmdW5jdGlvbiBhc2FwKGZuKSB7XG4gICAgdmFyIGRvbWFpbiA9IGlzTm9kZSAmJiBwcm9jZXNzLmRvbWFpbjtcbiAgICBtaWNyb3Rhc2soZG9tYWluID8gZG9tYWluLmJpbmQoZm4pIDogZm4pO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///324\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// https://github.com/zenparsing/es-observable\nvar $export = __webpack_require__(0);\nvar global = __webpack_require__(2);\nvar core = __webpack_require__(18);\nvar microtask = __webpack_require__(90)();\nvar OBSERVABLE = __webpack_require__(5)('observable');\nvar aFunction = __webpack_require__(10);\nvar anObject = __webpack_require__(1);\nvar anInstance = __webpack_require__(39);\nvar redefineAll = __webpack_require__(41);\nvar hide = __webpack_require__(11);\nvar forOf = __webpack_require__(40);\nvar RETURN = forOf.RETURN;\n\nvar getMethod = function (fn) {\n return fn == null ? undefined : aFunction(fn);\n};\n\nvar cleanupSubscription = function (subscription) {\n var cleanup = subscription._c;\n if (cleanup) {\n subscription._c = undefined;\n cleanup();\n }\n};\n\nvar subscriptionClosed = function (subscription) {\n return subscription._o === undefined;\n};\n\nvar closeSubscription = function (subscription) {\n if (!subscriptionClosed(subscription)) {\n subscription._o = undefined;\n cleanupSubscription(subscription);\n }\n};\n\nvar Subscription = function (observer, subscriber) {\n anObject(observer);\n this._c = undefined;\n this._o = observer;\n observer = new SubscriptionObserver(this);\n try {\n var cleanup = subscriber(observer);\n var subscription = cleanup;\n if (cleanup != null) {\n if (typeof cleanup.unsubscribe === 'function') cleanup = function () { subscription.unsubscribe(); };\n else aFunction(cleanup);\n this._c = cleanup;\n }\n } catch (e) {\n observer.error(e);\n return;\n } if (subscriptionClosed(this)) cleanupSubscription(this);\n};\n\nSubscription.prototype = redefineAll({}, {\n unsubscribe: function unsubscribe() { closeSubscription(this); }\n});\n\nvar SubscriptionObserver = function (subscription) {\n this._s = subscription;\n};\n\nSubscriptionObserver.prototype = redefineAll({}, {\n next: function next(value) {\n var subscription = this._s;\n if (!subscriptionClosed(subscription)) {\n var observer = subscription._o;\n try {\n var m = getMethod(observer.next);\n if (m) return m.call(observer, value);\n } catch (e) {\n try {\n closeSubscription(subscription);\n } finally {\n throw e;\n }\n }\n }\n },\n error: function error(value) {\n var subscription = this._s;\n if (subscriptionClosed(subscription)) throw value;\n var observer = subscription._o;\n subscription._o = undefined;\n try {\n var m = getMethod(observer.error);\n if (!m) throw value;\n value = m.call(observer, value);\n } catch (e) {\n try {\n cleanupSubscription(subscription);\n } finally {\n throw e;\n }\n } cleanupSubscription(subscription);\n return value;\n },\n complete: function complete(value) {\n var subscription = this._s;\n if (!subscriptionClosed(subscription)) {\n var observer = subscription._o;\n subscription._o = undefined;\n try {\n var m = getMethod(observer.complete);\n value = m ? m.call(observer, value) : undefined;\n } catch (e) {\n try {\n cleanupSubscription(subscription);\n } finally {\n throw e;\n }\n } cleanupSubscription(subscription);\n return value;\n }\n }\n});\n\nvar $Observable = function Observable(subscriber) {\n anInstance(this, $Observable, 'Observable', '_f')._f = aFunction(subscriber);\n};\n\nredefineAll($Observable.prototype, {\n subscribe: function subscribe(observer) {\n return new Subscription(observer, this._f);\n },\n forEach: function forEach(fn) {\n var that = this;\n return new (core.Promise || global.Promise)(function (resolve, reject) {\n aFunction(fn);\n var subscription = that.subscribe({\n next: function (value) {\n try {\n return fn(value);\n } catch (e) {\n reject(e);\n subscription.unsubscribe();\n }\n },\n error: reject,\n complete: resolve\n });\n });\n }\n});\n\nredefineAll($Observable, {\n from: function from(x) {\n var C = typeof this === 'function' ? this : $Observable;\n var method = getMethod(anObject(x)[OBSERVABLE]);\n if (method) {\n var observable = anObject(method.call(x));\n return observable.constructor === C ? observable : new C(function (observer) {\n return observable.subscribe(observer);\n });\n }\n return new C(function (observer) {\n var done = false;\n microtask(function () {\n if (!done) {\n try {\n if (forOf(x, false, function (it) {\n observer.next(it);\n if (done) return RETURN;\n }) === RETURN) return;\n } catch (e) {\n if (done) throw e;\n observer.error(e);\n return;\n } observer.complete();\n }\n });\n return function () { done = true; };\n });\n },\n of: function of() {\n for (var i = 0, l = arguments.length, items = new Array(l); i < l;) items[i] = arguments[i++];\n return new (typeof this === 'function' ? this : $Observable)(function (observer) {\n var done = false;\n microtask(function () {\n if (!done) {\n for (var j = 0; j < items.length; ++j) {\n observer.next(items[j]);\n if (done) return;\n } observer.complete();\n }\n });\n return function () { done = true; };\n });\n }\n});\n\nhide($Observable.prototype, OBSERVABLE, function () { return this; });\n\n$export($export.G, { Observable: $Observable });\n\n__webpack_require__(38)('Observable');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JzZXJ2YWJsZS5qcz8zN2I1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxhQUFhLG1CQUFPLENBQUMsQ0FBVztBQUNoQyxXQUFXLG1CQUFPLENBQUMsRUFBUztBQUM1QixnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFjO0FBQ3RDLGlCQUFpQixtQkFBTyxDQUFDLENBQVE7QUFDakMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2QyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxpQkFBaUIsbUJBQU8sQ0FBQyxFQUFnQjtBQUN6QyxrQkFBa0IsbUJBQU8sQ0FBQyxFQUFpQjtBQUMzQyxXQUFXLG1CQUFPLENBQUMsRUFBUztBQUM1QixZQUFZLG1CQUFPLENBQUMsRUFBVztBQUMvQjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0RUFBNEUsNEJBQTRCO0FBQ3hHO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBLHVDQUF1QztBQUN2Qyx1Q0FBdUMseUJBQXlCO0FBQ2hFLENBQUM7O0FBRUQ7QUFDQTtBQUNBOztBQUVBLCtDQUErQztBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYixXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0EsT0FBTztBQUNQLDBCQUEwQixhQUFhO0FBQ3ZDLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQSwrREFBK0QsT0FBTztBQUN0RTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QixrQkFBa0I7QUFDM0M7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBLE9BQU87QUFDUCwwQkFBMEIsYUFBYTtBQUN2QyxLQUFLO0FBQ0w7QUFDQSxDQUFDOztBQUVELHFEQUFxRCxhQUFhLEVBQUU7O0FBRXBFLG9CQUFvQiwwQkFBMEI7O0FBRTlDLG1CQUFPLENBQUMsRUFBZ0IiLCJmaWxlIjoiMzI1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3plbnBhcnNpbmcvZXMtb2JzZXJ2YWJsZVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIG1pY3JvdGFzayA9IHJlcXVpcmUoJy4vX21pY3JvdGFzaycpKCk7XG52YXIgT0JTRVJWQUJMRSA9IHJlcXVpcmUoJy4vX3drcycpKCdvYnNlcnZhYmxlJyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG52YXIgcmVkZWZpbmVBbGwgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIGZvck9mID0gcmVxdWlyZSgnLi9fZm9yLW9mJyk7XG52YXIgUkVUVVJOID0gZm9yT2YuUkVUVVJOO1xuXG52YXIgZ2V0TWV0aG9kID0gZnVuY3Rpb24gKGZuKSB7XG4gIHJldHVybiBmbiA9PSBudWxsID8gdW5kZWZpbmVkIDogYUZ1bmN0aW9uKGZuKTtcbn07XG5cbnZhciBjbGVhbnVwU3Vic2NyaXB0aW9uID0gZnVuY3Rpb24gKHN1YnNjcmlwdGlvbikge1xuICB2YXIgY2xlYW51cCA9IHN1YnNjcmlwdGlvbi5fYztcbiAgaWYgKGNsZWFudXApIHtcbiAgICBzdWJzY3JpcHRpb24uX2MgPSB1bmRlZmluZWQ7XG4gICAgY2xlYW51cCgpO1xuICB9XG59O1xuXG52YXIgc3Vic2NyaXB0aW9uQ2xvc2VkID0gZnVuY3Rpb24gKHN1YnNjcmlwdGlvbikge1xuICByZXR1cm4gc3Vic2NyaXB0aW9uLl9vID09PSB1bmRlZmluZWQ7XG59O1xuXG52YXIgY2xvc2VTdWJzY3JpcHRpb24gPSBmdW5jdGlvbiAoc3Vic2NyaXB0aW9uKSB7XG4gIGlmICghc3Vic2NyaXB0aW9uQ2xvc2VkKHN1YnNjcmlwdGlvbikpIHtcbiAgICBzdWJzY3JpcHRpb24uX28gPSB1bmRlZmluZWQ7XG4gICAgY2xlYW51cFN1YnNjcmlwdGlvbihzdWJzY3JpcHRpb24pO1xuICB9XG59O1xuXG52YXIgU3Vic2NyaXB0aW9uID0gZnVuY3Rpb24gKG9ic2VydmVyLCBzdWJzY3JpYmVyKSB7XG4gIGFuT2JqZWN0KG9ic2VydmVyKTtcbiAgdGhpcy5fYyA9IHVuZGVmaW5lZDtcbiAgdGhpcy5fbyA9IG9ic2VydmVyO1xuICBvYnNlcnZlciA9IG5ldyBTdWJzY3JpcHRpb25PYnNlcnZlcih0aGlzKTtcbiAgdHJ5IHtcbiAgICB2YXIgY2xlYW51cCA9IHN1YnNjcmliZXIob2JzZXJ2ZXIpO1xuICAgIHZhciBzdWJzY3JpcHRpb24gPSBjbGVhbnVwO1xuICAgIGlmIChjbGVhbnVwICE9IG51bGwpIHtcbiAgICAgIGlmICh0eXBlb2YgY2xlYW51cC51bnN1YnNjcmliZSA9PT0gJ2Z1bmN0aW9uJykgY2xlYW51cCA9IGZ1bmN0aW9uICgpIHsgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7IH07XG4gICAgICBlbHNlIGFGdW5jdGlvbihjbGVhbnVwKTtcbiAgICAgIHRoaXMuX2MgPSBjbGVhbnVwO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIG9ic2VydmVyLmVycm9yKGUpO1xuICAgIHJldHVybjtcbiAgfSBpZiAoc3Vic2NyaXB0aW9uQ2xvc2VkKHRoaXMpKSBjbGVhbnVwU3Vic2NyaXB0aW9uKHRoaXMpO1xufTtcblxuU3Vic2NyaXB0aW9uLnByb3RvdHlwZSA9IHJlZGVmaW5lQWxsKHt9LCB7XG4gIHVuc3Vic2NyaWJlOiBmdW5jdGlvbiB1bnN1YnNjcmliZSgpIHsgY2xvc2VTdWJzY3JpcHRpb24odGhpcyk7IH1cbn0pO1xuXG52YXIgU3Vic2NyaXB0aW9uT2JzZXJ2ZXIgPSBmdW5jdGlvbiAoc3Vic2NyaXB0aW9uKSB7XG4gIHRoaXMuX3MgPSBzdWJzY3JpcHRpb247XG59O1xuXG5TdWJzY3JpcHRpb25PYnNlcnZlci5wcm90b3R5cGUgPSByZWRlZmluZUFsbCh7fSwge1xuICBuZXh0OiBmdW5jdGlvbiBuZXh0KHZhbHVlKSB7XG4gICAgdmFyIHN1YnNjcmlwdGlvbiA9IHRoaXMuX3M7XG4gICAgaWYgKCFzdWJzY3JpcHRpb25DbG9zZWQoc3Vic2NyaXB0aW9uKSkge1xuICAgICAgdmFyIG9ic2VydmVyID0gc3Vic2NyaXB0aW9uLl9vO1xuICAgICAgdHJ5IHtcbiAgICAgICAgdmFyIG0gPSBnZXRNZXRob2Qob2JzZXJ2ZXIubmV4dCk7XG4gICAgICAgIGlmIChtKSByZXR1cm4gbS5jYWxsKG9ic2VydmVyLCB2YWx1ZSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY2xvc2VTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LFxuICBlcnJvcjogZnVuY3Rpb24gZXJyb3IodmFsdWUpIHtcbiAgICB2YXIgc3Vic2NyaXB0aW9uID0gdGhpcy5fcztcbiAgICBpZiAoc3Vic2NyaXB0aW9uQ2xvc2VkKHN1YnNjcmlwdGlvbikpIHRocm93IHZhbHVlO1xuICAgIHZhciBvYnNlcnZlciA9IHN1YnNjcmlwdGlvbi5fbztcbiAgICBzdWJzY3JpcHRpb24uX28gPSB1bmRlZmluZWQ7XG4gICAgdHJ5IHtcbiAgICAgIHZhciBtID0gZ2V0TWV0aG9kKG9ic2VydmVyLmVycm9yKTtcbiAgICAgIGlmICghbSkgdGhyb3cgdmFsdWU7XG4gICAgICB2YWx1ZSA9IG0uY2FsbChvYnNlcnZlciwgdmFsdWUpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNsZWFudXBTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgfSBjbGVhbnVwU3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvbik7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9LFxuICBjb21wbGV0ZTogZnVuY3Rpb24gY29tcGxldGUodmFsdWUpIHtcbiAgICB2YXIgc3Vic2NyaXB0aW9uID0gdGhpcy5fcztcbiAgICBpZiAoIXN1YnNjcmlwdGlvbkNsb3NlZChzdWJzY3JpcHRpb24pKSB7XG4gICAgICB2YXIgb2JzZXJ2ZXIgPSBzdWJzY3JpcHRpb24uX287XG4gICAgICBzdWJzY3JpcHRpb24uX28gPSB1bmRlZmluZWQ7XG4gICAgICB0cnkge1xuICAgICAgICB2YXIgbSA9IGdldE1ldGhvZChvYnNlcnZlci5jb21wbGV0ZSk7XG4gICAgICAgIHZhbHVlID0gbSA/IG0uY2FsbChvYnNlcnZlciwgdmFsdWUpIDogdW5kZWZpbmVkO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNsZWFudXBTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICB9IGNsZWFudXBTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKTtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gIH1cbn0pO1xuXG52YXIgJE9ic2VydmFibGUgPSBmdW5jdGlvbiBPYnNlcnZhYmxlKHN1YnNjcmliZXIpIHtcbiAgYW5JbnN0YW5jZSh0aGlzLCAkT2JzZXJ2YWJsZSwgJ09ic2VydmFibGUnLCAnX2YnKS5fZiA9IGFGdW5jdGlvbihzdWJzY3JpYmVyKTtcbn07XG5cbnJlZGVmaW5lQWxsKCRPYnNlcnZhYmxlLnByb3RvdHlwZSwge1xuICBzdWJzY3JpYmU6IGZ1bmN0aW9uIHN1YnNjcmliZShvYnNlcnZlcikge1xuICAgIHJldHVybiBuZXcgU3Vic2NyaXB0aW9uKG9ic2VydmVyLCB0aGlzLl9mKTtcbiAgfSxcbiAgZm9yRWFjaDogZnVuY3Rpb24gZm9yRWFjaChmbikge1xuICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICByZXR1cm4gbmV3IChjb3JlLlByb21pc2UgfHwgZ2xvYmFsLlByb21pc2UpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIGFGdW5jdGlvbihmbik7XG4gICAgICB2YXIgc3Vic2NyaXB0aW9uID0gdGhhdC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIGZuKHZhbHVlKTtcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgICBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiByZWplY3QsXG4gICAgICAgIGNvbXBsZXRlOiByZXNvbHZlXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxufSk7XG5cbnJlZGVmaW5lQWxsKCRPYnNlcnZhYmxlLCB7XG4gIGZyb206IGZ1bmN0aW9uIGZyb20oeCkge1xuICAgIHZhciBDID0gdHlwZW9mIHRoaXMgPT09ICdmdW5jdGlvbicgPyB0aGlzIDogJE9ic2VydmFibGU7XG4gICAgdmFyIG1ldGhvZCA9IGdldE1ldGhvZChhbk9iamVjdCh4KVtPQlNFUlZBQkxFXSk7XG4gICAgaWYgKG1ldGhvZCkge1xuICAgICAgdmFyIG9ic2VydmFibGUgPSBhbk9iamVjdChtZXRob2QuY2FsbCh4KSk7XG4gICAgICByZXR1cm4gb2JzZXJ2YWJsZS5jb25zdHJ1Y3RvciA9PT0gQyA/IG9ic2VydmFibGUgOiBuZXcgQyhmdW5jdGlvbiAob2JzZXJ2ZXIpIHtcbiAgICAgICAgcmV0dXJuIG9ic2VydmFibGUuc3Vic2NyaWJlKG9ic2VydmVyKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IEMoZnVuY3Rpb24gKG9ic2VydmVyKSB7XG4gICAgICB2YXIgZG9uZSA9IGZhbHNlO1xuICAgICAgbWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCFkb25lKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChmb3JPZih4LCBmYWxzZSwgZnVuY3Rpb24gKGl0KSB7XG4gICAgICAgICAgICAgIG9ic2VydmVyLm5leHQoaXQpO1xuICAgICAgICAgICAgICBpZiAoZG9uZSkgcmV0dXJuIFJFVFVSTjtcbiAgICAgICAgICAgIH0pID09PSBSRVRVUk4pIHJldHVybjtcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBpZiAoZG9uZSkgdGhyb3cgZTtcbiAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKGUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH0gb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyBkb25lID0gdHJ1ZTsgfTtcbiAgICB9KTtcbiAgfSxcbiAgb2Y6IGZ1bmN0aW9uIG9mKCkge1xuICAgIGZvciAodmFyIGkgPSAwLCBsID0gYXJndW1lbnRzLmxlbmd0aCwgaXRlbXMgPSBuZXcgQXJyYXkobCk7IGkgPCBsOykgaXRlbXNbaV0gPSBhcmd1bWVudHNbaSsrXTtcbiAgICByZXR1cm4gbmV3ICh0eXBlb2YgdGhpcyA9PT0gJ2Z1bmN0aW9uJyA/IHRoaXMgOiAkT2JzZXJ2YWJsZSkoZnVuY3Rpb24gKG9ic2VydmVyKSB7XG4gICAgICB2YXIgZG9uZSA9IGZhbHNlO1xuICAgICAgbWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCFkb25lKSB7XG4gICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBpdGVtcy5sZW5ndGg7ICsraikge1xuICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChpdGVtc1tqXSk7XG4gICAgICAgICAgICBpZiAoZG9uZSkgcmV0dXJuO1xuICAgICAgICAgIH0gb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyBkb25lID0gdHJ1ZTsgfTtcbiAgICB9KTtcbiAgfVxufSk7XG5cbmhpZGUoJE9ic2VydmFibGUucHJvdG90eXBlLCBPQlNFUlZBQkxFLCBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9KTtcblxuJGV4cG9ydCgkZXhwb3J0LkcsIHsgT2JzZXJ2YWJsZTogJE9ic2VydmFibGUgfSk7XG5cbnJlcXVpcmUoJy4vX3NldC1zcGVjaWVzJykoJ09ic2VydmFibGUnKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///325\n")},function(module,exports,__webpack_require__){eval("// ie9- setTimeout & setInterval additional parameters fix\nvar global = __webpack_require__(2);\nvar $export = __webpack_require__(0);\nvar userAgent = __webpack_require__(60);\nvar slice = [].slice;\nvar MSIE = /MSIE .\\./.test(userAgent); // <- dirty ie9- check\nvar wrap = function (set) {\n return function (fn, time /* , ...args */) {\n var boundArgs = arguments.length > 2;\n var args = boundArgs ? slice.call(arguments, 2) : false;\n return set(boundArgs ? function () {\n // eslint-disable-next-line no-new-func\n (typeof fn == 'function' ? fn : Function(fn)).apply(this, args);\n } : fn, time);\n };\n};\n$export($export.G + $export.B + $export.F * MSIE, {\n setTimeout: wrap(global.setTimeout),\n setInterval: wrap(global.setInterval)\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy93ZWIudGltZXJzLmpzPzQ3OTUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxhQUFhLG1CQUFPLENBQUMsQ0FBVztBQUNoQyxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDO0FBQ0Esc0NBQXNDO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjMyNi5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGllOS0gc2V0VGltZW91dCAmIHNldEludGVydmFsIGFkZGl0aW9uYWwgcGFyYW1ldGVycyBmaXhcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi9fdXNlci1hZ2VudCcpO1xudmFyIHNsaWNlID0gW10uc2xpY2U7XG52YXIgTVNJRSA9IC9NU0lFIC5cXC4vLnRlc3QodXNlckFnZW50KTsgLy8gPC0gZGlydHkgaWU5LSBjaGVja1xudmFyIHdyYXAgPSBmdW5jdGlvbiAoc2V0KSB7XG4gIHJldHVybiBmdW5jdGlvbiAoZm4sIHRpbWUgLyogLCAuLi5hcmdzICovKSB7XG4gICAgdmFyIGJvdW5kQXJncyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyO1xuICAgIHZhciBhcmdzID0gYm91bmRBcmdzID8gc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpIDogZmFsc2U7XG4gICAgcmV0dXJuIHNldChib3VuZEFyZ3MgPyBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmNcbiAgICAgICh0eXBlb2YgZm4gPT0gJ2Z1bmN0aW9uJyA/IGZuIDogRnVuY3Rpb24oZm4pKS5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9IDogZm4sIHRpbWUpO1xuICB9O1xufTtcbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5CICsgJGV4cG9ydC5GICogTVNJRSwge1xuICBzZXRUaW1lb3V0OiB3cmFwKGdsb2JhbC5zZXRUaW1lb3V0KSxcbiAgc2V0SW50ZXJ2YWw6IHdyYXAoZ2xvYmFsLnNldEludGVydmFsKVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///326\n")},function(module,exports,__webpack_require__){eval("var $export = __webpack_require__(0);\nvar $task = __webpack_require__(89);\n$export($export.G + $export.B, {\n setImmediate: $task.set,\n clearImmediate: $task.clear\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy93ZWIuaW1tZWRpYXRlLmpzPzEzMGYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsWUFBWSxtQkFBTyxDQUFDLEVBQVM7QUFDN0I7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIzMjcuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICR0YXNrID0gcmVxdWlyZSgnLi9fdGFzaycpO1xuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LkIsIHtcbiAgc2V0SW1tZWRpYXRlOiAkdGFzay5zZXQsXG4gIGNsZWFySW1tZWRpYXRlOiAkdGFzay5jbGVhclxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///327\n")},function(module,exports,__webpack_require__){eval("var $iterators = __webpack_require__(86);\nvar getKeys = __webpack_require__(34);\nvar redefine = __webpack_require__(12);\nvar global = __webpack_require__(2);\nvar hide = __webpack_require__(11);\nvar Iterators = __webpack_require__(46);\nvar wks = __webpack_require__(5);\nvar ITERATOR = wks('iterator');\nvar TO_STRING_TAG = wks('toStringTag');\nvar ArrayValues = Iterators.Array;\n\nvar DOMIterables = {\n CSSRuleList: true, // TODO: Not spec compliant, should be false.\n CSSStyleDeclaration: false,\n CSSValueList: false,\n ClientRectList: false,\n DOMRectList: false,\n DOMStringList: false,\n DOMTokenList: true,\n DataTransferItemList: false,\n FileList: false,\n HTMLAllCollection: false,\n HTMLCollection: false,\n HTMLFormElement: false,\n HTMLSelectElement: false,\n MediaList: true, // TODO: Not spec compliant, should be false.\n MimeTypeArray: false,\n NamedNodeMap: false,\n NodeList: true,\n PaintRequestList: false,\n Plugin: false,\n PluginArray: false,\n SVGLengthList: false,\n SVGNumberList: false,\n SVGPathSegList: false,\n SVGPointList: false,\n SVGStringList: false,\n SVGTransformList: false,\n SourceBufferList: false,\n StyleSheetList: true, // TODO: Not spec compliant, should be false.\n TextTrackCueList: false,\n TextTrackList: false,\n TouchList: false\n};\n\nfor (var collections = getKeys(DOMIterables), i = 0; i < collections.length; i++) {\n var NAME = collections[i];\n var explicit = DOMIterables[NAME];\n var Collection = global[NAME];\n var proto = Collection && Collection.prototype;\n var key;\n if (proto) {\n if (!proto[ITERATOR]) hide(proto, ITERATOR, ArrayValues);\n if (!proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n Iterators[NAME] = ArrayValues;\n if (explicit) for (key in $iterators) if (!proto[key]) redefine(proto, key, $iterators[key], true);\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy93ZWIuZG9tLml0ZXJhYmxlLmpzP2FjNmEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsaUJBQWlCLG1CQUFPLENBQUMsRUFBc0I7QUFDL0MsY0FBYyxtQkFBTyxDQUFDLEVBQWdCO0FBQ3RDLGVBQWUsbUJBQU8sQ0FBQyxFQUFhO0FBQ3BDLGFBQWEsbUJBQU8sQ0FBQyxDQUFXO0FBQ2hDLFdBQVcsbUJBQU8sQ0FBQyxFQUFTO0FBQzVCLGdCQUFnQixtQkFBTyxDQUFDLEVBQWM7QUFDdEMsVUFBVSxtQkFBTyxDQUFDLENBQVE7QUFDMUI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxvREFBb0Qsd0JBQXdCO0FBQzVFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIzMjguanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgJGl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vZXM2LmFycmF5Lml0ZXJhdG9yJyk7XG52YXIgZ2V0S2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJyk7XG52YXIgd2tzID0gcmVxdWlyZSgnLi9fd2tzJyk7XG52YXIgSVRFUkFUT1IgPSB3a3MoJ2l0ZXJhdG9yJyk7XG52YXIgVE9fU1RSSU5HX1RBRyA9IHdrcygndG9TdHJpbmdUYWcnKTtcbnZhciBBcnJheVZhbHVlcyA9IEl0ZXJhdG9ycy5BcnJheTtcblxudmFyIERPTUl0ZXJhYmxlcyA9IHtcbiAgQ1NTUnVsZUxpc3Q6IHRydWUsIC8vIFRPRE86IE5vdCBzcGVjIGNvbXBsaWFudCwgc2hvdWxkIGJlIGZhbHNlLlxuICBDU1NTdHlsZURlY2xhcmF0aW9uOiBmYWxzZSxcbiAgQ1NTVmFsdWVMaXN0OiBmYWxzZSxcbiAgQ2xpZW50UmVjdExpc3Q6IGZhbHNlLFxuICBET01SZWN0TGlzdDogZmFsc2UsXG4gIERPTVN0cmluZ0xpc3Q6IGZhbHNlLFxuICBET01Ub2tlbkxpc3Q6IHRydWUsXG4gIERhdGFUcmFuc2Zlckl0ZW1MaXN0OiBmYWxzZSxcbiAgRmlsZUxpc3Q6IGZhbHNlLFxuICBIVE1MQWxsQ29sbGVjdGlvbjogZmFsc2UsXG4gIEhUTUxDb2xsZWN0aW9uOiBmYWxzZSxcbiAgSFRNTEZvcm1FbGVtZW50OiBmYWxzZSxcbiAgSFRNTFNlbGVjdEVsZW1lbnQ6IGZhbHNlLFxuICBNZWRpYUxpc3Q6IHRydWUsIC8vIFRPRE86IE5vdCBzcGVjIGNvbXBsaWFudCwgc2hvdWxkIGJlIGZhbHNlLlxuICBNaW1lVHlwZUFycmF5OiBmYWxzZSxcbiAgTmFtZWROb2RlTWFwOiBmYWxzZSxcbiAgTm9kZUxpc3Q6IHRydWUsXG4gIFBhaW50UmVxdWVzdExpc3Q6IGZhbHNlLFxuICBQbHVnaW46IGZhbHNlLFxuICBQbHVnaW5BcnJheTogZmFsc2UsXG4gIFNWR0xlbmd0aExpc3Q6IGZhbHNlLFxuICBTVkdOdW1iZXJMaXN0OiBmYWxzZSxcbiAgU1ZHUGF0aFNlZ0xpc3Q6IGZhbHNlLFxuICBTVkdQb2ludExpc3Q6IGZhbHNlLFxuICBTVkdTdHJpbmdMaXN0OiBmYWxzZSxcbiAgU1ZHVHJhbnNmb3JtTGlzdDogZmFsc2UsXG4gIFNvdXJjZUJ1ZmZlckxpc3Q6IGZhbHNlLFxuICBTdHlsZVNoZWV0TGlzdDogdHJ1ZSwgLy8gVE9ETzogTm90IHNwZWMgY29tcGxpYW50LCBzaG91bGQgYmUgZmFsc2UuXG4gIFRleHRUcmFja0N1ZUxpc3Q6IGZhbHNlLFxuICBUZXh0VHJhY2tMaXN0OiBmYWxzZSxcbiAgVG91Y2hMaXN0OiBmYWxzZVxufTtcblxuZm9yICh2YXIgY29sbGVjdGlvbnMgPSBnZXRLZXlzKERPTUl0ZXJhYmxlcyksIGkgPSAwOyBpIDwgY29sbGVjdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgdmFyIE5BTUUgPSBjb2xsZWN0aW9uc1tpXTtcbiAgdmFyIGV4cGxpY2l0ID0gRE9NSXRlcmFibGVzW05BTUVdO1xuICB2YXIgQ29sbGVjdGlvbiA9IGdsb2JhbFtOQU1FXTtcbiAgdmFyIHByb3RvID0gQ29sbGVjdGlvbiAmJiBDb2xsZWN0aW9uLnByb3RvdHlwZTtcbiAgdmFyIGtleTtcbiAgaWYgKHByb3RvKSB7XG4gICAgaWYgKCFwcm90b1tJVEVSQVRPUl0pIGhpZGUocHJvdG8sIElURVJBVE9SLCBBcnJheVZhbHVlcyk7XG4gICAgaWYgKCFwcm90b1tUT19TVFJJTkdfVEFHXSkgaGlkZShwcm90bywgVE9fU1RSSU5HX1RBRywgTkFNRSk7XG4gICAgSXRlcmF0b3JzW05BTUVdID0gQXJyYXlWYWx1ZXM7XG4gICAgaWYgKGV4cGxpY2l0KSBmb3IgKGtleSBpbiAkaXRlcmF0b3JzKSBpZiAoIXByb3RvW2tleV0pIHJlZGVmaW5lKHByb3RvLCBrZXksICRpdGVyYXRvcnNba2V5XSwgdHJ1ZSk7XG4gIH1cbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///328\n")},function(module,exports,__webpack_require__){eval('/* WEBPACK VAR INJECTION */(function(global) {/**\n * Copyright (c) 2014, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * https://raw.github.com/facebook/regenerator/master/LICENSE file. An\n * additional grant of patent rights can be found in the PATENTS file in\n * the same directory.\n */\n\n!(function(global) {\n "use strict";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === "function" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || "@@iterator";\n var asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator";\n var toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag";\n\n var inModule = typeof module === "object";\n var runtime = global.regeneratorRuntime;\n if (runtime) {\n if (inModule) {\n // If regeneratorRuntime is defined globally and we\'re in a module,\n // make the exports object identical to regeneratorRuntime.\n module.exports = runtime;\n }\n // Don\'t bother evaluating the rest of this file if the runtime was\n // already defined globally.\n return;\n }\n\n // Define the runtime globally (as expected by generated code) as either\n // module.exports (if we\'re in a module) or a new, empty object.\n runtime = global.regeneratorRuntime = inModule ? module.exports : {};\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n runtime.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there\'s no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don\'t have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: "normal", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: "throw", arg: err };\n }\n }\n\n var GenStateSuspendedStart = "suspendedStart";\n var GenStateSuspendedYield = "suspendedYield";\n var GenStateExecuting = "executing";\n var GenStateCompleted = "completed";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don\'t natively support it.\n var IteratorPrototype = {};\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunctionPrototype[toStringTagSymbol] =\n GeneratorFunction.displayName = "GeneratorFunction";\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n ["next", "throw", "return"].forEach(function(method) {\n prototype[method] = function(arg) {\n return this._invoke(method, arg);\n };\n });\n }\n\n runtime.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === "function" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === "GeneratorFunction"\n : false;\n };\n\n runtime.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n if (!(toStringTagSymbol in genFun)) {\n genFun[toStringTagSymbol] = "GeneratorFunction";\n }\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, "__await")` to determine if the yielded value is\n // meant to be awaited.\n runtime.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === "throw") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === "object" &&\n hasOwn.call(value, "__await")) {\n return Promise.resolve(value.__await).then(function(value) {\n invoke("next", value, resolve, reject);\n }, function(err) {\n invoke("throw", err, resolve, reject);\n });\n }\n\n return Promise.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration. If the Promise is rejected, however, the\n // result for this iteration will be rejected with the same\n // reason. Note that rejections of yielded Promises are not\n // thrown back into the generator function, as is the case\n // when an awaited Promise is rejected. This difference in\n // behavior between yield and await is important, because it\n // allows the consumer to decide what to do with the yielded\n // rejection (swallow it and continue, manually .throw it back\n // into the generator, abandon iteration, whatever). With\n // await, by contrast, there is no opportunity to examine the\n // rejection reason outside the generator function, so the\n // only option is to throw it from the await expression, and\n // let the generator function handle the exception.\n result.value = unwrapped;\n resolve(result);\n }, reject);\n }\n }\n\n if (typeof global.process === "object" && global.process.domain) {\n invoke = global.process.domain.bind(invoke);\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new Promise(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n runtime.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n runtime.async = function(innerFn, outerFn, self, tryLocsList) {\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList)\n );\n\n return runtime.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error("Generator is already running");\n }\n\n if (state === GenStateCompleted) {\n if (method === "throw") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === "next") {\n // Setting context._sent for legacy support of Babel\'s\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === "throw") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === "return") {\n context.abrupt("return", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === "normal") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === "throw") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = "throw";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === "throw") {\n if (delegate.iterator.return) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = "return";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === "throw") {\n // If maybeInvokeDelegate(context) changed context.method from\n // "return" to "throw", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = "throw";\n context.arg = new TypeError(\n "The iterator does not provide a \'throw\' method");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === "throw") {\n context.method = "throw";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = "throw";\n context.arg = new TypeError("iterator result is not an object");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was "throw" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was "next", forget context.arg since it has been\n // "consumed" by the delegate iterator. If context.method was\n // "return", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== "return") {\n context.method = "next";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n Gp[toStringTagSymbol] = "Generator";\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers\' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn\'t happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return "[object Generator]";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = "normal";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: "root" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n runtime.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === "function") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n runtime.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel\'s\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = "next";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === "t" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === "throw") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = "throw";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = "next";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === "root") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle("end");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, "catchLoc");\n var hasFinally = hasOwn.call(entry, "finallyLoc");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error("try statement without catch or finally");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, "finallyLoc") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === "break" ||\n type === "continue") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = "next";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === "throw") {\n throw record.arg;\n }\n\n if (record.type === "break" ||\n record.type === "continue") {\n this.next = record.arg;\n } else if (record.type === "return") {\n this.rval = this.arg = record.arg;\n this.method = "return";\n this.next = "end";\n } else if (record.type === "normal" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n "catch": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === "throw") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error("illegal catch attempt");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === "next") {\n // Deliberately forget the last sent value so that we don\'t\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n})(\n // Among the various tricks for obtaining a reference to the global\n // object, this seems to be the most reliable technique that does not\n // use indirect eval (which violates Content Security Policy).\n typeof global === "object" ? global :\n typeof window === "object" ? window :\n typeof self === "object" ? self : this\n);\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(93)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9yZWdlbmVyYXRvci1ydW50aW1lL3J1bnRpbWUuanM/ZjNhMiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZCxLQUFLO0FBQ0wsY0FBYztBQUNkO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseURBQXlEO0FBQ3pEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBLFdBQVc7QUFDWDs7QUFFQTtBQUNBO0FBQ0Esd0NBQXdDLFdBQVc7QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDJCQUEyQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLFNBQVM7QUFDVDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esb0NBQW9DLGNBQWM7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlDQUFpQyxrQkFBa0I7QUFDbkQ7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGlCQUFpQjs7QUFFakI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLGlCQUFpQjtBQUN6QztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFlBQVk7QUFDWjtBQUNBOztBQUVBO0FBQ0EsWUFBWTtBQUNaOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsOENBQThDLFFBQVE7QUFDdEQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBOztBQUVBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7O0FBRUEsV0FBVztBQUNYO0FBQ0E7QUFDQTs7QUFFQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0EsOENBQThDLFFBQVE7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQSw4Q0FBOEMsUUFBUTtBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQSw4Q0FBOEMsUUFBUTtBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIzMjkuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxNCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBodHRwczovL3Jhdy5naXRodWIuY29tL2ZhY2Vib29rL3JlZ2VuZXJhdG9yL21hc3Rlci9MSUNFTlNFIGZpbGUuIEFuXG4gKiBhZGRpdGlvbmFsIGdyYW50IG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW5cbiAqIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqL1xuXG4hKGZ1bmN0aW9uKGdsb2JhbCkge1xuICBcInVzZSBzdHJpY3RcIjtcblxuICB2YXIgT3AgPSBPYmplY3QucHJvdG90eXBlO1xuICB2YXIgaGFzT3duID0gT3AuaGFzT3duUHJvcGVydHk7XG4gIHZhciB1bmRlZmluZWQ7IC8vIE1vcmUgY29tcHJlc3NpYmxlIHRoYW4gdm9pZCAwLlxuICB2YXIgJFN5bWJvbCA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiA/IFN5bWJvbCA6IHt9O1xuICB2YXIgaXRlcmF0b3JTeW1ib2wgPSAkU3ltYm9sLml0ZXJhdG9yIHx8IFwiQEBpdGVyYXRvclwiO1xuICB2YXIgYXN5bmNJdGVyYXRvclN5bWJvbCA9ICRTeW1ib2wuYXN5bmNJdGVyYXRvciB8fCBcIkBAYXN5bmNJdGVyYXRvclwiO1xuICB2YXIgdG9TdHJpbmdUYWdTeW1ib2wgPSAkU3ltYm9sLnRvU3RyaW5nVGFnIHx8IFwiQEB0b1N0cmluZ1RhZ1wiO1xuXG4gIHZhciBpbk1vZHVsZSA9IHR5cGVvZiBtb2R1bGUgPT09IFwib2JqZWN0XCI7XG4gIHZhciBydW50aW1lID0gZ2xvYmFsLnJlZ2VuZXJhdG9yUnVudGltZTtcbiAgaWYgKHJ1bnRpbWUpIHtcbiAgICBpZiAoaW5Nb2R1bGUpIHtcbiAgICAgIC8vIElmIHJlZ2VuZXJhdG9yUnVudGltZSBpcyBkZWZpbmVkIGdsb2JhbGx5IGFuZCB3ZSdyZSBpbiBhIG1vZHVsZSxcbiAgICAgIC8vIG1ha2UgdGhlIGV4cG9ydHMgb2JqZWN0IGlkZW50aWNhbCB0byByZWdlbmVyYXRvclJ1bnRpbWUuXG4gICAgICBtb2R1bGUuZXhwb3J0cyA9IHJ1bnRpbWU7XG4gICAgfVxuICAgIC8vIERvbid0IGJvdGhlciBldmFsdWF0aW5nIHRoZSByZXN0IG9mIHRoaXMgZmlsZSBpZiB0aGUgcnVudGltZSB3YXNcbiAgICAvLyBhbHJlYWR5IGRlZmluZWQgZ2xvYmFsbHkuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gRGVmaW5lIHRoZSBydW50aW1lIGdsb2JhbGx5IChhcyBleHBlY3RlZCBieSBnZW5lcmF0ZWQgY29kZSkgYXMgZWl0aGVyXG4gIC8vIG1vZHVsZS5leHBvcnRzIChpZiB3ZSdyZSBpbiBhIG1vZHVsZSkgb3IgYSBuZXcsIGVtcHR5IG9iamVjdC5cbiAgcnVudGltZSA9IGdsb2JhbC5yZWdlbmVyYXRvclJ1bnRpbWUgPSBpbk1vZHVsZSA/IG1vZHVsZS5leHBvcnRzIDoge307XG5cbiAgZnVuY3Rpb24gd3JhcChpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdCkge1xuICAgIC8vIElmIG91dGVyRm4gcHJvdmlkZWQgYW5kIG91dGVyRm4ucHJvdG90eXBlIGlzIGEgR2VuZXJhdG9yLCB0aGVuIG91dGVyRm4ucHJvdG90eXBlIGluc3RhbmNlb2YgR2VuZXJhdG9yLlxuICAgIHZhciBwcm90b0dlbmVyYXRvciA9IG91dGVyRm4gJiYgb3V0ZXJGbi5wcm90b3R5cGUgaW5zdGFuY2VvZiBHZW5lcmF0b3IgPyBvdXRlckZuIDogR2VuZXJhdG9yO1xuICAgIHZhciBnZW5lcmF0b3IgPSBPYmplY3QuY3JlYXRlKHByb3RvR2VuZXJhdG9yLnByb3RvdHlwZSk7XG4gICAgdmFyIGNvbnRleHQgPSBuZXcgQ29udGV4dCh0cnlMb2NzTGlzdCB8fCBbXSk7XG5cbiAgICAvLyBUaGUgLl9pbnZva2UgbWV0aG9kIHVuaWZpZXMgdGhlIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgLm5leHQsXG4gICAgLy8gLnRocm93LCBhbmQgLnJldHVybiBtZXRob2RzLlxuICAgIGdlbmVyYXRvci5faW52b2tlID0gbWFrZUludm9rZU1ldGhvZChpbm5lckZuLCBzZWxmLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBnZW5lcmF0b3I7XG4gIH1cbiAgcnVudGltZS53cmFwID0gd3JhcDtcblxuICAvLyBUcnkvY2F0Y2ggaGVscGVyIHRvIG1pbmltaXplIGRlb3B0aW1pemF0aW9ucy4gUmV0dXJucyBhIGNvbXBsZXRpb25cbiAgLy8gcmVjb3JkIGxpa2UgY29udGV4dC50cnlFbnRyaWVzW2ldLmNvbXBsZXRpb24uIFRoaXMgaW50ZXJmYWNlIGNvdWxkXG4gIC8vIGhhdmUgYmVlbiAoYW5kIHdhcyBwcmV2aW91c2x5KSBkZXNpZ25lZCB0byB0YWtlIGEgY2xvc3VyZSB0byBiZVxuICAvLyBpbnZva2VkIHdpdGhvdXQgYXJndW1lbnRzLCBidXQgaW4gYWxsIHRoZSBjYXNlcyB3ZSBjYXJlIGFib3V0IHdlXG4gIC8vIGFscmVhZHkgaGF2ZSBhbiBleGlzdGluZyBtZXRob2Qgd2Ugd2FudCB0byBjYWxsLCBzbyB0aGVyZSdzIG5vIG5lZWRcbiAgLy8gdG8gY3JlYXRlIGEgbmV3IGZ1bmN0aW9uIG9iamVjdC4gV2UgY2FuIGV2ZW4gZ2V0IGF3YXkgd2l0aCBhc3N1bWluZ1xuICAvLyB0aGUgbWV0aG9kIHRha2VzIGV4YWN0bHkgb25lIGFyZ3VtZW50LCBzaW5jZSB0aGF0IGhhcHBlbnMgdG8gYmUgdHJ1ZVxuICAvLyBpbiBldmVyeSBjYXNlLCBzbyB3ZSBkb24ndCBoYXZlIHRvIHRvdWNoIHRoZSBhcmd1bWVudHMgb2JqZWN0LiBUaGVcbiAgLy8gb25seSBhZGRpdGlvbmFsIGFsbG9jYXRpb24gcmVxdWlyZWQgaXMgdGhlIGNvbXBsZXRpb24gcmVjb3JkLCB3aGljaFxuICAvLyBoYXMgYSBzdGFibGUgc2hhcGUgYW5kIHNvIGhvcGVmdWxseSBzaG91bGQgYmUgY2hlYXAgdG8gYWxsb2NhdGUuXG4gIGZ1bmN0aW9uIHRyeUNhdGNoKGZuLCBvYmosIGFyZykge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4geyB0eXBlOiBcIm5vcm1hbFwiLCBhcmc6IGZuLmNhbGwob2JqLCBhcmcpIH07XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICByZXR1cm4geyB0eXBlOiBcInRocm93XCIsIGFyZzogZXJyIH07XG4gICAgfVxuICB9XG5cbiAgdmFyIEdlblN0YXRlU3VzcGVuZGVkU3RhcnQgPSBcInN1c3BlbmRlZFN0YXJ0XCI7XG4gIHZhciBHZW5TdGF0ZVN1c3BlbmRlZFlpZWxkID0gXCJzdXNwZW5kZWRZaWVsZFwiO1xuICB2YXIgR2VuU3RhdGVFeGVjdXRpbmcgPSBcImV4ZWN1dGluZ1wiO1xuICB2YXIgR2VuU3RhdGVDb21wbGV0ZWQgPSBcImNvbXBsZXRlZFwiO1xuXG4gIC8vIFJldHVybmluZyB0aGlzIG9iamVjdCBmcm9tIHRoZSBpbm5lckZuIGhhcyB0aGUgc2FtZSBlZmZlY3QgYXNcbiAgLy8gYnJlYWtpbmcgb3V0IG9mIHRoZSBkaXNwYXRjaCBzd2l0Y2ggc3RhdGVtZW50LlxuICB2YXIgQ29udGludWVTZW50aW5lbCA9IHt9O1xuXG4gIC8vIER1bW15IGNvbnN0cnVjdG9yIGZ1bmN0aW9ucyB0aGF0IHdlIHVzZSBhcyB0aGUgLmNvbnN0cnVjdG9yIGFuZFxuICAvLyAuY29uc3RydWN0b3IucHJvdG90eXBlIHByb3BlcnRpZXMgZm9yIGZ1bmN0aW9ucyB0aGF0IHJldHVybiBHZW5lcmF0b3JcbiAgLy8gb2JqZWN0cy4gRm9yIGZ1bGwgc3BlYyBjb21wbGlhbmNlLCB5b3UgbWF5IHdpc2ggdG8gY29uZmlndXJlIHlvdXJcbiAgLy8gbWluaWZpZXIgbm90IHRvIG1hbmdsZSB0aGUgbmFtZXMgb2YgdGhlc2UgdHdvIGZ1bmN0aW9ucy5cbiAgZnVuY3Rpb24gR2VuZXJhdG9yKCkge31cbiAgZnVuY3Rpb24gR2VuZXJhdG9yRnVuY3Rpb24oKSB7fVxuICBmdW5jdGlvbiBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSgpIHt9XG5cbiAgLy8gVGhpcyBpcyBhIHBvbHlmaWxsIGZvciAlSXRlcmF0b3JQcm90b3R5cGUlIGZvciBlbnZpcm9ubWVudHMgdGhhdFxuICAvLyBkb24ndCBuYXRpdmVseSBzdXBwb3J0IGl0LlxuICB2YXIgSXRlcmF0b3JQcm90b3R5cGUgPSB7fTtcbiAgSXRlcmF0b3JQcm90b3R5cGVbaXRlcmF0b3JTeW1ib2xdID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIHZhciBnZXRQcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZjtcbiAgdmFyIE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlID0gZ2V0UHJvdG8gJiYgZ2V0UHJvdG8oZ2V0UHJvdG8odmFsdWVzKFtdKSkpO1xuICBpZiAoTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUgJiZcbiAgICAgIE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlICE9PSBPcCAmJlxuICAgICAgaGFzT3duLmNhbGwoTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUsIGl0ZXJhdG9yU3ltYm9sKSkge1xuICAgIC8vIFRoaXMgZW52aXJvbm1lbnQgaGFzIGEgbmF0aXZlICVJdGVyYXRvclByb3RvdHlwZSU7IHVzZSBpdCBpbnN0ZWFkXG4gICAgLy8gb2YgdGhlIHBvbHlmaWxsLlxuICAgIEl0ZXJhdG9yUHJvdG90eXBlID0gTmF0aXZlSXRlcmF0b3JQcm90b3R5cGU7XG4gIH1cblxuICB2YXIgR3AgPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZS5wcm90b3R5cGUgPVxuICAgIEdlbmVyYXRvci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEl0ZXJhdG9yUHJvdG90eXBlKTtcbiAgR2VuZXJhdG9yRnVuY3Rpb24ucHJvdG90eXBlID0gR3AuY29uc3RydWN0b3IgPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZTtcbiAgR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUuY29uc3RydWN0b3IgPSBHZW5lcmF0b3JGdW5jdGlvbjtcbiAgR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGVbdG9TdHJpbmdUYWdTeW1ib2xdID1cbiAgICBHZW5lcmF0b3JGdW5jdGlvbi5kaXNwbGF5TmFtZSA9IFwiR2VuZXJhdG9yRnVuY3Rpb25cIjtcblxuICAvLyBIZWxwZXIgZm9yIGRlZmluaW5nIHRoZSAubmV4dCwgLnRocm93LCBhbmQgLnJldHVybiBtZXRob2RzIG9mIHRoZVxuICAvLyBJdGVyYXRvciBpbnRlcmZhY2UgaW4gdGVybXMgb2YgYSBzaW5nbGUgLl9pbnZva2UgbWV0aG9kLlxuICBmdW5jdGlvbiBkZWZpbmVJdGVyYXRvck1ldGhvZHMocHJvdG90eXBlKSB7XG4gICAgW1wibmV4dFwiLCBcInRocm93XCIsIFwicmV0dXJuXCJdLmZvckVhY2goZnVuY3Rpb24obWV0aG9kKSB7XG4gICAgICBwcm90b3R5cGVbbWV0aG9kXSA9IGZ1bmN0aW9uKGFyZykge1xuICAgICAgICByZXR1cm4gdGhpcy5faW52b2tlKG1ldGhvZCwgYXJnKTtcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBydW50aW1lLmlzR2VuZXJhdG9yRnVuY3Rpb24gPSBmdW5jdGlvbihnZW5GdW4pIHtcbiAgICB2YXIgY3RvciA9IHR5cGVvZiBnZW5GdW4gPT09IFwiZnVuY3Rpb25cIiAmJiBnZW5GdW4uY29uc3RydWN0b3I7XG4gICAgcmV0dXJuIGN0b3JcbiAgICAgID8gY3RvciA9PT0gR2VuZXJhdG9yRnVuY3Rpb24gfHxcbiAgICAgICAgLy8gRm9yIHRoZSBuYXRpdmUgR2VuZXJhdG9yRnVuY3Rpb24gY29uc3RydWN0b3IsIHRoZSBiZXN0IHdlIGNhblxuICAgICAgICAvLyBkbyBpcyB0byBjaGVjayBpdHMgLm5hbWUgcHJvcGVydHkuXG4gICAgICAgIChjdG9yLmRpc3BsYXlOYW1lIHx8IGN0b3IubmFtZSkgPT09IFwiR2VuZXJhdG9yRnVuY3Rpb25cIlxuICAgICAgOiBmYWxzZTtcbiAgfTtcblxuICBydW50aW1lLm1hcmsgPSBmdW5jdGlvbihnZW5GdW4pIHtcbiAgICBpZiAoT2JqZWN0LnNldFByb3RvdHlwZU9mKSB7XG4gICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YoZ2VuRnVuLCBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGdlbkZ1bi5fX3Byb3RvX18gPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZTtcbiAgICAgIGlmICghKHRvU3RyaW5nVGFnU3ltYm9sIGluIGdlbkZ1bikpIHtcbiAgICAgICAgZ2VuRnVuW3RvU3RyaW5nVGFnU3ltYm9sXSA9IFwiR2VuZXJhdG9yRnVuY3Rpb25cIjtcbiAgICAgIH1cbiAgICB9XG4gICAgZ2VuRnVuLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoR3ApO1xuICAgIHJldHVybiBnZW5GdW47XG4gIH07XG5cbiAgLy8gV2l0aGluIHRoZSBib2R5IG9mIGFueSBhc3luYyBmdW5jdGlvbiwgYGF3YWl0IHhgIGlzIHRyYW5zZm9ybWVkIHRvXG4gIC8vIGB5aWVsZCByZWdlbmVyYXRvclJ1bnRpbWUuYXdyYXAoeClgLCBzbyB0aGF0IHRoZSBydW50aW1lIGNhbiB0ZXN0XG4gIC8vIGBoYXNPd24uY2FsbCh2YWx1ZSwgXCJfX2F3YWl0XCIpYCB0byBkZXRlcm1pbmUgaWYgdGhlIHlpZWxkZWQgdmFsdWUgaXNcbiAgLy8gbWVhbnQgdG8gYmUgYXdhaXRlZC5cbiAgcnVudGltZS5hd3JhcCA9IGZ1bmN0aW9uKGFyZykge1xuICAgIHJldHVybiB7IF9fYXdhaXQ6IGFyZyB9O1xuICB9O1xuXG4gIGZ1bmN0aW9uIEFzeW5jSXRlcmF0b3IoZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gaW52b2tlKG1ldGhvZCwgYXJnLCByZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChnZW5lcmF0b3JbbWV0aG9kXSwgZ2VuZXJhdG9yLCBhcmcpO1xuICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgcmVqZWN0KHJlY29yZC5hcmcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHJlY29yZC5hcmc7XG4gICAgICAgIHZhciB2YWx1ZSA9IHJlc3VsdC52YWx1ZTtcbiAgICAgICAgaWYgKHZhbHVlICYmXG4gICAgICAgICAgICB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgICAgIGhhc093bi5jYWxsKHZhbHVlLCBcIl9fYXdhaXRcIikpIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHZhbHVlLl9fYXdhaXQpLnRoZW4oZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgICAgIGludm9rZShcIm5leHRcIiwgdmFsdWUsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgfSwgZnVuY3Rpb24oZXJyKSB7XG4gICAgICAgICAgICBpbnZva2UoXCJ0aHJvd1wiLCBlcnIsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHZhbHVlKS50aGVuKGZ1bmN0aW9uKHVud3JhcHBlZCkge1xuICAgICAgICAgIC8vIFdoZW4gYSB5aWVsZGVkIFByb21pc2UgaXMgcmVzb2x2ZWQsIGl0cyBmaW5hbCB2YWx1ZSBiZWNvbWVzXG4gICAgICAgICAgLy8gdGhlIC52YWx1ZSBvZiB0aGUgUHJvbWlzZTx7dmFsdWUsZG9uZX0+IHJlc3VsdCBmb3IgdGhlXG4gICAgICAgICAgLy8gY3VycmVudCBpdGVyYXRpb24uIElmIHRoZSBQcm9taXNlIGlzIHJlamVjdGVkLCBob3dldmVyLCB0aGVcbiAgICAgICAgICAvLyByZXN1bHQgZm9yIHRoaXMgaXRlcmF0aW9uIHdpbGwgYmUgcmVqZWN0ZWQgd2l0aCB0aGUgc2FtZVxuICAgICAgICAgIC8vIHJlYXNvbi4gTm90ZSB0aGF0IHJlamVjdGlvbnMgb2YgeWllbGRlZCBQcm9taXNlcyBhcmUgbm90XG4gICAgICAgICAgLy8gdGhyb3duIGJhY2sgaW50byB0aGUgZ2VuZXJhdG9yIGZ1bmN0aW9uLCBhcyBpcyB0aGUgY2FzZVxuICAgICAgICAgIC8vIHdoZW4gYW4gYXdhaXRlZCBQcm9taXNlIGlzIHJlamVjdGVkLiBUaGlzIGRpZmZlcmVuY2UgaW5cbiAgICAgICAgICAvLyBiZWhhdmlvciBiZXR3ZWVuIHlpZWxkIGFuZCBhd2FpdCBpcyBpbXBvcnRhbnQsIGJlY2F1c2UgaXRcbiAgICAgICAgICAvLyBhbGxvd3MgdGhlIGNvbnN1bWVyIHRvIGRlY2lkZSB3aGF0IHRvIGRvIHdpdGggdGhlIHlpZWxkZWRcbiAgICAgICAgICAvLyByZWplY3Rpb24gKHN3YWxsb3cgaXQgYW5kIGNvbnRpbnVlLCBtYW51YWxseSAudGhyb3cgaXQgYmFja1xuICAgICAgICAgIC8vIGludG8gdGhlIGdlbmVyYXRvciwgYWJhbmRvbiBpdGVyYXRpb24sIHdoYXRldmVyKS4gV2l0aFxuICAgICAgICAgIC8vIGF3YWl0LCBieSBjb250cmFzdCwgdGhlcmUgaXMgbm8gb3Bwb3J0dW5pdHkgdG8gZXhhbWluZSB0aGVcbiAgICAgICAgICAvLyByZWplY3Rpb24gcmVhc29uIG91dHNpZGUgdGhlIGdlbmVyYXRvciBmdW5jdGlvbiwgc28gdGhlXG4gICAgICAgICAgLy8gb25seSBvcHRpb24gaXMgdG8gdGhyb3cgaXQgZnJvbSB0aGUgYXdhaXQgZXhwcmVzc2lvbiwgYW5kXG4gICAgICAgICAgLy8gbGV0IHRoZSBnZW5lcmF0b3IgZnVuY3Rpb24gaGFuZGxlIHRoZSBleGNlcHRpb24uXG4gICAgICAgICAgcmVzdWx0LnZhbHVlID0gdW53cmFwcGVkO1xuICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgfSwgcmVqZWN0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGdsb2JhbC5wcm9jZXNzID09PSBcIm9iamVjdFwiICYmIGdsb2JhbC5wcm9jZXNzLmRvbWFpbikge1xuICAgICAgaW52b2tlID0gZ2xvYmFsLnByb2Nlc3MuZG9tYWluLmJpbmQoaW52b2tlKTtcbiAgICB9XG5cbiAgICB2YXIgcHJldmlvdXNQcm9taXNlO1xuXG4gICAgZnVuY3Rpb24gZW5xdWV1ZShtZXRob2QsIGFyZykge1xuICAgICAgZnVuY3Rpb24gY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICBpbnZva2UobWV0aG9kLCBhcmcsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcHJldmlvdXNQcm9taXNlID1cbiAgICAgICAgLy8gSWYgZW5xdWV1ZSBoYXMgYmVlbiBjYWxsZWQgYmVmb3JlLCB0aGVuIHdlIHdhbnQgdG8gd2FpdCB1bnRpbFxuICAgICAgICAvLyBhbGwgcHJldmlvdXMgUHJvbWlzZXMgaGF2ZSBiZWVuIHJlc29sdmVkIGJlZm9yZSBjYWxsaW5nIGludm9rZSxcbiAgICAgICAgLy8gc28gdGhhdCByZXN1bHRzIGFyZSBhbHdheXMgZGVsaXZlcmVkIGluIHRoZSBjb3JyZWN0IG9yZGVyLiBJZlxuICAgICAgICAvLyBlbnF1ZXVlIGhhcyBub3QgYmVlbiBjYWxsZWQgYmVmb3JlLCB0aGVuIGl0IGlzIGltcG9ydGFudCB0b1xuICAgICAgICAvLyBjYWxsIGludm9rZSBpbW1lZGlhdGVseSwgd2l0aG91dCB3YWl0aW5nIG9uIGEgY2FsbGJhY2sgdG8gZmlyZSxcbiAgICAgICAgLy8gc28gdGhhdCB0aGUgYXN5bmMgZ2VuZXJhdG9yIGZ1bmN0aW9uIGhhcyB0aGUgb3Bwb3J0dW5pdHkgdG8gZG9cbiAgICAgICAgLy8gYW55IG5lY2Vzc2FyeSBzZXR1cCBpbiBhIHByZWRpY3RhYmxlIHdheS4gVGhpcyBwcmVkaWN0YWJpbGl0eVxuICAgICAgICAvLyBpcyB3aHkgdGhlIFByb21pc2UgY29uc3RydWN0b3Igc3luY2hyb25vdXNseSBpbnZva2VzIGl0c1xuICAgICAgICAvLyBleGVjdXRvciBjYWxsYmFjaywgYW5kIHdoeSBhc3luYyBmdW5jdGlvbnMgc3luY2hyb25vdXNseVxuICAgICAgICAvLyBleGVjdXRlIGNvZGUgYmVmb3JlIHRoZSBmaXJzdCBhd2FpdC4gU2luY2Ugd2UgaW1wbGVtZW50IHNpbXBsZVxuICAgICAgICAvLyBhc3luYyBmdW5jdGlvbnMgaW4gdGVybXMgb2YgYXN5bmMgZ2VuZXJhdG9ycywgaXQgaXMgZXNwZWNpYWxseVxuICAgICAgICAvLyBpbXBvcnRhbnQgdG8gZ2V0IHRoaXMgcmlnaHQsIGV2ZW4gdGhvdWdoIGl0IHJlcXVpcmVzIGNhcmUuXG4gICAgICAgIHByZXZpb3VzUHJvbWlzZSA/IHByZXZpb3VzUHJvbWlzZS50aGVuKFxuICAgICAgICAgIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnLFxuICAgICAgICAgIC8vIEF2b2lkIHByb3BhZ2F0aW5nIGZhaWx1cmVzIHRvIFByb21pc2VzIHJldHVybmVkIGJ5IGxhdGVyXG4gICAgICAgICAgLy8gaW52b2NhdGlvbnMgb2YgdGhlIGl0ZXJhdG9yLlxuICAgICAgICAgIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnXG4gICAgICAgICkgOiBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZygpO1xuICAgIH1cblxuICAgIC8vIERlZmluZSB0aGUgdW5pZmllZCBoZWxwZXIgbWV0aG9kIHRoYXQgaXMgdXNlZCB0byBpbXBsZW1lbnQgLm5leHQsXG4gICAgLy8gLnRocm93LCBhbmQgLnJldHVybiAoc2VlIGRlZmluZUl0ZXJhdG9yTWV0aG9kcykuXG4gICAgdGhpcy5faW52b2tlID0gZW5xdWV1ZTtcbiAgfVxuXG4gIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhBc3luY0l0ZXJhdG9yLnByb3RvdHlwZSk7XG4gIEFzeW5jSXRlcmF0b3IucHJvdG90eXBlW2FzeW5jSXRlcmF0b3JTeW1ib2xdID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICBydW50aW1lLkFzeW5jSXRlcmF0b3IgPSBBc3luY0l0ZXJhdG9yO1xuXG4gIC8vIE5vdGUgdGhhdCBzaW1wbGUgYXN5bmMgZnVuY3Rpb25zIGFyZSBpbXBsZW1lbnRlZCBvbiB0b3Agb2ZcbiAgLy8gQXN5bmNJdGVyYXRvciBvYmplY3RzOyB0aGV5IGp1c3QgcmV0dXJuIGEgUHJvbWlzZSBmb3IgdGhlIHZhbHVlIG9mXG4gIC8vIHRoZSBmaW5hbCByZXN1bHQgcHJvZHVjZWQgYnkgdGhlIGl0ZXJhdG9yLlxuICBydW50aW1lLmFzeW5jID0gZnVuY3Rpb24oaW5uZXJGbiwgb3V0ZXJGbiwgc2VsZiwgdHJ5TG9jc0xpc3QpIHtcbiAgICB2YXIgaXRlciA9IG5ldyBBc3luY0l0ZXJhdG9yKFxuICAgICAgd3JhcChpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdClcbiAgICApO1xuXG4gICAgcmV0dXJuIHJ1bnRpbWUuaXNHZW5lcmF0b3JGdW5jdGlvbihvdXRlckZuKVxuICAgICAgPyBpdGVyIC8vIElmIG91dGVyRm4gaXMgYSBnZW5lcmF0b3IsIHJldHVybiB0aGUgZnVsbCBpdGVyYXRvci5cbiAgICAgIDogaXRlci5uZXh0KCkudGhlbihmdW5jdGlvbihyZXN1bHQpIHtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0LmRvbmUgPyByZXN1bHQudmFsdWUgOiBpdGVyLm5leHQoKTtcbiAgICAgICAgfSk7XG4gIH07XG5cbiAgZnVuY3Rpb24gbWFrZUludm9rZU1ldGhvZChpbm5lckZuLCBzZWxmLCBjb250ZXh0KSB7XG4gICAgdmFyIHN0YXRlID0gR2VuU3RhdGVTdXNwZW5kZWRTdGFydDtcblxuICAgIHJldHVybiBmdW5jdGlvbiBpbnZva2UobWV0aG9kLCBhcmcpIHtcbiAgICAgIGlmIChzdGF0ZSA9PT0gR2VuU3RhdGVFeGVjdXRpbmcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgcnVubmluZ1wiKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHN0YXRlID09PSBHZW5TdGF0ZUNvbXBsZXRlZCkge1xuICAgICAgICBpZiAobWV0aG9kID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICB0aHJvdyBhcmc7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBCZSBmb3JnaXZpbmcsIHBlciAyNS4zLjMuMy4zIG9mIHRoZSBzcGVjOlxuICAgICAgICAvLyBodHRwczovL3Blb3BsZS5tb3ppbGxhLm9yZy9+am9yZW5kb3JmZi9lczYtZHJhZnQuaHRtbCNzZWMtZ2VuZXJhdG9ycmVzdW1lXG4gICAgICAgIHJldHVybiBkb25lUmVzdWx0KCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnRleHQubWV0aG9kID0gbWV0aG9kO1xuICAgICAgY29udGV4dC5hcmcgPSBhcmc7XG5cbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIHZhciBkZWxlZ2F0ZSA9IGNvbnRleHQuZGVsZWdhdGU7XG4gICAgICAgIGlmIChkZWxlZ2F0ZSkge1xuICAgICAgICAgIHZhciBkZWxlZ2F0ZVJlc3VsdCA9IG1heWJlSW52b2tlRGVsZWdhdGUoZGVsZWdhdGUsIGNvbnRleHQpO1xuICAgICAgICAgIGlmIChkZWxlZ2F0ZVJlc3VsdCkge1xuICAgICAgICAgICAgaWYgKGRlbGVnYXRlUmVzdWx0ID09PSBDb250aW51ZVNlbnRpbmVsKSBjb250aW51ZTtcbiAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZVJlc3VsdDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29udGV4dC5tZXRob2QgPT09IFwibmV4dFwiKSB7XG4gICAgICAgICAgLy8gU2V0dGluZyBjb250ZXh0Ll9zZW50IGZvciBsZWdhY3kgc3VwcG9ydCBvZiBCYWJlbCdzXG4gICAgICAgICAgLy8gZnVuY3Rpb24uc2VudCBpbXBsZW1lbnRhdGlvbi5cbiAgICAgICAgICBjb250ZXh0LnNlbnQgPSBjb250ZXh0Ll9zZW50ID0gY29udGV4dC5hcmc7XG5cbiAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgaWYgKHN0YXRlID09PSBHZW5TdGF0ZVN1c3BlbmRlZFN0YXJ0KSB7XG4gICAgICAgICAgICBzdGF0ZSA9IEdlblN0YXRlQ29tcGxldGVkO1xuICAgICAgICAgICAgdGhyb3cgY29udGV4dC5hcmc7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29udGV4dC5kaXNwYXRjaEV4Y2VwdGlvbihjb250ZXh0LmFyZyk7XG5cbiAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJyZXR1cm5cIikge1xuICAgICAgICAgIGNvbnRleHQuYWJydXB0KFwicmV0dXJuXCIsIGNvbnRleHQuYXJnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN0YXRlID0gR2VuU3RhdGVFeGVjdXRpbmc7XG5cbiAgICAgICAgdmFyIHJlY29yZCA9IHRyeUNhdGNoKGlubmVyRm4sIHNlbGYsIGNvbnRleHQpO1xuICAgICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwibm9ybWFsXCIpIHtcbiAgICAgICAgICAvLyBJZiBhbiBleGNlcHRpb24gaXMgdGhyb3duIGZyb20gaW5uZXJGbiwgd2UgbGVhdmUgc3RhdGUgPT09XG4gICAgICAgICAgLy8gR2VuU3RhdGVFeGVjdXRpbmcgYW5kIGxvb3AgYmFjayBmb3IgYW5vdGhlciBpbnZvY2F0aW9uLlxuICAgICAgICAgIHN0YXRlID0gY29udGV4dC5kb25lXG4gICAgICAgICAgICA/IEdlblN0YXRlQ29tcGxldGVkXG4gICAgICAgICAgICA6IEdlblN0YXRlU3VzcGVuZGVkWWllbGQ7XG5cbiAgICAgICAgICBpZiAocmVjb3JkLmFyZyA9PT0gQ29udGludWVTZW50aW5lbCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHZhbHVlOiByZWNvcmQuYXJnLFxuICAgICAgICAgICAgZG9uZTogY29udGV4dC5kb25lXG4gICAgICAgICAgfTtcblxuICAgICAgICB9IGVsc2UgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICBzdGF0ZSA9IEdlblN0YXRlQ29tcGxldGVkO1xuICAgICAgICAgIC8vIERpc3BhdGNoIHRoZSBleGNlcHRpb24gYnkgbG9vcGluZyBiYWNrIGFyb3VuZCB0byB0aGVcbiAgICAgICAgICAvLyBjb250ZXh0LmRpc3BhdGNoRXhjZXB0aW9uKGNvbnRleHQuYXJnKSBjYWxsIGFib3ZlLlxuICAgICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiO1xuICAgICAgICAgIGNvbnRleHQuYXJnID0gcmVjb3JkLmFyZztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICAvLyBDYWxsIGRlbGVnYXRlLml0ZXJhdG9yW2NvbnRleHQubWV0aG9kXShjb250ZXh0LmFyZykgYW5kIGhhbmRsZSB0aGVcbiAgLy8gcmVzdWx0LCBlaXRoZXIgYnkgcmV0dXJuaW5nIGEgeyB2YWx1ZSwgZG9uZSB9IHJlc3VsdCBmcm9tIHRoZVxuICAvLyBkZWxlZ2F0ZSBpdGVyYXRvciwgb3IgYnkgbW9kaWZ5aW5nIGNvbnRleHQubWV0aG9kIGFuZCBjb250ZXh0LmFyZyxcbiAgLy8gc2V0dGluZyBjb250ZXh0LmRlbGVnYXRlIHRvIG51bGwsIGFuZCByZXR1cm5pbmcgdGhlIENvbnRpbnVlU2VudGluZWwuXG4gIGZ1bmN0aW9uIG1heWJlSW52b2tlRGVsZWdhdGUoZGVsZWdhdGUsIGNvbnRleHQpIHtcbiAgICB2YXIgbWV0aG9kID0gZGVsZWdhdGUuaXRlcmF0b3JbY29udGV4dC5tZXRob2RdO1xuICAgIGlmIChtZXRob2QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gQSAudGhyb3cgb3IgLnJldHVybiB3aGVuIHRoZSBkZWxlZ2F0ZSBpdGVyYXRvciBoYXMgbm8gLnRocm93XG4gICAgICAvLyBtZXRob2QgYWx3YXlzIHRlcm1pbmF0ZXMgdGhlIHlpZWxkKiBsb29wLlxuICAgICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG5cbiAgICAgIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIGlmIChkZWxlZ2F0ZS5pdGVyYXRvci5yZXR1cm4pIHtcbiAgICAgICAgICAvLyBJZiB0aGUgZGVsZWdhdGUgaXRlcmF0b3IgaGFzIGEgcmV0dXJuIG1ldGhvZCwgZ2l2ZSBpdCBhXG4gICAgICAgICAgLy8gY2hhbmNlIHRvIGNsZWFuIHVwLlxuICAgICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJyZXR1cm5cIjtcbiAgICAgICAgICBjb250ZXh0LmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICBtYXliZUludm9rZURlbGVnYXRlKGRlbGVnYXRlLCBjb250ZXh0KTtcblxuICAgICAgICAgIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgICAvLyBJZiBtYXliZUludm9rZURlbGVnYXRlKGNvbnRleHQpIGNoYW5nZWQgY29udGV4dC5tZXRob2QgZnJvbVxuICAgICAgICAgICAgLy8gXCJyZXR1cm5cIiB0byBcInRocm93XCIsIGxldCB0aGF0IG92ZXJyaWRlIHRoZSBUeXBlRXJyb3IgYmVsb3cuXG4gICAgICAgICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIjtcbiAgICAgICAgY29udGV4dC5hcmcgPSBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgIFwiVGhlIGl0ZXJhdG9yIGRvZXMgbm90IHByb3ZpZGUgYSAndGhyb3cnIG1ldGhvZFwiKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuXG4gICAgdmFyIHJlY29yZCA9IHRyeUNhdGNoKG1ldGhvZCwgZGVsZWdhdGUuaXRlcmF0b3IsIGNvbnRleHQuYXJnKTtcblxuICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICBjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIjtcbiAgICAgIGNvbnRleHQuYXJnID0gcmVjb3JkLmFyZztcbiAgICAgIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsO1xuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuXG4gICAgdmFyIGluZm8gPSByZWNvcmQuYXJnO1xuXG4gICAgaWYgKCEgaW5mbykge1xuICAgICAgY29udGV4dC5tZXRob2QgPSBcInRocm93XCI7XG4gICAgICBjb250ZXh0LmFyZyA9IG5ldyBUeXBlRXJyb3IoXCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdFwiKTtcbiAgICAgIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsO1xuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuXG4gICAgaWYgKGluZm8uZG9uZSkge1xuICAgICAgLy8gQXNzaWduIHRoZSByZXN1bHQgb2YgdGhlIGZpbmlzaGVkIGRlbGVnYXRlIHRvIHRoZSB0ZW1wb3JhcnlcbiAgICAgIC8vIHZhcmlhYmxlIHNwZWNpZmllZCBieSBkZWxlZ2F0ZS5yZXN1bHROYW1lIChzZWUgZGVsZWdhdGVZaWVsZCkuXG4gICAgICBjb250ZXh0W2RlbGVnYXRlLnJlc3VsdE5hbWVdID0gaW5mby52YWx1ZTtcblxuICAgICAgLy8gUmVzdW1lIGV4ZWN1dGlvbiBhdCB0aGUgZGVzaXJlZCBsb2NhdGlvbiAoc2VlIGRlbGVnYXRlWWllbGQpLlxuICAgICAgY29udGV4dC5uZXh0ID0gZGVsZWdhdGUubmV4dExvYztcblxuICAgICAgLy8gSWYgY29udGV4dC5tZXRob2Qgd2FzIFwidGhyb3dcIiBidXQgdGhlIGRlbGVnYXRlIGhhbmRsZWQgdGhlXG4gICAgICAvLyBleGNlcHRpb24sIGxldCB0aGUgb3V0ZXIgZ2VuZXJhdG9yIHByb2NlZWQgbm9ybWFsbHkuIElmXG4gICAgICAvLyBjb250ZXh0Lm1ldGhvZCB3YXMgXCJuZXh0XCIsIGZvcmdldCBjb250ZXh0LmFyZyBzaW5jZSBpdCBoYXMgYmVlblxuICAgICAgLy8gXCJjb25zdW1lZFwiIGJ5IHRoZSBkZWxlZ2F0ZSBpdGVyYXRvci4gSWYgY29udGV4dC5tZXRob2Qgd2FzXG4gICAgICAvLyBcInJldHVyblwiLCBhbGxvdyB0aGUgb3JpZ2luYWwgLnJldHVybiBjYWxsIHRvIGNvbnRpbnVlIGluIHRoZVxuICAgICAgLy8gb3V0ZXIgZ2VuZXJhdG9yLlxuICAgICAgaWYgKGNvbnRleHQubWV0aG9kICE9PSBcInJldHVyblwiKSB7XG4gICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJuZXh0XCI7XG4gICAgICAgIGNvbnRleHQuYXJnID0gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFJlLXlpZWxkIHRoZSByZXN1bHQgcmV0dXJuZWQgYnkgdGhlIGRlbGVnYXRlIG1ldGhvZC5cbiAgICAgIHJldHVybiBpbmZvO1xuICAgIH1cblxuICAgIC8vIFRoZSBkZWxlZ2F0ZSBpdGVyYXRvciBpcyBmaW5pc2hlZCwgc28gZm9yZ2V0IGl0IGFuZCBjb250aW51ZSB3aXRoXG4gICAgLy8gdGhlIG91dGVyIGdlbmVyYXRvci5cbiAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcbiAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgfVxuXG4gIC8vIERlZmluZSBHZW5lcmF0b3IucHJvdG90eXBlLntuZXh0LHRocm93LHJldHVybn0gaW4gdGVybXMgb2YgdGhlXG4gIC8vIHVuaWZpZWQgLl9pbnZva2UgaGVscGVyIG1ldGhvZC5cbiAgZGVmaW5lSXRlcmF0b3JNZXRob2RzKEdwKTtcblxuICBHcFt0b1N0cmluZ1RhZ1N5bWJvbF0gPSBcIkdlbmVyYXRvclwiO1xuXG4gIC8vIEEgR2VuZXJhdG9yIHNob3VsZCBhbHdheXMgcmV0dXJuIGl0c2VsZiBhcyB0aGUgaXRlcmF0b3Igb2JqZWN0IHdoZW4gdGhlXG4gIC8vIEBAaXRlcmF0b3IgZnVuY3Rpb24gaXMgY2FsbGVkIG9uIGl0LiBTb21lIGJyb3dzZXJzJyBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlXG4gIC8vIGl0ZXJhdG9yIHByb3RvdHlwZSBjaGFpbiBpbmNvcnJlY3RseSBpbXBsZW1lbnQgdGhpcywgY2F1c2luZyB0aGUgR2VuZXJhdG9yXG4gIC8vIG9iamVjdCB0byBub3QgYmUgcmV0dXJuZWQgZnJvbSB0aGlzIGNhbGwuIFRoaXMgZW5zdXJlcyB0aGF0IGRvZXNuJ3QgaGFwcGVuLlxuICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlZ2VuZXJhdG9yL2lzc3Vlcy8yNzQgZm9yIG1vcmUgZGV0YWlscy5cbiAgR3BbaXRlcmF0b3JTeW1ib2xdID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgR3AudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gXCJbb2JqZWN0IEdlbmVyYXRvcl1cIjtcbiAgfTtcblxuICBmdW5jdGlvbiBwdXNoVHJ5RW50cnkobG9jcykge1xuICAgIHZhciBlbnRyeSA9IHsgdHJ5TG9jOiBsb2NzWzBdIH07XG5cbiAgICBpZiAoMSBpbiBsb2NzKSB7XG4gICAgICBlbnRyeS5jYXRjaExvYyA9IGxvY3NbMV07XG4gICAgfVxuXG4gICAgaWYgKDIgaW4gbG9jcykge1xuICAgICAgZW50cnkuZmluYWxseUxvYyA9IGxvY3NbMl07XG4gICAgICBlbnRyeS5hZnRlckxvYyA9IGxvY3NbM107XG4gICAgfVxuXG4gICAgdGhpcy50cnlFbnRyaWVzLnB1c2goZW50cnkpO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVzZXRUcnlFbnRyeShlbnRyeSkge1xuICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uIHx8IHt9O1xuICAgIHJlY29yZC50eXBlID0gXCJub3JtYWxcIjtcbiAgICBkZWxldGUgcmVjb3JkLmFyZztcbiAgICBlbnRyeS5jb21wbGV0aW9uID0gcmVjb3JkO1xuICB9XG5cbiAgZnVuY3Rpb24gQ29udGV4dCh0cnlMb2NzTGlzdCkge1xuICAgIC8vIFRoZSByb290IGVudHJ5IG9iamVjdCAoZWZmZWN0aXZlbHkgYSB0cnkgc3RhdGVtZW50IHdpdGhvdXQgYSBjYXRjaFxuICAgIC8vIG9yIGEgZmluYWxseSBibG9jaykgZ2l2ZXMgdXMgYSBwbGFjZSB0byBzdG9yZSB2YWx1ZXMgdGhyb3duIGZyb21cbiAgICAvLyBsb2NhdGlvbnMgd2hlcmUgdGhlcmUgaXMgbm8gZW5jbG9zaW5nIHRyeSBzdGF0ZW1lbnQuXG4gICAgdGhpcy50cnlFbnRyaWVzID0gW3sgdHJ5TG9jOiBcInJvb3RcIiB9XTtcbiAgICB0cnlMb2NzTGlzdC5mb3JFYWNoKHB1c2hUcnlFbnRyeSwgdGhpcyk7XG4gICAgdGhpcy5yZXNldCh0cnVlKTtcbiAgfVxuXG4gIHJ1bnRpbWUua2V5cyA9IGZ1bmN0aW9uKG9iamVjdCkge1xuICAgIHZhciBrZXlzID0gW107XG4gICAgZm9yICh2YXIga2V5IGluIG9iamVjdCkge1xuICAgICAga2V5cy5wdXNoKGtleSk7XG4gICAgfVxuICAgIGtleXMucmV2ZXJzZSgpO1xuXG4gICAgLy8gUmF0aGVyIHRoYW4gcmV0dXJuaW5nIGFuIG9iamVjdCB3aXRoIGEgbmV4dCBtZXRob2QsIHdlIGtlZXBcbiAgICAvLyB0aGluZ3Mgc2ltcGxlIGFuZCByZXR1cm4gdGhlIG5leHQgZnVuY3Rpb24gaXRzZWxmLlxuICAgIHJldHVybiBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgd2hpbGUgKGtleXMubGVuZ3RoKSB7XG4gICAgICAgIHZhciBrZXkgPSBrZXlzLnBvcCgpO1xuICAgICAgICBpZiAoa2V5IGluIG9iamVjdCkge1xuICAgICAgICAgIG5leHQudmFsdWUgPSBrZXk7XG4gICAgICAgICAgbmV4dC5kb25lID0gZmFsc2U7XG4gICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gVG8gYXZvaWQgY3JlYXRpbmcgYW4gYWRkaXRpb25hbCBvYmplY3QsIHdlIGp1c3QgaGFuZyB0aGUgLnZhbHVlXG4gICAgICAvLyBhbmQgLmRvbmUgcHJvcGVydGllcyBvZmYgdGhlIG5leHQgZnVuY3Rpb24gb2JqZWN0IGl0c2VsZi4gVGhpc1xuICAgICAgLy8gYWxzbyBlbnN1cmVzIHRoYXQgdGhlIG1pbmlmaWVyIHdpbGwgbm90IGFub255bWl6ZSB0aGUgZnVuY3Rpb24uXG4gICAgICBuZXh0LmRvbmUgPSB0cnVlO1xuICAgICAgcmV0dXJuIG5leHQ7XG4gICAgfTtcbiAgfTtcblxuICBmdW5jdGlvbiB2YWx1ZXMoaXRlcmFibGUpIHtcbiAgICBpZiAoaXRlcmFibGUpIHtcbiAgICAgIHZhciBpdGVyYXRvck1ldGhvZCA9IGl0ZXJhYmxlW2l0ZXJhdG9yU3ltYm9sXTtcbiAgICAgIGlmIChpdGVyYXRvck1ldGhvZCkge1xuICAgICAgICByZXR1cm4gaXRlcmF0b3JNZXRob2QuY2FsbChpdGVyYWJsZSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgaXRlcmFibGUubmV4dCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHJldHVybiBpdGVyYWJsZTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFpc05hTihpdGVyYWJsZS5sZW5ndGgpKSB7XG4gICAgICAgIHZhciBpID0gLTEsIG5leHQgPSBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgIHdoaWxlICgrK2kgPCBpdGVyYWJsZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmIChoYXNPd24uY2FsbChpdGVyYWJsZSwgaSkpIHtcbiAgICAgICAgICAgICAgbmV4dC52YWx1ZSA9IGl0ZXJhYmxlW2ldO1xuICAgICAgICAgICAgICBuZXh0LmRvbmUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbmV4dC52YWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICBuZXh0LmRvbmUgPSB0cnVlO1xuXG4gICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIG5leHQubmV4dCA9IG5leHQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmV0dXJuIGFuIGl0ZXJhdG9yIHdpdGggbm8gdmFsdWVzLlxuICAgIHJldHVybiB7IG5leHQ6IGRvbmVSZXN1bHQgfTtcbiAgfVxuICBydW50aW1lLnZhbHVlcyA9IHZhbHVlcztcblxuICBmdW5jdGlvbiBkb25lUmVzdWx0KCkge1xuICAgIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfTtcbiAgfVxuXG4gIENvbnRleHQucHJvdG90eXBlID0ge1xuICAgIGNvbnN0cnVjdG9yOiBDb250ZXh0LFxuXG4gICAgcmVzZXQ6IGZ1bmN0aW9uKHNraXBUZW1wUmVzZXQpIHtcbiAgICAgIHRoaXMucHJldiA9IDA7XG4gICAgICB0aGlzLm5leHQgPSAwO1xuICAgICAgLy8gUmVzZXR0aW5nIGNvbnRleHQuX3NlbnQgZm9yIGxlZ2FjeSBzdXBwb3J0IG9mIEJhYmVsJ3NcbiAgICAgIC8vIGZ1bmN0aW9uLnNlbnQgaW1wbGVtZW50YXRpb24uXG4gICAgICB0aGlzLnNlbnQgPSB0aGlzLl9zZW50ID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5kb25lID0gZmFsc2U7XG4gICAgICB0aGlzLmRlbGVnYXRlID0gbnVsbDtcblxuICAgICAgdGhpcy5tZXRob2QgPSBcIm5leHRcIjtcbiAgICAgIHRoaXMuYXJnID0gdW5kZWZpbmVkO1xuXG4gICAgICB0aGlzLnRyeUVudHJpZXMuZm9yRWFjaChyZXNldFRyeUVudHJ5KTtcblxuICAgICAgaWYgKCFza2lwVGVtcFJlc2V0KSB7XG4gICAgICAgIGZvciAodmFyIG5hbWUgaW4gdGhpcykge1xuICAgICAgICAgIC8vIE5vdCBzdXJlIGFib3V0IHRoZSBvcHRpbWFsIG9yZGVyIG9mIHRoZXNlIGNvbmRpdGlvbnM6XG4gICAgICAgICAgaWYgKG5hbWUuY2hhckF0KDApID09PSBcInRcIiAmJlxuICAgICAgICAgICAgICBoYXNPd24uY2FsbCh0aGlzLCBuYW1lKSAmJlxuICAgICAgICAgICAgICAhaXNOYU4oK25hbWUuc2xpY2UoMSkpKSB7XG4gICAgICAgICAgICB0aGlzW25hbWVdID0gdW5kZWZpbmVkO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzdG9wOiBmdW5jdGlvbigpIHtcbiAgICAgIHRoaXMuZG9uZSA9IHRydWU7XG5cbiAgICAgIHZhciByb290RW50cnkgPSB0aGlzLnRyeUVudHJpZXNbMF07XG4gICAgICB2YXIgcm9vdFJlY29yZCA9IHJvb3RFbnRyeS5jb21wbGV0aW9uO1xuICAgICAgaWYgKHJvb3RSZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIHRocm93IHJvb3RSZWNvcmQuYXJnO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5ydmFsO1xuICAgIH0sXG5cbiAgICBkaXNwYXRjaEV4Y2VwdGlvbjogZnVuY3Rpb24oZXhjZXB0aW9uKSB7XG4gICAgICBpZiAodGhpcy5kb25lKSB7XG4gICAgICAgIHRocm93IGV4Y2VwdGlvbjtcbiAgICAgIH1cblxuICAgICAgdmFyIGNvbnRleHQgPSB0aGlzO1xuICAgICAgZnVuY3Rpb24gaGFuZGxlKGxvYywgY2F1Z2h0KSB7XG4gICAgICAgIHJlY29yZC50eXBlID0gXCJ0aHJvd1wiO1xuICAgICAgICByZWNvcmQuYXJnID0gZXhjZXB0aW9uO1xuICAgICAgICBjb250ZXh0Lm5leHQgPSBsb2M7XG5cbiAgICAgICAgaWYgKGNhdWdodCkge1xuICAgICAgICAgIC8vIElmIHRoZSBkaXNwYXRjaGVkIGV4Y2VwdGlvbiB3YXMgY2F1Z2h0IGJ5IGEgY2F0Y2ggYmxvY2ssXG4gICAgICAgICAgLy8gdGhlbiBsZXQgdGhhdCBjYXRjaCBibG9jayBoYW5kbGUgdGhlIGV4Y2VwdGlvbiBub3JtYWxseS5cbiAgICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgICAgIGNvbnRleHQuYXJnID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICEhIGNhdWdodDtcbiAgICAgIH1cblxuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uO1xuXG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPT09IFwicm9vdFwiKSB7XG4gICAgICAgICAgLy8gRXhjZXB0aW9uIHRocm93biBvdXRzaWRlIG9mIGFueSB0cnkgYmxvY2sgdGhhdCBjb3VsZCBoYW5kbGVcbiAgICAgICAgICAvLyBpdCwgc28gc2V0IHRoZSBjb21wbGV0aW9uIHZhbHVlIG9mIHRoZSBlbnRpcmUgZnVuY3Rpb24gdG9cbiAgICAgICAgICAvLyB0aHJvdyB0aGUgZXhjZXB0aW9uLlxuICAgICAgICAgIHJldHVybiBoYW5kbGUoXCJlbmRcIik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZW50cnkudHJ5TG9jIDw9IHRoaXMucHJldikge1xuICAgICAgICAgIHZhciBoYXNDYXRjaCA9IGhhc093bi5jYWxsKGVudHJ5LCBcImNhdGNoTG9jXCIpO1xuICAgICAgICAgIHZhciBoYXNGaW5hbGx5ID0gaGFzT3duLmNhbGwoZW50cnksIFwiZmluYWxseUxvY1wiKTtcblxuICAgICAgICAgIGlmIChoYXNDYXRjaCAmJiBoYXNGaW5hbGx5KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgZW50cnkuY2F0Y2hMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5jYXRjaExvYywgdHJ1ZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5maW5hbGx5TG9jKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0gZWxzZSBpZiAoaGFzQ2F0Y2gpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBlbnRyeS5jYXRjaExvYykge1xuICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlKGVudHJ5LmNhdGNoTG9jLCB0cnVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0gZWxzZSBpZiAoaGFzRmluYWxseSkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5maW5hbGx5TG9jKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ0cnkgc3RhdGVtZW50IHdpdGhvdXQgY2F0Y2ggb3IgZmluYWxseVwiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYWJydXB0OiBmdW5jdGlvbih0eXBlLCBhcmcpIHtcbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICBpZiAoZW50cnkudHJ5TG9jIDw9IHRoaXMucHJldiAmJlxuICAgICAgICAgICAgaGFzT3duLmNhbGwoZW50cnksIFwiZmluYWxseUxvY1wiKSAmJlxuICAgICAgICAgICAgdGhpcy5wcmV2IDwgZW50cnkuZmluYWxseUxvYykge1xuICAgICAgICAgIHZhciBmaW5hbGx5RW50cnkgPSBlbnRyeTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZmluYWxseUVudHJ5ICYmXG4gICAgICAgICAgKHR5cGUgPT09IFwiYnJlYWtcIiB8fFxuICAgICAgICAgICB0eXBlID09PSBcImNvbnRpbnVlXCIpICYmXG4gICAgICAgICAgZmluYWxseUVudHJ5LnRyeUxvYyA8PSBhcmcgJiZcbiAgICAgICAgICBhcmcgPD0gZmluYWxseUVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgLy8gSWdub3JlIHRoZSBmaW5hbGx5IGVudHJ5IGlmIGNvbnRyb2wgaXMgbm90IGp1bXBpbmcgdG8gYVxuICAgICAgICAvLyBsb2NhdGlvbiBvdXRzaWRlIHRoZSB0cnkvY2F0Y2ggYmxvY2suXG4gICAgICAgIGZpbmFsbHlFbnRyeSA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIHZhciByZWNvcmQgPSBmaW5hbGx5RW50cnkgPyBmaW5hbGx5RW50cnkuY29tcGxldGlvbiA6IHt9O1xuICAgICAgcmVjb3JkLnR5cGUgPSB0eXBlO1xuICAgICAgcmVjb3JkLmFyZyA9IGFyZztcblxuICAgICAgaWYgKGZpbmFsbHlFbnRyeSkge1xuICAgICAgICB0aGlzLm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgICB0aGlzLm5leHQgPSBmaW5hbGx5RW50cnkuZmluYWxseUxvYztcbiAgICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLmNvbXBsZXRlKHJlY29yZCk7XG4gICAgfSxcblxuICAgIGNvbXBsZXRlOiBmdW5jdGlvbihyZWNvcmQsIGFmdGVyTG9jKSB7XG4gICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICB0aHJvdyByZWNvcmQuYXJnO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwiYnJlYWtcIiB8fFxuICAgICAgICAgIHJlY29yZC50eXBlID09PSBcImNvbnRpbnVlXCIpIHtcbiAgICAgICAgdGhpcy5uZXh0ID0gcmVjb3JkLmFyZztcbiAgICAgIH0gZWxzZSBpZiAocmVjb3JkLnR5cGUgPT09IFwicmV0dXJuXCIpIHtcbiAgICAgICAgdGhpcy5ydmFsID0gdGhpcy5hcmcgPSByZWNvcmQuYXJnO1xuICAgICAgICB0aGlzLm1ldGhvZCA9IFwicmV0dXJuXCI7XG4gICAgICAgIHRoaXMubmV4dCA9IFwiZW5kXCI7XG4gICAgICB9IGVsc2UgaWYgKHJlY29yZC50eXBlID09PSBcIm5vcm1hbFwiICYmIGFmdGVyTG9jKSB7XG4gICAgICAgIHRoaXMubmV4dCA9IGFmdGVyTG9jO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICB9LFxuXG4gICAgZmluaXNoOiBmdW5jdGlvbihmaW5hbGx5TG9jKSB7XG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcbiAgICAgICAgaWYgKGVudHJ5LmZpbmFsbHlMb2MgPT09IGZpbmFsbHlMb2MpIHtcbiAgICAgICAgICB0aGlzLmNvbXBsZXRlKGVudHJ5LmNvbXBsZXRpb24sIGVudHJ5LmFmdGVyTG9jKTtcbiAgICAgICAgICByZXNldFRyeUVudHJ5KGVudHJ5KTtcbiAgICAgICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBcImNhdGNoXCI6IGZ1bmN0aW9uKHRyeUxvYykge1xuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPT09IHRyeUxvYykge1xuICAgICAgICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uO1xuICAgICAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgICB2YXIgdGhyb3duID0gcmVjb3JkLmFyZztcbiAgICAgICAgICAgIHJlc2V0VHJ5RW50cnkoZW50cnkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdGhyb3duO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFRoZSBjb250ZXh0LmNhdGNoIG1ldGhvZCBtdXN0IG9ubHkgYmUgY2FsbGVkIHdpdGggYSBsb2NhdGlvblxuICAgICAgLy8gYXJndW1lbnQgdGhhdCBjb3JyZXNwb25kcyB0byBhIGtub3duIGNhdGNoIGJsb2NrLlxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaWxsZWdhbCBjYXRjaCBhdHRlbXB0XCIpO1xuICAgIH0sXG5cbiAgICBkZWxlZ2F0ZVlpZWxkOiBmdW5jdGlvbihpdGVyYWJsZSwgcmVzdWx0TmFtZSwgbmV4dExvYykge1xuICAgICAgdGhpcy5kZWxlZ2F0ZSA9IHtcbiAgICAgICAgaXRlcmF0b3I6IHZhbHVlcyhpdGVyYWJsZSksXG4gICAgICAgIHJlc3VsdE5hbWU6IHJlc3VsdE5hbWUsXG4gICAgICAgIG5leHRMb2M6IG5leHRMb2NcbiAgICAgIH07XG5cbiAgICAgIGlmICh0aGlzLm1ldGhvZCA9PT0gXCJuZXh0XCIpIHtcbiAgICAgICAgLy8gRGVsaWJlcmF0ZWx5IGZvcmdldCB0aGUgbGFzdCBzZW50IHZhbHVlIHNvIHRoYXQgd2UgZG9uJ3RcbiAgICAgICAgLy8gYWNjaWRlbnRhbGx5IHBhc3MgaXQgb24gdG8gdGhlIGRlbGVnYXRlLlxuICAgICAgICB0aGlzLmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuICB9O1xufSkoXG4gIC8vIEFtb25nIHRoZSB2YXJpb3VzIHRyaWNrcyBmb3Igb2J0YWluaW5nIGEgcmVmZXJlbmNlIHRvIHRoZSBnbG9iYWxcbiAgLy8gb2JqZWN0LCB0aGlzIHNlZW1zIHRvIGJlIHRoZSBtb3N0IHJlbGlhYmxlIHRlY2huaXF1ZSB0aGF0IGRvZXMgbm90XG4gIC8vIHVzZSBpbmRpcmVjdCBldmFsICh3aGljaCB2aW9sYXRlcyBDb250ZW50IFNlY3VyaXR5IFBvbGljeSkuXG4gIHR5cGVvZiBnbG9iYWwgPT09IFwib2JqZWN0XCIgPyBnbG9iYWwgOlxuICB0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiID8gd2luZG93IDpcbiAgdHlwZW9mIHNlbGYgPT09IFwib2JqZWN0XCIgPyBzZWxmIDogdGhpc1xuKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///329\n')},function(module,exports,__webpack_require__){eval("__webpack_require__(331);\nmodule.exports = __webpack_require__(18).RegExp.escape;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvZm4vcmVnZXhwL2VzY2FwZS5qcz9mZDVhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLG1CQUFPLENBQUMsR0FBa0M7QUFDMUMsaUJBQWlCLG1CQUFPLENBQUMsRUFBcUIiLCJmaWxlIjoiMzMwLmpzIiwic291cmNlc0NvbnRlbnQiOlsicmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9jb3JlLnJlZ2V4cC5lc2NhcGUnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9fY29yZScpLlJlZ0V4cC5lc2NhcGU7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///330\n")},function(module,exports,__webpack_require__){eval("// https://github.com/benjamingr/RexExp.escape\nvar $export = __webpack_require__(0);\nvar $re = __webpack_require__(332)(/[\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n\n$export($export.S, 'RegExp', { escape: function escape(it) { return $re(it); } });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9jb3JlLnJlZ2V4cC5lc2NhcGUuanM/ZDBjYSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLFVBQVUsbUJBQU8sQ0FBQyxHQUFhLG9CQUFvQjs7QUFFbkQsOEJBQThCLDhCQUE4QixnQkFBZ0IsRUFBRSxFQUFFIiwiZmlsZSI6IjMzMS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9iZW5qYW1pbmdyL1JleEV4cC5lc2NhcGVcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHJlID0gcmVxdWlyZSgnLi9fcmVwbGFjZXInKSgvW1xcXFxeJCorPy4oKXxbXFxde31dL2csICdcXFxcJCYnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWdFeHAnLCB7IGVzY2FwZTogZnVuY3Rpb24gZXNjYXBlKGl0KSB7IHJldHVybiAkcmUoaXQpOyB9IH0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///331\n")},function(module,exports){eval("module.exports = function (regExp, replace) {\n var replacer = replace === Object(replace) ? function (part) {\n return replace[part];\n } : replace;\n return function (it) {\n return String(it).replace(regExp, replacer);\n };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcmVwbGFjZXIuanM/YWJkNyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMzMyLmpzIiwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAocmVnRXhwLCByZXBsYWNlKSB7XG4gIHZhciByZXBsYWNlciA9IHJlcGxhY2UgPT09IE9iamVjdChyZXBsYWNlKSA/IGZ1bmN0aW9uIChwYXJ0KSB7XG4gICAgcmV0dXJuIHJlcGxhY2VbcGFydF07XG4gIH0gOiByZXBsYWNlO1xuICByZXR1cm4gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIFN0cmluZyhpdCkucmVwbGFjZShyZWdFeHAsIHJlcGxhY2VyKTtcbiAgfTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///332\n")},function(module,__webpack_exports__,__webpack_require__){"use strict";eval('// ESM COMPAT FLAG\n__webpack_require__.r(__webpack_exports__);\n\n// CONCATENATED MODULE: ./src/core/Deferred.js\nfunction _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }\n\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\n\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."); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction _wrapNativeSuper(Class) { var _cache = typeof Map === "function" ? new Map() : undefined; _wrapNativeSuper = function _wrapNativeSuper(Class) { if (Class === null || !_isNativeFunction(Class)) return Class; if (typeof Class !== "function") { throw new TypeError("Super expression must either be null or a function"); } if (typeof _cache !== "undefined") { if (_cache.has(Class)) return _cache.get(Class); _cache.set(Class, Wrapper); } function Wrapper() { return _construct(Class, arguments, _getPrototypeOf(this).constructor); } Wrapper.prototype = Object.create(Class.prototype, { constructor: { value: Wrapper, enumerable: false, writable: true, configurable: true } }); return _setPrototypeOf(Wrapper, Class); }; return _wrapNativeSuper(Class); }\n\nfunction _construct(Parent, args, Class) { if (_isNativeReflectConstruct()) { _construct = Reflect.construct; } else { _construct = function _construct(Parent, args, Class) { var a = [null]; a.push.apply(a, args); var Constructor = Function.bind.apply(Parent, a); var instance = new Constructor(); if (Class) _setPrototypeOf(instance, Class.prototype); return instance; }; } return _construct.apply(null, arguments); }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _isNativeFunction(fn) { return Function.toString.call(fn).indexOf("[native code]") !== -1; }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/**\r\n * The built-in class for asynchronous Promises.\r\n * @external Promise\r\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise\r\n */\n\n/**\r\n * A Promise object that can be resolved, rejected or canceled at any time by the\r\n * user.\r\n *\r\n * @extends external:Promise\r\n */\nvar Deferred = /*#__PURE__*/function (_Promise) {\n _inherits(Deferred, _Promise);\n\n var _super = _createSuper(Deferred);\n\n /**\r\n * @constructor\r\n *\r\n * @param {Function} [executable=() => {}] - The function to be executed by the\r\n * constructor, during the process of constructing the promise. The signature\r\n * of this is expected to be: executable( resolutionFunc, rejectionFunc, cancellationFunc ).\r\n * @param {Function=} onResolve - Optional function to execute once the promise\r\n * is resolved.\r\n * @param {Function=} onReject - Optional function to execute once the promise\r\n * is rejected.\r\n * @param {Function=} onCancel - Optional function to execute if the user cancels\r\n * the promise. Canceling results in the promise having a status of \'resolved\'.\r\n */\n function Deferred() {\n var _this;\n\n var executable = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : function () {};\n var onResolve = arguments.length > 1 ? arguments[1] : undefined;\n var onReject = arguments.length > 2 ? arguments[2] : undefined;\n var onCancel = arguments.length > 3 ? arguments[3] : undefined;\n\n _classCallCheck(this, Deferred);\n\n if (typeof executable !== \'function\') {\n throw new Error("Cannot create new Deferred. Executable must be a function.");\n }\n\n if (typeof onResolve !== \'undefined\' && typeof onResolve !== \'function\') {\n throw new Error("Cannot create new Deferred. OnResolve must be a function.");\n }\n\n if (typeof onReject !== \'undefined\' && typeof onReject !== \'function\') {\n throw new Error("Cannot create new Deferred. OnReject must be a function.");\n }\n\n if (typeof onCancel !== \'undefined\' && typeof onCancel !== \'function\') {\n throw new Error("Cannot create new Deferred. OnCancel must be a function.");\n }\n\n var res;\n var rej;\n var cancel;\n var status = {\n resolved: false,\n rejected: false,\n canceled: false,\n pending: true\n };\n _this = _super.call(this, function (resolve, reject) {\n // Store the resolver\n res = function res(value) {\n if (status.pending) {\n status.resolved = true;\n status.pending = false;\n\n if (typeof onResolve === \'function\') {\n value = onResolve(value);\n }\n\n return resolve(value);\n }\n }; // Store the rejecter\n\n\n rej = function rej(value) {\n if (status.pending) {\n status.rejected = true;\n status.pending = false;\n\n if (typeof onReject === \'function\') {\n value = onReject(value);\n }\n\n return reject(value);\n }\n }; // Store the canceler\n\n\n cancel = function cancel(value) {\n if (status.pending) {\n status.canceled = true;\n status.pending = false;\n\n if (typeof onCancel === \'function\') {\n value = onCancel(value);\n }\n\n return resolve(value);\n }\n }; // Run the executable with custom resolver and rejecter\n\n\n executable(res, rej, cancel);\n });\n _this._status = status;\n _this._resolve = res;\n _this._reject = rej;\n _this._cancel = cancel;\n _this._executable = executable;\n return _this;\n }\n /**\r\n * Gets the resolved state of the promise.\r\n *\r\n * @readonly\r\n */\n\n\n _createClass(Deferred, [{\n key: "resolved",\n get: function get() {\n return this._status.resolved;\n }\n /**\r\n * Gets the rejected state of the promise.\r\n *\r\n * @readonly\r\n */\n\n }, {\n key: "rejected",\n get: function get() {\n return this._status.rejected;\n }\n /**\r\n * Gets the canceled state of the promise.\r\n *\r\n * @readonly\r\n */\n\n }, {\n key: "canceled",\n get: function get() {\n return this._status.canceled;\n }\n /**\r\n * Gets the pending state of the promise.\r\n *\r\n * @readonly\r\n */\n\n }, {\n key: "pending",\n get: function get() {\n return this._status.pending;\n }\n /**\r\n * Force the promise to resolve.\r\n *\r\n * @param {any=} value - Value to pass to the resolver.\r\n *\r\n * @returns {any} - The return value of the resolver function.\r\n */\n\n }, {\n key: "resolve",\n value: function resolve(value) {\n return this._resolve(value);\n }\n /**\r\n * Force the promise to reject.\r\n *\r\n * @param {any=} value - Value to pass to the rejecter.\r\n *\r\n * @returns {any} - The return value of the rejecter function.\r\n */\n\n }, {\n key: "reject",\n value: function reject(value) {\n return this._reject(value);\n }\n /**\r\n * Force the promise to resolve and set the canceled state to true.\r\n *\r\n * @param {any=} value - Value to pass to the canceller.\r\n *\r\n * @returns {any} - The return value of the canceller function.\r\n */\n\n }, {\n key: "cancel",\n value: function cancel(value) {\n return this._cancel(value);\n }\n /**\r\n * Run the promise function to try to resolve the promise. Promise must be\r\n * pending.\r\n *\r\n * @param {...any} args - Optional arguments to pass after resolve and reject.\r\n */\n\n }, {\n key: "execute",\n value: function execute() {\n if (this.pending) {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n this._executable.apply(this, [this._resolve, this._reject, this._cancel].concat(args));\n }\n }\n /**\r\n * Return a canceled deferred promise.\r\n *\r\n * @param {any=} value - Value to cancel the promise with.\r\n *\r\n * @returns {Deferred}\r\n */\n\n }], [{\n key: "cancel",\n value: function cancel(value) {\n return new Deferred(function (_resolve, _reject, cancel) {\n cancel(value);\n });\n }\n /**\r\n * Return a new Deferred promise that will resolve or reject once all promises\r\n * in the input array have been resolved or one promise is canceled or rejected.\r\n * Promises in the array that are Deferred promises will be manually resolved,\r\n * rejected or canceled when calling resolve, reject or cancel on the return promise.\r\n *\r\n * @param {Array.} iterable - An iterable such as an array.\r\n * @param {Function=} onResolve - Optional function to execute once the promise\r\n * is resolved.\r\n * @param {Function=} onReject - Optional function to execute once the promise\r\n * is rejected.\r\n * @param {Function=} onCancel - Optional function to execute if the user cancels\r\n * the promise. Canceling results in the promise having a status of \'canceled\'.\r\n *\r\n * @returns Deferred\r\n */\n\n }, {\n key: "all",\n value: function all(iterable, onResolve, onReject, onCancel) {\n if (iterable == null || typeof iterable[Symbol.iterator] !== \'function\') {\n var e = "Cannot execute Deferred.all. First argument must be iterable.";\n\n if (typeof onReject === \'function\') {\n e = onReject(e);\n }\n\n return Deferred.reject(e);\n }\n\n var array = _toConsumableArray(iterable);\n\n var deferred = array.filter(function (item) {\n return item instanceof Deferred;\n });\n var result = new Deferred(undefined, function (resolveValue) {\n deferred.forEach(function (item) {\n item.resolve(resolveValue);\n });\n deferred.length = 0;\n\n if (typeof onResolve === \'function\') {\n return onResolve(resolveValue);\n } else {\n return resolveValue;\n }\n }, function (error) {\n deferred.forEach(function (item) {\n item.reject(error);\n });\n deferred.length = 0;\n\n if (typeof onReject === \'function\') {\n return onReject(error);\n } else {\n return error;\n }\n }, function (cancelValue) {\n deferred.forEach(function (item) {\n item.cancel(cancelValue);\n });\n deferred.length = 0;\n\n if (typeof onCancel === \'function\') {\n return onCancel(cancelValue);\n } else {\n return cancelValue;\n }\n });\n var numItems = array.length;\n var itemTracker = {\n failed: false,\n numResolved: 0,\n resolutions: []\n };\n array.forEach(function (item, index) {\n if (itemTracker.failed) {\n return;\n } else if (!(item instanceof Promise)) {\n itemTracker.resolutions[index] = item;\n itemTracker.numResolved += 1;\n\n if (itemTracker.numResolved === numItems) {\n result.resolve(itemTracker.resolutions);\n }\n\n return;\n }\n\n item.then(function (value) {\n if (!itemTracker.failed && !item.canceled) {\n itemTracker.resolutions[index] = value;\n itemTracker.numResolved += 1;\n\n if (itemTracker.numResolved === numItems) {\n result.resolve(itemTracker.resolutions);\n }\n } else if (!itemTracker.failed) {\n itemTracker.failed = true;\n result.cancel(value);\n }\n }, function (error) {\n if (!itemTracker.failed) {\n itemTracker.failed = true;\n result.reject(error);\n }\n });\n });\n return result;\n }\n }]);\n\n return Deferred;\n}( /*#__PURE__*/_wrapNativeSuper(Promise));\n\n/* harmony default export */ var core_Deferred = (Deferred);\n// CONCATENATED MODULE: ./src/core/Utils.js\nfunction Utils_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction Utils_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction Utils_createClass(Constructor, protoProps, staticProps) { if (protoProps) Utils_defineProperties(Constructor.prototype, protoProps); if (staticProps) Utils_defineProperties(Constructor, staticProps); return Constructor; }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/**\r\n * A collection of useful generic functions.\r\n *\r\n * @hideconstructor\r\n */\n\nvar Utils_Utils = /*#__PURE__*/function () {\n function Utils() {\n Utils_classCallCheck(this, Utils);\n }\n\n Utils_createClass(Utils, null, [{\n key: "createId",\n value:\n /**\r\n * @static\r\n *\r\n * Generate a unique id\r\n *\r\n * @returns {String}\r\n */\n function createId() {\n return \'xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx\'.replace(/[xy]/g, function (c) {\n var randomNumber = Math.floor((Date.now() + Math.random() * 16) % 16);\n\n if (c === \'x\') {\n return randomNumber.toString(16);\n } // Set bit 6 and 7 to 0 and 1\n\n\n return (randomNumber & 0x3 | 0x8).toString(16);\n });\n }\n /**\r\n * @static\r\n *\r\n * Check a name string against an array of strings to determine if it is unique.\r\n * If it isn\'t, append incremented trailing integers to the end of the name\r\n * until it is unique.\r\n *\r\n * @param {string} name - String name to make unique.\r\n * @param {Array.=} nameArray - Array of string names to check agains.\r\n *\r\n * @returns {string}\r\n */\n\n }, {\n key: "getUniqueName",\n value: function getUniqueName(name) {\n var nameArray = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n\n // If the name isn\'t in the array return it right away\n if (!nameArray.includes(name)) {\n return name;\n }\n\n var nameSet = new Set(nameArray); // Separate the name into string and trailing numbers\n\n var matchGroup = name.match(/\\d*$/);\n var index = matchGroup.index;\n var baseName = name.slice(0, index);\n var increment = Number(matchGroup[0]); // Find the highest trailing number value for the base of the name\n\n nameSet.forEach(function (setName) {\n var setMatchGroup = setName.match(/\\d*$/);\n\n if (setName.slice(0, setMatchGroup.index) === baseName) {\n var setIncrement = Number(setMatchGroup[0]);\n\n if (setIncrement > increment) {\n increment = setIncrement;\n }\n }\n }); // Increment the highest trailing number and append to the name\n\n return "".concat(baseName).concat(increment + 1);\n }\n /**\r\n * Return a deferred promise that will wait a given number of seconds before\r\n * resolving. Pass delta time in milliseconds to the deferred promise\'s execute\r\n * method in an update loop to progress time.\r\n *\r\n * @param {number} [seconds=0] - Number of seconds to wait before resolving.\r\n * @param {Object=} options - Optional options object\r\n * @param {Function} [options.onFinish] - Callback to execute once the wait time\r\n * is met.\r\n * @param {Function=} options.onProgress - Callback to execute each time the wait\r\n * time progresses towards the target number of seconds. The amount of progress\r\n * as a 0-1 percentage is passed as an argument.\r\n * @param {Function=} options.onCancel - Callback to execute if the user cancels\r\n * the wait before completion.\r\n * @param {Function=} options.onError - Callback to execute if the wait stops\r\n * because an error is encountered. The error message is passed as a parameter.\r\n *\r\n * @returns {Deferred}\r\n */\n\n }, {\n key: "wait",\n value: function wait() {\n var seconds = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n\n var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n onFinish = _ref.onFinish,\n onProgress = _ref.onProgress,\n onCancel = _ref.onCancel,\n onError = _ref.onError;\n\n // Make sure seconds is numeric\n if (typeof seconds !== \'number\') {\n console.warn("Invalid seconds value ".concat(seconds, " for wait. Defaulting to 0."));\n seconds = 0;\n } // Resolve immediately if the wait time is not greater than 0\n\n\n if (seconds <= 0) {\n if (typeof onFinish === \'function\') {\n onFinish();\n }\n\n return core_Deferred.resolve();\n }\n\n var currentTime = 0;\n var totalTime = seconds * 1000; // convert to milliseconds\n // Executable to pass to Deferred, meant to be run in an update loop\n\n var onUpdate = function onUpdate(resolve, reject, _cancel) {\n var deltaTime = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;\n\n if (typeof deltaTime !== \'number\') {\n var e = new Error("Invalid property wait deltaTime. DeltaTime must be a number.");\n reject(e);\n return;\n } // Make sure time has passed\n\n\n if (deltaTime === 0) {\n return;\n } // Signal progress\n\n\n currentTime += deltaTime;\n\n if (currentTime < 0) {\n currentTime = 0;\n }\n\n if (typeof onProgress === \'function\') {\n onProgress(Math.min(currentTime / totalTime, 1));\n } // Signal completion once time is up\n\n\n if (currentTime >= totalTime) {\n resolve();\n }\n };\n\n return new core_Deferred(onUpdate, onFinish, onError, onCancel);\n }\n /**\r\n * Get a random float number between a min (inclusive) and max (exclusive) value\r\n * @param {number} min minimum value\r\n * @param {number} max maximum value\r\n * @returns {float}\r\n */\n\n }, {\n key: "getRandomFloat",\n value: function getRandomFloat(min, max) {\n return Math.random() * (max - min) + min;\n }\n /**\r\n * Get a random integer number between a min (inclusive) and max (exclusive) value\r\n * @param {number} min minimum value\r\n * @param {number} max maximum value\r\n * @returns {integer}\r\n */\n\n }, {\n key: "getRandomInt",\n value: function getRandomInt(min, max) {\n min = Math.ceil(min);\n max = Math.floor(max);\n return Math.floor(Math.random() * (max - min)) + min;\n }\n }]);\n\n return Utils;\n}();\n\n/* harmony default export */ var core_Utils = (Utils_Utils);\n// CONCATENATED MODULE: ./src/core/MathUtils.js\nfunction MathUtils_toConsumableArray(arr) { return MathUtils_arrayWithoutHoles(arr) || MathUtils_iterableToArray(arr) || MathUtils_unsupportedIterableToArray(arr) || MathUtils_nonIterableSpread(); }\n\nfunction MathUtils_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."); }\n\nfunction MathUtils_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return MathUtils_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return MathUtils_arrayLikeToArray(o, minLen); }\n\nfunction MathUtils_iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction MathUtils_arrayWithoutHoles(arr) { if (Array.isArray(arr)) return MathUtils_arrayLikeToArray(arr); }\n\nfunction MathUtils_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction MathUtils_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction MathUtils_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction MathUtils_createClass(Constructor, protoProps, staticProps) { if (protoProps) MathUtils_defineProperties(Constructor.prototype, protoProps); if (staticProps) MathUtils_defineProperties(Constructor, staticProps); return Constructor; }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\nvar RadianToDegree = 180 / Math.PI;\nvar DegreeToRadian = Math.PI / 180;\n/**\r\n * A collection of useful math functions.\r\n *\r\n * @hideconstructor\r\n */\n\nvar MathUtils = /*#__PURE__*/function () {\n function MathUtils() {\n MathUtils_classCallCheck(this, MathUtils);\n }\n\n MathUtils_createClass(MathUtils, null, [{\n key: "toDegrees",\n value:\n /**\r\n * Convert the given angle from radians to degrees.\r\n *\r\n * @param {number} radians - Angle in radians.\r\n *\r\n * @returns {number} - Angle in degrees.\r\n */\n function toDegrees(radians) {\n return radians * RadianToDegree;\n }\n /**\r\n * Convert the given angle from degrees to radians.\r\n *\r\n * @param {number} degrees - Angle in degrees.\r\n *\r\n * @returns {number} - Angle in radians.\r\n */\n\n }, {\n key: "toRadians",\n value: function toRadians(degrees) {\n return degrees * DegreeToRadian;\n }\n /**\r\n * Linearly interpolate between two values.\r\n *\r\n * @param {number} from - Start value.\r\n * @param {number} to - Target value.\r\n * @param {number} factor - 0-1 amount to interpolate between from and to.\r\n *\r\n * @returns {number}\r\n */\n\n }, {\n key: "lerp",\n value: function lerp(from, to, factor) {\n return from + (to - from) * factor;\n }\n /**\r\n * Clamp a number between 2 values.\r\n *\r\n * @param {number} value - Value to clamp.\r\n * @param {number} [min=0] - Minumum value.\r\n * @param {number} [max=1] - Maximum value.\r\n *\r\n * @returns {number}\r\n */\n\n }, {\n key: "clamp",\n value: function clamp(value) {\n var min = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var max = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;\n return Math.max(min, Math.min(value, max));\n }\n /**\r\n * Calculates the closest point on a given 2D line segement\r\n * from a given 2D point.\r\n *\r\n * @param {Array.} a - First point on line segment.\r\n * @param {Array.} b - Second point on line segment.\r\n * @param {Array.} p - 2D point.\r\n *\r\n * @returns {Array.}\r\n */\n\n }, {\n key: "closestPointOnLine",\n value: function closestPointOnLine(a, b, p) {\n var distSqr = MathUtils.distanceSquared(a, b); // Line segment is a single point\n\n if (distSqr === 0) {\n return a;\n }\n\n var t = ((p[0] - a[0]) * (b[0] - a[0]) + (p[1] - a[1]) * (b[1] - a[1])) / distSqr;\n\n var point = MathUtils_toConsumableArray(a);\n\n if (t > 1) {\n point = MathUtils_toConsumableArray(b);\n } else if (t > 0) {\n point = [a[0] + t * (b[0] - a[0]), a[1] + t * (b[1] - a[1])];\n }\n\n return point;\n }\n /**\r\n * Gets the distance squared for two 2D points.\r\n * @param {Array.} a - 2D point.\r\n * @param {Array.} b - 2D point.\r\n *\r\n * @returns {number}\r\n */\n\n }, {\n key: "distanceSquared",\n value: function distanceSquared(a, b) {\n return (a[0] - b[0]) * (a[0] - b[0]) + (a[1] - b[1]) * (a[1] - b[1]);\n }\n /**\r\n * Triangulates a set of 2D points using an implementation\r\n * of the Bowyer-Watson incremental Delaunay triangulation.\r\n *\r\n * @param {Array.>} vertices - Array of 2D points.\r\n *\r\n * @returns {Array.>} - Array of triangle indices.\r\n */\n\n }, {\n key: "getDelaunayTriangulation",\n value: function getDelaunayTriangulation(vertices) {\n if (!vertices || vertices.length < 3) {\n throw new Error("Cannot get delaunay triangulation for points ".concat(vertices, ". Input must contain at least three points."));\n }\n\n var minX = Number.POSITIVE_INFINITY;\n var minY = Number.POSITIVE_INFINITY;\n var maxX = Number.NEGATIVE_INFINITY;\n var maxY = Number.NEGATIVE_INFINITY;\n vertices.forEach(function (v) {\n minX = v[0] < minX ? v[0] : minX;\n minY = v[1] < minY ? v[1] : minY;\n maxX = v[0] > maxX ? v[0] : maxX;\n maxY = v[1] > maxY ? v[1] : maxY;\n });\n var dX = maxX - minX;\n var dY = maxY - minY;\n var midX = (minX + maxX) / 2;\n var midY = (minY + maxY) / 2;\n var dMax = dX > dY ? dX : dY;\n var superIndices = [vertices.length, vertices.length + 1, vertices.length + 2];\n var vertsWithSuper = [].concat(MathUtils_toConsumableArray(vertices), [[midX - 20 * dMax, midY - dMax], [midX, midY + 20 * dMax], [midX + 20 * dMax, midY - dMax]]);\n var superSortedIndices = MathUtils.sortPointsCCW(superIndices, vertsWithSuper);\n var superTriangle = {\n indices: superSortedIndices,\n edges: [[superSortedIndices[0], superSortedIndices[1]], [superSortedIndices[1], superSortedIndices[2]], [superSortedIndices[2], superSortedIndices[0]]]\n };\n var triangles = [superTriangle];\n vertsWithSuper.forEach(function (newVert, newIndex) {\n var invalidTriangles = [];\n triangles.forEach(function (triangle) {\n if (MathUtils.isPointInCircumCircle(vertsWithSuper[triangle.indices[0]], vertsWithSuper[triangle.indices[1]], vertsWithSuper[triangle.indices[2]], newVert)) {\n invalidTriangles.push(triangle);\n }\n });\n var boundingPoly = [];\n invalidTriangles.forEach(function (triangle) {\n triangle.edges.forEach(function (edge) {\n var count = 0;\n invalidTriangles.forEach(function (otherTriangle) {\n if (triangle !== otherTriangle) {\n otherTriangle.edges.forEach(function (otherEdge) {\n if (edge[0] === otherEdge[0] && edge[1] === otherEdge[1] || edge[1] === otherEdge[0] && edge[0] === otherEdge[1]) {\n count += 1;\n }\n });\n }\n });\n if (count === 0) boundingPoly.push(edge);\n });\n });\n invalidTriangles.forEach(function (triangle) {\n triangles.splice(triangles.indexOf(triangle), 1);\n });\n boundingPoly.forEach(function (edge) {\n var sortedIndices = MathUtils.sortPointsCCW([edge[0], edge[1], newIndex], vertsWithSuper);\n triangles.push({\n indices: sortedIndices,\n edges: [[sortedIndices[0], sortedIndices[1]], [sortedIndices[1], sortedIndices[2]], [sortedIndices[2], sortedIndices[0]]]\n });\n });\n });\n var trianglesToRemove = [];\n triangles.forEach(function (triangle) {\n triangle.indices.forEach(function (index) {\n if (superIndices.includes(index)) {\n trianglesToRemove.push(triangle);\n }\n });\n });\n trianglesToRemove.forEach(function (triangle) {\n var index = triangles.indexOf(triangle);\n\n if (index !== -1) {\n triangles.splice(index, 1);\n }\n });\n return triangles.map(function (triangle) {\n return triangle.indices;\n });\n }\n /**\r\n * Determines if a given 2D point is within the cicrumcircle\r\n * defined by three 2D points. The triangle points must be in\r\n * counter-clockwise order a -> b -> c.\r\n *\r\n * @param {Array.} a - First triangle point.\r\n * @param {Array.} b - Second triangle point.\r\n * @param {Array.} c - Third triangle point.\r\n * @param {Array.} p - 2D point.\r\n *\r\n * @returns {boolean}\r\n */\n\n }, {\n key: "isPointInCircumCircle",\n value: function isPointInCircumCircle(a, b, c, p) {\n var ax = a[0] - p[0];\n var ay = a[1] - p[1];\n var bx = b[0] - p[0];\n var by = b[1] - p[1];\n var cx = c[0] - p[0];\n var cy = c[1] - p[1];\n return (ax * ax + ay * ay) * (bx * cy - cx * by) - (bx * bx + by * by) * (ax * cy - cx * ay) + (cx * cx + cy * cy) * (ax * by - bx * ay) > 0;\n }\n /**\r\n * Determines if a given 2D point is within a given triangle.\r\n *\r\n * @param {Array.} a - First triangle point.\r\n * @param {Array.} b - Second triangle point.\r\n * @param {Array.} c - Third triangle point.\r\n * @param {Array.} p - 2D point.\r\n *\r\n * @returns {boolean}\r\n */\n\n }, {\n key: "isPointInTriangle",\n value: function isPointInTriangle(a, b, c, p) {\n var denom = (b[1] - c[1]) * (a[0] - c[0]) + (c[0] - b[0]) * (a[1] - c[1]);\n var aVal = ((b[1] - c[1]) * (p[0] - c[0]) + (c[0] - b[0]) * (p[1] - c[1])) / denom;\n var bVal = ((c[1] - a[1]) * (p[0] - c[0]) + (a[0] - c[0]) * (p[1] - c[1])) / denom;\n var cVal = 1 - aVal - bVal;\n return aVal >= 0 && aVal <= 1 && bVal >= 0 && bVal <= 1 && cVal >= 0 && cVal <= 1;\n }\n /**\r\n * Gets the sorted indices of a given set of 2D points in\r\n * counter-clockwise order.\r\n *\r\n * @param {Array.} indices - List of indices.\r\n * @param {Array.>} vertices - List of 2D points.\r\n *\r\n * @returns {Array.>} - List of sorted indices.\r\n */\n\n }, {\n key: "sortPointsCCW",\n value: function sortPointsCCW(indices, vertices) {\n var centroid = [0, 0];\n indices.forEach(function (index) {\n centroid[0] += vertices[index][0];\n centroid[1] += vertices[index][1];\n });\n centroid[0] /= indices.length;\n centroid[1] /= indices.length;\n indices.sort(function (a, b) {\n var bVal = Math.atan2(vertices[b][1] - centroid[1], vertices[b][0] - centroid[0]);\n var aVal = Math.atan2(vertices[a][1] - centroid[1], vertices[a][0] - centroid[0]);\n return aVal - bVal;\n });\n return indices;\n }\n /**\r\n * Cacluates the area of a triangle\r\n * @param {Array.} a - First triangle point.\r\n * @param {Array.} b - Second triangle point.\r\n * @param {Array.} c - Third triangle point.\r\n *\r\n * @returns {number}\r\n */\n\n }, {\n key: "triangleArea",\n value: function triangleArea(a, b, c) {\n return Math.abs((a[0] * (b[1] - c[1]) + b[0] * (c[1] - a[1]) + c[0] * (a[1] - b[1])) * 0.5);\n }\n /**\r\n * Return the magnitude of a given vector array.\r\n *\r\n * @param {Array.} vector - Array consisting of numbers.\r\n *\r\n * @returns {number}\r\n */\n\n }, {\n key: "getVectorMagnitude",\n value: function getVectorMagnitude(vector) {\n if (!(vector instanceof Array)) {\n throw new Error("Cannot get magnitude for vector ".concat(vector, ". Input must be an Array numbers."));\n }\n\n var reducer = function reducer(accumulator, currentValue) {\n if (typeof currentValue !== \'number\') {\n throw new Error("Cannot get magnitude for vector ".concat(vector, ". All items in the input Array must be numbers."));\n }\n\n return accumulator + Math.pow(currentValue, 2);\n };\n\n return Math.sqrt(vector.reduce(reducer, 0));\n }\n /**\r\n * Return the dot product between two vectors.\r\n *\r\n * @param {Array.} vectorA - Array consisting of numbers.\r\n * @param {Array.} vectorB - Array consisting of numbers.\r\n *\r\n * @returns {number}\r\n */\n\n }, {\n key: "getDotProduct",\n value: function getDotProduct(vectorA, vectorB) {\n if (!(vectorA instanceof Array) || !(vectorB instanceof Array) || vectorA.length !== vectorB.length) {\n throw new Error("Cannot get dot product between ".concat(vectorA, " and ").concat(vectorB, ". Inputs must be vectors of the same length."));\n }\n\n var result = 0;\n vectorA.forEach(function (valueA, index) {\n var valueB = vectorB[index];\n\n if (typeof valueA !== \'number\' || typeof valueB !== \'number\') {\n throw new Error("Cannot get dot product between ".concat(vectorA, " and ").concat(vectorB, ". Vectors must only consist of numeric values."));\n }\n\n result += valueA * valueB;\n });\n return result;\n }\n /**\r\n * Return the angle in radians between vectorA and vectorB.\r\n *\r\n * @param {Array.} vectorA - Array consisting of numbers.\r\n * @param {Array.} vectorB - Array consisting of numbers.\r\n *\r\n * @returns {number}\r\n */\n\n }, {\n key: "getAngleBetween",\n value: function getAngleBetween(vectorA, vectorB) {\n var normalA = this.normalizeVector(MathUtils_toConsumableArray(vectorA));\n var normalB = this.normalizeVector(MathUtils_toConsumableArray(vectorB));\n var dot = this.getDotProduct(normalA, normalB);\n return Math.acos(this.clamp(dot, -1, 1));\n }\n /**\r\n * Multiply a 3x3 rotation matrix with a vector3.\r\n *\r\n * @param {Array.} vector3 - Array consisting of 3 numbers representing\r\n * a direction vector.\r\n * @param {Array.} matrix3 - An array of 9 numbers representing a row\r\n * major rotation matrix.\r\n *\r\n * @returns {Array.} - An array of 3 numbers representing the new direction\r\n * of the vector.\r\n */\n\n }, {\n key: "rotateVector",\n value: function rotateVector(vector3, matrix3) {\n if (!(vector3 instanceof Array) || vector3.length !== 3 || !vector3.every(function (v) {\n return typeof v === \'number\';\n })) {\n throw new Error("Cannot rotate vector ".concat(vector3, " by rotation matrix ").concat(matrix3, ". Input vector must be an array of 3 numbers."));\n }\n\n if (!(matrix3 instanceof Array) || matrix3.length !== 9 || !matrix3.every(function (v) {\n return typeof v === \'number\';\n })) {\n throw new Error("Cannot rotate vector ".concat(vector3, " by rotation matrix ").concat(matrix3, ". Input matrix3 must be an array of 9 numbers."));\n }\n\n var x = matrix3[0] * vector3[0] + matrix3[3] * vector3[1] + matrix3[6] * vector3[2];\n var y = matrix3[1] * vector3[0] + matrix3[4] * vector3[1] + matrix3[7] * vector3[2];\n var z = matrix3[2] * vector3[0] + matrix3[5] * vector3[1] + matrix3[8] * vector3[2];\n return [x, y, z];\n }\n /**\r\n * Normalize a given vector array.\r\n *\r\n * @param {Array.} vector - Array consisting of numbers.\r\n *\r\n * @returns {Array.} The original vector with normalized values, for chaining.\r\n */\n\n }, {\n key: "normalizeVector",\n value: function normalizeVector(vector) {\n var magnitude = this.getVectorMagnitude(vector);\n\n if (magnitude === 0) {\n vector.fill(0);\n } else {\n vector.forEach(function (value, index) {\n vector[index] = value / magnitude;\n });\n }\n\n return vector;\n }\n /**\r\n * Extract the 3x3 rotation matrix from a given 4x4 transformation matrix.\r\n *\r\n * @param {Array.} matrix4 - An array of 16 numbers representing a row\r\n * major transformation matrix.\r\n *\r\n * @returns {Array.} - An array of 9 numbers representing a row major\r\n * rotation matrix.\r\n */\n\n }, {\n key: "getRotationMatrix",\n value: function getRotationMatrix(matrix4) {\n if (!(matrix4 instanceof Array) || matrix4.length !== 16 || !matrix4.every(function (v) {\n return typeof v === \'number\';\n })) {\n throw new Error("Cannot convert matrix ".concat(matrix4, " to a rotation matrix. Input matrix must be an array of 16 numbers."));\n } // Extract scale\n\n\n var scaleX = 1 / (this.getVectorMagnitude(matrix4.slice(0, 4)) || 1);\n var scaleY = 1 / (this.getVectorMagnitude(matrix4.slice(4, 8)) || 1);\n var scaleZ = 1 / (this.getVectorMagnitude(matrix4.slice(8, 12)) || 1);\n return [matrix4[0] * scaleX, matrix4[1] * scaleX, matrix4[2] * scaleX, matrix4[4] * scaleY, matrix4[5] * scaleY, matrix4[6] * scaleY, matrix4[8] * scaleZ, matrix4[9] * scaleZ, matrix4[10] * scaleZ];\n }\n /**\r\n * Return an array containing the spherical coordinates of the given cartesian\r\n * xyz coordinates.\r\n *\r\n * @private\r\n *\r\n * @param {number} x - Position along the x axis.\r\n * @param {number} y - Position along the y axis.\r\n * @param {number} z - Position along the z axis.\r\n *\r\n * @returns {Array.} - An array consisting of three numberes where index\r\n * 0 represents the radius, index 1 represents the vertical/polar angle in radians\r\n * and index 2 represents the horizontal/azimuthal angle in radians.\r\n */\n\n }, {\n key: "cartesianToSpherical",\n value: function cartesianToSpherical(x, y, z) {\n var r = this.getVectorMagnitude([x, y, z]); // Return identity if the vector has no length\n\n if (r === 0) {\n return [0, 0, 0];\n }\n\n return [r, Math.acos(this.clamp(y / r, -1, 1)), Math.atan2(x, z)];\n }\n /**\r\n * Gradually change a value of a numeric property towards a goal over time using\r\n * a critically damped spring function.\r\n *\r\n * @param {number} currentValue - The starting value.\r\n * @param {number} targetValue- The goal value.\r\n * @param {Array.} [valueStore = [0, 0]] - An Array consisting of two\r\n * numbers where the first number holds the result value and the second holds\r\n * the velocity that resulted in that value. The same array should be provided\r\n * with each call to this function.\r\n * @param {number} [deltaTime = 1e-7] - The time since the last call to this function\r\n * in seconds.\r\n * @param {number} [smoothTime = 0.3] - The approximate amount of time in seconds\r\n * it should take to reach the target value.\r\n * @param {number} [maxSpeed = 1e7] - A clamping value for the maximum speed the\r\n * value can change.\r\n *\r\n * @returns {Array.} - The valueStore array.\r\n */\n\n }, {\n key: "dampValue",\n value: function dampValue(currentValue, targetValue) {\n var valueStore = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [0, 0];\n var deltaTime = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 1e-7;\n var smoothTime = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0.3;\n var maxSpeed = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 1e7;\n smoothTime = Math.max(0.0001, smoothTime);\n deltaTime = Math.max(1e-7, deltaTime); // Find the delta between values and use it to estimate the previous value\n\n var clampTime = maxSpeed * smoothTime;\n var deltaValue = currentValue - targetValue;\n var clampDeltaValue = this.clamp(deltaValue, -clampTime, clampTime);\n var lastValue = currentValue - clampDeltaValue; // Calculate damping factors\n\n var d1 = 2 / smoothTime;\n var d2 = d1 * deltaTime;\n var d3 = 1 / (1 + d2 + 0.5 * Math.pow(d2, 2) + 0.25 * Math.pow(d2, 3));\n var d4 = (valueStore[1] + d1 * clampDeltaValue) * deltaTime; // Damp the target value and update the velocity\n\n valueStore[0] = lastValue + (clampDeltaValue + d4) * d3;\n valueStore[1] = (valueStore[1] - d1 * d4) * d3; // Prevent overshooting\n\n if (targetValue - currentValue > 0 === valueStore[0] > targetValue) {\n valueStore[0] = targetValue;\n valueStore[1] = (valueStore[0] - targetValue) / deltaTime;\n }\n\n return valueStore;\n }\n }]);\n\n return MathUtils;\n}();\n\n/* harmony default export */ var core_MathUtils = (MathUtils);\n// CONCATENATED MODULE: ./src/core/animpack/Easing.js\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/**\r\n * @typedef {Object} EasingObject Object containing easing functions\r\n * @property {Function} In - Easing \'In\' function. Should use the signature (k:number):number.\r\n * @property {Function} Out - Easing \'Out\' function. Should use the signature (k:number):number.\r\n * @property {Function} InOut - Easing \'InOut\' function. Should use the signature (k:number):number.\r\n */\n\n/**\r\n * Linear Easing\r\n * @type {EasingObject}\r\n */\nvar Linear = {\n None: function None(k) {\n return k;\n },\n In: function In(k) {\n return k;\n },\n Out: function Out(k) {\n return k;\n },\n InOut: function InOut(k) {\n return k;\n }\n};\n/**\r\n * Quadratic Easing\r\n * @type {EasingObject}\r\n */\n\nvar Quadratic = {\n In: function In(k) {\n return k * k;\n },\n Out: function Out(k) {\n return k * (2 - k);\n },\n InOut: function InOut(k) {\n k *= 2;\n\n if (k < 1) {\n return 0.5 * k * k;\n }\n\n return -0.5 * (--k * (k - 2) - 1);\n }\n};\n/**\r\n * Cubic Easing\r\n * @type {EasingObject}\r\n */\n\nvar Cubic = {\n In: function In(k) {\n return k * k * k;\n },\n Out: function Out(k) {\n return --k * k * k + 1;\n },\n InOut: function InOut(k) {\n k *= 2;\n\n if (k < 1) {\n return 0.5 * k * k * k;\n }\n\n k -= 2;\n return 0.5 * (k * k * k + 2);\n }\n};\n/**\r\n * Quartic Easing\r\n * @type {EasingObject}\r\n */\n\nvar Quartic = {\n In: function In(k) {\n return k * k * k * k;\n },\n Out: function Out(k) {\n return 1 - --k * k * k * k;\n },\n InOut: function InOut(k) {\n k *= 2;\n\n if (k < 1) {\n return 0.5 * k * k * k * k;\n }\n\n k -= 2;\n return -0.5 * (k * k * k * k - 2);\n }\n};\n/**\r\n * Quintic Easing\r\n * @type {EasingObject}\r\n */\n\nvar Quintic = {\n In: function In(k) {\n return k * k * k * k * k;\n },\n Out: function Out(k) {\n return --k * k * k * k * k + 1;\n },\n InOut: function InOut(k) {\n k *= 2;\n\n if (k < 1) {\n return 0.5 * k * k * k * k * k;\n }\n\n k -= 2;\n return 0.5 * (k * k * k * k * k + 2);\n }\n};\n/**\r\n * Sinusoidal Easing\r\n * @type {EasingObject}\r\n */\n\nvar Sinusoidal = {\n In: function In(k) {\n return 1 - Math.cos(k * Math.PI / 2);\n },\n Out: function Out(k) {\n return Math.sin(k * Math.PI / 2);\n },\n InOut: function InOut(k) {\n return 0.5 * (1 - Math.cos(Math.PI * k));\n }\n};\n/**\r\n * Exponential Easing\r\n * @type {EasingObject}\r\n */\n\nvar Exponential = {\n In: function In(k) {\n return k === 0 ? 0 : Math.pow(1024, k - 1);\n },\n Out: function Out(k) {\n return k === 1 ? 1 : 1 - Math.pow(2, -10 * k);\n },\n InOut: function InOut(k) {\n if (k === 0) {\n return 0;\n }\n\n if (k === 1) {\n return 1;\n }\n\n k *= 2;\n\n if (k < 1) {\n return 0.5 * Math.pow(1024, k - 1);\n }\n\n return 0.5 * (-Math.pow(2, -10 * (k - 1)) + 2);\n }\n};\n/**\r\n * Circular Easing\r\n * @type {EasingObject}\r\n */\n\nvar Circular = {\n In: function In(k) {\n return 1 - Math.sqrt(1 - k * k);\n },\n Out: function Out(k) {\n return Math.sqrt(1 - --k * k);\n },\n InOut: function InOut(k) {\n k *= 2;\n\n if (k < 1) {\n return -0.5 * (Math.sqrt(1 - k * k) - 1);\n }\n\n k -= 2;\n return 0.5 * (Math.sqrt(1 - k * k) + 1);\n }\n};\n/**\r\n * Elastic Easing\r\n * @type {EasingObject}\r\n */\n\nvar Elastic = {\n In: function In(k) {\n var s;\n var a = 0.1;\n var p = 0.4;\n\n if (k === 0) {\n return 0;\n }\n\n if (k === 1) {\n return 1;\n }\n\n if (!a || a < 1) {\n a = 1;\n s = p / 4;\n } else {\n s = p * Math.asin(1 / a) / (2 * Math.PI);\n }\n\n k -= 1;\n return -(a * Math.pow(2, 10 * k) * Math.sin((k - s) * (2 * Math.PI) / p));\n },\n Out: function Out(k) {\n var s;\n var a = 0.1;\n var p = 0.4;\n\n if (k === 0) {\n return 0;\n }\n\n if (k === 1) {\n return 1;\n }\n\n if (!a || a < 1) {\n a = 1;\n s = p / 4;\n } else {\n s = p * Math.asin(1 / a) / (2 * Math.PI);\n }\n\n return a * Math.pow(2, -10 * k) * Math.sin((k - s) * (2 * Math.PI) / p) + 1;\n },\n InOut: function InOut(k) {\n var s;\n var a = 0.1;\n var p = 0.4;\n\n if (k === 0) {\n return 0;\n }\n\n if (k === 1) {\n return 1;\n }\n\n if (!a || a < 1) {\n a = 1;\n s = p / 4;\n } else {\n s = p * Math.asin(1 / a) / (2 * Math.PI);\n }\n\n k *= 2;\n\n if (k < 1) {\n k -= 1;\n return -0.5 * (a * Math.pow(2, 10 * k) * Math.sin((k - s) * (2 * Math.PI) / p));\n }\n\n k -= 1;\n return a * Math.pow(2, -10 * k) * Math.sin((k - s) * (2 * Math.PI) / p) * 0.5 + 1;\n }\n};\n/**\r\n * Back Easing\r\n * @type {EasingObject}\r\n */\n\nvar Back = {\n In: function In(k) {\n var s = 1.70158;\n return k * k * ((s + 1) * k - s);\n },\n Out: function Out(k) {\n var s = 1.70158;\n return --k * k * ((s + 1) * k + s) + 1;\n },\n InOut: function InOut(k) {\n var s = 1.70158 * 1.525;\n k *= 2;\n\n if (k < 1) {\n return 0.5 * (k * k * ((s + 1) * k - s));\n }\n\n k -= 2;\n return 0.5 * (k * k * ((s + 1) * k + s) + 2);\n }\n};\n/**\r\n * Bounce Easing\r\n * @type {EasingObject}\r\n */\n\nvar Bounce = {\n In: function In(k) {\n return 1 - Bounce.Out(1 - k);\n },\n Out: function Out(k) {\n if (k < 1 / 2.75) {\n return 7.5625 * k * k;\n } else if (k < 2 / 2.75) {\n k -= 1.5;\n return 7.5625 * (k / 2.75) * k + 0.75;\n } else if (k < 2.5 / 2.75) {\n k -= 2.25;\n return 7.5625 * (k / 2.75) * k + 0.9375;\n }\n\n k -= 2.625;\n return 7.5625 * (k / 2.75) * k + 0.984375;\n },\n InOut: function InOut(k) {\n if (k < 0.5) {\n return Bounce.In(k * 2) * 0.5;\n }\n\n return Bounce.Out(k * 2 - 1) * 0.5 + 0.5;\n }\n};\n// CONCATENATED MODULE: ./src/core/Messenger.js\nfunction Messenger_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction Messenger_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction Messenger_createClass(Constructor, protoProps, staticProps) { if (protoProps) Messenger_defineProperties(Constructor.prototype, protoProps); if (staticProps) Messenger_defineProperties(Constructor, staticProps); return Constructor; }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/* eslint-disable no-underscore-dangle */\n\n/**\r\n * Class that can execute functions when local messages are received. Local messages\r\n * are prefixed with the instance\'s id.\r\n *\r\n * @alias core/Messenger\r\n *\r\n * @property {core/Messenger} GlobalMessenger - A messenger that can be used for\r\n * global messaging. When using static listen and emit methods they are executed\r\n * on this messenger.\r\n * @property {Object} EVENTS - Built-in events that the Messenger emits.\r\n */\n\nvar Messenger_Messenger = /*#__PURE__*/function () {\n /**\r\n * @constructor\r\n *\r\n * @param {any=} id - Id for the object. If none is provided a new id will\r\n * be created. Id should be able to be represented as a string.\r\n */\n function Messenger(id) {\n Messenger_classCallCheck(this, Messenger);\n\n this._id = id !== undefined ? id : core_Utils.createId();\n this._dispatcher = window;\n this._callbacks = {};\n this._eventListeners = {};\n }\n /**\r\n * Gets the string id of the object.\r\n *\r\n * @readonly\r\n * @type {string}\r\n */\n\n\n Messenger_createClass(Messenger, [{\n key: "id",\n get: function get() {\n return this._id;\n }\n /**\r\n * Prefix a message with the instance id.\r\n *\r\n * @private\r\n *\r\n * @param {string} message\r\n *\r\n * @returns {string}\r\n */\n\n }, {\n key: "_createLocalMessage",\n value: function _createLocalMessage(message) {\n return "".concat(this.id, ".").concat(message);\n }\n /**\r\n * Return a function that will call a callback function and supply the event\'s\r\n * detail property as an argument.\r\n *\r\n * @private\r\n *\r\n * @param {Function} callback\r\n *\r\n * @returns {Function}\r\n */\n\n }, {\n key: "_createListener",\n value: function _createListener(callback) {\n return function (e) {\n var value;\n\n if (e.detail !== null) {\n value = e.detail;\n }\n\n callback(value);\n };\n }\n /**\r\n * Create an event object and send it to listeners.\r\n *\r\n * @private\r\n *\r\n * @param {string} message - Event type name.\r\n * @param {any=} value - Value to send to listeners.\r\n *\r\n * @returns {CustomEvent}\r\n */\n\n }, {\n key: "_createEvent",\n value: function _createEvent(message, value) {\n return new CustomEvent(message, {\n detail: value\n });\n }\n /**\r\n * Register an event.\r\n *\r\n * @private\r\n *\r\n * @param {string} message - Event type name.\r\n * @param {Function} listener - A listener function generated using _createListener.\r\n */\n\n }, {\n key: "_addListener",\n value: function _addListener(message, listener) {\n this._dispatcher.addEventListener(this._createLocalMessage(message), listener);\n }\n /**\r\n * Unregister an event.\r\n *\r\n * @private\r\n *\r\n * @param {string} message - Event type name.\r\n * @param {Function} listener - A listener function generated using _createListener.\r\n */\n\n }, {\n key: "_removeListener",\n value: function _removeListener(message, listener) {\n this._dispatcher.removeEventListener(this._createLocalMessage(message), listener);\n }\n /**\r\n * Execute a function when a message is received for this object.\r\n *\r\n * @param {string} message - The message to listen for.\r\n * @param {Function} callback - Function to execute once the message is received.\r\n */\n\n }, {\n key: "listenTo",\n value: function listenTo(message, callback) {\n if (typeof callback !== \'function\') {\n throw new Error("Cannot add listener for ".concat(message, " on ").concat(this.id, ". Callback must be a function."));\n }\n\n if (this._callbacks[message] === undefined) {\n this._callbacks[message] = [];\n this._eventListeners[message] = [];\n }\n\n var listener = this._createListener(callback);\n\n this._callbacks[message].push(callback);\n\n this._eventListeners[message].push(listener);\n\n this._addListener(message, listener);\n }\n /**\r\n * Prevent a function from being executed when a message is received for this\r\n * object.\r\n *\r\n * @param {string} message - The message to stop listening for.\r\n * @param {Function=} callback - Optional callback to remove. If none is defined,\r\n * remove all callbacks for the message.\r\n */\n\n }, {\n key: "stopListening",\n value: function stopListening(message, callback) {\n if (this._callbacks[message] === undefined) {\n return;\n } else if (callback === undefined) {\n // If no callback was defined, call stopListening on all callbacks for the message\n for (var i = this._callbacks[message].length - 1; i > -1; i--) {\n this.stopListening(message, this._callbacks[message][i]);\n }\n\n return;\n } // If a callback was defined, make sure it\'s a listener\n\n\n var index = this._callbacks[message].indexOf(callback);\n\n if (index === -1) {\n return;\n }\n\n var listener = this._eventListeners[message][index];\n\n this._removeListener(message, listener);\n\n this._callbacks[message].splice(index, 1);\n\n this._eventListeners[message].splice(index, 1);\n\n if (this._callbacks[message].length === 0) {\n delete this._callbacks[message];\n delete this._eventListeners[message];\n }\n }\n /**\r\n * De-register callback(s) from being executed when messages matching the given\r\n * regular expression are received.\r\n *\r\n * @param {Regexp} regexp - regexp - The regular expression to filter messages with.\r\n * @param {Function=} callback - Optional callback to remove. If none is defined,\r\n * remove all callbacks for messages matching the regular expression.\r\n */\n\n }, {\n key: "stopListeningByRegexp",\n value: function stopListeningByRegexp(regexp, callback) {\n var _this = this;\n\n var messages = Object.keys(this._callbacks).filter(function (message) {\n return regexp.test(message);\n });\n messages.forEach(function (message) {\n _this.stopListening(message, callback);\n });\n }\n /**\r\n * Prevent any functions from being executed when any message is received for\r\n * this object.\r\n */\n\n }, {\n key: "stopListeningToAll",\n value: function stopListeningToAll() {\n var messages = Object.keys(this._callbacks);\n\n for (var i = messages.length - 1; i > -1; i--) {\n this.stopListening(messages[i]);\n }\n }\n /**\r\n * Send a message, causing listener functions for the message on this object\r\n * to be executed.\r\n *\r\n * @param {string} message - The message to emit.\r\n * @param {any=} value - Optional argument to pass to listener callbacks.\r\n */\n\n }, {\n key: "emit",\n value: function emit(message, value) {\n if (this._callbacks[message] === undefined) {\n return;\n }\n\n message = this._createLocalMessage(message);\n\n var event = this._createEvent(message, value);\n\n this._dispatcher.dispatchEvent(event);\n }\n /**\r\n * Execute a function when a message is received for the global Messenger instance.\r\n *\r\n * @static\r\n *\r\n * @param {string} message - The message to listen for.\r\n * @param {Function} callback - Function to execute once the message is received.\r\n */\n\n }], [{\n key: "listenTo",\n value: function listenTo(message, callback, messenger) {\n this.GlobalMessenger.listenTo(message, callback, messenger);\n }\n /**\r\n * Prevent a function from being executed when a message is received for the\r\n * global Messenger instance.\r\n *\r\n * @static\r\n *\r\n * @param {string} message - The message to stop listening for.\r\n * @param {Function=} callback - Optional callback to remove. If none is defined,\r\n * remove all callbacks for the message.\r\n */\n\n }, {\n key: "stopListening",\n value: function stopListening(message, callback) {\n this.GlobalMessenger.stopListening(message, callback);\n }\n /**\r\n * De-register callback(s) from being executed on the global messengerr instance\r\n * when messages matching the given regular expression are received.\r\n *\r\n * @param {Regexp} regexp - regexp - The regular expression to filter messages with.\r\n * @param {Function=} callback - Optional callback to remove. If none is defined,\r\n * remove all callbacks for messages matching the regular expression.\r\n */\n\n }, {\n key: "stopListeningByRegexp",\n value: function stopListeningByRegexp(regexp, callback) {\n var _this2 = this;\n\n var messages = Object.keys(this.GlobalMessenger._callbacks).filter(function (message) {\n return regexp.test(message);\n });\n messages.forEach(function (message) {\n _this2.stopListening(message, callback);\n });\n }\n /**\r\n * Prevent any functions from being executed when any message is received for\r\n * the global Messenger instance.\r\n *\r\n * @static\r\n */\n\n }, {\n key: "stopListeningToAll",\n value: function stopListeningToAll() {\n this.GlobalMessenger.stopListeningToAll();\n }\n /**\r\n * Send a message, causing listener functions for the message on the global Messenger\r\n * instance to be executed.\r\n *\r\n * @static\r\n *\r\n * @param {string} message - The message to emit.\r\n * @param {any=} value - Optional argument to pass to listener callbacks.\r\n */\n\n }, {\n key: "emit",\n value: function emit(message, value) {\n this.GlobalMessenger.emit(message, value);\n }\n }]);\n\n return Messenger;\n}();\n\nObject.defineProperties(Messenger_Messenger, {\n GlobalMessenger: {\n value: new Messenger_Messenger(),\n writable: false\n },\n EVENTS: {\n value: {},\n writable: false\n }\n});\n/* harmony default export */ var core_Messenger = (Messenger_Messenger);\n// CONCATENATED MODULE: ./src/Babylon.js/Messenger.js\nfunction Messenger_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { Messenger_typeof = function _typeof(obj) { return typeof obj; }; } else { Messenger_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return Messenger_typeof(obj); }\n\nfunction Babylon_js_Messenger_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction Babylon_js_Messenger_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction Babylon_js_Messenger_createClass(Constructor, protoProps, staticProps) { if (protoProps) Babylon_js_Messenger_defineProperties(Constructor.prototype, protoProps); if (staticProps) Babylon_js_Messenger_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return _get(target, property, receiver || target); }\n\nfunction _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = Messenger_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction Messenger_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) Messenger_setPrototypeOf(subClass, superClass); }\n\nfunction Messenger_setPrototypeOf(o, p) { Messenger_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return Messenger_setPrototypeOf(o, p); }\n\nfunction Messenger_createSuper(Derived) { var hasNativeReflectConstruct = Messenger_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = Messenger_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = Messenger_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return Messenger_possibleConstructorReturn(this, result); }; }\n\nfunction Messenger_possibleConstructorReturn(self, call) { if (call && (Messenger_typeof(call) === "object" || typeof call === "function")) { return call; } return Messenger_assertThisInitialized(self); }\n\nfunction Messenger_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction Messenger_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction Messenger_getPrototypeOf(o) { Messenger_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return Messenger_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/**\r\n * @extends core/Messenger\r\n * @alias Babylon.js/Messenger\r\n */\n\nvar Babylon_js_Messenger_Messenger = /*#__PURE__*/function (_CoreMessenger) {\n Messenger_inherits(Messenger, _CoreMessenger);\n\n var _super = Messenger_createSuper(Messenger);\n\n /**\r\n * @constructor\r\n *\r\n * @param {any=} id - Id for the object. If none is provided a new id will\r\n * be created. Id should be able to be represented as a string.\r\n */\n function Messenger(id) {\n var _this;\n\n Babylon_js_Messenger_classCallCheck(this, Messenger);\n\n _this = _super.call(this, id);\n _this._events = {};\n return _this;\n }\n\n Babylon_js_Messenger_createClass(Messenger, [{\n key: "_createListener",\n value: function _createListener(callback) {\n return function (value) {\n callback(value);\n };\n }\n }, {\n key: "_addListener",\n value: function _addListener(message, listener) {\n this._events[message].add(listener);\n }\n }, {\n key: "_removeListener",\n value: function _removeListener(message, listener) {\n this._events[message].removeCallback(listener);\n }\n }, {\n key: "listenTo",\n value: function listenTo(message, callback) {\n if (this._events[message] === undefined) {\n this._events[message] = new BABYLON.Observable();\n }\n\n try {\n _get(Messenger_getPrototypeOf(Messenger.prototype), "listenTo", this).call(this, message, callback);\n } catch (e) {\n // Clean up the observable if nothing is listening to it\n if (!this._events[message].hasObservers()) {\n delete this._events[message];\n throw e;\n }\n }\n }\n }, {\n key: "stopListening",\n value: function stopListening(message, callback) {\n var event = this._events[message];\n\n if (event === undefined) {\n return;\n }\n\n _get(Messenger_getPrototypeOf(Messenger.prototype), "stopListening", this).call(this, message, callback);\n\n if (!event.hasObservers()) {\n delete this._events[message];\n }\n }\n }, {\n key: "emit",\n value: function emit(message, value) {\n var event = this._events[message];\n\n if (event === undefined) {\n return;\n }\n\n event.notifyObservers(value);\n }\n }]);\n\n return Messenger;\n}(core_Messenger);\n\nObject.defineProperty(Babylon_js_Messenger_Messenger, \'GlobalMessenger\', {\n value: new Babylon_js_Messenger_Messenger(),\n writable: false\n});\n/* harmony default export */ var Babylon_js_Messenger = (Babylon_js_Messenger_Messenger);\n// CONCATENATED MODULE: ./src/core/AbstractHostFeature.js\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || AbstractHostFeature_unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\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."); }\n\nfunction AbstractHostFeature_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return AbstractHostFeature_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return AbstractHostFeature_arrayLikeToArray(o, minLen); }\n\nfunction AbstractHostFeature_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction AbstractHostFeature_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction AbstractHostFeature_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction AbstractHostFeature_createClass(Constructor, protoProps, staticProps) { if (protoProps) AbstractHostFeature_defineProperties(Constructor.prototype, protoProps); if (staticProps) AbstractHostFeature_defineProperties(Constructor, staticProps); return Constructor; }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/**\r\n * Base class for all host features. Keeps a reference to the host object managing\r\n * the feature.\r\n *\r\n * @abstract\r\n *\r\n * @property {Object} EVENTS - Built-in messages that the feature emits. When the\r\n * feature is added to a {@link core/HostObject}, event names will be prefixed by the\r\n * name of the feature class + \'.\'.\r\n * @property {string} [EVENTS.update=onUpdate] - Message that is emitted after\r\n * each call to [update]{@link AbstractHostFeature#update}.\r\n * @property {Object} SERVICES - Any AWS services that are necessary for the\r\n * feature to function.\r\n */\n\nvar AbstractHostFeature_AbstractHostFeature = /*#__PURE__*/function () {\n /**\r\n * @constructor\r\n *\r\n * @param {core/HostObject} host - The HostObject managing the feature.\r\n */\n function AbstractHostFeature(host) {\n AbstractHostFeature_classCallCheck(this, AbstractHostFeature);\n\n this._host = host;\n }\n /**\r\n * Adds a namespace to the host with the name of the feature to contain properties\r\n * and methods from the feature that users of the host need access to.\r\n */\n\n\n AbstractHostFeature_createClass(AbstractHostFeature, [{\n key: "installApi",\n value: function installApi() {\n var _this = this;\n\n var events = {};\n var api = {\n EVENTS: events\n }; // Add the class name to event names\n\n Object.entries(this.constructor.EVENTS).forEach(function (_ref) {\n var _ref2 = _slicedToArray(_ref, 2),\n name = _ref2[0],\n value = _ref2[1];\n\n events[name] = "".concat(_this.constructor.name, ".").concat(value);\n });\n this._host[this.constructor.name] = api;\n return api;\n }\n /**\r\n * Gets the host that manages the feature.\r\n *\r\n * @readonly\r\n */\n\n }, {\n key: "host",\n get: function get() {\n return this._host;\n }\n /**\r\n * Gets the engine owner object of the host.\r\n *\r\n * @readonly\r\n */\n\n }, {\n key: "owner",\n get: function get() {\n return this._host.owner;\n }\n /**\r\n * Listen to a feature message from the host object.\r\n *\r\n * @param {string} message - Message to listen for.\r\n * @param {Function} callback - The callback to execute when the message is received.\r\n */\n\n }, {\n key: "listenTo",\n value: function listenTo(message, callback) {\n this._host.listenTo(message, callback);\n }\n /**\r\n * Listen to a feature message from the global messenger. Feature messages will\r\n * be prefixed with the class name of the feature.\r\n *\r\n * @param {string} message - Message to listen for.\r\n * @param {Function} callback - The callback to execute when the message is received.\r\n */\n\n }, {\n key: "stopListening",\n value:\n /**\r\n * Stop listening to a message from the host object.\r\n *\r\n * @param {string} message - Message to stop listening for.\r\n * @param {Function=} callback - Optional callback to remove. If none is defined,\r\n * remove all callbacks for the message.\r\n */\n function stopListening(message, callback) {\n this._host.stopListening(message, callback);\n }\n /**\r\n * Stop listening to a message from the global messenger.\r\n *\r\n * @param {string} message - Message to stop listening for.\r\n * @param {Function=} callback - Optional callback to remove. If none is defined,\r\n * remove all callbacks for the message.\r\n */\n\n }, {\n key: "stopListeningByRegexp",\n value:\n /**\r\n * Stop listening to a message matching the given regular expression from the\r\n * host object.\r\n *\r\n * @param {Regexp} regexp - The regular expression to stop listening for.\r\n * @param {Function=} callback - Optional callback to remove. If none is defined,\r\n * remove all callbacks for the message.\r\n */\n function stopListeningByRegexp(regexp, callback) {\n this._host.stopListeningByRegexp(regexp, callback);\n }\n /**\r\n * Stop listening to a message matching the given regular expression from the\r\n * global messenger.\r\n *\r\n * @param {Regexp} regexp - The regular expression to stop listening for.\r\n * @param {Function=} callback - Optional callback to remove. If none is defined,\r\n * remove all callbacks for the message.\r\n */\n\n }, {\n key: "stopListeningToAll",\n value:\n /**\r\n * Stop listening to all messages.\r\n */\n function stopListeningToAll() {\n this._host.stopListeningToAll();\n }\n /**\r\n * Stop listening to all feature messages.\r\n */\n\n }, {\n key: "emit",\n value:\n /**\r\n * Emit feature messages from the host. Feature messages will be prefixed with\r\n * the class name of the feature.\r\n *\r\n * @param {string} message - The message to emit.\r\n * @param {any=} value - Optional parameter to pass to listener callbacks.\r\n */\n function emit(message, value) {\n message = "".concat(this.constructor.name, ".").concat(message);\n\n this._host.emit(message, value);\n }\n /**\r\n * Emit feature messages from the global messenger. Feature messages will be prefixed\r\n * with the class name of the feature.\r\n *\r\n * @param {string} message - The message to emit.\r\n * @param {any=} value - Optional parameter to pass to listener callbacks.\r\n */\n\n }, {\n key: "update",\n value:\n /**\r\n * Executes each time the host is updated.\r\n *\r\n * @param {number} deltaTime - Amount of time since the last host update was\r\n * called.\r\n */\n function update(deltaTime) {\n this.emit(this.constructor.EVENTS.update, deltaTime);\n }\n /**\r\n * Clean up once the feature is no longer in use. Remove the feature namespace\r\n * from the host and remove reference to the host.\r\n */\n\n }, {\n key: "discard",\n value: function discard() {\n var _this2 = this;\n\n Object.keys(this._host[this.constructor.name]).forEach(function (name) {\n delete _this2._host[_this2.constructor.name][name];\n });\n delete this._host[this.constructor.name];\n delete this._host;\n }\n /**\r\n * Applies a sequence of mixin class factory functions to this class and\r\n * returns the result. Each function is expected to return a class that\r\n * extends the class it was given. The functions are applied in the order\r\n * that parameters are given, meaning that the first factory will\r\n * extend this base class.\r\n *\r\n * @param {...Function} mixinClassFactories Class factory functions that will\r\n * be applied.\r\n *\r\n * @returns {Class} A class that is the result of applying the factory functions.\r\n * The resulting class will always inherit from AbstractHostFeature.\r\n */\n\n }], [{\n key: "listenTo",\n value: function listenTo(message, callback) {\n message = "".concat(this.name, ".").concat(message);\n Babylon_js_Messenger.listenTo(message, callback);\n }\n }, {\n key: "stopListening",\n value: function stopListening(message, callback) {\n message = "".concat(this.name, ".").concat(message);\n Babylon_js_Messenger.stopListening(message, callback);\n }\n }, {\n key: "stopListeningByRegexp",\n value: function stopListeningByRegexp(regexp, callback) {\n regexp = new RegExp("^".concat(this.name, ".").concat(regexp.source.replace(/\\^/, \'\')));\n Babylon_js_Messenger.stopListeningByRegexp(regexp, callback);\n }\n }, {\n key: "stopListeningToAll",\n value: function stopListeningToAll() {\n Babylon_js_Messenger.stopListeningByRegexp(new RegExp("^".concat(this.name, ".")));\n }\n }, {\n key: "emit",\n value: function emit(message, value) {\n message = "".concat(this.name, ".").concat(message);\n Babylon_js_Messenger.emit(message, value);\n }\n }, {\n key: "mix",\n value: function mix() {\n var ResultClass = this;\n\n for (var _len = arguments.length, mixinClassFactories = new Array(_len), _key = 0; _key < _len; _key++) {\n mixinClassFactories[_key] = arguments[_key];\n }\n\n mixinClassFactories.forEach(function (mixinClassFactory) {\n ResultClass = mixinClassFactory(ResultClass);\n });\n return ResultClass;\n }\n }]);\n\n return AbstractHostFeature;\n}();\n\nObject.defineProperties(AbstractHostFeature_AbstractHostFeature, {\n EVENTS: {\n value: {\n update: \'onUpdate\'\n },\n writable: false\n },\n SERVICES: {\n value: {},\n writable: false\n }\n});\n/* harmony default export */ var core_AbstractHostFeature = (AbstractHostFeature_AbstractHostFeature);\n// CONCATENATED MODULE: ./src/core/HostObject.js\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction HostObject_construct(Parent, args, Class) { if (HostObject_isNativeReflectConstruct()) { HostObject_construct = Reflect.construct; } else { HostObject_construct = function _construct(Parent, args, Class) { var a = [null]; a.push.apply(a, args); var Constructor = Function.bind.apply(Parent, a); var instance = new Constructor(); if (Class) HostObject_setPrototypeOf(instance, Class.prototype); return instance; }; } return HostObject_construct.apply(null, arguments); }\n\nfunction HostObject_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { HostObject_typeof = function _typeof(obj) { return typeof obj; }; } else { HostObject_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return HostObject_typeof(obj); }\n\nfunction HostObject_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction HostObject_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction HostObject_createClass(Constructor, protoProps, staticProps) { if (protoProps) HostObject_defineProperties(Constructor.prototype, protoProps); if (staticProps) HostObject_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction HostObject_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) HostObject_setPrototypeOf(subClass, superClass); }\n\nfunction HostObject_setPrototypeOf(o, p) { HostObject_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return HostObject_setPrototypeOf(o, p); }\n\nfunction HostObject_createSuper(Derived) { var hasNativeReflectConstruct = HostObject_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = HostObject_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = HostObject_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return HostObject_possibleConstructorReturn(this, result); }; }\n\nfunction HostObject_possibleConstructorReturn(self, call) { if (call && (HostObject_typeof(call) === "object" || typeof call === "function")) { return call; } return HostObject_assertThisInitialized(self); }\n\nfunction HostObject_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction HostObject_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction HostObject_getPrototypeOf(o) { HostObject_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return HostObject_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n/**\r\n * Object that manages access to all Host features. Contains a reference to\r\n * engine-specific visuals if applicable.\r\n *\r\n * @extends core/Messenger\r\n * @alias core/HostObject\r\n *\r\n * @property {Object} EVENTS - Built-in messages that the Messenger emits.\r\n * @property {string} [EVENTS.update=\'onUpdate\'] - Message that is emitted after\r\n * each call to [update]{@link core/HostObject#update}.\r\n * @property {string} [EVENTS.addFeature=\'onAddFeature\'] - Message that is emitted\r\n * after each call to [addFeature]{@link core/HostObject#addFeature}.\r\n * @property {string} [EVENTS.removeFeature=\'onRemoveFeature\'] - Message that is emitted\r\n * after each call to [removeFeature]{@link core/HostObject#removeFeature}.\r\n */\n\nvar HostObject_HostObject = /*#__PURE__*/function (_Messenger) {\n HostObject_inherits(HostObject, _Messenger);\n\n var _super = HostObject_createSuper(HostObject);\n\n /**\r\n * @constructor\r\n *\r\n * @param {Object=} options - Options for the host.\r\n * @param {Object=} options.owner - Optional engine-specific owner of the host.\r\n */\n function HostObject() {\n var _this;\n\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n _ref$owner = _ref.owner,\n owner = _ref$owner === void 0 ? {} : _ref$owner;\n\n HostObject_classCallCheck(this, HostObject);\n\n // If an owner is specified, use its id for messaging\n _this = _super.call(this, owner.id);\n _this._owner = owner;\n _this._features = {};\n _this._waits = [];\n _this._lastUpdate = _this.now;\n return _this;\n }\n /**\r\n * Gets the engine owner object of the host.\r\n *\r\n * @readonly\r\n * @type {Object}\r\n */\n\n\n HostObject_createClass(HostObject, [{\n key: "owner",\n get: function get() {\n return this._owner;\n }\n /**\r\n * Gets the current time in milliseconds.\r\n *\r\n * @readonly\r\n * @type {number}\r\n */\n\n }, {\n key: "now",\n get: function get() {\n return Date.now();\n }\n /**\r\n * Gets the amount of time in milliseconds since update was last called.\r\n *\r\n * @readonly\r\n * @type {number}\r\n */\n\n }, {\n key: "deltaTime",\n get: function get() {\n return this.now - this._lastUpdate;\n }\n /**\r\n * This function should be called in the engine\'s render loop. Executes update\r\n * loops for all features.\r\n */\n\n }, {\n key: "update",\n value: function update() {\n var currentTime = this.now;\n var dt = this.deltaTime; // Progress stored waits\n\n this._waits.forEach(function (wait) {\n wait.execute(dt);\n }); // Update all features\n\n\n Object.values(this._features).forEach(function (feature) {\n feature.update(dt);\n }); // Notify listeners an update occured\n\n this.emit(this.constructor.EVENTS.update, dt);\n this._lastUpdate = currentTime;\n }\n /**\r\n * Return a deferred promise that will wait a given number of seconds before\r\n * resolving. The host will continuously update the wait promise during the\r\n * update loop until it resolves.\r\n *\r\n * @param {number} [seconds=0] - Number of seconds to wait before resolving.\r\n * @param {Object=} options - Optional options object\r\n * @param {Function} [options.onFinish] - Callback to execute once the wait time\r\n * is met.\r\n * @param {Function=} options.onProgress - Callback to execute each time the wait\r\n * time progresses towards the target number of seconds. The amount of progress\r\n * as a 0-1 percentage is passed as an argument.\r\n * @param {Function=} options.onCancel - Callback to execute if the user cancels\r\n * the wait before completion.\r\n * @param {Function=} options.onError - Callback to execute if the wait stops\r\n * because an error is encountered. The error message is passed as a parameter.\r\n *\r\n * @returns {Deferred}\r\n */\n\n }, {\n key: "wait",\n value: function wait(seconds) {\n var _this2 = this;\n\n var _ref2 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n onFinish = _ref2.onFinish,\n onProgress = _ref2.onProgress,\n onCancel = _ref2.onCancel,\n onError = _ref2.onError;\n\n var wait = core_Utils.wait(seconds, {\n onFinish: onFinish,\n onProgress: onProgress,\n onCancel: onCancel,\n onError: onError\n });\n\n this._waits.push(wait); // Once the wait promise is no longer pending remove it from the waits array\n\n\n var onComplete = function onComplete() {\n _this2._waits.splice(_this2._waits.indexOf(wait), 1);\n };\n\n wait.then(onComplete, onComplete);\n return wait;\n }\n /**\r\n * Instantiate a new Host feature and store it. Features must inherit from\r\n * AbstractHostFeature.\r\n *\r\n * @param {Class} FeatureClass - Class that will instantiate the feature. Must\r\n * extend {@link AbstractHostFeature}.\r\n * @param {boolean} [force=false] - Whether or not to overwrite an existing\r\n * feature if one of this type already exists on the object.\r\n * @param {...any} args - Additional arguments to pass to the FeatureClass\r\n * constructor. The HostObject will always be passed as the first argument.\r\n *\r\n * @returns {boolean} - Whether or not a feature was successfully added.\r\n */\n\n }, {\n key: "addFeature",\n value: function addFeature(FeatureClass) {\n var force = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n var inputType = HostObject_typeof(FeatureClass); // Make sure the FeatureClass can be executed\n\n\n if (inputType !== \'function\') {\n throw new Error("Cannot add feature to host ".concat(this.id, ". FeatureClass must be a class."));\n } // Make sure the feature is a host feature\n else if (!(FeatureClass.prototype instanceof core_AbstractHostFeature)) {\n throw new Error("Cannot add feature ".concat(FeatureClass.name, " to host ").concat(this.id, ". FeatureClass must extend AbstractHostFeature."));\n } // Check if the FeatureClass already exists on this object\n\n\n if (this._features[FeatureClass.name] !== undefined) {\n if (force) {\n console.warn("Feature ".concat(FeatureClass.name, " already exists on host ").concat(this.id, ". Existing feature will be overwritten."));\n } else {\n throw new Error("Feature ".concat(FeatureClass.name, " already exists on host ").concat(this.id, ". Use \'force\' argument to overwrite the feature."));\n }\n } // Initialize the feature\n\n\n for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n args[_key - 2] = arguments[_key];\n }\n\n var feature = HostObject_construct(FeatureClass, [this].concat(args));\n\n feature.installApi();\n this._features[FeatureClass.name] = feature;\n this.emit(this.constructor.EVENTS.addFeature, FeatureClass.name);\n return true;\n }\n /**\r\n * Remove a feature from the object.\r\n *\r\n * @param {string} typeName - Name of the type of feature to remove.\r\n *\r\n * @returns {boolean} - Whether or not a feature was successfully removed.\r\n */\n\n }, {\n key: "removeFeature",\n value: function removeFeature(typeName) {\n if (this._features[typeName] === undefined) {\n console.warn("Feature of type ".concat(typeName, " does not exist on host ").concat(this.id, ". No feature will be removed."));\n return false;\n } else {\n // Remove the feature\n this.emit(this.constructor.EVENTS.removeFeature, typeName);\n\n this._features[typeName].discard();\n\n delete this._features[typeName];\n return true;\n }\n }\n /**\r\n * Indicate whether a specified feature is installed on the host.\r\n *\r\n * @param {string} typeName - Name of the type of feature to look for.\r\n *\r\n * @returns {boolean}\r\n */\n\n }, {\n key: "hasFeature",\n value: function hasFeature(typeName) {\n return !!this._features[typeName];\n }\n /**\r\n * List the names of the features installed on the host.\r\n *\r\n * @returns {Array.}\r\n */\n\n }, {\n key: "listFeatures",\n value: function listFeatures() {\n return Object.keys(this._features);\n }\n }]);\n\n return HostObject;\n}(Babylon_js_Messenger);\n\nObject.defineProperty(HostObject_HostObject, \'EVENTS\', {\n value: _objectSpread(_objectSpread({}, Object.getPrototypeOf(HostObject_HostObject).EVENTS), {}, {\n update: \'onUpdate\',\n addFeature: \'onAddFeature\',\n removeFeature: \'onRemoveFeature\'\n }),\n writable: false\n});\n/* harmony default export */ var core_HostObject = (HostObject_HostObject);\n// CONCATENATED MODULE: ./src/Babylon.js/HostObject.js\nfunction Babylon_js_HostObject_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { Babylon_js_HostObject_typeof = function _typeof(obj) { return typeof obj; }; } else { Babylon_js_HostObject_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return Babylon_js_HostObject_typeof(obj); }\n\nfunction Babylon_js_HostObject_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction Babylon_js_HostObject_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction Babylon_js_HostObject_createClass(Constructor, protoProps, staticProps) { if (protoProps) Babylon_js_HostObject_defineProperties(Constructor.prototype, protoProps); if (staticProps) Babylon_js_HostObject_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction Babylon_js_HostObject_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) Babylon_js_HostObject_setPrototypeOf(subClass, superClass); }\n\nfunction Babylon_js_HostObject_setPrototypeOf(o, p) { Babylon_js_HostObject_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return Babylon_js_HostObject_setPrototypeOf(o, p); }\n\nfunction Babylon_js_HostObject_createSuper(Derived) { var hasNativeReflectConstruct = Babylon_js_HostObject_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = Babylon_js_HostObject_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = Babylon_js_HostObject_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return Babylon_js_HostObject_possibleConstructorReturn(this, result); }; }\n\nfunction Babylon_js_HostObject_possibleConstructorReturn(self, call) { if (call && (Babylon_js_HostObject_typeof(call) === "object" || typeof call === "function")) { return call; } return Babylon_js_HostObject_assertThisInitialized(self); }\n\nfunction Babylon_js_HostObject_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction Babylon_js_HostObject_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction Babylon_js_HostObject_getPrototypeOf(o) { Babylon_js_HostObject_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return Babylon_js_HostObject_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/**\r\n * @extends core/HostObject\r\n * @alias Babylon.js/HostObject\r\n */\n\nvar Babylon_js_HostObject_HostObject = /*#__PURE__*/function (_CoreHostObject) {\n Babylon_js_HostObject_inherits(HostObject, _CoreHostObject);\n\n var _super = Babylon_js_HostObject_createSuper(HostObject);\n\n /**\r\n * @constructor\r\n *\r\n * @param {Object=} options - Options for the host.\r\n * @param {Object=} options.owner - Optional engine-specific owner of the host.\r\n */\n function HostObject() {\n var _this;\n\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n Babylon_js_HostObject_classCallCheck(this, HostObject);\n\n _this = _super.call(this, options);\n\n if (_this._owner) {\n Object.defineProperty(Babylon_js_HostObject_assertThisInitialized(_this), \'deltaTime\', {\n get: function get() {\n return _this._owner.getEngine().getDeltaTime();\n }\n });\n }\n\n return _this;\n }\n\n Babylon_js_HostObject_createClass(HostObject, [{\n key: "now",\n get: function get() {\n return BABYLON.PrecisionDate.Now;\n }\n }]);\n\n return HostObject;\n}(core_HostObject);\n\n/* harmony default export */ var Babylon_js_HostObject = (Babylon_js_HostObject_HostObject);\n// CONCATENATED MODULE: ./src/core/FeatureDependentInterface.js\nfunction FeatureDependentInterface_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { FeatureDependentInterface_typeof = function _typeof(obj) { return typeof obj; }; } else { FeatureDependentInterface_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return FeatureDependentInterface_typeof(obj); }\n\nfunction FeatureDependentInterface_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction FeatureDependentInterface_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { FeatureDependentInterface_ownKeys(Object(source), true).forEach(function (key) { FeatureDependentInterface_defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { FeatureDependentInterface_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction FeatureDependentInterface_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction FeatureDependentInterface_slicedToArray(arr, i) { return FeatureDependentInterface_arrayWithHoles(arr) || FeatureDependentInterface_iterableToArrayLimit(arr, i) || FeatureDependentInterface_unsupportedIterableToArray(arr, i) || FeatureDependentInterface_nonIterableRest(); }\n\nfunction FeatureDependentInterface_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."); }\n\nfunction FeatureDependentInterface_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return FeatureDependentInterface_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return FeatureDependentInterface_arrayLikeToArray(o, minLen); }\n\nfunction FeatureDependentInterface_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction FeatureDependentInterface_iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction FeatureDependentInterface_arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction FeatureDependentInterface_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { FeatureDependentInterface_get = Reflect.get; } else { FeatureDependentInterface_get = function _get(target, property, receiver) { var base = FeatureDependentInterface_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return FeatureDependentInterface_get(target, property, receiver || target); }\n\nfunction FeatureDependentInterface_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = FeatureDependentInterface_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction FeatureDependentInterface_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) FeatureDependentInterface_setPrototypeOf(subClass, superClass); }\n\nfunction FeatureDependentInterface_setPrototypeOf(o, p) { FeatureDependentInterface_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return FeatureDependentInterface_setPrototypeOf(o, p); }\n\nfunction FeatureDependentInterface_createSuper(Derived) { var hasNativeReflectConstruct = FeatureDependentInterface_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = FeatureDependentInterface_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = FeatureDependentInterface_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return FeatureDependentInterface_possibleConstructorReturn(this, result); }; }\n\nfunction FeatureDependentInterface_possibleConstructorReturn(self, call) { if (call && (FeatureDependentInterface_typeof(call) === "object" || typeof call === "function")) { return call; } return FeatureDependentInterface_assertThisInitialized(self); }\n\nfunction FeatureDependentInterface_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction FeatureDependentInterface_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction FeatureDependentInterface_getPrototypeOf(o) { FeatureDependentInterface_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return FeatureDependentInterface_getPrototypeOf(o); }\n\nfunction FeatureDependentInterface_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction FeatureDependentInterface_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction FeatureDependentInterface_createClass(Constructor, protoProps, staticProps) { if (protoProps) FeatureDependentInterface_defineProperties(Constructor.prototype, protoProps); if (staticProps) FeatureDependentInterface_defineProperties(Constructor, staticProps); return Constructor; }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/* eslint-disable no-unused-vars */\n\n/* eslint-disable max-classes-per-file */\n\n/**\r\n * Class factory interface for features that are dependent on other features being\r\n * present on the host. Event dependencies will be listened for when a feature of\r\n * matching type is added to the host and will stop being listened for when one\r\n * is removed. If the feature is already present when constructed, events will\r\n * be listened for right away.\r\n *\r\n * @interface\r\n *\r\n * @property {Object} EVENT_DEPENDENCIES - Events that the feature should start/stop\r\n * listening for when a feature of type FeatureName is added/removed from the host.\r\n * Event dependencies should follow the signature:\r\n * { FeatureName: { eventName: callbackName, ... }, ... }\r\n */\n\nvar FeatureDependentInterface_FeatureDependentInterface = /*#__PURE__*/function () {\n function FeatureDependentInterface() {\n FeatureDependentInterface_classCallCheck(this, FeatureDependentInterface);\n }\n\n FeatureDependentInterface_createClass(FeatureDependentInterface, [{\n key: "_onFeatureAdded",\n value:\n /**\r\n * Start listening for event dependencies that match the given feature type.\r\n *\r\n * @private\r\n *\r\n * @param {string} typeName - type of feature to listen for.\r\n */\n function _onFeatureAdded(typeName) {}\n /**\r\n * Stop listening for event dependencies that match the given feature type.\r\n *\r\n * @private\r\n *\r\n * @param {string} typeName - type of feature to stop listening for.\r\n */\n\n }, {\n key: "_onFeatureRemoved",\n value: function _onFeatureRemoved(typeName) {}\n /**\r\n * @augments {@link AbstractHostFeature#discard}\r\n */\n\n }, {\n key: "discard",\n value: function discard() {}\n /**\r\n * Creates a class that implements {@link FeatureDependentInterface} and extends\r\n * a specified base class.\r\n *\r\n * @param {Class} BaseClass - The class to extend.\r\n *\r\n * @return {Class} A class that extends `BaseClass` and implements {@link FeatureDependentInterface}.\r\n */\n\n }], [{\n key: "Mixin",\n value: function Mixin(BaseClass) {\n var FeatureDependentMixin = /*#__PURE__*/function (_BaseClass) {\n FeatureDependentInterface_inherits(FeatureDependentMixin, _BaseClass);\n\n var _super = FeatureDependentInterface_createSuper(FeatureDependentMixin);\n\n function FeatureDependentMixin(host) {\n var _this;\n\n FeatureDependentInterface_classCallCheck(this, FeatureDependentMixin);\n\n _this = _super.call(this, host);\n _this._host = host; // No need to listen for events if the mixin is in the prototype chain multiple times\n\n if (!_this._initialized) {\n _this._initialized = true; // Start listening for feature events\n\n _this._onFeatureAdded = _this._onFeatureAdded.bind(FeatureDependentInterface_assertThisInitialized(_this));\n _this._onFeatureRemoved = _this._onFeatureRemoved.bind(FeatureDependentInterface_assertThisInitialized(_this));\n\n _this._host.listenTo(Babylon_js_HostObject.EVENTS.addFeature, _this._onFeatureAdded);\n\n _this._host.listenTo(Babylon_js_HostObject.EVENTS.removeFeature, _this._onFeatureRemoved); // Register features that already exist\n\n\n Object.keys(_this.constructor.EVENT_DEPENDENCIES).forEach(function (typeName) {\n if (_this._host[typeName] !== undefined) {\n _this._onFeatureAdded(typeName);\n }\n });\n }\n\n return _this;\n }\n\n FeatureDependentInterface_createClass(FeatureDependentMixin, [{\n key: "_onFeatureAdded",\n value: function _onFeatureAdded(typeName) {\n var _this2 = this;\n\n if (this.constructor.EVENT_DEPENDENCIES[typeName] !== undefined) {\n var events = this.constructor.EVENT_DEPENDENCIES[typeName];\n Object.entries(events).forEach(function (_ref) {\n var _ref2 = FeatureDependentInterface_slicedToArray(_ref, 2),\n eventName = _ref2[0],\n callback = _ref2[1];\n\n _this2[callback] = _this2[callback].bind(_this2);\n\n _this2._host.listenTo(_this2._host[typeName].EVENTS[eventName], _this2[callback]);\n });\n }\n }\n }, {\n key: "_onFeatureRemoved",\n value: function _onFeatureRemoved(typeName) {\n var _this3 = this;\n\n if (this.constructor.EVENT_DEPENDENCIES[typeName] !== undefined) {\n var events = this.constructor.EVENT_DEPENDENCIES[typeName];\n Object.entries(events).forEach(function (_ref3) {\n var _ref4 = FeatureDependentInterface_slicedToArray(_ref3, 2),\n eventName = _ref4[0],\n callback = _ref4[1];\n\n _this3._host.stopListening(_this3._host[typeName].EVENTS[eventName], _this3[callback]);\n });\n }\n }\n }, {\n key: "discard",\n value: function discard() {\n var _this4 = this;\n\n // Stop listening for feature events\n this._host.stopListening(Babylon_js_HostObject.EVENTS.addFeature, this._onFeatureAdded);\n\n this._host.stopListening(Babylon_js_HostObject.EVENTS.removeFeature, this._onFeatureRemoved); // Stop listening to feature-specific events\n\n\n Object.keys(this.constructor.EVENT_DEPENDENCIES).forEach(function (typeName) {\n if (_this4._host[typeName] !== undefined) {\n _this4._onFeatureRemoved(typeName);\n }\n });\n\n FeatureDependentInterface_get(FeatureDependentInterface_getPrototypeOf(FeatureDependentMixin.prototype), "discard", this).call(this);\n }\n }]);\n\n return FeatureDependentMixin;\n }(BaseClass);\n\n var EVENT_DEPENDENCIES = BaseClass.EVENT_DEPENDENCIES || {};\n Object.defineProperties(FeatureDependentMixin, {\n EVENT_DEPENDENCIES: {\n value: FeatureDependentInterface_objectSpread({}, EVENT_DEPENDENCIES),\n writable: false\n }\n });\n return FeatureDependentMixin;\n }\n }]);\n\n return FeatureDependentInterface;\n}();\n/**\r\n * Event dependencies should follow the signature:\r\n * {\r\n * FeatureName: {\r\n * // Events that the feature should start/stop listening for when a feature\r\n * // of type FeatureName is added/removed from the host\r\n * {\r\n * eventName: callbackName,\r\n * ...\r\n * },\r\n * }\r\n * }\r\n */\n\n\nObject.defineProperties(FeatureDependentInterface_FeatureDependentInterface, {\n EVENT_DEPENDENCIES: {\n value: {},\n writable: false\n }\n});\n/* harmony default export */ var core_FeatureDependentInterface = (FeatureDependentInterface_FeatureDependentInterface);\n// CONCATENATED MODULE: ./src/core/animpack/AnimationFeatureDependentInterface.js\nfunction AnimationFeatureDependentInterface_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { AnimationFeatureDependentInterface_typeof = function _typeof(obj) { return typeof obj; }; } else { AnimationFeatureDependentInterface_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return AnimationFeatureDependentInterface_typeof(obj); }\n\nfunction AnimationFeatureDependentInterface_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction AnimationFeatureDependentInterface_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { AnimationFeatureDependentInterface_ownKeys(Object(source), true).forEach(function (key) { AnimationFeatureDependentInterface_defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { AnimationFeatureDependentInterface_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction AnimationFeatureDependentInterface_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction AnimationFeatureDependentInterface_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction AnimationFeatureDependentInterface_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction AnimationFeatureDependentInterface_createClass(Constructor, protoProps, staticProps) { if (protoProps) AnimationFeatureDependentInterface_defineProperties(Constructor.prototype, protoProps); if (staticProps) AnimationFeatureDependentInterface_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction AnimationFeatureDependentInterface_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) AnimationFeatureDependentInterface_setPrototypeOf(subClass, superClass); }\n\nfunction AnimationFeatureDependentInterface_setPrototypeOf(o, p) { AnimationFeatureDependentInterface_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return AnimationFeatureDependentInterface_setPrototypeOf(o, p); }\n\nfunction AnimationFeatureDependentInterface_createSuper(Derived) { var hasNativeReflectConstruct = AnimationFeatureDependentInterface_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = AnimationFeatureDependentInterface_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = AnimationFeatureDependentInterface_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return AnimationFeatureDependentInterface_possibleConstructorReturn(this, result); }; }\n\nfunction AnimationFeatureDependentInterface_possibleConstructorReturn(self, call) { if (call && (AnimationFeatureDependentInterface_typeof(call) === "object" || typeof call === "function")) { return call; } return AnimationFeatureDependentInterface_assertThisInitialized(self); }\n\nfunction AnimationFeatureDependentInterface_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction AnimationFeatureDependentInterface_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction AnimationFeatureDependentInterface_getPrototypeOf(o) { AnimationFeatureDependentInterface_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return AnimationFeatureDependentInterface_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/* eslint-disable no-unused-vars */\n\n/* eslint-disable max-classes-per-file */\n\n/**\r\n * Class factory interface for features that are dependent on the AnimationFeature\r\n * being present on the host. Layer and animation events will automatically be\r\n * listened for once a AnimationFeature is added to the host and stopped once it\r\n * is removed.\r\n *\r\n * @interface\r\n * @extends FeatureDependentInterface\r\n *\r\n * @property {Object} EVENT_DEPENDENCIES - Events that the feature should start/stop\r\n * listening for when a feature of type FeatureName is added/removed from the host.\r\n * @property {Object} EVENT_DEPENDENCIES.AnimationFeature - Events that are\r\n * specific to the AnimationFeature.\r\n * @property {string} [EVENT_DEPENDENCIES.AnimationFeature.addLayer=\'_onLayerAdded\'] -\r\n * The name of the method that will be executed when AnimationFeature addLayer\r\n * events are emitted.\r\n * @property {string} [EVENT_DEPENDENCIES.AnimationFeature.removeLayer=\'_onLayerRemoved\'] -\r\n * The name of the method that will be executed when AnimationFeature removeLayer\r\n * events are emitted.\r\n * @property {string} [EVENT_DEPENDENCIES.AnimationFeature.renameLayer=\'_onLayerRenamed\'] -\r\n * The name of the method that will be executed when AnimationFeature renameLayer\r\n * events are emitted.\r\n * @property {string} [EVENT_DEPENDENCIES.AnimationFeature.addAnimation=\'_onAnimationAdded\'] -\r\n * The name of the method that will be executed when AnimationFeature addAnimation\r\n * events are emitted.\r\n * @property {string} [EVENT_DEPENDENCIES.AnimationFeature.removeAnimation=\'_onAnimationRemoved\'] -\r\n * The name of the method that will be executed when AnimationFeature removeAnimation\r\n * events are emitted.\r\n * @property {string} [EVENT_DEPENDENCIES.AnimationFeature.renameAnimation=\'_onAnimationRenamed\'] -\r\n * The name of the method that will be executed when AnimationFeature renameAnimation\r\n * events are emitted.\r\n */\n\nvar AnimationFeatureDependentInterface_AnimationFeatureDependentInterface = /*#__PURE__*/function (_FeatureDependentInte) {\n AnimationFeatureDependentInterface_inherits(AnimationFeatureDependentInterface, _FeatureDependentInte);\n\n var _super = AnimationFeatureDependentInterface_createSuper(AnimationFeatureDependentInterface);\n\n function AnimationFeatureDependentInterface() {\n AnimationFeatureDependentInterface_classCallCheck(this, AnimationFeatureDependentInterface);\n\n return _super.apply(this, arguments);\n }\n\n AnimationFeatureDependentInterface_createClass(AnimationFeatureDependentInterface, [{\n key: "_onLayerAdded",\n value:\n /**\r\n * Executed when animation layer added events are caught.\r\n *\r\n * @private\r\n *\r\n * @param {string} name - Name of the layer that was added.\r\n */\n function _onLayerAdded(_ref) {\n var name = _ref.name;\n }\n /**\r\n * Executed when animation layer removed events are caught.\r\n *\r\n * @private\r\n *\r\n * @param {string} name - Name of the layer that was removed.\r\n */\n\n }, {\n key: "_onLayerRemoved",\n value: function _onLayerRemoved(_ref2) {\n var name = _ref2.name;\n }\n /**\r\n * Executed when animation layer renamed events are caught.\r\n *\r\n * @private\r\n *\r\n * @param {string} oldName - Name of the layer that was renamed.\r\n * @param {string} newName - New name of the layer.\r\n */\n\n }, {\n key: "_onLayerRenamed",\n value: function _onLayerRenamed(_ref3) {\n var oldName = _ref3.oldName,\n newName = _ref3.newName;\n }\n /**\r\n * Executed when animation added events are caught.\r\n *\r\n * @private\r\n *\r\n * @param {string} layerName - Name of the layer that an animation was added to.\r\n * @param {string} animationName - Name of the animation that was added.\r\n */\n\n }, {\n key: "_onAnimationAdded",\n value: function _onAnimationAdded(_ref4) {\n var layerName = _ref4.layerName,\n animationName = _ref4.animationName;\n }\n /**\r\n * Executed when animation removed events are caught.\r\n *\r\n * @private\r\n *\r\n * @param {string} layerName - Name of the layer that an animation was removed from.\r\n * @param {string} animationName - Name of the animation that was removed.\r\n */\n\n }, {\n key: "_onAnimationRemoved",\n value: function _onAnimationRemoved(_ref5) {\n var layerName = _ref5.layerName,\n animationName = _ref5.animationName;\n }\n /**\r\n * Executed when animation renamed events are caught.\r\n *\r\n * @private\r\n *\r\n * @param {string} layerName - Name of the layer that an animation belongs to.\r\n * @param {string} oldName - Name of the animation that was renamed.\r\n * @param {string} newName - New name of the animation.\r\n */\n\n }, {\n key: "_onAnimationRenamed",\n value: function _onAnimationRenamed(_ref6) {\n var layerName = _ref6.layerName,\n oldName = _ref6.oldName,\n newName = _ref6.newName;\n }\n /**\r\n * Creates a class that implements {@link AnimationFeatureDependentInterface}\r\n * and extends a specified base class.\r\n *\r\n * @param {Class} BaseClass - The class to extend.\r\n *\r\n * @return {Class} A class that extends `BaseClass` and implements {@link AnimationFeatureDependentInterface}.\r\n */\n\n }], [{\n key: "Mixin",\n value: function Mixin(BaseClass) {\n var ParentClass = core_FeatureDependentInterface.Mixin(BaseClass);\n\n var AnimationFeatureDependentMixin = /*#__PURE__*/function (_ParentClass) {\n AnimationFeatureDependentInterface_inherits(AnimationFeatureDependentMixin, _ParentClass);\n\n var _super2 = AnimationFeatureDependentInterface_createSuper(AnimationFeatureDependentMixin);\n\n function AnimationFeatureDependentMixin() {\n AnimationFeatureDependentInterface_classCallCheck(this, AnimationFeatureDependentMixin);\n\n return _super2.apply(this, arguments);\n }\n\n AnimationFeatureDependentInterface_createClass(AnimationFeatureDependentMixin, [{\n key: "_onLayerAdded",\n value: function _onLayerAdded(_ref7) {\n var name = _ref7.name;\n }\n }, {\n key: "_onLayerRemoved",\n value: function _onLayerRemoved(_ref8) {\n var name = _ref8.name;\n }\n }, {\n key: "_onLayerRenamed",\n value: function _onLayerRenamed(_ref9) {\n var oldName = _ref9.oldName,\n newName = _ref9.newName;\n }\n }, {\n key: "_onAnimationAdded",\n value: function _onAnimationAdded(_ref10) {\n var layerName = _ref10.layerName,\n animationName = _ref10.animationName;\n }\n }, {\n key: "_onAnimationRemoved",\n value: function _onAnimationRemoved(_ref11) {\n var layerName = _ref11.layerName,\n animationName = _ref11.animationName;\n }\n }, {\n key: "_onAnimationRenamed",\n value: function _onAnimationRenamed(_ref12) {\n var layerName = _ref12.layerName,\n oldName = _ref12.oldName,\n newName = _ref12.newName;\n }\n }]);\n\n return AnimationFeatureDependentMixin;\n }(ParentClass);\n\n Object.defineProperties(AnimationFeatureDependentMixin, {\n EVENT_DEPENDENCIES: {\n value: AnimationFeatureDependentInterface_objectSpread(AnimationFeatureDependentInterface_objectSpread({}, ParentClass.EVENT_DEPENDENCIES), AnimationFeatureDependentInterface.EVENT_DEPENDENCIES),\n writable: false\n }\n });\n return AnimationFeatureDependentMixin;\n }\n }]);\n\n return AnimationFeatureDependentInterface;\n}(core_FeatureDependentInterface);\n\nObject.defineProperties(AnimationFeatureDependentInterface_AnimationFeatureDependentInterface, {\n EVENT_DEPENDENCIES: {\n value: {\n AnimationFeature: {\n addLayer: \'_onLayerAdded\',\n removeLayer: \'_onLayerRemoved\',\n renameLayer: \'_onLayerRenamed\',\n addAnimation: \'_onAnimationAdded\',\n removeAnimation: \'_onAnimationRemoved\',\n renameAnimation: \'_onAnimationRenamed\'\n }\n },\n writable: false\n }\n});\n/* harmony default export */ var animpack_AnimationFeatureDependentInterface = (AnimationFeatureDependentInterface_AnimationFeatureDependentInterface);\n// CONCATENATED MODULE: ./src/core/animpack/ManagedAnimationLayerInterface.js\nfunction ManagedAnimationLayerInterface_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { ManagedAnimationLayerInterface_typeof = function _typeof(obj) { return typeof obj; }; } else { ManagedAnimationLayerInterface_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return ManagedAnimationLayerInterface_typeof(obj); }\n\nfunction ManagedAnimationLayerInterface_slicedToArray(arr, i) { return ManagedAnimationLayerInterface_arrayWithHoles(arr) || ManagedAnimationLayerInterface_iterableToArrayLimit(arr, i) || ManagedAnimationLayerInterface_unsupportedIterableToArray(arr, i) || ManagedAnimationLayerInterface_nonIterableRest(); }\n\nfunction ManagedAnimationLayerInterface_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."); }\n\nfunction ManagedAnimationLayerInterface_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return ManagedAnimationLayerInterface_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return ManagedAnimationLayerInterface_arrayLikeToArray(o, minLen); }\n\nfunction ManagedAnimationLayerInterface_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction ManagedAnimationLayerInterface_iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction ManagedAnimationLayerInterface_arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction ManagedAnimationLayerInterface_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction ManagedAnimationLayerInterface_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ManagedAnimationLayerInterface_ownKeys(Object(source), true).forEach(function (key) { ManagedAnimationLayerInterface_defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ManagedAnimationLayerInterface_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction ManagedAnimationLayerInterface_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction ManagedAnimationLayerInterface_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { ManagedAnimationLayerInterface_get = Reflect.get; } else { ManagedAnimationLayerInterface_get = function _get(target, property, receiver) { var base = ManagedAnimationLayerInterface_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return ManagedAnimationLayerInterface_get(target, property, receiver || target); }\n\nfunction ManagedAnimationLayerInterface_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = ManagedAnimationLayerInterface_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction ManagedAnimationLayerInterface_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction ManagedAnimationLayerInterface_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction ManagedAnimationLayerInterface_createClass(Constructor, protoProps, staticProps) { if (protoProps) ManagedAnimationLayerInterface_defineProperties(Constructor.prototype, protoProps); if (staticProps) ManagedAnimationLayerInterface_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction ManagedAnimationLayerInterface_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) ManagedAnimationLayerInterface_setPrototypeOf(subClass, superClass); }\n\nfunction ManagedAnimationLayerInterface_setPrototypeOf(o, p) { ManagedAnimationLayerInterface_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return ManagedAnimationLayerInterface_setPrototypeOf(o, p); }\n\nfunction ManagedAnimationLayerInterface_createSuper(Derived) { var hasNativeReflectConstruct = ManagedAnimationLayerInterface_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = ManagedAnimationLayerInterface_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = ManagedAnimationLayerInterface_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return ManagedAnimationLayerInterface_possibleConstructorReturn(this, result); }; }\n\nfunction ManagedAnimationLayerInterface_possibleConstructorReturn(self, call) { if (call && (ManagedAnimationLayerInterface_typeof(call) === "object" || typeof call === "function")) { return call; } return ManagedAnimationLayerInterface_assertThisInitialized(self); }\n\nfunction ManagedAnimationLayerInterface_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction ManagedAnimationLayerInterface_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction ManagedAnimationLayerInterface_getPrototypeOf(o) { ManagedAnimationLayerInterface_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return ManagedAnimationLayerInterface_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/* eslint-disable no-unused-vars */\n\n/* eslint-disable max-classes-per-file */\n\n/**\r\n * Class factory interface for that keeps track of layers and animations on a host.\r\n * Tracked assets are marked as inactive until layers and animations with matching\r\n * names are detected as present on the host.\r\n *\r\n * @interface\r\n * @extends AnimationFeatureDependentInterface\r\n *\r\n * @property {Object} DEFAULT_LAYER_OPTIONS - Default options to use when executing\r\n * {@link AnimationLayer} methods.\r\n * @property {number} [DEFAULT_LAYER_OPTIONS.blendTime=0.5] - Default time in seconds\r\n * to use when executing {@link AnimationLayer.setBlendWeight}.\r\n * @property {Object} [DEFAULT_LAYER_OPTIONS.animations={}] - Maps animation names\r\n * to default options objects to use for managed animations.\r\n */\n\nvar ManagedAnimationLayerInterface_ManagedAnimationLayerInterface = /*#__PURE__*/function (_AnimationFeatureDepe) {\n ManagedAnimationLayerInterface_inherits(ManagedAnimationLayerInterface, _AnimationFeatureDepe);\n\n var _super = ManagedAnimationLayerInterface_createSuper(ManagedAnimationLayerInterface);\n\n function ManagedAnimationLayerInterface() {\n ManagedAnimationLayerInterface_classCallCheck(this, ManagedAnimationLayerInterface);\n\n return _super.apply(this, arguments);\n }\n\n ManagedAnimationLayerInterface_createClass(ManagedAnimationLayerInterface, [{\n key: "registerLayer",\n value:\n /**\r\n * Start tracking keeping track of whether a layer with the given name is present\r\n * on the host.\r\n *\r\n * @param {string} name - Name of the layer to keep track of.\r\n * @param {Object=} options - Options for the layer.\r\n * @param {number=} options.blendTime - Default amount of time to use when\r\n * manipulating layer weights on this layer.\r\n * @param {Function=} options.easingFn - Default easing function to use when\r\n * manipulating layer weights on this layer.\r\n * @param {Object=} options.animations - Animations to keep track of on the layer.\r\n * Animations are represented as key/value pairs of animation names and their\r\n * options.\r\n */\n function registerLayer(name) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n }\n /**\r\n * Start tracking keeping track of whether an animation with the given name is\r\n * present on the host.\r\n *\r\n * @param {string} layerName - Name of the layer that will own the animation.\r\n * @param {string} animationName - Name of the animation to keep track of.\r\n * @param {Object=} options - Options for the animation.\r\n */\n\n }, {\n key: "registerAnimation",\n value: function registerAnimation(layerName, animationName) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n }\n /**\r\n * Set layer weights on tracked layers.\r\n *\r\n * @param {Function=} nameFilter - Predicate function to test each tracked layer\r\n * with. By default all layers will pass.\r\n * @param {number} weight - Weight value to set on layers.\r\n * @param {number=} seconds - Number of seconds it will take to reach the weight\r\n * on each layer. If undefined, each layers\' blendTime option is used.\r\n * @param {Function=} easingFn - Easing function to use when setting weight\r\n * on each layer. If undefined, each layers\' easingFn option is used.\r\n */\n\n }, {\n key: "setLayerWeights",\n value: function setLayerWeights() {\n var nameFilter = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : function () {\n return true;\n };\n var weight = arguments.length > 1 ? arguments[1] : undefined;\n var seconds = arguments.length > 2 ? arguments[2] : undefined;\n var easingFn = arguments.length > 3 ? arguments[3] : undefined;\n }\n /**\r\n * Set all tracked layers\' weights to 1.\r\n *\r\n * @param {number=} seconds - Number of seconds it will take to reach the weight\r\n * on each layer. If undefined, each layers\' blendTime option is used.\r\n * @param {Function=} easingFn - Easing function to use when setting weight\r\n * on each layer. If undefined, each layers\' easingFn option is used.\r\n */\n\n }, {\n key: "enable",\n value: function enable(seconds, easingFn) {}\n /**\r\n * Set all tracked layers\' weights to 0.\r\n *\r\n * @param {number=} seconds - Number of seconds it will take to reach the weight\r\n * on each layer. If undefined, each layers\' blendTime option is used.\r\n * @param {Function=} easingFn - Easing function to use when setting weight\r\n * on each layer. If undefined, each layers\' easingFn option is used.\r\n */\n\n }, {\n key: "disable",\n value: function disable(seconds, easingFn) {}\n /**\r\n * Creates a class that implements {@link ManagedAnimationLayerInterface}\r\n * and extends a specified base class.\r\n *\r\n * @param {Class} BaseClass - The class to extend.\r\n *\r\n * @return {Class} A class that extends `BaseClass` and implements {@link ManagedAnimationLayerInterface}.\r\n */\n\n }], [{\n key: "Mixin",\n value: function Mixin(BaseClass) {\n var ParentClass = animpack_AnimationFeatureDependentInterface.Mixin(BaseClass);\n\n var ManagedAnimationLayerMixin = /*#__PURE__*/function (_ParentClass) {\n ManagedAnimationLayerInterface_inherits(ManagedAnimationLayerMixin, _ParentClass);\n\n var _super2 = ManagedAnimationLayerInterface_createSuper(ManagedAnimationLayerMixin);\n\n function ManagedAnimationLayerMixin() {\n var _this;\n\n ManagedAnimationLayerInterface_classCallCheck(this, ManagedAnimationLayerMixin);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super2.call.apply(_super2, [this].concat(args));\n _this._managedLayers = {};\n return _this;\n }\n\n ManagedAnimationLayerInterface_createClass(ManagedAnimationLayerMixin, [{\n key: "_onFeatureAdded",\n value: function _onFeatureAdded(typeName) {\n var _this2 = this;\n\n ManagedAnimationLayerInterface_get(ManagedAnimationLayerInterface_getPrototypeOf(ManagedAnimationLayerMixin.prototype), "_onFeatureAdded", this).call(this, typeName);\n\n if (typeName !== \'AnimationFeature\') {\n return;\n }\n\n this._managedLayers = this._managedLayers || {}; // Detect new layers\n\n this._host.AnimationFeature.layers.forEach(function (name) {\n _this2._onLayerAdded({\n name: name\n });\n });\n }\n }, {\n key: "_onFeatureRemoved",\n value: function _onFeatureRemoved(typeName) {\n var _this3 = this;\n\n ManagedAnimationLayerInterface_get(ManagedAnimationLayerInterface_getPrototypeOf(ManagedAnimationLayerMixin.prototype), "_onFeatureRemoved", this).call(this, typeName);\n\n if (typeName !== \'AnimationFeature\') {\n return;\n }\n\n this._managedLayers = this._managedLayers || {}; // Deactivate the layers\n\n Object.keys(this._managedLayers).forEach(function (name) {\n _this3._onLayerRemoved({\n name: name\n });\n });\n }\n }, {\n key: "_onLayerAdded",\n value: function _onLayerAdded(_ref) {\n var _this4 = this;\n\n var name = _ref.name;\n\n // Mark the layer as active if it is managed\n if (this._managedLayers[name] !== undefined) {\n this._managedLayers[name].isActive = true; // Detect new animations\n\n this._host.AnimationFeature.getAnimations(name).forEach(function (animName) {\n _this4._onAnimationAdded({\n layerName: name,\n animationName: animName\n });\n });\n }\n }\n }, {\n key: "_onLayerRemoved",\n value: function _onLayerRemoved(_ref2) {\n var _this5 = this;\n\n var name = _ref2.name;\n\n // Deactivate the layer if it is managed\n if (this._managedLayers[name] !== undefined) {\n this._managedLayers[name].isActive = false; // Deactivate the animations\n\n Object.keys(this._managedLayers[name].animations).forEach(function (animName) {\n _this5._onAnimationRemoved({\n layerName: name,\n animationName: animName\n });\n });\n }\n }\n }, {\n key: "_onLayerRenamed",\n value: function _onLayerRenamed(_ref3) {\n var oldName = _ref3.oldName,\n newName = _ref3.newName;\n var layerOptions = this._managedLayers[oldName]; // Replace the layer key with the new name\n\n if (layerOptions !== undefined) {\n delete this._managedLayers[oldName];\n this._managedLayers[newName] = layerOptions;\n }\n }\n }, {\n key: "_onAnimationAdded",\n value: function _onAnimationAdded(_ref4) {\n var layerName = _ref4.layerName,\n animationName = _ref4.animationName;\n\n // Mark the animation as active if it is managed\n if (this._managedLayers[layerName] !== undefined && this._managedLayers[layerName].animations[animationName] !== undefined) {\n this._managedLayers[layerName].animations[animationName].isActive = true;\n }\n }\n }, {\n key: "_onAnimationRemoved",\n value: function _onAnimationRemoved(_ref5) {\n var layerName = _ref5.layerName,\n animationName = _ref5.animationName;\n\n // Deactivate the animation if it is managed\n if (this._managedLayers[layerName] !== undefined && this._managedLayers[layerName].animations[animationName] !== undefined) {\n this._managedLayers[layerName].animations[animationName].isActive = false;\n }\n }\n }, {\n key: "_onAnimationRenamed",\n value: function _onAnimationRenamed(_ref6) {\n var layerName = _ref6.layerName,\n oldName = _ref6.oldName,\n newName = _ref6.newName;\n\n if (this._managedLayers[layerName] !== undefined && this._managedLayers[layerName].animations[oldName] !== undefined) {\n // Replace the animation key with the new name\n var animOptions = this._managedLayers[layerName].animations[oldName];\n delete this._managedLayers[layerName].animations[oldName];\n this._managedLayers[layerName].animations[newName] = animOptions;\n }\n }\n }, {\n key: "registerLayer",\n value: function registerLayer(name) {\n var _this6 = this;\n\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n // Start with default options for each new layer\n if (this._managedLayers[name] === undefined) {\n this._managedLayers[name] = ManagedAnimationLayerInterface_objectSpread(ManagedAnimationLayerInterface_objectSpread({}, this.constructor.DEFAULT_LAYER_OPTIONS), {}, {\n animations: {}\n });\n } // Update all options except animations\n\n\n var layerOptions = this._managedLayers[name];\n options = ManagedAnimationLayerInterface_objectSpread({}, options);\n var animationOptions = options.animations || {};\n delete options.animations;\n Object.assign(layerOptions, options); // Check whether the layer can be manipulated now\n\n layerOptions.isActive = this._host.AnimationFeature !== undefined && this._host.AnimationFeature.layers.includes(name); // Register the animations\n\n Object.entries(animationOptions).forEach(function (_ref7) {\n var _ref8 = ManagedAnimationLayerInterface_slicedToArray(_ref7, 2),\n animName = _ref8[0],\n animOptions = _ref8[1];\n\n _this6.registerAnimation(name, animName, animOptions);\n });\n }\n }, {\n key: "registerAnimation",\n value: function registerAnimation(layerName, animationName) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n // Register the layer if it hasn\'t been registered yet\n if (this._managedLayers[layerName] === undefined) {\n this.registerLayer(layerName);\n } // Update animation options\n\n\n var animOptions = this._managedLayers[layerName].animations[animationName] || {};\n Object.assign(animOptions, options);\n this._managedLayers[layerName].animations[animationName] = animOptions; // Check whether the animation can be manipulated now\n\n this._managedLayers[layerName].animations[animationName].isActive = this._managedLayers[layerName].isActive && this._host.AnimationFeature.getAnimations(layerName).includes(animationName);\n }\n }, {\n key: "setLayerWeights",\n value: function setLayerWeights() {\n var _this7 = this;\n\n var nameFilter = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : function () {\n return true;\n };\n var weight = arguments.length > 1 ? arguments[1] : undefined;\n var seconds = arguments.length > 2 ? arguments[2] : undefined;\n var easingFn = arguments.length > 3 ? arguments[3] : undefined;\n var layerNames = Object.keys(this._managedLayers).filter(nameFilter);\n layerNames.forEach(function (name) {\n var layerOptions = _this7._managedLayers[name];\n\n if (layerOptions.isActive) {\n _this7._host.AnimationFeature.setLayerWeight(name, weight, seconds !== undefined ? seconds : layerOptions.blendTime, easingFn || layerOptions.easingFn);\n }\n });\n }\n }, {\n key: "enable",\n value: function enable(seconds, easingFn) {\n this.setLayerWeights(undefined, 1, seconds, easingFn);\n }\n }, {\n key: "disable",\n value: function disable(seconds, easingFn) {\n this.setLayerWeights(undefined, 0, seconds, easingFn);\n }\n }, {\n key: "installApi",\n value: function installApi() {\n var api = ManagedAnimationLayerInterface_get(ManagedAnimationLayerInterface_getPrototypeOf(ManagedAnimationLayerMixin.prototype), "installApi", this).call(this);\n\n Object.assign(api, {\n registerLayer: this.registerLayer.bind(this),\n registerAnimation: this.registerAnimation.bind(this),\n setLayerWeights: this.setLayerWeights.bind(this),\n enable: this.enable.bind(this),\n disable: this.disable.bind(this)\n });\n return api;\n }\n }]);\n\n return ManagedAnimationLayerMixin;\n }(ParentClass);\n\n Object.defineProperties(ManagedAnimationLayerMixin, {\n DEFAULT_LAYER_OPTIONS: {\n value: ManagedAnimationLayerInterface.DEFAULT_LAYER_OPTIONS,\n writable: false\n }\n });\n return ManagedAnimationLayerMixin;\n }\n }]);\n\n return ManagedAnimationLayerInterface;\n}(animpack_AnimationFeatureDependentInterface);\n\nObject.defineProperties(ManagedAnimationLayerInterface_ManagedAnimationLayerInterface, {\n DEFAULT_LAYER_OPTIONS: {\n value: {\n blendTime: 0.5,\n animations: {}\n },\n writable: false\n }\n});\n/* harmony default export */ var animpack_ManagedAnimationLayerInterface = (ManagedAnimationLayerInterface_ManagedAnimationLayerInterface);\n// CONCATENATED MODULE: ./src/core/awspack/TextToSpeechFeatureDependentInterface.js\nfunction TextToSpeechFeatureDependentInterface_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { TextToSpeechFeatureDependentInterface_typeof = function _typeof(obj) { return typeof obj; }; } else { TextToSpeechFeatureDependentInterface_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return TextToSpeechFeatureDependentInterface_typeof(obj); }\n\nfunction TextToSpeechFeatureDependentInterface_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction TextToSpeechFeatureDependentInterface_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { TextToSpeechFeatureDependentInterface_ownKeys(Object(source), true).forEach(function (key) { TextToSpeechFeatureDependentInterface_defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { TextToSpeechFeatureDependentInterface_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction TextToSpeechFeatureDependentInterface_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction TextToSpeechFeatureDependentInterface_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction TextToSpeechFeatureDependentInterface_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction TextToSpeechFeatureDependentInterface_createClass(Constructor, protoProps, staticProps) { if (protoProps) TextToSpeechFeatureDependentInterface_defineProperties(Constructor.prototype, protoProps); if (staticProps) TextToSpeechFeatureDependentInterface_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction TextToSpeechFeatureDependentInterface_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) TextToSpeechFeatureDependentInterface_setPrototypeOf(subClass, superClass); }\n\nfunction TextToSpeechFeatureDependentInterface_setPrototypeOf(o, p) { TextToSpeechFeatureDependentInterface_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return TextToSpeechFeatureDependentInterface_setPrototypeOf(o, p); }\n\nfunction TextToSpeechFeatureDependentInterface_createSuper(Derived) { var hasNativeReflectConstruct = TextToSpeechFeatureDependentInterface_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = TextToSpeechFeatureDependentInterface_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = TextToSpeechFeatureDependentInterface_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return TextToSpeechFeatureDependentInterface_possibleConstructorReturn(this, result); }; }\n\nfunction TextToSpeechFeatureDependentInterface_possibleConstructorReturn(self, call) { if (call && (TextToSpeechFeatureDependentInterface_typeof(call) === "object" || typeof call === "function")) { return call; } return TextToSpeechFeatureDependentInterface_assertThisInitialized(self); }\n\nfunction TextToSpeechFeatureDependentInterface_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction TextToSpeechFeatureDependentInterface_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction TextToSpeechFeatureDependentInterface_getPrototypeOf(o) { TextToSpeechFeatureDependentInterface_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return TextToSpeechFeatureDependentInterface_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/* eslint-disable max-classes-per-file */\n\n/**\r\n * Class factory interface for features that are dependent on the TextToSpeechFeature\r\n * being present on the host. Speech events will automatically be listened for once a\r\n * TextToSpeechFeature is added to the host and stopped once it is removed.\r\n *\r\n * @interface\r\n * @extends FeatureDependentInterface\r\n *\r\n * @property {Object} EVENT_DEPENDENCIES - Events that the feature should start/stop\r\n * listening for when a feature of type FeatureName is added/removed from the host.\r\n * @property {Object} EVENT_DEPENDENCIES.TextToSpeechFeature - Events that are\r\n * specific to the TextToSpeechFeature.\r\n * @property {string} [EVENT_DEPENDENCIES.TextToSpeechFeature.play=\'_onPlay\'] -\r\n * The name of the method that will be executed when TextToSpeechFeature play\r\n * events are emitted.\r\n * @property {string} [EVENT_DEPENDENCIES.TextToSpeechFeature.pause=\'_onPause\'] -\r\n * The name of the method that will be executed when TextToSpeechFeature pause\r\n * events are emitted.\r\n * @property {string} [EVENT_DEPENDENCIES.TextToSpeechFeature.resume=\'_onResume\'] -\r\n * The name of the method that will be executed when TextToSpeechFeature resume\r\n * events are emitted.\r\n * @property {string} [EVENT_DEPENDENCIES.TextToSpeechFeature.stop=\'_onStop\'] -\r\n * The name of the method that will be executed when TextToSpeechFeature stop\r\n * events are emitted.\r\n * @property {string} [EVENT_DEPENDENCIES.TextToSpeechFeature.sentence=\'_onSentence\'] -\r\n * The name of the method that will be executed when TextToSpeechFeature sentence\r\n * events are emitted.\r\n * @property {string} [EVENT_DEPENDENCIES.TextToSpeechFeature.word=\'_onWord\'] -\r\n * The name of the method that will be executed when TextToSpeechFeature word\r\n * events are emitted.\r\n * @property {string} [EVENT_DEPENDENCIES.TextToSpeechFeature.viseme=\'_onViseme\'] -\r\n * The name of the method that will be executed when TextToSpeechFeature viseme\r\n * events are emitted.\r\n * @property {string} [EVENT_DEPENDENCIES.TextToSpeechFeature.ssml=\'_onSsml\'] -\r\n * The name of the method that will be executed when TextToSpeechFeature ssml\r\n * events are emitted.\r\n */\n\nvar TextToSpeechFeatureDependentInterface_TextToSpeechFeatureDependentInterface = /*#__PURE__*/function (_FeatureDependentInte) {\n TextToSpeechFeatureDependentInterface_inherits(TextToSpeechFeatureDependentInterface, _FeatureDependentInte);\n\n var _super = TextToSpeechFeatureDependentInterface_createSuper(TextToSpeechFeatureDependentInterface);\n\n function TextToSpeechFeatureDependentInterface() {\n TextToSpeechFeatureDependentInterface_classCallCheck(this, TextToSpeechFeatureDependentInterface);\n\n return _super.apply(this, arguments);\n }\n\n TextToSpeechFeatureDependentInterface_createClass(TextToSpeechFeatureDependentInterface, [{\n key: "_onPlay",\n value:\n /**\r\n * Executed when speech play events are caught.\r\n *\r\n * @private\r\n */\n function _onPlay() {}\n /**\r\n * Executed when speech pause events are caught.\r\n *\r\n * @private\r\n */\n\n }, {\n key: "_onPause",\n value: function _onPause() {}\n /**\r\n * Executed when speech resume events are caught.\r\n *\r\n * @private\r\n */\n\n }, {\n key: "_onResume",\n value: function _onResume() {}\n /**\r\n * Executed when speech stop events are caught.\r\n *\r\n * @private\r\n */\n\n }, {\n key: "_onStop",\n value: function _onStop() {}\n /**\r\n * Executed when speech sentence events are caught.\r\n *\r\n * @private\r\n */\n\n }, {\n key: "_onSentence",\n value: function _onSentence() {}\n /**\r\n * Executed when speech word events are caught.\r\n *\r\n * @private\r\n */\n\n }, {\n key: "_onWord",\n value: function _onWord() {}\n /**\r\n * Executed when speech viseme events are caught.\r\n *\r\n * @private\r\n */\n\n }, {\n key: "_onViseme",\n value: function _onViseme() {}\n /**\r\n * Executed when speech ssml events are caught.\r\n *\r\n * @private\r\n */\n\n }, {\n key: "_onSsml",\n value: function _onSsml() {}\n /**\r\n * Creates a class that implements {@link TextToSpeechFeatureDependentInterface}\r\n * and extends a specified base class.\r\n *\r\n * @param {Class} BaseClass - The class to extend.\r\n *\r\n * @return {Class} A class that extends `BaseClass` and implements {@link TextToSpeechFeatureDependentInterface}.\r\n */\n\n }], [{\n key: "Mixin",\n value: function Mixin(BaseClass) {\n var ParentClass = core_FeatureDependentInterface.Mixin(BaseClass);\n\n var TextToSpeechFeatureDependentMixin = /*#__PURE__*/function (_ParentClass) {\n TextToSpeechFeatureDependentInterface_inherits(TextToSpeechFeatureDependentMixin, _ParentClass);\n\n var _super2 = TextToSpeechFeatureDependentInterface_createSuper(TextToSpeechFeatureDependentMixin);\n\n function TextToSpeechFeatureDependentMixin() {\n TextToSpeechFeatureDependentInterface_classCallCheck(this, TextToSpeechFeatureDependentMixin);\n\n return _super2.apply(this, arguments);\n }\n\n TextToSpeechFeatureDependentInterface_createClass(TextToSpeechFeatureDependentMixin, [{\n key: "_onPlay",\n value: function _onPlay() {}\n }, {\n key: "_onPause",\n value: function _onPause() {}\n }, {\n key: "_onResume",\n value: function _onResume() {}\n }, {\n key: "_onStop",\n value: function _onStop() {}\n }, {\n key: "_onSentence",\n value: function _onSentence() {}\n }, {\n key: "_onWord",\n value: function _onWord() {}\n }, {\n key: "_onViseme",\n value: function _onViseme() {}\n }, {\n key: "_onSsml",\n value: function _onSsml() {}\n }]);\n\n return TextToSpeechFeatureDependentMixin;\n }(ParentClass);\n\n Object.defineProperties(TextToSpeechFeatureDependentMixin, {\n EVENT_DEPENDENCIES: {\n value: TextToSpeechFeatureDependentInterface_objectSpread(TextToSpeechFeatureDependentInterface_objectSpread({}, ParentClass.EVENT_DEPENDENCIES), TextToSpeechFeatureDependentInterface.EVENT_DEPENDENCIES),\n writable: false\n }\n });\n return TextToSpeechFeatureDependentMixin;\n }\n }]);\n\n return TextToSpeechFeatureDependentInterface;\n}(core_FeatureDependentInterface);\n\nObject.defineProperties(TextToSpeechFeatureDependentInterface_TextToSpeechFeatureDependentInterface, {\n EVENT_DEPENDENCIES: {\n value: {\n TextToSpeechFeature: {\n play: \'_onPlay\',\n pause: \'_onPause\',\n resume: \'_onResume\',\n stop: \'_onStop\',\n sentence: \'_onSentence\',\n word: \'_onWord\',\n viseme: \'_onViseme\',\n ssml: \'_onSsml\'\n }\n },\n writable: false\n }\n});\n/* harmony default export */ var awspack_TextToSpeechFeatureDependentInterface = (TextToSpeechFeatureDependentInterface_TextToSpeechFeatureDependentInterface);\n// CONCATENATED MODULE: ./src/core/LipsyncFeature.js\nfunction LipsyncFeature_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { LipsyncFeature_typeof = function _typeof(obj) { return typeof obj; }; } else { LipsyncFeature_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return LipsyncFeature_typeof(obj); }\n\nfunction LipsyncFeature_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction LipsyncFeature_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { LipsyncFeature_ownKeys(Object(source), true).forEach(function (key) { LipsyncFeature_defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { LipsyncFeature_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction LipsyncFeature_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\n\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }\n\nfunction LipsyncFeature_slicedToArray(arr, i) { return LipsyncFeature_arrayWithHoles(arr) || LipsyncFeature_iterableToArrayLimit(arr, i) || LipsyncFeature_unsupportedIterableToArray(arr, i) || LipsyncFeature_nonIterableRest(); }\n\nfunction LipsyncFeature_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."); }\n\nfunction LipsyncFeature_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return LipsyncFeature_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return LipsyncFeature_arrayLikeToArray(o, minLen); }\n\nfunction LipsyncFeature_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction LipsyncFeature_iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction LipsyncFeature_arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction LipsyncFeature_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction LipsyncFeature_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction LipsyncFeature_createClass(Constructor, protoProps, staticProps) { if (protoProps) LipsyncFeature_defineProperties(Constructor.prototype, protoProps); if (staticProps) LipsyncFeature_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction LipsyncFeature_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { LipsyncFeature_get = Reflect.get; } else { LipsyncFeature_get = function _get(target, property, receiver) { var base = LipsyncFeature_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return LipsyncFeature_get(target, property, receiver || target); }\n\nfunction LipsyncFeature_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = LipsyncFeature_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction LipsyncFeature_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) LipsyncFeature_setPrototypeOf(subClass, superClass); }\n\nfunction LipsyncFeature_setPrototypeOf(o, p) { LipsyncFeature_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return LipsyncFeature_setPrototypeOf(o, p); }\n\nfunction LipsyncFeature_createSuper(Derived) { var hasNativeReflectConstruct = LipsyncFeature_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = LipsyncFeature_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = LipsyncFeature_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return LipsyncFeature_possibleConstructorReturn(this, result); }; }\n\nfunction LipsyncFeature_possibleConstructorReturn(self, call) { if (call && (LipsyncFeature_typeof(call) === "object" || typeof call === "function")) { return call; } return LipsyncFeature_assertThisInitialized(self); }\n\nfunction LipsyncFeature_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction LipsyncFeature_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction LipsyncFeature_getPrototypeOf(o) { LipsyncFeature_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return LipsyncFeature_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n\n\n/**\r\n * Default mapping of Polly viseme names to animation options objects.\r\n *\r\n * @property {Object} [sil={name: \'sil\'}]\r\n * @property {Object} [p={name: \'p\', overrideWeight: 0.9}]\r\n * @property {Object} [t={name: \'t\', blendTime: 0.2}]\r\n * @property {Object} [S={name: \'S\'}]\r\n * @property {Object} [T={name: \'T\'}]\r\n * @property {Object} [f={name: \'f\', overrideWeight: 0.75}]\r\n * @property {Object} [k={name: \'k\'}]\r\n * @property {Object} [i={name: \'i\'}]\r\n * @property {Object} [r={name: \'r\'}]\r\n * @property {Object} [s={name: \'s\', blendTime: 0.25}]\r\n * @property {Object} [u={name: \'u\'}]\r\n * @property {Object} [@={name: \'@\'}]\r\n * @property {Object} [a={name: \'a\'}]\r\n * @property {Object} [e={name: \'e\', blendTime: 0.2}]\r\n * @property {Object} [E={name: \'E\'}]\r\n * @property {Object} [o={name: \'o\'}]\r\n * @property {Object} [O={name: \'O\'}]\r\n */\n\nvar DefaultVisemeMap = {\n sil: {\n name: \'sil\'\n },\n p: {\n name: \'p\',\n overrideWeight: 0.9\n },\n t: {\n name: \'t\',\n blendTime: 0.2\n },\n S: {\n name: \'S\'\n },\n T: {\n name: \'T\'\n },\n f: {\n name: \'f\',\n overrideWeight: 0.75\n },\n k: {\n name: \'k\'\n },\n i: {\n name: \'i\'\n },\n r: {\n name: \'r\'\n },\n s: {\n name: \'s\',\n blendTime: 0.25\n },\n u: {\n name: \'u\'\n },\n \'@\': {\n name: \'@\'\n },\n a: {\n name: \'a\'\n },\n e: {\n name: \'e\',\n blendTime: 0.2\n },\n E: {\n name: \'E\'\n },\n o: {\n name: \'o\'\n },\n O: {\n name: \'O\'\n }\n};\n/**\r\n * Lipsync controls two types of movement: idle animation that should play while\r\n * speech is playing and viseme animations corresponding to Polly visemes whose\r\n * weights should be turned on and off as they are encountered in the Polly SSML\r\n * transcript. Layers owned by this feature will be enabled while speech is playing\r\n * and disabled once it stops.\r\n *\r\n * @extends AbstractHostFeature\r\n * @alias core/LipsyncFeature\r\n * @implements TextToSpeechFeatureDependentInterface\r\n * @implements ManagedAnimationLayerInterface\r\n */\n\nvar LipsyncFeature_LipsyncFeature = /*#__PURE__*/function (_AbstractHostFeature$) {\n LipsyncFeature_inherits(LipsyncFeature, _AbstractHostFeature$);\n\n var _super = LipsyncFeature_createSuper(LipsyncFeature);\n\n /**\r\n * @constructor\r\n *\r\n * @param {core/HostObject} host - Host that owns the feature.\r\n * @param {Object=} visemeOptions - Options for the viseme layers.\r\n * @param {number} [visemeOptions.blendTime=0.15] - Default amount of time it\r\n * will take to manipulate each freeBlend weight on the viseme states.\r\n * @param {Object} [visemeOptions.decayRate={amount: .5, seconds: .5}] - An object\r\n * describing the 0-1 factor viseme weight will decay if the viseme duration is\r\n * longer than the blendTime and the number of seconds it would take to decay\r\n * by that factor.\r\n * @param {number} [visemeOptions.easingFn=Quadratic.InOut] - Default easing function\r\n * to use when manipulating viseme freeBlend weights.\r\n * @param {Array.} [visemeOptions..layers=[]] - An array of layer options\r\n * objects to register as viseme layers.\r\n * @param {Object=} talkingOptions - Options for the talking layers.\r\n * @param {number} [talkingOptions.blendTime=0.75] - Default amount of time to\r\n * enable and disable the talking idle layers\r\n * @param {number} [talkingOptions.easingFn=Quadratic.InOut] - Default easing\r\n * function to use when manipulating weights on the talking idle layers.\r\n * @param {Array.} [talkingOptions.layers=[]] - An array of layer options\r\n * objects to register as talking layers.\r\n * @param {number} [visemeLeadTime=.067] - The amount of time to instruct the\r\n * TextToSpeechFeature to emit speechmarks before each one\'s actual timestamp\r\n * is reached. This will set the \'speechMarkOffset\' variable on the TextToSpeechFeature.\r\n */\n function LipsyncFeature(host) {\n var _this;\n\n var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n _ref$blendTime = _ref.blendTime,\n visemeBlendTime = _ref$blendTime === void 0 ? 0.15 : _ref$blendTime,\n _ref$decayRate = _ref.decayRate;\n\n _ref$decayRate = _ref$decayRate === void 0 ? {} : _ref$decayRate;\n var _ref$decayRate$amount = _ref$decayRate.amount,\n amount = _ref$decayRate$amount === void 0 ? 0.5 : _ref$decayRate$amount,\n _ref$decayRate$second = _ref$decayRate.seconds,\n seconds = _ref$decayRate$second === void 0 ? 0.5 : _ref$decayRate$second,\n _ref$easingFn = _ref.easingFn,\n visemeEasingFn = _ref$easingFn === void 0 ? Quadratic.InOut : _ref$easingFn,\n _ref$layers = _ref.layers,\n visemeLayers = _ref$layers === void 0 ? [] : _ref$layers;\n\n var _ref2 = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},\n _ref2$blendTime = _ref2.blendTime,\n talkingBlendTime = _ref2$blendTime === void 0 ? 0.75 : _ref2$blendTime,\n _ref2$easingFn = _ref2.easingFn,\n talkingEasingFn = _ref2$easingFn === void 0 ? Quadratic.InOut : _ref2$easingFn,\n _ref2$layers = _ref2.layers,\n talkingLayers = _ref2$layers === void 0 ? [] : _ref2$layers;\n\n var visemeLeadTime = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0.067;\n\n LipsyncFeature_classCallCheck(this, LipsyncFeature);\n\n _this = _super.call(this, host);\n _this._visemeLayers = {};\n _this._talkingLayers = {};\n _this.visemeLeadTime = visemeLeadTime; // Register the viseme layers\n\n visemeLayers.forEach(function (_ref3) {\n var name = _ref3.name,\n animation = _ref3.animation,\n _ref3$visemeMap = _ref3.visemeMap,\n visemeMap = _ref3$visemeMap === void 0 ? DefaultVisemeMap : _ref3$visemeMap;\n\n _this.registerVisemeLayer(name, {\n animation: animation,\n visemeMap: visemeMap,\n decayRate: {\n amount: amount,\n seconds: seconds\n },\n blendTime: visemeBlendTime,\n easingFn: visemeEasingFn\n });\n }); // Register the talking layers\n\n talkingLayers.forEach(function (_ref4) {\n var name = _ref4.name,\n animation = _ref4.animation;\n\n _this.registerTalkingLayer(name, {\n animation: animation,\n blendTime: talkingBlendTime,\n easingFn: talkingEasingFn\n });\n });\n return _this;\n }\n /**\r\n * Ensure that registered viseme animations are FreeBlendStates.\r\n *\r\n * @private\r\n *\r\n * @param {string} layerName - Name of the layer that contains the viseme animation.\r\n * @param {string} animationName - Name of the animation.\r\n */\n\n\n LipsyncFeature_createClass(LipsyncFeature, [{\n key: "_registerVisemeAnimation",\n value: function _registerVisemeAnimation(layerName, animationName) {\n if (this._managedLayers[layerName].animations[animationName].isActive) {\n if (this._host.AnimationFeature.getAnimationType(layerName, animationName) !== \'freeBlend\') {\n // Warn and deactivate if the registered state is not freeBlend\n console.warn("Cannot register Lipsync viseme animation ".concat(animationName, " on layer ").concat(layerName, " for host ").concat(this._host.id, ". Viseme animations must be of type \'freeBlend\'."));\n this._managedLayers[layerName].animations[animationName].isActive = false;\n } else {\n // Check if the blendWeights can be manipulated now\n var weightNames = this._host.AnimationFeature.getAnimationBlendNames(layerName, animationName);\n\n var visemeMap = this._managedLayers[layerName].animations[animationName].visemeMap;\n Object.values(visemeMap).forEach(function (visemeOptions) {\n visemeOptions.isActive = weightNames.includes(visemeOptions.name);\n });\n }\n }\n }\n /**\r\n * If the added feature is TextToSpeech, update its speechMarkOffset variable.\r\n *\r\n * @private\r\n *\r\n * @param {string} typeName - Name of the type of feature that was added.\r\n */\n\n }, {\n key: "_onFeatureAdded",\n value: function _onFeatureAdded(typeName) {\n this._visemeLayers = this._visemeLayers || {};\n this._talkingLayers = this._talkingLayers || {};\n\n LipsyncFeature_get(LipsyncFeature_getPrototypeOf(LipsyncFeature.prototype), "_onFeatureAdded", this).call(this, typeName);\n\n if (typeName === \'TextToSpeechFeature\') {\n this._host.TextToSpeechFeature.speechmarkOffset = -this._visemeLeadTime || 0;\n }\n }\n }, {\n key: "_onLayerAdded",\n value: function _onLayerAdded(_ref5) {\n var name = _ref5.name;\n\n LipsyncFeature_get(LipsyncFeature_getPrototypeOf(LipsyncFeature.prototype), "_onLayerAdded", this).call(this, {\n name: name\n }); // Validate the viseme animation\n\n\n if (this._visemeLayers[name] !== undefined) {\n this._registerVisemeAnimation(name, this._visemeLayers[name]);\n }\n }\n }, {\n key: "_onAnimationAdded",\n value: function _onAnimationAdded(_ref6) {\n var layerName = _ref6.layerName,\n animationName = _ref6.animationName;\n\n LipsyncFeature_get(LipsyncFeature_getPrototypeOf(LipsyncFeature.prototype), "_onAnimationAdded", this).call(this, {\n layerName: layerName\n }); // Validate the viseme animation\n\n\n if (this._visemeLayers[layerName] === animationName) {\n this._registerVisemeAnimation(layerName, this._visemeLayers[layerName]);\n }\n }\n }, {\n key: "_onPlay",\n value: function _onPlay() {\n var _this2 = this;\n\n // Turn on the layer weights\n this.enable(); // Set the current animations\n\n [this._visemeLayers, this._talkingLayers].forEach(function (layers) {\n Object.entries(layers).forEach(function (_ref7) {\n var _ref8 = LipsyncFeature_slicedToArray(_ref7, 2),\n layerName = _ref8[0],\n animationName = _ref8[1];\n\n if (_this2._managedLayers[layerName].animations[animationName].isActive) {\n _this2._host.AnimationFeature.resumeAnimation(layerName, animationName);\n }\n });\n });\n }\n }, {\n key: "_onPause",\n value: function _onPause() {\n this._onStop();\n }\n }, {\n key: "_onResume",\n value: function _onResume() {\n this._onPlay();\n }\n }, {\n key: "_onStop",\n value: function _onStop() {\n var _this3 = this;\n\n // Turn off the layer weights\n this.disable(); // Pause the current animations\n\n [this._visemeLayers, this._talkingLayers].forEach(function (layers) {\n Object.entries(layers).forEach(function (_ref9) {\n var _ref10 = LipsyncFeature_slicedToArray(_ref9, 2),\n layerName = _ref10[0],\n animationName = _ref10[1];\n\n if (_this3._managedLayers[layerName].animations[animationName].isActive) {\n _this3._host.AnimationFeature.pauseAnimation(layerName, animationName);\n }\n });\n });\n }\n /**\r\n * When viseme events are caught, turn on weight of the new viseme for the duration\r\n * of the speech mark, then turn weight back off.\r\n *\r\n * @private\r\n *\r\n * @param {Object} event - Event data passed from the speech.\r\n * @param {Object} event.mark - Speechmark object.\r\n */\n\n }, {\n key: "_onViseme",\n value: function () {\n var _onViseme2 = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee(_ref11) {\n var _this4 = this;\n\n var mark;\n return regeneratorRuntime.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n mark = _ref11.mark;\n Object.entries(this._visemeLayers).forEach(function (_ref12) {\n var _ref13 = LipsyncFeature_slicedToArray(_ref12, 2),\n layerName = _ref13[0],\n animName = _ref13[1];\n\n // Make sure the layer can be manipulated\n var _this4$_managedLayers = _this4._managedLayers[layerName].animations[animName],\n isActive = _this4$_managedLayers.isActive,\n visemeMap = _this4$_managedLayers.visemeMap;\n\n if (!isActive) {\n return;\n } // Take variables from the viseme if they exist and default to the layer\n\n\n var _this4$_managedLayers2 = LipsyncFeature_objectSpread(LipsyncFeature_objectSpread({}, _this4._managedLayers[layerName]), visemeMap[mark.value]),\n viseme = _this4$_managedLayers2.name,\n isVisemeActive = _this4$_managedLayers2.isActive,\n decayRate = _this4$_managedLayers2.decayRate,\n blendTime = _this4$_managedLayers2.blendTime,\n easingFn = _this4$_managedLayers2.easingFn,\n overrideWeight = _this4$_managedLayers2.overrideWeight;\n\n var visemeNames = _this4._host.AnimationFeature.getAnimationBlendNames(layerName, animName); // Make sure the new viseme has an active freeBlend weight\n\n\n if (!isVisemeActive || !visemeNames.includes(viseme)) {\n return;\n } // Find the peak weight for the viseme and the amount of time it should\n // take to reach it\n\n\n var weight = 1;\n var duration = mark.duration / 1000;\n\n if (duration < blendTime) {\n var lerpFactor = blendTime > 0 ? duration / blendTime : 1;\n weight = overrideWeight !== undefined ? overrideWeight : core_MathUtils.lerp(0, 1, lerpFactor);\n }\n\n var blendInTime = Math.min(duration, blendTime); // Find the amount and time viseme will be held for\n\n var holdTime = duration - blendTime;\n\n if (holdTime < 0) {\n // Perform in -> out animation\n _this4._animateSimpleViseme(layerName, animName, viseme, weight, blendInTime, blendTime, easingFn);\n } else {\n var _lerpFactor = decayRate.seconds > 0 ? holdTime / decayRate.seconds : 1; // Perform in -> hold -> out animation\n\n\n var decayWeight = core_MathUtils.lerp(weight, weight * decayRate.amount, Math.min(1, _lerpFactor));\n\n _this4._animateHeldViseme(layerName, animName, viseme, weight, decayWeight, blendInTime, holdTime, blendTime, easingFn);\n }\n });\n\n case 2:\n case "end":\n return _context.stop();\n }\n }\n }, _callee, this);\n }));\n\n function _onViseme(_x) {\n return _onViseme2.apply(this, arguments);\n }\n\n return _onViseme;\n }()\n /**\r\n * Animate a viseme blend weight towards a value and then back to zero.\r\n *\r\n * @private\r\n *\r\n * @param {string} layerName - Name of the layer that contains the viseme.\r\n * @param {string} animName - Name of the freeblend animation that contains\r\n * the viseme.\r\n * @param {string} visemeName - Name of the blend weight to manipulate.\r\n * @param {number} weight - Peak weight to animate towards.\r\n * @param {number} blendInTime - Amount of time it should take to reach the\r\n * peak weight.\r\n * @param {number} blendOutTime - Amount of time it should take to animate back\r\n * to zero after reaching the peak weight.\r\n * @param {Function} easingFn - Easing function to use during animation.\r\n */\n\n }, {\n key: "_animateSimpleViseme",\n value: function _animateSimpleViseme(layerName, animName, visemeName, peakWeight, blendInTime, blendOutTime, easingFn) {\n var _this5 = this;\n\n // Animate towards the peak value\n var weightPromise = this._host.AnimationFeature.setAnimationBlendWeight(layerName, animName, visemeName, peakWeight, blendInTime, easingFn); // Animate back to zero if there was no weight interruption\n\n\n weightPromise.then(function () {\n if (!weightPromise.canceled) {\n _this5._host.AnimationFeature.setAnimationBlendWeight(layerName, animName, visemeName, 0, blendOutTime, easingFn);\n }\n });\n }\n /**\r\n * Animate a viseme blend weight towards a value and then back to zero.\r\n *\r\n * @private\r\n *\r\n * @param {string} layerName - Name of the layer that contains the viseme.\r\n * @param {string} animName - Name of the freeblend animation that contains\r\n * the viseme.\r\n * @param {string} visemeName - Name of the blend weight to manipulate.\r\n * @param {number} peakWeight - Peak weight to animate towards.\r\n * @param {number} decayWeight - Weight to animate towards after reaching the\r\n * peak weight.\r\n * @param {number} blendInTime - Amount of time it should take to reach the\r\n * peak weight.\r\n * @param {number} holdTime - Amount of time it should take to reach the decay\r\n * weight after the peak weight has been reached.\r\n * @param {number} blendOutTime - Amount of time it should take to animate back\r\n * to zero after reaching the decay weight.\r\n * @param {Function} easingFn - Easing function to use during animation.\r\n */\n\n }, {\n key: "_animateHeldViseme",\n value: function () {\n var _animateHeldViseme2 = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2(layerName, animName, visemeName, peakWeight, decayWeight, blendInTime, holdTime, blendOutTime, easingFn) {\n var startPromise, holdPromise;\n return regeneratorRuntime.wrap(function _callee2$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n // Animate towards the peak value\n startPromise = this._host.AnimationFeature.setAnimationBlendWeight(layerName, animName, visemeName, peakWeight, blendInTime, easingFn);\n _context2.next = 3;\n return startPromise;\n\n case 3:\n if (startPromise.canceled) {\n _context2.next = 8;\n break;\n }\n\n // Animate towards the decay value if there was no weight interruption\n holdPromise = this._host.AnimationFeature.setAnimationBlendWeight(layerName, animName, visemeName, decayWeight, holdTime, easingFn);\n _context2.next = 7;\n return holdPromise;\n\n case 7:\n if (!holdPromise.canceled) {\n // Animate back to zero if there was no weight interruption\n this._host.AnimationFeature.setAnimationBlendWeight(layerName, animName, visemeName, 0, blendOutTime, easingFn);\n }\n\n case 8:\n case "end":\n return _context2.stop();\n }\n }\n }, _callee2, this);\n }));\n\n function _animateHeldViseme(_x2, _x3, _x4, _x5, _x6, _x7, _x8, _x9, _x10) {\n return _animateHeldViseme2.apply(this, arguments);\n }\n\n return _animateHeldViseme;\n }()\n /**\r\n * Gets and sets the amount of time in seconds to negatively offset speechmark\r\n * emission by.\r\n *\r\n * @type {number}\r\n */\n\n }, {\n key: "visemeLeadTime",\n get: function get() {\n return this._visemeLeadTime;\n },\n set: function set(seconds) {\n this._visemeLeadTime = seconds;\n\n if (this._host.TextToSpeechFeature) {\n this._host.TextToSpeechFeature.speechmarkOffset = -seconds;\n }\n }\n /**\r\n * Start keeping track of an animation layer that owns a freeBlend animation\r\n * with blendWeights corresponding to visemes.\r\n *\r\n * @param {string} layerName - Name of the layer to keep track of.\r\n * @param {Object=} options - Options for the layer.\r\n * @param {string} [options.animation=\'visemes\'] - Name of the animation on the\r\n * layer that will be played during speech. This animation must be of type\r\n * freeBlend.\r\n * @param {Object=} decayRate\r\n * @param {number} [decayRate.amount=0.5] - The percentage to decrease the viseme\'s\r\n * peak value by over time once the peak value has been reached.\r\n * @param {number} [decayRate.seconds=0.5] - The amount of time in seconds to\r\n * decrease the viseme\'s weight once it has reached its peak value.\r\n * @param {number=} [options.blendTime=[LipsyncFeature.DEFAULT_LAYER_OPTIONS.blendTime]{@link LipsyncFeature#DEFAULT_LAYER_OPTIONS#blendTime}] -\r\n * Default amount of time to use when manipulating animation blendWeights.\r\n * @param {Function=} options.easingFn - Default easing function to use when\r\n * manipulating animation blendWeights.\r\n * @param {Object} [options.visemeMap=DefaultVisemeMap] - Object containing key/value pairs of\r\n * Polly viseme names mapped to objects containing the name of the corresponding\r\n * animation blendWeight and any other animation options to use such as viseme\r\n * specific blend times and easing functions.\r\n */\n\n }, {\n key: "registerVisemeLayer",\n value: function registerVisemeLayer(layerName) {\n var _ref14 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n _ref14$animation = _ref14.animation,\n animation = _ref14$animation === void 0 ? \'visemes\' : _ref14$animation,\n _ref14$decayRate = _ref14.decayRate,\n decayRate = _ref14$decayRate === void 0 ? {\n amount: 0.5,\n seconds: 0.5\n } : _ref14$decayRate,\n _ref14$blendTime = _ref14.blendTime,\n blendTime = _ref14$blendTime === void 0 ? LipsyncFeature.DEFAULT_LAYER_OPTIONS.blendTime : _ref14$blendTime,\n easingFn = _ref14.easingFn,\n _ref14$visemeMap = _ref14.visemeMap,\n visemeMap = _ref14$visemeMap === void 0 ? DefaultVisemeMap : _ref14$visemeMap;\n\n // Register the layer and animation\n this.registerLayer(layerName, {\n decayRate: decayRate,\n blendTime: blendTime,\n easingFn: easingFn,\n animations: LipsyncFeature_defineProperty({}, animation, {\n visemeMap: visemeMap\n })\n });\n this._visemeLayers[layerName] = animation; // Validate the viseme animation\n\n this._registerVisemeAnimation(layerName, animation);\n }\n /**\r\n * Start keeping track of an animation layer that contains a looping animation\r\n * to be played during speech.\r\n *\r\n * @param {string} layerName - Name of the layer to keep track of.\r\n * @param {Object=} options - Options for the layer.\r\n * @param {string} [options.animation=\'stand_talk\'] - Name of the animation on the\r\n * layer that will be played during speech.\r\n * @param {number} [options.blendTime=[LipsyncFeature.DEFAULT_LAYER_OPTIONS.blendTime]{@link LipsyncFeature#DEFAULT_LAYER_OPTIONS#blendTime}] -\r\n * Default amount of time to use when manipulating the layer\'s weights.\r\n * @param {Function=} options.easingFn - Default easing function to use when\r\n * manipulating the layer\'s weights.\r\n */\n\n }, {\n key: "registerTalkingLayer",\n value: function registerTalkingLayer(layerName) {\n var _ref15 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n _ref15$animation = _ref15.animation,\n animation = _ref15$animation === void 0 ? \'stand_talk\' : _ref15$animation,\n _ref15$blendTime = _ref15.blendTime,\n blendTime = _ref15$blendTime === void 0 ? LipsyncFeature.DEFAULT_LAYER_OPTIONS.blendTime : _ref15$blendTime,\n easingFn = _ref15.easingFn;\n\n // Register the layer and animation\n this.registerLayer(layerName, {\n blendTime: blendTime,\n easingFn: easingFn,\n animations: LipsyncFeature_defineProperty({}, animation, {})\n });\n this._talkingLayers[layerName] = animation;\n }\n /**\r\n * Adds a namespace to the host with the name of the feature to contain properties\r\n * and methods from the feature that users of the host need access to.\r\n *\r\n * @see LipsyncFeature\r\n */\n\n }, {\n key: "installApi",\n value: function installApi() {\n var _this6 = this;\n\n /**\r\n * @inner\r\n * @namespace LipsyncFeature\r\n */\n var api = LipsyncFeature_get(LipsyncFeature_getPrototypeOf(LipsyncFeature.prototype), "installApi", this).call(this);\n /**\r\n * @memberof LipsyncFeature\r\n * @name registerLayer\r\n * @instance\r\n * @method\r\n * @see ManagedAnimationLayerInterface#registerLayer\r\n */\n\n /**\r\n * @memberof LipsyncFeature\r\n * @name registerAnimation\r\n * @instance\r\n * @method\r\n * @see ManagedAnimationLayerInterface#registerAnimation\r\n */\n\n /**\r\n * @memberof LipsyncFeature\r\n * @name setLayerWeights\r\n * @instance\r\n * @method\r\n * @see ManagedAnimationLayerInterface#setLayerWeights\r\n */\n\n /**\r\n * @memberof LipsyncFeature\r\n * @name enable\r\n * @instance\r\n * @method\r\n * @see ManagedAnimationLayerInterface#enable\r\n */\n\n /**\r\n * @memberof LipsyncFeature\r\n * @name disable\r\n * @instance\r\n * @method\r\n * @see ManagedAnimationLayerInterface#disable\r\n */\n\n\n Object.assign(api, {\n /**\r\n * @memberof LipsyncFeature\r\n * @instance\r\n * @method\r\n * @see core/LipsyncFeature#registerVisemeLayer\r\n */\n registerVisemeLayer: this.registerVisemeLayer.bind(this),\n\n /**\r\n * @memberof LipsyncFeature\r\n * @instance\r\n * @method\r\n * @see core/LipsyncFeature#registerTalkingLayer\r\n */\n registerTalkingLayer: this.registerTalkingLayer.bind(this)\n });\n /**\r\n * @memberof LipsyncFeature\r\n * @instance\r\n * @name visemeLeadTime\r\n * @see core/LipsyncFeature#visemeLeadTime\r\n */\n\n Object.defineProperty(api, \'visemeLeadTime\', {\n get: function get() {\n return _this6.visemeLeadTime;\n },\n set: function set(seconds) {\n _this6.visemeLeadTime = seconds;\n }\n });\n return api;\n }\n }]);\n\n return LipsyncFeature;\n}(core_AbstractHostFeature.mix(awspack_TextToSpeechFeatureDependentInterface.Mixin, animpack_ManagedAnimationLayerInterface.Mixin));\n\n/* harmony default export */ var core_LipsyncFeature = (LipsyncFeature_LipsyncFeature);\n\n// CONCATENATED MODULE: ./src/core/awspack/SSMLSpeechmarkInterface.js\nfunction SSMLSpeechmarkInterface_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { SSMLSpeechmarkInterface_typeof = function _typeof(obj) { return typeof obj; }; } else { SSMLSpeechmarkInterface_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return SSMLSpeechmarkInterface_typeof(obj); }\n\nfunction SSMLSpeechmarkInterface_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction SSMLSpeechmarkInterface_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction SSMLSpeechmarkInterface_createClass(Constructor, protoProps, staticProps) { if (protoProps) SSMLSpeechmarkInterface_defineProperties(Constructor.prototype, protoProps); if (staticProps) SSMLSpeechmarkInterface_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction SSMLSpeechmarkInterface_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) SSMLSpeechmarkInterface_setPrototypeOf(subClass, superClass); }\n\nfunction SSMLSpeechmarkInterface_setPrototypeOf(o, p) { SSMLSpeechmarkInterface_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return SSMLSpeechmarkInterface_setPrototypeOf(o, p); }\n\nfunction SSMLSpeechmarkInterface_createSuper(Derived) { var hasNativeReflectConstruct = SSMLSpeechmarkInterface_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = SSMLSpeechmarkInterface_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = SSMLSpeechmarkInterface_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return SSMLSpeechmarkInterface_possibleConstructorReturn(this, result); }; }\n\nfunction SSMLSpeechmarkInterface_possibleConstructorReturn(self, call) { if (call && (SSMLSpeechmarkInterface_typeof(call) === "object" || typeof call === "function")) { return call; } return SSMLSpeechmarkInterface_assertThisInitialized(self); }\n\nfunction SSMLSpeechmarkInterface_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction SSMLSpeechmarkInterface_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction SSMLSpeechmarkInterface_getPrototypeOf(o) { SSMLSpeechmarkInterface_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return SSMLSpeechmarkInterface_getPrototypeOf(o); }\n\n/* eslint-disable no-unused-vars */\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/* eslint-disable max-classes-per-file */\n\n/* eslint-disable no-empty */\n\n/**\r\n * Class factory interface for that registers callback method when a ssml speechmark event is emitted.\r\n *\r\n * @interface\r\n * @extends TextToSpeechFeatureDependentInterface\r\n */\n\nvar SSMLSpeechmarkInterface_SSMLSpeechmarkInterface = /*#__PURE__*/function (_TextToSpeechFeatureD) {\n SSMLSpeechmarkInterface_inherits(SSMLSpeechmarkInterface, _TextToSpeechFeatureD);\n\n var _super = SSMLSpeechmarkInterface_createSuper(SSMLSpeechmarkInterface);\n\n function SSMLSpeechmarkInterface() {\n SSMLSpeechmarkInterface_classCallCheck(this, SSMLSpeechmarkInterface);\n\n return _super.apply(this, arguments);\n }\n\n SSMLSpeechmarkInterface_createClass(SSMLSpeechmarkInterface, [{\n key: "_onSsml",\n value:\n /**\r\n * When ssml events are caught, this will try to parse the speech mark value and execute any function which meets criteria defined in the value.\r\n * Speech mark value will be treated as stringified json format containing required feature name, function name and argument array to pass in.\r\n * Example speech mark value might look like: \'{"feature":"GestureFeature", "method":"switchToGesture", "args":["genricA", 0.5]}\'\r\n *\r\n * @private\r\n *\r\n * @param {Object} event - Event data passed from the speech.\r\n * @param {Object} event.mark - Speechmark object.\r\n */\n function _onSsml(_ref) {\n var mark = _ref.mark;\n }\n /**\r\n * Creates a class that implements {@link SSMLSpeechmarkInterface}\r\n * and extends a specified base class.\r\n *\r\n * @param {Class} BaseClass - The class to extend.\r\n *\r\n * @return {Class} A class that extends `BaseClass` and implements {@link SSMLSpeechmarkInterface}.\r\n */\n\n }], [{\n key: "Mixin",\n value: function Mixin(BaseClass) {\n var ParentClass = awspack_TextToSpeechFeatureDependentInterface.Mixin(BaseClass);\n\n var SSMLSpeechMarkMixin = /*#__PURE__*/function (_ParentClass) {\n SSMLSpeechmarkInterface_inherits(SSMLSpeechMarkMixin, _ParentClass);\n\n var _super2 = SSMLSpeechmarkInterface_createSuper(SSMLSpeechMarkMixin);\n\n function SSMLSpeechMarkMixin() {\n SSMLSpeechmarkInterface_classCallCheck(this, SSMLSpeechMarkMixin);\n\n return _super2.apply(this, arguments);\n }\n\n SSMLSpeechmarkInterface_createClass(SSMLSpeechMarkMixin, [{\n key: "_onSsml",\n value: function _onSsml(_ref2) {\n var mark = _ref2.mark;\n\n try {\n var _JSON$parse = JSON.parse(mark.value),\n feature = _JSON$parse.feature,\n method = _JSON$parse.method,\n args = _JSON$parse.args;\n\n if (this.constructor.name === feature) {\n var callback = this[method];\n\n if (callback && typeof callback === \'function\') {\n callback.apply(this, args);\n } else {\n console.warn("Function ".concat(method, " does not exist within feature ").concat(feature));\n }\n }\n } catch (e) {}\n }\n }]);\n\n return SSMLSpeechMarkMixin;\n }(ParentClass);\n\n return SSMLSpeechMarkMixin;\n }\n }]);\n\n return SSMLSpeechmarkInterface;\n}(awspack_TextToSpeechFeatureDependentInterface);\n\n/* harmony default export */ var awspack_SSMLSpeechmarkInterface = (SSMLSpeechmarkInterface_SSMLSpeechmarkInterface);\n// CONCATENATED MODULE: ./src/core/GestureFeature.js\nfunction GestureFeature_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { GestureFeature_typeof = function _typeof(obj) { return typeof obj; }; } else { GestureFeature_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return GestureFeature_typeof(obj); }\n\nfunction GestureFeature_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction GestureFeature_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { GestureFeature_ownKeys(Object(source), true).forEach(function (key) { GestureFeature_defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { GestureFeature_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction GestureFeature_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction GestureFeature_slicedToArray(arr, i) { return GestureFeature_arrayWithHoles(arr) || GestureFeature_iterableToArrayLimit(arr, i) || GestureFeature_unsupportedIterableToArray(arr, i) || GestureFeature_nonIterableRest(); }\n\nfunction GestureFeature_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."); }\n\nfunction GestureFeature_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return GestureFeature_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return GestureFeature_arrayLikeToArray(o, minLen); }\n\nfunction GestureFeature_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction GestureFeature_iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction GestureFeature_arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction GestureFeature_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction GestureFeature_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction GestureFeature_createClass(Constructor, protoProps, staticProps) { if (protoProps) GestureFeature_defineProperties(Constructor.prototype, protoProps); if (staticProps) GestureFeature_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction GestureFeature_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { GestureFeature_get = Reflect.get; } else { GestureFeature_get = function _get(target, property, receiver) { var base = GestureFeature_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return GestureFeature_get(target, property, receiver || target); }\n\nfunction GestureFeature_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = GestureFeature_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction GestureFeature_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) GestureFeature_setPrototypeOf(subClass, superClass); }\n\nfunction GestureFeature_setPrototypeOf(o, p) { GestureFeature_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return GestureFeature_setPrototypeOf(o, p); }\n\nfunction GestureFeature_createSuper(Derived) { var hasNativeReflectConstruct = GestureFeature_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = GestureFeature_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = GestureFeature_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return GestureFeature_possibleConstructorReturn(this, result); }; }\n\nfunction GestureFeature_possibleConstructorReturn(self, call) { if (call && (GestureFeature_typeof(call) === "object" || typeof call === "function")) { return call; } return GestureFeature_assertThisInitialized(self); }\n\nfunction GestureFeature_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction GestureFeature_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction GestureFeature_getPrototypeOf(o) { GestureFeature_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return GestureFeature_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n\n\nvar DefaultGestureWords = {\n big: [\'add\', \'above\', \'authority\', \'big\', \'cover\', \'full\', \'fly\', \'grow\', \'growth\', \'high\', \'huge\', \'increase\', \'major\', \'majority\', \'large\', \'leader\', \'lot\', \'raise\', \'rise\', \'tall\'],\n heart: [\'accept\', \'admit\', \'believe\', \'care\', \'feeling\', \'feel\', \'friend\', \'grateful\', \'happy\', \'heart\', \'human\', \'pain\', \'save\', \'safe\', \'kind\', \'love\'],\n "in": [\'include\', \'including\', \'inside\', \'into\', \'now\', \'near\', \'nearest\', \'closest\', \'therein\', \'within\'],\n many: [\'all\', \'always\', \'any\', \'anyone\', \'among\', \'area\', \'around\', \'beautiful\', \'entire\', \'environment\', \'environments\', \'environmental\', \'everybody\', \'everyone\', \'everything\', \'audience\', \'total\', \'group\', \'groups\', \'million\', \'millions\', \'others\', \'billion\', \'billions\', \'hundred\', \'hundreds\', \'many\', \'thousand\', \'thousands\', \'world\', \'worlds\', \'outside\', \'reveal\'],\n movement: [\'away\', \'across\', \'ahead\', \'along\', \'far\', \'fast\', \'follow\', \'go\', \'leave\', \'move\', \'movement\', \'through\', \'throughout\', \'toward\', \'travel\', \'turned\', \'passed\'],\n one: [\'single\', \'one\', \'once\', \'first\', \'firstly\', \'only\', \'solo\', \'warned\', \'truly\', \'up\', \'alone\'],\n aggressive: [\'power\', \'powers\', \'powerful\', \'assert\', \'assertive\', \'strong\', \'stronger\', \'strongest\', \'strength\', \'flex\', \'dang\', \'damn\', \'damnit\', \'darn\', \'shucks\', \'doh\', \'drat\', \'angry\', \'angrier\', \'angriest\', \'aggressive\', \'annoyed\', \'annoying\', \'attack\', \'attacking\', \'offense\', \'offensive\', \'battle\'],\n you: [\'you\', \'yall\', "y\'all", \'your\', \'yours\', \'thou\', \'thy\'],\n defense: [\'defense\', \'fear\', \'repulsed\', \'scared\', \'scary\', \'scarier\', \'scariest\', \'fearful\', \'afraid\', \'cower\', \'cowers\', \'cowering\', \'hideous\', \'doomed\', \'terrified\', \'terrify\', \'terrifying\', \'terrifies\', \'spooky\', \'spookier\', \'spookiest\'],\n wave: [\'hello\', \'hi\', \'hiya\', \'howdy\', \'welcome\', \'aloha\', \'heya\', \'hey\', \'bye\', \'goodbye\', \'hola\', \'adios\', \'chao\'],\n self: [\'my\', \'I\', \'myself\', \'self\', "I\'ve", \'Ive\', \'me\', \'mine\', \'own\']\n};\n/**\r\n * Gesture allows you to play animations on demand on one or more layers from script\r\n * or ssml. If gesture is played that is a QueueState, the queue will automatically\r\n * be progressed after a given hold time if a looping queued state is reached. Gesture\r\n * layers can optionally be automatically disabled when no gesture animation is\r\n * in progress.\r\n *\r\n * @extends AbstractHostFeature\r\n * @implements SSMLSpeechmarkInterface\r\n * @implements ManagedAnimationLayerInterface\r\n */\n\nvar GestureFeature_GestureFeature = /*#__PURE__*/function (_AbstractHostFeature$) {\n GestureFeature_inherits(GestureFeature, _AbstractHostFeature$);\n\n var _super = GestureFeature_createSuper(GestureFeature);\n\n /**\r\n * @constructor\r\n *\r\n * @param {core/HostObject} host - Host object that owns the feature.\r\n * @param {Object=} options - Optional options for the feature.\r\n * @param {number} [options.holdTime = 3] - Amount of time in seconds that must\r\n * elapse before advancing a gesture that\'s a {@link QueueState} when the current\r\n * state in the queue is set to loop infinitely.\r\n * @param {number} [options.minimumInterval = 0.25] - The minimum amount of time\r\n * in seconds that must elapse before another gesture can be played.\r\n * @param {Object} layers - An object that maps layer names to layer options.\r\n * These are the layers that will be registered as tracked gesture layers. See\r\n * {@link ManagedAnimationLayerInterface#registerLayer} for more information\r\n * on expected format for each layer options object.\r\n */\n function GestureFeature(host) {\n var _this;\n\n var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n _ref$holdTime = _ref.holdTime,\n holdTime = _ref$holdTime === void 0 ? 3 : _ref$holdTime,\n _ref$minimumInterval = _ref.minimumInterval,\n minimumInterval = _ref$minimumInterval === void 0 ? 1 : _ref$minimumInterval,\n _ref$layers = _ref.layers,\n layers = _ref$layers === void 0 ? {} : _ref$layers;\n\n GestureFeature_classCallCheck(this, GestureFeature);\n\n _this = _super.call(this, host);\n _this.holdTime = holdTime;\n _this.minimumInterval = minimumInterval; // Register the gesture layers\n\n Object.entries(layers).forEach(function (_ref2) {\n var _ref3 = GestureFeature_slicedToArray(_ref2, 2),\n name = _ref3[0],\n _ref3$ = _ref3[1],\n options = _ref3$ === void 0 ? {} : _ref3$;\n\n _this.registerLayer(name, options);\n });\n return _this;\n }\n /**\r\n * Return a valid hold time value. If hold time isn\'t defined for the animation,\r\n * try to use the hold time for the layer. If that\'s not defined, fall back to\r\n * the hold time for the feature.\r\n *\r\n * @private\r\n *\r\n * @param {Object} layer - Managed layer options object.\r\n * @param {Object} animation - Managed animation options object.\r\n *\r\n * @returns {number}\r\n */\n\n\n GestureFeature_createClass(GestureFeature, [{\n key: "_getHoldTime",\n value: function _getHoldTime(layer, animation) {\n var layerHoldTime = layer.holdTime !== undefined ? layer.holdTime : this.holdTime;\n return animation.holdTime !== undefined ? animation.holdTime : layerHoldTime;\n }\n /**\r\n * Return a valid minimum interval value. If minimum interval isn\'t defined for\r\n * the animation, try to use the minimum interval for the layer. If that\'s not\r\n * defined, fall back to the minimum interval for the feature.\r\n *\r\n * @private\r\n *\r\n * @param {Object} layer - Managed layer options object.\r\n * @param {Object} animation - Managed animation options object.\r\n *\r\n * @returns {number}\r\n */\n\n }, {\n key: "_getMinimumInterval",\n value: function _getMinimumInterval(layer, animation) {\n var layerMinimumInterval = layer.minimumInterval !== undefined ? layer.minimumInterval : this.minimumInterval;\n return animation.minimumInterval !== undefined ? animation.minimumInterval : layerMinimumInterval;\n }\n /**\r\n * Callback for {@link core/AnimationFeature#playNextAnimation} event. If the\r\n * event is emitted for a managed animation and the new queued state cannot\r\n * advance on its own, start a new timer promise that will advance the queue\r\n * once it resolves.\r\n *\r\n * @private\r\n *\r\n * @param {Object} options - Options object passed from playNextAnimation event.\r\n * @param {string} layerName - Name of the layer that owns the queue state.\r\n * @param {string} animationName - Name of the queue state animation.\r\n * @param {boolean} canAdvance - Whether or not the current state in the queue\r\n * can advance on its own.\r\n * @param {boolean} isQueueEnd - Whether the current state in the queue is the last\r\n * state in the queue.\r\n */\n\n }, {\n key: "_onNext",\n value: function _onNext(_ref4) {\n var _this2 = this;\n\n var layerName = _ref4.layerName,\n animationName = _ref4.animationName,\n canAdvance = _ref4.canAdvance,\n isQueueEnd = _ref4.isQueueEnd;\n // Exit if this isn\'t a managed layer\n var layer = this._managedLayers[layerName];\n\n if (layer === undefined) {\n return;\n } // Exit if it isn\'t a managed animation\n\n\n var animation = layer.animations[animationName];\n\n if (animation === undefined) {\n return;\n } // Start a new timer for looping states that aren\'t the end of the queue\n\n\n if (!canAdvance && !isQueueEnd && layer.currentGesture === animationName) {\n var holdTime = this._getHoldTime(layer, animation);\n\n layer.holdTimer.cancel(); // Skip to the next animation right away if hold time is zero\n\n if (holdTime <= 0) {\n this._host.AnimationFeature.playNextAnimation(layerName, animationName);\n } // Wait for the given hold time before progressing\n else {\n layer.holdTimer = core_Utils.wait(holdTime, {\n onFinish: function onFinish() {\n // Advance the queue to the next state\n if (layer.currentGesture === animationName) {\n _this2._host.AnimationFeature.playNextAnimation(layerName, animationName);\n }\n }\n });\n }\n }\n }\n /**\r\n * Callback for {@link core/AnimationFeature#stopAnimation} event. If the\r\n * event is emitted for a managed animation cancel the layer\'s stored timers.\r\n * If the layer is set to auto-disable set its weight to 0.\r\n *\r\n * @private\r\n *\r\n * @param {Object} options - Options object passed from playNextAnimation event.\r\n * @param {string} layerName - Name of the layer that owns the stopped animation.\r\n * @param {string} animationName - Name of the animation that was stopped.\r\n */\n\n }, {\n key: "_onStop",\n value: function _onStop(_ref5) {\n var layerName = _ref5.layerName,\n animationName = _ref5.animationName;\n // Make sure the layer is managed\n var layer = this._managedLayers[layerName];\n\n if (layer === undefined) {\n return;\n } // Make sure the animation is managed\n\n\n var animation = layer.animations[animationName];\n\n if (animation !== undefined && animationName === layer.currentGesture) {\n layer.currentGesture = null;\n layer.playTimer = null;\n layer.holdTimer.cancel(); // Turn off layer weight\n\n if (layer.autoDisable) {\n this.setLayerWeights(function (name) {\n return name === layerName;\n }, 0);\n }\n }\n }\n }, {\n key: "_onAnimationAdded",\n value: function _onAnimationAdded(_ref6) {\n var layerName = _ref6.layerName,\n animationName = _ref6.animationName;\n var layer = this._managedLayers[layerName];\n\n if (layer !== undefined) {\n var animation = layer.animations[animationName]; // Register the animation as active if it is unmanaged\n\n if (animation === undefined) {\n this.registerAnimation(layerName, animationName);\n } // Mark the animation as active if it is managed\n else {\n animation.isActive = true;\n }\n }\n }\n }, {\n key: "registerLayer",\n value: function registerLayer(name) {\n var _this3 = this;\n\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n GestureFeature_get(GestureFeature_getPrototypeOf(GestureFeature.prototype), "registerLayer", this).call(this, name, GestureFeature_objectSpread(GestureFeature_objectSpread({}, options), {}, {\n holdTimer: core_Deferred.resolve(),\n playTimer: null,\n currentGesture: null\n }));\n\n if (this._managedLayers[name].isActive) {\n this._host.AnimationFeature.getAnimations(name).forEach(function (anim) {\n // Automatically register all animations on the layer\n if (_this3._managedLayers[name].animations[anim] === undefined) {\n _this3.registerAnimation(name, anim, _this3._managedLayers[name].animations[anim]);\n }\n });\n }\n }\n }, {\n key: "registerAnimation",\n value: function registerAnimation(layerName, animationName) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n // Try to fall back to a default word array\n if (!(options.words instanceof Array) && !(options.words instanceof Set)) {\n options.words = DefaultGestureWords[animationName] || [];\n }\n\n GestureFeature_get(GestureFeature_getPrototypeOf(GestureFeature.prototype), "registerAnimation", this).call(this, layerName, animationName, options);\n }\n /**\r\n * Create an object that maps ssml mark syntax required to play each gesture to\r\n * the words array associated with each gesture. Words arrays are defined at when\r\n * the gesture animation is registered. Gestures without associated words will\r\n * be excluded from the result. The resulting object can be used as an input\r\n * for {@link TextToSpeechUtils.autoGenerateSSMLMarks} to update a speech string\r\n * with the markup required to play gestures timed with their associated words.\r\n *\r\n * @returns {Object}\r\n */\n\n }, {\n key: "createGestureMap",\n value: function createGestureMap() {\n var _this4 = this;\n\n var gestureMap = {};\n Object.entries(this._managedLayers).forEach(function (_ref7) {\n var _ref8 = GestureFeature_slicedToArray(_ref7, 2),\n layerName = _ref8[0],\n animations = _ref8[1].animations;\n\n Object.entries(animations).forEach(function (_ref9) {\n var _ref10 = GestureFeature_slicedToArray(_ref9, 2),\n animationName = _ref10[0],\n _ref10$ = _ref10[1],\n holdTime = _ref10$.holdTime,\n minimumInterval = _ref10$.minimumInterval,\n words = _ref10$.words,\n transitionTime = _ref10$.transitionTime;\n\n // Only store gestures that have any associated words\n if (words.length) {\n var options = GestureFeature_objectSpread(GestureFeature_objectSpread(GestureFeature_objectSpread({}, holdTime && {\n holdTime: holdTime\n }), minimumInterval && {\n minimumInterval: minimumInterval\n }), transitionTime && {\n transitionTime: transitionTime\n });\n\n var key = {\n feature: _this4.constructor.name,\n method: \'playGesture\',\n args: [layerName, animationName, options]\n };\n gestureMap[JSON.stringify(key)] = words;\n }\n });\n });\n return gestureMap;\n }\n /**\r\n * Create an array that contains ssml mark syntax required to play each gesture\r\n * that does not have any associated words. The resulting array can be used as\r\n * an input for {@link TextToSpeechUtils.autoGenerateSSMLMarks} or\r\n * {@link TextToSpeechUtils.addMarksToUnmarkedSentences} to update a speech\r\n * string with the markup required to play random gestures at each unmarked\r\n * sentence in the string.\r\n *\r\n * @param {Array.=} layers - An array of names of managed layers to generate\r\n * marks for. If undefined, use all managed layers.\r\n *\r\n * @returns {Array.}\r\n */\n\n }, {\n key: "createGenericGestureArray",\n value: function createGenericGestureArray(layers) {\n var _this5 = this;\n\n var genericGestures = [];\n layers = layers || Object.keys(this._managedLayers);\n layers.forEach(function (layerName) {\n var layer = _this5._managedLayers[layerName]; // Make sure the layer is managed\n\n if (!layer) {\n return;\n }\n\n Object.entries(layer.animations).forEach(function (_ref11) {\n var _ref12 = GestureFeature_slicedToArray(_ref11, 2),\n animationName = _ref12[0],\n _ref12$ = _ref12[1],\n holdTime = _ref12$.holdTime,\n minimumInterval = _ref12$.minimumInterval,\n words = _ref12$.words,\n transitionTime = _ref12$.transitionTime;\n\n // Only store gestures that don\'t have any associated words\n if (!words.length) {\n var options = GestureFeature_objectSpread(GestureFeature_objectSpread(GestureFeature_objectSpread({}, holdTime && {\n holdTime: holdTime\n }), minimumInterval && {\n minimumInterval: minimumInterval\n }), transitionTime && {\n transitionTime: transitionTime\n });\n\n var key = JSON.stringify({\n feature: _this5.constructor.name,\n method: \'playGesture\',\n args: [layerName, animationName, options]\n });\n\n if (!genericGestures.includes(key)) {\n genericGestures.push(key);\n }\n }\n });\n });\n return genericGestures;\n }\n /**\r\n * Play a managed gesture animation.\r\n *\r\n * @param {string} layerName - The name of the layer that contains the gesture\r\n * animation.\r\n * @param {string} animationName - The name of the gesture animation.\r\n * @param {Object=} options - Optional gesture options.\r\n * @param {number=} options.holdTime - This option only applies to {@link QueueState}\r\n * gestures. When a QueueState gesture progresses to a looping state, this option\r\n * defines how many seconds should elapse before moving the queue forward. If\r\n * undefined, it will fall back first to the holdTime defined in the options when\r\n * the gesture animation was registered and then to the holdTime defined on the\r\n * feature.\r\n * @param {number=} options.minimumInterval - The minimum amount of time that\r\n * must have elapsed since the last time a gesture was played.\r\n */\n\n }, {\n key: "playGesture",\n value: function playGesture(layerName, animationName) {\n var _ref13 = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},\n holdTime = _ref13.holdTime,\n minimumInterval = _ref13.minimumInterval,\n transitionTime = _ref13.transitionTime,\n _ref13$force = _ref13.force,\n force = _ref13$force === void 0 ? false : _ref13$force;\n\n // Make sure the animation is registered\n if (this._managedLayers[layerName] === undefined || this._managedLayers[layerName].animations[animationName] === undefined) {\n this.registerAnimation(layerName, animationName, {\n holdTime: holdTime,\n minimumInterval: minimumInterval,\n transitionTime: transitionTime\n });\n }\n\n var layer = this._managedLayers[layerName];\n var animation = layer.animations[animationName]; // Make sure the animation is active\n\n if (!animation.isActive) {\n // Create warning message based on which object doesn\'t exist yet\n var typeName = layer.isActive ? \'animation\' : \'layer\';\n var message = "Skipping gesture ".concat(animationName, " on layer ").concat(layerName, " for host ").concat(this._host.id, ". No ").concat(typeName, " exists with this name yet.");\n console.warn(message);\n return core_Deferred.cancel({\n reason: \'inactive\',\n value: typeName\n });\n } // Check if the gesture is already playing\n\n\n var currentGesture = layer.currentGesture;\n\n if (currentGesture === animationName && !force) {\n var _message = "Skipping gesture ".concat(animationName, " on layer ").concat(layerName, " for host ").concat(this._host.id, ". The gesture is already playing. Use options.force to force the gesture replay, which may result in a hard transition.");\n\n console.warn(_message);\n return core_Deferred.cancel({\n reason: \'playing\',\n value: animationName\n });\n } // Update animation options\n\n\n if (holdTime !== undefined) {\n animation.holdTime = holdTime;\n }\n\n if (minimumInterval !== undefined) {\n animation.minimumInterval = minimumInterval;\n } else {\n minimumInterval = this._getMinimumInterval(layer, animation);\n } // Check the interval\n\n\n if (!force && layer.playTimer !== null && layer.playTimer < minimumInterval) {\n console.warn("Skipping gesture ".concat(animationName, " on layer ").concat(layerName, " for host ").concat(this._host.id, ". Minimum interval ").concat(minimumInterval, " has not been met."));\n return core_Deferred.cancel({\n reason: \'minimumInterval\',\n value: minimumInterval - layer.playTimer\n });\n } // Play the animation\n\n\n layer.currentGesture = animationName;\n layer.playTimer = 0;\n layer.holdTimer.cancel();\n\n if (layer.autoDisable) {\n this.setLayerWeights(function (name) {\n return name === layerName;\n }, 1);\n }\n\n return this._host.AnimationFeature.playAnimation(layerName, animationName, transitionTime);\n }\n }, {\n key: "update",\n value: function update(deltaTime) {\n var _this6 = this;\n\n GestureFeature_get(GestureFeature_getPrototypeOf(GestureFeature.prototype), "update", this).call(this, deltaTime); // Increment the timers\n\n\n Object.entries(this._managedLayers).forEach(function (_ref14) {\n var _ref15 = GestureFeature_slicedToArray(_ref14, 2),\n name = _ref15[0],\n options = _ref15[1];\n\n if (options.isActive && !_this6._host.AnimationFeature.getPaused(name)) {\n options.holdTimer.execute(deltaTime);\n\n if (options.playTimer !== null) {\n options.playTimer += deltaTime / 1000;\n }\n }\n });\n }\n }, {\n key: "installApi",\n value: function installApi() {\n /**\r\n * @inner\r\n * @namespace GestureFeature\r\n */\n var api = GestureFeature_get(GestureFeature_getPrototypeOf(GestureFeature.prototype), "installApi", this).call(this);\n\n Object.assign(api, {\n /**\r\n * @memberof GestureFeature\r\n * @instance\r\n * @method\r\n * @see GestureFeature#createGestureMap\r\n */\n createGestureMap: this.createGestureMap.bind(this),\n\n /**\r\n * @memberof GestureFeature\r\n * @instance\r\n * @method\r\n * @see GestureFeature#createGenericGestureArray\r\n */\n createGenericGestureArray: this.createGenericGestureArray.bind(this),\n\n /**\r\n * @memberof GestureFeature\r\n * @instance\r\n * @method\r\n * @see GestureFeature#playGesture\r\n */\n playGesture: this.playGesture.bind(this)\n });\n }\n }]);\n\n return GestureFeature;\n}(core_AbstractHostFeature.mix(awspack_SSMLSpeechmarkInterface.Mixin, animpack_ManagedAnimationLayerInterface.Mixin));\n\nObject.defineProperties(GestureFeature_GestureFeature, {\n DEFAULT_LAYER_OPTIONS: {\n value: GestureFeature_objectSpread(GestureFeature_objectSpread({}, GestureFeature_GestureFeature.DEFAULT_LAYER_OPTIONS), {}, {\n autoDisable: true\n }),\n writable: false\n },\n EVENT_DEPENDENCIES: {\n value: GestureFeature_objectSpread(GestureFeature_objectSpread({}, GestureFeature_GestureFeature.EVENT_DEPENDENCIES), {}, {\n AnimationFeature: GestureFeature_objectSpread(GestureFeature_objectSpread({}, GestureFeature_GestureFeature.EVENT_DEPENDENCIES.AnimationFeature), {}, {\n playNextAnimation: \'_onNext\',\n stopAnimation: \'_onStop\',\n interruptAnimation: \'_onStop\'\n })\n })\n }\n});\n/* harmony default export */ var core_GestureFeature = (GestureFeature_GestureFeature);\n\n// CONCATENATED MODULE: ./src/core/animpack/AnimationUtils.js\nfunction AnimationUtils_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction AnimationUtils_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction AnimationUtils_createClass(Constructor, protoProps, staticProps) { if (protoProps) AnimationUtils_defineProperties(Constructor.prototype, protoProps); if (staticProps) AnimationUtils_defineProperties(Constructor, staticProps); return Constructor; }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n\n/**\r\n * A collection of useful animation functions.\r\n *\r\n * @hideconstructor\r\n */\n\nvar AnimationUtils_AnimationUtils = /*#__PURE__*/function () {\n function AnimationUtils() {\n AnimationUtils_classCallCheck(this, AnimationUtils);\n }\n\n AnimationUtils_createClass(AnimationUtils, null, [{\n key: "lerp",\n value: function lerp(from, to, factor) {\n console.warn("AnimationUtils.lerp is being deprecated. Use MathUtils.lerp instead.");\n return core_MathUtils.lerp(from, to, factor);\n }\n /**\r\n * Clamp a number between 2 values.\r\n *\r\n * @param {number} value - Value to clamp.\r\n * @param {number} [min=0] - Minumum value.\r\n * @param {number} [max=1] - Maximum value.\r\n *\r\n * @returns {number}\r\n */\n\n }, {\n key: "clamp",\n value: function clamp(value) {\n var min = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var max = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;\n console.warn("AnimationUtils.clamp is being deprecated. Use MathUtils.clamp instead.");\n return core_MathUtils.clamp(value, min, max);\n }\n /**\r\n * Return a deferred promise that can be used to update the value of a numeric\r\n * property of this object over time. Pass delta time in milliseconds to the\r\n * deferred promise\'s execute method in an update loop to animate the property\r\n * towards the target value.\r\n *\r\n * @param {Object} propertyOwner - Object that contains the property to animation.\r\n * @param {string} propertyName - Name of the property to animate.\r\n * @param {number} targetValue - Target value to reach.\r\n * @param {Object=} options - Optional options object\r\n * @param {number} [options.seconds=0] - Number of seconds it will take to reach\r\n * the target value.\r\n * @param {Function} [options.easingFn=Linear.InOut] - Easing function to use for animation.\r\n * @param {Function} [options.onFinish] - Callback to execute once the animation completes.\r\n * The target value is passed as a parameter.\r\n * @param {Function=} options.onProgress - Callback to execute each time the animation\r\n * property is updated during the animation. The property\'s value at the time of\r\n * the update is passed as a parameter.\r\n * @param {Function=} options.onCancel - Callback to execute if the user cancels the\r\n * animation before completion. The animation property\'s value at the time of\r\n * cancel is passed as a parameter.\r\n * @param {Function=} options.onError - Callback to execute if the animation stops\r\n * because an error is encountered. The error message is passed as a parameter.\r\n *\r\n * @returns {Deferred} Resolves with the property\'s value once it reaches the\r\n * target value.\r\n */\n\n }, {\n key: "interpolateProperty",\n value: function interpolateProperty(propertyOwner, propertyName, targetValue) {\n var _ref = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {},\n _ref$seconds = _ref.seconds,\n seconds = _ref$seconds === void 0 ? 0 : _ref$seconds,\n easingFn = _ref.easingFn,\n _onFinish = _ref.onFinish,\n _onProgress = _ref.onProgress,\n _onCancel = _ref.onCancel,\n onError = _ref.onError;\n\n // Make sure property is an object\n if (!(propertyOwner instanceof Object)) {\n var e = new Error("Cannot interpolate property ".concat(propertyName, ". Property owner must be an object."));\n\n if (typeof onError === \'function\') {\n onError(e);\n }\n\n return core_Deferred.reject(e);\n } // Make sure property is numeric\n\n\n if (Number.isNaN(Number(propertyOwner[propertyName]))) {\n var _e = new Error("Cannot interpolate property ".concat(propertyName, ". Property must be numeric."));\n\n if (typeof onError === \'function\') {\n onError(_e);\n }\n\n return core_Deferred.reject(_e);\n } // Make sure the target value is numeric\n\n\n if (Number.isNaN(Number(targetValue))) {\n var _e2 = new Error("Cannot interpolate property ".concat(propertyName, " to value ").concat(targetValue, ". Target value must be numeric."));\n\n if (typeof onError === \'function\') {\n onError(_e2);\n }\n\n return core_Deferred.reject(_e2);\n } // Resolve immediately if the target has already been reached\n\n\n var startValue = propertyOwner[propertyName];\n\n if (startValue === targetValue) {\n if (typeof _onFinish === \'function\') {\n _onFinish(targetValue);\n }\n\n return core_Deferred.resolve(targetValue);\n } // Default to linear interpolation\n\n\n if (typeof easingFn !== \'function\') {\n if (easingFn !== undefined) {\n console.warn("Invalid property interpolation easingFn. Defaulting to linear interpolation.");\n }\n\n easingFn = Linear.InOut;\n }\n\n var interpolator = core_Utils.wait(seconds, {\n onFinish: function onFinish() {\n propertyOwner[propertyName] = targetValue;\n\n if (typeof _onFinish === \'function\') {\n _onFinish(targetValue);\n }\n },\n onCancel: function onCancel() {\n if (typeof _onCancel === \'function\') {\n _onCancel(propertyOwner[propertyName]);\n }\n },\n onProgress: function onProgress(progress) {\n if (propertyOwner[propertyName] !== targetValue) {\n // Calculate the lerp factor\n var easeFactor = easingFn(progress);\n\n if (typeof easeFactor !== \'number\') {\n var _e3 = new Error("Invalid property interpolation easingFn. EasingFn must return a number.");\n\n interpolator.reject(_e3);\n return;\n } // Update the value\n\n\n propertyOwner[propertyName] = core_MathUtils.lerp(startValue, targetValue, easeFactor);\n } // Signal progress\n\n\n if (typeof _onProgress === \'function\') {\n _onProgress(propertyOwner[propertyName]);\n } // Signal completion once time is up\n\n\n if (progress === 1) {\n propertyOwner[propertyName] = targetValue;\n interpolator.resolve(targetValue);\n }\n },\n onError: onError\n });\n return interpolator;\n }\n }]);\n\n return AnimationUtils;\n}();\n\n/* harmony default export */ var animpack_AnimationUtils = (AnimationUtils_AnimationUtils);\n// CONCATENATED MODULE: ./src/core/animpack/state/AbstractState.js\nfunction AbstractState_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction AbstractState_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction AbstractState_createClass(Constructor, protoProps, staticProps) { if (protoProps) AbstractState_defineProperties(Constructor.prototype, protoProps); if (staticProps) AbstractState_defineProperties(Constructor, staticProps); return Constructor; }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n/**\r\n * Base class for a state in our animation system.\r\n *\r\n * @abstract\r\n */\n\nvar AbstractState_AbstractState = /*#__PURE__*/function () {\n /**\r\n * @constructor\r\n *\r\n * @param {Object=} options - Options for the animation state.\r\n * @param {string=} options.name - Name for the animation state. Names must be\r\n * unique for the container the state is applied to and should be validated at\r\n * the container level. If no name is given it will default to the constructor\r\n * name.\r\n * @param {weight} [options.weight=0] - The 0-1 amount of influence the state will have.\r\n */\n function AbstractState() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n AbstractState_classCallCheck(this, AbstractState);\n\n this.name = options.name !== undefined ? options.name : this.constructor.name;\n this._weight = options.weight !== undefined ? core_MathUtils.clamp(options.weight, 0, 1) : 0;\n this._internalWeight = this._weight;\n this._paused = false;\n this._promises = {\n finish: core_Deferred.resolve(),\n weight: core_Deferred.resolve(),\n play: core_Deferred.resolve()\n };\n this._playCallbacks = {\n onFinish: undefined,\n onError: undefined,\n onCancel: undefined\n };\n }\n /**\r\n * Gets whether or not the state is currently paused.\r\n *\r\n * @type {number}\r\n */\n\n\n AbstractState_createClass(AbstractState, [{\n key: "paused",\n get: function get() {\n return this._paused;\n }\n /**\r\n * Gets and sets the user defined weight.\r\n *\r\n * @type {number}\r\n */\n\n }, {\n key: "weight",\n get: function get() {\n return this._weight;\n },\n set: function set(weight) {\n this._weight = core_MathUtils.clamp(weight, 0, 1);\n }\n /**\r\n * Gets whether or not the weight is currently being animated.\r\n *\r\n * @readonly\r\n * @type {boolean}\r\n */\n\n }, {\n key: "weightPending",\n get: function get() {\n return this._promises.weight && this._promises.weight.pending;\n }\n /**\r\n * Updates the user defined weight over time.\r\n *\r\n * @param {number} weight - The target weight value.\r\n * @param {number} [seconds=0] - The amount of time it will take to reach the\r\n * target weight.\r\n * @param {Function=} easingFn - The easing function to use for interpolation.\r\n *\r\n * @returns {Deferred}\r\n */\n\n }, {\n key: "setWeight",\n value: function setWeight(weight) {\n var seconds = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var easingFn = arguments.length > 2 ? arguments[2] : undefined;\n\n this._promises.weight.cancel();\n\n weight = core_MathUtils.clamp(weight);\n this._promises.weight = animpack_AnimationUtils.interpolateProperty(this, \'weight\', weight, {\n seconds: seconds,\n easingFn: easingFn\n });\n return this._promises.weight;\n }\n /**\r\n * Gets the internal weight.\r\n *\r\n * @readonly\r\n * @type {number}\r\n */\n\n }, {\n key: "internalWeight",\n get: function get() {\n return this._internalWeight;\n }\n /**\r\n * Multiplies the user weight by a factor to determine the internal weight.\r\n *\r\n * @param {number} factor - 0-1 multiplier to apply to the user weight.\r\n */\n\n }, {\n key: "updateInternalWeight",\n value: function updateInternalWeight(factor) {\n this._internalWeight = this._weight * factor;\n }\n /**\r\n * Update any values that need to be evaluated every frame.\r\n *\r\n * @param {number} deltaTime - Time in milliseconds since the last update.\r\n */\n\n }, {\n key: "update",\n value: function update(deltaTime) {\n if (!this._paused) {\n Object.values(this._promises).forEach(function (promise) {\n promise.execute(deltaTime);\n });\n }\n }\n /**\r\n * Start playback of the state from the beginning.\r\n *\r\n * @param {Function=} onFinish - Function to execute when the state finishes.\r\n * @param {Function=} onError - Function to execute if the state encounters\r\n * an error during playback.\r\n * @param {Function=} onCancel - Function to execute if playback is canceled.\r\n *\r\n * @returns {Deferred}\r\n */\n\n }, {\n key: "play",\n value: function play(onFinish, onError, onCancel) {\n this._paused = false;\n this._playCallbacks.onFinish = onFinish;\n this._playCallbacks.onError = onError;\n this._playCallbacks.onCancel = onCancel;\n this._promises.play = new core_Deferred(undefined, onFinish, onError, onCancel);\n this._promises.finish = core_Deferred.all([this._promises.play, this._promises.weight]);\n return this._promises.finish;\n }\n /**\r\n * Pause playback of the state. This prevents pending promises from being executed.\r\n *\r\n * @returns {boolean}\r\n */\n\n }, {\n key: "pause",\n value: function pause() {\n this._paused = true;\n return true;\n }\n /**\r\n * Resume playback of the state.\r\n *\r\n * @param {Function=} onFinish - Function to execute when the state finishes.\r\n * @param {Function=} onError - Function to execute if the state encounters\r\n * an error during playback.\r\n * @param {Function=} onCancel - Function to execute if playback is canceled.\r\n *\r\n * @returns {Deferred}\r\n */\n\n }, {\n key: "resume",\n value: function resume(onFinish, onError, onCancel) {\n this._paused = false;\n\n if (!this._promises.play.pending) {\n this._playCallbacks.onFinish = onFinish || this._playCallbacks.onFinish;\n this._playCallbacks.onError = onError || this._playCallbacks.onError;\n this._playCallbacks.onCancel = onCancel || this._playCallbacks.onCancel;\n this._promises.play = new core_Deferred(undefined, this._playCallbacks.onFinish, this._playCallbacks.onError, this._playCallbacks.onCancel);\n this._promises.finish = core_Deferred.all([this._promises.play, this._promises.weight]);\n }\n\n return this._promises.finish;\n }\n /**\r\n * Cancel playback of the state and cancel any pending promises.\r\n *\r\n * @returns {boolean}\r\n */\n\n }, {\n key: "cancel",\n value: function cancel() {\n this._paused = true;\n Object.values(this._promises).forEach(function (promise) {\n promise.cancel();\n });\n return true;\n }\n /**\r\n * Stop playback of the state and resolve any pending promises.\r\n *\r\n * @returns {boolean}\r\n */\n\n }, {\n key: "stop",\n value: function stop() {\n this._paused = true;\n Object.values(this._promises).forEach(function (promise) {\n promise.resolve();\n });\n return true;\n }\n /**\r\n * Cancel any pending promises and remove reference to them.\r\n */\n\n }, {\n key: "discard",\n value: function discard() {\n this.cancel();\n delete this._promises;\n }\n /**\r\n * Force the internal weight to 0. Should be called before switching or transitioning\r\n * to a new state.\r\n */\n\n }, {\n key: "deactivate",\n value: function deactivate() {\n this.updateInternalWeight(0);\n }\n }]);\n\n return AbstractState;\n}();\n\n/* harmony default export */ var state_AbstractState = (AbstractState_AbstractState);\n// CONCATENATED MODULE: ./src/core/animpack/state/TransitionState.js\nfunction TransitionState_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { TransitionState_typeof = function _typeof(obj) { return typeof obj; }; } else { TransitionState_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return TransitionState_typeof(obj); }\n\nfunction TransitionState_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction TransitionState_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction TransitionState_createClass(Constructor, protoProps, staticProps) { if (protoProps) TransitionState_defineProperties(Constructor.prototype, protoProps); if (staticProps) TransitionState_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction TransitionState_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { TransitionState_get = Reflect.get; } else { TransitionState_get = function _get(target, property, receiver) { var base = TransitionState_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return TransitionState_get(target, property, receiver || target); }\n\nfunction TransitionState_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = TransitionState_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction TransitionState_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) TransitionState_setPrototypeOf(subClass, superClass); }\n\nfunction TransitionState_setPrototypeOf(o, p) { TransitionState_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return TransitionState_setPrototypeOf(o, p); }\n\nfunction TransitionState_createSuper(Derived) { var hasNativeReflectConstruct = TransitionState_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = TransitionState_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = TransitionState_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return TransitionState_possibleConstructorReturn(this, result); }; }\n\nfunction TransitionState_possibleConstructorReturn(self, call) { if (call && (TransitionState_typeof(call) === "object" || typeof call === "function")) { return call; } return TransitionState_assertThisInitialized(self); }\n\nfunction TransitionState_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction TransitionState_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction TransitionState_getPrototypeOf(o) { TransitionState_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return TransitionState_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n/**\r\n * Class for smooth transitioning between states on an animation layer.\r\n *\r\n * @extends AbstractState\r\n */\n\nvar TransitionState_TransitionState = /*#__PURE__*/function (_AbstractState) {\n TransitionState_inherits(TransitionState, _AbstractState);\n\n var _super = TransitionState_createSuper(TransitionState);\n\n function TransitionState() {\n var _this;\n\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n TransitionState_classCallCheck(this, TransitionState);\n\n _this = _super.call(this, options);\n _this._to = null;\n _this._from = [];\n _this._weightPromise = core_Deferred.resolve();\n return _this;\n }\n\n TransitionState_createClass(TransitionState, [{\n key: "internalWeight",\n get: function get() {\n // Find the combined weight of all sub-states\n var totalWeight = 0;\n\n if (this._to) {\n totalWeight += this._to.weight;\n }\n\n this._from.forEach(function (state) {\n totalWeight += state.weight;\n });\n\n return totalWeight * this._internalWeight;\n }\n }, {\n key: "updateInternalWeight",\n value: function updateInternalWeight(factor) {\n var _this2 = this;\n\n TransitionState_get(TransitionState_getPrototypeOf(TransitionState.prototype), "updateInternalWeight", this).call(this, factor);\n\n this._from.forEach(function (state) {\n state.updateInternalWeight(_this2._internalWeight);\n });\n\n if (this._to) {\n this._to.updateInternalWeight(this._internalWeight);\n }\n }\n /**\r\n * Update sub-states the transition is controlling and start new weight\r\n * animations on each one. This should be called each time the current state of\r\n * an animation layer gets updated to a new value and a transition time greater\r\n * that zero is specified.\r\n *\r\n * @param {Array.} [currentStates=[]] - States whose weight values\r\n * will be animated to 0.\r\n * @param {AbstractState=} targetState - State whose weight will be animated\r\n * to 1.\r\n * @param {number} transitionTime - Amount of time it will in seconds take for\r\n * weight animations to complete.\r\n * @param {Function=} easingFn - Easing function to use for weight animations.\r\n * Default is Easing.Linear.InOut.\r\n * @param {Function=} onComplete - Function to execute once all weight animations\r\n * complete.\r\n */\n\n }, {\n key: "configure",\n value: function configure() {\n var currentStates = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n var targetState = arguments.length > 1 ? arguments[1] : undefined;\n var transitionTime = arguments.length > 2 ? arguments[2] : undefined;\n var easingFn = arguments.length > 3 ? arguments[3] : undefined;\n var onComplete = arguments.length > 4 ? arguments[4] : undefined;\n\n // Deactivate any states that aren\'t in the new configuration\n if (this._to === targetState || currentStates.includes(this._to)) {\n this._to = null;\n }\n\n this._from = this._from.filter(function (state) {\n return state !== targetState && !currentStates.includes(state);\n });\n this.deactivate();\n this._from = currentStates;\n this._to = targetState;\n this.reset(transitionTime, easingFn, onComplete);\n }\n /**\r\n * Start new weight animations state the transition controls. This should be called\r\n * if an animation is played with a transition time greater than zero and a transtion\r\n * to that animation was already in progress.\r\n *\r\n * @param {number} transitionTime - Amount of time it will in seconds take for\r\n * weight animations to complete.\r\n * @param {Function=} easingFn - Easing function to use for weight animations.\r\n * Default is Easing.Linear.InOut.\r\n * @param {Function=} onComplete - Function to execute once all weight animations\r\n * complete.\r\n */\n\n }, {\n key: "reset",\n value: function reset(transitionTime, easingFn, onComplete) {\n var _this3 = this;\n\n // Stop any pending promises\n this._weightPromise.cancel(); // Start tweening weight to 0 for the current states\n\n\n var weightPromises = this._from.map(function (state) {\n return state.setWeight(0, transitionTime, easingFn);\n }); // Start tweening weight to 1 for the target state\n\n\n if (this._to) {\n weightPromises.push(this._to.setWeight(1, transitionTime, easingFn));\n this.name = this._to.name;\n } else {\n this.name = null;\n }\n\n this._weightPromise = core_Deferred.all(weightPromises, function () {\n _this3._from.forEach(function (state) {\n state.cancel();\n state.deactivate();\n });\n\n if (typeof onComplete === \'function\') {\n onComplete();\n }\n });\n }\n }, {\n key: "play",\n value: function play(onFinish, onError, onCancel, onNext) {\n this._paused = false;\n this._playCallbacks.onFinish = onFinish;\n this._playCallbacks.onError = onError;\n this._playCallbacks.onCancel = onCancel;\n var promises = [this._weightPromise];\n\n this._from.forEach(function (state) {\n state.resume();\n });\n\n if (this._to) {\n this._promises.play = this._to.play(undefined, undefined, undefined, onNext);\n promises.push(this._promises.play);\n }\n\n this._promises.finish = core_Deferred.all(promises, onFinish, onError, onCancel);\n return this._promises.finish;\n }\n }, {\n key: "pause",\n value: function pause() {\n this._from.forEach(function (state) {\n state.pause();\n });\n\n if (this._to) {\n this._to.pause();\n }\n\n return TransitionState_get(TransitionState_getPrototypeOf(TransitionState.prototype), "pause", this).call(this);\n }\n }, {\n key: "resume",\n value: function resume(onFinish, onError, onCancel, onNext) {\n this._paused = false;\n\n if (!this._promises.play.pending) {\n this._playCallbacks.onFinish = onFinish || this._playCallbacks.onFinish;\n this._playCallbacks.onError = onError || this._playCallbacks.onError;\n this._playCallbacks.onCancel = onCancel || this._playCallbacks.onCancel;\n }\n\n var promises = [this._weightPromise];\n\n this._from.forEach(function (state) {\n state.resume();\n });\n\n if (this._to) {\n this._promises.play = this._to.resume(undefined, undefined, undefined, onNext);\n promises.push(this._promises.play);\n }\n\n this._promises.finish = core_Deferred.all(promises, this._playCallbacks.onFinish, this._playCallbacks.onError, this._playCallbacks.onCancel);\n return this._promises.finish;\n }\n }, {\n key: "cancel",\n value: function cancel() {\n this._from.forEach(function (state) {\n state.pause();\n });\n\n if (this._to) {\n this._to.cancel();\n }\n\n this._weightPromise.cancel();\n\n return TransitionState_get(TransitionState_getPrototypeOf(TransitionState.prototype), "cancel", this).call(this);\n }\n }, {\n key: "stop",\n value: function stop() {\n this._from.forEach(function (state) {\n state.pause();\n });\n\n if (this._to) {\n this._to.stop();\n }\n\n return TransitionState_get(TransitionState_getPrototypeOf(TransitionState.prototype), "stop", this).call(this);\n }\n }, {\n key: "update",\n value: function update(deltaTime) {\n TransitionState_get(TransitionState_getPrototypeOf(TransitionState.prototype), "update", this).call(this, deltaTime);\n\n this._from.forEach(function (state) {\n state.update(deltaTime);\n });\n\n if (this._to) {\n this._to.update(deltaTime);\n }\n }\n }, {\n key: "discard",\n value: function discard() {\n TransitionState_get(TransitionState_getPrototypeOf(TransitionState.prototype), "discard", this).call(this);\n\n this._weightPromise.cancel();\n\n delete this._weightPromise;\n this._to = null;\n this._from.length = 0;\n }\n }, {\n key: "deactivate",\n value: function deactivate() {\n if (this._to) {\n this._to.deactivate();\n }\n\n this._from.forEach(function (state) {\n state.deactivate();\n });\n }\n }]);\n\n return TransitionState;\n}(state_AbstractState);\n\n/* harmony default export */ var state_TransitionState = (TransitionState_TransitionState);\n// CONCATENATED MODULE: ./src/core/animpack/AnimationPlayerInterface.js\nfunction AnimationPlayerInterface_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { AnimationPlayerInterface_typeof = function _typeof(obj) { return typeof obj; }; } else { AnimationPlayerInterface_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return AnimationPlayerInterface_typeof(obj); }\n\nfunction AnimationPlayerInterface_toConsumableArray(arr) { return AnimationPlayerInterface_arrayWithoutHoles(arr) || AnimationPlayerInterface_iterableToArray(arr) || AnimationPlayerInterface_unsupportedIterableToArray(arr) || AnimationPlayerInterface_nonIterableSpread(); }\n\nfunction AnimationPlayerInterface_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."); }\n\nfunction AnimationPlayerInterface_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return AnimationPlayerInterface_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return AnimationPlayerInterface_arrayLikeToArray(o, minLen); }\n\nfunction AnimationPlayerInterface_iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction AnimationPlayerInterface_arrayWithoutHoles(arr) { if (Array.isArray(arr)) return AnimationPlayerInterface_arrayLikeToArray(arr); }\n\nfunction AnimationPlayerInterface_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction AnimationPlayerInterface_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { AnimationPlayerInterface_get = Reflect.get; } else { AnimationPlayerInterface_get = function _get(target, property, receiver) { var base = AnimationPlayerInterface_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return AnimationPlayerInterface_get(target, property, receiver || target); }\n\nfunction AnimationPlayerInterface_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = AnimationPlayerInterface_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction AnimationPlayerInterface_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) AnimationPlayerInterface_setPrototypeOf(subClass, superClass); }\n\nfunction AnimationPlayerInterface_setPrototypeOf(o, p) { AnimationPlayerInterface_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return AnimationPlayerInterface_setPrototypeOf(o, p); }\n\nfunction AnimationPlayerInterface_createSuper(Derived) { var hasNativeReflectConstruct = AnimationPlayerInterface_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = AnimationPlayerInterface_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = AnimationPlayerInterface_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return AnimationPlayerInterface_possibleConstructorReturn(this, result); }; }\n\nfunction AnimationPlayerInterface_possibleConstructorReturn(self, call) { if (call && (AnimationPlayerInterface_typeof(call) === "object" || typeof call === "function")) { return call; } return AnimationPlayerInterface_assertThisInitialized(self); }\n\nfunction AnimationPlayerInterface_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction AnimationPlayerInterface_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction AnimationPlayerInterface_getPrototypeOf(o) { AnimationPlayerInterface_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return AnimationPlayerInterface_getPrototypeOf(o); }\n\nfunction AnimationPlayerInterface_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction AnimationPlayerInterface_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction AnimationPlayerInterface_createClass(Constructor, protoProps, staticProps) { if (protoProps) AnimationPlayerInterface_defineProperties(Constructor.prototype, protoProps); if (staticProps) AnimationPlayerInterface_defineProperties(Constructor, staticProps); return Constructor; }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/* eslint-disable max-classes-per-file */\n\n/* eslint-disable no-unused-vars */\n\n/* eslint-disable no-empty-function */\n\n/* eslint-disable getter-return */\n\n/* eslint-disable no-useless-constructor */\n\n\n/**\r\n * Class factory interface for controlling playback of a collection of animations.\r\n * One animation can be played at any given time, crossfading between animations\r\n * will result in playing a {@link TransitionState}.\r\n *\r\n * @interface\r\n */\n\nvar AnimationPlayerInterface_AnimationPlayerInterface = /*#__PURE__*/function () {\n function AnimationPlayerInterface() {\n AnimationPlayerInterface_classCallCheck(this, AnimationPlayerInterface);\n }\n\n AnimationPlayerInterface_createClass(AnimationPlayerInterface, [{\n key: "paused",\n get:\n /**\r\n * Gets whether or not the player is updating states.\r\n *\r\n * @readonly\r\n * @type {boolean}\r\n */\n function get() {\n return this._paused;\n }\n /**\r\n * Gets and sets the default number of seconds it takes to transition to a new\r\n * animation.\r\n *\r\n * @type {number}\r\n */\n\n }, {\n key: "transitionTime",\n get: function get() {},\n set: function set(seconds) {}\n /**\r\n * Gets and sets the default easing function to use when transitioning and\r\n * setting weights.\r\n *\r\n * @type {Function}\r\n */\n\n }, {\n key: "easingFn",\n get: function get() {},\n set: function set(fn) {}\n /**\r\n * Gets the state the layer is currently in control of.\r\n *\r\n * @readonly\r\n * @type {AbstractState}\r\n */\n\n }, {\n key: "currentState",\n get: function get() {}\n /**\r\n * Gets the name of the state the layer is currently in control of.\r\n *\r\n * @readonly\r\n * @type {string}\r\n */\n\n }, {\n key: "currentAnimation",\n get: function get() {}\n /**\r\n * Gets whether or not the layer is currently transitioning to a new animation.\r\n *\r\n * @readonly\r\n * @type {boolean}\r\n */\n\n }, {\n key: "isTransitioning",\n get: function get() {}\n /**\r\n * Update the layer\'s current state to a new value. If transitionTime is defined\r\n * and greater than zero, perform a smooth blend between any states that currently\r\n * have non-zero weight values and the new state.\r\n *\r\n * @private\r\n *\r\n * @param {(string|null)} name - Name of the state to transition to.\r\n * @param {string} playMethod - Name of the operation being prepared for, to be\r\n * used in error messaging.\r\n * @param {number=} transitionTime - Amount of time in seconds it will take to\r\n * switch to the new state.\r\n * @param {Function=} easingFn - Easing function to use when transitioning to a\r\n * new state over time.\r\n * @param {Function=} onError - Function to execute if an error is encountered.\r\n */\n\n }, {\n key: "_prepareCurrentState",\n value: function _prepareCurrentState(name, playMethod, transitionTime, easingFn, onError) {}\n /**\r\n * Start playback an animation from the beginning.\r\n *\r\n * @param {string} name - Name of the animation to play.\r\n * @param {number=} transitionTime - Amount of time it will take before the\r\n * new state has full influence for the layer.\r\n * @param {Function=} easingFn - Easing function to use for blending if transitionTime\r\n * is greater than zero.\r\n * @param {Function=} onFinish - Function to execute when the animation finishes.\r\n * @param {Function=} onError - Function to execute if the animation encounters\r\n * an error during playback.\r\n * @param {Function=} onCancel - Function to execute if playback is canceled.\r\n * @param {Function=} onNext - Function to execute if an animation queue is\r\n * played and it advances to the next animation.\r\n *\r\n * @returns {Deferred}\r\n */\n\n }, {\n key: "playAnimation",\n value: function playAnimation(name, transitionTime, easingFn, onFinish, onError, onCancel, onNext) {}\n /**\r\n * Cancel playback of the current animation.\r\n *\r\n * @returns {boolean}\r\n */\n\n }, {\n key: "cancelAnimation",\n value: function cancelAnimation() {}\n /**\r\n * Pause playback of the current animation.\r\n *\r\n * @returns {boolean}\r\n */\n\n }, {\n key: "pauseAnimation",\n value: function pauseAnimation() {}\n /**\r\n * Resume playback of an animation.\r\n *\r\n * @param {string=} name - Name of the animation to resume playback for. Default\r\n * is the layer\'s current animation name.\r\n * @param {number=} transitionTime - Amount of time it will take before the\r\n * new state has full influence for the layer.\r\n * @param {Function=} onFinish - Function to execute when the state finishes.\r\n * @param {Function=} onError - Function to execute if the state encounters\r\n * an error during playback.\r\n * @param {Function=} onCancel - Function to execute if playback is canceled.\r\n * @param {Function=} onNext - Function to execute if an animation queue is\r\n * played and it advances to the next animation.\r\n *\r\n * @returns {Deferred}\r\n */\n\n }, {\n key: "resumeAnimation",\n value: function resumeAnimation(name, transitionTime, easingFn, onFinish, onError, onCancel, onNext) {}\n /**\r\n * Stop playback of the current animation.\r\n *\r\n * @returns {boolean}\r\n */\n\n }, {\n key: "stopAnimation",\n value: function stopAnimation() {}\n /**\r\n * Update the current animation.\r\n *\r\n * @param {number} deltaTime - Time in milliseconds since the last update.\r\n */\n\n }, {\n key: "update",\n value: function update(deltaTime) {}\n /**\r\n * Discard the transition state.\r\n */\n\n }, {\n key: "discard",\n value: function discard() {}\n /**\r\n * Creates a class that implements {@link AnimationPlayerInterface} and extends\r\n * a specified base class.\r\n *\r\n * @param {Class} [BaseClass = class{}] - The class to extend.\r\n *\r\n * @return {Class} A class that extends `BaseClass` and implements {@link AnimationPlayerInterface}.\r\n */\n\n }], [{\n key: "Mixin",\n value: function Mixin() {\n var BaseClass = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : /*#__PURE__*/function () {\n function _class() {\n AnimationPlayerInterface_classCallCheck(this, _class);\n }\n\n return _class;\n }();\n\n var AnimationPlayerMixin = /*#__PURE__*/function (_BaseClass) {\n AnimationPlayerInterface_inherits(AnimationPlayerMixin, _BaseClass);\n\n var _super = AnimationPlayerInterface_createSuper(AnimationPlayerMixin);\n\n function AnimationPlayerMixin() {\n var _this;\n\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n AnimationPlayerInterface_classCallCheck(this, AnimationPlayerMixin);\n\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\n _this = _super.call.apply(_super, [this, options].concat(args));\n _this._transitionState = new state_TransitionState();\n _this._states = _this._states !== undefined ? _this._states : new Map();\n _this._currentState = null;\n _this._paused = false;\n _this._transitionTime = Number(options.transitionTime) >= 0 ? Number(options.transitionTime) : 0;\n _this._easingFn = typeof options.easingFn === \'function\' ? options.easingFn : undefined;\n return _this;\n }\n\n AnimationPlayerInterface_createClass(AnimationPlayerMixin, [{\n key: "paused",\n get: function get() {\n return this._paused;\n }\n }, {\n key: "transitionTime",\n get: function get() {\n return this._transitionTime;\n },\n set: function set(seconds) {\n seconds = Number(seconds);\n\n if (!(seconds >= 0)) {\n throw new Error("Cannot set transition time for ".concat(this.constructor.name, " to ").concat(seconds, ". Seconds must be a numeric value greather than or equal to zero."));\n }\n\n this._transitionTime = seconds;\n }\n }, {\n key: "easingFn",\n get: function get() {\n return this._easingFn;\n },\n set: function set(fn) {\n this._easingFn = fn;\n }\n }, {\n key: "currentState",\n get: function get() {\n return this._currentState;\n }\n }, {\n key: "currentAnimation",\n get: function get() {\n if (this._currentState) {\n return this._currentState.name;\n }\n\n return null;\n }\n }, {\n key: "isTransitioning",\n get: function get() {\n return this._currentState === this._transitionState;\n }\n }, {\n key: "_prepareCurrentState",\n value: function _prepareCurrentState(name, playMethod, transitionTime, easingFn, onError) {\n var _this2 = this;\n\n if (name !== null && !this._states.has(name)) {\n var e = new Error("Cannot ".concat(playMethod, " animation ").concat(name, ". No animation exists with this name."));\n\n if (typeof onError === \'function\') {\n onError(e);\n }\n\n throw e;\n }\n\n var targetState = name !== null ? this._states.get(name) : null; // Make sure the new state isn\'t already playing\n\n if (this.currentAnimation !== name) {\n // Switch to the new state immediately\n if (transitionTime <= 0) {\n // Cancel the current state and set its weight to 0\n if (this._currentState) {\n this._currentState.cancel();\n\n this._currentState.weight = 0;\n\n this._currentState.deactivate();\n }\n\n this._currentState = targetState;\n } // Blend to the new state over time\n else {\n // Make sure to transition out of any states with non-zero weight\n var currentStates = AnimationPlayerInterface_toConsumableArray(this._states.values()).filter(function (s) {\n return s !== targetState && (s.weight || s.weightPending);\n }); // Update the transition state with new inputs\n\n\n this._transitionState.configure(currentStates, targetState, transitionTime, easingFn, function () {\n _this2._currentState = targetState;\n _this2._transitionState.weight = 0;\n });\n\n this._currentState = this._transitionState;\n }\n } else if (playMethod === \'play\') {\n this._currentState.cancel();\n\n if (this._currentState === this._transitionState) {\n this._transitionState.reset(transitionTime, easingFn, function () {\n _this2._currentState = targetState;\n _this2._transitionState.weight = 0;\n });\n }\n } // Update weight for the new current state so it has full influence for the player\n\n\n this._currentState.weight = 1;\n\n this._currentState.updateInternalWeight(this._internalWeight);\n }\n }, {\n key: "playAnimation",\n value: function playAnimation(name, transitionTime, easingFn, onFinish, onError, onCancel, onNext) {\n var error;\n var reject = false;\n\n try {\n this._prepareCurrentState(name, \'play\', transitionTime !== undefined ? transitionTime : this._transitionTime, easingFn !== undefined ? easingFn : this._easingFn, onError);\n } catch (e) {\n error = e;\n reject = true;\n }\n\n if (reject) {\n return core_Deferred.reject(error);\n }\n\n return this._currentState.play(onFinish, onError, onCancel, onNext);\n }\n }, {\n key: "pauseAnimation",\n value: function pauseAnimation() {\n if (this._currentState) {\n return this._currentState.pause();\n } else {\n return false;\n }\n }\n }, {\n key: "resumeAnimation",\n value: function resumeAnimation(name, transitionTime, easingFn, onFinish, onError, onCancel, onNext) {\n if (name === undefined && this._currentState) {\n name = this._currentState.name;\n }\n\n var error;\n var reject = false;\n\n try {\n this._prepareCurrentState(name, \'resume\', transitionTime !== undefined ? transitionTime : this._transitionTime, easingFn !== undefined ? easingFn : this._easingFn, onError);\n } catch (e) {\n error = e;\n reject = true;\n }\n\n if (reject) {\n return core_Deferred.reject(error);\n }\n\n return this._currentState.resume(onFinish, onError, onCancel, onNext);\n }\n }, {\n key: "cancelAnimation",\n value: function cancelAnimation() {\n if (this._currentState) {\n return this._currentState.cancel();\n } else {\n return false;\n }\n }\n }, {\n key: "stopAnimation",\n value: function stopAnimation() {\n if (this._currentState) {\n return this._currentState.stop();\n } else {\n return false;\n }\n }\n }, {\n key: "update",\n value: function update(deltaTime) {\n if (AnimationPlayerInterface_get(AnimationPlayerInterface_getPrototypeOf(AnimationPlayerMixin.prototype), "update", this)) {\n AnimationPlayerInterface_get(AnimationPlayerInterface_getPrototypeOf(AnimationPlayerMixin.prototype), "update", this).call(this, deltaTime);\n }\n\n if (this._currentState) {\n this._currentState.update(deltaTime);\n }\n }\n }, {\n key: "discard",\n value: function discard() {\n if (AnimationPlayerInterface_get(AnimationPlayerInterface_getPrototypeOf(AnimationPlayerMixin.prototype), "discard", this)) {\n AnimationPlayerInterface_get(AnimationPlayerInterface_getPrototypeOf(AnimationPlayerMixin.prototype), "discard", this).call(this);\n }\n\n this._transitionState.discard();\n\n delete this._transitionState;\n }\n }]);\n\n return AnimationPlayerMixin;\n }(BaseClass);\n\n return AnimationPlayerMixin;\n }\n }]);\n\n return AnimationPlayerInterface;\n}();\n\n/* harmony default export */ var animpack_AnimationPlayerInterface = (AnimationPlayerInterface_AnimationPlayerInterface);\n// CONCATENATED MODULE: ./src/core/animpack/state/StateContainerInterface.js\nfunction StateContainerInterface_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { StateContainerInterface_typeof = function _typeof(obj) { return typeof obj; }; } else { StateContainerInterface_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return StateContainerInterface_typeof(obj); }\n\nfunction StateContainerInterface_toConsumableArray(arr) { return StateContainerInterface_arrayWithoutHoles(arr) || StateContainerInterface_iterableToArray(arr) || StateContainerInterface_unsupportedIterableToArray(arr) || StateContainerInterface_nonIterableSpread(); }\n\nfunction StateContainerInterface_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."); }\n\nfunction StateContainerInterface_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return StateContainerInterface_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return StateContainerInterface_arrayLikeToArray(o, minLen); }\n\nfunction StateContainerInterface_iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction StateContainerInterface_arrayWithoutHoles(arr) { if (Array.isArray(arr)) return StateContainerInterface_arrayLikeToArray(arr); }\n\nfunction StateContainerInterface_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction StateContainerInterface_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) StateContainerInterface_setPrototypeOf(subClass, superClass); }\n\nfunction StateContainerInterface_setPrototypeOf(o, p) { StateContainerInterface_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return StateContainerInterface_setPrototypeOf(o, p); }\n\nfunction StateContainerInterface_createSuper(Derived) { var hasNativeReflectConstruct = StateContainerInterface_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = StateContainerInterface_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = StateContainerInterface_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return StateContainerInterface_possibleConstructorReturn(this, result); }; }\n\nfunction StateContainerInterface_possibleConstructorReturn(self, call) { if (call && (StateContainerInterface_typeof(call) === "object" || typeof call === "function")) { return call; } return StateContainerInterface_assertThisInitialized(self); }\n\nfunction StateContainerInterface_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction StateContainerInterface_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction StateContainerInterface_getPrototypeOf(o) { StateContainerInterface_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return StateContainerInterface_getPrototypeOf(o); }\n\nfunction StateContainerInterface_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction StateContainerInterface_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction StateContainerInterface_createClass(Constructor, protoProps, staticProps) { if (protoProps) StateContainerInterface_defineProperties(Constructor.prototype, protoProps); if (staticProps) StateContainerInterface_defineProperties(Constructor, staticProps); return Constructor; }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/* eslint-disable max-classes-per-file */\n\n/* eslint-disable no-unused-vars */\n\n/* eslint-disable no-empty-function */\n\n/* eslint-disable getter-return */\n\n/**\r\n * Class factory interface for manipulating a collection of {@link AbstractState}.\r\n *\r\n * @interface\r\n */\n\nvar StateContainerInterface_StateContainerInterface = /*#__PURE__*/function () {\n function StateContainerInterface() {\n StateContainerInterface_classCallCheck(this, StateContainerInterface);\n }\n\n StateContainerInterface_createClass(StateContainerInterface, [{\n key: "getState",\n value:\n /**\r\n * Return the state with the given name.\r\n *\r\n * @param {string} name - Name of the state.\r\n *\r\n * @returns {AbstractState}\r\n */\n function getState(name) {}\n /**\r\n * Gets an array of the names of all states in the container.\r\n *\r\n * @type {Array.}\r\n */\n\n }, {\n key: "getStateNames",\n value: function getStateNames() {}\n /**\r\n * Add a new state to be controlled by the container. States are stored keyed\r\n * by their name property, which must be unique. If it isn\'t, a number will\r\n * be added or incremented until a unique key is generated.\r\n *\r\n * @param {AbstractState} state - State to add to the container.\r\n *\r\n * @returns {string} - Unique name of the state.\r\n */\n\n }, {\n key: "addState",\n value: function addState(state) {}\n /**\r\n * Removes a state with the given name from the container.\r\n *\r\n * @param {string} name - Name of the state to remove.\r\n *\r\n * @returns {boolean} - Whether or not a state was removed.\r\n */\n\n }, {\n key: "removeState",\n value: function removeState(name) {}\n /**\r\n * Renames a state with the given name in the container. Name must be unique\r\n * to the container, if it isn\'t the name will be incremented until it is unique.\r\n *\r\n * @param {string} currentName - Name of the state to rename.\r\n * @param {string} newName - Name to update the state with.\r\n *\r\n * @returns {string} - Updated name for the state.\r\n */\n\n }, {\n key: "renameState",\n value: function renameState(currentName, newName) {}\n /**\r\n * Discards all states.\r\n */\n\n }, {\n key: "discardStates",\n value: function discardStates() {}\n /**\r\n * Creates a class that implements {@link StateContainerInterface} and extends\r\n * a specified base class.\r\n *\r\n * @param {Class} [BaseClass = class{}] - The class to extend.\r\n *\r\n * @return {Class} A class that extends `BaseClass` and implements {@link StateContainerInterface}.\r\n */\n\n }], [{\n key: "Mixin",\n value: function Mixin() {\n var BaseClass = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : /*#__PURE__*/function () {\n function _class() {\n StateContainerInterface_classCallCheck(this, _class);\n }\n\n return _class;\n }();\n\n /**\r\n * This mixin adds functionality for manipulating uniquely-named animation states in\r\n * a map.\r\n */\n var StateContainerMixin = /*#__PURE__*/function (_BaseClass) {\n StateContainerInterface_inherits(StateContainerMixin, _BaseClass);\n\n var _super = StateContainerInterface_createSuper(StateContainerMixin);\n\n function StateContainerMixin() {\n var _this;\n\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n StateContainerInterface_classCallCheck(this, StateContainerMixin);\n\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\n _this = _super.call.apply(_super, [this, options].concat(args));\n _this._states = _this._states !== undefined ? _this._states : new Map();\n return _this;\n }\n\n StateContainerInterface_createClass(StateContainerMixin, [{\n key: "getState",\n value: function getState(name) {\n return this._states.get(name);\n }\n }, {\n key: "getStateNames",\n value: function getStateNames() {\n return StateContainerInterface_toConsumableArray(this._states.keys());\n }\n }, {\n key: "addState",\n value: function addState(state) {\n // Make sure the state is not already in this container\n if (StateContainerInterface_toConsumableArray(this._states.values()).includes(state)) {\n console.warn("Cannot add animation to state ".concat(this.name, ". Animation was already added."));\n return state.name;\n } // Make sure the state name is unique\n\n\n var uniqueName = core_Utils.getUniqueName(state.name, StateContainerInterface_toConsumableArray(this._states.keys()));\n\n if (state.name !== uniqueName) {\n console.warn("Animation name ".concat(state.name, " is not unique for state ").concat(this.name, ". New animation will be added with name ").concat(uniqueName, "."));\n state.name = uniqueName;\n }\n\n this._states.set(state.name, state);\n\n return state.name;\n }\n }, {\n key: "removeState",\n value: function removeState(name) {\n // Check if the state is in this container\n if (!this._states || !this._states.has(name)) {\n console.warn("Did not remove animation ".concat(name, " from state ").concat(this.name, ". No animation exists with this name."));\n return false;\n }\n\n this._states.get(name).discard();\n\n this._states["delete"](name);\n\n return true;\n }\n }, {\n key: "renameState",\n value: function renameState(currentName, newName) {\n // Make sure the state is in this container\n if (!this._states || !this._states.has(currentName)) {\n throw new Error("Cannot rename animation ".concat(currentName, " in ").concat(this.name, ". No animation exists with this name."));\n }\n\n var state = this._states.get(currentName); // Exit if the names are the same\n\n\n if (currentName === newName) {\n return currentName;\n } // Make sure the name is unique\n\n\n var uniqueName = core_Utils.getUniqueName(newName, StateContainerInterface_toConsumableArray(this._states.keys()).filter(function (s) {\n return s.name !== currentName;\n }));\n\n if (newName !== uniqueName) {\n console.warn("Animation name ".concat(newName, " is not unique in state ").concat(this.name, ". Animation will be renamed to ").concat(uniqueName, "."));\n newName = uniqueName;\n }\n\n state.name = newName;\n\n this._states["delete"](currentName);\n\n this._states.set(state.name, state);\n\n return state.name;\n }\n }, {\n key: "discardStates",\n value: function discardStates() {\n this._states.forEach(function (state) {\n state.discard();\n });\n\n delete this._states;\n }\n }]);\n\n return StateContainerMixin;\n }(BaseClass);\n\n return StateContainerMixin;\n }\n }]);\n\n return StateContainerInterface;\n}();\n\n/* harmony default export */ var state_StateContainerInterface = (StateContainerInterface_StateContainerInterface);\n// CONCATENATED MODULE: ./src/core/animpack/state/QueueState.js\nfunction QueueState_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { QueueState_typeof = function _typeof(obj) { return typeof obj; }; } else { QueueState_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return QueueState_typeof(obj); }\n\nfunction QueueState_toConsumableArray(arr) { return QueueState_arrayWithoutHoles(arr) || QueueState_iterableToArray(arr) || QueueState_unsupportedIterableToArray(arr) || QueueState_nonIterableSpread(); }\n\nfunction QueueState_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."); }\n\nfunction QueueState_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return QueueState_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return QueueState_arrayLikeToArray(o, minLen); }\n\nfunction QueueState_iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction QueueState_arrayWithoutHoles(arr) { if (Array.isArray(arr)) return QueueState_arrayLikeToArray(arr); }\n\nfunction QueueState_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction QueueState_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction QueueState_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction QueueState_createClass(Constructor, protoProps, staticProps) { if (protoProps) QueueState_defineProperties(Constructor.prototype, protoProps); if (staticProps) QueueState_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction QueueState_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { QueueState_get = Reflect.get; } else { QueueState_get = function _get(target, property, receiver) { var base = QueueState_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return QueueState_get(target, property, receiver || target); }\n\nfunction QueueState_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = QueueState_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction QueueState_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) QueueState_setPrototypeOf(subClass, superClass); }\n\nfunction QueueState_setPrototypeOf(o, p) { QueueState_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return QueueState_setPrototypeOf(o, p); }\n\nfunction QueueState_createSuper(Derived) { var hasNativeReflectConstruct = QueueState_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = QueueState_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = QueueState_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return QueueState_possibleConstructorReturn(this, result); }; }\n\nfunction QueueState_possibleConstructorReturn(self, call) { if (call && (QueueState_typeof(call) === "object" || typeof call === "function")) { return call; } return QueueState_assertThisInitialized(self); }\n\nfunction QueueState_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction QueueState_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction QueueState_getPrototypeOf(o) { QueueState_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return QueueState_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n/**\r\n * Class for playing an ordered array of animation states in sequence.\r\n *\r\n * @extends AbstractState\r\n * @implements @AnimationPlayerInterface\r\n */\n\nvar QueueState = /*#__PURE__*/function (_AnimationPlayerInter) {\n QueueState_inherits(QueueState, _AnimationPlayerInter);\n\n var _super = QueueState_createSuper(QueueState);\n\n /**\r\n * @constructor\r\n *\r\n * @param {Object} [options={}] - Options for the state.\r\n * @param {boolean} [options.autoAdvance=true] - Whether to autmatically advance\r\n * to the next state in the queue as each state completes.\r\n * @param {Array.} [queueStates=[]] - Array of states to be played\r\n * in order.\r\n */\n function QueueState() {\n var _this;\n\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var queueStates = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n\n QueueState_classCallCheck(this, QueueState);\n\n _this = _super.call(this, options);\n queueStates.forEach(function (state) {\n _this.addState(state);\n });\n _this._queue = _this._states.keys();\n _this._done = true;\n return _this;\n }\n /**\r\n * Gets whether the animation queue has reached the end.\r\n */\n\n\n QueueState_createClass(QueueState, [{\n key: "done",\n get: function get() {\n return this._done;\n }\n /**\r\n * Gets the internal weight.\r\n *\r\n * @readonly\r\n * @type {number}\r\n */\n\n }, {\n key: "internalWeight",\n get: function get() {\n return this._currentState ? this._currentState.internalWeight * this._internalWeight : 0;\n }\n /**\r\n * Restart the queue iterator.\r\n *\r\n * @private\r\n */\n\n }, {\n key: "_reset",\n value: function _reset() {\n this._queue = this._states.keys();\n\n var _this$_queue$next = this._queue.next(),\n value = _this$_queue$next.value,\n done = _this$_queue$next.done;\n\n this._done = done;\n return value || null;\n }\n /**\r\n * Multiplies the user weight by a factor to determine the internal weight.\r\n *\r\n * @param {number} factor - 0-1 multiplier to apply to the user weight.\r\n */\n\n }, {\n key: "updateInternalWeight",\n value: function updateInternalWeight(factor) {\n QueueState_get(QueueState_getPrototypeOf(QueueState.prototype), "updateInternalWeight", this).call(this, factor);\n\n if (this._currentState) {\n this._currentState.updateInternalWeight(this._internalWeight);\n }\n }\n /**\r\n * Start the next animation in the queue.\r\n *\r\n * @param {Function=} onNext - Function to execute each time an animation completes\r\n * and the queue moves to the next animation.\r\n * @param {boolean} [wrap=false] - Whether or not to start the queue from the\r\n * beginning again if the end has been reached.\r\n *\r\n * @returns {Deferred}\r\n */\n\n }, {\n key: "next",\n value: function next(onNext) {\n var _this2 = this;\n\n var wrap = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n // Move the queue forward\n var _this$_queue$next2 = this._queue.next(),\n name = _this$_queue$next2.value,\n done = _this$_queue$next2.done;\n\n this._done = done;\n this._paused = false; // The queue has reached the end\n\n if (done) {\n // Start the queue over\n if (wrap) {\n return this.play(this._playCallbacks.onFinish, this._playCallbacks.onError, this._playCallbacks.onCancel, onNext);\n } // Stop the queue\n else {\n this._promises.finish.resolve();\n\n return this._promises.finish;\n }\n } // Signal the next animation is starting\n\n\n if (typeof onNext === \'function\') {\n var lastName = QueueState_toConsumableArray(this._states.keys())[this._states.size - 1];\n\n var isQueueEnd = name === lastName;\n onNext({\n name: name,\n canAdvance: this.getState(name).loopCount !== Infinity && !isQueueEnd,\n isQueueEnd: isQueueEnd\n });\n } // Start the next animation\n\n\n this.playAnimation(name, this._transitionTime, this._easingFn, function () {\n if (!_this2._paused && !_this2.isTransitioning) {\n _this2.next(onNext);\n }\n }, this._playCallbacks.onError);\n return this._promises.finish;\n }\n }, {\n key: "play",\n value: function play(onFinish, onError, onCancel, onNext) {\n var _this3 = this;\n\n var name = this._reset();\n\n QueueState_get(QueueState_getPrototypeOf(QueueState.prototype), "play", this).call(this, onFinish, onError, onCancel);\n\n if (this._done) {\n this._promises.finish.resolve();\n } else {\n // Signal the next animation is starting\n if (name !== this.currentAnimation && typeof onNext === \'function\') {\n var lastName = QueueState_toConsumableArray(this._states.keys())[this._states.size - 1];\n\n var isQueueEnd = name === lastName;\n onNext({\n name: name,\n canAdvance: name ? this.getState(name).loopCount !== Infinity && !isQueueEnd : true,\n isQueueEnd: !name || isQueueEnd\n });\n } // Start the next animation\n\n\n this.playAnimation(name, this._currentState ? this._transitionTime : 0, this._easingFn, function () {\n if (!_this3._paused && !_this3.isTransitioning) {\n _this3.next(onNext);\n }\n }, onError);\n }\n\n return this._promises.finish;\n }\n }, {\n key: "pause",\n value: function pause() {\n var paused = QueueState_get(QueueState_getPrototypeOf(QueueState.prototype), "pause", this).call(this);\n\n this.pauseAnimation();\n return paused;\n }\n }, {\n key: "resume",\n value: function resume(onFinish, onError, onCancel, onNext) {\n var _this4 = this;\n\n if (this._done) {\n return this.play(onFinish, onError, onCancel, onNext);\n } else {\n QueueState_get(QueueState_getPrototypeOf(QueueState.prototype), "resume", this).call(this, onFinish, onError, onCancel);\n\n this.resumeAnimation(this._currentState.name, this._transitionTime, this._easingFn, function () {\n if (!_this4._paused && !_this4.isTransitioning) {\n _this4.next(onNext);\n }\n }, onError);\n return this._promises.finish;\n }\n }\n }, {\n key: "cancel",\n value: function cancel() {\n var canceled = QueueState_get(QueueState_getPrototypeOf(QueueState.prototype), "cancel", this).call(this);\n\n if (this._currentState) {\n this._currentState.cancel();\n }\n\n return canceled;\n }\n }, {\n key: "stop",\n value: function stop() {\n var stopped = QueueState_get(QueueState_getPrototypeOf(QueueState.prototype), "stop", this).call(this);\n\n this.stopAnimation();\n this._done = true;\n return stopped;\n }\n }, {\n key: "discard",\n value: function discard() {\n QueueState_get(QueueState_getPrototypeOf(QueueState.prototype), "discard", this).call(this);\n\n this.discardStates();\n }\n }]);\n\n return QueueState;\n}(animpack_AnimationPlayerInterface.Mixin(state_StateContainerInterface.Mixin(state_AbstractState)));\n\n/* harmony default export */ var state_QueueState = (QueueState);\n// CONCATENATED MODULE: ./src/core/animpack/state/AbstractBlendState.js\nfunction AbstractBlendState_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { AbstractBlendState_typeof = function _typeof(obj) { return typeof obj; }; } else { AbstractBlendState_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return AbstractBlendState_typeof(obj); }\n\nfunction AbstractBlendState_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction AbstractBlendState_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction AbstractBlendState_createClass(Constructor, protoProps, staticProps) { if (protoProps) AbstractBlendState_defineProperties(Constructor.prototype, protoProps); if (staticProps) AbstractBlendState_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction AbstractBlendState_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { AbstractBlendState_get = Reflect.get; } else { AbstractBlendState_get = function _get(target, property, receiver) { var base = AbstractBlendState_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return AbstractBlendState_get(target, property, receiver || target); }\n\nfunction AbstractBlendState_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = AbstractBlendState_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction AbstractBlendState_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) AbstractBlendState_setPrototypeOf(subClass, superClass); }\n\nfunction AbstractBlendState_setPrototypeOf(o, p) { AbstractBlendState_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return AbstractBlendState_setPrototypeOf(o, p); }\n\nfunction AbstractBlendState_createSuper(Derived) { var hasNativeReflectConstruct = AbstractBlendState_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = AbstractBlendState_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = AbstractBlendState_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return AbstractBlendState_possibleConstructorReturn(this, result); }; }\n\nfunction AbstractBlendState_possibleConstructorReturn(self, call) { if (call && (AbstractBlendState_typeof(call) === "object" || typeof call === "function")) { return call; } return AbstractBlendState_assertThisInitialized(self); }\n\nfunction AbstractBlendState_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction AbstractBlendState_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction AbstractBlendState_getPrototypeOf(o) { AbstractBlendState_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return AbstractBlendState_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n\n/**\r\n * Base class for a state that blends a collection of {@link AbstractState}.\r\n *\r\n * @abstract\r\n * @implements StateContainerInterface\r\n */\n\nvar AbstractBlendState_AbstractBlendState = /*#__PURE__*/function (_StateContainerInterf) {\n AbstractBlendState_inherits(AbstractBlendState, _StateContainerInterf);\n\n var _super = AbstractBlendState_createSuper(AbstractBlendState);\n\n function AbstractBlendState() {\n var _this;\n\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var blendStates = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n\n AbstractBlendState_classCallCheck(this, AbstractBlendState);\n\n for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n args[_key - 2] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this, options].concat(args));\n blendStates.forEach(function (state) {\n _this.addState(state);\n });\n return _this;\n }\n /**\r\n * Gets the sum of internal weights of the sub-states.\r\n *\r\n * @readonly\r\n * @type {number}\r\n */\n\n\n AbstractBlendState_createClass(AbstractBlendState, [{\n key: "internalWeight",\n get: function get() {\n var blendWeights = 0;\n\n this._states.forEach(function (state) {\n blendWeights += state.internalWeight;\n });\n\n return blendWeights;\n }\n /**\r\n * Returns the weight of a state controlled by the container.\r\n *\r\n * @param {string} name - Name of the state to return the weight from.\r\n *\r\n * @returns {number} - Weight of the state.\r\n */\n\n }, {\n key: "getBlendWeight",\n value: function getBlendWeight(name) {\n // Make sure the name is valid\n var state = this.getState(name);\n\n if (state === undefined) {\n throw new Error("Cannot get weight of state ".concat(name, " from BlendState ").concat(this.name, ". No state exists with this name."));\n }\n\n return state.weight;\n }\n /**\r\n * Sets the weight of a state controlled by the container.\r\n *\r\n * @param {string} name - Name of the state to set the weight of.\r\n * @param {number} weight - Weight value to set on the state.\r\n *\r\n * @returns {Deferred}\r\n */\n\n }, {\n key: "setBlendWeight",\n value: function setBlendWeight(name, weight) {\n var seconds = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n var easingFn = arguments.length > 3 ? arguments[3] : undefined;\n // Make sure the name is valid\n var state = this.getState(name);\n\n if (state === undefined) {\n throw new Error("Cannot set weight of state ".concat(name, " from BlendState ").concat(this.name, ". No state exists with this name."));\n }\n\n weight = core_MathUtils.clamp(weight);\n return state.setWeight(weight, seconds, easingFn);\n }\n /**\r\n * Multiplies the weight of each sub-state by a factor to determine the internal weight.\r\n *\r\n * @param {number} factor - 0-1 multiplier to apply to the user weight.\r\n */\n\n }, {\n key: "updateInternalWeight",\n value: function updateInternalWeight(factor) {\n var _this2 = this;\n\n AbstractBlendState_get(AbstractBlendState_getPrototypeOf(AbstractBlendState.prototype), "updateInternalWeight", this).call(this, factor);\n\n this._states.forEach(function (state) {\n state.updateInternalWeight(_this2._internalWeight);\n });\n }\n /**\r\n * Update any values of the sub-states that need to be evaluated every frame.\r\n *\r\n * @param {number} deltaTime - Time in milliseconds since the last update.\r\n */\n\n }, {\n key: "update",\n value: function update(deltaTime) {\n AbstractBlendState_get(AbstractBlendState_getPrototypeOf(AbstractBlendState.prototype), "update", this).call(this, deltaTime);\n\n this._states.forEach(function (state) {\n state.update(deltaTime);\n });\n }\n /**\r\n * Start playback of the sub-states from the beginning.\r\n *\r\n * @param {Function=} onFinish - Function to execute when the state finishes.\r\n * @param {Function=} onError - Function to execute if the state encounters\r\n * an error during playback.\r\n * @param {Function=} onCancel - Function to execute if playback is canceled.\r\n *\r\n * @returns {Deferred}\r\n */\n\n }, {\n key: "play",\n value: function play(onFinish, onError, onCancel) {\n var promises = [AbstractBlendState_get(AbstractBlendState_getPrototypeOf(AbstractBlendState.prototype), "play", this).call(this)];\n\n this._states.forEach(function (state) {\n promises.push(state.play());\n });\n\n return core_Deferred.all(promises, onFinish, onError, onCancel);\n }\n /**\r\n * Pause playback of the sub-states. This prevents pending promises from being executed.\r\n *\r\n * @returns {boolean}\r\n */\n\n }, {\n key: "pause",\n value: function pause() {\n this._states.forEach(function (state) {\n state.pause();\n });\n\n return AbstractBlendState_get(AbstractBlendState_getPrototypeOf(AbstractBlendState.prototype), "pause", this).call(this);\n }\n /**\r\n * Resume playback of the sub-states.\r\n *\r\n * @param {Function=} onFinish - Function to execute when the state finishes.\r\n * @param {Function=} onError - Function to execute if the state encounters\r\n * an error during playback.\r\n * @param {Function=} onCancel - Function to execute if playback is canceled.\r\n *\r\n * @returns {Deferred}\r\n */\n\n }, {\n key: "resume",\n value: function resume(onFinish, onError, onCancel) {\n var promises = [AbstractBlendState_get(AbstractBlendState_getPrototypeOf(AbstractBlendState.prototype), "resume", this).call(this)];\n\n this._states.forEach(function (state) {\n promises.push(state.resume());\n });\n\n return core_Deferred.all(promises, onFinish, onError, onCancel);\n }\n /**\r\n * Cancel playback of the sub-states and cancel any pending promises.\r\n *\r\n * @returns {boolean}\r\n */\n\n }, {\n key: "cancel",\n value: function cancel() {\n this._states.forEach(function (state) {\n state.cancel();\n });\n\n return AbstractBlendState_get(AbstractBlendState_getPrototypeOf(AbstractBlendState.prototype), "cancel", this).call(this);\n }\n /**\r\n * Stop playback of the sub-states and resolve any pending promises.\r\n *\r\n * @returns {boolean}\r\n */\n\n }, {\n key: "stop",\n value: function stop() {\n this._states.forEach(function (state) {\n state.stop();\n });\n\n return AbstractBlendState_get(AbstractBlendState_getPrototypeOf(AbstractBlendState.prototype), "stop", this).call(this);\n }\n /**\r\n * Discards all sub-state resources.\r\n *\r\n * @returns {boolean}\r\n */\n\n }, {\n key: "discard",\n value: function discard() {\n AbstractBlendState_get(AbstractBlendState_getPrototypeOf(AbstractBlendState.prototype), "discard", this).call(this);\n\n this.discardStates();\n }\n }]);\n\n return AbstractBlendState;\n}(state_StateContainerInterface.Mixin(state_AbstractState));\n\n/* harmony default export */ var state_AbstractBlendState = (AbstractBlendState_AbstractBlendState);\n// CONCATENATED MODULE: ./src/core/animpack/state/FreeBlendState.js\nfunction FreeBlendState_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { FreeBlendState_typeof = function _typeof(obj) { return typeof obj; }; } else { FreeBlendState_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return FreeBlendState_typeof(obj); }\n\nfunction FreeBlendState_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction FreeBlendState_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction FreeBlendState_createClass(Constructor, protoProps, staticProps) { if (protoProps) FreeBlendState_defineProperties(Constructor.prototype, protoProps); if (staticProps) FreeBlendState_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction FreeBlendState_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { FreeBlendState_get = Reflect.get; } else { FreeBlendState_get = function _get(target, property, receiver) { var base = FreeBlendState_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return FreeBlendState_get(target, property, receiver || target); }\n\nfunction FreeBlendState_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = FreeBlendState_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction FreeBlendState_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) FreeBlendState_setPrototypeOf(subClass, superClass); }\n\nfunction FreeBlendState_setPrototypeOf(o, p) { FreeBlendState_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return FreeBlendState_setPrototypeOf(o, p); }\n\nfunction FreeBlendState_createSuper(Derived) { var hasNativeReflectConstruct = FreeBlendState_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = FreeBlendState_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = FreeBlendState_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return FreeBlendState_possibleConstructorReturn(this, result); }; }\n\nfunction FreeBlendState_possibleConstructorReturn(self, call) { if (call && (FreeBlendState_typeof(call) === "object" || typeof call === "function")) { return call; } return FreeBlendState_assertThisInitialized(self); }\n\nfunction FreeBlendState_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction FreeBlendState_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction FreeBlendState_getPrototypeOf(o) { FreeBlendState_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return FreeBlendState_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/**\r\n * Class for blending N number of blend states.\r\n *\r\n * @extends AbstractBlendState\r\n */\n\nvar FreeBlendState = /*#__PURE__*/function (_AbstractBlendState) {\n FreeBlendState_inherits(FreeBlendState, _AbstractBlendState);\n\n var _super = FreeBlendState_createSuper(FreeBlendState);\n\n /**\r\n * @constructor\r\n *\r\n * @param {Object} [options={}] - Options for the container state.\r\n * @param {Array.} [blendStates=[]] - Blend states to be controlled by\r\n * this container.\r\n */\n function FreeBlendState() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var blendStates = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n\n FreeBlendState_classCallCheck(this, FreeBlendState);\n\n return _super.call(this, options, blendStates);\n }\n\n FreeBlendState_createClass(FreeBlendState, [{\n key: "updateInternalWeight",\n value: function updateInternalWeight(factor) {\n var _this = this;\n\n FreeBlendState_get(FreeBlendState_getPrototypeOf(FreeBlendState.prototype), "updateInternalWeight", this).call(this, factor); // Determine the total active weight of blend states\n\n\n var sumWeights = 0;\n\n this._states.forEach(function (state) {\n sumWeights += state.weight;\n }); // Ensure the sum of blend state internal weights does not exceed container internal weight\n\n\n factor /= Math.max(sumWeights, 1); // Sum of blend state internal weights should not exceed container internal weight\n\n this._states.forEach(function (state) {\n state.updateInternalWeight(factor * _this._weight);\n });\n }\n }]);\n\n return FreeBlendState;\n}(state_AbstractBlendState);\n\n/* harmony default export */ var state_FreeBlendState = (FreeBlendState);\n// CONCATENATED MODULE: ./src/core/animpack/state/Blend1dState.js\nfunction Blend1dState_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { Blend1dState_typeof = function _typeof(obj) { return typeof obj; }; } else { Blend1dState_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return Blend1dState_typeof(obj); }\n\nfunction Blend1dState_toConsumableArray(arr) { return Blend1dState_arrayWithoutHoles(arr) || Blend1dState_iterableToArray(arr) || Blend1dState_unsupportedIterableToArray(arr) || Blend1dState_nonIterableSpread(); }\n\nfunction Blend1dState_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."); }\n\nfunction Blend1dState_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return Blend1dState_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return Blend1dState_arrayLikeToArray(o, minLen); }\n\nfunction Blend1dState_iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction Blend1dState_arrayWithoutHoles(arr) { if (Array.isArray(arr)) return Blend1dState_arrayLikeToArray(arr); }\n\nfunction Blend1dState_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction Blend1dState_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction Blend1dState_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { Blend1dState_ownKeys(Object(source), true).forEach(function (key) { Blend1dState_defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { Blend1dState_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction Blend1dState_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction Blend1dState_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction Blend1dState_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction Blend1dState_createClass(Constructor, protoProps, staticProps) { if (protoProps) Blend1dState_defineProperties(Constructor.prototype, protoProps); if (staticProps) Blend1dState_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction Blend1dState_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { Blend1dState_get = Reflect.get; } else { Blend1dState_get = function _get(target, property, receiver) { var base = Blend1dState_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return Blend1dState_get(target, property, receiver || target); }\n\nfunction Blend1dState_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = Blend1dState_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction Blend1dState_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) Blend1dState_setPrototypeOf(subClass, superClass); }\n\nfunction Blend1dState_setPrototypeOf(o, p) { Blend1dState_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return Blend1dState_setPrototypeOf(o, p); }\n\nfunction Blend1dState_createSuper(Derived) { var hasNativeReflectConstruct = Blend1dState_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = Blend1dState_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = Blend1dState_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return Blend1dState_possibleConstructorReturn(this, result); }; }\n\nfunction Blend1dState_possibleConstructorReturn(self, call) { if (call && (Blend1dState_typeof(call) === "object" || typeof call === "function")) { return call; } return Blend1dState_assertThisInitialized(self); }\n\nfunction Blend1dState_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction Blend1dState_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction Blend1dState_getPrototypeOf(o) { Blend1dState_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return Blend1dState_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n/**\r\n * Class for blending N number of blend states based on a single\r\n * parameter.\r\n *\r\n * @extends AbstractBlendState\r\n */\n\nvar Blend1dState_Blend1dState = /*#__PURE__*/function (_AbstractBlendState) {\n Blend1dState_inherits(Blend1dState, _AbstractBlendState);\n\n var _super = Blend1dState_createSuper(Blend1dState);\n\n /**\r\n * @constructor\r\n *\r\n * @param {Object} [options] - Options for the container state\r\n * @param {Array.} [blendStates=[]] - Blend states to be\r\n * controlled by this container.\r\n * @param {Array.} [blendThresholds=[]] - Threshold values for activating\r\n * each blend state.\r\n * @param {Array.} [phaseMatches=[]] - Booleans indicating whether or not\r\n * each blend state should be phase matched.\r\n */\n function Blend1dState() {\n var _this;\n\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var blendStates = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n var blendThresholds = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];\n var phaseMatches = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : [];\n\n Blend1dState_classCallCheck(this, Blend1dState);\n\n _this = _super.call(this, options, blendStates);\n _this._blendValue = 0;\n _this._promises = Blend1dState_objectSpread(Blend1dState_objectSpread({}, _this._promises), {}, {\n blendValue: core_Deferred.resolve()\n }); // Validate there are no duplicate thresholds\n\n var nonZeroDifferentSize = blendStates.length !== 0 && blendStates.length !== blendThresholds.length;\n\n if (nonZeroDifferentSize) {\n throw new Error("Cannot create Blend1dState with blendThresholds ".concat(blendThresholds, ". BlendThresholds count does not match blendStates count."));\n }\n\n var containsDuplicates = new Set(blendThresholds).size !== blendThresholds.length;\n\n if (containsDuplicates) {\n throw new Error("Cannot create Blend1dState with blendThresholds ".concat(blendThresholds, ". BlendThresholds contains duplicate values"));\n } // Initialize the thresholds map\n\n\n _this._thresholds = [];\n\n Blend1dState_toConsumableArray(_this._states.values()).forEach(function (state, index) {\n _this._thresholds.push({\n value: blendThresholds[index],\n name: state.name,\n phaseMatch: phaseMatches[index] || false\n });\n });\n\n _this._sortThresholds();\n\n _this._forceNoThresholdDupes = true;\n _this._phaseLeadState = null;\n\n _this._updateBlendWeights();\n\n return _this;\n }\n /**\r\n * Gets and sets the blend parameter value.\r\n */\n\n\n Blend1dState_createClass(Blend1dState, [{\n key: "blendValue",\n get: function get() {\n return this._blendValue;\n },\n set: function set(value) {\n this._blendValue = value;\n }\n /**\r\n * Gets whether or not the blend value is currently being animated.\r\n */\n\n }, {\n key: "blendValuePending",\n get: function get() {\n return this._promises.blendValue && this._promises.blendValue.pending;\n }\n /**\r\n * Updates the user defined weight over time.\r\n *\r\n * @param {null} name - Unused parameter.\r\n * @param {number} weight - The target weight value.\r\n * @param {number} [seconds=0] - The amount of time it will take to reach the\r\n * target weight.\r\n * @param {Function=} easingFn - The easing function to use for interpolation.\r\n *\r\n * @returns {Deferred}\r\n */\n\n }, {\n key: "setBlendWeight",\n value: function setBlendWeight(name, value) {\n var _this2 = this;\n\n var seconds = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n var easingFn = arguments.length > 3 ? arguments[3] : undefined;\n\n this._promises.blendValue.cancel();\n\n this._promises.blendValue = animpack_AnimationUtils.interpolateProperty(this, \'blendValue\', value, {\n seconds: seconds,\n easingFn: easingFn,\n onProgress: function onProgress() {\n _this2._updateBlendWeights();\n },\n onFinish: function onFinish() {\n _this2._updateBlendWeights();\n }\n });\n return this._promises.blendValue;\n }\n /**\r\n * Gets the user defined weight.\r\n *\r\n * @returns {number}\r\n */\n\n }, {\n key: "getBlendWeight",\n value: function getBlendWeight() {\n return this.blendValue;\n }\n }, {\n key: "addState",\n value: function addState(state) {\n var thresholdValue = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var phaseMatch = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n this._thresholds = this._thresholds || []; // Make sure there is not already a state with this threshold\n\n var sameValue = this._thresholds.find(function (threshold) {\n return threshold.value === thresholdValue;\n });\n\n if (this._forceNoThresholdDupes && sameValue !== undefined) {\n throw new Error("Cannot set blend threshold of ".concat(thresholdValue, " for state ").concat(state.name, " on ").concat(this.name, ". A state already exists with that threshold."));\n }\n\n Blend1dState_get(Blend1dState_getPrototypeOf(Blend1dState.prototype), "addState", this).call(this, state);\n\n this._thresholds.push({\n value: thresholdValue,\n name: state.name,\n phaseMatch: phaseMatch || false\n });\n\n this._sortThresholds();\n\n return state.name;\n }\n }, {\n key: "removeState",\n value: function removeState(name) {\n var removed = Blend1dState_get(Blend1dState_getPrototypeOf(Blend1dState.prototype), "removeState", this).call(this, name);\n\n if (removed) {\n var index = this._thresholds.findIndex(function (threshold) {\n return threshold.name === name;\n });\n\n this._thresholds.splice(index, 1);\n }\n\n return removed;\n }\n }, {\n key: "renameState",\n value: function renameState(currentName, newName) {\n newName = Blend1dState_get(Blend1dState_getPrototypeOf(Blend1dState.prototype), "renameState", this).call(this, currentName, newName);\n\n var threshold = this._thresholds.find(function (threshold) {\n return threshold.name === currentName;\n });\n\n threshold.name = newName;\n return newName;\n }\n /**\r\n * Gets the threshold value of a blend with the corresponding name.\r\n *\r\n * @param {string} name - Name of the blend to get the threshold of.\r\n *\r\n * @returns {number} Threhold value.\r\n */\n\n }, {\n key: "getBlendThreshold",\n value: function getBlendThreshold(name) {\n var threshold = this._thresholds.find(function (threshold) {\n return threshold.name === name;\n });\n\n if (threshold === undefined) {\n throw new Error("Cannot get blend threshold of state ".concat(name, " on ").concat(this.name, ". No state exists with that name."));\n }\n\n return threshold.value;\n }\n /**\r\n * Sets the threshold value of a blend with the corresponding name.\r\n *\r\n * @param {string} name - Name of the blend to set the threshold.\r\n * @param {number} value - Value of the threshold to set.\r\n *\r\n * @returns {number} Set threshold value.\r\n */\n\n }, {\n key: "setBlendThreshold",\n value: function setBlendThreshold(name, value) {\n // Make sure there is not already a state with this threshold\n var sameValue = this._thresholds.find(function (threshold) {\n return threshold.value === value;\n });\n\n if (sameValue !== undefined) {\n throw new Error("Cannot set blend threshold of ".concat(value, " for state ").concat(name, " on ").concat(this.name, ". A state already exists with that threshold."));\n }\n\n var threshold = this._thresholds.find(function (threshold) {\n return threshold.name === name;\n });\n\n if (threshold === undefined) {\n throw new Error("Cannot set blend threshold of state ".concat(name, " on ").concat(this.name, ". No state exists with that name."));\n }\n\n threshold.value = value;\n\n this._sortThresholds();\n\n return threshold.value;\n }\n }, {\n key: "updateInternalWeight",\n value: function updateInternalWeight(factor) {\n var _this3 = this;\n\n Blend1dState_get(Blend1dState_getPrototypeOf(Blend1dState.prototype), "updateInternalWeight", this).call(this, factor);\n\n if (this._phaseLeadState) {\n this._states.forEach(function (state) {\n if (state.weight !== 0) {\n state.normalizedTime = _this3._phaseLeadState.normalizedTime;\n }\n });\n }\n }\n /**\r\n * Updates the blend weights based on their corresponding threshold values\r\n * and the current blendValue. Additionally, sets a lead phase state if the\r\n * conditions for phase-matching have been satisfied.\r\n *\r\n * @private\r\n */\n\n }, {\n key: "_updateBlendWeights",\n value: function _updateBlendWeights() {\n var _this4 = this;\n\n if (this._thresholds.length === 0) return;\n\n if (this._thresholds.length === 1) {\n var state = this._states.get(this._thresholds[0].name);\n\n state.setWeight(1);\n return;\n } // Initially set all sub-state weights to zero\n\n\n this._states.forEach(function (state) {\n state.setWeight(0);\n });\n\n this._phaseLeadState = null; // Find the first threshold that is greater than or equal to the parameter value\n\n var targetIndex = this._thresholds.findIndex(function (threshold) {\n return threshold.value >= _this4._blendValue;\n });\n\n if (targetIndex === 0 || targetIndex === -1) {\n // Give one state full influence\n targetIndex = targetIndex === -1 ? this._thresholds.length - 1 : 0;\n\n var _state = this._states.get(this._thresholds[targetIndex].name);\n\n _state.setWeight(1);\n } else {\n // Linear interpolate influence between two states\n var thresholdA = this._thresholds[targetIndex - 1];\n var thresholdB = this._thresholds[targetIndex];\n var factorB = (this.blendValue - thresholdA.value) / (thresholdB.value - thresholdA.value);\n var factorA = 1 - factorB;\n\n var stateA = this._states.get(thresholdA.name);\n\n var stateB = this._states.get(thresholdB.name);\n\n stateA.setWeight(factorA);\n stateB.setWeight(factorB); // Set phase-matching if needed\n\n if (thresholdA.phaseMatch && thresholdB.phaseMatch) {\n this._phaseLeadState = factorA > factorB ? stateA : stateB;\n }\n }\n }\n /**\r\n * Sorts the thresholds from low to high based on value.\r\n *\r\n * @private\r\n */\n\n }, {\n key: "_sortThresholds",\n value: function _sortThresholds() {\n this._thresholds.sort(function (a, b) {\n return a.value - b.value;\n });\n }\n }]);\n\n return Blend1dState;\n}(state_AbstractBlendState);\n\n/* harmony default export */ var state_Blend1dState = (Blend1dState_Blend1dState);\n// CONCATENATED MODULE: ./src/core/animpack/state/Blend2dState.js\nfunction Blend2dState_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { Blend2dState_typeof = function _typeof(obj) { return typeof obj; }; } else { Blend2dState_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return Blend2dState_typeof(obj); }\n\nfunction Blend2dState_toConsumableArray(arr) { return Blend2dState_arrayWithoutHoles(arr) || Blend2dState_iterableToArray(arr) || Blend2dState_unsupportedIterableToArray(arr) || Blend2dState_nonIterableSpread(); }\n\nfunction Blend2dState_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."); }\n\nfunction Blend2dState_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return Blend2dState_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return Blend2dState_arrayLikeToArray(o, minLen); }\n\nfunction Blend2dState_iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction Blend2dState_arrayWithoutHoles(arr) { if (Array.isArray(arr)) return Blend2dState_arrayLikeToArray(arr); }\n\nfunction Blend2dState_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction Blend2dState_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction Blend2dState_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { Blend2dState_ownKeys(Object(source), true).forEach(function (key) { Blend2dState_defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { Blend2dState_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction Blend2dState_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction Blend2dState_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction Blend2dState_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction Blend2dState_createClass(Constructor, protoProps, staticProps) { if (protoProps) Blend2dState_defineProperties(Constructor.prototype, protoProps); if (staticProps) Blend2dState_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction Blend2dState_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { Blend2dState_get = Reflect.get; } else { Blend2dState_get = function _get(target, property, receiver) { var base = Blend2dState_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return Blend2dState_get(target, property, receiver || target); }\n\nfunction Blend2dState_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = Blend2dState_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction Blend2dState_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) Blend2dState_setPrototypeOf(subClass, superClass); }\n\nfunction Blend2dState_setPrototypeOf(o, p) { Blend2dState_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return Blend2dState_setPrototypeOf(o, p); }\n\nfunction Blend2dState_createSuper(Derived) { var hasNativeReflectConstruct = Blend2dState_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = Blend2dState_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = Blend2dState_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return Blend2dState_possibleConstructorReturn(this, result); }; }\n\nfunction Blend2dState_possibleConstructorReturn(self, call) { if (call && (Blend2dState_typeof(call) === "object" || typeof call === "function")) { return call; } return Blend2dState_assertThisInitialized(self); }\n\nfunction Blend2dState_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction Blend2dState_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction Blend2dState_getPrototypeOf(o) { Blend2dState_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return Blend2dState_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/* eslint-disable no-underscore-dangle */\n\n\n\n\n/**\r\n * Class for blending N number of blend states based on two\r\n * paramters.\r\n *\r\n * @extends AbstractBlendState\r\n */\n\nvar Blend2dState_Blend2dState = /*#__PURE__*/function (_AbstractBlendState) {\n Blend2dState_inherits(Blend2dState, _AbstractBlendState);\n\n var _super = Blend2dState_createSuper(Blend2dState);\n\n /**\r\n * @constructor\r\n *\r\n * @param {Object} [options] - Options for the container state\r\n * @param {Array.} [blendStates=[]] - Blend states to be\r\n * controlled by this container.\r\n * @param {Array.>} [blendThresholds=[]] - Threshold values for activating\r\n * each blend state.\r\n * @param {Array.} [phaseMatches=[]] - Booleans indicating whether or not\r\n * each blend state should be phase matched.\r\n */\n function Blend2dState() {\n var _this;\n\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var blendStates = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n var blendThresholds = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];\n var phaseMatches = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : [];\n\n Blend2dState_classCallCheck(this, Blend2dState);\n\n _this = _super.call(this, options, blendStates);\n\n if (blendStates.length !== blendThresholds.length) {\n throw new Error("Cannot create Blend2dState with blendStates ".concat(blendStates, " and blendThresholds ").concat(blendThresholds, ". Count of blendStates must match count of blendThresholds."));\n }\n\n blendThresholds.slice(0, blendThresholds.length - 1).forEach(function (threshold, index) {\n blendThresholds.slice(index + 1).forEach(function (otherThreshold) {\n if (threshold[0] === otherThreshold[0] && threshold[1] === otherThreshold[1]) {\n throw new Error("Cannot create Blend2dState with blendThresholds ".concat(blendThresholds, ". No duplicate values allowed in blendThresholds."));\n }\n });\n });\n _this._blendValueX = 0;\n _this._blendValueY = 0;\n _this._promises = Blend2dState_objectSpread(Blend2dState_objectSpread({}, _this._promises), {}, {\n blendValueX: core_Deferred.resolve(),\n blendValueY: core_Deferred.resolve()\n });\n _this._thresholds = [];\n\n Blend2dState_toConsumableArray(_this._states.values()).forEach(function (state, index) {\n _this._thresholds.push({\n name: state.name,\n phaseMatch: phaseMatches[index] || false\n });\n });\n\n _this._vertices = blendThresholds;\n\n if (_this._vertices.length >= 3) {\n _this._triangles = core_MathUtils.getDelaunayTriangulation(_this._vertices);\n }\n\n _this._phaseLeadState = null;\n\n _this._updateBlendWeights();\n\n return _this;\n }\n /**\r\n * Updates the user defined weight over time.\r\n *\r\n * @param {string} name - Name of blend weight to update.\r\n * @param {number} weight - Target weight value.\r\n * @param {number} [seconds=0] - The amount of time it will take to reach the\r\n * target value.\r\n * @param {Function=} easingFn - The easing function to use for interpolation.\r\n *\r\n * @returns {Deferred}\r\n */\n\n\n Blend2dState_createClass(Blend2dState, [{\n key: "setBlendWeight",\n value: function setBlendWeight(name, value) {\n var _this2 = this;\n\n var seconds = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n var easingFn = arguments.length > 3 ? arguments[3] : undefined;\n var property = "blendValue".concat(name.toUpperCase());\n\n if (property !== \'blendValueX\' && property !== \'blendValueY\') {\n throw new Error("Cannot set blend weight for ".concat(name, " on ").concat(this.name, ". Blend2dState only accepts \'X\' or \'Y\' for setBlendWeight"));\n }\n\n this._promises[property].cancel();\n\n this._promises[property] = animpack_AnimationUtils.interpolateProperty(this, property, value, {\n seconds: seconds,\n easingFn: easingFn,\n onProgress: function onProgress() {\n _this2._updateBlendWeights();\n },\n onFinish: function onFinish() {\n _this2._updateBlendWeights();\n }\n });\n return this._promises[property];\n }\n /**\r\n * Gets the user defined weight.\r\n *\r\n * @param {string} name - Name of blend weight.\r\n *\r\n * @returns {number}\r\n */\n\n }, {\n key: "getBlendWeight",\n value: function getBlendWeight(name) {\n var property = name.toUpperCase();\n\n if (property !== \'X\' && property !== \'Y\') {\n throw new Error("Cannot get blend weight for ".concat(name, " on ").concat(this.name, ". Blend2dState only accepts \'X\' or \'Y\' for getBlendWeight"));\n }\n\n return property === \'X\' ? this._blendValueX : this._blendValueY;\n }\n /**\r\n * Gets and sets the x blend weight.\r\n */\n\n }, {\n key: "blendValueX",\n get: function get() {\n return this._blendValueX;\n },\n set: function set(value) {\n this._blendValueX = value;\n }\n /**\r\n * Gets and sets the y blend weight.\r\n */\n\n }, {\n key: "blendValueY",\n get: function get() {\n return this._blendValueY;\n },\n set: function set(value) {\n this._blendValueY = value;\n }\n /**\r\n * Gets whether or not the x blend value is currently being animated.\r\n */\n\n }, {\n key: "blendValueXPending",\n get: function get() {\n return this._promises.blendValueX && this._promises.blendValueX.pending;\n }\n /**\r\n * Gets whether or not the y blend value is currently being animated.\r\n */\n\n }, {\n key: "blendValueYPending",\n get: function get() {\n return this._promises.blendValueY && this._promises.blendValueY.pending;\n }\n }, {\n key: "updateInternalWeight",\n value: function updateInternalWeight(factor) {\n var _this3 = this;\n\n Blend2dState_get(Blend2dState_getPrototypeOf(Blend2dState.prototype), "updateInternalWeight", this).call(this, factor);\n\n if (this._phaseLeadState) {\n Blend2dState_toConsumableArray(this._states.values()).forEach(function (state, index) {\n if (state.weight !== 0 && _this3._thresholds[index].phaseMatch) {\n state.normalizedTime = _this3._phaseLeadState.normalizedTime;\n }\n });\n }\n }\n /**\r\n * Updates the blend weights based on their corresponding threshold values\r\n * and the current [x,y] blendValue. Additionally, sets a lead phase state if the\r\n * conditions for phase-matching have been satisfied.\r\n *\r\n * @private\r\n */\n\n }, {\n key: "_updateBlendWeights",\n value: function _updateBlendWeights() {\n var _this4 = this;\n\n if (!this._vertices || this._vertices.length === 0) return;\n\n if (this._vertices.length === 1) {\n Blend2dState_toConsumableArray(this._states.values())[0].weight = 1;\n return;\n } // Initially set all sub-state weights to zero\n\n\n this._states.forEach(function (state) {\n state.setWeight(0);\n });\n\n this._phaseLeadState = null;\n var p = [this._blendValueX, this._blendValueY];\n\n if (this._vertices.length === 2) {\n this._setInfluenceClosestPointOnLine(p);\n } else {\n var triangle = this._triangles.find(function (triangle) {\n return core_MathUtils.isPointInTriangle(_this4._vertices[triangle[0]], _this4._vertices[triangle[1]], _this4._vertices[triangle[2]], p);\n });\n\n if (triangle) {\n this._setInfluenceTriangle(triangle, p);\n } else {\n this._setInfluenceClosestPointInTriangles(p);\n }\n }\n }\n /**\r\n * Sets blend weights for states corresponding to a\r\n * triangle of thresholds and a given [x,y] blendValues.\r\n *\r\n * @param {Array.>} triangle - Set of triangluated indices\r\n * that correspond to blend thresholds.\r\n * @param {Array.} p - Given [x,y] blendValue.\r\n *\r\n * @private\r\n */\n\n }, {\n key: "_setInfluenceTriangle",\n value: function _setInfluenceTriangle(triangle, p) {\n var areaA = core_MathUtils.triangleArea(this._vertices[triangle[1]], this._vertices[triangle[2]], p);\n var areaB = core_MathUtils.triangleArea(this._vertices[triangle[0]], this._vertices[triangle[2]], p);\n var areaC = core_MathUtils.triangleArea(this._vertices[triangle[0]], this._vertices[triangle[1]], p);\n var totalArea = areaA + areaB + areaC;\n var weightA = areaA / totalArea;\n var weightB = areaB / totalArea;\n var weightC = areaC / totalArea;\n var thresholdA = this._thresholds[triangle[0]];\n var thresholdB = this._thresholds[triangle[1]];\n var thresholdC = this._thresholds[triangle[2]];\n\n var stateA = this._states.get(thresholdA.name);\n\n var stateB = this._states.get(thresholdB.name);\n\n var stateC = this._states.get(thresholdC.name);\n\n stateA.setWeight(weightA);\n stateB.setWeight(weightB);\n stateC.setWeight(weightC);\n\n this._setPhaseLeadState([stateA, stateB, stateC], [thresholdA.phaseMatch, thresholdB.phaseMatch, thresholdC.phaseMatch]);\n }\n /**\r\n * Determines the closest point within a triangle of\r\n * thresholds based on the current [x,y] blendValues and\r\n * then sets blend weights for the corresponding states.\r\n *\r\n * @param {Array.} p - Given [x,y] blendValue.\r\n *\r\n * @private\r\n */\n\n }, {\n key: "_setInfluenceClosestPointInTriangles",\n value: function _setInfluenceClosestPointInTriangles(p) {\n var _this5 = this;\n\n var globalClosestPoint = null;\n var globalMinDist = Number.POSITIVE_INFINITY;\n var closestTriangle = -1;\n\n this._triangles.forEach(function (triangle, index) {\n var pointA = core_MathUtils.closestPointOnLine(_this5._vertices[triangle[0]], _this5._vertices[triangle[1]], p);\n var pointB = core_MathUtils.closestPointOnLine(_this5._vertices[triangle[1]], _this5._vertices[triangle[2]], p);\n var pointC = core_MathUtils.closestPointOnLine(_this5._vertices[triangle[2]], _this5._vertices[triangle[0]], p);\n var distA = core_MathUtils.distanceSquared(pointA, p);\n var distB = core_MathUtils.distanceSquared(pointB, p);\n var distC = core_MathUtils.distanceSquared(pointC, p);\n var localClosestPoint = pointC;\n var localMinDist = distC;\n\n if (distA < localMinDist) {\n localClosestPoint = pointA;\n localMinDist = distA;\n }\n\n if (distB < localMinDist) {\n localClosestPoint = pointB;\n localMinDist = distB;\n }\n\n if (localMinDist < globalMinDist) {\n globalMinDist = localMinDist;\n globalClosestPoint = Blend2dState_toConsumableArray(localClosestPoint);\n closestTriangle = index;\n }\n });\n\n this._setInfluenceTriangle(this._triangles[closestTriangle], globalClosestPoint);\n }\n /**\r\n * Determines the closest point on the line formed between the\r\n * two blend thresholds based on the current [x,y] blendValues and\r\n * then sets blend weights for the corresponding states.\r\n *\r\n * @param {Array.} p - Given [x,y] blendValue.\r\n *\r\n * @private\r\n */\n\n }, {\n key: "_setInfluenceClosestPointOnLine",\n value: function _setInfluenceClosestPointOnLine(p) {\n var closestPoint = core_MathUtils.closestPointOnLine(this._vertices[[0]], this._vertices[[1]], p);\n var distA = core_MathUtils.distanceSquared(this._vertices[0], closestPoint);\n var distB = core_MathUtils.distanceSquared(this._vertices[1], closestPoint);\n var weightA = distB / (distA + distB);\n var weightB = distA / (distA + distB);\n var thresholdA = this._thresholds[0];\n var thresholdB = this._thresholds[1];\n\n var stateA = this._states.get(thresholdA.name);\n\n var stateB = this._states.get(thresholdB.name);\n\n stateA.setWeight(weightA);\n stateB.setWeight(weightB);\n\n this._setPhaseLeadState([stateA, stateB], [thresholdA.phaseMatch, thresholdB.phaseMatch]);\n }\n /**\r\n * Sets a lead phase state if the conditions\r\n * for phase-matching are satisfied.\r\n *\r\n * @param {Array.} states - States to\r\n * check phase-matching criteria.\r\n * @param {Array.} phaseMatched - List of phase-match booleans.\r\n *\r\n * @private\r\n */\n\n }, {\n key: "_setPhaseLeadState",\n value: function _setPhaseLeadState(states, phaseMatched) {\n var _this6 = this;\n\n var max = 0;\n states.forEach(function (state, index) {\n if (phaseMatched[index] && state.weight > max) {\n _this6._phaseLeadState = state;\n max = state.weight;\n }\n });\n }\n }]);\n\n return Blend2dState;\n}(state_AbstractBlendState);\n\n/* harmony default export */ var state_Blend2dState = (Blend2dState_Blend2dState);\n// CONCATENATED MODULE: ./src/core/animpack/AnimationLayer.js\nfunction AnimationLayer_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { AnimationLayer_typeof = function _typeof(obj) { return typeof obj; }; } else { AnimationLayer_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return AnimationLayer_typeof(obj); }\n\nfunction AnimationLayer_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction AnimationLayer_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction AnimationLayer_createClass(Constructor, protoProps, staticProps) { if (protoProps) AnimationLayer_defineProperties(Constructor.prototype, protoProps); if (staticProps) AnimationLayer_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction AnimationLayer_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { AnimationLayer_get = Reflect.get; } else { AnimationLayer_get = function _get(target, property, receiver) { var base = AnimationLayer_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return AnimationLayer_get(target, property, receiver || target); }\n\nfunction AnimationLayer_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = AnimationLayer_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction AnimationLayer_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) AnimationLayer_setPrototypeOf(subClass, superClass); }\n\nfunction AnimationLayer_setPrototypeOf(o, p) { AnimationLayer_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return AnimationLayer_setPrototypeOf(o, p); }\n\nfunction AnimationLayer_createSuper(Derived) { var hasNativeReflectConstruct = AnimationLayer_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = AnimationLayer_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = AnimationLayer_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return AnimationLayer_possibleConstructorReturn(this, result); }; }\n\nfunction AnimationLayer_possibleConstructorReturn(self, call) { if (call && (AnimationLayer_typeof(call) === "object" || typeof call === "function")) { return call; } return AnimationLayer_assertThisInitialized(self); }\n\nfunction AnimationLayer_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction AnimationLayer_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction AnimationLayer_getPrototypeOf(o) { AnimationLayer_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return AnimationLayer_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n\n\n\n/**\r\n * Enum for types of {@link AnimationLayer} blending.\r\n *\r\n * @readonly\r\n * @enum {string}\r\n */\n\nvar LayerBlendModes = {\n Override: \'Override\',\n Additive: \'Additive\'\n};\n/**\r\n * The default blending mode {@link AnimationLayer}.\r\n *\r\n * @readonly\r\n * @type {string}\r\n */\n\nvar DefaultLayerBlendMode = \'Override\';\n/**\r\n * Checks if a given blendMode is present in the values of {@link LayerBlendModes}.\r\n * If it is, return the original value, otherwise return {@link DefaultLayerBlendMode}.\r\n *\r\n * @param {string} blendMode - The name of the type of blending.\r\n *\r\n * @returns {(string|DefaultLayerBlendMode)}\r\n */\n\nfunction validateBlendMode(blendMode) {\n if (Array.from(Object.values(LayerBlendModes)).includes(blendMode)) {\n return blendMode;\n } else {\n return DefaultLayerBlendMode;\n }\n}\n/**\r\n * Class for managing a set of animations where only one state can be active at\r\n * any given time.\r\n *\r\n * @implements AnimationPlayerInterface\r\n * @implements StateContainerInterface\r\n */\n\nvar AnimationLayer_AnimationLayer = /*#__PURE__*/function (_AnimationPlayerInter) {\n AnimationLayer_inherits(AnimationLayer, _AnimationPlayerInter);\n\n var _super = AnimationLayer_createSuper(AnimationLayer);\n\n /**\r\n * @constructor\r\n *\r\n * @param {Object=} options - Options for the animation layer.\r\n * @param {string} options.name - Name of the layer. Names must be unique to the\r\n * animation feature that contains the layer.\r\n * @param {LayerBlendModes} [options.blendMode=DefaultLayerBlendMode] -\r\n * Type of blending to use for all states controlled by the layer.\r\n * @param {number} [options.weight=1] - The amount of influence the layer\'s current\r\n * animation has over the result for the host.\r\n * @param {number} [options.transitionTime=0] - The default amount of time to use when\r\n * playing and resuming animations.\r\n * @param {Function=} options.easingFn - The default easing function to use when\r\n * transitioning between animations and setting layer weight.\r\n */\n function AnimationLayer() {\n var _this;\n\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n AnimationLayer_classCallCheck(this, AnimationLayer);\n\n _this = _super.call(this, options);\n _this.name = options.name === undefined ? \'AnimationLayer\' : options.name;\n _this._blendMode = Array.from(Object.values(LayerBlendModes)).includes(options.blendMode) ? options.blendMode : DefaultLayerBlendMode;\n _this._promises = {\n weight: core_Deferred.resolve()\n };\n _this._weightPaused = false;\n _this.weight = typeof options.weight === \'number\' ? options.weight : 1;\n _this._internalWeight = _this._weight;\n return _this;\n }\n /**\r\n * Gets the type of blending used for states controlled by the layer.\r\n *\r\n * @readonly\r\n * @type {string}\r\n */\n\n\n AnimationLayer_createClass(AnimationLayer, [{\n key: "blendMode",\n get: function get() {\n return this._blendMode;\n }\n /**\r\n * Gets and sets the amount of influence the layer\'s current animation has over\r\n * the result for the host.\r\n *\r\n * @type {number}\r\n */\n\n }, {\n key: "weight",\n get: function get() {\n return this._weight;\n }\n /**\r\n * Gets whether or not the layer\'s weight value is currently being animated.\r\n *\r\n * @readonly\r\n * @type {boolean}\r\n */\n ,\n set: function set(weight) {\n this._weight = core_MathUtils.clamp(weight, 0, 1);\n }\n }, {\n key: "weightPending",\n get: function get() {\n return this._promises.weight && this._promises.weight.pending;\n }\n /**\r\n * Pause the current animation state and any interpolation happening on the layer\'s\r\n * weight property.\r\n *\r\n * @returns {boolean}\r\n */\n\n }, {\n key: "pause",\n value: function pause() {\n this._paused = true;\n this._weightPaused = true;\n return this.pauseAnimation() || this.weightPending;\n }\n /**\r\n * Resume the current animation state and any interpolation happening on the layer\'s\r\n * weight property.\r\n *\r\n * @returns {boolean}\r\n */\n\n }, {\n key: "resume",\n value: function resume() {\n this._paused = false;\n this._weightPaused = false;\n var isWeightActive = this.weightPending;\n\n if (this._currentState) {\n return this.resumeAnimation() || isWeightActive;\n } else {\n return isWeightActive;\n }\n }\n /**\r\n * Updates the user defined weight over time.\r\n *\r\n * @param {number} weight - The target weight value.\r\n * @param {number} [seconds=0] - The amount of time it will take to reach the\r\n * target weight.\r\n * @param {Function=} easingFn - The easing function to use for interpolation.\r\n *\r\n * @returns {Deferred}\r\n */\n\n }, {\n key: "setWeight",\n value: function setWeight(weight) {\n var seconds = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var easingFn = arguments.length > 2 ? arguments[2] : undefined;\n\n if (this.weightPending) {\n this._promises.weight.cancel();\n }\n\n weight = core_MathUtils.clamp(weight);\n this._promises.weight = animpack_AnimationUtils.interpolateProperty(this, \'weight\', weight, {\n seconds: seconds,\n easingFn: easingFn !== undefined ? easingFn : this._easingFn\n });\n return this._promises.weight;\n }\n /**\r\n * Pause any interpolation happening on the layer\'s weight property.\r\n *\r\n * @returns {boolean}\r\n */\n\n }, {\n key: "pauseWeight",\n value: function pauseWeight() {\n this._weightPaused = true;\n return this.weightPending;\n }\n /**\r\n * Resume any interpolation happening on the layer\'s weight property.\r\n *\r\n * @returns {boolean}\r\n */\n\n }, {\n key: "resumeWeight",\n value: function resumeWeight() {\n this._weightPaused = false;\n return this.weightPending;\n }\n /**\r\n * Multiplies the user weight by a factor to determine the internal weight.\r\n *\r\n * @param {number} factor - 0-1 multiplier to apply to the user weight.\r\n */\n\n }, {\n key: "updateInternalWeight",\n value: function updateInternalWeight(factor) {\n this._internalWeight = this._weight * factor;\n\n if (this._currentState) {\n this._currentState.updateInternalWeight(this._internalWeight);\n }\n }\n /**\r\n * Returns the names of blend states in an animation.\r\n *\r\n * @param {string} animationName - Name of the animation.\r\n *\r\n * @returns {Array.} - Names of blend states.\r\n */\n\n }, {\n key: "getAnimationBlendNames",\n value: function getAnimationBlendNames(animationName) {\n var state = this.getState(animationName);\n\n if (state === undefined) {\n throw new Error("Cannot get blend names of animation ".concat(animationName, " on layer ").concat(this.name, ". No animation exists with this name."));\n }\n\n if (state instanceof state_AbstractBlendState) {\n return state.getStateNames();\n }\n\n throw new Error("Cannot get blend names of animation ".concat(animationName, " on layer ").concat(this.name, ". Animation is not an instance of AbstractBlendState."));\n }\n /**\r\n * Update the weight for a blend state of an animation.\r\n *\r\n * @param {string} animationName - Name of the animation containing the blend state\r\n * to update.\r\n * @param {string} blendName - Name of the blend state to update.\r\n * @param {number} weight - Weight value to set on the animation. This number shoudld be\r\n * in the 0-1 range.\r\n * @param {number=} seconds - Number of seconds it should take to reach the new weight.\r\n * Default is zero and will set immediately.\r\n * @param {Function=} easingFn - Easing function to use while interpolating the new\r\n * weight. Default is Easing.Linear.InOut.\r\n *\r\n * @returns {Deferred} - Promise that will resolve once the animation\'s weight reaches\r\n * the target value.\r\n */\n\n }, {\n key: "setAnimationBlendWeight",\n value: function setAnimationBlendWeight(animationName, blendName, weight) {\n var seconds = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;\n var easingFn = arguments.length > 4 ? arguments[4] : undefined;\n var state = this.getState(animationName);\n\n if (state === undefined) {\n throw new Error("Cannot set blend weight of animation ".concat(animationName, " on layer ").concat(this.name, ". No animation exists with this name."));\n }\n\n if (state instanceof state_AbstractBlendState) {\n return state.setBlendWeight(blendName, weight, seconds, easingFn);\n }\n\n throw new Error("Cannot set blend weight of animation ".concat(animationName, " on layer ").concat(this.name, ". Animation is not an instance of AbstractBlendState."));\n }\n /**\r\n * Returns the weight for a blend state of an animation.\r\n *\r\n * @param {string} animationName - Name of the animation containing the blend state\r\n * to update.\r\n * @param {string} blendName - Name of the blend state to retrieve the weight of.\r\n *\r\n * @returns {number} - Weight of the blend state.\r\n */\n\n }, {\n key: "getAnimationBlendWeight",\n value: function getAnimationBlendWeight(animationName, blendName) {\n var state = this.getState(animationName);\n\n if (state === undefined) {\n throw new Error("Cannot get blend weight of animation ".concat(animationName, " on layer ").concat(this.name, ". No animation exists with this name."));\n }\n\n if (state instanceof state_AbstractBlendState) {\n return state.getBlendWeight(blendName);\n }\n\n throw new Error("Cannot get blend weight of animation ".concat(animationName, " on layer ").concat(this.name, ". Animation is not an instance of AbstractBlendState."));\n }\n /**\r\n * Update any weight interpolators and the current animation.\r\n *\r\n * @param {number} deltaTime - Time in milliseconds since the last update.\r\n */\n\n }, {\n key: "update",\n value: function update(deltaTime) {\n AnimationLayer_get(AnimationLayer_getPrototypeOf(AnimationLayer.prototype), "update", this).call(this, deltaTime);\n\n if (!this._paused && !this._weightPaused) {\n this._promises.weight.execute(deltaTime);\n }\n }\n /**\r\n * Cancel any pending promises and discard states controlled by the layer.\r\n */\n\n }, {\n key: "discard",\n value: function discard() {\n AnimationLayer_get(AnimationLayer_getPrototypeOf(AnimationLayer.prototype), "discard", this).call(this);\n\n this.discardStates();\n\n this._promises.weight.cancel();\n\n delete this._promises;\n }\n }]);\n\n return AnimationLayer;\n}(animpack_AnimationPlayerInterface.Mixin(state_StateContainerInterface.Mixin()));\n\n/* harmony default export */ var animpack_AnimationLayer = (AnimationLayer_AnimationLayer);\n// CONCATENATED MODULE: ./src/core/animpack/state/SingleState.js\nfunction SingleState_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { SingleState_typeof = function _typeof(obj) { return typeof obj; }; } else { SingleState_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return SingleState_typeof(obj); }\n\nfunction SingleState_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction SingleState_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction SingleState_createClass(Constructor, protoProps, staticProps) { if (protoProps) SingleState_defineProperties(Constructor.prototype, protoProps); if (staticProps) SingleState_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction SingleState_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) SingleState_setPrototypeOf(subClass, superClass); }\n\nfunction SingleState_setPrototypeOf(o, p) { SingleState_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return SingleState_setPrototypeOf(o, p); }\n\nfunction SingleState_createSuper(Derived) { var hasNativeReflectConstruct = SingleState_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = SingleState_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = SingleState_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return SingleState_possibleConstructorReturn(this, result); }; }\n\nfunction SingleState_possibleConstructorReturn(self, call) { if (call && (SingleState_typeof(call) === "object" || typeof call === "function")) { return call; } return SingleState_assertThisInitialized(self); }\n\nfunction SingleState_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction SingleState_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction SingleState_getPrototypeOf(o) { SingleState_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return SingleState_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n\n/**\r\n * Class for playing a single animation clip.\r\n *\r\n * @extends AbstractState\r\n * @alias core/SingleState\r\n */\n\nvar SingleState_SingleState = /*#__PURE__*/function (_AbstractState) {\n SingleState_inherits(SingleState, _AbstractState);\n\n var _super = SingleState_createSuper(SingleState);\n\n /**\r\n * @constructor\r\n *\r\n * @param {Object=} options - Options for the animation state.\r\n * @param {string=} options.name - Name for the animation state. Names must be\r\n * unique for the layer the state is applied to.\r\n * @param {weight} [options.weight=0] - The 0-1 amount of influence the state will have.\r\n * @param {timeScale} [options.timeScale=1] - Factor to scale the playback speed of the\r\n * animation.\r\n * @param {number} [options.loopCount=Infinity] - Number of times the animation should\r\n * repeat before finishing.\r\n * @param {string} [options.blendMode=DefaultLayerBlendMode] - Type of\r\n * blending the animation should use.\r\n */\n function SingleState() {\n var _this;\n\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n SingleState_classCallCheck(this, SingleState);\n\n _this = _super.call(this, options);\n _this._timeScale = options.timeScale !== undefined ? options.timeScale : 1;\n _this._promises.timeScale = core_Deferred.resolve();\n _this._loopCount = options.loopCount !== undefined ? options.loopCount : Infinity;\n _this._blendMode = validateBlendMode(options.blendMode);\n return _this;\n }\n /**\r\n * Gets and sets the normalized playing time of the current animation\r\n *\r\n * @type {number}\r\n */\n\n\n SingleState_createClass(SingleState, [{\n key: "normalizedTime",\n get: function get() {\n return 0;\n },\n set: function set(time) {}\n /**\r\n * Gets and sets the a factor to scale animation playback speed with.\r\n *\r\n * @type {number}\r\n */\n\n }, {\n key: "timeScale",\n get: function get() {\n return this._timeScale;\n },\n set: function set(timeScale) {\n this._timeScale = timeScale;\n }\n /**\r\n * Gets whether or not the timeScale is currently being animated.\r\n *\r\n * @readonly\r\n * @type {boolean}\r\n */\n\n }, {\n key: "timeScalePending",\n get: function get() {\n return this._promises.timeScale.pending;\n }\n /**\r\n * Updates the timeScale value over time.\r\n *\r\n * @param {number} weight - The target timeScale value.\r\n * @param {number} [seconds=0] - The amount of time it will take to reach the\r\n * target timeScale.\r\n * @param {Function=} easingFn - The easing function to use for interpolation.\r\n *\r\n * @returns {Deferred}\r\n */\n\n }, {\n key: "setTimeScale",\n value: function setTimeScale(timeScale) {\n var seconds = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var easingFn = arguments.length > 2 ? arguments[2] : undefined;\n\n this._promises.timeScale.cancel();\n\n this._promises.timeScale = animpack_AnimationUtils.interpolateProperty(this, \'timeScale\', timeScale, {\n seconds: seconds,\n easingFn: easingFn\n });\n return this._promises.timeScale;\n }\n /**\r\n * Gets and sets the number of times the animation will repeat before finishing.\r\n *\r\n * @type {number}\r\n */\n\n }, {\n key: "loopCount",\n get: function get() {\n return this._loopCount;\n },\n set: function set(loopCount) {\n this._loopCount = loopCount;\n }\n /**\r\n * Gets the type of blending used for the animation.\r\n *\r\n * @readonly\r\n * @type {string}\r\n */\n\n }, {\n key: "blendMode",\n get: function get() {\n return this._blendMode;\n }\n }]);\n\n return SingleState;\n}(state_AbstractState);\n\n/* harmony default export */ var state_SingleState = (SingleState_SingleState);\n// CONCATENATED MODULE: ./src/core/animpack/state/RandomAnimationState.js\nfunction RandomAnimationState_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { RandomAnimationState_typeof = function _typeof(obj) { return typeof obj; }; } else { RandomAnimationState_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return RandomAnimationState_typeof(obj); }\n\nfunction RandomAnimationState_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction RandomAnimationState_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction RandomAnimationState_createClass(Constructor, protoProps, staticProps) { if (protoProps) RandomAnimationState_defineProperties(Constructor.prototype, protoProps); if (staticProps) RandomAnimationState_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction RandomAnimationState_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { RandomAnimationState_get = Reflect.get; } else { RandomAnimationState_get = function _get(target, property, receiver) { var base = RandomAnimationState_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return RandomAnimationState_get(target, property, receiver || target); }\n\nfunction RandomAnimationState_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = RandomAnimationState_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction RandomAnimationState_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) RandomAnimationState_setPrototypeOf(subClass, superClass); }\n\nfunction RandomAnimationState_setPrototypeOf(o, p) { RandomAnimationState_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return RandomAnimationState_setPrototypeOf(o, p); }\n\nfunction RandomAnimationState_createSuper(Derived) { var hasNativeReflectConstruct = RandomAnimationState_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = RandomAnimationState_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = RandomAnimationState_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return RandomAnimationState_possibleConstructorReturn(this, result); }; }\n\nfunction RandomAnimationState_possibleConstructorReturn(self, call) { if (call && (RandomAnimationState_typeof(call) === "object" || typeof call === "function")) { return call; } return RandomAnimationState_assertThisInitialized(self); }\n\nfunction RandomAnimationState_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction RandomAnimationState_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction RandomAnimationState_getPrototypeOf(o) { RandomAnimationState_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return RandomAnimationState_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n\n/**\r\n * Class for playing random animations at random intervals within this state.\r\n *\r\n * @extends AbstractState\r\n * @implements AnimationPlayerInterface\r\n * @implements StateContainerInterface\r\n */\n\nvar RandomAnimationState_RandomAnimationState = /*#__PURE__*/function (_AnimationPlayerInter) {\n RandomAnimationState_inherits(RandomAnimationState, _AnimationPlayerInter);\n\n var _super = RandomAnimationState_createSuper(RandomAnimationState);\n\n /**\r\n * @constructor\r\n *\r\n * @param {Object} [options={}] - Options for the container state.\r\n * @param {number} [options.playInterval=3] - The base animation playback interval.\r\n * @param {Array.} [subStates=[]] - states to be randomly picked to play\r\n */\n function RandomAnimationState() {\n var _this;\n\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var subStates = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n\n RandomAnimationState_classCallCheck(this, RandomAnimationState);\n\n _this = _super.call(this, options);\n _this._playInterval = options.playInterval ? options.playInterval : 3;\n subStates.forEach(function (state) {\n _this.addState(state);\n });\n return _this;\n }\n /**\r\n * Gets and sets the base animation play interval\r\n *\r\n * @type {float}\r\n */\n\n\n RandomAnimationState_createClass(RandomAnimationState, [{\n key: "playInterval",\n get: function get() {\n return this._playInterval;\n },\n set: function set(playInterval) {\n this._playInterval = playInterval;\n }\n /**\r\n * Reset the internal timer for animation play interval\r\n *\r\n * @private\r\n */\n\n }, {\n key: "_resetTimer",\n value: function _resetTimer() {\n var _this2 = this;\n\n var playTimer = core_Utils.getRandomFloat(this._playInterval / 4, this._playInterval * 2);\n\n var onFinish = function onFinish() {\n _this2.playRandomAnimation(_this2._playCallbacks.onError);\n };\n\n this._promises.timer = core_Utils.wait(playTimer, {\n onFinish: onFinish\n });\n }\n }, {\n key: "updateInternalWeight",\n value: function updateInternalWeight(factor) {\n RandomAnimationState_get(RandomAnimationState_getPrototypeOf(RandomAnimationState.prototype), "updateInternalWeight", this).call(this, factor);\n\n if (this._currentState) {\n this._currentState.updateInternalWeight(this._internalWeight);\n }\n }\n /**\r\n * Pick a random animation and utilize AnimationPlayerInterface to play that animation\r\n *\r\n * @param {Function=} onError - Function to execute if the state encounters\r\n * an error during playback.\r\n */\n\n }, {\n key: "playRandomAnimation",\n value: function playRandomAnimation(onError) {\n this._resetTimer();\n\n var states = this.getStateNames();\n\n if (this._currentState) {\n states.splice(states.indexOf(this._currentState.name), 1);\n }\n\n var randomState = states[core_Utils.getRandomInt(0, states.length)];\n this.playAnimation(randomState, this._transitionTime, this._easingFn, undefined, onError, undefined);\n }\n }, {\n key: "play",\n value: function play(onFinish, onError, onCancel) {\n this.playRandomAnimation(onError);\n return RandomAnimationState_get(RandomAnimationState_getPrototypeOf(RandomAnimationState.prototype), "play", this).call(this, onFinish, onError, onCancel);\n }\n }, {\n key: "pause",\n value: function pause() {\n return RandomAnimationState_get(RandomAnimationState_getPrototypeOf(RandomAnimationState.prototype), "pause", this).call(this) && this.pauseAnimation();\n }\n }, {\n key: "resume",\n value: function resume(onFinish, onError, onCancel) {\n if (this._currentState) {\n this.resumeAnimation(this._currentState.name, this._transitionTime, this._easingFn, undefined, onError, undefined);\n }\n\n return RandomAnimationState_get(RandomAnimationState_getPrototypeOf(RandomAnimationState.prototype), "resume", this).call(this, onFinish, onError, onCancel);\n }\n }, {\n key: "cancel",\n value: function cancel() {\n return RandomAnimationState_get(RandomAnimationState_getPrototypeOf(RandomAnimationState.prototype), "cancel", this).call(this) && this.cancelAnimation();\n }\n }, {\n key: "stop",\n value: function stop() {\n return RandomAnimationState_get(RandomAnimationState_getPrototypeOf(RandomAnimationState.prototype), "stop", this).call(this) && this.stopAnimation();\n }\n }, {\n key: "discard",\n value: function discard() {\n RandomAnimationState_get(RandomAnimationState_getPrototypeOf(RandomAnimationState.prototype), "discard", this).call(this);\n\n this.discardStates();\n }\n }]);\n\n return RandomAnimationState;\n}(animpack_AnimationPlayerInterface.Mixin(state_StateContainerInterface.Mixin(state_AbstractState)));\n\n/* harmony default export */ var state_RandomAnimationState = (RandomAnimationState_RandomAnimationState);\n// CONCATENATED MODULE: ./src/core/animpack/AnimationFeature.js\nfunction AnimationFeature_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { AnimationFeature_typeof = function _typeof(obj) { return typeof obj; }; } else { AnimationFeature_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return AnimationFeature_typeof(obj); }\n\nfunction AnimationFeature_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction AnimationFeature_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { AnimationFeature_ownKeys(Object(source), true).forEach(function (key) { AnimationFeature_defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { AnimationFeature_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction AnimationFeature_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction AnimationFeature_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction AnimationFeature_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction AnimationFeature_createClass(Constructor, protoProps, staticProps) { if (protoProps) AnimationFeature_defineProperties(Constructor.prototype, protoProps); if (staticProps) AnimationFeature_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction AnimationFeature_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { AnimationFeature_get = Reflect.get; } else { AnimationFeature_get = function _get(target, property, receiver) { var base = AnimationFeature_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return AnimationFeature_get(target, property, receiver || target); }\n\nfunction AnimationFeature_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = AnimationFeature_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction AnimationFeature_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) AnimationFeature_setPrototypeOf(subClass, superClass); }\n\nfunction AnimationFeature_setPrototypeOf(o, p) { AnimationFeature_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return AnimationFeature_setPrototypeOf(o, p); }\n\nfunction AnimationFeature_createSuper(Derived) { var hasNativeReflectConstruct = AnimationFeature_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = AnimationFeature_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = AnimationFeature_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return AnimationFeature_possibleConstructorReturn(this, result); }; }\n\nfunction AnimationFeature_possibleConstructorReturn(self, call) { if (call && (AnimationFeature_typeof(call) === "object" || typeof call === "function")) { return call; } return AnimationFeature_assertThisInitialized(self); }\n\nfunction AnimationFeature_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction AnimationFeature_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction AnimationFeature_getPrototypeOf(o) { AnimationFeature_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return AnimationFeature_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n\n\n\n\n\n\n\n/**\r\n * Enum for animation state classes.\r\n *\r\n * @readonly\r\n * @enum {Class}\r\n */\n\nvar AnimationTypes = {\n single: state_SingleState,\n freeBlend: state_FreeBlendState,\n queue: state_QueueState,\n randomAnimation: state_RandomAnimationState,\n blend1d: state_Blend1dState,\n blend2d: state_Blend2dState\n};\n/**\r\n * Feature for managing animations on an object.\r\n *\r\n * @extends AbstractHostFeature\r\n * @alias core/AnimationFeature\r\n *\r\n * @property {Object} EVENTS - Built-in messages that the feature emits. When the\r\n * feature is added to a {@link core/HostObject}, event names will be prefixed by the\r\n * name of the feature class + \'.\'.\r\n * @property {string} [EVENTS.addLayer=onAddLayerEvent] - Message that is emitted after\r\n * [addLayer]{@link core/AnimationFeature#addLayer} has been successfully executed.\r\n * An object representing the name of the layer that was added and its index in\r\n * the layer stack with the signature {name: string, index: number} is supplied\r\n * as an argument to listener functions.\r\n * @property {string} [EVENTS.removeLayer=onRemoveLayerEvent] - Message that is\r\n * emitted after [removeLayer]{@link core/AnimationFeature#removeLayer} has been\r\n * successfully executed. An object representing the name of the layer that was\r\n * removed and its index in the layer stack with the signature {name: string, index: number}\r\n * is supplied as an argument to listener functions.\r\n * @property {string} [EVENTS.renameLayer=onRenameLayerEvent] - Message that is\r\n * emitted after [renameLayer]{@link core/AnimationFeature#renameLayer} has been\r\n * successfully executed. An object representing the original name of the layer\r\n * that was renamed and its updated name with the signature {oldName: string, newName: string}\r\n * is supplied as an argument to listener functions.\r\n * @property {string} [EVENTS.addAnimation=onAddAnimationEvent] - Message that is\r\n * emitted after [addAnimation]{@link core/AnimationFeature#addAnimation} has been\r\n * successfully executed. An object representing the name of the layer that the\r\n * animation was added to and the name of the animation that was added with the\r\n * signature {layerName: string, animationName: string} is supplied as an argument\r\n * to listener functions.\r\n * @property {string} [EVENTS.removeAnimation=onRemovedAnimationEvent] - Message\r\n * that is emitted after [removeAnimation]{@link core/AnimationFeature#removeAnimation}\r\n * has been successfully executed. An object representing the name of the layer\r\n * that the animation was removed from and the name of the animation that was removed\r\n * with the signature {layerName: string, animationName: string} is supplied as\r\n * an argument to listener functions.\r\n * @property {string} [EVENTS.renameAnimation=onRenameAnimationEvent] - Message\r\n * that is emitted after [renameAnimation]{@link core/AnimationFeature#renameAnimation}\r\n * has been successfully executed. An object representing the name of the layer\r\n * that contains the animation that was renamed, the original name of the animation\r\n * that was renamed and its updated name with the signature {layerName: string, oldName: string, newName: string}\r\n * is supplied as an argument to listener functions.\r\n * @property {string} [EVENTS.play=onPlayEvent] - Message that is emitted after\r\n * each call to [play]{@link core/AnimationFeature#playAnimation}. An object representing\r\n * the name of the layer contains the animation that was played and the name of\r\n * the animation that was played with the signature {layerName: string, animationName: string}\r\n * is supplied as an argument to listener functions.\r\n * @property {string} [EVENTS.pause=onPauseEvent] - Message that is emitted after\r\n * each call to [pause]{@link core/AnimationFeature#pauseAnimation}. An object representing\r\n * the name of the layer contains the animation that was paused and the name of\r\n * the animation that was paused with the signature {layerName: string, animationName: string}\r\n * is supplied as an argument to listener functions.\r\n * @property {string} [EVENTS.resume=onResumeEvent] - Message that is emitted after\r\n * each call to [resume]{@link core/AnimationFeature#resumeAnimation}. An object representing\r\n * the name of the layer contains the animation that was resumed and the name of\r\n * the animation that was resumed with the signature {layerName: string, animationName: string}\r\n * is supplied as an argument to listener functions.\r\n * @property {string} [EVENTS.interrupt=onInterruptEvent] - Message that is emitted\r\n * if there is a current speech in progress and [play]{@link core/AnimationFeature#playAnimation}\r\n * or [resume]{@link core/AnimationFeature#resumeAnimation} are executed for a new speech.\r\n * An object representing the name of the layer contains the animation that was\r\n * interrupted and the name of the animation that was interrupted with the signature\r\n * {layerName: string, animationName: string} is supplied as an argument to listener\r\n * functions.\r\n * @property {string} [EVENTS.stop=onStopEvent] - Message that is emitted after\r\n * each call to [stop]{@link core/AnimationFeature#stopAnimation} and when a speech reaches\r\n * the end of playback. An object representing\r\n * the name of the layer contains the animation that was stopped and the name of\r\n * the animation that was stopped with the signature {layerName: string, animationName: string}\r\n * is supplied as an argument to listener functions.\r\n */\n\nvar AnimationFeature_AnimationFeature = /*#__PURE__*/function (_AbstractHostFeature) {\n AnimationFeature_inherits(AnimationFeature, _AbstractHostFeature);\n\n var _super = AnimationFeature_createSuper(AnimationFeature);\n\n /**\r\n * @constructor\r\n *\r\n * @param {core/HostObject} host - Host object that owns the feature.\r\n */\n function AnimationFeature(host) {\n var _this;\n\n AnimationFeature_classCallCheck(this, AnimationFeature);\n\n _this = _super.call(this, host);\n _this._layers = [];\n _this._layerMap = {};\n _this._paused = false;\n return _this;\n }\n /**\r\n * Make sure a supplied layer index is within the range of layers.\r\n *\r\n * @private\r\n *\r\n * @param {number} index\r\n * @param {boolean} [existing=true] - Whether the index represents and existing\r\n * layer or a new layer to be added.\r\n *\r\n * @returns {number=}\r\n */\n\n\n AnimationFeature_createClass(AnimationFeature, [{\n key: "_validateIndex",\n value: function _validateIndex(index) {\n var existing = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\n // Index is invalid if there are no layers and we\'re checking for an existing layer index\n if (this._layers.length === 0 && existing) {\n return undefined;\n }\n\n var lastIndex = existing ? this._layers.length - 1 : this._layers.length; // Count from the end of the array for negative indices\n\n if (index < 0) {\n index = lastIndex + index + 1;\n }\n\n if (index < 0 || index > lastIndex) {\n return undefined;\n } else {\n return index;\n }\n }\n /**\r\n * Re-evaluate internal weight values of layers starting from the top of the\r\n * stack. Override layers\' weights affect the values of all layers lower in the\r\n * stack.\r\n *\r\n * @private\r\n */\n\n }, {\n key: "_updateInternalWeights",\n value: function _updateInternalWeights() {\n var numLayers = this._layers.length;\n var weightMultiplier = 1; // Update internal weight values on layers in reverse order\n\n for (var i = numLayers - 1; i >= 0; i--) {\n var layer = this._layers[i];\n layer.updateInternalWeight(weightMultiplier); // If the layer is override, update the multiplier with the remainder of the full weight\n\n if (layer.blendMode === LayerBlendModes.Override && layer.currentState) {\n weightMultiplier *= 1 - layer.currentState.internalWeight;\n }\n }\n }\n /**\r\n * Return a new instance of a SingleState.\r\n *\r\n * @private\r\n *\r\n * @param {Object} options - Options to pass to the SingleState constructor.\r\n * @param {string=} options.name - Name for the animation state. Names must be\r\n * unique for the layer the state is applied to.\r\n * @param {weight} [options.weight=0] - The 0-1 amount of influence the state will have.\r\n * @param {timeScale} [options.timeScale=1] - Factor to scale the playback speed of the\r\n * animation.\r\n * @param {number} [options.loopCount=Infinity] - Number of times the animation should\r\n * repeat before finishing.\r\n * @param {string} [options.blendMode=LayerBlendModes[DefaultLayerBlendMode]] - Type of\r\n * blending the animation should use.\r\n *\r\n * @returns {core/SingleState}\r\n */\n\n }, {\n key: "_createSingleState",\n value: function _createSingleState(options) {\n return new state_SingleState(options);\n }\n /**\r\n * Return a new instance of a FreeBlendState.\r\n *\r\n * @private\r\n *\r\n * @param {Object} options - Options to pass to the FreeBlendState constructor.\r\n * @param {string=} options.name - Name for the animation state. Names must be\r\n * unique for the layer the state is applied to.\r\n * @param {weight} [options.weight=0] - The 0-1 amount of influence the state will have.\r\n * @param {timeScale} [options.timeScale=1] - Factor to scale the playback speed of the\r\n * animation.\r\n * @param {number} [options.loopCount=Infinity] - Number of times the animation should\r\n * repeat before finishing.\r\n * @param {string} [options.blendMode=LayerBlendModes[DefaultLayerBlendMode]] - Type of\r\n * blending the animation should use.\r\n * @param {Array.} [options.blendStateOptions] - Array of options used to create the\r\n * blend states for this container.\r\n *\r\n * @returns {FreeBlendState}\r\n */\n\n }, {\n key: "_createFreeBlendState",\n value: function _createFreeBlendState(options) {\n var _this2 = this;\n\n var _options$blendStateOp = options.blendStateOptions,\n blendStateOptions = _options$blendStateOp === void 0 ? [] : _options$blendStateOp;\n var blendStates = [];\n blendStateOptions.forEach(function (blendOptions) {\n blendStates.push(_this2._createSingleState(AnimationFeature_objectSpread(AnimationFeature_objectSpread({}, blendOptions), {}, {\n blendMode: options.blendMode\n })));\n });\n return new state_FreeBlendState(options, blendStates);\n }\n /**\r\n * Return a new instance of a QueueState.\r\n *\r\n * @private\r\n *\r\n * @param {Object} options - Options to pass to the QueueState constructor.\r\n * @param {string=} options.name - Name for the animation state. Names must be\r\n * unique for the layer the state is applied to.\r\n * @param {number} [options.weight=0] - The 0-1 amount of influence the state will have.\r\n * @param {number=} options.transitionTime - The amount of time it takes to transition\r\n * between queued states.\r\n * @param {string} [options.blendMode=LayerBlendModes[DefaultLayerBlendMode]] - Type of\r\n * blending the animation should use.\r\n * @param {Array.} [options.queueOptions] - Array of options used to create the\r\n * queue states for this container.\r\n *\r\n * @returns {QueueState}\r\n */\n\n }, {\n key: "_createQueueState",\n value: function _createQueueState(options) {\n var _this3 = this;\n\n var _options$queueOptions = options.queueOptions,\n queueOptions = _options$queueOptions === void 0 ? [] : _options$queueOptions;\n var queueStates = queueOptions.map(function (queueOption) {\n return _this3._createSingleState(AnimationFeature_objectSpread(AnimationFeature_objectSpread({\n transitionTime: options.transitionTime\n }, queueOption), {}, {\n blendMode: options.blendMode\n }));\n });\n return new state_QueueState(options, queueStates);\n }\n /**\r\n * Return a new instance of a Blend1dState.\r\n *\r\n * @private\r\n *\r\n * @param {Object} options - Options to pass to the Blend1dState constructor.\r\n * @param {string=} options.name - Name for the animation state. Names must be\r\n * unique for the layer the state is applied to.\r\n * @param {weight} [options.weight=0] - The 0-1 amount of influence the state will have.\r\n * @param {timeScale} [options.timeScale=1] - Factor to scale the playback speed of the\r\n * animation.\r\n * @param {number} [options.loopCount=Infinity] - Number of times the animation should\r\n * repeat before finishing.\r\n * @param {string} [options.blendMode=LayerBlendModes[DefaultLayerBlendMode]] - Type of\r\n * blending the animation should use.\r\n * @param {Array.} [options.blendStateOptions] - Array of options used to create the\r\n * blend states for this container.\r\n * @param {Array.} [options.blendThresholds] - Array of numbers used to set the\r\n * thresholds for each blend state in this container.\r\n * @param {Array.} [options.blendMatchPhases=[]] - Optional array of booleans used to\r\n * set whether or not each blend state in this container will match phases.\r\n *\r\n * @returns {Blend1dState}\r\n */\n\n }, {\n key: "_createBlend1dState",\n value: function _createBlend1dState(options) {\n var _this4 = this;\n\n var _options$blendStateOp2 = options.blendStateOptions,\n blendStateOptions = _options$blendStateOp2 === void 0 ? [] : _options$blendStateOp2;\n var _options$blendThresho = options.blendThresholds,\n blendThresholds = _options$blendThresho === void 0 ? [] : _options$blendThresho;\n var _options$blendMatchPh = options.blendMatchPhases,\n blendMatchPhases = _options$blendMatchPh === void 0 ? [] : _options$blendMatchPh;\n var blendStates = [];\n blendStateOptions.forEach(function (blendOptions) {\n blendStates.push(_this4._createSingleState(AnimationFeature_objectSpread(AnimationFeature_objectSpread({}, blendOptions), {}, {\n blendMode: options.blendMode\n })));\n });\n return new state_Blend1dState(options, blendStates, blendThresholds, blendMatchPhases);\n }\n /**\r\n * Return a new instance of a Blend2dState.\r\n *\r\n * @private\r\n *\r\n * @param {Object} options - Options to pass to the Blend1dState constructor.\r\n * @param {string=} options.name - Name for the animation state. Names must be\r\n * unique for the layer the state is applied to.\r\n * @param {weight} [options.weight=0] - The 0-1 amount of influence the state will have.\r\n * @param {timeScale} [options.timeScale=1] - Factor to scale the playback speed of the\r\n * animation.\r\n * @param {number} [options.loopCount=Infinity] - Number of times the animation should\r\n * repeat before finishing.\r\n * @param {string} [options.blendMode=LayerBlendModes[DefaultLayerBlendMode]] - Type of\r\n * blending the animation should use.\r\n * @param {Array.} [options.blendStateOptions] - Array of options used to create the\r\n * blend states for this container.\r\n * @param {Array.>} [options.blendThresholds] - Array of Array of numbers used to set the\r\n * thresholds for each blend state in this container.\r\n * @param {Array.} [options.blendMatchPhases=[]] - Optional array of booleans used to\r\n * set whether or not each blend state in this container will match phases.\r\n *\r\n * @returns {Blend1dState}\r\n */\n\n }, {\n key: "_createBlend2dState",\n value: function _createBlend2dState(options) {\n var _this5 = this;\n\n var _options$blendStateOp3 = options.blendStateOptions,\n blendStateOptions = _options$blendStateOp3 === void 0 ? [] : _options$blendStateOp3;\n var _options$blendThresho2 = options.blendThresholds,\n blendThresholds = _options$blendThresho2 === void 0 ? [] : _options$blendThresho2;\n var _options$blendMatchPh2 = options.blendMatchPhases,\n blendMatchPhases = _options$blendMatchPh2 === void 0 ? [] : _options$blendMatchPh2;\n var blendStates = [];\n blendStateOptions.forEach(function (blendOptions) {\n blendStates.push(_this5._createSingleState(AnimationFeature_objectSpread(AnimationFeature_objectSpread({}, blendOptions), {}, {\n blendMode: options.blendMode\n })));\n });\n return new state_Blend2dState(options, blendStates, blendThresholds, blendMatchPhases);\n }\n /**\r\n * Return a new instance of a RandomAnimationState.\r\n *\r\n * @private\r\n *\r\n * @param {Object} options - Options to pass to the RandomAnimationState constructor.\r\n * @param {string=} options.name - Name for the animation state. Names must be\r\n * unique for the layer the state is applied to.\r\n * @param {number} [options.playInterval=3] - The base animation playback interval.\r\n * @param {Array.} [options.subStateOptions] - Array of options used to create the\r\n * sub states for this container.\r\n *\r\n * @returns {RandomAnimationState}\r\n */\n\n }, {\n key: "_createRandomAnimationState",\n value: function _createRandomAnimationState(options) {\n var _this6 = this;\n\n var _options$subStateOpti = options.subStateOptions,\n subStateOptions = _options$subStateOpti === void 0 ? [] : _options$subStateOpti;\n var subStates = [];\n subStateOptions.forEach(function (subStateOptions) {\n subStates.push(_this6._createSingleState(AnimationFeature_objectSpread(AnimationFeature_objectSpread({}, subStateOptions), {}, {\n blendMode: options.blendMode\n })));\n });\n return new state_RandomAnimationState(options, subStates);\n }\n /**\r\n * Make sure the layer with the given name exists and return a unique version\r\n * of the animation name supplied for that layer.\r\n *\r\n * @private\r\n *\r\n * @param {string} layerName - Name of the layer to check against.\r\n * @param {string} animationName - Name of the animation to validate.\r\n *\r\n * @returns {string} Validated animation name.\r\n */\n\n }, {\n key: "_validateNewAnimation",\n value: function _validateNewAnimation(layerName, animationName) {\n // Make sure the layerName is valid\n var layer = this._layerMap[layerName];\n\n if (layer === undefined) {\n throw new Error("Cannot add animation to layer ".concat(layerName, " from host ").concat(this._host.id, ". No layer exists with this name."));\n } // Make sure the animationName is unique\n\n\n var name = core_Utils.getUniqueName(animationName, layer.getStateNames());\n\n if (name !== animationName) {\n console.warn("Animation name ".concat(animationName, " is not unique for layer ").concat(layer.name, ". Animation will be renamed to ").concat(name, "."));\n }\n\n return name;\n }\n /**\r\n * Gets whether or not all animations are paused.\r\n *\r\n * @readonly\r\n * @type {boolean}\r\n */\n\n }, {\n key: "paused",\n get: function get() {\n return this._paused;\n }\n /**\r\n * Gets an array of names of animation layers.\r\n *\r\n * @readonly\r\n * @type {Array.}\r\n */\n\n }, {\n key: "layers",\n get: function get() {\n return this._layers.map(function (layer) {\n return layer.name;\n });\n }\n /**\r\n * Create and store a new animation layer.\r\n *\r\n * @param {string} [name=\'NewLayer\'] - Name for the layer.\r\n * @param {Object} [options={}] - Options to pass to {@link AnimationLayer#constructor}\r\n * @param {index=} index - Index to insert the new layer at. If none is provided\r\n * it will be added to the end of the stack.\r\n *\r\n * @returns {number} Index of the new layer.\r\n */\n\n }, {\n key: "addLayer",\n value: function addLayer() {\n var name = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : \'NewLayer\';\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var index = arguments.length > 2 ? arguments[2] : undefined;\n var numLayers = this._layers.length;\n var layerIndex = index; // Make sure the given index is within the range of layers\n\n if (index === undefined || index === -1) {\n layerIndex = this._layers.length;\n } else {\n layerIndex = this._validateIndex(index, false);\n\n if (layerIndex === undefined) {\n // Insert at the beginning if the user passed in a negative index\n if (index < 0) {\n layerIndex = 0;\n } // Otherwise append to the end\n else {\n layerIndex = this._layers.length;\n }\n\n console.warn("Index ".concat(index, " is invalid for host ").concat(this._host.id, ". New layer will be added at the closest valid index: ").concat(layerIndex, "."));\n }\n } // Make sure the layer name is unique\n\n\n var layerName = core_Utils.getUniqueName(name, Object.keys(this._layerMap));\n\n if (name !== layerName) {\n console.warn("Layer name ".concat(name, " is not unique. New layer will be added with the name ").concat(layerName, "."));\n }\n\n var layer = new animpack_AnimationLayer(AnimationFeature_objectSpread(AnimationFeature_objectSpread({}, options), {}, {\n name: layerName\n }));\n this._layerMap[layerName] = layer;\n\n if (layerIndex === numLayers) {\n this._layers.push(layer);\n } else {\n this._layers.splice(layerIndex, 0, layer);\n } // Notify that a layer has been added to the feature\n\n\n var eventData = {\n name: layerName,\n index: layerIndex\n };\n this.emit(this.constructor.EVENTS.addLayer, eventData);\n return eventData;\n }\n /**\r\n * Remove an animation layer from the stack. Animations on this layer will no\r\n * longer be evaluated.\r\n *\r\n * @param {string} name - Name for the layer to remove.\r\n *\r\n * @returns {boolean} Whether or not removal was successful.\r\n */\n\n }, {\n key: "removeLayer",\n value: function removeLayer(name) {\n var layer = this._layerMap[name];\n\n if (layer === undefined) {\n console.warn("Did not remove layer ".concat(name, " from host ").concat(this._host.id, ". No layer exists with this name."));\n return false;\n }\n\n layer.discard();\n\n var index = this._layers.indexOf(layer);\n\n this._layers.splice(index, 1);\n\n delete this._layerMap[name]; // Notify that a layer has been removed from the feature\n\n this.emit(this.constructor.EVENTS.removeLayer, {\n name: name,\n index: index\n });\n return true;\n }\n /**\r\n * Re-order the layer stack so that the layer with the given name is positioned\r\n * at the given index.\r\n *\r\n * @param {string} name - Name of the layer to move.\r\n * @param {number} index - New index to position the layer at.\r\n *\r\n * @returns {number} The new index of the layer\r\n */\n\n }, {\n key: "moveLayer",\n value: function moveLayer(name, index) {\n // Make sure the name is valid\n var layer = this._layerMap[name];\n\n if (layer === undefined) {\n throw new Error("Cannot move layer ".concat(name, " from host ").concat(this._host.id, ". No layer exists with this name."));\n } // Make sure the index falls in the range of existing layers\n\n\n var layerIndex = this._validateIndex(index, true);\n\n var lastIndex = this._layers.length - 1;\n\n if (layerIndex === undefined) {\n throw new Error("Cannot move layer ".concat(name, " from host ").concat(this._host.id, " to index ").concat(index, ". Index must be in the 0 - ").concat(lastIndex, " range."));\n }\n\n var currentIndex = this._layers.indexOf(layer);\n\n if (currentIndex === layerIndex) {\n return;\n } // Remove from the current position\n\n\n this._layers.splice(currentIndex, 1); // Insert at the new position\n\n\n if (layerIndex === lastIndex) {\n this._layers.push(layer);\n } else {\n this._layers.splice(layerIndex, 0, layer);\n }\n\n return layerIndex;\n }\n /**\r\n * Update the name of a layer. Names must be unique, if the new name is not\r\n * unique it will have trailing numbers appended until it is unique.\r\n *\r\n * @param {string} currentName - Current name of the layer.\r\n * @param {string} newName - New name to set on the layer.\r\n *\r\n * @returns {string} The new name of the layer\r\n */\n\n }, {\n key: "renameLayer",\n value: function renameLayer(currentName, newName) {\n // Make sure the name is valid\n var layer = this._layerMap[currentName];\n\n if (layer === undefined) {\n throw new Error("Cannot rename layer ".concat(currentName, " from host ").concat(this._host.id, ". No layer exists with this name."));\n } // Make sure the layer name is unique\n\n\n var name = core_Utils.getUniqueName(newName, Object.keys(this._layerMap));\n\n if (name !== newName) {\n console.warn("Layer name ".concat(newName, " is not unique. Layer will be renamed to ").concat(name, "."));\n }\n\n delete this._layerMap[currentName];\n this._layerMap[name] = layer;\n layer.name = name; // Notify that a layer has been renamed on the feature\n\n this.emit(this.constructor.EVENTS.renameLayer, {\n oldName: currentName,\n newName: name\n });\n return name;\n }\n /**\r\n * Return the weight of an animation layer.\r\n *\r\n * @param {string} name - Name of the layer to return weight from.\r\n *\r\n * @returns {number}\r\n */\n\n }, {\n key: "getLayerWeight",\n value: function getLayerWeight(name) {\n // Make sure the name is valid\n var layer = this._layerMap[name];\n\n if (layer === undefined) {\n throw new Error("Cannot get weight on layer ".concat(name, " from host ").concat(this._host.id, ". No layer exists with this name."));\n }\n\n return layer.weight;\n }\n /**\r\n * Update the weight of an animation layer.\r\n *\r\n * @param {string} name - The name of the layer to update.\r\n * @param {number} weight - The weight value to set on the layer. This number\r\n * should be in the 0-1 range.\r\n * @param {number=} seconds - The number of seconds it should take to reach the\r\n * new weight. Default is zero and will set immediately.\r\n * @param {Function=} easingFn - The easing function to use while interpolating\r\n * the weight. Default is Easing.Linear.InOut.\r\n *\r\n * @returns {Deferred} A promise that will resolve once the layer\'s weight reaches\r\n * the target value.\r\n */\n\n }, {\n key: "setLayerWeight",\n value: function setLayerWeight(name, weight, seconds, easingFn) {\n // Make sure the name is valid\n var layer = this._layerMap[name];\n\n if (layer === undefined) {\n var e = "Cannot set weight on layer ".concat(name, " from host ").concat(this._host.id, ". No layer exists with this name.");\n return core_Deferred.reject(e);\n }\n\n return layer.setWeight(weight, seconds, easingFn);\n }\n /**\r\n * Returns the names of blend states in an animation in a layer.\r\n *\r\n * @param {string} layerName - Name of the layer containing the animation containing\r\n * the blend state to update.\r\n * @param {string} animationName - Name of the animation containing the blend state\r\n * to update.\r\n *\r\n * @returns {Array.} - Names of blend states.\r\n */\n\n }, {\n key: "getAnimationBlendNames",\n value: function getAnimationBlendNames(layerName, animationName) {\n var layer = this._layerMap[layerName];\n\n if (layer === undefined) {\n throw new Error("Cannot get blend names on layer ".concat(layerName, " from host ").concat(this._host.id, ". No layer exists with this name."));\n }\n\n return layer.getAnimationBlendNames(animationName);\n }\n /**\r\n * Update the weight for a blend state in an animation in a layer.\r\n *\r\n * @param {string} layerName - Name of the layer containing the animation containing\r\n * the blend state to update.\r\n * @param {string} animationName - Name of the animation containing the blend state\r\n * to update.\r\n * @param {string} blendName - Name of the blend state to update.\r\n * @param {number} weight - Weight value to set on the animation. This number shoudld be\r\n * in the 0-1 range.\r\n * @param {number=} seconds - Number of seconds it should take to reach the new weight.\r\n * Default is zero and will set immediately.\r\n * @param {Function=} easingFn - Easing function to use while interpolating the new\r\n * weight. Default is Easing.Linear.InOut.\r\n *\r\n * @returns {Deferred} - Promise that will resolve once the animation\'s weight reaches\r\n * the target value.\r\n */\n\n }, {\n key: "setAnimationBlendWeight",\n value: function setAnimationBlendWeight(layerName, animationName, blendName, weight, seconds, easingFn) {\n var layer = this._layerMap[layerName];\n\n if (layer === undefined) {\n var e = "Cannot set blend weight on layer ".concat(layerName, " from host ").concat(this._host.id, ". No layer exists with this name.");\n return core_Deferred.reject(e);\n }\n\n return layer.setAnimationBlendWeight(animationName, blendName, weight, seconds, easingFn);\n }\n /**\r\n * Returns the weight for a blend state in an animation in a layer.\r\n *\r\n * @param {string} layerName - Name of the layer containing the animation containing\r\n * the blend state to update.\r\n * @param {string} animationName - Name of the animation containing the blend state\r\n * to update.\r\n * @param {string} blendName - Name of the blend state to update.\r\n *\r\n * @returns {number} - Weight of the blend state.\r\n */\n\n }, {\n key: "getAnimationBlendWeight",\n value: function getAnimationBlendWeight(layerName, animationName, blendName) {\n var layer = this._layerMap[layerName];\n\n if (layer === undefined) {\n throw new Error("Cannot get blend weight on layer ".concat(layerName, " from host ").concat(this._host.id, ". No layer exists with this name."));\n }\n\n return layer.getAnimationBlendWeight(animationName, blendName);\n }\n /**\r\n * Pause weight interpolation animation on a layer with the given name.\r\n *\r\n * @param {string} name - Name of the layer to pause.\r\n *\r\n * @returns {boolean} - Whether or not there was an existing interpolation to pause.\r\n */\n\n }, {\n key: "pauseLayerWeight",\n value: function pauseLayerWeight(name) {\n // Make sure the name is valid\n var layer = this._layerMap[name];\n\n if (layer === undefined) {\n throw new Error("Cannot pause weight interpolation on layer ".concat(name, " from host ").concat(this._host.id, ". No layer exists with this name."));\n }\n\n return layer.pauseWeight();\n }\n /**\r\n * Resume weight interpolation animation on a layer with the given name.\r\n *\r\n * @param {string} name - Name of the layer to resume.\r\n *\r\n * @returns {Deferred} - Resolves once the layer\'s weight reaches its target value.\r\n */\n\n }, {\n key: "resumeLayerWeight",\n value: function resumeLayerWeight(name) {\n // Make sure the name is valid\n var layer = this._layerMap[name];\n\n if (layer === undefined) {\n var e = "Cannot resume weight interpolation on layer ".concat(name, " from host ").concat(this._host.id, ". No layer exists with this name.");\n return core_Deferred.reject(e);\n }\n\n return layer.resumeWeight();\n }\n /**\r\n * Pause current animation and weight interpolation animation on a layer with\r\n * the given name.\r\n *\r\n * @param {string} name - Name of the layer to pause.\r\n *\r\n * @returns {boolean} - Whether or not there was an existing interpolation or\r\n * current animation to pause.\r\n */\n\n }, {\n key: "pauseLayer",\n value: function pauseLayer(name) {\n // Make sure the name is valid\n var layer = this._layerMap[name];\n\n if (layer === undefined) {\n throw new Error("Cannot pause layer ".concat(name, " from host ").concat(this._host.id, ". No layer exists with this name."));\n }\n\n return layer.pause();\n }\n /**\r\n * Resume current animation and weight interpolation animation on a layer with\r\n * the given name.\r\n *\r\n * @param {string} name - Name of the layer to resume.\r\n *\r\n * @returns {Deferred} - Resolves once the layer\'s weight reaches its target value\r\n * and it\'s current animation finishes playing.\r\n */\n\n }, {\n key: "resumeLayer",\n value: function resumeLayer(name) {\n // Make sure the name is valid\n var layer = this._layerMap[name];\n\n if (layer === undefined) {\n var e = "Cannot resume layer ".concat(name, " from host ").concat(this._host.id, ". No layer exists with this name.");\n return core_Deferred.reject(e);\n }\n\n return layer.resume();\n }\n /**\r\n * Return whether or not the animation layer with the given name is currently\r\n * transitioning between animations.\r\n *\r\n * @param {string} layerName - Name of the layer to check.\r\n *\r\n * @returns {boolean}\r\n */\n\n }, {\n key: "getTransitioning",\n value: function getTransitioning(layerName) {\n // Make sure the layerName is valid\n var layer = this._layerMap[layerName];\n\n if (layer === undefined) {\n throw new Error("Get transitioning on layer ".concat(layerName, " from host ").concat(this._host.id, ". No layer exists with this name."));\n }\n\n return layer.isTransitioning;\n }\n /**\r\n * Return an array of the names of all states the layer with the given name controls.\r\n *\r\n * @param {string} layerName - Name of the layer to search.\r\n *\r\n * @returns {Array.}\r\n */\n\n }, {\n key: "getAnimations",\n value: function getAnimations(layerName) {\n // Make sure the layerName is valid\n var layer = this._layerMap[layerName];\n\n if (layer === undefined) {\n throw new Error("Get animations on layer ".concat(layerName, " from host ").concat(this._host.id, ". No layer exists with this name."));\n }\n\n return layer.getStateNames();\n }\n /**\r\n * Return the name of the state currently active on the layer with the given name.\r\n * Return null if there is no current animation for the layer.\r\n *\r\n * @param {string} layerName - Name of the layer.\r\n *\r\n * @returns {(string|null)}\r\n */\n\n }, {\n key: "getCurrentAnimation",\n value: function getCurrentAnimation(layerName) {\n // Make sure the layerName is valid\n var layer = this._layerMap[layerName];\n\n if (layer === undefined) {\n throw new Error("Get current animation on layer ".concat(layerName, " from host ").concat(this._host.id, ". No layer exists with this name."));\n }\n\n return layer.currentAnimation;\n }\n /**\r\n * Return whether or not a layer with the given name is currently playing an\r\n * animation and that animation is paused.\r\n *\r\n * @param {string} layerName - Name of the layer.\r\n *\r\n * @returns {boolean}\r\n */\n\n }, {\n key: "getPaused",\n value: function getPaused(layerName) {\n // Make sure the layerName is valid\n var layer = this._layerMap[layerName];\n\n if (layer === undefined) {\n throw new Error("Get paused on layer ".concat(layerName, " from host ").concat(this._host.id, ". No layer exists with this name."));\n }\n\n return layer.currentState && layer.currentState.paused;\n }\n /**\r\n * Return the type name of the given animation. @see AnimationTypes.\r\n *\r\n * @param {string} layerName - Name of the layer that contains the animation.\r\n * @param {string} animationName - Name of the animation to check.\r\n *\r\n * @returns {string}\r\n */\n\n }, {\n key: "getAnimationType",\n value: function getAnimationType(layerName, animationName) {\n // Make sure the layerName is valid\n var layer = this._layerMap[layerName];\n\n if (layer === undefined) {\n throw new Error("Get animation type on layer ".concat(layerName, " from host ").concat(this._host.id, ". No layer exists with this name."));\n }\n\n var state = layer.getState(animationName);\n\n if (state === undefined) {\n throw new Error("Get animation type for animation ".concat(animationName, " on layer ").concat(layerName, " from host ").concat(this._host.id, ". No animation exists with this name."));\n }\n\n var constructor = state.constructor;\n return Object.keys(AnimationTypes).find(function (typeName) {\n return AnimationTypes[typeName] === constructor;\n });\n }\n /**\r\n * Add a new animation to an animation layer.\r\n *\r\n * @param {string} layerName - Name of the layer to add the animation to.\r\n * @param {string} animationName - Name to use when calling the animation.\r\n * @param {Object=} options - Options to pass to the constructor for the new\r\n * SingleState animation.\r\n *\r\n * @returns {string} - The name of the animation that was added\r\n */\n\n }, {\n key: "addAnimation",\n value: function addAnimation(layerName, animationName) {\n var animationType = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : AnimationTypes.single;\n var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n options.name = this._validateNewAnimation(layerName, animationName); // Make sure the animation type is valid\n\n if (!Object.values(AnimationTypes).includes(animationType)) {\n throw new Error("Cannot add animation ".concat(animationName, " to layer ").concat(layerName, " on host ").concat(this._host.id, ". Invalid animation type."));\n }\n\n var layer = this._layerMap[layerName];\n options.blendMode = layer.blendMode;\n options.transitionTime = layer.transitionTime;\n var state = this["_create".concat(animationType.name)](options);\n var name = layer.addState(state); // Notify that an animation has been added to the feature\n\n this.emit(this.constructor.EVENTS.addAnimation, {\n layerName: layerName,\n animationName: name\n });\n return name;\n }\n /**\r\n * Remove an animation from an animation layer.\r\n *\r\n * @param {string} layerName - Name of the layer to remove the animation from.\r\n * @param {string} name - Name of the animation to remove.\r\n *\r\n * @returns {boolean}\r\n */\n\n }, {\n key: "removeAnimation",\n value: function removeAnimation(layerName, animationName) {\n // Make sure the name is valid\n var layer = this._layerMap[layerName];\n\n if (layer === undefined) {\n throw new Error("Cannot remove animation from layer ".concat(layerName, " from host ").concat(this._host.id, ". No layer exists with this name."));\n }\n\n var removed = layer.removeState(animationName); // Notify that an animation has been removed from the feature\n\n if (removed === true) {\n this.emit(this.constructor.EVENTS.removeAnimation, {\n layerName: layerName,\n animationName: animationName\n });\n }\n\n return removed;\n }\n /**\r\n * Update the name of an animation. Names must be unique on each layer, if the new\r\n * name is not unique it will have trailing numbers appended until it is unique.\r\n *\r\n * @param {string} layerName - Name of the layer that contains the animation that\r\n * will be renamed,\r\n * @param {string} currentAnimationName - Current name of the animation.\r\n * @param {string} newAnimationName - New name to set on the animation.\r\n *\r\n * @returns {string} - The new name of the animation\r\n */\n\n }, {\n key: "renameAnimation",\n value: function renameAnimation(layerName, currentAnimationName, newAnimationName) {\n var layer = this._layerMap[layerName];\n\n if (layer === undefined) {\n throw new Error("Cannot rename animation ".concat(currentAnimationName, " on layer ").concat(layerName, " for host ").concat(this._host.id, ". No layer exists with this name."));\n }\n\n var name = layer.renameState(currentAnimationName, newAnimationName); // Notify that an animation has been renamed on the feature\n\n this.emit(this.constructor.EVENTS.renameAnimation, {\n layerName: layerName,\n oldName: currentAnimationName,\n newName: name\n });\n return name;\n }\n /**\r\n * Pause the currently playing animation and play a new animation from the beginning.\r\n *\r\n * @param {string} layerName - Name of the layer that contains the animation.\r\n * @param {string} animationName - Name of the animation state to play.\r\n * @param {number=} seconds - The number of seconds it should take to transition\r\n * to the new animation. Default is zero and will set immediately.\r\n * @param {Function=} easingFn - The easing function to use while transitioning\r\n * between animations. Default is Easing.Linear.InOut.\r\n *\r\n * @returns {Deferred} - Resolves once the animation reaches the end of its\r\n * timeline. Looping animations can only resolve if they are interrupted or\r\n * manually stopped.\r\n */\n\n }, {\n key: "playAnimation",\n value: function playAnimation(layerName, animationName, seconds, easingFn) {\n var _this7 = this;\n\n var layer = this._layerMap[layerName];\n\n if (layer === undefined) {\n var e = "Cannot play animation ".concat(animationName, " on layer ").concat(layerName, " for host ").concat(this._host.id, ". No layer exists with this name.");\n return core_Deferred.reject(e);\n } // Notify that a new animation has begun\n\n\n this.emit(this.constructor.EVENTS.playAnimation, {\n layerName: layerName,\n animationName: animationName\n });\n return layer.playAnimation(animationName, seconds, easingFn, function () {\n // Notify that an animation has stopped\n _this7.emit(_this7.constructor.EVENTS.stopAnimation, {\n layerName: layerName,\n animationName: animationName\n });\n }, undefined, function () {\n // Notify that an animation has been interrupted\n _this7.emit(_this7.constructor.EVENTS.interruptAnimation, {\n layerName: layerName,\n animationName: animationName\n });\n }, function (_ref) {\n var name = _ref.name,\n canAdvance = _ref.canAdvance,\n isQueueEnd = _ref.isQueueEnd;\n\n if (layer.currentAnimation === animationName) {\n // Notify that a new animation has begun\n _this7.emit(_this7.constructor.EVENTS.playNextAnimation, {\n layerName: layerName,\n animationName: animationName,\n nextQueuedAnimation: name,\n canAdvance: canAdvance,\n isQueueEnd: isQueueEnd\n });\n }\n });\n }\n /**\r\n * Play the next animation in the queue of a QueueState animation.\r\n *\r\n * @param {string} layerName - Name of the layer that contains the queue animation.\r\n * @param {string=} animationName - Name of the animation queue animation. Defaults\r\n * to the name of the current animation for the layer.\r\n * @param {number=} seconds - The number of seconds it should take to transition\r\n * to the queue animation if it\'s not already currently playing. Default is zero\r\n * and will set immediately.\r\n * @param {Function=} easingFn - The easing function to use while transitioning\r\n * to the queue animation if it isn\'t already playing. Default is Easing.Linear.InOut.\r\n *\r\n * @returns {Deferred} - Resolves once the last animation in the queue finishes\r\n * playing.\r\n */\n\n }, {\n key: "playNextAnimation",\n value: function playNextAnimation(layerName, animationName, transitionTime, easingFn) {\n var _this8 = this;\n\n var layer = this._layerMap[layerName];\n\n if (layer === undefined) {\n var e = "Cannot play next animation on layer ".concat(layerName, " for host ").concat(this._host.id, ". No layer exists with this name.");\n return core_Deferred.reject(e);\n }\n\n if (animationName === undefined) {\n animationName = layer.currentAnimation;\n }\n\n var animation = layer.getState(layer.currentAnimation);\n\n if (animation === null) {\n var _e = "Cannot play next animation on layer ".concat(layerName, " for host ").concat(this._host.id, ". No animation exists with name ").concat(animationName, ".");\n\n return core_Deferred.reject(_e);\n } else if (this.getAnimationType(layerName, animationName) !== \'queue\') {\n var _e2 = "Cannot play next animation on layer ".concat(layerName, " for host ").concat(this._host.id, ". ").concat(animationName, " is not a queue state.");\n\n return core_Deferred.reject(_e2);\n }\n\n var onNext = function onNext(_ref2) {\n var name = _ref2.name,\n canAdvance = _ref2.canAdvance,\n isQueueEnd = _ref2.isQueueEnd;\n\n if (layer.currentAnimation === animationName) {\n // Notify that a new animation has begun\n _this8.emit(_this8.constructor.EVENTS.playNextAnimation, {\n layerName: layerName,\n animationName: animationName,\n nextQueuedAnimation: name,\n canAdvance: canAdvance,\n isQueueEnd: isQueueEnd\n });\n }\n }; // Make the queue animation current if it wasn\'t already\n\n\n if (layer.currentAnimation === null) {\n layer.resumeAnimation(animation.name, transitionTime, easingFn, undefined, undefined, undefined, onNext);\n }\n\n return animation.next(onNext, true);\n }\n /**\r\n * Pause the current animation on a layer.\r\n *\r\n * @param {string} name - Name of the layer to pause.\r\n *\r\n * @returns {boolean} Whether or not an animation was successfully paused.\r\n */\n\n }, {\n key: "pauseAnimation",\n value: function pauseAnimation(name) {\n var layer = this._layerMap[name];\n\n if (layer === undefined) {\n console.warn("Did not pause animation on layer ".concat(name, " for host ").concat(this._host.id, ". No layer exists with this name."));\n return false;\n }\n\n var paused = layer.pauseAnimation(); // Notify that an animation was paused\n\n if (paused) {\n var animationName = layer.currentAnimation;\n this.emit(this.constructor.EVENTS.pauseAnimation, {\n layerName: name,\n animationName: animationName\n });\n }\n\n return paused;\n }\n /**\r\n * Pause the currently playing animation and play a new animation from where it\r\n * last left off.\r\n *\r\n * @param {string} layerName - Name of the layer that contains the animation.\r\n * @param {string=} animationName - Name of the animation state to resume. Defaults\r\n * to the name of the current animation for the layer.\r\n * @param {number=} seconds - The number of seconds it should take to transition\r\n * to the new animation. Default is zero and will set immediately.\r\n * @param {Function=} easingFn - The easing function to use while transitioning\r\n * between animations. Default is Easing.Linear.InOut.\r\n *\r\n * @returns {Deferred} - Resolves once the animation reaches the end of its\r\n * timeline. Looping animations can only resolve if they are interrupted or\r\n * manually stopped.\r\n */\n\n }, {\n key: "resumeAnimation",\n value: function resumeAnimation(layerName, animationName, seconds, easingFn) {\n var _this9 = this;\n\n var layer = this._layerMap[layerName];\n\n if (layer === undefined) {\n var e = "Cannot resume animation ".concat(animationName, " on layer ").concat(layerName, " for host ").concat(this._host.id, ". No layer exists with this name.");\n return core_Deferred.reject(e);\n } // Notify that an animation was resumed\n\n\n this.emit(this.constructor.EVENTS.resumeAnimation, {\n layerName: layerName,\n animationName: animationName\n });\n return layer.resumeAnimation(animationName, seconds, easingFn, function () {\n // Notify that an animation has stopped\n _this9.emit(_this9.constructor.EVENTS.stopAnimation, {\n layerName: layerName,\n animationName: animationName\n });\n }, undefined, function () {\n // Notify that an animation has been interrupted\n _this9.emit(_this9.constructor.EVENTS.interruptAnimation, {\n layerName: layerName,\n animationName: animationName\n });\n }, function (_ref3) {\n var name = _ref3.name,\n canAdvance = _ref3.canAdvance,\n isQueueEnd = _ref3.isQueueEnd;\n\n if (layer.currentAnimation === animationName) {\n // Notify that a new animation has begun\n _this9.emit(_this9.constructor.EVENTS.playNextAnimation, {\n layerName: layerName,\n animationName: animationName,\n nextQueuedAnimation: name,\n canAdvance: canAdvance,\n isQueueEnd: isQueueEnd\n });\n }\n });\n }\n /**\r\n * Stop the current animation on a layer. Stop rewinds the animation to the\r\n * beginning and prevents it from progressing forward.\r\n *\r\n * @param {string} name - Name of the layer that contains the animation.\r\n *\r\n * @returns {boolean} Whether or not an animation was successfully stopped.\r\n */\n\n }, {\n key: "stopAnimation",\n value: function stopAnimation(name) {\n var layer = this._layerMap[name];\n\n if (layer === undefined) {\n console.warn("Did not stop animation on layer ".concat(name, " for host ").concat(this._host.id, ". No layer exists with this name."));\n return false;\n }\n\n return layer.stopAnimation();\n }\n /**\r\n * Pause current animation and weight interpolation animation on all layers.\r\n * @returns {boolean} - Whether or not there was an existing interpolation or\r\n * current animations to pause.\r\n */\n\n }, {\n key: "pause",\n value: function pause() {\n this._paused = true;\n var paused = false;\n\n this._layers.forEach(function (l) {\n if (l.pause()) {\n paused = true;\n }\n });\n\n return paused;\n }\n /**\r\n * Resume current animation and weight interpolation animation on all layers.\r\n * @returns {boolean} - Whether or not there was an existing interpolation or\r\n * current animations to resume.\r\n */\n\n }, {\n key: "resume",\n value: function resume() {\n this._paused = false;\n var resumed = false;\n\n this._layers.forEach(function (l) {\n if (l.resume()) {\n resumed = true;\n }\n });\n\n return resumed;\n }\n /**\r\n * Adds a namespace to the host with the name of the feature to contain properties\r\n * and methods from the feature that users of the host need access to.\r\n *\r\n * @see AnimationFeature\r\n */\n\n }, {\n key: "installApi",\n value: function installApi() {\n var _this10 = this;\n\n /**\r\n * @inner\r\n * @namespace AnimationFeature\r\n */\n var api = AnimationFeature_get(AnimationFeature_getPrototypeOf(AnimationFeature.prototype), "installApi", this).call(this);\n\n Object.defineProperties(api, {\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @see core/AnimationFeature#paused\r\n */\n paused: {\n get: function get() {\n return _this10.paused;\n }\n },\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @see core/AnimationFeature#layers\r\n */\n layers: {\n get: function get() {\n return _this10.layers;\n }\n }\n });\n Object.assign(api, {\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#addLayer\r\n */\n addLayer: this.addLayer.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#removeLayer\r\n */\n removeLayer: this.removeLayer.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#moveLayer\r\n */\n moveLayer: this.moveLayer.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#renameLayer\r\n */\n renameLayer: this.renameLayer.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#getLayerWeight\r\n */\n getLayerWeight: this.getLayerWeight.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#setLayerWeight\r\n */\n setLayerWeight: this.setLayerWeight.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#pauseLayerWeight\r\n */\n pauseLayerWeight: this.pauseLayerWeight.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#resumeLayerWeight\r\n */\n resumeLayerWeight: this.resumeLayerWeight.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#pauseLayer\r\n */\n pauseLayer: this.pauseLayer.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#resumeLayer\r\n */\n resumeLayer: this.resumeLayer.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#getTransitioning\r\n */\n getTransitioning: this.getTransitioning.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#getAnimations\r\n */\n getAnimations: this.getAnimations.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#getCurrentAnimation\r\n */\n getCurrentAnimation: this.getCurrentAnimation.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#getPaused\r\n */\n getPaused: this.getPaused.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#getAnimationType\r\n */\n getAnimationType: this.getAnimationType.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#addAnimation\r\n */\n addAnimation: this.addAnimation.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#removeAnimation\r\n */\n removeAnimation: this.removeAnimation.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#renameAnimation\r\n */\n renameAnimation: this.renameAnimation.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#getAnimationBlendNames\r\n */\n getAnimationBlendNames: this.getAnimationBlendNames.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#getAnimationBlendWeight\r\n */\n getAnimationBlendWeight: this.getAnimationBlendWeight.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#setAnimationBlendWeight\r\n */\n setAnimationBlendWeight: this.setAnimationBlendWeight.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#playAnimation\r\n */\n playAnimation: this.playAnimation.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#playNextAnimation\r\n */\n playNextAnimation: this.playNextAnimation.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#pauseAnimation\r\n */\n pauseAnimation: this.pauseAnimation.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#resumeAnimation\r\n */\n resumeAnimation: this.resumeAnimation.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#stopAnimation\r\n */\n stopAnimation: this.stopAnimation.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#pause\r\n */\n pause: this.pause.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#resume\r\n */\n resume: this.resume.bind(this)\n });\n }\n /**\r\n * Update each animation layer.\r\n *\r\n * @param {number} deltaTime - Time since the last update.\r\n */\n\n }, {\n key: "update",\n value: function update(deltaTime) {\n if (!this._layers.length) {\n return;\n }\n\n if (this._paused) {\n deltaTime = 0;\n } // Re-evaluate internal weights for layers\n\n\n this._updateInternalWeights(); // Update layers\n\n\n this._layers.forEach(function (layer) {\n layer.update(deltaTime);\n });\n\n AnimationFeature_get(AnimationFeature_getPrototypeOf(AnimationFeature.prototype), "update", this).call(this, deltaTime);\n }\n }, {\n key: "discard",\n value: function discard() {\n this._layers.forEach(function (layer) {\n layer.discard();\n });\n\n delete this._layers;\n delete this._layerMap;\n\n AnimationFeature_get(AnimationFeature_getPrototypeOf(AnimationFeature.prototype), "discard", this).call(this);\n }\n }]);\n\n return AnimationFeature;\n}(core_AbstractHostFeature);\n\nObject.defineProperty(AnimationFeature_AnimationFeature, \'EVENTS\', {\n value: AnimationFeature_objectSpread(AnimationFeature_objectSpread({}, Object.getPrototypeOf(core_AbstractHostFeature).EVENTS), {}, {\n addLayer: \'onAddLayerEvent\',\n removeLayer: \'onRemoveLayerEvent\',\n renameLayer: \'onRenameLayerEvent\',\n addAnimation: \'onAddAnimationEvent\',\n removeAnimation: \'onRemovedAnimationEvent\',\n renameAnimation: \'onRenameAnimationEvent\',\n playAnimation: \'onPlayEvent\',\n playNextAnimation: \'onNextEvent\',\n pauseAnimation: \'onPauseEvent\',\n resumeAnimation: \'onResumeEvent\',\n interruptAnimation: \'onInterruptEvent\',\n stopAnimation: \'onStopEvent\'\n })\n});\n/* harmony default export */ var animpack_AnimationFeature = (AnimationFeature_AnimationFeature);\n// CONCATENATED MODULE: ./src/core/PointOfInterestFeature.js\nfunction PointOfInterestFeature_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { PointOfInterestFeature_typeof = function _typeof(obj) { return typeof obj; }; } else { PointOfInterestFeature_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return PointOfInterestFeature_typeof(obj); }\n\nfunction PointOfInterestFeature_slicedToArray(arr, i) { return PointOfInterestFeature_arrayWithHoles(arr) || PointOfInterestFeature_iterableToArrayLimit(arr, i) || PointOfInterestFeature_unsupportedIterableToArray(arr, i) || PointOfInterestFeature_nonIterableRest(); }\n\nfunction PointOfInterestFeature_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."); }\n\nfunction PointOfInterestFeature_iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction PointOfInterestFeature_arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction PointOfInterestFeature_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction PointOfInterestFeature_toConsumableArray(arr) { return PointOfInterestFeature_arrayWithoutHoles(arr) || PointOfInterestFeature_iterableToArray(arr) || PointOfInterestFeature_unsupportedIterableToArray(arr) || PointOfInterestFeature_nonIterableSpread(); }\n\nfunction PointOfInterestFeature_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."); }\n\nfunction PointOfInterestFeature_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return PointOfInterestFeature_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return PointOfInterestFeature_arrayLikeToArray(o, minLen); }\n\nfunction PointOfInterestFeature_iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction PointOfInterestFeature_arrayWithoutHoles(arr) { if (Array.isArray(arr)) return PointOfInterestFeature_arrayLikeToArray(arr); }\n\nfunction PointOfInterestFeature_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction PointOfInterestFeature_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction PointOfInterestFeature_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction PointOfInterestFeature_createClass(Constructor, protoProps, staticProps) { if (protoProps) PointOfInterestFeature_defineProperties(Constructor.prototype, protoProps); if (staticProps) PointOfInterestFeature_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction PointOfInterestFeature_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { PointOfInterestFeature_get = Reflect.get; } else { PointOfInterestFeature_get = function _get(target, property, receiver) { var base = PointOfInterestFeature_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return PointOfInterestFeature_get(target, property, receiver || target); }\n\nfunction PointOfInterestFeature_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = PointOfInterestFeature_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction PointOfInterestFeature_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) PointOfInterestFeature_setPrototypeOf(subClass, superClass); }\n\nfunction PointOfInterestFeature_setPrototypeOf(o, p) { PointOfInterestFeature_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return PointOfInterestFeature_setPrototypeOf(o, p); }\n\nfunction PointOfInterestFeature_createSuper(Derived) { var hasNativeReflectConstruct = PointOfInterestFeature_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = PointOfInterestFeature_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = PointOfInterestFeature_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return PointOfInterestFeature_possibleConstructorReturn(this, result); }; }\n\nfunction PointOfInterestFeature_possibleConstructorReturn(self, call) { if (call && (PointOfInterestFeature_typeof(call) === "object" || typeof call === "function")) { return call; } return PointOfInterestFeature_assertThisInitialized(self); }\n\nfunction PointOfInterestFeature_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction PointOfInterestFeature_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction PointOfInterestFeature_getPrototypeOf(o) { PointOfInterestFeature_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return PointOfInterestFeature_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/* eslint-disable no-underscore-dangle */\n\n/* eslint-disable no-unused-vars */\n\n\n\n\n\n\n\n/**\r\n * Enum for axis directions.\r\n *\r\n * @readonly\r\n * @enum {Class}\r\n */\n\nvar AxisMap = {\n PositiveX: [1, 0, 0],\n NegativeX: [-1, 0, 0],\n PositiveY: [0, 1, 0],\n NegativeY: [0, -1, 0],\n PositiveZ: [0, 0, 1],\n NegativeZ: [0, 0, -1]\n};\nvar FaceTargetTypes = {\n EyeCenter: 0,\n EyeLeft: 1,\n EyeRight: 2,\n Mouth: 3\n}; // Average distance between pupils is .064m, golden ratio says that the distance\n// from center of the pupils to the center of the mouth should be about the same.\n\nvar FaceVectors = [[0, 0, 0], [-.032, 0, 0], [.032, 0, 0], [0, -.064, 0]]; // Time ranges to use when choosing a new random wait time between saccades\n\nvar MicroSaccadeWaitRanges = {\n "default": [0.8, 1.75],\n postMacro: [0.6, 1.3125]\n};\nvar MacroSaccadeWaitRanges = {\n "default": [5.0, 8.0],\n mouthTarget: [0.2, 0.75],\n // Look away from a mouth target the fastest\n eyeTarget: [1.5, 4.0]\n}; // Minimum angle in degrees the eye direction must change to trigger a blink animation\n\nvar BlinkThreshold = 35; // Maximum number of milliseconds to use for calculating look speed\n\nvar MaxDelta = 100 / 3;\n/**\r\n * PointOfInterest controls the gaze direction of the host. Given one or more\r\n * animations of type Blend2dState, it calculates the angles between the lookTracker\r\n * object (generally a joint in the host\'s skeleton) and the lookTarget (the object\r\n * the host should look at) and drives the managed Blend2dStates\' X and Y blend\r\n * values using the result. You can optionally add saccadic movement to any managed\r\n * animation to help make the host\'s eyes appear alive when focused on the same\r\n * point for exteded periods of time. If blink animations are specified, a blink\r\n * will be played during large changes in gaze direction.\r\n *\r\n * @extends AbstractHostFeature\r\n * @alias core/PointOfInterestFeature\r\n * @implements SSMLSpeechmarkInterface\r\n * @implements ManagedAnimationLayerInterface\r\n */\n\nvar PointOfInterestFeature_PointOfInterestFeature = /*#__PURE__*/function (_AbstractHostFeature$) {\n PointOfInterestFeature_inherits(PointOfInterestFeature, _AbstractHostFeature$);\n\n var _super = PointOfInterestFeature_createSuper(PointOfInterestFeature);\n\n /**\r\n * @constructor\r\n *\r\n * @param {core/HostObject} host - Host that owns the feature.\r\n * @param {Object=} options - Options for the feature.\r\n * @param {Object=} target - 3D transformation node that the host should try to\r\n * look at.\r\n * @param {Object} options.lookTracker - 3D transformation node that represents\r\n * the direction the host is currently looking during animation.\r\n * @param {Object=} options.scene - Engine-specific scene object that contains\r\n * the host. This object must be defined if using \'setTargetByName\' or \'SetTargetById\'\r\n * methods.\r\n * @param {Object=} lookOptions - Options for the look animation layers.\r\n * @param {number} [lookOptions.blendTime=0.1] - Default amount of time it will\r\n * take to manipulate the weights of the look layers.\r\n * @param {number} [lookOptions.easingFn=Quadratic.InOut] - Default easing function\r\n * to use when manipulating look layer weights.\r\n * @param {Array.} [lookOptions.layers=[]] - An array of layer options\r\n * objects to register as look layers.\r\n * @param {Object=} blinkOptions - Options for the blink animation layers.\r\n * @param {number} [blinkOptions.blendTime=0.075] - Default amount of time it\r\n * will take to manipulate the weights of the blink layers.\r\n * @param {number} [blinkOptions.easingFn=Quadratic.InOut] - Default easing function\r\n * to use when manipulating blink layer weights.\r\n * @param {Array.} [blinkOptions.layers=[]] - An array of layer options\r\n * objects to register as blink layers.\r\n */\n function PointOfInterestFeature(host) {\n var _this;\n\n var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n target = _ref.target,\n lookTracker = _ref.lookTracker,\n scene = _ref.scene;\n\n var _ref2 = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},\n _ref2$blendTime = _ref2.blendTime,\n lookBlendTime = _ref2$blendTime === void 0 ? 0.1 : _ref2$blendTime,\n _ref2$easingFn = _ref2.easingFn,\n lookEasingFn = _ref2$easingFn === void 0 ? Quadratic.InOut : _ref2$easingFn,\n _ref2$layers = _ref2.layers,\n lookLayers = _ref2$layers === void 0 ? [] : _ref2$layers;\n\n var _ref3 = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {},\n _ref3$blendTime = _ref3.blendTime,\n blinkBlendTime = _ref3$blendTime === void 0 ? 0.075 : _ref3$blendTime,\n _ref3$easingFn = _ref3.easingFn,\n blinkEasingFn = _ref3$easingFn === void 0 ? Quadratic.InOut : _ref3$easingFn,\n _ref3$layers = _ref3.layers,\n blinkLayers = _ref3$layers === void 0 ? [] : _ref3$layers;\n\n PointOfInterestFeature_classCallCheck(this, PointOfInterestFeature);\n\n _this = _super.call(this, host);\n\n if (!_this.constructor._validateTransformObject(lookTracker)) {\n throw new Error("Cannot initialize PointOfInterestFeature on host ".concat(_this._host.id, ". LookTracker must be defined as a valid transformation object."));\n }\n\n _this._lookTracker = lookTracker;\n _this._scene = scene;\n _this._target = target || null;\n _this._prevTargetPos = [0, 0, 0];\n _this._isTargetMoving = false;\n _this._lookLayers = _this._lookLayers || {};\n _this._trackingConfigs = _this._trackingConfigs || [];\n _this._blinkLayers = _this._blinkLayers || {}; // Register the look layers\n\n lookLayers.forEach(function (_ref4) {\n var name = _ref4.name,\n animation = _ref4.animation,\n maxSpeed = _ref4.maxSpeed,\n reference = _ref4.reference,\n forwardAxis = _ref4.forwardAxis,\n hasSaccade = _ref4.hasSaccade,\n blendTime = _ref4.blendTime,\n easingFn = _ref4.easingFn;\n\n _this.registerLookLayer(name, {\n animation: animation,\n maxSpeed: maxSpeed,\n reference: reference,\n forwardAxis: forwardAxis,\n hasSaccade: hasSaccade,\n blendTime: blendTime !== undefined ? blendTime : lookBlendTime,\n easingFn: easingFn !== undefined ? easingFn : lookEasingFn\n });\n }); // Register the blink layers\n\n blinkLayers.forEach(function (_ref5) {\n var name = _ref5.name,\n animation = _ref5.animation,\n blendTime = _ref5.blendTime,\n easingFn = _ref5.easingFn;\n\n _this.registerBlinkLayer(name, {\n animation: animation,\n blendTime: blendTime !== undefined ? blendTime : blinkBlendTime,\n easingFn: easingFn !== undefined ? easingFn : blinkEasingFn\n });\n });\n return _this;\n }\n /**\r\n * Gets and sets the target object the host should look at.\r\n *\r\n * @type {Object|null}\r\n */\n\n\n PointOfInterestFeature_createClass(PointOfInterestFeature, [{\n key: "target",\n get: function get() {\n return this._target;\n },\n set: function set(target) {\n this._target = target || null;\n }\n /**\r\n * Return a vector representing the global position of an object. Should be\r\n * overloaded for each rendering engine implementation.\r\n *\r\n * @private\r\n *\r\n * @param {any} _obj - Engine-specific 3D transform object.\r\n *\r\n * @returns {Array.} - An array consisting of three numbers representing\r\n * x, y and z coordinates.\r\n */\n\n }, {\n key: "_onLayerAdded",\n value: function _onLayerAdded(_ref6) {\n var name = _ref6.name;\n this._lookLayers = this._lookLayers || {};\n this._blinkLayers = this._blinkLayers || {};\n\n PointOfInterestFeature_get(PointOfInterestFeature_getPrototypeOf(PointOfInterestFeature.prototype), "_onLayerAdded", this).call(this, {\n name: name\n }); // Validate the look animation\n\n\n if (this._lookLayers[name] !== undefined) {\n this._registerLookAnimation(name, this._lookLayers[name]);\n }\n }\n }, {\n key: "_onAnimationAdded",\n value: function _onAnimationAdded(_ref7) {\n var layerName = _ref7.layerName,\n animationName = _ref7.animationName;\n this._lookLayers = this._lookLayers || {};\n this._blinkLayers = this._blinkLayers || {};\n\n PointOfInterestFeature_get(PointOfInterestFeature_getPrototypeOf(PointOfInterestFeature.prototype), "_onAnimationAdded", this).call(this, {\n layerName: layerName\n }); // Validate the look animation\n\n\n if (this._lookLayers[layerName] === animationName) {\n this._registerLookAnimation(layerName, animationName);\n }\n }\n /**\r\n * Ensure that registered look animations are Blend2dStates.\r\n *\r\n * @private\r\n *\r\n * @param {string} layerName - Name of the layer that contains the look animation.\r\n * @param {string} animationName - Name of the animation.\r\n */\n\n }, {\n key: "_registerLookAnimation",\n value: function _registerLookAnimation(layerName, animationName) {\n if (this._managedLayers[layerName].animations[animationName].isActive) {\n if (AnimationTypes[this._host.AnimationFeature.getAnimationType(layerName, animationName)] !== AnimationTypes.blend2d) {\n // Warn and deactivate if the registered state is not blend2d\n console.warn("Cannot register Point of Interest look animation ".concat(animationName, " on layer ").concat(layerName, " for host ").concat(this._host.id, ". Look animations must be of type \'blend2d\'."));\n this._managedLayers[layerName].animations[animationName].isActive = false;\n }\n }\n }\n /**\r\n * Check if the given object is not of an engine-specific type. Should\r\n * be overloaded for each rendering engine implementation.\r\n *\r\n * @private\r\n *\r\n * @param {any} obj - Object to validate.\r\n *\r\n * @returns {boolean}\r\n */\n\n }, {\n key: "_addTrackingConfig",\n value:\n /**\r\n * Check if the given configuration object has already been stored as a tracking\r\n * config. If it has, return the stored configuration. Otherwise, store and\r\n * return it.\r\n *\r\n * @private\r\n *\r\n * @param {Object} config - Object containing tracker, reference and forwardAxis\r\n * properties.\r\n *\r\n * @returns {Object}\r\n */\n function _addTrackingConfig(config) {\n var trackingConfig = this._trackingConfigs.find(function (c) {\n return c.reference === config.reference && c.forwardAxis === config.forwardAxis;\n });\n\n if (trackingConfig) {\n return trackingConfig;\n } else {\n config.angles = {\n h: 0,\n v: 0\n };\n config.prevAngles = {\n h: 0,\n v: 0\n };\n\n this._trackingConfigs.push(config);\n\n return config;\n }\n }\n /**\r\n * Return the distance between the look tracker and the look target.\r\n *\r\n * @private\r\n *\r\n * @returns {number}\r\n */\n\n }, {\n key: "_getTargetDistance",\n value: function _getTargetDistance() {\n // Find the vector between the global positions of tracker and target\n var sourcePosition = this.constructor._getWorldPosition(this._lookTracker);\n\n var targetPosition = this.constructor._getWorldPosition(this._target);\n\n var lookVector = [targetPosition[0] - sourcePosition[0], targetPosition[1] - sourcePosition[1], targetPosition[2] - sourcePosition[2]];\n return core_MathUtils.getVectorMagnitude(lookVector);\n }\n /**\r\n * Reset all stored tracking angles to 0.\r\n *\r\n * @private\r\n */\n\n }, {\n key: "_resetLookAngles",\n value: function _resetLookAngles() {\n this._trackingConfigs.forEach(function (_ref8) {\n var angles = _ref8.angles;\n angles.h = 0;\n angles.v = 0;\n });\n }\n /**\r\n * Store the difference in horizontal and vertical rotation for the tracker\'s\r\n * reference rotation and the direction of the target from the tracker.\r\n *\r\n * @private\r\n */\n\n }, {\n key: "_setLookAngles",\n value: function _setLookAngles() {\n var _this2 = this;\n\n // Get the current positions of the tracker and target objects\n var targetPos = this.constructor._getWorldPosition(this._target);\n\n var trackerPos = this.constructor._getWorldPosition(this._lookTracker); // Check if the target has moved\n\n\n this._isTargetMoving = core_MathUtils.getVectorMagnitude([targetPos[0] - this._prevTargetPos[0], targetPos[1] - this._prevTargetPos[1], targetPos[2] - this._prevTargetPos[2]]) > 0;\n Object.assign(this._prevTargetPos, targetPos); // Calculate the horizontal and vertical angles to rotate to the target\n\n var targetSpherical = core_MathUtils.cartesianToSpherical(targetPos[0] - trackerPos[0], targetPos[1] - trackerPos[1], targetPos[2] - trackerPos[2]);\n\n var targetAngles = this.constructor._sphericalToBlendValue(targetSpherical[1], targetSpherical[2]); // Calculate angles relative to the reference objects\n\n\n this._trackingConfigs.forEach(function (_ref9) {\n var reference = _ref9.reference,\n forwardAxis = _ref9.forwardAxis,\n angles = _ref9.angles;\n\n // Calculate the horizontal and vertical angles to rotate to the direction of the tracker\n var refDirection = _this2.constructor._getObjectDirection(reference, forwardAxis);\n\n var refSpherical = core_MathUtils.cartesianToSpherical.apply(core_MathUtils, PointOfInterestFeature_toConsumableArray(refDirection));\n\n var refAngles = _this2.constructor._sphericalToBlendValue(refSpherical[1], refSpherical[2]); // Store the difference\n\n\n angles.h = targetAngles.h - refAngles.h;\n angles.v = targetAngles.v - refAngles.v;\n });\n }\n /**\r\n * Return the horizontal and vertical angles it would require to simulate looking\r\n * at the given type of face target\r\n *\r\n * @private\r\n *\r\n * @param {number} targetType - Integer representing the FaceTargetType.\r\n *\r\n * @returns {Object}- An object with signature {r: number, h: number, v: number}\r\n * where \'r\' represents radius, h represents the horizontal/azimuthal angle and\r\n * v represents the vertical/polar angle.\r\n */\n\n }, {\n key: "_getFaceTargetAngles",\n value: function _getFaceTargetAngles(targetType) {\n // No offset when the target is the center of the eyes\n if (targetType === 0) {\n return {\n h: 0,\n v: 0\n };\n } // Build a vector to the face target type using the current distance to the target\n\n\n var distance = this._getTargetDistance(this._lookTracker);\n\n var faceVector = PointOfInterestFeature_toConsumableArray(FaceVectors[targetType]);\n\n faceVector[2] = distance;\n var spherical = core_MathUtils.cartesianToSpherical.apply(core_MathUtils, PointOfInterestFeature_toConsumableArray(faceVector)); // Make sure values are clamped within the range of motion of the human eye, in case the target is very close\n\n var blendValues = this.constructor._sphericalToBlendValue(spherical[1], spherical[2]);\n\n blendValues.h = core_MathUtils.clamp(blendValues.h, -35, 35);\n blendValues.v = core_MathUtils.clamp(blendValues.v, -25, 30);\n return blendValues;\n }\n /**\r\n * Updated the stored speed and duration variables for a layer based on the\r\n * change in horizontal and vertical angles of the tracker.\r\n *\r\n * @private\r\n *\r\n * @param {string} layerName - Name of the layer to store values on.\r\n * @param {number} h - Change in horizontal angle, in degrees.\r\n * @param {number} v - Change in vertical angle, in degrees.\r\n */\n\n }, {\n key: "_updateLayerSpeed",\n value: function _updateLayerSpeed(layerName, h, v) {\n var layer = this._managedLayers[layerName]; // From "Realistic Avatar and head Animation Using a Neurobiological Model of Visual Attention", Itti, Dhavale, Pighin\n\n layer.maxHSpeed = 473 * (1 - Math.exp(-h / 7.8));\n layer.maxVSpeed = 473 * (1 - Math.exp(-v / 7.8)); // From "Eyes Alive", Lee, Badler\n\n var D0 = 0.025;\n var d = 0.00235;\n layer.hDuration = D0 + d * h;\n layer.vDuration = D0 + d * v;\n }\n /**\r\n * Set the microSaccade object with new randomized values.\r\n *\r\n * @private\r\n *\r\n * @param {string} layerName - Name of the layer that owns the saccade motion.\r\n */\n\n }, {\n key: "_setMicroSaccade",\n value: function _setMicroSaccade(layerName) {\n var layer = this._managedLayers[layerName];\n var microSaccade = layer.microSaccade;\n\n if (this._target) {\n // Micro movements should be smaller when focused on a target\n microSaccade.h = core_Utils.getRandomFloat(.01, .15);\n microSaccade.v = core_Utils.getRandomFloat(.01, .15);\n } else {\n // Microsaccades. Encyclopedia of Neuroscience. (2009) Springer, Berlin, Heidelberg. https://doi.org/10.1007/978-3-540-29678-2_3492\n microSaccade.h = core_Utils.getRandomFloat(.01, .3);\n microSaccade.v = core_Utils.getRandomFloat(.01, .3);\n }\n\n this._updateLayerSpeed(layerName, microSaccade.h, microSaccade.v); // Restart the timer\n\n\n this._initializeMicroTimer.apply(this, [layerName].concat(PointOfInterestFeature_toConsumableArray(MicroSaccadeWaitRanges["default"])));\n }\n /**\r\n * Set the macroSaccade object with new randomized values.\r\n *\r\n * @private\r\n *\r\n * @param {string} layerName - Name of the layer that owns the saccade motion.\r\n */\n\n }, {\n key: "_setMacroSaccade",\n value: function _setMacroSaccade(layerName) {\n var layer = this._managedLayers[layerName];\n var macroSaccade = layer.macroSaccade;\n var macroSaccadeWaitRange; // Increase random value range when not focused on a target\n\n if (!this._target) {\n macroSaccadeWaitRange = MacroSaccadeWaitRanges["default"]; // Normal human horizontal eye rotation limit is about 35 degrees\n\n var hLimit = core_Utils.getRandomFloat(.143, .286);\n var hFactor = core_Utils.getRandomFloat(-hLimit, hLimit);\n macroSaccade.h = hFactor * 35; // Normal human vertical eye rotation limit is about 25 degrees upward and 30 degrees downward\n\n var vLimit = core_Utils.getRandomFloat(.093, .186);\n var vFactor = core_Utils.getRandomFloat(-vLimit, vLimit);\n macroSaccade.v = vFactor > 0 ? vFactor * 25 : vFactor * 30;\n } // Pick a new face target\n else {\n // Social triangle - saccade between eyes and mouth, weighted to look at eyes more often\n switch (layer.saccadeTarget) {\n case 1:\n macroSaccadeWaitRange = MacroSaccadeWaitRanges.eyeTarget;\n layer.saccadeTarget = Math.random() < 0.75 ? FaceTargetTypes.EyeRight : FaceTargetTypes.Mouth;\n break;\n\n case 2:\n macroSaccadeWaitRange = MacroSaccadeWaitRanges.eyeTarget;\n layer.saccadeTarget = Math.random() < 0.75 ? FaceTargetTypes.EyeLeft : FaceTargetTypes.Mouth;\n break;\n\n case 3:\n macroSaccadeWaitRange = MacroSaccadeWaitRanges.mouthTarget;\n layer.saccadeTarget = Math.random() < 0.5 ? FaceTargetTypes.EyeLeft : FaceTargetTypes.EyeRight;\n break;\n\n case 0:\n default:\n macroSaccadeWaitRange = MacroSaccadeWaitRanges.eyeTarget;\n layer.saccadeTarget = Math.random() < 0.5 ? FaceTargetTypes.EyeLeft : FaceTargetTypes.EyeRight;\n break;\n }\n\n var _this$_getFaceTargetA = this._getFaceTargetAngles(layer.saccadeTarget),\n h = _this$_getFaceTargetA.h,\n v = _this$_getFaceTargetA.v;\n\n macroSaccade.h = h;\n macroSaccade.v = v;\n }\n\n this._updateLayerSpeed(layerName, macroSaccade.h, macroSaccade.v); // Restart the timers\n\n\n this._initializeMicroTimer.apply(this, [layerName].concat(PointOfInterestFeature_toConsumableArray(MicroSaccadeWaitRanges.postMacro)));\n\n this._initializeMacroTimer.apply(this, [layerName].concat(PointOfInterestFeature_toConsumableArray(macroSaccadeWaitRange)));\n }\n /**\r\n * Start a new wait timer that will set a new micro saccade movement when it\r\n * resolves.\r\n *\r\n * @private\r\n *\r\n * @param {string} layerName - Name of the layer that owns the saccade motion.\r\n * @param {number} minWaitTime - Minimum number of seconds before a new saccade\r\n * will be triggered.\r\n * @param {number} maxWaitTime - Maximum number of seconds before a new saccade\r\n * will be triggered.\r\n */\n\n }, {\n key: "_initializeMicroTimer",\n value: function _initializeMicroTimer(layerName, minWaitTime, maxWaitTime) {\n var _this3 = this;\n\n var layer = this._managedLayers[layerName];\n var waitTime = core_Utils.getRandomFloat(minWaitTime, maxWaitTime);\n\n if (layer.microSaccadeTimer) {\n layer.microSaccadeTimer.cancel();\n }\n\n layer.microSaccadeTimer = core_Utils.wait(waitTime, {\n onFinish: function onFinish() {\n _this3._setMicroSaccade(layerName);\n }\n });\n }\n /**\r\n * Start a new wait timer that will set a new macro saccade movement when it\r\n * resolves.\r\n *\r\n * @private\r\n *\r\n * @param {string} layerName - Name of the layer that owns the saccade motion.\r\n * @param {number} minWaitTime - Minimum number of seconds before a new saccade\r\n * will be triggered.\r\n * @param {number} maxWaitTime - Maximum number of seconds before a new saccade\r\n * will be triggered.\r\n */\n\n }, {\n key: "_initializeMacroTimer",\n value: function _initializeMacroTimer(layerName, minWaitTime, maxWaitTime) {\n var _this4 = this;\n\n var layer = this._managedLayers[layerName];\n var waitTime = core_Utils.getRandomFloat(minWaitTime, maxWaitTime);\n\n if (layer.macroSaccadeTimer) {\n layer.macroSaccadeTimer.cancel();\n }\n\n layer.macroSaccadeTimer = core_Utils.wait(waitTime, {\n onFinish: function onFinish() {\n _this4._setMacroSaccade(layerName);\n }\n });\n }\n /**\r\n * Sets a new target to look at.\r\n *\r\n * @param {Object|null} target - The new target to look at.\r\n */\n\n }, {\n key: "setTarget",\n value: function setTarget(target) {\n this.target = target;\n }\n /**\r\n * Finds an object given its name and sets it as the new target to look at.\r\n * Should be overloaded for each rendering engine implementation.\r\n *\r\n * @param {string} target - Name to search for.\r\n */\n\n }, {\n key: "setTargetByName",\n value: function setTargetByName(name) {\n if (!name) {\n this._target = null;\n }\n\n if (!this._scene) {\n throw new Error("Cannot set PointOfInterestFeature target using name ".concat(name, " on host ").concat(this._host.id, ". Scene must be defined."));\n }\n }\n /**\r\n * Finds an object given its id and sets it as the new target to look at.\r\n * Should be overloaded for each rendering engine implementation.\r\n *\r\n * @param {string|number} target - Id to search for.\r\n */\n\n }, {\n key: "setTargetById",\n value: function setTargetById(id) {\n if (!id) {\n this._target = null;\n }\n\n if (!this._scene) {\n throw new Error("Cannot set PointOfInterestFeature target using id ".concat(id, " on host ").concat(this._host.id, ". Scene must be defined."));\n }\n }\n /**\r\n * Start keeping track of an animation layer that owns a blend2d animation with\r\n * blendWeights corresponding to horizontal and vertical look angles.\r\n *\r\n * @param {string} layerName - Name of the layer to keep track of.\r\n * @param {Object=} options - Options for the layer.\r\n * @param {string} [options.animation = \'look\'] - Name of the animation on the\r\n * layer whose blendWeights will be driven based on the angle between the lookTracker\r\n * and the lookTarget. This animation must be of type blend2d.\r\n * @param {number} [options.maxSpeed = 25] - The maximum speed at which the blend2d\r\n * blendWeights can be manipulated.\r\n * @param {string} [options.forwardAxis = \'PositiveZ\'] - Axis pointing from the\r\n * front of the lookReference object. Valid options are \'PositiveX\', \'NegativeX\',\r\n * \'PositiveY\', \'NegativeY\', \'PositiveZ\', \'NegativeZ\'.\r\n * @param {Object=} options.lookReference - 3D transformation node that the lookTracker\r\n * rotation limits should be calculated relative to. Defaults to the host owner.\r\n * @param {number} [options.hasSaccade = false] - Whether or not to include\r\n * saccadic motion onto the blendWeight animation. This should only be set to\r\n * true for blend2d animations representing eye animation.\r\n * @param {number=} [options.blendTime=[PointOfInterestFeature.DEFAULT_LAYER_OPTIONS.blendTime]{@link PointOfInterestFeature#DEFAULT_LAYER_OPTIONS#blendTime}] -\r\n * Default amount of time to use when manipulating layer weight.\r\n * @param {Function=} options.easingFn - Default easing function to use when\r\n * manipulating layer weight.\r\n */\n\n }, {\n key: "registerLookLayer",\n value: function registerLookLayer(layerName) {\n var _ref10 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n _ref10$animation = _ref10.animation,\n animation = _ref10$animation === void 0 ? \'look\' : _ref10$animation,\n _ref10$maxSpeed = _ref10.maxSpeed,\n maxSpeed = _ref10$maxSpeed === void 0 ? 25 : _ref10$maxSpeed,\n reference = _ref10.reference,\n _ref10$forwardAxis = _ref10.forwardAxis,\n forwardAxis = _ref10$forwardAxis === void 0 ? \'PositiveZ\' : _ref10$forwardAxis,\n _ref10$hasSaccade = _ref10.hasSaccade,\n hasSaccade = _ref10$hasSaccade === void 0 ? false : _ref10$hasSaccade,\n _ref10$blendTime = _ref10.blendTime,\n blendTime = _ref10$blendTime === void 0 ? PointOfInterestFeature.DEFAULT_LAYER_OPTIONS.blendTime : _ref10$blendTime,\n easingFn = _ref10.easingFn;\n\n // Validate reference object\n reference = reference || this._host.owner;\n\n if (!this.constructor._validateTransformObject(reference)) {\n throw new Error("Cannot initialize register look layer ".concat(layerName, " for PointOfInterestFeature on host ").concat(this._host.id, ". Reference must be defined as a valid transformation object."));\n } // Find vector associated with axis string\n\n\n forwardAxis = AxisMap[forwardAxis] !== undefined ? AxisMap[forwardAxis] : AxisMap.PositiveZ; // Store tracking configuration\n\n var trackingConfig = this._addTrackingConfig({\n reference: reference,\n forwardAxis: forwardAxis\n }); // Register the layer and animation\n\n\n this.registerLayer(layerName, {\n trackingConfig: trackingConfig,\n maxSpeed: maxSpeed,\n maxHSpeed: undefined,\n maxVSpeed: undefined,\n hDuration: undefined,\n vDuration: undefined,\n hVelocity: [0, 0],\n vVelocity: [0, 0],\n hasSaccade: hasSaccade,\n blendTime: blendTime,\n easingFn: easingFn,\n microSaccade: {\n h: 0,\n v: 0\n },\n macroSaccade: {\n h: 0,\n v: 0\n },\n saccadeTarget: FaceTargetTypes.EyeCenter,\n animations: PointOfInterestFeature_defineProperty({}, animation, {})\n });\n this._lookLayers[layerName] = animation; // Validate the look animation\n\n this._registerLookAnimation(layerName, animation); // Initialize saccade timers\n\n\n if (hasSaccade) {\n var macroSaccadeWaitRange = this._target ? MacroSaccadeWaitRanges.eyeTarget : MacroSaccadeWaitRanges["default"];\n\n this._initializeMicroTimer.apply(this, [layerName].concat(PointOfInterestFeature_toConsumableArray(MicroSaccadeWaitRanges["default"])));\n\n this._initializeMacroTimer.apply(this, [layerName].concat(PointOfInterestFeature_toConsumableArray(macroSaccadeWaitRange)));\n }\n }\n /**\r\n * Start keeping track of an animation layer that owns a blink animation. Blink\r\n * animations can be of any type, but if it is of type randomAnimation then a\r\n * it will be randomized each time a blink is called.\r\n *\r\n * @param {string} layerName - Name of the layer to keep track of.\r\n * @param {Object=} options - Options for the layer.\r\n * @param {string} [options.animation = \'blink\'] - Name of the blink animation\r\n * on the layer.\r\n * @param {number} [options.blendTime=[PointOfInterestFeature.DEFAULT_LAYER_OPTIONS.blendTime]{@link PointOfInterestFeature#DEFAULT_LAYER_OPTIONS#blendTime}] -\r\n * Default amount of time to use when manipulating the layer\'s weight.\r\n * @param {Function=} options.easingFn - Default easing function to use when\r\n * manipulating the layer\'s weight.\r\n */\n\n }, {\n key: "registerBlinkLayer",\n value: function registerBlinkLayer(layerName) {\n var _ref11 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n _ref11$animation = _ref11.animation,\n animation = _ref11$animation === void 0 ? \'blink\' : _ref11$animation,\n _ref11$blendTime = _ref11.blendTime,\n blendTime = _ref11$blendTime === void 0 ? PointOfInterestFeature.DEFAULT_LAYER_OPTIONS.blendTime : _ref11$blendTime,\n easingFn = _ref11.easingFn;\n\n // Register the layer and animation\n this.registerLayer(layerName, {\n blendTime: blendTime,\n easingFn: easingFn,\n animations: PointOfInterestFeature_defineProperty({}, animation, {})\n });\n this._blinkLayers[layerName] = animation;\n }\n }, {\n key: "update",\n value: function update(deltaTime) {\n var _this5 = this;\n\n PointOfInterestFeature_get(PointOfInterestFeature_getPrototypeOf(PointOfInterestFeature.prototype), "update", this).call(this, deltaTime); // Update the look angles\n\n\n if (this._target) {\n this._setLookAngles();\n } else {\n this._resetLookAngles();\n }\n\n var deltaSeconds = Math.min(deltaTime, MaxDelta) / 1000;\n var triggerBlink = false; // Set look blend values\n\n Object.entries(this._lookLayers).forEach(function (_ref12) {\n var _ref13 = PointOfInterestFeature_slicedToArray(_ref12, 2),\n layerName = _ref13[0],\n animName = _ref13[1];\n\n var options = _this5._managedLayers[layerName]; // Increment the saccade timers\n\n if (options.isActive && options.hasSaccade) {\n options.microSaccadeTimer.execute(deltaTime);\n options.macroSaccadeTimer.execute(deltaTime);\n } // Set the blend values\n\n\n if (options.animations[animName].isActive) {\n var currentH = _this5._host.AnimationFeature.getAnimationBlendWeight(layerName, animName, \'X\');\n\n var currentV = _this5._host.AnimationFeature.getAnimationBlendWeight(layerName, animName, \'Y\');\n\n var targetH = options.trackingConfig.angles.h;\n var targetV = options.trackingConfig.angles.v; // Check if the look angle has changed enough to trigger a blink\n\n if (_this5._isTargetMoving && !triggerBlink) {\n var prevTargetH = options.trackingConfig.prevAngles.h;\n var prevTargetV = options.trackingConfig.prevAngles.v;\n var changeAmount = core_MathUtils.toDegrees(core_MathUtils.getAngleBetween([prevTargetH, prevTargetV], [targetH, targetV]));\n\n if (changeAmount >= BlinkThreshold) {\n triggerBlink = true;\n }\n }\n\n options.trackingConfig.prevAngles.h = targetH;\n options.trackingConfig.prevAngles.v = targetV; // Add in the saccade movement\n\n if (options.hasSaccade) {\n core_MathUtils.dampValue(0, options.macroSaccade.h + options.macroSaccade.h, options.hVelocity, options.hDuration, options.maxHSpeed);\n targetH += options.hVelocity[0];\n core_MathUtils.dampValue(0, options.macroSaccade.v + options.macroSaccade.v, options.vVelocity, options.vDuration, options.maxVSpeed);\n targetV += options.vVelocity[0];\n } // Clamp to max speed\n\n\n var factor = core_MathUtils.clamp(deltaSeconds * options.maxSpeed, 0, 1);\n targetH = core_MathUtils.lerp(currentH, targetH, factor);\n targetV = core_MathUtils.lerp(currentV, targetV, factor); // Update the blend values\n\n _this5._host.AnimationFeature.setAnimationBlendWeight(layerName, animName, \'X\', targetH);\n\n _this5._host.AnimationFeature.setAnimationBlendWeight(layerName, animName, \'Y\', targetV);\n }\n });\n\n if (!triggerBlink || !this._isTargetMoving) {\n return;\n } // Execute blink\n\n\n Object.entries(this._blinkLayers).forEach(function (_ref14) {\n var _ref15 = PointOfInterestFeature_slicedToArray(_ref14, 2),\n layerName = _ref15[0],\n animName = _ref15[1];\n\n var animation = _this5._managedLayers[layerName].animations[animName];\n\n if (animation.isActive) {\n _this5._host.AnimationFeature.playAnimation(layerName, animName);\n }\n });\n }\n }, {\n key: "installApi",\n value: function installApi() {\n var _this6 = this;\n\n /**\r\n * @inner\r\n * @namespace PointOfInterestFeature\r\n */\n var api = PointOfInterestFeature_get(PointOfInterestFeature_getPrototypeOf(PointOfInterestFeature.prototype), "installApi", this).call(this);\n\n Object.defineProperties(api, {\n /**\r\n * @memberof PointOfInterestFeature\r\n * @instance\r\n * @see core/PointOfInterestFeature#target\r\n */\n target: {\n get: function get() {\n return _this6.target;\n },\n set: function set(target) {\n _this6.target = target;\n }\n }\n });\n Object.assign(api, {\n /**\r\n * @memberof PointOfInterestFeature\r\n * @instance\r\n * @method\r\n * @see core/PointOfInterestFeature#registerLookLayer\r\n */\n registerLookLayer: this.registerLookLayer.bind(this),\n\n /**\r\n * @memberof PointOfInterestFeature\r\n * @instance\r\n * @method\r\n * @see core/PointOfInterestFeature#registerBlinkLayer\r\n */\n registerBlinkLayer: this.registerBlinkLayer.bind(this),\n\n /**\r\n * @memberof PointOfInterestFeature\r\n * @instance\r\n * @method\r\n * @see core/PointOfInterestFeature#setTarget\r\n */\n setTarget: this.setTarget.bind(this),\n\n /**\r\n * @memberof PointOfInterestFeature\r\n * @instance\r\n * @method\r\n * @see core/PointOfInterestFeature#setTargetByName\r\n */\n setTargetByName: this.setTargetByName.bind(this),\n\n /**\r\n * @memberof PointOfInterestFeature\r\n * @instance\r\n * @method\r\n * @see core/PointOfInterestFeature#setTargetById\r\n */\n setTargetById: this.setTargetById.bind(this)\n });\n return api;\n }\n }], [{\n key: "_getWorldPosition",\n value: function _getWorldPosition(obj) {\n return [0, 0, 0];\n }\n /**\r\n * Return a matrix representing the global transformation matrix of an object.\r\n * Should be overloaded for each rendering engine implementation.\r\n *\r\n * @private\r\n *\r\n * @param {any} obj - Engine-specific 3D transform object.\r\n *\r\n * @returns {Array.} - An array consisting of 16 numbers representing\r\n * the 3d transformation.\r\n */\n\n }, {\n key: "_getWorldMatrix",\n value: function _getWorldMatrix(obj) {\n return [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1];\n }\n /**\r\n * Rotate the given local direction vector by the object\'s world rotation matrix.\r\n *\r\n * @private\r\n *\r\n * @param {any} obj - Engine-specific 3D transform object.\r\n * @param {Array.} forwardVector - Unit vector representing the local\r\n * forward direction of the object.\r\n *\r\n * @returns {Array.}\r\n */\n\n }, {\n key: "_getObjectDirection",\n value: function _getObjectDirection(obj) {\n var forwardVector = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : AxisMap.PositiveZ;\n var rotation = core_MathUtils.getRotationMatrix(this._getWorldMatrix(obj));\n return core_MathUtils.rotateVector(forwardVector, rotation);\n }\n /**\r\n * Calculate horizontal and vertical look angles in degrees given spherical theta\r\n * and phi angles in radians.\r\n *\r\n * @param {number} theta - Vertical/polar angle in radians where 0 points directly\r\n * along positive Y axis.\r\n * @param {number} phi - Horizontal/azimuthal angle in radians.\r\n *\r\n * @returns {Object} - An object with the signature {h: number, v: number} where\r\n * h represents horizontal rotation in degrees and v represents vertical rotation\r\n * in degrees.\r\n */\n\n }, {\n key: "_sphericalToBlendValue",\n value: function _sphericalToBlendValue(theta, phi) {\n var h = core_MathUtils.toDegrees(phi); // Offset the vertical angle so 0 is pointing forward instead of up\n\n var v = core_MathUtils.toDegrees(theta) - 90; // Convert vertical angle to -180, 180 range\n\n return {\n h: h,\n v: v\n };\n }\n }, {\n key: "_validateTransformObject",\n value: function _validateTransformObject(obj) {\n return obj instanceof Object;\n }\n }]);\n\n return PointOfInterestFeature;\n}(core_AbstractHostFeature.mix(awspack_SSMLSpeechmarkInterface.Mixin, animpack_ManagedAnimationLayerInterface.Mixin));\n\n/* harmony default export */ var core_PointOfInterestFeature = (PointOfInterestFeature_PointOfInterestFeature);\n\n// CONCATENATED MODULE: ./src/Babylon.js/PointOfInterestFeature.js\nfunction Babylon_js_PointOfInterestFeature_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { Babylon_js_PointOfInterestFeature_typeof = function _typeof(obj) { return typeof obj; }; } else { Babylon_js_PointOfInterestFeature_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return Babylon_js_PointOfInterestFeature_typeof(obj); }\n\nfunction Babylon_js_PointOfInterestFeature_toConsumableArray(arr) { return Babylon_js_PointOfInterestFeature_arrayWithoutHoles(arr) || Babylon_js_PointOfInterestFeature_iterableToArray(arr) || Babylon_js_PointOfInterestFeature_unsupportedIterableToArray(arr) || Babylon_js_PointOfInterestFeature_nonIterableSpread(); }\n\nfunction Babylon_js_PointOfInterestFeature_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."); }\n\nfunction Babylon_js_PointOfInterestFeature_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return Babylon_js_PointOfInterestFeature_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return Babylon_js_PointOfInterestFeature_arrayLikeToArray(o, minLen); }\n\nfunction Babylon_js_PointOfInterestFeature_iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction Babylon_js_PointOfInterestFeature_arrayWithoutHoles(arr) { if (Array.isArray(arr)) return Babylon_js_PointOfInterestFeature_arrayLikeToArray(arr); }\n\nfunction Babylon_js_PointOfInterestFeature_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction Babylon_js_PointOfInterestFeature_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction Babylon_js_PointOfInterestFeature_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction Babylon_js_PointOfInterestFeature_createClass(Constructor, protoProps, staticProps) { if (protoProps) Babylon_js_PointOfInterestFeature_defineProperties(Constructor.prototype, protoProps); if (staticProps) Babylon_js_PointOfInterestFeature_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction Babylon_js_PointOfInterestFeature_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { Babylon_js_PointOfInterestFeature_get = Reflect.get; } else { Babylon_js_PointOfInterestFeature_get = function _get(target, property, receiver) { var base = Babylon_js_PointOfInterestFeature_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return Babylon_js_PointOfInterestFeature_get(target, property, receiver || target); }\n\nfunction Babylon_js_PointOfInterestFeature_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = Babylon_js_PointOfInterestFeature_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction Babylon_js_PointOfInterestFeature_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) Babylon_js_PointOfInterestFeature_setPrototypeOf(subClass, superClass); }\n\nfunction Babylon_js_PointOfInterestFeature_setPrototypeOf(o, p) { Babylon_js_PointOfInterestFeature_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return Babylon_js_PointOfInterestFeature_setPrototypeOf(o, p); }\n\nfunction Babylon_js_PointOfInterestFeature_createSuper(Derived) { var hasNativeReflectConstruct = Babylon_js_PointOfInterestFeature_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = Babylon_js_PointOfInterestFeature_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = Babylon_js_PointOfInterestFeature_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return Babylon_js_PointOfInterestFeature_possibleConstructorReturn(this, result); }; }\n\nfunction Babylon_js_PointOfInterestFeature_possibleConstructorReturn(self, call) { if (call && (Babylon_js_PointOfInterestFeature_typeof(call) === "object" || typeof call === "function")) { return call; } return Babylon_js_PointOfInterestFeature_assertThisInitialized(self); }\n\nfunction Babylon_js_PointOfInterestFeature_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction Babylon_js_PointOfInterestFeature_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction Babylon_js_PointOfInterestFeature_getPrototypeOf(o) { Babylon_js_PointOfInterestFeature_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return Babylon_js_PointOfInterestFeature_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/**\r\n * @extends core/PointOfInterestFeature\r\n * @alias Babylon.js/PointOfInterestFeature\r\n */\n\nvar Babylon_js_PointOfInterestFeature_PointOfInterestFeature = /*#__PURE__*/function (_CorePointOfInterestF) {\n Babylon_js_PointOfInterestFeature_inherits(PointOfInterestFeature, _CorePointOfInterestF);\n\n var _super = Babylon_js_PointOfInterestFeature_createSuper(PointOfInterestFeature);\n\n function PointOfInterestFeature() {\n Babylon_js_PointOfInterestFeature_classCallCheck(this, PointOfInterestFeature);\n\n return _super.apply(this, arguments);\n }\n\n Babylon_js_PointOfInterestFeature_createClass(PointOfInterestFeature, [{\n key: "_validateTransformObject",\n value: function _validateTransformObject(obj) {\n return obj instanceof BABYLON.TransformNode;\n }\n }, {\n key: "setTargetByName",\n value: function setTargetByName(name) {\n Babylon_js_PointOfInterestFeature_get(Babylon_js_PointOfInterestFeature_getPrototypeOf(PointOfInterestFeature.prototype), "setTargetByName", this).call(this, name);\n\n if (!name) {\n return;\n }\n\n this.target = this._scene.getTransformNodeByName(name);\n }\n }, {\n key: "setTargetById",\n value: function setTargetById(id) {\n Babylon_js_PointOfInterestFeature_get(Babylon_js_PointOfInterestFeature_getPrototypeOf(PointOfInterestFeature.prototype), "setTargetByName", this).call(this, id);\n\n if (!id) {\n return;\n }\n\n this.target = this._scene.getTransformNodeByID(id);\n }\n }], [{\n key: "_getWorldPosition",\n value: function _getWorldPosition(obj) {\n return obj.getWorldMatrix().m.slice(12, 15);\n }\n }, {\n key: "_getWorldMatrix",\n value: function _getWorldMatrix(obj) {\n return Babylon_js_PointOfInterestFeature_toConsumableArray(obj.getWorldMatrix().m);\n }\n }]);\n\n return PointOfInterestFeature;\n}(core_PointOfInterestFeature);\n\n/* harmony default export */ var Babylon_js_PointOfInterestFeature = (Babylon_js_PointOfInterestFeature_PointOfInterestFeature);\n\n// CONCATENATED MODULE: ./src/Babylon.js/HostEnvironment.js\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n// eslint-disable-next-line import/prefer-default-export\nvar env = \'babylon\';\n// CONCATENATED MODULE: ./src/core/awspack/TextToSpeechUtils.js\nfunction TextToSpeechUtils_toConsumableArray(arr) { return TextToSpeechUtils_arrayWithoutHoles(arr) || TextToSpeechUtils_iterableToArray(arr) || TextToSpeechUtils_unsupportedIterableToArray(arr) || TextToSpeechUtils_nonIterableSpread(); }\n\nfunction TextToSpeechUtils_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."); }\n\nfunction TextToSpeechUtils_iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction TextToSpeechUtils_arrayWithoutHoles(arr) { if (Array.isArray(arr)) return TextToSpeechUtils_arrayLikeToArray(arr); }\n\nfunction TextToSpeechUtils_slicedToArray(arr, i) { return TextToSpeechUtils_arrayWithHoles(arr) || TextToSpeechUtils_iterableToArrayLimit(arr, i) || TextToSpeechUtils_unsupportedIterableToArray(arr, i) || TextToSpeechUtils_nonIterableRest(); }\n\nfunction TextToSpeechUtils_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."); }\n\nfunction TextToSpeechUtils_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return TextToSpeechUtils_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return TextToSpeechUtils_arrayLikeToArray(o, minLen); }\n\nfunction TextToSpeechUtils_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction TextToSpeechUtils_iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction TextToSpeechUtils_arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction TextToSpeechUtils_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { TextToSpeechUtils_typeof = function _typeof(obj) { return typeof obj; }; } else { TextToSpeechUtils_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return TextToSpeechUtils_typeof(obj); }\n\nfunction TextToSpeechUtils_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction TextToSpeechUtils_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction TextToSpeechUtils_createClass(Constructor, protoProps, staticProps) { if (protoProps) TextToSpeechUtils_defineProperties(Constructor.prototype, protoProps); if (staticProps) TextToSpeechUtils_defineProperties(Constructor, staticProps); return Constructor; }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/**\r\n * A collection of useful text-to-speech functions.\r\n *\r\n * @hideconstructor\r\n */\n\nvar TextToSpeechUtils_TextToSpeechUtils = /*#__PURE__*/function () {\n function TextToSpeechUtils() {\n TextToSpeechUtils_classCallCheck(this, TextToSpeechUtils);\n }\n\n TextToSpeechUtils_createClass(TextToSpeechUtils, null, [{\n key: "autoGenerateSSMLMarks",\n value:\n /**\r\n * Returns a new string with SSML marks inserted based on\r\n * matches between the input string and the input map. The\r\n * word matches are case-insensitive. Words within existing\r\n * SSML tags will not be affected. Input text will be surrounded\r\n * by tags if needed.\r\n *\r\n * @param {string} text - Input string.\r\n * @param {object} map - Input object that maps mark keys\r\n * to arrays of words. Example:\r\n *\r\n * {\r\n * \'mark:sad\' : [\'sad\', \'blue\', \'down\'],\r\n * \'mark:happy\' : [\'joy\', \'glad\', \'great\'],\r\n * \'mark:no\' : [\'no\', \'nah\', \'nay\', \'sure\']\r\n * }\r\n * @param {Array.} [randomMarks = []] - If there are sentences that don\'t\r\n * match any words from the map object, marks from this array will be randomly\r\n * chosen and inserted.\r\n *\r\n * @returns {string} - Updated input string.\r\n */\n function autoGenerateSSMLMarks(text, map) {\n var _this = this;\n\n var randomMarks = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];\n\n if (TextToSpeechUtils_typeof(map) !== \'object\' || map === null) {\n throw new Error("Cannot generate SSML marks for text \\"".concat(text, "\\" because map is not an object."));\n } // process the input map into an internal format\n\n\n var internalMap = this._processInputMap(map);\n\n var speakTags = [\'\', \'\'];\n var ssmlMarkRegex = //;\n var ssmlTagRegex = /<[^>]*>/g; // Identify any existing SSML tags\n\n var existingTags = [];\n var result = ssmlTagRegex.exec(text);\n\n while (result !== null) {\n existingTags.push({\n start: result.index,\n end: result.index + result[0].length,\n text: result[0]\n });\n result = ssmlTagRegex.exec(text);\n }\n\n var chunks = [];\n var index = 0;\n var ssmlMarkResult;\n var duplicateMarkToCheck = [];\n existingTags.forEach(function (existingTag) {\n var substr = text.slice(index, existingTag.start);\n\n if (substr !== \'\') {\n // auto-mark non-tag text\n chunks.push(_this._insertMarks(substr, internalMap, duplicateMarkToCheck));\n duplicateMarkToCheck = [];\n }\n\n ssmlMarkResult = ssmlMarkRegex.exec(existingTag.text);\n\n if (ssmlMarkResult !== null) {\n var markText = ssmlMarkResult[1];\n duplicateMarkToCheck.push(markText);\n } else if (!speakTags.includes(existingTag.text)) {\n chunks.push(existingTag.text);\n } // advance the index\n\n\n index = existingTag.end;\n });\n chunks.push(this._insertMarks(text.slice(index), internalMap, duplicateMarkToCheck));\n var markedText = chunks.join(\'\');\n\n if (randomMarks && randomMarks.length > 0) {\n // add random marks to any unmarked sentences\n markedText = this.addMarksToUnmarkedSentences(markedText, randomMarks);\n }\n\n return TextToSpeechUtils.validateText(markedText);\n }\n /**\r\n * Returns a new string with a random SSML mark inserted at each sentence that\r\n * does not already contain an SSML mark.\r\n *\r\n * @param {string} text - Input string.\r\n * @param {Array.} marks - Any array of random SSML marks to choose from\r\n * when modifying the text.\r\n *\r\n * @returns {string}\r\n */\n\n }, {\n key: "addMarksToUnmarkedSentences",\n value: function addMarksToUnmarkedSentences(text, marks) {\n if (!marks || marks.length === 0) return text;\n var ssmlMarkRegex = //g;\n var ssmlTagRegex = /<[^>]*>/g; // Find the indices of any marks in the text\n\n var markIndices = [];\n var markResult = ssmlMarkRegex.exec(text);\n\n while (markResult !== null) {\n markIndices.push(markResult.index);\n markResult = ssmlMarkRegex.exec(text);\n } // Find all SSML tags in the text\n\n\n var existingTags = [];\n var ssmlResult = ssmlTagRegex.exec(text);\n\n while (ssmlResult !== null) {\n existingTags.push({\n start: ssmlResult.index,\n end: ssmlResult.index + ssmlResult[0].length,\n text: ssmlResult[0]\n });\n ssmlResult = ssmlTagRegex.exec(text);\n } // Create a copy of the text with all SSML marks replaces with whitespace\n\n\n var cleanedText = text.slice();\n existingTags.forEach(function (existingSsml) {\n var whitespace = new Array(existingSsml.text.length + 1).join(\' \');\n cleanedText = [cleanedText.slice(0, existingSsml.start), whitespace, cleanedText.slice(existingSsml.end)].join(\'\');\n });\n\n var sentenceEndIndices = this._getSentenceEnds(cleanedText); // Only insert random marks into sentences that don\'t already have any\n\n\n var prevIndex = 0;\n var targetIndices = sentenceEndIndices.filter(function (index) {\n var containsMark = markIndices.findIndex(function (markIndex) {\n return prevIndex <= markIndex && index > markIndex;\n }) !== -1;\n prevIndex = index;\n return !containsMark;\n });\n\n var randomMarkedText = this._insertRandomMarksAt(text, targetIndices, marks);\n\n return randomMarkedText;\n }\n /**\r\n * Generate a version of given text that is enclosed by Polly ssml speak tags.\r\n *\r\n * @param {string} text - The text to validate.\r\n *\r\n * @returns {string} - Updated input string.\r\n */\n\n }, {\n key: "validateText",\n value: function validateText(text) {\n if (!text) {\n text = \'\';\n } else {\n text = text.replace(/(^\\s*<\\s*speak\\s*)>\\s*|(^\\s*)/, \'\').replace(/(\\s*<\\s*\\/\\s*speak\\s*>\\s*$|\\s*$)/, \'\');\n }\n\n return text;\n }\n /**\r\n * Parse an input string and insert SSML marks based on\r\n * word matches in a map.\r\n *\r\n * @private\r\n *\r\n * @param {string} text - Input string.\r\n * @param {Array.} [indices = []] - An array of indices in the text input\r\n * where random marks should be inserted.\r\n * @param {Array.} [marks = []] - An array of mark strings to choose\r\n * from when inserting random marks.\r\n *\r\n * @returns {string} - Updated input string.\r\n */\n\n }, {\n key: "_insertRandomMarksAt",\n value: function _insertRandomMarksAt(text) {\n var indices = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n var marks = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];\n\n if (!marks || marks.length === 0 || !indices || indices.length === 0) {\n return text;\n }\n\n var offset = 0;\n indices.forEach(function (index) {\n var randomMark = "");\n text = [text.slice(0, index + offset), randomMark, text.slice(index + offset)].join(\'\');\n offset += randomMark.length;\n });\n return text;\n }\n /**\r\n * Parses a string of text and returns an array containing the indices\r\n * of the last character in a sentence that is not in the following list:\r\n * (\'.\', \'?\', \'!\')\r\n *\r\n * @private\r\n *\r\n * @param {string} text - Text to process for end of sentence\r\n * indices.\r\n *\r\n * @returns {Array.} - Array of end of sentence indices.\r\n */\n\n }, {\n key: "_getSentenceEnds",\n value: function _getSentenceEnds(text) {\n var sentenceRegex = /[^.!?]+[.!?]+/g;\n var endSentenceRegex = /[.!?]+/;\n var result = sentenceRegex.exec(text);\n var sentenceEnds = [];\n\n while (result !== null) {\n // find the last non-punctuation character\n var punctResult = endSentenceRegex.exec(result[0]);\n sentenceEnds.push(result.index + result[0].length - punctResult[0].length);\n result = sentenceRegex.exec(text);\n }\n\n return sentenceEnds;\n }\n /**\r\n * Parse an input string and insert SSML marks based on\r\n * word matches in a map.\r\n *\r\n * @private\r\n *\r\n * @param {string} text - Input string.\r\n * @param {Map} map - Mapping of words to mark values that\r\n * will be inserted as the value for a mark\'s \'name\' attribute.\r\n * @param {Array} duplicatesToCheck - A list of mark values to check for duplicate against the first word\r\n *\r\n * @returns {string} - Updated input string.\r\n */\n\n }, {\n key: "_insertMarks",\n value: function _insertMarks(text, map, duplicatesToCheck) {\n if (text === \'\') return text;\n var wordRegex = /\\w+|\\s+|[^\\s\\w]+/g;\n var lowerCaseWord;\n var checkDuplicate = true;\n var markedWords = text.match(wordRegex).map(function (word) {\n lowerCaseWord = word.toLowerCase();\n\n if (map.has(lowerCaseWord)) {\n var marks = map.get(lowerCaseWord).map(function (mark) {\n if (checkDuplicate) {\n checkDuplicate = false;\n return duplicatesToCheck.includes(mark) ? \'\' : "");\n } else {\n return "");\n }\n });\n return "".concat(marks.join(\'\')).concat(word);\n } else {\n checkDuplicate = false;\n return word;\n }\n });\n var existingMarks = duplicatesToCheck.map(function (mark) {\n return "");\n });\n return "".concat(existingMarks.join(\'\')).concat(markedWords.join(\'\'));\n }\n /**\r\n * Processes an input object for mapping an array\r\n * of words to specific mark keys. Converts the input\r\n * map into a Map with a more efficient format for\r\n * performing mark injection.\r\n *\r\n * @private\r\n *\r\n * @param {object} map - Input object that maps mark keys\r\n * to arrays of words.\r\n *\r\n * @returns {Map} - Map for internal use.\r\n */\n\n }, {\n key: "_processInputMap",\n value: function _processInputMap(map) {\n var internalMap = new Map();\n var list = [];\n Object.entries(map).forEach(function (_ref) {\n var _ref2 = TextToSpeechUtils_slicedToArray(_ref, 2),\n key = _ref2[0],\n value = _ref2[1];\n\n if (!Array.isArray(value)) {\n throw new Error("Cannot generate SSML marks from map \\"".concat(map, "\\" because value for key \'").concat(key, "\' is not an array."));\n }\n\n value.forEach(function (word) {\n var lowerCaseWord = word.toLowerCase();\n list = internalMap.get(lowerCaseWord);\n\n if (list !== undefined && !list.includes(key)) {\n internalMap.set(lowerCaseWord, [].concat(TextToSpeechUtils_toConsumableArray(list), [key]));\n } else {\n internalMap.set(lowerCaseWord, [key]);\n }\n });\n });\n return internalMap;\n }\n }]);\n\n return TextToSpeechUtils;\n}();\n\n/* harmony default export */ var awspack_TextToSpeechUtils = (TextToSpeechUtils_TextToSpeechUtils);\n// CONCATENATED MODULE: ./src/core/awspack/AbstractSpeech.js\nfunction AbstractSpeech_toConsumableArray(arr) { return AbstractSpeech_arrayWithoutHoles(arr) || AbstractSpeech_iterableToArray(arr) || AbstractSpeech_unsupportedIterableToArray(arr) || AbstractSpeech_nonIterableSpread(); }\n\nfunction AbstractSpeech_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."); }\n\nfunction AbstractSpeech_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return AbstractSpeech_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return AbstractSpeech_arrayLikeToArray(o, minLen); }\n\nfunction AbstractSpeech_iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction AbstractSpeech_arrayWithoutHoles(arr) { if (Array.isArray(arr)) return AbstractSpeech_arrayLikeToArray(arr); }\n\nfunction AbstractSpeech_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction AbstractSpeech_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction AbstractSpeech_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction AbstractSpeech_createClass(Constructor, protoProps, staticProps) { if (protoProps) AbstractSpeech_defineProperties(Constructor.prototype, protoProps); if (staticProps) AbstractSpeech_defineProperties(Constructor, staticProps); return Constructor; }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/**\r\n * Class that can play back audio generated by AWS Polly and synchronized emit\r\n * speechmark messages.\r\n *\r\n * @abstract\r\n */\n\nvar AbstractSpeech_AbstractSpeech = /*#__PURE__*/function () {\n /**\r\n * @constructor\r\n *\r\n * @param {core/TextToSpeechFeature} speaker - The feature that owns the Speech and\r\n * will emit speechmark messages.\r\n * @param {string} text - The text of the speech.\r\n * @param {Array.} [speechmarks=[]] - An array of speechmark objects representing\r\n * the text and timing of the speech.\r\n */\n function AbstractSpeech(speaker, text) {\n var speechmarks = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];\n\n AbstractSpeech_classCallCheck(this, AbstractSpeech);\n\n this._speaker = speaker;\n this._text = text;\n this._speechmarks = speechmarks;\n this._speechmarkOffset = 0;\n\n this._reset();\n }\n /**\r\n * Reset tracking properties.\r\n *\r\n * @private\r\n *\r\n * @param {number} [currentTime=0] - Time to use for _startTime.\r\n */\n\n\n AbstractSpeech_createClass(AbstractSpeech, [{\n key: "_reset",\n value: function _reset() {\n var currentTime = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n this._startTime = currentTime;\n this._localTime = 0;\n this._pauseTime = 0;\n this._playing = false;\n this._markIter = this._speechmarks.values();\n\n var _this$_markIter$next = this._markIter.next(),\n value = _this$_markIter$next.value,\n done = _this$_markIter$next.done;\n\n this._currentMark = value;\n this._endTime = this._speechmarks.length ? this._speechmarks[this._speechmarks.length - 1].time : 0;\n this._done = done;\n this._promise = null;\n }\n /**\r\n * Create a new promise that will stop playback and emit messages for this speech.\r\n *\r\n * @param {Function=} onFinish - Funciton to execute once the speech stops.\r\n * @param {onError=} onError - Function to execute if the speech encounters an\r\n * error.\r\n * @param {Function=} onInterrupt - Function to execute if the speech is canceled.\r\n *\r\n * @returns {Deferred}\r\n *\r\n * @private\r\n */\n\n }, {\n key: "_createPromise",\n value: function _createPromise(onFinish, onError, onInterrupt) {\n var _this = this;\n\n var onResolve = function onResolve(value) {\n _this._playing = false;\n\n _this._speaker.emit(_this._speaker.constructor.EVENTS.stop, _this);\n\n _this._speaker.constructor.emit(_this._speaker.constructor.EVENTS.stop, _this);\n\n if (typeof onFinish === \'function\') {\n onFinish(value);\n }\n };\n\n var onReject = function onReject(e) {\n _this._playing = false;\n\n _this._speaker.emit(_this._speaker.constructor.EVENTS.stop, _this);\n\n _this._speaker.constructor.emit(_this._speaker.constructor.EVENTS.stop, _this);\n\n console.error("".concat(_this.constructor.name, " encountered an unexpected error: ").concat(e));\n\n if (typeof onError === \'function\') {\n onError(e);\n }\n };\n\n var onCancel = function onCancel(value) {\n _this._playing = false;\n\n _this._speaker.emit(_this._speaker.constructor.EVENTS.interrupt, _this);\n\n _this._speaker.constructor.emit(_this._speaker.constructor.EVENTS.interrupt, _this);\n\n if (typeof onInterrupt === \'function\') {\n onInterrupt(value);\n }\n };\n\n this._promise = new core_Deferred(undefined, onResolve, onReject, onCancel);\n return this._promise;\n }\n /**\r\n * Return whether or not the speech has reached it\'s end.\r\n *\r\n * @private\r\n *\r\n * @returns {boolean}\r\n */\n\n }, {\n key: "_checkFinished",\n value: function _checkFinished() {\n return this._done && this._localTime >= this._endTime;\n }\n /**\r\n * Gets the playback state of the audio.\r\n *\r\n * @readonly\r\n * @type {boolean}\r\n */\n\n }, {\n key: "playing",\n get: function get() {\n return this._playing;\n }\n /**\r\n * Gets the text of the speech.\r\n *\r\n * @readonly\r\n * @type {string}\r\n */\n\n }, {\n key: "text",\n get: function get() {\n return this._text;\n }\n /**\r\n * Gets a shallow copy of the speechmarks array for the speech.\r\n *\r\n * @readonly\r\n * @type {Array.}\r\n */\n\n }, {\n key: "speechmarks",\n get: function get() {\n return AbstractSpeech_toConsumableArray(this._speechmarks);\n }\n /**\r\n * Gets and sets the number of seconds to offset speechmark emission.\r\n * @type {number}\r\n */\n\n }, {\n key: "speechmarkOffset",\n get: function get() {\n return this._speechmarkOffset / 1000;\n },\n set: function set(offset) {\n this._speechmarkOffset = offset * 1000; // Store as milliseconds\n }\n /**\r\n * Emit speechmark messages as they are encountered in sync with audio.\r\n *\r\n * @param {number} currentTime - Current global time when update was called.\r\n */\n\n }, {\n key: "update",\n value: function update(currentTime) {\n if (!this._playing) {\n return;\n } // Update local audio time\n\n\n this._localTime = currentTime - this._startTime;\n\n if (!this._done) {\n // Emit speechmark messages for marks up to the current time\n while (!this._done && this._currentMark.time + this._speechmarkOffset <= this._localTime) {\n this._speaker.emit(this._speaker.constructor.EVENTS[this._currentMark.type], {\n speech: this,\n mark: this._currentMark\n });\n\n var _this$_markIter$next2 = this._markIter.next(),\n value = _this$_markIter$next2.value,\n done = _this$_markIter$next2.done;\n\n this._currentMark = value;\n this._done = done;\n }\n } // End playback\n\n\n if (this._checkFinished()) {\n this.stop();\n\n this._reset();\n }\n }\n /**\r\n * Play the speech from the beginning.\r\n *\r\n * @param {number} currentTime - Current global time when play was called.\r\n * @param {Function=} onFinish - Optional function to execute once the speech\r\n * promise resolves.\r\n * @param {Function=} onError - Optional function to execute if the speech\r\n * encounters and error during playback.\r\n * @param {Function=} onInterrupt - Optional function to execute if the speech\r\n * is canceled.\r\n *\r\n * @returns {Deferred} Resolves once the speech reaches the end of playback.\r\n */\n\n }, {\n key: "play",\n value: function play(currentTime, onFinish, onError, onInterrupt) {\n this._reset(currentTime);\n\n this._playing = true;\n\n this._speaker.emit(this._speaker.constructor.EVENTS.play, this);\n\n this._speaker.constructor.emit(this._speaker.constructor.EVENTS.play, this);\n\n return this._createPromise(onFinish, onError, onInterrupt);\n }\n /**\r\n * Pause the speech at the current time.\r\n *\r\n * @param {number} currentTime - Current global time when pause was called.\r\n */\n\n }, {\n key: "pause",\n value: function pause(currentTime) {\n this._playing = false;\n this._pauseTime = currentTime;\n\n this._speaker.emit(this._speaker.constructor.EVENTS.pause, this);\n\n this._speaker.constructor.emit(this._speaker.constructor.EVENTS.pause, this);\n }\n /**\r\n * Resume the speech at the current time.\r\n *\r\n * @param {number} currentTime - Current global time when resume was called.\r\n * @param {Function=} onFinish - Optional function to execute once the speech\r\n * promise resolves.\r\n * @param {Function=} onError - Optional function to execute if the speech\r\n * encounters and error during playback.\r\n * @param {Function=} onInterrupt - Optional function to execute if the speech\r\n * is canceled.\r\n *\r\n * @returns {Deferred} Resolves once the speech reaches the end of playback.\r\n */\n\n }, {\n key: "resume",\n value: function resume(currentTime, onFinish, onError, onInterrupt) {\n // Play from the beginning if the speech hasn\'t played yet\n if (!this._promise) {\n this._reset(currentTime);\n\n this._createPromise(onFinish, onError, onInterrupt);\n }\n\n this._playing = true;\n this._startTime += currentTime - this._pauseTime;\n\n this._speaker.emit(this._speaker.constructor.EVENTS.resume, this);\n\n this._speaker.constructor.emit(this._speaker.constructor.EVENTS.resume, this);\n\n return this._promise;\n }\n /**\r\n * Cancels playback of the speech at the current time. Cancel the speech promise.\r\n */\n\n }, {\n key: "cancel",\n value: function cancel() {\n if (this._promise) {\n this._promise.cancel();\n\n this._promise = null;\n }\n\n this._playing = false;\n }\n /**\r\n * Stop the speech and reset time to the beginning. Resolve the speech promise.\r\n */\n\n }, {\n key: "stop",\n value: function stop() {\n if (this._promise) {\n this._promise.resolve();\n\n this._promise = null;\n }\n\n this._playing = false;\n }\n }]);\n\n return AbstractSpeech;\n}();\n\n/* harmony default export */ var awspack_AbstractSpeech = (AbstractSpeech_AbstractSpeech);\n// CONCATENATED MODULE: ./src/core/awspack/AbstractTextToSpeechFeature.js\nfunction AbstractTextToSpeechFeature_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { AbstractTextToSpeechFeature_typeof = function _typeof(obj) { return typeof obj; }; } else { AbstractTextToSpeechFeature_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return AbstractTextToSpeechFeature_typeof(obj); }\n\nfunction AbstractTextToSpeechFeature_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction AbstractTextToSpeechFeature_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { AbstractTextToSpeechFeature_ownKeys(Object(source), true).forEach(function (key) { AbstractTextToSpeechFeature_defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { AbstractTextToSpeechFeature_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction AbstractTextToSpeechFeature_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction AbstractTextToSpeechFeature_slicedToArray(arr, i) { return AbstractTextToSpeechFeature_arrayWithHoles(arr) || AbstractTextToSpeechFeature_iterableToArrayLimit(arr, i) || AbstractTextToSpeechFeature_unsupportedIterableToArray(arr, i) || AbstractTextToSpeechFeature_nonIterableRest(); }\n\nfunction AbstractTextToSpeechFeature_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."); }\n\nfunction AbstractTextToSpeechFeature_iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction AbstractTextToSpeechFeature_arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction AbstractTextToSpeechFeature_toConsumableArray(arr) { return AbstractTextToSpeechFeature_arrayWithoutHoles(arr) || AbstractTextToSpeechFeature_iterableToArray(arr) || AbstractTextToSpeechFeature_unsupportedIterableToArray(arr) || AbstractTextToSpeechFeature_nonIterableSpread(); }\n\nfunction AbstractTextToSpeechFeature_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."); }\n\nfunction AbstractTextToSpeechFeature_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return AbstractTextToSpeechFeature_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return AbstractTextToSpeechFeature_arrayLikeToArray(o, minLen); }\n\nfunction AbstractTextToSpeechFeature_iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction AbstractTextToSpeechFeature_arrayWithoutHoles(arr) { if (Array.isArray(arr)) return AbstractTextToSpeechFeature_arrayLikeToArray(arr); }\n\nfunction AbstractTextToSpeechFeature_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction AbstractTextToSpeechFeature_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction AbstractTextToSpeechFeature_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction AbstractTextToSpeechFeature_createClass(Constructor, protoProps, staticProps) { if (protoProps) AbstractTextToSpeechFeature_defineProperties(Constructor.prototype, protoProps); if (staticProps) AbstractTextToSpeechFeature_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction AbstractTextToSpeechFeature_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { AbstractTextToSpeechFeature_get = Reflect.get; } else { AbstractTextToSpeechFeature_get = function _get(target, property, receiver) { var base = AbstractTextToSpeechFeature_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return AbstractTextToSpeechFeature_get(target, property, receiver || target); }\n\nfunction AbstractTextToSpeechFeature_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = AbstractTextToSpeechFeature_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction AbstractTextToSpeechFeature_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) AbstractTextToSpeechFeature_setPrototypeOf(subClass, superClass); }\n\nfunction AbstractTextToSpeechFeature_setPrototypeOf(o, p) { AbstractTextToSpeechFeature_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return AbstractTextToSpeechFeature_setPrototypeOf(o, p); }\n\nfunction AbstractTextToSpeechFeature_createSuper(Derived) { var hasNativeReflectConstruct = AbstractTextToSpeechFeature_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = AbstractTextToSpeechFeature_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = AbstractTextToSpeechFeature_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return AbstractTextToSpeechFeature_possibleConstructorReturn(this, result); }; }\n\nfunction AbstractTextToSpeechFeature_possibleConstructorReturn(self, call) { if (call && (AbstractTextToSpeechFeature_typeof(call) === "object" || typeof call === "function")) { return call; } return AbstractTextToSpeechFeature_assertThisInitialized(self); }\n\nfunction AbstractTextToSpeechFeature_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction AbstractTextToSpeechFeature_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction AbstractTextToSpeechFeature_getPrototypeOf(o) { AbstractTextToSpeechFeature_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return AbstractTextToSpeechFeature_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n\n\n\n/**\r\n * The Amazon Polly service object.\r\n * @external Polly\r\n * @see https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Polly.html\r\n */\n\n/**\r\n * The presigner object that can be used to generate presigned urls for the Polly service.\r\n * @external Presigner\r\n * @see https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Polly/Presigner.html\r\n */\n// Available options for Polly\n\nvar engines = [\'standard\', \'neural\'];\nvar audioFormats = [\'mp3\', \'ogg_vorbis\', \'pcm\'];\nvar speechmarkTypes = [\'sentence\', \'ssml\', \'viseme\', \'word\'];\nvar sampleRates = {\n mp3: {\n rates: [\'8000\', \'16000\', \'22050\', \'24000\'],\n defaults: {\n standard: \'2050\',\n neural: \'2400\'\n }\n },\n pcm: {\n rates: [\'8000\', \'16000\'],\n defaults: {\n standard: \'1600\',\n neural: \'1600\'\n }\n }\n};\nsampleRates.ogg_vorbis = sampleRates.mp3;\nvar awsVersion;\n/**\r\n * Base class for turning text input into playable audio. There should be one instance\r\n * per speaker, each instance can play only one piece of text at a time.\r\n *\r\n * @extends AbstractHostFeature\r\n * @abstract\r\n *\r\n * @property {(number|undefined)} AWS_VERSION - Gets the version of AWS SDK being\r\n * used. Will be undefined until [initializeService]{@link AbstractTextToSpeechFeature.initializeService}\r\n * has been successfully executed.\r\n * @property {string} [POLLY_MIN_NEURAL_VERSION=\'2.503\'] - Gets the minimum version\r\n * of the AWS SDK that is necessary to use neural voices with AWS Polly.\r\n * @property {Object} POLLY_DEFAULTS - Default values to use with calls to {@link external:Polly}.\r\n * @property {string} [POLLY_DEFAULTS.Engine=\'standard\']\r\n * @property {Array.} [POLLY_DEFAULTS.LexiconNames=[]]\r\n * @property {string} [POLLY_DEFAULTS.OutputFormat=\'mp3\']\r\n * @property {string} [POLLY_DEFAULTS.SampleRate=\'22050\']\r\n * @property {string} [POLLY_DEFAULTS.Text=\'\']\r\n * @property {string} [POLLY_DEFAULTS.TextType=\'ssml\']\r\n * @property {string} [POLLY_DEFAULTS.VoiceId=\'Amy\']\r\n * @property {string} [POLLY_DEFAULTS.LanguageCode=\'en-GB\']\r\n * @property {string} [POLLY_DEFAULTS.LanguageName=\'British English\']\r\n * @property {Array.} [POLLY_VOICES=[]] - An array of voices available in\r\n * Polly. Will be empty until [initializeService]{@link AbstractTextToSpeechFeature.initializeService}\r\n * has been successfully executed. See [Polly Documentation]{@link https://docs.aws.amazon.com/polly/latest/dg/voicelist.html}\r\n * for a full list of available voices.\r\n * @property {Object} [POLLY_LANGUAGES={}] - An object that maps language names\r\n * to language codes that are available in Polly. Will be empty until\r\n * [initializeService]{@link AbstractTextToSpeechFeature.initializeService}\r\n * has been successfully executed. See [Polly Documentation]{@link https://docs.aws.amazon.com/polly/latest/dg/SupportedLanguage.html}\r\n * for a full list of available languages and corresponding codes.\r\n * @property {Object} [POLLY_LANGUAGE_CODES={}] - An object that maps language codes\r\n * to language names that are available in Polly. Will be empty until\r\n * [initializeService]{@link AbstractTextToSpeechFeature.initializeService}\r\n * has been successfully executed. See [Polly Documentation]{@link https://docs.aws.amazon.com/polly/latest/dg/SupportedLanguage.html}\r\n * for a full list of available languages and corresponding codes.\r\n * @property {Object} EVENTS - Built-in messages that the feature emits. When the\r\n * feature is added to a {@link core/HostObject}, event names will be prefixed by the\r\n * name of the feature class + \'.\'.\r\n * @property {string} [EVENTS.ready=onReadyEvent] - Message that is emitted after\r\n * [initializeService]{@link AbstractTextToSpeechFeature.initializeService} has been\r\n * successfully executed.\r\n * @property {string} [EVENTS.play=onPlayEvent] - Message that is emitted after\r\n * each call to [play]{@link AbstractTextToSpeechFeature#play}. The speech that was played\r\n * is supplied as an argument to listener functions.\r\n * @property {string} [EVENTS.pause=onPauseEvent] - Message that is emitted after\r\n * each call to [pause]{@link AbstractTextToSpeechFeature#pause}. The speech that was paused\r\n * is supplied as an argument to listener functions.\r\n * @property {string} [EVENTS.resume=onResumeEvent] - Message that is emitted after\r\n * each call to [resume]{@link AbstractTextToSpeechFeature#resume}. The speech that was\r\n * resumed is supplied as an argument to listener functions.\r\n * @property {string} [EVENTS.interrupt=onInterruptEvent] - Message that is emitted\r\n * if there is a current speech in progress and [play]{@link AbstractTextToSpeechFeature#play}\r\n * or [resume]{@link AbstractTextToSpeechFeature#resume} are executed for a new speech.\r\n * The speech that was interrupted is supplied as an argument to listener functions.\r\n * @property {string} [EVENTS.stop=onStopEvent] - Message that is emitted after\r\n * each call to [stop]{@link AbstractTextToSpeechFeature#stop} and when a speech reaches\r\n * the end of playback. The speech that was stopped is supplied as an argument\r\n * to listener functions.\r\n * @property {string} [EVENTS.sentence=onSentenceEvent] - Message that is emitted\r\n * each time a sentence speechmark is encountered whose timestamp matches up with\r\n * the speech audio\'s current time. The sentence speechmark object is supplied as\r\n * an argument to listener functions.\r\n * @property {string} [EVENTS.word=onWordEvent] - Message that is emitted\r\n * each time a word speechmark is encountered whose timestamp matches up with\r\n * the speech audio\'s current time. The word speechmark object is supplied as\r\n * an argument to listener functions.\r\n * @property {string} [EVENTS.viseme=onVisemeEvent] - Message that is emitted\r\n * each time a viseme speechmark is encountered whose timestamp matches up with\r\n * the speech audio\'s current time. The viseme speechmark object is supplied as\r\n * an argument to listener functions.\r\n * @property {string} [EVENTS.ssml=onSsmlEvent] - Message that is emitted\r\n * each time a ssml speechmark is encountered whose timestamp matches up with\r\n * the speech audio\'s current time. The ssml speechmark object is supplied as\r\n * an argument to listener functions.\r\n * @property {Object} SERVICES - AWS services that are necessary for the feature\r\n * to function.\r\n * @property {external:Polly} SERVICES.polly - The Polly service that is used\r\n * to synthesize speechmarks. Will be undefined until [initializeService]{@link AbstractTextToSpeechFeature.initializeService}\r\n * has been successfully executed\r\n * @property {external:Presigner} SERVICES.presigner - The Polly Presigner\r\n * object that is used to synthesize speech audio. Will be undefined until\r\n * [initializeService]{@link AbstractTextToSpeechFeature.initializeService}\r\n * has been successfully executed.\r\n */\n\nvar AbstractTextToSpeechFeature_AbstractTextToSpeechFeature = /*#__PURE__*/function (_AbstractHostFeature) {\n AbstractTextToSpeechFeature_inherits(AbstractTextToSpeechFeature, _AbstractHostFeature);\n\n var _super = AbstractTextToSpeechFeature_createSuper(AbstractTextToSpeechFeature);\n\n /**\r\n * @constructor\r\n *\r\n * @param {core/HostObject} host - Host object managing the feature.\r\n * @param {Object=} options - Options that will be sent to Polly for each speech.\r\n * @param {string=} options.voice - The name of the Polly voice to use for all speech.\r\n * @param {string=} options.engine - The name of the Polly engine to use for all speech.\r\n * @param {string=} options.language - The name of the language to use for all speech.\r\n * @param {audioFormat} [options.audioFormat=\'mp3\'] - The format to use for generated\r\n * audio for all speeches.\r\n * @param {string=} options.sampleRate - The sample rate for audio files for all\r\n * speeches.\r\n * @param {number} [options.speechmarkOffset=0] - Amount of time in seconds to\r\n * offset speechmark event emission from the audio.\r\n * @param {number} [options.minEndMarkDuration=.05] - The minimum amount of time\r\n * in seconds that the last speechmark of each type in a speech can have its\r\n * duration property set to.\r\n * @param {number} [options.volume=1] - The default volume to play speech audio\r\n * with.\r\n * @param {boolean} [options.isGlobal=false] - Whether the audio source should default\r\n * to global regardless of whether or not it is attached to an object.\r\n */\n function AbstractTextToSpeechFeature(host) {\n var _this;\n\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n voice: undefined,\n engine: undefined,\n language: undefined,\n audioFormat: \'mp3\',\n sampleRate: undefined,\n speechmarkOffset: 0,\n minEndMarkDuration: 0.05,\n volume: 1,\n isGlobal: false\n };\n\n AbstractTextToSpeechFeature_classCallCheck(this, AbstractTextToSpeechFeature);\n\n _this = _super.call(this, host);\n _this._speechCache = {};\n _this._currentSpeech = null;\n _this._currentPromise = null;\n _this._isValidated = false;\n _this.speechmarkOffset = Number.isNaN(Number(options.speechmarkOffset)) ? 0 : Number(options.speechmarkOffset);\n _this.minEndMarkDuration = Number.isNaN(Number(options.minEndMarkDuration)) ? 0 : Number(options.minEndMarkDuration);\n _this.volume = Number.isNaN(Number(options.volume)) ? 1 : Number(options.volume);\n _this._isGlobal = options.isGlobal || false;\n _this._promises = {\n volume: core_Deferred.resolve()\n };\n _this._volumePaused = false; // Set default options for each speech\n\n _this._voice = options.voice || _this.constructor.POLLY_DEFAULTS.VoiceId;\n _this._language = options.language || _this.constructor.POLLY_DEFAULTS.LanguageName;\n _this._engine = engines.includes(options.engine) ? options.engine : _this.constructor.POLLY_DEFAULTS.Engine;\n _this._audioFormat = audioFormats.includes(options.audioFormat) ? options.audioFormat : _this.constructor.POLLY_DEFAULTS.OutputFormat;\n _this._sampleRate = sampleRates[_this._audioFormat].rates.includes(options.sampleRate) ? options.sampleRate : _this.constructor.POLLY_DEFAULTS.SampleRate;\n return _this;\n }\n /**\r\n * Store Polly, Presigner and AWS SDK Version for use across all instances.\r\n *\r\n * @param {external:Polly} polly - Polly instance to use to generate speechmarks.\r\n * @param {external:Presigner} presigner - Presigner instance to use to generate\r\n * audio URLs.\r\n * @param {string} version - Version of the AWS SDK to use to validate voice options.\r\n */\n\n\n AbstractTextToSpeechFeature_createClass(AbstractTextToSpeechFeature, [{\n key: "currentSpeech",\n get:\n /**\r\n * Gets the text of the currently playing speech.\r\n *\r\n * @readonly\r\n * @type {string}\r\n */\n function get() {\n if (this._currentSpeech) {\n return this._currentSpeech.text;\n } else {\n return null;\n }\n }\n /**\r\n * Gets and sets the number of seconds to offset speechmark emission.\r\n *\r\n * @type {number}\r\n */\n\n }, {\n key: "speechmarkOffset",\n get: function get() {\n return this._speechmarkOffset;\n },\n set: function set(offset) {\n this._speechmarkOffset = offset;\n\n if (this._currentSpeech) {\n this._currentSpeech.speechmarkOffset = offset;\n }\n }\n /**\r\n * Gets and sets the The minimum amount of time in seconds that the last\r\n * speechmark of each type in a speech can have its duration property set to.\r\n *\r\n * @type number\r\n */\n\n }, {\n key: "minEndMarkDuration",\n get: function get() {\n return this._minEndMarkDuration / 1000;\n },\n set: function set(duration) {\n this._minEndMarkDuration = duration * 1000;\n }\n /**\r\n * Appends the Sumerian Hosts custom user-agent to a string if it is not\r\n * already present.\r\n *\r\n * @private\r\n *\r\n * @param {string} currentUserAgent - String to append to if needed.\r\n *\r\n * @returns {string}\r\n */\n\n }, {\n key: "_validateEngine",\n value:\n /**\r\n * Checks if a given engine type is compatible with the AWS SDK version. If it\r\n * is, return the original value. Otherwise return a default.\r\n *\r\n * @private\r\n *\r\n * @param {string} engine - The type of Polly voice engine to validate.\r\n *\r\n * @returns {string}\r\n */\n function _validateEngine(engine) {\n // Default to the standard engine if neural is not available for this version\n if (engine === undefined || this.constructor.AWS_VERSION < this.constructor.POLLY_MIN_NEURAL_VERSION) {\n engine = this.constructor.POLLY_DEFAULTS.Engine;\n }\n\n return engine;\n }\n /**\r\n * Checks if a given audio format type is compatible with Polly. If it is, return\r\n * the original value. Otherwise return a default.\r\n *\r\n * @private\r\n *\r\n * @param {string} engine - The type of Polly voice engine to validate.\r\n *\r\n * @returns {string}\r\n */\n\n }, {\n key: "_validateFormat",\n value: function _validateFormat(format) {\n if (format === undefined || !audioFormats.includes(format)) {\n format = this.constructor.POLLY_DEFAULTS.OutputFormat;\n }\n\n return format;\n }\n /**\r\n * Checks if a given audio sampling rate is compatible with the current audio\r\n * format. If it is, return the original value. Otherwise return a default.\r\n *\r\n * @private\r\n *\r\n * @param {string} engine - The type of Polly voice engine to validate.\r\n *\r\n * @returns {string}\r\n */\n\n }, {\n key: "_validateRate",\n value: function _validateRate(rate) {\n // Use default if specified sample rate is not valid for the audio format\n if (rate === undefined || !sampleRates[this._audioFormat].rates.includes(rate)) {\n rate = sampleRates[this._audioFormat].defaults[this._engine];\n }\n\n return rate;\n }\n /**\r\n * Checks if a given Polly voice id is compatible with the current Polly engine.\r\n * If it is, return the original value. Otherwise return a default.\r\n *\r\n * @private\r\n *\r\n * @param {string} engine - The type of Polly voice engine to validate.\r\n *\r\n * @returns {string}\r\n */\n\n }, {\n key: "_validateVoice",\n value: function _validateVoice(voiceId) {\n var voice = this.constructor.POLLY_VOICES.find(function (v) {\n return v.Id === voiceId;\n }); // Use the default voice if the voice isn\'t supported by the engine\n\n if (voice === undefined || !voice.SupportedEngines.includes(this._engine)) {\n voiceId = this.constructor.POLLY_DEFAULTS.VoiceId;\n }\n\n return voiceId;\n }\n /**\r\n * Checks if a given Polly language is compatible with the current Polly voice.\r\n * If it is, return the original value. Otherwise return a default.\r\n *\r\n * @private\r\n *\r\n * @param {string} engine - The type of Polly voice engine to validate.\r\n *\r\n * @returns {string}\r\n */\n\n }, {\n key: "_validateLanguage",\n value: function _validateLanguage(language) {\n var _this2 = this;\n\n var voice = this.constructor.POLLY_VOICES.find(function (v) {\n return v.Id === _this2._voice;\n });\n var languageCode = this.constructor.POLLY_LANGUAGES[language]; // Find the languages available for the current voice\n\n var availableCodes = [voice.LanguageCode];\n\n if (voice.AdditionalLanguageCodes) {\n availableCodes.push.apply(availableCodes, AbstractTextToSpeechFeature_toConsumableArray(voice.AdditionalLanguageCodes));\n } // If the current voice doesn\'t support the language, use its default\n\n\n if (!availableCodes.includes(languageCode)) {\n language = this.constructor.POLLY_LANGUAGE_CODES[voice.LanguageCode];\n }\n\n return language;\n }\n /**\r\n * Validate the current Polly options to make sure they are compatible with each\r\n * other.\r\n *\r\n * @private\r\n */\n\n }, {\n key: "_validate",\n value: function _validate() {\n // Validate speech parameters\n this._engine = this._validateEngine(this._engine);\n this._audioFormat = this._validateFormat(this._audioFormat);\n this._sampleRate = this._validateRate(this._sampleRate);\n this._voice = this._validateVoice(this._voice);\n this._language = this._validateLanguage(this._language);\n this._isValidated = true;\n }\n /**\r\n * Return an object containing parameters compatible with Polly.synthesizeSpeech.\r\n *\r\n * @private\r\n *\r\n * @returns {Object}\r\n */\n\n }, {\n key: "_getConfig",\n value: function _getConfig() {\n // Make sure parameters have been validated\n if (this.constructor.isReady && !this._isValidated) {\n this._validate();\n } // Create a config object compatible with Polly\n\n\n return {\n Engine: this._engine,\n OutputFormat: this._audioFormat,\n SampleRate: this._sampleRate,\n VoiceId: this._voice,\n LanguageCode: this.constructor.POLLY_LANGUAGES[this._language]\n };\n }\n /**\r\n * Update Polly parameters with options from a given config. All stored speeches\r\n * will be updated to use the new parameters, unless the speech text is contained\r\n * in the \'skipSpeeches\' parameter.\r\n *\r\n * @private\r\n *\r\n * @param {Object} config - Polly parameter options to overwrite.\r\n * @param {Array.} skipSpeeches - Text of any speeches that should not\r\n * have parameters updated.\r\n *\r\n * @returns {Object}\r\n */\n\n }, {\n key: "_updateConfig",\n value: function _updateConfig(config) {\n var _this3 = this;\n\n var skipSpeeches = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n\n var currentConfig = this._getConfig();\n\n if (!config) {\n return currentConfig;\n }\n\n this._isValidated = false;\n var currentConfigStr = JSON.stringify(currentConfig); // Update options\n\n if (config.Engine) {\n this._engine = config.Engine;\n }\n\n if (config.audioFormat) {\n this._audioFormat = config.audioFormat;\n }\n\n if (config.SampleRate) {\n this._sampleRate = config.SampleRate;\n }\n\n if (config.VoiceId) {\n this._voice = config.VoiceId;\n }\n\n if (config.Language) {\n this._language = config.Language;\n } // Validate the config\n\n\n var validConfig = this._getConfig(); // Exit if nothing has changed\n\n\n var configStr = JSON.stringify(validConfig);\n\n if (currentConfigStr === configStr) {\n this._isValidated = true;\n return validConfig;\n } // Update all cached configs\n\n\n Object.entries(this._speechCache).forEach(function (_ref) {\n var _ref2 = AbstractTextToSpeechFeature_slicedToArray(_ref, 2),\n text = _ref2[0],\n speech = _ref2[1];\n\n // Check if this is a skipped speech\n if (skipSpeeches.includes(text)) {\n return;\n }\n\n var speechConfigStr = JSON.stringify(speech.config); // Update the speech with new parameters\n\n if (speechConfigStr !== configStr) {\n _this3._updateSpeech(text, validConfig);\n }\n });\n return validConfig;\n }\n /**\r\n * Update an existing speech, or add a new speech with new Polly parameters with\r\n * options from a given config.\r\n *\r\n * @private\r\n *\r\n * @param {string} text - The text of the speech to update.\r\n * @param {Object} config - Polly parameter options to update.\r\n * @param {boolean} [force=false] - Whether to force the speech to be updated\r\n * if no parameters have changes.\r\n *\r\n * @returns {AbstractSpeech}\r\n */\n\n }, {\n key: "_updateSpeech",\n value: function _updateSpeech(text, config) {\n var _this4 = this;\n\n var force = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n var speech = this._speechCache[text] || {}; // Exit if nothing has changed and force is false\n\n if (!force && config !== undefined && speech.config && JSON.stringify(config) === JSON.stringify(speech.config)) {\n return speech;\n } // Create separate parameters for audio and speechmark generation\n\n\n var audioParams = AbstractTextToSpeechFeature_objectSpread(AbstractTextToSpeechFeature_objectSpread({}, config), {}, {\n Text: text,\n TextType: \'ssml\'\n });\n\n var speechmarkParams = AbstractTextToSpeechFeature_objectSpread(AbstractTextToSpeechFeature_objectSpread({}, audioParams), {}, {\n OutputFormat: \'json\',\n SpeechMarkTypes: speechmarkTypes\n }); // Generate audio and speechmarks\n\n\n speech.config = config;\n speech.promise = Promise.all([this._synthesizeSpeechmarks(speechmarkParams), this._synthesizeAudio(audioParams)]).then(function (results) {\n return _this4._createSpeech.apply(_this4, [text].concat(AbstractTextToSpeechFeature_toConsumableArray(results)));\n });\n this._speechCache[text] = speech;\n return speech;\n }\n /**\r\n * Create a new Speech object for the speaker.\r\n *\r\n * @private\r\n *\r\n * @param {TextToSpeech} speaker - The TextToSpeech instance that will own the speech.\r\n * @param {string} text - Text of the speech.\r\n * @param {Object} speechmarks - Speechmarks for the speech.\r\n * @param {Object} audioConfig - Audio for the speech.\r\n *\r\n * @returns {AbstractSpeech}\r\n */\n\n }, {\n key: "_createSpeech",\n value: function _createSpeech(text, speechmarks, audioConfig) {\n return new awspack_AbstractSpeech(this, text, speechmarks, audioConfig);\n }\n /**\r\n * Create presigned URL of speech audio for the given speech text.\r\n *\r\n * @private\r\n *\r\n * @param {Object} params - Parameters object compatible with Polly.synthesizeSpeech.\r\n *\r\n * @returns {Deferred} Resolves with an object containing the audio URL.\r\n */\n\n }, {\n key: "_synthesizeAudio",\n value: function _synthesizeAudio(params) {\n var _this5 = this;\n\n return new core_Deferred(function (resolve, reject) {\n _this5.constructor.SERVICES.presigner.getSynthesizeSpeechUrl(params, function (error, url) {\n if (!error) {\n resolve({\n url: url\n });\n } else {\n reject(error);\n }\n });\n });\n }\n /**\r\n * Retrieves and parses speechmarks for the given speech text.\r\n *\r\n * @private\r\n *\r\n * @param {Object} params - Parameters object compatible with Polly.synthesizeSpeech.\r\n *\r\n * @returns {Deferred} Resolves with an array of speechmark objects\r\n */\n\n }, {\n key: "_synthesizeSpeechmarks",\n value: function _synthesizeSpeechmarks(params) {\n var _this6 = this;\n\n return this.constructor.SERVICES.polly.synthesizeSpeech(params).promise().then(function (result) {\n // Convert charcodes to string\n var jsonString = JSON.stringify(result.AudioStream);\n var json = JSON.parse(jsonString);\n var dataStr = json.data.map(function (c) {\n return String.fromCharCode(c);\n }).join(\'\');\n var markTypes = {\n sentence: [],\n word: [],\n viseme: [],\n ssml: []\n };\n var endMarkTypes = {\n sentence: null,\n word: null,\n viseme: null,\n ssml: null\n }; // Split by enclosing {} to create speechmark objects\n\n var speechMarks = AbstractTextToSpeechFeature_toConsumableArray(dataStr.matchAll(/\\{.*?\\}(?=\\n|$)/gm)).map(function (match) {\n var mark = JSON.parse(match[0]); // Set the duration of the last speechmark stored matching this one\'s type\n\n var numMarks = markTypes[mark.type].length;\n\n if (numMarks > 0) {\n var lastMark = markTypes[mark.type][numMarks - 1];\n lastMark.duration = mark.time - lastMark.time;\n }\n\n markTypes[mark.type].push(mark);\n endMarkTypes[mark.type] = mark;\n return mark;\n }); // Find the time of the latest speechmark\n\n\n var endTimes = [];\n\n if (endMarkTypes.sentence) {\n endTimes.push(endMarkTypes.sentence.time);\n }\n\n if (endMarkTypes.word) {\n endTimes.push(endMarkTypes.word.time);\n }\n\n if (endMarkTypes.viseme) {\n endTimes.push(endMarkTypes.viseme.time);\n }\n\n if (endMarkTypes.ssml) {\n endTimes.push(endMarkTypes.ssml.time);\n }\n\n var endTime = Math.max.apply(Math, endTimes); // Calculate duration for the ending speechMarks of each type\n\n if (endMarkTypes.sentence) {\n endMarkTypes.sentence.duration = Math.max(_this6._minEndMarkDuration, endTime - endMarkTypes.sentence.time);\n }\n\n if (endMarkTypes.word) {\n endMarkTypes.word.duration = Math.max(_this6._minEndMarkDuration, endTime - endMarkTypes.word.time);\n }\n\n if (endMarkTypes.viseme) {\n endMarkTypes.viseme.duration = Math.max(_this6._minEndMarkDuration, endTime - endMarkTypes.viseme.time);\n }\n\n if (endMarkTypes.ssml) {\n endMarkTypes.ssml.duration = Math.max(_this6._minEndMarkDuration, endTime - endMarkTypes.ssml.time);\n }\n\n return speechMarks;\n });\n }\n /**\r\n * Returns a Speech object that has the given text.\r\n *\r\n * @private\r\n *\r\n * @param {string} text - The text content of the Speech.\r\n * @param {Object=} config - Options to update the Speech with.\r\n *\r\n * @returns {Deferred} Resolves with Speech or null;\r\n */\n\n }, {\n key: "_getSpeech",\n value: function _getSpeech(text, config) {\n // Make sure AWS services exist\n if (!this.constructor.isReady) {\n var e = \'AWS services have not been initialized.\';\n return core_Deferred.reject(e);\n } // Make sure its possible to generate speeches\n\n\n if (!text) {\n var _e2 = \'Cannot play a speech with no text.\';\n return core_Deferred.reject(_e2);\n } // Update the speech with options\n\n\n text = awspack_TextToSpeechUtils.validateText(text);\n config = this._updateConfig(config, text);\n return this._updateSpeech(text, config).promise;\n }\n /**\r\n * Adds a namespace to the host with the name of the feature to contain properties\r\n * and methods from the feature that users of the host need access to.\r\n *\r\n * @see TextToSpeechFeature\r\n */\n\n }, {\n key: "installApi",\n value: function installApi() {\n var _this7 = this;\n\n /**\r\n * @inner\r\n * @namespace TextToSpeechFeature\r\n */\n var api = AbstractTextToSpeechFeature_get(AbstractTextToSpeechFeature_getPrototypeOf(AbstractTextToSpeechFeature.prototype), "installApi", this).call(this);\n\n Object.assign(api, {\n /**\r\n * @memberof TextToSpeechFeature\r\n * @instance\r\n * @method\r\n * @see AbstractTextToSpeechFeature#play\r\n */\n play: this.play.bind(this),\n\n /**\r\n * @memberof TextToSpeechFeature\r\n * @instance\r\n * @method\r\n * @see AbstractTextToSpeechFeature#pause\r\n */\n pause: this.pause.bind(this),\n\n /**\r\n * @memberof TextToSpeechFeature\r\n * @instance\r\n * @method\r\n * @see AbstractTextToSpeechFeature#resume\r\n */\n resume: this.resume.bind(this),\n\n /**\r\n * @memberof TextToSpeechFeature\r\n * @instance\r\n * @method\r\n * @see AbstractTextToSpeechFeature#stop\r\n */\n stop: this.stop.bind(this),\n\n /**\r\n * @memberof TextToSpeechFeature\r\n * @instance\r\n * @method\r\n * @see AbstractTextToSpeechFeature#getVolume\r\n */\n getVolume: this.getVolume.bind(this),\n\n /**\r\n * @memberof TextToSpeechFeature\r\n * @instance\r\n * @method\r\n * @see AbstractTextToSpeechFeature#setVolume\r\n */\n setVolume: this.setVolume.bind(this),\n\n /**\r\n * @memberof TextToSpeechFeature\r\n * @instance\r\n * @method\r\n * @see AbstractTextToSpeechFeature#pauseVolume\r\n */\n pauseVolume: this.pauseVolume.bind(this),\n\n /**\r\n * @memberof TextToSpeechFeature\r\n * @instance\r\n * @method\r\n * @see AbstractTextToSpeechFeature#resumeVolume\r\n */\n resumeVolume: this.resumeVolume.bind(this)\n });\n Object.defineProperties(api, {\n /**\r\n * @memberof TextToSpeechFeature\r\n * @instance\r\n * @see AbstractTextToSpeechFeature#speechmarkOffset\r\n */\n speechmarkOffset: {\n get: function get() {\n return _this7.speechmarkOffset;\n },\n set: function set(offset) {\n _this7.speechmarkOffset = offset;\n }\n }\n });\n return api;\n }\n /**\r\n * Gets and sets the volume used for all audio clips played by the speaker.\r\n *\r\n * @type {number}\r\n */\n\n }, {\n key: "volume",\n get: function get() {\n return this._volume;\n }\n /**\r\n * Gets whether or not the speaker\'s volume value is currently being tweened.\r\n *\r\n * @readonly\r\n * @type {boolean}\r\n */\n ,\n set: function set(volume) {\n this._volume = core_MathUtils.clamp(volume);\n }\n }, {\n key: "volumePending",\n get: function get() {\n return this._promises.volume && this._promises.volume.pending;\n }\n /**\r\n * Gets the volume used for all audio clips played by the speaker.\r\n *\r\n * @returns {number}\r\n */\n\n }, {\n key: "getVolume",\n value: function getVolume() {\n return this.volume;\n }\n /**\r\n * Updates the volume used for all audio clips played by the speaker over time.\r\n *\r\n * @param {number} volume - Target volume value.\r\n * @param {number} [seconds=0] - Amount of time it will take to reach the target\r\n * volume.\r\n * @param {Function=} easingFn - Easing function used for interpolation.\r\n *\r\n * @returns {Deferred}\r\n */\n\n }, {\n key: "setVolume",\n value: function setVolume(volume) {\n var seconds = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var easingFn = arguments.length > 2 ? arguments[2] : undefined;\n\n if (this.volumePending) {\n this._promises.volume.cancel();\n }\n\n volume = core_MathUtils.clamp(volume);\n this._promises.volume = animpack_AnimationUtils.interpolateProperty(this, \'volume\', volume, {\n seconds: seconds,\n easingFn: easingFn\n });\n return this._promises.volume;\n }\n /**\r\n * Pause interpolation happening on the speaker\'s volume property.\r\n *\r\n * @returns {boolean}\r\n */\n\n }, {\n key: "pauseVolume",\n value: function pauseVolume() {\n this._volumePaused = true;\n return this.volumePending;\n }\n /**\r\n * Resume any interpolation happening on the speaker\'s volume property.\r\n *\r\n * @returns {boolean}\r\n */\n\n }, {\n key: "resumeVolume",\n value: function resumeVolume() {\n this._volumePaused = false;\n return this.volumePending;\n }\n /**\r\n * Update the currently playing speech.\r\n *\r\n * @param {number} deltaTime - Time since the last update.\r\n */\n\n }, {\n key: "update",\n value: function update(deltaTime) {\n if (!this._volumePaused) {\n this._promises.volume.execute(deltaTime);\n }\n\n if (this._currentSpeech && this._currentSpeech.playing) {\n this._currentSpeech.volume = this._volume;\n\n this._currentSpeech.update(this._host.now);\n\n AbstractTextToSpeechFeature_get(AbstractTextToSpeechFeature_getPrototypeOf(AbstractTextToSpeechFeature.prototype), "update", this).call(this, deltaTime);\n }\n }\n /**\r\n * Set the current speech to a new asset and update the speech\'s speechmark\r\n * offset value to match that of the feature.\r\n *\r\n * @private\r\n *\r\n * @param {AbstractSpeech} speech - Speech to set as current.\r\n */\n\n }, {\n key: "_setCurrentSpeech",\n value: function _setCurrentSpeech(speech) {\n speech.speechmarkOffset = this._speechmarkOffset;\n this._currentSpeech = speech;\n }\n /**\r\n * Create a promise that will play/resume a speech with the given text after\r\n * the audio context attempts to resume and speech audio is retrieved from Polly.\r\n *\r\n * @private\r\n *\r\n * @param {string} text - The text of the new speech to play.\r\n * @param {Object=} config - Optional parameters for the speech.\r\n * @param {string} [playMethod = \'play\'] - Method to execute on the resulting\r\n * Speech object. Valid options are \'play\' and \'resume\'.\r\n */\n\n }, {\n key: "_startSpeech",\n value: function _startSpeech(text, config) {\n var _this8 = this;\n\n var playMethod = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : \'play\';\n\n // If no text is provided, try to use the current speech\n if (text === undefined && playMethod === \'resume\' && this._currentSpeech) {\n text = this._currentSpeech.text;\n }\n\n var currentPromise = this._currentPromise || {\n play: new core_Deferred(undefined, function () {\n currentPromise.speech.cancel();\n }, function () {\n currentPromise.speech.cancel();\n }, function () {\n currentPromise.speech.cancel();\n }),\n speech: new core_Deferred()\n };\n this._currentPromise = currentPromise;\n\n this._getSpeech(text, config).then(function (speech) {\n // Exit if the promise is no longer pending because of user interaction\n if (!currentPromise.play.pending) {\n return;\n } else if (_this8._currentPromise !== currentPromise) {\n // Cancel if another call to play has already been made\n currentPromise.play.cancel();\n return;\n } // Reset current speech when the speech ends\n\n\n var onFinish = function onFinish() {\n _this8._currentSpeech = null;\n _this8._currentPromise = null;\n }; // Cancel the currently playing speech\n\n\n if (_this8._currentSpeech && _this8._currentSpeech.playing) {\n if (playMethod === \'play\') {\n _this8._currentSpeech.cancel();\n } else if (playMethod === \'resume\' && _this8._currentSpeech.audio !== speech.audio) {\n _this8._currentSpeech.cancel();\n }\n }\n\n _this8._setCurrentSpeech(speech); // Play the speech\n\n\n currentPromise.speech = speech[playMethod](_this8._host.now, onFinish, onFinish, onFinish);\n currentPromise.speech.then(function () {\n if (currentPromise.speech.resolved) {\n currentPromise.play.resolve();\n } else {\n currentPromise.play.cancel();\n }\n })["catch"](function (error) {\n currentPromise.play.reject(error);\n });\n })["catch"](function (e) {\n e = "Cannot ".concat(playMethod, " speech ").concat(text, " on host ").concat(_this8.host.id, ". ").concat(e);\n currentPromise.play.reject(e);\n });\n\n return currentPromise.play;\n }\n /**\r\n * Stop any speeches currently playing and play a new speech from the beginning.\r\n *\r\n * @param {string} text - The text of the new speech to play.\r\n * @param {Object=} config - Optional parameters for the speech.\r\n *\r\n * @returns {Deferred}\r\n */\n\n }, {\n key: "play",\n value: function play(text, config) {\n return this._startSpeech(text, config, \'play\');\n }\n /**\r\n * If a speech is currently playing, pause it at the current time.\r\n */\n\n }, {\n key: "pause",\n value: function pause() {\n if (this._currentSpeech && this._currentSpeech.playing) {\n this._currentSpeech.pause(this._host.now);\n } else {\n console.warn("Cannot pause speech on host ".concat(this.host.id, ". No speech is currently playing"));\n }\n }\n /**\r\n * Stop any speeches currently playing and resume a new speech from the current\r\n * time.\r\n *\r\n * @param {string=} text - The text of the new speech to play. If undefined and\r\n * there is a current speech that is paused, the current speech will be resumed.\r\n * @param {Object=} config - Optional parameters for the speech.\r\n *\r\n * @returns {Deferred}\r\n */\n\n }, {\n key: "resume",\n value: function resume(text, config) {\n return this._startSpeech(text, config, \'resume\');\n }\n /**\r\n * If a speech is currently playing, stop playback and reset time.\r\n */\n\n }, {\n key: "stop",\n value: function stop() {\n if (this._currentSpeech && this._currentSpeech.playing) {\n this._currentSpeech.stop();\n\n this._currentSpeech = null;\n } else {\n console.warn("Cannot stop speech on host ".concat(this.host.id, ". No speech is currently playing."));\n }\n }\n }, {\n key: "discard",\n value: function discard() {\n if (this._currentSpeech && this._currentSpeech.playing) {\n this._currentSpeech.stop();\n }\n\n delete this._speechCache;\n\n AbstractTextToSpeechFeature_get(AbstractTextToSpeechFeature_getPrototypeOf(AbstractTextToSpeechFeature.prototype), "discard", this).call(this);\n }\n }], [{\n key: "initializeService",\n value: function initializeService(polly, presigner, version) {\n var _this9 = this;\n\n // Make sure all were defined\n if (polly === undefined || presigner === undefined || version === undefined) {\n throw new Error(\'Cannot initialize TextToSpeech feature. All arguments must be defined.\');\n } // Add sumerian hosts user-agent\n\n\n if (polly.config) {\n polly.config.customUserAgent = this._withCustomUserAgent(polly.config.customUserAgent);\n }\n\n if (presigner.service && presigner.service.config) {\n presigner.service.config.customUserAgent = this._withCustomUserAgent(presigner.service.config.customUserAgent);\n }\n\n this._isReady = false; // Store parameters\n\n this.SERVICES.polly = polly;\n this.SERVICES.presigner = presigner;\n awsVersion = version; // Clear the current polly objects\n\n var availableVoices = this.POLLY_VOICES;\n availableVoices.length = 0;\n var availableLanguages = this.POLLY_LANGUAGES;\n Object.keys(availableLanguages).forEach(function (name) {\n delete availableLanguages[name];\n });\n var availableLanguageCodes = this.POLLY_LANGUAGE_CODES;\n Object.keys(availableLanguageCodes).forEach(function (name) {\n delete availableLanguageCodes[name];\n }); // Re-populate according to version\n\n var minNeuralSdk = this.POLLY_MIN_NEURAL_VERSION;\n return this.SERVICES.polly.describeVoices().promise().then(function (response) {\n var allCodes = {};\n response.Voices.forEach(function (voice) {\n if (voice.SupportedEngines.includes(\'standard\') || version >= minNeuralSdk) {\n availableVoices.push(voice);\n }\n\n availableVoices.forEach(function (voice) {\n availableLanguages[voice.LanguageName] = voice.LanguageCode;\n allCodes[voice.LanguageCode] = voice.LanguageName;\n });\n });\n Object.entries(availableLanguages).forEach(function (_ref3) {\n var _ref4 = AbstractTextToSpeechFeature_slicedToArray(_ref3, 2),\n name = _ref4[0],\n code = _ref4[1];\n\n availableLanguageCodes[code] = name;\n }); // Notify that we\'re ready to generate speeches\n\n _this9._isReady = true;\n\n _this9.emit(_this9.EVENTS.ready);\n });\n }\n /**\r\n * Indicates whether or not the class is capable of generating speech audio. Polly,\r\n * Presigner and AWS SDK version number must have been defined using\r\n * [initializeService]{@link AbstractTextToSpeechFeature.initializeService}.\r\n *\r\n * @readonly\r\n * @type {boolean}\r\n */\n\n }, {\n key: "isReady",\n get: function get() {\n return this._isReady;\n }\n }, {\n key: "_withCustomUserAgent",\n value: function _withCustomUserAgent(currentUserAgent) {\n var sumerianHostsUserAgent = \'request-source/SumerianHosts\';\n\n if (currentUserAgent == null) {\n return sumerianHostsUserAgent;\n }\n\n if (currentUserAgent.indexOf(sumerianHostsUserAgent) !== -1) {\n return currentUserAgent;\n }\n\n return currentUserAgent.concat(\' \', sumerianHostsUserAgent);\n }\n }]);\n\n return AbstractTextToSpeechFeature;\n}(core_AbstractHostFeature);\n\nObject.defineProperties(AbstractTextToSpeechFeature_AbstractTextToSpeechFeature, {\n AWS_VERSION: {\n get: function get() {\n return awsVersion;\n }\n },\n POLLY_MIN_NEURAL_VERSION: {\n value: \'2.503\',\n writable: false\n },\n POLLY_DEFAULTS: {\n value: {\n Engine: \'standard\',\n LexiconNames: [],\n OutputFormat: \'mp3\',\n SampleRate: \'22050\',\n Text: \'\',\n TextType: \'ssml\',\n VoiceId: \'Amy\',\n LanguageCode: \'en-GB\',\n LanguageName: \'British English\'\n },\n writable: false\n },\n POLLY_VOICES: {\n value: [],\n writable: false\n },\n POLLY_LANGUAGES: {\n value: {},\n writable: false\n },\n POLLY_LANGUAGE_CODES: {\n value: {},\n writable: false\n },\n _isReady: {\n value: false,\n writable: true\n },\n EVENTS: {\n value: AbstractTextToSpeechFeature_objectSpread(AbstractTextToSpeechFeature_objectSpread({}, Object.getPrototypeOf(AbstractTextToSpeechFeature_AbstractTextToSpeechFeature).EVENTS), {}, {\n ready: \'onReadyEvent\',\n play: \'onPlayEvent\',\n pause: \'onPauseEvent\',\n resume: \'onResumeEvent\',\n interrupt: \'onInterruptEvent\',\n stop: \'onStopEvent\',\n sentence: \'onSentenceEvent\',\n word: \'onWordEvent\',\n viseme: \'onVisemeEvent\',\n ssml: \'onSsmlEvent\'\n })\n },\n SERVICES: {\n value: AbstractTextToSpeechFeature_objectSpread(AbstractTextToSpeechFeature_objectSpread({}, Object.getPrototypeOf(AbstractTextToSpeechFeature_AbstractTextToSpeechFeature).SERVICES), {}, {\n polly: undefined,\n presigner: undefined\n })\n }\n});\n/* harmony default export */ var awspack_AbstractTextToSpeechFeature = (AbstractTextToSpeechFeature_AbstractTextToSpeechFeature);\n// CONCATENATED MODULE: ./src/core/awspack/Speech.js\nfunction Speech_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { Speech_typeof = function _typeof(obj) { return typeof obj; }; } else { Speech_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return Speech_typeof(obj); }\n\nfunction Speech_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction Speech_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction Speech_createClass(Constructor, protoProps, staticProps) { if (protoProps) Speech_defineProperties(Constructor.prototype, protoProps); if (staticProps) Speech_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction Speech_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { Speech_get = Reflect.get; } else { Speech_get = function _get(target, property, receiver) { var base = Speech_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return Speech_get(target, property, receiver || target); }\n\nfunction Speech_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = Speech_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction Speech_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) Speech_setPrototypeOf(subClass, superClass); }\n\nfunction Speech_setPrototypeOf(o, p) { Speech_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return Speech_setPrototypeOf(o, p); }\n\nfunction Speech_createSuper(Derived) { var hasNativeReflectConstruct = Speech_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = Speech_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = Speech_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return Speech_possibleConstructorReturn(this, result); }; }\n\nfunction Speech_possibleConstructorReturn(self, call) { if (call && (Speech_typeof(call) === "object" || typeof call === "function")) { return call; } return Speech_assertThisInitialized(self); }\n\nfunction Speech_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction Speech_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction Speech_getPrototypeOf(o) { Speech_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return Speech_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/**\r\n * The built-in class for asynchronous Promises.\r\n * @external Audio\r\n * @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLAudioElement/Audio\r\n */\n\n/**\r\n * @extends AbstractSpeech\r\n * @alias core/Speech\r\n */\n\nvar Speech_Speech = /*#__PURE__*/function (_AbstractSpeech) {\n Speech_inherits(Speech, _AbstractSpeech);\n\n var _super = Speech_createSuper(Speech);\n\n /**\r\n * @constructor\r\n *\r\n * @param {TextToSpeech} speaker - The owner of the Speech that will emit speechmark\r\n * messages.\r\n * @param {string} text - The text of the speech.\r\n * @param {Array.} [speechmarks=[]] - An array of speechmark objects representing\r\n * the text and timing of the speech.\r\n * @param {Object} audioConfig - Object containing audio and url.\r\n * @param {external:Audio} audioConfig.audio - Playable audio object.\r\n */\n function Speech(speaker, text) {\n var _this;\n\n var speechmarks = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];\n var audioConfig = arguments.length > 3 ? arguments[3] : undefined;\n\n Speech_classCallCheck(this, Speech);\n\n _this = _super.call(this, speaker, text, speechmarks);\n _this._audio = audioConfig.audio; // Keep track of whether the audio has finished playing through\n\n _this._audio.onended = function () {\n _this._audioFinished = true;\n };\n\n _this._audioFinished = true;\n return _this;\n }\n\n Speech_createClass(Speech, [{\n key: "_checkFinished",\n value: function _checkFinished() {\n return this._audioFinished && Speech_get(Speech_getPrototypeOf(Speech.prototype), "_checkFinished", this).call(this);\n }\n /**\r\n * Gets the playable audio for the speech.\r\n *\r\n * @readonly\r\n * @type {external:Audio}\r\n */\n\n }, {\n key: "audio",\n get: function get() {\n return this._audio;\n }\n /**\r\n * Gets the audio volume for the speech.\r\n *\r\n * @type {number}\r\n */\n\n }, {\n key: "volume",\n get: function get() {\n return this._audio.volume;\n }\n /**\r\n * Sets the audio volume for the speech.\r\n */\n ,\n set: function set(volume) {\n this._audio.volume = volume;\n }\n /**\r\n * Set the audio\'s current local time and play it.\r\n *\r\n * @private\r\n */\n\n }, {\n key: "_playAudio",\n value: function _playAudio() {\n var _this2 = this;\n\n if (this._speechmarkOffset < 0) {\n this._audio.currentTime = this._speechmarkOffset;\n setTimeout(function () {\n if (_this2._playing) {\n _this2._audio.currentTime = (_this2._localTime + _this2._speechmarkOffset) / 1000;\n\n _this2._audio.play();\n }\n }, -this._speechmarkOffset);\n } else {\n this._audio.currentTime = 0;\n\n this._audio.play();\n }\n }\n /**\r\n * Pause the audio once it is playable.\r\n *\r\n * @private\r\n */\n\n }, {\n key: "_pauseAudio",\n value: function _pauseAudio() {\n var _this3 = this;\n\n this._audio.play().then(function () {\n if (!_this3._playing) {\n _this3._audio.pause();\n }\n });\n }\n }, {\n key: "play",\n value: function play(currentTime, onFinish, onError, onInterrupt) {\n this._audioFinished = false;\n\n this._playAudio();\n\n return Speech_get(Speech_getPrototypeOf(Speech.prototype), "play", this).call(this, currentTime, onFinish, onError, onInterrupt);\n }\n }, {\n key: "pause",\n value: function pause(currentTime) {\n this._pauseAudio();\n\n Speech_get(Speech_getPrototypeOf(Speech.prototype), "pause", this).call(this, currentTime);\n }\n }, {\n key: "resume",\n value: function resume(currentTime, onFinish, onError, onInterrupt) {\n this._audioFinished = false;\n\n this._audio.play();\n\n return Speech_get(Speech_getPrototypeOf(Speech.prototype), "resume", this).call(this, currentTime, onFinish, onError, onInterrupt);\n }\n }, {\n key: "cancel",\n value: function cancel() {\n this._pauseAudio();\n\n Speech_get(Speech_getPrototypeOf(Speech.prototype), "cancel", this).call(this);\n }\n }, {\n key: "stop",\n value: function stop() {\n this._pauseAudio();\n\n this._audio.currentTime = 0;\n\n Speech_get(Speech_getPrototypeOf(Speech.prototype), "stop", this).call(this);\n }\n }]);\n\n return Speech;\n}(awspack_AbstractSpeech);\n\n/* harmony default export */ var awspack_Speech = (Speech_Speech);\n// CONCATENATED MODULE: ./src/Babylon.js/awspack/Speech.js\nfunction awspack_Speech_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { awspack_Speech_typeof = function _typeof(obj) { return typeof obj; }; } else { awspack_Speech_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return awspack_Speech_typeof(obj); }\n\nfunction awspack_Speech_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction awspack_Speech_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction awspack_Speech_createClass(Constructor, protoProps, staticProps) { if (protoProps) awspack_Speech_defineProperties(Constructor.prototype, protoProps); if (staticProps) awspack_Speech_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction awspack_Speech_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { awspack_Speech_get = Reflect.get; } else { awspack_Speech_get = function _get(target, property, receiver) { var base = awspack_Speech_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return awspack_Speech_get(target, property, receiver || target); }\n\nfunction awspack_Speech_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = awspack_Speech_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction awspack_Speech_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) awspack_Speech_setPrototypeOf(subClass, superClass); }\n\nfunction awspack_Speech_setPrototypeOf(o, p) { awspack_Speech_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return awspack_Speech_setPrototypeOf(o, p); }\n\nfunction awspack_Speech_createSuper(Derived) { var hasNativeReflectConstruct = awspack_Speech_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = awspack_Speech_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = awspack_Speech_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return awspack_Speech_possibleConstructorReturn(this, result); }; }\n\nfunction awspack_Speech_possibleConstructorReturn(self, call) { if (call && (awspack_Speech_typeof(call) === "object" || typeof call === "function")) { return call; } return awspack_Speech_assertThisInitialized(self); }\n\nfunction awspack_Speech_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction awspack_Speech_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction awspack_Speech_getPrototypeOf(o) { awspack_Speech_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return awspack_Speech_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n/**\r\n * @extends core/Speech\r\n * @alias Babylon.js/Speech\r\n */\n\nvar awspack_Speech_Speech = /*#__PURE__*/function (_CoreSpeech) {\n awspack_Speech_inherits(Speech, _CoreSpeech);\n\n var _super = awspack_Speech_createSuper(Speech);\n\n /**\r\n * @constructor\r\n *\r\n * @param {Babylon.js/TextToSpeechFeature} speaker - The owner of the Speech\r\n * that will emit speechmark messages.\r\n * @param {string} text - The text of the speech.\r\n * @param {Array.} [speechmarks=[]] - An array of speechmark objects representing\r\n * the text and timing of the speech.\r\n * @param {Object} audioConfig - Object containing audio and url.\r\n * @param {external:Audio} audioConfig.audio - Playable audio object.\r\n */\n function Speech() {\n var _this;\n\n awspack_Speech_classCallCheck(this, Speech);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _this._audio.onEndedObservable.add(function () {\n _this._audioFinished = true;\n });\n\n return _this;\n }\n\n awspack_Speech_createClass(Speech, [{\n key: "_playAudio",\n value: function _playAudio() {\n if (this._speechmarkOffset < 0) {\n this._audio.play(-this._speechmarkOffset / 1000);\n } else {\n this._audio.play();\n }\n }\n }, {\n key: "_pauseAudio",\n value: function _pauseAudio() {\n this._audio.pause();\n }\n }, {\n key: "volume",\n get: function get() {\n return this._audio.getVolume();\n },\n set: function set(volume) {\n this._audio.setVolume(volume);\n }\n }, {\n key: "play",\n value: function play(currentTime, onFinish, onError, onInterrupt) {\n this._audio.stop();\n\n return awspack_Speech_get(awspack_Speech_getPrototypeOf(Speech.prototype), "play", this).call(this, currentTime, onFinish, onError, onInterrupt);\n }\n }, {\n key: "stop",\n value: function stop() {\n this._audio.stop();\n\n awspack_AbstractSpeech.prototype.stop.call(this);\n }\n }]);\n\n return Speech;\n}(awspack_Speech);\n\n/* harmony default export */ var Babylon_js_awspack_Speech = (awspack_Speech_Speech);\n// CONCATENATED MODULE: ./src/core/awspack/TextToSpeechFeature.js\nfunction TextToSpeechFeature_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { TextToSpeechFeature_typeof = function _typeof(obj) { return typeof obj; }; } else { TextToSpeechFeature_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return TextToSpeechFeature_typeof(obj); }\n\nfunction TextToSpeechFeature_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction TextToSpeechFeature_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction TextToSpeechFeature_createClass(Constructor, protoProps, staticProps) { if (protoProps) TextToSpeechFeature_defineProperties(Constructor.prototype, protoProps); if (staticProps) TextToSpeechFeature_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction TextToSpeechFeature_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { TextToSpeechFeature_get = Reflect.get; } else { TextToSpeechFeature_get = function _get(target, property, receiver) { var base = TextToSpeechFeature_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return TextToSpeechFeature_get(target, property, receiver || target); }\n\nfunction TextToSpeechFeature_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = TextToSpeechFeature_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction TextToSpeechFeature_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) TextToSpeechFeature_setPrototypeOf(subClass, superClass); }\n\nfunction TextToSpeechFeature_setPrototypeOf(o, p) { TextToSpeechFeature_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return TextToSpeechFeature_setPrototypeOf(o, p); }\n\nfunction TextToSpeechFeature_createSuper(Derived) { var hasNativeReflectConstruct = TextToSpeechFeature_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = TextToSpeechFeature_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = TextToSpeechFeature_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return TextToSpeechFeature_possibleConstructorReturn(this, result); }; }\n\nfunction TextToSpeechFeature_possibleConstructorReturn(self, call) { if (call && (TextToSpeechFeature_typeof(call) === "object" || typeof call === "function")) { return call; } return TextToSpeechFeature_assertThisInitialized(self); }\n\nfunction TextToSpeechFeature_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction TextToSpeechFeature_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction TextToSpeechFeature_getPrototypeOf(o) { TextToSpeechFeature_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return TextToSpeechFeature_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n/**\r\n * @extends AbstractTextToSpeechFeature\r\n * @alias core/TextToSpeechFeature\r\n */\n\nvar TextToSpeechFeature_TextToSpeechFeature = /*#__PURE__*/function (_AbstractTextToSpeech) {\n TextToSpeechFeature_inherits(TextToSpeechFeature, _AbstractTextToSpeech);\n\n var _super = TextToSpeechFeature_createSuper(TextToSpeechFeature);\n\n function TextToSpeechFeature() {\n var _this;\n\n TextToSpeechFeature_classCallCheck(this, TextToSpeechFeature);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n _this._enabled = false;\n\n _this._setAudioContext();\n\n _this._observeAudioContext();\n\n return _this;\n }\n /**\r\n * Store the audio context that will be used to ensure audio can be played.\r\n *\r\n * @private\r\n */\n\n\n TextToSpeechFeature_createClass(TextToSpeechFeature, [{\n key: "_setAudioContext",\n value: function _setAudioContext() {\n this._audioContext = new AudioContext();\n }\n /**\r\n * Listen for state changes on the audio context to determine whether the feature\r\n * is enabled.\r\n *\r\n * @private\r\n */\n\n }, {\n key: "_observeAudioContext",\n value: function _observeAudioContext() {\n var _this2 = this;\n\n if (this._audioContext) {\n this._audioContext.onstatechange = function () {\n if (_this2._audioContext.state === \'running\') {\n _this2._enabled = true;\n } else {\n _this2._enabled = false;\n console.warn(\'The audio context is not running. Speech will not be able to be played until it is resumed. Use the "TextToSpeechFeature.resumeAudio" method to try to resume it after a user gesture.\');\n }\n };\n\n this._audioContext.onstatechange();\n }\n }\n /**\r\n * Create an Audio object of speech audio for the given speech text.\r\n *\r\n * @private\r\n *\r\n * @param {Object} params - Parameters object compatible with Polly.synthesizeSpeech.\r\n *\r\n * @returns {Promise} Resolves with an object containing the audio URL and Audio\r\n * object.\r\n */\n\n }, {\n key: "_synthesizeAudio",\n value: function _synthesizeAudio(params) {\n var _this3 = this;\n\n return TextToSpeechFeature_get(TextToSpeechFeature_getPrototypeOf(TextToSpeechFeature.prototype), "_synthesizeAudio", this).call(this, params).then(function (result) {\n var url = result.url; // Create an Audio object that points to the presigned url\n\n var audio = new Audio(url);\n audio.loop = _this3.loop;\n audio.crossOrigin = \'anonymous\';\n audio.preload = \'auto\';\n result.audio = audio;\n return new Promise(function (resolve) {\n // Resolve once the minimum amount is loaded\n audio.addEventListener(\'canplaythrough\', function () {\n resolve(result);\n }); // Start loading the audio\n\n document.body.appendChild(audio);\n audio.load();\n });\n });\n }\n /**\r\n * Create a new Speech object for the speaker.\r\n *\r\n * @private\r\n *\r\n * @param {TextToSpeech} speaker - The TextToSpeech instance that will own the speech.\r\n * @param {string} text - Text of the speech.\r\n * @param {Object} speechmarks - Speechmarks for the speech.\r\n * @param {Object} audioConfig - Audio for the speech.\r\n *\r\n * @returns {AbstractSpeech}\r\n */\n\n }, {\n key: "_createSpeech",\n value: function _createSpeech(text, speechmarks, audioConfig) {\n return new Babylon_js_awspack_Speech(this, text, speechmarks, audioConfig);\n }\n /**\r\n * Gets whether or not the audio context is running and speech can be played.\r\n *\r\n * @readonly\r\n * @type {boolean}\r\n */\n\n }, {\n key: "enabled",\n get: function get() {\n return this._enabled;\n }\n /**\r\n * Try to resume the audio context. This will be automatically executed each time\r\n * speech is played or resumed. If using manually, it should be called after a\r\n * user interaction occurs.\r\n *\r\n * @returns {Deferred} - Resolves once the audio context has resumed.\r\n */\n\n }, {\n key: "resumeAudio",\n value: function resumeAudio() {\n var _this4 = this;\n\n var promise = new core_Deferred(function (resolve, reject) {\n _this4._audioContext.resume().then(function () {\n _this4._enabled = true;\n resolve();\n })["catch"](function (e) {\n _this4._enabled = false;\n reject(e);\n });\n });\n return promise;\n }\n }, {\n key: "_startSpeech",\n value: function _startSpeech(text, config) {\n var _this5 = this;\n\n var playMethod = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : \'play\';\n var currentPromise = {\n play: new core_Deferred(undefined, function () {\n currentPromise.speech.cancel();\n }, function () {\n currentPromise.speech.cancel();\n }, function () {\n currentPromise.speech.cancel();\n }),\n speech: new core_Deferred()\n };\n this._currentPromise = currentPromise; // Try to start the audio context\n\n this.resumeAudio().then(function () {\n // Exit if the promise is no longer pending because of user interaction\n if (!currentPromise.play.pending) {\n return;\n } // Cancel if another call to play has already been made\n else if (_this5._currentPromise !== currentPromise) {\n currentPromise.play.cancel();\n return;\n } // The audio context is running so the speech can be played\n\n\n if (_this5._enabled) {\n TextToSpeechFeature_get(TextToSpeechFeature_getPrototypeOf(TextToSpeechFeature.prototype), "_startSpeech", _this5).call(_this5, text, config, playMethod);\n } // Reject if the audio context is not running\n else {\n currentPromise.reject(new Error("Cannot ".concat(playMethod, " speech on host ").concat(_this5._host.id, ". The audio context is not running. Use the \\"TextToSpeechFeature.resumeAudio\\" method to try to resume it after a user gesture.")));\n }\n });\n return currentPromise.play;\n }\n }, {\n key: "play",\n value: function play(text, config) {\n return this._startSpeech(text, config, \'play\');\n }\n }, {\n key: "resume",\n value: function resume(text, config) {\n return this._startSpeech(text, config, \'resume\');\n }\n }, {\n key: "installApi",\n value: function installApi() {\n var _this6 = this;\n\n var api = TextToSpeechFeature_get(TextToSpeechFeature_getPrototypeOf(TextToSpeechFeature.prototype), "installApi", this).call(this);\n\n Object.defineProperties(api, {\n /**\r\n * @memberof TextToSpeechFeature\r\n * @instance\r\n * @see core/TextToSpeechFeature#enabled\r\n */\n enabled: {\n get: function get() {\n return _this6._enabled;\n }\n }\n });\n return api;\n }\n }]);\n\n return TextToSpeechFeature;\n}(awspack_AbstractTextToSpeechFeature);\n\n/* harmony default export */ var awspack_TextToSpeechFeature = (TextToSpeechFeature_TextToSpeechFeature);\n// CONCATENATED MODULE: ./src/Babylon.js/awspack/TextToSpeechFeature.js\nfunction awspack_TextToSpeechFeature_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { awspack_TextToSpeechFeature_typeof = function _typeof(obj) { return typeof obj; }; } else { awspack_TextToSpeechFeature_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return awspack_TextToSpeechFeature_typeof(obj); }\n\nfunction awspack_TextToSpeechFeature_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction awspack_TextToSpeechFeature_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction awspack_TextToSpeechFeature_createClass(Constructor, protoProps, staticProps) { if (protoProps) awspack_TextToSpeechFeature_defineProperties(Constructor.prototype, protoProps); if (staticProps) awspack_TextToSpeechFeature_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction awspack_TextToSpeechFeature_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { awspack_TextToSpeechFeature_get = Reflect.get; } else { awspack_TextToSpeechFeature_get = function _get(target, property, receiver) { var base = awspack_TextToSpeechFeature_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return awspack_TextToSpeechFeature_get(target, property, receiver || target); }\n\nfunction awspack_TextToSpeechFeature_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = awspack_TextToSpeechFeature_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction awspack_TextToSpeechFeature_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) awspack_TextToSpeechFeature_setPrototypeOf(subClass, superClass); }\n\nfunction awspack_TextToSpeechFeature_setPrototypeOf(o, p) { awspack_TextToSpeechFeature_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return awspack_TextToSpeechFeature_setPrototypeOf(o, p); }\n\nfunction awspack_TextToSpeechFeature_createSuper(Derived) { var hasNativeReflectConstruct = awspack_TextToSpeechFeature_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = awspack_TextToSpeechFeature_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = awspack_TextToSpeechFeature_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return awspack_TextToSpeechFeature_possibleConstructorReturn(this, result); }; }\n\nfunction awspack_TextToSpeechFeature_possibleConstructorReturn(self, call) { if (call && (awspack_TextToSpeechFeature_typeof(call) === "object" || typeof call === "function")) { return call; } return awspack_TextToSpeechFeature_assertThisInitialized(self); }\n\nfunction awspack_TextToSpeechFeature_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction awspack_TextToSpeechFeature_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction awspack_TextToSpeechFeature_getPrototypeOf(o) { awspack_TextToSpeechFeature_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return awspack_TextToSpeechFeature_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n/**\r\n * Babylonjs Scene object\r\n * @external "BABYLON.Scene"\r\n * @see https://doc.babylonjs.com/api/classes/babylon.scene\r\n */\n\n/**\r\n * Babylonjs Mesh object\r\n * @external "BABYLON.Mesh"\r\n * @see https://doc.babylonjs.com/api/classes/babylon.mesh\r\n */\n\n/**\r\n * @extends core/TextToSpeechFeature\r\n * @alias Babylon.js/TextToSpeechFeature\r\n */\n\nvar awspack_TextToSpeechFeature_TextToSpeechFeature = /*#__PURE__*/function (_CoreTextToSpeechFeat) {\n awspack_TextToSpeechFeature_inherits(TextToSpeechFeature, _CoreTextToSpeechFeat);\n\n var _super = awspack_TextToSpeechFeature_createSuper(TextToSpeechFeature);\n\n /**\r\n * @constructor\r\n *\r\n * @param {Babylon.js/HostObject} host - Host object managing the feature.\r\n * @param {Object=} options - Options that will be sent to Polly for each speech.\r\n * @param {external:"BABYLON.Scene"} options.scene - Babylon scene containing the host owner.\r\n * @param {external:"BABYLON.Mesh"=} options.attachTo - Optional mesh to attach the speech\r\n * audio to.\r\n */\n function TextToSpeechFeature(host) {\n var _this;\n\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n voice: undefined,\n engine: undefined,\n language: undefined,\n audioFormat: \'mp3\',\n sampleRate: undefined,\n scene: undefined,\n attachTo: undefined\n };\n\n awspack_TextToSpeechFeature_classCallCheck(this, TextToSpeechFeature);\n\n _this = _super.call(this, host, options);\n _this._scene = options.scene;\n _this._attachTo = options.attachTo || host.owner;\n return _this;\n }\n\n awspack_TextToSpeechFeature_createClass(TextToSpeechFeature, [{\n key: "_setAudioContext",\n value: function _setAudioContext() {\n this._audioContext = BABYLON.Engine.audioEngine.audioContext;\n }\n }, {\n key: "_observeAudioContext",\n value: function _observeAudioContext() {\n var _this2 = this;\n\n if (this._audioContext) {\n awspack_TextToSpeechFeature_get(awspack_TextToSpeechFeature_getPrototypeOf(TextToSpeechFeature.prototype), "_observeAudioContext", this).call(this);\n\n var onstatechange = this._audioContext.onstatechange;\n\n this._audioContext.onstatechange = function () {\n onstatechange();\n\n if (_this2._enabled) {\n BABYLON.Engine.audioEngine.unlock();\n }\n };\n }\n }\n }, {\n key: "_synthesizeAudio",\n value: function _synthesizeAudio(params) {\n var _this3 = this;\n\n // Babylon audio will create the web Audio object, so we don\'t need coreAws.TextToSpeechFeature\n // to create it. Use AbstractTextToSpeechFeature.prototype._synthesizeAudio instead.\n // eslint-disable-next-line no-underscore-dangle\n return awspack_AbstractTextToSpeechFeature.prototype._synthesizeAudio.call(this, params).then(function (result) {\n return new Promise(function (resolve) {\n var url = result.url;\n var name = params.Text;\n result.audio = new BABYLON.Sound(name, url, _this3._scene, function () {\n resolve(result);\n }, {\n streaming: true,\n skipCodecCheck: true\n });\n\n if (_this3._attachTo !== undefined && !_this3._isGlobal) {\n result.audio.attachToMesh(_this3._attachTo);\n }\n });\n });\n }\n }]);\n\n return TextToSpeechFeature;\n}(awspack_TextToSpeechFeature);\n\n/* harmony default export */ var Babylon_js_awspack_TextToSpeechFeature = (awspack_TextToSpeechFeature_TextToSpeechFeature);\n// CONCATENATED MODULE: ./src/Babylon.js/awspack/index.js\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n/**\r\n * @module babylon/awspack\r\n */\n\n/* harmony default export */ var awspack = ({\n /**\r\n * @see Babylon.js/TextToSpeechFeature\r\n */\n TextToSpeechFeature: Babylon_js_awspack_TextToSpeechFeature,\n\n /**\r\n * @see core/TextToSpeechUtils\r\n */\n TextToSpeechUtils: awspack_TextToSpeechUtils,\n\n /**\r\n * @see Babylon.js/Speech\r\n */\n Speech: Babylon_js_awspack_Speech\n});\n// CONCATENATED MODULE: ./src/Babylon.js/animpack/state/SingleState.js\nfunction state_SingleState_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { state_SingleState_typeof = function _typeof(obj) { return typeof obj; }; } else { state_SingleState_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return state_SingleState_typeof(obj); }\n\nfunction SingleState_toConsumableArray(arr) { return SingleState_arrayWithoutHoles(arr) || SingleState_iterableToArray(arr) || SingleState_unsupportedIterableToArray(arr) || SingleState_nonIterableSpread(); }\n\nfunction SingleState_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."); }\n\nfunction SingleState_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return SingleState_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return SingleState_arrayLikeToArray(o, minLen); }\n\nfunction SingleState_iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction SingleState_arrayWithoutHoles(arr) { if (Array.isArray(arr)) return SingleState_arrayLikeToArray(arr); }\n\nfunction SingleState_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction state_SingleState_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction state_SingleState_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction state_SingleState_createClass(Constructor, protoProps, staticProps) { if (protoProps) state_SingleState_defineProperties(Constructor.prototype, protoProps); if (staticProps) state_SingleState_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction SingleState_set(target, property, value, receiver) { if (typeof Reflect !== "undefined" && Reflect.set) { SingleState_set = Reflect.set; } else { SingleState_set = function set(target, property, value, receiver) { var base = SingleState_superPropBase(target, property); var desc; if (base) { desc = Object.getOwnPropertyDescriptor(base, property); if (desc.set) { desc.set.call(receiver, value); return true; } else if (!desc.writable) { return false; } } desc = Object.getOwnPropertyDescriptor(receiver, property); if (desc) { if (!desc.writable) { return false; } desc.value = value; Object.defineProperty(receiver, property, desc); } else { SingleState_defineProperty(receiver, property, value); } return true; }; } return SingleState_set(target, property, value, receiver); }\n\nfunction _set(target, property, value, receiver, isStrict) { var s = SingleState_set(target, property, value, receiver || target); if (!s && isStrict) { throw new Error(\'failed to set property\'); } return value; }\n\nfunction SingleState_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction SingleState_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { SingleState_get = Reflect.get; } else { SingleState_get = function _get(target, property, receiver) { var base = SingleState_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return SingleState_get(target, property, receiver || target); }\n\nfunction SingleState_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = state_SingleState_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction state_SingleState_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) state_SingleState_setPrototypeOf(subClass, superClass); }\n\nfunction state_SingleState_setPrototypeOf(o, p) { state_SingleState_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return state_SingleState_setPrototypeOf(o, p); }\n\nfunction state_SingleState_createSuper(Derived) { var hasNativeReflectConstruct = state_SingleState_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = state_SingleState_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = state_SingleState_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return state_SingleState_possibleConstructorReturn(this, result); }; }\n\nfunction state_SingleState_possibleConstructorReturn(self, call) { if (call && (state_SingleState_typeof(call) === "object" || typeof call === "function")) { return call; } return state_SingleState_assertThisInitialized(self); }\n\nfunction state_SingleState_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction state_SingleState_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction state_SingleState_getPrototypeOf(o) { state_SingleState_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return state_SingleState_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n/**\r\n * Babylonjs AnimationGroup object\r\n * @external "BABYLON.AnimationGroup"\r\n * @see https://doc.babylonjs.com/api/classes/babylon.animationgroup\r\n */\n\nvar babylonBlendModes = {\n Override: false,\n Additive: true\n};\n/**\r\n * @extends core/SingleState\r\n * @alias Babylon.js/SingleState\r\n */\n\nvar state_SingleState_SingleState = /*#__PURE__*/function (_CoreSingleState) {\n state_SingleState_inherits(SingleState, _CoreSingleState);\n\n var _super = state_SingleState_createSuper(SingleState);\n\n /**\r\n * @constructor\r\n *\r\n * @param {Object=} options - Options for the animation state.\r\n * @param {external:"BABYLON.AnimationGroup"} babylonGroup - The animation group that controls\r\n * playback of the animation.\r\n * @param {external:"BABYLON.Scene"} babylonScene - The scene containing the babylonGroup.\r\n **/\n function SingleState() {\n var _this;\n\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var babylonGroup = arguments.length > 1 ? arguments[1] : undefined;\n var babylonScene = arguments.length > 2 ? arguments[2] : undefined;\n\n state_SingleState_classCallCheck(this, SingleState);\n\n _this = _super.call(this, options);\n _this._onFinishedEvent = _this._onFinishedEvent.bind(state_SingleState_assertThisInitialized(_this));\n _this._onLoopEvent = _this._onLoopEvent.bind(state_SingleState_assertThisInitialized(_this));\n _this._from = Number.isNaN(Number(options.from)) ? babylonGroup.from : Number(options.from);\n _this._to = Number.isNaN(Number(options.to)) ? babylonGroup.to : Number(options.to);\n babylonGroup.normalize(_this._from, _this._to);\n _this._babylonScene = babylonScene;\n _this._babylonAnimations = SingleState_toConsumableArray(babylonGroup.targetedAnimations);\n _this._babylonAnimatables = [];\n _this._babylonNumAnimations = _this._babylonAnimations.length;\n _this._babylonLoopCount = _this._loopCount * _this._babylonNumAnimations;\n _this._looped = 0;\n _this._finished = 0;\n _this._started = false;\n return _this;\n }\n\n state_SingleState_createClass(SingleState, [{\n key: "normalizedTime",\n get: function get() {\n var animatable = this._babylonAnimatables[0];\n\n if (animatable && animatable.masterFrame) {\n return (animatable.masterFrame - this._from) / (this._to - this._from);\n }\n\n return 0;\n },\n set: function set(time) {\n var _this2 = this;\n\n time = core_MathUtils.clamp(time);\n\n this._babylonAnimatables.forEach(function (animatable) {\n var targetFrame = (_this2._to - _this2._from) * time + _this2._from;\n animatable.goToFrame(targetFrame);\n });\n }\n }, {\n key: "timeScale",\n get: function get() {\n return SingleState_get(state_SingleState_getPrototypeOf(SingleState.prototype), "timeScale", this);\n },\n set: function set(timeScale) {\n _set(state_SingleState_getPrototypeOf(SingleState.prototype), "timeScale", timeScale, this, true);\n\n this._babylonAnimatables.forEach(function (animatable) {\n animatable.speedRatio = timeScale;\n });\n }\n }, {\n key: "loopCount",\n get: function get() {\n return SingleState_get(state_SingleState_getPrototypeOf(SingleState.prototype), "loopCount", this);\n },\n set: function set(loopCount) {\n _set(state_SingleState_getPrototypeOf(SingleState.prototype), "loopCount", loopCount, this, true);\n\n this._babylonAnimatables.forEach(function (animatable) {\n animatable.loopAnimation = loopCount > 1;\n });\n }\n /**\r\n * Stop and discard of currently stored animatables and generate new ones that\r\n * are paused.\r\n *\r\n * @private\r\n */\n\n }, {\n key: "_createAnimatables",\n value: function _createAnimatables() {\n var _this3 = this;\n\n // Create new animatables\n var oldAnimatables = SingleState_toConsumableArray(this._babylonAnimatables);\n\n this._babylonAnimatables.length = 0;\n\n this._babylonAnimations.forEach(function (targetedAnimation) {\n var animatable = _this3._babylonScene.beginDirectAnimation(targetedAnimation.target, [targetedAnimation.animation], _this3._from, _this3._to, _this3._loopCount > 1, 0, _this3._onFinishedEvent, _this3._onLoopEvent, babylonBlendModes[_this3._blendMode]);\n\n animatable.weight = _this3._internalWeight;\n animatable.disposeOnEnd = false;\n\n _this3._babylonAnimatables.push(animatable);\n }); // Dispose of the old animatables\n\n\n oldAnimatables.forEach(function (animatable) {\n animatable.stop();\n });\n }\n /**\r\n * Reset variables and animations. Should be called before playing from the\r\n * beginning and if calling stop.\r\n *\r\n * @private\r\n */\n\n }, {\n key: "_reset",\n value: function _reset() {\n this._looped = 0;\n this._finished = 0;\n this._started = true;\n\n this._createAnimatables();\n }\n /**\r\n * Pause the animation and reset counters once the animation finishes.\r\n *\r\n * @private\r\n */\n\n }, {\n key: "_onFinishedEvent",\n value: function _onFinishedEvent() {\n this._finished += 1;\n\n if (this._finished === this._babylonNumAnimations) {\n this._looped = 0;\n this._finished = 0; // Pause the animations\n\n this._babylonAnimatables.forEach(function (animatable) {\n animatable.speedRatio = 0;\n });\n\n this._promises.play.resolve(); // Stop evaluating interpolators if they have already completed\n\n\n if (!this.weightPending && !this.timeScalePending) {\n this._paused = true;\n }\n }\n }\n /**\r\n * Increment loop counter for each animation loop. If loop counter meets\r\n * loopCount, notifiy that the animation has finished.\r\n *\r\n * @private\r\n */\n\n }, {\n key: "_onLoopEvent",\n value: function _onLoopEvent() {\n this._looped += 1; // Signal the state has finished\n\n if (this._looped === this._babylonLoopCount) {\n this._finished = this._babylonNumAnimations - 1;\n\n this._onFinishedEvent();\n }\n }\n }, {\n key: "updateInternalWeight",\n value: function updateInternalWeight(factor) {\n var _this4 = this;\n\n SingleState_get(state_SingleState_getPrototypeOf(SingleState.prototype), "updateInternalWeight", this).call(this, factor);\n\n this._babylonAnimatables.forEach(function (animatable) {\n animatable.weight = _this4._internalWeight;\n });\n }\n }, {\n key: "play",\n value: function play(onFinish, onError, onCancel) {\n this._reset();\n\n this.timeScale = this._timeScale;\n return SingleState_get(state_SingleState_getPrototypeOf(SingleState.prototype), "play", this).call(this, onFinish, onError, onCancel);\n }\n }, {\n key: "pause",\n value: function pause() {\n this._babylonAnimatables.forEach(function (animatable) {\n animatable.speedRatio = 0;\n });\n\n return SingleState_get(state_SingleState_getPrototypeOf(SingleState.prototype), "pause", this).call(this);\n }\n }, {\n key: "resume",\n value: function resume(onFinish, onError, onCancel) {\n if (!this._started) {\n this._reset();\n }\n\n this.timeScale = this._timeScale;\n return SingleState_get(state_SingleState_getPrototypeOf(SingleState.prototype), "resume", this).call(this, onFinish, onError, onCancel);\n }\n }, {\n key: "cancel",\n value: function cancel() {\n this._babylonAnimatables.forEach(function (animatable) {\n animatable.speedRatio = 0;\n });\n\n return SingleState_get(state_SingleState_getPrototypeOf(SingleState.prototype), "cancel", this).call(this);\n }\n }, {\n key: "stop",\n value: function stop() {\n this._reset();\n\n return SingleState_get(state_SingleState_getPrototypeOf(SingleState.prototype), "stop", this).call(this);\n }\n }, {\n key: "discard",\n value: function discard() {\n SingleState_get(state_SingleState_getPrototypeOf(SingleState.prototype), "discard", this).call(this); // Dispose of the babylon resources\n\n\n this._babylonAnimatables.forEach(function (animatable) {\n animatable.stop();\n });\n\n delete this._babylonAnimations;\n delete this._babylonAnimatables;\n delete this._babylonScene;\n }\n }, {\n key: "deactivate",\n value: function deactivate() {\n SingleState_get(state_SingleState_getPrototypeOf(SingleState.prototype), "deactivate", this).call(this);\n\n this._createAnimatables();\n }\n }]);\n\n return SingleState;\n}(state_SingleState);\n\n/* harmony default export */ var animpack_state_SingleState = (state_SingleState_SingleState);\n// CONCATENATED MODULE: ./src/Babylon.js/animpack/AnimationFeature.js\nfunction animpack_AnimationFeature_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { animpack_AnimationFeature_typeof = function _typeof(obj) { return typeof obj; }; } else { animpack_AnimationFeature_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return animpack_AnimationFeature_typeof(obj); }\n\nfunction animpack_AnimationFeature_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction animpack_AnimationFeature_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction animpack_AnimationFeature_createClass(Constructor, protoProps, staticProps) { if (protoProps) animpack_AnimationFeature_defineProperties(Constructor.prototype, protoProps); if (staticProps) animpack_AnimationFeature_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction animpack_AnimationFeature_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { animpack_AnimationFeature_get = Reflect.get; } else { animpack_AnimationFeature_get = function _get(target, property, receiver) { var base = animpack_AnimationFeature_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return animpack_AnimationFeature_get(target, property, receiver || target); }\n\nfunction animpack_AnimationFeature_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = animpack_AnimationFeature_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction animpack_AnimationFeature_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) animpack_AnimationFeature_setPrototypeOf(subClass, superClass); }\n\nfunction animpack_AnimationFeature_setPrototypeOf(o, p) { animpack_AnimationFeature_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return animpack_AnimationFeature_setPrototypeOf(o, p); }\n\nfunction animpack_AnimationFeature_createSuper(Derived) { var hasNativeReflectConstruct = animpack_AnimationFeature_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = animpack_AnimationFeature_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = animpack_AnimationFeature_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return animpack_AnimationFeature_possibleConstructorReturn(this, result); }; }\n\nfunction animpack_AnimationFeature_possibleConstructorReturn(self, call) { if (call && (animpack_AnimationFeature_typeof(call) === "object" || typeof call === "function")) { return call; } return animpack_AnimationFeature_assertThisInitialized(self); }\n\nfunction animpack_AnimationFeature_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction animpack_AnimationFeature_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction animpack_AnimationFeature_getPrototypeOf(o) { animpack_AnimationFeature_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return animpack_AnimationFeature_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\nAnimationTypes.single = animpack_state_SingleState;\n\n/**\r\n * @extends core/AnimationFeature\r\n * @alias Babylon.js/AnimationFeature\r\n */\n\nvar animpack_AnimationFeature_AnimationFeature = /*#__PURE__*/function (_CoreAnimationFeature) {\n animpack_AnimationFeature_inherits(AnimationFeature, _CoreAnimationFeature);\n\n var _super = animpack_AnimationFeature_createSuper(AnimationFeature);\n\n /**\r\n * @constructor\r\n *\r\n * @param {Babylon.js/HostObject} host - Host object that owns the feature.\r\n */\n function AnimationFeature(host) {\n var _this;\n\n animpack_AnimationFeature_classCallCheck(this, AnimationFeature);\n\n _this = _super.call(this, host);\n _this._babylonScene = host.owner.getScene();\n return _this;\n }\n\n animpack_AnimationFeature_createClass(AnimationFeature, [{\n key: "_createSingleState",\n value: function _createSingleState(options) {\n return new animpack_state_SingleState(options, options.clip, this._babylonScene);\n }\n }, {\n key: "discard",\n value: function discard() {\n delete this._babylonScene;\n\n animpack_AnimationFeature_get(animpack_AnimationFeature_getPrototypeOf(AnimationFeature.prototype), "discard", this).call(this);\n }\n }]);\n\n return AnimationFeature;\n}(animpack_AnimationFeature);\n\n/* harmony default export */ var Babylon_js_animpack_AnimationFeature = (animpack_AnimationFeature_AnimationFeature);\n// CONCATENATED MODULE: ./src/Babylon.js/animpack/index.js\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/**\r\n * @module babylon/animpack\r\n */\n\n\n\n\n\n\n\n\n\n\n\n/**\r\n * @namespace\r\n */\n\nvar Easing = {\n /**\r\n * @see Linear\r\n */\n Linear: Linear,\n\n /**\r\n * @see Quadratic\r\n */\n Quadratic: Quadratic,\n\n /**\r\n * @see Cubic\r\n */\n Cubic: Cubic,\n\n /**\r\n * @see Quartic\r\n */\n Quartic: Quartic,\n\n /**\r\n * @see Quintic\r\n */\n Quintic: Quintic,\n\n /**\r\n * @see Sinusoidal\r\n */\n Sinusoidal: Sinusoidal,\n\n /**\r\n * @see Exponential\r\n */\n Exponential: Exponential,\n\n /**\r\n * @see Circular\r\n */\n Circular: Circular,\n\n /**\r\n * @see Elastic\r\n */\n Elastic: Elastic,\n\n /**\r\n * @see Back\r\n */\n Back: Back,\n\n /**\r\n * @see Bounce\r\n */\n Bounce: Bounce\n};\n/* harmony default export */ var animpack = ({\n /**\r\n * @see Babylon.js/AnimationFeature\r\n */\n AnimationFeature: Babylon_js_animpack_AnimationFeature,\n\n /**\r\n * @see AnimationLayer\r\n */\n AnimationLayer: animpack_AnimationLayer,\n\n /**\r\n * @see Babylon.js/SingleState\r\n */\n SingleState: animpack_state_SingleState,\n\n /**\r\n * @see TransitionState\r\n */\n TransitionState: state_TransitionState,\n\n /**\r\n * @see FreeBlendState\r\n */\n FreeBlendState: state_FreeBlendState,\n\n /**\r\n * @see QueueState\r\n */\n QueueState: state_QueueState,\n\n /**\r\n * @see RandomAnimationState\r\n */\n RandomAnimationState: state_RandomAnimationState,\n\n /**\r\n * @see Blend1dState\r\n */\n Blend1dState: state_Blend1dState,\n\n /**\r\n * @see Blend2dState\r\n */\n Blend2dState: state_Blend2dState,\n\n /**\r\n * @see AnimationUtils\r\n */\n AnimationUtils: animpack_AnimationUtils,\n\n /**\r\n * @see Easing\r\n */\n Easing: Easing,\n\n /**\r\n * @see LayerBlendModes\r\n */\n LayerBlendModes: LayerBlendModes,\n\n /**\r\n * @see DefaultLayerBlendMode\r\n */\n DefaultLayerBlendMode: DefaultLayerBlendMode,\n\n /**\r\n * @see AnimationTypes\r\n */\n AnimationTypes: AnimationTypes\n});\n// CONCATENATED MODULE: ./src/Babylon.js/index.js\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/**\r\n * @module babylon/HOST\r\n */\n\n\n\n\n\n\n\n\n\n\n\n/* harmony default export */ var Babylon_js = __webpack_exports__["default"] = ({\n /**\r\n * @see env\r\n */\n env: env,\n\n /**\r\n * @see Utils\r\n */\n Utils: core_Utils,\n\n /**\r\n * @see MathUtils\r\n */\n MathUtils: core_MathUtils,\n\n /**\r\n * @see Deferred\r\n */\n Deferred: core_Deferred,\n\n /**\r\n * @see Babylon.js/Messenger\r\n */\n Messenger: Babylon_js_Messenger,\n\n /**\r\n * @see Babylon.js/HostObject\r\n */\n HostObject: Babylon_js_HostObject,\n\n /**\r\n * @see core/LipsyncFeature\r\n */\n LipsyncFeature: core_LipsyncFeature,\n\n /**\r\n * @see GestureFeature\r\n */\n GestureFeature: core_GestureFeature,\n\n /**\r\n * @see Babylon.js/PointOfInterestFeature\r\n */\n PointOfInterestFeature: Babylon_js_PointOfInterestFeature,\n\n /**\r\n * @see DefaultVisemeMap\r\n */\n DefaultVisemeMap: DefaultVisemeMap,\n\n /**\r\n * @see DefaultGestureWords\r\n */\n DefaultGestureWords: DefaultGestureWords,\n\n /**\r\n * @see AxisMap\r\n */\n AxisMap: AxisMap,\n\n /**\r\n * @see module:babylon/awspack\r\n */\n aws: awspack,\n\n /**\r\n * @see module:babylon/animpack\r\n */\n anim: animpack\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vc3JjL2NvcmUvRGVmZXJyZWQuanM/Njg4ZSIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL2NvcmUvVXRpbHMuanM/YmYyNCIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL2NvcmUvTWF0aFV0aWxzLmpzPzgxZTciLCJ3ZWJwYWNrOi8vSE9TVC8uL3NyYy9jb3JlL2FuaW1wYWNrL0Vhc2luZy5qcz81ODZjIiwid2VicGFjazovL0hPU1QvLi9zcmMvY29yZS9NZXNzZW5nZXIuanM/ZDAwNiIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL0JhYnlsb24uanMvTWVzc2VuZ2VyLmpzPzA3ZjgiLCJ3ZWJwYWNrOi8vSE9TVC8uL3NyYy9jb3JlL0Fic3RyYWN0SG9zdEZlYXR1cmUuanM/MjM2ZSIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL2NvcmUvSG9zdE9iamVjdC5qcz83NWU3Iiwid2VicGFjazovL0hPU1QvLi9zcmMvQmFieWxvbi5qcy9Ib3N0T2JqZWN0LmpzPzRhZTEiLCJ3ZWJwYWNrOi8vSE9TVC8uL3NyYy9jb3JlL0ZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2UuanM/MDZiYiIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL2NvcmUvYW5pbXBhY2svQW5pbWF0aW9uRmVhdHVyZURlcGVuZGVudEludGVyZmFjZS5qcz82ZTYzIiwid2VicGFjazovL0hPU1QvLi9zcmMvY29yZS9hbmltcGFjay9NYW5hZ2VkQW5pbWF0aW9uTGF5ZXJJbnRlcmZhY2UuanM/NDdkNSIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL2NvcmUvYXdzcGFjay9UZXh0VG9TcGVlY2hGZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlLmpzP2JjYWQiLCJ3ZWJwYWNrOi8vSE9TVC8uL3NyYy9jb3JlL0xpcHN5bmNGZWF0dXJlLmpzPzhkM2EiLCJ3ZWJwYWNrOi8vSE9TVC8uL3NyYy9jb3JlL2F3c3BhY2svU1NNTFNwZWVjaG1hcmtJbnRlcmZhY2UuanM/Y2E3NCIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL2NvcmUvR2VzdHVyZUZlYXR1cmUuanM/ZGIzOSIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL2NvcmUvYW5pbXBhY2svQW5pbWF0aW9uVXRpbHMuanM/MTE0OCIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL2NvcmUvYW5pbXBhY2svc3RhdGUvQWJzdHJhY3RTdGF0ZS5qcz8yZjg3Iiwid2VicGFjazovL0hPU1QvLi9zcmMvY29yZS9hbmltcGFjay9zdGF0ZS9UcmFuc2l0aW9uU3RhdGUuanM/OWU3NyIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL2NvcmUvYW5pbXBhY2svQW5pbWF0aW9uUGxheWVySW50ZXJmYWNlLmpzPzczM2UiLCJ3ZWJwYWNrOi8vSE9TVC8uL3NyYy9jb3JlL2FuaW1wYWNrL3N0YXRlL1N0YXRlQ29udGFpbmVySW50ZXJmYWNlLmpzPzI2NTkiLCJ3ZWJwYWNrOi8vSE9TVC8uL3NyYy9jb3JlL2FuaW1wYWNrL3N0YXRlL1F1ZXVlU3RhdGUuanM/MGM0YSIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL2NvcmUvYW5pbXBhY2svc3RhdGUvQWJzdHJhY3RCbGVuZFN0YXRlLmpzPzY2OTciLCJ3ZWJwYWNrOi8vSE9TVC8uL3NyYy9jb3JlL2FuaW1wYWNrL3N0YXRlL0ZyZWVCbGVuZFN0YXRlLmpzP2Q2NzUiLCJ3ZWJwYWNrOi8vSE9TVC8uL3NyYy9jb3JlL2FuaW1wYWNrL3N0YXRlL0JsZW5kMWRTdGF0ZS5qcz9hNzQyIiwid2VicGFjazovL0hPU1QvLi9zcmMvY29yZS9hbmltcGFjay9zdGF0ZS9CbGVuZDJkU3RhdGUuanM/ODE2MyIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL2NvcmUvYW5pbXBhY2svQW5pbWF0aW9uTGF5ZXIuanM/YmVlYyIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL2NvcmUvYW5pbXBhY2svc3RhdGUvU2luZ2xlU3RhdGUuanM/NGYxNCIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL2NvcmUvYW5pbXBhY2svc3RhdGUvUmFuZG9tQW5pbWF0aW9uU3RhdGUuanM/NDQ5MyIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL2NvcmUvYW5pbXBhY2svQW5pbWF0aW9uRmVhdHVyZS5qcz9lYmRlIiwid2VicGFjazovL0hPU1QvLi9zcmMvY29yZS9Qb2ludE9mSW50ZXJlc3RGZWF0dXJlLmpzP2RlZTUiLCJ3ZWJwYWNrOi8vSE9TVC8uL3NyYy9CYWJ5bG9uLmpzL1BvaW50T2ZJbnRlcmVzdEZlYXR1cmUuanM/ODBjZiIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL0JhYnlsb24uanMvSG9zdEVudmlyb25tZW50LmpzP2MwYWMiLCJ3ZWJwYWNrOi8vSE9TVC8uL3NyYy9jb3JlL2F3c3BhY2svVGV4dFRvU3BlZWNoVXRpbHMuanM/NzU1ZCIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL2NvcmUvYXdzcGFjay9BYnN0cmFjdFNwZWVjaC5qcz83ZjFjIiwid2VicGFjazovL0hPU1QvLi9zcmMvY29yZS9hd3NwYWNrL0Fic3RyYWN0VGV4dFRvU3BlZWNoRmVhdHVyZS5qcz8zNDFmIiwid2VicGFjazovL0hPU1QvLi9zcmMvY29yZS9hd3NwYWNrL1NwZWVjaC5qcz8yYTQxIiwid2VicGFjazovL0hPU1QvLi9zcmMvQmFieWxvbi5qcy9hd3NwYWNrL1NwZWVjaC5qcz9lZDA5Iiwid2VicGFjazovL0hPU1QvLi9zcmMvY29yZS9hd3NwYWNrL1RleHRUb1NwZWVjaEZlYXR1cmUuanM/NWE4NSIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL0JhYnlsb24uanMvYXdzcGFjay9UZXh0VG9TcGVlY2hGZWF0dXJlLmpzP2IwYzEiLCJ3ZWJwYWNrOi8vSE9TVC8uL3NyYy9CYWJ5bG9uLmpzL2F3c3BhY2svaW5kZXguanM/M2MyYyIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL0JhYnlsb24uanMvYW5pbXBhY2svc3RhdGUvU2luZ2xlU3RhdGUuanM/ZTQzMSIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL0JhYnlsb24uanMvYW5pbXBhY2svQW5pbWF0aW9uRmVhdHVyZS5qcz9jMTY4Iiwid2VicGFjazovL0hPU1QvLi9zcmMvQmFieWxvbi5qcy9hbmltcGFjay9pbmRleC5qcz84ZDU3Iiwid2VicGFjazovL0hPU1QvLi9zcmMvQmFieWxvbi5qcy9pbmRleC5qcz9iZTM3Il0sIm5hbWVzIjpbIkRlZmVycmVkIiwiZXhlY3V0YWJsZSIsIm9uUmVzb2x2ZSIsIm9uUmVqZWN0Iiwib25DYW5jZWwiLCJFcnJvciIsInJlcyIsInJlaiIsImNhbmNlbCIsInN0YXR1cyIsInJlc29sdmVkIiwicmVqZWN0ZWQiLCJjYW5jZWxlZCIsInBlbmRpbmciLCJyZXNvbHZlIiwicmVqZWN0IiwidmFsdWUiLCJfc3RhdHVzIiwiX3Jlc29sdmUiLCJfcmVqZWN0IiwiX2NhbmNlbCIsIl9leGVjdXRhYmxlIiwiYXJncyIsIml0ZXJhYmxlIiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJlIiwiYXJyYXkiLCJkZWZlcnJlZCIsImZpbHRlciIsIml0ZW0iLCJyZXN1bHQiLCJ1bmRlZmluZWQiLCJyZXNvbHZlVmFsdWUiLCJmb3JFYWNoIiwibGVuZ3RoIiwiZXJyb3IiLCJjYW5jZWxWYWx1ZSIsIm51bUl0ZW1zIiwiaXRlbVRyYWNrZXIiLCJmYWlsZWQiLCJudW1SZXNvbHZlZCIsInJlc29sdXRpb25zIiwiaW5kZXgiLCJQcm9taXNlIiwidGhlbiIsIlV0aWxzIiwicmVwbGFjZSIsImMiLCJyYW5kb21OdW1iZXIiLCJNYXRoIiwiZmxvb3IiLCJEYXRlIiwibm93IiwicmFuZG9tIiwidG9TdHJpbmciLCJuYW1lIiwibmFtZUFycmF5IiwiaW5jbHVkZXMiLCJuYW1lU2V0IiwiU2V0IiwibWF0Y2hHcm91cCIsIm1hdGNoIiwiYmFzZU5hbWUiLCJzbGljZSIsImluY3JlbWVudCIsIk51bWJlciIsInNldE5hbWUiLCJzZXRNYXRjaEdyb3VwIiwic2V0SW5jcmVtZW50Iiwic2Vjb25kcyIsIm9uRmluaXNoIiwib25Qcm9ncmVzcyIsIm9uRXJyb3IiLCJjb25zb2xlIiwid2FybiIsImN1cnJlbnRUaW1lIiwidG90YWxUaW1lIiwib25VcGRhdGUiLCJkZWx0YVRpbWUiLCJtaW4iLCJtYXgiLCJjZWlsIiwiUmFkaWFuVG9EZWdyZWUiLCJQSSIsIkRlZ3JlZVRvUmFkaWFuIiwiTWF0aFV0aWxzIiwicmFkaWFucyIsImRlZ3JlZXMiLCJmcm9tIiwidG8iLCJmYWN0b3IiLCJhIiwiYiIsInAiLCJkaXN0U3FyIiwiZGlzdGFuY2VTcXVhcmVkIiwidCIsInBvaW50IiwidmVydGljZXMiLCJtaW5YIiwiUE9TSVRJVkVfSU5GSU5JVFkiLCJtaW5ZIiwibWF4WCIsIk5FR0FUSVZFX0lORklOSVRZIiwibWF4WSIsInYiLCJkWCIsImRZIiwibWlkWCIsIm1pZFkiLCJkTWF4Iiwic3VwZXJJbmRpY2VzIiwidmVydHNXaXRoU3VwZXIiLCJzdXBlclNvcnRlZEluZGljZXMiLCJzb3J0UG9pbnRzQ0NXIiwic3VwZXJUcmlhbmdsZSIsImluZGljZXMiLCJlZGdlcyIsInRyaWFuZ2xlcyIsIm5ld1ZlcnQiLCJuZXdJbmRleCIsImludmFsaWRUcmlhbmdsZXMiLCJ0cmlhbmdsZSIsImlzUG9pbnRJbkNpcmN1bUNpcmNsZSIsInB1c2giLCJib3VuZGluZ1BvbHkiLCJlZGdlIiwiY291bnQiLCJvdGhlclRyaWFuZ2xlIiwib3RoZXJFZGdlIiwic3BsaWNlIiwiaW5kZXhPZiIsInNvcnRlZEluZGljZXMiLCJ0cmlhbmdsZXNUb1JlbW92ZSIsIm1hcCIsImF4IiwiYXkiLCJieCIsImJ5IiwiY3giLCJjeSIsImRlbm9tIiwiYVZhbCIsImJWYWwiLCJjVmFsIiwiY2VudHJvaWQiLCJzb3J0IiwiYXRhbjIiLCJhYnMiLCJ2ZWN0b3IiLCJBcnJheSIsInJlZHVjZXIiLCJhY2N1bXVsYXRvciIsImN1cnJlbnRWYWx1ZSIsInNxcnQiLCJyZWR1Y2UiLCJ2ZWN0b3JBIiwidmVjdG9yQiIsInZhbHVlQSIsInZhbHVlQiIsIm5vcm1hbEEiLCJub3JtYWxpemVWZWN0b3IiLCJub3JtYWxCIiwiZG90IiwiZ2V0RG90UHJvZHVjdCIsImFjb3MiLCJjbGFtcCIsInZlY3RvcjMiLCJtYXRyaXgzIiwiZXZlcnkiLCJ4IiwieSIsInoiLCJtYWduaXR1ZGUiLCJnZXRWZWN0b3JNYWduaXR1ZGUiLCJmaWxsIiwibWF0cml4NCIsInNjYWxlWCIsInNjYWxlWSIsInNjYWxlWiIsInIiLCJ0YXJnZXRWYWx1ZSIsInZhbHVlU3RvcmUiLCJzbW9vdGhUaW1lIiwibWF4U3BlZWQiLCJjbGFtcFRpbWUiLCJkZWx0YVZhbHVlIiwiY2xhbXBEZWx0YVZhbHVlIiwibGFzdFZhbHVlIiwiZDEiLCJkMiIsImQzIiwiZDQiLCJMaW5lYXIiLCJOb25lIiwiayIsIkluIiwiT3V0IiwiSW5PdXQiLCJRdWFkcmF0aWMiLCJDdWJpYyIsIlF1YXJ0aWMiLCJRdWludGljIiwiU2ludXNvaWRhbCIsImNvcyIsInNpbiIsIkV4cG9uZW50aWFsIiwiQ2lyY3VsYXIiLCJFbGFzdGljIiwicyIsImFzaW4iLCJCYWNrIiwiQm91bmNlIiwiTWVzc2VuZ2VyIiwiaWQiLCJfaWQiLCJjcmVhdGVJZCIsIl9kaXNwYXRjaGVyIiwid2luZG93IiwiX2NhbGxiYWNrcyIsIl9ldmVudExpc3RlbmVycyIsIm1lc3NhZ2UiLCJjYWxsYmFjayIsImRldGFpbCIsIkN1c3RvbUV2ZW50IiwibGlzdGVuZXIiLCJhZGRFdmVudExpc3RlbmVyIiwiX2NyZWF0ZUxvY2FsTWVzc2FnZSIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJfY3JlYXRlTGlzdGVuZXIiLCJfYWRkTGlzdGVuZXIiLCJpIiwic3RvcExpc3RlbmluZyIsIl9yZW1vdmVMaXN0ZW5lciIsInJlZ2V4cCIsIm1lc3NhZ2VzIiwiT2JqZWN0Iiwia2V5cyIsInRlc3QiLCJldmVudCIsIl9jcmVhdGVFdmVudCIsImRpc3BhdGNoRXZlbnQiLCJtZXNzZW5nZXIiLCJHbG9iYWxNZXNzZW5nZXIiLCJsaXN0ZW5UbyIsInN0b3BMaXN0ZW5pbmdUb0FsbCIsImVtaXQiLCJkZWZpbmVQcm9wZXJ0aWVzIiwid3JpdGFibGUiLCJFVkVOVFMiLCJfZXZlbnRzIiwiYWRkIiwicmVtb3ZlQ2FsbGJhY2siLCJCQUJZTE9OIiwiT2JzZXJ2YWJsZSIsImhhc09ic2VydmVycyIsIm5vdGlmeU9ic2VydmVycyIsIkNvcmVNZXNzZW5nZXIiLCJkZWZpbmVQcm9wZXJ0eSIsIkFic3RyYWN0SG9zdEZlYXR1cmUiLCJob3N0IiwiX2hvc3QiLCJldmVudHMiLCJhcGkiLCJlbnRyaWVzIiwiY29uc3RydWN0b3IiLCJvd25lciIsInN0b3BMaXN0ZW5pbmdCeVJlZ2V4cCIsInVwZGF0ZSIsIlJlZ0V4cCIsInNvdXJjZSIsIlJlc3VsdENsYXNzIiwibWl4aW5DbGFzc0ZhY3RvcmllcyIsIm1peGluQ2xhc3NGYWN0b3J5IiwiU0VSVklDRVMiLCJIb3N0T2JqZWN0IiwiX293bmVyIiwiX2ZlYXR1cmVzIiwiX3dhaXRzIiwiX2xhc3RVcGRhdGUiLCJkdCIsIndhaXQiLCJleGVjdXRlIiwidmFsdWVzIiwiZmVhdHVyZSIsIm9uQ29tcGxldGUiLCJGZWF0dXJlQ2xhc3MiLCJmb3JjZSIsImlucHV0VHlwZSIsInByb3RvdHlwZSIsImluc3RhbGxBcGkiLCJhZGRGZWF0dXJlIiwidHlwZU5hbWUiLCJyZW1vdmVGZWF0dXJlIiwiZGlzY2FyZCIsImdldFByb3RvdHlwZU9mIiwib3B0aW9ucyIsImdldCIsImdldEVuZ2luZSIsImdldERlbHRhVGltZSIsIlByZWNpc2lvbkRhdGUiLCJOb3ciLCJDb3JlSG9zdE9iamVjdCIsIkZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2UiLCJCYXNlQ2xhc3MiLCJGZWF0dXJlRGVwZW5kZW50TWl4aW4iLCJfaW5pdGlhbGl6ZWQiLCJfb25GZWF0dXJlQWRkZWQiLCJiaW5kIiwiX29uRmVhdHVyZVJlbW92ZWQiLCJFVkVOVF9ERVBFTkRFTkNJRVMiLCJldmVudE5hbWUiLCJBbmltYXRpb25GZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlIiwib2xkTmFtZSIsIm5ld05hbWUiLCJsYXllck5hbWUiLCJhbmltYXRpb25OYW1lIiwiUGFyZW50Q2xhc3MiLCJNaXhpbiIsIkFuaW1hdGlvbkZlYXR1cmVEZXBlbmRlbnRNaXhpbiIsIkFuaW1hdGlvbkZlYXR1cmUiLCJhZGRMYXllciIsInJlbW92ZUxheWVyIiwicmVuYW1lTGF5ZXIiLCJhZGRBbmltYXRpb24iLCJyZW1vdmVBbmltYXRpb24iLCJyZW5hbWVBbmltYXRpb24iLCJNYW5hZ2VkQW5pbWF0aW9uTGF5ZXJJbnRlcmZhY2UiLCJuYW1lRmlsdGVyIiwid2VpZ2h0IiwiZWFzaW5nRm4iLCJNYW5hZ2VkQW5pbWF0aW9uTGF5ZXJNaXhpbiIsIl9tYW5hZ2VkTGF5ZXJzIiwibGF5ZXJzIiwiX29uTGF5ZXJBZGRlZCIsIl9vbkxheWVyUmVtb3ZlZCIsImlzQWN0aXZlIiwiZ2V0QW5pbWF0aW9ucyIsImFuaW1OYW1lIiwiX29uQW5pbWF0aW9uQWRkZWQiLCJhbmltYXRpb25zIiwiX29uQW5pbWF0aW9uUmVtb3ZlZCIsImxheWVyT3B0aW9ucyIsImFuaW1PcHRpb25zIiwiREVGQVVMVF9MQVlFUl9PUFRJT05TIiwiYW5pbWF0aW9uT3B0aW9ucyIsImFzc2lnbiIsInJlZ2lzdGVyQW5pbWF0aW9uIiwicmVnaXN0ZXJMYXllciIsImxheWVyTmFtZXMiLCJzZXRMYXllcldlaWdodCIsImJsZW5kVGltZSIsInNldExheWVyV2VpZ2h0cyIsImVuYWJsZSIsImRpc2FibGUiLCJUZXh0VG9TcGVlY2hGZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlIiwiVGV4dFRvU3BlZWNoRmVhdHVyZURlcGVuZGVudE1peGluIiwiVGV4dFRvU3BlZWNoRmVhdHVyZSIsInBsYXkiLCJwYXVzZSIsInJlc3VtZSIsInN0b3AiLCJzZW50ZW5jZSIsIndvcmQiLCJ2aXNlbWUiLCJzc21sIiwiRGVmYXVsdFZpc2VtZU1hcCIsInNpbCIsIm92ZXJyaWRlV2VpZ2h0IiwiUyIsIlQiLCJmIiwidSIsIkUiLCJvIiwiTyIsIkxpcHN5bmNGZWF0dXJlIiwidmlzZW1lQmxlbmRUaW1lIiwiZGVjYXlSYXRlIiwiYW1vdW50IiwidmlzZW1lRWFzaW5nRm4iLCJ2aXNlbWVMYXllcnMiLCJ0YWxraW5nQmxlbmRUaW1lIiwidGFsa2luZ0Vhc2luZ0ZuIiwidGFsa2luZ0xheWVycyIsInZpc2VtZUxlYWRUaW1lIiwiX3Zpc2VtZUxheWVycyIsIl90YWxraW5nTGF5ZXJzIiwiYW5pbWF0aW9uIiwidmlzZW1lTWFwIiwicmVnaXN0ZXJWaXNlbWVMYXllciIsInJlZ2lzdGVyVGFsa2luZ0xheWVyIiwiZ2V0QW5pbWF0aW9uVHlwZSIsIndlaWdodE5hbWVzIiwiZ2V0QW5pbWF0aW9uQmxlbmROYW1lcyIsInZpc2VtZU9wdGlvbnMiLCJzcGVlY2htYXJrT2Zmc2V0IiwiX3Zpc2VtZUxlYWRUaW1lIiwiX3JlZ2lzdGVyVmlzZW1lQW5pbWF0aW9uIiwicmVzdW1lQW5pbWF0aW9uIiwiX29uU3RvcCIsIl9vblBsYXkiLCJwYXVzZUFuaW1hdGlvbiIsIm1hcmsiLCJpc1Zpc2VtZUFjdGl2ZSIsInZpc2VtZU5hbWVzIiwiZHVyYXRpb24iLCJsZXJwRmFjdG9yIiwibGVycCIsImJsZW5kSW5UaW1lIiwiaG9sZFRpbWUiLCJfYW5pbWF0ZVNpbXBsZVZpc2VtZSIsImRlY2F5V2VpZ2h0IiwiX2FuaW1hdGVIZWxkVmlzZW1lIiwidmlzZW1lTmFtZSIsInBlYWtXZWlnaHQiLCJibGVuZE91dFRpbWUiLCJ3ZWlnaHRQcm9taXNlIiwic2V0QW5pbWF0aW9uQmxlbmRXZWlnaHQiLCJzdGFydFByb21pc2UiLCJob2xkUHJvbWlzZSIsInNldCIsIm1peCIsIlNTTUxTcGVlY2htYXJrSW50ZXJmYWNlIiwiU1NNTFNwZWVjaE1hcmtNaXhpbiIsIkpTT04iLCJwYXJzZSIsIm1ldGhvZCIsImFwcGx5IiwiRGVmYXVsdEdlc3R1cmVXb3JkcyIsImJpZyIsImhlYXJ0IiwibWFueSIsIm1vdmVtZW50Iiwib25lIiwiYWdncmVzc2l2ZSIsInlvdSIsImRlZmVuc2UiLCJ3YXZlIiwic2VsZiIsIkdlc3R1cmVGZWF0dXJlIiwibWluaW11bUludGVydmFsIiwibGF5ZXIiLCJsYXllckhvbGRUaW1lIiwibGF5ZXJNaW5pbXVtSW50ZXJ2YWwiLCJjYW5BZHZhbmNlIiwiaXNRdWV1ZUVuZCIsImN1cnJlbnRHZXN0dXJlIiwiX2dldEhvbGRUaW1lIiwiaG9sZFRpbWVyIiwicGxheU5leHRBbmltYXRpb24iLCJwbGF5VGltZXIiLCJhdXRvRGlzYWJsZSIsImFuaW0iLCJ3b3JkcyIsImdlc3R1cmVNYXAiLCJ0cmFuc2l0aW9uVGltZSIsImtleSIsInN0cmluZ2lmeSIsImdlbmVyaWNHZXN0dXJlcyIsInJlYXNvbiIsIl9nZXRNaW5pbXVtSW50ZXJ2YWwiLCJwbGF5QW5pbWF0aW9uIiwiZ2V0UGF1c2VkIiwiY3JlYXRlR2VzdHVyZU1hcCIsImNyZWF0ZUdlbmVyaWNHZXN0dXJlQXJyYXkiLCJwbGF5R2VzdHVyZSIsInN0b3BBbmltYXRpb24iLCJpbnRlcnJ1cHRBbmltYXRpb24iLCJBbmltYXRpb25VdGlscyIsInByb3BlcnR5T3duZXIiLCJwcm9wZXJ0eU5hbWUiLCJpc05hTiIsInN0YXJ0VmFsdWUiLCJpbnRlcnBvbGF0b3IiLCJwcm9ncmVzcyIsImVhc2VGYWN0b3IiLCJBYnN0cmFjdFN0YXRlIiwiX3dlaWdodCIsIl9pbnRlcm5hbFdlaWdodCIsIl9wYXVzZWQiLCJfcHJvbWlzZXMiLCJmaW5pc2giLCJfcGxheUNhbGxiYWNrcyIsImludGVycG9sYXRlUHJvcGVydHkiLCJwcm9taXNlIiwiYWxsIiwidXBkYXRlSW50ZXJuYWxXZWlnaHQiLCJUcmFuc2l0aW9uU3RhdGUiLCJfdG8iLCJfZnJvbSIsIl93ZWlnaHRQcm9taXNlIiwidG90YWxXZWlnaHQiLCJzdGF0ZSIsImN1cnJlbnRTdGF0ZXMiLCJ0YXJnZXRTdGF0ZSIsImRlYWN0aXZhdGUiLCJyZXNldCIsIndlaWdodFByb21pc2VzIiwic2V0V2VpZ2h0Iiwib25OZXh0IiwicHJvbWlzZXMiLCJBbmltYXRpb25QbGF5ZXJJbnRlcmZhY2UiLCJmbiIsInBsYXlNZXRob2QiLCJBbmltYXRpb25QbGF5ZXJNaXhpbiIsIl90cmFuc2l0aW9uU3RhdGUiLCJfc3RhdGVzIiwiTWFwIiwiX2N1cnJlbnRTdGF0ZSIsIl90cmFuc2l0aW9uVGltZSIsIl9lYXNpbmdGbiIsImhhcyIsImN1cnJlbnRBbmltYXRpb24iLCJ3ZWlnaHRQZW5kaW5nIiwiY29uZmlndXJlIiwiX3ByZXBhcmVDdXJyZW50U3RhdGUiLCJTdGF0ZUNvbnRhaW5lckludGVyZmFjZSIsImN1cnJlbnROYW1lIiwiU3RhdGVDb250YWluZXJNaXhpbiIsInVuaXF1ZU5hbWUiLCJnZXRVbmlxdWVOYW1lIiwiUXVldWVTdGF0ZSIsInF1ZXVlU3RhdGVzIiwiYWRkU3RhdGUiLCJfcXVldWUiLCJfZG9uZSIsImludGVybmFsV2VpZ2h0IiwibmV4dCIsImRvbmUiLCJ3cmFwIiwibGFzdE5hbWUiLCJzaXplIiwiZ2V0U3RhdGUiLCJsb29wQ291bnQiLCJJbmZpbml0eSIsImlzVHJhbnNpdGlvbmluZyIsIl9yZXNldCIsInBhdXNlZCIsInN0b3BwZWQiLCJkaXNjYXJkU3RhdGVzIiwiQWJzdHJhY3RCbGVuZFN0YXRlIiwiYmxlbmRTdGF0ZXMiLCJibGVuZFdlaWdodHMiLCJGcmVlQmxlbmRTdGF0ZSIsInN1bVdlaWdodHMiLCJCbGVuZDFkU3RhdGUiLCJibGVuZFRocmVzaG9sZHMiLCJwaGFzZU1hdGNoZXMiLCJfYmxlbmRWYWx1ZSIsImJsZW5kVmFsdWUiLCJub25aZXJvRGlmZmVyZW50U2l6ZSIsImNvbnRhaW5zRHVwbGljYXRlcyIsIl90aHJlc2hvbGRzIiwicGhhc2VNYXRjaCIsIl9zb3J0VGhyZXNob2xkcyIsIl9mb3JjZU5vVGhyZXNob2xkRHVwZXMiLCJfcGhhc2VMZWFkU3RhdGUiLCJfdXBkYXRlQmxlbmRXZWlnaHRzIiwidGhyZXNob2xkVmFsdWUiLCJzYW1lVmFsdWUiLCJmaW5kIiwidGhyZXNob2xkIiwicmVtb3ZlZCIsImZpbmRJbmRleCIsIm5vcm1hbGl6ZWRUaW1lIiwidGFyZ2V0SW5kZXgiLCJ0aHJlc2hvbGRBIiwidGhyZXNob2xkQiIsImZhY3RvckIiLCJmYWN0b3JBIiwic3RhdGVBIiwic3RhdGVCIiwiQmxlbmQyZFN0YXRlIiwib3RoZXJUaHJlc2hvbGQiLCJfYmxlbmRWYWx1ZVgiLCJfYmxlbmRWYWx1ZVkiLCJibGVuZFZhbHVlWCIsImJsZW5kVmFsdWVZIiwiX3ZlcnRpY2VzIiwiX3RyaWFuZ2xlcyIsImdldERlbGF1bmF5VHJpYW5ndWxhdGlvbiIsInByb3BlcnR5IiwidG9VcHBlckNhc2UiLCJfc2V0SW5mbHVlbmNlQ2xvc2VzdFBvaW50T25MaW5lIiwiaXNQb2ludEluVHJpYW5nbGUiLCJfc2V0SW5mbHVlbmNlVHJpYW5nbGUiLCJfc2V0SW5mbHVlbmNlQ2xvc2VzdFBvaW50SW5UcmlhbmdsZXMiLCJhcmVhQSIsInRyaWFuZ2xlQXJlYSIsImFyZWFCIiwiYXJlYUMiLCJ0b3RhbEFyZWEiLCJ3ZWlnaHRBIiwid2VpZ2h0QiIsIndlaWdodEMiLCJ0aHJlc2hvbGRDIiwic3RhdGVDIiwiX3NldFBoYXNlTGVhZFN0YXRlIiwiZ2xvYmFsQ2xvc2VzdFBvaW50IiwiZ2xvYmFsTWluRGlzdCIsImNsb3Nlc3RUcmlhbmdsZSIsInBvaW50QSIsImNsb3Nlc3RQb2ludE9uTGluZSIsInBvaW50QiIsInBvaW50QyIsImRpc3RBIiwiZGlzdEIiLCJkaXN0QyIsImxvY2FsQ2xvc2VzdFBvaW50IiwibG9jYWxNaW5EaXN0IiwiY2xvc2VzdFBvaW50Iiwic3RhdGVzIiwicGhhc2VNYXRjaGVkIiwiTGF5ZXJCbGVuZE1vZGVzIiwiT3ZlcnJpZGUiLCJBZGRpdGl2ZSIsIkRlZmF1bHRMYXllckJsZW5kTW9kZSIsInZhbGlkYXRlQmxlbmRNb2RlIiwiYmxlbmRNb2RlIiwiQW5pbWF0aW9uTGF5ZXIiLCJfYmxlbmRNb2RlIiwiX3dlaWdodFBhdXNlZCIsImlzV2VpZ2h0QWN0aXZlIiwiZ2V0U3RhdGVOYW1lcyIsImJsZW5kTmFtZSIsInNldEJsZW5kV2VpZ2h0IiwiZ2V0QmxlbmRXZWlnaHQiLCJTaW5nbGVTdGF0ZSIsIl90aW1lU2NhbGUiLCJ0aW1lU2NhbGUiLCJfbG9vcENvdW50IiwidGltZSIsIlJhbmRvbUFuaW1hdGlvblN0YXRlIiwic3ViU3RhdGVzIiwiX3BsYXlJbnRlcnZhbCIsInBsYXlJbnRlcnZhbCIsImdldFJhbmRvbUZsb2F0IiwicGxheVJhbmRvbUFuaW1hdGlvbiIsInRpbWVyIiwiX3Jlc2V0VGltZXIiLCJyYW5kb21TdGF0ZSIsImdldFJhbmRvbUludCIsImNhbmNlbEFuaW1hdGlvbiIsIkFuaW1hdGlvblR5cGVzIiwic2luZ2xlIiwiZnJlZUJsZW5kIiwicXVldWUiLCJyYW5kb21BbmltYXRpb24iLCJibGVuZDFkIiwiYmxlbmQyZCIsIl9sYXllcnMiLCJfbGF5ZXJNYXAiLCJleGlzdGluZyIsImxhc3RJbmRleCIsIm51bUxheWVycyIsIndlaWdodE11bHRpcGxpZXIiLCJjdXJyZW50U3RhdGUiLCJibGVuZFN0YXRlT3B0aW9ucyIsImJsZW5kT3B0aW9ucyIsIl9jcmVhdGVTaW5nbGVTdGF0ZSIsInF1ZXVlT3B0aW9ucyIsInF1ZXVlT3B0aW9uIiwiYmxlbmRNYXRjaFBoYXNlcyIsInN1YlN0YXRlT3B0aW9ucyIsImxheWVySW5kZXgiLCJfdmFsaWRhdGVJbmRleCIsImV2ZW50RGF0YSIsImN1cnJlbnRJbmRleCIsImdldEFuaW1hdGlvbkJsZW5kV2VpZ2h0IiwicGF1c2VXZWlnaHQiLCJyZXN1bWVXZWlnaHQiLCJhbmltYXRpb25UeXBlIiwiX3ZhbGlkYXRlTmV3QW5pbWF0aW9uIiwicmVtb3ZlU3RhdGUiLCJjdXJyZW50QW5pbWF0aW9uTmFtZSIsIm5ld0FuaW1hdGlvbk5hbWUiLCJyZW5hbWVTdGF0ZSIsIm5leHRRdWV1ZWRBbmltYXRpb24iLCJsIiwicmVzdW1lZCIsIm1vdmVMYXllciIsImdldExheWVyV2VpZ2h0IiwicGF1c2VMYXllcldlaWdodCIsInJlc3VtZUxheWVyV2VpZ2h0IiwicGF1c2VMYXllciIsInJlc3VtZUxheWVyIiwiZ2V0VHJhbnNpdGlvbmluZyIsImdldEN1cnJlbnRBbmltYXRpb24iLCJfdXBkYXRlSW50ZXJuYWxXZWlnaHRzIiwiQXhpc01hcCIsIlBvc2l0aXZlWCIsIk5lZ2F0aXZlWCIsIlBvc2l0aXZlWSIsIk5lZ2F0aXZlWSIsIlBvc2l0aXZlWiIsIk5lZ2F0aXZlWiIsIkZhY2VUYXJnZXRUeXBlcyIsIkV5ZUNlbnRlciIsIkV5ZUxlZnQiLCJFeWVSaWdodCIsIk1vdXRoIiwiRmFjZVZlY3RvcnMiLCJNaWNyb1NhY2NhZGVXYWl0UmFuZ2VzIiwicG9zdE1hY3JvIiwiTWFjcm9TYWNjYWRlV2FpdFJhbmdlcyIsIm1vdXRoVGFyZ2V0IiwiZXllVGFyZ2V0IiwiQmxpbmtUaHJlc2hvbGQiLCJNYXhEZWx0YSIsIlBvaW50T2ZJbnRlcmVzdEZlYXR1cmUiLCJ0YXJnZXQiLCJsb29rVHJhY2tlciIsInNjZW5lIiwibG9va0JsZW5kVGltZSIsImxvb2tFYXNpbmdGbiIsImxvb2tMYXllcnMiLCJibGlua0JsZW5kVGltZSIsImJsaW5rRWFzaW5nRm4iLCJibGlua0xheWVycyIsIl92YWxpZGF0ZVRyYW5zZm9ybU9iamVjdCIsIl9sb29rVHJhY2tlciIsIl9zY2VuZSIsIl90YXJnZXQiLCJfcHJldlRhcmdldFBvcyIsIl9pc1RhcmdldE1vdmluZyIsIl9sb29rTGF5ZXJzIiwiX3RyYWNraW5nQ29uZmlncyIsIl9ibGlua0xheWVycyIsInJlZmVyZW5jZSIsImZvcndhcmRBeGlzIiwiaGFzU2FjY2FkZSIsInJlZ2lzdGVyTG9va0xheWVyIiwicmVnaXN0ZXJCbGlua0xheWVyIiwiX3JlZ2lzdGVyTG9va0FuaW1hdGlvbiIsImNvbmZpZyIsInRyYWNraW5nQ29uZmlnIiwiYW5nbGVzIiwiaCIsInByZXZBbmdsZXMiLCJzb3VyY2VQb3NpdGlvbiIsIl9nZXRXb3JsZFBvc2l0aW9uIiwidGFyZ2V0UG9zaXRpb24iLCJsb29rVmVjdG9yIiwidGFyZ2V0UG9zIiwidHJhY2tlclBvcyIsInRhcmdldFNwaGVyaWNhbCIsImNhcnRlc2lhblRvU3BoZXJpY2FsIiwidGFyZ2V0QW5nbGVzIiwiX3NwaGVyaWNhbFRvQmxlbmRWYWx1ZSIsInJlZkRpcmVjdGlvbiIsIl9nZXRPYmplY3REaXJlY3Rpb24iLCJyZWZTcGhlcmljYWwiLCJyZWZBbmdsZXMiLCJ0YXJnZXRUeXBlIiwiZGlzdGFuY2UiLCJfZ2V0VGFyZ2V0RGlzdGFuY2UiLCJmYWNlVmVjdG9yIiwic3BoZXJpY2FsIiwiYmxlbmRWYWx1ZXMiLCJtYXhIU3BlZWQiLCJleHAiLCJtYXhWU3BlZWQiLCJEMCIsImQiLCJoRHVyYXRpb24iLCJ2RHVyYXRpb24iLCJtaWNyb1NhY2NhZGUiLCJfdXBkYXRlTGF5ZXJTcGVlZCIsIl9pbml0aWFsaXplTWljcm9UaW1lciIsIm1hY3JvU2FjY2FkZSIsIm1hY3JvU2FjY2FkZVdhaXRSYW5nZSIsImhMaW1pdCIsImhGYWN0b3IiLCJ2TGltaXQiLCJ2RmFjdG9yIiwic2FjY2FkZVRhcmdldCIsIl9nZXRGYWNlVGFyZ2V0QW5nbGVzIiwiX2luaXRpYWxpemVNYWNyb1RpbWVyIiwibWluV2FpdFRpbWUiLCJtYXhXYWl0VGltZSIsIndhaXRUaW1lIiwibWljcm9TYWNjYWRlVGltZXIiLCJfc2V0TWljcm9TYWNjYWRlIiwibWFjcm9TYWNjYWRlVGltZXIiLCJfc2V0TWFjcm9TYWNjYWRlIiwiX2FkZFRyYWNraW5nQ29uZmlnIiwiaFZlbG9jaXR5IiwidlZlbG9jaXR5IiwiX3NldExvb2tBbmdsZXMiLCJfcmVzZXRMb29rQW5nbGVzIiwiZGVsdGFTZWNvbmRzIiwidHJpZ2dlckJsaW5rIiwiY3VycmVudEgiLCJjdXJyZW50ViIsInRhcmdldEgiLCJ0YXJnZXRWIiwicHJldlRhcmdldEgiLCJwcmV2VGFyZ2V0ViIsImNoYW5nZUFtb3VudCIsInRvRGVncmVlcyIsImdldEFuZ2xlQmV0d2VlbiIsImRhbXBWYWx1ZSIsInNldFRhcmdldCIsInNldFRhcmdldEJ5TmFtZSIsInNldFRhcmdldEJ5SWQiLCJvYmoiLCJmb3J3YXJkVmVjdG9yIiwicm90YXRpb24iLCJnZXRSb3RhdGlvbk1hdHJpeCIsIl9nZXRXb3JsZE1hdHJpeCIsInJvdGF0ZVZlY3RvciIsInRoZXRhIiwicGhpIiwiVHJhbnNmb3JtTm9kZSIsImdldFRyYW5zZm9ybU5vZGVCeU5hbWUiLCJnZXRUcmFuc2Zvcm1Ob2RlQnlJRCIsImdldFdvcmxkTWF0cml4IiwibSIsIkNvcmVQb2ludE9mSW50ZXJlc3RGZWF0dXJlIiwiZW52IiwiVGV4dFRvU3BlZWNoVXRpbHMiLCJ0ZXh0IiwicmFuZG9tTWFya3MiLCJpbnRlcm5hbE1hcCIsIl9wcm9jZXNzSW5wdXRNYXAiLCJzcGVha1RhZ3MiLCJzc21sTWFya1JlZ2V4Iiwic3NtbFRhZ1JlZ2V4IiwiZXhpc3RpbmdUYWdzIiwiZXhlYyIsInN0YXJ0IiwiZW5kIiwiY2h1bmtzIiwic3NtbE1hcmtSZXN1bHQiLCJkdXBsaWNhdGVNYXJrVG9DaGVjayIsImV4aXN0aW5nVGFnIiwic3Vic3RyIiwiX2luc2VydE1hcmtzIiwibWFya1RleHQiLCJtYXJrZWRUZXh0Iiwiam9pbiIsImFkZE1hcmtzVG9Vbm1hcmtlZFNlbnRlbmNlcyIsInZhbGlkYXRlVGV4dCIsIm1hcmtzIiwibWFya0luZGljZXMiLCJtYXJrUmVzdWx0Iiwic3NtbFJlc3VsdCIsImNsZWFuZWRUZXh0IiwiZXhpc3RpbmdTc21sIiwid2hpdGVzcGFjZSIsInNlbnRlbmNlRW5kSW5kaWNlcyIsIl9nZXRTZW50ZW5jZUVuZHMiLCJwcmV2SW5kZXgiLCJ0YXJnZXRJbmRpY2VzIiwiY29udGFpbnNNYXJrIiwibWFya0luZGV4IiwicmFuZG9tTWFya2VkVGV4dCIsIl9pbnNlcnRSYW5kb21NYXJrc0F0Iiwib2Zmc2V0IiwicmFuZG9tTWFyayIsInNlbnRlbmNlUmVnZXgiLCJlbmRTZW50ZW5jZVJlZ2V4Iiwic2VudGVuY2VFbmRzIiwicHVuY3RSZXN1bHQiLCJkdXBsaWNhdGVzVG9DaGVjayIsIndvcmRSZWdleCIsImxvd2VyQ2FzZVdvcmQiLCJjaGVja0R1cGxpY2F0ZSIsIm1hcmtlZFdvcmRzIiwidG9Mb3dlckNhc2UiLCJleGlzdGluZ01hcmtzIiwibGlzdCIsImlzQXJyYXkiLCJBYnN0cmFjdFNwZWVjaCIsInNwZWFrZXIiLCJzcGVlY2htYXJrcyIsIl9zcGVha2VyIiwiX3RleHQiLCJfc3BlZWNobWFya3MiLCJfc3BlZWNobWFya09mZnNldCIsIl9zdGFydFRpbWUiLCJfbG9jYWxUaW1lIiwiX3BhdXNlVGltZSIsIl9wbGF5aW5nIiwiX21hcmtJdGVyIiwiX2N1cnJlbnRNYXJrIiwiX2VuZFRpbWUiLCJfcHJvbWlzZSIsIm9uSW50ZXJydXB0IiwiaW50ZXJydXB0IiwidHlwZSIsInNwZWVjaCIsIl9jaGVja0ZpbmlzaGVkIiwiX2NyZWF0ZVByb21pc2UiLCJlbmdpbmVzIiwiYXVkaW9Gb3JtYXRzIiwic3BlZWNobWFya1R5cGVzIiwic2FtcGxlUmF0ZXMiLCJtcDMiLCJyYXRlcyIsImRlZmF1bHRzIiwic3RhbmRhcmQiLCJuZXVyYWwiLCJwY20iLCJvZ2dfdm9yYmlzIiwiYXdzVmVyc2lvbiIsIkFic3RyYWN0VGV4dFRvU3BlZWNoRmVhdHVyZSIsInZvaWNlIiwiZW5naW5lIiwibGFuZ3VhZ2UiLCJhdWRpb0Zvcm1hdCIsInNhbXBsZVJhdGUiLCJtaW5FbmRNYXJrRHVyYXRpb24iLCJ2b2x1bWUiLCJpc0dsb2JhbCIsIl9zcGVlY2hDYWNoZSIsIl9jdXJyZW50U3BlZWNoIiwiX2N1cnJlbnRQcm9taXNlIiwiX2lzVmFsaWRhdGVkIiwiX2lzR2xvYmFsIiwiX3ZvbHVtZVBhdXNlZCIsIl92b2ljZSIsIlBPTExZX0RFRkFVTFRTIiwiVm9pY2VJZCIsIl9sYW5ndWFnZSIsIkxhbmd1YWdlTmFtZSIsIl9lbmdpbmUiLCJFbmdpbmUiLCJfYXVkaW9Gb3JtYXQiLCJPdXRwdXRGb3JtYXQiLCJfc2FtcGxlUmF0ZSIsIlNhbXBsZVJhdGUiLCJfbWluRW5kTWFya0R1cmF0aW9uIiwiQVdTX1ZFUlNJT04iLCJQT0xMWV9NSU5fTkVVUkFMX1ZFUlNJT04iLCJmb3JtYXQiLCJyYXRlIiwidm9pY2VJZCIsIlBPTExZX1ZPSUNFUyIsIklkIiwiU3VwcG9ydGVkRW5naW5lcyIsImxhbmd1YWdlQ29kZSIsIlBPTExZX0xBTkdVQUdFUyIsImF2YWlsYWJsZUNvZGVzIiwiTGFuZ3VhZ2VDb2RlIiwiQWRkaXRpb25hbExhbmd1YWdlQ29kZXMiLCJQT0xMWV9MQU5HVUFHRV9DT0RFUyIsIl92YWxpZGF0ZUVuZ2luZSIsIl92YWxpZGF0ZUZvcm1hdCIsIl92YWxpZGF0ZVJhdGUiLCJfdmFsaWRhdGVWb2ljZSIsIl92YWxpZGF0ZUxhbmd1YWdlIiwiaXNSZWFkeSIsIl92YWxpZGF0ZSIsInNraXBTcGVlY2hlcyIsImN1cnJlbnRDb25maWciLCJfZ2V0Q29uZmlnIiwiY3VycmVudENvbmZpZ1N0ciIsIkxhbmd1YWdlIiwidmFsaWRDb25maWciLCJjb25maWdTdHIiLCJzcGVlY2hDb25maWdTdHIiLCJfdXBkYXRlU3BlZWNoIiwiYXVkaW9QYXJhbXMiLCJUZXh0IiwiVGV4dFR5cGUiLCJzcGVlY2htYXJrUGFyYW1zIiwiU3BlZWNoTWFya1R5cGVzIiwiX3N5bnRoZXNpemVTcGVlY2htYXJrcyIsIl9zeW50aGVzaXplQXVkaW8iLCJyZXN1bHRzIiwiX2NyZWF0ZVNwZWVjaCIsImF1ZGlvQ29uZmlnIiwiU3BlZWNoIiwicGFyYW1zIiwicHJlc2lnbmVyIiwiZ2V0U3ludGhlc2l6ZVNwZWVjaFVybCIsInVybCIsInBvbGx5Iiwic3ludGhlc2l6ZVNwZWVjaCIsImpzb25TdHJpbmciLCJBdWRpb1N0cmVhbSIsImpzb24iLCJkYXRhU3RyIiwiZGF0YSIsIlN0cmluZyIsImZyb21DaGFyQ29kZSIsIm1hcmtUeXBlcyIsImVuZE1hcmtUeXBlcyIsInNwZWVjaE1hcmtzIiwibWF0Y2hBbGwiLCJudW1NYXJrcyIsImxhc3RNYXJrIiwiZW5kVGltZXMiLCJlbmRUaW1lIiwiX3VwZGF0ZUNvbmZpZyIsImdldFZvbHVtZSIsInNldFZvbHVtZSIsInBhdXNlVm9sdW1lIiwicmVzdW1lVm9sdW1lIiwiX3ZvbHVtZSIsInZvbHVtZVBlbmRpbmciLCJwbGF5aW5nIiwiY3VycmVudFByb21pc2UiLCJfZ2V0U3BlZWNoIiwiYXVkaW8iLCJfc2V0Q3VycmVudFNwZWVjaCIsIl9zdGFydFNwZWVjaCIsInZlcnNpb24iLCJjdXN0b21Vc2VyQWdlbnQiLCJfd2l0aEN1c3RvbVVzZXJBZ2VudCIsInNlcnZpY2UiLCJfaXNSZWFkeSIsImF2YWlsYWJsZVZvaWNlcyIsImF2YWlsYWJsZUxhbmd1YWdlcyIsImF2YWlsYWJsZUxhbmd1YWdlQ29kZXMiLCJtaW5OZXVyYWxTZGsiLCJkZXNjcmliZVZvaWNlcyIsInJlc3BvbnNlIiwiYWxsQ29kZXMiLCJWb2ljZXMiLCJjb2RlIiwicmVhZHkiLCJjdXJyZW50VXNlckFnZW50Iiwic3VtZXJpYW5Ib3N0c1VzZXJBZ2VudCIsImNvbmNhdCIsIkxleGljb25OYW1lcyIsIl9hdWRpbyIsIm9uZW5kZWQiLCJfYXVkaW9GaW5pc2hlZCIsInNldFRpbWVvdXQiLCJfcGxheUF1ZGlvIiwiX3BhdXNlQXVkaW8iLCJvbkVuZGVkT2JzZXJ2YWJsZSIsImNhbGwiLCJDb3JlU3BlZWNoIiwiX2VuYWJsZWQiLCJfc2V0QXVkaW9Db250ZXh0IiwiX29ic2VydmVBdWRpb0NvbnRleHQiLCJfYXVkaW9Db250ZXh0IiwiQXVkaW9Db250ZXh0Iiwib25zdGF0ZWNoYW5nZSIsIkF1ZGlvIiwibG9vcCIsImNyb3NzT3JpZ2luIiwicHJlbG9hZCIsImRvY3VtZW50IiwiYm9keSIsImFwcGVuZENoaWxkIiwibG9hZCIsInJlc3VtZUF1ZGlvIiwiZW5hYmxlZCIsImF0dGFjaFRvIiwiX2F0dGFjaFRvIiwiYXVkaW9FbmdpbmUiLCJhdWRpb0NvbnRleHQiLCJ1bmxvY2siLCJTb3VuZCIsInN0cmVhbWluZyIsInNraXBDb2RlY0NoZWNrIiwiYXR0YWNoVG9NZXNoIiwiQ29yZVRleHRUb1NwZWVjaEZlYXR1cmUiLCJiYWJ5bG9uQmxlbmRNb2RlcyIsImJhYnlsb25Hcm91cCIsImJhYnlsb25TY2VuZSIsIl9vbkZpbmlzaGVkRXZlbnQiLCJfb25Mb29wRXZlbnQiLCJub3JtYWxpemUiLCJfYmFieWxvblNjZW5lIiwiX2JhYnlsb25BbmltYXRpb25zIiwidGFyZ2V0ZWRBbmltYXRpb25zIiwiX2JhYnlsb25BbmltYXRhYmxlcyIsIl9iYWJ5bG9uTnVtQW5pbWF0aW9ucyIsIl9iYWJ5bG9uTG9vcENvdW50IiwiX2xvb3BlZCIsIl9maW5pc2hlZCIsIl9zdGFydGVkIiwiYW5pbWF0YWJsZSIsIm1hc3RlckZyYW1lIiwidGFyZ2V0RnJhbWUiLCJnb1RvRnJhbWUiLCJzcGVlZFJhdGlvIiwibG9vcEFuaW1hdGlvbiIsIm9sZEFuaW1hdGFibGVzIiwidGFyZ2V0ZWRBbmltYXRpb24iLCJiZWdpbkRpcmVjdEFuaW1hdGlvbiIsImRpc3Bvc2VPbkVuZCIsIl9jcmVhdGVBbmltYXRhYmxlcyIsInRpbWVTY2FsZVBlbmRpbmciLCJDb3JlU2luZ2xlU3RhdGUiLCJnZXRTY2VuZSIsImNsaXAiLCJDb3JlQW5pbWF0aW9uRmVhdHVyZSIsIkVhc2luZyIsImF3cyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0lBQ01BLFE7Ozs7O0FBQ0o7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDRSxzQkFBa0U7QUFBQTs7QUFBQSxRQUF0REMsVUFBc0QsdUVBQXpDLFlBQU0sQ0FBRSxDQUFpQztBQUFBLFFBQS9CQyxTQUErQjtBQUFBLFFBQXBCQyxRQUFvQjtBQUFBLFFBQVZDLFFBQVU7O0FBQUE7O0FBQ2hFLFFBQUksT0FBT0gsVUFBUCxLQUFzQixVQUExQixFQUFzQztBQUNwQyxZQUFNLElBQUlJLEtBQUosOERBQU47QUFHRDs7QUFFRCxRQUFJLE9BQU9ILFNBQVAsS0FBcUIsV0FBckIsSUFBb0MsT0FBT0EsU0FBUCxLQUFxQixVQUE3RCxFQUF5RTtBQUN2RSxZQUFNLElBQUlHLEtBQUosNkRBQU47QUFHRDs7QUFFRCxRQUFJLE9BQU9GLFFBQVAsS0FBb0IsV0FBcEIsSUFBbUMsT0FBT0EsUUFBUCxLQUFvQixVQUEzRCxFQUF1RTtBQUNyRSxZQUFNLElBQUlFLEtBQUosNERBQU47QUFHRDs7QUFFRCxRQUFJ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QUNGO0FBQ0E7QUFDRWxvQixNQUFJLEVBQUpBLFFBQUlBO0FBeERTLENBQWYiLCJmaWxlIjoiMzMzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXHJcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxyXG5cclxuLyoqXHJcbiAqIFRoZSBidWlsdC1pbiBjbGFzcyBmb3IgYXN5bmNocm9ub3VzIFByb21pc2VzLlxyXG4gKiBAZXh0ZXJuYWwgUHJvbWlzZVxyXG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL1Byb21pc2VcclxuICovXHJcblxyXG4vKipcclxuICogQSBQcm9taXNlIG9iamVjdCB0aGF0IGNhbiBiZSByZXNvbHZlZCwgcmVqZWN0ZWQgb3IgY2FuY2VsZWQgYXQgYW55IHRpbWUgYnkgdGhlXHJcbiAqIHVzZXIuXHJcbiAqXHJcbiAqIEBleHRlbmRzIGV4dGVybmFsOlByb21pc2VcclxuICovXHJcbmNsYXNzIERlZmVycmVkIGV4dGVuZHMgUHJvbWlzZSB7XHJcbiAgLyoqXHJcbiAgICogQGNvbnN0cnVjdG9yXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbZXhlY3V0YWJsZT0oKSA9PiB7fV0gLSBUaGUgZnVuY3Rpb24gdG8gYmUgZXhlY3V0ZWQgYnkgdGhlXHJcbiAgICogY29uc3RydWN0b3IsIGR1cmluZyB0aGUgcHJvY2VzcyBvZiBjb25zdHJ1Y3RpbmcgdGhlIHByb21pc2UuIFRoZSBzaWduYXR1cmVcclxuICAgKiBvZiB0aGlzIGlzIGV4cGVjdGVkIHRvIGJlOiBleGVjdXRhYmxlKCAgcmVzb2x1dGlvbkZ1bmMsIHJlamVjdGlvbkZ1bmMsIGNhbmNlbGxhdGlvbkZ1bmMgKS5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb25SZXNvbHZlIC0gT3B0aW9uYWwgZnVuY3Rpb24gdG8gZXhlY3V0ZSBvbmNlIHRoZSBwcm9taXNlXHJcbiAgICogaXMgcmVzb2x2ZWQuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9uUmVqZWN0IC0gT3B0aW9uYWwgZnVuY3Rpb24gdG8gZXhlY3V0ZSBvbmNlIHRoZSBwcm9taXNlXHJcbiAgICogaXMgcmVqZWN0ZWQuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9uQ2FuY2VsIC0gT3B0aW9uYWwgZnVuY3Rpb24gdG8gZXhlY3V0ZSBpZiB0aGUgdXNlciBjYW5jZWxzXHJcbiAgICogdGhlIHByb21pc2UuIENhbmNlbGluZyByZXN1bHRzIGluIHRoZSBwcm9taXNlIGhhdmluZyBhIHN0YXR1cyBvZiAncmVzb2x2ZWQnLlxyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKGV4ZWN1dGFibGUgPSAoKSA9PiB7fSwgb25SZXNvbHZlLCBvblJlamVjdCwgb25DYW5jZWwpIHtcclxuICAgIGlmICh0eXBlb2YgZXhlY3V0YWJsZSAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgYENhbm5vdCBjcmVhdGUgbmV3IERlZmVycmVkLiBFeGVjdXRhYmxlIG11c3QgYmUgYSBmdW5jdGlvbi5gXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHR5cGVvZiBvblJlc29sdmUgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBvblJlc29sdmUgIT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgIGBDYW5ub3QgY3JlYXRlIG5ldyBEZWZlcnJlZC4gT25SZXNvbHZlIG11c3QgYmUgYSBmdW5jdGlvbi5gXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHR5cGVvZiBvblJlamVjdCAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIG9uUmVqZWN0ICE9PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgQ2Fubm90IGNyZWF0ZSBuZXcgRGVmZXJyZWQuIE9uUmVqZWN0IG11c3QgYmUgYSBmdW5jdGlvbi5gXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHR5cGVvZiBvbkNhbmNlbCAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIG9uQ2FuY2VsICE9PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgQ2Fubm90IGNyZWF0ZSBuZXcgRGVmZXJyZWQuIE9uQ2FuY2VsIG11c3QgYmUgYSBmdW5jdGlvbi5gXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHJlcztcclxuICAgIGxldCByZWo7XHJcbiAgICBsZXQgY2FuY2VsO1xyXG4gICAgY29uc3Qgc3RhdHVzID0ge1xyXG4gICAgICByZXNvbHZlZDogZmFsc2UsXHJcbiAgICAgIHJlamVjdGVkOiBmYWxzZSxcclxuICAgICAgY2FuY2VsZWQ6IGZhbHNlLFxyXG4gICAgICBwZW5kaW5nOiB0cnVlLFxyXG4gICAgfTtcclxuXHJcbiAgICBzdXBlcigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgIC8vIFN0b3JlIHRoZSByZXNvbHZlclxyXG4gICAgICByZXMgPSB2YWx1ZSA9PiB7XHJcbiAgICAgICAgaWYgKHN0YXR1cy5wZW5kaW5nKSB7XHJcbiAgICAgICAgICBzdGF0dXMucmVzb2x2ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgc3RhdHVzLnBlbmRpbmcgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICBpZiAodHlwZW9mIG9uUmVzb2x2ZSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IG9uUmVzb2x2ZSh2YWx1ZSk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgcmV0dXJuIHJlc29sdmUodmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfTtcclxuXHJcbiAgICAgIC8vIFN0b3JlIHRoZSByZWplY3RlclxyXG4gICAgICByZWogPSB2YWx1ZSA9PiB7XHJcbiAgICAgICAgaWYgKHN0YXR1cy5wZW5kaW5nKSB7XHJcbiAgICAgICAgICBzdGF0dXMucmVqZWN0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgc3RhdHVzLnBlbmRpbmcgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICBpZiAodHlwZW9mIG9uUmVqZWN0ID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIHZhbHVlID0gb25SZWplY3QodmFsdWUpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHJldHVybiByZWplY3QodmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfTtcclxuXHJcbiAgICAgIC8vIFN0b3JlIHRoZSBjYW5jZWxlclxyXG4gICAgICBjYW5jZWwgPSB2YWx1ZSA9PiB7XHJcbiAgICAgICAgaWYgKHN0YXR1cy5wZW5kaW5nKSB7XHJcbiAgICAgICAgICBzdGF0dXMuY2FuY2VsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgc3RhdHVzLnBlbmRpbmcgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICBpZiAodHlwZW9mIG9uQ2FuY2VsID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIHZhbHVlID0gb25DYW5jZWwodmFsdWUpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHJldHVybiByZXNvbHZlKHZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH07XHJcblxyXG4gICAgICAvLyBSdW4gdGhlIGV4ZWN1dGFibGUgd2l0aCBjdXN0b20gcmVzb2x2ZXIgYW5kIHJlamVjdGVyXHJcbiAgICAgIGV4ZWN1dGFibGUocmVzLCByZWosIGNhbmNlbCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLl9zdGF0dXMgPSBzdGF0dXM7XHJcbiAgICB0aGlzLl9yZXNvbHZlID0gcmVzO1xyXG4gICAgdGhpcy5fcmVqZWN0ID0gcmVqO1xyXG4gICAgdGhpcy5fY2FuY2VsID0gY2FuY2VsO1xyXG4gICAgdGhpcy5fZXhlY3V0YWJsZSA9IGV4ZWN1dGFibGU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSByZXNvbHZlZCBzdGF0ZSBvZiB0aGUgcHJvbWlzZS5cclxuICAgKlxyXG4gICAqIEByZWFkb25seVxyXG4gICAqL1xyXG4gIGdldCByZXNvbHZlZCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9zdGF0dXMucmVzb2x2ZWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSByZWplY3RlZCBzdGF0ZSBvZiB0aGUgcHJvbWlzZS5cclxuICAgKlxyXG4gICAqIEByZWFkb25seVxyXG4gICAqL1xyXG4gIGdldCByZWplY3RlZCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9zdGF0dXMucmVqZWN0ZWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSBjYW5jZWxlZCBzdGF0ZSBvZiB0aGUgcHJvbWlzZS5cclxuICAgKlxyXG4gICAqIEByZWFkb25seVxyXG4gICAqL1xyXG4gIGdldCBjYW5jZWxlZCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9zdGF0dXMuY2FuY2VsZWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSBwZW5kaW5nIHN0YXRlIG9mIHRoZSBwcm9taXNlLlxyXG4gICAqXHJcbiAgICogQHJlYWRvbmx5XHJcbiAgICovXHJcbiAgZ2V0IHBlbmRpbmcoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fc3RhdHVzLnBlbmRpbmc7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGb3JjZSB0aGUgcHJvbWlzZSB0byByZXNvbHZlLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHthbnk9fSB2YWx1ZSAtIFZhbHVlIHRvIHBhc3MgdG8gdGhlIHJlc29sdmVyLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge2FueX0gLSBUaGUgcmV0dXJuIHZhbHVlIG9mIHRoZSByZXNvbHZlciBmdW5jdGlvbi5cclxuICAgKi9cclxuICByZXNvbHZlKHZhbHVlKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fcmVzb2x2ZSh2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGb3JjZSB0aGUgcHJvbWlzZSB0byByZWplY3QuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge2FueT19IHZhbHVlIC0gVmFsdWUgdG8gcGFzcyB0byB0aGUgcmVqZWN0ZXIuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7YW55fSAtIFRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIHJlamVjdGVyIGZ1bmN0aW9uLlxyXG4gICAqL1xyXG4gIHJlamVjdCh2YWx1ZSkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3JlamVjdCh2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGb3JjZSB0aGUgcHJvbWlzZSB0byByZXNvbHZlIGFuZCBzZXQgdGhlIGNhbmNlbGVkIHN0YXRlIHRvIHRydWUuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge2FueT19IHZhbHVlIC0gVmFsdWUgdG8gcGFzcyB0byB0aGUgY2FuY2VsbGVyLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge2FueX0gLSBUaGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBjYW5jZWxsZXIgZnVuY3Rpb24uXHJcbiAgICovXHJcbiAgY2FuY2VsKHZhbHVlKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fY2FuY2VsKHZhbHVlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJ1biB0aGUgcHJvbWlzZSBmdW5jdGlvbiB0byB0cnkgdG8gcmVzb2x2ZSB0aGUgcHJvbWlzZS4gUHJvbWlzZSBtdXN0IGJlXHJcbiAgICogcGVuZGluZy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7Li4uYW55fSBhcmdzIC0gT3B0aW9uYWwgYXJndW1lbnRzIHRvIHBhc3MgYWZ0ZXIgcmVzb2x2ZSBhbmQgcmVqZWN0LlxyXG4gICAqL1xyXG4gIGV4ZWN1dGUoLi4uYXJncykge1xyXG4gICAgaWYgKHRoaXMucGVuZGluZykge1xyXG4gICAgICB0aGlzLl9leGVjdXRhYmxlKHRoaXMuX3Jlc29sdmUsIHRoaXMuX3JlamVjdCwgdGhpcy5fY2FuY2VsLCAuLi5hcmdzKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiBhIGNhbmNlbGVkIGRlZmVycmVkIHByb21pc2UuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge2FueT19IHZhbHVlIC0gVmFsdWUgdG8gY2FuY2VsIHRoZSBwcm9taXNlIHdpdGguXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7RGVmZXJyZWR9XHJcbiAgICovXHJcbiAgc3RhdGljIGNhbmNlbCh2YWx1ZSkge1xyXG4gICAgcmV0dXJuIG5ldyBEZWZlcnJlZCgoX3Jlc29sdmUsIF9yZWplY3QsIGNhbmNlbCkgPT4ge1xyXG4gICAgICBjYW5jZWwodmFsdWUpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVmZXJyZWQgcHJvbWlzZSB0aGF0IHdpbGwgcmVzb2x2ZSBvciByZWplY3Qgb25jZSBhbGwgcHJvbWlzZXNcclxuICAgKiBpbiB0aGUgaW5wdXQgYXJyYXkgaGF2ZSBiZWVuIHJlc29sdmVkIG9yIG9uZSBwcm9taXNlIGlzIGNhbmNlbGVkIG9yIHJlamVjdGVkLlxyXG4gICAqIFByb21pc2VzIGluIHRoZSBhcnJheSB0aGF0IGFyZSBEZWZlcnJlZCBwcm9taXNlcyB3aWxsIGJlIG1hbnVhbGx5IHJlc29sdmVkLFxyXG4gICAqIHJlamVjdGVkIG9yIGNhbmNlbGVkIHdoZW4gY2FsbGluZyByZXNvbHZlLCByZWplY3Qgb3IgY2FuY2VsIG9uIHRoZSByZXR1cm4gcHJvbWlzZS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7QXJyYXkuPGFueT59IGl0ZXJhYmxlIC0gQW4gaXRlcmFibGUgc3VjaCBhcyBhbiBhcnJheS5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb25SZXNvbHZlIC0gT3B0aW9uYWwgZnVuY3Rpb24gdG8gZXhlY3V0ZSBvbmNlIHRoZSBwcm9taXNlXHJcbiAgICogaXMgcmVzb2x2ZWQuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9uUmVqZWN0IC0gT3B0aW9uYWwgZnVuY3Rpb24gdG8gZXhlY3V0ZSBvbmNlIHRoZSBwcm9taXNlXHJcbiAgICogaXMgcmVqZWN0ZWQuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9uQ2FuY2VsIC0gT3B0aW9uYWwgZnVuY3Rpb24gdG8gZXhlY3V0ZSBpZiB0aGUgdXNlciBjYW5jZWxzXHJcbiAgICogdGhlIHByb21pc2UuIENhbmNlbGluZyByZXN1bHRzIGluIHRoZSBwcm9taXNlIGhhdmluZyBhIHN0YXR1cyBvZiAnY2FuY2VsZWQnLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMgRGVmZXJyZWRcclxuICAgKi9cclxuICBzdGF0aWMgYWxsKGl0ZXJhYmxlLCBvblJlc29sdmUsIG9uUmVqZWN0LCBvbkNhbmNlbCkge1xyXG4gICAgaWYgKGl0ZXJhYmxlID09IG51bGwgfHwgdHlwZW9mIGl0ZXJhYmxlW1N5bWJvbC5pdGVyYXRvcl0gIT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgbGV0IGUgPSBgQ2Fubm90IGV4ZWN1dGUgRGVmZXJyZWQuYWxsLiBGaXJzdCBhcmd1bWVudCBtdXN0IGJlIGl0ZXJhYmxlLmA7XHJcblxyXG4gICAgICBpZiAodHlwZW9mIG9uUmVqZWN0ID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgZSA9IG9uUmVqZWN0KGUpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gRGVmZXJyZWQucmVqZWN0KGUpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGFycmF5ID0gWy4uLml0ZXJhYmxlXTtcclxuICAgIGNvbnN0IGRlZmVycmVkID0gYXJyYXkuZmlsdGVyKGl0ZW0gPT4gaXRlbSBpbnN0YW5jZW9mIERlZmVycmVkKTtcclxuXHJcbiAgICBjb25zdCByZXN1bHQgPSBuZXcgRGVmZXJyZWQoXHJcbiAgICAgIHVuZGVmaW5lZCxcclxuICAgICAgcmVzb2x2ZVZhbHVlID0+IHtcclxuICAgICAgICBkZWZlcnJlZC5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgaXRlbS5yZXNvbHZlKHJlc29sdmVWYWx1ZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgZGVmZXJyZWQubGVuZ3RoID0gMDtcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiBvblJlc29sdmUgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgIHJldHVybiBvblJlc29sdmUocmVzb2x2ZVZhbHVlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmV0dXJuIHJlc29sdmVWYWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yID0+IHtcclxuICAgICAgICBkZWZlcnJlZC5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgaXRlbS5yZWplY3QoZXJyb3IpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGRlZmVycmVkLmxlbmd0aCA9IDA7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2Ygb25SZWplY3QgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgIHJldHVybiBvblJlamVjdChlcnJvcik7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJldHVybiBlcnJvcjtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIGNhbmNlbFZhbHVlID0+IHtcclxuICAgICAgICBkZWZlcnJlZC5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgaXRlbS5jYW5jZWwoY2FuY2VsVmFsdWUpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGRlZmVycmVkLmxlbmd0aCA9IDA7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2Ygb25DYW5jZWwgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgIHJldHVybiBvbkNhbmNlbChjYW5jZWxWYWx1ZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJldHVybiBjYW5jZWxWYWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICk7XHJcblxyXG4gICAgY29uc3QgbnVtSXRlbXMgPSBhcnJheS5sZW5ndGg7XHJcbiAgICBjb25zdCBpdGVtVHJhY2tlciA9IHtcclxuICAgICAgZmFpbGVkOiBmYWxzZSxcclxuICAgICAgbnVtUmVzb2x2ZWQ6IDAsXHJcbiAgICAgIHJlc29sdXRpb25zOiBbXVxyXG4gICAgfVxyXG5cclxuICAgIGFycmF5LmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XHJcbiAgICAgIGlmIChpdGVtVHJhY2tlci5mYWlsZWQpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH0gZWxzZSBpZiAoIShpdGVtIGluc3RhbmNlb2YgUHJvbWlzZSkpIHtcclxuICAgICAgICBpdGVtVHJhY2tlci5yZXNvbHV0aW9uc1tpbmRleF0gPSBpdGVtO1xyXG4gICAgICAgIGl0ZW1UcmFja2VyLm51bVJlc29sdmVkICs9IDE7XHJcblxyXG4gICAgICAgIGlmIChpdGVtVHJhY2tlci5udW1SZXNvbHZlZCA9PT0gbnVtSXRlbXMpIHtcclxuICAgICAgICAgIHJlc3VsdC5yZXNvbHZlKGl0ZW1UcmFja2VyLnJlc29sdXRpb25zKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpdGVtLnRoZW4oXHJcbiAgICAgICAgdmFsdWUgPT4ge1xyXG4gICAgICAgICAgaWYgKCFpdGVtVHJhY2tlci5mYWlsZWQgJiYgIWl0ZW0uY2FuY2VsZWQpIHtcclxuICAgICAgICAgICAgaXRlbVRyYWNrZXIucmVzb2x1dGlvbnNbaW5kZXhdID0gdmFsdWU7XHJcbiAgICAgICAgICAgIGl0ZW1UcmFja2VyLm51bVJlc29sdmVkICs9IDE7XHJcblxyXG4gICAgICAgICAgICBpZiAoaXRlbVRyYWNrZXIubnVtUmVzb2x2ZWQgPT09IG51bUl0ZW1zKSB7XHJcbiAgICAgICAgICAgICAgcmVzdWx0LnJlc29sdmUoaXRlbVRyYWNrZXIucmVzb2x1dGlvbnMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKCFpdGVtVHJhY2tlci5mYWlsZWQpIHtcclxuICAgICAgICAgICAgaXRlbVRyYWNrZXIuZmFpbGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgcmVzdWx0LmNhbmNlbCh2YWx1ZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvciA9PiB7XHJcbiAgICAgICAgICBpZiAoIWl0ZW1UcmFja2VyLmZhaWxlZCkge1xyXG4gICAgICAgICAgICBpdGVtVHJhY2tlci5mYWlsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICByZXN1bHQucmVqZWN0KGVycm9yKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgRGVmZXJyZWQ7XHJcbiIsIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxyXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTBcclxuaW1wb3J0IERlZmVycmVkIGZyb20gJ2NvcmUvRGVmZXJyZWQnO1xyXG5cclxuLyoqXHJcbiAqIEEgY29sbGVjdGlvbiBvZiB1c2VmdWwgZ2VuZXJpYyBmdW5jdGlvbnMuXHJcbiAqXHJcbiAqIEBoaWRlY29uc3RydWN0b3JcclxuICovXHJcbmNsYXNzIFV0aWxzIHtcclxuICAvKipcclxuICAgKiBAc3RhdGljXHJcbiAgICpcclxuICAgKiBHZW5lcmF0ZSBhIHVuaXF1ZSBpZFxyXG4gICAqXHJcbiAgICogQHJldHVybnMge1N0cmluZ31cclxuICAgKi9cclxuICBzdGF0aWMgY3JlYXRlSWQoKSB7XHJcbiAgICByZXR1cm4gJ3h4eHh4eHh4eHh4eDR4eHh5eHh4eHh4eHh4eHh4eHh4Jy5yZXBsYWNlKC9beHldL2csIGMgPT4ge1xyXG4gICAgICBjb25zdCByYW5kb21OdW1iZXIgPSBNYXRoLmZsb29yKChEYXRlLm5vdygpICsgTWF0aC5yYW5kb20oKSAqIDE2KSAlIDE2KTtcclxuICAgICAgaWYgKGMgPT09ICd4Jykge1xyXG4gICAgICAgIHJldHVybiByYW5kb21OdW1iZXIudG9TdHJpbmcoMTYpO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIFNldCBiaXQgNiBhbmQgNyB0byAwIGFuZCAxXHJcbiAgICAgIHJldHVybiAoKHJhbmRvbU51bWJlciAmIDB4MykgfCAweDgpLnRvU3RyaW5nKDE2KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQHN0YXRpY1xyXG4gICAqXHJcbiAgICogQ2hlY2sgYSBuYW1lIHN0cmluZyBhZ2FpbnN0IGFuIGFycmF5IG9mIHN0cmluZ3MgdG8gZGV0ZXJtaW5lIGlmIGl0IGlzIHVuaXF1ZS5cclxuICAgKiBJZiBpdCBpc24ndCwgYXBwZW5kIGluY3JlbWVudGVkIHRyYWlsaW5nIGludGVnZXJzIHRvIHRoZSBlbmQgb2YgdGhlIG5hbWVcclxuICAgKiB1bnRpbCBpdCBpcyB1bmlxdWUuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIFN0cmluZyBuYW1lIHRvIG1ha2UgdW5pcXVlLlxyXG4gICAqIEBwYXJhbSB7QXJyYXkuPHN0cmluZz49fSBuYW1lQXJyYXkgLSBBcnJheSBvZiBzdHJpbmcgbmFtZXMgdG8gY2hlY2sgYWdhaW5zLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge3N0cmluZ31cclxuICAgKi9cclxuICBzdGF0aWMgZ2V0VW5pcXVlTmFtZShuYW1lLCBuYW1lQXJyYXkgPSBbXSkge1xyXG4gICAgLy8gSWYgdGhlIG5hbWUgaXNuJ3QgaW4gdGhlIGFycmF5IHJldHVybiBpdCByaWdodCBhd2F5XHJcbiAgICBpZiAoIW5hbWVBcnJheS5pbmNsdWRlcyhuYW1lKSkge1xyXG4gICAgICByZXR1cm4gbmFtZTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBuYW1lU2V0ID0gbmV3IFNldChuYW1lQXJyYXkpO1xyXG5cclxuICAgIC8vIFNlcGFyYXRlIHRoZSBuYW1lIGludG8gc3RyaW5nIGFuZCB0cmFpbGluZyBudW1iZXJzXHJcbiAgICBjb25zdCBtYXRjaEdyb3VwID0gbmFtZS5tYXRjaCgvXFxkKiQvKTtcclxuICAgIGNvbnN0IHtpbmRleH0gPSBtYXRjaEdyb3VwO1xyXG4gICAgY29uc3QgYmFzZU5hbWUgPSBuYW1lLnNsaWNlKDAsIGluZGV4KTtcclxuICAgIGxldCBpbmNyZW1lbnQgPSBOdW1iZXIobWF0Y2hHcm91cFswXSk7XHJcblxyXG4gICAgLy8gRmluZCB0aGUgaGlnaGVzdCB0cmFpbGluZyBudW1iZXIgdmFsdWUgZm9yIHRoZSBiYXNlIG9mIHRoZSBuYW1lXHJcbiAgICBuYW1lU2V0LmZvckVhY2goc2V0TmFtZSA9PiB7XHJcbiAgICAgIGNvbnN0IHNldE1hdGNoR3JvdXAgPSBzZXROYW1lLm1hdGNoKC9cXGQqJC8pO1xyXG5cclxuICAgICAgaWYgKHNldE5hbWUuc2xpY2UoMCwgc2V0TWF0Y2hHcm91cC5pbmRleCkgPT09IGJhc2VOYW1lKSB7XHJcbiAgICAgICAgY29uc3Qgc2V0SW5jcmVtZW50ID0gTnVtYmVyKHNldE1hdGNoR3JvdXBbMF0pO1xyXG5cclxuICAgICAgICBpZiAoc2V0SW5jcmVtZW50ID4gaW5jcmVtZW50KSB7XHJcbiAgICAgICAgICBpbmNyZW1lbnQgPSBzZXRJbmNyZW1lbnQ7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBJbmNyZW1lbnQgdGhlIGhpZ2hlc3QgdHJhaWxpbmcgbnVtYmVyIGFuZCBhcHBlbmQgdG8gdGhlIG5hbWVcclxuICAgIHJldHVybiBgJHtiYXNlTmFtZX0ke2luY3JlbWVudCArIDF9YDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiBhIGRlZmVycmVkIHByb21pc2UgdGhhdCB3aWxsIHdhaXQgYSBnaXZlbiBudW1iZXIgb2Ygc2Vjb25kcyBiZWZvcmVcclxuICAgKiByZXNvbHZpbmcuIFBhc3MgZGVsdGEgdGltZSBpbiBtaWxsaXNlY29uZHMgdG8gdGhlIGRlZmVycmVkIHByb21pc2UncyBleGVjdXRlXHJcbiAgICogbWV0aG9kIGluIGFuIHVwZGF0ZSBsb29wIHRvIHByb2dyZXNzIHRpbWUuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge251bWJlcn0gW3NlY29uZHM9MF0gLSBOdW1iZXIgb2Ygc2Vjb25kcyB0byB3YWl0IGJlZm9yZSByZXNvbHZpbmcuXHJcbiAgICogQHBhcmFtIHtPYmplY3Q9fSBvcHRpb25zIC0gT3B0aW9uYWwgb3B0aW9ucyBvYmplY3RcclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0aW9ucy5vbkZpbmlzaF0gLSBDYWxsYmFjayB0byBleGVjdXRlIG9uY2UgdGhlIHdhaXQgdGltZVxyXG4gICAqIGlzIG1ldC5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb3B0aW9ucy5vblByb2dyZXNzIC0gQ2FsbGJhY2sgdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIHdhaXRcclxuICAgKiB0aW1lIHByb2dyZXNzZXMgdG93YXJkcyB0aGUgdGFyZ2V0IG51bWJlciBvZiBzZWNvbmRzLiBUaGUgYW1vdW50IG9mIHByb2dyZXNzXHJcbiAgICogYXMgYSAwLTEgcGVyY2VudGFnZSBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnQuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9wdGlvbnMub25DYW5jZWwgLSBDYWxsYmFjayB0byBleGVjdXRlIGlmIHRoZSB1c2VyIGNhbmNlbHNcclxuICAgKiB0aGUgd2FpdCBiZWZvcmUgY29tcGxldGlvbi5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb3B0aW9ucy5vbkVycm9yIC0gQ2FsbGJhY2sgdG8gZXhlY3V0ZSBpZiB0aGUgd2FpdCBzdG9wc1xyXG4gICAqIGJlY2F1c2UgYW4gZXJyb3IgaXMgZW5jb3VudGVyZWQuIFRoZSBlcnJvciBtZXNzYWdlIGlzIHBhc3NlZCBhcyBhIHBhcmFtZXRlci5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtEZWZlcnJlZH1cclxuICAgKi9cclxuICBzdGF0aWMgd2FpdChzZWNvbmRzID0gMCwge29uRmluaXNoLCBvblByb2dyZXNzLCBvbkNhbmNlbCwgb25FcnJvcn0gPSB7fSkge1xyXG4gICAgLy8gTWFrZSBzdXJlIHNlY29uZHMgaXMgbnVtZXJpY1xyXG4gICAgaWYgKHR5cGVvZiBzZWNvbmRzICE9PSAnbnVtYmVyJykge1xyXG4gICAgICBjb25zb2xlLndhcm4oXHJcbiAgICAgICAgYEludmFsaWQgc2Vjb25kcyB2YWx1ZSAke3NlY29uZHN9IGZvciB3YWl0LiBEZWZhdWx0aW5nIHRvIDAuYFxyXG4gICAgICApO1xyXG5cclxuICAgICAgc2Vjb25kcyA9IDA7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUmVzb2x2ZSBpbW1lZGlhdGVseSBpZiB0aGUgd2FpdCB0aW1lIGlzIG5vdCBncmVhdGVyIHRoYW4gMFxyXG4gICAgaWYgKHNlY29uZHMgPD0gMCkge1xyXG4gICAgICBpZiAodHlwZW9mIG9uRmluaXNoID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgb25GaW5pc2goKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIERlZmVycmVkLnJlc29sdmUoKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgY3VycmVudFRpbWUgPSAwO1xyXG4gICAgY29uc3QgdG90YWxUaW1lID0gc2Vjb25kcyAqIDEwMDA7IC8vIGNvbnZlcnQgdG8gbWlsbGlzZWNvbmRzXHJcblxyXG4gICAgLy8gRXhlY3V0YWJsZSB0byBwYXNzIHRvIERlZmVycmVkLCBtZWFudCB0byBiZSBydW4gaW4gYW4gdXBkYXRlIGxvb3BcclxuICAgIGNvbnN0IG9uVXBkYXRlID0gKHJlc29sdmUsIHJlamVjdCwgX2NhbmNlbCwgZGVsdGFUaW1lID0gMCkgPT4ge1xyXG4gICAgICBpZiAodHlwZW9mIGRlbHRhVGltZSAhPT0gJ251bWJlcicpIHtcclxuICAgICAgICBjb25zdCBlID0gbmV3IEVycm9yKFxyXG4gICAgICAgICAgYEludmFsaWQgcHJvcGVydHkgd2FpdCBkZWx0YVRpbWUuIERlbHRhVGltZSBtdXN0IGJlIGEgbnVtYmVyLmBcclxuICAgICAgICApO1xyXG4gICAgICAgIHJlamVjdChlKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIE1ha2Ugc3VyZSB0aW1lIGhhcyBwYXNzZWRcclxuICAgICAgaWYgKGRlbHRhVGltZSA9PT0gMCkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gU2lnbmFsIHByb2dyZXNzXHJcbiAgICAgIGN1cnJlbnRUaW1lICs9IGRlbHRhVGltZTtcclxuICAgICAgaWYgKGN1cnJlbnRUaW1lIDwgMCkge1xyXG4gICAgICAgIGN1cnJlbnRUaW1lID0gMDtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHR5cGVvZiBvblByb2dyZXNzID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgb25Qcm9ncmVzcyhNYXRoLm1pbihjdXJyZW50VGltZSAvIHRvdGFsVGltZSwgMSkpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBTaWduYWwgY29tcGxldGlvbiBvbmNlIHRpbWUgaXMgdXBcclxuICAgICAgaWYgKGN1cnJlbnRUaW1lID49IHRvdGFsVGltZSkge1xyXG4gICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gbmV3IERlZmVycmVkKG9uVXBkYXRlLCBvbkZpbmlzaCwgb25FcnJvciwgb25DYW5jZWwpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICAqIEdldCBhIHJhbmRvbSBmbG9hdCBudW1iZXIgYmV0d2VlbiBhIG1pbiAoaW5jbHVzaXZlKSBhbmQgbWF4IChleGNsdXNpdmUpIHZhbHVlXHJcbiAgICAqIEBwYXJhbSB7bnVtYmVyfSBtaW4gbWluaW11bSB2YWx1ZVxyXG4gICAgKiBAcGFyYW0ge251bWJlcn0gbWF4IG1heGltdW0gdmFsdWVcclxuICAgICogQHJldHVybnMge2Zsb2F0fVxyXG4gICAgKi9cclxuICBzdGF0aWMgZ2V0UmFuZG9tRmxvYXQobWluLCBtYXgpIHtcclxuICAgIHJldHVybiBNYXRoLnJhbmRvbSgpICogKG1heCAtIG1pbikgKyBtaW47XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgICogR2V0IGEgcmFuZG9tIGludGVnZXIgbnVtYmVyIGJldHdlZW4gYSBtaW4gKGluY2x1c2l2ZSkgYW5kIG1heCAoZXhjbHVzaXZlKSB2YWx1ZVxyXG4gICAgKiBAcGFyYW0ge251bWJlcn0gbWluIG1pbmltdW0gdmFsdWVcclxuICAgICogQHBhcmFtIHtudW1iZXJ9IG1heCBtYXhpbXVtIHZhbHVlXHJcbiAgICAqIEByZXR1cm5zIHtpbnRlZ2VyfVxyXG4gICAgKi9cclxuICBzdGF0aWMgZ2V0UmFuZG9tSW50KG1pbiwgbWF4KSB7XHJcbiAgICBtaW4gPSBNYXRoLmNlaWwobWluKTtcclxuICAgIG1heCA9IE1hdGguZmxvb3IobWF4KTtcclxuICAgIHJldHVybiBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAobWF4IC0gbWluKSkgKyBtaW47XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBVdGlscztcclxuIiwiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXHJcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxyXG5jb25zdCBSYWRpYW5Ub0RlZ3JlZSA9IDE4MCAvIE1hdGguUEk7XHJcbmNvbnN0IERlZ3JlZVRvUmFkaWFuID0gTWF0aC5QSSAvIDE4MDtcclxuXHJcbi8qKlxyXG4gKiBBIGNvbGxlY3Rpb24gb2YgdXNlZnVsIG1hdGggZnVuY3Rpb25zLlxyXG4gKlxyXG4gKiBAaGlkZWNvbnN0cnVjdG9yXHJcbiAqL1xyXG5jbGFzcyBNYXRoVXRpbHMge1xyXG4gIC8qKlxyXG4gICAqIENvbnZlcnQgdGhlIGdpdmVuIGFuZ2xlIGZyb20gcmFkaWFucyB0byBkZWdyZWVzLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IHJhZGlhbnMgLSBBbmdsZSBpbiByYWRpYW5zLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge251bWJlcn0gLSBBbmdsZSBpbiBkZWdyZWVzLlxyXG4gICAqL1xyXG4gIHN0YXRpYyB0b0RlZ3JlZXMocmFkaWFucykge1xyXG4gICAgcmV0dXJuIHJhZGlhbnMgKiBSYWRpYW5Ub0RlZ3JlZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENvbnZlcnQgdGhlIGdpdmVuIGFuZ2xlIGZyb20gZGVncmVlcyB0byByYWRpYW5zLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IGRlZ3JlZXMgLSBBbmdsZSBpbiBkZWdyZWVzLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge251bWJlcn0gLSBBbmdsZSBpbiByYWRpYW5zLlxyXG4gICAqL1xyXG4gIHN0YXRpYyB0b1JhZGlhbnMoZGVncmVlcykge1xyXG4gICAgcmV0dXJuIGRlZ3JlZXMgKiBEZWdyZWVUb1JhZGlhbjtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIExpbmVhcmx5IGludGVycG9sYXRlIGJldHdlZW4gdHdvIHZhbHVlcy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBmcm9tIC0gU3RhcnQgdmFsdWUuXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IHRvIC0gVGFyZ2V0IHZhbHVlLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBmYWN0b3IgLSAwLTEgYW1vdW50IHRvIGludGVycG9sYXRlIGJldHdlZW4gZnJvbSBhbmQgdG8uXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxyXG4gICAqL1xyXG4gIHN0YXRpYyBsZXJwKGZyb20sIHRvLCBmYWN0b3IpIHtcclxuICAgIHJldHVybiBmcm9tICsgKHRvIC0gZnJvbSkgKiBmYWN0b3I7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDbGFtcCBhIG51bWJlciBiZXR3ZWVuIDIgdmFsdWVzLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIC0gVmFsdWUgdG8gY2xhbXAuXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IFttaW49MF0gLSBNaW51bXVtIHZhbHVlLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbbWF4PTFdIC0gTWF4aW11bSB2YWx1ZS5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XHJcbiAgICovXHJcbiAgc3RhdGljIGNsYW1wKHZhbHVlLCBtaW4gPSAwLCBtYXggPSAxKSB7XHJcbiAgICByZXR1cm4gTWF0aC5tYXgobWluLCBNYXRoLm1pbih2YWx1ZSwgbWF4KSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDYWxjdWxhdGVzIHRoZSBjbG9zZXN0IHBvaW50IG9uIGEgZ2l2ZW4gMkQgbGluZSBzZWdlbWVudFxyXG4gICAqIGZyb20gYSBnaXZlbiAyRCBwb2ludC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IGEgLSBGaXJzdCBwb2ludCBvbiBsaW5lIHNlZ21lbnQuXHJcbiAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gYiAtIFNlY29uZCBwb2ludCBvbiBsaW5lIHNlZ21lbnQuXHJcbiAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gcCAtIDJEIHBvaW50LlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0FycmF5LjxudW1iZXI+fVxyXG4gICAqL1xyXG4gIHN0YXRpYyBjbG9zZXN0UG9pbnRPbkxpbmUoYSwgYiwgcCkge1xyXG4gICAgY29uc3QgZGlzdFNxciA9IE1hdGhVdGlscy5kaXN0YW5jZVNxdWFyZWQoYSwgYik7XHJcblxyXG4gICAgLy8gTGluZSBzZWdtZW50IGlzIGEgc2luZ2xlIHBvaW50XHJcbiAgICBpZiAoZGlzdFNxciA9PT0gMCkge1xyXG4gICAgICByZXR1cm4gYTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0ID1cclxuICAgICAgKChwWzBdIC0gYVswXSkgKiAoYlswXSAtIGFbMF0pICsgKHBbMV0gLSBhWzFdKSAqIChiWzFdIC0gYVsxXSkpIC8gZGlzdFNxcjtcclxuXHJcbiAgICBsZXQgcG9pbnQgPSBbLi4uYV07XHJcbiAgICBpZiAodCA+IDEpIHtcclxuICAgICAgcG9pbnQgPSBbLi4uYl07XHJcbiAgICB9IGVsc2UgaWYgKHQgPiAwKSB7XHJcbiAgICAgIHBvaW50ID0gW2FbMF0gKyB0ICogKGJbMF0gLSBhWzBdKSwgYVsxXSArIHQgKiAoYlsxXSAtIGFbMV0pXTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcG9pbnQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSBkaXN0YW5jZSBzcXVhcmVkIGZvciB0d28gMkQgcG9pbnRzLlxyXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IGEgLSAyRCBwb2ludC5cclxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBiIC0gMkQgcG9pbnQuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxyXG4gICAqL1xyXG4gIHN0YXRpYyBkaXN0YW5jZVNxdWFyZWQoYSwgYikge1xyXG4gICAgcmV0dXJuIChhWzBdIC0gYlswXSkgKiAoYVswXSAtIGJbMF0pICsgKGFbMV0gLSBiWzFdKSAqIChhWzFdIC0gYlsxXSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUcmlhbmd1bGF0ZXMgYSBzZXQgb2YgMkQgcG9pbnRzIHVzaW5nIGFuIGltcGxlbWVudGF0aW9uXHJcbiAgICogb2YgdGhlIEJvd3llci1XYXRzb24gaW5jcmVtZW50YWwgRGVsYXVuYXkgdHJpYW5ndWxhdGlvbi5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7QXJyYXkuPEFycmF5LjxudW1iZXI+Pn0gdmVydGljZXMgLSBBcnJheSBvZiAyRCBwb2ludHMuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7QXJyYXkuPEFycmF5PG51bWJlcj4+fSAtIEFycmF5IG9mIHRyaWFuZ2xlIGluZGljZXMuXHJcbiAgICovXHJcbiAgc3RhdGljIGdldERlbGF1bmF5VHJpYW5ndWxhdGlvbih2ZXJ0aWNlcykge1xyXG4gICAgaWYgKCF2ZXJ0aWNlcyB8fCB2ZXJ0aWNlcy5sZW5ndGggPCAzKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgQ2Fubm90IGdldCBkZWxhdW5heSB0cmlhbmd1bGF0aW9uIGZvciBwb2ludHMgJHt2ZXJ0aWNlc30uIElucHV0IG11c3QgY29udGFpbiBhdCBsZWFzdCB0aHJlZSBwb2ludHMuYFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBtaW5YID0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO1xyXG4gICAgbGV0IG1pblkgPSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7XHJcbiAgICBsZXQgbWF4WCA9IE51bWJlci5ORUdBVElWRV9JTkZJTklUWTtcclxuICAgIGxldCBtYXhZID0gTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZO1xyXG5cclxuICAgIHZlcnRpY2VzLmZvckVhY2godiA9PiB7XHJcbiAgICAgIG1pblggPSB2WzBdIDwgbWluWCA/IHZbMF0gOiBtaW5YO1xyXG4gICAgICBtaW5ZID0gdlsxXSA8IG1pblkgPyB2WzFdIDogbWluWTtcclxuICAgICAgbWF4WCA9IHZbMF0gPiBtYXhYID8gdlswXSA6IG1heFg7XHJcbiAgICAgIG1heFkgPSB2WzFdID4gbWF4WSA/IHZbMV0gOiBtYXhZO1xyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgZFggPSBtYXhYIC0gbWluWDtcclxuICAgIGNvbnN0IGRZID0gbWF4WSAtIG1pblk7XHJcbiAgICBjb25zdCBtaWRYID0gKG1pblggKyBtYXhYKSAvIDI7XHJcbiAgICBjb25zdCBtaWRZID0gKG1pblkgKyBtYXhZKSAvIDI7XHJcbiAgICBjb25zdCBkTWF4ID0gZFggPiBkWSA/IGRYIDogZFk7XHJcblxyXG4gICAgY29uc3Qgc3VwZXJJbmRpY2VzID0gW1xyXG4gICAgICB2ZXJ0aWNlcy5sZW5ndGgsXHJcbiAgICAgIHZlcnRpY2VzLmxlbmd0aCArIDEsXHJcbiAgICAgIHZlcnRpY2VzLmxlbmd0aCArIDIsXHJcbiAgICBdO1xyXG5cclxuICAgIGNvbnN0IHZlcnRzV2l0aFN1cGVyID0gW1xyXG4gICAgICAuLi52ZXJ0aWNlcyxcclxuICAgICAgW21pZFggLSAyMCAqIGRNYXgsIG1pZFkgLSBkTWF4XSxcclxuICAgICAgW21pZFgsIG1pZFkgKyAyMCAqIGRNYXhdLFxyXG4gICAgICBbbWlkWCArIDIwICogZE1heCwgbWlkWSAtIGRNYXhdLFxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdCBzdXBlclNvcnRlZEluZGljZXMgPSBNYXRoVXRpbHMuc29ydFBvaW50c0NDVyhcclxuICAgICAgc3VwZXJJbmRpY2VzLFxyXG4gICAgICB2ZXJ0c1dpdGhTdXBlclxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCBzdXBlclRyaWFuZ2xlID0ge1xyXG4gICAgICBpbmRpY2VzOiBzdXBlclNvcnRlZEluZGljZXMsXHJcbiAgICAgIGVkZ2VzOiBbXHJcbiAgICAgICAgW3N1cGVyU29ydGVkSW5kaWNlc1swXSwgc3VwZXJTb3J0ZWRJbmRpY2VzWzFdXSxcclxuICAgICAgICBbc3VwZXJTb3J0ZWRJbmRpY2VzWzFdLCBzdXBlclNvcnRlZEluZGljZXNbMl1dLFxyXG4gICAgICAgIFtzdXBlclNvcnRlZEluZGljZXNbMl0sIHN1cGVyU29ydGVkSW5kaWNlc1swXV0sXHJcbiAgICAgIF0sXHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IHRyaWFuZ2xlcyA9IFtzdXBlclRyaWFuZ2xlXTtcclxuXHJcbiAgICB2ZXJ0c1dpdGhTdXBlci5mb3JFYWNoKChuZXdWZXJ0LCBuZXdJbmRleCkgPT4ge1xyXG4gICAgICBjb25zdCBpbnZhbGlkVHJpYW5nbGVzID0gW107XHJcbiAgICAgIHRyaWFuZ2xlcy5mb3JFYWNoKHRyaWFuZ2xlID0+IHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBNYXRoVXRpbHMuaXNQb2ludEluQ2lyY3VtQ2lyY2xlKFxyXG4gICAgICAgICAgICB2ZXJ0c1dpdGhTdXBlclt0cmlhbmdsZS5pbmRpY2VzWzBdXSxcclxuICAgICAgICAgICAgdmVydHNXaXRoU3VwZXJbdHJpYW5nbGUuaW5kaWNlc1sxXV0sXHJcbiAgICAgICAgICAgIHZlcnRzV2l0aFN1cGVyW3RyaWFuZ2xlLmluZGljZXNbMl1dLFxyXG4gICAgICAgICAgICBuZXdWZXJ0XHJcbiAgICAgICAgICApXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBpbnZhbGlkVHJpYW5nbGVzLnB1c2godHJpYW5nbGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgICBjb25zdCBib3VuZGluZ1BvbHkgPSBbXTtcclxuICAgICAgaW52YWxpZFRyaWFuZ2xlcy5mb3JFYWNoKHRyaWFuZ2xlID0+IHtcclxuICAgICAgICB0cmlhbmdsZS5lZGdlcy5mb3JFYWNoKGVkZ2UgPT4ge1xyXG4gICAgICAgICAgbGV0IGNvdW50ID0gMDtcclxuICAgICAgICAgIGludmFsaWRUcmlhbmdsZXMuZm9yRWFjaChvdGhlclRyaWFuZ2xlID0+IHtcclxuICAgICAgICAgICAgaWYgKHRyaWFuZ2xlICE9PSBvdGhlclRyaWFuZ2xlKSB7XHJcbiAgICAgICAgICAgICAgb3RoZXJUcmlhbmdsZS5lZGdlcy5mb3JFYWNoKG90aGVyRWRnZSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgIChlZGdlWzBdID09PSBvdGhlckVkZ2VbMF0gJiYgZWRnZVsxXSA9PT0gb3RoZXJFZGdlWzFdKSB8fFxyXG4gICAgICAgICAgICAgICAgICAoZWRnZVsxXSA9PT0gb3RoZXJFZGdlWzBdICYmIGVkZ2VbMF0gPT09IG90aGVyRWRnZVsxXSlcclxuICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICBjb3VudCArPSAxO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIGlmIChjb3VudCA9PT0gMCkgYm91bmRpbmdQb2x5LnB1c2goZWRnZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgaW52YWxpZFRyaWFuZ2xlcy5mb3JFYWNoKHRyaWFuZ2xlID0+IHtcclxuICAgICAgICB0cmlhbmdsZXMuc3BsaWNlKHRyaWFuZ2xlcy5pbmRleE9mKHRyaWFuZ2xlKSwgMSk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgYm91bmRpbmdQb2x5LmZvckVhY2goZWRnZSA9PiB7XHJcbiAgICAgICAgY29uc3Qgc29ydGVkSW5kaWNlcyA9IE1hdGhVdGlscy5zb3J0UG9pbnRzQ0NXKFxyXG4gICAgICAgICAgW2VkZ2VbMF0sIGVkZ2VbMV0sIG5ld0luZGV4XSxcclxuICAgICAgICAgIHZlcnRzV2l0aFN1cGVyXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgdHJpYW5nbGVzLnB1c2goe1xyXG4gICAgICAgICAgaW5kaWNlczogc29ydGVkSW5kaWNlcyxcclxuICAgICAgICAgIGVkZ2VzOiBbXHJcbiAgICAgICAgICAgIFtzb3J0ZWRJbmRpY2VzWzBdLCBzb3J0ZWRJbmRpY2VzWzFdXSxcclxuICAgICAgICAgICAgW3NvcnRlZEluZGljZXNbMV0sIHNvcnRlZEluZGljZXNbMl1dLFxyXG4gICAgICAgICAgICBbc29ydGVkSW5kaWNlc1syXSwgc29ydGVkSW5kaWNlc1swXV0sXHJcbiAgICAgICAgICBdLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IHRyaWFuZ2xlc1RvUmVtb3ZlID0gW107XHJcbiAgICB0cmlhbmdsZXMuZm9yRWFjaCh0cmlhbmdsZSA9PiB7XHJcbiAgICAgIHRyaWFuZ2xlLmluZGljZXMuZm9yRWFjaChpbmRleCA9PiB7XHJcbiAgICAgICAgaWYgKHN1cGVySW5kaWNlcy5pbmNsdWRlcyhpbmRleCkpIHtcclxuICAgICAgICAgIHRyaWFuZ2xlc1RvUmVtb3ZlLnB1c2godHJpYW5nbGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0cmlhbmdsZXNUb1JlbW92ZS5mb3JFYWNoKHRyaWFuZ2xlID0+IHtcclxuICAgICAgY29uc3QgaW5kZXggPSB0cmlhbmdsZXMuaW5kZXhPZih0cmlhbmdsZSk7XHJcbiAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcclxuICAgICAgICB0cmlhbmdsZXMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIHRyaWFuZ2xlcy5tYXAodHJpYW5nbGUgPT4gdHJpYW5nbGUuaW5kaWNlcyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEZXRlcm1pbmVzIGlmIGEgZ2l2ZW4gMkQgcG9pbnQgaXMgd2l0aGluIHRoZSBjaWNydW1jaXJjbGVcclxuICAgKiBkZWZpbmVkIGJ5IHRocmVlIDJEIHBvaW50cy4gVGhlIHRyaWFuZ2xlIHBvaW50cyBtdXN0IGJlIGluXHJcbiAgICogY291bnRlci1jbG9ja3dpc2Ugb3JkZXIgYSAtPiBiIC0+IGMuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBhIC0gRmlyc3QgdHJpYW5nbGUgcG9pbnQuXHJcbiAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gYiAtIFNlY29uZCB0cmlhbmdsZSBwb2ludC5cclxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBjIC0gVGhpcmQgdHJpYW5nbGUgcG9pbnQuXHJcbiAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gcCAtIDJEIHBvaW50LlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAgICovXHJcbiAgc3RhdGljIGlzUG9pbnRJbkNpcmN1bUNpcmNsZShhLCBiLCBjLCBwKSB7XHJcbiAgICBjb25zdCBheCA9IGFbMF0gLSBwWzBdO1xyXG4gICAgY29uc3QgYXkgPSBhWzFdIC0gcFsxXTtcclxuICAgIGNvbnN0IGJ4ID0gYlswXSAtIHBbMF07XHJcbiAgICBjb25zdCBieSA9IGJbMV0gLSBwWzFdO1xyXG4gICAgY29uc3QgY3ggPSBjWzBdIC0gcFswXTtcclxuICAgIGNvbnN0IGN5ID0gY1sxXSAtIHBbMV07XHJcblxyXG4gICAgcmV0dXJuIChcclxuICAgICAgKGF4ICogYXggKyBheSAqIGF5KSAqIChieCAqIGN5IC0gY3ggKiBieSkgLVxyXG4gICAgICAgIChieCAqIGJ4ICsgYnkgKiBieSkgKiAoYXggKiBjeSAtIGN4ICogYXkpICtcclxuICAgICAgICAoY3ggKiBjeCArIGN5ICogY3kpICogKGF4ICogYnkgLSBieCAqIGF5KSA+XHJcbiAgICAgIDBcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEZXRlcm1pbmVzIGlmIGEgZ2l2ZW4gMkQgcG9pbnQgaXMgd2l0aGluIGEgZ2l2ZW4gdHJpYW5nbGUuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBhIC0gRmlyc3QgdHJpYW5nbGUgcG9pbnQuXHJcbiAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gYiAtIFNlY29uZCB0cmlhbmdsZSBwb2ludC5cclxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBjIC0gVGhpcmQgdHJpYW5nbGUgcG9pbnQuXHJcbiAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gcCAtIDJEIHBvaW50LlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAgICovXHJcbiAgc3RhdGljIGlzUG9pbnRJblRyaWFuZ2xlKGEsIGIsIGMsIHApIHtcclxuICAgIGNvbnN0IGRlbm9tID0gKGJbMV0gLSBjWzFdKSAqIChhWzBdIC0gY1swXSkgKyAoY1swXSAtIGJbMF0pICogKGFbMV0gLSBjWzFdKTtcclxuICAgIGNvbnN0IGFWYWwgPVxyXG4gICAgICAoKGJbMV0gLSBjWzFdKSAqIChwWzBdIC0gY1swXSkgKyAoY1swXSAtIGJbMF0pICogKHBbMV0gLSBjWzFdKSkgLyBkZW5vbTtcclxuICAgIGNvbnN0IGJWYWwgPVxyXG4gICAgICAoKGNbMV0gLSBhWzFdKSAqIChwWzBdIC0gY1swXSkgKyAoYVswXSAtIGNbMF0pICogKHBbMV0gLSBjWzFdKSkgLyBkZW5vbTtcclxuICAgIGNvbnN0IGNWYWwgPSAxIC0gYVZhbCAtIGJWYWw7XHJcblxyXG4gICAgcmV0dXJuIChcclxuICAgICAgYVZhbCA+PSAwICYmIGFWYWwgPD0gMSAmJiBiVmFsID49IDAgJiYgYlZhbCA8PSAxICYmIGNWYWwgPj0gMCAmJiBjVmFsIDw9IDFcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSBzb3J0ZWQgaW5kaWNlcyBvZiBhIGdpdmVuIHNldCBvZiAyRCBwb2ludHMgaW5cclxuICAgKiBjb3VudGVyLWNsb2Nrd2lzZSBvcmRlci5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IGluZGljZXMgLSBMaXN0IG9mIGluZGljZXMuXHJcbiAgICogQHBhcmFtIHtBcnJheS48QXJyYXkuPG51bWJlcj4+fSB2ZXJ0aWNlcyAtIExpc3Qgb2YgMkQgcG9pbnRzLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0FycmF5LjxBcnJheS48bnVtYmVyPj59IC0gTGlzdCBvZiBzb3J0ZWQgaW5kaWNlcy5cclxuICAgKi9cclxuICBzdGF0aWMgc29ydFBvaW50c0NDVyhpbmRpY2VzLCB2ZXJ0aWNlcykge1xyXG4gICAgY29uc3QgY2VudHJvaWQgPSBbMCwgMF07XHJcbiAgICBpbmRpY2VzLmZvckVhY2goaW5kZXggPT4ge1xyXG4gICAgICBjZW50cm9pZFswXSArPSB2ZXJ0aWNlc1tpbmRleF1bMF07XHJcbiAgICAgIGNlbnRyb2lkWzFdICs9IHZlcnRpY2VzW2luZGV4XVsxXTtcclxuICAgIH0pO1xyXG4gICAgY2VudHJvaWRbMF0gLz0gaW5kaWNlcy5sZW5ndGg7XHJcbiAgICBjZW50cm9pZFsxXSAvPSBpbmRpY2VzLmxlbmd0aDtcclxuXHJcbiAgICBpbmRpY2VzLnNvcnQoKGEsIGIpID0+IHtcclxuICAgICAgY29uc3QgYlZhbCA9IE1hdGguYXRhbjIoXHJcbiAgICAgICAgdmVydGljZXNbYl1bMV0gLSBjZW50cm9pZFsxXSxcclxuICAgICAgICB2ZXJ0aWNlc1tiXVswXSAtIGNlbnRyb2lkWzBdXHJcbiAgICAgICk7XHJcbiAgICAgIGNvbnN0IGFWYWwgPSBNYXRoLmF0YW4yKFxyXG4gICAgICAgIHZlcnRpY2VzW2FdWzFdIC0gY2VudHJvaWRbMV0sXHJcbiAgICAgICAgdmVydGljZXNbYV1bMF0gLSBjZW50cm9pZFswXVxyXG4gICAgICApO1xyXG5cclxuICAgICAgcmV0dXJuIGFWYWwgLSBiVmFsO1xyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIGluZGljZXM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDYWNsdWF0ZXMgdGhlIGFyZWEgb2YgYSB0cmlhbmdsZVxyXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IGEgLSBGaXJzdCB0cmlhbmdsZSBwb2ludC5cclxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBiIC0gU2Vjb25kIHRyaWFuZ2xlIHBvaW50LlxyXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IGMgLSBUaGlyZCB0cmlhbmdsZSBwb2ludC5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XHJcbiAgICovXHJcbiAgc3RhdGljIHRyaWFuZ2xlQXJlYShhLCBiLCBjKSB7XHJcbiAgICByZXR1cm4gTWF0aC5hYnMoXHJcbiAgICAgIChhWzBdICogKGJbMV0gLSBjWzFdKSArIGJbMF0gKiAoY1sxXSAtIGFbMV0pICsgY1swXSAqIChhWzFdIC0gYlsxXSkpICogMC41XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIHRoZSBtYWduaXR1ZGUgb2YgYSBnaXZlbiB2ZWN0b3IgYXJyYXkuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSB2ZWN0b3IgLSBBcnJheSBjb25zaXN0aW5nIG9mIG51bWJlcnMuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxyXG4gICAqL1xyXG4gIHN0YXRpYyBnZXRWZWN0b3JNYWduaXR1ZGUodmVjdG9yKSB7XHJcbiAgICBpZiAoISh2ZWN0b3IgaW5zdGFuY2VvZiBBcnJheSkpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgIGBDYW5ub3QgZ2V0IG1hZ25pdHVkZSBmb3IgdmVjdG9yICR7dmVjdG9yfS4gSW5wdXQgbXVzdCBiZSBhbiBBcnJheSBudW1iZXJzLmBcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCByZWR1Y2VyID0gKGFjY3VtdWxhdG9yLCBjdXJyZW50VmFsdWUpID0+IHtcclxuICAgICAgaWYgKHR5cGVvZiBjdXJyZW50VmFsdWUgIT09ICdudW1iZXInKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgICAgYENhbm5vdCBnZXQgbWFnbml0dWRlIGZvciB2ZWN0b3IgJHt2ZWN0b3J9LiBBbGwgaXRlbXMgaW4gdGhlIGlucHV0IEFycmF5IG11c3QgYmUgbnVtYmVycy5gXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIGFjY3VtdWxhdG9yICsgKGN1cnJlbnRWYWx1ZSAqKiAyKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gTWF0aC5zcXJ0KHZlY3Rvci5yZWR1Y2UocmVkdWNlciwgMCkpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIHRoZSBkb3QgcHJvZHVjdCBiZXR3ZWVuIHR3byB2ZWN0b3JzLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gdmVjdG9yQSAtIEFycmF5IGNvbnNpc3Rpbmcgb2YgbnVtYmVycy5cclxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSB2ZWN0b3JCIC0gQXJyYXkgY29uc2lzdGluZyBvZiBudW1iZXJzLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge251bWJlcn1cclxuICAgKi9cclxuICBzdGF0aWMgZ2V0RG90UHJvZHVjdCh2ZWN0b3JBLCB2ZWN0b3JCKSB7XHJcbiAgICBpZiAoISh2ZWN0b3JBIGluc3RhbmNlb2YgQXJyYXkpIHx8ICEodmVjdG9yQiBpbnN0YW5jZW9mIEFycmF5KSB8fCB2ZWN0b3JBLmxlbmd0aCAhPT0gdmVjdG9yQi5sZW5ndGgpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZ2V0IGRvdCBwcm9kdWN0IGJldHdlZW4gJHt2ZWN0b3JBfSBhbmQgJHt2ZWN0b3JCfS4gSW5wdXRzIG11c3QgYmUgdmVjdG9ycyBvZiB0aGUgc2FtZSBsZW5ndGguYCk7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHJlc3VsdCA9IDA7XHJcbiAgICB2ZWN0b3JBLmZvckVhY2goKHZhbHVlQSwgaW5kZXgpID0+IHtcclxuICAgICAgY29uc3QgdmFsdWVCID0gdmVjdG9yQltpbmRleF07XHJcblxyXG4gICAgICBpZiAodHlwZW9mIHZhbHVlQSAhPT0gJ251bWJlcicgfHwgdHlwZW9mIHZhbHVlQiAhPT0gJ251bWJlcicpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBnZXQgZG90IHByb2R1Y3QgYmV0d2VlbiAke3ZlY3RvckF9IGFuZCAke3ZlY3RvckJ9LiBWZWN0b3JzIG11c3Qgb25seSBjb25zaXN0IG9mIG51bWVyaWMgdmFsdWVzLmApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXN1bHQgKz0gdmFsdWVBICogdmFsdWVCO1xyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiB0aGUgYW5nbGUgaW4gcmFkaWFucyBiZXR3ZWVuIHZlY3RvckEgYW5kIHZlY3RvckIuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSB2ZWN0b3JBIC0gQXJyYXkgY29uc2lzdGluZyBvZiBudW1iZXJzLlxyXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IHZlY3RvckIgLSBBcnJheSBjb25zaXN0aW5nIG9mIG51bWJlcnMuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxyXG4gICAqL1xyXG4gIHN0YXRpYyBnZXRBbmdsZUJldHdlZW4odmVjdG9yQSwgdmVjdG9yQikge1xyXG4gICAgY29uc3Qgbm9ybWFsQSA9IHRoaXMubm9ybWFsaXplVmVjdG9yKFsuLi52ZWN0b3JBXSk7XHJcbiAgICBjb25zdCBub3JtYWxCID0gdGhpcy5ub3JtYWxpemVWZWN0b3IoWy4uLnZlY3RvckJdKTtcclxuICAgIGNvbnN0IGRvdCA9IHRoaXMuZ2V0RG90UHJvZHVjdChub3JtYWxBLCBub3JtYWxCKTtcclxuXHJcbiAgICByZXR1cm4gTWF0aC5hY29zKHRoaXMuY2xhbXAoZG90LCAtMSwgMSkpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTXVsdGlwbHkgYSAzeDMgcm90YXRpb24gbWF0cml4IHdpdGggYSB2ZWN0b3IzLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gdmVjdG9yMyAtIEFycmF5IGNvbnNpc3Rpbmcgb2YgMyBudW1iZXJzIHJlcHJlc2VudGluZ1xyXG4gICAqIGEgZGlyZWN0aW9uIHZlY3Rvci5cclxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBtYXRyaXgzIC0gQW4gYXJyYXkgb2YgOSBudW1iZXJzIHJlcHJlc2VudGluZyBhIHJvd1xyXG4gICAqIG1ham9yIHJvdGF0aW9uIG1hdHJpeC5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtBcnJheS48bnVtYmVyPn0gLSBBbiBhcnJheSBvZiAzIG51bWJlcnMgcmVwcmVzZW50aW5nIHRoZSBuZXcgZGlyZWN0aW9uXHJcbiAgICogb2YgdGhlIHZlY3Rvci5cclxuICAgKi9cclxuICBzdGF0aWMgcm90YXRlVmVjdG9yKHZlY3RvcjMsIG1hdHJpeDMpIHtcclxuICAgIGlmICghKHZlY3RvcjMgaW5zdGFuY2VvZiBBcnJheSlcclxuICAgICAgfHwgdmVjdG9yMy5sZW5ndGggIT09IDNcclxuICAgICAgfHwgIXZlY3RvcjMuZXZlcnkodiA9PiB0eXBlb2YgdiA9PT0gJ251bWJlcicpKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgQ2Fubm90IHJvdGF0ZSB2ZWN0b3IgJHt2ZWN0b3IzfSBieSByb3RhdGlvbiBtYXRyaXggJHttYXRyaXgzfS4gSW5wdXQgdmVjdG9yIG11c3QgYmUgYW4gYXJyYXkgb2YgMyBudW1iZXJzLmBcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIShtYXRyaXgzIGluc3RhbmNlb2YgQXJyYXkpXHJcbiAgICAgIHx8IG1hdHJpeDMubGVuZ3RoICE9PSA5XHJcbiAgICAgIHx8ICFtYXRyaXgzLmV2ZXJ5KHYgPT4gdHlwZW9mIHYgPT09ICdudW1iZXInKSkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgYENhbm5vdCByb3RhdGUgdmVjdG9yICR7dmVjdG9yM30gYnkgcm90YXRpb24gbWF0cml4ICR7bWF0cml4M30uIElucHV0IG1hdHJpeDMgbXVzdCBiZSBhbiBhcnJheSBvZiA5IG51bWJlcnMuYFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHggPSBtYXRyaXgzWzBdICogdmVjdG9yM1swXVxyXG4gICAgICArIG1hdHJpeDNbM10gKiB2ZWN0b3IzWzFdXHJcbiAgICAgICsgbWF0cml4M1s2XSAqIHZlY3RvcjNbMl07XHJcbiAgICBjb25zdCB5ID0gbWF0cml4M1sxXSAqIHZlY3RvcjNbMF1cclxuICAgICAgKyBtYXRyaXgzWzRdICogdmVjdG9yM1sxXVxyXG4gICAgICArIG1hdHJpeDNbN10gKiB2ZWN0b3IzWzJdO1xyXG4gICAgY29uc3QgeiA9IG1hdHJpeDNbMl0gKiB2ZWN0b3IzWzBdXHJcbiAgICAgICsgbWF0cml4M1s1XSAqIHZlY3RvcjNbMV1cclxuICAgICAgKyBtYXRyaXgzWzhdICogdmVjdG9yM1syXTtcclxuXHJcbiAgICByZXR1cm4gW3gsIHksIHpdO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTm9ybWFsaXplIGEgZ2l2ZW4gdmVjdG9yIGFycmF5LlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gdmVjdG9yIC0gQXJyYXkgY29uc2lzdGluZyBvZiBudW1iZXJzLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0FycmF5LjxudW1iZXI+fSBUaGUgb3JpZ2luYWwgdmVjdG9yIHdpdGggbm9ybWFsaXplZCB2YWx1ZXMsIGZvciBjaGFpbmluZy5cclxuICAgKi9cclxuICBzdGF0aWMgbm9ybWFsaXplVmVjdG9yKHZlY3Rvcikge1xyXG4gICAgY29uc3QgbWFnbml0dWRlID0gdGhpcy5nZXRWZWN0b3JNYWduaXR1ZGUodmVjdG9yKTtcclxuXHJcbiAgICBpZiAobWFnbml0dWRlID09PSAwKSB7XHJcbiAgICAgIHZlY3Rvci5maWxsKDApXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB2ZWN0b3IuZm9yRWFjaCgodmFsdWUsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgdmVjdG9yW2luZGV4XSA9IHZhbHVlIC8gbWFnbml0dWRlO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdmVjdG9yO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRXh0cmFjdCB0aGUgM3gzIHJvdGF0aW9uIG1hdHJpeCBmcm9tIGEgZ2l2ZW4gNHg0IHRyYW5zZm9ybWF0aW9uIG1hdHJpeC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IG1hdHJpeDQgLSBBbiBhcnJheSBvZiAxNiBudW1iZXJzIHJlcHJlc2VudGluZyBhIHJvd1xyXG4gICAqIG1ham9yIHRyYW5zZm9ybWF0aW9uIG1hdHJpeC5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtBcnJheS48bnVtYmVyPn0gLSBBbiBhcnJheSBvZiA5IG51bWJlcnMgcmVwcmVzZW50aW5nIGEgcm93IG1ham9yXHJcbiAgICogcm90YXRpb24gbWF0cml4LlxyXG4gICAqL1xyXG4gIHN0YXRpYyBnZXRSb3RhdGlvbk1hdHJpeChtYXRyaXg0KSB7XHJcbiAgICBpZiAoIShtYXRyaXg0IGluc3RhbmNlb2YgQXJyYXkpXHJcbiAgICAgIHx8IG1hdHJpeDQubGVuZ3RoICE9PSAxNlxyXG4gICAgICB8fCAhbWF0cml4NC5ldmVyeSh2ID0+IHR5cGVvZiB2ID09PSAnbnVtYmVyJykpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgIGBDYW5ub3QgY29udmVydCBtYXRyaXggJHttYXRyaXg0fSB0byBhIHJvdGF0aW9uIG1hdHJpeC4gSW5wdXQgbWF0cml4IG11c3QgYmUgYW4gYXJyYXkgb2YgMTYgbnVtYmVycy5gXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gRXh0cmFjdCBzY2FsZVxyXG4gICAgY29uc3Qgc2NhbGVYID0gMSAvICh0aGlzLmdldFZlY3Rvck1hZ25pdHVkZShtYXRyaXg0LnNsaWNlKDAsIDQpKSB8fCAxKTtcclxuICAgIGNvbnN0IHNjYWxlWSA9IDEgLyAodGhpcy5nZXRWZWN0b3JNYWduaXR1ZGUobWF0cml4NC5zbGljZSg0LCA4KSkgfHwgMSk7XHJcbiAgICBjb25zdCBzY2FsZVogPSAxIC8gKHRoaXMuZ2V0VmVjdG9yTWFnbml0dWRlKG1hdHJpeDQuc2xpY2UoOCwgMTIpKSB8fCAxKTtcclxuXHJcbiAgICByZXR1cm4gW1xyXG4gICAgICBtYXRyaXg0WzBdICogc2NhbGVYLCBtYXRyaXg0WzFdICogc2NhbGVYLCBtYXRyaXg0WzJdICogc2NhbGVYLFxyXG4gICAgICBtYXRyaXg0WzRdICogc2NhbGVZLCBtYXRyaXg0WzVdICogc2NhbGVZLCBtYXRyaXg0WzZdICogc2NhbGVZLFxyXG4gICAgICBtYXRyaXg0WzhdICogc2NhbGVaLCBtYXRyaXg0WzldICogc2NhbGVaLCBtYXRyaXg0WzEwXSAqIHNjYWxlWlxyXG4gICAgXTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiBhbiBhcnJheSBjb250YWluaW5nIHRoZSBzcGhlcmljYWwgY29vcmRpbmF0ZXMgb2YgdGhlIGdpdmVuIGNhcnRlc2lhblxyXG4gICAqIHh5eiBjb29yZGluYXRlcy5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge251bWJlcn0geCAtIFBvc2l0aW9uIGFsb25nIHRoZSB4IGF4aXMuXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IHkgLSBQb3NpdGlvbiBhbG9uZyB0aGUgeSBheGlzLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB6IC0gUG9zaXRpb24gYWxvbmcgdGhlIHogYXhpcy5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtBcnJheS48bnVtYmVyPn0gLSBBbiBhcnJheSBjb25zaXN0aW5nIG9mIHRocmVlIG51bWJlcmVzIHdoZXJlIGluZGV4XHJcbiAgICogMCByZXByZXNlbnRzIHRoZSByYWRpdXMsIGluZGV4IDEgcmVwcmVzZW50cyB0aGUgdmVydGljYWwvcG9sYXIgYW5nbGUgaW4gcmFkaWFuc1xyXG4gICAqIGFuZCBpbmRleCAyIHJlcHJlc2VudHMgdGhlIGhvcml6b250YWwvYXppbXV0aGFsIGFuZ2xlIGluIHJhZGlhbnMuXHJcbiAgICovXHJcbiAgc3RhdGljIGNhcnRlc2lhblRvU3BoZXJpY2FsKHgsIHksIHopIHtcclxuICAgIGNvbnN0IHIgPSB0aGlzLmdldFZlY3Rvck1hZ25pdHVkZShbeCwgeSwgel0pO1xyXG5cclxuICAgIC8vIFJldHVybiBpZGVudGl0eSBpZiB0aGUgdmVjdG9yIGhhcyBubyBsZW5ndGhcclxuICAgIGlmIChyID09PSAwKSB7XHJcbiAgICAgIHJldHVybiBbMCwgMCwgMF07XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIFtcclxuICAgICAgcixcclxuICAgICAgTWF0aC5hY29zKHRoaXMuY2xhbXAoeSAvIHIsIC0gMSwgMSkpLFxyXG4gICAgICBNYXRoLmF0YW4yKHgsIHopLFxyXG4gICAgXTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdyYWR1YWxseSBjaGFuZ2UgYSB2YWx1ZSBvZiBhIG51bWVyaWMgcHJvcGVydHkgdG93YXJkcyBhIGdvYWwgb3ZlciB0aW1lIHVzaW5nXHJcbiAgICogYSBjcml0aWNhbGx5IGRhbXBlZCBzcHJpbmcgZnVuY3Rpb24uXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge251bWJlcn0gY3VycmVudFZhbHVlIC0gVGhlIHN0YXJ0aW5nIHZhbHVlLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB0YXJnZXRWYWx1ZS0gVGhlIGdvYWwgdmFsdWUuXHJcbiAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gW3ZhbHVlU3RvcmUgPSBbMCwgMF1dIC0gQW4gQXJyYXkgY29uc2lzdGluZyBvZiB0d29cclxuICAgKiBudW1iZXJzIHdoZXJlIHRoZSBmaXJzdCBudW1iZXIgaG9sZHMgdGhlIHJlc3VsdCB2YWx1ZSBhbmQgdGhlIHNlY29uZCBob2xkc1xyXG4gICAqIHRoZSB2ZWxvY2l0eSB0aGF0IHJlc3VsdGVkIGluIHRoYXQgdmFsdWUuIFRoZSBzYW1lIGFycmF5IHNob3VsZCBiZSBwcm92aWRlZFxyXG4gICAqIHdpdGggZWFjaCBjYWxsIHRvIHRoaXMgZnVuY3Rpb24uXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtkZWx0YVRpbWUgPSAxZS03XSAtIFRoZSB0aW1lIHNpbmNlIHRoZSBsYXN0IGNhbGwgdG8gdGhpcyBmdW5jdGlvblxyXG4gICAqIGluIHNlY29uZHMuXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtzbW9vdGhUaW1lID0gMC4zXSAtIFRoZSBhcHByb3hpbWF0ZSBhbW91bnQgb2YgdGltZSBpbiBzZWNvbmRzXHJcbiAgICogaXQgc2hvdWxkIHRha2UgdG8gcmVhY2ggdGhlIHRhcmdldCB2YWx1ZS5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gW21heFNwZWVkID0gMWU3XSAtIEEgY2xhbXBpbmcgdmFsdWUgZm9yIHRoZSBtYXhpbXVtIHNwZWVkIHRoZVxyXG4gICAqIHZhbHVlIGNhbiBjaGFuZ2UuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7QXJyYXkuPG51bWJlcj59IC0gVGhlIHZhbHVlU3RvcmUgYXJyYXkuXHJcbiAgICovXHJcbiAgc3RhdGljIGRhbXBWYWx1ZShcclxuICAgIGN1cnJlbnRWYWx1ZSxcclxuICAgIHRhcmdldFZhbHVlLFxyXG4gICAgdmFsdWVTdG9yZSA9IFswLCAwXSxcclxuICAgIGRlbHRhVGltZSA9IDFlLTcsXHJcbiAgICBzbW9vdGhUaW1lID0gMC4zLFxyXG4gICAgbWF4U3BlZWQgPSAxZTdcclxuICApIHtcclxuICAgIHNtb290aFRpbWUgPSBNYXRoLm1heCgwLjAwMDEsIHNtb290aFRpbWUpO1xyXG4gICAgZGVsdGFUaW1lID0gTWF0aC5tYXgoMWUtNywgZGVsdGFUaW1lKTtcclxuXHJcbiAgICAvLyBGaW5kIHRoZSBkZWx0YSBiZXR3ZWVuIHZhbHVlcyBhbmQgdXNlIGl0IHRvIGVzdGltYXRlIHRoZSBwcmV2aW91cyB2YWx1ZVxyXG4gICAgY29uc3QgY2xhbXBUaW1lID0gbWF4U3BlZWQgKiBzbW9vdGhUaW1lO1xyXG4gICAgY29uc3QgZGVsdGFWYWx1ZSA9IGN1cnJlbnRWYWx1ZSAtIHRhcmdldFZhbHVlO1xyXG4gICAgY29uc3QgY2xhbXBEZWx0YVZhbHVlID0gdGhpcy5jbGFtcChkZWx0YVZhbHVlLCAtY2xhbXBUaW1lLCBjbGFtcFRpbWUpO1xyXG4gICAgY29uc3QgbGFzdFZhbHVlID0gY3VycmVudFZhbHVlIC0gY2xhbXBEZWx0YVZhbHVlO1xyXG5cclxuICAgIC8vIENhbGN1bGF0ZSBkYW1waW5nIGZhY3RvcnNcclxuICAgIGNvbnN0IGQxID0gMiAvIHNtb290aFRpbWU7XHJcbiAgICBjb25zdCBkMiA9IGQxICogZGVsdGFUaW1lO1xyXG4gICAgY29uc3QgZDMgPSAxIC8gKDEgKyBkMiArIDAuNSAqIGQyICoqIDIgKyAwLjI1ICogZDIgKiogMyk7XHJcbiAgICBjb25zdCBkNCA9ICh2YWx1ZVN0b3JlWzFdICsgZDEgKiBjbGFtcERlbHRhVmFsdWUpICogZGVsdGFUaW1lO1xyXG5cclxuICAgIC8vIERhbXAgdGhlIHRhcmdldCB2YWx1ZSBhbmQgdXBkYXRlIHRoZSB2ZWxvY2l0eVxyXG4gICAgdmFsdWVTdG9yZVswXSA9IGxhc3RWYWx1ZSArIChjbGFtcERlbHRhVmFsdWUgKyBkNCkgKiBkMztcclxuICAgIHZhbHVlU3RvcmVbMV0gPSAodmFsdWVTdG9yZVsxXSAtIGQxICogZDQpICogZDM7XHJcblxyXG4gICAgLy8gUHJldmVudCBvdmVyc2hvb3RpbmdcclxuICAgIGlmICh0YXJnZXRWYWx1ZSAtIGN1cnJlbnRWYWx1ZSA+IDAgPT09IHZhbHVlU3RvcmVbMF0gPiB0YXJnZXRWYWx1ZSkge1xyXG4gICAgICB2YWx1ZVN0b3JlWzBdID0gdGFyZ2V0VmFsdWU7XHJcbiAgICAgIHZhbHVlU3RvcmVbMV0gPSAodmFsdWVTdG9yZVswXSAtIHRhcmdldFZhbHVlKSAvIGRlbHRhVGltZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdmFsdWVTdG9yZTtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IE1hdGhVdGlscztcclxuIiwiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXHJcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxyXG4vKipcclxuICogQHR5cGVkZWYge09iamVjdH0gRWFzaW5nT2JqZWN0IE9iamVjdCBjb250YWluaW5nIGVhc2luZyBmdW5jdGlvbnNcclxuICogQHByb3BlcnR5IHtGdW5jdGlvbn0gSW4gLSBFYXNpbmcgJ0luJyBmdW5jdGlvbi4gU2hvdWxkIHVzZSB0aGUgc2lnbmF0dXJlIChrOm51bWJlcik6bnVtYmVyLlxyXG4gKiBAcHJvcGVydHkge0Z1bmN0aW9ufSBPdXQgLSBFYXNpbmcgJ091dCcgZnVuY3Rpb24uIFNob3VsZCB1c2UgdGhlIHNpZ25hdHVyZSAoazpudW1iZXIpOm51bWJlci5cclxuICogQHByb3BlcnR5IHtGdW5jdGlvbn0gSW5PdXQgLSBFYXNpbmcgJ0luT3V0JyBmdW5jdGlvbi4gU2hvdWxkIHVzZSB0aGUgc2lnbmF0dXJlIChrOm51bWJlcik6bnVtYmVyLlxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBMaW5lYXIgRWFzaW5nXHJcbiAqIEB0eXBlIHtFYXNpbmdPYmplY3R9XHJcbiAqL1xyXG5leHBvcnQgY29uc3QgTGluZWFyID0ge1xyXG4gIE5vbmUoaykge1xyXG4gICAgcmV0dXJuIGs7XHJcbiAgfSxcclxuICBJbihrKSB7XHJcbiAgICByZXR1cm4gaztcclxuICB9LFxyXG4gIE91dChrKSB7XHJcbiAgICByZXR1cm4gaztcclxuICB9LFxyXG4gIEluT3V0KGspIHtcclxuICAgIHJldHVybiBrO1xyXG4gIH0sXHJcbn07XHJcblxyXG4vKipcclxuICogUXVhZHJhdGljIEVhc2luZ1xyXG4gKiBAdHlwZSB7RWFzaW5nT2JqZWN0fVxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IFF1YWRyYXRpYyA9IHtcclxuICBJbihrKSB7XHJcbiAgICByZXR1cm4gayAqIGs7XHJcbiAgfSxcclxuICBPdXQoaykge1xyXG4gICAgcmV0dXJuIGsgKiAoMiAtIGspO1xyXG4gIH0sXHJcbiAgSW5PdXQoaykge1xyXG4gICAgayAqPSAyO1xyXG4gICAgaWYgKGsgPCAxKSB7XHJcbiAgICAgIHJldHVybiAwLjUgKiBrICogaztcclxuICAgIH1cclxuICAgIHJldHVybiAtMC41ICogKC0tayAqIChrIC0gMikgLSAxKTtcclxuICB9LFxyXG59O1xyXG5cclxuLyoqXHJcbiAqIEN1YmljIEVhc2luZ1xyXG4gKiBAdHlwZSB7RWFzaW5nT2JqZWN0fVxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IEN1YmljID0ge1xyXG4gIEluKGspIHtcclxuICAgIHJldHVybiBrICogayAqIGs7XHJcbiAgfSxcclxuICBPdXQoaykge1xyXG4gICAgcmV0dXJuIC0tayAqIGsgKiBrICsgMTtcclxuICB9LFxyXG4gIEluT3V0KGspIHtcclxuICAgIGsgKj0gMjtcclxuICAgIGlmIChrIDwgMSkge1xyXG4gICAgICByZXR1cm4gMC41ICogayAqIGsgKiBrO1xyXG4gICAgfVxyXG5cclxuICAgIGsgLT0gMjtcclxuICAgIHJldHVybiAwLjUgKiAoayAqIGsgKiBrICsgMik7XHJcbiAgfSxcclxufTtcclxuXHJcbi8qKlxyXG4gKiBRdWFydGljIEVhc2luZ1xyXG4gKiBAdHlwZSB7RWFzaW5nT2JqZWN0fVxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IFF1YXJ0aWMgPSB7XHJcbiAgSW4oaykge1xyXG4gICAgcmV0dXJuIGsgKiBrICogayAqIGs7XHJcbiAgfSxcclxuICBPdXQoaykge1xyXG4gICAgcmV0dXJuIDEgLSAtLWsgKiBrICogayAqIGs7XHJcbiAgfSxcclxuICBJbk91dChrKSB7XHJcbiAgICBrICo9IDI7XHJcbiAgICBpZiAoayA8IDEpIHtcclxuICAgICAgcmV0dXJuIDAuNSAqIGsgKiBrICogayAqIGs7XHJcbiAgICB9XHJcblxyXG4gICAgayAtPSAyO1xyXG4gICAgcmV0dXJuIC0wLjUgKiAoayAqIGsgKiBrICogayAtIDIpO1xyXG4gIH0sXHJcbn07XHJcblxyXG4vKipcclxuICogUXVpbnRpYyBFYXNpbmdcclxuICogQHR5cGUge0Vhc2luZ09iamVjdH1cclxuICovXHJcbmV4cG9ydCBjb25zdCBRdWludGljID0ge1xyXG4gIEluKGspIHtcclxuICAgIHJldHVybiBrICogayAqIGsgKiBrICogaztcclxuICB9LFxyXG4gIE91dChrKSB7XHJcbiAgICByZXR1cm4gLS1rICogayAqIGsgKiBrICogayArIDE7XHJcbiAgfSxcclxuICBJbk91dChrKSB7XHJcbiAgICBrICo9IDI7XHJcbiAgICBpZiAoayA8IDEpIHtcclxuICAgICAgcmV0dXJuIDAuNSAqIGsgKiBrICogayAqIGsgKiBrO1xyXG4gICAgfVxyXG5cclxuICAgIGsgLT0gMjtcclxuICAgIHJldHVybiAwLjUgKiAoayAqIGsgKiBrICogayAqIGsgKyAyKTtcclxuICB9LFxyXG59O1xyXG5cclxuLyoqXHJcbiAqIFNpbnVzb2lkYWwgRWFzaW5nXHJcbiAqIEB0eXBlIHtFYXNpbmdPYmplY3R9XHJcbiAqL1xyXG5leHBvcnQgY29uc3QgU2ludXNvaWRhbCA9IHtcclxuICBJbihrKSB7XHJcbiAgICByZXR1cm4gMSAtIE1hdGguY29zKChrICogTWF0aC5QSSkgLyAyKTtcclxuICB9LFxyXG4gIE91dChrKSB7XHJcbiAgICByZXR1cm4gTWF0aC5zaW4oKGsgKiBNYXRoLlBJKSAvIDIpO1xyXG4gIH0sXHJcbiAgSW5PdXQoaykge1xyXG4gICAgcmV0dXJuIDAuNSAqICgxIC0gTWF0aC5jb3MoTWF0aC5QSSAqIGspKTtcclxuICB9LFxyXG59O1xyXG5cclxuLyoqXHJcbiAqIEV4cG9uZW50aWFsIEVhc2luZ1xyXG4gKiBAdHlwZSB7RWFzaW5nT2JqZWN0fVxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IEV4cG9uZW50aWFsID0ge1xyXG4gIEluKGspIHtcclxuICAgIHJldHVybiBrID09PSAwID8gMCA6IDEwMjQgKiogKGsgLSAxKTtcclxuICB9LFxyXG4gIE91dChrKSB7XHJcbiAgICByZXR1cm4gayA9PT0gMSA/IDEgOiAxIC0gMiAqKiAoLTEwICogayk7XHJcbiAgfSxcclxuICBJbk91dChrKSB7XHJcbiAgICBpZiAoayA9PT0gMCkge1xyXG4gICAgICByZXR1cm4gMDtcclxuICAgIH1cclxuICAgIGlmIChrID09PSAxKSB7XHJcbiAgICAgIHJldHVybiAxO1xyXG4gICAgfVxyXG5cclxuICAgIGsgKj0gMjtcclxuICAgIGlmIChrIDwgMSkge1xyXG4gICAgICByZXR1cm4gMC41ICogMTAyNCAqKiAoayAtIDEpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIDAuNSAqICgtKDIgKiogKC0xMCAqIChrIC0gMSkpKSArIDIpO1xyXG4gIH0sXHJcbn07XHJcblxyXG4vKipcclxuICogQ2lyY3VsYXIgRWFzaW5nXHJcbiAqIEB0eXBlIHtFYXNpbmdPYmplY3R9XHJcbiAqL1xyXG5leHBvcnQgY29uc3QgQ2lyY3VsYXIgPSB7XHJcbiAgSW4oaykge1xyXG4gICAgcmV0dXJuIDEgLSBNYXRoLnNxcnQoMSAtIGsgKiBrKTtcclxuICB9LFxyXG4gIE91dChrKSB7XHJcbiAgICByZXR1cm4gTWF0aC5zcXJ0KDEgLSAtLWsgKiBrKTtcclxuICB9LFxyXG4gIEluT3V0KGspIHtcclxuICAgIGsgKj0gMjtcclxuICAgIGlmIChrIDwgMSkge1xyXG4gICAgICByZXR1cm4gLTAuNSAqIChNYXRoLnNxcnQoMSAtIGsgKiBrKSAtIDEpO1xyXG4gICAgfVxyXG5cclxuICAgIGsgLT0gMjtcclxuICAgIHJldHVybiAwLjUgKiAoTWF0aC5zcXJ0KDEgLSBrICogaykgKyAxKTtcclxuICB9LFxyXG59O1xyXG5cclxuLyoqXHJcbiAqIEVsYXN0aWMgRWFzaW5nXHJcbiAqIEB0eXBlIHtFYXNpbmdPYmplY3R9XHJcbiAqL1xyXG5leHBvcnQgY29uc3QgRWxhc3RpYyA9IHtcclxuICBJbihrKSB7XHJcbiAgICBsZXQgcztcclxuICAgIGxldCBhID0gMC4xO1xyXG4gICAgY29uc3QgcCA9IDAuNDtcclxuXHJcbiAgICBpZiAoayA9PT0gMCkge1xyXG4gICAgICByZXR1cm4gMDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoayA9PT0gMSkge1xyXG4gICAgICByZXR1cm4gMTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIWEgfHwgYSA8IDEpIHtcclxuICAgICAgYSA9IDE7XHJcbiAgICAgIHMgPSBwIC8gNDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHMgPSAocCAqIE1hdGguYXNpbigxIC8gYSkpIC8gKDIgKiBNYXRoLlBJKTtcclxuICAgIH1cclxuXHJcbiAgICBrIC09IDE7XHJcbiAgICByZXR1cm4gLShhICogMiAqKiAoMTAgKiBrKSAqIE1hdGguc2luKCgoayAtIHMpICogKDIgKiBNYXRoLlBJKSkgLyBwKSk7XHJcbiAgfSxcclxuICBPdXQoaykge1xyXG4gICAgbGV0IHM7XHJcbiAgICBsZXQgYSA9IDAuMTtcclxuICAgIGNvbnN0IHAgPSAwLjQ7XHJcblxyXG4gICAgaWYgKGsgPT09IDApIHtcclxuICAgICAgcmV0dXJuIDA7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGsgPT09IDEpIHtcclxuICAgICAgcmV0dXJuIDE7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFhIHx8IGEgPCAxKSB7XHJcbiAgICAgIGEgPSAxO1xyXG4gICAgICBzID0gcCAvIDQ7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBzID0gKHAgKiBNYXRoLmFzaW4oMSAvIGEpKSAvICgyICogTWF0aC5QSSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGEgKiAyICoqICgtMTAgKiBrKSAqIE1hdGguc2luKCgoayAtIHMpICogKDIgKiBNYXRoLlBJKSkgLyBwKSArIDE7XHJcbiAgfSxcclxuICBJbk91dChrKSB7XHJcbiAgICBsZXQgcztcclxuICAgIGxldCBhID0gMC4xO1xyXG4gICAgY29uc3QgcCA9IDAuNDtcclxuXHJcbiAgICBpZiAoayA9PT0gMCkge1xyXG4gICAgICByZXR1cm4gMDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoayA9PT0gMSkge1xyXG4gICAgICByZXR1cm4gMTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIWEgfHwgYSA8IDEpIHtcclxuICAgICAgYSA9IDE7XHJcbiAgICAgIHMgPSBwIC8gNDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHMgPSAocCAqIE1hdGguYXNpbigxIC8gYSkpIC8gKDIgKiBNYXRoLlBJKTtcclxuICAgIH1cclxuXHJcbiAgICBrICo9IDI7XHJcbiAgICBpZiAoayA8IDEpIHtcclxuICAgICAgayAtPSAxO1xyXG4gICAgICByZXR1cm4gKFxyXG4gICAgICAgIC0wLjUgKiAoYSAqIDIgKiogKDEwICogaykgKiBNYXRoLnNpbigoKGsgLSBzKSAqICgyICogTWF0aC5QSSkpIC8gcCkpXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgayAtPSAxO1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgYSAqIDIgKiogKC0xMCAqIGspICogTWF0aC5zaW4oKChrIC0gcykgKiAoMiAqIE1hdGguUEkpKSAvIHApICogMC41ICsgMVxyXG4gICAgKTtcclxuICB9LFxyXG59O1xyXG5cclxuLyoqXHJcbiAqIEJhY2sgRWFzaW5nXHJcbiAqIEB0eXBlIHtFYXNpbmdPYmplY3R9XHJcbiAqL1xyXG5leHBvcnQgY29uc3QgQmFjayA9IHtcclxuICBJbihrKSB7XHJcbiAgICBjb25zdCBzID0gMS43MDE1ODtcclxuICAgIHJldHVybiBrICogayAqICgocyArIDEpICogayAtIHMpO1xyXG4gIH0sXHJcbiAgT3V0KGspIHtcclxuICAgIGNvbnN0IHMgPSAxLjcwMTU4O1xyXG4gICAgcmV0dXJuIC0tayAqIGsgKiAoKHMgKyAxKSAqIGsgKyBzKSArIDE7XHJcbiAgfSxcclxuICBJbk91dChrKSB7XHJcbiAgICBjb25zdCBzID0gMS43MDE1OCAqIDEuNTI1O1xyXG4gICAgayAqPSAyO1xyXG4gICAgaWYgKGsgPCAxKSB7XHJcbiAgICAgIHJldHVybiAwLjUgKiAoayAqIGsgKiAoKHMgKyAxKSAqIGsgLSBzKSk7XHJcbiAgICB9XHJcblxyXG4gICAgayAtPSAyO1xyXG4gICAgcmV0dXJuIDAuNSAqIChrICogayAqICgocyArIDEpICogayArIHMpICsgMik7XHJcbiAgfSxcclxufTtcclxuXHJcbi8qKlxyXG4gKiBCb3VuY2UgRWFzaW5nXHJcbiAqIEB0eXBlIHtFYXNpbmdPYmplY3R9XHJcbiAqL1xyXG5leHBvcnQgY29uc3QgQm91bmNlID0ge1xyXG4gIEluKGspIHtcclxuICAgIHJldHVybiAxIC0gQm91bmNlLk91dCgxIC0gayk7XHJcbiAgfSxcclxuICBPdXQoaykge1xyXG4gICAgaWYgKGsgPCAxIC8gMi43NSkge1xyXG4gICAgICByZXR1cm4gNy41NjI1ICogayAqIGs7XHJcbiAgICB9IGVsc2UgaWYgKGsgPCAyIC8gMi43NSkge1xyXG4gICAgICBrIC09IDEuNTtcclxuICAgICAgcmV0dXJuIDcuNTYyNSAqIChrIC8gMi43NSkgKiBrICsgMC43NTtcclxuICAgIH0gZWxzZSBpZiAoayA8IDIuNSAvIDIuNzUpIHtcclxuICAgICAgayAtPSAyLjI1O1xyXG4gICAgICByZXR1cm4gNy41NjI1ICogKGsgLyAyLjc1KSAqIGsgKyAwLjkzNzU7XHJcbiAgICB9XHJcbiAgICBrIC09IDIuNjI1O1xyXG4gICAgcmV0dXJuIDcuNTYyNSAqIChrIC8gMi43NSkgKiBrICsgMC45ODQzNzU7XHJcbiAgfSxcclxuICBJbk91dChrKSB7XHJcbiAgICBpZiAoayA8IDAuNSkge1xyXG4gICAgICByZXR1cm4gQm91bmNlLkluKGsgKiAyKSAqIDAuNTtcclxuICAgIH1cclxuICAgIHJldHVybiBCb3VuY2UuT3V0KGsgKiAyIC0gMSkgKiAwLjUgKyAwLjU7XHJcbiAgfSxcclxufTtcclxuIiwiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXHJcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxyXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bmRlcnNjb3JlLWRhbmdsZSAqL1xyXG5pbXBvcnQgVXRpbHMgZnJvbSAnLi9VdGlscyc7XHJcblxyXG4vKipcclxuICogQ2xhc3MgdGhhdCBjYW4gZXhlY3V0ZSBmdW5jdGlvbnMgd2hlbiBsb2NhbCBtZXNzYWdlcyBhcmUgcmVjZWl2ZWQuIExvY2FsIG1lc3NhZ2VzXHJcbiAqIGFyZSBwcmVmaXhlZCB3aXRoIHRoZSBpbnN0YW5jZSdzIGlkLlxyXG4gKlxyXG4gKiBAYWxpYXMgY29yZS9NZXNzZW5nZXJcclxuICpcclxuICogQHByb3BlcnR5IHtjb3JlL01lc3Nlbmdlcn0gR2xvYmFsTWVzc2VuZ2VyIC0gQSBtZXNzZW5nZXIgdGhhdCBjYW4gYmUgdXNlZCBmb3JcclxuICogZ2xvYmFsIG1lc3NhZ2luZy4gV2hlbiB1c2luZyBzdGF0aWMgbGlzdGVuIGFuZCBlbWl0IG1ldGhvZHMgdGhleSBhcmUgZXhlY3V0ZWRcclxuICogb24gdGhpcyBtZXNzZW5nZXIuXHJcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBFVkVOVFMgLSBCdWlsdC1pbiBldmVudHMgdGhhdCB0aGUgTWVzc2VuZ2VyIGVtaXRzLlxyXG4gKi9cclxuY2xhc3MgTWVzc2VuZ2VyIHtcclxuICAvKipcclxuICAgKiBAY29uc3RydWN0b3JcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7YW55PX0gaWQgLSBJZCBmb3IgdGhlIG9iamVjdC4gSWYgbm9uZSBpcyBwcm92aWRlZCBhIG5ldyBpZCB3aWxsXHJcbiAgICogYmUgY3JlYXRlZC4gSWQgc2hvdWxkIGJlIGFibGUgdG8gYmUgcmVwcmVzZW50ZWQgYXMgYSBzdHJpbmcuXHJcbiAgICovXHJcbiAgY29uc3RydWN0b3IoaWQpIHtcclxuICAgIHRoaXMuX2lkID0gaWQgIT09IHVuZGVmaW5lZCA/IGlkIDogVXRpbHMuY3JlYXRlSWQoKTtcclxuICAgIHRoaXMuX2Rpc3BhdGNoZXIgPSB3aW5kb3c7XHJcbiAgICB0aGlzLl9jYWxsYmFja3MgPSB7fTtcclxuICAgIHRoaXMuX2V2ZW50TGlzdGVuZXJzID0ge307XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSBzdHJpbmcgaWQgb2YgdGhlIG9iamVjdC5cclxuICAgKlxyXG4gICAqIEByZWFkb25seVxyXG4gICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICovXHJcbiAgZ2V0IGlkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2lkO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUHJlZml4IGEgbWVzc2FnZSB3aXRoIHRoZSBpbnN0YW5jZSBpZC5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZVxyXG4gICAqXHJcbiAgICogQHJldHVybnMge3N0cmluZ31cclxuICAgKi9cclxuICBfY3JlYXRlTG9jYWxNZXNzYWdlKG1lc3NhZ2UpIHtcclxuICAgIHJldHVybiBgJHt0aGlzLmlkfS4ke21lc3NhZ2V9YDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBjYWxsIGEgY2FsbGJhY2sgZnVuY3Rpb24gYW5kIHN1cHBseSB0aGUgZXZlbnQnc1xyXG4gICAqIGRldGFpbCBwcm9wZXJ0eSBhcyBhbiBhcmd1bWVudC5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xyXG4gICAqXHJcbiAgICogQHJldHVybnMge0Z1bmN0aW9ufVxyXG4gICAqL1xyXG4gIF9jcmVhdGVMaXN0ZW5lcihjYWxsYmFjaykge1xyXG4gICAgcmV0dXJuIGUgPT4ge1xyXG4gICAgICBsZXQgdmFsdWU7XHJcblxyXG4gICAgICBpZiAoZS5kZXRhaWwgIT09IG51bGwpIHtcclxuICAgICAgICB2YWx1ZSA9IGUuZGV0YWlsO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjYWxsYmFjayh2YWx1ZSk7XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlIGFuIGV2ZW50IG9iamVjdCBhbmQgc2VuZCBpdCB0byBsaXN0ZW5lcnMuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgLSBFdmVudCB0eXBlIG5hbWUuXHJcbiAgICogQHBhcmFtIHthbnk9fSB2YWx1ZSAtIFZhbHVlIHRvIHNlbmQgdG8gbGlzdGVuZXJzLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0N1c3RvbUV2ZW50fVxyXG4gICAqL1xyXG4gIF9jcmVhdGVFdmVudChtZXNzYWdlLCB2YWx1ZSkge1xyXG4gICAgcmV0dXJuIG5ldyBDdXN0b21FdmVudChtZXNzYWdlLCB7ZGV0YWlsOiB2YWx1ZX0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVnaXN0ZXIgYW4gZXZlbnQuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgLSBFdmVudCB0eXBlIG5hbWUuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gbGlzdGVuZXIgLSBBIGxpc3RlbmVyIGZ1bmN0aW9uIGdlbmVyYXRlZCB1c2luZyBfY3JlYXRlTGlzdGVuZXIuXHJcbiAgICovXHJcbiAgX2FkZExpc3RlbmVyKG1lc3NhZ2UsIGxpc3RlbmVyKSB7XHJcbiAgICB0aGlzLl9kaXNwYXRjaGVyLmFkZEV2ZW50TGlzdGVuZXIoXHJcbiAgICAgIHRoaXMuX2NyZWF0ZUxvY2FsTWVzc2FnZShtZXNzYWdlKSxcclxuICAgICAgbGlzdGVuZXJcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVbnJlZ2lzdGVyIGFuIGV2ZW50LlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIC0gRXZlbnQgdHlwZSBuYW1lLlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGxpc3RlbmVyIC0gQSBsaXN0ZW5lciBmdW5jdGlvbiBnZW5lcmF0ZWQgdXNpbmcgX2NyZWF0ZUxpc3RlbmVyLlxyXG4gICAqL1xyXG4gIF9yZW1vdmVMaXN0ZW5lcihtZXNzYWdlLCBsaXN0ZW5lcikge1xyXG4gICAgdGhpcy5fZGlzcGF0Y2hlci5yZW1vdmVFdmVudExpc3RlbmVyKFxyXG4gICAgICB0aGlzLl9jcmVhdGVMb2NhbE1lc3NhZ2UobWVzc2FnZSksXHJcbiAgICAgIGxpc3RlbmVyXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRXhlY3V0ZSBhIGZ1bmN0aW9uIHdoZW4gYSBtZXNzYWdlIGlzIHJlY2VpdmVkIGZvciB0aGlzIG9iamVjdC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIC0gVGhlIG1lc3NhZ2UgdG8gbGlzdGVuIGZvci5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayAtIEZ1bmN0aW9uIHRvIGV4ZWN1dGUgb25jZSB0aGUgbWVzc2FnZSBpcyByZWNlaXZlZC5cclxuICAgKi9cclxuICBsaXN0ZW5UbyhtZXNzYWdlLCBjYWxsYmFjaykge1xyXG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgYENhbm5vdCBhZGQgbGlzdGVuZXIgZm9yICR7bWVzc2FnZX0gb24gJHt0aGlzLmlkfS4gQ2FsbGJhY2sgbXVzdCBiZSBhIGZ1bmN0aW9uLmBcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5fY2FsbGJhY2tzW21lc3NhZ2VdID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhpcy5fY2FsbGJhY2tzW21lc3NhZ2VdID0gW107XHJcbiAgICAgIHRoaXMuX2V2ZW50TGlzdGVuZXJzW21lc3NhZ2VdID0gW107XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgbGlzdGVuZXIgPSB0aGlzLl9jcmVhdGVMaXN0ZW5lcihjYWxsYmFjayk7XHJcbiAgICB0aGlzLl9jYWxsYmFja3NbbWVzc2FnZV0ucHVzaChjYWxsYmFjayk7XHJcbiAgICB0aGlzLl9ldmVudExpc3RlbmVyc1ttZXNzYWdlXS5wdXNoKGxpc3RlbmVyKTtcclxuXHJcbiAgICB0aGlzLl9hZGRMaXN0ZW5lcihtZXNzYWdlLCBsaXN0ZW5lcik7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQcmV2ZW50IGEgZnVuY3Rpb24gZnJvbSBiZWluZyBleGVjdXRlZCB3aGVuIGEgbWVzc2FnZSBpcyByZWNlaXZlZCBmb3IgdGhpc1xyXG4gICAqIG9iamVjdC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIC0gVGhlIG1lc3NhZ2UgdG8gc3RvcCBsaXN0ZW5pbmcgZm9yLlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBjYWxsYmFjayAtIE9wdGlvbmFsIGNhbGxiYWNrIHRvIHJlbW92ZS4gSWYgbm9uZSBpcyBkZWZpbmVkLFxyXG4gICAqIHJlbW92ZSBhbGwgY2FsbGJhY2tzIGZvciB0aGUgbWVzc2FnZS5cclxuICAgKi9cclxuICBzdG9wTGlzdGVuaW5nKG1lc3NhZ2UsIGNhbGxiYWNrKSB7XHJcbiAgICBpZiAodGhpcy5fY2FsbGJhY2tzW21lc3NhZ2VdID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfSBlbHNlIGlmIChjYWxsYmFjayA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIC8vIElmIG5vIGNhbGxiYWNrIHdhcyBkZWZpbmVkLCBjYWxsIHN0b3BMaXN0ZW5pbmcgb24gYWxsIGNhbGxiYWNrcyBmb3IgdGhlIG1lc3NhZ2VcclxuICAgICAgZm9yIChsZXQgaSA9IHRoaXMuX2NhbGxiYWNrc1ttZXNzYWdlXS5sZW5ndGggLSAxOyBpID4gLTE7IGktLSkge1xyXG4gICAgICAgIHRoaXMuc3RvcExpc3RlbmluZyhtZXNzYWdlLCB0aGlzLl9jYWxsYmFja3NbbWVzc2FnZV1baV0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gSWYgYSBjYWxsYmFjayB3YXMgZGVmaW5lZCwgbWFrZSBzdXJlIGl0J3MgYSBsaXN0ZW5lclxyXG4gICAgY29uc3QgaW5kZXggPSB0aGlzLl9jYWxsYmFja3NbbWVzc2FnZV0uaW5kZXhPZihjYWxsYmFjayk7XHJcbiAgICBpZiAoaW5kZXggPT09IC0xKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBsaXN0ZW5lciA9IHRoaXMuX2V2ZW50TGlzdGVuZXJzW21lc3NhZ2VdW2luZGV4XTtcclxuICAgIHRoaXMuX3JlbW92ZUxpc3RlbmVyKG1lc3NhZ2UsIGxpc3RlbmVyKTtcclxuXHJcbiAgICB0aGlzLl9jYWxsYmFja3NbbWVzc2FnZV0uc3BsaWNlKGluZGV4LCAxKTtcclxuICAgIHRoaXMuX2V2ZW50TGlzdGVuZXJzW21lc3NhZ2VdLnNwbGljZShpbmRleCwgMSk7XHJcblxyXG4gICAgaWYgKHRoaXMuX2NhbGxiYWNrc1ttZXNzYWdlXS5sZW5ndGggPT09IDApIHtcclxuICAgICAgZGVsZXRlIHRoaXMuX2NhbGxiYWNrc1ttZXNzYWdlXTtcclxuICAgICAgZGVsZXRlIHRoaXMuX2V2ZW50TGlzdGVuZXJzW21lc3NhZ2VdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRGUtcmVnaXN0ZXIgY2FsbGJhY2socykgZnJvbSBiZWluZyBleGVjdXRlZCB3aGVuIG1lc3NhZ2VzIG1hdGNoaW5nIHRoZSBnaXZlblxyXG4gICAqIHJlZ3VsYXIgZXhwcmVzc2lvbiBhcmUgcmVjZWl2ZWQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge1JlZ2V4cH0gcmVnZXhwIC0gcmVnZXhwIC0gVGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiB0byBmaWx0ZXIgbWVzc2FnZXMgd2l0aC5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gY2FsbGJhY2sgLSBPcHRpb25hbCBjYWxsYmFjayB0byByZW1vdmUuIElmIG5vbmUgaXMgZGVmaW5lZCxcclxuICAgKiByZW1vdmUgYWxsIGNhbGxiYWNrcyBmb3IgbWVzc2FnZXMgbWF0Y2hpbmcgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbi5cclxuICAgKi9cclxuICBzdG9wTGlzdGVuaW5nQnlSZWdleHAocmVnZXhwLCBjYWxsYmFjaykge1xyXG4gICAgY29uc3QgbWVzc2FnZXMgPSBPYmplY3Qua2V5cyh0aGlzLl9jYWxsYmFja3MpLmZpbHRlcihtZXNzYWdlID0+IHJlZ2V4cC50ZXN0KG1lc3NhZ2UpKTtcclxuXHJcbiAgICBtZXNzYWdlcy5mb3JFYWNoKG1lc3NhZ2UgPT4ge1xyXG4gICAgICB0aGlzLnN0b3BMaXN0ZW5pbmcobWVzc2FnZSwgY2FsbGJhY2spO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQcmV2ZW50IGFueSBmdW5jdGlvbnMgZnJvbSBiZWluZyBleGVjdXRlZCB3aGVuIGFueSBtZXNzYWdlIGlzIHJlY2VpdmVkIGZvclxyXG4gICAqIHRoaXMgb2JqZWN0LlxyXG4gICAqL1xyXG4gIHN0b3BMaXN0ZW5pbmdUb0FsbCgpIHtcclxuICAgIGNvbnN0IG1lc3NhZ2VzID0gT2JqZWN0LmtleXModGhpcy5fY2FsbGJhY2tzKTtcclxuXHJcbiAgICBmb3IgKGxldCBpID0gbWVzc2FnZXMubGVuZ3RoIC0gMTsgaSA+IC0xOyBpLS0pIHtcclxuICAgICAgdGhpcy5zdG9wTGlzdGVuaW5nKG1lc3NhZ2VzW2ldKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNlbmQgYSBtZXNzYWdlLCBjYXVzaW5nIGxpc3RlbmVyIGZ1bmN0aW9ucyBmb3IgdGhlIG1lc3NhZ2Ugb24gdGhpcyBvYmplY3RcclxuICAgKiB0byBiZSBleGVjdXRlZC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIC0gVGhlIG1lc3NhZ2UgdG8gZW1pdC5cclxuICAgKiBAcGFyYW0ge2FueT19IHZhbHVlIC0gT3B0aW9uYWwgYXJndW1lbnQgdG8gcGFzcyB0byBsaXN0ZW5lciBjYWxsYmFja3MuXHJcbiAgICovXHJcbiAgZW1pdChtZXNzYWdlLCB2YWx1ZSkge1xyXG4gICAgaWYgKHRoaXMuX2NhbGxiYWNrc1ttZXNzYWdlXSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBtZXNzYWdlID0gdGhpcy5fY3JlYXRlTG9jYWxNZXNzYWdlKG1lc3NhZ2UpO1xyXG4gICAgY29uc3QgZXZlbnQgPSB0aGlzLl9jcmVhdGVFdmVudChtZXNzYWdlLCB2YWx1ZSk7XHJcbiAgICB0aGlzLl9kaXNwYXRjaGVyLmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRXhlY3V0ZSBhIGZ1bmN0aW9uIHdoZW4gYSBtZXNzYWdlIGlzIHJlY2VpdmVkIGZvciB0aGUgZ2xvYmFsIE1lc3NlbmdlciBpbnN0YW5jZS5cclxuICAgKlxyXG4gICAqIEBzdGF0aWNcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIC0gVGhlIG1lc3NhZ2UgdG8gbGlzdGVuIGZvci5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayAtIEZ1bmN0aW9uIHRvIGV4ZWN1dGUgb25jZSB0aGUgbWVzc2FnZSBpcyByZWNlaXZlZC5cclxuICAgKi9cclxuICBzdGF0aWMgbGlzdGVuVG8obWVzc2FnZSwgY2FsbGJhY2ssIG1lc3Nlbmdlcikge1xyXG4gICAgdGhpcy5HbG9iYWxNZXNzZW5nZXIubGlzdGVuVG8obWVzc2FnZSwgY2FsbGJhY2ssIG1lc3Nlbmdlcik7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQcmV2ZW50IGEgZnVuY3Rpb24gZnJvbSBiZWluZyBleGVjdXRlZCB3aGVuIGEgbWVzc2FnZSBpcyByZWNlaXZlZCBmb3IgdGhlXHJcbiAgICogZ2xvYmFsIE1lc3NlbmdlciBpbnN0YW5jZS5cclxuICAgKlxyXG4gICAqIEBzdGF0aWNcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIC0gVGhlIG1lc3NhZ2UgdG8gc3RvcCBsaXN0ZW5pbmcgZm9yLlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBjYWxsYmFjayAtIE9wdGlvbmFsIGNhbGxiYWNrIHRvIHJlbW92ZS4gSWYgbm9uZSBpcyBkZWZpbmVkLFxyXG4gICAqIHJlbW92ZSBhbGwgY2FsbGJhY2tzIGZvciB0aGUgbWVzc2FnZS5cclxuICAgKi9cclxuICBzdGF0aWMgc3RvcExpc3RlbmluZyhtZXNzYWdlLCBjYWxsYmFjaykge1xyXG4gICAgdGhpcy5HbG9iYWxNZXNzZW5nZXIuc3RvcExpc3RlbmluZyhtZXNzYWdlLCBjYWxsYmFjayk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEZS1yZWdpc3RlciBjYWxsYmFjayhzKSBmcm9tIGJlaW5nIGV4ZWN1dGVkIG9uIHRoZSBnbG9iYWwgbWVzc2VuZ2VyciBpbnN0YW5jZVxyXG4gICAqIHdoZW4gbWVzc2FnZXMgbWF0Y2hpbmcgdGhlIGdpdmVuIHJlZ3VsYXIgZXhwcmVzc2lvbiBhcmUgcmVjZWl2ZWQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge1JlZ2V4cH0gcmVnZXhwIC0gcmVnZXhwIC0gVGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiB0byBmaWx0ZXIgbWVzc2FnZXMgd2l0aC5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gY2FsbGJhY2sgLSBPcHRpb25hbCBjYWxsYmFjayB0byByZW1vdmUuIElmIG5vbmUgaXMgZGVmaW5lZCxcclxuICAgKiByZW1vdmUgYWxsIGNhbGxiYWNrcyBmb3IgbWVzc2FnZXMgbWF0Y2hpbmcgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbi5cclxuICAgKi9cclxuICBzdGF0aWMgc3RvcExpc3RlbmluZ0J5UmVnZXhwKHJlZ2V4cCwgY2FsbGJhY2spIHtcclxuICAgIGNvbnN0IG1lc3NhZ2VzID0gT2JqZWN0LmtleXModGhpcy5HbG9iYWxNZXNzZW5nZXIuX2NhbGxiYWNrcykuZmlsdGVyKFxyXG4gICAgICBtZXNzYWdlID0+IHJlZ2V4cC50ZXN0KG1lc3NhZ2UpXHJcbiAgICApO1xyXG5cclxuICAgIG1lc3NhZ2VzLmZvckVhY2gobWVzc2FnZSA9PiB7XHJcbiAgICAgIHRoaXMuc3RvcExpc3RlbmluZyhtZXNzYWdlLCBjYWxsYmFjayk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFByZXZlbnQgYW55IGZ1bmN0aW9ucyBmcm9tIGJlaW5nIGV4ZWN1dGVkIHdoZW4gYW55IG1lc3NhZ2UgaXMgcmVjZWl2ZWQgZm9yXHJcbiAgICogdGhlIGdsb2JhbCBNZXNzZW5nZXIgaW5zdGFuY2UuXHJcbiAgICpcclxuICAgKiBAc3RhdGljXHJcbiAgICovXHJcbiAgc3RhdGljIHN0b3BMaXN0ZW5pbmdUb0FsbCgpIHtcclxuICAgIHRoaXMuR2xvYmFsTWVzc2VuZ2VyLnN0b3BMaXN0ZW5pbmdUb0FsbCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2VuZCBhIG1lc3NhZ2UsIGNhdXNpbmcgbGlzdGVuZXIgZnVuY3Rpb25zIGZvciB0aGUgbWVzc2FnZSBvbiB0aGUgZ2xvYmFsIE1lc3NlbmdlclxyXG4gICAqIGluc3RhbmNlIHRvIGJlIGV4ZWN1dGVkLlxyXG4gICAqXHJcbiAgICogQHN0YXRpY1xyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgLSBUaGUgbWVzc2FnZSB0byBlbWl0LlxyXG4gICAqIEBwYXJhbSB7YW55PX0gdmFsdWUgLSBPcHRpb25hbCBhcmd1bWVudCB0byBwYXNzIHRvIGxpc3RlbmVyIGNhbGxiYWNrcy5cclxuICAgKi9cclxuICBzdGF0aWMgZW1pdChtZXNzYWdlLCB2YWx1ZSkge1xyXG4gICAgdGhpcy5HbG9iYWxNZXNzZW5nZXIuZW1pdChtZXNzYWdlLCB2YWx1ZSk7XHJcbiAgfVxyXG59XHJcblxyXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhNZXNzZW5nZXIsIHtcclxuICBHbG9iYWxNZXNzZW5nZXI6IHtcclxuICAgIHZhbHVlOiBuZXcgTWVzc2VuZ2VyKCksXHJcbiAgICB3cml0YWJsZTogZmFsc2UsXHJcbiAgfSxcclxuICBFVkVOVFM6IHtcclxuICAgIHZhbHVlOiB7fSxcclxuICAgIHdyaXRhYmxlOiBmYWxzZSxcclxuICB9LFxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IE1lc3NlbmdlcjtcclxuIiwiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXHJcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxyXG5pbXBvcnQgQ29yZU1lc3NlbmdlciBmcm9tICdjb3JlL01lc3Nlbmdlcic7XHJcblxyXG4vKipcclxuICogQGV4dGVuZHMgY29yZS9NZXNzZW5nZXJcclxuICogQGFsaWFzIEJhYnlsb24uanMvTWVzc2VuZ2VyXHJcbiAqL1xyXG5jbGFzcyBNZXNzZW5nZXIgZXh0ZW5kcyBDb3JlTWVzc2VuZ2VyIHtcclxuICAvKipcclxuICAgKiBAY29uc3RydWN0b3JcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7YW55PX0gaWQgLSBJZCBmb3IgdGhlIG9iamVjdC4gSWYgbm9uZSBpcyBwcm92aWRlZCBhIG5ldyBpZCB3aWxsXHJcbiAgICogYmUgY3JlYXRlZC4gSWQgc2hvdWxkIGJlIGFibGUgdG8gYmUgcmVwcmVzZW50ZWQgYXMgYSBzdHJpbmcuXHJcbiAgICovXHJcbiAgY29uc3RydWN0b3IoaWQpIHtcclxuICAgIHN1cGVyKGlkKTtcclxuXHJcbiAgICB0aGlzLl9ldmVudHMgPSB7fTtcclxuICB9XHJcblxyXG4gIF9jcmVhdGVMaXN0ZW5lcihjYWxsYmFjaykge1xyXG4gICAgcmV0dXJuIHZhbHVlID0+IHtcclxuICAgICAgY2FsbGJhY2sodmFsdWUpO1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIF9hZGRMaXN0ZW5lcihtZXNzYWdlLCBsaXN0ZW5lcikge1xyXG4gICAgdGhpcy5fZXZlbnRzW21lc3NhZ2VdLmFkZChsaXN0ZW5lcik7XHJcbiAgfVxyXG5cclxuICBfcmVtb3ZlTGlzdGVuZXIobWVzc2FnZSwgbGlzdGVuZXIpIHtcclxuICAgIHRoaXMuX2V2ZW50c1ttZXNzYWdlXS5yZW1vdmVDYWxsYmFjayhsaXN0ZW5lcik7XHJcbiAgfVxyXG5cclxuICBsaXN0ZW5UbyhtZXNzYWdlLCBjYWxsYmFjaykge1xyXG4gICAgaWYgKHRoaXMuX2V2ZW50c1ttZXNzYWdlXSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMuX2V2ZW50c1ttZXNzYWdlXSA9IG5ldyBCQUJZTE9OLk9ic2VydmFibGUoKTtcclxuICAgIH1cclxuXHJcbiAgICB0cnkge1xyXG4gICAgICBzdXBlci5saXN0ZW5UbyhtZXNzYWdlLCBjYWxsYmFjayk7XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIC8vIENsZWFuIHVwIHRoZSBvYnNlcnZhYmxlIGlmIG5vdGhpbmcgaXMgbGlzdGVuaW5nIHRvIGl0XHJcbiAgICAgIGlmICghdGhpcy5fZXZlbnRzW21lc3NhZ2VdLmhhc09ic2VydmVycygpKSB7XHJcbiAgICAgICAgZGVsZXRlIHRoaXMuX2V2ZW50c1ttZXNzYWdlXTtcclxuXHJcbiAgICAgICAgdGhyb3cgZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc3RvcExpc3RlbmluZyhtZXNzYWdlLCBjYWxsYmFjaykge1xyXG4gICAgY29uc3QgZXZlbnQgPSB0aGlzLl9ldmVudHNbbWVzc2FnZV07XHJcblxyXG4gICAgaWYgKGV2ZW50ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHN1cGVyLnN0b3BMaXN0ZW5pbmcobWVzc2FnZSwgY2FsbGJhY2spO1xyXG5cclxuICAgIGlmICghZXZlbnQuaGFzT2JzZXJ2ZXJzKCkpIHtcclxuICAgICAgZGVsZXRlIHRoaXMuX2V2ZW50c1ttZXNzYWdlXTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGVtaXQobWVzc2FnZSwgdmFsdWUpIHtcclxuICAgIGNvbnN0IGV2ZW50ID0gdGhpcy5fZXZlbnRzW21lc3NhZ2VdO1xyXG5cclxuICAgIGlmIChldmVudCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBldmVudC5ub3RpZnlPYnNlcnZlcnModmFsdWUpO1xyXG4gIH1cclxufVxyXG5cclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KE1lc3NlbmdlciwgJ0dsb2JhbE1lc3NlbmdlcicsIHtcclxuICB2YWx1ZTogbmV3IE1lc3NlbmdlcigpLFxyXG4gIHdyaXRhYmxlOiBmYWxzZSxcclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBNZXNzZW5nZXI7XHJcbiIsIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxyXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTBcclxuaW1wb3J0IE1lc3NlbmdlciBmcm9tICdhcHAvTWVzc2VuZ2VyJztcclxuXHJcbi8qKlxyXG4gKiBCYXNlIGNsYXNzIGZvciBhbGwgaG9zdCBmZWF0dXJlcy4gS2VlcHMgYSByZWZlcmVuY2UgdG8gdGhlIGhvc3Qgb2JqZWN0IG1hbmFnaW5nXHJcbiAqIHRoZSBmZWF0dXJlLlxyXG4gKlxyXG4gKiBAYWJzdHJhY3RcclxuICpcclxuICogQHByb3BlcnR5IHtPYmplY3R9IEVWRU5UUyAtIEJ1aWx0LWluIG1lc3NhZ2VzIHRoYXQgdGhlIGZlYXR1cmUgZW1pdHMuIFdoZW4gdGhlXHJcbiAqIGZlYXR1cmUgaXMgYWRkZWQgdG8gYSB7QGxpbmsgY29yZS9Ib3N0T2JqZWN0fSwgZXZlbnQgbmFtZXMgd2lsbCBiZSBwcmVmaXhlZCBieSB0aGVcclxuICogbmFtZSBvZiB0aGUgZmVhdHVyZSBjbGFzcyArICcuJy5cclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtFVkVOVFMudXBkYXRlPW9uVXBkYXRlXSAtIE1lc3NhZ2UgdGhhdCBpcyBlbWl0dGVkIGFmdGVyXHJcbiAqIGVhY2ggY2FsbCB0byBbdXBkYXRlXXtAbGluayBBYnN0cmFjdEhvc3RGZWF0dXJlI3VwZGF0ZX0uXHJcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBTRVJWSUNFUyAtIEFueSBBV1Mgc2VydmljZXMgdGhhdCBhcmUgbmVjZXNzYXJ5IGZvciB0aGVcclxuICogZmVhdHVyZSB0byBmdW5jdGlvbi5cclxuICovXHJcbmNsYXNzIEFic3RyYWN0SG9zdEZlYXR1cmUge1xyXG4gIC8qKlxyXG4gICAqIEBjb25zdHJ1Y3RvclxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtjb3JlL0hvc3RPYmplY3R9IGhvc3QgLSBUaGUgSG9zdE9iamVjdCBtYW5hZ2luZyB0aGUgZmVhdHVyZS5cclxuICAgKi9cclxuICBjb25zdHJ1Y3Rvcihob3N0KSB7XHJcbiAgICB0aGlzLl9ob3N0ID0gaG9zdDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFkZHMgYSBuYW1lc3BhY2UgdG8gdGhlIGhvc3Qgd2l0aCB0aGUgbmFtZSBvZiB0aGUgZmVhdHVyZSB0byBjb250YWluIHByb3BlcnRpZXNcclxuICAgKiBhbmQgbWV0aG9kcyBmcm9tIHRoZSBmZWF0dXJlIHRoYXQgdXNlcnMgb2YgdGhlIGhvc3QgbmVlZCBhY2Nlc3MgdG8uXHJcbiAgICovXHJcbiAgaW5zdGFsbEFwaSgpIHtcclxuICAgIGNvbnN0IGV2ZW50cyA9IHt9O1xyXG4gICAgY29uc3QgYXBpID0ge0VWRU5UUzogZXZlbnRzfTtcclxuXHJcbiAgICAvLyBBZGQgdGhlIGNsYXNzIG5hbWUgdG8gZXZlbnQgbmFtZXNcclxuICAgIE9iamVjdC5lbnRyaWVzKHRoaXMuY29uc3RydWN0b3IuRVZFTlRTKS5mb3JFYWNoKChbbmFtZSwgdmFsdWVdKSA9PiB7XHJcbiAgICAgIGV2ZW50c1tuYW1lXSA9IGAke3RoaXMuY29uc3RydWN0b3IubmFtZX0uJHt2YWx1ZX1gO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5faG9zdFt0aGlzLmNvbnN0cnVjdG9yLm5hbWVdID0gYXBpO1xyXG5cclxuICAgIHJldHVybiBhcGk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSBob3N0IHRoYXQgbWFuYWdlcyB0aGUgZmVhdHVyZS5cclxuICAgKlxyXG4gICAqIEByZWFkb25seVxyXG4gICAqL1xyXG4gIGdldCBob3N0KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2hvc3Q7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSBlbmdpbmUgb3duZXIgb2JqZWN0IG9mIHRoZSBob3N0LlxyXG4gICAqXHJcbiAgICogQHJlYWRvbmx5XHJcbiAgICovXHJcbiAgZ2V0IG93bmVyKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2hvc3Qub3duZXI7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBMaXN0ZW4gdG8gYSBmZWF0dXJlIG1lc3NhZ2UgZnJvbSB0aGUgaG9zdCBvYmplY3QuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSAtIE1lc3NhZ2UgdG8gbGlzdGVuIGZvci5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayAtIFRoZSBjYWxsYmFjayB0byBleGVjdXRlIHdoZW4gdGhlIG1lc3NhZ2UgaXMgcmVjZWl2ZWQuXHJcbiAgICovXHJcbiAgbGlzdGVuVG8obWVzc2FnZSwgY2FsbGJhY2spIHtcclxuICAgIHRoaXMuX2hvc3QubGlzdGVuVG8obWVzc2FnZSwgY2FsbGJhY2spO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTGlzdGVuIHRvIGEgZmVhdHVyZSBtZXNzYWdlIGZyb20gdGhlIGdsb2JhbCBtZXNzZW5nZXIuIEZlYXR1cmUgbWVzc2FnZXMgd2lsbFxyXG4gICAqIGJlIHByZWZpeGVkIHdpdGggdGhlIGNsYXNzIG5hbWUgb2YgdGhlIGZlYXR1cmUuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSAtIE1lc3NhZ2UgdG8gbGlzdGVuIGZvci5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayAtIFRoZSBjYWxsYmFjayB0byBleGVjdXRlIHdoZW4gdGhlIG1lc3NhZ2UgaXMgcmVjZWl2ZWQuXHJcbiAgICovXHJcbiAgc3RhdGljIGxpc3RlblRvKG1lc3NhZ2UsIGNhbGxiYWNrKSB7XHJcbiAgICBtZXNzYWdlID0gYCR7dGhpcy5uYW1lfS4ke21lc3NhZ2V9YDtcclxuICAgIE1lc3Nlbmdlci5saXN0ZW5UbyhtZXNzYWdlLCBjYWxsYmFjayk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTdG9wIGxpc3RlbmluZyB0byBhIG1lc3NhZ2UgZnJvbSB0aGUgaG9zdCBvYmplY3QuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSAtIE1lc3NhZ2UgdG8gc3RvcCBsaXN0ZW5pbmcgZm9yLlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBjYWxsYmFjayAtIE9wdGlvbmFsIGNhbGxiYWNrIHRvIHJlbW92ZS4gSWYgbm9uZSBpcyBkZWZpbmVkLFxyXG4gICAqIHJlbW92ZSBhbGwgY2FsbGJhY2tzIGZvciB0aGUgbWVzc2FnZS5cclxuICAgKi9cclxuICBzdG9wTGlzdGVuaW5nKG1lc3NhZ2UsIGNhbGxiYWNrKSB7XHJcbiAgICB0aGlzLl9ob3N0LnN0b3BMaXN0ZW5pbmcobWVzc2FnZSwgY2FsbGJhY2spO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU3RvcCBsaXN0ZW5pbmcgdG8gYSBtZXNzYWdlIGZyb20gdGhlIGdsb2JhbCBtZXNzZW5nZXIuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSAtIE1lc3NhZ2UgdG8gc3RvcCBsaXN0ZW5pbmcgZm9yLlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBjYWxsYmFjayAtIE9wdGlvbmFsIGNhbGxiYWNrIHRvIHJlbW92ZS4gSWYgbm9uZSBpcyBkZWZpbmVkLFxyXG4gICAqIHJlbW92ZSBhbGwgY2FsbGJhY2tzIGZvciB0aGUgbWVzc2FnZS5cclxuICAgKi9cclxuICBzdGF0aWMgc3RvcExpc3RlbmluZyhtZXNzYWdlLCBjYWxsYmFjaykge1xyXG4gICAgbWVzc2FnZSA9IGAke3RoaXMubmFtZX0uJHttZXNzYWdlfWA7XHJcbiAgICBNZXNzZW5nZXIuc3RvcExpc3RlbmluZyhtZXNzYWdlLCBjYWxsYmFjayk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTdG9wIGxpc3RlbmluZyB0byBhIG1lc3NhZ2UgbWF0Y2hpbmcgdGhlIGdpdmVuIHJlZ3VsYXIgZXhwcmVzc2lvbiBmcm9tIHRoZVxyXG4gICAqIGhvc3Qgb2JqZWN0LlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtSZWdleHB9IHJlZ2V4cCAtIFRoZSByZWd1bGFyIGV4cHJlc3Npb24gdG8gc3RvcCBsaXN0ZW5pbmcgZm9yLlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBjYWxsYmFjayAtIE9wdGlvbmFsIGNhbGxiYWNrIHRvIHJlbW92ZS4gSWYgbm9uZSBpcyBkZWZpbmVkLFxyXG4gICAqIHJlbW92ZSBhbGwgY2FsbGJhY2tzIGZvciB0aGUgbWVzc2FnZS5cclxuICAgKi9cclxuICBzdG9wTGlzdGVuaW5nQnlSZWdleHAocmVnZXhwLCBjYWxsYmFjaykge1xyXG4gICAgdGhpcy5faG9zdC5zdG9wTGlzdGVuaW5nQnlSZWdleHAocmVnZXhwLCBjYWxsYmFjayk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTdG9wIGxpc3RlbmluZyB0byBhIG1lc3NhZ2UgbWF0Y2hpbmcgdGhlIGdpdmVuIHJlZ3VsYXIgZXhwcmVzc2lvbiBmcm9tIHRoZVxyXG4gICAqIGdsb2JhbCBtZXNzZW5nZXIuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge1JlZ2V4cH0gcmVnZXhwIC0gVGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiB0byBzdG9wIGxpc3RlbmluZyBmb3IuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IGNhbGxiYWNrIC0gT3B0aW9uYWwgY2FsbGJhY2sgdG8gcmVtb3ZlLiBJZiBub25lIGlzIGRlZmluZWQsXHJcbiAgICogcmVtb3ZlIGFsbCBjYWxsYmFja3MgZm9yIHRoZSBtZXNzYWdlLlxyXG4gICAqL1xyXG4gIHN0YXRpYyBzdG9wTGlzdGVuaW5nQnlSZWdleHAocmVnZXhwLCBjYWxsYmFjaykge1xyXG4gICAgcmVnZXhwID0gbmV3IFJlZ0V4cChgXiR7dGhpcy5uYW1lfS4ke3JlZ2V4cC5zb3VyY2UucmVwbGFjZSgvXFxeLywgJycpfWApO1xyXG4gICAgTWVzc2VuZ2VyLnN0b3BMaXN0ZW5pbmdCeVJlZ2V4cChyZWdleHAsIGNhbGxiYWNrKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFN0b3AgbGlzdGVuaW5nIHRvIGFsbCBtZXNzYWdlcy5cclxuICAgKi9cclxuICBzdG9wTGlzdGVuaW5nVG9BbGwoKSB7XHJcbiAgICB0aGlzLl9ob3N0LnN0b3BMaXN0ZW5pbmdUb0FsbCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU3RvcCBsaXN0ZW5pbmcgdG8gYWxsIGZlYXR1cmUgbWVzc2FnZXMuXHJcbiAgICovXHJcbiAgc3RhdGljIHN0b3BMaXN0ZW5pbmdUb0FsbCgpIHtcclxuICAgIE1lc3Nlbmdlci5zdG9wTGlzdGVuaW5nQnlSZWdleHAobmV3IFJlZ0V4cChgXiR7dGhpcy5uYW1lfS5gKSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFbWl0IGZlYXR1cmUgbWVzc2FnZXMgZnJvbSB0aGUgaG9zdC4gRmVhdHVyZSBtZXNzYWdlcyB3aWxsIGJlIHByZWZpeGVkIHdpdGhcclxuICAgKiB0aGUgY2xhc3MgbmFtZSBvZiB0aGUgZmVhdHVyZS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIC0gVGhlIG1lc3NhZ2UgdG8gZW1pdC5cclxuICAgKiBAcGFyYW0ge2FueT19IHZhbHVlIC0gT3B0aW9uYWwgcGFyYW1ldGVyIHRvIHBhc3MgdG8gbGlzdGVuZXIgY2FsbGJhY2tzLlxyXG4gICAqL1xyXG4gIGVtaXQobWVzc2FnZSwgdmFsdWUpIHtcclxuICAgIG1lc3NhZ2UgPSBgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9LiR7bWVzc2FnZX1gO1xyXG4gICAgdGhpcy5faG9zdC5lbWl0KG1lc3NhZ2UsIHZhbHVlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEVtaXQgZmVhdHVyZSBtZXNzYWdlcyBmcm9tIHRoZSBnbG9iYWwgbWVzc2VuZ2VyLiBGZWF0dXJlIG1lc3NhZ2VzIHdpbGwgYmUgcHJlZml4ZWRcclxuICAgKiB3aXRoIHRoZSBjbGFzcyBuYW1lIG9mIHRoZSBmZWF0dXJlLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgLSBUaGUgbWVzc2FnZSB0byBlbWl0LlxyXG4gICAqIEBwYXJhbSB7YW55PX0gdmFsdWUgLSBPcHRpb25hbCBwYXJhbWV0ZXIgdG8gcGFzcyB0byBsaXN0ZW5lciBjYWxsYmFja3MuXHJcbiAgICovXHJcbiAgc3RhdGljIGVtaXQobWVzc2FnZSwgdmFsdWUpIHtcclxuICAgIG1lc3NhZ2UgPSBgJHt0aGlzLm5hbWV9LiR7bWVzc2FnZX1gO1xyXG4gICAgTWVzc2VuZ2VyLmVtaXQobWVzc2FnZSwgdmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRXhlY3V0ZXMgZWFjaCB0aW1lIHRoZSBob3N0IGlzIHVwZGF0ZWQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge251bWJlcn0gZGVsdGFUaW1lIC0gQW1vdW50IG9mIHRpbWUgc2luY2UgdGhlIGxhc3QgaG9zdCB1cGRhdGUgd2FzXHJcbiAgICogY2FsbGVkLlxyXG4gICAqL1xyXG4gIHVwZGF0ZShkZWx0YVRpbWUpIHtcclxuICAgIHRoaXMuZW1pdCh0aGlzLmNvbnN0cnVjdG9yLkVWRU5UUy51cGRhdGUsIGRlbHRhVGltZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDbGVhbiB1cCBvbmNlIHRoZSBmZWF0dXJlIGlzIG5vIGxvbmdlciBpbiB1c2UuIFJlbW92ZSB0aGUgZmVhdHVyZSBuYW1lc3BhY2VcclxuICAgKiBmcm9tIHRoZSBob3N0IGFuZCByZW1vdmUgcmVmZXJlbmNlIHRvIHRoZSBob3N0LlxyXG4gICAqL1xyXG4gIGRpc2NhcmQoKSB7XHJcbiAgICBPYmplY3Qua2V5cyh0aGlzLl9ob3N0W3RoaXMuY29uc3RydWN0b3IubmFtZV0pLmZvckVhY2gobmFtZSA9PiB7XHJcbiAgICAgIGRlbGV0ZSB0aGlzLl9ob3N0W3RoaXMuY29uc3RydWN0b3IubmFtZV1bbmFtZV07XHJcbiAgICB9KTtcclxuXHJcbiAgICBkZWxldGUgdGhpcy5faG9zdFt0aGlzLmNvbnN0cnVjdG9yLm5hbWVdO1xyXG4gICAgZGVsZXRlIHRoaXMuX2hvc3Q7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBcHBsaWVzIGEgc2VxdWVuY2Ugb2YgbWl4aW4gY2xhc3MgZmFjdG9yeSBmdW5jdGlvbnMgdG8gdGhpcyBjbGFzcyBhbmRcclxuICAgKiByZXR1cm5zIHRoZSByZXN1bHQuIEVhY2ggZnVuY3Rpb24gaXMgZXhwZWN0ZWQgdG8gcmV0dXJuIGEgY2xhc3MgdGhhdFxyXG4gICAqIGV4dGVuZHMgdGhlIGNsYXNzIGl0IHdhcyBnaXZlbi4gVGhlIGZ1bmN0aW9ucyBhcmUgYXBwbGllZCBpbiB0aGUgb3JkZXJcclxuICAgKiB0aGF0IHBhcmFtZXRlcnMgYXJlIGdpdmVuLCBtZWFuaW5nIHRoYXQgdGhlIGZpcnN0IGZhY3Rvcnkgd2lsbFxyXG4gICAqIGV4dGVuZCB0aGlzIGJhc2UgY2xhc3MuXHJcbiAgICpcclxuICAgKiBAcGFyYW0gey4uLkZ1bmN0aW9ufSBtaXhpbkNsYXNzRmFjdG9yaWVzIENsYXNzIGZhY3RvcnkgZnVuY3Rpb25zIHRoYXQgd2lsbFxyXG4gICAqIGJlIGFwcGxpZWQuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7Q2xhc3N9IEEgY2xhc3MgdGhhdCBpcyB0aGUgcmVzdWx0IG9mIGFwcGx5aW5nIHRoZSBmYWN0b3J5IGZ1bmN0aW9ucy5cclxuICAgKiBUaGUgcmVzdWx0aW5nIGNsYXNzIHdpbGwgYWx3YXlzIGluaGVyaXQgZnJvbSBBYnN0cmFjdEhvc3RGZWF0dXJlLlxyXG4gICAqL1xyXG4gIHN0YXRpYyBtaXgoLi4ubWl4aW5DbGFzc0ZhY3Rvcmllcykge1xyXG4gICAgbGV0IFJlc3VsdENsYXNzID0gdGhpcztcclxuXHJcbiAgICBtaXhpbkNsYXNzRmFjdG9yaWVzLmZvckVhY2gobWl4aW5DbGFzc0ZhY3RvcnkgPT4ge1xyXG4gICAgICBSZXN1bHRDbGFzcyA9IG1peGluQ2xhc3NGYWN0b3J5KFJlc3VsdENsYXNzKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBSZXN1bHRDbGFzcztcclxuICB9XHJcbn1cclxuXHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEFic3RyYWN0SG9zdEZlYXR1cmUsIHtcclxuICBFVkVOVFM6IHtcclxuICAgIHZhbHVlOiB7XHJcbiAgICAgIHVwZGF0ZTogJ29uVXBkYXRlJyxcclxuICAgIH0sXHJcbiAgICB3cml0YWJsZTogZmFsc2UsXHJcbiAgfSxcclxuICBTRVJWSUNFUzoge1xyXG4gICAgdmFsdWU6IHt9LFxyXG4gICAgd3JpdGFibGU6IGZhbHNlLFxyXG4gIH0sXHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgQWJzdHJhY3RIb3N0RmVhdHVyZTtcclxuIiwiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXHJcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxyXG5pbXBvcnQgTWVzc2VuZ2VyIGZyb20gJ2FwcC9NZXNzZW5nZXInO1xyXG5pbXBvcnQgQWJzdHJhY3RIb3N0RmVhdHVyZSBmcm9tICcuL0Fic3RyYWN0SG9zdEZlYXR1cmUnO1xyXG5pbXBvcnQgVXRpbHMgZnJvbSAnLi9VdGlscyc7XHJcblxyXG4vKipcclxuICogT2JqZWN0IHRoYXQgbWFuYWdlcyBhY2Nlc3MgdG8gYWxsIEhvc3QgZmVhdHVyZXMuIENvbnRhaW5zIGEgcmVmZXJlbmNlIHRvXHJcbiAqIGVuZ2luZS1zcGVjaWZpYyB2aXN1YWxzIGlmIGFwcGxpY2FibGUuXHJcbiAqXHJcbiAqIEBleHRlbmRzIGNvcmUvTWVzc2VuZ2VyXHJcbiAqIEBhbGlhcyBjb3JlL0hvc3RPYmplY3RcclxuICpcclxuICogQHByb3BlcnR5IHtPYmplY3R9IEVWRU5UUyAtIEJ1aWx0LWluIG1lc3NhZ2VzIHRoYXQgdGhlIE1lc3NlbmdlciBlbWl0cy5cclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtFVkVOVFMudXBkYXRlPSdvblVwZGF0ZSddIC0gTWVzc2FnZSB0aGF0IGlzIGVtaXR0ZWQgYWZ0ZXJcclxuICogZWFjaCBjYWxsIHRvIFt1cGRhdGVde0BsaW5rIGNvcmUvSG9zdE9iamVjdCN1cGRhdGV9LlxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW0VWRU5UUy5hZGRGZWF0dXJlPSdvbkFkZEZlYXR1cmUnXSAtIE1lc3NhZ2UgdGhhdCBpcyBlbWl0dGVkXHJcbiAqIGFmdGVyIGVhY2ggY2FsbCB0byBbYWRkRmVhdHVyZV17QGxpbmsgY29yZS9Ib3N0T2JqZWN0I2FkZEZlYXR1cmV9LlxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW0VWRU5UUy5yZW1vdmVGZWF0dXJlPSdvblJlbW92ZUZlYXR1cmUnXSAtIE1lc3NhZ2UgdGhhdCBpcyBlbWl0dGVkXHJcbiAqIGFmdGVyIGVhY2ggY2FsbCB0byBbcmVtb3ZlRmVhdHVyZV17QGxpbmsgY29yZS9Ib3N0T2JqZWN0I3JlbW92ZUZlYXR1cmV9LlxyXG4gKi9cclxuY2xhc3MgSG9zdE9iamVjdCBleHRlbmRzIE1lc3NlbmdlciB7XHJcbiAgLyoqXHJcbiAgICogQGNvbnN0cnVjdG9yXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge09iamVjdD19IG9wdGlvbnMgLSBPcHRpb25zIGZvciB0aGUgaG9zdC5cclxuICAgKiBAcGFyYW0ge09iamVjdD19IG9wdGlvbnMub3duZXIgLSBPcHRpb25hbCBlbmdpbmUtc3BlY2lmaWMgb3duZXIgb2YgdGhlIGhvc3QuXHJcbiAgICovXHJcbiAgY29uc3RydWN0b3Ioe293bmVyID0ge319ID0ge30pIHtcclxuICAgIC8vIElmIGFuIG93bmVyIGlzIHNwZWNpZmllZCwgdXNlIGl0cyBpZCBmb3IgbWVzc2FnaW5nXHJcbiAgICBzdXBlcihvd25lci5pZCk7XHJcblxyXG4gICAgdGhpcy5fb3duZXIgPSBvd25lcjtcclxuICAgIHRoaXMuX2ZlYXR1cmVzID0ge307XHJcbiAgICB0aGlzLl93YWl0cyA9IFtdO1xyXG4gICAgdGhpcy5fbGFzdFVwZGF0ZSA9IHRoaXMubm93O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgZW5naW5lIG93bmVyIG9iamVjdCBvZiB0aGUgaG9zdC5cclxuICAgKlxyXG4gICAqIEByZWFkb25seVxyXG4gICAqIEB0eXBlIHtPYmplY3R9XHJcbiAgICovXHJcbiAgZ2V0IG93bmVyKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX293bmVyO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgY3VycmVudCB0aW1lIGluIG1pbGxpc2Vjb25kcy5cclxuICAgKlxyXG4gICAqIEByZWFkb25seVxyXG4gICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICovXHJcbiAgZ2V0IG5vdygpIHtcclxuICAgIHJldHVybiBEYXRlLm5vdygpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgYW1vdW50IG9mIHRpbWUgaW4gbWlsbGlzZWNvbmRzIHNpbmNlIHVwZGF0ZSB3YXMgbGFzdCBjYWxsZWQuXHJcbiAgICpcclxuICAgKiBAcmVhZG9ubHlcclxuICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAqL1xyXG4gIGdldCBkZWx0YVRpbWUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5ub3cgLSB0aGlzLl9sYXN0VXBkYXRlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIGluIHRoZSBlbmdpbmUncyByZW5kZXIgbG9vcC4gRXhlY3V0ZXMgdXBkYXRlXHJcbiAgICogbG9vcHMgZm9yIGFsbCBmZWF0dXJlcy5cclxuICAgKi9cclxuICB1cGRhdGUoKSB7XHJcbiAgICBjb25zdCBjdXJyZW50VGltZSA9IHRoaXMubm93O1xyXG4gICAgY29uc3QgZHQgPSB0aGlzLmRlbHRhVGltZTtcclxuXHJcbiAgICAvLyBQcm9ncmVzcyBzdG9yZWQgd2FpdHNcclxuICAgIHRoaXMuX3dhaXRzLmZvckVhY2god2FpdCA9PiB7XHJcbiAgICAgIHdhaXQuZXhlY3V0ZShkdCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBVcGRhdGUgYWxsIGZlYXR1cmVzXHJcbiAgICBPYmplY3QudmFsdWVzKHRoaXMuX2ZlYXR1cmVzKS5mb3JFYWNoKGZlYXR1cmUgPT4ge1xyXG4gICAgICBmZWF0dXJlLnVwZGF0ZShkdCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBOb3RpZnkgbGlzdGVuZXJzIGFuIHVwZGF0ZSBvY2N1cmVkXHJcbiAgICB0aGlzLmVtaXQodGhpcy5jb25zdHJ1Y3Rvci5FVkVOVFMudXBkYXRlLCBkdCk7XHJcblxyXG4gICAgdGhpcy5fbGFzdFVwZGF0ZSA9IGN1cnJlbnRUaW1lO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIGEgZGVmZXJyZWQgcHJvbWlzZSB0aGF0IHdpbGwgd2FpdCBhIGdpdmVuIG51bWJlciBvZiBzZWNvbmRzIGJlZm9yZVxyXG4gICAqIHJlc29sdmluZy4gVGhlIGhvc3Qgd2lsbCBjb250aW51b3VzbHkgdXBkYXRlIHRoZSB3YWl0IHByb21pc2UgZHVyaW5nIHRoZVxyXG4gICAqIHVwZGF0ZSBsb29wIHVudGlsIGl0IHJlc29sdmVzLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtzZWNvbmRzPTBdIC0gTnVtYmVyIG9mIHNlY29uZHMgdG8gd2FpdCBiZWZvcmUgcmVzb2x2aW5nLlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0PX0gb3B0aW9ucyAtIE9wdGlvbmFsIG9wdGlvbnMgb2JqZWN0XHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdGlvbnMub25GaW5pc2hdIC0gQ2FsbGJhY2sgdG8gZXhlY3V0ZSBvbmNlIHRoZSB3YWl0IHRpbWVcclxuICAgKiBpcyBtZXQuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9wdGlvbnMub25Qcm9ncmVzcyAtIENhbGxiYWNrIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSB3YWl0XHJcbiAgICogdGltZSBwcm9ncmVzc2VzIHRvd2FyZHMgdGhlIHRhcmdldCBudW1iZXIgb2Ygc2Vjb25kcy4gVGhlIGFtb3VudCBvZiBwcm9ncmVzc1xyXG4gICAqIGFzIGEgMC0xIHBlcmNlbnRhZ2UgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50LlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvcHRpb25zLm9uQ2FuY2VsIC0gQ2FsbGJhY2sgdG8gZXhlY3V0ZSBpZiB0aGUgdXNlciBjYW5jZWxzXHJcbiAgICogdGhlIHdhaXQgYmVmb3JlIGNvbXBsZXRpb24uXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9wdGlvbnMub25FcnJvciAtIENhbGxiYWNrIHRvIGV4ZWN1dGUgaWYgdGhlIHdhaXQgc3RvcHNcclxuICAgKiBiZWNhdXNlIGFuIGVycm9yIGlzIGVuY291bnRlcmVkLiBUaGUgZXJyb3IgbWVzc2FnZSBpcyBwYXNzZWQgYXMgYSBwYXJhbWV0ZXIuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7RGVmZXJyZWR9XHJcbiAgICovXHJcbiAgd2FpdChzZWNvbmRzLCB7b25GaW5pc2gsIG9uUHJvZ3Jlc3MsIG9uQ2FuY2VsLCBvbkVycm9yfSA9IHt9KSB7XHJcbiAgICBjb25zdCB3YWl0ID0gVXRpbHMud2FpdChzZWNvbmRzLCB7b25GaW5pc2gsIG9uUHJvZ3Jlc3MsIG9uQ2FuY2VsLCBvbkVycm9yfSk7XHJcbiAgICB0aGlzLl93YWl0cy5wdXNoKHdhaXQpO1xyXG5cclxuICAgIC8vIE9uY2UgdGhlIHdhaXQgcHJvbWlzZSBpcyBubyBsb25nZXIgcGVuZGluZyByZW1vdmUgaXQgZnJvbSB0aGUgd2FpdHMgYXJyYXlcclxuICAgIGNvbnN0IG9uQ29tcGxldGUgPSAoKSA9PiB7XHJcbiAgICAgIHRoaXMuX3dhaXRzLnNwbGljZSh0aGlzLl93YWl0cy5pbmRleE9mKHdhaXQpLCAxKTtcclxuICAgIH07XHJcbiAgICB3YWl0LnRoZW4ob25Db21wbGV0ZSwgb25Db21wbGV0ZSk7XHJcblxyXG4gICAgcmV0dXJuIHdhaXQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJbnN0YW50aWF0ZSBhIG5ldyBIb3N0IGZlYXR1cmUgYW5kIHN0b3JlIGl0LiBGZWF0dXJlcyBtdXN0IGluaGVyaXQgZnJvbVxyXG4gICAqIEFic3RyYWN0SG9zdEZlYXR1cmUuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge0NsYXNzfSBGZWF0dXJlQ2xhc3MgLSBDbGFzcyB0aGF0IHdpbGwgaW5zdGFudGlhdGUgdGhlIGZlYXR1cmUuIE11c3RcclxuICAgKiBleHRlbmQge0BsaW5rIEFic3RyYWN0SG9zdEZlYXR1cmV9LlxyXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2ZvcmNlPWZhbHNlXSAtIFdoZXRoZXIgb3Igbm90IHRvIG92ZXJ3cml0ZSBhbiBleGlzdGluZ1xyXG4gICAqIGZlYXR1cmUgaWYgb25lIG9mIHRoaXMgdHlwZSBhbHJlYWR5IGV4aXN0cyBvbiB0aGUgb2JqZWN0LlxyXG4gICAqIEBwYXJhbSAgey4uLmFueX0gYXJncyAtIEFkZGl0aW9uYWwgYXJndW1lbnRzIHRvIHBhc3MgdG8gdGhlIEZlYXR1cmVDbGFzc1xyXG4gICAqIGNvbnN0cnVjdG9yLiBUaGUgSG9zdE9iamVjdCB3aWxsIGFsd2F5cyBiZSBwYXNzZWQgYXMgdGhlIGZpcnN0IGFyZ3VtZW50LlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge2Jvb2xlYW59IC0gV2hldGhlciBvciBub3QgYSBmZWF0dXJlIHdhcyBzdWNjZXNzZnVsbHkgYWRkZWQuXHJcbiAgICovXHJcbiAgYWRkRmVhdHVyZShGZWF0dXJlQ2xhc3MsIGZvcmNlID0gZmFsc2UsIC4uLmFyZ3MpIHtcclxuICAgIGNvbnN0IGlucHV0VHlwZSA9IHR5cGVvZiBGZWF0dXJlQ2xhc3M7XHJcblxyXG4gICAgLy8gTWFrZSBzdXJlIHRoZSBGZWF0dXJlQ2xhc3MgY2FuIGJlIGV4ZWN1dGVkXHJcbiAgICBpZiAoaW5wdXRUeXBlICE9PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgQ2Fubm90IGFkZCBmZWF0dXJlIHRvIGhvc3QgJHt0aGlzLmlkfS4gRmVhdHVyZUNsYXNzIG11c3QgYmUgYSBjbGFzcy5gXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICAvLyBNYWtlIHN1cmUgdGhlIGZlYXR1cmUgaXMgYSBob3N0IGZlYXR1cmVcclxuICAgIGVsc2UgaWYgKCEoRmVhdHVyZUNsYXNzLnByb3RvdHlwZSBpbnN0YW5jZW9mIEFic3RyYWN0SG9zdEZlYXR1cmUpKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgQ2Fubm90IGFkZCBmZWF0dXJlICR7RmVhdHVyZUNsYXNzLm5hbWV9IHRvIGhvc3QgJHt0aGlzLmlkfS4gRmVhdHVyZUNsYXNzIG11c3QgZXh0ZW5kIEFic3RyYWN0SG9zdEZlYXR1cmUuYFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIENoZWNrIGlmIHRoZSBGZWF0dXJlQ2xhc3MgYWxyZWFkeSBleGlzdHMgb24gdGhpcyBvYmplY3RcclxuICAgIGlmICh0aGlzLl9mZWF0dXJlc1tGZWF0dXJlQ2xhc3MubmFtZV0gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBpZiAoZm9yY2UpIHtcclxuICAgICAgICBjb25zb2xlLndhcm4oXHJcbiAgICAgICAgICBgRmVhdHVyZSAke0ZlYXR1cmVDbGFzcy5uYW1lfSBhbHJlYWR5IGV4aXN0cyBvbiBob3N0ICR7dGhpcy5pZH0uIEV4aXN0aW5nIGZlYXR1cmUgd2lsbCBiZSBvdmVyd3JpdHRlbi5gXHJcbiAgICAgICAgKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgICBgRmVhdHVyZSAke0ZlYXR1cmVDbGFzcy5uYW1lfSBhbHJlYWR5IGV4aXN0cyBvbiBob3N0ICR7dGhpcy5pZH0uIFVzZSAnZm9yY2UnIGFyZ3VtZW50IHRvIG92ZXJ3cml0ZSB0aGUgZmVhdHVyZS5gXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIEluaXRpYWxpemUgdGhlIGZlYXR1cmVcclxuICAgIGNvbnN0IGZlYXR1cmUgPSBuZXcgRmVhdHVyZUNsYXNzKHRoaXMsIC4uLmFyZ3MpO1xyXG4gICAgZmVhdHVyZS5pbnN0YWxsQXBpKCk7XHJcblxyXG4gICAgdGhpcy5fZmVhdHVyZXNbRmVhdHVyZUNsYXNzLm5hbWVdID0gZmVhdHVyZTtcclxuICAgIHRoaXMuZW1pdCh0aGlzLmNvbnN0cnVjdG9yLkVWRU5UUy5hZGRGZWF0dXJlLCBGZWF0dXJlQ2xhc3MubmFtZSk7XHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZW1vdmUgYSBmZWF0dXJlIGZyb20gdGhlIG9iamVjdC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlTmFtZSAtIE5hbWUgb2YgdGhlIHR5cGUgb2YgZmVhdHVyZSB0byByZW1vdmUuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSBXaGV0aGVyIG9yIG5vdCBhIGZlYXR1cmUgd2FzIHN1Y2Nlc3NmdWxseSByZW1vdmVkLlxyXG4gICAqL1xyXG4gIHJlbW92ZUZlYXR1cmUodHlwZU5hbWUpIHtcclxuICAgIGlmICh0aGlzLl9mZWF0dXJlc1t0eXBlTmFtZV0gPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBjb25zb2xlLndhcm4oXHJcbiAgICAgICAgYEZlYXR1cmUgb2YgdHlwZSAke3R5cGVOYW1lfSBkb2VzIG5vdCBleGlzdCBvbiBob3N0ICR7dGhpcy5pZH0uIE5vIGZlYXR1cmUgd2lsbCBiZSByZW1vdmVkLmBcclxuICAgICAgKTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gUmVtb3ZlIHRoZSBmZWF0dXJlXHJcbiAgICAgIHRoaXMuZW1pdCh0aGlzLmNvbnN0cnVjdG9yLkVWRU5UUy5yZW1vdmVGZWF0dXJlLCB0eXBlTmFtZSk7XHJcbiAgICAgIHRoaXMuX2ZlYXR1cmVzW3R5cGVOYW1lXS5kaXNjYXJkKCk7XHJcbiAgICAgIGRlbGV0ZSB0aGlzLl9mZWF0dXJlc1t0eXBlTmFtZV07XHJcblxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEluZGljYXRlIHdoZXRoZXIgYSBzcGVjaWZpZWQgZmVhdHVyZSBpcyBpbnN0YWxsZWQgb24gdGhlIGhvc3QuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdHlwZU5hbWUgLSBOYW1lIG9mIHRoZSB0eXBlIG9mIGZlYXR1cmUgdG8gbG9vayBmb3IuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuICAgKi9cclxuICBoYXNGZWF0dXJlKHR5cGVOYW1lKSB7XHJcbiAgICByZXR1cm4gISF0aGlzLl9mZWF0dXJlc1t0eXBlTmFtZV07XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBMaXN0IHRoZSBuYW1lcyBvZiB0aGUgZmVhdHVyZXMgaW5zdGFsbGVkIG9uIHRoZSBob3N0LlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0FycmF5LjxzdHJpbmc+fVxyXG4gICAqL1xyXG4gIGxpc3RGZWF0dXJlcygpIHtcclxuICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLl9mZWF0dXJlcyk7XHJcbiAgfVxyXG59XHJcblxyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSG9zdE9iamVjdCwgJ0VWRU5UUycsIHtcclxuICB2YWx1ZToge1xyXG4gICAgLi4uT2JqZWN0LmdldFByb3RvdHlwZU9mKEhvc3RPYmplY3QpLkVWRU5UUyxcclxuICAgIHVwZGF0ZTogJ29uVXBkYXRlJyxcclxuICAgIGFkZEZlYXR1cmU6ICdvbkFkZEZlYXR1cmUnLFxyXG4gICAgcmVtb3ZlRmVhdHVyZTogJ29uUmVtb3ZlRmVhdHVyZScsXHJcbiAgfSxcclxuICB3cml0YWJsZTogZmFsc2UsXHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgSG9zdE9iamVjdDtcclxuIiwiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXHJcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxyXG5pbXBvcnQgQ29yZUhvc3RPYmplY3QgZnJvbSAnY29yZS9Ib3N0T2JqZWN0JztcclxuXHJcbi8qKlxyXG4gKiBAZXh0ZW5kcyBjb3JlL0hvc3RPYmplY3RcclxuICogQGFsaWFzIEJhYnlsb24uanMvSG9zdE9iamVjdFxyXG4gKi9cclxuY2xhc3MgSG9zdE9iamVjdCBleHRlbmRzIENvcmVIb3N0T2JqZWN0IHtcclxuICAvKipcclxuICAgKiBAY29uc3RydWN0b3JcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0PX0gb3B0aW9ucyAtIE9wdGlvbnMgZm9yIHRoZSBob3N0LlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0PX0gb3B0aW9ucy5vd25lciAtIE9wdGlvbmFsIGVuZ2luZS1zcGVjaWZpYyBvd25lciBvZiB0aGUgaG9zdC5cclxuICAgKi9cclxuICBjb25zdHJ1Y3RvcihvcHRpb25zID0ge30pIHtcclxuICAgIHN1cGVyKG9wdGlvbnMpO1xyXG5cclxuICAgIGlmICh0aGlzLl9vd25lcikge1xyXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ2RlbHRhVGltZScsIHtcclxuICAgICAgICBnZXQ6ICgpID0+IHtcclxuICAgICAgICAgIHJldHVybiB0aGlzLl9vd25lci5nZXRFbmdpbmUoKS5nZXREZWx0YVRpbWUoKTtcclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBub3coKSB7XHJcbiAgICByZXR1cm4gQkFCWUxPTi5QcmVjaXNpb25EYXRlLk5vdztcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IEhvc3RPYmplY3Q7XHJcbiIsIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxyXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTBcclxuXHJcbi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXHJcbi8qIGVzbGludC1kaXNhYmxlIG1heC1jbGFzc2VzLXBlci1maWxlICovXHJcbmltcG9ydCBIb3N0T2JqZWN0IGZyb20gJ2FwcC9Ib3N0T2JqZWN0JztcclxuXHJcbi8qKlxyXG4gKiBDbGFzcyBmYWN0b3J5IGludGVyZmFjZSBmb3IgZmVhdHVyZXMgdGhhdCBhcmUgZGVwZW5kZW50IG9uIG90aGVyIGZlYXR1cmVzIGJlaW5nXHJcbiAqIHByZXNlbnQgb24gdGhlIGhvc3QuIEV2ZW50IGRlcGVuZGVuY2llcyB3aWxsIGJlIGxpc3RlbmVkIGZvciB3aGVuIGEgZmVhdHVyZSBvZlxyXG4gKiBtYXRjaGluZyB0eXBlIGlzIGFkZGVkIHRvIHRoZSBob3N0IGFuZCB3aWxsIHN0b3AgYmVpbmcgbGlzdGVuZWQgZm9yIHdoZW4gb25lXHJcbiAqIGlzIHJlbW92ZWQuIElmIHRoZSBmZWF0dXJlIGlzIGFscmVhZHkgcHJlc2VudCB3aGVuIGNvbnN0cnVjdGVkLCBldmVudHMgd2lsbFxyXG4gKiBiZSBsaXN0ZW5lZCBmb3IgcmlnaHQgYXdheS5cclxuICpcclxuICogQGludGVyZmFjZVxyXG4gKlxyXG4gKiBAcHJvcGVydHkge09iamVjdH0gRVZFTlRfREVQRU5ERU5DSUVTIC0gRXZlbnRzIHRoYXQgdGhlIGZlYXR1cmUgc2hvdWxkIHN0YXJ0L3N0b3BcclxuICogbGlzdGVuaW5nIGZvciB3aGVuIGEgZmVhdHVyZSBvZiB0eXBlIEZlYXR1cmVOYW1lIGlzIGFkZGVkL3JlbW92ZWQgZnJvbSB0aGUgaG9zdC5cclxuICogRXZlbnQgZGVwZW5kZW5jaWVzIHNob3VsZCBmb2xsb3cgdGhlIHNpZ25hdHVyZTpcclxuICogIHsgRmVhdHVyZU5hbWU6IHsgZXZlbnROYW1lOiBjYWxsYmFja05hbWUsIC4uLiB9LCAuLi4gfVxyXG4gKi9cclxuY2xhc3MgRmVhdHVyZURlcGVuZGVudEludGVyZmFjZSB7XHJcbiAgLyoqXHJcbiAgICogU3RhcnQgbGlzdGVuaW5nIGZvciBldmVudCBkZXBlbmRlbmNpZXMgdGhhdCBtYXRjaCB0aGUgZ2l2ZW4gZmVhdHVyZSB0eXBlLlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlTmFtZSAtIHR5cGUgb2YgZmVhdHVyZSB0byBsaXN0ZW4gZm9yLlxyXG4gICAqL1xyXG4gIF9vbkZlYXR1cmVBZGRlZCh0eXBlTmFtZSkge31cclxuXHJcbiAgLyoqXHJcbiAgICogU3RvcCBsaXN0ZW5pbmcgZm9yIGV2ZW50IGRlcGVuZGVuY2llcyB0aGF0IG1hdGNoIHRoZSBnaXZlbiBmZWF0dXJlIHR5cGUuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHR5cGVOYW1lIC0gdHlwZSBvZiBmZWF0dXJlIHRvIHN0b3AgbGlzdGVuaW5nIGZvci5cclxuICAgKi9cclxuICBfb25GZWF0dXJlUmVtb3ZlZCh0eXBlTmFtZSkge31cclxuXHJcbiAgLyoqXHJcbiAgICogQGF1Z21lbnRzIHtAbGluayBBYnN0cmFjdEhvc3RGZWF0dXJlI2Rpc2NhcmR9XHJcbiAgICovXHJcbiAgZGlzY2FyZCgpIHt9XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZXMgYSBjbGFzcyB0aGF0IGltcGxlbWVudHMge0BsaW5rIEZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2V9IGFuZCBleHRlbmRzXHJcbiAgICogYSBzcGVjaWZpZWQgYmFzZSBjbGFzcy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7Q2xhc3N9IEJhc2VDbGFzcyAtIFRoZSBjbGFzcyB0byBleHRlbmQuXHJcbiAgICpcclxuICAgKiBAcmV0dXJuIHtDbGFzc30gQSBjbGFzcyB0aGF0IGV4dGVuZHMgYEJhc2VDbGFzc2AgYW5kIGltcGxlbWVudHMge0BsaW5rIEZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2V9LlxyXG4gICAqL1xyXG4gIHN0YXRpYyBNaXhpbihCYXNlQ2xhc3MpIHtcclxuICAgIGNvbnN0IEZlYXR1cmVEZXBlbmRlbnRNaXhpbiA9IGNsYXNzIGV4dGVuZHMgQmFzZUNsYXNzIHtcclxuICAgICAgY29uc3RydWN0b3IoaG9zdCkge1xyXG4gICAgICAgIHN1cGVyKGhvc3QpO1xyXG4gICAgICAgIHRoaXMuX2hvc3QgPSBob3N0O1xyXG5cclxuICAgICAgICAvLyBObyBuZWVkIHRvIGxpc3RlbiBmb3IgZXZlbnRzIGlmIHRoZSBtaXhpbiBpcyBpbiB0aGUgcHJvdG90eXBlIGNoYWluIG11bHRpcGxlIHRpbWVzXHJcbiAgICAgICAgaWYgKCF0aGlzLl9pbml0aWFsaXplZCkge1xyXG4gICAgICAgICAgdGhpcy5faW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICAgIC8vIFN0YXJ0IGxpc3RlbmluZyBmb3IgZmVhdHVyZSBldmVudHNcclxuICAgICAgICAgIHRoaXMuX29uRmVhdHVyZUFkZGVkID0gdGhpcy5fb25GZWF0dXJlQWRkZWQuYmluZCh0aGlzKTtcclxuICAgICAgICAgIHRoaXMuX29uRmVhdHVyZVJlbW92ZWQgPSB0aGlzLl9vbkZlYXR1cmVSZW1vdmVkLmJpbmQodGhpcyk7XHJcblxyXG4gICAgICAgICAgdGhpcy5faG9zdC5saXN0ZW5UbyhcclxuICAgICAgICAgICAgSG9zdE9iamVjdC5FVkVOVFMuYWRkRmVhdHVyZSxcclxuICAgICAgICAgICAgdGhpcy5fb25GZWF0dXJlQWRkZWRcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICB0aGlzLl9ob3N0Lmxpc3RlblRvKFxyXG4gICAgICAgICAgICBIb3N0T2JqZWN0LkVWRU5UUy5yZW1vdmVGZWF0dXJlLFxyXG4gICAgICAgICAgICB0aGlzLl9vbkZlYXR1cmVSZW1vdmVkXHJcbiAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgIC8vIFJlZ2lzdGVyIGZlYXR1cmVzIHRoYXQgYWxyZWFkeSBleGlzdFxyXG4gICAgICAgICAgT2JqZWN0LmtleXModGhpcy5jb25zdHJ1Y3Rvci5FVkVOVF9ERVBFTkRFTkNJRVMpLmZvckVhY2godHlwZU5hbWUgPT4ge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5faG9zdFt0eXBlTmFtZV0gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgIHRoaXMuX29uRmVhdHVyZUFkZGVkKHR5cGVOYW1lKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBfb25GZWF0dXJlQWRkZWQodHlwZU5hbWUpIHtcclxuICAgICAgICBpZiAodGhpcy5jb25zdHJ1Y3Rvci5FVkVOVF9ERVBFTkRFTkNJRVNbdHlwZU5hbWVdICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgIGNvbnN0IGV2ZW50cyA9IHRoaXMuY29uc3RydWN0b3IuRVZFTlRfREVQRU5ERU5DSUVTW3R5cGVOYW1lXTtcclxuXHJcbiAgICAgICAgICBPYmplY3QuZW50cmllcyhldmVudHMpLmZvckVhY2goKFtldmVudE5hbWUsIGNhbGxiYWNrXSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzW2NhbGxiYWNrXSA9IHRoaXNbY2FsbGJhY2tdLmJpbmQodGhpcyk7XHJcbiAgICAgICAgICAgIHRoaXMuX2hvc3QubGlzdGVuVG8oXHJcbiAgICAgICAgICAgICAgdGhpcy5faG9zdFt0eXBlTmFtZV0uRVZFTlRTW2V2ZW50TmFtZV0sXHJcbiAgICAgICAgICAgICAgdGhpc1tjYWxsYmFja11cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgX29uRmVhdHVyZVJlbW92ZWQodHlwZU5hbWUpIHtcclxuICAgICAgICBpZiAodGhpcy5jb25zdHJ1Y3Rvci5FVkVOVF9ERVBFTkRFTkNJRVNbdHlwZU5hbWVdICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgIGNvbnN0IGV2ZW50cyA9IHRoaXMuY29uc3RydWN0b3IuRVZFTlRfREVQRU5ERU5DSUVTW3R5cGVOYW1lXTtcclxuXHJcbiAgICAgICAgICBPYmplY3QuZW50cmllcyhldmVudHMpLmZvckVhY2goKFtldmVudE5hbWUsIGNhbGxiYWNrXSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLl9ob3N0LnN0b3BMaXN0ZW5pbmcoXHJcbiAgICAgICAgICAgICAgdGhpcy5faG9zdFt0eXBlTmFtZV0uRVZFTlRTW2V2ZW50TmFtZV0sXHJcbiAgICAgICAgICAgICAgdGhpc1tjYWxsYmFja11cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgZGlzY2FyZCgpIHtcclxuICAgICAgICAvLyBTdG9wIGxpc3RlbmluZyBmb3IgZmVhdHVyZSBldmVudHNcclxuICAgICAgICB0aGlzLl9ob3N0LnN0b3BMaXN0ZW5pbmcoXHJcbiAgICAgICAgICBIb3N0T2JqZWN0LkVWRU5UUy5hZGRGZWF0dXJlLFxyXG4gICAgICAgICAgdGhpcy5fb25GZWF0dXJlQWRkZWRcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuX2hvc3Quc3RvcExpc3RlbmluZyhcclxuICAgICAgICAgIEhvc3RPYmplY3QuRVZFTlRTLnJlbW92ZUZlYXR1cmUsXHJcbiAgICAgICAgICB0aGlzLl9vbkZlYXR1cmVSZW1vdmVkXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgLy8gU3RvcCBsaXN0ZW5pbmcgdG8gZmVhdHVyZS1zcGVjaWZpYyBldmVudHNcclxuICAgICAgICBPYmplY3Qua2V5cyh0aGlzLmNvbnN0cnVjdG9yLkVWRU5UX0RFUEVOREVOQ0lFUykuZm9yRWFjaCh0eXBlTmFtZSA9PiB7XHJcbiAgICAgICAgICBpZiAodGhpcy5faG9zdFt0eXBlTmFtZV0gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB0aGlzLl9vbkZlYXR1cmVSZW1vdmVkKHR5cGVOYW1lKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgc3VwZXIuZGlzY2FyZCgpO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IEVWRU5UX0RFUEVOREVOQ0lFUyA9IEJhc2VDbGFzcy5FVkVOVF9ERVBFTkRFTkNJRVMgfHwge307XHJcblxyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRmVhdHVyZURlcGVuZGVudE1peGluLCB7XHJcbiAgICAgIEVWRU5UX0RFUEVOREVOQ0lFUzoge1xyXG4gICAgICAgIHZhbHVlOiB7XHJcbiAgICAgICAgICAuLi5FVkVOVF9ERVBFTkRFTkNJRVMsXHJcbiAgICAgICAgfSxcclxuICAgICAgICB3cml0YWJsZTogZmFsc2UsXHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gRmVhdHVyZURlcGVuZGVudE1peGluO1xyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIEV2ZW50IGRlcGVuZGVuY2llcyBzaG91bGQgZm9sbG93IHRoZSBzaWduYXR1cmU6XHJcbiAqIHtcclxuICogIEZlYXR1cmVOYW1lOiB7XHJcbiAqICAgIC8vIEV2ZW50cyB0aGF0IHRoZSBmZWF0dXJlIHNob3VsZCBzdGFydC9zdG9wIGxpc3RlbmluZyBmb3Igd2hlbiBhIGZlYXR1cmVcclxuICogICAgLy8gb2YgdHlwZSBGZWF0dXJlTmFtZSBpcyBhZGRlZC9yZW1vdmVkIGZyb20gdGhlIGhvc3RcclxuICogICAge1xyXG4gKiAgICAgIGV2ZW50TmFtZTogY2FsbGJhY2tOYW1lLFxyXG4gKiAgICAgIC4uLlxyXG4gKiAgICB9LFxyXG4gKiAgfVxyXG4gKiB9XHJcbiAqL1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhGZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlLCB7XHJcbiAgRVZFTlRfREVQRU5ERU5DSUVTOiB7XHJcbiAgICB2YWx1ZToge30sXHJcbiAgICB3cml0YWJsZTogZmFsc2UsXHJcbiAgfSxcclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBGZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlO1xyXG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cclxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVC0wXHJcblxyXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xyXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtY2xhc3Nlcy1wZXItZmlsZSAqL1xyXG5pbXBvcnQgRmVhdHVyZURlcGVuZGVudEludGVyZmFjZSBmcm9tICdjb3JlL0ZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2UnO1xyXG5cclxuLyoqXHJcbiAqIENsYXNzIGZhY3RvcnkgaW50ZXJmYWNlIGZvciBmZWF0dXJlcyB0aGF0IGFyZSBkZXBlbmRlbnQgb24gdGhlIEFuaW1hdGlvbkZlYXR1cmVcclxuICogYmVpbmcgcHJlc2VudCBvbiB0aGUgaG9zdC4gTGF5ZXIgYW5kIGFuaW1hdGlvbiBldmVudHMgd2lsbCBhdXRvbWF0aWNhbGx5IGJlXHJcbiAqIGxpc3RlbmVkIGZvciBvbmNlIGEgQW5pbWF0aW9uRmVhdHVyZSBpcyBhZGRlZCB0byB0aGUgaG9zdCBhbmQgc3RvcHBlZCBvbmNlIGl0XHJcbiAqIGlzIHJlbW92ZWQuXHJcbiAqXHJcbiAqIEBpbnRlcmZhY2VcclxuICogQGV4dGVuZHMgRmVhdHVyZURlcGVuZGVudEludGVyZmFjZVxyXG4gKlxyXG4gKiBAcHJvcGVydHkge09iamVjdH0gRVZFTlRfREVQRU5ERU5DSUVTIC0gRXZlbnRzIHRoYXQgdGhlIGZlYXR1cmUgc2hvdWxkIHN0YXJ0L3N0b3BcclxuICogbGlzdGVuaW5nIGZvciB3aGVuIGEgZmVhdHVyZSBvZiB0eXBlIEZlYXR1cmVOYW1lIGlzIGFkZGVkL3JlbW92ZWQgZnJvbSB0aGUgaG9zdC5cclxuICogQHByb3BlcnR5IHtPYmplY3R9IEVWRU5UX0RFUEVOREVOQ0lFUy5BbmltYXRpb25GZWF0dXJlIC0gRXZlbnRzIHRoYXQgYXJlXHJcbiAqIHNwZWNpZmljIHRvIHRoZSBBbmltYXRpb25GZWF0dXJlLlxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW0VWRU5UX0RFUEVOREVOQ0lFUy5BbmltYXRpb25GZWF0dXJlLmFkZExheWVyPSdfb25MYXllckFkZGVkJ10gLVxyXG4gKiBUaGUgbmFtZSBvZiB0aGUgbWV0aG9kIHRoYXQgd2lsbCBiZSBleGVjdXRlZCB3aGVuIEFuaW1hdGlvbkZlYXR1cmUgYWRkTGF5ZXJcclxuICogZXZlbnRzIGFyZSBlbWl0dGVkLlxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW0VWRU5UX0RFUEVOREVOQ0lFUy5BbmltYXRpb25GZWF0dXJlLnJlbW92ZUxheWVyPSdfb25MYXllclJlbW92ZWQnXSAtXHJcbiAqIFRoZSBuYW1lIG9mIHRoZSBtZXRob2QgdGhhdCB3aWxsIGJlIGV4ZWN1dGVkIHdoZW4gQW5pbWF0aW9uRmVhdHVyZSByZW1vdmVMYXllclxyXG4gKiBldmVudHMgYXJlIGVtaXR0ZWQuXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbRVZFTlRfREVQRU5ERU5DSUVTLkFuaW1hdGlvbkZlYXR1cmUucmVuYW1lTGF5ZXI9J19vbkxheWVyUmVuYW1lZCddIC1cclxuICogVGhlIG5hbWUgb2YgdGhlIG1ldGhvZCB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQgd2hlbiBBbmltYXRpb25GZWF0dXJlIHJlbmFtZUxheWVyXHJcbiAqIGV2ZW50cyBhcmUgZW1pdHRlZC5cclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtFVkVOVF9ERVBFTkRFTkNJRVMuQW5pbWF0aW9uRmVhdHVyZS5hZGRBbmltYXRpb249J19vbkFuaW1hdGlvbkFkZGVkJ10gLVxyXG4gKiBUaGUgbmFtZSBvZiB0aGUgbWV0aG9kIHRoYXQgd2lsbCBiZSBleGVjdXRlZCB3aGVuIEFuaW1hdGlvbkZlYXR1cmUgYWRkQW5pbWF0aW9uXHJcbiAqIGV2ZW50cyBhcmUgZW1pdHRlZC5cclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtFVkVOVF9ERVBFTkRFTkNJRVMuQW5pbWF0aW9uRmVhdHVyZS5yZW1vdmVBbmltYXRpb249J19vbkFuaW1hdGlvblJlbW92ZWQnXSAtXHJcbiAqIFRoZSBuYW1lIG9mIHRoZSBtZXRob2QgdGhhdCB3aWxsIGJlIGV4ZWN1dGVkIHdoZW4gQW5pbWF0aW9uRmVhdHVyZSByZW1vdmVBbmltYXRpb25cclxuICogZXZlbnRzIGFyZSBlbWl0dGVkLlxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW0VWRU5UX0RFUEVOREVOQ0lFUy5BbmltYXRpb25GZWF0dXJlLnJlbmFtZUFuaW1hdGlvbj0nX29uQW5pbWF0aW9uUmVuYW1lZCddIC1cclxuICogVGhlIG5hbWUgb2YgdGhlIG1ldGhvZCB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQgd2hlbiBBbmltYXRpb25GZWF0dXJlIHJlbmFtZUFuaW1hdGlvblxyXG4gKiBldmVudHMgYXJlIGVtaXR0ZWQuXHJcbiAqL1xyXG5jbGFzcyBBbmltYXRpb25GZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlIGV4dGVuZHMgRmVhdHVyZURlcGVuZGVudEludGVyZmFjZSB7XHJcbiAgLyoqXHJcbiAgICogRXhlY3V0ZWQgd2hlbiBhbmltYXRpb24gbGF5ZXIgYWRkZWQgZXZlbnRzIGFyZSBjYXVnaHQuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBOYW1lIG9mIHRoZSBsYXllciB0aGF0IHdhcyBhZGRlZC5cclxuICAgKi9cclxuICBfb25MYXllckFkZGVkKHtuYW1lfSkge31cclxuXHJcbiAgLyoqXHJcbiAgICogRXhlY3V0ZWQgd2hlbiBhbmltYXRpb24gbGF5ZXIgcmVtb3ZlZCBldmVudHMgYXJlIGNhdWdodC5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRoYXQgd2FzIHJlbW92ZWQuXHJcbiAgICovXHJcbiAgX29uTGF5ZXJSZW1vdmVkKHtuYW1lfSkge31cclxuXHJcbiAgLyoqXHJcbiAgICogRXhlY3V0ZWQgd2hlbiBhbmltYXRpb24gbGF5ZXIgcmVuYW1lZCBldmVudHMgYXJlIGNhdWdodC5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gb2xkTmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRoYXQgd2FzIHJlbmFtZWQuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5ld05hbWUgLSBOZXcgbmFtZSBvZiB0aGUgbGF5ZXIuXHJcbiAgICovXHJcbiAgX29uTGF5ZXJSZW5hbWVkKHtvbGROYW1lLCBuZXdOYW1lfSkge31cclxuXHJcbiAgLyoqXHJcbiAgICogRXhlY3V0ZWQgd2hlbiBhbmltYXRpb24gYWRkZWQgZXZlbnRzIGFyZSBjYXVnaHQuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVyTmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRoYXQgYW4gYW5pbWF0aW9uIHdhcyBhZGRlZCB0by5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gYW5pbWF0aW9uTmFtZSAtIE5hbWUgb2YgdGhlIGFuaW1hdGlvbiB0aGF0IHdhcyBhZGRlZC5cclxuICAgKi9cclxuICBfb25BbmltYXRpb25BZGRlZCh7bGF5ZXJOYW1lLCBhbmltYXRpb25OYW1lfSkge31cclxuXHJcbiAgLyoqXHJcbiAgICogRXhlY3V0ZWQgd2hlbiBhbmltYXRpb24gcmVtb3ZlZCBldmVudHMgYXJlIGNhdWdodC5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGF5ZXJOYW1lIC0gTmFtZSBvZiB0aGUgbGF5ZXIgdGhhdCBhbiBhbmltYXRpb24gd2FzIHJlbW92ZWQgZnJvbS5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gYW5pbWF0aW9uTmFtZSAtIE5hbWUgb2YgdGhlIGFuaW1hdGlvbiB0aGF0IHdhcyByZW1vdmVkLlxyXG4gICAqL1xyXG4gIF9vbkFuaW1hdGlvblJlbW92ZWQoe2xheWVyTmFtZSwgYW5pbWF0aW9uTmFtZX0pIHt9XHJcblxyXG4gIC8qKlxyXG4gICAqIEV4ZWN1dGVkIHdoZW4gYW5pbWF0aW9uIHJlbmFtZWQgZXZlbnRzIGFyZSBjYXVnaHQuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVyTmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRoYXQgYW4gYW5pbWF0aW9uIGJlbG9uZ3MgdG8uXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9sZE5hbWUgLSBOYW1lIG9mIHRoZSBhbmltYXRpb24gdGhhdCB3YXMgcmVuYW1lZC5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmV3TmFtZSAtIE5ldyBuYW1lIG9mIHRoZSBhbmltYXRpb24uXHJcbiAgICovXHJcbiAgX29uQW5pbWF0aW9uUmVuYW1lZCh7bGF5ZXJOYW1lLCBvbGROYW1lLCBuZXdOYW1lfSkge31cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlcyBhIGNsYXNzIHRoYXQgaW1wbGVtZW50cyB7QGxpbmsgQW5pbWF0aW9uRmVhdHVyZURlcGVuZGVudEludGVyZmFjZX1cclxuICAgKiBhbmQgZXh0ZW5kcyBhIHNwZWNpZmllZCBiYXNlIGNsYXNzLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtDbGFzc30gQmFzZUNsYXNzIC0gVGhlIGNsYXNzIHRvIGV4dGVuZC5cclxuICAgKlxyXG4gICAqIEByZXR1cm4ge0NsYXNzfSBBIGNsYXNzIHRoYXQgZXh0ZW5kcyBgQmFzZUNsYXNzYCBhbmQgaW1wbGVtZW50cyB7QGxpbmsgQW5pbWF0aW9uRmVhdHVyZURlcGVuZGVudEludGVyZmFjZX0uXHJcbiAgICovXHJcbiAgc3RhdGljIE1peGluKEJhc2VDbGFzcykge1xyXG4gICAgY29uc3QgUGFyZW50Q2xhc3MgPSBGZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlLk1peGluKEJhc2VDbGFzcyk7XHJcbiAgICBjb25zdCBBbmltYXRpb25GZWF0dXJlRGVwZW5kZW50TWl4aW4gPSBjbGFzcyBleHRlbmRzIFBhcmVudENsYXNzIHtcclxuICAgICAgX29uTGF5ZXJBZGRlZCh7bmFtZX0pIHt9XHJcblxyXG4gICAgICBfb25MYXllclJlbW92ZWQoe25hbWV9KSB7fVxyXG5cclxuICAgICAgX29uTGF5ZXJSZW5hbWVkKHtvbGROYW1lLCBuZXdOYW1lfSkge31cclxuXHJcbiAgICAgIF9vbkFuaW1hdGlvbkFkZGVkKHtsYXllck5hbWUsIGFuaW1hdGlvbk5hbWV9KSB7fVxyXG5cclxuICAgICAgX29uQW5pbWF0aW9uUmVtb3ZlZCh7bGF5ZXJOYW1lLCBhbmltYXRpb25OYW1lfSkge31cclxuXHJcbiAgICAgIF9vbkFuaW1hdGlvblJlbmFtZWQoe2xheWVyTmFtZSwgb2xkTmFtZSwgbmV3TmFtZX0pIHt9XHJcbiAgICB9O1xyXG5cclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEFuaW1hdGlvbkZlYXR1cmVEZXBlbmRlbnRNaXhpbiwge1xyXG4gICAgICBFVkVOVF9ERVBFTkRFTkNJRVM6IHtcclxuICAgICAgICB2YWx1ZToge1xyXG4gICAgICAgICAgLi4uUGFyZW50Q2xhc3MuRVZFTlRfREVQRU5ERU5DSUVTLFxyXG4gICAgICAgICAgLi4uQW5pbWF0aW9uRmVhdHVyZURlcGVuZGVudEludGVyZmFjZS5FVkVOVF9ERVBFTkRFTkNJRVMsXHJcbiAgICAgICAgfSxcclxuICAgICAgICB3cml0YWJsZTogZmFsc2UsXHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gQW5pbWF0aW9uRmVhdHVyZURlcGVuZGVudE1peGluO1xyXG4gIH1cclxufVxyXG5cclxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQW5pbWF0aW9uRmVhdHVyZURlcGVuZGVudEludGVyZmFjZSwge1xyXG4gIEVWRU5UX0RFUEVOREVOQ0lFUzoge1xyXG4gICAgdmFsdWU6IHtcclxuICAgICAgQW5pbWF0aW9uRmVhdHVyZToge1xyXG4gICAgICAgIGFkZExheWVyOiAnX29uTGF5ZXJBZGRlZCcsXHJcbiAgICAgICAgcmVtb3ZlTGF5ZXI6ICdfb25MYXllclJlbW92ZWQnLFxyXG4gICAgICAgIHJlbmFtZUxheWVyOiAnX29uTGF5ZXJSZW5hbWVkJyxcclxuICAgICAgICBhZGRBbmltYXRpb246ICdfb25BbmltYXRpb25BZGRlZCcsXHJcbiAgICAgICAgcmVtb3ZlQW5pbWF0aW9uOiAnX29uQW5pbWF0aW9uUmVtb3ZlZCcsXHJcbiAgICAgICAgcmVuYW1lQW5pbWF0aW9uOiAnX29uQW5pbWF0aW9uUmVuYW1lZCcsXHJcbiAgICAgIH0sXHJcbiAgICB9LFxyXG4gICAgd3JpdGFibGU6IGZhbHNlLFxyXG4gIH0sXHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgQW5pbWF0aW9uRmVhdHVyZURlcGVuZGVudEludGVyZmFjZTtcclxuIiwiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXHJcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxyXG5cclxuLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cclxuLyogZXNsaW50LWRpc2FibGUgbWF4LWNsYXNzZXMtcGVyLWZpbGUgKi9cclxuaW1wb3J0IEFuaW1hdGlvbkZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2UgZnJvbSAnY29yZS9hbmltcGFjay9BbmltYXRpb25GZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlJztcclxuXHJcbi8qKlxyXG4gKiBDbGFzcyBmYWN0b3J5IGludGVyZmFjZSBmb3IgdGhhdCBrZWVwcyB0cmFjayBvZiBsYXllcnMgYW5kIGFuaW1hdGlvbnMgb24gYSBob3N0LlxyXG4gKiBUcmFja2VkIGFzc2V0cyBhcmUgbWFya2VkIGFzIGluYWN0aXZlIHVudGlsIGxheWVycyBhbmQgYW5pbWF0aW9ucyB3aXRoIG1hdGNoaW5nXHJcbiAqIG5hbWVzIGFyZSBkZXRlY3RlZCBhcyBwcmVzZW50IG9uIHRoZSBob3N0LlxyXG4gKlxyXG4gKiBAaW50ZXJmYWNlXHJcbiAqIEBleHRlbmRzIEFuaW1hdGlvbkZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2VcclxuICpcclxuICogQHByb3BlcnR5IHtPYmplY3R9IERFRkFVTFRfTEFZRVJfT1BUSU9OUyAtIERlZmF1bHQgb3B0aW9ucyB0byB1c2Ugd2hlbiBleGVjdXRpbmdcclxuICoge0BsaW5rIEFuaW1hdGlvbkxheWVyfSBtZXRob2RzLlxyXG4gKiBAcHJvcGVydHkge251bWJlcn0gW0RFRkFVTFRfTEFZRVJfT1BUSU9OUy5ibGVuZFRpbWU9MC41XSAtIERlZmF1bHQgdGltZSBpbiBzZWNvbmRzXHJcbiAqIHRvIHVzZSB3aGVuIGV4ZWN1dGluZyB7QGxpbmsgQW5pbWF0aW9uTGF5ZXIuc2V0QmxlbmRXZWlnaHR9LlxyXG4gKiBAcHJvcGVydHkge09iamVjdH0gW0RFRkFVTFRfTEFZRVJfT1BUSU9OUy5hbmltYXRpb25zPXt9XSAtIE1hcHMgYW5pbWF0aW9uIG5hbWVzXHJcbiAqIHRvIGRlZmF1bHQgb3B0aW9ucyBvYmplY3RzIHRvIHVzZSBmb3IgbWFuYWdlZCBhbmltYXRpb25zLlxyXG4gKi9cclxuY2xhc3MgTWFuYWdlZEFuaW1hdGlvbkxheWVySW50ZXJmYWNlIGV4dGVuZHMgQW5pbWF0aW9uRmVhdHVyZURlcGVuZGVudEludGVyZmFjZSB7XHJcbiAgLyoqXHJcbiAgICogU3RhcnQgdHJhY2tpbmcga2VlcGluZyB0cmFjayBvZiB3aGV0aGVyIGEgbGF5ZXIgd2l0aCB0aGUgZ2l2ZW4gbmFtZSBpcyBwcmVzZW50XHJcbiAgICogb24gdGhlIGhvc3QuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRvIGtlZXAgdHJhY2sgb2YuXHJcbiAgICogQHBhcmFtIHtPYmplY3Q9fSBvcHRpb25zIC0gT3B0aW9ucyBmb3IgdGhlIGxheWVyLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyPX0gb3B0aW9ucy5ibGVuZFRpbWUgLSBEZWZhdWx0IGFtb3VudCBvZiB0aW1lIHRvIHVzZSB3aGVuXHJcbiAgICogbWFuaXB1bGF0aW5nIGxheWVyIHdlaWdodHMgb24gdGhpcyBsYXllci5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb3B0aW9ucy5lYXNpbmdGbiAtIERlZmF1bHQgZWFzaW5nIGZ1bmN0aW9uIHRvIHVzZSB3aGVuXHJcbiAgICogbWFuaXB1bGF0aW5nIGxheWVyIHdlaWdodHMgb24gdGhpcyBsYXllci5cclxuICAgKiBAcGFyYW0ge09iamVjdD19IG9wdGlvbnMuYW5pbWF0aW9ucyAtIEFuaW1hdGlvbnMgdG8ga2VlcCB0cmFjayBvZiBvbiB0aGUgbGF5ZXIuXHJcbiAgICogQW5pbWF0aW9ucyBhcmUgcmVwcmVzZW50ZWQgYXMga2V5L3ZhbHVlIHBhaXJzIG9mIGFuaW1hdGlvbiBuYW1lcyBhbmQgdGhlaXJcclxuICAgKiBvcHRpb25zLlxyXG4gICAqL1xyXG4gIHJlZ2lzdGVyTGF5ZXIobmFtZSwgb3B0aW9ucyA9IHt9KSB7fVxyXG5cclxuICAvKipcclxuICAgKiBTdGFydCB0cmFja2luZyBrZWVwaW5nIHRyYWNrIG9mIHdoZXRoZXIgYW4gYW5pbWF0aW9uIHdpdGggdGhlIGdpdmVuIG5hbWUgaXNcclxuICAgKiBwcmVzZW50IG9uIHRoZSBob3N0LlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVyTmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRoYXQgd2lsbCBvd24gdGhlIGFuaW1hdGlvbi5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gYW5pbWF0aW9uTmFtZSAtIE5hbWUgb2YgdGhlIGFuaW1hdGlvbiB0byBrZWVwIHRyYWNrIG9mLlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0PX0gb3B0aW9ucyAtIE9wdGlvbnMgZm9yIHRoZSBhbmltYXRpb24uXHJcbiAgICovXHJcbiAgcmVnaXN0ZXJBbmltYXRpb24obGF5ZXJOYW1lLCBhbmltYXRpb25OYW1lLCBvcHRpb25zID0ge30pIHt9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldCBsYXllciB3ZWlnaHRzIG9uIHRyYWNrZWQgbGF5ZXJzLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG5hbWVGaWx0ZXIgLSBQcmVkaWNhdGUgZnVuY3Rpb24gdG8gdGVzdCBlYWNoIHRyYWNrZWQgbGF5ZXJcclxuICAgKiB3aXRoLiBCeSBkZWZhdWx0IGFsbCBsYXllcnMgd2lsbCBwYXNzLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB3ZWlnaHQgLSBXZWlnaHQgdmFsdWUgdG8gc2V0IG9uIGxheWVycy5cclxuICAgKiBAcGFyYW0ge251bWJlcj19IHNlY29uZHMgLSBOdW1iZXIgb2Ygc2Vjb25kcyBpdCB3aWxsIHRha2UgdG8gcmVhY2ggdGhlIHdlaWdodFxyXG4gICAqIG9uIGVhY2ggbGF5ZXIuIElmIHVuZGVmaW5lZCwgZWFjaCBsYXllcnMnIGJsZW5kVGltZSBvcHRpb24gaXMgdXNlZC5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gZWFzaW5nRm4gLSBFYXNpbmcgZnVuY3Rpb24gdG8gdXNlIHdoZW4gc2V0dGluZyB3ZWlnaHRcclxuICAgKiBvbiBlYWNoIGxheWVyLiBJZiB1bmRlZmluZWQsIGVhY2ggbGF5ZXJzJyBlYXNpbmdGbiBvcHRpb24gaXMgdXNlZC5cclxuICAgKi9cclxuICBzZXRMYXllcldlaWdodHMobmFtZUZpbHRlciA9ICgpID0+IHRydWUsIHdlaWdodCwgc2Vjb25kcywgZWFzaW5nRm4pIHt9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldCBhbGwgdHJhY2tlZCBsYXllcnMnIHdlaWdodHMgdG8gMS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyPX0gc2Vjb25kcyAtIE51bWJlciBvZiBzZWNvbmRzIGl0IHdpbGwgdGFrZSB0byByZWFjaCB0aGUgd2VpZ2h0XHJcbiAgICogb24gZWFjaCBsYXllci4gSWYgdW5kZWZpbmVkLCBlYWNoIGxheWVycycgYmxlbmRUaW1lIG9wdGlvbiBpcyB1c2VkLlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBlYXNpbmdGbiAtIEVhc2luZyBmdW5jdGlvbiB0byB1c2Ugd2hlbiBzZXR0aW5nIHdlaWdodFxyXG4gICAqIG9uIGVhY2ggbGF5ZXIuIElmIHVuZGVmaW5lZCwgZWFjaCBsYXllcnMnIGVhc2luZ0ZuIG9wdGlvbiBpcyB1c2VkLlxyXG4gICAqL1xyXG4gIGVuYWJsZShzZWNvbmRzLCBlYXNpbmdGbikge31cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0IGFsbCB0cmFja2VkIGxheWVycycgd2VpZ2h0cyB0byAwLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtudW1iZXI9fSBzZWNvbmRzIC0gTnVtYmVyIG9mIHNlY29uZHMgaXQgd2lsbCB0YWtlIHRvIHJlYWNoIHRoZSB3ZWlnaHRcclxuICAgKiBvbiBlYWNoIGxheWVyLiBJZiB1bmRlZmluZWQsIGVhY2ggbGF5ZXJzJyBibGVuZFRpbWUgb3B0aW9uIGlzIHVzZWQuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IGVhc2luZ0ZuIC0gRWFzaW5nIGZ1bmN0aW9uIHRvIHVzZSB3aGVuIHNldHRpbmcgd2VpZ2h0XHJcbiAgICogb24gZWFjaCBsYXllci4gSWYgdW5kZWZpbmVkLCBlYWNoIGxheWVycycgZWFzaW5nRm4gb3B0aW9uIGlzIHVzZWQuXHJcbiAgICovXHJcbiAgZGlzYWJsZShzZWNvbmRzLCBlYXNpbmdGbikge31cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlcyBhIGNsYXNzIHRoYXQgaW1wbGVtZW50cyB7QGxpbmsgTWFuYWdlZEFuaW1hdGlvbkxheWVySW50ZXJmYWNlfVxyXG4gICAqIGFuZCBleHRlbmRzIGEgc3BlY2lmaWVkIGJhc2UgY2xhc3MuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge0NsYXNzfSBCYXNlQ2xhc3MgLSBUaGUgY2xhc3MgdG8gZXh0ZW5kLlxyXG4gICAqXHJcbiAgICogQHJldHVybiB7Q2xhc3N9IEEgY2xhc3MgdGhhdCBleHRlbmRzIGBCYXNlQ2xhc3NgIGFuZCBpbXBsZW1lbnRzIHtAbGluayBNYW5hZ2VkQW5pbWF0aW9uTGF5ZXJJbnRlcmZhY2V9LlxyXG4gICAqL1xyXG4gIHN0YXRpYyBNaXhpbihCYXNlQ2xhc3MpIHtcclxuICAgIGNvbnN0IFBhcmVudENsYXNzID0gQW5pbWF0aW9uRmVhdHVyZURlcGVuZGVudEludGVyZmFjZS5NaXhpbihCYXNlQ2xhc3MpO1xyXG4gICAgY29uc3QgTWFuYWdlZEFuaW1hdGlvbkxheWVyTWl4aW4gPSBjbGFzcyBleHRlbmRzIFBhcmVudENsYXNzIHtcclxuICAgICAgY29uc3RydWN0b3IoLi4uYXJncykge1xyXG4gICAgICAgIHN1cGVyKC4uLmFyZ3MpO1xyXG5cclxuICAgICAgICB0aGlzLl9tYW5hZ2VkTGF5ZXJzID0ge307XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIF9vbkZlYXR1cmVBZGRlZCh0eXBlTmFtZSkge1xyXG4gICAgICAgIHN1cGVyLl9vbkZlYXR1cmVBZGRlZCh0eXBlTmFtZSk7XHJcblxyXG4gICAgICAgIGlmICh0eXBlTmFtZSAhPT0gJ0FuaW1hdGlvbkZlYXR1cmUnKSB7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9tYW5hZ2VkTGF5ZXJzID0gdGhpcy5fbWFuYWdlZExheWVycyB8fCB7fTtcclxuXHJcbiAgICAgICAgLy8gRGV0ZWN0IG5ldyBsYXllcnNcclxuICAgICAgICB0aGlzLl9ob3N0LkFuaW1hdGlvbkZlYXR1cmUubGF5ZXJzLmZvckVhY2gobmFtZSA9PiB7XHJcbiAgICAgICAgICB0aGlzLl9vbkxheWVyQWRkZWQoe25hbWV9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgX29uRmVhdHVyZVJlbW92ZWQodHlwZU5hbWUpIHtcclxuICAgICAgICBzdXBlci5fb25GZWF0dXJlUmVtb3ZlZCh0eXBlTmFtZSk7XHJcblxyXG4gICAgICAgIGlmICh0eXBlTmFtZSAhPT0gJ0FuaW1hdGlvbkZlYXR1cmUnKSB7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9tYW5hZ2VkTGF5ZXJzID0gdGhpcy5fbWFuYWdlZExheWVycyB8fCB7fTtcclxuXHJcbiAgICAgICAgLy8gRGVhY3RpdmF0ZSB0aGUgbGF5ZXJzXHJcbiAgICAgICAgT2JqZWN0LmtleXModGhpcy5fbWFuYWdlZExheWVycykuZm9yRWFjaChuYW1lID0+IHtcclxuICAgICAgICAgIHRoaXMuX29uTGF5ZXJSZW1vdmVkKHtuYW1lfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIF9vbkxheWVyQWRkZWQoe25hbWV9KSB7XHJcbiAgICAgICAgLy8gTWFyayB0aGUgbGF5ZXIgYXMgYWN0aXZlIGlmIGl0IGlzIG1hbmFnZWRcclxuICAgICAgICBpZiAodGhpcy5fbWFuYWdlZExheWVyc1tuYW1lXSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICB0aGlzLl9tYW5hZ2VkTGF5ZXJzW25hbWVdLmlzQWN0aXZlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAvLyBEZXRlY3QgbmV3IGFuaW1hdGlvbnNcclxuICAgICAgICAgIHRoaXMuX2hvc3QuQW5pbWF0aW9uRmVhdHVyZS5nZXRBbmltYXRpb25zKG5hbWUpLmZvckVhY2goYW5pbU5hbWUgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLl9vbkFuaW1hdGlvbkFkZGVkKHtsYXllck5hbWU6IG5hbWUsIGFuaW1hdGlvbk5hbWU6IGFuaW1OYW1lfSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIF9vbkxheWVyUmVtb3ZlZCh7bmFtZX0pIHtcclxuICAgICAgICAvLyBEZWFjdGl2YXRlIHRoZSBsYXllciBpZiBpdCBpcyBtYW5hZ2VkXHJcbiAgICAgICAgaWYgKHRoaXMuX21hbmFnZWRMYXllcnNbbmFtZV0gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgdGhpcy5fbWFuYWdlZExheWVyc1tuYW1lXS5pc0FjdGl2ZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgIC8vIERlYWN0aXZhdGUgdGhlIGFuaW1hdGlvbnNcclxuICAgICAgICAgIE9iamVjdC5rZXlzKHRoaXMuX21hbmFnZWRMYXllcnNbbmFtZV0uYW5pbWF0aW9ucykuZm9yRWFjaChcclxuICAgICAgICAgICAgYW5pbU5hbWUgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMuX29uQW5pbWF0aW9uUmVtb3ZlZCh7XHJcbiAgICAgICAgICAgICAgICBsYXllck5hbWU6IG5hbWUsXHJcbiAgICAgICAgICAgICAgICBhbmltYXRpb25OYW1lOiBhbmltTmFtZSxcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIF9vbkxheWVyUmVuYW1lZCh7b2xkTmFtZSwgbmV3TmFtZX0pIHtcclxuICAgICAgICBjb25zdCBsYXllck9wdGlvbnMgPSB0aGlzLl9tYW5hZ2VkTGF5ZXJzW29sZE5hbWVdO1xyXG5cclxuICAgICAgICAvLyBSZXBsYWNlIHRoZSBsYXllciBrZXkgd2l0aCB0aGUgbmV3IG5hbWVcclxuICAgICAgICBpZiAobGF5ZXJPcHRpb25zICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgIGRlbGV0ZSB0aGlzLl9tYW5hZ2VkTGF5ZXJzW29sZE5hbWVdO1xyXG4gICAgICAgICAgdGhpcy5fbWFuYWdlZExheWVyc1tuZXdOYW1lXSA9IGxheWVyT3B0aW9ucztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIF9vbkFuaW1hdGlvbkFkZGVkKHtsYXllck5hbWUsIGFuaW1hdGlvbk5hbWV9KSB7XHJcbiAgICAgICAgLy8gTWFyayB0aGUgYW5pbWF0aW9uIGFzIGFjdGl2ZSBpZiBpdCBpcyBtYW5hZ2VkXHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgdGhpcy5fbWFuYWdlZExheWVyc1tsYXllck5hbWVdICE9PSB1bmRlZmluZWQgJiZcclxuICAgICAgICAgIHRoaXMuX21hbmFnZWRMYXllcnNbbGF5ZXJOYW1lXS5hbmltYXRpb25zW2FuaW1hdGlvbk5hbWVdICE9PSB1bmRlZmluZWRcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHRoaXMuX21hbmFnZWRMYXllcnNbbGF5ZXJOYW1lXS5hbmltYXRpb25zW1xyXG4gICAgICAgICAgICBhbmltYXRpb25OYW1lXHJcbiAgICAgICAgICBdLmlzQWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIF9vbkFuaW1hdGlvblJlbW92ZWQoe2xheWVyTmFtZSwgYW5pbWF0aW9uTmFtZX0pIHtcclxuICAgICAgICAvLyBEZWFjdGl2YXRlIHRoZSBhbmltYXRpb24gaWYgaXQgaXMgbWFuYWdlZFxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIHRoaXMuX21hbmFnZWRMYXllcnNbbGF5ZXJOYW1lXSAhPT0gdW5kZWZpbmVkICYmXHJcbiAgICAgICAgICB0aGlzLl9tYW5hZ2VkTGF5ZXJzW2xheWVyTmFtZV0uYW5pbWF0aW9uc1thbmltYXRpb25OYW1lXSAhPT0gdW5kZWZpbmVkXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICB0aGlzLl9tYW5hZ2VkTGF5ZXJzW2xheWVyTmFtZV0uYW5pbWF0aW9uc1tcclxuICAgICAgICAgICAgYW5pbWF0aW9uTmFtZVxyXG4gICAgICAgICAgXS5pc0FjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgX29uQW5pbWF0aW9uUmVuYW1lZCh7bGF5ZXJOYW1lLCBvbGROYW1lLCBuZXdOYW1lfSkge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIHRoaXMuX21hbmFnZWRMYXllcnNbbGF5ZXJOYW1lXSAhPT0gdW5kZWZpbmVkICYmXHJcbiAgICAgICAgICB0aGlzLl9tYW5hZ2VkTGF5ZXJzW2xheWVyTmFtZV0uYW5pbWF0aW9uc1tvbGROYW1lXSAhPT0gdW5kZWZpbmVkXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAvLyBSZXBsYWNlIHRoZSBhbmltYXRpb24ga2V5IHdpdGggdGhlIG5ldyBuYW1lXHJcbiAgICAgICAgICBjb25zdCBhbmltT3B0aW9ucyA9IHRoaXMuX21hbmFnZWRMYXllcnNbbGF5ZXJOYW1lXS5hbmltYXRpb25zW1xyXG4gICAgICAgICAgICBvbGROYW1lXHJcbiAgICAgICAgICBdO1xyXG4gICAgICAgICAgZGVsZXRlIHRoaXMuX21hbmFnZWRMYXllcnNbbGF5ZXJOYW1lXS5hbmltYXRpb25zW29sZE5hbWVdO1xyXG4gICAgICAgICAgdGhpcy5fbWFuYWdlZExheWVyc1tsYXllck5hbWVdLmFuaW1hdGlvbnNbbmV3TmFtZV0gPSBhbmltT3B0aW9ucztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJlZ2lzdGVyTGF5ZXIobmFtZSwgb3B0aW9ucyA9IHt9KSB7XHJcbiAgICAgICAgLy8gU3RhcnQgd2l0aCBkZWZhdWx0IG9wdGlvbnMgZm9yIGVhY2ggbmV3IGxheWVyXHJcbiAgICAgICAgaWYgKHRoaXMuX21hbmFnZWRMYXllcnNbbmFtZV0gPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgdGhpcy5fbWFuYWdlZExheWVyc1tuYW1lXSA9IHtcclxuICAgICAgICAgICAgLi4udGhpcy5jb25zdHJ1Y3Rvci5ERUZBVUxUX0xBWUVSX09QVElPTlMsXHJcbiAgICAgICAgICAgIGFuaW1hdGlvbnM6IHt9LFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFVwZGF0ZSBhbGwgb3B0aW9ucyBleGNlcHQgYW5pbWF0aW9uc1xyXG4gICAgICAgIGNvbnN0IGxheWVyT3B0aW9ucyA9IHRoaXMuX21hbmFnZWRMYXllcnNbbmFtZV07XHJcbiAgICAgICAgb3B0aW9ucyA9IHsuLi5vcHRpb25zfTtcclxuICAgICAgICBjb25zdCBhbmltYXRpb25PcHRpb25zID0gb3B0aW9ucy5hbmltYXRpb25zIHx8IHt9O1xyXG4gICAgICAgIGRlbGV0ZSBvcHRpb25zLmFuaW1hdGlvbnM7XHJcbiAgICAgICAgT2JqZWN0LmFzc2lnbihsYXllck9wdGlvbnMsIG9wdGlvbnMpO1xyXG5cclxuICAgICAgICAvLyBDaGVjayB3aGV0aGVyIHRoZSBsYXllciBjYW4gYmUgbWFuaXB1bGF0ZWQgbm93XHJcbiAgICAgICAgbGF5ZXJPcHRpb25zLmlzQWN0aXZlID1cclxuICAgICAgICAgIHRoaXMuX2hvc3QuQW5pbWF0aW9uRmVhdHVyZSAhPT0gdW5kZWZpbmVkICYmXHJcbiAgICAgICAgICB0aGlzLl9ob3N0LkFuaW1hdGlvbkZlYXR1cmUubGF5ZXJzLmluY2x1ZGVzKG5hbWUpO1xyXG5cclxuICAgICAgICAvLyBSZWdpc3RlciB0aGUgYW5pbWF0aW9uc1xyXG4gICAgICAgIE9iamVjdC5lbnRyaWVzKGFuaW1hdGlvbk9wdGlvbnMpLmZvckVhY2goKFthbmltTmFtZSwgYW5pbU9wdGlvbnNdKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnJlZ2lzdGVyQW5pbWF0aW9uKG5hbWUsIGFuaW1OYW1lLCBhbmltT3B0aW9ucyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJlZ2lzdGVyQW5pbWF0aW9uKGxheWVyTmFtZSwgYW5pbWF0aW9uTmFtZSwgb3B0aW9ucyA9IHt9KSB7XHJcbiAgICAgICAgLy8gUmVnaXN0ZXIgdGhlIGxheWVyIGlmIGl0IGhhc24ndCBiZWVuIHJlZ2lzdGVyZWQgeWV0XHJcbiAgICAgICAgaWYgKHRoaXMuX21hbmFnZWRMYXllcnNbbGF5ZXJOYW1lXSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICB0aGlzLnJlZ2lzdGVyTGF5ZXIobGF5ZXJOYW1lKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFVwZGF0ZSBhbmltYXRpb24gb3B0aW9uc1xyXG4gICAgICAgIGNvbnN0IGFuaW1PcHRpb25zID1cclxuICAgICAgICAgIHRoaXMuX21hbmFnZWRMYXllcnNbbGF5ZXJOYW1lXS5hbmltYXRpb25zW2FuaW1hdGlvbk5hbWVdIHx8IHt9O1xyXG4gICAgICAgIE9iamVjdC5hc3NpZ24oYW5pbU9wdGlvbnMsIG9wdGlvbnMpO1xyXG4gICAgICAgIHRoaXMuX21hbmFnZWRMYXllcnNbbGF5ZXJOYW1lXS5hbmltYXRpb25zW2FuaW1hdGlvbk5hbWVdID0gYW5pbU9wdGlvbnM7XHJcblxyXG4gICAgICAgIC8vIENoZWNrIHdoZXRoZXIgdGhlIGFuaW1hdGlvbiBjYW4gYmUgbWFuaXB1bGF0ZWQgbm93XHJcbiAgICAgICAgdGhpcy5fbWFuYWdlZExheWVyc1tsYXllck5hbWVdLmFuaW1hdGlvbnNbYW5pbWF0aW9uTmFtZV0uaXNBY3RpdmUgPVxyXG4gICAgICAgICAgdGhpcy5fbWFuYWdlZExheWVyc1tsYXllck5hbWVdLmlzQWN0aXZlICYmXHJcbiAgICAgICAgICB0aGlzLl9ob3N0LkFuaW1hdGlvbkZlYXR1cmUuZ2V0QW5pbWF0aW9ucyhsYXllck5hbWUpLmluY2x1ZGVzKFxyXG4gICAgICAgICAgICBhbmltYXRpb25OYW1lXHJcbiAgICAgICAgICApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBzZXRMYXllcldlaWdodHMobmFtZUZpbHRlciA9ICgpID0+IHRydWUsIHdlaWdodCwgc2Vjb25kcywgZWFzaW5nRm4pIHtcclxuICAgICAgICBjb25zdCBsYXllck5hbWVzID0gT2JqZWN0LmtleXModGhpcy5fbWFuYWdlZExheWVycykuZmlsdGVyKG5hbWVGaWx0ZXIpO1xyXG5cclxuICAgICAgICBsYXllck5hbWVzLmZvckVhY2gobmFtZSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBsYXllck9wdGlvbnMgPSB0aGlzLl9tYW5hZ2VkTGF5ZXJzW25hbWVdO1xyXG5cclxuICAgICAgICAgIGlmIChsYXllck9wdGlvbnMuaXNBY3RpdmUpIHtcclxuICAgICAgICAgICAgdGhpcy5faG9zdC5BbmltYXRpb25GZWF0dXJlLnNldExheWVyV2VpZ2h0KFxyXG4gICAgICAgICAgICAgIG5hbWUsXHJcbiAgICAgICAgICAgICAgd2VpZ2h0LFxyXG4gICAgICAgICAgICAgIHNlY29uZHMgIT09IHVuZGVmaW5lZCA/IHNlY29uZHMgOiBsYXllck9wdGlvbnMuYmxlbmRUaW1lLFxyXG4gICAgICAgICAgICAgIGVhc2luZ0ZuIHx8IGxheWVyT3B0aW9ucy5lYXNpbmdGblxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBlbmFibGUoc2Vjb25kcywgZWFzaW5nRm4pIHtcclxuICAgICAgICB0aGlzLnNldExheWVyV2VpZ2h0cyh1bmRlZmluZWQsIDEsIHNlY29uZHMsIGVhc2luZ0ZuKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgZGlzYWJsZShzZWNvbmRzLCBlYXNpbmdGbikge1xyXG4gICAgICAgIHRoaXMuc2V0TGF5ZXJXZWlnaHRzKHVuZGVmaW5lZCwgMCwgc2Vjb25kcywgZWFzaW5nRm4pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpbnN0YWxsQXBpKCkge1xyXG4gICAgICAgIGNvbnN0IGFwaSA9IHN1cGVyLmluc3RhbGxBcGkoKTtcclxuXHJcbiAgICAgICAgT2JqZWN0LmFzc2lnbihhcGksIHtcclxuICAgICAgICAgIHJlZ2lzdGVyTGF5ZXI6IHRoaXMucmVnaXN0ZXJMYXllci5iaW5kKHRoaXMpLFxyXG4gICAgICAgICAgcmVnaXN0ZXJBbmltYXRpb246IHRoaXMucmVnaXN0ZXJBbmltYXRpb24uYmluZCh0aGlzKSxcclxuICAgICAgICAgIHNldExheWVyV2VpZ2h0czogdGhpcy5zZXRMYXllcldlaWdodHMuYmluZCh0aGlzKSxcclxuICAgICAgICAgIGVuYWJsZTogdGhpcy5lbmFibGUuYmluZCh0aGlzKSxcclxuICAgICAgICAgIGRpc2FibGU6IHRoaXMuZGlzYWJsZS5iaW5kKHRoaXMpLFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gYXBpO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE1hbmFnZWRBbmltYXRpb25MYXllck1peGluLCB7XHJcbiAgICAgIERFRkFVTFRfTEFZRVJfT1BUSU9OUzoge1xyXG4gICAgICAgIHZhbHVlOiBNYW5hZ2VkQW5pbWF0aW9uTGF5ZXJJbnRlcmZhY2UuREVGQVVMVF9MQVlFUl9PUFRJT05TLFxyXG4gICAgICAgIHdyaXRhYmxlOiBmYWxzZSxcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBNYW5hZ2VkQW5pbWF0aW9uTGF5ZXJNaXhpbjtcclxuICB9XHJcbn1cclxuXHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE1hbmFnZWRBbmltYXRpb25MYXllckludGVyZmFjZSwge1xyXG4gIERFRkFVTFRfTEFZRVJfT1BUSU9OUzoge1xyXG4gICAgdmFsdWU6IHtibGVuZFRpbWU6IDAuNSwgYW5pbWF0aW9uczoge319LFxyXG4gICAgd3JpdGFibGU6IGZhbHNlLFxyXG4gIH0sXHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgTWFuYWdlZEFuaW1hdGlvbkxheWVySW50ZXJmYWNlO1xyXG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cclxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVC0wXHJcblxyXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtY2xhc3Nlcy1wZXItZmlsZSAqL1xyXG5pbXBvcnQgRmVhdHVyZURlcGVuZGVudEludGVyZmFjZSBmcm9tICdjb3JlL0ZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2UnO1xyXG5cclxuLyoqXHJcbiAqIENsYXNzIGZhY3RvcnkgaW50ZXJmYWNlIGZvciBmZWF0dXJlcyB0aGF0IGFyZSBkZXBlbmRlbnQgb24gdGhlIFRleHRUb1NwZWVjaEZlYXR1cmVcclxuICogYmVpbmcgcHJlc2VudCBvbiB0aGUgaG9zdC4gU3BlZWNoIGV2ZW50cyB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgbGlzdGVuZWQgZm9yIG9uY2UgYVxyXG4gKiBUZXh0VG9TcGVlY2hGZWF0dXJlIGlzIGFkZGVkIHRvIHRoZSBob3N0IGFuZCBzdG9wcGVkIG9uY2UgaXQgaXMgcmVtb3ZlZC5cclxuICpcclxuICogQGludGVyZmFjZVxyXG4gKiBAZXh0ZW5kcyBGZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlXHJcbiAqXHJcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBFVkVOVF9ERVBFTkRFTkNJRVMgLSBFdmVudHMgdGhhdCB0aGUgZmVhdHVyZSBzaG91bGQgc3RhcnQvc3RvcFxyXG4gKiBsaXN0ZW5pbmcgZm9yIHdoZW4gYSBmZWF0dXJlIG9mIHR5cGUgRmVhdHVyZU5hbWUgaXMgYWRkZWQvcmVtb3ZlZCBmcm9tIHRoZSBob3N0LlxyXG4gKiBAcHJvcGVydHkge09iamVjdH0gRVZFTlRfREVQRU5ERU5DSUVTLlRleHRUb1NwZWVjaEZlYXR1cmUgLSBFdmVudHMgdGhhdCBhcmVcclxuICogc3BlY2lmaWMgdG8gdGhlIFRleHRUb1NwZWVjaEZlYXR1cmUuXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbRVZFTlRfREVQRU5ERU5DSUVTLlRleHRUb1NwZWVjaEZlYXR1cmUucGxheT0nX29uUGxheSddIC1cclxuICogVGhlIG5hbWUgb2YgdGhlIG1ldGhvZCB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQgd2hlbiBUZXh0VG9TcGVlY2hGZWF0dXJlIHBsYXlcclxuICogZXZlbnRzIGFyZSBlbWl0dGVkLlxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW0VWRU5UX0RFUEVOREVOQ0lFUy5UZXh0VG9TcGVlY2hGZWF0dXJlLnBhdXNlPSdfb25QYXVzZSddIC1cclxuICogVGhlIG5hbWUgb2YgdGhlIG1ldGhvZCB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQgd2hlbiBUZXh0VG9TcGVlY2hGZWF0dXJlIHBhdXNlXHJcbiAqIGV2ZW50cyBhcmUgZW1pdHRlZC5cclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtFVkVOVF9ERVBFTkRFTkNJRVMuVGV4dFRvU3BlZWNoRmVhdHVyZS5yZXN1bWU9J19vblJlc3VtZSddIC1cclxuICogVGhlIG5hbWUgb2YgdGhlIG1ldGhvZCB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQgd2hlbiBUZXh0VG9TcGVlY2hGZWF0dXJlIHJlc3VtZVxyXG4gKiBldmVudHMgYXJlIGVtaXR0ZWQuXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbRVZFTlRfREVQRU5ERU5DSUVTLlRleHRUb1NwZWVjaEZlYXR1cmUuc3RvcD0nX29uU3RvcCddIC1cclxuICogVGhlIG5hbWUgb2YgdGhlIG1ldGhvZCB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQgd2hlbiBUZXh0VG9TcGVlY2hGZWF0dXJlIHN0b3BcclxuICogZXZlbnRzIGFyZSBlbWl0dGVkLlxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW0VWRU5UX0RFUEVOREVOQ0lFUy5UZXh0VG9TcGVlY2hGZWF0dXJlLnNlbnRlbmNlPSdfb25TZW50ZW5jZSddIC1cclxuICogVGhlIG5hbWUgb2YgdGhlIG1ldGhvZCB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQgd2hlbiBUZXh0VG9TcGVlY2hGZWF0dXJlIHNlbnRlbmNlXHJcbiAqIGV2ZW50cyBhcmUgZW1pdHRlZC5cclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtFVkVOVF9ERVBFTkRFTkNJRVMuVGV4dFRvU3BlZWNoRmVhdHVyZS53b3JkPSdfb25Xb3JkJ10gLVxyXG4gKiBUaGUgbmFtZSBvZiB0aGUgbWV0aG9kIHRoYXQgd2lsbCBiZSBleGVjdXRlZCB3aGVuIFRleHRUb1NwZWVjaEZlYXR1cmUgd29yZFxyXG4gKiBldmVudHMgYXJlIGVtaXR0ZWQuXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbRVZFTlRfREVQRU5ERU5DSUVTLlRleHRUb1NwZWVjaEZlYXR1cmUudmlzZW1lPSdfb25WaXNlbWUnXSAtXHJcbiAqIFRoZSBuYW1lIG9mIHRoZSBtZXRob2QgdGhhdCB3aWxsIGJlIGV4ZWN1dGVkIHdoZW4gVGV4dFRvU3BlZWNoRmVhdHVyZSB2aXNlbWVcclxuICogZXZlbnRzIGFyZSBlbWl0dGVkLlxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW0VWRU5UX0RFUEVOREVOQ0lFUy5UZXh0VG9TcGVlY2hGZWF0dXJlLnNzbWw9J19vblNzbWwnXSAtXHJcbiAqIFRoZSBuYW1lIG9mIHRoZSBtZXRob2QgdGhhdCB3aWxsIGJlIGV4ZWN1dGVkIHdoZW4gVGV4dFRvU3BlZWNoRmVhdHVyZSBzc21sXHJcbiAqIGV2ZW50cyBhcmUgZW1pdHRlZC5cclxuICovXHJcbmNsYXNzIFRleHRUb1NwZWVjaEZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2UgZXh0ZW5kcyBGZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlIHtcclxuICAvKipcclxuICAgKiBFeGVjdXRlZCB3aGVuIHNwZWVjaCBwbGF5IGV2ZW50cyBhcmUgY2F1Z2h0LlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBfb25QbGF5KCkge31cclxuXHJcbiAgLyoqXHJcbiAgICogRXhlY3V0ZWQgd2hlbiBzcGVlY2ggcGF1c2UgZXZlbnRzIGFyZSBjYXVnaHQuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIF9vblBhdXNlKCkge31cclxuXHJcbiAgLyoqXHJcbiAgICogRXhlY3V0ZWQgd2hlbiBzcGVlY2ggcmVzdW1lIGV2ZW50cyBhcmUgY2F1Z2h0LlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBfb25SZXN1bWUoKSB7fVxyXG5cclxuICAvKipcclxuICAgKiBFeGVjdXRlZCB3aGVuIHNwZWVjaCBzdG9wIGV2ZW50cyBhcmUgY2F1Z2h0LlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBfb25TdG9wKCkge31cclxuXHJcbiAgLyoqXHJcbiAgICogRXhlY3V0ZWQgd2hlbiBzcGVlY2ggc2VudGVuY2UgZXZlbnRzIGFyZSBjYXVnaHQuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIF9vblNlbnRlbmNlKCkge31cclxuXHJcbiAgLyoqXHJcbiAgICogRXhlY3V0ZWQgd2hlbiBzcGVlY2ggd29yZCBldmVudHMgYXJlIGNhdWdodC5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICovXHJcbiAgX29uV29yZCgpIHt9XHJcblxyXG4gIC8qKlxyXG4gICAqIEV4ZWN1dGVkIHdoZW4gc3BlZWNoIHZpc2VtZSBldmVudHMgYXJlIGNhdWdodC5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICovXHJcbiAgX29uVmlzZW1lKCkge31cclxuXHJcbiAgLyoqXHJcbiAgICogRXhlY3V0ZWQgd2hlbiBzcGVlY2ggc3NtbCBldmVudHMgYXJlIGNhdWdodC5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICovXHJcbiAgX29uU3NtbCgpIHt9XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZXMgYSBjbGFzcyB0aGF0IGltcGxlbWVudHMge0BsaW5rIFRleHRUb1NwZWVjaEZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2V9XHJcbiAgICogYW5kIGV4dGVuZHMgYSBzcGVjaWZpZWQgYmFzZSBjbGFzcy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7Q2xhc3N9IEJhc2VDbGFzcyAtIFRoZSBjbGFzcyB0byBleHRlbmQuXHJcbiAgICpcclxuICAgKiBAcmV0dXJuIHtDbGFzc30gQSBjbGFzcyB0aGF0IGV4dGVuZHMgYEJhc2VDbGFzc2AgYW5kIGltcGxlbWVudHMge0BsaW5rIFRleHRUb1NwZWVjaEZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2V9LlxyXG4gICAqL1xyXG4gIHN0YXRpYyBNaXhpbihCYXNlQ2xhc3MpIHtcclxuICAgIGNvbnN0IFBhcmVudENsYXNzID0gRmVhdHVyZURlcGVuZGVudEludGVyZmFjZS5NaXhpbihCYXNlQ2xhc3MpO1xyXG4gICAgY29uc3QgVGV4dFRvU3BlZWNoRmVhdHVyZURlcGVuZGVudE1peGluID0gY2xhc3MgZXh0ZW5kcyBQYXJlbnRDbGFzcyB7XHJcbiAgICAgIF9vblBsYXkoKSB7fVxyXG5cclxuICAgICAgX29uUGF1c2UoKSB7fVxyXG5cclxuICAgICAgX29uUmVzdW1lKCkge31cclxuXHJcbiAgICAgIF9vblN0b3AoKSB7fVxyXG5cclxuICAgICAgX29uU2VudGVuY2UoKSB7fVxyXG5cclxuICAgICAgX29uV29yZCgpIHt9XHJcblxyXG4gICAgICBfb25WaXNlbWUoKSB7fVxyXG5cclxuICAgICAgX29uU3NtbCgpIHt9XHJcbiAgICB9O1xyXG5cclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFRleHRUb1NwZWVjaEZlYXR1cmVEZXBlbmRlbnRNaXhpbiwge1xyXG4gICAgICBFVkVOVF9ERVBFTkRFTkNJRVM6IHtcclxuICAgICAgICB2YWx1ZToge1xyXG4gICAgICAgICAgLi4uUGFyZW50Q2xhc3MuRVZFTlRfREVQRU5ERU5DSUVTLFxyXG4gICAgICAgICAgLi4uVGV4dFRvU3BlZWNoRmVhdHVyZURlcGVuZGVudEludGVyZmFjZS5FVkVOVF9ERVBFTkRFTkNJRVMsXHJcbiAgICAgICAgfSxcclxuICAgICAgICB3cml0YWJsZTogZmFsc2UsXHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gVGV4dFRvU3BlZWNoRmVhdHVyZURlcGVuZGVudE1peGluO1xyXG4gIH1cclxufVxyXG5cclxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVGV4dFRvU3BlZWNoRmVhdHVyZURlcGVuZGVudEludGVyZmFjZSwge1xyXG4gIEVWRU5UX0RFUEVOREVOQ0lFUzoge1xyXG4gICAgdmFsdWU6IHtcclxuICAgICAgVGV4dFRvU3BlZWNoRmVhdHVyZToge1xyXG4gICAgICAgIHBsYXk6ICdfb25QbGF5JyxcclxuICAgICAgICBwYXVzZTogJ19vblBhdXNlJyxcclxuICAgICAgICByZXN1bWU6ICdfb25SZXN1bWUnLFxyXG4gICAgICAgIHN0b3A6ICdfb25TdG9wJyxcclxuICAgICAgICBzZW50ZW5jZTogJ19vblNlbnRlbmNlJyxcclxuICAgICAgICB3b3JkOiAnX29uV29yZCcsXHJcbiAgICAgICAgdmlzZW1lOiAnX29uVmlzZW1lJyxcclxuICAgICAgICBzc21sOiAnX29uU3NtbCcsXHJcbiAgICAgIH0sXHJcbiAgICB9LFxyXG4gICAgd3JpdGFibGU6IGZhbHNlLFxyXG4gIH0sXHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgVGV4dFRvU3BlZWNoRmVhdHVyZURlcGVuZGVudEludGVyZmFjZTtcclxuIiwiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXHJcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxyXG5pbXBvcnQgTWF0aFV0aWxzIGZyb20gJy4vTWF0aFV0aWxzJztcclxuaW1wb3J0IHtRdWFkcmF0aWN9IGZyb20gJy4vYW5pbXBhY2svRWFzaW5nJztcclxuaW1wb3J0IE1hbmFnZWRBbmltYXRpb25MYXllckludGVyZmFjZSBmcm9tICcuL2FuaW1wYWNrL01hbmFnZWRBbmltYXRpb25MYXllckludGVyZmFjZSc7XHJcbmltcG9ydCBUZXh0VG9TcGVlY2hGZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlIGZyb20gJy4vYXdzcGFjay9UZXh0VG9TcGVlY2hGZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlJztcclxuaW1wb3J0IEFic3RyYWN0SG9zdEZlYXR1cmUgZnJvbSAnLi9BYnN0cmFjdEhvc3RGZWF0dXJlJztcclxuXHJcbi8qKlxyXG4gKiBEZWZhdWx0IG1hcHBpbmcgb2YgUG9sbHkgdmlzZW1lIG5hbWVzIHRvIGFuaW1hdGlvbiBvcHRpb25zIG9iamVjdHMuXHJcbiAqXHJcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBbc2lsPXtuYW1lOiAnc2lsJ31dXHJcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBbcD17bmFtZTogJ3AnLCBvdmVycmlkZVdlaWdodDogMC45fV1cclxuICogQHByb3BlcnR5IHtPYmplY3R9IFt0PXtuYW1lOiAndCcsIGJsZW5kVGltZTogMC4yfV1cclxuICogQHByb3BlcnR5IHtPYmplY3R9IFtTPXtuYW1lOiAnUyd9XVxyXG4gKiBAcHJvcGVydHkge09iamVjdH0gW1Q9e25hbWU6ICdUJ31dXHJcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBbZj17bmFtZTogJ2YnLCBvdmVycmlkZVdlaWdodDogMC43NX1dXHJcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBbaz17bmFtZTogJ2snfV1cclxuICogQHByb3BlcnR5IHtPYmplY3R9IFtpPXtuYW1lOiAnaSd9XVxyXG4gKiBAcHJvcGVydHkge09iamVjdH0gW3I9e25hbWU6ICdyJ31dXHJcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBbcz17bmFtZTogJ3MnLCBibGVuZFRpbWU6IDAuMjV9XVxyXG4gKiBAcHJvcGVydHkge09iamVjdH0gW3U9e25hbWU6ICd1J31dXHJcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBbQD17bmFtZTogJ0AnfV1cclxuICogQHByb3BlcnR5IHtPYmplY3R9IFthPXtuYW1lOiAnYSd9XVxyXG4gKiBAcHJvcGVydHkge09iamVjdH0gW2U9e25hbWU6ICdlJywgYmxlbmRUaW1lOiAwLjJ9XVxyXG4gKiBAcHJvcGVydHkge09iamVjdH0gW0U9e25hbWU6ICdFJ31dXHJcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBbbz17bmFtZTogJ28nfV1cclxuICogQHByb3BlcnR5IHtPYmplY3R9IFtPPXtuYW1lOiAnTyd9XVxyXG4gKi9cclxuY29uc3QgRGVmYXVsdFZpc2VtZU1hcCA9IHtcclxuICBzaWw6IHtuYW1lOiAnc2lsJ30sXHJcbiAgcDoge25hbWU6ICdwJywgb3ZlcnJpZGVXZWlnaHQ6IDAuOX0sXHJcbiAgdDoge25hbWU6ICd0JywgYmxlbmRUaW1lOiAwLjJ9LFxyXG4gIFM6IHtuYW1lOiAnUyd9LFxyXG4gIFQ6IHtuYW1lOiAnVCd9LFxyXG4gIGY6IHtuYW1lOiAnZicsIG92ZXJyaWRlV2VpZ2h0OiAwLjc1fSxcclxuICBrOiB7bmFtZTogJ2snfSxcclxuICBpOiB7bmFtZTogJ2knfSxcclxuICByOiB7bmFtZTogJ3InfSxcclxuICBzOiB7bmFtZTogJ3MnLCBibGVuZFRpbWU6IDAuMjV9LFxyXG4gIHU6IHtuYW1lOiAndSd9LFxyXG4gICdAJzoge25hbWU6ICdAJ30sXHJcbiAgYToge25hbWU6ICdhJ30sXHJcbiAgZToge25hbWU6ICdlJywgYmxlbmRUaW1lOiAwLjJ9LFxyXG4gIEU6IHtuYW1lOiAnRSd9LFxyXG4gIG86IHtuYW1lOiAnbyd9LFxyXG4gIE86IHtuYW1lOiAnTyd9LFxyXG59O1xyXG5cclxuLyoqXHJcbiAqIExpcHN5bmMgY29udHJvbHMgdHdvIHR5cGVzIG9mIG1vdmVtZW50OiBpZGxlIGFuaW1hdGlvbiB0aGF0IHNob3VsZCBwbGF5IHdoaWxlXHJcbiAqIHNwZWVjaCBpcyBwbGF5aW5nIGFuZCB2aXNlbWUgYW5pbWF0aW9ucyBjb3JyZXNwb25kaW5nIHRvIFBvbGx5IHZpc2VtZXMgd2hvc2VcclxuICogd2VpZ2h0cyBzaG91bGQgYmUgdHVybmVkIG9uIGFuZCBvZmYgYXMgdGhleSBhcmUgZW5jb3VudGVyZWQgaW4gdGhlIFBvbGx5IFNTTUxcclxuICogdHJhbnNjcmlwdC4gTGF5ZXJzIG93bmVkIGJ5IHRoaXMgZmVhdHVyZSB3aWxsIGJlIGVuYWJsZWQgd2hpbGUgc3BlZWNoIGlzIHBsYXlpbmdcclxuICogYW5kIGRpc2FibGVkIG9uY2UgaXQgc3RvcHMuXHJcbiAqXHJcbiAqIEBleHRlbmRzIEFic3RyYWN0SG9zdEZlYXR1cmVcclxuICogQGFsaWFzIGNvcmUvTGlwc3luY0ZlYXR1cmVcclxuICogQGltcGxlbWVudHMgVGV4dFRvU3BlZWNoRmVhdHVyZURlcGVuZGVudEludGVyZmFjZVxyXG4gKiBAaW1wbGVtZW50cyBNYW5hZ2VkQW5pbWF0aW9uTGF5ZXJJbnRlcmZhY2VcclxuICovXHJcbmNsYXNzIExpcHN5bmNGZWF0dXJlIGV4dGVuZHMgQWJzdHJhY3RIb3N0RmVhdHVyZS5taXgoXHJcbiAgVGV4dFRvU3BlZWNoRmVhdHVyZURlcGVuZGVudEludGVyZmFjZS5NaXhpbixcclxuICBNYW5hZ2VkQW5pbWF0aW9uTGF5ZXJJbnRlcmZhY2UuTWl4aW5cclxuKSB7XHJcbiAgLyoqXHJcbiAgICogQGNvbnN0cnVjdG9yXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge2NvcmUvSG9zdE9iamVjdH0gaG9zdCAtIEhvc3QgdGhhdCBvd25zIHRoZSBmZWF0dXJlLlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0PX0gdmlzZW1lT3B0aW9ucyAtIE9wdGlvbnMgZm9yIHRoZSB2aXNlbWUgbGF5ZXJzLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbdmlzZW1lT3B0aW9ucy5ibGVuZFRpbWU9MC4xNV0gLSBEZWZhdWx0IGFtb3VudCBvZiB0aW1lIGl0XHJcbiAgICogd2lsbCB0YWtlIHRvIG1hbmlwdWxhdGUgZWFjaCBmcmVlQmxlbmQgd2VpZ2h0IG9uIHRoZSB2aXNlbWUgc3RhdGVzLlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbdmlzZW1lT3B0aW9ucy5kZWNheVJhdGU9e2Ftb3VudDogLjUsIHNlY29uZHM6IC41fV0gLSBBbiBvYmplY3RcclxuICAgKiBkZXNjcmliaW5nIHRoZSAwLTEgZmFjdG9yIHZpc2VtZSB3ZWlnaHQgd2lsbCBkZWNheSBpZiB0aGUgdmlzZW1lIGR1cmF0aW9uIGlzXHJcbiAgICogbG9uZ2VyIHRoYW4gdGhlIGJsZW5kVGltZSBhbmQgdGhlIG51bWJlciBvZiBzZWNvbmRzIGl0IHdvdWxkIHRha2UgdG8gZGVjYXlcclxuICAgKiBieSB0aGF0IGZhY3Rvci5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gW3Zpc2VtZU9wdGlvbnMuZWFzaW5nRm49UXVhZHJhdGljLkluT3V0XSAtIERlZmF1bHQgZWFzaW5nIGZ1bmN0aW9uXHJcbiAgICogdG8gdXNlIHdoZW4gbWFuaXB1bGF0aW5nIHZpc2VtZSBmcmVlQmxlbmQgd2VpZ2h0cy5cclxuICAgKiBAcGFyYW0ge0FycmF5LjxPYmplY3Q+fSBbdmlzZW1lT3B0aW9ucy4ubGF5ZXJzPVtdXSAtIEFuIGFycmF5IG9mIGxheWVyIG9wdGlvbnNcclxuICAgKiBvYmplY3RzIHRvIHJlZ2lzdGVyIGFzIHZpc2VtZSBsYXllcnMuXHJcbiAgICogQHBhcmFtIHtPYmplY3Q9fSB0YWxraW5nT3B0aW9ucyAtIE9wdGlvbnMgZm9yIHRoZSB0YWxraW5nIGxheWVycy5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gW3RhbGtpbmdPcHRpb25zLmJsZW5kVGltZT0wLjc1XSAtIERlZmF1bHQgYW1vdW50IG9mIHRpbWUgdG9cclxuICAgKiBlbmFibGUgYW5kIGRpc2FibGUgdGhlIHRhbGtpbmcgaWRsZSBsYXllcnNcclxuICAgKiBAcGFyYW0ge251bWJlcn0gW3RhbGtpbmdPcHRpb25zLmVhc2luZ0ZuPVF1YWRyYXRpYy5Jbk91dF0gLSBEZWZhdWx0IGVhc2luZ1xyXG4gICAqIGZ1bmN0aW9uIHRvIHVzZSB3aGVuIG1hbmlwdWxhdGluZyB3ZWlnaHRzIG9uIHRoZSB0YWxraW5nIGlkbGUgbGF5ZXJzLlxyXG4gICAqIEBwYXJhbSB7QXJyYXkuPE9iamVjdD59IFt0YWxraW5nT3B0aW9ucy5sYXllcnM9W11dIC0gQW4gYXJyYXkgb2YgbGF5ZXIgb3B0aW9uc1xyXG4gICAqIG9iamVjdHMgdG8gcmVnaXN0ZXIgYXMgdGFsa2luZyBsYXllcnMuXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IFt2aXNlbWVMZWFkVGltZT0uMDY3XSAtIFRoZSBhbW91bnQgb2YgdGltZSB0byBpbnN0cnVjdCB0aGVcclxuICAgKiBUZXh0VG9TcGVlY2hGZWF0dXJlIHRvIGVtaXQgc3BlZWNobWFya3MgYmVmb3JlIGVhY2ggb25lJ3MgYWN0dWFsIHRpbWVzdGFtcFxyXG4gICAqIGlzIHJlYWNoZWQuIFRoaXMgd2lsbCBzZXQgdGhlICdzcGVlY2hNYXJrT2Zmc2V0JyB2YXJpYWJsZSBvbiB0aGUgVGV4dFRvU3BlZWNoRmVhdHVyZS5cclxuICAgKi9cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIGhvc3QsXHJcbiAgICB7XHJcbiAgICAgIGJsZW5kVGltZTogdmlzZW1lQmxlbmRUaW1lID0gMC4xNSxcclxuICAgICAgZGVjYXlSYXRlOiB7YW1vdW50ID0gMC41LCBzZWNvbmRzID0gMC41fSA9IHt9LFxyXG4gICAgICBlYXNpbmdGbjogdmlzZW1lRWFzaW5nRm4gPSBRdWFkcmF0aWMuSW5PdXQsXHJcbiAgICAgIGxheWVyczogdmlzZW1lTGF5ZXJzID0gW10sXHJcbiAgICB9ID0ge30sXHJcbiAgICB7XHJcbiAgICAgIGJsZW5kVGltZTogdGFsa2luZ0JsZW5kVGltZSA9IDAuNzUsXHJcbiAgICAgIGVhc2luZ0ZuOiB0YWxraW5nRWFzaW5nRm4gPSBRdWFkcmF0aWMuSW5PdXQsXHJcbiAgICAgIGxheWVyczogdGFsa2luZ0xheWVycyA9IFtdLFxyXG4gICAgfSA9IHt9LFxyXG4gICAgdmlzZW1lTGVhZFRpbWUgPSAwLjA2N1xyXG4gICkge1xyXG4gICAgc3VwZXIoaG9zdCk7XHJcblxyXG4gICAgdGhpcy5fdmlzZW1lTGF5ZXJzID0ge307XHJcbiAgICB0aGlzLl90YWxraW5nTGF5ZXJzID0ge307XHJcbiAgICB0aGlzLnZpc2VtZUxlYWRUaW1lID0gdmlzZW1lTGVhZFRpbWU7XHJcblxyXG4gICAgLy8gUmVnaXN0ZXIgdGhlIHZpc2VtZSBsYXllcnNcclxuICAgIHZpc2VtZUxheWVycy5mb3JFYWNoKCh7bmFtZSwgYW5pbWF0aW9uLCB2aXNlbWVNYXAgPSBEZWZhdWx0VmlzZW1lTWFwfSkgPT4ge1xyXG4gICAgICB0aGlzLnJlZ2lzdGVyVmlzZW1lTGF5ZXIobmFtZSwge1xyXG4gICAgICAgIGFuaW1hdGlvbixcclxuICAgICAgICB2aXNlbWVNYXAsXHJcbiAgICAgICAgZGVjYXlSYXRlOiB7YW1vdW50LCBzZWNvbmRzfSxcclxuICAgICAgICBibGVuZFRpbWU6IHZpc2VtZUJsZW5kVGltZSxcclxuICAgICAgICBlYXNpbmdGbjogdmlzZW1lRWFzaW5nRm4sXHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gUmVnaXN0ZXIgdGhlIHRhbGtpbmcgbGF5ZXJzXHJcbiAgICB0YWxraW5nTGF5ZXJzLmZvckVhY2goKHtuYW1lLCBhbmltYXRpb259KSA9PiB7XHJcbiAgICAgIHRoaXMucmVnaXN0ZXJUYWxraW5nTGF5ZXIobmFtZSwge1xyXG4gICAgICAgIGFuaW1hdGlvbixcclxuICAgICAgICBibGVuZFRpbWU6IHRhbGtpbmdCbGVuZFRpbWUsXHJcbiAgICAgICAgZWFzaW5nRm46IHRhbGtpbmdFYXNpbmdGbixcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEVuc3VyZSB0aGF0IHJlZ2lzdGVyZWQgdmlzZW1lIGFuaW1hdGlvbnMgYXJlIEZyZWVCbGVuZFN0YXRlcy5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGF5ZXJOYW1lIC0gTmFtZSBvZiB0aGUgbGF5ZXIgdGhhdCBjb250YWlucyB0aGUgdmlzZW1lIGFuaW1hdGlvbi5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gYW5pbWF0aW9uTmFtZSAtIE5hbWUgb2YgdGhlIGFuaW1hdGlvbi5cclxuICAgKi9cclxuICBfcmVnaXN0ZXJWaXNlbWVBbmltYXRpb24obGF5ZXJOYW1lLCBhbmltYXRpb25OYW1lKSB7XHJcbiAgICBpZiAodGhpcy5fbWFuYWdlZExheWVyc1tsYXllck5hbWVdLmFuaW1hdGlvbnNbYW5pbWF0aW9uTmFtZV0uaXNBY3RpdmUpIHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIHRoaXMuX2hvc3QuQW5pbWF0aW9uRmVhdHVyZS5nZXRBbmltYXRpb25UeXBlKFxyXG4gICAgICAgICAgbGF5ZXJOYW1lLFxyXG4gICAgICAgICAgYW5pbWF0aW9uTmFtZVxyXG4gICAgICAgICkgIT09ICdmcmVlQmxlbmQnXHJcbiAgICAgICkge1xyXG4gICAgICAgIC8vIFdhcm4gYW5kIGRlYWN0aXZhdGUgaWYgdGhlIHJlZ2lzdGVyZWQgc3RhdGUgaXMgbm90IGZyZWVCbGVuZFxyXG4gICAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICAgIGBDYW5ub3QgcmVnaXN0ZXIgTGlwc3luYyB2aXNlbWUgYW5pbWF0aW9uICR7YW5pbWF0aW9uTmFtZX0gb24gbGF5ZXIgJHtsYXllck5hbWV9IGZvciBob3N0ICR7dGhpcy5faG9zdC5pZH0uIFZpc2VtZSBhbmltYXRpb25zIG11c3QgYmUgb2YgdHlwZSAnZnJlZUJsZW5kJy5gXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLl9tYW5hZ2VkTGF5ZXJzW2xheWVyTmFtZV0uYW5pbWF0aW9uc1tcclxuICAgICAgICAgIGFuaW1hdGlvbk5hbWVcclxuICAgICAgICBdLmlzQWN0aXZlID0gZmFsc2U7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGJsZW5kV2VpZ2h0cyBjYW4gYmUgbWFuaXB1bGF0ZWQgbm93XHJcbiAgICAgICAgY29uc3Qgd2VpZ2h0TmFtZXMgPSB0aGlzLl9ob3N0LkFuaW1hdGlvbkZlYXR1cmUuZ2V0QW5pbWF0aW9uQmxlbmROYW1lcyhcclxuICAgICAgICAgIGxheWVyTmFtZSxcclxuICAgICAgICAgIGFuaW1hdGlvbk5hbWVcclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbnN0IHt2aXNlbWVNYXB9ID0gdGhpcy5fbWFuYWdlZExheWVyc1tsYXllck5hbWVdLmFuaW1hdGlvbnNbXHJcbiAgICAgICAgICBhbmltYXRpb25OYW1lXHJcbiAgICAgICAgXTtcclxuXHJcbiAgICAgICAgT2JqZWN0LnZhbHVlcyh2aXNlbWVNYXApLmZvckVhY2godmlzZW1lT3B0aW9ucyA9PiB7XHJcbiAgICAgICAgICB2aXNlbWVPcHRpb25zLmlzQWN0aXZlID0gd2VpZ2h0TmFtZXMuaW5jbHVkZXModmlzZW1lT3B0aW9ucy5uYW1lKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSWYgdGhlIGFkZGVkIGZlYXR1cmUgaXMgVGV4dFRvU3BlZWNoLCB1cGRhdGUgaXRzIHNwZWVjaE1hcmtPZmZzZXQgdmFyaWFibGUuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHR5cGVOYW1lIC0gTmFtZSBvZiB0aGUgdHlwZSBvZiBmZWF0dXJlIHRoYXQgd2FzIGFkZGVkLlxyXG4gICAqL1xyXG4gIF9vbkZlYXR1cmVBZGRlZCh0eXBlTmFtZSkge1xyXG4gICAgdGhpcy5fdmlzZW1lTGF5ZXJzID0gdGhpcy5fdmlzZW1lTGF5ZXJzIHx8IHt9O1xyXG4gICAgdGhpcy5fdGFsa2luZ0xheWVycyA9IHRoaXMuX3RhbGtpbmdMYXllcnMgfHwge307XHJcblxyXG4gICAgc3VwZXIuX29uRmVhdHVyZUFkZGVkKHR5cGVOYW1lKTtcclxuXHJcbiAgICBpZiAodHlwZU5hbWUgPT09ICdUZXh0VG9TcGVlY2hGZWF0dXJlJykge1xyXG4gICAgICB0aGlzLl9ob3N0LlRleHRUb1NwZWVjaEZlYXR1cmUuc3BlZWNobWFya09mZnNldCA9XHJcbiAgICAgICAgLXRoaXMuX3Zpc2VtZUxlYWRUaW1lIHx8IDA7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBfb25MYXllckFkZGVkKHtuYW1lfSkge1xyXG4gICAgc3VwZXIuX29uTGF5ZXJBZGRlZCh7bmFtZX0pO1xyXG5cclxuICAgIC8vIFZhbGlkYXRlIHRoZSB2aXNlbWUgYW5pbWF0aW9uXHJcbiAgICBpZiAodGhpcy5fdmlzZW1lTGF5ZXJzW25hbWVdICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhpcy5fcmVnaXN0ZXJWaXNlbWVBbmltYXRpb24obmFtZSwgdGhpcy5fdmlzZW1lTGF5ZXJzW25hbWVdKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIF9vbkFuaW1hdGlvbkFkZGVkKHtsYXllck5hbWUsIGFuaW1hdGlvbk5hbWV9KSB7XHJcbiAgICBzdXBlci5fb25BbmltYXRpb25BZGRlZCh7bGF5ZXJOYW1lfSk7XHJcblxyXG4gICAgLy8gVmFsaWRhdGUgdGhlIHZpc2VtZSBhbmltYXRpb25cclxuICAgIGlmICh0aGlzLl92aXNlbWVMYXllcnNbbGF5ZXJOYW1lXSA9PT0gYW5pbWF0aW9uTmFtZSkge1xyXG4gICAgICB0aGlzLl9yZWdpc3RlclZpc2VtZUFuaW1hdGlvbihsYXllck5hbWUsIHRoaXMuX3Zpc2VtZUxheWVyc1tsYXllck5hbWVdKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIF9vblBsYXkoKSB7XHJcbiAgICAvLyBUdXJuIG9uIHRoZSBsYXllciB3ZWlnaHRzXHJcbiAgICB0aGlzLmVuYWJsZSgpO1xyXG5cclxuICAgIC8vIFNldCB0aGUgY3VycmVudCBhbmltYXRpb25zXHJcbiAgICBbdGhpcy5fdmlzZW1lTGF5ZXJzLCB0aGlzLl90YWxraW5nTGF5ZXJzXS5mb3JFYWNoKGxheWVycyA9PiB7XHJcbiAgICAgIE9iamVjdC5lbnRyaWVzKGxheWVycykuZm9yRWFjaCgoW2xheWVyTmFtZSwgYW5pbWF0aW9uTmFtZV0pID0+IHtcclxuICAgICAgICBpZiAodGhpcy5fbWFuYWdlZExheWVyc1tsYXllck5hbWVdLmFuaW1hdGlvbnNbYW5pbWF0aW9uTmFtZV0uaXNBY3RpdmUpIHtcclxuICAgICAgICAgIHRoaXMuX2hvc3QuQW5pbWF0aW9uRmVhdHVyZS5yZXN1bWVBbmltYXRpb24obGF5ZXJOYW1lLCBhbmltYXRpb25OYW1lKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBfb25QYXVzZSgpIHtcclxuICAgIHRoaXMuX29uU3RvcCgpO1xyXG4gIH1cclxuXHJcbiAgX29uUmVzdW1lKCkge1xyXG4gICAgdGhpcy5fb25QbGF5KCk7XHJcbiAgfVxyXG5cclxuICBfb25TdG9wKCkge1xyXG4gICAgLy8gVHVybiBvZmYgdGhlIGxheWVyIHdlaWdodHNcclxuICAgIHRoaXMuZGlzYWJsZSgpO1xyXG5cclxuICAgIC8vIFBhdXNlIHRoZSBjdXJyZW50IGFuaW1hdGlvbnNcclxuICAgIFt0aGlzLl92aXNlbWVMYXllcnMsIHRoaXMuX3RhbGtpbmdMYXllcnNdLmZvckVhY2gobGF5ZXJzID0+IHtcclxuICAgICAgT2JqZWN0LmVudHJpZXMobGF5ZXJzKS5mb3JFYWNoKChbbGF5ZXJOYW1lLCBhbmltYXRpb25OYW1lXSkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLl9tYW5hZ2VkTGF5ZXJzW2xheWVyTmFtZV0uYW5pbWF0aW9uc1thbmltYXRpb25OYW1lXS5pc0FjdGl2ZSkge1xyXG4gICAgICAgICAgdGhpcy5faG9zdC5BbmltYXRpb25GZWF0dXJlLnBhdXNlQW5pbWF0aW9uKGxheWVyTmFtZSwgYW5pbWF0aW9uTmFtZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogV2hlbiB2aXNlbWUgZXZlbnRzIGFyZSBjYXVnaHQsIHR1cm4gb24gd2VpZ2h0IG9mIHRoZSBuZXcgdmlzZW1lIGZvciB0aGUgZHVyYXRpb25cclxuICAgKiBvZiB0aGUgc3BlZWNoIG1hcmssIHRoZW4gdHVybiB3ZWlnaHQgYmFjayBvZmYuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IGV2ZW50IC0gRXZlbnQgZGF0YSBwYXNzZWQgZnJvbSB0aGUgc3BlZWNoLlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBldmVudC5tYXJrIC0gU3BlZWNobWFyayBvYmplY3QuXHJcbiAgICovXHJcbiAgYXN5bmMgX29uVmlzZW1lKHttYXJrfSkge1xyXG4gICAgT2JqZWN0LmVudHJpZXModGhpcy5fdmlzZW1lTGF5ZXJzKS5mb3JFYWNoKChbbGF5ZXJOYW1lLCBhbmltTmFtZV0pID0+IHtcclxuICAgICAgLy8gTWFrZSBzdXJlIHRoZSBsYXllciBjYW4gYmUgbWFuaXB1bGF0ZWRcclxuICAgICAgY29uc3Qge2lzQWN0aXZlLCB2aXNlbWVNYXB9ID0gdGhpcy5fbWFuYWdlZExheWVyc1tsYXllck5hbWVdLmFuaW1hdGlvbnNbXHJcbiAgICAgICAgYW5pbU5hbWVcclxuICAgICAgXTtcclxuXHJcbiAgICAgIGlmICghaXNBY3RpdmUpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIFRha2UgdmFyaWFibGVzIGZyb20gdGhlIHZpc2VtZSBpZiB0aGV5IGV4aXN0IGFuZCBkZWZhdWx0IHRvIHRoZSBsYXllclxyXG4gICAgICBjb25zdCB7XHJcbiAgICAgICAgbmFtZTogdmlzZW1lLFxyXG4gICAgICAgIGlzQWN0aXZlOiBpc1Zpc2VtZUFjdGl2ZSxcclxuICAgICAgICBkZWNheVJhdGUsXHJcbiAgICAgICAgYmxlbmRUaW1lLFxyXG4gICAgICAgIGVhc2luZ0ZuLFxyXG4gICAgICAgIG92ZXJyaWRlV2VpZ2h0LFxyXG4gICAgICB9ID0ge1xyXG4gICAgICAgIC4uLnRoaXMuX21hbmFnZWRMYXllcnNbbGF5ZXJOYW1lXSxcclxuICAgICAgICAuLi52aXNlbWVNYXBbbWFyay52YWx1ZV0sXHJcbiAgICAgIH07XHJcblxyXG4gICAgICBjb25zdCB2aXNlbWVOYW1lcyA9IHRoaXMuX2hvc3QuQW5pbWF0aW9uRmVhdHVyZS5nZXRBbmltYXRpb25CbGVuZE5hbWVzKFxyXG4gICAgICAgIGxheWVyTmFtZSxcclxuICAgICAgICBhbmltTmFtZVxyXG4gICAgICApO1xyXG5cclxuICAgICAgLy8gTWFrZSBzdXJlIHRoZSBuZXcgdmlzZW1lIGhhcyBhbiBhY3RpdmUgZnJlZUJsZW5kIHdlaWdodFxyXG4gICAgICBpZiAoIWlzVmlzZW1lQWN0aXZlIHx8ICF2aXNlbWVOYW1lcy5pbmNsdWRlcyh2aXNlbWUpKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBGaW5kIHRoZSBwZWFrIHdlaWdodCBmb3IgdGhlIHZpc2VtZSBhbmQgdGhlIGFtb3VudCBvZiB0aW1lIGl0IHNob3VsZFxyXG4gICAgICAvLyB0YWtlIHRvIHJlYWNoIGl0XHJcbiAgICAgIGxldCB3ZWlnaHQgPSAxO1xyXG4gICAgICBjb25zdCBkdXJhdGlvbiA9IG1hcmsuZHVyYXRpb24gLyAxMDAwO1xyXG4gICAgICBpZiAoZHVyYXRpb24gPCBibGVuZFRpbWUpIHtcclxuICAgICAgICBjb25zdCBsZXJwRmFjdG9yID0gYmxlbmRUaW1lID4gMCA/IGR1cmF0aW9uIC8gYmxlbmRUaW1lIDogMTtcclxuICAgICAgICB3ZWlnaHQgPVxyXG4gICAgICAgICAgb3ZlcnJpZGVXZWlnaHQgIT09IHVuZGVmaW5lZFxyXG4gICAgICAgICAgICA/IG92ZXJyaWRlV2VpZ2h0XHJcbiAgICAgICAgICAgIDogTWF0aFV0aWxzLmxlcnAoMCwgMSwgbGVycEZhY3Rvcik7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgYmxlbmRJblRpbWUgPSBNYXRoLm1pbihkdXJhdGlvbiwgYmxlbmRUaW1lKTtcclxuXHJcbiAgICAgIC8vIEZpbmQgdGhlIGFtb3VudCBhbmQgdGltZSB2aXNlbWUgd2lsbCBiZSBoZWxkIGZvclxyXG4gICAgICBjb25zdCBob2xkVGltZSA9IGR1cmF0aW9uIC0gYmxlbmRUaW1lO1xyXG5cclxuICAgICAgaWYgKGhvbGRUaW1lIDwgMCkge1xyXG4gICAgICAgIC8vIFBlcmZvcm0gaW4gLT4gb3V0IGFuaW1hdGlvblxyXG4gICAgICAgIHRoaXMuX2FuaW1hdGVTaW1wbGVWaXNlbWUoXHJcbiAgICAgICAgICBsYXllck5hbWUsXHJcbiAgICAgICAgICBhbmltTmFtZSxcclxuICAgICAgICAgIHZpc2VtZSxcclxuICAgICAgICAgIHdlaWdodCxcclxuICAgICAgICAgIGJsZW5kSW5UaW1lLFxyXG4gICAgICAgICAgYmxlbmRUaW1lLFxyXG4gICAgICAgICAgZWFzaW5nRm5cclxuICAgICAgICApO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IGxlcnBGYWN0b3IgPVxyXG4gICAgICAgICAgZGVjYXlSYXRlLnNlY29uZHMgPiAwID8gaG9sZFRpbWUgLyBkZWNheVJhdGUuc2Vjb25kcyA6IDE7XHJcbiAgICAgICAgLy8gUGVyZm9ybSBpbiAtPiBob2xkIC0+IG91dCBhbmltYXRpb25cclxuICAgICAgICBjb25zdCBkZWNheVdlaWdodCA9IE1hdGhVdGlscy5sZXJwKFxyXG4gICAgICAgICAgd2VpZ2h0LFxyXG4gICAgICAgICAgd2VpZ2h0ICogZGVjYXlSYXRlLmFtb3VudCxcclxuICAgICAgICAgIE1hdGgubWluKDEsIGxlcnBGYWN0b3IpXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLl9hbmltYXRlSGVsZFZpc2VtZShcclxuICAgICAgICAgIGxheWVyTmFtZSxcclxuICAgICAgICAgIGFuaW1OYW1lLFxyXG4gICAgICAgICAgdmlzZW1lLFxyXG4gICAgICAgICAgd2VpZ2h0LFxyXG4gICAgICAgICAgZGVjYXlXZWlnaHQsXHJcbiAgICAgICAgICBibGVuZEluVGltZSxcclxuICAgICAgICAgIGhvbGRUaW1lLFxyXG4gICAgICAgICAgYmxlbmRUaW1lLFxyXG4gICAgICAgICAgZWFzaW5nRm5cclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFuaW1hdGUgYSB2aXNlbWUgYmxlbmQgd2VpZ2h0IHRvd2FyZHMgYSB2YWx1ZSBhbmQgdGhlbiBiYWNrIHRvIHplcm8uXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVyTmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRoYXQgY29udGFpbnMgdGhlIHZpc2VtZS5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gYW5pbU5hbWUgLSBOYW1lIG9mIHRoZSBmcmVlYmxlbmQgYW5pbWF0aW9uIHRoYXQgY29udGFpbnNcclxuICAgKiB0aGUgdmlzZW1lLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB2aXNlbWVOYW1lIC0gTmFtZSBvZiB0aGUgYmxlbmQgd2VpZ2h0IHRvIG1hbmlwdWxhdGUuXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IHdlaWdodCAtIFBlYWsgd2VpZ2h0IHRvIGFuaW1hdGUgdG93YXJkcy5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gYmxlbmRJblRpbWUgLSBBbW91bnQgb2YgdGltZSBpdCBzaG91bGQgdGFrZSB0byByZWFjaCB0aGVcclxuICAgKiBwZWFrIHdlaWdodC5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gYmxlbmRPdXRUaW1lIC0gQW1vdW50IG9mIHRpbWUgaXQgc2hvdWxkIHRha2UgdG8gYW5pbWF0ZSBiYWNrXHJcbiAgICogdG8gemVybyBhZnRlciByZWFjaGluZyB0aGUgcGVhayB3ZWlnaHQuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZWFzaW5nRm4gLSBFYXNpbmcgZnVuY3Rpb24gdG8gdXNlIGR1cmluZyBhbmltYXRpb24uXHJcbiAgICovXHJcbiAgX2FuaW1hdGVTaW1wbGVWaXNlbWUoXHJcbiAgICBsYXllck5hbWUsXHJcbiAgICBhbmltTmFtZSxcclxuICAgIHZpc2VtZU5hbWUsXHJcbiAgICBwZWFrV2VpZ2h0LFxyXG4gICAgYmxlbmRJblRpbWUsXHJcbiAgICBibGVuZE91dFRpbWUsXHJcbiAgICBlYXNpbmdGblxyXG4gICkge1xyXG4gICAgLy8gQW5pbWF0ZSB0b3dhcmRzIHRoZSBwZWFrIHZhbHVlXHJcbiAgICBjb25zdCB3ZWlnaHRQcm9taXNlID0gdGhpcy5faG9zdC5BbmltYXRpb25GZWF0dXJlLnNldEFuaW1hdGlvbkJsZW5kV2VpZ2h0KFxyXG4gICAgICBsYXllck5hbWUsXHJcbiAgICAgIGFuaW1OYW1lLFxyXG4gICAgICB2aXNlbWVOYW1lLFxyXG4gICAgICBwZWFrV2VpZ2h0LFxyXG4gICAgICBibGVuZEluVGltZSxcclxuICAgICAgZWFzaW5nRm5cclxuICAgICk7XHJcblxyXG4gICAgLy8gQW5pbWF0ZSBiYWNrIHRvIHplcm8gaWYgdGhlcmUgd2FzIG5vIHdlaWdodCBpbnRlcnJ1cHRpb25cclxuICAgIHdlaWdodFByb21pc2UudGhlbigoKSA9PiB7XHJcbiAgICAgIGlmICghd2VpZ2h0UHJvbWlzZS5jYW5jZWxlZCkge1xyXG4gICAgICAgIHRoaXMuX2hvc3QuQW5pbWF0aW9uRmVhdHVyZS5zZXRBbmltYXRpb25CbGVuZFdlaWdodChcclxuICAgICAgICAgIGxheWVyTmFtZSxcclxuICAgICAgICAgIGFuaW1OYW1lLFxyXG4gICAgICAgICAgdmlzZW1lTmFtZSxcclxuICAgICAgICAgIDAsXHJcbiAgICAgICAgICBibGVuZE91dFRpbWUsXHJcbiAgICAgICAgICBlYXNpbmdGblxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQW5pbWF0ZSBhIHZpc2VtZSBibGVuZCB3ZWlnaHQgdG93YXJkcyBhIHZhbHVlIGFuZCB0aGVuIGJhY2sgdG8gemVyby5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGF5ZXJOYW1lIC0gTmFtZSBvZiB0aGUgbGF5ZXIgdGhhdCBjb250YWlucyB0aGUgdmlzZW1lLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhbmltTmFtZSAtIE5hbWUgb2YgdGhlIGZyZWVibGVuZCBhbmltYXRpb24gdGhhdCBjb250YWluc1xyXG4gICAqIHRoZSB2aXNlbWUuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHZpc2VtZU5hbWUgLSBOYW1lIG9mIHRoZSBibGVuZCB3ZWlnaHQgdG8gbWFuaXB1bGF0ZS5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gcGVha1dlaWdodCAtIFBlYWsgd2VpZ2h0IHRvIGFuaW1hdGUgdG93YXJkcy5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gZGVjYXlXZWlnaHQgLSBXZWlnaHQgdG8gYW5pbWF0ZSB0b3dhcmRzIGFmdGVyIHJlYWNoaW5nIHRoZVxyXG4gICAqIHBlYWsgd2VpZ2h0LlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBibGVuZEluVGltZSAtIEFtb3VudCBvZiB0aW1lIGl0IHNob3VsZCB0YWtlIHRvIHJlYWNoIHRoZVxyXG4gICAqIHBlYWsgd2VpZ2h0LlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBob2xkVGltZSAtIEFtb3VudCBvZiB0aW1lIGl0IHNob3VsZCB0YWtlIHRvIHJlYWNoIHRoZSBkZWNheVxyXG4gICAqIHdlaWdodCBhZnRlciB0aGUgcGVhayB3ZWlnaHQgaGFzIGJlZW4gcmVhY2hlZC5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gYmxlbmRPdXRUaW1lIC0gQW1vdW50IG9mIHRpbWUgaXQgc2hvdWxkIHRha2UgdG8gYW5pbWF0ZSBiYWNrXHJcbiAgICogdG8gemVybyBhZnRlciByZWFjaGluZyB0aGUgZGVjYXkgd2VpZ2h0LlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGVhc2luZ0ZuIC0gRWFzaW5nIGZ1bmN0aW9uIHRvIHVzZSBkdXJpbmcgYW5pbWF0aW9uLlxyXG4gICAqL1xyXG4gIGFzeW5jIF9hbmltYXRlSGVsZFZpc2VtZShcclxuICAgIGxheWVyTmFtZSxcclxuICAgIGFuaW1OYW1lLFxyXG4gICAgdmlzZW1lTmFtZSxcclxuICAgIHBlYWtXZWlnaHQsXHJcbiAgICBkZWNheVdlaWdodCxcclxuICAgIGJsZW5kSW5UaW1lLFxyXG4gICAgaG9sZFRpbWUsXHJcbiAgICBibGVuZE91dFRpbWUsXHJcbiAgICBlYXNpbmdGblxyXG4gICkge1xyXG4gICAgLy8gQW5pbWF0ZSB0b3dhcmRzIHRoZSBwZWFrIHZhbHVlXHJcbiAgICBjb25zdCBzdGFydFByb21pc2UgPSB0aGlzLl9ob3N0LkFuaW1hdGlvbkZlYXR1cmUuc2V0QW5pbWF0aW9uQmxlbmRXZWlnaHQoXHJcbiAgICAgIGxheWVyTmFtZSxcclxuICAgICAgYW5pbU5hbWUsXHJcbiAgICAgIHZpc2VtZU5hbWUsXHJcbiAgICAgIHBlYWtXZWlnaHQsXHJcbiAgICAgIGJsZW5kSW5UaW1lLFxyXG4gICAgICBlYXNpbmdGblxyXG4gICAgKTtcclxuXHJcbiAgICBhd2FpdCBzdGFydFByb21pc2U7XHJcblxyXG4gICAgaWYgKCFzdGFydFByb21pc2UuY2FuY2VsZWQpIHtcclxuICAgICAgLy8gQW5pbWF0ZSB0b3dhcmRzIHRoZSBkZWNheSB2YWx1ZSBpZiB0aGVyZSB3YXMgbm8gd2VpZ2h0IGludGVycnVwdGlvblxyXG4gICAgICBjb25zdCBob2xkUHJvbWlzZSA9IHRoaXMuX2hvc3QuQW5pbWF0aW9uRmVhdHVyZS5zZXRBbmltYXRpb25CbGVuZFdlaWdodChcclxuICAgICAgICBsYXllck5hbWUsXHJcbiAgICAgICAgYW5pbU5hbWUsXHJcbiAgICAgICAgdmlzZW1lTmFtZSxcclxuICAgICAgICBkZWNheVdlaWdodCxcclxuICAgICAgICBob2xkVGltZSxcclxuICAgICAgICBlYXNpbmdGblxyXG4gICAgICApO1xyXG5cclxuICAgICAgYXdhaXQgaG9sZFByb21pc2U7XHJcblxyXG4gICAgICBpZiAoIWhvbGRQcm9taXNlLmNhbmNlbGVkKSB7XHJcbiAgICAgICAgLy8gQW5pbWF0ZSBiYWNrIHRvIHplcm8gaWYgdGhlcmUgd2FzIG5vIHdlaWdodCBpbnRlcnJ1cHRpb25cclxuICAgICAgICB0aGlzLl9ob3N0LkFuaW1hdGlvbkZlYXR1cmUuc2V0QW5pbWF0aW9uQmxlbmRXZWlnaHQoXHJcbiAgICAgICAgICBsYXllck5hbWUsXHJcbiAgICAgICAgICBhbmltTmFtZSxcclxuICAgICAgICAgIHZpc2VtZU5hbWUsXHJcbiAgICAgICAgICAwLFxyXG4gICAgICAgICAgYmxlbmRPdXRUaW1lLFxyXG4gICAgICAgICAgZWFzaW5nRm5cclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIGFuZCBzZXRzIHRoZSBhbW91bnQgb2YgdGltZSBpbiBzZWNvbmRzIHRvIG5lZ2F0aXZlbHkgb2Zmc2V0IHNwZWVjaG1hcmtcclxuICAgKiBlbWlzc2lvbiBieS5cclxuICAgKlxyXG4gICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICovXHJcbiAgZ2V0IHZpc2VtZUxlYWRUaW1lKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3Zpc2VtZUxlYWRUaW1lO1xyXG4gIH1cclxuXHJcbiAgc2V0IHZpc2VtZUxlYWRUaW1lKHNlY29uZHMpIHtcclxuICAgIHRoaXMuX3Zpc2VtZUxlYWRUaW1lID0gc2Vjb25kcztcclxuXHJcbiAgICBpZiAodGhpcy5faG9zdC5UZXh0VG9TcGVlY2hGZWF0dXJlKSB7XHJcbiAgICAgIHRoaXMuX2hvc3QuVGV4dFRvU3BlZWNoRmVhdHVyZS5zcGVlY2htYXJrT2Zmc2V0ID0gLXNlY29uZHM7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTdGFydCBrZWVwaW5nIHRyYWNrIG9mIGFuIGFuaW1hdGlvbiBsYXllciB0aGF0IG93bnMgYSBmcmVlQmxlbmQgYW5pbWF0aW9uXHJcbiAgICogd2l0aCBibGVuZFdlaWdodHMgY29ycmVzcG9uZGluZyB0byB2aXNlbWVzLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVyTmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRvIGtlZXAgdHJhY2sgb2YuXHJcbiAgICogQHBhcmFtIHtPYmplY3Q9fSBvcHRpb25zIC0gT3B0aW9ucyBmb3IgdGhlIGxheWVyLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5hbmltYXRpb249J3Zpc2VtZXMnXSAtIE5hbWUgb2YgdGhlIGFuaW1hdGlvbiBvbiB0aGVcclxuICAgKiBsYXllciB0aGF0IHdpbGwgYmUgcGxheWVkIGR1cmluZyBzcGVlY2guIFRoaXMgYW5pbWF0aW9uIG11c3QgYmUgb2YgdHlwZVxyXG4gICAqIGZyZWVCbGVuZC5cclxuICAgKiBAcGFyYW0ge09iamVjdD19IGRlY2F5UmF0ZVxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbZGVjYXlSYXRlLmFtb3VudD0wLjVdIC0gVGhlIHBlcmNlbnRhZ2UgdG8gZGVjcmVhc2UgdGhlIHZpc2VtZSdzXHJcbiAgICogcGVhayB2YWx1ZSBieSBvdmVyIHRpbWUgb25jZSB0aGUgcGVhayB2YWx1ZSBoYXMgYmVlbiByZWFjaGVkLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbZGVjYXlSYXRlLnNlY29uZHM9MC41XSAtIFRoZSBhbW91bnQgb2YgdGltZSBpbiBzZWNvbmRzIHRvXHJcbiAgICogZGVjcmVhc2UgdGhlIHZpc2VtZSdzIHdlaWdodCBvbmNlIGl0IGhhcyByZWFjaGVkIGl0cyBwZWFrIHZhbHVlLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyPX0gW29wdGlvbnMuYmxlbmRUaW1lPVtMaXBzeW5jRmVhdHVyZS5ERUZBVUxUX0xBWUVSX09QVElPTlMuYmxlbmRUaW1lXXtAbGluayBMaXBzeW5jRmVhdHVyZSNERUZBVUxUX0xBWUVSX09QVElPTlMjYmxlbmRUaW1lfV0gLVxyXG4gICAqIERlZmF1bHQgYW1vdW50IG9mIHRpbWUgdG8gdXNlIHdoZW4gbWFuaXB1bGF0aW5nIGFuaW1hdGlvbiBibGVuZFdlaWdodHMuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9wdGlvbnMuZWFzaW5nRm4gLSBEZWZhdWx0IGVhc2luZyBmdW5jdGlvbiB0byB1c2Ugd2hlblxyXG4gICAqIG1hbmlwdWxhdGluZyBhbmltYXRpb24gYmxlbmRXZWlnaHRzLlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucy52aXNlbWVNYXA9RGVmYXVsdFZpc2VtZU1hcF0gLSBPYmplY3QgY29udGFpbmluZyBrZXkvdmFsdWUgcGFpcnMgb2ZcclxuICAgKiBQb2xseSB2aXNlbWUgbmFtZXMgbWFwcGVkIHRvIG9iamVjdHMgY29udGFpbmluZyB0aGUgbmFtZSBvZiB0aGUgY29ycmVzcG9uZGluZ1xyXG4gICAqIGFuaW1hdGlvbiBibGVuZFdlaWdodCBhbmQgYW55IG90aGVyIGFuaW1hdGlvbiBvcHRpb25zIHRvIHVzZSBzdWNoIGFzIHZpc2VtZVxyXG4gICAqIHNwZWNpZmljIGJsZW5kIHRpbWVzIGFuZCBlYXNpbmcgZnVuY3Rpb25zLlxyXG4gICAqL1xyXG4gIHJlZ2lzdGVyVmlzZW1lTGF5ZXIoXHJcbiAgICBsYXllck5hbWUsXHJcbiAgICB7XHJcbiAgICAgIGFuaW1hdGlvbiA9ICd2aXNlbWVzJyxcclxuICAgICAgZGVjYXlSYXRlID0ge2Ftb3VudDogMC41LCBzZWNvbmRzOiAwLjV9LFxyXG4gICAgICBibGVuZFRpbWUgPSBMaXBzeW5jRmVhdHVyZS5ERUZBVUxUX0xBWUVSX09QVElPTlMuYmxlbmRUaW1lLFxyXG4gICAgICBlYXNpbmdGbixcclxuICAgICAgdmlzZW1lTWFwID0gRGVmYXVsdFZpc2VtZU1hcCxcclxuICAgIH0gPSB7fVxyXG4gICkge1xyXG4gICAgLy8gUmVnaXN0ZXIgdGhlIGxheWVyIGFuZCBhbmltYXRpb25cclxuICAgIHRoaXMucmVnaXN0ZXJMYXllcihsYXllck5hbWUsIHtcclxuICAgICAgZGVjYXlSYXRlLFxyXG4gICAgICBibGVuZFRpbWUsXHJcbiAgICAgIGVhc2luZ0ZuLFxyXG4gICAgICBhbmltYXRpb25zOiB7W2FuaW1hdGlvbl06IHt2aXNlbWVNYXB9fSxcclxuICAgIH0pO1xyXG4gICAgdGhpcy5fdmlzZW1lTGF5ZXJzW2xheWVyTmFtZV0gPSBhbmltYXRpb247XHJcblxyXG4gICAgLy8gVmFsaWRhdGUgdGhlIHZpc2VtZSBhbmltYXRpb25cclxuICAgIHRoaXMuX3JlZ2lzdGVyVmlzZW1lQW5pbWF0aW9uKGxheWVyTmFtZSwgYW5pbWF0aW9uKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFN0YXJ0IGtlZXBpbmcgdHJhY2sgb2YgYW4gYW5pbWF0aW9uIGxheWVyIHRoYXQgY29udGFpbnMgYSBsb29waW5nIGFuaW1hdGlvblxyXG4gICAqIHRvIGJlIHBsYXllZCBkdXJpbmcgc3BlZWNoLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVyTmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRvIGtlZXAgdHJhY2sgb2YuXHJcbiAgICogQHBhcmFtIHtPYmplY3Q9fSBvcHRpb25zIC0gT3B0aW9ucyBmb3IgdGhlIGxheWVyLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5hbmltYXRpb249J3N0YW5kX3RhbGsnXSAtIE5hbWUgb2YgdGhlIGFuaW1hdGlvbiBvbiB0aGVcclxuICAgKiBsYXllciB0aGF0IHdpbGwgYmUgcGxheWVkIGR1cmluZyBzcGVlY2guXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLmJsZW5kVGltZT1bTGlwc3luY0ZlYXR1cmUuREVGQVVMVF9MQVlFUl9PUFRJT05TLmJsZW5kVGltZV17QGxpbmsgTGlwc3luY0ZlYXR1cmUjREVGQVVMVF9MQVlFUl9PUFRJT05TI2JsZW5kVGltZX1dIC1cclxuICAgKiBEZWZhdWx0IGFtb3VudCBvZiB0aW1lIHRvIHVzZSB3aGVuIG1hbmlwdWxhdGluZyB0aGUgbGF5ZXIncyB3ZWlnaHRzLlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvcHRpb25zLmVhc2luZ0ZuIC0gRGVmYXVsdCBlYXNpbmcgZnVuY3Rpb24gdG8gdXNlIHdoZW5cclxuICAgKiBtYW5pcHVsYXRpbmcgdGhlIGxheWVyJ3Mgd2VpZ2h0cy5cclxuICAgKi9cclxuICByZWdpc3RlclRhbGtpbmdMYXllcihcclxuICAgIGxheWVyTmFtZSxcclxuICAgIHtcclxuICAgICAgYW5pbWF0aW9uID0gJ3N0YW5kX3RhbGsnLFxyXG4gICAgICBibGVuZFRpbWUgPSBMaXBzeW5jRmVhdHVyZS5ERUZBVUxUX0xBWUVSX09QVElPTlMuYmxlbmRUaW1lLFxyXG4gICAgICBlYXNpbmdGbixcclxuICAgIH0gPSB7fVxyXG4gICkge1xyXG4gICAgLy8gUmVnaXN0ZXIgdGhlIGxheWVyIGFuZCBhbmltYXRpb25cclxuICAgIHRoaXMucmVnaXN0ZXJMYXllcihsYXllck5hbWUsIHtcclxuICAgICAgYmxlbmRUaW1lLFxyXG4gICAgICBlYXNpbmdGbixcclxuICAgICAgYW5pbWF0aW9uczoge1thbmltYXRpb25dOiB7fX0sXHJcbiAgICB9KTtcclxuICAgIHRoaXMuX3RhbGtpbmdMYXllcnNbbGF5ZXJOYW1lXSA9IGFuaW1hdGlvbjtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFkZHMgYSBuYW1lc3BhY2UgdG8gdGhlIGhvc3Qgd2l0aCB0aGUgbmFtZSBvZiB0aGUgZmVhdHVyZSB0byBjb250YWluIHByb3BlcnRpZXNcclxuICAgKiBhbmQgbWV0aG9kcyBmcm9tIHRoZSBmZWF0dXJlIHRoYXQgdXNlcnMgb2YgdGhlIGhvc3QgbmVlZCBhY2Nlc3MgdG8uXHJcbiAgICpcclxuICAgKiBAc2VlIExpcHN5bmNGZWF0dXJlXHJcbiAgICovXHJcbiAgaW5zdGFsbEFwaSgpIHtcclxuICAgIC8qKlxyXG4gICAgICogQGlubmVyXHJcbiAgICAgKiBAbmFtZXNwYWNlIExpcHN5bmNGZWF0dXJlXHJcbiAgICAgKi9cclxuICAgIGNvbnN0IGFwaSA9IHN1cGVyLmluc3RhbGxBcGkoKTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBtZW1iZXJvZiBMaXBzeW5jRmVhdHVyZVxyXG4gICAgICogQG5hbWUgcmVnaXN0ZXJMYXllclxyXG4gICAgICogQGluc3RhbmNlXHJcbiAgICAgKiBAbWV0aG9kXHJcbiAgICAgKiBAc2VlIE1hbmFnZWRBbmltYXRpb25MYXllckludGVyZmFjZSNyZWdpc3RlckxheWVyXHJcbiAgICAgKi9cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBtZW1iZXJvZiBMaXBzeW5jRmVhdHVyZVxyXG4gICAgICogQG5hbWUgcmVnaXN0ZXJBbmltYXRpb25cclxuICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICogQG1ldGhvZFxyXG4gICAgICogQHNlZSBNYW5hZ2VkQW5pbWF0aW9uTGF5ZXJJbnRlcmZhY2UjcmVnaXN0ZXJBbmltYXRpb25cclxuICAgICAqL1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQG1lbWJlcm9mIExpcHN5bmNGZWF0dXJlXHJcbiAgICAgKiBAbmFtZSBzZXRMYXllcldlaWdodHNcclxuICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICogQG1ldGhvZFxyXG4gICAgICogQHNlZSBNYW5hZ2VkQW5pbWF0aW9uTGF5ZXJJbnRlcmZhY2Ujc2V0TGF5ZXJXZWlnaHRzXHJcbiAgICAgKi9cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBtZW1iZXJvZiBMaXBzeW5jRmVhdHVyZVxyXG4gICAgICogQG5hbWUgZW5hYmxlXHJcbiAgICAgKiBAaW5zdGFuY2VcclxuICAgICAqIEBtZXRob2RcclxuICAgICAqIEBzZWUgTWFuYWdlZEFuaW1hdGlvbkxheWVySW50ZXJmYWNlI2VuYWJsZVxyXG4gICAgICovXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAbWVtYmVyb2YgTGlwc3luY0ZlYXR1cmVcclxuICAgICAqIEBuYW1lIGRpc2FibGVcclxuICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICogQG1ldGhvZFxyXG4gICAgICogQHNlZSBNYW5hZ2VkQW5pbWF0aW9uTGF5ZXJJbnRlcmZhY2UjZGlzYWJsZVxyXG4gICAgICovXHJcblxyXG4gICAgT2JqZWN0LmFzc2lnbihhcGksIHtcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBtZW1iZXJvZiBMaXBzeW5jRmVhdHVyZVxyXG4gICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICogQG1ldGhvZFxyXG4gICAgICAgKiBAc2VlIGNvcmUvTGlwc3luY0ZlYXR1cmUjcmVnaXN0ZXJWaXNlbWVMYXllclxyXG4gICAgICAgKi9cclxuICAgICAgcmVnaXN0ZXJWaXNlbWVMYXllcjogdGhpcy5yZWdpc3RlclZpc2VtZUxheWVyLmJpbmQodGhpcyksXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbWVtYmVyb2YgTGlwc3luY0ZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBtZXRob2RcclxuICAgICAgICogQHNlZSBjb3JlL0xpcHN5bmNGZWF0dXJlI3JlZ2lzdGVyVGFsa2luZ0xheWVyXHJcbiAgICAgICAqL1xyXG4gICAgICByZWdpc3RlclRhbGtpbmdMYXllcjogdGhpcy5yZWdpc3RlclRhbGtpbmdMYXllci5iaW5kKHRoaXMpLFxyXG4gICAgfSk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAbWVtYmVyb2YgTGlwc3luY0ZlYXR1cmVcclxuICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICogQG5hbWUgdmlzZW1lTGVhZFRpbWVcclxuICAgICAqIEBzZWUgY29yZS9MaXBzeW5jRmVhdHVyZSN2aXNlbWVMZWFkVGltZVxyXG4gICAgICovXHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoYXBpLCAndmlzZW1lTGVhZFRpbWUnLCB7XHJcbiAgICAgIGdldDogKCkgPT4gdGhpcy52aXNlbWVMZWFkVGltZSxcclxuICAgICAgc2V0OiBzZWNvbmRzID0+IHtcclxuICAgICAgICB0aGlzLnZpc2VtZUxlYWRUaW1lID0gc2Vjb25kcztcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBhcGk7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBMaXBzeW5jRmVhdHVyZTtcclxuZXhwb3J0IHtEZWZhdWx0VmlzZW1lTWFwfTtcclxuIiwiLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cclxuLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXHJcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxyXG5cclxuLyogZXNsaW50LWRpc2FibGUgbWF4LWNsYXNzZXMtcGVyLWZpbGUgKi9cclxuLyogZXNsaW50LWRpc2FibGUgbm8tZW1wdHkgKi9cclxuaW1wb3J0IFRleHRUb1NwZWVjaEZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2UgZnJvbSAnY29yZS9hd3NwYWNrL1RleHRUb1NwZWVjaEZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2UnO1xyXG5cclxuLyoqXHJcbiAqIENsYXNzIGZhY3RvcnkgaW50ZXJmYWNlIGZvciB0aGF0IHJlZ2lzdGVycyBjYWxsYmFjayBtZXRob2Qgd2hlbiBhIHNzbWwgc3BlZWNobWFyayBldmVudCBpcyBlbWl0dGVkLlxyXG4gKlxyXG4gKiBAaW50ZXJmYWNlXHJcbiAqIEBleHRlbmRzIFRleHRUb1NwZWVjaEZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2VcclxuICovXHJcbmNsYXNzIFNTTUxTcGVlY2htYXJrSW50ZXJmYWNlIGV4dGVuZHMgVGV4dFRvU3BlZWNoRmVhdHVyZURlcGVuZGVudEludGVyZmFjZSB7XHJcbiAgLyoqXHJcbiAgICogV2hlbiBzc21sIGV2ZW50cyBhcmUgY2F1Z2h0LCB0aGlzIHdpbGwgdHJ5IHRvIHBhcnNlIHRoZSBzcGVlY2ggbWFyayB2YWx1ZSBhbmQgZXhlY3V0ZSBhbnkgZnVuY3Rpb24gd2hpY2ggbWVldHMgY3JpdGVyaWEgZGVmaW5lZCBpbiB0aGUgdmFsdWUuXHJcbiAgICogU3BlZWNoIG1hcmsgdmFsdWUgd2lsbCBiZSB0cmVhdGVkIGFzIHN0cmluZ2lmaWVkIGpzb24gZm9ybWF0IGNvbnRhaW5pbmcgcmVxdWlyZWQgZmVhdHVyZSBuYW1lLCBmdW5jdGlvbiBuYW1lIGFuZCBhcmd1bWVudCBhcnJheSB0byBwYXNzIGluLlxyXG4gICAqIEV4YW1wbGUgc3BlZWNoIG1hcmsgdmFsdWUgbWlnaHQgbG9vayBsaWtlOiAne1wiZmVhdHVyZVwiOlwiR2VzdHVyZUZlYXR1cmVcIiwgXCJtZXRob2RcIjpcInN3aXRjaFRvR2VzdHVyZVwiLCBcImFyZ3NcIjpbXCJnZW5yaWNBXCIsIDAuNV19J1xyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBldmVudCAtIEV2ZW50IGRhdGEgcGFzc2VkIGZyb20gdGhlIHNwZWVjaC5cclxuICAgKiBAcGFyYW0ge09iamVjdH0gZXZlbnQubWFyayAtIFNwZWVjaG1hcmsgb2JqZWN0LlxyXG4gICAqL1xyXG4gIF9vblNzbWwoe21hcmt9KSB7fVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGVzIGEgY2xhc3MgdGhhdCBpbXBsZW1lbnRzIHtAbGluayBTU01MU3BlZWNobWFya0ludGVyZmFjZX1cclxuICAgKiBhbmQgZXh0ZW5kcyBhIHNwZWNpZmllZCBiYXNlIGNsYXNzLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtDbGFzc30gQmFzZUNsYXNzIC0gVGhlIGNsYXNzIHRvIGV4dGVuZC5cclxuICAgKlxyXG4gICAqIEByZXR1cm4ge0NsYXNzfSBBIGNsYXNzIHRoYXQgZXh0ZW5kcyBgQmFzZUNsYXNzYCBhbmQgaW1wbGVtZW50cyB7QGxpbmsgU1NNTFNwZWVjaG1hcmtJbnRlcmZhY2V9LlxyXG4gICAqL1xyXG4gIHN0YXRpYyBNaXhpbihCYXNlQ2xhc3MpIHtcclxuICAgIGNvbnN0IFBhcmVudENsYXNzID0gVGV4dFRvU3BlZWNoRmVhdHVyZURlcGVuZGVudEludGVyZmFjZS5NaXhpbihCYXNlQ2xhc3MpO1xyXG4gICAgY29uc3QgU1NNTFNwZWVjaE1hcmtNaXhpbiA9IGNsYXNzIGV4dGVuZHMgUGFyZW50Q2xhc3Mge1xyXG4gICAgICBfb25Tc21sKHttYXJrfSkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICBjb25zdCB7ZmVhdHVyZSwgbWV0aG9kLCBhcmdzfSA9IEpTT04ucGFyc2UobWFyay52YWx1ZSk7XHJcbiAgICAgICAgICBpZiAodGhpcy5jb25zdHJ1Y3Rvci5uYW1lID09PSBmZWF0dXJlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNhbGxiYWNrID0gdGhpc1ttZXRob2RdO1xyXG4gICAgICAgICAgICBpZiAoY2FsbGJhY2sgJiYgdHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkodGhpcywgYXJncylcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBjb25zb2xlLndhcm4oYEZ1bmN0aW9uICR7bWV0aG9kfSBkb2VzIG5vdCBleGlzdCB3aXRoaW4gZmVhdHVyZSAke2ZlYXR1cmV9YClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gY2F0Y2goZSkge31cclxuICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gU1NNTFNwZWVjaE1hcmtNaXhpbjtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IFNTTUxTcGVlY2htYXJrSW50ZXJmYWNlO1xyXG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cclxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVC0wXHJcbmltcG9ydCBNYW5hZ2VkQW5pbWF0aW9uTGF5ZXJJbnRlcmZhY2UgZnJvbSAnLi9hbmltcGFjay9NYW5hZ2VkQW5pbWF0aW9uTGF5ZXJJbnRlcmZhY2UnO1xyXG5pbXBvcnQgU1NNTFNwZWVjaG1hcmtJbnRlcmZhY2UgZnJvbSAnLi9hd3NwYWNrL1NTTUxTcGVlY2htYXJrSW50ZXJmYWNlJztcclxuaW1wb3J0IEFic3RyYWN0SG9zdEZlYXR1cmUgZnJvbSAnLi9BYnN0cmFjdEhvc3RGZWF0dXJlJztcclxuaW1wb3J0IERlZmVycmVkIGZyb20gJy4vRGVmZXJyZWQnO1xyXG5pbXBvcnQgVXRpbHMgZnJvbSAnLi9VdGlscyc7XHJcblxyXG5jb25zdCBEZWZhdWx0R2VzdHVyZVdvcmRzID0ge1xyXG4gIGJpZzogW1xyXG4gICAgJ2FkZCcsXHJcbiAgICAnYWJvdmUnLFxyXG4gICAgJ2F1dGhvcml0eScsXHJcbiAgICAnYmlnJyxcclxuICAgICdjb3ZlcicsXHJcbiAgICAnZnVsbCcsXHJcbiAgICAnZmx5JyxcclxuICAgICdncm93JyxcclxuICAgICdncm93dGgnLFxyXG4gICAgJ2hpZ2gnLFxyXG4gICAgJ2h1Z2UnLFxyXG4gICAgJ2luY3JlYXNlJyxcclxuICAgICdtYWpvcicsXHJcbiAgICAnbWFqb3JpdHknLFxyXG4gICAgJ2xhcmdlJyxcclxuICAgICdsZWFkZXInLFxyXG4gICAgJ2xvdCcsXHJcbiAgICAncmFpc2UnLFxyXG4gICAgJ3Jpc2UnLFxyXG4gICAgJ3RhbGwnLFxyXG4gIF0sXHJcbiAgaGVhcnQ6IFtcclxuICAgICdhY2NlcHQnLFxyXG4gICAgJ2FkbWl0JyxcclxuICAgICdiZWxpZXZlJyxcclxuICAgICdjYXJlJyxcclxuICAgICdmZWVsaW5nJyxcclxuICAgICdmZWVsJyxcclxuICAgICdmcmllbmQnLFxyXG4gICAgJ2dyYXRlZnVsJyxcclxuICAgICdoYXBweScsXHJcbiAgICAnaGVhcnQnLFxyXG4gICAgJ2h1bWFuJyxcclxuICAgICdwYWluJyxcclxuICAgICdzYXZlJyxcclxuICAgICdzYWZlJyxcclxuICAgICdraW5kJyxcclxuICAgICdsb3ZlJyxcclxuICBdLFxyXG4gIGluOiBbXHJcbiAgICAnaW5jbHVkZScsXHJcbiAgICAnaW5jbHVkaW5nJyxcclxuICAgICdpbnNpZGUnLFxyXG4gICAgJ2ludG8nLFxyXG4gICAgJ25vdycsXHJcbiAgICAnbmVhcicsXHJcbiAgICAnbmVhcmVzdCcsXHJcbiAgICAnY2xvc2VzdCcsXHJcbiAgICAndGhlcmVpbicsXHJcbiAgICAnd2l0aGluJyxcclxuICBdLFxyXG4gIG1hbnk6IFtcclxuICAgICdhbGwnLFxyXG4gICAgJ2Fsd2F5cycsXHJcbiAgICAnYW55JyxcclxuICAgICdhbnlvbmUnLFxyXG4gICAgJ2Ftb25nJyxcclxuICAgICdhcmVhJyxcclxuICAgICdhcm91bmQnLFxyXG4gICAgJ2JlYXV0aWZ1bCcsXHJcbiAgICAnZW50aXJlJyxcclxuICAgICdlbnZpcm9ubWVudCcsXHJcbiAgICAnZW52aXJvbm1lbnRzJyxcclxuICAgICdlbnZpcm9ubWVudGFsJyxcclxuICAgICdldmVyeWJvZHknLFxyXG4gICAgJ2V2ZXJ5b25lJyxcclxuICAgICdldmVyeXRoaW5nJyxcclxuICAgICdhdWRpZW5jZScsXHJcbiAgICAndG90YWwnLFxyXG4gICAgJ2dyb3VwJyxcclxuICAgICdncm91cHMnLFxyXG4gICAgJ21pbGxpb24nLFxyXG4gICAgJ21pbGxpb25zJyxcclxuICAgICdvdGhlcnMnLFxyXG4gICAgJ2JpbGxpb24nLFxyXG4gICAgJ2JpbGxpb25zJyxcclxuICAgICdodW5kcmVkJyxcclxuICAgICdodW5kcmVkcycsXHJcbiAgICAnbWFueScsXHJcbiAgICAndGhvdXNhbmQnLFxyXG4gICAgJ3Rob3VzYW5kcycsXHJcbiAgICAnd29ybGQnLFxyXG4gICAgJ3dvcmxkcycsXHJcbiAgICAnb3V0c2lkZScsXHJcbiAgICAncmV2ZWFsJyxcclxuICBdLFxyXG4gIG1vdmVtZW50OiBbXHJcbiAgICAnYXdheScsXHJcbiAgICAnYWNyb3NzJyxcclxuICAgICdhaGVhZCcsXHJcbiAgICAnYWxvbmcnLFxyXG4gICAgJ2ZhcicsXHJcbiAgICAnZmFzdCcsXHJcbiAgICAnZm9sbG93JyxcclxuICAgICdnbycsXHJcbiAgICAnbGVhdmUnLFxyXG4gICAgJ21vdmUnLFxyXG4gICAgJ21vdmVtZW50JyxcclxuICAgICd0aHJvdWdoJyxcclxuICAgICd0aHJvdWdob3V0JyxcclxuICAgICd0b3dhcmQnLFxyXG4gICAgJ3RyYXZlbCcsXHJcbiAgICAndHVybmVkJyxcclxuICAgICdwYXNzZWQnLFxyXG4gIF0sXHJcbiAgb25lOiBbXHJcbiAgICAnc2luZ2xlJyxcclxuICAgICdvbmUnLFxyXG4gICAgJ29uY2UnLFxyXG4gICAgJ2ZpcnN0JyxcclxuICAgICdmaXJzdGx5JyxcclxuICAgICdvbmx5JyxcclxuICAgICdzb2xvJyxcclxuICAgICd3YXJuZWQnLFxyXG4gICAgJ3RydWx5JyxcclxuICAgICd1cCcsXHJcbiAgICAnYWxvbmUnLFxyXG4gIF0sXHJcbiAgYWdncmVzc2l2ZTogW1xyXG4gICAgJ3Bvd2VyJyxcclxuICAgICdwb3dlcnMnLFxyXG4gICAgJ3Bvd2VyZnVsJyxcclxuICAgICdhc3NlcnQnLFxyXG4gICAgJ2Fzc2VydGl2ZScsXHJcbiAgICAnc3Ryb25nJyxcclxuICAgICdzdHJvbmdlcicsXHJcbiAgICAnc3Ryb25nZXN0JyxcclxuICAgICdzdHJlbmd0aCcsXHJcbiAgICAnZmxleCcsXHJcbiAgICAnZGFuZycsXHJcbiAgICAnZGFtbicsXHJcbiAgICAnZGFtbml0JyxcclxuICAgICdkYXJuJyxcclxuICAgICdzaHVja3MnLFxyXG4gICAgJ2RvaCcsXHJcbiAgICAnZHJhdCcsXHJcbiAgICAnYW5ncnknLFxyXG4gICAgJ2FuZ3JpZXInLFxyXG4gICAgJ2FuZ3JpZXN0JyxcclxuICAgICdhZ2dyZXNzaXZlJyxcclxuICAgICdhbm5veWVkJyxcclxuICAgICdhbm5veWluZycsXHJcbiAgICAnYXR0YWNrJyxcclxuICAgICdhdHRhY2tpbmcnLFxyXG4gICAgJ29mZmVuc2UnLFxyXG4gICAgJ29mZmVuc2l2ZScsXHJcbiAgICAnYmF0dGxlJyxcclxuICBdLFxyXG4gIHlvdTogWyd5b3UnLCAneWFsbCcsIFwieSdhbGxcIiwgJ3lvdXInLCAneW91cnMnLCAndGhvdScsICd0aHknXSxcclxuICBkZWZlbnNlOiBbXHJcbiAgICAnZGVmZW5zZScsXHJcbiAgICAnZmVhcicsXHJcbiAgICAncmVwdWxzZWQnLFxyXG4gICAgJ3NjYXJlZCcsXHJcbiAgICAnc2NhcnknLFxyXG4gICAgJ3NjYXJpZXInLFxyXG4gICAgJ3NjYXJpZXN0JyxcclxuICAgICdmZWFyZnVsJyxcclxuICAgICdhZnJhaWQnLFxyXG4gICAgJ2Nvd2VyJyxcclxuICAgICdjb3dlcnMnLFxyXG4gICAgJ2Nvd2VyaW5nJyxcclxuICAgICdoaWRlb3VzJyxcclxuICAgICdkb29tZWQnLFxyXG4gICAgJ3RlcnJpZmllZCcsXHJcbiAgICAndGVycmlmeScsXHJcbiAgICAndGVycmlmeWluZycsXHJcbiAgICAndGVycmlmaWVzJyxcclxuICAgICdzcG9va3knLFxyXG4gICAgJ3Nwb29raWVyJyxcclxuICAgICdzcG9va2llc3QnLFxyXG4gIF0sXHJcbiAgd2F2ZTogW1xyXG4gICAgJ2hlbGxvJyxcclxuICAgICdoaScsXHJcbiAgICAnaGl5YScsXHJcbiAgICAnaG93ZHknLFxyXG4gICAgJ3dlbGNvbWUnLFxyXG4gICAgJ2Fsb2hhJyxcclxuICAgICdoZXlhJyxcclxuICAgICdoZXknLFxyXG4gICAgJ2J5ZScsXHJcbiAgICAnZ29vZGJ5ZScsXHJcbiAgICAnaG9sYScsXHJcbiAgICAnYWRpb3MnLFxyXG4gICAgJ2NoYW8nLFxyXG4gIF0sXHJcbiAgc2VsZjogWydteScsICdJJywgJ215c2VsZicsICdzZWxmJywgXCJJJ3ZlXCIsICdJdmUnLCAnbWUnLCAnbWluZScsICdvd24nXSxcclxufTtcclxuXHJcbi8qKlxyXG4gKiBHZXN0dXJlIGFsbG93cyB5b3UgdG8gcGxheSBhbmltYXRpb25zIG9uIGRlbWFuZCBvbiBvbmUgb3IgbW9yZSBsYXllcnMgZnJvbSBzY3JpcHRcclxuICogb3Igc3NtbC4gSWYgZ2VzdHVyZSBpcyBwbGF5ZWQgdGhhdCBpcyBhIFF1ZXVlU3RhdGUsIHRoZSBxdWV1ZSB3aWxsIGF1dG9tYXRpY2FsbHlcclxuICogYmUgcHJvZ3Jlc3NlZCBhZnRlciBhIGdpdmVuIGhvbGQgdGltZSBpZiBhIGxvb3BpbmcgcXVldWVkIHN0YXRlIGlzIHJlYWNoZWQuIEdlc3R1cmVcclxuICogbGF5ZXJzIGNhbiBvcHRpb25hbGx5IGJlIGF1dG9tYXRpY2FsbHkgZGlzYWJsZWQgd2hlbiBubyBnZXN0dXJlIGFuaW1hdGlvbiBpc1xyXG4gKiBpbiBwcm9ncmVzcy5cclxuICpcclxuICogQGV4dGVuZHMgQWJzdHJhY3RIb3N0RmVhdHVyZVxyXG4gKiBAaW1wbGVtZW50cyBTU01MU3BlZWNobWFya0ludGVyZmFjZVxyXG4gKiBAaW1wbGVtZW50cyBNYW5hZ2VkQW5pbWF0aW9uTGF5ZXJJbnRlcmZhY2VcclxuICovXHJcbmNsYXNzIEdlc3R1cmVGZWF0dXJlIGV4dGVuZHMgQWJzdHJhY3RIb3N0RmVhdHVyZS5taXgoXHJcbiAgU1NNTFNwZWVjaG1hcmtJbnRlcmZhY2UuTWl4aW4sXHJcbiAgTWFuYWdlZEFuaW1hdGlvbkxheWVySW50ZXJmYWNlLk1peGluXHJcbikge1xyXG4gIC8qKlxyXG4gICAqIEBjb25zdHJ1Y3RvclxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtjb3JlL0hvc3RPYmplY3R9IGhvc3QgLSBIb3N0IG9iamVjdCB0aGF0IG93bnMgdGhlIGZlYXR1cmUuXHJcbiAgICogQHBhcmFtIHtPYmplY3Q9fSBvcHRpb25zIC0gT3B0aW9uYWwgb3B0aW9ucyBmb3IgdGhlIGZlYXR1cmUuXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLmhvbGRUaW1lID0gM10gLSBBbW91bnQgb2YgdGltZSBpbiBzZWNvbmRzIHRoYXQgbXVzdFxyXG4gICAqIGVsYXBzZSBiZWZvcmUgYWR2YW5jaW5nIGEgZ2VzdHVyZSB0aGF0J3MgYSB7QGxpbmsgUXVldWVTdGF0ZX0gd2hlbiB0aGUgY3VycmVudFxyXG4gICAqIHN0YXRlIGluIHRoZSBxdWV1ZSBpcyBzZXQgdG8gbG9vcCBpbmZpbml0ZWx5LlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5taW5pbXVtSW50ZXJ2YWwgPSAwLjI1XSAtIFRoZSBtaW5pbXVtIGFtb3VudCBvZiB0aW1lXHJcbiAgICogaW4gc2Vjb25kcyB0aGF0IG11c3QgZWxhcHNlIGJlZm9yZSBhbm90aGVyIGdlc3R1cmUgY2FuIGJlIHBsYXllZC5cclxuICAgKiBAcGFyYW0gIHtPYmplY3R9IGxheWVycyAtIEFuIG9iamVjdCB0aGF0IG1hcHMgbGF5ZXIgbmFtZXMgdG8gbGF5ZXIgb3B0aW9ucy5cclxuICAgKiBUaGVzZSBhcmUgdGhlIGxheWVycyB0aGF0IHdpbGwgYmUgcmVnaXN0ZXJlZCBhcyB0cmFja2VkIGdlc3R1cmUgbGF5ZXJzLiBTZWVcclxuICAgKiB7QGxpbmsgTWFuYWdlZEFuaW1hdGlvbkxheWVySW50ZXJmYWNlI3JlZ2lzdGVyTGF5ZXJ9IGZvciBtb3JlIGluZm9ybWF0aW9uXHJcbiAgICogb24gZXhwZWN0ZWQgZm9ybWF0IGZvciBlYWNoIGxheWVyIG9wdGlvbnMgb2JqZWN0LlxyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKGhvc3QsIHtob2xkVGltZSA9IDMsIG1pbmltdW1JbnRlcnZhbCA9IDEsIGxheWVycyA9IHt9fSA9IHt9KSB7XHJcbiAgICBzdXBlcihob3N0KTtcclxuXHJcbiAgICB0aGlzLmhvbGRUaW1lID0gaG9sZFRpbWU7XHJcbiAgICB0aGlzLm1pbmltdW1JbnRlcnZhbCA9IG1pbmltdW1JbnRlcnZhbDtcclxuXHJcbiAgICAvLyBSZWdpc3RlciB0aGUgZ2VzdHVyZSBsYXllcnNcclxuICAgIE9iamVjdC5lbnRyaWVzKGxheWVycykuZm9yRWFjaCgoW25hbWUsIG9wdGlvbnMgPSB7fV0pID0+IHtcclxuICAgICAgdGhpcy5yZWdpc3RlckxheWVyKG5hbWUsIG9wdGlvbnMpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gYSB2YWxpZCBob2xkIHRpbWUgdmFsdWUuIElmIGhvbGQgdGltZSBpc24ndCBkZWZpbmVkIGZvciB0aGUgYW5pbWF0aW9uLFxyXG4gICAqIHRyeSB0byB1c2UgdGhlIGhvbGQgdGltZSBmb3IgdGhlIGxheWVyLiBJZiB0aGF0J3Mgbm90IGRlZmluZWQsIGZhbGwgYmFjayB0b1xyXG4gICAqIHRoZSBob2xkIHRpbWUgZm9yIHRoZSBmZWF0dXJlLlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBsYXllciAtIE1hbmFnZWQgbGF5ZXIgb3B0aW9ucyBvYmplY3QuXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IGFuaW1hdGlvbiAtIE1hbmFnZWQgYW5pbWF0aW9uIG9wdGlvbnMgb2JqZWN0LlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge251bWJlcn1cclxuICAgKi9cclxuICBfZ2V0SG9sZFRpbWUobGF5ZXIsIGFuaW1hdGlvbikge1xyXG4gICAgY29uc3QgbGF5ZXJIb2xkVGltZSA9XHJcbiAgICAgIGxheWVyLmhvbGRUaW1lICE9PSB1bmRlZmluZWQgPyBsYXllci5ob2xkVGltZSA6IHRoaXMuaG9sZFRpbWU7XHJcblxyXG4gICAgcmV0dXJuIGFuaW1hdGlvbi5ob2xkVGltZSAhPT0gdW5kZWZpbmVkXHJcbiAgICAgID8gYW5pbWF0aW9uLmhvbGRUaW1lXHJcbiAgICAgIDogbGF5ZXJIb2xkVGltZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiBhIHZhbGlkIG1pbmltdW0gaW50ZXJ2YWwgdmFsdWUuIElmIG1pbmltdW0gaW50ZXJ2YWwgaXNuJ3QgZGVmaW5lZCBmb3JcclxuICAgKiB0aGUgYW5pbWF0aW9uLCB0cnkgdG8gdXNlIHRoZSBtaW5pbXVtIGludGVydmFsIGZvciB0aGUgbGF5ZXIuIElmIHRoYXQncyBub3RcclxuICAgKiBkZWZpbmVkLCBmYWxsIGJhY2sgdG8gdGhlIG1pbmltdW0gaW50ZXJ2YWwgZm9yIHRoZSBmZWF0dXJlLlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBsYXllciAtIE1hbmFnZWQgbGF5ZXIgb3B0aW9ucyBvYmplY3QuXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IGFuaW1hdGlvbiAtIE1hbmFnZWQgYW5pbWF0aW9uIG9wdGlvbnMgb2JqZWN0LlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge251bWJlcn1cclxuICAgKi9cclxuICBfZ2V0TWluaW11bUludGVydmFsKGxheWVyLCBhbmltYXRpb24pIHtcclxuICAgIGNvbnN0IGxheWVyTWluaW11bUludGVydmFsID1cclxuICAgICAgbGF5ZXIubWluaW11bUludGVydmFsICE9PSB1bmRlZmluZWRcclxuICAgICAgICA/IGxheWVyLm1pbmltdW1JbnRlcnZhbFxyXG4gICAgICAgIDogdGhpcy5taW5pbXVtSW50ZXJ2YWw7XHJcblxyXG4gICAgcmV0dXJuIGFuaW1hdGlvbi5taW5pbXVtSW50ZXJ2YWwgIT09IHVuZGVmaW5lZFxyXG4gICAgICA/IGFuaW1hdGlvbi5taW5pbXVtSW50ZXJ2YWxcclxuICAgICAgOiBsYXllck1pbmltdW1JbnRlcnZhbDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENhbGxiYWNrIGZvciB7QGxpbmsgY29yZS9BbmltYXRpb25GZWF0dXJlI3BsYXlOZXh0QW5pbWF0aW9ufSBldmVudC4gSWYgdGhlXHJcbiAgICogZXZlbnQgaXMgZW1pdHRlZCBmb3IgYSBtYW5hZ2VkIGFuaW1hdGlvbiBhbmQgdGhlIG5ldyBxdWV1ZWQgc3RhdGUgY2Fubm90XHJcbiAgICogYWR2YW5jZSBvbiBpdHMgb3duLCBzdGFydCBhIG5ldyB0aW1lciBwcm9taXNlIHRoYXQgd2lsbCBhZHZhbmNlIHRoZSBxdWV1ZVxyXG4gICAqIG9uY2UgaXQgcmVzb2x2ZXMuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBPcHRpb25zIG9iamVjdCBwYXNzZWQgZnJvbSBwbGF5TmV4dEFuaW1hdGlvbiBldmVudC5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGF5ZXJOYW1lIC0gTmFtZSBvZiB0aGUgbGF5ZXIgdGhhdCBvd25zIHRoZSBxdWV1ZSBzdGF0ZS5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gYW5pbWF0aW9uTmFtZSAtIE5hbWUgb2YgdGhlIHF1ZXVlIHN0YXRlIGFuaW1hdGlvbi5cclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGNhbkFkdmFuY2UgLSBXaGV0aGVyIG9yIG5vdCB0aGUgY3VycmVudCBzdGF0ZSBpbiB0aGUgcXVldWVcclxuICAgKiBjYW4gYWR2YW5jZSBvbiBpdHMgb3duLlxyXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNRdWV1ZUVuZCAtIFdoZXRoZXIgdGhlIGN1cnJlbnQgc3RhdGUgaW4gdGhlIHF1ZXVlIGlzIHRoZSBsYXN0XHJcbiAgICogc3RhdGUgaW4gdGhlIHF1ZXVlLlxyXG4gICAqL1xyXG4gIF9vbk5leHQoe2xheWVyTmFtZSwgYW5pbWF0aW9uTmFtZSwgY2FuQWR2YW5jZSwgaXNRdWV1ZUVuZH0pIHtcclxuICAgIC8vIEV4aXQgaWYgdGhpcyBpc24ndCBhIG1hbmFnZWQgbGF5ZXJcclxuICAgIGNvbnN0IGxheWVyID0gdGhpcy5fbWFuYWdlZExheWVyc1tsYXllck5hbWVdO1xyXG4gICAgaWYgKGxheWVyID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEV4aXQgaWYgaXQgaXNuJ3QgYSBtYW5hZ2VkIGFuaW1hdGlvblxyXG4gICAgY29uc3QgYW5pbWF0aW9uID0gbGF5ZXIuYW5pbWF0aW9uc1thbmltYXRpb25OYW1lXTtcclxuICAgIGlmIChhbmltYXRpb24gPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gU3RhcnQgYSBuZXcgdGltZXIgZm9yIGxvb3Bpbmcgc3RhdGVzIHRoYXQgYXJlbid0IHRoZSBlbmQgb2YgdGhlIHF1ZXVlXHJcbiAgICBpZiAoIWNhbkFkdmFuY2UgJiYgIWlzUXVldWVFbmQgJiYgbGF5ZXIuY3VycmVudEdlc3R1cmUgPT09IGFuaW1hdGlvbk5hbWUpIHtcclxuICAgICAgY29uc3QgaG9sZFRpbWUgPSB0aGlzLl9nZXRIb2xkVGltZShsYXllciwgYW5pbWF0aW9uKTtcclxuICAgICAgbGF5ZXIuaG9sZFRpbWVyLmNhbmNlbCgpO1xyXG5cclxuICAgICAgLy8gU2tpcCB0byB0aGUgbmV4dCBhbmltYXRpb24gcmlnaHQgYXdheSBpZiBob2xkIHRpbWUgaXMgemVyb1xyXG4gICAgICBpZiAoaG9sZFRpbWUgPD0gMCkge1xyXG4gICAgICAgIHRoaXMuX2hvc3QuQW5pbWF0aW9uRmVhdHVyZS5wbGF5TmV4dEFuaW1hdGlvbihsYXllck5hbWUsIGFuaW1hdGlvbk5hbWUpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBXYWl0IGZvciB0aGUgZ2l2ZW4gaG9sZCB0aW1lIGJlZm9yZSBwcm9ncmVzc2luZ1xyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBsYXllci5ob2xkVGltZXIgPSBVdGlscy53YWl0KGhvbGRUaW1lLCB7XHJcbiAgICAgICAgICBvbkZpbmlzaDogKCkgPT4ge1xyXG4gICAgICAgICAgICAvLyBBZHZhbmNlIHRoZSBxdWV1ZSB0byB0aGUgbmV4dCBzdGF0ZVxyXG4gICAgICAgICAgICBpZiAobGF5ZXIuY3VycmVudEdlc3R1cmUgPT09IGFuaW1hdGlvbk5hbWUpIHtcclxuICAgICAgICAgICAgICB0aGlzLl9ob3N0LkFuaW1hdGlvbkZlYXR1cmUucGxheU5leHRBbmltYXRpb24oXHJcbiAgICAgICAgICAgICAgICBsYXllck5hbWUsXHJcbiAgICAgICAgICAgICAgICBhbmltYXRpb25OYW1lXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2FsbGJhY2sgZm9yIHtAbGluayBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjc3RvcEFuaW1hdGlvbn0gZXZlbnQuIElmIHRoZVxyXG4gICAqIGV2ZW50IGlzIGVtaXR0ZWQgZm9yIGEgbWFuYWdlZCBhbmltYXRpb24gY2FuY2VsIHRoZSBsYXllcidzIHN0b3JlZCB0aW1lcnMuXHJcbiAgICogSWYgdGhlIGxheWVyIGlzIHNldCB0byBhdXRvLWRpc2FibGUgc2V0IGl0cyB3ZWlnaHQgdG8gMC5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIE9wdGlvbnMgb2JqZWN0IHBhc3NlZCBmcm9tIHBsYXlOZXh0QW5pbWF0aW9uIGV2ZW50LlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllck5hbWUgLSBOYW1lIG9mIHRoZSBsYXllciB0aGF0IG93bnMgdGhlIHN0b3BwZWQgYW5pbWF0aW9uLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhbmltYXRpb25OYW1lIC0gTmFtZSBvZiB0aGUgYW5pbWF0aW9uIHRoYXQgd2FzIHN0b3BwZWQuXHJcbiAgICovXHJcbiAgX29uU3RvcCh7bGF5ZXJOYW1lLCBhbmltYXRpb25OYW1lfSkge1xyXG4gICAgLy8gTWFrZSBzdXJlIHRoZSBsYXllciBpcyBtYW5hZ2VkXHJcbiAgICBjb25zdCBsYXllciA9IHRoaXMuX21hbmFnZWRMYXllcnNbbGF5ZXJOYW1lXTtcclxuICAgIGlmIChsYXllciA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBNYWtlIHN1cmUgdGhlIGFuaW1hdGlvbiBpcyBtYW5hZ2VkXHJcbiAgICBjb25zdCBhbmltYXRpb24gPSBsYXllci5hbmltYXRpb25zW2FuaW1hdGlvbk5hbWVdO1xyXG4gICAgaWYgKGFuaW1hdGlvbiAhPT0gdW5kZWZpbmVkICYmIGFuaW1hdGlvbk5hbWUgPT09IGxheWVyLmN1cnJlbnRHZXN0dXJlKSB7XHJcbiAgICAgIGxheWVyLmN1cnJlbnRHZXN0dXJlID0gbnVsbDtcclxuICAgICAgbGF5ZXIucGxheVRpbWVyID0gbnVsbDtcclxuICAgICAgbGF5ZXIuaG9sZFRpbWVyLmNhbmNlbCgpO1xyXG5cclxuICAgICAgLy8gVHVybiBvZmYgbGF5ZXIgd2VpZ2h0XHJcbiAgICAgIGlmIChsYXllci5hdXRvRGlzYWJsZSkge1xyXG4gICAgICAgIHRoaXMuc2V0TGF5ZXJXZWlnaHRzKG5hbWUgPT4gbmFtZSA9PT0gbGF5ZXJOYW1lLCAwKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgX29uQW5pbWF0aW9uQWRkZWQoe2xheWVyTmFtZSwgYW5pbWF0aW9uTmFtZX0pIHtcclxuICAgIGNvbnN0IGxheWVyID0gdGhpcy5fbWFuYWdlZExheWVyc1tsYXllck5hbWVdO1xyXG5cclxuICAgIGlmIChsYXllciAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGNvbnN0IGFuaW1hdGlvbiA9IGxheWVyLmFuaW1hdGlvbnNbYW5pbWF0aW9uTmFtZV07XHJcblxyXG4gICAgICAvLyBSZWdpc3RlciB0aGUgYW5pbWF0aW9uIGFzIGFjdGl2ZSBpZiBpdCBpcyB1bm1hbmFnZWRcclxuICAgICAgaWYgKGFuaW1hdGlvbiA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgdGhpcy5yZWdpc3RlckFuaW1hdGlvbihsYXllck5hbWUsIGFuaW1hdGlvbk5hbWUpO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIE1hcmsgdGhlIGFuaW1hdGlvbiBhcyBhY3RpdmUgaWYgaXQgaXMgbWFuYWdlZFxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBhbmltYXRpb24uaXNBY3RpdmUgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZWdpc3RlckxheWVyKG5hbWUsIG9wdGlvbnMgPSB7fSkge1xyXG4gICAgc3VwZXIucmVnaXN0ZXJMYXllcihuYW1lLCB7XHJcbiAgICAgIC4uLm9wdGlvbnMsXHJcbiAgICAgIGhvbGRUaW1lcjogRGVmZXJyZWQucmVzb2x2ZSgpLFxyXG4gICAgICBwbGF5VGltZXI6IG51bGwsXHJcbiAgICAgIGN1cnJlbnRHZXN0dXJlOiBudWxsLFxyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKHRoaXMuX21hbmFnZWRMYXllcnNbbmFtZV0uaXNBY3RpdmUpIHtcclxuICAgICAgdGhpcy5faG9zdC5BbmltYXRpb25GZWF0dXJlLmdldEFuaW1hdGlvbnMobmFtZSkuZm9yRWFjaChhbmltID0+IHtcclxuICAgICAgICAvLyBBdXRvbWF0aWNhbGx5IHJlZ2lzdGVyIGFsbCBhbmltYXRpb25zIG9uIHRoZSBsYXllclxyXG4gICAgICAgIGlmICh0aGlzLl9tYW5hZ2VkTGF5ZXJzW25hbWVdLmFuaW1hdGlvbnNbYW5pbV0gPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgdGhpcy5yZWdpc3RlckFuaW1hdGlvbihcclxuICAgICAgICAgICAgbmFtZSxcclxuICAgICAgICAgICAgYW5pbSxcclxuICAgICAgICAgICAgdGhpcy5fbWFuYWdlZExheWVyc1tuYW1lXS5hbmltYXRpb25zW2FuaW1dXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZWdpc3RlckFuaW1hdGlvbihsYXllck5hbWUsIGFuaW1hdGlvbk5hbWUsIG9wdGlvbnMgPSB7fSkge1xyXG4gICAgLy8gVHJ5IHRvIGZhbGwgYmFjayB0byBhIGRlZmF1bHQgd29yZCBhcnJheVxyXG4gICAgaWYgKCEob3B0aW9ucy53b3JkcyBpbnN0YW5jZW9mIEFycmF5KSAmJiAhKG9wdGlvbnMud29yZHMgaW5zdGFuY2VvZiBTZXQpKSB7XHJcbiAgICAgIG9wdGlvbnMud29yZHMgPSBEZWZhdWx0R2VzdHVyZVdvcmRzW2FuaW1hdGlvbk5hbWVdIHx8IFtdO1xyXG4gICAgfVxyXG5cclxuICAgIHN1cGVyLnJlZ2lzdGVyQW5pbWF0aW9uKGxheWVyTmFtZSwgYW5pbWF0aW9uTmFtZSwgb3B0aW9ucyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGUgYW4gb2JqZWN0IHRoYXQgbWFwcyBzc21sIG1hcmsgc3ludGF4IHJlcXVpcmVkIHRvIHBsYXkgZWFjaCBnZXN0dXJlIHRvXHJcbiAgICogdGhlIHdvcmRzIGFycmF5IGFzc29jaWF0ZWQgd2l0aCBlYWNoIGdlc3R1cmUuIFdvcmRzIGFycmF5cyBhcmUgZGVmaW5lZCBhdCB3aGVuXHJcbiAgICogdGhlIGdlc3R1cmUgYW5pbWF0aW9uIGlzIHJlZ2lzdGVyZWQuIEdlc3R1cmVzIHdpdGhvdXQgYXNzb2NpYXRlZCB3b3JkcyB3aWxsXHJcbiAgICogYmUgZXhjbHVkZWQgZnJvbSB0aGUgcmVzdWx0LiBUaGUgcmVzdWx0aW5nIG9iamVjdCBjYW4gYmUgdXNlZCBhcyBhbiBpbnB1dFxyXG4gICAqIGZvciB7QGxpbmsgVGV4dFRvU3BlZWNoVXRpbHMuYXV0b0dlbmVyYXRlU1NNTE1hcmtzfSB0byB1cGRhdGUgYSBzcGVlY2ggc3RyaW5nXHJcbiAgICogd2l0aCB0aGUgbWFya3VwIHJlcXVpcmVkIHRvIHBsYXkgZ2VzdHVyZXMgdGltZWQgd2l0aCB0aGVpciBhc3NvY2lhdGVkIHdvcmRzLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge09iamVjdH1cclxuICAgKi9cclxuICBjcmVhdGVHZXN0dXJlTWFwKCkge1xyXG4gICAgY29uc3QgZ2VzdHVyZU1hcCA9IHt9O1xyXG5cclxuICAgIE9iamVjdC5lbnRyaWVzKHRoaXMuX21hbmFnZWRMYXllcnMpLmZvckVhY2goKFtsYXllck5hbWUsIHthbmltYXRpb25zfV0pID0+IHtcclxuICAgICAgT2JqZWN0LmVudHJpZXMoYW5pbWF0aW9ucykuZm9yRWFjaChcclxuICAgICAgICAoW1xyXG4gICAgICAgICAgYW5pbWF0aW9uTmFtZSxcclxuICAgICAgICAgIHtob2xkVGltZSwgbWluaW11bUludGVydmFsLCB3b3JkcywgdHJhbnNpdGlvblRpbWV9LFxyXG4gICAgICAgIF0pID0+IHtcclxuICAgICAgICAgIC8vIE9ubHkgc3RvcmUgZ2VzdHVyZXMgdGhhdCBoYXZlIGFueSBhc3NvY2lhdGVkIHdvcmRzXHJcbiAgICAgICAgICBpZiAod29yZHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgICAgLi4uKGhvbGRUaW1lICYmIHsgaG9sZFRpbWUgfSksXHJcbiAgICAgICAgICAgICAgLi4uKG1pbmltdW1JbnRlcnZhbCAmJiB7IG1pbmltdW1JbnRlcnZhbCB9KSxcclxuICAgICAgICAgICAgICAuLi4odHJhbnNpdGlvblRpbWUgJiYgeyB0cmFuc2l0aW9uVGltZSB9KSxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgY29uc3Qga2V5ID0ge1xyXG4gICAgICAgICAgICAgIGZlYXR1cmU6IHRoaXMuY29uc3RydWN0b3IubmFtZSxcclxuICAgICAgICAgICAgICBtZXRob2Q6ICdwbGF5R2VzdHVyZScsXHJcbiAgICAgICAgICAgICAgYXJnczogW2xheWVyTmFtZSwgYW5pbWF0aW9uTmFtZSwgb3B0aW9uc10sXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBnZXN0dXJlTWFwW0pTT04uc3RyaW5naWZ5KGtleSldID0gd29yZHM7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIGdlc3R1cmVNYXA7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGUgYW4gYXJyYXkgdGhhdCBjb250YWlucyBzc21sIG1hcmsgc3ludGF4IHJlcXVpcmVkIHRvIHBsYXkgZWFjaCBnZXN0dXJlXHJcbiAgICogdGhhdCBkb2VzIG5vdCBoYXZlIGFueSBhc3NvY2lhdGVkIHdvcmRzLiBUaGUgcmVzdWx0aW5nIGFycmF5IGNhbiBiZSB1c2VkIGFzXHJcbiAgICogYW4gaW5wdXQgZm9yIHtAbGluayBUZXh0VG9TcGVlY2hVdGlscy5hdXRvR2VuZXJhdGVTU01MTWFya3N9IG9yXHJcbiAgICoge0BsaW5rIFRleHRUb1NwZWVjaFV0aWxzLmFkZE1hcmtzVG9Vbm1hcmtlZFNlbnRlbmNlc30gdG8gdXBkYXRlIGEgc3BlZWNoXHJcbiAgICogc3RyaW5nIHdpdGggdGhlIG1hcmt1cCByZXF1aXJlZCB0byBwbGF5IHJhbmRvbSBnZXN0dXJlcyBhdCBlYWNoIHVubWFya2VkXHJcbiAgICogc2VudGVuY2UgaW4gdGhlIHN0cmluZy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7QXJyYXkuPHN0cmluZz49fSBsYXllcnMgLSBBbiBhcnJheSBvZiBuYW1lcyBvZiBtYW5hZ2VkIGxheWVycyB0byBnZW5lcmF0ZVxyXG4gICAqIG1hcmtzIGZvci4gSWYgdW5kZWZpbmVkLCB1c2UgYWxsIG1hbmFnZWQgbGF5ZXJzLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0FycmF5LjxzdHJpbmc+fVxyXG4gICAqL1xyXG4gIGNyZWF0ZUdlbmVyaWNHZXN0dXJlQXJyYXkobGF5ZXJzKSB7XHJcbiAgICBjb25zdCBnZW5lcmljR2VzdHVyZXMgPSBbXTtcclxuICAgIGxheWVycyA9IGxheWVycyB8fCBPYmplY3Qua2V5cyh0aGlzLl9tYW5hZ2VkTGF5ZXJzKTtcclxuXHJcbiAgICBsYXllcnMuZm9yRWFjaChsYXllck5hbWUgPT4ge1xyXG4gICAgICBjb25zdCBsYXllciA9IHRoaXMuX21hbmFnZWRMYXllcnNbbGF5ZXJOYW1lXTtcclxuXHJcbiAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgbGF5ZXIgaXMgbWFuYWdlZFxyXG4gICAgICBpZiAoIWxheWVyKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBPYmplY3QuZW50cmllcyhsYXllci5hbmltYXRpb25zKS5mb3JFYWNoKFxyXG4gICAgICAgIChbXHJcbiAgICAgICAgICBhbmltYXRpb25OYW1lLFxyXG4gICAgICAgICAgeyBob2xkVGltZSwgbWluaW11bUludGVydmFsLCB3b3JkcywgdHJhbnNpdGlvblRpbWUgfSxcclxuICAgICAgICBdKSA9PiB7XHJcbiAgICAgICAgICAvLyBPbmx5IHN0b3JlIGdlc3R1cmVzIHRoYXQgZG9uJ3QgaGF2ZSBhbnkgYXNzb2NpYXRlZCB3b3Jkc1xyXG4gICAgICAgICAgaWYgKCF3b3Jkcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcclxuICAgICAgICAgICAgICAuLi4oaG9sZFRpbWUgJiYgeyBob2xkVGltZSB9KSxcclxuICAgICAgICAgICAgICAuLi4obWluaW11bUludGVydmFsICYmIHsgbWluaW11bUludGVydmFsIH0pLFxyXG4gICAgICAgICAgICAgIC4uLih0cmFuc2l0aW9uVGltZSAmJiB7IHRyYW5zaXRpb25UaW1lIH0pLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBjb25zdCBrZXkgPSBKU09OLnN0cmluZ2lmeSh7XHJcbiAgICAgICAgICAgICAgZmVhdHVyZTogdGhpcy5jb25zdHJ1Y3Rvci5uYW1lLFxyXG4gICAgICAgICAgICAgIG1ldGhvZDogJ3BsYXlHZXN0dXJlJyxcclxuICAgICAgICAgICAgICBhcmdzOiBbbGF5ZXJOYW1lLCBhbmltYXRpb25OYW1lLCBvcHRpb25zXSxcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBpZiAoIWdlbmVyaWNHZXN0dXJlcy5pbmNsdWRlcyhrZXkpKSB7XHJcbiAgICAgICAgICAgICAgZ2VuZXJpY0dlc3R1cmVzLnB1c2goa2V5KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBnZW5lcmljR2VzdHVyZXM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQbGF5IGEgbWFuYWdlZCBnZXN0dXJlIGFuaW1hdGlvbi5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllck5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgbGF5ZXIgdGhhdCBjb250YWlucyB0aGUgZ2VzdHVyZVxyXG4gICAqIGFuaW1hdGlvbi5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gYW5pbWF0aW9uTmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBnZXN0dXJlIGFuaW1hdGlvbi5cclxuICAgKiBAcGFyYW0ge09iamVjdD19IG9wdGlvbnMgLSBPcHRpb25hbCBnZXN0dXJlIG9wdGlvbnMuXHJcbiAgICogQHBhcmFtIHtudW1iZXI9fSBvcHRpb25zLmhvbGRUaW1lIC0gVGhpcyBvcHRpb24gb25seSBhcHBsaWVzIHRvIHtAbGluayBRdWV1ZVN0YXRlfVxyXG4gICAqIGdlc3R1cmVzLiBXaGVuIGEgUXVldWVTdGF0ZSBnZXN0dXJlIHByb2dyZXNzZXMgdG8gYSBsb29waW5nIHN0YXRlLCB0aGlzIG9wdGlvblxyXG4gICAqIGRlZmluZXMgaG93IG1hbnkgc2Vjb25kcyBzaG91bGQgZWxhcHNlIGJlZm9yZSBtb3ZpbmcgdGhlIHF1ZXVlIGZvcndhcmQuIElmXHJcbiAgICogdW5kZWZpbmVkLCBpdCB3aWxsIGZhbGwgYmFjayBmaXJzdCB0byB0aGUgaG9sZFRpbWUgZGVmaW5lZCBpbiB0aGUgb3B0aW9ucyB3aGVuXHJcbiAgICogdGhlIGdlc3R1cmUgYW5pbWF0aW9uIHdhcyByZWdpc3RlcmVkIGFuZCB0aGVuIHRvIHRoZSBob2xkVGltZSBkZWZpbmVkIG9uIHRoZVxyXG4gICAqIGZlYXR1cmUuXHJcbiAgICogQHBhcmFtIHtudW1iZXI9fSBvcHRpb25zLm1pbmltdW1JbnRlcnZhbCAtIFRoZSBtaW5pbXVtIGFtb3VudCBvZiB0aW1lIHRoYXRcclxuICAgKiBtdXN0IGhhdmUgZWxhcHNlZCBzaW5jZSB0aGUgbGFzdCB0aW1lIGEgZ2VzdHVyZSB3YXMgcGxheWVkLlxyXG4gICAqL1xyXG4gIHBsYXlHZXN0dXJlKFxyXG4gICAgbGF5ZXJOYW1lLFxyXG4gICAgYW5pbWF0aW9uTmFtZSxcclxuICAgIHtob2xkVGltZSwgbWluaW11bUludGVydmFsLCB0cmFuc2l0aW9uVGltZSwgZm9yY2UgPSBmYWxzZX0gPSB7fVxyXG4gICkge1xyXG4gICAgLy8gTWFrZSBzdXJlIHRoZSBhbmltYXRpb24gaXMgcmVnaXN0ZXJlZFxyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLl9tYW5hZ2VkTGF5ZXJzW2xheWVyTmFtZV0gPT09IHVuZGVmaW5lZCB8fFxyXG4gICAgICB0aGlzLl9tYW5hZ2VkTGF5ZXJzW2xheWVyTmFtZV0uYW5pbWF0aW9uc1thbmltYXRpb25OYW1lXSA9PT0gdW5kZWZpbmVkXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5yZWdpc3RlckFuaW1hdGlvbihsYXllck5hbWUsIGFuaW1hdGlvbk5hbWUsIHtcclxuICAgICAgICBob2xkVGltZSxcclxuICAgICAgICBtaW5pbXVtSW50ZXJ2YWwsXHJcbiAgICAgICAgdHJhbnNpdGlvblRpbWUsXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGxheWVyID0gdGhpcy5fbWFuYWdlZExheWVyc1tsYXllck5hbWVdO1xyXG4gICAgY29uc3QgYW5pbWF0aW9uID0gbGF5ZXIuYW5pbWF0aW9uc1thbmltYXRpb25OYW1lXTtcclxuXHJcbiAgICAvLyBNYWtlIHN1cmUgdGhlIGFuaW1hdGlvbiBpcyBhY3RpdmVcclxuICAgIGlmICghYW5pbWF0aW9uLmlzQWN0aXZlKSB7XHJcbiAgICAgIC8vIENyZWF0ZSB3YXJuaW5nIG1lc3NhZ2UgYmFzZWQgb24gd2hpY2ggb2JqZWN0IGRvZXNuJ3QgZXhpc3QgeWV0XHJcbiAgICAgIGNvbnN0IHR5cGVOYW1lID0gbGF5ZXIuaXNBY3RpdmUgPyAnYW5pbWF0aW9uJyA6ICdsYXllcic7XHJcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBgU2tpcHBpbmcgZ2VzdHVyZSAke2FuaW1hdGlvbk5hbWV9IG9uIGxheWVyICR7bGF5ZXJOYW1lfSBmb3IgaG9zdCAke3RoaXMuX2hvc3QuaWR9LiBObyAke3R5cGVOYW1lfSBleGlzdHMgd2l0aCB0aGlzIG5hbWUgeWV0LmA7XHJcblxyXG4gICAgICBjb25zb2xlLndhcm4obWVzc2FnZSk7XHJcbiAgICAgIHJldHVybiBEZWZlcnJlZC5jYW5jZWwoe3JlYXNvbjogJ2luYWN0aXZlJywgdmFsdWU6IHR5cGVOYW1lfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ2hlY2sgaWYgdGhlIGdlc3R1cmUgaXMgYWxyZWFkeSBwbGF5aW5nXHJcbiAgICBjb25zdCB7Y3VycmVudEdlc3R1cmV9ID0gbGF5ZXI7XHJcbiAgICBpZiAoY3VycmVudEdlc3R1cmUgPT09IGFuaW1hdGlvbk5hbWUgJiYgIWZvcmNlKSB7XHJcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBgU2tpcHBpbmcgZ2VzdHVyZSAke2FuaW1hdGlvbk5hbWV9IG9uIGxheWVyICR7bGF5ZXJOYW1lfSBmb3IgaG9zdCAke3RoaXMuX2hvc3QuaWR9LiBUaGUgZ2VzdHVyZSBpcyBhbHJlYWR5IHBsYXlpbmcuIFVzZSBvcHRpb25zLmZvcmNlIHRvIGZvcmNlIHRoZSBnZXN0dXJlIHJlcGxheSwgd2hpY2ggbWF5IHJlc3VsdCBpbiBhIGhhcmQgdHJhbnNpdGlvbi5gO1xyXG5cclxuICAgICAgY29uc29sZS53YXJuKG1lc3NhZ2UpO1xyXG4gICAgICByZXR1cm4gRGVmZXJyZWQuY2FuY2VsKHtyZWFzb246ICdwbGF5aW5nJywgdmFsdWU6IGFuaW1hdGlvbk5hbWV9KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBVcGRhdGUgYW5pbWF0aW9uIG9wdGlvbnNcclxuICAgIGlmIChob2xkVGltZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGFuaW1hdGlvbi5ob2xkVGltZSA9IGhvbGRUaW1lO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChtaW5pbXVtSW50ZXJ2YWwgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBhbmltYXRpb24ubWluaW11bUludGVydmFsID0gbWluaW11bUludGVydmFsO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbWluaW11bUludGVydmFsID0gdGhpcy5fZ2V0TWluaW11bUludGVydmFsKGxheWVyLCBhbmltYXRpb24pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIENoZWNrIHRoZSBpbnRlcnZhbFxyXG4gICAgaWYgKCFmb3JjZSAmJiBsYXllci5wbGF5VGltZXIgIT09IG51bGwgJiYgbGF5ZXIucGxheVRpbWVyIDwgbWluaW11bUludGVydmFsKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICBgU2tpcHBpbmcgZ2VzdHVyZSAke2FuaW1hdGlvbk5hbWV9IG9uIGxheWVyICR7bGF5ZXJOYW1lfSBmb3IgaG9zdCAke3RoaXMuX2hvc3QuaWR9LiBNaW5pbXVtIGludGVydmFsICR7bWluaW11bUludGVydmFsfSBoYXMgbm90IGJlZW4gbWV0LmBcclxuICAgICAgKTtcclxuICAgICAgcmV0dXJuIERlZmVycmVkLmNhbmNlbCh7XHJcbiAgICAgICAgcmVhc29uOiAnbWluaW11bUludGVydmFsJyxcclxuICAgICAgICB2YWx1ZTogbWluaW11bUludGVydmFsIC0gbGF5ZXIucGxheVRpbWVyLFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBQbGF5IHRoZSBhbmltYXRpb25cclxuICAgIGxheWVyLmN1cnJlbnRHZXN0dXJlID0gYW5pbWF0aW9uTmFtZTtcclxuICAgIGxheWVyLnBsYXlUaW1lciA9IDA7XHJcbiAgICBsYXllci5ob2xkVGltZXIuY2FuY2VsKCk7XHJcbiAgICBpZiAobGF5ZXIuYXV0b0Rpc2FibGUpIHtcclxuICAgICAgdGhpcy5zZXRMYXllcldlaWdodHMobmFtZSA9PiBuYW1lID09PSBsYXllck5hbWUsIDEpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLl9ob3N0LkFuaW1hdGlvbkZlYXR1cmUucGxheUFuaW1hdGlvbihcclxuICAgICAgbGF5ZXJOYW1lLFxyXG4gICAgICBhbmltYXRpb25OYW1lLFxyXG4gICAgICB0cmFuc2l0aW9uVGltZVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZShkZWx0YVRpbWUpIHtcclxuICAgIHN1cGVyLnVwZGF0ZShkZWx0YVRpbWUpO1xyXG5cclxuICAgIC8vIEluY3JlbWVudCB0aGUgdGltZXJzXHJcbiAgICBPYmplY3QuZW50cmllcyh0aGlzLl9tYW5hZ2VkTGF5ZXJzKS5mb3JFYWNoKChbbmFtZSwgb3B0aW9uc10pID0+IHtcclxuICAgICAgaWYgKG9wdGlvbnMuaXNBY3RpdmUgJiYgIXRoaXMuX2hvc3QuQW5pbWF0aW9uRmVhdHVyZS5nZXRQYXVzZWQobmFtZSkpIHtcclxuICAgICAgICBvcHRpb25zLmhvbGRUaW1lci5leGVjdXRlKGRlbHRhVGltZSk7XHJcblxyXG4gICAgICAgIGlmIChvcHRpb25zLnBsYXlUaW1lciAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgb3B0aW9ucy5wbGF5VGltZXIgKz0gZGVsdGFUaW1lIC8gMTAwMDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgaW5zdGFsbEFwaSgpIHtcclxuICAgIC8qKlxyXG4gICAgICogQGlubmVyXHJcbiAgICAgKiBAbmFtZXNwYWNlIEdlc3R1cmVGZWF0dXJlXHJcbiAgICAgKi9cclxuICAgIGNvbnN0IGFwaSA9IHN1cGVyLmluc3RhbGxBcGkoKTtcclxuXHJcbiAgICBPYmplY3QuYXNzaWduKGFwaSwge1xyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIEdlc3R1cmVGZWF0dXJlXHJcbiAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgKiBAbWV0aG9kXHJcbiAgICAgICAqIEBzZWUgR2VzdHVyZUZlYXR1cmUjY3JlYXRlR2VzdHVyZU1hcFxyXG4gICAgICAgKi9cclxuICAgICAgY3JlYXRlR2VzdHVyZU1hcDogdGhpcy5jcmVhdGVHZXN0dXJlTWFwLmJpbmQodGhpcyksXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbWVtYmVyb2YgR2VzdHVyZUZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBtZXRob2RcclxuICAgICAgICogQHNlZSBHZXN0dXJlRmVhdHVyZSNjcmVhdGVHZW5lcmljR2VzdHVyZUFycmF5XHJcbiAgICAgICAqL1xyXG4gICAgICBjcmVhdGVHZW5lcmljR2VzdHVyZUFycmF5OiB0aGlzLmNyZWF0ZUdlbmVyaWNHZXN0dXJlQXJyYXkuYmluZCh0aGlzKSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBtZW1iZXJvZiBHZXN0dXJlRmVhdHVyZVxyXG4gICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICogQG1ldGhvZFxyXG4gICAgICAgKiBAc2VlIEdlc3R1cmVGZWF0dXJlI3BsYXlHZXN0dXJlXHJcbiAgICAgICAqL1xyXG4gICAgICBwbGF5R2VzdHVyZTogdGhpcy5wbGF5R2VzdHVyZS5iaW5kKHRoaXMpLFxyXG4gICAgfSk7XHJcbiAgfVxyXG59XHJcblxyXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhHZXN0dXJlRmVhdHVyZSwge1xyXG4gIERFRkFVTFRfTEFZRVJfT1BUSU9OUzoge1xyXG4gICAgdmFsdWU6IHtcclxuICAgICAgLi4uR2VzdHVyZUZlYXR1cmUuREVGQVVMVF9MQVlFUl9PUFRJT05TLFxyXG4gICAgICBhdXRvRGlzYWJsZTogdHJ1ZSxcclxuICAgIH0sXHJcbiAgICB3cml0YWJsZTogZmFsc2UsXHJcbiAgfSxcclxuICBFVkVOVF9ERVBFTkRFTkNJRVM6IHtcclxuICAgIHZhbHVlOiB7XHJcbiAgICAgIC4uLkdlc3R1cmVGZWF0dXJlLkVWRU5UX0RFUEVOREVOQ0lFUyxcclxuICAgICAgQW5pbWF0aW9uRmVhdHVyZToge1xyXG4gICAgICAgIC4uLkdlc3R1cmVGZWF0dXJlLkVWRU5UX0RFUEVOREVOQ0lFUy5BbmltYXRpb25GZWF0dXJlLFxyXG4gICAgICAgIHBsYXlOZXh0QW5pbWF0aW9uOiAnX29uTmV4dCcsXHJcbiAgICAgICAgc3RvcEFuaW1hdGlvbjogJ19vblN0b3AnLFxyXG4gICAgICAgIGludGVycnVwdEFuaW1hdGlvbjogJ19vblN0b3AnXHJcbiAgICAgIH0sXHJcbiAgICB9LFxyXG4gIH0sXHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgR2VzdHVyZUZlYXR1cmU7XHJcbmV4cG9ydCB7RGVmYXVsdEdlc3R1cmVXb3Jkc307XHJcbiIsIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxyXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTBcclxuaW1wb3J0IERlZmVycmVkIGZyb20gJ2NvcmUvRGVmZXJyZWQnO1xyXG5pbXBvcnQgVXRpbHMgZnJvbSAnY29yZS9VdGlscyc7XHJcbmltcG9ydCBNYXRoVXRpbHMgZnJvbSAnY29yZS9NYXRoVXRpbHMnO1xyXG5pbXBvcnQge0xpbmVhcn0gZnJvbSAnLi9FYXNpbmcnO1xyXG5cclxuLyoqXHJcbiAqIEEgY29sbGVjdGlvbiBvZiB1c2VmdWwgYW5pbWF0aW9uIGZ1bmN0aW9ucy5cclxuICpcclxuICogQGhpZGVjb25zdHJ1Y3RvclxyXG4gKi9cclxuY2xhc3MgQW5pbWF0aW9uVXRpbHMge1xyXG4gIHN0YXRpYyBsZXJwKGZyb20sIHRvLCBmYWN0b3IpIHtcclxuICAgIGNvbnNvbGUud2FybihgQW5pbWF0aW9uVXRpbHMubGVycCBpcyBiZWluZyBkZXByZWNhdGVkLiBVc2UgTWF0aFV0aWxzLmxlcnAgaW5zdGVhZC5gKTtcclxuXHJcbiAgICByZXR1cm4gTWF0aFV0aWxzLmxlcnAoZnJvbSwgdG8sIGZhY3Rvcik7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDbGFtcCBhIG51bWJlciBiZXR3ZWVuIDIgdmFsdWVzLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIC0gVmFsdWUgdG8gY2xhbXAuXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IFttaW49MF0gLSBNaW51bXVtIHZhbHVlLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbbWF4PTFdIC0gTWF4aW11bSB2YWx1ZS5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XHJcbiAgICovXHJcbiAgc3RhdGljIGNsYW1wKHZhbHVlLCBtaW4gPSAwLCBtYXggPSAxKSB7XHJcbiAgICBjb25zb2xlLndhcm4oYEFuaW1hdGlvblV0aWxzLmNsYW1wIGlzIGJlaW5nIGRlcHJlY2F0ZWQuIFVzZSBNYXRoVXRpbHMuY2xhbXAgaW5zdGVhZC5gKTtcclxuXHJcbiAgICByZXR1cm4gTWF0aFV0aWxzLmNsYW1wKHZhbHVlLCBtaW4sIG1heCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gYSBkZWZlcnJlZCBwcm9taXNlIHRoYXQgY2FuIGJlIHVzZWQgdG8gdXBkYXRlIHRoZSB2YWx1ZSBvZiBhIG51bWVyaWNcclxuICAgKiBwcm9wZXJ0eSBvZiB0aGlzIG9iamVjdCBvdmVyIHRpbWUuIFBhc3MgZGVsdGEgdGltZSBpbiBtaWxsaXNlY29uZHMgdG8gdGhlXHJcbiAgICogZGVmZXJyZWQgcHJvbWlzZSdzIGV4ZWN1dGUgbWV0aG9kIGluIGFuIHVwZGF0ZSBsb29wIHRvIGFuaW1hdGUgdGhlIHByb3BlcnR5XHJcbiAgICogdG93YXJkcyB0aGUgdGFyZ2V0IHZhbHVlLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IHByb3BlcnR5T3duZXIgLSBPYmplY3QgdGhhdCBjb250YWlucyB0aGUgcHJvcGVydHkgdG8gYW5pbWF0aW9uLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eU5hbWUgLSBOYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byBhbmltYXRlLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB0YXJnZXRWYWx1ZSAtIFRhcmdldCB2YWx1ZSB0byByZWFjaC5cclxuICAgKiBAcGFyYW0ge09iamVjdD19IG9wdGlvbnMgLSBPcHRpb25hbCBvcHRpb25zIG9iamVjdFxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5zZWNvbmRzPTBdIC0gTnVtYmVyIG9mIHNlY29uZHMgaXQgd2lsbCB0YWtlIHRvIHJlYWNoXHJcbiAgICogdGhlIHRhcmdldCB2YWx1ZS5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0aW9ucy5lYXNpbmdGbj1MaW5lYXIuSW5PdXRdIC0gRWFzaW5nIGZ1bmN0aW9uIHRvIHVzZSBmb3IgYW5pbWF0aW9uLlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRpb25zLm9uRmluaXNoXSAtIENhbGxiYWNrIHRvIGV4ZWN1dGUgb25jZSB0aGUgYW5pbWF0aW9uIGNvbXBsZXRlcy5cclxuICAgKiBUaGUgdGFyZ2V0IHZhbHVlIGlzIHBhc3NlZCBhcyBhIHBhcmFtZXRlci5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb3B0aW9ucy5vblByb2dyZXNzIC0gQ2FsbGJhY2sgdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGFuaW1hdGlvblxyXG4gICAqIHByb3BlcnR5IGlzIHVwZGF0ZWQgZHVyaW5nIHRoZSBhbmltYXRpb24uIFRoZSBwcm9wZXJ0eSdzIHZhbHVlIGF0IHRoZSB0aW1lIG9mXHJcbiAgICogdGhlIHVwZGF0ZSBpcyBwYXNzZWQgYXMgYSBwYXJhbWV0ZXIuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9wdGlvbnMub25DYW5jZWwgLSBDYWxsYmFjayB0byBleGVjdXRlIGlmIHRoZSB1c2VyIGNhbmNlbHMgdGhlXHJcbiAgICogYW5pbWF0aW9uIGJlZm9yZSBjb21wbGV0aW9uLiBUaGUgYW5pbWF0aW9uIHByb3BlcnR5J3MgdmFsdWUgYXQgdGhlIHRpbWUgb2ZcclxuICAgKiBjYW5jZWwgaXMgcGFzc2VkIGFzIGEgcGFyYW1ldGVyLlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvcHRpb25zLm9uRXJyb3IgLSBDYWxsYmFjayB0byBleGVjdXRlIGlmIHRoZSBhbmltYXRpb24gc3RvcHNcclxuICAgKiBiZWNhdXNlIGFuIGVycm9yIGlzIGVuY291bnRlcmVkLiBUaGUgZXJyb3IgbWVzc2FnZSBpcyBwYXNzZWQgYXMgYSBwYXJhbWV0ZXIuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7RGVmZXJyZWR9IFJlc29sdmVzIHdpdGggdGhlIHByb3BlcnR5J3MgdmFsdWUgb25jZSBpdCByZWFjaGVzIHRoZVxyXG4gICAqIHRhcmdldCB2YWx1ZS5cclxuICAgKi9cclxuICBzdGF0aWMgaW50ZXJwb2xhdGVQcm9wZXJ0eShcclxuICAgIHByb3BlcnR5T3duZXIsXHJcbiAgICBwcm9wZXJ0eU5hbWUsXHJcbiAgICB0YXJnZXRWYWx1ZSxcclxuICAgIHtzZWNvbmRzID0gMCwgZWFzaW5nRm4sIG9uRmluaXNoLCBvblByb2dyZXNzLCBvbkNhbmNlbCwgb25FcnJvcn0gPSB7fVxyXG4gICkge1xyXG4gICAgLy8gTWFrZSBzdXJlIHByb3BlcnR5IGlzIGFuIG9iamVjdFxyXG4gICAgaWYgKCEocHJvcGVydHlPd25lciBpbnN0YW5jZW9mIE9iamVjdCkpIHtcclxuICAgICAgY29uc3QgZSA9IG5ldyBFcnJvcihcclxuICAgICAgICBgQ2Fubm90IGludGVycG9sYXRlIHByb3BlcnR5ICR7cHJvcGVydHlOYW1lfS4gUHJvcGVydHkgb3duZXIgbXVzdCBiZSBhbiBvYmplY3QuYFxyXG4gICAgICApO1xyXG5cclxuICAgICAgaWYgKHR5cGVvZiBvbkVycm9yID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgb25FcnJvcihlKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIERlZmVycmVkLnJlamVjdChlKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBNYWtlIHN1cmUgcHJvcGVydHkgaXMgbnVtZXJpY1xyXG4gICAgaWYgKE51bWJlci5pc05hTihOdW1iZXIocHJvcGVydHlPd25lcltwcm9wZXJ0eU5hbWVdKSkpIHtcclxuICAgICAgY29uc3QgZSA9IG5ldyBFcnJvcihcclxuICAgICAgICBgQ2Fubm90IGludGVycG9sYXRlIHByb3BlcnR5ICR7cHJvcGVydHlOYW1lfS4gUHJvcGVydHkgbXVzdCBiZSBudW1lcmljLmBcclxuICAgICAgKTtcclxuXHJcbiAgICAgIGlmICh0eXBlb2Ygb25FcnJvciA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgIG9uRXJyb3IoZSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBEZWZlcnJlZC5yZWplY3QoZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gTWFrZSBzdXJlIHRoZSB0YXJnZXQgdmFsdWUgaXMgbnVtZXJpY1xyXG4gICAgaWYgKE51bWJlci5pc05hTihOdW1iZXIodGFyZ2V0VmFsdWUpKSkge1xyXG4gICAgICBjb25zdCBlID0gbmV3IEVycm9yKFxyXG4gICAgICAgIGBDYW5ub3QgaW50ZXJwb2xhdGUgcHJvcGVydHkgJHtwcm9wZXJ0eU5hbWV9IHRvIHZhbHVlICR7dGFyZ2V0VmFsdWV9LiBUYXJnZXQgdmFsdWUgbXVzdCBiZSBudW1lcmljLmBcclxuICAgICAgKTtcclxuXHJcbiAgICAgIGlmICh0eXBlb2Ygb25FcnJvciA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgIG9uRXJyb3IoZSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBEZWZlcnJlZC5yZWplY3QoZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUmVzb2x2ZSBpbW1lZGlhdGVseSBpZiB0aGUgdGFyZ2V0IGhhcyBhbHJlYWR5IGJlZW4gcmVhY2hlZFxyXG4gICAgY29uc3Qgc3RhcnRWYWx1ZSA9IHByb3BlcnR5T3duZXJbcHJvcGVydHlOYW1lXTtcclxuXHJcbiAgICBpZiAoc3RhcnRWYWx1ZSA9PT0gdGFyZ2V0VmFsdWUpIHtcclxuICAgICAgaWYgKHR5cGVvZiBvbkZpbmlzaCA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgIG9uRmluaXNoKHRhcmdldFZhbHVlKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIERlZmVycmVkLnJlc29sdmUodGFyZ2V0VmFsdWUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIERlZmF1bHQgdG8gbGluZWFyIGludGVycG9sYXRpb25cclxuICAgIGlmICh0eXBlb2YgZWFzaW5nRm4gIT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgaWYgKGVhc2luZ0ZuICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBjb25zb2xlLndhcm4oXHJcbiAgICAgICAgICBgSW52YWxpZCBwcm9wZXJ0eSBpbnRlcnBvbGF0aW9uIGVhc2luZ0ZuLiBEZWZhdWx0aW5nIHRvIGxpbmVhciBpbnRlcnBvbGF0aW9uLmBcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBlYXNpbmdGbiA9IExpbmVhci5Jbk91dDtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBpbnRlcnBvbGF0b3IgPSBVdGlscy53YWl0KHNlY29uZHMsIHtcclxuICAgICAgb25GaW5pc2g6ICgpID0+IHtcclxuICAgICAgICBwcm9wZXJ0eU93bmVyW3Byb3BlcnR5TmFtZV0gPSB0YXJnZXRWYWx1ZTtcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiBvbkZpbmlzaCA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgb25GaW5pc2godGFyZ2V0VmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgb25DYW5jZWw6ICgpID0+IHtcclxuICAgICAgICBpZiAodHlwZW9mIG9uQ2FuY2VsID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICBvbkNhbmNlbChwcm9wZXJ0eU93bmVyW3Byb3BlcnR5TmFtZV0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgb25Qcm9ncmVzczogcHJvZ3Jlc3MgPT4ge1xyXG4gICAgICAgIGlmIChwcm9wZXJ0eU93bmVyW3Byb3BlcnR5TmFtZV0gIT09IHRhcmdldFZhbHVlKSB7XHJcbiAgICAgICAgICAvLyBDYWxjdWxhdGUgdGhlIGxlcnAgZmFjdG9yXHJcbiAgICAgICAgICBjb25zdCBlYXNlRmFjdG9yID0gZWFzaW5nRm4ocHJvZ3Jlc3MpO1xyXG5cclxuICAgICAgICAgIGlmICh0eXBlb2YgZWFzZUZhY3RvciAhPT0gJ251bWJlcicpIHtcclxuICAgICAgICAgICAgY29uc3QgZSA9IG5ldyBFcnJvcihcclxuICAgICAgICAgICAgICBgSW52YWxpZCBwcm9wZXJ0eSBpbnRlcnBvbGF0aW9uIGVhc2luZ0ZuLiBFYXNpbmdGbiBtdXN0IHJldHVybiBhIG51bWJlci5gXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGludGVycG9sYXRvci5yZWplY3QoZSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyBVcGRhdGUgdGhlIHZhbHVlXHJcbiAgICAgICAgICBwcm9wZXJ0eU93bmVyW3Byb3BlcnR5TmFtZV0gPSBNYXRoVXRpbHMubGVycChcclxuICAgICAgICAgICAgc3RhcnRWYWx1ZSxcclxuICAgICAgICAgICAgdGFyZ2V0VmFsdWUsXHJcbiAgICAgICAgICAgIGVhc2VGYWN0b3JcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBTaWduYWwgcHJvZ3Jlc3NcclxuICAgICAgICBpZiAodHlwZW9mIG9uUHJvZ3Jlc3MgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgIG9uUHJvZ3Jlc3MocHJvcGVydHlPd25lcltwcm9wZXJ0eU5hbWVdKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFNpZ25hbCBjb21wbGV0aW9uIG9uY2UgdGltZSBpcyB1cFxyXG4gICAgICAgIGlmIChwcm9ncmVzcyA9PT0gMSkge1xyXG4gICAgICAgICAgcHJvcGVydHlPd25lcltwcm9wZXJ0eU5hbWVdID0gdGFyZ2V0VmFsdWU7XHJcbiAgICAgICAgICBpbnRlcnBvbGF0b3IucmVzb2x2ZSh0YXJnZXRWYWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICBvbkVycm9yLFxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIGludGVycG9sYXRvcjtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IEFuaW1hdGlvblV0aWxzO1xyXG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cclxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVC0wXHJcbmltcG9ydCBEZWZlcnJlZCBmcm9tICdjb3JlL0RlZmVycmVkJztcclxuaW1wb3J0IE1hdGhVdGlscyBmcm9tICdjb3JlL01hdGhVdGlscyc7XHJcbmltcG9ydCBBbmltYXRpb25VdGlscyBmcm9tICcuLi9BbmltYXRpb25VdGlscyc7XHJcblxyXG4vKipcclxuICogQmFzZSBjbGFzcyBmb3IgYSBzdGF0ZSBpbiBvdXIgYW5pbWF0aW9uIHN5c3RlbS5cclxuICpcclxuICogQGFic3RyYWN0XHJcbiAqL1xyXG5jbGFzcyBBYnN0cmFjdFN0YXRlIHtcclxuICAvKipcclxuICAgKiBAY29uc3RydWN0b3JcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0PX0gb3B0aW9ucyAtIE9wdGlvbnMgZm9yIHRoZSBhbmltYXRpb24gc3RhdGUuXHJcbiAgICogQHBhcmFtIHtzdHJpbmc9fSBvcHRpb25zLm5hbWUgLSBOYW1lIGZvciB0aGUgYW5pbWF0aW9uIHN0YXRlLiBOYW1lcyBtdXN0IGJlXHJcbiAgICogdW5pcXVlIGZvciB0aGUgY29udGFpbmVyIHRoZSBzdGF0ZSBpcyBhcHBsaWVkIHRvIGFuZCBzaG91bGQgYmUgdmFsaWRhdGVkIGF0XHJcbiAgICogdGhlIGNvbnRhaW5lciBsZXZlbC4gSWYgbm8gbmFtZSBpcyBnaXZlbiBpdCB3aWxsIGRlZmF1bHQgdG8gdGhlIGNvbnN0cnVjdG9yXHJcbiAgICogbmFtZS5cclxuICAgKiBAcGFyYW0ge3dlaWdodH0gW29wdGlvbnMud2VpZ2h0PTBdIC0gVGhlIDAtMSBhbW91bnQgb2YgaW5mbHVlbmNlIHRoZSBzdGF0ZSB3aWxsIGhhdmUuXHJcbiAgICovXHJcbiAgY29uc3RydWN0b3Iob3B0aW9ucyA9IHt9KSB7XHJcbiAgICB0aGlzLm5hbWUgPVxyXG4gICAgICBvcHRpb25zLm5hbWUgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMubmFtZSA6IHRoaXMuY29uc3RydWN0b3IubmFtZTtcclxuICAgIHRoaXMuX3dlaWdodCA9XHJcbiAgICAgIG9wdGlvbnMud2VpZ2h0ICE9PSB1bmRlZmluZWRcclxuICAgICAgICA/IE1hdGhVdGlscy5jbGFtcChvcHRpb25zLndlaWdodCwgMCwgMSlcclxuICAgICAgICA6IDA7XHJcbiAgICB0aGlzLl9pbnRlcm5hbFdlaWdodCA9IHRoaXMuX3dlaWdodDtcclxuICAgIHRoaXMuX3BhdXNlZCA9IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuX3Byb21pc2VzID0ge1xyXG4gICAgICBmaW5pc2g6IERlZmVycmVkLnJlc29sdmUoKSxcclxuICAgICAgd2VpZ2h0OiBEZWZlcnJlZC5yZXNvbHZlKCksXHJcbiAgICAgIHBsYXk6IERlZmVycmVkLnJlc29sdmUoKSxcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5fcGxheUNhbGxiYWNrcyA9IHtcclxuICAgICAgb25GaW5pc2g6IHVuZGVmaW5lZCxcclxuICAgICAgb25FcnJvcjogdW5kZWZpbmVkLFxyXG4gICAgICBvbkNhbmNlbDogdW5kZWZpbmVkLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgd2hldGhlciBvciBub3QgdGhlIHN0YXRlIGlzIGN1cnJlbnRseSBwYXVzZWQuXHJcbiAgICpcclxuICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAqL1xyXG4gIGdldCBwYXVzZWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fcGF1c2VkO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyBhbmQgc2V0cyB0aGUgdXNlciBkZWZpbmVkIHdlaWdodC5cclxuICAgKlxyXG4gICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICovXHJcbiAgZ2V0IHdlaWdodCgpIHtcclxuICAgIHJldHVybiB0aGlzLl93ZWlnaHQ7XHJcbiAgfVxyXG5cclxuICBzZXQgd2VpZ2h0KHdlaWdodCkge1xyXG4gICAgdGhpcy5fd2VpZ2h0ID0gTWF0aFV0aWxzLmNsYW1wKHdlaWdodCwgMCwgMSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHdoZXRoZXIgb3Igbm90IHRoZSB3ZWlnaHQgaXMgY3VycmVudGx5IGJlaW5nIGFuaW1hdGVkLlxyXG4gICAqXHJcbiAgICogQHJlYWRvbmx5XHJcbiAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICovXHJcbiAgZ2V0IHdlaWdodFBlbmRpbmcoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fcHJvbWlzZXMud2VpZ2h0ICYmIHRoaXMuX3Byb21pc2VzLndlaWdodC5wZW5kaW5nO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlcyB0aGUgdXNlciBkZWZpbmVkIHdlaWdodCBvdmVyIHRpbWUuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge251bWJlcn0gd2VpZ2h0IC0gVGhlIHRhcmdldCB3ZWlnaHQgdmFsdWUuXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtzZWNvbmRzPTBdIC0gVGhlIGFtb3VudCBvZiB0aW1lIGl0IHdpbGwgdGFrZSB0byByZWFjaCB0aGVcclxuICAgKiB0YXJnZXQgd2VpZ2h0LlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBlYXNpbmdGbiAtIFRoZSBlYXNpbmcgZnVuY3Rpb24gdG8gdXNlIGZvciBpbnRlcnBvbGF0aW9uLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0RlZmVycmVkfVxyXG4gICAqL1xyXG4gIHNldFdlaWdodCh3ZWlnaHQsIHNlY29uZHMgPSAwLCBlYXNpbmdGbikge1xyXG4gICAgdGhpcy5fcHJvbWlzZXMud2VpZ2h0LmNhbmNlbCgpO1xyXG4gICAgd2VpZ2h0ID0gTWF0aFV0aWxzLmNsYW1wKHdlaWdodCk7XHJcblxyXG4gICAgdGhpcy5fcHJvbWlzZXMud2VpZ2h0ID0gQW5pbWF0aW9uVXRpbHMuaW50ZXJwb2xhdGVQcm9wZXJ0eShcclxuICAgICAgdGhpcyxcclxuICAgICAgJ3dlaWdodCcsXHJcbiAgICAgIHdlaWdodCxcclxuICAgICAge3NlY29uZHMsIGVhc2luZ0ZufVxyXG4gICAgKTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5fcHJvbWlzZXMud2VpZ2h0O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgaW50ZXJuYWwgd2VpZ2h0LlxyXG4gICAqXHJcbiAgICogQHJlYWRvbmx5XHJcbiAgICogQHR5cGUge251bWJlcn1cclxuICAgKi9cclxuICBnZXQgaW50ZXJuYWxXZWlnaHQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5faW50ZXJuYWxXZWlnaHQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNdWx0aXBsaWVzIHRoZSB1c2VyIHdlaWdodCBieSBhIGZhY3RvciB0byBkZXRlcm1pbmUgdGhlIGludGVybmFsIHdlaWdodC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBmYWN0b3IgLSAwLTEgbXVsdGlwbGllciB0byBhcHBseSB0byB0aGUgdXNlciB3ZWlnaHQuXHJcbiAgICovXHJcbiAgdXBkYXRlSW50ZXJuYWxXZWlnaHQoZmFjdG9yKSB7XHJcbiAgICB0aGlzLl9pbnRlcm5hbFdlaWdodCA9IHRoaXMuX3dlaWdodCAqIGZhY3RvcjtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZSBhbnkgdmFsdWVzIHRoYXQgbmVlZCB0byBiZSBldmFsdWF0ZWQgZXZlcnkgZnJhbWUuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge251bWJlcn0gZGVsdGFUaW1lIC0gVGltZSBpbiBtaWxsaXNlY29uZHMgc2luY2UgdGhlIGxhc3QgdXBkYXRlLlxyXG4gICAqL1xyXG4gIHVwZGF0ZShkZWx0YVRpbWUpIHtcclxuICAgIGlmICghdGhpcy5fcGF1c2VkKSB7XHJcbiAgICAgIE9iamVjdC52YWx1ZXModGhpcy5fcHJvbWlzZXMpLmZvckVhY2gocHJvbWlzZSA9PiB7XHJcbiAgICAgICAgcHJvbWlzZS5leGVjdXRlKGRlbHRhVGltZSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU3RhcnQgcGxheWJhY2sgb2YgdGhlIHN0YXRlIGZyb20gdGhlIGJlZ2lubmluZy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvbkZpbmlzaCAtIEZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgc3RhdGUgZmluaXNoZXMuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9uRXJyb3IgLSBGdW5jdGlvbiB0byBleGVjdXRlIGlmIHRoZSBzdGF0ZSBlbmNvdW50ZXJzXHJcbiAgICogYW4gZXJyb3IgZHVyaW5nIHBsYXliYWNrLlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvbkNhbmNlbCAtIEZ1bmN0aW9uIHRvIGV4ZWN1dGUgaWYgcGxheWJhY2sgaXMgY2FuY2VsZWQuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7RGVmZXJyZWR9XHJcbiAgICovXHJcbiAgcGxheShvbkZpbmlzaCwgb25FcnJvciwgb25DYW5jZWwpIHtcclxuICAgIHRoaXMuX3BhdXNlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5fcGxheUNhbGxiYWNrcy5vbkZpbmlzaCA9IG9uRmluaXNoO1xyXG4gICAgdGhpcy5fcGxheUNhbGxiYWNrcy5vbkVycm9yID0gb25FcnJvcjtcclxuICAgIHRoaXMuX3BsYXlDYWxsYmFja3Mub25DYW5jZWwgPSBvbkNhbmNlbDtcclxuXHJcbiAgICB0aGlzLl9wcm9taXNlcy5wbGF5ID0gbmV3IERlZmVycmVkKHVuZGVmaW5lZCwgb25GaW5pc2gsIG9uRXJyb3IsIG9uQ2FuY2VsKTtcclxuICAgIHRoaXMuX3Byb21pc2VzLmZpbmlzaCA9IERlZmVycmVkLmFsbChbXHJcbiAgICAgIHRoaXMuX3Byb21pc2VzLnBsYXksXHJcbiAgICAgIHRoaXMuX3Byb21pc2VzLndlaWdodCxcclxuICAgIF0pO1xyXG5cclxuICAgIHJldHVybiB0aGlzLl9wcm9taXNlcy5maW5pc2g7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQYXVzZSBwbGF5YmFjayBvZiB0aGUgc3RhdGUuIFRoaXMgcHJldmVudHMgcGVuZGluZyBwcm9taXNlcyBmcm9tIGJlaW5nIGV4ZWN1dGVkLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAgICovXHJcbiAgcGF1c2UoKSB7XHJcbiAgICB0aGlzLl9wYXVzZWQgPSB0cnVlO1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXN1bWUgcGxheWJhY2sgb2YgdGhlIHN0YXRlLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9uRmluaXNoIC0gRnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBzdGF0ZSBmaW5pc2hlcy5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb25FcnJvciAtIEZ1bmN0aW9uIHRvIGV4ZWN1dGUgaWYgdGhlIHN0YXRlIGVuY291bnRlcnNcclxuICAgKiBhbiBlcnJvciBkdXJpbmcgcGxheWJhY2suXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9uQ2FuY2VsIC0gRnVuY3Rpb24gdG8gZXhlY3V0ZSBpZiBwbGF5YmFjayBpcyBjYW5jZWxlZC5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtEZWZlcnJlZH1cclxuICAgKi9cclxuICByZXN1bWUob25GaW5pc2gsIG9uRXJyb3IsIG9uQ2FuY2VsKSB7XHJcbiAgICB0aGlzLl9wYXVzZWQgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAoIXRoaXMuX3Byb21pc2VzLnBsYXkucGVuZGluZykge1xyXG4gICAgICB0aGlzLl9wbGF5Q2FsbGJhY2tzLm9uRmluaXNoID0gb25GaW5pc2ggfHwgdGhpcy5fcGxheUNhbGxiYWNrcy5vbkZpbmlzaDtcclxuICAgICAgdGhpcy5fcGxheUNhbGxiYWNrcy5vbkVycm9yID0gb25FcnJvciB8fCB0aGlzLl9wbGF5Q2FsbGJhY2tzLm9uRXJyb3I7XHJcbiAgICAgIHRoaXMuX3BsYXlDYWxsYmFja3Mub25DYW5jZWwgPSBvbkNhbmNlbCB8fCB0aGlzLl9wbGF5Q2FsbGJhY2tzLm9uQ2FuY2VsO1xyXG5cclxuICAgICAgdGhpcy5fcHJvbWlzZXMucGxheSA9IG5ldyBEZWZlcnJlZChcclxuICAgICAgICB1bmRlZmluZWQsXHJcbiAgICAgICAgdGhpcy5fcGxheUNhbGxiYWNrcy5vbkZpbmlzaCxcclxuICAgICAgICB0aGlzLl9wbGF5Q2FsbGJhY2tzLm9uRXJyb3IsXHJcbiAgICAgICAgdGhpcy5fcGxheUNhbGxiYWNrcy5vbkNhbmNlbFxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLl9wcm9taXNlcy5maW5pc2ggPSBEZWZlcnJlZC5hbGwoW1xyXG4gICAgICAgIHRoaXMuX3Byb21pc2VzLnBsYXksXHJcbiAgICAgICAgdGhpcy5fcHJvbWlzZXMud2VpZ2h0LFxyXG4gICAgICBdKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcy5fcHJvbWlzZXMuZmluaXNoO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2FuY2VsIHBsYXliYWNrIG9mIHRoZSBzdGF0ZSBhbmQgY2FuY2VsIGFueSBwZW5kaW5nIHByb21pc2VzLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAgICovXHJcbiAgY2FuY2VsKCkge1xyXG4gICAgdGhpcy5fcGF1c2VkID0gdHJ1ZTtcclxuXHJcbiAgICBPYmplY3QudmFsdWVzKHRoaXMuX3Byb21pc2VzKS5mb3JFYWNoKHByb21pc2UgPT4ge1xyXG4gICAgICBwcm9taXNlLmNhbmNlbCgpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTdG9wIHBsYXliYWNrIG9mIHRoZSBzdGF0ZSBhbmQgcmVzb2x2ZSBhbnkgcGVuZGluZyBwcm9taXNlcy5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gICAqL1xyXG4gIHN0b3AoKSB7XHJcbiAgICB0aGlzLl9wYXVzZWQgPSB0cnVlO1xyXG5cclxuICAgIE9iamVjdC52YWx1ZXModGhpcy5fcHJvbWlzZXMpLmZvckVhY2gocHJvbWlzZSA9PiB7XHJcbiAgICAgIHByb21pc2UucmVzb2x2ZSgpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDYW5jZWwgYW55IHBlbmRpbmcgcHJvbWlzZXMgYW5kIHJlbW92ZSByZWZlcmVuY2UgdG8gdGhlbS5cclxuICAgKi9cclxuICBkaXNjYXJkKCkge1xyXG4gICAgdGhpcy5jYW5jZWwoKTtcclxuXHJcbiAgICBkZWxldGUgdGhpcy5fcHJvbWlzZXM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGb3JjZSB0aGUgaW50ZXJuYWwgd2VpZ2h0IHRvIDAuIFNob3VsZCBiZSBjYWxsZWQgYmVmb3JlIHN3aXRjaGluZyBvciB0cmFuc2l0aW9uaW5nXHJcbiAgICogdG8gYSBuZXcgc3RhdGUuXHJcbiAgICovXHJcbiAgZGVhY3RpdmF0ZSgpIHtcclxuICAgIHRoaXMudXBkYXRlSW50ZXJuYWxXZWlnaHQoMCk7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBBYnN0cmFjdFN0YXRlO1xyXG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cclxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVC0wXHJcbmltcG9ydCBEZWZlcnJlZCBmcm9tICdjb3JlL0RlZmVycmVkJztcclxuaW1wb3J0IEFic3RyYWN0U3RhdGUgZnJvbSAnLi9BYnN0cmFjdFN0YXRlJztcclxuXHJcbi8qKlxyXG4gKiBDbGFzcyBmb3Igc21vb3RoIHRyYW5zaXRpb25pbmcgYmV0d2VlbiBzdGF0ZXMgb24gYW4gYW5pbWF0aW9uIGxheWVyLlxyXG4gKlxyXG4gKiBAZXh0ZW5kcyBBYnN0cmFjdFN0YXRlXHJcbiAqL1xyXG5jbGFzcyBUcmFuc2l0aW9uU3RhdGUgZXh0ZW5kcyBBYnN0cmFjdFN0YXRlIHtcclxuICBjb25zdHJ1Y3RvcihvcHRpb25zID0ge30pIHtcclxuICAgIHN1cGVyKG9wdGlvbnMpO1xyXG5cclxuICAgIHRoaXMuX3RvID0gbnVsbDtcclxuICAgIHRoaXMuX2Zyb20gPSBbXTtcclxuICAgIHRoaXMuX3dlaWdodFByb21pc2UgPSBEZWZlcnJlZC5yZXNvbHZlKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgaW50ZXJuYWxXZWlnaHQoKSB7XHJcbiAgICAvLyBGaW5kIHRoZSBjb21iaW5lZCB3ZWlnaHQgb2YgYWxsIHN1Yi1zdGF0ZXNcclxuICAgIGxldCB0b3RhbFdlaWdodCA9IDA7XHJcblxyXG4gICAgaWYgKHRoaXMuX3RvKSB7XHJcbiAgICAgIHRvdGFsV2VpZ2h0ICs9IHRoaXMuX3RvLndlaWdodDtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9mcm9tLmZvckVhY2goc3RhdGUgPT4ge1xyXG4gICAgICB0b3RhbFdlaWdodCArPSBzdGF0ZS53ZWlnaHQ7XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gdG90YWxXZWlnaHQgKiB0aGlzLl9pbnRlcm5hbFdlaWdodDtcclxuICB9XHJcblxyXG4gIHVwZGF0ZUludGVybmFsV2VpZ2h0KGZhY3Rvcikge1xyXG4gICAgc3VwZXIudXBkYXRlSW50ZXJuYWxXZWlnaHQoZmFjdG9yKTtcclxuXHJcbiAgICB0aGlzLl9mcm9tLmZvckVhY2goc3RhdGUgPT4ge1xyXG4gICAgICBzdGF0ZS51cGRhdGVJbnRlcm5hbFdlaWdodCh0aGlzLl9pbnRlcm5hbFdlaWdodCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAodGhpcy5fdG8pIHtcclxuICAgICAgdGhpcy5fdG8udXBkYXRlSW50ZXJuYWxXZWlnaHQodGhpcy5faW50ZXJuYWxXZWlnaHQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlIHN1Yi1zdGF0ZXMgdGhlIHRyYW5zaXRpb24gaXMgY29udHJvbGxpbmcgYW5kIHN0YXJ0IG5ldyB3ZWlnaHRcclxuICAgKiBhbmltYXRpb25zIG9uIGVhY2ggb25lLiBUaGlzIHNob3VsZCBiZSBjYWxsZWQgZWFjaCB0aW1lIHRoZSBjdXJyZW50IHN0YXRlIG9mXHJcbiAgICogYW4gYW5pbWF0aW9uIGxheWVyIGdldHMgdXBkYXRlZCB0byBhIG5ldyB2YWx1ZSBhbmQgYSB0cmFuc2l0aW9uIHRpbWUgZ3JlYXRlclxyXG4gICAqIHRoYXQgemVybyBpcyBzcGVjaWZpZWQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge0FycmF5LjxBYnN0cmFjdFN0YXRlPn0gW2N1cnJlbnRTdGF0ZXM9W11dIC0gU3RhdGVzIHdob3NlIHdlaWdodCB2YWx1ZXNcclxuICAgKiB3aWxsIGJlIGFuaW1hdGVkIHRvIDAuXHJcbiAgICogQHBhcmFtIHtBYnN0cmFjdFN0YXRlPX0gdGFyZ2V0U3RhdGUgLSBTdGF0ZSB3aG9zZSB3ZWlnaHQgd2lsbCBiZSBhbmltYXRlZFxyXG4gICAqIHRvIDEuXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IHRyYW5zaXRpb25UaW1lIC0gQW1vdW50IG9mIHRpbWUgaXQgd2lsbCBpbiBzZWNvbmRzIHRha2UgZm9yXHJcbiAgICogd2VpZ2h0IGFuaW1hdGlvbnMgdG8gY29tcGxldGUuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IGVhc2luZ0ZuIC0gRWFzaW5nIGZ1bmN0aW9uIHRvIHVzZSBmb3Igd2VpZ2h0IGFuaW1hdGlvbnMuXHJcbiAgICogRGVmYXVsdCBpcyBFYXNpbmcuTGluZWFyLkluT3V0LlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvbkNvbXBsZXRlIC0gRnVuY3Rpb24gdG8gZXhlY3V0ZSBvbmNlIGFsbCB3ZWlnaHQgYW5pbWF0aW9uc1xyXG4gICAqIGNvbXBsZXRlLlxyXG4gICAqL1xyXG4gIGNvbmZpZ3VyZShcclxuICAgIGN1cnJlbnRTdGF0ZXMgPSBbXSxcclxuICAgIHRhcmdldFN0YXRlLFxyXG4gICAgdHJhbnNpdGlvblRpbWUsXHJcbiAgICBlYXNpbmdGbixcclxuICAgIG9uQ29tcGxldGVcclxuICApIHtcclxuICAgIC8vIERlYWN0aXZhdGUgYW55IHN0YXRlcyB0aGF0IGFyZW4ndCBpbiB0aGUgbmV3IGNvbmZpZ3VyYXRpb25cclxuICAgIGlmICh0aGlzLl90byA9PT0gdGFyZ2V0U3RhdGUgfHwgY3VycmVudFN0YXRlcy5pbmNsdWRlcyh0aGlzLl90bykpIHtcclxuICAgICAgdGhpcy5fdG8gPSBudWxsO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fZnJvbSA9IHRoaXMuX2Zyb20uZmlsdGVyKFxyXG4gICAgICBzdGF0ZSA9PiBzdGF0ZSAhPT0gdGFyZ2V0U3RhdGUgJiYgIWN1cnJlbnRTdGF0ZXMuaW5jbHVkZXMoc3RhdGUpXHJcbiAgICApO1xyXG4gICAgdGhpcy5kZWFjdGl2YXRlKCk7XHJcblxyXG4gICAgdGhpcy5fZnJvbSA9IGN1cnJlbnRTdGF0ZXM7XHJcbiAgICB0aGlzLl90byA9IHRhcmdldFN0YXRlO1xyXG4gICAgdGhpcy5yZXNldCh0cmFuc2l0aW9uVGltZSwgZWFzaW5nRm4sIG9uQ29tcGxldGUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU3RhcnQgbmV3IHdlaWdodCBhbmltYXRpb25zIHN0YXRlIHRoZSB0cmFuc2l0aW9uIGNvbnRyb2xzLiBUaGlzIHNob3VsZCBiZSBjYWxsZWRcclxuICAgKiBpZiBhbiBhbmltYXRpb24gaXMgcGxheWVkIHdpdGggYSB0cmFuc2l0aW9uIHRpbWUgZ3JlYXRlciB0aGFuIHplcm8gYW5kIGEgdHJhbnN0aW9uXHJcbiAgICogdG8gdGhhdCBhbmltYXRpb24gd2FzIGFscmVhZHkgaW4gcHJvZ3Jlc3MuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge251bWJlcn0gdHJhbnNpdGlvblRpbWUgLSBBbW91bnQgb2YgdGltZSBpdCB3aWxsIGluIHNlY29uZHMgdGFrZSBmb3JcclxuICAgKiB3ZWlnaHQgYW5pbWF0aW9ucyB0byBjb21wbGV0ZS5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gZWFzaW5nRm4gLSBFYXNpbmcgZnVuY3Rpb24gdG8gdXNlIGZvciB3ZWlnaHQgYW5pbWF0aW9ucy5cclxuICAgKiBEZWZhdWx0IGlzIEVhc2luZy5MaW5lYXIuSW5PdXQuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9uQ29tcGxldGUgLSBGdW5jdGlvbiB0byBleGVjdXRlIG9uY2UgYWxsIHdlaWdodCBhbmltYXRpb25zXHJcbiAgICogY29tcGxldGUuXHJcbiAgICovXHJcbiAgcmVzZXQodHJhbnNpdGlvblRpbWUsIGVhc2luZ0ZuLCBvbkNvbXBsZXRlKSB7XHJcbiAgICAvLyBTdG9wIGFueSBwZW5kaW5nIHByb21pc2VzXHJcbiAgICB0aGlzLl93ZWlnaHRQcm9taXNlLmNhbmNlbCgpO1xyXG5cclxuICAgIC8vIFN0YXJ0IHR3ZWVuaW5nIHdlaWdodCB0byAwIGZvciB0aGUgY3VycmVudCBzdGF0ZXNcclxuICAgIGNvbnN0IHdlaWdodFByb21pc2VzID0gdGhpcy5fZnJvbS5tYXAoc3RhdGUgPT5cclxuICAgICAgc3RhdGUuc2V0V2VpZ2h0KDAsIHRyYW5zaXRpb25UaW1lLCBlYXNpbmdGbilcclxuICAgICk7XHJcblxyXG4gICAgLy8gU3RhcnQgdHdlZW5pbmcgd2VpZ2h0IHRvIDEgZm9yIHRoZSB0YXJnZXQgc3RhdGVcclxuICAgIGlmICh0aGlzLl90bykge1xyXG4gICAgICB3ZWlnaHRQcm9taXNlcy5wdXNoKHRoaXMuX3RvLnNldFdlaWdodCgxLCB0cmFuc2l0aW9uVGltZSwgZWFzaW5nRm4pKTtcclxuICAgICAgdGhpcy5uYW1lID0gdGhpcy5fdG8ubmFtZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMubmFtZSA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fd2VpZ2h0UHJvbWlzZSA9IERlZmVycmVkLmFsbCh3ZWlnaHRQcm9taXNlcywgKCkgPT4ge1xyXG4gICAgICB0aGlzLl9mcm9tLmZvckVhY2goc3RhdGUgPT4ge1xyXG4gICAgICAgIHN0YXRlLmNhbmNlbCgpO1xyXG4gICAgICAgIHN0YXRlLmRlYWN0aXZhdGUoKTtcclxuICAgICAgfSk7XHJcbiAgICAgIGlmICh0eXBlb2Ygb25Db21wbGV0ZSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgIG9uQ29tcGxldGUoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwbGF5KG9uRmluaXNoLCBvbkVycm9yLCBvbkNhbmNlbCwgb25OZXh0KSB7XHJcbiAgICB0aGlzLl9wYXVzZWQgPSBmYWxzZTtcclxuICAgIHRoaXMuX3BsYXlDYWxsYmFja3Mub25GaW5pc2ggPSBvbkZpbmlzaDtcclxuICAgIHRoaXMuX3BsYXlDYWxsYmFja3Mub25FcnJvciA9IG9uRXJyb3I7XHJcbiAgICB0aGlzLl9wbGF5Q2FsbGJhY2tzLm9uQ2FuY2VsID0gb25DYW5jZWw7XHJcblxyXG4gICAgY29uc3QgcHJvbWlzZXMgPSBbdGhpcy5fd2VpZ2h0UHJvbWlzZV07XHJcblxyXG4gICAgdGhpcy5fZnJvbS5mb3JFYWNoKHN0YXRlID0+IHtcclxuICAgICAgc3RhdGUucmVzdW1lKCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAodGhpcy5fdG8pIHtcclxuICAgICAgdGhpcy5fcHJvbWlzZXMucGxheSA9IHRoaXMuX3RvLnBsYXkoXHJcbiAgICAgICAgdW5kZWZpbmVkLFxyXG4gICAgICAgIHVuZGVmaW5lZCxcclxuICAgICAgICB1bmRlZmluZWQsXHJcbiAgICAgICAgb25OZXh0XHJcbiAgICAgICk7XHJcbiAgICAgIHByb21pc2VzLnB1c2godGhpcy5fcHJvbWlzZXMucGxheSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fcHJvbWlzZXMuZmluaXNoID0gRGVmZXJyZWQuYWxsKHByb21pc2VzLCBvbkZpbmlzaCwgb25FcnJvciwgb25DYW5jZWwpO1xyXG4gICAgcmV0dXJuIHRoaXMuX3Byb21pc2VzLmZpbmlzaDtcclxuICB9XHJcblxyXG4gIHBhdXNlKCkge1xyXG4gICAgdGhpcy5fZnJvbS5mb3JFYWNoKHN0YXRlID0+IHtcclxuICAgICAgc3RhdGUucGF1c2UoKTtcclxuICAgIH0pO1xyXG5cclxuICAgIGlmICh0aGlzLl90bykge1xyXG4gICAgICB0aGlzLl90by5wYXVzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBzdXBlci5wYXVzZSgpO1xyXG4gIH1cclxuXHJcbiAgcmVzdW1lKG9uRmluaXNoLCBvbkVycm9yLCBvbkNhbmNlbCwgb25OZXh0KSB7XHJcbiAgICB0aGlzLl9wYXVzZWQgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAoIXRoaXMuX3Byb21pc2VzLnBsYXkucGVuZGluZykge1xyXG4gICAgICB0aGlzLl9wbGF5Q2FsbGJhY2tzLm9uRmluaXNoID0gb25GaW5pc2ggfHwgdGhpcy5fcGxheUNhbGxiYWNrcy5vbkZpbmlzaDtcclxuICAgICAgdGhpcy5fcGxheUNhbGxiYWNrcy5vbkVycm9yID0gb25FcnJvciB8fCB0aGlzLl9wbGF5Q2FsbGJhY2tzLm9uRXJyb3I7XHJcbiAgICAgIHRoaXMuX3BsYXlDYWxsYmFja3Mub25DYW5jZWwgPSBvbkNhbmNlbCB8fCB0aGlzLl9wbGF5Q2FsbGJhY2tzLm9uQ2FuY2VsO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHByb21pc2VzID0gW3RoaXMuX3dlaWdodFByb21pc2VdO1xyXG5cclxuICAgIHRoaXMuX2Zyb20uZm9yRWFjaChzdGF0ZSA9PiB7XHJcbiAgICAgIHN0YXRlLnJlc3VtZSgpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKHRoaXMuX3RvKSB7XHJcbiAgICAgIHRoaXMuX3Byb21pc2VzLnBsYXkgPSB0aGlzLl90by5yZXN1bWUoXHJcbiAgICAgICAgdW5kZWZpbmVkLFxyXG4gICAgICAgIHVuZGVmaW5lZCxcclxuICAgICAgICB1bmRlZmluZWQsXHJcbiAgICAgICAgb25OZXh0XHJcbiAgICAgICk7XHJcbiAgICAgIHByb21pc2VzLnB1c2godGhpcy5fcHJvbWlzZXMucGxheSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fcHJvbWlzZXMuZmluaXNoID0gRGVmZXJyZWQuYWxsKFxyXG4gICAgICBwcm9taXNlcyxcclxuICAgICAgdGhpcy5fcGxheUNhbGxiYWNrcy5vbkZpbmlzaCxcclxuICAgICAgdGhpcy5fcGxheUNhbGxiYWNrcy5vbkVycm9yLFxyXG4gICAgICB0aGlzLl9wbGF5Q2FsbGJhY2tzLm9uQ2FuY2VsXHJcbiAgICApO1xyXG4gICAgcmV0dXJuIHRoaXMuX3Byb21pc2VzLmZpbmlzaDtcclxuICB9XHJcblxyXG4gIGNhbmNlbCgpIHtcclxuICAgIHRoaXMuX2Zyb20uZm9yRWFjaChzdGF0ZSA9PiB7XHJcbiAgICAgIHN0YXRlLnBhdXNlKCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAodGhpcy5fdG8pIHtcclxuICAgICAgdGhpcy5fdG8uY2FuY2VsKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fd2VpZ2h0UHJvbWlzZS5jYW5jZWwoKTtcclxuXHJcbiAgICByZXR1cm4gc3VwZXIuY2FuY2VsKCk7XHJcbiAgfVxyXG5cclxuICBzdG9wKCkge1xyXG4gICAgdGhpcy5fZnJvbS5mb3JFYWNoKHN0YXRlID0+IHtcclxuICAgICAgc3RhdGUucGF1c2UoKTtcclxuICAgIH0pO1xyXG5cclxuICAgIGlmICh0aGlzLl90bykge1xyXG4gICAgICB0aGlzLl90by5zdG9wKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHN1cGVyLnN0b3AoKTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZShkZWx0YVRpbWUpIHtcclxuICAgIHN1cGVyLnVwZGF0ZShkZWx0YVRpbWUpO1xyXG5cclxuICAgIHRoaXMuX2Zyb20uZm9yRWFjaChzdGF0ZSA9PiB7XHJcbiAgICAgIHN0YXRlLnVwZGF0ZShkZWx0YVRpbWUpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKHRoaXMuX3RvKSB7XHJcbiAgICAgIHRoaXMuX3RvLnVwZGF0ZShkZWx0YVRpbWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZGlzY2FyZCgpIHtcclxuICAgIHN1cGVyLmRpc2NhcmQoKTtcclxuXHJcbiAgICB0aGlzLl93ZWlnaHRQcm9taXNlLmNhbmNlbCgpO1xyXG4gICAgZGVsZXRlIHRoaXMuX3dlaWdodFByb21pc2U7XHJcbiAgICB0aGlzLl90byA9IG51bGw7XHJcbiAgICB0aGlzLl9mcm9tLmxlbmd0aCA9IDA7XHJcbiAgfVxyXG5cclxuICBkZWFjdGl2YXRlKCkge1xyXG4gICAgaWYgKHRoaXMuX3RvKSB7XHJcbiAgICAgIHRoaXMuX3RvLmRlYWN0aXZhdGUoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9mcm9tLmZvckVhY2goc3RhdGUgPT4ge1xyXG4gICAgICBzdGF0ZS5kZWFjdGl2YXRlKCk7XHJcbiAgICB9KTtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IFRyYW5zaXRpb25TdGF0ZTtcclxuIiwiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXHJcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxyXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtY2xhc3Nlcy1wZXItZmlsZSAqL1xyXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xyXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1lbXB0eS1mdW5jdGlvbiAqL1xyXG4vKiBlc2xpbnQtZGlzYWJsZSBnZXR0ZXItcmV0dXJuICovXHJcbi8qIGVzbGludC1kaXNhYmxlIG5vLXVzZWxlc3MtY29uc3RydWN0b3IgKi9cclxuaW1wb3J0IFRyYW5zaXRpb25TdGF0ZSBmcm9tICcuL3N0YXRlL1RyYW5zaXRpb25TdGF0ZSc7XHJcbmltcG9ydCBEZWZlcnJlZCBmcm9tICcuLi9EZWZlcnJlZCc7XHJcblxyXG4vKipcclxuICogQ2xhc3MgZmFjdG9yeSBpbnRlcmZhY2UgZm9yIGNvbnRyb2xsaW5nIHBsYXliYWNrIG9mIGEgY29sbGVjdGlvbiBvZiBhbmltYXRpb25zLlxyXG4gKiBPbmUgYW5pbWF0aW9uIGNhbiBiZSBwbGF5ZWQgYXQgYW55IGdpdmVuIHRpbWUsIGNyb3NzZmFkaW5nIGJldHdlZW4gYW5pbWF0aW9uc1xyXG4gKiB3aWxsIHJlc3VsdCBpbiBwbGF5aW5nIGEge0BsaW5rIFRyYW5zaXRpb25TdGF0ZX0uXHJcbiAqXHJcbiAqIEBpbnRlcmZhY2VcclxuICovXHJcbmNsYXNzIEFuaW1hdGlvblBsYXllckludGVyZmFjZSB7XHJcbiAgLyoqXHJcbiAgICogR2V0cyB3aGV0aGVyIG9yIG5vdCB0aGUgcGxheWVyIGlzIHVwZGF0aW5nIHN0YXRlcy5cclxuICAgKlxyXG4gICAqIEByZWFkb25seVxyXG4gICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAqL1xyXG4gIGdldCBwYXVzZWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fcGF1c2VkO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyBhbmQgc2V0cyB0aGUgZGVmYXVsdCBudW1iZXIgb2Ygc2Vjb25kcyBpdCB0YWtlcyB0byB0cmFuc2l0aW9uIHRvIGEgbmV3XHJcbiAgICogYW5pbWF0aW9uLlxyXG4gICAqXHJcbiAgICogQHR5cGUge251bWJlcn1cclxuICAgKi9cclxuICBnZXQgdHJhbnNpdGlvblRpbWUoKSB7fVxyXG5cclxuICBzZXQgdHJhbnNpdGlvblRpbWUoc2Vjb25kcykge31cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyBhbmQgc2V0cyB0aGUgZGVmYXVsdCBlYXNpbmcgZnVuY3Rpb24gdG8gdXNlIHdoZW4gdHJhbnNpdGlvbmluZyBhbmRcclxuICAgKiBzZXR0aW5nIHdlaWdodHMuXHJcbiAgICpcclxuICAgKiBAdHlwZSB7RnVuY3Rpb259XHJcbiAgICovXHJcbiAgZ2V0IGVhc2luZ0ZuKCkge31cclxuXHJcbiAgc2V0IGVhc2luZ0ZuKGZuKSB7fVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSBzdGF0ZSB0aGUgbGF5ZXIgaXMgY3VycmVudGx5IGluIGNvbnRyb2wgb2YuXHJcbiAgICpcclxuICAgKiBAcmVhZG9ubHlcclxuICAgKiBAdHlwZSB7QWJzdHJhY3RTdGF0ZX1cclxuICAgKi9cclxuICBnZXQgY3VycmVudFN0YXRlKCkge31cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgbmFtZSBvZiB0aGUgc3RhdGUgdGhlIGxheWVyIGlzIGN1cnJlbnRseSBpbiBjb250cm9sIG9mLlxyXG4gICAqXHJcbiAgICogQHJlYWRvbmx5XHJcbiAgICogQHR5cGUge3N0cmluZ31cclxuICAgKi9cclxuICBnZXQgY3VycmVudEFuaW1hdGlvbigpIHt9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgd2hldGhlciBvciBub3QgdGhlIGxheWVyIGlzIGN1cnJlbnRseSB0cmFuc2l0aW9uaW5nIHRvIGEgbmV3IGFuaW1hdGlvbi5cclxuICAgKlxyXG4gICAqIEByZWFkb25seVxyXG4gICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAqL1xyXG4gIGdldCBpc1RyYW5zaXRpb25pbmcoKSB7fVxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGUgdGhlIGxheWVyJ3MgY3VycmVudCBzdGF0ZSB0byBhIG5ldyB2YWx1ZS4gSWYgdHJhbnNpdGlvblRpbWUgaXMgZGVmaW5lZFxyXG4gICAqIGFuZCBncmVhdGVyIHRoYW4gemVybywgcGVyZm9ybSBhIHNtb290aCBibGVuZCBiZXR3ZWVuIGFueSBzdGF0ZXMgdGhhdCBjdXJyZW50bHlcclxuICAgKiBoYXZlIG5vbi16ZXJvIHdlaWdodCB2YWx1ZXMgYW5kIHRoZSBuZXcgc3RhdGUuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHsoc3RyaW5nfG51bGwpfSBuYW1lIC0gTmFtZSBvZiB0aGUgc3RhdGUgdG8gdHJhbnNpdGlvbiB0by5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGxheU1ldGhvZCAtIE5hbWUgb2YgdGhlIG9wZXJhdGlvbiBiZWluZyBwcmVwYXJlZCBmb3IsIHRvIGJlXHJcbiAgICogdXNlZCBpbiBlcnJvciBtZXNzYWdpbmcuXHJcbiAgICogQHBhcmFtIHtudW1iZXI9fSB0cmFuc2l0aW9uVGltZSAtIEFtb3VudCBvZiB0aW1lIGluIHNlY29uZHMgaXQgd2lsbCB0YWtlIHRvXHJcbiAgICogc3dpdGNoIHRvIHRoZSBuZXcgc3RhdGUuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IGVhc2luZ0ZuIC0gRWFzaW5nIGZ1bmN0aW9uIHRvIHVzZSB3aGVuIHRyYW5zaXRpb25pbmcgdG8gYVxyXG4gICAqIG5ldyBzdGF0ZSBvdmVyIHRpbWUuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9uRXJyb3IgLSBGdW5jdGlvbiB0byBleGVjdXRlIGlmIGFuIGVycm9yIGlzIGVuY291bnRlcmVkLlxyXG4gICAqL1xyXG4gIF9wcmVwYXJlQ3VycmVudFN0YXRlKG5hbWUsIHBsYXlNZXRob2QsIHRyYW5zaXRpb25UaW1lLCBlYXNpbmdGbiwgb25FcnJvcikge31cclxuXHJcbiAgLyoqXHJcbiAgICogU3RhcnQgcGxheWJhY2sgYW4gYW5pbWF0aW9uIGZyb20gdGhlIGJlZ2lubmluZy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gTmFtZSBvZiB0aGUgYW5pbWF0aW9uIHRvIHBsYXkuXHJcbiAgICogQHBhcmFtIHtudW1iZXI9fSB0cmFuc2l0aW9uVGltZSAtIEFtb3VudCBvZiB0aW1lIGl0IHdpbGwgdGFrZSBiZWZvcmUgdGhlXHJcbiAgICogbmV3IHN0YXRlIGhhcyBmdWxsIGluZmx1ZW5jZSBmb3IgdGhlIGxheWVyLlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBlYXNpbmdGbiAtIEVhc2luZyBmdW5jdGlvbiB0byB1c2UgZm9yIGJsZW5kaW5nIGlmIHRyYW5zaXRpb25UaW1lXHJcbiAgICogaXMgZ3JlYXRlciB0aGFuIHplcm8uXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9uRmluaXNoIC0gRnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBhbmltYXRpb24gZmluaXNoZXMuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9uRXJyb3IgLSBGdW5jdGlvbiB0byBleGVjdXRlIGlmIHRoZSBhbmltYXRpb24gZW5jb3VudGVyc1xyXG4gICAqIGFuIGVycm9yIGR1cmluZyBwbGF5YmFjay5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb25DYW5jZWwgLSBGdW5jdGlvbiB0byBleGVjdXRlIGlmIHBsYXliYWNrIGlzIGNhbmNlbGVkLlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvbk5leHQgLSBGdW5jdGlvbiB0byBleGVjdXRlIGlmIGFuIGFuaW1hdGlvbiBxdWV1ZSBpc1xyXG4gICAqIHBsYXllZCBhbmQgaXQgYWR2YW5jZXMgdG8gdGhlIG5leHQgYW5pbWF0aW9uLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0RlZmVycmVkfVxyXG4gICAqL1xyXG4gIHBsYXlBbmltYXRpb24oXHJcbiAgICBuYW1lLFxyXG4gICAgdHJhbnNpdGlvblRpbWUsXHJcbiAgICBlYXNpbmdGbixcclxuICAgIG9uRmluaXNoLFxyXG4gICAgb25FcnJvcixcclxuICAgIG9uQ2FuY2VsLFxyXG4gICAgb25OZXh0XHJcbiAgKSB7fVxyXG5cclxuICAvKipcclxuICAgKiBDYW5jZWwgcGxheWJhY2sgb2YgdGhlIGN1cnJlbnQgYW5pbWF0aW9uLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAgICovXHJcbiAgY2FuY2VsQW5pbWF0aW9uKCkge31cclxuXHJcbiAgLyoqXHJcbiAgICogUGF1c2UgcGxheWJhY2sgb2YgdGhlIGN1cnJlbnQgYW5pbWF0aW9uLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAgICovXHJcbiAgcGF1c2VBbmltYXRpb24oKSB7fVxyXG5cclxuICAvKipcclxuICAgKiBSZXN1bWUgcGxheWJhY2sgb2YgYW4gYW5pbWF0aW9uLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmc9fSBuYW1lIC0gTmFtZSBvZiB0aGUgYW5pbWF0aW9uIHRvIHJlc3VtZSBwbGF5YmFjayBmb3IuIERlZmF1bHRcclxuICAgKiBpcyB0aGUgbGF5ZXIncyBjdXJyZW50IGFuaW1hdGlvbiBuYW1lLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyPX0gdHJhbnNpdGlvblRpbWUgLSBBbW91bnQgb2YgdGltZSBpdCB3aWxsIHRha2UgYmVmb3JlIHRoZVxyXG4gICAqIG5ldyBzdGF0ZSBoYXMgZnVsbCBpbmZsdWVuY2UgZm9yIHRoZSBsYXllci5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb25GaW5pc2ggLSBGdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIHN0YXRlIGZpbmlzaGVzLlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvbkVycm9yIC0gRnVuY3Rpb24gdG8gZXhlY3V0ZSBpZiB0aGUgc3RhdGUgZW5jb3VudGVyc1xyXG4gICAqIGFuIGVycm9yIGR1cmluZyBwbGF5YmFjay5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb25DYW5jZWwgLSBGdW5jdGlvbiB0byBleGVjdXRlIGlmIHBsYXliYWNrIGlzIGNhbmNlbGVkLlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvbk5leHQgLSBGdW5jdGlvbiB0byBleGVjdXRlIGlmIGFuIGFuaW1hdGlvbiBxdWV1ZSBpc1xyXG4gICAqIHBsYXllZCBhbmQgaXQgYWR2YW5jZXMgdG8gdGhlIG5leHQgYW5pbWF0aW9uLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0RlZmVycmVkfVxyXG4gICAqL1xyXG4gIHJlc3VtZUFuaW1hdGlvbihcclxuICAgIG5hbWUsXHJcbiAgICB0cmFuc2l0aW9uVGltZSxcclxuICAgIGVhc2luZ0ZuLFxyXG4gICAgb25GaW5pc2gsXHJcbiAgICBvbkVycm9yLFxyXG4gICAgb25DYW5jZWwsXHJcbiAgICBvbk5leHRcclxuICApIHt9XHJcblxyXG4gIC8qKlxyXG4gICAqIFN0b3AgcGxheWJhY2sgb2YgdGhlIGN1cnJlbnQgYW5pbWF0aW9uLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAgICovXHJcbiAgc3RvcEFuaW1hdGlvbigpIHt9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZSB0aGUgY3VycmVudCBhbmltYXRpb24uXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge251bWJlcn0gZGVsdGFUaW1lIC0gVGltZSBpbiBtaWxsaXNlY29uZHMgc2luY2UgdGhlIGxhc3QgdXBkYXRlLlxyXG4gICAqL1xyXG4gIHVwZGF0ZShkZWx0YVRpbWUpIHt9XHJcblxyXG4gIC8qKlxyXG4gICAqIERpc2NhcmQgdGhlIHRyYW5zaXRpb24gc3RhdGUuXHJcbiAgICovXHJcbiAgZGlzY2FyZCgpIHt9XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZXMgYSBjbGFzcyB0aGF0IGltcGxlbWVudHMge0BsaW5rIEFuaW1hdGlvblBsYXllckludGVyZmFjZX0gYW5kIGV4dGVuZHNcclxuICAgKiBhIHNwZWNpZmllZCBiYXNlIGNsYXNzLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtDbGFzc30gW0Jhc2VDbGFzcyA9IGNsYXNze31dIC0gVGhlIGNsYXNzIHRvIGV4dGVuZC5cclxuICAgKlxyXG4gICAqIEByZXR1cm4ge0NsYXNzfSBBIGNsYXNzIHRoYXQgZXh0ZW5kcyBgQmFzZUNsYXNzYCBhbmQgaW1wbGVtZW50cyB7QGxpbmsgQW5pbWF0aW9uUGxheWVySW50ZXJmYWNlfS5cclxuICAgKi9cclxuICBzdGF0aWMgTWl4aW4oQmFzZUNsYXNzID0gY2xhc3Mge30pIHtcclxuICAgIGNvbnN0IEFuaW1hdGlvblBsYXllck1peGluID0gY2xhc3MgZXh0ZW5kcyBCYXNlQ2xhc3Mge1xyXG4gICAgICBjb25zdHJ1Y3RvcihvcHRpb25zID0ge30sIC4uLmFyZ3MpIHtcclxuICAgICAgICBzdXBlcihvcHRpb25zLCAuLi5hcmdzKTtcclxuXHJcbiAgICAgICAgdGhpcy5fdHJhbnNpdGlvblN0YXRlID0gbmV3IFRyYW5zaXRpb25TdGF0ZSgpO1xyXG4gICAgICAgIHRoaXMuX3N0YXRlcyA9IHRoaXMuX3N0YXRlcyAhPT0gdW5kZWZpbmVkID8gdGhpcy5fc3RhdGVzIDogbmV3IE1hcCgpO1xyXG4gICAgICAgIHRoaXMuX2N1cnJlbnRTdGF0ZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5fcGF1c2VkID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMuX3RyYW5zaXRpb25UaW1lID1cclxuICAgICAgICAgIE51bWJlcihvcHRpb25zLnRyYW5zaXRpb25UaW1lKSA+PSAwXHJcbiAgICAgICAgICAgID8gTnVtYmVyKG9wdGlvbnMudHJhbnNpdGlvblRpbWUpXHJcbiAgICAgICAgICAgIDogMDtcclxuXHJcbiAgICAgICAgdGhpcy5fZWFzaW5nRm4gPVxyXG4gICAgICAgICAgdHlwZW9mIG9wdGlvbnMuZWFzaW5nRm4gPT09ICdmdW5jdGlvbicgPyBvcHRpb25zLmVhc2luZ0ZuIDogdW5kZWZpbmVkO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBnZXQgcGF1c2VkKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wYXVzZWQ7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGdldCB0cmFuc2l0aW9uVGltZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fdHJhbnNpdGlvblRpbWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHNldCB0cmFuc2l0aW9uVGltZShzZWNvbmRzKSB7XHJcbiAgICAgICAgc2Vjb25kcyA9IE51bWJlcihzZWNvbmRzKTtcclxuXHJcbiAgICAgICAgaWYgKCEoc2Vjb25kcyA+PSAwKSkge1xyXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgICAgICBgQ2Fubm90IHNldCB0cmFuc2l0aW9uIHRpbWUgZm9yICR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfSB0byAke3NlY29uZHN9LiBTZWNvbmRzIG11c3QgYmUgYSBudW1lcmljIHZhbHVlIGdyZWF0aGVyIHRoYW4gb3IgZXF1YWwgdG8gemVyby5gXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fdHJhbnNpdGlvblRpbWUgPSBzZWNvbmRzO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBnZXQgZWFzaW5nRm4oKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Vhc2luZ0ZuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBzZXQgZWFzaW5nRm4oZm4pIHtcclxuICAgICAgICB0aGlzLl9lYXNpbmdGbiA9IGZuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBnZXQgY3VycmVudFN0YXRlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9jdXJyZW50U3RhdGU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGdldCBjdXJyZW50QW5pbWF0aW9uKCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9jdXJyZW50U3RhdGUpIHtcclxuICAgICAgICAgIHJldHVybiB0aGlzLl9jdXJyZW50U3RhdGUubmFtZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBnZXQgaXNUcmFuc2l0aW9uaW5nKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9jdXJyZW50U3RhdGUgPT09IHRoaXMuX3RyYW5zaXRpb25TdGF0ZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgX3ByZXBhcmVDdXJyZW50U3RhdGUoXHJcbiAgICAgICAgbmFtZSxcclxuICAgICAgICBwbGF5TWV0aG9kLFxyXG4gICAgICAgIHRyYW5zaXRpb25UaW1lLFxyXG4gICAgICAgIGVhc2luZ0ZuLFxyXG4gICAgICAgIG9uRXJyb3JcclxuICAgICAgKSB7XHJcbiAgICAgICAgaWYgKG5hbWUgIT09IG51bGwgJiYgIXRoaXMuX3N0YXRlcy5oYXMobmFtZSkpIHtcclxuICAgICAgICAgIGNvbnN0IGUgPSBuZXcgRXJyb3IoXHJcbiAgICAgICAgICAgIGBDYW5ub3QgJHtwbGF5TWV0aG9kfSBhbmltYXRpb24gJHtuYW1lfS4gTm8gYW5pbWF0aW9uIGV4aXN0cyB3aXRoIHRoaXMgbmFtZS5gXHJcbiAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgIGlmICh0eXBlb2Ygb25FcnJvciA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICBvbkVycm9yKGUpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHRocm93IGU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCB0YXJnZXRTdGF0ZSA9IG5hbWUgIT09IG51bGwgPyB0aGlzLl9zdGF0ZXMuZ2V0KG5hbWUpIDogbnVsbDtcclxuXHJcbiAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBuZXcgc3RhdGUgaXNuJ3QgYWxyZWFkeSBwbGF5aW5nXHJcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudEFuaW1hdGlvbiAhPT0gbmFtZSkge1xyXG4gICAgICAgICAgLy8gU3dpdGNoIHRvIHRoZSBuZXcgc3RhdGUgaW1tZWRpYXRlbHlcclxuICAgICAgICAgIGlmICh0cmFuc2l0aW9uVGltZSA8PSAwKSB7XHJcbiAgICAgICAgICAgIC8vIENhbmNlbCB0aGUgY3VycmVudCBzdGF0ZSBhbmQgc2V0IGl0cyB3ZWlnaHQgdG8gMFxyXG4gICAgICAgICAgICBpZiAodGhpcy5fY3VycmVudFN0YXRlKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5fY3VycmVudFN0YXRlLmNhbmNlbCgpO1xyXG4gICAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRTdGF0ZS53ZWlnaHQgPSAwO1xyXG4gICAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRTdGF0ZS5kZWFjdGl2YXRlKCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRTdGF0ZSA9IHRhcmdldFN0YXRlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgLy8gQmxlbmQgdG8gdGhlIG5ldyBzdGF0ZSBvdmVyIHRpbWVcclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBNYWtlIHN1cmUgdG8gdHJhbnNpdGlvbiBvdXQgb2YgYW55IHN0YXRlcyB3aXRoIG5vbi16ZXJvIHdlaWdodFxyXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50U3RhdGVzID0gWy4uLnRoaXMuX3N0YXRlcy52YWx1ZXMoKV0uZmlsdGVyKFxyXG4gICAgICAgICAgICAgIHMgPT4gcyAhPT0gdGFyZ2V0U3RhdGUgJiYgKHMud2VpZ2h0IHx8IHMud2VpZ2h0UGVuZGluZylcclxuICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgdHJhbnNpdGlvbiBzdGF0ZSB3aXRoIG5ldyBpbnB1dHNcclxuICAgICAgICAgICAgdGhpcy5fdHJhbnNpdGlvblN0YXRlLmNvbmZpZ3VyZShcclxuICAgICAgICAgICAgICBjdXJyZW50U3RhdGVzLFxyXG4gICAgICAgICAgICAgIHRhcmdldFN0YXRlLFxyXG4gICAgICAgICAgICAgIHRyYW5zaXRpb25UaW1lLFxyXG4gICAgICAgICAgICAgIGVhc2luZ0ZuLFxyXG4gICAgICAgICAgICAgICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRTdGF0ZSA9IHRhcmdldFN0YXRlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fdHJhbnNpdGlvblN0YXRlLndlaWdodCA9IDA7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5fY3VycmVudFN0YXRlID0gdGhpcy5fdHJhbnNpdGlvblN0YXRlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAocGxheU1ldGhvZCA9PT0gJ3BsYXknKSB7XHJcbiAgICAgICAgICB0aGlzLl9jdXJyZW50U3RhdGUuY2FuY2VsKCk7XHJcblxyXG4gICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRTdGF0ZSA9PT0gdGhpcy5fdHJhbnNpdGlvblN0YXRlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3RyYW5zaXRpb25TdGF0ZS5yZXNldCh0cmFuc2l0aW9uVGltZSwgZWFzaW5nRm4sICgpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLl9jdXJyZW50U3RhdGUgPSB0YXJnZXRTdGF0ZTtcclxuICAgICAgICAgICAgICB0aGlzLl90cmFuc2l0aW9uU3RhdGUud2VpZ2h0ID0gMDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBVcGRhdGUgd2VpZ2h0IGZvciB0aGUgbmV3IGN1cnJlbnQgc3RhdGUgc28gaXQgaGFzIGZ1bGwgaW5mbHVlbmNlIGZvciB0aGUgcGxheWVyXHJcbiAgICAgICAgdGhpcy5fY3VycmVudFN0YXRlLndlaWdodCA9IDE7XHJcbiAgICAgICAgdGhpcy5fY3VycmVudFN0YXRlLnVwZGF0ZUludGVybmFsV2VpZ2h0KHRoaXMuX2ludGVybmFsV2VpZ2h0KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcGxheUFuaW1hdGlvbihcclxuICAgICAgICBuYW1lLFxyXG4gICAgICAgIHRyYW5zaXRpb25UaW1lLFxyXG4gICAgICAgIGVhc2luZ0ZuLFxyXG4gICAgICAgIG9uRmluaXNoLFxyXG4gICAgICAgIG9uRXJyb3IsXHJcbiAgICAgICAgb25DYW5jZWwsXHJcbiAgICAgICAgb25OZXh0XHJcbiAgICAgICkge1xyXG4gICAgICAgIGxldCBlcnJvcjtcclxuICAgICAgICBsZXQgcmVqZWN0ID0gZmFsc2U7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIHRoaXMuX3ByZXBhcmVDdXJyZW50U3RhdGUoXHJcbiAgICAgICAgICAgIG5hbWUsXHJcbiAgICAgICAgICAgICdwbGF5JyxcclxuICAgICAgICAgICAgdHJhbnNpdGlvblRpbWUgIT09IHVuZGVmaW5lZFxyXG4gICAgICAgICAgICAgID8gdHJhbnNpdGlvblRpbWVcclxuICAgICAgICAgICAgICA6IHRoaXMuX3RyYW5zaXRpb25UaW1lLFxyXG4gICAgICAgICAgICBlYXNpbmdGbiAhPT0gdW5kZWZpbmVkID8gZWFzaW5nRm4gOiB0aGlzLl9lYXNpbmdGbixcclxuICAgICAgICAgICAgb25FcnJvclxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICBlcnJvciA9IGU7XHJcbiAgICAgICAgICByZWplY3QgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHJlamVjdCkge1xyXG4gICAgICAgICAgcmV0dXJuIERlZmVycmVkLnJlamVjdChlcnJvcik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5fY3VycmVudFN0YXRlLnBsYXkob25GaW5pc2gsIG9uRXJyb3IsIG9uQ2FuY2VsLCBvbk5leHQpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBwYXVzZUFuaW1hdGlvbigpIHtcclxuICAgICAgICBpZiAodGhpcy5fY3VycmVudFN0YXRlKSB7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5fY3VycmVudFN0YXRlLnBhdXNlKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJlc3VtZUFuaW1hdGlvbihcclxuICAgICAgICBuYW1lLFxyXG4gICAgICAgIHRyYW5zaXRpb25UaW1lLFxyXG4gICAgICAgIGVhc2luZ0ZuLFxyXG4gICAgICAgIG9uRmluaXNoLFxyXG4gICAgICAgIG9uRXJyb3IsXHJcbiAgICAgICAgb25DYW5jZWwsXHJcbiAgICAgICAgb25OZXh0XHJcbiAgICAgICkge1xyXG4gICAgICAgIGlmIChuYW1lID09PSB1bmRlZmluZWQgJiYgdGhpcy5fY3VycmVudFN0YXRlKSB7XHJcbiAgICAgICAgICBuYW1lID0gdGhpcy5fY3VycmVudFN0YXRlLm5hbWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgZXJyb3I7XHJcbiAgICAgICAgbGV0IHJlamVjdCA9IGZhbHNlO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICB0aGlzLl9wcmVwYXJlQ3VycmVudFN0YXRlKFxyXG4gICAgICAgICAgICBuYW1lLFxyXG4gICAgICAgICAgICAncmVzdW1lJyxcclxuICAgICAgICAgICAgdHJhbnNpdGlvblRpbWUgIT09IHVuZGVmaW5lZFxyXG4gICAgICAgICAgICAgID8gdHJhbnNpdGlvblRpbWVcclxuICAgICAgICAgICAgICA6IHRoaXMuX3RyYW5zaXRpb25UaW1lLFxyXG4gICAgICAgICAgICBlYXNpbmdGbiAhPT0gdW5kZWZpbmVkID8gZWFzaW5nRm4gOiB0aGlzLl9lYXNpbmdGbixcclxuICAgICAgICAgICAgb25FcnJvclxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICBlcnJvciA9IGU7XHJcbiAgICAgICAgICByZWplY3QgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHJlamVjdCkge1xyXG4gICAgICAgICAgcmV0dXJuIERlZmVycmVkLnJlamVjdChlcnJvcik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5fY3VycmVudFN0YXRlLnJlc3VtZShvbkZpbmlzaCwgb25FcnJvciwgb25DYW5jZWwsIG9uTmV4dCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNhbmNlbEFuaW1hdGlvbigpIHtcclxuICAgICAgICBpZiAodGhpcy5fY3VycmVudFN0YXRlKSB7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5fY3VycmVudFN0YXRlLmNhbmNlbCgpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBzdG9wQW5pbWF0aW9uKCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9jdXJyZW50U3RhdGUpIHtcclxuICAgICAgICAgIHJldHVybiB0aGlzLl9jdXJyZW50U3RhdGUuc3RvcCgpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICB1cGRhdGUoZGVsdGFUaW1lKSB7XHJcbiAgICAgICAgaWYgKHN1cGVyLnVwZGF0ZSkge1xyXG4gICAgICAgICAgc3VwZXIudXBkYXRlKGRlbHRhVGltZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5fY3VycmVudFN0YXRlKSB7XHJcbiAgICAgICAgICB0aGlzLl9jdXJyZW50U3RhdGUudXBkYXRlKGRlbHRhVGltZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBkaXNjYXJkKCkge1xyXG4gICAgICAgIGlmIChzdXBlci5kaXNjYXJkKSB7XHJcbiAgICAgICAgICBzdXBlci5kaXNjYXJkKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl90cmFuc2l0aW9uU3RhdGUuZGlzY2FyZCgpO1xyXG4gICAgICAgIGRlbGV0ZSB0aGlzLl90cmFuc2l0aW9uU3RhdGU7XHJcbiAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIEFuaW1hdGlvblBsYXllck1peGluO1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgQW5pbWF0aW9uUGxheWVySW50ZXJmYWNlO1xyXG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cclxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVC0wXHJcbi8qIGVzbGludC1kaXNhYmxlIG1heC1jbGFzc2VzLXBlci1maWxlICovXHJcbi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXHJcbi8qIGVzbGludC1kaXNhYmxlIG5vLWVtcHR5LWZ1bmN0aW9uICovXHJcbi8qIGVzbGludC1kaXNhYmxlIGdldHRlci1yZXR1cm4gKi9cclxuXHJcbmltcG9ydCBVdGlscyBmcm9tICcuLi8uLi9VdGlscyc7XHJcblxyXG4vKipcclxuICogQ2xhc3MgZmFjdG9yeSBpbnRlcmZhY2UgZm9yIG1hbmlwdWxhdGluZyBhIGNvbGxlY3Rpb24gb2Yge0BsaW5rIEFic3RyYWN0U3RhdGV9LlxyXG4gKlxyXG4gKiBAaW50ZXJmYWNlXHJcbiAqL1xyXG5jbGFzcyBTdGF0ZUNvbnRhaW5lckludGVyZmFjZSB7XHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIHRoZSBzdGF0ZSB3aXRoIHRoZSBnaXZlbiBuYW1lLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBOYW1lIG9mIHRoZSBzdGF0ZS5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtBYnN0cmFjdFN0YXRlfVxyXG4gICAqL1xyXG4gIGdldFN0YXRlKG5hbWUpIHt9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgYW4gYXJyYXkgb2YgdGhlIG5hbWVzIG9mIGFsbCBzdGF0ZXMgaW4gdGhlIGNvbnRhaW5lci5cclxuICAgKlxyXG4gICAqIEB0eXBlIHtBcnJheS48c3RyaW5nPn1cclxuICAgKi9cclxuICBnZXRTdGF0ZU5hbWVzKCkge31cclxuXHJcbiAgLyoqXHJcbiAgICogQWRkIGEgbmV3IHN0YXRlIHRvIGJlIGNvbnRyb2xsZWQgYnkgdGhlIGNvbnRhaW5lci4gU3RhdGVzIGFyZSBzdG9yZWQga2V5ZWRcclxuICAgKiBieSB0aGVpciBuYW1lIHByb3BlcnR5LCB3aGljaCBtdXN0IGJlIHVuaXF1ZS4gSWYgaXQgaXNuJ3QsIGEgbnVtYmVyIHdpbGxcclxuICAgKiBiZSBhZGRlZCBvciBpbmNyZW1lbnRlZCB1bnRpbCBhIHVuaXF1ZSBrZXkgaXMgZ2VuZXJhdGVkLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtBYnN0cmFjdFN0YXRlfSBzdGF0ZSAtIFN0YXRlIHRvIGFkZCB0byB0aGUgY29udGFpbmVyLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge3N0cmluZ30gLSBVbmlxdWUgbmFtZSBvZiB0aGUgc3RhdGUuXHJcbiAgICovXHJcbiAgYWRkU3RhdGUoc3RhdGUpIHt9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlbW92ZXMgYSBzdGF0ZSB3aXRoIHRoZSBnaXZlbiBuYW1lIGZyb20gdGhlIGNvbnRhaW5lci5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gTmFtZSBvZiB0aGUgc3RhdGUgdG8gcmVtb3ZlLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge2Jvb2xlYW59IC0gV2hldGhlciBvciBub3QgYSBzdGF0ZSB3YXMgcmVtb3ZlZC5cclxuICAgKi9cclxuICByZW1vdmVTdGF0ZShuYW1lKSB7fVxyXG5cclxuICAvKipcclxuICAgKiBSZW5hbWVzIGEgc3RhdGUgd2l0aCB0aGUgZ2l2ZW4gbmFtZSBpbiB0aGUgY29udGFpbmVyLiBOYW1lIG11c3QgYmUgdW5pcXVlXHJcbiAgICogdG8gdGhlIGNvbnRhaW5lciwgaWYgaXQgaXNuJ3QgdGhlIG5hbWUgd2lsbCBiZSBpbmNyZW1lbnRlZCB1bnRpbCBpdCBpcyB1bmlxdWUuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gY3VycmVudE5hbWUgLSBOYW1lIG9mIHRoZSBzdGF0ZSB0byByZW5hbWUuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5ld05hbWUgLSBOYW1lIHRvIHVwZGF0ZSB0aGUgc3RhdGUgd2l0aC5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IC0gVXBkYXRlZCBuYW1lIGZvciB0aGUgc3RhdGUuXHJcbiAgICovXHJcbiAgcmVuYW1lU3RhdGUoY3VycmVudE5hbWUsIG5ld05hbWUpIHt9XHJcblxyXG4gIC8qKlxyXG4gICAqIERpc2NhcmRzIGFsbCBzdGF0ZXMuXHJcbiAgICovXHJcbiAgZGlzY2FyZFN0YXRlcygpIHt9XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZXMgYSBjbGFzcyB0aGF0IGltcGxlbWVudHMge0BsaW5rIFN0YXRlQ29udGFpbmVySW50ZXJmYWNlfSBhbmQgZXh0ZW5kc1xyXG4gICAqIGEgc3BlY2lmaWVkIGJhc2UgY2xhc3MuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge0NsYXNzfSBbQmFzZUNsYXNzID0gY2xhc3N7fV0gLSBUaGUgY2xhc3MgdG8gZXh0ZW5kLlxyXG4gICAqXHJcbiAgICogQHJldHVybiB7Q2xhc3N9IEEgY2xhc3MgdGhhdCBleHRlbmRzIGBCYXNlQ2xhc3NgIGFuZCBpbXBsZW1lbnRzIHtAbGluayBTdGF0ZUNvbnRhaW5lckludGVyZmFjZX0uXHJcbiAgICovXHJcbiAgc3RhdGljIE1peGluKEJhc2VDbGFzcyA9IGNsYXNzIHt9KSB7XHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgbWl4aW4gYWRkcyBmdW5jdGlvbmFsaXR5IGZvciBtYW5pcHVsYXRpbmcgdW5pcXVlbHktbmFtZWQgYW5pbWF0aW9uIHN0YXRlcyBpblxyXG4gICAgICogYSBtYXAuXHJcbiAgICAgKi9cclxuICAgIGNvbnN0IFN0YXRlQ29udGFpbmVyTWl4aW4gPSBjbGFzcyBleHRlbmRzIEJhc2VDbGFzcyB7XHJcbiAgICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMgPSB7fSwgLi4uYXJncykge1xyXG4gICAgICAgIHN1cGVyKG9wdGlvbnMsIC4uLmFyZ3MpO1xyXG5cclxuICAgICAgICB0aGlzLl9zdGF0ZXMgPSB0aGlzLl9zdGF0ZXMgIT09IHVuZGVmaW5lZCA/IHRoaXMuX3N0YXRlcyA6IG5ldyBNYXAoKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgZ2V0U3RhdGUobmFtZSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zdGF0ZXMuZ2V0KG5hbWUpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBnZXRTdGF0ZU5hbWVzKCkge1xyXG4gICAgICAgIHJldHVybiBbLi4udGhpcy5fc3RhdGVzLmtleXMoKV07XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGFkZFN0YXRlKHN0YXRlKSB7XHJcbiAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBzdGF0ZSBpcyBub3QgYWxyZWFkeSBpbiB0aGlzIGNvbnRhaW5lclxyXG4gICAgICAgIGlmIChbLi4udGhpcy5fc3RhdGVzLnZhbHVlcygpXS5pbmNsdWRlcyhzdGF0ZSkpIHtcclxuICAgICAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICAgICAgYENhbm5vdCBhZGQgYW5pbWF0aW9uIHRvIHN0YXRlICR7dGhpcy5uYW1lfS4gQW5pbWF0aW9uIHdhcyBhbHJlYWR5IGFkZGVkLmBcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICByZXR1cm4gc3RhdGUubmFtZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgc3RhdGUgbmFtZSBpcyB1bmlxdWVcclxuICAgICAgICBjb25zdCB1bmlxdWVOYW1lID0gVXRpbHMuZ2V0VW5pcXVlTmFtZShzdGF0ZS5uYW1lLCBbXHJcbiAgICAgICAgICAuLi50aGlzLl9zdGF0ZXMua2V5cygpLFxyXG4gICAgICAgIF0pO1xyXG5cclxuICAgICAgICBpZiAoc3RhdGUubmFtZSAhPT0gdW5pcXVlTmFtZSkge1xyXG4gICAgICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgICAgICBgQW5pbWF0aW9uIG5hbWUgJHtzdGF0ZS5uYW1lfSBpcyBub3QgdW5pcXVlIGZvciBzdGF0ZSAke3RoaXMubmFtZX0uIE5ldyBhbmltYXRpb24gd2lsbCBiZSBhZGRlZCB3aXRoIG5hbWUgJHt1bmlxdWVOYW1lfS5gXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgc3RhdGUubmFtZSA9IHVuaXF1ZU5hbWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9zdGF0ZXMuc2V0KHN0YXRlLm5hbWUsIHN0YXRlKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHN0YXRlLm5hbWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJlbW92ZVN0YXRlKG5hbWUpIHtcclxuICAgICAgICAvLyBDaGVjayBpZiB0aGUgc3RhdGUgaXMgaW4gdGhpcyBjb250YWluZXJcclxuICAgICAgICBpZiAoIXRoaXMuX3N0YXRlcyB8fCAhdGhpcy5fc3RhdGVzLmhhcyhuYW1lKSkge1xyXG4gICAgICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgICAgICBgRGlkIG5vdCByZW1vdmUgYW5pbWF0aW9uICR7bmFtZX0gZnJvbSBzdGF0ZSAke3RoaXMubmFtZX0uIE5vIGFuaW1hdGlvbiBleGlzdHMgd2l0aCB0aGlzIG5hbWUuYFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3N0YXRlcy5nZXQobmFtZSkuZGlzY2FyZCgpO1xyXG4gICAgICAgIHRoaXMuX3N0YXRlcy5kZWxldGUobmFtZSk7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJlbmFtZVN0YXRlKGN1cnJlbnROYW1lLCBuZXdOYW1lKSB7XHJcbiAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBzdGF0ZSBpcyBpbiB0aGlzIGNvbnRhaW5lclxyXG4gICAgICAgIGlmICghdGhpcy5fc3RhdGVzIHx8ICF0aGlzLl9zdGF0ZXMuaGFzKGN1cnJlbnROYW1lKSkge1xyXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgICAgICBgQ2Fubm90IHJlbmFtZSBhbmltYXRpb24gJHtjdXJyZW50TmFtZX0gaW4gJHt0aGlzLm5hbWV9LiBObyBhbmltYXRpb24gZXhpc3RzIHdpdGggdGhpcyBuYW1lLmBcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBzdGF0ZSA9IHRoaXMuX3N0YXRlcy5nZXQoY3VycmVudE5hbWUpO1xyXG5cclxuICAgICAgICAvLyBFeGl0IGlmIHRoZSBuYW1lcyBhcmUgdGhlIHNhbWVcclxuICAgICAgICBpZiAoY3VycmVudE5hbWUgPT09IG5ld05hbWUpIHtcclxuICAgICAgICAgIHJldHVybiBjdXJyZW50TmFtZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgbmFtZSBpcyB1bmlxdWVcclxuICAgICAgICBjb25zdCB1bmlxdWVOYW1lID0gVXRpbHMuZ2V0VW5pcXVlTmFtZShcclxuICAgICAgICAgIG5ld05hbWUsXHJcbiAgICAgICAgICBbLi4udGhpcy5fc3RhdGVzLmtleXMoKV0uZmlsdGVyKHMgPT4gcy5uYW1lICE9PSBjdXJyZW50TmFtZSlcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBpZiAobmV3TmFtZSAhPT0gdW5pcXVlTmFtZSkge1xyXG4gICAgICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgICAgICBgQW5pbWF0aW9uIG5hbWUgJHtuZXdOYW1lfSBpcyBub3QgdW5pcXVlIGluIHN0YXRlICR7dGhpcy5uYW1lfS4gQW5pbWF0aW9uIHdpbGwgYmUgcmVuYW1lZCB0byAke3VuaXF1ZU5hbWV9LmBcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBuZXdOYW1lID0gdW5pcXVlTmFtZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHN0YXRlLm5hbWUgPSBuZXdOYW1lO1xyXG4gICAgICAgIHRoaXMuX3N0YXRlcy5kZWxldGUoY3VycmVudE5hbWUpO1xyXG4gICAgICAgIHRoaXMuX3N0YXRlcy5zZXQoc3RhdGUubmFtZSwgc3RhdGUpO1xyXG5cclxuICAgICAgICByZXR1cm4gc3RhdGUubmFtZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgZGlzY2FyZFN0YXRlcygpIHtcclxuICAgICAgICB0aGlzLl9zdGF0ZXMuZm9yRWFjaChzdGF0ZSA9PiB7XHJcbiAgICAgICAgICBzdGF0ZS5kaXNjYXJkKCk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGRlbGV0ZSB0aGlzLl9zdGF0ZXM7XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgICByZXR1cm4gU3RhdGVDb250YWluZXJNaXhpbjtcclxuICB9XHJcbn1cclxuZXhwb3J0IGRlZmF1bHQgU3RhdGVDb250YWluZXJJbnRlcmZhY2U7XHJcbiIsIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxyXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTBcclxuaW1wb3J0IEFic3RyYWN0U3RhdGUgZnJvbSAnLi9BYnN0cmFjdFN0YXRlJztcclxuaW1wb3J0IEFuaW1hdGlvblBsYXllckludGVyZmFjZSBmcm9tICcuLi9BbmltYXRpb25QbGF5ZXJJbnRlcmZhY2UnO1xyXG5pbXBvcnQgU3RhdGVDb250YWluZXJJbnRlcmZhY2UgZnJvbSAnLi9TdGF0ZUNvbnRhaW5lckludGVyZmFjZSc7XHJcblxyXG4vKipcclxuICogQ2xhc3MgZm9yIHBsYXlpbmcgYW4gb3JkZXJlZCBhcnJheSBvZiBhbmltYXRpb24gc3RhdGVzIGluIHNlcXVlbmNlLlxyXG4gKlxyXG4gKiBAZXh0ZW5kcyBBYnN0cmFjdFN0YXRlXHJcbiAqIEBpbXBsZW1lbnRzIEBBbmltYXRpb25QbGF5ZXJJbnRlcmZhY2VcclxuICovXHJcbmNsYXNzIFF1ZXVlU3RhdGUgZXh0ZW5kcyBBbmltYXRpb25QbGF5ZXJJbnRlcmZhY2UuTWl4aW4oXHJcbiAgU3RhdGVDb250YWluZXJJbnRlcmZhY2UuTWl4aW4oQWJzdHJhY3RTdGF0ZSlcclxuKSB7XHJcbiAgLyoqXHJcbiAgICogQGNvbnN0cnVjdG9yXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIC0gT3B0aW9ucyBmb3IgdGhlIHN0YXRlLlxyXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuYXV0b0FkdmFuY2U9dHJ1ZV0gLSBXaGV0aGVyIHRvIGF1dG1hdGljYWxseSBhZHZhbmNlXHJcbiAgICogdG8gdGhlIG5leHQgc3RhdGUgaW4gdGhlIHF1ZXVlIGFzIGVhY2ggc3RhdGUgY29tcGxldGVzLlxyXG4gICAqIEBwYXJhbSB7QXJyYXkuPEFic3RyYWN0U3RhdGU+fSBbcXVldWVTdGF0ZXM9W11dIC0gQXJyYXkgb2Ygc3RhdGVzIHRvIGJlIHBsYXllZFxyXG4gICAqIGluIG9yZGVyLlxyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMgPSB7fSwgcXVldWVTdGF0ZXMgPSBbXSkge1xyXG4gICAgc3VwZXIob3B0aW9ucyk7XHJcblxyXG4gICAgcXVldWVTdGF0ZXMuZm9yRWFjaChzdGF0ZSA9PiB7XHJcbiAgICAgIHRoaXMuYWRkU3RhdGUoc3RhdGUpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5fcXVldWUgPSB0aGlzLl9zdGF0ZXMua2V5cygpO1xyXG4gICAgdGhpcy5fZG9uZSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHdoZXRoZXIgdGhlIGFuaW1hdGlvbiBxdWV1ZSBoYXMgcmVhY2hlZCB0aGUgZW5kLlxyXG4gICAqL1xyXG4gIGdldCBkb25lKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2RvbmU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSBpbnRlcm5hbCB3ZWlnaHQuXHJcbiAgICpcclxuICAgKiBAcmVhZG9ubHlcclxuICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAqL1xyXG4gIGdldCBpbnRlcm5hbFdlaWdodCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9jdXJyZW50U3RhdGVcclxuICAgICAgPyB0aGlzLl9jdXJyZW50U3RhdGUuaW50ZXJuYWxXZWlnaHQgKiB0aGlzLl9pbnRlcm5hbFdlaWdodFxyXG4gICAgICA6IDA7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXN0YXJ0IHRoZSBxdWV1ZSBpdGVyYXRvci5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICovXHJcbiAgX3Jlc2V0KCkge1xyXG4gICAgdGhpcy5fcXVldWUgPSB0aGlzLl9zdGF0ZXMua2V5cygpO1xyXG4gICAgY29uc3Qge3ZhbHVlLCBkb25lfSA9IHRoaXMuX3F1ZXVlLm5leHQoKTtcclxuICAgIHRoaXMuX2RvbmUgPSBkb25lO1xyXG5cclxuICAgIHJldHVybiB2YWx1ZSB8fCBudWxsO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTXVsdGlwbGllcyB0aGUgdXNlciB3ZWlnaHQgYnkgYSBmYWN0b3IgdG8gZGV0ZXJtaW5lIHRoZSBpbnRlcm5hbCB3ZWlnaHQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge251bWJlcn0gZmFjdG9yIC0gMC0xIG11bHRpcGxpZXIgdG8gYXBwbHkgdG8gdGhlIHVzZXIgd2VpZ2h0LlxyXG4gICAqL1xyXG4gIHVwZGF0ZUludGVybmFsV2VpZ2h0KGZhY3Rvcikge1xyXG4gICAgc3VwZXIudXBkYXRlSW50ZXJuYWxXZWlnaHQoZmFjdG9yKTtcclxuXHJcbiAgICBpZiAodGhpcy5fY3VycmVudFN0YXRlKSB7XHJcbiAgICAgIHRoaXMuX2N1cnJlbnRTdGF0ZS51cGRhdGVJbnRlcm5hbFdlaWdodCh0aGlzLl9pbnRlcm5hbFdlaWdodCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTdGFydCB0aGUgbmV4dCBhbmltYXRpb24gaW4gdGhlIHF1ZXVlLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9uTmV4dCAtIEZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIGFuIGFuaW1hdGlvbiBjb21wbGV0ZXNcclxuICAgKiBhbmQgdGhlIHF1ZXVlIG1vdmVzIHRvIHRoZSBuZXh0IGFuaW1hdGlvbi5cclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFt3cmFwPWZhbHNlXSAtIFdoZXRoZXIgb3Igbm90IHRvIHN0YXJ0IHRoZSBxdWV1ZSBmcm9tIHRoZVxyXG4gICAqIGJlZ2lubmluZyBhZ2FpbiBpZiB0aGUgZW5kIGhhcyBiZWVuIHJlYWNoZWQuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7RGVmZXJyZWR9XHJcbiAgICovXHJcbiAgbmV4dChvbk5leHQsIHdyYXAgPSBmYWxzZSkge1xyXG4gICAgLy8gTW92ZSB0aGUgcXVldWUgZm9yd2FyZFxyXG4gICAgY29uc3Qge3ZhbHVlOiBuYW1lLCBkb25lfSA9IHRoaXMuX3F1ZXVlLm5leHQoKTtcclxuICAgIHRoaXMuX2RvbmUgPSBkb25lO1xyXG4gICAgdGhpcy5fcGF1c2VkID0gZmFsc2U7XHJcblxyXG4gICAgLy8gVGhlIHF1ZXVlIGhhcyByZWFjaGVkIHRoZSBlbmRcclxuICAgIGlmIChkb25lKSB7XHJcbiAgICAgIC8vIFN0YXJ0IHRoZSBxdWV1ZSBvdmVyXHJcbiAgICAgIGlmICh3cmFwKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucGxheShcclxuICAgICAgICAgIHRoaXMuX3BsYXlDYWxsYmFja3Mub25GaW5pc2gsXHJcbiAgICAgICAgICB0aGlzLl9wbGF5Q2FsbGJhY2tzLm9uRXJyb3IsXHJcbiAgICAgICAgICB0aGlzLl9wbGF5Q2FsbGJhY2tzLm9uQ2FuY2VsLFxyXG4gICAgICAgICAgb25OZXh0XHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgICAvLyBTdG9wIHRoZSBxdWV1ZVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLl9wcm9taXNlcy5maW5pc2gucmVzb2x2ZSgpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wcm9taXNlcy5maW5pc2g7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBTaWduYWwgdGhlIG5leHQgYW5pbWF0aW9uIGlzIHN0YXJ0aW5nXHJcbiAgICBpZiAodHlwZW9mIG9uTmV4dCA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICBjb25zdCBsYXN0TmFtZSA9IFsuLi50aGlzLl9zdGF0ZXMua2V5cygpXVt0aGlzLl9zdGF0ZXMuc2l6ZSAtIDFdO1xyXG4gICAgICBjb25zdCBpc1F1ZXVlRW5kID0gbmFtZSA9PT0gbGFzdE5hbWU7XHJcbiAgICAgIG9uTmV4dCh7XHJcbiAgICAgICAgbmFtZSxcclxuICAgICAgICBjYW5BZHZhbmNlOiB0aGlzLmdldFN0YXRlKG5hbWUpLmxvb3BDb3VudCAhPT0gSW5maW5pdHkgJiYgIWlzUXVldWVFbmQsXHJcbiAgICAgICAgaXNRdWV1ZUVuZCxcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gU3RhcnQgdGhlIG5leHQgYW5pbWF0aW9uXHJcbiAgICB0aGlzLnBsYXlBbmltYXRpb24oXHJcbiAgICAgIG5hbWUsXHJcbiAgICAgIHRoaXMuX3RyYW5zaXRpb25UaW1lLFxyXG4gICAgICB0aGlzLl9lYXNpbmdGbixcclxuICAgICAgKCkgPT4ge1xyXG4gICAgICAgIGlmICghdGhpcy5fcGF1c2VkICYmICF0aGlzLmlzVHJhbnNpdGlvbmluZykge1xyXG4gICAgICAgICAgdGhpcy5uZXh0KG9uTmV4dCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICB0aGlzLl9wbGF5Q2FsbGJhY2tzLm9uRXJyb3JcclxuICAgICk7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuX3Byb21pc2VzLmZpbmlzaDtcclxuICB9XHJcblxyXG4gIHBsYXkob25GaW5pc2gsIG9uRXJyb3IsIG9uQ2FuY2VsLCBvbk5leHQpIHtcclxuICAgIGNvbnN0IG5hbWUgPSB0aGlzLl9yZXNldCgpO1xyXG4gICAgc3VwZXIucGxheShvbkZpbmlzaCwgb25FcnJvciwgb25DYW5jZWwpO1xyXG5cclxuICAgIGlmICh0aGlzLl9kb25lKSB7XHJcbiAgICAgIHRoaXMuX3Byb21pc2VzLmZpbmlzaC5yZXNvbHZlKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBTaWduYWwgdGhlIG5leHQgYW5pbWF0aW9uIGlzIHN0YXJ0aW5nXHJcbiAgICAgIGlmIChuYW1lICE9PSB0aGlzLmN1cnJlbnRBbmltYXRpb24gJiYgdHlwZW9mIG9uTmV4dCA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgIGNvbnN0IGxhc3ROYW1lID0gWy4uLnRoaXMuX3N0YXRlcy5rZXlzKCldW3RoaXMuX3N0YXRlcy5zaXplIC0gMV07XHJcbiAgICAgICAgY29uc3QgaXNRdWV1ZUVuZCA9IG5hbWUgPT09IGxhc3ROYW1lO1xyXG4gICAgICAgIG9uTmV4dCh7XHJcbiAgICAgICAgICBuYW1lLFxyXG4gICAgICAgICAgY2FuQWR2YW5jZTogbmFtZVxyXG4gICAgICAgICAgICA/IHRoaXMuZ2V0U3RhdGUobmFtZSkubG9vcENvdW50ICE9PSBJbmZpbml0eSAmJiAhaXNRdWV1ZUVuZFxyXG4gICAgICAgICAgICA6IHRydWUsXHJcbiAgICAgICAgICBpc1F1ZXVlRW5kOiAhbmFtZSB8fCBpc1F1ZXVlRW5kLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBTdGFydCB0aGUgbmV4dCBhbmltYXRpb25cclxuICAgICAgdGhpcy5wbGF5QW5pbWF0aW9uKFxyXG4gICAgICAgIG5hbWUsXHJcbiAgICAgICAgdGhpcy5fY3VycmVudFN0YXRlID8gdGhpcy5fdHJhbnNpdGlvblRpbWUgOiAwLFxyXG4gICAgICAgIHRoaXMuX2Vhc2luZ0ZuLFxyXG4gICAgICAgICgpID0+IHtcclxuICAgICAgICAgIGlmICghdGhpcy5fcGF1c2VkICYmICF0aGlzLmlzVHJhbnNpdGlvbmluZykge1xyXG4gICAgICAgICAgICB0aGlzLm5leHQob25OZXh0KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIG9uRXJyb3JcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcy5fcHJvbWlzZXMuZmluaXNoO1xyXG4gIH1cclxuXHJcbiAgcGF1c2UoKSB7XHJcbiAgICBjb25zdCBwYXVzZWQgPSBzdXBlci5wYXVzZSgpO1xyXG4gICAgdGhpcy5wYXVzZUFuaW1hdGlvbigpO1xyXG5cclxuICAgIHJldHVybiBwYXVzZWQ7XHJcbiAgfVxyXG5cclxuICByZXN1bWUob25GaW5pc2gsIG9uRXJyb3IsIG9uQ2FuY2VsLCBvbk5leHQpIHtcclxuICAgIGlmICh0aGlzLl9kb25lKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnBsYXkob25GaW5pc2gsIG9uRXJyb3IsIG9uQ2FuY2VsLCBvbk5leHQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgc3VwZXIucmVzdW1lKG9uRmluaXNoLCBvbkVycm9yLCBvbkNhbmNlbCk7XHJcblxyXG4gICAgICB0aGlzLnJlc3VtZUFuaW1hdGlvbihcclxuICAgICAgICB0aGlzLl9jdXJyZW50U3RhdGUubmFtZSxcclxuICAgICAgICB0aGlzLl90cmFuc2l0aW9uVGltZSxcclxuICAgICAgICB0aGlzLl9lYXNpbmdGbixcclxuICAgICAgICAoKSA9PiB7XHJcbiAgICAgICAgICBpZiAoIXRoaXMuX3BhdXNlZCAmJiAhdGhpcy5pc1RyYW5zaXRpb25pbmcpIHtcclxuICAgICAgICAgICAgdGhpcy5uZXh0KG9uTmV4dCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBvbkVycm9yXHJcbiAgICAgICk7XHJcblxyXG4gICAgICByZXR1cm4gdGhpcy5fcHJvbWlzZXMuZmluaXNoO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2FuY2VsKCkge1xyXG4gICAgY29uc3QgY2FuY2VsZWQgPSBzdXBlci5jYW5jZWwoKTtcclxuXHJcbiAgICBpZiAodGhpcy5fY3VycmVudFN0YXRlKSB7XHJcbiAgICAgIHRoaXMuX2N1cnJlbnRTdGF0ZS5jYW5jZWwoKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gY2FuY2VsZWQ7XHJcbiAgfVxyXG5cclxuICBzdG9wKCkge1xyXG4gICAgY29uc3Qgc3RvcHBlZCA9IHN1cGVyLnN0b3AoKTtcclxuICAgIHRoaXMuc3RvcEFuaW1hdGlvbigpO1xyXG4gICAgdGhpcy5fZG9uZSA9IHRydWU7XHJcblxyXG4gICAgcmV0dXJuIHN0b3BwZWQ7XHJcbiAgfVxyXG5cclxuICBkaXNjYXJkKCkge1xyXG4gICAgc3VwZXIuZGlzY2FyZCgpO1xyXG5cclxuICAgIHRoaXMuZGlzY2FyZFN0YXRlcygpO1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgUXVldWVTdGF0ZTtcclxuIiwiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXHJcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxyXG5pbXBvcnQgRGVmZXJyZWQgZnJvbSAnY29yZS9EZWZlcnJlZCc7XHJcbmltcG9ydCBNYXRoVXRpbHMgZnJvbSAnY29yZS9NYXRoVXRpbHMnO1xyXG5pbXBvcnQgQWJzdHJhY3RTdGF0ZSBmcm9tICcuL0Fic3RyYWN0U3RhdGUnO1xyXG5pbXBvcnQgU3RhdGVDb250YWluZXJJbnRlcmZhY2UgZnJvbSAnLi9TdGF0ZUNvbnRhaW5lckludGVyZmFjZSc7XHJcblxyXG4vKipcclxuICogQmFzZSBjbGFzcyBmb3IgYSBzdGF0ZSB0aGF0IGJsZW5kcyBhIGNvbGxlY3Rpb24gb2Yge0BsaW5rIEFic3RyYWN0U3RhdGV9LlxyXG4gKlxyXG4gKiBAYWJzdHJhY3RcclxuICogQGltcGxlbWVudHMgU3RhdGVDb250YWluZXJJbnRlcmZhY2VcclxuICovXHJcbmNsYXNzIEFic3RyYWN0QmxlbmRTdGF0ZSBleHRlbmRzIFN0YXRlQ29udGFpbmVySW50ZXJmYWNlLk1peGluKEFic3RyYWN0U3RhdGUpIHtcclxuICBjb25zdHJ1Y3RvcihvcHRpb25zID0ge30sIGJsZW5kU3RhdGVzID0gW10sIC4uLmFyZ3MpIHtcclxuICAgIHN1cGVyKG9wdGlvbnMsIC4uLmFyZ3MpO1xyXG4gICAgYmxlbmRTdGF0ZXMuZm9yRWFjaChzdGF0ZSA9PiB7XHJcbiAgICAgIHRoaXMuYWRkU3RhdGUoc3RhdGUpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSBzdW0gb2YgaW50ZXJuYWwgd2VpZ2h0cyBvZiB0aGUgc3ViLXN0YXRlcy5cclxuICAgKlxyXG4gICAqIEByZWFkb25seVxyXG4gICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICovXHJcbiAgZ2V0IGludGVybmFsV2VpZ2h0KCkge1xyXG4gICAgbGV0IGJsZW5kV2VpZ2h0cyA9IDA7XHJcbiAgICB0aGlzLl9zdGF0ZXMuZm9yRWFjaChzdGF0ZSA9PiB7XHJcbiAgICAgIGJsZW5kV2VpZ2h0cyArPSBzdGF0ZS5pbnRlcm5hbFdlaWdodDtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGJsZW5kV2VpZ2h0cztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdGhlIHdlaWdodCBvZiBhIHN0YXRlIGNvbnRyb2xsZWQgYnkgdGhlIGNvbnRhaW5lci5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gTmFtZSBvZiB0aGUgc3RhdGUgdG8gcmV0dXJuIHRoZSB3ZWlnaHQgZnJvbS5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IC0gV2VpZ2h0IG9mIHRoZSBzdGF0ZS5cclxuICAgKi9cclxuICBnZXRCbGVuZFdlaWdodChuYW1lKSB7XHJcbiAgICAvLyBNYWtlIHN1cmUgdGhlIG5hbWUgaXMgdmFsaWRcclxuICAgIGNvbnN0IHN0YXRlID0gdGhpcy5nZXRTdGF0ZShuYW1lKTtcclxuICAgIGlmIChzdGF0ZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgQ2Fubm90IGdldCB3ZWlnaHQgb2Ygc3RhdGUgJHtuYW1lfSBmcm9tIEJsZW5kU3RhdGUgJHt0aGlzLm5hbWV9LiBObyBzdGF0ZSBleGlzdHMgd2l0aCB0aGlzIG5hbWUuYFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBzdGF0ZS53ZWlnaHQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXRzIHRoZSB3ZWlnaHQgb2YgYSBzdGF0ZSBjb250cm9sbGVkIGJ5IHRoZSBjb250YWluZXIuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIE5hbWUgb2YgdGhlIHN0YXRlIHRvIHNldCB0aGUgd2VpZ2h0IG9mLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB3ZWlnaHQgLSBXZWlnaHQgdmFsdWUgdG8gc2V0IG9uIHRoZSBzdGF0ZS5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtEZWZlcnJlZH1cclxuICAgKi9cclxuICBzZXRCbGVuZFdlaWdodChuYW1lLCB3ZWlnaHQsIHNlY29uZHMgPSAwLCBlYXNpbmdGbikge1xyXG4gICAgLy8gTWFrZSBzdXJlIHRoZSBuYW1lIGlzIHZhbGlkXHJcbiAgICBjb25zdCBzdGF0ZSA9IHRoaXMuZ2V0U3RhdGUobmFtZSk7XHJcblxyXG4gICAgaWYgKHN0YXRlID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgIGBDYW5ub3Qgc2V0IHdlaWdodCBvZiBzdGF0ZSAke25hbWV9IGZyb20gQmxlbmRTdGF0ZSAke3RoaXMubmFtZX0uIE5vIHN0YXRlIGV4aXN0cyB3aXRoIHRoaXMgbmFtZS5gXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgd2VpZ2h0ID0gTWF0aFV0aWxzLmNsYW1wKHdlaWdodCk7XHJcbiAgICByZXR1cm4gc3RhdGUuc2V0V2VpZ2h0KHdlaWdodCwgc2Vjb25kcywgZWFzaW5nRm4pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTXVsdGlwbGllcyB0aGUgd2VpZ2h0IG9mIGVhY2ggc3ViLXN0YXRlIGJ5IGEgZmFjdG9yIHRvIGRldGVybWluZSB0aGUgaW50ZXJuYWwgd2VpZ2h0LlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IGZhY3RvciAtIDAtMSBtdWx0aXBsaWVyIHRvIGFwcGx5IHRvIHRoZSB1c2VyIHdlaWdodC5cclxuICAgKi9cclxuICB1cGRhdGVJbnRlcm5hbFdlaWdodChmYWN0b3IpIHtcclxuICAgIHN1cGVyLnVwZGF0ZUludGVybmFsV2VpZ2h0KGZhY3Rvcik7XHJcblxyXG4gICAgdGhpcy5fc3RhdGVzLmZvckVhY2goc3RhdGUgPT4ge1xyXG4gICAgICBzdGF0ZS51cGRhdGVJbnRlcm5hbFdlaWdodCh0aGlzLl9pbnRlcm5hbFdlaWdodCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZSBhbnkgdmFsdWVzIG9mIHRoZSBzdWItc3RhdGVzIHRoYXQgbmVlZCB0byBiZSBldmFsdWF0ZWQgZXZlcnkgZnJhbWUuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge251bWJlcn0gZGVsdGFUaW1lIC0gVGltZSBpbiBtaWxsaXNlY29uZHMgc2luY2UgdGhlIGxhc3QgdXBkYXRlLlxyXG4gICAqL1xyXG4gIHVwZGF0ZShkZWx0YVRpbWUpIHtcclxuICAgIHN1cGVyLnVwZGF0ZShkZWx0YVRpbWUpO1xyXG5cclxuICAgIHRoaXMuX3N0YXRlcy5mb3JFYWNoKHN0YXRlID0+IHtcclxuICAgICAgc3RhdGUudXBkYXRlKGRlbHRhVGltZSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFN0YXJ0IHBsYXliYWNrIG9mIHRoZSBzdWItc3RhdGVzIGZyb20gdGhlIGJlZ2lubmluZy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvbkZpbmlzaCAtIEZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgc3RhdGUgZmluaXNoZXMuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9uRXJyb3IgLSBGdW5jdGlvbiB0byBleGVjdXRlIGlmIHRoZSBzdGF0ZSBlbmNvdW50ZXJzXHJcbiAgICogYW4gZXJyb3IgZHVyaW5nIHBsYXliYWNrLlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvbkNhbmNlbCAtIEZ1bmN0aW9uIHRvIGV4ZWN1dGUgaWYgcGxheWJhY2sgaXMgY2FuY2VsZWQuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7RGVmZXJyZWR9XHJcbiAgICovXHJcbiAgcGxheShvbkZpbmlzaCwgb25FcnJvciwgb25DYW5jZWwpIHtcclxuICAgIGNvbnN0IHByb21pc2VzID0gW3N1cGVyLnBsYXkoKV07XHJcblxyXG4gICAgdGhpcy5fc3RhdGVzLmZvckVhY2goc3RhdGUgPT4ge1xyXG4gICAgICBwcm9taXNlcy5wdXNoKHN0YXRlLnBsYXkoKSk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBEZWZlcnJlZC5hbGwocHJvbWlzZXMsIG9uRmluaXNoLCBvbkVycm9yLCBvbkNhbmNlbCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQYXVzZSBwbGF5YmFjayBvZiB0aGUgc3ViLXN0YXRlcy4gVGhpcyBwcmV2ZW50cyBwZW5kaW5nIHByb21pc2VzIGZyb20gYmVpbmcgZXhlY3V0ZWQuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuICAgKi9cclxuICBwYXVzZSgpIHtcclxuICAgIHRoaXMuX3N0YXRlcy5mb3JFYWNoKHN0YXRlID0+IHtcclxuICAgICAgc3RhdGUucGF1c2UoKTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHN1cGVyLnBhdXNlKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXN1bWUgcGxheWJhY2sgb2YgdGhlIHN1Yi1zdGF0ZXMuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb25GaW5pc2ggLSBGdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIHN0YXRlIGZpbmlzaGVzLlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvbkVycm9yIC0gRnVuY3Rpb24gdG8gZXhlY3V0ZSBpZiB0aGUgc3RhdGUgZW5jb3VudGVyc1xyXG4gICAqIGFuIGVycm9yIGR1cmluZyBwbGF5YmFjay5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb25DYW5jZWwgLSBGdW5jdGlvbiB0byBleGVjdXRlIGlmIHBsYXliYWNrIGlzIGNhbmNlbGVkLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0RlZmVycmVkfVxyXG4gICAqL1xyXG4gIHJlc3VtZShvbkZpbmlzaCwgb25FcnJvciwgb25DYW5jZWwpIHtcclxuICAgIGNvbnN0IHByb21pc2VzID0gW3N1cGVyLnJlc3VtZSgpXTtcclxuXHJcbiAgICB0aGlzLl9zdGF0ZXMuZm9yRWFjaChzdGF0ZSA9PiB7XHJcbiAgICAgIHByb21pc2VzLnB1c2goc3RhdGUucmVzdW1lKCkpO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gRGVmZXJyZWQuYWxsKHByb21pc2VzLCBvbkZpbmlzaCwgb25FcnJvciwgb25DYW5jZWwpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2FuY2VsIHBsYXliYWNrIG9mIHRoZSBzdWItc3RhdGVzIGFuZCBjYW5jZWwgYW55IHBlbmRpbmcgcHJvbWlzZXMuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuICAgKi9cclxuICBjYW5jZWwoKSB7XHJcbiAgICB0aGlzLl9zdGF0ZXMuZm9yRWFjaChzdGF0ZSA9PiB7XHJcbiAgICAgIHN0YXRlLmNhbmNlbCgpO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gc3VwZXIuY2FuY2VsKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTdG9wIHBsYXliYWNrIG9mIHRoZSBzdWItc3RhdGVzIGFuZCByZXNvbHZlIGFueSBwZW5kaW5nIHByb21pc2VzLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAgICovXHJcbiAgc3RvcCgpIHtcclxuICAgIHRoaXMuX3N0YXRlcy5mb3JFYWNoKHN0YXRlID0+IHtcclxuICAgICAgc3RhdGUuc3RvcCgpO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gc3VwZXIuc3RvcCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRGlzY2FyZHMgYWxsIHN1Yi1zdGF0ZSByZXNvdXJjZXMuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuICAgKi9cclxuICBkaXNjYXJkKCkge1xyXG4gICAgc3VwZXIuZGlzY2FyZCgpO1xyXG5cclxuICAgIHRoaXMuZGlzY2FyZFN0YXRlcygpO1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgQWJzdHJhY3RCbGVuZFN0YXRlO1xyXG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cclxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVC0wXHJcbmltcG9ydCBBYnN0cmFjdEJsZW5kU3RhdGUgZnJvbSAnLi9BYnN0cmFjdEJsZW5kU3RhdGUnO1xyXG5cclxuLyoqXHJcbiAqIENsYXNzIGZvciBibGVuZGluZyBOIG51bWJlciBvZiBibGVuZCBzdGF0ZXMuXHJcbiAqXHJcbiAqIEBleHRlbmRzIEFic3RyYWN0QmxlbmRTdGF0ZVxyXG4gKi9cclxuY2xhc3MgRnJlZUJsZW5kU3RhdGUgZXh0ZW5kcyBBYnN0cmFjdEJsZW5kU3RhdGUge1xyXG4gIC8qKlxyXG4gICAqIEBjb25zdHJ1Y3RvclxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XSAtIE9wdGlvbnMgZm9yIHRoZSBjb250YWluZXIgc3RhdGUuXHJcbiAgICogQHBhcmFtIHtBcnJheS48QWJzdHJhY3RTdGF0ZT59IFtibGVuZFN0YXRlcz1bXV0gLSBCbGVuZCBzdGF0ZXMgdG8gYmUgY29udHJvbGxlZCBieVxyXG4gICAqIHRoaXMgY29udGFpbmVyLlxyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMgPSB7fSwgYmxlbmRTdGF0ZXMgPSBbXSkge1xyXG4gICAgc3VwZXIob3B0aW9ucywgYmxlbmRTdGF0ZXMpO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlSW50ZXJuYWxXZWlnaHQoZmFjdG9yKSB7XHJcbiAgICBzdXBlci51cGRhdGVJbnRlcm5hbFdlaWdodChmYWN0b3IpO1xyXG5cclxuICAgIC8vIERldGVybWluZSB0aGUgdG90YWwgYWN0aXZlIHdlaWdodCBvZiBibGVuZCBzdGF0ZXNcclxuICAgIGxldCBzdW1XZWlnaHRzID0gMDtcclxuXHJcbiAgICB0aGlzLl9zdGF0ZXMuZm9yRWFjaChzdGF0ZSA9PiB7XHJcbiAgICAgIHN1bVdlaWdodHMgKz0gc3RhdGUud2VpZ2h0O1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gRW5zdXJlIHRoZSBzdW0gb2YgYmxlbmQgc3RhdGUgaW50ZXJuYWwgd2VpZ2h0cyBkb2VzIG5vdCBleGNlZWQgY29udGFpbmVyIGludGVybmFsIHdlaWdodFxyXG4gICAgZmFjdG9yIC89IE1hdGgubWF4KHN1bVdlaWdodHMsIDEpO1xyXG5cclxuICAgIC8vIFN1bSBvZiBibGVuZCBzdGF0ZSBpbnRlcm5hbCB3ZWlnaHRzIHNob3VsZCBub3QgZXhjZWVkIGNvbnRhaW5lciBpbnRlcm5hbCB3ZWlnaHRcclxuICAgIHRoaXMuX3N0YXRlcy5mb3JFYWNoKHN0YXRlID0+IHtcclxuICAgICAgc3RhdGUudXBkYXRlSW50ZXJuYWxXZWlnaHQoZmFjdG9yICogdGhpcy5fd2VpZ2h0KTtcclxuICAgIH0pO1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgRnJlZUJsZW5kU3RhdGU7XHJcbiIsIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxyXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTBcclxuaW1wb3J0IERlZmVycmVkIGZyb20gJ2NvcmUvRGVmZXJyZWQnO1xyXG5pbXBvcnQgQWJzdHJhY3RCbGVuZFN0YXRlIGZyb20gJy4vQWJzdHJhY3RCbGVuZFN0YXRlJztcclxuaW1wb3J0IEFuaW1hdGlvblV0aWxzIGZyb20gJy4uL0FuaW1hdGlvblV0aWxzJztcclxuXHJcbi8qKlxyXG4gKiBDbGFzcyBmb3IgYmxlbmRpbmcgTiBudW1iZXIgb2YgYmxlbmQgc3RhdGVzIGJhc2VkIG9uIGEgc2luZ2xlXHJcbiAqIHBhcmFtZXRlci5cclxuICpcclxuICogQGV4dGVuZHMgQWJzdHJhY3RCbGVuZFN0YXRlXHJcbiAqL1xyXG5jbGFzcyBCbGVuZDFkU3RhdGUgZXh0ZW5kcyBBYnN0cmFjdEJsZW5kU3RhdGUge1xyXG4gIC8qKlxyXG4gICAqIEBjb25zdHJ1Y3RvclxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSAtIE9wdGlvbnMgZm9yIHRoZSBjb250YWluZXIgc3RhdGVcclxuICAgKiBAcGFyYW0ge0FycmF5LjxBYnN0cmFjdEJsZW5kU3RhdGU+fSBbYmxlbmRTdGF0ZXM9W11dIC0gQmxlbmQgc3RhdGVzIHRvIGJlXHJcbiAgICogY29udHJvbGxlZCBieSB0aGlzIGNvbnRhaW5lci5cclxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBbYmxlbmRUaHJlc2hvbGRzPVtdXSAtIFRocmVzaG9sZCB2YWx1ZXMgZm9yIGFjdGl2YXRpbmdcclxuICAgKiBlYWNoIGJsZW5kIHN0YXRlLlxyXG4gICAqIEBwYXJhbSB7QXJyYXkuPGJvb2xlYW4+fSBbcGhhc2VNYXRjaGVzPVtdXSAtIEJvb2xlYW5zIGluZGljYXRpbmcgd2hldGhlciBvciBub3RcclxuICAgKiBlYWNoIGJsZW5kIHN0YXRlIHNob3VsZCBiZSBwaGFzZSBtYXRjaGVkLlxyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgb3B0aW9ucyA9IHt9LFxyXG4gICAgYmxlbmRTdGF0ZXMgPSBbXSxcclxuICAgIGJsZW5kVGhyZXNob2xkcyA9IFtdLFxyXG4gICAgcGhhc2VNYXRjaGVzID0gW11cclxuICApIHtcclxuICAgIHN1cGVyKG9wdGlvbnMsIGJsZW5kU3RhdGVzKTtcclxuXHJcbiAgICB0aGlzLl9ibGVuZFZhbHVlID0gMDtcclxuICAgIHRoaXMuX3Byb21pc2VzID0ge1xyXG4gICAgICAuLi50aGlzLl9wcm9taXNlcyxcclxuICAgICAgYmxlbmRWYWx1ZTogRGVmZXJyZWQucmVzb2x2ZSgpLFxyXG4gICAgfTtcclxuXHJcbiAgICAvLyBWYWxpZGF0ZSB0aGVyZSBhcmUgbm8gZHVwbGljYXRlIHRocmVzaG9sZHNcclxuICAgIGNvbnN0IG5vblplcm9EaWZmZXJlbnRTaXplID1cclxuICAgICAgYmxlbmRTdGF0ZXMubGVuZ3RoICE9PSAwICYmIGJsZW5kU3RhdGVzLmxlbmd0aCAhPT0gYmxlbmRUaHJlc2hvbGRzLmxlbmd0aDtcclxuICAgIGlmIChub25aZXJvRGlmZmVyZW50U2l6ZSkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgYENhbm5vdCBjcmVhdGUgQmxlbmQxZFN0YXRlIHdpdGggYmxlbmRUaHJlc2hvbGRzICR7YmxlbmRUaHJlc2hvbGRzfS4gQmxlbmRUaHJlc2hvbGRzIGNvdW50IGRvZXMgbm90IG1hdGNoIGJsZW5kU3RhdGVzIGNvdW50LmBcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBjb250YWluc0R1cGxpY2F0ZXMgPVxyXG4gICAgICBuZXcgU2V0KGJsZW5kVGhyZXNob2xkcykuc2l6ZSAhPT0gYmxlbmRUaHJlc2hvbGRzLmxlbmd0aDtcclxuICAgIGlmIChjb250YWluc0R1cGxpY2F0ZXMpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgIGBDYW5ub3QgY3JlYXRlIEJsZW5kMWRTdGF0ZSB3aXRoIGJsZW5kVGhyZXNob2xkcyAke2JsZW5kVGhyZXNob2xkc30uIEJsZW5kVGhyZXNob2xkcyBjb250YWlucyBkdXBsaWNhdGUgdmFsdWVzYFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEluaXRpYWxpemUgdGhlIHRocmVzaG9sZHMgbWFwXHJcbiAgICB0aGlzLl90aHJlc2hvbGRzID0gW107XHJcbiAgICBbLi4udGhpcy5fc3RhdGVzLnZhbHVlcygpXS5mb3JFYWNoKChzdGF0ZSwgaW5kZXgpID0+IHtcclxuICAgICAgdGhpcy5fdGhyZXNob2xkcy5wdXNoKHtcclxuICAgICAgICB2YWx1ZTogYmxlbmRUaHJlc2hvbGRzW2luZGV4XSxcclxuICAgICAgICBuYW1lOiBzdGF0ZS5uYW1lLFxyXG4gICAgICAgIHBoYXNlTWF0Y2g6IHBoYXNlTWF0Y2hlc1tpbmRleF0gfHwgZmFsc2UsXHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5fc29ydFRocmVzaG9sZHMoKTtcclxuICAgIHRoaXMuX2ZvcmNlTm9UaHJlc2hvbGREdXBlcyA9IHRydWU7XHJcblxyXG4gICAgdGhpcy5fcGhhc2VMZWFkU3RhdGUgPSBudWxsO1xyXG5cclxuICAgIHRoaXMuX3VwZGF0ZUJsZW5kV2VpZ2h0cygpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyBhbmQgc2V0cyB0aGUgYmxlbmQgcGFyYW1ldGVyIHZhbHVlLlxyXG4gICAqL1xyXG4gIGdldCBibGVuZFZhbHVlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2JsZW5kVmFsdWU7XHJcbiAgfVxyXG5cclxuICBzZXQgYmxlbmRWYWx1ZSh2YWx1ZSkge1xyXG4gICAgdGhpcy5fYmxlbmRWYWx1ZSA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyB3aGV0aGVyIG9yIG5vdCB0aGUgYmxlbmQgdmFsdWUgaXMgY3VycmVudGx5IGJlaW5nIGFuaW1hdGVkLlxyXG4gICAqL1xyXG4gIGdldCBibGVuZFZhbHVlUGVuZGluZygpIHtcclxuICAgIHJldHVybiB0aGlzLl9wcm9taXNlcy5ibGVuZFZhbHVlICYmIHRoaXMuX3Byb21pc2VzLmJsZW5kVmFsdWUucGVuZGluZztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZXMgdGhlIHVzZXIgZGVmaW5lZCB3ZWlnaHQgb3ZlciB0aW1lLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtudWxsfSBuYW1lIC0gVW51c2VkIHBhcmFtZXRlci5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gd2VpZ2h0IC0gVGhlIHRhcmdldCB3ZWlnaHQgdmFsdWUuXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtzZWNvbmRzPTBdIC0gVGhlIGFtb3VudCBvZiB0aW1lIGl0IHdpbGwgdGFrZSB0byByZWFjaCB0aGVcclxuICAgKiB0YXJnZXQgd2VpZ2h0LlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBlYXNpbmdGbiAtIFRoZSBlYXNpbmcgZnVuY3Rpb24gdG8gdXNlIGZvciBpbnRlcnBvbGF0aW9uLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0RlZmVycmVkfVxyXG4gICAqL1xyXG4gIHNldEJsZW5kV2VpZ2h0KG5hbWUsIHZhbHVlLCBzZWNvbmRzID0gMCwgZWFzaW5nRm4pIHtcclxuICAgIHRoaXMuX3Byb21pc2VzLmJsZW5kVmFsdWUuY2FuY2VsKCk7XHJcblxyXG4gICAgdGhpcy5fcHJvbWlzZXMuYmxlbmRWYWx1ZSA9IEFuaW1hdGlvblV0aWxzLmludGVycG9sYXRlUHJvcGVydHkoXHJcbiAgICAgIHRoaXMsXHJcbiAgICAgICdibGVuZFZhbHVlJyxcclxuICAgICAgdmFsdWUsXHJcbiAgICAgIHtcclxuICAgICAgICBzZWNvbmRzLFxyXG4gICAgICAgIGVhc2luZ0ZuLFxyXG4gICAgICAgIG9uUHJvZ3Jlc3M6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuX3VwZGF0ZUJsZW5kV2VpZ2h0cygpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgb25GaW5pc2g6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuX3VwZGF0ZUJsZW5kV2VpZ2h0cygpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH1cclxuICAgICk7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuX3Byb21pc2VzLmJsZW5kVmFsdWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSB1c2VyIGRlZmluZWQgd2VpZ2h0LlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge251bWJlcn1cclxuICAgKi9cclxuICBnZXRCbGVuZFdlaWdodCgpIHtcclxuICAgIHJldHVybiB0aGlzLmJsZW5kVmFsdWU7XHJcbiAgfVxyXG5cclxuICBhZGRTdGF0ZShzdGF0ZSwgdGhyZXNob2xkVmFsdWUgPSAwLCBwaGFzZU1hdGNoID0gZmFsc2UpIHtcclxuICAgIHRoaXMuX3RocmVzaG9sZHMgPSB0aGlzLl90aHJlc2hvbGRzIHx8IFtdO1xyXG5cclxuICAgIC8vIE1ha2Ugc3VyZSB0aGVyZSBpcyBub3QgYWxyZWFkeSBhIHN0YXRlIHdpdGggdGhpcyB0aHJlc2hvbGRcclxuICAgIGNvbnN0IHNhbWVWYWx1ZSA9IHRoaXMuX3RocmVzaG9sZHMuZmluZChcclxuICAgICAgdGhyZXNob2xkID0+IHRocmVzaG9sZC52YWx1ZSA9PT0gdGhyZXNob2xkVmFsdWVcclxuICAgICk7XHJcbiAgICBpZiAodGhpcy5fZm9yY2VOb1RocmVzaG9sZER1cGVzICYmIHNhbWVWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgQ2Fubm90IHNldCBibGVuZCB0aHJlc2hvbGQgb2YgJHt0aHJlc2hvbGRWYWx1ZX0gZm9yIHN0YXRlICR7c3RhdGUubmFtZX0gb24gJHt0aGlzLm5hbWV9LiBBIHN0YXRlIGFscmVhZHkgZXhpc3RzIHdpdGggdGhhdCB0aHJlc2hvbGQuYFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHN1cGVyLmFkZFN0YXRlKHN0YXRlKTtcclxuICAgIHRoaXMuX3RocmVzaG9sZHMucHVzaCh7XHJcbiAgICAgIHZhbHVlOiB0aHJlc2hvbGRWYWx1ZSxcclxuICAgICAgbmFtZTogc3RhdGUubmFtZSxcclxuICAgICAgcGhhc2VNYXRjaDogcGhhc2VNYXRjaCB8fCBmYWxzZSxcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuX3NvcnRUaHJlc2hvbGRzKCk7XHJcblxyXG4gICAgcmV0dXJuIHN0YXRlLm5hbWU7XHJcbiAgfVxyXG5cclxuICByZW1vdmVTdGF0ZShuYW1lKSB7XHJcbiAgICBjb25zdCByZW1vdmVkID0gc3VwZXIucmVtb3ZlU3RhdGUobmFtZSk7XHJcblxyXG4gICAgaWYgKHJlbW92ZWQpIHtcclxuICAgICAgY29uc3QgaW5kZXggPSB0aGlzLl90aHJlc2hvbGRzLmZpbmRJbmRleChcclxuICAgICAgICB0aHJlc2hvbGQgPT4gdGhyZXNob2xkLm5hbWUgPT09IG5hbWVcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5fdGhyZXNob2xkcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiByZW1vdmVkO1xyXG4gIH1cclxuXHJcbiAgcmVuYW1lU3RhdGUoY3VycmVudE5hbWUsIG5ld05hbWUpIHtcclxuICAgIG5ld05hbWUgPSBzdXBlci5yZW5hbWVTdGF0ZShjdXJyZW50TmFtZSwgbmV3TmFtZSk7XHJcblxyXG4gICAgY29uc3QgdGhyZXNob2xkID0gdGhpcy5fdGhyZXNob2xkcy5maW5kKFxyXG4gICAgICB0aHJlc2hvbGQgPT4gdGhyZXNob2xkLm5hbWUgPT09IGN1cnJlbnROYW1lXHJcbiAgICApO1xyXG4gICAgdGhyZXNob2xkLm5hbWUgPSBuZXdOYW1lO1xyXG5cclxuICAgIHJldHVybiBuZXdOYW1lO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgdGhyZXNob2xkIHZhbHVlIG9mIGEgYmxlbmQgd2l0aCB0aGUgY29ycmVzcG9uZGluZyBuYW1lLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBOYW1lIG9mIHRoZSBibGVuZCB0byBnZXQgdGhlIHRocmVzaG9sZCBvZi5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IFRocmVob2xkIHZhbHVlLlxyXG4gICAqL1xyXG4gIGdldEJsZW5kVGhyZXNob2xkKG5hbWUpIHtcclxuICAgIGNvbnN0IHRocmVzaG9sZCA9IHRoaXMuX3RocmVzaG9sZHMuZmluZChcclxuICAgICAgdGhyZXNob2xkID0+IHRocmVzaG9sZC5uYW1lID09PSBuYW1lXHJcbiAgICApO1xyXG5cclxuICAgIGlmICh0aHJlc2hvbGQgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgYENhbm5vdCBnZXQgYmxlbmQgdGhyZXNob2xkIG9mIHN0YXRlICR7bmFtZX0gb24gJHt0aGlzLm5hbWV9LiBObyBzdGF0ZSBleGlzdHMgd2l0aCB0aGF0IG5hbWUuYFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aHJlc2hvbGQudmFsdWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXRzIHRoZSB0aHJlc2hvbGQgdmFsdWUgb2YgYSBibGVuZCB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIG5hbWUuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIE5hbWUgb2YgdGhlIGJsZW5kIHRvIHNldCB0aGUgdGhyZXNob2xkLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSAtIFZhbHVlIG9mIHRoZSB0aHJlc2hvbGQgdG8gc2V0LlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge251bWJlcn0gU2V0IHRocmVzaG9sZCB2YWx1ZS5cclxuICAgKi9cclxuICBzZXRCbGVuZFRocmVzaG9sZChuYW1lLCB2YWx1ZSkge1xyXG4gICAgLy8gTWFrZSBzdXJlIHRoZXJlIGlzIG5vdCBhbHJlYWR5IGEgc3RhdGUgd2l0aCB0aGlzIHRocmVzaG9sZFxyXG4gICAgY29uc3Qgc2FtZVZhbHVlID0gdGhpcy5fdGhyZXNob2xkcy5maW5kKFxyXG4gICAgICB0aHJlc2hvbGQgPT4gdGhyZXNob2xkLnZhbHVlID09PSB2YWx1ZVxyXG4gICAgKTtcclxuICAgIGlmIChzYW1lVmFsdWUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgYENhbm5vdCBzZXQgYmxlbmQgdGhyZXNob2xkIG9mICR7dmFsdWV9IGZvciBzdGF0ZSAke25hbWV9IG9uICR7dGhpcy5uYW1lfS4gQSBzdGF0ZSBhbHJlYWR5IGV4aXN0cyB3aXRoIHRoYXQgdGhyZXNob2xkLmBcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0aHJlc2hvbGQgPSB0aGlzLl90aHJlc2hvbGRzLmZpbmQoXHJcbiAgICAgIHRocmVzaG9sZCA9PiB0aHJlc2hvbGQubmFtZSA9PT0gbmFtZVxyXG4gICAgKTtcclxuXHJcbiAgICBpZiAodGhyZXNob2xkID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgIGBDYW5ub3Qgc2V0IGJsZW5kIHRocmVzaG9sZCBvZiBzdGF0ZSAke25hbWV9IG9uICR7dGhpcy5uYW1lfS4gTm8gc3RhdGUgZXhpc3RzIHdpdGggdGhhdCBuYW1lLmBcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICB0aHJlc2hvbGQudmFsdWUgPSB2YWx1ZTtcclxuXHJcbiAgICB0aGlzLl9zb3J0VGhyZXNob2xkcygpO1xyXG5cclxuICAgIHJldHVybiB0aHJlc2hvbGQudmFsdWU7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVJbnRlcm5hbFdlaWdodChmYWN0b3IpIHtcclxuICAgIHN1cGVyLnVwZGF0ZUludGVybmFsV2VpZ2h0KGZhY3Rvcik7XHJcblxyXG4gICAgaWYgKHRoaXMuX3BoYXNlTGVhZFN0YXRlKSB7XHJcbiAgICAgIHRoaXMuX3N0YXRlcy5mb3JFYWNoKHN0YXRlID0+IHtcclxuICAgICAgICBpZiAoc3RhdGUud2VpZ2h0ICE9PSAwKSB7XHJcbiAgICAgICAgICBzdGF0ZS5ub3JtYWxpemVkVGltZSA9IHRoaXMuX3BoYXNlTGVhZFN0YXRlLm5vcm1hbGl6ZWRUaW1lO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGVzIHRoZSBibGVuZCB3ZWlnaHRzIGJhc2VkIG9uIHRoZWlyIGNvcnJlc3BvbmRpbmcgdGhyZXNob2xkIHZhbHVlc1xyXG4gICAqIGFuZCB0aGUgY3VycmVudCBibGVuZFZhbHVlLiBBZGRpdGlvbmFsbHksIHNldHMgYSBsZWFkIHBoYXNlIHN0YXRlIGlmIHRoZVxyXG4gICAqIGNvbmRpdGlvbnMgZm9yIHBoYXNlLW1hdGNoaW5nIGhhdmUgYmVlbiBzYXRpc2ZpZWQuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIF91cGRhdGVCbGVuZFdlaWdodHMoKSB7XHJcbiAgICBpZiAodGhpcy5fdGhyZXNob2xkcy5sZW5ndGggPT09IDApIHJldHVybjtcclxuXHJcbiAgICBpZiAodGhpcy5fdGhyZXNob2xkcy5sZW5ndGggPT09IDEpIHtcclxuICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzLl9zdGF0ZXMuZ2V0KHRoaXMuX3RocmVzaG9sZHNbMF0ubmFtZSk7XHJcbiAgICAgIHN0YXRlLnNldFdlaWdodCgxKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEluaXRpYWxseSBzZXQgYWxsIHN1Yi1zdGF0ZSB3ZWlnaHRzIHRvIHplcm9cclxuICAgIHRoaXMuX3N0YXRlcy5mb3JFYWNoKHN0YXRlID0+IHtcclxuICAgICAgc3RhdGUuc2V0V2VpZ2h0KDApO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5fcGhhc2VMZWFkU3RhdGUgPSBudWxsO1xyXG5cclxuICAgIC8vIEZpbmQgdGhlIGZpcnN0IHRocmVzaG9sZCB0aGF0IGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgcGFyYW1ldGVyIHZhbHVlXHJcbiAgICBsZXQgdGFyZ2V0SW5kZXggPSB0aGlzLl90aHJlc2hvbGRzLmZpbmRJbmRleCh0aHJlc2hvbGQgPT4ge1xyXG4gICAgICByZXR1cm4gdGhyZXNob2xkLnZhbHVlID49IHRoaXMuX2JsZW5kVmFsdWU7XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAodGFyZ2V0SW5kZXggPT09IDAgfHwgdGFyZ2V0SW5kZXggPT09IC0xKSB7XHJcbiAgICAgIC8vIEdpdmUgb25lIHN0YXRlIGZ1bGwgaW5mbHVlbmNlXHJcbiAgICAgIHRhcmdldEluZGV4ID0gdGFyZ2V0SW5kZXggPT09IC0xID8gdGhpcy5fdGhyZXNob2xkcy5sZW5ndGggLSAxIDogMDtcclxuICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzLl9zdGF0ZXMuZ2V0KHRoaXMuX3RocmVzaG9sZHNbdGFyZ2V0SW5kZXhdLm5hbWUpO1xyXG4gICAgICBzdGF0ZS5zZXRXZWlnaHQoMSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBMaW5lYXIgaW50ZXJwb2xhdGUgaW5mbHVlbmNlIGJldHdlZW4gdHdvIHN0YXRlc1xyXG4gICAgICBjb25zdCB0aHJlc2hvbGRBID0gdGhpcy5fdGhyZXNob2xkc1t0YXJnZXRJbmRleCAtIDFdO1xyXG4gICAgICBjb25zdCB0aHJlc2hvbGRCID0gdGhpcy5fdGhyZXNob2xkc1t0YXJnZXRJbmRleF07XHJcblxyXG4gICAgICBjb25zdCBmYWN0b3JCID1cclxuICAgICAgICAodGhpcy5ibGVuZFZhbHVlIC0gdGhyZXNob2xkQS52YWx1ZSkgL1xyXG4gICAgICAgICh0aHJlc2hvbGRCLnZhbHVlIC0gdGhyZXNob2xkQS52YWx1ZSk7XHJcbiAgICAgIGNvbnN0IGZhY3RvckEgPSAxIC0gZmFjdG9yQjtcclxuXHJcbiAgICAgIGNvbnN0IHN0YXRlQSA9IHRoaXMuX3N0YXRlcy5nZXQodGhyZXNob2xkQS5uYW1lKTtcclxuICAgICAgY29uc3Qgc3RhdGVCID0gdGhpcy5fc3RhdGVzLmdldCh0aHJlc2hvbGRCLm5hbWUpO1xyXG5cclxuICAgICAgc3RhdGVBLnNldFdlaWdodChmYWN0b3JBKTtcclxuICAgICAgc3RhdGVCLnNldFdlaWdodChmYWN0b3JCKTtcclxuXHJcbiAgICAgIC8vIFNldCBwaGFzZS1tYXRjaGluZyBpZiBuZWVkZWRcclxuICAgICAgaWYgKHRocmVzaG9sZEEucGhhc2VNYXRjaCAmJiB0aHJlc2hvbGRCLnBoYXNlTWF0Y2gpIHtcclxuICAgICAgICB0aGlzLl9waGFzZUxlYWRTdGF0ZSA9IGZhY3RvckEgPiBmYWN0b3JCID8gc3RhdGVBIDogc3RhdGVCO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTb3J0cyB0aGUgdGhyZXNob2xkcyBmcm9tIGxvdyB0byBoaWdoIGJhc2VkIG9uIHZhbHVlLlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBfc29ydFRocmVzaG9sZHMoKSB7XHJcbiAgICB0aGlzLl90aHJlc2hvbGRzLnNvcnQoKGEsIGIpID0+IGEudmFsdWUgLSBiLnZhbHVlKTtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IEJsZW5kMWRTdGF0ZTtcclxuIiwiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXHJcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxyXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bmRlcnNjb3JlLWRhbmdsZSAqL1xyXG5pbXBvcnQgRGVmZXJyZWQgZnJvbSAnY29yZS9EZWZlcnJlZCc7XHJcbmltcG9ydCBNYXRoVXRpbHMgZnJvbSAnY29yZS9NYXRoVXRpbHMnO1xyXG5pbXBvcnQgQWJzdHJhY3RCbGVuZFN0YXRlIGZyb20gJy4vQWJzdHJhY3RCbGVuZFN0YXRlJztcclxuaW1wb3J0IEFuaW1hdGlvblV0aWxzIGZyb20gJy4uL0FuaW1hdGlvblV0aWxzJztcclxuXHJcbi8qKlxyXG4gKiBDbGFzcyBmb3IgYmxlbmRpbmcgTiBudW1iZXIgb2YgYmxlbmQgc3RhdGVzIGJhc2VkIG9uIHR3b1xyXG4gKiBwYXJhbXRlcnMuXHJcbiAqXHJcbiAqIEBleHRlbmRzIEFic3RyYWN0QmxlbmRTdGF0ZVxyXG4gKi9cclxuY2xhc3MgQmxlbmQyZFN0YXRlIGV4dGVuZHMgQWJzdHJhY3RCbGVuZFN0YXRlIHtcclxuICAvKipcclxuICAgKiBAY29uc3RydWN0b3JcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gLSBPcHRpb25zIGZvciB0aGUgY29udGFpbmVyIHN0YXRlXHJcbiAgICogQHBhcmFtIHtBcnJheS48QWJzdHJhY3RCbGVuZFN0YXRlPn0gW2JsZW5kU3RhdGVzPVtdXSAtIEJsZW5kIHN0YXRlcyB0byBiZVxyXG4gICAqIGNvbnRyb2xsZWQgYnkgdGhpcyBjb250YWluZXIuXHJcbiAgICogQHBhcmFtIHtBcnJheS48QXJyYXkuPG51bWJlcj4+fSBbYmxlbmRUaHJlc2hvbGRzPVtdXSAtIFRocmVzaG9sZCB2YWx1ZXMgZm9yIGFjdGl2YXRpbmdcclxuICAgKiBlYWNoIGJsZW5kIHN0YXRlLlxyXG4gICAqIEBwYXJhbSB7QXJyYXkuPGJvb2xlYW4+fSBbcGhhc2VNYXRjaGVzPVtdXSAtIEJvb2xlYW5zIGluZGljYXRpbmcgd2hldGhlciBvciBub3RcclxuICAgKiBlYWNoIGJsZW5kIHN0YXRlIHNob3VsZCBiZSBwaGFzZSBtYXRjaGVkLlxyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgb3B0aW9ucyA9IHt9LFxyXG4gICAgYmxlbmRTdGF0ZXMgPSBbXSxcclxuICAgIGJsZW5kVGhyZXNob2xkcyA9IFtdLFxyXG4gICAgcGhhc2VNYXRjaGVzID0gW11cclxuICApIHtcclxuICAgIHN1cGVyKG9wdGlvbnMsIGJsZW5kU3RhdGVzKTtcclxuXHJcbiAgICBpZiAoYmxlbmRTdGF0ZXMubGVuZ3RoICE9PSBibGVuZFRocmVzaG9sZHMubGVuZ3RoKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgQ2Fubm90IGNyZWF0ZSBCbGVuZDJkU3RhdGUgd2l0aCBibGVuZFN0YXRlcyAke2JsZW5kU3RhdGVzfSBhbmQgYmxlbmRUaHJlc2hvbGRzICR7YmxlbmRUaHJlc2hvbGRzfS4gQ291bnQgb2YgYmxlbmRTdGF0ZXMgbXVzdCBtYXRjaCBjb3VudCBvZiBibGVuZFRocmVzaG9sZHMuYFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGJsZW5kVGhyZXNob2xkc1xyXG4gICAgICAuc2xpY2UoMCwgYmxlbmRUaHJlc2hvbGRzLmxlbmd0aCAtIDEpXHJcbiAgICAgIC5mb3JFYWNoKCh0aHJlc2hvbGQsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgYmxlbmRUaHJlc2hvbGRzLnNsaWNlKGluZGV4ICsgMSkuZm9yRWFjaChvdGhlclRocmVzaG9sZCA9PiB7XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIHRocmVzaG9sZFswXSA9PT0gb3RoZXJUaHJlc2hvbGRbMF0gJiZcclxuICAgICAgICAgICAgdGhyZXNob2xkWzFdID09PSBvdGhlclRocmVzaG9sZFsxXVxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICAgICAgICBgQ2Fubm90IGNyZWF0ZSBCbGVuZDJkU3RhdGUgd2l0aCBibGVuZFRocmVzaG9sZHMgJHtibGVuZFRocmVzaG9sZHN9LiBObyBkdXBsaWNhdGUgdmFsdWVzIGFsbG93ZWQgaW4gYmxlbmRUaHJlc2hvbGRzLmBcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgdGhpcy5fYmxlbmRWYWx1ZVggPSAwO1xyXG4gICAgdGhpcy5fYmxlbmRWYWx1ZVkgPSAwO1xyXG5cclxuICAgIHRoaXMuX3Byb21pc2VzID0ge1xyXG4gICAgICAuLi50aGlzLl9wcm9taXNlcyxcclxuICAgICAgYmxlbmRWYWx1ZVg6IERlZmVycmVkLnJlc29sdmUoKSxcclxuICAgICAgYmxlbmRWYWx1ZVk6IERlZmVycmVkLnJlc29sdmUoKSxcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5fdGhyZXNob2xkcyA9IFtdO1xyXG4gICAgWy4uLnRoaXMuX3N0YXRlcy52YWx1ZXMoKV0uZm9yRWFjaCgoc3RhdGUsIGluZGV4KSA9PiB7XHJcbiAgICAgIHRoaXMuX3RocmVzaG9sZHMucHVzaCh7XHJcbiAgICAgICAgbmFtZTogc3RhdGUubmFtZSxcclxuICAgICAgICBwaGFzZU1hdGNoOiBwaGFzZU1hdGNoZXNbaW5kZXhdIHx8IGZhbHNlLFxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuX3ZlcnRpY2VzID0gYmxlbmRUaHJlc2hvbGRzO1xyXG5cclxuICAgIGlmICh0aGlzLl92ZXJ0aWNlcy5sZW5ndGggPj0gMykge1xyXG4gICAgICB0aGlzLl90cmlhbmdsZXMgPSBNYXRoVXRpbHMuZ2V0RGVsYXVuYXlUcmlhbmd1bGF0aW9uKHRoaXMuX3ZlcnRpY2VzKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9waGFzZUxlYWRTdGF0ZSA9IG51bGw7XHJcblxyXG4gICAgdGhpcy5fdXBkYXRlQmxlbmRXZWlnaHRzKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGVzIHRoZSB1c2VyIGRlZmluZWQgd2VpZ2h0IG92ZXIgdGltZS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gTmFtZSBvZiBibGVuZCB3ZWlnaHQgdG8gdXBkYXRlLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB3ZWlnaHQgLSBUYXJnZXQgd2VpZ2h0IHZhbHVlLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbc2Vjb25kcz0wXSAtIFRoZSBhbW91bnQgb2YgdGltZSBpdCB3aWxsIHRha2UgdG8gcmVhY2ggdGhlXHJcbiAgICogdGFyZ2V0IHZhbHVlLlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBlYXNpbmdGbiAtIFRoZSBlYXNpbmcgZnVuY3Rpb24gdG8gdXNlIGZvciBpbnRlcnBvbGF0aW9uLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0RlZmVycmVkfVxyXG4gICAqL1xyXG4gIHNldEJsZW5kV2VpZ2h0KG5hbWUsIHZhbHVlLCBzZWNvbmRzID0gMCwgZWFzaW5nRm4pIHtcclxuICAgIGNvbnN0IHByb3BlcnR5ID0gYGJsZW5kVmFsdWUke25hbWUudG9VcHBlckNhc2UoKX1gO1xyXG4gICAgaWYgKHByb3BlcnR5ICE9PSAnYmxlbmRWYWx1ZVgnICYmIHByb3BlcnR5ICE9PSAnYmxlbmRWYWx1ZVknKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgQ2Fubm90IHNldCBibGVuZCB3ZWlnaHQgZm9yICR7bmFtZX0gb24gJHt0aGlzLm5hbWV9LiBCbGVuZDJkU3RhdGUgb25seSBhY2NlcHRzICdYJyBvciAnWScgZm9yIHNldEJsZW5kV2VpZ2h0YFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX3Byb21pc2VzW3Byb3BlcnR5XS5jYW5jZWwoKTtcclxuXHJcbiAgICB0aGlzLl9wcm9taXNlc1twcm9wZXJ0eV0gPSBBbmltYXRpb25VdGlscy5pbnRlcnBvbGF0ZVByb3BlcnR5KFxyXG4gICAgICB0aGlzLFxyXG4gICAgICBwcm9wZXJ0eSxcclxuICAgICAgdmFsdWUsXHJcbiAgICAgIHtcclxuICAgICAgICBzZWNvbmRzLFxyXG4gICAgICAgIGVhc2luZ0ZuLFxyXG4gICAgICAgIG9uUHJvZ3Jlc3M6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuX3VwZGF0ZUJsZW5kV2VpZ2h0cygpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgb25GaW5pc2g6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuX3VwZGF0ZUJsZW5kV2VpZ2h0cygpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH1cclxuICAgICk7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuX3Byb21pc2VzW3Byb3BlcnR5XTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIHVzZXIgZGVmaW5lZCB3ZWlnaHQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIE5hbWUgb2YgYmxlbmQgd2VpZ2h0LlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge251bWJlcn1cclxuICAgKi9cclxuICBnZXRCbGVuZFdlaWdodChuYW1lKSB7XHJcbiAgICBjb25zdCBwcm9wZXJ0eSA9IG5hbWUudG9VcHBlckNhc2UoKTtcclxuICAgIGlmIChwcm9wZXJ0eSAhPT0gJ1gnICYmIHByb3BlcnR5ICE9PSAnWScpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgIGBDYW5ub3QgZ2V0IGJsZW5kIHdlaWdodCBmb3IgJHtuYW1lfSBvbiAke3RoaXMubmFtZX0uIEJsZW5kMmRTdGF0ZSBvbmx5IGFjY2VwdHMgJ1gnIG9yICdZJyBmb3IgZ2V0QmxlbmRXZWlnaHRgXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHByb3BlcnR5ID09PSAnWCcgPyB0aGlzLl9ibGVuZFZhbHVlWCA6IHRoaXMuX2JsZW5kVmFsdWVZO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyBhbmQgc2V0cyB0aGUgeCBibGVuZCB3ZWlnaHQuXHJcbiAgICovXHJcbiAgZ2V0IGJsZW5kVmFsdWVYKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2JsZW5kVmFsdWVYO1xyXG4gIH1cclxuXHJcbiAgc2V0IGJsZW5kVmFsdWVYKHZhbHVlKSB7XHJcbiAgICB0aGlzLl9ibGVuZFZhbHVlWCA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyBhbmQgc2V0cyB0aGUgeSBibGVuZCB3ZWlnaHQuXHJcbiAgICovXHJcbiAgZ2V0IGJsZW5kVmFsdWVZKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2JsZW5kVmFsdWVZO1xyXG4gIH1cclxuXHJcbiAgc2V0IGJsZW5kVmFsdWVZKHZhbHVlKSB7XHJcbiAgICB0aGlzLl9ibGVuZFZhbHVlWSA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyB3aGV0aGVyIG9yIG5vdCB0aGUgeCBibGVuZCB2YWx1ZSBpcyBjdXJyZW50bHkgYmVpbmcgYW5pbWF0ZWQuXHJcbiAgICovXHJcbiAgZ2V0IGJsZW5kVmFsdWVYUGVuZGluZygpIHtcclxuICAgIHJldHVybiB0aGlzLl9wcm9taXNlcy5ibGVuZFZhbHVlWCAmJiB0aGlzLl9wcm9taXNlcy5ibGVuZFZhbHVlWC5wZW5kaW5nO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyB3aGV0aGVyIG9yIG5vdCB0aGUgeSBibGVuZCB2YWx1ZSBpcyBjdXJyZW50bHkgYmVpbmcgYW5pbWF0ZWQuXHJcbiAgICovXHJcbiAgZ2V0IGJsZW5kVmFsdWVZUGVuZGluZygpIHtcclxuICAgIHJldHVybiB0aGlzLl9wcm9taXNlcy5ibGVuZFZhbHVlWSAmJiB0aGlzLl9wcm9taXNlcy5ibGVuZFZhbHVlWS5wZW5kaW5nO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlSW50ZXJuYWxXZWlnaHQoZmFjdG9yKSB7XHJcbiAgICBzdXBlci51cGRhdGVJbnRlcm5hbFdlaWdodChmYWN0b3IpO1xyXG5cclxuICAgIGlmICh0aGlzLl9waGFzZUxlYWRTdGF0ZSkge1xyXG4gICAgICBbLi4udGhpcy5fc3RhdGVzLnZhbHVlcygpXS5mb3JFYWNoKChzdGF0ZSwgaW5kZXgpID0+IHtcclxuICAgICAgICBpZiAoc3RhdGUud2VpZ2h0ICE9PSAwICYmIHRoaXMuX3RocmVzaG9sZHNbaW5kZXhdLnBoYXNlTWF0Y2gpIHtcclxuICAgICAgICAgIHN0YXRlLm5vcm1hbGl6ZWRUaW1lID0gdGhpcy5fcGhhc2VMZWFkU3RhdGUubm9ybWFsaXplZFRpbWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZXMgdGhlIGJsZW5kIHdlaWdodHMgYmFzZWQgb24gdGhlaXIgY29ycmVzcG9uZGluZyB0aHJlc2hvbGQgdmFsdWVzXHJcbiAgICogYW5kIHRoZSBjdXJyZW50IFt4LHldIGJsZW5kVmFsdWUuIEFkZGl0aW9uYWxseSwgc2V0cyBhIGxlYWQgcGhhc2Ugc3RhdGUgaWYgdGhlXHJcbiAgICogY29uZGl0aW9ucyBmb3IgcGhhc2UtbWF0Y2hpbmcgaGF2ZSBiZWVuIHNhdGlzZmllZC5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICovXHJcbiAgX3VwZGF0ZUJsZW5kV2VpZ2h0cygpIHtcclxuICAgIGlmICghdGhpcy5fdmVydGljZXMgfHwgdGhpcy5fdmVydGljZXMubGVuZ3RoID09PSAwKSByZXR1cm47XHJcblxyXG4gICAgaWYgKHRoaXMuX3ZlcnRpY2VzLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICBbLi4udGhpcy5fc3RhdGVzLnZhbHVlcygpXVswXS53ZWlnaHQgPSAxO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gSW5pdGlhbGx5IHNldCBhbGwgc3ViLXN0YXRlIHdlaWdodHMgdG8gemVyb1xyXG4gICAgdGhpcy5fc3RhdGVzLmZvckVhY2goc3RhdGUgPT4ge1xyXG4gICAgICBzdGF0ZS5zZXRXZWlnaHQoMCk7XHJcbiAgICB9KTtcclxuICAgIHRoaXMuX3BoYXNlTGVhZFN0YXRlID0gbnVsbDtcclxuXHJcbiAgICBjb25zdCBwID0gW3RoaXMuX2JsZW5kVmFsdWVYLCB0aGlzLl9ibGVuZFZhbHVlWV07XHJcblxyXG4gICAgaWYgKHRoaXMuX3ZlcnRpY2VzLmxlbmd0aCA9PT0gMikge1xyXG4gICAgICB0aGlzLl9zZXRJbmZsdWVuY2VDbG9zZXN0UG9pbnRPbkxpbmUocCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCB0cmlhbmdsZSA9IHRoaXMuX3RyaWFuZ2xlcy5maW5kKHRyaWFuZ2xlID0+IHtcclxuICAgICAgICByZXR1cm4gTWF0aFV0aWxzLmlzUG9pbnRJblRyaWFuZ2xlKFxyXG4gICAgICAgICAgdGhpcy5fdmVydGljZXNbdHJpYW5nbGVbMF1dLFxyXG4gICAgICAgICAgdGhpcy5fdmVydGljZXNbdHJpYW5nbGVbMV1dLFxyXG4gICAgICAgICAgdGhpcy5fdmVydGljZXNbdHJpYW5nbGVbMl1dLFxyXG4gICAgICAgICAgcFxyXG4gICAgICAgICk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgaWYgKHRyaWFuZ2xlKSB7XHJcbiAgICAgICAgdGhpcy5fc2V0SW5mbHVlbmNlVHJpYW5nbGUodHJpYW5nbGUsIHApO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuX3NldEluZmx1ZW5jZUNsb3Nlc3RQb2ludEluVHJpYW5nbGVzKHApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXRzIGJsZW5kIHdlaWdodHMgZm9yIHN0YXRlcyBjb3JyZXNwb25kaW5nIHRvIGFcclxuICAgKiB0cmlhbmdsZSBvZiB0aHJlc2hvbGRzIGFuZCBhIGdpdmVuIFt4LHldIGJsZW5kVmFsdWVzLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtBcnJheS48QXJyYXkuPG51bWJlcj4+fSB0cmlhbmdsZSAtIFNldCBvZiB0cmlhbmdsdWF0ZWQgaW5kaWNlc1xyXG4gICAqIHRoYXQgY29ycmVzcG9uZCB0byBibGVuZCB0aHJlc2hvbGRzLlxyXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IHAgLSBHaXZlbiBbeCx5XSBibGVuZFZhbHVlLlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBfc2V0SW5mbHVlbmNlVHJpYW5nbGUodHJpYW5nbGUsIHApIHtcclxuICAgIGNvbnN0IGFyZWFBID0gTWF0aFV0aWxzLnRyaWFuZ2xlQXJlYShcclxuICAgICAgdGhpcy5fdmVydGljZXNbdHJpYW5nbGVbMV1dLFxyXG4gICAgICB0aGlzLl92ZXJ0aWNlc1t0cmlhbmdsZVsyXV0sXHJcbiAgICAgIHBcclxuICAgICk7XHJcblxyXG4gICAgY29uc3QgYXJlYUIgPSBNYXRoVXRpbHMudHJpYW5nbGVBcmVhKFxyXG4gICAgICB0aGlzLl92ZXJ0aWNlc1t0cmlhbmdsZVswXV0sXHJcbiAgICAgIHRoaXMuX3ZlcnRpY2VzW3RyaWFuZ2xlWzJdXSxcclxuICAgICAgcFxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCBhcmVhQyA9IE1hdGhVdGlscy50cmlhbmdsZUFyZWEoXHJcbiAgICAgIHRoaXMuX3ZlcnRpY2VzW3RyaWFuZ2xlWzBdXSxcclxuICAgICAgdGhpcy5fdmVydGljZXNbdHJpYW5nbGVbMV1dLFxyXG4gICAgICBwXHJcbiAgICApO1xyXG5cclxuICAgIGNvbnN0IHRvdGFsQXJlYSA9IGFyZWFBICsgYXJlYUIgKyBhcmVhQztcclxuXHJcbiAgICBjb25zdCB3ZWlnaHRBID0gYXJlYUEgLyB0b3RhbEFyZWE7XHJcbiAgICBjb25zdCB3ZWlnaHRCID0gYXJlYUIgLyB0b3RhbEFyZWE7XHJcbiAgICBjb25zdCB3ZWlnaHRDID0gYXJlYUMgLyB0b3RhbEFyZWE7XHJcblxyXG4gICAgY29uc3QgdGhyZXNob2xkQSA9IHRoaXMuX3RocmVzaG9sZHNbdHJpYW5nbGVbMF1dO1xyXG4gICAgY29uc3QgdGhyZXNob2xkQiA9IHRoaXMuX3RocmVzaG9sZHNbdHJpYW5nbGVbMV1dO1xyXG4gICAgY29uc3QgdGhyZXNob2xkQyA9IHRoaXMuX3RocmVzaG9sZHNbdHJpYW5nbGVbMl1dO1xyXG5cclxuICAgIGNvbnN0IHN0YXRlQSA9IHRoaXMuX3N0YXRlcy5nZXQodGhyZXNob2xkQS5uYW1lKTtcclxuICAgIGNvbnN0IHN0YXRlQiA9IHRoaXMuX3N0YXRlcy5nZXQodGhyZXNob2xkQi5uYW1lKTtcclxuICAgIGNvbnN0IHN0YXRlQyA9IHRoaXMuX3N0YXRlcy5nZXQodGhyZXNob2xkQy5uYW1lKTtcclxuXHJcbiAgICBzdGF0ZUEuc2V0V2VpZ2h0KHdlaWdodEEpO1xyXG4gICAgc3RhdGVCLnNldFdlaWdodCh3ZWlnaHRCKTtcclxuICAgIHN0YXRlQy5zZXRXZWlnaHQod2VpZ2h0Qyk7XHJcblxyXG4gICAgdGhpcy5fc2V0UGhhc2VMZWFkU3RhdGUoXHJcbiAgICAgIFtzdGF0ZUEsIHN0YXRlQiwgc3RhdGVDXSxcclxuICAgICAgW3RocmVzaG9sZEEucGhhc2VNYXRjaCwgdGhyZXNob2xkQi5waGFzZU1hdGNoLCB0aHJlc2hvbGRDLnBoYXNlTWF0Y2hdXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRGV0ZXJtaW5lcyB0aGUgY2xvc2VzdCBwb2ludCB3aXRoaW4gYSB0cmlhbmdsZSBvZlxyXG4gICAqIHRocmVzaG9sZHMgYmFzZWQgb24gdGhlIGN1cnJlbnQgW3gseV0gYmxlbmRWYWx1ZXMgYW5kXHJcbiAgICogdGhlbiBzZXRzIGJsZW5kIHdlaWdodHMgZm9yIHRoZSBjb3JyZXNwb25kaW5nIHN0YXRlcy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IHAgLSBHaXZlbiBbeCx5XSBibGVuZFZhbHVlLlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBfc2V0SW5mbHVlbmNlQ2xvc2VzdFBvaW50SW5UcmlhbmdsZXMocCkge1xyXG4gICAgbGV0IGdsb2JhbENsb3Nlc3RQb2ludCA9IG51bGw7XHJcbiAgICBsZXQgZ2xvYmFsTWluRGlzdCA9IE51bWJlci5QT1NJVElWRV9JTkZJTklUWTtcclxuICAgIGxldCBjbG9zZXN0VHJpYW5nbGUgPSAtMTtcclxuXHJcbiAgICB0aGlzLl90cmlhbmdsZXMuZm9yRWFjaCgodHJpYW5nbGUsIGluZGV4KSA9PiB7XHJcbiAgICAgIGNvbnN0IHBvaW50QSA9IE1hdGhVdGlscy5jbG9zZXN0UG9pbnRPbkxpbmUoXHJcbiAgICAgICAgdGhpcy5fdmVydGljZXNbdHJpYW5nbGVbMF1dLFxyXG4gICAgICAgIHRoaXMuX3ZlcnRpY2VzW3RyaWFuZ2xlWzFdXSxcclxuICAgICAgICBwXHJcbiAgICAgICk7XHJcbiAgICAgIGNvbnN0IHBvaW50QiA9IE1hdGhVdGlscy5jbG9zZXN0UG9pbnRPbkxpbmUoXHJcbiAgICAgICAgdGhpcy5fdmVydGljZXNbdHJpYW5nbGVbMV1dLFxyXG4gICAgICAgIHRoaXMuX3ZlcnRpY2VzW3RyaWFuZ2xlWzJdXSxcclxuICAgICAgICBwXHJcbiAgICAgICk7XHJcbiAgICAgIGNvbnN0IHBvaW50QyA9IE1hdGhVdGlscy5jbG9zZXN0UG9pbnRPbkxpbmUoXHJcbiAgICAgICAgdGhpcy5fdmVydGljZXNbdHJpYW5nbGVbMl1dLFxyXG4gICAgICAgIHRoaXMuX3ZlcnRpY2VzW3RyaWFuZ2xlWzBdXSxcclxuICAgICAgICBwXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBjb25zdCBkaXN0QSA9IE1hdGhVdGlscy5kaXN0YW5jZVNxdWFyZWQocG9pbnRBLCBwKTtcclxuICAgICAgY29uc3QgZGlzdEIgPSBNYXRoVXRpbHMuZGlzdGFuY2VTcXVhcmVkKHBvaW50QiwgcCk7XHJcbiAgICAgIGNvbnN0IGRpc3RDID0gTWF0aFV0aWxzLmRpc3RhbmNlU3F1YXJlZChwb2ludEMsIHApO1xyXG5cclxuICAgICAgbGV0IGxvY2FsQ2xvc2VzdFBvaW50ID0gcG9pbnRDO1xyXG4gICAgICBsZXQgbG9jYWxNaW5EaXN0ID0gZGlzdEM7XHJcblxyXG4gICAgICBpZiAoZGlzdEEgPCBsb2NhbE1pbkRpc3QpIHtcclxuICAgICAgICBsb2NhbENsb3Nlc3RQb2ludCA9IHBvaW50QTtcclxuICAgICAgICBsb2NhbE1pbkRpc3QgPSBkaXN0QTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoZGlzdEIgPCBsb2NhbE1pbkRpc3QpIHtcclxuICAgICAgICBsb2NhbENsb3Nlc3RQb2ludCA9IHBvaW50QjtcclxuICAgICAgICBsb2NhbE1pbkRpc3QgPSBkaXN0QjtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGxvY2FsTWluRGlzdCA8IGdsb2JhbE1pbkRpc3QpIHtcclxuICAgICAgICBnbG9iYWxNaW5EaXN0ID0gbG9jYWxNaW5EaXN0O1xyXG4gICAgICAgIGdsb2JhbENsb3Nlc3RQb2ludCA9IFsuLi5sb2NhbENsb3Nlc3RQb2ludF07XHJcbiAgICAgICAgY2xvc2VzdFRyaWFuZ2xlID0gaW5kZXg7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuX3NldEluZmx1ZW5jZVRyaWFuZ2xlKFxyXG4gICAgICB0aGlzLl90cmlhbmdsZXNbY2xvc2VzdFRyaWFuZ2xlXSxcclxuICAgICAgZ2xvYmFsQ2xvc2VzdFBvaW50XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRGV0ZXJtaW5lcyB0aGUgY2xvc2VzdCBwb2ludCBvbiB0aGUgbGluZSBmb3JtZWQgYmV0d2VlbiB0aGVcclxuICAgKiB0d28gYmxlbmQgdGhyZXNob2xkcyBiYXNlZCBvbiB0aGUgY3VycmVudCBbeCx5XSBibGVuZFZhbHVlcyBhbmRcclxuICAgKiB0aGVuIHNldHMgYmxlbmQgd2VpZ2h0cyBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgc3RhdGVzLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gcCAtIEdpdmVuIFt4LHldIGJsZW5kVmFsdWUuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIF9zZXRJbmZsdWVuY2VDbG9zZXN0UG9pbnRPbkxpbmUocCkge1xyXG4gICAgY29uc3QgY2xvc2VzdFBvaW50ID0gTWF0aFV0aWxzLmNsb3Nlc3RQb2ludE9uTGluZShcclxuICAgICAgdGhpcy5fdmVydGljZXNbWzBdXSxcclxuICAgICAgdGhpcy5fdmVydGljZXNbWzFdXSxcclxuICAgICAgcFxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCBkaXN0QSA9IE1hdGhVdGlscy5kaXN0YW5jZVNxdWFyZWQodGhpcy5fdmVydGljZXNbMF0sIGNsb3Nlc3RQb2ludCk7XHJcbiAgICBjb25zdCBkaXN0QiA9IE1hdGhVdGlscy5kaXN0YW5jZVNxdWFyZWQodGhpcy5fdmVydGljZXNbMV0sIGNsb3Nlc3RQb2ludCk7XHJcblxyXG4gICAgY29uc3Qgd2VpZ2h0QSA9IGRpc3RCIC8gKGRpc3RBICsgZGlzdEIpO1xyXG4gICAgY29uc3Qgd2VpZ2h0QiA9IGRpc3RBIC8gKGRpc3RBICsgZGlzdEIpO1xyXG5cclxuICAgIGNvbnN0IHRocmVzaG9sZEEgPSB0aGlzLl90aHJlc2hvbGRzWzBdO1xyXG4gICAgY29uc3QgdGhyZXNob2xkQiA9IHRoaXMuX3RocmVzaG9sZHNbMV07XHJcblxyXG4gICAgY29uc3Qgc3RhdGVBID0gdGhpcy5fc3RhdGVzLmdldCh0aHJlc2hvbGRBLm5hbWUpO1xyXG4gICAgY29uc3Qgc3RhdGVCID0gdGhpcy5fc3RhdGVzLmdldCh0aHJlc2hvbGRCLm5hbWUpO1xyXG5cclxuICAgIHN0YXRlQS5zZXRXZWlnaHQod2VpZ2h0QSk7XHJcbiAgICBzdGF0ZUIuc2V0V2VpZ2h0KHdlaWdodEIpO1xyXG5cclxuICAgIHRoaXMuX3NldFBoYXNlTGVhZFN0YXRlKFxyXG4gICAgICBbc3RhdGVBLCBzdGF0ZUJdLFxyXG4gICAgICBbdGhyZXNob2xkQS5waGFzZU1hdGNoLCB0aHJlc2hvbGRCLnBoYXNlTWF0Y2hdXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0cyBhIGxlYWQgcGhhc2Ugc3RhdGUgaWYgdGhlIGNvbmRpdGlvbnNcclxuICAgKiBmb3IgcGhhc2UtbWF0Y2hpbmcgYXJlIHNhdGlzZmllZC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7QXJyYXkuPEFic3RyYWN0QmxlbmRTdGF0ZT59IHN0YXRlcyAtIFN0YXRlcyB0b1xyXG4gICAqIGNoZWNrIHBoYXNlLW1hdGNoaW5nIGNyaXRlcmlhLlxyXG4gICAqIEBwYXJhbSB7QXJyYXkuPGJvb2xlYW4+fSBwaGFzZU1hdGNoZWQgLSBMaXN0IG9mIHBoYXNlLW1hdGNoIGJvb2xlYW5zLlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBfc2V0UGhhc2VMZWFkU3RhdGUoc3RhdGVzLCBwaGFzZU1hdGNoZWQpIHtcclxuICAgIGxldCBtYXggPSAwO1xyXG4gICAgc3RhdGVzLmZvckVhY2goKHN0YXRlLCBpbmRleCkgPT4ge1xyXG4gICAgICBpZiAocGhhc2VNYXRjaGVkW2luZGV4XSAmJiBzdGF0ZS53ZWlnaHQgPiBtYXgpIHtcclxuICAgICAgICB0aGlzLl9waGFzZUxlYWRTdGF0ZSA9IHN0YXRlO1xyXG4gICAgICAgIG1heCA9IHN0YXRlLndlaWdodDtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBCbGVuZDJkU3RhdGU7XHJcbiIsIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxyXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTBcclxuaW1wb3J0IEFic3RyYWN0QmxlbmRTdGF0ZSBmcm9tICcuL3N0YXRlL0Fic3RyYWN0QmxlbmRTdGF0ZSc7XHJcbmltcG9ydCBBbmltYXRpb25QbGF5ZXJJbnRlcmZhY2UgZnJvbSAnLi9BbmltYXRpb25QbGF5ZXJJbnRlcmZhY2UnO1xyXG5pbXBvcnQgQW5pbWF0aW9uVXRpbHMgZnJvbSAnLi9BbmltYXRpb25VdGlscyc7XHJcbmltcG9ydCBNYXRoVXRpbHMgZnJvbSAnLi4vTWF0aFV0aWxzJztcclxuaW1wb3J0IERlZmVycmVkIGZyb20gJy4uL0RlZmVycmVkJztcclxuaW1wb3J0IFN0YXRlQ29udGFpbmVySW50ZXJmYWNlIGZyb20gJy4vc3RhdGUvU3RhdGVDb250YWluZXJJbnRlcmZhY2UnO1xyXG5cclxuLyoqXHJcbiAqIEVudW0gZm9yIHR5cGVzIG9mIHtAbGluayBBbmltYXRpb25MYXllcn0gYmxlbmRpbmcuXHJcbiAqXHJcbiAqIEByZWFkb25seVxyXG4gKiBAZW51bSB7c3RyaW5nfVxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IExheWVyQmxlbmRNb2RlcyA9IHtPdmVycmlkZTogJ092ZXJyaWRlJywgQWRkaXRpdmU6ICdBZGRpdGl2ZSd9O1xyXG5cclxuLyoqXHJcbiAqIFRoZSBkZWZhdWx0IGJsZW5kaW5nIG1vZGUge0BsaW5rIEFuaW1hdGlvbkxheWVyfS5cclxuICpcclxuICogQHJlYWRvbmx5XHJcbiAqIEB0eXBlIHtzdHJpbmd9XHJcbiAqL1xyXG5leHBvcnQgY29uc3QgRGVmYXVsdExheWVyQmxlbmRNb2RlID0gJ092ZXJyaWRlJztcclxuXHJcbi8qKlxyXG4gKiBDaGVja3MgaWYgYSBnaXZlbiBibGVuZE1vZGUgaXMgcHJlc2VudCBpbiB0aGUgdmFsdWVzIG9mIHtAbGluayBMYXllckJsZW5kTW9kZXN9LlxyXG4gKiBJZiBpdCBpcywgcmV0dXJuIHRoZSBvcmlnaW5hbCB2YWx1ZSwgb3RoZXJ3aXNlIHJldHVybiB7QGxpbmsgRGVmYXVsdExheWVyQmxlbmRNb2RlfS5cclxuICpcclxuICogQHBhcmFtIHtzdHJpbmd9IGJsZW5kTW9kZSAtIFRoZSBuYW1lIG9mIHRoZSB0eXBlIG9mIGJsZW5kaW5nLlxyXG4gKlxyXG4gKiBAcmV0dXJucyB7KHN0cmluZ3xEZWZhdWx0TGF5ZXJCbGVuZE1vZGUpfVxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlQmxlbmRNb2RlKGJsZW5kTW9kZSkge1xyXG4gIGlmIChBcnJheS5mcm9tKE9iamVjdC52YWx1ZXMoTGF5ZXJCbGVuZE1vZGVzKSkuaW5jbHVkZXMoYmxlbmRNb2RlKSkge1xyXG4gICAgcmV0dXJuIGJsZW5kTW9kZTtcclxuICB9IGVsc2Uge1xyXG4gICAgcmV0dXJuIERlZmF1bHRMYXllckJsZW5kTW9kZTtcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDbGFzcyBmb3IgbWFuYWdpbmcgYSBzZXQgb2YgYW5pbWF0aW9ucyB3aGVyZSBvbmx5IG9uZSBzdGF0ZSBjYW4gYmUgYWN0aXZlIGF0XHJcbiAqIGFueSBnaXZlbiB0aW1lLlxyXG4gKlxyXG4gKiBAaW1wbGVtZW50cyBBbmltYXRpb25QbGF5ZXJJbnRlcmZhY2VcclxuICogQGltcGxlbWVudHMgU3RhdGVDb250YWluZXJJbnRlcmZhY2VcclxuICovXHJcbmNsYXNzIEFuaW1hdGlvbkxheWVyIGV4dGVuZHMgQW5pbWF0aW9uUGxheWVySW50ZXJmYWNlLk1peGluKFxyXG4gIFN0YXRlQ29udGFpbmVySW50ZXJmYWNlLk1peGluKClcclxuKSB7XHJcbiAgLyoqXHJcbiAgICogQGNvbnN0cnVjdG9yXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge09iamVjdD19IG9wdGlvbnMgLSAgT3B0aW9ucyBmb3IgdGhlIGFuaW1hdGlvbiBsYXllci5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0aW9ucy5uYW1lIC0gTmFtZSBvZiB0aGUgbGF5ZXIuIE5hbWVzIG11c3QgYmUgdW5pcXVlIHRvIHRoZVxyXG4gICAqIGFuaW1hdGlvbiBmZWF0dXJlIHRoYXQgY29udGFpbnMgdGhlIGxheWVyLlxyXG4gICAqIEBwYXJhbSB7TGF5ZXJCbGVuZE1vZGVzfSBbb3B0aW9ucy5ibGVuZE1vZGU9RGVmYXVsdExheWVyQmxlbmRNb2RlXSAtXHJcbiAgICogVHlwZSBvZiBibGVuZGluZyB0byB1c2UgZm9yIGFsbCBzdGF0ZXMgY29udHJvbGxlZCBieSB0aGUgbGF5ZXIuXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLndlaWdodD0xXSAtIFRoZSBhbW91bnQgb2YgaW5mbHVlbmNlIHRoZSBsYXllcidzIGN1cnJlbnRcclxuICAgKiBhbmltYXRpb24gaGFzIG92ZXIgdGhlIHJlc3VsdCBmb3IgdGhlIGhvc3QuXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLnRyYW5zaXRpb25UaW1lPTBdIC0gVGhlIGRlZmF1bHQgYW1vdW50IG9mIHRpbWUgdG8gdXNlIHdoZW5cclxuICAgKiBwbGF5aW5nIGFuZCByZXN1bWluZyBhbmltYXRpb25zLlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvcHRpb25zLmVhc2luZ0ZuIC0gVGhlIGRlZmF1bHQgZWFzaW5nIGZ1bmN0aW9uIHRvIHVzZSB3aGVuXHJcbiAgICogdHJhbnNpdGlvbmluZyBiZXR3ZWVuIGFuaW1hdGlvbnMgYW5kIHNldHRpbmcgbGF5ZXIgd2VpZ2h0LlxyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMgPSB7fSkge1xyXG4gICAgc3VwZXIob3B0aW9ucyk7XHJcblxyXG4gICAgdGhpcy5uYW1lID0gb3B0aW9ucy5uYW1lID09PSB1bmRlZmluZWQgPyAnQW5pbWF0aW9uTGF5ZXInIDogb3B0aW9ucy5uYW1lO1xyXG4gICAgdGhpcy5fYmxlbmRNb2RlID0gQXJyYXkuZnJvbShPYmplY3QudmFsdWVzKExheWVyQmxlbmRNb2RlcykpLmluY2x1ZGVzKFxyXG4gICAgICBvcHRpb25zLmJsZW5kTW9kZVxyXG4gICAgKVxyXG4gICAgICA/IG9wdGlvbnMuYmxlbmRNb2RlXHJcbiAgICAgIDogRGVmYXVsdExheWVyQmxlbmRNb2RlO1xyXG4gICAgdGhpcy5fcHJvbWlzZXMgPSB7XHJcbiAgICAgIHdlaWdodDogRGVmZXJyZWQucmVzb2x2ZSgpLFxyXG4gICAgfTtcclxuICAgIHRoaXMuX3dlaWdodFBhdXNlZCA9IGZhbHNlO1xyXG5cclxuICAgIHRoaXMud2VpZ2h0ID0gdHlwZW9mIG9wdGlvbnMud2VpZ2h0ID09PSAnbnVtYmVyJyA/IG9wdGlvbnMud2VpZ2h0IDogMTtcclxuICAgIHRoaXMuX2ludGVybmFsV2VpZ2h0ID0gdGhpcy5fd2VpZ2h0O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgdHlwZSBvZiBibGVuZGluZyB1c2VkIGZvciBzdGF0ZXMgY29udHJvbGxlZCBieSB0aGUgbGF5ZXIuXHJcbiAgICpcclxuICAgKiBAcmVhZG9ubHlcclxuICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAqL1xyXG4gIGdldCBibGVuZE1vZGUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fYmxlbmRNb2RlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyBhbmQgc2V0cyB0aGUgYW1vdW50IG9mIGluZmx1ZW5jZSB0aGUgbGF5ZXIncyBjdXJyZW50IGFuaW1hdGlvbiBoYXMgb3ZlclxyXG4gICAqIHRoZSByZXN1bHQgZm9yIHRoZSBob3N0LlxyXG4gICAqXHJcbiAgICogQHR5cGUge251bWJlcn1cclxuICAgKi9cclxuICBzZXQgd2VpZ2h0KHdlaWdodCkge1xyXG4gICAgdGhpcy5fd2VpZ2h0ID0gTWF0aFV0aWxzLmNsYW1wKHdlaWdodCwgMCwgMSk7XHJcbiAgfVxyXG5cclxuICBnZXQgd2VpZ2h0KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3dlaWdodDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgd2hldGhlciBvciBub3QgdGhlIGxheWVyJ3Mgd2VpZ2h0IHZhbHVlIGlzIGN1cnJlbnRseSBiZWluZyBhbmltYXRlZC5cclxuICAgKlxyXG4gICAqIEByZWFkb25seVxyXG4gICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAqL1xyXG4gIGdldCB3ZWlnaHRQZW5kaW5nKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3Byb21pc2VzLndlaWdodCAmJiB0aGlzLl9wcm9taXNlcy53ZWlnaHQucGVuZGluZztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFBhdXNlIHRoZSBjdXJyZW50IGFuaW1hdGlvbiBzdGF0ZSBhbmQgYW55IGludGVycG9sYXRpb24gaGFwcGVuaW5nIG9uIHRoZSBsYXllcidzXHJcbiAgICogd2VpZ2h0IHByb3BlcnR5LlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAgICovXHJcbiAgcGF1c2UoKSB7XHJcbiAgICB0aGlzLl9wYXVzZWQgPSB0cnVlO1xyXG4gICAgdGhpcy5fd2VpZ2h0UGF1c2VkID0gdHJ1ZTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5wYXVzZUFuaW1hdGlvbigpIHx8IHRoaXMud2VpZ2h0UGVuZGluZztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlc3VtZSB0aGUgY3VycmVudCBhbmltYXRpb24gc3RhdGUgYW5kIGFueSBpbnRlcnBvbGF0aW9uIGhhcHBlbmluZyBvbiB0aGUgbGF5ZXInc1xyXG4gICAqIHdlaWdodCBwcm9wZXJ0eS5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gICAqL1xyXG4gIHJlc3VtZSgpIHtcclxuICAgIHRoaXMuX3BhdXNlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5fd2VpZ2h0UGF1c2VkID0gZmFsc2U7XHJcblxyXG4gICAgY29uc3QgaXNXZWlnaHRBY3RpdmUgPSB0aGlzLndlaWdodFBlbmRpbmc7XHJcblxyXG4gICAgaWYgKHRoaXMuX2N1cnJlbnRTdGF0ZSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5yZXN1bWVBbmltYXRpb24oKSB8fCBpc1dlaWdodEFjdGl2ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBpc1dlaWdodEFjdGl2ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZXMgdGhlIHVzZXIgZGVmaW5lZCB3ZWlnaHQgb3ZlciB0aW1lLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IHdlaWdodCAtIFRoZSB0YXJnZXQgd2VpZ2h0IHZhbHVlLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbc2Vjb25kcz0wXSAtIFRoZSBhbW91bnQgb2YgdGltZSBpdCB3aWxsIHRha2UgdG8gcmVhY2ggdGhlXHJcbiAgICogdGFyZ2V0IHdlaWdodC5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gZWFzaW5nRm4gLSBUaGUgZWFzaW5nIGZ1bmN0aW9uIHRvIHVzZSBmb3IgaW50ZXJwb2xhdGlvbi5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtEZWZlcnJlZH1cclxuICAgKi9cclxuICBzZXRXZWlnaHQod2VpZ2h0LCBzZWNvbmRzID0gMCwgZWFzaW5nRm4pIHtcclxuICAgIGlmICh0aGlzLndlaWdodFBlbmRpbmcpIHtcclxuICAgICAgdGhpcy5fcHJvbWlzZXMud2VpZ2h0LmNhbmNlbCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHdlaWdodCA9IE1hdGhVdGlscy5jbGFtcCh3ZWlnaHQpO1xyXG4gICAgdGhpcy5fcHJvbWlzZXMud2VpZ2h0ID0gQW5pbWF0aW9uVXRpbHMuaW50ZXJwb2xhdGVQcm9wZXJ0eShcclxuICAgICAgdGhpcyxcclxuICAgICAgJ3dlaWdodCcsXHJcbiAgICAgIHdlaWdodCxcclxuICAgICAge1xyXG4gICAgICAgIHNlY29uZHMsXHJcbiAgICAgICAgZWFzaW5nRm46IGVhc2luZ0ZuICE9PSB1bmRlZmluZWQgPyBlYXNpbmdGbiA6IHRoaXMuX2Vhc2luZ0ZuLFxyXG4gICAgICB9XHJcbiAgICApO1xyXG5cclxuICAgIHJldHVybiB0aGlzLl9wcm9taXNlcy53ZWlnaHQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQYXVzZSBhbnkgaW50ZXJwb2xhdGlvbiBoYXBwZW5pbmcgb24gdGhlIGxheWVyJ3Mgd2VpZ2h0IHByb3BlcnR5LlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAgICovXHJcbiAgcGF1c2VXZWlnaHQoKSB7XHJcbiAgICB0aGlzLl93ZWlnaHRQYXVzZWQgPSB0cnVlO1xyXG5cclxuICAgIHJldHVybiB0aGlzLndlaWdodFBlbmRpbmc7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXN1bWUgYW55IGludGVycG9sYXRpb24gaGFwcGVuaW5nIG9uIHRoZSBsYXllcidzIHdlaWdodCBwcm9wZXJ0eS5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gICAqL1xyXG4gIHJlc3VtZVdlaWdodCgpIHtcclxuICAgIHRoaXMuX3dlaWdodFBhdXNlZCA9IGZhbHNlO1xyXG5cclxuICAgIHJldHVybiB0aGlzLndlaWdodFBlbmRpbmc7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNdWx0aXBsaWVzIHRoZSB1c2VyIHdlaWdodCBieSBhIGZhY3RvciB0byBkZXRlcm1pbmUgdGhlIGludGVybmFsIHdlaWdodC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBmYWN0b3IgLSAwLTEgbXVsdGlwbGllciB0byBhcHBseSB0byB0aGUgdXNlciB3ZWlnaHQuXHJcbiAgICovXHJcbiAgdXBkYXRlSW50ZXJuYWxXZWlnaHQoZmFjdG9yKSB7XHJcbiAgICB0aGlzLl9pbnRlcm5hbFdlaWdodCA9IHRoaXMuX3dlaWdodCAqIGZhY3RvcjtcclxuXHJcbiAgICBpZiAodGhpcy5fY3VycmVudFN0YXRlKSB7XHJcbiAgICAgIHRoaXMuX2N1cnJlbnRTdGF0ZS51cGRhdGVJbnRlcm5hbFdlaWdodCh0aGlzLl9pbnRlcm5hbFdlaWdodCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSBuYW1lcyBvZiBibGVuZCBzdGF0ZXMgaW4gYW4gYW5pbWF0aW9uLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFuaW1hdGlvbk5hbWUgLSBOYW1lIG9mIHRoZSBhbmltYXRpb24uXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7QXJyYXkuPHN0cmluZz59IC0gTmFtZXMgb2YgYmxlbmQgc3RhdGVzLlxyXG4gICAqL1xyXG4gIGdldEFuaW1hdGlvbkJsZW5kTmFtZXMoYW5pbWF0aW9uTmFtZSkge1xyXG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzLmdldFN0YXRlKGFuaW1hdGlvbk5hbWUpO1xyXG5cclxuICAgIGlmIChzdGF0ZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgQ2Fubm90IGdldCBibGVuZCBuYW1lcyBvZiBhbmltYXRpb24gJHthbmltYXRpb25OYW1lfSBvbiBsYXllciAke3RoaXMubmFtZX0uIE5vIGFuaW1hdGlvbiBleGlzdHMgd2l0aCB0aGlzIG5hbWUuYFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChzdGF0ZSBpbnN0YW5jZW9mIEFic3RyYWN0QmxlbmRTdGF0ZSkge1xyXG4gICAgICByZXR1cm4gc3RhdGUuZ2V0U3RhdGVOYW1lcygpO1xyXG4gICAgfVxyXG5cclxuICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgYENhbm5vdCBnZXQgYmxlbmQgbmFtZXMgb2YgYW5pbWF0aW9uICR7YW5pbWF0aW9uTmFtZX0gb24gbGF5ZXIgJHt0aGlzLm5hbWV9LiBBbmltYXRpb24gaXMgbm90IGFuIGluc3RhbmNlIG9mIEFic3RyYWN0QmxlbmRTdGF0ZS5gXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlIHRoZSB3ZWlnaHQgZm9yIGEgYmxlbmQgc3RhdGUgb2YgYW4gYW5pbWF0aW9uLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFuaW1hdGlvbk5hbWUgLSBOYW1lIG9mIHRoZSBhbmltYXRpb24gY29udGFpbmluZyB0aGUgYmxlbmQgc3RhdGVcclxuICAgKiB0byB1cGRhdGUuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGJsZW5kTmFtZSAtIE5hbWUgb2YgdGhlIGJsZW5kIHN0YXRlIHRvIHVwZGF0ZS5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gd2VpZ2h0IC0gV2VpZ2h0IHZhbHVlIHRvIHNldCBvbiB0aGUgYW5pbWF0aW9uLiBUaGlzIG51bWJlciBzaG91ZGxkIGJlXHJcbiAgICogaW4gdGhlIDAtMSByYW5nZS5cclxuICAgKiBAcGFyYW0ge251bWJlcj19IHNlY29uZHMgLSBOdW1iZXIgb2Ygc2Vjb25kcyBpdCBzaG91bGQgdGFrZSB0byByZWFjaCB0aGUgbmV3IHdlaWdodC5cclxuICAgKiBEZWZhdWx0IGlzIHplcm8gYW5kIHdpbGwgc2V0IGltbWVkaWF0ZWx5LlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBlYXNpbmdGbiAtIEVhc2luZyBmdW5jdGlvbiB0byB1c2Ugd2hpbGUgaW50ZXJwb2xhdGluZyB0aGUgbmV3XHJcbiAgICogd2VpZ2h0LiBEZWZhdWx0IGlzIEVhc2luZy5MaW5lYXIuSW5PdXQuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7RGVmZXJyZWR9IC0gUHJvbWlzZSB0aGF0IHdpbGwgcmVzb2x2ZSBvbmNlIHRoZSBhbmltYXRpb24ncyB3ZWlnaHQgcmVhY2hlc1xyXG4gICAqIHRoZSB0YXJnZXQgdmFsdWUuXHJcbiAgICovXHJcbiAgc2V0QW5pbWF0aW9uQmxlbmRXZWlnaHQoXHJcbiAgICBhbmltYXRpb25OYW1lLFxyXG4gICAgYmxlbmROYW1lLFxyXG4gICAgd2VpZ2h0LFxyXG4gICAgc2Vjb25kcyA9IDAsXHJcbiAgICBlYXNpbmdGblxyXG4gICkge1xyXG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzLmdldFN0YXRlKGFuaW1hdGlvbk5hbWUpO1xyXG5cclxuICAgIGlmIChzdGF0ZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgQ2Fubm90IHNldCBibGVuZCB3ZWlnaHQgb2YgYW5pbWF0aW9uICR7YW5pbWF0aW9uTmFtZX0gb24gbGF5ZXIgJHt0aGlzLm5hbWV9LiBObyBhbmltYXRpb24gZXhpc3RzIHdpdGggdGhpcyBuYW1lLmBcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoc3RhdGUgaW5zdGFuY2VvZiBBYnN0cmFjdEJsZW5kU3RhdGUpIHtcclxuICAgICAgcmV0dXJuIHN0YXRlLnNldEJsZW5kV2VpZ2h0KGJsZW5kTmFtZSwgd2VpZ2h0LCBzZWNvbmRzLCBlYXNpbmdGbik7XHJcbiAgICB9XHJcblxyXG4gICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICBgQ2Fubm90IHNldCBibGVuZCB3ZWlnaHQgb2YgYW5pbWF0aW9uICR7YW5pbWF0aW9uTmFtZX0gb24gbGF5ZXIgJHt0aGlzLm5hbWV9LiBBbmltYXRpb24gaXMgbm90IGFuIGluc3RhbmNlIG9mIEFic3RyYWN0QmxlbmRTdGF0ZS5gXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgd2VpZ2h0IGZvciBhIGJsZW5kIHN0YXRlIG9mIGFuIGFuaW1hdGlvbi5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhbmltYXRpb25OYW1lIC0gTmFtZSBvZiB0aGUgYW5pbWF0aW9uIGNvbnRhaW5pbmcgdGhlIGJsZW5kIHN0YXRlXHJcbiAgICogdG8gdXBkYXRlLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBibGVuZE5hbWUgLSBOYW1lIG9mIHRoZSBibGVuZCBzdGF0ZSB0byByZXRyaWV2ZSB0aGUgd2VpZ2h0IG9mLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge251bWJlcn0gLSBXZWlnaHQgb2YgdGhlIGJsZW5kIHN0YXRlLlxyXG4gICAqL1xyXG4gIGdldEFuaW1hdGlvbkJsZW5kV2VpZ2h0KGFuaW1hdGlvbk5hbWUsIGJsZW5kTmFtZSkge1xyXG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzLmdldFN0YXRlKGFuaW1hdGlvbk5hbWUpO1xyXG5cclxuICAgIGlmIChzdGF0ZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgQ2Fubm90IGdldCBibGVuZCB3ZWlnaHQgb2YgYW5pbWF0aW9uICR7YW5pbWF0aW9uTmFtZX0gb24gbGF5ZXIgJHt0aGlzLm5hbWV9LiBObyBhbmltYXRpb24gZXhpc3RzIHdpdGggdGhpcyBuYW1lLmBcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoc3RhdGUgaW5zdGFuY2VvZiBBYnN0cmFjdEJsZW5kU3RhdGUpIHtcclxuICAgICAgcmV0dXJuIHN0YXRlLmdldEJsZW5kV2VpZ2h0KGJsZW5kTmFtZSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICBgQ2Fubm90IGdldCBibGVuZCB3ZWlnaHQgb2YgYW5pbWF0aW9uICR7YW5pbWF0aW9uTmFtZX0gb24gbGF5ZXIgJHt0aGlzLm5hbWV9LiBBbmltYXRpb24gaXMgbm90IGFuIGluc3RhbmNlIG9mIEFic3RyYWN0QmxlbmRTdGF0ZS5gXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlIGFueSB3ZWlnaHQgaW50ZXJwb2xhdG9ycyBhbmQgdGhlIGN1cnJlbnQgYW5pbWF0aW9uLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IGRlbHRhVGltZSAtIFRpbWUgaW4gbWlsbGlzZWNvbmRzIHNpbmNlIHRoZSBsYXN0IHVwZGF0ZS5cclxuICAgKi9cclxuICB1cGRhdGUoZGVsdGFUaW1lKSB7XHJcbiAgICBzdXBlci51cGRhdGUoZGVsdGFUaW1lKTtcclxuXHJcbiAgICBpZiAoIXRoaXMuX3BhdXNlZCAmJiAhdGhpcy5fd2VpZ2h0UGF1c2VkKSB7XHJcbiAgICAgIHRoaXMuX3Byb21pc2VzLndlaWdodC5leGVjdXRlKGRlbHRhVGltZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDYW5jZWwgYW55IHBlbmRpbmcgcHJvbWlzZXMgYW5kIGRpc2NhcmQgc3RhdGVzIGNvbnRyb2xsZWQgYnkgdGhlIGxheWVyLlxyXG4gICAqL1xyXG4gIGRpc2NhcmQoKSB7XHJcbiAgICBzdXBlci5kaXNjYXJkKCk7XHJcblxyXG4gICAgdGhpcy5kaXNjYXJkU3RhdGVzKCk7XHJcblxyXG4gICAgdGhpcy5fcHJvbWlzZXMud2VpZ2h0LmNhbmNlbCgpO1xyXG4gICAgZGVsZXRlIHRoaXMuX3Byb21pc2VzO1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgQW5pbWF0aW9uTGF5ZXI7XHJcbiIsIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxyXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTBcclxuaW1wb3J0IERlZmVycmVkIGZyb20gJ2NvcmUvRGVmZXJyZWQnO1xyXG5pbXBvcnQgQWJzdHJhY3RTdGF0ZSBmcm9tICcuL0Fic3RyYWN0U3RhdGUnO1xyXG5pbXBvcnQge3ZhbGlkYXRlQmxlbmRNb2RlfSBmcm9tICcuLi9BbmltYXRpb25MYXllcic7XHJcbmltcG9ydCBBbmltYXRpb25VdGlscyBmcm9tICcuLi9BbmltYXRpb25VdGlscyc7XHJcblxyXG4vKipcclxuICogQ2xhc3MgZm9yIHBsYXlpbmcgYSBzaW5nbGUgYW5pbWF0aW9uIGNsaXAuXHJcbiAqXHJcbiAqIEBleHRlbmRzIEFic3RyYWN0U3RhdGVcclxuICogQGFsaWFzIGNvcmUvU2luZ2xlU3RhdGVcclxuICovXHJcbmNsYXNzIFNpbmdsZVN0YXRlIGV4dGVuZHMgQWJzdHJhY3RTdGF0ZSB7XHJcbiAgLyoqXHJcbiAgICogQGNvbnN0cnVjdG9yXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge09iamVjdD19IG9wdGlvbnMgLSBPcHRpb25zIGZvciB0aGUgYW5pbWF0aW9uIHN0YXRlLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nPX0gb3B0aW9ucy5uYW1lIC0gTmFtZSBmb3IgdGhlIGFuaW1hdGlvbiBzdGF0ZS4gTmFtZXMgbXVzdCBiZVxyXG4gICAqIHVuaXF1ZSBmb3IgdGhlIGxheWVyIHRoZSBzdGF0ZSBpcyBhcHBsaWVkIHRvLlxyXG4gICAqIEBwYXJhbSB7d2VpZ2h0fSBbb3B0aW9ucy53ZWlnaHQ9MF0gLSBUaGUgMC0xIGFtb3VudCBvZiBpbmZsdWVuY2UgdGhlIHN0YXRlIHdpbGwgaGF2ZS5cclxuICAgKiBAcGFyYW0ge3RpbWVTY2FsZX0gW29wdGlvbnMudGltZVNjYWxlPTFdIC0gRmFjdG9yIHRvIHNjYWxlIHRoZSBwbGF5YmFjayBzcGVlZCBvZiB0aGVcclxuICAgKiBhbmltYXRpb24uXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLmxvb3BDb3VudD1JbmZpbml0eV0gLSBOdW1iZXIgb2YgdGltZXMgdGhlIGFuaW1hdGlvbiBzaG91bGRcclxuICAgKiByZXBlYXQgYmVmb3JlIGZpbmlzaGluZy5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuYmxlbmRNb2RlPURlZmF1bHRMYXllckJsZW5kTW9kZV0gLSBUeXBlIG9mXHJcbiAgICogYmxlbmRpbmcgdGhlIGFuaW1hdGlvbiBzaG91bGQgdXNlLlxyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMgPSB7fSkge1xyXG4gICAgc3VwZXIob3B0aW9ucyk7XHJcblxyXG4gICAgdGhpcy5fdGltZVNjYWxlID0gb3B0aW9ucy50aW1lU2NhbGUgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMudGltZVNjYWxlIDogMTtcclxuICAgIHRoaXMuX3Byb21pc2VzLnRpbWVTY2FsZSA9IERlZmVycmVkLnJlc29sdmUoKTtcclxuICAgIHRoaXMuX2xvb3BDb3VudCA9XHJcbiAgICAgIG9wdGlvbnMubG9vcENvdW50ICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLmxvb3BDb3VudCA6IEluZmluaXR5O1xyXG4gICAgdGhpcy5fYmxlbmRNb2RlID0gdmFsaWRhdGVCbGVuZE1vZGUob3B0aW9ucy5ibGVuZE1vZGUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyBhbmQgc2V0cyB0aGUgbm9ybWFsaXplZCBwbGF5aW5nIHRpbWUgb2YgdGhlIGN1cnJlbnQgYW5pbWF0aW9uXHJcbiAgICpcclxuICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAqL1xyXG4gIGdldCBub3JtYWxpemVkVGltZSgpIHtcclxuICAgIHJldHVybiAwO1xyXG4gIH1cclxuXHJcbiAgc2V0IG5vcm1hbGl6ZWRUaW1lKHRpbWUpIHtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgYW5kIHNldHMgdGhlIGEgZmFjdG9yIHRvIHNjYWxlIGFuaW1hdGlvbiBwbGF5YmFjayBzcGVlZCB3aXRoLlxyXG4gICAqXHJcbiAgICogQHR5cGUge251bWJlcn1cclxuICAgKi9cclxuICBnZXQgdGltZVNjYWxlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3RpbWVTY2FsZTtcclxuICB9XHJcblxyXG4gIHNldCB0aW1lU2NhbGUodGltZVNjYWxlKSB7XHJcbiAgICB0aGlzLl90aW1lU2NhbGUgPSB0aW1lU2NhbGU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHdoZXRoZXIgb3Igbm90IHRoZSB0aW1lU2NhbGUgaXMgY3VycmVudGx5IGJlaW5nIGFuaW1hdGVkLlxyXG4gICAqXHJcbiAgICogQHJlYWRvbmx5XHJcbiAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICovXHJcbiAgZ2V0IHRpbWVTY2FsZVBlbmRpbmcoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fcHJvbWlzZXMudGltZVNjYWxlLnBlbmRpbmc7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGVzIHRoZSB0aW1lU2NhbGUgdmFsdWUgb3ZlciB0aW1lLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IHdlaWdodCAtIFRoZSB0YXJnZXQgdGltZVNjYWxlIHZhbHVlLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbc2Vjb25kcz0wXSAtIFRoZSBhbW91bnQgb2YgdGltZSBpdCB3aWxsIHRha2UgdG8gcmVhY2ggdGhlXHJcbiAgICogdGFyZ2V0IHRpbWVTY2FsZS5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gZWFzaW5nRm4gLSBUaGUgZWFzaW5nIGZ1bmN0aW9uIHRvIHVzZSBmb3IgaW50ZXJwb2xhdGlvbi5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtEZWZlcnJlZH1cclxuICAgKi9cclxuICBzZXRUaW1lU2NhbGUodGltZVNjYWxlLCBzZWNvbmRzID0gMCwgZWFzaW5nRm4pIHtcclxuICAgIHRoaXMuX3Byb21pc2VzLnRpbWVTY2FsZS5jYW5jZWwoKTtcclxuXHJcbiAgICB0aGlzLl9wcm9taXNlcy50aW1lU2NhbGUgPSBBbmltYXRpb25VdGlscy5pbnRlcnBvbGF0ZVByb3BlcnR5KFxyXG4gICAgICB0aGlzLFxyXG4gICAgICAndGltZVNjYWxlJyxcclxuICAgICAgdGltZVNjYWxlLFxyXG4gICAgICB7c2Vjb25kcywgZWFzaW5nRm59XHJcbiAgICApO1xyXG5cclxuICAgIHJldHVybiB0aGlzLl9wcm9taXNlcy50aW1lU2NhbGU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIGFuZCBzZXRzIHRoZSBudW1iZXIgb2YgdGltZXMgdGhlIGFuaW1hdGlvbiB3aWxsIHJlcGVhdCBiZWZvcmUgZmluaXNoaW5nLlxyXG4gICAqXHJcbiAgICogQHR5cGUge251bWJlcn1cclxuICAgKi9cclxuICBnZXQgbG9vcENvdW50KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2xvb3BDb3VudDtcclxuICB9XHJcblxyXG4gIHNldCBsb29wQ291bnQobG9vcENvdW50KSB7XHJcbiAgICB0aGlzLl9sb29wQ291bnQgPSBsb29wQ291bnQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSB0eXBlIG9mIGJsZW5kaW5nIHVzZWQgZm9yIHRoZSBhbmltYXRpb24uXHJcbiAgICpcclxuICAgKiBAcmVhZG9ubHlcclxuICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAqL1xyXG4gIGdldCBibGVuZE1vZGUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fYmxlbmRNb2RlO1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgU2luZ2xlU3RhdGU7XHJcbiIsIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxyXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTBcclxuaW1wb3J0IEFic3RyYWN0U3RhdGUgZnJvbSAnLi9BYnN0cmFjdFN0YXRlJztcclxuaW1wb3J0IFN0YXRlQ29udGFpbmVySW50ZXJmYWNlIGZyb20gJy4vU3RhdGVDb250YWluZXJJbnRlcmZhY2UnO1xyXG5pbXBvcnQgQW5pbWF0aW9uUGxheWVySW50ZXJmYWNlIGZyb20gJy4uL0FuaW1hdGlvblBsYXllckludGVyZmFjZSc7XHJcbmltcG9ydCBVdGlscyBmcm9tICcuLi8uLi9VdGlscyc7XHJcblxyXG4vKipcclxuICogQ2xhc3MgZm9yIHBsYXlpbmcgcmFuZG9tIGFuaW1hdGlvbnMgYXQgcmFuZG9tIGludGVydmFscyB3aXRoaW4gdGhpcyBzdGF0ZS5cclxuICpcclxuICogQGV4dGVuZHMgQWJzdHJhY3RTdGF0ZVxyXG4gKiBAaW1wbGVtZW50cyBBbmltYXRpb25QbGF5ZXJJbnRlcmZhY2VcclxuICogQGltcGxlbWVudHMgU3RhdGVDb250YWluZXJJbnRlcmZhY2VcclxuICovXHJcbmNsYXNzIFJhbmRvbUFuaW1hdGlvblN0YXRlIGV4dGVuZHMgQW5pbWF0aW9uUGxheWVySW50ZXJmYWNlLk1peGluKFN0YXRlQ29udGFpbmVySW50ZXJmYWNlLk1peGluKEFic3RyYWN0U3RhdGUpKSB7XHJcbiAgLyoqXHJcbiAgICogQGNvbnN0cnVjdG9yXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIC0gT3B0aW9ucyBmb3IgdGhlIGNvbnRhaW5lciBzdGF0ZS5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMucGxheUludGVydmFsPTNdIC0gVGhlIGJhc2UgYW5pbWF0aW9uIHBsYXliYWNrIGludGVydmFsLlxyXG4gICAqIEBwYXJhbSB7QXJyYXkuPEFic3RyYWN0U3RhdGU+fSBbc3ViU3RhdGVzPVtdXSAtIHN0YXRlcyB0byBiZSByYW5kb21seSBwaWNrZWQgdG8gcGxheVxyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMgPSB7fSwgc3ViU3RhdGVzID0gW10pIHtcclxuICAgIHN1cGVyKG9wdGlvbnMpO1xyXG5cclxuICAgIHRoaXMuX3BsYXlJbnRlcnZhbCA9IG9wdGlvbnMucGxheUludGVydmFsID8gb3B0aW9ucy5wbGF5SW50ZXJ2YWwgOiAzO1xyXG5cclxuICAgIHN1YlN0YXRlcy5mb3JFYWNoKHN0YXRlID0+IHtcclxuICAgICAgdGhpcy5hZGRTdGF0ZShzdGF0ZSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgYW5kIHNldHMgdGhlIGJhc2UgYW5pbWF0aW9uIHBsYXkgaW50ZXJ2YWxcclxuICAgKlxyXG4gICAqIEB0eXBlIHtmbG9hdH1cclxuICAgKi9cclxuICBnZXQgcGxheUludGVydmFsKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3BsYXlJbnRlcnZhbDtcclxuICB9XHJcblxyXG4gIHNldCBwbGF5SW50ZXJ2YWwocGxheUludGVydmFsKSB7XHJcbiAgICB0aGlzLl9wbGF5SW50ZXJ2YWwgPSBwbGF5SW50ZXJ2YWw7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXNldCB0aGUgaW50ZXJuYWwgdGltZXIgZm9yIGFuaW1hdGlvbiBwbGF5IGludGVydmFsXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIF9yZXNldFRpbWVyKCkge1xyXG4gICAgY29uc3QgcGxheVRpbWVyID0gVXRpbHMuZ2V0UmFuZG9tRmxvYXQodGhpcy5fcGxheUludGVydmFsIC8gNCwgdGhpcy5fcGxheUludGVydmFsICogMik7XHJcbiAgICBjb25zdCBvbkZpbmlzaCA9ICgpID0+IHtcclxuICAgICAgdGhpcy5wbGF5UmFuZG9tQW5pbWF0aW9uKHRoaXMuX3BsYXlDYWxsYmFja3Mub25FcnJvcik7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9wcm9taXNlcy50aW1lciA9IFV0aWxzLndhaXQocGxheVRpbWVyLCB7b25GaW5pc2h9KTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZUludGVybmFsV2VpZ2h0KGZhY3Rvcikge1xyXG4gICAgc3VwZXIudXBkYXRlSW50ZXJuYWxXZWlnaHQoZmFjdG9yKTtcclxuXHJcbiAgICBpZiAodGhpcy5fY3VycmVudFN0YXRlKSB7XHJcbiAgICAgIHRoaXMuX2N1cnJlbnRTdGF0ZS51cGRhdGVJbnRlcm5hbFdlaWdodCh0aGlzLl9pbnRlcm5hbFdlaWdodCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQaWNrIGEgcmFuZG9tIGFuaW1hdGlvbiBhbmQgdXRpbGl6ZSBBbmltYXRpb25QbGF5ZXJJbnRlcmZhY2UgdG8gcGxheSB0aGF0IGFuaW1hdGlvblxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9uRXJyb3IgLSBGdW5jdGlvbiB0byBleGVjdXRlIGlmIHRoZSBzdGF0ZSBlbmNvdW50ZXJzXHJcbiAgICogYW4gZXJyb3IgZHVyaW5nIHBsYXliYWNrLlxyXG4gICAqL1xyXG4gIHBsYXlSYW5kb21BbmltYXRpb24ob25FcnJvcikge1xyXG4gICAgdGhpcy5fcmVzZXRUaW1lcigpO1xyXG5cclxuICAgIGNvbnN0IHN0YXRlcyA9IHRoaXMuZ2V0U3RhdGVOYW1lcygpO1xyXG4gICAgaWYgKHRoaXMuX2N1cnJlbnRTdGF0ZSkge1xyXG4gICAgICBzdGF0ZXMuc3BsaWNlKHN0YXRlcy5pbmRleE9mKHRoaXMuX2N1cnJlbnRTdGF0ZS5uYW1lKSwgMSk7XHJcbiAgICB9XHJcbiAgICBjb25zdCByYW5kb21TdGF0ZSA9ICBzdGF0ZXNbVXRpbHMuZ2V0UmFuZG9tSW50KDAsIHN0YXRlcy5sZW5ndGgpXTtcclxuXHJcbiAgICB0aGlzLnBsYXlBbmltYXRpb24ocmFuZG9tU3RhdGUsIHRoaXMuX3RyYW5zaXRpb25UaW1lLCB0aGlzLl9lYXNpbmdGbiwgdW5kZWZpbmVkLCBvbkVycm9yLCB1bmRlZmluZWQpO1xyXG4gIH1cclxuXHJcbiAgcGxheShvbkZpbmlzaCwgb25FcnJvciwgb25DYW5jZWwpIHtcclxuICAgIHRoaXMucGxheVJhbmRvbUFuaW1hdGlvbihvbkVycm9yKTtcclxuICAgIHJldHVybiBzdXBlci5wbGF5KG9uRmluaXNoLCBvbkVycm9yLCBvbkNhbmNlbCk7XHJcbiAgfVxyXG5cclxuICBwYXVzZSgpIHtcclxuICAgIHJldHVybiBzdXBlci5wYXVzZSgpICYmIHRoaXMucGF1c2VBbmltYXRpb24oKTtcclxuICB9XHJcblxyXG4gIHJlc3VtZShvbkZpbmlzaCwgb25FcnJvciwgb25DYW5jZWwpIHtcclxuICAgIGlmICh0aGlzLl9jdXJyZW50U3RhdGUpIHtcclxuICAgICAgdGhpcy5yZXN1bWVBbmltYXRpb24odGhpcy5fY3VycmVudFN0YXRlLm5hbWUsIHRoaXMuX3RyYW5zaXRpb25UaW1lLCB0aGlzLl9lYXNpbmdGbiwgdW5kZWZpbmVkLCBvbkVycm9yLCB1bmRlZmluZWQpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHN1cGVyLnJlc3VtZShvbkZpbmlzaCwgb25FcnJvciwgb25DYW5jZWwpO1xyXG4gIH1cclxuXHJcbiAgY2FuY2VsKCkge1xyXG4gICAgcmV0dXJuIHN1cGVyLmNhbmNlbCgpICYmIHRoaXMuY2FuY2VsQW5pbWF0aW9uKCk7XHJcbiAgfVxyXG5cclxuICBzdG9wKCkge1xyXG4gICAgcmV0dXJuIHN1cGVyLnN0b3AoKSAmJiB0aGlzLnN0b3BBbmltYXRpb24oKTtcclxuICB9XHJcblxyXG4gIGRpc2NhcmQoKSB7XHJcbiAgICBzdXBlci5kaXNjYXJkKCk7XHJcbiAgICB0aGlzLmRpc2NhcmRTdGF0ZXMoKTtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IFJhbmRvbUFuaW1hdGlvblN0YXRlO1xyXG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cclxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVC0wXHJcbmltcG9ydCBBYnN0cmFjdEhvc3RGZWF0dXJlIGZyb20gJ2NvcmUvQWJzdHJhY3RIb3N0RmVhdHVyZSc7XHJcbmltcG9ydCBVdGlscyBmcm9tICdjb3JlL1V0aWxzJztcclxuaW1wb3J0IFF1ZXVlU3RhdGUgZnJvbSAnLi9zdGF0ZS9RdWV1ZVN0YXRlJztcclxuaW1wb3J0IEZyZWVCbGVuZFN0YXRlIGZyb20gJy4vc3RhdGUvRnJlZUJsZW5kU3RhdGUnO1xyXG5pbXBvcnQgQmxlbmQxZFN0YXRlIGZyb20gJy4vc3RhdGUvQmxlbmQxZFN0YXRlJztcclxuaW1wb3J0IEJsZW5kMmRTdGF0ZSBmcm9tICcuL3N0YXRlL0JsZW5kMmRTdGF0ZSc7XHJcbmltcG9ydCBTaW5nbGVTdGF0ZSBmcm9tICcuL3N0YXRlL1NpbmdsZVN0YXRlJztcclxuaW1wb3J0IFJhbmRvbUFuaW1hdGlvblN0YXRlIGZyb20gJy4vc3RhdGUvUmFuZG9tQW5pbWF0aW9uU3RhdGUnO1xyXG5pbXBvcnQgQW5pbWF0aW9uTGF5ZXIsIHtMYXllckJsZW5kTW9kZXN9IGZyb20gJy4vQW5pbWF0aW9uTGF5ZXInO1xyXG5pbXBvcnQgRGVmZXJyZWQgZnJvbSAnLi4vRGVmZXJyZWQnO1xyXG5cclxuLyoqXHJcbiAqIEVudW0gZm9yIGFuaW1hdGlvbiBzdGF0ZSBjbGFzc2VzLlxyXG4gKlxyXG4gKiBAcmVhZG9ubHlcclxuICogQGVudW0ge0NsYXNzfVxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IEFuaW1hdGlvblR5cGVzID0ge1xyXG4gIHNpbmdsZTogU2luZ2xlU3RhdGUsXHJcbiAgZnJlZUJsZW5kOiBGcmVlQmxlbmRTdGF0ZSxcclxuICBxdWV1ZTogUXVldWVTdGF0ZSxcclxuICByYW5kb21BbmltYXRpb246IFJhbmRvbUFuaW1hdGlvblN0YXRlLFxyXG4gIGJsZW5kMWQ6IEJsZW5kMWRTdGF0ZSxcclxuICBibGVuZDJkOiBCbGVuZDJkU3RhdGUsXHJcbn07XHJcblxyXG4vKipcclxuICogRmVhdHVyZSBmb3IgbWFuYWdpbmcgYW5pbWF0aW9ucyBvbiBhbiBvYmplY3QuXHJcbiAqXHJcbiAqIEBleHRlbmRzIEFic3RyYWN0SG9zdEZlYXR1cmVcclxuICogQGFsaWFzIGNvcmUvQW5pbWF0aW9uRmVhdHVyZVxyXG4gKlxyXG4gKiBAcHJvcGVydHkge09iamVjdH0gRVZFTlRTIC0gQnVpbHQtaW4gbWVzc2FnZXMgdGhhdCB0aGUgZmVhdHVyZSBlbWl0cy4gV2hlbiB0aGVcclxuICogZmVhdHVyZSBpcyBhZGRlZCB0byBhIHtAbGluayBjb3JlL0hvc3RPYmplY3R9LCBldmVudCBuYW1lcyB3aWxsIGJlIHByZWZpeGVkIGJ5IHRoZVxyXG4gKiBuYW1lIG9mIHRoZSBmZWF0dXJlIGNsYXNzICsgJy4nLlxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW0VWRU5UUy5hZGRMYXllcj1vbkFkZExheWVyRXZlbnRdIC0gTWVzc2FnZSB0aGF0IGlzIGVtaXR0ZWQgYWZ0ZXJcclxuICogW2FkZExheWVyXXtAbGluayBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjYWRkTGF5ZXJ9IGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBleGVjdXRlZC5cclxuICogQW4gb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgbmFtZSBvZiB0aGUgbGF5ZXIgdGhhdCB3YXMgYWRkZWQgYW5kIGl0cyBpbmRleCBpblxyXG4gKiB0aGUgbGF5ZXIgc3RhY2sgd2l0aCB0aGUgc2lnbmF0dXJlIHtuYW1lOiBzdHJpbmcsIGluZGV4OiBudW1iZXJ9IGlzIHN1cHBsaWVkXHJcbiAqIGFzIGFuIGFyZ3VtZW50IHRvIGxpc3RlbmVyIGZ1bmN0aW9ucy5cclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtFVkVOVFMucmVtb3ZlTGF5ZXI9b25SZW1vdmVMYXllckV2ZW50XSAtIE1lc3NhZ2UgdGhhdCBpc1xyXG4gKiBlbWl0dGVkIGFmdGVyIFtyZW1vdmVMYXllcl17QGxpbmsgY29yZS9BbmltYXRpb25GZWF0dXJlI3JlbW92ZUxheWVyfSBoYXMgYmVlblxyXG4gKiBzdWNjZXNzZnVsbHkgZXhlY3V0ZWQuIEFuIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIG5hbWUgb2YgdGhlIGxheWVyIHRoYXQgd2FzXHJcbiAqIHJlbW92ZWQgYW5kIGl0cyBpbmRleCBpbiB0aGUgbGF5ZXIgc3RhY2sgd2l0aCB0aGUgc2lnbmF0dXJlIHtuYW1lOiBzdHJpbmcsIGluZGV4OiBudW1iZXJ9XHJcbiAqIGlzIHN1cHBsaWVkIGFzIGFuIGFyZ3VtZW50IHRvIGxpc3RlbmVyIGZ1bmN0aW9ucy5cclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtFVkVOVFMucmVuYW1lTGF5ZXI9b25SZW5hbWVMYXllckV2ZW50XSAtIE1lc3NhZ2UgdGhhdCBpc1xyXG4gKiBlbWl0dGVkIGFmdGVyIFtyZW5hbWVMYXllcl17QGxpbmsgY29yZS9BbmltYXRpb25GZWF0dXJlI3JlbmFtZUxheWVyfSBoYXMgYmVlblxyXG4gKiBzdWNjZXNzZnVsbHkgZXhlY3V0ZWQuIEFuIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIG9yaWdpbmFsIG5hbWUgb2YgdGhlIGxheWVyXHJcbiAqIHRoYXQgd2FzIHJlbmFtZWQgYW5kIGl0cyB1cGRhdGVkIG5hbWUgd2l0aCB0aGUgc2lnbmF0dXJlIHtvbGROYW1lOiBzdHJpbmcsIG5ld05hbWU6IHN0cmluZ31cclxuICogaXMgc3VwcGxpZWQgYXMgYW4gYXJndW1lbnQgdG8gbGlzdGVuZXIgZnVuY3Rpb25zLlxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW0VWRU5UUy5hZGRBbmltYXRpb249b25BZGRBbmltYXRpb25FdmVudF0gLSBNZXNzYWdlIHRoYXQgaXNcclxuICogZW1pdHRlZCBhZnRlciBbYWRkQW5pbWF0aW9uXXtAbGluayBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjYWRkQW5pbWF0aW9ufSBoYXMgYmVlblxyXG4gKiBzdWNjZXNzZnVsbHkgZXhlY3V0ZWQuIEFuIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIG5hbWUgb2YgdGhlIGxheWVyIHRoYXQgdGhlXHJcbiAqIGFuaW1hdGlvbiB3YXMgYWRkZWQgdG8gYW5kIHRoZSBuYW1lIG9mIHRoZSBhbmltYXRpb24gdGhhdCB3YXMgYWRkZWQgd2l0aCB0aGVcclxuICogc2lnbmF0dXJlIHtsYXllck5hbWU6IHN0cmluZywgYW5pbWF0aW9uTmFtZTogc3RyaW5nfSBpcyBzdXBwbGllZCBhcyBhbiBhcmd1bWVudFxyXG4gKiB0byBsaXN0ZW5lciBmdW5jdGlvbnMuXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbRVZFTlRTLnJlbW92ZUFuaW1hdGlvbj1vblJlbW92ZWRBbmltYXRpb25FdmVudF0gLSBNZXNzYWdlXHJcbiAqIHRoYXQgaXMgZW1pdHRlZCBhZnRlciBbcmVtb3ZlQW5pbWF0aW9uXXtAbGluayBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjcmVtb3ZlQW5pbWF0aW9ufVxyXG4gKiBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgZXhlY3V0ZWQuIEFuIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIG5hbWUgb2YgdGhlIGxheWVyXHJcbiAqIHRoYXQgdGhlIGFuaW1hdGlvbiB3YXMgcmVtb3ZlZCBmcm9tIGFuZCB0aGUgbmFtZSBvZiB0aGUgYW5pbWF0aW9uIHRoYXQgd2FzIHJlbW92ZWRcclxuICogd2l0aCB0aGUgc2lnbmF0dXJlIHtsYXllck5hbWU6IHN0cmluZywgYW5pbWF0aW9uTmFtZTogc3RyaW5nfSBpcyBzdXBwbGllZCBhc1xyXG4gKiBhbiBhcmd1bWVudCB0byBsaXN0ZW5lciBmdW5jdGlvbnMuXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbRVZFTlRTLnJlbmFtZUFuaW1hdGlvbj1vblJlbmFtZUFuaW1hdGlvbkV2ZW50XSAtIE1lc3NhZ2VcclxuICogdGhhdCBpcyBlbWl0dGVkIGFmdGVyIFtyZW5hbWVBbmltYXRpb25de0BsaW5rIGNvcmUvQW5pbWF0aW9uRmVhdHVyZSNyZW5hbWVBbmltYXRpb259XHJcbiAqIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBleGVjdXRlZC4gQW4gb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgbmFtZSBvZiB0aGUgbGF5ZXJcclxuICogdGhhdCBjb250YWlucyB0aGUgYW5pbWF0aW9uIHRoYXQgd2FzIHJlbmFtZWQsIHRoZSBvcmlnaW5hbCBuYW1lIG9mIHRoZSBhbmltYXRpb25cclxuICogdGhhdCB3YXMgcmVuYW1lZCBhbmQgaXRzIHVwZGF0ZWQgbmFtZSB3aXRoIHRoZSBzaWduYXR1cmUge2xheWVyTmFtZTogc3RyaW5nLCBvbGROYW1lOiBzdHJpbmcsIG5ld05hbWU6IHN0cmluZ31cclxuICogaXMgc3VwcGxpZWQgYXMgYW4gYXJndW1lbnQgdG8gbGlzdGVuZXIgZnVuY3Rpb25zLlxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW0VWRU5UUy5wbGF5PW9uUGxheUV2ZW50XSAtIE1lc3NhZ2UgdGhhdCBpcyBlbWl0dGVkIGFmdGVyXHJcbiAqIGVhY2ggY2FsbCB0byBbcGxheV17QGxpbmsgY29yZS9BbmltYXRpb25GZWF0dXJlI3BsYXlBbmltYXRpb259LiBBbiBvYmplY3QgcmVwcmVzZW50aW5nXHJcbiAqIHRoZSBuYW1lIG9mIHRoZSBsYXllciBjb250YWlucyB0aGUgYW5pbWF0aW9uIHRoYXQgd2FzIHBsYXllZCBhbmQgdGhlIG5hbWUgb2ZcclxuICogdGhlIGFuaW1hdGlvbiB0aGF0IHdhcyBwbGF5ZWQgd2l0aCB0aGUgc2lnbmF0dXJlIHtsYXllck5hbWU6IHN0cmluZywgYW5pbWF0aW9uTmFtZTogc3RyaW5nfVxyXG4gKiBpcyBzdXBwbGllZCBhcyBhbiBhcmd1bWVudCB0byBsaXN0ZW5lciBmdW5jdGlvbnMuXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbRVZFTlRTLnBhdXNlPW9uUGF1c2VFdmVudF0gLSBNZXNzYWdlIHRoYXQgaXMgZW1pdHRlZCBhZnRlclxyXG4gKiBlYWNoIGNhbGwgdG8gW3BhdXNlXXtAbGluayBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjcGF1c2VBbmltYXRpb259LiBBbiBvYmplY3QgcmVwcmVzZW50aW5nXHJcbiAqIHRoZSBuYW1lIG9mIHRoZSBsYXllciBjb250YWlucyB0aGUgYW5pbWF0aW9uIHRoYXQgd2FzIHBhdXNlZCBhbmQgdGhlIG5hbWUgb2ZcclxuICogdGhlIGFuaW1hdGlvbiB0aGF0IHdhcyBwYXVzZWQgd2l0aCB0aGUgc2lnbmF0dXJlIHtsYXllck5hbWU6IHN0cmluZywgYW5pbWF0aW9uTmFtZTogc3RyaW5nfVxyXG4gKiBpcyBzdXBwbGllZCBhcyBhbiBhcmd1bWVudCB0byBsaXN0ZW5lciBmdW5jdGlvbnMuXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbRVZFTlRTLnJlc3VtZT1vblJlc3VtZUV2ZW50XSAtIE1lc3NhZ2UgdGhhdCBpcyBlbWl0dGVkIGFmdGVyXHJcbiAqIGVhY2ggY2FsbCB0byBbcmVzdW1lXXtAbGluayBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjcmVzdW1lQW5pbWF0aW9ufS4gQW4gb2JqZWN0IHJlcHJlc2VudGluZ1xyXG4gKiB0aGUgbmFtZSBvZiB0aGUgbGF5ZXIgY29udGFpbnMgdGhlIGFuaW1hdGlvbiB0aGF0IHdhcyByZXN1bWVkIGFuZCB0aGUgbmFtZSBvZlxyXG4gKiB0aGUgYW5pbWF0aW9uIHRoYXQgd2FzIHJlc3VtZWQgd2l0aCB0aGUgc2lnbmF0dXJlIHtsYXllck5hbWU6IHN0cmluZywgYW5pbWF0aW9uTmFtZTogc3RyaW5nfVxyXG4gKiBpcyBzdXBwbGllZCBhcyBhbiBhcmd1bWVudCB0byBsaXN0ZW5lciBmdW5jdGlvbnMuXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbRVZFTlRTLmludGVycnVwdD1vbkludGVycnVwdEV2ZW50XSAtIE1lc3NhZ2UgdGhhdCBpcyBlbWl0dGVkXHJcbiAqIGlmIHRoZXJlIGlzIGEgY3VycmVudCBzcGVlY2ggaW4gcHJvZ3Jlc3MgYW5kIFtwbGF5XXtAbGluayBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjcGxheUFuaW1hdGlvbn1cclxuICogb3IgW3Jlc3VtZV17QGxpbmsgY29yZS9BbmltYXRpb25GZWF0dXJlI3Jlc3VtZUFuaW1hdGlvbn0gYXJlIGV4ZWN1dGVkIGZvciBhIG5ldyBzcGVlY2guXHJcbiAqIEFuIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIG5hbWUgb2YgdGhlIGxheWVyIGNvbnRhaW5zIHRoZSBhbmltYXRpb24gdGhhdCB3YXNcclxuICogaW50ZXJydXB0ZWQgYW5kIHRoZSBuYW1lIG9mIHRoZSBhbmltYXRpb24gdGhhdCB3YXMgaW50ZXJydXB0ZWQgd2l0aCB0aGUgc2lnbmF0dXJlXHJcbiAqIHtsYXllck5hbWU6IHN0cmluZywgYW5pbWF0aW9uTmFtZTogc3RyaW5nfSBpcyBzdXBwbGllZCBhcyBhbiBhcmd1bWVudCB0byBsaXN0ZW5lclxyXG4gKiBmdW5jdGlvbnMuXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbRVZFTlRTLnN0b3A9b25TdG9wRXZlbnRdIC0gTWVzc2FnZSB0aGF0IGlzIGVtaXR0ZWQgYWZ0ZXJcclxuICogZWFjaCBjYWxsIHRvIFtzdG9wXXtAbGluayBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjc3RvcEFuaW1hdGlvbn0gYW5kIHdoZW4gYSBzcGVlY2ggcmVhY2hlc1xyXG4gKiB0aGUgZW5kIG9mIHBsYXliYWNrLiBBbiBvYmplY3QgcmVwcmVzZW50aW5nXHJcbiAqIHRoZSBuYW1lIG9mIHRoZSBsYXllciBjb250YWlucyB0aGUgYW5pbWF0aW9uIHRoYXQgd2FzIHN0b3BwZWQgYW5kIHRoZSBuYW1lIG9mXHJcbiAqIHRoZSBhbmltYXRpb24gdGhhdCB3YXMgc3RvcHBlZCB3aXRoIHRoZSBzaWduYXR1cmUge2xheWVyTmFtZTogc3RyaW5nLCBhbmltYXRpb25OYW1lOiBzdHJpbmd9XHJcbiAqIGlzIHN1cHBsaWVkIGFzIGFuIGFyZ3VtZW50IHRvIGxpc3RlbmVyIGZ1bmN0aW9ucy5cclxuICovXHJcbmNsYXNzIEFuaW1hdGlvbkZlYXR1cmUgZXh0ZW5kcyBBYnN0cmFjdEhvc3RGZWF0dXJlIHtcclxuICAvKipcclxuICAgKiBAY29uc3RydWN0b3JcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7Y29yZS9Ib3N0T2JqZWN0fSBob3N0IC0gSG9zdCBvYmplY3QgdGhhdCBvd25zIHRoZSBmZWF0dXJlLlxyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKGhvc3QpIHtcclxuICAgIHN1cGVyKGhvc3QpO1xyXG5cclxuICAgIHRoaXMuX2xheWVycyA9IFtdO1xyXG4gICAgdGhpcy5fbGF5ZXJNYXAgPSB7fTtcclxuICAgIHRoaXMuX3BhdXNlZCA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWFrZSBzdXJlIGEgc3VwcGxpZWQgbGF5ZXIgaW5kZXggaXMgd2l0aGluIHRoZSByYW5nZSBvZiBsYXllcnMuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XHJcbiAgICogQHBhcmFtIHtib29sZWFufSBbZXhpc3Rpbmc9dHJ1ZV0gLSBXaGV0aGVyIHRoZSBpbmRleCByZXByZXNlbnRzIGFuZCBleGlzdGluZ1xyXG4gICAqIGxheWVyIG9yIGEgbmV3IGxheWVyIHRvIGJlIGFkZGVkLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge251bWJlcj19XHJcbiAgICovXHJcbiAgX3ZhbGlkYXRlSW5kZXgoaW5kZXgsIGV4aXN0aW5nID0gdHJ1ZSkge1xyXG4gICAgLy8gSW5kZXggaXMgaW52YWxpZCBpZiB0aGVyZSBhcmUgbm8gbGF5ZXJzIGFuZCB3ZSdyZSBjaGVja2luZyBmb3IgYW4gZXhpc3RpbmcgbGF5ZXIgaW5kZXhcclxuICAgIGlmICh0aGlzLl9sYXllcnMubGVuZ3RoID09PSAwICYmIGV4aXN0aW5nKSB7XHJcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgbGFzdEluZGV4ID0gZXhpc3RpbmcgPyB0aGlzLl9sYXllcnMubGVuZ3RoIC0gMSA6IHRoaXMuX2xheWVycy5sZW5ndGg7XHJcblxyXG4gICAgLy8gQ291bnQgZnJvbSB0aGUgZW5kIG9mIHRoZSBhcnJheSBmb3IgbmVnYXRpdmUgaW5kaWNlc1xyXG4gICAgaWYgKGluZGV4IDwgMCkge1xyXG4gICAgICBpbmRleCA9IGxhc3RJbmRleCArIGluZGV4ICsgMTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID4gbGFzdEluZGV4KSB7XHJcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gaW5kZXg7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZS1ldmFsdWF0ZSBpbnRlcm5hbCB3ZWlnaHQgdmFsdWVzIG9mIGxheWVycyBzdGFydGluZyBmcm9tIHRoZSB0b3Agb2YgdGhlXHJcbiAgICogc3RhY2suIE92ZXJyaWRlIGxheWVycycgd2VpZ2h0cyBhZmZlY3QgdGhlIHZhbHVlcyBvZiBhbGwgbGF5ZXJzIGxvd2VyIGluIHRoZVxyXG4gICAqIHN0YWNrLlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBfdXBkYXRlSW50ZXJuYWxXZWlnaHRzKCkge1xyXG4gICAgY29uc3QgbnVtTGF5ZXJzID0gdGhpcy5fbGF5ZXJzLmxlbmd0aDtcclxuICAgIGxldCB3ZWlnaHRNdWx0aXBsaWVyID0gMTtcclxuXHJcbiAgICAvLyBVcGRhdGUgaW50ZXJuYWwgd2VpZ2h0IHZhbHVlcyBvbiBsYXllcnMgaW4gcmV2ZXJzZSBvcmRlclxyXG4gICAgZm9yIChsZXQgaSA9IG51bUxheWVycyAtIDE7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgIGNvbnN0IGxheWVyID0gdGhpcy5fbGF5ZXJzW2ldO1xyXG4gICAgICBsYXllci51cGRhdGVJbnRlcm5hbFdlaWdodCh3ZWlnaHRNdWx0aXBsaWVyKTtcclxuXHJcbiAgICAgIC8vIElmIHRoZSBsYXllciBpcyBvdmVycmlkZSwgdXBkYXRlIHRoZSBtdWx0aXBsaWVyIHdpdGggdGhlIHJlbWFpbmRlciBvZiB0aGUgZnVsbCB3ZWlnaHRcclxuICAgICAgaWYgKGxheWVyLmJsZW5kTW9kZSA9PT0gTGF5ZXJCbGVuZE1vZGVzLk92ZXJyaWRlICYmIGxheWVyLmN1cnJlbnRTdGF0ZSkge1xyXG4gICAgICAgIHdlaWdodE11bHRpcGxpZXIgKj0gMSAtIGxheWVyLmN1cnJlbnRTdGF0ZS5pbnRlcm5hbFdlaWdodDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIGEgbmV3IGluc3RhbmNlIG9mIGEgU2luZ2xlU3RhdGUuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBPcHRpb25zIHRvIHBhc3MgdG8gdGhlIFNpbmdsZVN0YXRlIGNvbnN0cnVjdG9yLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nPX0gb3B0aW9ucy5uYW1lIC0gTmFtZSBmb3IgdGhlIGFuaW1hdGlvbiBzdGF0ZS4gTmFtZXMgbXVzdCBiZVxyXG4gICAqIHVuaXF1ZSBmb3IgdGhlIGxheWVyIHRoZSBzdGF0ZSBpcyBhcHBsaWVkIHRvLlxyXG4gICAqIEBwYXJhbSB7d2VpZ2h0fSBbb3B0aW9ucy53ZWlnaHQ9MF0gLSBUaGUgMC0xIGFtb3VudCBvZiBpbmZsdWVuY2UgdGhlIHN0YXRlIHdpbGwgaGF2ZS5cclxuICAgKiBAcGFyYW0ge3RpbWVTY2FsZX0gW29wdGlvbnMudGltZVNjYWxlPTFdIC0gRmFjdG9yIHRvIHNjYWxlIHRoZSBwbGF5YmFjayBzcGVlZCBvZiB0aGVcclxuICAgKiBhbmltYXRpb24uXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLmxvb3BDb3VudD1JbmZpbml0eV0gLSBOdW1iZXIgb2YgdGltZXMgdGhlIGFuaW1hdGlvbiBzaG91bGRcclxuICAgKiByZXBlYXQgYmVmb3JlIGZpbmlzaGluZy5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuYmxlbmRNb2RlPUxheWVyQmxlbmRNb2Rlc1tEZWZhdWx0TGF5ZXJCbGVuZE1vZGVdXSAtIFR5cGUgb2ZcclxuICAgKiBibGVuZGluZyB0aGUgYW5pbWF0aW9uIHNob3VsZCB1c2UuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7Y29yZS9TaW5nbGVTdGF0ZX1cclxuICAgKi9cclxuICBfY3JlYXRlU2luZ2xlU3RhdGUob3B0aW9ucykge1xyXG4gICAgcmV0dXJuIG5ldyBTaW5nbGVTdGF0ZShvcHRpb25zKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiBhIG5ldyBpbnN0YW5jZSBvZiBhIEZyZWVCbGVuZFN0YXRlLlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gT3B0aW9ucyB0byBwYXNzIHRvIHRoZSBGcmVlQmxlbmRTdGF0ZSBjb25zdHJ1Y3Rvci5cclxuICAgKiBAcGFyYW0ge3N0cmluZz19IG9wdGlvbnMubmFtZSAtIE5hbWUgZm9yIHRoZSBhbmltYXRpb24gc3RhdGUuIE5hbWVzIG11c3QgYmVcclxuICAgKiB1bmlxdWUgZm9yIHRoZSBsYXllciB0aGUgc3RhdGUgaXMgYXBwbGllZCB0by5cclxuICAgKiBAcGFyYW0ge3dlaWdodH0gW29wdGlvbnMud2VpZ2h0PTBdIC0gVGhlIDAtMSBhbW91bnQgb2YgaW5mbHVlbmNlIHRoZSBzdGF0ZSB3aWxsIGhhdmUuXHJcbiAgICogQHBhcmFtIHt0aW1lU2NhbGV9IFtvcHRpb25zLnRpbWVTY2FsZT0xXSAtIEZhY3RvciB0byBzY2FsZSB0aGUgcGxheWJhY2sgc3BlZWQgb2YgdGhlXHJcbiAgICogYW5pbWF0aW9uLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5sb29wQ291bnQ9SW5maW5pdHldIC0gTnVtYmVyIG9mIHRpbWVzIHRoZSBhbmltYXRpb24gc2hvdWxkXHJcbiAgICogcmVwZWF0IGJlZm9yZSBmaW5pc2hpbmcuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmJsZW5kTW9kZT1MYXllckJsZW5kTW9kZXNbRGVmYXVsdExheWVyQmxlbmRNb2RlXV0gLSBUeXBlIG9mXHJcbiAgICogYmxlbmRpbmcgdGhlIGFuaW1hdGlvbiBzaG91bGQgdXNlLlxyXG4gICAqIEBwYXJhbSB7QXJyYXkuPE9iamVjdD59IFtvcHRpb25zLmJsZW5kU3RhdGVPcHRpb25zXSAtIEFycmF5IG9mIG9wdGlvbnMgdXNlZCB0byBjcmVhdGUgdGhlXHJcbiAgICogYmxlbmQgc3RhdGVzIGZvciB0aGlzIGNvbnRhaW5lci5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtGcmVlQmxlbmRTdGF0ZX1cclxuICAgKi9cclxuICBfY3JlYXRlRnJlZUJsZW5kU3RhdGUob3B0aW9ucykge1xyXG4gICAgY29uc3Qge2JsZW5kU3RhdGVPcHRpb25zID0gW119ID0gb3B0aW9ucztcclxuXHJcbiAgICBjb25zdCBibGVuZFN0YXRlcyA9IFtdO1xyXG4gICAgYmxlbmRTdGF0ZU9wdGlvbnMuZm9yRWFjaChibGVuZE9wdGlvbnMgPT4ge1xyXG4gICAgICBibGVuZFN0YXRlcy5wdXNoKFxyXG4gICAgICAgIHRoaXMuX2NyZWF0ZVNpbmdsZVN0YXRlKHsuLi5ibGVuZE9wdGlvbnMsIGJsZW5kTW9kZTogb3B0aW9ucy5ibGVuZE1vZGV9KVxyXG4gICAgICApO1xyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIG5ldyBGcmVlQmxlbmRTdGF0ZShvcHRpb25zLCBibGVuZFN0YXRlcyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gYSBuZXcgaW5zdGFuY2Ugb2YgYSBRdWV1ZVN0YXRlLlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gT3B0aW9ucyB0byBwYXNzIHRvIHRoZSBRdWV1ZVN0YXRlIGNvbnN0cnVjdG9yLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nPX0gb3B0aW9ucy5uYW1lIC0gTmFtZSBmb3IgdGhlIGFuaW1hdGlvbiBzdGF0ZS4gTmFtZXMgbXVzdCBiZVxyXG4gICAqIHVuaXF1ZSBmb3IgdGhlIGxheWVyIHRoZSBzdGF0ZSBpcyBhcHBsaWVkIHRvLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy53ZWlnaHQ9MF0gLSBUaGUgMC0xIGFtb3VudCBvZiBpbmZsdWVuY2UgdGhlIHN0YXRlIHdpbGwgaGF2ZS5cclxuICAgKiBAcGFyYW0ge251bWJlcj19IG9wdGlvbnMudHJhbnNpdGlvblRpbWUgLSBUaGUgYW1vdW50IG9mIHRpbWUgaXQgdGFrZXMgdG8gdHJhbnNpdGlvblxyXG4gICAqIGJldHdlZW4gcXVldWVkIHN0YXRlcy5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuYmxlbmRNb2RlPUxheWVyQmxlbmRNb2Rlc1tEZWZhdWx0TGF5ZXJCbGVuZE1vZGVdXSAtIFR5cGUgb2ZcclxuICAgKiBibGVuZGluZyB0aGUgYW5pbWF0aW9uIHNob3VsZCB1c2UuXHJcbiAgICogQHBhcmFtIHtBcnJheS48T2JqZWN0Pn0gW29wdGlvbnMucXVldWVPcHRpb25zXSAtIEFycmF5IG9mIG9wdGlvbnMgdXNlZCB0byBjcmVhdGUgdGhlXHJcbiAgICogcXVldWUgc3RhdGVzIGZvciB0aGlzIGNvbnRhaW5lci5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtRdWV1ZVN0YXRlfVxyXG4gICAqL1xyXG4gIF9jcmVhdGVRdWV1ZVN0YXRlKG9wdGlvbnMpIHtcclxuICAgIGNvbnN0IHtxdWV1ZU9wdGlvbnMgPSBbXX0gPSBvcHRpb25zO1xyXG5cclxuICAgIGNvbnN0IHF1ZXVlU3RhdGVzID0gcXVldWVPcHRpb25zLm1hcChxdWV1ZU9wdGlvbiA9PlxyXG4gICAgICB0aGlzLl9jcmVhdGVTaW5nbGVTdGF0ZSh7XHJcbiAgICAgICAgdHJhbnNpdGlvblRpbWU6IG9wdGlvbnMudHJhbnNpdGlvblRpbWUsXHJcbiAgICAgICAgLi4ucXVldWVPcHRpb24sXHJcbiAgICAgICAgYmxlbmRNb2RlOiBvcHRpb25zLmJsZW5kTW9kZSxcclxuICAgICAgfSlcclxuICAgICk7XHJcblxyXG4gICAgcmV0dXJuIG5ldyBRdWV1ZVN0YXRlKG9wdGlvbnMsIHF1ZXVlU3RhdGVzKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiBhIG5ldyBpbnN0YW5jZSBvZiBhIEJsZW5kMWRTdGF0ZS5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gcGFzcyB0byB0aGUgQmxlbmQxZFN0YXRlIGNvbnN0cnVjdG9yLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nPX0gb3B0aW9ucy5uYW1lIC0gTmFtZSBmb3IgdGhlIGFuaW1hdGlvbiBzdGF0ZS4gTmFtZXMgbXVzdCBiZVxyXG4gICAqIHVuaXF1ZSBmb3IgdGhlIGxheWVyIHRoZSBzdGF0ZSBpcyBhcHBsaWVkIHRvLlxyXG4gICAqIEBwYXJhbSB7d2VpZ2h0fSBbb3B0aW9ucy53ZWlnaHQ9MF0gLSBUaGUgMC0xIGFtb3VudCBvZiBpbmZsdWVuY2UgdGhlIHN0YXRlIHdpbGwgaGF2ZS5cclxuICAgKiBAcGFyYW0ge3RpbWVTY2FsZX0gW29wdGlvbnMudGltZVNjYWxlPTFdIC0gRmFjdG9yIHRvIHNjYWxlIHRoZSBwbGF5YmFjayBzcGVlZCBvZiB0aGVcclxuICAgKiBhbmltYXRpb24uXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLmxvb3BDb3VudD1JbmZpbml0eV0gLSBOdW1iZXIgb2YgdGltZXMgdGhlIGFuaW1hdGlvbiBzaG91bGRcclxuICAgKiByZXBlYXQgYmVmb3JlIGZpbmlzaGluZy5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuYmxlbmRNb2RlPUxheWVyQmxlbmRNb2Rlc1tEZWZhdWx0TGF5ZXJCbGVuZE1vZGVdXSAtIFR5cGUgb2ZcclxuICAgKiBibGVuZGluZyB0aGUgYW5pbWF0aW9uIHNob3VsZCB1c2UuXHJcbiAgICogQHBhcmFtIHtBcnJheS48T2JqZWN0Pn0gW29wdGlvbnMuYmxlbmRTdGF0ZU9wdGlvbnNdIC0gQXJyYXkgb2Ygb3B0aW9ucyB1c2VkIHRvIGNyZWF0ZSB0aGVcclxuICAgKiBibGVuZCBzdGF0ZXMgZm9yIHRoaXMgY29udGFpbmVyLlxyXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IFtvcHRpb25zLmJsZW5kVGhyZXNob2xkc10gLSBBcnJheSBvZiBudW1iZXJzIHVzZWQgdG8gc2V0IHRoZVxyXG4gICAqIHRocmVzaG9sZHMgZm9yIGVhY2ggYmxlbmQgc3RhdGUgaW4gdGhpcyBjb250YWluZXIuXHJcbiAgICogQHBhcmFtIHtBcnJheS48Ym9vbGVhbj59IFtvcHRpb25zLmJsZW5kTWF0Y2hQaGFzZXM9W11dIC0gT3B0aW9uYWwgYXJyYXkgb2YgYm9vbGVhbnMgdXNlZCB0b1xyXG4gICAqIHNldCB3aGV0aGVyIG9yIG5vdCBlYWNoIGJsZW5kIHN0YXRlIGluIHRoaXMgY29udGFpbmVyIHdpbGwgbWF0Y2ggcGhhc2VzLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0JsZW5kMWRTdGF0ZX1cclxuICAgKi9cclxuICBfY3JlYXRlQmxlbmQxZFN0YXRlKG9wdGlvbnMpIHtcclxuICAgIGNvbnN0IHtibGVuZFN0YXRlT3B0aW9ucyA9IFtdfSA9IG9wdGlvbnM7XHJcbiAgICBjb25zdCB7YmxlbmRUaHJlc2hvbGRzID0gW119ID0gb3B0aW9ucztcclxuICAgIGNvbnN0IHtibGVuZE1hdGNoUGhhc2VzID0gW119ID0gb3B0aW9ucztcclxuXHJcbiAgICBjb25zdCBibGVuZFN0YXRlcyA9IFtdO1xyXG4gICAgYmxlbmRTdGF0ZU9wdGlvbnMuZm9yRWFjaChibGVuZE9wdGlvbnMgPT4ge1xyXG4gICAgICBibGVuZFN0YXRlcy5wdXNoKFxyXG4gICAgICAgIHRoaXMuX2NyZWF0ZVNpbmdsZVN0YXRlKHsuLi5ibGVuZE9wdGlvbnMsIGJsZW5kTW9kZTogb3B0aW9ucy5ibGVuZE1vZGV9KVxyXG4gICAgICApO1xyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIG5ldyBCbGVuZDFkU3RhdGUoXHJcbiAgICAgIG9wdGlvbnMsXHJcbiAgICAgIGJsZW5kU3RhdGVzLFxyXG4gICAgICBibGVuZFRocmVzaG9sZHMsXHJcbiAgICAgIGJsZW5kTWF0Y2hQaGFzZXNcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gYSBuZXcgaW5zdGFuY2Ugb2YgYSBCbGVuZDJkU3RhdGUuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBPcHRpb25zIHRvIHBhc3MgdG8gdGhlIEJsZW5kMWRTdGF0ZSBjb25zdHJ1Y3Rvci5cclxuICAgKiBAcGFyYW0ge3N0cmluZz19IG9wdGlvbnMubmFtZSAtIE5hbWUgZm9yIHRoZSBhbmltYXRpb24gc3RhdGUuIE5hbWVzIG11c3QgYmVcclxuICAgKiB1bmlxdWUgZm9yIHRoZSBsYXllciB0aGUgc3RhdGUgaXMgYXBwbGllZCB0by5cclxuICAgKiBAcGFyYW0ge3dlaWdodH0gW29wdGlvbnMud2VpZ2h0PTBdIC0gVGhlIDAtMSBhbW91bnQgb2YgaW5mbHVlbmNlIHRoZSBzdGF0ZSB3aWxsIGhhdmUuXHJcbiAgICogQHBhcmFtIHt0aW1lU2NhbGV9IFtvcHRpb25zLnRpbWVTY2FsZT0xXSAtIEZhY3RvciB0byBzY2FsZSB0aGUgcGxheWJhY2sgc3BlZWQgb2YgdGhlXHJcbiAgICogYW5pbWF0aW9uLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5sb29wQ291bnQ9SW5maW5pdHldIC0gTnVtYmVyIG9mIHRpbWVzIHRoZSBhbmltYXRpb24gc2hvdWxkXHJcbiAgICogcmVwZWF0IGJlZm9yZSBmaW5pc2hpbmcuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmJsZW5kTW9kZT1MYXllckJsZW5kTW9kZXNbRGVmYXVsdExheWVyQmxlbmRNb2RlXV0gLSBUeXBlIG9mXHJcbiAgICogYmxlbmRpbmcgdGhlIGFuaW1hdGlvbiBzaG91bGQgdXNlLlxyXG4gICAqIEBwYXJhbSB7QXJyYXkuPE9iamVjdD59IFtvcHRpb25zLmJsZW5kU3RhdGVPcHRpb25zXSAtIEFycmF5IG9mIG9wdGlvbnMgdXNlZCB0byBjcmVhdGUgdGhlXHJcbiAgICogYmxlbmQgc3RhdGVzIGZvciB0aGlzIGNvbnRhaW5lci5cclxuICAgKiBAcGFyYW0ge0FycmF5LjxBcnJheS48bnVtYmVyPj59IFtvcHRpb25zLmJsZW5kVGhyZXNob2xkc10gLSBBcnJheSBvZiBBcnJheSBvZiBudW1iZXJzIHVzZWQgdG8gc2V0IHRoZVxyXG4gICAqIHRocmVzaG9sZHMgZm9yIGVhY2ggYmxlbmQgc3RhdGUgaW4gdGhpcyBjb250YWluZXIuXHJcbiAgICogQHBhcmFtIHtBcnJheS48Ym9vbGVhbj59IFtvcHRpb25zLmJsZW5kTWF0Y2hQaGFzZXM9W11dIC0gT3B0aW9uYWwgYXJyYXkgb2YgYm9vbGVhbnMgdXNlZCB0b1xyXG4gICAqIHNldCB3aGV0aGVyIG9yIG5vdCBlYWNoIGJsZW5kIHN0YXRlIGluIHRoaXMgY29udGFpbmVyIHdpbGwgbWF0Y2ggcGhhc2VzLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0JsZW5kMWRTdGF0ZX1cclxuICAgKi9cclxuICBfY3JlYXRlQmxlbmQyZFN0YXRlKG9wdGlvbnMpIHtcclxuICAgIGNvbnN0IHtibGVuZFN0YXRlT3B0aW9ucyA9IFtdfSA9IG9wdGlvbnM7XHJcbiAgICBjb25zdCB7YmxlbmRUaHJlc2hvbGRzID0gW119ID0gb3B0aW9ucztcclxuICAgIGNvbnN0IHtibGVuZE1hdGNoUGhhc2VzID0gW119ID0gb3B0aW9ucztcclxuXHJcbiAgICBjb25zdCBibGVuZFN0YXRlcyA9IFtdO1xyXG4gICAgYmxlbmRTdGF0ZU9wdGlvbnMuZm9yRWFjaChibGVuZE9wdGlvbnMgPT4ge1xyXG4gICAgICBibGVuZFN0YXRlcy5wdXNoKFxyXG4gICAgICAgIHRoaXMuX2NyZWF0ZVNpbmdsZVN0YXRlKHsuLi5ibGVuZE9wdGlvbnMsIGJsZW5kTW9kZTogb3B0aW9ucy5ibGVuZE1vZGV9KVxyXG4gICAgICApO1xyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIG5ldyBCbGVuZDJkU3RhdGUoXHJcbiAgICAgIG9wdGlvbnMsXHJcbiAgICAgIGJsZW5kU3RhdGVzLFxyXG4gICAgICBibGVuZFRocmVzaG9sZHMsXHJcbiAgICAgIGJsZW5kTWF0Y2hQaGFzZXNcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gYSBuZXcgaW5zdGFuY2Ugb2YgYSBSYW5kb21BbmltYXRpb25TdGF0ZS5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gcGFzcyB0byB0aGUgUmFuZG9tQW5pbWF0aW9uU3RhdGUgY29uc3RydWN0b3IuXHJcbiAgICogQHBhcmFtIHtzdHJpbmc9fSBvcHRpb25zLm5hbWUgLSBOYW1lIGZvciB0aGUgYW5pbWF0aW9uIHN0YXRlLiBOYW1lcyBtdXN0IGJlXHJcbiAgICogdW5pcXVlIGZvciB0aGUgbGF5ZXIgdGhlIHN0YXRlIGlzIGFwcGxpZWQgdG8uXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLnBsYXlJbnRlcnZhbD0zXSAtIFRoZSBiYXNlIGFuaW1hdGlvbiBwbGF5YmFjayBpbnRlcnZhbC5cclxuICAgKiBAcGFyYW0ge0FycmF5LjxPYmplY3Q+fSBbb3B0aW9ucy5zdWJTdGF0ZU9wdGlvbnNdIC0gQXJyYXkgb2Ygb3B0aW9ucyB1c2VkIHRvIGNyZWF0ZSB0aGVcclxuICAgKiBzdWIgc3RhdGVzIGZvciB0aGlzIGNvbnRhaW5lci5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtSYW5kb21BbmltYXRpb25TdGF0ZX1cclxuICAgKi9cclxuICBfY3JlYXRlUmFuZG9tQW5pbWF0aW9uU3RhdGUob3B0aW9ucykge1xyXG4gICAgY29uc3Qge3N1YlN0YXRlT3B0aW9ucyA9IFtdfSA9IG9wdGlvbnM7XHJcblxyXG4gICAgY29uc3Qgc3ViU3RhdGVzID0gW107XHJcbiAgICBzdWJTdGF0ZU9wdGlvbnMuZm9yRWFjaChzdWJTdGF0ZU9wdGlvbnMgPT4ge1xyXG4gICAgICBzdWJTdGF0ZXMucHVzaChcclxuICAgICAgICB0aGlzLl9jcmVhdGVTaW5nbGVTdGF0ZSh7XHJcbiAgICAgICAgICAuLi5zdWJTdGF0ZU9wdGlvbnMsXHJcbiAgICAgICAgICBibGVuZE1vZGU6IG9wdGlvbnMuYmxlbmRNb2RlLFxyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gbmV3IFJhbmRvbUFuaW1hdGlvblN0YXRlKG9wdGlvbnMsIHN1YlN0YXRlcyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNYWtlIHN1cmUgdGhlIGxheWVyIHdpdGggdGhlIGdpdmVuIG5hbWUgZXhpc3RzIGFuZCByZXR1cm4gYSB1bmlxdWUgdmVyc2lvblxyXG4gICAqIG9mIHRoZSBhbmltYXRpb24gbmFtZSBzdXBwbGllZCBmb3IgdGhhdCBsYXllci5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGF5ZXJOYW1lIC0gTmFtZSBvZiB0aGUgbGF5ZXIgdG8gY2hlY2sgYWdhaW5zdC5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gYW5pbWF0aW9uTmFtZSAtIE5hbWUgb2YgdGhlIGFuaW1hdGlvbiB0byB2YWxpZGF0ZS5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IFZhbGlkYXRlZCBhbmltYXRpb24gbmFtZS5cclxuICAgKi9cclxuICBfdmFsaWRhdGVOZXdBbmltYXRpb24obGF5ZXJOYW1lLCBhbmltYXRpb25OYW1lKSB7XHJcbiAgICAvLyBNYWtlIHN1cmUgdGhlIGxheWVyTmFtZSBpcyB2YWxpZFxyXG4gICAgY29uc3QgbGF5ZXIgPSB0aGlzLl9sYXllck1hcFtsYXllck5hbWVdO1xyXG5cclxuICAgIGlmIChsYXllciA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgQ2Fubm90IGFkZCBhbmltYXRpb24gdG8gbGF5ZXIgJHtsYXllck5hbWV9IGZyb20gaG9zdCAke3RoaXMuX2hvc3QuaWR9LiBObyBsYXllciBleGlzdHMgd2l0aCB0aGlzIG5hbWUuYFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIE1ha2Ugc3VyZSB0aGUgYW5pbWF0aW9uTmFtZSBpcyB1bmlxdWVcclxuICAgIGNvbnN0IG5hbWUgPSBVdGlscy5nZXRVbmlxdWVOYW1lKGFuaW1hdGlvbk5hbWUsIGxheWVyLmdldFN0YXRlTmFtZXMoKSk7XHJcblxyXG4gICAgaWYgKG5hbWUgIT09IGFuaW1hdGlvbk5hbWUpIHtcclxuICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgIGBBbmltYXRpb24gbmFtZSAke2FuaW1hdGlvbk5hbWV9IGlzIG5vdCB1bmlxdWUgZm9yIGxheWVyICR7bGF5ZXIubmFtZX0uIEFuaW1hdGlvbiB3aWxsIGJlIHJlbmFtZWQgdG8gJHtuYW1lfS5gXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG5hbWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHdoZXRoZXIgb3Igbm90IGFsbCBhbmltYXRpb25zIGFyZSBwYXVzZWQuXHJcbiAgICpcclxuICAgKiBAcmVhZG9ubHlcclxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgKi9cclxuICBnZXQgcGF1c2VkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3BhdXNlZDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgYW4gYXJyYXkgb2YgbmFtZXMgb2YgYW5pbWF0aW9uIGxheWVycy5cclxuICAgKlxyXG4gICAqIEByZWFkb25seVxyXG4gICAqIEB0eXBlIHtBcnJheS48c3RyaW5nPn1cclxuICAgKi9cclxuICBnZXQgbGF5ZXJzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2xheWVycy5tYXAobGF5ZXIgPT4gbGF5ZXIubmFtZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGUgYW5kIHN0b3JlIGEgbmV3IGFuaW1hdGlvbiBsYXllci5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbbmFtZT0nTmV3TGF5ZXInXSAtIE5hbWUgZm9yIHRoZSBsYXllci5cclxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIC0gT3B0aW9ucyB0byBwYXNzIHRvIHtAbGluayBBbmltYXRpb25MYXllciNjb25zdHJ1Y3Rvcn1cclxuICAgKiBAcGFyYW0ge2luZGV4PX0gaW5kZXggLSBJbmRleCB0byBpbnNlcnQgdGhlIG5ldyBsYXllciBhdC4gSWYgbm9uZSBpcyBwcm92aWRlZFxyXG4gICAqIGl0IHdpbGwgYmUgYWRkZWQgdG8gdGhlIGVuZCBvZiB0aGUgc3RhY2suXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBJbmRleCBvZiB0aGUgbmV3IGxheWVyLlxyXG4gICAqL1xyXG4gIGFkZExheWVyKG5hbWUgPSAnTmV3TGF5ZXInLCBvcHRpb25zID0ge30sIGluZGV4KSB7XHJcbiAgICBjb25zdCBudW1MYXllcnMgPSB0aGlzLl9sYXllcnMubGVuZ3RoO1xyXG4gICAgbGV0IGxheWVySW5kZXggPSBpbmRleDtcclxuXHJcbiAgICAvLyBNYWtlIHN1cmUgdGhlIGdpdmVuIGluZGV4IGlzIHdpdGhpbiB0aGUgcmFuZ2Ugb2YgbGF5ZXJzXHJcbiAgICBpZiAoaW5kZXggPT09IHVuZGVmaW5lZCB8fCBpbmRleCA9PT0gLTEpIHtcclxuICAgICAgbGF5ZXJJbmRleCA9IHRoaXMuX2xheWVycy5sZW5ndGg7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBsYXllckluZGV4ID0gdGhpcy5fdmFsaWRhdGVJbmRleChpbmRleCwgZmFsc2UpO1xyXG5cclxuICAgICAgaWYgKGxheWVySW5kZXggPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIC8vIEluc2VydCBhdCB0aGUgYmVnaW5uaW5nIGlmIHRoZSB1c2VyIHBhc3NlZCBpbiBhIG5lZ2F0aXZlIGluZGV4XHJcbiAgICAgICAgaWYgKGluZGV4IDwgMCkge1xyXG4gICAgICAgICAgbGF5ZXJJbmRleCA9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIE90aGVyd2lzZSBhcHBlbmQgdG8gdGhlIGVuZFxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgbGF5ZXJJbmRleCA9IHRoaXMuX2xheWVycy5sZW5ndGg7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zb2xlLndhcm4oXHJcbiAgICAgICAgICBgSW5kZXggJHtpbmRleH0gaXMgaW52YWxpZCBmb3IgaG9zdCAke3RoaXMuX2hvc3QuaWR9LiBOZXcgbGF5ZXIgd2lsbCBiZSBhZGRlZCBhdCB0aGUgY2xvc2VzdCB2YWxpZCBpbmRleDogJHtsYXllckluZGV4fS5gXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIE1ha2Ugc3VyZSB0aGUgbGF5ZXIgbmFtZSBpcyB1bmlxdWVcclxuICAgIGNvbnN0IGxheWVyTmFtZSA9IFV0aWxzLmdldFVuaXF1ZU5hbWUobmFtZSwgT2JqZWN0LmtleXModGhpcy5fbGF5ZXJNYXApKTtcclxuXHJcbiAgICBpZiAobmFtZSAhPT0gbGF5ZXJOYW1lKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICBgTGF5ZXIgbmFtZSAke25hbWV9IGlzIG5vdCB1bmlxdWUuIE5ldyBsYXllciB3aWxsIGJlIGFkZGVkIHdpdGggdGhlIG5hbWUgJHtsYXllck5hbWV9LmBcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBsYXllciA9IG5ldyBBbmltYXRpb25MYXllcih7Li4ub3B0aW9ucywgbmFtZTogbGF5ZXJOYW1lfSk7XHJcbiAgICB0aGlzLl9sYXllck1hcFtsYXllck5hbWVdID0gbGF5ZXI7XHJcblxyXG4gICAgaWYgKGxheWVySW5kZXggPT09IG51bUxheWVycykge1xyXG4gICAgICB0aGlzLl9sYXllcnMucHVzaChsYXllcik7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9sYXllcnMuc3BsaWNlKGxheWVySW5kZXgsIDAsIGxheWVyKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBOb3RpZnkgdGhhdCBhIGxheWVyIGhhcyBiZWVuIGFkZGVkIHRvIHRoZSBmZWF0dXJlXHJcbiAgICBjb25zdCBldmVudERhdGEgPSB7bmFtZTogbGF5ZXJOYW1lLCBpbmRleDogbGF5ZXJJbmRleH07XHJcbiAgICB0aGlzLmVtaXQodGhpcy5jb25zdHJ1Y3Rvci5FVkVOVFMuYWRkTGF5ZXIsIGV2ZW50RGF0YSk7XHJcblxyXG4gICAgcmV0dXJuIGV2ZW50RGF0YTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlbW92ZSBhbiBhbmltYXRpb24gbGF5ZXIgZnJvbSB0aGUgc3RhY2suIEFuaW1hdGlvbnMgb24gdGhpcyBsYXllciB3aWxsIG5vXHJcbiAgICogbG9uZ2VyIGJlIGV2YWx1YXRlZC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gTmFtZSBmb3IgdGhlIGxheWVyIHRvIHJlbW92ZS5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBXaGV0aGVyIG9yIG5vdCByZW1vdmFsIHdhcyBzdWNjZXNzZnVsLlxyXG4gICAqL1xyXG4gIHJlbW92ZUxheWVyKG5hbWUpIHtcclxuICAgIGNvbnN0IGxheWVyID0gdGhpcy5fbGF5ZXJNYXBbbmFtZV07XHJcblxyXG4gICAgaWYgKGxheWVyID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgIGBEaWQgbm90IHJlbW92ZSBsYXllciAke25hbWV9IGZyb20gaG9zdCAke3RoaXMuX2hvc3QuaWR9LiBObyBsYXllciBleGlzdHMgd2l0aCB0aGlzIG5hbWUuYFxyXG4gICAgICApO1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgbGF5ZXIuZGlzY2FyZCgpO1xyXG5cclxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fbGF5ZXJzLmluZGV4T2YobGF5ZXIpO1xyXG4gICAgdGhpcy5fbGF5ZXJzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICBkZWxldGUgdGhpcy5fbGF5ZXJNYXBbbmFtZV07XHJcblxyXG4gICAgLy8gTm90aWZ5IHRoYXQgYSBsYXllciBoYXMgYmVlbiByZW1vdmVkIGZyb20gdGhlIGZlYXR1cmVcclxuICAgIHRoaXMuZW1pdCh0aGlzLmNvbnN0cnVjdG9yLkVWRU5UUy5yZW1vdmVMYXllciwge25hbWUsIGluZGV4fSk7XHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZS1vcmRlciB0aGUgbGF5ZXIgc3RhY2sgc28gdGhhdCB0aGUgbGF5ZXIgd2l0aCB0aGUgZ2l2ZW4gbmFtZSBpcyBwb3NpdGlvbmVkXHJcbiAgICogYXQgdGhlIGdpdmVuIGluZGV4LlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBOYW1lIG9mIHRoZSBsYXllciB0byBtb3ZlLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleCAtIE5ldyBpbmRleCB0byBwb3NpdGlvbiB0aGUgbGF5ZXIgYXQuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBUaGUgbmV3IGluZGV4IG9mIHRoZSBsYXllclxyXG4gICAqL1xyXG4gIG1vdmVMYXllcihuYW1lLCBpbmRleCkge1xyXG4gICAgLy8gTWFrZSBzdXJlIHRoZSBuYW1lIGlzIHZhbGlkXHJcbiAgICBjb25zdCBsYXllciA9IHRoaXMuX2xheWVyTWFwW25hbWVdO1xyXG5cclxuICAgIGlmIChsYXllciA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgQ2Fubm90IG1vdmUgbGF5ZXIgJHtuYW1lfSBmcm9tIGhvc3QgJHt0aGlzLl9ob3N0LmlkfS4gTm8gbGF5ZXIgZXhpc3RzIHdpdGggdGhpcyBuYW1lLmBcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBNYWtlIHN1cmUgdGhlIGluZGV4IGZhbGxzIGluIHRoZSByYW5nZSBvZiBleGlzdGluZyBsYXllcnNcclxuICAgIGNvbnN0IGxheWVySW5kZXggPSB0aGlzLl92YWxpZGF0ZUluZGV4KGluZGV4LCB0cnVlKTtcclxuICAgIGNvbnN0IGxhc3RJbmRleCA9IHRoaXMuX2xheWVycy5sZW5ndGggLSAxO1xyXG5cclxuICAgIGlmIChsYXllckluZGV4ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgIGBDYW5ub3QgbW92ZSBsYXllciAke25hbWV9IGZyb20gaG9zdCAke3RoaXMuX2hvc3QuaWR9IHRvIGluZGV4ICR7aW5kZXh9LiBJbmRleCBtdXN0IGJlIGluIHRoZSAwIC0gJHtsYXN0SW5kZXh9IHJhbmdlLmBcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBjdXJyZW50SW5kZXggPSB0aGlzLl9sYXllcnMuaW5kZXhPZihsYXllcik7XHJcbiAgICBpZiAoY3VycmVudEluZGV4ID09PSBsYXllckluZGV4KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBSZW1vdmUgZnJvbSB0aGUgY3VycmVudCBwb3NpdGlvblxyXG4gICAgdGhpcy5fbGF5ZXJzLnNwbGljZShjdXJyZW50SW5kZXgsIDEpO1xyXG5cclxuICAgIC8vIEluc2VydCBhdCB0aGUgbmV3IHBvc2l0aW9uXHJcbiAgICBpZiAobGF5ZXJJbmRleCA9PT0gbGFzdEluZGV4KSB7XHJcbiAgICAgIHRoaXMuX2xheWVycy5wdXNoKGxheWVyKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2xheWVycy5zcGxpY2UobGF5ZXJJbmRleCwgMCwgbGF5ZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBsYXllckluZGV4O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlIHRoZSBuYW1lIG9mIGEgbGF5ZXIuIE5hbWVzIG11c3QgYmUgdW5pcXVlLCBpZiB0aGUgbmV3IG5hbWUgaXMgbm90XHJcbiAgICogdW5pcXVlIGl0IHdpbGwgaGF2ZSB0cmFpbGluZyBudW1iZXJzIGFwcGVuZGVkIHVudGlsIGl0IGlzIHVuaXF1ZS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjdXJyZW50TmFtZSAtIEN1cnJlbnQgbmFtZSBvZiB0aGUgbGF5ZXIuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5ld05hbWUgLSBOZXcgbmFtZSB0byBzZXQgb24gdGhlIGxheWVyLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge3N0cmluZ30gVGhlIG5ldyBuYW1lIG9mIHRoZSBsYXllclxyXG4gICAqL1xyXG4gIHJlbmFtZUxheWVyKGN1cnJlbnROYW1lLCBuZXdOYW1lKSB7XHJcbiAgICAvLyBNYWtlIHN1cmUgdGhlIG5hbWUgaXMgdmFsaWRcclxuICAgIGNvbnN0IGxheWVyID0gdGhpcy5fbGF5ZXJNYXBbY3VycmVudE5hbWVdO1xyXG5cclxuICAgIGlmIChsYXllciA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgQ2Fubm90IHJlbmFtZSBsYXllciAke2N1cnJlbnROYW1lfSBmcm9tIGhvc3QgJHt0aGlzLl9ob3N0LmlkfS4gTm8gbGF5ZXIgZXhpc3RzIHdpdGggdGhpcyBuYW1lLmBcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBNYWtlIHN1cmUgdGhlIGxheWVyIG5hbWUgaXMgdW5pcXVlXHJcbiAgICBjb25zdCBuYW1lID0gVXRpbHMuZ2V0VW5pcXVlTmFtZShuZXdOYW1lLCBPYmplY3Qua2V5cyh0aGlzLl9sYXllck1hcCkpO1xyXG5cclxuICAgIGlmIChuYW1lICE9PSBuZXdOYW1lKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICBgTGF5ZXIgbmFtZSAke25ld05hbWV9IGlzIG5vdCB1bmlxdWUuIExheWVyIHdpbGwgYmUgcmVuYW1lZCB0byAke25hbWV9LmBcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBkZWxldGUgdGhpcy5fbGF5ZXJNYXBbY3VycmVudE5hbWVdO1xyXG4gICAgdGhpcy5fbGF5ZXJNYXBbbmFtZV0gPSBsYXllcjtcclxuICAgIGxheWVyLm5hbWUgPSBuYW1lO1xyXG5cclxuICAgIC8vIE5vdGlmeSB0aGF0IGEgbGF5ZXIgaGFzIGJlZW4gcmVuYW1lZCBvbiB0aGUgZmVhdHVyZVxyXG4gICAgdGhpcy5lbWl0KHRoaXMuY29uc3RydWN0b3IuRVZFTlRTLnJlbmFtZUxheWVyLCB7XHJcbiAgICAgIG9sZE5hbWU6IGN1cnJlbnROYW1lLFxyXG4gICAgICBuZXdOYW1lOiBuYW1lLFxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIG5hbWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gdGhlIHdlaWdodCBvZiBhbiBhbmltYXRpb24gbGF5ZXIuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRvIHJldHVybiB3ZWlnaHQgZnJvbS5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XHJcbiAgICovXHJcbiAgZ2V0TGF5ZXJXZWlnaHQobmFtZSkge1xyXG4gICAgLy8gTWFrZSBzdXJlIHRoZSBuYW1lIGlzIHZhbGlkXHJcbiAgICBjb25zdCBsYXllciA9IHRoaXMuX2xheWVyTWFwW25hbWVdO1xyXG5cclxuICAgIGlmIChsYXllciA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgQ2Fubm90IGdldCB3ZWlnaHQgb24gbGF5ZXIgJHtuYW1lfSBmcm9tIGhvc3QgJHt0aGlzLl9ob3N0LmlkfS4gTm8gbGF5ZXIgZXhpc3RzIHdpdGggdGhpcyBuYW1lLmBcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbGF5ZXIud2VpZ2h0O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlIHRoZSB3ZWlnaHQgb2YgYW4gYW5pbWF0aW9uIGxheWVyLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgbGF5ZXIgdG8gdXBkYXRlLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB3ZWlnaHQgLSBUaGUgd2VpZ2h0IHZhbHVlIHRvIHNldCBvbiB0aGUgbGF5ZXIuIFRoaXMgbnVtYmVyXHJcbiAgICogc2hvdWxkIGJlIGluIHRoZSAwLTEgcmFuZ2UuXHJcbiAgICogQHBhcmFtIHtudW1iZXI9fSBzZWNvbmRzIC0gVGhlIG51bWJlciBvZiBzZWNvbmRzIGl0IHNob3VsZCB0YWtlIHRvIHJlYWNoIHRoZVxyXG4gICAqIG5ldyB3ZWlnaHQuIERlZmF1bHQgaXMgemVybyBhbmQgd2lsbCBzZXQgaW1tZWRpYXRlbHkuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IGVhc2luZ0ZuIC0gVGhlIGVhc2luZyBmdW5jdGlvbiB0byB1c2Ugd2hpbGUgaW50ZXJwb2xhdGluZ1xyXG4gICAqIHRoZSB3ZWlnaHQuIERlZmF1bHQgaXMgRWFzaW5nLkxpbmVhci5Jbk91dC5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtEZWZlcnJlZH0gQSBwcm9taXNlIHRoYXQgd2lsbCByZXNvbHZlIG9uY2UgdGhlIGxheWVyJ3Mgd2VpZ2h0IHJlYWNoZXNcclxuICAgKiB0aGUgdGFyZ2V0IHZhbHVlLlxyXG4gICAqL1xyXG4gIHNldExheWVyV2VpZ2h0KG5hbWUsIHdlaWdodCwgc2Vjb25kcywgZWFzaW5nRm4pIHtcclxuICAgIC8vIE1ha2Ugc3VyZSB0aGUgbmFtZSBpcyB2YWxpZFxyXG4gICAgY29uc3QgbGF5ZXIgPSB0aGlzLl9sYXllck1hcFtuYW1lXTtcclxuXHJcbiAgICBpZiAobGF5ZXIgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBjb25zdCBlID0gYENhbm5vdCBzZXQgd2VpZ2h0IG9uIGxheWVyICR7bmFtZX0gZnJvbSBob3N0ICR7dGhpcy5faG9zdC5pZH0uIE5vIGxheWVyIGV4aXN0cyB3aXRoIHRoaXMgbmFtZS5gO1xyXG4gICAgICByZXR1cm4gRGVmZXJyZWQucmVqZWN0KGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBsYXllci5zZXRXZWlnaHQod2VpZ2h0LCBzZWNvbmRzLCBlYXNpbmdGbik7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSBuYW1lcyBvZiBibGVuZCBzdGF0ZXMgaW4gYW4gYW5pbWF0aW9uIGluIGEgbGF5ZXIuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGF5ZXJOYW1lIC0gTmFtZSBvZiB0aGUgbGF5ZXIgY29udGFpbmluZyB0aGUgYW5pbWF0aW9uIGNvbnRhaW5pbmdcclxuICAgKiB0aGUgYmxlbmQgc3RhdGUgdG8gdXBkYXRlLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhbmltYXRpb25OYW1lIC0gTmFtZSBvZiB0aGUgYW5pbWF0aW9uIGNvbnRhaW5pbmcgdGhlIGJsZW5kIHN0YXRlXHJcbiAgICogdG8gdXBkYXRlLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0FycmF5LjxzdHJpbmc+fSAtIE5hbWVzIG9mIGJsZW5kIHN0YXRlcy5cclxuICAgKi9cclxuICBnZXRBbmltYXRpb25CbGVuZE5hbWVzKGxheWVyTmFtZSwgYW5pbWF0aW9uTmFtZSkge1xyXG4gICAgY29uc3QgbGF5ZXIgPSB0aGlzLl9sYXllck1hcFtsYXllck5hbWVdO1xyXG5cclxuICAgIGlmIChsYXllciA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgQ2Fubm90IGdldCBibGVuZCBuYW1lcyBvbiBsYXllciAke2xheWVyTmFtZX0gZnJvbSBob3N0ICR7dGhpcy5faG9zdC5pZH0uIE5vIGxheWVyIGV4aXN0cyB3aXRoIHRoaXMgbmFtZS5gXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGxheWVyLmdldEFuaW1hdGlvbkJsZW5kTmFtZXMoYW5pbWF0aW9uTmFtZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGUgdGhlIHdlaWdodCBmb3IgYSBibGVuZCBzdGF0ZSBpbiBhbiBhbmltYXRpb24gaW4gYSBsYXllci5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllck5hbWUgLSBOYW1lIG9mIHRoZSBsYXllciBjb250YWluaW5nIHRoZSBhbmltYXRpb24gY29udGFpbmluZ1xyXG4gICAqIHRoZSBibGVuZCBzdGF0ZSB0byB1cGRhdGUuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFuaW1hdGlvbk5hbWUgLSBOYW1lIG9mIHRoZSBhbmltYXRpb24gY29udGFpbmluZyB0aGUgYmxlbmQgc3RhdGVcclxuICAgKiB0byB1cGRhdGUuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGJsZW5kTmFtZSAtIE5hbWUgb2YgdGhlIGJsZW5kIHN0YXRlIHRvIHVwZGF0ZS5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gd2VpZ2h0IC0gV2VpZ2h0IHZhbHVlIHRvIHNldCBvbiB0aGUgYW5pbWF0aW9uLiBUaGlzIG51bWJlciBzaG91ZGxkIGJlXHJcbiAgICogaW4gdGhlIDAtMSByYW5nZS5cclxuICAgKiBAcGFyYW0ge251bWJlcj19IHNlY29uZHMgLSBOdW1iZXIgb2Ygc2Vjb25kcyBpdCBzaG91bGQgdGFrZSB0byByZWFjaCB0aGUgbmV3IHdlaWdodC5cclxuICAgKiBEZWZhdWx0IGlzIHplcm8gYW5kIHdpbGwgc2V0IGltbWVkaWF0ZWx5LlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBlYXNpbmdGbiAtIEVhc2luZyBmdW5jdGlvbiB0byB1c2Ugd2hpbGUgaW50ZXJwb2xhdGluZyB0aGUgbmV3XHJcbiAgICogd2VpZ2h0LiBEZWZhdWx0IGlzIEVhc2luZy5MaW5lYXIuSW5PdXQuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7RGVmZXJyZWR9IC0gUHJvbWlzZSB0aGF0IHdpbGwgcmVzb2x2ZSBvbmNlIHRoZSBhbmltYXRpb24ncyB3ZWlnaHQgcmVhY2hlc1xyXG4gICAqIHRoZSB0YXJnZXQgdmFsdWUuXHJcbiAgICovXHJcbiAgc2V0QW5pbWF0aW9uQmxlbmRXZWlnaHQoXHJcbiAgICBsYXllck5hbWUsXHJcbiAgICBhbmltYXRpb25OYW1lLFxyXG4gICAgYmxlbmROYW1lLFxyXG4gICAgd2VpZ2h0LFxyXG4gICAgc2Vjb25kcyxcclxuICAgIGVhc2luZ0ZuXHJcbiAgKSB7XHJcbiAgICBjb25zdCBsYXllciA9IHRoaXMuX2xheWVyTWFwW2xheWVyTmFtZV07XHJcblxyXG4gICAgaWYgKGxheWVyID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgY29uc3QgZSA9IGBDYW5ub3Qgc2V0IGJsZW5kIHdlaWdodCBvbiBsYXllciAke2xheWVyTmFtZX0gZnJvbSBob3N0ICR7dGhpcy5faG9zdC5pZH0uIE5vIGxheWVyIGV4aXN0cyB3aXRoIHRoaXMgbmFtZS5gO1xyXG4gICAgICByZXR1cm4gRGVmZXJyZWQucmVqZWN0KGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBsYXllci5zZXRBbmltYXRpb25CbGVuZFdlaWdodChcclxuICAgICAgYW5pbWF0aW9uTmFtZSxcclxuICAgICAgYmxlbmROYW1lLFxyXG4gICAgICB3ZWlnaHQsXHJcbiAgICAgIHNlY29uZHMsXHJcbiAgICAgIGVhc2luZ0ZuXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgd2VpZ2h0IGZvciBhIGJsZW5kIHN0YXRlIGluIGFuIGFuaW1hdGlvbiBpbiBhIGxheWVyLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVyTmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIGNvbnRhaW5pbmcgdGhlIGFuaW1hdGlvbiBjb250YWluaW5nXHJcbiAgICogdGhlIGJsZW5kIHN0YXRlIHRvIHVwZGF0ZS5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gYW5pbWF0aW9uTmFtZSAtIE5hbWUgb2YgdGhlIGFuaW1hdGlvbiBjb250YWluaW5nIHRoZSBibGVuZCBzdGF0ZVxyXG4gICAqIHRvIHVwZGF0ZS5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gYmxlbmROYW1lIC0gTmFtZSBvZiB0aGUgYmxlbmQgc3RhdGUgdG8gdXBkYXRlLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge251bWJlcn0gLSBXZWlnaHQgb2YgdGhlIGJsZW5kIHN0YXRlLlxyXG4gICAqL1xyXG4gIGdldEFuaW1hdGlvbkJsZW5kV2VpZ2h0KGxheWVyTmFtZSwgYW5pbWF0aW9uTmFtZSwgYmxlbmROYW1lKSB7XHJcbiAgICBjb25zdCBsYXllciA9IHRoaXMuX2xheWVyTWFwW2xheWVyTmFtZV07XHJcblxyXG4gICAgaWYgKGxheWVyID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgIGBDYW5ub3QgZ2V0IGJsZW5kIHdlaWdodCBvbiBsYXllciAke2xheWVyTmFtZX0gZnJvbSBob3N0ICR7dGhpcy5faG9zdC5pZH0uIE5vIGxheWVyIGV4aXN0cyB3aXRoIHRoaXMgbmFtZS5gXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGxheWVyLmdldEFuaW1hdGlvbkJsZW5kV2VpZ2h0KGFuaW1hdGlvbk5hbWUsIGJsZW5kTmFtZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQYXVzZSB3ZWlnaHQgaW50ZXJwb2xhdGlvbiBhbmltYXRpb24gb24gYSBsYXllciB3aXRoIHRoZSBnaXZlbiBuYW1lLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBOYW1lIG9mIHRoZSBsYXllciB0byBwYXVzZS5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtib29sZWFufSAtIFdoZXRoZXIgb3Igbm90IHRoZXJlIHdhcyBhbiBleGlzdGluZyBpbnRlcnBvbGF0aW9uIHRvIHBhdXNlLlxyXG4gICAqL1xyXG4gIHBhdXNlTGF5ZXJXZWlnaHQobmFtZSkge1xyXG4gICAgLy8gTWFrZSBzdXJlIHRoZSBuYW1lIGlzIHZhbGlkXHJcbiAgICBjb25zdCBsYXllciA9IHRoaXMuX2xheWVyTWFwW25hbWVdO1xyXG5cclxuICAgIGlmIChsYXllciA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgQ2Fubm90IHBhdXNlIHdlaWdodCBpbnRlcnBvbGF0aW9uIG9uIGxheWVyICR7bmFtZX0gZnJvbSBob3N0ICR7dGhpcy5faG9zdC5pZH0uIE5vIGxheWVyIGV4aXN0cyB3aXRoIHRoaXMgbmFtZS5gXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGxheWVyLnBhdXNlV2VpZ2h0KCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXN1bWUgd2VpZ2h0IGludGVycG9sYXRpb24gYW5pbWF0aW9uIG9uIGEgbGF5ZXIgd2l0aCB0aGUgZ2l2ZW4gbmFtZS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gTmFtZSBvZiB0aGUgbGF5ZXIgdG8gcmVzdW1lLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0RlZmVycmVkfSAtIFJlc29sdmVzIG9uY2UgdGhlIGxheWVyJ3Mgd2VpZ2h0IHJlYWNoZXMgaXRzIHRhcmdldCB2YWx1ZS5cclxuICAgKi9cclxuICByZXN1bWVMYXllcldlaWdodChuYW1lKSB7XHJcbiAgICAvLyBNYWtlIHN1cmUgdGhlIG5hbWUgaXMgdmFsaWRcclxuICAgIGNvbnN0IGxheWVyID0gdGhpcy5fbGF5ZXJNYXBbbmFtZV07XHJcblxyXG4gICAgaWYgKGxheWVyID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgY29uc3QgZSA9IGBDYW5ub3QgcmVzdW1lIHdlaWdodCBpbnRlcnBvbGF0aW9uIG9uIGxheWVyICR7bmFtZX0gZnJvbSBob3N0ICR7dGhpcy5faG9zdC5pZH0uIE5vIGxheWVyIGV4aXN0cyB3aXRoIHRoaXMgbmFtZS5gO1xyXG4gICAgICByZXR1cm4gRGVmZXJyZWQucmVqZWN0KGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBsYXllci5yZXN1bWVXZWlnaHQoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFBhdXNlIGN1cnJlbnQgYW5pbWF0aW9uIGFuZCB3ZWlnaHQgaW50ZXJwb2xhdGlvbiBhbmltYXRpb24gb24gYSBsYXllciB3aXRoXHJcbiAgICogdGhlIGdpdmVuIG5hbWUuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRvIHBhdXNlLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge2Jvb2xlYW59IC0gV2hldGhlciBvciBub3QgdGhlcmUgd2FzIGFuIGV4aXN0aW5nIGludGVycG9sYXRpb24gb3JcclxuICAgKiBjdXJyZW50IGFuaW1hdGlvbiB0byBwYXVzZS5cclxuICAgKi9cclxuICBwYXVzZUxheWVyKG5hbWUpIHtcclxuICAgIC8vIE1ha2Ugc3VyZSB0aGUgbmFtZSBpcyB2YWxpZFxyXG4gICAgY29uc3QgbGF5ZXIgPSB0aGlzLl9sYXllck1hcFtuYW1lXTtcclxuXHJcbiAgICBpZiAobGF5ZXIgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgYENhbm5vdCBwYXVzZSBsYXllciAke25hbWV9IGZyb20gaG9zdCAke3RoaXMuX2hvc3QuaWR9LiBObyBsYXllciBleGlzdHMgd2l0aCB0aGlzIG5hbWUuYFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBsYXllci5wYXVzZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVzdW1lIGN1cnJlbnQgYW5pbWF0aW9uIGFuZCB3ZWlnaHQgaW50ZXJwb2xhdGlvbiBhbmltYXRpb24gb24gYSBsYXllciB3aXRoXHJcbiAgICogdGhlIGdpdmVuIG5hbWUuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRvIHJlc3VtZS5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtEZWZlcnJlZH0gLSBSZXNvbHZlcyBvbmNlIHRoZSBsYXllcidzIHdlaWdodCByZWFjaGVzIGl0cyB0YXJnZXQgdmFsdWVcclxuICAgKiBhbmQgaXQncyBjdXJyZW50IGFuaW1hdGlvbiBmaW5pc2hlcyBwbGF5aW5nLlxyXG4gICAqL1xyXG4gIHJlc3VtZUxheWVyKG5hbWUpIHtcclxuICAgIC8vIE1ha2Ugc3VyZSB0aGUgbmFtZSBpcyB2YWxpZFxyXG4gICAgY29uc3QgbGF5ZXIgPSB0aGlzLl9sYXllck1hcFtuYW1lXTtcclxuXHJcbiAgICBpZiAobGF5ZXIgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBjb25zdCBlID0gYENhbm5vdCByZXN1bWUgbGF5ZXIgJHtuYW1lfSBmcm9tIGhvc3QgJHt0aGlzLl9ob3N0LmlkfS4gTm8gbGF5ZXIgZXhpc3RzIHdpdGggdGhpcyBuYW1lLmA7XHJcbiAgICAgIHJldHVybiBEZWZlcnJlZC5yZWplY3QoZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGxheWVyLnJlc3VtZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIHdoZXRoZXIgb3Igbm90IHRoZSBhbmltYXRpb24gbGF5ZXIgd2l0aCB0aGUgZ2l2ZW4gbmFtZSBpcyBjdXJyZW50bHlcclxuICAgKiB0cmFuc2l0aW9uaW5nIGJldHdlZW4gYW5pbWF0aW9ucy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllck5hbWUgLSBOYW1lIG9mIHRoZSBsYXllciB0byBjaGVjay5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gICAqL1xyXG4gIGdldFRyYW5zaXRpb25pbmcobGF5ZXJOYW1lKSB7XHJcbiAgICAvLyBNYWtlIHN1cmUgdGhlIGxheWVyTmFtZSBpcyB2YWxpZFxyXG4gICAgY29uc3QgbGF5ZXIgPSB0aGlzLl9sYXllck1hcFtsYXllck5hbWVdO1xyXG5cclxuICAgIGlmIChsYXllciA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgR2V0IHRyYW5zaXRpb25pbmcgb24gbGF5ZXIgJHtsYXllck5hbWV9IGZyb20gaG9zdCAke3RoaXMuX2hvc3QuaWR9LiBObyBsYXllciBleGlzdHMgd2l0aCB0aGlzIG5hbWUuYFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBsYXllci5pc1RyYW5zaXRpb25pbmc7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gYW4gYXJyYXkgb2YgdGhlIG5hbWVzIG9mIGFsbCBzdGF0ZXMgdGhlIGxheWVyIHdpdGggdGhlIGdpdmVuIG5hbWUgY29udHJvbHMuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGF5ZXJOYW1lIC0gTmFtZSBvZiB0aGUgbGF5ZXIgdG8gc2VhcmNoLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0FycmF5LjxzdHJpbmc+fVxyXG4gICAqL1xyXG4gIGdldEFuaW1hdGlvbnMobGF5ZXJOYW1lKSB7XHJcbiAgICAvLyBNYWtlIHN1cmUgdGhlIGxheWVyTmFtZSBpcyB2YWxpZFxyXG4gICAgY29uc3QgbGF5ZXIgPSB0aGlzLl9sYXllck1hcFtsYXllck5hbWVdO1xyXG5cclxuICAgIGlmIChsYXllciA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgR2V0IGFuaW1hdGlvbnMgb24gbGF5ZXIgJHtsYXllck5hbWV9IGZyb20gaG9zdCAke3RoaXMuX2hvc3QuaWR9LiBObyBsYXllciBleGlzdHMgd2l0aCB0aGlzIG5hbWUuYFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBsYXllci5nZXRTdGF0ZU5hbWVzKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gdGhlIG5hbWUgb2YgdGhlIHN0YXRlIGN1cnJlbnRseSBhY3RpdmUgb24gdGhlIGxheWVyIHdpdGggdGhlIGdpdmVuIG5hbWUuXHJcbiAgICogUmV0dXJuIG51bGwgaWYgdGhlcmUgaXMgbm8gY3VycmVudCBhbmltYXRpb24gZm9yIHRoZSBsYXllci5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllck5hbWUgLSBOYW1lIG9mIHRoZSBsYXllci5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHsoc3RyaW5nfG51bGwpfVxyXG4gICAqL1xyXG4gIGdldEN1cnJlbnRBbmltYXRpb24obGF5ZXJOYW1lKSB7XHJcbiAgICAvLyBNYWtlIHN1cmUgdGhlIGxheWVyTmFtZSBpcyB2YWxpZFxyXG4gICAgY29uc3QgbGF5ZXIgPSB0aGlzLl9sYXllck1hcFtsYXllck5hbWVdO1xyXG5cclxuICAgIGlmIChsYXllciA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgR2V0IGN1cnJlbnQgYW5pbWF0aW9uIG9uIGxheWVyICR7bGF5ZXJOYW1lfSBmcm9tIGhvc3QgJHt0aGlzLl9ob3N0LmlkfS4gTm8gbGF5ZXIgZXhpc3RzIHdpdGggdGhpcyBuYW1lLmBcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbGF5ZXIuY3VycmVudEFuaW1hdGlvbjtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiB3aGV0aGVyIG9yIG5vdCBhIGxheWVyIHdpdGggdGhlIGdpdmVuIG5hbWUgaXMgY3VycmVudGx5IHBsYXlpbmcgYW5cclxuICAgKiBhbmltYXRpb24gYW5kIHRoYXQgYW5pbWF0aW9uIGlzIHBhdXNlZC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllck5hbWUgLSBOYW1lIG9mIHRoZSBsYXllci5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gICAqL1xyXG4gIGdldFBhdXNlZChsYXllck5hbWUpIHtcclxuICAgIC8vIE1ha2Ugc3VyZSB0aGUgbGF5ZXJOYW1lIGlzIHZhbGlkXHJcbiAgICBjb25zdCBsYXllciA9IHRoaXMuX2xheWVyTWFwW2xheWVyTmFtZV07XHJcblxyXG4gICAgaWYgKGxheWVyID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgIGBHZXQgcGF1c2VkIG9uIGxheWVyICR7bGF5ZXJOYW1lfSBmcm9tIGhvc3QgJHt0aGlzLl9ob3N0LmlkfS4gTm8gbGF5ZXIgZXhpc3RzIHdpdGggdGhpcyBuYW1lLmBcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbGF5ZXIuY3VycmVudFN0YXRlICYmIGxheWVyLmN1cnJlbnRTdGF0ZS5wYXVzZWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gdGhlIHR5cGUgbmFtZSBvZiB0aGUgZ2l2ZW4gYW5pbWF0aW9uLiBAc2VlIEFuaW1hdGlvblR5cGVzLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVyTmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRoYXQgY29udGFpbnMgdGhlIGFuaW1hdGlvbi5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gYW5pbWF0aW9uTmFtZSAtIE5hbWUgb2YgdGhlIGFuaW1hdGlvbiB0byBjaGVjay5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XHJcbiAgICovXHJcbiAgZ2V0QW5pbWF0aW9uVHlwZShsYXllck5hbWUsIGFuaW1hdGlvbk5hbWUpIHtcclxuICAgIC8vIE1ha2Ugc3VyZSB0aGUgbGF5ZXJOYW1lIGlzIHZhbGlkXHJcbiAgICBjb25zdCBsYXllciA9IHRoaXMuX2xheWVyTWFwW2xheWVyTmFtZV07XHJcblxyXG4gICAgaWYgKGxheWVyID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgIGBHZXQgYW5pbWF0aW9uIHR5cGUgb24gbGF5ZXIgJHtsYXllck5hbWV9IGZyb20gaG9zdCAke3RoaXMuX2hvc3QuaWR9LiBObyBsYXllciBleGlzdHMgd2l0aCB0aGlzIG5hbWUuYFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHN0YXRlID0gbGF5ZXIuZ2V0U3RhdGUoYW5pbWF0aW9uTmFtZSk7XHJcblxyXG4gICAgaWYgKHN0YXRlID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgIGBHZXQgYW5pbWF0aW9uIHR5cGUgZm9yIGFuaW1hdGlvbiAke2FuaW1hdGlvbk5hbWV9IG9uIGxheWVyICR7bGF5ZXJOYW1lfSBmcm9tIGhvc3QgJHt0aGlzLl9ob3N0LmlkfS4gTm8gYW5pbWF0aW9uIGV4aXN0cyB3aXRoIHRoaXMgbmFtZS5gXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qge2NvbnN0cnVjdG9yfSA9IHN0YXRlO1xyXG5cclxuICAgIHJldHVybiBPYmplY3Qua2V5cyhBbmltYXRpb25UeXBlcykuZmluZChcclxuICAgICAgdHlwZU5hbWUgPT4gQW5pbWF0aW9uVHlwZXNbdHlwZU5hbWVdID09PSBjb25zdHJ1Y3RvclxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFkZCBhIG5ldyBhbmltYXRpb24gdG8gYW4gYW5pbWF0aW9uIGxheWVyLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVyTmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRvIGFkZCB0aGUgYW5pbWF0aW9uIHRvLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhbmltYXRpb25OYW1lIC0gTmFtZSB0byB1c2Ugd2hlbiBjYWxsaW5nIHRoZSBhbmltYXRpb24uXHJcbiAgICogQHBhcmFtIHtPYmplY3Q9fSBvcHRpb25zIC0gT3B0aW9ucyB0byBwYXNzIHRvIHRoZSBjb25zdHJ1Y3RvciBmb3IgdGhlIG5ld1xyXG4gICAqIFNpbmdsZVN0YXRlIGFuaW1hdGlvbi5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IC0gVGhlIG5hbWUgb2YgdGhlIGFuaW1hdGlvbiB0aGF0IHdhcyBhZGRlZFxyXG4gICAqL1xyXG4gIGFkZEFuaW1hdGlvbihcclxuICAgIGxheWVyTmFtZSxcclxuICAgIGFuaW1hdGlvbk5hbWUsXHJcbiAgICBhbmltYXRpb25UeXBlID0gQW5pbWF0aW9uVHlwZXMuc2luZ2xlLFxyXG4gICAgb3B0aW9ucyA9IHt9XHJcbiAgKSB7XHJcbiAgICBvcHRpb25zLm5hbWUgPSB0aGlzLl92YWxpZGF0ZU5ld0FuaW1hdGlvbihsYXllck5hbWUsIGFuaW1hdGlvbk5hbWUpO1xyXG5cclxuICAgIC8vIE1ha2Ugc3VyZSB0aGUgYW5pbWF0aW9uIHR5cGUgaXMgdmFsaWRcclxuICAgIGlmICghT2JqZWN0LnZhbHVlcyhBbmltYXRpb25UeXBlcykuaW5jbHVkZXMoYW5pbWF0aW9uVHlwZSkpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgIGBDYW5ub3QgYWRkIGFuaW1hdGlvbiAke2FuaW1hdGlvbk5hbWV9IHRvIGxheWVyICR7bGF5ZXJOYW1lfSBvbiBob3N0ICR7dGhpcy5faG9zdC5pZH0uIEludmFsaWQgYW5pbWF0aW9uIHR5cGUuYFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGxheWVyID0gdGhpcy5fbGF5ZXJNYXBbbGF5ZXJOYW1lXTtcclxuICAgIG9wdGlvbnMuYmxlbmRNb2RlID0gbGF5ZXIuYmxlbmRNb2RlO1xyXG4gICAgb3B0aW9ucy50cmFuc2l0aW9uVGltZSA9IGxheWVyLnRyYW5zaXRpb25UaW1lO1xyXG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzW2BfY3JlYXRlJHthbmltYXRpb25UeXBlLm5hbWV9YF0ob3B0aW9ucyk7XHJcblxyXG4gICAgY29uc3QgbmFtZSA9IGxheWVyLmFkZFN0YXRlKHN0YXRlKTtcclxuXHJcbiAgICAvLyBOb3RpZnkgdGhhdCBhbiBhbmltYXRpb24gaGFzIGJlZW4gYWRkZWQgdG8gdGhlIGZlYXR1cmVcclxuICAgIHRoaXMuZW1pdCh0aGlzLmNvbnN0cnVjdG9yLkVWRU5UUy5hZGRBbmltYXRpb24sIHtcclxuICAgICAgbGF5ZXJOYW1lLFxyXG4gICAgICBhbmltYXRpb25OYW1lOiBuYW1lLFxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIG5hbWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZW1vdmUgYW4gYW5pbWF0aW9uIGZyb20gYW4gYW5pbWF0aW9uIGxheWVyLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVyTmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRvIHJlbW92ZSB0aGUgYW5pbWF0aW9uIGZyb20uXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBOYW1lIG9mIHRoZSBhbmltYXRpb24gdG8gcmVtb3ZlLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAgICovXHJcbiAgcmVtb3ZlQW5pbWF0aW9uKGxheWVyTmFtZSwgYW5pbWF0aW9uTmFtZSkge1xyXG4gICAgLy8gTWFrZSBzdXJlIHRoZSBuYW1lIGlzIHZhbGlkXHJcbiAgICBjb25zdCBsYXllciA9IHRoaXMuX2xheWVyTWFwW2xheWVyTmFtZV07XHJcblxyXG4gICAgaWYgKGxheWVyID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgIGBDYW5ub3QgcmVtb3ZlIGFuaW1hdGlvbiBmcm9tIGxheWVyICR7bGF5ZXJOYW1lfSBmcm9tIGhvc3QgJHt0aGlzLl9ob3N0LmlkfS4gTm8gbGF5ZXIgZXhpc3RzIHdpdGggdGhpcyBuYW1lLmBcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCByZW1vdmVkID0gbGF5ZXIucmVtb3ZlU3RhdGUoYW5pbWF0aW9uTmFtZSk7XHJcblxyXG4gICAgLy8gTm90aWZ5IHRoYXQgYW4gYW5pbWF0aW9uIGhhcyBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgZmVhdHVyZVxyXG4gICAgaWYgKHJlbW92ZWQgPT09IHRydWUpIHtcclxuICAgICAgdGhpcy5lbWl0KHRoaXMuY29uc3RydWN0b3IuRVZFTlRTLnJlbW92ZUFuaW1hdGlvbiwge1xyXG4gICAgICAgIGxheWVyTmFtZSxcclxuICAgICAgICBhbmltYXRpb25OYW1lLFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcmVtb3ZlZDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZSB0aGUgbmFtZSBvZiBhbiBhbmltYXRpb24uIE5hbWVzIG11c3QgYmUgdW5pcXVlIG9uIGVhY2ggbGF5ZXIsIGlmIHRoZSBuZXdcclxuICAgKiBuYW1lIGlzIG5vdCB1bmlxdWUgaXQgd2lsbCBoYXZlIHRyYWlsaW5nIG51bWJlcnMgYXBwZW5kZWQgdW50aWwgaXQgaXMgdW5pcXVlLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVyTmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRoYXQgY29udGFpbnMgdGhlIGFuaW1hdGlvbiB0aGF0XHJcbiAgICogd2lsbCBiZSByZW5hbWVkLFxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjdXJyZW50QW5pbWF0aW9uTmFtZSAtIEN1cnJlbnQgbmFtZSBvZiB0aGUgYW5pbWF0aW9uLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuZXdBbmltYXRpb25OYW1lIC0gTmV3IG5hbWUgdG8gc2V0IG9uIHRoZSBhbmltYXRpb24uXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSAtIFRoZSBuZXcgbmFtZSBvZiB0aGUgYW5pbWF0aW9uXHJcbiAgICovXHJcbiAgcmVuYW1lQW5pbWF0aW9uKGxheWVyTmFtZSwgY3VycmVudEFuaW1hdGlvbk5hbWUsIG5ld0FuaW1hdGlvbk5hbWUpIHtcclxuICAgIGNvbnN0IGxheWVyID0gdGhpcy5fbGF5ZXJNYXBbbGF5ZXJOYW1lXTtcclxuXHJcbiAgICBpZiAobGF5ZXIgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgYENhbm5vdCByZW5hbWUgYW5pbWF0aW9uICR7Y3VycmVudEFuaW1hdGlvbk5hbWV9IG9uIGxheWVyICR7bGF5ZXJOYW1lfSBmb3IgaG9zdCAke3RoaXMuX2hvc3QuaWR9LiBObyBsYXllciBleGlzdHMgd2l0aCB0aGlzIG5hbWUuYFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IG5hbWUgPSBsYXllci5yZW5hbWVTdGF0ZShjdXJyZW50QW5pbWF0aW9uTmFtZSwgbmV3QW5pbWF0aW9uTmFtZSk7XHJcblxyXG4gICAgLy8gTm90aWZ5IHRoYXQgYW4gYW5pbWF0aW9uIGhhcyBiZWVuIHJlbmFtZWQgb24gdGhlIGZlYXR1cmVcclxuICAgIHRoaXMuZW1pdCh0aGlzLmNvbnN0cnVjdG9yLkVWRU5UUy5yZW5hbWVBbmltYXRpb24sIHtcclxuICAgICAgbGF5ZXJOYW1lLFxyXG4gICAgICBvbGROYW1lOiBjdXJyZW50QW5pbWF0aW9uTmFtZSxcclxuICAgICAgbmV3TmFtZTogbmFtZSxcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBuYW1lO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUGF1c2UgdGhlIGN1cnJlbnRseSBwbGF5aW5nIGFuaW1hdGlvbiBhbmQgcGxheSBhIG5ldyBhbmltYXRpb24gZnJvbSB0aGUgYmVnaW5uaW5nLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVyTmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRoYXQgY29udGFpbnMgdGhlIGFuaW1hdGlvbi5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gYW5pbWF0aW9uTmFtZSAtIE5hbWUgb2YgdGhlIGFuaW1hdGlvbiBzdGF0ZSB0byBwbGF5LlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyPX0gc2Vjb25kcyAtIFRoZSBudW1iZXIgb2Ygc2Vjb25kcyBpdCBzaG91bGQgdGFrZSB0byB0cmFuc2l0aW9uXHJcbiAgICogdG8gdGhlIG5ldyBhbmltYXRpb24uIERlZmF1bHQgaXMgemVybyBhbmQgd2lsbCBzZXQgaW1tZWRpYXRlbHkuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IGVhc2luZ0ZuIC0gVGhlIGVhc2luZyBmdW5jdGlvbiB0byB1c2Ugd2hpbGUgdHJhbnNpdGlvbmluZ1xyXG4gICAqIGJldHdlZW4gYW5pbWF0aW9ucy4gRGVmYXVsdCBpcyBFYXNpbmcuTGluZWFyLkluT3V0LlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0RlZmVycmVkfSAtIFJlc29sdmVzIG9uY2UgdGhlIGFuaW1hdGlvbiByZWFjaGVzIHRoZSBlbmQgb2YgaXRzXHJcbiAgICogdGltZWxpbmUuIExvb3BpbmcgYW5pbWF0aW9ucyBjYW4gb25seSByZXNvbHZlIGlmIHRoZXkgYXJlIGludGVycnVwdGVkIG9yXHJcbiAgICogbWFudWFsbHkgc3RvcHBlZC5cclxuICAgKi9cclxuICBwbGF5QW5pbWF0aW9uKGxheWVyTmFtZSwgYW5pbWF0aW9uTmFtZSwgc2Vjb25kcywgZWFzaW5nRm4pIHtcclxuICAgIGNvbnN0IGxheWVyID0gdGhpcy5fbGF5ZXJNYXBbbGF5ZXJOYW1lXTtcclxuXHJcbiAgICBpZiAobGF5ZXIgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBjb25zdCBlID0gYENhbm5vdCBwbGF5IGFuaW1hdGlvbiAke2FuaW1hdGlvbk5hbWV9IG9uIGxheWVyICR7bGF5ZXJOYW1lfSBmb3IgaG9zdCAke3RoaXMuX2hvc3QuaWR9LiBObyBsYXllciBleGlzdHMgd2l0aCB0aGlzIG5hbWUuYDtcclxuICAgICAgcmV0dXJuIERlZmVycmVkLnJlamVjdChlKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBOb3RpZnkgdGhhdCBhIG5ldyBhbmltYXRpb24gaGFzIGJlZ3VuXHJcbiAgICB0aGlzLmVtaXQodGhpcy5jb25zdHJ1Y3Rvci5FVkVOVFMucGxheUFuaW1hdGlvbiwge1xyXG4gICAgICBsYXllck5hbWUsXHJcbiAgICAgIGFuaW1hdGlvbk5hbWUsXHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gbGF5ZXIucGxheUFuaW1hdGlvbihcclxuICAgICAgYW5pbWF0aW9uTmFtZSxcclxuICAgICAgc2Vjb25kcyxcclxuICAgICAgZWFzaW5nRm4sXHJcbiAgICAgICgpID0+IHtcclxuICAgICAgICAvLyBOb3RpZnkgdGhhdCBhbiBhbmltYXRpb24gaGFzIHN0b3BwZWRcclxuICAgICAgICB0aGlzLmVtaXQodGhpcy5jb25zdHJ1Y3Rvci5FVkVOVFMuc3RvcEFuaW1hdGlvbiwge1xyXG4gICAgICAgICAgbGF5ZXJOYW1lLFxyXG4gICAgICAgICAgYW5pbWF0aW9uTmFtZSxcclxuICAgICAgICB9KTtcclxuICAgICAgfSxcclxuICAgICAgdW5kZWZpbmVkLFxyXG4gICAgICAoKSA9PiB7XHJcbiAgICAgICAgLy8gTm90aWZ5IHRoYXQgYW4gYW5pbWF0aW9uIGhhcyBiZWVuIGludGVycnVwdGVkXHJcbiAgICAgICAgdGhpcy5lbWl0KHRoaXMuY29uc3RydWN0b3IuRVZFTlRTLmludGVycnVwdEFuaW1hdGlvbiwge1xyXG4gICAgICAgICAgbGF5ZXJOYW1lLFxyXG4gICAgICAgICAgYW5pbWF0aW9uTmFtZSxcclxuICAgICAgICB9KTtcclxuICAgICAgfSxcclxuICAgICAgKHtuYW1lLCBjYW5BZHZhbmNlLCBpc1F1ZXVlRW5kfSkgPT4ge1xyXG4gICAgICAgIGlmIChsYXllci5jdXJyZW50QW5pbWF0aW9uID09PSBhbmltYXRpb25OYW1lKSB7XHJcbiAgICAgICAgICAvLyBOb3RpZnkgdGhhdCBhIG5ldyBhbmltYXRpb24gaGFzIGJlZ3VuXHJcbiAgICAgICAgICB0aGlzLmVtaXQodGhpcy5jb25zdHJ1Y3Rvci5FVkVOVFMucGxheU5leHRBbmltYXRpb24sIHtcclxuICAgICAgICAgICAgbGF5ZXJOYW1lLFxyXG4gICAgICAgICAgICBhbmltYXRpb25OYW1lLFxyXG4gICAgICAgICAgICBuZXh0UXVldWVkQW5pbWF0aW9uOiBuYW1lLFxyXG4gICAgICAgICAgICBjYW5BZHZhbmNlLFxyXG4gICAgICAgICAgICBpc1F1ZXVlRW5kLFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUGxheSB0aGUgbmV4dCBhbmltYXRpb24gaW4gdGhlIHF1ZXVlIG9mIGEgUXVldWVTdGF0ZSBhbmltYXRpb24uXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGF5ZXJOYW1lIC0gTmFtZSBvZiB0aGUgbGF5ZXIgdGhhdCBjb250YWlucyB0aGUgcXVldWUgYW5pbWF0aW9uLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nPX0gYW5pbWF0aW9uTmFtZSAtIE5hbWUgb2YgdGhlIGFuaW1hdGlvbiBxdWV1ZSBhbmltYXRpb24uIERlZmF1bHRzXHJcbiAgICogdG8gdGhlIG5hbWUgb2YgdGhlIGN1cnJlbnQgYW5pbWF0aW9uIGZvciB0aGUgbGF5ZXIuXHJcbiAgICogQHBhcmFtIHtudW1iZXI9fSBzZWNvbmRzIC0gVGhlIG51bWJlciBvZiBzZWNvbmRzIGl0IHNob3VsZCB0YWtlIHRvIHRyYW5zaXRpb25cclxuICAgKiB0byB0aGUgcXVldWUgYW5pbWF0aW9uIGlmIGl0J3Mgbm90IGFscmVhZHkgY3VycmVudGx5IHBsYXlpbmcuIERlZmF1bHQgaXMgemVyb1xyXG4gICAqIGFuZCB3aWxsIHNldCBpbW1lZGlhdGVseS5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gZWFzaW5nRm4gLSBUaGUgZWFzaW5nIGZ1bmN0aW9uIHRvIHVzZSB3aGlsZSB0cmFuc2l0aW9uaW5nXHJcbiAgICogdG8gdGhlIHF1ZXVlIGFuaW1hdGlvbiBpZiBpdCBpc24ndCBhbHJlYWR5IHBsYXlpbmcuIERlZmF1bHQgaXMgRWFzaW5nLkxpbmVhci5Jbk91dC5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtEZWZlcnJlZH0gLSBSZXNvbHZlcyBvbmNlIHRoZSBsYXN0IGFuaW1hdGlvbiBpbiB0aGUgcXVldWUgZmluaXNoZXNcclxuICAgKiBwbGF5aW5nLlxyXG4gICAqL1xyXG4gIHBsYXlOZXh0QW5pbWF0aW9uKGxheWVyTmFtZSwgYW5pbWF0aW9uTmFtZSwgdHJhbnNpdGlvblRpbWUsIGVhc2luZ0ZuKSB7XHJcbiAgICBjb25zdCBsYXllciA9IHRoaXMuX2xheWVyTWFwW2xheWVyTmFtZV07XHJcblxyXG4gICAgaWYgKGxheWVyID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgY29uc3QgZSA9IGBDYW5ub3QgcGxheSBuZXh0IGFuaW1hdGlvbiBvbiBsYXllciAke2xheWVyTmFtZX0gZm9yIGhvc3QgJHt0aGlzLl9ob3N0LmlkfS4gTm8gbGF5ZXIgZXhpc3RzIHdpdGggdGhpcyBuYW1lLmA7XHJcbiAgICAgIHJldHVybiBEZWZlcnJlZC5yZWplY3QoZSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGFuaW1hdGlvbk5hbWUgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBhbmltYXRpb25OYW1lID0gbGF5ZXIuY3VycmVudEFuaW1hdGlvbjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBhbmltYXRpb24gPSBsYXllci5nZXRTdGF0ZShsYXllci5jdXJyZW50QW5pbWF0aW9uKTtcclxuXHJcbiAgICBpZiAoYW5pbWF0aW9uID09PSBudWxsKSB7XHJcbiAgICAgIGNvbnN0IGUgPSBgQ2Fubm90IHBsYXkgbmV4dCBhbmltYXRpb24gb24gbGF5ZXIgJHtsYXllck5hbWV9IGZvciBob3N0ICR7dGhpcy5faG9zdC5pZH0uIE5vIGFuaW1hdGlvbiBleGlzdHMgd2l0aCBuYW1lICR7YW5pbWF0aW9uTmFtZX0uYDtcclxuICAgICAgcmV0dXJuIERlZmVycmVkLnJlamVjdChlKTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5nZXRBbmltYXRpb25UeXBlKGxheWVyTmFtZSwgYW5pbWF0aW9uTmFtZSkgIT09ICdxdWV1ZScpIHtcclxuICAgICAgY29uc3QgZSA9IGBDYW5ub3QgcGxheSBuZXh0IGFuaW1hdGlvbiBvbiBsYXllciAke2xheWVyTmFtZX0gZm9yIGhvc3QgJHt0aGlzLl9ob3N0LmlkfS4gJHthbmltYXRpb25OYW1lfSBpcyBub3QgYSBxdWV1ZSBzdGF0ZS5gO1xyXG4gICAgICByZXR1cm4gRGVmZXJyZWQucmVqZWN0KGUpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IG9uTmV4dCA9ICh7bmFtZSwgY2FuQWR2YW5jZSwgaXNRdWV1ZUVuZH0pID0+IHtcclxuICAgICAgaWYgKGxheWVyLmN1cnJlbnRBbmltYXRpb24gPT09IGFuaW1hdGlvbk5hbWUpIHtcclxuICAgICAgICAvLyBOb3RpZnkgdGhhdCBhIG5ldyBhbmltYXRpb24gaGFzIGJlZ3VuXHJcbiAgICAgICAgdGhpcy5lbWl0KHRoaXMuY29uc3RydWN0b3IuRVZFTlRTLnBsYXlOZXh0QW5pbWF0aW9uLCB7XHJcbiAgICAgICAgICBsYXllck5hbWUsXHJcbiAgICAgICAgICBhbmltYXRpb25OYW1lLFxyXG4gICAgICAgICAgbmV4dFF1ZXVlZEFuaW1hdGlvbjogbmFtZSxcclxuICAgICAgICAgIGNhbkFkdmFuY2UsXHJcbiAgICAgICAgICBpc1F1ZXVlRW5kLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIC8vIE1ha2UgdGhlIHF1ZXVlIGFuaW1hdGlvbiBjdXJyZW50IGlmIGl0IHdhc24ndCBhbHJlYWR5XHJcbiAgICBpZiAobGF5ZXIuY3VycmVudEFuaW1hdGlvbiA9PT0gbnVsbCkge1xyXG4gICAgICBsYXllci5yZXN1bWVBbmltYXRpb24oXHJcbiAgICAgICAgYW5pbWF0aW9uLm5hbWUsXHJcbiAgICAgICAgdHJhbnNpdGlvblRpbWUsXHJcbiAgICAgICAgZWFzaW5nRm4sXHJcbiAgICAgICAgdW5kZWZpbmVkLFxyXG4gICAgICAgIHVuZGVmaW5lZCxcclxuICAgICAgICB1bmRlZmluZWQsXHJcbiAgICAgICAgb25OZXh0XHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGFuaW1hdGlvbi5uZXh0KG9uTmV4dCwgdHJ1ZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQYXVzZSB0aGUgY3VycmVudCBhbmltYXRpb24gb24gYSBsYXllci5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gTmFtZSBvZiB0aGUgbGF5ZXIgdG8gcGF1c2UuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciBvciBub3QgYW4gYW5pbWF0aW9uIHdhcyBzdWNjZXNzZnVsbHkgcGF1c2VkLlxyXG4gICAqL1xyXG4gIHBhdXNlQW5pbWF0aW9uKG5hbWUpIHtcclxuICAgIGNvbnN0IGxheWVyID0gdGhpcy5fbGF5ZXJNYXBbbmFtZV07XHJcblxyXG4gICAgaWYgKGxheWVyID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgIGBEaWQgbm90IHBhdXNlIGFuaW1hdGlvbiBvbiBsYXllciAke25hbWV9IGZvciBob3N0ICR7dGhpcy5faG9zdC5pZH0uIE5vIGxheWVyIGV4aXN0cyB3aXRoIHRoaXMgbmFtZS5gXHJcbiAgICAgICk7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBwYXVzZWQgPSBsYXllci5wYXVzZUFuaW1hdGlvbigpO1xyXG5cclxuICAgIC8vIE5vdGlmeSB0aGF0IGFuIGFuaW1hdGlvbiB3YXMgcGF1c2VkXHJcbiAgICBpZiAocGF1c2VkKSB7XHJcbiAgICAgIGNvbnN0IGFuaW1hdGlvbk5hbWUgPSBsYXllci5jdXJyZW50QW5pbWF0aW9uO1xyXG4gICAgICB0aGlzLmVtaXQodGhpcy5jb25zdHJ1Y3Rvci5FVkVOVFMucGF1c2VBbmltYXRpb24sIHtcclxuICAgICAgICBsYXllck5hbWU6IG5hbWUsXHJcbiAgICAgICAgYW5pbWF0aW9uTmFtZSxcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHBhdXNlZDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFBhdXNlIHRoZSBjdXJyZW50bHkgcGxheWluZyBhbmltYXRpb24gYW5kIHBsYXkgYSBuZXcgYW5pbWF0aW9uIGZyb20gd2hlcmUgaXRcclxuICAgKiBsYXN0IGxlZnQgb2ZmLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVyTmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRoYXQgY29udGFpbnMgdGhlIGFuaW1hdGlvbi5cclxuICAgKiBAcGFyYW0ge3N0cmluZz19IGFuaW1hdGlvbk5hbWUgLSBOYW1lIG9mIHRoZSBhbmltYXRpb24gc3RhdGUgdG8gcmVzdW1lLiBEZWZhdWx0c1xyXG4gICAqIHRvIHRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IGFuaW1hdGlvbiBmb3IgdGhlIGxheWVyLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyPX0gc2Vjb25kcyAtIFRoZSBudW1iZXIgb2Ygc2Vjb25kcyBpdCBzaG91bGQgdGFrZSB0byB0cmFuc2l0aW9uXHJcbiAgICogdG8gdGhlIG5ldyBhbmltYXRpb24uIERlZmF1bHQgaXMgemVybyBhbmQgd2lsbCBzZXQgaW1tZWRpYXRlbHkuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IGVhc2luZ0ZuIC0gVGhlIGVhc2luZyBmdW5jdGlvbiB0byB1c2Ugd2hpbGUgdHJhbnNpdGlvbmluZ1xyXG4gICAqIGJldHdlZW4gYW5pbWF0aW9ucy4gRGVmYXVsdCBpcyBFYXNpbmcuTGluZWFyLkluT3V0LlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0RlZmVycmVkfSAtIFJlc29sdmVzIG9uY2UgdGhlIGFuaW1hdGlvbiByZWFjaGVzIHRoZSBlbmQgb2YgaXRzXHJcbiAgICogdGltZWxpbmUuIExvb3BpbmcgYW5pbWF0aW9ucyBjYW4gb25seSByZXNvbHZlIGlmIHRoZXkgYXJlIGludGVycnVwdGVkIG9yXHJcbiAgICogbWFudWFsbHkgc3RvcHBlZC5cclxuICAgKi9cclxuICByZXN1bWVBbmltYXRpb24obGF5ZXJOYW1lLCBhbmltYXRpb25OYW1lLCBzZWNvbmRzLCBlYXNpbmdGbikge1xyXG4gICAgY29uc3QgbGF5ZXIgPSB0aGlzLl9sYXllck1hcFtsYXllck5hbWVdO1xyXG5cclxuICAgIGlmIChsYXllciA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGNvbnN0IGUgPSBgQ2Fubm90IHJlc3VtZSBhbmltYXRpb24gJHthbmltYXRpb25OYW1lfSBvbiBsYXllciAke2xheWVyTmFtZX0gZm9yIGhvc3QgJHt0aGlzLl9ob3N0LmlkfS4gTm8gbGF5ZXIgZXhpc3RzIHdpdGggdGhpcyBuYW1lLmA7XHJcbiAgICAgIHJldHVybiBEZWZlcnJlZC5yZWplY3QoZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gTm90aWZ5IHRoYXQgYW4gYW5pbWF0aW9uIHdhcyByZXN1bWVkXHJcbiAgICB0aGlzLmVtaXQodGhpcy5jb25zdHJ1Y3Rvci5FVkVOVFMucmVzdW1lQW5pbWF0aW9uLCB7XHJcbiAgICAgIGxheWVyTmFtZSxcclxuICAgICAgYW5pbWF0aW9uTmFtZSxcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBsYXllci5yZXN1bWVBbmltYXRpb24oXHJcbiAgICAgIGFuaW1hdGlvbk5hbWUsXHJcbiAgICAgIHNlY29uZHMsXHJcbiAgICAgIGVhc2luZ0ZuLFxyXG4gICAgICAoKSA9PiB7XHJcbiAgICAgICAgLy8gTm90aWZ5IHRoYXQgYW4gYW5pbWF0aW9uIGhhcyBzdG9wcGVkXHJcbiAgICAgICAgdGhpcy5lbWl0KHRoaXMuY29uc3RydWN0b3IuRVZFTlRTLnN0b3BBbmltYXRpb24sIHtcclxuICAgICAgICAgIGxheWVyTmFtZSxcclxuICAgICAgICAgIGFuaW1hdGlvbk5hbWUsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0sXHJcbiAgICAgIHVuZGVmaW5lZCxcclxuICAgICAgKCkgPT4ge1xyXG4gICAgICAgIC8vIE5vdGlmeSB0aGF0IGFuIGFuaW1hdGlvbiBoYXMgYmVlbiBpbnRlcnJ1cHRlZFxyXG4gICAgICAgIHRoaXMuZW1pdCh0aGlzLmNvbnN0cnVjdG9yLkVWRU5UUy5pbnRlcnJ1cHRBbmltYXRpb24sIHtcclxuICAgICAgICAgIGxheWVyTmFtZSxcclxuICAgICAgICAgIGFuaW1hdGlvbk5hbWUsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0sXHJcbiAgICAgICh7bmFtZSwgY2FuQWR2YW5jZSwgaXNRdWV1ZUVuZH0pID0+IHtcclxuICAgICAgICBpZiAobGF5ZXIuY3VycmVudEFuaW1hdGlvbiA9PT0gYW5pbWF0aW9uTmFtZSkge1xyXG4gICAgICAgICAgLy8gTm90aWZ5IHRoYXQgYSBuZXcgYW5pbWF0aW9uIGhhcyBiZWd1blxyXG4gICAgICAgICAgdGhpcy5lbWl0KHRoaXMuY29uc3RydWN0b3IuRVZFTlRTLnBsYXlOZXh0QW5pbWF0aW9uLCB7XHJcbiAgICAgICAgICAgIGxheWVyTmFtZSxcclxuICAgICAgICAgICAgYW5pbWF0aW9uTmFtZSxcclxuICAgICAgICAgICAgbmV4dFF1ZXVlZEFuaW1hdGlvbjogbmFtZSxcclxuICAgICAgICAgICAgY2FuQWR2YW5jZSxcclxuICAgICAgICAgICAgaXNRdWV1ZUVuZCxcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFN0b3AgdGhlIGN1cnJlbnQgYW5pbWF0aW9uIG9uIGEgbGF5ZXIuIFN0b3AgcmV3aW5kcyB0aGUgYW5pbWF0aW9uIHRvIHRoZVxyXG4gICAqIGJlZ2lubmluZyBhbmQgcHJldmVudHMgaXQgZnJvbSBwcm9ncmVzc2luZyBmb3J3YXJkLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBOYW1lIG9mIHRoZSBsYXllciB0aGF0IGNvbnRhaW5zIHRoZSBhbmltYXRpb24uXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciBvciBub3QgYW4gYW5pbWF0aW9uIHdhcyBzdWNjZXNzZnVsbHkgc3RvcHBlZC5cclxuICAgKi9cclxuICBzdG9wQW5pbWF0aW9uKG5hbWUpIHtcclxuICAgIGNvbnN0IGxheWVyID0gdGhpcy5fbGF5ZXJNYXBbbmFtZV07XHJcblxyXG4gICAgaWYgKGxheWVyID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgIGBEaWQgbm90IHN0b3AgYW5pbWF0aW9uIG9uIGxheWVyICR7bmFtZX0gZm9yIGhvc3QgJHt0aGlzLl9ob3N0LmlkfS4gTm8gbGF5ZXIgZXhpc3RzIHdpdGggdGhpcyBuYW1lLmBcclxuICAgICAgKTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBsYXllci5zdG9wQW5pbWF0aW9uKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQYXVzZSBjdXJyZW50IGFuaW1hdGlvbiBhbmQgd2VpZ2h0IGludGVycG9sYXRpb24gYW5pbWF0aW9uIG9uIGFsbCBsYXllcnMuXHJcblxyXG4gICAqIEByZXR1cm5zIHtib29sZWFufSAtIFdoZXRoZXIgb3Igbm90IHRoZXJlIHdhcyBhbiBleGlzdGluZyBpbnRlcnBvbGF0aW9uIG9yXHJcbiAgICogY3VycmVudCBhbmltYXRpb25zIHRvIHBhdXNlLlxyXG4gICAqL1xyXG4gIHBhdXNlKCkge1xyXG4gICAgdGhpcy5fcGF1c2VkID0gdHJ1ZTtcclxuXHJcbiAgICBsZXQgcGF1c2VkID0gZmFsc2U7XHJcbiAgICB0aGlzLl9sYXllcnMuZm9yRWFjaChsID0+IHtcclxuICAgICAgaWYgKGwucGF1c2UoKSkge1xyXG4gICAgICAgIHBhdXNlZCA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBwYXVzZWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXN1bWUgY3VycmVudCBhbmltYXRpb24gYW5kIHdlaWdodCBpbnRlcnBvbGF0aW9uIGFuaW1hdGlvbiBvbiBhbGwgbGF5ZXJzLlxyXG5cclxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSBXaGV0aGVyIG9yIG5vdCB0aGVyZSB3YXMgYW4gZXhpc3RpbmcgaW50ZXJwb2xhdGlvbiBvclxyXG4gICAqIGN1cnJlbnQgYW5pbWF0aW9ucyB0byByZXN1bWUuXHJcbiAgICovXHJcbiAgcmVzdW1lKCkge1xyXG4gICAgdGhpcy5fcGF1c2VkID0gZmFsc2U7XHJcblxyXG4gICAgbGV0IHJlc3VtZWQgPSBmYWxzZTtcclxuICAgIHRoaXMuX2xheWVycy5mb3JFYWNoKGwgPT4ge1xyXG4gICAgICBpZiAobC5yZXN1bWUoKSkge1xyXG4gICAgICAgIHJlc3VtZWQgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gcmVzdW1lZDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFkZHMgYSBuYW1lc3BhY2UgdG8gdGhlIGhvc3Qgd2l0aCB0aGUgbmFtZSBvZiB0aGUgZmVhdHVyZSB0byBjb250YWluIHByb3BlcnRpZXNcclxuICAgKiBhbmQgbWV0aG9kcyBmcm9tIHRoZSBmZWF0dXJlIHRoYXQgdXNlcnMgb2YgdGhlIGhvc3QgbmVlZCBhY2Nlc3MgdG8uXHJcbiAgICpcclxuICAgKiBAc2VlIEFuaW1hdGlvbkZlYXR1cmVcclxuICAgKi9cclxuICBpbnN0YWxsQXBpKCkge1xyXG4gICAgLyoqXHJcbiAgICAgKiBAaW5uZXJcclxuICAgICAqIEBuYW1lc3BhY2UgQW5pbWF0aW9uRmVhdHVyZVxyXG4gICAgICovXHJcbiAgICBjb25zdCBhcGkgPSBzdXBlci5pbnN0YWxsQXBpKCk7XHJcblxyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoYXBpLCB7XHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbWVtYmVyb2YgQW5pbWF0aW9uRmVhdHVyZVxyXG4gICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICogQHNlZSBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjcGF1c2VkXHJcbiAgICAgICAqL1xyXG4gICAgICBwYXVzZWQ6IHtcclxuICAgICAgICBnZXQ6ICgpID0+IHRoaXMucGF1c2VkLFxyXG4gICAgICB9LFxyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIEFuaW1hdGlvbkZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBzZWUgY29yZS9BbmltYXRpb25GZWF0dXJlI2xheWVyc1xyXG4gICAgICAgKi9cclxuICAgICAgbGF5ZXJzOiB7XHJcbiAgICAgICAgZ2V0OiAoKSA9PiB0aGlzLmxheWVycyxcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG5cclxuICAgIE9iamVjdC5hc3NpZ24oYXBpLCB7XHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbWVtYmVyb2YgQW5pbWF0aW9uRmVhdHVyZVxyXG4gICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICogQG1ldGhvZFxyXG4gICAgICAgKiBAc2VlIGNvcmUvQW5pbWF0aW9uRmVhdHVyZSNhZGRMYXllclxyXG4gICAgICAgKi9cclxuICAgICAgYWRkTGF5ZXI6IHRoaXMuYWRkTGF5ZXIuYmluZCh0aGlzKSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBtZW1iZXJvZiBBbmltYXRpb25GZWF0dXJlXHJcbiAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgKiBAbWV0aG9kXHJcbiAgICAgICAqIEBzZWUgY29yZS9BbmltYXRpb25GZWF0dXJlI3JlbW92ZUxheWVyXHJcbiAgICAgICAqL1xyXG4gICAgICByZW1vdmVMYXllcjogdGhpcy5yZW1vdmVMYXllci5iaW5kKHRoaXMpLFxyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIEFuaW1hdGlvbkZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBtZXRob2RcclxuICAgICAgICogQHNlZSBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjbW92ZUxheWVyXHJcbiAgICAgICAqL1xyXG4gICAgICBtb3ZlTGF5ZXI6IHRoaXMubW92ZUxheWVyLmJpbmQodGhpcyksXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbWVtYmVyb2YgQW5pbWF0aW9uRmVhdHVyZVxyXG4gICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICogQG1ldGhvZFxyXG4gICAgICAgKiBAc2VlIGNvcmUvQW5pbWF0aW9uRmVhdHVyZSNyZW5hbWVMYXllclxyXG4gICAgICAgKi9cclxuICAgICAgcmVuYW1lTGF5ZXI6IHRoaXMucmVuYW1lTGF5ZXIuYmluZCh0aGlzKSxcclxuXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbWVtYmVyb2YgQW5pbWF0aW9uRmVhdHVyZVxyXG4gICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICogQG1ldGhvZFxyXG4gICAgICAgKiBAc2VlIGNvcmUvQW5pbWF0aW9uRmVhdHVyZSNnZXRMYXllcldlaWdodFxyXG4gICAgICAgKi9cclxuICAgICAgZ2V0TGF5ZXJXZWlnaHQ6IHRoaXMuZ2V0TGF5ZXJXZWlnaHQuYmluZCh0aGlzKSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBtZW1iZXJvZiBBbmltYXRpb25GZWF0dXJlXHJcbiAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgKiBAbWV0aG9kXHJcbiAgICAgICAqIEBzZWUgY29yZS9BbmltYXRpb25GZWF0dXJlI3NldExheWVyV2VpZ2h0XHJcbiAgICAgICAqL1xyXG4gICAgICBzZXRMYXllcldlaWdodDogdGhpcy5zZXRMYXllcldlaWdodC5iaW5kKHRoaXMpLFxyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIEFuaW1hdGlvbkZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBtZXRob2RcclxuICAgICAgICogQHNlZSBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjcGF1c2VMYXllcldlaWdodFxyXG4gICAgICAgKi9cclxuICAgICAgcGF1c2VMYXllcldlaWdodDogdGhpcy5wYXVzZUxheWVyV2VpZ2h0LmJpbmQodGhpcyksXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbWVtYmVyb2YgQW5pbWF0aW9uRmVhdHVyZVxyXG4gICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICogQG1ldGhvZFxyXG4gICAgICAgKiBAc2VlIGNvcmUvQW5pbWF0aW9uRmVhdHVyZSNyZXN1bWVMYXllcldlaWdodFxyXG4gICAgICAgKi9cclxuICAgICAgcmVzdW1lTGF5ZXJXZWlnaHQ6IHRoaXMucmVzdW1lTGF5ZXJXZWlnaHQuYmluZCh0aGlzKSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBtZW1iZXJvZiBBbmltYXRpb25GZWF0dXJlXHJcbiAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgKiBAbWV0aG9kXHJcbiAgICAgICAqIEBzZWUgY29yZS9BbmltYXRpb25GZWF0dXJlI3BhdXNlTGF5ZXJcclxuICAgICAgICovXHJcbiAgICAgIHBhdXNlTGF5ZXI6IHRoaXMucGF1c2VMYXllci5iaW5kKHRoaXMpLFxyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIEFuaW1hdGlvbkZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBtZXRob2RcclxuICAgICAgICogQHNlZSBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjcmVzdW1lTGF5ZXJcclxuICAgICAgICovXHJcbiAgICAgIHJlc3VtZUxheWVyOiB0aGlzLnJlc3VtZUxheWVyLmJpbmQodGhpcyksXHJcblxyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIEFuaW1hdGlvbkZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBtZXRob2RcclxuICAgICAgICogQHNlZSBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjZ2V0VHJhbnNpdGlvbmluZ1xyXG4gICAgICAgKi9cclxuICAgICAgZ2V0VHJhbnNpdGlvbmluZzogdGhpcy5nZXRUcmFuc2l0aW9uaW5nLmJpbmQodGhpcyksXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbWVtYmVyb2YgQW5pbWF0aW9uRmVhdHVyZVxyXG4gICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICogQG1ldGhvZFxyXG4gICAgICAgKiBAc2VlIGNvcmUvQW5pbWF0aW9uRmVhdHVyZSNnZXRBbmltYXRpb25zXHJcbiAgICAgICAqL1xyXG4gICAgICBnZXRBbmltYXRpb25zOiB0aGlzLmdldEFuaW1hdGlvbnMuYmluZCh0aGlzKSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBtZW1iZXJvZiBBbmltYXRpb25GZWF0dXJlXHJcbiAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgKiBAbWV0aG9kXHJcbiAgICAgICAqIEBzZWUgY29yZS9BbmltYXRpb25GZWF0dXJlI2dldEN1cnJlbnRBbmltYXRpb25cclxuICAgICAgICovXHJcbiAgICAgIGdldEN1cnJlbnRBbmltYXRpb246IHRoaXMuZ2V0Q3VycmVudEFuaW1hdGlvbi5iaW5kKHRoaXMpLFxyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIEFuaW1hdGlvbkZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBtZXRob2RcclxuICAgICAgICogQHNlZSBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjZ2V0UGF1c2VkXHJcbiAgICAgICAqL1xyXG4gICAgICBnZXRQYXVzZWQ6IHRoaXMuZ2V0UGF1c2VkLmJpbmQodGhpcyksXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbWVtYmVyb2YgQW5pbWF0aW9uRmVhdHVyZVxyXG4gICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICogQG1ldGhvZFxyXG4gICAgICAgKiBAc2VlIGNvcmUvQW5pbWF0aW9uRmVhdHVyZSNnZXRBbmltYXRpb25UeXBlXHJcbiAgICAgICAqL1xyXG4gICAgICBnZXRBbmltYXRpb25UeXBlOiB0aGlzLmdldEFuaW1hdGlvblR5cGUuYmluZCh0aGlzKSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBtZW1iZXJvZiBBbmltYXRpb25GZWF0dXJlXHJcbiAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgKiBAbWV0aG9kXHJcbiAgICAgICAqIEBzZWUgY29yZS9BbmltYXRpb25GZWF0dXJlI2FkZEFuaW1hdGlvblxyXG4gICAgICAgKi9cclxuICAgICAgYWRkQW5pbWF0aW9uOiB0aGlzLmFkZEFuaW1hdGlvbi5iaW5kKHRoaXMpLFxyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIEFuaW1hdGlvbkZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBtZXRob2RcclxuICAgICAgICogQHNlZSBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjcmVtb3ZlQW5pbWF0aW9uXHJcbiAgICAgICAqL1xyXG4gICAgICByZW1vdmVBbmltYXRpb246IHRoaXMucmVtb3ZlQW5pbWF0aW9uLmJpbmQodGhpcyksXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbWVtYmVyb2YgQW5pbWF0aW9uRmVhdHVyZVxyXG4gICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICogQG1ldGhvZFxyXG4gICAgICAgKiBAc2VlIGNvcmUvQW5pbWF0aW9uRmVhdHVyZSNyZW5hbWVBbmltYXRpb25cclxuICAgICAgICovXHJcbiAgICAgIHJlbmFtZUFuaW1hdGlvbjogdGhpcy5yZW5hbWVBbmltYXRpb24uYmluZCh0aGlzKSxcclxuXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbWVtYmVyb2YgQW5pbWF0aW9uRmVhdHVyZVxyXG4gICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICogQG1ldGhvZFxyXG4gICAgICAgKiBAc2VlIGNvcmUvQW5pbWF0aW9uRmVhdHVyZSNnZXRBbmltYXRpb25CbGVuZE5hbWVzXHJcbiAgICAgICAqL1xyXG4gICAgICBnZXRBbmltYXRpb25CbGVuZE5hbWVzOiB0aGlzLmdldEFuaW1hdGlvbkJsZW5kTmFtZXMuYmluZCh0aGlzKSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBtZW1iZXJvZiBBbmltYXRpb25GZWF0dXJlXHJcbiAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgKiBAbWV0aG9kXHJcbiAgICAgICAqIEBzZWUgY29yZS9BbmltYXRpb25GZWF0dXJlI2dldEFuaW1hdGlvbkJsZW5kV2VpZ2h0XHJcbiAgICAgICAqL1xyXG4gICAgICBnZXRBbmltYXRpb25CbGVuZFdlaWdodDogdGhpcy5nZXRBbmltYXRpb25CbGVuZFdlaWdodC5iaW5kKHRoaXMpLFxyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIEFuaW1hdGlvbkZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBtZXRob2RcclxuICAgICAgICogQHNlZSBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjc2V0QW5pbWF0aW9uQmxlbmRXZWlnaHRcclxuICAgICAgICovXHJcbiAgICAgIHNldEFuaW1hdGlvbkJsZW5kV2VpZ2h0OiB0aGlzLnNldEFuaW1hdGlvbkJsZW5kV2VpZ2h0LmJpbmQodGhpcyksXHJcblxyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIEFuaW1hdGlvbkZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBtZXRob2RcclxuICAgICAgICogQHNlZSBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjcGxheUFuaW1hdGlvblxyXG4gICAgICAgKi9cclxuICAgICAgcGxheUFuaW1hdGlvbjogdGhpcy5wbGF5QW5pbWF0aW9uLmJpbmQodGhpcyksXHJcblxyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIEFuaW1hdGlvbkZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBtZXRob2RcclxuICAgICAgICogQHNlZSBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjcGxheU5leHRBbmltYXRpb25cclxuICAgICAgICovXHJcbiAgICAgIHBsYXlOZXh0QW5pbWF0aW9uOiB0aGlzLnBsYXlOZXh0QW5pbWF0aW9uLmJpbmQodGhpcyksXHJcblxyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIEFuaW1hdGlvbkZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBtZXRob2RcclxuICAgICAgICogQHNlZSBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjcGF1c2VBbmltYXRpb25cclxuICAgICAgICovXHJcbiAgICAgIHBhdXNlQW5pbWF0aW9uOiB0aGlzLnBhdXNlQW5pbWF0aW9uLmJpbmQodGhpcyksXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbWVtYmVyb2YgQW5pbWF0aW9uRmVhdHVyZVxyXG4gICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICogQG1ldGhvZFxyXG4gICAgICAgKiBAc2VlIGNvcmUvQW5pbWF0aW9uRmVhdHVyZSNyZXN1bWVBbmltYXRpb25cclxuICAgICAgICovXHJcbiAgICAgIHJlc3VtZUFuaW1hdGlvbjogdGhpcy5yZXN1bWVBbmltYXRpb24uYmluZCh0aGlzKSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBtZW1iZXJvZiBBbmltYXRpb25GZWF0dXJlXHJcbiAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgKiBAbWV0aG9kXHJcbiAgICAgICAqIEBzZWUgY29yZS9BbmltYXRpb25GZWF0dXJlI3N0b3BBbmltYXRpb25cclxuICAgICAgICovXHJcbiAgICAgIHN0b3BBbmltYXRpb246IHRoaXMuc3RvcEFuaW1hdGlvbi5iaW5kKHRoaXMpLFxyXG5cclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBtZW1iZXJvZiBBbmltYXRpb25GZWF0dXJlXHJcbiAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgKiBAbWV0aG9kXHJcbiAgICAgICAqIEBzZWUgY29yZS9BbmltYXRpb25GZWF0dXJlI3BhdXNlXHJcbiAgICAgICAqL1xyXG4gICAgICBwYXVzZTogdGhpcy5wYXVzZS5iaW5kKHRoaXMpLFxyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIEFuaW1hdGlvbkZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBtZXRob2RcclxuICAgICAgICogQHNlZSBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjcmVzdW1lXHJcbiAgICAgICAqL1xyXG4gICAgICByZXN1bWU6IHRoaXMucmVzdW1lLmJpbmQodGhpcyksXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZSBlYWNoIGFuaW1hdGlvbiBsYXllci5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBkZWx0YVRpbWUgLSBUaW1lIHNpbmNlIHRoZSBsYXN0IHVwZGF0ZS5cclxuICAgKi9cclxuICB1cGRhdGUoZGVsdGFUaW1lKSB7XHJcbiAgICBpZiAoIXRoaXMuX2xheWVycy5sZW5ndGgpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLl9wYXVzZWQpIHtcclxuICAgICAgZGVsdGFUaW1lID0gMDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBSZS1ldmFsdWF0ZSBpbnRlcm5hbCB3ZWlnaHRzIGZvciBsYXllcnNcclxuICAgIHRoaXMuX3VwZGF0ZUludGVybmFsV2VpZ2h0cygpO1xyXG5cclxuICAgIC8vIFVwZGF0ZSBsYXllcnNcclxuICAgIHRoaXMuX2xheWVycy5mb3JFYWNoKGxheWVyID0+IHtcclxuICAgICAgbGF5ZXIudXBkYXRlKGRlbHRhVGltZSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBzdXBlci51cGRhdGUoZGVsdGFUaW1lKTtcclxuICB9XHJcblxyXG4gIGRpc2NhcmQoKSB7XHJcbiAgICB0aGlzLl9sYXllcnMuZm9yRWFjaChsYXllciA9PiB7XHJcbiAgICAgIGxheWVyLmRpc2NhcmQoKTtcclxuICAgIH0pO1xyXG5cclxuICAgIGRlbGV0ZSB0aGlzLl9sYXllcnM7XHJcbiAgICBkZWxldGUgdGhpcy5fbGF5ZXJNYXA7XHJcblxyXG4gICAgc3VwZXIuZGlzY2FyZCgpO1xyXG4gIH1cclxufVxyXG5cclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEFuaW1hdGlvbkZlYXR1cmUsICdFVkVOVFMnLCB7XHJcbiAgdmFsdWU6IHtcclxuICAgIC4uLk9iamVjdC5nZXRQcm90b3R5cGVPZihBYnN0cmFjdEhvc3RGZWF0dXJlKS5FVkVOVFMsXHJcbiAgICBhZGRMYXllcjogJ29uQWRkTGF5ZXJFdmVudCcsXHJcbiAgICByZW1vdmVMYXllcjogJ29uUmVtb3ZlTGF5ZXJFdmVudCcsXHJcbiAgICByZW5hbWVMYXllcjogJ29uUmVuYW1lTGF5ZXJFdmVudCcsXHJcbiAgICBhZGRBbmltYXRpb246ICdvbkFkZEFuaW1hdGlvbkV2ZW50JyxcclxuICAgIHJlbW92ZUFuaW1hdGlvbjogJ29uUmVtb3ZlZEFuaW1hdGlvbkV2ZW50JyxcclxuICAgIHJlbmFtZUFuaW1hdGlvbjogJ29uUmVuYW1lQW5pbWF0aW9uRXZlbnQnLFxyXG4gICAgcGxheUFuaW1hdGlvbjogJ29uUGxheUV2ZW50JyxcclxuICAgIHBsYXlOZXh0QW5pbWF0aW9uOiAnb25OZXh0RXZlbnQnLFxyXG4gICAgcGF1c2VBbmltYXRpb246ICdvblBhdXNlRXZlbnQnLFxyXG4gICAgcmVzdW1lQW5pbWF0aW9uOiAnb25SZXN1bWVFdmVudCcsXHJcbiAgICBpbnRlcnJ1cHRBbmltYXRpb246ICdvbkludGVycnVwdEV2ZW50JyxcclxuICAgIHN0b3BBbmltYXRpb246ICdvblN0b3BFdmVudCcsXHJcbiAgfSxcclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBBbmltYXRpb25GZWF0dXJlO1xyXG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cclxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVC0wXHJcbi8qIGVzbGludC1kaXNhYmxlIG5vLXVuZGVyc2NvcmUtZGFuZ2xlICovXHJcbi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXHJcbmltcG9ydCBNYW5hZ2VkQW5pbWF0aW9uTGF5ZXJJbnRlcmZhY2UgZnJvbSAnLi9hbmltcGFjay9NYW5hZ2VkQW5pbWF0aW9uTGF5ZXJJbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBBbmltYXRpb25UeXBlcyB9IGZyb20gJy4vYW5pbXBhY2svQW5pbWF0aW9uRmVhdHVyZSc7XHJcbmltcG9ydCBTU01MU3BlZWNobWFya0ludGVyZmFjZSBmcm9tICcuL2F3c3BhY2svU1NNTFNwZWVjaG1hcmtJbnRlcmZhY2UnO1xyXG5pbXBvcnQgQWJzdHJhY3RIb3N0RmVhdHVyZSBmcm9tICcuL0Fic3RyYWN0SG9zdEZlYXR1cmUnO1xyXG5pbXBvcnQgeyBRdWFkcmF0aWMgfSBmcm9tICcuL2FuaW1wYWNrL0Vhc2luZyc7XHJcbmltcG9ydCBNYXRoVXRpbHMgZnJvbSAnLi9NYXRoVXRpbHMnO1xyXG5pbXBvcnQgVXRpbHMgZnJvbSAnLi9VdGlscyc7XHJcblxyXG4vKipcclxuICogRW51bSBmb3IgYXhpcyBkaXJlY3Rpb25zLlxyXG4gKlxyXG4gKiBAcmVhZG9ubHlcclxuICogQGVudW0ge0NsYXNzfVxyXG4gKi9cclxuY29uc3QgQXhpc01hcCA9IHtcclxuICBQb3NpdGl2ZVg6IFsxLCAwLCAwXSxcclxuICBOZWdhdGl2ZVg6IFstMSwgMCwgMF0sXHJcbiAgUG9zaXRpdmVZOiBbMCwgMSwgMF0sXHJcbiAgTmVnYXRpdmVZOiBbMCwgLTEsIDBdLFxyXG4gIFBvc2l0aXZlWjogWzAsIDAsIDFdLFxyXG4gIE5lZ2F0aXZlWjogWzAsIDAsIC0xXSxcclxufTtcclxuXHJcbmNvbnN0IEZhY2VUYXJnZXRUeXBlcyA9IHtcclxuICBFeWVDZW50ZXI6IDAsXHJcbiAgRXllTGVmdDogMSxcclxuICBFeWVSaWdodDogMixcclxuICBNb3V0aDogMyxcclxufVxyXG5cclxuLy8gQXZlcmFnZSBkaXN0YW5jZSBiZXR3ZWVuIHB1cGlscyBpcyAuMDY0bSwgZ29sZGVuIHJhdGlvIHNheXMgdGhhdCB0aGUgZGlzdGFuY2VcclxuLy8gZnJvbSBjZW50ZXIgb2YgdGhlIHB1cGlscyB0byB0aGUgY2VudGVyIG9mIHRoZSBtb3V0aCBzaG91bGQgYmUgYWJvdXQgdGhlIHNhbWUuXHJcbmNvbnN0IEZhY2VWZWN0b3JzID0gW1xyXG4gIFswLCAwLCAwXSxcclxuICBbLS4wMzIsIDAsIDBdLFxyXG4gIFsuMDMyLCAwLCAwXSxcclxuICBbMCwgLS4wNjQsIDBdXHJcbl07XHJcblxyXG4vLyBUaW1lIHJhbmdlcyB0byB1c2Ugd2hlbiBjaG9vc2luZyBhIG5ldyByYW5kb20gd2FpdCB0aW1lIGJldHdlZW4gc2FjY2FkZXNcclxuY29uc3QgTWljcm9TYWNjYWRlV2FpdFJhbmdlcyA9IHtcclxuICBkZWZhdWx0OiBbMC44LCAxLjc1XSxcclxuICBwb3N0TWFjcm86IFswLjYsIDEuMzEyNV0sXHJcbn07XHJcblxyXG5jb25zdCBNYWNyb1NhY2NhZGVXYWl0UmFuZ2VzID0ge1xyXG4gIGRlZmF1bHQ6IFs1LjAsIDguMF0sXHJcbiAgbW91dGhUYXJnZXQ6IFswLjIsIDAuNzVdLCAvLyBMb29rIGF3YXkgZnJvbSBhIG1vdXRoIHRhcmdldCB0aGUgZmFzdGVzdFxyXG4gIGV5ZVRhcmdldDogWzEuNSwgNC4wXVxyXG59O1xyXG5cclxuLy8gTWluaW11bSBhbmdsZSBpbiBkZWdyZWVzIHRoZSBleWUgZGlyZWN0aW9uIG11c3QgY2hhbmdlIHRvIHRyaWdnZXIgYSBibGluayBhbmltYXRpb25cclxuY29uc3QgQmxpbmtUaHJlc2hvbGQgPSAzNTtcclxuXHJcbi8vIE1heGltdW0gbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byB1c2UgZm9yIGNhbGN1bGF0aW5nIGxvb2sgc3BlZWRcclxuY29uc3QgTWF4RGVsdGEgPSAxMDAgLyAzO1xyXG5cclxuLyoqXHJcbiAqIFBvaW50T2ZJbnRlcmVzdCBjb250cm9scyB0aGUgZ2F6ZSBkaXJlY3Rpb24gb2YgdGhlIGhvc3QuIEdpdmVuIG9uZSBvciBtb3JlXHJcbiAqIGFuaW1hdGlvbnMgb2YgdHlwZSBCbGVuZDJkU3RhdGUsIGl0IGNhbGN1bGF0ZXMgdGhlIGFuZ2xlcyBiZXR3ZWVuIHRoZSBsb29rVHJhY2tlclxyXG4gKiBvYmplY3QgKGdlbmVyYWxseSBhIGpvaW50IGluIHRoZSBob3N0J3Mgc2tlbGV0b24pIGFuZCB0aGUgbG9va1RhcmdldCAodGhlIG9iamVjdFxyXG4gKiB0aGUgaG9zdCBzaG91bGQgbG9vayBhdCkgYW5kIGRyaXZlcyB0aGUgbWFuYWdlZCBCbGVuZDJkU3RhdGVzJyBYIGFuZCBZIGJsZW5kXHJcbiAqIHZhbHVlcyB1c2luZyB0aGUgcmVzdWx0LiBZb3UgY2FuIG9wdGlvbmFsbHkgYWRkIHNhY2NhZGljIG1vdmVtZW50IHRvIGFueSBtYW5hZ2VkXHJcbiAqIGFuaW1hdGlvbiB0byBoZWxwIG1ha2UgdGhlIGhvc3QncyBleWVzIGFwcGVhciBhbGl2ZSB3aGVuIGZvY3VzZWQgb24gdGhlIHNhbWVcclxuICogcG9pbnQgZm9yIGV4dGVkZWQgcGVyaW9kcyBvZiB0aW1lLiBJZiBibGluayBhbmltYXRpb25zIGFyZSBzcGVjaWZpZWQsIGEgYmxpbmtcclxuICogd2lsbCBiZSBwbGF5ZWQgZHVyaW5nIGxhcmdlIGNoYW5nZXMgaW4gZ2F6ZSBkaXJlY3Rpb24uXHJcbiAqXHJcbiAqIEBleHRlbmRzIEFic3RyYWN0SG9zdEZlYXR1cmVcclxuICogQGFsaWFzIGNvcmUvUG9pbnRPZkludGVyZXN0RmVhdHVyZVxyXG4gKiBAaW1wbGVtZW50cyBTU01MU3BlZWNobWFya0ludGVyZmFjZVxyXG4gKiBAaW1wbGVtZW50cyBNYW5hZ2VkQW5pbWF0aW9uTGF5ZXJJbnRlcmZhY2VcclxuICovXHJcbmNsYXNzIFBvaW50T2ZJbnRlcmVzdEZlYXR1cmUgZXh0ZW5kcyBBYnN0cmFjdEhvc3RGZWF0dXJlLm1peChcclxuICBTU01MU3BlZWNobWFya0ludGVyZmFjZS5NaXhpbixcclxuICBNYW5hZ2VkQW5pbWF0aW9uTGF5ZXJJbnRlcmZhY2UuTWl4aW5cclxuKSB7XHJcbiAgLyoqXHJcbiAgICogQGNvbnN0cnVjdG9yXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge2NvcmUvSG9zdE9iamVjdH0gaG9zdCAtIEhvc3QgdGhhdCBvd25zIHRoZSBmZWF0dXJlLlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0PX0gb3B0aW9ucyAtIE9wdGlvbnMgZm9yIHRoZSBmZWF0dXJlLlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0PX0gdGFyZ2V0IC0gM0QgdHJhbnNmb3JtYXRpb24gbm9kZSB0aGF0IHRoZSBob3N0IHNob3VsZCB0cnkgdG9cclxuICAgKiBsb29rIGF0LlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zLmxvb2tUcmFja2VyIC0gM0QgdHJhbnNmb3JtYXRpb24gbm9kZSB0aGF0IHJlcHJlc2VudHNcclxuICAgKiB0aGUgZGlyZWN0aW9uIHRoZSBob3N0IGlzIGN1cnJlbnRseSBsb29raW5nIGR1cmluZyBhbmltYXRpb24uXHJcbiAgICogQHBhcmFtIHtPYmplY3Q9fSBvcHRpb25zLnNjZW5lIC0gRW5naW5lLXNwZWNpZmljIHNjZW5lIG9iamVjdCB0aGF0IGNvbnRhaW5zXHJcbiAgICogdGhlIGhvc3QuIFRoaXMgb2JqZWN0IG11c3QgYmUgZGVmaW5lZCBpZiB1c2luZyAnc2V0VGFyZ2V0QnlOYW1lJyBvciAnU2V0VGFyZ2V0QnlJZCdcclxuICAgKiBtZXRob2RzLlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0PX0gbG9va09wdGlvbnMgLSBPcHRpb25zIGZvciB0aGUgbG9vayBhbmltYXRpb24gbGF5ZXJzLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbbG9va09wdGlvbnMuYmxlbmRUaW1lPTAuMV0gLSBEZWZhdWx0IGFtb3VudCBvZiB0aW1lIGl0IHdpbGxcclxuICAgKiB0YWtlIHRvIG1hbmlwdWxhdGUgdGhlIHdlaWdodHMgb2YgdGhlIGxvb2sgbGF5ZXJzLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbbG9va09wdGlvbnMuZWFzaW5nRm49UXVhZHJhdGljLkluT3V0XSAtIERlZmF1bHQgZWFzaW5nIGZ1bmN0aW9uXHJcbiAgICogdG8gdXNlIHdoZW4gbWFuaXB1bGF0aW5nIGxvb2sgbGF5ZXIgd2VpZ2h0cy5cclxuICAgKiBAcGFyYW0ge0FycmF5LjxPYmplY3Q+fSBbbG9va09wdGlvbnMubGF5ZXJzPVtdXSAtIEFuIGFycmF5IG9mIGxheWVyIG9wdGlvbnNcclxuICAgKiBvYmplY3RzIHRvIHJlZ2lzdGVyIGFzIGxvb2sgbGF5ZXJzLlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0PX0gYmxpbmtPcHRpb25zIC0gT3B0aW9ucyBmb3IgdGhlIGJsaW5rIGFuaW1hdGlvbiBsYXllcnMuXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtibGlua09wdGlvbnMuYmxlbmRUaW1lPTAuMDc1XSAtIERlZmF1bHQgYW1vdW50IG9mIHRpbWUgaXRcclxuICAgKiB3aWxsIHRha2UgdG8gbWFuaXB1bGF0ZSB0aGUgd2VpZ2h0cyBvZiB0aGUgYmxpbmsgbGF5ZXJzLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbYmxpbmtPcHRpb25zLmVhc2luZ0ZuPVF1YWRyYXRpYy5Jbk91dF0gLSBEZWZhdWx0IGVhc2luZyBmdW5jdGlvblxyXG4gICAqIHRvIHVzZSB3aGVuIG1hbmlwdWxhdGluZyBibGluayBsYXllciB3ZWlnaHRzLlxyXG4gICAqIEBwYXJhbSB7QXJyYXkuPE9iamVjdD59IFtibGlua09wdGlvbnMubGF5ZXJzPVtdXSAtIEFuIGFycmF5IG9mIGxheWVyIG9wdGlvbnNcclxuICAgKiBvYmplY3RzIHRvIHJlZ2lzdGVyIGFzIGJsaW5rIGxheWVycy5cclxuICAgKi9cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIGhvc3QsXHJcbiAgICB7XHJcbiAgICAgIHRhcmdldCxcclxuICAgICAgbG9va1RyYWNrZXIsXHJcbiAgICAgIHNjZW5lXHJcbiAgICB9ID0ge30sXHJcbiAgICB7XHJcbiAgICAgIGJsZW5kVGltZTogbG9va0JsZW5kVGltZSA9IDAuMSxcclxuICAgICAgZWFzaW5nRm46IGxvb2tFYXNpbmdGbiA9IFF1YWRyYXRpYy5Jbk91dCxcclxuICAgICAgbGF5ZXJzOiBsb29rTGF5ZXJzID0gW10sXHJcbiAgICB9ID0ge30sXHJcbiAgICB7XHJcbiAgICAgIGJsZW5kVGltZTogYmxpbmtCbGVuZFRpbWUgPSAwLjA3NSxcclxuICAgICAgZWFzaW5nRm46IGJsaW5rRWFzaW5nRm4gPSBRdWFkcmF0aWMuSW5PdXQsXHJcbiAgICAgIGxheWVyczogYmxpbmtMYXllcnMgPSBbXSxcclxuICAgIH0gPSB7fVxyXG4gICkge1xyXG4gICAgc3VwZXIoaG9zdCk7XHJcblxyXG4gICAgaWYgKCF0aGlzLmNvbnN0cnVjdG9yLl92YWxpZGF0ZVRyYW5zZm9ybU9iamVjdChsb29rVHJhY2tlcikpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgaW5pdGlhbGl6ZSBQb2ludE9mSW50ZXJlc3RGZWF0dXJlIG9uIGhvc3QgJHt0aGlzLl9ob3N0LmlkfS4gTG9va1RyYWNrZXIgbXVzdCBiZSBkZWZpbmVkIGFzIGEgdmFsaWQgdHJhbnNmb3JtYXRpb24gb2JqZWN0LmApO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fbG9va1RyYWNrZXIgPSBsb29rVHJhY2tlcjtcclxuXHJcbiAgICB0aGlzLl9zY2VuZSA9IHNjZW5lO1xyXG4gICAgdGhpcy5fdGFyZ2V0ID0gdGFyZ2V0IHx8IG51bGw7XHJcbiAgICB0aGlzLl9wcmV2VGFyZ2V0UG9zID0gWzAsIDAsIDBdO1xyXG4gICAgdGhpcy5faXNUYXJnZXRNb3ZpbmcgPSBmYWxzZTtcclxuICAgIHRoaXMuX2xvb2tMYXllcnMgPSB0aGlzLl9sb29rTGF5ZXJzIHx8IHt9O1xyXG4gICAgdGhpcy5fdHJhY2tpbmdDb25maWdzID0gdGhpcy5fdHJhY2tpbmdDb25maWdzIHx8IFtdO1xyXG4gICAgdGhpcy5fYmxpbmtMYXllcnMgPSB0aGlzLl9ibGlua0xheWVycyB8fCB7fTtcclxuXHJcbiAgICAvLyBSZWdpc3RlciB0aGUgbG9vayBsYXllcnNcclxuICAgIGxvb2tMYXllcnMuZm9yRWFjaCgoe1xyXG4gICAgICBuYW1lLFxyXG4gICAgICBhbmltYXRpb24sXHJcbiAgICAgIG1heFNwZWVkLFxyXG4gICAgICByZWZlcmVuY2UsXHJcbiAgICAgIGZvcndhcmRBeGlzLFxyXG4gICAgICBoYXNTYWNjYWRlLFxyXG4gICAgICBibGVuZFRpbWUsXHJcbiAgICAgIGVhc2luZ0ZuXHJcbiAgICB9KSA9PiB7XHJcbiAgICAgIHRoaXMucmVnaXN0ZXJMb29rTGF5ZXIobmFtZSwge1xyXG4gICAgICAgIGFuaW1hdGlvbixcclxuICAgICAgICBtYXhTcGVlZCxcclxuICAgICAgICByZWZlcmVuY2UsXHJcbiAgICAgICAgZm9yd2FyZEF4aXMsXHJcbiAgICAgICAgaGFzU2FjY2FkZSxcclxuICAgICAgICBibGVuZFRpbWU6IGJsZW5kVGltZSAhPT0gdW5kZWZpbmVkID8gYmxlbmRUaW1lIDogbG9va0JsZW5kVGltZSxcclxuICAgICAgICBlYXNpbmdGbjogZWFzaW5nRm4gIT09IHVuZGVmaW5lZCA/IGVhc2luZ0ZuIDogbG9va0Vhc2luZ0ZuLFxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIFJlZ2lzdGVyIHRoZSBibGluayBsYXllcnNcclxuICAgIGJsaW5rTGF5ZXJzLmZvckVhY2goKHsgbmFtZSwgYW5pbWF0aW9uLCBibGVuZFRpbWUsIGVhc2luZ0ZuIH0pID0+IHtcclxuICAgICAgdGhpcy5yZWdpc3RlckJsaW5rTGF5ZXIobmFtZSwge1xyXG4gICAgICAgIGFuaW1hdGlvbixcclxuICAgICAgICBibGVuZFRpbWU6IGJsZW5kVGltZSAhPT0gdW5kZWZpbmVkID8gYmxlbmRUaW1lIDogYmxpbmtCbGVuZFRpbWUsXHJcbiAgICAgICAgZWFzaW5nRm46IGVhc2luZ0ZuICE9PSB1bmRlZmluZWQgPyBlYXNpbmdGbiA6IGJsaW5rRWFzaW5nRm4sXHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIGFuZCBzZXRzIHRoZSB0YXJnZXQgb2JqZWN0IHRoZSBob3N0IHNob3VsZCBsb29rIGF0LlxyXG4gICAqXHJcbiAgICogQHR5cGUge09iamVjdHxudWxsfVxyXG4gICAqL1xyXG4gIGdldCB0YXJnZXQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fdGFyZ2V0O1xyXG4gIH1cclxuXHJcbiAgc2V0IHRhcmdldCh0YXJnZXQpIHtcclxuICAgIHRoaXMuX3RhcmdldCA9IHRhcmdldCB8fCBudWxsO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIGEgdmVjdG9yIHJlcHJlc2VudGluZyB0aGUgZ2xvYmFsIHBvc2l0aW9uIG9mIGFuIG9iamVjdC4gU2hvdWxkIGJlXHJcbiAgICogb3ZlcmxvYWRlZCBmb3IgZWFjaCByZW5kZXJpbmcgZW5naW5lIGltcGxlbWVudGF0aW9uLlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7YW55fSBfb2JqIC0gRW5naW5lLXNwZWNpZmljIDNEIHRyYW5zZm9ybSBvYmplY3QuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7QXJyYXkuPG51bWJlcj59IC0gQW4gYXJyYXkgY29uc2lzdGluZyBvZiB0aHJlZSBudW1iZXJzIHJlcHJlc2VudGluZ1xyXG4gICAqIHgsIHkgYW5kIHogY29vcmRpbmF0ZXMuXHJcbiAgICovXHJcbiAgc3RhdGljIF9nZXRXb3JsZFBvc2l0aW9uKG9iaikge1xyXG4gICAgcmV0dXJuIFswLCAwLCAwXTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiBhIG1hdHJpeCByZXByZXNlbnRpbmcgdGhlIGdsb2JhbCB0cmFuc2Zvcm1hdGlvbiBtYXRyaXggb2YgYW4gb2JqZWN0LlxyXG4gICAqIFNob3VsZCBiZSBvdmVybG9hZGVkIGZvciBlYWNoIHJlbmRlcmluZyBlbmdpbmUgaW1wbGVtZW50YXRpb24uXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHthbnl9IG9iaiAtIEVuZ2luZS1zcGVjaWZpYyAzRCB0cmFuc2Zvcm0gb2JqZWN0LlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0FycmF5LjxudW1iZXI+fSAtIEFuIGFycmF5IGNvbnNpc3Rpbmcgb2YgMTYgbnVtYmVycyByZXByZXNlbnRpbmdcclxuICAgKiB0aGUgM2QgdHJhbnNmb3JtYXRpb24uXHJcbiAgICovXHJcbiAgc3RhdGljIF9nZXRXb3JsZE1hdHJpeChvYmopIHtcclxuICAgIHJldHVybiBbMSwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMCwgMV07XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSb3RhdGUgdGhlIGdpdmVuIGxvY2FsIGRpcmVjdGlvbiB2ZWN0b3IgYnkgdGhlIG9iamVjdCdzIHdvcmxkIHJvdGF0aW9uIG1hdHJpeC5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge2FueX0gb2JqIC0gRW5naW5lLXNwZWNpZmljIDNEIHRyYW5zZm9ybSBvYmplY3QuXHJcbiAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gZm9yd2FyZFZlY3RvciAtIFVuaXQgdmVjdG9yIHJlcHJlc2VudGluZyB0aGUgbG9jYWxcclxuICAgKiBmb3J3YXJkIGRpcmVjdGlvbiBvZiB0aGUgb2JqZWN0LlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0FycmF5LjxudW1iZXI+fVxyXG4gICAqL1xyXG4gIHN0YXRpYyBfZ2V0T2JqZWN0RGlyZWN0aW9uKG9iaiwgZm9yd2FyZFZlY3RvciA9IEF4aXNNYXAuUG9zaXRpdmVaKSB7XHJcbiAgICBjb25zdCByb3RhdGlvbiA9IE1hdGhVdGlscy5nZXRSb3RhdGlvbk1hdHJpeCh0aGlzLl9nZXRXb3JsZE1hdHJpeChvYmopKTtcclxuXHJcbiAgICByZXR1cm4gTWF0aFV0aWxzLnJvdGF0ZVZlY3Rvcihmb3J3YXJkVmVjdG9yLCByb3RhdGlvbik7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDYWxjdWxhdGUgaG9yaXpvbnRhbCBhbmQgdmVydGljYWwgbG9vayBhbmdsZXMgaW4gZGVncmVlcyBnaXZlbiBzcGhlcmljYWwgdGhldGFcclxuICAgKiBhbmQgcGhpIGFuZ2xlcyBpbiByYWRpYW5zLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IHRoZXRhIC0gVmVydGljYWwvcG9sYXIgYW5nbGUgaW4gcmFkaWFucyB3aGVyZSAwIHBvaW50cyBkaXJlY3RseVxyXG4gICAqIGFsb25nIHBvc2l0aXZlIFkgYXhpcy5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gcGhpIC0gSG9yaXpvbnRhbC9hemltdXRoYWwgYW5nbGUgaW4gcmFkaWFucy5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtPYmplY3R9IC0gQW4gb2JqZWN0IHdpdGggdGhlIHNpZ25hdHVyZSB7aDogbnVtYmVyLCB2OiBudW1iZXJ9IHdoZXJlXHJcbiAgICogaCByZXByZXNlbnRzIGhvcml6b250YWwgcm90YXRpb24gaW4gZGVncmVlcyBhbmQgdiByZXByZXNlbnRzIHZlcnRpY2FsIHJvdGF0aW9uXHJcbiAgICogaW4gZGVncmVlcy5cclxuICAgKi9cclxuICBzdGF0aWMgX3NwaGVyaWNhbFRvQmxlbmRWYWx1ZSh0aGV0YSwgcGhpKSB7XHJcbiAgICBjb25zdCBoID0gTWF0aFV0aWxzLnRvRGVncmVlcyhwaGkpO1xyXG5cclxuICAgIC8vIE9mZnNldCB0aGUgdmVydGljYWwgYW5nbGUgc28gMCBpcyBwb2ludGluZyBmb3J3YXJkIGluc3RlYWQgb2YgdXBcclxuICAgIGNvbnN0IHYgPSBNYXRoVXRpbHMudG9EZWdyZWVzKHRoZXRhKSAtIDkwO1xyXG5cclxuICAgIC8vIENvbnZlcnQgdmVydGljYWwgYW5nbGUgdG8gLTE4MCwgMTgwIHJhbmdlXHJcbiAgICByZXR1cm4geyBoLCB2IH1cclxuICB9XHJcblxyXG4gIF9vbkxheWVyQWRkZWQoeyBuYW1lIH0pIHtcclxuICAgIHRoaXMuX2xvb2tMYXllcnMgPSB0aGlzLl9sb29rTGF5ZXJzIHx8IHt9O1xyXG4gICAgdGhpcy5fYmxpbmtMYXllcnMgPSB0aGlzLl9ibGlua0xheWVycyB8fCB7fTtcclxuXHJcbiAgICBzdXBlci5fb25MYXllckFkZGVkKHsgbmFtZSB9KTtcclxuXHJcbiAgICAvLyBWYWxpZGF0ZSB0aGUgbG9vayBhbmltYXRpb25cclxuICAgIGlmICh0aGlzLl9sb29rTGF5ZXJzW25hbWVdICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhpcy5fcmVnaXN0ZXJMb29rQW5pbWF0aW9uKG5hbWUsIHRoaXMuX2xvb2tMYXllcnNbbmFtZV0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgX29uQW5pbWF0aW9uQWRkZWQoeyBsYXllck5hbWUsIGFuaW1hdGlvbk5hbWUgfSkge1xyXG4gICAgdGhpcy5fbG9va0xheWVycyA9IHRoaXMuX2xvb2tMYXllcnMgfHwge307XHJcbiAgICB0aGlzLl9ibGlua0xheWVycyA9IHRoaXMuX2JsaW5rTGF5ZXJzIHx8IHt9O1xyXG5cclxuICAgIHN1cGVyLl9vbkFuaW1hdGlvbkFkZGVkKHsgbGF5ZXJOYW1lIH0pO1xyXG5cclxuICAgIC8vIFZhbGlkYXRlIHRoZSBsb29rIGFuaW1hdGlvblxyXG4gICAgaWYgKHRoaXMuX2xvb2tMYXllcnNbbGF5ZXJOYW1lXSA9PT0gYW5pbWF0aW9uTmFtZSkge1xyXG4gICAgICB0aGlzLl9yZWdpc3Rlckxvb2tBbmltYXRpb24obGF5ZXJOYW1lLCBhbmltYXRpb25OYW1lKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEVuc3VyZSB0aGF0IHJlZ2lzdGVyZWQgbG9vayBhbmltYXRpb25zIGFyZSBCbGVuZDJkU3RhdGVzLlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllck5hbWUgLSBOYW1lIG9mIHRoZSBsYXllciB0aGF0IGNvbnRhaW5zIHRoZSBsb29rIGFuaW1hdGlvbi5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gYW5pbWF0aW9uTmFtZSAtIE5hbWUgb2YgdGhlIGFuaW1hdGlvbi5cclxuICAgKi9cclxuICBfcmVnaXN0ZXJMb29rQW5pbWF0aW9uKGxheWVyTmFtZSwgYW5pbWF0aW9uTmFtZSkge1xyXG4gICAgaWYgKHRoaXMuX21hbmFnZWRMYXllcnNbbGF5ZXJOYW1lXS5hbmltYXRpb25zW2FuaW1hdGlvbk5hbWVdLmlzQWN0aXZlKSB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICBBbmltYXRpb25UeXBlc1t0aGlzLl9ob3N0LkFuaW1hdGlvbkZlYXR1cmUuZ2V0QW5pbWF0aW9uVHlwZShcclxuICAgICAgICAgIGxheWVyTmFtZSxcclxuICAgICAgICAgIGFuaW1hdGlvbk5hbWVcclxuICAgICAgICApXSAhPT0gQW5pbWF0aW9uVHlwZXMuYmxlbmQyZFxyXG4gICAgICApIHtcclxuICAgICAgICAvLyBXYXJuIGFuZCBkZWFjdGl2YXRlIGlmIHRoZSByZWdpc3RlcmVkIHN0YXRlIGlzIG5vdCBibGVuZDJkXHJcbiAgICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgICAgYENhbm5vdCByZWdpc3RlciBQb2ludCBvZiBJbnRlcmVzdCBsb29rIGFuaW1hdGlvbiAke2FuaW1hdGlvbk5hbWV9IG9uIGxheWVyICR7bGF5ZXJOYW1lfSBmb3IgaG9zdCAke3RoaXMuX2hvc3QuaWR9LiBMb29rIGFuaW1hdGlvbnMgbXVzdCBiZSBvZiB0eXBlICdibGVuZDJkJy5gXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLl9tYW5hZ2VkTGF5ZXJzW2xheWVyTmFtZV0uYW5pbWF0aW9uc1tcclxuICAgICAgICAgIGFuaW1hdGlvbk5hbWVcclxuICAgICAgICBdLmlzQWN0aXZlID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENoZWNrIGlmIHRoZSBnaXZlbiBvYmplY3QgaXMgbm90IG9mIGFuIGVuZ2luZS1zcGVjaWZpYyB0eXBlLiBTaG91bGRcclxuICAgKiBiZSBvdmVybG9hZGVkIGZvciBlYWNoIHJlbmRlcmluZyBlbmdpbmUgaW1wbGVtZW50YXRpb24uXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHthbnl9IG9iaiAtIE9iamVjdCB0byB2YWxpZGF0ZS5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gICAqL1xyXG4gIHN0YXRpYyBfdmFsaWRhdGVUcmFuc2Zvcm1PYmplY3Qob2JqKSB7XHJcbiAgICByZXR1cm4gb2JqIGluc3RhbmNlb2YgT2JqZWN0O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2hlY2sgaWYgdGhlIGdpdmVuIGNvbmZpZ3VyYXRpb24gb2JqZWN0IGhhcyBhbHJlYWR5IGJlZW4gc3RvcmVkIGFzIGEgdHJhY2tpbmdcclxuICAgKiBjb25maWcuIElmIGl0IGhhcywgcmV0dXJuIHRoZSBzdG9yZWQgY29uZmlndXJhdGlvbi4gT3RoZXJ3aXNlLCBzdG9yZSBhbmRcclxuICAgKiByZXR1cm4gaXQuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyAtIE9iamVjdCBjb250YWluaW5nIHRyYWNrZXIsIHJlZmVyZW5jZSBhbmQgZm9yd2FyZEF4aXNcclxuICAgKiBwcm9wZXJ0aWVzLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge09iamVjdH1cclxuICAgKi9cclxuICBfYWRkVHJhY2tpbmdDb25maWcoY29uZmlnKSB7XHJcbiAgICBjb25zdCB0cmFja2luZ0NvbmZpZyA9IHRoaXMuX3RyYWNraW5nQ29uZmlncy5maW5kKGMgPT5cclxuICAgICAgYy5yZWZlcmVuY2UgPT09IGNvbmZpZy5yZWZlcmVuY2UgJiYgYy5mb3J3YXJkQXhpcyA9PT0gY29uZmlnLmZvcndhcmRBeGlzXHJcbiAgICApO1xyXG5cclxuICAgIGlmICh0cmFja2luZ0NvbmZpZykge1xyXG4gICAgICByZXR1cm4gdHJhY2tpbmdDb25maWc7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25maWcuYW5nbGVzID0geyBoOiAwLCB2OiAwIH07XHJcbiAgICAgIGNvbmZpZy5wcmV2QW5nbGVzID0geyBoOiAwLCB2OiAwIH07XHJcbiAgICAgIHRoaXMuX3RyYWNraW5nQ29uZmlncy5wdXNoKGNvbmZpZyk7XHJcbiAgICAgIHJldHVybiBjb25maWc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gdGhlIGRpc3RhbmNlIGJldHdlZW4gdGhlIGxvb2sgdHJhY2tlciBhbmQgdGhlIGxvb2sgdGFyZ2V0LlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XHJcbiAgICovXHJcbiAgX2dldFRhcmdldERpc3RhbmNlKCkge1xyXG4gICAgLy8gRmluZCB0aGUgdmVjdG9yIGJldHdlZW4gdGhlIGdsb2JhbCBwb3NpdGlvbnMgb2YgdHJhY2tlciBhbmQgdGFyZ2V0XHJcbiAgICBjb25zdCBzb3VyY2VQb3NpdGlvbiA9IHRoaXMuY29uc3RydWN0b3IuX2dldFdvcmxkUG9zaXRpb24odGhpcy5fbG9va1RyYWNrZXIpO1xyXG4gICAgY29uc3QgdGFyZ2V0UG9zaXRpb24gPSB0aGlzLmNvbnN0cnVjdG9yLl9nZXRXb3JsZFBvc2l0aW9uKHRoaXMuX3RhcmdldCk7XHJcbiAgICBjb25zdCBsb29rVmVjdG9yID0gW1xyXG4gICAgICB0YXJnZXRQb3NpdGlvblswXSAtIHNvdXJjZVBvc2l0aW9uWzBdLFxyXG4gICAgICB0YXJnZXRQb3NpdGlvblsxXSAtIHNvdXJjZVBvc2l0aW9uWzFdLFxyXG4gICAgICB0YXJnZXRQb3NpdGlvblsyXSAtIHNvdXJjZVBvc2l0aW9uWzJdXHJcbiAgICBdO1xyXG5cclxuICAgIHJldHVybiBNYXRoVXRpbHMuZ2V0VmVjdG9yTWFnbml0dWRlKGxvb2tWZWN0b3IpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVzZXQgYWxsIHN0b3JlZCB0cmFja2luZyBhbmdsZXMgdG8gMC5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICovXHJcbiAgX3Jlc2V0TG9va0FuZ2xlcygpIHtcclxuICAgIHRoaXMuX3RyYWNraW5nQ29uZmlncy5mb3JFYWNoKCh7IGFuZ2xlcyB9KSA9PiB7XHJcbiAgICAgIGFuZ2xlcy5oID0gMDtcclxuICAgICAgYW5nbGVzLnYgPSAwO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTdG9yZSB0aGUgZGlmZmVyZW5jZSBpbiBob3Jpem9udGFsIGFuZCB2ZXJ0aWNhbCByb3RhdGlvbiBmb3IgdGhlIHRyYWNrZXInc1xyXG4gICAqIHJlZmVyZW5jZSByb3RhdGlvbiBhbmQgdGhlIGRpcmVjdGlvbiBvZiB0aGUgdGFyZ2V0IGZyb20gdGhlIHRyYWNrZXIuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIF9zZXRMb29rQW5nbGVzKCkge1xyXG4gICAgLy8gR2V0IHRoZSBjdXJyZW50IHBvc2l0aW9ucyBvZiB0aGUgdHJhY2tlciBhbmQgdGFyZ2V0IG9iamVjdHNcclxuICAgIGNvbnN0IHRhcmdldFBvcyA9IHRoaXMuY29uc3RydWN0b3IuX2dldFdvcmxkUG9zaXRpb24odGhpcy5fdGFyZ2V0KTtcclxuICAgIGNvbnN0IHRyYWNrZXJQb3MgPSB0aGlzLmNvbnN0cnVjdG9yLl9nZXRXb3JsZFBvc2l0aW9uKHRoaXMuX2xvb2tUcmFja2VyKTtcclxuXHJcbiAgICAvLyBDaGVjayBpZiB0aGUgdGFyZ2V0IGhhcyBtb3ZlZFxyXG4gICAgdGhpcy5faXNUYXJnZXRNb3ZpbmcgPSBNYXRoVXRpbHMuZ2V0VmVjdG9yTWFnbml0dWRlKFtcclxuICAgICAgdGFyZ2V0UG9zWzBdIC0gdGhpcy5fcHJldlRhcmdldFBvc1swXSxcclxuICAgICAgdGFyZ2V0UG9zWzFdIC0gdGhpcy5fcHJldlRhcmdldFBvc1sxXSxcclxuICAgICAgdGFyZ2V0UG9zWzJdIC0gdGhpcy5fcHJldlRhcmdldFBvc1syXV1cclxuICAgICkgPiAwO1xyXG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLl9wcmV2VGFyZ2V0UG9zLCB0YXJnZXRQb3MpO1xyXG5cclxuXHJcbiAgICAvLyBDYWxjdWxhdGUgdGhlIGhvcml6b250YWwgYW5kIHZlcnRpY2FsIGFuZ2xlcyB0byByb3RhdGUgdG8gdGhlIHRhcmdldFxyXG4gICAgY29uc3QgdGFyZ2V0U3BoZXJpY2FsID0gTWF0aFV0aWxzLmNhcnRlc2lhblRvU3BoZXJpY2FsKFxyXG4gICAgICB0YXJnZXRQb3NbMF0gLSB0cmFja2VyUG9zWzBdLFxyXG4gICAgICB0YXJnZXRQb3NbMV0gLSB0cmFja2VyUG9zWzFdLFxyXG4gICAgICB0YXJnZXRQb3NbMl0gLSB0cmFja2VyUG9zWzJdXHJcbiAgICApO1xyXG4gICAgY29uc3QgdGFyZ2V0QW5nbGVzID0gdGhpcy5jb25zdHJ1Y3Rvci5fc3BoZXJpY2FsVG9CbGVuZFZhbHVlKFxyXG4gICAgICB0YXJnZXRTcGhlcmljYWxbMV0sXHJcbiAgICAgIHRhcmdldFNwaGVyaWNhbFsyXVxyXG4gICAgKTtcclxuXHJcbiAgICAvLyBDYWxjdWxhdGUgYW5nbGVzIHJlbGF0aXZlIHRvIHRoZSByZWZlcmVuY2Ugb2JqZWN0c1xyXG4gICAgdGhpcy5fdHJhY2tpbmdDb25maWdzLmZvckVhY2goKHtcclxuICAgICAgcmVmZXJlbmNlLFxyXG4gICAgICBmb3J3YXJkQXhpcyxcclxuICAgICAgYW5nbGVzXHJcbiAgICB9KSA9PiB7XHJcbiAgICAgIC8vIENhbGN1bGF0ZSB0aGUgaG9yaXpvbnRhbCBhbmQgdmVydGljYWwgYW5nbGVzIHRvIHJvdGF0ZSB0byB0aGUgZGlyZWN0aW9uIG9mIHRoZSB0cmFja2VyXHJcbiAgICAgIGNvbnN0IHJlZkRpcmVjdGlvbiA9IHRoaXMuY29uc3RydWN0b3IuX2dldE9iamVjdERpcmVjdGlvbihcclxuICAgICAgICByZWZlcmVuY2UsXHJcbiAgICAgICAgZm9yd2FyZEF4aXMsXHJcbiAgICAgICk7XHJcbiAgICAgIGNvbnN0IHJlZlNwaGVyaWNhbCA9IE1hdGhVdGlscy5jYXJ0ZXNpYW5Ub1NwaGVyaWNhbCguLi5yZWZEaXJlY3Rpb24pO1xyXG4gICAgICBjb25zdCByZWZBbmdsZXMgPSB0aGlzLmNvbnN0cnVjdG9yLl9zcGhlcmljYWxUb0JsZW5kVmFsdWUoXHJcbiAgICAgICAgcmVmU3BoZXJpY2FsWzFdLFxyXG4gICAgICAgIHJlZlNwaGVyaWNhbFsyXVxyXG4gICAgICApO1xyXG5cclxuICAgICAgLy8gU3RvcmUgdGhlIGRpZmZlcmVuY2VcclxuICAgICAgYW5nbGVzLmggPSB0YXJnZXRBbmdsZXMuaCAtIHJlZkFuZ2xlcy5oO1xyXG4gICAgICBhbmdsZXMudiA9IHRhcmdldEFuZ2xlcy52IC0gcmVmQW5nbGVzLnY7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiB0aGUgaG9yaXpvbnRhbCBhbmQgdmVydGljYWwgYW5nbGVzIGl0IHdvdWxkIHJlcXVpcmUgdG8gc2ltdWxhdGUgbG9va2luZ1xyXG4gICAqIGF0IHRoZSBnaXZlbiB0eXBlIG9mIGZhY2UgdGFyZ2V0XHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IHRhcmdldFR5cGUgLSBJbnRlZ2VyIHJlcHJlc2VudGluZyB0aGUgRmFjZVRhcmdldFR5cGUuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7T2JqZWN0fS0gQW4gb2JqZWN0IHdpdGggc2lnbmF0dXJlIHtyOiBudW1iZXIsIGg6IG51bWJlciwgdjogbnVtYmVyfVxyXG4gICAqIHdoZXJlICdyJyByZXByZXNlbnRzIHJhZGl1cywgaCByZXByZXNlbnRzIHRoZSBob3Jpem9udGFsL2F6aW11dGhhbCBhbmdsZSBhbmRcclxuICAgKiB2IHJlcHJlc2VudHMgdGhlIHZlcnRpY2FsL3BvbGFyIGFuZ2xlLlxyXG4gICAqL1xyXG4gIF9nZXRGYWNlVGFyZ2V0QW5nbGVzKHRhcmdldFR5cGUpIHtcclxuICAgIC8vIE5vIG9mZnNldCB3aGVuIHRoZSB0YXJnZXQgaXMgdGhlIGNlbnRlciBvZiB0aGUgZXllc1xyXG4gICAgaWYgKHRhcmdldFR5cGUgPT09IDApIHtcclxuICAgICAgcmV0dXJuIHsgaDogMCwgdjogMCB9O1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEJ1aWxkIGEgdmVjdG9yIHRvIHRoZSBmYWNlIHRhcmdldCB0eXBlIHVzaW5nIHRoZSBjdXJyZW50IGRpc3RhbmNlIHRvIHRoZSB0YXJnZXRcclxuICAgIGNvbnN0IGRpc3RhbmNlID0gdGhpcy5fZ2V0VGFyZ2V0RGlzdGFuY2UodGhpcy5fbG9va1RyYWNrZXIpO1xyXG4gICAgY29uc3QgZmFjZVZlY3RvciA9IFsuLi5GYWNlVmVjdG9yc1t0YXJnZXRUeXBlXV07XHJcbiAgICBmYWNlVmVjdG9yWzJdID0gZGlzdGFuY2U7XHJcbiAgICBjb25zdCBzcGhlcmljYWwgPSBNYXRoVXRpbHMuY2FydGVzaWFuVG9TcGhlcmljYWwoLi4uZmFjZVZlY3Rvcik7XHJcblxyXG4gICAgLy8gTWFrZSBzdXJlIHZhbHVlcyBhcmUgY2xhbXBlZCB3aXRoaW4gdGhlIHJhbmdlIG9mIG1vdGlvbiBvZiB0aGUgaHVtYW4gZXllLCBpbiBjYXNlIHRoZSB0YXJnZXQgaXMgdmVyeSBjbG9zZVxyXG4gICAgY29uc3QgYmxlbmRWYWx1ZXMgPSB0aGlzLmNvbnN0cnVjdG9yLl9zcGhlcmljYWxUb0JsZW5kVmFsdWUoc3BoZXJpY2FsWzFdLCBzcGhlcmljYWxbMl0pO1xyXG4gICAgYmxlbmRWYWx1ZXMuaCA9IE1hdGhVdGlscy5jbGFtcChibGVuZFZhbHVlcy5oLCAtMzUsIDM1KTtcclxuICAgIGJsZW5kVmFsdWVzLnYgPSBNYXRoVXRpbHMuY2xhbXAoYmxlbmRWYWx1ZXMudiwgLTI1LCAzMCk7XHJcblxyXG4gICAgcmV0dXJuIGJsZW5kVmFsdWVzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlZCB0aGUgc3RvcmVkIHNwZWVkIGFuZCBkdXJhdGlvbiB2YXJpYWJsZXMgZm9yIGEgbGF5ZXIgYmFzZWQgb24gdGhlXHJcbiAgICogY2hhbmdlIGluIGhvcml6b250YWwgYW5kIHZlcnRpY2FsIGFuZ2xlcyBvZiB0aGUgdHJhY2tlci5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGF5ZXJOYW1lIC0gTmFtZSBvZiB0aGUgbGF5ZXIgdG8gc3RvcmUgdmFsdWVzIG9uLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBoIC0gQ2hhbmdlIGluIGhvcml6b250YWwgYW5nbGUsIGluIGRlZ3JlZXMuXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IHYgLSBDaGFuZ2UgaW4gdmVydGljYWwgYW5nbGUsIGluIGRlZ3JlZXMuXHJcbiAgICovXHJcbiAgX3VwZGF0ZUxheWVyU3BlZWQobGF5ZXJOYW1lLCBoLCB2KSB7XHJcbiAgICBjb25zdCBsYXllciA9IHRoaXMuX21hbmFnZWRMYXllcnNbbGF5ZXJOYW1lXTtcclxuXHJcbiAgICAvLyBGcm9tIFwiUmVhbGlzdGljIEF2YXRhciBhbmQgaGVhZCBBbmltYXRpb24gVXNpbmcgYSBOZXVyb2Jpb2xvZ2ljYWwgTW9kZWwgb2YgVmlzdWFsIEF0dGVudGlvblwiLCBJdHRpLCBEaGF2YWxlLCBQaWdoaW5cclxuICAgIGxheWVyLm1heEhTcGVlZCA9IDQ3MyAqICgxIC0gTWF0aC5leHAoLWggLyA3LjgpKTtcclxuICAgIGxheWVyLm1heFZTcGVlZCA9IDQ3MyAqICgxIC0gTWF0aC5leHAoLXYgLyA3LjgpKTtcclxuXHJcbiAgICAvLyBGcm9tIFwiRXllcyBBbGl2ZVwiLCBMZWUsIEJhZGxlclxyXG4gICAgY29uc3QgRDAgPSAwLjAyNTtcclxuICAgIGNvbnN0IGQgPSAwLjAwMjM1O1xyXG4gICAgbGF5ZXIuaER1cmF0aW9uID0gRDAgKyBkICogaDtcclxuICAgIGxheWVyLnZEdXJhdGlvbiA9IEQwICsgZCAqIHY7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXQgdGhlIG1pY3JvU2FjY2FkZSBvYmplY3Qgd2l0aCBuZXcgcmFuZG9taXplZCB2YWx1ZXMuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVyTmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRoYXQgb3ducyB0aGUgc2FjY2FkZSBtb3Rpb24uXHJcbiAgICovXHJcbiAgX3NldE1pY3JvU2FjY2FkZShsYXllck5hbWUpIHtcclxuICAgIGNvbnN0IGxheWVyID0gdGhpcy5fbWFuYWdlZExheWVyc1tsYXllck5hbWVdO1xyXG4gICAgY29uc3QgeyBtaWNyb1NhY2NhZGUgfSA9IGxheWVyO1xyXG5cclxuICAgIGlmICh0aGlzLl90YXJnZXQpIHtcclxuICAgICAgLy8gTWljcm8gbW92ZW1lbnRzIHNob3VsZCBiZSBzbWFsbGVyIHdoZW4gZm9jdXNlZCBvbiBhIHRhcmdldFxyXG4gICAgICBtaWNyb1NhY2NhZGUuaCA9IFV0aWxzLmdldFJhbmRvbUZsb2F0KC4wMSwgLjE1KTtcclxuICAgICAgbWljcm9TYWNjYWRlLnYgPSBVdGlscy5nZXRSYW5kb21GbG9hdCguMDEsIC4xNSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBNaWNyb3NhY2NhZGVzLiBFbmN5Y2xvcGVkaWEgb2YgTmV1cm9zY2llbmNlLiAoMjAwOSkgU3ByaW5nZXIsIEJlcmxpbiwgSGVpZGVsYmVyZy4gaHR0cHM6Ly9kb2kub3JnLzEwLjEwMDcvOTc4LTMtNTQwLTI5Njc4LTJfMzQ5MlxyXG4gICAgICBtaWNyb1NhY2NhZGUuaCA9IFV0aWxzLmdldFJhbmRvbUZsb2F0KC4wMSwgLjMpO1xyXG4gICAgICBtaWNyb1NhY2NhZGUudiA9IFV0aWxzLmdldFJhbmRvbUZsb2F0KC4wMSwgLjMpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX3VwZGF0ZUxheWVyU3BlZWQobGF5ZXJOYW1lLCBtaWNyb1NhY2NhZGUuaCwgbWljcm9TYWNjYWRlLnYpO1xyXG5cclxuICAgIC8vIFJlc3RhcnQgdGhlIHRpbWVyXHJcbiAgICB0aGlzLl9pbml0aWFsaXplTWljcm9UaW1lcihsYXllck5hbWUsIC4uLk1pY3JvU2FjY2FkZVdhaXRSYW5nZXMuZGVmYXVsdCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXQgdGhlIG1hY3JvU2FjY2FkZSBvYmplY3Qgd2l0aCBuZXcgcmFuZG9taXplZCB2YWx1ZXMuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVyTmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRoYXQgb3ducyB0aGUgc2FjY2FkZSBtb3Rpb24uXHJcbiAgICovXHJcbiAgX3NldE1hY3JvU2FjY2FkZShsYXllck5hbWUpIHtcclxuICAgIGNvbnN0IGxheWVyID0gdGhpcy5fbWFuYWdlZExheWVyc1tsYXllck5hbWVdO1xyXG4gICAgY29uc3QgeyBtYWNyb1NhY2NhZGUgfSA9IGxheWVyO1xyXG4gICAgbGV0IG1hY3JvU2FjY2FkZVdhaXRSYW5nZTtcclxuXHJcbiAgICAvLyBJbmNyZWFzZSByYW5kb20gdmFsdWUgcmFuZ2Ugd2hlbiBub3QgZm9jdXNlZCBvbiBhIHRhcmdldFxyXG4gICAgaWYgKCF0aGlzLl90YXJnZXQpIHtcclxuICAgICAgbWFjcm9TYWNjYWRlV2FpdFJhbmdlID0gTWFjcm9TYWNjYWRlV2FpdFJhbmdlcy5kZWZhdWx0O1xyXG5cclxuICAgICAgLy8gTm9ybWFsIGh1bWFuIGhvcml6b250YWwgZXllIHJvdGF0aW9uIGxpbWl0IGlzIGFib3V0IDM1IGRlZ3JlZXNcclxuICAgICAgY29uc3QgaExpbWl0ID0gVXRpbHMuZ2V0UmFuZG9tRmxvYXQoLjE0MywgLjI4Nik7XHJcbiAgICAgIGNvbnN0IGhGYWN0b3IgPSBVdGlscy5nZXRSYW5kb21GbG9hdCgtaExpbWl0LCBoTGltaXQpO1xyXG4gICAgICBtYWNyb1NhY2NhZGUuaCA9IGhGYWN0b3IgKiAzNTtcclxuXHJcbiAgICAgIC8vIE5vcm1hbCBodW1hbiB2ZXJ0aWNhbCBleWUgcm90YXRpb24gbGltaXQgaXMgYWJvdXQgMjUgZGVncmVlcyB1cHdhcmQgYW5kIDMwIGRlZ3JlZXMgZG93bndhcmRcclxuICAgICAgY29uc3QgdkxpbWl0ID0gVXRpbHMuZ2V0UmFuZG9tRmxvYXQoLjA5MywgLjE4Nik7XHJcbiAgICAgIGNvbnN0IHZGYWN0b3IgPSBVdGlscy5nZXRSYW5kb21GbG9hdCgtdkxpbWl0LCB2TGltaXQpO1xyXG4gICAgICBtYWNyb1NhY2NhZGUudiA9IHZGYWN0b3IgPiAwID8gdkZhY3RvciAqIDI1IDogdkZhY3RvciAqIDMwO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFBpY2sgYSBuZXcgZmFjZSB0YXJnZXRcclxuICAgIGVsc2Uge1xyXG4gICAgICAvLyBTb2NpYWwgdHJpYW5nbGUgLSBzYWNjYWRlIGJldHdlZW4gZXllcyBhbmQgbW91dGgsIHdlaWdodGVkIHRvIGxvb2sgYXQgZXllcyBtb3JlIG9mdGVuXHJcbiAgICAgIHN3aXRjaCAobGF5ZXIuc2FjY2FkZVRhcmdldCkge1xyXG4gICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgIG1hY3JvU2FjY2FkZVdhaXRSYW5nZSA9IE1hY3JvU2FjY2FkZVdhaXRSYW5nZXMuZXllVGFyZ2V0O1xyXG4gICAgICAgICAgbGF5ZXIuc2FjY2FkZVRhcmdldCA9IE1hdGgucmFuZG9tKCkgPCAwLjc1ID8gRmFjZVRhcmdldFR5cGVzLkV5ZVJpZ2h0XHJcbiAgICAgICAgICAgIDogRmFjZVRhcmdldFR5cGVzLk1vdXRoO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgbWFjcm9TYWNjYWRlV2FpdFJhbmdlID0gTWFjcm9TYWNjYWRlV2FpdFJhbmdlcy5leWVUYXJnZXQ7XHJcbiAgICAgICAgICBsYXllci5zYWNjYWRlVGFyZ2V0ID0gTWF0aC5yYW5kb20oKSA8IDAuNzUgPyBGYWNlVGFyZ2V0VHlwZXMuRXllTGVmdFxyXG4gICAgICAgICAgICA6IEZhY2VUYXJnZXRUeXBlcy5Nb3V0aDtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgMzpcclxuICAgICAgICAgIG1hY3JvU2FjY2FkZVdhaXRSYW5nZSA9IE1hY3JvU2FjY2FkZVdhaXRSYW5nZXMubW91dGhUYXJnZXQ7XHJcbiAgICAgICAgICBsYXllci5zYWNjYWRlVGFyZ2V0ID0gTWF0aC5yYW5kb20oKSA8IDAuNSA/IEZhY2VUYXJnZXRUeXBlcy5FeWVMZWZ0XHJcbiAgICAgICAgICAgIDogRmFjZVRhcmdldFR5cGVzLkV5ZVJpZ2h0O1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAwOlxyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICBtYWNyb1NhY2NhZGVXYWl0UmFuZ2UgPSBNYWNyb1NhY2NhZGVXYWl0UmFuZ2VzLmV5ZVRhcmdldDtcclxuICAgICAgICAgIGxheWVyLnNhY2NhZGVUYXJnZXQgPSBNYXRoLnJhbmRvbSgpIDwgMC41ID8gRmFjZVRhcmdldFR5cGVzLkV5ZUxlZnRcclxuICAgICAgICAgICAgOiBGYWNlVGFyZ2V0VHlwZXMuRXllUmlnaHQ7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgeyBoLCB2IH0gPSB0aGlzLl9nZXRGYWNlVGFyZ2V0QW5nbGVzKGxheWVyLnNhY2NhZGVUYXJnZXQpO1xyXG4gICAgICBtYWNyb1NhY2NhZGUuaCA9IGg7XHJcbiAgICAgIG1hY3JvU2FjY2FkZS52ID0gdjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl91cGRhdGVMYXllclNwZWVkKGxheWVyTmFtZSwgbWFjcm9TYWNjYWRlLmgsIG1hY3JvU2FjY2FkZS52KTtcclxuXHJcbiAgICAvLyBSZXN0YXJ0IHRoZSB0aW1lcnNcclxuICAgIHRoaXMuX2luaXRpYWxpemVNaWNyb1RpbWVyKGxheWVyTmFtZSwgLi4uTWljcm9TYWNjYWRlV2FpdFJhbmdlcy5wb3N0TWFjcm8pO1xyXG4gICAgdGhpcy5faW5pdGlhbGl6ZU1hY3JvVGltZXIobGF5ZXJOYW1lLCAuLi5tYWNyb1NhY2NhZGVXYWl0UmFuZ2UpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU3RhcnQgYSBuZXcgd2FpdCB0aW1lciB0aGF0IHdpbGwgc2V0IGEgbmV3IG1pY3JvIHNhY2NhZGUgbW92ZW1lbnQgd2hlbiBpdFxyXG4gICAqIHJlc29sdmVzLlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllck5hbWUgLSBOYW1lIG9mIHRoZSBsYXllciB0aGF0IG93bnMgdGhlIHNhY2NhZGUgbW90aW9uLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBtaW5XYWl0VGltZSAtIE1pbmltdW0gbnVtYmVyIG9mIHNlY29uZHMgYmVmb3JlIGEgbmV3IHNhY2NhZGVcclxuICAgKiB3aWxsIGJlIHRyaWdnZXJlZC5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gbWF4V2FpdFRpbWUgLSBNYXhpbXVtIG51bWJlciBvZiBzZWNvbmRzIGJlZm9yZSBhIG5ldyBzYWNjYWRlXHJcbiAgICogd2lsbCBiZSB0cmlnZ2VyZWQuXHJcbiAgICovXHJcbiAgX2luaXRpYWxpemVNaWNyb1RpbWVyKGxheWVyTmFtZSwgbWluV2FpdFRpbWUsIG1heFdhaXRUaW1lKSB7XHJcbiAgICBjb25zdCBsYXllciA9IHRoaXMuX21hbmFnZWRMYXllcnNbbGF5ZXJOYW1lXTtcclxuICAgIGNvbnN0IHdhaXRUaW1lID0gVXRpbHMuZ2V0UmFuZG9tRmxvYXQobWluV2FpdFRpbWUsIG1heFdhaXRUaW1lKTtcclxuXHJcbiAgICBpZiAobGF5ZXIubWljcm9TYWNjYWRlVGltZXIpIHtcclxuICAgICAgbGF5ZXIubWljcm9TYWNjYWRlVGltZXIuY2FuY2VsKCk7XHJcbiAgICB9XHJcbiAgICBsYXllci5taWNyb1NhY2NhZGVUaW1lciA9IFV0aWxzLndhaXQod2FpdFRpbWUsIHtcclxuICAgICAgb25GaW5pc2g6ICgpID0+IHsgdGhpcy5fc2V0TWljcm9TYWNjYWRlKGxheWVyTmFtZSkgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTdGFydCBhIG5ldyB3YWl0IHRpbWVyIHRoYXQgd2lsbCBzZXQgYSBuZXcgbWFjcm8gc2FjY2FkZSBtb3ZlbWVudCB3aGVuIGl0XHJcbiAgICogcmVzb2x2ZXMuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVyTmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRoYXQgb3ducyB0aGUgc2FjY2FkZSBtb3Rpb24uXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IG1pbldhaXRUaW1lIC0gTWluaW11bSBudW1iZXIgb2Ygc2Vjb25kcyBiZWZvcmUgYSBuZXcgc2FjY2FkZVxyXG4gICAqIHdpbGwgYmUgdHJpZ2dlcmVkLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBtYXhXYWl0VGltZSAtIE1heGltdW0gbnVtYmVyIG9mIHNlY29uZHMgYmVmb3JlIGEgbmV3IHNhY2NhZGVcclxuICAgKiB3aWxsIGJlIHRyaWdnZXJlZC5cclxuICAgKi9cclxuICBfaW5pdGlhbGl6ZU1hY3JvVGltZXIobGF5ZXJOYW1lLCBtaW5XYWl0VGltZSwgbWF4V2FpdFRpbWUpIHtcclxuICAgIGNvbnN0IGxheWVyID0gdGhpcy5fbWFuYWdlZExheWVyc1tsYXllck5hbWVdO1xyXG4gICAgY29uc3Qgd2FpdFRpbWUgPSBVdGlscy5nZXRSYW5kb21GbG9hdChtaW5XYWl0VGltZSwgbWF4V2FpdFRpbWUpO1xyXG5cclxuICAgIGlmIChsYXllci5tYWNyb1NhY2NhZGVUaW1lcikge1xyXG4gICAgICBsYXllci5tYWNyb1NhY2NhZGVUaW1lci5jYW5jZWwoKTtcclxuICAgIH1cclxuICAgIGxheWVyLm1hY3JvU2FjY2FkZVRpbWVyID0gVXRpbHMud2FpdCh3YWl0VGltZSwge1xyXG4gICAgICBvbkZpbmlzaDogKCkgPT4geyB0aGlzLl9zZXRNYWNyb1NhY2NhZGUobGF5ZXJOYW1lKSB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHMgYSBuZXcgdGFyZ2V0IHRvIGxvb2sgYXQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge09iamVjdHxudWxsfSB0YXJnZXQgLSBUaGUgbmV3IHRhcmdldCB0byBsb29rIGF0LlxyXG4gICAqL1xyXG4gIHNldFRhcmdldCh0YXJnZXQpIHtcclxuICAgIHRoaXMudGFyZ2V0ID0gdGFyZ2V0O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRmluZHMgYW4gb2JqZWN0IGdpdmVuIGl0cyBuYW1lIGFuZCBzZXRzIGl0IGFzIHRoZSBuZXcgdGFyZ2V0IHRvIGxvb2sgYXQuXHJcbiAgICogU2hvdWxkIGJlIG92ZXJsb2FkZWQgZm9yIGVhY2ggcmVuZGVyaW5nIGVuZ2luZSBpbXBsZW1lbnRhdGlvbi5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0YXJnZXQgLSBOYW1lIHRvIHNlYXJjaCBmb3IuXHJcbiAgICovXHJcbiAgc2V0VGFyZ2V0QnlOYW1lKG5hbWUpIHtcclxuICAgIGlmICghbmFtZSkge1xyXG4gICAgICB0aGlzLl90YXJnZXQgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5fc2NlbmUpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3Qgc2V0IFBvaW50T2ZJbnRlcmVzdEZlYXR1cmUgdGFyZ2V0IHVzaW5nIG5hbWUgJHtuYW1lfSBvbiBob3N0ICR7dGhpcy5faG9zdC5pZH0uIFNjZW5lIG11c3QgYmUgZGVmaW5lZC5gKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEZpbmRzIGFuIG9iamVjdCBnaXZlbiBpdHMgaWQgYW5kIHNldHMgaXQgYXMgdGhlIG5ldyB0YXJnZXQgdG8gbG9vayBhdC5cclxuICAgKiBTaG91bGQgYmUgb3ZlcmxvYWRlZCBmb3IgZWFjaCByZW5kZXJpbmcgZW5naW5lIGltcGxlbWVudGF0aW9uLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSB0YXJnZXQgLSBJZCB0byBzZWFyY2ggZm9yLlxyXG4gICAqL1xyXG4gIHNldFRhcmdldEJ5SWQoaWQpIHtcclxuICAgIGlmICghaWQpIHtcclxuICAgICAgdGhpcy5fdGFyZ2V0ID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMuX3NjZW5lKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IHNldCBQb2ludE9mSW50ZXJlc3RGZWF0dXJlIHRhcmdldCB1c2luZyBpZCAke2lkfSBvbiBob3N0ICR7dGhpcy5faG9zdC5pZH0uIFNjZW5lIG11c3QgYmUgZGVmaW5lZC5gKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFN0YXJ0IGtlZXBpbmcgdHJhY2sgb2YgYW4gYW5pbWF0aW9uIGxheWVyIHRoYXQgb3ducyBhIGJsZW5kMmQgYW5pbWF0aW9uIHdpdGhcclxuICAgKiBibGVuZFdlaWdodHMgY29ycmVzcG9uZGluZyB0byBob3Jpem9udGFsIGFuZCB2ZXJ0aWNhbCBsb29rIGFuZ2xlcy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllck5hbWUgLSBOYW1lIG9mIHRoZSBsYXllciB0byBrZWVwIHRyYWNrIG9mLlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0PX0gb3B0aW9ucyAtIE9wdGlvbnMgZm9yIHRoZSBsYXllci5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuYW5pbWF0aW9uID0gJ2xvb2snXSAtIE5hbWUgb2YgdGhlIGFuaW1hdGlvbiBvbiB0aGVcclxuICAgKiBsYXllciB3aG9zZSBibGVuZFdlaWdodHMgd2lsbCBiZSBkcml2ZW4gYmFzZWQgb24gdGhlIGFuZ2xlIGJldHdlZW4gdGhlIGxvb2tUcmFja2VyXHJcbiAgICogYW5kIHRoZSBsb29rVGFyZ2V0LiBUaGlzIGFuaW1hdGlvbiBtdXN0IGJlIG9mIHR5cGUgYmxlbmQyZC5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMubWF4U3BlZWQgPSAyNV0gLSBUaGUgbWF4aW11bSBzcGVlZCBhdCB3aGljaCB0aGUgYmxlbmQyZFxyXG4gICAqIGJsZW5kV2VpZ2h0cyBjYW4gYmUgbWFuaXB1bGF0ZWQuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmZvcndhcmRBeGlzID0gJ1Bvc2l0aXZlWiddIC0gQXhpcyBwb2ludGluZyBmcm9tIHRoZVxyXG4gICAqIGZyb250IG9mIHRoZSBsb29rUmVmZXJlbmNlIG9iamVjdC4gVmFsaWQgb3B0aW9ucyBhcmUgJ1Bvc2l0aXZlWCcsICdOZWdhdGl2ZVgnLFxyXG4gICAqICdQb3NpdGl2ZVknLCAnTmVnYXRpdmVZJywgJ1Bvc2l0aXZlWicsICdOZWdhdGl2ZVonLlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0PX0gb3B0aW9ucy5sb29rUmVmZXJlbmNlIC0gM0QgdHJhbnNmb3JtYXRpb24gbm9kZSB0aGF0IHRoZSBsb29rVHJhY2tlclxyXG4gICAqIHJvdGF0aW9uIGxpbWl0cyBzaG91bGQgYmUgY2FsY3VsYXRlZCByZWxhdGl2ZSB0by4gRGVmYXVsdHMgdG8gdGhlIGhvc3Qgb3duZXIuXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLmhhc1NhY2NhZGUgPSBmYWxzZV0gLSBXaGV0aGVyIG9yIG5vdCB0byBpbmNsdWRlXHJcbiAgICogc2FjY2FkaWMgbW90aW9uIG9udG8gdGhlIGJsZW5kV2VpZ2h0IGFuaW1hdGlvbi4gVGhpcyBzaG91bGQgb25seSBiZSBzZXQgdG9cclxuICAgKiB0cnVlIGZvciBibGVuZDJkIGFuaW1hdGlvbnMgcmVwcmVzZW50aW5nIGV5ZSBhbmltYXRpb24uXHJcbiAgICogQHBhcmFtIHtudW1iZXI9fSBbb3B0aW9ucy5ibGVuZFRpbWU9W1BvaW50T2ZJbnRlcmVzdEZlYXR1cmUuREVGQVVMVF9MQVlFUl9PUFRJT05TLmJsZW5kVGltZV17QGxpbmsgUG9pbnRPZkludGVyZXN0RmVhdHVyZSNERUZBVUxUX0xBWUVSX09QVElPTlMjYmxlbmRUaW1lfV0gLVxyXG4gICAqIERlZmF1bHQgYW1vdW50IG9mIHRpbWUgdG8gdXNlIHdoZW4gbWFuaXB1bGF0aW5nIGxheWVyIHdlaWdodC5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb3B0aW9ucy5lYXNpbmdGbiAtIERlZmF1bHQgZWFzaW5nIGZ1bmN0aW9uIHRvIHVzZSB3aGVuXHJcbiAgICogbWFuaXB1bGF0aW5nIGxheWVyIHdlaWdodC5cclxuICAgKi9cclxuICByZWdpc3Rlckxvb2tMYXllcihcclxuICAgIGxheWVyTmFtZSxcclxuICAgIHtcclxuICAgICAgYW5pbWF0aW9uID0gJ2xvb2snLFxyXG4gICAgICBtYXhTcGVlZCA9IDI1LFxyXG4gICAgICByZWZlcmVuY2UsXHJcbiAgICAgIGZvcndhcmRBeGlzID0gJ1Bvc2l0aXZlWicsXHJcbiAgICAgIGhhc1NhY2NhZGUgPSBmYWxzZSxcclxuICAgICAgYmxlbmRUaW1lID0gUG9pbnRPZkludGVyZXN0RmVhdHVyZS5ERUZBVUxUX0xBWUVSX09QVElPTlMuYmxlbmRUaW1lLFxyXG4gICAgICBlYXNpbmdGblxyXG4gICAgfSA9IHt9XHJcbiAgKSB7XHJcbiAgICAvLyBWYWxpZGF0ZSByZWZlcmVuY2Ugb2JqZWN0XHJcbiAgICByZWZlcmVuY2UgPSByZWZlcmVuY2UgfHwgdGhpcy5faG9zdC5vd25lcjtcclxuXHJcbiAgICBpZiAoIXRoaXMuY29uc3RydWN0b3IuX3ZhbGlkYXRlVHJhbnNmb3JtT2JqZWN0KHJlZmVyZW5jZSkpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgaW5pdGlhbGl6ZSByZWdpc3RlciBsb29rIGxheWVyICR7bGF5ZXJOYW1lfSBmb3IgUG9pbnRPZkludGVyZXN0RmVhdHVyZSBvbiBob3N0ICR7dGhpcy5faG9zdC5pZH0uIFJlZmVyZW5jZSBtdXN0IGJlIGRlZmluZWQgYXMgYSB2YWxpZCB0cmFuc2Zvcm1hdGlvbiBvYmplY3QuYCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gRmluZCB2ZWN0b3IgYXNzb2NpYXRlZCB3aXRoIGF4aXMgc3RyaW5nXHJcbiAgICBmb3J3YXJkQXhpcyA9IEF4aXNNYXBbZm9yd2FyZEF4aXNdICE9PSB1bmRlZmluZWRcclxuICAgICAgPyBBeGlzTWFwW2ZvcndhcmRBeGlzXVxyXG4gICAgICA6IEF4aXNNYXAuUG9zaXRpdmVaO1xyXG5cclxuICAgIC8vIFN0b3JlIHRyYWNraW5nIGNvbmZpZ3VyYXRpb25cclxuICAgIGNvbnN0IHRyYWNraW5nQ29uZmlnID0gdGhpcy5fYWRkVHJhY2tpbmdDb25maWcoe1xyXG4gICAgICByZWZlcmVuY2UsXHJcbiAgICAgIGZvcndhcmRBeGlzXHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBSZWdpc3RlciB0aGUgbGF5ZXIgYW5kIGFuaW1hdGlvblxyXG4gICAgdGhpcy5yZWdpc3RlckxheWVyKGxheWVyTmFtZSwge1xyXG4gICAgICB0cmFja2luZ0NvbmZpZyxcclxuICAgICAgbWF4U3BlZWQsXHJcbiAgICAgIG1heEhTcGVlZDogdW5kZWZpbmVkLFxyXG4gICAgICBtYXhWU3BlZWQ6IHVuZGVmaW5lZCxcclxuICAgICAgaER1cmF0aW9uOiB1bmRlZmluZWQsXHJcbiAgICAgIHZEdXJhdGlvbjogdW5kZWZpbmVkLFxyXG4gICAgICBoVmVsb2NpdHk6IFswLCAwXSxcclxuICAgICAgdlZlbG9jaXR5OiBbMCwgMF0sXHJcbiAgICAgIGhhc1NhY2NhZGUsXHJcbiAgICAgIGJsZW5kVGltZSxcclxuICAgICAgZWFzaW5nRm4sXHJcbiAgICAgIG1pY3JvU2FjY2FkZTogeyBoOiAwLCB2OiAwIH0sXHJcbiAgICAgIG1hY3JvU2FjY2FkZTogeyBoOiAwLCB2OiAwIH0sXHJcbiAgICAgIHNhY2NhZGVUYXJnZXQ6IEZhY2VUYXJnZXRUeXBlcy5FeWVDZW50ZXIsXHJcbiAgICAgIGFuaW1hdGlvbnM6IHsgW2FuaW1hdGlvbl06IHt9IH0sXHJcbiAgICB9KTtcclxuICAgIHRoaXMuX2xvb2tMYXllcnNbbGF5ZXJOYW1lXSA9IGFuaW1hdGlvbjtcclxuXHJcbiAgICAvLyBWYWxpZGF0ZSB0aGUgbG9vayBhbmltYXRpb25cclxuICAgIHRoaXMuX3JlZ2lzdGVyTG9va0FuaW1hdGlvbihsYXllck5hbWUsIGFuaW1hdGlvbik7XHJcblxyXG4gICAgLy8gSW5pdGlhbGl6ZSBzYWNjYWRlIHRpbWVyc1xyXG4gICAgaWYgKGhhc1NhY2NhZGUpIHtcclxuICAgICAgY29uc3QgbWFjcm9TYWNjYWRlV2FpdFJhbmdlID0gdGhpcy5fdGFyZ2V0XHJcbiAgICAgICAgPyBNYWNyb1NhY2NhZGVXYWl0UmFuZ2VzLmV5ZVRhcmdldFxyXG4gICAgICAgIDogTWFjcm9TYWNjYWRlV2FpdFJhbmdlcy5kZWZhdWx0O1xyXG4gICAgICB0aGlzLl9pbml0aWFsaXplTWljcm9UaW1lcihsYXllck5hbWUsIC4uLk1pY3JvU2FjY2FkZVdhaXRSYW5nZXMuZGVmYXVsdCk7XHJcbiAgICAgIHRoaXMuX2luaXRpYWxpemVNYWNyb1RpbWVyKGxheWVyTmFtZSwgLi4ubWFjcm9TYWNjYWRlV2FpdFJhbmdlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFN0YXJ0IGtlZXBpbmcgdHJhY2sgb2YgYW4gYW5pbWF0aW9uIGxheWVyIHRoYXQgb3ducyBhIGJsaW5rIGFuaW1hdGlvbi4gQmxpbmtcclxuICAgKiBhbmltYXRpb25zIGNhbiBiZSBvZiBhbnkgdHlwZSwgYnV0IGlmIGl0IGlzIG9mIHR5cGUgcmFuZG9tQW5pbWF0aW9uIHRoZW4gYVxyXG4gICAqIGl0IHdpbGwgYmUgcmFuZG9taXplZCBlYWNoIHRpbWUgYSBibGluayBpcyBjYWxsZWQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGF5ZXJOYW1lIC0gTmFtZSBvZiB0aGUgbGF5ZXIgdG8ga2VlcCB0cmFjayBvZi5cclxuICAgKiBAcGFyYW0ge09iamVjdD19IG9wdGlvbnMgLSBPcHRpb25zIGZvciB0aGUgbGF5ZXIuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmFuaW1hdGlvbiA9ICdibGluayddIC0gTmFtZSBvZiB0aGUgYmxpbmsgYW5pbWF0aW9uXHJcbiAgICogb24gdGhlIGxheWVyLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5ibGVuZFRpbWU9W1BvaW50T2ZJbnRlcmVzdEZlYXR1cmUuREVGQVVMVF9MQVlFUl9PUFRJT05TLmJsZW5kVGltZV17QGxpbmsgUG9pbnRPZkludGVyZXN0RmVhdHVyZSNERUZBVUxUX0xBWUVSX09QVElPTlMjYmxlbmRUaW1lfV0gLVxyXG4gICAqIERlZmF1bHQgYW1vdW50IG9mIHRpbWUgdG8gdXNlIHdoZW4gbWFuaXB1bGF0aW5nIHRoZSBsYXllcidzIHdlaWdodC5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb3B0aW9ucy5lYXNpbmdGbiAtIERlZmF1bHQgZWFzaW5nIGZ1bmN0aW9uIHRvIHVzZSB3aGVuXHJcbiAgICogbWFuaXB1bGF0aW5nIHRoZSBsYXllcidzIHdlaWdodC5cclxuICAgKi9cclxuICByZWdpc3RlckJsaW5rTGF5ZXIoXHJcbiAgICBsYXllck5hbWUsXHJcbiAgICB7XHJcbiAgICAgIGFuaW1hdGlvbiA9ICdibGluaycsXHJcbiAgICAgIGJsZW5kVGltZSA9IFBvaW50T2ZJbnRlcmVzdEZlYXR1cmUuREVGQVVMVF9MQVlFUl9PUFRJT05TLmJsZW5kVGltZSxcclxuICAgICAgZWFzaW5nRm5cclxuICAgIH0gPSB7fVxyXG4gICkge1xyXG4gICAgLy8gUmVnaXN0ZXIgdGhlIGxheWVyIGFuZCBhbmltYXRpb25cclxuICAgIHRoaXMucmVnaXN0ZXJMYXllcihsYXllck5hbWUsIHtcclxuICAgICAgYmxlbmRUaW1lLFxyXG4gICAgICBlYXNpbmdGbixcclxuICAgICAgYW5pbWF0aW9uczogeyBbYW5pbWF0aW9uXToge30gfSxcclxuICAgIH0pO1xyXG4gICAgdGhpcy5fYmxpbmtMYXllcnNbbGF5ZXJOYW1lXSA9IGFuaW1hdGlvbjtcclxuICB9XHJcblxyXG4gIHVwZGF0ZShkZWx0YVRpbWUpIHtcclxuICAgIHN1cGVyLnVwZGF0ZShkZWx0YVRpbWUpO1xyXG5cclxuICAgIC8vIFVwZGF0ZSB0aGUgbG9vayBhbmdsZXNcclxuICAgIGlmICh0aGlzLl90YXJnZXQpIHtcclxuICAgICAgdGhpcy5fc2V0TG9va0FuZ2xlcygpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fcmVzZXRMb29rQW5nbGVzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZGVsdGFTZWNvbmRzID0gTWF0aC5taW4oZGVsdGFUaW1lLCBNYXhEZWx0YSkgLyAxMDAwO1xyXG4gICAgbGV0IHRyaWdnZXJCbGluayA9IGZhbHNlO1xyXG5cclxuICAgIC8vIFNldCBsb29rIGJsZW5kIHZhbHVlc1xyXG4gICAgT2JqZWN0LmVudHJpZXModGhpcy5fbG9va0xheWVycykuZm9yRWFjaCgoW2xheWVyTmFtZSwgYW5pbU5hbWVdKSA9PiB7XHJcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLl9tYW5hZ2VkTGF5ZXJzW2xheWVyTmFtZV07XHJcblxyXG4gICAgICAvLyBJbmNyZW1lbnQgdGhlIHNhY2NhZGUgdGltZXJzXHJcbiAgICAgIGlmIChvcHRpb25zLmlzQWN0aXZlICYmIG9wdGlvbnMuaGFzU2FjY2FkZSkge1xyXG4gICAgICAgIG9wdGlvbnMubWljcm9TYWNjYWRlVGltZXIuZXhlY3V0ZShkZWx0YVRpbWUpO1xyXG4gICAgICAgIG9wdGlvbnMubWFjcm9TYWNjYWRlVGltZXIuZXhlY3V0ZShkZWx0YVRpbWUpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBTZXQgdGhlIGJsZW5kIHZhbHVlc1xyXG4gICAgICBpZiAob3B0aW9ucy5hbmltYXRpb25zW2FuaW1OYW1lXS5pc0FjdGl2ZSkge1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRIID0gdGhpcy5faG9zdC5BbmltYXRpb25GZWF0dXJlLmdldEFuaW1hdGlvbkJsZW5kV2VpZ2h0KFxyXG4gICAgICAgICAgbGF5ZXJOYW1lLCBhbmltTmFtZSwgJ1gnXHJcbiAgICAgICAgKTtcclxuICAgICAgICBjb25zdCBjdXJyZW50ViA9IHRoaXMuX2hvc3QuQW5pbWF0aW9uRmVhdHVyZS5nZXRBbmltYXRpb25CbGVuZFdlaWdodChcclxuICAgICAgICAgIGxheWVyTmFtZSwgYW5pbU5hbWUsICdZJ1xyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIGxldCB0YXJnZXRIID0gb3B0aW9ucy50cmFja2luZ0NvbmZpZy5hbmdsZXMuaDtcclxuICAgICAgICBsZXQgdGFyZ2V0ViA9IG9wdGlvbnMudHJhY2tpbmdDb25maWcuYW5nbGVzLnY7XHJcblxyXG4gICAgICAgIC8vIENoZWNrIGlmIHRoZSBsb29rIGFuZ2xlIGhhcyBjaGFuZ2VkIGVub3VnaCB0byB0cmlnZ2VyIGEgYmxpbmtcclxuICAgICAgICBpZiAodGhpcy5faXNUYXJnZXRNb3ZpbmcgJiYgIXRyaWdnZXJCbGluaykge1xyXG4gICAgICAgICAgY29uc3QgcHJldlRhcmdldEggPSBvcHRpb25zLnRyYWNraW5nQ29uZmlnLnByZXZBbmdsZXMuaDtcclxuICAgICAgICAgIGNvbnN0IHByZXZUYXJnZXRWID0gb3B0aW9ucy50cmFja2luZ0NvbmZpZy5wcmV2QW5nbGVzLnY7XHJcbiAgICAgICAgICBjb25zdCBjaGFuZ2VBbW91bnQgPSBNYXRoVXRpbHMudG9EZWdyZWVzKFxyXG4gICAgICAgICAgICBNYXRoVXRpbHMuZ2V0QW5nbGVCZXR3ZWVuKFxyXG4gICAgICAgICAgICAgIFtwcmV2VGFyZ2V0SCwgcHJldlRhcmdldFZdLFxyXG4gICAgICAgICAgICAgIFt0YXJnZXRILCB0YXJnZXRWXVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgIGlmIChjaGFuZ2VBbW91bnQgPj0gQmxpbmtUaHJlc2hvbGQpIHtcclxuICAgICAgICAgICAgdHJpZ2dlckJsaW5rID0gdHJ1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIG9wdGlvbnMudHJhY2tpbmdDb25maWcucHJldkFuZ2xlcy5oID0gdGFyZ2V0SDtcclxuICAgICAgICBvcHRpb25zLnRyYWNraW5nQ29uZmlnLnByZXZBbmdsZXMudiA9IHRhcmdldFY7XHJcblxyXG4gICAgICAgIC8vIEFkZCBpbiB0aGUgc2FjY2FkZSBtb3ZlbWVudFxyXG4gICAgICAgIGlmIChvcHRpb25zLmhhc1NhY2NhZGUpIHtcclxuICAgICAgICAgIE1hdGhVdGlscy5kYW1wVmFsdWUoXHJcbiAgICAgICAgICAgIDAsXHJcbiAgICAgICAgICAgIG9wdGlvbnMubWFjcm9TYWNjYWRlLmggKyBvcHRpb25zLm1hY3JvU2FjY2FkZS5oLFxyXG4gICAgICAgICAgICBvcHRpb25zLmhWZWxvY2l0eSxcclxuICAgICAgICAgICAgb3B0aW9ucy5oRHVyYXRpb24sXHJcbiAgICAgICAgICAgIG9wdGlvbnMubWF4SFNwZWVkXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgdGFyZ2V0SCArPSBvcHRpb25zLmhWZWxvY2l0eVswXTtcclxuICAgICAgICAgIE1hdGhVdGlscy5kYW1wVmFsdWUoXHJcbiAgICAgICAgICAgIDAsXHJcbiAgICAgICAgICAgIG9wdGlvbnMubWFjcm9TYWNjYWRlLnYgKyBvcHRpb25zLm1hY3JvU2FjY2FkZS52LFxyXG4gICAgICAgICAgICBvcHRpb25zLnZWZWxvY2l0eSxcclxuICAgICAgICAgICAgb3B0aW9ucy52RHVyYXRpb24sXHJcbiAgICAgICAgICAgIG9wdGlvbnMubWF4VlNwZWVkXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgdGFyZ2V0ViArPSBvcHRpb25zLnZWZWxvY2l0eVswXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIENsYW1wIHRvIG1heCBzcGVlZFxyXG4gICAgICAgIGNvbnN0IGZhY3RvciA9IE1hdGhVdGlscy5jbGFtcChkZWx0YVNlY29uZHMgKiBvcHRpb25zLm1heFNwZWVkLCAwLCAxKTtcclxuICAgICAgICB0YXJnZXRIID0gTWF0aFV0aWxzLmxlcnAoY3VycmVudEgsIHRhcmdldEgsIGZhY3Rvcik7XHJcbiAgICAgICAgdGFyZ2V0ViA9IE1hdGhVdGlscy5sZXJwKGN1cnJlbnRWLCB0YXJnZXRWLCBmYWN0b3IpO1xyXG5cclxuICAgICAgICAvLyBVcGRhdGUgdGhlIGJsZW5kIHZhbHVlc1xyXG4gICAgICAgIHRoaXMuX2hvc3QuQW5pbWF0aW9uRmVhdHVyZS5zZXRBbmltYXRpb25CbGVuZFdlaWdodChcclxuICAgICAgICAgIGxheWVyTmFtZSxcclxuICAgICAgICAgIGFuaW1OYW1lLFxyXG4gICAgICAgICAgJ1gnLFxyXG4gICAgICAgICAgdGFyZ2V0SFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5faG9zdC5BbmltYXRpb25GZWF0dXJlLnNldEFuaW1hdGlvbkJsZW5kV2VpZ2h0KFxyXG4gICAgICAgICAgbGF5ZXJOYW1lLFxyXG4gICAgICAgICAgYW5pbU5hbWUsXHJcbiAgICAgICAgICAnWScsXHJcbiAgICAgICAgICB0YXJnZXRWXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKCF0cmlnZ2VyQmxpbmsgfHwgIXRoaXMuX2lzVGFyZ2V0TW92aW5nKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBFeGVjdXRlIGJsaW5rXHJcbiAgICBPYmplY3QuZW50cmllcyh0aGlzLl9ibGlua0xheWVycykuZm9yRWFjaCgoW2xheWVyTmFtZSwgYW5pbU5hbWVdKSA9PiB7XHJcbiAgICAgIGNvbnN0IGFuaW1hdGlvbiA9IHRoaXMuX21hbmFnZWRMYXllcnNbbGF5ZXJOYW1lXS5hbmltYXRpb25zW2FuaW1OYW1lXTtcclxuXHJcbiAgICAgIGlmIChhbmltYXRpb24uaXNBY3RpdmUpIHtcclxuICAgICAgICB0aGlzLl9ob3N0LkFuaW1hdGlvbkZlYXR1cmUucGxheUFuaW1hdGlvbihsYXllck5hbWUsIGFuaW1OYW1lKTtcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGluc3RhbGxBcGkoKSB7XHJcbiAgICAvKipcclxuICAgICAqIEBpbm5lclxyXG4gICAgICogQG5hbWVzcGFjZSBQb2ludE9mSW50ZXJlc3RGZWF0dXJlXHJcbiAgICAgKi9cclxuICAgIGNvbnN0IGFwaSA9IHN1cGVyLmluc3RhbGxBcGkoKTtcclxuXHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhhcGksIHtcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBtZW1iZXJvZiBQb2ludE9mSW50ZXJlc3RGZWF0dXJlXHJcbiAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgKiBAc2VlIGNvcmUvUG9pbnRPZkludGVyZXN0RmVhdHVyZSN0YXJnZXRcclxuICAgICAgICovXHJcbiAgICAgIHRhcmdldDoge1xyXG4gICAgICAgIGdldDogKCkgPT4gdGhpcy50YXJnZXQsXHJcbiAgICAgICAgc2V0OiB0YXJnZXQgPT4geyB0aGlzLnRhcmdldCA9IHRhcmdldCB9LFxyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcblxyXG4gICAgT2JqZWN0LmFzc2lnbihhcGksIHtcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBtZW1iZXJvZiBQb2ludE9mSW50ZXJlc3RGZWF0dXJlXHJcbiAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgKiBAbWV0aG9kXHJcbiAgICAgICAqIEBzZWUgY29yZS9Qb2ludE9mSW50ZXJlc3RGZWF0dXJlI3JlZ2lzdGVyTG9va0xheWVyXHJcbiAgICAgICAqL1xyXG4gICAgICByZWdpc3Rlckxvb2tMYXllcjogdGhpcy5yZWdpc3Rlckxvb2tMYXllci5iaW5kKHRoaXMpLFxyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIFBvaW50T2ZJbnRlcmVzdEZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBtZXRob2RcclxuICAgICAgICogQHNlZSBjb3JlL1BvaW50T2ZJbnRlcmVzdEZlYXR1cmUjcmVnaXN0ZXJCbGlua0xheWVyXHJcbiAgICAgICAqL1xyXG4gICAgICByZWdpc3RlckJsaW5rTGF5ZXI6IHRoaXMucmVnaXN0ZXJCbGlua0xheWVyLmJpbmQodGhpcyksXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbWVtYmVyb2YgUG9pbnRPZkludGVyZXN0RmVhdHVyZVxyXG4gICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICogQG1ldGhvZFxyXG4gICAgICAgKiBAc2VlIGNvcmUvUG9pbnRPZkludGVyZXN0RmVhdHVyZSNzZXRUYXJnZXRcclxuICAgICAgICovXHJcbiAgICAgIHNldFRhcmdldDogdGhpcy5zZXRUYXJnZXQuYmluZCh0aGlzKSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBtZW1iZXJvZiBQb2ludE9mSW50ZXJlc3RGZWF0dXJlXHJcbiAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgKiBAbWV0aG9kXHJcbiAgICAgICAqIEBzZWUgY29yZS9Qb2ludE9mSW50ZXJlc3RGZWF0dXJlI3NldFRhcmdldEJ5TmFtZVxyXG4gICAgICAgKi9cclxuICAgICAgc2V0VGFyZ2V0QnlOYW1lOiB0aGlzLnNldFRhcmdldEJ5TmFtZS5iaW5kKHRoaXMpLFxyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIFBvaW50T2ZJbnRlcmVzdEZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBtZXRob2RcclxuICAgICAgICogQHNlZSBjb3JlL1BvaW50T2ZJbnRlcmVzdEZlYXR1cmUjc2V0VGFyZ2V0QnlJZFxyXG4gICAgICAgKi9cclxuICAgICAgc2V0VGFyZ2V0QnlJZDogdGhpcy5zZXRUYXJnZXRCeUlkLmJpbmQodGhpcyksXHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gYXBpO1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgUG9pbnRPZkludGVyZXN0RmVhdHVyZTtcclxuZXhwb3J0IHsgQXhpc01hcCB9OyIsIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxyXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTBcclxuaW1wb3J0IENvcmVQb2ludE9mSW50ZXJlc3RGZWF0dXJlLCB7IEF4aXNNYXAgfSBmcm9tICdjb3JlL1BvaW50T2ZJbnRlcmVzdEZlYXR1cmUnO1xyXG5cclxuLyoqXHJcbiAqIEBleHRlbmRzIGNvcmUvUG9pbnRPZkludGVyZXN0RmVhdHVyZVxyXG4gKiBAYWxpYXMgQmFieWxvbi5qcy9Qb2ludE9mSW50ZXJlc3RGZWF0dXJlXHJcbiAqL1xyXG5jbGFzcyBQb2ludE9mSW50ZXJlc3RGZWF0dXJlIGV4dGVuZHMgQ29yZVBvaW50T2ZJbnRlcmVzdEZlYXR1cmUge1xyXG4gIHN0YXRpYyBfZ2V0V29ybGRQb3NpdGlvbihvYmopIHtcclxuICAgIHJldHVybiBvYmouZ2V0V29ybGRNYXRyaXgoKS5tLnNsaWNlKDEyLCAxNSk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgX2dldFdvcmxkTWF0cml4KG9iaikge1xyXG4gICAgcmV0dXJuIFsuLi5vYmouZ2V0V29ybGRNYXRyaXgoKS5tXTtcclxuICB9XHJcblxyXG4gIF92YWxpZGF0ZVRyYW5zZm9ybU9iamVjdChvYmopIHtcclxuICAgIHJldHVybiBvYmogaW5zdGFuY2VvZiBCQUJZTE9OLlRyYW5zZm9ybU5vZGU7XHJcbiAgfVxyXG5cclxuICBzZXRUYXJnZXRCeU5hbWUobmFtZSkge1xyXG4gICAgc3VwZXIuc2V0VGFyZ2V0QnlOYW1lKG5hbWUpO1xyXG4gICAgaWYgKCFuYW1lKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnRhcmdldCA9IHRoaXMuX3NjZW5lLmdldFRyYW5zZm9ybU5vZGVCeU5hbWUobmFtZSk7XHJcbiAgfVxyXG5cclxuICBzZXRUYXJnZXRCeUlkKGlkKSB7XHJcbiAgICBzdXBlci5zZXRUYXJnZXRCeU5hbWUoaWQpO1xyXG4gICAgaWYgKCFpZCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy50YXJnZXQgPSB0aGlzLl9zY2VuZS5nZXRUcmFuc2Zvcm1Ob2RlQnlJRChpZCk7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBQb2ludE9mSW50ZXJlc3RGZWF0dXJlO1xyXG5leHBvcnQgeyBBeGlzTWFwIH07XHJcbiIsIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxyXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTBcclxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9wcmVmZXItZGVmYXVsdC1leHBvcnRcclxuZXhwb3J0IGNvbnN0IGVudiA9ICdiYWJ5bG9uJztcclxuIiwiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXHJcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxyXG5cclxuaW1wb3J0IFV0aWxzIGZyb20gJ2NvcmUvVXRpbHMnO1xyXG5cclxuLyoqXHJcbiAqIEEgY29sbGVjdGlvbiBvZiB1c2VmdWwgdGV4dC10by1zcGVlY2ggZnVuY3Rpb25zLlxyXG4gKlxyXG4gKiBAaGlkZWNvbnN0cnVjdG9yXHJcbiAqL1xyXG5jbGFzcyBUZXh0VG9TcGVlY2hVdGlscyB7XHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyBhIG5ldyBzdHJpbmcgd2l0aCBTU01MIG1hcmtzIGluc2VydGVkIGJhc2VkIG9uXHJcbiAgICogbWF0Y2hlcyBiZXR3ZWVuIHRoZSBpbnB1dCBzdHJpbmcgYW5kIHRoZSBpbnB1dCBtYXAuIFRoZVxyXG4gICAqIHdvcmQgbWF0Y2hlcyBhcmUgY2FzZS1pbnNlbnNpdGl2ZS4gV29yZHMgd2l0aGluIGV4aXN0aW5nXHJcbiAgICogU1NNTCB0YWdzIHdpbGwgbm90IGJlIGFmZmVjdGVkLiBJbnB1dCB0ZXh0IHdpbGwgYmUgc3Vycm91bmRlZFxyXG4gICAqIGJ5IDxzcGVhaz48L3NwZWFrPiB0YWdzIGlmIG5lZWRlZC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gSW5wdXQgc3RyaW5nLlxyXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBtYXAgLSBJbnB1dCBvYmplY3QgdGhhdCBtYXBzIG1hcmsga2V5c1xyXG4gICAqIHRvIGFycmF5cyBvZiB3b3Jkcy4gRXhhbXBsZTpcclxuICAgKlxyXG4gICAqICB7XHJcbiAgICogICAgJ21hcms6c2FkJyA6IFsnc2FkJywgJ2JsdWUnLCAnZG93biddLFxyXG4gICAqICAgICdtYXJrOmhhcHB5JyA6IFsnam95JywgJ2dsYWQnLCAnZ3JlYXQnXSxcclxuICAgKiAgICAnbWFyazpubycgOiBbJ25vJywgJ25haCcsICduYXknLCAnc3VyZSddXHJcbiAgICogIH1cclxuICAgKiBAcGFyYW0ge0FycmF5LjxzdHJpbmc+fSBbcmFuZG9tTWFya3MgPSBbXV0gLSBJZiB0aGVyZSBhcmUgc2VudGVuY2VzIHRoYXQgZG9uJ3RcclxuICAgKiBtYXRjaCBhbnkgd29yZHMgZnJvbSB0aGUgbWFwIG9iamVjdCwgbWFya3MgZnJvbSB0aGlzIGFycmF5IHdpbGwgYmUgcmFuZG9tbHlcclxuICAgKiBjaG9zZW4gYW5kIGluc2VydGVkLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge3N0cmluZ30gLSBVcGRhdGVkIGlucHV0IHN0cmluZy5cclxuICAgKi9cclxuICBzdGF0aWMgYXV0b0dlbmVyYXRlU1NNTE1hcmtzKHRleHQsIG1hcCwgcmFuZG9tTWFya3MgPSBbXSkge1xyXG4gICAgaWYgKHR5cGVvZiBtYXAgIT09ICdvYmplY3QnIHx8IG1hcCA9PT0gbnVsbCkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgYENhbm5vdCBnZW5lcmF0ZSBTU01MIG1hcmtzIGZvciB0ZXh0IFwiJHt0ZXh0fVwiIGJlY2F1c2UgbWFwIGlzIG5vdCBhbiBvYmplY3QuYFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHByb2Nlc3MgdGhlIGlucHV0IG1hcCBpbnRvIGFuIGludGVybmFsIGZvcm1hdFxyXG4gICAgY29uc3QgaW50ZXJuYWxNYXAgPSB0aGlzLl9wcm9jZXNzSW5wdXRNYXAobWFwKTtcclxuXHJcbiAgICBjb25zdCBzcGVha1RhZ3MgPSBbJzxzcGVhaz4nLCAnPC9zcGVhaz4nXTtcclxuICAgIGNvbnN0IHNzbWxNYXJrUmVnZXggPSAvPG1hcmsgbmFtZT0oPzpcInwnKSguKj8pKD86XCJ8JylcXC8+LztcclxuICAgIGNvbnN0IHNzbWxUYWdSZWdleCA9IC88W14+XSo+L2c7XHJcblxyXG4gICAgLy8gSWRlbnRpZnkgYW55IGV4aXN0aW5nIFNTTUwgdGFnc1xyXG4gICAgY29uc3QgZXhpc3RpbmdUYWdzID0gW107XHJcbiAgICBsZXQgcmVzdWx0ID0gc3NtbFRhZ1JlZ2V4LmV4ZWModGV4dCk7XHJcblxyXG4gICAgd2hpbGUgKHJlc3VsdCAhPT0gbnVsbCkge1xyXG4gICAgICBleGlzdGluZ1RhZ3MucHVzaCh7XHJcbiAgICAgICAgc3RhcnQ6IHJlc3VsdC5pbmRleCxcclxuICAgICAgICBlbmQ6IHJlc3VsdC5pbmRleCArIHJlc3VsdFswXS5sZW5ndGgsXHJcbiAgICAgICAgdGV4dDogcmVzdWx0WzBdLFxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHJlc3VsdCA9IHNzbWxUYWdSZWdleC5leGVjKHRleHQpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGNodW5rcyA9IFtdO1xyXG4gICAgbGV0IGluZGV4ID0gMDtcclxuICAgIGxldCBzc21sTWFya1Jlc3VsdDtcclxuICAgIGxldCBkdXBsaWNhdGVNYXJrVG9DaGVjayA9IFtdO1xyXG4gICAgZXhpc3RpbmdUYWdzLmZvckVhY2goZXhpc3RpbmdUYWcgPT4ge1xyXG4gICAgICBjb25zdCBzdWJzdHIgPSB0ZXh0LnNsaWNlKGluZGV4LCBleGlzdGluZ1RhZy5zdGFydCk7XHJcblxyXG4gICAgICBpZiAoc3Vic3RyICE9PSAnJykge1xyXG4gICAgICAgIC8vIGF1dG8tbWFyayBub24tdGFnIHRleHRcclxuICAgICAgICBjaHVua3MucHVzaChcclxuICAgICAgICAgIHRoaXMuX2luc2VydE1hcmtzKHN1YnN0ciwgaW50ZXJuYWxNYXAsIGR1cGxpY2F0ZU1hcmtUb0NoZWNrKVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIGR1cGxpY2F0ZU1hcmtUb0NoZWNrID0gW107XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHNzbWxNYXJrUmVzdWx0ID0gc3NtbE1hcmtSZWdleC5leGVjKGV4aXN0aW5nVGFnLnRleHQpO1xyXG5cclxuICAgICAgaWYgKHNzbWxNYXJrUmVzdWx0ICE9PSBudWxsKSB7XHJcbiAgICAgICAgY29uc3QgbWFya1RleHQgPSBzc21sTWFya1Jlc3VsdFsxXTtcclxuICAgICAgICBkdXBsaWNhdGVNYXJrVG9DaGVjay5wdXNoKG1hcmtUZXh0KTtcclxuICAgICAgfSBlbHNlIGlmICghc3BlYWtUYWdzLmluY2x1ZGVzKGV4aXN0aW5nVGFnLnRleHQpKSB7XHJcbiAgICAgICAgY2h1bmtzLnB1c2goZXhpc3RpbmdUYWcudGV4dCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIGFkdmFuY2UgdGhlIGluZGV4XHJcbiAgICAgIGluZGV4ID0gZXhpc3RpbmdUYWcuZW5kO1xyXG4gICAgfSk7XHJcblxyXG4gICAgY2h1bmtzLnB1c2goXHJcbiAgICAgIHRoaXMuX2luc2VydE1hcmtzKHRleHQuc2xpY2UoaW5kZXgpLCBpbnRlcm5hbE1hcCwgZHVwbGljYXRlTWFya1RvQ2hlY2spXHJcbiAgICApO1xyXG5cclxuICAgIGxldCBtYXJrZWRUZXh0ID0gY2h1bmtzLmpvaW4oJycpO1xyXG5cclxuICAgIGlmIChyYW5kb21NYXJrcyAmJiByYW5kb21NYXJrcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIC8vIGFkZCByYW5kb20gbWFya3MgdG8gYW55IHVubWFya2VkIHNlbnRlbmNlc1xyXG4gICAgICBtYXJrZWRUZXh0ID0gdGhpcy5hZGRNYXJrc1RvVW5tYXJrZWRTZW50ZW5jZXMoXHJcbiAgICAgICAgbWFya2VkVGV4dCxcclxuICAgICAgICByYW5kb21NYXJrc1xyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBUZXh0VG9TcGVlY2hVdGlscy52YWxpZGF0ZVRleHQobWFya2VkVGV4dCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIGEgbmV3IHN0cmluZyB3aXRoIGEgcmFuZG9tIFNTTUwgbWFyayBpbnNlcnRlZCBhdCBlYWNoIHNlbnRlbmNlIHRoYXRcclxuICAgKiBkb2VzIG5vdCBhbHJlYWR5IGNvbnRhaW4gYW4gU1NNTCBtYXJrLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSBJbnB1dCBzdHJpbmcuXHJcbiAgICogQHBhcmFtIHtBcnJheS48c3RyaW5nPn0gbWFya3MgLSBBbnkgYXJyYXkgb2YgcmFuZG9tIFNTTUwgbWFya3MgdG8gY2hvb3NlIGZyb21cclxuICAgKiB3aGVuIG1vZGlmeWluZyB0aGUgdGV4dC5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XHJcbiAgICovXHJcbiAgc3RhdGljIGFkZE1hcmtzVG9Vbm1hcmtlZFNlbnRlbmNlcyh0ZXh0LCBtYXJrcykge1xyXG4gICAgaWYgKCFtYXJrcyB8fCBtYXJrcy5sZW5ndGggPT09IDApIHJldHVybiB0ZXh0O1xyXG5cclxuICAgIGNvbnN0IHNzbWxNYXJrUmVnZXggPSAvPG1hcmsgbmFtZT0oPzpcInwnKSguKj8pKD86XCJ8JylcXC8+L2c7XHJcbiAgICBjb25zdCBzc21sVGFnUmVnZXggPSAvPFtePl0qPi9nO1xyXG5cclxuICAgIC8vIEZpbmQgdGhlIGluZGljZXMgb2YgYW55IG1hcmtzIGluIHRoZSB0ZXh0XHJcbiAgICBjb25zdCBtYXJrSW5kaWNlcyA9IFtdO1xyXG4gICAgbGV0IG1hcmtSZXN1bHQgPSBzc21sTWFya1JlZ2V4LmV4ZWModGV4dCk7XHJcblxyXG4gICAgd2hpbGUgKG1hcmtSZXN1bHQgIT09IG51bGwpIHtcclxuICAgICAgbWFya0luZGljZXMucHVzaChtYXJrUmVzdWx0LmluZGV4KTtcclxuICAgICAgbWFya1Jlc3VsdCA9IHNzbWxNYXJrUmVnZXguZXhlYyh0ZXh0KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBGaW5kIGFsbCBTU01MIHRhZ3MgaW4gdGhlIHRleHRcclxuICAgIGNvbnN0IGV4aXN0aW5nVGFncyA9IFtdO1xyXG4gICAgbGV0IHNzbWxSZXN1bHQgPSBzc21sVGFnUmVnZXguZXhlYyh0ZXh0KTtcclxuICAgIHdoaWxlIChzc21sUmVzdWx0ICE9PSBudWxsKSB7XHJcbiAgICAgIGV4aXN0aW5nVGFncy5wdXNoKHtcclxuICAgICAgICBzdGFydDogc3NtbFJlc3VsdC5pbmRleCxcclxuICAgICAgICBlbmQ6IHNzbWxSZXN1bHQuaW5kZXggKyBzc21sUmVzdWx0WzBdLmxlbmd0aCxcclxuICAgICAgICB0ZXh0OiBzc21sUmVzdWx0WzBdLFxyXG4gICAgICB9KTtcclxuICAgICAgc3NtbFJlc3VsdCA9IHNzbWxUYWdSZWdleC5leGVjKHRleHQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIENyZWF0ZSBhIGNvcHkgb2YgdGhlIHRleHQgd2l0aCBhbGwgU1NNTCBtYXJrcyByZXBsYWNlcyB3aXRoIHdoaXRlc3BhY2VcclxuICAgIGxldCBjbGVhbmVkVGV4dCA9IHRleHQuc2xpY2UoKTtcclxuICAgIGV4aXN0aW5nVGFncy5mb3JFYWNoKGV4aXN0aW5nU3NtbCA9PiB7XHJcbiAgICAgIGNvbnN0IHdoaXRlc3BhY2UgPSBuZXcgQXJyYXkoZXhpc3RpbmdTc21sLnRleHQubGVuZ3RoICsgMSkuam9pbignICcpO1xyXG4gICAgICBjbGVhbmVkVGV4dCA9IFtcclxuICAgICAgICBjbGVhbmVkVGV4dC5zbGljZSgwLCBleGlzdGluZ1NzbWwuc3RhcnQpLFxyXG4gICAgICAgIHdoaXRlc3BhY2UsXHJcbiAgICAgICAgY2xlYW5lZFRleHQuc2xpY2UoZXhpc3RpbmdTc21sLmVuZCksXHJcbiAgICAgIF0uam9pbignJyk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCBzZW50ZW5jZUVuZEluZGljZXMgPSB0aGlzLl9nZXRTZW50ZW5jZUVuZHMoY2xlYW5lZFRleHQpO1xyXG5cclxuICAgIC8vIE9ubHkgaW5zZXJ0IHJhbmRvbSBtYXJrcyBpbnRvIHNlbnRlbmNlcyB0aGF0IGRvbid0IGFscmVhZHkgaGF2ZSBhbnlcclxuICAgIGxldCBwcmV2SW5kZXggPSAwO1xyXG4gICAgY29uc3QgdGFyZ2V0SW5kaWNlcyA9IHNlbnRlbmNlRW5kSW5kaWNlcy5maWx0ZXIoaW5kZXggPT4ge1xyXG4gICAgICBjb25zdCBjb250YWluc01hcmsgPVxyXG4gICAgICAgIG1hcmtJbmRpY2VzLmZpbmRJbmRleChtYXJrSW5kZXggPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHByZXZJbmRleCA8PSBtYXJrSW5kZXggJiYgaW5kZXggPiBtYXJrSW5kZXg7XHJcbiAgICAgICAgfSkgIT09IC0xO1xyXG4gICAgICBwcmV2SW5kZXggPSBpbmRleDtcclxuICAgICAgcmV0dXJuICFjb250YWluc01hcms7XHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCByYW5kb21NYXJrZWRUZXh0ID0gdGhpcy5faW5zZXJ0UmFuZG9tTWFya3NBdChcclxuICAgICAgdGV4dCxcclxuICAgICAgdGFyZ2V0SW5kaWNlcyxcclxuICAgICAgbWFya3NcclxuICAgICk7XHJcblxyXG4gICAgcmV0dXJuIHJhbmRvbU1hcmtlZFRleHQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZW5lcmF0ZSBhIHZlcnNpb24gb2YgZ2l2ZW4gdGV4dCB0aGF0IGlzIGVuY2xvc2VkIGJ5IFBvbGx5IHNzbWwgc3BlYWsgdGFncy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gVGhlIHRleHQgdG8gdmFsaWRhdGUuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSAtIFVwZGF0ZWQgaW5wdXQgc3RyaW5nLlxyXG4gICAqL1xyXG4gIHN0YXRpYyB2YWxpZGF0ZVRleHQodGV4dCkge1xyXG4gICAgaWYgKCF0ZXh0KSB7XHJcbiAgICAgIHRleHQgPSAnPHNwZWFrPjwvc3BlYWs+JztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRleHQgPSB0ZXh0XHJcbiAgICAgICAgLnJlcGxhY2UoLyheXFxzKjxcXHMqc3BlYWtcXHMqKT5cXHMqfCheXFxzKikvLCAnPHNwZWFrPicpXHJcbiAgICAgICAgLnJlcGxhY2UoLyhcXHMqPFxccypcXC9cXHMqc3BlYWtcXHMqPlxccyokfFxccyokKS8sICc8L3NwZWFrPicpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0ZXh0O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUGFyc2UgYW4gaW5wdXQgc3RyaW5nIGFuZCBpbnNlcnQgU1NNTCBtYXJrcyBiYXNlZCBvblxyXG4gICAqIHdvcmQgbWF0Y2hlcyBpbiBhIG1hcC5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIElucHV0IHN0cmluZy5cclxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBbaW5kaWNlcyA9IFtdXSAtIEFuIGFycmF5IG9mIGluZGljZXMgaW4gdGhlIHRleHQgaW5wdXRcclxuICAgKiB3aGVyZSByYW5kb20gbWFya3Mgc2hvdWxkIGJlIGluc2VydGVkLlxyXG4gICAqIEBwYXJhbSB7QXJyYXkuPHN0cmluZz59IFttYXJrcyA9IFtdXSAtIEFuIGFycmF5IG9mIG1hcmsgc3RyaW5ncyB0byBjaG9vc2VcclxuICAgKiBmcm9tIHdoZW4gaW5zZXJ0aW5nIHJhbmRvbSBtYXJrcy5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IC0gVXBkYXRlZCBpbnB1dCBzdHJpbmcuXHJcbiAgICovXHJcbiAgc3RhdGljIF9pbnNlcnRSYW5kb21NYXJrc0F0KHRleHQsIGluZGljZXMgPSBbXSwgbWFya3MgPSBbXSkge1xyXG4gICAgaWYgKCFtYXJrcyB8fCBtYXJrcy5sZW5ndGggPT09IDAgfHwgIWluZGljZXMgfHwgaW5kaWNlcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgcmV0dXJuIHRleHQ7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IG9mZnNldCA9IDA7XHJcbiAgICBpbmRpY2VzLmZvckVhY2goaW5kZXggPT4ge1xyXG4gICAgICBjb25zdCByYW5kb21NYXJrID0gYDxtYXJrIG5hbWU9JyR7XHJcbiAgICAgICAgbWFya3NbVXRpbHMuZ2V0UmFuZG9tSW50KDAsIG1hcmtzLmxlbmd0aCldXHJcbiAgICAgIH0nLz5gO1xyXG4gICAgICB0ZXh0ID0gW1xyXG4gICAgICAgIHRleHQuc2xpY2UoMCwgaW5kZXggKyBvZmZzZXQpLFxyXG4gICAgICAgIHJhbmRvbU1hcmssXHJcbiAgICAgICAgdGV4dC5zbGljZShpbmRleCArIG9mZnNldCksXHJcbiAgICAgIF0uam9pbignJyk7XHJcbiAgICAgIG9mZnNldCArPSByYW5kb21NYXJrLmxlbmd0aDtcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiB0ZXh0O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUGFyc2VzIGEgc3RyaW5nIG9mIHRleHQgYW5kIHJldHVybnMgYW4gYXJyYXkgY29udGFpbmluZyB0aGUgaW5kaWNlc1xyXG4gICAqIG9mIHRoZSBsYXN0IGNoYXJhY3RlciBpbiBhIHNlbnRlbmNlIHRoYXQgaXMgbm90IGluIHRoZSBmb2xsb3dpbmcgbGlzdDpcclxuICAgKiAgKCcuJywgJz8nLCAnIScpXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSBUZXh0IHRvIHByb2Nlc3MgZm9yIGVuZCBvZiBzZW50ZW5jZVxyXG4gICAqIGluZGljZXMuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7QXJyYXkuPG51bWJlcj59IC0gQXJyYXkgb2YgZW5kIG9mIHNlbnRlbmNlIGluZGljZXMuXHJcbiAgICovXHJcbiAgc3RhdGljIF9nZXRTZW50ZW5jZUVuZHModGV4dCkge1xyXG4gICAgY29uc3Qgc2VudGVuY2VSZWdleCA9IC9bXi4hP10rWy4hP10rL2c7XHJcbiAgICBjb25zdCBlbmRTZW50ZW5jZVJlZ2V4ID0gL1suIT9dKy87XHJcblxyXG4gICAgbGV0IHJlc3VsdCA9IHNlbnRlbmNlUmVnZXguZXhlYyh0ZXh0KTtcclxuICAgIGNvbnN0IHNlbnRlbmNlRW5kcyA9IFtdO1xyXG4gICAgd2hpbGUgKHJlc3VsdCAhPT0gbnVsbCkge1xyXG4gICAgICAvLyBmaW5kIHRoZSBsYXN0IG5vbi1wdW5jdHVhdGlvbiBjaGFyYWN0ZXJcclxuICAgICAgY29uc3QgcHVuY3RSZXN1bHQgPSBlbmRTZW50ZW5jZVJlZ2V4LmV4ZWMocmVzdWx0WzBdKTtcclxuICAgICAgc2VudGVuY2VFbmRzLnB1c2goXHJcbiAgICAgICAgcmVzdWx0LmluZGV4ICsgcmVzdWx0WzBdLmxlbmd0aCAtIHB1bmN0UmVzdWx0WzBdLmxlbmd0aFxyXG4gICAgICApO1xyXG4gICAgICByZXN1bHQgPSBzZW50ZW5jZVJlZ2V4LmV4ZWModGV4dCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHNlbnRlbmNlRW5kcztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFBhcnNlIGFuIGlucHV0IHN0cmluZyBhbmQgaW5zZXJ0IFNTTUwgbWFya3MgYmFzZWQgb25cclxuICAgKiB3b3JkIG1hdGNoZXMgaW4gYSBtYXAuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSBJbnB1dCBzdHJpbmcuXHJcbiAgICogQHBhcmFtIHtNYXB9IG1hcCAtIE1hcHBpbmcgb2Ygd29yZHMgdG8gbWFyayB2YWx1ZXMgdGhhdFxyXG4gICAqIHdpbGwgYmUgaW5zZXJ0ZWQgYXMgdGhlIHZhbHVlIGZvciBhIG1hcmsncyAnbmFtZScgYXR0cmlidXRlLlxyXG4gICAqIEBwYXJhbSB7QXJyYXl9IGR1cGxpY2F0ZXNUb0NoZWNrIC0gQSBsaXN0IG9mIG1hcmsgdmFsdWVzIHRvIGNoZWNrIGZvciBkdXBsaWNhdGUgYWdhaW5zdCB0aGUgZmlyc3Qgd29yZFxyXG4gICAqXHJcbiAgICogQHJldHVybnMge3N0cmluZ30gLSBVcGRhdGVkIGlucHV0IHN0cmluZy5cclxuICAgKi9cclxuICBzdGF0aWMgX2luc2VydE1hcmtzKHRleHQsIG1hcCwgZHVwbGljYXRlc1RvQ2hlY2spIHtcclxuICAgIGlmICh0ZXh0ID09PSAnJykgcmV0dXJuIHRleHQ7XHJcblxyXG4gICAgY29uc3Qgd29yZFJlZ2V4ID0gL1xcdyt8XFxzK3xbXlxcc1xcd10rL2c7XHJcblxyXG4gICAgbGV0IGxvd2VyQ2FzZVdvcmQ7XHJcbiAgICBsZXQgY2hlY2tEdXBsaWNhdGUgPSB0cnVlO1xyXG4gICAgY29uc3QgbWFya2VkV29yZHMgPSB0ZXh0Lm1hdGNoKHdvcmRSZWdleCkubWFwKHdvcmQgPT4ge1xyXG4gICAgICBsb3dlckNhc2VXb3JkID0gd29yZC50b0xvd2VyQ2FzZSgpO1xyXG5cclxuICAgICAgaWYgKG1hcC5oYXMobG93ZXJDYXNlV29yZCkpIHtcclxuICAgICAgICBjb25zdCBtYXJrcyA9IG1hcC5nZXQobG93ZXJDYXNlV29yZCkubWFwKG1hcmsgPT4ge1xyXG4gICAgICAgICAgaWYgKGNoZWNrRHVwbGljYXRlKSB7XHJcbiAgICAgICAgICAgIGNoZWNrRHVwbGljYXRlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybiBkdXBsaWNhdGVzVG9DaGVjay5pbmNsdWRlcyhtYXJrKVxyXG4gICAgICAgICAgICAgID8gJydcclxuICAgICAgICAgICAgICA6IGA8bWFyayBuYW1lPScke21hcmt9Jy8+YDtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBgPG1hcmsgbmFtZT0nJHttYXJrfScvPmA7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIGAke21hcmtzLmpvaW4oJycpfSR7d29yZH1gO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNoZWNrRHVwbGljYXRlID0gZmFsc2U7XHJcbiAgICAgICAgcmV0dXJuIHdvcmQ7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IGV4aXN0aW5nTWFya3MgPSBkdXBsaWNhdGVzVG9DaGVjay5tYXAobWFyayA9PiB7XHJcbiAgICAgIHJldHVybiBgPG1hcmsgbmFtZT0nJHttYXJrfScvPmA7XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gYCR7ZXhpc3RpbmdNYXJrcy5qb2luKCcnKX0ke21hcmtlZFdvcmRzLmpvaW4oJycpfWA7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQcm9jZXNzZXMgYW4gaW5wdXQgb2JqZWN0IGZvciBtYXBwaW5nIGFuIGFycmF5XHJcbiAgICogb2Ygd29yZHMgdG8gc3BlY2lmaWMgbWFyayBrZXlzLiBDb252ZXJ0cyB0aGUgaW5wdXRcclxuICAgKiBtYXAgaW50byBhIE1hcCB3aXRoIGEgbW9yZSBlZmZpY2llbnQgZm9ybWF0IGZvclxyXG4gICAqIHBlcmZvcm1pbmcgbWFyayBpbmplY3Rpb24uXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtvYmplY3R9IG1hcCAtIElucHV0IG9iamVjdCB0aGF0IG1hcHMgbWFyayBrZXlzXHJcbiAgICogdG8gYXJyYXlzIG9mIHdvcmRzLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge01hcH0gLSBNYXAgZm9yIGludGVybmFsIHVzZS5cclxuICAgKi9cclxuICBzdGF0aWMgX3Byb2Nlc3NJbnB1dE1hcChtYXApIHtcclxuICAgIGNvbnN0IGludGVybmFsTWFwID0gbmV3IE1hcCgpO1xyXG5cclxuICAgIGxldCBsaXN0ID0gW107XHJcbiAgICBPYmplY3QuZW50cmllcyhtYXApLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xyXG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgICAgYENhbm5vdCBnZW5lcmF0ZSBTU01MIG1hcmtzIGZyb20gbWFwIFwiJHttYXB9XCIgYmVjYXVzZSB2YWx1ZSBmb3Iga2V5ICcke2tleX0nIGlzIG5vdCBhbiBhcnJheS5gXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdmFsdWUuZm9yRWFjaCh3b3JkID0+IHtcclxuICAgICAgICBjb25zdCBsb3dlckNhc2VXb3JkID0gd29yZC50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgIGxpc3QgPSBpbnRlcm5hbE1hcC5nZXQobG93ZXJDYXNlV29yZCk7XHJcblxyXG4gICAgICAgIGlmIChsaXN0ICE9PSB1bmRlZmluZWQgJiYgIWxpc3QuaW5jbHVkZXMoa2V5KSkge1xyXG4gICAgICAgICAgaW50ZXJuYWxNYXAuc2V0KGxvd2VyQ2FzZVdvcmQsIFsuLi5saXN0LCBrZXldKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaW50ZXJuYWxNYXAuc2V0KGxvd2VyQ2FzZVdvcmQsIFtrZXldKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIGludGVybmFsTWFwO1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgVGV4dFRvU3BlZWNoVXRpbHM7XHJcbiIsIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxyXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTBcclxuaW1wb3J0IERlZmVycmVkIGZyb20gJ2NvcmUvRGVmZXJyZWQnO1xyXG5cclxuLyoqXHJcbiAqIENsYXNzIHRoYXQgY2FuIHBsYXkgYmFjayBhdWRpbyBnZW5lcmF0ZWQgYnkgQVdTIFBvbGx5IGFuZCBzeW5jaHJvbml6ZWQgZW1pdFxyXG4gKiBzcGVlY2htYXJrIG1lc3NhZ2VzLlxyXG4gKlxyXG4gKiBAYWJzdHJhY3RcclxuICovXHJcbmNsYXNzIEFic3RyYWN0U3BlZWNoIHtcclxuICAvKipcclxuICAgKiBAY29uc3RydWN0b3JcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7Y29yZS9UZXh0VG9TcGVlY2hGZWF0dXJlfSBzcGVha2VyIC0gVGhlIGZlYXR1cmUgdGhhdCBvd25zIHRoZSBTcGVlY2ggYW5kXHJcbiAgICogd2lsbCBlbWl0IHNwZWVjaG1hcmsgbWVzc2FnZXMuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSBUaGUgdGV4dCBvZiB0aGUgc3BlZWNoLlxyXG4gICAqIEBwYXJhbSB7QXJyYXkuPE9iamVjdD59IFtzcGVlY2htYXJrcz1bXV0gLSBBbiBhcnJheSBvZiBzcGVlY2htYXJrIG9iamVjdHMgcmVwcmVzZW50aW5nXHJcbiAgICogdGhlIHRleHQgYW5kIHRpbWluZyBvZiB0aGUgc3BlZWNoLlxyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKHNwZWFrZXIsIHRleHQsIHNwZWVjaG1hcmtzID0gW10pIHtcclxuICAgIHRoaXMuX3NwZWFrZXIgPSBzcGVha2VyO1xyXG4gICAgdGhpcy5fdGV4dCA9IHRleHQ7XHJcbiAgICB0aGlzLl9zcGVlY2htYXJrcyA9IHNwZWVjaG1hcmtzO1xyXG4gICAgdGhpcy5fc3BlZWNobWFya09mZnNldCA9IDA7XHJcbiAgICB0aGlzLl9yZXNldCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVzZXQgdHJhY2tpbmcgcHJvcGVydGllcy5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge251bWJlcn0gW2N1cnJlbnRUaW1lPTBdIC0gVGltZSB0byB1c2UgZm9yIF9zdGFydFRpbWUuXHJcbiAgICovXHJcbiAgX3Jlc2V0KGN1cnJlbnRUaW1lID0gMCkge1xyXG4gICAgdGhpcy5fc3RhcnRUaW1lID0gY3VycmVudFRpbWU7XHJcbiAgICB0aGlzLl9sb2NhbFRpbWUgPSAwO1xyXG4gICAgdGhpcy5fcGF1c2VUaW1lID0gMDtcclxuICAgIHRoaXMuX3BsYXlpbmcgPSBmYWxzZTtcclxuICAgIHRoaXMuX21hcmtJdGVyID0gdGhpcy5fc3BlZWNobWFya3MudmFsdWVzKCk7XHJcbiAgICBjb25zdCB7dmFsdWUsIGRvbmV9ID0gdGhpcy5fbWFya0l0ZXIubmV4dCgpO1xyXG4gICAgdGhpcy5fY3VycmVudE1hcmsgPSB2YWx1ZTtcclxuICAgIHRoaXMuX2VuZFRpbWUgPSB0aGlzLl9zcGVlY2htYXJrcy5sZW5ndGhcclxuICAgICAgPyB0aGlzLl9zcGVlY2htYXJrc1t0aGlzLl9zcGVlY2htYXJrcy5sZW5ndGggLSAxXS50aW1lXHJcbiAgICAgIDogMDtcclxuICAgIHRoaXMuX2RvbmUgPSBkb25lO1xyXG4gICAgdGhpcy5fcHJvbWlzZSA9IG51bGw7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGUgYSBuZXcgcHJvbWlzZSB0aGF0IHdpbGwgc3RvcCBwbGF5YmFjayBhbmQgZW1pdCBtZXNzYWdlcyBmb3IgdGhpcyBzcGVlY2guXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb25GaW5pc2ggLSBGdW5jaXRvbiB0byBleGVjdXRlIG9uY2UgdGhlIHNwZWVjaCBzdG9wcy5cclxuICAgKiBAcGFyYW0ge29uRXJyb3I9fSBvbkVycm9yIC0gRnVuY3Rpb24gdG8gZXhlY3V0ZSBpZiB0aGUgc3BlZWNoIGVuY291bnRlcnMgYW5cclxuICAgKiBlcnJvci5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb25JbnRlcnJ1cHQgLSBGdW5jdGlvbiB0byBleGVjdXRlIGlmIHRoZSBzcGVlY2ggaXMgY2FuY2VsZWQuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7RGVmZXJyZWR9XHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIF9jcmVhdGVQcm9taXNlKG9uRmluaXNoLCBvbkVycm9yLCBvbkludGVycnVwdCkge1xyXG4gICAgY29uc3Qgb25SZXNvbHZlID0gdmFsdWUgPT4ge1xyXG4gICAgICB0aGlzLl9wbGF5aW5nID0gZmFsc2U7XHJcblxyXG4gICAgICB0aGlzLl9zcGVha2VyLmVtaXQodGhpcy5fc3BlYWtlci5jb25zdHJ1Y3Rvci5FVkVOVFMuc3RvcCwgdGhpcyk7XHJcbiAgICAgIHRoaXMuX3NwZWFrZXIuY29uc3RydWN0b3IuZW1pdChcclxuICAgICAgICB0aGlzLl9zcGVha2VyLmNvbnN0cnVjdG9yLkVWRU5UUy5zdG9wLFxyXG4gICAgICAgIHRoaXNcclxuICAgICAgKTtcclxuXHJcbiAgICAgIGlmICh0eXBlb2Ygb25GaW5pc2ggPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICBvbkZpbmlzaCh2YWx1ZSk7XHJcbiAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgY29uc3Qgb25SZWplY3QgPSBlID0+IHtcclxuICAgICAgdGhpcy5fcGxheWluZyA9IGZhbHNlO1xyXG5cclxuICAgICAgdGhpcy5fc3BlYWtlci5lbWl0KHRoaXMuX3NwZWFrZXIuY29uc3RydWN0b3IuRVZFTlRTLnN0b3AsIHRoaXMpO1xyXG4gICAgICB0aGlzLl9zcGVha2VyLmNvbnN0cnVjdG9yLmVtaXQoXHJcbiAgICAgICAgdGhpcy5fc3BlYWtlci5jb25zdHJ1Y3Rvci5FVkVOVFMuc3RvcCxcclxuICAgICAgICB0aGlzXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBjb25zb2xlLmVycm9yKFxyXG4gICAgICAgIGAke3RoaXMuY29uc3RydWN0b3IubmFtZX0gZW5jb3VudGVyZWQgYW4gdW5leHBlY3RlZCBlcnJvcjogJHtlfWBcclxuICAgICAgKTtcclxuXHJcbiAgICAgIGlmICh0eXBlb2Ygb25FcnJvciA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgIG9uRXJyb3IoZSk7XHJcbiAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgY29uc3Qgb25DYW5jZWwgPSB2YWx1ZSA9PiB7XHJcbiAgICAgIHRoaXMuX3BsYXlpbmcgPSBmYWxzZTtcclxuXHJcbiAgICAgIHRoaXMuX3NwZWFrZXIuZW1pdCh0aGlzLl9zcGVha2VyLmNvbnN0cnVjdG9yLkVWRU5UUy5pbnRlcnJ1cHQsIHRoaXMpO1xyXG4gICAgICB0aGlzLl9zcGVha2VyLmNvbnN0cnVjdG9yLmVtaXQoXHJcbiAgICAgICAgdGhpcy5fc3BlYWtlci5jb25zdHJ1Y3Rvci5FVkVOVFMuaW50ZXJydXB0LFxyXG4gICAgICAgIHRoaXNcclxuICAgICAgKTtcclxuXHJcbiAgICAgIGlmICh0eXBlb2Ygb25JbnRlcnJ1cHQgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICBvbkludGVycnVwdCh2YWx1ZSk7XHJcbiAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5fcHJvbWlzZSA9IG5ldyBEZWZlcnJlZCh1bmRlZmluZWQsIG9uUmVzb2x2ZSwgb25SZWplY3QsIG9uQ2FuY2VsKTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5fcHJvbWlzZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiB3aGV0aGVyIG9yIG5vdCB0aGUgc3BlZWNoIGhhcyByZWFjaGVkIGl0J3MgZW5kLlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gICAqL1xyXG4gIF9jaGVja0ZpbmlzaGVkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2RvbmUgJiYgdGhpcy5fbG9jYWxUaW1lID49IHRoaXMuX2VuZFRpbWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSBwbGF5YmFjayBzdGF0ZSBvZiB0aGUgYXVkaW8uXHJcbiAgICpcclxuICAgKiBAcmVhZG9ubHlcclxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgKi9cclxuICBnZXQgcGxheWluZygpIHtcclxuICAgIHJldHVybiB0aGlzLl9wbGF5aW5nO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgdGV4dCBvZiB0aGUgc3BlZWNoLlxyXG4gICAqXHJcbiAgICogQHJlYWRvbmx5XHJcbiAgICogQHR5cGUge3N0cmluZ31cclxuICAgKi9cclxuICBnZXQgdGV4dCgpIHtcclxuICAgIHJldHVybiB0aGlzLl90ZXh0O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyBhIHNoYWxsb3cgY29weSBvZiB0aGUgc3BlZWNobWFya3MgYXJyYXkgZm9yIHRoZSBzcGVlY2guXHJcbiAgICpcclxuICAgKiBAcmVhZG9ubHlcclxuICAgKiBAdHlwZSB7QXJyYXkuPE9iamVjdD59XHJcbiAgICovXHJcbiAgZ2V0IHNwZWVjaG1hcmtzKCkge1xyXG4gICAgcmV0dXJuIFsuLi50aGlzLl9zcGVlY2htYXJrc107XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIGFuZCBzZXRzIHRoZSBudW1iZXIgb2Ygc2Vjb25kcyB0byBvZmZzZXQgc3BlZWNobWFyayBlbWlzc2lvbi5cclxuICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAqL1xyXG4gIGdldCBzcGVlY2htYXJrT2Zmc2V0KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NwZWVjaG1hcmtPZmZzZXQgLyAxMDAwO1xyXG4gIH1cclxuXHJcbiAgc2V0IHNwZWVjaG1hcmtPZmZzZXQob2Zmc2V0KSB7XHJcbiAgICB0aGlzLl9zcGVlY2htYXJrT2Zmc2V0ID0gb2Zmc2V0ICogMTAwMDsgLy8gU3RvcmUgYXMgbWlsbGlzZWNvbmRzXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFbWl0IHNwZWVjaG1hcmsgbWVzc2FnZXMgYXMgdGhleSBhcmUgZW5jb3VudGVyZWQgaW4gc3luYyB3aXRoIGF1ZGlvLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IGN1cnJlbnRUaW1lIC0gQ3VycmVudCBnbG9iYWwgdGltZSB3aGVuIHVwZGF0ZSB3YXMgY2FsbGVkLlxyXG4gICAqL1xyXG4gIHVwZGF0ZShjdXJyZW50VGltZSkge1xyXG4gICAgaWYgKCF0aGlzLl9wbGF5aW5nKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBVcGRhdGUgbG9jYWwgYXVkaW8gdGltZVxyXG4gICAgdGhpcy5fbG9jYWxUaW1lID0gY3VycmVudFRpbWUgLSB0aGlzLl9zdGFydFRpbWU7XHJcblxyXG4gICAgaWYgKCF0aGlzLl9kb25lKSB7XHJcbiAgICAgIC8vIEVtaXQgc3BlZWNobWFyayBtZXNzYWdlcyBmb3IgbWFya3MgdXAgdG8gdGhlIGN1cnJlbnQgdGltZVxyXG4gICAgICB3aGlsZSAoXHJcbiAgICAgICAgIXRoaXMuX2RvbmUgJiZcclxuICAgICAgICB0aGlzLl9jdXJyZW50TWFyay50aW1lICsgdGhpcy5fc3BlZWNobWFya09mZnNldCA8PSB0aGlzLl9sb2NhbFRpbWVcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGhpcy5fc3BlYWtlci5lbWl0KFxyXG4gICAgICAgICAgdGhpcy5fc3BlYWtlci5jb25zdHJ1Y3Rvci5FVkVOVFNbdGhpcy5fY3VycmVudE1hcmsudHlwZV0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIHNwZWVjaDogdGhpcyxcclxuICAgICAgICAgICAgbWFyazogdGhpcy5fY3VycmVudE1hcmssXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICAgICAgICBjb25zdCB7dmFsdWUsIGRvbmV9ID0gdGhpcy5fbWFya0l0ZXIubmV4dCgpO1xyXG5cclxuICAgICAgICB0aGlzLl9jdXJyZW50TWFyayA9IHZhbHVlO1xyXG4gICAgICAgIHRoaXMuX2RvbmUgPSBkb25lO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gRW5kIHBsYXliYWNrXHJcbiAgICBpZiAodGhpcy5fY2hlY2tGaW5pc2hlZCgpKSB7XHJcbiAgICAgIHRoaXMuc3RvcCgpO1xyXG4gICAgICB0aGlzLl9yZXNldCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUGxheSB0aGUgc3BlZWNoIGZyb20gdGhlIGJlZ2lubmluZy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBjdXJyZW50VGltZSAtIEN1cnJlbnQgZ2xvYmFsIHRpbWUgd2hlbiBwbGF5IHdhcyBjYWxsZWQuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9uRmluaXNoIC0gT3B0aW9uYWwgZnVuY3Rpb24gdG8gZXhlY3V0ZSBvbmNlIHRoZSBzcGVlY2hcclxuICAgKiBwcm9taXNlIHJlc29sdmVzLlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvbkVycm9yIC0gT3B0aW9uYWwgZnVuY3Rpb24gdG8gZXhlY3V0ZSBpZiB0aGUgc3BlZWNoXHJcbiAgICogZW5jb3VudGVycyBhbmQgZXJyb3IgZHVyaW5nIHBsYXliYWNrLlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvbkludGVycnVwdCAtIE9wdGlvbmFsIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgaWYgdGhlIHNwZWVjaFxyXG4gICAqIGlzIGNhbmNlbGVkLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0RlZmVycmVkfSBSZXNvbHZlcyBvbmNlIHRoZSBzcGVlY2ggcmVhY2hlcyB0aGUgZW5kIG9mIHBsYXliYWNrLlxyXG4gICAqL1xyXG4gIHBsYXkoY3VycmVudFRpbWUsIG9uRmluaXNoLCBvbkVycm9yLCBvbkludGVycnVwdCkge1xyXG4gICAgdGhpcy5fcmVzZXQoY3VycmVudFRpbWUpO1xyXG4gICAgdGhpcy5fcGxheWluZyA9IHRydWU7XHJcblxyXG4gICAgdGhpcy5fc3BlYWtlci5lbWl0KHRoaXMuX3NwZWFrZXIuY29uc3RydWN0b3IuRVZFTlRTLnBsYXksIHRoaXMpO1xyXG4gICAgdGhpcy5fc3BlYWtlci5jb25zdHJ1Y3Rvci5lbWl0KHRoaXMuX3NwZWFrZXIuY29uc3RydWN0b3IuRVZFTlRTLnBsYXksIHRoaXMpO1xyXG5cclxuICAgIHJldHVybiB0aGlzLl9jcmVhdGVQcm9taXNlKG9uRmluaXNoLCBvbkVycm9yLCBvbkludGVycnVwdCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQYXVzZSB0aGUgc3BlZWNoIGF0IHRoZSBjdXJyZW50IHRpbWUuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge251bWJlcn0gY3VycmVudFRpbWUgLSBDdXJyZW50IGdsb2JhbCB0aW1lIHdoZW4gcGF1c2Ugd2FzIGNhbGxlZC5cclxuICAgKi9cclxuICBwYXVzZShjdXJyZW50VGltZSkge1xyXG4gICAgdGhpcy5fcGxheWluZyA9IGZhbHNlO1xyXG4gICAgdGhpcy5fcGF1c2VUaW1lID0gY3VycmVudFRpbWU7XHJcblxyXG4gICAgdGhpcy5fc3BlYWtlci5lbWl0KHRoaXMuX3NwZWFrZXIuY29uc3RydWN0b3IuRVZFTlRTLnBhdXNlLCB0aGlzKTtcclxuICAgIHRoaXMuX3NwZWFrZXIuY29uc3RydWN0b3IuZW1pdChcclxuICAgICAgdGhpcy5fc3BlYWtlci5jb25zdHJ1Y3Rvci5FVkVOVFMucGF1c2UsXHJcbiAgICAgIHRoaXNcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXN1bWUgdGhlIHNwZWVjaCBhdCB0aGUgY3VycmVudCB0aW1lLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IGN1cnJlbnRUaW1lIC0gQ3VycmVudCBnbG9iYWwgdGltZSB3aGVuIHJlc3VtZSB3YXMgY2FsbGVkLlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvbkZpbmlzaCAtIE9wdGlvbmFsIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgb25jZSB0aGUgc3BlZWNoXHJcbiAgICogcHJvbWlzZSByZXNvbHZlcy5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb25FcnJvciAtIE9wdGlvbmFsIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgaWYgdGhlIHNwZWVjaFxyXG4gICAqIGVuY291bnRlcnMgYW5kIGVycm9yIGR1cmluZyBwbGF5YmFjay5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb25JbnRlcnJ1cHQgLSBPcHRpb25hbCBmdW5jdGlvbiB0byBleGVjdXRlIGlmIHRoZSBzcGVlY2hcclxuICAgKiBpcyBjYW5jZWxlZC5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtEZWZlcnJlZH0gUmVzb2x2ZXMgb25jZSB0aGUgc3BlZWNoIHJlYWNoZXMgdGhlIGVuZCBvZiBwbGF5YmFjay5cclxuICAgKi9cclxuICByZXN1bWUoY3VycmVudFRpbWUsIG9uRmluaXNoLCBvbkVycm9yLCBvbkludGVycnVwdCkge1xyXG4gICAgLy8gUGxheSBmcm9tIHRoZSBiZWdpbm5pbmcgaWYgdGhlIHNwZWVjaCBoYXNuJ3QgcGxheWVkIHlldFxyXG4gICAgaWYgKCF0aGlzLl9wcm9taXNlKSB7XHJcbiAgICAgIHRoaXMuX3Jlc2V0KGN1cnJlbnRUaW1lKTtcclxuICAgICAgdGhpcy5fY3JlYXRlUHJvbWlzZShvbkZpbmlzaCwgb25FcnJvciwgb25JbnRlcnJ1cHQpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX3BsYXlpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5fc3RhcnRUaW1lICs9IGN1cnJlbnRUaW1lIC0gdGhpcy5fcGF1c2VUaW1lO1xyXG5cclxuICAgIHRoaXMuX3NwZWFrZXIuZW1pdCh0aGlzLl9zcGVha2VyLmNvbnN0cnVjdG9yLkVWRU5UUy5yZXN1bWUsIHRoaXMpO1xyXG4gICAgdGhpcy5fc3BlYWtlci5jb25zdHJ1Y3Rvci5lbWl0KFxyXG4gICAgICB0aGlzLl9zcGVha2VyLmNvbnN0cnVjdG9yLkVWRU5UUy5yZXN1bWUsXHJcbiAgICAgIHRoaXNcclxuICAgICk7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuX3Byb21pc2U7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDYW5jZWxzIHBsYXliYWNrIG9mIHRoZSBzcGVlY2ggYXQgdGhlIGN1cnJlbnQgdGltZS4gQ2FuY2VsIHRoZSBzcGVlY2ggcHJvbWlzZS5cclxuICAgKi9cclxuICBjYW5jZWwoKSB7XHJcbiAgICBpZiAodGhpcy5fcHJvbWlzZSkge1xyXG4gICAgICB0aGlzLl9wcm9taXNlLmNhbmNlbCgpO1xyXG4gICAgICB0aGlzLl9wcm9taXNlID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9wbGF5aW5nID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTdG9wIHRoZSBzcGVlY2ggYW5kIHJlc2V0IHRpbWUgdG8gdGhlIGJlZ2lubmluZy4gUmVzb2x2ZSB0aGUgc3BlZWNoIHByb21pc2UuXHJcbiAgICovXHJcbiAgc3RvcCgpIHtcclxuICAgIGlmICh0aGlzLl9wcm9taXNlKSB7XHJcbiAgICAgIHRoaXMuX3Byb21pc2UucmVzb2x2ZSgpO1xyXG4gICAgICB0aGlzLl9wcm9taXNlID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9wbGF5aW5nID0gZmFsc2U7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBBYnN0cmFjdFNwZWVjaDtcclxuIiwiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXHJcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxyXG5pbXBvcnQgQWJzdHJhY3RIb3N0RmVhdHVyZSBmcm9tICdjb3JlL0Fic3RyYWN0SG9zdEZlYXR1cmUnO1xyXG5pbXBvcnQgQW5pbWF0aW9uVXRpbHMgZnJvbSAnY29yZS9hbmltcGFjay9BbmltYXRpb25VdGlscyc7XHJcbmltcG9ydCBNYXRoVXRpbHMgZnJvbSAnY29yZS9NYXRoVXRpbHMnO1xyXG5pbXBvcnQgRGVmZXJyZWQgZnJvbSAnY29yZS9EZWZlcnJlZCc7XHJcbmltcG9ydCBTcGVlY2ggZnJvbSAnLi9BYnN0cmFjdFNwZWVjaCc7XHJcbmltcG9ydCBUZXh0VG9TcGVlY2hVdGlscyBmcm9tICcuL1RleHRUb1NwZWVjaFV0aWxzJztcclxuXHJcbi8qKlxyXG4gKiBUaGUgQW1hem9uIFBvbGx5IHNlcnZpY2Ugb2JqZWN0LlxyXG4gKiBAZXh0ZXJuYWwgUG9sbHlcclxuICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTSmF2YVNjcmlwdFNESy9sYXRlc3QvQVdTL1BvbGx5Lmh0bWxcclxuICovXHJcblxyXG4vKipcclxuICogVGhlIHByZXNpZ25lciBvYmplY3QgdGhhdCBjYW4gYmUgdXNlZCB0byBnZW5lcmF0ZSBwcmVzaWduZWQgdXJscyBmb3IgdGhlIFBvbGx5IHNlcnZpY2UuXHJcbiAqIEBleHRlcm5hbCBQcmVzaWduZXJcclxuICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTSmF2YVNjcmlwdFNESy9sYXRlc3QvQVdTL1BvbGx5L1ByZXNpZ25lci5odG1sXHJcbiAqL1xyXG5cclxuLy8gQXZhaWxhYmxlIG9wdGlvbnMgZm9yIFBvbGx5XHJcbmNvbnN0IGVuZ2luZXMgPSBbJ3N0YW5kYXJkJywgJ25ldXJhbCddO1xyXG5jb25zdCBhdWRpb0Zvcm1hdHMgPSBbJ21wMycsICdvZ2dfdm9yYmlzJywgJ3BjbSddO1xyXG5jb25zdCBzcGVlY2htYXJrVHlwZXMgPSBbJ3NlbnRlbmNlJywgJ3NzbWwnLCAndmlzZW1lJywgJ3dvcmQnXTtcclxuY29uc3Qgc2FtcGxlUmF0ZXMgPSB7XHJcbiAgbXAzOiB7XHJcbiAgICByYXRlczogWyc4MDAwJywgJzE2MDAwJywgJzIyMDUwJywgJzI0MDAwJ10sXHJcbiAgICBkZWZhdWx0czoge1xyXG4gICAgICBzdGFuZGFyZDogJzIwNTAnLFxyXG4gICAgICBuZXVyYWw6ICcyNDAwJyxcclxuICAgIH0sXHJcbiAgfSxcclxuICBwY206IHtcclxuICAgIHJhdGVzOiBbJzgwMDAnLCAnMTYwMDAnXSxcclxuICAgIGRlZmF1bHRzOiB7XHJcbiAgICAgIHN0YW5kYXJkOiAnMTYwMCcsXHJcbiAgICAgIG5ldXJhbDogJzE2MDAnLFxyXG4gICAgfSxcclxuICB9LFxyXG59O1xyXG5zYW1wbGVSYXRlcy5vZ2dfdm9yYmlzID0gc2FtcGxlUmF0ZXMubXAzO1xyXG5sZXQgYXdzVmVyc2lvbjtcclxuXHJcbi8qKlxyXG4gKiBCYXNlIGNsYXNzIGZvciB0dXJuaW5nIHRleHQgaW5wdXQgaW50byBwbGF5YWJsZSBhdWRpby4gVGhlcmUgc2hvdWxkIGJlIG9uZSBpbnN0YW5jZVxyXG4gKiBwZXIgc3BlYWtlciwgZWFjaCBpbnN0YW5jZSBjYW4gcGxheSBvbmx5IG9uZSBwaWVjZSBvZiB0ZXh0IGF0IGEgdGltZS5cclxuICpcclxuICogQGV4dGVuZHMgQWJzdHJhY3RIb3N0RmVhdHVyZVxyXG4gKiBAYWJzdHJhY3RcclxuICpcclxuICogQHByb3BlcnR5IHsobnVtYmVyfHVuZGVmaW5lZCl9IEFXU19WRVJTSU9OIC0gR2V0cyB0aGUgdmVyc2lvbiBvZiBBV1MgU0RLIGJlaW5nXHJcbiAqIHVzZWQuIFdpbGwgYmUgdW5kZWZpbmVkIHVudGlsIFtpbml0aWFsaXplU2VydmljZV17QGxpbmsgQWJzdHJhY3RUZXh0VG9TcGVlY2hGZWF0dXJlLmluaXRpYWxpemVTZXJ2aWNlfVxyXG4gKiBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgZXhlY3V0ZWQuXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbUE9MTFlfTUlOX05FVVJBTF9WRVJTSU9OPScyLjUwMyddIC0gR2V0cyB0aGUgbWluaW11bSB2ZXJzaW9uXHJcbiAqIG9mIHRoZSBBV1MgU0RLIHRoYXQgaXMgbmVjZXNzYXJ5IHRvIHVzZSBuZXVyYWwgdm9pY2VzIHdpdGggQVdTIFBvbGx5LlxyXG4gKiBAcHJvcGVydHkge09iamVjdH0gUE9MTFlfREVGQVVMVFMgLSBEZWZhdWx0IHZhbHVlcyB0byB1c2Ugd2l0aCBjYWxscyB0byB7QGxpbmsgZXh0ZXJuYWw6UG9sbHl9LlxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW1BPTExZX0RFRkFVTFRTLkVuZ2luZT0nc3RhbmRhcmQnXVxyXG4gKiBAcHJvcGVydHkge0FycmF5LjxzdHJpbmc+fSBbUE9MTFlfREVGQVVMVFMuTGV4aWNvbk5hbWVzPVtdXVxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW1BPTExZX0RFRkFVTFRTLk91dHB1dEZvcm1hdD0nbXAzJ11cclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtQT0xMWV9ERUZBVUxUUy5TYW1wbGVSYXRlPScyMjA1MCddXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbUE9MTFlfREVGQVVMVFMuVGV4dD0nJ11cclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtQT0xMWV9ERUZBVUxUUy5UZXh0VHlwZT0nc3NtbCddXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbUE9MTFlfREVGQVVMVFMuVm9pY2VJZD0nQW15J11cclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtQT0xMWV9ERUZBVUxUUy5MYW5ndWFnZUNvZGU9J2VuLUdCJ11cclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtQT0xMWV9ERUZBVUxUUy5MYW5ndWFnZU5hbWU9J0JyaXRpc2ggRW5nbGlzaCddXHJcbiAqIEBwcm9wZXJ0eSB7QXJyYXkuPHN0cmluZz59IFtQT0xMWV9WT0lDRVM9W11dIC0gQW4gYXJyYXkgb2Ygdm9pY2VzIGF2YWlsYWJsZSBpblxyXG4gKiBQb2xseS4gV2lsbCBiZSBlbXB0eSB1bnRpbCBbaW5pdGlhbGl6ZVNlcnZpY2Vde0BsaW5rIEFic3RyYWN0VGV4dFRvU3BlZWNoRmVhdHVyZS5pbml0aWFsaXplU2VydmljZX1cclxuICogaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IGV4ZWN1dGVkLiBTZWUgW1BvbGx5IERvY3VtZW50YXRpb25de0BsaW5rIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9wb2xseS9sYXRlc3QvZGcvdm9pY2VsaXN0Lmh0bWx9XHJcbiAqIGZvciBhIGZ1bGwgbGlzdCBvZiBhdmFpbGFibGUgdm9pY2VzLlxyXG4gKiBAcHJvcGVydHkge09iamVjdH0gW1BPTExZX0xBTkdVQUdFUz17fV0gLSBBbiBvYmplY3QgdGhhdCBtYXBzIGxhbmd1YWdlIG5hbWVzXHJcbiAqIHRvIGxhbmd1YWdlIGNvZGVzIHRoYXQgYXJlIGF2YWlsYWJsZSBpbiBQb2xseS4gV2lsbCBiZSBlbXB0eSB1bnRpbFxyXG4gKiBbaW5pdGlhbGl6ZVNlcnZpY2Vde0BsaW5rIEFic3RyYWN0VGV4dFRvU3BlZWNoRmVhdHVyZS5pbml0aWFsaXplU2VydmljZX1cclxuICogaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IGV4ZWN1dGVkLiBTZWUgW1BvbGx5IERvY3VtZW50YXRpb25de0BsaW5rIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9wb2xseS9sYXRlc3QvZGcvU3VwcG9ydGVkTGFuZ3VhZ2UuaHRtbH1cclxuICogZm9yIGEgZnVsbCBsaXN0IG9mIGF2YWlsYWJsZSBsYW5ndWFnZXMgYW5kIGNvcnJlc3BvbmRpbmcgY29kZXMuXHJcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBbUE9MTFlfTEFOR1VBR0VfQ09ERVM9e31dIC0gQW4gb2JqZWN0IHRoYXQgbWFwcyBsYW5ndWFnZSBjb2Rlc1xyXG4gKiB0byBsYW5ndWFnZSBuYW1lcyB0aGF0IGFyZSBhdmFpbGFibGUgaW4gUG9sbHkuIFdpbGwgYmUgZW1wdHkgdW50aWxcclxuICogW2luaXRpYWxpemVTZXJ2aWNlXXtAbGluayBBYnN0cmFjdFRleHRUb1NwZWVjaEZlYXR1cmUuaW5pdGlhbGl6ZVNlcnZpY2V9XHJcbiAqIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBleGVjdXRlZC4gU2VlIFtQb2xseSBEb2N1bWVudGF0aW9uXXtAbGluayBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vcG9sbHkvbGF0ZXN0L2RnL1N1cHBvcnRlZExhbmd1YWdlLmh0bWx9XHJcbiAqIGZvciBhIGZ1bGwgbGlzdCBvZiBhdmFpbGFibGUgbGFuZ3VhZ2VzIGFuZCBjb3JyZXNwb25kaW5nIGNvZGVzLlxyXG4gKiBAcHJvcGVydHkge09iamVjdH0gRVZFTlRTIC0gQnVpbHQtaW4gbWVzc2FnZXMgdGhhdCB0aGUgZmVhdHVyZSBlbWl0cy4gV2hlbiB0aGVcclxuICogZmVhdHVyZSBpcyBhZGRlZCB0byBhIHtAbGluayBjb3JlL0hvc3RPYmplY3R9LCBldmVudCBuYW1lcyB3aWxsIGJlIHByZWZpeGVkIGJ5IHRoZVxyXG4gKiBuYW1lIG9mIHRoZSBmZWF0dXJlIGNsYXNzICsgJy4nLlxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW0VWRU5UUy5yZWFkeT1vblJlYWR5RXZlbnRdIC0gTWVzc2FnZSB0aGF0IGlzIGVtaXR0ZWQgYWZ0ZXJcclxuICogW2luaXRpYWxpemVTZXJ2aWNlXXtAbGluayBBYnN0cmFjdFRleHRUb1NwZWVjaEZlYXR1cmUuaW5pdGlhbGl6ZVNlcnZpY2V9IGhhcyBiZWVuXHJcbiAqIHN1Y2Nlc3NmdWxseSBleGVjdXRlZC5cclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtFVkVOVFMucGxheT1vblBsYXlFdmVudF0gLSBNZXNzYWdlIHRoYXQgaXMgZW1pdHRlZCBhZnRlclxyXG4gKiBlYWNoIGNhbGwgdG8gW3BsYXlde0BsaW5rIEFic3RyYWN0VGV4dFRvU3BlZWNoRmVhdHVyZSNwbGF5fS4gVGhlIHNwZWVjaCB0aGF0IHdhcyBwbGF5ZWRcclxuICogaXMgc3VwcGxpZWQgYXMgYW4gYXJndW1lbnQgdG8gbGlzdGVuZXIgZnVuY3Rpb25zLlxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW0VWRU5UUy5wYXVzZT1vblBhdXNlRXZlbnRdIC0gTWVzc2FnZSB0aGF0IGlzIGVtaXR0ZWQgYWZ0ZXJcclxuICogZWFjaCBjYWxsIHRvIFtwYXVzZV17QGxpbmsgQWJzdHJhY3RUZXh0VG9TcGVlY2hGZWF0dXJlI3BhdXNlfS4gVGhlIHNwZWVjaCB0aGF0IHdhcyBwYXVzZWRcclxuICogaXMgc3VwcGxpZWQgYXMgYW4gYXJndW1lbnQgdG8gbGlzdGVuZXIgZnVuY3Rpb25zLlxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW0VWRU5UUy5yZXN1bWU9b25SZXN1bWVFdmVudF0gLSBNZXNzYWdlIHRoYXQgaXMgZW1pdHRlZCBhZnRlclxyXG4gKiBlYWNoIGNhbGwgdG8gW3Jlc3VtZV17QGxpbmsgQWJzdHJhY3RUZXh0VG9TcGVlY2hGZWF0dXJlI3Jlc3VtZX0uIFRoZSBzcGVlY2ggdGhhdCB3YXNcclxuICogcmVzdW1lZCBpcyBzdXBwbGllZCBhcyBhbiBhcmd1bWVudCB0byBsaXN0ZW5lciBmdW5jdGlvbnMuXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbRVZFTlRTLmludGVycnVwdD1vbkludGVycnVwdEV2ZW50XSAtIE1lc3NhZ2UgdGhhdCBpcyBlbWl0dGVkXHJcbiAqIGlmIHRoZXJlIGlzIGEgY3VycmVudCBzcGVlY2ggaW4gcHJvZ3Jlc3MgYW5kIFtwbGF5XXtAbGluayBBYnN0cmFjdFRleHRUb1NwZWVjaEZlYXR1cmUjcGxheX1cclxuICogb3IgW3Jlc3VtZV17QGxpbmsgQWJzdHJhY3RUZXh0VG9TcGVlY2hGZWF0dXJlI3Jlc3VtZX0gYXJlIGV4ZWN1dGVkIGZvciBhIG5ldyBzcGVlY2guXHJcbiAqIFRoZSBzcGVlY2ggdGhhdCB3YXMgaW50ZXJydXB0ZWQgaXMgc3VwcGxpZWQgYXMgYW4gYXJndW1lbnQgdG8gbGlzdGVuZXIgZnVuY3Rpb25zLlxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW0VWRU5UUy5zdG9wPW9uU3RvcEV2ZW50XSAtIE1lc3NhZ2UgdGhhdCBpcyBlbWl0dGVkIGFmdGVyXHJcbiAqIGVhY2ggY2FsbCB0byBbc3RvcF17QGxpbmsgQWJzdHJhY3RUZXh0VG9TcGVlY2hGZWF0dXJlI3N0b3B9IGFuZCB3aGVuIGEgc3BlZWNoIHJlYWNoZXNcclxuICogdGhlIGVuZCBvZiBwbGF5YmFjay4gVGhlIHNwZWVjaCB0aGF0IHdhcyBzdG9wcGVkIGlzIHN1cHBsaWVkIGFzIGFuIGFyZ3VtZW50XHJcbiAqIHRvIGxpc3RlbmVyIGZ1bmN0aW9ucy5cclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtFVkVOVFMuc2VudGVuY2U9b25TZW50ZW5jZUV2ZW50XSAtIE1lc3NhZ2UgdGhhdCBpcyBlbWl0dGVkXHJcbiAqIGVhY2ggdGltZSBhIHNlbnRlbmNlIHNwZWVjaG1hcmsgaXMgZW5jb3VudGVyZWQgd2hvc2UgdGltZXN0YW1wIG1hdGNoZXMgdXAgd2l0aFxyXG4gKiB0aGUgc3BlZWNoIGF1ZGlvJ3MgY3VycmVudCB0aW1lLiBUaGUgc2VudGVuY2Ugc3BlZWNobWFyayBvYmplY3QgaXMgc3VwcGxpZWQgYXNcclxuICogYW4gYXJndW1lbnQgdG8gbGlzdGVuZXIgZnVuY3Rpb25zLlxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW0VWRU5UUy53b3JkPW9uV29yZEV2ZW50XSAtIE1lc3NhZ2UgdGhhdCBpcyBlbWl0dGVkXHJcbiAqIGVhY2ggdGltZSBhIHdvcmQgc3BlZWNobWFyayBpcyBlbmNvdW50ZXJlZCB3aG9zZSB0aW1lc3RhbXAgbWF0Y2hlcyB1cCB3aXRoXHJcbiAqIHRoZSBzcGVlY2ggYXVkaW8ncyBjdXJyZW50IHRpbWUuIFRoZSB3b3JkIHNwZWVjaG1hcmsgb2JqZWN0IGlzIHN1cHBsaWVkIGFzXHJcbiAqIGFuIGFyZ3VtZW50IHRvIGxpc3RlbmVyIGZ1bmN0aW9ucy5cclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtFVkVOVFMudmlzZW1lPW9uVmlzZW1lRXZlbnRdIC0gTWVzc2FnZSB0aGF0IGlzIGVtaXR0ZWRcclxuICogZWFjaCB0aW1lIGEgdmlzZW1lIHNwZWVjaG1hcmsgaXMgZW5jb3VudGVyZWQgd2hvc2UgdGltZXN0YW1wIG1hdGNoZXMgdXAgd2l0aFxyXG4gKiB0aGUgc3BlZWNoIGF1ZGlvJ3MgY3VycmVudCB0aW1lLiBUaGUgdmlzZW1lIHNwZWVjaG1hcmsgb2JqZWN0IGlzIHN1cHBsaWVkIGFzXHJcbiAqIGFuIGFyZ3VtZW50IHRvIGxpc3RlbmVyIGZ1bmN0aW9ucy5cclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtFVkVOVFMuc3NtbD1vblNzbWxFdmVudF0gLSBNZXNzYWdlIHRoYXQgaXMgZW1pdHRlZFxyXG4gKiBlYWNoIHRpbWUgYSBzc21sIHNwZWVjaG1hcmsgaXMgZW5jb3VudGVyZWQgd2hvc2UgdGltZXN0YW1wIG1hdGNoZXMgdXAgd2l0aFxyXG4gKiB0aGUgc3BlZWNoIGF1ZGlvJ3MgY3VycmVudCB0aW1lLiBUaGUgc3NtbCBzcGVlY2htYXJrIG9iamVjdCBpcyBzdXBwbGllZCBhc1xyXG4gKiBhbiBhcmd1bWVudCB0byBsaXN0ZW5lciBmdW5jdGlvbnMuXHJcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBTRVJWSUNFUyAtIEFXUyBzZXJ2aWNlcyB0aGF0IGFyZSBuZWNlc3NhcnkgZm9yIHRoZSBmZWF0dXJlXHJcbiAqIHRvIGZ1bmN0aW9uLlxyXG4gKiBAcHJvcGVydHkge2V4dGVybmFsOlBvbGx5fSBTRVJWSUNFUy5wb2xseSAtIFRoZSBQb2xseSBzZXJ2aWNlIHRoYXQgaXMgdXNlZFxyXG4gKiB0byBzeW50aGVzaXplIHNwZWVjaG1hcmtzLiBXaWxsIGJlIHVuZGVmaW5lZCB1bnRpbCBbaW5pdGlhbGl6ZVNlcnZpY2Vde0BsaW5rIEFic3RyYWN0VGV4dFRvU3BlZWNoRmVhdHVyZS5pbml0aWFsaXplU2VydmljZX1cclxuICogaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IGV4ZWN1dGVkXHJcbiAqIEBwcm9wZXJ0eSB7ZXh0ZXJuYWw6UHJlc2lnbmVyfSBTRVJWSUNFUy5wcmVzaWduZXIgLSBUaGUgUG9sbHkgUHJlc2lnbmVyXHJcbiAqIG9iamVjdCB0aGF0IGlzIHVzZWQgdG8gc3ludGhlc2l6ZSBzcGVlY2ggYXVkaW8uIFdpbGwgYmUgdW5kZWZpbmVkIHVudGlsXHJcbiAqIFtpbml0aWFsaXplU2VydmljZV17QGxpbmsgQWJzdHJhY3RUZXh0VG9TcGVlY2hGZWF0dXJlLmluaXRpYWxpemVTZXJ2aWNlfVxyXG4gKiBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgZXhlY3V0ZWQuXHJcbiAqL1xyXG5jbGFzcyBBYnN0cmFjdFRleHRUb1NwZWVjaEZlYXR1cmUgZXh0ZW5kcyBBYnN0cmFjdEhvc3RGZWF0dXJlIHtcclxuICAvKipcclxuICAgKiBAY29uc3RydWN0b3JcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7Y29yZS9Ib3N0T2JqZWN0fSBob3N0IC0gSG9zdCBvYmplY3QgbWFuYWdpbmcgdGhlIGZlYXR1cmUuXHJcbiAgICogQHBhcmFtIHtPYmplY3Q9fSBvcHRpb25zIC0gT3B0aW9ucyB0aGF0IHdpbGwgYmUgc2VudCB0byBQb2xseSBmb3IgZWFjaCBzcGVlY2guXHJcbiAgICogQHBhcmFtIHtzdHJpbmc9fSBvcHRpb25zLnZvaWNlIC0gVGhlIG5hbWUgb2YgdGhlIFBvbGx5IHZvaWNlIHRvIHVzZSBmb3IgYWxsIHNwZWVjaC5cclxuICAgKiBAcGFyYW0ge3N0cmluZz19IG9wdGlvbnMuZW5naW5lIC0gVGhlIG5hbWUgb2YgdGhlIFBvbGx5IGVuZ2luZSB0byB1c2UgZm9yIGFsbCBzcGVlY2guXHJcbiAgICogQHBhcmFtIHtzdHJpbmc9fSBvcHRpb25zLmxhbmd1YWdlIC0gVGhlIG5hbWUgb2YgdGhlIGxhbmd1YWdlIHRvIHVzZSBmb3IgYWxsIHNwZWVjaC5cclxuICAgKiBAcGFyYW0ge2F1ZGlvRm9ybWF0fSBbb3B0aW9ucy5hdWRpb0Zvcm1hdD0nbXAzJ10gLSBUaGUgZm9ybWF0IHRvIHVzZSBmb3IgZ2VuZXJhdGVkXHJcbiAgICogYXVkaW8gZm9yIGFsbCBzcGVlY2hlcy5cclxuICAgKiBAcGFyYW0ge3N0cmluZz19IG9wdGlvbnMuc2FtcGxlUmF0ZSAtIFRoZSBzYW1wbGUgcmF0ZSBmb3IgYXVkaW8gZmlsZXMgZm9yIGFsbFxyXG4gICAqIHNwZWVjaGVzLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5zcGVlY2htYXJrT2Zmc2V0PTBdIC0gQW1vdW50IG9mIHRpbWUgaW4gc2Vjb25kcyB0b1xyXG4gICAqIG9mZnNldCBzcGVlY2htYXJrIGV2ZW50IGVtaXNzaW9uIGZyb20gdGhlIGF1ZGlvLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5taW5FbmRNYXJrRHVyYXRpb249LjA1XSAtIFRoZSBtaW5pbXVtIGFtb3VudCBvZiB0aW1lXHJcbiAgICogaW4gc2Vjb25kcyB0aGF0IHRoZSBsYXN0IHNwZWVjaG1hcmsgb2YgZWFjaCB0eXBlIGluIGEgc3BlZWNoIGNhbiBoYXZlIGl0c1xyXG4gICAqIGR1cmF0aW9uIHByb3BlcnR5IHNldCB0by5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMudm9sdW1lPTFdIC0gVGhlIGRlZmF1bHQgdm9sdW1lIHRvIHBsYXkgc3BlZWNoIGF1ZGlvXHJcbiAgICogd2l0aC5cclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmlzR2xvYmFsPWZhbHNlXSAtIFdoZXRoZXIgdGhlIGF1ZGlvIHNvdXJjZSBzaG91bGQgZGVmYXVsdFxyXG4gICAqIHRvIGdsb2JhbCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgb3Igbm90IGl0IGlzIGF0dGFjaGVkIHRvIGFuIG9iamVjdC5cclxuICAgKi9cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIGhvc3QsXHJcbiAgICBvcHRpb25zID0ge1xyXG4gICAgICB2b2ljZTogdW5kZWZpbmVkLFxyXG4gICAgICBlbmdpbmU6IHVuZGVmaW5lZCxcclxuICAgICAgbGFuZ3VhZ2U6IHVuZGVmaW5lZCxcclxuICAgICAgYXVkaW9Gb3JtYXQ6ICdtcDMnLFxyXG4gICAgICBzYW1wbGVSYXRlOiB1bmRlZmluZWQsXHJcbiAgICAgIHNwZWVjaG1hcmtPZmZzZXQ6IDAsXHJcbiAgICAgIG1pbkVuZE1hcmtEdXJhdGlvbjogMC4wNSxcclxuICAgICAgdm9sdW1lOiAxLFxyXG4gICAgICBpc0dsb2JhbDogZmFsc2UsXHJcbiAgICB9XHJcbiAgKSB7XHJcbiAgICBzdXBlcihob3N0KTtcclxuXHJcbiAgICB0aGlzLl9zcGVlY2hDYWNoZSA9IHt9O1xyXG4gICAgdGhpcy5fY3VycmVudFNwZWVjaCA9IG51bGw7XHJcbiAgICB0aGlzLl9jdXJyZW50UHJvbWlzZSA9IG51bGw7XHJcbiAgICB0aGlzLl9pc1ZhbGlkYXRlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5zcGVlY2htYXJrT2Zmc2V0ID0gTnVtYmVyLmlzTmFOKE51bWJlcihvcHRpb25zLnNwZWVjaG1hcmtPZmZzZXQpKVxyXG4gICAgICA/IDBcclxuICAgICAgOiBOdW1iZXIob3B0aW9ucy5zcGVlY2htYXJrT2Zmc2V0KTtcclxuICAgIHRoaXMubWluRW5kTWFya0R1cmF0aW9uID0gTnVtYmVyLmlzTmFOKE51bWJlcihvcHRpb25zLm1pbkVuZE1hcmtEdXJhdGlvbikpXHJcbiAgICAgID8gMFxyXG4gICAgICA6IE51bWJlcihvcHRpb25zLm1pbkVuZE1hcmtEdXJhdGlvbik7XHJcbiAgICB0aGlzLnZvbHVtZSA9IE51bWJlci5pc05hTihOdW1iZXIob3B0aW9ucy52b2x1bWUpKVxyXG4gICAgICA/IDFcclxuICAgICAgOiBOdW1iZXIob3B0aW9ucy52b2x1bWUpO1xyXG4gICAgdGhpcy5faXNHbG9iYWwgPSBvcHRpb25zLmlzR2xvYmFsIHx8IGZhbHNlO1xyXG4gICAgdGhpcy5fcHJvbWlzZXMgPSB7XHJcbiAgICAgIHZvbHVtZTogRGVmZXJyZWQucmVzb2x2ZSgpLFxyXG4gICAgfTtcclxuICAgIHRoaXMuX3ZvbHVtZVBhdXNlZCA9IGZhbHNlO1xyXG5cclxuICAgIC8vIFNldCBkZWZhdWx0IG9wdGlvbnMgZm9yIGVhY2ggc3BlZWNoXHJcbiAgICB0aGlzLl92b2ljZSA9IG9wdGlvbnMudm9pY2UgfHwgdGhpcy5jb25zdHJ1Y3Rvci5QT0xMWV9ERUZBVUxUUy5Wb2ljZUlkO1xyXG4gICAgdGhpcy5fbGFuZ3VhZ2UgPVxyXG4gICAgICBvcHRpb25zLmxhbmd1YWdlIHx8IHRoaXMuY29uc3RydWN0b3IuUE9MTFlfREVGQVVMVFMuTGFuZ3VhZ2VOYW1lO1xyXG4gICAgdGhpcy5fZW5naW5lID0gZW5naW5lcy5pbmNsdWRlcyhvcHRpb25zLmVuZ2luZSlcclxuICAgICAgPyBvcHRpb25zLmVuZ2luZVxyXG4gICAgICA6IHRoaXMuY29uc3RydWN0b3IuUE9MTFlfREVGQVVMVFMuRW5naW5lO1xyXG4gICAgdGhpcy5fYXVkaW9Gb3JtYXQgPSBhdWRpb0Zvcm1hdHMuaW5jbHVkZXMob3B0aW9ucy5hdWRpb0Zvcm1hdClcclxuICAgICAgPyBvcHRpb25zLmF1ZGlvRm9ybWF0XHJcbiAgICAgIDogdGhpcy5jb25zdHJ1Y3Rvci5QT0xMWV9ERUZBVUxUUy5PdXRwdXRGb3JtYXQ7XHJcbiAgICB0aGlzLl9zYW1wbGVSYXRlID0gc2FtcGxlUmF0ZXNbdGhpcy5fYXVkaW9Gb3JtYXRdLnJhdGVzLmluY2x1ZGVzKFxyXG4gICAgICBvcHRpb25zLnNhbXBsZVJhdGVcclxuICAgIClcclxuICAgICAgPyBvcHRpb25zLnNhbXBsZVJhdGVcclxuICAgICAgOiB0aGlzLmNvbnN0cnVjdG9yLlBPTExZX0RFRkFVTFRTLlNhbXBsZVJhdGU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTdG9yZSBQb2xseSwgUHJlc2lnbmVyIGFuZCBBV1MgU0RLIFZlcnNpb24gZm9yIHVzZSBhY3Jvc3MgYWxsIGluc3RhbmNlcy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7ZXh0ZXJuYWw6UG9sbHl9IHBvbGx5IC0gUG9sbHkgaW5zdGFuY2UgdG8gdXNlIHRvIGdlbmVyYXRlIHNwZWVjaG1hcmtzLlxyXG4gICAqIEBwYXJhbSB7ZXh0ZXJuYWw6UHJlc2lnbmVyfSBwcmVzaWduZXIgLSBQcmVzaWduZXIgaW5zdGFuY2UgdG8gdXNlIHRvIGdlbmVyYXRlXHJcbiAgICogYXVkaW8gVVJMcy5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdmVyc2lvbiAtIFZlcnNpb24gb2YgdGhlIEFXUyBTREsgdG8gdXNlIHRvIHZhbGlkYXRlIHZvaWNlIG9wdGlvbnMuXHJcbiAgICovXHJcbiAgc3RhdGljIGluaXRpYWxpemVTZXJ2aWNlKHBvbGx5LCBwcmVzaWduZXIsIHZlcnNpb24pIHtcclxuICAgIC8vIE1ha2Ugc3VyZSBhbGwgd2VyZSBkZWZpbmVkXHJcbiAgICBpZiAoXHJcbiAgICAgIHBvbGx5ID09PSB1bmRlZmluZWQgfHxcclxuICAgICAgcHJlc2lnbmVyID09PSB1bmRlZmluZWQgfHxcclxuICAgICAgdmVyc2lvbiA9PT0gdW5kZWZpbmVkXHJcbiAgICApIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgICdDYW5ub3QgaW5pdGlhbGl6ZSBUZXh0VG9TcGVlY2ggZmVhdHVyZS4gQWxsIGFyZ3VtZW50cyBtdXN0IGJlIGRlZmluZWQuJ1xyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEFkZCBzdW1lcmlhbiBob3N0cyB1c2VyLWFnZW50XHJcbiAgICBpZiAocG9sbHkuY29uZmlnKSB7XHJcbiAgICAgIHBvbGx5LmNvbmZpZy5jdXN0b21Vc2VyQWdlbnQgPSB0aGlzLl93aXRoQ3VzdG9tVXNlckFnZW50KFxyXG4gICAgICAgIHBvbGx5LmNvbmZpZy5jdXN0b21Vc2VyQWdlbnRcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIGlmIChwcmVzaWduZXIuc2VydmljZSAmJiBwcmVzaWduZXIuc2VydmljZS5jb25maWcpIHtcclxuICAgICAgcHJlc2lnbmVyLnNlcnZpY2UuY29uZmlnLmN1c3RvbVVzZXJBZ2VudCA9IHRoaXMuX3dpdGhDdXN0b21Vc2VyQWdlbnQoXHJcbiAgICAgICAgcHJlc2lnbmVyLnNlcnZpY2UuY29uZmlnLmN1c3RvbVVzZXJBZ2VudFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX2lzUmVhZHkgPSBmYWxzZTtcclxuXHJcbiAgICAvLyBTdG9yZSBwYXJhbWV0ZXJzXHJcbiAgICB0aGlzLlNFUlZJQ0VTLnBvbGx5ID0gcG9sbHk7XHJcbiAgICB0aGlzLlNFUlZJQ0VTLnByZXNpZ25lciA9IHByZXNpZ25lcjtcclxuICAgIGF3c1ZlcnNpb24gPSB2ZXJzaW9uO1xyXG5cclxuICAgIC8vIENsZWFyIHRoZSBjdXJyZW50IHBvbGx5IG9iamVjdHNcclxuICAgIGNvbnN0IGF2YWlsYWJsZVZvaWNlcyA9IHRoaXMuUE9MTFlfVk9JQ0VTO1xyXG4gICAgYXZhaWxhYmxlVm9pY2VzLmxlbmd0aCA9IDA7XHJcblxyXG4gICAgY29uc3QgYXZhaWxhYmxlTGFuZ3VhZ2VzID0gdGhpcy5QT0xMWV9MQU5HVUFHRVM7XHJcbiAgICBPYmplY3Qua2V5cyhhdmFpbGFibGVMYW5ndWFnZXMpLmZvckVhY2gobmFtZSA9PiB7XHJcbiAgICAgIGRlbGV0ZSBhdmFpbGFibGVMYW5ndWFnZXNbbmFtZV07XHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCBhdmFpbGFibGVMYW5ndWFnZUNvZGVzID0gdGhpcy5QT0xMWV9MQU5HVUFHRV9DT0RFUztcclxuICAgIE9iamVjdC5rZXlzKGF2YWlsYWJsZUxhbmd1YWdlQ29kZXMpLmZvckVhY2gobmFtZSA9PiB7XHJcbiAgICAgIGRlbGV0ZSBhdmFpbGFibGVMYW5ndWFnZUNvZGVzW25hbWVdO1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gUmUtcG9wdWxhdGUgYWNjb3JkaW5nIHRvIHZlcnNpb25cclxuICAgIGNvbnN0IG1pbk5ldXJhbFNkayA9IHRoaXMuUE9MTFlfTUlOX05FVVJBTF9WRVJTSU9OO1xyXG5cclxuICAgIHJldHVybiB0aGlzLlNFUlZJQ0VTLnBvbGx5XHJcbiAgICAgIC5kZXNjcmliZVZvaWNlcygpXHJcbiAgICAgIC5wcm9taXNlKClcclxuICAgICAgLnRoZW4ocmVzcG9uc2UgPT4ge1xyXG4gICAgICAgIGNvbnN0IGFsbENvZGVzID0ge307XHJcblxyXG4gICAgICAgIHJlc3BvbnNlLlZvaWNlcy5mb3JFYWNoKHZvaWNlID0+IHtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgdm9pY2UuU3VwcG9ydGVkRW5naW5lcy5pbmNsdWRlcygnc3RhbmRhcmQnKSB8fFxyXG4gICAgICAgICAgICB2ZXJzaW9uID49IG1pbk5ldXJhbFNka1xyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGF2YWlsYWJsZVZvaWNlcy5wdXNoKHZvaWNlKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBhdmFpbGFibGVWb2ljZXMuZm9yRWFjaCh2b2ljZSA9PiB7XHJcbiAgICAgICAgICAgIGF2YWlsYWJsZUxhbmd1YWdlc1t2b2ljZS5MYW5ndWFnZU5hbWVdID0gdm9pY2UuTGFuZ3VhZ2VDb2RlO1xyXG4gICAgICAgICAgICBhbGxDb2Rlc1t2b2ljZS5MYW5ndWFnZUNvZGVdID0gdm9pY2UuTGFuZ3VhZ2VOYW1lO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIE9iamVjdC5lbnRyaWVzKGF2YWlsYWJsZUxhbmd1YWdlcykuZm9yRWFjaCgoW25hbWUsIGNvZGVdKSA9PiB7XHJcbiAgICAgICAgICBhdmFpbGFibGVMYW5ndWFnZUNvZGVzW2NvZGVdID0gbmFtZTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgLy8gTm90aWZ5IHRoYXQgd2UncmUgcmVhZHkgdG8gZ2VuZXJhdGUgc3BlZWNoZXNcclxuICAgICAgICB0aGlzLl9pc1JlYWR5ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmVtaXQodGhpcy5FVkVOVFMucmVhZHkpO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgY2xhc3MgaXMgY2FwYWJsZSBvZiBnZW5lcmF0aW5nIHNwZWVjaCBhdWRpby4gUG9sbHksXHJcbiAgICogUHJlc2lnbmVyIGFuZCBBV1MgU0RLIHZlcnNpb24gbnVtYmVyIG11c3QgaGF2ZSBiZWVuIGRlZmluZWQgdXNpbmdcclxuICAgKiBbaW5pdGlhbGl6ZVNlcnZpY2Vde0BsaW5rIEFic3RyYWN0VGV4dFRvU3BlZWNoRmVhdHVyZS5pbml0aWFsaXplU2VydmljZX0uXHJcbiAgICpcclxuICAgKiBAcmVhZG9ubHlcclxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgKi9cclxuICBzdGF0aWMgZ2V0IGlzUmVhZHkoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5faXNSZWFkeTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIHRleHQgb2YgdGhlIGN1cnJlbnRseSBwbGF5aW5nIHNwZWVjaC5cclxuICAgKlxyXG4gICAqIEByZWFkb25seVxyXG4gICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICovXHJcbiAgZ2V0IGN1cnJlbnRTcGVlY2goKSB7XHJcbiAgICBpZiAodGhpcy5fY3VycmVudFNwZWVjaCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5fY3VycmVudFNwZWVjaC50ZXh0O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIGFuZCBzZXRzIHRoZSBudW1iZXIgb2Ygc2Vjb25kcyB0byBvZmZzZXQgc3BlZWNobWFyayBlbWlzc2lvbi5cclxuICAgKlxyXG4gICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICovXHJcbiAgZ2V0IHNwZWVjaG1hcmtPZmZzZXQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fc3BlZWNobWFya09mZnNldDtcclxuICB9XHJcblxyXG4gIHNldCBzcGVlY2htYXJrT2Zmc2V0KG9mZnNldCkge1xyXG4gICAgdGhpcy5fc3BlZWNobWFya09mZnNldCA9IG9mZnNldDtcclxuXHJcbiAgICBpZiAodGhpcy5fY3VycmVudFNwZWVjaCkge1xyXG4gICAgICB0aGlzLl9jdXJyZW50U3BlZWNoLnNwZWVjaG1hcmtPZmZzZXQgPSBvZmZzZXQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIGFuZCBzZXRzIHRoZSBUaGUgbWluaW11bSBhbW91bnQgb2YgdGltZSBpbiBzZWNvbmRzIHRoYXQgdGhlIGxhc3RcclxuICAgKiBzcGVlY2htYXJrIG9mIGVhY2ggdHlwZSBpbiBhIHNwZWVjaCBjYW4gaGF2ZSBpdHMgZHVyYXRpb24gcHJvcGVydHkgc2V0IHRvLlxyXG4gICAqXHJcbiAgICogQHR5cGUgbnVtYmVyXHJcbiAgICovXHJcbiAgZ2V0IG1pbkVuZE1hcmtEdXJhdGlvbigpIHtcclxuICAgIHJldHVybiB0aGlzLl9taW5FbmRNYXJrRHVyYXRpb24gLyAxMDAwO1xyXG4gIH1cclxuXHJcbiAgc2V0IG1pbkVuZE1hcmtEdXJhdGlvbihkdXJhdGlvbikge1xyXG4gICAgdGhpcy5fbWluRW5kTWFya0R1cmF0aW9uID0gZHVyYXRpb24gKiAxMDAwO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQXBwZW5kcyB0aGUgU3VtZXJpYW4gSG9zdHMgY3VzdG9tIHVzZXItYWdlbnQgdG8gYSBzdHJpbmcgaWYgaXQgaXMgbm90XHJcbiAgICogYWxyZWFkeSBwcmVzZW50LlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjdXJyZW50VXNlckFnZW50IC0gU3RyaW5nIHRvIGFwcGVuZCB0byBpZiBuZWVkZWQuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxyXG4gICAqL1xyXG4gIHN0YXRpYyBfd2l0aEN1c3RvbVVzZXJBZ2VudChjdXJyZW50VXNlckFnZW50KSB7XHJcbiAgICBjb25zdCBzdW1lcmlhbkhvc3RzVXNlckFnZW50ID0gJ3JlcXVlc3Qtc291cmNlL1N1bWVyaWFuSG9zdHMnO1xyXG5cclxuICAgIGlmIChjdXJyZW50VXNlckFnZW50ID09IG51bGwpIHtcclxuICAgICAgcmV0dXJuIHN1bWVyaWFuSG9zdHNVc2VyQWdlbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGN1cnJlbnRVc2VyQWdlbnQuaW5kZXhPZihzdW1lcmlhbkhvc3RzVXNlckFnZW50KSAhPT0gLTEpIHtcclxuICAgICAgcmV0dXJuIGN1cnJlbnRVc2VyQWdlbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGN1cnJlbnRVc2VyQWdlbnQuY29uY2F0KCcgJywgc3VtZXJpYW5Ib3N0c1VzZXJBZ2VudCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDaGVja3MgaWYgYSBnaXZlbiBlbmdpbmUgdHlwZSBpcyBjb21wYXRpYmxlIHdpdGggdGhlIEFXUyBTREsgdmVyc2lvbi4gSWYgaXRcclxuICAgKiBpcywgcmV0dXJuIHRoZSBvcmlnaW5hbCB2YWx1ZS4gT3RoZXJ3aXNlIHJldHVybiBhIGRlZmF1bHQuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGVuZ2luZSAtIFRoZSB0eXBlIG9mIFBvbGx5IHZvaWNlIGVuZ2luZSB0byB2YWxpZGF0ZS5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XHJcbiAgICovXHJcbiAgX3ZhbGlkYXRlRW5naW5lKGVuZ2luZSkge1xyXG4gICAgLy8gRGVmYXVsdCB0byB0aGUgc3RhbmRhcmQgZW5naW5lIGlmIG5ldXJhbCBpcyBub3QgYXZhaWxhYmxlIGZvciB0aGlzIHZlcnNpb25cclxuICAgIGlmIChcclxuICAgICAgZW5naW5lID09PSB1bmRlZmluZWQgfHxcclxuICAgICAgdGhpcy5jb25zdHJ1Y3Rvci5BV1NfVkVSU0lPTiA8IHRoaXMuY29uc3RydWN0b3IuUE9MTFlfTUlOX05FVVJBTF9WRVJTSU9OXHJcbiAgICApIHtcclxuICAgICAgZW5naW5lID0gdGhpcy5jb25zdHJ1Y3Rvci5QT0xMWV9ERUZBVUxUUy5FbmdpbmU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGVuZ2luZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENoZWNrcyBpZiBhIGdpdmVuIGF1ZGlvIGZvcm1hdCB0eXBlIGlzIGNvbXBhdGlibGUgd2l0aCBQb2xseS4gSWYgaXQgaXMsIHJldHVyblxyXG4gICAqIHRoZSBvcmlnaW5hbCB2YWx1ZS4gT3RoZXJ3aXNlIHJldHVybiBhIGRlZmF1bHQuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGVuZ2luZSAtIFRoZSB0eXBlIG9mIFBvbGx5IHZvaWNlIGVuZ2luZSB0byB2YWxpZGF0ZS5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XHJcbiAgICovXHJcbiAgX3ZhbGlkYXRlRm9ybWF0KGZvcm1hdCkge1xyXG4gICAgaWYgKGZvcm1hdCA9PT0gdW5kZWZpbmVkIHx8ICFhdWRpb0Zvcm1hdHMuaW5jbHVkZXMoZm9ybWF0KSkge1xyXG4gICAgICBmb3JtYXQgPSB0aGlzLmNvbnN0cnVjdG9yLlBPTExZX0RFRkFVTFRTLk91dHB1dEZvcm1hdDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZm9ybWF0O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2hlY2tzIGlmIGEgZ2l2ZW4gYXVkaW8gc2FtcGxpbmcgcmF0ZSBpcyBjb21wYXRpYmxlIHdpdGggdGhlIGN1cnJlbnQgYXVkaW9cclxuICAgKiBmb3JtYXQuIElmIGl0IGlzLCByZXR1cm4gdGhlIG9yaWdpbmFsIHZhbHVlLiBPdGhlcndpc2UgcmV0dXJuIGEgZGVmYXVsdC5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gZW5naW5lIC0gVGhlIHR5cGUgb2YgUG9sbHkgdm9pY2UgZW5naW5lIHRvIHZhbGlkYXRlLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge3N0cmluZ31cclxuICAgKi9cclxuICBfdmFsaWRhdGVSYXRlKHJhdGUpIHtcclxuICAgIC8vIFVzZSBkZWZhdWx0IGlmIHNwZWNpZmllZCBzYW1wbGUgcmF0ZSBpcyBub3QgdmFsaWQgZm9yIHRoZSBhdWRpbyBmb3JtYXRcclxuICAgIGlmIChcclxuICAgICAgcmF0ZSA9PT0gdW5kZWZpbmVkIHx8XHJcbiAgICAgICFzYW1wbGVSYXRlc1t0aGlzLl9hdWRpb0Zvcm1hdF0ucmF0ZXMuaW5jbHVkZXMocmF0ZSlcclxuICAgICkge1xyXG4gICAgICByYXRlID0gc2FtcGxlUmF0ZXNbdGhpcy5fYXVkaW9Gb3JtYXRdLmRlZmF1bHRzW3RoaXMuX2VuZ2luZV07XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHJhdGU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDaGVja3MgaWYgYSBnaXZlbiBQb2xseSB2b2ljZSBpZCBpcyBjb21wYXRpYmxlIHdpdGggdGhlIGN1cnJlbnQgUG9sbHkgZW5naW5lLlxyXG4gICAqIElmIGl0IGlzLCByZXR1cm4gdGhlIG9yaWdpbmFsIHZhbHVlLiBPdGhlcndpc2UgcmV0dXJuIGEgZGVmYXVsdC5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gZW5naW5lIC0gVGhlIHR5cGUgb2YgUG9sbHkgdm9pY2UgZW5naW5lIHRvIHZhbGlkYXRlLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge3N0cmluZ31cclxuICAgKi9cclxuICBfdmFsaWRhdGVWb2ljZSh2b2ljZUlkKSB7XHJcbiAgICBjb25zdCB2b2ljZSA9IHRoaXMuY29uc3RydWN0b3IuUE9MTFlfVk9JQ0VTLmZpbmQodiA9PiB2LklkID09PSB2b2ljZUlkKTtcclxuXHJcbiAgICAvLyBVc2UgdGhlIGRlZmF1bHQgdm9pY2UgaWYgdGhlIHZvaWNlIGlzbid0IHN1cHBvcnRlZCBieSB0aGUgZW5naW5lXHJcbiAgICBpZiAodm9pY2UgPT09IHVuZGVmaW5lZCB8fCAhdm9pY2UuU3VwcG9ydGVkRW5naW5lcy5pbmNsdWRlcyh0aGlzLl9lbmdpbmUpKSB7XHJcbiAgICAgIHZvaWNlSWQgPSB0aGlzLmNvbnN0cnVjdG9yLlBPTExZX0RFRkFVTFRTLlZvaWNlSWQ7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHZvaWNlSWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDaGVja3MgaWYgYSBnaXZlbiBQb2xseSBsYW5ndWFnZSBpcyBjb21wYXRpYmxlIHdpdGggdGhlIGN1cnJlbnQgUG9sbHkgdm9pY2UuXHJcbiAgICogSWYgaXQgaXMsIHJldHVybiB0aGUgb3JpZ2luYWwgdmFsdWUuIE90aGVyd2lzZSByZXR1cm4gYSBkZWZhdWx0LlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBlbmdpbmUgLSBUaGUgdHlwZSBvZiBQb2xseSB2b2ljZSBlbmdpbmUgdG8gdmFsaWRhdGUuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxyXG4gICAqL1xyXG4gIF92YWxpZGF0ZUxhbmd1YWdlKGxhbmd1YWdlKSB7XHJcbiAgICBjb25zdCB2b2ljZSA9IHRoaXMuY29uc3RydWN0b3IuUE9MTFlfVk9JQ0VTLmZpbmQodiA9PiB2LklkID09PSB0aGlzLl92b2ljZSk7XHJcbiAgICBjb25zdCBsYW5ndWFnZUNvZGUgPSB0aGlzLmNvbnN0cnVjdG9yLlBPTExZX0xBTkdVQUdFU1tsYW5ndWFnZV07XHJcblxyXG4gICAgLy8gRmluZCB0aGUgbGFuZ3VhZ2VzIGF2YWlsYWJsZSBmb3IgdGhlIGN1cnJlbnQgdm9pY2VcclxuICAgIGNvbnN0IGF2YWlsYWJsZUNvZGVzID0gW3ZvaWNlLkxhbmd1YWdlQ29kZV07XHJcbiAgICBpZiAodm9pY2UuQWRkaXRpb25hbExhbmd1YWdlQ29kZXMpIHtcclxuICAgICAgYXZhaWxhYmxlQ29kZXMucHVzaCguLi52b2ljZS5BZGRpdGlvbmFsTGFuZ3VhZ2VDb2Rlcyk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gSWYgdGhlIGN1cnJlbnQgdm9pY2UgZG9lc24ndCBzdXBwb3J0IHRoZSBsYW5ndWFnZSwgdXNlIGl0cyBkZWZhdWx0XHJcbiAgICBpZiAoIWF2YWlsYWJsZUNvZGVzLmluY2x1ZGVzKGxhbmd1YWdlQ29kZSkpIHtcclxuICAgICAgbGFuZ3VhZ2UgPSB0aGlzLmNvbnN0cnVjdG9yLlBPTExZX0xBTkdVQUdFX0NPREVTW3ZvaWNlLkxhbmd1YWdlQ29kZV07XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGxhbmd1YWdlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVmFsaWRhdGUgdGhlIGN1cnJlbnQgUG9sbHkgb3B0aW9ucyB0byBtYWtlIHN1cmUgdGhleSBhcmUgY29tcGF0aWJsZSB3aXRoIGVhY2hcclxuICAgKiBvdGhlci5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICovXHJcbiAgX3ZhbGlkYXRlKCkge1xyXG4gICAgLy8gVmFsaWRhdGUgc3BlZWNoIHBhcmFtZXRlcnNcclxuICAgIHRoaXMuX2VuZ2luZSA9IHRoaXMuX3ZhbGlkYXRlRW5naW5lKHRoaXMuX2VuZ2luZSk7XHJcbiAgICB0aGlzLl9hdWRpb0Zvcm1hdCA9IHRoaXMuX3ZhbGlkYXRlRm9ybWF0KHRoaXMuX2F1ZGlvRm9ybWF0KTtcclxuICAgIHRoaXMuX3NhbXBsZVJhdGUgPSB0aGlzLl92YWxpZGF0ZVJhdGUodGhpcy5fc2FtcGxlUmF0ZSk7XHJcbiAgICB0aGlzLl92b2ljZSA9IHRoaXMuX3ZhbGlkYXRlVm9pY2UodGhpcy5fdm9pY2UpO1xyXG4gICAgdGhpcy5fbGFuZ3VhZ2UgPSB0aGlzLl92YWxpZGF0ZUxhbmd1YWdlKHRoaXMuX2xhbmd1YWdlKTtcclxuICAgIHRoaXMuX2lzVmFsaWRhdGVkID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiBhbiBvYmplY3QgY29udGFpbmluZyBwYXJhbWV0ZXJzIGNvbXBhdGlibGUgd2l0aCBQb2xseS5zeW50aGVzaXplU3BlZWNoLlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtPYmplY3R9XHJcbiAgICovXHJcbiAgX2dldENvbmZpZygpIHtcclxuICAgIC8vIE1ha2Ugc3VyZSBwYXJhbWV0ZXJzIGhhdmUgYmVlbiB2YWxpZGF0ZWRcclxuICAgIGlmICh0aGlzLmNvbnN0cnVjdG9yLmlzUmVhZHkgJiYgIXRoaXMuX2lzVmFsaWRhdGVkKSB7XHJcbiAgICAgIHRoaXMuX3ZhbGlkYXRlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ3JlYXRlIGEgY29uZmlnIG9iamVjdCBjb21wYXRpYmxlIHdpdGggUG9sbHlcclxuICAgIHJldHVybiB7XHJcbiAgICAgIEVuZ2luZTogdGhpcy5fZW5naW5lLFxyXG4gICAgICBPdXRwdXRGb3JtYXQ6IHRoaXMuX2F1ZGlvRm9ybWF0LFxyXG4gICAgICBTYW1wbGVSYXRlOiB0aGlzLl9zYW1wbGVSYXRlLFxyXG4gICAgICBWb2ljZUlkOiB0aGlzLl92b2ljZSxcclxuICAgICAgTGFuZ3VhZ2VDb2RlOiB0aGlzLmNvbnN0cnVjdG9yLlBPTExZX0xBTkdVQUdFU1t0aGlzLl9sYW5ndWFnZV0sXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlIFBvbGx5IHBhcmFtZXRlcnMgd2l0aCBvcHRpb25zIGZyb20gYSBnaXZlbiBjb25maWcuIEFsbCBzdG9yZWQgc3BlZWNoZXNcclxuICAgKiB3aWxsIGJlIHVwZGF0ZWQgdG8gdXNlIHRoZSBuZXcgcGFyYW1ldGVycywgdW5sZXNzIHRoZSBzcGVlY2ggdGV4dCBpcyBjb250YWluZWRcclxuICAgKiBpbiB0aGUgJ3NraXBTcGVlY2hlcycgcGFyYW1ldGVyLlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcgLSBQb2xseSBwYXJhbWV0ZXIgb3B0aW9ucyB0byBvdmVyd3JpdGUuXHJcbiAgICogQHBhcmFtIHtBcnJheS48c3RyaW5nPn0gc2tpcFNwZWVjaGVzIC0gVGV4dCBvZiBhbnkgc3BlZWNoZXMgdGhhdCBzaG91bGQgbm90XHJcbiAgICogaGF2ZSBwYXJhbWV0ZXJzIHVwZGF0ZWQuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7T2JqZWN0fVxyXG4gICAqL1xyXG4gIF91cGRhdGVDb25maWcoY29uZmlnLCBza2lwU3BlZWNoZXMgPSBbXSkge1xyXG4gICAgY29uc3QgY3VycmVudENvbmZpZyA9IHRoaXMuX2dldENvbmZpZygpO1xyXG4gICAgaWYgKCFjb25maWcpIHtcclxuICAgICAgcmV0dXJuIGN1cnJlbnRDb25maWc7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5faXNWYWxpZGF0ZWQgPSBmYWxzZTtcclxuICAgIGNvbnN0IGN1cnJlbnRDb25maWdTdHIgPSBKU09OLnN0cmluZ2lmeShjdXJyZW50Q29uZmlnKTtcclxuXHJcbiAgICAvLyBVcGRhdGUgb3B0aW9uc1xyXG4gICAgaWYgKGNvbmZpZy5FbmdpbmUpIHtcclxuICAgICAgdGhpcy5fZW5naW5lID0gY29uZmlnLkVuZ2luZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoY29uZmlnLmF1ZGlvRm9ybWF0KSB7XHJcbiAgICAgIHRoaXMuX2F1ZGlvRm9ybWF0ID0gY29uZmlnLmF1ZGlvRm9ybWF0O1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjb25maWcuU2FtcGxlUmF0ZSkge1xyXG4gICAgICB0aGlzLl9zYW1wbGVSYXRlID0gY29uZmlnLlNhbXBsZVJhdGU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNvbmZpZy5Wb2ljZUlkKSB7XHJcbiAgICAgIHRoaXMuX3ZvaWNlID0gY29uZmlnLlZvaWNlSWQ7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNvbmZpZy5MYW5ndWFnZSkge1xyXG4gICAgICB0aGlzLl9sYW5ndWFnZSA9IGNvbmZpZy5MYW5ndWFnZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBWYWxpZGF0ZSB0aGUgY29uZmlnXHJcbiAgICBjb25zdCB2YWxpZENvbmZpZyA9IHRoaXMuX2dldENvbmZpZygpO1xyXG5cclxuICAgIC8vIEV4aXQgaWYgbm90aGluZyBoYXMgY2hhbmdlZFxyXG4gICAgY29uc3QgY29uZmlnU3RyID0gSlNPTi5zdHJpbmdpZnkodmFsaWRDb25maWcpO1xyXG4gICAgaWYgKGN1cnJlbnRDb25maWdTdHIgPT09IGNvbmZpZ1N0cikge1xyXG4gICAgICB0aGlzLl9pc1ZhbGlkYXRlZCA9IHRydWU7XHJcbiAgICAgIHJldHVybiB2YWxpZENvbmZpZztcclxuICAgIH1cclxuXHJcbiAgICAvLyBVcGRhdGUgYWxsIGNhY2hlZCBjb25maWdzXHJcbiAgICBPYmplY3QuZW50cmllcyh0aGlzLl9zcGVlY2hDYWNoZSkuZm9yRWFjaCgoW3RleHQsIHNwZWVjaF0pID0+IHtcclxuICAgICAgLy8gQ2hlY2sgaWYgdGhpcyBpcyBhIHNraXBwZWQgc3BlZWNoXHJcbiAgICAgIGlmIChza2lwU3BlZWNoZXMuaW5jbHVkZXModGV4dCkpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IHNwZWVjaENvbmZpZ1N0ciA9IEpTT04uc3RyaW5naWZ5KHNwZWVjaC5jb25maWcpO1xyXG5cclxuICAgICAgLy8gVXBkYXRlIHRoZSBzcGVlY2ggd2l0aCBuZXcgcGFyYW1ldGVyc1xyXG4gICAgICBpZiAoc3BlZWNoQ29uZmlnU3RyICE9PSBjb25maWdTdHIpIHtcclxuICAgICAgICB0aGlzLl91cGRhdGVTcGVlY2godGV4dCwgdmFsaWRDb25maWcpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gdmFsaWRDb25maWc7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGUgYW4gZXhpc3Rpbmcgc3BlZWNoLCBvciBhZGQgYSBuZXcgc3BlZWNoIHdpdGggbmV3IFBvbGx5IHBhcmFtZXRlcnMgd2l0aFxyXG4gICAqIG9wdGlvbnMgZnJvbSBhIGdpdmVuIGNvbmZpZy5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIFRoZSB0ZXh0IG9mIHRoZSBzcGVlY2ggdG8gdXBkYXRlLlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcgLSBQb2xseSBwYXJhbWV0ZXIgb3B0aW9ucyB0byB1cGRhdGUuXHJcbiAgICogQHBhcmFtIHtib29sZWFufSBbZm9yY2U9ZmFsc2VdIC0gV2hldGhlciB0byBmb3JjZSB0aGUgc3BlZWNoIHRvIGJlIHVwZGF0ZWRcclxuICAgKiBpZiBubyBwYXJhbWV0ZXJzIGhhdmUgY2hhbmdlcy5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtBYnN0cmFjdFNwZWVjaH1cclxuICAgKi9cclxuICBfdXBkYXRlU3BlZWNoKHRleHQsIGNvbmZpZywgZm9yY2UgPSBmYWxzZSkge1xyXG4gICAgY29uc3Qgc3BlZWNoID0gdGhpcy5fc3BlZWNoQ2FjaGVbdGV4dF0gfHwge307XHJcbiAgICAvLyBFeGl0IGlmIG5vdGhpbmcgaGFzIGNoYW5nZWQgYW5kIGZvcmNlIGlzIGZhbHNlXHJcbiAgICBpZiAoXHJcbiAgICAgICFmb3JjZSAmJlxyXG4gICAgICBjb25maWcgIT09IHVuZGVmaW5lZCAmJlxyXG4gICAgICBzcGVlY2guY29uZmlnICYmXHJcbiAgICAgIEpTT04uc3RyaW5naWZ5KGNvbmZpZykgPT09IEpTT04uc3RyaW5naWZ5KHNwZWVjaC5jb25maWcpXHJcbiAgICApIHtcclxuICAgICAgcmV0dXJuIHNwZWVjaDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBDcmVhdGUgc2VwYXJhdGUgcGFyYW1ldGVycyBmb3IgYXVkaW8gYW5kIHNwZWVjaG1hcmsgZ2VuZXJhdGlvblxyXG4gICAgY29uc3QgYXVkaW9QYXJhbXMgPSB7XHJcbiAgICAgIC4uLmNvbmZpZyxcclxuICAgICAgVGV4dDogdGV4dCxcclxuICAgICAgVGV4dFR5cGU6ICdzc21sJyxcclxuICAgIH07XHJcbiAgICBjb25zdCBzcGVlY2htYXJrUGFyYW1zID0ge1xyXG4gICAgICAuLi5hdWRpb1BhcmFtcyxcclxuICAgICAgT3V0cHV0Rm9ybWF0OiAnanNvbicsXHJcbiAgICAgIFNwZWVjaE1hcmtUeXBlczogc3BlZWNobWFya1R5cGVzLFxyXG4gICAgfTtcclxuXHJcbiAgICAvLyBHZW5lcmF0ZSBhdWRpbyBhbmQgc3BlZWNobWFya3NcclxuICAgIHNwZWVjaC5jb25maWcgPSBjb25maWc7XHJcbiAgICBzcGVlY2gucHJvbWlzZSA9IFByb21pc2UuYWxsKFtcclxuICAgICAgdGhpcy5fc3ludGhlc2l6ZVNwZWVjaG1hcmtzKHNwZWVjaG1hcmtQYXJhbXMpLFxyXG4gICAgICB0aGlzLl9zeW50aGVzaXplQXVkaW8oYXVkaW9QYXJhbXMpLFxyXG4gICAgXSkudGhlbihyZXN1bHRzID0+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuX2NyZWF0ZVNwZWVjaCh0ZXh0LCAuLi5yZXN1bHRzKTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5fc3BlZWNoQ2FjaGVbdGV4dF0gPSBzcGVlY2g7XHJcblxyXG4gICAgcmV0dXJuIHNwZWVjaDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZSBhIG5ldyBTcGVlY2ggb2JqZWN0IGZvciB0aGUgc3BlYWtlci5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge1RleHRUb1NwZWVjaH0gc3BlYWtlciAtIFRoZSBUZXh0VG9TcGVlY2ggaW5zdGFuY2UgdGhhdCB3aWxsIG93biB0aGUgc3BlZWNoLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gVGV4dCBvZiB0aGUgc3BlZWNoLlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBzcGVlY2htYXJrcyAtIFNwZWVjaG1hcmtzIGZvciB0aGUgc3BlZWNoLlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBhdWRpb0NvbmZpZyAtIEF1ZGlvIGZvciB0aGUgc3BlZWNoLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0Fic3RyYWN0U3BlZWNofVxyXG4gICAqL1xyXG4gIF9jcmVhdGVTcGVlY2godGV4dCwgc3BlZWNobWFya3MsIGF1ZGlvQ29uZmlnKSB7XHJcbiAgICByZXR1cm4gbmV3IFNwZWVjaCh0aGlzLCB0ZXh0LCBzcGVlY2htYXJrcywgYXVkaW9Db25maWcpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlIHByZXNpZ25lZCBVUkwgb2Ygc3BlZWNoIGF1ZGlvIGZvciB0aGUgZ2l2ZW4gc3BlZWNoIHRleHQuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IHBhcmFtcyAtIFBhcmFtZXRlcnMgb2JqZWN0IGNvbXBhdGlibGUgd2l0aCBQb2xseS5zeW50aGVzaXplU3BlZWNoLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0RlZmVycmVkfSBSZXNvbHZlcyB3aXRoIGFuIG9iamVjdCBjb250YWluaW5nIHRoZSBhdWRpbyBVUkwuXHJcbiAgICovXHJcbiAgX3N5bnRoZXNpemVBdWRpbyhwYXJhbXMpIHtcclxuICAgIHJldHVybiBuZXcgRGVmZXJyZWQoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICB0aGlzLmNvbnN0cnVjdG9yLlNFUlZJQ0VTLnByZXNpZ25lci5nZXRTeW50aGVzaXplU3BlZWNoVXJsKFxyXG4gICAgICAgIHBhcmFtcyxcclxuICAgICAgICBmdW5jdGlvbihlcnJvciwgdXJsKSB7XHJcbiAgICAgICAgICBpZiAoIWVycm9yKSB7XHJcbiAgICAgICAgICAgIHJlc29sdmUoe3VybH0pO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHJpZXZlcyBhbmQgcGFyc2VzIHNwZWVjaG1hcmtzIGZvciB0aGUgZ2l2ZW4gc3BlZWNoIHRleHQuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IHBhcmFtcyAtIFBhcmFtZXRlcnMgb2JqZWN0IGNvbXBhdGlibGUgd2l0aCBQb2xseS5zeW50aGVzaXplU3BlZWNoLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0RlZmVycmVkfSBSZXNvbHZlcyB3aXRoIGFuIGFycmF5IG9mIHNwZWVjaG1hcmsgb2JqZWN0c1xyXG4gICAqL1xyXG4gIF9zeW50aGVzaXplU3BlZWNobWFya3MocGFyYW1zKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5TRVJWSUNFUy5wb2xseVxyXG4gICAgICAuc3ludGhlc2l6ZVNwZWVjaChwYXJhbXMpXHJcbiAgICAgIC5wcm9taXNlKClcclxuICAgICAgLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAvLyBDb252ZXJ0IGNoYXJjb2RlcyB0byBzdHJpbmdcclxuICAgICAgICBjb25zdCBqc29uU3RyaW5nID0gSlNPTi5zdHJpbmdpZnkocmVzdWx0LkF1ZGlvU3RyZWFtKTtcclxuICAgICAgICBjb25zdCBqc29uID0gSlNPTi5wYXJzZShqc29uU3RyaW5nKTtcclxuICAgICAgICBjb25zdCBkYXRhU3RyID0ganNvbi5kYXRhLm1hcChjID0+IFN0cmluZy5mcm9tQ2hhckNvZGUoYykpLmpvaW4oJycpO1xyXG5cclxuICAgICAgICBjb25zdCBtYXJrVHlwZXMgPSB7XHJcbiAgICAgICAgICBzZW50ZW5jZTogW10sXHJcbiAgICAgICAgICB3b3JkOiBbXSxcclxuICAgICAgICAgIHZpc2VtZTogW10sXHJcbiAgICAgICAgICBzc21sOiBbXSxcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbnN0IGVuZE1hcmtUeXBlcyA9IHtcclxuICAgICAgICAgIHNlbnRlbmNlOiBudWxsLFxyXG4gICAgICAgICAgd29yZDogbnVsbCxcclxuICAgICAgICAgIHZpc2VtZTogbnVsbCxcclxuICAgICAgICAgIHNzbWw6IG51bGwsXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgLy8gU3BsaXQgYnkgZW5jbG9zaW5nIHt9IHRvIGNyZWF0ZSBzcGVlY2htYXJrIG9iamVjdHNcclxuICAgICAgICBjb25zdCBzcGVlY2hNYXJrcyA9IFsuLi5kYXRhU3RyLm1hdGNoQWxsKC9cXHsuKj9cXH0oPz1cXG58JCkvZ20pXS5tYXAoXHJcbiAgICAgICAgICBtYXRjaCA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1hcmsgPSBKU09OLnBhcnNlKG1hdGNoWzBdKTtcclxuXHJcbiAgICAgICAgICAgIC8vIFNldCB0aGUgZHVyYXRpb24gb2YgdGhlIGxhc3Qgc3BlZWNobWFyayBzdG9yZWQgbWF0Y2hpbmcgdGhpcyBvbmUncyB0eXBlXHJcbiAgICAgICAgICAgIGNvbnN0IG51bU1hcmtzID0gbWFya1R5cGVzW21hcmsudHlwZV0ubGVuZ3RoO1xyXG4gICAgICAgICAgICBpZiAobnVtTWFya3MgPiAwKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgbGFzdE1hcmsgPSBtYXJrVHlwZXNbbWFyay50eXBlXVtudW1NYXJrcyAtIDFdO1xyXG4gICAgICAgICAgICAgIGxhc3RNYXJrLmR1cmF0aW9uID0gbWFyay50aW1lIC0gbGFzdE1hcmsudGltZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbWFya1R5cGVzW21hcmsudHlwZV0ucHVzaChtYXJrKTtcclxuICAgICAgICAgICAgZW5kTWFya1R5cGVzW21hcmsudHlwZV0gPSBtYXJrO1xyXG4gICAgICAgICAgICByZXR1cm4gbWFyaztcclxuICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG5cclxuICAgICAgICAvLyBGaW5kIHRoZSB0aW1lIG9mIHRoZSBsYXRlc3Qgc3BlZWNobWFya1xyXG4gICAgICAgIGNvbnN0IGVuZFRpbWVzID0gW107XHJcbiAgICAgICAgaWYgKGVuZE1hcmtUeXBlcy5zZW50ZW5jZSkge1xyXG4gICAgICAgICAgZW5kVGltZXMucHVzaChlbmRNYXJrVHlwZXMuc2VudGVuY2UudGltZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChlbmRNYXJrVHlwZXMud29yZCkge1xyXG4gICAgICAgICAgZW5kVGltZXMucHVzaChlbmRNYXJrVHlwZXMud29yZC50aW1lKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGVuZE1hcmtUeXBlcy52aXNlbWUpIHtcclxuICAgICAgICAgIGVuZFRpbWVzLnB1c2goZW5kTWFya1R5cGVzLnZpc2VtZS50aW1lKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGVuZE1hcmtUeXBlcy5zc21sKSB7XHJcbiAgICAgICAgICBlbmRUaW1lcy5wdXNoKGVuZE1hcmtUeXBlcy5zc21sLnRpbWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBlbmRUaW1lID0gTWF0aC5tYXgoLi4uZW5kVGltZXMpO1xyXG5cclxuICAgICAgICAvLyBDYWxjdWxhdGUgZHVyYXRpb24gZm9yIHRoZSBlbmRpbmcgc3BlZWNoTWFya3Mgb2YgZWFjaCB0eXBlXHJcbiAgICAgICAgaWYgKGVuZE1hcmtUeXBlcy5zZW50ZW5jZSkge1xyXG4gICAgICAgICAgZW5kTWFya1R5cGVzLnNlbnRlbmNlLmR1cmF0aW9uID0gTWF0aC5tYXgoXHJcbiAgICAgICAgICAgIHRoaXMuX21pbkVuZE1hcmtEdXJhdGlvbixcclxuICAgICAgICAgICAgZW5kVGltZSAtIGVuZE1hcmtUeXBlcy5zZW50ZW5jZS50aW1lXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZW5kTWFya1R5cGVzLndvcmQpIHtcclxuICAgICAgICAgIGVuZE1hcmtUeXBlcy53b3JkLmR1cmF0aW9uID0gTWF0aC5tYXgoXHJcbiAgICAgICAgICAgIHRoaXMuX21pbkVuZE1hcmtEdXJhdGlvbixcclxuICAgICAgICAgICAgZW5kVGltZSAtIGVuZE1hcmtUeXBlcy53b3JkLnRpbWVcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChlbmRNYXJrVHlwZXMudmlzZW1lKSB7XHJcbiAgICAgICAgICBlbmRNYXJrVHlwZXMudmlzZW1lLmR1cmF0aW9uID0gTWF0aC5tYXgoXHJcbiAgICAgICAgICAgIHRoaXMuX21pbkVuZE1hcmtEdXJhdGlvbixcclxuICAgICAgICAgICAgZW5kVGltZSAtIGVuZE1hcmtUeXBlcy52aXNlbWUudGltZVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGVuZE1hcmtUeXBlcy5zc21sKSB7XHJcbiAgICAgICAgICBlbmRNYXJrVHlwZXMuc3NtbC5kdXJhdGlvbiA9IE1hdGgubWF4KFxyXG4gICAgICAgICAgICB0aGlzLl9taW5FbmRNYXJrRHVyYXRpb24sXHJcbiAgICAgICAgICAgIGVuZFRpbWUgLSBlbmRNYXJrVHlwZXMuc3NtbC50aW1lXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHNwZWVjaE1hcmtzO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgYSBTcGVlY2ggb2JqZWN0IHRoYXQgaGFzIHRoZSBnaXZlbiB0ZXh0LlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gVGhlIHRleHQgY29udGVudCBvZiB0aGUgU3BlZWNoLlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0PX0gY29uZmlnIC0gT3B0aW9ucyB0byB1cGRhdGUgdGhlIFNwZWVjaCB3aXRoLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0RlZmVycmVkfSBSZXNvbHZlcyB3aXRoIFNwZWVjaCBvciBudWxsO1xyXG4gICAqL1xyXG4gIF9nZXRTcGVlY2godGV4dCwgY29uZmlnKSB7XHJcbiAgICAvLyBNYWtlIHN1cmUgQVdTIHNlcnZpY2VzIGV4aXN0XHJcbiAgICBpZiAoIXRoaXMuY29uc3RydWN0b3IuaXNSZWFkeSkge1xyXG4gICAgICBjb25zdCBlID0gJ0FXUyBzZXJ2aWNlcyBoYXZlIG5vdCBiZWVuIGluaXRpYWxpemVkLic7XHJcbiAgICAgIHJldHVybiBEZWZlcnJlZC5yZWplY3QoZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gTWFrZSBzdXJlIGl0cyBwb3NzaWJsZSB0byBnZW5lcmF0ZSBzcGVlY2hlc1xyXG4gICAgaWYgKCF0ZXh0KSB7XHJcbiAgICAgIGNvbnN0IGUgPSAnQ2Fubm90IHBsYXkgYSBzcGVlY2ggd2l0aCBubyB0ZXh0Lic7XHJcbiAgICAgIHJldHVybiBEZWZlcnJlZC5yZWplY3QoZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gVXBkYXRlIHRoZSBzcGVlY2ggd2l0aCBvcHRpb25zXHJcbiAgICB0ZXh0ID0gVGV4dFRvU3BlZWNoVXRpbHMudmFsaWRhdGVUZXh0KHRleHQpO1xyXG4gICAgY29uZmlnID0gdGhpcy5fdXBkYXRlQ29uZmlnKGNvbmZpZywgdGV4dCk7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuX3VwZGF0ZVNwZWVjaCh0ZXh0LCBjb25maWcpLnByb21pc2U7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBZGRzIGEgbmFtZXNwYWNlIHRvIHRoZSBob3N0IHdpdGggdGhlIG5hbWUgb2YgdGhlIGZlYXR1cmUgdG8gY29udGFpbiBwcm9wZXJ0aWVzXHJcbiAgICogYW5kIG1ldGhvZHMgZnJvbSB0aGUgZmVhdHVyZSB0aGF0IHVzZXJzIG9mIHRoZSBob3N0IG5lZWQgYWNjZXNzIHRvLlxyXG4gICAqXHJcbiAgICogQHNlZSBUZXh0VG9TcGVlY2hGZWF0dXJlXHJcbiAgICovXHJcbiAgaW5zdGFsbEFwaSgpIHtcclxuICAgIC8qKlxyXG4gICAgICogQGlubmVyXHJcbiAgICAgKiBAbmFtZXNwYWNlIFRleHRUb1NwZWVjaEZlYXR1cmVcclxuICAgICAqL1xyXG4gICAgY29uc3QgYXBpID0gc3VwZXIuaW5zdGFsbEFwaSgpO1xyXG5cclxuICAgIE9iamVjdC5hc3NpZ24oYXBpLCB7XHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbWVtYmVyb2YgVGV4dFRvU3BlZWNoRmVhdHVyZVxyXG4gICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICogQG1ldGhvZFxyXG4gICAgICAgKiBAc2VlIEFic3RyYWN0VGV4dFRvU3BlZWNoRmVhdHVyZSNwbGF5XHJcbiAgICAgICAqL1xyXG4gICAgICBwbGF5OiB0aGlzLnBsYXkuYmluZCh0aGlzKSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBtZW1iZXJvZiBUZXh0VG9TcGVlY2hGZWF0dXJlXHJcbiAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgKiBAbWV0aG9kXHJcbiAgICAgICAqIEBzZWUgQWJzdHJhY3RUZXh0VG9TcGVlY2hGZWF0dXJlI3BhdXNlXHJcbiAgICAgICAqL1xyXG4gICAgICBwYXVzZTogdGhpcy5wYXVzZS5iaW5kKHRoaXMpLFxyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIFRleHRUb1NwZWVjaEZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBtZXRob2RcclxuICAgICAgICogQHNlZSBBYnN0cmFjdFRleHRUb1NwZWVjaEZlYXR1cmUjcmVzdW1lXHJcbiAgICAgICAqL1xyXG4gICAgICByZXN1bWU6IHRoaXMucmVzdW1lLmJpbmQodGhpcyksXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbWVtYmVyb2YgVGV4dFRvU3BlZWNoRmVhdHVyZVxyXG4gICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICogQG1ldGhvZFxyXG4gICAgICAgKiBAc2VlIEFic3RyYWN0VGV4dFRvU3BlZWNoRmVhdHVyZSNzdG9wXHJcbiAgICAgICAqL1xyXG4gICAgICBzdG9wOiB0aGlzLnN0b3AuYmluZCh0aGlzKSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBtZW1iZXJvZiBUZXh0VG9TcGVlY2hGZWF0dXJlXHJcbiAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgKiBAbWV0aG9kXHJcbiAgICAgICAqIEBzZWUgQWJzdHJhY3RUZXh0VG9TcGVlY2hGZWF0dXJlI2dldFZvbHVtZVxyXG4gICAgICAgKi9cclxuICAgICAgZ2V0Vm9sdW1lOiB0aGlzLmdldFZvbHVtZS5iaW5kKHRoaXMpLFxyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIFRleHRUb1NwZWVjaEZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBtZXRob2RcclxuICAgICAgICogQHNlZSBBYnN0cmFjdFRleHRUb1NwZWVjaEZlYXR1cmUjc2V0Vm9sdW1lXHJcbiAgICAgICAqL1xyXG4gICAgICBzZXRWb2x1bWU6IHRoaXMuc2V0Vm9sdW1lLmJpbmQodGhpcyksXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbWVtYmVyb2YgVGV4dFRvU3BlZWNoRmVhdHVyZVxyXG4gICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICogQG1ldGhvZFxyXG4gICAgICAgKiBAc2VlIEFic3RyYWN0VGV4dFRvU3BlZWNoRmVhdHVyZSNwYXVzZVZvbHVtZVxyXG4gICAgICAgKi9cclxuICAgICAgcGF1c2VWb2x1bWU6IHRoaXMucGF1c2VWb2x1bWUuYmluZCh0aGlzKSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBtZW1iZXJvZiBUZXh0VG9TcGVlY2hGZWF0dXJlXHJcbiAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgKiBAbWV0aG9kXHJcbiAgICAgICAqIEBzZWUgQWJzdHJhY3RUZXh0VG9TcGVlY2hGZWF0dXJlI3Jlc3VtZVZvbHVtZVxyXG4gICAgICAgKi9cclxuICAgICAgcmVzdW1lVm9sdW1lOiB0aGlzLnJlc3VtZVZvbHVtZS5iaW5kKHRoaXMpLFxyXG4gICAgfSk7XHJcblxyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoYXBpLCB7XHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbWVtYmVyb2YgVGV4dFRvU3BlZWNoRmVhdHVyZVxyXG4gICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICogQHNlZSBBYnN0cmFjdFRleHRUb1NwZWVjaEZlYXR1cmUjc3BlZWNobWFya09mZnNldFxyXG4gICAgICAgKi9cclxuICAgICAgc3BlZWNobWFya09mZnNldDoge1xyXG4gICAgICAgIGdldDogKCkgPT4gdGhpcy5zcGVlY2htYXJrT2Zmc2V0LFxyXG4gICAgICAgIHNldDogb2Zmc2V0ID0+IHtcclxuICAgICAgICAgIHRoaXMuc3BlZWNobWFya09mZnNldCA9IG9mZnNldDtcclxuICAgICAgICB9LFxyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIGFwaTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgYW5kIHNldHMgdGhlIHZvbHVtZSB1c2VkIGZvciBhbGwgYXVkaW8gY2xpcHMgcGxheWVkIGJ5IHRoZSBzcGVha2VyLlxyXG4gICAqXHJcbiAgICogQHR5cGUge251bWJlcn1cclxuICAgKi9cclxuICBzZXQgdm9sdW1lKHZvbHVtZSkge1xyXG4gICAgdGhpcy5fdm9sdW1lID0gTWF0aFV0aWxzLmNsYW1wKHZvbHVtZSk7XHJcbiAgfVxyXG5cclxuICBnZXQgdm9sdW1lKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3ZvbHVtZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgd2hldGhlciBvciBub3QgdGhlIHNwZWFrZXIncyB2b2x1bWUgdmFsdWUgaXMgY3VycmVudGx5IGJlaW5nIHR3ZWVuZWQuXHJcbiAgICpcclxuICAgKiBAcmVhZG9ubHlcclxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgKi9cclxuICBnZXQgdm9sdW1lUGVuZGluZygpIHtcclxuICAgIHJldHVybiB0aGlzLl9wcm9taXNlcy52b2x1bWUgJiYgdGhpcy5fcHJvbWlzZXMudm9sdW1lLnBlbmRpbmc7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSB2b2x1bWUgdXNlZCBmb3IgYWxsIGF1ZGlvIGNsaXBzIHBsYXllZCBieSB0aGUgc3BlYWtlci5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XHJcbiAgICovXHJcbiAgZ2V0Vm9sdW1lKCkge1xyXG4gICAgcmV0dXJuIHRoaXMudm9sdW1lO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlcyB0aGUgdm9sdW1lIHVzZWQgZm9yIGFsbCBhdWRpbyBjbGlwcyBwbGF5ZWQgYnkgdGhlIHNwZWFrZXIgb3ZlciB0aW1lLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IHZvbHVtZSAtIFRhcmdldCB2b2x1bWUgdmFsdWUuXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtzZWNvbmRzPTBdIC0gQW1vdW50IG9mIHRpbWUgaXQgd2lsbCB0YWtlIHRvIHJlYWNoIHRoZSB0YXJnZXRcclxuICAgKiB2b2x1bWUuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IGVhc2luZ0ZuIC0gRWFzaW5nIGZ1bmN0aW9uIHVzZWQgZm9yIGludGVycG9sYXRpb24uXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7RGVmZXJyZWR9XHJcbiAgICovXHJcbiAgc2V0Vm9sdW1lKHZvbHVtZSwgc2Vjb25kcyA9IDAsIGVhc2luZ0ZuKSB7XHJcbiAgICBpZiAodGhpcy52b2x1bWVQZW5kaW5nKSB7XHJcbiAgICAgIHRoaXMuX3Byb21pc2VzLnZvbHVtZS5jYW5jZWwoKTtcclxuICAgIH1cclxuXHJcbiAgICB2b2x1bWUgPSBNYXRoVXRpbHMuY2xhbXAodm9sdW1lKTtcclxuICAgIHRoaXMuX3Byb21pc2VzLnZvbHVtZSA9IEFuaW1hdGlvblV0aWxzLmludGVycG9sYXRlUHJvcGVydHkoXHJcbiAgICAgIHRoaXMsXHJcbiAgICAgICd2b2x1bWUnLFxyXG4gICAgICB2b2x1bWUsXHJcbiAgICAgIHtzZWNvbmRzLCBlYXNpbmdGbn1cclxuICAgICk7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuX3Byb21pc2VzLnZvbHVtZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFBhdXNlIGludGVycG9sYXRpb24gaGFwcGVuaW5nIG9uIHRoZSBzcGVha2VyJ3Mgdm9sdW1lIHByb3BlcnR5LlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAgICovXHJcbiAgcGF1c2VWb2x1bWUoKSB7XHJcbiAgICB0aGlzLl92b2x1bWVQYXVzZWQgPSB0cnVlO1xyXG5cclxuICAgIHJldHVybiB0aGlzLnZvbHVtZVBlbmRpbmc7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXN1bWUgYW55IGludGVycG9sYXRpb24gaGFwcGVuaW5nIG9uIHRoZSBzcGVha2VyJ3Mgdm9sdW1lIHByb3BlcnR5LlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAgICovXHJcbiAgcmVzdW1lVm9sdW1lKCkge1xyXG4gICAgdGhpcy5fdm9sdW1lUGF1c2VkID0gZmFsc2U7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMudm9sdW1lUGVuZGluZztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZSB0aGUgY3VycmVudGx5IHBsYXlpbmcgc3BlZWNoLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IGRlbHRhVGltZSAtIFRpbWUgc2luY2UgdGhlIGxhc3QgdXBkYXRlLlxyXG4gICAqL1xyXG4gIHVwZGF0ZShkZWx0YVRpbWUpIHtcclxuICAgIGlmICghdGhpcy5fdm9sdW1lUGF1c2VkKSB7XHJcbiAgICAgIHRoaXMuX3Byb21pc2VzLnZvbHVtZS5leGVjdXRlKGRlbHRhVGltZSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuX2N1cnJlbnRTcGVlY2ggJiYgdGhpcy5fY3VycmVudFNwZWVjaC5wbGF5aW5nKSB7XHJcbiAgICAgIHRoaXMuX2N1cnJlbnRTcGVlY2gudm9sdW1lID0gdGhpcy5fdm9sdW1lO1xyXG4gICAgICB0aGlzLl9jdXJyZW50U3BlZWNoLnVwZGF0ZSh0aGlzLl9ob3N0Lm5vdyk7XHJcbiAgICAgIHN1cGVyLnVwZGF0ZShkZWx0YVRpbWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0IHRoZSBjdXJyZW50IHNwZWVjaCB0byBhIG5ldyBhc3NldCBhbmQgdXBkYXRlIHRoZSBzcGVlY2gncyBzcGVlY2htYXJrXHJcbiAgICogb2Zmc2V0IHZhbHVlIHRvIG1hdGNoIHRoYXQgb2YgdGhlIGZlYXR1cmUuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtBYnN0cmFjdFNwZWVjaH0gc3BlZWNoIC0gU3BlZWNoIHRvIHNldCBhcyBjdXJyZW50LlxyXG4gICAqL1xyXG4gIF9zZXRDdXJyZW50U3BlZWNoKHNwZWVjaCkge1xyXG4gICAgc3BlZWNoLnNwZWVjaG1hcmtPZmZzZXQgPSB0aGlzLl9zcGVlY2htYXJrT2Zmc2V0O1xyXG4gICAgdGhpcy5fY3VycmVudFNwZWVjaCA9IHNwZWVjaDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZSBhIHByb21pc2UgdGhhdCB3aWxsIHBsYXkvcmVzdW1lIGEgc3BlZWNoIHdpdGggdGhlIGdpdmVuIHRleHQgYWZ0ZXJcclxuICAgKiB0aGUgYXVkaW8gY29udGV4dCBhdHRlbXB0cyB0byByZXN1bWUgYW5kIHNwZWVjaCBhdWRpbyBpcyByZXRyaWV2ZWQgZnJvbSBQb2xseS5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIFRoZSB0ZXh0IG9mIHRoZSBuZXcgc3BlZWNoIHRvIHBsYXkuXHJcbiAgICogQHBhcmFtIHtPYmplY3Q9fSBjb25maWcgLSBPcHRpb25hbCBwYXJhbWV0ZXJzIGZvciB0aGUgc3BlZWNoLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcGxheU1ldGhvZCA9ICdwbGF5J10gLSBNZXRob2QgdG8gZXhlY3V0ZSBvbiB0aGUgcmVzdWx0aW5nXHJcbiAgICogU3BlZWNoIG9iamVjdC4gVmFsaWQgb3B0aW9ucyBhcmUgJ3BsYXknIGFuZCAncmVzdW1lJy5cclxuICAgKi9cclxuICBfc3RhcnRTcGVlY2godGV4dCwgY29uZmlnLCBwbGF5TWV0aG9kID0gJ3BsYXknKSB7XHJcbiAgICAvLyBJZiBubyB0ZXh0IGlzIHByb3ZpZGVkLCB0cnkgdG8gdXNlIHRoZSBjdXJyZW50IHNwZWVjaFxyXG4gICAgaWYgKHRleHQgPT09IHVuZGVmaW5lZCAmJiBwbGF5TWV0aG9kID09PSAncmVzdW1lJyAmJiB0aGlzLl9jdXJyZW50U3BlZWNoKSB7XHJcbiAgICAgIHRleHQgPSB0aGlzLl9jdXJyZW50U3BlZWNoLnRleHQ7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgY3VycmVudFByb21pc2UgPSB0aGlzLl9jdXJyZW50UHJvbWlzZSB8fCB7XHJcbiAgICAgIHBsYXk6IG5ldyBEZWZlcnJlZChcclxuICAgICAgICB1bmRlZmluZWQsXHJcbiAgICAgICAgKCkgPT4ge1xyXG4gICAgICAgICAgY3VycmVudFByb21pc2Uuc3BlZWNoLmNhbmNlbCgpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgKCkgPT4ge1xyXG4gICAgICAgICAgY3VycmVudFByb21pc2Uuc3BlZWNoLmNhbmNlbCgpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgKCkgPT4ge1xyXG4gICAgICAgICAgY3VycmVudFByb21pc2Uuc3BlZWNoLmNhbmNlbCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgKSxcclxuICAgICAgc3BlZWNoOiBuZXcgRGVmZXJyZWQoKSxcclxuICAgIH07XHJcbiAgICB0aGlzLl9jdXJyZW50UHJvbWlzZSA9IGN1cnJlbnRQcm9taXNlO1xyXG5cclxuICAgIHRoaXMuX2dldFNwZWVjaCh0ZXh0LCBjb25maWcpXHJcbiAgICAgIC50aGVuKHNwZWVjaCA9PiB7XHJcbiAgICAgICAgLy8gRXhpdCBpZiB0aGUgcHJvbWlzZSBpcyBubyBsb25nZXIgcGVuZGluZyBiZWNhdXNlIG9mIHVzZXIgaW50ZXJhY3Rpb25cclxuICAgICAgICBpZiAoIWN1cnJlbnRQcm9taXNlLnBsYXkucGVuZGluZykge1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5fY3VycmVudFByb21pc2UgIT09IGN1cnJlbnRQcm9taXNlKSB7XHJcbiAgICAgICAgICAvLyBDYW5jZWwgaWYgYW5vdGhlciBjYWxsIHRvIHBsYXkgaGFzIGFscmVhZHkgYmVlbiBtYWRlXHJcbiAgICAgICAgICBjdXJyZW50UHJvbWlzZS5wbGF5LmNhbmNlbCgpO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gUmVzZXQgY3VycmVudCBzcGVlY2ggd2hlbiB0aGUgc3BlZWNoIGVuZHNcclxuICAgICAgICBjb25zdCBvbkZpbmlzaCA9ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuX2N1cnJlbnRTcGVlY2ggPSBudWxsO1xyXG4gICAgICAgICAgdGhpcy5fY3VycmVudFByb21pc2UgPSBudWxsO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIC8vIENhbmNlbCB0aGUgY3VycmVudGx5IHBsYXlpbmcgc3BlZWNoXHJcbiAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRTcGVlY2ggJiYgdGhpcy5fY3VycmVudFNwZWVjaC5wbGF5aW5nKSB7XHJcbiAgICAgICAgICBpZiAocGxheU1ldGhvZCA9PT0gJ3BsYXknKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRTcGVlY2guY2FuY2VsKCk7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgICAgICBwbGF5TWV0aG9kID09PSAncmVzdW1lJyAmJlxyXG4gICAgICAgICAgICB0aGlzLl9jdXJyZW50U3BlZWNoLmF1ZGlvICE9PSBzcGVlY2guYXVkaW9cclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICB0aGlzLl9jdXJyZW50U3BlZWNoLmNhbmNlbCgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fc2V0Q3VycmVudFNwZWVjaChzcGVlY2gpO1xyXG5cclxuICAgICAgICAvLyBQbGF5IHRoZSBzcGVlY2hcclxuICAgICAgICBjdXJyZW50UHJvbWlzZS5zcGVlY2ggPSBzcGVlY2hbcGxheU1ldGhvZF0oXHJcbiAgICAgICAgICB0aGlzLl9ob3N0Lm5vdyxcclxuICAgICAgICAgIG9uRmluaXNoLFxyXG4gICAgICAgICAgb25GaW5pc2gsXHJcbiAgICAgICAgICBvbkZpbmlzaFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY3VycmVudFByb21pc2Uuc3BlZWNoXHJcbiAgICAgICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChjdXJyZW50UHJvbWlzZS5zcGVlY2gucmVzb2x2ZWQpIHtcclxuICAgICAgICAgICAgICBjdXJyZW50UHJvbWlzZS5wbGF5LnJlc29sdmUoKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBjdXJyZW50UHJvbWlzZS5wbGF5LmNhbmNlbCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgLmNhdGNoKGVycm9yID0+IHtcclxuICAgICAgICAgICAgY3VycmVudFByb21pc2UucGxheS5yZWplY3QoZXJyb3IpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgIH0pXHJcbiAgICAgIC5jYXRjaChlID0+IHtcclxuICAgICAgICBlID0gYENhbm5vdCAke3BsYXlNZXRob2R9IHNwZWVjaCAke3RleHR9IG9uIGhvc3QgJHt0aGlzLmhvc3QuaWR9LiAke2V9YDtcclxuICAgICAgICBjdXJyZW50UHJvbWlzZS5wbGF5LnJlamVjdChlKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIGN1cnJlbnRQcm9taXNlLnBsYXk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTdG9wIGFueSBzcGVlY2hlcyBjdXJyZW50bHkgcGxheWluZyBhbmQgcGxheSBhIG5ldyBzcGVlY2ggZnJvbSB0aGUgYmVnaW5uaW5nLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSBUaGUgdGV4dCBvZiB0aGUgbmV3IHNwZWVjaCB0byBwbGF5LlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0PX0gY29uZmlnIC0gT3B0aW9uYWwgcGFyYW1ldGVycyBmb3IgdGhlIHNwZWVjaC5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtEZWZlcnJlZH1cclxuICAgKi9cclxuICBwbGF5KHRleHQsIGNvbmZpZykge1xyXG4gICAgcmV0dXJuIHRoaXMuX3N0YXJ0U3BlZWNoKHRleHQsIGNvbmZpZywgJ3BsYXknKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIElmIGEgc3BlZWNoIGlzIGN1cnJlbnRseSBwbGF5aW5nLCBwYXVzZSBpdCBhdCB0aGUgY3VycmVudCB0aW1lLlxyXG4gICAqL1xyXG4gIHBhdXNlKCkge1xyXG4gICAgaWYgKHRoaXMuX2N1cnJlbnRTcGVlY2ggJiYgdGhpcy5fY3VycmVudFNwZWVjaC5wbGF5aW5nKSB7XHJcbiAgICAgIHRoaXMuX2N1cnJlbnRTcGVlY2gucGF1c2UodGhpcy5faG9zdC5ub3cpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgIGBDYW5ub3QgcGF1c2Ugc3BlZWNoIG9uIGhvc3QgJHt0aGlzLmhvc3QuaWR9LiBObyBzcGVlY2ggaXMgY3VycmVudGx5IHBsYXlpbmdgXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTdG9wIGFueSBzcGVlY2hlcyBjdXJyZW50bHkgcGxheWluZyBhbmQgcmVzdW1lIGEgbmV3IHNwZWVjaCBmcm9tIHRoZSBjdXJyZW50XHJcbiAgICogdGltZS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nPX0gdGV4dCAtIFRoZSB0ZXh0IG9mIHRoZSBuZXcgc3BlZWNoIHRvIHBsYXkuIElmIHVuZGVmaW5lZCBhbmRcclxuICAgKiB0aGVyZSBpcyBhIGN1cnJlbnQgc3BlZWNoIHRoYXQgaXMgcGF1c2VkLCB0aGUgY3VycmVudCBzcGVlY2ggd2lsbCBiZSByZXN1bWVkLlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0PX0gY29uZmlnIC0gT3B0aW9uYWwgcGFyYW1ldGVycyBmb3IgdGhlIHNwZWVjaC5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtEZWZlcnJlZH1cclxuICAgKi9cclxuICByZXN1bWUodGV4dCwgY29uZmlnKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fc3RhcnRTcGVlY2godGV4dCwgY29uZmlnLCAncmVzdW1lJyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJZiBhIHNwZWVjaCBpcyBjdXJyZW50bHkgcGxheWluZywgc3RvcCBwbGF5YmFjayBhbmQgcmVzZXQgdGltZS5cclxuICAgKi9cclxuICBzdG9wKCkge1xyXG4gICAgaWYgKHRoaXMuX2N1cnJlbnRTcGVlY2ggJiYgdGhpcy5fY3VycmVudFNwZWVjaC5wbGF5aW5nKSB7XHJcbiAgICAgIHRoaXMuX2N1cnJlbnRTcGVlY2guc3RvcCgpO1xyXG4gICAgICB0aGlzLl9jdXJyZW50U3BlZWNoID0gbnVsbDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICBgQ2Fubm90IHN0b3Agc3BlZWNoIG9uIGhvc3QgJHt0aGlzLmhvc3QuaWR9LiBObyBzcGVlY2ggaXMgY3VycmVudGx5IHBsYXlpbmcuYFxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZGlzY2FyZCgpIHtcclxuICAgIGlmICh0aGlzLl9jdXJyZW50U3BlZWNoICYmIHRoaXMuX2N1cnJlbnRTcGVlY2gucGxheWluZykge1xyXG4gICAgICB0aGlzLl9jdXJyZW50U3BlZWNoLnN0b3AoKTtcclxuICAgIH1cclxuXHJcbiAgICBkZWxldGUgdGhpcy5fc3BlZWNoQ2FjaGU7XHJcblxyXG4gICAgc3VwZXIuZGlzY2FyZCgpO1xyXG4gIH1cclxufVxyXG5cclxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQWJzdHJhY3RUZXh0VG9TcGVlY2hGZWF0dXJlLCB7XHJcbiAgQVdTX1ZFUlNJT046IHtcclxuICAgIGdldDogKCkgPT4gYXdzVmVyc2lvbixcclxuICB9LFxyXG4gIFBPTExZX01JTl9ORVVSQUxfVkVSU0lPTjoge1xyXG4gICAgdmFsdWU6ICcyLjUwMycsXHJcbiAgICB3cml0YWJsZTogZmFsc2UsXHJcbiAgfSxcclxuICBQT0xMWV9ERUZBVUxUUzoge1xyXG4gICAgdmFsdWU6IHtcclxuICAgICAgRW5naW5lOiAnc3RhbmRhcmQnLFxyXG4gICAgICBMZXhpY29uTmFtZXM6IFtdLFxyXG4gICAgICBPdXRwdXRGb3JtYXQ6ICdtcDMnLFxyXG4gICAgICBTYW1wbGVSYXRlOiAnMjIwNTAnLFxyXG4gICAgICBUZXh0OiAnJyxcclxuICAgICAgVGV4dFR5cGU6ICdzc21sJyxcclxuICAgICAgVm9pY2VJZDogJ0FteScsXHJcbiAgICAgIExhbmd1YWdlQ29kZTogJ2VuLUdCJyxcclxuICAgICAgTGFuZ3VhZ2VOYW1lOiAnQnJpdGlzaCBFbmdsaXNoJyxcclxuICAgIH0sXHJcbiAgICB3cml0YWJsZTogZmFsc2UsXHJcbiAgfSxcclxuICBQT0xMWV9WT0lDRVM6IHtcclxuICAgIHZhbHVlOiBbXSxcclxuICAgIHdyaXRhYmxlOiBmYWxzZSxcclxuICB9LFxyXG4gIFBPTExZX0xBTkdVQUdFUzoge1xyXG4gICAgdmFsdWU6IHt9LFxyXG4gICAgd3JpdGFibGU6IGZhbHNlLFxyXG4gIH0sXHJcbiAgUE9MTFlfTEFOR1VBR0VfQ09ERVM6IHtcclxuICAgIHZhbHVlOiB7fSxcclxuICAgIHdyaXRhYmxlOiBmYWxzZSxcclxuICB9LFxyXG4gIF9pc1JlYWR5OiB7XHJcbiAgICB2YWx1ZTogZmFsc2UsXHJcbiAgICB3cml0YWJsZTogdHJ1ZSxcclxuICB9LFxyXG4gIEVWRU5UUzoge1xyXG4gICAgdmFsdWU6IHtcclxuICAgICAgLi4uT2JqZWN0LmdldFByb3RvdHlwZU9mKEFic3RyYWN0VGV4dFRvU3BlZWNoRmVhdHVyZSkuRVZFTlRTLFxyXG4gICAgICByZWFkeTogJ29uUmVhZHlFdmVudCcsXHJcbiAgICAgIHBsYXk6ICdvblBsYXlFdmVudCcsXHJcbiAgICAgIHBhdXNlOiAnb25QYXVzZUV2ZW50JyxcclxuICAgICAgcmVzdW1lOiAnb25SZXN1bWVFdmVudCcsXHJcbiAgICAgIGludGVycnVwdDogJ29uSW50ZXJydXB0RXZlbnQnLFxyXG4gICAgICBzdG9wOiAnb25TdG9wRXZlbnQnLFxyXG4gICAgICBzZW50ZW5jZTogJ29uU2VudGVuY2VFdmVudCcsXHJcbiAgICAgIHdvcmQ6ICdvbldvcmRFdmVudCcsXHJcbiAgICAgIHZpc2VtZTogJ29uVmlzZW1lRXZlbnQnLFxyXG4gICAgICBzc21sOiAnb25Tc21sRXZlbnQnLFxyXG4gICAgfSxcclxuICB9LFxyXG4gIFNFUlZJQ0VTOiB7XHJcbiAgICB2YWx1ZToge1xyXG4gICAgICAuLi5PYmplY3QuZ2V0UHJvdG90eXBlT2YoQWJzdHJhY3RUZXh0VG9TcGVlY2hGZWF0dXJlKS5TRVJWSUNFUyxcclxuICAgICAgcG9sbHk6IHVuZGVmaW5lZCxcclxuICAgICAgcHJlc2lnbmVyOiB1bmRlZmluZWQsXHJcbiAgICB9LFxyXG4gIH0sXHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgQWJzdHJhY3RUZXh0VG9TcGVlY2hGZWF0dXJlO1xyXG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cclxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVC0wXHJcbmltcG9ydCBBYnN0cmFjdFNwZWVjaCBmcm9tICcuL0Fic3RyYWN0U3BlZWNoJztcclxuXHJcbi8qKlxyXG4gKiBUaGUgYnVpbHQtaW4gY2xhc3MgZm9yIGFzeW5jaHJvbm91cyBQcm9taXNlcy5cclxuICogQGV4dGVybmFsIEF1ZGlvXHJcbiAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0hUTUxBdWRpb0VsZW1lbnQvQXVkaW9cclxuICovXHJcblxyXG4vKipcclxuICogQGV4dGVuZHMgQWJzdHJhY3RTcGVlY2hcclxuICogQGFsaWFzIGNvcmUvU3BlZWNoXHJcbiAqL1xyXG5jbGFzcyBTcGVlY2ggZXh0ZW5kcyBBYnN0cmFjdFNwZWVjaCB7XHJcbiAgLyoqXHJcbiAgICogQGNvbnN0cnVjdG9yXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge1RleHRUb1NwZWVjaH0gc3BlYWtlciAtIFRoZSBvd25lciBvZiB0aGUgU3BlZWNoIHRoYXQgd2lsbCBlbWl0IHNwZWVjaG1hcmtcclxuICAgKiBtZXNzYWdlcy5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIFRoZSB0ZXh0IG9mIHRoZSBzcGVlY2guXHJcbiAgICogQHBhcmFtIHtBcnJheS48T2JqZWN0Pn0gW3NwZWVjaG1hcmtzPVtdXSAtIEFuIGFycmF5IG9mIHNwZWVjaG1hcmsgb2JqZWN0cyByZXByZXNlbnRpbmdcclxuICAgKiB0aGUgdGV4dCBhbmQgdGltaW5nIG9mIHRoZSBzcGVlY2guXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IGF1ZGlvQ29uZmlnIC0gT2JqZWN0IGNvbnRhaW5pbmcgYXVkaW8gYW5kIHVybC5cclxuICAgKiBAcGFyYW0ge2V4dGVybmFsOkF1ZGlvfSBhdWRpb0NvbmZpZy5hdWRpbyAtIFBsYXlhYmxlIGF1ZGlvIG9iamVjdC5cclxuICAgKi9cclxuICBjb25zdHJ1Y3RvcihzcGVha2VyLCB0ZXh0LCBzcGVlY2htYXJrcyA9IFtdLCBhdWRpb0NvbmZpZykge1xyXG4gICAgc3VwZXIoc3BlYWtlciwgdGV4dCwgc3BlZWNobWFya3MpO1xyXG4gICAgdGhpcy5fYXVkaW8gPSBhdWRpb0NvbmZpZy5hdWRpbztcclxuXHJcbiAgICAvLyBLZWVwIHRyYWNrIG9mIHdoZXRoZXIgdGhlIGF1ZGlvIGhhcyBmaW5pc2hlZCBwbGF5aW5nIHRocm91Z2hcclxuICAgIHRoaXMuX2F1ZGlvLm9uZW5kZWQgPSAoKSA9PiB7XHJcbiAgICAgIHRoaXMuX2F1ZGlvRmluaXNoZWQgPSB0cnVlO1xyXG4gICAgfTtcclxuICAgIHRoaXMuX2F1ZGlvRmluaXNoZWQgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgX2NoZWNrRmluaXNoZWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fYXVkaW9GaW5pc2hlZCAmJiBzdXBlci5fY2hlY2tGaW5pc2hlZCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgcGxheWFibGUgYXVkaW8gZm9yIHRoZSBzcGVlY2guXHJcbiAgICpcclxuICAgKiBAcmVhZG9ubHlcclxuICAgKiBAdHlwZSB7ZXh0ZXJuYWw6QXVkaW99XHJcbiAgICovXHJcbiAgZ2V0IGF1ZGlvKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2F1ZGlvO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgYXVkaW8gdm9sdW1lIGZvciB0aGUgc3BlZWNoLlxyXG4gICAqXHJcbiAgICogQHR5cGUge251bWJlcn1cclxuICAgKi9cclxuICBnZXQgdm9sdW1lKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2F1ZGlvLnZvbHVtZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHMgdGhlIGF1ZGlvIHZvbHVtZSBmb3IgdGhlIHNwZWVjaC5cclxuICAgKi9cclxuICBzZXQgdm9sdW1lKHZvbHVtZSkge1xyXG4gICAgdGhpcy5fYXVkaW8udm9sdW1lID0gdm9sdW1lO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0IHRoZSBhdWRpbydzIGN1cnJlbnQgbG9jYWwgdGltZSBhbmQgcGxheSBpdC5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICovXHJcbiAgX3BsYXlBdWRpbygpIHtcclxuICAgIGlmICh0aGlzLl9zcGVlY2htYXJrT2Zmc2V0IDwgMCkge1xyXG4gICAgICB0aGlzLl9hdWRpby5jdXJyZW50VGltZSA9IHRoaXMuX3NwZWVjaG1hcmtPZmZzZXQ7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLl9wbGF5aW5nKSB7XHJcbiAgICAgICAgICB0aGlzLl9hdWRpby5jdXJyZW50VGltZSA9XHJcbiAgICAgICAgICAgICh0aGlzLl9sb2NhbFRpbWUgKyB0aGlzLl9zcGVlY2htYXJrT2Zmc2V0KSAvIDEwMDA7XHJcbiAgICAgICAgICB0aGlzLl9hdWRpby5wbGF5KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LCAtdGhpcy5fc3BlZWNobWFya09mZnNldCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9hdWRpby5jdXJyZW50VGltZSA9IDA7XHJcbiAgICAgIHRoaXMuX2F1ZGlvLnBsYXkoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFBhdXNlIHRoZSBhdWRpbyBvbmNlIGl0IGlzIHBsYXlhYmxlLlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBfcGF1c2VBdWRpbygpIHtcclxuICAgIHRoaXMuX2F1ZGlvLnBsYXkoKS50aGVuKCgpID0+IHtcclxuICAgICAgaWYgKCF0aGlzLl9wbGF5aW5nKSB7XHJcbiAgICAgICAgdGhpcy5fYXVkaW8ucGF1c2UoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwbGF5KGN1cnJlbnRUaW1lLCBvbkZpbmlzaCwgb25FcnJvciwgb25JbnRlcnJ1cHQpIHtcclxuICAgIHRoaXMuX2F1ZGlvRmluaXNoZWQgPSBmYWxzZTtcclxuICAgIHRoaXMuX3BsYXlBdWRpbygpO1xyXG5cclxuICAgIHJldHVybiBzdXBlci5wbGF5KGN1cnJlbnRUaW1lLCBvbkZpbmlzaCwgb25FcnJvciwgb25JbnRlcnJ1cHQpO1xyXG4gIH1cclxuXHJcbiAgcGF1c2UoY3VycmVudFRpbWUpIHtcclxuICAgIHRoaXMuX3BhdXNlQXVkaW8oKTtcclxuICAgIHN1cGVyLnBhdXNlKGN1cnJlbnRUaW1lKTtcclxuICB9XHJcblxyXG4gIHJlc3VtZShjdXJyZW50VGltZSwgb25GaW5pc2gsIG9uRXJyb3IsIG9uSW50ZXJydXB0KSB7XHJcbiAgICB0aGlzLl9hdWRpb0ZpbmlzaGVkID0gZmFsc2U7XHJcbiAgICB0aGlzLl9hdWRpby5wbGF5KCk7XHJcblxyXG4gICAgcmV0dXJuIHN1cGVyLnJlc3VtZShjdXJyZW50VGltZSwgb25GaW5pc2gsIG9uRXJyb3IsIG9uSW50ZXJydXB0KTtcclxuICB9XHJcblxyXG4gIGNhbmNlbCgpIHtcclxuICAgIHRoaXMuX3BhdXNlQXVkaW8oKTtcclxuICAgIHN1cGVyLmNhbmNlbCgpO1xyXG4gIH1cclxuXHJcbiAgc3RvcCgpIHtcclxuICAgIHRoaXMuX3BhdXNlQXVkaW8oKTtcclxuICAgIHRoaXMuX2F1ZGlvLmN1cnJlbnRUaW1lID0gMDtcclxuICAgIHN1cGVyLnN0b3AoKTtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IFNwZWVjaDtcclxuIiwiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXHJcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxyXG5pbXBvcnQgQ29yZVNwZWVjaCBmcm9tICdjb3JlL2F3c3BhY2svU3BlZWNoJztcclxuaW1wb3J0IEFic3RyYWN0U3BlZWNoIGZyb20gJ2NvcmUvYXdzcGFjay9BYnN0cmFjdFNwZWVjaCc7XHJcblxyXG4vKipcclxuICogQGV4dGVuZHMgY29yZS9TcGVlY2hcclxuICogQGFsaWFzIEJhYnlsb24uanMvU3BlZWNoXHJcbiAqL1xyXG5jbGFzcyBTcGVlY2ggZXh0ZW5kcyBDb3JlU3BlZWNoIHtcclxuICAvKipcclxuICAgKiBAY29uc3RydWN0b3JcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7QmFieWxvbi5qcy9UZXh0VG9TcGVlY2hGZWF0dXJlfSBzcGVha2VyIC0gVGhlIG93bmVyIG9mIHRoZSBTcGVlY2hcclxuICAgKiB0aGF0IHdpbGwgZW1pdCBzcGVlY2htYXJrIG1lc3NhZ2VzLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gVGhlIHRleHQgb2YgdGhlIHNwZWVjaC5cclxuICAgKiBAcGFyYW0ge0FycmF5LjxPYmplY3Q+fSBbc3BlZWNobWFya3M9W11dIC0gQW4gYXJyYXkgb2Ygc3BlZWNobWFyayBvYmplY3RzIHJlcHJlc2VudGluZ1xyXG4gICAqIHRoZSB0ZXh0IGFuZCB0aW1pbmcgb2YgdGhlIHNwZWVjaC5cclxuICAgKiBAcGFyYW0ge09iamVjdH0gYXVkaW9Db25maWcgLSBPYmplY3QgY29udGFpbmluZyBhdWRpbyBhbmQgdXJsLlxyXG4gICAqIEBwYXJhbSB7ZXh0ZXJuYWw6QXVkaW99IGF1ZGlvQ29uZmlnLmF1ZGlvIC0gUGxheWFibGUgYXVkaW8gb2JqZWN0LlxyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKC4uLmFyZ3MpIHtcclxuICAgIHN1cGVyKC4uLmFyZ3MpO1xyXG5cclxuICAgIHRoaXMuX2F1ZGlvLm9uRW5kZWRPYnNlcnZhYmxlLmFkZCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuX2F1ZGlvRmluaXNoZWQgPSB0cnVlO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBfcGxheUF1ZGlvKCkge1xyXG4gICAgaWYgKHRoaXMuX3NwZWVjaG1hcmtPZmZzZXQgPCAwKSB7XHJcbiAgICAgIHRoaXMuX2F1ZGlvLnBsYXkoLXRoaXMuX3NwZWVjaG1hcmtPZmZzZXQgLyAxMDAwKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2F1ZGlvLnBsYXkoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIF9wYXVzZUF1ZGlvKCkge1xyXG4gICAgdGhpcy5fYXVkaW8ucGF1c2UoKTtcclxuICB9XHJcblxyXG4gIGdldCB2b2x1bWUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fYXVkaW8uZ2V0Vm9sdW1lKCk7XHJcbiAgfVxyXG5cclxuICBzZXQgdm9sdW1lKHZvbHVtZSkge1xyXG4gICAgdGhpcy5fYXVkaW8uc2V0Vm9sdW1lKHZvbHVtZSk7XHJcbiAgfVxyXG5cclxuICBwbGF5KGN1cnJlbnRUaW1lLCBvbkZpbmlzaCwgb25FcnJvciwgb25JbnRlcnJ1cHQpIHtcclxuICAgIHRoaXMuX2F1ZGlvLnN0b3AoKTtcclxuXHJcbiAgICByZXR1cm4gc3VwZXIucGxheShjdXJyZW50VGltZSwgb25GaW5pc2gsIG9uRXJyb3IsIG9uSW50ZXJydXB0KTtcclxuICB9XHJcblxyXG4gIHN0b3AoKSB7XHJcbiAgICB0aGlzLl9hdWRpby5zdG9wKCk7XHJcblxyXG4gICAgQWJzdHJhY3RTcGVlY2gucHJvdG90eXBlLnN0b3AuY2FsbCh0aGlzKTtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IFNwZWVjaDtcclxuIiwiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXHJcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxyXG5pbXBvcnQgU3BlZWNoIGZyb20gJ2FwcC9hd3NwYWNrL1NwZWVjaCc7XHJcbmltcG9ydCBEZWZlcnJlZCBmcm9tICdjb3JlL0RlZmVycmVkJztcclxuaW1wb3J0IEFic3RyYWN0VGV4dFRvU3BlZWNoRmVhdHVyZSBmcm9tICcuL0Fic3RyYWN0VGV4dFRvU3BlZWNoRmVhdHVyZSc7XHJcblxyXG4vKipcclxuICogQGV4dGVuZHMgQWJzdHJhY3RUZXh0VG9TcGVlY2hGZWF0dXJlXHJcbiAqIEBhbGlhcyBjb3JlL1RleHRUb1NwZWVjaEZlYXR1cmVcclxuICovXHJcbmNsYXNzIFRleHRUb1NwZWVjaEZlYXR1cmUgZXh0ZW5kcyBBYnN0cmFjdFRleHRUb1NwZWVjaEZlYXR1cmUge1xyXG4gIGNvbnN0cnVjdG9yKC4uLmFyZ3MpIHtcclxuICAgIHN1cGVyKC4uLmFyZ3MpO1xyXG5cclxuICAgIHRoaXMuX2VuYWJsZWQgPSBmYWxzZTtcclxuICAgIHRoaXMuX3NldEF1ZGlvQ29udGV4dCgpO1xyXG4gICAgdGhpcy5fb2JzZXJ2ZUF1ZGlvQ29udGV4dCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU3RvcmUgdGhlIGF1ZGlvIGNvbnRleHQgdGhhdCB3aWxsIGJlIHVzZWQgdG8gZW5zdXJlIGF1ZGlvIGNhbiBiZSBwbGF5ZWQuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIF9zZXRBdWRpb0NvbnRleHQoKSB7XHJcbiAgICB0aGlzLl9hdWRpb0NvbnRleHQgPSBuZXcgQXVkaW9Db250ZXh0KCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBMaXN0ZW4gZm9yIHN0YXRlIGNoYW5nZXMgb24gdGhlIGF1ZGlvIGNvbnRleHQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGZlYXR1cmVcclxuICAgKiBpcyBlbmFibGVkLlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBfb2JzZXJ2ZUF1ZGlvQ29udGV4dCgpIHtcclxuICAgIGlmICh0aGlzLl9hdWRpb0NvbnRleHQpIHtcclxuICAgICAgdGhpcy5fYXVkaW9Db250ZXh0Lm9uc3RhdGVjaGFuZ2UgPSAoKSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2F1ZGlvQ29udGV4dC5zdGF0ZSA9PT0gJ3J1bm5pbmcnKSB7XHJcbiAgICAgICAgICB0aGlzLl9lbmFibGVkID0gdHJ1ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5fZW5hYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgICAgICAnVGhlIGF1ZGlvIGNvbnRleHQgaXMgbm90IHJ1bm5pbmcuIFNwZWVjaCB3aWxsIG5vdCBiZSBhYmxlIHRvIGJlIHBsYXllZCB1bnRpbCBpdCBpcyByZXN1bWVkLiBVc2UgdGhlIFwiVGV4dFRvU3BlZWNoRmVhdHVyZS5yZXN1bWVBdWRpb1wiIG1ldGhvZCB0byB0cnkgdG8gcmVzdW1lIGl0IGFmdGVyIGEgdXNlciBnZXN0dXJlLidcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9O1xyXG5cclxuICAgICAgdGhpcy5fYXVkaW9Db250ZXh0Lm9uc3RhdGVjaGFuZ2UoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZSBhbiBBdWRpbyBvYmplY3Qgb2Ygc3BlZWNoIGF1ZGlvIGZvciB0aGUgZ2l2ZW4gc3BlZWNoIHRleHQuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IHBhcmFtcyAtIFBhcmFtZXRlcnMgb2JqZWN0IGNvbXBhdGlibGUgd2l0aCBQb2xseS5zeW50aGVzaXplU3BlZWNoLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge1Byb21pc2V9IFJlc29sdmVzIHdpdGggYW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGF1ZGlvIFVSTCBhbmQgQXVkaW9cclxuICAgKiBvYmplY3QuXHJcbiAgICovXHJcbiAgX3N5bnRoZXNpemVBdWRpbyhwYXJhbXMpIHtcclxuICAgIHJldHVybiBzdXBlci5fc3ludGhlc2l6ZUF1ZGlvKHBhcmFtcykudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICBjb25zdCB7dXJsfSA9IHJlc3VsdDtcclxuXHJcbiAgICAgIC8vIENyZWF0ZSBhbiBBdWRpbyBvYmplY3QgdGhhdCBwb2ludHMgdG8gdGhlIHByZXNpZ25lZCB1cmxcclxuICAgICAgY29uc3QgYXVkaW8gPSBuZXcgQXVkaW8odXJsKTtcclxuICAgICAgYXVkaW8ubG9vcCA9IHRoaXMubG9vcDtcclxuICAgICAgYXVkaW8uY3Jvc3NPcmlnaW4gPSAnYW5vbnltb3VzJztcclxuICAgICAgYXVkaW8ucHJlbG9hZCA9ICdhdXRvJztcclxuICAgICAgcmVzdWx0LmF1ZGlvID0gYXVkaW87XHJcblxyXG4gICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XHJcbiAgICAgICAgLy8gUmVzb2x2ZSBvbmNlIHRoZSBtaW5pbXVtIGFtb3VudCBpcyBsb2FkZWRcclxuICAgICAgICBhdWRpby5hZGRFdmVudExpc3RlbmVyKCdjYW5wbGF5dGhyb3VnaCcsICgpID0+IHtcclxuICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgLy8gU3RhcnQgbG9hZGluZyB0aGUgYXVkaW9cclxuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGF1ZGlvKTtcclxuICAgICAgICBhdWRpby5sb2FkKCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGUgYSBuZXcgU3BlZWNoIG9iamVjdCBmb3IgdGhlIHNwZWFrZXIuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtUZXh0VG9TcGVlY2h9IHNwZWFrZXIgLSBUaGUgVGV4dFRvU3BlZWNoIGluc3RhbmNlIHRoYXQgd2lsbCBvd24gdGhlIHNwZWVjaC5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIFRleHQgb2YgdGhlIHNwZWVjaC5cclxuICAgKiBAcGFyYW0ge09iamVjdH0gc3BlZWNobWFya3MgLSBTcGVlY2htYXJrcyBmb3IgdGhlIHNwZWVjaC5cclxuICAgKiBAcGFyYW0ge09iamVjdH0gYXVkaW9Db25maWcgLSBBdWRpbyBmb3IgdGhlIHNwZWVjaC5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtBYnN0cmFjdFNwZWVjaH1cclxuICAgKi9cclxuICBfY3JlYXRlU3BlZWNoKHRleHQsIHNwZWVjaG1hcmtzLCBhdWRpb0NvbmZpZykge1xyXG4gICAgcmV0dXJuIG5ldyBTcGVlY2godGhpcywgdGV4dCwgc3BlZWNobWFya3MsIGF1ZGlvQ29uZmlnKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgd2hldGhlciBvciBub3QgdGhlIGF1ZGlvIGNvbnRleHQgaXMgcnVubmluZyBhbmQgc3BlZWNoIGNhbiBiZSBwbGF5ZWQuXHJcbiAgICpcclxuICAgKiBAcmVhZG9ubHlcclxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgKi9cclxuICBnZXQgZW5hYmxlZCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9lbmFibGVkO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVHJ5IHRvIHJlc3VtZSB0aGUgYXVkaW8gY29udGV4dC4gVGhpcyB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgZXhlY3V0ZWQgZWFjaCB0aW1lXHJcbiAgICogc3BlZWNoIGlzIHBsYXllZCBvciByZXN1bWVkLiBJZiB1c2luZyBtYW51YWxseSwgaXQgc2hvdWxkIGJlIGNhbGxlZCBhZnRlciBhXHJcbiAgICogdXNlciBpbnRlcmFjdGlvbiBvY2N1cnMuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7RGVmZXJyZWR9IC0gUmVzb2x2ZXMgb25jZSB0aGUgYXVkaW8gY29udGV4dCBoYXMgcmVzdW1lZC5cclxuICAgKi9cclxuICByZXN1bWVBdWRpbygpIHtcclxuICAgIGNvbnN0IHByb21pc2UgPSBuZXcgRGVmZXJyZWQoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICB0aGlzLl9hdWRpb0NvbnRleHRcclxuICAgICAgICAucmVzdW1lKClcclxuICAgICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLl9lbmFibGVkID0gdHJ1ZTtcclxuICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5jYXRjaChlID0+IHtcclxuICAgICAgICAgIHRoaXMuX2VuYWJsZWQgPSBmYWxzZTtcclxuICAgICAgICAgIHJlamVjdChlKTtcclxuICAgICAgICB9KTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHByb21pc2U7XHJcbiAgfVxyXG5cclxuICBfc3RhcnRTcGVlY2godGV4dCwgY29uZmlnLCBwbGF5TWV0aG9kID0gJ3BsYXknKSB7XHJcbiAgICBjb25zdCBjdXJyZW50UHJvbWlzZSA9IHtcclxuICAgICAgcGxheTogbmV3IERlZmVycmVkKFxyXG4gICAgICAgIHVuZGVmaW5lZCxcclxuICAgICAgICAoKSA9PiB7IGN1cnJlbnRQcm9taXNlLnNwZWVjaC5jYW5jZWwoKTsgfSxcclxuICAgICAgICAoKSA9PiB7IGN1cnJlbnRQcm9taXNlLnNwZWVjaC5jYW5jZWwoKTsgfSxcclxuICAgICAgICAoKSA9PiB7IGN1cnJlbnRQcm9taXNlLnNwZWVjaC5jYW5jZWwoKTsgfVxyXG4gICAgICApLFxyXG4gICAgICBzcGVlY2g6IG5ldyBEZWZlcnJlZCgpLFxyXG4gICAgfTtcclxuICAgIHRoaXMuX2N1cnJlbnRQcm9taXNlID0gY3VycmVudFByb21pc2U7XHJcblxyXG4gICAgLy8gVHJ5IHRvIHN0YXJ0IHRoZSBhdWRpbyBjb250ZXh0XHJcbiAgICB0aGlzLnJlc3VtZUF1ZGlvKCkudGhlbigoKSA9PiB7XHJcbiAgICAgIC8vIEV4aXQgaWYgdGhlIHByb21pc2UgaXMgbm8gbG9uZ2VyIHBlbmRpbmcgYmVjYXVzZSBvZiB1c2VyIGludGVyYWN0aW9uXHJcbiAgICAgIGlmICghY3VycmVudFByb21pc2UucGxheS5wZW5kaW5nKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIENhbmNlbCBpZiBhbm90aGVyIGNhbGwgdG8gcGxheSBoYXMgYWxyZWFkeSBiZWVuIG1hZGVcclxuICAgICAgZWxzZSBpZiAodGhpcy5fY3VycmVudFByb21pc2UgIT09IGN1cnJlbnRQcm9taXNlKSB7XHJcbiAgICAgICAgY3VycmVudFByb21pc2UucGxheS5jYW5jZWwoKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIFRoZSBhdWRpbyBjb250ZXh0IGlzIHJ1bm5pbmcgc28gdGhlIHNwZWVjaCBjYW4gYmUgcGxheWVkXHJcbiAgICAgIGlmICh0aGlzLl9lbmFibGVkKSB7XHJcbiAgICAgICAgc3VwZXIuX3N0YXJ0U3BlZWNoKHRleHQsIGNvbmZpZywgcGxheU1ldGhvZCk7XHJcbiAgICAgIH1cclxuICAgICAgLy8gUmVqZWN0IGlmIHRoZSBhdWRpbyBjb250ZXh0IGlzIG5vdCBydW5uaW5nXHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGN1cnJlbnRQcm9taXNlLnJlamVjdChcclxuICAgICAgICAgIG5ldyBFcnJvcihcclxuICAgICAgICAgICAgYENhbm5vdCAke3BsYXlNZXRob2R9IHNwZWVjaCBvbiBob3N0ICR7dGhpcy5faG9zdC5pZH0uIFRoZSBhdWRpbyBjb250ZXh0IGlzIG5vdCBydW5uaW5nLiBVc2UgdGhlIFwiVGV4dFRvU3BlZWNoRmVhdHVyZS5yZXN1bWVBdWRpb1wiIG1ldGhvZCB0byB0cnkgdG8gcmVzdW1lIGl0IGFmdGVyIGEgdXNlciBnZXN0dXJlLmBcclxuICAgICAgICAgIClcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gY3VycmVudFByb21pc2UucGxheTtcclxuICB9XHJcblxyXG4gIHBsYXkodGV4dCwgY29uZmlnKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fc3RhcnRTcGVlY2godGV4dCwgY29uZmlnLCAncGxheScpO1xyXG4gIH1cclxuXHJcbiAgcmVzdW1lKHRleHQsIGNvbmZpZykge1xyXG4gICAgcmV0dXJuIHRoaXMuX3N0YXJ0U3BlZWNoKHRleHQsIGNvbmZpZywgJ3Jlc3VtZScpO1xyXG4gIH1cclxuXHJcbiAgaW5zdGFsbEFwaSgpIHtcclxuICAgIGNvbnN0IGFwaSA9IHN1cGVyLmluc3RhbGxBcGkoKTtcclxuXHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhhcGksIHtcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBtZW1iZXJvZiBUZXh0VG9TcGVlY2hGZWF0dXJlXHJcbiAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgKiBAc2VlIGNvcmUvVGV4dFRvU3BlZWNoRmVhdHVyZSNlbmFibGVkXHJcbiAgICAgICAqL1xyXG4gICAgICBlbmFibGVkOiB7XHJcbiAgICAgICAgZ2V0OiAoKSA9PiB0aGlzLl9lbmFibGVkLFxyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIGFwaTtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IFRleHRUb1NwZWVjaEZlYXR1cmU7XHJcbiIsIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxyXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTBcclxuaW1wb3J0IEFic3RyYWN0VGV4dFRvU3BlZWNoRmVhdHVyZSBmcm9tICdjb3JlL2F3c3BhY2svQWJzdHJhY3RUZXh0VG9TcGVlY2hGZWF0dXJlJztcclxuaW1wb3J0IENvcmVUZXh0VG9TcGVlY2hGZWF0dXJlIGZyb20gJ2NvcmUvYXdzcGFjay9UZXh0VG9TcGVlY2hGZWF0dXJlJztcclxuXHJcbi8qKlxyXG4gKiBCYWJ5bG9uanMgU2NlbmUgb2JqZWN0XHJcbiAqIEBleHRlcm5hbCBcIkJBQllMT04uU2NlbmVcIlxyXG4gKiBAc2VlIGh0dHBzOi8vZG9jLmJhYnlsb25qcy5jb20vYXBpL2NsYXNzZXMvYmFieWxvbi5zY2VuZVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBCYWJ5bG9uanMgTWVzaCBvYmplY3RcclxuICogQGV4dGVybmFsIFwiQkFCWUxPTi5NZXNoXCJcclxuICogQHNlZSBodHRwczovL2RvYy5iYWJ5bG9uanMuY29tL2FwaS9jbGFzc2VzL2JhYnlsb24ubWVzaFxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBAZXh0ZW5kcyBjb3JlL1RleHRUb1NwZWVjaEZlYXR1cmVcclxuICogQGFsaWFzIEJhYnlsb24uanMvVGV4dFRvU3BlZWNoRmVhdHVyZVxyXG4gKi9cclxuY2xhc3MgVGV4dFRvU3BlZWNoRmVhdHVyZSBleHRlbmRzIENvcmVUZXh0VG9TcGVlY2hGZWF0dXJlIHtcclxuICAvKipcclxuICAgKiBAY29uc3RydWN0b3JcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7QmFieWxvbi5qcy9Ib3N0T2JqZWN0fSBob3N0IC0gSG9zdCBvYmplY3QgbWFuYWdpbmcgdGhlIGZlYXR1cmUuXHJcbiAgICogQHBhcmFtIHtPYmplY3Q9fSBvcHRpb25zIC0gT3B0aW9ucyB0aGF0IHdpbGwgYmUgc2VudCB0byBQb2xseSBmb3IgZWFjaCBzcGVlY2guXHJcbiAgICogQHBhcmFtIHtleHRlcm5hbDpcIkJBQllMT04uU2NlbmVcIn0gb3B0aW9ucy5zY2VuZSAtIEJhYnlsb24gc2NlbmUgY29udGFpbmluZyB0aGUgaG9zdCBvd25lci5cclxuICAgKiBAcGFyYW0ge2V4dGVybmFsOlwiQkFCWUxPTi5NZXNoXCI9fSBvcHRpb25zLmF0dGFjaFRvIC0gT3B0aW9uYWwgbWVzaCB0byBhdHRhY2ggdGhlIHNwZWVjaFxyXG4gICAqIGF1ZGlvIHRvLlxyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgaG9zdCxcclxuICAgIG9wdGlvbnMgPSB7XHJcbiAgICAgIHZvaWNlOiB1bmRlZmluZWQsXHJcbiAgICAgIGVuZ2luZTogdW5kZWZpbmVkLFxyXG4gICAgICBsYW5ndWFnZTogdW5kZWZpbmVkLFxyXG4gICAgICBhdWRpb0Zvcm1hdDogJ21wMycsXHJcbiAgICAgIHNhbXBsZVJhdGU6IHVuZGVmaW5lZCxcclxuICAgICAgc2NlbmU6IHVuZGVmaW5lZCxcclxuICAgICAgYXR0YWNoVG86IHVuZGVmaW5lZCxcclxuICAgIH1cclxuICApIHtcclxuICAgIHN1cGVyKGhvc3QsIG9wdGlvbnMpO1xyXG4gICAgdGhpcy5fc2NlbmUgPSBvcHRpb25zLnNjZW5lO1xyXG4gICAgdGhpcy5fYXR0YWNoVG8gPSBvcHRpb25zLmF0dGFjaFRvIHx8IGhvc3Qub3duZXI7XHJcbiAgfVxyXG5cclxuICBfc2V0QXVkaW9Db250ZXh0KCkge1xyXG4gICAgdGhpcy5fYXVkaW9Db250ZXh0ID0gQkFCWUxPTi5FbmdpbmUuYXVkaW9FbmdpbmUuYXVkaW9Db250ZXh0O1xyXG4gIH1cclxuXHJcbiAgX29ic2VydmVBdWRpb0NvbnRleHQoKSB7XHJcbiAgICBpZiAodGhpcy5fYXVkaW9Db250ZXh0KSB7XHJcbiAgICAgIHN1cGVyLl9vYnNlcnZlQXVkaW9Db250ZXh0KCk7XHJcbiAgICAgIGNvbnN0IHtvbnN0YXRlY2hhbmdlfSA9IHRoaXMuX2F1ZGlvQ29udGV4dDtcclxuICAgICAgdGhpcy5fYXVkaW9Db250ZXh0Lm9uc3RhdGVjaGFuZ2UgPSAoKSA9PiB7XHJcbiAgICAgICAgb25zdGF0ZWNoYW5nZSgpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5fZW5hYmxlZCkge1xyXG4gICAgICAgICAgQkFCWUxPTi5FbmdpbmUuYXVkaW9FbmdpbmUudW5sb2NrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgX3N5bnRoZXNpemVBdWRpbyhwYXJhbXMpIHtcclxuICAgIC8vIEJhYnlsb24gYXVkaW8gd2lsbCBjcmVhdGUgdGhlIHdlYiBBdWRpbyBvYmplY3QsIHNvIHdlIGRvbid0IG5lZWQgY29yZUF3cy5UZXh0VG9TcGVlY2hGZWF0dXJlXHJcbiAgICAvLyB0byBjcmVhdGUgaXQuIFVzZSBBYnN0cmFjdFRleHRUb1NwZWVjaEZlYXR1cmUucHJvdG90eXBlLl9zeW50aGVzaXplQXVkaW8gaW5zdGVhZC5cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlcnNjb3JlLWRhbmdsZVxyXG4gICAgcmV0dXJuIEFic3RyYWN0VGV4dFRvU3BlZWNoRmVhdHVyZS5wcm90b3R5cGUuX3N5bnRoZXNpemVBdWRpb1xyXG4gICAgICAuY2FsbCh0aGlzLCBwYXJhbXMpXHJcbiAgICAgIC50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xyXG4gICAgICAgICAgY29uc3Qge3VybH0gPSByZXN1bHQ7XHJcbiAgICAgICAgICBjb25zdCBuYW1lID0gcGFyYW1zLlRleHQ7XHJcbiAgICAgICAgICByZXN1bHQuYXVkaW8gPSBuZXcgQkFCWUxPTi5Tb3VuZChcclxuICAgICAgICAgICAgbmFtZSxcclxuICAgICAgICAgICAgdXJsLFxyXG4gICAgICAgICAgICB0aGlzLl9zY2VuZSxcclxuICAgICAgICAgICAgKCkgPT4ge1xyXG4gICAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge3N0cmVhbWluZzogdHJ1ZSwgc2tpcENvZGVjQ2hlY2s6IHRydWV9XHJcbiAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgIGlmICh0aGlzLl9hdHRhY2hUbyAhPT0gdW5kZWZpbmVkICYmICF0aGlzLl9pc0dsb2JhbCkge1xyXG4gICAgICAgICAgICByZXN1bHQuYXVkaW8uYXR0YWNoVG9NZXNoKHRoaXMuX2F0dGFjaFRvKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBUZXh0VG9TcGVlY2hGZWF0dXJlO1xyXG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cclxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVC0wXHJcbmltcG9ydCBUZXh0VG9TcGVlY2hVdGlscyBmcm9tICdjb3JlL2F3c3BhY2svVGV4dFRvU3BlZWNoVXRpbHMnO1xyXG5pbXBvcnQgVGV4dFRvU3BlZWNoRmVhdHVyZSBmcm9tICcuL1RleHRUb1NwZWVjaEZlYXR1cmUnO1xyXG5pbXBvcnQgU3BlZWNoIGZyb20gJy4vU3BlZWNoJztcclxuXHJcbi8qKlxyXG4gKiBAbW9kdWxlIGJhYnlsb24vYXdzcGFja1xyXG4gKi9cclxuXHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICAvKipcclxuICAgKiBAc2VlIEJhYnlsb24uanMvVGV4dFRvU3BlZWNoRmVhdHVyZVxyXG4gICAqL1xyXG4gIFRleHRUb1NwZWVjaEZlYXR1cmUsXHJcbiAgLyoqXHJcbiAgICogQHNlZSBjb3JlL1RleHRUb1NwZWVjaFV0aWxzXHJcbiAgICovXHJcbiAgVGV4dFRvU3BlZWNoVXRpbHMsXHJcbiAgLyoqXHJcbiAgICogQHNlZSBCYWJ5bG9uLmpzL1NwZWVjaFxyXG4gICAqL1xyXG4gIFNwZWVjaCxcclxufTtcclxuIiwiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXHJcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxyXG5pbXBvcnQgQ29yZVNpbmdsZVN0YXRlIGZyb20gJ2NvcmUvYW5pbXBhY2svc3RhdGUvU2luZ2xlU3RhdGUnO1xyXG5pbXBvcnQgTWF0aFV0aWxzIGZyb20gJ2NvcmUvTWF0aFV0aWxzJztcclxuXHJcbi8qKlxyXG4gKiBCYWJ5bG9uanMgQW5pbWF0aW9uR3JvdXAgb2JqZWN0XHJcbiAqIEBleHRlcm5hbCBcIkJBQllMT04uQW5pbWF0aW9uR3JvdXBcIlxyXG4gKiBAc2VlIGh0dHBzOi8vZG9jLmJhYnlsb25qcy5jb20vYXBpL2NsYXNzZXMvYmFieWxvbi5hbmltYXRpb25ncm91cFxyXG4gKi9cclxuXHJcbmNvbnN0IGJhYnlsb25CbGVuZE1vZGVzID0ge1xyXG4gIE92ZXJyaWRlOiBmYWxzZSxcclxuICBBZGRpdGl2ZTogdHJ1ZSxcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAZXh0ZW5kcyBjb3JlL1NpbmdsZVN0YXRlXHJcbiAqIEBhbGlhcyBCYWJ5bG9uLmpzL1NpbmdsZVN0YXRlXHJcbiAqL1xyXG5jbGFzcyBTaW5nbGVTdGF0ZSBleHRlbmRzIENvcmVTaW5nbGVTdGF0ZSB7XHJcbiAgLyoqXHJcbiAgICogQGNvbnN0cnVjdG9yXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge09iamVjdD19IG9wdGlvbnMgLSBPcHRpb25zIGZvciB0aGUgYW5pbWF0aW9uIHN0YXRlLlxyXG4gICAqIEBwYXJhbSB7ZXh0ZXJuYWw6XCJCQUJZTE9OLkFuaW1hdGlvbkdyb3VwXCJ9IGJhYnlsb25Hcm91cCAtIFRoZSBhbmltYXRpb24gZ3JvdXAgdGhhdCBjb250cm9sc1xyXG4gICAqIHBsYXliYWNrIG9mIHRoZSBhbmltYXRpb24uXHJcbiAgICogQHBhcmFtIHtleHRlcm5hbDpcIkJBQllMT04uU2NlbmVcIn0gYmFieWxvblNjZW5lIC0gVGhlIHNjZW5lIGNvbnRhaW5pbmcgdGhlIGJhYnlsb25Hcm91cC5cclxuICAgKiovXHJcbiAgY29uc3RydWN0b3Iob3B0aW9ucyA9IHt9LCBiYWJ5bG9uR3JvdXAsIGJhYnlsb25TY2VuZSkge1xyXG4gICAgc3VwZXIob3B0aW9ucyk7XHJcbiAgICB0aGlzLl9vbkZpbmlzaGVkRXZlbnQgPSB0aGlzLl9vbkZpbmlzaGVkRXZlbnQuYmluZCh0aGlzKTtcclxuICAgIHRoaXMuX29uTG9vcEV2ZW50ID0gdGhpcy5fb25Mb29wRXZlbnQuYmluZCh0aGlzKTtcclxuXHJcbiAgICB0aGlzLl9mcm9tID0gTnVtYmVyLmlzTmFOKE51bWJlcihvcHRpb25zLmZyb20pKVxyXG4gICAgICA/IGJhYnlsb25Hcm91cC5mcm9tXHJcbiAgICAgIDogTnVtYmVyKG9wdGlvbnMuZnJvbSk7XHJcbiAgICB0aGlzLl90byA9IE51bWJlci5pc05hTihOdW1iZXIob3B0aW9ucy50bykpXHJcbiAgICAgID8gYmFieWxvbkdyb3VwLnRvXHJcbiAgICAgIDogTnVtYmVyKG9wdGlvbnMudG8pO1xyXG4gICAgYmFieWxvbkdyb3VwLm5vcm1hbGl6ZSh0aGlzLl9mcm9tLCB0aGlzLl90byk7XHJcbiAgICB0aGlzLl9iYWJ5bG9uU2NlbmUgPSBiYWJ5bG9uU2NlbmU7XHJcbiAgICB0aGlzLl9iYWJ5bG9uQW5pbWF0aW9ucyA9IFsuLi5iYWJ5bG9uR3JvdXAudGFyZ2V0ZWRBbmltYXRpb25zXTtcclxuICAgIHRoaXMuX2JhYnlsb25BbmltYXRhYmxlcyA9IFtdO1xyXG4gICAgdGhpcy5fYmFieWxvbk51bUFuaW1hdGlvbnMgPSB0aGlzLl9iYWJ5bG9uQW5pbWF0aW9ucy5sZW5ndGg7XHJcbiAgICB0aGlzLl9iYWJ5bG9uTG9vcENvdW50ID0gdGhpcy5fbG9vcENvdW50ICogdGhpcy5fYmFieWxvbk51bUFuaW1hdGlvbnM7XHJcbiAgICB0aGlzLl9sb29wZWQgPSAwO1xyXG4gICAgdGhpcy5fZmluaXNoZWQgPSAwO1xyXG4gICAgdGhpcy5fc3RhcnRlZCA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgZ2V0IG5vcm1hbGl6ZWRUaW1lKCkge1xyXG4gICAgY29uc3QgYW5pbWF0YWJsZSA9IHRoaXMuX2JhYnlsb25BbmltYXRhYmxlc1swXTtcclxuICAgIGlmIChhbmltYXRhYmxlICYmIGFuaW1hdGFibGUubWFzdGVyRnJhbWUpIHtcclxuICAgICAgcmV0dXJuIChhbmltYXRhYmxlLm1hc3RlckZyYW1lIC0gdGhpcy5fZnJvbSkvKHRoaXMuX3RvIC0gdGhpcy5fZnJvbSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gMDtcclxuICB9XHJcblxyXG4gIHNldCBub3JtYWxpemVkVGltZSh0aW1lKSB7XHJcbiAgICB0aW1lID0gTWF0aFV0aWxzLmNsYW1wKHRpbWUpO1xyXG4gICAgdGhpcy5fYmFieWxvbkFuaW1hdGFibGVzLmZvckVhY2goKGFuaW1hdGFibGUpID0+IHtcclxuICAgICAgY29uc3QgdGFyZ2V0RnJhbWUgPSAodGhpcy5fdG8gLSB0aGlzLl9mcm9tKSAqIHRpbWUgKyB0aGlzLl9mcm9tO1xyXG4gICAgICBhbmltYXRhYmxlLmdvVG9GcmFtZSh0YXJnZXRGcmFtZSlcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHRpbWVTY2FsZSgpIHtcclxuICAgIHJldHVybiBzdXBlci50aW1lU2NhbGU7XHJcbiAgfVxyXG5cclxuICBzZXQgdGltZVNjYWxlKHRpbWVTY2FsZSkge1xyXG4gICAgc3VwZXIudGltZVNjYWxlID0gdGltZVNjYWxlO1xyXG5cclxuICAgIHRoaXMuX2JhYnlsb25BbmltYXRhYmxlcy5mb3JFYWNoKGFuaW1hdGFibGUgPT4ge1xyXG4gICAgICBhbmltYXRhYmxlLnNwZWVkUmF0aW8gPSB0aW1lU2NhbGU7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldCBsb29wQ291bnQoKSB7XHJcbiAgICByZXR1cm4gc3VwZXIubG9vcENvdW50O1xyXG4gIH1cclxuXHJcbiAgc2V0IGxvb3BDb3VudChsb29wQ291bnQpIHtcclxuICAgIHN1cGVyLmxvb3BDb3VudCA9IGxvb3BDb3VudDtcclxuXHJcbiAgICB0aGlzLl9iYWJ5bG9uQW5pbWF0YWJsZXMuZm9yRWFjaChhbmltYXRhYmxlID0+IHtcclxuICAgICAgYW5pbWF0YWJsZS5sb29wQW5pbWF0aW9uID0gbG9vcENvdW50ID4gMTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU3RvcCBhbmQgZGlzY2FyZCBvZiBjdXJyZW50bHkgc3RvcmVkIGFuaW1hdGFibGVzIGFuZCBnZW5lcmF0ZSBuZXcgb25lcyB0aGF0XHJcbiAgICogYXJlIHBhdXNlZC5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICovXHJcbiAgX2NyZWF0ZUFuaW1hdGFibGVzKCkge1xyXG4gICAgLy8gQ3JlYXRlIG5ldyBhbmltYXRhYmxlc1xyXG4gICAgY29uc3Qgb2xkQW5pbWF0YWJsZXMgPSBbLi4udGhpcy5fYmFieWxvbkFuaW1hdGFibGVzXTtcclxuICAgIHRoaXMuX2JhYnlsb25BbmltYXRhYmxlcy5sZW5ndGggPSAwO1xyXG4gICAgdGhpcy5fYmFieWxvbkFuaW1hdGlvbnMuZm9yRWFjaCh0YXJnZXRlZEFuaW1hdGlvbiA9PiB7XHJcbiAgICAgIGNvbnN0IGFuaW1hdGFibGUgPSB0aGlzLl9iYWJ5bG9uU2NlbmUuYmVnaW5EaXJlY3RBbmltYXRpb24oXHJcbiAgICAgICAgdGFyZ2V0ZWRBbmltYXRpb24udGFyZ2V0LFxyXG4gICAgICAgIFt0YXJnZXRlZEFuaW1hdGlvbi5hbmltYXRpb25dLFxyXG4gICAgICAgIHRoaXMuX2Zyb20sXHJcbiAgICAgICAgdGhpcy5fdG8sXHJcbiAgICAgICAgdGhpcy5fbG9vcENvdW50ID4gMSxcclxuICAgICAgICAwLFxyXG4gICAgICAgIHRoaXMuX29uRmluaXNoZWRFdmVudCxcclxuICAgICAgICB0aGlzLl9vbkxvb3BFdmVudCxcclxuICAgICAgICBiYWJ5bG9uQmxlbmRNb2Rlc1t0aGlzLl9ibGVuZE1vZGVdXHJcbiAgICAgICk7XHJcbiAgICAgIGFuaW1hdGFibGUud2VpZ2h0ID0gdGhpcy5faW50ZXJuYWxXZWlnaHQ7XHJcbiAgICAgIGFuaW1hdGFibGUuZGlzcG9zZU9uRW5kID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuX2JhYnlsb25BbmltYXRhYmxlcy5wdXNoKGFuaW1hdGFibGUpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gRGlzcG9zZSBvZiB0aGUgb2xkIGFuaW1hdGFibGVzXHJcbiAgICBvbGRBbmltYXRhYmxlcy5mb3JFYWNoKGFuaW1hdGFibGUgPT4ge1xyXG4gICAgICBhbmltYXRhYmxlLnN0b3AoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVzZXQgdmFyaWFibGVzIGFuZCBhbmltYXRpb25zLiBTaG91bGQgYmUgY2FsbGVkIGJlZm9yZSBwbGF5aW5nIGZyb20gdGhlXHJcbiAgICogYmVnaW5uaW5nIGFuZCBpZiBjYWxsaW5nIHN0b3AuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIF9yZXNldCgpIHtcclxuICAgIHRoaXMuX2xvb3BlZCA9IDA7XHJcbiAgICB0aGlzLl9maW5pc2hlZCA9IDA7XHJcbiAgICB0aGlzLl9zdGFydGVkID0gdHJ1ZTtcclxuICAgIHRoaXMuX2NyZWF0ZUFuaW1hdGFibGVzKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQYXVzZSB0aGUgYW5pbWF0aW9uIGFuZCByZXNldCBjb3VudGVycyBvbmNlIHRoZSBhbmltYXRpb24gZmluaXNoZXMuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIF9vbkZpbmlzaGVkRXZlbnQoKSB7XHJcbiAgICB0aGlzLl9maW5pc2hlZCArPSAxO1xyXG5cclxuICAgIGlmICh0aGlzLl9maW5pc2hlZCA9PT0gdGhpcy5fYmFieWxvbk51bUFuaW1hdGlvbnMpIHtcclxuICAgICAgdGhpcy5fbG9vcGVkID0gMDtcclxuICAgICAgdGhpcy5fZmluaXNoZWQgPSAwO1xyXG5cclxuICAgICAgLy8gUGF1c2UgdGhlIGFuaW1hdGlvbnNcclxuICAgICAgdGhpcy5fYmFieWxvbkFuaW1hdGFibGVzLmZvckVhY2goYW5pbWF0YWJsZSA9PiB7XHJcbiAgICAgICAgYW5pbWF0YWJsZS5zcGVlZFJhdGlvID0gMDtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICB0aGlzLl9wcm9taXNlcy5wbGF5LnJlc29sdmUoKTtcclxuXHJcbiAgICAgIC8vIFN0b3AgZXZhbHVhdGluZyBpbnRlcnBvbGF0b3JzIGlmIHRoZXkgaGF2ZSBhbHJlYWR5IGNvbXBsZXRlZFxyXG4gICAgICBpZiAoIXRoaXMud2VpZ2h0UGVuZGluZyAmJiAhdGhpcy50aW1lU2NhbGVQZW5kaW5nKSB7XHJcbiAgICAgICAgdGhpcy5fcGF1c2VkID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSW5jcmVtZW50IGxvb3AgY291bnRlciBmb3IgZWFjaCBhbmltYXRpb24gbG9vcC4gSWYgbG9vcCBjb3VudGVyIG1lZXRzXHJcbiAgICogbG9vcENvdW50LCBub3RpZml5IHRoYXQgdGhlIGFuaW1hdGlvbiBoYXMgZmluaXNoZWQuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIF9vbkxvb3BFdmVudCgpIHtcclxuICAgIHRoaXMuX2xvb3BlZCArPSAxO1xyXG5cclxuICAgIC8vIFNpZ25hbCB0aGUgc3RhdGUgaGFzIGZpbmlzaGVkXHJcbiAgICBpZiAodGhpcy5fbG9vcGVkID09PSB0aGlzLl9iYWJ5bG9uTG9vcENvdW50KSB7XHJcbiAgICAgIHRoaXMuX2ZpbmlzaGVkID0gdGhpcy5fYmFieWxvbk51bUFuaW1hdGlvbnMgLSAxO1xyXG4gICAgICB0aGlzLl9vbkZpbmlzaGVkRXZlbnQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHVwZGF0ZUludGVybmFsV2VpZ2h0KGZhY3Rvcikge1xyXG4gICAgc3VwZXIudXBkYXRlSW50ZXJuYWxXZWlnaHQoZmFjdG9yKTtcclxuXHJcbiAgICB0aGlzLl9iYWJ5bG9uQW5pbWF0YWJsZXMuZm9yRWFjaChhbmltYXRhYmxlID0+IHtcclxuICAgICAgYW5pbWF0YWJsZS53ZWlnaHQgPSB0aGlzLl9pbnRlcm5hbFdlaWdodDtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcGxheShvbkZpbmlzaCwgb25FcnJvciwgb25DYW5jZWwpIHtcclxuICAgIHRoaXMuX3Jlc2V0KCk7XHJcbiAgICB0aGlzLnRpbWVTY2FsZSA9IHRoaXMuX3RpbWVTY2FsZTtcclxuXHJcbiAgICByZXR1cm4gc3VwZXIucGxheShvbkZpbmlzaCwgb25FcnJvciwgb25DYW5jZWwpO1xyXG4gIH1cclxuXHJcbiAgcGF1c2UoKSB7XHJcbiAgICB0aGlzLl9iYWJ5bG9uQW5pbWF0YWJsZXMuZm9yRWFjaChhbmltYXRhYmxlID0+IHtcclxuICAgICAgYW5pbWF0YWJsZS5zcGVlZFJhdGlvID0gMDtcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBzdXBlci5wYXVzZSgpO1xyXG4gIH1cclxuXHJcbiAgcmVzdW1lKG9uRmluaXNoLCBvbkVycm9yLCBvbkNhbmNlbCkge1xyXG4gICAgaWYgKCF0aGlzLl9zdGFydGVkKSB7XHJcbiAgICAgIHRoaXMuX3Jlc2V0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy50aW1lU2NhbGUgPSB0aGlzLl90aW1lU2NhbGU7XHJcblxyXG4gICAgcmV0dXJuIHN1cGVyLnJlc3VtZShvbkZpbmlzaCwgb25FcnJvciwgb25DYW5jZWwpO1xyXG4gIH1cclxuXHJcbiAgY2FuY2VsKCkge1xyXG4gICAgdGhpcy5fYmFieWxvbkFuaW1hdGFibGVzLmZvckVhY2goYW5pbWF0YWJsZSA9PiB7XHJcbiAgICAgIGFuaW1hdGFibGUuc3BlZWRSYXRpbyA9IDA7XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gc3VwZXIuY2FuY2VsKCk7XHJcbiAgfVxyXG5cclxuICBzdG9wKCkge1xyXG4gICAgdGhpcy5fcmVzZXQoKTtcclxuXHJcbiAgICByZXR1cm4gc3VwZXIuc3RvcCgpO1xyXG4gIH1cclxuXHJcbiAgZGlzY2FyZCgpIHtcclxuICAgIHN1cGVyLmRpc2NhcmQoKTtcclxuXHJcbiAgICAvLyBEaXNwb3NlIG9mIHRoZSBiYWJ5bG9uIHJlc291cmNlc1xyXG4gICAgdGhpcy5fYmFieWxvbkFuaW1hdGFibGVzLmZvckVhY2goYW5pbWF0YWJsZSA9PiB7XHJcbiAgICAgIGFuaW1hdGFibGUuc3RvcCgpO1xyXG4gICAgfSk7XHJcbiAgICBkZWxldGUgdGhpcy5fYmFieWxvbkFuaW1hdGlvbnM7XHJcbiAgICBkZWxldGUgdGhpcy5fYmFieWxvbkFuaW1hdGFibGVzO1xyXG4gICAgZGVsZXRlIHRoaXMuX2JhYnlsb25TY2VuZTtcclxuICB9XHJcblxyXG4gIGRlYWN0aXZhdGUoKSB7XHJcbiAgICBzdXBlci5kZWFjdGl2YXRlKCk7XHJcblxyXG4gICAgdGhpcy5fY3JlYXRlQW5pbWF0YWJsZXMoKTtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IFNpbmdsZVN0YXRlO1xyXG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cclxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVC0wXHJcbmltcG9ydCBDb3JlQW5pbWF0aW9uRmVhdHVyZSwge1xyXG4gIEFuaW1hdGlvblR5cGVzLFxyXG59IGZyb20gJ2NvcmUvYW5pbXBhY2svQW5pbWF0aW9uRmVhdHVyZSc7XHJcbmltcG9ydCBTaW5nbGVTdGF0ZSBmcm9tICcuL3N0YXRlL1NpbmdsZVN0YXRlJztcclxuXHJcbkFuaW1hdGlvblR5cGVzLnNpbmdsZSA9IFNpbmdsZVN0YXRlO1xyXG5leHBvcnQge0FuaW1hdGlvblR5cGVzfTtcclxuXHJcbi8qKlxyXG4gKiBAZXh0ZW5kcyBjb3JlL0FuaW1hdGlvbkZlYXR1cmVcclxuICogQGFsaWFzIEJhYnlsb24uanMvQW5pbWF0aW9uRmVhdHVyZVxyXG4gKi9cclxuY2xhc3MgQW5pbWF0aW9uRmVhdHVyZSBleHRlbmRzIENvcmVBbmltYXRpb25GZWF0dXJlIHtcclxuICAvKipcclxuICAgKiBAY29uc3RydWN0b3JcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7QmFieWxvbi5qcy9Ib3N0T2JqZWN0fSBob3N0IC0gSG9zdCBvYmplY3QgdGhhdCBvd25zIHRoZSBmZWF0dXJlLlxyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKGhvc3QpIHtcclxuICAgIHN1cGVyKGhvc3QpO1xyXG5cclxuICAgIHRoaXMuX2JhYnlsb25TY2VuZSA9IGhvc3Qub3duZXIuZ2V0U2NlbmUoKTtcclxuICB9XHJcblxyXG4gIF9jcmVhdGVTaW5nbGVTdGF0ZShvcHRpb25zKSB7XHJcbiAgICByZXR1cm4gbmV3IFNpbmdsZVN0YXRlKG9wdGlvbnMsIG9wdGlvbnMuY2xpcCwgdGhpcy5fYmFieWxvblNjZW5lKTtcclxuICB9XHJcblxyXG4gIGRpc2NhcmQoKSB7XHJcbiAgICBkZWxldGUgdGhpcy5fYmFieWxvblNjZW5lO1xyXG5cclxuICAgIHN1cGVyLmRpc2NhcmQoKTtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IEFuaW1hdGlvbkZlYXR1cmU7XHJcbiIsIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxyXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTBcclxuXHJcbi8qKlxyXG4gKiBAbW9kdWxlIGJhYnlsb24vYW5pbXBhY2tcclxuICovXHJcblxyXG5pbXBvcnQge1xyXG4gIExpbmVhcixcclxuICBRdWFkcmF0aWMsXHJcbiAgQ3ViaWMsXHJcbiAgUXVhcnRpYyxcclxuICBRdWludGljLFxyXG4gIFNpbnVzb2lkYWwsXHJcbiAgRXhwb25lbnRpYWwsXHJcbiAgQ2lyY3VsYXIsXHJcbiAgRWxhc3RpYyxcclxuICBCYWNrLFxyXG4gIEJvdW5jZSxcclxufSBmcm9tICdjb3JlL2FuaW1wYWNrL0Vhc2luZyc7XHJcbmltcG9ydCBBbmltYXRpb25VdGlscyBmcm9tICdjb3JlL2FuaW1wYWNrL0FuaW1hdGlvblV0aWxzJztcclxuaW1wb3J0IFRyYW5zaXRpb25TdGF0ZSBmcm9tICdjb3JlL2FuaW1wYWNrL3N0YXRlL1RyYW5zaXRpb25TdGF0ZSc7XHJcbmltcG9ydCBGcmVlQmxlbmRTdGF0ZSBmcm9tICdjb3JlL2FuaW1wYWNrL3N0YXRlL0ZyZWVCbGVuZFN0YXRlJztcclxuaW1wb3J0IFF1ZXVlU3RhdGUgZnJvbSAnY29yZS9hbmltcGFjay9zdGF0ZS9RdWV1ZVN0YXRlJztcclxuaW1wb3J0IFJhbmRvbUFuaW1hdGlvblN0YXRlIGZyb20gJ2NvcmUvYW5pbXBhY2svc3RhdGUvUmFuZG9tQW5pbWF0aW9uU3RhdGUnO1xyXG5pbXBvcnQgQmxlbmQxZFN0YXRlIGZyb20gJ2NvcmUvYW5pbXBhY2svc3RhdGUvQmxlbmQxZFN0YXRlJztcclxuaW1wb3J0IEJsZW5kMmRTdGF0ZSBmcm9tICdjb3JlL2FuaW1wYWNrL3N0YXRlL0JsZW5kMmRTdGF0ZSc7XHJcbmltcG9ydCBBbmltYXRpb25MYXllciwge1xyXG4gIExheWVyQmxlbmRNb2RlcyxcclxuICBEZWZhdWx0TGF5ZXJCbGVuZE1vZGUsXHJcbn0gZnJvbSAnY29yZS9hbmltcGFjay9BbmltYXRpb25MYXllcic7XHJcbmltcG9ydCBBbmltYXRpb25GZWF0dXJlLCB7QW5pbWF0aW9uVHlwZXN9IGZyb20gJy4vQW5pbWF0aW9uRmVhdHVyZSc7XHJcbmltcG9ydCBTaW5nbGVTdGF0ZSBmcm9tICcuL3N0YXRlL1NpbmdsZVN0YXRlJztcclxuXHJcbi8qKlxyXG4gKiBAbmFtZXNwYWNlXHJcbiAqL1xyXG5jb25zdCBFYXNpbmcgPSB7XHJcbiAgLyoqXHJcbiAgICogQHNlZSBMaW5lYXJcclxuICAgKi9cclxuICBMaW5lYXIsXHJcbiAgLyoqXHJcbiAgICogQHNlZSBRdWFkcmF0aWNcclxuICAgKi9cclxuICBRdWFkcmF0aWMsXHJcbiAgLyoqXHJcbiAgICogQHNlZSBDdWJpY1xyXG4gICAqL1xyXG4gIEN1YmljLFxyXG4gIC8qKlxyXG4gICAqIEBzZWUgUXVhcnRpY1xyXG4gICAqL1xyXG4gIFF1YXJ0aWMsXHJcbiAgLyoqXHJcbiAgICogQHNlZSBRdWludGljXHJcbiAgICovXHJcbiAgUXVpbnRpYyxcclxuICAvKipcclxuICAgKiBAc2VlIFNpbnVzb2lkYWxcclxuICAgKi9cclxuICBTaW51c29pZGFsLFxyXG4gIC8qKlxyXG4gICAqIEBzZWUgRXhwb25lbnRpYWxcclxuICAgKi9cclxuICBFeHBvbmVudGlhbCxcclxuICAvKipcclxuICAgKiBAc2VlIENpcmN1bGFyXHJcbiAgICovXHJcbiAgQ2lyY3VsYXIsXHJcbiAgLyoqXHJcbiAgICogQHNlZSBFbGFzdGljXHJcbiAgICovXHJcbiAgRWxhc3RpYyxcclxuICAvKipcclxuICAgKiBAc2VlIEJhY2tcclxuICAgKi9cclxuICBCYWNrLFxyXG4gIC8qKlxyXG4gICAqIEBzZWUgQm91bmNlXHJcbiAgICovXHJcbiAgQm91bmNlLFxyXG59O1xyXG5leHBvcnQgZGVmYXVsdCB7XHJcbiAgLyoqXHJcbiAgICogQHNlZSBCYWJ5bG9uLmpzL0FuaW1hdGlvbkZlYXR1cmVcclxuICAgKi9cclxuICBBbmltYXRpb25GZWF0dXJlLFxyXG4gIC8qKlxyXG4gICAqIEBzZWUgQW5pbWF0aW9uTGF5ZXJcclxuICAgKi9cclxuICBBbmltYXRpb25MYXllcixcclxuICAvKipcclxuICAgKiBAc2VlIEJhYnlsb24uanMvU2luZ2xlU3RhdGVcclxuICAgKi9cclxuICBTaW5nbGVTdGF0ZSxcclxuICAvKipcclxuICAgKiBAc2VlIFRyYW5zaXRpb25TdGF0ZVxyXG4gICAqL1xyXG4gIFRyYW5zaXRpb25TdGF0ZSxcclxuICAvKipcclxuICAgKiBAc2VlIEZyZWVCbGVuZFN0YXRlXHJcbiAgICovXHJcbiAgRnJlZUJsZW5kU3RhdGUsXHJcbiAgLyoqXHJcbiAgICogQHNlZSBRdWV1ZVN0YXRlXHJcbiAgICovXHJcbiAgUXVldWVTdGF0ZSxcclxuICAvKipcclxuICAgKiBAc2VlIFJhbmRvbUFuaW1hdGlvblN0YXRlXHJcbiAgICovXHJcbiAgUmFuZG9tQW5pbWF0aW9uU3RhdGUsXHJcbiAgLyoqXHJcbiAgICogQHNlZSBCbGVuZDFkU3RhdGVcclxuICAgKi9cclxuICBCbGVuZDFkU3RhdGUsXHJcbiAgLyoqXHJcbiAgICogQHNlZSBCbGVuZDJkU3RhdGVcclxuICAgKi9cclxuICBCbGVuZDJkU3RhdGUsXHJcbiAgLyoqXHJcbiAgICogQHNlZSBBbmltYXRpb25VdGlsc1xyXG4gICAqL1xyXG4gIEFuaW1hdGlvblV0aWxzLFxyXG4gIC8qKlxyXG4gICAqIEBzZWUgRWFzaW5nXHJcbiAgICovXHJcbiAgRWFzaW5nLFxyXG4gIC8qKlxyXG4gICAqIEBzZWUgTGF5ZXJCbGVuZE1vZGVzXHJcbiAgICovXHJcbiAgTGF5ZXJCbGVuZE1vZGVzLFxyXG4gIC8qKlxyXG4gICAqIEBzZWUgRGVmYXVsdExheWVyQmxlbmRNb2RlXHJcbiAgICovXHJcbiAgRGVmYXVsdExheWVyQmxlbmRNb2RlLFxyXG4gIC8qKlxyXG4gICAqIEBzZWUgQW5pbWF0aW9uVHlwZXNcclxuICAgKi9cclxuICBBbmltYXRpb25UeXBlcyxcclxufTtcclxuIiwiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXHJcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxyXG5cclxuLyoqXHJcbiAqIEBtb2R1bGUgYmFieWxvbi9IT1NUXHJcbiAqL1xyXG5cclxuaW1wb3J0IFV0aWxzIGZyb20gJ2NvcmUvVXRpbHMnO1xyXG5pbXBvcnQgTWF0aFV0aWxzIGZyb20gJ2NvcmUvTWF0aFV0aWxzJztcclxuaW1wb3J0IERlZmVycmVkIGZyb20gJ2NvcmUvRGVmZXJyZWQnO1xyXG5pbXBvcnQgTGlwc3luY0ZlYXR1cmUsIHtEZWZhdWx0VmlzZW1lTWFwfSBmcm9tICdjb3JlL0xpcHN5bmNGZWF0dXJlJztcclxuaW1wb3J0IEdlc3R1cmVGZWF0dXJlLCB7RGVmYXVsdEdlc3R1cmVXb3Jkc30gZnJvbSAnY29yZS9HZXN0dXJlRmVhdHVyZSc7XHJcbmltcG9ydCBQb2ludE9mSW50ZXJlc3RGZWF0dXJlLCB7QXhpc01hcH0gZnJvbSAnLi9Qb2ludE9mSW50ZXJlc3RGZWF0dXJlJztcclxuaW1wb3J0IHtlbnZ9IGZyb20gJy4vSG9zdEVudmlyb25tZW50JztcclxuaW1wb3J0IE1lc3NlbmdlciBmcm9tICcuL01lc3Nlbmdlcic7XHJcbmltcG9ydCBIb3N0T2JqZWN0IGZyb20gJy4vSG9zdE9iamVjdCc7XHJcblxyXG5pbXBvcnQgYXdzIGZyb20gJy4vYXdzcGFjayc7XHJcbmltcG9ydCBhbmltIGZyb20gJy4vYW5pbXBhY2snO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gIC8qKlxyXG4gICAqIEBzZWUgZW52XHJcbiAgICovXHJcbiAgZW52LFxyXG4gIC8qKlxyXG4gICAqIEBzZWUgVXRpbHNcclxuICAgKi9cclxuICBVdGlscyxcclxuICAvKipcclxuICAgKiBAc2VlIE1hdGhVdGlsc1xyXG4gICAqL1xyXG4gIE1hdGhVdGlscyxcclxuICAvKipcclxuICAgKiBAc2VlIERlZmVycmVkXHJcbiAgICovXHJcbiAgRGVmZXJyZWQsXHJcbiAgLyoqXHJcbiAgICogQHNlZSBCYWJ5bG9uLmpzL01lc3NlbmdlclxyXG4gICAqL1xyXG4gIE1lc3NlbmdlcixcclxuICAvKipcclxuICAgKiBAc2VlIEJhYnlsb24uanMvSG9zdE9iamVjdFxyXG4gICAqL1xyXG4gIEhvc3RPYmplY3QsXHJcbiAgLyoqXHJcbiAgICogQHNlZSBjb3JlL0xpcHN5bmNGZWF0dXJlXHJcbiAgICovXHJcbiAgTGlwc3luY0ZlYXR1cmUsXHJcbiAgLyoqXHJcbiAgICogQHNlZSBHZXN0dXJlRmVhdHVyZVxyXG4gICAqL1xyXG4gIEdlc3R1cmVGZWF0dXJlLFxyXG4gIC8qKlxyXG4gICAqIEBzZWUgQmFieWxvbi5qcy9Qb2ludE9mSW50ZXJlc3RGZWF0dXJlXHJcbiAgICovXHJcbiAgUG9pbnRPZkludGVyZXN0RmVhdHVyZSxcclxuICAvKipcclxuICAgKiBAc2VlIERlZmF1bHRWaXNlbWVNYXBcclxuICAgKi9cclxuICBEZWZhdWx0VmlzZW1lTWFwLFxyXG4gIC8qKlxyXG4gICAqIEBzZWUgRGVmYXVsdEdlc3R1cmVXb3Jkc1xyXG4gICAqL1xyXG4gIERlZmF1bHRHZXN0dXJlV29yZHMsXHJcbiAgLyoqXHJcbiAgICogQHNlZSBBeGlzTWFwXHJcbiAgICovXHJcbiAgQXhpc01hcCxcclxuICAvKipcclxuICAgKiBAc2VlIG1vZHVsZTpiYWJ5bG9uL2F3c3BhY2tcclxuICAgKi9cclxuICBhd3MsXHJcbiAgLyoqXHJcbiAgICogQHNlZSBtb2R1bGU6YmFieWxvbi9hbmltcGFja1xyXG4gICAqL1xyXG4gIGFuaW0sXHJcbn07XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///333\n')}]).default})); \ No newline at end of file diff --git a/dist/host.core.js b/dist/host.core.js index 32bd37b..680cfc7 100644 --- a/dist/host.core.js +++ b/dist/host.core.js @@ -2,4 +2,4 @@ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. * SPDX-License-Identifier: MIT-0 */ -!function(e,n){"object"==typeof exports&&"object"==typeof module?module.exports=n():"function"==typeof define&&define.amd?define("HOST",[],n):"object"==typeof exports?exports.HOST=n():e.HOST=n()}("undefined"!=typeof self?self:"undefined"!=typeof global?global:this,(function(){return function(e){var n={};function t(B){if(n[B])return n[B].exports;var Q=n[B]={i:B,l:!1,exports:{}};return e[B].call(Q.exports,Q,Q.exports,t),Q.l=!0,Q.exports}return t.m=e,t.c=n,t.d=function(e,n,B){t.o(e,n)||Object.defineProperty(e,n,{enumerable:!0,get:B})},t.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},t.t=function(e,n){if(1&n&&(e=t(e)),8&n)return e;if(4&n&&"object"==typeof e&&e&&e.__esModule)return e;var B=Object.create(null);if(t.r(B),Object.defineProperty(B,"default",{enumerable:!0,value:e}),2&n&&"string"!=typeof e)for(var Q in e)t.d(B,Q,function(n){return e[n]}.bind(null,Q));return B},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},t.p="",t(t.s=130)}([function(module,exports,__webpack_require__){eval("var global = __webpack_require__(2);\nvar core = __webpack_require__(18);\nvar hide = __webpack_require__(11);\nvar redefine = __webpack_require__(12);\nvar ctx = __webpack_require__(19);\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n var IS_FORCED = type & $export.F;\n var IS_GLOBAL = type & $export.G;\n var IS_STATIC = type & $export.S;\n var IS_PROTO = type & $export.P;\n var IS_BIND = type & $export.B;\n var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE];\n var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});\n var key, own, out, exp;\n if (IS_GLOBAL) source = name;\n for (key in source) {\n // contains in native\n own = !IS_FORCED && target && target[key] !== undefined;\n // export native or passed\n out = (own ? target : source)[key];\n // bind timers to global for call from export context\n exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n // extend global\n if (target) redefine(target, key, out, type & $export.U);\n // export\n if (exports[key] != out) hide(exports, key, exp);\n if (IS_PROTO && expProto[key] != out) expProto[key] = out;\n }\n};\nglobal.core = core;\n// type bitmap\n$export.F = 1; // forced\n$export.G = 2; // global\n$export.S = 4; // static\n$export.P = 8; // proto\n$export.B = 16; // bind\n$export.W = 32; // wrap\n$export.U = 64; // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZXhwb3J0LmpzPzVjYTEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsYUFBYSxtQkFBTyxDQUFDLENBQVc7QUFDaEMsV0FBVyxtQkFBTyxDQUFDLEVBQVM7QUFDNUIsV0FBVyxtQkFBTyxDQUFDLEVBQVM7QUFDNUIsZUFBZSxtQkFBTyxDQUFDLEVBQWE7QUFDcEMsVUFBVSxtQkFBTyxDQUFDLEVBQVE7QUFDMUI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0ZBQWtGLHVCQUF1QjtBQUN6RyxpRUFBaUU7QUFDakUsK0RBQStEO0FBQy9EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZCxjQUFjO0FBQ2QsY0FBYztBQUNkLGNBQWM7QUFDZCxlQUFlO0FBQ2YsZUFBZTtBQUNmLGVBQWU7QUFDZixnQkFBZ0I7QUFDaEIiLCJmaWxlIjoiMC5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xuXG52YXIgJGV4cG9ydCA9IGZ1bmN0aW9uICh0eXBlLCBuYW1lLCBzb3VyY2UpIHtcbiAgdmFyIElTX0ZPUkNFRCA9IHR5cGUgJiAkZXhwb3J0LkY7XG4gIHZhciBJU19HTE9CQUwgPSB0eXBlICYgJGV4cG9ydC5HO1xuICB2YXIgSVNfU1RBVElDID0gdHlwZSAmICRleHBvcnQuUztcbiAgdmFyIElTX1BST1RPID0gdHlwZSAmICRleHBvcnQuUDtcbiAgdmFyIElTX0JJTkQgPSB0eXBlICYgJGV4cG9ydC5CO1xuICB2YXIgdGFyZ2V0ID0gSVNfR0xPQkFMID8gZ2xvYmFsIDogSVNfU1RBVElDID8gZ2xvYmFsW25hbWVdIHx8IChnbG9iYWxbbmFtZV0gPSB7fSkgOiAoZ2xvYmFsW25hbWVdIHx8IHt9KVtQUk9UT1RZUEVdO1xuICB2YXIgZXhwb3J0cyA9IElTX0dMT0JBTCA/IGNvcmUgOiBjb3JlW25hbWVdIHx8IChjb3JlW25hbWVdID0ge30pO1xuICB2YXIgZXhwUHJvdG8gPSBleHBvcnRzW1BST1RPVFlQRV0gfHwgKGV4cG9ydHNbUFJPVE9UWVBFXSA9IHt9KTtcbiAgdmFyIGtleSwgb3duLCBvdXQsIGV4cDtcbiAgaWYgKElTX0dMT0JBTCkgc291cmNlID0gbmFtZTtcbiAgZm9yIChrZXkgaW4gc291cmNlKSB7XG4gICAgLy8gY29udGFpbnMgaW4gbmF0aXZlXG4gICAgb3duID0gIUlTX0ZPUkNFRCAmJiB0YXJnZXQgJiYgdGFyZ2V0W2tleV0gIT09IHVuZGVmaW5lZDtcbiAgICAvLyBleHBvcnQgbmF0aXZlIG9yIHBhc3NlZFxuICAgIG91dCA9IChvd24gPyB0YXJnZXQgOiBzb3VyY2UpW2tleV07XG4gICAgLy8gYmluZCB0aW1lcnMgdG8gZ2xvYmFsIGZvciBjYWxsIGZyb20gZXhwb3J0IGNvbnRleHRcbiAgICBleHAgPSBJU19CSU5EICYmIG93biA/IGN0eChvdXQsIGdsb2JhbCkgOiBJU19QUk9UTyAmJiB0eXBlb2Ygb3V0ID09ICdmdW5jdGlvbicgPyBjdHgoRnVuY3Rpb24uY2FsbCwgb3V0KSA6IG91dDtcbiAgICAvLyBleHRlbmQgZ2xvYmFsXG4gICAgaWYgKHRhcmdldCkgcmVkZWZpbmUodGFyZ2V0LCBrZXksIG91dCwgdHlwZSAmICRleHBvcnQuVSk7XG4gICAgLy8gZXhwb3J0XG4gICAgaWYgKGV4cG9ydHNba2V5XSAhPSBvdXQpIGhpZGUoZXhwb3J0cywga2V5LCBleHApO1xuICAgIGlmIChJU19QUk9UTyAmJiBleHBQcm90b1trZXldICE9IG91dCkgZXhwUHJvdG9ba2V5XSA9IG91dDtcbiAgfVxufTtcbmdsb2JhbC5jb3JlID0gY29yZTtcbi8vIHR5cGUgYml0bWFwXG4kZXhwb3J0LkYgPSAxOyAgIC8vIGZvcmNlZFxuJGV4cG9ydC5HID0gMjsgICAvLyBnbG9iYWxcbiRleHBvcnQuUyA9IDQ7ICAgLy8gc3RhdGljXG4kZXhwb3J0LlAgPSA4OyAgIC8vIHByb3RvXG4kZXhwb3J0LkIgPSAxNjsgIC8vIGJpbmRcbiRleHBvcnQuVyA9IDMyOyAgLy8gd3JhcFxuJGV4cG9ydC5VID0gNjQ7ICAvLyBzYWZlXG4kZXhwb3J0LlIgPSAxMjg7IC8vIHJlYWwgcHJvdG8gbWV0aG9kIGZvciBgbGlicmFyeWBcbm1vZHVsZS5leHBvcnRzID0gJGV4cG9ydDtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///0\n")},function(module,exports,__webpack_require__){eval("var isObject = __webpack_require__(4);\nmodule.exports = function (it) {\n if (!isObject(it)) throw TypeError(it + ' is not an object!');\n return it;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYW4tb2JqZWN0LmpzP2NiN2MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckM7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMS5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKCFpc09iamVjdChpdCkpIHRocm93IFR5cGVFcnJvcihpdCArICcgaXMgbm90IGFuIG9iamVjdCEnKTtcbiAgcmV0dXJuIGl0O1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///1\n")},function(module,exports){eval("// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n ? window : typeof self != 'undefined' && self.Math == Math ? self\n // eslint-disable-next-line no-new-func\n : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZ2xvYmFsLmpzPzc3MjYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlDQUF5QyIsImZpbGUiOiIyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzg2I2lzc3VlY29tbWVudC0xMTU3NTkwMjhcbnZhciBnbG9iYWwgPSBtb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiB3aW5kb3cgIT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93Lk1hdGggPT0gTWF0aFxuICA/IHdpbmRvdyA6IHR5cGVvZiBzZWxmICE9ICd1bmRlZmluZWQnICYmIHNlbGYuTWF0aCA9PSBNYXRoID8gc2VsZlxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmNcbiAgOiBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuaWYgKHR5cGVvZiBfX2cgPT0gJ251bWJlcicpIF9fZyA9IGdsb2JhbDsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bmRlZlxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2\n")},function(module,exports){eval("module.exports = function (exec) {\n try {\n return !!exec();\n } catch (e) {\n return true;\n }\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZmFpbHMuanM/NzllNSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBIiwiZmlsZSI6IjMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICEhZXhlYygpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///3\n")},function(module,exports){eval("module.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtb2JqZWN0LmpzP2QzZjQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBIiwiZmlsZSI6IjQuanMiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09PSAnb2JqZWN0JyA/IGl0ICE9PSBudWxsIDogdHlwZW9mIGl0ID09PSAnZnVuY3Rpb24nO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4\n")},function(module,exports,__webpack_require__){eval("var store = __webpack_require__(47)('wks');\nvar uid = __webpack_require__(33);\nvar Symbol = __webpack_require__(2).Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n return store[name] || (store[name] =\n USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fd2tzLmpzPzJiNGMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSxtQkFBTyxDQUFDLEVBQVc7QUFDL0IsVUFBVSxtQkFBTyxDQUFDLEVBQVE7QUFDMUIsYUFBYSxtQkFBTyxDQUFDLENBQVc7QUFDaEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiNS5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBzdG9yZSA9IHJlcXVpcmUoJy4vX3NoYXJlZCcpKCd3a3MnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuL191aWQnKTtcbnZhciBTeW1ib2wgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5TeW1ib2w7XG52YXIgVVNFX1NZTUJPTCA9IHR5cGVvZiBTeW1ib2wgPT0gJ2Z1bmN0aW9uJztcblxudmFyICRleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZSkge1xuICByZXR1cm4gc3RvcmVbbmFtZV0gfHwgKHN0b3JlW25hbWVdID1cbiAgICBVU0VfU1lNQk9MICYmIFN5bWJvbFtuYW1lXSB8fCAoVVNFX1NZTUJPTCA/IFN5bWJvbCA6IHVpZCkoJ1N5bWJvbC4nICsgbmFtZSkpO1xufTtcblxuJGV4cG9ydHMuc3RvcmUgPSBzdG9yZTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///5\n")},function(module,exports,__webpack_require__){eval("// 7.1.15 ToLength\nvar toInteger = __webpack_require__(21);\nvar min = Math.min;\nmodule.exports = function (it) {\n return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8tbGVuZ3RoLmpzPzlkZWYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDO0FBQ0E7QUFDQSwyREFBMkQ7QUFDM0QiLCJmaWxlIjoiNi5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDcuMS4xNSBUb0xlbmd0aFxudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciBtaW4gPSBNYXRoLm1pbjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCA+IDAgPyBtaW4odG9JbnRlZ2VyKGl0KSwgMHgxZmZmZmZmZmZmZmZmZikgOiAwOyAvLyBwb3coMiwgNTMpIC0gMSA9PSA5MDA3MTk5MjU0NzQwOTkxXG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///6\n")},function(module,exports,__webpack_require__){eval("// Thank's IE8 for his funny defineProperty\nmodule.exports = !__webpack_require__(3)(function () {\n return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZGVzY3JpcHRvcnMuanM/OWUxZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGtCQUFrQixtQkFBTyxDQUFDLENBQVU7QUFDcEMsaUNBQWlDLFFBQVEsbUJBQW1CLFVBQVUsRUFBRSxFQUFFO0FBQzFFLENBQUMiLCJmaWxlIjoiNy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIFRoYW5rJ3MgSUU4IGZvciBoaXMgZnVubnkgZGVmaW5lUHJvcGVydHlcbm1vZHVsZS5leHBvcnRzID0gIXJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAnYScsIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9IH0pLmEgIT0gNztcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7\n")},function(module,exports,__webpack_require__){eval("var anObject = __webpack_require__(1);\nvar IE8_DOM_DEFINE = __webpack_require__(94);\nvar toPrimitive = __webpack_require__(23);\nvar dP = Object.defineProperty;\n\nexports.f = __webpack_require__(7) ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return dP(O, P, Attributes);\n } catch (e) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWRwLmpzPzg2Y2MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMscUJBQXFCLG1CQUFPLENBQUMsRUFBbUI7QUFDaEQsa0JBQWtCLG1CQUFPLENBQUMsRUFBaUI7QUFDM0M7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLENBQWdCO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHLFlBQVk7QUFDZjtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiI4LmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuL19pZTgtZG9tLWRlZmluZScpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG52YXIgZFAgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG5cbmV4cG9ydHMuZiA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICBQID0gdG9QcmltaXRpdmUoUCwgdHJ1ZSk7XG4gIGFuT2JqZWN0KEF0dHJpYnV0ZXMpO1xuICBpZiAoSUU4X0RPTV9ERUZJTkUpIHRyeSB7XG4gICAgcmV0dXJuIGRQKE8sIFAsIEF0dHJpYnV0ZXMpO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKCdnZXQnIGluIEF0dHJpYnV0ZXMgfHwgJ3NldCcgaW4gQXR0cmlidXRlcykgdGhyb3cgVHlwZUVycm9yKCdBY2Nlc3NvcnMgbm90IHN1cHBvcnRlZCEnKTtcbiAgaWYgKCd2YWx1ZScgaW4gQXR0cmlidXRlcykgT1tQXSA9IEF0dHJpYnV0ZXMudmFsdWU7XG4gIHJldHVybiBPO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///8\n")},function(module,exports,__webpack_require__){eval("// 7.1.13 ToObject(argument)\nvar defined = __webpack_require__(24);\nmodule.exports = function (it) {\n return Object(defined(it));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8tb2JqZWN0LmpzPzRiZjgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsRUFBWTtBQUNsQztBQUNBO0FBQ0EiLCJmaWxlIjoiOS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDcuMS4xMyBUb09iamVjdChhcmd1bWVudClcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIE9iamVjdChkZWZpbmVkKGl0KSk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9\n")},function(module,exports){eval("module.exports = function (it) {\n if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n return it;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYS1mdW5jdGlvbi5qcz9kOGU4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjEwLmpzIiwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKHR5cGVvZiBpdCAhPSAnZnVuY3Rpb24nKSB0aHJvdyBUeXBlRXJyb3IoaXQgKyAnIGlzIG5vdCBhIGZ1bmN0aW9uIScpO1xuICByZXR1cm4gaXQ7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///10\n")},function(module,exports,__webpack_require__){eval("var dP = __webpack_require__(8);\nvar createDesc = __webpack_require__(32);\nmodule.exports = __webpack_require__(7) ? function (object, key, value) {\n return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faGlkZS5qcz8zMmU5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFNBQVMsbUJBQU8sQ0FBQyxDQUFjO0FBQy9CLGlCQUFpQixtQkFBTyxDQUFDLEVBQWtCO0FBQzNDLGlCQUFpQixtQkFBTyxDQUFDLENBQWdCO0FBQ3pDO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSIsImZpbGUiOiIxMS5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xudmFyIGNyZWF0ZURlc2MgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIHJldHVybiBkUC5mKG9iamVjdCwga2V5LCBjcmVhdGVEZXNjKDEsIHZhbHVlKSk7XG59IDogZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICBvYmplY3Rba2V5XSA9IHZhbHVlO1xuICByZXR1cm4gb2JqZWN0O1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///11\n")},function(module,exports,__webpack_require__){eval("var global = __webpack_require__(2);\nvar hide = __webpack_require__(11);\nvar has = __webpack_require__(14);\nvar SRC = __webpack_require__(33)('src');\nvar $toString = __webpack_require__(134);\nvar TO_STRING = 'toString';\nvar TPL = ('' + $toString).split(TO_STRING);\n\n__webpack_require__(18).inspectSource = function (it) {\n return $toString.call(it);\n};\n\n(module.exports = function (O, key, val, safe) {\n var isFunction = typeof val == 'function';\n if (isFunction) has(val, 'name') || hide(val, 'name', key);\n if (O[key] === val) return;\n if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));\n if (O === global) {\n O[key] = val;\n } else if (!safe) {\n delete O[key];\n hide(O, key, val);\n } else if (O[key]) {\n O[key] = val;\n } else {\n hide(O, key, val);\n }\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, TO_STRING, function toString() {\n return typeof this == 'function' && this[SRC] || $toString.call(this);\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcmVkZWZpbmUuanM/MmFiYSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxhQUFhLG1CQUFPLENBQUMsQ0FBVztBQUNoQyxXQUFXLG1CQUFPLENBQUMsRUFBUztBQUM1QixVQUFVLG1CQUFPLENBQUMsRUFBUTtBQUMxQixVQUFVLG1CQUFPLENBQUMsRUFBUTtBQUMxQixnQkFBZ0IsbUJBQU8sQ0FBQyxHQUF1QjtBQUMvQztBQUNBOztBQUVBLG1CQUFPLENBQUMsRUFBUztBQUNqQjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0EsQ0FBQyIsImZpbGUiOiIxMi5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIFNSQyA9IHJlcXVpcmUoJy4vX3VpZCcpKCdzcmMnKTtcbnZhciAkdG9TdHJpbmcgPSByZXF1aXJlKCcuL19mdW5jdGlvbi10by1zdHJpbmcnKTtcbnZhciBUT19TVFJJTkcgPSAndG9TdHJpbmcnO1xudmFyIFRQTCA9ICgnJyArICR0b1N0cmluZykuc3BsaXQoVE9fU1RSSU5HKTtcblxucmVxdWlyZSgnLi9fY29yZScpLmluc3BlY3RTb3VyY2UgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuICR0b1N0cmluZy5jYWxsKGl0KTtcbn07XG5cbihtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBrZXksIHZhbCwgc2FmZSkge1xuICB2YXIgaXNGdW5jdGlvbiA9IHR5cGVvZiB2YWwgPT0gJ2Z1bmN0aW9uJztcbiAgaWYgKGlzRnVuY3Rpb24pIGhhcyh2YWwsICduYW1lJykgfHwgaGlkZSh2YWwsICduYW1lJywga2V5KTtcbiAgaWYgKE9ba2V5XSA9PT0gdmFsKSByZXR1cm47XG4gIGlmIChpc0Z1bmN0aW9uKSBoYXModmFsLCBTUkMpIHx8IGhpZGUodmFsLCBTUkMsIE9ba2V5XSA/ICcnICsgT1trZXldIDogVFBMLmpvaW4oU3RyaW5nKGtleSkpKTtcbiAgaWYgKE8gPT09IGdsb2JhbCkge1xuICAgIE9ba2V5XSA9IHZhbDtcbiAgfSBlbHNlIGlmICghc2FmZSkge1xuICAgIGRlbGV0ZSBPW2tleV07XG4gICAgaGlkZShPLCBrZXksIHZhbCk7XG4gIH0gZWxzZSBpZiAoT1trZXldKSB7XG4gICAgT1trZXldID0gdmFsO1xuICB9IGVsc2Uge1xuICAgIGhpZGUoTywga2V5LCB2YWwpO1xuICB9XG4vLyBhZGQgZmFrZSBGdW5jdGlvbiN0b1N0cmluZyBmb3IgY29ycmVjdCB3b3JrIHdyYXBwZWQgbWV0aG9kcyAvIGNvbnN0cnVjdG9ycyB3aXRoIG1ldGhvZHMgbGlrZSBMb0Rhc2ggaXNOYXRpdmVcbn0pKEZ1bmN0aW9uLnByb3RvdHlwZSwgVE9fU1RSSU5HLCBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgcmV0dXJuIHR5cGVvZiB0aGlzID09ICdmdW5jdGlvbicgJiYgdGhpc1tTUkNdIHx8ICR0b1N0cmluZy5jYWxsKHRoaXMpO1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///12\n")},function(module,exports,__webpack_require__){eval("var $export = __webpack_require__(0);\nvar fails = __webpack_require__(3);\nvar defined = __webpack_require__(24);\nvar quot = /\"/g;\n// B.2.3.2.1 CreateHTML(string, tag, attribute, value)\nvar createHTML = function (string, tag, attribute, value) {\n var S = String(defined(string));\n var p1 = '<' + tag;\n if (attribute !== '') p1 += ' ' + attribute + '=\"' + String(value).replace(quot, '"') + '\"';\n return p1 + '>' + S + '';\n};\nmodule.exports = function (NAME, exec) {\n var O = {};\n O[NAME] = exec(createHTML);\n $export($export.P + $export.F * fails(function () {\n var test = ''[NAME]('\"');\n return test !== test.toLowerCase() || test.split('\"').length > 3;\n }), 'String', O);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLWh0bWwuanM/Mzg2YiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxZQUFZLG1CQUFPLENBQUMsQ0FBVTtBQUM5QixjQUFjLG1CQUFPLENBQUMsRUFBWTtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEZBQTBGO0FBQzFGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0giLCJmaWxlIjoiMTMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xudmFyIHF1b3QgPSAvXCIvZztcbi8vIEIuMi4zLjIuMSBDcmVhdGVIVE1MKHN0cmluZywgdGFnLCBhdHRyaWJ1dGUsIHZhbHVlKVxudmFyIGNyZWF0ZUhUTUwgPSBmdW5jdGlvbiAoc3RyaW5nLCB0YWcsIGF0dHJpYnV0ZSwgdmFsdWUpIHtcbiAgdmFyIFMgPSBTdHJpbmcoZGVmaW5lZChzdHJpbmcpKTtcbiAgdmFyIHAxID0gJzwnICsgdGFnO1xuICBpZiAoYXR0cmlidXRlICE9PSAnJykgcDEgKz0gJyAnICsgYXR0cmlidXRlICsgJz1cIicgKyBTdHJpbmcodmFsdWUpLnJlcGxhY2UocXVvdCwgJyZxdW90OycpICsgJ1wiJztcbiAgcmV0dXJuIHAxICsgJz4nICsgUyArICc8LycgKyB0YWcgKyAnPic7XG59O1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTkFNRSwgZXhlYykge1xuICB2YXIgTyA9IHt9O1xuICBPW05BTUVdID0gZXhlYyhjcmVhdGVIVE1MKTtcbiAgJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHRlc3QgPSAnJ1tOQU1FXSgnXCInKTtcbiAgICByZXR1cm4gdGVzdCAhPT0gdGVzdC50b0xvd2VyQ2FzZSgpIHx8IHRlc3Quc3BsaXQoJ1wiJykubGVuZ3RoID4gMztcbiAgfSksICdTdHJpbmcnLCBPKTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///13\n")},function(module,exports){eval("var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faGFzLmpzPzY5YTgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdUJBQXVCO0FBQ3ZCO0FBQ0E7QUFDQSIsImZpbGUiOiIxNC5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBoYXNPd25Qcm9wZXJ0eSA9IHt9Lmhhc093blByb3BlcnR5O1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIGtleSkge1xuICByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbChpdCwga2V5KTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///14\n")},function(module,exports,__webpack_require__){eval("// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = __webpack_require__(48);\nvar defined = __webpack_require__(24);\nmodule.exports = function (it) {\n return IObject(defined(it));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8taW9iamVjdC5qcz82ODIxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLEVBQVk7QUFDbEMsY0FBYyxtQkFBTyxDQUFDLEVBQVk7QUFDbEM7QUFDQTtBQUNBIiwiZmlsZSI6IjE1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gdG8gaW5kZXhlZCBvYmplY3QsIHRvT2JqZWN0IHdpdGggZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBzdHJpbmdzXG52YXIgSU9iamVjdCA9IHJlcXVpcmUoJy4vX2lvYmplY3QnKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIElPYmplY3QoZGVmaW5lZChpdCkpO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///15\n")},function(module,exports,__webpack_require__){eval("var pIE = __webpack_require__(49);\nvar createDesc = __webpack_require__(32);\nvar toIObject = __webpack_require__(15);\nvar toPrimitive = __webpack_require__(23);\nvar has = __webpack_require__(14);\nvar IE8_DOM_DEFINE = __webpack_require__(94);\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nexports.f = __webpack_require__(7) ? gOPD : function getOwnPropertyDescriptor(O, P) {\n O = toIObject(O);\n P = toPrimitive(P, true);\n if (IE8_DOM_DEFINE) try {\n return gOPD(O, P);\n } catch (e) { /* empty */ }\n if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdvcGQuanM/MTFlOSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxVQUFVLG1CQUFPLENBQUMsRUFBZTtBQUNqQyxpQkFBaUIsbUJBQU8sQ0FBQyxFQUFrQjtBQUMzQyxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDLGtCQUFrQixtQkFBTyxDQUFDLEVBQWlCO0FBQzNDLFVBQVUsbUJBQU8sQ0FBQyxFQUFRO0FBQzFCLHFCQUFxQixtQkFBTyxDQUFDLEVBQW1CO0FBQ2hEOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxDQUFnQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUcsWUFBWTtBQUNmO0FBQ0EiLCJmaWxlIjoiMTYuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgcElFID0gcmVxdWlyZSgnLi9fb2JqZWN0LXBpZScpO1xudmFyIGNyZWF0ZURlc2MgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuL19pZTgtZG9tLWRlZmluZScpO1xudmFyIGdPUEQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG5leHBvcnRzLmYgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gZ09QRCA6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKSB7XG4gIE8gPSB0b0lPYmplY3QoTyk7XG4gIFAgPSB0b1ByaW1pdGl2ZShQLCB0cnVlKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiBnT1BEKE8sIFApO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKGhhcyhPLCBQKSkgcmV0dXJuIGNyZWF0ZURlc2MoIXBJRS5mLmNhbGwoTywgUCksIE9bUF0pO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///16\n")},function(module,exports,__webpack_require__){eval("// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = __webpack_require__(14);\nvar toObject = __webpack_require__(9);\nvar IE_PROTO = __webpack_require__(68)('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n O = toObject(O);\n if (has(O, IE_PROTO)) return O[IE_PROTO];\n if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n return O.constructor.prototype;\n } return O instanceof Object ? ObjectProto : null;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdwby5qcz8zOGZkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsVUFBVSxtQkFBTyxDQUFDLEVBQVE7QUFDMUIsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZUFBZSxtQkFBTyxDQUFDLEVBQWU7QUFDdEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCIsImZpbGUiOiIxNy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDE5LjEuMi45IC8gMTUuMi4zLjIgT2JqZWN0LmdldFByb3RvdHlwZU9mKE8pXG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciBJRV9QUk9UTyA9IHJlcXVpcmUoJy4vX3NoYXJlZC1rZXknKSgnSUVfUFJPVE8nKTtcbnZhciBPYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmdldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIChPKSB7XG4gIE8gPSB0b09iamVjdChPKTtcbiAgaWYgKGhhcyhPLCBJRV9QUk9UTykpIHJldHVybiBPW0lFX1BST1RPXTtcbiAgaWYgKHR5cGVvZiBPLmNvbnN0cnVjdG9yID09ICdmdW5jdGlvbicgJiYgTyBpbnN0YW5jZW9mIE8uY29uc3RydWN0b3IpIHtcbiAgICByZXR1cm4gTy5jb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG4gIH0gcmV0dXJuIE8gaW5zdGFuY2VvZiBPYmplY3QgPyBPYmplY3RQcm90byA6IG51bGw7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///17\n")},function(module,exports){eval("var core = module.exports = { version: '2.6.12' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY29yZS5qcz84Mzc4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDZCQUE2QjtBQUM3Qix1Q0FBdUMiLCJmaWxlIjoiMTguanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgY29yZSA9IG1vZHVsZS5leHBvcnRzID0geyB2ZXJzaW9uOiAnMi42LjEyJyB9O1xuaWYgKHR5cGVvZiBfX2UgPT0gJ251bWJlcicpIF9fZSA9IGNvcmU7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///18\n")},function(module,exports,__webpack_require__){eval("// optional / simple context binding\nvar aFunction = __webpack_require__(10);\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY3R4LmpzPzliNDMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIxOS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIG9wdGlvbmFsIC8gc2ltcGxlIGNvbnRleHQgYmluZGluZ1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGZuLCB0aGF0LCBsZW5ndGgpIHtcbiAgYUZ1bmN0aW9uKGZuKTtcbiAgaWYgKHRoYXQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGZuO1xuICBzd2l0Y2ggKGxlbmd0aCkge1xuICAgIGNhc2UgMTogcmV0dXJuIGZ1bmN0aW9uIChhKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhKTtcbiAgICB9O1xuICAgIGNhc2UgMjogcmV0dXJuIGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhLCBiKTtcbiAgICB9O1xuICAgIGNhc2UgMzogcmV0dXJuIGZ1bmN0aW9uIChhLCBiLCBjKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhLCBiLCBjKTtcbiAgICB9O1xuICB9XG4gIHJldHVybiBmdW5jdGlvbiAoLyogLi4uYXJncyAqLykge1xuICAgIHJldHVybiBmbi5hcHBseSh0aGF0LCBhcmd1bWVudHMpO1xuICB9O1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///19\n")},function(module,exports){eval("var toString = {}.toString;\n\nmodule.exports = function (it) {\n return toString.call(it).slice(8, -1);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY29mLmpzPzJkOTUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsaUJBQWlCOztBQUVqQjtBQUNBO0FBQ0EiLCJmaWxlIjoiMjAuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgdG9TdHJpbmcgPSB7fS50b1N0cmluZztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwoaXQpLnNsaWNlKDgsIC0xKTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///20\n")},function(module,exports){eval("// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8taW50ZWdlci5qcz80NTg4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIyMS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDcuMS40IFRvSW50ZWdlclxudmFyIGNlaWwgPSBNYXRoLmNlaWw7XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGlzTmFOKGl0ID0gK2l0KSA/IDAgOiAoaXQgPiAwID8gZmxvb3IgOiBjZWlsKShpdCk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///21\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar fails = __webpack_require__(3);\n\nmodule.exports = function (method, arg) {\n return !!method && fails(function () {\n // eslint-disable-next-line no-useless-call\n arg ? method.call(null, function () { /* empty */ }, 1) : method.call(null);\n });\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaWN0LW1ldGhvZC5qcz8yZjIxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsWUFBWSxtQkFBTyxDQUFDLENBQVU7O0FBRTlCO0FBQ0E7QUFDQTtBQUNBLHlDQUF5QyxjQUFjO0FBQ3ZELEdBQUc7QUFDSCIsImZpbGUiOiIyMi5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG1ldGhvZCwgYXJnKSB7XG4gIHJldHVybiAhIW1ldGhvZCAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZWxlc3MtY2FsbFxuICAgIGFyZyA/IG1ldGhvZC5jYWxsKG51bGwsIGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSwgMSkgOiBtZXRob2QuY2FsbChudWxsKTtcbiAgfSk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///22\n")},function(module,exports,__webpack_require__){eval("// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = __webpack_require__(4);\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n if (!isObject(it)) return it;\n var fn, val;\n if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8tcHJpbWl0aXZlLmpzPzZhOTkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIyMy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDcuMS4xIFRvUHJpbWl0aXZlKGlucHV0IFssIFByZWZlcnJlZFR5cGVdKVxudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG4vLyBpbnN0ZWFkIG9mIHRoZSBFUzYgc3BlYyB2ZXJzaW9uLCB3ZSBkaWRuJ3QgaW1wbGVtZW50IEBAdG9QcmltaXRpdmUgY2FzZVxuLy8gYW5kIHRoZSBzZWNvbmQgYXJndW1lbnQgLSBmbGFnIC0gcHJlZmVycmVkIHR5cGUgaXMgYSBzdHJpbmdcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBTKSB7XG4gIGlmICghaXNPYmplY3QoaXQpKSByZXR1cm4gaXQ7XG4gIHZhciBmbiwgdmFsO1xuICBpZiAoUyAmJiB0eXBlb2YgKGZuID0gaXQudG9TdHJpbmcpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaXQpKSkgcmV0dXJuIHZhbDtcbiAgaWYgKHR5cGVvZiAoZm4gPSBpdC52YWx1ZU9mKSA9PSAnZnVuY3Rpb24nICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGl0KSkpIHJldHVybiB2YWw7XG4gIGlmICghUyAmJiB0eXBlb2YgKGZuID0gaXQudG9TdHJpbmcpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaXQpKSkgcmV0dXJuIHZhbDtcbiAgdGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///23\n")},function(module,exports){eval('// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError("Can\'t call method on " + it);\n return it;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZGVmaW5lZC5qcz9iZTEzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMjQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyA3LjIuMSBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGFyZ3VtZW50KVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGl0ID09IHVuZGVmaW5lZCkgdGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gIFwiICsgaXQpO1xuICByZXR1cm4gaXQ7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///24\n')},function(module,exports,__webpack_require__){eval("// most Object methods by ES6 should accept primitives\nvar $export = __webpack_require__(0);\nvar core = __webpack_require__(18);\nvar fails = __webpack_require__(3);\nmodule.exports = function (KEY, exec) {\n var fn = (core.Object || {})[KEY] || Object[KEY];\n var exp = {};\n exp[KEY] = exec(fn);\n $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LXNhcC5qcz81ZWRhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsV0FBVyxtQkFBTyxDQUFDLEVBQVM7QUFDNUIsWUFBWSxtQkFBTyxDQUFDLENBQVU7QUFDOUI7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBLHFEQUFxRCxPQUFPLEVBQUU7QUFDOUQiLCJmaWxlIjoiMjUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBtb3N0IE9iamVjdCBtZXRob2RzIGJ5IEVTNiBzaG91bGQgYWNjZXB0IHByaW1pdGl2ZXNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgY29yZSA9IHJlcXVpcmUoJy4vX2NvcmUnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChLRVksIGV4ZWMpIHtcbiAgdmFyIGZuID0gKGNvcmUuT2JqZWN0IHx8IHt9KVtLRVldIHx8IE9iamVjdFtLRVldO1xuICB2YXIgZXhwID0ge307XG4gIGV4cFtLRVldID0gZXhlYyhmbik7XG4gICRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogZmFpbHMoZnVuY3Rpb24gKCkgeyBmbigxKTsgfSksICdPYmplY3QnLCBleHApO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///25\n")},function(module,exports,__webpack_require__){eval("// 0 -> Array#forEach\n// 1 -> Array#map\n// 2 -> Array#filter\n// 3 -> Array#some\n// 4 -> Array#every\n// 5 -> Array#find\n// 6 -> Array#findIndex\nvar ctx = __webpack_require__(19);\nvar IObject = __webpack_require__(48);\nvar toObject = __webpack_require__(9);\nvar toLength = __webpack_require__(6);\nvar asc = __webpack_require__(84);\nmodule.exports = function (TYPE, $create) {\n var IS_MAP = TYPE == 1;\n var IS_FILTER = TYPE == 2;\n var IS_SOME = TYPE == 3;\n var IS_EVERY = TYPE == 4;\n var IS_FIND_INDEX = TYPE == 6;\n var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n var create = $create || asc;\n return function ($this, callbackfn, that) {\n var O = toObject($this);\n var self = IObject(O);\n var f = ctx(callbackfn, that, 3);\n var length = toLength(self.length);\n var index = 0;\n var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;\n var val, res;\n for (;length > index; index++) if (NO_HOLES || index in self) {\n val = self[index];\n res = f(val, index, O);\n if (TYPE) {\n if (IS_MAP) result[index] = res; // map\n else if (res) switch (TYPE) {\n case 3: return true; // some\n case 5: return val; // find\n case 6: return index; // findIndex\n case 2: result.push(val); // filter\n } else if (IS_EVERY) return false; // every\n }\n }\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;\n };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktbWV0aG9kcy5qcz8wYTQ5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVSxtQkFBTyxDQUFDLEVBQVE7QUFDMUIsY0FBYyxtQkFBTyxDQUFDLEVBQVk7QUFDbEMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsVUFBVSxtQkFBTyxDQUFDLEVBQXlCO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVSxlQUFlO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBLHdDQUF3QztBQUN4QztBQUNBLDhCQUE4QjtBQUM5Qiw2QkFBNkI7QUFDN0IsK0JBQStCO0FBQy9CLG1DQUFtQztBQUNuQyxTQUFTLGlDQUFpQztBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjI2LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMCAtPiBBcnJheSNmb3JFYWNoXG4vLyAxIC0+IEFycmF5I21hcFxuLy8gMiAtPiBBcnJheSNmaWx0ZXJcbi8vIDMgLT4gQXJyYXkjc29tZVxuLy8gNCAtPiBBcnJheSNldmVyeVxuLy8gNSAtPiBBcnJheSNmaW5kXG4vLyA2IC0+IEFycmF5I2ZpbmRJbmRleFxudmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIElPYmplY3QgPSByZXF1aXJlKCcuL19pb2JqZWN0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGFzYyA9IHJlcXVpcmUoJy4vX2FycmF5LXNwZWNpZXMtY3JlYXRlJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChUWVBFLCAkY3JlYXRlKSB7XG4gIHZhciBJU19NQVAgPSBUWVBFID09IDE7XG4gIHZhciBJU19GSUxURVIgPSBUWVBFID09IDI7XG4gIHZhciBJU19TT01FID0gVFlQRSA9PSAzO1xuICB2YXIgSVNfRVZFUlkgPSBUWVBFID09IDQ7XG4gIHZhciBJU19GSU5EX0lOREVYID0gVFlQRSA9PSA2O1xuICB2YXIgTk9fSE9MRVMgPSBUWVBFID09IDUgfHwgSVNfRklORF9JTkRFWDtcbiAgdmFyIGNyZWF0ZSA9ICRjcmVhdGUgfHwgYXNjO1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBjYWxsYmFja2ZuLCB0aGF0KSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCgkdGhpcyk7XG4gICAgdmFyIHNlbGYgPSBJT2JqZWN0KE8pO1xuICAgIHZhciBmID0gY3R4KGNhbGxiYWNrZm4sIHRoYXQsIDMpO1xuICAgIHZhciBsZW5ndGggPSB0b0xlbmd0aChzZWxmLmxlbmd0aCk7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgcmVzdWx0ID0gSVNfTUFQID8gY3JlYXRlKCR0aGlzLCBsZW5ndGgpIDogSVNfRklMVEVSID8gY3JlYXRlKCR0aGlzLCAwKSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgdmFsLCByZXM7XG4gICAgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIGlmIChOT19IT0xFUyB8fCBpbmRleCBpbiBzZWxmKSB7XG4gICAgICB2YWwgPSBzZWxmW2luZGV4XTtcbiAgICAgIHJlcyA9IGYodmFsLCBpbmRleCwgTyk7XG4gICAgICBpZiAoVFlQRSkge1xuICAgICAgICBpZiAoSVNfTUFQKSByZXN1bHRbaW5kZXhdID0gcmVzOyAgIC8vIG1hcFxuICAgICAgICBlbHNlIGlmIChyZXMpIHN3aXRjaCAoVFlQRSkge1xuICAgICAgICAgIGNhc2UgMzogcmV0dXJuIHRydWU7ICAgICAgICAgICAgIC8vIHNvbWVcbiAgICAgICAgICBjYXNlIDU6IHJldHVybiB2YWw7ICAgICAgICAgICAgICAvLyBmaW5kXG4gICAgICAgICAgY2FzZSA2OiByZXR1cm4gaW5kZXg7ICAgICAgICAgICAgLy8gZmluZEluZGV4XG4gICAgICAgICAgY2FzZSAyOiByZXN1bHQucHVzaCh2YWwpOyAgICAgICAgLy8gZmlsdGVyXG4gICAgICAgIH0gZWxzZSBpZiAoSVNfRVZFUlkpIHJldHVybiBmYWxzZTsgLy8gZXZlcnlcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIElTX0ZJTkRfSU5ERVggPyAtMSA6IElTX1NPTUUgfHwgSVNfRVZFUlkgPyBJU19FVkVSWSA6IHJlc3VsdDtcbiAgfTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///26\n")},function(module,exports,__webpack_require__){"use strict";eval("\nif (__webpack_require__(7)) {\n var LIBRARY = __webpack_require__(29);\n var global = __webpack_require__(2);\n var fails = __webpack_require__(3);\n var $export = __webpack_require__(0);\n var $typed = __webpack_require__(62);\n var $buffer = __webpack_require__(92);\n var ctx = __webpack_require__(19);\n var anInstance = __webpack_require__(39);\n var propertyDesc = __webpack_require__(32);\n var hide = __webpack_require__(11);\n var redefineAll = __webpack_require__(41);\n var toInteger = __webpack_require__(21);\n var toLength = __webpack_require__(6);\n var toIndex = __webpack_require__(122);\n var toAbsoluteIndex = __webpack_require__(35);\n var toPrimitive = __webpack_require__(23);\n var has = __webpack_require__(14);\n var classof = __webpack_require__(44);\n var isObject = __webpack_require__(4);\n var toObject = __webpack_require__(9);\n var isArrayIter = __webpack_require__(81);\n var create = __webpack_require__(36);\n var getPrototypeOf = __webpack_require__(17);\n var gOPN = __webpack_require__(37).f;\n var getIterFn = __webpack_require__(83);\n var uid = __webpack_require__(33);\n var wks = __webpack_require__(5);\n var createArrayMethod = __webpack_require__(26);\n var createArrayIncludes = __webpack_require__(52);\n var speciesConstructor = __webpack_require__(51);\n var ArrayIterators = __webpack_require__(86);\n var Iterators = __webpack_require__(46);\n var $iterDetect = __webpack_require__(57);\n var setSpecies = __webpack_require__(38);\n var arrayFill = __webpack_require__(85);\n var arrayCopyWithin = __webpack_require__(111);\n var $DP = __webpack_require__(8);\n var $GOPD = __webpack_require__(16);\n var dP = $DP.f;\n var gOPD = $GOPD.f;\n var RangeError = global.RangeError;\n var TypeError = global.TypeError;\n var Uint8Array = global.Uint8Array;\n var ARRAY_BUFFER = 'ArrayBuffer';\n var SHARED_BUFFER = 'Shared' + ARRAY_BUFFER;\n var BYTES_PER_ELEMENT = 'BYTES_PER_ELEMENT';\n var PROTOTYPE = 'prototype';\n var ArrayProto = Array[PROTOTYPE];\n var $ArrayBuffer = $buffer.ArrayBuffer;\n var $DataView = $buffer.DataView;\n var arrayForEach = createArrayMethod(0);\n var arrayFilter = createArrayMethod(2);\n var arraySome = createArrayMethod(3);\n var arrayEvery = createArrayMethod(4);\n var arrayFind = createArrayMethod(5);\n var arrayFindIndex = createArrayMethod(6);\n var arrayIncludes = createArrayIncludes(true);\n var arrayIndexOf = createArrayIncludes(false);\n var arrayValues = ArrayIterators.values;\n var arrayKeys = ArrayIterators.keys;\n var arrayEntries = ArrayIterators.entries;\n var arrayLastIndexOf = ArrayProto.lastIndexOf;\n var arrayReduce = ArrayProto.reduce;\n var arrayReduceRight = ArrayProto.reduceRight;\n var arrayJoin = ArrayProto.join;\n var arraySort = ArrayProto.sort;\n var arraySlice = ArrayProto.slice;\n var arrayToString = ArrayProto.toString;\n var arrayToLocaleString = ArrayProto.toLocaleString;\n var ITERATOR = wks('iterator');\n var TAG = wks('toStringTag');\n var TYPED_CONSTRUCTOR = uid('typed_constructor');\n var DEF_CONSTRUCTOR = uid('def_constructor');\n var ALL_CONSTRUCTORS = $typed.CONSTR;\n var TYPED_ARRAY = $typed.TYPED;\n var VIEW = $typed.VIEW;\n var WRONG_LENGTH = 'Wrong length!';\n\n var $map = createArrayMethod(1, function (O, length) {\n return allocate(speciesConstructor(O, O[DEF_CONSTRUCTOR]), length);\n });\n\n var LITTLE_ENDIAN = fails(function () {\n // eslint-disable-next-line no-undef\n return new Uint8Array(new Uint16Array([1]).buffer)[0] === 1;\n });\n\n var FORCED_SET = !!Uint8Array && !!Uint8Array[PROTOTYPE].set && fails(function () {\n new Uint8Array(1).set({});\n });\n\n var toOffset = function (it, BYTES) {\n var offset = toInteger(it);\n if (offset < 0 || offset % BYTES) throw RangeError('Wrong offset!');\n return offset;\n };\n\n var validate = function (it) {\n if (isObject(it) && TYPED_ARRAY in it) return it;\n throw TypeError(it + ' is not a typed array!');\n };\n\n var allocate = function (C, length) {\n if (!(isObject(C) && TYPED_CONSTRUCTOR in C)) {\n throw TypeError('It is not a typed array constructor!');\n } return new C(length);\n };\n\n var speciesFromList = function (O, list) {\n return fromList(speciesConstructor(O, O[DEF_CONSTRUCTOR]), list);\n };\n\n var fromList = function (C, list) {\n var index = 0;\n var length = list.length;\n var result = allocate(C, length);\n while (length > index) result[index] = list[index++];\n return result;\n };\n\n var addGetter = function (it, key, internal) {\n dP(it, key, { get: function () { return this._d[internal]; } });\n };\n\n var $from = function from(source /* , mapfn, thisArg */) {\n var O = toObject(source);\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var iterFn = getIterFn(O);\n var i, length, values, result, step, iterator;\n if (iterFn != undefined && !isArrayIter(iterFn)) {\n for (iterator = iterFn.call(O), values = [], i = 0; !(step = iterator.next()).done; i++) {\n values.push(step.value);\n } O = values;\n }\n if (mapping && aLen > 2) mapfn = ctx(mapfn, arguments[2], 2);\n for (i = 0, length = toLength(O.length), result = allocate(this, length); length > i; i++) {\n result[i] = mapping ? mapfn(O[i], i) : O[i];\n }\n return result;\n };\n\n var $of = function of(/* ...items */) {\n var index = 0;\n var length = arguments.length;\n var result = allocate(this, length);\n while (length > index) result[index] = arguments[index++];\n return result;\n };\n\n // iOS Safari 6.x fails here\n var TO_LOCALE_BUG = !!Uint8Array && fails(function () { arrayToLocaleString.call(new Uint8Array(1)); });\n\n var $toLocaleString = function toLocaleString() {\n return arrayToLocaleString.apply(TO_LOCALE_BUG ? arraySlice.call(validate(this)) : validate(this), arguments);\n };\n\n var proto = {\n copyWithin: function copyWithin(target, start /* , end */) {\n return arrayCopyWithin.call(validate(this), target, start, arguments.length > 2 ? arguments[2] : undefined);\n },\n every: function every(callbackfn /* , thisArg */) {\n return arrayEvery(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n fill: function fill(value /* , start, end */) { // eslint-disable-line no-unused-vars\n return arrayFill.apply(validate(this), arguments);\n },\n filter: function filter(callbackfn /* , thisArg */) {\n return speciesFromList(this, arrayFilter(validate(this), callbackfn,\n arguments.length > 1 ? arguments[1] : undefined));\n },\n find: function find(predicate /* , thisArg */) {\n return arrayFind(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n findIndex: function findIndex(predicate /* , thisArg */) {\n return arrayFindIndex(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n forEach: function forEach(callbackfn /* , thisArg */) {\n arrayForEach(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n indexOf: function indexOf(searchElement /* , fromIndex */) {\n return arrayIndexOf(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n includes: function includes(searchElement /* , fromIndex */) {\n return arrayIncludes(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n join: function join(separator) { // eslint-disable-line no-unused-vars\n return arrayJoin.apply(validate(this), arguments);\n },\n lastIndexOf: function lastIndexOf(searchElement /* , fromIndex */) { // eslint-disable-line no-unused-vars\n return arrayLastIndexOf.apply(validate(this), arguments);\n },\n map: function map(mapfn /* , thisArg */) {\n return $map(validate(this), mapfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n reduce: function reduce(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduce.apply(validate(this), arguments);\n },\n reduceRight: function reduceRight(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduceRight.apply(validate(this), arguments);\n },\n reverse: function reverse() {\n var that = this;\n var length = validate(that).length;\n var middle = Math.floor(length / 2);\n var index = 0;\n var value;\n while (index < middle) {\n value = that[index];\n that[index++] = that[--length];\n that[length] = value;\n } return that;\n },\n some: function some(callbackfn /* , thisArg */) {\n return arraySome(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n sort: function sort(comparefn) {\n return arraySort.call(validate(this), comparefn);\n },\n subarray: function subarray(begin, end) {\n var O = validate(this);\n var length = O.length;\n var $begin = toAbsoluteIndex(begin, length);\n return new (speciesConstructor(O, O[DEF_CONSTRUCTOR]))(\n O.buffer,\n O.byteOffset + $begin * O.BYTES_PER_ELEMENT,\n toLength((end === undefined ? length : toAbsoluteIndex(end, length)) - $begin)\n );\n }\n };\n\n var $slice = function slice(start, end) {\n return speciesFromList(this, arraySlice.call(validate(this), start, end));\n };\n\n var $set = function set(arrayLike /* , offset */) {\n validate(this);\n var offset = toOffset(arguments[1], 1);\n var length = this.length;\n var src = toObject(arrayLike);\n var len = toLength(src.length);\n var index = 0;\n if (len + offset > length) throw RangeError(WRONG_LENGTH);\n while (index < len) this[offset + index] = src[index++];\n };\n\n var $iterators = {\n entries: function entries() {\n return arrayEntries.call(validate(this));\n },\n keys: function keys() {\n return arrayKeys.call(validate(this));\n },\n values: function values() {\n return arrayValues.call(validate(this));\n }\n };\n\n var isTAIndex = function (target, key) {\n return isObject(target)\n && target[TYPED_ARRAY]\n && typeof key != 'symbol'\n && key in target\n && String(+key) == String(key);\n };\n var $getDesc = function getOwnPropertyDescriptor(target, key) {\n return isTAIndex(target, key = toPrimitive(key, true))\n ? propertyDesc(2, target[key])\n : gOPD(target, key);\n };\n var $setDesc = function defineProperty(target, key, desc) {\n if (isTAIndex(target, key = toPrimitive(key, true))\n && isObject(desc)\n && has(desc, 'value')\n && !has(desc, 'get')\n && !has(desc, 'set')\n // TODO: add validation descriptor w/o calling accessors\n && !desc.configurable\n && (!has(desc, 'writable') || desc.writable)\n && (!has(desc, 'enumerable') || desc.enumerable)\n ) {\n target[key] = desc.value;\n return target;\n } return dP(target, key, desc);\n };\n\n if (!ALL_CONSTRUCTORS) {\n $GOPD.f = $getDesc;\n $DP.f = $setDesc;\n }\n\n $export($export.S + $export.F * !ALL_CONSTRUCTORS, 'Object', {\n getOwnPropertyDescriptor: $getDesc,\n defineProperty: $setDesc\n });\n\n if (fails(function () { arrayToString.call({}); })) {\n arrayToString = arrayToLocaleString = function toString() {\n return arrayJoin.call(this);\n };\n }\n\n var $TypedArrayPrototype$ = redefineAll({}, proto);\n redefineAll($TypedArrayPrototype$, $iterators);\n hide($TypedArrayPrototype$, ITERATOR, $iterators.values);\n redefineAll($TypedArrayPrototype$, {\n slice: $slice,\n set: $set,\n constructor: function () { /* noop */ },\n toString: arrayToString,\n toLocaleString: $toLocaleString\n });\n addGetter($TypedArrayPrototype$, 'buffer', 'b');\n addGetter($TypedArrayPrototype$, 'byteOffset', 'o');\n addGetter($TypedArrayPrototype$, 'byteLength', 'l');\n addGetter($TypedArrayPrototype$, 'length', 'e');\n dP($TypedArrayPrototype$, TAG, {\n get: function () { return this[TYPED_ARRAY]; }\n });\n\n // eslint-disable-next-line max-statements\n module.exports = function (KEY, BYTES, wrapper, CLAMPED) {\n CLAMPED = !!CLAMPED;\n var NAME = KEY + (CLAMPED ? 'Clamped' : '') + 'Array';\n var GETTER = 'get' + KEY;\n var SETTER = 'set' + KEY;\n var TypedArray = global[NAME];\n var Base = TypedArray || {};\n var TAC = TypedArray && getPrototypeOf(TypedArray);\n var FORCED = !TypedArray || !$typed.ABV;\n var O = {};\n var TypedArrayPrototype = TypedArray && TypedArray[PROTOTYPE];\n var getter = function (that, index) {\n var data = that._d;\n return data.v[GETTER](index * BYTES + data.o, LITTLE_ENDIAN);\n };\n var setter = function (that, index, value) {\n var data = that._d;\n if (CLAMPED) value = (value = Math.round(value)) < 0 ? 0 : value > 0xff ? 0xff : value & 0xff;\n data.v[SETTER](index * BYTES + data.o, value, LITTLE_ENDIAN);\n };\n var addElement = function (that, index) {\n dP(that, index, {\n get: function () {\n return getter(this, index);\n },\n set: function (value) {\n return setter(this, index, value);\n },\n enumerable: true\n });\n };\n if (FORCED) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME, '_d');\n var index = 0;\n var offset = 0;\n var buffer, byteLength, length, klass;\n if (!isObject(data)) {\n length = toIndex(data);\n byteLength = length * BYTES;\n buffer = new $ArrayBuffer(byteLength);\n } else if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n buffer = data;\n offset = toOffset($offset, BYTES);\n var $len = data.byteLength;\n if ($length === undefined) {\n if ($len % BYTES) throw RangeError(WRONG_LENGTH);\n byteLength = $len - offset;\n if (byteLength < 0) throw RangeError(WRONG_LENGTH);\n } else {\n byteLength = toLength($length) * BYTES;\n if (byteLength + offset > $len) throw RangeError(WRONG_LENGTH);\n }\n length = byteLength / BYTES;\n } else if (TYPED_ARRAY in data) {\n return fromList(TypedArray, data);\n } else {\n return $from.call(TypedArray, data);\n }\n hide(that, '_d', {\n b: buffer,\n o: offset,\n l: byteLength,\n e: length,\n v: new $DataView(buffer)\n });\n while (index < length) addElement(that, index++);\n });\n TypedArrayPrototype = TypedArray[PROTOTYPE] = create($TypedArrayPrototype$);\n hide(TypedArrayPrototype, 'constructor', TypedArray);\n } else if (!fails(function () {\n TypedArray(1);\n }) || !fails(function () {\n new TypedArray(-1); // eslint-disable-line no-new\n }) || !$iterDetect(function (iter) {\n new TypedArray(); // eslint-disable-line no-new\n new TypedArray(null); // eslint-disable-line no-new\n new TypedArray(1.5); // eslint-disable-line no-new\n new TypedArray(iter); // eslint-disable-line no-new\n }, true)) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME);\n var klass;\n // `ws` module bug, temporarily remove validation length for Uint8Array\n // https://github.com/websockets/ws/pull/645\n if (!isObject(data)) return new Base(toIndex(data));\n if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n return $length !== undefined\n ? new Base(data, toOffset($offset, BYTES), $length)\n : $offset !== undefined\n ? new Base(data, toOffset($offset, BYTES))\n : new Base(data);\n }\n if (TYPED_ARRAY in data) return fromList(TypedArray, data);\n return $from.call(TypedArray, data);\n });\n arrayForEach(TAC !== Function.prototype ? gOPN(Base).concat(gOPN(TAC)) : gOPN(Base), function (key) {\n if (!(key in TypedArray)) hide(TypedArray, key, Base[key]);\n });\n TypedArray[PROTOTYPE] = TypedArrayPrototype;\n if (!LIBRARY) TypedArrayPrototype.constructor = TypedArray;\n }\n var $nativeIterator = TypedArrayPrototype[ITERATOR];\n var CORRECT_ITER_NAME = !!$nativeIterator\n && ($nativeIterator.name == 'values' || $nativeIterator.name == undefined);\n var $iterator = $iterators.values;\n hide(TypedArray, TYPED_CONSTRUCTOR, true);\n hide(TypedArrayPrototype, TYPED_ARRAY, NAME);\n hide(TypedArrayPrototype, VIEW, true);\n hide(TypedArrayPrototype, DEF_CONSTRUCTOR, TypedArray);\n\n if (CLAMPED ? new TypedArray(1)[TAG] != NAME : !(TAG in TypedArrayPrototype)) {\n dP(TypedArrayPrototype, TAG, {\n get: function () { return NAME; }\n });\n }\n\n O[NAME] = TypedArray;\n\n $export($export.G + $export.W + $export.F * (TypedArray != Base), O);\n\n $export($export.S, NAME, {\n BYTES_PER_ELEMENT: BYTES\n });\n\n $export($export.S + $export.F * fails(function () { Base.of.call(TypedArray, 1); }), NAME, {\n from: $from,\n of: $of\n });\n\n if (!(BYTES_PER_ELEMENT in TypedArrayPrototype)) hide(TypedArrayPrototype, BYTES_PER_ELEMENT, BYTES);\n\n $export($export.P, NAME, proto);\n\n setSpecies(NAME);\n\n $export($export.P + $export.F * FORCED_SET, NAME, { set: $set });\n\n $export($export.P + $export.F * !CORRECT_ITER_NAME, NAME, $iterators);\n\n if (!LIBRARY && TypedArrayPrototype.toString != arrayToString) TypedArrayPrototype.toString = arrayToString;\n\n $export($export.P + $export.F * fails(function () {\n new TypedArray(1).slice();\n }), NAME, { slice: $slice });\n\n $export($export.P + $export.F * (fails(function () {\n return [1, 2].toLocaleString() != new TypedArray([1, 2]).toLocaleString();\n }) || !fails(function () {\n TypedArrayPrototype.toLocaleString.call([1, 2]);\n })), NAME, { toLocaleString: $toLocaleString });\n\n Iterators[NAME] = CORRECT_ITER_NAME ? $nativeIterator : $iterator;\n if (!LIBRARY && !CORRECT_ITER_NAME) hide(TypedArrayPrototype, ITERATOR, $iterator);\n };\n} else module.exports = function () { /* empty */ };\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdHlwZWQtYXJyYXkuanM/ZWMzMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLElBQUksbUJBQU8sQ0FBQyxDQUFnQjtBQUM1QixnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFZO0FBQ3BDLGVBQWUsbUJBQU8sQ0FBQyxDQUFXO0FBQ2xDLGNBQWMsbUJBQU8sQ0FBQyxDQUFVO0FBQ2hDLGdCQUFnQixtQkFBTyxDQUFDLENBQVc7QUFDbkMsZUFBZSxtQkFBTyxDQUFDLEVBQVU7QUFDakMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBaUI7QUFDekMsWUFBWSxtQkFBTyxDQUFDLEVBQVE7QUFDNUIsbUJBQW1CLG1CQUFPLENBQUMsRUFBZ0I7QUFDM0MscUJBQXFCLG1CQUFPLENBQUMsRUFBa0I7QUFDL0MsYUFBYSxtQkFBTyxDQUFDLEVBQVM7QUFDOUIsb0JBQW9CLG1CQUFPLENBQUMsRUFBaUI7QUFDN0Msa0JBQWtCLG1CQUFPLENBQUMsRUFBZTtBQUN6QyxpQkFBaUIsbUJBQU8sQ0FBQyxDQUFjO0FBQ3ZDLGdCQUFnQixtQkFBTyxDQUFDLEdBQWE7QUFDckMsd0JBQXdCLG1CQUFPLENBQUMsRUFBc0I7QUFDdEQsb0JBQW9CLG1CQUFPLENBQUMsRUFBaUI7QUFDN0MsWUFBWSxtQkFBTyxDQUFDLEVBQVE7QUFDNUIsZ0JBQWdCLG1CQUFPLENBQUMsRUFBWTtBQUNwQyxpQkFBaUIsbUJBQU8sQ0FBQyxDQUFjO0FBQ3ZDLGlCQUFpQixtQkFBTyxDQUFDLENBQWM7QUFDdkMsb0JBQW9CLG1CQUFPLENBQUMsRUFBa0I7QUFDOUMsZUFBZSxtQkFBTyxDQUFDLEVBQWtCO0FBQ3pDLHVCQUF1QixtQkFBTyxDQUFDLEVBQWU7QUFDOUMsYUFBYSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3JDLGtCQUFrQixtQkFBTyxDQUFDLEVBQTRCO0FBQ3RELFlBQVksbUJBQU8sQ0FBQyxFQUFRO0FBQzVC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O0FBQ3ZDLE9BQU87QUFDUDs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTCx1REFBdUQsNkJBQTZCLEVBQUU7QUFDdEY7QUFDQTtBQUNBLEtBQUs7O0FBRUw7O0FBRUE7O0FBRUE7O0FBRUEsdURBQXVELFlBQVk7O0FBRW5FOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxLQUFLLFVBQVUsZ0JBQWdCOztBQUUvQjtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSyxXQUFXLGtDQUFrQzs7QUFFbEQ7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxvQ0FBb0MiLCJmaWxlIjoiMjcuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5pZiAocmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSkge1xuICB2YXIgTElCUkFSWSA9IHJlcXVpcmUoJy4vX2xpYnJhcnknKTtcbiAgdmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xuICB2YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xuICB2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuICB2YXIgJHR5cGVkID0gcmVxdWlyZSgnLi9fdHlwZWQnKTtcbiAgdmFyICRidWZmZXIgPSByZXF1aXJlKCcuL190eXBlZC1idWZmZXInKTtcbiAgdmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xuICB2YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG4gIHZhciBwcm9wZXJ0eURlc2MgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG4gIHZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xuICB2YXIgcmVkZWZpbmVBbGwgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKTtcbiAgdmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbiAgdmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG4gIHZhciB0b0luZGV4ID0gcmVxdWlyZSgnLi9fdG8taW5kZXgnKTtcbiAgdmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4vX3RvLWFic29sdXRlLWluZGV4Jyk7XG4gIHZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xuICB2YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG4gIHZhciBjbGFzc29mID0gcmVxdWlyZSgnLi9fY2xhc3NvZicpO1xuICB2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbiAgdmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG4gIHZhciBpc0FycmF5SXRlciA9IHJlcXVpcmUoJy4vX2lzLWFycmF5LWl0ZXInKTtcbiAgdmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKTtcbiAgdmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xuICB2YXIgZ09QTiA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJykuZjtcbiAgdmFyIGdldEl0ZXJGbiA9IHJlcXVpcmUoJy4vY29yZS5nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG4gIHZhciB1aWQgPSByZXF1aXJlKCcuL191aWQnKTtcbiAgdmFyIHdrcyA9IHJlcXVpcmUoJy4vX3drcycpO1xuICB2YXIgY3JlYXRlQXJyYXlNZXRob2QgPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJyk7XG4gIHZhciBjcmVhdGVBcnJheUluY2x1ZGVzID0gcmVxdWlyZSgnLi9fYXJyYXktaW5jbHVkZXMnKTtcbiAgdmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4vX3NwZWNpZXMtY29uc3RydWN0b3InKTtcbiAgdmFyIEFycmF5SXRlcmF0b3JzID0gcmVxdWlyZSgnLi9lczYuYXJyYXkuaXRlcmF0b3InKTtcbiAgdmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xuICB2YXIgJGl0ZXJEZXRlY3QgPSByZXF1aXJlKCcuL19pdGVyLWRldGVjdCcpO1xuICB2YXIgc2V0U3BlY2llcyA9IHJlcXVpcmUoJy4vX3NldC1zcGVjaWVzJyk7XG4gIHZhciBhcnJheUZpbGwgPSByZXF1aXJlKCcuL19hcnJheS1maWxsJyk7XG4gIHZhciBhcnJheUNvcHlXaXRoaW4gPSByZXF1aXJlKCcuL19hcnJheS1jb3B5LXdpdGhpbicpO1xuICB2YXIgJERQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG4gIHZhciAkR09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJyk7XG4gIHZhciBkUCA9ICREUC5mO1xuICB2YXIgZ09QRCA9ICRHT1BELmY7XG4gIHZhciBSYW5nZUVycm9yID0gZ2xvYmFsLlJhbmdlRXJyb3I7XG4gIHZhciBUeXBlRXJyb3IgPSBnbG9iYWwuVHlwZUVycm9yO1xuICB2YXIgVWludDhBcnJheSA9IGdsb2JhbC5VaW50OEFycmF5O1xuICB2YXIgQVJSQVlfQlVGRkVSID0gJ0FycmF5QnVmZmVyJztcbiAgdmFyIFNIQVJFRF9CVUZGRVIgPSAnU2hhcmVkJyArIEFSUkFZX0JVRkZFUjtcbiAgdmFyIEJZVEVTX1BFUl9FTEVNRU5UID0gJ0JZVEVTX1BFUl9FTEVNRU5UJztcbiAgdmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xuICB2YXIgQXJyYXlQcm90byA9IEFycmF5W1BST1RPVFlQRV07XG4gIHZhciAkQXJyYXlCdWZmZXIgPSAkYnVmZmVyLkFycmF5QnVmZmVyO1xuICB2YXIgJERhdGFWaWV3ID0gJGJ1ZmZlci5EYXRhVmlldztcbiAgdmFyIGFycmF5Rm9yRWFjaCA9IGNyZWF0ZUFycmF5TWV0aG9kKDApO1xuICB2YXIgYXJyYXlGaWx0ZXIgPSBjcmVhdGVBcnJheU1ldGhvZCgyKTtcbiAgdmFyIGFycmF5U29tZSA9IGNyZWF0ZUFycmF5TWV0aG9kKDMpO1xuICB2YXIgYXJyYXlFdmVyeSA9IGNyZWF0ZUFycmF5TWV0aG9kKDQpO1xuICB2YXIgYXJyYXlGaW5kID0gY3JlYXRlQXJyYXlNZXRob2QoNSk7XG4gIHZhciBhcnJheUZpbmRJbmRleCA9IGNyZWF0ZUFycmF5TWV0aG9kKDYpO1xuICB2YXIgYXJyYXlJbmNsdWRlcyA9IGNyZWF0ZUFycmF5SW5jbHVkZXModHJ1ZSk7XG4gIHZhciBhcnJheUluZGV4T2YgPSBjcmVhdGVBcnJheUluY2x1ZGVzKGZhbHNlKTtcbiAgdmFyIGFycmF5VmFsdWVzID0gQXJyYXlJdGVyYXRvcnMudmFsdWVzO1xuICB2YXIgYXJyYXlLZXlzID0gQXJyYXlJdGVyYXRvcnMua2V5cztcbiAgdmFyIGFycmF5RW50cmllcyA9IEFycmF5SXRlcmF0b3JzLmVudHJpZXM7XG4gIHZhciBhcnJheUxhc3RJbmRleE9mID0gQXJyYXlQcm90by5sYXN0SW5kZXhPZjtcbiAgdmFyIGFycmF5UmVkdWNlID0gQXJyYXlQcm90by5yZWR1Y2U7XG4gIHZhciBhcnJheVJlZHVjZVJpZ2h0ID0gQXJyYXlQcm90by5yZWR1Y2VSaWdodDtcbiAgdmFyIGFycmF5Sm9pbiA9IEFycmF5UHJvdG8uam9pbjtcbiAgdmFyIGFycmF5U29ydCA9IEFycmF5UHJvdG8uc29ydDtcbiAgdmFyIGFycmF5U2xpY2UgPSBBcnJheVByb3RvLnNsaWNlO1xuICB2YXIgYXJyYXlUb1N0cmluZyA9IEFycmF5UHJvdG8udG9TdHJpbmc7XG4gIHZhciBhcnJheVRvTG9jYWxlU3RyaW5nID0gQXJyYXlQcm90by50b0xvY2FsZVN0cmluZztcbiAgdmFyIElURVJBVE9SID0gd2tzKCdpdGVyYXRvcicpO1xuICB2YXIgVEFHID0gd2tzKCd0b1N0cmluZ1RhZycpO1xuICB2YXIgVFlQRURfQ09OU1RSVUNUT1IgPSB1aWQoJ3R5cGVkX2NvbnN0cnVjdG9yJyk7XG4gIHZhciBERUZfQ09OU1RSVUNUT1IgPSB1aWQoJ2RlZl9jb25zdHJ1Y3RvcicpO1xuICB2YXIgQUxMX0NPTlNUUlVDVE9SUyA9ICR0eXBlZC5DT05TVFI7XG4gIHZhciBUWVBFRF9BUlJBWSA9ICR0eXBlZC5UWVBFRDtcbiAgdmFyIFZJRVcgPSAkdHlwZWQuVklFVztcbiAgdmFyIFdST05HX0xFTkdUSCA9ICdXcm9uZyBsZW5ndGghJztcblxuICB2YXIgJG1hcCA9IGNyZWF0ZUFycmF5TWV0aG9kKDEsIGZ1bmN0aW9uIChPLCBsZW5ndGgpIHtcbiAgICByZXR1cm4gYWxsb2NhdGUoc3BlY2llc0NvbnN0cnVjdG9yKE8sIE9bREVGX0NPTlNUUlVDVE9SXSksIGxlbmd0aCk7XG4gIH0pO1xuXG4gIHZhciBMSVRUTEVfRU5ESUFOID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICAgIHJldHVybiBuZXcgVWludDhBcnJheShuZXcgVWludDE2QXJyYXkoWzFdKS5idWZmZXIpWzBdID09PSAxO1xuICB9KTtcblxuICB2YXIgRk9SQ0VEX1NFVCA9ICEhVWludDhBcnJheSAmJiAhIVVpbnQ4QXJyYXlbUFJPVE9UWVBFXS5zZXQgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIG5ldyBVaW50OEFycmF5KDEpLnNldCh7fSk7XG4gIH0pO1xuXG4gIHZhciB0b09mZnNldCA9IGZ1bmN0aW9uIChpdCwgQllURVMpIHtcbiAgICB2YXIgb2Zmc2V0ID0gdG9JbnRlZ2VyKGl0KTtcbiAgICBpZiAob2Zmc2V0IDwgMCB8fCBvZmZzZXQgJSBCWVRFUykgdGhyb3cgUmFuZ2VFcnJvcignV3Jvbmcgb2Zmc2V0IScpO1xuICAgIHJldHVybiBvZmZzZXQ7XG4gIH07XG5cbiAgdmFyIHZhbGlkYXRlID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgaWYgKGlzT2JqZWN0KGl0KSAmJiBUWVBFRF9BUlJBWSBpbiBpdCkgcmV0dXJuIGl0O1xuICAgIHRocm93IFR5cGVFcnJvcihpdCArICcgaXMgbm90IGEgdHlwZWQgYXJyYXkhJyk7XG4gIH07XG5cbiAgdmFyIGFsbG9jYXRlID0gZnVuY3Rpb24gKEMsIGxlbmd0aCkge1xuICAgIGlmICghKGlzT2JqZWN0KEMpICYmIFRZUEVEX0NPTlNUUlVDVE9SIGluIEMpKSB7XG4gICAgICB0aHJvdyBUeXBlRXJyb3IoJ0l0IGlzIG5vdCBhIHR5cGVkIGFycmF5IGNvbnN0cnVjdG9yIScpO1xuICAgIH0gcmV0dXJuIG5ldyBDKGxlbmd0aCk7XG4gIH07XG5cbiAgdmFyIHNwZWNpZXNGcm9tTGlzdCA9IGZ1bmN0aW9uIChPLCBsaXN0KSB7XG4gICAgcmV0dXJuIGZyb21MaXN0KHNwZWNpZXNDb25zdHJ1Y3RvcihPLCBPW0RFRl9DT05TVFJVQ1RPUl0pLCBsaXN0KTtcbiAgfTtcblxuICB2YXIgZnJvbUxpc3QgPSBmdW5jdGlvbiAoQywgbGlzdCkge1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGxlbmd0aCA9IGxpc3QubGVuZ3RoO1xuICAgIHZhciByZXN1bHQgPSBhbGxvY2F0ZShDLCBsZW5ndGgpO1xuICAgIHdoaWxlIChsZW5ndGggPiBpbmRleCkgcmVzdWx0W2luZGV4XSA9IGxpc3RbaW5kZXgrK107XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICB2YXIgYWRkR2V0dGVyID0gZnVuY3Rpb24gKGl0LCBrZXksIGludGVybmFsKSB7XG4gICAgZFAoaXQsIGtleSwgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMuX2RbaW50ZXJuYWxdOyB9IH0pO1xuICB9O1xuXG4gIHZhciAkZnJvbSA9IGZ1bmN0aW9uIGZyb20oc291cmNlIC8qICwgbWFwZm4sIHRoaXNBcmcgKi8pIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHNvdXJjZSk7XG4gICAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBtYXBmbiA9IGFMZW4gPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkO1xuICAgIHZhciBtYXBwaW5nID0gbWFwZm4gIT09IHVuZGVmaW5lZDtcbiAgICB2YXIgaXRlckZuID0gZ2V0SXRlckZuKE8pO1xuICAgIHZhciBpLCBsZW5ndGgsIHZhbHVlcywgcmVzdWx0LCBzdGVwLCBpdGVyYXRvcjtcbiAgICBpZiAoaXRlckZuICE9IHVuZGVmaW5lZCAmJiAhaXNBcnJheUl0ZXIoaXRlckZuKSkge1xuICAgICAgZm9yIChpdGVyYXRvciA9IGl0ZXJGbi5jYWxsKE8pLCB2YWx1ZXMgPSBbXSwgaSA9IDA7ICEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZTsgaSsrKSB7XG4gICAgICAgIHZhbHVlcy5wdXNoKHN0ZXAudmFsdWUpO1xuICAgICAgfSBPID0gdmFsdWVzO1xuICAgIH1cbiAgICBpZiAobWFwcGluZyAmJiBhTGVuID4gMikgbWFwZm4gPSBjdHgobWFwZm4sIGFyZ3VtZW50c1syXSwgMik7XG4gICAgZm9yIChpID0gMCwgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpLCByZXN1bHQgPSBhbGxvY2F0ZSh0aGlzLCBsZW5ndGgpOyBsZW5ndGggPiBpOyBpKyspIHtcbiAgICAgIHJlc3VsdFtpXSA9IG1hcHBpbmcgPyBtYXBmbihPW2ldLCBpKSA6IE9baV07XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgdmFyICRvZiA9IGZ1bmN0aW9uIG9mKC8qIC4uLml0ZW1zICovKSB7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgcmVzdWx0ID0gYWxsb2NhdGUodGhpcywgbGVuZ3RoKTtcbiAgICB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIHJlc3VsdFtpbmRleF0gPSBhcmd1bWVudHNbaW5kZXgrK107XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvLyBpT1MgU2FmYXJpIDYueCBmYWlscyBoZXJlXG4gIHZhciBUT19MT0NBTEVfQlVHID0gISFVaW50OEFycmF5ICYmIGZhaWxzKGZ1bmN0aW9uICgpIHsgYXJyYXlUb0xvY2FsZVN0cmluZy5jYWxsKG5ldyBVaW50OEFycmF5KDEpKTsgfSk7XG5cbiAgdmFyICR0b0xvY2FsZVN0cmluZyA9IGZ1bmN0aW9uIHRvTG9jYWxlU3RyaW5nKCkge1xuICAgIHJldHVybiBhcnJheVRvTG9jYWxlU3RyaW5nLmFwcGx5KFRPX0xPQ0FMRV9CVUcgPyBhcnJheVNsaWNlLmNhbGwodmFsaWRhdGUodGhpcykpIDogdmFsaWRhdGUodGhpcyksIGFyZ3VtZW50cyk7XG4gIH07XG5cbiAgdmFyIHByb3RvID0ge1xuICAgIGNvcHlXaXRoaW46IGZ1bmN0aW9uIGNvcHlXaXRoaW4odGFyZ2V0LCBzdGFydCAvKiAsIGVuZCAqLykge1xuICAgICAgcmV0dXJuIGFycmF5Q29weVdpdGhpbi5jYWxsKHZhbGlkYXRlKHRoaXMpLCB0YXJnZXQsIHN0YXJ0LCBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBldmVyeTogZnVuY3Rpb24gZXZlcnkoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICAgIHJldHVybiBhcnJheUV2ZXJ5KHZhbGlkYXRlKHRoaXMpLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBmaWxsOiBmdW5jdGlvbiBmaWxsKHZhbHVlIC8qICwgc3RhcnQsIGVuZCAqLykgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgICByZXR1cm4gYXJyYXlGaWxsLmFwcGx5KHZhbGlkYXRlKHRoaXMpLCBhcmd1bWVudHMpO1xuICAgIH0sXG4gICAgZmlsdGVyOiBmdW5jdGlvbiBmaWx0ZXIoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICAgIHJldHVybiBzcGVjaWVzRnJvbUxpc3QodGhpcywgYXJyYXlGaWx0ZXIodmFsaWRhdGUodGhpcyksIGNhbGxiYWNrZm4sXG4gICAgICAgIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKSk7XG4gICAgfSxcbiAgICBmaW5kOiBmdW5jdGlvbiBmaW5kKHByZWRpY2F0ZSAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICAgIHJldHVybiBhcnJheUZpbmQodmFsaWRhdGUodGhpcyksIHByZWRpY2F0ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgZmluZEluZGV4OiBmdW5jdGlvbiBmaW5kSW5kZXgocHJlZGljYXRlIC8qICwgdGhpc0FyZyAqLykge1xuICAgICAgcmV0dXJuIGFycmF5RmluZEluZGV4KHZhbGlkYXRlKHRoaXMpLCBwcmVkaWNhdGUsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgIGZvckVhY2g6IGZ1bmN0aW9uIGZvckVhY2goY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICAgIGFycmF5Rm9yRWFjaCh2YWxpZGF0ZSh0aGlzKSwgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgaW5kZXhPZjogZnVuY3Rpb24gaW5kZXhPZihzZWFyY2hFbGVtZW50IC8qICwgZnJvbUluZGV4ICovKSB7XG4gICAgICByZXR1cm4gYXJyYXlJbmRleE9mKHZhbGlkYXRlKHRoaXMpLCBzZWFyY2hFbGVtZW50LCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBpbmNsdWRlczogZnVuY3Rpb24gaW5jbHVkZXMoc2VhcmNoRWxlbWVudCAvKiAsIGZyb21JbmRleCAqLykge1xuICAgICAgcmV0dXJuIGFycmF5SW5jbHVkZXModmFsaWRhdGUodGhpcyksIHNlYXJjaEVsZW1lbnQsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgIGpvaW46IGZ1bmN0aW9uIGpvaW4oc2VwYXJhdG9yKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICAgIHJldHVybiBhcnJheUpvaW4uYXBwbHkodmFsaWRhdGUodGhpcyksIGFyZ3VtZW50cyk7XG4gICAgfSxcbiAgICBsYXN0SW5kZXhPZjogZnVuY3Rpb24gbGFzdEluZGV4T2Yoc2VhcmNoRWxlbWVudCAvKiAsIGZyb21JbmRleCAqLykgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgICByZXR1cm4gYXJyYXlMYXN0SW5kZXhPZi5hcHBseSh2YWxpZGF0ZSh0aGlzKSwgYXJndW1lbnRzKTtcbiAgICB9LFxuICAgIG1hcDogZnVuY3Rpb24gbWFwKG1hcGZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgICAgcmV0dXJuICRtYXAodmFsaWRhdGUodGhpcyksIG1hcGZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICByZWR1Y2U6IGZ1bmN0aW9uIHJlZHVjZShjYWxsYmFja2ZuIC8qICwgaW5pdGlhbFZhbHVlICovKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICAgIHJldHVybiBhcnJheVJlZHVjZS5hcHBseSh2YWxpZGF0ZSh0aGlzKSwgYXJndW1lbnRzKTtcbiAgICB9LFxuICAgIHJlZHVjZVJpZ2h0OiBmdW5jdGlvbiByZWR1Y2VSaWdodChjYWxsYmFja2ZuIC8qICwgaW5pdGlhbFZhbHVlICovKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICAgIHJldHVybiBhcnJheVJlZHVjZVJpZ2h0LmFwcGx5KHZhbGlkYXRlKHRoaXMpLCBhcmd1bWVudHMpO1xuICAgIH0sXG4gICAgcmV2ZXJzZTogZnVuY3Rpb24gcmV2ZXJzZSgpIHtcbiAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgIHZhciBsZW5ndGggPSB2YWxpZGF0ZSh0aGF0KS5sZW5ndGg7XG4gICAgICB2YXIgbWlkZGxlID0gTWF0aC5mbG9vcihsZW5ndGggLyAyKTtcbiAgICAgIHZhciBpbmRleCA9IDA7XG4gICAgICB2YXIgdmFsdWU7XG4gICAgICB3aGlsZSAoaW5kZXggPCBtaWRkbGUpIHtcbiAgICAgICAgdmFsdWUgPSB0aGF0W2luZGV4XTtcbiAgICAgICAgdGhhdFtpbmRleCsrXSA9IHRoYXRbLS1sZW5ndGhdO1xuICAgICAgICB0aGF0W2xlbmd0aF0gPSB2YWx1ZTtcbiAgICAgIH0gcmV0dXJuIHRoYXQ7XG4gICAgfSxcbiAgICBzb21lOiBmdW5jdGlvbiBzb21lKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgICByZXR1cm4gYXJyYXlTb21lKHZhbGlkYXRlKHRoaXMpLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBzb3J0OiBmdW5jdGlvbiBzb3J0KGNvbXBhcmVmbikge1xuICAgICAgcmV0dXJuIGFycmF5U29ydC5jYWxsKHZhbGlkYXRlKHRoaXMpLCBjb21wYXJlZm4pO1xuICAgIH0sXG4gICAgc3ViYXJyYXk6IGZ1bmN0aW9uIHN1YmFycmF5KGJlZ2luLCBlbmQpIHtcbiAgICAgIHZhciBPID0gdmFsaWRhdGUodGhpcyk7XG4gICAgICB2YXIgbGVuZ3RoID0gTy5sZW5ndGg7XG4gICAgICB2YXIgJGJlZ2luID0gdG9BYnNvbHV0ZUluZGV4KGJlZ2luLCBsZW5ndGgpO1xuICAgICAgcmV0dXJuIG5ldyAoc3BlY2llc0NvbnN0cnVjdG9yKE8sIE9bREVGX0NPTlNUUlVDVE9SXSkpKFxuICAgICAgICBPLmJ1ZmZlcixcbiAgICAgICAgTy5ieXRlT2Zmc2V0ICsgJGJlZ2luICogTy5CWVRFU19QRVJfRUxFTUVOVCxcbiAgICAgICAgdG9MZW5ndGgoKGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuZ3RoIDogdG9BYnNvbHV0ZUluZGV4KGVuZCwgbGVuZ3RoKSkgLSAkYmVnaW4pXG4gICAgICApO1xuICAgIH1cbiAgfTtcblxuICB2YXIgJHNsaWNlID0gZnVuY3Rpb24gc2xpY2Uoc3RhcnQsIGVuZCkge1xuICAgIHJldHVybiBzcGVjaWVzRnJvbUxpc3QodGhpcywgYXJyYXlTbGljZS5jYWxsKHZhbGlkYXRlKHRoaXMpLCBzdGFydCwgZW5kKSk7XG4gIH07XG5cbiAgdmFyICRzZXQgPSBmdW5jdGlvbiBzZXQoYXJyYXlMaWtlIC8qICwgb2Zmc2V0ICovKSB7XG4gICAgdmFsaWRhdGUodGhpcyk7XG4gICAgdmFyIG9mZnNldCA9IHRvT2Zmc2V0KGFyZ3VtZW50c1sxXSwgMSk7XG4gICAgdmFyIGxlbmd0aCA9IHRoaXMubGVuZ3RoO1xuICAgIHZhciBzcmMgPSB0b09iamVjdChhcnJheUxpa2UpO1xuICAgIHZhciBsZW4gPSB0b0xlbmd0aChzcmMubGVuZ3RoKTtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIGlmIChsZW4gKyBvZmZzZXQgPiBsZW5ndGgpIHRocm93IFJhbmdlRXJyb3IoV1JPTkdfTEVOR1RIKTtcbiAgICB3aGlsZSAoaW5kZXggPCBsZW4pIHRoaXNbb2Zmc2V0ICsgaW5kZXhdID0gc3JjW2luZGV4KytdO1xuICB9O1xuXG4gIHZhciAkaXRlcmF0b3JzID0ge1xuICAgIGVudHJpZXM6IGZ1bmN0aW9uIGVudHJpZXMoKSB7XG4gICAgICByZXR1cm4gYXJyYXlFbnRyaWVzLmNhbGwodmFsaWRhdGUodGhpcykpO1xuICAgIH0sXG4gICAga2V5czogZnVuY3Rpb24ga2V5cygpIHtcbiAgICAgIHJldHVybiBhcnJheUtleXMuY2FsbCh2YWxpZGF0ZSh0aGlzKSk7XG4gICAgfSxcbiAgICB2YWx1ZXM6IGZ1bmN0aW9uIHZhbHVlcygpIHtcbiAgICAgIHJldHVybiBhcnJheVZhbHVlcy5jYWxsKHZhbGlkYXRlKHRoaXMpKTtcbiAgICB9XG4gIH07XG5cbiAgdmFyIGlzVEFJbmRleCA9IGZ1bmN0aW9uICh0YXJnZXQsIGtleSkge1xuICAgIHJldHVybiBpc09iamVjdCh0YXJnZXQpXG4gICAgICAmJiB0YXJnZXRbVFlQRURfQVJSQVldXG4gICAgICAmJiB0eXBlb2Yga2V5ICE9ICdzeW1ib2wnXG4gICAgICAmJiBrZXkgaW4gdGFyZ2V0XG4gICAgICAmJiBTdHJpbmcoK2tleSkgPT0gU3RyaW5nKGtleSk7XG4gIH07XG4gIHZhciAkZ2V0RGVzYyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkge1xuICAgIHJldHVybiBpc1RBSW5kZXgodGFyZ2V0LCBrZXkgPSB0b1ByaW1pdGl2ZShrZXksIHRydWUpKVxuICAgICAgPyBwcm9wZXJ0eURlc2MoMiwgdGFyZ2V0W2tleV0pXG4gICAgICA6IGdPUEQodGFyZ2V0LCBrZXkpO1xuICB9O1xuICB2YXIgJHNldERlc2MgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgZGVzYykge1xuICAgIGlmIChpc1RBSW5kZXgodGFyZ2V0LCBrZXkgPSB0b1ByaW1pdGl2ZShrZXksIHRydWUpKVxuICAgICAgJiYgaXNPYmplY3QoZGVzYylcbiAgICAgICYmIGhhcyhkZXNjLCAndmFsdWUnKVxuICAgICAgJiYgIWhhcyhkZXNjLCAnZ2V0JylcbiAgICAgICYmICFoYXMoZGVzYywgJ3NldCcpXG4gICAgICAvLyBUT0RPOiBhZGQgdmFsaWRhdGlvbiBkZXNjcmlwdG9yIHcvbyBjYWxsaW5nIGFjY2Vzc29yc1xuICAgICAgJiYgIWRlc2MuY29uZmlndXJhYmxlXG4gICAgICAmJiAoIWhhcyhkZXNjLCAnd3JpdGFibGUnKSB8fCBkZXNjLndyaXRhYmxlKVxuICAgICAgJiYgKCFoYXMoZGVzYywgJ2VudW1lcmFibGUnKSB8fCBkZXNjLmVudW1lcmFibGUpXG4gICAgKSB7XG4gICAgICB0YXJnZXRba2V5XSA9IGRlc2MudmFsdWU7XG4gICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH0gcmV0dXJuIGRQKHRhcmdldCwga2V5LCBkZXNjKTtcbiAgfTtcblxuICBpZiAoIUFMTF9DT05TVFJVQ1RPUlMpIHtcbiAgICAkR09QRC5mID0gJGdldERlc2M7XG4gICAgJERQLmYgPSAkc2V0RGVzYztcbiAgfVxuXG4gICRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIUFMTF9DT05TVFJVQ1RPUlMsICdPYmplY3QnLCB7XG4gICAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiAkZ2V0RGVzYyxcbiAgICBkZWZpbmVQcm9wZXJ0eTogJHNldERlc2NcbiAgfSk7XG5cbiAgaWYgKGZhaWxzKGZ1bmN0aW9uICgpIHsgYXJyYXlUb1N0cmluZy5jYWxsKHt9KTsgfSkpIHtcbiAgICBhcnJheVRvU3RyaW5nID0gYXJyYXlUb0xvY2FsZVN0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgICAgcmV0dXJuIGFycmF5Sm9pbi5jYWxsKHRoaXMpO1xuICAgIH07XG4gIH1cblxuICB2YXIgJFR5cGVkQXJyYXlQcm90b3R5cGUkID0gcmVkZWZpbmVBbGwoe30sIHByb3RvKTtcbiAgcmVkZWZpbmVBbGwoJFR5cGVkQXJyYXlQcm90b3R5cGUkLCAkaXRlcmF0b3JzKTtcbiAgaGlkZSgkVHlwZWRBcnJheVByb3RvdHlwZSQsIElURVJBVE9SLCAkaXRlcmF0b3JzLnZhbHVlcyk7XG4gIHJlZGVmaW5lQWxsKCRUeXBlZEFycmF5UHJvdG90eXBlJCwge1xuICAgIHNsaWNlOiAkc2xpY2UsXG4gICAgc2V0OiAkc2V0LFxuICAgIGNvbnN0cnVjdG9yOiBmdW5jdGlvbiAoKSB7IC8qIG5vb3AgKi8gfSxcbiAgICB0b1N0cmluZzogYXJyYXlUb1N0cmluZyxcbiAgICB0b0xvY2FsZVN0cmluZzogJHRvTG9jYWxlU3RyaW5nXG4gIH0pO1xuICBhZGRHZXR0ZXIoJFR5cGVkQXJyYXlQcm90b3R5cGUkLCAnYnVmZmVyJywgJ2InKTtcbiAgYWRkR2V0dGVyKCRUeXBlZEFycmF5UHJvdG90eXBlJCwgJ2J5dGVPZmZzZXQnLCAnbycpO1xuICBhZGRHZXR0ZXIoJFR5cGVkQXJyYXlQcm90b3R5cGUkLCAnYnl0ZUxlbmd0aCcsICdsJyk7XG4gIGFkZEdldHRlcigkVHlwZWRBcnJheVByb3RvdHlwZSQsICdsZW5ndGgnLCAnZScpO1xuICBkUCgkVHlwZWRBcnJheVByb3RvdHlwZSQsIFRBRywge1xuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpc1tUWVBFRF9BUlJBWV07IH1cbiAgfSk7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1zdGF0ZW1lbnRzXG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEtFWSwgQllURVMsIHdyYXBwZXIsIENMQU1QRUQpIHtcbiAgICBDTEFNUEVEID0gISFDTEFNUEVEO1xuICAgIHZhciBOQU1FID0gS0VZICsgKENMQU1QRUQgPyAnQ2xhbXBlZCcgOiAnJykgKyAnQXJyYXknO1xuICAgIHZhciBHRVRURVIgPSAnZ2V0JyArIEtFWTtcbiAgICB2YXIgU0VUVEVSID0gJ3NldCcgKyBLRVk7XG4gICAgdmFyIFR5cGVkQXJyYXkgPSBnbG9iYWxbTkFNRV07XG4gICAgdmFyIEJhc2UgPSBUeXBlZEFycmF5IHx8IHt9O1xuICAgIHZhciBUQUMgPSBUeXBlZEFycmF5ICYmIGdldFByb3RvdHlwZU9mKFR5cGVkQXJyYXkpO1xuICAgIHZhciBGT1JDRUQgPSAhVHlwZWRBcnJheSB8fCAhJHR5cGVkLkFCVjtcbiAgICB2YXIgTyA9IHt9O1xuICAgIHZhciBUeXBlZEFycmF5UHJvdG90eXBlID0gVHlwZWRBcnJheSAmJiBUeXBlZEFycmF5W1BST1RPVFlQRV07XG4gICAgdmFyIGdldHRlciA9IGZ1bmN0aW9uICh0aGF0LCBpbmRleCkge1xuICAgICAgdmFyIGRhdGEgPSB0aGF0Ll9kO1xuICAgICAgcmV0dXJuIGRhdGEudltHRVRURVJdKGluZGV4ICogQllURVMgKyBkYXRhLm8sIExJVFRMRV9FTkRJQU4pO1xuICAgIH07XG4gICAgdmFyIHNldHRlciA9IGZ1bmN0aW9uICh0aGF0LCBpbmRleCwgdmFsdWUpIHtcbiAgICAgIHZhciBkYXRhID0gdGhhdC5fZDtcbiAgICAgIGlmIChDTEFNUEVEKSB2YWx1ZSA9ICh2YWx1ZSA9IE1hdGgucm91bmQodmFsdWUpKSA8IDAgPyAwIDogdmFsdWUgPiAweGZmID8gMHhmZiA6IHZhbHVlICYgMHhmZjtcbiAgICAgIGRhdGEudltTRVRURVJdKGluZGV4ICogQllURVMgKyBkYXRhLm8sIHZhbHVlLCBMSVRUTEVfRU5ESUFOKTtcbiAgICB9O1xuICAgIHZhciBhZGRFbGVtZW50ID0gZnVuY3Rpb24gKHRoYXQsIGluZGV4KSB7XG4gICAgICBkUCh0aGF0LCBpbmRleCwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gZ2V0dGVyKHRoaXMsIGluZGV4KTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICByZXR1cm4gc2V0dGVyKHRoaXMsIGluZGV4LCB2YWx1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IHRydWVcbiAgICAgIH0pO1xuICAgIH07XG4gICAgaWYgKEZPUkNFRCkge1xuICAgICAgVHlwZWRBcnJheSA9IHdyYXBwZXIoZnVuY3Rpb24gKHRoYXQsIGRhdGEsICRvZmZzZXQsICRsZW5ndGgpIHtcbiAgICAgICAgYW5JbnN0YW5jZSh0aGF0LCBUeXBlZEFycmF5LCBOQU1FLCAnX2QnKTtcbiAgICAgICAgdmFyIGluZGV4ID0gMDtcbiAgICAgICAgdmFyIG9mZnNldCA9IDA7XG4gICAgICAgIHZhciBidWZmZXIsIGJ5dGVMZW5ndGgsIGxlbmd0aCwga2xhc3M7XG4gICAgICAgIGlmICghaXNPYmplY3QoZGF0YSkpIHtcbiAgICAgICAgICBsZW5ndGggPSB0b0luZGV4KGRhdGEpO1xuICAgICAgICAgIGJ5dGVMZW5ndGggPSBsZW5ndGggKiBCWVRFUztcbiAgICAgICAgICBidWZmZXIgPSBuZXcgJEFycmF5QnVmZmVyKGJ5dGVMZW5ndGgpO1xuICAgICAgICB9IGVsc2UgaWYgKGRhdGEgaW5zdGFuY2VvZiAkQXJyYXlCdWZmZXIgfHwgKGtsYXNzID0gY2xhc3NvZihkYXRhKSkgPT0gQVJSQVlfQlVGRkVSIHx8IGtsYXNzID09IFNIQVJFRF9CVUZGRVIpIHtcbiAgICAgICAgICBidWZmZXIgPSBkYXRhO1xuICAgICAgICAgIG9mZnNldCA9IHRvT2Zmc2V0KCRvZmZzZXQsIEJZVEVTKTtcbiAgICAgICAgICB2YXIgJGxlbiA9IGRhdGEuYnl0ZUxlbmd0aDtcbiAgICAgICAgICBpZiAoJGxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBpZiAoJGxlbiAlIEJZVEVTKSB0aHJvdyBSYW5nZUVycm9yKFdST05HX0xFTkdUSCk7XG4gICAgICAgICAgICBieXRlTGVuZ3RoID0gJGxlbiAtIG9mZnNldDtcbiAgICAgICAgICAgIGlmIChieXRlTGVuZ3RoIDwgMCkgdGhyb3cgUmFuZ2VFcnJvcihXUk9OR19MRU5HVEgpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBieXRlTGVuZ3RoID0gdG9MZW5ndGgoJGxlbmd0aCkgKiBCWVRFUztcbiAgICAgICAgICAgIGlmIChieXRlTGVuZ3RoICsgb2Zmc2V0ID4gJGxlbikgdGhyb3cgUmFuZ2VFcnJvcihXUk9OR19MRU5HVEgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBsZW5ndGggPSBieXRlTGVuZ3RoIC8gQllURVM7XG4gICAgICAgIH0gZWxzZSBpZiAoVFlQRURfQVJSQVkgaW4gZGF0YSkge1xuICAgICAgICAgIHJldHVybiBmcm9tTGlzdChUeXBlZEFycmF5LCBkYXRhKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gJGZyb20uY2FsbChUeXBlZEFycmF5LCBkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBoaWRlKHRoYXQsICdfZCcsIHtcbiAgICAgICAgICBiOiBidWZmZXIsXG4gICAgICAgICAgbzogb2Zmc2V0LFxuICAgICAgICAgIGw6IGJ5dGVMZW5ndGgsXG4gICAgICAgICAgZTogbGVuZ3RoLFxuICAgICAgICAgIHY6IG5ldyAkRGF0YVZpZXcoYnVmZmVyKVxuICAgICAgICB9KTtcbiAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSBhZGRFbGVtZW50KHRoYXQsIGluZGV4KyspO1xuICAgICAgfSk7XG4gICAgICBUeXBlZEFycmF5UHJvdG90eXBlID0gVHlwZWRBcnJheVtQUk9UT1RZUEVdID0gY3JlYXRlKCRUeXBlZEFycmF5UHJvdG90eXBlJCk7XG4gICAgICBoaWRlKFR5cGVkQXJyYXlQcm90b3R5cGUsICdjb25zdHJ1Y3RvcicsIFR5cGVkQXJyYXkpO1xuICAgIH0gZWxzZSBpZiAoIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAgIFR5cGVkQXJyYXkoMSk7XG4gICAgfSkgfHwgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAgIG5ldyBUeXBlZEFycmF5KC0xKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICB9KSB8fCAhJGl0ZXJEZXRlY3QoZnVuY3Rpb24gKGl0ZXIpIHtcbiAgICAgIG5ldyBUeXBlZEFycmF5KCk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgICBuZXcgVHlwZWRBcnJheShudWxsKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICAgIG5ldyBUeXBlZEFycmF5KDEuNSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgICBuZXcgVHlwZWRBcnJheShpdGVyKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICB9LCB0cnVlKSkge1xuICAgICAgVHlwZWRBcnJheSA9IHdyYXBwZXIoZnVuY3Rpb24gKHRoYXQsIGRhdGEsICRvZmZzZXQsICRsZW5ndGgpIHtcbiAgICAgICAgYW5JbnN0YW5jZSh0aGF0LCBUeXBlZEFycmF5LCBOQU1FKTtcbiAgICAgICAgdmFyIGtsYXNzO1xuICAgICAgICAvLyBgd3NgIG1vZHVsZSBidWcsIHRlbXBvcmFyaWx5IHJlbW92ZSB2YWxpZGF0aW9uIGxlbmd0aCBmb3IgVWludDhBcnJheVxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vd2Vic29ja2V0cy93cy9wdWxsLzY0NVxuICAgICAgICBpZiAoIWlzT2JqZWN0KGRhdGEpKSByZXR1cm4gbmV3IEJhc2UodG9JbmRleChkYXRhKSk7XG4gICAgICAgIGlmIChkYXRhIGluc3RhbmNlb2YgJEFycmF5QnVmZmVyIHx8IChrbGFzcyA9IGNsYXNzb2YoZGF0YSkpID09IEFSUkFZX0JVRkZFUiB8fCBrbGFzcyA9PSBTSEFSRURfQlVGRkVSKSB7XG4gICAgICAgICAgcmV0dXJuICRsZW5ndGggIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyBuZXcgQmFzZShkYXRhLCB0b09mZnNldCgkb2Zmc2V0LCBCWVRFUyksICRsZW5ndGgpXG4gICAgICAgICAgICA6ICRvZmZzZXQgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICA/IG5ldyBCYXNlKGRhdGEsIHRvT2Zmc2V0KCRvZmZzZXQsIEJZVEVTKSlcbiAgICAgICAgICAgICAgOiBuZXcgQmFzZShkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoVFlQRURfQVJSQVkgaW4gZGF0YSkgcmV0dXJuIGZyb21MaXN0KFR5cGVkQXJyYXksIGRhdGEpO1xuICAgICAgICByZXR1cm4gJGZyb20uY2FsbChUeXBlZEFycmF5LCBkYXRhKTtcbiAgICAgIH0pO1xuICAgICAgYXJyYXlGb3JFYWNoKFRBQyAhPT0gRnVuY3Rpb24ucHJvdG90eXBlID8gZ09QTihCYXNlKS5jb25jYXQoZ09QTihUQUMpKSA6IGdPUE4oQmFzZSksIGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgaWYgKCEoa2V5IGluIFR5cGVkQXJyYXkpKSBoaWRlKFR5cGVkQXJyYXksIGtleSwgQmFzZVtrZXldKTtcbiAgICAgIH0pO1xuICAgICAgVHlwZWRBcnJheVtQUk9UT1RZUEVdID0gVHlwZWRBcnJheVByb3RvdHlwZTtcbiAgICAgIGlmICghTElCUkFSWSkgVHlwZWRBcnJheVByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFR5cGVkQXJyYXk7XG4gICAgfVxuICAgIHZhciAkbmF0aXZlSXRlcmF0b3IgPSBUeXBlZEFycmF5UHJvdG90eXBlW0lURVJBVE9SXTtcbiAgICB2YXIgQ09SUkVDVF9JVEVSX05BTUUgPSAhISRuYXRpdmVJdGVyYXRvclxuICAgICAgJiYgKCRuYXRpdmVJdGVyYXRvci5uYW1lID09ICd2YWx1ZXMnIHx8ICRuYXRpdmVJdGVyYXRvci5uYW1lID09IHVuZGVmaW5lZCk7XG4gICAgdmFyICRpdGVyYXRvciA9ICRpdGVyYXRvcnMudmFsdWVzO1xuICAgIGhpZGUoVHlwZWRBcnJheSwgVFlQRURfQ09OU1RSVUNUT1IsIHRydWUpO1xuICAgIGhpZGUoVHlwZWRBcnJheVByb3RvdHlwZSwgVFlQRURfQVJSQVksIE5BTUUpO1xuICAgIGhpZGUoVHlwZWRBcnJheVByb3RvdHlwZSwgVklFVywgdHJ1ZSk7XG4gICAgaGlkZShUeXBlZEFycmF5UHJvdG90eXBlLCBERUZfQ09OU1RSVUNUT1IsIFR5cGVkQXJyYXkpO1xuXG4gICAgaWYgKENMQU1QRUQgPyBuZXcgVHlwZWRBcnJheSgxKVtUQUddICE9IE5BTUUgOiAhKFRBRyBpbiBUeXBlZEFycmF5UHJvdG90eXBlKSkge1xuICAgICAgZFAoVHlwZWRBcnJheVByb3RvdHlwZSwgVEFHLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gTkFNRTsgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgT1tOQU1FXSA9IFR5cGVkQXJyYXk7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuVyArICRleHBvcnQuRiAqIChUeXBlZEFycmF5ICE9IEJhc2UpLCBPKTtcblxuICAgICRleHBvcnQoJGV4cG9ydC5TLCBOQU1FLCB7XG4gICAgICBCWVRFU19QRVJfRUxFTUVOVDogQllURVNcbiAgICB9KTtcblxuICAgICRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogZmFpbHMoZnVuY3Rpb24gKCkgeyBCYXNlLm9mLmNhbGwoVHlwZWRBcnJheSwgMSk7IH0pLCBOQU1FLCB7XG4gICAgICBmcm9tOiAkZnJvbSxcbiAgICAgIG9mOiAkb2ZcbiAgICB9KTtcblxuICAgIGlmICghKEJZVEVTX1BFUl9FTEVNRU5UIGluIFR5cGVkQXJyYXlQcm90b3R5cGUpKSBoaWRlKFR5cGVkQXJyYXlQcm90b3R5cGUsIEJZVEVTX1BFUl9FTEVNRU5ULCBCWVRFUyk7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuUCwgTkFNRSwgcHJvdG8pO1xuXG4gICAgc2V0U3BlY2llcyhOQU1FKTtcblxuICAgICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogRk9SQ0VEX1NFVCwgTkFNRSwgeyBzZXQ6ICRzZXQgfSk7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFDT1JSRUNUX0lURVJfTkFNRSwgTkFNRSwgJGl0ZXJhdG9ycyk7XG5cbiAgICBpZiAoIUxJQlJBUlkgJiYgVHlwZWRBcnJheVByb3RvdHlwZS50b1N0cmluZyAhPSBhcnJheVRvU3RyaW5nKSBUeXBlZEFycmF5UHJvdG90eXBlLnRvU3RyaW5nID0gYXJyYXlUb1N0cmluZztcblxuICAgICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgICAgbmV3IFR5cGVkQXJyYXkoMSkuc2xpY2UoKTtcbiAgICB9KSwgTkFNRSwgeyBzbGljZTogJHNsaWNlIH0pO1xuXG4gICAgJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIFsxLCAyXS50b0xvY2FsZVN0cmluZygpICE9IG5ldyBUeXBlZEFycmF5KFsxLCAyXSkudG9Mb2NhbGVTdHJpbmcoKTtcbiAgICB9KSB8fCAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgICAgVHlwZWRBcnJheVByb3RvdHlwZS50b0xvY2FsZVN0cmluZy5jYWxsKFsxLCAyXSk7XG4gICAgfSkpLCBOQU1FLCB7IHRvTG9jYWxlU3RyaW5nOiAkdG9Mb2NhbGVTdHJpbmcgfSk7XG5cbiAgICBJdGVyYXRvcnNbTkFNRV0gPSBDT1JSRUNUX0lURVJfTkFNRSA/ICRuYXRpdmVJdGVyYXRvciA6ICRpdGVyYXRvcjtcbiAgICBpZiAoIUxJQlJBUlkgJiYgIUNPUlJFQ1RfSVRFUl9OQU1FKSBoaWRlKFR5cGVkQXJyYXlQcm90b3R5cGUsIElURVJBVE9SLCAkaXRlcmF0b3IpO1xuICB9O1xufSBlbHNlIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///27\n")},function(module,exports,__webpack_require__){eval("var Map = __webpack_require__(117);\nvar $export = __webpack_require__(0);\nvar shared = __webpack_require__(47)('metadata');\nvar store = shared.store || (shared.store = new (__webpack_require__(120))());\n\nvar getOrCreateMetadataMap = function (target, targetKey, create) {\n var targetMetadata = store.get(target);\n if (!targetMetadata) {\n if (!create) return undefined;\n store.set(target, targetMetadata = new Map());\n }\n var keyMetadata = targetMetadata.get(targetKey);\n if (!keyMetadata) {\n if (!create) return undefined;\n targetMetadata.set(targetKey, keyMetadata = new Map());\n } return keyMetadata;\n};\nvar ordinaryHasOwnMetadata = function (MetadataKey, O, P) {\n var metadataMap = getOrCreateMetadataMap(O, P, false);\n return metadataMap === undefined ? false : metadataMap.has(MetadataKey);\n};\nvar ordinaryGetOwnMetadata = function (MetadataKey, O, P) {\n var metadataMap = getOrCreateMetadataMap(O, P, false);\n return metadataMap === undefined ? undefined : metadataMap.get(MetadataKey);\n};\nvar ordinaryDefineOwnMetadata = function (MetadataKey, MetadataValue, O, P) {\n getOrCreateMetadataMap(O, P, true).set(MetadataKey, MetadataValue);\n};\nvar ordinaryOwnMetadataKeys = function (target, targetKey) {\n var metadataMap = getOrCreateMetadataMap(target, targetKey, false);\n var keys = [];\n if (metadataMap) metadataMap.forEach(function (_, key) { keys.push(key); });\n return keys;\n};\nvar toMetaKey = function (it) {\n return it === undefined || typeof it == 'symbol' ? it : String(it);\n};\nvar exp = function (O) {\n $export($export.S, 'Reflect', O);\n};\n\nmodule.exports = {\n store: store,\n map: getOrCreateMetadataMap,\n has: ordinaryHasOwnMetadata,\n get: ordinaryGetOwnMetadata,\n set: ordinaryDefineOwnMetadata,\n keys: ordinaryOwnMetadataKeys,\n key: toMetaKey,\n exp: exp\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWV0YWRhdGEuanM/MzdhNyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxVQUFVLG1CQUFPLENBQUMsR0FBVztBQUM3QixjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxhQUFhLG1CQUFPLENBQUMsRUFBVztBQUNoQyxpREFBaUQsbUJBQU8sQ0FBQyxHQUFnQjs7QUFFekU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMERBQTBELGdCQUFnQixFQUFFO0FBQzVFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMjguanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgTWFwID0gcmVxdWlyZSgnLi9lczYubWFwJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4vX3NoYXJlZCcpKCdtZXRhZGF0YScpO1xudmFyIHN0b3JlID0gc2hhcmVkLnN0b3JlIHx8IChzaGFyZWQuc3RvcmUgPSBuZXcgKHJlcXVpcmUoJy4vZXM2LndlYWstbWFwJykpKCkpO1xuXG52YXIgZ2V0T3JDcmVhdGVNZXRhZGF0YU1hcCA9IGZ1bmN0aW9uICh0YXJnZXQsIHRhcmdldEtleSwgY3JlYXRlKSB7XG4gIHZhciB0YXJnZXRNZXRhZGF0YSA9IHN0b3JlLmdldCh0YXJnZXQpO1xuICBpZiAoIXRhcmdldE1ldGFkYXRhKSB7XG4gICAgaWYgKCFjcmVhdGUpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgc3RvcmUuc2V0KHRhcmdldCwgdGFyZ2V0TWV0YWRhdGEgPSBuZXcgTWFwKCkpO1xuICB9XG4gIHZhciBrZXlNZXRhZGF0YSA9IHRhcmdldE1ldGFkYXRhLmdldCh0YXJnZXRLZXkpO1xuICBpZiAoIWtleU1ldGFkYXRhKSB7XG4gICAgaWYgKCFjcmVhdGUpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgdGFyZ2V0TWV0YWRhdGEuc2V0KHRhcmdldEtleSwga2V5TWV0YWRhdGEgPSBuZXcgTWFwKCkpO1xuICB9IHJldHVybiBrZXlNZXRhZGF0YTtcbn07XG52YXIgb3JkaW5hcnlIYXNPd25NZXRhZGF0YSA9IGZ1bmN0aW9uIChNZXRhZGF0YUtleSwgTywgUCkge1xuICB2YXIgbWV0YWRhdGFNYXAgPSBnZXRPckNyZWF0ZU1ldGFkYXRhTWFwKE8sIFAsIGZhbHNlKTtcbiAgcmV0dXJuIG1ldGFkYXRhTWFwID09PSB1bmRlZmluZWQgPyBmYWxzZSA6IG1ldGFkYXRhTWFwLmhhcyhNZXRhZGF0YUtleSk7XG59O1xudmFyIG9yZGluYXJ5R2V0T3duTWV0YWRhdGEgPSBmdW5jdGlvbiAoTWV0YWRhdGFLZXksIE8sIFApIHtcbiAgdmFyIG1ldGFkYXRhTWFwID0gZ2V0T3JDcmVhdGVNZXRhZGF0YU1hcChPLCBQLCBmYWxzZSk7XG4gIHJldHVybiBtZXRhZGF0YU1hcCA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogbWV0YWRhdGFNYXAuZ2V0KE1ldGFkYXRhS2V5KTtcbn07XG52YXIgb3JkaW5hcnlEZWZpbmVPd25NZXRhZGF0YSA9IGZ1bmN0aW9uIChNZXRhZGF0YUtleSwgTWV0YWRhdGFWYWx1ZSwgTywgUCkge1xuICBnZXRPckNyZWF0ZU1ldGFkYXRhTWFwKE8sIFAsIHRydWUpLnNldChNZXRhZGF0YUtleSwgTWV0YWRhdGFWYWx1ZSk7XG59O1xudmFyIG9yZGluYXJ5T3duTWV0YWRhdGFLZXlzID0gZnVuY3Rpb24gKHRhcmdldCwgdGFyZ2V0S2V5KSB7XG4gIHZhciBtZXRhZGF0YU1hcCA9IGdldE9yQ3JlYXRlTWV0YWRhdGFNYXAodGFyZ2V0LCB0YXJnZXRLZXksIGZhbHNlKTtcbiAgdmFyIGtleXMgPSBbXTtcbiAgaWYgKG1ldGFkYXRhTWFwKSBtZXRhZGF0YU1hcC5mb3JFYWNoKGZ1bmN0aW9uIChfLCBrZXkpIHsga2V5cy5wdXNoKGtleSk7IH0pO1xuICByZXR1cm4ga2V5cztcbn07XG52YXIgdG9NZXRhS2V5ID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiBpdCA9PSAnc3ltYm9sJyA/IGl0IDogU3RyaW5nKGl0KTtcbn07XG52YXIgZXhwID0gZnVuY3Rpb24gKE8pIHtcbiAgJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0JywgTyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc3RvcmU6IHN0b3JlLFxuICBtYXA6IGdldE9yQ3JlYXRlTWV0YWRhdGFNYXAsXG4gIGhhczogb3JkaW5hcnlIYXNPd25NZXRhZGF0YSxcbiAgZ2V0OiBvcmRpbmFyeUdldE93bk1ldGFkYXRhLFxuICBzZXQ6IG9yZGluYXJ5RGVmaW5lT3duTWV0YWRhdGEsXG4gIGtleXM6IG9yZGluYXJ5T3duTWV0YWRhdGFLZXlzLFxuICBrZXk6IHRvTWV0YUtleSxcbiAgZXhwOiBleHBcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///28\n")},function(module,exports){eval("module.exports = false;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbGlicmFyeS5qcz8yZDAwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBIiwiZmlsZSI6IjI5LmpzIiwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBmYWxzZTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///29\n")},function(module,exports,__webpack_require__){eval("var META = __webpack_require__(33)('meta');\nvar isObject = __webpack_require__(4);\nvar has = __webpack_require__(14);\nvar setDesc = __webpack_require__(8).f;\nvar id = 0;\nvar isExtensible = Object.isExtensible || function () {\n return true;\n};\nvar FREEZE = !__webpack_require__(3)(function () {\n return isExtensible(Object.preventExtensions({}));\n});\nvar setMeta = function (it) {\n setDesc(it, META, { value: {\n i: 'O' + ++id, // object ID\n w: {} // weak collections IDs\n } });\n};\nvar fastKey = function (it, create) {\n // return primitive with prefix\n if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return 'F';\n // not necessary to add metadata\n if (!create) return 'E';\n // add missing metadata\n setMeta(it);\n // return object ID\n } return it[META].i;\n};\nvar getWeak = function (it, create) {\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return true;\n // not necessary to add metadata\n if (!create) return false;\n // add missing metadata\n setMeta(it);\n // return hash weak collections IDs\n } return it[META].w;\n};\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);\n return it;\n};\nvar meta = module.exports = {\n KEY: META,\n NEED: false,\n fastKey: fastKey,\n getWeak: getWeak,\n onFreeze: onFreeze\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWV0YS5qcz82N2FiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFdBQVcsbUJBQU8sQ0FBQyxFQUFRO0FBQzNCLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLFVBQVUsbUJBQU8sQ0FBQyxFQUFRO0FBQzFCLGNBQWMsbUJBQU8sQ0FBQyxDQUFjO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVU7QUFDaEMsaURBQWlEO0FBQ2pELENBQUM7QUFDRDtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBLFNBQVM7QUFDVCxHQUFHLEVBQUU7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMzAuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgTUVUQSA9IHJlcXVpcmUoJy4vX3VpZCcpKCdtZXRhJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciBzZXREZXNjID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbnZhciBpZCA9IDA7XG52YXIgaXNFeHRlbnNpYmxlID0gT2JqZWN0LmlzRXh0ZW5zaWJsZSB8fCBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0cnVlO1xufTtcbnZhciBGUkVFWkUgPSAhcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBpc0V4dGVuc2libGUoT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKHt9KSk7XG59KTtcbnZhciBzZXRNZXRhID0gZnVuY3Rpb24gKGl0KSB7XG4gIHNldERlc2MoaXQsIE1FVEEsIHsgdmFsdWU6IHtcbiAgICBpOiAnTycgKyArK2lkLCAvLyBvYmplY3QgSURcbiAgICB3OiB7fSAgICAgICAgICAvLyB3ZWFrIGNvbGxlY3Rpb25zIElEc1xuICB9IH0pO1xufTtcbnZhciBmYXN0S2V5ID0gZnVuY3Rpb24gKGl0LCBjcmVhdGUpIHtcbiAgLy8gcmV0dXJuIHByaW1pdGl2ZSB3aXRoIHByZWZpeFxuICBpZiAoIWlzT2JqZWN0KGl0KSkgcmV0dXJuIHR5cGVvZiBpdCA9PSAnc3ltYm9sJyA/IGl0IDogKHR5cGVvZiBpdCA9PSAnc3RyaW5nJyA/ICdTJyA6ICdQJykgKyBpdDtcbiAgaWYgKCFoYXMoaXQsIE1FVEEpKSB7XG4gICAgLy8gY2FuJ3Qgc2V0IG1ldGFkYXRhIHRvIHVuY2F1Z2h0IGZyb3plbiBvYmplY3RcbiAgICBpZiAoIWlzRXh0ZW5zaWJsZShpdCkpIHJldHVybiAnRic7XG4gICAgLy8gbm90IG5lY2Vzc2FyeSB0byBhZGQgbWV0YWRhdGFcbiAgICBpZiAoIWNyZWF0ZSkgcmV0dXJuICdFJztcbiAgICAvLyBhZGQgbWlzc2luZyBtZXRhZGF0YVxuICAgIHNldE1ldGEoaXQpO1xuICAvLyByZXR1cm4gb2JqZWN0IElEXG4gIH0gcmV0dXJuIGl0W01FVEFdLmk7XG59O1xudmFyIGdldFdlYWsgPSBmdW5jdGlvbiAoaXQsIGNyZWF0ZSkge1xuICBpZiAoIWhhcyhpdCwgTUVUQSkpIHtcbiAgICAvLyBjYW4ndCBzZXQgbWV0YWRhdGEgdG8gdW5jYXVnaHQgZnJvemVuIG9iamVjdFxuICAgIGlmICghaXNFeHRlbnNpYmxlKGl0KSkgcmV0dXJuIHRydWU7XG4gICAgLy8gbm90IG5lY2Vzc2FyeSB0byBhZGQgbWV0YWRhdGFcbiAgICBpZiAoIWNyZWF0ZSkgcmV0dXJuIGZhbHNlO1xuICAgIC8vIGFkZCBtaXNzaW5nIG1ldGFkYXRhXG4gICAgc2V0TWV0YShpdCk7XG4gIC8vIHJldHVybiBoYXNoIHdlYWsgY29sbGVjdGlvbnMgSURzXG4gIH0gcmV0dXJuIGl0W01FVEFdLnc7XG59O1xuLy8gYWRkIG1ldGFkYXRhIG9uIGZyZWV6ZS1mYW1pbHkgbWV0aG9kcyBjYWxsaW5nXG52YXIgb25GcmVlemUgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKEZSRUVaRSAmJiBtZXRhLk5FRUQgJiYgaXNFeHRlbnNpYmxlKGl0KSAmJiAhaGFzKGl0LCBNRVRBKSkgc2V0TWV0YShpdCk7XG4gIHJldHVybiBpdDtcbn07XG52YXIgbWV0YSA9IG1vZHVsZS5leHBvcnRzID0ge1xuICBLRVk6IE1FVEEsXG4gIE5FRUQ6IGZhbHNlLFxuICBmYXN0S2V5OiBmYXN0S2V5LFxuICBnZXRXZWFrOiBnZXRXZWFrLFxuICBvbkZyZWV6ZTogb25GcmVlemVcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///30\n")},function(module,exports,__webpack_require__){eval("// 22.1.3.31 Array.prototype[@@unscopables]\nvar UNSCOPABLES = __webpack_require__(5)('unscopables');\nvar ArrayProto = Array.prototype;\nif (ArrayProto[UNSCOPABLES] == undefined) __webpack_require__(11)(ArrayProto, UNSCOPABLES, {});\nmodule.exports = function (key) {\n ArrayProto[UNSCOPABLES][key] = true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYWRkLXRvLXVuc2NvcGFibGVzLmpzPzljNmMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxrQkFBa0IsbUJBQU8sQ0FBQyxDQUFRO0FBQ2xDO0FBQ0EsMENBQTBDLG1CQUFPLENBQUMsRUFBUyw2QkFBNkI7QUFDeEY7QUFDQTtBQUNBIiwiZmlsZSI6IjMxLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjIuMS4zLjMxIEFycmF5LnByb3RvdHlwZVtAQHVuc2NvcGFibGVzXVxudmFyIFVOU0NPUEFCTEVTID0gcmVxdWlyZSgnLi9fd2tzJykoJ3Vuc2NvcGFibGVzJyk7XG52YXIgQXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZTtcbmlmIChBcnJheVByb3RvW1VOU0NPUEFCTEVTXSA9PSB1bmRlZmluZWQpIHJlcXVpcmUoJy4vX2hpZGUnKShBcnJheVByb3RvLCBVTlNDT1BBQkxFUywge30pO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIEFycmF5UHJvdG9bVU5TQ09QQUJMRVNdW2tleV0gPSB0cnVlO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///31\n")},function(module,exports){eval("module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcHJvcGVydHktZGVzYy5qcz80NjMwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMzIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChiaXRtYXAsIHZhbHVlKSB7XG4gIHJldHVybiB7XG4gICAgZW51bWVyYWJsZTogIShiaXRtYXAgJiAxKSxcbiAgICBjb25maWd1cmFibGU6ICEoYml0bWFwICYgMiksXG4gICAgd3JpdGFibGU6ICEoYml0bWFwICYgNCksXG4gICAgdmFsdWU6IHZhbHVlXG4gIH07XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///32\n")},function(module,exports){eval("var id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdWlkLmpzP2NhNWEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIzMy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBpZCA9IDA7XG52YXIgcHggPSBNYXRoLnJhbmRvbSgpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiAnU3ltYm9sKCcuY29uY2F0KGtleSA9PT0gdW5kZWZpbmVkID8gJycgOiBrZXksICcpXycsICgrK2lkICsgcHgpLnRvU3RyaW5nKDM2KSk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///33\n")},function(module,exports,__webpack_require__){eval("// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = __webpack_require__(96);\nvar enumBugKeys = __webpack_require__(69);\n\nmodule.exports = Object.keys || function keys(O) {\n return $keys(O, enumBugKeys);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWtleXMuanM/MGQ1OCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLFlBQVksbUJBQU8sQ0FBQyxFQUF5QjtBQUM3QyxrQkFBa0IsbUJBQU8sQ0FBQyxFQUFrQjs7QUFFNUM7QUFDQTtBQUNBIiwiZmlsZSI6IjM0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMTkuMS4yLjE0IC8gMTUuMi4zLjE0IE9iamVjdC5rZXlzKE8pXG52YXIgJGtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cy1pbnRlcm5hbCcpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi9fZW51bS1idWcta2V5cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIGtleXMoTykge1xuICByZXR1cm4gJGtleXMoTywgZW51bUJ1Z0tleXMpO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///34\n")},function(module,exports,__webpack_require__){eval("var toInteger = __webpack_require__(21);\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n index = toInteger(index);\n return index < 0 ? max(index + length, 0) : min(index, length);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8tYWJzb2x1dGUtaW5kZXguanM/NzdmMSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIzNS5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgbWluID0gTWF0aC5taW47XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbmRleCwgbGVuZ3RoKSB7XG4gIGluZGV4ID0gdG9JbnRlZ2VyKGluZGV4KTtcbiAgcmV0dXJuIGluZGV4IDwgMCA/IG1heChpbmRleCArIGxlbmd0aCwgMCkgOiBtaW4oaW5kZXgsIGxlbmd0aCk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///35\n")},function(module,exports,__webpack_require__){eval("// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = __webpack_require__(1);\nvar dPs = __webpack_require__(97);\nvar enumBugKeys = __webpack_require__(69);\nvar IE_PROTO = __webpack_require__(68)('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = __webpack_require__(66)('iframe');\n var i = enumBugKeys.length;\n var lt = '<';\n var gt = '>';\n var iframeDocument;\n iframe.style.display = 'none';\n __webpack_require__(70).appendChild(iframe);\n iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n // createDict = iframe.contentWindow.Object;\n // html.removeChild(iframe);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n iframeDocument.close();\n createDict = iframeDocument.F;\n while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n Empty[PROTOTYPE] = anObject(O);\n result = new Empty();\n Empty[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = createDict();\n return Properties === undefined ? result : dPs(result, Properties);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWNyZWF0ZS5qcz8yYWViIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsVUFBVSxtQkFBTyxDQUFDLEVBQWU7QUFDakMsa0JBQWtCLG1CQUFPLENBQUMsRUFBa0I7QUFDNUMsZUFBZSxtQkFBTyxDQUFDLEVBQWU7QUFDdEMseUJBQXlCO0FBQ3pCOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsbUJBQU8sQ0FBQyxFQUFlO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLG1CQUFPLENBQUMsRUFBUztBQUNuQiw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBIiwiZmlsZSI6IjM2LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMTkuMS4yLjIgLyAxNS4yLjMuNSBPYmplY3QuY3JlYXRlKE8gWywgUHJvcGVydGllc10pXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBkUHMgPSByZXF1aXJlKCcuL19vYmplY3QtZHBzJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuL19lbnVtLWJ1Zy1rZXlzJyk7XG52YXIgSUVfUFJPVE8gPSByZXF1aXJlKCcuL19zaGFyZWQta2V5JykoJ0lFX1BST1RPJyk7XG52YXIgRW1wdHkgPSBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH07XG52YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG5cbi8vIENyZWF0ZSBvYmplY3Qgd2l0aCBmYWtlIGBudWxsYCBwcm90b3R5cGU6IHVzZSBpZnJhbWUgT2JqZWN0IHdpdGggY2xlYXJlZCBwcm90b3R5cGVcbnZhciBjcmVhdGVEaWN0ID0gZnVuY3Rpb24gKCkge1xuICAvLyBUaHJhc2gsIHdhc3RlIGFuZCBzb2RvbXk6IElFIEdDIGJ1Z1xuICB2YXIgaWZyYW1lID0gcmVxdWlyZSgnLi9fZG9tLWNyZWF0ZScpKCdpZnJhbWUnKTtcbiAgdmFyIGkgPSBlbnVtQnVnS2V5cy5sZW5ndGg7XG4gIHZhciBsdCA9ICc8JztcbiAgdmFyIGd0ID0gJz4nO1xuICB2YXIgaWZyYW1lRG9jdW1lbnQ7XG4gIGlmcmFtZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICByZXF1aXJlKCcuL19odG1sJykuYXBwZW5kQ2hpbGQoaWZyYW1lKTtcbiAgaWZyYW1lLnNyYyA9ICdqYXZhc2NyaXB0Oic7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tc2NyaXB0LXVybFxuICAvLyBjcmVhdGVEaWN0ID0gaWZyYW1lLmNvbnRlbnRXaW5kb3cuT2JqZWN0O1xuICAvLyBodG1sLnJlbW92ZUNoaWxkKGlmcmFtZSk7XG4gIGlmcmFtZURvY3VtZW50ID0gaWZyYW1lLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQ7XG4gIGlmcmFtZURvY3VtZW50Lm9wZW4oKTtcbiAgaWZyYW1lRG9jdW1lbnQud3JpdGUobHQgKyAnc2NyaXB0JyArIGd0ICsgJ2RvY3VtZW50LkY9T2JqZWN0JyArIGx0ICsgJy9zY3JpcHQnICsgZ3QpO1xuICBpZnJhbWVEb2N1bWVudC5jbG9zZSgpO1xuICBjcmVhdGVEaWN0ID0gaWZyYW1lRG9jdW1lbnQuRjtcbiAgd2hpbGUgKGktLSkgZGVsZXRlIGNyZWF0ZURpY3RbUFJPVE9UWVBFXVtlbnVtQnVnS2V5c1tpXV07XG4gIHJldHVybiBjcmVhdGVEaWN0KCk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5jcmVhdGUgfHwgZnVuY3Rpb24gY3JlYXRlKE8sIFByb3BlcnRpZXMpIHtcbiAgdmFyIHJlc3VsdDtcbiAgaWYgKE8gIT09IG51bGwpIHtcbiAgICBFbXB0eVtQUk9UT1RZUEVdID0gYW5PYmplY3QoTyk7XG4gICAgcmVzdWx0ID0gbmV3IEVtcHR5KCk7XG4gICAgRW1wdHlbUFJPVE9UWVBFXSA9IG51bGw7XG4gICAgLy8gYWRkIFwiX19wcm90b19fXCIgZm9yIE9iamVjdC5nZXRQcm90b3R5cGVPZiBwb2x5ZmlsbFxuICAgIHJlc3VsdFtJRV9QUk9UT10gPSBPO1xuICB9IGVsc2UgcmVzdWx0ID0gY3JlYXRlRGljdCgpO1xuICByZXR1cm4gUHJvcGVydGllcyA9PT0gdW5kZWZpbmVkID8gcmVzdWx0IDogZFBzKHJlc3VsdCwgUHJvcGVydGllcyk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///36\n")},function(module,exports,__webpack_require__){eval("// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\nvar $keys = __webpack_require__(96);\nvar hiddenKeys = __webpack_require__(69).concat('length', 'prototype');\n\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return $keys(O, hiddenKeys);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdvcG4uanM/OTA5MyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLFlBQVksbUJBQU8sQ0FBQyxFQUF5QjtBQUM3QyxpQkFBaUIsbUJBQU8sQ0FBQyxFQUFrQjs7QUFFM0M7QUFDQTtBQUNBIiwiZmlsZSI6IjM3LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMTkuMS4yLjcgLyAxNS4yLjMuNCBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhPKVxudmFyICRrZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMtaW50ZXJuYWwnKTtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi9fZW51bS1idWcta2V5cycpLmNvbmNhdCgnbGVuZ3RoJywgJ3Byb3RvdHlwZScpO1xuXG5leHBvcnRzLmYgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB8fCBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKE8pIHtcbiAgcmV0dXJuICRrZXlzKE8sIGhpZGRlbktleXMpO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///37\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar global = __webpack_require__(2);\nvar dP = __webpack_require__(8);\nvar DESCRIPTORS = __webpack_require__(7);\nvar SPECIES = __webpack_require__(5)('species');\n\nmodule.exports = function (KEY) {\n var C = global[KEY];\n if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2V0LXNwZWNpZXMuanM/N2E1NiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGFBQWEsbUJBQU8sQ0FBQyxDQUFXO0FBQ2hDLFNBQVMsbUJBQU8sQ0FBQyxDQUFjO0FBQy9CLGtCQUFrQixtQkFBTyxDQUFDLENBQWdCO0FBQzFDLGNBQWMsbUJBQU8sQ0FBQyxDQUFROztBQUU5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQixhQUFhO0FBQ25DLEdBQUc7QUFDSCIsImZpbGUiOiIzOC5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKTtcbnZhciBTUEVDSUVTID0gcmVxdWlyZSgnLi9fd2tzJykoJ3NwZWNpZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoS0VZKSB7XG4gIHZhciBDID0gZ2xvYmFsW0tFWV07XG4gIGlmIChERVNDUklQVE9SUyAmJiBDICYmICFDW1NQRUNJRVNdKSBkUC5mKEMsIFNQRUNJRVMsIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9XG4gIH0pO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///38\n")},function(module,exports){eval("module.exports = function (it, Constructor, name, forbiddenField) {\n if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) {\n throw TypeError(name + ': incorrect invocation!');\n } return it;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYW4taW5zdGFuY2UuanM/ZjYwNSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0giLCJmaWxlIjoiMzkuanMiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgQ29uc3RydWN0b3IsIG5hbWUsIGZvcmJpZGRlbkZpZWxkKSB7XG4gIGlmICghKGl0IGluc3RhbmNlb2YgQ29uc3RydWN0b3IpIHx8IChmb3JiaWRkZW5GaWVsZCAhPT0gdW5kZWZpbmVkICYmIGZvcmJpZGRlbkZpZWxkIGluIGl0KSkge1xuICAgIHRocm93IFR5cGVFcnJvcihuYW1lICsgJzogaW5jb3JyZWN0IGludm9jYXRpb24hJyk7XG4gIH0gcmV0dXJuIGl0O1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///39\n")},function(module,exports,__webpack_require__){eval("var ctx = __webpack_require__(19);\nvar call = __webpack_require__(109);\nvar isArrayIter = __webpack_require__(81);\nvar anObject = __webpack_require__(1);\nvar toLength = __webpack_require__(6);\nvar getIterFn = __webpack_require__(83);\nvar BREAK = {};\nvar RETURN = {};\nvar exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {\n var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable);\n var f = ctx(fn, that, entries ? 2 : 1);\n var index = 0;\n var length, step, iterator, result;\n if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');\n // fast case for arrays with default iterator\n if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {\n result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);\n if (result === BREAK || result === RETURN) return result;\n } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {\n result = call(iterator, f, step.value, entries);\n if (result === BREAK || result === RETURN) return result;\n }\n};\nexports.BREAK = BREAK;\nexports.RETURN = RETURN;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZm9yLW9mLmpzPzRhNTkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsVUFBVSxtQkFBTyxDQUFDLEVBQVE7QUFDMUIsV0FBVyxtQkFBTyxDQUFDLEdBQWM7QUFDakMsa0JBQWtCLG1CQUFPLENBQUMsRUFBa0I7QUFDNUMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBNEI7QUFDcEQ7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDLGlCQUFpQixFQUFFO0FBQzFEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtRUFBbUUsZ0JBQWdCO0FBQ25GO0FBQ0E7QUFDQSxHQUFHLDRDQUE0QyxnQ0FBZ0M7QUFDL0U7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjQwLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuL19pdGVyLWNhbGwnKTtcbnZhciBpc0FycmF5SXRlciA9IHJlcXVpcmUoJy4vX2lzLWFycmF5LWl0ZXInKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgZ2V0SXRlckZuID0gcmVxdWlyZSgnLi9jb3JlLmdldC1pdGVyYXRvci1tZXRob2QnKTtcbnZhciBCUkVBSyA9IHt9O1xudmFyIFJFVFVSTiA9IHt9O1xudmFyIGV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVyYWJsZSwgZW50cmllcywgZm4sIHRoYXQsIElURVJBVE9SKSB7XG4gIHZhciBpdGVyRm4gPSBJVEVSQVRPUiA/IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGl0ZXJhYmxlOyB9IDogZ2V0SXRlckZuKGl0ZXJhYmxlKTtcbiAgdmFyIGYgPSBjdHgoZm4sIHRoYXQsIGVudHJpZXMgPyAyIDogMSk7XG4gIHZhciBpbmRleCA9IDA7XG4gIHZhciBsZW5ndGgsIHN0ZXAsIGl0ZXJhdG9yLCByZXN1bHQ7XG4gIGlmICh0eXBlb2YgaXRlckZuICE9ICdmdW5jdGlvbicpIHRocm93IFR5cGVFcnJvcihpdGVyYWJsZSArICcgaXMgbm90IGl0ZXJhYmxlIScpO1xuICAvLyBmYXN0IGNhc2UgZm9yIGFycmF5cyB3aXRoIGRlZmF1bHQgaXRlcmF0b3JcbiAgaWYgKGlzQXJyYXlJdGVyKGl0ZXJGbikpIGZvciAobGVuZ3RoID0gdG9MZW5ndGgoaXRlcmFibGUubGVuZ3RoKTsgbGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIHtcbiAgICByZXN1bHQgPSBlbnRyaWVzID8gZihhbk9iamVjdChzdGVwID0gaXRlcmFibGVbaW5kZXhdKVswXSwgc3RlcFsxXSkgOiBmKGl0ZXJhYmxlW2luZGV4XSk7XG4gICAgaWYgKHJlc3VsdCA9PT0gQlJFQUsgfHwgcmVzdWx0ID09PSBSRVRVUk4pIHJldHVybiByZXN1bHQ7XG4gIH0gZWxzZSBmb3IgKGl0ZXJhdG9yID0gaXRlckZuLmNhbGwoaXRlcmFibGUpOyAhKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmU7KSB7XG4gICAgcmVzdWx0ID0gY2FsbChpdGVyYXRvciwgZiwgc3RlcC52YWx1ZSwgZW50cmllcyk7XG4gICAgaWYgKHJlc3VsdCA9PT0gQlJFQUsgfHwgcmVzdWx0ID09PSBSRVRVUk4pIHJldHVybiByZXN1bHQ7XG4gIH1cbn07XG5leHBvcnRzLkJSRUFLID0gQlJFQUs7XG5leHBvcnRzLlJFVFVSTiA9IFJFVFVSTjtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///40\n")},function(module,exports,__webpack_require__){eval("var redefine = __webpack_require__(12);\nmodule.exports = function (target, src, safe) {\n for (var key in src) redefine(target, key, src[key], safe);\n return target;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcmVkZWZpbmUtYWxsLmpzP2RjYmMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxtQkFBTyxDQUFDLEVBQWE7QUFDcEM7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiNDEuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGFyZ2V0LCBzcmMsIHNhZmUpIHtcbiAgZm9yICh2YXIga2V5IGluIHNyYykgcmVkZWZpbmUodGFyZ2V0LCBrZXksIHNyY1trZXldLCBzYWZlKTtcbiAgcmV0dXJuIHRhcmdldDtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///41\n")},function(module,exports,__webpack_require__){eval("var isObject = __webpack_require__(4);\nmodule.exports = function (it, TYPE) {\n if (!isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!');\n return it;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdmFsaWRhdGUtY29sbGVjdGlvbi5qcz9iMzlhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjQyLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgVFlQRSkge1xuICBpZiAoIWlzT2JqZWN0KGl0KSB8fCBpdC5fdCAhPT0gVFlQRSkgdGhyb3cgVHlwZUVycm9yKCdJbmNvbXBhdGlibGUgcmVjZWl2ZXIsICcgKyBUWVBFICsgJyByZXF1aXJlZCEnKTtcbiAgcmV0dXJuIGl0O1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///42\n")},function(module,exports,__webpack_require__){eval("var def = __webpack_require__(8).f;\nvar has = __webpack_require__(14);\nvar TAG = __webpack_require__(5)('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2V0LXRvLXN0cmluZy10YWcuanM/N2YyMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxVQUFVLG1CQUFPLENBQUMsQ0FBYztBQUNoQyxVQUFVLG1CQUFPLENBQUMsRUFBUTtBQUMxQixVQUFVLG1CQUFPLENBQUMsQ0FBUTs7QUFFMUI7QUFDQSxvRUFBb0UsaUNBQWlDO0FBQ3JHIiwiZmlsZSI6IjQzLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGRlZiA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgVEFHID0gcmVxdWlyZSgnLi9fd2tzJykoJ3RvU3RyaW5nVGFnJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCB0YWcsIHN0YXQpIHtcbiAgaWYgKGl0ICYmICFoYXMoaXQgPSBzdGF0ID8gaXQgOiBpdC5wcm90b3R5cGUsIFRBRykpIGRlZihpdCwgVEFHLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgdmFsdWU6IHRhZyB9KTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///43\n")},function(module,exports,__webpack_require__){eval("// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = __webpack_require__(20);\nvar TAG = __webpack_require__(5)('toStringTag');\n// ES3 wrong here\nvar ARG = cof(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (e) { /* empty */ }\n};\n\nmodule.exports = function (it) {\n var O, T, B;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n // builtinTag case\n : ARG ? cof(O)\n // ES3 arguments fallback\n : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY2xhc3NvZi5qcz8yM2M2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsVUFBVSxtQkFBTyxDQUFDLEVBQVE7QUFDMUIsVUFBVSxtQkFBTyxDQUFDLENBQVE7QUFDMUI7QUFDQSwyQkFBMkIsa0JBQWtCLEVBQUU7O0FBRS9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRyxZQUFZO0FBQ2Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiNDQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBnZXR0aW5nIHRhZyBmcm9tIDE5LjEuMy42IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcoKVxudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xudmFyIFRBRyA9IHJlcXVpcmUoJy4vX3drcycpKCd0b1N0cmluZ1RhZycpO1xuLy8gRVMzIHdyb25nIGhlcmVcbnZhciBBUkcgPSBjb2YoZnVuY3Rpb24gKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpID09ICdBcmd1bWVudHMnO1xuXG4vLyBmYWxsYmFjayBmb3IgSUUxMSBTY3JpcHQgQWNjZXNzIERlbmllZCBlcnJvclxudmFyIHRyeUdldCA9IGZ1bmN0aW9uIChpdCwga2V5KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGl0W2tleV07XG4gIH0gY2F0Y2ggKGUpIHsgLyogZW1wdHkgKi8gfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIE8sIFQsIEI7XG4gIHJldHVybiBpdCA9PT0gdW5kZWZpbmVkID8gJ1VuZGVmaW5lZCcgOiBpdCA9PT0gbnVsbCA/ICdOdWxsJ1xuICAgIC8vIEBAdG9TdHJpbmdUYWcgY2FzZVxuICAgIDogdHlwZW9mIChUID0gdHJ5R2V0KE8gPSBPYmplY3QoaXQpLCBUQUcpKSA9PSAnc3RyaW5nJyA/IFRcbiAgICAvLyBidWlsdGluVGFnIGNhc2VcbiAgICA6IEFSRyA/IGNvZihPKVxuICAgIC8vIEVTMyBhcmd1bWVudHMgZmFsbGJhY2tcbiAgICA6IChCID0gY29mKE8pKSA9PSAnT2JqZWN0JyAmJiB0eXBlb2YgTy5jYWxsZWUgPT0gJ2Z1bmN0aW9uJyA/ICdBcmd1bWVudHMnIDogQjtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///44\n")},function(module,exports,__webpack_require__){eval("var $export = __webpack_require__(0);\nvar defined = __webpack_require__(24);\nvar fails = __webpack_require__(3);\nvar spaces = __webpack_require__(72);\nvar space = '[' + spaces + ']';\nvar non = '\\u200b\\u0085';\nvar ltrim = RegExp('^' + space + space + '*');\nvar rtrim = RegExp(space + space + '*$');\n\nvar exporter = function (KEY, exec, ALIAS) {\n var exp = {};\n var FORCE = fails(function () {\n return !!spaces[KEY]() || non[KEY]() != non;\n });\n var fn = exp[KEY] = FORCE ? exec(trim) : spaces[KEY];\n if (ALIAS) exp[ALIAS] = fn;\n $export($export.P + $export.F * FORCE, 'String', exp);\n};\n\n// 1 -> String#trimLeft\n// 2 -> String#trimRight\n// 3 -> String#trim\nvar trim = exporter.trim = function (string, TYPE) {\n string = String(defined(string));\n if (TYPE & 1) string = string.replace(ltrim, '');\n if (TYPE & 2) string = string.replace(rtrim, '');\n return string;\n};\n\nmodule.exports = exporter;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLXRyaW0uanM/YWE3NyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxjQUFjLG1CQUFPLENBQUMsRUFBWTtBQUNsQyxZQUFZLG1CQUFPLENBQUMsQ0FBVTtBQUM5QixhQUFhLG1CQUFPLENBQUMsRUFBYztBQUNuQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiNDUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIHNwYWNlcyA9IHJlcXVpcmUoJy4vX3N0cmluZy13cycpO1xudmFyIHNwYWNlID0gJ1snICsgc3BhY2VzICsgJ10nO1xudmFyIG5vbiA9ICdcXHUyMDBiXFx1MDA4NSc7XG52YXIgbHRyaW0gPSBSZWdFeHAoJ14nICsgc3BhY2UgKyBzcGFjZSArICcqJyk7XG52YXIgcnRyaW0gPSBSZWdFeHAoc3BhY2UgKyBzcGFjZSArICcqJCcpO1xuXG52YXIgZXhwb3J0ZXIgPSBmdW5jdGlvbiAoS0VZLCBleGVjLCBBTElBUykge1xuICB2YXIgZXhwID0ge307XG4gIHZhciBGT1JDRSA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gISFzcGFjZXNbS0VZXSgpIHx8IG5vbltLRVldKCkgIT0gbm9uO1xuICB9KTtcbiAgdmFyIGZuID0gZXhwW0tFWV0gPSBGT1JDRSA/IGV4ZWModHJpbSkgOiBzcGFjZXNbS0VZXTtcbiAgaWYgKEFMSUFTKSBleHBbQUxJQVNdID0gZm47XG4gICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogRk9SQ0UsICdTdHJpbmcnLCBleHApO1xufTtcblxuLy8gMSAtPiBTdHJpbmcjdHJpbUxlZnRcbi8vIDIgLT4gU3RyaW5nI3RyaW1SaWdodFxuLy8gMyAtPiBTdHJpbmcjdHJpbVxudmFyIHRyaW0gPSBleHBvcnRlci50cmltID0gZnVuY3Rpb24gKHN0cmluZywgVFlQRSkge1xuICBzdHJpbmcgPSBTdHJpbmcoZGVmaW5lZChzdHJpbmcpKTtcbiAgaWYgKFRZUEUgJiAxKSBzdHJpbmcgPSBzdHJpbmcucmVwbGFjZShsdHJpbSwgJycpO1xuICBpZiAoVFlQRSAmIDIpIHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKHJ0cmltLCAnJyk7XG4gIHJldHVybiBzdHJpbmc7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydGVyO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///45\n")},function(module,exports){eval("module.exports = {};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlcmF0b3JzLmpzPzg0ZjIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEiLCJmaWxlIjoiNDYuanMiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IHt9O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///46\n")},function(module,exports,__webpack_require__){eval("var core = __webpack_require__(18);\nvar global = __webpack_require__(2);\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\n\n(module.exports = function (key, value) {\n return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n version: core.version,\n mode: __webpack_require__(29) ? 'pure' : 'global',\n copyright: '© 2020 Denis Pushkarev (zloirock.ru)'\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2hhcmVkLmpzPzU1MzciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsV0FBVyxtQkFBTyxDQUFDLEVBQVM7QUFDNUIsYUFBYSxtQkFBTyxDQUFDLENBQVc7QUFDaEM7QUFDQSxrREFBa0Q7O0FBRWxEO0FBQ0EscUVBQXFFO0FBQ3JFLENBQUM7QUFDRDtBQUNBLFFBQVEsbUJBQU8sQ0FBQyxFQUFZO0FBQzVCO0FBQ0EsQ0FBQyIsImZpbGUiOiI0Ny5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIFNIQVJFRCA9ICdfX2NvcmUtanNfc2hhcmVkX18nO1xudmFyIHN0b3JlID0gZ2xvYmFsW1NIQVJFRF0gfHwgKGdsb2JhbFtTSEFSRURdID0ge30pO1xuXG4obW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICByZXR1cm4gc3RvcmVba2V5XSB8fCAoc3RvcmVba2V5XSA9IHZhbHVlICE9PSB1bmRlZmluZWQgPyB2YWx1ZSA6IHt9KTtcbn0pKCd2ZXJzaW9ucycsIFtdKS5wdXNoKHtcbiAgdmVyc2lvbjogY29yZS52ZXJzaW9uLFxuICBtb2RlOiByZXF1aXJlKCcuL19saWJyYXJ5JykgPyAncHVyZScgOiAnZ2xvYmFsJyxcbiAgY29weXJpZ2h0OiAnwqkgMjAyMCBEZW5pcyBQdXNoa2FyZXYgKHpsb2lyb2NrLnJ1KSdcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///47\n")},function(module,exports,__webpack_require__){eval("// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = __webpack_require__(20);\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n return cof(it) == 'String' ? it.split('') : Object(it);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faW9iamVjdC5qcz82MjZhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsVUFBVSxtQkFBTyxDQUFDLEVBQVE7QUFDMUI7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiNDguanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIGFuZCBub24tZW51bWVyYWJsZSBvbGQgVjggc3RyaW5nc1xudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QoJ3onKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKSA/IE9iamVjdCA6IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gY29mKGl0KSA9PSAnU3RyaW5nJyA/IGl0LnNwbGl0KCcnKSA6IE9iamVjdChpdCk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///48\n")},function(module,exports){eval("exports.f = {}.propertyIsEnumerable;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LXBpZS5qcz81MmE3Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMiLCJmaWxlIjoiNDkuanMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnRzLmYgPSB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///49\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// 21.2.5.3 get RegExp.prototype.flags\nvar anObject = __webpack_require__(1);\nmodule.exports = function () {\n var that = anObject(this);\n var result = '';\n if (that.global) result += 'g';\n if (that.ignoreCase) result += 'i';\n if (that.multiline) result += 'm';\n if (that.unicode) result += 'u';\n if (that.sticky) result += 'y';\n return result;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZmxhZ3MuanM/MGJmYiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiNTAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG4vLyAyMS4yLjUuMyBnZXQgUmVnRXhwLnByb3RvdHlwZS5mbGFnc1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHRoYXQgPSBhbk9iamVjdCh0aGlzKTtcbiAgdmFyIHJlc3VsdCA9ICcnO1xuICBpZiAodGhhdC5nbG9iYWwpIHJlc3VsdCArPSAnZyc7XG4gIGlmICh0aGF0Lmlnbm9yZUNhc2UpIHJlc3VsdCArPSAnaSc7XG4gIGlmICh0aGF0Lm11bHRpbGluZSkgcmVzdWx0ICs9ICdtJztcbiAgaWYgKHRoYXQudW5pY29kZSkgcmVzdWx0ICs9ICd1JztcbiAgaWYgKHRoYXQuc3RpY2t5KSByZXN1bHQgKz0gJ3knO1xuICByZXR1cm4gcmVzdWx0O1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///50\n")},function(module,exports,__webpack_require__){eval("// 7.3.20 SpeciesConstructor(O, defaultConstructor)\nvar anObject = __webpack_require__(1);\nvar aFunction = __webpack_require__(10);\nvar SPECIES = __webpack_require__(5)('species');\nmodule.exports = function (O, D) {\n var C = anObject(O).constructor;\n var S;\n return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3BlY2llcy1jb25zdHJ1Y3Rvci5qcz9lYmQ2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2QyxjQUFjLG1CQUFPLENBQUMsQ0FBUTtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjUxLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gNy4zLjIwIFNwZWNpZXNDb25zdHJ1Y3RvcihPLCBkZWZhdWx0Q29uc3RydWN0b3IpXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgU1BFQ0lFUyA9IHJlcXVpcmUoJy4vX3drcycpKCdzcGVjaWVzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBEKSB7XG4gIHZhciBDID0gYW5PYmplY3QoTykuY29uc3RydWN0b3I7XG4gIHZhciBTO1xuICByZXR1cm4gQyA9PT0gdW5kZWZpbmVkIHx8IChTID0gYW5PYmplY3QoQylbU1BFQ0lFU10pID09IHVuZGVmaW5lZCA/IEQgOiBhRnVuY3Rpb24oUyk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///51\n")},function(module,exports,__webpack_require__){eval("// false -> Array#indexOf\n// true -> Array#includes\nvar toIObject = __webpack_require__(15);\nvar toLength = __webpack_require__(6);\nvar toAbsoluteIndex = __webpack_require__(35);\nmodule.exports = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIObject($this);\n var length = toLength(O.length);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n if (O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktaW5jbHVkZXMuanM/YzM2NiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0EsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2QyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxzQkFBc0IsbUJBQU8sQ0FBQyxFQUFzQjtBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUssWUFBWSxlQUFlO0FBQ2hDO0FBQ0EsS0FBSztBQUNMO0FBQ0EiLCJmaWxlIjoiNTIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBmYWxzZSAtPiBBcnJheSNpbmRleE9mXG4vLyB0cnVlICAtPiBBcnJheSNpbmNsdWRlc1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4vX3RvLWFic29sdXRlLWluZGV4Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChJU19JTkNMVURFUykge1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBlbCwgZnJvbUluZGV4KSB7XG4gICAgdmFyIE8gPSB0b0lPYmplY3QoJHRoaXMpO1xuICAgIHZhciBsZW5ndGggPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gICAgdmFyIGluZGV4ID0gdG9BYnNvbHV0ZUluZGV4KGZyb21JbmRleCwgbGVuZ3RoKTtcbiAgICB2YXIgdmFsdWU7XG4gICAgLy8gQXJyYXkjaW5jbHVkZXMgdXNlcyBTYW1lVmFsdWVaZXJvIGVxdWFsaXR5IGFsZ29yaXRobVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICBpZiAoSVNfSU5DTFVERVMgJiYgZWwgIT0gZWwpIHdoaWxlIChsZW5ndGggPiBpbmRleCkge1xuICAgICAgdmFsdWUgPSBPW2luZGV4KytdO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgICAgaWYgKHZhbHVlICE9IHZhbHVlKSByZXR1cm4gdHJ1ZTtcbiAgICAvLyBBcnJheSNpbmRleE9mIGlnbm9yZXMgaG9sZXMsIEFycmF5I2luY2x1ZGVzIC0gbm90XG4gICAgfSBlbHNlIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSBpZiAoSVNfSU5DTFVERVMgfHwgaW5kZXggaW4gTykge1xuICAgICAgaWYgKE9baW5kZXhdID09PSBlbCkgcmV0dXJuIElTX0lOQ0xVREVTIHx8IGluZGV4IHx8IDA7XG4gICAgfSByZXR1cm4gIUlTX0lOQ0xVREVTICYmIC0xO1xuICB9O1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///52\n")},function(module,exports){eval("exports.f = Object.getOwnPropertySymbols;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdvcHMuanM/MjYyMSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSIsImZpbGUiOiI1My5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///53\n")},function(module,exports,__webpack_require__){eval("// 7.2.2 IsArray(argument)\nvar cof = __webpack_require__(20);\nmodule.exports = Array.isArray || function isArray(arg) {\n return cof(arg) == 'Array';\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtYXJyYXkuanM/MTE2OSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLFVBQVUsbUJBQU8sQ0FBQyxFQUFRO0FBQzFCO0FBQ0E7QUFDQSIsImZpbGUiOiI1NC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDcuMi4yIElzQXJyYXkoYXJndW1lbnQpXG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG5tb2R1bGUuZXhwb3J0cyA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gaXNBcnJheShhcmcpIHtcbiAgcmV0dXJuIGNvZihhcmcpID09ICdBcnJheSc7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///54\n")},function(module,exports,__webpack_require__){eval("var toInteger = __webpack_require__(21);\nvar defined = __webpack_require__(24);\n// true -> String#at\n// false -> String#codePointAt\nmodule.exports = function (TO_STRING) {\n return function (that, pos) {\n var s = String(defined(that));\n var i = toInteger(pos);\n var l = s.length;\n var a, b;\n if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n a = s.charCodeAt(i);\n return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n ? TO_STRING ? s.charAt(i) : a\n : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLWF0LmpzPzAyZjQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2QyxjQUFjLG1CQUFPLENBQUMsRUFBWTtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiNTUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG4vLyB0cnVlICAtPiBTdHJpbmcjYXRcbi8vIGZhbHNlIC0+IFN0cmluZyNjb2RlUG9pbnRBdFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoVE9fU1RSSU5HKSB7XG4gIHJldHVybiBmdW5jdGlvbiAodGhhdCwgcG9zKSB7XG4gICAgdmFyIHMgPSBTdHJpbmcoZGVmaW5lZCh0aGF0KSk7XG4gICAgdmFyIGkgPSB0b0ludGVnZXIocG9zKTtcbiAgICB2YXIgbCA9IHMubGVuZ3RoO1xuICAgIHZhciBhLCBiO1xuICAgIGlmIChpIDwgMCB8fCBpID49IGwpIHJldHVybiBUT19TVFJJTkcgPyAnJyA6IHVuZGVmaW5lZDtcbiAgICBhID0gcy5jaGFyQ29kZUF0KGkpO1xuICAgIHJldHVybiBhIDwgMHhkODAwIHx8IGEgPiAweGRiZmYgfHwgaSArIDEgPT09IGwgfHwgKGIgPSBzLmNoYXJDb2RlQXQoaSArIDEpKSA8IDB4ZGMwMCB8fCBiID4gMHhkZmZmXG4gICAgICA/IFRPX1NUUklORyA/IHMuY2hhckF0KGkpIDogYVxuICAgICAgOiBUT19TVFJJTkcgPyBzLnNsaWNlKGksIGkgKyAyKSA6IChhIC0gMHhkODAwIDw8IDEwKSArIChiIC0gMHhkYzAwKSArIDB4MTAwMDA7XG4gIH07XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///55\n")},function(module,exports,__webpack_require__){eval("// 7.2.8 IsRegExp(argument)\nvar isObject = __webpack_require__(4);\nvar cof = __webpack_require__(20);\nvar MATCH = __webpack_require__(5)('match');\nmodule.exports = function (it) {\n var isRegExp;\n return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtcmVnZXhwLmpzP2FhZTMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxVQUFVLG1CQUFPLENBQUMsRUFBUTtBQUMxQixZQUFZLG1CQUFPLENBQUMsQ0FBUTtBQUM1QjtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiI1Ni5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDcuMi44IElzUmVnRXhwKGFyZ3VtZW50KVxudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG52YXIgTUFUQ0ggPSByZXF1aXJlKCcuL193a3MnKSgnbWF0Y2gnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBpc1JlZ0V4cDtcbiAgcmV0dXJuIGlzT2JqZWN0KGl0KSAmJiAoKGlzUmVnRXhwID0gaXRbTUFUQ0hdKSAhPT0gdW5kZWZpbmVkID8gISFpc1JlZ0V4cCA6IGNvZihpdCkgPT0gJ1JlZ0V4cCcpO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///56\n")},function(module,exports,__webpack_require__){eval("var ITERATOR = __webpack_require__(5)('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var riter = [7][ITERATOR]();\n riter['return'] = function () { SAFE_CLOSING = true; };\n // eslint-disable-next-line no-throw-literal\n Array.from(riter, function () { throw 2; });\n} catch (e) { /* empty */ }\n\nmodule.exports = function (exec, skipClosing) {\n if (!skipClosing && !SAFE_CLOSING) return false;\n var safe = false;\n try {\n var arr = [7];\n var iter = arr[ITERATOR]();\n iter.next = function () { return { done: safe = true }; };\n arr[ITERATOR] = function () { return iter; };\n exec(arr);\n } catch (e) { /* empty */ }\n return safe;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlci1kZXRlY3QuanM/NWNjNSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxlQUFlLG1CQUFPLENBQUMsQ0FBUTtBQUMvQjs7QUFFQTtBQUNBO0FBQ0EsaUNBQWlDLHFCQUFxQjtBQUN0RDtBQUNBLGlDQUFpQyxTQUFTLEVBQUU7QUFDNUMsQ0FBQyxZQUFZOztBQUViO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QixTQUFTLHFCQUFxQjtBQUMzRCxpQ0FBaUMsYUFBYTtBQUM5QztBQUNBLEdBQUcsWUFBWTtBQUNmO0FBQ0EiLCJmaWxlIjoiNTcuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgSVRFUkFUT1IgPSByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKTtcbnZhciBTQUZFX0NMT1NJTkcgPSBmYWxzZTtcblxudHJ5IHtcbiAgdmFyIHJpdGVyID0gWzddW0lURVJBVE9SXSgpO1xuICByaXRlclsncmV0dXJuJ10gPSBmdW5jdGlvbiAoKSB7IFNBRkVfQ0xPU0lORyA9IHRydWU7IH07XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby10aHJvdy1saXRlcmFsXG4gIEFycmF5LmZyb20ocml0ZXIsIGZ1bmN0aW9uICgpIHsgdGhyb3cgMjsgfSk7XG59IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYywgc2tpcENsb3NpbmcpIHtcbiAgaWYgKCFza2lwQ2xvc2luZyAmJiAhU0FGRV9DTE9TSU5HKSByZXR1cm4gZmFsc2U7XG4gIHZhciBzYWZlID0gZmFsc2U7XG4gIHRyeSB7XG4gICAgdmFyIGFyciA9IFs3XTtcbiAgICB2YXIgaXRlciA9IGFycltJVEVSQVRPUl0oKTtcbiAgICBpdGVyLm5leHQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB7IGRvbmU6IHNhZmUgPSB0cnVlIH07IH07XG4gICAgYXJyW0lURVJBVE9SXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGl0ZXI7IH07XG4gICAgZXhlYyhhcnIpO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbiAgcmV0dXJuIHNhZmU7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///57\n")},function(module,exports,__webpack_require__){"use strict";eval("\n\nvar classof = __webpack_require__(44);\nvar builtinExec = RegExp.prototype.exec;\n\n // `RegExpExec` abstract operation\n// https://tc39.github.io/ecma262/#sec-regexpexec\nmodule.exports = function (R, S) {\n var exec = R.exec;\n if (typeof exec === 'function') {\n var result = exec.call(R, S);\n if (typeof result !== 'object') {\n throw new TypeError('RegExp exec method returned something other than an Object or null');\n }\n return result;\n }\n if (classof(R) !== 'RegExp') {\n throw new TypeError('RegExp#exec called on incompatible receiver');\n }\n return builtinExec.call(R, S);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcmVnZXhwLWV4ZWMtYWJzdHJhY3QuanM/NWYxYiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixjQUFjLG1CQUFPLENBQUMsRUFBWTtBQUNsQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiI1OC5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuL19jbGFzc29mJyk7XG52YXIgYnVpbHRpbkV4ZWMgPSBSZWdFeHAucHJvdG90eXBlLmV4ZWM7XG5cbiAvLyBgUmVnRXhwRXhlY2AgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1yZWdleHBleGVjXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChSLCBTKSB7XG4gIHZhciBleGVjID0gUi5leGVjO1xuICBpZiAodHlwZW9mIGV4ZWMgPT09ICdmdW5jdGlvbicpIHtcbiAgICB2YXIgcmVzdWx0ID0gZXhlYy5jYWxsKFIsIFMpO1xuICAgIGlmICh0eXBlb2YgcmVzdWx0ICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUmVnRXhwIGV4ZWMgbWV0aG9kIHJldHVybmVkIHNvbWV0aGluZyBvdGhlciB0aGFuIGFuIE9iamVjdCBvciBudWxsJyk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgaWYgKGNsYXNzb2YoUikgIT09ICdSZWdFeHAnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUmVnRXhwI2V4ZWMgY2FsbGVkIG9uIGluY29tcGF0aWJsZSByZWNlaXZlcicpO1xuICB9XG4gIHJldHVybiBidWlsdGluRXhlYy5jYWxsKFIsIFMpO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///58\n")},function(module,exports,__webpack_require__){"use strict";eval("\n__webpack_require__(113);\nvar redefine = __webpack_require__(12);\nvar hide = __webpack_require__(11);\nvar fails = __webpack_require__(3);\nvar defined = __webpack_require__(24);\nvar wks = __webpack_require__(5);\nvar regexpExec = __webpack_require__(87);\n\nvar SPECIES = wks('species');\n\nvar REPLACE_SUPPORTS_NAMED_GROUPS = !fails(function () {\n // #replace needs built-in support for named groups.\n // #match works fine because it just return the exec results, even if it has\n // a \"grops\" property.\n var re = /./;\n re.exec = function () {\n var result = [];\n result.groups = { a: '7' };\n return result;\n };\n return ''.replace(re, '$') !== '7';\n});\n\nvar SPLIT_WORKS_WITH_OVERWRITTEN_EXEC = (function () {\n // Chrome 51 has a buggy \"split\" implementation when RegExp#exec !== nativeExec\n var re = /(?:)/;\n var originalExec = re.exec;\n re.exec = function () { return originalExec.apply(this, arguments); };\n var result = 'ab'.split(re);\n return result.length === 2 && result[0] === 'a' && result[1] === 'b';\n})();\n\nmodule.exports = function (KEY, length, exec) {\n var SYMBOL = wks(KEY);\n\n var DELEGATES_TO_SYMBOL = !fails(function () {\n // String methods call symbol-named RegEp methods\n var O = {};\n O[SYMBOL] = function () { return 7; };\n return ''[KEY](O) != 7;\n });\n\n var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL ? !fails(function () {\n // Symbol-named RegExp methods call .exec\n var execCalled = false;\n var re = /a/;\n re.exec = function () { execCalled = true; return null; };\n if (KEY === 'split') {\n // RegExp[@@split] doesn't call the regex's exec method, but first creates\n // a new one. We need to return the patched regex when creating the new one.\n re.constructor = {};\n re.constructor[SPECIES] = function () { return re; };\n }\n re[SYMBOL]('');\n return !execCalled;\n }) : undefined;\n\n if (\n !DELEGATES_TO_SYMBOL ||\n !DELEGATES_TO_EXEC ||\n (KEY === 'replace' && !REPLACE_SUPPORTS_NAMED_GROUPS) ||\n (KEY === 'split' && !SPLIT_WORKS_WITH_OVERWRITTEN_EXEC)\n ) {\n var nativeRegExpMethod = /./[SYMBOL];\n var fns = exec(\n defined,\n SYMBOL,\n ''[KEY],\n function maybeCallNative(nativeMethod, regexp, str, arg2, forceStringMethod) {\n if (regexp.exec === regexpExec) {\n if (DELEGATES_TO_SYMBOL && !forceStringMethod) {\n // The native String method already delegates to @@method (this\n // polyfilled function), leasing to infinite recursion.\n // We avoid it by directly calling the native @@method method.\n return { done: true, value: nativeRegExpMethod.call(regexp, str, arg2) };\n }\n return { done: true, value: nativeMethod.call(str, regexp, arg2) };\n }\n return { done: false };\n }\n );\n var strfn = fns[0];\n var rxfn = fns[1];\n\n redefine(String.prototype, KEY, strfn);\n hide(RegExp.prototype, SYMBOL, length == 2\n // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)\n // 21.2.5.11 RegExp.prototype[@@split](string, limit)\n ? function (string, arg) { return rxfn.call(string, this, arg); }\n // 21.2.5.6 RegExp.prototype[@@match](string)\n // 21.2.5.9 RegExp.prototype[@@search](string)\n : function (string) { return rxfn.call(string, this); }\n );\n }\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZml4LXJlLXdrcy5qcz8yMTRmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsbUJBQU8sQ0FBQyxHQUFtQjtBQUMzQixlQUFlLG1CQUFPLENBQUMsRUFBYTtBQUNwQyxXQUFXLG1CQUFPLENBQUMsRUFBUztBQUM1QixZQUFZLG1CQUFPLENBQUMsQ0FBVTtBQUM5QixjQUFjLG1CQUFPLENBQUMsRUFBWTtBQUNsQyxVQUFVLG1CQUFPLENBQUMsQ0FBUTtBQUMxQixpQkFBaUIsbUJBQU8sQ0FBQyxFQUFnQjs7QUFFekM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5Qiw0Q0FBNEM7QUFDckU7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkIsVUFBVTtBQUN2QztBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkIsbUJBQW1CLGFBQWE7QUFDM0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkMsV0FBVztBQUN4RDtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0I7QUFDcEI7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0MscUNBQXFDO0FBQ3JFO0FBQ0E7QUFDQSwyQkFBMkIsZ0NBQWdDO0FBQzNEO0FBQ0E7QUFDQSIsImZpbGUiOiI1OS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4vZXM2LnJlZ2V4cC5leGVjJyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG52YXIgd2tzID0gcmVxdWlyZSgnLi9fd2tzJyk7XG52YXIgcmVnZXhwRXhlYyA9IHJlcXVpcmUoJy4vX3JlZ2V4cC1leGVjJyk7XG5cbnZhciBTUEVDSUVTID0gd2tzKCdzcGVjaWVzJyk7XG5cbnZhciBSRVBMQUNFX1NVUFBPUlRTX05BTUVEX0dST1VQUyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vICNyZXBsYWNlIG5lZWRzIGJ1aWx0LWluIHN1cHBvcnQgZm9yIG5hbWVkIGdyb3Vwcy5cbiAgLy8gI21hdGNoIHdvcmtzIGZpbmUgYmVjYXVzZSBpdCBqdXN0IHJldHVybiB0aGUgZXhlYyByZXN1bHRzLCBldmVuIGlmIGl0IGhhc1xuICAvLyBhIFwiZ3JvcHNcIiBwcm9wZXJ0eS5cbiAgdmFyIHJlID0gLy4vO1xuICByZS5leGVjID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICByZXN1bHQuZ3JvdXBzID0geyBhOiAnNycgfTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuICByZXR1cm4gJycucmVwbGFjZShyZSwgJyQ8YT4nKSAhPT0gJzcnO1xufSk7XG5cbnZhciBTUExJVF9XT1JLU19XSVRIX09WRVJXUklUVEVOX0VYRUMgPSAoZnVuY3Rpb24gKCkge1xuICAvLyBDaHJvbWUgNTEgaGFzIGEgYnVnZ3kgXCJzcGxpdFwiIGltcGxlbWVudGF0aW9uIHdoZW4gUmVnRXhwI2V4ZWMgIT09IG5hdGl2ZUV4ZWNcbiAgdmFyIHJlID0gLyg/OikvO1xuICB2YXIgb3JpZ2luYWxFeGVjID0gcmUuZXhlYztcbiAgcmUuZXhlYyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG9yaWdpbmFsRXhlYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9O1xuICB2YXIgcmVzdWx0ID0gJ2FiJy5zcGxpdChyZSk7XG4gIHJldHVybiByZXN1bHQubGVuZ3RoID09PSAyICYmIHJlc3VsdFswXSA9PT0gJ2EnICYmIHJlc3VsdFsxXSA9PT0gJ2InO1xufSkoKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoS0VZLCBsZW5ndGgsIGV4ZWMpIHtcbiAgdmFyIFNZTUJPTCA9IHdrcyhLRVkpO1xuXG4gIHZhciBERUxFR0FURVNfVE9fU1lNQk9MID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAvLyBTdHJpbmcgbWV0aG9kcyBjYWxsIHN5bWJvbC1uYW1lZCBSZWdFcCBtZXRob2RzXG4gICAgdmFyIE8gPSB7fTtcbiAgICBPW1NZTUJPTF0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9O1xuICAgIHJldHVybiAnJ1tLRVldKE8pICE9IDc7XG4gIH0pO1xuXG4gIHZhciBERUxFR0FURVNfVE9fRVhFQyA9IERFTEVHQVRFU19UT19TWU1CT0wgPyAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIFN5bWJvbC1uYW1lZCBSZWdFeHAgbWV0aG9kcyBjYWxsIC5leGVjXG4gICAgdmFyIGV4ZWNDYWxsZWQgPSBmYWxzZTtcbiAgICB2YXIgcmUgPSAvYS87XG4gICAgcmUuZXhlYyA9IGZ1bmN0aW9uICgpIHsgZXhlY0NhbGxlZCA9IHRydWU7IHJldHVybiBudWxsOyB9O1xuICAgIGlmIChLRVkgPT09ICdzcGxpdCcpIHtcbiAgICAgIC8vIFJlZ0V4cFtAQHNwbGl0XSBkb2Vzbid0IGNhbGwgdGhlIHJlZ2V4J3MgZXhlYyBtZXRob2QsIGJ1dCBmaXJzdCBjcmVhdGVzXG4gICAgICAvLyBhIG5ldyBvbmUuIFdlIG5lZWQgdG8gcmV0dXJuIHRoZSBwYXRjaGVkIHJlZ2V4IHdoZW4gY3JlYXRpbmcgdGhlIG5ldyBvbmUuXG4gICAgICByZS5jb25zdHJ1Y3RvciA9IHt9O1xuICAgICAgcmUuY29uc3RydWN0b3JbU1BFQ0lFU10gPSBmdW5jdGlvbiAoKSB7IHJldHVybiByZTsgfTtcbiAgICB9XG4gICAgcmVbU1lNQk9MXSgnJyk7XG4gICAgcmV0dXJuICFleGVjQ2FsbGVkO1xuICB9KSA6IHVuZGVmaW5lZDtcblxuICBpZiAoXG4gICAgIURFTEVHQVRFU19UT19TWU1CT0wgfHxcbiAgICAhREVMRUdBVEVTX1RPX0VYRUMgfHxcbiAgICAoS0VZID09PSAncmVwbGFjZScgJiYgIVJFUExBQ0VfU1VQUE9SVFNfTkFNRURfR1JPVVBTKSB8fFxuICAgIChLRVkgPT09ICdzcGxpdCcgJiYgIVNQTElUX1dPUktTX1dJVEhfT1ZFUldSSVRURU5fRVhFQylcbiAgKSB7XG4gICAgdmFyIG5hdGl2ZVJlZ0V4cE1ldGhvZCA9IC8uL1tTWU1CT0xdO1xuICAgIHZhciBmbnMgPSBleGVjKFxuICAgICAgZGVmaW5lZCxcbiAgICAgIFNZTUJPTCxcbiAgICAgICcnW0tFWV0sXG4gICAgICBmdW5jdGlvbiBtYXliZUNhbGxOYXRpdmUobmF0aXZlTWV0aG9kLCByZWdleHAsIHN0ciwgYXJnMiwgZm9yY2VTdHJpbmdNZXRob2QpIHtcbiAgICAgICAgaWYgKHJlZ2V4cC5leGVjID09PSByZWdleHBFeGVjKSB7XG4gICAgICAgICAgaWYgKERFTEVHQVRFU19UT19TWU1CT0wgJiYgIWZvcmNlU3RyaW5nTWV0aG9kKSB7XG4gICAgICAgICAgICAvLyBUaGUgbmF0aXZlIFN0cmluZyBtZXRob2QgYWxyZWFkeSBkZWxlZ2F0ZXMgdG8gQEBtZXRob2QgKHRoaXNcbiAgICAgICAgICAgIC8vIHBvbHlmaWxsZWQgZnVuY3Rpb24pLCBsZWFzaW5nIHRvIGluZmluaXRlIHJlY3Vyc2lvbi5cbiAgICAgICAgICAgIC8vIFdlIGF2b2lkIGl0IGJ5IGRpcmVjdGx5IGNhbGxpbmcgdGhlIG5hdGl2ZSBAQG1ldGhvZCBtZXRob2QuXG4gICAgICAgICAgICByZXR1cm4geyBkb25lOiB0cnVlLCB2YWx1ZTogbmF0aXZlUmVnRXhwTWV0aG9kLmNhbGwocmVnZXhwLCBzdHIsIGFyZzIpIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB7IGRvbmU6IHRydWUsIHZhbHVlOiBuYXRpdmVNZXRob2QuY2FsbChzdHIsIHJlZ2V4cCwgYXJnMikgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBkb25lOiBmYWxzZSB9O1xuICAgICAgfVxuICAgICk7XG4gICAgdmFyIHN0cmZuID0gZm5zWzBdO1xuICAgIHZhciByeGZuID0gZm5zWzFdO1xuXG4gICAgcmVkZWZpbmUoU3RyaW5nLnByb3RvdHlwZSwgS0VZLCBzdHJmbik7XG4gICAgaGlkZShSZWdFeHAucHJvdG90eXBlLCBTWU1CT0wsIGxlbmd0aCA9PSAyXG4gICAgICAvLyAyMS4yLjUuOCBSZWdFeHAucHJvdG90eXBlW0BAcmVwbGFjZV0oc3RyaW5nLCByZXBsYWNlVmFsdWUpXG4gICAgICAvLyAyMS4yLjUuMTEgUmVnRXhwLnByb3RvdHlwZVtAQHNwbGl0XShzdHJpbmcsIGxpbWl0KVxuICAgICAgPyBmdW5jdGlvbiAoc3RyaW5nLCBhcmcpIHsgcmV0dXJuIHJ4Zm4uY2FsbChzdHJpbmcsIHRoaXMsIGFyZyk7IH1cbiAgICAgIC8vIDIxLjIuNS42IFJlZ0V4cC5wcm90b3R5cGVbQEBtYXRjaF0oc3RyaW5nKVxuICAgICAgLy8gMjEuMi41LjkgUmVnRXhwLnByb3RvdHlwZVtAQHNlYXJjaF0oc3RyaW5nKVxuICAgICAgOiBmdW5jdGlvbiAoc3RyaW5nKSB7IHJldHVybiByeGZuLmNhbGwoc3RyaW5nLCB0aGlzKTsgfVxuICAgICk7XG4gIH1cbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///59\n")},function(module,exports,__webpack_require__){eval("var global = __webpack_require__(2);\nvar navigator = global.navigator;\n\nmodule.exports = navigator && navigator.userAgent || '';\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdXNlci1hZ2VudC5qcz9hMjVmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGFBQWEsbUJBQU8sQ0FBQyxDQUFXO0FBQ2hDOztBQUVBIiwiZmlsZSI6IjYwLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIG5hdmlnYXRvciA9IGdsb2JhbC5uYXZpZ2F0b3I7XG5cbm1vZHVsZS5leHBvcnRzID0gbmF2aWdhdG9yICYmIG5hdmlnYXRvci51c2VyQWdlbnQgfHwgJyc7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///60\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar global = __webpack_require__(2);\nvar $export = __webpack_require__(0);\nvar redefine = __webpack_require__(12);\nvar redefineAll = __webpack_require__(41);\nvar meta = __webpack_require__(30);\nvar forOf = __webpack_require__(40);\nvar anInstance = __webpack_require__(39);\nvar isObject = __webpack_require__(4);\nvar fails = __webpack_require__(3);\nvar $iterDetect = __webpack_require__(57);\nvar setToStringTag = __webpack_require__(43);\nvar inheritIfRequired = __webpack_require__(73);\n\nmodule.exports = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) {\n var Base = global[NAME];\n var C = Base;\n var ADDER = IS_MAP ? 'set' : 'add';\n var proto = C && C.prototype;\n var O = {};\n var fixMethod = function (KEY) {\n var fn = proto[KEY];\n redefine(proto, KEY,\n KEY == 'delete' ? function (a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'has' ? function has(a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'get' ? function get(a) {\n return IS_WEAK && !isObject(a) ? undefined : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'add' ? function add(a) { fn.call(this, a === 0 ? 0 : a); return this; }\n : function set(a, b) { fn.call(this, a === 0 ? 0 : a, b); return this; }\n );\n };\n if (typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function () {\n new C().entries().next();\n }))) {\n // create collection constructor\n C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);\n redefineAll(C.prototype, methods);\n meta.NEED = true;\n } else {\n var instance = new C();\n // early implementations not supports chaining\n var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;\n // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false\n var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); });\n // most early implementations doesn't supports iterables, most modern - not close it correctly\n var ACCEPT_ITERABLES = $iterDetect(function (iter) { new C(iter); }); // eslint-disable-line no-new\n // for early implementations -0 and +0 not the same\n var BUGGY_ZERO = !IS_WEAK && fails(function () {\n // V8 ~ Chromium 42- fails only with 5+ elements\n var $instance = new C();\n var index = 5;\n while (index--) $instance[ADDER](index, index);\n return !$instance.has(-0);\n });\n if (!ACCEPT_ITERABLES) {\n C = wrapper(function (target, iterable) {\n anInstance(target, C, NAME);\n var that = inheritIfRequired(new Base(), target, C);\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n return that;\n });\n C.prototype = proto;\n proto.constructor = C;\n }\n if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {\n fixMethod('delete');\n fixMethod('has');\n IS_MAP && fixMethod('get');\n }\n if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);\n // weak collections should not contains .clear method\n if (IS_WEAK && proto.clear) delete proto.clear;\n }\n\n setToStringTag(C, NAME);\n\n O[NAME] = C;\n $export($export.G + $export.W + $export.F * (C != Base), O);\n\n if (!IS_WEAK) common.setStrong(C, NAME, IS_MAP);\n\n return C;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY29sbGVjdGlvbi5qcz9lMGI4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsYUFBYSxtQkFBTyxDQUFDLENBQVc7QUFDaEMsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsZUFBZSxtQkFBTyxDQUFDLEVBQWE7QUFDcEMsa0JBQWtCLG1CQUFPLENBQUMsRUFBaUI7QUFDM0MsV0FBVyxtQkFBTyxDQUFDLEVBQVM7QUFDNUIsWUFBWSxtQkFBTyxDQUFDLEVBQVc7QUFDL0IsaUJBQWlCLG1CQUFPLENBQUMsRUFBZ0I7QUFDekMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsWUFBWSxtQkFBTyxDQUFDLENBQVU7QUFDOUIsa0JBQWtCLG1CQUFPLENBQUMsRUFBZ0I7QUFDMUMscUJBQXFCLG1CQUFPLENBQUMsRUFBc0I7QUFDbkQsd0JBQXdCLG1CQUFPLENBQUMsRUFBd0I7O0FBRXhEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxPQUFPO0FBQ1A7QUFDQSxPQUFPLG1DQUFtQyxnQ0FBZ0MsYUFBYTtBQUN2Riw4QkFBOEIsbUNBQW1DLGFBQWE7QUFDOUU7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLHFEQUFxRDtBQUNyRDtBQUNBLGtEQUFrRCxpQkFBaUIsRUFBRTtBQUNyRTtBQUNBLHdEQUF3RCxhQUFhLEVBQUUsRUFBRTtBQUN6RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSIsImZpbGUiOiI2MS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIHJlZGVmaW5lQWxsID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUtYWxsJyk7XG52YXIgbWV0YSA9IHJlcXVpcmUoJy4vX21ldGEnKTtcbnZhciBmb3JPZiA9IHJlcXVpcmUoJy4vX2Zvci1vZicpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuL19hbi1pbnN0YW5jZScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyICRpdGVyRGV0ZWN0ID0gcmVxdWlyZSgnLi9faXRlci1kZXRlY3QnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgaW5oZXJpdElmUmVxdWlyZWQgPSByZXF1aXJlKCcuL19pbmhlcml0LWlmLXJlcXVpcmVkJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE5BTUUsIHdyYXBwZXIsIG1ldGhvZHMsIGNvbW1vbiwgSVNfTUFQLCBJU19XRUFLKSB7XG4gIHZhciBCYXNlID0gZ2xvYmFsW05BTUVdO1xuICB2YXIgQyA9IEJhc2U7XG4gIHZhciBBRERFUiA9IElTX01BUCA/ICdzZXQnIDogJ2FkZCc7XG4gIHZhciBwcm90byA9IEMgJiYgQy5wcm90b3R5cGU7XG4gIHZhciBPID0ge307XG4gIHZhciBmaXhNZXRob2QgPSBmdW5jdGlvbiAoS0VZKSB7XG4gICAgdmFyIGZuID0gcHJvdG9bS0VZXTtcbiAgICByZWRlZmluZShwcm90bywgS0VZLFxuICAgICAgS0VZID09ICdkZWxldGUnID8gZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgcmV0dXJuIElTX1dFQUsgJiYgIWlzT2JqZWN0KGEpID8gZmFsc2UgOiBmbi5jYWxsKHRoaXMsIGEgPT09IDAgPyAwIDogYSk7XG4gICAgICB9IDogS0VZID09ICdoYXMnID8gZnVuY3Rpb24gaGFzKGEpIHtcbiAgICAgICAgcmV0dXJuIElTX1dFQUsgJiYgIWlzT2JqZWN0KGEpID8gZmFsc2UgOiBmbi5jYWxsKHRoaXMsIGEgPT09IDAgPyAwIDogYSk7XG4gICAgICB9IDogS0VZID09ICdnZXQnID8gZnVuY3Rpb24gZ2V0KGEpIHtcbiAgICAgICAgcmV0dXJuIElTX1dFQUsgJiYgIWlzT2JqZWN0KGEpID8gdW5kZWZpbmVkIDogZm4uY2FsbCh0aGlzLCBhID09PSAwID8gMCA6IGEpO1xuICAgICAgfSA6IEtFWSA9PSAnYWRkJyA/IGZ1bmN0aW9uIGFkZChhKSB7IGZuLmNhbGwodGhpcywgYSA9PT0gMCA/IDAgOiBhKTsgcmV0dXJuIHRoaXM7IH1cbiAgICAgICAgOiBmdW5jdGlvbiBzZXQoYSwgYikgeyBmbi5jYWxsKHRoaXMsIGEgPT09IDAgPyAwIDogYSwgYik7IHJldHVybiB0aGlzOyB9XG4gICAgKTtcbiAgfTtcbiAgaWYgKHR5cGVvZiBDICE9ICdmdW5jdGlvbicgfHwgIShJU19XRUFLIHx8IHByb3RvLmZvckVhY2ggJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICBuZXcgQygpLmVudHJpZXMoKS5uZXh0KCk7XG4gIH0pKSkge1xuICAgIC8vIGNyZWF0ZSBjb2xsZWN0aW9uIGNvbnN0cnVjdG9yXG4gICAgQyA9IGNvbW1vbi5nZXRDb25zdHJ1Y3Rvcih3cmFwcGVyLCBOQU1FLCBJU19NQVAsIEFEREVSKTtcbiAgICByZWRlZmluZUFsbChDLnByb3RvdHlwZSwgbWV0aG9kcyk7XG4gICAgbWV0YS5ORUVEID0gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgaW5zdGFuY2UgPSBuZXcgQygpO1xuICAgIC8vIGVhcmx5IGltcGxlbWVudGF0aW9ucyBub3Qgc3VwcG9ydHMgY2hhaW5pbmdcbiAgICB2YXIgSEFTTlRfQ0hBSU5JTkcgPSBpbnN0YW5jZVtBRERFUl0oSVNfV0VBSyA/IHt9IDogLTAsIDEpICE9IGluc3RhbmNlO1xuICAgIC8vIFY4IH4gIENocm9taXVtIDQwLSB3ZWFrLWNvbGxlY3Rpb25zIHRocm93cyBvbiBwcmltaXRpdmVzLCBidXQgc2hvdWxkIHJldHVybiBmYWxzZVxuICAgIHZhciBUSFJPV1NfT05fUFJJTUlUSVZFUyA9IGZhaWxzKGZ1bmN0aW9uICgpIHsgaW5zdGFuY2UuaGFzKDEpOyB9KTtcbiAgICAvLyBtb3N0IGVhcmx5IGltcGxlbWVudGF0aW9ucyBkb2Vzbid0IHN1cHBvcnRzIGl0ZXJhYmxlcywgbW9zdCBtb2Rlcm4gLSBub3QgY2xvc2UgaXQgY29ycmVjdGx5XG4gICAgdmFyIEFDQ0VQVF9JVEVSQUJMRVMgPSAkaXRlckRldGVjdChmdW5jdGlvbiAoaXRlcikgeyBuZXcgQyhpdGVyKTsgfSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgLy8gZm9yIGVhcmx5IGltcGxlbWVudGF0aW9ucyAtMCBhbmQgKzAgbm90IHRoZSBzYW1lXG4gICAgdmFyIEJVR0dZX1pFUk8gPSAhSVNfV0VBSyAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBWOCB+IENocm9taXVtIDQyLSBmYWlscyBvbmx5IHdpdGggNSsgZWxlbWVudHNcbiAgICAgIHZhciAkaW5zdGFuY2UgPSBuZXcgQygpO1xuICAgICAgdmFyIGluZGV4ID0gNTtcbiAgICAgIHdoaWxlIChpbmRleC0tKSAkaW5zdGFuY2VbQURERVJdKGluZGV4LCBpbmRleCk7XG4gICAgICByZXR1cm4gISRpbnN0YW5jZS5oYXMoLTApO1xuICAgIH0pO1xuICAgIGlmICghQUNDRVBUX0lURVJBQkxFUykge1xuICAgICAgQyA9IHdyYXBwZXIoZnVuY3Rpb24gKHRhcmdldCwgaXRlcmFibGUpIHtcbiAgICAgICAgYW5JbnN0YW5jZSh0YXJnZXQsIEMsIE5BTUUpO1xuICAgICAgICB2YXIgdGhhdCA9IGluaGVyaXRJZlJlcXVpcmVkKG5ldyBCYXNlKCksIHRhcmdldCwgQyk7XG4gICAgICAgIGlmIChpdGVyYWJsZSAhPSB1bmRlZmluZWQpIGZvck9mKGl0ZXJhYmxlLCBJU19NQVAsIHRoYXRbQURERVJdLCB0aGF0KTtcbiAgICAgICAgcmV0dXJuIHRoYXQ7XG4gICAgICB9KTtcbiAgICAgIEMucHJvdG90eXBlID0gcHJvdG87XG4gICAgICBwcm90by5jb25zdHJ1Y3RvciA9IEM7XG4gICAgfVxuICAgIGlmIChUSFJPV1NfT05fUFJJTUlUSVZFUyB8fCBCVUdHWV9aRVJPKSB7XG4gICAgICBmaXhNZXRob2QoJ2RlbGV0ZScpO1xuICAgICAgZml4TWV0aG9kKCdoYXMnKTtcbiAgICAgIElTX01BUCAmJiBmaXhNZXRob2QoJ2dldCcpO1xuICAgIH1cbiAgICBpZiAoQlVHR1lfWkVSTyB8fCBIQVNOVF9DSEFJTklORykgZml4TWV0aG9kKEFEREVSKTtcbiAgICAvLyB3ZWFrIGNvbGxlY3Rpb25zIHNob3VsZCBub3QgY29udGFpbnMgLmNsZWFyIG1ldGhvZFxuICAgIGlmIChJU19XRUFLICYmIHByb3RvLmNsZWFyKSBkZWxldGUgcHJvdG8uY2xlYXI7XG4gIH1cblxuICBzZXRUb1N0cmluZ1RhZyhDLCBOQU1FKTtcblxuICBPW05BTUVdID0gQztcbiAgJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LlcgKyAkZXhwb3J0LkYgKiAoQyAhPSBCYXNlKSwgTyk7XG5cbiAgaWYgKCFJU19XRUFLKSBjb21tb24uc2V0U3Ryb25nKEMsIE5BTUUsIElTX01BUCk7XG5cbiAgcmV0dXJuIEM7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///61\n")},function(module,exports,__webpack_require__){eval("var global = __webpack_require__(2);\nvar hide = __webpack_require__(11);\nvar uid = __webpack_require__(33);\nvar TYPED = uid('typed_array');\nvar VIEW = uid('view');\nvar ABV = !!(global.ArrayBuffer && global.DataView);\nvar CONSTR = ABV;\nvar i = 0;\nvar l = 9;\nvar Typed;\n\nvar TypedArrayConstructors = (\n 'Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array'\n).split(',');\n\nwhile (i < l) {\n if (Typed = global[TypedArrayConstructors[i++]]) {\n hide(Typed.prototype, TYPED, true);\n hide(Typed.prototype, VIEW, true);\n } else CONSTR = false;\n}\n\nmodule.exports = {\n ABV: ABV,\n CONSTR: CONSTR,\n TYPED: TYPED,\n VIEW: VIEW\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdHlwZWQuanM/MGY4OCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxhQUFhLG1CQUFPLENBQUMsQ0FBVztBQUNoQyxXQUFXLG1CQUFPLENBQUMsRUFBUztBQUM1QixVQUFVLG1CQUFPLENBQUMsRUFBUTtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjYyLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi9fdWlkJyk7XG52YXIgVFlQRUQgPSB1aWQoJ3R5cGVkX2FycmF5Jyk7XG52YXIgVklFVyA9IHVpZCgndmlldycpO1xudmFyIEFCViA9ICEhKGdsb2JhbC5BcnJheUJ1ZmZlciAmJiBnbG9iYWwuRGF0YVZpZXcpO1xudmFyIENPTlNUUiA9IEFCVjtcbnZhciBpID0gMDtcbnZhciBsID0gOTtcbnZhciBUeXBlZDtcblxudmFyIFR5cGVkQXJyYXlDb25zdHJ1Y3RvcnMgPSAoXG4gICdJbnQ4QXJyYXksVWludDhBcnJheSxVaW50OENsYW1wZWRBcnJheSxJbnQxNkFycmF5LFVpbnQxNkFycmF5LEludDMyQXJyYXksVWludDMyQXJyYXksRmxvYXQzMkFycmF5LEZsb2F0NjRBcnJheSdcbikuc3BsaXQoJywnKTtcblxud2hpbGUgKGkgPCBsKSB7XG4gIGlmIChUeXBlZCA9IGdsb2JhbFtUeXBlZEFycmF5Q29uc3RydWN0b3JzW2krK11dKSB7XG4gICAgaGlkZShUeXBlZC5wcm90b3R5cGUsIFRZUEVELCB0cnVlKTtcbiAgICBoaWRlKFR5cGVkLnByb3RvdHlwZSwgVklFVywgdHJ1ZSk7XG4gIH0gZWxzZSBDT05TVFIgPSBmYWxzZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEFCVjogQUJWLFxuICBDT05TVFI6IENPTlNUUixcbiAgVFlQRUQ6IFRZUEVELFxuICBWSUVXOiBWSUVXXG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///62\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// Forced replacement prototype accessors methods\nmodule.exports = __webpack_require__(29) || !__webpack_require__(3)(function () {\n var K = Math.random();\n // In FF throws only define methods\n // eslint-disable-next-line no-undef, no-useless-call\n __defineSetter__.call(null, K, function () { /* empty */ });\n delete __webpack_require__(2)[K];\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWZvcmNlZC1wYW0uanM/YzViNCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsaUJBQWlCLG1CQUFPLENBQUMsRUFBWSxNQUFNLG1CQUFPLENBQUMsQ0FBVTtBQUM3RDtBQUNBO0FBQ0E7QUFDQSw4Q0FBOEMsY0FBYztBQUM1RCxTQUFTLG1CQUFPLENBQUMsQ0FBVztBQUM1QixDQUFDIiwiZmlsZSI6IjYzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gRm9yY2VkIHJlcGxhY2VtZW50IHByb3RvdHlwZSBhY2Nlc3NvcnMgbWV0aG9kc1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19saWJyYXJ5JykgfHwgIXJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICB2YXIgSyA9IE1hdGgucmFuZG9tKCk7XG4gIC8vIEluIEZGIHRocm93cyBvbmx5IGRlZmluZSBtZXRob2RzXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZiwgbm8tdXNlbGVzcy1jYWxsXG4gIF9fZGVmaW5lU2V0dGVyX18uY2FsbChudWxsLCBLLCBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pO1xuICBkZWxldGUgcmVxdWlyZSgnLi9fZ2xvYmFsJylbS107XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///63\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// https://tc39.github.io/proposal-setmap-offrom/\nvar $export = __webpack_require__(0);\n\nmodule.exports = function (COLLECTION) {\n $export($export.S, COLLECTION, { of: function of() {\n var length = arguments.length;\n var A = new Array(length);\n while (length--) A[length] = arguments[length];\n return new this(A);\n } });\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2V0LWNvbGxlY3Rpb24tb2YuanM/YzZhMSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDO0FBQ0Esa0NBQWtDO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRyxFQUFFO0FBQ0wiLCJmaWxlIjoiNjQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChDT0xMRUNUSU9OKSB7XG4gICRleHBvcnQoJGV4cG9ydC5TLCBDT0xMRUNUSU9OLCB7IG9mOiBmdW5jdGlvbiBvZigpIHtcbiAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgQSA9IG5ldyBBcnJheShsZW5ndGgpO1xuICAgIHdoaWxlIChsZW5ndGgtLSkgQVtsZW5ndGhdID0gYXJndW1lbnRzW2xlbmd0aF07XG4gICAgcmV0dXJuIG5ldyB0aGlzKEEpO1xuICB9IH0pO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///64\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// https://tc39.github.io/proposal-setmap-offrom/\nvar $export = __webpack_require__(0);\nvar aFunction = __webpack_require__(10);\nvar ctx = __webpack_require__(19);\nvar forOf = __webpack_require__(40);\n\nmodule.exports = function (COLLECTION) {\n $export($export.S, COLLECTION, { from: function from(source /* , mapFn, thisArg */) {\n var mapFn = arguments[1];\n var mapping, A, n, cb;\n aFunction(this);\n mapping = mapFn !== undefined;\n if (mapping) aFunction(mapFn);\n if (source == undefined) return new this();\n A = [];\n if (mapping) {\n n = 0;\n cb = ctx(mapFn, arguments[2], 2);\n forOf(source, false, function (nextItem) {\n A.push(cb(nextItem, n++));\n });\n } else {\n forOf(source, false, A.push, A);\n }\n return new this(A);\n } });\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2V0LWNvbGxlY3Rpb24tZnJvbS5qcz8yOGU0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDLFVBQVUsbUJBQU8sQ0FBQyxFQUFRO0FBQzFCLFlBQVksbUJBQU8sQ0FBQyxFQUFXOztBQUUvQjtBQUNBLGtDQUFrQztBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEdBQUcsRUFBRTtBQUNMIiwiZmlsZSI6IjY1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgZm9yT2YgPSByZXF1aXJlKCcuL19mb3Itb2YnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQ09MTEVDVElPTikge1xuICAkZXhwb3J0KCRleHBvcnQuUywgQ09MTEVDVElPTiwgeyBmcm9tOiBmdW5jdGlvbiBmcm9tKHNvdXJjZSAvKiAsIG1hcEZuLCB0aGlzQXJnICovKSB7XG4gICAgdmFyIG1hcEZuID0gYXJndW1lbnRzWzFdO1xuICAgIHZhciBtYXBwaW5nLCBBLCBuLCBjYjtcbiAgICBhRnVuY3Rpb24odGhpcyk7XG4gICAgbWFwcGluZyA9IG1hcEZuICE9PSB1bmRlZmluZWQ7XG4gICAgaWYgKG1hcHBpbmcpIGFGdW5jdGlvbihtYXBGbik7XG4gICAgaWYgKHNvdXJjZSA9PSB1bmRlZmluZWQpIHJldHVybiBuZXcgdGhpcygpO1xuICAgIEEgPSBbXTtcbiAgICBpZiAobWFwcGluZykge1xuICAgICAgbiA9IDA7XG4gICAgICBjYiA9IGN0eChtYXBGbiwgYXJndW1lbnRzWzJdLCAyKTtcbiAgICAgIGZvck9mKHNvdXJjZSwgZmFsc2UsIGZ1bmN0aW9uIChuZXh0SXRlbSkge1xuICAgICAgICBBLnB1c2goY2IobmV4dEl0ZW0sIG4rKykpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvck9mKHNvdXJjZSwgZmFsc2UsIEEucHVzaCwgQSk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgdGhpcyhBKTtcbiAgfSB9KTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///65\n")},function(module,exports,__webpack_require__){eval("var isObject = __webpack_require__(4);\nvar document = __webpack_require__(2).document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n return is ? document.createElement(it) : {};\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZG9tLWNyZWF0ZS5qcz8yMzBlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGVBQWUsbUJBQU8sQ0FBQyxDQUFXO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiNjYuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBkb2N1bWVudCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLmRvY3VtZW50O1xuLy8gdHlwZW9mIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQgaXMgJ29iamVjdCcgaW4gb2xkIElFXG52YXIgaXMgPSBpc09iamVjdChkb2N1bWVudCkgJiYgaXNPYmplY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXMgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGl0KSA6IHt9O1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///66\n")},function(module,exports,__webpack_require__){eval("var global = __webpack_require__(2);\nvar core = __webpack_require__(18);\nvar LIBRARY = __webpack_require__(29);\nvar wksExt = __webpack_require__(95);\nvar defineProperty = __webpack_require__(8).f;\nmodule.exports = function (name) {\n var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});\n if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) });\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fd2tzLWRlZmluZS5qcz8zYTcyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGFBQWEsbUJBQU8sQ0FBQyxDQUFXO0FBQ2hDLFdBQVcsbUJBQU8sQ0FBQyxFQUFTO0FBQzVCLGNBQWMsbUJBQU8sQ0FBQyxFQUFZO0FBQ2xDLGFBQWEsbUJBQU8sQ0FBQyxFQUFZO0FBQ2pDLHFCQUFxQixtQkFBTyxDQUFDLENBQWM7QUFDM0M7QUFDQSwwREFBMEQsc0JBQXNCO0FBQ2hGLGtGQUFrRix3QkFBd0I7QUFDMUciLCJmaWxlIjoiNjcuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgY29yZSA9IHJlcXVpcmUoJy4vX2NvcmUnKTtcbnZhciBMSUJSQVJZID0gcmVxdWlyZSgnLi9fbGlicmFyeScpO1xudmFyIHdrc0V4dCA9IHJlcXVpcmUoJy4vX3drcy1leHQnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIHZhciAkU3ltYm9sID0gY29yZS5TeW1ib2wgfHwgKGNvcmUuU3ltYm9sID0gTElCUkFSWSA/IHt9IDogZ2xvYmFsLlN5bWJvbCB8fCB7fSk7XG4gIGlmIChuYW1lLmNoYXJBdCgwKSAhPSAnXycgJiYgIShuYW1lIGluICRTeW1ib2wpKSBkZWZpbmVQcm9wZXJ0eSgkU3ltYm9sLCBuYW1lLCB7IHZhbHVlOiB3a3NFeHQuZihuYW1lKSB9KTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///67\n")},function(module,exports,__webpack_require__){eval("var shared = __webpack_require__(47)('keys');\nvar uid = __webpack_require__(33);\nmodule.exports = function (key) {\n return shared[key] || (shared[key] = uid(key));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2hhcmVkLWtleS5qcz82MTNiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGFBQWEsbUJBQU8sQ0FBQyxFQUFXO0FBQ2hDLFVBQVUsbUJBQU8sQ0FBQyxFQUFRO0FBQzFCO0FBQ0E7QUFDQSIsImZpbGUiOiI2OC5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBzaGFyZWQgPSByZXF1aXJlKCcuL19zaGFyZWQnKSgna2V5cycpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4vX3VpZCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiBzaGFyZWRba2V5XSB8fCAoc2hhcmVkW2tleV0gPSB1aWQoa2V5KSk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///68\n")},function(module,exports){eval("// IE 8- don't enum bug keys\nmodule.exports = (\n 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZW51bS1idWcta2V5cy5qcz9lMTFlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjY5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gSUUgOC0gZG9uJ3QgZW51bSBidWcga2V5c1xubW9kdWxlLmV4cG9ydHMgPSAoXG4gICdjb25zdHJ1Y3RvcixoYXNPd25Qcm9wZXJ0eSxpc1Byb3RvdHlwZU9mLHByb3BlcnR5SXNFbnVtZXJhYmxlLHRvTG9jYWxlU3RyaW5nLHRvU3RyaW5nLHZhbHVlT2YnXG4pLnNwbGl0KCcsJyk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///69\n")},function(module,exports,__webpack_require__){eval("var document = __webpack_require__(2).document;\nmodule.exports = document && document.documentElement;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faHRtbC5qcz9mYWIyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGVBQWUsbUJBQU8sQ0FBQyxDQUFXO0FBQ2xDIiwiZmlsZSI6IjcwLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGRvY3VtZW50ID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuZG9jdW1lbnQ7XG5tb2R1bGUuZXhwb3J0cyA9IGRvY3VtZW50ICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///70\n")},function(module,exports,__webpack_require__){eval("// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nvar isObject = __webpack_require__(4);\nvar anObject = __webpack_require__(1);\nvar check = function (O, proto) {\n anObject(O);\n if (!isObject(proto) && proto !== null) throw TypeError(proto + \": can't set as prototype!\");\n};\nmodule.exports = {\n set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line\n function (test, buggy, set) {\n try {\n set = __webpack_require__(19)(Function.call, __webpack_require__(16).f(Object.prototype, '__proto__').set, 2);\n set(test, []);\n buggy = !(test instanceof Array);\n } catch (e) { buggy = true; }\n return function setPrototypeOf(O, proto) {\n check(O, proto);\n if (buggy) O.__proto__ = proto;\n else set(O, proto);\n return O;\n };\n }({}, false) : undefined),\n check: check\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2V0LXByb3RvLmpzPzhiOTciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrREFBa0Q7QUFDbEQ7QUFDQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxFQUFRLGlCQUFpQixtQkFBTyxDQUFDLEVBQWdCO0FBQ3ZFO0FBQ0E7QUFDQSxPQUFPLFlBQVksY0FBYztBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLLEdBQUc7QUFDUjtBQUNBIiwiZmlsZSI6IjcxLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gV29ya3Mgd2l0aCBfX3Byb3RvX18gb25seS4gT2xkIHY4IGNhbid0IHdvcmsgd2l0aCBudWxsIHByb3RvIG9iamVjdHMuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90byAqL1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBjaGVjayA9IGZ1bmN0aW9uIChPLCBwcm90bykge1xuICBhbk9iamVjdChPKTtcbiAgaWYgKCFpc09iamVjdChwcm90bykgJiYgcHJvdG8gIT09IG51bGwpIHRocm93IFR5cGVFcnJvcihwcm90byArIFwiOiBjYW4ndCBzZXQgYXMgcHJvdG90eXBlIVwiKTtcbn07XG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc2V0OiBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgKCdfX3Byb3RvX18nIGluIHt9ID8gLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICAgIGZ1bmN0aW9uICh0ZXN0LCBidWdneSwgc2V0KSB7XG4gICAgICB0cnkge1xuICAgICAgICBzZXQgPSByZXF1aXJlKCcuL19jdHgnKShGdW5jdGlvbi5jYWxsLCByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpLmYoT2JqZWN0LnByb3RvdHlwZSwgJ19fcHJvdG9fXycpLnNldCwgMik7XG4gICAgICAgIHNldCh0ZXN0LCBbXSk7XG4gICAgICAgIGJ1Z2d5ID0gISh0ZXN0IGluc3RhbmNlb2YgQXJyYXkpO1xuICAgICAgfSBjYXRjaCAoZSkgeyBidWdneSA9IHRydWU7IH1cbiAgICAgIHJldHVybiBmdW5jdGlvbiBzZXRQcm90b3R5cGVPZihPLCBwcm90bykge1xuICAgICAgICBjaGVjayhPLCBwcm90byk7XG4gICAgICAgIGlmIChidWdneSkgTy5fX3Byb3RvX18gPSBwcm90bztcbiAgICAgICAgZWxzZSBzZXQoTywgcHJvdG8pO1xuICAgICAgICByZXR1cm4gTztcbiAgICAgIH07XG4gICAgfSh7fSwgZmFsc2UpIDogdW5kZWZpbmVkKSxcbiAgY2hlY2s6IGNoZWNrXG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///71\n")},function(module,exports){eval("module.exports = '\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003' +\n '\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF';\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLXdzLmpzP2ZkZWYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSIsImZpbGUiOiI3Mi5qcyIsInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gJ1xceDA5XFx4MEFcXHgwQlxceDBDXFx4MERcXHgyMFxceEEwXFx1MTY4MFxcdTE4MEVcXHUyMDAwXFx1MjAwMVxcdTIwMDJcXHUyMDAzJyArXG4gICdcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBBXFx1MjAyRlxcdTIwNUZcXHUzMDAwXFx1MjAyOFxcdTIwMjlcXHVGRUZGJztcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///72\n")},function(module,exports,__webpack_require__){eval("var isObject = __webpack_require__(4);\nvar setPrototypeOf = __webpack_require__(71).set;\nmodule.exports = function (that, target, C) {\n var S = target.constructor;\n var P;\n if (S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && isObject(P) && setPrototypeOf) {\n setPrototypeOf(that, P);\n } return that;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faW5oZXJpdC1pZi1yZXF1aXJlZC5qcz81ZGJjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLHFCQUFxQixtQkFBTyxDQUFDLEVBQWM7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCIsImZpbGUiOiI3My5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIHNldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fc2V0LXByb3RvJykuc2V0O1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGhhdCwgdGFyZ2V0LCBDKSB7XG4gIHZhciBTID0gdGFyZ2V0LmNvbnN0cnVjdG9yO1xuICB2YXIgUDtcbiAgaWYgKFMgIT09IEMgJiYgdHlwZW9mIFMgPT0gJ2Z1bmN0aW9uJyAmJiAoUCA9IFMucHJvdG90eXBlKSAhPT0gQy5wcm90b3R5cGUgJiYgaXNPYmplY3QoUCkgJiYgc2V0UHJvdG90eXBlT2YpIHtcbiAgICBzZXRQcm90b3R5cGVPZih0aGF0LCBQKTtcbiAgfSByZXR1cm4gdGhhdDtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///73\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar toInteger = __webpack_require__(21);\nvar defined = __webpack_require__(24);\n\nmodule.exports = function repeat(count) {\n var str = String(defined(this));\n var res = '';\n var n = toInteger(count);\n if (n < 0 || n == Infinity) throw RangeError(\"Count can't be negative\");\n for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) res += str;\n return res;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLXJlcGVhdC5qcz85NzQ0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2QyxjQUFjLG1CQUFPLENBQUMsRUFBWTs7QUFFbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsTUFBTTtBQUNkO0FBQ0EiLCJmaWxlIjoiNzQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gcmVwZWF0KGNvdW50KSB7XG4gIHZhciBzdHIgPSBTdHJpbmcoZGVmaW5lZCh0aGlzKSk7XG4gIHZhciByZXMgPSAnJztcbiAgdmFyIG4gPSB0b0ludGVnZXIoY291bnQpO1xuICBpZiAobiA8IDAgfHwgbiA9PSBJbmZpbml0eSkgdGhyb3cgUmFuZ2VFcnJvcihcIkNvdW50IGNhbid0IGJlIG5lZ2F0aXZlXCIpO1xuICBmb3IgKDtuID4gMDsgKG4gPj4+PSAxKSAmJiAoc3RyICs9IHN0cikpIGlmIChuICYgMSkgcmVzICs9IHN0cjtcbiAgcmV0dXJuIHJlcztcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///74\n")},function(module,exports){eval("// 20.2.2.28 Math.sign(x)\nmodule.exports = Math.sign || function sign(x) {\n // eslint-disable-next-line no-self-compare\n return (x = +x) == 0 || x != x ? x : x < 0 ? -1 : 1;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWF0aC1zaWduLmpzPzk2ZmIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiI3NS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDIwLjIuMi4yOCBNYXRoLnNpZ24oeClcbm1vZHVsZS5leHBvcnRzID0gTWF0aC5zaWduIHx8IGZ1bmN0aW9uIHNpZ24oeCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gIHJldHVybiAoeCA9ICt4KSA9PSAwIHx8IHggIT0geCA/IHggOiB4IDwgMCA/IC0xIDogMTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///75\n")},function(module,exports){eval("// 20.2.2.14 Math.expm1(x)\nvar $expm1 = Math.expm1;\nmodule.exports = (!$expm1\n // Old FF bug\n || $expm1(10) > 22025.465794806719 || $expm1(10) < 22025.4657948067165168\n // Tor Browser bug\n || $expm1(-2e-17) != -2e-17\n) ? function expm1(x) {\n return (x = +x) == 0 ? x : x > -1e-6 && x < 1e-6 ? x + x * x / 2 : Math.exp(x) - 1;\n} : $expm1;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWF0aC1leHBtMS5qcz8yZDVjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiNzYuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyMC4yLjIuMTQgTWF0aC5leHBtMSh4KVxudmFyICRleHBtMSA9IE1hdGguZXhwbTE7XG5tb2R1bGUuZXhwb3J0cyA9ICghJGV4cG0xXG4gIC8vIE9sZCBGRiBidWdcbiAgfHwgJGV4cG0xKDEwKSA+IDIyMDI1LjQ2NTc5NDgwNjcxOSB8fCAkZXhwbTEoMTApIDwgMjIwMjUuNDY1Nzk0ODA2NzE2NTE2OFxuICAvLyBUb3IgQnJvd3NlciBidWdcbiAgfHwgJGV4cG0xKC0yZS0xNykgIT0gLTJlLTE3XG4pID8gZnVuY3Rpb24gZXhwbTEoeCkge1xuICByZXR1cm4gKHggPSAreCkgPT0gMCA/IHggOiB4ID4gLTFlLTYgJiYgeCA8IDFlLTYgPyB4ICsgeCAqIHggLyAyIDogTWF0aC5leHAoeCkgLSAxO1xufSA6ICRleHBtMTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///76\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar LIBRARY = __webpack_require__(29);\nvar $export = __webpack_require__(0);\nvar redefine = __webpack_require__(12);\nvar hide = __webpack_require__(11);\nvar Iterators = __webpack_require__(46);\nvar $iterCreate = __webpack_require__(78);\nvar setToStringTag = __webpack_require__(43);\nvar getPrototypeOf = __webpack_require__(17);\nvar ITERATOR = __webpack_require__(5)('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n $iterCreate(Constructor, NAME, next);\n var getMethod = function (kind) {\n if (!BUGGY && kind in proto) return proto[kind];\n switch (kind) {\n case KEYS: return function keys() { return new Constructor(this, kind); };\n case VALUES: return function values() { return new Constructor(this, kind); };\n } return function entries() { return new Constructor(this, kind); };\n };\n var TAG = NAME + ' Iterator';\n var DEF_VALUES = DEFAULT == VALUES;\n var VALUES_BUG = false;\n var proto = Base.prototype;\n var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n var $default = $native || getMethod(DEFAULT);\n var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n var methods, key, IteratorPrototype;\n // Fix native\n if ($anyNative) {\n IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n // Set @@toStringTag to native iterators\n setToStringTag(IteratorPrototype, TAG, true);\n // fix for some old engines\n if (!LIBRARY && typeof IteratorPrototype[ITERATOR] != 'function') hide(IteratorPrototype, ITERATOR, returnThis);\n }\n }\n // fix Array#{values, @@iterator}.name in V8 / FF\n if (DEF_VALUES && $native && $native.name !== VALUES) {\n VALUES_BUG = true;\n $default = function values() { return $native.call(this); };\n }\n // Define iterator\n if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n hide(proto, ITERATOR, $default);\n }\n // Plug for library\n Iterators[NAME] = $default;\n Iterators[TAG] = returnThis;\n if (DEFAULT) {\n methods = {\n values: DEF_VALUES ? $default : getMethod(VALUES),\n keys: IS_SET ? $default : getMethod(KEYS),\n entries: $entries\n };\n if (FORCED) for (key in methods) {\n if (!(key in proto)) redefine(proto, key, methods[key]);\n } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n }\n return methods;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlci1kZWZpbmUuanM/MDFmOSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGNBQWMsbUJBQU8sQ0FBQyxFQUFZO0FBQ2xDLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyxFQUFhO0FBQ3BDLFdBQVcsbUJBQU8sQ0FBQyxFQUFTO0FBQzVCLGdCQUFnQixtQkFBTyxDQUFDLEVBQWM7QUFDdEMsa0JBQWtCLG1CQUFPLENBQUMsRUFBZ0I7QUFDMUMscUJBQXFCLG1CQUFPLENBQUMsRUFBc0I7QUFDbkQscUJBQXFCLG1CQUFPLENBQUMsRUFBZTtBQUM1QyxlQUFlLG1CQUFPLENBQUMsQ0FBUTtBQUMvQiw4Q0FBOEM7QUFDOUM7QUFDQTtBQUNBOztBQUVBLDhCQUE4QixhQUFhOztBQUUzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUNBQXlDLG9DQUFvQztBQUM3RSw2Q0FBNkMsb0NBQW9DO0FBQ2pGLEtBQUssNEJBQTRCLG9DQUFvQztBQUNyRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLG1CQUFtQjtBQUNuQztBQUNBO0FBQ0Esa0NBQWtDLDJCQUEyQjtBQUM3RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EiLCJmaWxlIjoiNzcuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgTElCUkFSWSA9IHJlcXVpcmUoJy4vX2xpYnJhcnknKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJyk7XG52YXIgJGl0ZXJDcmVhdGUgPSByZXF1aXJlKCcuL19pdGVyLWNyZWF0ZScpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBJVEVSQVRPUiA9IHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpO1xudmFyIEJVR0dZID0gIShbXS5rZXlzICYmICduZXh0JyBpbiBbXS5rZXlzKCkpOyAvLyBTYWZhcmkgaGFzIGJ1Z2d5IGl0ZXJhdG9ycyB3L28gYG5leHRgXG52YXIgRkZfSVRFUkFUT1IgPSAnQEBpdGVyYXRvcic7XG52YXIgS0VZUyA9ICdrZXlzJztcbnZhciBWQUxVRVMgPSAndmFsdWVzJztcblxudmFyIHJldHVyblRoaXMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChCYXNlLCBOQU1FLCBDb25zdHJ1Y3RvciwgbmV4dCwgREVGQVVMVCwgSVNfU0VULCBGT1JDRUQpIHtcbiAgJGl0ZXJDcmVhdGUoQ29uc3RydWN0b3IsIE5BTUUsIG5leHQpO1xuICB2YXIgZ2V0TWV0aG9kID0gZnVuY3Rpb24gKGtpbmQpIHtcbiAgICBpZiAoIUJVR0dZICYmIGtpbmQgaW4gcHJvdG8pIHJldHVybiBwcm90b1traW5kXTtcbiAgICBzd2l0Y2ggKGtpbmQpIHtcbiAgICAgIGNhc2UgS0VZUzogcmV0dXJuIGZ1bmN0aW9uIGtleXMoKSB7IHJldHVybiBuZXcgQ29uc3RydWN0b3IodGhpcywga2luZCk7IH07XG4gICAgICBjYXNlIFZBTFVFUzogcmV0dXJuIGZ1bmN0aW9uIHZhbHVlcygpIHsgcmV0dXJuIG5ldyBDb25zdHJ1Y3Rvcih0aGlzLCBraW5kKTsgfTtcbiAgICB9IHJldHVybiBmdW5jdGlvbiBlbnRyaWVzKCkgeyByZXR1cm4gbmV3IENvbnN0cnVjdG9yKHRoaXMsIGtpbmQpOyB9O1xuICB9O1xuICB2YXIgVEFHID0gTkFNRSArICcgSXRlcmF0b3InO1xuICB2YXIgREVGX1ZBTFVFUyA9IERFRkFVTFQgPT0gVkFMVUVTO1xuICB2YXIgVkFMVUVTX0JVRyA9IGZhbHNlO1xuICB2YXIgcHJvdG8gPSBCYXNlLnByb3RvdHlwZTtcbiAgdmFyICRuYXRpdmUgPSBwcm90b1tJVEVSQVRPUl0gfHwgcHJvdG9bRkZfSVRFUkFUT1JdIHx8IERFRkFVTFQgJiYgcHJvdG9bREVGQVVMVF07XG4gIHZhciAkZGVmYXVsdCA9ICRuYXRpdmUgfHwgZ2V0TWV0aG9kKERFRkFVTFQpO1xuICB2YXIgJGVudHJpZXMgPSBERUZBVUxUID8gIURFRl9WQUxVRVMgPyAkZGVmYXVsdCA6IGdldE1ldGhvZCgnZW50cmllcycpIDogdW5kZWZpbmVkO1xuICB2YXIgJGFueU5hdGl2ZSA9IE5BTUUgPT0gJ0FycmF5JyA/IHByb3RvLmVudHJpZXMgfHwgJG5hdGl2ZSA6ICRuYXRpdmU7XG4gIHZhciBtZXRob2RzLCBrZXksIEl0ZXJhdG9yUHJvdG90eXBlO1xuICAvLyBGaXggbmF0aXZlXG4gIGlmICgkYW55TmF0aXZlKSB7XG4gICAgSXRlcmF0b3JQcm90b3R5cGUgPSBnZXRQcm90b3R5cGVPZigkYW55TmF0aXZlLmNhbGwobmV3IEJhc2UoKSkpO1xuICAgIGlmIChJdGVyYXRvclByb3RvdHlwZSAhPT0gT2JqZWN0LnByb3RvdHlwZSAmJiBJdGVyYXRvclByb3RvdHlwZS5uZXh0KSB7XG4gICAgICAvLyBTZXQgQEB0b1N0cmluZ1RhZyB0byBuYXRpdmUgaXRlcmF0b3JzXG4gICAgICBzZXRUb1N0cmluZ1RhZyhJdGVyYXRvclByb3RvdHlwZSwgVEFHLCB0cnVlKTtcbiAgICAgIC8vIGZpeCBmb3Igc29tZSBvbGQgZW5naW5lc1xuICAgICAgaWYgKCFMSUJSQVJZICYmIHR5cGVvZiBJdGVyYXRvclByb3RvdHlwZVtJVEVSQVRPUl0gIT0gJ2Z1bmN0aW9uJykgaGlkZShJdGVyYXRvclByb3RvdHlwZSwgSVRFUkFUT1IsIHJldHVyblRoaXMpO1xuICAgIH1cbiAgfVxuICAvLyBmaXggQXJyYXkje3ZhbHVlcywgQEBpdGVyYXRvcn0ubmFtZSBpbiBWOCAvIEZGXG4gIGlmIChERUZfVkFMVUVTICYmICRuYXRpdmUgJiYgJG5hdGl2ZS5uYW1lICE9PSBWQUxVRVMpIHtcbiAgICBWQUxVRVNfQlVHID0gdHJ1ZTtcbiAgICAkZGVmYXVsdCA9IGZ1bmN0aW9uIHZhbHVlcygpIHsgcmV0dXJuICRuYXRpdmUuY2FsbCh0aGlzKTsgfTtcbiAgfVxuICAvLyBEZWZpbmUgaXRlcmF0b3JcbiAgaWYgKCghTElCUkFSWSB8fCBGT1JDRUQpICYmIChCVUdHWSB8fCBWQUxVRVNfQlVHIHx8ICFwcm90b1tJVEVSQVRPUl0pKSB7XG4gICAgaGlkZShwcm90bywgSVRFUkFUT1IsICRkZWZhdWx0KTtcbiAgfVxuICAvLyBQbHVnIGZvciBsaWJyYXJ5XG4gIEl0ZXJhdG9yc1tOQU1FXSA9ICRkZWZhdWx0O1xuICBJdGVyYXRvcnNbVEFHXSA9IHJldHVyblRoaXM7XG4gIGlmIChERUZBVUxUKSB7XG4gICAgbWV0aG9kcyA9IHtcbiAgICAgIHZhbHVlczogREVGX1ZBTFVFUyA/ICRkZWZhdWx0IDogZ2V0TWV0aG9kKFZBTFVFUyksXG4gICAgICBrZXlzOiBJU19TRVQgPyAkZGVmYXVsdCA6IGdldE1ldGhvZChLRVlTKSxcbiAgICAgIGVudHJpZXM6ICRlbnRyaWVzXG4gICAgfTtcbiAgICBpZiAoRk9SQ0VEKSBmb3IgKGtleSBpbiBtZXRob2RzKSB7XG4gICAgICBpZiAoIShrZXkgaW4gcHJvdG8pKSByZWRlZmluZShwcm90bywga2V5LCBtZXRob2RzW2tleV0pO1xuICAgIH0gZWxzZSAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIChCVUdHWSB8fCBWQUxVRVNfQlVHKSwgTkFNRSwgbWV0aG9kcyk7XG4gIH1cbiAgcmV0dXJuIG1ldGhvZHM7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///77\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar create = __webpack_require__(36);\nvar descriptor = __webpack_require__(32);\nvar setToStringTag = __webpack_require__(43);\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\n__webpack_require__(11)(IteratorPrototype, __webpack_require__(5)('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n setToStringTag(Constructor, NAME + ' Iterator');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlci1jcmVhdGUuanM/NDFhMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGFBQWEsbUJBQU8sQ0FBQyxFQUFrQjtBQUN2QyxpQkFBaUIsbUJBQU8sQ0FBQyxFQUFrQjtBQUMzQyxxQkFBcUIsbUJBQU8sQ0FBQyxFQUFzQjtBQUNuRDs7QUFFQTtBQUNBLG1CQUFPLENBQUMsRUFBUyxxQkFBcUIsbUJBQU8sQ0FBQyxDQUFRLDRCQUE0QixhQUFhLEVBQUU7O0FBRWpHO0FBQ0EscURBQXFELDRCQUE0QjtBQUNqRjtBQUNBIiwiZmlsZSI6Ijc4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKTtcbnZhciBkZXNjcmlwdG9yID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBJdGVyYXRvclByb3RvdHlwZSA9IHt9O1xuXG4vLyAyNS4xLjIuMS4xICVJdGVyYXRvclByb3RvdHlwZSVbQEBpdGVyYXRvcl0oKVxucmVxdWlyZSgnLi9faGlkZScpKEl0ZXJhdG9yUHJvdG90eXBlLCByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBOQU1FLCBuZXh0KSB7XG4gIENvbnN0cnVjdG9yLnByb3RvdHlwZSA9IGNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSwgeyBuZXh0OiBkZXNjcmlwdG9yKDEsIG5leHQpIH0pO1xuICBzZXRUb1N0cmluZ1RhZyhDb25zdHJ1Y3RvciwgTkFNRSArICcgSXRlcmF0b3InKTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///78\n")},function(module,exports,__webpack_require__){eval("// helper for String#{startsWith, endsWith, includes}\nvar isRegExp = __webpack_require__(56);\nvar defined = __webpack_require__(24);\n\nmodule.exports = function (that, searchString, NAME) {\n if (isRegExp(searchString)) throw TypeError('String#' + NAME + \" doesn't accept regex!\");\n return String(defined(that));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLWNvbnRleHQuanM/ZDJjOCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxzQkFBc0I7QUFDdEIsZUFBZSxtQkFBTyxDQUFDLEVBQWM7QUFDckMsY0FBYyxtQkFBTyxDQUFDLEVBQVk7O0FBRWxDO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6Ijc5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaGVscGVyIGZvciBTdHJpbmcje3N0YXJ0c1dpdGgsIGVuZHNXaXRoLCBpbmNsdWRlc31cbnZhciBpc1JlZ0V4cCA9IHJlcXVpcmUoJy4vX2lzLXJlZ2V4cCcpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRoYXQsIHNlYXJjaFN0cmluZywgTkFNRSkge1xuICBpZiAoaXNSZWdFeHAoc2VhcmNoU3RyaW5nKSkgdGhyb3cgVHlwZUVycm9yKCdTdHJpbmcjJyArIE5BTUUgKyBcIiBkb2Vzbid0IGFjY2VwdCByZWdleCFcIik7XG4gIHJldHVybiBTdHJpbmcoZGVmaW5lZCh0aGF0KSk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///79\n")},function(module,exports,__webpack_require__){eval("var MATCH = __webpack_require__(5)('match');\nmodule.exports = function (KEY) {\n var re = /./;\n try {\n '/./'[KEY](re);\n } catch (e) {\n try {\n re[MATCH] = false;\n return !'/./'[KEY](re);\n } catch (f) { /* empty */ }\n } return true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZmFpbHMtaXMtcmVnZXhwLmpzPzUxNDciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSxtQkFBTyxDQUFDLENBQVE7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsS0FBSyxZQUFZO0FBQ2pCLEdBQUc7QUFDSCIsImZpbGUiOiI4MC5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBNQVRDSCA9IHJlcXVpcmUoJy4vX3drcycpKCdtYXRjaCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoS0VZKSB7XG4gIHZhciByZSA9IC8uLztcbiAgdHJ5IHtcbiAgICAnLy4vJ1tLRVldKHJlKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHRyeSB7XG4gICAgICByZVtNQVRDSF0gPSBmYWxzZTtcbiAgICAgIHJldHVybiAhJy8uLydbS0VZXShyZSk7XG4gICAgfSBjYXRjaCAoZikgeyAvKiBlbXB0eSAqLyB9XG4gIH0gcmV0dXJuIHRydWU7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///80\n")},function(module,exports,__webpack_require__){eval("// check on default Array iterator\nvar Iterators = __webpack_require__(46);\nvar ITERATOR = __webpack_require__(5)('iterator');\nvar ArrayProto = Array.prototype;\n\nmodule.exports = function (it) {\n return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtYXJyYXktaXRlci5qcz8zM2E0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsZ0JBQWdCLG1CQUFPLENBQUMsRUFBYztBQUN0QyxlQUFlLG1CQUFPLENBQUMsQ0FBUTtBQUMvQjs7QUFFQTtBQUNBO0FBQ0EiLCJmaWxlIjoiODEuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBjaGVjayBvbiBkZWZhdWx0IEFycmF5IGl0ZXJhdG9yXG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJyk7XG52YXIgSVRFUkFUT1IgPSByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKTtcbnZhciBBcnJheVByb3RvID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgIT09IHVuZGVmaW5lZCAmJiAoSXRlcmF0b3JzLkFycmF5ID09PSBpdCB8fCBBcnJheVByb3RvW0lURVJBVE9SXSA9PT0gaXQpO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///81\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $defineProperty = __webpack_require__(8);\nvar createDesc = __webpack_require__(32);\n\nmodule.exports = function (object, index, value) {\n if (index in object) $defineProperty.f(object, index, createDesc(0, value));\n else object[index] = value;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY3JlYXRlLXByb3BlcnR5LmpzP2YxYWUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixzQkFBc0IsbUJBQU8sQ0FBQyxDQUFjO0FBQzVDLGlCQUFpQixtQkFBTyxDQUFDLEVBQWtCOztBQUUzQztBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiI4Mi5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciAkZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciBjcmVhdGVEZXNjID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIGluZGV4LCB2YWx1ZSkge1xuICBpZiAoaW5kZXggaW4gb2JqZWN0KSAkZGVmaW5lUHJvcGVydHkuZihvYmplY3QsIGluZGV4LCBjcmVhdGVEZXNjKDAsIHZhbHVlKSk7XG4gIGVsc2Ugb2JqZWN0W2luZGV4XSA9IHZhbHVlO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///82\n")},function(module,exports,__webpack_require__){eval("var classof = __webpack_require__(44);\nvar ITERATOR = __webpack_require__(5)('iterator');\nvar Iterators = __webpack_require__(46);\nmodule.exports = __webpack_require__(18).getIteratorMethod = function (it) {\n if (it != undefined) return it[ITERATOR]\n || it['@@iterator']\n || Iterators[classof(it)];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9jb3JlLmdldC1pdGVyYXRvci1tZXRob2QuanM/MjdlZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLG1CQUFPLENBQUMsRUFBWTtBQUNsQyxlQUFlLG1CQUFPLENBQUMsQ0FBUTtBQUMvQixnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFjO0FBQ3RDLGlCQUFpQixtQkFBTyxDQUFDLEVBQVM7QUFDbEM7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiODMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4vX2NsYXNzb2YnKTtcbnZhciBJVEVSQVRPUiA9IHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19jb3JlJykuZ2V0SXRlcmF0b3JNZXRob2QgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGl0ICE9IHVuZGVmaW5lZCkgcmV0dXJuIGl0W0lURVJBVE9SXVxuICAgIHx8IGl0WydAQGl0ZXJhdG9yJ11cbiAgICB8fCBJdGVyYXRvcnNbY2xhc3NvZihpdCldO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///83\n")},function(module,exports,__webpack_require__){eval("// 9.4.2.3 ArraySpeciesCreate(originalArray, length)\nvar speciesConstructor = __webpack_require__(223);\n\nmodule.exports = function (original, length) {\n return new (speciesConstructor(original))(length);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktc3BlY2llcy1jcmVhdGUuanM/Y2QxYyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLHlCQUF5QixtQkFBTyxDQUFDLEdBQThCOztBQUUvRDtBQUNBO0FBQ0EiLCJmaWxlIjoiODQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyA5LjQuMi4zIEFycmF5U3BlY2llc0NyZWF0ZShvcmlnaW5hbEFycmF5LCBsZW5ndGgpXG52YXIgc3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi9fYXJyYXktc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcmlnaW5hbCwgbGVuZ3RoKSB7XG4gIHJldHVybiBuZXcgKHNwZWNpZXNDb25zdHJ1Y3RvcihvcmlnaW5hbCkpKGxlbmd0aCk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///84\n")},function(module,exports,__webpack_require__){"use strict";eval("// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\n\nvar toObject = __webpack_require__(9);\nvar toAbsoluteIndex = __webpack_require__(35);\nvar toLength = __webpack_require__(6);\nmodule.exports = function fill(value /* , start = 0, end = @length */) {\n var O = toObject(this);\n var length = toLength(O.length);\n var aLen = arguments.length;\n var index = toAbsoluteIndex(aLen > 1 ? arguments[1] : undefined, length);\n var end = aLen > 2 ? arguments[2] : undefined;\n var endPos = end === undefined ? length : toAbsoluteIndex(end, length);\n while (endPos > index) O[index++] = value;\n return O;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktZmlsbC5qcz8zNmJkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ2E7QUFDYixlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxzQkFBc0IsbUJBQU8sQ0FBQyxFQUFzQjtBQUNwRCxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiI4NS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDIyLjEuMy42IEFycmF5LnByb3RvdHlwZS5maWxsKHZhbHVlLCBzdGFydCA9IDAsIGVuZCA9IHRoaXMubGVuZ3RoKVxuJ3VzZSBzdHJpY3QnO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi9fdG8tYWJzb2x1dGUtaW5kZXgnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBmaWxsKHZhbHVlIC8qICwgc3RhcnQgPSAwLCBlbmQgPSBAbGVuZ3RoICovKSB7XG4gIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gIHZhciBsZW5ndGggPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgdmFyIGluZGV4ID0gdG9BYnNvbHV0ZUluZGV4KGFMZW4gPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkLCBsZW5ndGgpO1xuICB2YXIgZW5kID0gYUxlbiA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQ7XG4gIHZhciBlbmRQb3MgPSBlbmQgPT09IHVuZGVmaW5lZCA/IGxlbmd0aCA6IHRvQWJzb2x1dGVJbmRleChlbmQsIGxlbmd0aCk7XG4gIHdoaWxlIChlbmRQb3MgPiBpbmRleCkgT1tpbmRleCsrXSA9IHZhbHVlO1xuICByZXR1cm4gTztcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///85\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar addToUnscopables = __webpack_require__(31);\nvar step = __webpack_require__(112);\nvar Iterators = __webpack_require__(46);\nvar toIObject = __webpack_require__(15);\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = __webpack_require__(77)(Array, 'Array', function (iterated, kind) {\n this._t = toIObject(iterated); // target\n this._i = 0; // next index\n this._k = kind; // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var kind = this._k;\n var index = this._i++;\n if (!O || index >= O.length) {\n this._t = undefined;\n return step(1);\n }\n if (kind == 'keys') return step(0, index);\n if (kind == 'values') return step(0, O[index]);\n return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuaXRlcmF0b3IuanM/Y2FkZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLHVCQUF1QixtQkFBTyxDQUFDLEVBQXVCO0FBQ3RELFdBQVcsbUJBQU8sQ0FBQyxHQUFjO0FBQ2pDLGdCQUFnQixtQkFBTyxDQUFDLEVBQWM7QUFDdEMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTs7QUFFdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsbUJBQU8sQ0FBQyxFQUFnQjtBQUN6QyxnQ0FBZ0M7QUFDaEMsY0FBYztBQUNkLGlCQUFpQjtBQUNqQjtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0EiLCJmaWxlIjoiODYuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgYWRkVG9VbnNjb3BhYmxlcyA9IHJlcXVpcmUoJy4vX2FkZC10by11bnNjb3BhYmxlcycpO1xudmFyIHN0ZXAgPSByZXF1aXJlKCcuL19pdGVyLXN0ZXAnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG5cbi8vIDIyLjEuMy40IEFycmF5LnByb3RvdHlwZS5lbnRyaWVzKClcbi8vIDIyLjEuMy4xMyBBcnJheS5wcm90b3R5cGUua2V5cygpXG4vLyAyMi4xLjMuMjkgQXJyYXkucHJvdG90eXBlLnZhbHVlcygpXG4vLyAyMi4xLjMuMzAgQXJyYXkucHJvdG90eXBlW0BAaXRlcmF0b3JdKClcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9faXRlci1kZWZpbmUnKShBcnJheSwgJ0FycmF5JywgZnVuY3Rpb24gKGl0ZXJhdGVkLCBraW5kKSB7XG4gIHRoaXMuX3QgPSB0b0lPYmplY3QoaXRlcmF0ZWQpOyAvLyB0YXJnZXRcbiAgdGhpcy5faSA9IDA7ICAgICAgICAgICAgICAgICAgIC8vIG5leHQgaW5kZXhcbiAgdGhpcy5fayA9IGtpbmQ7ICAgICAgICAgICAgICAgIC8vIGtpbmRcbi8vIDIyLjEuNS4yLjEgJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlLm5leHQoKVxufSwgZnVuY3Rpb24gKCkge1xuICB2YXIgTyA9IHRoaXMuX3Q7XG4gIHZhciBraW5kID0gdGhpcy5faztcbiAgdmFyIGluZGV4ID0gdGhpcy5faSsrO1xuICBpZiAoIU8gfHwgaW5kZXggPj0gTy5sZW5ndGgpIHtcbiAgICB0aGlzLl90ID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiBzdGVwKDEpO1xuICB9XG4gIGlmIChraW5kID09ICdrZXlzJykgcmV0dXJuIHN0ZXAoMCwgaW5kZXgpO1xuICBpZiAoa2luZCA9PSAndmFsdWVzJykgcmV0dXJuIHN0ZXAoMCwgT1tpbmRleF0pO1xuICByZXR1cm4gc3RlcCgwLCBbaW5kZXgsIE9baW5kZXhdXSk7XG59LCAndmFsdWVzJyk7XG5cbi8vIGFyZ3VtZW50c0xpc3RbQEBpdGVyYXRvcl0gaXMgJUFycmF5UHJvdG9fdmFsdWVzJSAoOS40LjQuNiwgOS40LjQuNylcbkl0ZXJhdG9ycy5Bcmd1bWVudHMgPSBJdGVyYXRvcnMuQXJyYXk7XG5cbmFkZFRvVW5zY29wYWJsZXMoJ2tleXMnKTtcbmFkZFRvVW5zY29wYWJsZXMoJ3ZhbHVlcycpO1xuYWRkVG9VbnNjb3BhYmxlcygnZW50cmllcycpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///86\n")},function(module,exports,__webpack_require__){"use strict";eval("\n\nvar regexpFlags = __webpack_require__(50);\n\nvar nativeExec = RegExp.prototype.exec;\n// This always refers to the native implementation, because the\n// String#replace polyfill uses ./fix-regexp-well-known-symbol-logic.js,\n// which loads this file before patching the method.\nvar nativeReplace = String.prototype.replace;\n\nvar patchedExec = nativeExec;\n\nvar LAST_INDEX = 'lastIndex';\n\nvar UPDATES_LAST_INDEX_WRONG = (function () {\n var re1 = /a/,\n re2 = /b*/g;\n nativeExec.call(re1, 'a');\n nativeExec.call(re2, 'a');\n return re1[LAST_INDEX] !== 0 || re2[LAST_INDEX] !== 0;\n})();\n\n// nonparticipating capturing group, copied from es5-shim's String#split patch.\nvar NPCG_INCLUDED = /()??/.exec('')[1] !== undefined;\n\nvar PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED;\n\nif (PATCH) {\n patchedExec = function exec(str) {\n var re = this;\n var lastIndex, reCopy, match, i;\n\n if (NPCG_INCLUDED) {\n reCopy = new RegExp('^' + re.source + '$(?!\\\\s)', regexpFlags.call(re));\n }\n if (UPDATES_LAST_INDEX_WRONG) lastIndex = re[LAST_INDEX];\n\n match = nativeExec.call(re, str);\n\n if (UPDATES_LAST_INDEX_WRONG && match) {\n re[LAST_INDEX] = re.global ? match.index + match[0].length : lastIndex;\n }\n if (NPCG_INCLUDED && match && match.length > 1) {\n // Fix browsers whose `exec` methods don't consistently return `undefined`\n // for NPCG, like IE8. NOTE: This doesn' work for /(.?)?/\n // eslint-disable-next-line no-loop-func\n nativeReplace.call(match[0], reCopy, function () {\n for (i = 1; i < arguments.length - 2; i++) {\n if (arguments[i] === undefined) match[i] = undefined;\n }\n });\n }\n\n return match;\n };\n}\n\nmodule.exports = patchedExec;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcmVnZXhwLWV4ZWMuanM/NTIwYSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixrQkFBa0IsbUJBQU8sQ0FBQyxFQUFVOztBQUVwQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLDBCQUEwQjtBQUM3QztBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiI4Ny5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHJlZ2V4cEZsYWdzID0gcmVxdWlyZSgnLi9fZmxhZ3MnKTtcblxudmFyIG5hdGl2ZUV4ZWMgPSBSZWdFeHAucHJvdG90eXBlLmV4ZWM7XG4vLyBUaGlzIGFsd2F5cyByZWZlcnMgdG8gdGhlIG5hdGl2ZSBpbXBsZW1lbnRhdGlvbiwgYmVjYXVzZSB0aGVcbi8vIFN0cmluZyNyZXBsYWNlIHBvbHlmaWxsIHVzZXMgLi9maXgtcmVnZXhwLXdlbGwta25vd24tc3ltYm9sLWxvZ2ljLmpzLFxuLy8gd2hpY2ggbG9hZHMgdGhpcyBmaWxlIGJlZm9yZSBwYXRjaGluZyB0aGUgbWV0aG9kLlxudmFyIG5hdGl2ZVJlcGxhY2UgPSBTdHJpbmcucHJvdG90eXBlLnJlcGxhY2U7XG5cbnZhciBwYXRjaGVkRXhlYyA9IG5hdGl2ZUV4ZWM7XG5cbnZhciBMQVNUX0lOREVYID0gJ2xhc3RJbmRleCc7XG5cbnZhciBVUERBVEVTX0xBU1RfSU5ERVhfV1JPTkcgPSAoZnVuY3Rpb24gKCkge1xuICB2YXIgcmUxID0gL2EvLFxuICAgICAgcmUyID0gL2IqL2c7XG4gIG5hdGl2ZUV4ZWMuY2FsbChyZTEsICdhJyk7XG4gIG5hdGl2ZUV4ZWMuY2FsbChyZTIsICdhJyk7XG4gIHJldHVybiByZTFbTEFTVF9JTkRFWF0gIT09IDAgfHwgcmUyW0xBU1RfSU5ERVhdICE9PSAwO1xufSkoKTtcblxuLy8gbm9ucGFydGljaXBhdGluZyBjYXB0dXJpbmcgZ3JvdXAsIGNvcGllZCBmcm9tIGVzNS1zaGltJ3MgU3RyaW5nI3NwbGl0IHBhdGNoLlxudmFyIE5QQ0dfSU5DTFVERUQgPSAvKCk/Py8uZXhlYygnJylbMV0gIT09IHVuZGVmaW5lZDtcblxudmFyIFBBVENIID0gVVBEQVRFU19MQVNUX0lOREVYX1dST05HIHx8IE5QQ0dfSU5DTFVERUQ7XG5cbmlmIChQQVRDSCkge1xuICBwYXRjaGVkRXhlYyA9IGZ1bmN0aW9uIGV4ZWMoc3RyKSB7XG4gICAgdmFyIHJlID0gdGhpcztcbiAgICB2YXIgbGFzdEluZGV4LCByZUNvcHksIG1hdGNoLCBpO1xuXG4gICAgaWYgKE5QQ0dfSU5DTFVERUQpIHtcbiAgICAgIHJlQ29weSA9IG5ldyBSZWdFeHAoJ14nICsgcmUuc291cmNlICsgJyQoPyFcXFxccyknLCByZWdleHBGbGFncy5jYWxsKHJlKSk7XG4gICAgfVxuICAgIGlmIChVUERBVEVTX0xBU1RfSU5ERVhfV1JPTkcpIGxhc3RJbmRleCA9IHJlW0xBU1RfSU5ERVhdO1xuXG4gICAgbWF0Y2ggPSBuYXRpdmVFeGVjLmNhbGwocmUsIHN0cik7XG5cbiAgICBpZiAoVVBEQVRFU19MQVNUX0lOREVYX1dST05HICYmIG1hdGNoKSB7XG4gICAgICByZVtMQVNUX0lOREVYXSA9IHJlLmdsb2JhbCA/IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoIDogbGFzdEluZGV4O1xuICAgIH1cbiAgICBpZiAoTlBDR19JTkNMVURFRCAmJiBtYXRjaCAmJiBtYXRjaC5sZW5ndGggPiAxKSB7XG4gICAgICAvLyBGaXggYnJvd3NlcnMgd2hvc2UgYGV4ZWNgIG1ldGhvZHMgZG9uJ3QgY29uc2lzdGVudGx5IHJldHVybiBgdW5kZWZpbmVkYFxuICAgICAgLy8gZm9yIE5QQ0csIGxpa2UgSUU4LiBOT1RFOiBUaGlzIGRvZXNuJyB3b3JrIGZvciAvKC4/KT8vXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbG9vcC1mdW5jXG4gICAgICBuYXRpdmVSZXBsYWNlLmNhbGwobWF0Y2hbMF0sIHJlQ29weSwgZnVuY3Rpb24gKCkge1xuICAgICAgICBmb3IgKGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aCAtIDI7IGkrKykge1xuICAgICAgICAgIGlmIChhcmd1bWVudHNbaV0gPT09IHVuZGVmaW5lZCkgbWF0Y2hbaV0gPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBtYXRjaDtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBwYXRjaGVkRXhlYztcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///87\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar at = __webpack_require__(55)(true);\n\n // `AdvanceStringIndex` abstract operation\n// https://tc39.github.io/ecma262/#sec-advancestringindex\nmodule.exports = function (S, index, unicode) {\n return index + (unicode ? at(S, index).length : 1);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYWR2YW5jZS1zdHJpbmctaW5kZXguanM/MDM5MCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLFNBQVMsbUJBQU8sQ0FBQyxFQUFjOztBQUUvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6Ijg4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIGF0ID0gcmVxdWlyZSgnLi9fc3RyaW5nLWF0JykodHJ1ZSk7XG5cbiAvLyBgQWR2YW5jZVN0cmluZ0luZGV4YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFkdmFuY2VzdHJpbmdpbmRleFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoUywgaW5kZXgsIHVuaWNvZGUpIHtcbiAgcmV0dXJuIGluZGV4ICsgKHVuaWNvZGUgPyBhdChTLCBpbmRleCkubGVuZ3RoIDogMSk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///88\n")},function(module,exports,__webpack_require__){eval("var ctx = __webpack_require__(19);\nvar invoke = __webpack_require__(102);\nvar html = __webpack_require__(70);\nvar cel = __webpack_require__(66);\nvar global = __webpack_require__(2);\nvar process = global.process;\nvar setTask = global.setImmediate;\nvar clearTask = global.clearImmediate;\nvar MessageChannel = global.MessageChannel;\nvar Dispatch = global.Dispatch;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar defer, channel, port;\nvar run = function () {\n var id = +this;\n // eslint-disable-next-line no-prototype-builtins\n if (queue.hasOwnProperty(id)) {\n var fn = queue[id];\n delete queue[id];\n fn();\n }\n};\nvar listener = function (event) {\n run.call(event.data);\n};\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!setTask || !clearTask) {\n setTask = function setImmediate(fn) {\n var args = [];\n var i = 1;\n while (arguments.length > i) args.push(arguments[i++]);\n queue[++counter] = function () {\n // eslint-disable-next-line no-new-func\n invoke(typeof fn == 'function' ? fn : Function(fn), args);\n };\n defer(counter);\n return counter;\n };\n clearTask = function clearImmediate(id) {\n delete queue[id];\n };\n // Node.js 0.8-\n if (__webpack_require__(20)(process) == 'process') {\n defer = function (id) {\n process.nextTick(ctx(run, id, 1));\n };\n // Sphere (JS game engine) Dispatch API\n } else if (Dispatch && Dispatch.now) {\n defer = function (id) {\n Dispatch.now(ctx(run, id, 1));\n };\n // Browsers with MessageChannel, includes WebWorkers\n } else if (MessageChannel) {\n channel = new MessageChannel();\n port = channel.port2;\n channel.port1.onmessage = listener;\n defer = ctx(port.postMessage, port, 1);\n // Browsers with postMessage, skip WebWorkers\n // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts) {\n defer = function (id) {\n global.postMessage(id + '', '*');\n };\n global.addEventListener('message', listener, false);\n // IE8-\n } else if (ONREADYSTATECHANGE in cel('script')) {\n defer = function (id) {\n html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () {\n html.removeChild(this);\n run.call(id);\n };\n };\n // Rest old browsers\n } else {\n defer = function (id) {\n setTimeout(ctx(run, id, 1), 0);\n };\n }\n}\nmodule.exports = {\n set: setTask,\n clear: clearTask\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdGFzay5qcz8xOTkxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFVBQVUsbUJBQU8sQ0FBQyxFQUFRO0FBQzFCLGFBQWEsbUJBQU8sQ0FBQyxHQUFXO0FBQ2hDLFdBQVcsbUJBQU8sQ0FBQyxFQUFTO0FBQzVCLFVBQVUsbUJBQU8sQ0FBQyxFQUFlO0FBQ2pDLGFBQWEsbUJBQU8sQ0FBQyxDQUFXO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNLG1CQUFPLENBQUMsRUFBUTtBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiODkuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgaW52b2tlID0gcmVxdWlyZSgnLi9faW52b2tlJyk7XG52YXIgaHRtbCA9IHJlcXVpcmUoJy4vX2h0bWwnKTtcbnZhciBjZWwgPSByZXF1aXJlKCcuL19kb20tY3JlYXRlJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgcHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzO1xudmFyIHNldFRhc2sgPSBnbG9iYWwuc2V0SW1tZWRpYXRlO1xudmFyIGNsZWFyVGFzayA9IGdsb2JhbC5jbGVhckltbWVkaWF0ZTtcbnZhciBNZXNzYWdlQ2hhbm5lbCA9IGdsb2JhbC5NZXNzYWdlQ2hhbm5lbDtcbnZhciBEaXNwYXRjaCA9IGdsb2JhbC5EaXNwYXRjaDtcbnZhciBjb3VudGVyID0gMDtcbnZhciBxdWV1ZSA9IHt9O1xudmFyIE9OUkVBRFlTVEFURUNIQU5HRSA9ICdvbnJlYWR5c3RhdGVjaGFuZ2UnO1xudmFyIGRlZmVyLCBjaGFubmVsLCBwb3J0O1xudmFyIHJ1biA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGlkID0gK3RoaXM7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgaWYgKHF1ZXVlLmhhc093blByb3BlcnR5KGlkKSkge1xuICAgIHZhciBmbiA9IHF1ZXVlW2lkXTtcbiAgICBkZWxldGUgcXVldWVbaWRdO1xuICAgIGZuKCk7XG4gIH1cbn07XG52YXIgbGlzdGVuZXIgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgcnVuLmNhbGwoZXZlbnQuZGF0YSk7XG59O1xuLy8gTm9kZS5qcyAwLjkrICYgSUUxMCsgaGFzIHNldEltbWVkaWF0ZSwgb3RoZXJ3aXNlOlxuaWYgKCFzZXRUYXNrIHx8ICFjbGVhclRhc2spIHtcbiAgc2V0VGFzayA9IGZ1bmN0aW9uIHNldEltbWVkaWF0ZShmbikge1xuICAgIHZhciBhcmdzID0gW107XG4gICAgdmFyIGkgPSAxO1xuICAgIHdoaWxlIChhcmd1bWVudHMubGVuZ3RoID4gaSkgYXJncy5wdXNoKGFyZ3VtZW50c1tpKytdKTtcbiAgICBxdWV1ZVsrK2NvdW50ZXJdID0gZnVuY3Rpb24gKCkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jXG4gICAgICBpbnZva2UodHlwZW9mIGZuID09ICdmdW5jdGlvbicgPyBmbiA6IEZ1bmN0aW9uKGZuKSwgYXJncyk7XG4gICAgfTtcbiAgICBkZWZlcihjb3VudGVyKTtcbiAgICByZXR1cm4gY291bnRlcjtcbiAgfTtcbiAgY2xlYXJUYXNrID0gZnVuY3Rpb24gY2xlYXJJbW1lZGlhdGUoaWQpIHtcbiAgICBkZWxldGUgcXVldWVbaWRdO1xuICB9O1xuICAvLyBOb2RlLmpzIDAuOC1cbiAgaWYgKHJlcXVpcmUoJy4vX2NvZicpKHByb2Nlc3MpID09ICdwcm9jZXNzJykge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGN0eChydW4sIGlkLCAxKSk7XG4gICAgfTtcbiAgLy8gU3BoZXJlIChKUyBnYW1lIGVuZ2luZSkgRGlzcGF0Y2ggQVBJXG4gIH0gZWxzZSBpZiAoRGlzcGF0Y2ggJiYgRGlzcGF0Y2gubm93KSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIERpc3BhdGNoLm5vdyhjdHgocnVuLCBpZCwgMSkpO1xuICAgIH07XG4gIC8vIEJyb3dzZXJzIHdpdGggTWVzc2FnZUNoYW5uZWwsIGluY2x1ZGVzIFdlYldvcmtlcnNcbiAgfSBlbHNlIGlmIChNZXNzYWdlQ2hhbm5lbCkge1xuICAgIGNoYW5uZWwgPSBuZXcgTWVzc2FnZUNoYW5uZWwoKTtcbiAgICBwb3J0ID0gY2hhbm5lbC5wb3J0MjtcbiAgICBjaGFubmVsLnBvcnQxLm9ubWVzc2FnZSA9IGxpc3RlbmVyO1xuICAgIGRlZmVyID0gY3R4KHBvcnQucG9zdE1lc3NhZ2UsIHBvcnQsIDEpO1xuICAvLyBCcm93c2VycyB3aXRoIHBvc3RNZXNzYWdlLCBza2lwIFdlYldvcmtlcnNcbiAgLy8gSUU4IGhhcyBwb3N0TWVzc2FnZSwgYnV0IGl0J3Mgc3luYyAmIHR5cGVvZiBpdHMgcG9zdE1lc3NhZ2UgaXMgJ29iamVjdCdcbiAgfSBlbHNlIGlmIChnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lciAmJiB0eXBlb2YgcG9zdE1lc3NhZ2UgPT0gJ2Z1bmN0aW9uJyAmJiAhZ2xvYmFsLmltcG9ydFNjcmlwdHMpIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgZ2xvYmFsLnBvc3RNZXNzYWdlKGlkICsgJycsICcqJyk7XG4gICAgfTtcbiAgICBnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGxpc3RlbmVyLCBmYWxzZSk7XG4gIC8vIElFOC1cbiAgfSBlbHNlIGlmIChPTlJFQURZU1RBVEVDSEFOR0UgaW4gY2VsKCdzY3JpcHQnKSkge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBodG1sLmFwcGVuZENoaWxkKGNlbCgnc2NyaXB0JykpW09OUkVBRFlTVEFURUNIQU5HRV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGh0bWwucmVtb3ZlQ2hpbGQodGhpcyk7XG4gICAgICAgIHJ1bi5jYWxsKGlkKTtcbiAgICAgIH07XG4gICAgfTtcbiAgLy8gUmVzdCBvbGQgYnJvd3NlcnNcbiAgfSBlbHNlIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgc2V0VGltZW91dChjdHgocnVuLCBpZCwgMSksIDApO1xuICAgIH07XG4gIH1cbn1cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZXQ6IHNldFRhc2ssXG4gIGNsZWFyOiBjbGVhclRhc2tcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///89\n")},function(module,exports,__webpack_require__){eval("var global = __webpack_require__(2);\nvar macrotask = __webpack_require__(89).set;\nvar Observer = global.MutationObserver || global.WebKitMutationObserver;\nvar process = global.process;\nvar Promise = global.Promise;\nvar isNode = __webpack_require__(20)(process) == 'process';\n\nmodule.exports = function () {\n var head, last, notify;\n\n var flush = function () {\n var parent, fn;\n if (isNode && (parent = process.domain)) parent.exit();\n while (head) {\n fn = head.fn;\n head = head.next;\n try {\n fn();\n } catch (e) {\n if (head) notify();\n else last = undefined;\n throw e;\n }\n } last = undefined;\n if (parent) parent.enter();\n };\n\n // Node.js\n if (isNode) {\n notify = function () {\n process.nextTick(flush);\n };\n // browsers with MutationObserver, except iOS Safari - https://github.com/zloirock/core-js/issues/339\n } else if (Observer && !(global.navigator && global.navigator.standalone)) {\n var toggle = true;\n var node = document.createTextNode('');\n new Observer(flush).observe(node, { characterData: true }); // eslint-disable-line no-new\n notify = function () {\n node.data = toggle = !toggle;\n };\n // environments with maybe non-completely correct, but existent Promise\n } else if (Promise && Promise.resolve) {\n // Promise.resolve without an argument throws an error in LG WebOS 2\n var promise = Promise.resolve(undefined);\n notify = function () {\n promise.then(flush);\n };\n // for other environments - macrotask based on:\n // - setImmediate\n // - MessageChannel\n // - window.postMessag\n // - onreadystatechange\n // - setTimeout\n } else {\n notify = function () {\n // strange IE + webpack dev server bug - use .call(global)\n macrotask.call(global, flush);\n };\n }\n\n return function (fn) {\n var task = { fn: fn, next: undefined };\n if (last) last.next = task;\n if (!head) {\n head = task;\n notify();\n } last = task;\n };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWljcm90YXNrLmpzPzgwNzkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsYUFBYSxtQkFBTyxDQUFDLENBQVc7QUFDaEMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBUztBQUNqQztBQUNBO0FBQ0E7QUFDQSxhQUFhLG1CQUFPLENBQUMsRUFBUTs7QUFFN0I7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSx1Q0FBdUMsc0JBQXNCLEVBQUU7QUFDL0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EiLCJmaWxlIjoiOTAuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgbWFjcm90YXNrID0gcmVxdWlyZSgnLi9fdGFzaycpLnNldDtcbnZhciBPYnNlcnZlciA9IGdsb2JhbC5NdXRhdGlvbk9ic2VydmVyIHx8IGdsb2JhbC5XZWJLaXRNdXRhdGlvbk9ic2VydmVyO1xudmFyIHByb2Nlc3MgPSBnbG9iYWwucHJvY2VzcztcbnZhciBQcm9taXNlID0gZ2xvYmFsLlByb21pc2U7XG52YXIgaXNOb2RlID0gcmVxdWlyZSgnLi9fY29mJykocHJvY2VzcykgPT0gJ3Byb2Nlc3MnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGhlYWQsIGxhc3QsIG5vdGlmeTtcblxuICB2YXIgZmx1c2ggPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHBhcmVudCwgZm47XG4gICAgaWYgKGlzTm9kZSAmJiAocGFyZW50ID0gcHJvY2Vzcy5kb21haW4pKSBwYXJlbnQuZXhpdCgpO1xuICAgIHdoaWxlIChoZWFkKSB7XG4gICAgICBmbiA9IGhlYWQuZm47XG4gICAgICBoZWFkID0gaGVhZC5uZXh0O1xuICAgICAgdHJ5IHtcbiAgICAgICAgZm4oKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKGhlYWQpIG5vdGlmeSgpO1xuICAgICAgICBlbHNlIGxhc3QgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgfSBsYXN0ID0gdW5kZWZpbmVkO1xuICAgIGlmIChwYXJlbnQpIHBhcmVudC5lbnRlcigpO1xuICB9O1xuXG4gIC8vIE5vZGUuanNcbiAgaWYgKGlzTm9kZSkge1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soZmx1c2gpO1xuICAgIH07XG4gIC8vIGJyb3dzZXJzIHdpdGggTXV0YXRpb25PYnNlcnZlciwgZXhjZXB0IGlPUyBTYWZhcmkgLSBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvMzM5XG4gIH0gZWxzZSBpZiAoT2JzZXJ2ZXIgJiYgIShnbG9iYWwubmF2aWdhdG9yICYmIGdsb2JhbC5uYXZpZ2F0b3Iuc3RhbmRhbG9uZSkpIHtcbiAgICB2YXIgdG9nZ2xlID0gdHJ1ZTtcbiAgICB2YXIgbm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcnKTtcbiAgICBuZXcgT2JzZXJ2ZXIoZmx1c2gpLm9ic2VydmUobm9kZSwgeyBjaGFyYWN0ZXJEYXRhOiB0cnVlIH0pOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIG5vZGUuZGF0YSA9IHRvZ2dsZSA9ICF0b2dnbGU7XG4gICAgfTtcbiAgLy8gZW52aXJvbm1lbnRzIHdpdGggbWF5YmUgbm9uLWNvbXBsZXRlbHkgY29ycmVjdCwgYnV0IGV4aXN0ZW50IFByb21pc2VcbiAgfSBlbHNlIGlmIChQcm9taXNlICYmIFByb21pc2UucmVzb2x2ZSkge1xuICAgIC8vIFByb21pc2UucmVzb2x2ZSB3aXRob3V0IGFuIGFyZ3VtZW50IHRocm93cyBhbiBlcnJvciBpbiBMRyBXZWJPUyAyXG4gICAgdmFyIHByb21pc2UgPSBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBwcm9taXNlLnRoZW4oZmx1c2gpO1xuICAgIH07XG4gIC8vIGZvciBvdGhlciBlbnZpcm9ubWVudHMgLSBtYWNyb3Rhc2sgYmFzZWQgb246XG4gIC8vIC0gc2V0SW1tZWRpYXRlXG4gIC8vIC0gTWVzc2FnZUNoYW5uZWxcbiAgLy8gLSB3aW5kb3cucG9zdE1lc3NhZ1xuICAvLyAtIG9ucmVhZHlzdGF0ZWNoYW5nZVxuICAvLyAtIHNldFRpbWVvdXRcbiAgfSBlbHNlIHtcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBzdHJhbmdlIElFICsgd2VicGFjayBkZXYgc2VydmVyIGJ1ZyAtIHVzZSAuY2FsbChnbG9iYWwpXG4gICAgICBtYWNyb3Rhc2suY2FsbChnbG9iYWwsIGZsdXNoKTtcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChmbikge1xuICAgIHZhciB0YXNrID0geyBmbjogZm4sIG5leHQ6IHVuZGVmaW5lZCB9O1xuICAgIGlmIChsYXN0KSBsYXN0Lm5leHQgPSB0YXNrO1xuICAgIGlmICghaGVhZCkge1xuICAgICAgaGVhZCA9IHRhc2s7XG4gICAgICBub3RpZnkoKTtcbiAgICB9IGxhc3QgPSB0YXNrO1xuICB9O1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///90\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// 25.4.1.5 NewPromiseCapability(C)\nvar aFunction = __webpack_require__(10);\n\nfunction PromiseCapability(C) {\n var resolve, reject;\n this.promise = new C(function ($$resolve, $$reject) {\n if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n resolve = $$resolve;\n reject = $$reject;\n });\n this.resolve = aFunction(resolve);\n this.reject = aFunction(reject);\n}\n\nmodule.exports.f = function (C) {\n return new PromiseCapability(C);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbmV3LXByb21pc2UtY2FwYWJpbGl0eS5qcz9hNWI4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlOztBQUV2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSIsImZpbGUiOiI5MS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIDI1LjQuMS41IE5ld1Byb21pc2VDYXBhYmlsaXR5KEMpXG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xuXG5mdW5jdGlvbiBQcm9taXNlQ2FwYWJpbGl0eShDKSB7XG4gIHZhciByZXNvbHZlLCByZWplY3Q7XG4gIHRoaXMucHJvbWlzZSA9IG5ldyBDKGZ1bmN0aW9uICgkJHJlc29sdmUsICQkcmVqZWN0KSB7XG4gICAgaWYgKHJlc29sdmUgIT09IHVuZGVmaW5lZCB8fCByZWplY3QgIT09IHVuZGVmaW5lZCkgdGhyb3cgVHlwZUVycm9yKCdCYWQgUHJvbWlzZSBjb25zdHJ1Y3RvcicpO1xuICAgIHJlc29sdmUgPSAkJHJlc29sdmU7XG4gICAgcmVqZWN0ID0gJCRyZWplY3Q7XG4gIH0pO1xuICB0aGlzLnJlc29sdmUgPSBhRnVuY3Rpb24ocmVzb2x2ZSk7XG4gIHRoaXMucmVqZWN0ID0gYUZ1bmN0aW9uKHJlamVjdCk7XG59XG5cbm1vZHVsZS5leHBvcnRzLmYgPSBmdW5jdGlvbiAoQykge1xuICByZXR1cm4gbmV3IFByb21pc2VDYXBhYmlsaXR5KEMpO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///91\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar global = __webpack_require__(2);\nvar DESCRIPTORS = __webpack_require__(7);\nvar LIBRARY = __webpack_require__(29);\nvar $typed = __webpack_require__(62);\nvar hide = __webpack_require__(11);\nvar redefineAll = __webpack_require__(41);\nvar fails = __webpack_require__(3);\nvar anInstance = __webpack_require__(39);\nvar toInteger = __webpack_require__(21);\nvar toLength = __webpack_require__(6);\nvar toIndex = __webpack_require__(122);\nvar gOPN = __webpack_require__(37).f;\nvar dP = __webpack_require__(8).f;\nvar arrayFill = __webpack_require__(85);\nvar setToStringTag = __webpack_require__(43);\nvar ARRAY_BUFFER = 'ArrayBuffer';\nvar DATA_VIEW = 'DataView';\nvar PROTOTYPE = 'prototype';\nvar WRONG_LENGTH = 'Wrong length!';\nvar WRONG_INDEX = 'Wrong index!';\nvar $ArrayBuffer = global[ARRAY_BUFFER];\nvar $DataView = global[DATA_VIEW];\nvar Math = global.Math;\nvar RangeError = global.RangeError;\n// eslint-disable-next-line no-shadow-restricted-names\nvar Infinity = global.Infinity;\nvar BaseBuffer = $ArrayBuffer;\nvar abs = Math.abs;\nvar pow = Math.pow;\nvar floor = Math.floor;\nvar log = Math.log;\nvar LN2 = Math.LN2;\nvar BUFFER = 'buffer';\nvar BYTE_LENGTH = 'byteLength';\nvar BYTE_OFFSET = 'byteOffset';\nvar $BUFFER = DESCRIPTORS ? '_b' : BUFFER;\nvar $LENGTH = DESCRIPTORS ? '_l' : BYTE_LENGTH;\nvar $OFFSET = DESCRIPTORS ? '_o' : BYTE_OFFSET;\n\n// IEEE754 conversions based on https://github.com/feross/ieee754\nfunction packIEEE754(value, mLen, nBytes) {\n var buffer = new Array(nBytes);\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var rt = mLen === 23 ? pow(2, -24) - pow(2, -77) : 0;\n var i = 0;\n var s = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0;\n var e, m, c;\n value = abs(value);\n // eslint-disable-next-line no-self-compare\n if (value != value || value === Infinity) {\n // eslint-disable-next-line no-self-compare\n m = value != value ? 1 : 0;\n e = eMax;\n } else {\n e = floor(log(value) / LN2);\n if (value * (c = pow(2, -e)) < 1) {\n e--;\n c *= 2;\n }\n if (e + eBias >= 1) {\n value += rt / c;\n } else {\n value += rt * pow(2, 1 - eBias);\n }\n if (value * c >= 2) {\n e++;\n c /= 2;\n }\n if (e + eBias >= eMax) {\n m = 0;\n e = eMax;\n } else if (e + eBias >= 1) {\n m = (value * c - 1) * pow(2, mLen);\n e = e + eBias;\n } else {\n m = value * pow(2, eBias - 1) * pow(2, mLen);\n e = 0;\n }\n }\n for (; mLen >= 8; buffer[i++] = m & 255, m /= 256, mLen -= 8);\n e = e << mLen | m;\n eLen += mLen;\n for (; eLen > 0; buffer[i++] = e & 255, e /= 256, eLen -= 8);\n buffer[--i] |= s * 128;\n return buffer;\n}\nfunction unpackIEEE754(buffer, mLen, nBytes) {\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var nBits = eLen - 7;\n var i = nBytes - 1;\n var s = buffer[i--];\n var e = s & 127;\n var m;\n s >>= 7;\n for (; nBits > 0; e = e * 256 + buffer[i], i--, nBits -= 8);\n m = e & (1 << -nBits) - 1;\n e >>= -nBits;\n nBits += mLen;\n for (; nBits > 0; m = m * 256 + buffer[i], i--, nBits -= 8);\n if (e === 0) {\n e = 1 - eBias;\n } else if (e === eMax) {\n return m ? NaN : s ? -Infinity : Infinity;\n } else {\n m = m + pow(2, mLen);\n e = e - eBias;\n } return (s ? -1 : 1) * m * pow(2, e - mLen);\n}\n\nfunction unpackI32(bytes) {\n return bytes[3] << 24 | bytes[2] << 16 | bytes[1] << 8 | bytes[0];\n}\nfunction packI8(it) {\n return [it & 0xff];\n}\nfunction packI16(it) {\n return [it & 0xff, it >> 8 & 0xff];\n}\nfunction packI32(it) {\n return [it & 0xff, it >> 8 & 0xff, it >> 16 & 0xff, it >> 24 & 0xff];\n}\nfunction packF64(it) {\n return packIEEE754(it, 52, 8);\n}\nfunction packF32(it) {\n return packIEEE754(it, 23, 4);\n}\n\nfunction addGetter(C, key, internal) {\n dP(C[PROTOTYPE], key, { get: function () { return this[internal]; } });\n}\n\nfunction get(view, bytes, index, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = store.slice(start, start + bytes);\n return isLittleEndian ? pack : pack.reverse();\n}\nfunction set(view, bytes, index, conversion, value, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = conversion(+value);\n for (var i = 0; i < bytes; i++) store[start + i] = pack[isLittleEndian ? i : bytes - i - 1];\n}\n\nif (!$typed.ABV) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer, ARRAY_BUFFER);\n var byteLength = toIndex(length);\n this._b = arrayFill.call(new Array(byteLength), 0);\n this[$LENGTH] = byteLength;\n };\n\n $DataView = function DataView(buffer, byteOffset, byteLength) {\n anInstance(this, $DataView, DATA_VIEW);\n anInstance(buffer, $ArrayBuffer, DATA_VIEW);\n var bufferLength = buffer[$LENGTH];\n var offset = toInteger(byteOffset);\n if (offset < 0 || offset > bufferLength) throw RangeError('Wrong offset!');\n byteLength = byteLength === undefined ? bufferLength - offset : toLength(byteLength);\n if (offset + byteLength > bufferLength) throw RangeError(WRONG_LENGTH);\n this[$BUFFER] = buffer;\n this[$OFFSET] = offset;\n this[$LENGTH] = byteLength;\n };\n\n if (DESCRIPTORS) {\n addGetter($ArrayBuffer, BYTE_LENGTH, '_l');\n addGetter($DataView, BUFFER, '_b');\n addGetter($DataView, BYTE_LENGTH, '_l');\n addGetter($DataView, BYTE_OFFSET, '_o');\n }\n\n redefineAll($DataView[PROTOTYPE], {\n getInt8: function getInt8(byteOffset) {\n return get(this, 1, byteOffset)[0] << 24 >> 24;\n },\n getUint8: function getUint8(byteOffset) {\n return get(this, 1, byteOffset)[0];\n },\n getInt16: function getInt16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return (bytes[1] << 8 | bytes[0]) << 16 >> 16;\n },\n getUint16: function getUint16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return bytes[1] << 8 | bytes[0];\n },\n getInt32: function getInt32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1]));\n },\n getUint32: function getUint32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1])) >>> 0;\n },\n getFloat32: function getFloat32(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 4, byteOffset, arguments[1]), 23, 4);\n },\n getFloat64: function getFloat64(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 8, byteOffset, arguments[1]), 52, 8);\n },\n setInt8: function setInt8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setUint8: function setUint8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setInt16: function setInt16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setUint16: function setUint16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setInt32: function setInt32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setUint32: function setUint32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setFloat32: function setFloat32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packF32, value, arguments[2]);\n },\n setFloat64: function setFloat64(byteOffset, value /* , littleEndian */) {\n set(this, 8, byteOffset, packF64, value, arguments[2]);\n }\n });\n} else {\n if (!fails(function () {\n $ArrayBuffer(1);\n }) || !fails(function () {\n new $ArrayBuffer(-1); // eslint-disable-line no-new\n }) || fails(function () {\n new $ArrayBuffer(); // eslint-disable-line no-new\n new $ArrayBuffer(1.5); // eslint-disable-line no-new\n new $ArrayBuffer(NaN); // eslint-disable-line no-new\n return $ArrayBuffer.name != ARRAY_BUFFER;\n })) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer);\n return new BaseBuffer(toIndex(length));\n };\n var ArrayBufferProto = $ArrayBuffer[PROTOTYPE] = BaseBuffer[PROTOTYPE];\n for (var keys = gOPN(BaseBuffer), j = 0, key; keys.length > j;) {\n if (!((key = keys[j++]) in $ArrayBuffer)) hide($ArrayBuffer, key, BaseBuffer[key]);\n }\n if (!LIBRARY) ArrayBufferProto.constructor = $ArrayBuffer;\n }\n // iOS Safari 7.x bug\n var view = new $DataView(new $ArrayBuffer(2));\n var $setInt8 = $DataView[PROTOTYPE].setInt8;\n view.setInt8(0, 2147483648);\n view.setInt8(1, 2147483649);\n if (view.getInt8(0) || !view.getInt8(1)) redefineAll($DataView[PROTOTYPE], {\n setInt8: function setInt8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n },\n setUint8: function setUint8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n }\n }, true);\n}\nsetToStringTag($ArrayBuffer, ARRAY_BUFFER);\nsetToStringTag($DataView, DATA_VIEW);\nhide($DataView[PROTOTYPE], $typed.VIEW, true);\nexports[ARRAY_BUFFER] = $ArrayBuffer;\nexports[DATA_VIEW] = $DataView;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdHlwZWQtYnVmZmVyLmpzP2VkMGIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixhQUFhLG1CQUFPLENBQUMsQ0FBVztBQUNoQyxrQkFBa0IsbUJBQU8sQ0FBQyxDQUFnQjtBQUMxQyxjQUFjLG1CQUFPLENBQUMsRUFBWTtBQUNsQyxhQUFhLG1CQUFPLENBQUMsRUFBVTtBQUMvQixXQUFXLG1CQUFPLENBQUMsRUFBUztBQUM1QixrQkFBa0IsbUJBQU8sQ0FBQyxFQUFpQjtBQUMzQyxZQUFZLG1CQUFPLENBQUMsQ0FBVTtBQUM5QixpQkFBaUIsbUJBQU8sQ0FBQyxFQUFnQjtBQUN6QyxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGNBQWMsbUJBQU8sQ0FBQyxHQUFhO0FBQ25DLFdBQVcsbUJBQU8sQ0FBQyxFQUFnQjtBQUNuQyxTQUFTLG1CQUFPLENBQUMsQ0FBYztBQUMvQixnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDLHFCQUFxQixtQkFBTyxDQUFDLEVBQXNCO0FBQ25EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLFdBQVc7QUFDbkI7QUFDQTtBQUNBLFFBQVEsVUFBVTtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsV0FBVztBQUNuQjtBQUNBO0FBQ0E7QUFDQSxRQUFRLFdBQVc7QUFDbkI7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHlCQUF5QixtQkFBbUIsdUJBQXVCLEVBQUUsRUFBRTtBQUN2RTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixXQUFXO0FBQzVCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBO0FBQ0EsR0FBRztBQUNILHlCQUF5QjtBQUN6QixHQUFHO0FBQ0gsdUJBQXVCO0FBQ3ZCLDBCQUEwQjtBQUMxQiwwQkFBMEI7QUFDMUI7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlEQUFpRCxpQkFBaUI7QUFDbEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiOTIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpO1xudmFyIExJQlJBUlkgPSByZXF1aXJlKCcuL19saWJyYXJ5Jyk7XG52YXIgJHR5cGVkID0gcmVxdWlyZSgnLi9fdHlwZWQnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIHJlZGVmaW5lQWxsID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUtYWxsJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuL19hbi1pbnN0YW5jZScpO1xudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIHRvSW5kZXggPSByZXF1aXJlKCcuL190by1pbmRleCcpO1xudmFyIGdPUE4gPSByZXF1aXJlKCcuL19vYmplY3QtZ29wbicpLmY7XG52YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mO1xudmFyIGFycmF5RmlsbCA9IHJlcXVpcmUoJy4vX2FycmF5LWZpbGwnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgQVJSQVlfQlVGRkVSID0gJ0FycmF5QnVmZmVyJztcbnZhciBEQVRBX1ZJRVcgPSAnRGF0YVZpZXcnO1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xudmFyIFdST05HX0xFTkdUSCA9ICdXcm9uZyBsZW5ndGghJztcbnZhciBXUk9OR19JTkRFWCA9ICdXcm9uZyBpbmRleCEnO1xudmFyICRBcnJheUJ1ZmZlciA9IGdsb2JhbFtBUlJBWV9CVUZGRVJdO1xudmFyICREYXRhVmlldyA9IGdsb2JhbFtEQVRBX1ZJRVddO1xudmFyIE1hdGggPSBnbG9iYWwuTWF0aDtcbnZhciBSYW5nZUVycm9yID0gZ2xvYmFsLlJhbmdlRXJyb3I7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2hhZG93LXJlc3RyaWN0ZWQtbmFtZXNcbnZhciBJbmZpbml0eSA9IGdsb2JhbC5JbmZpbml0eTtcbnZhciBCYXNlQnVmZmVyID0gJEFycmF5QnVmZmVyO1xudmFyIGFicyA9IE1hdGguYWJzO1xudmFyIHBvdyA9IE1hdGgucG93O1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcbnZhciBsb2cgPSBNYXRoLmxvZztcbnZhciBMTjIgPSBNYXRoLkxOMjtcbnZhciBCVUZGRVIgPSAnYnVmZmVyJztcbnZhciBCWVRFX0xFTkdUSCA9ICdieXRlTGVuZ3RoJztcbnZhciBCWVRFX09GRlNFVCA9ICdieXRlT2Zmc2V0JztcbnZhciAkQlVGRkVSID0gREVTQ1JJUFRPUlMgPyAnX2InIDogQlVGRkVSO1xudmFyICRMRU5HVEggPSBERVNDUklQVE9SUyA/ICdfbCcgOiBCWVRFX0xFTkdUSDtcbnZhciAkT0ZGU0VUID0gREVTQ1JJUFRPUlMgPyAnX28nIDogQllURV9PRkZTRVQ7XG5cbi8vIElFRUU3NTQgY29udmVyc2lvbnMgYmFzZWQgb24gaHR0cHM6Ly9naXRodWIuY29tL2Zlcm9zcy9pZWVlNzU0XG5mdW5jdGlvbiBwYWNrSUVFRTc1NCh2YWx1ZSwgbUxlbiwgbkJ5dGVzKSB7XG4gIHZhciBidWZmZXIgPSBuZXcgQXJyYXkobkJ5dGVzKTtcbiAgdmFyIGVMZW4gPSBuQnl0ZXMgKiA4IC0gbUxlbiAtIDE7XG4gIHZhciBlTWF4ID0gKDEgPDwgZUxlbikgLSAxO1xuICB2YXIgZUJpYXMgPSBlTWF4ID4+IDE7XG4gIHZhciBydCA9IG1MZW4gPT09IDIzID8gcG93KDIsIC0yNCkgLSBwb3coMiwgLTc3KSA6IDA7XG4gIHZhciBpID0gMDtcbiAgdmFyIHMgPSB2YWx1ZSA8IDAgfHwgdmFsdWUgPT09IDAgJiYgMSAvIHZhbHVlIDwgMCA/IDEgOiAwO1xuICB2YXIgZSwgbSwgYztcbiAgdmFsdWUgPSBhYnModmFsdWUpO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gIGlmICh2YWx1ZSAhPSB2YWx1ZSB8fCB2YWx1ZSA9PT0gSW5maW5pdHkpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgbSA9IHZhbHVlICE9IHZhbHVlID8gMSA6IDA7XG4gICAgZSA9IGVNYXg7XG4gIH0gZWxzZSB7XG4gICAgZSA9IGZsb29yKGxvZyh2YWx1ZSkgLyBMTjIpO1xuICAgIGlmICh2YWx1ZSAqIChjID0gcG93KDIsIC1lKSkgPCAxKSB7XG4gICAgICBlLS07XG4gICAgICBjICo9IDI7XG4gICAgfVxuICAgIGlmIChlICsgZUJpYXMgPj0gMSkge1xuICAgICAgdmFsdWUgKz0gcnQgLyBjO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YWx1ZSArPSBydCAqIHBvdygyLCAxIC0gZUJpYXMpO1xuICAgIH1cbiAgICBpZiAodmFsdWUgKiBjID49IDIpIHtcbiAgICAgIGUrKztcbiAgICAgIGMgLz0gMjtcbiAgICB9XG4gICAgaWYgKGUgKyBlQmlhcyA+PSBlTWF4KSB7XG4gICAgICBtID0gMDtcbiAgICAgIGUgPSBlTWF4O1xuICAgIH0gZWxzZSBpZiAoZSArIGVCaWFzID49IDEpIHtcbiAgICAgIG0gPSAodmFsdWUgKiBjIC0gMSkgKiBwb3coMiwgbUxlbik7XG4gICAgICBlID0gZSArIGVCaWFzO1xuICAgIH0gZWxzZSB7XG4gICAgICBtID0gdmFsdWUgKiBwb3coMiwgZUJpYXMgLSAxKSAqIHBvdygyLCBtTGVuKTtcbiAgICAgIGUgPSAwO1xuICAgIH1cbiAgfVxuICBmb3IgKDsgbUxlbiA+PSA4OyBidWZmZXJbaSsrXSA9IG0gJiAyNTUsIG0gLz0gMjU2LCBtTGVuIC09IDgpO1xuICBlID0gZSA8PCBtTGVuIHwgbTtcbiAgZUxlbiArPSBtTGVuO1xuICBmb3IgKDsgZUxlbiA+IDA7IGJ1ZmZlcltpKytdID0gZSAmIDI1NSwgZSAvPSAyNTYsIGVMZW4gLT0gOCk7XG4gIGJ1ZmZlclstLWldIHw9IHMgKiAxMjg7XG4gIHJldHVybiBidWZmZXI7XG59XG5mdW5jdGlvbiB1bnBhY2tJRUVFNzU0KGJ1ZmZlciwgbUxlbiwgbkJ5dGVzKSB7XG4gIHZhciBlTGVuID0gbkJ5dGVzICogOCAtIG1MZW4gLSAxO1xuICB2YXIgZU1heCA9ICgxIDw8IGVMZW4pIC0gMTtcbiAgdmFyIGVCaWFzID0gZU1heCA+PiAxO1xuICB2YXIgbkJpdHMgPSBlTGVuIC0gNztcbiAgdmFyIGkgPSBuQnl0ZXMgLSAxO1xuICB2YXIgcyA9IGJ1ZmZlcltpLS1dO1xuICB2YXIgZSA9IHMgJiAxMjc7XG4gIHZhciBtO1xuICBzID4+PSA3O1xuICBmb3IgKDsgbkJpdHMgPiAwOyBlID0gZSAqIDI1NiArIGJ1ZmZlcltpXSwgaS0tLCBuQml0cyAtPSA4KTtcbiAgbSA9IGUgJiAoMSA8PCAtbkJpdHMpIC0gMTtcbiAgZSA+Pj0gLW5CaXRzO1xuICBuQml0cyArPSBtTGVuO1xuICBmb3IgKDsgbkJpdHMgPiAwOyBtID0gbSAqIDI1NiArIGJ1ZmZlcltpXSwgaS0tLCBuQml0cyAtPSA4KTtcbiAgaWYgKGUgPT09IDApIHtcbiAgICBlID0gMSAtIGVCaWFzO1xuICB9IGVsc2UgaWYgKGUgPT09IGVNYXgpIHtcbiAgICByZXR1cm4gbSA/IE5hTiA6IHMgPyAtSW5maW5pdHkgOiBJbmZpbml0eTtcbiAgfSBlbHNlIHtcbiAgICBtID0gbSArIHBvdygyLCBtTGVuKTtcbiAgICBlID0gZSAtIGVCaWFzO1xuICB9IHJldHVybiAocyA/IC0xIDogMSkgKiBtICogcG93KDIsIGUgLSBtTGVuKTtcbn1cblxuZnVuY3Rpb24gdW5wYWNrSTMyKGJ5dGVzKSB7XG4gIHJldHVybiBieXRlc1szXSA8PCAyNCB8IGJ5dGVzWzJdIDw8IDE2IHwgYnl0ZXNbMV0gPDwgOCB8IGJ5dGVzWzBdO1xufVxuZnVuY3Rpb24gcGFja0k4KGl0KSB7XG4gIHJldHVybiBbaXQgJiAweGZmXTtcbn1cbmZ1bmN0aW9uIHBhY2tJMTYoaXQpIHtcbiAgcmV0dXJuIFtpdCAmIDB4ZmYsIGl0ID4+IDggJiAweGZmXTtcbn1cbmZ1bmN0aW9uIHBhY2tJMzIoaXQpIHtcbiAgcmV0dXJuIFtpdCAmIDB4ZmYsIGl0ID4+IDggJiAweGZmLCBpdCA+PiAxNiAmIDB4ZmYsIGl0ID4+IDI0ICYgMHhmZl07XG59XG5mdW5jdGlvbiBwYWNrRjY0KGl0KSB7XG4gIHJldHVybiBwYWNrSUVFRTc1NChpdCwgNTIsIDgpO1xufVxuZnVuY3Rpb24gcGFja0YzMihpdCkge1xuICByZXR1cm4gcGFja0lFRUU3NTQoaXQsIDIzLCA0KTtcbn1cblxuZnVuY3Rpb24gYWRkR2V0dGVyKEMsIGtleSwgaW50ZXJuYWwpIHtcbiAgZFAoQ1tQUk9UT1RZUEVdLCBrZXksIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzW2ludGVybmFsXTsgfSB9KTtcbn1cblxuZnVuY3Rpb24gZ2V0KHZpZXcsIGJ5dGVzLCBpbmRleCwgaXNMaXR0bGVFbmRpYW4pIHtcbiAgdmFyIG51bUluZGV4ID0gK2luZGV4O1xuICB2YXIgaW50SW5kZXggPSB0b0luZGV4KG51bUluZGV4KTtcbiAgaWYgKGludEluZGV4ICsgYnl0ZXMgPiB2aWV3WyRMRU5HVEhdKSB0aHJvdyBSYW5nZUVycm9yKFdST05HX0lOREVYKTtcbiAgdmFyIHN0b3JlID0gdmlld1skQlVGRkVSXS5fYjtcbiAgdmFyIHN0YXJ0ID0gaW50SW5kZXggKyB2aWV3WyRPRkZTRVRdO1xuICB2YXIgcGFjayA9IHN0b3JlLnNsaWNlKHN0YXJ0LCBzdGFydCArIGJ5dGVzKTtcbiAgcmV0dXJuIGlzTGl0dGxlRW5kaWFuID8gcGFjayA6IHBhY2sucmV2ZXJzZSgpO1xufVxuZnVuY3Rpb24gc2V0KHZpZXcsIGJ5dGVzLCBpbmRleCwgY29udmVyc2lvbiwgdmFsdWUsIGlzTGl0dGxlRW5kaWFuKSB7XG4gIHZhciBudW1JbmRleCA9ICtpbmRleDtcbiAgdmFyIGludEluZGV4ID0gdG9JbmRleChudW1JbmRleCk7XG4gIGlmIChpbnRJbmRleCArIGJ5dGVzID4gdmlld1skTEVOR1RIXSkgdGhyb3cgUmFuZ2VFcnJvcihXUk9OR19JTkRFWCk7XG4gIHZhciBzdG9yZSA9IHZpZXdbJEJVRkZFUl0uX2I7XG4gIHZhciBzdGFydCA9IGludEluZGV4ICsgdmlld1skT0ZGU0VUXTtcbiAgdmFyIHBhY2sgPSBjb252ZXJzaW9uKCt2YWx1ZSk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYnl0ZXM7IGkrKykgc3RvcmVbc3RhcnQgKyBpXSA9IHBhY2tbaXNMaXR0bGVFbmRpYW4gPyBpIDogYnl0ZXMgLSBpIC0gMV07XG59XG5cbmlmICghJHR5cGVkLkFCVikge1xuICAkQXJyYXlCdWZmZXIgPSBmdW5jdGlvbiBBcnJheUJ1ZmZlcihsZW5ndGgpIHtcbiAgICBhbkluc3RhbmNlKHRoaXMsICRBcnJheUJ1ZmZlciwgQVJSQVlfQlVGRkVSKTtcbiAgICB2YXIgYnl0ZUxlbmd0aCA9IHRvSW5kZXgobGVuZ3RoKTtcbiAgICB0aGlzLl9iID0gYXJyYXlGaWxsLmNhbGwobmV3IEFycmF5KGJ5dGVMZW5ndGgpLCAwKTtcbiAgICB0aGlzWyRMRU5HVEhdID0gYnl0ZUxlbmd0aDtcbiAgfTtcblxuICAkRGF0YVZpZXcgPSBmdW5jdGlvbiBEYXRhVmlldyhidWZmZXIsIGJ5dGVPZmZzZXQsIGJ5dGVMZW5ndGgpIHtcbiAgICBhbkluc3RhbmNlKHRoaXMsICREYXRhVmlldywgREFUQV9WSUVXKTtcbiAgICBhbkluc3RhbmNlKGJ1ZmZlciwgJEFycmF5QnVmZmVyLCBEQVRBX1ZJRVcpO1xuICAgIHZhciBidWZmZXJMZW5ndGggPSBidWZmZXJbJExFTkdUSF07XG4gICAgdmFyIG9mZnNldCA9IHRvSW50ZWdlcihieXRlT2Zmc2V0KTtcbiAgICBpZiAob2Zmc2V0IDwgMCB8fCBvZmZzZXQgPiBidWZmZXJMZW5ndGgpIHRocm93IFJhbmdlRXJyb3IoJ1dyb25nIG9mZnNldCEnKTtcbiAgICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCA9PT0gdW5kZWZpbmVkID8gYnVmZmVyTGVuZ3RoIC0gb2Zmc2V0IDogdG9MZW5ndGgoYnl0ZUxlbmd0aCk7XG4gICAgaWYgKG9mZnNldCArIGJ5dGVMZW5ndGggPiBidWZmZXJMZW5ndGgpIHRocm93IFJhbmdlRXJyb3IoV1JPTkdfTEVOR1RIKTtcbiAgICB0aGlzWyRCVUZGRVJdID0gYnVmZmVyO1xuICAgIHRoaXNbJE9GRlNFVF0gPSBvZmZzZXQ7XG4gICAgdGhpc1skTEVOR1RIXSA9IGJ5dGVMZW5ndGg7XG4gIH07XG5cbiAgaWYgKERFU0NSSVBUT1JTKSB7XG4gICAgYWRkR2V0dGVyKCRBcnJheUJ1ZmZlciwgQllURV9MRU5HVEgsICdfbCcpO1xuICAgIGFkZEdldHRlcigkRGF0YVZpZXcsIEJVRkZFUiwgJ19iJyk7XG4gICAgYWRkR2V0dGVyKCREYXRhVmlldywgQllURV9MRU5HVEgsICdfbCcpO1xuICAgIGFkZEdldHRlcigkRGF0YVZpZXcsIEJZVEVfT0ZGU0VULCAnX28nKTtcbiAgfVxuXG4gIHJlZGVmaW5lQWxsKCREYXRhVmlld1tQUk9UT1RZUEVdLCB7XG4gICAgZ2V0SW50ODogZnVuY3Rpb24gZ2V0SW50OChieXRlT2Zmc2V0KSB7XG4gICAgICByZXR1cm4gZ2V0KHRoaXMsIDEsIGJ5dGVPZmZzZXQpWzBdIDw8IDI0ID4+IDI0O1xuICAgIH0sXG4gICAgZ2V0VWludDg6IGZ1bmN0aW9uIGdldFVpbnQ4KGJ5dGVPZmZzZXQpIHtcbiAgICAgIHJldHVybiBnZXQodGhpcywgMSwgYnl0ZU9mZnNldClbMF07XG4gICAgfSxcbiAgICBnZXRJbnQxNjogZnVuY3Rpb24gZ2V0SW50MTYoYnl0ZU9mZnNldCAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgdmFyIGJ5dGVzID0gZ2V0KHRoaXMsIDIsIGJ5dGVPZmZzZXQsIGFyZ3VtZW50c1sxXSk7XG4gICAgICByZXR1cm4gKGJ5dGVzWzFdIDw8IDggfCBieXRlc1swXSkgPDwgMTYgPj4gMTY7XG4gICAgfSxcbiAgICBnZXRVaW50MTY6IGZ1bmN0aW9uIGdldFVpbnQxNihieXRlT2Zmc2V0IC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICB2YXIgYnl0ZXMgPSBnZXQodGhpcywgMiwgYnl0ZU9mZnNldCwgYXJndW1lbnRzWzFdKTtcbiAgICAgIHJldHVybiBieXRlc1sxXSA8PCA4IHwgYnl0ZXNbMF07XG4gICAgfSxcbiAgICBnZXRJbnQzMjogZnVuY3Rpb24gZ2V0SW50MzIoYnl0ZU9mZnNldCAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgcmV0dXJuIHVucGFja0kzMihnZXQodGhpcywgNCwgYnl0ZU9mZnNldCwgYXJndW1lbnRzWzFdKSk7XG4gICAgfSxcbiAgICBnZXRVaW50MzI6IGZ1bmN0aW9uIGdldFVpbnQzMihieXRlT2Zmc2V0IC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICByZXR1cm4gdW5wYWNrSTMyKGdldCh0aGlzLCA0LCBieXRlT2Zmc2V0LCBhcmd1bWVudHNbMV0pKSA+Pj4gMDtcbiAgICB9LFxuICAgIGdldEZsb2F0MzI6IGZ1bmN0aW9uIGdldEZsb2F0MzIoYnl0ZU9mZnNldCAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgcmV0dXJuIHVucGFja0lFRUU3NTQoZ2V0KHRoaXMsIDQsIGJ5dGVPZmZzZXQsIGFyZ3VtZW50c1sxXSksIDIzLCA0KTtcbiAgICB9LFxuICAgIGdldEZsb2F0NjQ6IGZ1bmN0aW9uIGdldEZsb2F0NjQoYnl0ZU9mZnNldCAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgcmV0dXJuIHVucGFja0lFRUU3NTQoZ2V0KHRoaXMsIDgsIGJ5dGVPZmZzZXQsIGFyZ3VtZW50c1sxXSksIDUyLCA4KTtcbiAgICB9LFxuICAgIHNldEludDg6IGZ1bmN0aW9uIHNldEludDgoYnl0ZU9mZnNldCwgdmFsdWUpIHtcbiAgICAgIHNldCh0aGlzLCAxLCBieXRlT2Zmc2V0LCBwYWNrSTgsIHZhbHVlKTtcbiAgICB9LFxuICAgIHNldFVpbnQ4OiBmdW5jdGlvbiBzZXRVaW50OChieXRlT2Zmc2V0LCB2YWx1ZSkge1xuICAgICAgc2V0KHRoaXMsIDEsIGJ5dGVPZmZzZXQsIHBhY2tJOCwgdmFsdWUpO1xuICAgIH0sXG4gICAgc2V0SW50MTY6IGZ1bmN0aW9uIHNldEludDE2KGJ5dGVPZmZzZXQsIHZhbHVlIC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICBzZXQodGhpcywgMiwgYnl0ZU9mZnNldCwgcGFja0kxNiwgdmFsdWUsIGFyZ3VtZW50c1syXSk7XG4gICAgfSxcbiAgICBzZXRVaW50MTY6IGZ1bmN0aW9uIHNldFVpbnQxNihieXRlT2Zmc2V0LCB2YWx1ZSAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgc2V0KHRoaXMsIDIsIGJ5dGVPZmZzZXQsIHBhY2tJMTYsIHZhbHVlLCBhcmd1bWVudHNbMl0pO1xuICAgIH0sXG4gICAgc2V0SW50MzI6IGZ1bmN0aW9uIHNldEludDMyKGJ5dGVPZmZzZXQsIHZhbHVlIC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICBzZXQodGhpcywgNCwgYnl0ZU9mZnNldCwgcGFja0kzMiwgdmFsdWUsIGFyZ3VtZW50c1syXSk7XG4gICAgfSxcbiAgICBzZXRVaW50MzI6IGZ1bmN0aW9uIHNldFVpbnQzMihieXRlT2Zmc2V0LCB2YWx1ZSAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgc2V0KHRoaXMsIDQsIGJ5dGVPZmZzZXQsIHBhY2tJMzIsIHZhbHVlLCBhcmd1bWVudHNbMl0pO1xuICAgIH0sXG4gICAgc2V0RmxvYXQzMjogZnVuY3Rpb24gc2V0RmxvYXQzMihieXRlT2Zmc2V0LCB2YWx1ZSAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgc2V0KHRoaXMsIDQsIGJ5dGVPZmZzZXQsIHBhY2tGMzIsIHZhbHVlLCBhcmd1bWVudHNbMl0pO1xuICAgIH0sXG4gICAgc2V0RmxvYXQ2NDogZnVuY3Rpb24gc2V0RmxvYXQ2NChieXRlT2Zmc2V0LCB2YWx1ZSAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgc2V0KHRoaXMsIDgsIGJ5dGVPZmZzZXQsIHBhY2tGNjQsIHZhbHVlLCBhcmd1bWVudHNbMl0pO1xuICAgIH1cbiAgfSk7XG59IGVsc2Uge1xuICBpZiAoIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAkQXJyYXlCdWZmZXIoMSk7XG4gIH0pIHx8ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgbmV3ICRBcnJheUJ1ZmZlcigtMSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gIH0pIHx8IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICBuZXcgJEFycmF5QnVmZmVyKCk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgbmV3ICRBcnJheUJ1ZmZlcigxLjUpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgIG5ldyAkQXJyYXlCdWZmZXIoTmFOKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICByZXR1cm4gJEFycmF5QnVmZmVyLm5hbWUgIT0gQVJSQVlfQlVGRkVSO1xuICB9KSkge1xuICAgICRBcnJheUJ1ZmZlciA9IGZ1bmN0aW9uIEFycmF5QnVmZmVyKGxlbmd0aCkge1xuICAgICAgYW5JbnN0YW5jZSh0aGlzLCAkQXJyYXlCdWZmZXIpO1xuICAgICAgcmV0dXJuIG5ldyBCYXNlQnVmZmVyKHRvSW5kZXgobGVuZ3RoKSk7XG4gICAgfTtcbiAgICB2YXIgQXJyYXlCdWZmZXJQcm90byA9ICRBcnJheUJ1ZmZlcltQUk9UT1RZUEVdID0gQmFzZUJ1ZmZlcltQUk9UT1RZUEVdO1xuICAgIGZvciAodmFyIGtleXMgPSBnT1BOKEJhc2VCdWZmZXIpLCBqID0gMCwga2V5OyBrZXlzLmxlbmd0aCA+IGo7KSB7XG4gICAgICBpZiAoISgoa2V5ID0ga2V5c1tqKytdKSBpbiAkQXJyYXlCdWZmZXIpKSBoaWRlKCRBcnJheUJ1ZmZlciwga2V5LCBCYXNlQnVmZmVyW2tleV0pO1xuICAgIH1cbiAgICBpZiAoIUxJQlJBUlkpIEFycmF5QnVmZmVyUHJvdG8uY29uc3RydWN0b3IgPSAkQXJyYXlCdWZmZXI7XG4gIH1cbiAgLy8gaU9TIFNhZmFyaSA3LnggYnVnXG4gIHZhciB2aWV3ID0gbmV3ICREYXRhVmlldyhuZXcgJEFycmF5QnVmZmVyKDIpKTtcbiAgdmFyICRzZXRJbnQ4ID0gJERhdGFWaWV3W1BST1RPVFlQRV0uc2V0SW50ODtcbiAgdmlldy5zZXRJbnQ4KDAsIDIxNDc0ODM2NDgpO1xuICB2aWV3LnNldEludDgoMSwgMjE0NzQ4MzY0OSk7XG4gIGlmICh2aWV3LmdldEludDgoMCkgfHwgIXZpZXcuZ2V0SW50OCgxKSkgcmVkZWZpbmVBbGwoJERhdGFWaWV3W1BST1RPVFlQRV0sIHtcbiAgICBzZXRJbnQ4OiBmdW5jdGlvbiBzZXRJbnQ4KGJ5dGVPZmZzZXQsIHZhbHVlKSB7XG4gICAgICAkc2V0SW50OC5jYWxsKHRoaXMsIGJ5dGVPZmZzZXQsIHZhbHVlIDw8IDI0ID4+IDI0KTtcbiAgICB9LFxuICAgIHNldFVpbnQ4OiBmdW5jdGlvbiBzZXRVaW50OChieXRlT2Zmc2V0LCB2YWx1ZSkge1xuICAgICAgJHNldEludDguY2FsbCh0aGlzLCBieXRlT2Zmc2V0LCB2YWx1ZSA8PCAyNCA+PiAyNCk7XG4gICAgfVxuICB9LCB0cnVlKTtcbn1cbnNldFRvU3RyaW5nVGFnKCRBcnJheUJ1ZmZlciwgQVJSQVlfQlVGRkVSKTtcbnNldFRvU3RyaW5nVGFnKCREYXRhVmlldywgREFUQV9WSUVXKTtcbmhpZGUoJERhdGFWaWV3W1BST1RPVFlQRV0sICR0eXBlZC5WSUVXLCB0cnVlKTtcbmV4cG9ydHNbQVJSQVlfQlVGRkVSXSA9ICRBcnJheUJ1ZmZlcjtcbmV4cG9ydHNbREFUQV9WSUVXXSA9ICREYXRhVmlldztcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///92\n")},function(module,exports){eval('var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function("return this")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === "object") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it\'s\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULyh3ZWJwYWNrKS9idWlsZGluL2dsb2JhbC5qcz9jZDAwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsNENBQTRDOztBQUU1QyIsImZpbGUiOiI5My5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBnO1xuXG4vLyBUaGlzIHdvcmtzIGluIG5vbi1zdHJpY3QgbW9kZVxuZyA9IChmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXM7XG59KSgpO1xuXG50cnkge1xuXHQvLyBUaGlzIHdvcmtzIGlmIGV2YWwgaXMgYWxsb3dlZCAoc2VlIENTUClcblx0ZyA9IGcgfHwgbmV3IEZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKTtcbn0gY2F0Y2ggKGUpIHtcblx0Ly8gVGhpcyB3b3JrcyBpZiB0aGUgd2luZG93IHJlZmVyZW5jZSBpcyBhdmFpbGFibGVcblx0aWYgKHR5cGVvZiB3aW5kb3cgPT09IFwib2JqZWN0XCIpIGcgPSB3aW5kb3c7XG59XG5cbi8vIGcgY2FuIHN0aWxsIGJlIHVuZGVmaW5lZCwgYnV0IG5vdGhpbmcgdG8gZG8gYWJvdXQgaXQuLi5cbi8vIFdlIHJldHVybiB1bmRlZmluZWQsIGluc3RlYWQgb2Ygbm90aGluZyBoZXJlLCBzbyBpdCdzXG4vLyBlYXNpZXIgdG8gaGFuZGxlIHRoaXMgY2FzZS4gaWYoIWdsb2JhbCkgeyAuLi59XG5cbm1vZHVsZS5leHBvcnRzID0gZztcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///93\n')},function(module,exports,__webpack_require__){eval("module.exports = !__webpack_require__(7) && !__webpack_require__(3)(function () {\n return Object.defineProperty(__webpack_require__(66)('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faWU4LWRvbS1kZWZpbmUuanM/YzY5YSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxrQkFBa0IsbUJBQU8sQ0FBQyxDQUFnQixNQUFNLG1CQUFPLENBQUMsQ0FBVTtBQUNsRSwrQkFBK0IsbUJBQU8sQ0FBQyxFQUFlLGdCQUFnQixtQkFBbUIsVUFBVSxFQUFFLEVBQUU7QUFDdkcsQ0FBQyIsImZpbGUiOiI5NC5qcyIsInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gIXJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgIXJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHJlcXVpcmUoJy4vX2RvbS1jcmVhdGUnKSgnZGl2JyksICdhJywgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH0gfSkuYSAhPSA3O1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///94\n")},function(module,exports,__webpack_require__){eval("exports.f = __webpack_require__(5);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fd2tzLWV4dC5qcz8zN2M4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVksbUJBQU8sQ0FBQyxDQUFRIiwiZmlsZSI6Ijk1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0cy5mID0gcmVxdWlyZSgnLi9fd2tzJyk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///95\n")},function(module,exports,__webpack_require__){eval("var has = __webpack_require__(14);\nvar toIObject = __webpack_require__(15);\nvar arrayIndexOf = __webpack_require__(52)(false);\nvar IE_PROTO = __webpack_require__(68)('IE_PROTO');\n\nmodule.exports = function (object, names) {\n var O = toIObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (has(O, key = names[i++])) {\n ~arrayIndexOf(result, key) || result.push(key);\n }\n return result;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWtleXMtaW50ZXJuYWwuanM/Y2UxMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxVQUFVLG1CQUFPLENBQUMsRUFBUTtBQUMxQixnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDLG1CQUFtQixtQkFBTyxDQUFDLEVBQW1CO0FBQzlDLGVBQWUsbUJBQU8sQ0FBQyxFQUFlOztBQUV0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiOTYuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIGFycmF5SW5kZXhPZiA9IHJlcXVpcmUoJy4vX2FycmF5LWluY2x1ZGVzJykoZmFsc2UpO1xudmFyIElFX1BST1RPID0gcmVxdWlyZSgnLi9fc2hhcmVkLWtleScpKCdJRV9QUk9UTycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIG5hbWVzKSB7XG4gIHZhciBPID0gdG9JT2JqZWN0KG9iamVjdCk7XG4gIHZhciBpID0gMDtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIga2V5O1xuICBmb3IgKGtleSBpbiBPKSBpZiAoa2V5ICE9IElFX1BST1RPKSBoYXMoTywga2V5KSAmJiByZXN1bHQucHVzaChrZXkpO1xuICAvLyBEb24ndCBlbnVtIGJ1ZyAmIGhpZGRlbiBrZXlzXG4gIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSBpZiAoaGFzKE8sIGtleSA9IG5hbWVzW2krK10pKSB7XG4gICAgfmFycmF5SW5kZXhPZihyZXN1bHQsIGtleSkgfHwgcmVzdWx0LnB1c2goa2V5KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///96\n")},function(module,exports,__webpack_require__){eval("var dP = __webpack_require__(8);\nvar anObject = __webpack_require__(1);\nvar getKeys = __webpack_require__(34);\n\nmodule.exports = __webpack_require__(7) ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var keys = getKeys(Properties);\n var length = keys.length;\n var i = 0;\n var P;\n while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n return O;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWRwcy5qcz8xNDk1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFNBQVMsbUJBQU8sQ0FBQyxDQUFjO0FBQy9CLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGNBQWMsbUJBQU8sQ0FBQyxFQUFnQjs7QUFFdEMsaUJBQWlCLG1CQUFPLENBQUMsQ0FBZ0I7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiI5Ny5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgZ2V0S2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzIDogZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhPLCBQcm9wZXJ0aWVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICB2YXIga2V5cyA9IGdldEtleXMoUHJvcGVydGllcyk7XG4gIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgdmFyIGkgPSAwO1xuICB2YXIgUDtcbiAgd2hpbGUgKGxlbmd0aCA+IGkpIGRQLmYoTywgUCA9IGtleXNbaSsrXSwgUHJvcGVydGllc1tQXSk7XG4gIHJldHVybiBPO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///97\n")},function(module,exports,__webpack_require__){eval("// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nvar toIObject = __webpack_require__(15);\nvar gOPN = __webpack_require__(37).f;\nvar toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return gOPN(it);\n } catch (e) {\n return windowNames.slice();\n }\n};\n\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdvcG4tZXh0LmpzPzdiYmMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDLFdBQVcsbUJBQU8sQ0FBQyxFQUFnQjtBQUNuQyxpQkFBaUI7O0FBRWpCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EiLCJmaWxlIjoiOTguanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBmYWxsYmFjayBmb3IgSUUxMSBidWdneSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB3aXRoIGlmcmFtZSBhbmQgd2luZG93XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIGdPUE4gPSByZXF1aXJlKCcuL19vYmplY3QtZ29wbicpLmY7XG52YXIgdG9TdHJpbmcgPSB7fS50b1N0cmluZztcblxudmFyIHdpbmRvd05hbWVzID0gdHlwZW9mIHdpbmRvdyA9PSAnb2JqZWN0JyAmJiB3aW5kb3cgJiYgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXNcbiAgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh3aW5kb3cpIDogW107XG5cbnZhciBnZXRXaW5kb3dOYW1lcyA9IGZ1bmN0aW9uIChpdCkge1xuICB0cnkge1xuICAgIHJldHVybiBnT1BOKGl0KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiB3aW5kb3dOYW1lcy5zbGljZSgpO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cy5mID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhpdCkge1xuICByZXR1cm4gd2luZG93TmFtZXMgJiYgdG9TdHJpbmcuY2FsbChpdCkgPT0gJ1tvYmplY3QgV2luZG93XScgPyBnZXRXaW5kb3dOYW1lcyhpdCkgOiBnT1BOKHRvSU9iamVjdChpdCkpO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///98\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// 19.1.2.1 Object.assign(target, source, ...)\nvar DESCRIPTORS = __webpack_require__(7);\nvar getKeys = __webpack_require__(34);\nvar gOPS = __webpack_require__(53);\nvar pIE = __webpack_require__(49);\nvar toObject = __webpack_require__(9);\nvar IObject = __webpack_require__(48);\nvar $assign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || __webpack_require__(3)(function () {\n var A = {};\n var B = {};\n // eslint-disable-next-line no-undef\n var S = Symbol();\n var K = 'abcdefghijklmnopqrst';\n A[S] = 7;\n K.split('').forEach(function (k) { B[k] = k; });\n return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n var T = toObject(target);\n var aLen = arguments.length;\n var index = 1;\n var getSymbols = gOPS.f;\n var isEnum = pIE.f;\n while (aLen > index) {\n var S = IObject(arguments[index++]);\n var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);\n var length = keys.length;\n var j = 0;\n var key;\n while (length > j) {\n key = keys[j++];\n if (!DESCRIPTORS || isEnum.call(S, key)) T[key] = S[key];\n }\n } return T;\n} : $assign;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWFzc2lnbi5qcz83MzMzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxrQkFBa0IsbUJBQU8sQ0FBQyxDQUFnQjtBQUMxQyxjQUFjLG1CQUFPLENBQUMsRUFBZ0I7QUFDdEMsV0FBVyxtQkFBTyxDQUFDLEVBQWdCO0FBQ25DLFVBQVUsbUJBQU8sQ0FBQyxFQUFlO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGNBQWMsbUJBQU8sQ0FBQyxFQUFZO0FBQ2xDOztBQUVBO0FBQ0EsNkJBQTZCLG1CQUFPLENBQUMsQ0FBVTtBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0MsVUFBVSxFQUFFO0FBQ2hELG1CQUFtQixzQ0FBc0M7QUFDekQsQ0FBQyxxQ0FBcUM7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUMiLCJmaWxlIjoiOTkuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG4vLyAxOS4xLjIuMSBPYmplY3QuYXNzaWduKHRhcmdldCwgc291cmNlLCAuLi4pXG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpO1xudmFyIGdldEtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xudmFyIGdPUFMgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wcycpO1xudmFyIHBJRSA9IHJlcXVpcmUoJy4vX29iamVjdC1waWUnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIElPYmplY3QgPSByZXF1aXJlKCcuL19pb2JqZWN0Jyk7XG52YXIgJGFzc2lnbiA9IE9iamVjdC5hc3NpZ247XG5cbi8vIHNob3VsZCB3b3JrIHdpdGggc3ltYm9scyBhbmQgc2hvdWxkIGhhdmUgZGV0ZXJtaW5pc3RpYyBwcm9wZXJ0eSBvcmRlciAoVjggYnVnKVxubW9kdWxlLmV4cG9ydHMgPSAhJGFzc2lnbiB8fCByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgdmFyIEEgPSB7fTtcbiAgdmFyIEIgPSB7fTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gIHZhciBTID0gU3ltYm9sKCk7XG4gIHZhciBLID0gJ2FiY2RlZmdoaWprbG1ub3BxcnN0JztcbiAgQVtTXSA9IDc7XG4gIEsuc3BsaXQoJycpLmZvckVhY2goZnVuY3Rpb24gKGspIHsgQltrXSA9IGs7IH0pO1xuICByZXR1cm4gJGFzc2lnbih7fSwgQSlbU10gIT0gNyB8fCBPYmplY3Qua2V5cygkYXNzaWduKHt9LCBCKSkuam9pbignJykgIT0gSztcbn0pID8gZnVuY3Rpb24gYXNzaWduKHRhcmdldCwgc291cmNlKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgdmFyIFQgPSB0b09iamVjdCh0YXJnZXQpO1xuICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gIHZhciBpbmRleCA9IDE7XG4gIHZhciBnZXRTeW1ib2xzID0gZ09QUy5mO1xuICB2YXIgaXNFbnVtID0gcElFLmY7XG4gIHdoaWxlIChhTGVuID4gaW5kZXgpIHtcbiAgICB2YXIgUyA9IElPYmplY3QoYXJndW1lbnRzW2luZGV4KytdKTtcbiAgICB2YXIga2V5cyA9IGdldFN5bWJvbHMgPyBnZXRLZXlzKFMpLmNvbmNhdChnZXRTeW1ib2xzKFMpKSA6IGdldEtleXMoUyk7XG4gICAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICAgIHZhciBqID0gMDtcbiAgICB2YXIga2V5O1xuICAgIHdoaWxlIChsZW5ndGggPiBqKSB7XG4gICAgICBrZXkgPSBrZXlzW2orK107XG4gICAgICBpZiAoIURFU0NSSVBUT1JTIHx8IGlzRW51bS5jYWxsKFMsIGtleSkpIFRba2V5XSA9IFNba2V5XTtcbiAgICB9XG4gIH0gcmV0dXJuIFQ7XG59IDogJGFzc2lnbjtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///99\n")},function(module,exports){eval("// 7.2.9 SameValue(x, y)\nmodule.exports = Object.is || function is(x, y) {\n // eslint-disable-next-line no-self-compare\n return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2FtZS12YWx1ZS5qcz84M2ExIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMTAwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gNy4yLjkgU2FtZVZhbHVlKHgsIHkpXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5pcyB8fCBmdW5jdGlvbiBpcyh4LCB5KSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgcmV0dXJuIHggPT09IHkgPyB4ICE9PSAwIHx8IDEgLyB4ID09PSAxIC8geSA6IHggIT0geCAmJiB5ICE9IHk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///100\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar aFunction = __webpack_require__(10);\nvar isObject = __webpack_require__(4);\nvar invoke = __webpack_require__(102);\nvar arraySlice = [].slice;\nvar factories = {};\n\nvar construct = function (F, len, args) {\n if (!(len in factories)) {\n for (var n = [], i = 0; i < len; i++) n[i] = 'a[' + i + ']';\n // eslint-disable-next-line no-new-func\n factories[len] = Function('F,a', 'return new F(' + n.join(',') + ')');\n } return factories[len](F, args);\n};\n\nmodule.exports = Function.bind || function bind(that /* , ...args */) {\n var fn = aFunction(this);\n var partArgs = arraySlice.call(arguments, 1);\n var bound = function (/* args... */) {\n var args = partArgs.concat(arraySlice.call(arguments));\n return this instanceof bound ? construct(fn, args.length, args) : invoke(fn, args, that);\n };\n if (isObject(fn.prototype)) bound.prototype = fn.prototype;\n return bound;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYmluZC5qcz9mMGMxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2QyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxhQUFhLG1CQUFPLENBQUMsR0FBVztBQUNoQztBQUNBOztBQUVBO0FBQ0E7QUFDQSwyQkFBMkIsU0FBUztBQUNwQztBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjEwMS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBpbnZva2UgPSByZXF1aXJlKCcuL19pbnZva2UnKTtcbnZhciBhcnJheVNsaWNlID0gW10uc2xpY2U7XG52YXIgZmFjdG9yaWVzID0ge307XG5cbnZhciBjb25zdHJ1Y3QgPSBmdW5jdGlvbiAoRiwgbGVuLCBhcmdzKSB7XG4gIGlmICghKGxlbiBpbiBmYWN0b3JpZXMpKSB7XG4gICAgZm9yICh2YXIgbiA9IFtdLCBpID0gMDsgaSA8IGxlbjsgaSsrKSBuW2ldID0gJ2FbJyArIGkgKyAnXSc7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jXG4gICAgZmFjdG9yaWVzW2xlbl0gPSBGdW5jdGlvbignRixhJywgJ3JldHVybiBuZXcgRignICsgbi5qb2luKCcsJykgKyAnKScpO1xuICB9IHJldHVybiBmYWN0b3JpZXNbbGVuXShGLCBhcmdzKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gRnVuY3Rpb24uYmluZCB8fCBmdW5jdGlvbiBiaW5kKHRoYXQgLyogLCAuLi5hcmdzICovKSB7XG4gIHZhciBmbiA9IGFGdW5jdGlvbih0aGlzKTtcbiAgdmFyIHBhcnRBcmdzID0gYXJyYXlTbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gIHZhciBib3VuZCA9IGZ1bmN0aW9uICgvKiBhcmdzLi4uICovKSB7XG4gICAgdmFyIGFyZ3MgPSBwYXJ0QXJncy5jb25jYXQoYXJyYXlTbGljZS5jYWxsKGFyZ3VtZW50cykpO1xuICAgIHJldHVybiB0aGlzIGluc3RhbmNlb2YgYm91bmQgPyBjb25zdHJ1Y3QoZm4sIGFyZ3MubGVuZ3RoLCBhcmdzKSA6IGludm9rZShmbiwgYXJncywgdGhhdCk7XG4gIH07XG4gIGlmIChpc09iamVjdChmbi5wcm90b3R5cGUpKSBib3VuZC5wcm90b3R5cGUgPSBmbi5wcm90b3R5cGU7XG4gIHJldHVybiBib3VuZDtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///101\n")},function(module,exports){eval("// fast apply, http://jsperf.lnkit.com/fast-apply/5\nmodule.exports = function (fn, args, that) {\n var un = that === undefined;\n switch (args.length) {\n case 0: return un ? fn()\n : fn.call(that);\n case 1: return un ? fn(args[0])\n : fn.call(that, args[0]);\n case 2: return un ? fn(args[0], args[1])\n : fn.call(that, args[0], args[1]);\n case 3: return un ? fn(args[0], args[1], args[2])\n : fn.call(that, args[0], args[1], args[2]);\n case 4: return un ? fn(args[0], args[1], args[2], args[3])\n : fn.call(that, args[0], args[1], args[2], args[3]);\n } return fn.apply(that, args);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faW52b2tlLmpzPzMxZjQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCIsImZpbGUiOiIxMDIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBmYXN0IGFwcGx5LCBodHRwOi8vanNwZXJmLmxua2l0LmNvbS9mYXN0LWFwcGx5LzVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGZuLCBhcmdzLCB0aGF0KSB7XG4gIHZhciB1biA9IHRoYXQgPT09IHVuZGVmaW5lZDtcbiAgc3dpdGNoIChhcmdzLmxlbmd0aCkge1xuICAgIGNhc2UgMDogcmV0dXJuIHVuID8gZm4oKVxuICAgICAgICAgICAgICAgICAgICAgIDogZm4uY2FsbCh0aGF0KTtcbiAgICBjYXNlIDE6IHJldHVybiB1biA/IGZuKGFyZ3NbMF0pXG4gICAgICAgICAgICAgICAgICAgICAgOiBmbi5jYWxsKHRoYXQsIGFyZ3NbMF0pO1xuICAgIGNhc2UgMjogcmV0dXJuIHVuID8gZm4oYXJnc1swXSwgYXJnc1sxXSlcbiAgICAgICAgICAgICAgICAgICAgICA6IGZuLmNhbGwodGhhdCwgYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgY2FzZSAzOiByZXR1cm4gdW4gPyBmbihhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKVxuICAgICAgICAgICAgICAgICAgICAgIDogZm4uY2FsbCh0aGF0LCBhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcbiAgICBjYXNlIDQ6IHJldHVybiB1biA/IGZuKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10pXG4gICAgICAgICAgICAgICAgICAgICAgOiBmbi5jYWxsKHRoYXQsIGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10pO1xuICB9IHJldHVybiBmbi5hcHBseSh0aGF0LCBhcmdzKTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///102\n")},function(module,exports,__webpack_require__){eval("var $parseInt = __webpack_require__(2).parseInt;\nvar $trim = __webpack_require__(45).trim;\nvar ws = __webpack_require__(72);\nvar hex = /^[-+]?0[xX]/;\n\nmodule.exports = $parseInt(ws + '08') !== 8 || $parseInt(ws + '0x16') !== 22 ? function parseInt(str, radix) {\n var string = $trim(String(str), 3);\n return $parseInt(string, (radix >>> 0) || (hex.test(string) ? 16 : 10));\n} : $parseInt;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcGFyc2UtaW50LmpzPzNjYTUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZ0JBQWdCLG1CQUFPLENBQUMsQ0FBVztBQUNuQyxZQUFZLG1CQUFPLENBQUMsRUFBZ0I7QUFDcEMsU0FBUyxtQkFBTyxDQUFDLEVBQWM7QUFDL0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIxMDMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgJHBhcnNlSW50ID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykucGFyc2VJbnQ7XG52YXIgJHRyaW0gPSByZXF1aXJlKCcuL19zdHJpbmctdHJpbScpLnRyaW07XG52YXIgd3MgPSByZXF1aXJlKCcuL19zdHJpbmctd3MnKTtcbnZhciBoZXggPSAvXlstK10/MFt4WF0vO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICRwYXJzZUludCh3cyArICcwOCcpICE9PSA4IHx8ICRwYXJzZUludCh3cyArICcweDE2JykgIT09IDIyID8gZnVuY3Rpb24gcGFyc2VJbnQoc3RyLCByYWRpeCkge1xuICB2YXIgc3RyaW5nID0gJHRyaW0oU3RyaW5nKHN0ciksIDMpO1xuICByZXR1cm4gJHBhcnNlSW50KHN0cmluZywgKHJhZGl4ID4+PiAwKSB8fCAoaGV4LnRlc3Qoc3RyaW5nKSA/IDE2IDogMTApKTtcbn0gOiAkcGFyc2VJbnQ7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///103\n")},function(module,exports,__webpack_require__){eval("var $parseFloat = __webpack_require__(2).parseFloat;\nvar $trim = __webpack_require__(45).trim;\n\nmodule.exports = 1 / $parseFloat(__webpack_require__(72) + '-0') !== -Infinity ? function parseFloat(str) {\n var string = $trim(String(str), 3);\n var result = $parseFloat(string);\n return result === 0 && string.charAt(0) == '-' ? -0 : result;\n} : $parseFloat;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcGFyc2UtZmxvYXQuanM/ZDc1MiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxrQkFBa0IsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JDLFlBQVksbUJBQU8sQ0FBQyxFQUFnQjs7QUFFcEMsaUNBQWlDLG1CQUFPLENBQUMsRUFBYztBQUN2RDtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjEwNC5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciAkcGFyc2VGbG9hdCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLnBhcnNlRmxvYXQ7XG52YXIgJHRyaW0gPSByZXF1aXJlKCcuL19zdHJpbmctdHJpbScpLnRyaW07XG5cbm1vZHVsZS5leHBvcnRzID0gMSAvICRwYXJzZUZsb2F0KHJlcXVpcmUoJy4vX3N0cmluZy13cycpICsgJy0wJykgIT09IC1JbmZpbml0eSA/IGZ1bmN0aW9uIHBhcnNlRmxvYXQoc3RyKSB7XG4gIHZhciBzdHJpbmcgPSAkdHJpbShTdHJpbmcoc3RyKSwgMyk7XG4gIHZhciByZXN1bHQgPSAkcGFyc2VGbG9hdChzdHJpbmcpO1xuICByZXR1cm4gcmVzdWx0ID09PSAwICYmIHN0cmluZy5jaGFyQXQoMCkgPT0gJy0nID8gLTAgOiByZXN1bHQ7XG59IDogJHBhcnNlRmxvYXQ7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///104\n")},function(module,exports,__webpack_require__){eval("var cof = __webpack_require__(20);\nmodule.exports = function (it, msg) {\n if (typeof it != 'number' && cof(it) != 'Number') throw TypeError(msg);\n return +it;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYS1udW1iZXItdmFsdWUuanM/YmVmOSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxVQUFVLG1CQUFPLENBQUMsRUFBUTtBQUMxQjtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIxMDUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgbXNnKSB7XG4gIGlmICh0eXBlb2YgaXQgIT0gJ251bWJlcicgJiYgY29mKGl0KSAhPSAnTnVtYmVyJykgdGhyb3cgVHlwZUVycm9yKG1zZyk7XG4gIHJldHVybiAraXQ7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///105\n")},function(module,exports,__webpack_require__){eval("// 20.1.2.3 Number.isInteger(number)\nvar isObject = __webpack_require__(4);\nvar floor = Math.floor;\nmodule.exports = function isInteger(it) {\n return !isObject(it) && isFinite(it) && floor(it) === it;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtaW50ZWdlci5qcz85YzEyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckM7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMTA2LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMS4yLjMgTnVtYmVyLmlzSW50ZWdlcihudW1iZXIpXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzSW50ZWdlcihpdCkge1xuICByZXR1cm4gIWlzT2JqZWN0KGl0KSAmJiBpc0Zpbml0ZShpdCkgJiYgZmxvb3IoaXQpID09PSBpdDtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///106\n")},function(module,exports){eval("// 20.2.2.20 Math.log1p(x)\nmodule.exports = Math.log1p || function log1p(x) {\n return (x = +x) > -1e-8 && x < 1e-8 ? x - x * x / 2 : Math.log(1 + x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWF0aC1sb2cxcC5qcz9kNmM2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjEwNy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDIwLjIuMi4yMCBNYXRoLmxvZzFwKHgpXG5tb2R1bGUuZXhwb3J0cyA9IE1hdGgubG9nMXAgfHwgZnVuY3Rpb24gbG9nMXAoeCkge1xuICByZXR1cm4gKHggPSAreCkgPiAtMWUtOCAmJiB4IDwgMWUtOCA/IHggLSB4ICogeCAvIDIgOiBNYXRoLmxvZygxICsgeCk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///107\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.16 Math.fround(x)\nvar sign = __webpack_require__(75);\nvar pow = Math.pow;\nvar EPSILON = pow(2, -52);\nvar EPSILON32 = pow(2, -23);\nvar MAX32 = pow(2, 127) * (2 - EPSILON32);\nvar MIN32 = pow(2, -126);\n\nvar roundTiesToEven = function (n) {\n return n + 1 / EPSILON - 1 / EPSILON;\n};\n\nmodule.exports = Math.fround || function fround(x) {\n var $abs = Math.abs(x);\n var $sign = sign(x);\n var a, result;\n if ($abs < MIN32) return $sign * roundTiesToEven($abs / MIN32 / EPSILON32) * MIN32 * EPSILON32;\n a = (1 + EPSILON32 / EPSILON) * $abs;\n result = a - (a - $abs);\n // eslint-disable-next-line no-self-compare\n if (result > MAX32 || result != result) return $sign * Infinity;\n return $sign * result;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWF0aC1mcm91bmQuanM/OTFjYSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLFdBQVcsbUJBQU8sQ0FBQyxFQUFjO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMTA4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMi4yLjE2IE1hdGguZnJvdW5kKHgpXG52YXIgc2lnbiA9IHJlcXVpcmUoJy4vX21hdGgtc2lnbicpO1xudmFyIHBvdyA9IE1hdGgucG93O1xudmFyIEVQU0lMT04gPSBwb3coMiwgLTUyKTtcbnZhciBFUFNJTE9OMzIgPSBwb3coMiwgLTIzKTtcbnZhciBNQVgzMiA9IHBvdygyLCAxMjcpICogKDIgLSBFUFNJTE9OMzIpO1xudmFyIE1JTjMyID0gcG93KDIsIC0xMjYpO1xuXG52YXIgcm91bmRUaWVzVG9FdmVuID0gZnVuY3Rpb24gKG4pIHtcbiAgcmV0dXJuIG4gKyAxIC8gRVBTSUxPTiAtIDEgLyBFUFNJTE9OO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBNYXRoLmZyb3VuZCB8fCBmdW5jdGlvbiBmcm91bmQoeCkge1xuICB2YXIgJGFicyA9IE1hdGguYWJzKHgpO1xuICB2YXIgJHNpZ24gPSBzaWduKHgpO1xuICB2YXIgYSwgcmVzdWx0O1xuICBpZiAoJGFicyA8IE1JTjMyKSByZXR1cm4gJHNpZ24gKiByb3VuZFRpZXNUb0V2ZW4oJGFicyAvIE1JTjMyIC8gRVBTSUxPTjMyKSAqIE1JTjMyICogRVBTSUxPTjMyO1xuICBhID0gKDEgKyBFUFNJTE9OMzIgLyBFUFNJTE9OKSAqICRhYnM7XG4gIHJlc3VsdCA9IGEgLSAoYSAtICRhYnMpO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gIGlmIChyZXN1bHQgPiBNQVgzMiB8fCByZXN1bHQgIT0gcmVzdWx0KSByZXR1cm4gJHNpZ24gKiBJbmZpbml0eTtcbiAgcmV0dXJuICRzaWduICogcmVzdWx0O1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///108\n")},function(module,exports,__webpack_require__){eval("// call something on iterator step with safe closing on error\nvar anObject = __webpack_require__(1);\nmodule.exports = function (iterator, fn, value, entries) {\n try {\n return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n // 7.4.6 IteratorClose(iterator, completion)\n } catch (e) {\n var ret = iterator['return'];\n if (ret !== undefined) anObject(ret.call(iterator));\n throw e;\n }\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlci1jYWxsLmpzPzFmYTgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjEwOS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGNhbGwgc29tZXRoaW5nIG9uIGl0ZXJhdG9yIHN0ZXAgd2l0aCBzYWZlIGNsb3Npbmcgb24gZXJyb3JcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIGZuLCB2YWx1ZSwgZW50cmllcykge1xuICB0cnkge1xuICAgIHJldHVybiBlbnRyaWVzID8gZm4oYW5PYmplY3QodmFsdWUpWzBdLCB2YWx1ZVsxXSkgOiBmbih2YWx1ZSk7XG4gIC8vIDcuNC42IEl0ZXJhdG9yQ2xvc2UoaXRlcmF0b3IsIGNvbXBsZXRpb24pXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB2YXIgcmV0ID0gaXRlcmF0b3JbJ3JldHVybiddO1xuICAgIGlmIChyZXQgIT09IHVuZGVmaW5lZCkgYW5PYmplY3QocmV0LmNhbGwoaXRlcmF0b3IpKTtcbiAgICB0aHJvdyBlO1xuICB9XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///109\n")},function(module,exports,__webpack_require__){eval("var aFunction = __webpack_require__(10);\nvar toObject = __webpack_require__(9);\nvar IObject = __webpack_require__(48);\nvar toLength = __webpack_require__(6);\n\nmodule.exports = function (that, callbackfn, aLen, memo, isRight) {\n aFunction(callbackfn);\n var O = toObject(that);\n var self = IObject(O);\n var length = toLength(O.length);\n var index = isRight ? length - 1 : 0;\n var i = isRight ? -1 : 1;\n if (aLen < 2) for (;;) {\n if (index in self) {\n memo = self[index];\n index += i;\n break;\n }\n index += i;\n if (isRight ? index < 0 : length <= index) {\n throw TypeError('Reduce of empty array with no initial value');\n }\n }\n for (;isRight ? index >= 0 : length > index; index += i) if (index in self) {\n memo = callbackfn(memo, self[index], index, O);\n }\n return memo;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktcmVkdWNlLmpzPzdiMjMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2QyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxjQUFjLG1CQUFPLENBQUMsRUFBWTtBQUNsQyxlQUFlLG1CQUFPLENBQUMsQ0FBYzs7QUFFckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLHNDQUFzQztBQUM5QztBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIxMTAuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgSU9iamVjdCA9IHJlcXVpcmUoJy4vX2lvYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0aGF0LCBjYWxsYmFja2ZuLCBhTGVuLCBtZW1vLCBpc1JpZ2h0KSB7XG4gIGFGdW5jdGlvbihjYWxsYmFja2ZuKTtcbiAgdmFyIE8gPSB0b09iamVjdCh0aGF0KTtcbiAgdmFyIHNlbGYgPSBJT2JqZWN0KE8pO1xuICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICB2YXIgaW5kZXggPSBpc1JpZ2h0ID8gbGVuZ3RoIC0gMSA6IDA7XG4gIHZhciBpID0gaXNSaWdodCA/IC0xIDogMTtcbiAgaWYgKGFMZW4gPCAyKSBmb3IgKDs7KSB7XG4gICAgaWYgKGluZGV4IGluIHNlbGYpIHtcbiAgICAgIG1lbW8gPSBzZWxmW2luZGV4XTtcbiAgICAgIGluZGV4ICs9IGk7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgaW5kZXggKz0gaTtcbiAgICBpZiAoaXNSaWdodCA/IGluZGV4IDwgMCA6IGxlbmd0aCA8PSBpbmRleCkge1xuICAgICAgdGhyb3cgVHlwZUVycm9yKCdSZWR1Y2Ugb2YgZW1wdHkgYXJyYXkgd2l0aCBubyBpbml0aWFsIHZhbHVlJyk7XG4gICAgfVxuICB9XG4gIGZvciAoO2lzUmlnaHQgPyBpbmRleCA+PSAwIDogbGVuZ3RoID4gaW5kZXg7IGluZGV4ICs9IGkpIGlmIChpbmRleCBpbiBzZWxmKSB7XG4gICAgbWVtbyA9IGNhbGxiYWNrZm4obWVtbywgc2VsZltpbmRleF0sIGluZGV4LCBPKTtcbiAgfVxuICByZXR1cm4gbWVtbztcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///110\n")},function(module,exports,__webpack_require__){"use strict";eval("// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\n\nvar toObject = __webpack_require__(9);\nvar toAbsoluteIndex = __webpack_require__(35);\nvar toLength = __webpack_require__(6);\n\nmodule.exports = [].copyWithin || function copyWithin(target /* = 0 */, start /* = 0, end = @length */) {\n var O = toObject(this);\n var len = toLength(O.length);\n var to = toAbsoluteIndex(target, len);\n var from = toAbsoluteIndex(start, len);\n var end = arguments.length > 2 ? arguments[2] : undefined;\n var count = Math.min((end === undefined ? len : toAbsoluteIndex(end, len)) - from, len - to);\n var inc = 1;\n if (from < to && to < from + count) {\n inc = -1;\n from += count - 1;\n to += count - 1;\n }\n while (count-- > 0) {\n if (from in O) O[to] = O[from];\n else delete O[to];\n to += inc;\n from += inc;\n } return O;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktY29weS13aXRoaW4uanM/YmE5MiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNhO0FBQ2IsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsc0JBQXNCLG1CQUFPLENBQUMsRUFBc0I7QUFDcEQsZUFBZSxtQkFBTyxDQUFDLENBQWM7O0FBRXJDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCIsImZpbGUiOiIxMTEuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyMi4xLjMuMyBBcnJheS5wcm90b3R5cGUuY29weVdpdGhpbih0YXJnZXQsIHN0YXJ0LCBlbmQgPSB0aGlzLmxlbmd0aClcbid1c2Ugc3RyaWN0JztcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4vX3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBbXS5jb3B5V2l0aGluIHx8IGZ1bmN0aW9uIGNvcHlXaXRoaW4odGFyZ2V0IC8qID0gMCAqLywgc3RhcnQgLyogPSAwLCBlbmQgPSBAbGVuZ3RoICovKSB7XG4gIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gIHZhciBsZW4gPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gIHZhciB0byA9IHRvQWJzb2x1dGVJbmRleCh0YXJnZXQsIGxlbik7XG4gIHZhciBmcm9tID0gdG9BYnNvbHV0ZUluZGV4KHN0YXJ0LCBsZW4pO1xuICB2YXIgZW5kID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQ7XG4gIHZhciBjb3VudCA9IE1hdGgubWluKChlbmQgPT09IHVuZGVmaW5lZCA/IGxlbiA6IHRvQWJzb2x1dGVJbmRleChlbmQsIGxlbikpIC0gZnJvbSwgbGVuIC0gdG8pO1xuICB2YXIgaW5jID0gMTtcbiAgaWYgKGZyb20gPCB0byAmJiB0byA8IGZyb20gKyBjb3VudCkge1xuICAgIGluYyA9IC0xO1xuICAgIGZyb20gKz0gY291bnQgLSAxO1xuICAgIHRvICs9IGNvdW50IC0gMTtcbiAgfVxuICB3aGlsZSAoY291bnQtLSA+IDApIHtcbiAgICBpZiAoZnJvbSBpbiBPKSBPW3RvXSA9IE9bZnJvbV07XG4gICAgZWxzZSBkZWxldGUgT1t0b107XG4gICAgdG8gKz0gaW5jO1xuICAgIGZyb20gKz0gaW5jO1xuICB9IHJldHVybiBPO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///111\n")},function(module,exports){eval("module.exports = function (done, value) {\n return { value: value, done: !!done };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlci1zdGVwLmpzP2Q1M2IiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxVQUFVO0FBQ1YiLCJmaWxlIjoiMTEyLmpzIiwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZG9uZSwgdmFsdWUpIHtcbiAgcmV0dXJuIHsgdmFsdWU6IHZhbHVlLCBkb25lOiAhIWRvbmUgfTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///112\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar regexpExec = __webpack_require__(87);\n__webpack_require__(0)({\n target: 'RegExp',\n proto: true,\n forced: regexpExec !== /./.exec\n}, {\n exec: regexpExec\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLmV4ZWMuanM/YjBjNSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGlCQUFpQixtQkFBTyxDQUFDLEVBQWdCO0FBQ3pDLG1CQUFPLENBQUMsQ0FBVztBQUNuQjtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQSxDQUFDIiwiZmlsZSI6IjExMy5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciByZWdleHBFeGVjID0gcmVxdWlyZSgnLi9fcmVnZXhwLWV4ZWMnKTtcbnJlcXVpcmUoJy4vX2V4cG9ydCcpKHtcbiAgdGFyZ2V0OiAnUmVnRXhwJyxcbiAgcHJvdG86IHRydWUsXG4gIGZvcmNlZDogcmVnZXhwRXhlYyAhPT0gLy4vLmV4ZWNcbn0sIHtcbiAgZXhlYzogcmVnZXhwRXhlY1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///113\n")},function(module,exports,__webpack_require__){eval("// 21.2.5.3 get RegExp.prototype.flags()\nif (__webpack_require__(7) && /./g.flags != 'g') __webpack_require__(8).f(RegExp.prototype, 'flags', {\n configurable: true,\n get: __webpack_require__(50)\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLmZsYWdzLmpzPzM4NDYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxJQUFJLG1CQUFPLENBQUMsQ0FBZ0Isd0JBQXdCLG1CQUFPLENBQUMsQ0FBYztBQUMxRTtBQUNBLE9BQU8sbUJBQU8sQ0FBQyxFQUFVO0FBQ3pCLENBQUMiLCJmaWxlIjoiMTE0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjEuMi41LjMgZ2V0IFJlZ0V4cC5wcm90b3R5cGUuZmxhZ3MoKVxuaWYgKHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgLy4vZy5mbGFncyAhPSAnZycpIHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmYoUmVnRXhwLnByb3RvdHlwZSwgJ2ZsYWdzJywge1xuICBjb25maWd1cmFibGU6IHRydWUsXG4gIGdldDogcmVxdWlyZSgnLi9fZmxhZ3MnKVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///114\n")},function(module,exports){eval("module.exports = function (exec) {\n try {\n return { e: false, v: exec() };\n } catch (e) {\n return { e: true, v: e };\n }\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcGVyZm9ybS5qcz85YzgwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQSxZQUFZO0FBQ1osR0FBRztBQUNILFlBQVk7QUFDWjtBQUNBIiwiZmlsZSI6IjExNS5qcyIsInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4geyBlOiBmYWxzZSwgdjogZXhlYygpIH07XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4geyBlOiB0cnVlLCB2OiBlIH07XG4gIH1cbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///115\n")},function(module,exports,__webpack_require__){eval("var anObject = __webpack_require__(1);\nvar isObject = __webpack_require__(4);\nvar newPromiseCapability = __webpack_require__(91);\n\nmodule.exports = function (C, x) {\n anObject(C);\n if (isObject(x) && x.constructor === C) return x;\n var promiseCapability = newPromiseCapability.f(C);\n var resolve = promiseCapability.resolve;\n resolve(x);\n return promiseCapability.promise;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcHJvbWlzZS1yZXNvbHZlLmpzP2JjYWEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsMkJBQTJCLG1CQUFPLENBQUMsRUFBMkI7O0FBRTlEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMTE2LmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IHJlcXVpcmUoJy4vX25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQywgeCkge1xuICBhbk9iamVjdChDKTtcbiAgaWYgKGlzT2JqZWN0KHgpICYmIHguY29uc3RydWN0b3IgPT09IEMpIHJldHVybiB4O1xuICB2YXIgcHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eS5mKEMpO1xuICB2YXIgcmVzb2x2ZSA9IHByb21pc2VDYXBhYmlsaXR5LnJlc29sdmU7XG4gIHJlc29sdmUoeCk7XG4gIHJldHVybiBwcm9taXNlQ2FwYWJpbGl0eS5wcm9taXNlO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///116\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar strong = __webpack_require__(118);\nvar validate = __webpack_require__(42);\nvar MAP = 'Map';\n\n// 23.1 Map Objects\nmodule.exports = __webpack_require__(61)(MAP, function (get) {\n return function Map() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.1.3.6 Map.prototype.get(key)\n get: function get(key) {\n var entry = strong.getEntry(validate(this, MAP), key);\n return entry && entry.v;\n },\n // 23.1.3.9 Map.prototype.set(key, value)\n set: function set(key, value) {\n return strong.def(validate(this, MAP), key === 0 ? 0 : key, value);\n }\n}, strong, true);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWFwLmpzP2Y0MDAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixhQUFhLG1CQUFPLENBQUMsR0FBc0I7QUFDM0MsZUFBZSxtQkFBTyxDQUFDLEVBQXdCO0FBQy9DOztBQUVBO0FBQ0EsaUJBQWlCLG1CQUFPLENBQUMsRUFBZTtBQUN4Qyx5QkFBeUIsbUVBQW1FO0FBQzVGLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTE3LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIHN0cm9uZyA9IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24tc3Ryb25nJyk7XG52YXIgdmFsaWRhdGUgPSByZXF1aXJlKCcuL192YWxpZGF0ZS1jb2xsZWN0aW9uJyk7XG52YXIgTUFQID0gJ01hcCc7XG5cbi8vIDIzLjEgTWFwIE9iamVjdHNcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fY29sbGVjdGlvbicpKE1BUCwgZnVuY3Rpb24gKGdldCkge1xuICByZXR1cm4gZnVuY3Rpb24gTWFwKCkgeyByZXR1cm4gZ2V0KHRoaXMsIGFyZ3VtZW50cy5sZW5ndGggPiAwID8gYXJndW1lbnRzWzBdIDogdW5kZWZpbmVkKTsgfTtcbn0sIHtcbiAgLy8gMjMuMS4zLjYgTWFwLnByb3RvdHlwZS5nZXQoa2V5KVxuICBnZXQ6IGZ1bmN0aW9uIGdldChrZXkpIHtcbiAgICB2YXIgZW50cnkgPSBzdHJvbmcuZ2V0RW50cnkodmFsaWRhdGUodGhpcywgTUFQKSwga2V5KTtcbiAgICByZXR1cm4gZW50cnkgJiYgZW50cnkudjtcbiAgfSxcbiAgLy8gMjMuMS4zLjkgTWFwLnByb3RvdHlwZS5zZXQoa2V5LCB2YWx1ZSlcbiAgc2V0OiBmdW5jdGlvbiBzZXQoa2V5LCB2YWx1ZSkge1xuICAgIHJldHVybiBzdHJvbmcuZGVmKHZhbGlkYXRlKHRoaXMsIE1BUCksIGtleSA9PT0gMCA/IDAgOiBrZXksIHZhbHVlKTtcbiAgfVxufSwgc3Ryb25nLCB0cnVlKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///117\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar dP = __webpack_require__(8).f;\nvar create = __webpack_require__(36);\nvar redefineAll = __webpack_require__(41);\nvar ctx = __webpack_require__(19);\nvar anInstance = __webpack_require__(39);\nvar forOf = __webpack_require__(40);\nvar $iterDefine = __webpack_require__(77);\nvar step = __webpack_require__(112);\nvar setSpecies = __webpack_require__(38);\nvar DESCRIPTORS = __webpack_require__(7);\nvar fastKey = __webpack_require__(30).fastKey;\nvar validate = __webpack_require__(42);\nvar SIZE = DESCRIPTORS ? '_s' : 'size';\n\nvar getEntry = function (that, key) {\n // fast case\n var index = fastKey(key);\n var entry;\n if (index !== 'F') return that._i[index];\n // frozen object case\n for (entry = that._f; entry; entry = entry.n) {\n if (entry.k == key) return entry;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = create(null); // index\n that._f = undefined; // first entry\n that._l = undefined; // last entry\n that[SIZE] = 0; // size\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.1.3.1 Map.prototype.clear()\n // 23.2.3.2 Set.prototype.clear()\n clear: function clear() {\n for (var that = validate(this, NAME), data = that._i, entry = that._f; entry; entry = entry.n) {\n entry.r = true;\n if (entry.p) entry.p = entry.p.n = undefined;\n delete data[entry.i];\n }\n that._f = that._l = undefined;\n that[SIZE] = 0;\n },\n // 23.1.3.3 Map.prototype.delete(key)\n // 23.2.3.4 Set.prototype.delete(value)\n 'delete': function (key) {\n var that = validate(this, NAME);\n var entry = getEntry(that, key);\n if (entry) {\n var next = entry.n;\n var prev = entry.p;\n delete that._i[entry.i];\n entry.r = true;\n if (prev) prev.n = next;\n if (next) next.p = prev;\n if (that._f == entry) that._f = next;\n if (that._l == entry) that._l = prev;\n that[SIZE]--;\n } return !!entry;\n },\n // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined)\n // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined)\n forEach: function forEach(callbackfn /* , that = undefined */) {\n validate(this, NAME);\n var f = ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3);\n var entry;\n while (entry = entry ? entry.n : this._f) {\n f(entry.v, entry.k, this);\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n }\n },\n // 23.1.3.7 Map.prototype.has(key)\n // 23.2.3.7 Set.prototype.has(value)\n has: function has(key) {\n return !!getEntry(validate(this, NAME), key);\n }\n });\n if (DESCRIPTORS) dP(C.prototype, 'size', {\n get: function () {\n return validate(this, NAME)[SIZE];\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var entry = getEntry(that, key);\n var prev, index;\n // change existing entry\n if (entry) {\n entry.v = value;\n // create new entry\n } else {\n that._l = entry = {\n i: index = fastKey(key, true), // <- index\n k: key, // <- key\n v: value, // <- value\n p: prev = that._l, // <- previous entry\n n: undefined, // <- next entry\n r: false // <- removed\n };\n if (!that._f) that._f = entry;\n if (prev) prev.n = entry;\n that[SIZE]++;\n // add to index\n if (index !== 'F') that._i[index] = entry;\n } return that;\n },\n getEntry: getEntry,\n setStrong: function (C, NAME, IS_MAP) {\n // add .keys, .values, .entries, [@@iterator]\n // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11\n $iterDefine(C, NAME, function (iterated, kind) {\n this._t = validate(iterated, NAME); // target\n this._k = kind; // kind\n this._l = undefined; // previous\n }, function () {\n var that = this;\n var kind = that._k;\n var entry = that._l;\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n // get next entry\n if (!that._t || !(that._l = entry = entry ? entry.n : that._t._f)) {\n // or finish the iteration\n that._t = undefined;\n return step(1);\n }\n // return step by kind\n if (kind == 'keys') return step(0, entry.k);\n if (kind == 'values') return step(0, entry.v);\n return step(0, [entry.k, entry.v]);\n }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);\n\n // add [@@species], 23.1.2.2, 23.2.2.2\n setSpecies(NAME);\n }\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY29sbGVjdGlvbi1zdHJvbmcuanM/YzI2YiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLFNBQVMsbUJBQU8sQ0FBQyxDQUFjO0FBQy9CLGFBQWEsbUJBQU8sQ0FBQyxFQUFrQjtBQUN2QyxrQkFBa0IsbUJBQU8sQ0FBQyxFQUFpQjtBQUMzQyxVQUFVLG1CQUFPLENBQUMsRUFBUTtBQUMxQixpQkFBaUIsbUJBQU8sQ0FBQyxFQUFnQjtBQUN6QyxZQUFZLG1CQUFPLENBQUMsRUFBVztBQUMvQixrQkFBa0IsbUJBQU8sQ0FBQyxFQUFnQjtBQUMxQyxXQUFXLG1CQUFPLENBQUMsR0FBYztBQUNqQyxpQkFBaUIsbUJBQU8sQ0FBQyxFQUFnQjtBQUN6QyxrQkFBa0IsbUJBQU8sQ0FBQyxDQUFnQjtBQUMxQyxjQUFjLG1CQUFPLENBQUMsRUFBUztBQUMvQixlQUFlLG1CQUFPLENBQUMsRUFBd0I7QUFDL0M7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLE9BQU87QUFDOUI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCLDZCQUE2QjtBQUM3QiwwQkFBMEI7QUFDMUIsMEJBQTBCO0FBQzFCLHFCQUFxQjtBQUNyQjtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhFQUE4RSxPQUFPO0FBQ3JGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlDQUF5QztBQUN6QyxxQkFBcUI7QUFDckIsMEJBQTBCO0FBQzFCLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjExOC5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpO1xudmFyIHJlZGVmaW5lQWxsID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUtYWxsJyk7XG52YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG52YXIgZm9yT2YgPSByZXF1aXJlKCcuL19mb3Itb2YnKTtcbnZhciAkaXRlckRlZmluZSA9IHJlcXVpcmUoJy4vX2l0ZXItZGVmaW5lJyk7XG52YXIgc3RlcCA9IHJlcXVpcmUoJy4vX2l0ZXItc3RlcCcpO1xudmFyIHNldFNwZWNpZXMgPSByZXF1aXJlKCcuL19zZXQtc3BlY2llcycpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKTtcbnZhciBmYXN0S2V5ID0gcmVxdWlyZSgnLi9fbWV0YScpLmZhc3RLZXk7XG52YXIgdmFsaWRhdGUgPSByZXF1aXJlKCcuL192YWxpZGF0ZS1jb2xsZWN0aW9uJyk7XG52YXIgU0laRSA9IERFU0NSSVBUT1JTID8gJ19zJyA6ICdzaXplJztcblxudmFyIGdldEVudHJ5ID0gZnVuY3Rpb24gKHRoYXQsIGtleSkge1xuICAvLyBmYXN0IGNhc2VcbiAgdmFyIGluZGV4ID0gZmFzdEtleShrZXkpO1xuICB2YXIgZW50cnk7XG4gIGlmIChpbmRleCAhPT0gJ0YnKSByZXR1cm4gdGhhdC5faVtpbmRleF07XG4gIC8vIGZyb3plbiBvYmplY3QgY2FzZVxuICBmb3IgKGVudHJ5ID0gdGhhdC5fZjsgZW50cnk7IGVudHJ5ID0gZW50cnkubikge1xuICAgIGlmIChlbnRyeS5rID09IGtleSkgcmV0dXJuIGVudHJ5O1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZ2V0Q29uc3RydWN0b3I6IGZ1bmN0aW9uICh3cmFwcGVyLCBOQU1FLCBJU19NQVAsIEFEREVSKSB7XG4gICAgdmFyIEMgPSB3cmFwcGVyKGZ1bmN0aW9uICh0aGF0LCBpdGVyYWJsZSkge1xuICAgICAgYW5JbnN0YW5jZSh0aGF0LCBDLCBOQU1FLCAnX2knKTtcbiAgICAgIHRoYXQuX3QgPSBOQU1FOyAgICAgICAgIC8vIGNvbGxlY3Rpb24gdHlwZVxuICAgICAgdGhhdC5faSA9IGNyZWF0ZShudWxsKTsgLy8gaW5kZXhcbiAgICAgIHRoYXQuX2YgPSB1bmRlZmluZWQ7ICAgIC8vIGZpcnN0IGVudHJ5XG4gICAgICB0aGF0Ll9sID0gdW5kZWZpbmVkOyAgICAvLyBsYXN0IGVudHJ5XG4gICAgICB0aGF0W1NJWkVdID0gMDsgICAgICAgICAvLyBzaXplXG4gICAgICBpZiAoaXRlcmFibGUgIT0gdW5kZWZpbmVkKSBmb3JPZihpdGVyYWJsZSwgSVNfTUFQLCB0aGF0W0FEREVSXSwgdGhhdCk7XG4gICAgfSk7XG4gICAgcmVkZWZpbmVBbGwoQy5wcm90b3R5cGUsIHtcbiAgICAgIC8vIDIzLjEuMy4xIE1hcC5wcm90b3R5cGUuY2xlYXIoKVxuICAgICAgLy8gMjMuMi4zLjIgU2V0LnByb3RvdHlwZS5jbGVhcigpXG4gICAgICBjbGVhcjogZnVuY3Rpb24gY2xlYXIoKSB7XG4gICAgICAgIGZvciAodmFyIHRoYXQgPSB2YWxpZGF0ZSh0aGlzLCBOQU1FKSwgZGF0YSA9IHRoYXQuX2ksIGVudHJ5ID0gdGhhdC5fZjsgZW50cnk7IGVudHJ5ID0gZW50cnkubikge1xuICAgICAgICAgIGVudHJ5LnIgPSB0cnVlO1xuICAgICAgICAgIGlmIChlbnRyeS5wKSBlbnRyeS5wID0gZW50cnkucC5uID0gdW5kZWZpbmVkO1xuICAgICAgICAgIGRlbGV0ZSBkYXRhW2VudHJ5LmldO1xuICAgICAgICB9XG4gICAgICAgIHRoYXQuX2YgPSB0aGF0Ll9sID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGF0W1NJWkVdID0gMDtcbiAgICAgIH0sXG4gICAgICAvLyAyMy4xLjMuMyBNYXAucHJvdG90eXBlLmRlbGV0ZShrZXkpXG4gICAgICAvLyAyMy4yLjMuNCBTZXQucHJvdG90eXBlLmRlbGV0ZSh2YWx1ZSlcbiAgICAgICdkZWxldGUnOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHZhciB0aGF0ID0gdmFsaWRhdGUodGhpcywgTkFNRSk7XG4gICAgICAgIHZhciBlbnRyeSA9IGdldEVudHJ5KHRoYXQsIGtleSk7XG4gICAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICAgIHZhciBuZXh0ID0gZW50cnkubjtcbiAgICAgICAgICB2YXIgcHJldiA9IGVudHJ5LnA7XG4gICAgICAgICAgZGVsZXRlIHRoYXQuX2lbZW50cnkuaV07XG4gICAgICAgICAgZW50cnkuciA9IHRydWU7XG4gICAgICAgICAgaWYgKHByZXYpIHByZXYubiA9IG5leHQ7XG4gICAgICAgICAgaWYgKG5leHQpIG5leHQucCA9IHByZXY7XG4gICAgICAgICAgaWYgKHRoYXQuX2YgPT0gZW50cnkpIHRoYXQuX2YgPSBuZXh0O1xuICAgICAgICAgIGlmICh0aGF0Ll9sID09IGVudHJ5KSB0aGF0Ll9sID0gcHJldjtcbiAgICAgICAgICB0aGF0W1NJWkVdLS07XG4gICAgICAgIH0gcmV0dXJuICEhZW50cnk7XG4gICAgICB9LFxuICAgICAgLy8gMjMuMi4zLjYgU2V0LnByb3RvdHlwZS5mb3JFYWNoKGNhbGxiYWNrZm4sIHRoaXNBcmcgPSB1bmRlZmluZWQpXG4gICAgICAvLyAyMy4xLjMuNSBNYXAucHJvdG90eXBlLmZvckVhY2goY2FsbGJhY2tmbiwgdGhpc0FyZyA9IHVuZGVmaW5lZClcbiAgICAgIGZvckVhY2g6IGZ1bmN0aW9uIGZvckVhY2goY2FsbGJhY2tmbiAvKiAsIHRoYXQgPSB1bmRlZmluZWQgKi8pIHtcbiAgICAgICAgdmFsaWRhdGUodGhpcywgTkFNRSk7XG4gICAgICAgIHZhciBmID0gY3R4KGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkLCAzKTtcbiAgICAgICAgdmFyIGVudHJ5O1xuICAgICAgICB3aGlsZSAoZW50cnkgPSBlbnRyeSA/IGVudHJ5Lm4gOiB0aGlzLl9mKSB7XG4gICAgICAgICAgZihlbnRyeS52LCBlbnRyeS5rLCB0aGlzKTtcbiAgICAgICAgICAvLyByZXZlcnQgdG8gdGhlIGxhc3QgZXhpc3RpbmcgZW50cnlcbiAgICAgICAgICB3aGlsZSAoZW50cnkgJiYgZW50cnkucikgZW50cnkgPSBlbnRyeS5wO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgLy8gMjMuMS4zLjcgTWFwLnByb3RvdHlwZS5oYXMoa2V5KVxuICAgICAgLy8gMjMuMi4zLjcgU2V0LnByb3RvdHlwZS5oYXModmFsdWUpXG4gICAgICBoYXM6IGZ1bmN0aW9uIGhhcyhrZXkpIHtcbiAgICAgICAgcmV0dXJuICEhZ2V0RW50cnkodmFsaWRhdGUodGhpcywgTkFNRSksIGtleSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKERFU0NSSVBUT1JTKSBkUChDLnByb3RvdHlwZSwgJ3NpemUnLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHZhbGlkYXRlKHRoaXMsIE5BTUUpW1NJWkVdO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBDO1xuICB9LFxuICBkZWY6IGZ1bmN0aW9uICh0aGF0LCBrZXksIHZhbHVlKSB7XG4gICAgdmFyIGVudHJ5ID0gZ2V0RW50cnkodGhhdCwga2V5KTtcbiAgICB2YXIgcHJldiwgaW5kZXg7XG4gICAgLy8gY2hhbmdlIGV4aXN0aW5nIGVudHJ5XG4gICAgaWYgKGVudHJ5KSB7XG4gICAgICBlbnRyeS52ID0gdmFsdWU7XG4gICAgLy8gY3JlYXRlIG5ldyBlbnRyeVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGF0Ll9sID0gZW50cnkgPSB7XG4gICAgICAgIGk6IGluZGV4ID0gZmFzdEtleShrZXksIHRydWUpLCAvLyA8LSBpbmRleFxuICAgICAgICBrOiBrZXksICAgICAgICAgICAgICAgICAgICAgICAgLy8gPC0ga2V5XG4gICAgICAgIHY6IHZhbHVlLCAgICAgICAgICAgICAgICAgICAgICAvLyA8LSB2YWx1ZVxuICAgICAgICBwOiBwcmV2ID0gdGhhdC5fbCwgICAgICAgICAgICAgLy8gPC0gcHJldmlvdXMgZW50cnlcbiAgICAgICAgbjogdW5kZWZpbmVkLCAgICAgICAgICAgICAgICAgIC8vIDwtIG5leHQgZW50cnlcbiAgICAgICAgcjogZmFsc2UgICAgICAgICAgICAgICAgICAgICAgIC8vIDwtIHJlbW92ZWRcbiAgICAgIH07XG4gICAgICBpZiAoIXRoYXQuX2YpIHRoYXQuX2YgPSBlbnRyeTtcbiAgICAgIGlmIChwcmV2KSBwcmV2Lm4gPSBlbnRyeTtcbiAgICAgIHRoYXRbU0laRV0rKztcbiAgICAgIC8vIGFkZCB0byBpbmRleFxuICAgICAgaWYgKGluZGV4ICE9PSAnRicpIHRoYXQuX2lbaW5kZXhdID0gZW50cnk7XG4gICAgfSByZXR1cm4gdGhhdDtcbiAgfSxcbiAgZ2V0RW50cnk6IGdldEVudHJ5LFxuICBzZXRTdHJvbmc6IGZ1bmN0aW9uIChDLCBOQU1FLCBJU19NQVApIHtcbiAgICAvLyBhZGQgLmtleXMsIC52YWx1ZXMsIC5lbnRyaWVzLCBbQEBpdGVyYXRvcl1cbiAgICAvLyAyMy4xLjMuNCwgMjMuMS4zLjgsIDIzLjEuMy4xMSwgMjMuMS4zLjEyLCAyMy4yLjMuNSwgMjMuMi4zLjgsIDIzLjIuMy4xMCwgMjMuMi4zLjExXG4gICAgJGl0ZXJEZWZpbmUoQywgTkFNRSwgZnVuY3Rpb24gKGl0ZXJhdGVkLCBraW5kKSB7XG4gICAgICB0aGlzLl90ID0gdmFsaWRhdGUoaXRlcmF0ZWQsIE5BTUUpOyAvLyB0YXJnZXRcbiAgICAgIHRoaXMuX2sgPSBraW5kOyAgICAgICAgICAgICAgICAgICAgIC8vIGtpbmRcbiAgICAgIHRoaXMuX2wgPSB1bmRlZmluZWQ7ICAgICAgICAgICAgICAgIC8vIHByZXZpb3VzXG4gICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgdmFyIGtpbmQgPSB0aGF0Ll9rO1xuICAgICAgdmFyIGVudHJ5ID0gdGhhdC5fbDtcbiAgICAgIC8vIHJldmVydCB0byB0aGUgbGFzdCBleGlzdGluZyBlbnRyeVxuICAgICAgd2hpbGUgKGVudHJ5ICYmIGVudHJ5LnIpIGVudHJ5ID0gZW50cnkucDtcbiAgICAgIC8vIGdldCBuZXh0IGVudHJ5XG4gICAgICBpZiAoIXRoYXQuX3QgfHwgISh0aGF0Ll9sID0gZW50cnkgPSBlbnRyeSA/IGVudHJ5Lm4gOiB0aGF0Ll90Ll9mKSkge1xuICAgICAgICAvLyBvciBmaW5pc2ggdGhlIGl0ZXJhdGlvblxuICAgICAgICB0aGF0Ll90ID0gdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gc3RlcCgxKTtcbiAgICAgIH1cbiAgICAgIC8vIHJldHVybiBzdGVwIGJ5IGtpbmRcbiAgICAgIGlmIChraW5kID09ICdrZXlzJykgcmV0dXJuIHN0ZXAoMCwgZW50cnkuayk7XG4gICAgICBpZiAoa2luZCA9PSAndmFsdWVzJykgcmV0dXJuIHN0ZXAoMCwgZW50cnkudik7XG4gICAgICByZXR1cm4gc3RlcCgwLCBbZW50cnkuaywgZW50cnkudl0pO1xuICAgIH0sIElTX01BUCA/ICdlbnRyaWVzJyA6ICd2YWx1ZXMnLCAhSVNfTUFQLCB0cnVlKTtcblxuICAgIC8vIGFkZCBbQEBzcGVjaWVzXSwgMjMuMS4yLjIsIDIzLjIuMi4yXG4gICAgc2V0U3BlY2llcyhOQU1FKTtcbiAgfVxufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///118\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar strong = __webpack_require__(118);\nvar validate = __webpack_require__(42);\nvar SET = 'Set';\n\n// 23.2 Set Objects\nmodule.exports = __webpack_require__(61)(SET, function (get) {\n return function Set() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.2.3.1 Set.prototype.add(value)\n add: function add(value) {\n return strong.def(validate(this, SET), value = value === 0 ? 0 : value, value);\n }\n}, strong);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc2V0LmpzPzRmN2YiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixhQUFhLG1CQUFPLENBQUMsR0FBc0I7QUFDM0MsZUFBZSxtQkFBTyxDQUFDLEVBQXdCO0FBQy9DOztBQUVBO0FBQ0EsaUJBQWlCLG1CQUFPLENBQUMsRUFBZTtBQUN4Qyx5QkFBeUIsbUVBQW1FO0FBQzVGLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTE5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIHN0cm9uZyA9IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24tc3Ryb25nJyk7XG52YXIgdmFsaWRhdGUgPSByZXF1aXJlKCcuL192YWxpZGF0ZS1jb2xsZWN0aW9uJyk7XG52YXIgU0VUID0gJ1NldCc7XG5cbi8vIDIzLjIgU2V0IE9iamVjdHNcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fY29sbGVjdGlvbicpKFNFVCwgZnVuY3Rpb24gKGdldCkge1xuICByZXR1cm4gZnVuY3Rpb24gU2V0KCkgeyByZXR1cm4gZ2V0KHRoaXMsIGFyZ3VtZW50cy5sZW5ndGggPiAwID8gYXJndW1lbnRzWzBdIDogdW5kZWZpbmVkKTsgfTtcbn0sIHtcbiAgLy8gMjMuMi4zLjEgU2V0LnByb3RvdHlwZS5hZGQodmFsdWUpXG4gIGFkZDogZnVuY3Rpb24gYWRkKHZhbHVlKSB7XG4gICAgcmV0dXJuIHN0cm9uZy5kZWYodmFsaWRhdGUodGhpcywgU0VUKSwgdmFsdWUgPSB2YWx1ZSA9PT0gMCA/IDAgOiB2YWx1ZSwgdmFsdWUpO1xuICB9XG59LCBzdHJvbmcpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///119\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar global = __webpack_require__(2);\nvar each = __webpack_require__(26)(0);\nvar redefine = __webpack_require__(12);\nvar meta = __webpack_require__(30);\nvar assign = __webpack_require__(99);\nvar weak = __webpack_require__(121);\nvar isObject = __webpack_require__(4);\nvar validate = __webpack_require__(42);\nvar NATIVE_WEAK_MAP = __webpack_require__(42);\nvar IS_IE11 = !global.ActiveXObject && 'ActiveXObject' in global;\nvar WEAK_MAP = 'WeakMap';\nvar getWeak = meta.getWeak;\nvar isExtensible = Object.isExtensible;\nvar uncaughtFrozenStore = weak.ufstore;\nvar InternalMap;\n\nvar wrapper = function (get) {\n return function WeakMap() {\n return get(this, arguments.length > 0 ? arguments[0] : undefined);\n };\n};\n\nvar methods = {\n // 23.3.3.3 WeakMap.prototype.get(key)\n get: function get(key) {\n if (isObject(key)) {\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, WEAK_MAP)).get(key);\n return data ? data[this._i] : undefined;\n }\n },\n // 23.3.3.5 WeakMap.prototype.set(key, value)\n set: function set(key, value) {\n return weak.def(validate(this, WEAK_MAP), key, value);\n }\n};\n\n// 23.3 WeakMap Objects\nvar $WeakMap = module.exports = __webpack_require__(61)(WEAK_MAP, wrapper, methods, weak, true, true);\n\n// IE11 WeakMap frozen keys fix\nif (NATIVE_WEAK_MAP && IS_IE11) {\n InternalMap = weak.getConstructor(wrapper, WEAK_MAP);\n assign(InternalMap.prototype, methods);\n meta.NEED = true;\n each(['delete', 'has', 'get', 'set'], function (key) {\n var proto = $WeakMap.prototype;\n var method = proto[key];\n redefine(proto, key, function (a, b) {\n // store frozen objects on internal weakmap shim\n if (isObject(a) && !isExtensible(a)) {\n if (!this._f) this._f = new InternalMap();\n var result = this._f[key](a, b);\n return key == 'set' ? this : result;\n // store all the rest on native weakmap\n } return method.call(this, a, b);\n });\n });\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYud2Vhay1tYXAuanM/MTBhZCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGFBQWEsbUJBQU8sQ0FBQyxDQUFXO0FBQ2hDLFdBQVcsbUJBQU8sQ0FBQyxFQUFrQjtBQUNyQyxlQUFlLG1CQUFPLENBQUMsRUFBYTtBQUNwQyxXQUFXLG1CQUFPLENBQUMsRUFBUztBQUM1QixhQUFhLG1CQUFPLENBQUMsRUFBa0I7QUFDdkMsV0FBVyxtQkFBTyxDQUFDLEdBQW9CO0FBQ3ZDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGVBQWUsbUJBQU8sQ0FBQyxFQUF3QjtBQUMvQyxzQkFBc0IsbUJBQU8sQ0FBQyxFQUF3QjtBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxnQ0FBZ0MsbUJBQU8sQ0FBQyxFQUFlOztBQUV2RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMLEdBQUc7QUFDSCIsImZpbGUiOiIxMjAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgZWFjaCA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKSgwKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG52YXIgbWV0YSA9IHJlcXVpcmUoJy4vX21ldGEnKTtcbnZhciBhc3NpZ24gPSByZXF1aXJlKCcuL19vYmplY3QtYXNzaWduJyk7XG52YXIgd2VhayA9IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24td2VhaycpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgdmFsaWRhdGUgPSByZXF1aXJlKCcuL192YWxpZGF0ZS1jb2xsZWN0aW9uJyk7XG52YXIgTkFUSVZFX1dFQUtfTUFQID0gcmVxdWlyZSgnLi9fdmFsaWRhdGUtY29sbGVjdGlvbicpO1xudmFyIElTX0lFMTEgPSAhZ2xvYmFsLkFjdGl2ZVhPYmplY3QgJiYgJ0FjdGl2ZVhPYmplY3QnIGluIGdsb2JhbDtcbnZhciBXRUFLX01BUCA9ICdXZWFrTWFwJztcbnZhciBnZXRXZWFrID0gbWV0YS5nZXRXZWFrO1xudmFyIGlzRXh0ZW5zaWJsZSA9IE9iamVjdC5pc0V4dGVuc2libGU7XG52YXIgdW5jYXVnaHRGcm96ZW5TdG9yZSA9IHdlYWsudWZzdG9yZTtcbnZhciBJbnRlcm5hbE1hcDtcblxudmFyIHdyYXBwZXIgPSBmdW5jdGlvbiAoZ2V0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBXZWFrTWFwKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgYXJndW1lbnRzLmxlbmd0aCA+IDAgPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQpO1xuICB9O1xufTtcblxudmFyIG1ldGhvZHMgPSB7XG4gIC8vIDIzLjMuMy4zIFdlYWtNYXAucHJvdG90eXBlLmdldChrZXkpXG4gIGdldDogZnVuY3Rpb24gZ2V0KGtleSkge1xuICAgIGlmIChpc09iamVjdChrZXkpKSB7XG4gICAgICB2YXIgZGF0YSA9IGdldFdlYWsoa2V5KTtcbiAgICAgIGlmIChkYXRhID09PSB0cnVlKSByZXR1cm4gdW5jYXVnaHRGcm96ZW5TdG9yZSh2YWxpZGF0ZSh0aGlzLCBXRUFLX01BUCkpLmdldChrZXkpO1xuICAgICAgcmV0dXJuIGRhdGEgPyBkYXRhW3RoaXMuX2ldIDogdW5kZWZpbmVkO1xuICAgIH1cbiAgfSxcbiAgLy8gMjMuMy4zLjUgV2Vha01hcC5wcm90b3R5cGUuc2V0KGtleSwgdmFsdWUpXG4gIHNldDogZnVuY3Rpb24gc2V0KGtleSwgdmFsdWUpIHtcbiAgICByZXR1cm4gd2Vhay5kZWYodmFsaWRhdGUodGhpcywgV0VBS19NQVApLCBrZXksIHZhbHVlKTtcbiAgfVxufTtcblxuLy8gMjMuMyBXZWFrTWFwIE9iamVjdHNcbnZhciAkV2Vha01hcCA9IG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fY29sbGVjdGlvbicpKFdFQUtfTUFQLCB3cmFwcGVyLCBtZXRob2RzLCB3ZWFrLCB0cnVlLCB0cnVlKTtcblxuLy8gSUUxMSBXZWFrTWFwIGZyb3plbiBrZXlzIGZpeFxuaWYgKE5BVElWRV9XRUFLX01BUCAmJiBJU19JRTExKSB7XG4gIEludGVybmFsTWFwID0gd2Vhay5nZXRDb25zdHJ1Y3Rvcih3cmFwcGVyLCBXRUFLX01BUCk7XG4gIGFzc2lnbihJbnRlcm5hbE1hcC5wcm90b3R5cGUsIG1ldGhvZHMpO1xuICBtZXRhLk5FRUQgPSB0cnVlO1xuICBlYWNoKFsnZGVsZXRlJywgJ2hhcycsICdnZXQnLCAnc2V0J10sIGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgcHJvdG8gPSAkV2Vha01hcC5wcm90b3R5cGU7XG4gICAgdmFyIG1ldGhvZCA9IHByb3RvW2tleV07XG4gICAgcmVkZWZpbmUocHJvdG8sIGtleSwgZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgIC8vIHN0b3JlIGZyb3plbiBvYmplY3RzIG9uIGludGVybmFsIHdlYWttYXAgc2hpbVxuICAgICAgaWYgKGlzT2JqZWN0KGEpICYmICFpc0V4dGVuc2libGUoYSkpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9mKSB0aGlzLl9mID0gbmV3IEludGVybmFsTWFwKCk7XG4gICAgICAgIHZhciByZXN1bHQgPSB0aGlzLl9mW2tleV0oYSwgYik7XG4gICAgICAgIHJldHVybiBrZXkgPT0gJ3NldCcgPyB0aGlzIDogcmVzdWx0O1xuICAgICAgLy8gc3RvcmUgYWxsIHRoZSByZXN0IG9uIG5hdGl2ZSB3ZWFrbWFwXG4gICAgICB9IHJldHVybiBtZXRob2QuY2FsbCh0aGlzLCBhLCBiKTtcbiAgICB9KTtcbiAgfSk7XG59XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///120\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar redefineAll = __webpack_require__(41);\nvar getWeak = __webpack_require__(30).getWeak;\nvar anObject = __webpack_require__(1);\nvar isObject = __webpack_require__(4);\nvar anInstance = __webpack_require__(39);\nvar forOf = __webpack_require__(40);\nvar createArrayMethod = __webpack_require__(26);\nvar $has = __webpack_require__(14);\nvar validate = __webpack_require__(42);\nvar arrayFind = createArrayMethod(5);\nvar arrayFindIndex = createArrayMethod(6);\nvar id = 0;\n\n// fallback for uncaught frozen keys\nvar uncaughtFrozenStore = function (that) {\n return that._l || (that._l = new UncaughtFrozenStore());\n};\nvar UncaughtFrozenStore = function () {\n this.a = [];\n};\nvar findUncaughtFrozen = function (store, key) {\n return arrayFind(store.a, function (it) {\n return it[0] === key;\n });\n};\nUncaughtFrozenStore.prototype = {\n get: function (key) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) return entry[1];\n },\n has: function (key) {\n return !!findUncaughtFrozen(this, key);\n },\n set: function (key, value) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) entry[1] = value;\n else this.a.push([key, value]);\n },\n 'delete': function (key) {\n var index = arrayFindIndex(this.a, function (it) {\n return it[0] === key;\n });\n if (~index) this.a.splice(index, 1);\n return !!~index;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = id++; // collection id\n that._l = undefined; // leak store for uncaught frozen objects\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.3.3.2 WeakMap.prototype.delete(key)\n // 23.4.3.3 WeakSet.prototype.delete(value)\n 'delete': function (key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME))['delete'](key);\n return data && $has(data, this._i) && delete data[this._i];\n },\n // 23.3.3.4 WeakMap.prototype.has(key)\n // 23.4.3.4 WeakSet.prototype.has(value)\n has: function has(key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME)).has(key);\n return data && $has(data, this._i);\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var data = getWeak(anObject(key), true);\n if (data === true) uncaughtFrozenStore(that).set(key, value);\n else data[that._i] = value;\n return that;\n },\n ufstore: uncaughtFrozenStore\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY29sbGVjdGlvbi13ZWFrLmpzPzY0M2UiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixrQkFBa0IsbUJBQU8sQ0FBQyxFQUFpQjtBQUMzQyxjQUFjLG1CQUFPLENBQUMsRUFBUztBQUMvQixlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxpQkFBaUIsbUJBQU8sQ0FBQyxFQUFnQjtBQUN6QyxZQUFZLG1CQUFPLENBQUMsRUFBVztBQUMvQix3QkFBd0IsbUJBQU8sQ0FBQyxFQUFrQjtBQUNsRCxXQUFXLG1CQUFPLENBQUMsRUFBUTtBQUMzQixlQUFlLG1CQUFPLENBQUMsRUFBd0I7QUFDL0M7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckIscUJBQXFCO0FBQ3JCLDBCQUEwQjtBQUMxQjtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBIiwiZmlsZSI6IjEyMS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciByZWRlZmluZUFsbCA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lLWFsbCcpO1xudmFyIGdldFdlYWsgPSByZXF1aXJlKCcuL19tZXRhJykuZ2V0V2VhaztcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG52YXIgZm9yT2YgPSByZXF1aXJlKCcuL19mb3Itb2YnKTtcbnZhciBjcmVhdGVBcnJheU1ldGhvZCA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKTtcbnZhciAkaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgdmFsaWRhdGUgPSByZXF1aXJlKCcuL192YWxpZGF0ZS1jb2xsZWN0aW9uJyk7XG52YXIgYXJyYXlGaW5kID0gY3JlYXRlQXJyYXlNZXRob2QoNSk7XG52YXIgYXJyYXlGaW5kSW5kZXggPSBjcmVhdGVBcnJheU1ldGhvZCg2KTtcbnZhciBpZCA9IDA7XG5cbi8vIGZhbGxiYWNrIGZvciB1bmNhdWdodCBmcm96ZW4ga2V5c1xudmFyIHVuY2F1Z2h0RnJvemVuU3RvcmUgPSBmdW5jdGlvbiAodGhhdCkge1xuICByZXR1cm4gdGhhdC5fbCB8fCAodGhhdC5fbCA9IG5ldyBVbmNhdWdodEZyb3plblN0b3JlKCkpO1xufTtcbnZhciBVbmNhdWdodEZyb3plblN0b3JlID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmEgPSBbXTtcbn07XG52YXIgZmluZFVuY2F1Z2h0RnJvemVuID0gZnVuY3Rpb24gKHN0b3JlLCBrZXkpIHtcbiAgcmV0dXJuIGFycmF5RmluZChzdG9yZS5hLCBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gaXRbMF0gPT09IGtleTtcbiAgfSk7XG59O1xuVW5jYXVnaHRGcm96ZW5TdG9yZS5wcm90b3R5cGUgPSB7XG4gIGdldDogZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciBlbnRyeSA9IGZpbmRVbmNhdWdodEZyb3plbih0aGlzLCBrZXkpO1xuICAgIGlmIChlbnRyeSkgcmV0dXJuIGVudHJ5WzFdO1xuICB9LFxuICBoYXM6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICByZXR1cm4gISFmaW5kVW5jYXVnaHRGcm96ZW4odGhpcywga2V5KTtcbiAgfSxcbiAgc2V0OiBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgIHZhciBlbnRyeSA9IGZpbmRVbmNhdWdodEZyb3plbih0aGlzLCBrZXkpO1xuICAgIGlmIChlbnRyeSkgZW50cnlbMV0gPSB2YWx1ZTtcbiAgICBlbHNlIHRoaXMuYS5wdXNoKFtrZXksIHZhbHVlXSk7XG4gIH0sXG4gICdkZWxldGUnOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIGluZGV4ID0gYXJyYXlGaW5kSW5kZXgodGhpcy5hLCBmdW5jdGlvbiAoaXQpIHtcbiAgICAgIHJldHVybiBpdFswXSA9PT0ga2V5O1xuICAgIH0pO1xuICAgIGlmICh+aW5kZXgpIHRoaXMuYS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIHJldHVybiAhIX5pbmRleDtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGdldENvbnN0cnVjdG9yOiBmdW5jdGlvbiAod3JhcHBlciwgTkFNRSwgSVNfTUFQLCBBRERFUikge1xuICAgIHZhciBDID0gd3JhcHBlcihmdW5jdGlvbiAodGhhdCwgaXRlcmFibGUpIHtcbiAgICAgIGFuSW5zdGFuY2UodGhhdCwgQywgTkFNRSwgJ19pJyk7XG4gICAgICB0aGF0Ll90ID0gTkFNRTsgICAgICAvLyBjb2xsZWN0aW9uIHR5cGVcbiAgICAgIHRoYXQuX2kgPSBpZCsrOyAgICAgIC8vIGNvbGxlY3Rpb24gaWRcbiAgICAgIHRoYXQuX2wgPSB1bmRlZmluZWQ7IC8vIGxlYWsgc3RvcmUgZm9yIHVuY2F1Z2h0IGZyb3plbiBvYmplY3RzXG4gICAgICBpZiAoaXRlcmFibGUgIT0gdW5kZWZpbmVkKSBmb3JPZihpdGVyYWJsZSwgSVNfTUFQLCB0aGF0W0FEREVSXSwgdGhhdCk7XG4gICAgfSk7XG4gICAgcmVkZWZpbmVBbGwoQy5wcm90b3R5cGUsIHtcbiAgICAgIC8vIDIzLjMuMy4yIFdlYWtNYXAucHJvdG90eXBlLmRlbGV0ZShrZXkpXG4gICAgICAvLyAyMy40LjMuMyBXZWFrU2V0LnByb3RvdHlwZS5kZWxldGUodmFsdWUpXG4gICAgICAnZGVsZXRlJzogZnVuY3Rpb24gKGtleSkge1xuICAgICAgICBpZiAoIWlzT2JqZWN0KGtleSkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgdmFyIGRhdGEgPSBnZXRXZWFrKGtleSk7XG4gICAgICAgIGlmIChkYXRhID09PSB0cnVlKSByZXR1cm4gdW5jYXVnaHRGcm96ZW5TdG9yZSh2YWxpZGF0ZSh0aGlzLCBOQU1FKSlbJ2RlbGV0ZSddKGtleSk7XG4gICAgICAgIHJldHVybiBkYXRhICYmICRoYXMoZGF0YSwgdGhpcy5faSkgJiYgZGVsZXRlIGRhdGFbdGhpcy5faV07XG4gICAgICB9LFxuICAgICAgLy8gMjMuMy4zLjQgV2Vha01hcC5wcm90b3R5cGUuaGFzKGtleSlcbiAgICAgIC8vIDIzLjQuMy40IFdlYWtTZXQucHJvdG90eXBlLmhhcyh2YWx1ZSlcbiAgICAgIGhhczogZnVuY3Rpb24gaGFzKGtleSkge1xuICAgICAgICBpZiAoIWlzT2JqZWN0KGtleSkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgdmFyIGRhdGEgPSBnZXRXZWFrKGtleSk7XG4gICAgICAgIGlmIChkYXRhID09PSB0cnVlKSByZXR1cm4gdW5jYXVnaHRGcm96ZW5TdG9yZSh2YWxpZGF0ZSh0aGlzLCBOQU1FKSkuaGFzKGtleSk7XG4gICAgICAgIHJldHVybiBkYXRhICYmICRoYXMoZGF0YSwgdGhpcy5faSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIEM7XG4gIH0sXG4gIGRlZjogZnVuY3Rpb24gKHRoYXQsIGtleSwgdmFsdWUpIHtcbiAgICB2YXIgZGF0YSA9IGdldFdlYWsoYW5PYmplY3Qoa2V5KSwgdHJ1ZSk7XG4gICAgaWYgKGRhdGEgPT09IHRydWUpIHVuY2F1Z2h0RnJvemVuU3RvcmUodGhhdCkuc2V0KGtleSwgdmFsdWUpO1xuICAgIGVsc2UgZGF0YVt0aGF0Ll9pXSA9IHZhbHVlO1xuICAgIHJldHVybiB0aGF0O1xuICB9LFxuICB1ZnN0b3JlOiB1bmNhdWdodEZyb3plblN0b3JlXG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///121\n")},function(module,exports,__webpack_require__){eval("// https://tc39.github.io/ecma262/#sec-toindex\nvar toInteger = __webpack_require__(21);\nvar toLength = __webpack_require__(6);\nmodule.exports = function (it) {\n if (it === undefined) return 0;\n var number = toInteger(it);\n var length = toLength(number);\n if (number !== length) throw RangeError('Wrong length!');\n return length;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8taW5kZXguanM/MDlmYSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGdCQUFnQixtQkFBTyxDQUFDLEVBQWU7QUFDdkMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMTIyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtdG9pbmRleFxudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGl0ID09PSB1bmRlZmluZWQpIHJldHVybiAwO1xuICB2YXIgbnVtYmVyID0gdG9JbnRlZ2VyKGl0KTtcbiAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKG51bWJlcik7XG4gIGlmIChudW1iZXIgIT09IGxlbmd0aCkgdGhyb3cgUmFuZ2VFcnJvcignV3JvbmcgbGVuZ3RoIScpO1xuICByZXR1cm4gbGVuZ3RoO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///122\n")},function(module,exports,__webpack_require__){eval("// all object keys, includes non-enumerable and symbols\nvar gOPN = __webpack_require__(37);\nvar gOPS = __webpack_require__(53);\nvar anObject = __webpack_require__(1);\nvar Reflect = __webpack_require__(2).Reflect;\nmodule.exports = Reflect && Reflect.ownKeys || function ownKeys(it) {\n var keys = gOPN.f(anObject(it));\n var getSymbols = gOPS.f;\n return getSymbols ? keys.concat(getSymbols(it)) : keys;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb3duLWtleXMuanM/OTkwYiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLFdBQVcsbUJBQU8sQ0FBQyxFQUFnQjtBQUNuQyxXQUFXLG1CQUFPLENBQUMsRUFBZ0I7QUFDbkMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIxMjMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBhbGwgb2JqZWN0IGtleXMsIGluY2x1ZGVzIG5vbi1lbnVtZXJhYmxlIGFuZCBzeW1ib2xzXG52YXIgZ09QTiA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJyk7XG52YXIgZ09QUyA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BzJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBSZWZsZWN0ID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuUmVmbGVjdDtcbm1vZHVsZS5leHBvcnRzID0gUmVmbGVjdCAmJiBSZWZsZWN0Lm93bktleXMgfHwgZnVuY3Rpb24gb3duS2V5cyhpdCkge1xuICB2YXIga2V5cyA9IGdPUE4uZihhbk9iamVjdChpdCkpO1xuICB2YXIgZ2V0U3ltYm9scyA9IGdPUFMuZjtcbiAgcmV0dXJuIGdldFN5bWJvbHMgPyBrZXlzLmNvbmNhdChnZXRTeW1ib2xzKGl0KSkgOiBrZXlzO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///123\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// https://tc39.github.io/proposal-flatMap/#sec-FlattenIntoArray\nvar isArray = __webpack_require__(54);\nvar isObject = __webpack_require__(4);\nvar toLength = __webpack_require__(6);\nvar ctx = __webpack_require__(19);\nvar IS_CONCAT_SPREADABLE = __webpack_require__(5)('isConcatSpreadable');\n\nfunction flattenIntoArray(target, original, source, sourceLen, start, depth, mapper, thisArg) {\n var targetIndex = start;\n var sourceIndex = 0;\n var mapFn = mapper ? ctx(mapper, thisArg, 3) : false;\n var element, spreadable;\n\n while (sourceIndex < sourceLen) {\n if (sourceIndex in source) {\n element = mapFn ? mapFn(source[sourceIndex], sourceIndex, original) : source[sourceIndex];\n\n spreadable = false;\n if (isObject(element)) {\n spreadable = element[IS_CONCAT_SPREADABLE];\n spreadable = spreadable !== undefined ? !!spreadable : isArray(element);\n }\n\n if (spreadable && depth > 0) {\n targetIndex = flattenIntoArray(target, original, element, toLength(element.length), targetIndex, depth - 1) - 1;\n } else {\n if (targetIndex >= 0x1fffffffffffff) throw TypeError();\n target[targetIndex] = element;\n }\n\n targetIndex++;\n }\n sourceIndex++;\n }\n return targetIndex;\n}\n\nmodule.exports = flattenIntoArray;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZmxhdHRlbi1pbnRvLWFycmF5LmpzP2M0NWYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxFQUFhO0FBQ25DLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLFVBQVUsbUJBQU8sQ0FBQyxFQUFRO0FBQzFCLDJCQUEyQixtQkFBTyxDQUFDLENBQVE7O0FBRTNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6IjEyNC5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtZmxhdE1hcC8jc2VjLUZsYXR0ZW5JbnRvQXJyYXlcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi9faXMtYXJyYXknKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgSVNfQ09OQ0FUX1NQUkVBREFCTEUgPSByZXF1aXJlKCcuL193a3MnKSgnaXNDb25jYXRTcHJlYWRhYmxlJyk7XG5cbmZ1bmN0aW9uIGZsYXR0ZW5JbnRvQXJyYXkodGFyZ2V0LCBvcmlnaW5hbCwgc291cmNlLCBzb3VyY2VMZW4sIHN0YXJ0LCBkZXB0aCwgbWFwcGVyLCB0aGlzQXJnKSB7XG4gIHZhciB0YXJnZXRJbmRleCA9IHN0YXJ0O1xuICB2YXIgc291cmNlSW5kZXggPSAwO1xuICB2YXIgbWFwRm4gPSBtYXBwZXIgPyBjdHgobWFwcGVyLCB0aGlzQXJnLCAzKSA6IGZhbHNlO1xuICB2YXIgZWxlbWVudCwgc3ByZWFkYWJsZTtcblxuICB3aGlsZSAoc291cmNlSW5kZXggPCBzb3VyY2VMZW4pIHtcbiAgICBpZiAoc291cmNlSW5kZXggaW4gc291cmNlKSB7XG4gICAgICBlbGVtZW50ID0gbWFwRm4gPyBtYXBGbihzb3VyY2Vbc291cmNlSW5kZXhdLCBzb3VyY2VJbmRleCwgb3JpZ2luYWwpIDogc291cmNlW3NvdXJjZUluZGV4XTtcblxuICAgICAgc3ByZWFkYWJsZSA9IGZhbHNlO1xuICAgICAgaWYgKGlzT2JqZWN0KGVsZW1lbnQpKSB7XG4gICAgICAgIHNwcmVhZGFibGUgPSBlbGVtZW50W0lTX0NPTkNBVF9TUFJFQURBQkxFXTtcbiAgICAgICAgc3ByZWFkYWJsZSA9IHNwcmVhZGFibGUgIT09IHVuZGVmaW5lZCA/ICEhc3ByZWFkYWJsZSA6IGlzQXJyYXkoZWxlbWVudCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChzcHJlYWRhYmxlICYmIGRlcHRoID4gMCkge1xuICAgICAgICB0YXJnZXRJbmRleCA9IGZsYXR0ZW5JbnRvQXJyYXkodGFyZ2V0LCBvcmlnaW5hbCwgZWxlbWVudCwgdG9MZW5ndGgoZWxlbWVudC5sZW5ndGgpLCB0YXJnZXRJbmRleCwgZGVwdGggLSAxKSAtIDE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodGFyZ2V0SW5kZXggPj0gMHgxZmZmZmZmZmZmZmZmZikgdGhyb3cgVHlwZUVycm9yKCk7XG4gICAgICAgIHRhcmdldFt0YXJnZXRJbmRleF0gPSBlbGVtZW50O1xuICAgICAgfVxuXG4gICAgICB0YXJnZXRJbmRleCsrO1xuICAgIH1cbiAgICBzb3VyY2VJbmRleCsrO1xuICB9XG4gIHJldHVybiB0YXJnZXRJbmRleDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmbGF0dGVuSW50b0FycmF5O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///124\n")},function(module,exports,__webpack_require__){eval("// https://github.com/tc39/proposal-string-pad-start-end\nvar toLength = __webpack_require__(6);\nvar repeat = __webpack_require__(74);\nvar defined = __webpack_require__(24);\n\nmodule.exports = function (that, maxLength, fillString, left) {\n var S = String(defined(that));\n var stringLength = S.length;\n var fillStr = fillString === undefined ? ' ' : String(fillString);\n var intMaxLength = toLength(maxLength);\n if (intMaxLength <= stringLength || fillStr == '') return S;\n var fillLen = intMaxLength - stringLength;\n var stringFiller = repeat.call(fillStr, Math.ceil(fillLen / fillStr.length));\n if (stringFiller.length > fillLen) stringFiller = stringFiller.slice(0, fillLen);\n return left ? stringFiller + S : S + stringFiller;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLXBhZC5qcz8yZTA4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsYUFBYSxtQkFBTyxDQUFDLEVBQWtCO0FBQ3ZDLGNBQWMsbUJBQU8sQ0FBQyxFQUFZOztBQUVsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjEyNS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXN0cmluZy1wYWQtc3RhcnQtZW5kXG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciByZXBlYXQgPSByZXF1aXJlKCcuL19zdHJpbmctcmVwZWF0Jyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGhhdCwgbWF4TGVuZ3RoLCBmaWxsU3RyaW5nLCBsZWZ0KSB7XG4gIHZhciBTID0gU3RyaW5nKGRlZmluZWQodGhhdCkpO1xuICB2YXIgc3RyaW5nTGVuZ3RoID0gUy5sZW5ndGg7XG4gIHZhciBmaWxsU3RyID0gZmlsbFN0cmluZyA9PT0gdW5kZWZpbmVkID8gJyAnIDogU3RyaW5nKGZpbGxTdHJpbmcpO1xuICB2YXIgaW50TWF4TGVuZ3RoID0gdG9MZW5ndGgobWF4TGVuZ3RoKTtcbiAgaWYgKGludE1heExlbmd0aCA8PSBzdHJpbmdMZW5ndGggfHwgZmlsbFN0ciA9PSAnJykgcmV0dXJuIFM7XG4gIHZhciBmaWxsTGVuID0gaW50TWF4TGVuZ3RoIC0gc3RyaW5nTGVuZ3RoO1xuICB2YXIgc3RyaW5nRmlsbGVyID0gcmVwZWF0LmNhbGwoZmlsbFN0ciwgTWF0aC5jZWlsKGZpbGxMZW4gLyBmaWxsU3RyLmxlbmd0aCkpO1xuICBpZiAoc3RyaW5nRmlsbGVyLmxlbmd0aCA+IGZpbGxMZW4pIHN0cmluZ0ZpbGxlciA9IHN0cmluZ0ZpbGxlci5zbGljZSgwLCBmaWxsTGVuKTtcbiAgcmV0dXJuIGxlZnQgPyBzdHJpbmdGaWxsZXIgKyBTIDogUyArIHN0cmluZ0ZpbGxlcjtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///125\n")},function(module,exports,__webpack_require__){eval("var DESCRIPTORS = __webpack_require__(7);\nvar getKeys = __webpack_require__(34);\nvar toIObject = __webpack_require__(15);\nvar isEnum = __webpack_require__(49).f;\nmodule.exports = function (isEntries) {\n return function (it) {\n var O = toIObject(it);\n var keys = getKeys(O);\n var length = keys.length;\n var i = 0;\n var result = [];\n var key;\n while (length > i) {\n key = keys[i++];\n if (!DESCRIPTORS || isEnum.call(O, key)) {\n result.push(isEntries ? [key, O[key]] : O[key]);\n }\n }\n return result;\n };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LXRvLWFycmF5LmpzPzUwNGMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsa0JBQWtCLG1CQUFPLENBQUMsQ0FBZ0I7QUFDMUMsY0FBYyxtQkFBTyxDQUFDLEVBQWdCO0FBQ3RDLGdCQUFnQixtQkFBTyxDQUFDLEVBQWU7QUFDdkMsYUFBYSxtQkFBTyxDQUFDLEVBQWU7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIxMjYuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpO1xudmFyIGdldEtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciBpc0VudW0gPSByZXF1aXJlKCcuL19vYmplY3QtcGllJykuZjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGlzRW50cmllcykge1xuICByZXR1cm4gZnVuY3Rpb24gKGl0KSB7XG4gICAgdmFyIE8gPSB0b0lPYmplY3QoaXQpO1xuICAgIHZhciBrZXlzID0gZ2V0S2V5cyhPKTtcbiAgICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICB2YXIga2V5O1xuICAgIHdoaWxlIChsZW5ndGggPiBpKSB7XG4gICAgICBrZXkgPSBrZXlzW2krK107XG4gICAgICBpZiAoIURFU0NSSVBUT1JTIHx8IGlzRW51bS5jYWxsKE8sIGtleSkpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goaXNFbnRyaWVzID8gW2tleSwgT1trZXldXSA6IE9ba2V5XSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///126\n")},function(module,exports,__webpack_require__){eval('// https://github.com/DavidBruant/Map-Set.prototype.toJSON\nvar classof = __webpack_require__(44);\nvar from = __webpack_require__(128);\nmodule.exports = function (NAME) {\n return function toJSON() {\n if (classof(this) != NAME) throw TypeError(NAME + "#toJSON isn\'t generic");\n return from(this);\n };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY29sbGVjdGlvbi10by1qc29uLmpzPzQ0YjgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsRUFBWTtBQUNsQyxXQUFXLG1CQUFPLENBQUMsR0FBd0I7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjEyNy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9EYXZpZEJydWFudC9NYXAtU2V0LnByb3RvdHlwZS50b0pTT05cbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi9fY2xhc3NvZicpO1xudmFyIGZyb20gPSByZXF1aXJlKCcuL19hcnJheS1mcm9tLWl0ZXJhYmxlJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChOQU1FKSB7XG4gIHJldHVybiBmdW5jdGlvbiB0b0pTT04oKSB7XG4gICAgaWYgKGNsYXNzb2YodGhpcykgIT0gTkFNRSkgdGhyb3cgVHlwZUVycm9yKE5BTUUgKyBcIiN0b0pTT04gaXNuJ3QgZ2VuZXJpY1wiKTtcbiAgICByZXR1cm4gZnJvbSh0aGlzKTtcbiAgfTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///127\n')},function(module,exports,__webpack_require__){eval("var forOf = __webpack_require__(40);\n\nmodule.exports = function (iter, ITERATOR) {\n var result = [];\n forOf(iter, false, result.push, result, ITERATOR);\n return result;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktZnJvbS1pdGVyYWJsZS5qcz80Mzc5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVksbUJBQU8sQ0FBQyxFQUFXOztBQUUvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjEyOC5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBmb3JPZiA9IHJlcXVpcmUoJy4vX2Zvci1vZicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVyLCBJVEVSQVRPUikge1xuICB2YXIgcmVzdWx0ID0gW107XG4gIGZvck9mKGl0ZXIsIGZhbHNlLCByZXN1bHQucHVzaCwgcmVzdWx0LCBJVEVSQVRPUik7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///128\n")},function(module,exports){eval("// https://rwaldron.github.io/proposal-math-extensions/\nmodule.exports = Math.scale || function scale(x, inLow, inHigh, outLow, outHigh) {\n if (\n arguments.length === 0\n // eslint-disable-next-line no-self-compare\n || x != x\n // eslint-disable-next-line no-self-compare\n || inLow != inLow\n // eslint-disable-next-line no-self-compare\n || inHigh != inHigh\n // eslint-disable-next-line no-self-compare\n || outLow != outLow\n // eslint-disable-next-line no-self-compare\n || outHigh != outHigh\n ) return NaN;\n if (x === Infinity || x === -Infinity) return x;\n return (x - inLow) * (outHigh - outLow) / (inHigh - inLow) + outLow;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWF0aC1zY2FsZS5qcz9lOWQyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIxMjkuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBodHRwczovL3J3YWxkcm9uLmdpdGh1Yi5pby9wcm9wb3NhbC1tYXRoLWV4dGVuc2lvbnMvXG5tb2R1bGUuZXhwb3J0cyA9IE1hdGguc2NhbGUgfHwgZnVuY3Rpb24gc2NhbGUoeCwgaW5Mb3csIGluSGlnaCwgb3V0TG93LCBvdXRIaWdoKSB7XG4gIGlmIChcbiAgICBhcmd1bWVudHMubGVuZ3RoID09PSAwXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICB8fCB4ICE9IHhcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICAgIHx8IGluTG93ICE9IGluTG93XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICB8fCBpbkhpZ2ggIT0gaW5IaWdoXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICB8fCBvdXRMb3cgIT0gb3V0TG93XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICB8fCBvdXRIaWdoICE9IG91dEhpZ2hcbiAgKSByZXR1cm4gTmFOO1xuICBpZiAoeCA9PT0gSW5maW5pdHkgfHwgeCA9PT0gLUluZmluaXR5KSByZXR1cm4geDtcbiAgcmV0dXJuICh4IC0gaW5Mb3cpICogKG91dEhpZ2ggLSBvdXRMb3cpIC8gKGluSGlnaCAtIGluTG93KSArIG91dExvdztcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///129\n")},function(e,n,t){t(131),e.exports=t(333)},function(module,exports,__webpack_require__){"use strict";eval('/* WEBPACK VAR INJECTION */(function(global) {\n\n__webpack_require__(132);\n\n__webpack_require__(329);\n\n__webpack_require__(330);\n\nif (global._babelPolyfill) {\n throw new Error("only one instance of babel-polyfill is allowed");\n}\nglobal._babelPolyfill = true;\n\nvar DEFINE_PROPERTY = "defineProperty";\nfunction define(O, key, value) {\n O[key] || Object[DEFINE_PROPERTY](O, key, {\n writable: true,\n configurable: true,\n value: value\n });\n}\n\ndefine(String.prototype, "padLeft", "".padStart);\ndefine(String.prototype, "padRight", "".padEnd);\n\n"pop,reverse,shift,keys,values,entries,indexOf,every,some,forEach,map,filter,find,findIndex,includes,join,slice,concat,push,splice,unshift,sort,lastIndexOf,reduce,reduceRight,copyWithin,fill".split(",").forEach(function (key) {\n [][key] && define(Array, key, Function.call.bind([][key]));\n});\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(93)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL2xpYi9pbmRleC5qcz9kYjRkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDhDQUFhOztBQUViLG1CQUFPLENBQUMsR0FBYzs7QUFFdEIsbUJBQU8sQ0FBQyxHQUE2Qjs7QUFFckMsbUJBQU8sQ0FBQyxHQUEwQjs7QUFFbEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLENBQUMsRSIsImZpbGUiOiIxMzEuanMiLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxucmVxdWlyZShcImNvcmUtanMvc2hpbVwiKTtcblxucmVxdWlyZShcInJlZ2VuZXJhdG9yLXJ1bnRpbWUvcnVudGltZVwiKTtcblxucmVxdWlyZShcImNvcmUtanMvZm4vcmVnZXhwL2VzY2FwZVwiKTtcblxuaWYgKGdsb2JhbC5fYmFiZWxQb2x5ZmlsbCkge1xuICB0aHJvdyBuZXcgRXJyb3IoXCJvbmx5IG9uZSBpbnN0YW5jZSBvZiBiYWJlbC1wb2x5ZmlsbCBpcyBhbGxvd2VkXCIpO1xufVxuZ2xvYmFsLl9iYWJlbFBvbHlmaWxsID0gdHJ1ZTtcblxudmFyIERFRklORV9QUk9QRVJUWSA9IFwiZGVmaW5lUHJvcGVydHlcIjtcbmZ1bmN0aW9uIGRlZmluZShPLCBrZXksIHZhbHVlKSB7XG4gIE9ba2V5XSB8fCBPYmplY3RbREVGSU5FX1BST1BFUlRZXShPLCBrZXksIHtcbiAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgdmFsdWU6IHZhbHVlXG4gIH0pO1xufVxuXG5kZWZpbmUoU3RyaW5nLnByb3RvdHlwZSwgXCJwYWRMZWZ0XCIsIFwiXCIucGFkU3RhcnQpO1xuZGVmaW5lKFN0cmluZy5wcm90b3R5cGUsIFwicGFkUmlnaHRcIiwgXCJcIi5wYWRFbmQpO1xuXG5cInBvcCxyZXZlcnNlLHNoaWZ0LGtleXMsdmFsdWVzLGVudHJpZXMsaW5kZXhPZixldmVyeSxzb21lLGZvckVhY2gsbWFwLGZpbHRlcixmaW5kLGZpbmRJbmRleCxpbmNsdWRlcyxqb2luLHNsaWNlLGNvbmNhdCxwdXNoLHNwbGljZSx1bnNoaWZ0LHNvcnQsbGFzdEluZGV4T2YscmVkdWNlLHJlZHVjZVJpZ2h0LGNvcHlXaXRoaW4sZmlsbFwiLnNwbGl0KFwiLFwiKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgW11ba2V5XSAmJiBkZWZpbmUoQXJyYXksIGtleSwgRnVuY3Rpb24uY2FsbC5iaW5kKFtdW2tleV0pKTtcbn0pOyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///131\n')},function(module,exports,__webpack_require__){eval("__webpack_require__(133);\n__webpack_require__(136);\n__webpack_require__(137);\n__webpack_require__(138);\n__webpack_require__(139);\n__webpack_require__(140);\n__webpack_require__(141);\n__webpack_require__(142);\n__webpack_require__(143);\n__webpack_require__(144);\n__webpack_require__(145);\n__webpack_require__(146);\n__webpack_require__(147);\n__webpack_require__(148);\n__webpack_require__(149);\n__webpack_require__(150);\n__webpack_require__(151);\n__webpack_require__(152);\n__webpack_require__(153);\n__webpack_require__(154);\n__webpack_require__(155);\n__webpack_require__(156);\n__webpack_require__(157);\n__webpack_require__(158);\n__webpack_require__(159);\n__webpack_require__(160);\n__webpack_require__(161);\n__webpack_require__(162);\n__webpack_require__(163);\n__webpack_require__(164);\n__webpack_require__(165);\n__webpack_require__(166);\n__webpack_require__(167);\n__webpack_require__(168);\n__webpack_require__(169);\n__webpack_require__(170);\n__webpack_require__(171);\n__webpack_require__(172);\n__webpack_require__(173);\n__webpack_require__(174);\n__webpack_require__(175);\n__webpack_require__(176);\n__webpack_require__(177);\n__webpack_require__(178);\n__webpack_require__(179);\n__webpack_require__(180);\n__webpack_require__(181);\n__webpack_require__(182);\n__webpack_require__(183);\n__webpack_require__(184);\n__webpack_require__(185);\n__webpack_require__(186);\n__webpack_require__(187);\n__webpack_require__(188);\n__webpack_require__(189);\n__webpack_require__(190);\n__webpack_require__(191);\n__webpack_require__(192);\n__webpack_require__(193);\n__webpack_require__(194);\n__webpack_require__(195);\n__webpack_require__(196);\n__webpack_require__(197);\n__webpack_require__(198);\n__webpack_require__(199);\n__webpack_require__(200);\n__webpack_require__(201);\n__webpack_require__(202);\n__webpack_require__(203);\n__webpack_require__(204);\n__webpack_require__(205);\n__webpack_require__(206);\n__webpack_require__(207);\n__webpack_require__(208);\n__webpack_require__(209);\n__webpack_require__(210);\n__webpack_require__(211);\n__webpack_require__(213);\n__webpack_require__(214);\n__webpack_require__(216);\n__webpack_require__(217);\n__webpack_require__(218);\n__webpack_require__(219);\n__webpack_require__(220);\n__webpack_require__(221);\n__webpack_require__(222);\n__webpack_require__(224);\n__webpack_require__(225);\n__webpack_require__(226);\n__webpack_require__(227);\n__webpack_require__(228);\n__webpack_require__(229);\n__webpack_require__(230);\n__webpack_require__(231);\n__webpack_require__(232);\n__webpack_require__(233);\n__webpack_require__(234);\n__webpack_require__(235);\n__webpack_require__(236);\n__webpack_require__(86);\n__webpack_require__(237);\n__webpack_require__(113);\n__webpack_require__(238);\n__webpack_require__(114);\n__webpack_require__(239);\n__webpack_require__(240);\n__webpack_require__(241);\n__webpack_require__(242);\n__webpack_require__(243);\n__webpack_require__(117);\n__webpack_require__(119);\n__webpack_require__(120);\n__webpack_require__(244);\n__webpack_require__(245);\n__webpack_require__(246);\n__webpack_require__(247);\n__webpack_require__(248);\n__webpack_require__(249);\n__webpack_require__(250);\n__webpack_require__(251);\n__webpack_require__(252);\n__webpack_require__(253);\n__webpack_require__(254);\n__webpack_require__(255);\n__webpack_require__(256);\n__webpack_require__(257);\n__webpack_require__(258);\n__webpack_require__(259);\n__webpack_require__(260);\n__webpack_require__(261);\n__webpack_require__(262);\n__webpack_require__(263);\n__webpack_require__(264);\n__webpack_require__(265);\n__webpack_require__(266);\n__webpack_require__(267);\n__webpack_require__(268);\n__webpack_require__(269);\n__webpack_require__(270);\n__webpack_require__(271);\n__webpack_require__(272);\n__webpack_require__(273);\n__webpack_require__(274);\n__webpack_require__(275);\n__webpack_require__(276);\n__webpack_require__(277);\n__webpack_require__(278);\n__webpack_require__(279);\n__webpack_require__(280);\n__webpack_require__(281);\n__webpack_require__(282);\n__webpack_require__(283);\n__webpack_require__(284);\n__webpack_require__(285);\n__webpack_require__(286);\n__webpack_require__(287);\n__webpack_require__(288);\n__webpack_require__(289);\n__webpack_require__(290);\n__webpack_require__(291);\n__webpack_require__(292);\n__webpack_require__(293);\n__webpack_require__(294);\n__webpack_require__(295);\n__webpack_require__(296);\n__webpack_require__(297);\n__webpack_require__(298);\n__webpack_require__(299);\n__webpack_require__(300);\n__webpack_require__(301);\n__webpack_require__(302);\n__webpack_require__(303);\n__webpack_require__(304);\n__webpack_require__(305);\n__webpack_require__(306);\n__webpack_require__(307);\n__webpack_require__(308);\n__webpack_require__(309);\n__webpack_require__(310);\n__webpack_require__(311);\n__webpack_require__(312);\n__webpack_require__(313);\n__webpack_require__(314);\n__webpack_require__(315);\n__webpack_require__(316);\n__webpack_require__(317);\n__webpack_require__(318);\n__webpack_require__(319);\n__webpack_require__(320);\n__webpack_require__(321);\n__webpack_require__(322);\n__webpack_require__(323);\n__webpack_require__(324);\n__webpack_require__(325);\n__webpack_require__(326);\n__webpack_require__(327);\n__webpack_require__(328);\nmodule.exports = __webpack_require__(18);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvc2hpbS5qcz82NmY5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLG1CQUFPLENBQUMsR0FBc0I7QUFDOUIsbUJBQU8sQ0FBQyxHQUE2QjtBQUNyQyxtQkFBTyxDQUFDLEdBQXNDO0FBQzlDLG1CQUFPLENBQUMsR0FBd0M7QUFDaEQsbUJBQU8sQ0FBQyxHQUFrRDtBQUMxRCxtQkFBTyxDQUFDLEdBQXVDO0FBQy9DLG1CQUFPLENBQUMsR0FBMkI7QUFDbkMsbUJBQU8sQ0FBQyxHQUE2QztBQUNyRCxtQkFBTyxDQUFDLEdBQTZCO0FBQ3JDLG1CQUFPLENBQUMsR0FBMkI7QUFDbkMsbUJBQU8sQ0FBQyxHQUF5QztBQUNqRCxtQkFBTyxDQUFDLEdBQWdDO0FBQ3hDLG1CQUFPLENBQUMsR0FBZ0M7QUFDeEMsbUJBQU8sQ0FBQyxHQUFvQztBQUM1QyxtQkFBTyxDQUFDLEdBQTZCO0FBQ3JDLG1CQUFPLENBQUMsR0FBeUI7QUFDakMsbUJBQU8sQ0FBQyxHQUF1QztBQUMvQyxtQkFBTyxDQUFDLEdBQWdDO0FBQ3hDLG1CQUFPLENBQUMsR0FBNkI7QUFDckMsbUJBQU8sQ0FBQyxHQUE2QjtBQUNyQyxtQkFBTyxDQUFDLEdBQXFDO0FBQzdDLG1CQUFPLENBQUMsR0FBeUI7QUFDakMsbUJBQU8sQ0FBQyxHQUEyQjtBQUNuQyxtQkFBTyxDQUFDLEdBQWtDO0FBQzFDLG1CQUFPLENBQUMsR0FBK0I7QUFDdkMsbUJBQU8sQ0FBQyxHQUFtQztBQUMzQyxtQkFBTyxDQUFDLEdBQThCO0FBQ3RDLG1CQUFPLENBQUMsR0FBZ0M7QUFDeEMsbUJBQU8sQ0FBQyxHQUFpQztBQUN6QyxtQkFBTyxDQUFDLEdBQTZCO0FBQ3JDLG1CQUFPLENBQUMsR0FBc0M7QUFDOUMsbUJBQU8sQ0FBQyxHQUF1QztBQUMvQyxtQkFBTyxDQUFDLEdBQXVDO0FBQy9DLG1CQUFPLENBQUMsR0FBa0M7QUFDMUMsbUJBQU8sQ0FBQyxH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QkFBTyxDQUFDLEdBQWdDO0FBQ3hDLG1CQUFPLENBQUMsR0FBb0I7QUFDNUIsbUJBQU8sQ0FBQyxHQUEwQjtBQUNsQyxtQkFBTyxDQUFDLEdBQXNCO0FBQzlCLG1CQUFPLENBQUMsR0FBeUI7QUFDakMsbUJBQU8sQ0FBQyxHQUE0QjtBQUNwQyxpQkFBaUIsbUJBQU8sQ0FBQyxFQUFpQiIsImZpbGUiOiIxMzIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJyZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN5bWJvbCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuY3JlYXRlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5kZWZpbmUtcHJvcGVydHknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmRlZmluZS1wcm9wZXJ0aWVzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmdldC1wcm90b3R5cGUtb2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmtleXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmdldC1vd24tcHJvcGVydHktbmFtZXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmZyZWV6ZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3Quc2VhbCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QucHJldmVudC1leHRlbnNpb25zJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5pcy1mcm96ZW4nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmlzLXNlYWxlZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuaXMtZXh0ZW5zaWJsZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuYXNzaWduJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5pcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3Quc2V0LXByb3RvdHlwZS1vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QudG8tc3RyaW5nJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmZ1bmN0aW9uLmJpbmQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuZnVuY3Rpb24ubmFtZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5mdW5jdGlvbi5oYXMtaW5zdGFuY2UnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucGFyc2UtaW50Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnBhcnNlLWZsb2F0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5jb25zdHJ1Y3RvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIudG8tZml4ZWQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLnRvLXByZWNpc2lvbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIuZXBzaWxvbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIuaXMtZmluaXRlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5pcy1pbnRlZ2VyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5pcy1uYW4nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLmlzLXNhZmUtaW50ZWdlcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIubWF4LXNhZmUtaW50ZWdlcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIubWluLXNhZmUtaW50ZWdlcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIucGFyc2UtZmxvYXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLnBhcnNlLWludCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmFjb3NoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguYXNpbmgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5hdGFuaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmNicnQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5jbHozMicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmNvc2gnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5leHBtMScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmZyb3VuZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmh5cG90Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguaW11bCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmxvZzEwJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGgubG9nMXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5sb2cyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguc2lnbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLnNpbmgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC50YW5oJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGgudHJ1bmMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLmZyb20tY29kZS1wb2ludCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcucmF3Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy50cmltJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuY29kZS1wb2ludC1hdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuZW5kcy13aXRoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5pbmNsdWRlcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcucmVwZWF0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5zdGFydHMtd2l0aCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuYW5jaG9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5iaWcnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLmJsaW5rJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5ib2xkJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5maXhlZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuZm9udGNvbG9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5mb250c2l6ZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuaXRhbGljcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcubGluaycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuc21hbGwnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLnN0cmlrZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuc3ViJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5zdXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuZGF0ZS5ub3cnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuZGF0ZS50by1qc29uJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmRhdGUudG8taXNvLXN0cmluZycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5kYXRlLnRvLXN0cmluZycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5kYXRlLnRvLXByaW1pdGl2ZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5pcy1hcnJheScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5mcm9tJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5Lm9mJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmpvaW4nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuc2xpY2UnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuc29ydCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5mb3ItZWFjaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5tYXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuZmlsdGVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LnNvbWUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuZXZlcnknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkucmVkdWNlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LnJlZHVjZS1yaWdodCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5pbmRleC1vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5sYXN0LWluZGV4LW9mJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmNvcHktd2l0aGluJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmZpbGwnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuZmluZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5maW5kLWluZGV4Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LnNwZWNpZXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVnZXhwLmNvbnN0cnVjdG9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZ2V4cC5leGVjJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZ2V4cC50by1zdHJpbmcnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVnZXhwLmZsYWdzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZ2V4cC5tYXRjaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWdleHAucmVwbGFjZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWdleHAuc2VhcmNoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZ2V4cC5zcGxpdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5wcm9taXNlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hcCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zZXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYud2Vhay1tYXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYud2Vhay1zZXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQuYXJyYXktYnVmZmVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLmRhdGEtdmlldycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi50eXBlZC5pbnQ4LWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLnVpbnQ4LWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLnVpbnQ4LWNsYW1wZWQtYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQuaW50MTYtYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQudWludDE2LWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLmludDMyLWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLnVpbnQzMi1hcnJheScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi50eXBlZC5mbG9hdDMyLWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLmZsb2F0NjQtYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5hcHBseScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmNvbnN0cnVjdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmRlZmluZS1wcm9wZXJ0eScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmRlbGV0ZS1wcm9wZXJ0eScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmVudW1lcmF0ZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmdldCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmdldC1wcm90b3R5cGUtb2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5oYXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5pcy1leHRlbnNpYmxlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3Qub3duLWtleXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5wcmV2ZW50LWV4dGVuc2lvbnMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5zZXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5zZXQtcHJvdG90eXBlLW9mJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LmFycmF5LmluY2x1ZGVzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LmFycmF5LmZsYXQtbWFwJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LmFycmF5LmZsYXR0ZW4nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc3RyaW5nLmF0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnN0cmluZy5wYWQtc3RhcnQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc3RyaW5nLnBhZC1lbmQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc3RyaW5nLnRyaW0tbGVmdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zdHJpbmcudHJpbS1yaWdodCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zdHJpbmcubWF0Y2gtYWxsJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnN5bWJvbC5hc3luYy1pdGVyYXRvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zeW1ib2wub2JzZXJ2YWJsZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9ycycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5vYmplY3QudmFsdWVzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC5lbnRyaWVzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC5kZWZpbmUtZ2V0dGVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC5kZWZpbmUtc2V0dGVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC5sb29rdXAtZ2V0dGVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC5sb29rdXAtc2V0dGVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hcC50by1qc29uJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnNldC50by1qc29uJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hcC5vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zZXQub2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcud2Vhay1tYXAub2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcud2Vhay1zZXQub2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWFwLmZyb20nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc2V0LmZyb20nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcud2Vhay1tYXAuZnJvbScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy53ZWFrLXNldC5mcm9tJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lmdsb2JhbCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zeXN0ZW0uZ2xvYmFsJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LmVycm9yLmlzLWVycm9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGguY2xhbXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5kZWctcGVyLXJhZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLmRlZ3JlZXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5mc2NhbGUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5pYWRkaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLmlzdWJoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGguaW11bGgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5yYWQtcGVyLWRlZycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLnJhZGlhbnMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5zY2FsZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLnVtdWxoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGguc2lnbmJpdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5wcm9taXNlLmZpbmFsbHknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucHJvbWlzZS50cnknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5kZWZpbmUtbWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5kZWxldGUtbWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtbWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtbWV0YWRhdGEta2V5cycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5yZWZsZWN0LmdldC1vd24tbWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtb3duLW1ldGFkYXRhLWtleXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5oYXMtbWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5oYXMtb3duLW1ldGFkYXRhJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnJlZmxlY3QubWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuYXNhcCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5vYnNlcnZhYmxlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvd2ViLnRpbWVycycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL3dlYi5pbW1lZGlhdGUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy93ZWIuZG9tLml0ZXJhYmxlJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vbW9kdWxlcy9fY29yZScpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///132\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// ECMAScript 6 symbols shim\nvar global = __webpack_require__(2);\nvar has = __webpack_require__(14);\nvar DESCRIPTORS = __webpack_require__(7);\nvar $export = __webpack_require__(0);\nvar redefine = __webpack_require__(12);\nvar META = __webpack_require__(30).KEY;\nvar $fails = __webpack_require__(3);\nvar shared = __webpack_require__(47);\nvar setToStringTag = __webpack_require__(43);\nvar uid = __webpack_require__(33);\nvar wks = __webpack_require__(5);\nvar wksExt = __webpack_require__(95);\nvar wksDefine = __webpack_require__(67);\nvar enumKeys = __webpack_require__(135);\nvar isArray = __webpack_require__(54);\nvar anObject = __webpack_require__(1);\nvar isObject = __webpack_require__(4);\nvar toObject = __webpack_require__(9);\nvar toIObject = __webpack_require__(15);\nvar toPrimitive = __webpack_require__(23);\nvar createDesc = __webpack_require__(32);\nvar _create = __webpack_require__(36);\nvar gOPNExt = __webpack_require__(98);\nvar $GOPD = __webpack_require__(16);\nvar $GOPS = __webpack_require__(53);\nvar $DP = __webpack_require__(8);\nvar $keys = __webpack_require__(34);\nvar gOPD = $GOPD.f;\nvar dP = $DP.f;\nvar gOPN = gOPNExt.f;\nvar $Symbol = global.Symbol;\nvar $JSON = global.JSON;\nvar _stringify = $JSON && $JSON.stringify;\nvar PROTOTYPE = 'prototype';\nvar HIDDEN = wks('_hidden');\nvar TO_PRIMITIVE = wks('toPrimitive');\nvar isEnum = {}.propertyIsEnumerable;\nvar SymbolRegistry = shared('symbol-registry');\nvar AllSymbols = shared('symbols');\nvar OPSymbols = shared('op-symbols');\nvar ObjectProto = Object[PROTOTYPE];\nvar USE_NATIVE = typeof $Symbol == 'function' && !!$GOPS.f;\nvar QObject = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDesc = DESCRIPTORS && $fails(function () {\n return _create(dP({}, 'a', {\n get: function () { return dP(this, 'a', { value: 7 }).a; }\n })).a != 7;\n}) ? function (it, key, D) {\n var protoDesc = gOPD(ObjectProto, key);\n if (protoDesc) delete ObjectProto[key];\n dP(it, key, D);\n if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc);\n} : dP;\n\nvar wrap = function (tag) {\n var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);\n sym._k = tag;\n return sym;\n};\n\nvar isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n return it instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(it, key, D) {\n if (it === ObjectProto) $defineProperty(OPSymbols, key, D);\n anObject(it);\n key = toPrimitive(key, true);\n anObject(D);\n if (has(AllSymbols, key)) {\n if (!D.enumerable) {\n if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {}));\n it[HIDDEN][key] = true;\n } else {\n if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;\n D = _create(D, { enumerable: createDesc(0, false) });\n } return setSymbolDesc(it, key, D);\n } return dP(it, key, D);\n};\nvar $defineProperties = function defineProperties(it, P) {\n anObject(it);\n var keys = enumKeys(P = toIObject(P));\n var i = 0;\n var l = keys.length;\n var key;\n while (l > i) $defineProperty(it, key = keys[i++], P[key]);\n return it;\n};\nvar $create = function create(it, P) {\n return P === undefined ? _create(it) : $defineProperties(_create(it), P);\n};\nvar $propertyIsEnumerable = function propertyIsEnumerable(key) {\n var E = isEnum.call(this, key = toPrimitive(key, true));\n if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false;\n return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;\n};\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {\n it = toIObject(it);\n key = toPrimitive(key, true);\n if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return;\n var D = gOPD(it, key);\n if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;\n return D;\n};\nvar $getOwnPropertyNames = function getOwnPropertyNames(it) {\n var names = gOPN(toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);\n } return result;\n};\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(it) {\n var IS_OP = it === ObjectProto;\n var names = gOPN(IS_OP ? OPSymbols : toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]);\n } return result;\n};\n\n// 19.4.1.1 Symbol([description])\nif (!USE_NATIVE) {\n $Symbol = function Symbol() {\n if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');\n var tag = uid(arguments.length > 0 ? arguments[0] : undefined);\n var $set = function (value) {\n if (this === ObjectProto) $set.call(OPSymbols, value);\n if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n setSymbolDesc(this, tag, createDesc(1, value));\n };\n if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set });\n return wrap(tag);\n };\n redefine($Symbol[PROTOTYPE], 'toString', function toString() {\n return this._k;\n });\n\n $GOPD.f = $getOwnPropertyDescriptor;\n $DP.f = $defineProperty;\n __webpack_require__(37).f = gOPNExt.f = $getOwnPropertyNames;\n __webpack_require__(49).f = $propertyIsEnumerable;\n $GOPS.f = $getOwnPropertySymbols;\n\n if (DESCRIPTORS && !__webpack_require__(29)) {\n redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);\n }\n\n wksExt.f = function (name) {\n return wrap(wks(name));\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol });\n\nfor (var es6Symbols = (\n // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14\n 'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'\n).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]);\n\nfor (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]);\n\n$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {\n // 19.4.2.1 Symbol.for(key)\n 'for': function (key) {\n return has(SymbolRegistry, key += '')\n ? SymbolRegistry[key]\n : SymbolRegistry[key] = $Symbol(key);\n },\n // 19.4.2.5 Symbol.keyFor(sym)\n keyFor: function keyFor(sym) {\n if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');\n for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key;\n },\n useSetter: function () { setter = true; },\n useSimple: function () { setter = false; }\n});\n\n$export($export.S + $export.F * !USE_NATIVE, 'Object', {\n // 19.1.2.2 Object.create(O [, Properties])\n create: $create,\n // 19.1.2.4 Object.defineProperty(O, P, Attributes)\n defineProperty: $defineProperty,\n // 19.1.2.3 Object.defineProperties(O, Properties)\n defineProperties: $defineProperties,\n // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n // 19.1.2.7 Object.getOwnPropertyNames(O)\n getOwnPropertyNames: $getOwnPropertyNames,\n // 19.1.2.8 Object.getOwnPropertySymbols(O)\n getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// Chrome 38 and 39 `Object.getOwnPropertySymbols` fails on primitives\n// https://bugs.chromium.org/p/v8/issues/detail?id=3443\nvar FAILS_ON_PRIMITIVES = $fails(function () { $GOPS.f(1); });\n\n$export($export.S + $export.F * FAILS_ON_PRIMITIVES, 'Object', {\n getOwnPropertySymbols: function getOwnPropertySymbols(it) {\n return $GOPS.f(toObject(it));\n }\n});\n\n// 24.3.2 JSON.stringify(value [, replacer [, space]])\n$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () {\n var S = $Symbol();\n // MS Edge converts symbol values to JSON as {}\n // WebKit converts symbol values to JSON as null\n // V8 throws on boxed symbols\n return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}';\n})), 'JSON', {\n stringify: function stringify(it) {\n var args = [it];\n var i = 1;\n var replacer, $replacer;\n while (arguments.length > i) args.push(arguments[i++]);\n $replacer = replacer = args[1];\n if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n if (!isArray(replacer)) replacer = function (key, value) {\n if (typeof $replacer == 'function') value = $replacer.call(this, key, value);\n if (!isSymbol(value)) return value;\n };\n args[1] = replacer;\n return _stringify.apply($JSON, args);\n }\n});\n\n// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)\n$Symbol[PROTOTYPE][TO_PRIMITIVE] || __webpack_require__(11)($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n// 19.4.3.5 Symbol.prototype[@@toStringTag]\nsetToStringTag($Symbol, 'Symbol');\n// 20.2.1.9 Math[@@toStringTag]\nsetToStringTag(Math, 'Math', true);\n// 24.3.3 JSON[@@toStringTag]\nsetToStringTag(global.JSON, 'JSON', true);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3ltYm9sLmpzPzhhODEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBLGFBQWEsbUJBQU8sQ0FBQyxDQUFXO0FBQ2hDLFVBQVUsbUJBQU8sQ0FBQyxFQUFRO0FBQzFCLGtCQUFrQixtQkFBTyxDQUFDLENBQWdCO0FBQzFDLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyxFQUFhO0FBQ3BDLFdBQVcsbUJBQU8sQ0FBQyxFQUFTO0FBQzVCLGFBQWEsbUJBQU8sQ0FBQyxDQUFVO0FBQy9CLGFBQWEsbUJBQU8sQ0FBQyxFQUFXO0FBQ2hDLHFCQUFxQixtQkFBTyxDQUFDLEVBQXNCO0FBQ25ELFVBQVUsbUJBQU8sQ0FBQyxFQUFRO0FBQzFCLFVBQVUsbUJBQU8sQ0FBQyxDQUFRO0FBQzFCLGFBQWEsbUJBQU8sQ0FBQyxFQUFZO0FBQ2pDLGdCQUFnQixtQkFBTyxDQUFDLEVBQWU7QUFDdkMsZUFBZSxtQkFBTyxDQUFDLEdBQWM7QUFDckMsY0FBYyxtQkFBTyxDQUFDLEVBQWE7QUFDbkMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2QyxrQkFBa0IsbUJBQU8sQ0FBQyxFQUFpQjtBQUMzQyxpQkFBaUIsbUJBQU8sQ0FBQyxFQUFrQjtBQUMzQyxjQUFjLG1CQUFPLENBQUMsRUFBa0I7QUFDeEMsY0FBYyxtQkFBTyxDQUFDLEVBQW9CO0FBQzFDLFlBQVksbUJBQU8sQ0FBQyxFQUFnQjtBQUNwQyxZQUFZLG1CQUFPLENBQUMsRUFBZ0I7QUFDcEMsVUFBVSxtQkFBTyxDQUFDLENBQWM7QUFDaEMsWUFBWSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxzQkFBc0I7QUFDdEIsc0JBQXNCLHVCQUF1QixXQUFXLElBQUk7QUFDNUQsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyREFBMkQ7QUFDM0Q7QUFDQSxLQUFLO0FBQ0w7QUFDQSxzQkFBc0IsbUNBQW1DO0FBQ3pELEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdFQUFnRSxnQ0FBZ0M7QUFDaEc7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxFQUFFLG1CQUFPLENBQUMsRUFBZ0I7QUFDMUIsRUFBRSxtQkFBTyxDQUFDLEVBQWU7QUFDekI7O0FBRUEsc0JBQXNCLG1CQUFPLENBQUMsRUFBWTtBQUMxQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDBEQUEwRCxrQkFBa0I7O0FBRTVFO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQix1QkFBdUI7O0FBRTNDLG9EQUFvRCw2QkFBNkI7O0FBRWpGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCwwQkFBMEIsZUFBZSxFQUFFO0FBQzNDLDBCQUEwQixnQkFBZ0I7QUFDMUMsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBLDhDQUE4QyxZQUFZLEVBQUU7O0FBRTVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvREFBb0QsT0FBTyxRQUFRLGlDQUFpQztBQUNwRyxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0VBQXdFO0FBQ3hFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBLG9DQUFvQyxtQkFBTyxDQUFDLEVBQVM7QUFDckQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjEzMy5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIEVDTUFTY3JpcHQgNiBzeW1ib2xzIHNoaW1cbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUnKTtcbnZhciBNRVRBID0gcmVxdWlyZSgnLi9fbWV0YScpLktFWTtcbnZhciAkZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4vX3NoYXJlZCcpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuL191aWQnKTtcbnZhciB3a3MgPSByZXF1aXJlKCcuL193a3MnKTtcbnZhciB3a3NFeHQgPSByZXF1aXJlKCcuL193a3MtZXh0Jyk7XG52YXIgd2tzRGVmaW5lID0gcmVxdWlyZSgnLi9fd2tzLWRlZmluZScpO1xudmFyIGVudW1LZXlzID0gcmVxdWlyZSgnLi9fZW51bS1rZXlzJyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4vX2lzLWFycmF5Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG52YXIgY3JlYXRlRGVzYyA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKTtcbnZhciBfY3JlYXRlID0gcmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpO1xudmFyIGdPUE5FeHQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wbi1leHQnKTtcbnZhciAkR09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJyk7XG52YXIgJEdPUFMgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wcycpO1xudmFyICREUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xudmFyICRrZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcbnZhciBnT1BEID0gJEdPUEQuZjtcbnZhciBkUCA9ICREUC5mO1xudmFyIGdPUE4gPSBnT1BORXh0LmY7XG52YXIgJFN5bWJvbCA9IGdsb2JhbC5TeW1ib2w7XG52YXIgJEpTT04gPSBnbG9iYWwuSlNPTjtcbnZhciBfc3RyaW5naWZ5ID0gJEpTT04gJiYgJEpTT04uc3RyaW5naWZ5O1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xudmFyIEhJRERFTiA9IHdrcygnX2hpZGRlbicpO1xudmFyIFRPX1BSSU1JVElWRSA9IHdrcygndG9QcmltaXRpdmUnKTtcbnZhciBpc0VudW0gPSB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbnZhciBTeW1ib2xSZWdpc3RyeSA9IHNoYXJlZCgnc3ltYm9sLXJlZ2lzdHJ5Jyk7XG52YXIgQWxsU3ltYm9scyA9IHNoYXJlZCgnc3ltYm9scycpO1xudmFyIE9QU3ltYm9scyA9IHNoYXJlZCgnb3Atc3ltYm9scycpO1xudmFyIE9iamVjdFByb3RvID0gT2JqZWN0W1BST1RPVFlQRV07XG52YXIgVVNFX05BVElWRSA9IHR5cGVvZiAkU3ltYm9sID09ICdmdW5jdGlvbicgJiYgISEkR09QUy5mO1xudmFyIFFPYmplY3QgPSBnbG9iYWwuUU9iamVjdDtcbi8vIERvbid0IHVzZSBzZXR0ZXJzIGluIFF0IFNjcmlwdCwgaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzE3M1xudmFyIHNldHRlciA9ICFRT2JqZWN0IHx8ICFRT2JqZWN0W1BST1RPVFlQRV0gfHwgIVFPYmplY3RbUFJPVE9UWVBFXS5maW5kQ2hpbGQ7XG5cbi8vIGZhbGxiYWNrIGZvciBvbGQgQW5kcm9pZCwgaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTY4N1xudmFyIHNldFN5bWJvbERlc2MgPSBERVNDUklQVE9SUyAmJiAkZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gX2NyZWF0ZShkUCh7fSwgJ2EnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBkUCh0aGlzLCAnYScsIHsgdmFsdWU6IDcgfSkuYTsgfVxuICB9KSkuYSAhPSA3O1xufSkgPyBmdW5jdGlvbiAoaXQsIGtleSwgRCkge1xuICB2YXIgcHJvdG9EZXNjID0gZ09QRChPYmplY3RQcm90bywga2V5KTtcbiAgaWYgKHByb3RvRGVzYykgZGVsZXRlIE9iamVjdFByb3RvW2tleV07XG4gIGRQKGl0LCBrZXksIEQpO1xuICBpZiAocHJvdG9EZXNjICYmIGl0ICE9PSBPYmplY3RQcm90bykgZFAoT2JqZWN0UHJvdG8sIGtleSwgcHJvdG9EZXNjKTtcbn0gOiBkUDtcblxudmFyIHdyYXAgPSBmdW5jdGlvbiAodGFnKSB7XG4gIHZhciBzeW0gPSBBbGxTeW1ib2xzW3RhZ10gPSBfY3JlYXRlKCRTeW1ib2xbUFJPVE9UWVBFXSk7XG4gIHN5bS5fayA9IHRhZztcbiAgcmV0dXJuIHN5bTtcbn07XG5cbnZhciBpc1N5bWJvbCA9IFVTRV9OQVRJVkUgJiYgdHlwZW9mICRTeW1ib2wuaXRlcmF0b3IgPT0gJ3N5bWJvbCcgPyBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnc3ltYm9sJztcbn0gOiBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0IGluc3RhbmNlb2YgJFN5bWJvbDtcbn07XG5cbnZhciAkZGVmaW5lUHJvcGVydHkgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShpdCwga2V5LCBEKSB7XG4gIGlmIChpdCA9PT0gT2JqZWN0UHJvdG8pICRkZWZpbmVQcm9wZXJ0eShPUFN5bWJvbHMsIGtleSwgRCk7XG4gIGFuT2JqZWN0KGl0KTtcbiAga2V5ID0gdG9QcmltaXRpdmUoa2V5LCB0cnVlKTtcbiAgYW5PYmplY3QoRCk7XG4gIGlmIChoYXMoQWxsU3ltYm9scywga2V5KSkge1xuICAgIGlmICghRC5lbnVtZXJhYmxlKSB7XG4gICAgICBpZiAoIWhhcyhpdCwgSElEREVOKSkgZFAoaXQsIEhJRERFTiwgY3JlYXRlRGVzYygxLCB7fSkpO1xuICAgICAgaXRbSElEREVOXVtrZXldID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGhhcyhpdCwgSElEREVOKSAmJiBpdFtISURERU5dW2tleV0pIGl0W0hJRERFTl1ba2V5XSA9IGZhbHNlO1xuICAgICAgRCA9IF9jcmVhdGUoRCwgeyBlbnVtZXJhYmxlOiBjcmVhdGVEZXNjKDAsIGZhbHNlKSB9KTtcbiAgICB9IHJldHVybiBzZXRTeW1ib2xEZXNjKGl0LCBrZXksIEQpO1xuICB9IHJldHVybiBkUChpdCwga2V5LCBEKTtcbn07XG52YXIgJGRlZmluZVByb3BlcnRpZXMgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKGl0LCBQKSB7XG4gIGFuT2JqZWN0KGl0KTtcbiAgdmFyIGtleXMgPSBlbnVtS2V5cyhQID0gdG9JT2JqZWN0KFApKTtcbiAgdmFyIGkgPSAwO1xuICB2YXIgbCA9IGtleXMubGVuZ3RoO1xuICB2YXIga2V5O1xuICB3aGlsZSAobCA+IGkpICRkZWZpbmVQcm9wZXJ0eShpdCwga2V5ID0ga2V5c1tpKytdLCBQW2tleV0pO1xuICByZXR1cm4gaXQ7XG59O1xudmFyICRjcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUoaXQsIFApIHtcbiAgcmV0dXJuIFAgPT09IHVuZGVmaW5lZCA/IF9jcmVhdGUoaXQpIDogJGRlZmluZVByb3BlcnRpZXMoX2NyZWF0ZShpdCksIFApO1xufTtcbnZhciAkcHJvcGVydHlJc0VudW1lcmFibGUgPSBmdW5jdGlvbiBwcm9wZXJ0eUlzRW51bWVyYWJsZShrZXkpIHtcbiAgdmFyIEUgPSBpc0VudW0uY2FsbCh0aGlzLCBrZXkgPSB0b1ByaW1pdGl2ZShrZXksIHRydWUpKTtcbiAgaWYgKHRoaXMgPT09IE9iamVjdFByb3RvICYmIGhhcyhBbGxTeW1ib2xzLCBrZXkpICYmICFoYXMoT1BTeW1ib2xzLCBrZXkpKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiBFIHx8ICFoYXModGhpcywga2V5KSB8fCAhaGFzKEFsbFN5bWJvbHMsIGtleSkgfHwgaGFzKHRoaXMsIEhJRERFTikgJiYgdGhpc1tISURERU5dW2tleV0gPyBFIDogdHJ1ZTtcbn07XG52YXIgJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihpdCwga2V5KSB7XG4gIGl0ID0gdG9JT2JqZWN0KGl0KTtcbiAga2V5ID0gdG9QcmltaXRpdmUoa2V5LCB0cnVlKTtcbiAgaWYgKGl0ID09PSBPYmplY3RQcm90byAmJiBoYXMoQWxsU3ltYm9scywga2V5KSAmJiAhaGFzKE9QU3ltYm9scywga2V5KSkgcmV0dXJuO1xuICB2YXIgRCA9IGdPUEQoaXQsIGtleSk7XG4gIGlmIChEICYmIGhhcyhBbGxTeW1ib2xzLCBrZXkpICYmICEoaGFzKGl0LCBISURERU4pICYmIGl0W0hJRERFTl1ba2V5XSkpIEQuZW51bWVyYWJsZSA9IHRydWU7XG4gIHJldHVybiBEO1xufTtcbnZhciAkZ2V0T3duUHJvcGVydHlOYW1lcyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoaXQpIHtcbiAgdmFyIG5hbWVzID0gZ09QTih0b0lPYmplY3QoaXQpKTtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIgaSA9IDA7XG4gIHZhciBrZXk7XG4gIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSB7XG4gICAgaWYgKCFoYXMoQWxsU3ltYm9scywga2V5ID0gbmFtZXNbaSsrXSkgJiYga2V5ICE9IEhJRERFTiAmJiBrZXkgIT0gTUVUQSkgcmVzdWx0LnB1c2goa2V5KTtcbiAgfSByZXR1cm4gcmVzdWx0O1xufTtcbnZhciAkZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlTeW1ib2xzKGl0KSB7XG4gIHZhciBJU19PUCA9IGl0ID09PSBPYmplY3RQcm90bztcbiAgdmFyIG5hbWVzID0gZ09QTihJU19PUCA/IE9QU3ltYm9scyA6IHRvSU9iamVjdChpdCkpO1xuICB2YXIgcmVzdWx0ID0gW107XG4gIHZhciBpID0gMDtcbiAgdmFyIGtleTtcbiAgd2hpbGUgKG5hbWVzLmxlbmd0aCA+IGkpIHtcbiAgICBpZiAoaGFzKEFsbFN5bWJvbHMsIGtleSA9IG5hbWVzW2krK10pICYmIChJU19PUCA/IGhhcyhPYmplY3RQcm90bywga2V5KSA6IHRydWUpKSByZXN1bHQucHVzaChBbGxTeW1ib2xzW2tleV0pO1xuICB9IHJldHVybiByZXN1bHQ7XG59O1xuXG4vLyAxOS40LjEuMSBTeW1ib2woW2Rlc2NyaXB0aW9uXSlcbmlmICghVVNFX05BVElWRSkge1xuICAkU3ltYm9sID0gZnVuY3Rpb24gU3ltYm9sKCkge1xuICAgIGlmICh0aGlzIGluc3RhbmNlb2YgJFN5bWJvbCkgdGhyb3cgVHlwZUVycm9yKCdTeW1ib2wgaXMgbm90IGEgY29uc3RydWN0b3IhJyk7XG4gICAgdmFyIHRhZyA9IHVpZChhcmd1bWVudHMubGVuZ3RoID4gMCA/IGFyZ3VtZW50c1swXSA6IHVuZGVmaW5lZCk7XG4gICAgdmFyICRzZXQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIGlmICh0aGlzID09PSBPYmplY3RQcm90bykgJHNldC5jYWxsKE9QU3ltYm9scywgdmFsdWUpO1xuICAgICAgaWYgKGhhcyh0aGlzLCBISURERU4pICYmIGhhcyh0aGlzW0hJRERFTl0sIHRhZykpIHRoaXNbSElEREVOXVt0YWddID0gZmFsc2U7XG4gICAgICBzZXRTeW1ib2xEZXNjKHRoaXMsIHRhZywgY3JlYXRlRGVzYygxLCB2YWx1ZSkpO1xuICAgIH07XG4gICAgaWYgKERFU0NSSVBUT1JTICYmIHNldHRlcikgc2V0U3ltYm9sRGVzYyhPYmplY3RQcm90bywgdGFnLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgc2V0OiAkc2V0IH0pO1xuICAgIHJldHVybiB3cmFwKHRhZyk7XG4gIH07XG4gIHJlZGVmaW5lKCRTeW1ib2xbUFJPVE9UWVBFXSwgJ3RvU3RyaW5nJywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2s7XG4gIH0pO1xuXG4gICRHT1BELmYgPSAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuICAkRFAuZiA9ICRkZWZpbmVQcm9wZXJ0eTtcbiAgcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4nKS5mID0gZ09QTkV4dC5mID0gJGdldE93blByb3BlcnR5TmFtZXM7XG4gIHJlcXVpcmUoJy4vX29iamVjdC1waWUnKS5mID0gJHByb3BlcnR5SXNFbnVtZXJhYmxlO1xuICAkR09QUy5mID0gJGdldE93blByb3BlcnR5U3ltYm9scztcblxuICBpZiAoREVTQ1JJUFRPUlMgJiYgIXJlcXVpcmUoJy4vX2xpYnJhcnknKSkge1xuICAgIHJlZGVmaW5lKE9iamVjdFByb3RvLCAncHJvcGVydHlJc0VudW1lcmFibGUnLCAkcHJvcGVydHlJc0VudW1lcmFibGUsIHRydWUpO1xuICB9XG5cbiAgd2tzRXh0LmYgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHJldHVybiB3cmFwKHdrcyhuYW1lKSk7XG4gIH07XG59XG5cbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5XICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsIHsgU3ltYm9sOiAkU3ltYm9sIH0pO1xuXG5mb3IgKHZhciBlczZTeW1ib2xzID0gKFxuICAvLyAxOS40LjIuMiwgMTkuNC4yLjMsIDE5LjQuMi40LCAxOS40LjIuNiwgMTkuNC4yLjgsIDE5LjQuMi45LCAxOS40LjIuMTAsIDE5LjQuMi4xMSwgMTkuNC4yLjEyLCAxOS40LjIuMTMsIDE5LjQuMi4xNFxuICAnaGFzSW5zdGFuY2UsaXNDb25jYXRTcHJlYWRhYmxlLGl0ZXJhdG9yLG1hdGNoLHJlcGxhY2Usc2VhcmNoLHNwZWNpZXMsc3BsaXQsdG9QcmltaXRpdmUsdG9TdHJpbmdUYWcsdW5zY29wYWJsZXMnXG4pLnNwbGl0KCcsJyksIGogPSAwOyBlczZTeW1ib2xzLmxlbmd0aCA+IGo7KXdrcyhlczZTeW1ib2xzW2orK10pO1xuXG5mb3IgKHZhciB3ZWxsS25vd25TeW1ib2xzID0gJGtleXMod2tzLnN0b3JlKSwgayA9IDA7IHdlbGxLbm93blN5bWJvbHMubGVuZ3RoID4gazspIHdrc0RlZmluZSh3ZWxsS25vd25TeW1ib2xzW2srK10pO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFVU0VfTkFUSVZFLCAnU3ltYm9sJywge1xuICAvLyAxOS40LjIuMSBTeW1ib2wuZm9yKGtleSlcbiAgJ2Zvcic6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICByZXR1cm4gaGFzKFN5bWJvbFJlZ2lzdHJ5LCBrZXkgKz0gJycpXG4gICAgICA/IFN5bWJvbFJlZ2lzdHJ5W2tleV1cbiAgICAgIDogU3ltYm9sUmVnaXN0cnlba2V5XSA9ICRTeW1ib2woa2V5KTtcbiAgfSxcbiAgLy8gMTkuNC4yLjUgU3ltYm9sLmtleUZvcihzeW0pXG4gIGtleUZvcjogZnVuY3Rpb24ga2V5Rm9yKHN5bSkge1xuICAgIGlmICghaXNTeW1ib2woc3ltKSkgdGhyb3cgVHlwZUVycm9yKHN5bSArICcgaXMgbm90IGEgc3ltYm9sIScpO1xuICAgIGZvciAodmFyIGtleSBpbiBTeW1ib2xSZWdpc3RyeSkgaWYgKFN5bWJvbFJlZ2lzdHJ5W2tleV0gPT09IHN5bSkgcmV0dXJuIGtleTtcbiAgfSxcbiAgdXNlU2V0dGVyOiBmdW5jdGlvbiAoKSB7IHNldHRlciA9IHRydWU7IH0sXG4gIHVzZVNpbXBsZTogZnVuY3Rpb24gKCkgeyBzZXR0ZXIgPSBmYWxzZTsgfVxufSk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsICdPYmplY3QnLCB7XG4gIC8vIDE5LjEuMi4yIE9iamVjdC5jcmVhdGUoTyBbLCBQcm9wZXJ0aWVzXSlcbiAgY3JlYXRlOiAkY3JlYXRlLFxuICAvLyAxOS4xLjIuNCBPYmplY3QuZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcylcbiAgZGVmaW5lUHJvcGVydHk6ICRkZWZpbmVQcm9wZXJ0eSxcbiAgLy8gMTkuMS4yLjMgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTywgUHJvcGVydGllcylcbiAgZGVmaW5lUHJvcGVydGllczogJGRlZmluZVByb3BlcnRpZXMsXG4gIC8vIDE5LjEuMi42IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUClcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLFxuICAvLyAxOS4xLjIuNyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhPKVxuICBnZXRPd25Qcm9wZXJ0eU5hbWVzOiAkZ2V0T3duUHJvcGVydHlOYW1lcyxcbiAgLy8gMTkuMS4yLjggT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhPKVxuICBnZXRPd25Qcm9wZXJ0eVN5bWJvbHM6ICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHNcbn0pO1xuXG4vLyBDaHJvbWUgMzggYW5kIDM5IGBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzYCBmYWlscyBvbiBwcmltaXRpdmVzXG4vLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zNDQzXG52YXIgRkFJTFNfT05fUFJJTUlUSVZFUyA9ICRmYWlscyhmdW5jdGlvbiAoKSB7ICRHT1BTLmYoMSk7IH0pO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIEZBSUxTX09OX1BSSU1JVElWRVMsICdPYmplY3QnLCB7XG4gIGdldE93blByb3BlcnR5U3ltYm9sczogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlTeW1ib2xzKGl0KSB7XG4gICAgcmV0dXJuICRHT1BTLmYodG9PYmplY3QoaXQpKTtcbiAgfVxufSk7XG5cbi8vIDI0LjMuMiBKU09OLnN0cmluZ2lmeSh2YWx1ZSBbLCByZXBsYWNlciBbLCBzcGFjZV1dKVxuJEpTT04gJiYgJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAoIVVTRV9OQVRJVkUgfHwgJGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIFMgPSAkU3ltYm9sKCk7XG4gIC8vIE1TIEVkZ2UgY29udmVydHMgc3ltYm9sIHZhbHVlcyB0byBKU09OIGFzIHt9XG4gIC8vIFdlYktpdCBjb252ZXJ0cyBzeW1ib2wgdmFsdWVzIHRvIEpTT04gYXMgbnVsbFxuICAvLyBWOCB0aHJvd3Mgb24gYm94ZWQgc3ltYm9sc1xuICByZXR1cm4gX3N0cmluZ2lmeShbU10pICE9ICdbbnVsbF0nIHx8IF9zdHJpbmdpZnkoeyBhOiBTIH0pICE9ICd7fScgfHwgX3N0cmluZ2lmeShPYmplY3QoUykpICE9ICd7fSc7XG59KSksICdKU09OJywge1xuICBzdHJpbmdpZnk6IGZ1bmN0aW9uIHN0cmluZ2lmeShpdCkge1xuICAgIHZhciBhcmdzID0gW2l0XTtcbiAgICB2YXIgaSA9IDE7XG4gICAgdmFyIHJlcGxhY2VyLCAkcmVwbGFjZXI7XG4gICAgd2hpbGUgKGFyZ3VtZW50cy5sZW5ndGggPiBpKSBhcmdzLnB1c2goYXJndW1lbnRzW2krK10pO1xuICAgICRyZXBsYWNlciA9IHJlcGxhY2VyID0gYXJnc1sxXTtcbiAgICBpZiAoIWlzT2JqZWN0KHJlcGxhY2VyKSAmJiBpdCA9PT0gdW5kZWZpbmVkIHx8IGlzU3ltYm9sKGl0KSkgcmV0dXJuOyAvLyBJRTggcmV0dXJucyBzdHJpbmcgb24gdW5kZWZpbmVkXG4gICAgaWYgKCFpc0FycmF5KHJlcGxhY2VyKSkgcmVwbGFjZXIgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgICAgaWYgKHR5cGVvZiAkcmVwbGFjZXIgPT0gJ2Z1bmN0aW9uJykgdmFsdWUgPSAkcmVwbGFjZXIuY2FsbCh0aGlzLCBrZXksIHZhbHVlKTtcbiAgICAgIGlmICghaXNTeW1ib2wodmFsdWUpKSByZXR1cm4gdmFsdWU7XG4gICAgfTtcbiAgICBhcmdzWzFdID0gcmVwbGFjZXI7XG4gICAgcmV0dXJuIF9zdHJpbmdpZnkuYXBwbHkoJEpTT04sIGFyZ3MpO1xuICB9XG59KTtcblxuLy8gMTkuNC4zLjQgU3ltYm9sLnByb3RvdHlwZVtAQHRvUHJpbWl0aXZlXShoaW50KVxuJFN5bWJvbFtQUk9UT1RZUEVdW1RPX1BSSU1JVElWRV0gfHwgcmVxdWlyZSgnLi9faGlkZScpKCRTeW1ib2xbUFJPVE9UWVBFXSwgVE9fUFJJTUlUSVZFLCAkU3ltYm9sW1BST1RPVFlQRV0udmFsdWVPZik7XG4vLyAxOS40LjMuNSBTeW1ib2wucHJvdG90eXBlW0BAdG9TdHJpbmdUYWddXG5zZXRUb1N0cmluZ1RhZygkU3ltYm9sLCAnU3ltYm9sJyk7XG4vLyAyMC4yLjEuOSBNYXRoW0BAdG9TdHJpbmdUYWddXG5zZXRUb1N0cmluZ1RhZyhNYXRoLCAnTWF0aCcsIHRydWUpO1xuLy8gMjQuMy4zIEpTT05bQEB0b1N0cmluZ1RhZ11cbnNldFRvU3RyaW5nVGFnKGdsb2JhbC5KU09OLCAnSlNPTicsIHRydWUpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///133\n")},function(module,exports,__webpack_require__){eval("module.exports = __webpack_require__(47)('native-function-to-string', Function.toString);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZnVuY3Rpb24tdG8tc3RyaW5nLmpzP2ZhNWIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsaUJBQWlCLG1CQUFPLENBQUMsRUFBVyIsImZpbGUiOiIxMzQuanMiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX3NoYXJlZCcpKCduYXRpdmUtZnVuY3Rpb24tdG8tc3RyaW5nJywgRnVuY3Rpb24udG9TdHJpbmcpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///134\n")},function(module,exports,__webpack_require__){eval("// all enumerable object keys, includes symbols\nvar getKeys = __webpack_require__(34);\nvar gOPS = __webpack_require__(53);\nvar pIE = __webpack_require__(49);\nmodule.exports = function (it) {\n var result = getKeys(it);\n var getSymbols = gOPS.f;\n if (getSymbols) {\n var symbols = getSymbols(it);\n var isEnum = pIE.f;\n var i = 0;\n var key;\n while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);\n } return result;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZW51bS1rZXlzLmpzP2Q0YzAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsRUFBZ0I7QUFDdEMsV0FBVyxtQkFBTyxDQUFDLEVBQWdCO0FBQ25DLFVBQVUsbUJBQU8sQ0FBQyxFQUFlO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCIsImZpbGUiOiIxMzUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBhbGwgZW51bWVyYWJsZSBvYmplY3Qga2V5cywgaW5jbHVkZXMgc3ltYm9sc1xudmFyIGdldEtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xudmFyIGdPUFMgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wcycpO1xudmFyIHBJRSA9IHJlcXVpcmUoJy4vX29iamVjdC1waWUnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciByZXN1bHQgPSBnZXRLZXlzKGl0KTtcbiAgdmFyIGdldFN5bWJvbHMgPSBnT1BTLmY7XG4gIGlmIChnZXRTeW1ib2xzKSB7XG4gICAgdmFyIHN5bWJvbHMgPSBnZXRTeW1ib2xzKGl0KTtcbiAgICB2YXIgaXNFbnVtID0gcElFLmY7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBrZXk7XG4gICAgd2hpbGUgKHN5bWJvbHMubGVuZ3RoID4gaSkgaWYgKGlzRW51bS5jYWxsKGl0LCBrZXkgPSBzeW1ib2xzW2krK10pKSByZXN1bHQucHVzaChrZXkpO1xuICB9IHJldHVybiByZXN1bHQ7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///135\n")},function(module,exports,__webpack_require__){eval("var $export = __webpack_require__(0);\n// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\n$export($export.S, 'Object', { create: __webpack_require__(36) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmNyZWF0ZS5qcz84NDc4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDO0FBQ0EsOEJBQThCLFNBQVMsbUJBQU8sQ0FBQyxFQUFrQixHQUFHIiwiZmlsZSI6IjEzNi5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG4vLyAxOS4xLjIuMiAvIDE1LjIuMy41IE9iamVjdC5jcmVhdGUoTyBbLCBQcm9wZXJ0aWVzXSlcbiRleHBvcnQoJGV4cG9ydC5TLCAnT2JqZWN0JywgeyBjcmVhdGU6IHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKSB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///136\n")},function(module,exports,__webpack_require__){eval("var $export = __webpack_require__(0);\n// 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes)\n$export($export.S + $export.F * !__webpack_require__(7), 'Object', { defineProperty: __webpack_require__(8).f });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmRlZmluZS1wcm9wZXJ0eS5qcz8xYzAxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDO0FBQ0EsaUNBQWlDLG1CQUFPLENBQUMsQ0FBZ0IsY0FBYyxpQkFBaUIsbUJBQU8sQ0FBQyxDQUFjLEtBQUsiLCJmaWxlIjoiMTM3LmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbi8vIDE5LjEuMi40IC8gMTUuMi4zLjYgT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpLCAnT2JqZWN0JywgeyBkZWZpbmVQcm9wZXJ0eTogcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZiB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///137\n")},function(module,exports,__webpack_require__){eval("var $export = __webpack_require__(0);\n// 19.1.2.3 / 15.2.3.7 Object.defineProperties(O, Properties)\n$export($export.S + $export.F * !__webpack_require__(7), 'Object', { defineProperties: __webpack_require__(97) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmRlZmluZS1wcm9wZXJ0aWVzLmpzPzU4YjIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakM7QUFDQSxpQ0FBaUMsbUJBQU8sQ0FBQyxDQUFnQixjQUFjLG1CQUFtQixtQkFBTyxDQUFDLEVBQWUsR0FBRyIsImZpbGUiOiIxMzguanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuLy8gMTkuMS4yLjMgLyAxNS4yLjMuNyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhPLCBQcm9wZXJ0aWVzKVxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSwgJ09iamVjdCcsIHsgZGVmaW5lUHJvcGVydGllczogcmVxdWlyZSgnLi9fb2JqZWN0LWRwcycpIH0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///138\n")},function(module,exports,__webpack_require__){eval("// 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\nvar toIObject = __webpack_require__(15);\nvar $getOwnPropertyDescriptor = __webpack_require__(16).f;\n\n__webpack_require__(25)('getOwnPropertyDescriptor', function () {\n return function getOwnPropertyDescriptor(it, key) {\n return $getOwnPropertyDescriptor(toIObject(it), key);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvci5qcz85OTg2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2QyxnQ0FBZ0MsbUJBQU8sQ0FBQyxFQUFnQjs7QUFFeEQsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTM5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMTkuMS4yLjYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKVxudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKS5mO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2dldE93blByb3BlcnR5RGVzY3JpcHRvcicsIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihpdCwga2V5KSB7XG4gICAgcmV0dXJuICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodG9JT2JqZWN0KGl0KSwga2V5KTtcbiAgfTtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///139\n")},function(module,exports,__webpack_require__){eval("// 19.1.2.9 Object.getPrototypeOf(O)\nvar toObject = __webpack_require__(9);\nvar $getPrototypeOf = __webpack_require__(17);\n\n__webpack_require__(25)('getPrototypeOf', function () {\n return function getPrototypeOf(it) {\n return $getPrototypeOf(toObject(it));\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmdldC1wcm90b3R5cGUtb2YuanM/ZTRmNyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLHNCQUFzQixtQkFBTyxDQUFDLEVBQWU7O0FBRTdDLG1CQUFPLENBQUMsRUFBZTtBQUN2QjtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjE0MC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDE5LjEuMi45IE9iamVjdC5nZXRQcm90b3R5cGVPZihPKVxudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgJGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2dldFByb3RvdHlwZU9mJywgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gZnVuY3Rpb24gZ2V0UHJvdG90eXBlT2YoaXQpIHtcbiAgICByZXR1cm4gJGdldFByb3RvdHlwZU9mKHRvT2JqZWN0KGl0KSk7XG4gIH07XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///140\n")},function(module,exports,__webpack_require__){eval("// 19.1.2.14 Object.keys(O)\nvar toObject = __webpack_require__(9);\nvar $keys = __webpack_require__(34);\n\n__webpack_require__(25)('keys', function () {\n return function keys(it) {\n return $keys(toObject(it));\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmtleXMuanM/NDU2ZCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLFlBQVksbUJBQU8sQ0FBQyxFQUFnQjs7QUFFcEMsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTQxLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMTkuMS4yLjE0IE9iamVjdC5rZXlzKE8pXG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciAka2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgna2V5cycsIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGtleXMoaXQpIHtcbiAgICByZXR1cm4gJGtleXModG9PYmplY3QoaXQpKTtcbiAgfTtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///141\n")},function(module,exports,__webpack_require__){eval("// 19.1.2.7 Object.getOwnPropertyNames(O)\n__webpack_require__(25)('getOwnPropertyNames', function () {\n return __webpack_require__(98).f;\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmdldC1vd24tcHJvcGVydHktbmFtZXMuanM/MjVkYiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLG1CQUFPLENBQUMsRUFBZTtBQUN2QixTQUFTLG1CQUFPLENBQUMsRUFBb0I7QUFDckMsQ0FBQyIsImZpbGUiOiIxNDIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAxOS4xLjIuNyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhPKVxucmVxdWlyZSgnLi9fb2JqZWN0LXNhcCcpKCdnZXRPd25Qcm9wZXJ0eU5hbWVzJywgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4tZXh0JykuZjtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///142\n")},function(module,exports,__webpack_require__){eval("// 19.1.2.5 Object.freeze(O)\nvar isObject = __webpack_require__(4);\nvar meta = __webpack_require__(30).onFreeze;\n\n__webpack_require__(25)('freeze', function ($freeze) {\n return function freeze(it) {\n return $freeze && isObject(it) ? $freeze(meta(it)) : it;\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmZyZWV6ZS5qcz8wZDZkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsV0FBVyxtQkFBTyxDQUFDLEVBQVM7O0FBRTVCLG1CQUFPLENBQUMsRUFBZTtBQUN2QjtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjE0My5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDE5LjEuMi41IE9iamVjdC5mcmVlemUoTylcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIG1ldGEgPSByZXF1aXJlKCcuL19tZXRhJykub25GcmVlemU7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgnZnJlZXplJywgZnVuY3Rpb24gKCRmcmVlemUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGZyZWV6ZShpdCkge1xuICAgIHJldHVybiAkZnJlZXplICYmIGlzT2JqZWN0KGl0KSA/ICRmcmVlemUobWV0YShpdCkpIDogaXQ7XG4gIH07XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///143\n")},function(module,exports,__webpack_require__){eval("// 19.1.2.17 Object.seal(O)\nvar isObject = __webpack_require__(4);\nvar meta = __webpack_require__(30).onFreeze;\n\n__webpack_require__(25)('seal', function ($seal) {\n return function seal(it) {\n return $seal && isObject(it) ? $seal(meta(it)) : it;\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LnNlYWwuanM/Y2Y2YSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLFdBQVcsbUJBQU8sQ0FBQyxFQUFTOztBQUU1QixtQkFBTyxDQUFDLEVBQWU7QUFDdkI7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIxNDQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAxOS4xLjIuMTcgT2JqZWN0LnNlYWwoTylcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIG1ldGEgPSByZXF1aXJlKCcuL19tZXRhJykub25GcmVlemU7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgnc2VhbCcsIGZ1bmN0aW9uICgkc2VhbCkge1xuICByZXR1cm4gZnVuY3Rpb24gc2VhbChpdCkge1xuICAgIHJldHVybiAkc2VhbCAmJiBpc09iamVjdChpdCkgPyAkc2VhbChtZXRhKGl0KSkgOiBpdDtcbiAgfTtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///144\n")},function(module,exports,__webpack_require__){eval("// 19.1.2.15 Object.preventExtensions(O)\nvar isObject = __webpack_require__(4);\nvar meta = __webpack_require__(30).onFreeze;\n\n__webpack_require__(25)('preventExtensions', function ($preventExtensions) {\n return function preventExtensions(it) {\n return $preventExtensions && isObject(it) ? $preventExtensions(meta(it)) : it;\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LnByZXZlbnQtZXh0ZW5zaW9ucy5qcz85YWVhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsV0FBVyxtQkFBTyxDQUFDLEVBQVM7O0FBRTVCLG1CQUFPLENBQUMsRUFBZTtBQUN2QjtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjE0NS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDE5LjEuMi4xNSBPYmplY3QucHJldmVudEV4dGVuc2lvbnMoTylcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIG1ldGEgPSByZXF1aXJlKCcuL19tZXRhJykub25GcmVlemU7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgncHJldmVudEV4dGVuc2lvbnMnLCBmdW5jdGlvbiAoJHByZXZlbnRFeHRlbnNpb25zKSB7XG4gIHJldHVybiBmdW5jdGlvbiBwcmV2ZW50RXh0ZW5zaW9ucyhpdCkge1xuICAgIHJldHVybiAkcHJldmVudEV4dGVuc2lvbnMgJiYgaXNPYmplY3QoaXQpID8gJHByZXZlbnRFeHRlbnNpb25zKG1ldGEoaXQpKSA6IGl0O1xuICB9O1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///145\n")},function(module,exports,__webpack_require__){eval("// 19.1.2.12 Object.isFrozen(O)\nvar isObject = __webpack_require__(4);\n\n__webpack_require__(25)('isFrozen', function ($isFrozen) {\n return function isFrozen(it) {\n return isObject(it) ? $isFrozen ? $isFrozen(it) : false : true;\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmlzLWZyb3plbi5qcz82NmM4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsZUFBZSxtQkFBTyxDQUFDLENBQWM7O0FBRXJDLG1CQUFPLENBQUMsRUFBZTtBQUN2QjtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjE0Ni5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDE5LjEuMi4xMiBPYmplY3QuaXNGcm96ZW4oTylcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2lzRnJvemVuJywgZnVuY3Rpb24gKCRpc0Zyb3plbikge1xuICByZXR1cm4gZnVuY3Rpb24gaXNGcm96ZW4oaXQpIHtcbiAgICByZXR1cm4gaXNPYmplY3QoaXQpID8gJGlzRnJvemVuID8gJGlzRnJvemVuKGl0KSA6IGZhbHNlIDogdHJ1ZTtcbiAgfTtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///146\n")},function(module,exports,__webpack_require__){eval("// 19.1.2.13 Object.isSealed(O)\nvar isObject = __webpack_require__(4);\n\n__webpack_require__(25)('isSealed', function ($isSealed) {\n return function isSealed(it) {\n return isObject(it) ? $isSealed ? $isSealed(it) : false : true;\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmlzLXNlYWxlZC5qcz81N2YwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsZUFBZSxtQkFBTyxDQUFDLENBQWM7O0FBRXJDLG1CQUFPLENBQUMsRUFBZTtBQUN2QjtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjE0Ny5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDE5LjEuMi4xMyBPYmplY3QuaXNTZWFsZWQoTylcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2lzU2VhbGVkJywgZnVuY3Rpb24gKCRpc1NlYWxlZCkge1xuICByZXR1cm4gZnVuY3Rpb24gaXNTZWFsZWQoaXQpIHtcbiAgICByZXR1cm4gaXNPYmplY3QoaXQpID8gJGlzU2VhbGVkID8gJGlzU2VhbGVkKGl0KSA6IGZhbHNlIDogdHJ1ZTtcbiAgfTtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///147\n")},function(module,exports,__webpack_require__){eval("// 19.1.2.11 Object.isExtensible(O)\nvar isObject = __webpack_require__(4);\n\n__webpack_require__(25)('isExtensible', function ($isExtensible) {\n return function isExtensible(it) {\n return isObject(it) ? $isExtensible ? $isExtensible(it) : true : false;\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmlzLWV4dGVuc2libGUuanM/MTY1YiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGVBQWUsbUJBQU8sQ0FBQyxDQUFjOztBQUVyQyxtQkFBTyxDQUFDLEVBQWU7QUFDdkI7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIxNDguanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAxOS4xLjIuMTEgT2JqZWN0LmlzRXh0ZW5zaWJsZShPKVxudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgnaXNFeHRlbnNpYmxlJywgZnVuY3Rpb24gKCRpc0V4dGVuc2libGUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGlzRXh0ZW5zaWJsZShpdCkge1xuICAgIHJldHVybiBpc09iamVjdChpdCkgPyAkaXNFeHRlbnNpYmxlID8gJGlzRXh0ZW5zaWJsZShpdCkgOiB0cnVlIDogZmFsc2U7XG4gIH07XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///148\n")},function(module,exports,__webpack_require__){eval("// 19.1.3.1 Object.assign(target, source)\nvar $export = __webpack_require__(0);\n\n$export($export.S + $export.F, 'Object', { assign: __webpack_require__(99) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmFzc2lnbi5qcz9mNzUxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDLDBDQUEwQyxTQUFTLG1CQUFPLENBQUMsRUFBa0IsR0FBRyIsImZpbGUiOiIxNDkuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAxOS4xLjMuMSBPYmplY3QuYXNzaWduKHRhcmdldCwgc291cmNlKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYsICdPYmplY3QnLCB7IGFzc2lnbjogcmVxdWlyZSgnLi9fb2JqZWN0LWFzc2lnbicpIH0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///149\n")},function(module,exports,__webpack_require__){eval("// 19.1.3.10 Object.is(value1, value2)\nvar $export = __webpack_require__(0);\n$export($export.S, 'Object', { is: __webpack_require__(100) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmlzLmpzP2RiOTciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyw4QkFBOEIsS0FBSyxtQkFBTyxDQUFDLEdBQWUsR0FBRyIsImZpbGUiOiIxNTAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAxOS4xLjMuMTAgT2JqZWN0LmlzKHZhbHVlMSwgdmFsdWUyKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbiRleHBvcnQoJGV4cG9ydC5TLCAnT2JqZWN0JywgeyBpczogcmVxdWlyZSgnLi9fc2FtZS12YWx1ZScpIH0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///150\n")},function(module,exports,__webpack_require__){eval("// 19.1.3.19 Object.setPrototypeOf(O, proto)\nvar $export = __webpack_require__(0);\n$export($export.S, 'Object', { setPrototypeOf: __webpack_require__(71).set });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LnNldC1wcm90b3R5cGUtb2YuanM/ZmQyNCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLDhCQUE4QixpQkFBaUIsbUJBQU8sQ0FBQyxFQUFjLE9BQU8iLCJmaWxlIjoiMTUxLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMTkuMS4zLjE5IE9iamVjdC5zZXRQcm90b3R5cGVPZihPLCBwcm90bylcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG4kZXhwb3J0KCRleHBvcnQuUywgJ09iamVjdCcsIHsgc2V0UHJvdG90eXBlT2Y6IHJlcXVpcmUoJy4vX3NldC1wcm90bycpLnNldCB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///151\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// 19.1.3.6 Object.prototype.toString()\nvar classof = __webpack_require__(44);\nvar test = {};\ntest[__webpack_require__(5)('toStringTag')] = 'z';\nif (test + '' != '[object z]') {\n __webpack_require__(12)(Object.prototype, 'toString', function toString() {\n return '[object ' + classof(this) + ']';\n }, true);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LnRvLXN0cmluZy5qcz8wNmRiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxjQUFjLG1CQUFPLENBQUMsRUFBWTtBQUNsQztBQUNBLEtBQUssbUJBQU8sQ0FBQyxDQUFRO0FBQ3JCO0FBQ0EsRUFBRSxtQkFBTyxDQUFDLEVBQWE7QUFDdkI7QUFDQSxHQUFHO0FBQ0giLCJmaWxlIjoiMTUyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gMTkuMS4zLjYgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZygpXG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4vX2NsYXNzb2YnKTtcbnZhciB0ZXN0ID0ge307XG50ZXN0W3JlcXVpcmUoJy4vX3drcycpKCd0b1N0cmluZ1RhZycpXSA9ICd6JztcbmlmICh0ZXN0ICsgJycgIT0gJ1tvYmplY3Qgel0nKSB7XG4gIHJlcXVpcmUoJy4vX3JlZGVmaW5lJykoT2JqZWN0LnByb3RvdHlwZSwgJ3RvU3RyaW5nJywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuICdbb2JqZWN0ICcgKyBjbGFzc29mKHRoaXMpICsgJ10nO1xuICB9LCB0cnVlKTtcbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///152\n")},function(module,exports,__webpack_require__){eval("// 19.2.3.2 / 15.3.4.5 Function.prototype.bind(thisArg, args...)\nvar $export = __webpack_require__(0);\n\n$export($export.P, 'Function', { bind: __webpack_require__(101) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZnVuY3Rpb24uYmluZC5qcz9kOTJhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDLGdDQUFnQyxPQUFPLG1CQUFPLENBQUMsR0FBUyxHQUFHIiwiZmlsZSI6IjE1My5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDE5LjIuMy4yIC8gMTUuMy40LjUgRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQodGhpc0FyZywgYXJncy4uLilcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QLCAnRnVuY3Rpb24nLCB7IGJpbmQ6IHJlcXVpcmUoJy4vX2JpbmQnKSB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///153\n")},function(module,exports,__webpack_require__){eval("var dP = __webpack_require__(8).f;\nvar FProto = Function.prototype;\nvar nameRE = /^\\s*function ([^ (]*)/;\nvar NAME = 'name';\n\n// 19.2.4.2 name\nNAME in FProto || __webpack_require__(7) && dP(FProto, NAME, {\n configurable: true,\n get: function () {\n try {\n return ('' + this).match(nameRE)[1];\n } catch (e) {\n return '';\n }\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZnVuY3Rpb24ubmFtZS5qcz83ZjdmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFNBQVMsbUJBQU8sQ0FBQyxDQUFjO0FBQy9CO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGtCQUFrQixtQkFBTyxDQUFDLENBQWdCO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTU0LmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbnZhciBGUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGU7XG52YXIgbmFtZVJFID0gL15cXHMqZnVuY3Rpb24gKFteIChdKikvO1xudmFyIE5BTUUgPSAnbmFtZSc7XG5cbi8vIDE5LjIuNC4yIG5hbWVcbk5BTUUgaW4gRlByb3RvIHx8IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgZFAoRlByb3RvLCBOQU1FLCB7XG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiAoJycgKyB0aGlzKS5tYXRjaChuYW1lUkUpWzFdO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///154\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar isObject = __webpack_require__(4);\nvar getPrototypeOf = __webpack_require__(17);\nvar HAS_INSTANCE = __webpack_require__(5)('hasInstance');\nvar FunctionProto = Function.prototype;\n// 19.2.3.6 Function.prototype[@@hasInstance](V)\nif (!(HAS_INSTANCE in FunctionProto)) __webpack_require__(8).f(FunctionProto, HAS_INSTANCE, { value: function (O) {\n if (typeof this != 'function' || !isObject(O)) return false;\n if (!isObject(this.prototype)) return O instanceof this;\n // for environment w/o native `@@hasInstance` logic enough `instanceof`, but add this:\n while (O = getPrototypeOf(O)) if (this.prototype === O) return true;\n return false;\n} });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZnVuY3Rpb24uaGFzLWluc3RhbmNlLmpzPzIxN2IiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxxQkFBcUIsbUJBQU8sQ0FBQyxFQUFlO0FBQzVDLG1CQUFtQixtQkFBTyxDQUFDLENBQVE7QUFDbkM7QUFDQTtBQUNBLHNDQUFzQyxtQkFBTyxDQUFDLENBQWMsa0NBQWtDO0FBQzlGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLEVBQUUiLCJmaWxlIjoiMTU1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgSEFTX0lOU1RBTkNFID0gcmVxdWlyZSgnLi9fd2tzJykoJ2hhc0luc3RhbmNlJyk7XG52YXIgRnVuY3Rpb25Qcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbi8vIDE5LjIuMy42IEZ1bmN0aW9uLnByb3RvdHlwZVtAQGhhc0luc3RhbmNlXShWKVxuaWYgKCEoSEFTX0lOU1RBTkNFIGluIEZ1bmN0aW9uUHJvdG8pKSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mKEZ1bmN0aW9uUHJvdG8sIEhBU19JTlNUQU5DRSwgeyB2YWx1ZTogZnVuY3Rpb24gKE8pIHtcbiAgaWYgKHR5cGVvZiB0aGlzICE9ICdmdW5jdGlvbicgfHwgIWlzT2JqZWN0KE8pKSByZXR1cm4gZmFsc2U7XG4gIGlmICghaXNPYmplY3QodGhpcy5wcm90b3R5cGUpKSByZXR1cm4gTyBpbnN0YW5jZW9mIHRoaXM7XG4gIC8vIGZvciBlbnZpcm9ubWVudCB3L28gbmF0aXZlIGBAQGhhc0luc3RhbmNlYCBsb2dpYyBlbm91Z2ggYGluc3RhbmNlb2ZgLCBidXQgYWRkIHRoaXM6XG4gIHdoaWxlIChPID0gZ2V0UHJvdG90eXBlT2YoTykpIGlmICh0aGlzLnByb3RvdHlwZSA9PT0gTykgcmV0dXJuIHRydWU7XG4gIHJldHVybiBmYWxzZTtcbn0gfSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///155\n")},function(module,exports,__webpack_require__){eval("var $export = __webpack_require__(0);\nvar $parseInt = __webpack_require__(103);\n// 18.2.5 parseInt(string, radix)\n$export($export.G + $export.F * (parseInt != $parseInt), { parseInt: $parseInt });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucGFyc2UtaW50LmpzPzE4ZDAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsZ0JBQWdCLG1CQUFPLENBQUMsR0FBYztBQUN0QztBQUNBLDBEQUEwRCxzQkFBc0IiLCJmaWxlIjoiMTU2LmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkcGFyc2VJbnQgPSByZXF1aXJlKCcuL19wYXJzZS1pbnQnKTtcbi8vIDE4LjIuNSBwYXJzZUludChzdHJpbmcsIHJhZGl4KVxuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LkYgKiAocGFyc2VJbnQgIT0gJHBhcnNlSW50KSwgeyBwYXJzZUludDogJHBhcnNlSW50IH0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///156\n")},function(module,exports,__webpack_require__){eval("var $export = __webpack_require__(0);\nvar $parseFloat = __webpack_require__(104);\n// 18.2.4 parseFloat(string)\n$export($export.G + $export.F * (parseFloat != $parseFloat), { parseFloat: $parseFloat });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucGFyc2UtZmxvYXQuanM/YjcyYyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxrQkFBa0IsbUJBQU8sQ0FBQyxHQUFnQjtBQUMxQztBQUNBLDhEQUE4RCwwQkFBMEIiLCJmaWxlIjoiMTU3LmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkcGFyc2VGbG9hdCA9IHJlcXVpcmUoJy4vX3BhcnNlLWZsb2F0Jyk7XG4vLyAxOC4yLjQgcGFyc2VGbG9hdChzdHJpbmcpXG4kZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuRiAqIChwYXJzZUZsb2F0ICE9ICRwYXJzZUZsb2F0KSwgeyBwYXJzZUZsb2F0OiAkcGFyc2VGbG9hdCB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///157\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar global = __webpack_require__(2);\nvar has = __webpack_require__(14);\nvar cof = __webpack_require__(20);\nvar inheritIfRequired = __webpack_require__(73);\nvar toPrimitive = __webpack_require__(23);\nvar fails = __webpack_require__(3);\nvar gOPN = __webpack_require__(37).f;\nvar gOPD = __webpack_require__(16).f;\nvar dP = __webpack_require__(8).f;\nvar $trim = __webpack_require__(45).trim;\nvar NUMBER = 'Number';\nvar $Number = global[NUMBER];\nvar Base = $Number;\nvar proto = $Number.prototype;\n// Opera ~12 has broken Object#toString\nvar BROKEN_COF = cof(__webpack_require__(36)(proto)) == NUMBER;\nvar TRIM = 'trim' in String.prototype;\n\n// 7.1.3 ToNumber(argument)\nvar toNumber = function (argument) {\n var it = toPrimitive(argument, false);\n if (typeof it == 'string' && it.length > 2) {\n it = TRIM ? it.trim() : $trim(it, 3);\n var first = it.charCodeAt(0);\n var third, radix, maxCode;\n if (first === 43 || first === 45) {\n third = it.charCodeAt(2);\n if (third === 88 || third === 120) return NaN; // Number('+0x1') should be NaN, old V8 fix\n } else if (first === 48) {\n switch (it.charCodeAt(1)) {\n case 66: case 98: radix = 2; maxCode = 49; break; // fast equal /^0b[01]+$/i\n case 79: case 111: radix = 8; maxCode = 55; break; // fast equal /^0o[0-7]+$/i\n default: return +it;\n }\n for (var digits = it.slice(2), i = 0, l = digits.length, code; i < l; i++) {\n code = digits.charCodeAt(i);\n // parseInt parses a string to a first unavailable symbol\n // but ToNumber should return NaN if a string contains unavailable symbols\n if (code < 48 || code > maxCode) return NaN;\n } return parseInt(digits, radix);\n }\n } return +it;\n};\n\nif (!$Number(' 0o1') || !$Number('0b1') || $Number('+0x1')) {\n $Number = function Number(value) {\n var it = arguments.length < 1 ? 0 : value;\n var that = this;\n return that instanceof $Number\n // check on 1..constructor(foo) case\n && (BROKEN_COF ? fails(function () { proto.valueOf.call(that); }) : cof(that) != NUMBER)\n ? inheritIfRequired(new Base(toNumber(it)), that, $Number) : toNumber(it);\n };\n for (var keys = __webpack_require__(7) ? gOPN(Base) : (\n // ES3:\n 'MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,' +\n // ES6 (in case, if modules with ES6 Number statics required before):\n 'EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,' +\n 'MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger'\n ).split(','), j = 0, key; keys.length > j; j++) {\n if (has(Base, key = keys[j]) && !has($Number, key)) {\n dP($Number, key, gOPD(Base, key));\n }\n }\n $Number.prototype = proto;\n proto.constructor = $Number;\n __webpack_require__(12)(global, NUMBER, $Number);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLmNvbnN0cnVjdG9yLmpzP2M1ZjYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixhQUFhLG1CQUFPLENBQUMsQ0FBVztBQUNoQyxVQUFVLG1CQUFPLENBQUMsRUFBUTtBQUMxQixVQUFVLG1CQUFPLENBQUMsRUFBUTtBQUMxQix3QkFBd0IsbUJBQU8sQ0FBQyxFQUF3QjtBQUN4RCxrQkFBa0IsbUJBQU8sQ0FBQyxFQUFpQjtBQUMzQyxZQUFZLG1CQUFPLENBQUMsQ0FBVTtBQUM5QixXQUFXLG1CQUFPLENBQUMsRUFBZ0I7QUFDbkMsV0FBVyxtQkFBTyxDQUFDLEVBQWdCO0FBQ25DLFNBQVMsbUJBQU8sQ0FBQyxDQUFjO0FBQy9CLFlBQVksbUJBQU8sQ0FBQyxFQUFnQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLG1CQUFPLENBQUMsRUFBa0I7QUFDL0M7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0RBQW9EO0FBQ3BELEtBQUs7QUFDTDtBQUNBLG9DQUFvQyxjQUFjLE9BQU87QUFDekQscUNBQXFDLGNBQWMsT0FBTztBQUMxRDtBQUNBO0FBQ0Esb0VBQW9FLE9BQU87QUFDM0U7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMENBQTBDLDBCQUEwQixFQUFFO0FBQ3RFO0FBQ0E7QUFDQSxrQkFBa0IsbUJBQU8sQ0FBQyxDQUFnQjtBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCLGlCQUFpQjtBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLG1CQUFPLENBQUMsRUFBYTtBQUN2QiIsImZpbGUiOiIxNTguanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG52YXIgaW5oZXJpdElmUmVxdWlyZWQgPSByZXF1aXJlKCcuL19pbmhlcml0LWlmLXJlcXVpcmVkJyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgZ09QTiA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJykuZjtcbnZhciBnT1BEID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKS5mO1xudmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbnZhciAkdHJpbSA9IHJlcXVpcmUoJy4vX3N0cmluZy10cmltJykudHJpbTtcbnZhciBOVU1CRVIgPSAnTnVtYmVyJztcbnZhciAkTnVtYmVyID0gZ2xvYmFsW05VTUJFUl07XG52YXIgQmFzZSA9ICROdW1iZXI7XG52YXIgcHJvdG8gPSAkTnVtYmVyLnByb3RvdHlwZTtcbi8vIE9wZXJhIH4xMiBoYXMgYnJva2VuIE9iamVjdCN0b1N0cmluZ1xudmFyIEJST0tFTl9DT0YgPSBjb2YocmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpKHByb3RvKSkgPT0gTlVNQkVSO1xudmFyIFRSSU0gPSAndHJpbScgaW4gU3RyaW5nLnByb3RvdHlwZTtcblxuLy8gNy4xLjMgVG9OdW1iZXIoYXJndW1lbnQpXG52YXIgdG9OdW1iZXIgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdmFyIGl0ID0gdG9QcmltaXRpdmUoYXJndW1lbnQsIGZhbHNlKTtcbiAgaWYgKHR5cGVvZiBpdCA9PSAnc3RyaW5nJyAmJiBpdC5sZW5ndGggPiAyKSB7XG4gICAgaXQgPSBUUklNID8gaXQudHJpbSgpIDogJHRyaW0oaXQsIDMpO1xuICAgIHZhciBmaXJzdCA9IGl0LmNoYXJDb2RlQXQoMCk7XG4gICAgdmFyIHRoaXJkLCByYWRpeCwgbWF4Q29kZTtcbiAgICBpZiAoZmlyc3QgPT09IDQzIHx8IGZpcnN0ID09PSA0NSkge1xuICAgICAgdGhpcmQgPSBpdC5jaGFyQ29kZUF0KDIpO1xuICAgICAgaWYgKHRoaXJkID09PSA4OCB8fCB0aGlyZCA9PT0gMTIwKSByZXR1cm4gTmFOOyAvLyBOdW1iZXIoJysweDEnKSBzaG91bGQgYmUgTmFOLCBvbGQgVjggZml4XG4gICAgfSBlbHNlIGlmIChmaXJzdCA9PT0gNDgpIHtcbiAgICAgIHN3aXRjaCAoaXQuY2hhckNvZGVBdCgxKSkge1xuICAgICAgICBjYXNlIDY2OiBjYXNlIDk4OiByYWRpeCA9IDI7IG1heENvZGUgPSA0OTsgYnJlYWs7IC8vIGZhc3QgZXF1YWwgL14wYlswMV0rJC9pXG4gICAgICAgIGNhc2UgNzk6IGNhc2UgMTExOiByYWRpeCA9IDg7IG1heENvZGUgPSA1NTsgYnJlYWs7IC8vIGZhc3QgZXF1YWwgL14wb1swLTddKyQvaVxuICAgICAgICBkZWZhdWx0OiByZXR1cm4gK2l0O1xuICAgICAgfVxuICAgICAgZm9yICh2YXIgZGlnaXRzID0gaXQuc2xpY2UoMiksIGkgPSAwLCBsID0gZGlnaXRzLmxlbmd0aCwgY29kZTsgaSA8IGw7IGkrKykge1xuICAgICAgICBjb2RlID0gZGlnaXRzLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIC8vIHBhcnNlSW50IHBhcnNlcyBhIHN0cmluZyB0byBhIGZpcnN0IHVuYXZhaWxhYmxlIHN5bWJvbFxuICAgICAgICAvLyBidXQgVG9OdW1iZXIgc2hvdWxkIHJldHVybiBOYU4gaWYgYSBzdHJpbmcgY29udGFpbnMgdW5hdmFpbGFibGUgc3ltYm9sc1xuICAgICAgICBpZiAoY29kZSA8IDQ4IHx8IGNvZGUgPiBtYXhDb2RlKSByZXR1cm4gTmFOO1xuICAgICAgfSByZXR1cm4gcGFyc2VJbnQoZGlnaXRzLCByYWRpeCk7XG4gICAgfVxuICB9IHJldHVybiAraXQ7XG59O1xuXG5pZiAoISROdW1iZXIoJyAwbzEnKSB8fCAhJE51bWJlcignMGIxJykgfHwgJE51bWJlcignKzB4MScpKSB7XG4gICROdW1iZXIgPSBmdW5jdGlvbiBOdW1iZXIodmFsdWUpIHtcbiAgICB2YXIgaXQgPSBhcmd1bWVudHMubGVuZ3RoIDwgMSA/IDAgOiB2YWx1ZTtcbiAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgcmV0dXJuIHRoYXQgaW5zdGFuY2VvZiAkTnVtYmVyXG4gICAgICAvLyBjaGVjayBvbiAxLi5jb25zdHJ1Y3Rvcihmb28pIGNhc2VcbiAgICAgICYmIChCUk9LRU5fQ09GID8gZmFpbHMoZnVuY3Rpb24gKCkgeyBwcm90by52YWx1ZU9mLmNhbGwodGhhdCk7IH0pIDogY29mKHRoYXQpICE9IE5VTUJFUilcbiAgICAgICAgPyBpbmhlcml0SWZSZXF1aXJlZChuZXcgQmFzZSh0b051bWJlcihpdCkpLCB0aGF0LCAkTnVtYmVyKSA6IHRvTnVtYmVyKGl0KTtcbiAgfTtcbiAgZm9yICh2YXIga2V5cyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBnT1BOKEJhc2UpIDogKFxuICAgIC8vIEVTMzpcbiAgICAnTUFYX1ZBTFVFLE1JTl9WQUxVRSxOYU4sTkVHQVRJVkVfSU5GSU5JVFksUE9TSVRJVkVfSU5GSU5JVFksJyArXG4gICAgLy8gRVM2IChpbiBjYXNlLCBpZiBtb2R1bGVzIHdpdGggRVM2IE51bWJlciBzdGF0aWNzIHJlcXVpcmVkIGJlZm9yZSk6XG4gICAgJ0VQU0lMT04saXNGaW5pdGUsaXNJbnRlZ2VyLGlzTmFOLGlzU2FmZUludGVnZXIsTUFYX1NBRkVfSU5URUdFUiwnICtcbiAgICAnTUlOX1NBRkVfSU5URUdFUixwYXJzZUZsb2F0LHBhcnNlSW50LGlzSW50ZWdlcidcbiAgKS5zcGxpdCgnLCcpLCBqID0gMCwga2V5OyBrZXlzLmxlbmd0aCA+IGo7IGorKykge1xuICAgIGlmIChoYXMoQmFzZSwga2V5ID0ga2V5c1tqXSkgJiYgIWhhcygkTnVtYmVyLCBrZXkpKSB7XG4gICAgICBkUCgkTnVtYmVyLCBrZXksIGdPUEQoQmFzZSwga2V5KSk7XG4gICAgfVxuICB9XG4gICROdW1iZXIucHJvdG90eXBlID0gcHJvdG87XG4gIHByb3RvLmNvbnN0cnVjdG9yID0gJE51bWJlcjtcbiAgcmVxdWlyZSgnLi9fcmVkZWZpbmUnKShnbG9iYWwsIE5VTUJFUiwgJE51bWJlcik7XG59XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///158\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar toInteger = __webpack_require__(21);\nvar aNumberValue = __webpack_require__(105);\nvar repeat = __webpack_require__(74);\nvar $toFixed = 1.0.toFixed;\nvar floor = Math.floor;\nvar data = [0, 0, 0, 0, 0, 0];\nvar ERROR = 'Number.toFixed: incorrect invocation!';\nvar ZERO = '0';\n\nvar multiply = function (n, c) {\n var i = -1;\n var c2 = c;\n while (++i < 6) {\n c2 += n * data[i];\n data[i] = c2 % 1e7;\n c2 = floor(c2 / 1e7);\n }\n};\nvar divide = function (n) {\n var i = 6;\n var c = 0;\n while (--i >= 0) {\n c += data[i];\n data[i] = floor(c / n);\n c = (c % n) * 1e7;\n }\n};\nvar numToString = function () {\n var i = 6;\n var s = '';\n while (--i >= 0) {\n if (s !== '' || i === 0 || data[i] !== 0) {\n var t = String(data[i]);\n s = s === '' ? t : s + repeat.call(ZERO, 7 - t.length) + t;\n }\n } return s;\n};\nvar pow = function (x, n, acc) {\n return n === 0 ? acc : n % 2 === 1 ? pow(x, n - 1, acc * x) : pow(x * x, n / 2, acc);\n};\nvar log = function (x) {\n var n = 0;\n var x2 = x;\n while (x2 >= 4096) {\n n += 12;\n x2 /= 4096;\n }\n while (x2 >= 2) {\n n += 1;\n x2 /= 2;\n } return n;\n};\n\n$export($export.P + $export.F * (!!$toFixed && (\n 0.00008.toFixed(3) !== '0.000' ||\n 0.9.toFixed(0) !== '1' ||\n 1.255.toFixed(2) !== '1.25' ||\n 1000000000000000128.0.toFixed(0) !== '1000000000000000128'\n) || !__webpack_require__(3)(function () {\n // V8 ~ Android 4.3-\n $toFixed.call({});\n})), 'Number', {\n toFixed: function toFixed(fractionDigits) {\n var x = aNumberValue(this, ERROR);\n var f = toInteger(fractionDigits);\n var s = '';\n var m = ZERO;\n var e, z, j, k;\n if (f < 0 || f > 20) throw RangeError(ERROR);\n // eslint-disable-next-line no-self-compare\n if (x != x) return 'NaN';\n if (x <= -1e21 || x >= 1e21) return String(x);\n if (x < 0) {\n s = '-';\n x = -x;\n }\n if (x > 1e-21) {\n e = log(x * pow(2, 69, 1)) - 69;\n z = e < 0 ? x * pow(2, -e, 1) : x / pow(2, e, 1);\n z *= 0x10000000000000;\n e = 52 - e;\n if (e > 0) {\n multiply(0, z);\n j = f;\n while (j >= 7) {\n multiply(1e7, 0);\n j -= 7;\n }\n multiply(pow(10, j, 1), 0);\n j = e - 1;\n while (j >= 23) {\n divide(1 << 23);\n j -= 23;\n }\n divide(1 << j);\n multiply(1, 1);\n divide(2);\n m = numToString();\n } else {\n multiply(0, z);\n multiply(1 << -e, 0);\n m = numToString() + repeat.call(ZERO, f);\n }\n }\n if (f > 0) {\n k = m.length;\n m = s + (k <= f ? '0.' + repeat.call(ZERO, f - k) + m : m.slice(0, k - f) + '.' + m.slice(k - f));\n } else {\n m = s + m;\n } return m;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLnRvLWZpeGVkLmpzPzAzNmMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDLG1CQUFtQixtQkFBTyxDQUFDLEdBQW1CO0FBQzlDLGFBQWEsbUJBQU8sQ0FBQyxFQUFrQjtBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTSxtQkFBTyxDQUFDLENBQVU7QUFDeEI7QUFDQSxrQkFBa0I7QUFDbEIsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMO0FBQ0EsQ0FBQyIsImZpbGUiOiIxNTkuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciBhTnVtYmVyVmFsdWUgPSByZXF1aXJlKCcuL19hLW51bWJlci12YWx1ZScpO1xudmFyIHJlcGVhdCA9IHJlcXVpcmUoJy4vX3N0cmluZy1yZXBlYXQnKTtcbnZhciAkdG9GaXhlZCA9IDEuMC50b0ZpeGVkO1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcbnZhciBkYXRhID0gWzAsIDAsIDAsIDAsIDAsIDBdO1xudmFyIEVSUk9SID0gJ051bWJlci50b0ZpeGVkOiBpbmNvcnJlY3QgaW52b2NhdGlvbiEnO1xudmFyIFpFUk8gPSAnMCc7XG5cbnZhciBtdWx0aXBseSA9IGZ1bmN0aW9uIChuLCBjKSB7XG4gIHZhciBpID0gLTE7XG4gIHZhciBjMiA9IGM7XG4gIHdoaWxlICgrK2kgPCA2KSB7XG4gICAgYzIgKz0gbiAqIGRhdGFbaV07XG4gICAgZGF0YVtpXSA9IGMyICUgMWU3O1xuICAgIGMyID0gZmxvb3IoYzIgLyAxZTcpO1xuICB9XG59O1xudmFyIGRpdmlkZSA9IGZ1bmN0aW9uIChuKSB7XG4gIHZhciBpID0gNjtcbiAgdmFyIGMgPSAwO1xuICB3aGlsZSAoLS1pID49IDApIHtcbiAgICBjICs9IGRhdGFbaV07XG4gICAgZGF0YVtpXSA9IGZsb29yKGMgLyBuKTtcbiAgICBjID0gKGMgJSBuKSAqIDFlNztcbiAgfVxufTtcbnZhciBudW1Ub1N0cmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGkgPSA2O1xuICB2YXIgcyA9ICcnO1xuICB3aGlsZSAoLS1pID49IDApIHtcbiAgICBpZiAocyAhPT0gJycgfHwgaSA9PT0gMCB8fCBkYXRhW2ldICE9PSAwKSB7XG4gICAgICB2YXIgdCA9IFN0cmluZyhkYXRhW2ldKTtcbiAgICAgIHMgPSBzID09PSAnJyA/IHQgOiBzICsgcmVwZWF0LmNhbGwoWkVSTywgNyAtIHQubGVuZ3RoKSArIHQ7XG4gICAgfVxuICB9IHJldHVybiBzO1xufTtcbnZhciBwb3cgPSBmdW5jdGlvbiAoeCwgbiwgYWNjKSB7XG4gIHJldHVybiBuID09PSAwID8gYWNjIDogbiAlIDIgPT09IDEgPyBwb3coeCwgbiAtIDEsIGFjYyAqIHgpIDogcG93KHggKiB4LCBuIC8gMiwgYWNjKTtcbn07XG52YXIgbG9nID0gZnVuY3Rpb24gKHgpIHtcbiAgdmFyIG4gPSAwO1xuICB2YXIgeDIgPSB4O1xuICB3aGlsZSAoeDIgPj0gNDA5Nikge1xuICAgIG4gKz0gMTI7XG4gICAgeDIgLz0gNDA5NjtcbiAgfVxuICB3aGlsZSAoeDIgPj0gMikge1xuICAgIG4gKz0gMTtcbiAgICB4MiAvPSAyO1xuICB9IHJldHVybiBuO1xufTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoISEkdG9GaXhlZCAmJiAoXG4gIDAuMDAwMDgudG9GaXhlZCgzKSAhPT0gJzAuMDAwJyB8fFxuICAwLjkudG9GaXhlZCgwKSAhPT0gJzEnIHx8XG4gIDEuMjU1LnRvRml4ZWQoMikgIT09ICcxLjI1JyB8fFxuICAxMDAwMDAwMDAwMDAwMDAwMTI4LjAudG9GaXhlZCgwKSAhPT0gJzEwMDAwMDAwMDAwMDAwMDAxMjgnXG4pIHx8ICFyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgLy8gVjggfiBBbmRyb2lkIDQuMy1cbiAgJHRvRml4ZWQuY2FsbCh7fSk7XG59KSksICdOdW1iZXInLCB7XG4gIHRvRml4ZWQ6IGZ1bmN0aW9uIHRvRml4ZWQoZnJhY3Rpb25EaWdpdHMpIHtcbiAgICB2YXIgeCA9IGFOdW1iZXJWYWx1ZSh0aGlzLCBFUlJPUik7XG4gICAgdmFyIGYgPSB0b0ludGVnZXIoZnJhY3Rpb25EaWdpdHMpO1xuICAgIHZhciBzID0gJyc7XG4gICAgdmFyIG0gPSBaRVJPO1xuICAgIHZhciBlLCB6LCBqLCBrO1xuICAgIGlmIChmIDwgMCB8fCBmID4gMjApIHRocm93IFJhbmdlRXJyb3IoRVJST1IpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICBpZiAoeCAhPSB4KSByZXR1cm4gJ05hTic7XG4gICAgaWYgKHggPD0gLTFlMjEgfHwgeCA+PSAxZTIxKSByZXR1cm4gU3RyaW5nKHgpO1xuICAgIGlmICh4IDwgMCkge1xuICAgICAgcyA9ICctJztcbiAgICAgIHggPSAteDtcbiAgICB9XG4gICAgaWYgKHggPiAxZS0yMSkge1xuICAgICAgZSA9IGxvZyh4ICogcG93KDIsIDY5LCAxKSkgLSA2OTtcbiAgICAgIHogPSBlIDwgMCA/IHggKiBwb3coMiwgLWUsIDEpIDogeCAvIHBvdygyLCBlLCAxKTtcbiAgICAgIHogKj0gMHgxMDAwMDAwMDAwMDAwMDtcbiAgICAgIGUgPSA1MiAtIGU7XG4gICAgICBpZiAoZSA+IDApIHtcbiAgICAgICAgbXVsdGlwbHkoMCwgeik7XG4gICAgICAgIGogPSBmO1xuICAgICAgICB3aGlsZSAoaiA+PSA3KSB7XG4gICAgICAgICAgbXVsdGlwbHkoMWU3LCAwKTtcbiAgICAgICAgICBqIC09IDc7XG4gICAgICAgIH1cbiAgICAgICAgbXVsdGlwbHkocG93KDEwLCBqLCAxKSwgMCk7XG4gICAgICAgIGogPSBlIC0gMTtcbiAgICAgICAgd2hpbGUgKGogPj0gMjMpIHtcbiAgICAgICAgICBkaXZpZGUoMSA8PCAyMyk7XG4gICAgICAgICAgaiAtPSAyMztcbiAgICAgICAgfVxuICAgICAgICBkaXZpZGUoMSA8PCBqKTtcbiAgICAgICAgbXVsdGlwbHkoMSwgMSk7XG4gICAgICAgIGRpdmlkZSgyKTtcbiAgICAgICAgbSA9IG51bVRvU3RyaW5nKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBtdWx0aXBseSgwLCB6KTtcbiAgICAgICAgbXVsdGlwbHkoMSA8PCAtZSwgMCk7XG4gICAgICAgIG0gPSBudW1Ub1N0cmluZygpICsgcmVwZWF0LmNhbGwoWkVSTywgZik7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChmID4gMCkge1xuICAgICAgayA9IG0ubGVuZ3RoO1xuICAgICAgbSA9IHMgKyAoayA8PSBmID8gJzAuJyArIHJlcGVhdC5jYWxsKFpFUk8sIGYgLSBrKSArIG0gOiBtLnNsaWNlKDAsIGsgLSBmKSArICcuJyArIG0uc2xpY2UoayAtIGYpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbSA9IHMgKyBtO1xuICAgIH0gcmV0dXJuIG07XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///159\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar $fails = __webpack_require__(3);\nvar aNumberValue = __webpack_require__(105);\nvar $toPrecision = 1.0.toPrecision;\n\n$export($export.P + $export.F * ($fails(function () {\n // IE7-\n return $toPrecision.call(1, undefined) !== '1';\n}) || !$fails(function () {\n // V8 ~ Android 4.3-\n $toPrecision.call({});\n})), 'Number', {\n toPrecision: function toPrecision(precision) {\n var that = aNumberValue(this, 'Number#toPrecision: incorrect invocation!');\n return precision === undefined ? $toPrecision.call(that) : $toPrecision.call(that, precision);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLnRvLXByZWNpc2lvbi5qcz81NGE4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsYUFBYSxtQkFBTyxDQUFDLENBQVU7QUFDL0IsbUJBQW1CLG1CQUFPLENBQUMsR0FBbUI7QUFDOUM7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0Esc0JBQXNCO0FBQ3RCLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTYwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIGFOdW1iZXJWYWx1ZSA9IHJlcXVpcmUoJy4vX2EtbnVtYmVyLXZhbHVlJyk7XG52YXIgJHRvUHJlY2lzaW9uID0gMS4wLnRvUHJlY2lzaW9uO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICgkZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBJRTctXG4gIHJldHVybiAkdG9QcmVjaXNpb24uY2FsbCgxLCB1bmRlZmluZWQpICE9PSAnMSc7XG59KSB8fCAhJGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gVjggfiBBbmRyb2lkIDQuMy1cbiAgJHRvUHJlY2lzaW9uLmNhbGwoe30pO1xufSkpLCAnTnVtYmVyJywge1xuICB0b1ByZWNpc2lvbjogZnVuY3Rpb24gdG9QcmVjaXNpb24ocHJlY2lzaW9uKSB7XG4gICAgdmFyIHRoYXQgPSBhTnVtYmVyVmFsdWUodGhpcywgJ051bWJlciN0b1ByZWNpc2lvbjogaW5jb3JyZWN0IGludm9jYXRpb24hJyk7XG4gICAgcmV0dXJuIHByZWNpc2lvbiA9PT0gdW5kZWZpbmVkID8gJHRvUHJlY2lzaW9uLmNhbGwodGhhdCkgOiAkdG9QcmVjaXNpb24uY2FsbCh0aGF0LCBwcmVjaXNpb24pO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///160\n")},function(module,exports,__webpack_require__){eval("// 20.1.2.1 Number.EPSILON\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Number', { EPSILON: Math.pow(2, -52) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLmVwc2lsb24uanM/MmUzNyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXOztBQUVqQyw4QkFBOEIsNEJBQTRCIiwiZmlsZSI6IjE2MS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDIwLjEuMi4xIE51bWJlci5FUFNJTE9OXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ051bWJlcicsIHsgRVBTSUxPTjogTWF0aC5wb3coMiwgLTUyKSB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///161\n")},function(module,exports,__webpack_require__){eval("// 20.1.2.2 Number.isFinite(number)\nvar $export = __webpack_require__(0);\nvar _isFinite = __webpack_require__(2).isFinite;\n\n$export($export.S, 'Number', {\n isFinite: function isFinite(it) {\n return typeof it == 'number' && _isFinite(it);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLmlzLWZpbml0ZS5qcz9mY2EwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsZ0JBQWdCLG1CQUFPLENBQUMsQ0FBVzs7QUFFbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjE2Mi5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDIwLjEuMi4yIE51bWJlci5pc0Zpbml0ZShudW1iZXIpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIF9pc0Zpbml0ZSA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLmlzRmluaXRlO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ051bWJlcicsIHtcbiAgaXNGaW5pdGU6IGZ1bmN0aW9uIGlzRmluaXRlKGl0KSB7XG4gICAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnbnVtYmVyJyAmJiBfaXNGaW5pdGUoaXQpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///162\n")},function(module,exports,__webpack_require__){eval("// 20.1.2.3 Number.isInteger(number)\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Number', { isInteger: __webpack_require__(106) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLmlzLWludGVnZXIuanM/N2NkZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXOztBQUVqQyw4QkFBOEIsWUFBWSxtQkFBTyxDQUFDLEdBQWUsR0FBRyIsImZpbGUiOiIxNjMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyMC4xLjIuMyBOdW1iZXIuaXNJbnRlZ2VyKG51bWJlcilcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTnVtYmVyJywgeyBpc0ludGVnZXI6IHJlcXVpcmUoJy4vX2lzLWludGVnZXInKSB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///163\n")},function(module,exports,__webpack_require__){eval("// 20.1.2.4 Number.isNaN(number)\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Number', {\n isNaN: function isNaN(number) {\n // eslint-disable-next-line no-self-compare\n return number != number;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLmlzLW5hbi5qcz9lZTFkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjE2NC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDIwLjEuMi40IE51bWJlci5pc05hTihudW1iZXIpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ051bWJlcicsIHtcbiAgaXNOYU46IGZ1bmN0aW9uIGlzTmFOKG51bWJlcikge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICByZXR1cm4gbnVtYmVyICE9IG51bWJlcjtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///164\n")},function(module,exports,__webpack_require__){eval("// 20.1.2.5 Number.isSafeInteger(number)\nvar $export = __webpack_require__(0);\nvar isInteger = __webpack_require__(106);\nvar abs = Math.abs;\n\n$export($export.S, 'Number', {\n isSafeInteger: function isSafeInteger(number) {\n return isInteger(number) && abs(number) <= 0x1fffffffffffff;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLmlzLXNhZmUtaW50ZWdlci5qcz9iMWIxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsZ0JBQWdCLG1CQUFPLENBQUMsR0FBZTtBQUN2Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTY1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMS4yLjUgTnVtYmVyLmlzU2FmZUludGVnZXIobnVtYmVyKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBpc0ludGVnZXIgPSByZXF1aXJlKCcuL19pcy1pbnRlZ2VyJyk7XG52YXIgYWJzID0gTWF0aC5hYnM7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTnVtYmVyJywge1xuICBpc1NhZmVJbnRlZ2VyOiBmdW5jdGlvbiBpc1NhZmVJbnRlZ2VyKG51bWJlcikge1xuICAgIHJldHVybiBpc0ludGVnZXIobnVtYmVyKSAmJiBhYnMobnVtYmVyKSA8PSAweDFmZmZmZmZmZmZmZmZmO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///165\n")},function(module,exports,__webpack_require__){eval("// 20.1.2.6 Number.MAX_SAFE_INTEGER\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Number', { MAX_SAFE_INTEGER: 0x1fffffffffffff });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLm1heC1zYWZlLWludGVnZXIuanM/ODdmMyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXOztBQUVqQyw4QkFBOEIscUNBQXFDIiwiZmlsZSI6IjE2Ni5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDIwLjEuMi42IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ051bWJlcicsIHsgTUFYX1NBRkVfSU5URUdFUjogMHgxZmZmZmZmZmZmZmZmZiB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///166\n")},function(module,exports,__webpack_require__){eval("// 20.1.2.10 Number.MIN_SAFE_INTEGER\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Number', { MIN_SAFE_INTEGER: -0x1fffffffffffff });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLm1pbi1zYWZlLWludGVnZXIuanM/OTI3OCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXOztBQUVqQyw4QkFBOEIsc0NBQXNDIiwiZmlsZSI6IjE2Ny5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDIwLjEuMi4xMCBOdW1iZXIuTUlOX1NBRkVfSU5URUdFUlxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdOdW1iZXInLCB7IE1JTl9TQUZFX0lOVEVHRVI6IC0weDFmZmZmZmZmZmZmZmZmIH0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///167\n")},function(module,exports,__webpack_require__){eval("var $export = __webpack_require__(0);\nvar $parseFloat = __webpack_require__(104);\n// 20.1.2.12 Number.parseFloat(string)\n$export($export.S + $export.F * (Number.parseFloat != $parseFloat), 'Number', { parseFloat: $parseFloat });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLnBhcnNlLWZsb2F0LmpzPzVkZjIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsa0JBQWtCLG1CQUFPLENBQUMsR0FBZ0I7QUFDMUM7QUFDQSwrRUFBK0UsMEJBQTBCIiwiZmlsZSI6IjE2OC5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHBhcnNlRmxvYXQgPSByZXF1aXJlKCcuL19wYXJzZS1mbG9hdCcpO1xuLy8gMjAuMS4yLjEyIE51bWJlci5wYXJzZUZsb2F0KHN0cmluZylcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogKE51bWJlci5wYXJzZUZsb2F0ICE9ICRwYXJzZUZsb2F0KSwgJ051bWJlcicsIHsgcGFyc2VGbG9hdDogJHBhcnNlRmxvYXQgfSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///168\n")},function(module,exports,__webpack_require__){eval("var $export = __webpack_require__(0);\nvar $parseInt = __webpack_require__(103);\n// 20.1.2.13 Number.parseInt(string, radix)\n$export($export.S + $export.F * (Number.parseInt != $parseInt), 'Number', { parseInt: $parseInt });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLnBhcnNlLWludC5qcz8wNGZmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGdCQUFnQixtQkFBTyxDQUFDLEdBQWM7QUFDdEM7QUFDQSwyRUFBMkUsc0JBQXNCIiwiZmlsZSI6IjE2OS5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHBhcnNlSW50ID0gcmVxdWlyZSgnLi9fcGFyc2UtaW50Jyk7XG4vLyAyMC4xLjIuMTMgTnVtYmVyLnBhcnNlSW50KHN0cmluZywgcmFkaXgpXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIChOdW1iZXIucGFyc2VJbnQgIT0gJHBhcnNlSW50KSwgJ051bWJlcicsIHsgcGFyc2VJbnQ6ICRwYXJzZUludCB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///169\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.3 Math.acosh(x)\nvar $export = __webpack_require__(0);\nvar log1p = __webpack_require__(107);\nvar sqrt = Math.sqrt;\nvar $acosh = Math.acosh;\n\n$export($export.S + $export.F * !($acosh\n // V8 bug: https://code.google.com/p/v8/issues/detail?id=3509\n && Math.floor($acosh(Number.MAX_VALUE)) == 710\n // Tor Browser bug: Math.acosh(Infinity) -> NaN\n && $acosh(Infinity) == Infinity\n), 'Math', {\n acosh: function acosh(x) {\n return (x = +x) < 1 ? NaN : x > 94906265.62425156\n ? Math.log(x) + Math.LN2\n : log1p(x - 1 + sqrt(x - 1) * sqrt(x + 1));\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5hY29zaC5qcz83ZjI1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsWUFBWSxtQkFBTyxDQUFDLEdBQWU7QUFDbkM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIxNzAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyMC4yLjIuMyBNYXRoLmFjb3NoKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGxvZzFwID0gcmVxdWlyZSgnLi9fbWF0aC1sb2cxcCcpO1xudmFyIHNxcnQgPSBNYXRoLnNxcnQ7XG52YXIgJGFjb3NoID0gTWF0aC5hY29zaDtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhKCRhY29zaFxuICAvLyBWOCBidWc6IGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zNTA5XG4gICYmIE1hdGguZmxvb3IoJGFjb3NoKE51bWJlci5NQVhfVkFMVUUpKSA9PSA3MTBcbiAgLy8gVG9yIEJyb3dzZXIgYnVnOiBNYXRoLmFjb3NoKEluZmluaXR5KSAtPiBOYU5cbiAgJiYgJGFjb3NoKEluZmluaXR5KSA9PSBJbmZpbml0eVxuKSwgJ01hdGgnLCB7XG4gIGFjb3NoOiBmdW5jdGlvbiBhY29zaCh4KSB7XG4gICAgcmV0dXJuICh4ID0gK3gpIDwgMSA/IE5hTiA6IHggPiA5NDkwNjI2NS42MjQyNTE1NlxuICAgICAgPyBNYXRoLmxvZyh4KSArIE1hdGguTE4yXG4gICAgICA6IGxvZzFwKHggLSAxICsgc3FydCh4IC0gMSkgKiBzcXJ0KHggKyAxKSk7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///170\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.5 Math.asinh(x)\nvar $export = __webpack_require__(0);\nvar $asinh = Math.asinh;\n\nfunction asinh(x) {\n return !isFinite(x = +x) || x == 0 ? x : x < 0 ? -asinh(-x) : Math.log(x + Math.sqrt(x * x + 1));\n}\n\n// Tor Browser bug: Math.asinh(0) -> -0\n$export($export.S + $export.F * !($asinh && 1 / $asinh(0) > 0), 'Math', { asinh: asinh });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5hc2luaC5qcz81MzZiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakM7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EseUVBQXlFLGVBQWUiLCJmaWxlIjoiMTcxLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMi4yLjUgTWF0aC5hc2luaCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkYXNpbmggPSBNYXRoLmFzaW5oO1xuXG5mdW5jdGlvbiBhc2luaCh4KSB7XG4gIHJldHVybiAhaXNGaW5pdGUoeCA9ICt4KSB8fCB4ID09IDAgPyB4IDogeCA8IDAgPyAtYXNpbmgoLXgpIDogTWF0aC5sb2coeCArIE1hdGguc3FydCh4ICogeCArIDEpKTtcbn1cblxuLy8gVG9yIEJyb3dzZXIgYnVnOiBNYXRoLmFzaW5oKDApIC0+IC0wXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICEoJGFzaW5oICYmIDEgLyAkYXNpbmgoMCkgPiAwKSwgJ01hdGgnLCB7IGFzaW5oOiBhc2luaCB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///171\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.7 Math.atanh(x)\nvar $export = __webpack_require__(0);\nvar $atanh = Math.atanh;\n\n// Tor Browser bug: Math.atanh(-0) -> 0\n$export($export.S + $export.F * !($atanh && 1 / $atanh(-0) < 0), 'Math', {\n atanh: function atanh(x) {\n return (x = +x) == 0 ? x : Math.log((1 + x) / (1 - x)) / 2;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5hdGFuaC5qcz9kOWFiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTcyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMi4yLjcgTWF0aC5hdGFuaCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkYXRhbmggPSBNYXRoLmF0YW5oO1xuXG4vLyBUb3IgQnJvd3NlciBidWc6IE1hdGguYXRhbmgoLTApIC0+IDBcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogISgkYXRhbmggJiYgMSAvICRhdGFuaCgtMCkgPCAwKSwgJ01hdGgnLCB7XG4gIGF0YW5oOiBmdW5jdGlvbiBhdGFuaCh4KSB7XG4gICAgcmV0dXJuICh4ID0gK3gpID09IDAgPyB4IDogTWF0aC5sb2coKDEgKyB4KSAvICgxIC0geCkpIC8gMjtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///172\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.9 Math.cbrt(x)\nvar $export = __webpack_require__(0);\nvar sign = __webpack_require__(75);\n\n$export($export.S, 'Math', {\n cbrt: function cbrt(x) {\n return sign(x = +x) * Math.pow(Math.abs(x), 1 / 3);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5jYnJ0LmpzP2Y5YWIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxXQUFXLG1CQUFPLENBQUMsRUFBYzs7QUFFakM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjE3My5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDIwLjIuMi45IE1hdGguY2JydCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBzaWduID0gcmVxdWlyZSgnLi9fbWF0aC1zaWduJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgY2JydDogZnVuY3Rpb24gY2JydCh4KSB7XG4gICAgcmV0dXJuIHNpZ24oeCA9ICt4KSAqIE1hdGgucG93KE1hdGguYWJzKHgpLCAxIC8gMyk7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///173\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.11 Math.clz32(x)\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', {\n clz32: function clz32(x) {\n return (x >>>= 0) ? 31 - Math.floor(Math.log(x + 0.5) * Math.LOG2E) : 32;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5jbHozMi5qcz8zMmQ3Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIxNzQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyMC4yLjIuMTEgTWF0aC5jbHozMih4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBjbHozMjogZnVuY3Rpb24gY2x6MzIoeCkge1xuICAgIHJldHVybiAoeCA+Pj49IDApID8gMzEgLSBNYXRoLmZsb29yKE1hdGgubG9nKHggKyAwLjUpICogTWF0aC5MT0cyRSkgOiAzMjtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///174\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.12 Math.cosh(x)\nvar $export = __webpack_require__(0);\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n cosh: function cosh(x) {\n return (exp(x = +x) + exp(-x)) / 2;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5jb3NoLmpzPzI1YzkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTc1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMi4yLjEyIE1hdGguY29zaCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBleHAgPSBNYXRoLmV4cDtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBjb3NoOiBmdW5jdGlvbiBjb3NoKHgpIHtcbiAgICByZXR1cm4gKGV4cCh4ID0gK3gpICsgZXhwKC14KSkgLyAyO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///175\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.14 Math.expm1(x)\nvar $export = __webpack_require__(0);\nvar $expm1 = __webpack_require__(76);\n\n$export($export.S + $export.F * ($expm1 != Math.expm1), 'Math', { expm1: $expm1 });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5leHBtMS5qcz85ZjNjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsYUFBYSxtQkFBTyxDQUFDLEVBQWU7O0FBRXBDLGlFQUFpRSxnQkFBZ0IiLCJmaWxlIjoiMTc2LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMi4yLjE0IE1hdGguZXhwbTEoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGV4cG0xID0gcmVxdWlyZSgnLi9fbWF0aC1leHBtMScpO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICgkZXhwbTEgIT0gTWF0aC5leHBtMSksICdNYXRoJywgeyBleHBtMTogJGV4cG0xIH0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///176\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.16 Math.fround(x)\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', { fround: __webpack_require__(108) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5mcm91bmQuanM/MDQyZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXOztBQUVqQyw0QkFBNEIsU0FBUyxtQkFBTyxDQUFDLEdBQWdCLEdBQUciLCJmaWxlIjoiMTc3LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMi4yLjE2IE1hdGguZnJvdW5kKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7IGZyb3VuZDogcmVxdWlyZSgnLi9fbWF0aC1mcm91bmQnKSB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///177\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.17 Math.hypot([value1[, value2[, … ]]])\nvar $export = __webpack_require__(0);\nvar abs = Math.abs;\n\n$export($export.S, 'Math', {\n hypot: function hypot(value1, value2) { // eslint-disable-line no-unused-vars\n var sum = 0;\n var i = 0;\n var aLen = arguments.length;\n var larg = 0;\n var arg, div;\n while (i < aLen) {\n arg = abs(arguments[i++]);\n if (larg < arg) {\n div = larg / arg;\n sum = sum * div * div + 1;\n larg = arg;\n } else if (arg > 0) {\n div = arg / larg;\n sum += div * div;\n } else sum += arg;\n }\n return larg === Infinity ? Infinity : larg * Math.sqrt(sum);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5oeXBvdC5qcz9jN2M2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakM7O0FBRUE7QUFDQSx5Q0FBeUM7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTc4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMi4yLjE3IE1hdGguaHlwb3QoW3ZhbHVlMVssIHZhbHVlMlssIOKApiBdXV0pXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGFicyA9IE1hdGguYWJzO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGh5cG90OiBmdW5jdGlvbiBoeXBvdCh2YWx1ZTEsIHZhbHVlMikgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgdmFyIHN1bSA9IDA7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgbGFyZyA9IDA7XG4gICAgdmFyIGFyZywgZGl2O1xuICAgIHdoaWxlIChpIDwgYUxlbikge1xuICAgICAgYXJnID0gYWJzKGFyZ3VtZW50c1tpKytdKTtcbiAgICAgIGlmIChsYXJnIDwgYXJnKSB7XG4gICAgICAgIGRpdiA9IGxhcmcgLyBhcmc7XG4gICAgICAgIHN1bSA9IHN1bSAqIGRpdiAqIGRpdiArIDE7XG4gICAgICAgIGxhcmcgPSBhcmc7XG4gICAgICB9IGVsc2UgaWYgKGFyZyA+IDApIHtcbiAgICAgICAgZGl2ID0gYXJnIC8gbGFyZztcbiAgICAgICAgc3VtICs9IGRpdiAqIGRpdjtcbiAgICAgIH0gZWxzZSBzdW0gKz0gYXJnO1xuICAgIH1cbiAgICByZXR1cm4gbGFyZyA9PT0gSW5maW5pdHkgPyBJbmZpbml0eSA6IGxhcmcgKiBNYXRoLnNxcnQoc3VtKTtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///178\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.18 Math.imul(x, y)\nvar $export = __webpack_require__(0);\nvar $imul = Math.imul;\n\n// some WebKit versions fails with big numbers, some has wrong arity\n$export($export.S + $export.F * __webpack_require__(3)(function () {\n return $imul(0xffffffff, 5) != -5 || $imul.length != 2;\n}), 'Math', {\n imul: function imul(x, y) {\n var UINT16 = 0xffff;\n var xn = +x;\n var yn = +y;\n var xl = UINT16 & xn;\n var yl = UINT16 & yn;\n return 0 | xl * yl + ((UINT16 & xn >>> 16) * yl + xl * (UINT16 & yn >>> 16) << 16 >>> 0);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5pbXVsLmpzP2Y0ZmYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQzs7QUFFQTtBQUNBLGdDQUFnQyxtQkFBTyxDQUFDLENBQVU7QUFDbEQ7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTc5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMi4yLjE4IE1hdGguaW11bCh4LCB5KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkaW11bCA9IE1hdGguaW11bDtcblxuLy8gc29tZSBXZWJLaXQgdmVyc2lvbnMgZmFpbHMgd2l0aCBiaWcgbnVtYmVycywgc29tZSBoYXMgd3JvbmcgYXJpdHlcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAkaW11bCgweGZmZmZmZmZmLCA1KSAhPSAtNSB8fCAkaW11bC5sZW5ndGggIT0gMjtcbn0pLCAnTWF0aCcsIHtcbiAgaW11bDogZnVuY3Rpb24gaW11bCh4LCB5KSB7XG4gICAgdmFyIFVJTlQxNiA9IDB4ZmZmZjtcbiAgICB2YXIgeG4gPSAreDtcbiAgICB2YXIgeW4gPSAreTtcbiAgICB2YXIgeGwgPSBVSU5UMTYgJiB4bjtcbiAgICB2YXIgeWwgPSBVSU5UMTYgJiB5bjtcbiAgICByZXR1cm4gMCB8IHhsICogeWwgKyAoKFVJTlQxNiAmIHhuID4+PiAxNikgKiB5bCArIHhsICogKFVJTlQxNiAmIHluID4+PiAxNikgPDwgMTYgPj4+IDApO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///179\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.21 Math.log10(x)\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', {\n log10: function log10(x) {\n return Math.log(x) * Math.LOG10E;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5sb2cxMC5qcz83ODcyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIxODAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyMC4yLjIuMjEgTWF0aC5sb2cxMCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBsb2cxMDogZnVuY3Rpb24gbG9nMTAoeCkge1xuICAgIHJldHVybiBNYXRoLmxvZyh4KSAqIE1hdGguTE9HMTBFO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///180\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.20 Math.log1p(x)\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', { log1p: __webpack_require__(107) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5sb2cxcC5qcz8wNDlmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDLDRCQUE0QixRQUFRLG1CQUFPLENBQUMsR0FBZSxHQUFHIiwiZmlsZSI6IjE4MS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDIwLjIuMi4yMCBNYXRoLmxvZzFwKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7IGxvZzFwOiByZXF1aXJlKCcuL19tYXRoLWxvZzFwJykgfSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///181\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.22 Math.log2(x)\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', {\n log2: function log2(x) {\n return Math.log(x) / Math.LN2;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5sb2cyLmpzP2E2OWYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVzs7QUFFakM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjE4Mi5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDIwLjIuMi4yMiBNYXRoLmxvZzIoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgbG9nMjogZnVuY3Rpb24gbG9nMih4KSB7XG4gICAgcmV0dXJuIE1hdGgubG9nKHgpIC8gTWF0aC5MTjI7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///182\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.28 Math.sign(x)\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', { sign: __webpack_require__(75) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5zaWduLmpzPzBiMjEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVzs7QUFFakMsNEJBQTRCLE9BQU8sbUJBQU8sQ0FBQyxFQUFjLEdBQUciLCJmaWxlIjoiMTgzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMi4yLjI4IE1hdGguc2lnbih4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywgeyBzaWduOiByZXF1aXJlKCcuL19tYXRoLXNpZ24nKSB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///183\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.30 Math.sinh(x)\nvar $export = __webpack_require__(0);\nvar expm1 = __webpack_require__(76);\nvar exp = Math.exp;\n\n// V8 near Chromium 38 has a problem with very small numbers\n$export($export.S + $export.F * __webpack_require__(3)(function () {\n return !Math.sinh(-2e-17) != -2e-17;\n}), 'Math', {\n sinh: function sinh(x) {\n return Math.abs(x = +x) < 1\n ? (expm1(x) - expm1(-x)) / 2\n : (exp(x - 1) - exp(-x - 1)) * (Math.E / 2);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5zaW5oLmpzPzZjMWEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxZQUFZLG1CQUFPLENBQUMsRUFBZTtBQUNuQzs7QUFFQTtBQUNBLGdDQUFnQyxtQkFBTyxDQUFDLENBQVU7QUFDbEQ7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTg0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMi4yLjMwIE1hdGguc2luaCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBleHBtMSA9IHJlcXVpcmUoJy4vX21hdGgtZXhwbTEnKTtcbnZhciBleHAgPSBNYXRoLmV4cDtcblxuLy8gVjggbmVhciBDaHJvbWl1bSAzOCBoYXMgYSBwcm9ibGVtIHdpdGggdmVyeSBzbWFsbCBudW1iZXJzXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gIU1hdGguc2luaCgtMmUtMTcpICE9IC0yZS0xNztcbn0pLCAnTWF0aCcsIHtcbiAgc2luaDogZnVuY3Rpb24gc2luaCh4KSB7XG4gICAgcmV0dXJuIE1hdGguYWJzKHggPSAreCkgPCAxXG4gICAgICA/IChleHBtMSh4KSAtIGV4cG0xKC14KSkgLyAyXG4gICAgICA6IChleHAoeCAtIDEpIC0gZXhwKC14IC0gMSkpICogKE1hdGguRSAvIDIpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///184\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.33 Math.tanh(x)\nvar $export = __webpack_require__(0);\nvar expm1 = __webpack_require__(76);\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n tanh: function tanh(x) {\n var a = expm1(x = +x);\n var b = expm1(-x);\n return a == Infinity ? 1 : b == Infinity ? -1 : (a - b) / (exp(x) + exp(-x));\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC50YW5oLmpzP2M3YzYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxZQUFZLG1CQUFPLENBQUMsRUFBZTtBQUNuQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjE4NS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDIwLjIuMi4zMyBNYXRoLnRhbmgoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZXhwbTEgPSByZXF1aXJlKCcuL19tYXRoLWV4cG0xJyk7XG52YXIgZXhwID0gTWF0aC5leHA7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgdGFuaDogZnVuY3Rpb24gdGFuaCh4KSB7XG4gICAgdmFyIGEgPSBleHBtMSh4ID0gK3gpO1xuICAgIHZhciBiID0gZXhwbTEoLXgpO1xuICAgIHJldHVybiBhID09IEluZmluaXR5ID8gMSA6IGIgPT0gSW5maW5pdHkgPyAtMSA6IChhIC0gYikgLyAoZXhwKHgpICsgZXhwKC14KSk7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///185\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.34 Math.trunc(x)\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', {\n trunc: function trunc(it) {\n return (it > 0 ? Math.floor : Math.ceil)(it);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC50cnVuYy5qcz84NGI0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIxODYuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyMC4yLjIuMzQgTWF0aC50cnVuYyh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICB0cnVuYzogZnVuY3Rpb24gdHJ1bmMoaXQpIHtcbiAgICByZXR1cm4gKGl0ID4gMCA/IE1hdGguZmxvb3IgOiBNYXRoLmNlaWwpKGl0KTtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///186\n")},function(module,exports,__webpack_require__){eval("var $export = __webpack_require__(0);\nvar toAbsoluteIndex = __webpack_require__(35);\nvar fromCharCode = String.fromCharCode;\nvar $fromCodePoint = String.fromCodePoint;\n\n// length should be 1, old FF problem\n$export($export.S + $export.F * (!!$fromCodePoint && $fromCodePoint.length != 1), 'String', {\n // 21.1.2.2 String.fromCodePoint(...codePoints)\n fromCodePoint: function fromCodePoint(x) { // eslint-disable-line no-unused-vars\n var res = [];\n var aLen = arguments.length;\n var i = 0;\n var code;\n while (aLen > i) {\n code = +arguments[i++];\n if (toAbsoluteIndex(code, 0x10ffff) !== code) throw RangeError(code + ' is not a valid code point');\n res.push(code < 0x10000\n ? fromCharCode(code)\n : fromCharCode(((code -= 0x10000) >> 10) + 0xd800, code % 0x400 + 0xdc00)\n );\n } return res.join('');\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmZyb20tY29kZS1wb2ludC5qcz81Njk1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLHNCQUFzQixtQkFBTyxDQUFDLEVBQXNCO0FBQ3BEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsNENBQTRDO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxDQUFDIiwiZmlsZSI6IjE4Ny5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi9fdG8tYWJzb2x1dGUtaW5kZXgnKTtcbnZhciBmcm9tQ2hhckNvZGUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlO1xudmFyICRmcm9tQ29kZVBvaW50ID0gU3RyaW5nLmZyb21Db2RlUG9pbnQ7XG5cbi8vIGxlbmd0aCBzaG91bGQgYmUgMSwgb2xkIEZGIHByb2JsZW1cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogKCEhJGZyb21Db2RlUG9pbnQgJiYgJGZyb21Db2RlUG9pbnQubGVuZ3RoICE9IDEpLCAnU3RyaW5nJywge1xuICAvLyAyMS4xLjIuMiBTdHJpbmcuZnJvbUNvZGVQb2ludCguLi5jb2RlUG9pbnRzKVxuICBmcm9tQ29kZVBvaW50OiBmdW5jdGlvbiBmcm9tQ29kZVBvaW50KHgpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgIHZhciByZXMgPSBbXTtcbiAgICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBjb2RlO1xuICAgIHdoaWxlIChhTGVuID4gaSkge1xuICAgICAgY29kZSA9ICthcmd1bWVudHNbaSsrXTtcbiAgICAgIGlmICh0b0Fic29sdXRlSW5kZXgoY29kZSwgMHgxMGZmZmYpICE9PSBjb2RlKSB0aHJvdyBSYW5nZUVycm9yKGNvZGUgKyAnIGlzIG5vdCBhIHZhbGlkIGNvZGUgcG9pbnQnKTtcbiAgICAgIHJlcy5wdXNoKGNvZGUgPCAweDEwMDAwXG4gICAgICAgID8gZnJvbUNoYXJDb2RlKGNvZGUpXG4gICAgICAgIDogZnJvbUNoYXJDb2RlKCgoY29kZSAtPSAweDEwMDAwKSA+PiAxMCkgKyAweGQ4MDAsIGNvZGUgJSAweDQwMCArIDB4ZGMwMClcbiAgICAgICk7XG4gICAgfSByZXR1cm4gcmVzLmpvaW4oJycpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///187\n")},function(module,exports,__webpack_require__){eval("var $export = __webpack_require__(0);\nvar toIObject = __webpack_require__(15);\nvar toLength = __webpack_require__(6);\n\n$export($export.S, 'String', {\n // 21.1.2.4 String.raw(callSite, ...substitutions)\n raw: function raw(callSite) {\n var tpl = toIObject(callSite.raw);\n var len = toLength(tpl.length);\n var aLen = arguments.length;\n var res = [];\n var i = 0;\n while (len > i) {\n res.push(String(tpl[i++]));\n if (i < aLen) res.push(String(arguments[i]));\n } return res.join('');\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnJhdy5qcz83ODhkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGdCQUFnQixtQkFBTyxDQUFDLEVBQWU7QUFDdkMsZUFBZSxtQkFBTyxDQUFDLENBQWM7O0FBRXJDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxDQUFDIiwiZmlsZSI6IjE4OC5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnU3RyaW5nJywge1xuICAvLyAyMS4xLjIuNCBTdHJpbmcucmF3KGNhbGxTaXRlLCAuLi5zdWJzdGl0dXRpb25zKVxuICByYXc6IGZ1bmN0aW9uIHJhdyhjYWxsU2l0ZSkge1xuICAgIHZhciB0cGwgPSB0b0lPYmplY3QoY2FsbFNpdGUucmF3KTtcbiAgICB2YXIgbGVuID0gdG9MZW5ndGgodHBsLmxlbmd0aCk7XG4gICAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciByZXMgPSBbXTtcbiAgICB2YXIgaSA9IDA7XG4gICAgd2hpbGUgKGxlbiA+IGkpIHtcbiAgICAgIHJlcy5wdXNoKFN0cmluZyh0cGxbaSsrXSkpO1xuICAgICAgaWYgKGkgPCBhTGVuKSByZXMucHVzaChTdHJpbmcoYXJndW1lbnRzW2ldKSk7XG4gICAgfSByZXR1cm4gcmVzLmpvaW4oJycpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///188\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// 21.1.3.25 String.prototype.trim()\n__webpack_require__(45)('trim', function ($trim) {\n return function trim() {\n return $trim(this, 3);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnRyaW0uanM/NGYzNyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsbUJBQU8sQ0FBQyxFQUFnQjtBQUN4QjtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjE4OS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIDIxLjEuMy4yNSBTdHJpbmcucHJvdG90eXBlLnRyaW0oKVxucmVxdWlyZSgnLi9fc3RyaW5nLXRyaW0nKSgndHJpbScsIGZ1bmN0aW9uICgkdHJpbSkge1xuICByZXR1cm4gZnVuY3Rpb24gdHJpbSgpIHtcbiAgICByZXR1cm4gJHRyaW0odGhpcywgMyk7XG4gIH07XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///189\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $at = __webpack_require__(55)(true);\n\n// 21.1.3.27 String.prototype[@@iterator]()\n__webpack_require__(77)(String, 'String', function (iterated) {\n this._t = String(iterated); // target\n this._i = 0; // next index\n// 21.1.5.2.1 %StringIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var index = this._i;\n var point;\n if (index >= O.length) return { value: undefined, done: true };\n point = $at(O, index);\n this._i += point.length;\n return { value: point, done: false };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLml0ZXJhdG9yLmpzPzVkZjMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixVQUFVLG1CQUFPLENBQUMsRUFBYzs7QUFFaEM7QUFDQSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3hCLDZCQUE2QjtBQUM3QixjQUFjO0FBQ2Q7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDO0FBQ2pDO0FBQ0E7QUFDQSxVQUFVO0FBQ1YsQ0FBQyIsImZpbGUiOiIxOTAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgJGF0ID0gcmVxdWlyZSgnLi9fc3RyaW5nLWF0JykodHJ1ZSk7XG5cbi8vIDIxLjEuMy4yNyBTdHJpbmcucHJvdG90eXBlW0BAaXRlcmF0b3JdKClcbnJlcXVpcmUoJy4vX2l0ZXItZGVmaW5lJykoU3RyaW5nLCAnU3RyaW5nJywgZnVuY3Rpb24gKGl0ZXJhdGVkKSB7XG4gIHRoaXMuX3QgPSBTdHJpbmcoaXRlcmF0ZWQpOyAvLyB0YXJnZXRcbiAgdGhpcy5faSA9IDA7ICAgICAgICAgICAgICAgIC8vIG5leHQgaW5kZXhcbi8vIDIxLjEuNS4yLjEgJVN0cmluZ0l0ZXJhdG9yUHJvdG90eXBlJS5uZXh0KClcbn0sIGZ1bmN0aW9uICgpIHtcbiAgdmFyIE8gPSB0aGlzLl90O1xuICB2YXIgaW5kZXggPSB0aGlzLl9pO1xuICB2YXIgcG9pbnQ7XG4gIGlmIChpbmRleCA+PSBPLmxlbmd0aCkgcmV0dXJuIHsgdmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1ZSB9O1xuICBwb2ludCA9ICRhdChPLCBpbmRleCk7XG4gIHRoaXMuX2kgKz0gcG9pbnQubGVuZ3RoO1xuICByZXR1cm4geyB2YWx1ZTogcG9pbnQsIGRvbmU6IGZhbHNlIH07XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///190\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar $at = __webpack_require__(55)(false);\n$export($export.P, 'String', {\n // 21.1.3.3 String.prototype.codePointAt(pos)\n codePointAt: function codePointAt(pos) {\n return $at(this, pos);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmNvZGUtcG9pbnQtYXQuanM/YTAzMiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLFVBQVUsbUJBQU8sQ0FBQyxFQUFjO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjE5MS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGF0ID0gcmVxdWlyZSgnLi9fc3RyaW5nLWF0JykoZmFsc2UpO1xuJGV4cG9ydCgkZXhwb3J0LlAsICdTdHJpbmcnLCB7XG4gIC8vIDIxLjEuMy4zIFN0cmluZy5wcm90b3R5cGUuY29kZVBvaW50QXQocG9zKVxuICBjb2RlUG9pbnRBdDogZnVuY3Rpb24gY29kZVBvaW50QXQocG9zKSB7XG4gICAgcmV0dXJuICRhdCh0aGlzLCBwb3MpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///191\n")},function(module,exports,__webpack_require__){"use strict";eval("// 21.1.3.6 String.prototype.endsWith(searchString [, endPosition])\n\nvar $export = __webpack_require__(0);\nvar toLength = __webpack_require__(6);\nvar context = __webpack_require__(79);\nvar ENDS_WITH = 'endsWith';\nvar $endsWith = ''[ENDS_WITH];\n\n$export($export.P + $export.F * __webpack_require__(80)(ENDS_WITH), 'String', {\n endsWith: function endsWith(searchString /* , endPosition = @length */) {\n var that = context(this, searchString, ENDS_WITH);\n var endPosition = arguments.length > 1 ? arguments[1] : undefined;\n var len = toLength(that.length);\n var end = endPosition === undefined ? len : Math.min(toLength(endPosition), len);\n var search = String(searchString);\n return $endsWith\n ? $endsWith.call(that, search, end)\n : that.slice(end - search.length, end) === search;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmVuZHMtd2l0aC5qcz9hZWY2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ2E7QUFDYixjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxjQUFjLG1CQUFPLENBQUMsRUFBbUI7QUFDekM7QUFDQTs7QUFFQSxnQ0FBZ0MsbUJBQU8sQ0FBQyxFQUFvQjtBQUM1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTkyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjEuMS4zLjYgU3RyaW5nLnByb3RvdHlwZS5lbmRzV2l0aChzZWFyY2hTdHJpbmcgWywgZW5kUG9zaXRpb25dKVxuJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGNvbnRleHQgPSByZXF1aXJlKCcuL19zdHJpbmctY29udGV4dCcpO1xudmFyIEVORFNfV0lUSCA9ICdlbmRzV2l0aCc7XG52YXIgJGVuZHNXaXRoID0gJydbRU5EU19XSVRIXTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscy1pcy1yZWdleHAnKShFTkRTX1dJVEgpLCAnU3RyaW5nJywge1xuICBlbmRzV2l0aDogZnVuY3Rpb24gZW5kc1dpdGgoc2VhcmNoU3RyaW5nIC8qICwgZW5kUG9zaXRpb24gPSBAbGVuZ3RoICovKSB7XG4gICAgdmFyIHRoYXQgPSBjb250ZXh0KHRoaXMsIHNlYXJjaFN0cmluZywgRU5EU19XSVRIKTtcbiAgICB2YXIgZW5kUG9zaXRpb24gPSBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgbGVuID0gdG9MZW5ndGgodGhhdC5sZW5ndGgpO1xuICAgIHZhciBlbmQgPSBlbmRQb3NpdGlvbiA9PT0gdW5kZWZpbmVkID8gbGVuIDogTWF0aC5taW4odG9MZW5ndGgoZW5kUG9zaXRpb24pLCBsZW4pO1xuICAgIHZhciBzZWFyY2ggPSBTdHJpbmcoc2VhcmNoU3RyaW5nKTtcbiAgICByZXR1cm4gJGVuZHNXaXRoXG4gICAgICA/ICRlbmRzV2l0aC5jYWxsKHRoYXQsIHNlYXJjaCwgZW5kKVxuICAgICAgOiB0aGF0LnNsaWNlKGVuZCAtIHNlYXJjaC5sZW5ndGgsIGVuZCkgPT09IHNlYXJjaDtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///192\n")},function(module,exports,__webpack_require__){"use strict";eval("// 21.1.3.7 String.prototype.includes(searchString, position = 0)\n\nvar $export = __webpack_require__(0);\nvar context = __webpack_require__(79);\nvar INCLUDES = 'includes';\n\n$export($export.P + $export.F * __webpack_require__(80)(INCLUDES), 'String', {\n includes: function includes(searchString /* , position = 0 */) {\n return !!~context(this, searchString, INCLUDES)\n .indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmluY2x1ZGVzLmpzPzJmZGIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDYTtBQUNiLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGNBQWMsbUJBQU8sQ0FBQyxFQUFtQjtBQUN6Qzs7QUFFQSxnQ0FBZ0MsbUJBQU8sQ0FBQyxFQUFvQjtBQUM1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTkzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjEuMS4zLjcgU3RyaW5nLnByb3RvdHlwZS5pbmNsdWRlcyhzZWFyY2hTdHJpbmcsIHBvc2l0aW9uID0gMClcbid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgY29udGV4dCA9IHJlcXVpcmUoJy4vX3N0cmluZy1jb250ZXh0Jyk7XG52YXIgSU5DTFVERVMgPSAnaW5jbHVkZXMnO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzLWlzLXJlZ2V4cCcpKElOQ0xVREVTKSwgJ1N0cmluZycsIHtcbiAgaW5jbHVkZXM6IGZ1bmN0aW9uIGluY2x1ZGVzKHNlYXJjaFN0cmluZyAvKiAsIHBvc2l0aW9uID0gMCAqLykge1xuICAgIHJldHVybiAhIX5jb250ZXh0KHRoaXMsIHNlYXJjaFN0cmluZywgSU5DTFVERVMpXG4gICAgICAuaW5kZXhPZihzZWFyY2hTdHJpbmcsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///193\n")},function(module,exports,__webpack_require__){eval("var $export = __webpack_require__(0);\n\n$export($export.P, 'String', {\n // 21.1.3.13 String.prototype.repeat(count)\n repeat: __webpack_require__(74)\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnJlcGVhdC5qcz8xNGI5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXOztBQUVqQztBQUNBO0FBQ0EsVUFBVSxtQkFBTyxDQUFDLEVBQWtCO0FBQ3BDLENBQUMiLCJmaWxlIjoiMTk0LmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdTdHJpbmcnLCB7XG4gIC8vIDIxLjEuMy4xMyBTdHJpbmcucHJvdG90eXBlLnJlcGVhdChjb3VudClcbiAgcmVwZWF0OiByZXF1aXJlKCcuL19zdHJpbmctcmVwZWF0Jylcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///194\n")},function(module,exports,__webpack_require__){"use strict";eval("// 21.1.3.18 String.prototype.startsWith(searchString [, position ])\n\nvar $export = __webpack_require__(0);\nvar toLength = __webpack_require__(6);\nvar context = __webpack_require__(79);\nvar STARTS_WITH = 'startsWith';\nvar $startsWith = ''[STARTS_WITH];\n\n$export($export.P + $export.F * __webpack_require__(80)(STARTS_WITH), 'String', {\n startsWith: function startsWith(searchString /* , position = 0 */) {\n var that = context(this, searchString, STARTS_WITH);\n var index = toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length));\n var search = String(searchString);\n return $startsWith\n ? $startsWith.call(that, search, index)\n : that.slice(index, index + search.length) === search;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnN0YXJ0cy13aXRoLmpzP2Y1NTkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDYTtBQUNiLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGNBQWMsbUJBQU8sQ0FBQyxFQUFtQjtBQUN6QztBQUNBOztBQUVBLGdDQUFnQyxtQkFBTyxDQUFDLEVBQW9CO0FBQzVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjE5NS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDIxLjEuMy4xOCBTdHJpbmcucHJvdG90eXBlLnN0YXJ0c1dpdGgoc2VhcmNoU3RyaW5nIFssIHBvc2l0aW9uIF0pXG4ndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgY29udGV4dCA9IHJlcXVpcmUoJy4vX3N0cmluZy1jb250ZXh0Jyk7XG52YXIgU1RBUlRTX1dJVEggPSAnc3RhcnRzV2l0aCc7XG52YXIgJHN0YXJ0c1dpdGggPSAnJ1tTVEFSVFNfV0lUSF07XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMtaXMtcmVnZXhwJykoU1RBUlRTX1dJVEgpLCAnU3RyaW5nJywge1xuICBzdGFydHNXaXRoOiBmdW5jdGlvbiBzdGFydHNXaXRoKHNlYXJjaFN0cmluZyAvKiAsIHBvc2l0aW9uID0gMCAqLykge1xuICAgIHZhciB0aGF0ID0gY29udGV4dCh0aGlzLCBzZWFyY2hTdHJpbmcsIFNUQVJUU19XSVRIKTtcbiAgICB2YXIgaW5kZXggPSB0b0xlbmd0aChNYXRoLm1pbihhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCwgdGhhdC5sZW5ndGgpKTtcbiAgICB2YXIgc2VhcmNoID0gU3RyaW5nKHNlYXJjaFN0cmluZyk7XG4gICAgcmV0dXJuICRzdGFydHNXaXRoXG4gICAgICA/ICRzdGFydHNXaXRoLmNhbGwodGhhdCwgc2VhcmNoLCBpbmRleClcbiAgICAgIDogdGhhdC5zbGljZShpbmRleCwgaW5kZXggKyBzZWFyY2gubGVuZ3RoKSA9PT0gc2VhcmNoO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///195\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// B.2.3.2 String.prototype.anchor(name)\n__webpack_require__(13)('anchor', function (createHTML) {\n return function anchor(name) {\n return createHTML(this, 'a', 'name', name);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmFuY2hvci5qcz84NDQ5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTk2LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuMiBTdHJpbmcucHJvdG90eXBlLmFuY2hvcihuYW1lKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnYW5jaG9yJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGFuY2hvcihuYW1lKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ2EnLCAnbmFtZScsIG5hbWUpO1xuICB9O1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///196\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// B.2.3.3 String.prototype.big()\n__webpack_require__(13)('big', function (createHTML) {\n return function big() {\n return createHTML(this, 'big', '', '');\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmJpZy5qcz85Yzg2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTk3LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuMyBTdHJpbmcucHJvdG90eXBlLmJpZygpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdiaWcnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gYmlnKCkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdiaWcnLCAnJywgJycpO1xuICB9O1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///197\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// B.2.3.4 String.prototype.blink()\n__webpack_require__(13)('blink', function (createHTML) {\n return function blink() {\n return createHTML(this, 'blink', '', '');\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmJsaW5rLmpzP2ZhODMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBLG1CQUFPLENBQUMsRUFBZ0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIxOTguanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy40IFN0cmluZy5wcm90b3R5cGUuYmxpbmsoKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnYmxpbmsnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gYmxpbmsoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ2JsaW5rJywgJycsICcnKTtcbiAgfTtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///198\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// B.2.3.5 String.prototype.bold()\n__webpack_require__(13)('bold', function (createHTML) {\n return function bold() {\n return createHTML(this, 'b', '', '');\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmJvbGQuanM/NDhjMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsbUJBQU8sQ0FBQyxFQUFnQjtBQUN4QjtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjE5OS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjUgU3RyaW5nLnByb3RvdHlwZS5ib2xkKClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ2JvbGQnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gYm9sZCgpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnYicsICcnLCAnJyk7XG4gIH07XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///199\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// B.2.3.6 String.prototype.fixed()\n__webpack_require__(13)('fixed', function (createHTML) {\n return function fixed() {\n return createHTML(this, 'tt', '', '');\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmZpeGVkLmpzP2QyNjMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBLG1CQUFPLENBQUMsRUFBZ0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyMDAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy42IFN0cmluZy5wcm90b3R5cGUuZml4ZWQoKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnZml4ZWQnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gZml4ZWQoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ3R0JywgJycsICcnKTtcbiAgfTtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///200\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// B.2.3.7 String.prototype.fontcolor(color)\n__webpack_require__(13)('fontcolor', function (createHTML) {\n return function fontcolor(color) {\n return createHTML(this, 'font', 'color', color);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmZvbnRjb2xvci5qcz82YzM3Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjAxLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuNyBTdHJpbmcucHJvdG90eXBlLmZvbnRjb2xvcihjb2xvcilcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ2ZvbnRjb2xvcicsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBmb250Y29sb3IoY29sb3IpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnZm9udCcsICdjb2xvcicsIGNvbG9yKTtcbiAgfTtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///201\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// B.2.3.8 String.prototype.fontsize(size)\n__webpack_require__(13)('fontsize', function (createHTML) {\n return function fontsize(size) {\n return createHTML(this, 'font', 'size', size);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmZvbnRzaXplLmpzPzllYzgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBLG1CQUFPLENBQUMsRUFBZ0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyMDIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy44IFN0cmluZy5wcm90b3R5cGUuZm9udHNpemUoc2l6ZSlcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ2ZvbnRzaXplJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGZvbnRzaXplKHNpemUpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnZm9udCcsICdzaXplJywgc2l6ZSk7XG4gIH07XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///202\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// B.2.3.9 String.prototype.italics()\n__webpack_require__(13)('italics', function (createHTML) {\n return function italics() {\n return createHTML(this, 'i', '', '');\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLml0YWxpY3MuanM/ZDBiMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsbUJBQU8sQ0FBQyxFQUFnQjtBQUN4QjtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjIwMy5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjkgU3RyaW5nLnByb3RvdHlwZS5pdGFsaWNzKClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ2l0YWxpY3MnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gaXRhbGljcygpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnaScsICcnLCAnJyk7XG4gIH07XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///203\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// B.2.3.10 String.prototype.link(url)\n__webpack_require__(13)('link', function (createHTML) {\n return function link(url) {\n return createHTML(this, 'a', 'href', url);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmxpbmsuanM/YjU0YSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsbUJBQU8sQ0FBQyxFQUFnQjtBQUN4QjtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjIwNC5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjEwIFN0cmluZy5wcm90b3R5cGUubGluayh1cmwpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdsaW5rJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGxpbmsodXJsKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ2EnLCAnaHJlZicsIHVybCk7XG4gIH07XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///204\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// B.2.3.11 String.prototype.small()\n__webpack_require__(13)('small', function (createHTML) {\n return function small() {\n return createHTML(this, 'small', '', '');\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnNtYWxsLmpzP2YzODYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBLG1CQUFPLENBQUMsRUFBZ0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyMDUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy4xMSBTdHJpbmcucHJvdG90eXBlLnNtYWxsKClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ3NtYWxsJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHNtYWxsKCkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdzbWFsbCcsICcnLCAnJyk7XG4gIH07XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///205\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// B.2.3.12 String.prototype.strike()\n__webpack_require__(13)('strike', function (createHTML) {\n return function strike() {\n return createHTML(this, 'strike', '', '');\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnN0cmlrZS5qcz8xNDQ4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjA2LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuMTIgU3RyaW5nLnByb3RvdHlwZS5zdHJpa2UoKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnc3RyaWtlJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHN0cmlrZSgpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnc3RyaWtlJywgJycsICcnKTtcbiAgfTtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///206\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// B.2.3.13 String.prototype.sub()\n__webpack_require__(13)('sub', function (createHTML) {\n return function sub() {\n return createHTML(this, 'sub', '', '');\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnN1Yi5qcz82NzNlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjA3LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuMTMgU3RyaW5nLnByb3RvdHlwZS5zdWIoKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnc3ViJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHN1YigpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnc3ViJywgJycsICcnKTtcbiAgfTtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///207\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// B.2.3.14 String.prototype.sup()\n__webpack_require__(13)('sup', function (createHTML) {\n return function sup() {\n return createHTML(this, 'sup', '', '');\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnN1cC5qcz8yNDJhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjA4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuMTQgU3RyaW5nLnByb3RvdHlwZS5zdXAoKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnc3VwJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHN1cCgpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnc3VwJywgJycsICcnKTtcbiAgfTtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///208\n")},function(module,exports,__webpack_require__){eval("// 20.3.3.1 / 15.9.4.4 Date.now()\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Date', { now: function () { return new Date().getTime(); } });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZGF0ZS5ub3cuanM/NzhjZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXOztBQUVqQyw0QkFBNEIsbUJBQW1CLDZCQUE2QixFQUFFLEVBQUUiLCJmaWxlIjoiMjA5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMy4zLjEgLyAxNS45LjQuNCBEYXRlLm5vdygpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ0RhdGUnLCB7IG5vdzogZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IERhdGUoKS5nZXRUaW1lKCk7IH0gfSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///209\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar toObject = __webpack_require__(9);\nvar toPrimitive = __webpack_require__(23);\n\n$export($export.P + $export.F * __webpack_require__(3)(function () {\n return new Date(NaN).toJSON() !== null\n || Date.prototype.toJSON.call({ toISOString: function () { return 1; } }) !== 1;\n}), 'Date', {\n // eslint-disable-next-line no-unused-vars\n toJSON: function toJSON(key) {\n var O = toObject(this);\n var pv = toPrimitive(O);\n return typeof pv == 'number' && !isFinite(pv) ? null : O.toISOString();\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZGF0ZS50by1qc29uLmpzPzAyOTgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxrQkFBa0IsbUJBQU8sQ0FBQyxFQUFpQjs7QUFFM0MsZ0NBQWdDLG1CQUFPLENBQUMsQ0FBVTtBQUNsRDtBQUNBLG1DQUFtQywyQkFBMkIsVUFBVSxFQUFFLEVBQUU7QUFDNUUsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjEwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBuZXcgRGF0ZShOYU4pLnRvSlNPTigpICE9PSBudWxsXG4gICAgfHwgRGF0ZS5wcm90b3R5cGUudG9KU09OLmNhbGwoeyB0b0lTT1N0cmluZzogZnVuY3Rpb24gKCkgeyByZXR1cm4gMTsgfSB9KSAhPT0gMTtcbn0pLCAnRGF0ZScsIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gIHRvSlNPTjogZnVuY3Rpb24gdG9KU09OKGtleSkge1xuICAgIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gICAgdmFyIHB2ID0gdG9QcmltaXRpdmUoTyk7XG4gICAgcmV0dXJuIHR5cGVvZiBwdiA9PSAnbnVtYmVyJyAmJiAhaXNGaW5pdGUocHYpID8gbnVsbCA6IE8udG9JU09TdHJpbmcoKTtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///210\n")},function(module,exports,__webpack_require__){eval("// 20.3.4.36 / 15.9.5.43 Date.prototype.toISOString()\nvar $export = __webpack_require__(0);\nvar toISOString = __webpack_require__(212);\n\n// PhantomJS / old WebKit has a broken implementations\n$export($export.P + $export.F * (Date.prototype.toISOString !== toISOString), 'Date', {\n toISOString: toISOString\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZGF0ZS50by1pc28tc3RyaW5nLmpzPzhlYTUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxrQkFBa0IsbUJBQU8sQ0FBQyxHQUF1Qjs7QUFFakQ7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyMTEuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyMC4zLjQuMzYgLyAxNS45LjUuNDMgRGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmcoKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b0lTT1N0cmluZyA9IHJlcXVpcmUoJy4vX2RhdGUtdG8taXNvLXN0cmluZycpO1xuXG4vLyBQaGFudG9tSlMgLyBvbGQgV2ViS2l0IGhhcyBhIGJyb2tlbiBpbXBsZW1lbnRhdGlvbnNcbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKERhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nICE9PSB0b0lTT1N0cmluZyksICdEYXRlJywge1xuICB0b0lTT1N0cmluZzogdG9JU09TdHJpbmdcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///211\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// 20.3.4.36 / 15.9.5.43 Date.prototype.toISOString()\nvar fails = __webpack_require__(3);\nvar getTime = Date.prototype.getTime;\nvar $toISOString = Date.prototype.toISOString;\n\nvar lz = function (num) {\n return num > 9 ? num : '0' + num;\n};\n\n// PhantomJS / old WebKit has a broken implementations\nmodule.exports = (fails(function () {\n return $toISOString.call(new Date(-5e13 - 1)) != '0385-07-25T07:06:39.999Z';\n}) || !fails(function () {\n $toISOString.call(new Date(NaN));\n})) ? function toISOString() {\n if (!isFinite(getTime.call(this))) throw RangeError('Invalid time value');\n var d = this;\n var y = d.getUTCFullYear();\n var m = d.getUTCMilliseconds();\n var s = y < 0 ? '-' : y > 9999 ? '+' : '';\n return s + ('00000' + Math.abs(y)).slice(s ? -6 : -4) +\n '-' + lz(d.getUTCMonth() + 1) + '-' + lz(d.getUTCDate()) +\n 'T' + lz(d.getUTCHours()) + ':' + lz(d.getUTCMinutes()) +\n ':' + lz(d.getUTCSeconds()) + '.' + (m > 99 ? m : '0' + lz(m)) + 'Z';\n} : $toISOString;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZGF0ZS10by1pc28tc3RyaW5nLmpzPzhlZDAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBLFlBQVksbUJBQU8sQ0FBQyxDQUFVO0FBQzlCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjIxMi5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIDIwLjMuNC4zNiAvIDE1LjkuNS40MyBEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZygpXG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIGdldFRpbWUgPSBEYXRlLnByb3RvdHlwZS5nZXRUaW1lO1xudmFyICR0b0lTT1N0cmluZyA9IERhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nO1xuXG52YXIgbHogPSBmdW5jdGlvbiAobnVtKSB7XG4gIHJldHVybiBudW0gPiA5ID8gbnVtIDogJzAnICsgbnVtO1xufTtcblxuLy8gUGhhbnRvbUpTIC8gb2xkIFdlYktpdCBoYXMgYSBicm9rZW4gaW1wbGVtZW50YXRpb25zXG5tb2R1bGUuZXhwb3J0cyA9IChmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAkdG9JU09TdHJpbmcuY2FsbChuZXcgRGF0ZSgtNWUxMyAtIDEpKSAhPSAnMDM4NS0wNy0yNVQwNzowNjozOS45OTlaJztcbn0pIHx8ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICR0b0lTT1N0cmluZy5jYWxsKG5ldyBEYXRlKE5hTikpO1xufSkpID8gZnVuY3Rpb24gdG9JU09TdHJpbmcoKSB7XG4gIGlmICghaXNGaW5pdGUoZ2V0VGltZS5jYWxsKHRoaXMpKSkgdGhyb3cgUmFuZ2VFcnJvcignSW52YWxpZCB0aW1lIHZhbHVlJyk7XG4gIHZhciBkID0gdGhpcztcbiAgdmFyIHkgPSBkLmdldFVUQ0Z1bGxZZWFyKCk7XG4gIHZhciBtID0gZC5nZXRVVENNaWxsaXNlY29uZHMoKTtcbiAgdmFyIHMgPSB5IDwgMCA/ICctJyA6IHkgPiA5OTk5ID8gJysnIDogJyc7XG4gIHJldHVybiBzICsgKCcwMDAwMCcgKyBNYXRoLmFicyh5KSkuc2xpY2UocyA/IC02IDogLTQpICtcbiAgICAnLScgKyBseihkLmdldFVUQ01vbnRoKCkgKyAxKSArICctJyArIGx6KGQuZ2V0VVRDRGF0ZSgpKSArXG4gICAgJ1QnICsgbHooZC5nZXRVVENIb3VycygpKSArICc6JyArIGx6KGQuZ2V0VVRDTWludXRlcygpKSArXG4gICAgJzonICsgbHooZC5nZXRVVENTZWNvbmRzKCkpICsgJy4nICsgKG0gPiA5OSA/IG0gOiAnMCcgKyBseihtKSkgKyAnWic7XG59IDogJHRvSVNPU3RyaW5nO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///212\n")},function(module,exports,__webpack_require__){eval("var DateProto = Date.prototype;\nvar INVALID_DATE = 'Invalid Date';\nvar TO_STRING = 'toString';\nvar $toString = DateProto[TO_STRING];\nvar getTime = DateProto.getTime;\nif (new Date(NaN) + '' != INVALID_DATE) {\n __webpack_require__(12)(DateProto, TO_STRING, function toString() {\n var value = getTime.call(this);\n // eslint-disable-next-line no-self-compare\n return value === value ? $toString.call(this) : INVALID_DATE;\n });\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZGF0ZS50by1zdHJpbmcuanM/ODdiMyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLG1CQUFPLENBQUMsRUFBYTtBQUN2QjtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0giLCJmaWxlIjoiMjEzLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIERhdGVQcm90byA9IERhdGUucHJvdG90eXBlO1xudmFyIElOVkFMSURfREFURSA9ICdJbnZhbGlkIERhdGUnO1xudmFyIFRPX1NUUklORyA9ICd0b1N0cmluZyc7XG52YXIgJHRvU3RyaW5nID0gRGF0ZVByb3RvW1RPX1NUUklOR107XG52YXIgZ2V0VGltZSA9IERhdGVQcm90by5nZXRUaW1lO1xuaWYgKG5ldyBEYXRlKE5hTikgKyAnJyAhPSBJTlZBTElEX0RBVEUpIHtcbiAgcmVxdWlyZSgnLi9fcmVkZWZpbmUnKShEYXRlUHJvdG8sIFRPX1NUUklORywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgdmFyIHZhbHVlID0gZ2V0VGltZS5jYWxsKHRoaXMpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICByZXR1cm4gdmFsdWUgPT09IHZhbHVlID8gJHRvU3RyaW5nLmNhbGwodGhpcykgOiBJTlZBTElEX0RBVEU7XG4gIH0pO1xufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///213\n")},function(module,exports,__webpack_require__){eval("var TO_PRIMITIVE = __webpack_require__(5)('toPrimitive');\nvar proto = Date.prototype;\n\nif (!(TO_PRIMITIVE in proto)) __webpack_require__(11)(proto, TO_PRIMITIVE, __webpack_require__(215));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZGF0ZS50by1wcmltaXRpdmUuanM/YzhjZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxtQkFBbUIsbUJBQU8sQ0FBQyxDQUFRO0FBQ25DOztBQUVBLDhCQUE4QixtQkFBTyxDQUFDLEVBQVMsdUJBQXVCLG1CQUFPLENBQUMsR0FBc0IiLCJmaWxlIjoiMjE0LmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIFRPX1BSSU1JVElWRSA9IHJlcXVpcmUoJy4vX3drcycpKCd0b1ByaW1pdGl2ZScpO1xudmFyIHByb3RvID0gRGF0ZS5wcm90b3R5cGU7XG5cbmlmICghKFRPX1BSSU1JVElWRSBpbiBwcm90bykpIHJlcXVpcmUoJy4vX2hpZGUnKShwcm90bywgVE9fUFJJTUlUSVZFLCByZXF1aXJlKCcuL19kYXRlLXRvLXByaW1pdGl2ZScpKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///214\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar anObject = __webpack_require__(1);\nvar toPrimitive = __webpack_require__(23);\nvar NUMBER = 'number';\n\nmodule.exports = function (hint) {\n if (hint !== 'string' && hint !== NUMBER && hint !== 'default') throw TypeError('Incorrect hint');\n return toPrimitive(anObject(this), hint != NUMBER);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZGF0ZS10by1wcmltaXRpdmUuanM/ODM4MSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGtCQUFrQixtQkFBTyxDQUFDLEVBQWlCO0FBQzNDOztBQUVBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjIxNS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG52YXIgTlVNQkVSID0gJ251bWJlcic7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGhpbnQpIHtcbiAgaWYgKGhpbnQgIT09ICdzdHJpbmcnICYmIGhpbnQgIT09IE5VTUJFUiAmJiBoaW50ICE9PSAnZGVmYXVsdCcpIHRocm93IFR5cGVFcnJvcignSW5jb3JyZWN0IGhpbnQnKTtcbiAgcmV0dXJuIHRvUHJpbWl0aXZlKGFuT2JqZWN0KHRoaXMpLCBoaW50ICE9IE5VTUJFUik7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///215\n")},function(module,exports,__webpack_require__){eval("// 22.1.2.2 / 15.4.3.2 Array.isArray(arg)\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Array', { isArray: __webpack_require__(54) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuaXMtYXJyYXkuanM/MmNhZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXOztBQUVqQyw2QkFBNkIsVUFBVSxtQkFBTyxDQUFDLEVBQWEsR0FBRyIsImZpbGUiOiIyMTYuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyMi4xLjIuMiAvIDE1LjQuMy4yIEFycmF5LmlzQXJyYXkoYXJnKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdBcnJheScsIHsgaXNBcnJheTogcmVxdWlyZSgnLi9faXMtYXJyYXknKSB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///216\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar ctx = __webpack_require__(19);\nvar $export = __webpack_require__(0);\nvar toObject = __webpack_require__(9);\nvar call = __webpack_require__(109);\nvar isArrayIter = __webpack_require__(81);\nvar toLength = __webpack_require__(6);\nvar createProperty = __webpack_require__(82);\nvar getIterFn = __webpack_require__(83);\n\n$export($export.S + $export.F * !__webpack_require__(57)(function (iter) { Array.from(iter); }), 'Array', {\n // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)\n from: function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n var O = toObject(arrayLike);\n var C = typeof this == 'function' ? this : Array;\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var index = 0;\n var iterFn = getIterFn(O);\n var length, result, step, iterator;\n if (mapping) mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);\n // if object isn't iterable or it's array with default iterator - use simple case\n if (iterFn != undefined && !(C == Array && isArrayIter(iterFn))) {\n for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) {\n createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);\n }\n } else {\n length = toLength(O.length);\n for (result = new C(length); length > index; index++) {\n createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);\n }\n }\n result.length = index;\n return result;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZnJvbS5qcz8xYzRjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsVUFBVSxtQkFBTyxDQUFDLEVBQVE7QUFDMUIsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsV0FBVyxtQkFBTyxDQUFDLEdBQWM7QUFDakMsa0JBQWtCLG1CQUFPLENBQUMsRUFBa0I7QUFDNUMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMscUJBQXFCLG1CQUFPLENBQUMsRUFBb0I7QUFDakQsZ0JBQWdCLG1CQUFPLENBQUMsRUFBNEI7O0FBRXBELGlDQUFpQyxtQkFBTyxDQUFDLEVBQWdCLG1CQUFtQixrQkFBa0IsRUFBRTtBQUNoRztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVEQUF1RCxnQ0FBZ0M7QUFDdkY7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLGtDQUFrQyxnQkFBZ0I7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyMTcuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4vX2l0ZXItY2FsbCcpO1xudmFyIGlzQXJyYXlJdGVyID0gcmVxdWlyZSgnLi9faXMtYXJyYXktaXRlcicpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSByZXF1aXJlKCcuL19jcmVhdGUtcHJvcGVydHknKTtcbnZhciBnZXRJdGVyRm4gPSByZXF1aXJlKCcuL2NvcmUuZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19pdGVyLWRldGVjdCcpKGZ1bmN0aW9uIChpdGVyKSB7IEFycmF5LmZyb20oaXRlcik7IH0pLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMi4xIEFycmF5LmZyb20oYXJyYXlMaWtlLCBtYXBmbiA9IHVuZGVmaW5lZCwgdGhpc0FyZyA9IHVuZGVmaW5lZClcbiAgZnJvbTogZnVuY3Rpb24gZnJvbShhcnJheUxpa2UgLyogLCBtYXBmbiA9IHVuZGVmaW5lZCwgdGhpc0FyZyA9IHVuZGVmaW5lZCAqLykge1xuICAgIHZhciBPID0gdG9PYmplY3QoYXJyYXlMaWtlKTtcbiAgICB2YXIgQyA9IHR5cGVvZiB0aGlzID09ICdmdW5jdGlvbicgPyB0aGlzIDogQXJyYXk7XG4gICAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBtYXBmbiA9IGFMZW4gPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkO1xuICAgIHZhciBtYXBwaW5nID0gbWFwZm4gIT09IHVuZGVmaW5lZDtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciBpdGVyRm4gPSBnZXRJdGVyRm4oTyk7XG4gICAgdmFyIGxlbmd0aCwgcmVzdWx0LCBzdGVwLCBpdGVyYXRvcjtcbiAgICBpZiAobWFwcGluZykgbWFwZm4gPSBjdHgobWFwZm4sIGFMZW4gPiAyID8gYXJndW1lbnRzWzJdIDogdW5kZWZpbmVkLCAyKTtcbiAgICAvLyBpZiBvYmplY3QgaXNuJ3QgaXRlcmFibGUgb3IgaXQncyBhcnJheSB3aXRoIGRlZmF1bHQgaXRlcmF0b3IgLSB1c2Ugc2ltcGxlIGNhc2VcbiAgICBpZiAoaXRlckZuICE9IHVuZGVmaW5lZCAmJiAhKEMgPT0gQXJyYXkgJiYgaXNBcnJheUl0ZXIoaXRlckZuKSkpIHtcbiAgICAgIGZvciAoaXRlcmF0b3IgPSBpdGVyRm4uY2FsbChPKSwgcmVzdWx0ID0gbmV3IEMoKTsgIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lOyBpbmRleCsrKSB7XG4gICAgICAgIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwgaW5kZXgsIG1hcHBpbmcgPyBjYWxsKGl0ZXJhdG9yLCBtYXBmbiwgW3N0ZXAudmFsdWUsIGluZGV4XSwgdHJ1ZSkgOiBzdGVwLnZhbHVlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICAgICAgZm9yIChyZXN1bHQgPSBuZXcgQyhsZW5ndGgpOyBsZW5ndGggPiBpbmRleDsgaW5kZXgrKykge1xuICAgICAgICBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIGluZGV4LCBtYXBwaW5nID8gbWFwZm4oT1tpbmRleF0sIGluZGV4KSA6IE9baW5kZXhdKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmVzdWx0Lmxlbmd0aCA9IGluZGV4O1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///217\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar createProperty = __webpack_require__(82);\n\n// WebKit Array.of isn't generic\n$export($export.S + $export.F * __webpack_require__(3)(function () {\n function F() { /* empty */ }\n return !(Array.of.call(F) instanceof F);\n}), 'Array', {\n // 22.1.2.3 Array.of( ...items)\n of: function of(/* ...args */) {\n var index = 0;\n var aLen = arguments.length;\n var result = new (typeof this == 'function' ? this : Array)(aLen);\n while (aLen > index) createProperty(result, index, arguments[index++]);\n result.length = aLen;\n return result;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkub2YuanM/ZTgwNCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLHFCQUFxQixtQkFBTyxDQUFDLEVBQW9COztBQUVqRDtBQUNBLGdDQUFnQyxtQkFBTyxDQUFDLENBQVU7QUFDbEQsZ0JBQWdCO0FBQ2hCO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjE4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX2NyZWF0ZS1wcm9wZXJ0eScpO1xuXG4vLyBXZWJLaXQgQXJyYXkub2YgaXNuJ3QgZ2VuZXJpY1xuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gRigpIHsgLyogZW1wdHkgKi8gfVxuICByZXR1cm4gIShBcnJheS5vZi5jYWxsKEYpIGluc3RhbmNlb2YgRik7XG59KSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjIuMyBBcnJheS5vZiggLi4uaXRlbXMpXG4gIG9mOiBmdW5jdGlvbiBvZigvKiAuLi5hcmdzICovKSB7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIHJlc3VsdCA9IG5ldyAodHlwZW9mIHRoaXMgPT0gJ2Z1bmN0aW9uJyA/IHRoaXMgOiBBcnJheSkoYUxlbik7XG4gICAgd2hpbGUgKGFMZW4gPiBpbmRleCkgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBpbmRleCwgYXJndW1lbnRzW2luZGV4KytdKTtcbiAgICByZXN1bHQubGVuZ3RoID0gYUxlbjtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///218\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// 22.1.3.13 Array.prototype.join(separator)\nvar $export = __webpack_require__(0);\nvar toIObject = __webpack_require__(15);\nvar arrayJoin = [].join;\n\n// fallback for not array-like strings\n$export($export.P + $export.F * (__webpack_require__(48) != Object || !__webpack_require__(22)(arrayJoin)), 'Array', {\n join: function join(separator) {\n return arrayJoin.call(toIObject(this), separator === undefined ? ',' : separator);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuam9pbi5qcz8zNzNmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDOztBQUVBO0FBQ0EsaUNBQWlDLG1CQUFPLENBQUMsRUFBWSxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFrQjtBQUMvRjtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjIxOS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIDIyLjEuMy4xMyBBcnJheS5wcm90b3R5cGUuam9pbihzZXBhcmF0b3IpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciBhcnJheUpvaW4gPSBbXS5qb2luO1xuXG4vLyBmYWxsYmFjayBmb3Igbm90IGFycmF5LWxpa2Ugc3RyaW5nc1xuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAocmVxdWlyZSgnLi9faW9iamVjdCcpICE9IE9iamVjdCB8fCAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKGFycmF5Sm9pbikpLCAnQXJyYXknLCB7XG4gIGpvaW46IGZ1bmN0aW9uIGpvaW4oc2VwYXJhdG9yKSB7XG4gICAgcmV0dXJuIGFycmF5Sm9pbi5jYWxsKHRvSU9iamVjdCh0aGlzKSwgc2VwYXJhdG9yID09PSB1bmRlZmluZWQgPyAnLCcgOiBzZXBhcmF0b3IpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///219\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar html = __webpack_require__(70);\nvar cof = __webpack_require__(20);\nvar toAbsoluteIndex = __webpack_require__(35);\nvar toLength = __webpack_require__(6);\nvar arraySlice = [].slice;\n\n// fallback for not array-like ES3 strings and DOM objects\n$export($export.P + $export.F * __webpack_require__(3)(function () {\n if (html) arraySlice.call(html);\n}), 'Array', {\n slice: function slice(begin, end) {\n var len = toLength(this.length);\n var klass = cof(this);\n end = end === undefined ? len : end;\n if (klass == 'Array') return arraySlice.call(this, begin, end);\n var start = toAbsoluteIndex(begin, len);\n var upTo = toAbsoluteIndex(end, len);\n var size = toLength(upTo - start);\n var cloned = new Array(size);\n var i = 0;\n for (; i < size; i++) cloned[i] = klass == 'String'\n ? this.charAt(start + i)\n : this[start + i];\n return cloned;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuc2xpY2UuanM/MjNiZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLFdBQVcsbUJBQU8sQ0FBQyxFQUFTO0FBQzVCLFVBQVUsbUJBQU8sQ0FBQyxFQUFRO0FBQzFCLHNCQUFzQixtQkFBTyxDQUFDLEVBQXNCO0FBQ3BELGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDOztBQUVBO0FBQ0EsZ0NBQWdDLG1CQUFPLENBQUMsQ0FBVTtBQUNsRDtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsVUFBVTtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjIwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBodG1sID0gcmVxdWlyZSgnLi9faHRtbCcpO1xudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4vX3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBhcnJheVNsaWNlID0gW10uc2xpY2U7XG5cbi8vIGZhbGxiYWNrIGZvciBub3QgYXJyYXktbGlrZSBFUzMgc3RyaW5ncyBhbmQgRE9NIG9iamVjdHNcbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIGlmIChodG1sKSBhcnJheVNsaWNlLmNhbGwoaHRtbCk7XG59KSwgJ0FycmF5Jywge1xuICBzbGljZTogZnVuY3Rpb24gc2xpY2UoYmVnaW4sIGVuZCkge1xuICAgIHZhciBsZW4gPSB0b0xlbmd0aCh0aGlzLmxlbmd0aCk7XG4gICAgdmFyIGtsYXNzID0gY29mKHRoaXMpO1xuICAgIGVuZCA9IGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuIDogZW5kO1xuICAgIGlmIChrbGFzcyA9PSAnQXJyYXknKSByZXR1cm4gYXJyYXlTbGljZS5jYWxsKHRoaXMsIGJlZ2luLCBlbmQpO1xuICAgIHZhciBzdGFydCA9IHRvQWJzb2x1dGVJbmRleChiZWdpbiwgbGVuKTtcbiAgICB2YXIgdXBUbyA9IHRvQWJzb2x1dGVJbmRleChlbmQsIGxlbik7XG4gICAgdmFyIHNpemUgPSB0b0xlbmd0aCh1cFRvIC0gc3RhcnQpO1xuICAgIHZhciBjbG9uZWQgPSBuZXcgQXJyYXkoc2l6ZSk7XG4gICAgdmFyIGkgPSAwO1xuICAgIGZvciAoOyBpIDwgc2l6ZTsgaSsrKSBjbG9uZWRbaV0gPSBrbGFzcyA9PSAnU3RyaW5nJ1xuICAgICAgPyB0aGlzLmNoYXJBdChzdGFydCArIGkpXG4gICAgICA6IHRoaXNbc3RhcnQgKyBpXTtcbiAgICByZXR1cm4gY2xvbmVkO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///220\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar aFunction = __webpack_require__(10);\nvar toObject = __webpack_require__(9);\nvar fails = __webpack_require__(3);\nvar $sort = [].sort;\nvar test = [1, 2, 3];\n\n$export($export.P + $export.F * (fails(function () {\n // IE8-\n test.sort(undefined);\n}) || !fails(function () {\n // V8 bug\n test.sort(null);\n // Old WebKit\n}) || !__webpack_require__(22)($sort)), 'Array', {\n // 22.1.3.25 Array.prototype.sort(comparefn)\n sort: function sort(comparefn) {\n return comparefn === undefined\n ? $sort.call(toObject(this))\n : $sort.call(toObject(this), aFunction(comparefn));\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuc29ydC5qcz81NWRkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2QyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxZQUFZLG1CQUFPLENBQUMsQ0FBVTtBQUM5QjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQSxDQUFDLE1BQU0sbUJBQU8sQ0FBQyxFQUFrQjtBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjIyMS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyICRzb3J0ID0gW10uc29ydDtcbnZhciB0ZXN0ID0gWzEsIDIsIDNdO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIChmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIElFOC1cbiAgdGVzdC5zb3J0KHVuZGVmaW5lZCk7XG59KSB8fCAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBWOCBidWdcbiAgdGVzdC5zb3J0KG51bGwpO1xuICAvLyBPbGQgV2ViS2l0XG59KSB8fCAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKCRzb3J0KSksICdBcnJheScsIHtcbiAgLy8gMjIuMS4zLjI1IEFycmF5LnByb3RvdHlwZS5zb3J0KGNvbXBhcmVmbilcbiAgc29ydDogZnVuY3Rpb24gc29ydChjb21wYXJlZm4pIHtcbiAgICByZXR1cm4gY29tcGFyZWZuID09PSB1bmRlZmluZWRcbiAgICAgID8gJHNvcnQuY2FsbCh0b09iamVjdCh0aGlzKSlcbiAgICAgIDogJHNvcnQuY2FsbCh0b09iamVjdCh0aGlzKSwgYUZ1bmN0aW9uKGNvbXBhcmVmbikpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///221\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar $forEach = __webpack_require__(26)(0);\nvar STRICT = __webpack_require__(22)([].forEach, true);\n\n$export($export.P + $export.F * !STRICT, 'Array', {\n // 22.1.3.10 / 15.4.4.18 Array.prototype.forEach(callbackfn [, thisArg])\n forEach: function forEach(callbackfn /* , thisArg */) {\n return $forEach(this, callbackfn, arguments[1]);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZm9yLWVhY2guanM/ZjNlMiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyxFQUFrQjtBQUN6QyxhQUFhLG1CQUFPLENBQUMsRUFBa0I7O0FBRXZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjIyMi5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGZvckVhY2ggPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJykoMCk7XG52YXIgU1RSSUNUID0gcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKFtdLmZvckVhY2gsIHRydWUpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFTVFJJQ1QsICdBcnJheScsIHtcbiAgLy8gMjIuMS4zLjEwIC8gMTUuNC40LjE4IEFycmF5LnByb3RvdHlwZS5mb3JFYWNoKGNhbGxiYWNrZm4gWywgdGhpc0FyZ10pXG4gIGZvckVhY2g6IGZ1bmN0aW9uIGZvckVhY2goY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJGZvckVhY2godGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzWzFdKTtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///222\n")},function(module,exports,__webpack_require__){eval("var isObject = __webpack_require__(4);\nvar isArray = __webpack_require__(54);\nvar SPECIES = __webpack_require__(5)('species');\n\nmodule.exports = function (original) {\n var C;\n if (isArray(original)) {\n C = original.constructor;\n // cross-realm fallback\n if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;\n if (isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n } return C === undefined ? Array : C;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktc3BlY2llcy1jb25zdHJ1Y3Rvci5qcz9lODUzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGNBQWMsbUJBQU8sQ0FBQyxFQUFhO0FBQ25DLGNBQWMsbUJBQU8sQ0FBQyxDQUFROztBQUU5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCIsImZpbGUiOiIyMjMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi9faXMtYXJyYXknKTtcbnZhciBTUEVDSUVTID0gcmVxdWlyZSgnLi9fd2tzJykoJ3NwZWNpZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3JpZ2luYWwpIHtcbiAgdmFyIEM7XG4gIGlmIChpc0FycmF5KG9yaWdpbmFsKSkge1xuICAgIEMgPSBvcmlnaW5hbC5jb25zdHJ1Y3RvcjtcbiAgICAvLyBjcm9zcy1yZWFsbSBmYWxsYmFja1xuICAgIGlmICh0eXBlb2YgQyA9PSAnZnVuY3Rpb24nICYmIChDID09PSBBcnJheSB8fCBpc0FycmF5KEMucHJvdG90eXBlKSkpIEMgPSB1bmRlZmluZWQ7XG4gICAgaWYgKGlzT2JqZWN0KEMpKSB7XG4gICAgICBDID0gQ1tTUEVDSUVTXTtcbiAgICAgIGlmIChDID09PSBudWxsKSBDID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfSByZXR1cm4gQyA9PT0gdW5kZWZpbmVkID8gQXJyYXkgOiBDO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///223\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar $map = __webpack_require__(26)(1);\n\n$export($export.P + $export.F * !__webpack_require__(22)([].map, true), 'Array', {\n // 22.1.3.15 / 15.4.4.19 Array.prototype.map(callbackfn [, thisArg])\n map: function map(callbackfn /* , thisArg */) {\n return $map(this, callbackfn, arguments[1]);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkubWFwLmpzPzZkNjciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxXQUFXLG1CQUFPLENBQUMsRUFBa0I7O0FBRXJDLGlDQUFpQyxtQkFBTyxDQUFDLEVBQWtCO0FBQzNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyMjQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRtYXAgPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJykoMSk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogIXJlcXVpcmUoJy4vX3N0cmljdC1tZXRob2QnKShbXS5tYXAsIHRydWUpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy4xNSAvIDE1LjQuNC4xOSBBcnJheS5wcm90b3R5cGUubWFwKGNhbGxiYWNrZm4gWywgdGhpc0FyZ10pXG4gIG1hcDogZnVuY3Rpb24gbWFwKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgcmV0dXJuICRtYXAodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzWzFdKTtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///224\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar $filter = __webpack_require__(26)(2);\n\n$export($export.P + $export.F * !__webpack_require__(22)([].filter, true), 'Array', {\n // 22.1.3.7 / 15.4.4.20 Array.prototype.filter(callbackfn [, thisArg])\n filter: function filter(callbackfn /* , thisArg */) {\n return $filter(this, callbackfn, arguments[1]);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZmlsdGVyLmpzP2QyNWYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxjQUFjLG1CQUFPLENBQUMsRUFBa0I7O0FBRXhDLGlDQUFpQyxtQkFBTyxDQUFDLEVBQWtCO0FBQzNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyMjUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRmaWx0ZXIgPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJykoMik7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogIXJlcXVpcmUoJy4vX3N0cmljdC1tZXRob2QnKShbXS5maWx0ZXIsIHRydWUpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy43IC8gMTUuNC40LjIwIEFycmF5LnByb3RvdHlwZS5maWx0ZXIoY2FsbGJhY2tmbiBbLCB0aGlzQXJnXSlcbiAgZmlsdGVyOiBmdW5jdGlvbiBmaWx0ZXIoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJGZpbHRlcih0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHNbMV0pO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///225\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar $some = __webpack_require__(26)(3);\n\n$export($export.P + $export.F * !__webpack_require__(22)([].some, true), 'Array', {\n // 22.1.3.23 / 15.4.4.17 Array.prototype.some(callbackfn [, thisArg])\n some: function some(callbackfn /* , thisArg */) {\n return $some(this, callbackfn, arguments[1]);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuc29tZS5qcz83NTlmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsWUFBWSxtQkFBTyxDQUFDLEVBQWtCOztBQUV0QyxpQ0FBaUMsbUJBQU8sQ0FBQyxFQUFrQjtBQUMzRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjI2LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkc29tZSA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKSgzKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKFtdLnNvbWUsIHRydWUpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy4yMyAvIDE1LjQuNC4xNyBBcnJheS5wcm90b3R5cGUuc29tZShjYWxsYmFja2ZuIFssIHRoaXNBcmddKVxuICBzb21lOiBmdW5jdGlvbiBzb21lKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgcmV0dXJuICRzb21lKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50c1sxXSk7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///226\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar $every = __webpack_require__(26)(4);\n\n$export($export.P + $export.F * !__webpack_require__(22)([].every, true), 'Array', {\n // 22.1.3.5 / 15.4.4.16 Array.prototype.every(callbackfn [, thisArg])\n every: function every(callbackfn /* , thisArg */) {\n return $every(this, callbackfn, arguments[1]);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZXZlcnkuanM/NjA5NSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGFBQWEsbUJBQU8sQ0FBQyxFQUFrQjs7QUFFdkMsaUNBQWlDLG1CQUFPLENBQUMsRUFBa0I7QUFDM0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjIyNy5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGV2ZXJ5ID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpKDQpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoW10uZXZlcnksIHRydWUpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy41IC8gMTUuNC40LjE2IEFycmF5LnByb3RvdHlwZS5ldmVyeShjYWxsYmFja2ZuIFssIHRoaXNBcmddKVxuICBldmVyeTogZnVuY3Rpb24gZXZlcnkoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJGV2ZXJ5KHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50c1sxXSk7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///227\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar $reduce = __webpack_require__(110);\n\n$export($export.P + $export.F * !__webpack_require__(22)([].reduce, true), 'Array', {\n // 22.1.3.18 / 15.4.4.21 Array.prototype.reduce(callbackfn [, initialValue])\n reduce: function reduce(callbackfn /* , initialValue */) {\n return $reduce(this, callbackfn, arguments.length, arguments[1], false);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkucmVkdWNlLmpzPzBjZDgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxjQUFjLG1CQUFPLENBQUMsR0FBaUI7O0FBRXZDLGlDQUFpQyxtQkFBTyxDQUFDLEVBQWtCO0FBQzNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyMjguanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRyZWR1Y2UgPSByZXF1aXJlKCcuL19hcnJheS1yZWR1Y2UnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKFtdLnJlZHVjZSwgdHJ1ZSksICdBcnJheScsIHtcbiAgLy8gMjIuMS4zLjE4IC8gMTUuNC40LjIxIEFycmF5LnByb3RvdHlwZS5yZWR1Y2UoY2FsbGJhY2tmbiBbLCBpbml0aWFsVmFsdWVdKVxuICByZWR1Y2U6IGZ1bmN0aW9uIHJlZHVjZShjYWxsYmFja2ZuIC8qICwgaW5pdGlhbFZhbHVlICovKSB7XG4gICAgcmV0dXJuICRyZWR1Y2UodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCwgYXJndW1lbnRzWzFdLCBmYWxzZSk7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///228\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar $reduce = __webpack_require__(110);\n\n$export($export.P + $export.F * !__webpack_require__(22)([].reduceRight, true), 'Array', {\n // 22.1.3.19 / 15.4.4.22 Array.prototype.reduceRight(callbackfn [, initialValue])\n reduceRight: function reduceRight(callbackfn /* , initialValue */) {\n return $reduce(this, callbackfn, arguments.length, arguments[1], true);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkucmVkdWNlLXJpZ2h0LmpzPzQ4ZjgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxjQUFjLG1CQUFPLENBQUMsR0FBaUI7O0FBRXZDLGlDQUFpQyxtQkFBTyxDQUFDLEVBQWtCO0FBQzNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyMjkuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRyZWR1Y2UgPSByZXF1aXJlKCcuL19hcnJheS1yZWR1Y2UnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKFtdLnJlZHVjZVJpZ2h0LCB0cnVlKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMTkgLyAxNS40LjQuMjIgQXJyYXkucHJvdG90eXBlLnJlZHVjZVJpZ2h0KGNhbGxiYWNrZm4gWywgaW5pdGlhbFZhbHVlXSlcbiAgcmVkdWNlUmlnaHQ6IGZ1bmN0aW9uIHJlZHVjZVJpZ2h0KGNhbGxiYWNrZm4gLyogLCBpbml0aWFsVmFsdWUgKi8pIHtcbiAgICByZXR1cm4gJHJlZHVjZSh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoLCBhcmd1bWVudHNbMV0sIHRydWUpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///229\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar $indexOf = __webpack_require__(52)(false);\nvar $native = [].indexOf;\nvar NEGATIVE_ZERO = !!$native && 1 / [1].indexOf(1, -0) < 0;\n\n$export($export.P + $export.F * (NEGATIVE_ZERO || !__webpack_require__(22)($native)), 'Array', {\n // 22.1.3.11 / 15.4.4.14 Array.prototype.indexOf(searchElement [, fromIndex])\n indexOf: function indexOf(searchElement /* , fromIndex = 0 */) {\n return NEGATIVE_ZERO\n // convert -0 to +0\n ? $native.apply(this, arguments) || 0\n : $indexOf(this, searchElement, arguments[1]);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuaW5kZXgtb2YuanM/NTdlNyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyxFQUFtQjtBQUMxQztBQUNBOztBQUVBLG1EQUFtRCxtQkFBTyxDQUFDLEVBQWtCO0FBQzdFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyMzAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRpbmRleE9mID0gcmVxdWlyZSgnLi9fYXJyYXktaW5jbHVkZXMnKShmYWxzZSk7XG52YXIgJG5hdGl2ZSA9IFtdLmluZGV4T2Y7XG52YXIgTkVHQVRJVkVfWkVSTyA9ICEhJG5hdGl2ZSAmJiAxIC8gWzFdLmluZGV4T2YoMSwgLTApIDwgMDtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoTkVHQVRJVkVfWkVSTyB8fCAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKCRuYXRpdmUpKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMTEgLyAxNS40LjQuMTQgQXJyYXkucHJvdG90eXBlLmluZGV4T2Yoc2VhcmNoRWxlbWVudCBbLCBmcm9tSW5kZXhdKVxuICBpbmRleE9mOiBmdW5jdGlvbiBpbmRleE9mKHNlYXJjaEVsZW1lbnQgLyogLCBmcm9tSW5kZXggPSAwICovKSB7XG4gICAgcmV0dXJuIE5FR0FUSVZFX1pFUk9cbiAgICAgIC8vIGNvbnZlcnQgLTAgdG8gKzBcbiAgICAgID8gJG5hdGl2ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IDBcbiAgICAgIDogJGluZGV4T2YodGhpcywgc2VhcmNoRWxlbWVudCwgYXJndW1lbnRzWzFdKTtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///230\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar toIObject = __webpack_require__(15);\nvar toInteger = __webpack_require__(21);\nvar toLength = __webpack_require__(6);\nvar $native = [].lastIndexOf;\nvar NEGATIVE_ZERO = !!$native && 1 / [1].lastIndexOf(1, -0) < 0;\n\n$export($export.P + $export.F * (NEGATIVE_ZERO || !__webpack_require__(22)($native)), 'Array', {\n // 22.1.3.14 / 15.4.4.15 Array.prototype.lastIndexOf(searchElement [, fromIndex])\n lastIndexOf: function lastIndexOf(searchElement /* , fromIndex = @[*-1] */) {\n // convert -0 to +0\n if (NEGATIVE_ZERO) return $native.apply(this, arguments) || 0;\n var O = toIObject(this);\n var length = toLength(O.length);\n var index = length - 1;\n if (arguments.length > 1) index = Math.min(index, toInteger(arguments[1]));\n if (index < 0) index = length + index;\n for (;index >= 0; index--) if (index in O) if (O[index] === searchElement) return index || 0;\n return -1;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkubGFzdC1pbmRleC1vZi5qcz85ODY1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2QyxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDO0FBQ0E7O0FBRUEsbURBQW1ELG1CQUFPLENBQUMsRUFBa0I7QUFDN0U7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVSxXQUFXO0FBQ3JCO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjIzMS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyICRuYXRpdmUgPSBbXS5sYXN0SW5kZXhPZjtcbnZhciBORUdBVElWRV9aRVJPID0gISEkbmF0aXZlICYmIDEgLyBbMV0ubGFzdEluZGV4T2YoMSwgLTApIDwgMDtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoTkVHQVRJVkVfWkVSTyB8fCAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKCRuYXRpdmUpKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMTQgLyAxNS40LjQuMTUgQXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mKHNlYXJjaEVsZW1lbnQgWywgZnJvbUluZGV4XSlcbiAgbGFzdEluZGV4T2Y6IGZ1bmN0aW9uIGxhc3RJbmRleE9mKHNlYXJjaEVsZW1lbnQgLyogLCBmcm9tSW5kZXggPSBAWyotMV0gKi8pIHtcbiAgICAvLyBjb252ZXJ0IC0wIHRvICswXG4gICAgaWYgKE5FR0FUSVZFX1pFUk8pIHJldHVybiAkbmF0aXZlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgMDtcbiAgICB2YXIgTyA9IHRvSU9iamVjdCh0aGlzKTtcbiAgICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICAgIHZhciBpbmRleCA9IGxlbmd0aCAtIDE7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSBpbmRleCA9IE1hdGgubWluKGluZGV4LCB0b0ludGVnZXIoYXJndW1lbnRzWzFdKSk7XG4gICAgaWYgKGluZGV4IDwgMCkgaW5kZXggPSBsZW5ndGggKyBpbmRleDtcbiAgICBmb3IgKDtpbmRleCA+PSAwOyBpbmRleC0tKSBpZiAoaW5kZXggaW4gTykgaWYgKE9baW5kZXhdID09PSBzZWFyY2hFbGVtZW50KSByZXR1cm4gaW5kZXggfHwgMDtcbiAgICByZXR1cm4gLTE7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///231\n")},function(module,exports,__webpack_require__){eval("// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\nvar $export = __webpack_require__(0);\n\n$export($export.P, 'Array', { copyWithin: __webpack_require__(111) });\n\n__webpack_require__(31)('copyWithin');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuY29weS13aXRoaW4uanM/NzQ0ZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXOztBQUVqQyw2QkFBNkIsYUFBYSxtQkFBTyxDQUFDLEdBQXNCLEdBQUc7O0FBRTNFLG1CQUFPLENBQUMsRUFBdUIiLCJmaWxlIjoiMjMyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjIuMS4zLjMgQXJyYXkucHJvdG90eXBlLmNvcHlXaXRoaW4odGFyZ2V0LCBzdGFydCwgZW5kID0gdGhpcy5sZW5ndGgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCwgJ0FycmF5JywgeyBjb3B5V2l0aGluOiByZXF1aXJlKCcuL19hcnJheS1jb3B5LXdpdGhpbicpIH0pO1xuXG5yZXF1aXJlKCcuL19hZGQtdG8tdW5zY29wYWJsZXMnKSgnY29weVdpdGhpbicpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///232\n")},function(module,exports,__webpack_require__){eval("// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\nvar $export = __webpack_require__(0);\n\n$export($export.P, 'Array', { fill: __webpack_require__(85) });\n\n__webpack_require__(31)('fill');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZmlsbC5qcz82YzdiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDLDZCQUE2QixPQUFPLG1CQUFPLENBQUMsRUFBZSxHQUFHOztBQUU5RCxtQkFBTyxDQUFDLEVBQXVCIiwiZmlsZSI6IjIzMy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDIyLjEuMy42IEFycmF5LnByb3RvdHlwZS5maWxsKHZhbHVlLCBzdGFydCA9IDAsIGVuZCA9IHRoaXMubGVuZ3RoKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdBcnJheScsIHsgZmlsbDogcmVxdWlyZSgnLi9fYXJyYXktZmlsbCcpIH0pO1xuXG5yZXF1aXJlKCcuL19hZGQtdG8tdW5zY29wYWJsZXMnKSgnZmlsbCcpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///233\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// 22.1.3.8 Array.prototype.find(predicate, thisArg = undefined)\nvar $export = __webpack_require__(0);\nvar $find = __webpack_require__(26)(5);\nvar KEY = 'find';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n find: function find(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n__webpack_require__(31)(KEY);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZmluZC5qcz83NTE0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxZQUFZLG1CQUFPLENBQUMsRUFBa0I7QUFDdEM7QUFDQTtBQUNBO0FBQ0EsMENBQTBDLGdCQUFnQixFQUFFO0FBQzVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELG1CQUFPLENBQUMsRUFBdUIiLCJmaWxlIjoiMjM0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gMjIuMS4zLjggQXJyYXkucHJvdG90eXBlLmZpbmQocHJlZGljYXRlLCB0aGlzQXJnID0gdW5kZWZpbmVkKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkZmluZCA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKSg1KTtcbnZhciBLRVkgPSAnZmluZCc7XG52YXIgZm9yY2VkID0gdHJ1ZTtcbi8vIFNob3VsZG4ndCBza2lwIGhvbGVzXG5pZiAoS0VZIGluIFtdKSBBcnJheSgxKVtLRVldKGZ1bmN0aW9uICgpIHsgZm9yY2VkID0gZmFsc2U7IH0pO1xuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiBmb3JjZWQsICdBcnJheScsIHtcbiAgZmluZDogZnVuY3Rpb24gZmluZChjYWxsYmFja2ZuIC8qICwgdGhhdCA9IHVuZGVmaW5lZCAqLykge1xuICAgIHJldHVybiAkZmluZCh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xucmVxdWlyZSgnLi9fYWRkLXRvLXVuc2NvcGFibGVzJykoS0VZKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///234\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// 22.1.3.9 Array.prototype.findIndex(predicate, thisArg = undefined)\nvar $export = __webpack_require__(0);\nvar $find = __webpack_require__(26)(6);\nvar KEY = 'findIndex';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n findIndex: function findIndex(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n__webpack_require__(31)(KEY);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZmluZC1pbmRleC5qcz8yMGQ2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxZQUFZLG1CQUFPLENBQUMsRUFBa0I7QUFDdEM7QUFDQTtBQUNBO0FBQ0EsMENBQTBDLGdCQUFnQixFQUFFO0FBQzVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELG1CQUFPLENBQUMsRUFBdUIiLCJmaWxlIjoiMjM1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gMjIuMS4zLjkgQXJyYXkucHJvdG90eXBlLmZpbmRJbmRleChwcmVkaWNhdGUsIHRoaXNBcmcgPSB1bmRlZmluZWQpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRmaW5kID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpKDYpO1xudmFyIEtFWSA9ICdmaW5kSW5kZXgnO1xudmFyIGZvcmNlZCA9IHRydWU7XG4vLyBTaG91bGRuJ3Qgc2tpcCBob2xlc1xuaWYgKEtFWSBpbiBbXSkgQXJyYXkoMSlbS0VZXShmdW5jdGlvbiAoKSB7IGZvcmNlZCA9IGZhbHNlOyB9KTtcbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogZm9yY2VkLCAnQXJyYXknLCB7XG4gIGZpbmRJbmRleDogZnVuY3Rpb24gZmluZEluZGV4KGNhbGxiYWNrZm4gLyogLCB0aGF0ID0gdW5kZWZpbmVkICovKSB7XG4gICAgcmV0dXJuICRmaW5kKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG5yZXF1aXJlKCcuL19hZGQtdG8tdW5zY29wYWJsZXMnKShLRVkpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///235\n")},function(module,exports,__webpack_require__){eval("__webpack_require__(38)('Array');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuc3BlY2llcy5qcz9kMDRmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLG1CQUFPLENBQUMsRUFBZ0IiLCJmaWxlIjoiMjM2LmpzIiwic291cmNlc0NvbnRlbnQiOlsicmVxdWlyZSgnLi9fc2V0LXNwZWNpZXMnKSgnQXJyYXknKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///236\n")},function(module,exports,__webpack_require__){eval("var global = __webpack_require__(2);\nvar inheritIfRequired = __webpack_require__(73);\nvar dP = __webpack_require__(8).f;\nvar gOPN = __webpack_require__(37).f;\nvar isRegExp = __webpack_require__(56);\nvar $flags = __webpack_require__(50);\nvar $RegExp = global.RegExp;\nvar Base = $RegExp;\nvar proto = $RegExp.prototype;\nvar re1 = /a/g;\nvar re2 = /a/g;\n// \"new\" creates a new object, old webkit buggy here\nvar CORRECT_NEW = new $RegExp(re1) !== re1;\n\nif (__webpack_require__(7) && (!CORRECT_NEW || __webpack_require__(3)(function () {\n re2[__webpack_require__(5)('match')] = false;\n // RegExp constructor can alter flags and IsRegExp works correct with @@match\n return $RegExp(re1) != re1 || $RegExp(re2) == re2 || $RegExp(re1, 'i') != '/a/i';\n}))) {\n $RegExp = function RegExp(p, f) {\n var tiRE = this instanceof $RegExp;\n var piRE = isRegExp(p);\n var fiU = f === undefined;\n return !tiRE && piRE && p.constructor === $RegExp && fiU ? p\n : inheritIfRequired(CORRECT_NEW\n ? new Base(piRE && !fiU ? p.source : p, f)\n : Base((piRE = p instanceof $RegExp) ? p.source : p, piRE && fiU ? $flags.call(p) : f)\n , tiRE ? this : proto, $RegExp);\n };\n var proxy = function (key) {\n key in $RegExp || dP($RegExp, key, {\n configurable: true,\n get: function () { return Base[key]; },\n set: function (it) { Base[key] = it; }\n });\n };\n for (var keys = gOPN(Base), i = 0; keys.length > i;) proxy(keys[i++]);\n proto.constructor = $RegExp;\n $RegExp.prototype = proto;\n __webpack_require__(12)(global, 'RegExp', $RegExp);\n}\n\n__webpack_require__(38)('RegExp');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLmNvbnN0cnVjdG9yLmpzPzNiMmIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsYUFBYSxtQkFBTyxDQUFDLENBQVc7QUFDaEMsd0JBQXdCLG1CQUFPLENBQUMsRUFBd0I7QUFDeEQsU0FBUyxtQkFBTyxDQUFDLENBQWM7QUFDL0IsV0FBVyxtQkFBTyxDQUFDLEVBQWdCO0FBQ25DLGVBQWUsbUJBQU8sQ0FBQyxFQUFjO0FBQ3JDLGFBQWEsbUJBQU8sQ0FBQyxFQUFVO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLElBQUksbUJBQU8sQ0FBQyxDQUFnQixzQkFBc0IsbUJBQU8sQ0FBQyxDQUFVO0FBQ3BFLE1BQU0sbUJBQU8sQ0FBQyxDQUFRO0FBQ3RCO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0Isa0JBQWtCLEVBQUU7QUFDNUMsMEJBQTBCLGdCQUFnQjtBQUMxQyxLQUFLO0FBQ0w7QUFDQSxvQ0FBb0MsaUJBQWlCO0FBQ3JEO0FBQ0E7QUFDQSxFQUFFLG1CQUFPLENBQUMsRUFBYTtBQUN2Qjs7QUFFQSxtQkFBTyxDQUFDLEVBQWdCIiwiZmlsZSI6IjIzNy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBpbmhlcml0SWZSZXF1aXJlZCA9IHJlcXVpcmUoJy4vX2luaGVyaXQtaWYtcmVxdWlyZWQnKTtcbnZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgZ09QTiA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJykuZjtcbnZhciBpc1JlZ0V4cCA9IHJlcXVpcmUoJy4vX2lzLXJlZ2V4cCcpO1xudmFyICRmbGFncyA9IHJlcXVpcmUoJy4vX2ZsYWdzJyk7XG52YXIgJFJlZ0V4cCA9IGdsb2JhbC5SZWdFeHA7XG52YXIgQmFzZSA9ICRSZWdFeHA7XG52YXIgcHJvdG8gPSAkUmVnRXhwLnByb3RvdHlwZTtcbnZhciByZTEgPSAvYS9nO1xudmFyIHJlMiA9IC9hL2c7XG4vLyBcIm5ld1wiIGNyZWF0ZXMgYSBuZXcgb2JqZWN0LCBvbGQgd2Via2l0IGJ1Z2d5IGhlcmVcbnZhciBDT1JSRUNUX05FVyA9IG5ldyAkUmVnRXhwKHJlMSkgIT09IHJlMTtcblxuaWYgKHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgKCFDT1JSRUNUX05FVyB8fCByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgcmUyW3JlcXVpcmUoJy4vX3drcycpKCdtYXRjaCcpXSA9IGZhbHNlO1xuICAvLyBSZWdFeHAgY29uc3RydWN0b3IgY2FuIGFsdGVyIGZsYWdzIGFuZCBJc1JlZ0V4cCB3b3JrcyBjb3JyZWN0IHdpdGggQEBtYXRjaFxuICByZXR1cm4gJFJlZ0V4cChyZTEpICE9IHJlMSB8fCAkUmVnRXhwKHJlMikgPT0gcmUyIHx8ICRSZWdFeHAocmUxLCAnaScpICE9ICcvYS9pJztcbn0pKSkge1xuICAkUmVnRXhwID0gZnVuY3Rpb24gUmVnRXhwKHAsIGYpIHtcbiAgICB2YXIgdGlSRSA9IHRoaXMgaW5zdGFuY2VvZiAkUmVnRXhwO1xuICAgIHZhciBwaVJFID0gaXNSZWdFeHAocCk7XG4gICAgdmFyIGZpVSA9IGYgPT09IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gIXRpUkUgJiYgcGlSRSAmJiBwLmNvbnN0cnVjdG9yID09PSAkUmVnRXhwICYmIGZpVSA/IHBcbiAgICAgIDogaW5oZXJpdElmUmVxdWlyZWQoQ09SUkVDVF9ORVdcbiAgICAgICAgPyBuZXcgQmFzZShwaVJFICYmICFmaVUgPyBwLnNvdXJjZSA6IHAsIGYpXG4gICAgICAgIDogQmFzZSgocGlSRSA9IHAgaW5zdGFuY2VvZiAkUmVnRXhwKSA/IHAuc291cmNlIDogcCwgcGlSRSAmJiBmaVUgPyAkZmxhZ3MuY2FsbChwKSA6IGYpXG4gICAgICAsIHRpUkUgPyB0aGlzIDogcHJvdG8sICRSZWdFeHApO1xuICB9O1xuICB2YXIgcHJveHkgPSBmdW5jdGlvbiAoa2V5KSB7XG4gICAga2V5IGluICRSZWdFeHAgfHwgZFAoJFJlZ0V4cCwga2V5LCB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIEJhc2Vba2V5XTsgfSxcbiAgICAgIHNldDogZnVuY3Rpb24gKGl0KSB7IEJhc2Vba2V5XSA9IGl0OyB9XG4gICAgfSk7XG4gIH07XG4gIGZvciAodmFyIGtleXMgPSBnT1BOKEJhc2UpLCBpID0gMDsga2V5cy5sZW5ndGggPiBpOykgcHJveHkoa2V5c1tpKytdKTtcbiAgcHJvdG8uY29uc3RydWN0b3IgPSAkUmVnRXhwO1xuICAkUmVnRXhwLnByb3RvdHlwZSA9IHByb3RvO1xuICByZXF1aXJlKCcuL19yZWRlZmluZScpKGdsb2JhbCwgJ1JlZ0V4cCcsICRSZWdFeHApO1xufVxuXG5yZXF1aXJlKCcuL19zZXQtc3BlY2llcycpKCdSZWdFeHAnKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///237\n")},function(module,exports,__webpack_require__){"use strict";eval("\n__webpack_require__(114);\nvar anObject = __webpack_require__(1);\nvar $flags = __webpack_require__(50);\nvar DESCRIPTORS = __webpack_require__(7);\nvar TO_STRING = 'toString';\nvar $toString = /./[TO_STRING];\n\nvar define = function (fn) {\n __webpack_require__(12)(RegExp.prototype, TO_STRING, fn, true);\n};\n\n// 21.2.5.14 RegExp.prototype.toString()\nif (__webpack_require__(3)(function () { return $toString.call({ source: 'a', flags: 'b' }) != '/a/b'; })) {\n define(function toString() {\n var R = anObject(this);\n return '/'.concat(R.source, '/',\n 'flags' in R ? R.flags : !DESCRIPTORS && R instanceof RegExp ? $flags.call(R) : undefined);\n });\n// FF44- RegExp#toString has a wrong name\n} else if ($toString.name != TO_STRING) {\n define(function toString() {\n return $toString.call(this);\n });\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLnRvLXN0cmluZy5qcz82YjU0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsbUJBQU8sQ0FBQyxHQUFvQjtBQUM1QixlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxhQUFhLG1CQUFPLENBQUMsRUFBVTtBQUMvQixrQkFBa0IsbUJBQU8sQ0FBQyxDQUFnQjtBQUMxQztBQUNBOztBQUVBO0FBQ0EsRUFBRSxtQkFBTyxDQUFDLEVBQWE7QUFDdkI7O0FBRUE7QUFDQSxJQUFJLG1CQUFPLENBQUMsQ0FBVSxlQUFlLHdCQUF3QiwwQkFBMEIsWUFBWSxFQUFFO0FBQ3JHO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxHQUFHO0FBQ0giLCJmaWxlIjoiMjM4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi9lczYucmVnZXhwLmZsYWdzJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciAkZmxhZ3MgPSByZXF1aXJlKCcuL19mbGFncycpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKTtcbnZhciBUT19TVFJJTkcgPSAndG9TdHJpbmcnO1xudmFyICR0b1N0cmluZyA9IC8uL1tUT19TVFJJTkddO1xuXG52YXIgZGVmaW5lID0gZnVuY3Rpb24gKGZuKSB7XG4gIHJlcXVpcmUoJy4vX3JlZGVmaW5lJykoUmVnRXhwLnByb3RvdHlwZSwgVE9fU1RSSU5HLCBmbiwgdHJ1ZSk7XG59O1xuXG4vLyAyMS4yLjUuMTQgUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZygpXG5pZiAocmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7IHJldHVybiAkdG9TdHJpbmcuY2FsbCh7IHNvdXJjZTogJ2EnLCBmbGFnczogJ2InIH0pICE9ICcvYS9iJzsgfSkpIHtcbiAgZGVmaW5lKGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHZhciBSID0gYW5PYmplY3QodGhpcyk7XG4gICAgcmV0dXJuICcvJy5jb25jYXQoUi5zb3VyY2UsICcvJyxcbiAgICAgICdmbGFncycgaW4gUiA/IFIuZmxhZ3MgOiAhREVTQ1JJUFRPUlMgJiYgUiBpbnN0YW5jZW9mIFJlZ0V4cCA/ICRmbGFncy5jYWxsKFIpIDogdW5kZWZpbmVkKTtcbiAgfSk7XG4vLyBGRjQ0LSBSZWdFeHAjdG9TdHJpbmcgaGFzIGEgd3JvbmcgbmFtZVxufSBlbHNlIGlmICgkdG9TdHJpbmcubmFtZSAhPSBUT19TVFJJTkcpIHtcbiAgZGVmaW5lKGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiAkdG9TdHJpbmcuY2FsbCh0aGlzKTtcbiAgfSk7XG59XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///238\n")},function(module,exports,__webpack_require__){"use strict";eval("\n\nvar anObject = __webpack_require__(1);\nvar toLength = __webpack_require__(6);\nvar advanceStringIndex = __webpack_require__(88);\nvar regExpExec = __webpack_require__(58);\n\n// @@match logic\n__webpack_require__(59)('match', 1, function (defined, MATCH, $match, maybeCallNative) {\n return [\n // `String.prototype.match` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.match\n function match(regexp) {\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[MATCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[MATCH](String(O));\n },\n // `RegExp.prototype[@@match]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@match\n function (regexp) {\n var res = maybeCallNative($match, regexp, this);\n if (res.done) return res.value;\n var rx = anObject(regexp);\n var S = String(this);\n if (!rx.global) return regExpExec(rx, S);\n var fullUnicode = rx.unicode;\n rx.lastIndex = 0;\n var A = [];\n var n = 0;\n var result;\n while ((result = regExpExec(rx, S)) !== null) {\n var matchStr = String(result[0]);\n A[n] = matchStr;\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n n++;\n }\n return n === 0 ? null : A;\n }\n ];\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLm1hdGNoLmpzPzQ5MTciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWIsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMseUJBQXlCLG1CQUFPLENBQUMsRUFBeUI7QUFDMUQsaUJBQWlCLG1CQUFPLENBQUMsRUFBeUI7O0FBRWxEO0FBQ0EsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyMzkuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgYWR2YW5jZVN0cmluZ0luZGV4ID0gcmVxdWlyZSgnLi9fYWR2YW5jZS1zdHJpbmctaW5kZXgnKTtcbnZhciByZWdFeHBFeGVjID0gcmVxdWlyZSgnLi9fcmVnZXhwLWV4ZWMtYWJzdHJhY3QnKTtcblxuLy8gQEBtYXRjaCBsb2dpY1xucmVxdWlyZSgnLi9fZml4LXJlLXdrcycpKCdtYXRjaCcsIDEsIGZ1bmN0aW9uIChkZWZpbmVkLCBNQVRDSCwgJG1hdGNoLCBtYXliZUNhbGxOYXRpdmUpIHtcbiAgcmV0dXJuIFtcbiAgICAvLyBgU3RyaW5nLnByb3RvdHlwZS5tYXRjaGAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5tYXRjaFxuICAgIGZ1bmN0aW9uIG1hdGNoKHJlZ2V4cCkge1xuICAgICAgdmFyIE8gPSBkZWZpbmVkKHRoaXMpO1xuICAgICAgdmFyIGZuID0gcmVnZXhwID09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHJlZ2V4cFtNQVRDSF07XG4gICAgICByZXR1cm4gZm4gIT09IHVuZGVmaW5lZCA/IGZuLmNhbGwocmVnZXhwLCBPKSA6IG5ldyBSZWdFeHAocmVnZXhwKVtNQVRDSF0oU3RyaW5nKE8pKTtcbiAgICB9LFxuICAgIC8vIGBSZWdFeHAucHJvdG90eXBlW0BAbWF0Y2hdYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1yZWdleHAucHJvdG90eXBlLUBAbWF0Y2hcbiAgICBmdW5jdGlvbiAocmVnZXhwKSB7XG4gICAgICB2YXIgcmVzID0gbWF5YmVDYWxsTmF0aXZlKCRtYXRjaCwgcmVnZXhwLCB0aGlzKTtcbiAgICAgIGlmIChyZXMuZG9uZSkgcmV0dXJuIHJlcy52YWx1ZTtcbiAgICAgIHZhciByeCA9IGFuT2JqZWN0KHJlZ2V4cCk7XG4gICAgICB2YXIgUyA9IFN0cmluZyh0aGlzKTtcbiAgICAgIGlmICghcnguZ2xvYmFsKSByZXR1cm4gcmVnRXhwRXhlYyhyeCwgUyk7XG4gICAgICB2YXIgZnVsbFVuaWNvZGUgPSByeC51bmljb2RlO1xuICAgICAgcngubGFzdEluZGV4ID0gMDtcbiAgICAgIHZhciBBID0gW107XG4gICAgICB2YXIgbiA9IDA7XG4gICAgICB2YXIgcmVzdWx0O1xuICAgICAgd2hpbGUgKChyZXN1bHQgPSByZWdFeHBFeGVjKHJ4LCBTKSkgIT09IG51bGwpIHtcbiAgICAgICAgdmFyIG1hdGNoU3RyID0gU3RyaW5nKHJlc3VsdFswXSk7XG4gICAgICAgIEFbbl0gPSBtYXRjaFN0cjtcbiAgICAgICAgaWYgKG1hdGNoU3RyID09PSAnJykgcngubGFzdEluZGV4ID0gYWR2YW5jZVN0cmluZ0luZGV4KFMsIHRvTGVuZ3RoKHJ4Lmxhc3RJbmRleCksIGZ1bGxVbmljb2RlKTtcbiAgICAgICAgbisrO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG4gPT09IDAgPyBudWxsIDogQTtcbiAgICB9XG4gIF07XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///239\n")},function(module,exports,__webpack_require__){"use strict";eval("\n\nvar anObject = __webpack_require__(1);\nvar toObject = __webpack_require__(9);\nvar toLength = __webpack_require__(6);\nvar toInteger = __webpack_require__(21);\nvar advanceStringIndex = __webpack_require__(88);\nvar regExpExec = __webpack_require__(58);\nvar max = Math.max;\nvar min = Math.min;\nvar floor = Math.floor;\nvar SUBSTITUTION_SYMBOLS = /\\$([$&`']|\\d\\d?|<[^>]*>)/g;\nvar SUBSTITUTION_SYMBOLS_NO_NAMED = /\\$([$&`']|\\d\\d?)/g;\n\nvar maybeToString = function (it) {\n return it === undefined ? it : String(it);\n};\n\n// @@replace logic\n__webpack_require__(59)('replace', 2, function (defined, REPLACE, $replace, maybeCallNative) {\n return [\n // `String.prototype.replace` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.replace\n function replace(searchValue, replaceValue) {\n var O = defined(this);\n var fn = searchValue == undefined ? undefined : searchValue[REPLACE];\n return fn !== undefined\n ? fn.call(searchValue, O, replaceValue)\n : $replace.call(String(O), searchValue, replaceValue);\n },\n // `RegExp.prototype[@@replace]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@replace\n function (regexp, replaceValue) {\n var res = maybeCallNative($replace, regexp, this, replaceValue);\n if (res.done) return res.value;\n\n var rx = anObject(regexp);\n var S = String(this);\n var functionalReplace = typeof replaceValue === 'function';\n if (!functionalReplace) replaceValue = String(replaceValue);\n var global = rx.global;\n if (global) {\n var fullUnicode = rx.unicode;\n rx.lastIndex = 0;\n }\n var results = [];\n while (true) {\n var result = regExpExec(rx, S);\n if (result === null) break;\n results.push(result);\n if (!global) break;\n var matchStr = String(result[0]);\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n }\n var accumulatedResult = '';\n var nextSourcePosition = 0;\n for (var i = 0; i < results.length; i++) {\n result = results[i];\n var matched = String(result[0]);\n var position = max(min(toInteger(result.index), S.length), 0);\n var captures = [];\n // NOTE: This is equivalent to\n // captures = result.slice(1).map(maybeToString)\n // but for some reason `nativeSlice.call(result, 1, result.length)` (called in\n // the slice polyfill when slicing native arrays) \"doesn't work\" in safari 9 and\n // causes a crash (https://pastebin.com/N21QzeQA) when trying to debug it.\n for (var j = 1; j < result.length; j++) captures.push(maybeToString(result[j]));\n var namedCaptures = result.groups;\n if (functionalReplace) {\n var replacerArgs = [matched].concat(captures, position, S);\n if (namedCaptures !== undefined) replacerArgs.push(namedCaptures);\n var replacement = String(replaceValue.apply(undefined, replacerArgs));\n } else {\n replacement = getSubstitution(matched, S, position, captures, namedCaptures, replaceValue);\n }\n if (position >= nextSourcePosition) {\n accumulatedResult += S.slice(nextSourcePosition, position) + replacement;\n nextSourcePosition = position + matched.length;\n }\n }\n return accumulatedResult + S.slice(nextSourcePosition);\n }\n ];\n\n // https://tc39.github.io/ecma262/#sec-getsubstitution\n function getSubstitution(matched, str, position, captures, namedCaptures, replacement) {\n var tailPos = position + matched.length;\n var m = captures.length;\n var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED;\n if (namedCaptures !== undefined) {\n namedCaptures = toObject(namedCaptures);\n symbols = SUBSTITUTION_SYMBOLS;\n }\n return $replace.call(replacement, symbols, function (match, ch) {\n var capture;\n switch (ch.charAt(0)) {\n case '$': return '$';\n case '&': return matched;\n case '`': return str.slice(0, position);\n case \"'\": return str.slice(tailPos);\n case '<':\n capture = namedCaptures[ch.slice(1, -1)];\n break;\n default: // \\d\\d?\n var n = +ch;\n if (n === 0) return match;\n if (n > m) {\n var f = floor(n / 10);\n if (f === 0) return match;\n if (f <= m) return captures[f - 1] === undefined ? ch.charAt(1) : captures[f - 1] + ch.charAt(1);\n return match;\n }\n capture = captures[n - 1];\n }\n return capture === undefined ? '' : capture;\n });\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLnJlcGxhY2UuanM/YTQ4MSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDLHlCQUF5QixtQkFBTyxDQUFDLEVBQXlCO0FBQzFELGlCQUFpQixtQkFBTyxDQUFDLEVBQXlCO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIsb0JBQW9CO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixtQkFBbUI7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLENBQUMiLCJmaWxlIjoiMjQwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIGFkdmFuY2VTdHJpbmdJbmRleCA9IHJlcXVpcmUoJy4vX2FkdmFuY2Utc3RyaW5nLWluZGV4Jyk7XG52YXIgcmVnRXhwRXhlYyA9IHJlcXVpcmUoJy4vX3JlZ2V4cC1leGVjLWFic3RyYWN0Jyk7XG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgbWluID0gTWF0aC5taW47XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xudmFyIFNVQlNUSVRVVElPTl9TWU1CT0xTID0gL1xcJChbJCZgJ118XFxkXFxkP3w8W14+XSo+KS9nO1xudmFyIFNVQlNUSVRVVElPTl9TWU1CT0xTX05PX05BTUVEID0gL1xcJChbJCZgJ118XFxkXFxkPykvZztcblxudmFyIG1heWJlVG9TdHJpbmcgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ID09PSB1bmRlZmluZWQgPyBpdCA6IFN0cmluZyhpdCk7XG59O1xuXG4vLyBAQHJlcGxhY2UgbG9naWNcbnJlcXVpcmUoJy4vX2ZpeC1yZS13a3MnKSgncmVwbGFjZScsIDIsIGZ1bmN0aW9uIChkZWZpbmVkLCBSRVBMQUNFLCAkcmVwbGFjZSwgbWF5YmVDYWxsTmF0aXZlKSB7XG4gIHJldHVybiBbXG4gICAgLy8gYFN0cmluZy5wcm90b3R5cGUucmVwbGFjZWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlXG4gICAgZnVuY3Rpb24gcmVwbGFjZShzZWFyY2hWYWx1ZSwgcmVwbGFjZVZhbHVlKSB7XG4gICAgICB2YXIgTyA9IGRlZmluZWQodGhpcyk7XG4gICAgICB2YXIgZm4gPSBzZWFyY2hWYWx1ZSA9PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBzZWFyY2hWYWx1ZVtSRVBMQUNFXTtcbiAgICAgIHJldHVybiBmbiAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8gZm4uY2FsbChzZWFyY2hWYWx1ZSwgTywgcmVwbGFjZVZhbHVlKVxuICAgICAgICA6ICRyZXBsYWNlLmNhbGwoU3RyaW5nKE8pLCBzZWFyY2hWYWx1ZSwgcmVwbGFjZVZhbHVlKTtcbiAgICB9LFxuICAgIC8vIGBSZWdFeHAucHJvdG90eXBlW0BAcmVwbGFjZV1gIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXJlZ2V4cC5wcm90b3R5cGUtQEByZXBsYWNlXG4gICAgZnVuY3Rpb24gKHJlZ2V4cCwgcmVwbGFjZVZhbHVlKSB7XG4gICAgICB2YXIgcmVzID0gbWF5YmVDYWxsTmF0aXZlKCRyZXBsYWNlLCByZWdleHAsIHRoaXMsIHJlcGxhY2VWYWx1ZSk7XG4gICAgICBpZiAocmVzLmRvbmUpIHJldHVybiByZXMudmFsdWU7XG5cbiAgICAgIHZhciByeCA9IGFuT2JqZWN0KHJlZ2V4cCk7XG4gICAgICB2YXIgUyA9IFN0cmluZyh0aGlzKTtcbiAgICAgIHZhciBmdW5jdGlvbmFsUmVwbGFjZSA9IHR5cGVvZiByZXBsYWNlVmFsdWUgPT09ICdmdW5jdGlvbic7XG4gICAgICBpZiAoIWZ1bmN0aW9uYWxSZXBsYWNlKSByZXBsYWNlVmFsdWUgPSBTdHJpbmcocmVwbGFjZVZhbHVlKTtcbiAgICAgIHZhciBnbG9iYWwgPSByeC5nbG9iYWw7XG4gICAgICBpZiAoZ2xvYmFsKSB7XG4gICAgICAgIHZhciBmdWxsVW5pY29kZSA9IHJ4LnVuaWNvZGU7XG4gICAgICAgIHJ4Lmxhc3RJbmRleCA9IDA7XG4gICAgICB9XG4gICAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHJlZ0V4cEV4ZWMocngsIFMpO1xuICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsKSBicmVhaztcbiAgICAgICAgcmVzdWx0cy5wdXNoKHJlc3VsdCk7XG4gICAgICAgIGlmICghZ2xvYmFsKSBicmVhaztcbiAgICAgICAgdmFyIG1hdGNoU3RyID0gU3RyaW5nKHJlc3VsdFswXSk7XG4gICAgICAgIGlmIChtYXRjaFN0ciA9PT0gJycpIHJ4Lmxhc3RJbmRleCA9IGFkdmFuY2VTdHJpbmdJbmRleChTLCB0b0xlbmd0aChyeC5sYXN0SW5kZXgpLCBmdWxsVW5pY29kZSk7XG4gICAgICB9XG4gICAgICB2YXIgYWNjdW11bGF0ZWRSZXN1bHQgPSAnJztcbiAgICAgIHZhciBuZXh0U291cmNlUG9zaXRpb24gPSAwO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXN1bHRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdHNbaV07XG4gICAgICAgIHZhciBtYXRjaGVkID0gU3RyaW5nKHJlc3VsdFswXSk7XG4gICAgICAgIHZhciBwb3NpdGlvbiA9IG1heChtaW4odG9JbnRlZ2VyKHJlc3VsdC5pbmRleCksIFMubGVuZ3RoKSwgMCk7XG4gICAgICAgIHZhciBjYXB0dXJlcyA9IFtdO1xuICAgICAgICAvLyBOT1RFOiBUaGlzIGlzIGVxdWl2YWxlbnQgdG9cbiAgICAgICAgLy8gICBjYXB0dXJlcyA9IHJlc3VsdC5zbGljZSgxKS5tYXAobWF5YmVUb1N0cmluZylcbiAgICAgICAgLy8gYnV0IGZvciBzb21lIHJlYXNvbiBgbmF0aXZlU2xpY2UuY2FsbChyZXN1bHQsIDEsIHJlc3VsdC5sZW5ndGgpYCAoY2FsbGVkIGluXG4gICAgICAgIC8vIHRoZSBzbGljZSBwb2x5ZmlsbCB3aGVuIHNsaWNpbmcgbmF0aXZlIGFycmF5cykgXCJkb2Vzbid0IHdvcmtcIiBpbiBzYWZhcmkgOSBhbmRcbiAgICAgICAgLy8gY2F1c2VzIGEgY3Jhc2ggKGh0dHBzOi8vcGFzdGViaW4uY29tL04yMVF6ZVFBKSB3aGVuIHRyeWluZyB0byBkZWJ1ZyBpdC5cbiAgICAgICAgZm9yICh2YXIgaiA9IDE7IGogPCByZXN1bHQubGVuZ3RoOyBqKyspIGNhcHR1cmVzLnB1c2gobWF5YmVUb1N0cmluZyhyZXN1bHRbal0pKTtcbiAgICAgICAgdmFyIG5hbWVkQ2FwdHVyZXMgPSByZXN1bHQuZ3JvdXBzO1xuICAgICAgICBpZiAoZnVuY3Rpb25hbFJlcGxhY2UpIHtcbiAgICAgICAgICB2YXIgcmVwbGFjZXJBcmdzID0gW21hdGNoZWRdLmNvbmNhdChjYXB0dXJlcywgcG9zaXRpb24sIFMpO1xuICAgICAgICAgIGlmIChuYW1lZENhcHR1cmVzICE9PSB1bmRlZmluZWQpIHJlcGxhY2VyQXJncy5wdXNoKG5hbWVkQ2FwdHVyZXMpO1xuICAgICAgICAgIHZhciByZXBsYWNlbWVudCA9IFN0cmluZyhyZXBsYWNlVmFsdWUuYXBwbHkodW5kZWZpbmVkLCByZXBsYWNlckFyZ3MpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXBsYWNlbWVudCA9IGdldFN1YnN0aXR1dGlvbihtYXRjaGVkLCBTLCBwb3NpdGlvbiwgY2FwdHVyZXMsIG5hbWVkQ2FwdHVyZXMsIHJlcGxhY2VWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBvc2l0aW9uID49IG5leHRTb3VyY2VQb3NpdGlvbikge1xuICAgICAgICAgIGFjY3VtdWxhdGVkUmVzdWx0ICs9IFMuc2xpY2UobmV4dFNvdXJjZVBvc2l0aW9uLCBwb3NpdGlvbikgKyByZXBsYWNlbWVudDtcbiAgICAgICAgICBuZXh0U291cmNlUG9zaXRpb24gPSBwb3NpdGlvbiArIG1hdGNoZWQubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gYWNjdW11bGF0ZWRSZXN1bHQgKyBTLnNsaWNlKG5leHRTb3VyY2VQb3NpdGlvbik7XG4gICAgfVxuICBdO1xuXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtZ2V0c3Vic3RpdHV0aW9uXG4gIGZ1bmN0aW9uIGdldFN1YnN0aXR1dGlvbihtYXRjaGVkLCBzdHIsIHBvc2l0aW9uLCBjYXB0dXJlcywgbmFtZWRDYXB0dXJlcywgcmVwbGFjZW1lbnQpIHtcbiAgICB2YXIgdGFpbFBvcyA9IHBvc2l0aW9uICsgbWF0Y2hlZC5sZW5ndGg7XG4gICAgdmFyIG0gPSBjYXB0dXJlcy5sZW5ndGg7XG4gICAgdmFyIHN5bWJvbHMgPSBTVUJTVElUVVRJT05fU1lNQk9MU19OT19OQU1FRDtcbiAgICBpZiAobmFtZWRDYXB0dXJlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBuYW1lZENhcHR1cmVzID0gdG9PYmplY3QobmFtZWRDYXB0dXJlcyk7XG4gICAgICBzeW1ib2xzID0gU1VCU1RJVFVUSU9OX1NZTUJPTFM7XG4gICAgfVxuICAgIHJldHVybiAkcmVwbGFjZS5jYWxsKHJlcGxhY2VtZW50LCBzeW1ib2xzLCBmdW5jdGlvbiAobWF0Y2gsIGNoKSB7XG4gICAgICB2YXIgY2FwdHVyZTtcbiAgICAgIHN3aXRjaCAoY2guY2hhckF0KDApKSB7XG4gICAgICAgIGNhc2UgJyQnOiByZXR1cm4gJyQnO1xuICAgICAgICBjYXNlICcmJzogcmV0dXJuIG1hdGNoZWQ7XG4gICAgICAgIGNhc2UgJ2AnOiByZXR1cm4gc3RyLnNsaWNlKDAsIHBvc2l0aW9uKTtcbiAgICAgICAgY2FzZSBcIidcIjogcmV0dXJuIHN0ci5zbGljZSh0YWlsUG9zKTtcbiAgICAgICAgY2FzZSAnPCc6XG4gICAgICAgICAgY2FwdHVyZSA9IG5hbWVkQ2FwdHVyZXNbY2guc2xpY2UoMSwgLTEpXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDogLy8gXFxkXFxkP1xuICAgICAgICAgIHZhciBuID0gK2NoO1xuICAgICAgICAgIGlmIChuID09PSAwKSByZXR1cm4gbWF0Y2g7XG4gICAgICAgICAgaWYgKG4gPiBtKSB7XG4gICAgICAgICAgICB2YXIgZiA9IGZsb29yKG4gLyAxMCk7XG4gICAgICAgICAgICBpZiAoZiA9PT0gMCkgcmV0dXJuIG1hdGNoO1xuICAgICAgICAgICAgaWYgKGYgPD0gbSkgcmV0dXJuIGNhcHR1cmVzW2YgLSAxXSA9PT0gdW5kZWZpbmVkID8gY2guY2hhckF0KDEpIDogY2FwdHVyZXNbZiAtIDFdICsgY2guY2hhckF0KDEpO1xuICAgICAgICAgICAgcmV0dXJuIG1hdGNoO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXB0dXJlID0gY2FwdHVyZXNbbiAtIDFdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNhcHR1cmUgPT09IHVuZGVmaW5lZCA/ICcnIDogY2FwdHVyZTtcbiAgICB9KTtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///240\n")},function(module,exports,__webpack_require__){"use strict";eval("\n\nvar anObject = __webpack_require__(1);\nvar sameValue = __webpack_require__(100);\nvar regExpExec = __webpack_require__(58);\n\n// @@search logic\n__webpack_require__(59)('search', 1, function (defined, SEARCH, $search, maybeCallNative) {\n return [\n // `String.prototype.search` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.search\n function search(regexp) {\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[SEARCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[SEARCH](String(O));\n },\n // `RegExp.prototype[@@search]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@search\n function (regexp) {\n var res = maybeCallNative($search, regexp, this);\n if (res.done) return res.value;\n var rx = anObject(regexp);\n var S = String(this);\n var previousLastIndex = rx.lastIndex;\n if (!sameValue(previousLastIndex, 0)) rx.lastIndex = 0;\n var result = regExpExec(rx, S);\n if (!sameValue(rx.lastIndex, previousLastIndex)) rx.lastIndex = previousLastIndex;\n return result === null ? -1 : result.index;\n }\n ];\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLnNlYXJjaC5qcz8zODZkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhOztBQUViLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGdCQUFnQixtQkFBTyxDQUFDLEdBQWU7QUFDdkMsaUJBQWlCLG1CQUFPLENBQUMsRUFBeUI7O0FBRWxEO0FBQ0EsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjI0MS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgc2FtZVZhbHVlID0gcmVxdWlyZSgnLi9fc2FtZS12YWx1ZScpO1xudmFyIHJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuL19yZWdleHAtZXhlYy1hYnN0cmFjdCcpO1xuXG4vLyBAQHNlYXJjaCBsb2dpY1xucmVxdWlyZSgnLi9fZml4LXJlLXdrcycpKCdzZWFyY2gnLCAxLCBmdW5jdGlvbiAoZGVmaW5lZCwgU0VBUkNILCAkc2VhcmNoLCBtYXliZUNhbGxOYXRpdmUpIHtcbiAgcmV0dXJuIFtcbiAgICAvLyBgU3RyaW5nLnByb3RvdHlwZS5zZWFyY2hgIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUuc2VhcmNoXG4gICAgZnVuY3Rpb24gc2VhcmNoKHJlZ2V4cCkge1xuICAgICAgdmFyIE8gPSBkZWZpbmVkKHRoaXMpO1xuICAgICAgdmFyIGZuID0gcmVnZXhwID09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHJlZ2V4cFtTRUFSQ0hdO1xuICAgICAgcmV0dXJuIGZuICE9PSB1bmRlZmluZWQgPyBmbi5jYWxsKHJlZ2V4cCwgTykgOiBuZXcgUmVnRXhwKHJlZ2V4cClbU0VBUkNIXShTdHJpbmcoTykpO1xuICAgIH0sXG4gICAgLy8gYFJlZ0V4cC5wcm90b3R5cGVbQEBzZWFyY2hdYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1yZWdleHAucHJvdG90eXBlLUBAc2VhcmNoXG4gICAgZnVuY3Rpb24gKHJlZ2V4cCkge1xuICAgICAgdmFyIHJlcyA9IG1heWJlQ2FsbE5hdGl2ZSgkc2VhcmNoLCByZWdleHAsIHRoaXMpO1xuICAgICAgaWYgKHJlcy5kb25lKSByZXR1cm4gcmVzLnZhbHVlO1xuICAgICAgdmFyIHJ4ID0gYW5PYmplY3QocmVnZXhwKTtcbiAgICAgIHZhciBTID0gU3RyaW5nKHRoaXMpO1xuICAgICAgdmFyIHByZXZpb3VzTGFzdEluZGV4ID0gcngubGFzdEluZGV4O1xuICAgICAgaWYgKCFzYW1lVmFsdWUocHJldmlvdXNMYXN0SW5kZXgsIDApKSByeC5sYXN0SW5kZXggPSAwO1xuICAgICAgdmFyIHJlc3VsdCA9IHJlZ0V4cEV4ZWMocngsIFMpO1xuICAgICAgaWYgKCFzYW1lVmFsdWUocngubGFzdEluZGV4LCBwcmV2aW91c0xhc3RJbmRleCkpIHJ4Lmxhc3RJbmRleCA9IHByZXZpb3VzTGFzdEluZGV4O1xuICAgICAgcmV0dXJuIHJlc3VsdCA9PT0gbnVsbCA/IC0xIDogcmVzdWx0LmluZGV4O1xuICAgIH1cbiAgXTtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///241\n")},function(module,exports,__webpack_require__){"use strict";eval("\n\nvar isRegExp = __webpack_require__(56);\nvar anObject = __webpack_require__(1);\nvar speciesConstructor = __webpack_require__(51);\nvar advanceStringIndex = __webpack_require__(88);\nvar toLength = __webpack_require__(6);\nvar callRegExpExec = __webpack_require__(58);\nvar regexpExec = __webpack_require__(87);\nvar fails = __webpack_require__(3);\nvar $min = Math.min;\nvar $push = [].push;\nvar $SPLIT = 'split';\nvar LENGTH = 'length';\nvar LAST_INDEX = 'lastIndex';\nvar MAX_UINT32 = 0xffffffff;\n\n// babel-minify transpiles RegExp('x', 'y') -> /x/y and it causes SyntaxError\nvar SUPPORTS_Y = !fails(function () { RegExp(MAX_UINT32, 'y'); });\n\n// @@split logic\n__webpack_require__(59)('split', 2, function (defined, SPLIT, $split, maybeCallNative) {\n var internalSplit;\n if (\n 'abbc'[$SPLIT](/(b)*/)[1] == 'c' ||\n 'test'[$SPLIT](/(?:)/, -1)[LENGTH] != 4 ||\n 'ab'[$SPLIT](/(?:ab)*/)[LENGTH] != 2 ||\n '.'[$SPLIT](/(.?)(.?)/)[LENGTH] != 4 ||\n '.'[$SPLIT](/()()/)[LENGTH] > 1 ||\n ''[$SPLIT](/.?/)[LENGTH]\n ) {\n // based on es5-shim implementation, need to rework it\n internalSplit = function (separator, limit) {\n var string = String(this);\n if (separator === undefined && limit === 0) return [];\n // If `separator` is not a regex, use native split\n if (!isRegExp(separator)) return $split.call(string, separator, limit);\n var output = [];\n var flags = (separator.ignoreCase ? 'i' : '') +\n (separator.multiline ? 'm' : '') +\n (separator.unicode ? 'u' : '') +\n (separator.sticky ? 'y' : '');\n var lastLastIndex = 0;\n var splitLimit = limit === undefined ? MAX_UINT32 : limit >>> 0;\n // Make `global` and avoid `lastIndex` issues by working with a copy\n var separatorCopy = new RegExp(separator.source, flags + 'g');\n var match, lastIndex, lastLength;\n while (match = regexpExec.call(separatorCopy, string)) {\n lastIndex = separatorCopy[LAST_INDEX];\n if (lastIndex > lastLastIndex) {\n output.push(string.slice(lastLastIndex, match.index));\n if (match[LENGTH] > 1 && match.index < string[LENGTH]) $push.apply(output, match.slice(1));\n lastLength = match[0][LENGTH];\n lastLastIndex = lastIndex;\n if (output[LENGTH] >= splitLimit) break;\n }\n if (separatorCopy[LAST_INDEX] === match.index) separatorCopy[LAST_INDEX]++; // Avoid an infinite loop\n }\n if (lastLastIndex === string[LENGTH]) {\n if (lastLength || !separatorCopy.test('')) output.push('');\n } else output.push(string.slice(lastLastIndex));\n return output[LENGTH] > splitLimit ? output.slice(0, splitLimit) : output;\n };\n // Chakra, V8\n } else if ('0'[$SPLIT](undefined, 0)[LENGTH]) {\n internalSplit = function (separator, limit) {\n return separator === undefined && limit === 0 ? [] : $split.call(this, separator, limit);\n };\n } else {\n internalSplit = $split;\n }\n\n return [\n // `String.prototype.split` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.split\n function split(separator, limit) {\n var O = defined(this);\n var splitter = separator == undefined ? undefined : separator[SPLIT];\n return splitter !== undefined\n ? splitter.call(separator, O, limit)\n : internalSplit.call(String(O), separator, limit);\n },\n // `RegExp.prototype[@@split]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@split\n //\n // NOTE: This cannot be properly polyfilled in engines that don't support\n // the 'y' flag.\n function (regexp, limit) {\n var res = maybeCallNative(internalSplit, regexp, this, limit, internalSplit !== $split);\n if (res.done) return res.value;\n\n var rx = anObject(regexp);\n var S = String(this);\n var C = speciesConstructor(rx, RegExp);\n\n var unicodeMatching = rx.unicode;\n var flags = (rx.ignoreCase ? 'i' : '') +\n (rx.multiline ? 'm' : '') +\n (rx.unicode ? 'u' : '') +\n (SUPPORTS_Y ? 'y' : 'g');\n\n // ^(? + rx + ) is needed, in combination with some S slicing, to\n // simulate the 'y' flag.\n var splitter = new C(SUPPORTS_Y ? rx : '^(?:' + rx.source + ')', flags);\n var lim = limit === undefined ? MAX_UINT32 : limit >>> 0;\n if (lim === 0) return [];\n if (S.length === 0) return callRegExpExec(splitter, S) === null ? [S] : [];\n var p = 0;\n var q = 0;\n var A = [];\n while (q < S.length) {\n splitter.lastIndex = SUPPORTS_Y ? q : 0;\n var z = callRegExpExec(splitter, SUPPORTS_Y ? S : S.slice(q));\n var e;\n if (\n z === null ||\n (e = $min(toLength(splitter.lastIndex + (SUPPORTS_Y ? 0 : q)), S.length)) === p\n ) {\n q = advanceStringIndex(S, q, unicodeMatching);\n } else {\n A.push(S.slice(p, q));\n if (A.length === lim) return A;\n for (var i = 1; i <= z.length - 1; i++) {\n A.push(z[i]);\n if (A.length === lim) return A;\n }\n q = p = e;\n }\n }\n A.push(S.slice(p));\n return A;\n }\n ];\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLnNwbGl0LmpzPzI4YTUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWIsZUFBZSxtQkFBTyxDQUFDLEVBQWM7QUFDckMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMseUJBQXlCLG1CQUFPLENBQUMsRUFBd0I7QUFDekQseUJBQXlCLG1CQUFPLENBQUMsRUFBeUI7QUFDMUQsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMscUJBQXFCLG1CQUFPLENBQUMsRUFBeUI7QUFDdEQsaUJBQWlCLG1CQUFPLENBQUMsRUFBZ0I7QUFDekMsWUFBWSxtQkFBTyxDQUFDLENBQVU7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EscUNBQXFDLHlCQUF5QixFQUFFOztBQUVoRTtBQUNBLG1CQUFPLENBQUMsRUFBZTtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1GQUFtRjtBQUNuRjtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EseUJBQXlCLG1CQUFtQjtBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjQyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaXNSZWdFeHAgPSByZXF1aXJlKCcuL19pcy1yZWdleHAnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4vX3NwZWNpZXMtY29uc3RydWN0b3InKTtcbnZhciBhZHZhbmNlU3RyaW5nSW5kZXggPSByZXF1aXJlKCcuL19hZHZhbmNlLXN0cmluZy1pbmRleCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgY2FsbFJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuL19yZWdleHAtZXhlYy1hYnN0cmFjdCcpO1xudmFyIHJlZ2V4cEV4ZWMgPSByZXF1aXJlKCcuL19yZWdleHAtZXhlYycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciAkbWluID0gTWF0aC5taW47XG52YXIgJHB1c2ggPSBbXS5wdXNoO1xudmFyICRTUExJVCA9ICdzcGxpdCc7XG52YXIgTEVOR1RIID0gJ2xlbmd0aCc7XG52YXIgTEFTVF9JTkRFWCA9ICdsYXN0SW5kZXgnO1xudmFyIE1BWF9VSU5UMzIgPSAweGZmZmZmZmZmO1xuXG4vLyBiYWJlbC1taW5pZnkgdHJhbnNwaWxlcyBSZWdFeHAoJ3gnLCAneScpIC0+IC94L3kgYW5kIGl0IGNhdXNlcyBTeW50YXhFcnJvclxudmFyIFNVUFBPUlRTX1kgPSAhZmFpbHMoZnVuY3Rpb24gKCkgeyBSZWdFeHAoTUFYX1VJTlQzMiwgJ3knKTsgfSk7XG5cbi8vIEBAc3BsaXQgbG9naWNcbnJlcXVpcmUoJy4vX2ZpeC1yZS13a3MnKSgnc3BsaXQnLCAyLCBmdW5jdGlvbiAoZGVmaW5lZCwgU1BMSVQsICRzcGxpdCwgbWF5YmVDYWxsTmF0aXZlKSB7XG4gIHZhciBpbnRlcm5hbFNwbGl0O1xuICBpZiAoXG4gICAgJ2FiYmMnWyRTUExJVF0oLyhiKSovKVsxXSA9PSAnYycgfHxcbiAgICAndGVzdCdbJFNQTElUXSgvKD86KS8sIC0xKVtMRU5HVEhdICE9IDQgfHxcbiAgICAnYWInWyRTUExJVF0oLyg/OmFiKSovKVtMRU5HVEhdICE9IDIgfHxcbiAgICAnLidbJFNQTElUXSgvKC4/KSguPykvKVtMRU5HVEhdICE9IDQgfHxcbiAgICAnLidbJFNQTElUXSgvKCkoKS8pW0xFTkdUSF0gPiAxIHx8XG4gICAgJydbJFNQTElUXSgvLj8vKVtMRU5HVEhdXG4gICkge1xuICAgIC8vIGJhc2VkIG9uIGVzNS1zaGltIGltcGxlbWVudGF0aW9uLCBuZWVkIHRvIHJld29yayBpdFxuICAgIGludGVybmFsU3BsaXQgPSBmdW5jdGlvbiAoc2VwYXJhdG9yLCBsaW1pdCkge1xuICAgICAgdmFyIHN0cmluZyA9IFN0cmluZyh0aGlzKTtcbiAgICAgIGlmIChzZXBhcmF0b3IgPT09IHVuZGVmaW5lZCAmJiBsaW1pdCA9PT0gMCkgcmV0dXJuIFtdO1xuICAgICAgLy8gSWYgYHNlcGFyYXRvcmAgaXMgbm90IGEgcmVnZXgsIHVzZSBuYXRpdmUgc3BsaXRcbiAgICAgIGlmICghaXNSZWdFeHAoc2VwYXJhdG9yKSkgcmV0dXJuICRzcGxpdC5jYWxsKHN0cmluZywgc2VwYXJhdG9yLCBsaW1pdCk7XG4gICAgICB2YXIgb3V0cHV0ID0gW107XG4gICAgICB2YXIgZmxhZ3MgPSAoc2VwYXJhdG9yLmlnbm9yZUNhc2UgPyAnaScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHNlcGFyYXRvci5tdWx0aWxpbmUgPyAnbScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHNlcGFyYXRvci51bmljb2RlID8gJ3UnIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChzZXBhcmF0b3Iuc3RpY2t5ID8gJ3knIDogJycpO1xuICAgICAgdmFyIGxhc3RMYXN0SW5kZXggPSAwO1xuICAgICAgdmFyIHNwbGl0TGltaXQgPSBsaW1pdCA9PT0gdW5kZWZpbmVkID8gTUFYX1VJTlQzMiA6IGxpbWl0ID4+PiAwO1xuICAgICAgLy8gTWFrZSBgZ2xvYmFsYCBhbmQgYXZvaWQgYGxhc3RJbmRleGAgaXNzdWVzIGJ5IHdvcmtpbmcgd2l0aCBhIGNvcHlcbiAgICAgIHZhciBzZXBhcmF0b3JDb3B5ID0gbmV3IFJlZ0V4cChzZXBhcmF0b3Iuc291cmNlLCBmbGFncyArICdnJyk7XG4gICAgICB2YXIgbWF0Y2gsIGxhc3RJbmRleCwgbGFzdExlbmd0aDtcbiAgICAgIHdoaWxlIChtYXRjaCA9IHJlZ2V4cEV4ZWMuY2FsbChzZXBhcmF0b3JDb3B5LCBzdHJpbmcpKSB7XG4gICAgICAgIGxhc3RJbmRleCA9IHNlcGFyYXRvckNvcHlbTEFTVF9JTkRFWF07XG4gICAgICAgIGlmIChsYXN0SW5kZXggPiBsYXN0TGFzdEluZGV4KSB7XG4gICAgICAgICAgb3V0cHV0LnB1c2goc3RyaW5nLnNsaWNlKGxhc3RMYXN0SW5kZXgsIG1hdGNoLmluZGV4KSk7XG4gICAgICAgICAgaWYgKG1hdGNoW0xFTkdUSF0gPiAxICYmIG1hdGNoLmluZGV4IDwgc3RyaW5nW0xFTkdUSF0pICRwdXNoLmFwcGx5KG91dHB1dCwgbWF0Y2guc2xpY2UoMSkpO1xuICAgICAgICAgIGxhc3RMZW5ndGggPSBtYXRjaFswXVtMRU5HVEhdO1xuICAgICAgICAgIGxhc3RMYXN0SW5kZXggPSBsYXN0SW5kZXg7XG4gICAgICAgICAgaWYgKG91dHB1dFtMRU5HVEhdID49IHNwbGl0TGltaXQpIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzZXBhcmF0b3JDb3B5W0xBU1RfSU5ERVhdID09PSBtYXRjaC5pbmRleCkgc2VwYXJhdG9yQ29weVtMQVNUX0lOREVYXSsrOyAvLyBBdm9pZCBhbiBpbmZpbml0ZSBsb29wXG4gICAgICB9XG4gICAgICBpZiAobGFzdExhc3RJbmRleCA9PT0gc3RyaW5nW0xFTkdUSF0pIHtcbiAgICAgICAgaWYgKGxhc3RMZW5ndGggfHwgIXNlcGFyYXRvckNvcHkudGVzdCgnJykpIG91dHB1dC5wdXNoKCcnKTtcbiAgICAgIH0gZWxzZSBvdXRwdXQucHVzaChzdHJpbmcuc2xpY2UobGFzdExhc3RJbmRleCkpO1xuICAgICAgcmV0dXJuIG91dHB1dFtMRU5HVEhdID4gc3BsaXRMaW1pdCA/IG91dHB1dC5zbGljZSgwLCBzcGxpdExpbWl0KSA6IG91dHB1dDtcbiAgICB9O1xuICAvLyBDaGFrcmEsIFY4XG4gIH0gZWxzZSBpZiAoJzAnWyRTUExJVF0odW5kZWZpbmVkLCAwKVtMRU5HVEhdKSB7XG4gICAgaW50ZXJuYWxTcGxpdCA9IGZ1bmN0aW9uIChzZXBhcmF0b3IsIGxpbWl0KSB7XG4gICAgICByZXR1cm4gc2VwYXJhdG9yID09PSB1bmRlZmluZWQgJiYgbGltaXQgPT09IDAgPyBbXSA6ICRzcGxpdC5jYWxsKHRoaXMsIHNlcGFyYXRvciwgbGltaXQpO1xuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgaW50ZXJuYWxTcGxpdCA9ICRzcGxpdDtcbiAgfVxuXG4gIHJldHVybiBbXG4gICAgLy8gYFN0cmluZy5wcm90b3R5cGUuc3BsaXRgIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUuc3BsaXRcbiAgICBmdW5jdGlvbiBzcGxpdChzZXBhcmF0b3IsIGxpbWl0KSB7XG4gICAgICB2YXIgTyA9IGRlZmluZWQodGhpcyk7XG4gICAgICB2YXIgc3BsaXR0ZXIgPSBzZXBhcmF0b3IgPT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogc2VwYXJhdG9yW1NQTElUXTtcbiAgICAgIHJldHVybiBzcGxpdHRlciAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8gc3BsaXR0ZXIuY2FsbChzZXBhcmF0b3IsIE8sIGxpbWl0KVxuICAgICAgICA6IGludGVybmFsU3BsaXQuY2FsbChTdHJpbmcoTyksIHNlcGFyYXRvciwgbGltaXQpO1xuICAgIH0sXG4gICAgLy8gYFJlZ0V4cC5wcm90b3R5cGVbQEBzcGxpdF1gIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXJlZ2V4cC5wcm90b3R5cGUtQEBzcGxpdFxuICAgIC8vXG4gICAgLy8gTk9URTogVGhpcyBjYW5ub3QgYmUgcHJvcGVybHkgcG9seWZpbGxlZCBpbiBlbmdpbmVzIHRoYXQgZG9uJ3Qgc3VwcG9ydFxuICAgIC8vIHRoZSAneScgZmxhZy5cbiAgICBmdW5jdGlvbiAocmVnZXhwLCBsaW1pdCkge1xuICAgICAgdmFyIHJlcyA9IG1heWJlQ2FsbE5hdGl2ZShpbnRlcm5hbFNwbGl0LCByZWdleHAsIHRoaXMsIGxpbWl0LCBpbnRlcm5hbFNwbGl0ICE9PSAkc3BsaXQpO1xuICAgICAgaWYgKHJlcy5kb25lKSByZXR1cm4gcmVzLnZhbHVlO1xuXG4gICAgICB2YXIgcnggPSBhbk9iamVjdChyZWdleHApO1xuICAgICAgdmFyIFMgPSBTdHJpbmcodGhpcyk7XG4gICAgICB2YXIgQyA9IHNwZWNpZXNDb25zdHJ1Y3RvcihyeCwgUmVnRXhwKTtcblxuICAgICAgdmFyIHVuaWNvZGVNYXRjaGluZyA9IHJ4LnVuaWNvZGU7XG4gICAgICB2YXIgZmxhZ3MgPSAocnguaWdub3JlQ2FzZSA/ICdpJyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAocngubXVsdGlsaW5lID8gJ20nIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChyeC51bmljb2RlID8gJ3UnIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChTVVBQT1JUU19ZID8gJ3knIDogJ2cnKTtcblxuICAgICAgLy8gXig/ICsgcnggKyApIGlzIG5lZWRlZCwgaW4gY29tYmluYXRpb24gd2l0aCBzb21lIFMgc2xpY2luZywgdG9cbiAgICAgIC8vIHNpbXVsYXRlIHRoZSAneScgZmxhZy5cbiAgICAgIHZhciBzcGxpdHRlciA9IG5ldyBDKFNVUFBPUlRTX1kgPyByeCA6ICdeKD86JyArIHJ4LnNvdXJjZSArICcpJywgZmxhZ3MpO1xuICAgICAgdmFyIGxpbSA9IGxpbWl0ID09PSB1bmRlZmluZWQgPyBNQVhfVUlOVDMyIDogbGltaXQgPj4+IDA7XG4gICAgICBpZiAobGltID09PSAwKSByZXR1cm4gW107XG4gICAgICBpZiAoUy5sZW5ndGggPT09IDApIHJldHVybiBjYWxsUmVnRXhwRXhlYyhzcGxpdHRlciwgUykgPT09IG51bGwgPyBbU10gOiBbXTtcbiAgICAgIHZhciBwID0gMDtcbiAgICAgIHZhciBxID0gMDtcbiAgICAgIHZhciBBID0gW107XG4gICAgICB3aGlsZSAocSA8IFMubGVuZ3RoKSB7XG4gICAgICAgIHNwbGl0dGVyLmxhc3RJbmRleCA9IFNVUFBPUlRTX1kgPyBxIDogMDtcbiAgICAgICAgdmFyIHogPSBjYWxsUmVnRXhwRXhlYyhzcGxpdHRlciwgU1VQUE9SVFNfWSA/IFMgOiBTLnNsaWNlKHEpKTtcbiAgICAgICAgdmFyIGU7XG4gICAgICAgIGlmIChcbiAgICAgICAgICB6ID09PSBudWxsIHx8XG4gICAgICAgICAgKGUgPSAkbWluKHRvTGVuZ3RoKHNwbGl0dGVyLmxhc3RJbmRleCArIChTVVBQT1JUU19ZID8gMCA6IHEpKSwgUy5sZW5ndGgpKSA9PT0gcFxuICAgICAgICApIHtcbiAgICAgICAgICBxID0gYWR2YW5jZVN0cmluZ0luZGV4KFMsIHEsIHVuaWNvZGVNYXRjaGluZyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgQS5wdXNoKFMuc2xpY2UocCwgcSkpO1xuICAgICAgICAgIGlmIChBLmxlbmd0aCA9PT0gbGltKSByZXR1cm4gQTtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8PSB6Lmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICAgICAgQS5wdXNoKHpbaV0pO1xuICAgICAgICAgICAgaWYgKEEubGVuZ3RoID09PSBsaW0pIHJldHVybiBBO1xuICAgICAgICAgIH1cbiAgICAgICAgICBxID0gcCA9IGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIEEucHVzaChTLnNsaWNlKHApKTtcbiAgICAgIHJldHVybiBBO1xuICAgIH1cbiAgXTtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///242\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar LIBRARY = __webpack_require__(29);\nvar global = __webpack_require__(2);\nvar ctx = __webpack_require__(19);\nvar classof = __webpack_require__(44);\nvar $export = __webpack_require__(0);\nvar isObject = __webpack_require__(4);\nvar aFunction = __webpack_require__(10);\nvar anInstance = __webpack_require__(39);\nvar forOf = __webpack_require__(40);\nvar speciesConstructor = __webpack_require__(51);\nvar task = __webpack_require__(89).set;\nvar microtask = __webpack_require__(90)();\nvar newPromiseCapabilityModule = __webpack_require__(91);\nvar perform = __webpack_require__(115);\nvar userAgent = __webpack_require__(60);\nvar promiseResolve = __webpack_require__(116);\nvar PROMISE = 'Promise';\nvar TypeError = global.TypeError;\nvar process = global.process;\nvar versions = process && process.versions;\nvar v8 = versions && versions.v8 || '';\nvar $Promise = global[PROMISE];\nvar isNode = classof(process) == 'process';\nvar empty = function () { /* empty */ };\nvar Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper;\nvar newPromiseCapability = newGenericPromiseCapability = newPromiseCapabilityModule.f;\n\nvar USE_NATIVE = !!function () {\n try {\n // correct subclassing with @@species support\n var promise = $Promise.resolve(1);\n var FakePromise = (promise.constructor = {})[__webpack_require__(5)('species')] = function (exec) {\n exec(empty, empty);\n };\n // unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n return (isNode || typeof PromiseRejectionEvent == 'function')\n && promise.then(empty) instanceof FakePromise\n // v8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables\n // https://bugs.chromium.org/p/chromium/issues/detail?id=830565\n // we can't detect it synchronously, so just check versions\n && v8.indexOf('6.6') !== 0\n && userAgent.indexOf('Chrome/66') === -1;\n } catch (e) { /* empty */ }\n}();\n\n// helpers\nvar isThenable = function (it) {\n var then;\n return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\nvar notify = function (promise, isReject) {\n if (promise._n) return;\n promise._n = true;\n var chain = promise._c;\n microtask(function () {\n var value = promise._v;\n var ok = promise._s == 1;\n var i = 0;\n var run = function (reaction) {\n var handler = ok ? reaction.ok : reaction.fail;\n var resolve = reaction.resolve;\n var reject = reaction.reject;\n var domain = reaction.domain;\n var result, then, exited;\n try {\n if (handler) {\n if (!ok) {\n if (promise._h == 2) onHandleUnhandled(promise);\n promise._h = 1;\n }\n if (handler === true) result = value;\n else {\n if (domain) domain.enter();\n result = handler(value); // may throw\n if (domain) {\n domain.exit();\n exited = true;\n }\n }\n if (result === reaction.promise) {\n reject(TypeError('Promise-chain cycle'));\n } else if (then = isThenable(result)) {\n then.call(result, resolve, reject);\n } else resolve(result);\n } else reject(value);\n } catch (e) {\n if (domain && !exited) domain.exit();\n reject(e);\n }\n };\n while (chain.length > i) run(chain[i++]); // variable length - can't use forEach\n promise._c = [];\n promise._n = false;\n if (isReject && !promise._h) onUnhandled(promise);\n });\n};\nvar onUnhandled = function (promise) {\n task.call(global, function () {\n var value = promise._v;\n var unhandled = isUnhandled(promise);\n var result, handler, console;\n if (unhandled) {\n result = perform(function () {\n if (isNode) {\n process.emit('unhandledRejection', value, promise);\n } else if (handler = global.onunhandledrejection) {\n handler({ promise: promise, reason: value });\n } else if ((console = global.console) && console.error) {\n console.error('Unhandled promise rejection', value);\n }\n });\n // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n promise._h = isNode || isUnhandled(promise) ? 2 : 1;\n } promise._a = undefined;\n if (unhandled && result.e) throw result.v;\n });\n};\nvar isUnhandled = function (promise) {\n return promise._h !== 1 && (promise._a || promise._c).length === 0;\n};\nvar onHandleUnhandled = function (promise) {\n task.call(global, function () {\n var handler;\n if (isNode) {\n process.emit('rejectionHandled', promise);\n } else if (handler = global.onrejectionhandled) {\n handler({ promise: promise, reason: promise._v });\n }\n });\n};\nvar $reject = function (value) {\n var promise = this;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n promise._v = value;\n promise._s = 2;\n if (!promise._a) promise._a = promise._c.slice();\n notify(promise, true);\n};\nvar $resolve = function (value) {\n var promise = this;\n var then;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n try {\n if (promise === value) throw TypeError(\"Promise can't be resolved itself\");\n if (then = isThenable(value)) {\n microtask(function () {\n var wrapper = { _w: promise, _d: false }; // wrap\n try {\n then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));\n } catch (e) {\n $reject.call(wrapper, e);\n }\n });\n } else {\n promise._v = value;\n promise._s = 1;\n notify(promise, false);\n }\n } catch (e) {\n $reject.call({ _w: promise, _d: false }, e); // wrap\n }\n};\n\n// constructor polyfill\nif (!USE_NATIVE) {\n // 25.4.3.1 Promise(executor)\n $Promise = function Promise(executor) {\n anInstance(this, $Promise, PROMISE, '_h');\n aFunction(executor);\n Internal.call(this);\n try {\n executor(ctx($resolve, this, 1), ctx($reject, this, 1));\n } catch (err) {\n $reject.call(this, err);\n }\n };\n // eslint-disable-next-line no-unused-vars\n Internal = function Promise(executor) {\n this._c = []; // <- awaiting reactions\n this._a = undefined; // <- checked in isUnhandled reactions\n this._s = 0; // <- state\n this._d = false; // <- done\n this._v = undefined; // <- value\n this._h = 0; // <- rejection state, 0 - default, 1 - handled, 2 - unhandled\n this._n = false; // <- notify\n };\n Internal.prototype = __webpack_require__(41)($Promise.prototype, {\n // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)\n then: function then(onFulfilled, onRejected) {\n var reaction = newPromiseCapability(speciesConstructor(this, $Promise));\n reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\n reaction.fail = typeof onRejected == 'function' && onRejected;\n reaction.domain = isNode ? process.domain : undefined;\n this._c.push(reaction);\n if (this._a) this._a.push(reaction);\n if (this._s) notify(this, false);\n return reaction.promise;\n },\n // 25.4.5.1 Promise.prototype.catch(onRejected)\n 'catch': function (onRejected) {\n return this.then(undefined, onRejected);\n }\n });\n OwnPromiseCapability = function () {\n var promise = new Internal();\n this.promise = promise;\n this.resolve = ctx($resolve, promise, 1);\n this.reject = ctx($reject, promise, 1);\n };\n newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n return C === $Promise || C === Wrapper\n ? new OwnPromiseCapability(C)\n : newGenericPromiseCapability(C);\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Promise: $Promise });\n__webpack_require__(43)($Promise, PROMISE);\n__webpack_require__(38)(PROMISE);\nWrapper = __webpack_require__(18)[PROMISE];\n\n// statics\n$export($export.S + $export.F * !USE_NATIVE, PROMISE, {\n // 25.4.4.5 Promise.reject(r)\n reject: function reject(r) {\n var capability = newPromiseCapability(this);\n var $$reject = capability.reject;\n $$reject(r);\n return capability.promise;\n }\n});\n$export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {\n // 25.4.4.6 Promise.resolve(x)\n resolve: function resolve(x) {\n return promiseResolve(LIBRARY && this === Wrapper ? $Promise : this, x);\n }\n});\n$export($export.S + $export.F * !(USE_NATIVE && __webpack_require__(57)(function (iter) {\n $Promise.all(iter)['catch'](empty);\n})), PROMISE, {\n // 25.4.4.1 Promise.all(iterable)\n all: function all(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var values = [];\n var index = 0;\n var remaining = 1;\n forOf(iterable, false, function (promise) {\n var $index = index++;\n var alreadyCalled = false;\n values.push(undefined);\n remaining++;\n C.resolve(promise).then(function (value) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[$index] = value;\n --remaining || resolve(values);\n }, reject);\n });\n --remaining || resolve(values);\n });\n if (result.e) reject(result.v);\n return capability.promise;\n },\n // 25.4.4.4 Promise.race(iterable)\n race: function race(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var reject = capability.reject;\n var result = perform(function () {\n forOf(iterable, false, function (promise) {\n C.resolve(promise).then(capability.resolve, reject);\n });\n });\n if (result.e) reject(result.v);\n return capability.promise;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucHJvbWlzZS5qcz81NTFjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsY0FBYyxtQkFBTyxDQUFDLEVBQVk7QUFDbEMsYUFBYSxtQkFBTyxDQUFDLENBQVc7QUFDaEMsVUFBVSxtQkFBTyxDQUFDLEVBQVE7QUFDMUIsY0FBYyxtQkFBTyxDQUFDLEVBQVk7QUFDbEMsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2QyxpQkFBaUIsbUJBQU8sQ0FBQyxFQUFnQjtBQUN6QyxZQUFZLG1CQUFPLENBQUMsRUFBVztBQUMvQix5QkFBeUIsbUJBQU8sQ0FBQyxFQUF3QjtBQUN6RCxXQUFXLG1CQUFPLENBQUMsRUFBUztBQUM1QixnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFjO0FBQ3RDLGlDQUFpQyxtQkFBTyxDQUFDLEVBQTJCO0FBQ3BFLGNBQWMsbUJBQU8sQ0FBQyxHQUFZO0FBQ2xDLGdCQUFnQixtQkFBTyxDQUFDLEVBQWU7QUFDdkMscUJBQXFCLG1CQUFPLENBQUMsR0FBb0I7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtDQUErQyxFQUFFLG1CQUFPLENBQUMsQ0FBUTtBQUNqRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUcsWUFBWTtBQUNmLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0M7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQSxXQUFXO0FBQ1gsU0FBUztBQUNULE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZDQUE2QztBQUM3QztBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsbUJBQW1CLGtDQUFrQztBQUNyRCxTQUFTO0FBQ1Q7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxlQUFlLHVDQUF1QztBQUN0RDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLDBCQUEwQjtBQUNqRDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILGtCQUFrQix5QkFBeUIsS0FBSztBQUNoRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCLHdCQUF3QjtBQUN4QixnQkFBZ0I7QUFDaEIsb0JBQW9CO0FBQ3BCLHdCQUF3QjtBQUN4QixnQkFBZ0I7QUFDaEIsb0JBQW9CO0FBQ3BCO0FBQ0EsdUJBQXVCLG1CQUFPLENBQUMsRUFBaUI7QUFDaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDBEQUEwRCxvQkFBb0I7QUFDOUUsbUJBQU8sQ0FBQyxFQUFzQjtBQUM5QixtQkFBTyxDQUFDLEVBQWdCO0FBQ3hCLFVBQVUsbUJBQU8sQ0FBQyxFQUFTOztBQUUzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCxnREFBZ0QsbUJBQU8sQ0FBQyxFQUFnQjtBQUN4RTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULE9BQU87QUFDUDtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjQzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIExJQlJBUlkgPSByZXF1aXJlKCcuL19saWJyYXJ5Jyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4vX2NsYXNzb2YnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG52YXIgZm9yT2YgPSByZXF1aXJlKCcuL19mb3Itb2YnKTtcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuL19zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG52YXIgdGFzayA9IHJlcXVpcmUoJy4vX3Rhc2snKS5zZXQ7XG52YXIgbWljcm90YXNrID0gcmVxdWlyZSgnLi9fbWljcm90YXNrJykoKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZSA9IHJlcXVpcmUoJy4vX25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcbnZhciBwZXJmb3JtID0gcmVxdWlyZSgnLi9fcGVyZm9ybScpO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4vX3VzZXItYWdlbnQnKTtcbnZhciBwcm9taXNlUmVzb2x2ZSA9IHJlcXVpcmUoJy4vX3Byb21pc2UtcmVzb2x2ZScpO1xudmFyIFBST01JU0UgPSAnUHJvbWlzZSc7XG52YXIgVHlwZUVycm9yID0gZ2xvYmFsLlR5cGVFcnJvcjtcbnZhciBwcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3M7XG52YXIgdmVyc2lvbnMgPSBwcm9jZXNzICYmIHByb2Nlc3MudmVyc2lvbnM7XG52YXIgdjggPSB2ZXJzaW9ucyAmJiB2ZXJzaW9ucy52OCB8fCAnJztcbnZhciAkUHJvbWlzZSA9IGdsb2JhbFtQUk9NSVNFXTtcbnZhciBpc05vZGUgPSBjbGFzc29mKHByb2Nlc3MpID09ICdwcm9jZXNzJztcbnZhciBlbXB0eSA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcbnZhciBJbnRlcm5hbCwgbmV3R2VuZXJpY1Byb21pc2VDYXBhYmlsaXR5LCBPd25Qcm9taXNlQ2FwYWJpbGl0eSwgV3JhcHBlcjtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IG5ld0dlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmY7XG5cbnZhciBVU0VfTkFUSVZFID0gISFmdW5jdGlvbiAoKSB7XG4gIHRyeSB7XG4gICAgLy8gY29ycmVjdCBzdWJjbGFzc2luZyB3aXRoIEBAc3BlY2llcyBzdXBwb3J0XG4gICAgdmFyIHByb21pc2UgPSAkUHJvbWlzZS5yZXNvbHZlKDEpO1xuICAgIHZhciBGYWtlUHJvbWlzZSA9IChwcm9taXNlLmNvbnN0cnVjdG9yID0ge30pW3JlcXVpcmUoJy4vX3drcycpKCdzcGVjaWVzJyldID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgICAgIGV4ZWMoZW1wdHksIGVtcHR5KTtcbiAgICB9O1xuICAgIC8vIHVuaGFuZGxlZCByZWplY3Rpb25zIHRyYWNraW5nIHN1cHBvcnQsIE5vZGVKUyBQcm9taXNlIHdpdGhvdXQgaXQgZmFpbHMgQEBzcGVjaWVzIHRlc3RcbiAgICByZXR1cm4gKGlzTm9kZSB8fCB0eXBlb2YgUHJvbWlzZVJlamVjdGlvbkV2ZW50ID09ICdmdW5jdGlvbicpXG4gICAgICAmJiBwcm9taXNlLnRoZW4oZW1wdHkpIGluc3RhbmNlb2YgRmFrZVByb21pc2VcbiAgICAgIC8vIHY4IDYuNiAoTm9kZSAxMCBhbmQgQ2hyb21lIDY2KSBoYXZlIGEgYnVnIHdpdGggcmVzb2x2aW5nIGN1c3RvbSB0aGVuYWJsZXNcbiAgICAgIC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTgzMDU2NVxuICAgICAgLy8gd2UgY2FuJ3QgZGV0ZWN0IGl0IHN5bmNocm9ub3VzbHksIHNvIGp1c3QgY2hlY2sgdmVyc2lvbnNcbiAgICAgICYmIHY4LmluZGV4T2YoJzYuNicpICE9PSAwXG4gICAgICAmJiB1c2VyQWdlbnQuaW5kZXhPZignQ2hyb21lLzY2JykgPT09IC0xO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbn0oKTtcblxuLy8gaGVscGVyc1xudmFyIGlzVGhlbmFibGUgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIHRoZW47XG4gIHJldHVybiBpc09iamVjdChpdCkgJiYgdHlwZW9mICh0aGVuID0gaXQudGhlbikgPT0gJ2Z1bmN0aW9uJyA/IHRoZW4gOiBmYWxzZTtcbn07XG52YXIgbm90aWZ5ID0gZnVuY3Rpb24gKHByb21pc2UsIGlzUmVqZWN0KSB7XG4gIGlmIChwcm9taXNlLl9uKSByZXR1cm47XG4gIHByb21pc2UuX24gPSB0cnVlO1xuICB2YXIgY2hhaW4gPSBwcm9taXNlLl9jO1xuICBtaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgIHZhciB2YWx1ZSA9IHByb21pc2UuX3Y7XG4gICAgdmFyIG9rID0gcHJvbWlzZS5fcyA9PSAxO1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIgcnVuID0gZnVuY3Rpb24gKHJlYWN0aW9uKSB7XG4gICAgICB2YXIgaGFuZGxlciA9IG9rID8gcmVhY3Rpb24ub2sgOiByZWFjdGlvbi5mYWlsO1xuICAgICAgdmFyIHJlc29sdmUgPSByZWFjdGlvbi5yZXNvbHZlO1xuICAgICAgdmFyIHJlamVjdCA9IHJlYWN0aW9uLnJlamVjdDtcbiAgICAgIHZhciBkb21haW4gPSByZWFjdGlvbi5kb21haW47XG4gICAgICB2YXIgcmVzdWx0LCB0aGVuLCBleGl0ZWQ7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoaGFuZGxlcikge1xuICAgICAgICAgIGlmICghb2spIHtcbiAgICAgICAgICAgIGlmIChwcm9taXNlLl9oID09IDIpIG9uSGFuZGxlVW5oYW5kbGVkKHByb21pc2UpO1xuICAgICAgICAgICAgcHJvbWlzZS5faCA9IDE7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChoYW5kbGVyID09PSB0cnVlKSByZXN1bHQgPSB2YWx1ZTtcbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChkb21haW4pIGRvbWFpbi5lbnRlcigpO1xuICAgICAgICAgICAgcmVzdWx0ID0gaGFuZGxlcih2YWx1ZSk7IC8vIG1heSB0aHJvd1xuICAgICAgICAgICAgaWYgKGRvbWFpbikge1xuICAgICAgICAgICAgICBkb21haW4uZXhpdCgpO1xuICAgICAgICAgICAgICBleGl0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocmVzdWx0ID09PSByZWFjdGlvbi5wcm9taXNlKSB7XG4gICAgICAgICAgICByZWplY3QoVHlwZUVycm9yKCdQcm9taXNlLWNoYWluIGN5Y2xlJykpO1xuICAgICAgICAgIH0gZWxzZSBpZiAodGhlbiA9IGlzVGhlbmFibGUocmVzdWx0KSkge1xuICAgICAgICAgICAgdGhlbi5jYWxsKHJlc3VsdCwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICB9IGVsc2UgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICB9IGVsc2UgcmVqZWN0KHZhbHVlKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKGRvbWFpbiAmJiAhZXhpdGVkKSBkb21haW4uZXhpdCgpO1xuICAgICAgICByZWplY3QoZSk7XG4gICAgICB9XG4gICAgfTtcbiAgICB3aGlsZSAoY2hhaW4ubGVuZ3RoID4gaSkgcnVuKGNoYWluW2krK10pOyAvLyB2YXJpYWJsZSBsZW5ndGggLSBjYW4ndCB1c2UgZm9yRWFjaFxuICAgIHByb21pc2UuX2MgPSBbXTtcbiAgICBwcm9taXNlLl9uID0gZmFsc2U7XG4gICAgaWYgKGlzUmVqZWN0ICYmICFwcm9taXNlLl9oKSBvblVuaGFuZGxlZChwcm9taXNlKTtcbiAgfSk7XG59O1xudmFyIG9uVW5oYW5kbGVkID0gZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgdGFzay5jYWxsKGdsb2JhbCwgZnVuY3Rpb24gKCkge1xuICAgIHZhciB2YWx1ZSA9IHByb21pc2UuX3Y7XG4gICAgdmFyIHVuaGFuZGxlZCA9IGlzVW5oYW5kbGVkKHByb21pc2UpO1xuICAgIHZhciByZXN1bHQsIGhhbmRsZXIsIGNvbnNvbGU7XG4gICAgaWYgKHVuaGFuZGxlZCkge1xuICAgICAgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChpc05vZGUpIHtcbiAgICAgICAgICBwcm9jZXNzLmVtaXQoJ3VuaGFuZGxlZFJlamVjdGlvbicsIHZhbHVlLCBwcm9taXNlKTtcbiAgICAgICAgfSBlbHNlIGlmIChoYW5kbGVyID0gZ2xvYmFsLm9udW5oYW5kbGVkcmVqZWN0aW9uKSB7XG4gICAgICAgICAgaGFuZGxlcih7IHByb21pc2U6IHByb21pc2UsIHJlYXNvbjogdmFsdWUgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoKGNvbnNvbGUgPSBnbG9iYWwuY29uc29sZSkgJiYgY29uc29sZS5lcnJvcikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1VuaGFuZGxlZCBwcm9taXNlIHJlamVjdGlvbicsIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICAvLyBCcm93c2VycyBzaG91bGQgbm90IHRyaWdnZXIgYHJlamVjdGlvbkhhbmRsZWRgIGV2ZW50IGlmIGl0IHdhcyBoYW5kbGVkIGhlcmUsIE5vZGVKUyAtIHNob3VsZFxuICAgICAgcHJvbWlzZS5faCA9IGlzTm9kZSB8fCBpc1VuaGFuZGxlZChwcm9taXNlKSA/IDIgOiAxO1xuICAgIH0gcHJvbWlzZS5fYSA9IHVuZGVmaW5lZDtcbiAgICBpZiAodW5oYW5kbGVkICYmIHJlc3VsdC5lKSB0aHJvdyByZXN1bHQudjtcbiAgfSk7XG59O1xudmFyIGlzVW5oYW5kbGVkID0gZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgcmV0dXJuIHByb21pc2UuX2ggIT09IDEgJiYgKHByb21pc2UuX2EgfHwgcHJvbWlzZS5fYykubGVuZ3RoID09PSAwO1xufTtcbnZhciBvbkhhbmRsZVVuaGFuZGxlZCA9IGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gIHRhc2suY2FsbChnbG9iYWwsIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgaGFuZGxlcjtcbiAgICBpZiAoaXNOb2RlKSB7XG4gICAgICBwcm9jZXNzLmVtaXQoJ3JlamVjdGlvbkhhbmRsZWQnLCBwcm9taXNlKTtcbiAgICB9IGVsc2UgaWYgKGhhbmRsZXIgPSBnbG9iYWwub25yZWplY3Rpb25oYW5kbGVkKSB7XG4gICAgICBoYW5kbGVyKHsgcHJvbWlzZTogcHJvbWlzZSwgcmVhc29uOiBwcm9taXNlLl92IH0pO1xuICAgIH1cbiAgfSk7XG59O1xudmFyICRyZWplY3QgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgdmFyIHByb21pc2UgPSB0aGlzO1xuICBpZiAocHJvbWlzZS5fZCkgcmV0dXJuO1xuICBwcm9taXNlLl9kID0gdHJ1ZTtcbiAgcHJvbWlzZSA9IHByb21pc2UuX3cgfHwgcHJvbWlzZTsgLy8gdW53cmFwXG4gIHByb21pc2UuX3YgPSB2YWx1ZTtcbiAgcHJvbWlzZS5fcyA9IDI7XG4gIGlmICghcHJvbWlzZS5fYSkgcHJvbWlzZS5fYSA9IHByb21pc2UuX2Muc2xpY2UoKTtcbiAgbm90aWZ5KHByb21pc2UsIHRydWUpO1xufTtcbnZhciAkcmVzb2x2ZSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICB2YXIgcHJvbWlzZSA9IHRoaXM7XG4gIHZhciB0aGVuO1xuICBpZiAocHJvbWlzZS5fZCkgcmV0dXJuO1xuICBwcm9taXNlLl9kID0gdHJ1ZTtcbiAgcHJvbWlzZSA9IHByb21pc2UuX3cgfHwgcHJvbWlzZTsgLy8gdW53cmFwXG4gIHRyeSB7XG4gICAgaWYgKHByb21pc2UgPT09IHZhbHVlKSB0aHJvdyBUeXBlRXJyb3IoXCJQcm9taXNlIGNhbid0IGJlIHJlc29sdmVkIGl0c2VsZlwiKTtcbiAgICBpZiAodGhlbiA9IGlzVGhlbmFibGUodmFsdWUpKSB7XG4gICAgICBtaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgd3JhcHBlciA9IHsgX3c6IHByb21pc2UsIF9kOiBmYWxzZSB9OyAvLyB3cmFwXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdGhlbi5jYWxsKHZhbHVlLCBjdHgoJHJlc29sdmUsIHdyYXBwZXIsIDEpLCBjdHgoJHJlamVjdCwgd3JhcHBlciwgMSkpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgJHJlamVjdC5jYWxsKHdyYXBwZXIsIGUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJvbWlzZS5fdiA9IHZhbHVlO1xuICAgICAgcHJvbWlzZS5fcyA9IDE7XG4gICAgICBub3RpZnkocHJvbWlzZSwgZmFsc2UpO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgICRyZWplY3QuY2FsbCh7IF93OiBwcm9taXNlLCBfZDogZmFsc2UgfSwgZSk7IC8vIHdyYXBcbiAgfVxufTtcblxuLy8gY29uc3RydWN0b3IgcG9seWZpbGxcbmlmICghVVNFX05BVElWRSkge1xuICAvLyAyNS40LjMuMSBQcm9taXNlKGV4ZWN1dG9yKVxuICAkUHJvbWlzZSA9IGZ1bmN0aW9uIFByb21pc2UoZXhlY3V0b3IpIHtcbiAgICBhbkluc3RhbmNlKHRoaXMsICRQcm9taXNlLCBQUk9NSVNFLCAnX2gnKTtcbiAgICBhRnVuY3Rpb24oZXhlY3V0b3IpO1xuICAgIEludGVybmFsLmNhbGwodGhpcyk7XG4gICAgdHJ5IHtcbiAgICAgIGV4ZWN1dG9yKGN0eCgkcmVzb2x2ZSwgdGhpcywgMSksIGN0eCgkcmVqZWN0LCB0aGlzLCAxKSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAkcmVqZWN0LmNhbGwodGhpcywgZXJyKTtcbiAgICB9XG4gIH07XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuICBJbnRlcm5hbCA9IGZ1bmN0aW9uIFByb21pc2UoZXhlY3V0b3IpIHtcbiAgICB0aGlzLl9jID0gW107ICAgICAgICAgICAgIC8vIDwtIGF3YWl0aW5nIHJlYWN0aW9uc1xuICAgIHRoaXMuX2EgPSB1bmRlZmluZWQ7ICAgICAgLy8gPC0gY2hlY2tlZCBpbiBpc1VuaGFuZGxlZCByZWFjdGlvbnNcbiAgICB0aGlzLl9zID0gMDsgICAgICAgICAgICAgIC8vIDwtIHN0YXRlXG4gICAgdGhpcy5fZCA9IGZhbHNlOyAgICAgICAgICAvLyA8LSBkb25lXG4gICAgdGhpcy5fdiA9IHVuZGVmaW5lZDsgICAgICAvLyA8LSB2YWx1ZVxuICAgIHRoaXMuX2ggPSAwOyAgICAgICAgICAgICAgLy8gPC0gcmVqZWN0aW9uIHN0YXRlLCAwIC0gZGVmYXVsdCwgMSAtIGhhbmRsZWQsIDIgLSB1bmhhbmRsZWRcbiAgICB0aGlzLl9uID0gZmFsc2U7ICAgICAgICAgIC8vIDwtIG5vdGlmeVxuICB9O1xuICBJbnRlcm5hbC5wcm90b3R5cGUgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKSgkUHJvbWlzZS5wcm90b3R5cGUsIHtcbiAgICAvLyAyNS40LjUuMyBQcm9taXNlLnByb3RvdHlwZS50aGVuKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKVxuICAgIHRoZW46IGZ1bmN0aW9uIHRoZW4ob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpIHtcbiAgICAgIHZhciByZWFjdGlvbiA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KHNwZWNpZXNDb25zdHJ1Y3Rvcih0aGlzLCAkUHJvbWlzZSkpO1xuICAgICAgcmVhY3Rpb24ub2sgPSB0eXBlb2Ygb25GdWxmaWxsZWQgPT0gJ2Z1bmN0aW9uJyA/IG9uRnVsZmlsbGVkIDogdHJ1ZTtcbiAgICAgIHJlYWN0aW9uLmZhaWwgPSB0eXBlb2Ygb25SZWplY3RlZCA9PSAnZnVuY3Rpb24nICYmIG9uUmVqZWN0ZWQ7XG4gICAgICByZWFjdGlvbi5kb21haW4gPSBpc05vZGUgPyBwcm9jZXNzLmRvbWFpbiA6IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX2MucHVzaChyZWFjdGlvbik7XG4gICAgICBpZiAodGhpcy5fYSkgdGhpcy5fYS5wdXNoKHJlYWN0aW9uKTtcbiAgICAgIGlmICh0aGlzLl9zKSBub3RpZnkodGhpcywgZmFsc2UpO1xuICAgICAgcmV0dXJuIHJlYWN0aW9uLnByb21pc2U7XG4gICAgfSxcbiAgICAvLyAyNS40LjUuMSBQcm9taXNlLnByb3RvdHlwZS5jYXRjaChvblJlamVjdGVkKVxuICAgICdjYXRjaCc6IGZ1bmN0aW9uIChvblJlamVjdGVkKSB7XG4gICAgICByZXR1cm4gdGhpcy50aGVuKHVuZGVmaW5lZCwgb25SZWplY3RlZCk7XG4gICAgfVxuICB9KTtcbiAgT3duUHJvbWlzZUNhcGFiaWxpdHkgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHByb21pc2UgPSBuZXcgSW50ZXJuYWwoKTtcbiAgICB0aGlzLnByb21pc2UgPSBwcm9taXNlO1xuICAgIHRoaXMucmVzb2x2ZSA9IGN0eCgkcmVzb2x2ZSwgcHJvbWlzZSwgMSk7XG4gICAgdGhpcy5yZWplY3QgPSBjdHgoJHJlamVjdCwgcHJvbWlzZSwgMSk7XG4gIH07XG4gIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmYgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IGZ1bmN0aW9uIChDKSB7XG4gICAgcmV0dXJuIEMgPT09ICRQcm9taXNlIHx8IEMgPT09IFdyYXBwZXJcbiAgICAgID8gbmV3IE93blByb21pc2VDYXBhYmlsaXR5KEMpXG4gICAgICA6IG5ld0dlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eShDKTtcbiAgfTtcbn1cblxuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LlcgKyAkZXhwb3J0LkYgKiAhVVNFX05BVElWRSwgeyBQcm9taXNlOiAkUHJvbWlzZSB9KTtcbnJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJykoJFByb21pc2UsIFBST01JU0UpO1xucmVxdWlyZSgnLi9fc2V0LXNwZWNpZXMnKShQUk9NSVNFKTtcbldyYXBwZXIgPSByZXF1aXJlKCcuL19jb3JlJylbUFJPTUlTRV07XG5cbi8vIHN0YXRpY3NcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsIFBST01JU0UsIHtcbiAgLy8gMjUuNC40LjUgUHJvbWlzZS5yZWplY3QocilcbiAgcmVqZWN0OiBmdW5jdGlvbiByZWplY3Qocikge1xuICAgIHZhciBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkodGhpcyk7XG4gICAgdmFyICQkcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgJCRyZWplY3Qocik7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIChMSUJSQVJZIHx8ICFVU0VfTkFUSVZFKSwgUFJPTUlTRSwge1xuICAvLyAyNS40LjQuNiBQcm9taXNlLnJlc29sdmUoeClcbiAgcmVzb2x2ZTogZnVuY3Rpb24gcmVzb2x2ZSh4KSB7XG4gICAgcmV0dXJuIHByb21pc2VSZXNvbHZlKExJQlJBUlkgJiYgdGhpcyA9PT0gV3JhcHBlciA/ICRQcm9taXNlIDogdGhpcywgeCk7XG4gIH1cbn0pO1xuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhKFVTRV9OQVRJVkUgJiYgcmVxdWlyZSgnLi9faXRlci1kZXRlY3QnKShmdW5jdGlvbiAoaXRlcikge1xuICAkUHJvbWlzZS5hbGwoaXRlcilbJ2NhdGNoJ10oZW1wdHkpO1xufSkpLCBQUk9NSVNFLCB7XG4gIC8vIDI1LjQuNC4xIFByb21pc2UuYWxsKGl0ZXJhYmxlKVxuICBhbGw6IGZ1bmN0aW9uIGFsbChpdGVyYWJsZSkge1xuICAgIHZhciBDID0gdGhpcztcbiAgICB2YXIgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KEMpO1xuICAgIHZhciByZXNvbHZlID0gY2FwYWJpbGl0eS5yZXNvbHZlO1xuICAgIHZhciByZWplY3QgPSBjYXBhYmlsaXR5LnJlamVjdDtcbiAgICB2YXIgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgdmFsdWVzID0gW107XG4gICAgICB2YXIgaW5kZXggPSAwO1xuICAgICAgdmFyIHJlbWFpbmluZyA9IDE7XG4gICAgICBmb3JPZihpdGVyYWJsZSwgZmFsc2UsIGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gICAgICAgIHZhciAkaW5kZXggPSBpbmRleCsrO1xuICAgICAgICB2YXIgYWxyZWFkeUNhbGxlZCA9IGZhbHNlO1xuICAgICAgICB2YWx1ZXMucHVzaCh1bmRlZmluZWQpO1xuICAgICAgICByZW1haW5pbmcrKztcbiAgICAgICAgQy5yZXNvbHZlKHByb21pc2UpLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgaWYgKGFscmVhZHlDYWxsZWQpIHJldHVybjtcbiAgICAgICAgICBhbHJlYWR5Q2FsbGVkID0gdHJ1ZTtcbiAgICAgICAgICB2YWx1ZXNbJGluZGV4XSA9IHZhbHVlO1xuICAgICAgICAgIC0tcmVtYWluaW5nIHx8IHJlc29sdmUodmFsdWVzKTtcbiAgICAgICAgfSwgcmVqZWN0KTtcbiAgICAgIH0pO1xuICAgICAgLS1yZW1haW5pbmcgfHwgcmVzb2x2ZSh2YWx1ZXMpO1xuICAgIH0pO1xuICAgIGlmIChyZXN1bHQuZSkgcmVqZWN0KHJlc3VsdC52KTtcbiAgICByZXR1cm4gY2FwYWJpbGl0eS5wcm9taXNlO1xuICB9LFxuICAvLyAyNS40LjQuNCBQcm9taXNlLnJhY2UoaXRlcmFibGUpXG4gIHJhY2U6IGZ1bmN0aW9uIHJhY2UoaXRlcmFibGUpIHtcbiAgICB2YXIgQyA9IHRoaXM7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eShDKTtcbiAgICB2YXIgcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgdmFyIHJlc3VsdCA9IHBlcmZvcm0oZnVuY3Rpb24gKCkge1xuICAgICAgZm9yT2YoaXRlcmFibGUsIGZhbHNlLCBmdW5jdGlvbiAocHJvbWlzZSkge1xuICAgICAgICBDLnJlc29sdmUocHJvbWlzZSkudGhlbihjYXBhYmlsaXR5LnJlc29sdmUsIHJlamVjdCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBpZiAocmVzdWx0LmUpIHJlamVjdChyZXN1bHQudik7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///243\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar weak = __webpack_require__(121);\nvar validate = __webpack_require__(42);\nvar WEAK_SET = 'WeakSet';\n\n// 23.4 WeakSet Objects\n__webpack_require__(61)(WEAK_SET, function (get) {\n return function WeakSet() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.4.3.1 WeakSet.prototype.add(value)\n add: function add(value) {\n return weak.def(validate(this, WEAK_SET), value, true);\n }\n}, weak, false, true);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYud2Vhay1zZXQuanM/YzAyYiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLFdBQVcsbUJBQU8sQ0FBQyxHQUFvQjtBQUN2QyxlQUFlLG1CQUFPLENBQUMsRUFBd0I7QUFDL0M7O0FBRUE7QUFDQSxtQkFBTyxDQUFDLEVBQWU7QUFDdkIsNkJBQTZCLG1FQUFtRTtBQUNoRyxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjI0NC5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciB3ZWFrID0gcmVxdWlyZSgnLi9fY29sbGVjdGlvbi13ZWFrJyk7XG52YXIgdmFsaWRhdGUgPSByZXF1aXJlKCcuL192YWxpZGF0ZS1jb2xsZWN0aW9uJyk7XG52YXIgV0VBS19TRVQgPSAnV2Vha1NldCc7XG5cbi8vIDIzLjQgV2Vha1NldCBPYmplY3RzXG5yZXF1aXJlKCcuL19jb2xsZWN0aW9uJykoV0VBS19TRVQsIGZ1bmN0aW9uIChnZXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIFdlYWtTZXQoKSB7IHJldHVybiBnZXQodGhpcywgYXJndW1lbnRzLmxlbmd0aCA+IDAgPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQpOyB9O1xufSwge1xuICAvLyAyMy40LjMuMSBXZWFrU2V0LnByb3RvdHlwZS5hZGQodmFsdWUpXG4gIGFkZDogZnVuY3Rpb24gYWRkKHZhbHVlKSB7XG4gICAgcmV0dXJuIHdlYWsuZGVmKHZhbGlkYXRlKHRoaXMsIFdFQUtfU0VUKSwgdmFsdWUsIHRydWUpO1xuICB9XG59LCB3ZWFrLCBmYWxzZSwgdHJ1ZSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///244\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar $typed = __webpack_require__(62);\nvar buffer = __webpack_require__(92);\nvar anObject = __webpack_require__(1);\nvar toAbsoluteIndex = __webpack_require__(35);\nvar toLength = __webpack_require__(6);\nvar isObject = __webpack_require__(4);\nvar ArrayBuffer = __webpack_require__(2).ArrayBuffer;\nvar speciesConstructor = __webpack_require__(51);\nvar $ArrayBuffer = buffer.ArrayBuffer;\nvar $DataView = buffer.DataView;\nvar $isView = $typed.ABV && ArrayBuffer.isView;\nvar $slice = $ArrayBuffer.prototype.slice;\nvar VIEW = $typed.VIEW;\nvar ARRAY_BUFFER = 'ArrayBuffer';\n\n$export($export.G + $export.W + $export.F * (ArrayBuffer !== $ArrayBuffer), { ArrayBuffer: $ArrayBuffer });\n\n$export($export.S + $export.F * !$typed.CONSTR, ARRAY_BUFFER, {\n // 24.1.3.1 ArrayBuffer.isView(arg)\n isView: function isView(it) {\n return $isView && $isView(it) || isObject(it) && VIEW in it;\n }\n});\n\n$export($export.P + $export.U + $export.F * __webpack_require__(3)(function () {\n return !new $ArrayBuffer(2).slice(1, undefined).byteLength;\n}), ARRAY_BUFFER, {\n // 24.1.4.3 ArrayBuffer.prototype.slice(start, end)\n slice: function slice(start, end) {\n if ($slice !== undefined && end === undefined) return $slice.call(anObject(this), start); // FF fix\n var len = anObject(this).byteLength;\n var first = toAbsoluteIndex(start, len);\n var fin = toAbsoluteIndex(end === undefined ? len : end, len);\n var result = new (speciesConstructor(this, $ArrayBuffer))(toLength(fin - first));\n var viewS = new $DataView(this);\n var viewT = new $DataView(result);\n var index = 0;\n while (first < fin) {\n viewT.setUint8(index++, viewS.getUint8(first++));\n } return result;\n }\n});\n\n__webpack_require__(38)(ARRAY_BUFFER);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuYXJyYXktYnVmZmVyLmpzP2M2NmYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxhQUFhLG1CQUFPLENBQUMsRUFBVTtBQUMvQixhQUFhLG1CQUFPLENBQUMsRUFBaUI7QUFDdEMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsc0JBQXNCLG1CQUFPLENBQUMsRUFBc0I7QUFDcEQsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsa0JBQWtCLG1CQUFPLENBQUMsQ0FBVztBQUNyQyx5QkFBeUIsbUJBQU8sQ0FBQyxFQUF3QjtBQUN6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsNkVBQTZFLDRCQUE0Qjs7QUFFekc7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQsNENBQTRDLG1CQUFPLENBQUMsQ0FBVTtBQUM5RDtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsNkZBQTZGO0FBQzdGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLENBQUM7O0FBRUQsbUJBQU8sQ0FBQyxFQUFnQiIsImZpbGUiOiIyNDUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICR0eXBlZCA9IHJlcXVpcmUoJy4vX3R5cGVkJyk7XG52YXIgYnVmZmVyID0gcmVxdWlyZSgnLi9fdHlwZWQtYnVmZmVyJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuL190by1hYnNvbHV0ZS1pbmRleCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBBcnJheUJ1ZmZlciA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLkFycmF5QnVmZmVyO1xudmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4vX3NwZWNpZXMtY29uc3RydWN0b3InKTtcbnZhciAkQXJyYXlCdWZmZXIgPSBidWZmZXIuQXJyYXlCdWZmZXI7XG52YXIgJERhdGFWaWV3ID0gYnVmZmVyLkRhdGFWaWV3O1xudmFyICRpc1ZpZXcgPSAkdHlwZWQuQUJWICYmIEFycmF5QnVmZmVyLmlzVmlldztcbnZhciAkc2xpY2UgPSAkQXJyYXlCdWZmZXIucHJvdG90eXBlLnNsaWNlO1xudmFyIFZJRVcgPSAkdHlwZWQuVklFVztcbnZhciBBUlJBWV9CVUZGRVIgPSAnQXJyYXlCdWZmZXInO1xuXG4kZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuVyArICRleHBvcnQuRiAqIChBcnJheUJ1ZmZlciAhPT0gJEFycmF5QnVmZmVyKSwgeyBBcnJheUJ1ZmZlcjogJEFycmF5QnVmZmVyIH0pO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICEkdHlwZWQuQ09OU1RSLCBBUlJBWV9CVUZGRVIsIHtcbiAgLy8gMjQuMS4zLjEgQXJyYXlCdWZmZXIuaXNWaWV3KGFyZylcbiAgaXNWaWV3OiBmdW5jdGlvbiBpc1ZpZXcoaXQpIHtcbiAgICByZXR1cm4gJGlzVmlldyAmJiAkaXNWaWV3KGl0KSB8fCBpc09iamVjdChpdCkgJiYgVklFVyBpbiBpdDtcbiAgfVxufSk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5VICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAhbmV3ICRBcnJheUJ1ZmZlcigyKS5zbGljZSgxLCB1bmRlZmluZWQpLmJ5dGVMZW5ndGg7XG59KSwgQVJSQVlfQlVGRkVSLCB7XG4gIC8vIDI0LjEuNC4zIEFycmF5QnVmZmVyLnByb3RvdHlwZS5zbGljZShzdGFydCwgZW5kKVxuICBzbGljZTogZnVuY3Rpb24gc2xpY2Uoc3RhcnQsIGVuZCkge1xuICAgIGlmICgkc2xpY2UgIT09IHVuZGVmaW5lZCAmJiBlbmQgPT09IHVuZGVmaW5lZCkgcmV0dXJuICRzbGljZS5jYWxsKGFuT2JqZWN0KHRoaXMpLCBzdGFydCk7IC8vIEZGIGZpeFxuICAgIHZhciBsZW4gPSBhbk9iamVjdCh0aGlzKS5ieXRlTGVuZ3RoO1xuICAgIHZhciBmaXJzdCA9IHRvQWJzb2x1dGVJbmRleChzdGFydCwgbGVuKTtcbiAgICB2YXIgZmluID0gdG9BYnNvbHV0ZUluZGV4KGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuIDogZW5kLCBsZW4pO1xuICAgIHZhciByZXN1bHQgPSBuZXcgKHNwZWNpZXNDb25zdHJ1Y3Rvcih0aGlzLCAkQXJyYXlCdWZmZXIpKSh0b0xlbmd0aChmaW4gLSBmaXJzdCkpO1xuICAgIHZhciB2aWV3UyA9IG5ldyAkRGF0YVZpZXcodGhpcyk7XG4gICAgdmFyIHZpZXdUID0gbmV3ICREYXRhVmlldyhyZXN1bHQpO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgd2hpbGUgKGZpcnN0IDwgZmluKSB7XG4gICAgICB2aWV3VC5zZXRVaW50OChpbmRleCsrLCB2aWV3Uy5nZXRVaW50OChmaXJzdCsrKSk7XG4gICAgfSByZXR1cm4gcmVzdWx0O1xuICB9XG59KTtcblxucmVxdWlyZSgnLi9fc2V0LXNwZWNpZXMnKShBUlJBWV9CVUZGRVIpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///245\n")},function(module,exports,__webpack_require__){eval("var $export = __webpack_require__(0);\n$export($export.G + $export.W + $export.F * !__webpack_require__(62).ABV, {\n DataView: __webpack_require__(92).DataView\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuZGF0YS12aWV3LmpzPzI2MmYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsNkNBQTZDLG1CQUFPLENBQUMsRUFBVTtBQUMvRCxZQUFZLG1CQUFPLENBQUMsRUFBaUI7QUFDckMsQ0FBQyIsImZpbGUiOiIyNDYuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LlcgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fdHlwZWQnKS5BQlYsIHtcbiAgRGF0YVZpZXc6IHJlcXVpcmUoJy4vX3R5cGVkLWJ1ZmZlcicpLkRhdGFWaWV3XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///246\n")},function(module,exports,__webpack_require__){eval("__webpack_require__(27)('Int8', 1, function (init) {\n return function Int8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuaW50OC1hcnJheS5qcz9iMDVjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLG1CQUFPLENBQUMsRUFBZ0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyNDcuanMiLCJzb3VyY2VzQ29udGVudCI6WyJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdJbnQ4JywgMSwgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIEludDhBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///247\n")},function(module,exports,__webpack_require__){eval("__webpack_require__(27)('Uint8', 1, function (init) {\n return function Uint8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQudWludDgtYXJyYXkuanM/MzRlZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjQ4LmpzIiwic291cmNlc0NvbnRlbnQiOlsicmVxdWlyZSgnLi9fdHlwZWQtYXJyYXknKSgnVWludDgnLCAxLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gVWludDhBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///248\n")},function(module,exports,__webpack_require__){eval("__webpack_require__(27)('Uint8', 1, function (init) {\n return function Uint8ClampedArray(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n}, true);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQudWludDgtY2xhbXBlZC1hcnJheS5qcz82YWEyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLG1CQUFPLENBQUMsRUFBZ0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyNDkuanMiLCJzb3VyY2VzQ29udGVudCI6WyJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdVaW50OCcsIDEsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBVaW50OENsYW1wZWRBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSwgdHJ1ZSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///249\n")},function(module,exports,__webpack_require__){eval("__webpack_require__(27)('Int16', 2, function (init) {\n return function Int16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuaW50MTYtYXJyYXkuanM/MTVhYyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjUwLmpzIiwic291cmNlc0NvbnRlbnQiOlsicmVxdWlyZSgnLi9fdHlwZWQtYXJyYXknKSgnSW50MTYnLCAyLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gSW50MTZBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///250\n")},function(module,exports,__webpack_require__){eval("__webpack_require__(27)('Uint16', 2, function (init) {\n return function Uint16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQudWludDE2LWFycmF5LmpzP2FmNTYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsbUJBQU8sQ0FBQyxFQUFnQjtBQUN4QjtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjI1MS5qcyIsInNvdXJjZXNDb250ZW50IjpbInJlcXVpcmUoJy4vX3R5cGVkLWFycmF5JykoJ1VpbnQxNicsIDIsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBVaW50MTZBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///251\n")},function(module,exports,__webpack_require__){eval("__webpack_require__(27)('Int32', 4, function (init) {\n return function Int32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuaW50MzItYXJyYXkuanM/YjZlNCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjUyLmpzIiwic291cmNlc0NvbnRlbnQiOlsicmVxdWlyZSgnLi9fdHlwZWQtYXJyYXknKSgnSW50MzInLCA0LCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gSW50MzJBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///252\n")},function(module,exports,__webpack_require__){eval("__webpack_require__(27)('Uint32', 4, function (init) {\n return function Uint32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQudWludDMyLWFycmF5LmpzPzljMjkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsbUJBQU8sQ0FBQyxFQUFnQjtBQUN4QjtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjI1My5qcyIsInNvdXJjZXNDb250ZW50IjpbInJlcXVpcmUoJy4vX3R5cGVkLWFycmF5JykoJ1VpbnQzMicsIDQsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBVaW50MzJBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///253\n")},function(module,exports,__webpack_require__){eval("__webpack_require__(27)('Float32', 4, function (init) {\n return function Float32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuZmxvYXQzMi1hcnJheS5qcz82M2Q5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLG1CQUFPLENBQUMsRUFBZ0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyNTQuanMiLCJzb3VyY2VzQ29udGVudCI6WyJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdGbG9hdDMyJywgNCwgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIEZsb2F0MzJBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///254\n")},function(module,exports,__webpack_require__){eval("__webpack_require__(27)('Float64', 8, function (init) {\n return function Float64Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuZmxvYXQ2NC1hcnJheS5qcz80ZGRhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLG1CQUFPLENBQUMsRUFBZ0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyNTUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdGbG9hdDY0JywgOCwgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIEZsb2F0NjRBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///255\n")},function(module,exports,__webpack_require__){eval("// 26.1.1 Reflect.apply(target, thisArgument, argumentsList)\nvar $export = __webpack_require__(0);\nvar aFunction = __webpack_require__(10);\nvar anObject = __webpack_require__(1);\nvar rApply = (__webpack_require__(2).Reflect || {}).apply;\nvar fApply = Function.apply;\n// MS Edge argumentsList argument is optional\n$export($export.S + $export.F * !__webpack_require__(3)(function () {\n rApply(function () { /* empty */ });\n}), 'Reflect', {\n apply: function apply(target, thisArgument, argumentsList) {\n var T = aFunction(target);\n var L = anObject(argumentsList);\n return rApply ? rApply(T, thisArgument, L) : fApply.call(T, thisArgument, L);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5hcHBseS5qcz9kZjFiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2QyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxjQUFjLG1CQUFPLENBQUMsQ0FBVyxlQUFlO0FBQ2hEO0FBQ0E7QUFDQSxpQ0FBaUMsbUJBQU8sQ0FBQyxDQUFVO0FBQ25ELHNCQUFzQixjQUFjO0FBQ3BDLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyNTYuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyNi4xLjEgUmVmbGVjdC5hcHBseSh0YXJnZXQsIHRoaXNBcmd1bWVudCwgYXJndW1lbnRzTGlzdClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgckFwcGx5ID0gKHJlcXVpcmUoJy4vX2dsb2JhbCcpLlJlZmxlY3QgfHwge30pLmFwcGx5O1xudmFyIGZBcHBseSA9IEZ1bmN0aW9uLmFwcGx5O1xuLy8gTVMgRWRnZSBhcmd1bWVudHNMaXN0IGFyZ3VtZW50IGlzIG9wdGlvbmFsXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgckFwcGx5KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSk7XG59KSwgJ1JlZmxlY3QnLCB7XG4gIGFwcGx5OiBmdW5jdGlvbiBhcHBseSh0YXJnZXQsIHRoaXNBcmd1bWVudCwgYXJndW1lbnRzTGlzdCkge1xuICAgIHZhciBUID0gYUZ1bmN0aW9uKHRhcmdldCk7XG4gICAgdmFyIEwgPSBhbk9iamVjdChhcmd1bWVudHNMaXN0KTtcbiAgICByZXR1cm4gckFwcGx5ID8gckFwcGx5KFQsIHRoaXNBcmd1bWVudCwgTCkgOiBmQXBwbHkuY2FsbChULCB0aGlzQXJndW1lbnQsIEwpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///256\n")},function(module,exports,__webpack_require__){eval("// 26.1.2 Reflect.construct(target, argumentsList [, newTarget])\nvar $export = __webpack_require__(0);\nvar create = __webpack_require__(36);\nvar aFunction = __webpack_require__(10);\nvar anObject = __webpack_require__(1);\nvar isObject = __webpack_require__(4);\nvar fails = __webpack_require__(3);\nvar bind = __webpack_require__(101);\nvar rConstruct = (__webpack_require__(2).Reflect || {}).construct;\n\n// MS Edge supports only 2 arguments and argumentsList argument is optional\n// FF Nightly sets third argument as `new.target`, but does not create `this` from it\nvar NEW_TARGET_BUG = fails(function () {\n function F() { /* empty */ }\n return !(rConstruct(function () { /* empty */ }, [], F) instanceof F);\n});\nvar ARGS_BUG = !fails(function () {\n rConstruct(function () { /* empty */ });\n});\n\n$export($export.S + $export.F * (NEW_TARGET_BUG || ARGS_BUG), 'Reflect', {\n construct: function construct(Target, args /* , newTarget */) {\n aFunction(Target);\n anObject(args);\n var newTarget = arguments.length < 3 ? Target : aFunction(arguments[2]);\n if (ARGS_BUG && !NEW_TARGET_BUG) return rConstruct(Target, args, newTarget);\n if (Target == newTarget) {\n // w/o altered newTarget, optimization for 0-4 arguments\n switch (args.length) {\n case 0: return new Target();\n case 1: return new Target(args[0]);\n case 2: return new Target(args[0], args[1]);\n case 3: return new Target(args[0], args[1], args[2]);\n case 4: return new Target(args[0], args[1], args[2], args[3]);\n }\n // w/o altered newTarget, lot of arguments case\n var $args = [null];\n $args.push.apply($args, args);\n return new (bind.apply(Target, $args))();\n }\n // with altered newTarget, not support built-in constructors\n var proto = newTarget.prototype;\n var instance = create(isObject(proto) ? proto : Object.prototype);\n var result = Function.apply.call(Target, instance, args);\n return isObject(result) ? result : instance;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5jb25zdHJ1Y3QuanM/MjM5NyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGFBQWEsbUJBQU8sQ0FBQyxFQUFrQjtBQUN2QyxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLFlBQVksbUJBQU8sQ0FBQyxDQUFVO0FBQzlCLFdBQVcsbUJBQU8sQ0FBQyxHQUFTO0FBQzVCLGtCQUFrQixtQkFBTyxDQUFDLENBQVcsZUFBZTs7QUFFcEQ7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCLG1DQUFtQyxjQUFjO0FBQ2pELENBQUM7QUFDRDtBQUNBLDBCQUEwQixjQUFjO0FBQ3hDLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjU3LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjYuMS4yIFJlZmxlY3QuY29uc3RydWN0KHRhcmdldCwgYXJndW1lbnRzTGlzdCBbLCBuZXdUYXJnZXRdKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuL19vYmplY3QtY3JlYXRlJyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4vX2JpbmQnKTtcbnZhciByQ29uc3RydWN0ID0gKHJlcXVpcmUoJy4vX2dsb2JhbCcpLlJlZmxlY3QgfHwge30pLmNvbnN0cnVjdDtcblxuLy8gTVMgRWRnZSBzdXBwb3J0cyBvbmx5IDIgYXJndW1lbnRzIGFuZCBhcmd1bWVudHNMaXN0IGFyZ3VtZW50IGlzIG9wdGlvbmFsXG4vLyBGRiBOaWdodGx5IHNldHMgdGhpcmQgYXJndW1lbnQgYXMgYG5ldy50YXJnZXRgLCBidXQgZG9lcyBub3QgY3JlYXRlIGB0aGlzYCBmcm9tIGl0XG52YXIgTkVXX1RBUkdFVF9CVUcgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEYoKSB7IC8qIGVtcHR5ICovIH1cbiAgcmV0dXJuICEockNvbnN0cnVjdChmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0sIFtdLCBGKSBpbnN0YW5jZW9mIEYpO1xufSk7XG52YXIgQVJHU19CVUcgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICByQ29uc3RydWN0KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSk7XG59KTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAoTkVXX1RBUkdFVF9CVUcgfHwgQVJHU19CVUcpLCAnUmVmbGVjdCcsIHtcbiAgY29uc3RydWN0OiBmdW5jdGlvbiBjb25zdHJ1Y3QoVGFyZ2V0LCBhcmdzIC8qICwgbmV3VGFyZ2V0ICovKSB7XG4gICAgYUZ1bmN0aW9uKFRhcmdldCk7XG4gICAgYW5PYmplY3QoYXJncyk7XG4gICAgdmFyIG5ld1RhcmdldCA9IGFyZ3VtZW50cy5sZW5ndGggPCAzID8gVGFyZ2V0IDogYUZ1bmN0aW9uKGFyZ3VtZW50c1syXSk7XG4gICAgaWYgKEFSR1NfQlVHICYmICFORVdfVEFSR0VUX0JVRykgcmV0dXJuIHJDb25zdHJ1Y3QoVGFyZ2V0LCBhcmdzLCBuZXdUYXJnZXQpO1xuICAgIGlmIChUYXJnZXQgPT0gbmV3VGFyZ2V0KSB7XG4gICAgICAvLyB3L28gYWx0ZXJlZCBuZXdUYXJnZXQsIG9wdGltaXphdGlvbiBmb3IgMC00IGFyZ3VtZW50c1xuICAgICAgc3dpdGNoIChhcmdzLmxlbmd0aCkge1xuICAgICAgICBjYXNlIDA6IHJldHVybiBuZXcgVGFyZ2V0KCk7XG4gICAgICAgIGNhc2UgMTogcmV0dXJuIG5ldyBUYXJnZXQoYXJnc1swXSk7XG4gICAgICAgIGNhc2UgMjogcmV0dXJuIG5ldyBUYXJnZXQoYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgICAgIGNhc2UgMzogcmV0dXJuIG5ldyBUYXJnZXQoYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7XG4gICAgICAgIGNhc2UgNDogcmV0dXJuIG5ldyBUYXJnZXQoYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSk7XG4gICAgICB9XG4gICAgICAvLyB3L28gYWx0ZXJlZCBuZXdUYXJnZXQsIGxvdCBvZiBhcmd1bWVudHMgY2FzZVxuICAgICAgdmFyICRhcmdzID0gW251bGxdO1xuICAgICAgJGFyZ3MucHVzaC5hcHBseSgkYXJncywgYXJncyk7XG4gICAgICByZXR1cm4gbmV3IChiaW5kLmFwcGx5KFRhcmdldCwgJGFyZ3MpKSgpO1xuICAgIH1cbiAgICAvLyB3aXRoIGFsdGVyZWQgbmV3VGFyZ2V0LCBub3Qgc3VwcG9ydCBidWlsdC1pbiBjb25zdHJ1Y3RvcnNcbiAgICB2YXIgcHJvdG8gPSBuZXdUYXJnZXQucHJvdG90eXBlO1xuICAgIHZhciBpbnN0YW5jZSA9IGNyZWF0ZShpc09iamVjdChwcm90bykgPyBwcm90byA6IE9iamVjdC5wcm90b3R5cGUpO1xuICAgIHZhciByZXN1bHQgPSBGdW5jdGlvbi5hcHBseS5jYWxsKFRhcmdldCwgaW5zdGFuY2UsIGFyZ3MpO1xuICAgIHJldHVybiBpc09iamVjdChyZXN1bHQpID8gcmVzdWx0IDogaW5zdGFuY2U7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///257\n")},function(module,exports,__webpack_require__){eval("// 26.1.3 Reflect.defineProperty(target, propertyKey, attributes)\nvar dP = __webpack_require__(8);\nvar $export = __webpack_require__(0);\nvar anObject = __webpack_require__(1);\nvar toPrimitive = __webpack_require__(23);\n\n// MS Edge has broken Reflect.defineProperty - throwing instead of returning false\n$export($export.S + $export.F * __webpack_require__(3)(function () {\n // eslint-disable-next-line no-undef\n Reflect.defineProperty(dP.f({}, 1, { value: 1 }), 1, { value: 2 });\n}), 'Reflect', {\n defineProperty: function defineProperty(target, propertyKey, attributes) {\n anObject(target);\n propertyKey = toPrimitive(propertyKey, true);\n anObject(attributes);\n try {\n dP.f(target, propertyKey, attributes);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5kZWZpbmUtcHJvcGVydHkuanM/ODhjYSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLFNBQVMsbUJBQU8sQ0FBQyxDQUFjO0FBQy9CLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGtCQUFrQixtQkFBTyxDQUFDLEVBQWlCOztBQUUzQztBQUNBLGdDQUFnQyxtQkFBTyxDQUFDLENBQVU7QUFDbEQ7QUFDQSxnQ0FBZ0MsTUFBTSxXQUFXLE9BQU8sV0FBVztBQUNuRSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyNTguanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyNi4xLjMgUmVmbGVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5S2V5LCBhdHRyaWJ1dGVzKVxudmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcblxuLy8gTVMgRWRnZSBoYXMgYnJva2VuIFJlZmxlY3QuZGVmaW5lUHJvcGVydHkgLSB0aHJvd2luZyBpbnN0ZWFkIG9mIHJldHVybmluZyBmYWxzZVxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gIFJlZmxlY3QuZGVmaW5lUHJvcGVydHkoZFAuZih7fSwgMSwgeyB2YWx1ZTogMSB9KSwgMSwgeyB2YWx1ZTogMiB9KTtcbn0pLCAnUmVmbGVjdCcsIHtcbiAgZGVmaW5lUHJvcGVydHk6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHlLZXksIGF0dHJpYnV0ZXMpIHtcbiAgICBhbk9iamVjdCh0YXJnZXQpO1xuICAgIHByb3BlcnR5S2V5ID0gdG9QcmltaXRpdmUocHJvcGVydHlLZXksIHRydWUpO1xuICAgIGFuT2JqZWN0KGF0dHJpYnV0ZXMpO1xuICAgIHRyeSB7XG4gICAgICBkUC5mKHRhcmdldCwgcHJvcGVydHlLZXksIGF0dHJpYnV0ZXMpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///258\n")},function(module,exports,__webpack_require__){eval("// 26.1.4 Reflect.deleteProperty(target, propertyKey)\nvar $export = __webpack_require__(0);\nvar gOPD = __webpack_require__(16).f;\nvar anObject = __webpack_require__(1);\n\n$export($export.S, 'Reflect', {\n deleteProperty: function deleteProperty(target, propertyKey) {\n var desc = gOPD(anObject(target), propertyKey);\n return desc && !desc.configurable ? false : delete target[propertyKey];\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5kZWxldGUtcHJvcGVydHkuanM/YmExNiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLFdBQVcsbUJBQU8sQ0FBQyxFQUFnQjtBQUNuQyxlQUFlLG1CQUFPLENBQUMsQ0FBYzs7QUFFckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjU5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjYuMS40IFJlZmxlY3QuZGVsZXRlUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eUtleSlcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZ09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJykuZjtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7XG4gIGRlbGV0ZVByb3BlcnR5OiBmdW5jdGlvbiBkZWxldGVQcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5S2V5KSB7XG4gICAgdmFyIGRlc2MgPSBnT1BEKGFuT2JqZWN0KHRhcmdldCksIHByb3BlcnR5S2V5KTtcbiAgICByZXR1cm4gZGVzYyAmJiAhZGVzYy5jb25maWd1cmFibGUgPyBmYWxzZSA6IGRlbGV0ZSB0YXJnZXRbcHJvcGVydHlLZXldO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///259\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// 26.1.5 Reflect.enumerate(target)\nvar $export = __webpack_require__(0);\nvar anObject = __webpack_require__(1);\nvar Enumerate = function (iterated) {\n this._t = anObject(iterated); // target\n this._i = 0; // next index\n var keys = this._k = []; // keys\n var key;\n for (key in iterated) keys.push(key);\n};\n__webpack_require__(78)(Enumerate, 'Object', function () {\n var that = this;\n var keys = that._k;\n var key;\n do {\n if (that._i >= keys.length) return { value: undefined, done: true };\n } while (!((key = keys[that._i++]) in that._t));\n return { value: key, done: false };\n});\n\n$export($export.S, 'Reflect', {\n enumerate: function enumerate(target) {\n return new Enumerate(target);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5lbnVtZXJhdGUuanM/N2ZmNiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckM7QUFDQSwrQkFBK0I7QUFDL0IsY0FBYztBQUNkLDBCQUEwQjtBQUMxQjtBQUNBO0FBQ0E7QUFDQSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0NBQXdDO0FBQ3hDLEdBQUc7QUFDSCxVQUFVO0FBQ1YsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjYwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gMjYuMS41IFJlZmxlY3QuZW51bWVyYXRlKHRhcmdldClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBFbnVtZXJhdGUgPSBmdW5jdGlvbiAoaXRlcmF0ZWQpIHtcbiAgdGhpcy5fdCA9IGFuT2JqZWN0KGl0ZXJhdGVkKTsgLy8gdGFyZ2V0XG4gIHRoaXMuX2kgPSAwOyAgICAgICAgICAgICAgICAgIC8vIG5leHQgaW5kZXhcbiAgdmFyIGtleXMgPSB0aGlzLl9rID0gW107ICAgICAgLy8ga2V5c1xuICB2YXIga2V5O1xuICBmb3IgKGtleSBpbiBpdGVyYXRlZCkga2V5cy5wdXNoKGtleSk7XG59O1xucmVxdWlyZSgnLi9faXRlci1jcmVhdGUnKShFbnVtZXJhdGUsICdPYmplY3QnLCBmdW5jdGlvbiAoKSB7XG4gIHZhciB0aGF0ID0gdGhpcztcbiAgdmFyIGtleXMgPSB0aGF0Ll9rO1xuICB2YXIga2V5O1xuICBkbyB7XG4gICAgaWYgKHRoYXQuX2kgPj0ga2V5cy5sZW5ndGgpIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfTtcbiAgfSB3aGlsZSAoISgoa2V5ID0ga2V5c1t0aGF0Ll9pKytdKSBpbiB0aGF0Ll90KSk7XG4gIHJldHVybiB7IHZhbHVlOiBrZXksIGRvbmU6IGZhbHNlIH07XG59KTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0Jywge1xuICBlbnVtZXJhdGU6IGZ1bmN0aW9uIGVudW1lcmF0ZSh0YXJnZXQpIHtcbiAgICByZXR1cm4gbmV3IEVudW1lcmF0ZSh0YXJnZXQpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///260\n")},function(module,exports,__webpack_require__){eval("// 26.1.6 Reflect.get(target, propertyKey [, receiver])\nvar gOPD = __webpack_require__(16);\nvar getPrototypeOf = __webpack_require__(17);\nvar has = __webpack_require__(14);\nvar $export = __webpack_require__(0);\nvar isObject = __webpack_require__(4);\nvar anObject = __webpack_require__(1);\n\nfunction get(target, propertyKey /* , receiver */) {\n var receiver = arguments.length < 3 ? target : arguments[2];\n var desc, proto;\n if (anObject(target) === receiver) return target[propertyKey];\n if (desc = gOPD.f(target, propertyKey)) return has(desc, 'value')\n ? desc.value\n : desc.get !== undefined\n ? desc.get.call(receiver)\n : undefined;\n if (isObject(proto = getPrototypeOf(target))) return get(proto, propertyKey, receiver);\n}\n\n$export($export.S, 'Reflect', { get: get });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5nZXQuanM/ZDE4NSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLFdBQVcsbUJBQU8sQ0FBQyxFQUFnQjtBQUNuQyxxQkFBcUIsbUJBQU8sQ0FBQyxFQUFlO0FBQzVDLFVBQVUsbUJBQU8sQ0FBQyxFQUFRO0FBQzFCLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjOztBQUVyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLCtCQUErQixXQUFXIiwiZmlsZSI6IjI2MS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDI2LjEuNiBSZWZsZWN0LmdldCh0YXJnZXQsIHByb3BlcnR5S2V5IFssIHJlY2VpdmVyXSlcbnZhciBnT1BEID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xuXG5mdW5jdGlvbiBnZXQodGFyZ2V0LCBwcm9wZXJ0eUtleSAvKiAsIHJlY2VpdmVyICovKSB7XG4gIHZhciByZWNlaXZlciA9IGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdGFyZ2V0IDogYXJndW1lbnRzWzJdO1xuICB2YXIgZGVzYywgcHJvdG87XG4gIGlmIChhbk9iamVjdCh0YXJnZXQpID09PSByZWNlaXZlcikgcmV0dXJuIHRhcmdldFtwcm9wZXJ0eUtleV07XG4gIGlmIChkZXNjID0gZ09QRC5mKHRhcmdldCwgcHJvcGVydHlLZXkpKSByZXR1cm4gaGFzKGRlc2MsICd2YWx1ZScpXG4gICAgPyBkZXNjLnZhbHVlXG4gICAgOiBkZXNjLmdldCAhPT0gdW5kZWZpbmVkXG4gICAgICA/IGRlc2MuZ2V0LmNhbGwocmVjZWl2ZXIpXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgaWYgKGlzT2JqZWN0KHByb3RvID0gZ2V0UHJvdG90eXBlT2YodGFyZ2V0KSkpIHJldHVybiBnZXQocHJvdG8sIHByb3BlcnR5S2V5LCByZWNlaXZlcik7XG59XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHsgZ2V0OiBnZXQgfSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///261\n")},function(module,exports,__webpack_require__){eval("// 26.1.7 Reflect.getOwnPropertyDescriptor(target, propertyKey)\nvar gOPD = __webpack_require__(16);\nvar $export = __webpack_require__(0);\nvar anObject = __webpack_require__(1);\n\n$export($export.S, 'Reflect', {\n getOwnPropertyDescriptor: function getOwnPropertyDescriptor(target, propertyKey) {\n return gOPD.f(anObject(target), propertyKey);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanM/ZWJkZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLFdBQVcsbUJBQU8sQ0FBQyxFQUFnQjtBQUNuQyxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxlQUFlLG1CQUFPLENBQUMsQ0FBYzs7QUFFckM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjI2Mi5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDI2LjEuNyBSZWZsZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIHByb3BlcnR5S2V5KVxudmFyIGdPUEQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7XG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgcHJvcGVydHlLZXkpIHtcbiAgICByZXR1cm4gZ09QRC5mKGFuT2JqZWN0KHRhcmdldCksIHByb3BlcnR5S2V5KTtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///262\n")},function(module,exports,__webpack_require__){eval("// 26.1.8 Reflect.getPrototypeOf(target)\nvar $export = __webpack_require__(0);\nvar getProto = __webpack_require__(17);\nvar anObject = __webpack_require__(1);\n\n$export($export.S, 'Reflect', {\n getPrototypeOf: function getPrototypeOf(target) {\n return getProto(anObject(target));\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5nZXQtcHJvdG90eXBlLW9mLmpzPzJkMzQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxlQUFlLG1CQUFPLENBQUMsRUFBZTtBQUN0QyxlQUFlLG1CQUFPLENBQUMsQ0FBYzs7QUFFckM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjI2My5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDI2LjEuOCBSZWZsZWN0LmdldFByb3RvdHlwZU9mKHRhcmdldClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZ2V0UHJvdG8gPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0Jywge1xuICBnZXRQcm90b3R5cGVPZjogZnVuY3Rpb24gZ2V0UHJvdG90eXBlT2YodGFyZ2V0KSB7XG4gICAgcmV0dXJuIGdldFByb3RvKGFuT2JqZWN0KHRhcmdldCkpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///263\n")},function(module,exports,__webpack_require__){eval("// 26.1.9 Reflect.has(target, propertyKey)\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Reflect', {\n has: function has(target, propertyKey) {\n return propertyKey in target;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5oYXMuanM/ZjZiMyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXOztBQUVqQztBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjY0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjYuMS45IFJlZmxlY3QuaGFzKHRhcmdldCwgcHJvcGVydHlLZXkpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7XG4gIGhhczogZnVuY3Rpb24gaGFzKHRhcmdldCwgcHJvcGVydHlLZXkpIHtcbiAgICByZXR1cm4gcHJvcGVydHlLZXkgaW4gdGFyZ2V0O1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///264\n")},function(module,exports,__webpack_require__){eval("// 26.1.10 Reflect.isExtensible(target)\nvar $export = __webpack_require__(0);\nvar anObject = __webpack_require__(1);\nvar $isExtensible = Object.isExtensible;\n\n$export($export.S, 'Reflect', {\n isExtensible: function isExtensible(target) {\n anObject(target);\n return $isExtensible ? $isExtensible(target) : true;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5pcy1leHRlbnNpYmxlLmpzPzIyNTEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyNjUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyNi4xLjEwIFJlZmxlY3QuaXNFeHRlbnNpYmxlKHRhcmdldClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciAkaXNFeHRlbnNpYmxlID0gT2JqZWN0LmlzRXh0ZW5zaWJsZTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0Jywge1xuICBpc0V4dGVuc2libGU6IGZ1bmN0aW9uIGlzRXh0ZW5zaWJsZSh0YXJnZXQpIHtcbiAgICBhbk9iamVjdCh0YXJnZXQpO1xuICAgIHJldHVybiAkaXNFeHRlbnNpYmxlID8gJGlzRXh0ZW5zaWJsZSh0YXJnZXQpIDogdHJ1ZTtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///265\n")},function(module,exports,__webpack_require__){eval("// 26.1.11 Reflect.ownKeys(target)\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Reflect', { ownKeys: __webpack_require__(123) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5vd24ta2V5cy5qcz9jNjk4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDLCtCQUErQixVQUFVLG1CQUFPLENBQUMsR0FBYSxHQUFHIiwiZmlsZSI6IjI2Ni5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDI2LjEuMTEgUmVmbGVjdC5vd25LZXlzKHRhcmdldClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHsgb3duS2V5czogcmVxdWlyZSgnLi9fb3duLWtleXMnKSB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///266\n")},function(module,exports,__webpack_require__){eval("// 26.1.12 Reflect.preventExtensions(target)\nvar $export = __webpack_require__(0);\nvar anObject = __webpack_require__(1);\nvar $preventExtensions = Object.preventExtensions;\n\n$export($export.S, 'Reflect', {\n preventExtensions: function preventExtensions(target) {\n anObject(target);\n try {\n if ($preventExtensions) $preventExtensions(target);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5wcmV2ZW50LWV4dGVuc2lvbnMuanM/YTE5ZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjI2Ny5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDI2LjEuMTIgUmVmbGVjdC5wcmV2ZW50RXh0ZW5zaW9ucyh0YXJnZXQpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgJHByZXZlbnRFeHRlbnNpb25zID0gT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7XG4gIHByZXZlbnRFeHRlbnNpb25zOiBmdW5jdGlvbiBwcmV2ZW50RXh0ZW5zaW9ucyh0YXJnZXQpIHtcbiAgICBhbk9iamVjdCh0YXJnZXQpO1xuICAgIHRyeSB7XG4gICAgICBpZiAoJHByZXZlbnRFeHRlbnNpb25zKSAkcHJldmVudEV4dGVuc2lvbnModGFyZ2V0KTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///267\n")},function(module,exports,__webpack_require__){eval("// 26.1.13 Reflect.set(target, propertyKey, V [, receiver])\nvar dP = __webpack_require__(8);\nvar gOPD = __webpack_require__(16);\nvar getPrototypeOf = __webpack_require__(17);\nvar has = __webpack_require__(14);\nvar $export = __webpack_require__(0);\nvar createDesc = __webpack_require__(32);\nvar anObject = __webpack_require__(1);\nvar isObject = __webpack_require__(4);\n\nfunction set(target, propertyKey, V /* , receiver */) {\n var receiver = arguments.length < 4 ? target : arguments[3];\n var ownDesc = gOPD.f(anObject(target), propertyKey);\n var existingDescriptor, proto;\n if (!ownDesc) {\n if (isObject(proto = getPrototypeOf(target))) {\n return set(proto, propertyKey, V, receiver);\n }\n ownDesc = createDesc(0);\n }\n if (has(ownDesc, 'value')) {\n if (ownDesc.writable === false || !isObject(receiver)) return false;\n if (existingDescriptor = gOPD.f(receiver, propertyKey)) {\n if (existingDescriptor.get || existingDescriptor.set || existingDescriptor.writable === false) return false;\n existingDescriptor.value = V;\n dP.f(receiver, propertyKey, existingDescriptor);\n } else dP.f(receiver, propertyKey, createDesc(0, V));\n return true;\n }\n return ownDesc.set === undefined ? false : (ownDesc.set.call(receiver, V), true);\n}\n\n$export($export.S, 'Reflect', { set: set });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5zZXQuanM/OTI1MyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLFNBQVMsbUJBQU8sQ0FBQyxDQUFjO0FBQy9CLFdBQVcsbUJBQU8sQ0FBQyxFQUFnQjtBQUNuQyxxQkFBcUIsbUJBQU8sQ0FBQyxFQUFlO0FBQzVDLFVBQVUsbUJBQU8sQ0FBQyxFQUFRO0FBQzFCLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGlCQUFpQixtQkFBTyxDQUFDLEVBQWtCO0FBQzNDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjOztBQUVyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSwrQkFBK0IsV0FBVyIsImZpbGUiOiIyNjguanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyNi4xLjEzIFJlZmxlY3Quc2V0KHRhcmdldCwgcHJvcGVydHlLZXksIFYgWywgcmVjZWl2ZXJdKVxudmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG52YXIgZ09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGNyZWF0ZURlc2MgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xuXG5mdW5jdGlvbiBzZXQodGFyZ2V0LCBwcm9wZXJ0eUtleSwgViAvKiAsIHJlY2VpdmVyICovKSB7XG4gIHZhciByZWNlaXZlciA9IGFyZ3VtZW50cy5sZW5ndGggPCA0ID8gdGFyZ2V0IDogYXJndW1lbnRzWzNdO1xuICB2YXIgb3duRGVzYyA9IGdPUEQuZihhbk9iamVjdCh0YXJnZXQpLCBwcm9wZXJ0eUtleSk7XG4gIHZhciBleGlzdGluZ0Rlc2NyaXB0b3IsIHByb3RvO1xuICBpZiAoIW93bkRlc2MpIHtcbiAgICBpZiAoaXNPYmplY3QocHJvdG8gPSBnZXRQcm90b3R5cGVPZih0YXJnZXQpKSkge1xuICAgICAgcmV0dXJuIHNldChwcm90bywgcHJvcGVydHlLZXksIFYsIHJlY2VpdmVyKTtcbiAgICB9XG4gICAgb3duRGVzYyA9IGNyZWF0ZURlc2MoMCk7XG4gIH1cbiAgaWYgKGhhcyhvd25EZXNjLCAndmFsdWUnKSkge1xuICAgIGlmIChvd25EZXNjLndyaXRhYmxlID09PSBmYWxzZSB8fCAhaXNPYmplY3QocmVjZWl2ZXIpKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKGV4aXN0aW5nRGVzY3JpcHRvciA9IGdPUEQuZihyZWNlaXZlciwgcHJvcGVydHlLZXkpKSB7XG4gICAgICBpZiAoZXhpc3RpbmdEZXNjcmlwdG9yLmdldCB8fCBleGlzdGluZ0Rlc2NyaXB0b3Iuc2V0IHx8IGV4aXN0aW5nRGVzY3JpcHRvci53cml0YWJsZSA9PT0gZmFsc2UpIHJldHVybiBmYWxzZTtcbiAgICAgIGV4aXN0aW5nRGVzY3JpcHRvci52YWx1ZSA9IFY7XG4gICAgICBkUC5mKHJlY2VpdmVyLCBwcm9wZXJ0eUtleSwgZXhpc3RpbmdEZXNjcmlwdG9yKTtcbiAgICB9IGVsc2UgZFAuZihyZWNlaXZlciwgcHJvcGVydHlLZXksIGNyZWF0ZURlc2MoMCwgVikpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBvd25EZXNjLnNldCA9PT0gdW5kZWZpbmVkID8gZmFsc2UgOiAob3duRGVzYy5zZXQuY2FsbChyZWNlaXZlciwgViksIHRydWUpO1xufVxuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7IHNldDogc2V0IH0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///268\n")},function(module,exports,__webpack_require__){eval("// 26.1.14 Reflect.setPrototypeOf(target, proto)\nvar $export = __webpack_require__(0);\nvar setProto = __webpack_require__(71);\n\nif (setProto) $export($export.S, 'Reflect', {\n setPrototypeOf: function setPrototypeOf(target, proto) {\n setProto.check(target, proto);\n try {\n setProto.set(target, proto);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5zZXQtcHJvdG90eXBlLW9mLmpzPzkyNzUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxlQUFlLG1CQUFPLENBQUMsRUFBYzs7QUFFckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjY5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjYuMS4xNCBSZWZsZWN0LnNldFByb3RvdHlwZU9mKHRhcmdldCwgcHJvdG8pXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHNldFByb3RvID0gcmVxdWlyZSgnLi9fc2V0LXByb3RvJyk7XG5cbmlmIChzZXRQcm90bykgJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0Jywge1xuICBzZXRQcm90b3R5cGVPZjogZnVuY3Rpb24gc2V0UHJvdG90eXBlT2YodGFyZ2V0LCBwcm90bykge1xuICAgIHNldFByb3RvLmNoZWNrKHRhcmdldCwgcHJvdG8pO1xuICAgIHRyeSB7XG4gICAgICBzZXRQcm90by5zZXQodGFyZ2V0LCBwcm90byk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///269\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// https://github.com/tc39/Array.prototype.includes\nvar $export = __webpack_require__(0);\nvar $includes = __webpack_require__(52)(true);\n\n$export($export.P, 'Array', {\n includes: function includes(el /* , fromIndex = 0 */) {\n return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\n__webpack_require__(31)('includes');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuYXJyYXkuaW5jbHVkZXMuanM/Njc2MiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBbUI7O0FBRTNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRCxtQkFBTyxDQUFDLEVBQXVCIiwiZmlsZSI6IjI3MC5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L0FycmF5LnByb3RvdHlwZS5pbmNsdWRlc1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkaW5jbHVkZXMgPSByZXF1aXJlKCcuL19hcnJheS1pbmNsdWRlcycpKHRydWUpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCwgJ0FycmF5Jywge1xuICBpbmNsdWRlczogZnVuY3Rpb24gaW5jbHVkZXMoZWwgLyogLCBmcm9tSW5kZXggPSAwICovKSB7XG4gICAgcmV0dXJuICRpbmNsdWRlcyh0aGlzLCBlbCwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcblxucmVxdWlyZSgnLi9fYWRkLXRvLXVuc2NvcGFibGVzJykoJ2luY2x1ZGVzJyk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///270\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// https://tc39.github.io/proposal-flatMap/#sec-Array.prototype.flatMap\nvar $export = __webpack_require__(0);\nvar flattenIntoArray = __webpack_require__(124);\nvar toObject = __webpack_require__(9);\nvar toLength = __webpack_require__(6);\nvar aFunction = __webpack_require__(10);\nvar arraySpeciesCreate = __webpack_require__(84);\n\n$export($export.P, 'Array', {\n flatMap: function flatMap(callbackfn /* , thisArg */) {\n var O = toObject(this);\n var sourceLen, A;\n aFunction(callbackfn);\n sourceLen = toLength(O.length);\n A = arraySpeciesCreate(O, 0);\n flattenIntoArray(A, O, O, sourceLen, 0, 1, callbackfn, arguments[1]);\n return A;\n }\n});\n\n__webpack_require__(31)('flatMap');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuYXJyYXkuZmxhdC1tYXAuanM/ZTk1NiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsdUJBQXVCLG1CQUFPLENBQUMsR0FBdUI7QUFDdEQsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2Qyx5QkFBeUIsbUJBQU8sQ0FBQyxFQUF5Qjs7QUFFMUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVELG1CQUFPLENBQUMsRUFBdUIiLCJmaWxlIjoiMjcxLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1mbGF0TWFwLyNzZWMtQXJyYXkucHJvdG90eXBlLmZsYXRNYXBcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZmxhdHRlbkludG9BcnJheSA9IHJlcXVpcmUoJy4vX2ZsYXR0ZW4taW50by1hcnJheScpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgYXJyYXlTcGVjaWVzQ3JlYXRlID0gcmVxdWlyZSgnLi9fYXJyYXktc3BlY2llcy1jcmVhdGUnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdBcnJheScsIHtcbiAgZmxhdE1hcDogZnVuY3Rpb24gZmxhdE1hcChjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gICAgdmFyIHNvdXJjZUxlbiwgQTtcbiAgICBhRnVuY3Rpb24oY2FsbGJhY2tmbik7XG4gICAgc291cmNlTGVuID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICAgIEEgPSBhcnJheVNwZWNpZXNDcmVhdGUoTywgMCk7XG4gICAgZmxhdHRlbkludG9BcnJheShBLCBPLCBPLCBzb3VyY2VMZW4sIDAsIDEsIGNhbGxiYWNrZm4sIGFyZ3VtZW50c1sxXSk7XG4gICAgcmV0dXJuIEE7XG4gIH1cbn0pO1xuXG5yZXF1aXJlKCcuL19hZGQtdG8tdW5zY29wYWJsZXMnKSgnZmxhdE1hcCcpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///271\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// https://tc39.github.io/proposal-flatMap/#sec-Array.prototype.flatten\nvar $export = __webpack_require__(0);\nvar flattenIntoArray = __webpack_require__(124);\nvar toObject = __webpack_require__(9);\nvar toLength = __webpack_require__(6);\nvar toInteger = __webpack_require__(21);\nvar arraySpeciesCreate = __webpack_require__(84);\n\n$export($export.P, 'Array', {\n flatten: function flatten(/* depthArg = 1 */) {\n var depthArg = arguments[0];\n var O = toObject(this);\n var sourceLen = toLength(O.length);\n var A = arraySpeciesCreate(O, 0);\n flattenIntoArray(A, O, O, sourceLen, 0, depthArg === undefined ? 1 : toInteger(depthArg));\n return A;\n }\n});\n\n__webpack_require__(31)('flatten');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuYXJyYXkuZmxhdHRlbi5qcz83MWYxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyx1QkFBdUIsbUJBQU8sQ0FBQyxHQUF1QjtBQUN0RCxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDLHlCQUF5QixtQkFBTyxDQUFDLEVBQXlCOztBQUUxRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVELG1CQUFPLENBQUMsRUFBdUIiLCJmaWxlIjoiMjcyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1mbGF0TWFwLyNzZWMtQXJyYXkucHJvdG90eXBlLmZsYXR0ZW5cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZmxhdHRlbkludG9BcnJheSA9IHJlcXVpcmUoJy4vX2ZsYXR0ZW4taW50by1hcnJheScpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgYXJyYXlTcGVjaWVzQ3JlYXRlID0gcmVxdWlyZSgnLi9fYXJyYXktc3BlY2llcy1jcmVhdGUnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdBcnJheScsIHtcbiAgZmxhdHRlbjogZnVuY3Rpb24gZmxhdHRlbigvKiBkZXB0aEFyZyA9IDEgKi8pIHtcbiAgICB2YXIgZGVwdGhBcmcgPSBhcmd1bWVudHNbMF07XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgc291cmNlTGVuID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICAgIHZhciBBID0gYXJyYXlTcGVjaWVzQ3JlYXRlKE8sIDApO1xuICAgIGZsYXR0ZW5JbnRvQXJyYXkoQSwgTywgTywgc291cmNlTGVuLCAwLCBkZXB0aEFyZyA9PT0gdW5kZWZpbmVkID8gMSA6IHRvSW50ZWdlcihkZXB0aEFyZykpO1xuICAgIHJldHVybiBBO1xuICB9XG59KTtcblxucmVxdWlyZSgnLi9fYWRkLXRvLXVuc2NvcGFibGVzJykoJ2ZsYXR0ZW4nKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///272\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// https://github.com/mathiasbynens/String.prototype.at\nvar $export = __webpack_require__(0);\nvar $at = __webpack_require__(55)(true);\nvar $fails = __webpack_require__(3);\n\nvar FORCED = $fails(function () {\n return '𠮷'.at(0) !== '𠮷';\n});\n\n$export($export.P + $export.F * FORCED, 'String', {\n at: function at(pos) {\n return $at(this, pos);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLmF0LmpzPzM1MzUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLFVBQVUsbUJBQU8sQ0FBQyxFQUFjO0FBQ2hDLGFBQWEsbUJBQU8sQ0FBQyxDQUFVOztBQUUvQjtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjczLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL21hdGhpYXNieW5lbnMvU3RyaW5nLnByb3RvdHlwZS5hdFxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkYXQgPSByZXF1aXJlKCcuL19zdHJpbmctYXQnKSh0cnVlKTtcbnZhciAkZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xuXG52YXIgRk9SQ0VEID0gJGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICfwoK63Jy5hdCgwKSAhPT0gJ/CgrrcnO1xufSk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogRk9SQ0VELCAnU3RyaW5nJywge1xuICBhdDogZnVuY3Rpb24gYXQocG9zKSB7XG4gICAgcmV0dXJuICRhdCh0aGlzLCBwb3MpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///273\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = __webpack_require__(0);\nvar $pad = __webpack_require__(125);\nvar userAgent = __webpack_require__(60);\n\n// https://github.com/zloirock/core-js/issues/280\nvar WEBKIT_BUG = /Version\\/10\\.\\d+(\\.\\d+)?( Mobile\\/\\w+)? Safari\\//.test(userAgent);\n\n$export($export.P + $export.F * WEBKIT_BUG, 'String', {\n padStart: function padStart(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, true);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLnBhZC1zdGFydC5qcz9mNTc2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxXQUFXLG1CQUFPLENBQUMsR0FBZTtBQUNsQyxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlOztBQUV2QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyNzQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zdHJpbmctcGFkLXN0YXJ0LWVuZFxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkcGFkID0gcmVxdWlyZSgnLi9fc3RyaW5nLXBhZCcpO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4vX3VzZXItYWdlbnQnKTtcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzI4MFxudmFyIFdFQktJVF9CVUcgPSAvVmVyc2lvblxcLzEwXFwuXFxkKyhcXC5cXGQrKT8oIE1vYmlsZVxcL1xcdyspPyBTYWZhcmlcXC8vLnRlc3QodXNlckFnZW50KTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiBXRUJLSVRfQlVHLCAnU3RyaW5nJywge1xuICBwYWRTdGFydDogZnVuY3Rpb24gcGFkU3RhcnQobWF4TGVuZ3RoIC8qICwgZmlsbFN0cmluZyA9ICcgJyAqLykge1xuICAgIHJldHVybiAkcGFkKHRoaXMsIG1heExlbmd0aCwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQsIHRydWUpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///274\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = __webpack_require__(0);\nvar $pad = __webpack_require__(125);\nvar userAgent = __webpack_require__(60);\n\n// https://github.com/zloirock/core-js/issues/280\nvar WEBKIT_BUG = /Version\\/10\\.\\d+(\\.\\d+)?( Mobile\\/\\w+)? Safari\\//.test(userAgent);\n\n$export($export.P + $export.F * WEBKIT_BUG, 'String', {\n padEnd: function padEnd(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, false);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLnBhZC1lbmQuanM/ZWQ1MCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsV0FBVyxtQkFBTyxDQUFDLEdBQWU7QUFDbEMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTs7QUFFdkM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjc1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc3RyaW5nLXBhZC1zdGFydC1lbmRcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHBhZCA9IHJlcXVpcmUoJy4vX3N0cmluZy1wYWQnKTtcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuL191c2VyLWFnZW50Jyk7XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8yODBcbnZhciBXRUJLSVRfQlVHID0gL1ZlcnNpb25cXC8xMFxcLlxcZCsoXFwuXFxkKyk/KCBNb2JpbGVcXC9cXHcrKT8gU2FmYXJpXFwvLy50ZXN0KHVzZXJBZ2VudCk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogV0VCS0lUX0JVRywgJ1N0cmluZycsIHtcbiAgcGFkRW5kOiBmdW5jdGlvbiBwYWRFbmQobWF4TGVuZ3RoIC8qICwgZmlsbFN0cmluZyA9ICcgJyAqLykge1xuICAgIHJldHVybiAkcGFkKHRoaXMsIG1heExlbmd0aCwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQsIGZhbHNlKTtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///275\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// https://github.com/sebmarkbage/ecmascript-string-left-right-trim\n__webpack_require__(45)('trimLeft', function ($trim) {\n return function trimLeft() {\n return $trim(this, 1);\n };\n}, 'trimStart');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLnRyaW0tbGVmdC5qcz8yM2JlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjc2LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3NlYm1hcmtiYWdlL2VjbWFzY3JpcHQtc3RyaW5nLWxlZnQtcmlnaHQtdHJpbVxucmVxdWlyZSgnLi9fc3RyaW5nLXRyaW0nKSgndHJpbUxlZnQnLCBmdW5jdGlvbiAoJHRyaW0pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHRyaW1MZWZ0KCkge1xuICAgIHJldHVybiAkdHJpbSh0aGlzLCAxKTtcbiAgfTtcbn0sICd0cmltU3RhcnQnKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///276\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// https://github.com/sebmarkbage/ecmascript-string-left-right-trim\n__webpack_require__(45)('trimRight', function ($trim) {\n return function trimRight() {\n return $trim(this, 2);\n };\n}, 'trimEnd');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLnRyaW0tcmlnaHQuanM/N2MwZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsbUJBQU8sQ0FBQyxFQUFnQjtBQUN4QjtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjI3Ny5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9zZWJtYXJrYmFnZS9lY21hc2NyaXB0LXN0cmluZy1sZWZ0LXJpZ2h0LXRyaW1cbnJlcXVpcmUoJy4vX3N0cmluZy10cmltJykoJ3RyaW1SaWdodCcsIGZ1bmN0aW9uICgkdHJpbSkge1xuICByZXR1cm4gZnVuY3Rpb24gdHJpbVJpZ2h0KCkge1xuICAgIHJldHVybiAkdHJpbSh0aGlzLCAyKTtcbiAgfTtcbn0sICd0cmltRW5kJyk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///277\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// https://tc39.github.io/String.prototype.matchAll/\nvar $export = __webpack_require__(0);\nvar defined = __webpack_require__(24);\nvar toLength = __webpack_require__(6);\nvar isRegExp = __webpack_require__(56);\nvar getFlags = __webpack_require__(50);\nvar RegExpProto = RegExp.prototype;\n\nvar $RegExpStringIterator = function (regexp, string) {\n this._r = regexp;\n this._s = string;\n};\n\n__webpack_require__(78)($RegExpStringIterator, 'RegExp String', function next() {\n var match = this._r.exec(this._s);\n return { value: match, done: match === null };\n});\n\n$export($export.P, 'String', {\n matchAll: function matchAll(regexp) {\n defined(this);\n if (!isRegExp(regexp)) throw TypeError(regexp + ' is not a regexp!');\n var S = String(this);\n var flags = 'flags' in RegExpProto ? String(regexp.flags) : getFlags.call(regexp);\n var rx = new RegExp(regexp.source, ~flags.indexOf('g') ? flags : 'g' + flags);\n rx.lastIndex = toLength(regexp.lastIndex);\n return new $RegExpStringIterator(rx, S);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLm1hdGNoLWFsbC5qcz85ODhkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxjQUFjLG1CQUFPLENBQUMsRUFBWTtBQUNsQyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxlQUFlLG1CQUFPLENBQUMsRUFBYztBQUNyQyxlQUFlLG1CQUFPLENBQUMsRUFBVTtBQUNqQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3hCO0FBQ0EsVUFBVTtBQUNWLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjI3OC5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vU3RyaW5nLnByb3RvdHlwZS5tYXRjaEFsbC9cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGlzUmVnRXhwID0gcmVxdWlyZSgnLi9faXMtcmVnZXhwJyk7XG52YXIgZ2V0RmxhZ3MgPSByZXF1aXJlKCcuL19mbGFncycpO1xudmFyIFJlZ0V4cFByb3RvID0gUmVnRXhwLnByb3RvdHlwZTtcblxudmFyICRSZWdFeHBTdHJpbmdJdGVyYXRvciA9IGZ1bmN0aW9uIChyZWdleHAsIHN0cmluZykge1xuICB0aGlzLl9yID0gcmVnZXhwO1xuICB0aGlzLl9zID0gc3RyaW5nO1xufTtcblxucmVxdWlyZSgnLi9faXRlci1jcmVhdGUnKSgkUmVnRXhwU3RyaW5nSXRlcmF0b3IsICdSZWdFeHAgU3RyaW5nJywgZnVuY3Rpb24gbmV4dCgpIHtcbiAgdmFyIG1hdGNoID0gdGhpcy5fci5leGVjKHRoaXMuX3MpO1xuICByZXR1cm4geyB2YWx1ZTogbWF0Y2gsIGRvbmU6IG1hdGNoID09PSBudWxsIH07XG59KTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdTdHJpbmcnLCB7XG4gIG1hdGNoQWxsOiBmdW5jdGlvbiBtYXRjaEFsbChyZWdleHApIHtcbiAgICBkZWZpbmVkKHRoaXMpO1xuICAgIGlmICghaXNSZWdFeHAocmVnZXhwKSkgdGhyb3cgVHlwZUVycm9yKHJlZ2V4cCArICcgaXMgbm90IGEgcmVnZXhwIScpO1xuICAgIHZhciBTID0gU3RyaW5nKHRoaXMpO1xuICAgIHZhciBmbGFncyA9ICdmbGFncycgaW4gUmVnRXhwUHJvdG8gPyBTdHJpbmcocmVnZXhwLmZsYWdzKSA6IGdldEZsYWdzLmNhbGwocmVnZXhwKTtcbiAgICB2YXIgcnggPSBuZXcgUmVnRXhwKHJlZ2V4cC5zb3VyY2UsIH5mbGFncy5pbmRleE9mKCdnJykgPyBmbGFncyA6ICdnJyArIGZsYWdzKTtcbiAgICByeC5sYXN0SW5kZXggPSB0b0xlbmd0aChyZWdleHAubGFzdEluZGV4KTtcbiAgICByZXR1cm4gbmV3ICRSZWdFeHBTdHJpbmdJdGVyYXRvcihyeCwgUyk7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///278\n")},function(module,exports,__webpack_require__){eval("__webpack_require__(67)('asyncIterator');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3ltYm9sLmFzeW5jLWl0ZXJhdG9yLmpzP2FjNGQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsbUJBQU8sQ0FBQyxFQUFlIiwiZmlsZSI6IjI3OS5qcyIsInNvdXJjZXNDb250ZW50IjpbInJlcXVpcmUoJy4vX3drcy1kZWZpbmUnKSgnYXN5bmNJdGVyYXRvcicpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///279\n")},function(module,exports,__webpack_require__){eval("__webpack_require__(67)('observable');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3ltYm9sLm9ic2VydmFibGUuanM/YzdjYSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxtQkFBTyxDQUFDLEVBQWUiLCJmaWxlIjoiMjgwLmpzIiwic291cmNlc0NvbnRlbnQiOlsicmVxdWlyZSgnLi9fd2tzLWRlZmluZScpKCdvYnNlcnZhYmxlJyk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///280\n")},function(module,exports,__webpack_require__){eval("// https://github.com/tc39/proposal-object-getownpropertydescriptors\nvar $export = __webpack_require__(0);\nvar ownKeys = __webpack_require__(123);\nvar toIObject = __webpack_require__(15);\nvar gOPD = __webpack_require__(16);\nvar createProperty = __webpack_require__(82);\n\n$export($export.S, 'Object', {\n getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {\n var O = toIObject(object);\n var getDesc = gOPD.f;\n var keys = ownKeys(O);\n var result = {};\n var i = 0;\n var key, desc;\n while (keys.length > i) {\n desc = getDesc(O, key = keys[i++]);\n if (desc !== undefined) createProperty(result, key, desc);\n }\n return result;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JqZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcnMuanM/OGU2ZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGNBQWMsbUJBQU8sQ0FBQyxHQUFhO0FBQ25DLGdCQUFnQixtQkFBTyxDQUFDLEVBQWU7QUFDdkMsV0FBVyxtQkFBTyxDQUFDLEVBQWdCO0FBQ25DLHFCQUFxQixtQkFBTyxDQUFDLEVBQW9COztBQUVqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyODEuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yc1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBvd25LZXlzID0gcmVxdWlyZSgnLi9fb3duLWtleXMnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgZ09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJyk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSByZXF1aXJlKCcuL19jcmVhdGUtcHJvcGVydHknKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdPYmplY3QnLCB7XG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvcnM6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KSB7XG4gICAgdmFyIE8gPSB0b0lPYmplY3Qob2JqZWN0KTtcbiAgICB2YXIgZ2V0RGVzYyA9IGdPUEQuZjtcbiAgICB2YXIga2V5cyA9IG93bktleXMoTyk7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIga2V5LCBkZXNjO1xuICAgIHdoaWxlIChrZXlzLmxlbmd0aCA+IGkpIHtcbiAgICAgIGRlc2MgPSBnZXREZXNjKE8sIGtleSA9IGtleXNbaSsrXSk7XG4gICAgICBpZiAoZGVzYyAhPT0gdW5kZWZpbmVkKSBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIGtleSwgZGVzYyk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///281\n")},function(module,exports,__webpack_require__){eval("// https://github.com/tc39/proposal-object-values-entries\nvar $export = __webpack_require__(0);\nvar $values = __webpack_require__(126)(false);\n\n$export($export.S, 'Object', {\n values: function values(it) {\n return $values(it);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JqZWN0LnZhbHVlcy5qcz84NjE1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsY0FBYyxtQkFBTyxDQUFDLEdBQW9COztBQUUxQztBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjgyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtb2JqZWN0LXZhbHVlcy1lbnRyaWVzXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICR2YWx1ZXMgPSByZXF1aXJlKCcuL19vYmplY3QtdG8tYXJyYXknKShmYWxzZSk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnT2JqZWN0Jywge1xuICB2YWx1ZXM6IGZ1bmN0aW9uIHZhbHVlcyhpdCkge1xuICAgIHJldHVybiAkdmFsdWVzKGl0KTtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///282\n")},function(module,exports,__webpack_require__){eval("// https://github.com/tc39/proposal-object-values-entries\nvar $export = __webpack_require__(0);\nvar $entries = __webpack_require__(126)(true);\n\n$export($export.S, 'Object', {\n entries: function entries(it) {\n return $entries(it);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JqZWN0LmVudHJpZXMuanM/ZmZjMSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyxHQUFvQjs7QUFFM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjI4My5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLW9iamVjdC12YWx1ZXMtZW50cmllc1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkZW50cmllcyA9IHJlcXVpcmUoJy4vX29iamVjdC10by1hcnJheScpKHRydWUpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ09iamVjdCcsIHtcbiAgZW50cmllczogZnVuY3Rpb24gZW50cmllcyhpdCkge1xuICAgIHJldHVybiAkZW50cmllcyhpdCk7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///283\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar toObject = __webpack_require__(9);\nvar aFunction = __webpack_require__(10);\nvar $defineProperty = __webpack_require__(8);\n\n// B.2.2.2 Object.prototype.__defineGetter__(P, getter)\n__webpack_require__(7) && $export($export.P + __webpack_require__(63), 'Object', {\n __defineGetter__: function __defineGetter__(P, getter) {\n $defineProperty.f(toObject(this), P, { get: aFunction(getter), enumerable: true, configurable: true });\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JqZWN0LmRlZmluZS1nZXR0ZXIuanM/NDUwNCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGdCQUFnQixtQkFBTyxDQUFDLEVBQWU7QUFDdkMsc0JBQXNCLG1CQUFPLENBQUMsQ0FBYzs7QUFFNUM7QUFDQSxtQkFBTyxDQUFDLENBQWdCLHlCQUF5QixtQkFBTyxDQUFDLEVBQXNCO0FBQy9FO0FBQ0EsMENBQTBDLCtEQUErRDtBQUN6RztBQUNBLENBQUMiLCJmaWxlIjoiMjg0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciAkZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcblxuLy8gQi4yLjIuMiBPYmplY3QucHJvdG90eXBlLl9fZGVmaW5lR2V0dGVyX18oUCwgZ2V0dGVyKVxucmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSAmJiAkZXhwb3J0KCRleHBvcnQuUCArIHJlcXVpcmUoJy4vX29iamVjdC1mb3JjZWQtcGFtJyksICdPYmplY3QnLCB7XG4gIF9fZGVmaW5lR2V0dGVyX186IGZ1bmN0aW9uIF9fZGVmaW5lR2V0dGVyX18oUCwgZ2V0dGVyKSB7XG4gICAgJGRlZmluZVByb3BlcnR5LmYodG9PYmplY3QodGhpcyksIFAsIHsgZ2V0OiBhRnVuY3Rpb24oZ2V0dGVyKSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0pO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///284\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar toObject = __webpack_require__(9);\nvar aFunction = __webpack_require__(10);\nvar $defineProperty = __webpack_require__(8);\n\n// B.2.2.3 Object.prototype.__defineSetter__(P, setter)\n__webpack_require__(7) && $export($export.P + __webpack_require__(63), 'Object', {\n __defineSetter__: function __defineSetter__(P, setter) {\n $defineProperty.f(toObject(this), P, { set: aFunction(setter), enumerable: true, configurable: true });\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JqZWN0LmRlZmluZS1zZXR0ZXIuanM/ZmVlNyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGdCQUFnQixtQkFBTyxDQUFDLEVBQWU7QUFDdkMsc0JBQXNCLG1CQUFPLENBQUMsQ0FBYzs7QUFFNUM7QUFDQSxtQkFBTyxDQUFDLENBQWdCLHlCQUF5QixtQkFBTyxDQUFDLEVBQXNCO0FBQy9FO0FBQ0EsMENBQTBDLCtEQUErRDtBQUN6RztBQUNBLENBQUMiLCJmaWxlIjoiMjg1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciAkZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcblxuLy8gQi4yLjIuMyBPYmplY3QucHJvdG90eXBlLl9fZGVmaW5lU2V0dGVyX18oUCwgc2V0dGVyKVxucmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSAmJiAkZXhwb3J0KCRleHBvcnQuUCArIHJlcXVpcmUoJy4vX29iamVjdC1mb3JjZWQtcGFtJyksICdPYmplY3QnLCB7XG4gIF9fZGVmaW5lU2V0dGVyX186IGZ1bmN0aW9uIF9fZGVmaW5lU2V0dGVyX18oUCwgc2V0dGVyKSB7XG4gICAgJGRlZmluZVByb3BlcnR5LmYodG9PYmplY3QodGhpcyksIFAsIHsgc2V0OiBhRnVuY3Rpb24oc2V0dGVyKSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0pO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///285\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar toObject = __webpack_require__(9);\nvar toPrimitive = __webpack_require__(23);\nvar getPrototypeOf = __webpack_require__(17);\nvar getOwnPropertyDescriptor = __webpack_require__(16).f;\n\n// B.2.2.4 Object.prototype.__lookupGetter__(P)\n__webpack_require__(7) && $export($export.P + __webpack_require__(63), 'Object', {\n __lookupGetter__: function __lookupGetter__(P) {\n var O = toObject(this);\n var K = toPrimitive(P, true);\n var D;\n do {\n if (D = getOwnPropertyDescriptor(O, K)) return D.get;\n } while (O = getPrototypeOf(O));\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JqZWN0Lmxvb2t1cC1nZXR0ZXIuanM/YjlhMSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGtCQUFrQixtQkFBTyxDQUFDLEVBQWlCO0FBQzNDLHFCQUFxQixtQkFBTyxDQUFDLEVBQWU7QUFDNUMsK0JBQStCLG1CQUFPLENBQUMsRUFBZ0I7O0FBRXZEO0FBQ0EsbUJBQU8sQ0FBQyxDQUFnQix5QkFBeUIsbUJBQU8sQ0FBQyxFQUFzQjtBQUMvRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxDQUFDIiwiZmlsZSI6IjI4Ni5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJykuZjtcblxuLy8gQi4yLjIuNCBPYmplY3QucHJvdG90eXBlLl9fbG9va3VwR2V0dGVyX18oUClcbnJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgJGV4cG9ydCgkZXhwb3J0LlAgKyByZXF1aXJlKCcuL19vYmplY3QtZm9yY2VkLXBhbScpLCAnT2JqZWN0Jywge1xuICBfX2xvb2t1cEdldHRlcl9fOiBmdW5jdGlvbiBfX2xvb2t1cEdldHRlcl9fKFApIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBLID0gdG9QcmltaXRpdmUoUCwgdHJ1ZSk7XG4gICAgdmFyIEQ7XG4gICAgZG8ge1xuICAgICAgaWYgKEQgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgSykpIHJldHVybiBELmdldDtcbiAgICB9IHdoaWxlIChPID0gZ2V0UHJvdG90eXBlT2YoTykpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///286\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar toObject = __webpack_require__(9);\nvar toPrimitive = __webpack_require__(23);\nvar getPrototypeOf = __webpack_require__(17);\nvar getOwnPropertyDescriptor = __webpack_require__(16).f;\n\n// B.2.2.5 Object.prototype.__lookupSetter__(P)\n__webpack_require__(7) && $export($export.P + __webpack_require__(63), 'Object', {\n __lookupSetter__: function __lookupSetter__(P) {\n var O = toObject(this);\n var K = toPrimitive(P, true);\n var D;\n do {\n if (D = getOwnPropertyDescriptor(O, K)) return D.set;\n } while (O = getPrototypeOf(O));\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JqZWN0Lmxvb2t1cC1zZXR0ZXIuanM/NjRkNSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGtCQUFrQixtQkFBTyxDQUFDLEVBQWlCO0FBQzNDLHFCQUFxQixtQkFBTyxDQUFDLEVBQWU7QUFDNUMsK0JBQStCLG1CQUFPLENBQUMsRUFBZ0I7O0FBRXZEO0FBQ0EsbUJBQU8sQ0FBQyxDQUFnQix5QkFBeUIsbUJBQU8sQ0FBQyxFQUFzQjtBQUMvRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxDQUFDIiwiZmlsZSI6IjI4Ny5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJykuZjtcblxuLy8gQi4yLjIuNSBPYmplY3QucHJvdG90eXBlLl9fbG9va3VwU2V0dGVyX18oUClcbnJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgJGV4cG9ydCgkZXhwb3J0LlAgKyByZXF1aXJlKCcuL19vYmplY3QtZm9yY2VkLXBhbScpLCAnT2JqZWN0Jywge1xuICBfX2xvb2t1cFNldHRlcl9fOiBmdW5jdGlvbiBfX2xvb2t1cFNldHRlcl9fKFApIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBLID0gdG9QcmltaXRpdmUoUCwgdHJ1ZSk7XG4gICAgdmFyIEQ7XG4gICAgZG8ge1xuICAgICAgaWYgKEQgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgSykpIHJldHVybiBELnNldDtcbiAgICB9IHdoaWxlIChPID0gZ2V0UHJvdG90eXBlT2YoTykpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///287\n")},function(module,exports,__webpack_require__){eval("// https://github.com/DavidBruant/Map-Set.prototype.toJSON\nvar $export = __webpack_require__(0);\n\n$export($export.P + $export.R, 'Map', { toJSON: __webpack_require__(127)('Map') });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWFwLnRvLWpzb24uanM/NDcwNCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXOztBQUVqQyx1Q0FBdUMsU0FBUyxtQkFBTyxDQUFDLEdBQXVCLFVBQVUiLCJmaWxlIjoiMjg4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXRodWIuY29tL0RhdmlkQnJ1YW50L01hcC1TZXQucHJvdG90eXBlLnRvSlNPTlxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LlIsICdNYXAnLCB7IHRvSlNPTjogcmVxdWlyZSgnLi9fY29sbGVjdGlvbi10by1qc29uJykoJ01hcCcpIH0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///288\n")},function(module,exports,__webpack_require__){eval("// https://github.com/DavidBruant/Map-Set.prototype.toJSON\nvar $export = __webpack_require__(0);\n\n$export($export.P + $export.R, 'Set', { toJSON: __webpack_require__(127)('Set') });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc2V0LnRvLWpzb24uanM/ZGI5YSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXOztBQUVqQyx1Q0FBdUMsU0FBUyxtQkFBTyxDQUFDLEdBQXVCLFVBQVUiLCJmaWxlIjoiMjg5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXRodWIuY29tL0RhdmlkQnJ1YW50L01hcC1TZXQucHJvdG90eXBlLnRvSlNPTlxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LlIsICdTZXQnLCB7IHRvSlNPTjogcmVxdWlyZSgnLi9fY29sbGVjdGlvbi10by1qc29uJykoJ1NldCcpIH0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///289\n")},function(module,exports,__webpack_require__){eval("// https://tc39.github.io/proposal-setmap-offrom/#sec-map.of\n__webpack_require__(64)('Map');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWFwLm9mLmpzPzcyOWIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxtQkFBTyxDQUFDLEVBQXNCIiwiZmlsZSI6IjI5MC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS8jc2VjLW1hcC5vZlxucmVxdWlyZSgnLi9fc2V0LWNvbGxlY3Rpb24tb2YnKSgnTWFwJyk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///290\n")},function(module,exports,__webpack_require__){eval("// https://tc39.github.io/proposal-setmap-offrom/#sec-set.of\n__webpack_require__(64)('Set');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc2V0Lm9mLmpzPzk5YzUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxtQkFBTyxDQUFDLEVBQXNCIiwiZmlsZSI6IjI5MS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS8jc2VjLXNldC5vZlxucmVxdWlyZSgnLi9fc2V0LWNvbGxlY3Rpb24tb2YnKSgnU2V0Jyk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///291\n")},function(module,exports,__webpack_require__){eval("// https://tc39.github.io/proposal-setmap-offrom/#sec-weakmap.of\n__webpack_require__(64)('WeakMap');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcud2Vhay1tYXAub2YuanM/NzY0ZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLG1CQUFPLENBQUMsRUFBc0IiLCJmaWxlIjoiMjkyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tLyNzZWMtd2Vha21hcC5vZlxucmVxdWlyZSgnLi9fc2V0LWNvbGxlY3Rpb24tb2YnKSgnV2Vha01hcCcpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///292\n")},function(module,exports,__webpack_require__){eval("// https://tc39.github.io/proposal-setmap-offrom/#sec-weakset.of\n__webpack_require__(64)('WeakSet');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcud2Vhay1zZXQub2YuanM/YmRkMSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLG1CQUFPLENBQUMsRUFBc0IiLCJmaWxlIjoiMjkzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tLyNzZWMtd2Vha3NldC5vZlxucmVxdWlyZSgnLi9fc2V0LWNvbGxlY3Rpb24tb2YnKSgnV2Vha1NldCcpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///293\n")},function(module,exports,__webpack_require__){eval("// https://tc39.github.io/proposal-setmap-offrom/#sec-map.from\n__webpack_require__(65)('Map');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWFwLmZyb20uanM/NDE2YyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLG1CQUFPLENBQUMsRUFBd0IiLCJmaWxlIjoiMjk0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tLyNzZWMtbWFwLmZyb21cbnJlcXVpcmUoJy4vX3NldC1jb2xsZWN0aW9uLWZyb20nKSgnTWFwJyk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///294\n")},function(module,exports,__webpack_require__){eval("// https://tc39.github.io/proposal-setmap-offrom/#sec-set.from\n__webpack_require__(65)('Set');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc2V0LmZyb20uanM/ZGQ4YSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLG1CQUFPLENBQUMsRUFBd0IiLCJmaWxlIjoiMjk1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tLyNzZWMtc2V0LmZyb21cbnJlcXVpcmUoJy4vX3NldC1jb2xsZWN0aW9uLWZyb20nKSgnU2V0Jyk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///295\n")},function(module,exports,__webpack_require__){eval("// https://tc39.github.io/proposal-setmap-offrom/#sec-weakmap.from\n__webpack_require__(65)('WeakMap');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcud2Vhay1tYXAuZnJvbS5qcz81ZDQwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsbUJBQU8sQ0FBQyxFQUF3QiIsImZpbGUiOiIyOTYuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vI3NlYy13ZWFrbWFwLmZyb21cbnJlcXVpcmUoJy4vX3NldC1jb2xsZWN0aW9uLWZyb20nKSgnV2Vha01hcCcpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///296\n")},function(module,exports,__webpack_require__){eval("// https://tc39.github.io/proposal-setmap-offrom/#sec-weakset.from\n__webpack_require__(65)('WeakSet');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcud2Vhay1zZXQuZnJvbS5qcz81ZDkwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsbUJBQU8sQ0FBQyxFQUF3QiIsImZpbGUiOiIyOTcuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vI3NlYy13ZWFrc2V0LmZyb21cbnJlcXVpcmUoJy4vX3NldC1jb2xsZWN0aW9uLWZyb20nKSgnV2Vha1NldCcpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///297\n")},function(module,exports,__webpack_require__){eval("// https://github.com/tc39/proposal-global\nvar $export = __webpack_require__(0);\n\n$export($export.G, { global: __webpack_require__(2) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuZ2xvYmFsLmpzPzBjMzYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVzs7QUFFakMsb0JBQW9CLFNBQVMsbUJBQU8sQ0FBQyxDQUFXLEdBQUciLCJmaWxlIjoiMjk4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtZ2xvYmFsXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuRywgeyBnbG9iYWw6IHJlcXVpcmUoJy4vX2dsb2JhbCcpIH0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///298\n")},function(module,exports,__webpack_require__){eval("// https://github.com/tc39/proposal-global\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'System', { global: __webpack_require__(2) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3lzdGVtLmdsb2JhbC5qcz9hMjM0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDLDhCQUE4QixTQUFTLG1CQUFPLENBQUMsQ0FBVyxHQUFHIiwiZmlsZSI6IjI5OS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWdsb2JhbFxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdTeXN0ZW0nLCB7IGdsb2JhbDogcmVxdWlyZSgnLi9fZ2xvYmFsJykgfSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///299\n")},function(module,exports,__webpack_require__){eval("// https://github.com/ljharb/proposal-is-error\nvar $export = __webpack_require__(0);\nvar cof = __webpack_require__(20);\n\n$export($export.S, 'Error', {\n isError: function isError(it) {\n return cof(it) === 'Error';\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuZXJyb3IuaXMtZXJyb3IuanM/NDI3NiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLFVBQVUsbUJBQU8sQ0FBQyxFQUFROztBQUUxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMzAwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXRodWIuY29tL2xqaGFyYi9wcm9wb3NhbC1pcy1lcnJvclxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdFcnJvcicsIHtcbiAgaXNFcnJvcjogZnVuY3Rpb24gaXNFcnJvcihpdCkge1xuICAgIHJldHVybiBjb2YoaXQpID09PSAnRXJyb3InO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///300\n")},function(module,exports,__webpack_require__){eval("// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', {\n clamp: function clamp(x, lower, upper) {\n return Math.min(upper, Math.max(lower, x));\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5jbGFtcC5qcz8wOWUwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIzMDEuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBodHRwczovL3J3YWxkcm9uLmdpdGh1Yi5pby9wcm9wb3NhbC1tYXRoLWV4dGVuc2lvbnMvXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGNsYW1wOiBmdW5jdGlvbiBjbGFtcCh4LCBsb3dlciwgdXBwZXIpIHtcbiAgICByZXR1cm4gTWF0aC5taW4odXBwZXIsIE1hdGgubWF4KGxvd2VyLCB4KSk7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///301\n")},function(module,exports,__webpack_require__){eval("// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', { DEG_PER_RAD: Math.PI / 180 });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5kZWctcGVyLXJhZC5qcz8wYzAwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDLDRCQUE0Qiw2QkFBNkIiLCJmaWxlIjoiMzAyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9yd2FsZHJvbi5naXRodWIuaW8vcHJvcG9zYWwtbWF0aC1leHRlbnNpb25zL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywgeyBERUdfUEVSX1JBRDogTWF0aC5QSSAvIDE4MCB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///302\n")},function(module,exports,__webpack_require__){eval("// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = __webpack_require__(0);\nvar RAD_PER_DEG = 180 / Math.PI;\n\n$export($export.S, 'Math', {\n degrees: function degrees(radians) {\n return radians * RAD_PER_DEG;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5kZWdyZWVzLmpzPzI3NDgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMzAzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9yd2FsZHJvbi5naXRodWIuaW8vcHJvcG9zYWwtbWF0aC1leHRlbnNpb25zL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBSQURfUEVSX0RFRyA9IDE4MCAvIE1hdGguUEk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgZGVncmVlczogZnVuY3Rpb24gZGVncmVlcyhyYWRpYW5zKSB7XG4gICAgcmV0dXJuIHJhZGlhbnMgKiBSQURfUEVSX0RFRztcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///303\n")},function(module,exports,__webpack_require__){eval("// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = __webpack_require__(0);\nvar scale = __webpack_require__(129);\nvar fround = __webpack_require__(108);\n\n$export($export.S, 'Math', {\n fscale: function fscale(x, inLow, inHigh, outLow, outHigh) {\n return fround(scale(x, inLow, inHigh, outLow, outHigh));\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5mc2NhbGUuanM/MWY5MSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLFlBQVksbUJBQU8sQ0FBQyxHQUFlO0FBQ25DLGFBQWEsbUJBQU8sQ0FBQyxHQUFnQjs7QUFFckM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjMwNC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vcndhbGRyb24uZ2l0aHViLmlvL3Byb3Bvc2FsLW1hdGgtZXh0ZW5zaW9ucy9cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgc2NhbGUgPSByZXF1aXJlKCcuL19tYXRoLXNjYWxlJyk7XG52YXIgZnJvdW5kID0gcmVxdWlyZSgnLi9fbWF0aC1mcm91bmQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBmc2NhbGU6IGZ1bmN0aW9uIGZzY2FsZSh4LCBpbkxvdywgaW5IaWdoLCBvdXRMb3csIG91dEhpZ2gpIHtcbiAgICByZXR1cm4gZnJvdW5kKHNjYWxlKHgsIGluTG93LCBpbkhpZ2gsIG91dExvdywgb3V0SGlnaCkpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///304\n")},function(module,exports,__webpack_require__){eval("// https://gist.github.com/BrendanEich/4294d5c212a6d2254703\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', {\n iaddh: function iaddh(x0, x1, y0, y1) {\n var $x0 = x0 >>> 0;\n var $x1 = x1 >>> 0;\n var $y0 = y0 >>> 0;\n return $x1 + (y1 >>> 0) + (($x0 & $y0 | ($x0 | $y0) & ~($x0 + $y0 >>> 0)) >>> 31) | 0;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5pYWRkaC5qcz85YzAwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIzMDUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9CcmVuZGFuRWljaC80Mjk0ZDVjMjEyYTZkMjI1NDcwM1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBpYWRkaDogZnVuY3Rpb24gaWFkZGgoeDAsIHgxLCB5MCwgeTEpIHtcbiAgICB2YXIgJHgwID0geDAgPj4+IDA7XG4gICAgdmFyICR4MSA9IHgxID4+PiAwO1xuICAgIHZhciAkeTAgPSB5MCA+Pj4gMDtcbiAgICByZXR1cm4gJHgxICsgKHkxID4+PiAwKSArICgoJHgwICYgJHkwIHwgKCR4MCB8ICR5MCkgJiB+KCR4MCArICR5MCA+Pj4gMCkpID4+PiAzMSkgfCAwO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///305\n")},function(module,exports,__webpack_require__){eval("// https://gist.github.com/BrendanEich/4294d5c212a6d2254703\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', {\n isubh: function isubh(x0, x1, y0, y1) {\n var $x0 = x0 >>> 0;\n var $x1 = x1 >>> 0;\n var $y0 = y0 >>> 0;\n return $x1 - (y1 >>> 0) - ((~$x0 & $y0 | ~($x0 ^ $y0) & $x0 - $y0 >>> 0) >>> 31) | 0;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5pc3ViaC5qcz8yZjc4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIzMDYuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9CcmVuZGFuRWljaC80Mjk0ZDVjMjEyYTZkMjI1NDcwM1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBpc3ViaDogZnVuY3Rpb24gaXN1YmgoeDAsIHgxLCB5MCwgeTEpIHtcbiAgICB2YXIgJHgwID0geDAgPj4+IDA7XG4gICAgdmFyICR4MSA9IHgxID4+PiAwO1xuICAgIHZhciAkeTAgPSB5MCA+Pj4gMDtcbiAgICByZXR1cm4gJHgxIC0gKHkxID4+PiAwKSAtICgofiR4MCAmICR5MCB8IH4oJHgwIF4gJHkwKSAmICR4MCAtICR5MCA+Pj4gMCkgPj4+IDMxKSB8IDA7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///306\n")},function(module,exports,__webpack_require__){eval("// https://gist.github.com/BrendanEich/4294d5c212a6d2254703\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', {\n imulh: function imulh(u, v) {\n var UINT16 = 0xffff;\n var $u = +u;\n var $v = +v;\n var u0 = $u & UINT16;\n var v0 = $v & UINT16;\n var u1 = $u >> 16;\n var v1 = $v >> 16;\n var t = (u1 * v0 >>> 0) + (u0 * v0 >>> 16);\n return u1 * v1 + (t >> 16) + ((u0 * v1 >>> 0) + (t & UINT16) >> 16);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5pbXVsaC5qcz9iNGMyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMzA3LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vQnJlbmRhbkVpY2gvNDI5NGQ1YzIxMmE2ZDIyNTQ3MDNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgaW11bGg6IGZ1bmN0aW9uIGltdWxoKHUsIHYpIHtcbiAgICB2YXIgVUlOVDE2ID0gMHhmZmZmO1xuICAgIHZhciAkdSA9ICt1O1xuICAgIHZhciAkdiA9ICt2O1xuICAgIHZhciB1MCA9ICR1ICYgVUlOVDE2O1xuICAgIHZhciB2MCA9ICR2ICYgVUlOVDE2O1xuICAgIHZhciB1MSA9ICR1ID4+IDE2O1xuICAgIHZhciB2MSA9ICR2ID4+IDE2O1xuICAgIHZhciB0ID0gKHUxICogdjAgPj4+IDApICsgKHUwICogdjAgPj4+IDE2KTtcbiAgICByZXR1cm4gdTEgKiB2MSArICh0ID4+IDE2KSArICgodTAgKiB2MSA+Pj4gMCkgKyAodCAmIFVJTlQxNikgPj4gMTYpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///307\n")},function(module,exports,__webpack_require__){eval("// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', { RAD_PER_DEG: 180 / Math.PI });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5yYWQtcGVyLWRlZy5qcz8xZjE4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDLDRCQUE0Qiw2QkFBNkIiLCJmaWxlIjoiMzA4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9yd2FsZHJvbi5naXRodWIuaW8vcHJvcG9zYWwtbWF0aC1leHRlbnNpb25zL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywgeyBSQURfUEVSX0RFRzogMTgwIC8gTWF0aC5QSSB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///308\n")},function(module,exports,__webpack_require__){eval("// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = __webpack_require__(0);\nvar DEG_PER_RAD = Math.PI / 180;\n\n$export($export.S, 'Math', {\n radians: function radians(degrees) {\n return degrees * DEG_PER_RAD;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5yYWRpYW5zLmpzPzY5MmIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMzA5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9yd2FsZHJvbi5naXRodWIuaW8vcHJvcG9zYWwtbWF0aC1leHRlbnNpb25zL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBERUdfUEVSX1JBRCA9IE1hdGguUEkgLyAxODA7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgcmFkaWFuczogZnVuY3Rpb24gcmFkaWFucyhkZWdyZWVzKSB7XG4gICAgcmV0dXJuIGRlZ3JlZXMgKiBERUdfUEVSX1JBRDtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///309\n")},function(module,exports,__webpack_require__){eval("// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', { scale: __webpack_require__(129) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5zY2FsZS5qcz9jNzc1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDLDRCQUE0QixRQUFRLG1CQUFPLENBQUMsR0FBZSxHQUFHIiwiZmlsZSI6IjMxMC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vcndhbGRyb24uZ2l0aHViLmlvL3Byb3Bvc2FsLW1hdGgtZXh0ZW5zaW9ucy9cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHsgc2NhbGU6IHJlcXVpcmUoJy4vX21hdGgtc2NhbGUnKSB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///310\n")},function(module,exports,__webpack_require__){eval("// https://gist.github.com/BrendanEich/4294d5c212a6d2254703\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', {\n umulh: function umulh(u, v) {\n var UINT16 = 0xffff;\n var $u = +u;\n var $v = +v;\n var u0 = $u & UINT16;\n var v0 = $v & UINT16;\n var u1 = $u >>> 16;\n var v1 = $v >>> 16;\n var t = (u1 * v0 >>> 0) + (u0 * v0 >>> 16);\n return u1 * v1 + (t >>> 16) + ((u0 * v1 >>> 0) + (t & UINT16) >>> 16);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC51bXVsaC5qcz84YTVjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMzExLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vQnJlbmRhbkVpY2gvNDI5NGQ1YzIxMmE2ZDIyNTQ3MDNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgdW11bGg6IGZ1bmN0aW9uIHVtdWxoKHUsIHYpIHtcbiAgICB2YXIgVUlOVDE2ID0gMHhmZmZmO1xuICAgIHZhciAkdSA9ICt1O1xuICAgIHZhciAkdiA9ICt2O1xuICAgIHZhciB1MCA9ICR1ICYgVUlOVDE2O1xuICAgIHZhciB2MCA9ICR2ICYgVUlOVDE2O1xuICAgIHZhciB1MSA9ICR1ID4+PiAxNjtcbiAgICB2YXIgdjEgPSAkdiA+Pj4gMTY7XG4gICAgdmFyIHQgPSAodTEgKiB2MCA+Pj4gMCkgKyAodTAgKiB2MCA+Pj4gMTYpO1xuICAgIHJldHVybiB1MSAqIHYxICsgKHQgPj4+IDE2KSArICgodTAgKiB2MSA+Pj4gMCkgKyAodCAmIFVJTlQxNikgPj4+IDE2KTtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///311\n")},function(module,exports,__webpack_require__){eval("// http://jfbastien.github.io/papers/Math.signbit.html\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', { signbit: function signbit(x) {\n // eslint-disable-next-line no-self-compare\n return (x = +x) != x ? x : x == 0 ? 1 / x == Infinity : x > 0;\n} });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5zaWduYml0LmpzP2VkN2UiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVzs7QUFFakMsNEJBQTRCO0FBQzVCO0FBQ0E7QUFDQSxDQUFDLEVBQUUiLCJmaWxlIjoiMzEyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cDovL2pmYmFzdGllbi5naXRodWIuaW8vcGFwZXJzL01hdGguc2lnbmJpdC5odG1sXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7IHNpZ25iaXQ6IGZ1bmN0aW9uIHNpZ25iaXQoeCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gIHJldHVybiAoeCA9ICt4KSAhPSB4ID8geCA6IHggPT0gMCA/IDEgLyB4ID09IEluZmluaXR5IDogeCA+IDA7XG59IH0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///312\n")},function(module,exports,__webpack_require__){"use strict";eval("// https://github.com/tc39/proposal-promise-finally\n\nvar $export = __webpack_require__(0);\nvar core = __webpack_require__(18);\nvar global = __webpack_require__(2);\nvar speciesConstructor = __webpack_require__(51);\nvar promiseResolve = __webpack_require__(116);\n\n$export($export.P + $export.R, 'Promise', { 'finally': function (onFinally) {\n var C = speciesConstructor(this, core.Promise || global.Promise);\n var isFunction = typeof onFinally == 'function';\n return this.then(\n isFunction ? function (x) {\n return promiseResolve(C, onFinally()).then(function () { return x; });\n } : onFinally,\n isFunction ? function (e) {\n return promiseResolve(C, onFinally()).then(function () { throw e; });\n } : onFinally\n );\n} });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucHJvbWlzZS5maW5hbGx5LmpzPzA5N2QiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDYTtBQUNiLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLFdBQVcsbUJBQU8sQ0FBQyxFQUFTO0FBQzVCLGFBQWEsbUJBQU8sQ0FBQyxDQUFXO0FBQ2hDLHlCQUF5QixtQkFBTyxDQUFDLEVBQXdCO0FBQ3pELHFCQUFxQixtQkFBTyxDQUFDLEdBQW9COztBQUVqRCwyQ0FBMkM7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4REFBOEQsVUFBVSxFQUFFO0FBQzFFLEtBQUs7QUFDTDtBQUNBLDhEQUE4RCxTQUFTLEVBQUU7QUFDekUsS0FBSztBQUNMO0FBQ0EsQ0FBQyxFQUFFIiwiZmlsZSI6IjMxMy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXByb21pc2UtZmluYWxseVxuJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4vX3NwZWNpZXMtY29uc3RydWN0b3InKTtcbnZhciBwcm9taXNlUmVzb2x2ZSA9IHJlcXVpcmUoJy4vX3Byb21pc2UtcmVzb2x2ZScpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuUiwgJ1Byb21pc2UnLCB7ICdmaW5hbGx5JzogZnVuY3Rpb24gKG9uRmluYWxseSkge1xuICB2YXIgQyA9IHNwZWNpZXNDb25zdHJ1Y3Rvcih0aGlzLCBjb3JlLlByb21pc2UgfHwgZ2xvYmFsLlByb21pc2UpO1xuICB2YXIgaXNGdW5jdGlvbiA9IHR5cGVvZiBvbkZpbmFsbHkgPT0gJ2Z1bmN0aW9uJztcbiAgcmV0dXJuIHRoaXMudGhlbihcbiAgICBpc0Z1bmN0aW9uID8gZnVuY3Rpb24gKHgpIHtcbiAgICAgIHJldHVybiBwcm9taXNlUmVzb2x2ZShDLCBvbkZpbmFsbHkoKSkudGhlbihmdW5jdGlvbiAoKSB7IHJldHVybiB4OyB9KTtcbiAgICB9IDogb25GaW5hbGx5LFxuICAgIGlzRnVuY3Rpb24gPyBmdW5jdGlvbiAoZSkge1xuICAgICAgcmV0dXJuIHByb21pc2VSZXNvbHZlKEMsIG9uRmluYWxseSgpKS50aGVuKGZ1bmN0aW9uICgpIHsgdGhyb3cgZTsgfSk7XG4gICAgfSA6IG9uRmluYWxseVxuICApO1xufSB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///313\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// https://github.com/tc39/proposal-promise-try\nvar $export = __webpack_require__(0);\nvar newPromiseCapability = __webpack_require__(91);\nvar perform = __webpack_require__(115);\n\n$export($export.S, 'Promise', { 'try': function (callbackfn) {\n var promiseCapability = newPromiseCapability.f(this);\n var result = perform(callbackfn);\n (result.e ? promiseCapability.reject : promiseCapability.resolve)(result.v);\n return promiseCapability.promise;\n} });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucHJvbWlzZS50cnkuanM/YTljYyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsMkJBQTJCLG1CQUFPLENBQUMsRUFBMkI7QUFDOUQsY0FBYyxtQkFBTyxDQUFDLEdBQVk7O0FBRWxDLCtCQUErQjtBQUMvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsRUFBRSIsImZpbGUiOiIzMTQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1wcm9taXNlLXRyeVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IHJlcXVpcmUoJy4vX25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcbnZhciBwZXJmb3JtID0gcmVxdWlyZSgnLi9fcGVyZm9ybScpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1Byb21pc2UnLCB7ICd0cnknOiBmdW5jdGlvbiAoY2FsbGJhY2tmbikge1xuICB2YXIgcHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eS5mKHRoaXMpO1xuICB2YXIgcmVzdWx0ID0gcGVyZm9ybShjYWxsYmFja2ZuKTtcbiAgKHJlc3VsdC5lID8gcHJvbWlzZUNhcGFiaWxpdHkucmVqZWN0IDogcHJvbWlzZUNhcGFiaWxpdHkucmVzb2x2ZSkocmVzdWx0LnYpO1xuICByZXR1cm4gcHJvbWlzZUNhcGFiaWxpdHkucHJvbWlzZTtcbn0gfSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///314\n")},function(module,exports,__webpack_require__){eval("var metadata = __webpack_require__(28);\nvar anObject = __webpack_require__(1);\nvar toMetaKey = metadata.key;\nvar ordinaryDefineOwnMetadata = metadata.set;\n\nmetadata.exp({ defineMetadata: function defineMetadata(metadataKey, metadataValue, target, targetKey) {\n ordinaryDefineOwnMetadata(metadataKey, metadataValue, anObject(target), toMetaKey(targetKey));\n} });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5kZWZpbmUtbWV0YWRhdGEuanM/ZTNkMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxlQUFlLG1CQUFPLENBQUMsRUFBYTtBQUNwQyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQztBQUNBOztBQUVBLGNBQWM7QUFDZDtBQUNBLENBQUMsRUFBRSIsImZpbGUiOiIzMTUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgbWV0YWRhdGEgPSByZXF1aXJlKCcuL19tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgdG9NZXRhS2V5ID0gbWV0YWRhdGEua2V5O1xudmFyIG9yZGluYXJ5RGVmaW5lT3duTWV0YWRhdGEgPSBtZXRhZGF0YS5zZXQ7XG5cbm1ldGFkYXRhLmV4cCh7IGRlZmluZU1ldGFkYXRhOiBmdW5jdGlvbiBkZWZpbmVNZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSwgdGFyZ2V0LCB0YXJnZXRLZXkpIHtcbiAgb3JkaW5hcnlEZWZpbmVPd25NZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSwgYW5PYmplY3QodGFyZ2V0KSwgdG9NZXRhS2V5KHRhcmdldEtleSkpO1xufSB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///315\n")},function(module,exports,__webpack_require__){eval("var metadata = __webpack_require__(28);\nvar anObject = __webpack_require__(1);\nvar toMetaKey = metadata.key;\nvar getOrCreateMetadataMap = metadata.map;\nvar store = metadata.store;\n\nmetadata.exp({ deleteMetadata: function deleteMetadata(metadataKey, target /* , targetKey */) {\n var targetKey = arguments.length < 3 ? undefined : toMetaKey(arguments[2]);\n var metadataMap = getOrCreateMetadataMap(anObject(target), targetKey, false);\n if (metadataMap === undefined || !metadataMap['delete'](metadataKey)) return false;\n if (metadataMap.size) return true;\n var targetMetadata = store.get(target);\n targetMetadata['delete'](targetKey);\n return !!targetMetadata.size || store['delete'](target);\n} });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5kZWxldGUtbWV0YWRhdGEuanM/Y2VhZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxlQUFlLG1CQUFPLENBQUMsRUFBYTtBQUNwQyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQztBQUNBO0FBQ0E7O0FBRUEsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxFQUFFIiwiZmlsZSI6IjMxNi5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBtZXRhZGF0YSA9IHJlcXVpcmUoJy4vX21ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciB0b01ldGFLZXkgPSBtZXRhZGF0YS5rZXk7XG52YXIgZ2V0T3JDcmVhdGVNZXRhZGF0YU1hcCA9IG1ldGFkYXRhLm1hcDtcbnZhciBzdG9yZSA9IG1ldGFkYXRhLnN0b3JlO1xuXG5tZXRhZGF0YS5leHAoeyBkZWxldGVNZXRhZGF0YTogZnVuY3Rpb24gZGVsZXRlTWV0YWRhdGEobWV0YWRhdGFLZXksIHRhcmdldCAvKiAsIHRhcmdldEtleSAqLykge1xuICB2YXIgdGFyZ2V0S2V5ID0gYXJndW1lbnRzLmxlbmd0aCA8IDMgPyB1bmRlZmluZWQgOiB0b01ldGFLZXkoYXJndW1lbnRzWzJdKTtcbiAgdmFyIG1ldGFkYXRhTWFwID0gZ2V0T3JDcmVhdGVNZXRhZGF0YU1hcChhbk9iamVjdCh0YXJnZXQpLCB0YXJnZXRLZXksIGZhbHNlKTtcbiAgaWYgKG1ldGFkYXRhTWFwID09PSB1bmRlZmluZWQgfHwgIW1ldGFkYXRhTWFwWydkZWxldGUnXShtZXRhZGF0YUtleSkpIHJldHVybiBmYWxzZTtcbiAgaWYgKG1ldGFkYXRhTWFwLnNpemUpIHJldHVybiB0cnVlO1xuICB2YXIgdGFyZ2V0TWV0YWRhdGEgPSBzdG9yZS5nZXQodGFyZ2V0KTtcbiAgdGFyZ2V0TWV0YWRhdGFbJ2RlbGV0ZSddKHRhcmdldEtleSk7XG4gIHJldHVybiAhIXRhcmdldE1ldGFkYXRhLnNpemUgfHwgc3RvcmVbJ2RlbGV0ZSddKHRhcmdldCk7XG59IH0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///316\n")},function(module,exports,__webpack_require__){eval("var metadata = __webpack_require__(28);\nvar anObject = __webpack_require__(1);\nvar getPrototypeOf = __webpack_require__(17);\nvar ordinaryHasOwnMetadata = metadata.has;\nvar ordinaryGetOwnMetadata = metadata.get;\nvar toMetaKey = metadata.key;\n\nvar ordinaryGetMetadata = function (MetadataKey, O, P) {\n var hasOwn = ordinaryHasOwnMetadata(MetadataKey, O, P);\n if (hasOwn) return ordinaryGetOwnMetadata(MetadataKey, O, P);\n var parent = getPrototypeOf(O);\n return parent !== null ? ordinaryGetMetadata(MetadataKey, parent, P) : undefined;\n};\n\nmetadata.exp({ getMetadata: function getMetadata(metadataKey, target /* , targetKey */) {\n return ordinaryGetMetadata(metadataKey, anObject(target), arguments.length < 3 ? undefined : toMetaKey(arguments[2]));\n} });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtbWV0YWRhdGEuanM/ZTM5NCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxlQUFlLG1CQUFPLENBQUMsRUFBYTtBQUNwQyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxxQkFBcUIsbUJBQU8sQ0FBQyxFQUFlO0FBQzVDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsY0FBYztBQUNkO0FBQ0EsQ0FBQyxFQUFFIiwiZmlsZSI6IjMxNy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBtZXRhZGF0YSA9IHJlcXVpcmUoJy4vX21ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBvcmRpbmFyeUhhc093bk1ldGFkYXRhID0gbWV0YWRhdGEuaGFzO1xudmFyIG9yZGluYXJ5R2V0T3duTWV0YWRhdGEgPSBtZXRhZGF0YS5nZXQ7XG52YXIgdG9NZXRhS2V5ID0gbWV0YWRhdGEua2V5O1xuXG52YXIgb3JkaW5hcnlHZXRNZXRhZGF0YSA9IGZ1bmN0aW9uIChNZXRhZGF0YUtleSwgTywgUCkge1xuICB2YXIgaGFzT3duID0gb3JkaW5hcnlIYXNPd25NZXRhZGF0YShNZXRhZGF0YUtleSwgTywgUCk7XG4gIGlmIChoYXNPd24pIHJldHVybiBvcmRpbmFyeUdldE93bk1ldGFkYXRhKE1ldGFkYXRhS2V5LCBPLCBQKTtcbiAgdmFyIHBhcmVudCA9IGdldFByb3RvdHlwZU9mKE8pO1xuICByZXR1cm4gcGFyZW50ICE9PSBudWxsID8gb3JkaW5hcnlHZXRNZXRhZGF0YShNZXRhZGF0YUtleSwgcGFyZW50LCBQKSA6IHVuZGVmaW5lZDtcbn07XG5cbm1ldGFkYXRhLmV4cCh7IGdldE1ldGFkYXRhOiBmdW5jdGlvbiBnZXRNZXRhZGF0YShtZXRhZGF0YUtleSwgdGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gIHJldHVybiBvcmRpbmFyeUdldE1ldGFkYXRhKG1ldGFkYXRhS2V5LCBhbk9iamVjdCh0YXJnZXQpLCBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHVuZGVmaW5lZCA6IHRvTWV0YUtleShhcmd1bWVudHNbMl0pKTtcbn0gfSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///317\n")},function(module,exports,__webpack_require__){eval("var Set = __webpack_require__(119);\nvar from = __webpack_require__(128);\nvar metadata = __webpack_require__(28);\nvar anObject = __webpack_require__(1);\nvar getPrototypeOf = __webpack_require__(17);\nvar ordinaryOwnMetadataKeys = metadata.keys;\nvar toMetaKey = metadata.key;\n\nvar ordinaryMetadataKeys = function (O, P) {\n var oKeys = ordinaryOwnMetadataKeys(O, P);\n var parent = getPrototypeOf(O);\n if (parent === null) return oKeys;\n var pKeys = ordinaryMetadataKeys(parent, P);\n return pKeys.length ? oKeys.length ? from(new Set(oKeys.concat(pKeys))) : pKeys : oKeys;\n};\n\nmetadata.exp({ getMetadataKeys: function getMetadataKeys(target /* , targetKey */) {\n return ordinaryMetadataKeys(anObject(target), arguments.length < 2 ? undefined : toMetaKey(arguments[1]));\n} });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtbWV0YWRhdGEta2V5cy5qcz9iODBiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFVBQVUsbUJBQU8sQ0FBQyxHQUFXO0FBQzdCLFdBQVcsbUJBQU8sQ0FBQyxHQUF3QjtBQUMzQyxlQUFlLG1CQUFPLENBQUMsRUFBYTtBQUNwQyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxxQkFBcUIsbUJBQU8sQ0FBQyxFQUFlO0FBQzVDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsY0FBYztBQUNkO0FBQ0EsQ0FBQyxFQUFFIiwiZmlsZSI6IjMxOC5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBTZXQgPSByZXF1aXJlKCcuL2VzNi5zZXQnKTtcbnZhciBmcm9tID0gcmVxdWlyZSgnLi9fYXJyYXktZnJvbS1pdGVyYWJsZScpO1xudmFyIG1ldGFkYXRhID0gcmVxdWlyZSgnLi9fbWV0YWRhdGEnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIG9yZGluYXJ5T3duTWV0YWRhdGFLZXlzID0gbWV0YWRhdGEua2V5cztcbnZhciB0b01ldGFLZXkgPSBtZXRhZGF0YS5rZXk7XG5cbnZhciBvcmRpbmFyeU1ldGFkYXRhS2V5cyA9IGZ1bmN0aW9uIChPLCBQKSB7XG4gIHZhciBvS2V5cyA9IG9yZGluYXJ5T3duTWV0YWRhdGFLZXlzKE8sIFApO1xuICB2YXIgcGFyZW50ID0gZ2V0UHJvdG90eXBlT2YoTyk7XG4gIGlmIChwYXJlbnQgPT09IG51bGwpIHJldHVybiBvS2V5cztcbiAgdmFyIHBLZXlzID0gb3JkaW5hcnlNZXRhZGF0YUtleXMocGFyZW50LCBQKTtcbiAgcmV0dXJuIHBLZXlzLmxlbmd0aCA/IG9LZXlzLmxlbmd0aCA/IGZyb20obmV3IFNldChvS2V5cy5jb25jYXQocEtleXMpKSkgOiBwS2V5cyA6IG9LZXlzO1xufTtcblxubWV0YWRhdGEuZXhwKHsgZ2V0TWV0YWRhdGFLZXlzOiBmdW5jdGlvbiBnZXRNZXRhZGF0YUtleXModGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gIHJldHVybiBvcmRpbmFyeU1ldGFkYXRhS2V5cyhhbk9iamVjdCh0YXJnZXQpLCBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IHVuZGVmaW5lZCA6IHRvTWV0YUtleShhcmd1bWVudHNbMV0pKTtcbn0gfSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///318\n")},function(module,exports,__webpack_require__){eval("var metadata = __webpack_require__(28);\nvar anObject = __webpack_require__(1);\nvar ordinaryGetOwnMetadata = metadata.get;\nvar toMetaKey = metadata.key;\n\nmetadata.exp({ getOwnMetadata: function getOwnMetadata(metadataKey, target /* , targetKey */) {\n return ordinaryGetOwnMetadata(metadataKey, anObject(target)\n , arguments.length < 3 ? undefined : toMetaKey(arguments[2]));\n} });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtb3duLW1ldGFkYXRhLmpzPzA2YTciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxtQkFBTyxDQUFDLEVBQWE7QUFDcEMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckM7QUFDQTs7QUFFQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBLENBQUMsRUFBRSIsImZpbGUiOiIzMTkuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgbWV0YWRhdGEgPSByZXF1aXJlKCcuL19tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgb3JkaW5hcnlHZXRPd25NZXRhZGF0YSA9IG1ldGFkYXRhLmdldDtcbnZhciB0b01ldGFLZXkgPSBtZXRhZGF0YS5rZXk7XG5cbm1ldGFkYXRhLmV4cCh7IGdldE93bk1ldGFkYXRhOiBmdW5jdGlvbiBnZXRPd25NZXRhZGF0YShtZXRhZGF0YUtleSwgdGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gIHJldHVybiBvcmRpbmFyeUdldE93bk1ldGFkYXRhKG1ldGFkYXRhS2V5LCBhbk9iamVjdCh0YXJnZXQpXG4gICAgLCBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHVuZGVmaW5lZCA6IHRvTWV0YUtleShhcmd1bWVudHNbMl0pKTtcbn0gfSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///319\n")},function(module,exports,__webpack_require__){eval("var metadata = __webpack_require__(28);\nvar anObject = __webpack_require__(1);\nvar ordinaryOwnMetadataKeys = metadata.keys;\nvar toMetaKey = metadata.key;\n\nmetadata.exp({ getOwnMetadataKeys: function getOwnMetadataKeys(target /* , targetKey */) {\n return ordinaryOwnMetadataKeys(anObject(target), arguments.length < 2 ? undefined : toMetaKey(arguments[1]));\n} });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtb3duLW1ldGFkYXRhLWtleXMuanM/N2NkZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxlQUFlLG1CQUFPLENBQUMsRUFBYTtBQUNwQyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQztBQUNBOztBQUVBLGNBQWM7QUFDZDtBQUNBLENBQUMsRUFBRSIsImZpbGUiOiIzMjAuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgbWV0YWRhdGEgPSByZXF1aXJlKCcuL19tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgb3JkaW5hcnlPd25NZXRhZGF0YUtleXMgPSBtZXRhZGF0YS5rZXlzO1xudmFyIHRvTWV0YUtleSA9IG1ldGFkYXRhLmtleTtcblxubWV0YWRhdGEuZXhwKHsgZ2V0T3duTWV0YWRhdGFLZXlzOiBmdW5jdGlvbiBnZXRPd25NZXRhZGF0YUtleXModGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gIHJldHVybiBvcmRpbmFyeU93bk1ldGFkYXRhS2V5cyhhbk9iamVjdCh0YXJnZXQpLCBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IHVuZGVmaW5lZCA6IHRvTWV0YUtleShhcmd1bWVudHNbMV0pKTtcbn0gfSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///320\n")},function(module,exports,__webpack_require__){eval("var metadata = __webpack_require__(28);\nvar anObject = __webpack_require__(1);\nvar getPrototypeOf = __webpack_require__(17);\nvar ordinaryHasOwnMetadata = metadata.has;\nvar toMetaKey = metadata.key;\n\nvar ordinaryHasMetadata = function (MetadataKey, O, P) {\n var hasOwn = ordinaryHasOwnMetadata(MetadataKey, O, P);\n if (hasOwn) return true;\n var parent = getPrototypeOf(O);\n return parent !== null ? ordinaryHasMetadata(MetadataKey, parent, P) : false;\n};\n\nmetadata.exp({ hasMetadata: function hasMetadata(metadataKey, target /* , targetKey */) {\n return ordinaryHasMetadata(metadataKey, anObject(target), arguments.length < 3 ? undefined : toMetaKey(arguments[2]));\n} });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5oYXMtbWV0YWRhdGEuanM/ODk2ZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxlQUFlLG1CQUFPLENBQUMsRUFBYTtBQUNwQyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxxQkFBcUIsbUJBQU8sQ0FBQyxFQUFlO0FBQzVDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGNBQWM7QUFDZDtBQUNBLENBQUMsRUFBRSIsImZpbGUiOiIzMjEuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgbWV0YWRhdGEgPSByZXF1aXJlKCcuL19tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgb3JkaW5hcnlIYXNPd25NZXRhZGF0YSA9IG1ldGFkYXRhLmhhcztcbnZhciB0b01ldGFLZXkgPSBtZXRhZGF0YS5rZXk7XG5cbnZhciBvcmRpbmFyeUhhc01ldGFkYXRhID0gZnVuY3Rpb24gKE1ldGFkYXRhS2V5LCBPLCBQKSB7XG4gIHZhciBoYXNPd24gPSBvcmRpbmFyeUhhc093bk1ldGFkYXRhKE1ldGFkYXRhS2V5LCBPLCBQKTtcbiAgaWYgKGhhc093bikgcmV0dXJuIHRydWU7XG4gIHZhciBwYXJlbnQgPSBnZXRQcm90b3R5cGVPZihPKTtcbiAgcmV0dXJuIHBhcmVudCAhPT0gbnVsbCA/IG9yZGluYXJ5SGFzTWV0YWRhdGEoTWV0YWRhdGFLZXksIHBhcmVudCwgUCkgOiBmYWxzZTtcbn07XG5cbm1ldGFkYXRhLmV4cCh7IGhhc01ldGFkYXRhOiBmdW5jdGlvbiBoYXNNZXRhZGF0YShtZXRhZGF0YUtleSwgdGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gIHJldHVybiBvcmRpbmFyeUhhc01ldGFkYXRhKG1ldGFkYXRhS2V5LCBhbk9iamVjdCh0YXJnZXQpLCBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHVuZGVmaW5lZCA6IHRvTWV0YUtleShhcmd1bWVudHNbMl0pKTtcbn0gfSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///321\n")},function(module,exports,__webpack_require__){eval("var metadata = __webpack_require__(28);\nvar anObject = __webpack_require__(1);\nvar ordinaryHasOwnMetadata = metadata.has;\nvar toMetaKey = metadata.key;\n\nmetadata.exp({ hasOwnMetadata: function hasOwnMetadata(metadataKey, target /* , targetKey */) {\n return ordinaryHasOwnMetadata(metadataKey, anObject(target)\n , arguments.length < 3 ? undefined : toMetaKey(arguments[2]));\n} });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5oYXMtb3duLW1ldGFkYXRhLmpzP2VjMzkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxtQkFBTyxDQUFDLEVBQWE7QUFDcEMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckM7QUFDQTs7QUFFQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBLENBQUMsRUFBRSIsImZpbGUiOiIzMjIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgbWV0YWRhdGEgPSByZXF1aXJlKCcuL19tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgb3JkaW5hcnlIYXNPd25NZXRhZGF0YSA9IG1ldGFkYXRhLmhhcztcbnZhciB0b01ldGFLZXkgPSBtZXRhZGF0YS5rZXk7XG5cbm1ldGFkYXRhLmV4cCh7IGhhc093bk1ldGFkYXRhOiBmdW5jdGlvbiBoYXNPd25NZXRhZGF0YShtZXRhZGF0YUtleSwgdGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gIHJldHVybiBvcmRpbmFyeUhhc093bk1ldGFkYXRhKG1ldGFkYXRhS2V5LCBhbk9iamVjdCh0YXJnZXQpXG4gICAgLCBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHVuZGVmaW5lZCA6IHRvTWV0YUtleShhcmd1bWVudHNbMl0pKTtcbn0gfSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///322\n")},function(module,exports,__webpack_require__){eval("var $metadata = __webpack_require__(28);\nvar anObject = __webpack_require__(1);\nvar aFunction = __webpack_require__(10);\nvar toMetaKey = $metadata.key;\nvar ordinaryDefineOwnMetadata = $metadata.set;\n\n$metadata.exp({ metadata: function metadata(metadataKey, metadataValue) {\n return function decorator(target, targetKey) {\n ordinaryDefineOwnMetadata(\n metadataKey, metadataValue,\n (targetKey !== undefined ? anObject : aFunction)(target),\n toMetaKey(targetKey)\n );\n };\n} });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5tZXRhZGF0YS5qcz8zYTljIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGdCQUFnQixtQkFBTyxDQUFDLEVBQWE7QUFDckMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2QztBQUNBOztBQUVBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsRUFBRSIsImZpbGUiOiIzMjMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgJG1ldGFkYXRhID0gcmVxdWlyZSgnLi9fbWV0YWRhdGEnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciB0b01ldGFLZXkgPSAkbWV0YWRhdGEua2V5O1xudmFyIG9yZGluYXJ5RGVmaW5lT3duTWV0YWRhdGEgPSAkbWV0YWRhdGEuc2V0O1xuXG4kbWV0YWRhdGEuZXhwKHsgbWV0YWRhdGE6IGZ1bmN0aW9uIG1ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbiBkZWNvcmF0b3IodGFyZ2V0LCB0YXJnZXRLZXkpIHtcbiAgICBvcmRpbmFyeURlZmluZU93bk1ldGFkYXRhKFxuICAgICAgbWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUsXG4gICAgICAodGFyZ2V0S2V5ICE9PSB1bmRlZmluZWQgPyBhbk9iamVjdCA6IGFGdW5jdGlvbikodGFyZ2V0KSxcbiAgICAgIHRvTWV0YUtleSh0YXJnZXRLZXkpXG4gICAgKTtcbiAgfTtcbn0gfSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///323\n")},function(module,exports,__webpack_require__){eval("// https://github.com/rwaldron/tc39-notes/blob/master/es6/2014-09/sept-25.md#510-globalasap-for-enqueuing-a-microtask\nvar $export = __webpack_require__(0);\nvar microtask = __webpack_require__(90)();\nvar process = __webpack_require__(2).process;\nvar isNode = __webpack_require__(20)(process) == 'process';\n\n$export($export.G, {\n asap: function asap(fn) {\n var domain = isNode && process.domain;\n microtask(domain ? domain.bind(fn) : fn);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuYXNhcC5qcz8wZDI1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBYztBQUN0QyxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxhQUFhLG1CQUFPLENBQUMsRUFBUTs7QUFFN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMzI0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXRodWIuY29tL3J3YWxkcm9uL3RjMzktbm90ZXMvYmxvYi9tYXN0ZXIvZXM2LzIwMTQtMDkvc2VwdC0yNS5tZCM1MTAtZ2xvYmFsYXNhcC1mb3ItZW5xdWV1aW5nLWEtbWljcm90YXNrXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIG1pY3JvdGFzayA9IHJlcXVpcmUoJy4vX21pY3JvdGFzaycpKCk7XG52YXIgcHJvY2VzcyA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLnByb2Nlc3M7XG52YXIgaXNOb2RlID0gcmVxdWlyZSgnLi9fY29mJykocHJvY2VzcykgPT0gJ3Byb2Nlc3MnO1xuXG4kZXhwb3J0KCRleHBvcnQuRywge1xuICBhc2FwOiBmdW5jdGlvbiBhc2FwKGZuKSB7XG4gICAgdmFyIGRvbWFpbiA9IGlzTm9kZSAmJiBwcm9jZXNzLmRvbWFpbjtcbiAgICBtaWNyb3Rhc2soZG9tYWluID8gZG9tYWluLmJpbmQoZm4pIDogZm4pO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///324\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// https://github.com/zenparsing/es-observable\nvar $export = __webpack_require__(0);\nvar global = __webpack_require__(2);\nvar core = __webpack_require__(18);\nvar microtask = __webpack_require__(90)();\nvar OBSERVABLE = __webpack_require__(5)('observable');\nvar aFunction = __webpack_require__(10);\nvar anObject = __webpack_require__(1);\nvar anInstance = __webpack_require__(39);\nvar redefineAll = __webpack_require__(41);\nvar hide = __webpack_require__(11);\nvar forOf = __webpack_require__(40);\nvar RETURN = forOf.RETURN;\n\nvar getMethod = function (fn) {\n return fn == null ? undefined : aFunction(fn);\n};\n\nvar cleanupSubscription = function (subscription) {\n var cleanup = subscription._c;\n if (cleanup) {\n subscription._c = undefined;\n cleanup();\n }\n};\n\nvar subscriptionClosed = function (subscription) {\n return subscription._o === undefined;\n};\n\nvar closeSubscription = function (subscription) {\n if (!subscriptionClosed(subscription)) {\n subscription._o = undefined;\n cleanupSubscription(subscription);\n }\n};\n\nvar Subscription = function (observer, subscriber) {\n anObject(observer);\n this._c = undefined;\n this._o = observer;\n observer = new SubscriptionObserver(this);\n try {\n var cleanup = subscriber(observer);\n var subscription = cleanup;\n if (cleanup != null) {\n if (typeof cleanup.unsubscribe === 'function') cleanup = function () { subscription.unsubscribe(); };\n else aFunction(cleanup);\n this._c = cleanup;\n }\n } catch (e) {\n observer.error(e);\n return;\n } if (subscriptionClosed(this)) cleanupSubscription(this);\n};\n\nSubscription.prototype = redefineAll({}, {\n unsubscribe: function unsubscribe() { closeSubscription(this); }\n});\n\nvar SubscriptionObserver = function (subscription) {\n this._s = subscription;\n};\n\nSubscriptionObserver.prototype = redefineAll({}, {\n next: function next(value) {\n var subscription = this._s;\n if (!subscriptionClosed(subscription)) {\n var observer = subscription._o;\n try {\n var m = getMethod(observer.next);\n if (m) return m.call(observer, value);\n } catch (e) {\n try {\n closeSubscription(subscription);\n } finally {\n throw e;\n }\n }\n }\n },\n error: function error(value) {\n var subscription = this._s;\n if (subscriptionClosed(subscription)) throw value;\n var observer = subscription._o;\n subscription._o = undefined;\n try {\n var m = getMethod(observer.error);\n if (!m) throw value;\n value = m.call(observer, value);\n } catch (e) {\n try {\n cleanupSubscription(subscription);\n } finally {\n throw e;\n }\n } cleanupSubscription(subscription);\n return value;\n },\n complete: function complete(value) {\n var subscription = this._s;\n if (!subscriptionClosed(subscription)) {\n var observer = subscription._o;\n subscription._o = undefined;\n try {\n var m = getMethod(observer.complete);\n value = m ? m.call(observer, value) : undefined;\n } catch (e) {\n try {\n cleanupSubscription(subscription);\n } finally {\n throw e;\n }\n } cleanupSubscription(subscription);\n return value;\n }\n }\n});\n\nvar $Observable = function Observable(subscriber) {\n anInstance(this, $Observable, 'Observable', '_f')._f = aFunction(subscriber);\n};\n\nredefineAll($Observable.prototype, {\n subscribe: function subscribe(observer) {\n return new Subscription(observer, this._f);\n },\n forEach: function forEach(fn) {\n var that = this;\n return new (core.Promise || global.Promise)(function (resolve, reject) {\n aFunction(fn);\n var subscription = that.subscribe({\n next: function (value) {\n try {\n return fn(value);\n } catch (e) {\n reject(e);\n subscription.unsubscribe();\n }\n },\n error: reject,\n complete: resolve\n });\n });\n }\n});\n\nredefineAll($Observable, {\n from: function from(x) {\n var C = typeof this === 'function' ? this : $Observable;\n var method = getMethod(anObject(x)[OBSERVABLE]);\n if (method) {\n var observable = anObject(method.call(x));\n return observable.constructor === C ? observable : new C(function (observer) {\n return observable.subscribe(observer);\n });\n }\n return new C(function (observer) {\n var done = false;\n microtask(function () {\n if (!done) {\n try {\n if (forOf(x, false, function (it) {\n observer.next(it);\n if (done) return RETURN;\n }) === RETURN) return;\n } catch (e) {\n if (done) throw e;\n observer.error(e);\n return;\n } observer.complete();\n }\n });\n return function () { done = true; };\n });\n },\n of: function of() {\n for (var i = 0, l = arguments.length, items = new Array(l); i < l;) items[i] = arguments[i++];\n return new (typeof this === 'function' ? this : $Observable)(function (observer) {\n var done = false;\n microtask(function () {\n if (!done) {\n for (var j = 0; j < items.length; ++j) {\n observer.next(items[j]);\n if (done) return;\n } observer.complete();\n }\n });\n return function () { done = true; };\n });\n }\n});\n\nhide($Observable.prototype, OBSERVABLE, function () { return this; });\n\n$export($export.G, { Observable: $Observable });\n\n__webpack_require__(38)('Observable');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JzZXJ2YWJsZS5qcz8zN2I1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxhQUFhLG1CQUFPLENBQUMsQ0FBVztBQUNoQyxXQUFXLG1CQUFPLENBQUMsRUFBUztBQUM1QixnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFjO0FBQ3RDLGlCQUFpQixtQkFBTyxDQUFDLENBQVE7QUFDakMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2QyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxpQkFBaUIsbUJBQU8sQ0FBQyxFQUFnQjtBQUN6QyxrQkFBa0IsbUJBQU8sQ0FBQyxFQUFpQjtBQUMzQyxXQUFXLG1CQUFPLENBQUMsRUFBUztBQUM1QixZQUFZLG1CQUFPLENBQUMsRUFBVztBQUMvQjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0RUFBNEUsNEJBQTRCO0FBQ3hHO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBLHVDQUF1QztBQUN2Qyx1Q0FBdUMseUJBQXlCO0FBQ2hFLENBQUM7O0FBRUQ7QUFDQTtBQUNBOztBQUVBLCtDQUErQztBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYixXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0EsT0FBTztBQUNQLDBCQUEwQixhQUFhO0FBQ3ZDLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQSwrREFBK0QsT0FBTztBQUN0RTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QixrQkFBa0I7QUFDM0M7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBLE9BQU87QUFDUCwwQkFBMEIsYUFBYTtBQUN2QyxLQUFLO0FBQ0w7QUFDQSxDQUFDOztBQUVELHFEQUFxRCxhQUFhLEVBQUU7O0FBRXBFLG9CQUFvQiwwQkFBMEI7O0FBRTlDLG1CQUFPLENBQUMsRUFBZ0IiLCJmaWxlIjoiMzI1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3plbnBhcnNpbmcvZXMtb2JzZXJ2YWJsZVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIG1pY3JvdGFzayA9IHJlcXVpcmUoJy4vX21pY3JvdGFzaycpKCk7XG52YXIgT0JTRVJWQUJMRSA9IHJlcXVpcmUoJy4vX3drcycpKCdvYnNlcnZhYmxlJyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG52YXIgcmVkZWZpbmVBbGwgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIGZvck9mID0gcmVxdWlyZSgnLi9fZm9yLW9mJyk7XG52YXIgUkVUVVJOID0gZm9yT2YuUkVUVVJOO1xuXG52YXIgZ2V0TWV0aG9kID0gZnVuY3Rpb24gKGZuKSB7XG4gIHJldHVybiBmbiA9PSBudWxsID8gdW5kZWZpbmVkIDogYUZ1bmN0aW9uKGZuKTtcbn07XG5cbnZhciBjbGVhbnVwU3Vic2NyaXB0aW9uID0gZnVuY3Rpb24gKHN1YnNjcmlwdGlvbikge1xuICB2YXIgY2xlYW51cCA9IHN1YnNjcmlwdGlvbi5fYztcbiAgaWYgKGNsZWFudXApIHtcbiAgICBzdWJzY3JpcHRpb24uX2MgPSB1bmRlZmluZWQ7XG4gICAgY2xlYW51cCgpO1xuICB9XG59O1xuXG52YXIgc3Vic2NyaXB0aW9uQ2xvc2VkID0gZnVuY3Rpb24gKHN1YnNjcmlwdGlvbikge1xuICByZXR1cm4gc3Vic2NyaXB0aW9uLl9vID09PSB1bmRlZmluZWQ7XG59O1xuXG52YXIgY2xvc2VTdWJzY3JpcHRpb24gPSBmdW5jdGlvbiAoc3Vic2NyaXB0aW9uKSB7XG4gIGlmICghc3Vic2NyaXB0aW9uQ2xvc2VkKHN1YnNjcmlwdGlvbikpIHtcbiAgICBzdWJzY3JpcHRpb24uX28gPSB1bmRlZmluZWQ7XG4gICAgY2xlYW51cFN1YnNjcmlwdGlvbihzdWJzY3JpcHRpb24pO1xuICB9XG59O1xuXG52YXIgU3Vic2NyaXB0aW9uID0gZnVuY3Rpb24gKG9ic2VydmVyLCBzdWJzY3JpYmVyKSB7XG4gIGFuT2JqZWN0KG9ic2VydmVyKTtcbiAgdGhpcy5fYyA9IHVuZGVmaW5lZDtcbiAgdGhpcy5fbyA9IG9ic2VydmVyO1xuICBvYnNlcnZlciA9IG5ldyBTdWJzY3JpcHRpb25PYnNlcnZlcih0aGlzKTtcbiAgdHJ5IHtcbiAgICB2YXIgY2xlYW51cCA9IHN1YnNjcmliZXIob2JzZXJ2ZXIpO1xuICAgIHZhciBzdWJzY3JpcHRpb24gPSBjbGVhbnVwO1xuICAgIGlmIChjbGVhbnVwICE9IG51bGwpIHtcbiAgICAgIGlmICh0eXBlb2YgY2xlYW51cC51bnN1YnNjcmliZSA9PT0gJ2Z1bmN0aW9uJykgY2xlYW51cCA9IGZ1bmN0aW9uICgpIHsgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7IH07XG4gICAgICBlbHNlIGFGdW5jdGlvbihjbGVhbnVwKTtcbiAgICAgIHRoaXMuX2MgPSBjbGVhbnVwO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIG9ic2VydmVyLmVycm9yKGUpO1xuICAgIHJldHVybjtcbiAgfSBpZiAoc3Vic2NyaXB0aW9uQ2xvc2VkKHRoaXMpKSBjbGVhbnVwU3Vic2NyaXB0aW9uKHRoaXMpO1xufTtcblxuU3Vic2NyaXB0aW9uLnByb3RvdHlwZSA9IHJlZGVmaW5lQWxsKHt9LCB7XG4gIHVuc3Vic2NyaWJlOiBmdW5jdGlvbiB1bnN1YnNjcmliZSgpIHsgY2xvc2VTdWJzY3JpcHRpb24odGhpcyk7IH1cbn0pO1xuXG52YXIgU3Vic2NyaXB0aW9uT2JzZXJ2ZXIgPSBmdW5jdGlvbiAoc3Vic2NyaXB0aW9uKSB7XG4gIHRoaXMuX3MgPSBzdWJzY3JpcHRpb247XG59O1xuXG5TdWJzY3JpcHRpb25PYnNlcnZlci5wcm90b3R5cGUgPSByZWRlZmluZUFsbCh7fSwge1xuICBuZXh0OiBmdW5jdGlvbiBuZXh0KHZhbHVlKSB7XG4gICAgdmFyIHN1YnNjcmlwdGlvbiA9IHRoaXMuX3M7XG4gICAgaWYgKCFzdWJzY3JpcHRpb25DbG9zZWQoc3Vic2NyaXB0aW9uKSkge1xuICAgICAgdmFyIG9ic2VydmVyID0gc3Vic2NyaXB0aW9uLl9vO1xuICAgICAgdHJ5IHtcbiAgICAgICAgdmFyIG0gPSBnZXRNZXRob2Qob2JzZXJ2ZXIubmV4dCk7XG4gICAgICAgIGlmIChtKSByZXR1cm4gbS5jYWxsKG9ic2VydmVyLCB2YWx1ZSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY2xvc2VTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LFxuICBlcnJvcjogZnVuY3Rpb24gZXJyb3IodmFsdWUpIHtcbiAgICB2YXIgc3Vic2NyaXB0aW9uID0gdGhpcy5fcztcbiAgICBpZiAoc3Vic2NyaXB0aW9uQ2xvc2VkKHN1YnNjcmlwdGlvbikpIHRocm93IHZhbHVlO1xuICAgIHZhciBvYnNlcnZlciA9IHN1YnNjcmlwdGlvbi5fbztcbiAgICBzdWJzY3JpcHRpb24uX28gPSB1bmRlZmluZWQ7XG4gICAgdHJ5IHtcbiAgICAgIHZhciBtID0gZ2V0TWV0aG9kKG9ic2VydmVyLmVycm9yKTtcbiAgICAgIGlmICghbSkgdGhyb3cgdmFsdWU7XG4gICAgICB2YWx1ZSA9IG0uY2FsbChvYnNlcnZlciwgdmFsdWUpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNsZWFudXBTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgfSBjbGVhbnVwU3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvbik7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9LFxuICBjb21wbGV0ZTogZnVuY3Rpb24gY29tcGxldGUodmFsdWUpIHtcbiAgICB2YXIgc3Vic2NyaXB0aW9uID0gdGhpcy5fcztcbiAgICBpZiAoIXN1YnNjcmlwdGlvbkNsb3NlZChzdWJzY3JpcHRpb24pKSB7XG4gICAgICB2YXIgb2JzZXJ2ZXIgPSBzdWJzY3JpcHRpb24uX287XG4gICAgICBzdWJzY3JpcHRpb24uX28gPSB1bmRlZmluZWQ7XG4gICAgICB0cnkge1xuICAgICAgICB2YXIgbSA9IGdldE1ldGhvZChvYnNlcnZlci5jb21wbGV0ZSk7XG4gICAgICAgIHZhbHVlID0gbSA/IG0uY2FsbChvYnNlcnZlciwgdmFsdWUpIDogdW5kZWZpbmVkO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNsZWFudXBTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICB9IGNsZWFudXBTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKTtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gIH1cbn0pO1xuXG52YXIgJE9ic2VydmFibGUgPSBmdW5jdGlvbiBPYnNlcnZhYmxlKHN1YnNjcmliZXIpIHtcbiAgYW5JbnN0YW5jZSh0aGlzLCAkT2JzZXJ2YWJsZSwgJ09ic2VydmFibGUnLCAnX2YnKS5fZiA9IGFGdW5jdGlvbihzdWJzY3JpYmVyKTtcbn07XG5cbnJlZGVmaW5lQWxsKCRPYnNlcnZhYmxlLnByb3RvdHlwZSwge1xuICBzdWJzY3JpYmU6IGZ1bmN0aW9uIHN1YnNjcmliZShvYnNlcnZlcikge1xuICAgIHJldHVybiBuZXcgU3Vic2NyaXB0aW9uKG9ic2VydmVyLCB0aGlzLl9mKTtcbiAgfSxcbiAgZm9yRWFjaDogZnVuY3Rpb24gZm9yRWFjaChmbikge1xuICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICByZXR1cm4gbmV3IChjb3JlLlByb21pc2UgfHwgZ2xvYmFsLlByb21pc2UpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIGFGdW5jdGlvbihmbik7XG4gICAgICB2YXIgc3Vic2NyaXB0aW9uID0gdGhhdC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIGZuKHZhbHVlKTtcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgICBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiByZWplY3QsXG4gICAgICAgIGNvbXBsZXRlOiByZXNvbHZlXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxufSk7XG5cbnJlZGVmaW5lQWxsKCRPYnNlcnZhYmxlLCB7XG4gIGZyb206IGZ1bmN0aW9uIGZyb20oeCkge1xuICAgIHZhciBDID0gdHlwZW9mIHRoaXMgPT09ICdmdW5jdGlvbicgPyB0aGlzIDogJE9ic2VydmFibGU7XG4gICAgdmFyIG1ldGhvZCA9IGdldE1ldGhvZChhbk9iamVjdCh4KVtPQlNFUlZBQkxFXSk7XG4gICAgaWYgKG1ldGhvZCkge1xuICAgICAgdmFyIG9ic2VydmFibGUgPSBhbk9iamVjdChtZXRob2QuY2FsbCh4KSk7XG4gICAgICByZXR1cm4gb2JzZXJ2YWJsZS5jb25zdHJ1Y3RvciA9PT0gQyA/IG9ic2VydmFibGUgOiBuZXcgQyhmdW5jdGlvbiAob2JzZXJ2ZXIpIHtcbiAgICAgICAgcmV0dXJuIG9ic2VydmFibGUuc3Vic2NyaWJlKG9ic2VydmVyKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IEMoZnVuY3Rpb24gKG9ic2VydmVyKSB7XG4gICAgICB2YXIgZG9uZSA9IGZhbHNlO1xuICAgICAgbWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCFkb25lKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChmb3JPZih4LCBmYWxzZSwgZnVuY3Rpb24gKGl0KSB7XG4gICAgICAgICAgICAgIG9ic2VydmVyLm5leHQoaXQpO1xuICAgICAgICAgICAgICBpZiAoZG9uZSkgcmV0dXJuIFJFVFVSTjtcbiAgICAgICAgICAgIH0pID09PSBSRVRVUk4pIHJldHVybjtcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBpZiAoZG9uZSkgdGhyb3cgZTtcbiAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKGUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH0gb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyBkb25lID0gdHJ1ZTsgfTtcbiAgICB9KTtcbiAgfSxcbiAgb2Y6IGZ1bmN0aW9uIG9mKCkge1xuICAgIGZvciAodmFyIGkgPSAwLCBsID0gYXJndW1lbnRzLmxlbmd0aCwgaXRlbXMgPSBuZXcgQXJyYXkobCk7IGkgPCBsOykgaXRlbXNbaV0gPSBhcmd1bWVudHNbaSsrXTtcbiAgICByZXR1cm4gbmV3ICh0eXBlb2YgdGhpcyA9PT0gJ2Z1bmN0aW9uJyA/IHRoaXMgOiAkT2JzZXJ2YWJsZSkoZnVuY3Rpb24gKG9ic2VydmVyKSB7XG4gICAgICB2YXIgZG9uZSA9IGZhbHNlO1xuICAgICAgbWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCFkb25lKSB7XG4gICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBpdGVtcy5sZW5ndGg7ICsraikge1xuICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChpdGVtc1tqXSk7XG4gICAgICAgICAgICBpZiAoZG9uZSkgcmV0dXJuO1xuICAgICAgICAgIH0gb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyBkb25lID0gdHJ1ZTsgfTtcbiAgICB9KTtcbiAgfVxufSk7XG5cbmhpZGUoJE9ic2VydmFibGUucHJvdG90eXBlLCBPQlNFUlZBQkxFLCBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9KTtcblxuJGV4cG9ydCgkZXhwb3J0LkcsIHsgT2JzZXJ2YWJsZTogJE9ic2VydmFibGUgfSk7XG5cbnJlcXVpcmUoJy4vX3NldC1zcGVjaWVzJykoJ09ic2VydmFibGUnKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///325\n")},function(module,exports,__webpack_require__){eval("// ie9- setTimeout & setInterval additional parameters fix\nvar global = __webpack_require__(2);\nvar $export = __webpack_require__(0);\nvar userAgent = __webpack_require__(60);\nvar slice = [].slice;\nvar MSIE = /MSIE .\\./.test(userAgent); // <- dirty ie9- check\nvar wrap = function (set) {\n return function (fn, time /* , ...args */) {\n var boundArgs = arguments.length > 2;\n var args = boundArgs ? slice.call(arguments, 2) : false;\n return set(boundArgs ? function () {\n // eslint-disable-next-line no-new-func\n (typeof fn == 'function' ? fn : Function(fn)).apply(this, args);\n } : fn, time);\n };\n};\n$export($export.G + $export.B + $export.F * MSIE, {\n setTimeout: wrap(global.setTimeout),\n setInterval: wrap(global.setInterval)\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy93ZWIudGltZXJzLmpzPzQ3OTUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxhQUFhLG1CQUFPLENBQUMsQ0FBVztBQUNoQyxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDO0FBQ0Esc0NBQXNDO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjMyNi5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGllOS0gc2V0VGltZW91dCAmIHNldEludGVydmFsIGFkZGl0aW9uYWwgcGFyYW1ldGVycyBmaXhcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi9fdXNlci1hZ2VudCcpO1xudmFyIHNsaWNlID0gW10uc2xpY2U7XG52YXIgTVNJRSA9IC9NU0lFIC5cXC4vLnRlc3QodXNlckFnZW50KTsgLy8gPC0gZGlydHkgaWU5LSBjaGVja1xudmFyIHdyYXAgPSBmdW5jdGlvbiAoc2V0KSB7XG4gIHJldHVybiBmdW5jdGlvbiAoZm4sIHRpbWUgLyogLCAuLi5hcmdzICovKSB7XG4gICAgdmFyIGJvdW5kQXJncyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyO1xuICAgIHZhciBhcmdzID0gYm91bmRBcmdzID8gc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpIDogZmFsc2U7XG4gICAgcmV0dXJuIHNldChib3VuZEFyZ3MgPyBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmNcbiAgICAgICh0eXBlb2YgZm4gPT0gJ2Z1bmN0aW9uJyA/IGZuIDogRnVuY3Rpb24oZm4pKS5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9IDogZm4sIHRpbWUpO1xuICB9O1xufTtcbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5CICsgJGV4cG9ydC5GICogTVNJRSwge1xuICBzZXRUaW1lb3V0OiB3cmFwKGdsb2JhbC5zZXRUaW1lb3V0KSxcbiAgc2V0SW50ZXJ2YWw6IHdyYXAoZ2xvYmFsLnNldEludGVydmFsKVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///326\n")},function(module,exports,__webpack_require__){eval("var $export = __webpack_require__(0);\nvar $task = __webpack_require__(89);\n$export($export.G + $export.B, {\n setImmediate: $task.set,\n clearImmediate: $task.clear\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy93ZWIuaW1tZWRpYXRlLmpzPzEzMGYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsWUFBWSxtQkFBTyxDQUFDLEVBQVM7QUFDN0I7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIzMjcuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICR0YXNrID0gcmVxdWlyZSgnLi9fdGFzaycpO1xuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LkIsIHtcbiAgc2V0SW1tZWRpYXRlOiAkdGFzay5zZXQsXG4gIGNsZWFySW1tZWRpYXRlOiAkdGFzay5jbGVhclxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///327\n")},function(module,exports,__webpack_require__){eval("var $iterators = __webpack_require__(86);\nvar getKeys = __webpack_require__(34);\nvar redefine = __webpack_require__(12);\nvar global = __webpack_require__(2);\nvar hide = __webpack_require__(11);\nvar Iterators = __webpack_require__(46);\nvar wks = __webpack_require__(5);\nvar ITERATOR = wks('iterator');\nvar TO_STRING_TAG = wks('toStringTag');\nvar ArrayValues = Iterators.Array;\n\nvar DOMIterables = {\n CSSRuleList: true, // TODO: Not spec compliant, should be false.\n CSSStyleDeclaration: false,\n CSSValueList: false,\n ClientRectList: false,\n DOMRectList: false,\n DOMStringList: false,\n DOMTokenList: true,\n DataTransferItemList: false,\n FileList: false,\n HTMLAllCollection: false,\n HTMLCollection: false,\n HTMLFormElement: false,\n HTMLSelectElement: false,\n MediaList: true, // TODO: Not spec compliant, should be false.\n MimeTypeArray: false,\n NamedNodeMap: false,\n NodeList: true,\n PaintRequestList: false,\n Plugin: false,\n PluginArray: false,\n SVGLengthList: false,\n SVGNumberList: false,\n SVGPathSegList: false,\n SVGPointList: false,\n SVGStringList: false,\n SVGTransformList: false,\n SourceBufferList: false,\n StyleSheetList: true, // TODO: Not spec compliant, should be false.\n TextTrackCueList: false,\n TextTrackList: false,\n TouchList: false\n};\n\nfor (var collections = getKeys(DOMIterables), i = 0; i < collections.length; i++) {\n var NAME = collections[i];\n var explicit = DOMIterables[NAME];\n var Collection = global[NAME];\n var proto = Collection && Collection.prototype;\n var key;\n if (proto) {\n if (!proto[ITERATOR]) hide(proto, ITERATOR, ArrayValues);\n if (!proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n Iterators[NAME] = ArrayValues;\n if (explicit) for (key in $iterators) if (!proto[key]) redefine(proto, key, $iterators[key], true);\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy93ZWIuZG9tLml0ZXJhYmxlLmpzP2FjNmEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsaUJBQWlCLG1CQUFPLENBQUMsRUFBc0I7QUFDL0MsY0FBYyxtQkFBTyxDQUFDLEVBQWdCO0FBQ3RDLGVBQWUsbUJBQU8sQ0FBQyxFQUFhO0FBQ3BDLGFBQWEsbUJBQU8sQ0FBQyxDQUFXO0FBQ2hDLFdBQVcsbUJBQU8sQ0FBQyxFQUFTO0FBQzVCLGdCQUFnQixtQkFBTyxDQUFDLEVBQWM7QUFDdEMsVUFBVSxtQkFBTyxDQUFDLENBQVE7QUFDMUI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxvREFBb0Qsd0JBQXdCO0FBQzVFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIzMjguanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgJGl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vZXM2LmFycmF5Lml0ZXJhdG9yJyk7XG52YXIgZ2V0S2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJyk7XG52YXIgd2tzID0gcmVxdWlyZSgnLi9fd2tzJyk7XG52YXIgSVRFUkFUT1IgPSB3a3MoJ2l0ZXJhdG9yJyk7XG52YXIgVE9fU1RSSU5HX1RBRyA9IHdrcygndG9TdHJpbmdUYWcnKTtcbnZhciBBcnJheVZhbHVlcyA9IEl0ZXJhdG9ycy5BcnJheTtcblxudmFyIERPTUl0ZXJhYmxlcyA9IHtcbiAgQ1NTUnVsZUxpc3Q6IHRydWUsIC8vIFRPRE86IE5vdCBzcGVjIGNvbXBsaWFudCwgc2hvdWxkIGJlIGZhbHNlLlxuICBDU1NTdHlsZURlY2xhcmF0aW9uOiBmYWxzZSxcbiAgQ1NTVmFsdWVMaXN0OiBmYWxzZSxcbiAgQ2xpZW50UmVjdExpc3Q6IGZhbHNlLFxuICBET01SZWN0TGlzdDogZmFsc2UsXG4gIERPTVN0cmluZ0xpc3Q6IGZhbHNlLFxuICBET01Ub2tlbkxpc3Q6IHRydWUsXG4gIERhdGFUcmFuc2Zlckl0ZW1MaXN0OiBmYWxzZSxcbiAgRmlsZUxpc3Q6IGZhbHNlLFxuICBIVE1MQWxsQ29sbGVjdGlvbjogZmFsc2UsXG4gIEhUTUxDb2xsZWN0aW9uOiBmYWxzZSxcbiAgSFRNTEZvcm1FbGVtZW50OiBmYWxzZSxcbiAgSFRNTFNlbGVjdEVsZW1lbnQ6IGZhbHNlLFxuICBNZWRpYUxpc3Q6IHRydWUsIC8vIFRPRE86IE5vdCBzcGVjIGNvbXBsaWFudCwgc2hvdWxkIGJlIGZhbHNlLlxuICBNaW1lVHlwZUFycmF5OiBmYWxzZSxcbiAgTmFtZWROb2RlTWFwOiBmYWxzZSxcbiAgTm9kZUxpc3Q6IHRydWUsXG4gIFBhaW50UmVxdWVzdExpc3Q6IGZhbHNlLFxuICBQbHVnaW46IGZhbHNlLFxuICBQbHVnaW5BcnJheTogZmFsc2UsXG4gIFNWR0xlbmd0aExpc3Q6IGZhbHNlLFxuICBTVkdOdW1iZXJMaXN0OiBmYWxzZSxcbiAgU1ZHUGF0aFNlZ0xpc3Q6IGZhbHNlLFxuICBTVkdQb2ludExpc3Q6IGZhbHNlLFxuICBTVkdTdHJpbmdMaXN0OiBmYWxzZSxcbiAgU1ZHVHJhbnNmb3JtTGlzdDogZmFsc2UsXG4gIFNvdXJjZUJ1ZmZlckxpc3Q6IGZhbHNlLFxuICBTdHlsZVNoZWV0TGlzdDogdHJ1ZSwgLy8gVE9ETzogTm90IHNwZWMgY29tcGxpYW50LCBzaG91bGQgYmUgZmFsc2UuXG4gIFRleHRUcmFja0N1ZUxpc3Q6IGZhbHNlLFxuICBUZXh0VHJhY2tMaXN0OiBmYWxzZSxcbiAgVG91Y2hMaXN0OiBmYWxzZVxufTtcblxuZm9yICh2YXIgY29sbGVjdGlvbnMgPSBnZXRLZXlzKERPTUl0ZXJhYmxlcyksIGkgPSAwOyBpIDwgY29sbGVjdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgdmFyIE5BTUUgPSBjb2xsZWN0aW9uc1tpXTtcbiAgdmFyIGV4cGxpY2l0ID0gRE9NSXRlcmFibGVzW05BTUVdO1xuICB2YXIgQ29sbGVjdGlvbiA9IGdsb2JhbFtOQU1FXTtcbiAgdmFyIHByb3RvID0gQ29sbGVjdGlvbiAmJiBDb2xsZWN0aW9uLnByb3RvdHlwZTtcbiAgdmFyIGtleTtcbiAgaWYgKHByb3RvKSB7XG4gICAgaWYgKCFwcm90b1tJVEVSQVRPUl0pIGhpZGUocHJvdG8sIElURVJBVE9SLCBBcnJheVZhbHVlcyk7XG4gICAgaWYgKCFwcm90b1tUT19TVFJJTkdfVEFHXSkgaGlkZShwcm90bywgVE9fU1RSSU5HX1RBRywgTkFNRSk7XG4gICAgSXRlcmF0b3JzW05BTUVdID0gQXJyYXlWYWx1ZXM7XG4gICAgaWYgKGV4cGxpY2l0KSBmb3IgKGtleSBpbiAkaXRlcmF0b3JzKSBpZiAoIXByb3RvW2tleV0pIHJlZGVmaW5lKHByb3RvLCBrZXksICRpdGVyYXRvcnNba2V5XSwgdHJ1ZSk7XG4gIH1cbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///328\n")},function(module,exports,__webpack_require__){eval('/* WEBPACK VAR INJECTION */(function(global) {/**\n * Copyright (c) 2014, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * https://raw.github.com/facebook/regenerator/master/LICENSE file. An\n * additional grant of patent rights can be found in the PATENTS file in\n * the same directory.\n */\n\n!(function(global) {\n "use strict";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === "function" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || "@@iterator";\n var asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator";\n var toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag";\n\n var inModule = typeof module === "object";\n var runtime = global.regeneratorRuntime;\n if (runtime) {\n if (inModule) {\n // If regeneratorRuntime is defined globally and we\'re in a module,\n // make the exports object identical to regeneratorRuntime.\n module.exports = runtime;\n }\n // Don\'t bother evaluating the rest of this file if the runtime was\n // already defined globally.\n return;\n }\n\n // Define the runtime globally (as expected by generated code) as either\n // module.exports (if we\'re in a module) or a new, empty object.\n runtime = global.regeneratorRuntime = inModule ? module.exports : {};\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n runtime.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there\'s no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don\'t have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: "normal", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: "throw", arg: err };\n }\n }\n\n var GenStateSuspendedStart = "suspendedStart";\n var GenStateSuspendedYield = "suspendedYield";\n var GenStateExecuting = "executing";\n var GenStateCompleted = "completed";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don\'t natively support it.\n var IteratorPrototype = {};\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunctionPrototype[toStringTagSymbol] =\n GeneratorFunction.displayName = "GeneratorFunction";\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n ["next", "throw", "return"].forEach(function(method) {\n prototype[method] = function(arg) {\n return this._invoke(method, arg);\n };\n });\n }\n\n runtime.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === "function" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === "GeneratorFunction"\n : false;\n };\n\n runtime.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n if (!(toStringTagSymbol in genFun)) {\n genFun[toStringTagSymbol] = "GeneratorFunction";\n }\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, "__await")` to determine if the yielded value is\n // meant to be awaited.\n runtime.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === "throw") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === "object" &&\n hasOwn.call(value, "__await")) {\n return Promise.resolve(value.__await).then(function(value) {\n invoke("next", value, resolve, reject);\n }, function(err) {\n invoke("throw", err, resolve, reject);\n });\n }\n\n return Promise.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration. If the Promise is rejected, however, the\n // result for this iteration will be rejected with the same\n // reason. Note that rejections of yielded Promises are not\n // thrown back into the generator function, as is the case\n // when an awaited Promise is rejected. This difference in\n // behavior between yield and await is important, because it\n // allows the consumer to decide what to do with the yielded\n // rejection (swallow it and continue, manually .throw it back\n // into the generator, abandon iteration, whatever). With\n // await, by contrast, there is no opportunity to examine the\n // rejection reason outside the generator function, so the\n // only option is to throw it from the await expression, and\n // let the generator function handle the exception.\n result.value = unwrapped;\n resolve(result);\n }, reject);\n }\n }\n\n if (typeof global.process === "object" && global.process.domain) {\n invoke = global.process.domain.bind(invoke);\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new Promise(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n runtime.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n runtime.async = function(innerFn, outerFn, self, tryLocsList) {\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList)\n );\n\n return runtime.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error("Generator is already running");\n }\n\n if (state === GenStateCompleted) {\n if (method === "throw") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === "next") {\n // Setting context._sent for legacy support of Babel\'s\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === "throw") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === "return") {\n context.abrupt("return", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === "normal") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === "throw") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = "throw";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === "throw") {\n if (delegate.iterator.return) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = "return";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === "throw") {\n // If maybeInvokeDelegate(context) changed context.method from\n // "return" to "throw", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = "throw";\n context.arg = new TypeError(\n "The iterator does not provide a \'throw\' method");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === "throw") {\n context.method = "throw";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = "throw";\n context.arg = new TypeError("iterator result is not an object");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was "throw" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was "next", forget context.arg since it has been\n // "consumed" by the delegate iterator. If context.method was\n // "return", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== "return") {\n context.method = "next";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n Gp[toStringTagSymbol] = "Generator";\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers\' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn\'t happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return "[object Generator]";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = "normal";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: "root" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n runtime.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === "function") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n runtime.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel\'s\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = "next";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === "t" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === "throw") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = "throw";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = "next";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === "root") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle("end");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, "catchLoc");\n var hasFinally = hasOwn.call(entry, "finallyLoc");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error("try statement without catch or finally");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, "finallyLoc") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === "break" ||\n type === "continue") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = "next";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === "throw") {\n throw record.arg;\n }\n\n if (record.type === "break" ||\n record.type === "continue") {\n this.next = record.arg;\n } else if (record.type === "return") {\n this.rval = this.arg = record.arg;\n this.method = "return";\n this.next = "end";\n } else if (record.type === "normal" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n "catch": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === "throw") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error("illegal catch attempt");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === "next") {\n // Deliberately forget the last sent value so that we don\'t\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n})(\n // Among the various tricks for obtaining a reference to the global\n // object, this seems to be the most reliable technique that does not\n // use indirect eval (which violates Content Security Policy).\n typeof global === "object" ? global :\n typeof window === "object" ? window :\n typeof self === "object" ? self : this\n);\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(93)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9yZWdlbmVyYXRvci1ydW50aW1lL3J1bnRpbWUuanM/ZjNhMiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZCxLQUFLO0FBQ0wsY0FBYztBQUNkO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseURBQXlEO0FBQ3pEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBLFdBQVc7QUFDWDs7QUFFQTtBQUNBO0FBQ0Esd0NBQXdDLFdBQVc7QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDJCQUEyQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLFNBQVM7QUFDVDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esb0NBQW9DLGNBQWM7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlDQUFpQyxrQkFBa0I7QUFDbkQ7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGlCQUFpQjs7QUFFakI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLGlCQUFpQjtBQUN6QztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFlBQVk7QUFDWjtBQUNBOztBQUVBO0FBQ0EsWUFBWTtBQUNaOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsOENBQThDLFFBQVE7QUFDdEQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBOztBQUVBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7O0FBRUEsV0FBVztBQUNYO0FBQ0E7QUFDQTs7QUFFQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0EsOENBQThDLFFBQVE7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQSw4Q0FBOEMsUUFBUTtBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQSw4Q0FBOEMsUUFBUTtBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIzMjkuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxNCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBodHRwczovL3Jhdy5naXRodWIuY29tL2ZhY2Vib29rL3JlZ2VuZXJhdG9yL21hc3Rlci9MSUNFTlNFIGZpbGUuIEFuXG4gKiBhZGRpdGlvbmFsIGdyYW50IG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW5cbiAqIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqL1xuXG4hKGZ1bmN0aW9uKGdsb2JhbCkge1xuICBcInVzZSBzdHJpY3RcIjtcblxuICB2YXIgT3AgPSBPYmplY3QucHJvdG90eXBlO1xuICB2YXIgaGFzT3duID0gT3AuaGFzT3duUHJvcGVydHk7XG4gIHZhciB1bmRlZmluZWQ7IC8vIE1vcmUgY29tcHJlc3NpYmxlIHRoYW4gdm9pZCAwLlxuICB2YXIgJFN5bWJvbCA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiA/IFN5bWJvbCA6IHt9O1xuICB2YXIgaXRlcmF0b3JTeW1ib2wgPSAkU3ltYm9sLml0ZXJhdG9yIHx8IFwiQEBpdGVyYXRvclwiO1xuICB2YXIgYXN5bmNJdGVyYXRvclN5bWJvbCA9ICRTeW1ib2wuYXN5bmNJdGVyYXRvciB8fCBcIkBAYXN5bmNJdGVyYXRvclwiO1xuICB2YXIgdG9TdHJpbmdUYWdTeW1ib2wgPSAkU3ltYm9sLnRvU3RyaW5nVGFnIHx8IFwiQEB0b1N0cmluZ1RhZ1wiO1xuXG4gIHZhciBpbk1vZHVsZSA9IHR5cGVvZiBtb2R1bGUgPT09IFwib2JqZWN0XCI7XG4gIHZhciBydW50aW1lID0gZ2xvYmFsLnJlZ2VuZXJhdG9yUnVudGltZTtcbiAgaWYgKHJ1bnRpbWUpIHtcbiAgICBpZiAoaW5Nb2R1bGUpIHtcbiAgICAgIC8vIElmIHJlZ2VuZXJhdG9yUnVudGltZSBpcyBkZWZpbmVkIGdsb2JhbGx5IGFuZCB3ZSdyZSBpbiBhIG1vZHVsZSxcbiAgICAgIC8vIG1ha2UgdGhlIGV4cG9ydHMgb2JqZWN0IGlkZW50aWNhbCB0byByZWdlbmVyYXRvclJ1bnRpbWUuXG4gICAgICBtb2R1bGUuZXhwb3J0cyA9IHJ1bnRpbWU7XG4gICAgfVxuICAgIC8vIERvbid0IGJvdGhlciBldmFsdWF0aW5nIHRoZSByZXN0IG9mIHRoaXMgZmlsZSBpZiB0aGUgcnVudGltZSB3YXNcbiAgICAvLyBhbHJlYWR5IGRlZmluZWQgZ2xvYmFsbHkuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gRGVmaW5lIHRoZSBydW50aW1lIGdsb2JhbGx5IChhcyBleHBlY3RlZCBieSBnZW5lcmF0ZWQgY29kZSkgYXMgZWl0aGVyXG4gIC8vIG1vZHVsZS5leHBvcnRzIChpZiB3ZSdyZSBpbiBhIG1vZHVsZSkgb3IgYSBuZXcsIGVtcHR5IG9iamVjdC5cbiAgcnVudGltZSA9IGdsb2JhbC5yZWdlbmVyYXRvclJ1bnRpbWUgPSBpbk1vZHVsZSA/IG1vZHVsZS5leHBvcnRzIDoge307XG5cbiAgZnVuY3Rpb24gd3JhcChpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdCkge1xuICAgIC8vIElmIG91dGVyRm4gcHJvdmlkZWQgYW5kIG91dGVyRm4ucHJvdG90eXBlIGlzIGEgR2VuZXJhdG9yLCB0aGVuIG91dGVyRm4ucHJvdG90eXBlIGluc3RhbmNlb2YgR2VuZXJhdG9yLlxuICAgIHZhciBwcm90b0dlbmVyYXRvciA9IG91dGVyRm4gJiYgb3V0ZXJGbi5wcm90b3R5cGUgaW5zdGFuY2VvZiBHZW5lcmF0b3IgPyBvdXRlckZuIDogR2VuZXJhdG9yO1xuICAgIHZhciBnZW5lcmF0b3IgPSBPYmplY3QuY3JlYXRlKHByb3RvR2VuZXJhdG9yLnByb3RvdHlwZSk7XG4gICAgdmFyIGNvbnRleHQgPSBuZXcgQ29udGV4dCh0cnlMb2NzTGlzdCB8fCBbXSk7XG5cbiAgICAvLyBUaGUgLl9pbnZva2UgbWV0aG9kIHVuaWZpZXMgdGhlIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgLm5leHQsXG4gICAgLy8gLnRocm93LCBhbmQgLnJldHVybiBtZXRob2RzLlxuICAgIGdlbmVyYXRvci5faW52b2tlID0gbWFrZUludm9rZU1ldGhvZChpbm5lckZuLCBzZWxmLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBnZW5lcmF0b3I7XG4gIH1cbiAgcnVudGltZS53cmFwID0gd3JhcDtcblxuICAvLyBUcnkvY2F0Y2ggaGVscGVyIHRvIG1pbmltaXplIGRlb3B0aW1pemF0aW9ucy4gUmV0dXJucyBhIGNvbXBsZXRpb25cbiAgLy8gcmVjb3JkIGxpa2UgY29udGV4dC50cnlFbnRyaWVzW2ldLmNvbXBsZXRpb24uIFRoaXMgaW50ZXJmYWNlIGNvdWxkXG4gIC8vIGhhdmUgYmVlbiAoYW5kIHdhcyBwcmV2aW91c2x5KSBkZXNpZ25lZCB0byB0YWtlIGEgY2xvc3VyZSB0byBiZVxuICAvLyBpbnZva2VkIHdpdGhvdXQgYXJndW1lbnRzLCBidXQgaW4gYWxsIHRoZSBjYXNlcyB3ZSBjYXJlIGFib3V0IHdlXG4gIC8vIGFscmVhZHkgaGF2ZSBhbiBleGlzdGluZyBtZXRob2Qgd2Ugd2FudCB0byBjYWxsLCBzbyB0aGVyZSdzIG5vIG5lZWRcbiAgLy8gdG8gY3JlYXRlIGEgbmV3IGZ1bmN0aW9uIG9iamVjdC4gV2UgY2FuIGV2ZW4gZ2V0IGF3YXkgd2l0aCBhc3N1bWluZ1xuICAvLyB0aGUgbWV0aG9kIHRha2VzIGV4YWN0bHkgb25lIGFyZ3VtZW50LCBzaW5jZSB0aGF0IGhhcHBlbnMgdG8gYmUgdHJ1ZVxuICAvLyBpbiBldmVyeSBjYXNlLCBzbyB3ZSBkb24ndCBoYXZlIHRvIHRvdWNoIHRoZSBhcmd1bWVudHMgb2JqZWN0LiBUaGVcbiAgLy8gb25seSBhZGRpdGlvbmFsIGFsbG9jYXRpb24gcmVxdWlyZWQgaXMgdGhlIGNvbXBsZXRpb24gcmVjb3JkLCB3aGljaFxuICAvLyBoYXMgYSBzdGFibGUgc2hhcGUgYW5kIHNvIGhvcGVmdWxseSBzaG91bGQgYmUgY2hlYXAgdG8gYWxsb2NhdGUuXG4gIGZ1bmN0aW9uIHRyeUNhdGNoKGZuLCBvYmosIGFyZykge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4geyB0eXBlOiBcIm5vcm1hbFwiLCBhcmc6IGZuLmNhbGwob2JqLCBhcmcpIH07XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICByZXR1cm4geyB0eXBlOiBcInRocm93XCIsIGFyZzogZXJyIH07XG4gICAgfVxuICB9XG5cbiAgdmFyIEdlblN0YXRlU3VzcGVuZGVkU3RhcnQgPSBcInN1c3BlbmRlZFN0YXJ0XCI7XG4gIHZhciBHZW5TdGF0ZVN1c3BlbmRlZFlpZWxkID0gXCJzdXNwZW5kZWRZaWVsZFwiO1xuICB2YXIgR2VuU3RhdGVFeGVjdXRpbmcgPSBcImV4ZWN1dGluZ1wiO1xuICB2YXIgR2VuU3RhdGVDb21wbGV0ZWQgPSBcImNvbXBsZXRlZFwiO1xuXG4gIC8vIFJldHVybmluZyB0aGlzIG9iamVjdCBmcm9tIHRoZSBpbm5lckZuIGhhcyB0aGUgc2FtZSBlZmZlY3QgYXNcbiAgLy8gYnJlYWtpbmcgb3V0IG9mIHRoZSBkaXNwYXRjaCBzd2l0Y2ggc3RhdGVtZW50LlxuICB2YXIgQ29udGludWVTZW50aW5lbCA9IHt9O1xuXG4gIC8vIER1bW15IGNvbnN0cnVjdG9yIGZ1bmN0aW9ucyB0aGF0IHdlIHVzZSBhcyB0aGUgLmNvbnN0cnVjdG9yIGFuZFxuICAvLyAuY29uc3RydWN0b3IucHJvdG90eXBlIHByb3BlcnRpZXMgZm9yIGZ1bmN0aW9ucyB0aGF0IHJldHVybiBHZW5lcmF0b3JcbiAgLy8gb2JqZWN0cy4gRm9yIGZ1bGwgc3BlYyBjb21wbGlhbmNlLCB5b3UgbWF5IHdpc2ggdG8gY29uZmlndXJlIHlvdXJcbiAgLy8gbWluaWZpZXIgbm90IHRvIG1hbmdsZSB0aGUgbmFtZXMgb2YgdGhlc2UgdHdvIGZ1bmN0aW9ucy5cbiAgZnVuY3Rpb24gR2VuZXJhdG9yKCkge31cbiAgZnVuY3Rpb24gR2VuZXJhdG9yRnVuY3Rpb24oKSB7fVxuICBmdW5jdGlvbiBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSgpIHt9XG5cbiAgLy8gVGhpcyBpcyBhIHBvbHlmaWxsIGZvciAlSXRlcmF0b3JQcm90b3R5cGUlIGZvciBlbnZpcm9ubWVudHMgdGhhdFxuICAvLyBkb24ndCBuYXRpdmVseSBzdXBwb3J0IGl0LlxuICB2YXIgSXRlcmF0b3JQcm90b3R5cGUgPSB7fTtcbiAgSXRlcmF0b3JQcm90b3R5cGVbaXRlcmF0b3JTeW1ib2xdID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIHZhciBnZXRQcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZjtcbiAgdmFyIE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlID0gZ2V0UHJvdG8gJiYgZ2V0UHJvdG8oZ2V0UHJvdG8odmFsdWVzKFtdKSkpO1xuICBpZiAoTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUgJiZcbiAgICAgIE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlICE9PSBPcCAmJlxuICAgICAgaGFzT3duLmNhbGwoTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUsIGl0ZXJhdG9yU3ltYm9sKSkge1xuICAgIC8vIFRoaXMgZW52aXJvbm1lbnQgaGFzIGEgbmF0aXZlICVJdGVyYXRvclByb3RvdHlwZSU7IHVzZSBpdCBpbnN0ZWFkXG4gICAgLy8gb2YgdGhlIHBvbHlmaWxsLlxuICAgIEl0ZXJhdG9yUHJvdG90eXBlID0gTmF0aXZlSXRlcmF0b3JQcm90b3R5cGU7XG4gIH1cblxuICB2YXIgR3AgPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZS5wcm90b3R5cGUgPVxuICAgIEdlbmVyYXRvci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEl0ZXJhdG9yUHJvdG90eXBlKTtcbiAgR2VuZXJhdG9yRnVuY3Rpb24ucHJvdG90eXBlID0gR3AuY29uc3RydWN0b3IgPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZTtcbiAgR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUuY29uc3RydWN0b3IgPSBHZW5lcmF0b3JGdW5jdGlvbjtcbiAgR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGVbdG9TdHJpbmdUYWdTeW1ib2xdID1cbiAgICBHZW5lcmF0b3JGdW5jdGlvbi5kaXNwbGF5TmFtZSA9IFwiR2VuZXJhdG9yRnVuY3Rpb25cIjtcblxuICAvLyBIZWxwZXIgZm9yIGRlZmluaW5nIHRoZSAubmV4dCwgLnRocm93LCBhbmQgLnJldHVybiBtZXRob2RzIG9mIHRoZVxuICAvLyBJdGVyYXRvciBpbnRlcmZhY2UgaW4gdGVybXMgb2YgYSBzaW5nbGUgLl9pbnZva2UgbWV0aG9kLlxuICBmdW5jdGlvbiBkZWZpbmVJdGVyYXRvck1ldGhvZHMocHJvdG90eXBlKSB7XG4gICAgW1wibmV4dFwiLCBcInRocm93XCIsIFwicmV0dXJuXCJdLmZvckVhY2goZnVuY3Rpb24obWV0aG9kKSB7XG4gICAgICBwcm90b3R5cGVbbWV0aG9kXSA9IGZ1bmN0aW9uKGFyZykge1xuICAgICAgICByZXR1cm4gdGhpcy5faW52b2tlKG1ldGhvZCwgYXJnKTtcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBydW50aW1lLmlzR2VuZXJhdG9yRnVuY3Rpb24gPSBmdW5jdGlvbihnZW5GdW4pIHtcbiAgICB2YXIgY3RvciA9IHR5cGVvZiBnZW5GdW4gPT09IFwiZnVuY3Rpb25cIiAmJiBnZW5GdW4uY29uc3RydWN0b3I7XG4gICAgcmV0dXJuIGN0b3JcbiAgICAgID8gY3RvciA9PT0gR2VuZXJhdG9yRnVuY3Rpb24gfHxcbiAgICAgICAgLy8gRm9yIHRoZSBuYXRpdmUgR2VuZXJhdG9yRnVuY3Rpb24gY29uc3RydWN0b3IsIHRoZSBiZXN0IHdlIGNhblxuICAgICAgICAvLyBkbyBpcyB0byBjaGVjayBpdHMgLm5hbWUgcHJvcGVydHkuXG4gICAgICAgIChjdG9yLmRpc3BsYXlOYW1lIHx8IGN0b3IubmFtZSkgPT09IFwiR2VuZXJhdG9yRnVuY3Rpb25cIlxuICAgICAgOiBmYWxzZTtcbiAgfTtcblxuICBydW50aW1lLm1hcmsgPSBmdW5jdGlvbihnZW5GdW4pIHtcbiAgICBpZiAoT2JqZWN0LnNldFByb3RvdHlwZU9mKSB7XG4gICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YoZ2VuRnVuLCBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGdlbkZ1bi5fX3Byb3RvX18gPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZTtcbiAgICAgIGlmICghKHRvU3RyaW5nVGFnU3ltYm9sIGluIGdlbkZ1bikpIHtcbiAgICAgICAgZ2VuRnVuW3RvU3RyaW5nVGFnU3ltYm9sXSA9IFwiR2VuZXJhdG9yRnVuY3Rpb25cIjtcbiAgICAgIH1cbiAgICB9XG4gICAgZ2VuRnVuLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoR3ApO1xuICAgIHJldHVybiBnZW5GdW47XG4gIH07XG5cbiAgLy8gV2l0aGluIHRoZSBib2R5IG9mIGFueSBhc3luYyBmdW5jdGlvbiwgYGF3YWl0IHhgIGlzIHRyYW5zZm9ybWVkIHRvXG4gIC8vIGB5aWVsZCByZWdlbmVyYXRvclJ1bnRpbWUuYXdyYXAoeClgLCBzbyB0aGF0IHRoZSBydW50aW1lIGNhbiB0ZXN0XG4gIC8vIGBoYXNPd24uY2FsbCh2YWx1ZSwgXCJfX2F3YWl0XCIpYCB0byBkZXRlcm1pbmUgaWYgdGhlIHlpZWxkZWQgdmFsdWUgaXNcbiAgLy8gbWVhbnQgdG8gYmUgYXdhaXRlZC5cbiAgcnVudGltZS5hd3JhcCA9IGZ1bmN0aW9uKGFyZykge1xuICAgIHJldHVybiB7IF9fYXdhaXQ6IGFyZyB9O1xuICB9O1xuXG4gIGZ1bmN0aW9uIEFzeW5jSXRlcmF0b3IoZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gaW52b2tlKG1ldGhvZCwgYXJnLCByZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChnZW5lcmF0b3JbbWV0aG9kXSwgZ2VuZXJhdG9yLCBhcmcpO1xuICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgcmVqZWN0KHJlY29yZC5hcmcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHJlY29yZC5hcmc7XG4gICAgICAgIHZhciB2YWx1ZSA9IHJlc3VsdC52YWx1ZTtcbiAgICAgICAgaWYgKHZhbHVlICYmXG4gICAgICAgICAgICB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgICAgIGhhc093bi5jYWxsKHZhbHVlLCBcIl9fYXdhaXRcIikpIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHZhbHVlLl9fYXdhaXQpLnRoZW4oZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgICAgIGludm9rZShcIm5leHRcIiwgdmFsdWUsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgfSwgZnVuY3Rpb24oZXJyKSB7XG4gICAgICAgICAgICBpbnZva2UoXCJ0aHJvd1wiLCBlcnIsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHZhbHVlKS50aGVuKGZ1bmN0aW9uKHVud3JhcHBlZCkge1xuICAgICAgICAgIC8vIFdoZW4gYSB5aWVsZGVkIFByb21pc2UgaXMgcmVzb2x2ZWQsIGl0cyBmaW5hbCB2YWx1ZSBiZWNvbWVzXG4gICAgICAgICAgLy8gdGhlIC52YWx1ZSBvZiB0aGUgUHJvbWlzZTx7dmFsdWUsZG9uZX0+IHJlc3VsdCBmb3IgdGhlXG4gICAgICAgICAgLy8gY3VycmVudCBpdGVyYXRpb24uIElmIHRoZSBQcm9taXNlIGlzIHJlamVjdGVkLCBob3dldmVyLCB0aGVcbiAgICAgICAgICAvLyByZXN1bHQgZm9yIHRoaXMgaXRlcmF0aW9uIHdpbGwgYmUgcmVqZWN0ZWQgd2l0aCB0aGUgc2FtZVxuICAgICAgICAgIC8vIHJlYXNvbi4gTm90ZSB0aGF0IHJlamVjdGlvbnMgb2YgeWllbGRlZCBQcm9taXNlcyBhcmUgbm90XG4gICAgICAgICAgLy8gdGhyb3duIGJhY2sgaW50byB0aGUgZ2VuZXJhdG9yIGZ1bmN0aW9uLCBhcyBpcyB0aGUgY2FzZVxuICAgICAgICAgIC8vIHdoZW4gYW4gYXdhaXRlZCBQcm9taXNlIGlzIHJlamVjdGVkLiBUaGlzIGRpZmZlcmVuY2UgaW5cbiAgICAgICAgICAvLyBiZWhhdmlvciBiZXR3ZWVuIHlpZWxkIGFuZCBhd2FpdCBpcyBpbXBvcnRhbnQsIGJlY2F1c2UgaXRcbiAgICAgICAgICAvLyBhbGxvd3MgdGhlIGNvbnN1bWVyIHRvIGRlY2lkZSB3aGF0IHRvIGRvIHdpdGggdGhlIHlpZWxkZWRcbiAgICAgICAgICAvLyByZWplY3Rpb24gKHN3YWxsb3cgaXQgYW5kIGNvbnRpbnVlLCBtYW51YWxseSAudGhyb3cgaXQgYmFja1xuICAgICAgICAgIC8vIGludG8gdGhlIGdlbmVyYXRvciwgYWJhbmRvbiBpdGVyYXRpb24sIHdoYXRldmVyKS4gV2l0aFxuICAgICAgICAgIC8vIGF3YWl0LCBieSBjb250cmFzdCwgdGhlcmUgaXMgbm8gb3Bwb3J0dW5pdHkgdG8gZXhhbWluZSB0aGVcbiAgICAgICAgICAvLyByZWplY3Rpb24gcmVhc29uIG91dHNpZGUgdGhlIGdlbmVyYXRvciBmdW5jdGlvbiwgc28gdGhlXG4gICAgICAgICAgLy8gb25seSBvcHRpb24gaXMgdG8gdGhyb3cgaXQgZnJvbSB0aGUgYXdhaXQgZXhwcmVzc2lvbiwgYW5kXG4gICAgICAgICAgLy8gbGV0IHRoZSBnZW5lcmF0b3IgZnVuY3Rpb24gaGFuZGxlIHRoZSBleGNlcHRpb24uXG4gICAgICAgICAgcmVzdWx0LnZhbHVlID0gdW53cmFwcGVkO1xuICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgfSwgcmVqZWN0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGdsb2JhbC5wcm9jZXNzID09PSBcIm9iamVjdFwiICYmIGdsb2JhbC5wcm9jZXNzLmRvbWFpbikge1xuICAgICAgaW52b2tlID0gZ2xvYmFsLnByb2Nlc3MuZG9tYWluLmJpbmQoaW52b2tlKTtcbiAgICB9XG5cbiAgICB2YXIgcHJldmlvdXNQcm9taXNlO1xuXG4gICAgZnVuY3Rpb24gZW5xdWV1ZShtZXRob2QsIGFyZykge1xuICAgICAgZnVuY3Rpb24gY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICBpbnZva2UobWV0aG9kLCBhcmcsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcHJldmlvdXNQcm9taXNlID1cbiAgICAgICAgLy8gSWYgZW5xdWV1ZSBoYXMgYmVlbiBjYWxsZWQgYmVmb3JlLCB0aGVuIHdlIHdhbnQgdG8gd2FpdCB1bnRpbFxuICAgICAgICAvLyBhbGwgcHJldmlvdXMgUHJvbWlzZXMgaGF2ZSBiZWVuIHJlc29sdmVkIGJlZm9yZSBjYWxsaW5nIGludm9rZSxcbiAgICAgICAgLy8gc28gdGhhdCByZXN1bHRzIGFyZSBhbHdheXMgZGVsaXZlcmVkIGluIHRoZSBjb3JyZWN0IG9yZGVyLiBJZlxuICAgICAgICAvLyBlbnF1ZXVlIGhhcyBub3QgYmVlbiBjYWxsZWQgYmVmb3JlLCB0aGVuIGl0IGlzIGltcG9ydGFudCB0b1xuICAgICAgICAvLyBjYWxsIGludm9rZSBpbW1lZGlhdGVseSwgd2l0aG91dCB3YWl0aW5nIG9uIGEgY2FsbGJhY2sgdG8gZmlyZSxcbiAgICAgICAgLy8gc28gdGhhdCB0aGUgYXN5bmMgZ2VuZXJhdG9yIGZ1bmN0aW9uIGhhcyB0aGUgb3Bwb3J0dW5pdHkgdG8gZG9cbiAgICAgICAgLy8gYW55IG5lY2Vzc2FyeSBzZXR1cCBpbiBhIHByZWRpY3RhYmxlIHdheS4gVGhpcyBwcmVkaWN0YWJpbGl0eVxuICAgICAgICAvLyBpcyB3aHkgdGhlIFByb21pc2UgY29uc3RydWN0b3Igc3luY2hyb25vdXNseSBpbnZva2VzIGl0c1xuICAgICAgICAvLyBleGVjdXRvciBjYWxsYmFjaywgYW5kIHdoeSBhc3luYyBmdW5jdGlvbnMgc3luY2hyb25vdXNseVxuICAgICAgICAvLyBleGVjdXRlIGNvZGUgYmVmb3JlIHRoZSBmaXJzdCBhd2FpdC4gU2luY2Ugd2UgaW1wbGVtZW50IHNpbXBsZVxuICAgICAgICAvLyBhc3luYyBmdW5jdGlvbnMgaW4gdGVybXMgb2YgYXN5bmMgZ2VuZXJhdG9ycywgaXQgaXMgZXNwZWNpYWxseVxuICAgICAgICAvLyBpbXBvcnRhbnQgdG8gZ2V0IHRoaXMgcmlnaHQsIGV2ZW4gdGhvdWdoIGl0IHJlcXVpcmVzIGNhcmUuXG4gICAgICAgIHByZXZpb3VzUHJvbWlzZSA/IHByZXZpb3VzUHJvbWlzZS50aGVuKFxuICAgICAgICAgIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnLFxuICAgICAgICAgIC8vIEF2b2lkIHByb3BhZ2F0aW5nIGZhaWx1cmVzIHRvIFByb21pc2VzIHJldHVybmVkIGJ5IGxhdGVyXG4gICAgICAgICAgLy8gaW52b2NhdGlvbnMgb2YgdGhlIGl0ZXJhdG9yLlxuICAgICAgICAgIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnXG4gICAgICAgICkgOiBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZygpO1xuICAgIH1cblxuICAgIC8vIERlZmluZSB0aGUgdW5pZmllZCBoZWxwZXIgbWV0aG9kIHRoYXQgaXMgdXNlZCB0byBpbXBsZW1lbnQgLm5leHQsXG4gICAgLy8gLnRocm93LCBhbmQgLnJldHVybiAoc2VlIGRlZmluZUl0ZXJhdG9yTWV0aG9kcykuXG4gICAgdGhpcy5faW52b2tlID0gZW5xdWV1ZTtcbiAgfVxuXG4gIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhBc3luY0l0ZXJhdG9yLnByb3RvdHlwZSk7XG4gIEFzeW5jSXRlcmF0b3IucHJvdG90eXBlW2FzeW5jSXRlcmF0b3JTeW1ib2xdID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICBydW50aW1lLkFzeW5jSXRlcmF0b3IgPSBBc3luY0l0ZXJhdG9yO1xuXG4gIC8vIE5vdGUgdGhhdCBzaW1wbGUgYXN5bmMgZnVuY3Rpb25zIGFyZSBpbXBsZW1lbnRlZCBvbiB0b3Agb2ZcbiAgLy8gQXN5bmNJdGVyYXRvciBvYmplY3RzOyB0aGV5IGp1c3QgcmV0dXJuIGEgUHJvbWlzZSBmb3IgdGhlIHZhbHVlIG9mXG4gIC8vIHRoZSBmaW5hbCByZXN1bHQgcHJvZHVjZWQgYnkgdGhlIGl0ZXJhdG9yLlxuICBydW50aW1lLmFzeW5jID0gZnVuY3Rpb24oaW5uZXJGbiwgb3V0ZXJGbiwgc2VsZiwgdHJ5TG9jc0xpc3QpIHtcbiAgICB2YXIgaXRlciA9IG5ldyBBc3luY0l0ZXJhdG9yKFxuICAgICAgd3JhcChpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdClcbiAgICApO1xuXG4gICAgcmV0dXJuIHJ1bnRpbWUuaXNHZW5lcmF0b3JGdW5jdGlvbihvdXRlckZuKVxuICAgICAgPyBpdGVyIC8vIElmIG91dGVyRm4gaXMgYSBnZW5lcmF0b3IsIHJldHVybiB0aGUgZnVsbCBpdGVyYXRvci5cbiAgICAgIDogaXRlci5uZXh0KCkudGhlbihmdW5jdGlvbihyZXN1bHQpIHtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0LmRvbmUgPyByZXN1bHQudmFsdWUgOiBpdGVyLm5leHQoKTtcbiAgICAgICAgfSk7XG4gIH07XG5cbiAgZnVuY3Rpb24gbWFrZUludm9rZU1ldGhvZChpbm5lckZuLCBzZWxmLCBjb250ZXh0KSB7XG4gICAgdmFyIHN0YXRlID0gR2VuU3RhdGVTdXNwZW5kZWRTdGFydDtcblxuICAgIHJldHVybiBmdW5jdGlvbiBpbnZva2UobWV0aG9kLCBhcmcpIHtcbiAgICAgIGlmIChzdGF0ZSA9PT0gR2VuU3RhdGVFeGVjdXRpbmcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgcnVubmluZ1wiKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHN0YXRlID09PSBHZW5TdGF0ZUNvbXBsZXRlZCkge1xuICAgICAgICBpZiAobWV0aG9kID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICB0aHJvdyBhcmc7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBCZSBmb3JnaXZpbmcsIHBlciAyNS4zLjMuMy4zIG9mIHRoZSBzcGVjOlxuICAgICAgICAvLyBodHRwczovL3Blb3BsZS5tb3ppbGxhLm9yZy9+am9yZW5kb3JmZi9lczYtZHJhZnQuaHRtbCNzZWMtZ2VuZXJhdG9ycmVzdW1lXG4gICAgICAgIHJldHVybiBkb25lUmVzdWx0KCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnRleHQubWV0aG9kID0gbWV0aG9kO1xuICAgICAgY29udGV4dC5hcmcgPSBhcmc7XG5cbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIHZhciBkZWxlZ2F0ZSA9IGNvbnRleHQuZGVsZWdhdGU7XG4gICAgICAgIGlmIChkZWxlZ2F0ZSkge1xuICAgICAgICAgIHZhciBkZWxlZ2F0ZVJlc3VsdCA9IG1heWJlSW52b2tlRGVsZWdhdGUoZGVsZWdhdGUsIGNvbnRleHQpO1xuICAgICAgICAgIGlmIChkZWxlZ2F0ZVJlc3VsdCkge1xuICAgICAgICAgICAgaWYgKGRlbGVnYXRlUmVzdWx0ID09PSBDb250aW51ZVNlbnRpbmVsKSBjb250aW51ZTtcbiAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZVJlc3VsdDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29udGV4dC5tZXRob2QgPT09IFwibmV4dFwiKSB7XG4gICAgICAgICAgLy8gU2V0dGluZyBjb250ZXh0Ll9zZW50IGZvciBsZWdhY3kgc3VwcG9ydCBvZiBCYWJlbCdzXG4gICAgICAgICAgLy8gZnVuY3Rpb24uc2VudCBpbXBsZW1lbnRhdGlvbi5cbiAgICAgICAgICBjb250ZXh0LnNlbnQgPSBjb250ZXh0Ll9zZW50ID0gY29udGV4dC5hcmc7XG5cbiAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgaWYgKHN0YXRlID09PSBHZW5TdGF0ZVN1c3BlbmRlZFN0YXJ0KSB7XG4gICAgICAgICAgICBzdGF0ZSA9IEdlblN0YXRlQ29tcGxldGVkO1xuICAgICAgICAgICAgdGhyb3cgY29udGV4dC5hcmc7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29udGV4dC5kaXNwYXRjaEV4Y2VwdGlvbihjb250ZXh0LmFyZyk7XG5cbiAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJyZXR1cm5cIikge1xuICAgICAgICAgIGNvbnRleHQuYWJydXB0KFwicmV0dXJuXCIsIGNvbnRleHQuYXJnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN0YXRlID0gR2VuU3RhdGVFeGVjdXRpbmc7XG5cbiAgICAgICAgdmFyIHJlY29yZCA9IHRyeUNhdGNoKGlubmVyRm4sIHNlbGYsIGNvbnRleHQpO1xuICAgICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwibm9ybWFsXCIpIHtcbiAgICAgICAgICAvLyBJZiBhbiBleGNlcHRpb24gaXMgdGhyb3duIGZyb20gaW5uZXJGbiwgd2UgbGVhdmUgc3RhdGUgPT09XG4gICAgICAgICAgLy8gR2VuU3RhdGVFeGVjdXRpbmcgYW5kIGxvb3AgYmFjayBmb3IgYW5vdGhlciBpbnZvY2F0aW9uLlxuICAgICAgICAgIHN0YXRlID0gY29udGV4dC5kb25lXG4gICAgICAgICAgICA/IEdlblN0YXRlQ29tcGxldGVkXG4gICAgICAgICAgICA6IEdlblN0YXRlU3VzcGVuZGVkWWllbGQ7XG5cbiAgICAgICAgICBpZiAocmVjb3JkLmFyZyA9PT0gQ29udGludWVTZW50aW5lbCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHZhbHVlOiByZWNvcmQuYXJnLFxuICAgICAgICAgICAgZG9uZTogY29udGV4dC5kb25lXG4gICAgICAgICAgfTtcblxuICAgICAgICB9IGVsc2UgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICBzdGF0ZSA9IEdlblN0YXRlQ29tcGxldGVkO1xuICAgICAgICAgIC8vIERpc3BhdGNoIHRoZSBleGNlcHRpb24gYnkgbG9vcGluZyBiYWNrIGFyb3VuZCB0byB0aGVcbiAgICAgICAgICAvLyBjb250ZXh0LmRpc3BhdGNoRXhjZXB0aW9uKGNvbnRleHQuYXJnKSBjYWxsIGFib3ZlLlxuICAgICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiO1xuICAgICAgICAgIGNvbnRleHQuYXJnID0gcmVjb3JkLmFyZztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICAvLyBDYWxsIGRlbGVnYXRlLml0ZXJhdG9yW2NvbnRleHQubWV0aG9kXShjb250ZXh0LmFyZykgYW5kIGhhbmRsZSB0aGVcbiAgLy8gcmVzdWx0LCBlaXRoZXIgYnkgcmV0dXJuaW5nIGEgeyB2YWx1ZSwgZG9uZSB9IHJlc3VsdCBmcm9tIHRoZVxuICAvLyBkZWxlZ2F0ZSBpdGVyYXRvciwgb3IgYnkgbW9kaWZ5aW5nIGNvbnRleHQubWV0aG9kIGFuZCBjb250ZXh0LmFyZyxcbiAgLy8gc2V0dGluZyBjb250ZXh0LmRlbGVnYXRlIHRvIG51bGwsIGFuZCByZXR1cm5pbmcgdGhlIENvbnRpbnVlU2VudGluZWwuXG4gIGZ1bmN0aW9uIG1heWJlSW52b2tlRGVsZWdhdGUoZGVsZWdhdGUsIGNvbnRleHQpIHtcbiAgICB2YXIgbWV0aG9kID0gZGVsZWdhdGUuaXRlcmF0b3JbY29udGV4dC5tZXRob2RdO1xuICAgIGlmIChtZXRob2QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gQSAudGhyb3cgb3IgLnJldHVybiB3aGVuIHRoZSBkZWxlZ2F0ZSBpdGVyYXRvciBoYXMgbm8gLnRocm93XG4gICAgICAvLyBtZXRob2QgYWx3YXlzIHRlcm1pbmF0ZXMgdGhlIHlpZWxkKiBsb29wLlxuICAgICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG5cbiAgICAgIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIGlmIChkZWxlZ2F0ZS5pdGVyYXRvci5yZXR1cm4pIHtcbiAgICAgICAgICAvLyBJZiB0aGUgZGVsZWdhdGUgaXRlcmF0b3IgaGFzIGEgcmV0dXJuIG1ldGhvZCwgZ2l2ZSBpdCBhXG4gICAgICAgICAgLy8gY2hhbmNlIHRvIGNsZWFuIHVwLlxuICAgICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJyZXR1cm5cIjtcbiAgICAgICAgICBjb250ZXh0LmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICBtYXliZUludm9rZURlbGVnYXRlKGRlbGVnYXRlLCBjb250ZXh0KTtcblxuICAgICAgICAgIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgICAvLyBJZiBtYXliZUludm9rZURlbGVnYXRlKGNvbnRleHQpIGNoYW5nZWQgY29udGV4dC5tZXRob2QgZnJvbVxuICAgICAgICAgICAgLy8gXCJyZXR1cm5cIiB0byBcInRocm93XCIsIGxldCB0aGF0IG92ZXJyaWRlIHRoZSBUeXBlRXJyb3IgYmVsb3cuXG4gICAgICAgICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIjtcbiAgICAgICAgY29udGV4dC5hcmcgPSBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgIFwiVGhlIGl0ZXJhdG9yIGRvZXMgbm90IHByb3ZpZGUgYSAndGhyb3cnIG1ldGhvZFwiKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuXG4gICAgdmFyIHJlY29yZCA9IHRyeUNhdGNoKG1ldGhvZCwgZGVsZWdhdGUuaXRlcmF0b3IsIGNvbnRleHQuYXJnKTtcblxuICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICBjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIjtcbiAgICAgIGNvbnRleHQuYXJnID0gcmVjb3JkLmFyZztcbiAgICAgIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsO1xuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuXG4gICAgdmFyIGluZm8gPSByZWNvcmQuYXJnO1xuXG4gICAgaWYgKCEgaW5mbykge1xuICAgICAgY29udGV4dC5tZXRob2QgPSBcInRocm93XCI7XG4gICAgICBjb250ZXh0LmFyZyA9IG5ldyBUeXBlRXJyb3IoXCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdFwiKTtcbiAgICAgIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsO1xuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuXG4gICAgaWYgKGluZm8uZG9uZSkge1xuICAgICAgLy8gQXNzaWduIHRoZSByZXN1bHQgb2YgdGhlIGZpbmlzaGVkIGRlbGVnYXRlIHRvIHRoZSB0ZW1wb3JhcnlcbiAgICAgIC8vIHZhcmlhYmxlIHNwZWNpZmllZCBieSBkZWxlZ2F0ZS5yZXN1bHROYW1lIChzZWUgZGVsZWdhdGVZaWVsZCkuXG4gICAgICBjb250ZXh0W2RlbGVnYXRlLnJlc3VsdE5hbWVdID0gaW5mby52YWx1ZTtcblxuICAgICAgLy8gUmVzdW1lIGV4ZWN1dGlvbiBhdCB0aGUgZGVzaXJlZCBsb2NhdGlvbiAoc2VlIGRlbGVnYXRlWWllbGQpLlxuICAgICAgY29udGV4dC5uZXh0ID0gZGVsZWdhdGUubmV4dExvYztcblxuICAgICAgLy8gSWYgY29udGV4dC5tZXRob2Qgd2FzIFwidGhyb3dcIiBidXQgdGhlIGRlbGVnYXRlIGhhbmRsZWQgdGhlXG4gICAgICAvLyBleGNlcHRpb24sIGxldCB0aGUgb3V0ZXIgZ2VuZXJhdG9yIHByb2NlZWQgbm9ybWFsbHkuIElmXG4gICAgICAvLyBjb250ZXh0Lm1ldGhvZCB3YXMgXCJuZXh0XCIsIGZvcmdldCBjb250ZXh0LmFyZyBzaW5jZSBpdCBoYXMgYmVlblxuICAgICAgLy8gXCJjb25zdW1lZFwiIGJ5IHRoZSBkZWxlZ2F0ZSBpdGVyYXRvci4gSWYgY29udGV4dC5tZXRob2Qgd2FzXG4gICAgICAvLyBcInJldHVyblwiLCBhbGxvdyB0aGUgb3JpZ2luYWwgLnJldHVybiBjYWxsIHRvIGNvbnRpbnVlIGluIHRoZVxuICAgICAgLy8gb3V0ZXIgZ2VuZXJhdG9yLlxuICAgICAgaWYgKGNvbnRleHQubWV0aG9kICE9PSBcInJldHVyblwiKSB7XG4gICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJuZXh0XCI7XG4gICAgICAgIGNvbnRleHQuYXJnID0gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFJlLXlpZWxkIHRoZSByZXN1bHQgcmV0dXJuZWQgYnkgdGhlIGRlbGVnYXRlIG1ldGhvZC5cbiAgICAgIHJldHVybiBpbmZvO1xuICAgIH1cblxuICAgIC8vIFRoZSBkZWxlZ2F0ZSBpdGVyYXRvciBpcyBmaW5pc2hlZCwgc28gZm9yZ2V0IGl0IGFuZCBjb250aW51ZSB3aXRoXG4gICAgLy8gdGhlIG91dGVyIGdlbmVyYXRvci5cbiAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcbiAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgfVxuXG4gIC8vIERlZmluZSBHZW5lcmF0b3IucHJvdG90eXBlLntuZXh0LHRocm93LHJldHVybn0gaW4gdGVybXMgb2YgdGhlXG4gIC8vIHVuaWZpZWQgLl9pbnZva2UgaGVscGVyIG1ldGhvZC5cbiAgZGVmaW5lSXRlcmF0b3JNZXRob2RzKEdwKTtcblxuICBHcFt0b1N0cmluZ1RhZ1N5bWJvbF0gPSBcIkdlbmVyYXRvclwiO1xuXG4gIC8vIEEgR2VuZXJhdG9yIHNob3VsZCBhbHdheXMgcmV0dXJuIGl0c2VsZiBhcyB0aGUgaXRlcmF0b3Igb2JqZWN0IHdoZW4gdGhlXG4gIC8vIEBAaXRlcmF0b3IgZnVuY3Rpb24gaXMgY2FsbGVkIG9uIGl0LiBTb21lIGJyb3dzZXJzJyBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlXG4gIC8vIGl0ZXJhdG9yIHByb3RvdHlwZSBjaGFpbiBpbmNvcnJlY3RseSBpbXBsZW1lbnQgdGhpcywgY2F1c2luZyB0aGUgR2VuZXJhdG9yXG4gIC8vIG9iamVjdCB0byBub3QgYmUgcmV0dXJuZWQgZnJvbSB0aGlzIGNhbGwuIFRoaXMgZW5zdXJlcyB0aGF0IGRvZXNuJ3QgaGFwcGVuLlxuICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlZ2VuZXJhdG9yL2lzc3Vlcy8yNzQgZm9yIG1vcmUgZGV0YWlscy5cbiAgR3BbaXRlcmF0b3JTeW1ib2xdID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgR3AudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gXCJbb2JqZWN0IEdlbmVyYXRvcl1cIjtcbiAgfTtcblxuICBmdW5jdGlvbiBwdXNoVHJ5RW50cnkobG9jcykge1xuICAgIHZhciBlbnRyeSA9IHsgdHJ5TG9jOiBsb2NzWzBdIH07XG5cbiAgICBpZiAoMSBpbiBsb2NzKSB7XG4gICAgICBlbnRyeS5jYXRjaExvYyA9IGxvY3NbMV07XG4gICAgfVxuXG4gICAgaWYgKDIgaW4gbG9jcykge1xuICAgICAgZW50cnkuZmluYWxseUxvYyA9IGxvY3NbMl07XG4gICAgICBlbnRyeS5hZnRlckxvYyA9IGxvY3NbM107XG4gICAgfVxuXG4gICAgdGhpcy50cnlFbnRyaWVzLnB1c2goZW50cnkpO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVzZXRUcnlFbnRyeShlbnRyeSkge1xuICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uIHx8IHt9O1xuICAgIHJlY29yZC50eXBlID0gXCJub3JtYWxcIjtcbiAgICBkZWxldGUgcmVjb3JkLmFyZztcbiAgICBlbnRyeS5jb21wbGV0aW9uID0gcmVjb3JkO1xuICB9XG5cbiAgZnVuY3Rpb24gQ29udGV4dCh0cnlMb2NzTGlzdCkge1xuICAgIC8vIFRoZSByb290IGVudHJ5IG9iamVjdCAoZWZmZWN0aXZlbHkgYSB0cnkgc3RhdGVtZW50IHdpdGhvdXQgYSBjYXRjaFxuICAgIC8vIG9yIGEgZmluYWxseSBibG9jaykgZ2l2ZXMgdXMgYSBwbGFjZSB0byBzdG9yZSB2YWx1ZXMgdGhyb3duIGZyb21cbiAgICAvLyBsb2NhdGlvbnMgd2hlcmUgdGhlcmUgaXMgbm8gZW5jbG9zaW5nIHRyeSBzdGF0ZW1lbnQuXG4gICAgdGhpcy50cnlFbnRyaWVzID0gW3sgdHJ5TG9jOiBcInJvb3RcIiB9XTtcbiAgICB0cnlMb2NzTGlzdC5mb3JFYWNoKHB1c2hUcnlFbnRyeSwgdGhpcyk7XG4gICAgdGhpcy5yZXNldCh0cnVlKTtcbiAgfVxuXG4gIHJ1bnRpbWUua2V5cyA9IGZ1bmN0aW9uKG9iamVjdCkge1xuICAgIHZhciBrZXlzID0gW107XG4gICAgZm9yICh2YXIga2V5IGluIG9iamVjdCkge1xuICAgICAga2V5cy5wdXNoKGtleSk7XG4gICAgfVxuICAgIGtleXMucmV2ZXJzZSgpO1xuXG4gICAgLy8gUmF0aGVyIHRoYW4gcmV0dXJuaW5nIGFuIG9iamVjdCB3aXRoIGEgbmV4dCBtZXRob2QsIHdlIGtlZXBcbiAgICAvLyB0aGluZ3Mgc2ltcGxlIGFuZCByZXR1cm4gdGhlIG5leHQgZnVuY3Rpb24gaXRzZWxmLlxuICAgIHJldHVybiBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgd2hpbGUgKGtleXMubGVuZ3RoKSB7XG4gICAgICAgIHZhciBrZXkgPSBrZXlzLnBvcCgpO1xuICAgICAgICBpZiAoa2V5IGluIG9iamVjdCkge1xuICAgICAgICAgIG5leHQudmFsdWUgPSBrZXk7XG4gICAgICAgICAgbmV4dC5kb25lID0gZmFsc2U7XG4gICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gVG8gYXZvaWQgY3JlYXRpbmcgYW4gYWRkaXRpb25hbCBvYmplY3QsIHdlIGp1c3QgaGFuZyB0aGUgLnZhbHVlXG4gICAgICAvLyBhbmQgLmRvbmUgcHJvcGVydGllcyBvZmYgdGhlIG5leHQgZnVuY3Rpb24gb2JqZWN0IGl0c2VsZi4gVGhpc1xuICAgICAgLy8gYWxzbyBlbnN1cmVzIHRoYXQgdGhlIG1pbmlmaWVyIHdpbGwgbm90IGFub255bWl6ZSB0aGUgZnVuY3Rpb24uXG4gICAgICBuZXh0LmRvbmUgPSB0cnVlO1xuICAgICAgcmV0dXJuIG5leHQ7XG4gICAgfTtcbiAgfTtcblxuICBmdW5jdGlvbiB2YWx1ZXMoaXRlcmFibGUpIHtcbiAgICBpZiAoaXRlcmFibGUpIHtcbiAgICAgIHZhciBpdGVyYXRvck1ldGhvZCA9IGl0ZXJhYmxlW2l0ZXJhdG9yU3ltYm9sXTtcbiAgICAgIGlmIChpdGVyYXRvck1ldGhvZCkge1xuICAgICAgICByZXR1cm4gaXRlcmF0b3JNZXRob2QuY2FsbChpdGVyYWJsZSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgaXRlcmFibGUubmV4dCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHJldHVybiBpdGVyYWJsZTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFpc05hTihpdGVyYWJsZS5sZW5ndGgpKSB7XG4gICAgICAgIHZhciBpID0gLTEsIG5leHQgPSBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgIHdoaWxlICgrK2kgPCBpdGVyYWJsZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmIChoYXNPd24uY2FsbChpdGVyYWJsZSwgaSkpIHtcbiAgICAgICAgICAgICAgbmV4dC52YWx1ZSA9IGl0ZXJhYmxlW2ldO1xuICAgICAgICAgICAgICBuZXh0LmRvbmUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbmV4dC52YWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICBuZXh0LmRvbmUgPSB0cnVlO1xuXG4gICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIG5leHQubmV4dCA9IG5leHQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmV0dXJuIGFuIGl0ZXJhdG9yIHdpdGggbm8gdmFsdWVzLlxuICAgIHJldHVybiB7IG5leHQ6IGRvbmVSZXN1bHQgfTtcbiAgfVxuICBydW50aW1lLnZhbHVlcyA9IHZhbHVlcztcblxuICBmdW5jdGlvbiBkb25lUmVzdWx0KCkge1xuICAgIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfTtcbiAgfVxuXG4gIENvbnRleHQucHJvdG90eXBlID0ge1xuICAgIGNvbnN0cnVjdG9yOiBDb250ZXh0LFxuXG4gICAgcmVzZXQ6IGZ1bmN0aW9uKHNraXBUZW1wUmVzZXQpIHtcbiAgICAgIHRoaXMucHJldiA9IDA7XG4gICAgICB0aGlzLm5leHQgPSAwO1xuICAgICAgLy8gUmVzZXR0aW5nIGNvbnRleHQuX3NlbnQgZm9yIGxlZ2FjeSBzdXBwb3J0IG9mIEJhYmVsJ3NcbiAgICAgIC8vIGZ1bmN0aW9uLnNlbnQgaW1wbGVtZW50YXRpb24uXG4gICAgICB0aGlzLnNlbnQgPSB0aGlzLl9zZW50ID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5kb25lID0gZmFsc2U7XG4gICAgICB0aGlzLmRlbGVnYXRlID0gbnVsbDtcblxuICAgICAgdGhpcy5tZXRob2QgPSBcIm5leHRcIjtcbiAgICAgIHRoaXMuYXJnID0gdW5kZWZpbmVkO1xuXG4gICAgICB0aGlzLnRyeUVudHJpZXMuZm9yRWFjaChyZXNldFRyeUVudHJ5KTtcblxuICAgICAgaWYgKCFza2lwVGVtcFJlc2V0KSB7XG4gICAgICAgIGZvciAodmFyIG5hbWUgaW4gdGhpcykge1xuICAgICAgICAgIC8vIE5vdCBzdXJlIGFib3V0IHRoZSBvcHRpbWFsIG9yZGVyIG9mIHRoZXNlIGNvbmRpdGlvbnM6XG4gICAgICAgICAgaWYgKG5hbWUuY2hhckF0KDApID09PSBcInRcIiAmJlxuICAgICAgICAgICAgICBoYXNPd24uY2FsbCh0aGlzLCBuYW1lKSAmJlxuICAgICAgICAgICAgICAhaXNOYU4oK25hbWUuc2xpY2UoMSkpKSB7XG4gICAgICAgICAgICB0aGlzW25hbWVdID0gdW5kZWZpbmVkO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzdG9wOiBmdW5jdGlvbigpIHtcbiAgICAgIHRoaXMuZG9uZSA9IHRydWU7XG5cbiAgICAgIHZhciByb290RW50cnkgPSB0aGlzLnRyeUVudHJpZXNbMF07XG4gICAgICB2YXIgcm9vdFJlY29yZCA9IHJvb3RFbnRyeS5jb21wbGV0aW9uO1xuICAgICAgaWYgKHJvb3RSZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIHRocm93IHJvb3RSZWNvcmQuYXJnO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5ydmFsO1xuICAgIH0sXG5cbiAgICBkaXNwYXRjaEV4Y2VwdGlvbjogZnVuY3Rpb24oZXhjZXB0aW9uKSB7XG4gICAgICBpZiAodGhpcy5kb25lKSB7XG4gICAgICAgIHRocm93IGV4Y2VwdGlvbjtcbiAgICAgIH1cblxuICAgICAgdmFyIGNvbnRleHQgPSB0aGlzO1xuICAgICAgZnVuY3Rpb24gaGFuZGxlKGxvYywgY2F1Z2h0KSB7XG4gICAgICAgIHJlY29yZC50eXBlID0gXCJ0aHJvd1wiO1xuICAgICAgICByZWNvcmQuYXJnID0gZXhjZXB0aW9uO1xuICAgICAgICBjb250ZXh0Lm5leHQgPSBsb2M7XG5cbiAgICAgICAgaWYgKGNhdWdodCkge1xuICAgICAgICAgIC8vIElmIHRoZSBkaXNwYXRjaGVkIGV4Y2VwdGlvbiB3YXMgY2F1Z2h0IGJ5IGEgY2F0Y2ggYmxvY2ssXG4gICAgICAgICAgLy8gdGhlbiBsZXQgdGhhdCBjYXRjaCBibG9jayBoYW5kbGUgdGhlIGV4Y2VwdGlvbiBub3JtYWxseS5cbiAgICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgICAgIGNvbnRleHQuYXJnID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICEhIGNhdWdodDtcbiAgICAgIH1cblxuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uO1xuXG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPT09IFwicm9vdFwiKSB7XG4gICAgICAgICAgLy8gRXhjZXB0aW9uIHRocm93biBvdXRzaWRlIG9mIGFueSB0cnkgYmxvY2sgdGhhdCBjb3VsZCBoYW5kbGVcbiAgICAgICAgICAvLyBpdCwgc28gc2V0IHRoZSBjb21wbGV0aW9uIHZhbHVlIG9mIHRoZSBlbnRpcmUgZnVuY3Rpb24gdG9cbiAgICAgICAgICAvLyB0aHJvdyB0aGUgZXhjZXB0aW9uLlxuICAgICAgICAgIHJldHVybiBoYW5kbGUoXCJlbmRcIik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZW50cnkudHJ5TG9jIDw9IHRoaXMucHJldikge1xuICAgICAgICAgIHZhciBoYXNDYXRjaCA9IGhhc093bi5jYWxsKGVudHJ5LCBcImNhdGNoTG9jXCIpO1xuICAgICAgICAgIHZhciBoYXNGaW5hbGx5ID0gaGFzT3duLmNhbGwoZW50cnksIFwiZmluYWxseUxvY1wiKTtcblxuICAgICAgICAgIGlmIChoYXNDYXRjaCAmJiBoYXNGaW5hbGx5KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgZW50cnkuY2F0Y2hMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5jYXRjaExvYywgdHJ1ZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5maW5hbGx5TG9jKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0gZWxzZSBpZiAoaGFzQ2F0Y2gpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBlbnRyeS5jYXRjaExvYykge1xuICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlKGVudHJ5LmNhdGNoTG9jLCB0cnVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0gZWxzZSBpZiAoaGFzRmluYWxseSkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5maW5hbGx5TG9jKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ0cnkgc3RhdGVtZW50IHdpdGhvdXQgY2F0Y2ggb3IgZmluYWxseVwiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYWJydXB0OiBmdW5jdGlvbih0eXBlLCBhcmcpIHtcbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICBpZiAoZW50cnkudHJ5TG9jIDw9IHRoaXMucHJldiAmJlxuICAgICAgICAgICAgaGFzT3duLmNhbGwoZW50cnksIFwiZmluYWxseUxvY1wiKSAmJlxuICAgICAgICAgICAgdGhpcy5wcmV2IDwgZW50cnkuZmluYWxseUxvYykge1xuICAgICAgICAgIHZhciBmaW5hbGx5RW50cnkgPSBlbnRyeTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZmluYWxseUVudHJ5ICYmXG4gICAgICAgICAgKHR5cGUgPT09IFwiYnJlYWtcIiB8fFxuICAgICAgICAgICB0eXBlID09PSBcImNvbnRpbnVlXCIpICYmXG4gICAgICAgICAgZmluYWxseUVudHJ5LnRyeUxvYyA8PSBhcmcgJiZcbiAgICAgICAgICBhcmcgPD0gZmluYWxseUVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgLy8gSWdub3JlIHRoZSBmaW5hbGx5IGVudHJ5IGlmIGNvbnRyb2wgaXMgbm90IGp1bXBpbmcgdG8gYVxuICAgICAgICAvLyBsb2NhdGlvbiBvdXRzaWRlIHRoZSB0cnkvY2F0Y2ggYmxvY2suXG4gICAgICAgIGZpbmFsbHlFbnRyeSA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIHZhciByZWNvcmQgPSBmaW5hbGx5RW50cnkgPyBmaW5hbGx5RW50cnkuY29tcGxldGlvbiA6IHt9O1xuICAgICAgcmVjb3JkLnR5cGUgPSB0eXBlO1xuICAgICAgcmVjb3JkLmFyZyA9IGFyZztcblxuICAgICAgaWYgKGZpbmFsbHlFbnRyeSkge1xuICAgICAgICB0aGlzLm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgICB0aGlzLm5leHQgPSBmaW5hbGx5RW50cnkuZmluYWxseUxvYztcbiAgICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLmNvbXBsZXRlKHJlY29yZCk7XG4gICAgfSxcblxuICAgIGNvbXBsZXRlOiBmdW5jdGlvbihyZWNvcmQsIGFmdGVyTG9jKSB7XG4gICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICB0aHJvdyByZWNvcmQuYXJnO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwiYnJlYWtcIiB8fFxuICAgICAgICAgIHJlY29yZC50eXBlID09PSBcImNvbnRpbnVlXCIpIHtcbiAgICAgICAgdGhpcy5uZXh0ID0gcmVjb3JkLmFyZztcbiAgICAgIH0gZWxzZSBpZiAocmVjb3JkLnR5cGUgPT09IFwicmV0dXJuXCIpIHtcbiAgICAgICAgdGhpcy5ydmFsID0gdGhpcy5hcmcgPSByZWNvcmQuYXJnO1xuICAgICAgICB0aGlzLm1ldGhvZCA9IFwicmV0dXJuXCI7XG4gICAgICAgIHRoaXMubmV4dCA9IFwiZW5kXCI7XG4gICAgICB9IGVsc2UgaWYgKHJlY29yZC50eXBlID09PSBcIm5vcm1hbFwiICYmIGFmdGVyTG9jKSB7XG4gICAgICAgIHRoaXMubmV4dCA9IGFmdGVyTG9jO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICB9LFxuXG4gICAgZmluaXNoOiBmdW5jdGlvbihmaW5hbGx5TG9jKSB7XG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcbiAgICAgICAgaWYgKGVudHJ5LmZpbmFsbHlMb2MgPT09IGZpbmFsbHlMb2MpIHtcbiAgICAgICAgICB0aGlzLmNvbXBsZXRlKGVudHJ5LmNvbXBsZXRpb24sIGVudHJ5LmFmdGVyTG9jKTtcbiAgICAgICAgICByZXNldFRyeUVudHJ5KGVudHJ5KTtcbiAgICAgICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBcImNhdGNoXCI6IGZ1bmN0aW9uKHRyeUxvYykge1xuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPT09IHRyeUxvYykge1xuICAgICAgICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uO1xuICAgICAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgICB2YXIgdGhyb3duID0gcmVjb3JkLmFyZztcbiAgICAgICAgICAgIHJlc2V0VHJ5RW50cnkoZW50cnkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdGhyb3duO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFRoZSBjb250ZXh0LmNhdGNoIG1ldGhvZCBtdXN0IG9ubHkgYmUgY2FsbGVkIHdpdGggYSBsb2NhdGlvblxuICAgICAgLy8gYXJndW1lbnQgdGhhdCBjb3JyZXNwb25kcyB0byBhIGtub3duIGNhdGNoIGJsb2NrLlxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaWxsZWdhbCBjYXRjaCBhdHRlbXB0XCIpO1xuICAgIH0sXG5cbiAgICBkZWxlZ2F0ZVlpZWxkOiBmdW5jdGlvbihpdGVyYWJsZSwgcmVzdWx0TmFtZSwgbmV4dExvYykge1xuICAgICAgdGhpcy5kZWxlZ2F0ZSA9IHtcbiAgICAgICAgaXRlcmF0b3I6IHZhbHVlcyhpdGVyYWJsZSksXG4gICAgICAgIHJlc3VsdE5hbWU6IHJlc3VsdE5hbWUsXG4gICAgICAgIG5leHRMb2M6IG5leHRMb2NcbiAgICAgIH07XG5cbiAgICAgIGlmICh0aGlzLm1ldGhvZCA9PT0gXCJuZXh0XCIpIHtcbiAgICAgICAgLy8gRGVsaWJlcmF0ZWx5IGZvcmdldCB0aGUgbGFzdCBzZW50IHZhbHVlIHNvIHRoYXQgd2UgZG9uJ3RcbiAgICAgICAgLy8gYWNjaWRlbnRhbGx5IHBhc3MgaXQgb24gdG8gdGhlIGRlbGVnYXRlLlxuICAgICAgICB0aGlzLmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuICB9O1xufSkoXG4gIC8vIEFtb25nIHRoZSB2YXJpb3VzIHRyaWNrcyBmb3Igb2J0YWluaW5nIGEgcmVmZXJlbmNlIHRvIHRoZSBnbG9iYWxcbiAgLy8gb2JqZWN0LCB0aGlzIHNlZW1zIHRvIGJlIHRoZSBtb3N0IHJlbGlhYmxlIHRlY2huaXF1ZSB0aGF0IGRvZXMgbm90XG4gIC8vIHVzZSBpbmRpcmVjdCBldmFsICh3aGljaCB2aW9sYXRlcyBDb250ZW50IFNlY3VyaXR5IFBvbGljeSkuXG4gIHR5cGVvZiBnbG9iYWwgPT09IFwib2JqZWN0XCIgPyBnbG9iYWwgOlxuICB0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiID8gd2luZG93IDpcbiAgdHlwZW9mIHNlbGYgPT09IFwib2JqZWN0XCIgPyBzZWxmIDogdGhpc1xuKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///329\n')},function(module,exports,__webpack_require__){eval("__webpack_require__(331);\nmodule.exports = __webpack_require__(18).RegExp.escape;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvZm4vcmVnZXhwL2VzY2FwZS5qcz9mZDVhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLG1CQUFPLENBQUMsR0FBa0M7QUFDMUMsaUJBQWlCLG1CQUFPLENBQUMsRUFBcUIiLCJmaWxlIjoiMzMwLmpzIiwic291cmNlc0NvbnRlbnQiOlsicmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9jb3JlLnJlZ2V4cC5lc2NhcGUnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9fY29yZScpLlJlZ0V4cC5lc2NhcGU7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///330\n")},function(module,exports,__webpack_require__){eval("// https://github.com/benjamingr/RexExp.escape\nvar $export = __webpack_require__(0);\nvar $re = __webpack_require__(332)(/[\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n\n$export($export.S, 'RegExp', { escape: function escape(it) { return $re(it); } });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9jb3JlLnJlZ2V4cC5lc2NhcGUuanM/ZDBjYSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLFVBQVUsbUJBQU8sQ0FBQyxHQUFhLG9CQUFvQjs7QUFFbkQsOEJBQThCLDhCQUE4QixnQkFBZ0IsRUFBRSxFQUFFIiwiZmlsZSI6IjMzMS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9iZW5qYW1pbmdyL1JleEV4cC5lc2NhcGVcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHJlID0gcmVxdWlyZSgnLi9fcmVwbGFjZXInKSgvW1xcXFxeJCorPy4oKXxbXFxde31dL2csICdcXFxcJCYnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWdFeHAnLCB7IGVzY2FwZTogZnVuY3Rpb24gZXNjYXBlKGl0KSB7IHJldHVybiAkcmUoaXQpOyB9IH0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///331\n")},function(module,exports){eval("module.exports = function (regExp, replace) {\n var replacer = replace === Object(replace) ? function (part) {\n return replace[part];\n } : replace;\n return function (it) {\n return String(it).replace(regExp, replacer);\n };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcmVwbGFjZXIuanM/YWJkNyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMzMyLmpzIiwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAocmVnRXhwLCByZXBsYWNlKSB7XG4gIHZhciByZXBsYWNlciA9IHJlcGxhY2UgPT09IE9iamVjdChyZXBsYWNlKSA/IGZ1bmN0aW9uIChwYXJ0KSB7XG4gICAgcmV0dXJuIHJlcGxhY2VbcGFydF07XG4gIH0gOiByZXBsYWNlO1xuICByZXR1cm4gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIFN0cmluZyhpdCkucmVwbGFjZShyZWdFeHAsIHJlcGxhY2VyKTtcbiAgfTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///332\n")},function(module,__webpack_exports__,__webpack_require__){"use strict";eval('// ESM COMPAT FLAG\n__webpack_require__.r(__webpack_exports__);\n\n// CONCATENATED MODULE: ./src/core/Deferred.js\nfunction _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }\n\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\n\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."); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction _wrapNativeSuper(Class) { var _cache = typeof Map === "function" ? new Map() : undefined; _wrapNativeSuper = function _wrapNativeSuper(Class) { if (Class === null || !_isNativeFunction(Class)) return Class; if (typeof Class !== "function") { throw new TypeError("Super expression must either be null or a function"); } if (typeof _cache !== "undefined") { if (_cache.has(Class)) return _cache.get(Class); _cache.set(Class, Wrapper); } function Wrapper() { return _construct(Class, arguments, _getPrototypeOf(this).constructor); } Wrapper.prototype = Object.create(Class.prototype, { constructor: { value: Wrapper, enumerable: false, writable: true, configurable: true } }); return _setPrototypeOf(Wrapper, Class); }; return _wrapNativeSuper(Class); }\n\nfunction _construct(Parent, args, Class) { if (_isNativeReflectConstruct()) { _construct = Reflect.construct; } else { _construct = function _construct(Parent, args, Class) { var a = [null]; a.push.apply(a, args); var Constructor = Function.bind.apply(Parent, a); var instance = new Constructor(); if (Class) _setPrototypeOf(instance, Class.prototype); return instance; }; } return _construct.apply(null, arguments); }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _isNativeFunction(fn) { return Function.toString.call(fn).indexOf("[native code]") !== -1; }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/**\r\n * The built-in class for asynchronous Promises.\r\n * @external Promise\r\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise\r\n */\n\n/**\r\n * A Promise object that can be resolved, rejected or canceled at any time by the\r\n * user.\r\n *\r\n * @extends external:Promise\r\n */\nvar Deferred = /*#__PURE__*/function (_Promise) {\n _inherits(Deferred, _Promise);\n\n var _super = _createSuper(Deferred);\n\n /**\r\n * @constructor\r\n *\r\n * @param {Function} [executable=() => {}] - The function to be executed by the\r\n * constructor, during the process of constructing the promise. The signature\r\n * of this is expected to be: executable( resolutionFunc, rejectionFunc, cancellationFunc ).\r\n * @param {Function=} onResolve - Optional function to execute once the promise\r\n * is resolved.\r\n * @param {Function=} onReject - Optional function to execute once the promise\r\n * is rejected.\r\n * @param {Function=} onCancel - Optional function to execute if the user cancels\r\n * the promise. Canceling results in the promise having a status of \'resolved\'.\r\n */\n function Deferred() {\n var _this;\n\n var executable = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : function () {};\n var onResolve = arguments.length > 1 ? arguments[1] : undefined;\n var onReject = arguments.length > 2 ? arguments[2] : undefined;\n var onCancel = arguments.length > 3 ? arguments[3] : undefined;\n\n _classCallCheck(this, Deferred);\n\n if (typeof executable !== \'function\') {\n throw new Error("Cannot create new Deferred. Executable must be a function.");\n }\n\n if (typeof onResolve !== \'undefined\' && typeof onResolve !== \'function\') {\n throw new Error("Cannot create new Deferred. OnResolve must be a function.");\n }\n\n if (typeof onReject !== \'undefined\' && typeof onReject !== \'function\') {\n throw new Error("Cannot create new Deferred. OnReject must be a function.");\n }\n\n if (typeof onCancel !== \'undefined\' && typeof onCancel !== \'function\') {\n throw new Error("Cannot create new Deferred. OnCancel must be a function.");\n }\n\n var res;\n var rej;\n var cancel;\n var status = {\n resolved: false,\n rejected: false,\n canceled: false,\n pending: true\n };\n _this = _super.call(this, function (resolve, reject) {\n // Store the resolver\n res = function res(value) {\n if (status.pending) {\n status.resolved = true;\n status.pending = false;\n\n if (typeof onResolve === \'function\') {\n value = onResolve(value);\n }\n\n return resolve(value);\n }\n }; // Store the rejecter\n\n\n rej = function rej(value) {\n if (status.pending) {\n status.rejected = true;\n status.pending = false;\n\n if (typeof onReject === \'function\') {\n value = onReject(value);\n }\n\n return reject(value);\n }\n }; // Store the canceler\n\n\n cancel = function cancel(value) {\n if (status.pending) {\n status.canceled = true;\n status.pending = false;\n\n if (typeof onCancel === \'function\') {\n value = onCancel(value);\n }\n\n return resolve(value);\n }\n }; // Run the executable with custom resolver and rejecter\n\n\n executable(res, rej, cancel);\n });\n _this._status = status;\n _this._resolve = res;\n _this._reject = rej;\n _this._cancel = cancel;\n _this._executable = executable;\n return _this;\n }\n /**\r\n * Gets the resolved state of the promise.\r\n *\r\n * @readonly\r\n */\n\n\n _createClass(Deferred, [{\n key: "resolved",\n get: function get() {\n return this._status.resolved;\n }\n /**\r\n * Gets the rejected state of the promise.\r\n *\r\n * @readonly\r\n */\n\n }, {\n key: "rejected",\n get: function get() {\n return this._status.rejected;\n }\n /**\r\n * Gets the canceled state of the promise.\r\n *\r\n * @readonly\r\n */\n\n }, {\n key: "canceled",\n get: function get() {\n return this._status.canceled;\n }\n /**\r\n * Gets the pending state of the promise.\r\n *\r\n * @readonly\r\n */\n\n }, {\n key: "pending",\n get: function get() {\n return this._status.pending;\n }\n /**\r\n * Force the promise to resolve.\r\n *\r\n * @param {any=} value - Value to pass to the resolver.\r\n *\r\n * @returns {any} - The return value of the resolver function.\r\n */\n\n }, {\n key: "resolve",\n value: function resolve(value) {\n return this._resolve(value);\n }\n /**\r\n * Force the promise to reject.\r\n *\r\n * @param {any=} value - Value to pass to the rejecter.\r\n *\r\n * @returns {any} - The return value of the rejecter function.\r\n */\n\n }, {\n key: "reject",\n value: function reject(value) {\n return this._reject(value);\n }\n /**\r\n * Force the promise to resolve and set the canceled state to true.\r\n *\r\n * @param {any=} value - Value to pass to the canceller.\r\n *\r\n * @returns {any} - The return value of the canceller function.\r\n */\n\n }, {\n key: "cancel",\n value: function cancel(value) {\n return this._cancel(value);\n }\n /**\r\n * Run the promise function to try to resolve the promise. Promise must be\r\n * pending.\r\n *\r\n * @param {...any} args - Optional arguments to pass after resolve and reject.\r\n */\n\n }, {\n key: "execute",\n value: function execute() {\n if (this.pending) {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n this._executable.apply(this, [this._resolve, this._reject, this._cancel].concat(args));\n }\n }\n /**\r\n * Return a canceled deferred promise.\r\n *\r\n * @param {any=} value - Value to cancel the promise with.\r\n *\r\n * @returns {Deferred}\r\n */\n\n }], [{\n key: "cancel",\n value: function cancel(value) {\n return new Deferred(function (_resolve, _reject, cancel) {\n cancel(value);\n });\n }\n /**\r\n * Return a new Deferred promise that will resolve or reject once all promises\r\n * in the input array have been resolved or one promise is canceled or rejected.\r\n * Promises in the array that are Deferred promises will be manually resolved,\r\n * rejected or canceled when calling resolve, reject or cancel on the return promise.\r\n *\r\n * @param {Array.} iterable - An iterable such as an array.\r\n * @param {Function=} onResolve - Optional function to execute once the promise\r\n * is resolved.\r\n * @param {Function=} onReject - Optional function to execute once the promise\r\n * is rejected.\r\n * @param {Function=} onCancel - Optional function to execute if the user cancels\r\n * the promise. Canceling results in the promise having a status of \'canceled\'.\r\n *\r\n * @returns Deferred\r\n */\n\n }, {\n key: "all",\n value: function all(iterable, onResolve, onReject, onCancel) {\n if (iterable == null || typeof iterable[Symbol.iterator] !== \'function\') {\n var e = "Cannot execute Deferred.all. First argument must be iterable.";\n\n if (typeof onReject === \'function\') {\n e = onReject(e);\n }\n\n return Deferred.reject(e);\n }\n\n var array = _toConsumableArray(iterable);\n\n var deferred = array.filter(function (item) {\n return item instanceof Deferred;\n });\n var result = new Deferred(undefined, function (resolveValue) {\n deferred.forEach(function (item) {\n item.resolve(resolveValue);\n });\n deferred.length = 0;\n\n if (typeof onResolve === \'function\') {\n return onResolve(resolveValue);\n } else {\n return resolveValue;\n }\n }, function (error) {\n deferred.forEach(function (item) {\n item.reject(error);\n });\n deferred.length = 0;\n\n if (typeof onReject === \'function\') {\n return onReject(error);\n } else {\n return error;\n }\n }, function (cancelValue) {\n deferred.forEach(function (item) {\n item.cancel(cancelValue);\n });\n deferred.length = 0;\n\n if (typeof onCancel === \'function\') {\n return onCancel(cancelValue);\n } else {\n return cancelValue;\n }\n });\n var numItems = array.length;\n var itemTracker = {\n failed: false,\n numResolved: 0,\n resolutions: []\n };\n array.forEach(function (item, index) {\n if (itemTracker.failed) {\n return;\n } else if (!(item instanceof Promise)) {\n itemTracker.resolutions[index] = item;\n itemTracker.numResolved += 1;\n\n if (itemTracker.numResolved === numItems) {\n result.resolve(itemTracker.resolutions);\n }\n\n return;\n }\n\n item.then(function (value) {\n if (!itemTracker.failed && !item.canceled) {\n itemTracker.resolutions[index] = value;\n itemTracker.numResolved += 1;\n\n if (itemTracker.numResolved === numItems) {\n result.resolve(itemTracker.resolutions);\n }\n } else if (!itemTracker.failed) {\n itemTracker.failed = true;\n result.cancel(value);\n }\n }, function (error) {\n if (!itemTracker.failed) {\n itemTracker.failed = true;\n result.reject(error);\n }\n });\n });\n return result;\n }\n }]);\n\n return Deferred;\n}( /*#__PURE__*/_wrapNativeSuper(Promise));\n\n/* harmony default export */ var core_Deferred = (Deferred);\n// CONCATENATED MODULE: ./src/core/Utils.js\nfunction Utils_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction Utils_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction Utils_createClass(Constructor, protoProps, staticProps) { if (protoProps) Utils_defineProperties(Constructor.prototype, protoProps); if (staticProps) Utils_defineProperties(Constructor, staticProps); return Constructor; }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/**\r\n * A collection of useful generic functions.\r\n *\r\n * @hideconstructor\r\n */\n\nvar Utils_Utils = /*#__PURE__*/function () {\n function Utils() {\n Utils_classCallCheck(this, Utils);\n }\n\n Utils_createClass(Utils, null, [{\n key: "createId",\n value:\n /**\r\n * @static\r\n *\r\n * Generate a unique id\r\n *\r\n * @returns {String}\r\n */\n function createId() {\n return \'xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx\'.replace(/[xy]/g, function (c) {\n var randomNumber = Math.floor((Date.now() + Math.random() * 16) % 16);\n\n if (c === \'x\') {\n return randomNumber.toString(16);\n } // Set bit 6 and 7 to 0 and 1\n\n\n return (randomNumber & 0x3 | 0x8).toString(16);\n });\n }\n /**\r\n * @static\r\n *\r\n * Check a name string against an array of strings to determine if it is unique.\r\n * If it isn\'t, append incremented trailing integers to the end of the name\r\n * until it is unique.\r\n *\r\n * @param {string} name - String name to make unique.\r\n * @param {Array.=} nameArray - Array of string names to check agains.\r\n *\r\n * @returns {string}\r\n */\n\n }, {\n key: "getUniqueName",\n value: function getUniqueName(name) {\n var nameArray = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n\n // If the name isn\'t in the array return it right away\n if (!nameArray.includes(name)) {\n return name;\n }\n\n var nameSet = new Set(nameArray); // Separate the name into string and trailing numbers\n\n var matchGroup = name.match(/\\d*$/);\n var index = matchGroup.index;\n var baseName = name.slice(0, index);\n var increment = Number(matchGroup[0]); // Find the highest trailing number value for the base of the name\n\n nameSet.forEach(function (setName) {\n var setMatchGroup = setName.match(/\\d*$/);\n\n if (setName.slice(0, setMatchGroup.index) === baseName) {\n var setIncrement = Number(setMatchGroup[0]);\n\n if (setIncrement > increment) {\n increment = setIncrement;\n }\n }\n }); // Increment the highest trailing number and append to the name\n\n return "".concat(baseName).concat(increment + 1);\n }\n /**\r\n * Return a deferred promise that will wait a given number of seconds before\r\n * resolving. Pass delta time in milliseconds to the deferred promise\'s execute\r\n * method in an update loop to progress time.\r\n *\r\n * @param {number} [seconds=0] - Number of seconds to wait before resolving.\r\n * @param {Object=} options - Optional options object\r\n * @param {Function} [options.onFinish] - Callback to execute once the wait time\r\n * is met.\r\n * @param {Function=} options.onProgress - Callback to execute each time the wait\r\n * time progresses towards the target number of seconds. The amount of progress\r\n * as a 0-1 percentage is passed as an argument.\r\n * @param {Function=} options.onCancel - Callback to execute if the user cancels\r\n * the wait before completion.\r\n * @param {Function=} options.onError - Callback to execute if the wait stops\r\n * because an error is encountered. The error message is passed as a parameter.\r\n *\r\n * @returns {Deferred}\r\n */\n\n }, {\n key: "wait",\n value: function wait() {\n var seconds = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n\n var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n onFinish = _ref.onFinish,\n onProgress = _ref.onProgress,\n onCancel = _ref.onCancel,\n onError = _ref.onError;\n\n // Make sure seconds is numeric\n if (typeof seconds !== \'number\') {\n console.warn("Invalid seconds value ".concat(seconds, " for wait. Defaulting to 0."));\n seconds = 0;\n } // Resolve immediately if the wait time is not greater than 0\n\n\n if (seconds <= 0) {\n if (typeof onFinish === \'function\') {\n onFinish();\n }\n\n return core_Deferred.resolve();\n }\n\n var currentTime = 0;\n var totalTime = seconds * 1000; // convert to milliseconds\n // Executable to pass to Deferred, meant to be run in an update loop\n\n var onUpdate = function onUpdate(resolve, reject, _cancel) {\n var deltaTime = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;\n\n if (typeof deltaTime !== \'number\') {\n var e = new Error("Invalid property wait deltaTime. DeltaTime must be a number.");\n reject(e);\n return;\n } // Make sure time has passed\n\n\n if (deltaTime === 0) {\n return;\n } // Signal progress\n\n\n currentTime += deltaTime;\n\n if (currentTime < 0) {\n currentTime = 0;\n }\n\n if (typeof onProgress === \'function\') {\n onProgress(Math.min(currentTime / totalTime, 1));\n } // Signal completion once time is up\n\n\n if (currentTime >= totalTime) {\n resolve();\n }\n };\n\n return new core_Deferred(onUpdate, onFinish, onError, onCancel);\n }\n /**\r\n * Get a random float number between a min (inclusive) and max (exclusive) value\r\n * @param {number} min minimum value\r\n * @param {number} max maximum value\r\n * @returns {float}\r\n */\n\n }, {\n key: "getRandomFloat",\n value: function getRandomFloat(min, max) {\n return Math.random() * (max - min) + min;\n }\n /**\r\n * Get a random integer number between a min (inclusive) and max (exclusive) value\r\n * @param {number} min minimum value\r\n * @param {number} max maximum value\r\n * @returns {integer}\r\n */\n\n }, {\n key: "getRandomInt",\n value: function getRandomInt(min, max) {\n min = Math.ceil(min);\n max = Math.floor(max);\n return Math.floor(Math.random() * (max - min)) + min;\n }\n }]);\n\n return Utils;\n}();\n\n/* harmony default export */ var core_Utils = (Utils_Utils);\n// CONCATENATED MODULE: ./src/core/MathUtils.js\nfunction MathUtils_toConsumableArray(arr) { return MathUtils_arrayWithoutHoles(arr) || MathUtils_iterableToArray(arr) || MathUtils_unsupportedIterableToArray(arr) || MathUtils_nonIterableSpread(); }\n\nfunction MathUtils_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."); }\n\nfunction MathUtils_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return MathUtils_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return MathUtils_arrayLikeToArray(o, minLen); }\n\nfunction MathUtils_iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction MathUtils_arrayWithoutHoles(arr) { if (Array.isArray(arr)) return MathUtils_arrayLikeToArray(arr); }\n\nfunction MathUtils_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction MathUtils_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction MathUtils_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction MathUtils_createClass(Constructor, protoProps, staticProps) { if (protoProps) MathUtils_defineProperties(Constructor.prototype, protoProps); if (staticProps) MathUtils_defineProperties(Constructor, staticProps); return Constructor; }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\nvar RadianToDegree = 180 / Math.PI;\nvar DegreeToRadian = Math.PI / 180;\n/**\n * A collection of useful math functions.\n *\n * @hideconstructor\n */\n\nvar MathUtils = /*#__PURE__*/function () {\n function MathUtils() {\n MathUtils_classCallCheck(this, MathUtils);\n }\n\n MathUtils_createClass(MathUtils, null, [{\n key: "toDegrees",\n value:\n /**\n * Convert the given angle from radians to degrees.\n *\n * @param {number} radians - Angle in radians.\n *\n * @returns {number} - Angle in degrees.\n */\n function toDegrees(radians) {\n return radians * RadianToDegree;\n }\n /**\n * Convert the given angle from degrees to radians.\n *\n * @param {number} degrees - Angle in degrees.\n *\n * @returns {number} - Angle in radians.\n */\n\n }, {\n key: "toRadians",\n value: function toRadians(degrees) {\n return degrees * DegreeToRadian;\n }\n /**\n * Linearly interpolate between two values.\n *\n * @param {number} from - Start value.\n * @param {number} to - Target value.\n * @param {number} factor - 0-1 amount to interpolate between from and to.\n *\n * @returns {number}\n */\n\n }, {\n key: "lerp",\n value: function lerp(from, to, factor) {\n return from + (to - from) * factor;\n }\n /**\n * Clamp a number between 2 values.\n *\n * @param {number} value - Value to clamp.\n * @param {number} [min=0] - Minumum value.\n * @param {number} [max=1] - Maximum value.\n *\n * @returns {number}\n */\n\n }, {\n key: "clamp",\n value: function clamp(value) {\n var min = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var max = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;\n return Math.max(min, Math.min(value, max));\n }\n /**\n * Calculates the closest point on a given 2D line segement\n * from a given 2D point.\n *\n * @param {Array.} a - First point on line segment.\n * @param {Array.} b - Second point on line segment.\n * @param {Array.} p - 2D point.\n *\n * @returns {Array.}\n */\n\n }, {\n key: "closestPointOnLine",\n value: function closestPointOnLine(a, b, p) {\n var distSqr = MathUtils.distanceSquared(a, b); // Line segment is a single point\n\n if (distSqr === 0) {\n return a;\n }\n\n var t = ((p[0] - a[0]) * (b[0] - a[0]) + (p[1] - a[1]) * (b[1] - a[1])) / distSqr;\n\n var point = MathUtils_toConsumableArray(a);\n\n if (t > 1) {\n point = MathUtils_toConsumableArray(b);\n } else if (t > 0) {\n point = [a[0] + t * (b[0] - a[0]), a[1] + t * (b[1] - a[1])];\n }\n\n return point;\n }\n /**\n * Gets the distance squared for two 2D points.\n * @param {Array.} a - 2D point.\n * @param {Array.} b - 2D point.\n *\n * @returns {number}\n */\n\n }, {\n key: "distanceSquared",\n value: function distanceSquared(a, b) {\n return (a[0] - b[0]) * (a[0] - b[0]) + (a[1] - b[1]) * (a[1] - b[1]);\n }\n /**\n * Triangulates a set of 2D points using an implementation\n * of the Bowyer-Watson incremental Delaunay triangulation.\n *\n * @param {Array.>} vertices - Array of 2D points.\n *\n * @returns {Array.>} - Array of triangle indices.\n */\n\n }, {\n key: "getDelaunayTriangulation",\n value: function getDelaunayTriangulation(vertices) {\n if (!vertices || vertices.length < 3) {\n throw new Error("Cannot get delaunay triangulation for points ".concat(vertices, ". Input must contain at least three points."));\n }\n\n var minX = Number.POSITIVE_INFINITY;\n var minY = Number.POSITIVE_INFINITY;\n var maxX = Number.NEGATIVE_INFINITY;\n var maxY = Number.NEGATIVE_INFINITY;\n vertices.forEach(function (v) {\n minX = v[0] < minX ? v[0] : minX;\n minY = v[1] < minY ? v[1] : minY;\n maxX = v[0] > maxX ? v[0] : maxX;\n maxY = v[1] > maxY ? v[1] : maxY;\n });\n var dX = maxX - minX;\n var dY = maxY - minY;\n var midX = (minX + maxX) / 2;\n var midY = (minY + maxY) / 2;\n var dMax = dX > dY ? dX : dY;\n var superIndices = [vertices.length, vertices.length + 1, vertices.length + 2];\n var vertsWithSuper = [].concat(MathUtils_toConsumableArray(vertices), [[midX - 20 * dMax, midY - dMax], [midX, midY + 20 * dMax], [midX + 20 * dMax, midY - dMax]]);\n var superSortedIndices = MathUtils.sortPointsCCW(superIndices, vertsWithSuper);\n var superTriangle = {\n indices: superSortedIndices,\n edges: [[superSortedIndices[0], superSortedIndices[1]], [superSortedIndices[1], superSortedIndices[2]], [superSortedIndices[2], superSortedIndices[0]]]\n };\n var triangles = [superTriangle];\n vertsWithSuper.forEach(function (newVert, newIndex) {\n var invalidTriangles = [];\n triangles.forEach(function (triangle) {\n if (MathUtils.isPointInCircumCircle(vertsWithSuper[triangle.indices[0]], vertsWithSuper[triangle.indices[1]], vertsWithSuper[triangle.indices[2]], newVert)) {\n invalidTriangles.push(triangle);\n }\n });\n var boundingPoly = [];\n invalidTriangles.forEach(function (triangle) {\n triangle.edges.forEach(function (edge) {\n var count = 0;\n invalidTriangles.forEach(function (otherTriangle) {\n if (triangle !== otherTriangle) {\n otherTriangle.edges.forEach(function (otherEdge) {\n if (edge[0] === otherEdge[0] && edge[1] === otherEdge[1] || edge[1] === otherEdge[0] && edge[0] === otherEdge[1]) {\n count += 1;\n }\n });\n }\n });\n if (count === 0) boundingPoly.push(edge);\n });\n });\n invalidTriangles.forEach(function (triangle) {\n triangles.splice(triangles.indexOf(triangle), 1);\n });\n boundingPoly.forEach(function (edge) {\n var sortedIndices = MathUtils.sortPointsCCW([edge[0], edge[1], newIndex], vertsWithSuper);\n triangles.push({\n indices: sortedIndices,\n edges: [[sortedIndices[0], sortedIndices[1]], [sortedIndices[1], sortedIndices[2]], [sortedIndices[2], sortedIndices[0]]]\n });\n });\n });\n var trianglesToRemove = [];\n triangles.forEach(function (triangle) {\n triangle.indices.forEach(function (index) {\n if (superIndices.includes(index)) {\n trianglesToRemove.push(triangle);\n }\n });\n });\n trianglesToRemove.forEach(function (triangle) {\n var index = triangles.indexOf(triangle);\n\n if (index !== -1) {\n triangles.splice(index, 1);\n }\n });\n return triangles.map(function (triangle) {\n return triangle.indices;\n });\n }\n /**\n * Determines if a given 2D point is within the cicrumcircle\n * defined by three 2D points. The triangle points must be in\n * counter-clockwise order a -> b -> c.\n *\n * @param {Array.} a - First triangle point.\n * @param {Array.} b - Second triangle point.\n * @param {Array.} c - Third triangle point.\n * @param {Array.} p - 2D point.\n *\n * @returns {boolean}\n */\n\n }, {\n key: "isPointInCircumCircle",\n value: function isPointInCircumCircle(a, b, c, p) {\n var ax = a[0] - p[0];\n var ay = a[1] - p[1];\n var bx = b[0] - p[0];\n var by = b[1] - p[1];\n var cx = c[0] - p[0];\n var cy = c[1] - p[1];\n return (ax * ax + ay * ay) * (bx * cy - cx * by) - (bx * bx + by * by) * (ax * cy - cx * ay) + (cx * cx + cy * cy) * (ax * by - bx * ay) > 0;\n }\n /**\n * Determines if a given 2D point is within a given triangle.\n *\n * @param {Array.} a - First triangle point.\n * @param {Array.} b - Second triangle point.\n * @param {Array.} c - Third triangle point.\n * @param {Array.} p - 2D point.\n *\n * @returns {boolean}\n */\n\n }, {\n key: "isPointInTriangle",\n value: function isPointInTriangle(a, b, c, p) {\n var denom = (b[1] - c[1]) * (a[0] - c[0]) + (c[0] - b[0]) * (a[1] - c[1]);\n var aVal = ((b[1] - c[1]) * (p[0] - c[0]) + (c[0] - b[0]) * (p[1] - c[1])) / denom;\n var bVal = ((c[1] - a[1]) * (p[0] - c[0]) + (a[0] - c[0]) * (p[1] - c[1])) / denom;\n var cVal = 1 - aVal - bVal;\n return aVal >= 0 && aVal <= 1 && bVal >= 0 && bVal <= 1 && cVal >= 0 && cVal <= 1;\n }\n /**\n * Gets the sorted indices of a given set of 2D points in\n * counter-clockwise order.\n *\n * @param {Array.} indices - List of indices.\n * @param {Array.>} vertices - List of 2D points.\n *\n * @returns {Array.>} - List of sorted indices.\n */\n\n }, {\n key: "sortPointsCCW",\n value: function sortPointsCCW(indices, vertices) {\n var centroid = [0, 0];\n indices.forEach(function (index) {\n centroid[0] += vertices[index][0];\n centroid[1] += vertices[index][1];\n });\n centroid[0] /= indices.length;\n centroid[1] /= indices.length;\n indices.sort(function (a, b) {\n var bVal = Math.atan2(vertices[b][1] - centroid[1], vertices[b][0] - centroid[0]);\n var aVal = Math.atan2(vertices[a][1] - centroid[1], vertices[a][0] - centroid[0]);\n return aVal - bVal;\n });\n return indices;\n }\n /**\n * Cacluates the area of a triangle\n * @param {Array.} a - First triangle point.\n * @param {Array.} b - Second triangle point.\n * @param {Array.} c - Third triangle point.\n *\n * @returns {number}\n */\n\n }, {\n key: "triangleArea",\n value: function triangleArea(a, b, c) {\n return Math.abs((a[0] * (b[1] - c[1]) + b[0] * (c[1] - a[1]) + c[0] * (a[1] - b[1])) * 0.5);\n }\n /**\n * Return the magnitude of a given vector array.\n *\n * @param {Array.} vector - Array consisting of numbers.\n *\n * @returns {number}\n */\n\n }, {\n key: "getVectorMagnitude",\n value: function getVectorMagnitude(vector) {\n if (!(vector instanceof Array)) {\n throw new Error("Cannot get magnitude for vector ".concat(vector, ". Input must be an Array numbers."));\n }\n\n var reducer = function reducer(accumulator, currentValue) {\n if (typeof currentValue !== \'number\') {\n throw new Error("Cannot get magnitude for vector ".concat(vector, ". All items in the input Array must be numbers."));\n }\n\n return accumulator + Math.pow(currentValue, 2);\n };\n\n return Math.sqrt(vector.reduce(reducer, 0));\n }\n /**\n * Return the dot product between two vectors.\n *\n * @param {Array.} vectorA - Array consisting of numbers.\n * @param {Array.} vectorB - Array consisting of numbers.\n *\n * @returns {number}\n */\n\n }, {\n key: "getDotProduct",\n value: function getDotProduct(vectorA, vectorB) {\n if (!(vectorA instanceof Array) || !(vectorB instanceof Array) || vectorA.length !== vectorB.length) {\n throw new Error("Cannot get dot product between ".concat(vectorA, " and ").concat(vectorB, ". Inputs must be vectors of the same length."));\n }\n\n var result = 0;\n vectorA.forEach(function (valueA, index) {\n var valueB = vectorB[index];\n\n if (typeof valueA !== \'number\' || typeof valueB !== \'number\') {\n throw new Error("Cannot get dot product between ".concat(vectorA, " and ").concat(vectorB, ". Vectors must only consist of numeric values."));\n }\n\n result += valueA * valueB;\n });\n return result;\n }\n /**\n * Return the angle in radians between vectorA and vectorB.\n *\n * @param {Array.} vectorA - Array consisting of numbers.\n * @param {Array.} vectorB - Array consisting of numbers.\n *\n * @returns {number}\n */\n\n }, {\n key: "getAngleBetween",\n value: function getAngleBetween(vectorA, vectorB) {\n var normalA = this.normalizeVector(MathUtils_toConsumableArray(vectorA));\n var normalB = this.normalizeVector(MathUtils_toConsumableArray(vectorB));\n var dot = this.getDotProduct(normalA, normalB);\n return Math.acos(this.clamp(dot, -1, 1));\n }\n /**\n * Multiply a 3x3 rotation matrix with a vector3.\n *\n * @param {Array.} vector3 - Array consisting of 3 numbers representing\n * a direction vector.\n * @param {Array.} matrix3 - An array of 9 numbers representing a row\n * major rotation matrix.\n *\n * @returns {Array.} - An array of 3 numbers representing the new direction\n * of the vector.\n */\n\n }, {\n key: "rotateVector",\n value: function rotateVector(vector3, matrix3) {\n if (!(vector3 instanceof Array) || vector3.length !== 3 || !vector3.every(function (v) {\n return typeof v === \'number\';\n })) {\n throw new Error("Cannot rotate vector ".concat(vector3, " by rotation matrix ").concat(matrix3, ". Input vector must be an array of 3 numbers."));\n }\n\n if (!(matrix3 instanceof Array) || matrix3.length !== 9 || !matrix3.every(function (v) {\n return typeof v === \'number\';\n })) {\n throw new Error("Cannot rotate vector ".concat(vector3, " by rotation matrix ").concat(matrix3, ". Input matrix3 must be an array of 9 numbers."));\n }\n\n var x = matrix3[0] * vector3[0] + matrix3[3] * vector3[1] + matrix3[6] * vector3[2];\n var y = matrix3[1] * vector3[0] + matrix3[4] * vector3[1] + matrix3[7] * vector3[2];\n var z = matrix3[2] * vector3[0] + matrix3[5] * vector3[1] + matrix3[8] * vector3[2];\n return [x, y, z];\n }\n /**\n * Normalize a given vector array.\n *\n * @param {Array.} vector - Array consisting of numbers.\n *\n * @returns {Array.} The original vector with normalized values, for chaining.\n */\n\n }, {\n key: "normalizeVector",\n value: function normalizeVector(vector) {\n var magnitude = this.getVectorMagnitude(vector);\n\n if (magnitude === 0) {\n vector.fill(0);\n } else {\n vector.forEach(function (value, index) {\n vector[index] = value / magnitude;\n });\n }\n\n return vector;\n }\n /**\n * Extract the 3x3 rotation matrix from a given 4x4 transformation matrix.\n *\n * @param {Array.} matrix4 - An array of 16 numbers representing a row\n * major transformation matrix.\n *\n * @returns {Array.} - An array of 9 numbers representing a row major\n * rotation matrix.\n */\n\n }, {\n key: "getRotationMatrix",\n value: function getRotationMatrix(matrix4) {\n if (!(matrix4 instanceof Array) || matrix4.length !== 16 || !matrix4.every(function (v) {\n return typeof v === \'number\';\n })) {\n throw new Error("Cannot convert matrix ".concat(matrix4, " to a rotation matrix. Input matrix must be an array of 16 numbers."));\n } // Extract scale\n\n\n var scaleX = 1 / (this.getVectorMagnitude(matrix4.slice(0, 4)) || 1);\n var scaleY = 1 / (this.getVectorMagnitude(matrix4.slice(4, 8)) || 1);\n var scaleZ = 1 / (this.getVectorMagnitude(matrix4.slice(8, 12)) || 1);\n return [matrix4[0] * scaleX, matrix4[1] * scaleX, matrix4[2] * scaleX, matrix4[4] * scaleY, matrix4[5] * scaleY, matrix4[6] * scaleY, matrix4[8] * scaleZ, matrix4[9] * scaleZ, matrix4[10] * scaleZ];\n }\n /**\n * Return an array containing the spherical coordinates of the given cartesian\n * xyz coordinates.\n *\n * @private\n *\n * @param {number} x - Position along the x axis.\n * @param {number} y - Position along the y axis.\n * @param {number} z - Position along the z axis.\n *\n * @returns {Array.} - An array consisting of three numberes where index\n * 0 represents the radius, index 1 represents the vertical/polar angle in radians\n * and index 2 represents the horizontal/azimuthal angle in radians.\n */\n\n }, {\n key: "cartesianToSpherical",\n value: function cartesianToSpherical(x, y, z) {\n var r = this.getVectorMagnitude([x, y, z]); // Return identity if the vector has no length\n\n if (r === 0) {\n return [0, 0, 0];\n }\n\n return [r, Math.acos(this.clamp(y / r, -1, 1)), Math.atan2(x, z)];\n }\n /**\n * Gradually change a value of a numeric property towards a goal over time using\n * a critically damped spring function.\n *\n * @param {number} currentValue - The starting value.\n * @param {number} targetValue- The goal value.\n * @param {Array.} [valueStore = [0, 0]] - An Array consisting of two\n * numbers where the first number holds the result value and the second holds\n * the velocity that resulted in that value. The same array should be provided\n * with each call to this function.\n * @param {number} [deltaTime = 1e-7] - The time since the last call to this function\n * in seconds.\n * @param {number} [smoothTime = 0.3] - The approximate amount of time in seconds\n * it should take to reach the target value.\n * @param {number} [maxSpeed = 1e7] - A clamping value for the maximum speed the\n * value can change.\n *\n * @returns {Array.} - The valueStore array.\n */\n\n }, {\n key: "dampValue",\n value: function dampValue(currentValue, targetValue) {\n var valueStore = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [0, 0];\n var deltaTime = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 1e-7;\n var smoothTime = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0.3;\n var maxSpeed = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 1e7;\n smoothTime = Math.max(0.0001, smoothTime);\n deltaTime = Math.max(1e-7, deltaTime); // Find the delta between values and use it to estimate the previous value\n\n var clampTime = maxSpeed * smoothTime;\n var deltaValue = currentValue - targetValue;\n var clampDeltaValue = this.clamp(deltaValue, -clampTime, clampTime);\n var lastValue = currentValue - clampDeltaValue; // Calculate damping factors\n\n var d1 = 2 / smoothTime;\n var d2 = d1 * deltaTime;\n var d3 = 1 / (1 + d2 + 0.5 * Math.pow(d2, 2) + 0.25 * Math.pow(d2, 3));\n var d4 = (valueStore[1] + d1 * clampDeltaValue) * deltaTime; // Damp the target value and update the velocity\n\n valueStore[0] = lastValue + (clampDeltaValue + d4) * d3;\n valueStore[1] = (valueStore[1] - d1 * d4) * d3; // Prevent overshooting\n\n if (targetValue - currentValue > 0 === valueStore[0] > targetValue) {\n valueStore[0] = targetValue;\n valueStore[1] = (valueStore[0] - targetValue) / deltaTime;\n }\n\n return valueStore;\n }\n }]);\n\n return MathUtils;\n}();\n\n/* harmony default export */ var core_MathUtils = (MathUtils);\n// CONCATENATED MODULE: ./src/core/HostEnvironment.js\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/* eslint-disable import/prefer-default-export */\n\n/**\r\n * Indicates the type of host build.\r\n *\r\n * @type {string}\r\n */\nvar env = \'core\';\n\n// CONCATENATED MODULE: ./src/core/Messenger.js\nfunction Messenger_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction Messenger_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction Messenger_createClass(Constructor, protoProps, staticProps) { if (protoProps) Messenger_defineProperties(Constructor.prototype, protoProps); if (staticProps) Messenger_defineProperties(Constructor, staticProps); return Constructor; }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/* eslint-disable no-underscore-dangle */\n\n/**\n * Class that can execute functions when local messages are received. Local messages\n * are prefixed with the instance\'s id.\n *\n * @alias core/Messenger\n *\n * @property {core/Messenger} GlobalMessenger - A messenger that can be used for\n * global messaging. When using static listen and emit methods they are executed\n * on this messenger.\n * @property {Object} EVENTS - Built-in events that the Messenger emits.\n */\n\nvar Messenger_Messenger = /*#__PURE__*/function () {\n /**\n * @constructor\n *\n * @param {any=} id - Id for the object. If none is provided a new id will\n * be created. Id should be able to be represented as a string.\n */\n function Messenger(id) {\n Messenger_classCallCheck(this, Messenger);\n\n this._id = id !== undefined ? id : core_Utils.createId();\n this._dispatcher = window;\n this._callbacks = {};\n this._eventListeners = {};\n }\n /**\n * Gets the string id of the object.\n *\n * @readonly\n * @type {string}\n */\n\n\n Messenger_createClass(Messenger, [{\n key: "id",\n get: function get() {\n return this._id;\n }\n /**\n * Prefix a message with the instance id.\n *\n * @private\n *\n * @param {string} message\n *\n * @returns {string}\n */\n\n }, {\n key: "_createLocalMessage",\n value: function _createLocalMessage(message) {\n return "".concat(this.id, ".").concat(message);\n }\n /**\n * Return a function that will call a callback function and supply the event\'s\n * detail property as an argument.\n *\n * @private\n *\n * @param {Function} callback\n *\n * @returns {Function}\n */\n\n }, {\n key: "_createListener",\n value: function _createListener(callback) {\n return function (e) {\n var value;\n\n if (e.detail !== null) {\n value = e.detail;\n }\n\n callback(value);\n };\n }\n /**\n * Create an event object and send it to listeners.\n *\n * @private\n *\n * @param {string} message - Event type name.\n * @param {any=} value - Value to send to listeners.\n *\n * @returns {CustomEvent}\n */\n\n }, {\n key: "_createEvent",\n value: function _createEvent(message, value) {\n return new CustomEvent(message, {\n detail: value\n });\n }\n /**\n * Register an event.\n *\n * @private\n *\n * @param {string} message - Event type name.\n * @param {Function} listener - A listener function generated using _createListener.\n */\n\n }, {\n key: "_addListener",\n value: function _addListener(message, listener) {\n this._dispatcher.addEventListener(this._createLocalMessage(message), listener);\n }\n /**\n * Unregister an event.\n *\n * @private\n *\n * @param {string} message - Event type name.\n * @param {Function} listener - A listener function generated using _createListener.\n */\n\n }, {\n key: "_removeListener",\n value: function _removeListener(message, listener) {\n this._dispatcher.removeEventListener(this._createLocalMessage(message), listener);\n }\n /**\n * Execute a function when a message is received for this object.\n *\n * @param {string} message - The message to listen for.\n * @param {Function} callback - Function to execute once the message is received.\n */\n\n }, {\n key: "listenTo",\n value: function listenTo(message, callback) {\n if (typeof callback !== \'function\') {\n throw new Error("Cannot add listener for ".concat(message, " on ").concat(this.id, ". Callback must be a function."));\n }\n\n if (this._callbacks[message] === undefined) {\n this._callbacks[message] = [];\n this._eventListeners[message] = [];\n }\n\n var listener = this._createListener(callback);\n\n this._callbacks[message].push(callback);\n\n this._eventListeners[message].push(listener);\n\n this._addListener(message, listener);\n }\n /**\n * Prevent a function from being executed when a message is received for this\n * object.\n *\n * @param {string} message - The message to stop listening for.\n * @param {Function=} callback - Optional callback to remove. If none is defined,\n * remove all callbacks for the message.\n */\n\n }, {\n key: "stopListening",\n value: function stopListening(message, callback) {\n if (this._callbacks[message] === undefined) {\n return;\n } else if (callback === undefined) {\n // If no callback was defined, call stopListening on all callbacks for the message\n for (var i = this._callbacks[message].length - 1; i > -1; i--) {\n this.stopListening(message, this._callbacks[message][i]);\n }\n\n return;\n } // If a callback was defined, make sure it\'s a listener\n\n\n var index = this._callbacks[message].indexOf(callback);\n\n if (index === -1) {\n return;\n }\n\n var listener = this._eventListeners[message][index];\n\n this._removeListener(message, listener);\n\n this._callbacks[message].splice(index, 1);\n\n this._eventListeners[message].splice(index, 1);\n\n if (this._callbacks[message].length === 0) {\n delete this._callbacks[message];\n delete this._eventListeners[message];\n }\n }\n /**\n * De-register callback(s) from being executed when messages matching the given\n * regular expression are received.\n *\n * @param {Regexp} regexp - regexp - The regular expression to filter messages with.\n * @param {Function=} callback - Optional callback to remove. If none is defined,\n * remove all callbacks for messages matching the regular expression.\n */\n\n }, {\n key: "stopListeningByRegexp",\n value: function stopListeningByRegexp(regexp, callback) {\n var _this = this;\n\n var messages = Object.keys(this._callbacks).filter(function (message) {\n return regexp.test(message);\n });\n messages.forEach(function (message) {\n _this.stopListening(message, callback);\n });\n }\n /**\n * Prevent any functions from being executed when any message is received for\n * this object.\n */\n\n }, {\n key: "stopListeningToAll",\n value: function stopListeningToAll() {\n var messages = Object.keys(this._callbacks);\n\n for (var i = messages.length - 1; i > -1; i--) {\n this.stopListening(messages[i]);\n }\n }\n /**\n * Send a message, causing listener functions for the message on this object\n * to be executed.\n *\n * @param {string} message - The message to emit.\n * @param {any=} value - Optional argument to pass to listener callbacks.\n */\n\n }, {\n key: "emit",\n value: function emit(message, value) {\n if (this._callbacks[message] === undefined) {\n return;\n }\n\n message = this._createLocalMessage(message);\n\n var event = this._createEvent(message, value);\n\n this._dispatcher.dispatchEvent(event);\n }\n /**\n * Execute a function when a message is received for the global Messenger instance.\n *\n * @static\n *\n * @param {string} message - The message to listen for.\n * @param {Function} callback - Function to execute once the message is received.\n */\n\n }], [{\n key: "listenTo",\n value: function listenTo(message, callback, messenger) {\n this.GlobalMessenger.listenTo(message, callback, messenger);\n }\n /**\n * Prevent a function from being executed when a message is received for the\n * global Messenger instance.\n *\n * @static\n *\n * @param {string} message - The message to stop listening for.\n * @param {Function=} callback - Optional callback to remove. If none is defined,\n * remove all callbacks for the message.\n */\n\n }, {\n key: "stopListening",\n value: function stopListening(message, callback) {\n this.GlobalMessenger.stopListening(message, callback);\n }\n /**\n * De-register callback(s) from being executed on the global messengerr instance\n * when messages matching the given regular expression are received.\n *\n * @param {Regexp} regexp - regexp - The regular expression to filter messages with.\n * @param {Function=} callback - Optional callback to remove. If none is defined,\n * remove all callbacks for messages matching the regular expression.\n */\n\n }, {\n key: "stopListeningByRegexp",\n value: function stopListeningByRegexp(regexp, callback) {\n var _this2 = this;\n\n var messages = Object.keys(this.GlobalMessenger._callbacks).filter(function (message) {\n return regexp.test(message);\n });\n messages.forEach(function (message) {\n _this2.stopListening(message, callback);\n });\n }\n /**\n * Prevent any functions from being executed when any message is received for\n * the global Messenger instance.\n *\n * @static\n */\n\n }, {\n key: "stopListeningToAll",\n value: function stopListeningToAll() {\n this.GlobalMessenger.stopListeningToAll();\n }\n /**\n * Send a message, causing listener functions for the message on the global Messenger\n * instance to be executed.\n *\n * @static\n *\n * @param {string} message - The message to emit.\n * @param {any=} value - Optional argument to pass to listener callbacks.\n */\n\n }, {\n key: "emit",\n value: function emit(message, value) {\n this.GlobalMessenger.emit(message, value);\n }\n }]);\n\n return Messenger;\n}();\n\nObject.defineProperties(Messenger_Messenger, {\n GlobalMessenger: {\n value: new Messenger_Messenger(),\n writable: false\n },\n EVENTS: {\n value: {},\n writable: false\n }\n});\n/* harmony default export */ var core_Messenger = (Messenger_Messenger);\n// CONCATENATED MODULE: ./src/core/AbstractHostFeature.js\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || AbstractHostFeature_unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\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."); }\n\nfunction AbstractHostFeature_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return AbstractHostFeature_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return AbstractHostFeature_arrayLikeToArray(o, minLen); }\n\nfunction AbstractHostFeature_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction AbstractHostFeature_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction AbstractHostFeature_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction AbstractHostFeature_createClass(Constructor, protoProps, staticProps) { if (protoProps) AbstractHostFeature_defineProperties(Constructor.prototype, protoProps); if (staticProps) AbstractHostFeature_defineProperties(Constructor, staticProps); return Constructor; }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/**\r\n * Base class for all host features. Keeps a reference to the host object managing\r\n * the feature.\r\n *\r\n * @abstract\r\n *\r\n * @property {Object} EVENTS - Built-in messages that the feature emits. When the\r\n * feature is added to a {@link core/HostObject}, event names will be prefixed by the\r\n * name of the feature class + \'.\'.\r\n * @property {string} [EVENTS.update=onUpdate] - Message that is emitted after\r\n * each call to [update]{@link AbstractHostFeature#update}.\r\n * @property {Object} SERVICES - Any AWS services that are necessary for the\r\n * feature to function.\r\n */\n\nvar AbstractHostFeature_AbstractHostFeature = /*#__PURE__*/function () {\n /**\r\n * @constructor\r\n *\r\n * @param {core/HostObject} host - The HostObject managing the feature.\r\n */\n function AbstractHostFeature(host) {\n AbstractHostFeature_classCallCheck(this, AbstractHostFeature);\n\n this._host = host;\n }\n /**\r\n * Adds a namespace to the host with the name of the feature to contain properties\r\n * and methods from the feature that users of the host need access to.\r\n */\n\n\n AbstractHostFeature_createClass(AbstractHostFeature, [{\n key: "installApi",\n value: function installApi() {\n var _this = this;\n\n var events = {};\n var api = {\n EVENTS: events\n }; // Add the class name to event names\n\n Object.entries(this.constructor.EVENTS).forEach(function (_ref) {\n var _ref2 = _slicedToArray(_ref, 2),\n name = _ref2[0],\n value = _ref2[1];\n\n events[name] = "".concat(_this.constructor.name, ".").concat(value);\n });\n this._host[this.constructor.name] = api;\n return api;\n }\n /**\r\n * Gets the host that manages the feature.\r\n *\r\n * @readonly\r\n */\n\n }, {\n key: "host",\n get: function get() {\n return this._host;\n }\n /**\r\n * Gets the engine owner object of the host.\r\n *\r\n * @readonly\r\n */\n\n }, {\n key: "owner",\n get: function get() {\n return this._host.owner;\n }\n /**\r\n * Listen to a feature message from the host object.\r\n *\r\n * @param {string} message - Message to listen for.\r\n * @param {Function} callback - The callback to execute when the message is received.\r\n */\n\n }, {\n key: "listenTo",\n value: function listenTo(message, callback) {\n this._host.listenTo(message, callback);\n }\n /**\r\n * Listen to a feature message from the global messenger. Feature messages will\r\n * be prefixed with the class name of the feature.\r\n *\r\n * @param {string} message - Message to listen for.\r\n * @param {Function} callback - The callback to execute when the message is received.\r\n */\n\n }, {\n key: "stopListening",\n value:\n /**\r\n * Stop listening to a message from the host object.\r\n *\r\n * @param {string} message - Message to stop listening for.\r\n * @param {Function=} callback - Optional callback to remove. If none is defined,\r\n * remove all callbacks for the message.\r\n */\n function stopListening(message, callback) {\n this._host.stopListening(message, callback);\n }\n /**\r\n * Stop listening to a message from the global messenger.\r\n *\r\n * @param {string} message - Message to stop listening for.\r\n * @param {Function=} callback - Optional callback to remove. If none is defined,\r\n * remove all callbacks for the message.\r\n */\n\n }, {\n key: "stopListeningByRegexp",\n value:\n /**\r\n * Stop listening to a message matching the given regular expression from the\r\n * host object.\r\n *\r\n * @param {Regexp} regexp - The regular expression to stop listening for.\r\n * @param {Function=} callback - Optional callback to remove. If none is defined,\r\n * remove all callbacks for the message.\r\n */\n function stopListeningByRegexp(regexp, callback) {\n this._host.stopListeningByRegexp(regexp, callback);\n }\n /**\r\n * Stop listening to a message matching the given regular expression from the\r\n * global messenger.\r\n *\r\n * @param {Regexp} regexp - The regular expression to stop listening for.\r\n * @param {Function=} callback - Optional callback to remove. If none is defined,\r\n * remove all callbacks for the message.\r\n */\n\n }, {\n key: "stopListeningToAll",\n value:\n /**\r\n * Stop listening to all messages.\r\n */\n function stopListeningToAll() {\n this._host.stopListeningToAll();\n }\n /**\r\n * Stop listening to all feature messages.\r\n */\n\n }, {\n key: "emit",\n value:\n /**\r\n * Emit feature messages from the host. Feature messages will be prefixed with\r\n * the class name of the feature.\r\n *\r\n * @param {string} message - The message to emit.\r\n * @param {any=} value - Optional parameter to pass to listener callbacks.\r\n */\n function emit(message, value) {\n message = "".concat(this.constructor.name, ".").concat(message);\n\n this._host.emit(message, value);\n }\n /**\r\n * Emit feature messages from the global messenger. Feature messages will be prefixed\r\n * with the class name of the feature.\r\n *\r\n * @param {string} message - The message to emit.\r\n * @param {any=} value - Optional parameter to pass to listener callbacks.\r\n */\n\n }, {\n key: "update",\n value:\n /**\r\n * Executes each time the host is updated.\r\n *\r\n * @param {number} deltaTime - Amount of time since the last host update was\r\n * called.\r\n */\n function update(deltaTime) {\n this.emit(this.constructor.EVENTS.update, deltaTime);\n }\n /**\r\n * Clean up once the feature is no longer in use. Remove the feature namespace\r\n * from the host and remove reference to the host.\r\n */\n\n }, {\n key: "discard",\n value: function discard() {\n var _this2 = this;\n\n Object.keys(this._host[this.constructor.name]).forEach(function (name) {\n delete _this2._host[_this2.constructor.name][name];\n });\n delete this._host[this.constructor.name];\n delete this._host;\n }\n /**\r\n * Applies a sequence of mixin class factory functions to this class and\r\n * returns the result. Each function is expected to return a class that\r\n * extends the class it was given. The functions are applied in the order\r\n * that parameters are given, meaning that the first factory will\r\n * extend this base class.\r\n *\r\n * @param {...Function} mixinClassFactories Class factory functions that will\r\n * be applied.\r\n *\r\n * @returns {Class} A class that is the result of applying the factory functions.\r\n * The resulting class will always inherit from AbstractHostFeature.\r\n */\n\n }], [{\n key: "listenTo",\n value: function listenTo(message, callback) {\n message = "".concat(this.name, ".").concat(message);\n core_Messenger.listenTo(message, callback);\n }\n }, {\n key: "stopListening",\n value: function stopListening(message, callback) {\n message = "".concat(this.name, ".").concat(message);\n core_Messenger.stopListening(message, callback);\n }\n }, {\n key: "stopListeningByRegexp",\n value: function stopListeningByRegexp(regexp, callback) {\n regexp = new RegExp("^".concat(this.name, ".").concat(regexp.source.replace(/\\^/, \'\')));\n core_Messenger.stopListeningByRegexp(regexp, callback);\n }\n }, {\n key: "stopListeningToAll",\n value: function stopListeningToAll() {\n core_Messenger.stopListeningByRegexp(new RegExp("^".concat(this.name, ".")));\n }\n }, {\n key: "emit",\n value: function emit(message, value) {\n message = "".concat(this.name, ".").concat(message);\n core_Messenger.emit(message, value);\n }\n }, {\n key: "mix",\n value: function mix() {\n var ResultClass = this;\n\n for (var _len = arguments.length, mixinClassFactories = new Array(_len), _key = 0; _key < _len; _key++) {\n mixinClassFactories[_key] = arguments[_key];\n }\n\n mixinClassFactories.forEach(function (mixinClassFactory) {\n ResultClass = mixinClassFactory(ResultClass);\n });\n return ResultClass;\n }\n }]);\n\n return AbstractHostFeature;\n}();\n\nObject.defineProperties(AbstractHostFeature_AbstractHostFeature, {\n EVENTS: {\n value: {\n update: \'onUpdate\'\n },\n writable: false\n },\n SERVICES: {\n value: {},\n writable: false\n }\n});\n/* harmony default export */ var core_AbstractHostFeature = (AbstractHostFeature_AbstractHostFeature);\n// CONCATENATED MODULE: ./src/core/HostObject.js\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction HostObject_construct(Parent, args, Class) { if (HostObject_isNativeReflectConstruct()) { HostObject_construct = Reflect.construct; } else { HostObject_construct = function _construct(Parent, args, Class) { var a = [null]; a.push.apply(a, args); var Constructor = Function.bind.apply(Parent, a); var instance = new Constructor(); if (Class) HostObject_setPrototypeOf(instance, Class.prototype); return instance; }; } return HostObject_construct.apply(null, arguments); }\n\nfunction HostObject_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { HostObject_typeof = function _typeof(obj) { return typeof obj; }; } else { HostObject_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return HostObject_typeof(obj); }\n\nfunction HostObject_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction HostObject_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction HostObject_createClass(Constructor, protoProps, staticProps) { if (protoProps) HostObject_defineProperties(Constructor.prototype, protoProps); if (staticProps) HostObject_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction HostObject_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) HostObject_setPrototypeOf(subClass, superClass); }\n\nfunction HostObject_setPrototypeOf(o, p) { HostObject_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return HostObject_setPrototypeOf(o, p); }\n\nfunction HostObject_createSuper(Derived) { var hasNativeReflectConstruct = HostObject_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = HostObject_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = HostObject_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return HostObject_possibleConstructorReturn(this, result); }; }\n\nfunction HostObject_possibleConstructorReturn(self, call) { if (call && (HostObject_typeof(call) === "object" || typeof call === "function")) { return call; } return HostObject_assertThisInitialized(self); }\n\nfunction HostObject_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction HostObject_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction HostObject_getPrototypeOf(o) { HostObject_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return HostObject_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n/**\r\n * Object that manages access to all Host features. Contains a reference to\r\n * engine-specific visuals if applicable.\r\n *\r\n * @extends core/Messenger\r\n * @alias core/HostObject\r\n *\r\n * @property {Object} EVENTS - Built-in messages that the Messenger emits.\r\n * @property {string} [EVENTS.update=\'onUpdate\'] - Message that is emitted after\r\n * each call to [update]{@link core/HostObject#update}.\r\n * @property {string} [EVENTS.addFeature=\'onAddFeature\'] - Message that is emitted\r\n * after each call to [addFeature]{@link core/HostObject#addFeature}.\r\n * @property {string} [EVENTS.removeFeature=\'onRemoveFeature\'] - Message that is emitted\r\n * after each call to [removeFeature]{@link core/HostObject#removeFeature}.\r\n */\n\nvar HostObject_HostObject = /*#__PURE__*/function (_Messenger) {\n HostObject_inherits(HostObject, _Messenger);\n\n var _super = HostObject_createSuper(HostObject);\n\n /**\r\n * @constructor\r\n *\r\n * @param {Object=} options - Options for the host.\r\n * @param {Object=} options.owner - Optional engine-specific owner of the host.\r\n */\n function HostObject() {\n var _this;\n\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n _ref$owner = _ref.owner,\n owner = _ref$owner === void 0 ? {} : _ref$owner;\n\n HostObject_classCallCheck(this, HostObject);\n\n // If an owner is specified, use its id for messaging\n _this = _super.call(this, owner.id);\n _this._owner = owner;\n _this._features = {};\n _this._waits = [];\n _this._lastUpdate = _this.now;\n return _this;\n }\n /**\r\n * Gets the engine owner object of the host.\r\n *\r\n * @readonly\r\n * @type {Object}\r\n */\n\n\n HostObject_createClass(HostObject, [{\n key: "owner",\n get: function get() {\n return this._owner;\n }\n /**\r\n * Gets the current time in milliseconds.\r\n *\r\n * @readonly\r\n * @type {number}\r\n */\n\n }, {\n key: "now",\n get: function get() {\n return Date.now();\n }\n /**\r\n * Gets the amount of time in milliseconds since update was last called.\r\n *\r\n * @readonly\r\n * @type {number}\r\n */\n\n }, {\n key: "deltaTime",\n get: function get() {\n return this.now - this._lastUpdate;\n }\n /**\r\n * This function should be called in the engine\'s render loop. Executes update\r\n * loops for all features.\r\n */\n\n }, {\n key: "update",\n value: function update() {\n var currentTime = this.now;\n var dt = this.deltaTime; // Progress stored waits\n\n this._waits.forEach(function (wait) {\n wait.execute(dt);\n }); // Update all features\n\n\n Object.values(this._features).forEach(function (feature) {\n feature.update(dt);\n }); // Notify listeners an update occured\n\n this.emit(this.constructor.EVENTS.update, dt);\n this._lastUpdate = currentTime;\n }\n /**\r\n * Return a deferred promise that will wait a given number of seconds before\r\n * resolving. The host will continuously update the wait promise during the\r\n * update loop until it resolves.\r\n *\r\n * @param {number} [seconds=0] - Number of seconds to wait before resolving.\r\n * @param {Object=} options - Optional options object\r\n * @param {Function} [options.onFinish] - Callback to execute once the wait time\r\n * is met.\r\n * @param {Function=} options.onProgress - Callback to execute each time the wait\r\n * time progresses towards the target number of seconds. The amount of progress\r\n * as a 0-1 percentage is passed as an argument.\r\n * @param {Function=} options.onCancel - Callback to execute if the user cancels\r\n * the wait before completion.\r\n * @param {Function=} options.onError - Callback to execute if the wait stops\r\n * because an error is encountered. The error message is passed as a parameter.\r\n *\r\n * @returns {Deferred}\r\n */\n\n }, {\n key: "wait",\n value: function wait(seconds) {\n var _this2 = this;\n\n var _ref2 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n onFinish = _ref2.onFinish,\n onProgress = _ref2.onProgress,\n onCancel = _ref2.onCancel,\n onError = _ref2.onError;\n\n var wait = core_Utils.wait(seconds, {\n onFinish: onFinish,\n onProgress: onProgress,\n onCancel: onCancel,\n onError: onError\n });\n\n this._waits.push(wait); // Once the wait promise is no longer pending remove it from the waits array\n\n\n var onComplete = function onComplete() {\n _this2._waits.splice(_this2._waits.indexOf(wait), 1);\n };\n\n wait.then(onComplete, onComplete);\n return wait;\n }\n /**\r\n * Instantiate a new Host feature and store it. Features must inherit from\r\n * AbstractHostFeature.\r\n *\r\n * @param {Class} FeatureClass - Class that will instantiate the feature. Must\r\n * extend {@link AbstractHostFeature}.\r\n * @param {boolean} [force=false] - Whether or not to overwrite an existing\r\n * feature if one of this type already exists on the object.\r\n * @param {...any} args - Additional arguments to pass to the FeatureClass\r\n * constructor. The HostObject will always be passed as the first argument.\r\n *\r\n * @returns {boolean} - Whether or not a feature was successfully added.\r\n */\n\n }, {\n key: "addFeature",\n value: function addFeature(FeatureClass) {\n var force = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n var inputType = HostObject_typeof(FeatureClass); // Make sure the FeatureClass can be executed\n\n\n if (inputType !== \'function\') {\n throw new Error("Cannot add feature to host ".concat(this.id, ". FeatureClass must be a class."));\n } // Make sure the feature is a host feature\n else if (!(FeatureClass.prototype instanceof core_AbstractHostFeature)) {\n throw new Error("Cannot add feature ".concat(FeatureClass.name, " to host ").concat(this.id, ". FeatureClass must extend AbstractHostFeature."));\n } // Check if the FeatureClass already exists on this object\n\n\n if (this._features[FeatureClass.name] !== undefined) {\n if (force) {\n console.warn("Feature ".concat(FeatureClass.name, " already exists on host ").concat(this.id, ". Existing feature will be overwritten."));\n } else {\n throw new Error("Feature ".concat(FeatureClass.name, " already exists on host ").concat(this.id, ". Use \'force\' argument to overwrite the feature."));\n }\n } // Initialize the feature\n\n\n for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n args[_key - 2] = arguments[_key];\n }\n\n var feature = HostObject_construct(FeatureClass, [this].concat(args));\n\n feature.installApi();\n this._features[FeatureClass.name] = feature;\n this.emit(this.constructor.EVENTS.addFeature, FeatureClass.name);\n return true;\n }\n /**\r\n * Remove a feature from the object.\r\n *\r\n * @param {string} typeName - Name of the type of feature to remove.\r\n *\r\n * @returns {boolean} - Whether or not a feature was successfully removed.\r\n */\n\n }, {\n key: "removeFeature",\n value: function removeFeature(typeName) {\n if (this._features[typeName] === undefined) {\n console.warn("Feature of type ".concat(typeName, " does not exist on host ").concat(this.id, ". No feature will be removed."));\n return false;\n } else {\n // Remove the feature\n this.emit(this.constructor.EVENTS.removeFeature, typeName);\n\n this._features[typeName].discard();\n\n delete this._features[typeName];\n return true;\n }\n }\n /**\r\n * Indicate whether a specified feature is installed on the host.\r\n *\r\n * @param {string} typeName - Name of the type of feature to look for.\r\n *\r\n * @returns {boolean}\r\n */\n\n }, {\n key: "hasFeature",\n value: function hasFeature(typeName) {\n return !!this._features[typeName];\n }\n /**\r\n * List the names of the features installed on the host.\r\n *\r\n * @returns {Array.}\r\n */\n\n }, {\n key: "listFeatures",\n value: function listFeatures() {\n return Object.keys(this._features);\n }\n }]);\n\n return HostObject;\n}(core_Messenger);\n\nObject.defineProperty(HostObject_HostObject, \'EVENTS\', {\n value: _objectSpread(_objectSpread({}, Object.getPrototypeOf(HostObject_HostObject).EVENTS), {}, {\n update: \'onUpdate\',\n addFeature: \'onAddFeature\',\n removeFeature: \'onRemoveFeature\'\n }),\n writable: false\n});\n/* harmony default export */ var core_HostObject = (HostObject_HostObject);\n// CONCATENATED MODULE: ./src/core/animpack/Easing.js\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/**\n * @typedef {Object} EasingObject Object containing easing functions\n * @property {Function} In - Easing \'In\' function. Should use the signature (k:number):number.\n * @property {Function} Out - Easing \'Out\' function. Should use the signature (k:number):number.\n * @property {Function} InOut - Easing \'InOut\' function. Should use the signature (k:number):number.\n */\n\n/**\n * Linear Easing\n * @type {EasingObject}\n */\nvar Linear = {\n None: function None(k) {\n return k;\n },\n In: function In(k) {\n return k;\n },\n Out: function Out(k) {\n return k;\n },\n InOut: function InOut(k) {\n return k;\n }\n};\n/**\n * Quadratic Easing\n * @type {EasingObject}\n */\n\nvar Quadratic = {\n In: function In(k) {\n return k * k;\n },\n Out: function Out(k) {\n return k * (2 - k);\n },\n InOut: function InOut(k) {\n k *= 2;\n\n if (k < 1) {\n return 0.5 * k * k;\n }\n\n return -0.5 * (--k * (k - 2) - 1);\n }\n};\n/**\n * Cubic Easing\n * @type {EasingObject}\n */\n\nvar Cubic = {\n In: function In(k) {\n return k * k * k;\n },\n Out: function Out(k) {\n return --k * k * k + 1;\n },\n InOut: function InOut(k) {\n k *= 2;\n\n if (k < 1) {\n return 0.5 * k * k * k;\n }\n\n k -= 2;\n return 0.5 * (k * k * k + 2);\n }\n};\n/**\n * Quartic Easing\n * @type {EasingObject}\n */\n\nvar Quartic = {\n In: function In(k) {\n return k * k * k * k;\n },\n Out: function Out(k) {\n return 1 - --k * k * k * k;\n },\n InOut: function InOut(k) {\n k *= 2;\n\n if (k < 1) {\n return 0.5 * k * k * k * k;\n }\n\n k -= 2;\n return -0.5 * (k * k * k * k - 2);\n }\n};\n/**\n * Quintic Easing\n * @type {EasingObject}\n */\n\nvar Quintic = {\n In: function In(k) {\n return k * k * k * k * k;\n },\n Out: function Out(k) {\n return --k * k * k * k * k + 1;\n },\n InOut: function InOut(k) {\n k *= 2;\n\n if (k < 1) {\n return 0.5 * k * k * k * k * k;\n }\n\n k -= 2;\n return 0.5 * (k * k * k * k * k + 2);\n }\n};\n/**\n * Sinusoidal Easing\n * @type {EasingObject}\n */\n\nvar Sinusoidal = {\n In: function In(k) {\n return 1 - Math.cos(k * Math.PI / 2);\n },\n Out: function Out(k) {\n return Math.sin(k * Math.PI / 2);\n },\n InOut: function InOut(k) {\n return 0.5 * (1 - Math.cos(Math.PI * k));\n }\n};\n/**\n * Exponential Easing\n * @type {EasingObject}\n */\n\nvar Exponential = {\n In: function In(k) {\n return k === 0 ? 0 : Math.pow(1024, k - 1);\n },\n Out: function Out(k) {\n return k === 1 ? 1 : 1 - Math.pow(2, -10 * k);\n },\n InOut: function InOut(k) {\n if (k === 0) {\n return 0;\n }\n\n if (k === 1) {\n return 1;\n }\n\n k *= 2;\n\n if (k < 1) {\n return 0.5 * Math.pow(1024, k - 1);\n }\n\n return 0.5 * (-Math.pow(2, -10 * (k - 1)) + 2);\n }\n};\n/**\n * Circular Easing\n * @type {EasingObject}\n */\n\nvar Circular = {\n In: function In(k) {\n return 1 - Math.sqrt(1 - k * k);\n },\n Out: function Out(k) {\n return Math.sqrt(1 - --k * k);\n },\n InOut: function InOut(k) {\n k *= 2;\n\n if (k < 1) {\n return -0.5 * (Math.sqrt(1 - k * k) - 1);\n }\n\n k -= 2;\n return 0.5 * (Math.sqrt(1 - k * k) + 1);\n }\n};\n/**\n * Elastic Easing\n * @type {EasingObject}\n */\n\nvar Elastic = {\n In: function In(k) {\n var s;\n var a = 0.1;\n var p = 0.4;\n\n if (k === 0) {\n return 0;\n }\n\n if (k === 1) {\n return 1;\n }\n\n if (!a || a < 1) {\n a = 1;\n s = p / 4;\n } else {\n s = p * Math.asin(1 / a) / (2 * Math.PI);\n }\n\n k -= 1;\n return -(a * Math.pow(2, 10 * k) * Math.sin((k - s) * (2 * Math.PI) / p));\n },\n Out: function Out(k) {\n var s;\n var a = 0.1;\n var p = 0.4;\n\n if (k === 0) {\n return 0;\n }\n\n if (k === 1) {\n return 1;\n }\n\n if (!a || a < 1) {\n a = 1;\n s = p / 4;\n } else {\n s = p * Math.asin(1 / a) / (2 * Math.PI);\n }\n\n return a * Math.pow(2, -10 * k) * Math.sin((k - s) * (2 * Math.PI) / p) + 1;\n },\n InOut: function InOut(k) {\n var s;\n var a = 0.1;\n var p = 0.4;\n\n if (k === 0) {\n return 0;\n }\n\n if (k === 1) {\n return 1;\n }\n\n if (!a || a < 1) {\n a = 1;\n s = p / 4;\n } else {\n s = p * Math.asin(1 / a) / (2 * Math.PI);\n }\n\n k *= 2;\n\n if (k < 1) {\n k -= 1;\n return -0.5 * (a * Math.pow(2, 10 * k) * Math.sin((k - s) * (2 * Math.PI) / p));\n }\n\n k -= 1;\n return a * Math.pow(2, -10 * k) * Math.sin((k - s) * (2 * Math.PI) / p) * 0.5 + 1;\n }\n};\n/**\n * Back Easing\n * @type {EasingObject}\n */\n\nvar Back = {\n In: function In(k) {\n var s = 1.70158;\n return k * k * ((s + 1) * k - s);\n },\n Out: function Out(k) {\n var s = 1.70158;\n return --k * k * ((s + 1) * k + s) + 1;\n },\n InOut: function InOut(k) {\n var s = 1.70158 * 1.525;\n k *= 2;\n\n if (k < 1) {\n return 0.5 * (k * k * ((s + 1) * k - s));\n }\n\n k -= 2;\n return 0.5 * (k * k * ((s + 1) * k + s) + 2);\n }\n};\n/**\n * Bounce Easing\n * @type {EasingObject}\n */\n\nvar Bounce = {\n In: function In(k) {\n return 1 - Bounce.Out(1 - k);\n },\n Out: function Out(k) {\n if (k < 1 / 2.75) {\n return 7.5625 * k * k;\n } else if (k < 2 / 2.75) {\n k -= 1.5;\n return 7.5625 * (k / 2.75) * k + 0.75;\n } else if (k < 2.5 / 2.75) {\n k -= 2.25;\n return 7.5625 * (k / 2.75) * k + 0.9375;\n }\n\n k -= 2.625;\n return 7.5625 * (k / 2.75) * k + 0.984375;\n },\n InOut: function InOut(k) {\n if (k < 0.5) {\n return Bounce.In(k * 2) * 0.5;\n }\n\n return Bounce.Out(k * 2 - 1) * 0.5 + 0.5;\n }\n};\n// CONCATENATED MODULE: ./src/core/FeatureDependentInterface.js\nfunction FeatureDependentInterface_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { FeatureDependentInterface_typeof = function _typeof(obj) { return typeof obj; }; } else { FeatureDependentInterface_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return FeatureDependentInterface_typeof(obj); }\n\nfunction FeatureDependentInterface_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction FeatureDependentInterface_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { FeatureDependentInterface_ownKeys(Object(source), true).forEach(function (key) { FeatureDependentInterface_defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { FeatureDependentInterface_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction FeatureDependentInterface_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction FeatureDependentInterface_slicedToArray(arr, i) { return FeatureDependentInterface_arrayWithHoles(arr) || FeatureDependentInterface_iterableToArrayLimit(arr, i) || FeatureDependentInterface_unsupportedIterableToArray(arr, i) || FeatureDependentInterface_nonIterableRest(); }\n\nfunction FeatureDependentInterface_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."); }\n\nfunction FeatureDependentInterface_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return FeatureDependentInterface_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return FeatureDependentInterface_arrayLikeToArray(o, minLen); }\n\nfunction FeatureDependentInterface_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction FeatureDependentInterface_iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction FeatureDependentInterface_arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction _get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return _get(target, property, receiver || target); }\n\nfunction _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = FeatureDependentInterface_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction FeatureDependentInterface_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) FeatureDependentInterface_setPrototypeOf(subClass, superClass); }\n\nfunction FeatureDependentInterface_setPrototypeOf(o, p) { FeatureDependentInterface_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return FeatureDependentInterface_setPrototypeOf(o, p); }\n\nfunction FeatureDependentInterface_createSuper(Derived) { var hasNativeReflectConstruct = FeatureDependentInterface_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = FeatureDependentInterface_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = FeatureDependentInterface_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return FeatureDependentInterface_possibleConstructorReturn(this, result); }; }\n\nfunction FeatureDependentInterface_possibleConstructorReturn(self, call) { if (call && (FeatureDependentInterface_typeof(call) === "object" || typeof call === "function")) { return call; } return FeatureDependentInterface_assertThisInitialized(self); }\n\nfunction FeatureDependentInterface_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction FeatureDependentInterface_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction FeatureDependentInterface_getPrototypeOf(o) { FeatureDependentInterface_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return FeatureDependentInterface_getPrototypeOf(o); }\n\nfunction FeatureDependentInterface_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction FeatureDependentInterface_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction FeatureDependentInterface_createClass(Constructor, protoProps, staticProps) { if (protoProps) FeatureDependentInterface_defineProperties(Constructor.prototype, protoProps); if (staticProps) FeatureDependentInterface_defineProperties(Constructor, staticProps); return Constructor; }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/* eslint-disable no-unused-vars */\n\n/* eslint-disable max-classes-per-file */\n\n/**\n * Class factory interface for features that are dependent on other features being\n * present on the host. Event dependencies will be listened for when a feature of\n * matching type is added to the host and will stop being listened for when one\n * is removed. If the feature is already present when constructed, events will\n * be listened for right away.\n *\n * @interface\n *\n * @property {Object} EVENT_DEPENDENCIES - Events that the feature should start/stop\n * listening for when a feature of type FeatureName is added/removed from the host.\n * Event dependencies should follow the signature:\n * { FeatureName: { eventName: callbackName, ... }, ... }\n */\n\nvar FeatureDependentInterface_FeatureDependentInterface = /*#__PURE__*/function () {\n function FeatureDependentInterface() {\n FeatureDependentInterface_classCallCheck(this, FeatureDependentInterface);\n }\n\n FeatureDependentInterface_createClass(FeatureDependentInterface, [{\n key: "_onFeatureAdded",\n value:\n /**\n * Start listening for event dependencies that match the given feature type.\n *\n * @private\n *\n * @param {string} typeName - type of feature to listen for.\n */\n function _onFeatureAdded(typeName) {}\n /**\n * Stop listening for event dependencies that match the given feature type.\n *\n * @private\n *\n * @param {string} typeName - type of feature to stop listening for.\n */\n\n }, {\n key: "_onFeatureRemoved",\n value: function _onFeatureRemoved(typeName) {}\n /**\n * @augments {@link AbstractHostFeature#discard}\n */\n\n }, {\n key: "discard",\n value: function discard() {}\n /**\n * Creates a class that implements {@link FeatureDependentInterface} and extends\n * a specified base class.\n *\n * @param {Class} BaseClass - The class to extend.\n *\n * @return {Class} A class that extends `BaseClass` and implements {@link FeatureDependentInterface}.\n */\n\n }], [{\n key: "Mixin",\n value: function Mixin(BaseClass) {\n var FeatureDependentMixin = /*#__PURE__*/function (_BaseClass) {\n FeatureDependentInterface_inherits(FeatureDependentMixin, _BaseClass);\n\n var _super = FeatureDependentInterface_createSuper(FeatureDependentMixin);\n\n function FeatureDependentMixin(host) {\n var _this;\n\n FeatureDependentInterface_classCallCheck(this, FeatureDependentMixin);\n\n _this = _super.call(this, host);\n _this._host = host; // No need to listen for events if the mixin is in the prototype chain multiple times\n\n if (!_this._initialized) {\n _this._initialized = true; // Start listening for feature events\n\n _this._onFeatureAdded = _this._onFeatureAdded.bind(FeatureDependentInterface_assertThisInitialized(_this));\n _this._onFeatureRemoved = _this._onFeatureRemoved.bind(FeatureDependentInterface_assertThisInitialized(_this));\n\n _this._host.listenTo(core_HostObject.EVENTS.addFeature, _this._onFeatureAdded);\n\n _this._host.listenTo(core_HostObject.EVENTS.removeFeature, _this._onFeatureRemoved); // Register features that already exist\n\n\n Object.keys(_this.constructor.EVENT_DEPENDENCIES).forEach(function (typeName) {\n if (_this._host[typeName] !== undefined) {\n _this._onFeatureAdded(typeName);\n }\n });\n }\n\n return _this;\n }\n\n FeatureDependentInterface_createClass(FeatureDependentMixin, [{\n key: "_onFeatureAdded",\n value: function _onFeatureAdded(typeName) {\n var _this2 = this;\n\n if (this.constructor.EVENT_DEPENDENCIES[typeName] !== undefined) {\n var events = this.constructor.EVENT_DEPENDENCIES[typeName];\n Object.entries(events).forEach(function (_ref) {\n var _ref2 = FeatureDependentInterface_slicedToArray(_ref, 2),\n eventName = _ref2[0],\n callback = _ref2[1];\n\n _this2[callback] = _this2[callback].bind(_this2);\n\n _this2._host.listenTo(_this2._host[typeName].EVENTS[eventName], _this2[callback]);\n });\n }\n }\n }, {\n key: "_onFeatureRemoved",\n value: function _onFeatureRemoved(typeName) {\n var _this3 = this;\n\n if (this.constructor.EVENT_DEPENDENCIES[typeName] !== undefined) {\n var events = this.constructor.EVENT_DEPENDENCIES[typeName];\n Object.entries(events).forEach(function (_ref3) {\n var _ref4 = FeatureDependentInterface_slicedToArray(_ref3, 2),\n eventName = _ref4[0],\n callback = _ref4[1];\n\n _this3._host.stopListening(_this3._host[typeName].EVENTS[eventName], _this3[callback]);\n });\n }\n }\n }, {\n key: "discard",\n value: function discard() {\n var _this4 = this;\n\n // Stop listening for feature events\n this._host.stopListening(core_HostObject.EVENTS.addFeature, this._onFeatureAdded);\n\n this._host.stopListening(core_HostObject.EVENTS.removeFeature, this._onFeatureRemoved); // Stop listening to feature-specific events\n\n\n Object.keys(this.constructor.EVENT_DEPENDENCIES).forEach(function (typeName) {\n if (_this4._host[typeName] !== undefined) {\n _this4._onFeatureRemoved(typeName);\n }\n });\n\n _get(FeatureDependentInterface_getPrototypeOf(FeatureDependentMixin.prototype), "discard", this).call(this);\n }\n }]);\n\n return FeatureDependentMixin;\n }(BaseClass);\n\n var EVENT_DEPENDENCIES = BaseClass.EVENT_DEPENDENCIES || {};\n Object.defineProperties(FeatureDependentMixin, {\n EVENT_DEPENDENCIES: {\n value: FeatureDependentInterface_objectSpread({}, EVENT_DEPENDENCIES),\n writable: false\n }\n });\n return FeatureDependentMixin;\n }\n }]);\n\n return FeatureDependentInterface;\n}();\n/**\n * Event dependencies should follow the signature:\n * {\n * FeatureName: {\n * // Events that the feature should start/stop listening for when a feature\n * // of type FeatureName is added/removed from the host\n * {\n * eventName: callbackName,\n * ...\n * },\n * }\n * }\n */\n\n\nObject.defineProperties(FeatureDependentInterface_FeatureDependentInterface, {\n EVENT_DEPENDENCIES: {\n value: {},\n writable: false\n }\n});\n/* harmony default export */ var core_FeatureDependentInterface = (FeatureDependentInterface_FeatureDependentInterface);\n// CONCATENATED MODULE: ./src/core/animpack/AnimationFeatureDependentInterface.js\nfunction AnimationFeatureDependentInterface_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { AnimationFeatureDependentInterface_typeof = function _typeof(obj) { return typeof obj; }; } else { AnimationFeatureDependentInterface_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return AnimationFeatureDependentInterface_typeof(obj); }\n\nfunction AnimationFeatureDependentInterface_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction AnimationFeatureDependentInterface_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { AnimationFeatureDependentInterface_ownKeys(Object(source), true).forEach(function (key) { AnimationFeatureDependentInterface_defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { AnimationFeatureDependentInterface_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction AnimationFeatureDependentInterface_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction AnimationFeatureDependentInterface_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction AnimationFeatureDependentInterface_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction AnimationFeatureDependentInterface_createClass(Constructor, protoProps, staticProps) { if (protoProps) AnimationFeatureDependentInterface_defineProperties(Constructor.prototype, protoProps); if (staticProps) AnimationFeatureDependentInterface_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction AnimationFeatureDependentInterface_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) AnimationFeatureDependentInterface_setPrototypeOf(subClass, superClass); }\n\nfunction AnimationFeatureDependentInterface_setPrototypeOf(o, p) { AnimationFeatureDependentInterface_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return AnimationFeatureDependentInterface_setPrototypeOf(o, p); }\n\nfunction AnimationFeatureDependentInterface_createSuper(Derived) { var hasNativeReflectConstruct = AnimationFeatureDependentInterface_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = AnimationFeatureDependentInterface_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = AnimationFeatureDependentInterface_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return AnimationFeatureDependentInterface_possibleConstructorReturn(this, result); }; }\n\nfunction AnimationFeatureDependentInterface_possibleConstructorReturn(self, call) { if (call && (AnimationFeatureDependentInterface_typeof(call) === "object" || typeof call === "function")) { return call; } return AnimationFeatureDependentInterface_assertThisInitialized(self); }\n\nfunction AnimationFeatureDependentInterface_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction AnimationFeatureDependentInterface_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction AnimationFeatureDependentInterface_getPrototypeOf(o) { AnimationFeatureDependentInterface_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return AnimationFeatureDependentInterface_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/* eslint-disable no-unused-vars */\n\n/* eslint-disable max-classes-per-file */\n\n/**\n * Class factory interface for features that are dependent on the AnimationFeature\n * being present on the host. Layer and animation events will automatically be\n * listened for once a AnimationFeature is added to the host and stopped once it\n * is removed.\n *\n * @interface\n * @extends FeatureDependentInterface\n *\n * @property {Object} EVENT_DEPENDENCIES - Events that the feature should start/stop\n * listening for when a feature of type FeatureName is added/removed from the host.\n * @property {Object} EVENT_DEPENDENCIES.AnimationFeature - Events that are\n * specific to the AnimationFeature.\n * @property {string} [EVENT_DEPENDENCIES.AnimationFeature.addLayer=\'_onLayerAdded\'] -\n * The name of the method that will be executed when AnimationFeature addLayer\n * events are emitted.\n * @property {string} [EVENT_DEPENDENCIES.AnimationFeature.removeLayer=\'_onLayerRemoved\'] -\n * The name of the method that will be executed when AnimationFeature removeLayer\n * events are emitted.\n * @property {string} [EVENT_DEPENDENCIES.AnimationFeature.renameLayer=\'_onLayerRenamed\'] -\n * The name of the method that will be executed when AnimationFeature renameLayer\n * events are emitted.\n * @property {string} [EVENT_DEPENDENCIES.AnimationFeature.addAnimation=\'_onAnimationAdded\'] -\n * The name of the method that will be executed when AnimationFeature addAnimation\n * events are emitted.\n * @property {string} [EVENT_DEPENDENCIES.AnimationFeature.removeAnimation=\'_onAnimationRemoved\'] -\n * The name of the method that will be executed when AnimationFeature removeAnimation\n * events are emitted.\n * @property {string} [EVENT_DEPENDENCIES.AnimationFeature.renameAnimation=\'_onAnimationRenamed\'] -\n * The name of the method that will be executed when AnimationFeature renameAnimation\n * events are emitted.\n */\n\nvar AnimationFeatureDependentInterface_AnimationFeatureDependentInterface = /*#__PURE__*/function (_FeatureDependentInte) {\n AnimationFeatureDependentInterface_inherits(AnimationFeatureDependentInterface, _FeatureDependentInte);\n\n var _super = AnimationFeatureDependentInterface_createSuper(AnimationFeatureDependentInterface);\n\n function AnimationFeatureDependentInterface() {\n AnimationFeatureDependentInterface_classCallCheck(this, AnimationFeatureDependentInterface);\n\n return _super.apply(this, arguments);\n }\n\n AnimationFeatureDependentInterface_createClass(AnimationFeatureDependentInterface, [{\n key: "_onLayerAdded",\n value:\n /**\n * Executed when animation layer added events are caught.\n *\n * @private\n *\n * @param {string} name - Name of the layer that was added.\n */\n function _onLayerAdded(_ref) {\n var name = _ref.name;\n }\n /**\n * Executed when animation layer removed events are caught.\n *\n * @private\n *\n * @param {string} name - Name of the layer that was removed.\n */\n\n }, {\n key: "_onLayerRemoved",\n value: function _onLayerRemoved(_ref2) {\n var name = _ref2.name;\n }\n /**\n * Executed when animation layer renamed events are caught.\n *\n * @private\n *\n * @param {string} oldName - Name of the layer that was renamed.\n * @param {string} newName - New name of the layer.\n */\n\n }, {\n key: "_onLayerRenamed",\n value: function _onLayerRenamed(_ref3) {\n var oldName = _ref3.oldName,\n newName = _ref3.newName;\n }\n /**\n * Executed when animation added events are caught.\n *\n * @private\n *\n * @param {string} layerName - Name of the layer that an animation was added to.\n * @param {string} animationName - Name of the animation that was added.\n */\n\n }, {\n key: "_onAnimationAdded",\n value: function _onAnimationAdded(_ref4) {\n var layerName = _ref4.layerName,\n animationName = _ref4.animationName;\n }\n /**\n * Executed when animation removed events are caught.\n *\n * @private\n *\n * @param {string} layerName - Name of the layer that an animation was removed from.\n * @param {string} animationName - Name of the animation that was removed.\n */\n\n }, {\n key: "_onAnimationRemoved",\n value: function _onAnimationRemoved(_ref5) {\n var layerName = _ref5.layerName,\n animationName = _ref5.animationName;\n }\n /**\n * Executed when animation renamed events are caught.\n *\n * @private\n *\n * @param {string} layerName - Name of the layer that an animation belongs to.\n * @param {string} oldName - Name of the animation that was renamed.\n * @param {string} newName - New name of the animation.\n */\n\n }, {\n key: "_onAnimationRenamed",\n value: function _onAnimationRenamed(_ref6) {\n var layerName = _ref6.layerName,\n oldName = _ref6.oldName,\n newName = _ref6.newName;\n }\n /**\n * Creates a class that implements {@link AnimationFeatureDependentInterface}\n * and extends a specified base class.\n *\n * @param {Class} BaseClass - The class to extend.\n *\n * @return {Class} A class that extends `BaseClass` and implements {@link AnimationFeatureDependentInterface}.\n */\n\n }], [{\n key: "Mixin",\n value: function Mixin(BaseClass) {\n var ParentClass = core_FeatureDependentInterface.Mixin(BaseClass);\n\n var AnimationFeatureDependentMixin = /*#__PURE__*/function (_ParentClass) {\n AnimationFeatureDependentInterface_inherits(AnimationFeatureDependentMixin, _ParentClass);\n\n var _super2 = AnimationFeatureDependentInterface_createSuper(AnimationFeatureDependentMixin);\n\n function AnimationFeatureDependentMixin() {\n AnimationFeatureDependentInterface_classCallCheck(this, AnimationFeatureDependentMixin);\n\n return _super2.apply(this, arguments);\n }\n\n AnimationFeatureDependentInterface_createClass(AnimationFeatureDependentMixin, [{\n key: "_onLayerAdded",\n value: function _onLayerAdded(_ref7) {\n var name = _ref7.name;\n }\n }, {\n key: "_onLayerRemoved",\n value: function _onLayerRemoved(_ref8) {\n var name = _ref8.name;\n }\n }, {\n key: "_onLayerRenamed",\n value: function _onLayerRenamed(_ref9) {\n var oldName = _ref9.oldName,\n newName = _ref9.newName;\n }\n }, {\n key: "_onAnimationAdded",\n value: function _onAnimationAdded(_ref10) {\n var layerName = _ref10.layerName,\n animationName = _ref10.animationName;\n }\n }, {\n key: "_onAnimationRemoved",\n value: function _onAnimationRemoved(_ref11) {\n var layerName = _ref11.layerName,\n animationName = _ref11.animationName;\n }\n }, {\n key: "_onAnimationRenamed",\n value: function _onAnimationRenamed(_ref12) {\n var layerName = _ref12.layerName,\n oldName = _ref12.oldName,\n newName = _ref12.newName;\n }\n }]);\n\n return AnimationFeatureDependentMixin;\n }(ParentClass);\n\n Object.defineProperties(AnimationFeatureDependentMixin, {\n EVENT_DEPENDENCIES: {\n value: AnimationFeatureDependentInterface_objectSpread(AnimationFeatureDependentInterface_objectSpread({}, ParentClass.EVENT_DEPENDENCIES), AnimationFeatureDependentInterface.EVENT_DEPENDENCIES),\n writable: false\n }\n });\n return AnimationFeatureDependentMixin;\n }\n }]);\n\n return AnimationFeatureDependentInterface;\n}(core_FeatureDependentInterface);\n\nObject.defineProperties(AnimationFeatureDependentInterface_AnimationFeatureDependentInterface, {\n EVENT_DEPENDENCIES: {\n value: {\n AnimationFeature: {\n addLayer: \'_onLayerAdded\',\n removeLayer: \'_onLayerRemoved\',\n renameLayer: \'_onLayerRenamed\',\n addAnimation: \'_onAnimationAdded\',\n removeAnimation: \'_onAnimationRemoved\',\n renameAnimation: \'_onAnimationRenamed\'\n }\n },\n writable: false\n }\n});\n/* harmony default export */ var animpack_AnimationFeatureDependentInterface = (AnimationFeatureDependentInterface_AnimationFeatureDependentInterface);\n// CONCATENATED MODULE: ./src/core/animpack/ManagedAnimationLayerInterface.js\nfunction ManagedAnimationLayerInterface_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { ManagedAnimationLayerInterface_typeof = function _typeof(obj) { return typeof obj; }; } else { ManagedAnimationLayerInterface_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return ManagedAnimationLayerInterface_typeof(obj); }\n\nfunction ManagedAnimationLayerInterface_slicedToArray(arr, i) { return ManagedAnimationLayerInterface_arrayWithHoles(arr) || ManagedAnimationLayerInterface_iterableToArrayLimit(arr, i) || ManagedAnimationLayerInterface_unsupportedIterableToArray(arr, i) || ManagedAnimationLayerInterface_nonIterableRest(); }\n\nfunction ManagedAnimationLayerInterface_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."); }\n\nfunction ManagedAnimationLayerInterface_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return ManagedAnimationLayerInterface_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return ManagedAnimationLayerInterface_arrayLikeToArray(o, minLen); }\n\nfunction ManagedAnimationLayerInterface_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction ManagedAnimationLayerInterface_iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction ManagedAnimationLayerInterface_arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction ManagedAnimationLayerInterface_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction ManagedAnimationLayerInterface_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ManagedAnimationLayerInterface_ownKeys(Object(source), true).forEach(function (key) { ManagedAnimationLayerInterface_defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ManagedAnimationLayerInterface_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction ManagedAnimationLayerInterface_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction ManagedAnimationLayerInterface_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { ManagedAnimationLayerInterface_get = Reflect.get; } else { ManagedAnimationLayerInterface_get = function _get(target, property, receiver) { var base = ManagedAnimationLayerInterface_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return ManagedAnimationLayerInterface_get(target, property, receiver || target); }\n\nfunction ManagedAnimationLayerInterface_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = ManagedAnimationLayerInterface_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction ManagedAnimationLayerInterface_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction ManagedAnimationLayerInterface_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction ManagedAnimationLayerInterface_createClass(Constructor, protoProps, staticProps) { if (protoProps) ManagedAnimationLayerInterface_defineProperties(Constructor.prototype, protoProps); if (staticProps) ManagedAnimationLayerInterface_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction ManagedAnimationLayerInterface_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) ManagedAnimationLayerInterface_setPrototypeOf(subClass, superClass); }\n\nfunction ManagedAnimationLayerInterface_setPrototypeOf(o, p) { ManagedAnimationLayerInterface_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return ManagedAnimationLayerInterface_setPrototypeOf(o, p); }\n\nfunction ManagedAnimationLayerInterface_createSuper(Derived) { var hasNativeReflectConstruct = ManagedAnimationLayerInterface_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = ManagedAnimationLayerInterface_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = ManagedAnimationLayerInterface_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return ManagedAnimationLayerInterface_possibleConstructorReturn(this, result); }; }\n\nfunction ManagedAnimationLayerInterface_possibleConstructorReturn(self, call) { if (call && (ManagedAnimationLayerInterface_typeof(call) === "object" || typeof call === "function")) { return call; } return ManagedAnimationLayerInterface_assertThisInitialized(self); }\n\nfunction ManagedAnimationLayerInterface_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction ManagedAnimationLayerInterface_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction ManagedAnimationLayerInterface_getPrototypeOf(o) { ManagedAnimationLayerInterface_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return ManagedAnimationLayerInterface_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/* eslint-disable no-unused-vars */\n\n/* eslint-disable max-classes-per-file */\n\n/**\n * Class factory interface for that keeps track of layers and animations on a host.\n * Tracked assets are marked as inactive until layers and animations with matching\n * names are detected as present on the host.\n *\n * @interface\n * @extends AnimationFeatureDependentInterface\n *\n * @property {Object} DEFAULT_LAYER_OPTIONS - Default options to use when executing\n * {@link AnimationLayer} methods.\n * @property {number} [DEFAULT_LAYER_OPTIONS.blendTime=0.5] - Default time in seconds\n * to use when executing {@link AnimationLayer.setBlendWeight}.\n * @property {Object} [DEFAULT_LAYER_OPTIONS.animations={}] - Maps animation names\n * to default options objects to use for managed animations.\n */\n\nvar ManagedAnimationLayerInterface_ManagedAnimationLayerInterface = /*#__PURE__*/function (_AnimationFeatureDepe) {\n ManagedAnimationLayerInterface_inherits(ManagedAnimationLayerInterface, _AnimationFeatureDepe);\n\n var _super = ManagedAnimationLayerInterface_createSuper(ManagedAnimationLayerInterface);\n\n function ManagedAnimationLayerInterface() {\n ManagedAnimationLayerInterface_classCallCheck(this, ManagedAnimationLayerInterface);\n\n return _super.apply(this, arguments);\n }\n\n ManagedAnimationLayerInterface_createClass(ManagedAnimationLayerInterface, [{\n key: "registerLayer",\n value:\n /**\n * Start tracking keeping track of whether a layer with the given name is present\n * on the host.\n *\n * @param {string} name - Name of the layer to keep track of.\n * @param {Object=} options - Options for the layer.\n * @param {number=} options.blendTime - Default amount of time to use when\n * manipulating layer weights on this layer.\n * @param {Function=} options.easingFn - Default easing function to use when\n * manipulating layer weights on this layer.\n * @param {Object=} options.animations - Animations to keep track of on the layer.\n * Animations are represented as key/value pairs of animation names and their\n * options.\n */\n function registerLayer(name) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n }\n /**\n * Start tracking keeping track of whether an animation with the given name is\n * present on the host.\n *\n * @param {string} layerName - Name of the layer that will own the animation.\n * @param {string} animationName - Name of the animation to keep track of.\n * @param {Object=} options - Options for the animation.\n */\n\n }, {\n key: "registerAnimation",\n value: function registerAnimation(layerName, animationName) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n }\n /**\n * Set layer weights on tracked layers.\n *\n * @param {Function=} nameFilter - Predicate function to test each tracked layer\n * with. By default all layers will pass.\n * @param {number} weight - Weight value to set on layers.\n * @param {number=} seconds - Number of seconds it will take to reach the weight\n * on each layer. If undefined, each layers\' blendTime option is used.\n * @param {Function=} easingFn - Easing function to use when setting weight\n * on each layer. If undefined, each layers\' easingFn option is used.\n */\n\n }, {\n key: "setLayerWeights",\n value: function setLayerWeights() {\n var nameFilter = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : function () {\n return true;\n };\n var weight = arguments.length > 1 ? arguments[1] : undefined;\n var seconds = arguments.length > 2 ? arguments[2] : undefined;\n var easingFn = arguments.length > 3 ? arguments[3] : undefined;\n }\n /**\n * Set all tracked layers\' weights to 1.\n *\n * @param {number=} seconds - Number of seconds it will take to reach the weight\n * on each layer. If undefined, each layers\' blendTime option is used.\n * @param {Function=} easingFn - Easing function to use when setting weight\n * on each layer. If undefined, each layers\' easingFn option is used.\n */\n\n }, {\n key: "enable",\n value: function enable(seconds, easingFn) {}\n /**\n * Set all tracked layers\' weights to 0.\n *\n * @param {number=} seconds - Number of seconds it will take to reach the weight\n * on each layer. If undefined, each layers\' blendTime option is used.\n * @param {Function=} easingFn - Easing function to use when setting weight\n * on each layer. If undefined, each layers\' easingFn option is used.\n */\n\n }, {\n key: "disable",\n value: function disable(seconds, easingFn) {}\n /**\n * Creates a class that implements {@link ManagedAnimationLayerInterface}\n * and extends a specified base class.\n *\n * @param {Class} BaseClass - The class to extend.\n *\n * @return {Class} A class that extends `BaseClass` and implements {@link ManagedAnimationLayerInterface}.\n */\n\n }], [{\n key: "Mixin",\n value: function Mixin(BaseClass) {\n var ParentClass = animpack_AnimationFeatureDependentInterface.Mixin(BaseClass);\n\n var ManagedAnimationLayerMixin = /*#__PURE__*/function (_ParentClass) {\n ManagedAnimationLayerInterface_inherits(ManagedAnimationLayerMixin, _ParentClass);\n\n var _super2 = ManagedAnimationLayerInterface_createSuper(ManagedAnimationLayerMixin);\n\n function ManagedAnimationLayerMixin() {\n var _this;\n\n ManagedAnimationLayerInterface_classCallCheck(this, ManagedAnimationLayerMixin);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super2.call.apply(_super2, [this].concat(args));\n _this._managedLayers = {};\n return _this;\n }\n\n ManagedAnimationLayerInterface_createClass(ManagedAnimationLayerMixin, [{\n key: "_onFeatureAdded",\n value: function _onFeatureAdded(typeName) {\n var _this2 = this;\n\n ManagedAnimationLayerInterface_get(ManagedAnimationLayerInterface_getPrototypeOf(ManagedAnimationLayerMixin.prototype), "_onFeatureAdded", this).call(this, typeName);\n\n if (typeName !== \'AnimationFeature\') {\n return;\n }\n\n this._managedLayers = this._managedLayers || {}; // Detect new layers\n\n this._host.AnimationFeature.layers.forEach(function (name) {\n _this2._onLayerAdded({\n name: name\n });\n });\n }\n }, {\n key: "_onFeatureRemoved",\n value: function _onFeatureRemoved(typeName) {\n var _this3 = this;\n\n ManagedAnimationLayerInterface_get(ManagedAnimationLayerInterface_getPrototypeOf(ManagedAnimationLayerMixin.prototype), "_onFeatureRemoved", this).call(this, typeName);\n\n if (typeName !== \'AnimationFeature\') {\n return;\n }\n\n this._managedLayers = this._managedLayers || {}; // Deactivate the layers\n\n Object.keys(this._managedLayers).forEach(function (name) {\n _this3._onLayerRemoved({\n name: name\n });\n });\n }\n }, {\n key: "_onLayerAdded",\n value: function _onLayerAdded(_ref) {\n var _this4 = this;\n\n var name = _ref.name;\n\n // Mark the layer as active if it is managed\n if (this._managedLayers[name] !== undefined) {\n this._managedLayers[name].isActive = true; // Detect new animations\n\n this._host.AnimationFeature.getAnimations(name).forEach(function (animName) {\n _this4._onAnimationAdded({\n layerName: name,\n animationName: animName\n });\n });\n }\n }\n }, {\n key: "_onLayerRemoved",\n value: function _onLayerRemoved(_ref2) {\n var _this5 = this;\n\n var name = _ref2.name;\n\n // Deactivate the layer if it is managed\n if (this._managedLayers[name] !== undefined) {\n this._managedLayers[name].isActive = false; // Deactivate the animations\n\n Object.keys(this._managedLayers[name].animations).forEach(function (animName) {\n _this5._onAnimationRemoved({\n layerName: name,\n animationName: animName\n });\n });\n }\n }\n }, {\n key: "_onLayerRenamed",\n value: function _onLayerRenamed(_ref3) {\n var oldName = _ref3.oldName,\n newName = _ref3.newName;\n var layerOptions = this._managedLayers[oldName]; // Replace the layer key with the new name\n\n if (layerOptions !== undefined) {\n delete this._managedLayers[oldName];\n this._managedLayers[newName] = layerOptions;\n }\n }\n }, {\n key: "_onAnimationAdded",\n value: function _onAnimationAdded(_ref4) {\n var layerName = _ref4.layerName,\n animationName = _ref4.animationName;\n\n // Mark the animation as active if it is managed\n if (this._managedLayers[layerName] !== undefined && this._managedLayers[layerName].animations[animationName] !== undefined) {\n this._managedLayers[layerName].animations[animationName].isActive = true;\n }\n }\n }, {\n key: "_onAnimationRemoved",\n value: function _onAnimationRemoved(_ref5) {\n var layerName = _ref5.layerName,\n animationName = _ref5.animationName;\n\n // Deactivate the animation if it is managed\n if (this._managedLayers[layerName] !== undefined && this._managedLayers[layerName].animations[animationName] !== undefined) {\n this._managedLayers[layerName].animations[animationName].isActive = false;\n }\n }\n }, {\n key: "_onAnimationRenamed",\n value: function _onAnimationRenamed(_ref6) {\n var layerName = _ref6.layerName,\n oldName = _ref6.oldName,\n newName = _ref6.newName;\n\n if (this._managedLayers[layerName] !== undefined && this._managedLayers[layerName].animations[oldName] !== undefined) {\n // Replace the animation key with the new name\n var animOptions = this._managedLayers[layerName].animations[oldName];\n delete this._managedLayers[layerName].animations[oldName];\n this._managedLayers[layerName].animations[newName] = animOptions;\n }\n }\n }, {\n key: "registerLayer",\n value: function registerLayer(name) {\n var _this6 = this;\n\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n // Start with default options for each new layer\n if (this._managedLayers[name] === undefined) {\n this._managedLayers[name] = ManagedAnimationLayerInterface_objectSpread(ManagedAnimationLayerInterface_objectSpread({}, this.constructor.DEFAULT_LAYER_OPTIONS), {}, {\n animations: {}\n });\n } // Update all options except animations\n\n\n var layerOptions = this._managedLayers[name];\n options = ManagedAnimationLayerInterface_objectSpread({}, options);\n var animationOptions = options.animations || {};\n delete options.animations;\n Object.assign(layerOptions, options); // Check whether the layer can be manipulated now\n\n layerOptions.isActive = this._host.AnimationFeature !== undefined && this._host.AnimationFeature.layers.includes(name); // Register the animations\n\n Object.entries(animationOptions).forEach(function (_ref7) {\n var _ref8 = ManagedAnimationLayerInterface_slicedToArray(_ref7, 2),\n animName = _ref8[0],\n animOptions = _ref8[1];\n\n _this6.registerAnimation(name, animName, animOptions);\n });\n }\n }, {\n key: "registerAnimation",\n value: function registerAnimation(layerName, animationName) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n // Register the layer if it hasn\'t been registered yet\n if (this._managedLayers[layerName] === undefined) {\n this.registerLayer(layerName);\n } // Update animation options\n\n\n var animOptions = this._managedLayers[layerName].animations[animationName] || {};\n Object.assign(animOptions, options);\n this._managedLayers[layerName].animations[animationName] = animOptions; // Check whether the animation can be manipulated now\n\n this._managedLayers[layerName].animations[animationName].isActive = this._managedLayers[layerName].isActive && this._host.AnimationFeature.getAnimations(layerName).includes(animationName);\n }\n }, {\n key: "setLayerWeights",\n value: function setLayerWeights() {\n var _this7 = this;\n\n var nameFilter = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : function () {\n return true;\n };\n var weight = arguments.length > 1 ? arguments[1] : undefined;\n var seconds = arguments.length > 2 ? arguments[2] : undefined;\n var easingFn = arguments.length > 3 ? arguments[3] : undefined;\n var layerNames = Object.keys(this._managedLayers).filter(nameFilter);\n layerNames.forEach(function (name) {\n var layerOptions = _this7._managedLayers[name];\n\n if (layerOptions.isActive) {\n _this7._host.AnimationFeature.setLayerWeight(name, weight, seconds !== undefined ? seconds : layerOptions.blendTime, easingFn || layerOptions.easingFn);\n }\n });\n }\n }, {\n key: "enable",\n value: function enable(seconds, easingFn) {\n this.setLayerWeights(undefined, 1, seconds, easingFn);\n }\n }, {\n key: "disable",\n value: function disable(seconds, easingFn) {\n this.setLayerWeights(undefined, 0, seconds, easingFn);\n }\n }, {\n key: "installApi",\n value: function installApi() {\n var api = ManagedAnimationLayerInterface_get(ManagedAnimationLayerInterface_getPrototypeOf(ManagedAnimationLayerMixin.prototype), "installApi", this).call(this);\n\n Object.assign(api, {\n registerLayer: this.registerLayer.bind(this),\n registerAnimation: this.registerAnimation.bind(this),\n setLayerWeights: this.setLayerWeights.bind(this),\n enable: this.enable.bind(this),\n disable: this.disable.bind(this)\n });\n return api;\n }\n }]);\n\n return ManagedAnimationLayerMixin;\n }(ParentClass);\n\n Object.defineProperties(ManagedAnimationLayerMixin, {\n DEFAULT_LAYER_OPTIONS: {\n value: ManagedAnimationLayerInterface.DEFAULT_LAYER_OPTIONS,\n writable: false\n }\n });\n return ManagedAnimationLayerMixin;\n }\n }]);\n\n return ManagedAnimationLayerInterface;\n}(animpack_AnimationFeatureDependentInterface);\n\nObject.defineProperties(ManagedAnimationLayerInterface_ManagedAnimationLayerInterface, {\n DEFAULT_LAYER_OPTIONS: {\n value: {\n blendTime: 0.5,\n animations: {}\n },\n writable: false\n }\n});\n/* harmony default export */ var animpack_ManagedAnimationLayerInterface = (ManagedAnimationLayerInterface_ManagedAnimationLayerInterface);\n// CONCATENATED MODULE: ./src/core/awspack/TextToSpeechFeatureDependentInterface.js\nfunction TextToSpeechFeatureDependentInterface_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { TextToSpeechFeatureDependentInterface_typeof = function _typeof(obj) { return typeof obj; }; } else { TextToSpeechFeatureDependentInterface_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return TextToSpeechFeatureDependentInterface_typeof(obj); }\n\nfunction TextToSpeechFeatureDependentInterface_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction TextToSpeechFeatureDependentInterface_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { TextToSpeechFeatureDependentInterface_ownKeys(Object(source), true).forEach(function (key) { TextToSpeechFeatureDependentInterface_defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { TextToSpeechFeatureDependentInterface_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction TextToSpeechFeatureDependentInterface_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction TextToSpeechFeatureDependentInterface_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction TextToSpeechFeatureDependentInterface_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction TextToSpeechFeatureDependentInterface_createClass(Constructor, protoProps, staticProps) { if (protoProps) TextToSpeechFeatureDependentInterface_defineProperties(Constructor.prototype, protoProps); if (staticProps) TextToSpeechFeatureDependentInterface_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction TextToSpeechFeatureDependentInterface_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) TextToSpeechFeatureDependentInterface_setPrototypeOf(subClass, superClass); }\n\nfunction TextToSpeechFeatureDependentInterface_setPrototypeOf(o, p) { TextToSpeechFeatureDependentInterface_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return TextToSpeechFeatureDependentInterface_setPrototypeOf(o, p); }\n\nfunction TextToSpeechFeatureDependentInterface_createSuper(Derived) { var hasNativeReflectConstruct = TextToSpeechFeatureDependentInterface_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = TextToSpeechFeatureDependentInterface_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = TextToSpeechFeatureDependentInterface_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return TextToSpeechFeatureDependentInterface_possibleConstructorReturn(this, result); }; }\n\nfunction TextToSpeechFeatureDependentInterface_possibleConstructorReturn(self, call) { if (call && (TextToSpeechFeatureDependentInterface_typeof(call) === "object" || typeof call === "function")) { return call; } return TextToSpeechFeatureDependentInterface_assertThisInitialized(self); }\n\nfunction TextToSpeechFeatureDependentInterface_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction TextToSpeechFeatureDependentInterface_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction TextToSpeechFeatureDependentInterface_getPrototypeOf(o) { TextToSpeechFeatureDependentInterface_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return TextToSpeechFeatureDependentInterface_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/* eslint-disable max-classes-per-file */\n\n/**\n * Class factory interface for features that are dependent on the TextToSpeechFeature\n * being present on the host. Speech events will automatically be listened for once a\n * TextToSpeechFeature is added to the host and stopped once it is removed.\n *\n * @interface\n * @extends FeatureDependentInterface\n *\n * @property {Object} EVENT_DEPENDENCIES - Events that the feature should start/stop\n * listening for when a feature of type FeatureName is added/removed from the host.\n * @property {Object} EVENT_DEPENDENCIES.TextToSpeechFeature - Events that are\n * specific to the TextToSpeechFeature.\n * @property {string} [EVENT_DEPENDENCIES.TextToSpeechFeature.play=\'_onPlay\'] -\n * The name of the method that will be executed when TextToSpeechFeature play\n * events are emitted.\n * @property {string} [EVENT_DEPENDENCIES.TextToSpeechFeature.pause=\'_onPause\'] -\n * The name of the method that will be executed when TextToSpeechFeature pause\n * events are emitted.\n * @property {string} [EVENT_DEPENDENCIES.TextToSpeechFeature.resume=\'_onResume\'] -\n * The name of the method that will be executed when TextToSpeechFeature resume\n * events are emitted.\n * @property {string} [EVENT_DEPENDENCIES.TextToSpeechFeature.stop=\'_onStop\'] -\n * The name of the method that will be executed when TextToSpeechFeature stop\n * events are emitted.\n * @property {string} [EVENT_DEPENDENCIES.TextToSpeechFeature.sentence=\'_onSentence\'] -\n * The name of the method that will be executed when TextToSpeechFeature sentence\n * events are emitted.\n * @property {string} [EVENT_DEPENDENCIES.TextToSpeechFeature.word=\'_onWord\'] -\n * The name of the method that will be executed when TextToSpeechFeature word\n * events are emitted.\n * @property {string} [EVENT_DEPENDENCIES.TextToSpeechFeature.viseme=\'_onViseme\'] -\n * The name of the method that will be executed when TextToSpeechFeature viseme\n * events are emitted.\n * @property {string} [EVENT_DEPENDENCIES.TextToSpeechFeature.ssml=\'_onSsml\'] -\n * The name of the method that will be executed when TextToSpeechFeature ssml\n * events are emitted.\n */\n\nvar TextToSpeechFeatureDependentInterface_TextToSpeechFeatureDependentInterface = /*#__PURE__*/function (_FeatureDependentInte) {\n TextToSpeechFeatureDependentInterface_inherits(TextToSpeechFeatureDependentInterface, _FeatureDependentInte);\n\n var _super = TextToSpeechFeatureDependentInterface_createSuper(TextToSpeechFeatureDependentInterface);\n\n function TextToSpeechFeatureDependentInterface() {\n TextToSpeechFeatureDependentInterface_classCallCheck(this, TextToSpeechFeatureDependentInterface);\n\n return _super.apply(this, arguments);\n }\n\n TextToSpeechFeatureDependentInterface_createClass(TextToSpeechFeatureDependentInterface, [{\n key: "_onPlay",\n value:\n /**\n * Executed when speech play events are caught.\n *\n * @private\n */\n function _onPlay() {}\n /**\n * Executed when speech pause events are caught.\n *\n * @private\n */\n\n }, {\n key: "_onPause",\n value: function _onPause() {}\n /**\n * Executed when speech resume events are caught.\n *\n * @private\n */\n\n }, {\n key: "_onResume",\n value: function _onResume() {}\n /**\n * Executed when speech stop events are caught.\n *\n * @private\n */\n\n }, {\n key: "_onStop",\n value: function _onStop() {}\n /**\n * Executed when speech sentence events are caught.\n *\n * @private\n */\n\n }, {\n key: "_onSentence",\n value: function _onSentence() {}\n /**\n * Executed when speech word events are caught.\n *\n * @private\n */\n\n }, {\n key: "_onWord",\n value: function _onWord() {}\n /**\n * Executed when speech viseme events are caught.\n *\n * @private\n */\n\n }, {\n key: "_onViseme",\n value: function _onViseme() {}\n /**\n * Executed when speech ssml events are caught.\n *\n * @private\n */\n\n }, {\n key: "_onSsml",\n value: function _onSsml() {}\n /**\n * Creates a class that implements {@link TextToSpeechFeatureDependentInterface}\n * and extends a specified base class.\n *\n * @param {Class} BaseClass - The class to extend.\n *\n * @return {Class} A class that extends `BaseClass` and implements {@link TextToSpeechFeatureDependentInterface}.\n */\n\n }], [{\n key: "Mixin",\n value: function Mixin(BaseClass) {\n var ParentClass = core_FeatureDependentInterface.Mixin(BaseClass);\n\n var TextToSpeechFeatureDependentMixin = /*#__PURE__*/function (_ParentClass) {\n TextToSpeechFeatureDependentInterface_inherits(TextToSpeechFeatureDependentMixin, _ParentClass);\n\n var _super2 = TextToSpeechFeatureDependentInterface_createSuper(TextToSpeechFeatureDependentMixin);\n\n function TextToSpeechFeatureDependentMixin() {\n TextToSpeechFeatureDependentInterface_classCallCheck(this, TextToSpeechFeatureDependentMixin);\n\n return _super2.apply(this, arguments);\n }\n\n TextToSpeechFeatureDependentInterface_createClass(TextToSpeechFeatureDependentMixin, [{\n key: "_onPlay",\n value: function _onPlay() {}\n }, {\n key: "_onPause",\n value: function _onPause() {}\n }, {\n key: "_onResume",\n value: function _onResume() {}\n }, {\n key: "_onStop",\n value: function _onStop() {}\n }, {\n key: "_onSentence",\n value: function _onSentence() {}\n }, {\n key: "_onWord",\n value: function _onWord() {}\n }, {\n key: "_onViseme",\n value: function _onViseme() {}\n }, {\n key: "_onSsml",\n value: function _onSsml() {}\n }]);\n\n return TextToSpeechFeatureDependentMixin;\n }(ParentClass);\n\n Object.defineProperties(TextToSpeechFeatureDependentMixin, {\n EVENT_DEPENDENCIES: {\n value: TextToSpeechFeatureDependentInterface_objectSpread(TextToSpeechFeatureDependentInterface_objectSpread({}, ParentClass.EVENT_DEPENDENCIES), TextToSpeechFeatureDependentInterface.EVENT_DEPENDENCIES),\n writable: false\n }\n });\n return TextToSpeechFeatureDependentMixin;\n }\n }]);\n\n return TextToSpeechFeatureDependentInterface;\n}(core_FeatureDependentInterface);\n\nObject.defineProperties(TextToSpeechFeatureDependentInterface_TextToSpeechFeatureDependentInterface, {\n EVENT_DEPENDENCIES: {\n value: {\n TextToSpeechFeature: {\n play: \'_onPlay\',\n pause: \'_onPause\',\n resume: \'_onResume\',\n stop: \'_onStop\',\n sentence: \'_onSentence\',\n word: \'_onWord\',\n viseme: \'_onViseme\',\n ssml: \'_onSsml\'\n }\n },\n writable: false\n }\n});\n/* harmony default export */ var awspack_TextToSpeechFeatureDependentInterface = (TextToSpeechFeatureDependentInterface_TextToSpeechFeatureDependentInterface);\n// CONCATENATED MODULE: ./src/core/LipsyncFeature.js\nfunction LipsyncFeature_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { LipsyncFeature_typeof = function _typeof(obj) { return typeof obj; }; } else { LipsyncFeature_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return LipsyncFeature_typeof(obj); }\n\nfunction LipsyncFeature_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction LipsyncFeature_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { LipsyncFeature_ownKeys(Object(source), true).forEach(function (key) { LipsyncFeature_defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { LipsyncFeature_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction LipsyncFeature_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\n\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }\n\nfunction LipsyncFeature_slicedToArray(arr, i) { return LipsyncFeature_arrayWithHoles(arr) || LipsyncFeature_iterableToArrayLimit(arr, i) || LipsyncFeature_unsupportedIterableToArray(arr, i) || LipsyncFeature_nonIterableRest(); }\n\nfunction LipsyncFeature_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."); }\n\nfunction LipsyncFeature_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return LipsyncFeature_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return LipsyncFeature_arrayLikeToArray(o, minLen); }\n\nfunction LipsyncFeature_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction LipsyncFeature_iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction LipsyncFeature_arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction LipsyncFeature_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction LipsyncFeature_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction LipsyncFeature_createClass(Constructor, protoProps, staticProps) { if (protoProps) LipsyncFeature_defineProperties(Constructor.prototype, protoProps); if (staticProps) LipsyncFeature_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction LipsyncFeature_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { LipsyncFeature_get = Reflect.get; } else { LipsyncFeature_get = function _get(target, property, receiver) { var base = LipsyncFeature_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return LipsyncFeature_get(target, property, receiver || target); }\n\nfunction LipsyncFeature_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = LipsyncFeature_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction LipsyncFeature_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) LipsyncFeature_setPrototypeOf(subClass, superClass); }\n\nfunction LipsyncFeature_setPrototypeOf(o, p) { LipsyncFeature_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return LipsyncFeature_setPrototypeOf(o, p); }\n\nfunction LipsyncFeature_createSuper(Derived) { var hasNativeReflectConstruct = LipsyncFeature_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = LipsyncFeature_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = LipsyncFeature_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return LipsyncFeature_possibleConstructorReturn(this, result); }; }\n\nfunction LipsyncFeature_possibleConstructorReturn(self, call) { if (call && (LipsyncFeature_typeof(call) === "object" || typeof call === "function")) { return call; } return LipsyncFeature_assertThisInitialized(self); }\n\nfunction LipsyncFeature_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction LipsyncFeature_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction LipsyncFeature_getPrototypeOf(o) { LipsyncFeature_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return LipsyncFeature_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n\n\n/**\n * Default mapping of Polly viseme names to animation options objects.\n *\n * @property {Object} [sil={name: \'sil\'}]\n * @property {Object} [p={name: \'p\', overrideWeight: 0.9}]\n * @property {Object} [t={name: \'t\', blendTime: 0.2}]\n * @property {Object} [S={name: \'S\'}]\n * @property {Object} [T={name: \'T\'}]\n * @property {Object} [f={name: \'f\', overrideWeight: 0.75}]\n * @property {Object} [k={name: \'k\'}]\n * @property {Object} [i={name: \'i\'}]\n * @property {Object} [r={name: \'r\'}]\n * @property {Object} [s={name: \'s\', blendTime: 0.25}]\n * @property {Object} [u={name: \'u\'}]\n * @property {Object} [@={name: \'@\'}]\n * @property {Object} [a={name: \'a\'}]\n * @property {Object} [e={name: \'e\', blendTime: 0.2}]\n * @property {Object} [E={name: \'E\'}]\n * @property {Object} [o={name: \'o\'}]\n * @property {Object} [O={name: \'O\'}]\n */\n\nvar DefaultVisemeMap = {\n sil: {\n name: \'sil\'\n },\n p: {\n name: \'p\',\n overrideWeight: 0.9\n },\n t: {\n name: \'t\',\n blendTime: 0.2\n },\n S: {\n name: \'S\'\n },\n T: {\n name: \'T\'\n },\n f: {\n name: \'f\',\n overrideWeight: 0.75\n },\n k: {\n name: \'k\'\n },\n i: {\n name: \'i\'\n },\n r: {\n name: \'r\'\n },\n s: {\n name: \'s\',\n blendTime: 0.25\n },\n u: {\n name: \'u\'\n },\n \'@\': {\n name: \'@\'\n },\n a: {\n name: \'a\'\n },\n e: {\n name: \'e\',\n blendTime: 0.2\n },\n E: {\n name: \'E\'\n },\n o: {\n name: \'o\'\n },\n O: {\n name: \'O\'\n }\n};\n/**\n * Lipsync controls two types of movement: idle animation that should play while\n * speech is playing and viseme animations corresponding to Polly visemes whose\n * weights should be turned on and off as they are encountered in the Polly SSML\n * transcript. Layers owned by this feature will be enabled while speech is playing\n * and disabled once it stops.\n *\n * @extends AbstractHostFeature\n * @alias core/LipsyncFeature\n * @implements TextToSpeechFeatureDependentInterface\n * @implements ManagedAnimationLayerInterface\n */\n\nvar LipsyncFeature_LipsyncFeature = /*#__PURE__*/function (_AbstractHostFeature$) {\n LipsyncFeature_inherits(LipsyncFeature, _AbstractHostFeature$);\n\n var _super = LipsyncFeature_createSuper(LipsyncFeature);\n\n /**\n * @constructor\n *\n * @param {core/HostObject} host - Host that owns the feature.\n * @param {Object=} visemeOptions - Options for the viseme layers.\n * @param {number} [visemeOptions.blendTime=0.15] - Default amount of time it\n * will take to manipulate each freeBlend weight on the viseme states.\n * @param {Object} [visemeOptions.decayRate={amount: .5, seconds: .5}] - An object\n * describing the 0-1 factor viseme weight will decay if the viseme duration is\n * longer than the blendTime and the number of seconds it would take to decay\n * by that factor.\n * @param {number} [visemeOptions.easingFn=Quadratic.InOut] - Default easing function\n * to use when manipulating viseme freeBlend weights.\n * @param {Array.} [visemeOptions..layers=[]] - An array of layer options\n * objects to register as viseme layers.\n * @param {Object=} talkingOptions - Options for the talking layers.\n * @param {number} [talkingOptions.blendTime=0.75] - Default amount of time to\n * enable and disable the talking idle layers\n * @param {number} [talkingOptions.easingFn=Quadratic.InOut] - Default easing\n * function to use when manipulating weights on the talking idle layers.\n * @param {Array.} [talkingOptions.layers=[]] - An array of layer options\n * objects to register as talking layers.\n * @param {number} [visemeLeadTime=.067] - The amount of time to instruct the\n * TextToSpeechFeature to emit speechmarks before each one\'s actual timestamp\n * is reached. This will set the \'speechMarkOffset\' variable on the TextToSpeechFeature.\n */\n function LipsyncFeature(host) {\n var _this;\n\n var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n _ref$blendTime = _ref.blendTime,\n visemeBlendTime = _ref$blendTime === void 0 ? 0.15 : _ref$blendTime,\n _ref$decayRate = _ref.decayRate;\n\n _ref$decayRate = _ref$decayRate === void 0 ? {} : _ref$decayRate;\n var _ref$decayRate$amount = _ref$decayRate.amount,\n amount = _ref$decayRate$amount === void 0 ? 0.5 : _ref$decayRate$amount,\n _ref$decayRate$second = _ref$decayRate.seconds,\n seconds = _ref$decayRate$second === void 0 ? 0.5 : _ref$decayRate$second,\n _ref$easingFn = _ref.easingFn,\n visemeEasingFn = _ref$easingFn === void 0 ? Quadratic.InOut : _ref$easingFn,\n _ref$layers = _ref.layers,\n visemeLayers = _ref$layers === void 0 ? [] : _ref$layers;\n\n var _ref2 = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},\n _ref2$blendTime = _ref2.blendTime,\n talkingBlendTime = _ref2$blendTime === void 0 ? 0.75 : _ref2$blendTime,\n _ref2$easingFn = _ref2.easingFn,\n talkingEasingFn = _ref2$easingFn === void 0 ? Quadratic.InOut : _ref2$easingFn,\n _ref2$layers = _ref2.layers,\n talkingLayers = _ref2$layers === void 0 ? [] : _ref2$layers;\n\n var visemeLeadTime = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0.067;\n\n LipsyncFeature_classCallCheck(this, LipsyncFeature);\n\n _this = _super.call(this, host);\n _this._visemeLayers = {};\n _this._talkingLayers = {};\n _this.visemeLeadTime = visemeLeadTime; // Register the viseme layers\n\n visemeLayers.forEach(function (_ref3) {\n var name = _ref3.name,\n animation = _ref3.animation,\n _ref3$visemeMap = _ref3.visemeMap,\n visemeMap = _ref3$visemeMap === void 0 ? DefaultVisemeMap : _ref3$visemeMap;\n\n _this.registerVisemeLayer(name, {\n animation: animation,\n visemeMap: visemeMap,\n decayRate: {\n amount: amount,\n seconds: seconds\n },\n blendTime: visemeBlendTime,\n easingFn: visemeEasingFn\n });\n }); // Register the talking layers\n\n talkingLayers.forEach(function (_ref4) {\n var name = _ref4.name,\n animation = _ref4.animation;\n\n _this.registerTalkingLayer(name, {\n animation: animation,\n blendTime: talkingBlendTime,\n easingFn: talkingEasingFn\n });\n });\n return _this;\n }\n /**\n * Ensure that registered viseme animations are FreeBlendStates.\n *\n * @private\n *\n * @param {string} layerName - Name of the layer that contains the viseme animation.\n * @param {string} animationName - Name of the animation.\n */\n\n\n LipsyncFeature_createClass(LipsyncFeature, [{\n key: "_registerVisemeAnimation",\n value: function _registerVisemeAnimation(layerName, animationName) {\n if (this._managedLayers[layerName].animations[animationName].isActive) {\n if (this._host.AnimationFeature.getAnimationType(layerName, animationName) !== \'freeBlend\') {\n // Warn and deactivate if the registered state is not freeBlend\n console.warn("Cannot register Lipsync viseme animation ".concat(animationName, " on layer ").concat(layerName, " for host ").concat(this._host.id, ". Viseme animations must be of type \'freeBlend\'."));\n this._managedLayers[layerName].animations[animationName].isActive = false;\n } else {\n // Check if the blendWeights can be manipulated now\n var weightNames = this._host.AnimationFeature.getAnimationBlendNames(layerName, animationName);\n\n var visemeMap = this._managedLayers[layerName].animations[animationName].visemeMap;\n Object.values(visemeMap).forEach(function (visemeOptions) {\n visemeOptions.isActive = weightNames.includes(visemeOptions.name);\n });\n }\n }\n }\n /**\n * If the added feature is TextToSpeech, update its speechMarkOffset variable.\n *\n * @private\n *\n * @param {string} typeName - Name of the type of feature that was added.\n */\n\n }, {\n key: "_onFeatureAdded",\n value: function _onFeatureAdded(typeName) {\n this._visemeLayers = this._visemeLayers || {};\n this._talkingLayers = this._talkingLayers || {};\n\n LipsyncFeature_get(LipsyncFeature_getPrototypeOf(LipsyncFeature.prototype), "_onFeatureAdded", this).call(this, typeName);\n\n if (typeName === \'TextToSpeechFeature\') {\n this._host.TextToSpeechFeature.speechmarkOffset = -this._visemeLeadTime || 0;\n }\n }\n }, {\n key: "_onLayerAdded",\n value: function _onLayerAdded(_ref5) {\n var name = _ref5.name;\n\n LipsyncFeature_get(LipsyncFeature_getPrototypeOf(LipsyncFeature.prototype), "_onLayerAdded", this).call(this, {\n name: name\n }); // Validate the viseme animation\n\n\n if (this._visemeLayers[name] !== undefined) {\n this._registerVisemeAnimation(name, this._visemeLayers[name]);\n }\n }\n }, {\n key: "_onAnimationAdded",\n value: function _onAnimationAdded(_ref6) {\n var layerName = _ref6.layerName,\n animationName = _ref6.animationName;\n\n LipsyncFeature_get(LipsyncFeature_getPrototypeOf(LipsyncFeature.prototype), "_onAnimationAdded", this).call(this, {\n layerName: layerName\n }); // Validate the viseme animation\n\n\n if (this._visemeLayers[layerName] === animationName) {\n this._registerVisemeAnimation(layerName, this._visemeLayers[layerName]);\n }\n }\n }, {\n key: "_onPlay",\n value: function _onPlay() {\n var _this2 = this;\n\n // Turn on the layer weights\n this.enable(); // Set the current animations\n\n [this._visemeLayers, this._talkingLayers].forEach(function (layers) {\n Object.entries(layers).forEach(function (_ref7) {\n var _ref8 = LipsyncFeature_slicedToArray(_ref7, 2),\n layerName = _ref8[0],\n animationName = _ref8[1];\n\n if (_this2._managedLayers[layerName].animations[animationName].isActive) {\n _this2._host.AnimationFeature.resumeAnimation(layerName, animationName);\n }\n });\n });\n }\n }, {\n key: "_onPause",\n value: function _onPause() {\n this._onStop();\n }\n }, {\n key: "_onResume",\n value: function _onResume() {\n this._onPlay();\n }\n }, {\n key: "_onStop",\n value: function _onStop() {\n var _this3 = this;\n\n // Turn off the layer weights\n this.disable(); // Pause the current animations\n\n [this._visemeLayers, this._talkingLayers].forEach(function (layers) {\n Object.entries(layers).forEach(function (_ref9) {\n var _ref10 = LipsyncFeature_slicedToArray(_ref9, 2),\n layerName = _ref10[0],\n animationName = _ref10[1];\n\n if (_this3._managedLayers[layerName].animations[animationName].isActive) {\n _this3._host.AnimationFeature.pauseAnimation(layerName, animationName);\n }\n });\n });\n }\n /**\n * When viseme events are caught, turn on weight of the new viseme for the duration\n * of the speech mark, then turn weight back off.\n *\n * @private\n *\n * @param {Object} event - Event data passed from the speech.\n * @param {Object} event.mark - Speechmark object.\n */\n\n }, {\n key: "_onViseme",\n value: function () {\n var _onViseme2 = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee(_ref11) {\n var _this4 = this;\n\n var mark;\n return regeneratorRuntime.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n mark = _ref11.mark;\n Object.entries(this._visemeLayers).forEach(function (_ref12) {\n var _ref13 = LipsyncFeature_slicedToArray(_ref12, 2),\n layerName = _ref13[0],\n animName = _ref13[1];\n\n // Make sure the layer can be manipulated\n var _this4$_managedLayers = _this4._managedLayers[layerName].animations[animName],\n isActive = _this4$_managedLayers.isActive,\n visemeMap = _this4$_managedLayers.visemeMap;\n\n if (!isActive) {\n return;\n } // Take variables from the viseme if they exist and default to the layer\n\n\n var _this4$_managedLayers2 = LipsyncFeature_objectSpread(LipsyncFeature_objectSpread({}, _this4._managedLayers[layerName]), visemeMap[mark.value]),\n viseme = _this4$_managedLayers2.name,\n isVisemeActive = _this4$_managedLayers2.isActive,\n decayRate = _this4$_managedLayers2.decayRate,\n blendTime = _this4$_managedLayers2.blendTime,\n easingFn = _this4$_managedLayers2.easingFn,\n overrideWeight = _this4$_managedLayers2.overrideWeight;\n\n var visemeNames = _this4._host.AnimationFeature.getAnimationBlendNames(layerName, animName); // Make sure the new viseme has an active freeBlend weight\n\n\n if (!isVisemeActive || !visemeNames.includes(viseme)) {\n return;\n } // Find the peak weight for the viseme and the amount of time it should\n // take to reach it\n\n\n var weight = 1;\n var duration = mark.duration / 1000;\n\n if (duration < blendTime) {\n var lerpFactor = blendTime > 0 ? duration / blendTime : 1;\n weight = overrideWeight !== undefined ? overrideWeight : core_MathUtils.lerp(0, 1, lerpFactor);\n }\n\n var blendInTime = Math.min(duration, blendTime); // Find the amount and time viseme will be held for\n\n var holdTime = duration - blendTime;\n\n if (holdTime < 0) {\n // Perform in -> out animation\n _this4._animateSimpleViseme(layerName, animName, viseme, weight, blendInTime, blendTime, easingFn);\n } else {\n var _lerpFactor = decayRate.seconds > 0 ? holdTime / decayRate.seconds : 1; // Perform in -> hold -> out animation\n\n\n var decayWeight = core_MathUtils.lerp(weight, weight * decayRate.amount, Math.min(1, _lerpFactor));\n\n _this4._animateHeldViseme(layerName, animName, viseme, weight, decayWeight, blendInTime, holdTime, blendTime, easingFn);\n }\n });\n\n case 2:\n case "end":\n return _context.stop();\n }\n }\n }, _callee, this);\n }));\n\n function _onViseme(_x) {\n return _onViseme2.apply(this, arguments);\n }\n\n return _onViseme;\n }()\n /**\n * Animate a viseme blend weight towards a value and then back to zero.\n *\n * @private\n *\n * @param {string} layerName - Name of the layer that contains the viseme.\n * @param {string} animName - Name of the freeblend animation that contains\n * the viseme.\n * @param {string} visemeName - Name of the blend weight to manipulate.\n * @param {number} weight - Peak weight to animate towards.\n * @param {number} blendInTime - Amount of time it should take to reach the\n * peak weight.\n * @param {number} blendOutTime - Amount of time it should take to animate back\n * to zero after reaching the peak weight.\n * @param {Function} easingFn - Easing function to use during animation.\n */\n\n }, {\n key: "_animateSimpleViseme",\n value: function _animateSimpleViseme(layerName, animName, visemeName, peakWeight, blendInTime, blendOutTime, easingFn) {\n var _this5 = this;\n\n // Animate towards the peak value\n var weightPromise = this._host.AnimationFeature.setAnimationBlendWeight(layerName, animName, visemeName, peakWeight, blendInTime, easingFn); // Animate back to zero if there was no weight interruption\n\n\n weightPromise.then(function () {\n if (!weightPromise.canceled) {\n _this5._host.AnimationFeature.setAnimationBlendWeight(layerName, animName, visemeName, 0, blendOutTime, easingFn);\n }\n });\n }\n /**\n * Animate a viseme blend weight towards a value and then back to zero.\n *\n * @private\n *\n * @param {string} layerName - Name of the layer that contains the viseme.\n * @param {string} animName - Name of the freeblend animation that contains\n * the viseme.\n * @param {string} visemeName - Name of the blend weight to manipulate.\n * @param {number} peakWeight - Peak weight to animate towards.\n * @param {number} decayWeight - Weight to animate towards after reaching the\n * peak weight.\n * @param {number} blendInTime - Amount of time it should take to reach the\n * peak weight.\n * @param {number} holdTime - Amount of time it should take to reach the decay\n * weight after the peak weight has been reached.\n * @param {number} blendOutTime - Amount of time it should take to animate back\n * to zero after reaching the decay weight.\n * @param {Function} easingFn - Easing function to use during animation.\n */\n\n }, {\n key: "_animateHeldViseme",\n value: function () {\n var _animateHeldViseme2 = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2(layerName, animName, visemeName, peakWeight, decayWeight, blendInTime, holdTime, blendOutTime, easingFn) {\n var startPromise, holdPromise;\n return regeneratorRuntime.wrap(function _callee2$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n // Animate towards the peak value\n startPromise = this._host.AnimationFeature.setAnimationBlendWeight(layerName, animName, visemeName, peakWeight, blendInTime, easingFn);\n _context2.next = 3;\n return startPromise;\n\n case 3:\n if (startPromise.canceled) {\n _context2.next = 8;\n break;\n }\n\n // Animate towards the decay value if there was no weight interruption\n holdPromise = this._host.AnimationFeature.setAnimationBlendWeight(layerName, animName, visemeName, decayWeight, holdTime, easingFn);\n _context2.next = 7;\n return holdPromise;\n\n case 7:\n if (!holdPromise.canceled) {\n // Animate back to zero if there was no weight interruption\n this._host.AnimationFeature.setAnimationBlendWeight(layerName, animName, visemeName, 0, blendOutTime, easingFn);\n }\n\n case 8:\n case "end":\n return _context2.stop();\n }\n }\n }, _callee2, this);\n }));\n\n function _animateHeldViseme(_x2, _x3, _x4, _x5, _x6, _x7, _x8, _x9, _x10) {\n return _animateHeldViseme2.apply(this, arguments);\n }\n\n return _animateHeldViseme;\n }()\n /**\n * Gets and sets the amount of time in seconds to negatively offset speechmark\n * emission by.\n *\n * @type {number}\n */\n\n }, {\n key: "visemeLeadTime",\n get: function get() {\n return this._visemeLeadTime;\n },\n set: function set(seconds) {\n this._visemeLeadTime = seconds;\n\n if (this._host.TextToSpeechFeature) {\n this._host.TextToSpeechFeature.speechmarkOffset = -seconds;\n }\n }\n /**\n * Start keeping track of an animation layer that owns a freeBlend animation\n * with blendWeights corresponding to visemes.\n *\n * @param {string} layerName - Name of the layer to keep track of.\n * @param {Object=} options - Options for the layer.\n * @param {string} [options.animation=\'visemes\'] - Name of the animation on the\n * layer that will be played during speech. This animation must be of type\n * freeBlend.\n * @param {Object=} decayRate\n * @param {number} [decayRate.amount=0.5] - The percentage to decrease the viseme\'s\n * peak value by over time once the peak value has been reached.\n * @param {number} [decayRate.seconds=0.5] - The amount of time in seconds to\n * decrease the viseme\'s weight once it has reached its peak value.\n * @param {number=} [options.blendTime=[LipsyncFeature.DEFAULT_LAYER_OPTIONS.blendTime]{@link LipsyncFeature#DEFAULT_LAYER_OPTIONS#blendTime}] -\n * Default amount of time to use when manipulating animation blendWeights.\n * @param {Function=} options.easingFn - Default easing function to use when\n * manipulating animation blendWeights.\n * @param {Object} [options.visemeMap=DefaultVisemeMap] - Object containing key/value pairs of\n * Polly viseme names mapped to objects containing the name of the corresponding\n * animation blendWeight and any other animation options to use such as viseme\n * specific blend times and easing functions.\n */\n\n }, {\n key: "registerVisemeLayer",\n value: function registerVisemeLayer(layerName) {\n var _ref14 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n _ref14$animation = _ref14.animation,\n animation = _ref14$animation === void 0 ? \'visemes\' : _ref14$animation,\n _ref14$decayRate = _ref14.decayRate,\n decayRate = _ref14$decayRate === void 0 ? {\n amount: 0.5,\n seconds: 0.5\n } : _ref14$decayRate,\n _ref14$blendTime = _ref14.blendTime,\n blendTime = _ref14$blendTime === void 0 ? LipsyncFeature.DEFAULT_LAYER_OPTIONS.blendTime : _ref14$blendTime,\n easingFn = _ref14.easingFn,\n _ref14$visemeMap = _ref14.visemeMap,\n visemeMap = _ref14$visemeMap === void 0 ? DefaultVisemeMap : _ref14$visemeMap;\n\n // Register the layer and animation\n this.registerLayer(layerName, {\n decayRate: decayRate,\n blendTime: blendTime,\n easingFn: easingFn,\n animations: LipsyncFeature_defineProperty({}, animation, {\n visemeMap: visemeMap\n })\n });\n this._visemeLayers[layerName] = animation; // Validate the viseme animation\n\n this._registerVisemeAnimation(layerName, animation);\n }\n /**\n * Start keeping track of an animation layer that contains a looping animation\n * to be played during speech.\n *\n * @param {string} layerName - Name of the layer to keep track of.\n * @param {Object=} options - Options for the layer.\n * @param {string} [options.animation=\'stand_talk\'] - Name of the animation on the\n * layer that will be played during speech.\n * @param {number} [options.blendTime=[LipsyncFeature.DEFAULT_LAYER_OPTIONS.blendTime]{@link LipsyncFeature#DEFAULT_LAYER_OPTIONS#blendTime}] -\n * Default amount of time to use when manipulating the layer\'s weights.\n * @param {Function=} options.easingFn - Default easing function to use when\n * manipulating the layer\'s weights.\n */\n\n }, {\n key: "registerTalkingLayer",\n value: function registerTalkingLayer(layerName) {\n var _ref15 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n _ref15$animation = _ref15.animation,\n animation = _ref15$animation === void 0 ? \'stand_talk\' : _ref15$animation,\n _ref15$blendTime = _ref15.blendTime,\n blendTime = _ref15$blendTime === void 0 ? LipsyncFeature.DEFAULT_LAYER_OPTIONS.blendTime : _ref15$blendTime,\n easingFn = _ref15.easingFn;\n\n // Register the layer and animation\n this.registerLayer(layerName, {\n blendTime: blendTime,\n easingFn: easingFn,\n animations: LipsyncFeature_defineProperty({}, animation, {})\n });\n this._talkingLayers[layerName] = animation;\n }\n /**\n * Adds a namespace to the host with the name of the feature to contain properties\n * and methods from the feature that users of the host need access to.\n *\n * @see LipsyncFeature\n */\n\n }, {\n key: "installApi",\n value: function installApi() {\n var _this6 = this;\n\n /**\n * @inner\n * @namespace LipsyncFeature\n */\n var api = LipsyncFeature_get(LipsyncFeature_getPrototypeOf(LipsyncFeature.prototype), "installApi", this).call(this);\n /**\n * @memberof LipsyncFeature\n * @name registerLayer\n * @instance\n * @method\n * @see ManagedAnimationLayerInterface#registerLayer\n */\n\n /**\n * @memberof LipsyncFeature\n * @name registerAnimation\n * @instance\n * @method\n * @see ManagedAnimationLayerInterface#registerAnimation\n */\n\n /**\n * @memberof LipsyncFeature\n * @name setLayerWeights\n * @instance\n * @method\n * @see ManagedAnimationLayerInterface#setLayerWeights\n */\n\n /**\n * @memberof LipsyncFeature\n * @name enable\n * @instance\n * @method\n * @see ManagedAnimationLayerInterface#enable\n */\n\n /**\n * @memberof LipsyncFeature\n * @name disable\n * @instance\n * @method\n * @see ManagedAnimationLayerInterface#disable\n */\n\n\n Object.assign(api, {\n /**\n * @memberof LipsyncFeature\n * @instance\n * @method\n * @see core/LipsyncFeature#registerVisemeLayer\n */\n registerVisemeLayer: this.registerVisemeLayer.bind(this),\n\n /**\n * @memberof LipsyncFeature\n * @instance\n * @method\n * @see core/LipsyncFeature#registerTalkingLayer\n */\n registerTalkingLayer: this.registerTalkingLayer.bind(this)\n });\n /**\n * @memberof LipsyncFeature\n * @instance\n * @name visemeLeadTime\n * @see core/LipsyncFeature#visemeLeadTime\n */\n\n Object.defineProperty(api, \'visemeLeadTime\', {\n get: function get() {\n return _this6.visemeLeadTime;\n },\n set: function set(seconds) {\n _this6.visemeLeadTime = seconds;\n }\n });\n return api;\n }\n }]);\n\n return LipsyncFeature;\n}(core_AbstractHostFeature.mix(awspack_TextToSpeechFeatureDependentInterface.Mixin, animpack_ManagedAnimationLayerInterface.Mixin));\n\n/* harmony default export */ var core_LipsyncFeature = (LipsyncFeature_LipsyncFeature);\n\n// CONCATENATED MODULE: ./src/core/awspack/SSMLSpeechmarkInterface.js\nfunction SSMLSpeechmarkInterface_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { SSMLSpeechmarkInterface_typeof = function _typeof(obj) { return typeof obj; }; } else { SSMLSpeechmarkInterface_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return SSMLSpeechmarkInterface_typeof(obj); }\n\nfunction SSMLSpeechmarkInterface_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction SSMLSpeechmarkInterface_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction SSMLSpeechmarkInterface_createClass(Constructor, protoProps, staticProps) { if (protoProps) SSMLSpeechmarkInterface_defineProperties(Constructor.prototype, protoProps); if (staticProps) SSMLSpeechmarkInterface_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction SSMLSpeechmarkInterface_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) SSMLSpeechmarkInterface_setPrototypeOf(subClass, superClass); }\n\nfunction SSMLSpeechmarkInterface_setPrototypeOf(o, p) { SSMLSpeechmarkInterface_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return SSMLSpeechmarkInterface_setPrototypeOf(o, p); }\n\nfunction SSMLSpeechmarkInterface_createSuper(Derived) { var hasNativeReflectConstruct = SSMLSpeechmarkInterface_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = SSMLSpeechmarkInterface_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = SSMLSpeechmarkInterface_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return SSMLSpeechmarkInterface_possibleConstructorReturn(this, result); }; }\n\nfunction SSMLSpeechmarkInterface_possibleConstructorReturn(self, call) { if (call && (SSMLSpeechmarkInterface_typeof(call) === "object" || typeof call === "function")) { return call; } return SSMLSpeechmarkInterface_assertThisInitialized(self); }\n\nfunction SSMLSpeechmarkInterface_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction SSMLSpeechmarkInterface_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction SSMLSpeechmarkInterface_getPrototypeOf(o) { SSMLSpeechmarkInterface_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return SSMLSpeechmarkInterface_getPrototypeOf(o); }\n\n/* eslint-disable no-unused-vars */\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/* eslint-disable max-classes-per-file */\n\n/* eslint-disable no-empty */\n\n/**\n * Class factory interface for that registers callback method when a ssml speechmark event is emitted.\n *\n * @interface\n * @extends TextToSpeechFeatureDependentInterface\n */\n\nvar SSMLSpeechmarkInterface_SSMLSpeechmarkInterface = /*#__PURE__*/function (_TextToSpeechFeatureD) {\n SSMLSpeechmarkInterface_inherits(SSMLSpeechmarkInterface, _TextToSpeechFeatureD);\n\n var _super = SSMLSpeechmarkInterface_createSuper(SSMLSpeechmarkInterface);\n\n function SSMLSpeechmarkInterface() {\n SSMLSpeechmarkInterface_classCallCheck(this, SSMLSpeechmarkInterface);\n\n return _super.apply(this, arguments);\n }\n\n SSMLSpeechmarkInterface_createClass(SSMLSpeechmarkInterface, [{\n key: "_onSsml",\n value:\n /**\n * When ssml events are caught, this will try to parse the speech mark value and execute any function which meets criteria defined in the value.\n * Speech mark value will be treated as stringified json format containing required feature name, function name and argument array to pass in.\n * Example speech mark value might look like: \'{"feature":"GestureFeature", "method":"switchToGesture", "args":["genricA", 0.5]}\'\n *\n * @private\n *\n * @param {Object} event - Event data passed from the speech.\n * @param {Object} event.mark - Speechmark object.\n */\n function _onSsml(_ref) {\n var mark = _ref.mark;\n }\n /**\n * Creates a class that implements {@link SSMLSpeechmarkInterface}\n * and extends a specified base class.\n *\n * @param {Class} BaseClass - The class to extend.\n *\n * @return {Class} A class that extends `BaseClass` and implements {@link SSMLSpeechmarkInterface}.\n */\n\n }], [{\n key: "Mixin",\n value: function Mixin(BaseClass) {\n var ParentClass = awspack_TextToSpeechFeatureDependentInterface.Mixin(BaseClass);\n\n var SSMLSpeechMarkMixin = /*#__PURE__*/function (_ParentClass) {\n SSMLSpeechmarkInterface_inherits(SSMLSpeechMarkMixin, _ParentClass);\n\n var _super2 = SSMLSpeechmarkInterface_createSuper(SSMLSpeechMarkMixin);\n\n function SSMLSpeechMarkMixin() {\n SSMLSpeechmarkInterface_classCallCheck(this, SSMLSpeechMarkMixin);\n\n return _super2.apply(this, arguments);\n }\n\n SSMLSpeechmarkInterface_createClass(SSMLSpeechMarkMixin, [{\n key: "_onSsml",\n value: function _onSsml(_ref2) {\n var mark = _ref2.mark;\n\n try {\n var _JSON$parse = JSON.parse(mark.value),\n feature = _JSON$parse.feature,\n method = _JSON$parse.method,\n args = _JSON$parse.args;\n\n if (this.constructor.name === feature) {\n var callback = this[method];\n\n if (callback && typeof callback === \'function\') {\n callback.apply(this, args);\n } else {\n console.warn("Function ".concat(method, " does not exist within feature ").concat(feature));\n }\n }\n } catch (e) {}\n }\n }]);\n\n return SSMLSpeechMarkMixin;\n }(ParentClass);\n\n return SSMLSpeechMarkMixin;\n }\n }]);\n\n return SSMLSpeechmarkInterface;\n}(awspack_TextToSpeechFeatureDependentInterface);\n\n/* harmony default export */ var awspack_SSMLSpeechmarkInterface = (SSMLSpeechmarkInterface_SSMLSpeechmarkInterface);\n// CONCATENATED MODULE: ./src/core/GestureFeature.js\nfunction GestureFeature_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { GestureFeature_typeof = function _typeof(obj) { return typeof obj; }; } else { GestureFeature_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return GestureFeature_typeof(obj); }\n\nfunction GestureFeature_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction GestureFeature_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { GestureFeature_ownKeys(Object(source), true).forEach(function (key) { GestureFeature_defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { GestureFeature_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction GestureFeature_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction GestureFeature_slicedToArray(arr, i) { return GestureFeature_arrayWithHoles(arr) || GestureFeature_iterableToArrayLimit(arr, i) || GestureFeature_unsupportedIterableToArray(arr, i) || GestureFeature_nonIterableRest(); }\n\nfunction GestureFeature_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."); }\n\nfunction GestureFeature_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return GestureFeature_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return GestureFeature_arrayLikeToArray(o, minLen); }\n\nfunction GestureFeature_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction GestureFeature_iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction GestureFeature_arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction GestureFeature_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction GestureFeature_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction GestureFeature_createClass(Constructor, protoProps, staticProps) { if (protoProps) GestureFeature_defineProperties(Constructor.prototype, protoProps); if (staticProps) GestureFeature_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction GestureFeature_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { GestureFeature_get = Reflect.get; } else { GestureFeature_get = function _get(target, property, receiver) { var base = GestureFeature_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return GestureFeature_get(target, property, receiver || target); }\n\nfunction GestureFeature_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = GestureFeature_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction GestureFeature_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) GestureFeature_setPrototypeOf(subClass, superClass); }\n\nfunction GestureFeature_setPrototypeOf(o, p) { GestureFeature_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return GestureFeature_setPrototypeOf(o, p); }\n\nfunction GestureFeature_createSuper(Derived) { var hasNativeReflectConstruct = GestureFeature_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = GestureFeature_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = GestureFeature_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return GestureFeature_possibleConstructorReturn(this, result); }; }\n\nfunction GestureFeature_possibleConstructorReturn(self, call) { if (call && (GestureFeature_typeof(call) === "object" || typeof call === "function")) { return call; } return GestureFeature_assertThisInitialized(self); }\n\nfunction GestureFeature_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction GestureFeature_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction GestureFeature_getPrototypeOf(o) { GestureFeature_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return GestureFeature_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n\n\nvar DefaultGestureWords = {\n big: [\'add\', \'above\', \'authority\', \'big\', \'cover\', \'full\', \'fly\', \'grow\', \'growth\', \'high\', \'huge\', \'increase\', \'major\', \'majority\', \'large\', \'leader\', \'lot\', \'raise\', \'rise\', \'tall\'],\n heart: [\'accept\', \'admit\', \'believe\', \'care\', \'feeling\', \'feel\', \'friend\', \'grateful\', \'happy\', \'heart\', \'human\', \'pain\', \'save\', \'safe\', \'kind\', \'love\'],\n "in": [\'include\', \'including\', \'inside\', \'into\', \'now\', \'near\', \'nearest\', \'closest\', \'therein\', \'within\'],\n many: [\'all\', \'always\', \'any\', \'anyone\', \'among\', \'area\', \'around\', \'beautiful\', \'entire\', \'environment\', \'environments\', \'environmental\', \'everybody\', \'everyone\', \'everything\', \'audience\', \'total\', \'group\', \'groups\', \'million\', \'millions\', \'others\', \'billion\', \'billions\', \'hundred\', \'hundreds\', \'many\', \'thousand\', \'thousands\', \'world\', \'worlds\', \'outside\', \'reveal\'],\n movement: [\'away\', \'across\', \'ahead\', \'along\', \'far\', \'fast\', \'follow\', \'go\', \'leave\', \'move\', \'movement\', \'through\', \'throughout\', \'toward\', \'travel\', \'turned\', \'passed\'],\n one: [\'single\', \'one\', \'once\', \'first\', \'firstly\', \'only\', \'solo\', \'warned\', \'truly\', \'up\', \'alone\'],\n aggressive: [\'power\', \'powers\', \'powerful\', \'assert\', \'assertive\', \'strong\', \'stronger\', \'strongest\', \'strength\', \'flex\', \'dang\', \'damn\', \'damnit\', \'darn\', \'shucks\', \'doh\', \'drat\', \'angry\', \'angrier\', \'angriest\', \'aggressive\', \'annoyed\', \'annoying\', \'attack\', \'attacking\', \'offense\', \'offensive\', \'battle\'],\n you: [\'you\', \'yall\', "y\'all", \'your\', \'yours\', \'thou\', \'thy\'],\n defense: [\'defense\', \'fear\', \'repulsed\', \'scared\', \'scary\', \'scarier\', \'scariest\', \'fearful\', \'afraid\', \'cower\', \'cowers\', \'cowering\', \'hideous\', \'doomed\', \'terrified\', \'terrify\', \'terrifying\', \'terrifies\', \'spooky\', \'spookier\', \'spookiest\'],\n wave: [\'hello\', \'hi\', \'hiya\', \'howdy\', \'welcome\', \'aloha\', \'heya\', \'hey\', \'bye\', \'goodbye\', \'hola\', \'adios\', \'chao\'],\n self: [\'my\', \'I\', \'myself\', \'self\', "I\'ve", \'Ive\', \'me\', \'mine\', \'own\']\n};\n/**\n * Gesture allows you to play animations on demand on one or more layers from script\n * or ssml. If gesture is played that is a QueueState, the queue will automatically\n * be progressed after a given hold time if a looping queued state is reached. Gesture\n * layers can optionally be automatically disabled when no gesture animation is\n * in progress.\n *\n * @extends AbstractHostFeature\n * @implements SSMLSpeechmarkInterface\n * @implements ManagedAnimationLayerInterface\n */\n\nvar GestureFeature_GestureFeature = /*#__PURE__*/function (_AbstractHostFeature$) {\n GestureFeature_inherits(GestureFeature, _AbstractHostFeature$);\n\n var _super = GestureFeature_createSuper(GestureFeature);\n\n /**\n * @constructor\n *\n * @param {core/HostObject} host - Host object that owns the feature.\n * @param {Object=} options - Optional options for the feature.\n * @param {number} [options.holdTime = 3] - Amount of time in seconds that must\n * elapse before advancing a gesture that\'s a {@link QueueState} when the current\n * state in the queue is set to loop infinitely.\n * @param {number} [options.minimumInterval = 0.25] - The minimum amount of time\n * in seconds that must elapse before another gesture can be played.\n * @param {Object} layers - An object that maps layer names to layer options.\n * These are the layers that will be registered as tracked gesture layers. See\n * {@link ManagedAnimationLayerInterface#registerLayer} for more information\n * on expected format for each layer options object.\n */\n function GestureFeature(host) {\n var _this;\n\n var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n _ref$holdTime = _ref.holdTime,\n holdTime = _ref$holdTime === void 0 ? 3 : _ref$holdTime,\n _ref$minimumInterval = _ref.minimumInterval,\n minimumInterval = _ref$minimumInterval === void 0 ? 1 : _ref$minimumInterval,\n _ref$layers = _ref.layers,\n layers = _ref$layers === void 0 ? {} : _ref$layers;\n\n GestureFeature_classCallCheck(this, GestureFeature);\n\n _this = _super.call(this, host);\n _this.holdTime = holdTime;\n _this.minimumInterval = minimumInterval; // Register the gesture layers\n\n Object.entries(layers).forEach(function (_ref2) {\n var _ref3 = GestureFeature_slicedToArray(_ref2, 2),\n name = _ref3[0],\n _ref3$ = _ref3[1],\n options = _ref3$ === void 0 ? {} : _ref3$;\n\n _this.registerLayer(name, options);\n });\n return _this;\n }\n /**\n * Return a valid hold time value. If hold time isn\'t defined for the animation,\n * try to use the hold time for the layer. If that\'s not defined, fall back to\n * the hold time for the feature.\n *\n * @private\n *\n * @param {Object} layer - Managed layer options object.\n * @param {Object} animation - Managed animation options object.\n *\n * @returns {number}\n */\n\n\n GestureFeature_createClass(GestureFeature, [{\n key: "_getHoldTime",\n value: function _getHoldTime(layer, animation) {\n var layerHoldTime = layer.holdTime !== undefined ? layer.holdTime : this.holdTime;\n return animation.holdTime !== undefined ? animation.holdTime : layerHoldTime;\n }\n /**\n * Return a valid minimum interval value. If minimum interval isn\'t defined for\n * the animation, try to use the minimum interval for the layer. If that\'s not\n * defined, fall back to the minimum interval for the feature.\n *\n * @private\n *\n * @param {Object} layer - Managed layer options object.\n * @param {Object} animation - Managed animation options object.\n *\n * @returns {number}\n */\n\n }, {\n key: "_getMinimumInterval",\n value: function _getMinimumInterval(layer, animation) {\n var layerMinimumInterval = layer.minimumInterval !== undefined ? layer.minimumInterval : this.minimumInterval;\n return animation.minimumInterval !== undefined ? animation.minimumInterval : layerMinimumInterval;\n }\n /**\n * Callback for {@link core/AnimationFeature#playNextAnimation} event. If the\n * event is emitted for a managed animation and the new queued state cannot\n * advance on its own, start a new timer promise that will advance the queue\n * once it resolves.\n *\n * @private\n *\n * @param {Object} options - Options object passed from playNextAnimation event.\n * @param {string} layerName - Name of the layer that owns the queue state.\n * @param {string} animationName - Name of the queue state animation.\n * @param {boolean} canAdvance - Whether or not the current state in the queue\n * can advance on its own.\n * @param {boolean} isQueueEnd - Whether the current state in the queue is the last\n * state in the queue.\n */\n\n }, {\n key: "_onNext",\n value: function _onNext(_ref4) {\n var _this2 = this;\n\n var layerName = _ref4.layerName,\n animationName = _ref4.animationName,\n canAdvance = _ref4.canAdvance,\n isQueueEnd = _ref4.isQueueEnd;\n // Exit if this isn\'t a managed layer\n var layer = this._managedLayers[layerName];\n\n if (layer === undefined) {\n return;\n } // Exit if it isn\'t a managed animation\n\n\n var animation = layer.animations[animationName];\n\n if (animation === undefined) {\n return;\n } // Start a new timer for looping states that aren\'t the end of the queue\n\n\n if (!canAdvance && !isQueueEnd && layer.currentGesture === animationName) {\n var holdTime = this._getHoldTime(layer, animation);\n\n layer.holdTimer.cancel(); // Skip to the next animation right away if hold time is zero\n\n if (holdTime <= 0) {\n this._host.AnimationFeature.playNextAnimation(layerName, animationName);\n } // Wait for the given hold time before progressing\n else {\n layer.holdTimer = core_Utils.wait(holdTime, {\n onFinish: function onFinish() {\n // Advance the queue to the next state\n if (layer.currentGesture === animationName) {\n _this2._host.AnimationFeature.playNextAnimation(layerName, animationName);\n }\n }\n });\n }\n }\n }\n /**\n * Callback for {@link core/AnimationFeature#stopAnimation} event. If the\n * event is emitted for a managed animation cancel the layer\'s stored timers.\n * If the layer is set to auto-disable set its weight to 0.\n *\n * @private\n *\n * @param {Object} options - Options object passed from playNextAnimation event.\n * @param {string} layerName - Name of the layer that owns the stopped animation.\n * @param {string} animationName - Name of the animation that was stopped.\n */\n\n }, {\n key: "_onStop",\n value: function _onStop(_ref5) {\n var layerName = _ref5.layerName,\n animationName = _ref5.animationName;\n // Make sure the layer is managed\n var layer = this._managedLayers[layerName];\n\n if (layer === undefined) {\n return;\n } // Make sure the animation is managed\n\n\n var animation = layer.animations[animationName];\n\n if (animation !== undefined && animationName === layer.currentGesture) {\n layer.currentGesture = null;\n layer.playTimer = null;\n layer.holdTimer.cancel(); // Turn off layer weight\n\n if (layer.autoDisable) {\n this.setLayerWeights(function (name) {\n return name === layerName;\n }, 0);\n }\n }\n }\n }, {\n key: "_onAnimationAdded",\n value: function _onAnimationAdded(_ref6) {\n var layerName = _ref6.layerName,\n animationName = _ref6.animationName;\n var layer = this._managedLayers[layerName];\n\n if (layer !== undefined) {\n var animation = layer.animations[animationName]; // Register the animation as active if it is unmanaged\n\n if (animation === undefined) {\n this.registerAnimation(layerName, animationName);\n } // Mark the animation as active if it is managed\n else {\n animation.isActive = true;\n }\n }\n }\n }, {\n key: "registerLayer",\n value: function registerLayer(name) {\n var _this3 = this;\n\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n GestureFeature_get(GestureFeature_getPrototypeOf(GestureFeature.prototype), "registerLayer", this).call(this, name, GestureFeature_objectSpread(GestureFeature_objectSpread({}, options), {}, {\n holdTimer: core_Deferred.resolve(),\n playTimer: null,\n currentGesture: null\n }));\n\n if (this._managedLayers[name].isActive) {\n this._host.AnimationFeature.getAnimations(name).forEach(function (anim) {\n // Automatically register all animations on the layer\n if (_this3._managedLayers[name].animations[anim] === undefined) {\n _this3.registerAnimation(name, anim, _this3._managedLayers[name].animations[anim]);\n }\n });\n }\n }\n }, {\n key: "registerAnimation",\n value: function registerAnimation(layerName, animationName) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n // Try to fall back to a default word array\n if (!(options.words instanceof Array) && !(options.words instanceof Set)) {\n options.words = DefaultGestureWords[animationName] || [];\n }\n\n GestureFeature_get(GestureFeature_getPrototypeOf(GestureFeature.prototype), "registerAnimation", this).call(this, layerName, animationName, options);\n }\n /**\n * Create an object that maps ssml mark syntax required to play each gesture to\n * the words array associated with each gesture. Words arrays are defined at when\n * the gesture animation is registered. Gestures without associated words will\n * be excluded from the result. The resulting object can be used as an input\n * for {@link TextToSpeechUtils.autoGenerateSSMLMarks} to update a speech string\n * with the markup required to play gestures timed with their associated words.\n *\n * @returns {Object}\n */\n\n }, {\n key: "createGestureMap",\n value: function createGestureMap() {\n var _this4 = this;\n\n var gestureMap = {};\n Object.entries(this._managedLayers).forEach(function (_ref7) {\n var _ref8 = GestureFeature_slicedToArray(_ref7, 2),\n layerName = _ref8[0],\n animations = _ref8[1].animations;\n\n Object.entries(animations).forEach(function (_ref9) {\n var _ref10 = GestureFeature_slicedToArray(_ref9, 2),\n animationName = _ref10[0],\n _ref10$ = _ref10[1],\n holdTime = _ref10$.holdTime,\n minimumInterval = _ref10$.minimumInterval,\n words = _ref10$.words,\n transitionTime = _ref10$.transitionTime;\n\n // Only store gestures that have any associated words\n if (words.length) {\n var options = GestureFeature_objectSpread(GestureFeature_objectSpread(GestureFeature_objectSpread({}, holdTime && {\n holdTime: holdTime\n }), minimumInterval && {\n minimumInterval: minimumInterval\n }), transitionTime && {\n transitionTime: transitionTime\n });\n\n var key = {\n feature: _this4.constructor.name,\n method: \'playGesture\',\n args: [layerName, animationName, options]\n };\n gestureMap[JSON.stringify(key)] = words;\n }\n });\n });\n return gestureMap;\n }\n /**\n * Create an array that contains ssml mark syntax required to play each gesture\n * that does not have any associated words. The resulting array can be used as\n * an input for {@link TextToSpeechUtils.autoGenerateSSMLMarks} or\n * {@link TextToSpeechUtils.addMarksToUnmarkedSentences} to update a speech\n * string with the markup required to play random gestures at each unmarked\n * sentence in the string.\n *\n * @param {Array.=} layers - An array of names of managed layers to generate\n * marks for. If undefined, use all managed layers.\n *\n * @returns {Array.}\n */\n\n }, {\n key: "createGenericGestureArray",\n value: function createGenericGestureArray(layers) {\n var _this5 = this;\n\n var genericGestures = [];\n layers = layers || Object.keys(this._managedLayers);\n layers.forEach(function (layerName) {\n var layer = _this5._managedLayers[layerName]; // Make sure the layer is managed\n\n if (!layer) {\n return;\n }\n\n Object.entries(layer.animations).forEach(function (_ref11) {\n var _ref12 = GestureFeature_slicedToArray(_ref11, 2),\n animationName = _ref12[0],\n _ref12$ = _ref12[1],\n holdTime = _ref12$.holdTime,\n minimumInterval = _ref12$.minimumInterval,\n words = _ref12$.words,\n transitionTime = _ref12$.transitionTime;\n\n // Only store gestures that don\'t have any associated words\n if (!words.length) {\n var options = GestureFeature_objectSpread(GestureFeature_objectSpread(GestureFeature_objectSpread({}, holdTime && {\n holdTime: holdTime\n }), minimumInterval && {\n minimumInterval: minimumInterval\n }), transitionTime && {\n transitionTime: transitionTime\n });\n\n var key = JSON.stringify({\n feature: _this5.constructor.name,\n method: \'playGesture\',\n args: [layerName, animationName, options]\n });\n\n if (!genericGestures.includes(key)) {\n genericGestures.push(key);\n }\n }\n });\n });\n return genericGestures;\n }\n /**\n * Play a managed gesture animation.\n *\n * @param {string} layerName - The name of the layer that contains the gesture\n * animation.\n * @param {string} animationName - The name of the gesture animation.\n * @param {Object=} options - Optional gesture options.\n * @param {number=} options.holdTime - This option only applies to {@link QueueState}\n * gestures. When a QueueState gesture progresses to a looping state, this option\n * defines how many seconds should elapse before moving the queue forward. If\n * undefined, it will fall back first to the holdTime defined in the options when\n * the gesture animation was registered and then to the holdTime defined on the\n * feature.\n * @param {number=} options.minimumInterval - The minimum amount of time that\n * must have elapsed since the last time a gesture was played.\n */\n\n }, {\n key: "playGesture",\n value: function playGesture(layerName, animationName) {\n var _ref13 = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},\n holdTime = _ref13.holdTime,\n minimumInterval = _ref13.minimumInterval,\n transitionTime = _ref13.transitionTime,\n _ref13$force = _ref13.force,\n force = _ref13$force === void 0 ? false : _ref13$force;\n\n // Make sure the animation is registered\n if (this._managedLayers[layerName] === undefined || this._managedLayers[layerName].animations[animationName] === undefined) {\n this.registerAnimation(layerName, animationName, {\n holdTime: holdTime,\n minimumInterval: minimumInterval,\n transitionTime: transitionTime\n });\n }\n\n var layer = this._managedLayers[layerName];\n var animation = layer.animations[animationName]; // Make sure the animation is active\n\n if (!animation.isActive) {\n // Create warning message based on which object doesn\'t exist yet\n var typeName = layer.isActive ? \'animation\' : \'layer\';\n var message = "Skipping gesture ".concat(animationName, " on layer ").concat(layerName, " for host ").concat(this._host.id, ". No ").concat(typeName, " exists with this name yet.");\n console.warn(message);\n return core_Deferred.cancel({\n reason: \'inactive\',\n value: typeName\n });\n } // Check if the gesture is already playing\n\n\n var currentGesture = layer.currentGesture;\n\n if (currentGesture === animationName && !force) {\n var _message = "Skipping gesture ".concat(animationName, " on layer ").concat(layerName, " for host ").concat(this._host.id, ". The gesture is already playing. Use options.force to force the gesture replay, which may result in a hard transition.");\n\n console.warn(_message);\n return core_Deferred.cancel({\n reason: \'playing\',\n value: animationName\n });\n } // Update animation options\n\n\n if (holdTime !== undefined) {\n animation.holdTime = holdTime;\n }\n\n if (minimumInterval !== undefined) {\n animation.minimumInterval = minimumInterval;\n } else {\n minimumInterval = this._getMinimumInterval(layer, animation);\n } // Check the interval\n\n\n if (!force && layer.playTimer !== null && layer.playTimer < minimumInterval) {\n console.warn("Skipping gesture ".concat(animationName, " on layer ").concat(layerName, " for host ").concat(this._host.id, ". Minimum interval ").concat(minimumInterval, " has not been met."));\n return core_Deferred.cancel({\n reason: \'minimumInterval\',\n value: minimumInterval - layer.playTimer\n });\n } // Play the animation\n\n\n layer.currentGesture = animationName;\n layer.playTimer = 0;\n layer.holdTimer.cancel();\n\n if (layer.autoDisable) {\n this.setLayerWeights(function (name) {\n return name === layerName;\n }, 1);\n }\n\n return this._host.AnimationFeature.playAnimation(layerName, animationName, transitionTime);\n }\n }, {\n key: "update",\n value: function update(deltaTime) {\n var _this6 = this;\n\n GestureFeature_get(GestureFeature_getPrototypeOf(GestureFeature.prototype), "update", this).call(this, deltaTime); // Increment the timers\n\n\n Object.entries(this._managedLayers).forEach(function (_ref14) {\n var _ref15 = GestureFeature_slicedToArray(_ref14, 2),\n name = _ref15[0],\n options = _ref15[1];\n\n if (options.isActive && !_this6._host.AnimationFeature.getPaused(name)) {\n options.holdTimer.execute(deltaTime);\n\n if (options.playTimer !== null) {\n options.playTimer += deltaTime / 1000;\n }\n }\n });\n }\n }, {\n key: "installApi",\n value: function installApi() {\n /**\n * @inner\n * @namespace GestureFeature\n */\n var api = GestureFeature_get(GestureFeature_getPrototypeOf(GestureFeature.prototype), "installApi", this).call(this);\n\n Object.assign(api, {\n /**\n * @memberof GestureFeature\n * @instance\n * @method\n * @see GestureFeature#createGestureMap\n */\n createGestureMap: this.createGestureMap.bind(this),\n\n /**\n * @memberof GestureFeature\n * @instance\n * @method\n * @see GestureFeature#createGenericGestureArray\n */\n createGenericGestureArray: this.createGenericGestureArray.bind(this),\n\n /**\n * @memberof GestureFeature\n * @instance\n * @method\n * @see GestureFeature#playGesture\n */\n playGesture: this.playGesture.bind(this)\n });\n }\n }]);\n\n return GestureFeature;\n}(core_AbstractHostFeature.mix(awspack_SSMLSpeechmarkInterface.Mixin, animpack_ManagedAnimationLayerInterface.Mixin));\n\nObject.defineProperties(GestureFeature_GestureFeature, {\n DEFAULT_LAYER_OPTIONS: {\n value: GestureFeature_objectSpread(GestureFeature_objectSpread({}, GestureFeature_GestureFeature.DEFAULT_LAYER_OPTIONS), {}, {\n autoDisable: true\n }),\n writable: false\n },\n EVENT_DEPENDENCIES: {\n value: GestureFeature_objectSpread(GestureFeature_objectSpread({}, GestureFeature_GestureFeature.EVENT_DEPENDENCIES), {}, {\n AnimationFeature: GestureFeature_objectSpread(GestureFeature_objectSpread({}, GestureFeature_GestureFeature.EVENT_DEPENDENCIES.AnimationFeature), {}, {\n playNextAnimation: \'_onNext\',\n stopAnimation: \'_onStop\',\n interruptAnimation: \'_onStop\'\n })\n })\n }\n});\n/* harmony default export */ var core_GestureFeature = (GestureFeature_GestureFeature);\n\n// CONCATENATED MODULE: ./src/core/animpack/AnimationUtils.js\nfunction AnimationUtils_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction AnimationUtils_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction AnimationUtils_createClass(Constructor, protoProps, staticProps) { if (protoProps) AnimationUtils_defineProperties(Constructor.prototype, protoProps); if (staticProps) AnimationUtils_defineProperties(Constructor, staticProps); return Constructor; }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n\n/**\r\n * A collection of useful animation functions.\r\n *\r\n * @hideconstructor\r\n */\n\nvar AnimationUtils_AnimationUtils = /*#__PURE__*/function () {\n function AnimationUtils() {\n AnimationUtils_classCallCheck(this, AnimationUtils);\n }\n\n AnimationUtils_createClass(AnimationUtils, null, [{\n key: "lerp",\n value: function lerp(from, to, factor) {\n console.warn("AnimationUtils.lerp is being deprecated. Use MathUtils.lerp instead.");\n return core_MathUtils.lerp(from, to, factor);\n }\n /**\r\n * Clamp a number between 2 values.\r\n *\r\n * @param {number} value - Value to clamp.\r\n * @param {number} [min=0] - Minumum value.\r\n * @param {number} [max=1] - Maximum value.\r\n *\r\n * @returns {number}\r\n */\n\n }, {\n key: "clamp",\n value: function clamp(value) {\n var min = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var max = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;\n console.warn("AnimationUtils.clamp is being deprecated. Use MathUtils.clamp instead.");\n return core_MathUtils.clamp(value, min, max);\n }\n /**\r\n * Return a deferred promise that can be used to update the value of a numeric\r\n * property of this object over time. Pass delta time in milliseconds to the\r\n * deferred promise\'s execute method in an update loop to animate the property\r\n * towards the target value.\r\n *\r\n * @param {Object} propertyOwner - Object that contains the property to animation.\r\n * @param {string} propertyName - Name of the property to animate.\r\n * @param {number} targetValue - Target value to reach.\r\n * @param {Object=} options - Optional options object\r\n * @param {number} [options.seconds=0] - Number of seconds it will take to reach\r\n * the target value.\r\n * @param {Function} [options.easingFn=Linear.InOut] - Easing function to use for animation.\r\n * @param {Function} [options.onFinish] - Callback to execute once the animation completes.\r\n * The target value is passed as a parameter.\r\n * @param {Function=} options.onProgress - Callback to execute each time the animation\r\n * property is updated during the animation. The property\'s value at the time of\r\n * the update is passed as a parameter.\r\n * @param {Function=} options.onCancel - Callback to execute if the user cancels the\r\n * animation before completion. The animation property\'s value at the time of\r\n * cancel is passed as a parameter.\r\n * @param {Function=} options.onError - Callback to execute if the animation stops\r\n * because an error is encountered. The error message is passed as a parameter.\r\n *\r\n * @returns {Deferred} Resolves with the property\'s value once it reaches the\r\n * target value.\r\n */\n\n }, {\n key: "interpolateProperty",\n value: function interpolateProperty(propertyOwner, propertyName, targetValue) {\n var _ref = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {},\n _ref$seconds = _ref.seconds,\n seconds = _ref$seconds === void 0 ? 0 : _ref$seconds,\n easingFn = _ref.easingFn,\n _onFinish = _ref.onFinish,\n _onProgress = _ref.onProgress,\n _onCancel = _ref.onCancel,\n onError = _ref.onError;\n\n // Make sure property is an object\n if (!(propertyOwner instanceof Object)) {\n var e = new Error("Cannot interpolate property ".concat(propertyName, ". Property owner must be an object."));\n\n if (typeof onError === \'function\') {\n onError(e);\n }\n\n return core_Deferred.reject(e);\n } // Make sure property is numeric\n\n\n if (Number.isNaN(Number(propertyOwner[propertyName]))) {\n var _e = new Error("Cannot interpolate property ".concat(propertyName, ". Property must be numeric."));\n\n if (typeof onError === \'function\') {\n onError(_e);\n }\n\n return core_Deferred.reject(_e);\n } // Make sure the target value is numeric\n\n\n if (Number.isNaN(Number(targetValue))) {\n var _e2 = new Error("Cannot interpolate property ".concat(propertyName, " to value ").concat(targetValue, ". Target value must be numeric."));\n\n if (typeof onError === \'function\') {\n onError(_e2);\n }\n\n return core_Deferred.reject(_e2);\n } // Resolve immediately if the target has already been reached\n\n\n var startValue = propertyOwner[propertyName];\n\n if (startValue === targetValue) {\n if (typeof _onFinish === \'function\') {\n _onFinish(targetValue);\n }\n\n return core_Deferred.resolve(targetValue);\n } // Default to linear interpolation\n\n\n if (typeof easingFn !== \'function\') {\n if (easingFn !== undefined) {\n console.warn("Invalid property interpolation easingFn. Defaulting to linear interpolation.");\n }\n\n easingFn = Linear.InOut;\n }\n\n var interpolator = core_Utils.wait(seconds, {\n onFinish: function onFinish() {\n propertyOwner[propertyName] = targetValue;\n\n if (typeof _onFinish === \'function\') {\n _onFinish(targetValue);\n }\n },\n onCancel: function onCancel() {\n if (typeof _onCancel === \'function\') {\n _onCancel(propertyOwner[propertyName]);\n }\n },\n onProgress: function onProgress(progress) {\n if (propertyOwner[propertyName] !== targetValue) {\n // Calculate the lerp factor\n var easeFactor = easingFn(progress);\n\n if (typeof easeFactor !== \'number\') {\n var _e3 = new Error("Invalid property interpolation easingFn. EasingFn must return a number.");\n\n interpolator.reject(_e3);\n return;\n } // Update the value\n\n\n propertyOwner[propertyName] = core_MathUtils.lerp(startValue, targetValue, easeFactor);\n } // Signal progress\n\n\n if (typeof _onProgress === \'function\') {\n _onProgress(propertyOwner[propertyName]);\n } // Signal completion once time is up\n\n\n if (progress === 1) {\n propertyOwner[propertyName] = targetValue;\n interpolator.resolve(targetValue);\n }\n },\n onError: onError\n });\n return interpolator;\n }\n }]);\n\n return AnimationUtils;\n}();\n\n/* harmony default export */ var animpack_AnimationUtils = (AnimationUtils_AnimationUtils);\n// CONCATENATED MODULE: ./src/core/animpack/state/AbstractState.js\nfunction AbstractState_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction AbstractState_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction AbstractState_createClass(Constructor, protoProps, staticProps) { if (protoProps) AbstractState_defineProperties(Constructor.prototype, protoProps); if (staticProps) AbstractState_defineProperties(Constructor, staticProps); return Constructor; }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n/**\n * Base class for a state in our animation system.\n *\n * @abstract\n */\n\nvar AbstractState_AbstractState = /*#__PURE__*/function () {\n /**\n * @constructor\n *\n * @param {Object=} options - Options for the animation state.\n * @param {string=} options.name - Name for the animation state. Names must be\n * unique for the container the state is applied to and should be validated at\n * the container level. If no name is given it will default to the constructor\n * name.\n * @param {weight} [options.weight=0] - The 0-1 amount of influence the state will have.\n */\n function AbstractState() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n AbstractState_classCallCheck(this, AbstractState);\n\n this.name = options.name !== undefined ? options.name : this.constructor.name;\n this._weight = options.weight !== undefined ? core_MathUtils.clamp(options.weight, 0, 1) : 0;\n this._internalWeight = this._weight;\n this._paused = false;\n this._promises = {\n finish: core_Deferred.resolve(),\n weight: core_Deferred.resolve(),\n play: core_Deferred.resolve()\n };\n this._playCallbacks = {\n onFinish: undefined,\n onError: undefined,\n onCancel: undefined\n };\n }\n /**\n * Gets whether or not the state is currently paused.\n *\n * @type {number}\n */\n\n\n AbstractState_createClass(AbstractState, [{\n key: "paused",\n get: function get() {\n return this._paused;\n }\n /**\n * Gets and sets the user defined weight.\n *\n * @type {number}\n */\n\n }, {\n key: "weight",\n get: function get() {\n return this._weight;\n },\n set: function set(weight) {\n this._weight = core_MathUtils.clamp(weight, 0, 1);\n }\n /**\n * Gets whether or not the weight is currently being animated.\n *\n * @readonly\n * @type {boolean}\n */\n\n }, {\n key: "weightPending",\n get: function get() {\n return this._promises.weight && this._promises.weight.pending;\n }\n /**\n * Updates the user defined weight over time.\n *\n * @param {number} weight - The target weight value.\n * @param {number} [seconds=0] - The amount of time it will take to reach the\n * target weight.\n * @param {Function=} easingFn - The easing function to use for interpolation.\n *\n * @returns {Deferred}\n */\n\n }, {\n key: "setWeight",\n value: function setWeight(weight) {\n var seconds = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var easingFn = arguments.length > 2 ? arguments[2] : undefined;\n\n this._promises.weight.cancel();\n\n weight = core_MathUtils.clamp(weight);\n this._promises.weight = animpack_AnimationUtils.interpolateProperty(this, \'weight\', weight, {\n seconds: seconds,\n easingFn: easingFn\n });\n return this._promises.weight;\n }\n /**\n * Gets the internal weight.\n *\n * @readonly\n * @type {number}\n */\n\n }, {\n key: "internalWeight",\n get: function get() {\n return this._internalWeight;\n }\n /**\n * Multiplies the user weight by a factor to determine the internal weight.\n *\n * @param {number} factor - 0-1 multiplier to apply to the user weight.\n */\n\n }, {\n key: "updateInternalWeight",\n value: function updateInternalWeight(factor) {\n this._internalWeight = this._weight * factor;\n }\n /**\n * Update any values that need to be evaluated every frame.\n *\n * @param {number} deltaTime - Time in milliseconds since the last update.\n */\n\n }, {\n key: "update",\n value: function update(deltaTime) {\n if (!this._paused) {\n Object.values(this._promises).forEach(function (promise) {\n promise.execute(deltaTime);\n });\n }\n }\n /**\n * Start playback of the state from the beginning.\n *\n * @param {Function=} onFinish - Function to execute when the state finishes.\n * @param {Function=} onError - Function to execute if the state encounters\n * an error during playback.\n * @param {Function=} onCancel - Function to execute if playback is canceled.\n *\n * @returns {Deferred}\n */\n\n }, {\n key: "play",\n value: function play(onFinish, onError, onCancel) {\n this._paused = false;\n this._playCallbacks.onFinish = onFinish;\n this._playCallbacks.onError = onError;\n this._playCallbacks.onCancel = onCancel;\n this._promises.play = new core_Deferred(undefined, onFinish, onError, onCancel);\n this._promises.finish = core_Deferred.all([this._promises.play, this._promises.weight]);\n return this._promises.finish;\n }\n /**\n * Pause playback of the state. This prevents pending promises from being executed.\n *\n * @returns {boolean}\n */\n\n }, {\n key: "pause",\n value: function pause() {\n this._paused = true;\n return true;\n }\n /**\n * Resume playback of the state.\n *\n * @param {Function=} onFinish - Function to execute when the state finishes.\n * @param {Function=} onError - Function to execute if the state encounters\n * an error during playback.\n * @param {Function=} onCancel - Function to execute if playback is canceled.\n *\n * @returns {Deferred}\n */\n\n }, {\n key: "resume",\n value: function resume(onFinish, onError, onCancel) {\n this._paused = false;\n\n if (!this._promises.play.pending) {\n this._playCallbacks.onFinish = onFinish || this._playCallbacks.onFinish;\n this._playCallbacks.onError = onError || this._playCallbacks.onError;\n this._playCallbacks.onCancel = onCancel || this._playCallbacks.onCancel;\n this._promises.play = new core_Deferred(undefined, this._playCallbacks.onFinish, this._playCallbacks.onError, this._playCallbacks.onCancel);\n this._promises.finish = core_Deferred.all([this._promises.play, this._promises.weight]);\n }\n\n return this._promises.finish;\n }\n /**\n * Cancel playback of the state and cancel any pending promises.\n *\n * @returns {boolean}\n */\n\n }, {\n key: "cancel",\n value: function cancel() {\n this._paused = true;\n Object.values(this._promises).forEach(function (promise) {\n promise.cancel();\n });\n return true;\n }\n /**\n * Stop playback of the state and resolve any pending promises.\n *\n * @returns {boolean}\n */\n\n }, {\n key: "stop",\n value: function stop() {\n this._paused = true;\n Object.values(this._promises).forEach(function (promise) {\n promise.resolve();\n });\n return true;\n }\n /**\n * Cancel any pending promises and remove reference to them.\n */\n\n }, {\n key: "discard",\n value: function discard() {\n this.cancel();\n delete this._promises;\n }\n /**\n * Force the internal weight to 0. Should be called before switching or transitioning\n * to a new state.\n */\n\n }, {\n key: "deactivate",\n value: function deactivate() {\n this.updateInternalWeight(0);\n }\n }]);\n\n return AbstractState;\n}();\n\n/* harmony default export */ var state_AbstractState = (AbstractState_AbstractState);\n// CONCATENATED MODULE: ./src/core/animpack/state/TransitionState.js\nfunction TransitionState_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { TransitionState_typeof = function _typeof(obj) { return typeof obj; }; } else { TransitionState_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return TransitionState_typeof(obj); }\n\nfunction TransitionState_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction TransitionState_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction TransitionState_createClass(Constructor, protoProps, staticProps) { if (protoProps) TransitionState_defineProperties(Constructor.prototype, protoProps); if (staticProps) TransitionState_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction TransitionState_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { TransitionState_get = Reflect.get; } else { TransitionState_get = function _get(target, property, receiver) { var base = TransitionState_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return TransitionState_get(target, property, receiver || target); }\n\nfunction TransitionState_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = TransitionState_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction TransitionState_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) TransitionState_setPrototypeOf(subClass, superClass); }\n\nfunction TransitionState_setPrototypeOf(o, p) { TransitionState_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return TransitionState_setPrototypeOf(o, p); }\n\nfunction TransitionState_createSuper(Derived) { var hasNativeReflectConstruct = TransitionState_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = TransitionState_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = TransitionState_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return TransitionState_possibleConstructorReturn(this, result); }; }\n\nfunction TransitionState_possibleConstructorReturn(self, call) { if (call && (TransitionState_typeof(call) === "object" || typeof call === "function")) { return call; } return TransitionState_assertThisInitialized(self); }\n\nfunction TransitionState_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction TransitionState_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction TransitionState_getPrototypeOf(o) { TransitionState_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return TransitionState_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n/**\r\n * Class for smooth transitioning between states on an animation layer.\r\n *\r\n * @extends AbstractState\r\n */\n\nvar TransitionState_TransitionState = /*#__PURE__*/function (_AbstractState) {\n TransitionState_inherits(TransitionState, _AbstractState);\n\n var _super = TransitionState_createSuper(TransitionState);\n\n function TransitionState() {\n var _this;\n\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n TransitionState_classCallCheck(this, TransitionState);\n\n _this = _super.call(this, options);\n _this._to = null;\n _this._from = [];\n _this._weightPromise = core_Deferred.resolve();\n return _this;\n }\n\n TransitionState_createClass(TransitionState, [{\n key: "internalWeight",\n get: function get() {\n // Find the combined weight of all sub-states\n var totalWeight = 0;\n\n if (this._to) {\n totalWeight += this._to.weight;\n }\n\n this._from.forEach(function (state) {\n totalWeight += state.weight;\n });\n\n return totalWeight * this._internalWeight;\n }\n }, {\n key: "updateInternalWeight",\n value: function updateInternalWeight(factor) {\n var _this2 = this;\n\n TransitionState_get(TransitionState_getPrototypeOf(TransitionState.prototype), "updateInternalWeight", this).call(this, factor);\n\n this._from.forEach(function (state) {\n state.updateInternalWeight(_this2._internalWeight);\n });\n\n if (this._to) {\n this._to.updateInternalWeight(this._internalWeight);\n }\n }\n /**\r\n * Update sub-states the transition is controlling and start new weight\r\n * animations on each one. This should be called each time the current state of\r\n * an animation layer gets updated to a new value and a transition time greater\r\n * that zero is specified.\r\n *\r\n * @param {Array.} [currentStates=[]] - States whose weight values\r\n * will be animated to 0.\r\n * @param {AbstractState=} targetState - State whose weight will be animated\r\n * to 1.\r\n * @param {number} transitionTime - Amount of time it will in seconds take for\r\n * weight animations to complete.\r\n * @param {Function=} easingFn - Easing function to use for weight animations.\r\n * Default is Easing.Linear.InOut.\r\n * @param {Function=} onComplete - Function to execute once all weight animations\r\n * complete.\r\n */\n\n }, {\n key: "configure",\n value: function configure() {\n var currentStates = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n var targetState = arguments.length > 1 ? arguments[1] : undefined;\n var transitionTime = arguments.length > 2 ? arguments[2] : undefined;\n var easingFn = arguments.length > 3 ? arguments[3] : undefined;\n var onComplete = arguments.length > 4 ? arguments[4] : undefined;\n\n // Deactivate any states that aren\'t in the new configuration\n if (this._to === targetState || currentStates.includes(this._to)) {\n this._to = null;\n }\n\n this._from = this._from.filter(function (state) {\n return state !== targetState && !currentStates.includes(state);\n });\n this.deactivate();\n this._from = currentStates;\n this._to = targetState;\n this.reset(transitionTime, easingFn, onComplete);\n }\n /**\r\n * Start new weight animations state the transition controls. This should be called\r\n * if an animation is played with a transition time greater than zero and a transtion\r\n * to that animation was already in progress.\r\n *\r\n * @param {number} transitionTime - Amount of time it will in seconds take for\r\n * weight animations to complete.\r\n * @param {Function=} easingFn - Easing function to use for weight animations.\r\n * Default is Easing.Linear.InOut.\r\n * @param {Function=} onComplete - Function to execute once all weight animations\r\n * complete.\r\n */\n\n }, {\n key: "reset",\n value: function reset(transitionTime, easingFn, onComplete) {\n var _this3 = this;\n\n // Stop any pending promises\n this._weightPromise.cancel(); // Start tweening weight to 0 for the current states\n\n\n var weightPromises = this._from.map(function (state) {\n return state.setWeight(0, transitionTime, easingFn);\n }); // Start tweening weight to 1 for the target state\n\n\n if (this._to) {\n weightPromises.push(this._to.setWeight(1, transitionTime, easingFn));\n this.name = this._to.name;\n } else {\n this.name = null;\n }\n\n this._weightPromise = core_Deferred.all(weightPromises, function () {\n _this3._from.forEach(function (state) {\n state.cancel();\n state.deactivate();\n });\n\n if (typeof onComplete === \'function\') {\n onComplete();\n }\n });\n }\n }, {\n key: "play",\n value: function play(onFinish, onError, onCancel, onNext) {\n this._paused = false;\n this._playCallbacks.onFinish = onFinish;\n this._playCallbacks.onError = onError;\n this._playCallbacks.onCancel = onCancel;\n var promises = [this._weightPromise];\n\n this._from.forEach(function (state) {\n state.resume();\n });\n\n if (this._to) {\n this._promises.play = this._to.play(undefined, undefined, undefined, onNext);\n promises.push(this._promises.play);\n }\n\n this._promises.finish = core_Deferred.all(promises, onFinish, onError, onCancel);\n return this._promises.finish;\n }\n }, {\n key: "pause",\n value: function pause() {\n this._from.forEach(function (state) {\n state.pause();\n });\n\n if (this._to) {\n this._to.pause();\n }\n\n return TransitionState_get(TransitionState_getPrototypeOf(TransitionState.prototype), "pause", this).call(this);\n }\n }, {\n key: "resume",\n value: function resume(onFinish, onError, onCancel, onNext) {\n this._paused = false;\n\n if (!this._promises.play.pending) {\n this._playCallbacks.onFinish = onFinish || this._playCallbacks.onFinish;\n this._playCallbacks.onError = onError || this._playCallbacks.onError;\n this._playCallbacks.onCancel = onCancel || this._playCallbacks.onCancel;\n }\n\n var promises = [this._weightPromise];\n\n this._from.forEach(function (state) {\n state.resume();\n });\n\n if (this._to) {\n this._promises.play = this._to.resume(undefined, undefined, undefined, onNext);\n promises.push(this._promises.play);\n }\n\n this._promises.finish = core_Deferred.all(promises, this._playCallbacks.onFinish, this._playCallbacks.onError, this._playCallbacks.onCancel);\n return this._promises.finish;\n }\n }, {\n key: "cancel",\n value: function cancel() {\n this._from.forEach(function (state) {\n state.pause();\n });\n\n if (this._to) {\n this._to.cancel();\n }\n\n this._weightPromise.cancel();\n\n return TransitionState_get(TransitionState_getPrototypeOf(TransitionState.prototype), "cancel", this).call(this);\n }\n }, {\n key: "stop",\n value: function stop() {\n this._from.forEach(function (state) {\n state.pause();\n });\n\n if (this._to) {\n this._to.stop();\n }\n\n return TransitionState_get(TransitionState_getPrototypeOf(TransitionState.prototype), "stop", this).call(this);\n }\n }, {\n key: "update",\n value: function update(deltaTime) {\n TransitionState_get(TransitionState_getPrototypeOf(TransitionState.prototype), "update", this).call(this, deltaTime);\n\n this._from.forEach(function (state) {\n state.update(deltaTime);\n });\n\n if (this._to) {\n this._to.update(deltaTime);\n }\n }\n }, {\n key: "discard",\n value: function discard() {\n TransitionState_get(TransitionState_getPrototypeOf(TransitionState.prototype), "discard", this).call(this);\n\n this._weightPromise.cancel();\n\n delete this._weightPromise;\n this._to = null;\n this._from.length = 0;\n }\n }, {\n key: "deactivate",\n value: function deactivate() {\n if (this._to) {\n this._to.deactivate();\n }\n\n this._from.forEach(function (state) {\n state.deactivate();\n });\n }\n }]);\n\n return TransitionState;\n}(state_AbstractState);\n\n/* harmony default export */ var state_TransitionState = (TransitionState_TransitionState);\n// CONCATENATED MODULE: ./src/core/animpack/AnimationPlayerInterface.js\nfunction AnimationPlayerInterface_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { AnimationPlayerInterface_typeof = function _typeof(obj) { return typeof obj; }; } else { AnimationPlayerInterface_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return AnimationPlayerInterface_typeof(obj); }\n\nfunction AnimationPlayerInterface_toConsumableArray(arr) { return AnimationPlayerInterface_arrayWithoutHoles(arr) || AnimationPlayerInterface_iterableToArray(arr) || AnimationPlayerInterface_unsupportedIterableToArray(arr) || AnimationPlayerInterface_nonIterableSpread(); }\n\nfunction AnimationPlayerInterface_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."); }\n\nfunction AnimationPlayerInterface_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return AnimationPlayerInterface_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return AnimationPlayerInterface_arrayLikeToArray(o, minLen); }\n\nfunction AnimationPlayerInterface_iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction AnimationPlayerInterface_arrayWithoutHoles(arr) { if (Array.isArray(arr)) return AnimationPlayerInterface_arrayLikeToArray(arr); }\n\nfunction AnimationPlayerInterface_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction AnimationPlayerInterface_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { AnimationPlayerInterface_get = Reflect.get; } else { AnimationPlayerInterface_get = function _get(target, property, receiver) { var base = AnimationPlayerInterface_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return AnimationPlayerInterface_get(target, property, receiver || target); }\n\nfunction AnimationPlayerInterface_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = AnimationPlayerInterface_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction AnimationPlayerInterface_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) AnimationPlayerInterface_setPrototypeOf(subClass, superClass); }\n\nfunction AnimationPlayerInterface_setPrototypeOf(o, p) { AnimationPlayerInterface_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return AnimationPlayerInterface_setPrototypeOf(o, p); }\n\nfunction AnimationPlayerInterface_createSuper(Derived) { var hasNativeReflectConstruct = AnimationPlayerInterface_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = AnimationPlayerInterface_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = AnimationPlayerInterface_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return AnimationPlayerInterface_possibleConstructorReturn(this, result); }; }\n\nfunction AnimationPlayerInterface_possibleConstructorReturn(self, call) { if (call && (AnimationPlayerInterface_typeof(call) === "object" || typeof call === "function")) { return call; } return AnimationPlayerInterface_assertThisInitialized(self); }\n\nfunction AnimationPlayerInterface_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction AnimationPlayerInterface_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction AnimationPlayerInterface_getPrototypeOf(o) { AnimationPlayerInterface_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return AnimationPlayerInterface_getPrototypeOf(o); }\n\nfunction AnimationPlayerInterface_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction AnimationPlayerInterface_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction AnimationPlayerInterface_createClass(Constructor, protoProps, staticProps) { if (protoProps) AnimationPlayerInterface_defineProperties(Constructor.prototype, protoProps); if (staticProps) AnimationPlayerInterface_defineProperties(Constructor, staticProps); return Constructor; }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/* eslint-disable max-classes-per-file */\n\n/* eslint-disable no-unused-vars */\n\n/* eslint-disable no-empty-function */\n\n/* eslint-disable getter-return */\n\n/* eslint-disable no-useless-constructor */\n\n\n/**\n * Class factory interface for controlling playback of a collection of animations.\n * One animation can be played at any given time, crossfading between animations\n * will result in playing a {@link TransitionState}.\n *\n * @interface\n */\n\nvar AnimationPlayerInterface_AnimationPlayerInterface = /*#__PURE__*/function () {\n function AnimationPlayerInterface() {\n AnimationPlayerInterface_classCallCheck(this, AnimationPlayerInterface);\n }\n\n AnimationPlayerInterface_createClass(AnimationPlayerInterface, [{\n key: "paused",\n get:\n /**\n * Gets whether or not the player is updating states.\n *\n * @readonly\n * @type {boolean}\n */\n function get() {\n return this._paused;\n }\n /**\n * Gets and sets the default number of seconds it takes to transition to a new\n * animation.\n *\n * @type {number}\n */\n\n }, {\n key: "transitionTime",\n get: function get() {},\n set: function set(seconds) {}\n /**\n * Gets and sets the default easing function to use when transitioning and\n * setting weights.\n *\n * @type {Function}\n */\n\n }, {\n key: "easingFn",\n get: function get() {},\n set: function set(fn) {}\n /**\n * Gets the state the layer is currently in control of.\n *\n * @readonly\n * @type {AbstractState}\n */\n\n }, {\n key: "currentState",\n get: function get() {}\n /**\n * Gets the name of the state the layer is currently in control of.\n *\n * @readonly\n * @type {string}\n */\n\n }, {\n key: "currentAnimation",\n get: function get() {}\n /**\n * Gets whether or not the layer is currently transitioning to a new animation.\n *\n * @readonly\n * @type {boolean}\n */\n\n }, {\n key: "isTransitioning",\n get: function get() {}\n /**\n * Update the layer\'s current state to a new value. If transitionTime is defined\n * and greater than zero, perform a smooth blend between any states that currently\n * have non-zero weight values and the new state.\n *\n * @private\n *\n * @param {(string|null)} name - Name of the state to transition to.\n * @param {string} playMethod - Name of the operation being prepared for, to be\n * used in error messaging.\n * @param {number=} transitionTime - Amount of time in seconds it will take to\n * switch to the new state.\n * @param {Function=} easingFn - Easing function to use when transitioning to a\n * new state over time.\n * @param {Function=} onError - Function to execute if an error is encountered.\n */\n\n }, {\n key: "_prepareCurrentState",\n value: function _prepareCurrentState(name, playMethod, transitionTime, easingFn, onError) {}\n /**\n * Start playback an animation from the beginning.\n *\n * @param {string} name - Name of the animation to play.\n * @param {number=} transitionTime - Amount of time it will take before the\n * new state has full influence for the layer.\n * @param {Function=} easingFn - Easing function to use for blending if transitionTime\n * is greater than zero.\n * @param {Function=} onFinish - Function to execute when the animation finishes.\n * @param {Function=} onError - Function to execute if the animation encounters\n * an error during playback.\n * @param {Function=} onCancel - Function to execute if playback is canceled.\n * @param {Function=} onNext - Function to execute if an animation queue is\n * played and it advances to the next animation.\n *\n * @returns {Deferred}\n */\n\n }, {\n key: "playAnimation",\n value: function playAnimation(name, transitionTime, easingFn, onFinish, onError, onCancel, onNext) {}\n /**\n * Cancel playback of the current animation.\n *\n * @returns {boolean}\n */\n\n }, {\n key: "cancelAnimation",\n value: function cancelAnimation() {}\n /**\n * Pause playback of the current animation.\n *\n * @returns {boolean}\n */\n\n }, {\n key: "pauseAnimation",\n value: function pauseAnimation() {}\n /**\n * Resume playback of an animation.\n *\n * @param {string=} name - Name of the animation to resume playback for. Default\n * is the layer\'s current animation name.\n * @param {number=} transitionTime - Amount of time it will take before the\n * new state has full influence for the layer.\n * @param {Function=} onFinish - Function to execute when the state finishes.\n * @param {Function=} onError - Function to execute if the state encounters\n * an error during playback.\n * @param {Function=} onCancel - Function to execute if playback is canceled.\n * @param {Function=} onNext - Function to execute if an animation queue is\n * played and it advances to the next animation.\n *\n * @returns {Deferred}\n */\n\n }, {\n key: "resumeAnimation",\n value: function resumeAnimation(name, transitionTime, easingFn, onFinish, onError, onCancel, onNext) {}\n /**\n * Stop playback of the current animation.\n *\n * @returns {boolean}\n */\n\n }, {\n key: "stopAnimation",\n value: function stopAnimation() {}\n /**\n * Update the current animation.\n *\n * @param {number} deltaTime - Time in milliseconds since the last update.\n */\n\n }, {\n key: "update",\n value: function update(deltaTime) {}\n /**\n * Discard the transition state.\n */\n\n }, {\n key: "discard",\n value: function discard() {}\n /**\n * Creates a class that implements {@link AnimationPlayerInterface} and extends\n * a specified base class.\n *\n * @param {Class} [BaseClass = class{}] - The class to extend.\n *\n * @return {Class} A class that extends `BaseClass` and implements {@link AnimationPlayerInterface}.\n */\n\n }], [{\n key: "Mixin",\n value: function Mixin() {\n var BaseClass = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : /*#__PURE__*/function () {\n function _class() {\n AnimationPlayerInterface_classCallCheck(this, _class);\n }\n\n return _class;\n }();\n\n var AnimationPlayerMixin = /*#__PURE__*/function (_BaseClass) {\n AnimationPlayerInterface_inherits(AnimationPlayerMixin, _BaseClass);\n\n var _super = AnimationPlayerInterface_createSuper(AnimationPlayerMixin);\n\n function AnimationPlayerMixin() {\n var _this;\n\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n AnimationPlayerInterface_classCallCheck(this, AnimationPlayerMixin);\n\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\n _this = _super.call.apply(_super, [this, options].concat(args));\n _this._transitionState = new state_TransitionState();\n _this._states = _this._states !== undefined ? _this._states : new Map();\n _this._currentState = null;\n _this._paused = false;\n _this._transitionTime = Number(options.transitionTime) >= 0 ? Number(options.transitionTime) : 0;\n _this._easingFn = typeof options.easingFn === \'function\' ? options.easingFn : undefined;\n return _this;\n }\n\n AnimationPlayerInterface_createClass(AnimationPlayerMixin, [{\n key: "paused",\n get: function get() {\n return this._paused;\n }\n }, {\n key: "transitionTime",\n get: function get() {\n return this._transitionTime;\n },\n set: function set(seconds) {\n seconds = Number(seconds);\n\n if (!(seconds >= 0)) {\n throw new Error("Cannot set transition time for ".concat(this.constructor.name, " to ").concat(seconds, ". Seconds must be a numeric value greather than or equal to zero."));\n }\n\n this._transitionTime = seconds;\n }\n }, {\n key: "easingFn",\n get: function get() {\n return this._easingFn;\n },\n set: function set(fn) {\n this._easingFn = fn;\n }\n }, {\n key: "currentState",\n get: function get() {\n return this._currentState;\n }\n }, {\n key: "currentAnimation",\n get: function get() {\n if (this._currentState) {\n return this._currentState.name;\n }\n\n return null;\n }\n }, {\n key: "isTransitioning",\n get: function get() {\n return this._currentState === this._transitionState;\n }\n }, {\n key: "_prepareCurrentState",\n value: function _prepareCurrentState(name, playMethod, transitionTime, easingFn, onError) {\n var _this2 = this;\n\n if (name !== null && !this._states.has(name)) {\n var e = new Error("Cannot ".concat(playMethod, " animation ").concat(name, ". No animation exists with this name."));\n\n if (typeof onError === \'function\') {\n onError(e);\n }\n\n throw e;\n }\n\n var targetState = name !== null ? this._states.get(name) : null; // Make sure the new state isn\'t already playing\n\n if (this.currentAnimation !== name) {\n // Switch to the new state immediately\n if (transitionTime <= 0) {\n // Cancel the current state and set its weight to 0\n if (this._currentState) {\n this._currentState.cancel();\n\n this._currentState.weight = 0;\n\n this._currentState.deactivate();\n }\n\n this._currentState = targetState;\n } // Blend to the new state over time\n else {\n // Make sure to transition out of any states with non-zero weight\n var currentStates = AnimationPlayerInterface_toConsumableArray(this._states.values()).filter(function (s) {\n return s !== targetState && (s.weight || s.weightPending);\n }); // Update the transition state with new inputs\n\n\n this._transitionState.configure(currentStates, targetState, transitionTime, easingFn, function () {\n _this2._currentState = targetState;\n _this2._transitionState.weight = 0;\n });\n\n this._currentState = this._transitionState;\n }\n } else if (playMethod === \'play\') {\n this._currentState.cancel();\n\n if (this._currentState === this._transitionState) {\n this._transitionState.reset(transitionTime, easingFn, function () {\n _this2._currentState = targetState;\n _this2._transitionState.weight = 0;\n });\n }\n } // Update weight for the new current state so it has full influence for the player\n\n\n this._currentState.weight = 1;\n\n this._currentState.updateInternalWeight(this._internalWeight);\n }\n }, {\n key: "playAnimation",\n value: function playAnimation(name, transitionTime, easingFn, onFinish, onError, onCancel, onNext) {\n var error;\n var reject = false;\n\n try {\n this._prepareCurrentState(name, \'play\', transitionTime !== undefined ? transitionTime : this._transitionTime, easingFn !== undefined ? easingFn : this._easingFn, onError);\n } catch (e) {\n error = e;\n reject = true;\n }\n\n if (reject) {\n return core_Deferred.reject(error);\n }\n\n return this._currentState.play(onFinish, onError, onCancel, onNext);\n }\n }, {\n key: "pauseAnimation",\n value: function pauseAnimation() {\n if (this._currentState) {\n return this._currentState.pause();\n } else {\n return false;\n }\n }\n }, {\n key: "resumeAnimation",\n value: function resumeAnimation(name, transitionTime, easingFn, onFinish, onError, onCancel, onNext) {\n if (name === undefined && this._currentState) {\n name = this._currentState.name;\n }\n\n var error;\n var reject = false;\n\n try {\n this._prepareCurrentState(name, \'resume\', transitionTime !== undefined ? transitionTime : this._transitionTime, easingFn !== undefined ? easingFn : this._easingFn, onError);\n } catch (e) {\n error = e;\n reject = true;\n }\n\n if (reject) {\n return core_Deferred.reject(error);\n }\n\n return this._currentState.resume(onFinish, onError, onCancel, onNext);\n }\n }, {\n key: "cancelAnimation",\n value: function cancelAnimation() {\n if (this._currentState) {\n return this._currentState.cancel();\n } else {\n return false;\n }\n }\n }, {\n key: "stopAnimation",\n value: function stopAnimation() {\n if (this._currentState) {\n return this._currentState.stop();\n } else {\n return false;\n }\n }\n }, {\n key: "update",\n value: function update(deltaTime) {\n if (AnimationPlayerInterface_get(AnimationPlayerInterface_getPrototypeOf(AnimationPlayerMixin.prototype), "update", this)) {\n AnimationPlayerInterface_get(AnimationPlayerInterface_getPrototypeOf(AnimationPlayerMixin.prototype), "update", this).call(this, deltaTime);\n }\n\n if (this._currentState) {\n this._currentState.update(deltaTime);\n }\n }\n }, {\n key: "discard",\n value: function discard() {\n if (AnimationPlayerInterface_get(AnimationPlayerInterface_getPrototypeOf(AnimationPlayerMixin.prototype), "discard", this)) {\n AnimationPlayerInterface_get(AnimationPlayerInterface_getPrototypeOf(AnimationPlayerMixin.prototype), "discard", this).call(this);\n }\n\n this._transitionState.discard();\n\n delete this._transitionState;\n }\n }]);\n\n return AnimationPlayerMixin;\n }(BaseClass);\n\n return AnimationPlayerMixin;\n }\n }]);\n\n return AnimationPlayerInterface;\n}();\n\n/* harmony default export */ var animpack_AnimationPlayerInterface = (AnimationPlayerInterface_AnimationPlayerInterface);\n// CONCATENATED MODULE: ./src/core/animpack/state/StateContainerInterface.js\nfunction StateContainerInterface_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { StateContainerInterface_typeof = function _typeof(obj) { return typeof obj; }; } else { StateContainerInterface_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return StateContainerInterface_typeof(obj); }\n\nfunction StateContainerInterface_toConsumableArray(arr) { return StateContainerInterface_arrayWithoutHoles(arr) || StateContainerInterface_iterableToArray(arr) || StateContainerInterface_unsupportedIterableToArray(arr) || StateContainerInterface_nonIterableSpread(); }\n\nfunction StateContainerInterface_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."); }\n\nfunction StateContainerInterface_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return StateContainerInterface_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return StateContainerInterface_arrayLikeToArray(o, minLen); }\n\nfunction StateContainerInterface_iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction StateContainerInterface_arrayWithoutHoles(arr) { if (Array.isArray(arr)) return StateContainerInterface_arrayLikeToArray(arr); }\n\nfunction StateContainerInterface_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction StateContainerInterface_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) StateContainerInterface_setPrototypeOf(subClass, superClass); }\n\nfunction StateContainerInterface_setPrototypeOf(o, p) { StateContainerInterface_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return StateContainerInterface_setPrototypeOf(o, p); }\n\nfunction StateContainerInterface_createSuper(Derived) { var hasNativeReflectConstruct = StateContainerInterface_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = StateContainerInterface_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = StateContainerInterface_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return StateContainerInterface_possibleConstructorReturn(this, result); }; }\n\nfunction StateContainerInterface_possibleConstructorReturn(self, call) { if (call && (StateContainerInterface_typeof(call) === "object" || typeof call === "function")) { return call; } return StateContainerInterface_assertThisInitialized(self); }\n\nfunction StateContainerInterface_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction StateContainerInterface_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction StateContainerInterface_getPrototypeOf(o) { StateContainerInterface_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return StateContainerInterface_getPrototypeOf(o); }\n\nfunction StateContainerInterface_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction StateContainerInterface_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction StateContainerInterface_createClass(Constructor, protoProps, staticProps) { if (protoProps) StateContainerInterface_defineProperties(Constructor.prototype, protoProps); if (staticProps) StateContainerInterface_defineProperties(Constructor, staticProps); return Constructor; }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/* eslint-disable max-classes-per-file */\n\n/* eslint-disable no-unused-vars */\n\n/* eslint-disable no-empty-function */\n\n/* eslint-disable getter-return */\n\n/**\n * Class factory interface for manipulating a collection of {@link AbstractState}.\n *\n * @interface\n */\n\nvar StateContainerInterface_StateContainerInterface = /*#__PURE__*/function () {\n function StateContainerInterface() {\n StateContainerInterface_classCallCheck(this, StateContainerInterface);\n }\n\n StateContainerInterface_createClass(StateContainerInterface, [{\n key: "getState",\n value:\n /**\n * Return the state with the given name.\n *\n * @param {string} name - Name of the state.\n *\n * @returns {AbstractState}\n */\n function getState(name) {}\n /**\n * Gets an array of the names of all states in the container.\n *\n * @type {Array.}\n */\n\n }, {\n key: "getStateNames",\n value: function getStateNames() {}\n /**\n * Add a new state to be controlled by the container. States are stored keyed\n * by their name property, which must be unique. If it isn\'t, a number will\n * be added or incremented until a unique key is generated.\n *\n * @param {AbstractState} state - State to add to the container.\n *\n * @returns {string} - Unique name of the state.\n */\n\n }, {\n key: "addState",\n value: function addState(state) {}\n /**\n * Removes a state with the given name from the container.\n *\n * @param {string} name - Name of the state to remove.\n *\n * @returns {boolean} - Whether or not a state was removed.\n */\n\n }, {\n key: "removeState",\n value: function removeState(name) {}\n /**\n * Renames a state with the given name in the container. Name must be unique\n * to the container, if it isn\'t the name will be incremented until it is unique.\n *\n * @param {string} currentName - Name of the state to rename.\n * @param {string} newName - Name to update the state with.\n *\n * @returns {string} - Updated name for the state.\n */\n\n }, {\n key: "renameState",\n value: function renameState(currentName, newName) {}\n /**\n * Discards all states.\n */\n\n }, {\n key: "discardStates",\n value: function discardStates() {}\n /**\n * Creates a class that implements {@link StateContainerInterface} and extends\n * a specified base class.\n *\n * @param {Class} [BaseClass = class{}] - The class to extend.\n *\n * @return {Class} A class that extends `BaseClass` and implements {@link StateContainerInterface}.\n */\n\n }], [{\n key: "Mixin",\n value: function Mixin() {\n var BaseClass = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : /*#__PURE__*/function () {\n function _class() {\n StateContainerInterface_classCallCheck(this, _class);\n }\n\n return _class;\n }();\n\n /**\n * This mixin adds functionality for manipulating uniquely-named animation states in\n * a map.\n */\n var StateContainerMixin = /*#__PURE__*/function (_BaseClass) {\n StateContainerInterface_inherits(StateContainerMixin, _BaseClass);\n\n var _super = StateContainerInterface_createSuper(StateContainerMixin);\n\n function StateContainerMixin() {\n var _this;\n\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n StateContainerInterface_classCallCheck(this, StateContainerMixin);\n\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\n _this = _super.call.apply(_super, [this, options].concat(args));\n _this._states = _this._states !== undefined ? _this._states : new Map();\n return _this;\n }\n\n StateContainerInterface_createClass(StateContainerMixin, [{\n key: "getState",\n value: function getState(name) {\n return this._states.get(name);\n }\n }, {\n key: "getStateNames",\n value: function getStateNames() {\n return StateContainerInterface_toConsumableArray(this._states.keys());\n }\n }, {\n key: "addState",\n value: function addState(state) {\n // Make sure the state is not already in this container\n if (StateContainerInterface_toConsumableArray(this._states.values()).includes(state)) {\n console.warn("Cannot add animation to state ".concat(this.name, ". Animation was already added."));\n return state.name;\n } // Make sure the state name is unique\n\n\n var uniqueName = core_Utils.getUniqueName(state.name, StateContainerInterface_toConsumableArray(this._states.keys()));\n\n if (state.name !== uniqueName) {\n console.warn("Animation name ".concat(state.name, " is not unique for state ").concat(this.name, ". New animation will be added with name ").concat(uniqueName, "."));\n state.name = uniqueName;\n }\n\n this._states.set(state.name, state);\n\n return state.name;\n }\n }, {\n key: "removeState",\n value: function removeState(name) {\n // Check if the state is in this container\n if (!this._states || !this._states.has(name)) {\n console.warn("Did not remove animation ".concat(name, " from state ").concat(this.name, ". No animation exists with this name."));\n return false;\n }\n\n this._states.get(name).discard();\n\n this._states["delete"](name);\n\n return true;\n }\n }, {\n key: "renameState",\n value: function renameState(currentName, newName) {\n // Make sure the state is in this container\n if (!this._states || !this._states.has(currentName)) {\n throw new Error("Cannot rename animation ".concat(currentName, " in ").concat(this.name, ". No animation exists with this name."));\n }\n\n var state = this._states.get(currentName); // Exit if the names are the same\n\n\n if (currentName === newName) {\n return currentName;\n } // Make sure the name is unique\n\n\n var uniqueName = core_Utils.getUniqueName(newName, StateContainerInterface_toConsumableArray(this._states.keys()).filter(function (s) {\n return s.name !== currentName;\n }));\n\n if (newName !== uniqueName) {\n console.warn("Animation name ".concat(newName, " is not unique in state ").concat(this.name, ". Animation will be renamed to ").concat(uniqueName, "."));\n newName = uniqueName;\n }\n\n state.name = newName;\n\n this._states["delete"](currentName);\n\n this._states.set(state.name, state);\n\n return state.name;\n }\n }, {\n key: "discardStates",\n value: function discardStates() {\n this._states.forEach(function (state) {\n state.discard();\n });\n\n delete this._states;\n }\n }]);\n\n return StateContainerMixin;\n }(BaseClass);\n\n return StateContainerMixin;\n }\n }]);\n\n return StateContainerInterface;\n}();\n\n/* harmony default export */ var state_StateContainerInterface = (StateContainerInterface_StateContainerInterface);\n// CONCATENATED MODULE: ./src/core/animpack/state/QueueState.js\nfunction QueueState_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { QueueState_typeof = function _typeof(obj) { return typeof obj; }; } else { QueueState_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return QueueState_typeof(obj); }\n\nfunction QueueState_toConsumableArray(arr) { return QueueState_arrayWithoutHoles(arr) || QueueState_iterableToArray(arr) || QueueState_unsupportedIterableToArray(arr) || QueueState_nonIterableSpread(); }\n\nfunction QueueState_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."); }\n\nfunction QueueState_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return QueueState_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return QueueState_arrayLikeToArray(o, minLen); }\n\nfunction QueueState_iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction QueueState_arrayWithoutHoles(arr) { if (Array.isArray(arr)) return QueueState_arrayLikeToArray(arr); }\n\nfunction QueueState_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction QueueState_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction QueueState_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction QueueState_createClass(Constructor, protoProps, staticProps) { if (protoProps) QueueState_defineProperties(Constructor.prototype, protoProps); if (staticProps) QueueState_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction QueueState_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { QueueState_get = Reflect.get; } else { QueueState_get = function _get(target, property, receiver) { var base = QueueState_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return QueueState_get(target, property, receiver || target); }\n\nfunction QueueState_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = QueueState_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction QueueState_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) QueueState_setPrototypeOf(subClass, superClass); }\n\nfunction QueueState_setPrototypeOf(o, p) { QueueState_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return QueueState_setPrototypeOf(o, p); }\n\nfunction QueueState_createSuper(Derived) { var hasNativeReflectConstruct = QueueState_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = QueueState_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = QueueState_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return QueueState_possibleConstructorReturn(this, result); }; }\n\nfunction QueueState_possibleConstructorReturn(self, call) { if (call && (QueueState_typeof(call) === "object" || typeof call === "function")) { return call; } return QueueState_assertThisInitialized(self); }\n\nfunction QueueState_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction QueueState_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction QueueState_getPrototypeOf(o) { QueueState_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return QueueState_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n/**\n * Class for playing an ordered array of animation states in sequence.\n *\n * @extends AbstractState\n * @implements @AnimationPlayerInterface\n */\n\nvar QueueState = /*#__PURE__*/function (_AnimationPlayerInter) {\n QueueState_inherits(QueueState, _AnimationPlayerInter);\n\n var _super = QueueState_createSuper(QueueState);\n\n /**\n * @constructor\n *\n * @param {Object} [options={}] - Options for the state.\n * @param {boolean} [options.autoAdvance=true] - Whether to autmatically advance\n * to the next state in the queue as each state completes.\n * @param {Array.} [queueStates=[]] - Array of states to be played\n * in order.\n */\n function QueueState() {\n var _this;\n\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var queueStates = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n\n QueueState_classCallCheck(this, QueueState);\n\n _this = _super.call(this, options);\n queueStates.forEach(function (state) {\n _this.addState(state);\n });\n _this._queue = _this._states.keys();\n _this._done = true;\n return _this;\n }\n /**\n * Gets whether the animation queue has reached the end.\n */\n\n\n QueueState_createClass(QueueState, [{\n key: "done",\n get: function get() {\n return this._done;\n }\n /**\n * Gets the internal weight.\n *\n * @readonly\n * @type {number}\n */\n\n }, {\n key: "internalWeight",\n get: function get() {\n return this._currentState ? this._currentState.internalWeight * this._internalWeight : 0;\n }\n /**\n * Restart the queue iterator.\n *\n * @private\n */\n\n }, {\n key: "_reset",\n value: function _reset() {\n this._queue = this._states.keys();\n\n var _this$_queue$next = this._queue.next(),\n value = _this$_queue$next.value,\n done = _this$_queue$next.done;\n\n this._done = done;\n return value || null;\n }\n /**\n * Multiplies the user weight by a factor to determine the internal weight.\n *\n * @param {number} factor - 0-1 multiplier to apply to the user weight.\n */\n\n }, {\n key: "updateInternalWeight",\n value: function updateInternalWeight(factor) {\n QueueState_get(QueueState_getPrototypeOf(QueueState.prototype), "updateInternalWeight", this).call(this, factor);\n\n if (this._currentState) {\n this._currentState.updateInternalWeight(this._internalWeight);\n }\n }\n /**\n * Start the next animation in the queue.\n *\n * @param {Function=} onNext - Function to execute each time an animation completes\n * and the queue moves to the next animation.\n * @param {boolean} [wrap=false] - Whether or not to start the queue from the\n * beginning again if the end has been reached.\n *\n * @returns {Deferred}\n */\n\n }, {\n key: "next",\n value: function next(onNext) {\n var _this2 = this;\n\n var wrap = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n // Move the queue forward\n var _this$_queue$next2 = this._queue.next(),\n name = _this$_queue$next2.value,\n done = _this$_queue$next2.done;\n\n this._done = done;\n this._paused = false; // The queue has reached the end\n\n if (done) {\n // Start the queue over\n if (wrap) {\n return this.play(this._playCallbacks.onFinish, this._playCallbacks.onError, this._playCallbacks.onCancel, onNext);\n } // Stop the queue\n else {\n this._promises.finish.resolve();\n\n return this._promises.finish;\n }\n } // Signal the next animation is starting\n\n\n if (typeof onNext === \'function\') {\n var lastName = QueueState_toConsumableArray(this._states.keys())[this._states.size - 1];\n\n var isQueueEnd = name === lastName;\n onNext({\n name: name,\n canAdvance: this.getState(name).loopCount !== Infinity && !isQueueEnd,\n isQueueEnd: isQueueEnd\n });\n } // Start the next animation\n\n\n this.playAnimation(name, this._transitionTime, this._easingFn, function () {\n if (!_this2._paused && !_this2.isTransitioning) {\n _this2.next(onNext);\n }\n }, this._playCallbacks.onError);\n return this._promises.finish;\n }\n }, {\n key: "play",\n value: function play(onFinish, onError, onCancel, onNext) {\n var _this3 = this;\n\n var name = this._reset();\n\n QueueState_get(QueueState_getPrototypeOf(QueueState.prototype), "play", this).call(this, onFinish, onError, onCancel);\n\n if (this._done) {\n this._promises.finish.resolve();\n } else {\n // Signal the next animation is starting\n if (name !== this.currentAnimation && typeof onNext === \'function\') {\n var lastName = QueueState_toConsumableArray(this._states.keys())[this._states.size - 1];\n\n var isQueueEnd = name === lastName;\n onNext({\n name: name,\n canAdvance: name ? this.getState(name).loopCount !== Infinity && !isQueueEnd : true,\n isQueueEnd: !name || isQueueEnd\n });\n } // Start the next animation\n\n\n this.playAnimation(name, this._currentState ? this._transitionTime : 0, this._easingFn, function () {\n if (!_this3._paused && !_this3.isTransitioning) {\n _this3.next(onNext);\n }\n }, onError);\n }\n\n return this._promises.finish;\n }\n }, {\n key: "pause",\n value: function pause() {\n var paused = QueueState_get(QueueState_getPrototypeOf(QueueState.prototype), "pause", this).call(this);\n\n this.pauseAnimation();\n return paused;\n }\n }, {\n key: "resume",\n value: function resume(onFinish, onError, onCancel, onNext) {\n var _this4 = this;\n\n if (this._done) {\n return this.play(onFinish, onError, onCancel, onNext);\n } else {\n QueueState_get(QueueState_getPrototypeOf(QueueState.prototype), "resume", this).call(this, onFinish, onError, onCancel);\n\n this.resumeAnimation(this._currentState.name, this._transitionTime, this._easingFn, function () {\n if (!_this4._paused && !_this4.isTransitioning) {\n _this4.next(onNext);\n }\n }, onError);\n return this._promises.finish;\n }\n }\n }, {\n key: "cancel",\n value: function cancel() {\n var canceled = QueueState_get(QueueState_getPrototypeOf(QueueState.prototype), "cancel", this).call(this);\n\n if (this._currentState) {\n this._currentState.cancel();\n }\n\n return canceled;\n }\n }, {\n key: "stop",\n value: function stop() {\n var stopped = QueueState_get(QueueState_getPrototypeOf(QueueState.prototype), "stop", this).call(this);\n\n this.stopAnimation();\n this._done = true;\n return stopped;\n }\n }, {\n key: "discard",\n value: function discard() {\n QueueState_get(QueueState_getPrototypeOf(QueueState.prototype), "discard", this).call(this);\n\n this.discardStates();\n }\n }]);\n\n return QueueState;\n}(animpack_AnimationPlayerInterface.Mixin(state_StateContainerInterface.Mixin(state_AbstractState)));\n\n/* harmony default export */ var state_QueueState = (QueueState);\n// CONCATENATED MODULE: ./src/core/animpack/state/AbstractBlendState.js\nfunction AbstractBlendState_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { AbstractBlendState_typeof = function _typeof(obj) { return typeof obj; }; } else { AbstractBlendState_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return AbstractBlendState_typeof(obj); }\n\nfunction AbstractBlendState_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction AbstractBlendState_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction AbstractBlendState_createClass(Constructor, protoProps, staticProps) { if (protoProps) AbstractBlendState_defineProperties(Constructor.prototype, protoProps); if (staticProps) AbstractBlendState_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction AbstractBlendState_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { AbstractBlendState_get = Reflect.get; } else { AbstractBlendState_get = function _get(target, property, receiver) { var base = AbstractBlendState_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return AbstractBlendState_get(target, property, receiver || target); }\n\nfunction AbstractBlendState_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = AbstractBlendState_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction AbstractBlendState_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) AbstractBlendState_setPrototypeOf(subClass, superClass); }\n\nfunction AbstractBlendState_setPrototypeOf(o, p) { AbstractBlendState_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return AbstractBlendState_setPrototypeOf(o, p); }\n\nfunction AbstractBlendState_createSuper(Derived) { var hasNativeReflectConstruct = AbstractBlendState_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = AbstractBlendState_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = AbstractBlendState_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return AbstractBlendState_possibleConstructorReturn(this, result); }; }\n\nfunction AbstractBlendState_possibleConstructorReturn(self, call) { if (call && (AbstractBlendState_typeof(call) === "object" || typeof call === "function")) { return call; } return AbstractBlendState_assertThisInitialized(self); }\n\nfunction AbstractBlendState_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction AbstractBlendState_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction AbstractBlendState_getPrototypeOf(o) { AbstractBlendState_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return AbstractBlendState_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n\n/**\n * Base class for a state that blends a collection of {@link AbstractState}.\n *\n * @abstract\n * @implements StateContainerInterface\n */\n\nvar AbstractBlendState_AbstractBlendState = /*#__PURE__*/function (_StateContainerInterf) {\n AbstractBlendState_inherits(AbstractBlendState, _StateContainerInterf);\n\n var _super = AbstractBlendState_createSuper(AbstractBlendState);\n\n function AbstractBlendState() {\n var _this;\n\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var blendStates = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n\n AbstractBlendState_classCallCheck(this, AbstractBlendState);\n\n for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n args[_key - 2] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this, options].concat(args));\n blendStates.forEach(function (state) {\n _this.addState(state);\n });\n return _this;\n }\n /**\n * Gets the sum of internal weights of the sub-states.\n *\n * @readonly\n * @type {number}\n */\n\n\n AbstractBlendState_createClass(AbstractBlendState, [{\n key: "internalWeight",\n get: function get() {\n var blendWeights = 0;\n\n this._states.forEach(function (state) {\n blendWeights += state.internalWeight;\n });\n\n return blendWeights;\n }\n /**\n * Returns the weight of a state controlled by the container.\n *\n * @param {string} name - Name of the state to return the weight from.\n *\n * @returns {number} - Weight of the state.\n */\n\n }, {\n key: "getBlendWeight",\n value: function getBlendWeight(name) {\n // Make sure the name is valid\n var state = this.getState(name);\n\n if (state === undefined) {\n throw new Error("Cannot get weight of state ".concat(name, " from BlendState ").concat(this.name, ". No state exists with this name."));\n }\n\n return state.weight;\n }\n /**\n * Sets the weight of a state controlled by the container.\n *\n * @param {string} name - Name of the state to set the weight of.\n * @param {number} weight - Weight value to set on the state.\n *\n * @returns {Deferred}\n */\n\n }, {\n key: "setBlendWeight",\n value: function setBlendWeight(name, weight) {\n var seconds = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n var easingFn = arguments.length > 3 ? arguments[3] : undefined;\n // Make sure the name is valid\n var state = this.getState(name);\n\n if (state === undefined) {\n throw new Error("Cannot set weight of state ".concat(name, " from BlendState ").concat(this.name, ". No state exists with this name."));\n }\n\n weight = core_MathUtils.clamp(weight);\n return state.setWeight(weight, seconds, easingFn);\n }\n /**\n * Multiplies the weight of each sub-state by a factor to determine the internal weight.\n *\n * @param {number} factor - 0-1 multiplier to apply to the user weight.\n */\n\n }, {\n key: "updateInternalWeight",\n value: function updateInternalWeight(factor) {\n var _this2 = this;\n\n AbstractBlendState_get(AbstractBlendState_getPrototypeOf(AbstractBlendState.prototype), "updateInternalWeight", this).call(this, factor);\n\n this._states.forEach(function (state) {\n state.updateInternalWeight(_this2._internalWeight);\n });\n }\n /**\n * Update any values of the sub-states that need to be evaluated every frame.\n *\n * @param {number} deltaTime - Time in milliseconds since the last update.\n */\n\n }, {\n key: "update",\n value: function update(deltaTime) {\n AbstractBlendState_get(AbstractBlendState_getPrototypeOf(AbstractBlendState.prototype), "update", this).call(this, deltaTime);\n\n this._states.forEach(function (state) {\n state.update(deltaTime);\n });\n }\n /**\n * Start playback of the sub-states from the beginning.\n *\n * @param {Function=} onFinish - Function to execute when the state finishes.\n * @param {Function=} onError - Function to execute if the state encounters\n * an error during playback.\n * @param {Function=} onCancel - Function to execute if playback is canceled.\n *\n * @returns {Deferred}\n */\n\n }, {\n key: "play",\n value: function play(onFinish, onError, onCancel) {\n var promises = [AbstractBlendState_get(AbstractBlendState_getPrototypeOf(AbstractBlendState.prototype), "play", this).call(this)];\n\n this._states.forEach(function (state) {\n promises.push(state.play());\n });\n\n return core_Deferred.all(promises, onFinish, onError, onCancel);\n }\n /**\n * Pause playback of the sub-states. This prevents pending promises from being executed.\n *\n * @returns {boolean}\n */\n\n }, {\n key: "pause",\n value: function pause() {\n this._states.forEach(function (state) {\n state.pause();\n });\n\n return AbstractBlendState_get(AbstractBlendState_getPrototypeOf(AbstractBlendState.prototype), "pause", this).call(this);\n }\n /**\n * Resume playback of the sub-states.\n *\n * @param {Function=} onFinish - Function to execute when the state finishes.\n * @param {Function=} onError - Function to execute if the state encounters\n * an error during playback.\n * @param {Function=} onCancel - Function to execute if playback is canceled.\n *\n * @returns {Deferred}\n */\n\n }, {\n key: "resume",\n value: function resume(onFinish, onError, onCancel) {\n var promises = [AbstractBlendState_get(AbstractBlendState_getPrototypeOf(AbstractBlendState.prototype), "resume", this).call(this)];\n\n this._states.forEach(function (state) {\n promises.push(state.resume());\n });\n\n return core_Deferred.all(promises, onFinish, onError, onCancel);\n }\n /**\n * Cancel playback of the sub-states and cancel any pending promises.\n *\n * @returns {boolean}\n */\n\n }, {\n key: "cancel",\n value: function cancel() {\n this._states.forEach(function (state) {\n state.cancel();\n });\n\n return AbstractBlendState_get(AbstractBlendState_getPrototypeOf(AbstractBlendState.prototype), "cancel", this).call(this);\n }\n /**\n * Stop playback of the sub-states and resolve any pending promises.\n *\n * @returns {boolean}\n */\n\n }, {\n key: "stop",\n value: function stop() {\n this._states.forEach(function (state) {\n state.stop();\n });\n\n return AbstractBlendState_get(AbstractBlendState_getPrototypeOf(AbstractBlendState.prototype), "stop", this).call(this);\n }\n /**\n * Discards all sub-state resources.\n *\n * @returns {boolean}\n */\n\n }, {\n key: "discard",\n value: function discard() {\n AbstractBlendState_get(AbstractBlendState_getPrototypeOf(AbstractBlendState.prototype), "discard", this).call(this);\n\n this.discardStates();\n }\n }]);\n\n return AbstractBlendState;\n}(state_StateContainerInterface.Mixin(state_AbstractState));\n\n/* harmony default export */ var state_AbstractBlendState = (AbstractBlendState_AbstractBlendState);\n// CONCATENATED MODULE: ./src/core/animpack/state/FreeBlendState.js\nfunction FreeBlendState_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { FreeBlendState_typeof = function _typeof(obj) { return typeof obj; }; } else { FreeBlendState_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return FreeBlendState_typeof(obj); }\n\nfunction FreeBlendState_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction FreeBlendState_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction FreeBlendState_createClass(Constructor, protoProps, staticProps) { if (protoProps) FreeBlendState_defineProperties(Constructor.prototype, protoProps); if (staticProps) FreeBlendState_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction FreeBlendState_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { FreeBlendState_get = Reflect.get; } else { FreeBlendState_get = function _get(target, property, receiver) { var base = FreeBlendState_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return FreeBlendState_get(target, property, receiver || target); }\n\nfunction FreeBlendState_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = FreeBlendState_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction FreeBlendState_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) FreeBlendState_setPrototypeOf(subClass, superClass); }\n\nfunction FreeBlendState_setPrototypeOf(o, p) { FreeBlendState_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return FreeBlendState_setPrototypeOf(o, p); }\n\nfunction FreeBlendState_createSuper(Derived) { var hasNativeReflectConstruct = FreeBlendState_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = FreeBlendState_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = FreeBlendState_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return FreeBlendState_possibleConstructorReturn(this, result); }; }\n\nfunction FreeBlendState_possibleConstructorReturn(self, call) { if (call && (FreeBlendState_typeof(call) === "object" || typeof call === "function")) { return call; } return FreeBlendState_assertThisInitialized(self); }\n\nfunction FreeBlendState_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction FreeBlendState_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction FreeBlendState_getPrototypeOf(o) { FreeBlendState_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return FreeBlendState_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/**\n * Class for blending N number of blend states.\n *\n * @extends AbstractBlendState\n */\n\nvar FreeBlendState = /*#__PURE__*/function (_AbstractBlendState) {\n FreeBlendState_inherits(FreeBlendState, _AbstractBlendState);\n\n var _super = FreeBlendState_createSuper(FreeBlendState);\n\n /**\n * @constructor\n *\n * @param {Object} [options={}] - Options for the container state.\n * @param {Array.} [blendStates=[]] - Blend states to be controlled by\n * this container.\n */\n function FreeBlendState() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var blendStates = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n\n FreeBlendState_classCallCheck(this, FreeBlendState);\n\n return _super.call(this, options, blendStates);\n }\n\n FreeBlendState_createClass(FreeBlendState, [{\n key: "updateInternalWeight",\n value: function updateInternalWeight(factor) {\n var _this = this;\n\n FreeBlendState_get(FreeBlendState_getPrototypeOf(FreeBlendState.prototype), "updateInternalWeight", this).call(this, factor); // Determine the total active weight of blend states\n\n\n var sumWeights = 0;\n\n this._states.forEach(function (state) {\n sumWeights += state.weight;\n }); // Ensure the sum of blend state internal weights does not exceed container internal weight\n\n\n factor /= Math.max(sumWeights, 1); // Sum of blend state internal weights should not exceed container internal weight\n\n this._states.forEach(function (state) {\n state.updateInternalWeight(factor * _this._weight);\n });\n }\n }]);\n\n return FreeBlendState;\n}(state_AbstractBlendState);\n\n/* harmony default export */ var state_FreeBlendState = (FreeBlendState);\n// CONCATENATED MODULE: ./src/core/animpack/state/Blend1dState.js\nfunction Blend1dState_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { Blend1dState_typeof = function _typeof(obj) { return typeof obj; }; } else { Blend1dState_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return Blend1dState_typeof(obj); }\n\nfunction Blend1dState_toConsumableArray(arr) { return Blend1dState_arrayWithoutHoles(arr) || Blend1dState_iterableToArray(arr) || Blend1dState_unsupportedIterableToArray(arr) || Blend1dState_nonIterableSpread(); }\n\nfunction Blend1dState_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."); }\n\nfunction Blend1dState_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return Blend1dState_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return Blend1dState_arrayLikeToArray(o, minLen); }\n\nfunction Blend1dState_iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction Blend1dState_arrayWithoutHoles(arr) { if (Array.isArray(arr)) return Blend1dState_arrayLikeToArray(arr); }\n\nfunction Blend1dState_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction Blend1dState_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction Blend1dState_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { Blend1dState_ownKeys(Object(source), true).forEach(function (key) { Blend1dState_defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { Blend1dState_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction Blend1dState_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction Blend1dState_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction Blend1dState_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction Blend1dState_createClass(Constructor, protoProps, staticProps) { if (protoProps) Blend1dState_defineProperties(Constructor.prototype, protoProps); if (staticProps) Blend1dState_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction Blend1dState_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { Blend1dState_get = Reflect.get; } else { Blend1dState_get = function _get(target, property, receiver) { var base = Blend1dState_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return Blend1dState_get(target, property, receiver || target); }\n\nfunction Blend1dState_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = Blend1dState_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction Blend1dState_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) Blend1dState_setPrototypeOf(subClass, superClass); }\n\nfunction Blend1dState_setPrototypeOf(o, p) { Blend1dState_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return Blend1dState_setPrototypeOf(o, p); }\n\nfunction Blend1dState_createSuper(Derived) { var hasNativeReflectConstruct = Blend1dState_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = Blend1dState_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = Blend1dState_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return Blend1dState_possibleConstructorReturn(this, result); }; }\n\nfunction Blend1dState_possibleConstructorReturn(self, call) { if (call && (Blend1dState_typeof(call) === "object" || typeof call === "function")) { return call; } return Blend1dState_assertThisInitialized(self); }\n\nfunction Blend1dState_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction Blend1dState_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction Blend1dState_getPrototypeOf(o) { Blend1dState_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return Blend1dState_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n/**\n * Class for blending N number of blend states based on a single\n * parameter.\n *\n * @extends AbstractBlendState\n */\n\nvar Blend1dState_Blend1dState = /*#__PURE__*/function (_AbstractBlendState) {\n Blend1dState_inherits(Blend1dState, _AbstractBlendState);\n\n var _super = Blend1dState_createSuper(Blend1dState);\n\n /**\n * @constructor\n *\n * @param {Object} [options] - Options for the container state\n * @param {Array.} [blendStates=[]] - Blend states to be\n * controlled by this container.\n * @param {Array.} [blendThresholds=[]] - Threshold values for activating\n * each blend state.\n * @param {Array.} [phaseMatches=[]] - Booleans indicating whether or not\n * each blend state should be phase matched.\n */\n function Blend1dState() {\n var _this;\n\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var blendStates = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n var blendThresholds = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];\n var phaseMatches = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : [];\n\n Blend1dState_classCallCheck(this, Blend1dState);\n\n _this = _super.call(this, options, blendStates);\n _this._blendValue = 0;\n _this._promises = Blend1dState_objectSpread(Blend1dState_objectSpread({}, _this._promises), {}, {\n blendValue: core_Deferred.resolve()\n }); // Validate there are no duplicate thresholds\n\n var nonZeroDifferentSize = blendStates.length !== 0 && blendStates.length !== blendThresholds.length;\n\n if (nonZeroDifferentSize) {\n throw new Error("Cannot create Blend1dState with blendThresholds ".concat(blendThresholds, ". BlendThresholds count does not match blendStates count."));\n }\n\n var containsDuplicates = new Set(blendThresholds).size !== blendThresholds.length;\n\n if (containsDuplicates) {\n throw new Error("Cannot create Blend1dState with blendThresholds ".concat(blendThresholds, ". BlendThresholds contains duplicate values"));\n } // Initialize the thresholds map\n\n\n _this._thresholds = [];\n\n Blend1dState_toConsumableArray(_this._states.values()).forEach(function (state, index) {\n _this._thresholds.push({\n value: blendThresholds[index],\n name: state.name,\n phaseMatch: phaseMatches[index] || false\n });\n });\n\n _this._sortThresholds();\n\n _this._forceNoThresholdDupes = true;\n _this._phaseLeadState = null;\n\n _this._updateBlendWeights();\n\n return _this;\n }\n /**\n * Gets and sets the blend parameter value.\n */\n\n\n Blend1dState_createClass(Blend1dState, [{\n key: "blendValue",\n get: function get() {\n return this._blendValue;\n },\n set: function set(value) {\n this._blendValue = value;\n }\n /**\n * Gets whether or not the blend value is currently being animated.\n */\n\n }, {\n key: "blendValuePending",\n get: function get() {\n return this._promises.blendValue && this._promises.blendValue.pending;\n }\n /**\n * Updates the user defined weight over time.\n *\n * @param {null} name - Unused parameter.\n * @param {number} weight - The target weight value.\n * @param {number} [seconds=0] - The amount of time it will take to reach the\n * target weight.\n * @param {Function=} easingFn - The easing function to use for interpolation.\n *\n * @returns {Deferred}\n */\n\n }, {\n key: "setBlendWeight",\n value: function setBlendWeight(name, value) {\n var _this2 = this;\n\n var seconds = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n var easingFn = arguments.length > 3 ? arguments[3] : undefined;\n\n this._promises.blendValue.cancel();\n\n this._promises.blendValue = animpack_AnimationUtils.interpolateProperty(this, \'blendValue\', value, {\n seconds: seconds,\n easingFn: easingFn,\n onProgress: function onProgress() {\n _this2._updateBlendWeights();\n },\n onFinish: function onFinish() {\n _this2._updateBlendWeights();\n }\n });\n return this._promises.blendValue;\n }\n /**\n * Gets the user defined weight.\n *\n * @returns {number}\n */\n\n }, {\n key: "getBlendWeight",\n value: function getBlendWeight() {\n return this.blendValue;\n }\n }, {\n key: "addState",\n value: function addState(state) {\n var thresholdValue = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var phaseMatch = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n this._thresholds = this._thresholds || []; // Make sure there is not already a state with this threshold\n\n var sameValue = this._thresholds.find(function (threshold) {\n return threshold.value === thresholdValue;\n });\n\n if (this._forceNoThresholdDupes && sameValue !== undefined) {\n throw new Error("Cannot set blend threshold of ".concat(thresholdValue, " for state ").concat(state.name, " on ").concat(this.name, ". A state already exists with that threshold."));\n }\n\n Blend1dState_get(Blend1dState_getPrototypeOf(Blend1dState.prototype), "addState", this).call(this, state);\n\n this._thresholds.push({\n value: thresholdValue,\n name: state.name,\n phaseMatch: phaseMatch || false\n });\n\n this._sortThresholds();\n\n return state.name;\n }\n }, {\n key: "removeState",\n value: function removeState(name) {\n var removed = Blend1dState_get(Blend1dState_getPrototypeOf(Blend1dState.prototype), "removeState", this).call(this, name);\n\n if (removed) {\n var index = this._thresholds.findIndex(function (threshold) {\n return threshold.name === name;\n });\n\n this._thresholds.splice(index, 1);\n }\n\n return removed;\n }\n }, {\n key: "renameState",\n value: function renameState(currentName, newName) {\n newName = Blend1dState_get(Blend1dState_getPrototypeOf(Blend1dState.prototype), "renameState", this).call(this, currentName, newName);\n\n var threshold = this._thresholds.find(function (threshold) {\n return threshold.name === currentName;\n });\n\n threshold.name = newName;\n return newName;\n }\n /**\n * Gets the threshold value of a blend with the corresponding name.\n *\n * @param {string} name - Name of the blend to get the threshold of.\n *\n * @returns {number} Threhold value.\n */\n\n }, {\n key: "getBlendThreshold",\n value: function getBlendThreshold(name) {\n var threshold = this._thresholds.find(function (threshold) {\n return threshold.name === name;\n });\n\n if (threshold === undefined) {\n throw new Error("Cannot get blend threshold of state ".concat(name, " on ").concat(this.name, ". No state exists with that name."));\n }\n\n return threshold.value;\n }\n /**\n * Sets the threshold value of a blend with the corresponding name.\n *\n * @param {string} name - Name of the blend to set the threshold.\n * @param {number} value - Value of the threshold to set.\n *\n * @returns {number} Set threshold value.\n */\n\n }, {\n key: "setBlendThreshold",\n value: function setBlendThreshold(name, value) {\n // Make sure there is not already a state with this threshold\n var sameValue = this._thresholds.find(function (threshold) {\n return threshold.value === value;\n });\n\n if (sameValue !== undefined) {\n throw new Error("Cannot set blend threshold of ".concat(value, " for state ").concat(name, " on ").concat(this.name, ". A state already exists with that threshold."));\n }\n\n var threshold = this._thresholds.find(function (threshold) {\n return threshold.name === name;\n });\n\n if (threshold === undefined) {\n throw new Error("Cannot set blend threshold of state ".concat(name, " on ").concat(this.name, ". No state exists with that name."));\n }\n\n threshold.value = value;\n\n this._sortThresholds();\n\n return threshold.value;\n }\n }, {\n key: "updateInternalWeight",\n value: function updateInternalWeight(factor) {\n var _this3 = this;\n\n Blend1dState_get(Blend1dState_getPrototypeOf(Blend1dState.prototype), "updateInternalWeight", this).call(this, factor);\n\n if (this._phaseLeadState) {\n this._states.forEach(function (state) {\n if (state.weight !== 0) {\n state.normalizedTime = _this3._phaseLeadState.normalizedTime;\n }\n });\n }\n }\n /**\n * Updates the blend weights based on their corresponding threshold values\n * and the current blendValue. Additionally, sets a lead phase state if the\n * conditions for phase-matching have been satisfied.\n *\n * @private\n */\n\n }, {\n key: "_updateBlendWeights",\n value: function _updateBlendWeights() {\n var _this4 = this;\n\n if (this._thresholds.length === 0) return;\n\n if (this._thresholds.length === 1) {\n var state = this._states.get(this._thresholds[0].name);\n\n state.setWeight(1);\n return;\n } // Initially set all sub-state weights to zero\n\n\n this._states.forEach(function (state) {\n state.setWeight(0);\n });\n\n this._phaseLeadState = null; // Find the first threshold that is greater than or equal to the parameter value\n\n var targetIndex = this._thresholds.findIndex(function (threshold) {\n return threshold.value >= _this4._blendValue;\n });\n\n if (targetIndex === 0 || targetIndex === -1) {\n // Give one state full influence\n targetIndex = targetIndex === -1 ? this._thresholds.length - 1 : 0;\n\n var _state = this._states.get(this._thresholds[targetIndex].name);\n\n _state.setWeight(1);\n } else {\n // Linear interpolate influence between two states\n var thresholdA = this._thresholds[targetIndex - 1];\n var thresholdB = this._thresholds[targetIndex];\n var factorB = (this.blendValue - thresholdA.value) / (thresholdB.value - thresholdA.value);\n var factorA = 1 - factorB;\n\n var stateA = this._states.get(thresholdA.name);\n\n var stateB = this._states.get(thresholdB.name);\n\n stateA.setWeight(factorA);\n stateB.setWeight(factorB); // Set phase-matching if needed\n\n if (thresholdA.phaseMatch && thresholdB.phaseMatch) {\n this._phaseLeadState = factorA > factorB ? stateA : stateB;\n }\n }\n }\n /**\n * Sorts the thresholds from low to high based on value.\n *\n * @private\n */\n\n }, {\n key: "_sortThresholds",\n value: function _sortThresholds() {\n this._thresholds.sort(function (a, b) {\n return a.value - b.value;\n });\n }\n }]);\n\n return Blend1dState;\n}(state_AbstractBlendState);\n\n/* harmony default export */ var state_Blend1dState = (Blend1dState_Blend1dState);\n// CONCATENATED MODULE: ./src/core/animpack/state/Blend2dState.js\nfunction Blend2dState_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { Blend2dState_typeof = function _typeof(obj) { return typeof obj; }; } else { Blend2dState_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return Blend2dState_typeof(obj); }\n\nfunction Blend2dState_toConsumableArray(arr) { return Blend2dState_arrayWithoutHoles(arr) || Blend2dState_iterableToArray(arr) || Blend2dState_unsupportedIterableToArray(arr) || Blend2dState_nonIterableSpread(); }\n\nfunction Blend2dState_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."); }\n\nfunction Blend2dState_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return Blend2dState_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return Blend2dState_arrayLikeToArray(o, minLen); }\n\nfunction Blend2dState_iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction Blend2dState_arrayWithoutHoles(arr) { if (Array.isArray(arr)) return Blend2dState_arrayLikeToArray(arr); }\n\nfunction Blend2dState_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction Blend2dState_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction Blend2dState_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { Blend2dState_ownKeys(Object(source), true).forEach(function (key) { Blend2dState_defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { Blend2dState_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction Blend2dState_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction Blend2dState_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction Blend2dState_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction Blend2dState_createClass(Constructor, protoProps, staticProps) { if (protoProps) Blend2dState_defineProperties(Constructor.prototype, protoProps); if (staticProps) Blend2dState_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction Blend2dState_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { Blend2dState_get = Reflect.get; } else { Blend2dState_get = function _get(target, property, receiver) { var base = Blend2dState_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return Blend2dState_get(target, property, receiver || target); }\n\nfunction Blend2dState_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = Blend2dState_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction Blend2dState_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) Blend2dState_setPrototypeOf(subClass, superClass); }\n\nfunction Blend2dState_setPrototypeOf(o, p) { Blend2dState_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return Blend2dState_setPrototypeOf(o, p); }\n\nfunction Blend2dState_createSuper(Derived) { var hasNativeReflectConstruct = Blend2dState_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = Blend2dState_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = Blend2dState_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return Blend2dState_possibleConstructorReturn(this, result); }; }\n\nfunction Blend2dState_possibleConstructorReturn(self, call) { if (call && (Blend2dState_typeof(call) === "object" || typeof call === "function")) { return call; } return Blend2dState_assertThisInitialized(self); }\n\nfunction Blend2dState_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction Blend2dState_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction Blend2dState_getPrototypeOf(o) { Blend2dState_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return Blend2dState_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/* eslint-disable no-underscore-dangle */\n\n\n\n\n/**\n * Class for blending N number of blend states based on two\n * paramters.\n *\n * @extends AbstractBlendState\n */\n\nvar Blend2dState_Blend2dState = /*#__PURE__*/function (_AbstractBlendState) {\n Blend2dState_inherits(Blend2dState, _AbstractBlendState);\n\n var _super = Blend2dState_createSuper(Blend2dState);\n\n /**\n * @constructor\n *\n * @param {Object} [options] - Options for the container state\n * @param {Array.} [blendStates=[]] - Blend states to be\n * controlled by this container.\n * @param {Array.>} [blendThresholds=[]] - Threshold values for activating\n * each blend state.\n * @param {Array.} [phaseMatches=[]] - Booleans indicating whether or not\n * each blend state should be phase matched.\n */\n function Blend2dState() {\n var _this;\n\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var blendStates = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n var blendThresholds = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];\n var phaseMatches = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : [];\n\n Blend2dState_classCallCheck(this, Blend2dState);\n\n _this = _super.call(this, options, blendStates);\n\n if (blendStates.length !== blendThresholds.length) {\n throw new Error("Cannot create Blend2dState with blendStates ".concat(blendStates, " and blendThresholds ").concat(blendThresholds, ". Count of blendStates must match count of blendThresholds."));\n }\n\n blendThresholds.slice(0, blendThresholds.length - 1).forEach(function (threshold, index) {\n blendThresholds.slice(index + 1).forEach(function (otherThreshold) {\n if (threshold[0] === otherThreshold[0] && threshold[1] === otherThreshold[1]) {\n throw new Error("Cannot create Blend2dState with blendThresholds ".concat(blendThresholds, ". No duplicate values allowed in blendThresholds."));\n }\n });\n });\n _this._blendValueX = 0;\n _this._blendValueY = 0;\n _this._promises = Blend2dState_objectSpread(Blend2dState_objectSpread({}, _this._promises), {}, {\n blendValueX: core_Deferred.resolve(),\n blendValueY: core_Deferred.resolve()\n });\n _this._thresholds = [];\n\n Blend2dState_toConsumableArray(_this._states.values()).forEach(function (state, index) {\n _this._thresholds.push({\n name: state.name,\n phaseMatch: phaseMatches[index] || false\n });\n });\n\n _this._vertices = blendThresholds;\n\n if (_this._vertices.length >= 3) {\n _this._triangles = core_MathUtils.getDelaunayTriangulation(_this._vertices);\n }\n\n _this._phaseLeadState = null;\n\n _this._updateBlendWeights();\n\n return _this;\n }\n /**\n * Updates the user defined weight over time.\n *\n * @param {string} name - Name of blend weight to update.\n * @param {number} weight - Target weight value.\n * @param {number} [seconds=0] - The amount of time it will take to reach the\n * target value.\n * @param {Function=} easingFn - The easing function to use for interpolation.\n *\n * @returns {Deferred}\n */\n\n\n Blend2dState_createClass(Blend2dState, [{\n key: "setBlendWeight",\n value: function setBlendWeight(name, value) {\n var _this2 = this;\n\n var seconds = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n var easingFn = arguments.length > 3 ? arguments[3] : undefined;\n var property = "blendValue".concat(name.toUpperCase());\n\n if (property !== \'blendValueX\' && property !== \'blendValueY\') {\n throw new Error("Cannot set blend weight for ".concat(name, " on ").concat(this.name, ". Blend2dState only accepts \'X\' or \'Y\' for setBlendWeight"));\n }\n\n this._promises[property].cancel();\n\n this._promises[property] = animpack_AnimationUtils.interpolateProperty(this, property, value, {\n seconds: seconds,\n easingFn: easingFn,\n onProgress: function onProgress() {\n _this2._updateBlendWeights();\n },\n onFinish: function onFinish() {\n _this2._updateBlendWeights();\n }\n });\n return this._promises[property];\n }\n /**\n * Gets the user defined weight.\n *\n * @param {string} name - Name of blend weight.\n *\n * @returns {number}\n */\n\n }, {\n key: "getBlendWeight",\n value: function getBlendWeight(name) {\n var property = name.toUpperCase();\n\n if (property !== \'X\' && property !== \'Y\') {\n throw new Error("Cannot get blend weight for ".concat(name, " on ").concat(this.name, ". Blend2dState only accepts \'X\' or \'Y\' for getBlendWeight"));\n }\n\n return property === \'X\' ? this._blendValueX : this._blendValueY;\n }\n /**\n * Gets and sets the x blend weight.\n */\n\n }, {\n key: "blendValueX",\n get: function get() {\n return this._blendValueX;\n },\n set: function set(value) {\n this._blendValueX = value;\n }\n /**\n * Gets and sets the y blend weight.\n */\n\n }, {\n key: "blendValueY",\n get: function get() {\n return this._blendValueY;\n },\n set: function set(value) {\n this._blendValueY = value;\n }\n /**\n * Gets whether or not the x blend value is currently being animated.\n */\n\n }, {\n key: "blendValueXPending",\n get: function get() {\n return this._promises.blendValueX && this._promises.blendValueX.pending;\n }\n /**\n * Gets whether or not the y blend value is currently being animated.\n */\n\n }, {\n key: "blendValueYPending",\n get: function get() {\n return this._promises.blendValueY && this._promises.blendValueY.pending;\n }\n }, {\n key: "updateInternalWeight",\n value: function updateInternalWeight(factor) {\n var _this3 = this;\n\n Blend2dState_get(Blend2dState_getPrototypeOf(Blend2dState.prototype), "updateInternalWeight", this).call(this, factor);\n\n if (this._phaseLeadState) {\n Blend2dState_toConsumableArray(this._states.values()).forEach(function (state, index) {\n if (state.weight !== 0 && _this3._thresholds[index].phaseMatch) {\n state.normalizedTime = _this3._phaseLeadState.normalizedTime;\n }\n });\n }\n }\n /**\n * Updates the blend weights based on their corresponding threshold values\n * and the current [x,y] blendValue. Additionally, sets a lead phase state if the\n * conditions for phase-matching have been satisfied.\n *\n * @private\n */\n\n }, {\n key: "_updateBlendWeights",\n value: function _updateBlendWeights() {\n var _this4 = this;\n\n if (!this._vertices || this._vertices.length === 0) return;\n\n if (this._vertices.length === 1) {\n Blend2dState_toConsumableArray(this._states.values())[0].weight = 1;\n return;\n } // Initially set all sub-state weights to zero\n\n\n this._states.forEach(function (state) {\n state.setWeight(0);\n });\n\n this._phaseLeadState = null;\n var p = [this._blendValueX, this._blendValueY];\n\n if (this._vertices.length === 2) {\n this._setInfluenceClosestPointOnLine(p);\n } else {\n var triangle = this._triangles.find(function (triangle) {\n return core_MathUtils.isPointInTriangle(_this4._vertices[triangle[0]], _this4._vertices[triangle[1]], _this4._vertices[triangle[2]], p);\n });\n\n if (triangle) {\n this._setInfluenceTriangle(triangle, p);\n } else {\n this._setInfluenceClosestPointInTriangles(p);\n }\n }\n }\n /**\n * Sets blend weights for states corresponding to a\n * triangle of thresholds and a given [x,y] blendValues.\n *\n * @param {Array.>} triangle - Set of triangluated indices\n * that correspond to blend thresholds.\n * @param {Array.} p - Given [x,y] blendValue.\n *\n * @private\n */\n\n }, {\n key: "_setInfluenceTriangle",\n value: function _setInfluenceTriangle(triangle, p) {\n var areaA = core_MathUtils.triangleArea(this._vertices[triangle[1]], this._vertices[triangle[2]], p);\n var areaB = core_MathUtils.triangleArea(this._vertices[triangle[0]], this._vertices[triangle[2]], p);\n var areaC = core_MathUtils.triangleArea(this._vertices[triangle[0]], this._vertices[triangle[1]], p);\n var totalArea = areaA + areaB + areaC;\n var weightA = areaA / totalArea;\n var weightB = areaB / totalArea;\n var weightC = areaC / totalArea;\n var thresholdA = this._thresholds[triangle[0]];\n var thresholdB = this._thresholds[triangle[1]];\n var thresholdC = this._thresholds[triangle[2]];\n\n var stateA = this._states.get(thresholdA.name);\n\n var stateB = this._states.get(thresholdB.name);\n\n var stateC = this._states.get(thresholdC.name);\n\n stateA.setWeight(weightA);\n stateB.setWeight(weightB);\n stateC.setWeight(weightC);\n\n this._setPhaseLeadState([stateA, stateB, stateC], [thresholdA.phaseMatch, thresholdB.phaseMatch, thresholdC.phaseMatch]);\n }\n /**\n * Determines the closest point within a triangle of\n * thresholds based on the current [x,y] blendValues and\n * then sets blend weights for the corresponding states.\n *\n * @param {Array.} p - Given [x,y] blendValue.\n *\n * @private\n */\n\n }, {\n key: "_setInfluenceClosestPointInTriangles",\n value: function _setInfluenceClosestPointInTriangles(p) {\n var _this5 = this;\n\n var globalClosestPoint = null;\n var globalMinDist = Number.POSITIVE_INFINITY;\n var closestTriangle = -1;\n\n this._triangles.forEach(function (triangle, index) {\n var pointA = core_MathUtils.closestPointOnLine(_this5._vertices[triangle[0]], _this5._vertices[triangle[1]], p);\n var pointB = core_MathUtils.closestPointOnLine(_this5._vertices[triangle[1]], _this5._vertices[triangle[2]], p);\n var pointC = core_MathUtils.closestPointOnLine(_this5._vertices[triangle[2]], _this5._vertices[triangle[0]], p);\n var distA = core_MathUtils.distanceSquared(pointA, p);\n var distB = core_MathUtils.distanceSquared(pointB, p);\n var distC = core_MathUtils.distanceSquared(pointC, p);\n var localClosestPoint = pointC;\n var localMinDist = distC;\n\n if (distA < localMinDist) {\n localClosestPoint = pointA;\n localMinDist = distA;\n }\n\n if (distB < localMinDist) {\n localClosestPoint = pointB;\n localMinDist = distB;\n }\n\n if (localMinDist < globalMinDist) {\n globalMinDist = localMinDist;\n globalClosestPoint = Blend2dState_toConsumableArray(localClosestPoint);\n closestTriangle = index;\n }\n });\n\n this._setInfluenceTriangle(this._triangles[closestTriangle], globalClosestPoint);\n }\n /**\n * Determines the closest point on the line formed between the\n * two blend thresholds based on the current [x,y] blendValues and\n * then sets blend weights for the corresponding states.\n *\n * @param {Array.} p - Given [x,y] blendValue.\n *\n * @private\n */\n\n }, {\n key: "_setInfluenceClosestPointOnLine",\n value: function _setInfluenceClosestPointOnLine(p) {\n var closestPoint = core_MathUtils.closestPointOnLine(this._vertices[[0]], this._vertices[[1]], p);\n var distA = core_MathUtils.distanceSquared(this._vertices[0], closestPoint);\n var distB = core_MathUtils.distanceSquared(this._vertices[1], closestPoint);\n var weightA = distB / (distA + distB);\n var weightB = distA / (distA + distB);\n var thresholdA = this._thresholds[0];\n var thresholdB = this._thresholds[1];\n\n var stateA = this._states.get(thresholdA.name);\n\n var stateB = this._states.get(thresholdB.name);\n\n stateA.setWeight(weightA);\n stateB.setWeight(weightB);\n\n this._setPhaseLeadState([stateA, stateB], [thresholdA.phaseMatch, thresholdB.phaseMatch]);\n }\n /**\n * Sets a lead phase state if the conditions\n * for phase-matching are satisfied.\n *\n * @param {Array.} states - States to\n * check phase-matching criteria.\n * @param {Array.} phaseMatched - List of phase-match booleans.\n *\n * @private\n */\n\n }, {\n key: "_setPhaseLeadState",\n value: function _setPhaseLeadState(states, phaseMatched) {\n var _this6 = this;\n\n var max = 0;\n states.forEach(function (state, index) {\n if (phaseMatched[index] && state.weight > max) {\n _this6._phaseLeadState = state;\n max = state.weight;\n }\n });\n }\n }]);\n\n return Blend2dState;\n}(state_AbstractBlendState);\n\n/* harmony default export */ var state_Blend2dState = (Blend2dState_Blend2dState);\n// CONCATENATED MODULE: ./src/core/animpack/AnimationLayer.js\nfunction AnimationLayer_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { AnimationLayer_typeof = function _typeof(obj) { return typeof obj; }; } else { AnimationLayer_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return AnimationLayer_typeof(obj); }\n\nfunction AnimationLayer_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction AnimationLayer_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction AnimationLayer_createClass(Constructor, protoProps, staticProps) { if (protoProps) AnimationLayer_defineProperties(Constructor.prototype, protoProps); if (staticProps) AnimationLayer_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction AnimationLayer_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { AnimationLayer_get = Reflect.get; } else { AnimationLayer_get = function _get(target, property, receiver) { var base = AnimationLayer_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return AnimationLayer_get(target, property, receiver || target); }\n\nfunction AnimationLayer_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = AnimationLayer_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction AnimationLayer_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) AnimationLayer_setPrototypeOf(subClass, superClass); }\n\nfunction AnimationLayer_setPrototypeOf(o, p) { AnimationLayer_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return AnimationLayer_setPrototypeOf(o, p); }\n\nfunction AnimationLayer_createSuper(Derived) { var hasNativeReflectConstruct = AnimationLayer_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = AnimationLayer_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = AnimationLayer_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return AnimationLayer_possibleConstructorReturn(this, result); }; }\n\nfunction AnimationLayer_possibleConstructorReturn(self, call) { if (call && (AnimationLayer_typeof(call) === "object" || typeof call === "function")) { return call; } return AnimationLayer_assertThisInitialized(self); }\n\nfunction AnimationLayer_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction AnimationLayer_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction AnimationLayer_getPrototypeOf(o) { AnimationLayer_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return AnimationLayer_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n\n\n\n/**\n * Enum for types of {@link AnimationLayer} blending.\n *\n * @readonly\n * @enum {string}\n */\n\nvar LayerBlendModes = {\n Override: \'Override\',\n Additive: \'Additive\'\n};\n/**\n * The default blending mode {@link AnimationLayer}.\n *\n * @readonly\n * @type {string}\n */\n\nvar DefaultLayerBlendMode = \'Override\';\n/**\n * Checks if a given blendMode is present in the values of {@link LayerBlendModes}.\n * If it is, return the original value, otherwise return {@link DefaultLayerBlendMode}.\n *\n * @param {string} blendMode - The name of the type of blending.\n *\n * @returns {(string|DefaultLayerBlendMode)}\n */\n\nfunction validateBlendMode(blendMode) {\n if (Array.from(Object.values(LayerBlendModes)).includes(blendMode)) {\n return blendMode;\n } else {\n return DefaultLayerBlendMode;\n }\n}\n/**\n * Class for managing a set of animations where only one state can be active at\n * any given time.\n *\n * @implements AnimationPlayerInterface\n * @implements StateContainerInterface\n */\n\nvar AnimationLayer_AnimationLayer = /*#__PURE__*/function (_AnimationPlayerInter) {\n AnimationLayer_inherits(AnimationLayer, _AnimationPlayerInter);\n\n var _super = AnimationLayer_createSuper(AnimationLayer);\n\n /**\n * @constructor\n *\n * @param {Object=} options - Options for the animation layer.\n * @param {string} options.name - Name of the layer. Names must be unique to the\n * animation feature that contains the layer.\n * @param {LayerBlendModes} [options.blendMode=DefaultLayerBlendMode] -\n * Type of blending to use for all states controlled by the layer.\n * @param {number} [options.weight=1] - The amount of influence the layer\'s current\n * animation has over the result for the host.\n * @param {number} [options.transitionTime=0] - The default amount of time to use when\n * playing and resuming animations.\n * @param {Function=} options.easingFn - The default easing function to use when\n * transitioning between animations and setting layer weight.\n */\n function AnimationLayer() {\n var _this;\n\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n AnimationLayer_classCallCheck(this, AnimationLayer);\n\n _this = _super.call(this, options);\n _this.name = options.name === undefined ? \'AnimationLayer\' : options.name;\n _this._blendMode = Array.from(Object.values(LayerBlendModes)).includes(options.blendMode) ? options.blendMode : DefaultLayerBlendMode;\n _this._promises = {\n weight: core_Deferred.resolve()\n };\n _this._weightPaused = false;\n _this.weight = typeof options.weight === \'number\' ? options.weight : 1;\n _this._internalWeight = _this._weight;\n return _this;\n }\n /**\n * Gets the type of blending used for states controlled by the layer.\n *\n * @readonly\n * @type {string}\n */\n\n\n AnimationLayer_createClass(AnimationLayer, [{\n key: "blendMode",\n get: function get() {\n return this._blendMode;\n }\n /**\n * Gets and sets the amount of influence the layer\'s current animation has over\n * the result for the host.\n *\n * @type {number}\n */\n\n }, {\n key: "weight",\n get: function get() {\n return this._weight;\n }\n /**\n * Gets whether or not the layer\'s weight value is currently being animated.\n *\n * @readonly\n * @type {boolean}\n */\n ,\n set: function set(weight) {\n this._weight = core_MathUtils.clamp(weight, 0, 1);\n }\n }, {\n key: "weightPending",\n get: function get() {\n return this._promises.weight && this._promises.weight.pending;\n }\n /**\n * Pause the current animation state and any interpolation happening on the layer\'s\n * weight property.\n *\n * @returns {boolean}\n */\n\n }, {\n key: "pause",\n value: function pause() {\n this._paused = true;\n this._weightPaused = true;\n return this.pauseAnimation() || this.weightPending;\n }\n /**\n * Resume the current animation state and any interpolation happening on the layer\'s\n * weight property.\n *\n * @returns {boolean}\n */\n\n }, {\n key: "resume",\n value: function resume() {\n this._paused = false;\n this._weightPaused = false;\n var isWeightActive = this.weightPending;\n\n if (this._currentState) {\n return this.resumeAnimation() || isWeightActive;\n } else {\n return isWeightActive;\n }\n }\n /**\n * Updates the user defined weight over time.\n *\n * @param {number} weight - The target weight value.\n * @param {number} [seconds=0] - The amount of time it will take to reach the\n * target weight.\n * @param {Function=} easingFn - The easing function to use for interpolation.\n *\n * @returns {Deferred}\n */\n\n }, {\n key: "setWeight",\n value: function setWeight(weight) {\n var seconds = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var easingFn = arguments.length > 2 ? arguments[2] : undefined;\n\n if (this.weightPending) {\n this._promises.weight.cancel();\n }\n\n weight = core_MathUtils.clamp(weight);\n this._promises.weight = animpack_AnimationUtils.interpolateProperty(this, \'weight\', weight, {\n seconds: seconds,\n easingFn: easingFn !== undefined ? easingFn : this._easingFn\n });\n return this._promises.weight;\n }\n /**\n * Pause any interpolation happening on the layer\'s weight property.\n *\n * @returns {boolean}\n */\n\n }, {\n key: "pauseWeight",\n value: function pauseWeight() {\n this._weightPaused = true;\n return this.weightPending;\n }\n /**\n * Resume any interpolation happening on the layer\'s weight property.\n *\n * @returns {boolean}\n */\n\n }, {\n key: "resumeWeight",\n value: function resumeWeight() {\n this._weightPaused = false;\n return this.weightPending;\n }\n /**\n * Multiplies the user weight by a factor to determine the internal weight.\n *\n * @param {number} factor - 0-1 multiplier to apply to the user weight.\n */\n\n }, {\n key: "updateInternalWeight",\n value: function updateInternalWeight(factor) {\n this._internalWeight = this._weight * factor;\n\n if (this._currentState) {\n this._currentState.updateInternalWeight(this._internalWeight);\n }\n }\n /**\n * Returns the names of blend states in an animation.\n *\n * @param {string} animationName - Name of the animation.\n *\n * @returns {Array.} - Names of blend states.\n */\n\n }, {\n key: "getAnimationBlendNames",\n value: function getAnimationBlendNames(animationName) {\n var state = this.getState(animationName);\n\n if (state === undefined) {\n throw new Error("Cannot get blend names of animation ".concat(animationName, " on layer ").concat(this.name, ". No animation exists with this name."));\n }\n\n if (state instanceof state_AbstractBlendState) {\n return state.getStateNames();\n }\n\n throw new Error("Cannot get blend names of animation ".concat(animationName, " on layer ").concat(this.name, ". Animation is not an instance of AbstractBlendState."));\n }\n /**\n * Update the weight for a blend state of an animation.\n *\n * @param {string} animationName - Name of the animation containing the blend state\n * to update.\n * @param {string} blendName - Name of the blend state to update.\n * @param {number} weight - Weight value to set on the animation. This number shoudld be\n * in the 0-1 range.\n * @param {number=} seconds - Number of seconds it should take to reach the new weight.\n * Default is zero and will set immediately.\n * @param {Function=} easingFn - Easing function to use while interpolating the new\n * weight. Default is Easing.Linear.InOut.\n *\n * @returns {Deferred} - Promise that will resolve once the animation\'s weight reaches\n * the target value.\n */\n\n }, {\n key: "setAnimationBlendWeight",\n value: function setAnimationBlendWeight(animationName, blendName, weight) {\n var seconds = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;\n var easingFn = arguments.length > 4 ? arguments[4] : undefined;\n var state = this.getState(animationName);\n\n if (state === undefined) {\n throw new Error("Cannot set blend weight of animation ".concat(animationName, " on layer ").concat(this.name, ". No animation exists with this name."));\n }\n\n if (state instanceof state_AbstractBlendState) {\n return state.setBlendWeight(blendName, weight, seconds, easingFn);\n }\n\n throw new Error("Cannot set blend weight of animation ".concat(animationName, " on layer ").concat(this.name, ". Animation is not an instance of AbstractBlendState."));\n }\n /**\n * Returns the weight for a blend state of an animation.\n *\n * @param {string} animationName - Name of the animation containing the blend state\n * to update.\n * @param {string} blendName - Name of the blend state to retrieve the weight of.\n *\n * @returns {number} - Weight of the blend state.\n */\n\n }, {\n key: "getAnimationBlendWeight",\n value: function getAnimationBlendWeight(animationName, blendName) {\n var state = this.getState(animationName);\n\n if (state === undefined) {\n throw new Error("Cannot get blend weight of animation ".concat(animationName, " on layer ").concat(this.name, ". No animation exists with this name."));\n }\n\n if (state instanceof state_AbstractBlendState) {\n return state.getBlendWeight(blendName);\n }\n\n throw new Error("Cannot get blend weight of animation ".concat(animationName, " on layer ").concat(this.name, ". Animation is not an instance of AbstractBlendState."));\n }\n /**\n * Update any weight interpolators and the current animation.\n *\n * @param {number} deltaTime - Time in milliseconds since the last update.\n */\n\n }, {\n key: "update",\n value: function update(deltaTime) {\n AnimationLayer_get(AnimationLayer_getPrototypeOf(AnimationLayer.prototype), "update", this).call(this, deltaTime);\n\n if (!this._paused && !this._weightPaused) {\n this._promises.weight.execute(deltaTime);\n }\n }\n /**\n * Cancel any pending promises and discard states controlled by the layer.\n */\n\n }, {\n key: "discard",\n value: function discard() {\n AnimationLayer_get(AnimationLayer_getPrototypeOf(AnimationLayer.prototype), "discard", this).call(this);\n\n this.discardStates();\n\n this._promises.weight.cancel();\n\n delete this._promises;\n }\n }]);\n\n return AnimationLayer;\n}(animpack_AnimationPlayerInterface.Mixin(state_StateContainerInterface.Mixin()));\n\n/* harmony default export */ var animpack_AnimationLayer = (AnimationLayer_AnimationLayer);\n// CONCATENATED MODULE: ./src/core/animpack/state/SingleState.js\nfunction SingleState_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { SingleState_typeof = function _typeof(obj) { return typeof obj; }; } else { SingleState_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return SingleState_typeof(obj); }\n\nfunction SingleState_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction SingleState_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction SingleState_createClass(Constructor, protoProps, staticProps) { if (protoProps) SingleState_defineProperties(Constructor.prototype, protoProps); if (staticProps) SingleState_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction SingleState_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) SingleState_setPrototypeOf(subClass, superClass); }\n\nfunction SingleState_setPrototypeOf(o, p) { SingleState_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return SingleState_setPrototypeOf(o, p); }\n\nfunction SingleState_createSuper(Derived) { var hasNativeReflectConstruct = SingleState_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = SingleState_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = SingleState_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return SingleState_possibleConstructorReturn(this, result); }; }\n\nfunction SingleState_possibleConstructorReturn(self, call) { if (call && (SingleState_typeof(call) === "object" || typeof call === "function")) { return call; } return SingleState_assertThisInitialized(self); }\n\nfunction SingleState_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction SingleState_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction SingleState_getPrototypeOf(o) { SingleState_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return SingleState_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n\n/**\n * Class for playing a single animation clip.\n *\n * @extends AbstractState\n * @alias core/SingleState\n */\n\nvar SingleState_SingleState = /*#__PURE__*/function (_AbstractState) {\n SingleState_inherits(SingleState, _AbstractState);\n\n var _super = SingleState_createSuper(SingleState);\n\n /**\n * @constructor\n *\n * @param {Object=} options - Options for the animation state.\n * @param {string=} options.name - Name for the animation state. Names must be\n * unique for the layer the state is applied to.\n * @param {weight} [options.weight=0] - The 0-1 amount of influence the state will have.\n * @param {timeScale} [options.timeScale=1] - Factor to scale the playback speed of the\n * animation.\n * @param {number} [options.loopCount=Infinity] - Number of times the animation should\n * repeat before finishing.\n * @param {string} [options.blendMode=DefaultLayerBlendMode] - Type of\n * blending the animation should use.\n */\n function SingleState() {\n var _this;\n\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n SingleState_classCallCheck(this, SingleState);\n\n _this = _super.call(this, options);\n _this._timeScale = options.timeScale !== undefined ? options.timeScale : 1;\n _this._promises.timeScale = core_Deferred.resolve();\n _this._loopCount = options.loopCount !== undefined ? options.loopCount : Infinity;\n _this._blendMode = validateBlendMode(options.blendMode);\n return _this;\n }\n /**\n * Gets and sets the normalized playing time of the current animation\n *\n * @type {number}\n */\n\n\n SingleState_createClass(SingleState, [{\n key: "normalizedTime",\n get: function get() {\n return 0;\n },\n set: function set(time) {}\n /**\n * Gets and sets the a factor to scale animation playback speed with.\n *\n * @type {number}\n */\n\n }, {\n key: "timeScale",\n get: function get() {\n return this._timeScale;\n },\n set: function set(timeScale) {\n this._timeScale = timeScale;\n }\n /**\n * Gets whether or not the timeScale is currently being animated.\n *\n * @readonly\n * @type {boolean}\n */\n\n }, {\n key: "timeScalePending",\n get: function get() {\n return this._promises.timeScale.pending;\n }\n /**\n * Updates the timeScale value over time.\n *\n * @param {number} weight - The target timeScale value.\n * @param {number} [seconds=0] - The amount of time it will take to reach the\n * target timeScale.\n * @param {Function=} easingFn - The easing function to use for interpolation.\n *\n * @returns {Deferred}\n */\n\n }, {\n key: "setTimeScale",\n value: function setTimeScale(timeScale) {\n var seconds = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var easingFn = arguments.length > 2 ? arguments[2] : undefined;\n\n this._promises.timeScale.cancel();\n\n this._promises.timeScale = animpack_AnimationUtils.interpolateProperty(this, \'timeScale\', timeScale, {\n seconds: seconds,\n easingFn: easingFn\n });\n return this._promises.timeScale;\n }\n /**\n * Gets and sets the number of times the animation will repeat before finishing.\n *\n * @type {number}\n */\n\n }, {\n key: "loopCount",\n get: function get() {\n return this._loopCount;\n },\n set: function set(loopCount) {\n this._loopCount = loopCount;\n }\n /**\n * Gets the type of blending used for the animation.\n *\n * @readonly\n * @type {string}\n */\n\n }, {\n key: "blendMode",\n get: function get() {\n return this._blendMode;\n }\n }]);\n\n return SingleState;\n}(state_AbstractState);\n\n/* harmony default export */ var state_SingleState = (SingleState_SingleState);\n// CONCATENATED MODULE: ./src/core/animpack/state/RandomAnimationState.js\nfunction RandomAnimationState_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { RandomAnimationState_typeof = function _typeof(obj) { return typeof obj; }; } else { RandomAnimationState_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return RandomAnimationState_typeof(obj); }\n\nfunction RandomAnimationState_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction RandomAnimationState_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction RandomAnimationState_createClass(Constructor, protoProps, staticProps) { if (protoProps) RandomAnimationState_defineProperties(Constructor.prototype, protoProps); if (staticProps) RandomAnimationState_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction RandomAnimationState_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { RandomAnimationState_get = Reflect.get; } else { RandomAnimationState_get = function _get(target, property, receiver) { var base = RandomAnimationState_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return RandomAnimationState_get(target, property, receiver || target); }\n\nfunction RandomAnimationState_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = RandomAnimationState_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction RandomAnimationState_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) RandomAnimationState_setPrototypeOf(subClass, superClass); }\n\nfunction RandomAnimationState_setPrototypeOf(o, p) { RandomAnimationState_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return RandomAnimationState_setPrototypeOf(o, p); }\n\nfunction RandomAnimationState_createSuper(Derived) { var hasNativeReflectConstruct = RandomAnimationState_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = RandomAnimationState_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = RandomAnimationState_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return RandomAnimationState_possibleConstructorReturn(this, result); }; }\n\nfunction RandomAnimationState_possibleConstructorReturn(self, call) { if (call && (RandomAnimationState_typeof(call) === "object" || typeof call === "function")) { return call; } return RandomAnimationState_assertThisInitialized(self); }\n\nfunction RandomAnimationState_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction RandomAnimationState_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction RandomAnimationState_getPrototypeOf(o) { RandomAnimationState_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return RandomAnimationState_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n\n/**\n * Class for playing random animations at random intervals within this state.\n *\n * @extends AbstractState\n * @implements AnimationPlayerInterface\n * @implements StateContainerInterface\n */\n\nvar RandomAnimationState_RandomAnimationState = /*#__PURE__*/function (_AnimationPlayerInter) {\n RandomAnimationState_inherits(RandomAnimationState, _AnimationPlayerInter);\n\n var _super = RandomAnimationState_createSuper(RandomAnimationState);\n\n /**\n * @constructor\n *\n * @param {Object} [options={}] - Options for the container state.\n * @param {number} [options.playInterval=3] - The base animation playback interval.\n * @param {Array.} [subStates=[]] - states to be randomly picked to play\n */\n function RandomAnimationState() {\n var _this;\n\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var subStates = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n\n RandomAnimationState_classCallCheck(this, RandomAnimationState);\n\n _this = _super.call(this, options);\n _this._playInterval = options.playInterval ? options.playInterval : 3;\n subStates.forEach(function (state) {\n _this.addState(state);\n });\n return _this;\n }\n /**\n * Gets and sets the base animation play interval\n *\n * @type {float}\n */\n\n\n RandomAnimationState_createClass(RandomAnimationState, [{\n key: "playInterval",\n get: function get() {\n return this._playInterval;\n },\n set: function set(playInterval) {\n this._playInterval = playInterval;\n }\n /**\n * Reset the internal timer for animation play interval\n *\n * @private\n */\n\n }, {\n key: "_resetTimer",\n value: function _resetTimer() {\n var _this2 = this;\n\n var playTimer = core_Utils.getRandomFloat(this._playInterval / 4, this._playInterval * 2);\n\n var onFinish = function onFinish() {\n _this2.playRandomAnimation(_this2._playCallbacks.onError);\n };\n\n this._promises.timer = core_Utils.wait(playTimer, {\n onFinish: onFinish\n });\n }\n }, {\n key: "updateInternalWeight",\n value: function updateInternalWeight(factor) {\n RandomAnimationState_get(RandomAnimationState_getPrototypeOf(RandomAnimationState.prototype), "updateInternalWeight", this).call(this, factor);\n\n if (this._currentState) {\n this._currentState.updateInternalWeight(this._internalWeight);\n }\n }\n /**\n * Pick a random animation and utilize AnimationPlayerInterface to play that animation\n *\n * @param {Function=} onError - Function to execute if the state encounters\n * an error during playback.\n */\n\n }, {\n key: "playRandomAnimation",\n value: function playRandomAnimation(onError) {\n this._resetTimer();\n\n var states = this.getStateNames();\n\n if (this._currentState) {\n states.splice(states.indexOf(this._currentState.name), 1);\n }\n\n var randomState = states[core_Utils.getRandomInt(0, states.length)];\n this.playAnimation(randomState, this._transitionTime, this._easingFn, undefined, onError, undefined);\n }\n }, {\n key: "play",\n value: function play(onFinish, onError, onCancel) {\n this.playRandomAnimation(onError);\n return RandomAnimationState_get(RandomAnimationState_getPrototypeOf(RandomAnimationState.prototype), "play", this).call(this, onFinish, onError, onCancel);\n }\n }, {\n key: "pause",\n value: function pause() {\n return RandomAnimationState_get(RandomAnimationState_getPrototypeOf(RandomAnimationState.prototype), "pause", this).call(this) && this.pauseAnimation();\n }\n }, {\n key: "resume",\n value: function resume(onFinish, onError, onCancel) {\n if (this._currentState) {\n this.resumeAnimation(this._currentState.name, this._transitionTime, this._easingFn, undefined, onError, undefined);\n }\n\n return RandomAnimationState_get(RandomAnimationState_getPrototypeOf(RandomAnimationState.prototype), "resume", this).call(this, onFinish, onError, onCancel);\n }\n }, {\n key: "cancel",\n value: function cancel() {\n return RandomAnimationState_get(RandomAnimationState_getPrototypeOf(RandomAnimationState.prototype), "cancel", this).call(this) && this.cancelAnimation();\n }\n }, {\n key: "stop",\n value: function stop() {\n return RandomAnimationState_get(RandomAnimationState_getPrototypeOf(RandomAnimationState.prototype), "stop", this).call(this) && this.stopAnimation();\n }\n }, {\n key: "discard",\n value: function discard() {\n RandomAnimationState_get(RandomAnimationState_getPrototypeOf(RandomAnimationState.prototype), "discard", this).call(this);\n\n this.discardStates();\n }\n }]);\n\n return RandomAnimationState;\n}(animpack_AnimationPlayerInterface.Mixin(state_StateContainerInterface.Mixin(state_AbstractState)));\n\n/* harmony default export */ var state_RandomAnimationState = (RandomAnimationState_RandomAnimationState);\n// CONCATENATED MODULE: ./src/core/animpack/AnimationFeature.js\nfunction AnimationFeature_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { AnimationFeature_typeof = function _typeof(obj) { return typeof obj; }; } else { AnimationFeature_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return AnimationFeature_typeof(obj); }\n\nfunction AnimationFeature_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction AnimationFeature_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { AnimationFeature_ownKeys(Object(source), true).forEach(function (key) { AnimationFeature_defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { AnimationFeature_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction AnimationFeature_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction AnimationFeature_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction AnimationFeature_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction AnimationFeature_createClass(Constructor, protoProps, staticProps) { if (protoProps) AnimationFeature_defineProperties(Constructor.prototype, protoProps); if (staticProps) AnimationFeature_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction AnimationFeature_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { AnimationFeature_get = Reflect.get; } else { AnimationFeature_get = function _get(target, property, receiver) { var base = AnimationFeature_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return AnimationFeature_get(target, property, receiver || target); }\n\nfunction AnimationFeature_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = AnimationFeature_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction AnimationFeature_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) AnimationFeature_setPrototypeOf(subClass, superClass); }\n\nfunction AnimationFeature_setPrototypeOf(o, p) { AnimationFeature_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return AnimationFeature_setPrototypeOf(o, p); }\n\nfunction AnimationFeature_createSuper(Derived) { var hasNativeReflectConstruct = AnimationFeature_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = AnimationFeature_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = AnimationFeature_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return AnimationFeature_possibleConstructorReturn(this, result); }; }\n\nfunction AnimationFeature_possibleConstructorReturn(self, call) { if (call && (AnimationFeature_typeof(call) === "object" || typeof call === "function")) { return call; } return AnimationFeature_assertThisInitialized(self); }\n\nfunction AnimationFeature_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction AnimationFeature_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction AnimationFeature_getPrototypeOf(o) { AnimationFeature_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return AnimationFeature_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n\n\n\n\n\n\n\n/**\r\n * Enum for animation state classes.\r\n *\r\n * @readonly\r\n * @enum {Class}\r\n */\n\nvar AnimationTypes = {\n single: state_SingleState,\n freeBlend: state_FreeBlendState,\n queue: state_QueueState,\n randomAnimation: state_RandomAnimationState,\n blend1d: state_Blend1dState,\n blend2d: state_Blend2dState\n};\n/**\r\n * Feature for managing animations on an object.\r\n *\r\n * @extends AbstractHostFeature\r\n * @alias core/AnimationFeature\r\n *\r\n * @property {Object} EVENTS - Built-in messages that the feature emits. When the\r\n * feature is added to a {@link core/HostObject}, event names will be prefixed by the\r\n * name of the feature class + \'.\'.\r\n * @property {string} [EVENTS.addLayer=onAddLayerEvent] - Message that is emitted after\r\n * [addLayer]{@link core/AnimationFeature#addLayer} has been successfully executed.\r\n * An object representing the name of the layer that was added and its index in\r\n * the layer stack with the signature {name: string, index: number} is supplied\r\n * as an argument to listener functions.\r\n * @property {string} [EVENTS.removeLayer=onRemoveLayerEvent] - Message that is\r\n * emitted after [removeLayer]{@link core/AnimationFeature#removeLayer} has been\r\n * successfully executed. An object representing the name of the layer that was\r\n * removed and its index in the layer stack with the signature {name: string, index: number}\r\n * is supplied as an argument to listener functions.\r\n * @property {string} [EVENTS.renameLayer=onRenameLayerEvent] - Message that is\r\n * emitted after [renameLayer]{@link core/AnimationFeature#renameLayer} has been\r\n * successfully executed. An object representing the original name of the layer\r\n * that was renamed and its updated name with the signature {oldName: string, newName: string}\r\n * is supplied as an argument to listener functions.\r\n * @property {string} [EVENTS.addAnimation=onAddAnimationEvent] - Message that is\r\n * emitted after [addAnimation]{@link core/AnimationFeature#addAnimation} has been\r\n * successfully executed. An object representing the name of the layer that the\r\n * animation was added to and the name of the animation that was added with the\r\n * signature {layerName: string, animationName: string} is supplied as an argument\r\n * to listener functions.\r\n * @property {string} [EVENTS.removeAnimation=onRemovedAnimationEvent] - Message\r\n * that is emitted after [removeAnimation]{@link core/AnimationFeature#removeAnimation}\r\n * has been successfully executed. An object representing the name of the layer\r\n * that the animation was removed from and the name of the animation that was removed\r\n * with the signature {layerName: string, animationName: string} is supplied as\r\n * an argument to listener functions.\r\n * @property {string} [EVENTS.renameAnimation=onRenameAnimationEvent] - Message\r\n * that is emitted after [renameAnimation]{@link core/AnimationFeature#renameAnimation}\r\n * has been successfully executed. An object representing the name of the layer\r\n * that contains the animation that was renamed, the original name of the animation\r\n * that was renamed and its updated name with the signature {layerName: string, oldName: string, newName: string}\r\n * is supplied as an argument to listener functions.\r\n * @property {string} [EVENTS.play=onPlayEvent] - Message that is emitted after\r\n * each call to [play]{@link core/AnimationFeature#playAnimation}. An object representing\r\n * the name of the layer contains the animation that was played and the name of\r\n * the animation that was played with the signature {layerName: string, animationName: string}\r\n * is supplied as an argument to listener functions.\r\n * @property {string} [EVENTS.pause=onPauseEvent] - Message that is emitted after\r\n * each call to [pause]{@link core/AnimationFeature#pauseAnimation}. An object representing\r\n * the name of the layer contains the animation that was paused and the name of\r\n * the animation that was paused with the signature {layerName: string, animationName: string}\r\n * is supplied as an argument to listener functions.\r\n * @property {string} [EVENTS.resume=onResumeEvent] - Message that is emitted after\r\n * each call to [resume]{@link core/AnimationFeature#resumeAnimation}. An object representing\r\n * the name of the layer contains the animation that was resumed and the name of\r\n * the animation that was resumed with the signature {layerName: string, animationName: string}\r\n * is supplied as an argument to listener functions.\r\n * @property {string} [EVENTS.interrupt=onInterruptEvent] - Message that is emitted\r\n * if there is a current speech in progress and [play]{@link core/AnimationFeature#playAnimation}\r\n * or [resume]{@link core/AnimationFeature#resumeAnimation} are executed for a new speech.\r\n * An object representing the name of the layer contains the animation that was\r\n * interrupted and the name of the animation that was interrupted with the signature\r\n * {layerName: string, animationName: string} is supplied as an argument to listener\r\n * functions.\r\n * @property {string} [EVENTS.stop=onStopEvent] - Message that is emitted after\r\n * each call to [stop]{@link core/AnimationFeature#stopAnimation} and when a speech reaches\r\n * the end of playback. An object representing\r\n * the name of the layer contains the animation that was stopped and the name of\r\n * the animation that was stopped with the signature {layerName: string, animationName: string}\r\n * is supplied as an argument to listener functions.\r\n */\n\nvar AnimationFeature_AnimationFeature = /*#__PURE__*/function (_AbstractHostFeature) {\n AnimationFeature_inherits(AnimationFeature, _AbstractHostFeature);\n\n var _super = AnimationFeature_createSuper(AnimationFeature);\n\n /**\r\n * @constructor\r\n *\r\n * @param {core/HostObject} host - Host object that owns the feature.\r\n */\n function AnimationFeature(host) {\n var _this;\n\n AnimationFeature_classCallCheck(this, AnimationFeature);\n\n _this = _super.call(this, host);\n _this._layers = [];\n _this._layerMap = {};\n _this._paused = false;\n return _this;\n }\n /**\r\n * Make sure a supplied layer index is within the range of layers.\r\n *\r\n * @private\r\n *\r\n * @param {number} index\r\n * @param {boolean} [existing=true] - Whether the index represents and existing\r\n * layer or a new layer to be added.\r\n *\r\n * @returns {number=}\r\n */\n\n\n AnimationFeature_createClass(AnimationFeature, [{\n key: "_validateIndex",\n value: function _validateIndex(index) {\n var existing = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\n // Index is invalid if there are no layers and we\'re checking for an existing layer index\n if (this._layers.length === 0 && existing) {\n return undefined;\n }\n\n var lastIndex = existing ? this._layers.length - 1 : this._layers.length; // Count from the end of the array for negative indices\n\n if (index < 0) {\n index = lastIndex + index + 1;\n }\n\n if (index < 0 || index > lastIndex) {\n return undefined;\n } else {\n return index;\n }\n }\n /**\r\n * Re-evaluate internal weight values of layers starting from the top of the\r\n * stack. Override layers\' weights affect the values of all layers lower in the\r\n * stack.\r\n *\r\n * @private\r\n */\n\n }, {\n key: "_updateInternalWeights",\n value: function _updateInternalWeights() {\n var numLayers = this._layers.length;\n var weightMultiplier = 1; // Update internal weight values on layers in reverse order\n\n for (var i = numLayers - 1; i >= 0; i--) {\n var layer = this._layers[i];\n layer.updateInternalWeight(weightMultiplier); // If the layer is override, update the multiplier with the remainder of the full weight\n\n if (layer.blendMode === LayerBlendModes.Override && layer.currentState) {\n weightMultiplier *= 1 - layer.currentState.internalWeight;\n }\n }\n }\n /**\r\n * Return a new instance of a SingleState.\r\n *\r\n * @private\r\n *\r\n * @param {Object} options - Options to pass to the SingleState constructor.\r\n * @param {string=} options.name - Name for the animation state. Names must be\r\n * unique for the layer the state is applied to.\r\n * @param {weight} [options.weight=0] - The 0-1 amount of influence the state will have.\r\n * @param {timeScale} [options.timeScale=1] - Factor to scale the playback speed of the\r\n * animation.\r\n * @param {number} [options.loopCount=Infinity] - Number of times the animation should\r\n * repeat before finishing.\r\n * @param {string} [options.blendMode=LayerBlendModes[DefaultLayerBlendMode]] - Type of\r\n * blending the animation should use.\r\n *\r\n * @returns {core/SingleState}\r\n */\n\n }, {\n key: "_createSingleState",\n value: function _createSingleState(options) {\n return new state_SingleState(options);\n }\n /**\r\n * Return a new instance of a FreeBlendState.\r\n *\r\n * @private\r\n *\r\n * @param {Object} options - Options to pass to the FreeBlendState constructor.\r\n * @param {string=} options.name - Name for the animation state. Names must be\r\n * unique for the layer the state is applied to.\r\n * @param {weight} [options.weight=0] - The 0-1 amount of influence the state will have.\r\n * @param {timeScale} [options.timeScale=1] - Factor to scale the playback speed of the\r\n * animation.\r\n * @param {number} [options.loopCount=Infinity] - Number of times the animation should\r\n * repeat before finishing.\r\n * @param {string} [options.blendMode=LayerBlendModes[DefaultLayerBlendMode]] - Type of\r\n * blending the animation should use.\r\n * @param {Array.} [options.blendStateOptions] - Array of options used to create the\r\n * blend states for this container.\r\n *\r\n * @returns {FreeBlendState}\r\n */\n\n }, {\n key: "_createFreeBlendState",\n value: function _createFreeBlendState(options) {\n var _this2 = this;\n\n var _options$blendStateOp = options.blendStateOptions,\n blendStateOptions = _options$blendStateOp === void 0 ? [] : _options$blendStateOp;\n var blendStates = [];\n blendStateOptions.forEach(function (blendOptions) {\n blendStates.push(_this2._createSingleState(AnimationFeature_objectSpread(AnimationFeature_objectSpread({}, blendOptions), {}, {\n blendMode: options.blendMode\n })));\n });\n return new state_FreeBlendState(options, blendStates);\n }\n /**\r\n * Return a new instance of a QueueState.\r\n *\r\n * @private\r\n *\r\n * @param {Object} options - Options to pass to the QueueState constructor.\r\n * @param {string=} options.name - Name for the animation state. Names must be\r\n * unique for the layer the state is applied to.\r\n * @param {number} [options.weight=0] - The 0-1 amount of influence the state will have.\r\n * @param {number=} options.transitionTime - The amount of time it takes to transition\r\n * between queued states.\r\n * @param {string} [options.blendMode=LayerBlendModes[DefaultLayerBlendMode]] - Type of\r\n * blending the animation should use.\r\n * @param {Array.} [options.queueOptions] - Array of options used to create the\r\n * queue states for this container.\r\n *\r\n * @returns {QueueState}\r\n */\n\n }, {\n key: "_createQueueState",\n value: function _createQueueState(options) {\n var _this3 = this;\n\n var _options$queueOptions = options.queueOptions,\n queueOptions = _options$queueOptions === void 0 ? [] : _options$queueOptions;\n var queueStates = queueOptions.map(function (queueOption) {\n return _this3._createSingleState(AnimationFeature_objectSpread(AnimationFeature_objectSpread({\n transitionTime: options.transitionTime\n }, queueOption), {}, {\n blendMode: options.blendMode\n }));\n });\n return new state_QueueState(options, queueStates);\n }\n /**\r\n * Return a new instance of a Blend1dState.\r\n *\r\n * @private\r\n *\r\n * @param {Object} options - Options to pass to the Blend1dState constructor.\r\n * @param {string=} options.name - Name for the animation state. Names must be\r\n * unique for the layer the state is applied to.\r\n * @param {weight} [options.weight=0] - The 0-1 amount of influence the state will have.\r\n * @param {timeScale} [options.timeScale=1] - Factor to scale the playback speed of the\r\n * animation.\r\n * @param {number} [options.loopCount=Infinity] - Number of times the animation should\r\n * repeat before finishing.\r\n * @param {string} [options.blendMode=LayerBlendModes[DefaultLayerBlendMode]] - Type of\r\n * blending the animation should use.\r\n * @param {Array.} [options.blendStateOptions] - Array of options used to create the\r\n * blend states for this container.\r\n * @param {Array.} [options.blendThresholds] - Array of numbers used to set the\r\n * thresholds for each blend state in this container.\r\n * @param {Array.} [options.blendMatchPhases=[]] - Optional array of booleans used to\r\n * set whether or not each blend state in this container will match phases.\r\n *\r\n * @returns {Blend1dState}\r\n */\n\n }, {\n key: "_createBlend1dState",\n value: function _createBlend1dState(options) {\n var _this4 = this;\n\n var _options$blendStateOp2 = options.blendStateOptions,\n blendStateOptions = _options$blendStateOp2 === void 0 ? [] : _options$blendStateOp2;\n var _options$blendThresho = options.blendThresholds,\n blendThresholds = _options$blendThresho === void 0 ? [] : _options$blendThresho;\n var _options$blendMatchPh = options.blendMatchPhases,\n blendMatchPhases = _options$blendMatchPh === void 0 ? [] : _options$blendMatchPh;\n var blendStates = [];\n blendStateOptions.forEach(function (blendOptions) {\n blendStates.push(_this4._createSingleState(AnimationFeature_objectSpread(AnimationFeature_objectSpread({}, blendOptions), {}, {\n blendMode: options.blendMode\n })));\n });\n return new state_Blend1dState(options, blendStates, blendThresholds, blendMatchPhases);\n }\n /**\r\n * Return a new instance of a Blend2dState.\r\n *\r\n * @private\r\n *\r\n * @param {Object} options - Options to pass to the Blend1dState constructor.\r\n * @param {string=} options.name - Name for the animation state. Names must be\r\n * unique for the layer the state is applied to.\r\n * @param {weight} [options.weight=0] - The 0-1 amount of influence the state will have.\r\n * @param {timeScale} [options.timeScale=1] - Factor to scale the playback speed of the\r\n * animation.\r\n * @param {number} [options.loopCount=Infinity] - Number of times the animation should\r\n * repeat before finishing.\r\n * @param {string} [options.blendMode=LayerBlendModes[DefaultLayerBlendMode]] - Type of\r\n * blending the animation should use.\r\n * @param {Array.} [options.blendStateOptions] - Array of options used to create the\r\n * blend states for this container.\r\n * @param {Array.>} [options.blendThresholds] - Array of Array of numbers used to set the\r\n * thresholds for each blend state in this container.\r\n * @param {Array.} [options.blendMatchPhases=[]] - Optional array of booleans used to\r\n * set whether or not each blend state in this container will match phases.\r\n *\r\n * @returns {Blend1dState}\r\n */\n\n }, {\n key: "_createBlend2dState",\n value: function _createBlend2dState(options) {\n var _this5 = this;\n\n var _options$blendStateOp3 = options.blendStateOptions,\n blendStateOptions = _options$blendStateOp3 === void 0 ? [] : _options$blendStateOp3;\n var _options$blendThresho2 = options.blendThresholds,\n blendThresholds = _options$blendThresho2 === void 0 ? [] : _options$blendThresho2;\n var _options$blendMatchPh2 = options.blendMatchPhases,\n blendMatchPhases = _options$blendMatchPh2 === void 0 ? [] : _options$blendMatchPh2;\n var blendStates = [];\n blendStateOptions.forEach(function (blendOptions) {\n blendStates.push(_this5._createSingleState(AnimationFeature_objectSpread(AnimationFeature_objectSpread({}, blendOptions), {}, {\n blendMode: options.blendMode\n })));\n });\n return new state_Blend2dState(options, blendStates, blendThresholds, blendMatchPhases);\n }\n /**\r\n * Return a new instance of a RandomAnimationState.\r\n *\r\n * @private\r\n *\r\n * @param {Object} options - Options to pass to the RandomAnimationState constructor.\r\n * @param {string=} options.name - Name for the animation state. Names must be\r\n * unique for the layer the state is applied to.\r\n * @param {number} [options.playInterval=3] - The base animation playback interval.\r\n * @param {Array.} [options.subStateOptions] - Array of options used to create the\r\n * sub states for this container.\r\n *\r\n * @returns {RandomAnimationState}\r\n */\n\n }, {\n key: "_createRandomAnimationState",\n value: function _createRandomAnimationState(options) {\n var _this6 = this;\n\n var _options$subStateOpti = options.subStateOptions,\n subStateOptions = _options$subStateOpti === void 0 ? [] : _options$subStateOpti;\n var subStates = [];\n subStateOptions.forEach(function (subStateOptions) {\n subStates.push(_this6._createSingleState(AnimationFeature_objectSpread(AnimationFeature_objectSpread({}, subStateOptions), {}, {\n blendMode: options.blendMode\n })));\n });\n return new state_RandomAnimationState(options, subStates);\n }\n /**\r\n * Make sure the layer with the given name exists and return a unique version\r\n * of the animation name supplied for that layer.\r\n *\r\n * @private\r\n *\r\n * @param {string} layerName - Name of the layer to check against.\r\n * @param {string} animationName - Name of the animation to validate.\r\n *\r\n * @returns {string} Validated animation name.\r\n */\n\n }, {\n key: "_validateNewAnimation",\n value: function _validateNewAnimation(layerName, animationName) {\n // Make sure the layerName is valid\n var layer = this._layerMap[layerName];\n\n if (layer === undefined) {\n throw new Error("Cannot add animation to layer ".concat(layerName, " from host ").concat(this._host.id, ". No layer exists with this name."));\n } // Make sure the animationName is unique\n\n\n var name = core_Utils.getUniqueName(animationName, layer.getStateNames());\n\n if (name !== animationName) {\n console.warn("Animation name ".concat(animationName, " is not unique for layer ").concat(layer.name, ". Animation will be renamed to ").concat(name, "."));\n }\n\n return name;\n }\n /**\r\n * Gets whether or not all animations are paused.\r\n *\r\n * @readonly\r\n * @type {boolean}\r\n */\n\n }, {\n key: "paused",\n get: function get() {\n return this._paused;\n }\n /**\r\n * Gets an array of names of animation layers.\r\n *\r\n * @readonly\r\n * @type {Array.}\r\n */\n\n }, {\n key: "layers",\n get: function get() {\n return this._layers.map(function (layer) {\n return layer.name;\n });\n }\n /**\r\n * Create and store a new animation layer.\r\n *\r\n * @param {string} [name=\'NewLayer\'] - Name for the layer.\r\n * @param {Object} [options={}] - Options to pass to {@link AnimationLayer#constructor}\r\n * @param {index=} index - Index to insert the new layer at. If none is provided\r\n * it will be added to the end of the stack.\r\n *\r\n * @returns {number} Index of the new layer.\r\n */\n\n }, {\n key: "addLayer",\n value: function addLayer() {\n var name = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : \'NewLayer\';\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var index = arguments.length > 2 ? arguments[2] : undefined;\n var numLayers = this._layers.length;\n var layerIndex = index; // Make sure the given index is within the range of layers\n\n if (index === undefined || index === -1) {\n layerIndex = this._layers.length;\n } else {\n layerIndex = this._validateIndex(index, false);\n\n if (layerIndex === undefined) {\n // Insert at the beginning if the user passed in a negative index\n if (index < 0) {\n layerIndex = 0;\n } // Otherwise append to the end\n else {\n layerIndex = this._layers.length;\n }\n\n console.warn("Index ".concat(index, " is invalid for host ").concat(this._host.id, ". New layer will be added at the closest valid index: ").concat(layerIndex, "."));\n }\n } // Make sure the layer name is unique\n\n\n var layerName = core_Utils.getUniqueName(name, Object.keys(this._layerMap));\n\n if (name !== layerName) {\n console.warn("Layer name ".concat(name, " is not unique. New layer will be added with the name ").concat(layerName, "."));\n }\n\n var layer = new animpack_AnimationLayer(AnimationFeature_objectSpread(AnimationFeature_objectSpread({}, options), {}, {\n name: layerName\n }));\n this._layerMap[layerName] = layer;\n\n if (layerIndex === numLayers) {\n this._layers.push(layer);\n } else {\n this._layers.splice(layerIndex, 0, layer);\n } // Notify that a layer has been added to the feature\n\n\n var eventData = {\n name: layerName,\n index: layerIndex\n };\n this.emit(this.constructor.EVENTS.addLayer, eventData);\n return eventData;\n }\n /**\r\n * Remove an animation layer from the stack. Animations on this layer will no\r\n * longer be evaluated.\r\n *\r\n * @param {string} name - Name for the layer to remove.\r\n *\r\n * @returns {boolean} Whether or not removal was successful.\r\n */\n\n }, {\n key: "removeLayer",\n value: function removeLayer(name) {\n var layer = this._layerMap[name];\n\n if (layer === undefined) {\n console.warn("Did not remove layer ".concat(name, " from host ").concat(this._host.id, ". No layer exists with this name."));\n return false;\n }\n\n layer.discard();\n\n var index = this._layers.indexOf(layer);\n\n this._layers.splice(index, 1);\n\n delete this._layerMap[name]; // Notify that a layer has been removed from the feature\n\n this.emit(this.constructor.EVENTS.removeLayer, {\n name: name,\n index: index\n });\n return true;\n }\n /**\r\n * Re-order the layer stack so that the layer with the given name is positioned\r\n * at the given index.\r\n *\r\n * @param {string} name - Name of the layer to move.\r\n * @param {number} index - New index to position the layer at.\r\n *\r\n * @returns {number} The new index of the layer\r\n */\n\n }, {\n key: "moveLayer",\n value: function moveLayer(name, index) {\n // Make sure the name is valid\n var layer = this._layerMap[name];\n\n if (layer === undefined) {\n throw new Error("Cannot move layer ".concat(name, " from host ").concat(this._host.id, ". No layer exists with this name."));\n } // Make sure the index falls in the range of existing layers\n\n\n var layerIndex = this._validateIndex(index, true);\n\n var lastIndex = this._layers.length - 1;\n\n if (layerIndex === undefined) {\n throw new Error("Cannot move layer ".concat(name, " from host ").concat(this._host.id, " to index ").concat(index, ". Index must be in the 0 - ").concat(lastIndex, " range."));\n }\n\n var currentIndex = this._layers.indexOf(layer);\n\n if (currentIndex === layerIndex) {\n return;\n } // Remove from the current position\n\n\n this._layers.splice(currentIndex, 1); // Insert at the new position\n\n\n if (layerIndex === lastIndex) {\n this._layers.push(layer);\n } else {\n this._layers.splice(layerIndex, 0, layer);\n }\n\n return layerIndex;\n }\n /**\r\n * Update the name of a layer. Names must be unique, if the new name is not\r\n * unique it will have trailing numbers appended until it is unique.\r\n *\r\n * @param {string} currentName - Current name of the layer.\r\n * @param {string} newName - New name to set on the layer.\r\n *\r\n * @returns {string} The new name of the layer\r\n */\n\n }, {\n key: "renameLayer",\n value: function renameLayer(currentName, newName) {\n // Make sure the name is valid\n var layer = this._layerMap[currentName];\n\n if (layer === undefined) {\n throw new Error("Cannot rename layer ".concat(currentName, " from host ").concat(this._host.id, ". No layer exists with this name."));\n } // Make sure the layer name is unique\n\n\n var name = core_Utils.getUniqueName(newName, Object.keys(this._layerMap));\n\n if (name !== newName) {\n console.warn("Layer name ".concat(newName, " is not unique. Layer will be renamed to ").concat(name, "."));\n }\n\n delete this._layerMap[currentName];\n this._layerMap[name] = layer;\n layer.name = name; // Notify that a layer has been renamed on the feature\n\n this.emit(this.constructor.EVENTS.renameLayer, {\n oldName: currentName,\n newName: name\n });\n return name;\n }\n /**\r\n * Return the weight of an animation layer.\r\n *\r\n * @param {string} name - Name of the layer to return weight from.\r\n *\r\n * @returns {number}\r\n */\n\n }, {\n key: "getLayerWeight",\n value: function getLayerWeight(name) {\n // Make sure the name is valid\n var layer = this._layerMap[name];\n\n if (layer === undefined) {\n throw new Error("Cannot get weight on layer ".concat(name, " from host ").concat(this._host.id, ". No layer exists with this name."));\n }\n\n return layer.weight;\n }\n /**\r\n * Update the weight of an animation layer.\r\n *\r\n * @param {string} name - The name of the layer to update.\r\n * @param {number} weight - The weight value to set on the layer. This number\r\n * should be in the 0-1 range.\r\n * @param {number=} seconds - The number of seconds it should take to reach the\r\n * new weight. Default is zero and will set immediately.\r\n * @param {Function=} easingFn - The easing function to use while interpolating\r\n * the weight. Default is Easing.Linear.InOut.\r\n *\r\n * @returns {Deferred} A promise that will resolve once the layer\'s weight reaches\r\n * the target value.\r\n */\n\n }, {\n key: "setLayerWeight",\n value: function setLayerWeight(name, weight, seconds, easingFn) {\n // Make sure the name is valid\n var layer = this._layerMap[name];\n\n if (layer === undefined) {\n var e = "Cannot set weight on layer ".concat(name, " from host ").concat(this._host.id, ". No layer exists with this name.");\n return core_Deferred.reject(e);\n }\n\n return layer.setWeight(weight, seconds, easingFn);\n }\n /**\r\n * Returns the names of blend states in an animation in a layer.\r\n *\r\n * @param {string} layerName - Name of the layer containing the animation containing\r\n * the blend state to update.\r\n * @param {string} animationName - Name of the animation containing the blend state\r\n * to update.\r\n *\r\n * @returns {Array.} - Names of blend states.\r\n */\n\n }, {\n key: "getAnimationBlendNames",\n value: function getAnimationBlendNames(layerName, animationName) {\n var layer = this._layerMap[layerName];\n\n if (layer === undefined) {\n throw new Error("Cannot get blend names on layer ".concat(layerName, " from host ").concat(this._host.id, ". No layer exists with this name."));\n }\n\n return layer.getAnimationBlendNames(animationName);\n }\n /**\r\n * Update the weight for a blend state in an animation in a layer.\r\n *\r\n * @param {string} layerName - Name of the layer containing the animation containing\r\n * the blend state to update.\r\n * @param {string} animationName - Name of the animation containing the blend state\r\n * to update.\r\n * @param {string} blendName - Name of the blend state to update.\r\n * @param {number} weight - Weight value to set on the animation. This number shoudld be\r\n * in the 0-1 range.\r\n * @param {number=} seconds - Number of seconds it should take to reach the new weight.\r\n * Default is zero and will set immediately.\r\n * @param {Function=} easingFn - Easing function to use while interpolating the new\r\n * weight. Default is Easing.Linear.InOut.\r\n *\r\n * @returns {Deferred} - Promise that will resolve once the animation\'s weight reaches\r\n * the target value.\r\n */\n\n }, {\n key: "setAnimationBlendWeight",\n value: function setAnimationBlendWeight(layerName, animationName, blendName, weight, seconds, easingFn) {\n var layer = this._layerMap[layerName];\n\n if (layer === undefined) {\n var e = "Cannot set blend weight on layer ".concat(layerName, " from host ").concat(this._host.id, ". No layer exists with this name.");\n return core_Deferred.reject(e);\n }\n\n return layer.setAnimationBlendWeight(animationName, blendName, weight, seconds, easingFn);\n }\n /**\r\n * Returns the weight for a blend state in an animation in a layer.\r\n *\r\n * @param {string} layerName - Name of the layer containing the animation containing\r\n * the blend state to update.\r\n * @param {string} animationName - Name of the animation containing the blend state\r\n * to update.\r\n * @param {string} blendName - Name of the blend state to update.\r\n *\r\n * @returns {number} - Weight of the blend state.\r\n */\n\n }, {\n key: "getAnimationBlendWeight",\n value: function getAnimationBlendWeight(layerName, animationName, blendName) {\n var layer = this._layerMap[layerName];\n\n if (layer === undefined) {\n throw new Error("Cannot get blend weight on layer ".concat(layerName, " from host ").concat(this._host.id, ". No layer exists with this name."));\n }\n\n return layer.getAnimationBlendWeight(animationName, blendName);\n }\n /**\r\n * Pause weight interpolation animation on a layer with the given name.\r\n *\r\n * @param {string} name - Name of the layer to pause.\r\n *\r\n * @returns {boolean} - Whether or not there was an existing interpolation to pause.\r\n */\n\n }, {\n key: "pauseLayerWeight",\n value: function pauseLayerWeight(name) {\n // Make sure the name is valid\n var layer = this._layerMap[name];\n\n if (layer === undefined) {\n throw new Error("Cannot pause weight interpolation on layer ".concat(name, " from host ").concat(this._host.id, ". No layer exists with this name."));\n }\n\n return layer.pauseWeight();\n }\n /**\r\n * Resume weight interpolation animation on a layer with the given name.\r\n *\r\n * @param {string} name - Name of the layer to resume.\r\n *\r\n * @returns {Deferred} - Resolves once the layer\'s weight reaches its target value.\r\n */\n\n }, {\n key: "resumeLayerWeight",\n value: function resumeLayerWeight(name) {\n // Make sure the name is valid\n var layer = this._layerMap[name];\n\n if (layer === undefined) {\n var e = "Cannot resume weight interpolation on layer ".concat(name, " from host ").concat(this._host.id, ". No layer exists with this name.");\n return core_Deferred.reject(e);\n }\n\n return layer.resumeWeight();\n }\n /**\r\n * Pause current animation and weight interpolation animation on a layer with\r\n * the given name.\r\n *\r\n * @param {string} name - Name of the layer to pause.\r\n *\r\n * @returns {boolean} - Whether or not there was an existing interpolation or\r\n * current animation to pause.\r\n */\n\n }, {\n key: "pauseLayer",\n value: function pauseLayer(name) {\n // Make sure the name is valid\n var layer = this._layerMap[name];\n\n if (layer === undefined) {\n throw new Error("Cannot pause layer ".concat(name, " from host ").concat(this._host.id, ". No layer exists with this name."));\n }\n\n return layer.pause();\n }\n /**\r\n * Resume current animation and weight interpolation animation on a layer with\r\n * the given name.\r\n *\r\n * @param {string} name - Name of the layer to resume.\r\n *\r\n * @returns {Deferred} - Resolves once the layer\'s weight reaches its target value\r\n * and it\'s current animation finishes playing.\r\n */\n\n }, {\n key: "resumeLayer",\n value: function resumeLayer(name) {\n // Make sure the name is valid\n var layer = this._layerMap[name];\n\n if (layer === undefined) {\n var e = "Cannot resume layer ".concat(name, " from host ").concat(this._host.id, ". No layer exists with this name.");\n return core_Deferred.reject(e);\n }\n\n return layer.resume();\n }\n /**\r\n * Return whether or not the animation layer with the given name is currently\r\n * transitioning between animations.\r\n *\r\n * @param {string} layerName - Name of the layer to check.\r\n *\r\n * @returns {boolean}\r\n */\n\n }, {\n key: "getTransitioning",\n value: function getTransitioning(layerName) {\n // Make sure the layerName is valid\n var layer = this._layerMap[layerName];\n\n if (layer === undefined) {\n throw new Error("Get transitioning on layer ".concat(layerName, " from host ").concat(this._host.id, ". No layer exists with this name."));\n }\n\n return layer.isTransitioning;\n }\n /**\r\n * Return an array of the names of all states the layer with the given name controls.\r\n *\r\n * @param {string} layerName - Name of the layer to search.\r\n *\r\n * @returns {Array.}\r\n */\n\n }, {\n key: "getAnimations",\n value: function getAnimations(layerName) {\n // Make sure the layerName is valid\n var layer = this._layerMap[layerName];\n\n if (layer === undefined) {\n throw new Error("Get animations on layer ".concat(layerName, " from host ").concat(this._host.id, ". No layer exists with this name."));\n }\n\n return layer.getStateNames();\n }\n /**\r\n * Return the name of the state currently active on the layer with the given name.\r\n * Return null if there is no current animation for the layer.\r\n *\r\n * @param {string} layerName - Name of the layer.\r\n *\r\n * @returns {(string|null)}\r\n */\n\n }, {\n key: "getCurrentAnimation",\n value: function getCurrentAnimation(layerName) {\n // Make sure the layerName is valid\n var layer = this._layerMap[layerName];\n\n if (layer === undefined) {\n throw new Error("Get current animation on layer ".concat(layerName, " from host ").concat(this._host.id, ". No layer exists with this name."));\n }\n\n return layer.currentAnimation;\n }\n /**\r\n * Return whether or not a layer with the given name is currently playing an\r\n * animation and that animation is paused.\r\n *\r\n * @param {string} layerName - Name of the layer.\r\n *\r\n * @returns {boolean}\r\n */\n\n }, {\n key: "getPaused",\n value: function getPaused(layerName) {\n // Make sure the layerName is valid\n var layer = this._layerMap[layerName];\n\n if (layer === undefined) {\n throw new Error("Get paused on layer ".concat(layerName, " from host ").concat(this._host.id, ". No layer exists with this name."));\n }\n\n return layer.currentState && layer.currentState.paused;\n }\n /**\r\n * Return the type name of the given animation. @see AnimationTypes.\r\n *\r\n * @param {string} layerName - Name of the layer that contains the animation.\r\n * @param {string} animationName - Name of the animation to check.\r\n *\r\n * @returns {string}\r\n */\n\n }, {\n key: "getAnimationType",\n value: function getAnimationType(layerName, animationName) {\n // Make sure the layerName is valid\n var layer = this._layerMap[layerName];\n\n if (layer === undefined) {\n throw new Error("Get animation type on layer ".concat(layerName, " from host ").concat(this._host.id, ". No layer exists with this name."));\n }\n\n var state = layer.getState(animationName);\n\n if (state === undefined) {\n throw new Error("Get animation type for animation ".concat(animationName, " on layer ").concat(layerName, " from host ").concat(this._host.id, ". No animation exists with this name."));\n }\n\n var constructor = state.constructor;\n return Object.keys(AnimationTypes).find(function (typeName) {\n return AnimationTypes[typeName] === constructor;\n });\n }\n /**\r\n * Add a new animation to an animation layer.\r\n *\r\n * @param {string} layerName - Name of the layer to add the animation to.\r\n * @param {string} animationName - Name to use when calling the animation.\r\n * @param {Object=} options - Options to pass to the constructor for the new\r\n * SingleState animation.\r\n *\r\n * @returns {string} - The name of the animation that was added\r\n */\n\n }, {\n key: "addAnimation",\n value: function addAnimation(layerName, animationName) {\n var animationType = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : AnimationTypes.single;\n var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n options.name = this._validateNewAnimation(layerName, animationName); // Make sure the animation type is valid\n\n if (!Object.values(AnimationTypes).includes(animationType)) {\n throw new Error("Cannot add animation ".concat(animationName, " to layer ").concat(layerName, " on host ").concat(this._host.id, ". Invalid animation type."));\n }\n\n var layer = this._layerMap[layerName];\n options.blendMode = layer.blendMode;\n options.transitionTime = layer.transitionTime;\n var state = this["_create".concat(animationType.name)](options);\n var name = layer.addState(state); // Notify that an animation has been added to the feature\n\n this.emit(this.constructor.EVENTS.addAnimation, {\n layerName: layerName,\n animationName: name\n });\n return name;\n }\n /**\r\n * Remove an animation from an animation layer.\r\n *\r\n * @param {string} layerName - Name of the layer to remove the animation from.\r\n * @param {string} name - Name of the animation to remove.\r\n *\r\n * @returns {boolean}\r\n */\n\n }, {\n key: "removeAnimation",\n value: function removeAnimation(layerName, animationName) {\n // Make sure the name is valid\n var layer = this._layerMap[layerName];\n\n if (layer === undefined) {\n throw new Error("Cannot remove animation from layer ".concat(layerName, " from host ").concat(this._host.id, ". No layer exists with this name."));\n }\n\n var removed = layer.removeState(animationName); // Notify that an animation has been removed from the feature\n\n if (removed === true) {\n this.emit(this.constructor.EVENTS.removeAnimation, {\n layerName: layerName,\n animationName: animationName\n });\n }\n\n return removed;\n }\n /**\r\n * Update the name of an animation. Names must be unique on each layer, if the new\r\n * name is not unique it will have trailing numbers appended until it is unique.\r\n *\r\n * @param {string} layerName - Name of the layer that contains the animation that\r\n * will be renamed,\r\n * @param {string} currentAnimationName - Current name of the animation.\r\n * @param {string} newAnimationName - New name to set on the animation.\r\n *\r\n * @returns {string} - The new name of the animation\r\n */\n\n }, {\n key: "renameAnimation",\n value: function renameAnimation(layerName, currentAnimationName, newAnimationName) {\n var layer = this._layerMap[layerName];\n\n if (layer === undefined) {\n throw new Error("Cannot rename animation ".concat(currentAnimationName, " on layer ").concat(layerName, " for host ").concat(this._host.id, ". No layer exists with this name."));\n }\n\n var name = layer.renameState(currentAnimationName, newAnimationName); // Notify that an animation has been renamed on the feature\n\n this.emit(this.constructor.EVENTS.renameAnimation, {\n layerName: layerName,\n oldName: currentAnimationName,\n newName: name\n });\n return name;\n }\n /**\r\n * Pause the currently playing animation and play a new animation from the beginning.\r\n *\r\n * @param {string} layerName - Name of the layer that contains the animation.\r\n * @param {string} animationName - Name of the animation state to play.\r\n * @param {number=} seconds - The number of seconds it should take to transition\r\n * to the new animation. Default is zero and will set immediately.\r\n * @param {Function=} easingFn - The easing function to use while transitioning\r\n * between animations. Default is Easing.Linear.InOut.\r\n *\r\n * @returns {Deferred} - Resolves once the animation reaches the end of its\r\n * timeline. Looping animations can only resolve if they are interrupted or\r\n * manually stopped.\r\n */\n\n }, {\n key: "playAnimation",\n value: function playAnimation(layerName, animationName, seconds, easingFn) {\n var _this7 = this;\n\n var layer = this._layerMap[layerName];\n\n if (layer === undefined) {\n var e = "Cannot play animation ".concat(animationName, " on layer ").concat(layerName, " for host ").concat(this._host.id, ". No layer exists with this name.");\n return core_Deferred.reject(e);\n } // Notify that a new animation has begun\n\n\n this.emit(this.constructor.EVENTS.playAnimation, {\n layerName: layerName,\n animationName: animationName\n });\n return layer.playAnimation(animationName, seconds, easingFn, function () {\n // Notify that an animation has stopped\n _this7.emit(_this7.constructor.EVENTS.stopAnimation, {\n layerName: layerName,\n animationName: animationName\n });\n }, undefined, function () {\n // Notify that an animation has been interrupted\n _this7.emit(_this7.constructor.EVENTS.interruptAnimation, {\n layerName: layerName,\n animationName: animationName\n });\n }, function (_ref) {\n var name = _ref.name,\n canAdvance = _ref.canAdvance,\n isQueueEnd = _ref.isQueueEnd;\n\n if (layer.currentAnimation === animationName) {\n // Notify that a new animation has begun\n _this7.emit(_this7.constructor.EVENTS.playNextAnimation, {\n layerName: layerName,\n animationName: animationName,\n nextQueuedAnimation: name,\n canAdvance: canAdvance,\n isQueueEnd: isQueueEnd\n });\n }\n });\n }\n /**\r\n * Play the next animation in the queue of a QueueState animation.\r\n *\r\n * @param {string} layerName - Name of the layer that contains the queue animation.\r\n * @param {string=} animationName - Name of the animation queue animation. Defaults\r\n * to the name of the current animation for the layer.\r\n * @param {number=} seconds - The number of seconds it should take to transition\r\n * to the queue animation if it\'s not already currently playing. Default is zero\r\n * and will set immediately.\r\n * @param {Function=} easingFn - The easing function to use while transitioning\r\n * to the queue animation if it isn\'t already playing. Default is Easing.Linear.InOut.\r\n *\r\n * @returns {Deferred} - Resolves once the last animation in the queue finishes\r\n * playing.\r\n */\n\n }, {\n key: "playNextAnimation",\n value: function playNextAnimation(layerName, animationName, transitionTime, easingFn) {\n var _this8 = this;\n\n var layer = this._layerMap[layerName];\n\n if (layer === undefined) {\n var e = "Cannot play next animation on layer ".concat(layerName, " for host ").concat(this._host.id, ". No layer exists with this name.");\n return core_Deferred.reject(e);\n }\n\n if (animationName === undefined) {\n animationName = layer.currentAnimation;\n }\n\n var animation = layer.getState(layer.currentAnimation);\n\n if (animation === null) {\n var _e = "Cannot play next animation on layer ".concat(layerName, " for host ").concat(this._host.id, ". No animation exists with name ").concat(animationName, ".");\n\n return core_Deferred.reject(_e);\n } else if (this.getAnimationType(layerName, animationName) !== \'queue\') {\n var _e2 = "Cannot play next animation on layer ".concat(layerName, " for host ").concat(this._host.id, ". ").concat(animationName, " is not a queue state.");\n\n return core_Deferred.reject(_e2);\n }\n\n var onNext = function onNext(_ref2) {\n var name = _ref2.name,\n canAdvance = _ref2.canAdvance,\n isQueueEnd = _ref2.isQueueEnd;\n\n if (layer.currentAnimation === animationName) {\n // Notify that a new animation has begun\n _this8.emit(_this8.constructor.EVENTS.playNextAnimation, {\n layerName: layerName,\n animationName: animationName,\n nextQueuedAnimation: name,\n canAdvance: canAdvance,\n isQueueEnd: isQueueEnd\n });\n }\n }; // Make the queue animation current if it wasn\'t already\n\n\n if (layer.currentAnimation === null) {\n layer.resumeAnimation(animation.name, transitionTime, easingFn, undefined, undefined, undefined, onNext);\n }\n\n return animation.next(onNext, true);\n }\n /**\r\n * Pause the current animation on a layer.\r\n *\r\n * @param {string} name - Name of the layer to pause.\r\n *\r\n * @returns {boolean} Whether or not an animation was successfully paused.\r\n */\n\n }, {\n key: "pauseAnimation",\n value: function pauseAnimation(name) {\n var layer = this._layerMap[name];\n\n if (layer === undefined) {\n console.warn("Did not pause animation on layer ".concat(name, " for host ").concat(this._host.id, ". No layer exists with this name."));\n return false;\n }\n\n var paused = layer.pauseAnimation(); // Notify that an animation was paused\n\n if (paused) {\n var animationName = layer.currentAnimation;\n this.emit(this.constructor.EVENTS.pauseAnimation, {\n layerName: name,\n animationName: animationName\n });\n }\n\n return paused;\n }\n /**\r\n * Pause the currently playing animation and play a new animation from where it\r\n * last left off.\r\n *\r\n * @param {string} layerName - Name of the layer that contains the animation.\r\n * @param {string=} animationName - Name of the animation state to resume. Defaults\r\n * to the name of the current animation for the layer.\r\n * @param {number=} seconds - The number of seconds it should take to transition\r\n * to the new animation. Default is zero and will set immediately.\r\n * @param {Function=} easingFn - The easing function to use while transitioning\r\n * between animations. Default is Easing.Linear.InOut.\r\n *\r\n * @returns {Deferred} - Resolves once the animation reaches the end of its\r\n * timeline. Looping animations can only resolve if they are interrupted or\r\n * manually stopped.\r\n */\n\n }, {\n key: "resumeAnimation",\n value: function resumeAnimation(layerName, animationName, seconds, easingFn) {\n var _this9 = this;\n\n var layer = this._layerMap[layerName];\n\n if (layer === undefined) {\n var e = "Cannot resume animation ".concat(animationName, " on layer ").concat(layerName, " for host ").concat(this._host.id, ". No layer exists with this name.");\n return core_Deferred.reject(e);\n } // Notify that an animation was resumed\n\n\n this.emit(this.constructor.EVENTS.resumeAnimation, {\n layerName: layerName,\n animationName: animationName\n });\n return layer.resumeAnimation(animationName, seconds, easingFn, function () {\n // Notify that an animation has stopped\n _this9.emit(_this9.constructor.EVENTS.stopAnimation, {\n layerName: layerName,\n animationName: animationName\n });\n }, undefined, function () {\n // Notify that an animation has been interrupted\n _this9.emit(_this9.constructor.EVENTS.interruptAnimation, {\n layerName: layerName,\n animationName: animationName\n });\n }, function (_ref3) {\n var name = _ref3.name,\n canAdvance = _ref3.canAdvance,\n isQueueEnd = _ref3.isQueueEnd;\n\n if (layer.currentAnimation === animationName) {\n // Notify that a new animation has begun\n _this9.emit(_this9.constructor.EVENTS.playNextAnimation, {\n layerName: layerName,\n animationName: animationName,\n nextQueuedAnimation: name,\n canAdvance: canAdvance,\n isQueueEnd: isQueueEnd\n });\n }\n });\n }\n /**\r\n * Stop the current animation on a layer. Stop rewinds the animation to the\r\n * beginning and prevents it from progressing forward.\r\n *\r\n * @param {string} name - Name of the layer that contains the animation.\r\n *\r\n * @returns {boolean} Whether or not an animation was successfully stopped.\r\n */\n\n }, {\n key: "stopAnimation",\n value: function stopAnimation(name) {\n var layer = this._layerMap[name];\n\n if (layer === undefined) {\n console.warn("Did not stop animation on layer ".concat(name, " for host ").concat(this._host.id, ". No layer exists with this name."));\n return false;\n }\n\n return layer.stopAnimation();\n }\n /**\r\n * Pause current animation and weight interpolation animation on all layers.\r\n * @returns {boolean} - Whether or not there was an existing interpolation or\r\n * current animations to pause.\r\n */\n\n }, {\n key: "pause",\n value: function pause() {\n this._paused = true;\n var paused = false;\n\n this._layers.forEach(function (l) {\n if (l.pause()) {\n paused = true;\n }\n });\n\n return paused;\n }\n /**\r\n * Resume current animation and weight interpolation animation on all layers.\r\n * @returns {boolean} - Whether or not there was an existing interpolation or\r\n * current animations to resume.\r\n */\n\n }, {\n key: "resume",\n value: function resume() {\n this._paused = false;\n var resumed = false;\n\n this._layers.forEach(function (l) {\n if (l.resume()) {\n resumed = true;\n }\n });\n\n return resumed;\n }\n /**\r\n * Adds a namespace to the host with the name of the feature to contain properties\r\n * and methods from the feature that users of the host need access to.\r\n *\r\n * @see AnimationFeature\r\n */\n\n }, {\n key: "installApi",\n value: function installApi() {\n var _this10 = this;\n\n /**\r\n * @inner\r\n * @namespace AnimationFeature\r\n */\n var api = AnimationFeature_get(AnimationFeature_getPrototypeOf(AnimationFeature.prototype), "installApi", this).call(this);\n\n Object.defineProperties(api, {\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @see core/AnimationFeature#paused\r\n */\n paused: {\n get: function get() {\n return _this10.paused;\n }\n },\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @see core/AnimationFeature#layers\r\n */\n layers: {\n get: function get() {\n return _this10.layers;\n }\n }\n });\n Object.assign(api, {\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#addLayer\r\n */\n addLayer: this.addLayer.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#removeLayer\r\n */\n removeLayer: this.removeLayer.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#moveLayer\r\n */\n moveLayer: this.moveLayer.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#renameLayer\r\n */\n renameLayer: this.renameLayer.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#getLayerWeight\r\n */\n getLayerWeight: this.getLayerWeight.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#setLayerWeight\r\n */\n setLayerWeight: this.setLayerWeight.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#pauseLayerWeight\r\n */\n pauseLayerWeight: this.pauseLayerWeight.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#resumeLayerWeight\r\n */\n resumeLayerWeight: this.resumeLayerWeight.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#pauseLayer\r\n */\n pauseLayer: this.pauseLayer.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#resumeLayer\r\n */\n resumeLayer: this.resumeLayer.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#getTransitioning\r\n */\n getTransitioning: this.getTransitioning.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#getAnimations\r\n */\n getAnimations: this.getAnimations.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#getCurrentAnimation\r\n */\n getCurrentAnimation: this.getCurrentAnimation.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#getPaused\r\n */\n getPaused: this.getPaused.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#getAnimationType\r\n */\n getAnimationType: this.getAnimationType.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#addAnimation\r\n */\n addAnimation: this.addAnimation.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#removeAnimation\r\n */\n removeAnimation: this.removeAnimation.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#renameAnimation\r\n */\n renameAnimation: this.renameAnimation.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#getAnimationBlendNames\r\n */\n getAnimationBlendNames: this.getAnimationBlendNames.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#getAnimationBlendWeight\r\n */\n getAnimationBlendWeight: this.getAnimationBlendWeight.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#setAnimationBlendWeight\r\n */\n setAnimationBlendWeight: this.setAnimationBlendWeight.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#playAnimation\r\n */\n playAnimation: this.playAnimation.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#playNextAnimation\r\n */\n playNextAnimation: this.playNextAnimation.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#pauseAnimation\r\n */\n pauseAnimation: this.pauseAnimation.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#resumeAnimation\r\n */\n resumeAnimation: this.resumeAnimation.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#stopAnimation\r\n */\n stopAnimation: this.stopAnimation.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#pause\r\n */\n pause: this.pause.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#resume\r\n */\n resume: this.resume.bind(this)\n });\n }\n /**\r\n * Update each animation layer.\r\n *\r\n * @param {number} deltaTime - Time since the last update.\r\n */\n\n }, {\n key: "update",\n value: function update(deltaTime) {\n if (!this._layers.length) {\n return;\n }\n\n if (this._paused) {\n deltaTime = 0;\n } // Re-evaluate internal weights for layers\n\n\n this._updateInternalWeights(); // Update layers\n\n\n this._layers.forEach(function (layer) {\n layer.update(deltaTime);\n });\n\n AnimationFeature_get(AnimationFeature_getPrototypeOf(AnimationFeature.prototype), "update", this).call(this, deltaTime);\n }\n }, {\n key: "discard",\n value: function discard() {\n this._layers.forEach(function (layer) {\n layer.discard();\n });\n\n delete this._layers;\n delete this._layerMap;\n\n AnimationFeature_get(AnimationFeature_getPrototypeOf(AnimationFeature.prototype), "discard", this).call(this);\n }\n }]);\n\n return AnimationFeature;\n}(core_AbstractHostFeature);\n\nObject.defineProperty(AnimationFeature_AnimationFeature, \'EVENTS\', {\n value: AnimationFeature_objectSpread(AnimationFeature_objectSpread({}, Object.getPrototypeOf(core_AbstractHostFeature).EVENTS), {}, {\n addLayer: \'onAddLayerEvent\',\n removeLayer: \'onRemoveLayerEvent\',\n renameLayer: \'onRenameLayerEvent\',\n addAnimation: \'onAddAnimationEvent\',\n removeAnimation: \'onRemovedAnimationEvent\',\n renameAnimation: \'onRenameAnimationEvent\',\n playAnimation: \'onPlayEvent\',\n playNextAnimation: \'onNextEvent\',\n pauseAnimation: \'onPauseEvent\',\n resumeAnimation: \'onResumeEvent\',\n interruptAnimation: \'onInterruptEvent\',\n stopAnimation: \'onStopEvent\'\n })\n});\n/* harmony default export */ var animpack_AnimationFeature = (AnimationFeature_AnimationFeature);\n// CONCATENATED MODULE: ./src/core/PointOfInterestFeature.js\nfunction PointOfInterestFeature_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { PointOfInterestFeature_typeof = function _typeof(obj) { return typeof obj; }; } else { PointOfInterestFeature_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return PointOfInterestFeature_typeof(obj); }\n\nfunction PointOfInterestFeature_slicedToArray(arr, i) { return PointOfInterestFeature_arrayWithHoles(arr) || PointOfInterestFeature_iterableToArrayLimit(arr, i) || PointOfInterestFeature_unsupportedIterableToArray(arr, i) || PointOfInterestFeature_nonIterableRest(); }\n\nfunction PointOfInterestFeature_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."); }\n\nfunction PointOfInterestFeature_iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction PointOfInterestFeature_arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction PointOfInterestFeature_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction PointOfInterestFeature_toConsumableArray(arr) { return PointOfInterestFeature_arrayWithoutHoles(arr) || PointOfInterestFeature_iterableToArray(arr) || PointOfInterestFeature_unsupportedIterableToArray(arr) || PointOfInterestFeature_nonIterableSpread(); }\n\nfunction PointOfInterestFeature_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."); }\n\nfunction PointOfInterestFeature_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return PointOfInterestFeature_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return PointOfInterestFeature_arrayLikeToArray(o, minLen); }\n\nfunction PointOfInterestFeature_iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction PointOfInterestFeature_arrayWithoutHoles(arr) { if (Array.isArray(arr)) return PointOfInterestFeature_arrayLikeToArray(arr); }\n\nfunction PointOfInterestFeature_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction PointOfInterestFeature_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction PointOfInterestFeature_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction PointOfInterestFeature_createClass(Constructor, protoProps, staticProps) { if (protoProps) PointOfInterestFeature_defineProperties(Constructor.prototype, protoProps); if (staticProps) PointOfInterestFeature_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction PointOfInterestFeature_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { PointOfInterestFeature_get = Reflect.get; } else { PointOfInterestFeature_get = function _get(target, property, receiver) { var base = PointOfInterestFeature_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return PointOfInterestFeature_get(target, property, receiver || target); }\n\nfunction PointOfInterestFeature_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = PointOfInterestFeature_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction PointOfInterestFeature_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) PointOfInterestFeature_setPrototypeOf(subClass, superClass); }\n\nfunction PointOfInterestFeature_setPrototypeOf(o, p) { PointOfInterestFeature_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return PointOfInterestFeature_setPrototypeOf(o, p); }\n\nfunction PointOfInterestFeature_createSuper(Derived) { var hasNativeReflectConstruct = PointOfInterestFeature_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = PointOfInterestFeature_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = PointOfInterestFeature_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return PointOfInterestFeature_possibleConstructorReturn(this, result); }; }\n\nfunction PointOfInterestFeature_possibleConstructorReturn(self, call) { if (call && (PointOfInterestFeature_typeof(call) === "object" || typeof call === "function")) { return call; } return PointOfInterestFeature_assertThisInitialized(self); }\n\nfunction PointOfInterestFeature_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction PointOfInterestFeature_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction PointOfInterestFeature_getPrototypeOf(o) { PointOfInterestFeature_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return PointOfInterestFeature_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/* eslint-disable no-underscore-dangle */\n\n/* eslint-disable no-unused-vars */\n\n\n\n\n\n\n\n/**\n * Enum for axis directions.\n *\n * @readonly\n * @enum {Class}\n */\n\nvar AxisMap = {\n PositiveX: [1, 0, 0],\n NegativeX: [-1, 0, 0],\n PositiveY: [0, 1, 0],\n NegativeY: [0, -1, 0],\n PositiveZ: [0, 0, 1],\n NegativeZ: [0, 0, -1]\n};\nvar FaceTargetTypes = {\n EyeCenter: 0,\n EyeLeft: 1,\n EyeRight: 2,\n Mouth: 3\n}; // Average distance between pupils is .064m, golden ratio says that the distance\n// from center of the pupils to the center of the mouth should be about the same.\n\nvar FaceVectors = [[0, 0, 0], [-.032, 0, 0], [.032, 0, 0], [0, -.064, 0]]; // Time ranges to use when choosing a new random wait time between saccades\n\nvar MicroSaccadeWaitRanges = {\n "default": [0.8, 1.75],\n postMacro: [0.6, 1.3125]\n};\nvar MacroSaccadeWaitRanges = {\n "default": [5.0, 8.0],\n mouthTarget: [0.2, 0.75],\n // Look away from a mouth target the fastest\n eyeTarget: [1.5, 4.0]\n}; // Minimum angle in degrees the eye direction must change to trigger a blink animation\n\nvar BlinkThreshold = 35; // Maximum number of milliseconds to use for calculating look speed\n\nvar MaxDelta = 100 / 3;\n/**\n * PointOfInterest controls the gaze direction of the host. Given one or more\n * animations of type Blend2dState, it calculates the angles between the lookTracker\n * object (generally a joint in the host\'s skeleton) and the lookTarget (the object\n * the host should look at) and drives the managed Blend2dStates\' X and Y blend\n * values using the result. You can optionally add saccadic movement to any managed\n * animation to help make the host\'s eyes appear alive when focused on the same\n * point for exteded periods of time. If blink animations are specified, a blink\n * will be played during large changes in gaze direction.\n *\n * @extends AbstractHostFeature\n * @alias core/PointOfInterestFeature\n * @implements SSMLSpeechmarkInterface\n * @implements ManagedAnimationLayerInterface\n */\n\nvar PointOfInterestFeature_PointOfInterestFeature = /*#__PURE__*/function (_AbstractHostFeature$) {\n PointOfInterestFeature_inherits(PointOfInterestFeature, _AbstractHostFeature$);\n\n var _super = PointOfInterestFeature_createSuper(PointOfInterestFeature);\n\n /**\n * @constructor\n *\n * @param {core/HostObject} host - Host that owns the feature.\n * @param {Object=} options - Options for the feature.\n * @param {Object=} target - 3D transformation node that the host should try to\n * look at.\n * @param {Object} options.lookTracker - 3D transformation node that represents\n * the direction the host is currently looking during animation.\n * @param {Object=} options.scene - Engine-specific scene object that contains\n * the host. This object must be defined if using \'setTargetByName\' or \'SetTargetById\'\n * methods.\n * @param {Object=} lookOptions - Options for the look animation layers.\n * @param {number} [lookOptions.blendTime=0.1] - Default amount of time it will\n * take to manipulate the weights of the look layers.\n * @param {number} [lookOptions.easingFn=Quadratic.InOut] - Default easing function\n * to use when manipulating look layer weights.\n * @param {Array.} [lookOptions.layers=[]] - An array of layer options\n * objects to register as look layers.\n * @param {Object=} blinkOptions - Options for the blink animation layers.\n * @param {number} [blinkOptions.blendTime=0.075] - Default amount of time it\n * will take to manipulate the weights of the blink layers.\n * @param {number} [blinkOptions.easingFn=Quadratic.InOut] - Default easing function\n * to use when manipulating blink layer weights.\n * @param {Array.} [blinkOptions.layers=[]] - An array of layer options\n * objects to register as blink layers.\n */\n function PointOfInterestFeature(host) {\n var _this;\n\n var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n target = _ref.target,\n lookTracker = _ref.lookTracker,\n scene = _ref.scene;\n\n var _ref2 = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},\n _ref2$blendTime = _ref2.blendTime,\n lookBlendTime = _ref2$blendTime === void 0 ? 0.1 : _ref2$blendTime,\n _ref2$easingFn = _ref2.easingFn,\n lookEasingFn = _ref2$easingFn === void 0 ? Quadratic.InOut : _ref2$easingFn,\n _ref2$layers = _ref2.layers,\n lookLayers = _ref2$layers === void 0 ? [] : _ref2$layers;\n\n var _ref3 = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {},\n _ref3$blendTime = _ref3.blendTime,\n blinkBlendTime = _ref3$blendTime === void 0 ? 0.075 : _ref3$blendTime,\n _ref3$easingFn = _ref3.easingFn,\n blinkEasingFn = _ref3$easingFn === void 0 ? Quadratic.InOut : _ref3$easingFn,\n _ref3$layers = _ref3.layers,\n blinkLayers = _ref3$layers === void 0 ? [] : _ref3$layers;\n\n PointOfInterestFeature_classCallCheck(this, PointOfInterestFeature);\n\n _this = _super.call(this, host);\n\n if (!_this.constructor._validateTransformObject(lookTracker)) {\n throw new Error("Cannot initialize PointOfInterestFeature on host ".concat(_this._host.id, ". LookTracker must be defined as a valid transformation object."));\n }\n\n _this._lookTracker = lookTracker;\n _this._scene = scene;\n _this._target = target || null;\n _this._prevTargetPos = [0, 0, 0];\n _this._isTargetMoving = false;\n _this._lookLayers = _this._lookLayers || {};\n _this._trackingConfigs = _this._trackingConfigs || [];\n _this._blinkLayers = _this._blinkLayers || {}; // Register the look layers\n\n lookLayers.forEach(function (_ref4) {\n var name = _ref4.name,\n animation = _ref4.animation,\n maxSpeed = _ref4.maxSpeed,\n reference = _ref4.reference,\n forwardAxis = _ref4.forwardAxis,\n hasSaccade = _ref4.hasSaccade,\n blendTime = _ref4.blendTime,\n easingFn = _ref4.easingFn;\n\n _this.registerLookLayer(name, {\n animation: animation,\n maxSpeed: maxSpeed,\n reference: reference,\n forwardAxis: forwardAxis,\n hasSaccade: hasSaccade,\n blendTime: blendTime !== undefined ? blendTime : lookBlendTime,\n easingFn: easingFn !== undefined ? easingFn : lookEasingFn\n });\n }); // Register the blink layers\n\n blinkLayers.forEach(function (_ref5) {\n var name = _ref5.name,\n animation = _ref5.animation,\n blendTime = _ref5.blendTime,\n easingFn = _ref5.easingFn;\n\n _this.registerBlinkLayer(name, {\n animation: animation,\n blendTime: blendTime !== undefined ? blendTime : blinkBlendTime,\n easingFn: easingFn !== undefined ? easingFn : blinkEasingFn\n });\n });\n return _this;\n }\n /**\n * Gets and sets the target object the host should look at.\n *\n * @type {Object|null}\n */\n\n\n PointOfInterestFeature_createClass(PointOfInterestFeature, [{\n key: "target",\n get: function get() {\n return this._target;\n },\n set: function set(target) {\n this._target = target || null;\n }\n /**\n * Return a vector representing the global position of an object. Should be\n * overloaded for each rendering engine implementation.\n *\n * @private\n *\n * @param {any} _obj - Engine-specific 3D transform object.\n *\n * @returns {Array.} - An array consisting of three numbers representing\n * x, y and z coordinates.\n */\n\n }, {\n key: "_onLayerAdded",\n value: function _onLayerAdded(_ref6) {\n var name = _ref6.name;\n this._lookLayers = this._lookLayers || {};\n this._blinkLayers = this._blinkLayers || {};\n\n PointOfInterestFeature_get(PointOfInterestFeature_getPrototypeOf(PointOfInterestFeature.prototype), "_onLayerAdded", this).call(this, {\n name: name\n }); // Validate the look animation\n\n\n if (this._lookLayers[name] !== undefined) {\n this._registerLookAnimation(name, this._lookLayers[name]);\n }\n }\n }, {\n key: "_onAnimationAdded",\n value: function _onAnimationAdded(_ref7) {\n var layerName = _ref7.layerName,\n animationName = _ref7.animationName;\n this._lookLayers = this._lookLayers || {};\n this._blinkLayers = this._blinkLayers || {};\n\n PointOfInterestFeature_get(PointOfInterestFeature_getPrototypeOf(PointOfInterestFeature.prototype), "_onAnimationAdded", this).call(this, {\n layerName: layerName\n }); // Validate the look animation\n\n\n if (this._lookLayers[layerName] === animationName) {\n this._registerLookAnimation(layerName, animationName);\n }\n }\n /**\n * Ensure that registered look animations are Blend2dStates.\n *\n * @private\n *\n * @param {string} layerName - Name of the layer that contains the look animation.\n * @param {string} animationName - Name of the animation.\n */\n\n }, {\n key: "_registerLookAnimation",\n value: function _registerLookAnimation(layerName, animationName) {\n if (this._managedLayers[layerName].animations[animationName].isActive) {\n if (AnimationTypes[this._host.AnimationFeature.getAnimationType(layerName, animationName)] !== AnimationTypes.blend2d) {\n // Warn and deactivate if the registered state is not blend2d\n console.warn("Cannot register Point of Interest look animation ".concat(animationName, " on layer ").concat(layerName, " for host ").concat(this._host.id, ". Look animations must be of type \'blend2d\'."));\n this._managedLayers[layerName].animations[animationName].isActive = false;\n }\n }\n }\n /**\n * Check if the given object is not of an engine-specific type. Should\n * be overloaded for each rendering engine implementation.\n *\n * @private\n *\n * @param {any} obj - Object to validate.\n *\n * @returns {boolean}\n */\n\n }, {\n key: "_addTrackingConfig",\n value:\n /**\n * Check if the given configuration object has already been stored as a tracking\n * config. If it has, return the stored configuration. Otherwise, store and\n * return it.\n *\n * @private\n *\n * @param {Object} config - Object containing tracker, reference and forwardAxis\n * properties.\n *\n * @returns {Object}\n */\n function _addTrackingConfig(config) {\n var trackingConfig = this._trackingConfigs.find(function (c) {\n return c.reference === config.reference && c.forwardAxis === config.forwardAxis;\n });\n\n if (trackingConfig) {\n return trackingConfig;\n } else {\n config.angles = {\n h: 0,\n v: 0\n };\n config.prevAngles = {\n h: 0,\n v: 0\n };\n\n this._trackingConfigs.push(config);\n\n return config;\n }\n }\n /**\n * Return the distance between the look tracker and the look target.\n *\n * @private\n *\n * @returns {number}\n */\n\n }, {\n key: "_getTargetDistance",\n value: function _getTargetDistance() {\n // Find the vector between the global positions of tracker and target\n var sourcePosition = this.constructor._getWorldPosition(this._lookTracker);\n\n var targetPosition = this.constructor._getWorldPosition(this._target);\n\n var lookVector = [targetPosition[0] - sourcePosition[0], targetPosition[1] - sourcePosition[1], targetPosition[2] - sourcePosition[2]];\n return core_MathUtils.getVectorMagnitude(lookVector);\n }\n /**\n * Reset all stored tracking angles to 0.\n *\n * @private\n */\n\n }, {\n key: "_resetLookAngles",\n value: function _resetLookAngles() {\n this._trackingConfigs.forEach(function (_ref8) {\n var angles = _ref8.angles;\n angles.h = 0;\n angles.v = 0;\n });\n }\n /**\n * Store the difference in horizontal and vertical rotation for the tracker\'s\n * reference rotation and the direction of the target from the tracker.\n *\n * @private\n */\n\n }, {\n key: "_setLookAngles",\n value: function _setLookAngles() {\n var _this2 = this;\n\n // Get the current positions of the tracker and target objects\n var targetPos = this.constructor._getWorldPosition(this._target);\n\n var trackerPos = this.constructor._getWorldPosition(this._lookTracker); // Check if the target has moved\n\n\n this._isTargetMoving = core_MathUtils.getVectorMagnitude([targetPos[0] - this._prevTargetPos[0], targetPos[1] - this._prevTargetPos[1], targetPos[2] - this._prevTargetPos[2]]) > 0;\n Object.assign(this._prevTargetPos, targetPos); // Calculate the horizontal and vertical angles to rotate to the target\n\n var targetSpherical = core_MathUtils.cartesianToSpherical(targetPos[0] - trackerPos[0], targetPos[1] - trackerPos[1], targetPos[2] - trackerPos[2]);\n\n var targetAngles = this.constructor._sphericalToBlendValue(targetSpherical[1], targetSpherical[2]); // Calculate angles relative to the reference objects\n\n\n this._trackingConfigs.forEach(function (_ref9) {\n var reference = _ref9.reference,\n forwardAxis = _ref9.forwardAxis,\n angles = _ref9.angles;\n\n // Calculate the horizontal and vertical angles to rotate to the direction of the tracker\n var refDirection = _this2.constructor._getObjectDirection(reference, forwardAxis);\n\n var refSpherical = core_MathUtils.cartesianToSpherical.apply(core_MathUtils, PointOfInterestFeature_toConsumableArray(refDirection));\n\n var refAngles = _this2.constructor._sphericalToBlendValue(refSpherical[1], refSpherical[2]); // Store the difference\n\n\n angles.h = targetAngles.h - refAngles.h;\n angles.v = targetAngles.v - refAngles.v;\n });\n }\n /**\n * Return the horizontal and vertical angles it would require to simulate looking\n * at the given type of face target\n *\n * @private\n *\n * @param {number} targetType - Integer representing the FaceTargetType.\n *\n * @returns {Object}- An object with signature {r: number, h: number, v: number}\n * where \'r\' represents radius, h represents the horizontal/azimuthal angle and\n * v represents the vertical/polar angle.\n */\n\n }, {\n key: "_getFaceTargetAngles",\n value: function _getFaceTargetAngles(targetType) {\n // No offset when the target is the center of the eyes\n if (targetType === 0) {\n return {\n h: 0,\n v: 0\n };\n } // Build a vector to the face target type using the current distance to the target\n\n\n var distance = this._getTargetDistance(this._lookTracker);\n\n var faceVector = PointOfInterestFeature_toConsumableArray(FaceVectors[targetType]);\n\n faceVector[2] = distance;\n var spherical = core_MathUtils.cartesianToSpherical.apply(core_MathUtils, PointOfInterestFeature_toConsumableArray(faceVector)); // Make sure values are clamped within the range of motion of the human eye, in case the target is very close\n\n var blendValues = this.constructor._sphericalToBlendValue(spherical[1], spherical[2]);\n\n blendValues.h = core_MathUtils.clamp(blendValues.h, -35, 35);\n blendValues.v = core_MathUtils.clamp(blendValues.v, -25, 30);\n return blendValues;\n }\n /**\n * Updated the stored speed and duration variables for a layer based on the\n * change in horizontal and vertical angles of the tracker.\n *\n * @private\n *\n * @param {string} layerName - Name of the layer to store values on.\n * @param {number} h - Change in horizontal angle, in degrees.\n * @param {number} v - Change in vertical angle, in degrees.\n */\n\n }, {\n key: "_updateLayerSpeed",\n value: function _updateLayerSpeed(layerName, h, v) {\n var layer = this._managedLayers[layerName]; // From "Realistic Avatar and head Animation Using a Neurobiological Model of Visual Attention", Itti, Dhavale, Pighin\n\n layer.maxHSpeed = 473 * (1 - Math.exp(-h / 7.8));\n layer.maxVSpeed = 473 * (1 - Math.exp(-v / 7.8)); // From "Eyes Alive", Lee, Badler\n\n var D0 = 0.025;\n var d = 0.00235;\n layer.hDuration = D0 + d * h;\n layer.vDuration = D0 + d * v;\n }\n /**\n * Set the microSaccade object with new randomized values.\n *\n * @private\n *\n * @param {string} layerName - Name of the layer that owns the saccade motion.\n */\n\n }, {\n key: "_setMicroSaccade",\n value: function _setMicroSaccade(layerName) {\n var layer = this._managedLayers[layerName];\n var microSaccade = layer.microSaccade;\n\n if (this._target) {\n // Micro movements should be smaller when focused on a target\n microSaccade.h = core_Utils.getRandomFloat(.01, .15);\n microSaccade.v = core_Utils.getRandomFloat(.01, .15);\n } else {\n // Microsaccades. Encyclopedia of Neuroscience. (2009) Springer, Berlin, Heidelberg. https://doi.org/10.1007/978-3-540-29678-2_3492\n microSaccade.h = core_Utils.getRandomFloat(.01, .3);\n microSaccade.v = core_Utils.getRandomFloat(.01, .3);\n }\n\n this._updateLayerSpeed(layerName, microSaccade.h, microSaccade.v); // Restart the timer\n\n\n this._initializeMicroTimer.apply(this, [layerName].concat(PointOfInterestFeature_toConsumableArray(MicroSaccadeWaitRanges["default"])));\n }\n /**\n * Set the macroSaccade object with new randomized values.\n *\n * @private\n *\n * @param {string} layerName - Name of the layer that owns the saccade motion.\n */\n\n }, {\n key: "_setMacroSaccade",\n value: function _setMacroSaccade(layerName) {\n var layer = this._managedLayers[layerName];\n var macroSaccade = layer.macroSaccade;\n var macroSaccadeWaitRange; // Increase random value range when not focused on a target\n\n if (!this._target) {\n macroSaccadeWaitRange = MacroSaccadeWaitRanges["default"]; // Normal human horizontal eye rotation limit is about 35 degrees\n\n var hLimit = core_Utils.getRandomFloat(.143, .286);\n var hFactor = core_Utils.getRandomFloat(-hLimit, hLimit);\n macroSaccade.h = hFactor * 35; // Normal human vertical eye rotation limit is about 25 degrees upward and 30 degrees downward\n\n var vLimit = core_Utils.getRandomFloat(.093, .186);\n var vFactor = core_Utils.getRandomFloat(-vLimit, vLimit);\n macroSaccade.v = vFactor > 0 ? vFactor * 25 : vFactor * 30;\n } // Pick a new face target\n else {\n // Social triangle - saccade between eyes and mouth, weighted to look at eyes more often\n switch (layer.saccadeTarget) {\n case 1:\n macroSaccadeWaitRange = MacroSaccadeWaitRanges.eyeTarget;\n layer.saccadeTarget = Math.random() < 0.75 ? FaceTargetTypes.EyeRight : FaceTargetTypes.Mouth;\n break;\n\n case 2:\n macroSaccadeWaitRange = MacroSaccadeWaitRanges.eyeTarget;\n layer.saccadeTarget = Math.random() < 0.75 ? FaceTargetTypes.EyeLeft : FaceTargetTypes.Mouth;\n break;\n\n case 3:\n macroSaccadeWaitRange = MacroSaccadeWaitRanges.mouthTarget;\n layer.saccadeTarget = Math.random() < 0.5 ? FaceTargetTypes.EyeLeft : FaceTargetTypes.EyeRight;\n break;\n\n case 0:\n default:\n macroSaccadeWaitRange = MacroSaccadeWaitRanges.eyeTarget;\n layer.saccadeTarget = Math.random() < 0.5 ? FaceTargetTypes.EyeLeft : FaceTargetTypes.EyeRight;\n break;\n }\n\n var _this$_getFaceTargetA = this._getFaceTargetAngles(layer.saccadeTarget),\n h = _this$_getFaceTargetA.h,\n v = _this$_getFaceTargetA.v;\n\n macroSaccade.h = h;\n macroSaccade.v = v;\n }\n\n this._updateLayerSpeed(layerName, macroSaccade.h, macroSaccade.v); // Restart the timers\n\n\n this._initializeMicroTimer.apply(this, [layerName].concat(PointOfInterestFeature_toConsumableArray(MicroSaccadeWaitRanges.postMacro)));\n\n this._initializeMacroTimer.apply(this, [layerName].concat(PointOfInterestFeature_toConsumableArray(macroSaccadeWaitRange)));\n }\n /**\n * Start a new wait timer that will set a new micro saccade movement when it\n * resolves.\n *\n * @private\n *\n * @param {string} layerName - Name of the layer that owns the saccade motion.\n * @param {number} minWaitTime - Minimum number of seconds before a new saccade\n * will be triggered.\n * @param {number} maxWaitTime - Maximum number of seconds before a new saccade\n * will be triggered.\n */\n\n }, {\n key: "_initializeMicroTimer",\n value: function _initializeMicroTimer(layerName, minWaitTime, maxWaitTime) {\n var _this3 = this;\n\n var layer = this._managedLayers[layerName];\n var waitTime = core_Utils.getRandomFloat(minWaitTime, maxWaitTime);\n\n if (layer.microSaccadeTimer) {\n layer.microSaccadeTimer.cancel();\n }\n\n layer.microSaccadeTimer = core_Utils.wait(waitTime, {\n onFinish: function onFinish() {\n _this3._setMicroSaccade(layerName);\n }\n });\n }\n /**\n * Start a new wait timer that will set a new macro saccade movement when it\n * resolves.\n *\n * @private\n *\n * @param {string} layerName - Name of the layer that owns the saccade motion.\n * @param {number} minWaitTime - Minimum number of seconds before a new saccade\n * will be triggered.\n * @param {number} maxWaitTime - Maximum number of seconds before a new saccade\n * will be triggered.\n */\n\n }, {\n key: "_initializeMacroTimer",\n value: function _initializeMacroTimer(layerName, minWaitTime, maxWaitTime) {\n var _this4 = this;\n\n var layer = this._managedLayers[layerName];\n var waitTime = core_Utils.getRandomFloat(minWaitTime, maxWaitTime);\n\n if (layer.macroSaccadeTimer) {\n layer.macroSaccadeTimer.cancel();\n }\n\n layer.macroSaccadeTimer = core_Utils.wait(waitTime, {\n onFinish: function onFinish() {\n _this4._setMacroSaccade(layerName);\n }\n });\n }\n /**\n * Sets a new target to look at.\n *\n * @param {Object|null} target - The new target to look at.\n */\n\n }, {\n key: "setTarget",\n value: function setTarget(target) {\n this.target = target;\n }\n /**\n * Finds an object given its name and sets it as the new target to look at.\n * Should be overloaded for each rendering engine implementation.\n *\n * @param {string} target - Name to search for.\n */\n\n }, {\n key: "setTargetByName",\n value: function setTargetByName(name) {\n if (!name) {\n this._target = null;\n }\n\n if (!this._scene) {\n throw new Error("Cannot set PointOfInterestFeature target using name ".concat(name, " on host ").concat(this._host.id, ". Scene must be defined."));\n }\n }\n /**\n * Finds an object given its id and sets it as the new target to look at.\n * Should be overloaded for each rendering engine implementation.\n *\n * @param {string|number} target - Id to search for.\n */\n\n }, {\n key: "setTargetById",\n value: function setTargetById(id) {\n if (!id) {\n this._target = null;\n }\n\n if (!this._scene) {\n throw new Error("Cannot set PointOfInterestFeature target using id ".concat(id, " on host ").concat(this._host.id, ". Scene must be defined."));\n }\n }\n /**\n * Start keeping track of an animation layer that owns a blend2d animation with\n * blendWeights corresponding to horizontal and vertical look angles.\n *\n * @param {string} layerName - Name of the layer to keep track of.\n * @param {Object=} options - Options for the layer.\n * @param {string} [options.animation = \'look\'] - Name of the animation on the\n * layer whose blendWeights will be driven based on the angle between the lookTracker\n * and the lookTarget. This animation must be of type blend2d.\n * @param {number} [options.maxSpeed = 25] - The maximum speed at which the blend2d\n * blendWeights can be manipulated.\n * @param {string} [options.forwardAxis = \'PositiveZ\'] - Axis pointing from the\n * front of the lookReference object. Valid options are \'PositiveX\', \'NegativeX\',\n * \'PositiveY\', \'NegativeY\', \'PositiveZ\', \'NegativeZ\'.\n * @param {Object=} options.lookReference - 3D transformation node that the lookTracker\n * rotation limits should be calculated relative to. Defaults to the host owner.\n * @param {number} [options.hasSaccade = false] - Whether or not to include\n * saccadic motion onto the blendWeight animation. This should only be set to\n * true for blend2d animations representing eye animation.\n * @param {number=} [options.blendTime=[PointOfInterestFeature.DEFAULT_LAYER_OPTIONS.blendTime]{@link PointOfInterestFeature#DEFAULT_LAYER_OPTIONS#blendTime}] -\n * Default amount of time to use when manipulating layer weight.\n * @param {Function=} options.easingFn - Default easing function to use when\n * manipulating layer weight.\n */\n\n }, {\n key: "registerLookLayer",\n value: function registerLookLayer(layerName) {\n var _ref10 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n _ref10$animation = _ref10.animation,\n animation = _ref10$animation === void 0 ? \'look\' : _ref10$animation,\n _ref10$maxSpeed = _ref10.maxSpeed,\n maxSpeed = _ref10$maxSpeed === void 0 ? 25 : _ref10$maxSpeed,\n reference = _ref10.reference,\n _ref10$forwardAxis = _ref10.forwardAxis,\n forwardAxis = _ref10$forwardAxis === void 0 ? \'PositiveZ\' : _ref10$forwardAxis,\n _ref10$hasSaccade = _ref10.hasSaccade,\n hasSaccade = _ref10$hasSaccade === void 0 ? false : _ref10$hasSaccade,\n _ref10$blendTime = _ref10.blendTime,\n blendTime = _ref10$blendTime === void 0 ? PointOfInterestFeature.DEFAULT_LAYER_OPTIONS.blendTime : _ref10$blendTime,\n easingFn = _ref10.easingFn;\n\n // Validate reference object\n reference = reference || this._host.owner;\n\n if (!this.constructor._validateTransformObject(reference)) {\n throw new Error("Cannot initialize register look layer ".concat(layerName, " for PointOfInterestFeature on host ").concat(this._host.id, ". Reference must be defined as a valid transformation object."));\n } // Find vector associated with axis string\n\n\n forwardAxis = AxisMap[forwardAxis] !== undefined ? AxisMap[forwardAxis] : AxisMap.PositiveZ; // Store tracking configuration\n\n var trackingConfig = this._addTrackingConfig({\n reference: reference,\n forwardAxis: forwardAxis\n }); // Register the layer and animation\n\n\n this.registerLayer(layerName, {\n trackingConfig: trackingConfig,\n maxSpeed: maxSpeed,\n maxHSpeed: undefined,\n maxVSpeed: undefined,\n hDuration: undefined,\n vDuration: undefined,\n hVelocity: [0, 0],\n vVelocity: [0, 0],\n hasSaccade: hasSaccade,\n blendTime: blendTime,\n easingFn: easingFn,\n microSaccade: {\n h: 0,\n v: 0\n },\n macroSaccade: {\n h: 0,\n v: 0\n },\n saccadeTarget: FaceTargetTypes.EyeCenter,\n animations: PointOfInterestFeature_defineProperty({}, animation, {})\n });\n this._lookLayers[layerName] = animation; // Validate the look animation\n\n this._registerLookAnimation(layerName, animation); // Initialize saccade timers\n\n\n if (hasSaccade) {\n var macroSaccadeWaitRange = this._target ? MacroSaccadeWaitRanges.eyeTarget : MacroSaccadeWaitRanges["default"];\n\n this._initializeMicroTimer.apply(this, [layerName].concat(PointOfInterestFeature_toConsumableArray(MicroSaccadeWaitRanges["default"])));\n\n this._initializeMacroTimer.apply(this, [layerName].concat(PointOfInterestFeature_toConsumableArray(macroSaccadeWaitRange)));\n }\n }\n /**\n * Start keeping track of an animation layer that owns a blink animation. Blink\n * animations can be of any type, but if it is of type randomAnimation then a\n * it will be randomized each time a blink is called.\n *\n * @param {string} layerName - Name of the layer to keep track of.\n * @param {Object=} options - Options for the layer.\n * @param {string} [options.animation = \'blink\'] - Name of the blink animation\n * on the layer.\n * @param {number} [options.blendTime=[PointOfInterestFeature.DEFAULT_LAYER_OPTIONS.blendTime]{@link PointOfInterestFeature#DEFAULT_LAYER_OPTIONS#blendTime}] -\n * Default amount of time to use when manipulating the layer\'s weight.\n * @param {Function=} options.easingFn - Default easing function to use when\n * manipulating the layer\'s weight.\n */\n\n }, {\n key: "registerBlinkLayer",\n value: function registerBlinkLayer(layerName) {\n var _ref11 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n _ref11$animation = _ref11.animation,\n animation = _ref11$animation === void 0 ? \'blink\' : _ref11$animation,\n _ref11$blendTime = _ref11.blendTime,\n blendTime = _ref11$blendTime === void 0 ? PointOfInterestFeature.DEFAULT_LAYER_OPTIONS.blendTime : _ref11$blendTime,\n easingFn = _ref11.easingFn;\n\n // Register the layer and animation\n this.registerLayer(layerName, {\n blendTime: blendTime,\n easingFn: easingFn,\n animations: PointOfInterestFeature_defineProperty({}, animation, {})\n });\n this._blinkLayers[layerName] = animation;\n }\n }, {\n key: "update",\n value: function update(deltaTime) {\n var _this5 = this;\n\n PointOfInterestFeature_get(PointOfInterestFeature_getPrototypeOf(PointOfInterestFeature.prototype), "update", this).call(this, deltaTime); // Update the look angles\n\n\n if (this._target) {\n this._setLookAngles();\n } else {\n this._resetLookAngles();\n }\n\n var deltaSeconds = Math.min(deltaTime, MaxDelta) / 1000;\n var triggerBlink = false; // Set look blend values\n\n Object.entries(this._lookLayers).forEach(function (_ref12) {\n var _ref13 = PointOfInterestFeature_slicedToArray(_ref12, 2),\n layerName = _ref13[0],\n animName = _ref13[1];\n\n var options = _this5._managedLayers[layerName]; // Increment the saccade timers\n\n if (options.isActive && options.hasSaccade) {\n options.microSaccadeTimer.execute(deltaTime);\n options.macroSaccadeTimer.execute(deltaTime);\n } // Set the blend values\n\n\n if (options.animations[animName].isActive) {\n var currentH = _this5._host.AnimationFeature.getAnimationBlendWeight(layerName, animName, \'X\');\n\n var currentV = _this5._host.AnimationFeature.getAnimationBlendWeight(layerName, animName, \'Y\');\n\n var targetH = options.trackingConfig.angles.h;\n var targetV = options.trackingConfig.angles.v; // Check if the look angle has changed enough to trigger a blink\n\n if (_this5._isTargetMoving && !triggerBlink) {\n var prevTargetH = options.trackingConfig.prevAngles.h;\n var prevTargetV = options.trackingConfig.prevAngles.v;\n var changeAmount = core_MathUtils.toDegrees(core_MathUtils.getAngleBetween([prevTargetH, prevTargetV], [targetH, targetV]));\n\n if (changeAmount >= BlinkThreshold) {\n triggerBlink = true;\n }\n }\n\n options.trackingConfig.prevAngles.h = targetH;\n options.trackingConfig.prevAngles.v = targetV; // Add in the saccade movement\n\n if (options.hasSaccade) {\n core_MathUtils.dampValue(0, options.macroSaccade.h + options.macroSaccade.h, options.hVelocity, options.hDuration, options.maxHSpeed);\n targetH += options.hVelocity[0];\n core_MathUtils.dampValue(0, options.macroSaccade.v + options.macroSaccade.v, options.vVelocity, options.vDuration, options.maxVSpeed);\n targetV += options.vVelocity[0];\n } // Clamp to max speed\n\n\n var factor = core_MathUtils.clamp(deltaSeconds * options.maxSpeed, 0, 1);\n targetH = core_MathUtils.lerp(currentH, targetH, factor);\n targetV = core_MathUtils.lerp(currentV, targetV, factor); // Update the blend values\n\n _this5._host.AnimationFeature.setAnimationBlendWeight(layerName, animName, \'X\', targetH);\n\n _this5._host.AnimationFeature.setAnimationBlendWeight(layerName, animName, \'Y\', targetV);\n }\n });\n\n if (!triggerBlink || !this._isTargetMoving) {\n return;\n } // Execute blink\n\n\n Object.entries(this._blinkLayers).forEach(function (_ref14) {\n var _ref15 = PointOfInterestFeature_slicedToArray(_ref14, 2),\n layerName = _ref15[0],\n animName = _ref15[1];\n\n var animation = _this5._managedLayers[layerName].animations[animName];\n\n if (animation.isActive) {\n _this5._host.AnimationFeature.playAnimation(layerName, animName);\n }\n });\n }\n }, {\n key: "installApi",\n value: function installApi() {\n var _this6 = this;\n\n /**\n * @inner\n * @namespace PointOfInterestFeature\n */\n var api = PointOfInterestFeature_get(PointOfInterestFeature_getPrototypeOf(PointOfInterestFeature.prototype), "installApi", this).call(this);\n\n Object.defineProperties(api, {\n /**\n * @memberof PointOfInterestFeature\n * @instance\n * @see core/PointOfInterestFeature#target\n */\n target: {\n get: function get() {\n return _this6.target;\n },\n set: function set(target) {\n _this6.target = target;\n }\n }\n });\n Object.assign(api, {\n /**\n * @memberof PointOfInterestFeature\n * @instance\n * @method\n * @see core/PointOfInterestFeature#registerLookLayer\n */\n registerLookLayer: this.registerLookLayer.bind(this),\n\n /**\n * @memberof PointOfInterestFeature\n * @instance\n * @method\n * @see core/PointOfInterestFeature#registerBlinkLayer\n */\n registerBlinkLayer: this.registerBlinkLayer.bind(this),\n\n /**\n * @memberof PointOfInterestFeature\n * @instance\n * @method\n * @see core/PointOfInterestFeature#setTarget\n */\n setTarget: this.setTarget.bind(this),\n\n /**\n * @memberof PointOfInterestFeature\n * @instance\n * @method\n * @see core/PointOfInterestFeature#setTargetByName\n */\n setTargetByName: this.setTargetByName.bind(this),\n\n /**\n * @memberof PointOfInterestFeature\n * @instance\n * @method\n * @see core/PointOfInterestFeature#setTargetById\n */\n setTargetById: this.setTargetById.bind(this)\n });\n return api;\n }\n }], [{\n key: "_getWorldPosition",\n value: function _getWorldPosition(obj) {\n return [0, 0, 0];\n }\n /**\n * Return a matrix representing the global transformation matrix of an object.\n * Should be overloaded for each rendering engine implementation.\n *\n * @private\n *\n * @param {any} obj - Engine-specific 3D transform object.\n *\n * @returns {Array.} - An array consisting of 16 numbers representing\n * the 3d transformation.\n */\n\n }, {\n key: "_getWorldMatrix",\n value: function _getWorldMatrix(obj) {\n return [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1];\n }\n /**\n * Rotate the given local direction vector by the object\'s world rotation matrix.\n *\n * @private\n *\n * @param {any} obj - Engine-specific 3D transform object.\n * @param {Array.} forwardVector - Unit vector representing the local\n * forward direction of the object.\n *\n * @returns {Array.}\n */\n\n }, {\n key: "_getObjectDirection",\n value: function _getObjectDirection(obj) {\n var forwardVector = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : AxisMap.PositiveZ;\n var rotation = core_MathUtils.getRotationMatrix(this._getWorldMatrix(obj));\n return core_MathUtils.rotateVector(forwardVector, rotation);\n }\n /**\n * Calculate horizontal and vertical look angles in degrees given spherical theta\n * and phi angles in radians.\n *\n * @param {number} theta - Vertical/polar angle in radians where 0 points directly\n * along positive Y axis.\n * @param {number} phi - Horizontal/azimuthal angle in radians.\n *\n * @returns {Object} - An object with the signature {h: number, v: number} where\n * h represents horizontal rotation in degrees and v represents vertical rotation\n * in degrees.\n */\n\n }, {\n key: "_sphericalToBlendValue",\n value: function _sphericalToBlendValue(theta, phi) {\n var h = core_MathUtils.toDegrees(phi); // Offset the vertical angle so 0 is pointing forward instead of up\n\n var v = core_MathUtils.toDegrees(theta) - 90; // Convert vertical angle to -180, 180 range\n\n return {\n h: h,\n v: v\n };\n }\n }, {\n key: "_validateTransformObject",\n value: function _validateTransformObject(obj) {\n return obj instanceof Object;\n }\n }]);\n\n return PointOfInterestFeature;\n}(core_AbstractHostFeature.mix(awspack_SSMLSpeechmarkInterface.Mixin, animpack_ManagedAnimationLayerInterface.Mixin));\n\n/* harmony default export */ var core_PointOfInterestFeature = (PointOfInterestFeature_PointOfInterestFeature);\n\n// CONCATENATED MODULE: ./src/core/awspack/AbstractSpeech.js\nfunction AbstractSpeech_toConsumableArray(arr) { return AbstractSpeech_arrayWithoutHoles(arr) || AbstractSpeech_iterableToArray(arr) || AbstractSpeech_unsupportedIterableToArray(arr) || AbstractSpeech_nonIterableSpread(); }\n\nfunction AbstractSpeech_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."); }\n\nfunction AbstractSpeech_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return AbstractSpeech_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return AbstractSpeech_arrayLikeToArray(o, minLen); }\n\nfunction AbstractSpeech_iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction AbstractSpeech_arrayWithoutHoles(arr) { if (Array.isArray(arr)) return AbstractSpeech_arrayLikeToArray(arr); }\n\nfunction AbstractSpeech_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction AbstractSpeech_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction AbstractSpeech_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction AbstractSpeech_createClass(Constructor, protoProps, staticProps) { if (protoProps) AbstractSpeech_defineProperties(Constructor.prototype, protoProps); if (staticProps) AbstractSpeech_defineProperties(Constructor, staticProps); return Constructor; }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/**\r\n * Class that can play back audio generated by AWS Polly and synchronized emit\r\n * speechmark messages.\r\n *\r\n * @abstract\r\n */\n\nvar AbstractSpeech_AbstractSpeech = /*#__PURE__*/function () {\n /**\r\n * @constructor\r\n *\r\n * @param {core/TextToSpeechFeature} speaker - The feature that owns the Speech and\r\n * will emit speechmark messages.\r\n * @param {string} text - The text of the speech.\r\n * @param {Array.} [speechmarks=[]] - An array of speechmark objects representing\r\n * the text and timing of the speech.\r\n */\n function AbstractSpeech(speaker, text) {\n var speechmarks = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];\n\n AbstractSpeech_classCallCheck(this, AbstractSpeech);\n\n this._speaker = speaker;\n this._text = text;\n this._speechmarks = speechmarks;\n this._speechmarkOffset = 0;\n\n this._reset();\n }\n /**\r\n * Reset tracking properties.\r\n *\r\n * @private\r\n *\r\n * @param {number} [currentTime=0] - Time to use for _startTime.\r\n */\n\n\n AbstractSpeech_createClass(AbstractSpeech, [{\n key: "_reset",\n value: function _reset() {\n var currentTime = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n this._startTime = currentTime;\n this._localTime = 0;\n this._pauseTime = 0;\n this._playing = false;\n this._markIter = this._speechmarks.values();\n\n var _this$_markIter$next = this._markIter.next(),\n value = _this$_markIter$next.value,\n done = _this$_markIter$next.done;\n\n this._currentMark = value;\n this._endTime = this._speechmarks.length ? this._speechmarks[this._speechmarks.length - 1].time : 0;\n this._done = done;\n this._promise = null;\n }\n /**\r\n * Create a new promise that will stop playback and emit messages for this speech.\r\n *\r\n * @param {Function=} onFinish - Funciton to execute once the speech stops.\r\n * @param {onError=} onError - Function to execute if the speech encounters an\r\n * error.\r\n * @param {Function=} onInterrupt - Function to execute if the speech is canceled.\r\n *\r\n * @returns {Deferred}\r\n *\r\n * @private\r\n */\n\n }, {\n key: "_createPromise",\n value: function _createPromise(onFinish, onError, onInterrupt) {\n var _this = this;\n\n var onResolve = function onResolve(value) {\n _this._playing = false;\n\n _this._speaker.emit(_this._speaker.constructor.EVENTS.stop, _this);\n\n _this._speaker.constructor.emit(_this._speaker.constructor.EVENTS.stop, _this);\n\n if (typeof onFinish === \'function\') {\n onFinish(value);\n }\n };\n\n var onReject = function onReject(e) {\n _this._playing = false;\n\n _this._speaker.emit(_this._speaker.constructor.EVENTS.stop, _this);\n\n _this._speaker.constructor.emit(_this._speaker.constructor.EVENTS.stop, _this);\n\n console.error("".concat(_this.constructor.name, " encountered an unexpected error: ").concat(e));\n\n if (typeof onError === \'function\') {\n onError(e);\n }\n };\n\n var onCancel = function onCancel(value) {\n _this._playing = false;\n\n _this._speaker.emit(_this._speaker.constructor.EVENTS.interrupt, _this);\n\n _this._speaker.constructor.emit(_this._speaker.constructor.EVENTS.interrupt, _this);\n\n if (typeof onInterrupt === \'function\') {\n onInterrupt(value);\n }\n };\n\n this._promise = new core_Deferred(undefined, onResolve, onReject, onCancel);\n return this._promise;\n }\n /**\r\n * Return whether or not the speech has reached it\'s end.\r\n *\r\n * @private\r\n *\r\n * @returns {boolean}\r\n */\n\n }, {\n key: "_checkFinished",\n value: function _checkFinished() {\n return this._done && this._localTime >= this._endTime;\n }\n /**\r\n * Gets the playback state of the audio.\r\n *\r\n * @readonly\r\n * @type {boolean}\r\n */\n\n }, {\n key: "playing",\n get: function get() {\n return this._playing;\n }\n /**\r\n * Gets the text of the speech.\r\n *\r\n * @readonly\r\n * @type {string}\r\n */\n\n }, {\n key: "text",\n get: function get() {\n return this._text;\n }\n /**\r\n * Gets a shallow copy of the speechmarks array for the speech.\r\n *\r\n * @readonly\r\n * @type {Array.}\r\n */\n\n }, {\n key: "speechmarks",\n get: function get() {\n return AbstractSpeech_toConsumableArray(this._speechmarks);\n }\n /**\r\n * Gets and sets the number of seconds to offset speechmark emission.\r\n * @type {number}\r\n */\n\n }, {\n key: "speechmarkOffset",\n get: function get() {\n return this._speechmarkOffset / 1000;\n },\n set: function set(offset) {\n this._speechmarkOffset = offset * 1000; // Store as milliseconds\n }\n /**\r\n * Emit speechmark messages as they are encountered in sync with audio.\r\n *\r\n * @param {number} currentTime - Current global time when update was called.\r\n */\n\n }, {\n key: "update",\n value: function update(currentTime) {\n if (!this._playing) {\n return;\n } // Update local audio time\n\n\n this._localTime = currentTime - this._startTime;\n\n if (!this._done) {\n // Emit speechmark messages for marks up to the current time\n while (!this._done && this._currentMark.time + this._speechmarkOffset <= this._localTime) {\n this._speaker.emit(this._speaker.constructor.EVENTS[this._currentMark.type], {\n speech: this,\n mark: this._currentMark\n });\n\n var _this$_markIter$next2 = this._markIter.next(),\n value = _this$_markIter$next2.value,\n done = _this$_markIter$next2.done;\n\n this._currentMark = value;\n this._done = done;\n }\n } // End playback\n\n\n if (this._checkFinished()) {\n this.stop();\n\n this._reset();\n }\n }\n /**\r\n * Play the speech from the beginning.\r\n *\r\n * @param {number} currentTime - Current global time when play was called.\r\n * @param {Function=} onFinish - Optional function to execute once the speech\r\n * promise resolves.\r\n * @param {Function=} onError - Optional function to execute if the speech\r\n * encounters and error during playback.\r\n * @param {Function=} onInterrupt - Optional function to execute if the speech\r\n * is canceled.\r\n *\r\n * @returns {Deferred} Resolves once the speech reaches the end of playback.\r\n */\n\n }, {\n key: "play",\n value: function play(currentTime, onFinish, onError, onInterrupt) {\n this._reset(currentTime);\n\n this._playing = true;\n\n this._speaker.emit(this._speaker.constructor.EVENTS.play, this);\n\n this._speaker.constructor.emit(this._speaker.constructor.EVENTS.play, this);\n\n return this._createPromise(onFinish, onError, onInterrupt);\n }\n /**\r\n * Pause the speech at the current time.\r\n *\r\n * @param {number} currentTime - Current global time when pause was called.\r\n */\n\n }, {\n key: "pause",\n value: function pause(currentTime) {\n this._playing = false;\n this._pauseTime = currentTime;\n\n this._speaker.emit(this._speaker.constructor.EVENTS.pause, this);\n\n this._speaker.constructor.emit(this._speaker.constructor.EVENTS.pause, this);\n }\n /**\r\n * Resume the speech at the current time.\r\n *\r\n * @param {number} currentTime - Current global time when resume was called.\r\n * @param {Function=} onFinish - Optional function to execute once the speech\r\n * promise resolves.\r\n * @param {Function=} onError - Optional function to execute if the speech\r\n * encounters and error during playback.\r\n * @param {Function=} onInterrupt - Optional function to execute if the speech\r\n * is canceled.\r\n *\r\n * @returns {Deferred} Resolves once the speech reaches the end of playback.\r\n */\n\n }, {\n key: "resume",\n value: function resume(currentTime, onFinish, onError, onInterrupt) {\n // Play from the beginning if the speech hasn\'t played yet\n if (!this._promise) {\n this._reset(currentTime);\n\n this._createPromise(onFinish, onError, onInterrupt);\n }\n\n this._playing = true;\n this._startTime += currentTime - this._pauseTime;\n\n this._speaker.emit(this._speaker.constructor.EVENTS.resume, this);\n\n this._speaker.constructor.emit(this._speaker.constructor.EVENTS.resume, this);\n\n return this._promise;\n }\n /**\r\n * Cancels playback of the speech at the current time. Cancel the speech promise.\r\n */\n\n }, {\n key: "cancel",\n value: function cancel() {\n if (this._promise) {\n this._promise.cancel();\n\n this._promise = null;\n }\n\n this._playing = false;\n }\n /**\r\n * Stop the speech and reset time to the beginning. Resolve the speech promise.\r\n */\n\n }, {\n key: "stop",\n value: function stop() {\n if (this._promise) {\n this._promise.resolve();\n\n this._promise = null;\n }\n\n this._playing = false;\n }\n }]);\n\n return AbstractSpeech;\n}();\n\n/* harmony default export */ var awspack_AbstractSpeech = (AbstractSpeech_AbstractSpeech);\n// CONCATENATED MODULE: ./src/core/awspack/Speech.js\nfunction Speech_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { Speech_typeof = function _typeof(obj) { return typeof obj; }; } else { Speech_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return Speech_typeof(obj); }\n\nfunction Speech_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction Speech_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction Speech_createClass(Constructor, protoProps, staticProps) { if (protoProps) Speech_defineProperties(Constructor.prototype, protoProps); if (staticProps) Speech_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction Speech_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { Speech_get = Reflect.get; } else { Speech_get = function _get(target, property, receiver) { var base = Speech_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return Speech_get(target, property, receiver || target); }\n\nfunction Speech_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = Speech_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction Speech_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) Speech_setPrototypeOf(subClass, superClass); }\n\nfunction Speech_setPrototypeOf(o, p) { Speech_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return Speech_setPrototypeOf(o, p); }\n\nfunction Speech_createSuper(Derived) { var hasNativeReflectConstruct = Speech_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = Speech_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = Speech_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return Speech_possibleConstructorReturn(this, result); }; }\n\nfunction Speech_possibleConstructorReturn(self, call) { if (call && (Speech_typeof(call) === "object" || typeof call === "function")) { return call; } return Speech_assertThisInitialized(self); }\n\nfunction Speech_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction Speech_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction Speech_getPrototypeOf(o) { Speech_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return Speech_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/**\r\n * The built-in class for asynchronous Promises.\r\n * @external Audio\r\n * @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLAudioElement/Audio\r\n */\n\n/**\r\n * @extends AbstractSpeech\r\n * @alias core/Speech\r\n */\n\nvar Speech = /*#__PURE__*/function (_AbstractSpeech) {\n Speech_inherits(Speech, _AbstractSpeech);\n\n var _super = Speech_createSuper(Speech);\n\n /**\r\n * @constructor\r\n *\r\n * @param {TextToSpeech} speaker - The owner of the Speech that will emit speechmark\r\n * messages.\r\n * @param {string} text - The text of the speech.\r\n * @param {Array.} [speechmarks=[]] - An array of speechmark objects representing\r\n * the text and timing of the speech.\r\n * @param {Object} audioConfig - Object containing audio and url.\r\n * @param {external:Audio} audioConfig.audio - Playable audio object.\r\n */\n function Speech(speaker, text) {\n var _this;\n\n var speechmarks = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];\n var audioConfig = arguments.length > 3 ? arguments[3] : undefined;\n\n Speech_classCallCheck(this, Speech);\n\n _this = _super.call(this, speaker, text, speechmarks);\n _this._audio = audioConfig.audio; // Keep track of whether the audio has finished playing through\n\n _this._audio.onended = function () {\n _this._audioFinished = true;\n };\n\n _this._audioFinished = true;\n return _this;\n }\n\n Speech_createClass(Speech, [{\n key: "_checkFinished",\n value: function _checkFinished() {\n return this._audioFinished && Speech_get(Speech_getPrototypeOf(Speech.prototype), "_checkFinished", this).call(this);\n }\n /**\r\n * Gets the playable audio for the speech.\r\n *\r\n * @readonly\r\n * @type {external:Audio}\r\n */\n\n }, {\n key: "audio",\n get: function get() {\n return this._audio;\n }\n /**\r\n * Gets the audio volume for the speech.\r\n *\r\n * @type {number}\r\n */\n\n }, {\n key: "volume",\n get: function get() {\n return this._audio.volume;\n }\n /**\r\n * Sets the audio volume for the speech.\r\n */\n ,\n set: function set(volume) {\n this._audio.volume = volume;\n }\n /**\r\n * Set the audio\'s current local time and play it.\r\n *\r\n * @private\r\n */\n\n }, {\n key: "_playAudio",\n value: function _playAudio() {\n var _this2 = this;\n\n if (this._speechmarkOffset < 0) {\n this._audio.currentTime = this._speechmarkOffset;\n setTimeout(function () {\n if (_this2._playing) {\n _this2._audio.currentTime = (_this2._localTime + _this2._speechmarkOffset) / 1000;\n\n _this2._audio.play();\n }\n }, -this._speechmarkOffset);\n } else {\n this._audio.currentTime = 0;\n\n this._audio.play();\n }\n }\n /**\r\n * Pause the audio once it is playable.\r\n *\r\n * @private\r\n */\n\n }, {\n key: "_pauseAudio",\n value: function _pauseAudio() {\n var _this3 = this;\n\n this._audio.play().then(function () {\n if (!_this3._playing) {\n _this3._audio.pause();\n }\n });\n }\n }, {\n key: "play",\n value: function play(currentTime, onFinish, onError, onInterrupt) {\n this._audioFinished = false;\n\n this._playAudio();\n\n return Speech_get(Speech_getPrototypeOf(Speech.prototype), "play", this).call(this, currentTime, onFinish, onError, onInterrupt);\n }\n }, {\n key: "pause",\n value: function pause(currentTime) {\n this._pauseAudio();\n\n Speech_get(Speech_getPrototypeOf(Speech.prototype), "pause", this).call(this, currentTime);\n }\n }, {\n key: "resume",\n value: function resume(currentTime, onFinish, onError, onInterrupt) {\n this._audioFinished = false;\n\n this._audio.play();\n\n return Speech_get(Speech_getPrototypeOf(Speech.prototype), "resume", this).call(this, currentTime, onFinish, onError, onInterrupt);\n }\n }, {\n key: "cancel",\n value: function cancel() {\n this._pauseAudio();\n\n Speech_get(Speech_getPrototypeOf(Speech.prototype), "cancel", this).call(this);\n }\n }, {\n key: "stop",\n value: function stop() {\n this._pauseAudio();\n\n this._audio.currentTime = 0;\n\n Speech_get(Speech_getPrototypeOf(Speech.prototype), "stop", this).call(this);\n }\n }]);\n\n return Speech;\n}(awspack_AbstractSpeech);\n\n/* harmony default export */ var awspack_Speech = (Speech);\n// CONCATENATED MODULE: ./src/core/awspack/TextToSpeechUtils.js\nfunction TextToSpeechUtils_toConsumableArray(arr) { return TextToSpeechUtils_arrayWithoutHoles(arr) || TextToSpeechUtils_iterableToArray(arr) || TextToSpeechUtils_unsupportedIterableToArray(arr) || TextToSpeechUtils_nonIterableSpread(); }\n\nfunction TextToSpeechUtils_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."); }\n\nfunction TextToSpeechUtils_iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction TextToSpeechUtils_arrayWithoutHoles(arr) { if (Array.isArray(arr)) return TextToSpeechUtils_arrayLikeToArray(arr); }\n\nfunction TextToSpeechUtils_slicedToArray(arr, i) { return TextToSpeechUtils_arrayWithHoles(arr) || TextToSpeechUtils_iterableToArrayLimit(arr, i) || TextToSpeechUtils_unsupportedIterableToArray(arr, i) || TextToSpeechUtils_nonIterableRest(); }\n\nfunction TextToSpeechUtils_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."); }\n\nfunction TextToSpeechUtils_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return TextToSpeechUtils_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return TextToSpeechUtils_arrayLikeToArray(o, minLen); }\n\nfunction TextToSpeechUtils_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction TextToSpeechUtils_iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction TextToSpeechUtils_arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction TextToSpeechUtils_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { TextToSpeechUtils_typeof = function _typeof(obj) { return typeof obj; }; } else { TextToSpeechUtils_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return TextToSpeechUtils_typeof(obj); }\n\nfunction TextToSpeechUtils_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction TextToSpeechUtils_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction TextToSpeechUtils_createClass(Constructor, protoProps, staticProps) { if (protoProps) TextToSpeechUtils_defineProperties(Constructor.prototype, protoProps); if (staticProps) TextToSpeechUtils_defineProperties(Constructor, staticProps); return Constructor; }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/**\n * A collection of useful text-to-speech functions.\n *\n * @hideconstructor\n */\n\nvar TextToSpeechUtils_TextToSpeechUtils = /*#__PURE__*/function () {\n function TextToSpeechUtils() {\n TextToSpeechUtils_classCallCheck(this, TextToSpeechUtils);\n }\n\n TextToSpeechUtils_createClass(TextToSpeechUtils, null, [{\n key: "autoGenerateSSMLMarks",\n value:\n /**\n * Returns a new string with SSML marks inserted based on\n * matches between the input string and the input map. The\n * word matches are case-insensitive. Words within existing\n * SSML tags will not be affected. Input text will be surrounded\n * by tags if needed.\n *\n * @param {string} text - Input string.\n * @param {object} map - Input object that maps mark keys\n * to arrays of words. Example:\n *\n * {\n * \'mark:sad\' : [\'sad\', \'blue\', \'down\'],\n * \'mark:happy\' : [\'joy\', \'glad\', \'great\'],\n * \'mark:no\' : [\'no\', \'nah\', \'nay\', \'sure\']\n * }\n * @param {Array.} [randomMarks = []] - If there are sentences that don\'t\n * match any words from the map object, marks from this array will be randomly\n * chosen and inserted.\n *\n * @returns {string} - Updated input string.\n */\n function autoGenerateSSMLMarks(text, map) {\n var _this = this;\n\n var randomMarks = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];\n\n if (TextToSpeechUtils_typeof(map) !== \'object\' || map === null) {\n throw new Error("Cannot generate SSML marks for text \\"".concat(text, "\\" because map is not an object."));\n } // process the input map into an internal format\n\n\n var internalMap = this._processInputMap(map);\n\n var speakTags = [\'\', \'\'];\n var ssmlMarkRegex = //;\n var ssmlTagRegex = /<[^>]*>/g; // Identify any existing SSML tags\n\n var existingTags = [];\n var result = ssmlTagRegex.exec(text);\n\n while (result !== null) {\n existingTags.push({\n start: result.index,\n end: result.index + result[0].length,\n text: result[0]\n });\n result = ssmlTagRegex.exec(text);\n }\n\n var chunks = [];\n var index = 0;\n var ssmlMarkResult;\n var duplicateMarkToCheck = [];\n existingTags.forEach(function (existingTag) {\n var substr = text.slice(index, existingTag.start);\n\n if (substr !== \'\') {\n // auto-mark non-tag text\n chunks.push(_this._insertMarks(substr, internalMap, duplicateMarkToCheck));\n duplicateMarkToCheck = [];\n }\n\n ssmlMarkResult = ssmlMarkRegex.exec(existingTag.text);\n\n if (ssmlMarkResult !== null) {\n var markText = ssmlMarkResult[1];\n duplicateMarkToCheck.push(markText);\n } else if (!speakTags.includes(existingTag.text)) {\n chunks.push(existingTag.text);\n } // advance the index\n\n\n index = existingTag.end;\n });\n chunks.push(this._insertMarks(text.slice(index), internalMap, duplicateMarkToCheck));\n var markedText = chunks.join(\'\');\n\n if (randomMarks && randomMarks.length > 0) {\n // add random marks to any unmarked sentences\n markedText = this.addMarksToUnmarkedSentences(markedText, randomMarks);\n }\n\n return TextToSpeechUtils.validateText(markedText);\n }\n /**\n * Returns a new string with a random SSML mark inserted at each sentence that\n * does not already contain an SSML mark.\n *\n * @param {string} text - Input string.\n * @param {Array.} marks - Any array of random SSML marks to choose from\n * when modifying the text.\n *\n * @returns {string}\n */\n\n }, {\n key: "addMarksToUnmarkedSentences",\n value: function addMarksToUnmarkedSentences(text, marks) {\n if (!marks || marks.length === 0) return text;\n var ssmlMarkRegex = //g;\n var ssmlTagRegex = /<[^>]*>/g; // Find the indices of any marks in the text\n\n var markIndices = [];\n var markResult = ssmlMarkRegex.exec(text);\n\n while (markResult !== null) {\n markIndices.push(markResult.index);\n markResult = ssmlMarkRegex.exec(text);\n } // Find all SSML tags in the text\n\n\n var existingTags = [];\n var ssmlResult = ssmlTagRegex.exec(text);\n\n while (ssmlResult !== null) {\n existingTags.push({\n start: ssmlResult.index,\n end: ssmlResult.index + ssmlResult[0].length,\n text: ssmlResult[0]\n });\n ssmlResult = ssmlTagRegex.exec(text);\n } // Create a copy of the text with all SSML marks replaces with whitespace\n\n\n var cleanedText = text.slice();\n existingTags.forEach(function (existingSsml) {\n var whitespace = new Array(existingSsml.text.length + 1).join(\' \');\n cleanedText = [cleanedText.slice(0, existingSsml.start), whitespace, cleanedText.slice(existingSsml.end)].join(\'\');\n });\n\n var sentenceEndIndices = this._getSentenceEnds(cleanedText); // Only insert random marks into sentences that don\'t already have any\n\n\n var prevIndex = 0;\n var targetIndices = sentenceEndIndices.filter(function (index) {\n var containsMark = markIndices.findIndex(function (markIndex) {\n return prevIndex <= markIndex && index > markIndex;\n }) !== -1;\n prevIndex = index;\n return !containsMark;\n });\n\n var randomMarkedText = this._insertRandomMarksAt(text, targetIndices, marks);\n\n return randomMarkedText;\n }\n /**\n * Generate a version of given text that is enclosed by Polly ssml speak tags.\n *\n * @param {string} text - The text to validate.\n *\n * @returns {string} - Updated input string.\n */\n\n }, {\n key: "validateText",\n value: function validateText(text) {\n if (!text) {\n text = \'\';\n } else {\n text = text.replace(/(^\\s*<\\s*speak\\s*)>\\s*|(^\\s*)/, \'\').replace(/(\\s*<\\s*\\/\\s*speak\\s*>\\s*$|\\s*$)/, \'\');\n }\n\n return text;\n }\n /**\n * Parse an input string and insert SSML marks based on\n * word matches in a map.\n *\n * @private\n *\n * @param {string} text - Input string.\n * @param {Array.} [indices = []] - An array of indices in the text input\n * where random marks should be inserted.\n * @param {Array.} [marks = []] - An array of mark strings to choose\n * from when inserting random marks.\n *\n * @returns {string} - Updated input string.\n */\n\n }, {\n key: "_insertRandomMarksAt",\n value: function _insertRandomMarksAt(text) {\n var indices = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n var marks = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];\n\n if (!marks || marks.length === 0 || !indices || indices.length === 0) {\n return text;\n }\n\n var offset = 0;\n indices.forEach(function (index) {\n var randomMark = "");\n text = [text.slice(0, index + offset), randomMark, text.slice(index + offset)].join(\'\');\n offset += randomMark.length;\n });\n return text;\n }\n /**\n * Parses a string of text and returns an array containing the indices\n * of the last character in a sentence that is not in the following list:\n * (\'.\', \'?\', \'!\')\n *\n * @private\n *\n * @param {string} text - Text to process for end of sentence\n * indices.\n *\n * @returns {Array.} - Array of end of sentence indices.\n */\n\n }, {\n key: "_getSentenceEnds",\n value: function _getSentenceEnds(text) {\n var sentenceRegex = /[^.!?]+[.!?]+/g;\n var endSentenceRegex = /[.!?]+/;\n var result = sentenceRegex.exec(text);\n var sentenceEnds = [];\n\n while (result !== null) {\n // find the last non-punctuation character\n var punctResult = endSentenceRegex.exec(result[0]);\n sentenceEnds.push(result.index + result[0].length - punctResult[0].length);\n result = sentenceRegex.exec(text);\n }\n\n return sentenceEnds;\n }\n /**\n * Parse an input string and insert SSML marks based on\n * word matches in a map.\n *\n * @private\n *\n * @param {string} text - Input string.\n * @param {Map} map - Mapping of words to mark values that\n * will be inserted as the value for a mark\'s \'name\' attribute.\n * @param {Array} duplicatesToCheck - A list of mark values to check for duplicate against the first word\n *\n * @returns {string} - Updated input string.\n */\n\n }, {\n key: "_insertMarks",\n value: function _insertMarks(text, map, duplicatesToCheck) {\n if (text === \'\') return text;\n var wordRegex = /\\w+|\\s+|[^\\s\\w]+/g;\n var lowerCaseWord;\n var checkDuplicate = true;\n var markedWords = text.match(wordRegex).map(function (word) {\n lowerCaseWord = word.toLowerCase();\n\n if (map.has(lowerCaseWord)) {\n var marks = map.get(lowerCaseWord).map(function (mark) {\n if (checkDuplicate) {\n checkDuplicate = false;\n return duplicatesToCheck.includes(mark) ? \'\' : "");\n } else {\n return "");\n }\n });\n return "".concat(marks.join(\'\')).concat(word);\n } else {\n checkDuplicate = false;\n return word;\n }\n });\n var existingMarks = duplicatesToCheck.map(function (mark) {\n return "");\n });\n return "".concat(existingMarks.join(\'\')).concat(markedWords.join(\'\'));\n }\n /**\n * Processes an input object for mapping an array\n * of words to specific mark keys. Converts the input\n * map into a Map with a more efficient format for\n * performing mark injection.\n *\n * @private\n *\n * @param {object} map - Input object that maps mark keys\n * to arrays of words.\n *\n * @returns {Map} - Map for internal use.\n */\n\n }, {\n key: "_processInputMap",\n value: function _processInputMap(map) {\n var internalMap = new Map();\n var list = [];\n Object.entries(map).forEach(function (_ref) {\n var _ref2 = TextToSpeechUtils_slicedToArray(_ref, 2),\n key = _ref2[0],\n value = _ref2[1];\n\n if (!Array.isArray(value)) {\n throw new Error("Cannot generate SSML marks from map \\"".concat(map, "\\" because value for key \'").concat(key, "\' is not an array."));\n }\n\n value.forEach(function (word) {\n var lowerCaseWord = word.toLowerCase();\n list = internalMap.get(lowerCaseWord);\n\n if (list !== undefined && !list.includes(key)) {\n internalMap.set(lowerCaseWord, [].concat(TextToSpeechUtils_toConsumableArray(list), [key]));\n } else {\n internalMap.set(lowerCaseWord, [key]);\n }\n });\n });\n return internalMap;\n }\n }]);\n\n return TextToSpeechUtils;\n}();\n\n/* harmony default export */ var awspack_TextToSpeechUtils = (TextToSpeechUtils_TextToSpeechUtils);\n// CONCATENATED MODULE: ./src/core/awspack/AbstractTextToSpeechFeature.js\nfunction AbstractTextToSpeechFeature_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { AbstractTextToSpeechFeature_typeof = function _typeof(obj) { return typeof obj; }; } else { AbstractTextToSpeechFeature_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return AbstractTextToSpeechFeature_typeof(obj); }\n\nfunction AbstractTextToSpeechFeature_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction AbstractTextToSpeechFeature_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { AbstractTextToSpeechFeature_ownKeys(Object(source), true).forEach(function (key) { AbstractTextToSpeechFeature_defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { AbstractTextToSpeechFeature_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction AbstractTextToSpeechFeature_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction AbstractTextToSpeechFeature_slicedToArray(arr, i) { return AbstractTextToSpeechFeature_arrayWithHoles(arr) || AbstractTextToSpeechFeature_iterableToArrayLimit(arr, i) || AbstractTextToSpeechFeature_unsupportedIterableToArray(arr, i) || AbstractTextToSpeechFeature_nonIterableRest(); }\n\nfunction AbstractTextToSpeechFeature_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."); }\n\nfunction AbstractTextToSpeechFeature_iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction AbstractTextToSpeechFeature_arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction AbstractTextToSpeechFeature_toConsumableArray(arr) { return AbstractTextToSpeechFeature_arrayWithoutHoles(arr) || AbstractTextToSpeechFeature_iterableToArray(arr) || AbstractTextToSpeechFeature_unsupportedIterableToArray(arr) || AbstractTextToSpeechFeature_nonIterableSpread(); }\n\nfunction AbstractTextToSpeechFeature_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."); }\n\nfunction AbstractTextToSpeechFeature_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return AbstractTextToSpeechFeature_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return AbstractTextToSpeechFeature_arrayLikeToArray(o, minLen); }\n\nfunction AbstractTextToSpeechFeature_iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction AbstractTextToSpeechFeature_arrayWithoutHoles(arr) { if (Array.isArray(arr)) return AbstractTextToSpeechFeature_arrayLikeToArray(arr); }\n\nfunction AbstractTextToSpeechFeature_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction AbstractTextToSpeechFeature_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction AbstractTextToSpeechFeature_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction AbstractTextToSpeechFeature_createClass(Constructor, protoProps, staticProps) { if (protoProps) AbstractTextToSpeechFeature_defineProperties(Constructor.prototype, protoProps); if (staticProps) AbstractTextToSpeechFeature_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction AbstractTextToSpeechFeature_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { AbstractTextToSpeechFeature_get = Reflect.get; } else { AbstractTextToSpeechFeature_get = function _get(target, property, receiver) { var base = AbstractTextToSpeechFeature_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return AbstractTextToSpeechFeature_get(target, property, receiver || target); }\n\nfunction AbstractTextToSpeechFeature_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = AbstractTextToSpeechFeature_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction AbstractTextToSpeechFeature_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) AbstractTextToSpeechFeature_setPrototypeOf(subClass, superClass); }\n\nfunction AbstractTextToSpeechFeature_setPrototypeOf(o, p) { AbstractTextToSpeechFeature_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return AbstractTextToSpeechFeature_setPrototypeOf(o, p); }\n\nfunction AbstractTextToSpeechFeature_createSuper(Derived) { var hasNativeReflectConstruct = AbstractTextToSpeechFeature_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = AbstractTextToSpeechFeature_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = AbstractTextToSpeechFeature_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return AbstractTextToSpeechFeature_possibleConstructorReturn(this, result); }; }\n\nfunction AbstractTextToSpeechFeature_possibleConstructorReturn(self, call) { if (call && (AbstractTextToSpeechFeature_typeof(call) === "object" || typeof call === "function")) { return call; } return AbstractTextToSpeechFeature_assertThisInitialized(self); }\n\nfunction AbstractTextToSpeechFeature_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction AbstractTextToSpeechFeature_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction AbstractTextToSpeechFeature_getPrototypeOf(o) { AbstractTextToSpeechFeature_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return AbstractTextToSpeechFeature_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n\n\n\n/**\r\n * The Amazon Polly service object.\r\n * @external Polly\r\n * @see https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Polly.html\r\n */\n\n/**\r\n * The presigner object that can be used to generate presigned urls for the Polly service.\r\n * @external Presigner\r\n * @see https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Polly/Presigner.html\r\n */\n// Available options for Polly\n\nvar engines = [\'standard\', \'neural\'];\nvar audioFormats = [\'mp3\', \'ogg_vorbis\', \'pcm\'];\nvar speechmarkTypes = [\'sentence\', \'ssml\', \'viseme\', \'word\'];\nvar sampleRates = {\n mp3: {\n rates: [\'8000\', \'16000\', \'22050\', \'24000\'],\n defaults: {\n standard: \'2050\',\n neural: \'2400\'\n }\n },\n pcm: {\n rates: [\'8000\', \'16000\'],\n defaults: {\n standard: \'1600\',\n neural: \'1600\'\n }\n }\n};\nsampleRates.ogg_vorbis = sampleRates.mp3;\nvar awsVersion;\n/**\r\n * Base class for turning text input into playable audio. There should be one instance\r\n * per speaker, each instance can play only one piece of text at a time.\r\n *\r\n * @extends AbstractHostFeature\r\n * @abstract\r\n *\r\n * @property {(number|undefined)} AWS_VERSION - Gets the version of AWS SDK being\r\n * used. Will be undefined until [initializeService]{@link AbstractTextToSpeechFeature.initializeService}\r\n * has been successfully executed.\r\n * @property {string} [POLLY_MIN_NEURAL_VERSION=\'2.503\'] - Gets the minimum version\r\n * of the AWS SDK that is necessary to use neural voices with AWS Polly.\r\n * @property {Object} POLLY_DEFAULTS - Default values to use with calls to {@link external:Polly}.\r\n * @property {string} [POLLY_DEFAULTS.Engine=\'standard\']\r\n * @property {Array.} [POLLY_DEFAULTS.LexiconNames=[]]\r\n * @property {string} [POLLY_DEFAULTS.OutputFormat=\'mp3\']\r\n * @property {string} [POLLY_DEFAULTS.SampleRate=\'22050\']\r\n * @property {string} [POLLY_DEFAULTS.Text=\'\']\r\n * @property {string} [POLLY_DEFAULTS.TextType=\'ssml\']\r\n * @property {string} [POLLY_DEFAULTS.VoiceId=\'Amy\']\r\n * @property {string} [POLLY_DEFAULTS.LanguageCode=\'en-GB\']\r\n * @property {string} [POLLY_DEFAULTS.LanguageName=\'British English\']\r\n * @property {Array.} [POLLY_VOICES=[]] - An array of voices available in\r\n * Polly. Will be empty until [initializeService]{@link AbstractTextToSpeechFeature.initializeService}\r\n * has been successfully executed. See [Polly Documentation]{@link https://docs.aws.amazon.com/polly/latest/dg/voicelist.html}\r\n * for a full list of available voices.\r\n * @property {Object} [POLLY_LANGUAGES={}] - An object that maps language names\r\n * to language codes that are available in Polly. Will be empty until\r\n * [initializeService]{@link AbstractTextToSpeechFeature.initializeService}\r\n * has been successfully executed. See [Polly Documentation]{@link https://docs.aws.amazon.com/polly/latest/dg/SupportedLanguage.html}\r\n * for a full list of available languages and corresponding codes.\r\n * @property {Object} [POLLY_LANGUAGE_CODES={}] - An object that maps language codes\r\n * to language names that are available in Polly. Will be empty until\r\n * [initializeService]{@link AbstractTextToSpeechFeature.initializeService}\r\n * has been successfully executed. See [Polly Documentation]{@link https://docs.aws.amazon.com/polly/latest/dg/SupportedLanguage.html}\r\n * for a full list of available languages and corresponding codes.\r\n * @property {Object} EVENTS - Built-in messages that the feature emits. When the\r\n * feature is added to a {@link core/HostObject}, event names will be prefixed by the\r\n * name of the feature class + \'.\'.\r\n * @property {string} [EVENTS.ready=onReadyEvent] - Message that is emitted after\r\n * [initializeService]{@link AbstractTextToSpeechFeature.initializeService} has been\r\n * successfully executed.\r\n * @property {string} [EVENTS.play=onPlayEvent] - Message that is emitted after\r\n * each call to [play]{@link AbstractTextToSpeechFeature#play}. The speech that was played\r\n * is supplied as an argument to listener functions.\r\n * @property {string} [EVENTS.pause=onPauseEvent] - Message that is emitted after\r\n * each call to [pause]{@link AbstractTextToSpeechFeature#pause}. The speech that was paused\r\n * is supplied as an argument to listener functions.\r\n * @property {string} [EVENTS.resume=onResumeEvent] - Message that is emitted after\r\n * each call to [resume]{@link AbstractTextToSpeechFeature#resume}. The speech that was\r\n * resumed is supplied as an argument to listener functions.\r\n * @property {string} [EVENTS.interrupt=onInterruptEvent] - Message that is emitted\r\n * if there is a current speech in progress and [play]{@link AbstractTextToSpeechFeature#play}\r\n * or [resume]{@link AbstractTextToSpeechFeature#resume} are executed for a new speech.\r\n * The speech that was interrupted is supplied as an argument to listener functions.\r\n * @property {string} [EVENTS.stop=onStopEvent] - Message that is emitted after\r\n * each call to [stop]{@link AbstractTextToSpeechFeature#stop} and when a speech reaches\r\n * the end of playback. The speech that was stopped is supplied as an argument\r\n * to listener functions.\r\n * @property {string} [EVENTS.sentence=onSentenceEvent] - Message that is emitted\r\n * each time a sentence speechmark is encountered whose timestamp matches up with\r\n * the speech audio\'s current time. The sentence speechmark object is supplied as\r\n * an argument to listener functions.\r\n * @property {string} [EVENTS.word=onWordEvent] - Message that is emitted\r\n * each time a word speechmark is encountered whose timestamp matches up with\r\n * the speech audio\'s current time. The word speechmark object is supplied as\r\n * an argument to listener functions.\r\n * @property {string} [EVENTS.viseme=onVisemeEvent] - Message that is emitted\r\n * each time a viseme speechmark is encountered whose timestamp matches up with\r\n * the speech audio\'s current time. The viseme speechmark object is supplied as\r\n * an argument to listener functions.\r\n * @property {string} [EVENTS.ssml=onSsmlEvent] - Message that is emitted\r\n * each time a ssml speechmark is encountered whose timestamp matches up with\r\n * the speech audio\'s current time. The ssml speechmark object is supplied as\r\n * an argument to listener functions.\r\n * @property {Object} SERVICES - AWS services that are necessary for the feature\r\n * to function.\r\n * @property {external:Polly} SERVICES.polly - The Polly service that is used\r\n * to synthesize speechmarks. Will be undefined until [initializeService]{@link AbstractTextToSpeechFeature.initializeService}\r\n * has been successfully executed\r\n * @property {external:Presigner} SERVICES.presigner - The Polly Presigner\r\n * object that is used to synthesize speech audio. Will be undefined until\r\n * [initializeService]{@link AbstractTextToSpeechFeature.initializeService}\r\n * has been successfully executed.\r\n */\n\nvar AbstractTextToSpeechFeature_AbstractTextToSpeechFeature = /*#__PURE__*/function (_AbstractHostFeature) {\n AbstractTextToSpeechFeature_inherits(AbstractTextToSpeechFeature, _AbstractHostFeature);\n\n var _super = AbstractTextToSpeechFeature_createSuper(AbstractTextToSpeechFeature);\n\n /**\r\n * @constructor\r\n *\r\n * @param {core/HostObject} host - Host object managing the feature.\r\n * @param {Object=} options - Options that will be sent to Polly for each speech.\r\n * @param {string=} options.voice - The name of the Polly voice to use for all speech.\r\n * @param {string=} options.engine - The name of the Polly engine to use for all speech.\r\n * @param {string=} options.language - The name of the language to use for all speech.\r\n * @param {audioFormat} [options.audioFormat=\'mp3\'] - The format to use for generated\r\n * audio for all speeches.\r\n * @param {string=} options.sampleRate - The sample rate for audio files for all\r\n * speeches.\r\n * @param {number} [options.speechmarkOffset=0] - Amount of time in seconds to\r\n * offset speechmark event emission from the audio.\r\n * @param {number} [options.minEndMarkDuration=.05] - The minimum amount of time\r\n * in seconds that the last speechmark of each type in a speech can have its\r\n * duration property set to.\r\n * @param {number} [options.volume=1] - The default volume to play speech audio\r\n * with.\r\n */\n function AbstractTextToSpeechFeature(host) {\n var _this;\n\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n voice: undefined,\n engine: undefined,\n language: undefined,\n audioFormat: \'mp3\',\n sampleRate: undefined,\n speechmarkOffset: 0,\n minEndMarkDuration: 0.05,\n volume: 1\n };\n\n AbstractTextToSpeechFeature_classCallCheck(this, AbstractTextToSpeechFeature);\n\n _this = _super.call(this, host);\n _this._speechCache = {};\n _this._currentSpeech = null;\n _this._currentPromise = null;\n _this._isValidated = false;\n _this.speechmarkOffset = Number.isNaN(Number(options.speechmarkOffset)) ? 0 : Number(options.speechmarkOffset);\n _this.minEndMarkDuration = Number.isNaN(Number(options.minEndMarkDuration)) ? 0 : Number(options.minEndMarkDuration);\n _this.volume = Number.isNaN(Number(options.volume)) ? 1 : Number(options.volume);\n _this._promises = {\n volume: core_Deferred.resolve()\n };\n _this._volumePaused = false; // Set default options for each speech\n\n _this._voice = options.voice || _this.constructor.POLLY_DEFAULTS.VoiceId;\n _this._language = options.language || _this.constructor.POLLY_DEFAULTS.LanguageName;\n _this._engine = engines.includes(options.engine) ? options.engine : _this.constructor.POLLY_DEFAULTS.Engine;\n _this._audioFormat = audioFormats.includes(options.audioFormat) ? options.audioFormat : _this.constructor.POLLY_DEFAULTS.OutputFormat;\n _this._sampleRate = sampleRates[_this._audioFormat].rates.includes(options.sampleRate) ? options.sampleRate : _this.constructor.POLLY_DEFAULTS.SampleRate;\n return _this;\n }\n /**\r\n * Store Polly, Presigner and AWS SDK Version for use across all instances.\r\n *\r\n * @param {external:Polly} polly - Polly instance to use to generate speechmarks.\r\n * @param {external:Presigner} presigner - Presigner instance to use to generate\r\n * audio URLs.\r\n * @param {string} version - Version of the AWS SDK to use to validate voice options.\r\n */\n\n\n AbstractTextToSpeechFeature_createClass(AbstractTextToSpeechFeature, [{\n key: "currentSpeech",\n get:\n /**\r\n * Gets the text of the currently playing speech.\r\n *\r\n * @readonly\r\n * @type {string}\r\n */\n function get() {\n if (this._currentSpeech) {\n return this._currentSpeech.text;\n } else {\n return null;\n }\n }\n /**\r\n * Gets and sets the number of seconds to offset speechmark emission.\r\n *\r\n * @type {number}\r\n */\n\n }, {\n key: "speechmarkOffset",\n get: function get() {\n return this._speechmarkOffset;\n },\n set: function set(offset) {\n this._speechmarkOffset = offset;\n\n if (this._currentSpeech) {\n this._currentSpeech.speechmarkOffset = offset;\n }\n }\n /**\r\n * Gets and sets the The minimum amount of time in seconds that the last\r\n * speechmark of each type in a speech can have its duration property set to.\r\n *\r\n * @type number\r\n */\n\n }, {\n key: "minEndMarkDuration",\n get: function get() {\n return this._minEndMarkDuration / 1000;\n },\n set: function set(duration) {\n this._minEndMarkDuration = duration * 1000;\n }\n /**\r\n * Appends the Sumerian Hosts custom user-agent to a string if it is not\r\n * already present.\r\n *\r\n * @private\r\n *\r\n * @param {string} currentUserAgent - String to append to if needed.\r\n *\r\n * @returns {string}\r\n */\n\n }, {\n key: "_validateEngine",\n value:\n /**\r\n * Checks if a given engine type is compatible with the AWS SDK version. If it\r\n * is, return the original value. Otherwise return a default.\r\n *\r\n * @private\r\n *\r\n * @param {string} engine - The type of Polly voice engine to validate.\r\n *\r\n * @returns {string}\r\n */\n function _validateEngine(engine) {\n // Default to the standard engine if neural is not available for this version\n if (engine === undefined || this.constructor.AWS_VERSION < this.constructor.POLLY_MIN_NEURAL_VERSION) {\n engine = this.constructor.POLLY_DEFAULTS.Engine;\n }\n\n return engine;\n }\n /**\r\n * Checks if a given audio format type is compatible with Polly. If it is, return\r\n * the original value. Otherwise return a default.\r\n *\r\n * @private\r\n *\r\n * @param {string} engine - The type of Polly voice engine to validate.\r\n *\r\n * @returns {string}\r\n */\n\n }, {\n key: "_validateFormat",\n value: function _validateFormat(format) {\n if (format === undefined || !audioFormats.includes(format)) {\n format = this.constructor.POLLY_DEFAULTS.OutputFormat;\n }\n\n return format;\n }\n /**\r\n * Checks if a given audio sampling rate is compatible with the current audio\r\n * format. If it is, return the original value. Otherwise return a default.\r\n *\r\n * @private\r\n *\r\n * @param {string} engine - The type of Polly voice engine to validate.\r\n *\r\n * @returns {string}\r\n */\n\n }, {\n key: "_validateRate",\n value: function _validateRate(rate) {\n // Use default if specified sample rate is not valid for the audio format\n if (rate === undefined || !sampleRates[this._audioFormat].rates.includes(rate)) {\n rate = sampleRates[this._audioFormat].defaults[this._engine];\n }\n\n return rate;\n }\n /**\r\n * Checks if a given Polly voice id is compatible with the current Polly engine.\r\n * If it is, return the original value. Otherwise return a default.\r\n *\r\n * @private\r\n *\r\n * @param {string} engine - The type of Polly voice engine to validate.\r\n *\r\n * @returns {string}\r\n */\n\n }, {\n key: "_validateVoice",\n value: function _validateVoice(voiceId) {\n var voice = this.constructor.POLLY_VOICES.find(function (v) {\n return v.Id === voiceId;\n }); // Use the default voice if the voice isn\'t supported by the engine\n\n if (voice === undefined || !voice.SupportedEngines.includes(this._engine)) {\n voiceId = this.constructor.POLLY_DEFAULTS.VoiceId;\n }\n\n return voiceId;\n }\n /**\r\n * Checks if a given Polly language is compatible with the current Polly voice.\r\n * If it is, return the original value. Otherwise return a default.\r\n *\r\n * @private\r\n *\r\n * @param {string} engine - The type of Polly voice engine to validate.\r\n *\r\n * @returns {string}\r\n */\n\n }, {\n key: "_validateLanguage",\n value: function _validateLanguage(language) {\n var _this2 = this;\n\n var voice = this.constructor.POLLY_VOICES.find(function (v) {\n return v.Id === _this2._voice;\n });\n var languageCode = this.constructor.POLLY_LANGUAGES[language]; // Find the languages available for the current voice\n\n var availableCodes = [voice.LanguageCode];\n\n if (voice.AdditionalLanguageCodes) {\n availableCodes.push.apply(availableCodes, AbstractTextToSpeechFeature_toConsumableArray(voice.AdditionalLanguageCodes));\n } // If the current voice doesn\'t support the language, use its default\n\n\n if (!availableCodes.includes(languageCode)) {\n language = this.constructor.POLLY_LANGUAGE_CODES[voice.LanguageCode];\n }\n\n return language;\n }\n /**\r\n * Validate the current Polly options to make sure they are compatible with each\r\n * other.\r\n *\r\n * @private\r\n */\n\n }, {\n key: "_validate",\n value: function _validate() {\n // Validate speech parameters\n this._engine = this._validateEngine(this._engine);\n this._audioFormat = this._validateFormat(this._audioFormat);\n this._sampleRate = this._validateRate(this._sampleRate);\n this._voice = this._validateVoice(this._voice);\n this._language = this._validateLanguage(this._language);\n this._isValidated = true;\n }\n /**\r\n * Return an object containing parameters compatible with Polly.synthesizeSpeech.\r\n *\r\n * @private\r\n *\r\n * @returns {Object}\r\n */\n\n }, {\n key: "_getConfig",\n value: function _getConfig() {\n // Make sure parameters have been validated\n if (this.constructor.isReady && !this._isValidated) {\n this._validate();\n } // Create a config object compatible with Polly\n\n\n return {\n Engine: this._engine,\n OutputFormat: this._audioFormat,\n SampleRate: this._sampleRate,\n VoiceId: this._voice,\n LanguageCode: this.constructor.POLLY_LANGUAGES[this._language]\n };\n }\n /**\r\n * Update Polly parameters with options from a given config. All stored speeches\r\n * will be updated to use the new parameters, unless the speech text is contained\r\n * in the \'skipSpeeches\' parameter.\r\n *\r\n * @private\r\n *\r\n * @param {Object} config - Polly parameter options to overwrite.\r\n * @param {Array.} skipSpeeches - Text of any speeches that should not\r\n * have parameters updated.\r\n *\r\n * @returns {Object}\r\n */\n\n }, {\n key: "_updateConfig",\n value: function _updateConfig(config) {\n var _this3 = this;\n\n var skipSpeeches = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n\n var currentConfig = this._getConfig();\n\n if (!config) {\n return currentConfig;\n }\n\n this._isValidated = false;\n var currentConfigStr = JSON.stringify(currentConfig); // Update options\n\n if (config.Engine) {\n this._engine = config.Engine;\n }\n\n if (config.audioFormat) {\n this._audioFormat = config.audioFormat;\n }\n\n if (config.SampleRate) {\n this._sampleRate = config.SampleRate;\n }\n\n if (config.VoiceId) {\n this._voice = config.VoiceId;\n }\n\n if (config.Language) {\n this._language = config.Language;\n } // Validate the config\n\n\n var validConfig = this._getConfig(); // Exit if nothing has changed\n\n\n var configStr = JSON.stringify(validConfig);\n\n if (currentConfigStr === configStr) {\n this._isValidated = true;\n return validConfig;\n } // Update all cached configs\n\n\n Object.entries(this._speechCache).forEach(function (_ref) {\n var _ref2 = AbstractTextToSpeechFeature_slicedToArray(_ref, 2),\n text = _ref2[0],\n speech = _ref2[1];\n\n // Check if this is a skipped speech\n if (skipSpeeches.includes(text)) {\n return;\n }\n\n var speechConfigStr = JSON.stringify(speech.config); // Update the speech with new parameters\n\n if (speechConfigStr !== configStr) {\n _this3._updateSpeech(text, validConfig);\n }\n });\n return validConfig;\n }\n /**\r\n * Update an existing speech, or add a new speech with new Polly parameters with\r\n * options from a given config.\r\n *\r\n * @private\r\n *\r\n * @param {string} text - The text of the speech to update.\r\n * @param {Object} config - Polly parameter options to update.\r\n * @param {boolean} [force=false] - Whether to force the speech to be updated\r\n * if no parameters have changes.\r\n *\r\n * @returns {AbstractSpeech}\r\n */\n\n }, {\n key: "_updateSpeech",\n value: function _updateSpeech(text, config) {\n var _this4 = this;\n\n var force = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n var speech = this._speechCache[text] || {}; // Exit if nothing has changed and force is false\n\n if (!force && config !== undefined && speech.config && JSON.stringify(config) === JSON.stringify(speech.config)) {\n return speech;\n } // Create separate parameters for audio and speechmark generation\n\n\n var audioParams = AbstractTextToSpeechFeature_objectSpread(AbstractTextToSpeechFeature_objectSpread({}, config), {}, {\n Text: text,\n TextType: \'ssml\'\n });\n\n var speechmarkParams = AbstractTextToSpeechFeature_objectSpread(AbstractTextToSpeechFeature_objectSpread({}, audioParams), {}, {\n OutputFormat: \'json\',\n SpeechMarkTypes: speechmarkTypes\n }); // Generate audio and speechmarks\n\n\n speech.config = config;\n speech.promise = Promise.all([this._synthesizeSpeechmarks(speechmarkParams), this._synthesizeAudio(audioParams)]).then(function (results) {\n return _this4._createSpeech.apply(_this4, [text].concat(AbstractTextToSpeechFeature_toConsumableArray(results)));\n });\n this._speechCache[text] = speech;\n return speech;\n }\n /**\r\n * Create a new Speech object for the speaker.\r\n *\r\n * @private\r\n *\r\n * @param {TextToSpeech} speaker - The TextToSpeech instance that will own the speech.\r\n * @param {string} text - Text of the speech.\r\n * @param {Object} speechmarks - Speechmarks for the speech.\r\n * @param {Object} audioConfig - Audio for the speech.\r\n *\r\n * @returns {AbstractSpeech}\r\n */\n\n }, {\n key: "_createSpeech",\n value: function _createSpeech(text, speechmarks, audioConfig) {\n return new awspack_AbstractSpeech(this, text, speechmarks, audioConfig);\n }\n /**\r\n * Create presigned URL of speech audio for the given speech text.\r\n *\r\n * @private\r\n *\r\n * @param {Object} params - Parameters object compatible with Polly.synthesizeSpeech.\r\n *\r\n * @returns {Deferred} Resolves with an object containing the audio URL.\r\n */\n\n }, {\n key: "_synthesizeAudio",\n value: function _synthesizeAudio(params) {\n var _this5 = this;\n\n return new core_Deferred(function (resolve, reject) {\n _this5.constructor.SERVICES.presigner.getSynthesizeSpeechUrl(params, function (error, url) {\n if (!error) {\n resolve({\n url: url\n });\n } else {\n reject(error);\n }\n });\n });\n }\n /**\r\n * Retrieves and parses speechmarks for the given speech text.\r\n *\r\n * @private\r\n *\r\n * @param {Object} params - Parameters object compatible with Polly.synthesizeSpeech.\r\n *\r\n * @returns {Deferred} Resolves with an array of speechmark objects\r\n */\n\n }, {\n key: "_synthesizeSpeechmarks",\n value: function _synthesizeSpeechmarks(params) {\n var _this6 = this;\n\n return this.constructor.SERVICES.polly.synthesizeSpeech(params).promise().then(function (result) {\n // Convert charcodes to string\n var jsonString = JSON.stringify(result.AudioStream);\n var json = JSON.parse(jsonString);\n var dataStr = json.data.map(function (c) {\n return String.fromCharCode(c);\n }).join(\'\');\n var markTypes = {\n sentence: [],\n word: [],\n viseme: [],\n ssml: []\n };\n var endMarkTypes = {\n sentence: null,\n word: null,\n viseme: null,\n ssml: null\n }; // Split by enclosing {} to create speechmark objects\n\n var speechMarks = AbstractTextToSpeechFeature_toConsumableArray(dataStr.matchAll(/\\{.*?\\}(?=\\n|$)/gm)).map(function (match) {\n var mark = JSON.parse(match[0]); // Set the duration of the last speechmark stored matching this one\'s type\n\n var numMarks = markTypes[mark.type].length;\n\n if (numMarks > 0) {\n var lastMark = markTypes[mark.type][numMarks - 1];\n lastMark.duration = mark.time - lastMark.time;\n }\n\n markTypes[mark.type].push(mark);\n endMarkTypes[mark.type] = mark;\n return mark;\n }); // Find the time of the latest speechmark\n\n\n var endTimes = [];\n\n if (endMarkTypes.sentence) {\n endTimes.push(endMarkTypes.sentence.time);\n }\n\n if (endMarkTypes.word) {\n endTimes.push(endMarkTypes.word.time);\n }\n\n if (endMarkTypes.viseme) {\n endTimes.push(endMarkTypes.viseme.time);\n }\n\n if (endMarkTypes.ssml) {\n endTimes.push(endMarkTypes.ssml.time);\n }\n\n var endTime = Math.max.apply(Math, endTimes); // Calculate duration for the ending speechMarks of each type\n\n if (endMarkTypes.sentence) {\n endMarkTypes.sentence.duration = Math.max(_this6._minEndMarkDuration, endTime - endMarkTypes.sentence.time);\n }\n\n if (endMarkTypes.word) {\n endMarkTypes.word.duration = Math.max(_this6._minEndMarkDuration, endTime - endMarkTypes.word.time);\n }\n\n if (endMarkTypes.viseme) {\n endMarkTypes.viseme.duration = Math.max(_this6._minEndMarkDuration, endTime - endMarkTypes.viseme.time);\n }\n\n if (endMarkTypes.ssml) {\n endMarkTypes.ssml.duration = Math.max(_this6._minEndMarkDuration, endTime - endMarkTypes.ssml.time);\n }\n\n return speechMarks;\n });\n }\n /**\r\n * Returns a Speech object that has the given text.\r\n *\r\n * @private\r\n *\r\n * @param {string} text - The text content of the Speech.\r\n * @param {Object=} config - Options to update the Speech with.\r\n *\r\n * @returns {Deferred} Resolves with Speech or null;\r\n */\n\n }, {\n key: "_getSpeech",\n value: function _getSpeech(text, config) {\n // Make sure AWS services exist\n if (!this.constructor.isReady) {\n var e = \'AWS services have not been initialized.\';\n return core_Deferred.reject(e);\n } // Make sure its possible to generate speeches\n\n\n if (!text) {\n var _e2 = \'Cannot play a speech with no text.\';\n return core_Deferred.reject(_e2);\n } // Update the speech with options\n\n\n text = awspack_TextToSpeechUtils.validateText(text);\n config = this._updateConfig(config, text);\n return this._updateSpeech(text, config).promise;\n }\n /**\r\n * Adds a namespace to the host with the name of the feature to contain properties\r\n * and methods from the feature that users of the host need access to.\r\n *\r\n * @see TextToSpeechFeature\r\n */\n\n }, {\n key: "installApi",\n value: function installApi() {\n var _this7 = this;\n\n /**\r\n * @inner\r\n * @namespace TextToSpeechFeature\r\n */\n var api = AbstractTextToSpeechFeature_get(AbstractTextToSpeechFeature_getPrototypeOf(AbstractTextToSpeechFeature.prototype), "installApi", this).call(this);\n\n Object.assign(api, {\n /**\r\n * @memberof TextToSpeechFeature\r\n * @instance\r\n * @method\r\n * @see AbstractTextToSpeechFeature#play\r\n */\n play: this.play.bind(this),\n\n /**\r\n * @memberof TextToSpeechFeature\r\n * @instance\r\n * @method\r\n * @see AbstractTextToSpeechFeature#pause\r\n */\n pause: this.pause.bind(this),\n\n /**\r\n * @memberof TextToSpeechFeature\r\n * @instance\r\n * @method\r\n * @see AbstractTextToSpeechFeature#resume\r\n */\n resume: this.resume.bind(this),\n\n /**\r\n * @memberof TextToSpeechFeature\r\n * @instance\r\n * @method\r\n * @see AbstractTextToSpeechFeature#stop\r\n */\n stop: this.stop.bind(this),\n\n /**\r\n * @memberof TextToSpeechFeature\r\n * @instance\r\n * @method\r\n * @see AbstractTextToSpeechFeature#getVolume\r\n */\n getVolume: this.getVolume.bind(this),\n\n /**\r\n * @memberof TextToSpeechFeature\r\n * @instance\r\n * @method\r\n * @see AbstractTextToSpeechFeature#setVolume\r\n */\n setVolume: this.setVolume.bind(this),\n\n /**\r\n * @memberof TextToSpeechFeature\r\n * @instance\r\n * @method\r\n * @see AbstractTextToSpeechFeature#pauseVolume\r\n */\n pauseVolume: this.pauseVolume.bind(this),\n\n /**\r\n * @memberof TextToSpeechFeature\r\n * @instance\r\n * @method\r\n * @see AbstractTextToSpeechFeature#resumeVolume\r\n */\n resumeVolume: this.resumeVolume.bind(this)\n });\n Object.defineProperties(api, {\n /**\r\n * @memberof TextToSpeechFeature\r\n * @instance\r\n * @see AbstractTextToSpeechFeature#speechmarkOffset\r\n */\n speechmarkOffset: {\n get: function get() {\n return _this7.speechmarkOffset;\n },\n set: function set(offset) {\n _this7.speechmarkOffset = offset;\n }\n }\n });\n return api;\n }\n /**\r\n * Gets and sets the volume used for all audio clips played by the speaker.\r\n *\r\n * @type {number}\r\n */\n\n }, {\n key: "volume",\n get: function get() {\n return this._volume;\n }\n /**\r\n * Gets whether or not the speaker\'s volume value is currently being tweened.\r\n *\r\n * @readonly\r\n * @type {boolean}\r\n */\n ,\n set: function set(volume) {\n this._volume = core_MathUtils.clamp(volume);\n }\n }, {\n key: "volumePending",\n get: function get() {\n return this._promises.volume && this._promises.volume.pending;\n }\n /**\r\n * Gets the volume used for all audio clips played by the speaker.\r\n *\r\n * @returns {number}\r\n */\n\n }, {\n key: "getVolume",\n value: function getVolume() {\n return this.volume;\n }\n /**\r\n * Updates the volume used for all audio clips played by the speaker over time.\r\n *\r\n * @param {number} volume - Target volume value.\r\n * @param {number} [seconds=0] - Amount of time it will take to reach the target\r\n * volume.\r\n * @param {Function=} easingFn - Easing function used for interpolation.\r\n *\r\n * @returns {Deferred}\r\n */\n\n }, {\n key: "setVolume",\n value: function setVolume(volume) {\n var seconds = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var easingFn = arguments.length > 2 ? arguments[2] : undefined;\n\n if (this.volumePending) {\n this._promises.volume.cancel();\n }\n\n volume = core_MathUtils.clamp(volume);\n this._promises.volume = animpack_AnimationUtils.interpolateProperty(this, \'volume\', volume, {\n seconds: seconds,\n easingFn: easingFn\n });\n return this._promises.volume;\n }\n /**\r\n * Pause interpolation happening on the speaker\'s volume property.\r\n *\r\n * @returns {boolean}\r\n */\n\n }, {\n key: "pauseVolume",\n value: function pauseVolume() {\n this._volumePaused = true;\n return this.volumePending;\n }\n /**\r\n * Resume any interpolation happening on the speaker\'s volume property.\r\n *\r\n * @returns {boolean}\r\n */\n\n }, {\n key: "resumeVolume",\n value: function resumeVolume() {\n this._volumePaused = false;\n return this.volumePending;\n }\n /**\r\n * Update the currently playing speech.\r\n *\r\n * @param {number} deltaTime - Time since the last update.\r\n */\n\n }, {\n key: "update",\n value: function update(deltaTime) {\n if (!this._volumePaused) {\n this._promises.volume.execute(deltaTime);\n }\n\n if (this._currentSpeech && this._currentSpeech.playing) {\n this._currentSpeech.volume = this._volume;\n\n this._currentSpeech.update(this._host.now);\n\n AbstractTextToSpeechFeature_get(AbstractTextToSpeechFeature_getPrototypeOf(AbstractTextToSpeechFeature.prototype), "update", this).call(this, deltaTime);\n }\n }\n /**\r\n * Set the current speech to a new asset and update the speech\'s speechmark\r\n * offset value to match that of the feature.\r\n *\r\n * @private\r\n *\r\n * @param {AbstractSpeech} speech - Speech to set as current.\r\n */\n\n }, {\n key: "_setCurrentSpeech",\n value: function _setCurrentSpeech(speech) {\n speech.speechmarkOffset = this._speechmarkOffset;\n this._currentSpeech = speech;\n }\n /**\r\n * Create a promise that will play/resume a speech with the given text after\r\n * the audio context attempts to resume and speech audio is retrieved from Polly.\r\n *\r\n * @private\r\n *\r\n * @param {string} text - The text of the new speech to play.\r\n * @param {Object=} config - Optional parameters for the speech.\r\n * @param {string} [playMethod = \'play\'] - Method to execute on the resulting\r\n * Speech object. Valid options are \'play\' and \'resume\'.\r\n */\n\n }, {\n key: "_startSpeech",\n value: function _startSpeech(text, config) {\n var _this8 = this;\n\n var playMethod = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : \'play\';\n\n // If no text is provided, try to use the current speech\n if (text === undefined && playMethod === \'resume\' && this._currentSpeech) {\n text = this._currentSpeech.text;\n }\n\n var currentPromise = this._currentPromise || {\n play: new core_Deferred(undefined, function () {\n currentPromise.speech.cancel();\n }, function () {\n currentPromise.speech.cancel();\n }, function () {\n currentPromise.speech.cancel();\n }),\n speech: new core_Deferred()\n };\n this._currentPromise = currentPromise;\n\n this._getSpeech(text, config).then(function (speech) {\n // Exit if the promise is no longer pending because of user interaction\n if (!currentPromise.play.pending) {\n return;\n } else if (_this8._currentPromise !== currentPromise) {\n // Cancel if another call to play has already been made\n currentPromise.play.cancel();\n return;\n } // Reset current speech when the speech ends\n\n\n var onFinish = function onFinish() {\n _this8._currentSpeech = null;\n _this8._currentPromise = null;\n }; // Cancel the currently playing speech\n\n\n if (_this8._currentSpeech && _this8._currentSpeech.playing) {\n if (playMethod === \'play\') {\n _this8._currentSpeech.cancel();\n } else if (playMethod === \'resume\' && _this8._currentSpeech.audio !== speech.audio) {\n _this8._currentSpeech.cancel();\n }\n }\n\n _this8._setCurrentSpeech(speech); // Play the speech\n\n\n currentPromise.speech = speech[playMethod](_this8._host.now, onFinish, onFinish, onFinish);\n currentPromise.speech.then(function () {\n if (currentPromise.speech.resolved) {\n currentPromise.play.resolve();\n } else {\n currentPromise.play.cancel();\n }\n })["catch"](function (error) {\n currentPromise.play.reject(error);\n });\n })["catch"](function (e) {\n e = "Cannot ".concat(playMethod, " speech ").concat(text, " on host ").concat(_this8.host.id, ". ").concat(e);\n currentPromise.play.reject(e);\n });\n\n return currentPromise.play;\n }\n /**\r\n * Stop any speeches currently playing and play a new speech from the beginning.\r\n *\r\n * @param {string} text - The text of the new speech to play.\r\n * @param {Object=} config - Optional parameters for the speech.\r\n *\r\n * @returns {Deferred}\r\n */\n\n }, {\n key: "play",\n value: function play(text, config) {\n return this._startSpeech(text, config, \'play\');\n }\n /**\r\n * If a speech is currently playing, pause it at the current time.\r\n */\n\n }, {\n key: "pause",\n value: function pause() {\n if (this._currentSpeech && this._currentSpeech.playing) {\n this._currentSpeech.pause(this._host.now);\n } else {\n console.warn("Cannot pause speech on host ".concat(this.host.id, ". No speech is currently playing"));\n }\n }\n /**\r\n * Stop any speeches currently playing and resume a new speech from the current\r\n * time.\r\n *\r\n * @param {string=} text - The text of the new speech to play. If undefined and\r\n * there is a current speech that is paused, the current speech will be resumed.\r\n * @param {Object=} config - Optional parameters for the speech.\r\n *\r\n * @returns {Deferred}\r\n */\n\n }, {\n key: "resume",\n value: function resume(text, config) {\n return this._startSpeech(text, config, \'resume\');\n }\n /**\r\n * If a speech is currently playing, stop playback and reset time.\r\n */\n\n }, {\n key: "stop",\n value: function stop() {\n if (this._currentSpeech && this._currentSpeech.playing) {\n this._currentSpeech.stop();\n\n this._currentSpeech = null;\n } else {\n console.warn("Cannot stop speech on host ".concat(this.host.id, ". No speech is currently playing."));\n }\n }\n }, {\n key: "discard",\n value: function discard() {\n if (this._currentSpeech && this._currentSpeech.playing) {\n this._currentSpeech.stop();\n }\n\n delete this._speechCache;\n\n AbstractTextToSpeechFeature_get(AbstractTextToSpeechFeature_getPrototypeOf(AbstractTextToSpeechFeature.prototype), "discard", this).call(this);\n }\n }], [{\n key: "initializeService",\n value: function initializeService(polly, presigner, version) {\n var _this9 = this;\n\n // Make sure all were defined\n if (polly === undefined || presigner === undefined || version === undefined) {\n throw new Error(\'Cannot initialize TextToSpeech feature. All arguments must be defined.\');\n } // Add sumerian hosts user-agent\n\n\n if (polly.config) {\n polly.config.customUserAgent = this._withCustomUserAgent(polly.config.customUserAgent);\n }\n\n if (presigner.service && presigner.service.config) {\n presigner.service.config.customUserAgent = this._withCustomUserAgent(presigner.service.config.customUserAgent);\n }\n\n this._isReady = false; // Store parameters\n\n this.SERVICES.polly = polly;\n this.SERVICES.presigner = presigner;\n awsVersion = version; // Clear the current polly objects\n\n var availableVoices = this.POLLY_VOICES;\n availableVoices.length = 0;\n var availableLanguages = this.POLLY_LANGUAGES;\n Object.keys(availableLanguages).forEach(function (name) {\n delete availableLanguages[name];\n });\n var availableLanguageCodes = this.POLLY_LANGUAGE_CODES;\n Object.keys(availableLanguageCodes).forEach(function (name) {\n delete availableLanguageCodes[name];\n }); // Re-populate according to version\n\n var minNeuralSdk = this.POLLY_MIN_NEURAL_VERSION;\n return this.SERVICES.polly.describeVoices().promise().then(function (response) {\n var allCodes = {};\n response.Voices.forEach(function (voice) {\n if (voice.SupportedEngines.includes(\'standard\') || version >= minNeuralSdk) {\n availableVoices.push(voice);\n }\n\n availableVoices.forEach(function (voice) {\n availableLanguages[voice.LanguageName] = voice.LanguageCode;\n allCodes[voice.LanguageCode] = voice.LanguageName;\n });\n });\n Object.entries(availableLanguages).forEach(function (_ref3) {\n var _ref4 = AbstractTextToSpeechFeature_slicedToArray(_ref3, 2),\n name = _ref4[0],\n code = _ref4[1];\n\n availableLanguageCodes[code] = name;\n }); // Notify that we\'re ready to generate speeches\n\n _this9._isReady = true;\n\n _this9.emit(_this9.EVENTS.ready);\n });\n }\n /**\r\n * Indicates whether or not the class is capable of generating speech audio. Polly,\r\n * Presigner and AWS SDK version number must have been defined using\r\n * [initializeService]{@link AbstractTextToSpeechFeature.initializeService}.\r\n *\r\n * @readonly\r\n * @type {boolean}\r\n */\n\n }, {\n key: "isReady",\n get: function get() {\n return this._isReady;\n }\n }, {\n key: "_withCustomUserAgent",\n value: function _withCustomUserAgent(currentUserAgent) {\n var sumerianHostsUserAgent = \'request-source/SumerianHosts\';\n\n if (currentUserAgent == null) {\n return sumerianHostsUserAgent;\n }\n\n if (currentUserAgent.indexOf(sumerianHostsUserAgent) !== -1) {\n return currentUserAgent;\n }\n\n return currentUserAgent.concat(\' \', sumerianHostsUserAgent);\n }\n }]);\n\n return AbstractTextToSpeechFeature;\n}(core_AbstractHostFeature);\n\nObject.defineProperties(AbstractTextToSpeechFeature_AbstractTextToSpeechFeature, {\n AWS_VERSION: {\n get: function get() {\n return awsVersion;\n }\n },\n POLLY_MIN_NEURAL_VERSION: {\n value: \'2.503\',\n writable: false\n },\n POLLY_DEFAULTS: {\n value: {\n Engine: \'standard\',\n LexiconNames: [],\n OutputFormat: \'mp3\',\n SampleRate: \'22050\',\n Text: \'\',\n TextType: \'ssml\',\n VoiceId: \'Amy\',\n LanguageCode: \'en-GB\',\n LanguageName: \'British English\'\n },\n writable: false\n },\n POLLY_VOICES: {\n value: [],\n writable: false\n },\n POLLY_LANGUAGES: {\n value: {},\n writable: false\n },\n POLLY_LANGUAGE_CODES: {\n value: {},\n writable: false\n },\n _isReady: {\n value: false,\n writable: true\n },\n EVENTS: {\n value: AbstractTextToSpeechFeature_objectSpread(AbstractTextToSpeechFeature_objectSpread({}, Object.getPrototypeOf(AbstractTextToSpeechFeature_AbstractTextToSpeechFeature).EVENTS), {}, {\n ready: \'onReadyEvent\',\n play: \'onPlayEvent\',\n pause: \'onPauseEvent\',\n resume: \'onResumeEvent\',\n interrupt: \'onInterruptEvent\',\n stop: \'onStopEvent\',\n sentence: \'onSentenceEvent\',\n word: \'onWordEvent\',\n viseme: \'onVisemeEvent\',\n ssml: \'onSsmlEvent\'\n })\n },\n SERVICES: {\n value: AbstractTextToSpeechFeature_objectSpread(AbstractTextToSpeechFeature_objectSpread({}, Object.getPrototypeOf(AbstractTextToSpeechFeature_AbstractTextToSpeechFeature).SERVICES), {}, {\n polly: undefined,\n presigner: undefined\n })\n }\n});\n/* harmony default export */ var awspack_AbstractTextToSpeechFeature = (AbstractTextToSpeechFeature_AbstractTextToSpeechFeature);\n// CONCATENATED MODULE: ./src/core/awspack/TextToSpeechFeature.js\nfunction TextToSpeechFeature_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { TextToSpeechFeature_typeof = function _typeof(obj) { return typeof obj; }; } else { TextToSpeechFeature_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return TextToSpeechFeature_typeof(obj); }\n\nfunction TextToSpeechFeature_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction TextToSpeechFeature_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction TextToSpeechFeature_createClass(Constructor, protoProps, staticProps) { if (protoProps) TextToSpeechFeature_defineProperties(Constructor.prototype, protoProps); if (staticProps) TextToSpeechFeature_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction TextToSpeechFeature_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { TextToSpeechFeature_get = Reflect.get; } else { TextToSpeechFeature_get = function _get(target, property, receiver) { var base = TextToSpeechFeature_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return TextToSpeechFeature_get(target, property, receiver || target); }\n\nfunction TextToSpeechFeature_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = TextToSpeechFeature_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction TextToSpeechFeature_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) TextToSpeechFeature_setPrototypeOf(subClass, superClass); }\n\nfunction TextToSpeechFeature_setPrototypeOf(o, p) { TextToSpeechFeature_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return TextToSpeechFeature_setPrototypeOf(o, p); }\n\nfunction TextToSpeechFeature_createSuper(Derived) { var hasNativeReflectConstruct = TextToSpeechFeature_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = TextToSpeechFeature_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = TextToSpeechFeature_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return TextToSpeechFeature_possibleConstructorReturn(this, result); }; }\n\nfunction TextToSpeechFeature_possibleConstructorReturn(self, call) { if (call && (TextToSpeechFeature_typeof(call) === "object" || typeof call === "function")) { return call; } return TextToSpeechFeature_assertThisInitialized(self); }\n\nfunction TextToSpeechFeature_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction TextToSpeechFeature_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction TextToSpeechFeature_getPrototypeOf(o) { TextToSpeechFeature_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return TextToSpeechFeature_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n/**\r\n * @extends AbstractTextToSpeechFeature\r\n * @alias core/TextToSpeechFeature\r\n */\n\nvar TextToSpeechFeature_TextToSpeechFeature = /*#__PURE__*/function (_AbstractTextToSpeech) {\n TextToSpeechFeature_inherits(TextToSpeechFeature, _AbstractTextToSpeech);\n\n var _super = TextToSpeechFeature_createSuper(TextToSpeechFeature);\n\n function TextToSpeechFeature() {\n var _this;\n\n TextToSpeechFeature_classCallCheck(this, TextToSpeechFeature);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n _this._enabled = false;\n\n _this._setAudioContext();\n\n _this._observeAudioContext();\n\n return _this;\n }\n /**\r\n * Store the audio context that will be used to ensure audio can be played.\r\n *\r\n * @private\r\n */\n\n\n TextToSpeechFeature_createClass(TextToSpeechFeature, [{\n key: "_setAudioContext",\n value: function _setAudioContext() {\n this._audioContext = new AudioContext();\n }\n /**\r\n * Listen for state changes on the audio context to determine whether the feature\r\n * is enabled.\r\n *\r\n * @private\r\n */\n\n }, {\n key: "_observeAudioContext",\n value: function _observeAudioContext() {\n var _this2 = this;\n\n if (this._audioContext) {\n this._audioContext.onstatechange = function () {\n if (_this2._audioContext.state === \'running\') {\n _this2._enabled = true;\n } else {\n _this2._enabled = false;\n console.warn(\'The audio context is not running. Speech will not be able to be played until it is resumed. Use the "TextToSpeechFeature.resumeAudio" method to try to resume it after a user gesture.\');\n }\n };\n\n this._audioContext.onstatechange();\n }\n }\n /**\r\n * Create an Audio object of speech audio for the given speech text.\r\n *\r\n * @private\r\n *\r\n * @param {Object} params - Parameters object compatible with Polly.synthesizeSpeech.\r\n *\r\n * @returns {Promise} Resolves with an object containing the audio URL and Audio\r\n * object.\r\n */\n\n }, {\n key: "_synthesizeAudio",\n value: function _synthesizeAudio(params) {\n var _this3 = this;\n\n return TextToSpeechFeature_get(TextToSpeechFeature_getPrototypeOf(TextToSpeechFeature.prototype), "_synthesizeAudio", this).call(this, params).then(function (result) {\n var url = result.url; // Create an Audio object that points to the presigned url\n\n var audio = new Audio(url);\n audio.loop = _this3.loop;\n audio.crossOrigin = \'anonymous\';\n audio.preload = \'auto\';\n result.audio = audio;\n return new Promise(function (resolve) {\n // Resolve once the minimum amount is loaded\n audio.addEventListener(\'canplaythrough\', function () {\n resolve(result);\n }); // Start loading the audio\n\n document.body.appendChild(audio);\n audio.load();\n });\n });\n }\n /**\r\n * Create a new Speech object for the speaker.\r\n *\r\n * @private\r\n *\r\n * @param {TextToSpeech} speaker - The TextToSpeech instance that will own the speech.\r\n * @param {string} text - Text of the speech.\r\n * @param {Object} speechmarks - Speechmarks for the speech.\r\n * @param {Object} audioConfig - Audio for the speech.\r\n *\r\n * @returns {AbstractSpeech}\r\n */\n\n }, {\n key: "_createSpeech",\n value: function _createSpeech(text, speechmarks, audioConfig) {\n return new awspack_Speech(this, text, speechmarks, audioConfig);\n }\n /**\r\n * Gets whether or not the audio context is running and speech can be played.\r\n *\r\n * @readonly\r\n * @type {boolean}\r\n */\n\n }, {\n key: "enabled",\n get: function get() {\n return this._enabled;\n }\n /**\r\n * Try to resume the audio context. This will be automatically executed each time\r\n * speech is played or resumed. If using manually, it should be called after a\r\n * user interaction occurs.\r\n *\r\n * @returns {Deferred} - Resolves once the audio context has resumed.\r\n */\n\n }, {\n key: "resumeAudio",\n value: function resumeAudio() {\n var _this4 = this;\n\n var promise = new core_Deferred(function (resolve, reject) {\n _this4._audioContext.resume().then(function () {\n _this4._enabled = true;\n resolve();\n })["catch"](function (e) {\n _this4._enabled = false;\n reject(e);\n });\n });\n return promise;\n }\n }, {\n key: "_startSpeech",\n value: function _startSpeech(text, config) {\n var _this5 = this;\n\n var playMethod = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : \'play\';\n var currentPromise = {\n play: new core_Deferred(undefined, function () {\n currentPromise.speech.cancel();\n }, function () {\n currentPromise.speech.cancel();\n }, function () {\n currentPromise.speech.cancel();\n }),\n speech: new core_Deferred()\n };\n this._currentPromise = currentPromise; // Try to start the audio context\n\n this.resumeAudio().then(function () {\n // Exit if the promise is no longer pending because of user interaction\n if (!currentPromise.play.pending) {\n return;\n } // Cancel if another call to play has already been made\n else if (_this5._currentPromise !== currentPromise) {\n currentPromise.play.cancel();\n return;\n } // The audio context is running so the speech can be played\n\n\n if (_this5._enabled) {\n TextToSpeechFeature_get(TextToSpeechFeature_getPrototypeOf(TextToSpeechFeature.prototype), "_startSpeech", _this5).call(_this5, text, config, playMethod);\n } // Reject if the audio context is not running\n else {\n currentPromise.reject(new Error("Cannot ".concat(playMethod, " speech on host ").concat(_this5._host.id, ". The audio context is not running. Use the \\"TextToSpeechFeature.resumeAudio\\" method to try to resume it after a user gesture.")));\n }\n });\n return currentPromise.play;\n }\n }, {\n key: "play",\n value: function play(text, config) {\n return this._startSpeech(text, config, \'play\');\n }\n }, {\n key: "resume",\n value: function resume(text, config) {\n return this._startSpeech(text, config, \'resume\');\n }\n }, {\n key: "installApi",\n value: function installApi() {\n var _this6 = this;\n\n var api = TextToSpeechFeature_get(TextToSpeechFeature_getPrototypeOf(TextToSpeechFeature.prototype), "installApi", this).call(this);\n\n Object.defineProperties(api, {\n /**\r\n * @memberof TextToSpeechFeature\r\n * @instance\r\n * @see core/TextToSpeechFeature#enabled\r\n */\n enabled: {\n get: function get() {\n return _this6._enabled;\n }\n }\n });\n return api;\n }\n }]);\n\n return TextToSpeechFeature;\n}(awspack_AbstractTextToSpeechFeature);\n\n/* harmony default export */ var awspack_TextToSpeechFeature = (TextToSpeechFeature_TextToSpeechFeature);\n// CONCATENATED MODULE: ./src/core/awspack/index.js\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n/**\r\n * @module core/awspack\r\n */\n\n/* harmony default export */ var awspack = ({\n /**\r\n * @see core/TextToSpeechFeature\r\n */\n TextToSpeechFeature: awspack_TextToSpeechFeature,\n\n /**\r\n * @see core/TextToSpeechUtils\r\n */\n TextToSpeechUtils: awspack_TextToSpeechUtils,\n\n /**\r\n * @see core/Speech\r\n */\n Speech: awspack_Speech\n});\n// CONCATENATED MODULE: ./src/core/animpack/index.js\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/**\r\n * @module core/animpack\r\n */\n\n\n\n\n\n\n\n\n\n\n\n/**\r\n * @namespace\r\n */\n\nvar Easing = {\n /**\r\n * @see Linear\r\n */\n Linear: Linear,\n\n /**\r\n * @see Quadratic\r\n */\n Quadratic: Quadratic,\n\n /**\r\n * @see Cubic\r\n */\n Cubic: Cubic,\n\n /**\r\n * @see Quartic\r\n */\n Quartic: Quartic,\n\n /**\r\n * @see Quintic\r\n */\n Quintic: Quintic,\n\n /**\r\n * @see Sinusoidal\r\n */\n Sinusoidal: Sinusoidal,\n\n /**\r\n * @see Exponential\r\n */\n Exponential: Exponential,\n\n /**\r\n * @see Circular\r\n */\n Circular: Circular,\n\n /**\r\n * @see Elastic\r\n */\n Elastic: Elastic,\n\n /**\r\n * @see Back\r\n */\n Back: Back,\n\n /**\r\n * @see Bounce\r\n */\n Bounce: Bounce\n};\n/* harmony default export */ var animpack = ({\n /**\r\n * @see core/AnimationFeature\r\n */\n AnimationFeature: animpack_AnimationFeature,\n\n /**\r\n * @see AnimationLayer\r\n */\n AnimationLayer: animpack_AnimationLayer,\n\n /**\r\n * @see core/SingleState\r\n */\n SingleState: state_SingleState,\n\n /**\r\n * @see TransitionState\r\n */\n TransitionState: state_TransitionState,\n\n /**\r\n * @see FreeBlendState\r\n */\n FreeBlendState: state_FreeBlendState,\n\n /**\r\n * @see QueueState\r\n */\n QueueState: state_QueueState,\n\n /**\r\n * @see RandomAnimationState\r\n */\n RandomAnimationState: state_RandomAnimationState,\n\n /**\r\n * @see Blend1dState\r\n */\n Blend1dState: state_Blend1dState,\n\n /**\r\n * @see Blend2dState\r\n */\n Blend2dState: state_Blend2dState,\n\n /**\r\n * @see AnimationUtils\r\n */\n AnimationUtils: animpack_AnimationUtils,\n Easing: Easing,\n\n /**\r\n * @see LayerBlendModes\r\n */\n LayerBlendModes: LayerBlendModes,\n\n /**\r\n * @see DefaultLayerBlendMode\r\n */\n DefaultLayerBlendMode: DefaultLayerBlendMode,\n\n /**\r\n * @see AnimationTypes\r\n */\n AnimationTypes: AnimationTypes\n});\n// CONCATENATED MODULE: ./src/core/index.js\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/**\r\n * @module core/HOST\r\n */\n\n\n\n\n\n\n\n\n\n\n\n/* harmony default export */ var core = __webpack_exports__["default"] = ({\n /**\r\n * @see env\r\n */\n env: env,\n\n /**\r\n * @see Utils\r\n */\n Utils: core_Utils,\n\n /**\r\n * @see MathUtils\r\n */\n MathUtils: core_MathUtils,\n\n /**\r\n * @see Deferred\r\n */\n Deferred: core_Deferred,\n\n /**\r\n * @see core/Messenger\r\n */\n Messenger: core_Messenger,\n\n /**\r\n * @see core/HostObject\r\n */\n HostObject: core_HostObject,\n\n /**\r\n * @see core/LipsyncFeature\r\n */\n LipsyncFeature: core_LipsyncFeature,\n\n /**\r\n * @see GestureFeature\r\n */\n GestureFeature: core_GestureFeature,\n\n /**\r\n * @see core/PointOfInterestFeature\r\n */\n PointOfInterestFeature: core_PointOfInterestFeature,\n\n /**\r\n * @see DefaultVisemeMap\r\n */\n DefaultVisemeMap: DefaultVisemeMap,\n\n /**\r\n * @see DefaultGestureWords\r\n */\n DefaultGestureWords: DefaultGestureWords,\n\n /**\r\n * @see AxisMap\r\n */\n AxisMap: AxisMap,\n\n /**\r\n * @see module:core/awspack\r\n */\n aws: awspack,\n\n /**\r\n * @see module:core/animpack\r\n */\n anim: animpack\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vc3JjL2NvcmUvRGVmZXJyZWQuanM/Njg4ZSIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL2NvcmUvVXRpbHMuanM/YmYyNCIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL2NvcmUvTWF0aFV0aWxzLmpzPzgxZTciLCJ3ZWJwYWNrOi8vSE9TVC8uL3NyYy9jb3JlL0hvc3RFbnZpcm9ubWVudC5qcz8xNTFkIiwid2VicGFjazovL0hPU1QvLi9zcmMvY29yZS9NZXNzZW5nZXIuanM/ZDAwNiIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL2NvcmUvQWJzdHJhY3RIb3N0RmVhdHVyZS5qcz8yMzZlIiwid2VicGFjazovL0hPU1QvLi9zcmMvY29yZS9Ib3N0T2JqZWN0LmpzPzc1ZTciLCJ3ZWJwYWNrOi8vSE9TVC8uL3NyYy9jb3JlL2FuaW1wYWNrL0Vhc2luZy5qcz81ODZjIiwid2VicGFjazovL0hPU1QvLi9zcmMvY29yZS9GZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlLmpzPzA2YmIiLCJ3ZWJwYWNrOi8vSE9TVC8uL3NyYy9jb3JlL2FuaW1wYWNrL0FuaW1hdGlvbkZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2UuanM/NmU2MyIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL2NvcmUvYW5pbXBhY2svTWFuYWdlZEFuaW1hdGlvbkxheWVySW50ZXJmYWNlLmpzPzQ3ZDUiLCJ3ZWJwYWNrOi8vSE9TVC8uL3NyYy9jb3JlL2F3c3BhY2svVGV4dFRvU3BlZWNoRmVhdHVyZURlcGVuZGVudEludGVyZmFjZS5qcz9iY2FkIiwid2VicGFjazovL0hPU1QvLi9zcmMvY29yZS9MaXBzeW5jRmVhdHVyZS5qcz84ZDNhIiwid2VicGFjazovL0hPU1QvLi9zcmMvY29yZS9hd3NwYWNrL1NTTUxTcGVlY2htYXJrSW50ZXJmYWNlLmpzP2NhNzQiLCJ3ZWJwYWNrOi8vSE9TVC8uL3NyYy9jb3JlL0dlc3R1cmVGZWF0dXJlLmpzP2RiMzkiLCJ3ZWJwYWNrOi8vSE9TVC8uL3NyYy9jb3JlL2FuaW1wYWNrL0FuaW1hdGlvblV0aWxzLmpzPzExNDgiLCJ3ZWJwYWNrOi8vSE9TVC8uL3NyYy9jb3JlL2FuaW1wYWNrL3N0YXRlL0Fic3RyYWN0U3RhdGUuanM/MmY4NyIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL2NvcmUvYW5pbXBhY2svc3RhdGUvVHJhbnNpdGlvblN0YXRlLmpzPzllNzciLCJ3ZWJwYWNrOi8vSE9TVC8uL3NyYy9jb3JlL2FuaW1wYWNrL0FuaW1hdGlvblBsYXllckludGVyZmFjZS5qcz83MzNlIiwid2VicGFjazovL0hPU1QvLi9zcmMvY29yZS9hbmltcGFjay9zdGF0ZS9TdGF0ZUNvbnRhaW5lckludGVyZmFjZS5qcz8yNjU5Iiwid2VicGFjazovL0hPU1QvLi9zcmMvY29yZS9hbmltcGFjay9zdGF0ZS9RdWV1ZVN0YXRlLmpzPzBjNGEiLCJ3ZWJwYWNrOi8vSE9TVC8uL3NyYy9jb3JlL2FuaW1wYWNrL3N0YXRlL0Fic3RyYWN0QmxlbmRTdGF0ZS5qcz82Njk3Iiwid2VicGFjazovL0hPU1QvLi9zcmMvY29yZS9hbmltcGFjay9zdGF0ZS9GcmVlQmxlbmRTdGF0ZS5qcz9kNjc1Iiwid2VicGFjazovL0hPU1QvLi9zcmMvY29yZS9hbmltcGFjay9zdGF0ZS9CbGVuZDFkU3RhdGUuanM/YTc0MiIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL2NvcmUvYW5pbXBhY2svc3RhdGUvQmxlbmQyZFN0YXRlLmpzPzgxNjMiLCJ3ZWJwYWNrOi8vSE9TVC8uL3NyYy9jb3JlL2FuaW1wYWNrL0FuaW1hdGlvbkxheWVyLmpzP2JlZWMiLCJ3ZWJwYWNrOi8vSE9TVC8uL3NyYy9jb3JlL2FuaW1wYWNrL3N0YXRlL1NpbmdsZVN0YXRlLmpzPzRmMTQiLCJ3ZWJwYWNrOi8vSE9TVC8uL3NyYy9jb3JlL2FuaW1wYWNrL3N0YXRlL1JhbmRvbUFuaW1hdGlvblN0YXRlLmpzPzQ0OTMiLCJ3ZWJwYWNrOi8vSE9TVC8uL3NyYy9jb3JlL2FuaW1wYWNrL0FuaW1hdGlvbkZlYXR1cmUuanM/ZWJkZSIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL2NvcmUvUG9pbnRPZkludGVyZXN0RmVhdHVyZS5qcz9kZWU1Iiwid2VicGFjazovL0hPU1QvLi9zcmMvY29yZS9hd3NwYWNrL0Fic3RyYWN0U3BlZWNoLmpzPzdmMWMiLCJ3ZWJwYWNrOi8vSE9TVC8uL3NyYy9jb3JlL2F3c3BhY2svU3BlZWNoLmpzPzJhNDEiLCJ3ZWJwYWNrOi8vSE9TVC8uL3NyYy9jb3JlL2F3c3BhY2svVGV4dFRvU3BlZWNoVXRpbHMuanM/NzU1ZCIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL2NvcmUvYXdzcGFjay9BYnN0cmFjdFRleHRUb1NwZWVjaEZlYXR1cmUuanM/MzQxZiIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL2NvcmUvYXdzcGFjay9UZXh0VG9TcGVlY2hGZWF0dXJlLmpzPzVhODUiLCJ3ZWJwYWNrOi8vSE9TVC8uL3NyYy9jb3JlL2F3c3BhY2svaW5kZXguanM/M2FlMCIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL2NvcmUvYW5pbXBhY2svaW5kZXguanM/OWExMiIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL2NvcmUvaW5kZXguanM/YzdiMiJdLCJuYW1lcyI6WyJEZWZlcnJlZCIsImV4ZWN1dGFibGUiLCJvblJlc29sdmUiLCJvblJlamVjdCIsIm9uQ2FuY2VsIiwiRXJyb3IiLCJyZXMiLCJyZWoiLCJjYW5jZWwiLCJzdGF0dXMiLCJyZXNvbHZlZCIsInJlamVjdGVkIiwiY2FuY2VsZWQiLCJwZW5kaW5nIiwicmVzb2x2ZSIsInJlamVjdCIsInZhbHVlIiwiX3N0YXR1cyIsIl9yZXNvbHZlIiwiX3JlamVjdCIsIl9jYW5jZWwiLCJfZXhlY3V0YWJsZSIsImFyZ3MiLCJpdGVyYWJsZSIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiZSIsImFycmF5IiwiZGVmZXJyZWQiLCJmaWx0ZXIiLCJpdGVtIiwicmVzdWx0IiwidW5kZWZpbmVkIiwicmVzb2x2ZVZhbHVlIiwiZm9yRWFjaCIsImxlbmd0aCIsImVycm9yIiwiY2FuY2VsVmFsdWUiLCJudW1JdGVtcyIsIml0ZW1UcmFja2VyIiwiZmFpbGVkIiwibnVtUmVzb2x2ZWQiLCJyZXNvbHV0aW9ucyIsImluZGV4IiwiUHJvbWlzZSIsInRoZW4iLCJVdGlscyIsInJlcGxhY2UiLCJjIiwicmFuZG9tTnVtYmVyIiwiTWF0aCIsImZsb29yIiwiRGF0ZSIsIm5vdyIsInJhbmRvbSIsInRvU3RyaW5nIiwibmFtZSIsIm5hbWVBcnJheSIsImluY2x1ZGVzIiwibmFtZVNldCIsIlNldCIsIm1hdGNoR3JvdXAiLCJtYXRjaCIsImJhc2VOYW1lIiwic2xpY2UiLCJpbmNyZW1lbnQiLCJOdW1iZXIiLCJzZXROYW1lIiwic2V0TWF0Y2hHcm91cCIsInNldEluY3JlbWVudCIsInNlY29uZHMiLCJvbkZpbmlzaCIsIm9uUHJvZ3Jlc3MiLCJvbkVycm9yIiwiY29uc29sZSIsIndhcm4iLCJjdXJyZW50VGltZSIsInRvdGFsVGltZSIsIm9uVXBkYXRlIiwiZGVsdGFUaW1lIiwibWluIiwibWF4IiwiY2VpbCIsIlJhZGlhblRvRGVncmVlIiwiUEkiLCJEZWdyZWVUb1JhZGlhbiIsIk1hdGhVdGlscyIsInJhZGlhbnMiLCJkZWdyZWVzIiwiZnJvbSIsInRvIiwiZmFjdG9yIiwiYSIsImIiLCJwIiwiZGlzdFNxciIsImRpc3RhbmNlU3F1YXJlZCIsInQiLCJwb2ludCIsInZlcnRpY2VzIiwibWluWCIsIlBPU0lUSVZFX0lORklOSVRZIiwibWluWSIsIm1heFgiLCJORUdBVElWRV9JTkZJTklUWSIsIm1heFkiLCJ2IiwiZFgiLCJkWSIsIm1pZFgiLCJtaWRZIiwiZE1heCIsInN1cGVySW5kaWNlcyIsInZlcnRzV2l0aFN1cGVyIiwic3VwZXJTb3J0ZWRJbmRpY2VzIiwic29ydFBvaW50c0NDVyIsInN1cGVyVHJpYW5nbGUiLCJpbmRpY2VzIiwiZWRnZXMiLCJ0cmlhbmdsZXMiLCJuZXdWZXJ0IiwibmV3SW5kZXgiLCJpbnZhbGlkVHJpYW5nbGVzIiwidHJpYW5nbGUiLCJpc1BvaW50SW5DaXJjdW1DaXJjbGUiLCJwdXNoIiwiYm91bmRpbmdQb2x5IiwiZWRnZSIsImNvdW50Iiwib3RoZXJUcmlhbmdsZSIsIm90aGVyRWRnZSIsInNwbGljZSIsImluZGV4T2YiLCJzb3J0ZWRJbmRpY2VzIiwidHJpYW5nbGVzVG9SZW1vdmUiLCJtYXAiLCJheCIsImF5IiwiYngiLCJieSIsImN4IiwiY3kiLCJkZW5vbSIsImFWYWwiLCJiVmFsIiwiY1ZhbCIsImNlbnRyb2lkIiwic29ydCIsImF0YW4yIiwiYWJzIiwidmVjdG9yIiwiQXJyYXkiLCJyZWR1Y2VyIiwiYWNjdW11bGF0b3IiLCJjdXJyZW50VmFsdWUiLCJzcXJ0IiwicmVkdWNlIiwidmVjdG9yQSIsInZlY3RvckIiLCJ2YWx1ZUEiLCJ2YWx1ZUIiLCJub3JtYWxBIiwibm9ybWFsaXplVmVjdG9yIiwibm9ybWFsQiIsImRvdCIsImdldERvdFByb2R1Y3QiLCJhY29zIiwiY2xhbXAiLCJ2ZWN0b3IzIiwibWF0cml4MyIsImV2ZXJ5IiwieCIsInkiLCJ6IiwibWFnbml0dWRlIiwiZ2V0VmVjdG9yTWFnbml0dWRlIiwiZmlsbCIsIm1hdHJpeDQiLCJzY2FsZVgiLCJzY2FsZVkiLCJzY2FsZVoiLCJyIiwidGFyZ2V0VmFsdWUiLCJ2YWx1ZVN0b3JlIiwic21vb3RoVGltZSIsIm1heFNwZWVkIiwiY2xhbXBUaW1lIiwiZGVsdGFWYWx1ZSIsImNsYW1wRGVsdGFWYWx1ZSIsImxhc3RWYWx1ZSIsImQxIiwiZDIiLCJkMyIsImQ0IiwiZW52IiwiTWVzc2VuZ2VyIiwiaWQiLCJfaWQiLCJjcmVhdGVJZCIsIl9kaXNwYXRjaGVyIiwid2luZG93IiwiX2NhbGxiYWNrcyIsIl9ldmVudExpc3RlbmVycyIsIm1lc3NhZ2UiLCJjYWxsYmFjayIsImRldGFpbCIsIkN1c3RvbUV2ZW50IiwibGlzdGVuZXIiLCJhZGRFdmVudExpc3RlbmVyIiwiX2NyZWF0ZUxvY2FsTWVzc2FnZSIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJfY3JlYXRlTGlzdGVuZXIiLCJfYWRkTGlzdGVuZXIiLCJpIiwic3RvcExpc3RlbmluZyIsIl9yZW1vdmVMaXN0ZW5lciIsInJlZ2V4cCIsIm1lc3NhZ2VzIiwiT2JqZWN0Iiwia2V5cyIsInRlc3QiLCJldmVudCIsIl9jcmVhdGVFdmVudCIsImRpc3BhdGNoRXZlbnQiLCJtZXNzZW5nZXIiLCJHbG9iYWxNZXNzZW5nZXIiLCJsaXN0ZW5UbyIsInN0b3BMaXN0ZW5pbmdUb0FsbCIsImVtaXQiLCJkZWZpbmVQcm9wZXJ0aWVzIiwid3JpdGFibGUiLCJFVkVOVFMiLCJBYnN0cmFjdEhvc3RGZWF0dXJlIiwiaG9zdCIsIl9ob3N0IiwiZXZlbnRzIiwiYXBpIiwiZW50cmllcyIsImNvbnN0cnVjdG9yIiwib3duZXIiLCJzdG9wTGlzdGVuaW5nQnlSZWdleHAiLCJ1cGRhdGUiLCJSZWdFeHAiLCJzb3VyY2UiLCJSZXN1bHRDbGFzcyIsIm1peGluQ2xhc3NGYWN0b3JpZXMiLCJtaXhpbkNsYXNzRmFjdG9yeSIsIlNFUlZJQ0VTIiwiSG9zdE9iamVjdCIsIl9vd25lciIsIl9mZWF0dXJlcyIsIl93YWl0cyIsIl9sYXN0VXBkYXRlIiwiZHQiLCJ3YWl0IiwiZXhlY3V0ZSIsInZhbHVlcyIsImZlYXR1cmUiLCJvbkNvbXBsZXRlIiwiRmVhdHVyZUNsYXNzIiwiZm9yY2UiLCJpbnB1dFR5cGUiLCJwcm90b3R5cGUiLCJpbnN0YWxsQXBpIiwiYWRkRmVhdHVyZSIsInR5cGVOYW1lIiwicmVtb3ZlRmVhdHVyZSIsImRpc2NhcmQiLCJkZWZpbmVQcm9wZXJ0eSIsImdldFByb3RvdHlwZU9mIiwiTGluZWFyIiwiTm9uZSIsImsiLCJJbiIsIk91dCIsIkluT3V0IiwiUXVhZHJhdGljIiwiQ3ViaWMiLCJRdWFydGljIiwiUXVpbnRpYyIsIlNpbnVzb2lkYWwiLCJjb3MiLCJzaW4iLCJFeHBvbmVudGlhbCIsIkNpcmN1bGFyIiwiRWxhc3RpYyIsInMiLCJhc2luIiwiQmFjayIsIkJvdW5jZSIsIkZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2UiLCJCYXNlQ2xhc3MiLCJGZWF0dXJlRGVwZW5kZW50TWl4aW4iLCJfaW5pdGlhbGl6ZWQiLCJfb25GZWF0dXJlQWRkZWQiLCJiaW5kIiwiX29uRmVhdHVyZVJlbW92ZWQiLCJFVkVOVF9ERVBFTkRFTkNJRVMiLCJldmVudE5hbWUiLCJBbmltYXRpb25GZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlIiwib2xkTmFtZSIsIm5ld05hbWUiLCJsYXllck5hbWUiLCJhbmltYXRpb25OYW1lIiwiUGFyZW50Q2xhc3MiLCJNaXhpbiIsIkFuaW1hdGlvbkZlYXR1cmVEZXBlbmRlbnRNaXhpbiIsIkFuaW1hdGlvbkZlYXR1cmUiLCJhZGRMYXllciIsInJlbW92ZUxheWVyIiwicmVuYW1lTGF5ZXIiLCJhZGRBbmltYXRpb24iLCJyZW1vdmVBbmltYXRpb24iLCJyZW5hbWVBbmltYXRpb24iLCJNYW5hZ2VkQW5pbWF0aW9uTGF5ZXJJbnRlcmZhY2UiLCJvcHRpb25zIiwibmFtZUZpbHRlciIsIndlaWdodCIsImVhc2luZ0ZuIiwiTWFuYWdlZEFuaW1hdGlvbkxheWVyTWl4aW4iLCJfbWFuYWdlZExheWVycyIsImxheWVycyIsIl9vbkxheWVyQWRkZWQiLCJfb25MYXllclJlbW92ZWQiLCJpc0FjdGl2ZSIsImdldEFuaW1hdGlvbnMiLCJhbmltTmFtZSIsIl9vbkFuaW1hdGlvbkFkZGVkIiwiYW5pbWF0aW9ucyIsIl9vbkFuaW1hdGlvblJlbW92ZWQiLCJsYXllck9wdGlvbnMiLCJhbmltT3B0aW9ucyIsIkRFRkFVTFRfTEFZRVJfT1BUSU9OUyIsImFuaW1hdGlvbk9wdGlvbnMiLCJhc3NpZ24iLCJyZWdpc3RlckFuaW1hdGlvbiIsInJlZ2lzdGVyTGF5ZXIiLCJsYXllck5hbWVzIiwic2V0TGF5ZXJXZWlnaHQiLCJibGVuZFRpbWUiLCJzZXRMYXllcldlaWdodHMiLCJlbmFibGUiLCJkaXNhYmxlIiwiVGV4dFRvU3BlZWNoRmVhdHVyZURlcGVuZGVudEludGVyZmFjZSIsIlRleHRUb1NwZWVjaEZlYXR1cmVEZXBlbmRlbnRNaXhpbiIsIlRleHRUb1NwZWVjaEZlYXR1cmUiLCJwbGF5IiwicGF1c2UiLCJyZXN1bWUiLCJzdG9wIiwic2VudGVuY2UiLCJ3b3JkIiwidmlzZW1lIiwic3NtbCIsIkRlZmF1bHRWaXNlbWVNYXAiLCJzaWwiLCJvdmVycmlkZVdlaWdodCIsIlMiLCJUIiwiZiIsInUiLCJFIiwibyIsIk8iLCJMaXBzeW5jRmVhdHVyZSIsInZpc2VtZUJsZW5kVGltZSIsImRlY2F5UmF0ZSIsImFtb3VudCIsInZpc2VtZUVhc2luZ0ZuIiwidmlzZW1lTGF5ZXJzIiwidGFsa2luZ0JsZW5kVGltZSIsInRhbGtpbmdFYXNpbmdGbiIsInRhbGtpbmdMYXllcnMiLCJ2aXNlbWVMZWFkVGltZSIsIl92aXNlbWVMYXllcnMiLCJfdGFsa2luZ0xheWVycyIsImFuaW1hdGlvbiIsInZpc2VtZU1hcCIsInJlZ2lzdGVyVmlzZW1lTGF5ZXIiLCJyZWdpc3RlclRhbGtpbmdMYXllciIsImdldEFuaW1hdGlvblR5cGUiLCJ3ZWlnaHROYW1lcyIsImdldEFuaW1hdGlvbkJsZW5kTmFtZXMiLCJ2aXNlbWVPcHRpb25zIiwic3BlZWNobWFya09mZnNldCIsIl92aXNlbWVMZWFkVGltZSIsIl9yZWdpc3RlclZpc2VtZUFuaW1hdGlvbiIsInJlc3VtZUFuaW1hdGlvbiIsIl9vblN0b3AiLCJfb25QbGF5IiwicGF1c2VBbmltYXRpb24iLCJtYXJrIiwiaXNWaXNlbWVBY3RpdmUiLCJ2aXNlbWVOYW1lcyIsImR1cmF0aW9uIiwibGVycEZhY3RvciIsImxlcnAiLCJibGVuZEluVGltZSIsImhvbGRUaW1lIiwiX2FuaW1hdGVTaW1wbGVWaXNlbWUiLCJkZWNheVdlaWdodCIsIl9hbmltYXRlSGVsZFZpc2VtZSIsInZpc2VtZU5hbWUiLCJwZWFrV2VpZ2h0IiwiYmxlbmRPdXRUaW1lIiwid2VpZ2h0UHJvbWlzZSIsInNldEFuaW1hdGlvbkJsZW5kV2VpZ2h0Iiwic3RhcnRQcm9taXNlIiwiaG9sZFByb21pc2UiLCJnZXQiLCJzZXQiLCJtaXgiLCJTU01MU3BlZWNobWFya0ludGVyZmFjZSIsIlNTTUxTcGVlY2hNYXJrTWl4aW4iLCJKU09OIiwicGFyc2UiLCJtZXRob2QiLCJhcHBseSIsIkRlZmF1bHRHZXN0dXJlV29yZHMiLCJiaWciLCJoZWFydCIsIm1hbnkiLCJtb3ZlbWVudCIsIm9uZSIsImFnZ3Jlc3NpdmUiLCJ5b3UiLCJkZWZlbnNlIiwid2F2ZSIsInNlbGYiLCJHZXN0dXJlRmVhdHVyZSIsIm1pbmltdW1JbnRlcnZhbCIsImxheWVyIiwibGF5ZXJIb2xkVGltZSIsImxheWVyTWluaW11bUludGVydmFsIiwiY2FuQWR2YW5jZSIsImlzUXVldWVFbmQiLCJjdXJyZW50R2VzdHVyZSIsIl9nZXRIb2xkVGltZSIsImhvbGRUaW1lciIsInBsYXlOZXh0QW5pbWF0aW9uIiwicGxheVRpbWVyIiwiYXV0b0Rpc2FibGUiLCJhbmltIiwid29yZHMiLCJnZXN0dXJlTWFwIiwidHJhbnNpdGlvblRpbWUiLCJrZXkiLCJzdHJpbmdpZnkiLCJnZW5lcmljR2VzdHVyZXMiLCJyZWFzb24iLCJfZ2V0TWluaW11bUludGVydmFsIiwicGxheUFuaW1hdGlvbiIsImdldFBhdXNlZCIsImNyZWF0ZUdlc3R1cmVNYXAiLCJjcmVhdGVHZW5lcmljR2VzdHVyZUFycmF5IiwicGxheUdlc3R1cmUiLCJzdG9wQW5pbWF0aW9uIiwiaW50ZXJydXB0QW5pbWF0aW9uIiwiQW5pbWF0aW9uVXRpbHMiLCJwcm9wZXJ0eU93bmVyIiwicHJvcGVydHlOYW1lIiwiaXNOYU4iLCJzdGFydFZhbHVlIiwiaW50ZXJwb2xhdG9yIiwicHJvZ3Jlc3MiLCJlYXNlRmFjdG9yIiwiQWJzdHJhY3RTdGF0ZSIsIl93ZWlnaHQiLCJfaW50ZXJuYWxXZWlnaHQiLCJfcGF1c2VkIiwiX3Byb21pc2VzIiwiZmluaXNoIiwiX3BsYXlDYWxsYmFja3MiLCJpbnRlcnBvbGF0ZVByb3BlcnR5IiwicHJvbWlzZSIsImFsbCIsInVwZGF0ZUludGVybmFsV2VpZ2h0IiwiVHJhbnNpdGlvblN0YXRlIiwiX3RvIiwiX2Zyb20iLCJfd2VpZ2h0UHJvbWlzZSIsInRvdGFsV2VpZ2h0Iiwic3RhdGUiLCJjdXJyZW50U3RhdGVzIiwidGFyZ2V0U3RhdGUiLCJkZWFjdGl2YXRlIiwicmVzZXQiLCJ3ZWlnaHRQcm9taXNlcyIsInNldFdlaWdodCIsIm9uTmV4dCIsInByb21pc2VzIiwiQW5pbWF0aW9uUGxheWVySW50ZXJmYWNlIiwiZm4iLCJwbGF5TWV0aG9kIiwiQW5pbWF0aW9uUGxheWVyTWl4aW4iLCJfdHJhbnNpdGlvblN0YXRlIiwiX3N0YXRlcyIsIk1hcCIsIl9jdXJyZW50U3RhdGUiLCJfdHJhbnNpdGlvblRpbWUiLCJfZWFzaW5nRm4iLCJoYXMiLCJjdXJyZW50QW5pbWF0aW9uIiwid2VpZ2h0UGVuZGluZyIsImNvbmZpZ3VyZSIsIl9wcmVwYXJlQ3VycmVudFN0YXRlIiwiU3RhdGVDb250YWluZXJJbnRlcmZhY2UiLCJjdXJyZW50TmFtZSIsIlN0YXRlQ29udGFpbmVyTWl4aW4iLCJ1bmlxdWVOYW1lIiwiZ2V0VW5pcXVlTmFtZSIsIlF1ZXVlU3RhdGUiLCJxdWV1ZVN0YXRlcyIsImFkZFN0YXRlIiwiX3F1ZXVlIiwiX2RvbmUiLCJpbnRlcm5hbFdlaWdodCIsIm5leHQiLCJkb25lIiwid3JhcCIsImxhc3ROYW1lIiwic2l6ZSIsImdldFN0YXRlIiwibG9vcENvdW50IiwiSW5maW5pdHkiLCJpc1RyYW5zaXRpb25pbmciLCJfcmVzZXQiLCJwYXVzZWQiLCJzdG9wcGVkIiwiZGlzY2FyZFN0YXRlcyIsIkFic3RyYWN0QmxlbmRTdGF0ZSIsImJsZW5kU3RhdGVzIiwiYmxlbmRXZWlnaHRzIiwiRnJlZUJsZW5kU3RhdGUiLCJzdW1XZWlnaHRzIiwiQmxlbmQxZFN0YXRlIiwiYmxlbmRUaHJlc2hvbGRzIiwicGhhc2VNYXRjaGVzIiwiX2JsZW5kVmFsdWUiLCJibGVuZFZhbHVlIiwibm9uWmVyb0RpZmZlcmVudFNpemUiLCJjb250YWluc0R1cGxpY2F0ZXMiLCJfdGhyZXNob2xkcyIsInBoYXNlTWF0Y2giLCJfc29ydFRocmVzaG9sZHMiLCJfZm9yY2VOb1RocmVzaG9sZER1cGVzIiwiX3BoYXNlTGVhZFN0YXRlIiwiX3VwZGF0ZUJsZW5kV2VpZ2h0cyIsInRocmVzaG9sZFZhbHVlIiwic2FtZVZhbHVlIiwiZmluZCIsInRocmVzaG9sZCIsInJlbW92ZWQiLCJmaW5kSW5kZXgiLCJub3JtYWxpemVkVGltZSIsInRhcmdldEluZGV4IiwidGhyZXNob2xkQSIsInRocmVzaG9sZEIiLCJmYWN0b3JCIiwiZmFjdG9yQSIsInN0YXRlQSIsInN0YXRlQiIsIkJsZW5kMmRTdGF0ZSIsIm90aGVyVGhyZXNob2xkIiwiX2JsZW5kVmFsdWVYIiwiX2JsZW5kVmFsdWVZIiwiYmxlbmRWYWx1ZVgiLCJibGVuZFZhbHVlWSIsIl92ZXJ0aWNlcyIsIl90cmlhbmdsZXMiLCJnZXREZWxhdW5heVRyaWFuZ3VsYXRpb24iLCJwcm9wZXJ0eSIsInRvVXBwZXJDYXNlIiwiX3NldEluZmx1ZW5jZUNsb3Nlc3RQb2ludE9uTGluZSIsImlzUG9pbnRJblRyaWFuZ2xlIiwiX3NldEluZmx1ZW5jZVRyaWFuZ2xlIiwiX3NldEluZmx1ZW5jZUNsb3Nlc3RQb2ludEluVHJpYW5nbGVzIiwiYXJlYUEiLCJ0cmlhbmdsZUFyZWEiLCJhcmVhQiIsImFyZWFDIiwidG90YWxBcmVhIiwid2VpZ2h0QSIsIndlaWdodEIiLCJ3ZWlnaHRDIiwidGhyZXNob2xkQyIsInN0YXRlQyIsIl9zZXRQaGFzZUxlYWRTdGF0ZSIsImdsb2JhbENsb3Nlc3RQb2ludCIsImdsb2JhbE1pbkRpc3QiLCJjbG9zZXN0VHJpYW5nbGUiLCJwb2ludEEiLCJjbG9zZXN0UG9pbnRPbkxpbmUiLCJwb2ludEIiLCJwb2ludEMiLCJkaXN0QSIsImRpc3RCIiwiZGlzdEMiLCJsb2NhbENsb3Nlc3RQb2ludCIsImxvY2FsTWluRGlzdCIsImNsb3Nlc3RQb2ludCIsInN0YXRlcyIsInBoYXNlTWF0Y2hlZCIsIkxheWVyQmxlbmRNb2RlcyIsIk92ZXJyaWRlIiwiQWRkaXRpdmUiLCJEZWZhdWx0TGF5ZXJCbGVuZE1vZGUiLCJ2YWxpZGF0ZUJsZW5kTW9kZSIsImJsZW5kTW9kZSIsIkFuaW1hdGlvbkxheWVyIiwiX2JsZW5kTW9kZSIsIl93ZWlnaHRQYXVzZWQiLCJpc1dlaWdodEFjdGl2ZSIsImdldFN0YXRlTmFtZXMiLCJibGVuZE5hbWUiLCJzZXRCbGVuZFdlaWdodCIsImdldEJsZW5kV2VpZ2h0IiwiU2luZ2xlU3RhdGUiLCJfdGltZVNjYWxlIiwidGltZVNjYWxlIiwiX2xvb3BDb3VudCIsInRpbWUiLCJSYW5kb21BbmltYXRpb25TdGF0ZSIsInN1YlN0YXRlcyIsIl9wbGF5SW50ZXJ2YWwiLCJwbGF5SW50ZXJ2YWwiLCJnZXRSYW5kb21GbG9hdCIsInBsYXlSYW5kb21BbmltYXRpb24iLCJ0aW1lciIsIl9yZXNldFRpbWVyIiwicmFuZG9tU3RhdGUiLCJnZXRSYW5kb21JbnQiLCJjYW5jZWxBbmltYXRpb24iLCJBbmltYXRpb25UeXBlcyIsInNpbmdsZSIsImZyZWVCbGVuZCIsInF1ZXVlIiwicmFuZG9tQW5pbWF0aW9uIiwiYmxlbmQxZCIsImJsZW5kMmQiLCJfbGF5ZXJzIiwiX2xheWVyTWFwIiwiZXhpc3RpbmciLCJsYXN0SW5kZXgiLCJudW1MYXllcnMiLCJ3ZWlnaHRNdWx0aXBsaWVyIiwiY3VycmVudFN0YXRlIiwiYmxlbmRTdGF0ZU9wdGlvbnMiLCJibGVuZE9wdGlvbnMiLCJfY3JlYXRlU2luZ2xlU3RhdGUiLCJxdWV1ZU9wdGlvbnMiLCJxdWV1ZU9wdGlvbiIsImJsZW5kTWF0Y2hQaGFzZXMiLCJzdWJTdGF0ZU9wdGlvbnMiLCJsYXllckluZGV4IiwiX3ZhbGlkYXRlSW5kZXgiLCJldmVudERhdGEiLCJjdXJyZW50SW5kZXgiLCJnZXRBbmltYXRpb25CbGVuZFdlaWdodCIsInBhdXNlV2VpZ2h0IiwicmVzdW1lV2VpZ2h0IiwiYW5pbWF0aW9uVHlwZSIsIl92YWxpZGF0ZU5ld0FuaW1hdGlvbiIsInJlbW92ZVN0YXRlIiwiY3VycmVudEFuaW1hdGlvbk5hbWUiLCJuZXdBbmltYXRpb25OYW1lIiwicmVuYW1lU3RhdGUiLCJuZXh0UXVldWVkQW5pbWF0aW9uIiwibCIsInJlc3VtZWQiLCJtb3ZlTGF5ZXIiLCJnZXRMYXllcldlaWdodCIsInBhdXNlTGF5ZXJXZWlnaHQiLCJyZXN1bWVMYXllcldlaWdodCIsInBhdXNlTGF5ZXIiLCJyZXN1bWVMYXllciIsImdldFRyYW5zaXRpb25pbmciLCJnZXRDdXJyZW50QW5pbWF0aW9uIiwiX3VwZGF0ZUludGVybmFsV2VpZ2h0cyIsIkF4aXNNYXAiLCJQb3NpdGl2ZVgiLCJOZWdhdGl2ZVgiLCJQb3NpdGl2ZVkiLCJOZWdhdGl2ZVkiLCJQb3NpdGl2ZVoiLCJOZWdhdGl2ZVoiLCJGYWNlVGFyZ2V0VHlwZXMiLCJFeWVDZW50ZXIiLCJFeWVMZWZ0IiwiRXllUmlnaHQiLCJNb3V0aCIsIkZhY2VWZWN0b3JzIiwiTWljcm9TYWNjYWRlV2FpdFJhbmdlcyIsInBvc3RNYWNybyIsIk1hY3JvU2FjY2FkZVdhaXRSYW5nZXMiLCJtb3V0aFRhcmdldCIsImV5ZVRhcmdldCIsIkJsaW5rVGhyZXNob2xkIiwiTWF4RGVsdGEiLCJQb2ludE9mSW50ZXJlc3RGZWF0dXJlIiwidGFyZ2V0IiwibG9va1RyYWNrZXIiLCJzY2VuZSIsImxvb2tCbGVuZFRpbWUiLCJsb29rRWFzaW5nRm4iLCJsb29rTGF5ZXJzIiwiYmxpbmtCbGVuZFRpbWUiLCJibGlua0Vhc2luZ0ZuIiwiYmxpbmtMYXllcnMiLCJfdmFsaWRhdGVUcmFuc2Zvcm1PYmplY3QiLCJfbG9va1RyYWNrZXIiLCJfc2NlbmUiLCJfdGFyZ2V0IiwiX3ByZXZUYXJnZXRQb3MiLCJfaXNUYXJnZXRNb3ZpbmciLCJfbG9va0xheWVycyIsIl90cmFja2luZ0NvbmZpZ3MiLCJfYmxpbmtMYXllcnMiLCJyZWZlcmVuY2UiLCJmb3J3YXJkQXhpcyIsImhhc1NhY2NhZGUiLCJyZWdpc3Rlckxvb2tMYXllciIsInJlZ2lzdGVyQmxpbmtMYXllciIsIl9yZWdpc3Rlckxvb2tBbmltYXRpb24iLCJjb25maWciLCJ0cmFja2luZ0NvbmZpZyIsImFuZ2xlcyIsImgiLCJwcmV2QW5nbGVzIiwic291cmNlUG9zaXRpb24iLCJfZ2V0V29ybGRQb3NpdGlvbiIsInRhcmdldFBvc2l0aW9uIiwibG9va1ZlY3RvciIsInRhcmdldFBvcyIsInRyYWNrZXJQb3MiLCJ0YXJnZXRTcGhlcmljYWwiLCJjYXJ0ZXNpYW5Ub1NwaGVyaWNhbCIsInRhcmdldEFuZ2xlcyIsIl9zcGhlcmljYWxUb0JsZW5kVmFsdWUiLCJyZWZEaXJlY3Rpb24iLCJfZ2V0T2JqZWN0RGlyZWN0aW9uIiwicmVmU3BoZXJpY2FsIiwicmVmQW5nbGVzIiwidGFyZ2V0VHlwZSIsImRpc3RhbmNlIiwiX2dldFRhcmdldERpc3RhbmNlIiwiZmFjZVZlY3RvciIsInNwaGVyaWNhbCIsImJsZW5kVmFsdWVzIiwibWF4SFNwZWVkIiwiZXhwIiwibWF4VlNwZWVkIiwiRDAiLCJkIiwiaER1cmF0aW9uIiwidkR1cmF0aW9uIiwibWljcm9TYWNjYWRlIiwiX3VwZGF0ZUxheWVyU3BlZWQiLCJfaW5pdGlhbGl6ZU1pY3JvVGltZXIiLCJtYWNyb1NhY2NhZGUiLCJtYWNyb1NhY2NhZGVXYWl0UmFuZ2UiLCJoTGltaXQiLCJoRmFjdG9yIiwidkxpbWl0IiwidkZhY3RvciIsInNhY2NhZGVUYXJnZXQiLCJfZ2V0RmFjZVRhcmdldEFuZ2xlcyIsIl9pbml0aWFsaXplTWFjcm9UaW1lciIsIm1pbldhaXRUaW1lIiwibWF4V2FpdFRpbWUiLCJ3YWl0VGltZSIsIm1pY3JvU2FjY2FkZVRpbWVyIiwiX3NldE1pY3JvU2FjY2FkZSIsIm1hY3JvU2FjY2FkZVRpbWVyIiwiX3NldE1hY3JvU2FjY2FkZSIsIl9hZGRUcmFja2luZ0NvbmZpZyIsImhWZWxvY2l0eSIsInZWZWxvY2l0eSIsIl9zZXRMb29rQW5nbGVzIiwiX3Jlc2V0TG9va0FuZ2xlcyIsImRlbHRhU2Vjb25kcyIsInRyaWdnZXJCbGluayIsImN1cnJlbnRIIiwiY3VycmVudFYiLCJ0YXJnZXRIIiwidGFyZ2V0ViIsInByZXZUYXJnZXRIIiwicHJldlRhcmdldFYiLCJjaGFuZ2VBbW91bnQiLCJ0b0RlZ3JlZXMiLCJnZXRBbmdsZUJldHdlZW4iLCJkYW1wVmFsdWUiLCJzZXRUYXJnZXQiLCJzZXRUYXJnZXRCeU5hbWUiLCJzZXRUYXJnZXRCeUlkIiwib2JqIiwiZm9yd2FyZFZlY3RvciIsInJvdGF0aW9uIiwiZ2V0Um90YXRpb25NYXRyaXgiLCJfZ2V0V29ybGRNYXRyaXgiLCJyb3RhdGVWZWN0b3IiLCJ0aGV0YSIsInBoaSIsIkFic3RyYWN0U3BlZWNoIiwic3BlYWtlciIsInRleHQiLCJzcGVlY2htYXJrcyIsIl9zcGVha2VyIiwiX3RleHQiLCJfc3BlZWNobWFya3MiLCJfc3BlZWNobWFya09mZnNldCIsIl9zdGFydFRpbWUiLCJfbG9jYWxUaW1lIiwiX3BhdXNlVGltZSIsIl9wbGF5aW5nIiwiX21hcmtJdGVyIiwiX2N1cnJlbnRNYXJrIiwiX2VuZFRpbWUiLCJfcHJvbWlzZSIsIm9uSW50ZXJydXB0IiwiaW50ZXJydXB0Iiwib2Zmc2V0IiwidHlwZSIsInNwZWVjaCIsIl9jaGVja0ZpbmlzaGVkIiwiX2NyZWF0ZVByb21pc2UiLCJTcGVlY2giLCJhdWRpb0NvbmZpZyIsIl9hdWRpbyIsImF1ZGlvIiwib25lbmRlZCIsIl9hdWRpb0ZpbmlzaGVkIiwidm9sdW1lIiwic2V0VGltZW91dCIsIl9wbGF5QXVkaW8iLCJfcGF1c2VBdWRpbyIsIlRleHRUb1NwZWVjaFV0aWxzIiwicmFuZG9tTWFya3MiLCJpbnRlcm5hbE1hcCIsIl9wcm9jZXNzSW5wdXRNYXAiLCJzcGVha1RhZ3MiLCJzc21sTWFya1JlZ2V4Iiwic3NtbFRhZ1JlZ2V4IiwiZXhpc3RpbmdUYWdzIiwiZXhlYyIsInN0YXJ0IiwiZW5kIiwiY2h1bmtzIiwic3NtbE1hcmtSZXN1bHQiLCJkdXBsaWNhdGVNYXJrVG9DaGVjayIsImV4aXN0aW5nVGFnIiwic3Vic3RyIiwiX2luc2VydE1hcmtzIiwibWFya1RleHQiLCJtYXJrZWRUZXh0Iiwiam9pbiIsImFkZE1hcmtzVG9Vbm1hcmtlZFNlbnRlbmNlcyIsInZhbGlkYXRlVGV4dCIsIm1hcmtzIiwibWFya0luZGljZXMiLCJtYXJrUmVzdWx0Iiwic3NtbFJlc3VsdCIsImNsZWFuZWRUZXh0IiwiZXhpc3RpbmdTc21sIiwid2hpdGVzcGFjZSIsInNlbnRlbmNlRW5kSW5kaWNlcyIsIl9nZXRTZW50ZW5jZUVuZHMiLCJwcmV2SW5kZXgiLCJ0YXJnZXRJbmRpY2VzIiwiY29udGFpbnNNYXJrIiwibWFya0luZGV4IiwicmFuZG9tTWFya2VkVGV4dCIsIl9pbnNlcnRSYW5kb21NYXJrc0F0IiwicmFuZG9tTWFyayIsInNlbnRlbmNlUmVnZXgiLCJlbmRTZW50ZW5jZVJlZ2V4Iiwic2VudGVuY2VFbmRzIiwicHVuY3RSZXN1bHQiLCJkdXBsaWNhdGVzVG9DaGVjayIsIndvcmRSZWdleCIsImxvd2VyQ2FzZVdvcmQiLCJjaGVja0R1cGxpY2F0ZSIsIm1hcmtlZFdvcmRzIiwidG9Mb3dlckNhc2UiLCJleGlzdGluZ01hcmtzIiwibGlzdCIsImlzQXJyYXkiLCJlbmdpbmVzIiwiYXVkaW9Gb3JtYXRzIiwic3BlZWNobWFya1R5cGVzIiwic2FtcGxlUmF0ZXMiLCJtcDMiLCJyYXRlcyIsImRlZmF1bHRzIiwic3RhbmRhcmQiLCJuZXVyYWwiLCJwY20iLCJvZ2dfdm9yYmlzIiwiYXdzVmVyc2lvbiIsIkFic3RyYWN0VGV4dFRvU3BlZWNoRmVhdHVyZSIsInZvaWNlIiwiZW5naW5lIiwibGFuZ3VhZ2UiLCJhdWRpb0Zvcm1hdCIsInNhbXBsZVJhdGUiLCJtaW5FbmRNYXJrRHVyYXRpb24iLCJfc3BlZWNoQ2FjaGUiLCJfY3VycmVudFNwZWVjaCIsIl9jdXJyZW50UHJvbWlzZSIsIl9pc1ZhbGlkYXRlZCIsIl92b2x1bWVQYXVzZWQiLCJfdm9pY2UiLCJQT0xMWV9ERUZBVUxUUyIsIlZvaWNlSWQiLCJfbGFuZ3VhZ2UiLCJMYW5ndWFnZU5hbWUiLCJfZW5naW5lIiwiRW5naW5lIiwiX2F1ZGlvRm9ybWF0IiwiT3V0cHV0Rm9ybWF0IiwiX3NhbXBsZVJhdGUiLCJTYW1wbGVSYXRlIiwiX21pbkVuZE1hcmtEdXJhdGlvbiIsIkFXU19WRVJTSU9OIiwiUE9MTFlfTUlOX05FVVJBTF9WRVJTSU9OIiwiZm9ybWF0IiwicmF0ZSIsInZvaWNlSWQiLCJQT0xMWV9WT0lDRVMiLCJJZCIsIlN1cHBvcnRlZEVuZ2luZXMiLCJsYW5ndWFnZUNvZGUiLCJQT0xMWV9MQU5HVUFHRVMiLCJhdmFpbGFibGVDb2RlcyIsIkxhbmd1YWdlQ29kZSIsIkFkZGl0aW9uYWxMYW5ndWFnZUNvZGVzIiwiUE9MTFlfTEFOR1VBR0VfQ09ERVMiLCJfdmFsaWRhdGVFbmdpbmUiLCJfdmFsaWRhdGVGb3JtYXQiLCJfdmFsaWRhdGVSYXRlIiwiX3ZhbGlkYXRlVm9pY2UiLCJfdmFsaWRhdGVMYW5ndWFnZSIsImlzUmVhZHkiLCJfdmFsaWRhdGUiLCJza2lwU3BlZWNoZXMiLCJjdXJyZW50Q29uZmlnIiwiX2dldENvbmZpZyIsImN1cnJlbnRDb25maWdTdHIiLCJMYW5ndWFnZSIsInZhbGlkQ29uZmlnIiwiY29uZmlnU3RyIiwic3BlZWNoQ29uZmlnU3RyIiwiX3VwZGF0ZVNwZWVjaCIsImF1ZGlvUGFyYW1zIiwiVGV4dCIsIlRleHRUeXBlIiwic3BlZWNobWFya1BhcmFtcyIsIlNwZWVjaE1hcmtUeXBlcyIsIl9zeW50aGVzaXplU3BlZWNobWFya3MiLCJfc3ludGhlc2l6ZUF1ZGlvIiwicmVzdWx0cyIsIl9jcmVhdGVTcGVlY2giLCJwYXJhbXMiLCJwcmVzaWduZXIiLCJnZXRTeW50aGVzaXplU3BlZWNoVXJsIiwidXJsIiwicG9sbHkiLCJzeW50aGVzaXplU3BlZWNoIiwianNvblN0cmluZyIsIkF1ZGlvU3RyZWFtIiwianNvbiIsImRhdGFTdHIiLCJkYXRhIiwiU3RyaW5nIiwiZnJvbUNoYXJDb2RlIiwibWFya1R5cGVzIiwiZW5kTWFya1R5cGVzIiwic3BlZWNoTWFya3MiLCJtYXRjaEFsbCIsIm51bU1hcmtzIiwibGFzdE1hcmsiLCJlbmRUaW1lcyIsImVuZFRpbWUiLCJfdXBkYXRlQ29uZmlnIiwiZ2V0Vm9sdW1lIiwic2V0Vm9sdW1lIiwicGF1c2VWb2x1bWUiLCJyZXN1bWVWb2x1bWUiLCJfdm9sdW1lIiwidm9sdW1lUGVuZGluZyIsInBsYXlpbmciLCJjdXJyZW50UHJvbWlzZSIsIl9nZXRTcGVlY2giLCJfc2V0Q3VycmVudFNwZWVjaCIsIl9zdGFydFNwZWVjaCIsInZlcnNpb24iLCJjdXN0b21Vc2VyQWdlbnQiLCJfd2l0aEN1c3RvbVVzZXJBZ2VudCIsInNlcnZpY2UiLCJfaXNSZWFkeSIsImF2YWlsYWJsZVZvaWNlcyIsImF2YWlsYWJsZUxhbmd1YWdlcyIsImF2YWlsYWJsZUxhbmd1YWdlQ29kZXMiLCJtaW5OZXVyYWxTZGsiLCJkZXNjcmliZVZvaWNlcyIsInJlc3BvbnNlIiwiYWxsQ29kZXMiLCJWb2ljZXMiLCJjb2RlIiwicmVhZHkiLCJjdXJyZW50VXNlckFnZW50Iiwic3VtZXJpYW5Ib3N0c1VzZXJBZ2VudCIsImNvbmNhdCIsIkxleGljb25OYW1lcyIsIl9lbmFibGVkIiwiX3NldEF1ZGlvQ29udGV4dCIsIl9vYnNlcnZlQXVkaW9Db250ZXh0IiwiX2F1ZGlvQ29udGV4dCIsIkF1ZGlvQ29udGV4dCIsIm9uc3RhdGVjaGFuZ2UiLCJBdWRpbyIsImxvb3AiLCJjcm9zc09yaWdpbiIsInByZWxvYWQiLCJkb2N1bWVudCIsImJvZHkiLCJhcHBlbmRDaGlsZCIsImxvYWQiLCJyZXN1bWVBdWRpbyIsImVuYWJsZWQiLCJFYXNpbmciLCJhd3MiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtJQUNNQSxROzs7OztBQUNKO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Usc0JBQWtFO0FBQUE7O0FBQUEsUUFBdERDLFVBQXNELHVFQUF6QyxZQUFNLENBQUUsQ0FBaUM7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QUFTLEVBQVRBLGNBcEJhOztBQXFCYjtBQUNGO0FBQ0E7QUFDRXFELFlBQVUsRUFBVkEsZUF4QmE7O0FBeUJiO0FBQ0Y7QUFDQTtBQUNFb0gsZ0JBQWMsRUFBZEEsbUJBNUJhOztBQTZCYjtBQUNGO0FBQ0E7QUFDRWlFLGdCQUFjLEVBQWRBLG1CQWhDYTs7QUFpQ2I7QUFDRjtBQUNBO0FBQ0U4USx3QkFBc0IsRUFBdEJBLDJCQXBDYTs7QUFxQ2I7QUFDRjtBQUNBO0FBQ0V6VixrQkFBZ0IsRUFBaEJBLGdCQXhDYTs7QUF5Q2I7QUFDRjtBQUNBO0FBQ0VnRSxxQkFBbUIsRUFBbkJBLG1CQTVDYTs7QUE2Q2I7QUFDRjtBQUNBO0FBQ0VxUSxTQUFPLEVBQVBBLE9BaERhOztBQWlEYjtBQUNGO0FBQ0E7QUFDRWdXLEtBQUcsRUFBSEEsT0FwRGE7O0FBcURiO0FBQ0Y7QUFDQTtBQUNFN2tCLE1BQUksRUFBSkEsUUFBSUE7QUF4RFMsQ0FBZiIsImZpbGUiOiIzMzMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cclxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVC0wXHJcblxyXG4vKipcclxuICogVGhlIGJ1aWx0LWluIGNsYXNzIGZvciBhc3luY2hyb25vdXMgUHJvbWlzZXMuXHJcbiAqIEBleHRlcm5hbCBQcm9taXNlXHJcbiAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvUHJvbWlzZVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBBIFByb21pc2Ugb2JqZWN0IHRoYXQgY2FuIGJlIHJlc29sdmVkLCByZWplY3RlZCBvciBjYW5jZWxlZCBhdCBhbnkgdGltZSBieSB0aGVcclxuICogdXNlci5cclxuICpcclxuICogQGV4dGVuZHMgZXh0ZXJuYWw6UHJvbWlzZVxyXG4gKi9cclxuY2xhc3MgRGVmZXJyZWQgZXh0ZW5kcyBQcm9taXNlIHtcclxuICAvKipcclxuICAgKiBAY29uc3RydWN0b3JcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IFtleGVjdXRhYmxlPSgpID0+IHt9XSAtIFRoZSBmdW5jdGlvbiB0byBiZSBleGVjdXRlZCBieSB0aGVcclxuICAgKiBjb25zdHJ1Y3RvciwgZHVyaW5nIHRoZSBwcm9jZXNzIG9mIGNvbnN0cnVjdGluZyB0aGUgcHJvbWlzZS4gVGhlIHNpZ25hdHVyZVxyXG4gICAqIG9mIHRoaXMgaXMgZXhwZWN0ZWQgdG8gYmU6IGV4ZWN1dGFibGUoICByZXNvbHV0aW9uRnVuYywgcmVqZWN0aW9uRnVuYywgY2FuY2VsbGF0aW9uRnVuYyApLlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvblJlc29sdmUgLSBPcHRpb25hbCBmdW5jdGlvbiB0byBleGVjdXRlIG9uY2UgdGhlIHByb21pc2VcclxuICAgKiBpcyByZXNvbHZlZC5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb25SZWplY3QgLSBPcHRpb25hbCBmdW5jdGlvbiB0byBleGVjdXRlIG9uY2UgdGhlIHByb21pc2VcclxuICAgKiBpcyByZWplY3RlZC5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb25DYW5jZWwgLSBPcHRpb25hbCBmdW5jdGlvbiB0byBleGVjdXRlIGlmIHRoZSB1c2VyIGNhbmNlbHNcclxuICAgKiB0aGUgcHJvbWlzZS4gQ2FuY2VsaW5nIHJlc3VsdHMgaW4gdGhlIHByb21pc2UgaGF2aW5nIGEgc3RhdHVzIG9mICdyZXNvbHZlZCcuXHJcbiAgICovXHJcbiAgY29uc3RydWN0b3IoZXhlY3V0YWJsZSA9ICgpID0+IHt9LCBvblJlc29sdmUsIG9uUmVqZWN0LCBvbkNhbmNlbCkge1xyXG4gICAgaWYgKHR5cGVvZiBleGVjdXRhYmxlICE9PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgQ2Fubm90IGNyZWF0ZSBuZXcgRGVmZXJyZWQuIEV4ZWN1dGFibGUgbXVzdCBiZSBhIGZ1bmN0aW9uLmBcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodHlwZW9mIG9uUmVzb2x2ZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIG9uUmVzb2x2ZSAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgYENhbm5vdCBjcmVhdGUgbmV3IERlZmVycmVkLiBPblJlc29sdmUgbXVzdCBiZSBhIGZ1bmN0aW9uLmBcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodHlwZW9mIG9uUmVqZWN0ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygb25SZWplY3QgIT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgIGBDYW5ub3QgY3JlYXRlIG5ldyBEZWZlcnJlZC4gT25SZWplY3QgbXVzdCBiZSBhIGZ1bmN0aW9uLmBcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodHlwZW9mIG9uQ2FuY2VsICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygb25DYW5jZWwgIT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgIGBDYW5ub3QgY3JlYXRlIG5ldyBEZWZlcnJlZC4gT25DYW5jZWwgbXVzdCBiZSBhIGZ1bmN0aW9uLmBcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgcmVzO1xyXG4gICAgbGV0IHJlajtcclxuICAgIGxldCBjYW5jZWw7XHJcbiAgICBjb25zdCBzdGF0dXMgPSB7XHJcbiAgICAgIHJlc29sdmVkOiBmYWxzZSxcclxuICAgICAgcmVqZWN0ZWQ6IGZhbHNlLFxyXG4gICAgICBjYW5jZWxlZDogZmFsc2UsXHJcbiAgICAgIHBlbmRpbmc6IHRydWUsXHJcbiAgICB9O1xyXG5cclxuICAgIHN1cGVyKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgLy8gU3RvcmUgdGhlIHJlc29sdmVyXHJcbiAgICAgIHJlcyA9IHZhbHVlID0+IHtcclxuICAgICAgICBpZiAoc3RhdHVzLnBlbmRpbmcpIHtcclxuICAgICAgICAgIHN0YXR1cy5yZXNvbHZlZCA9IHRydWU7XHJcbiAgICAgICAgICBzdGF0dXMucGVuZGluZyA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgIGlmICh0eXBlb2Ygb25SZXNvbHZlID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIHZhbHVlID0gb25SZXNvbHZlKHZhbHVlKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICByZXR1cm4gcmVzb2x2ZSh2YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9O1xyXG5cclxuICAgICAgLy8gU3RvcmUgdGhlIHJlamVjdGVyXHJcbiAgICAgIHJlaiA9IHZhbHVlID0+IHtcclxuICAgICAgICBpZiAoc3RhdHVzLnBlbmRpbmcpIHtcclxuICAgICAgICAgIHN0YXR1cy5yZWplY3RlZCA9IHRydWU7XHJcbiAgICAgICAgICBzdGF0dXMucGVuZGluZyA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgIGlmICh0eXBlb2Ygb25SZWplY3QgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgdmFsdWUgPSBvblJlamVjdCh2YWx1ZSk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgcmV0dXJuIHJlamVjdCh2YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9O1xyXG5cclxuICAgICAgLy8gU3RvcmUgdGhlIGNhbmNlbGVyXHJcbiAgICAgIGNhbmNlbCA9IHZhbHVlID0+IHtcclxuICAgICAgICBpZiAoc3RhdHVzLnBlbmRpbmcpIHtcclxuICAgICAgICAgIHN0YXR1cy5jYW5jZWxlZCA9IHRydWU7XHJcbiAgICAgICAgICBzdGF0dXMucGVuZGluZyA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgIGlmICh0eXBlb2Ygb25DYW5jZWwgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgdmFsdWUgPSBvbkNhbmNlbCh2YWx1ZSk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgcmV0dXJuIHJlc29sdmUodmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfTtcclxuXHJcbiAgICAgIC8vIFJ1biB0aGUgZXhlY3V0YWJsZSB3aXRoIGN1c3RvbSByZXNvbHZlciBhbmQgcmVqZWN0ZXJcclxuICAgICAgZXhlY3V0YWJsZShyZXMsIHJlaiwgY2FuY2VsKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuX3N0YXR1cyA9IHN0YXR1cztcclxuICAgIHRoaXMuX3Jlc29sdmUgPSByZXM7XHJcbiAgICB0aGlzLl9yZWplY3QgPSByZWo7XHJcbiAgICB0aGlzLl9jYW5jZWwgPSBjYW5jZWw7XHJcbiAgICB0aGlzLl9leGVjdXRhYmxlID0gZXhlY3V0YWJsZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIHJlc29sdmVkIHN0YXRlIG9mIHRoZSBwcm9taXNlLlxyXG4gICAqXHJcbiAgICogQHJlYWRvbmx5XHJcbiAgICovXHJcbiAgZ2V0IHJlc29sdmVkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3N0YXR1cy5yZXNvbHZlZDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIHJlamVjdGVkIHN0YXRlIG9mIHRoZSBwcm9taXNlLlxyXG4gICAqXHJcbiAgICogQHJlYWRvbmx5XHJcbiAgICovXHJcbiAgZ2V0IHJlamVjdGVkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3N0YXR1cy5yZWplY3RlZDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIGNhbmNlbGVkIHN0YXRlIG9mIHRoZSBwcm9taXNlLlxyXG4gICAqXHJcbiAgICogQHJlYWRvbmx5XHJcbiAgICovXHJcbiAgZ2V0IGNhbmNlbGVkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3N0YXR1cy5jYW5jZWxlZDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIHBlbmRpbmcgc3RhdGUgb2YgdGhlIHByb21pc2UuXHJcbiAgICpcclxuICAgKiBAcmVhZG9ubHlcclxuICAgKi9cclxuICBnZXQgcGVuZGluZygpIHtcclxuICAgIHJldHVybiB0aGlzLl9zdGF0dXMucGVuZGluZztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEZvcmNlIHRoZSBwcm9taXNlIHRvIHJlc29sdmUuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge2FueT19IHZhbHVlIC0gVmFsdWUgdG8gcGFzcyB0byB0aGUgcmVzb2x2ZXIuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7YW55fSAtIFRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIHJlc29sdmVyIGZ1bmN0aW9uLlxyXG4gICAqL1xyXG4gIHJlc29sdmUodmFsdWUpIHtcclxuICAgIHJldHVybiB0aGlzLl9yZXNvbHZlKHZhbHVlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEZvcmNlIHRoZSBwcm9taXNlIHRvIHJlamVjdC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7YW55PX0gdmFsdWUgLSBWYWx1ZSB0byBwYXNzIHRvIHRoZSByZWplY3Rlci5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHthbnl9IC0gVGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgcmVqZWN0ZXIgZnVuY3Rpb24uXHJcbiAgICovXHJcbiAgcmVqZWN0KHZhbHVlKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fcmVqZWN0KHZhbHVlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEZvcmNlIHRoZSBwcm9taXNlIHRvIHJlc29sdmUgYW5kIHNldCB0aGUgY2FuY2VsZWQgc3RhdGUgdG8gdHJ1ZS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7YW55PX0gdmFsdWUgLSBWYWx1ZSB0byBwYXNzIHRvIHRoZSBjYW5jZWxsZXIuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7YW55fSAtIFRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGNhbmNlbGxlciBmdW5jdGlvbi5cclxuICAgKi9cclxuICBjYW5jZWwodmFsdWUpIHtcclxuICAgIHJldHVybiB0aGlzLl9jYW5jZWwodmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUnVuIHRoZSBwcm9taXNlIGZ1bmN0aW9uIHRvIHRyeSB0byByZXNvbHZlIHRoZSBwcm9taXNlLiBQcm9taXNlIG11c3QgYmVcclxuICAgKiBwZW5kaW5nLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHsuLi5hbnl9IGFyZ3MgLSBPcHRpb25hbCBhcmd1bWVudHMgdG8gcGFzcyBhZnRlciByZXNvbHZlIGFuZCByZWplY3QuXHJcbiAgICovXHJcbiAgZXhlY3V0ZSguLi5hcmdzKSB7XHJcbiAgICBpZiAodGhpcy5wZW5kaW5nKSB7XHJcbiAgICAgIHRoaXMuX2V4ZWN1dGFibGUodGhpcy5fcmVzb2x2ZSwgdGhpcy5fcmVqZWN0LCB0aGlzLl9jYW5jZWwsIC4uLmFyZ3MpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIGEgY2FuY2VsZWQgZGVmZXJyZWQgcHJvbWlzZS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7YW55PX0gdmFsdWUgLSBWYWx1ZSB0byBjYW5jZWwgdGhlIHByb21pc2Ugd2l0aC5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtEZWZlcnJlZH1cclxuICAgKi9cclxuICBzdGF0aWMgY2FuY2VsKHZhbHVlKSB7XHJcbiAgICByZXR1cm4gbmV3IERlZmVycmVkKChfcmVzb2x2ZSwgX3JlamVjdCwgY2FuY2VsKSA9PiB7XHJcbiAgICAgIGNhbmNlbCh2YWx1ZSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWZlcnJlZCBwcm9taXNlIHRoYXQgd2lsbCByZXNvbHZlIG9yIHJlamVjdCBvbmNlIGFsbCBwcm9taXNlc1xyXG4gICAqIGluIHRoZSBpbnB1dCBhcnJheSBoYXZlIGJlZW4gcmVzb2x2ZWQgb3Igb25lIHByb21pc2UgaXMgY2FuY2VsZWQgb3IgcmVqZWN0ZWQuXHJcbiAgICogUHJvbWlzZXMgaW4gdGhlIGFycmF5IHRoYXQgYXJlIERlZmVycmVkIHByb21pc2VzIHdpbGwgYmUgbWFudWFsbHkgcmVzb2x2ZWQsXHJcbiAgICogcmVqZWN0ZWQgb3IgY2FuY2VsZWQgd2hlbiBjYWxsaW5nIHJlc29sdmUsIHJlamVjdCBvciBjYW5jZWwgb24gdGhlIHJldHVybiBwcm9taXNlLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtBcnJheS48YW55Pn0gaXRlcmFibGUgLSBBbiBpdGVyYWJsZSBzdWNoIGFzIGFuIGFycmF5LlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvblJlc29sdmUgLSBPcHRpb25hbCBmdW5jdGlvbiB0byBleGVjdXRlIG9uY2UgdGhlIHByb21pc2VcclxuICAgKiBpcyByZXNvbHZlZC5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb25SZWplY3QgLSBPcHRpb25hbCBmdW5jdGlvbiB0byBleGVjdXRlIG9uY2UgdGhlIHByb21pc2VcclxuICAgKiBpcyByZWplY3RlZC5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb25DYW5jZWwgLSBPcHRpb25hbCBmdW5jdGlvbiB0byBleGVjdXRlIGlmIHRoZSB1c2VyIGNhbmNlbHNcclxuICAgKiB0aGUgcHJvbWlzZS4gQ2FuY2VsaW5nIHJlc3VsdHMgaW4gdGhlIHByb21pc2UgaGF2aW5nIGEgc3RhdHVzIG9mICdjYW5jZWxlZCcuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyBEZWZlcnJlZFxyXG4gICAqL1xyXG4gIHN0YXRpYyBhbGwoaXRlcmFibGUsIG9uUmVzb2x2ZSwgb25SZWplY3QsIG9uQ2FuY2VsKSB7XHJcbiAgICBpZiAoaXRlcmFibGUgPT0gbnVsbCB8fCB0eXBlb2YgaXRlcmFibGVbU3ltYm9sLml0ZXJhdG9yXSAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICBsZXQgZSA9IGBDYW5ub3QgZXhlY3V0ZSBEZWZlcnJlZC5hbGwuIEZpcnN0IGFyZ3VtZW50IG11c3QgYmUgaXRlcmFibGUuYDtcclxuXHJcbiAgICAgIGlmICh0eXBlb2Ygb25SZWplY3QgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICBlID0gb25SZWplY3QoZSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBEZWZlcnJlZC5yZWplY3QoZSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgYXJyYXkgPSBbLi4uaXRlcmFibGVdO1xyXG4gICAgY29uc3QgZGVmZXJyZWQgPSBhcnJheS5maWx0ZXIoaXRlbSA9PiBpdGVtIGluc3RhbmNlb2YgRGVmZXJyZWQpO1xyXG5cclxuICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBEZWZlcnJlZChcclxuICAgICAgdW5kZWZpbmVkLFxyXG4gICAgICByZXNvbHZlVmFsdWUgPT4ge1xyXG4gICAgICAgIGRlZmVycmVkLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgICBpdGVtLnJlc29sdmUocmVzb2x2ZVZhbHVlKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBkZWZlcnJlZC5sZW5ndGggPSAwO1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIG9uUmVzb2x2ZSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgcmV0dXJuIG9uUmVzb2x2ZShyZXNvbHZlVmFsdWUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICByZXR1cm4gcmVzb2x2ZVZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgZXJyb3IgPT4ge1xyXG4gICAgICAgIGRlZmVycmVkLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgICBpdGVtLnJlamVjdChlcnJvcik7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgZGVmZXJyZWQubGVuZ3RoID0gMDtcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiBvblJlamVjdCA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgcmV0dXJuIG9uUmVqZWN0KGVycm9yKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmV0dXJuIGVycm9yO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgY2FuY2VsVmFsdWUgPT4ge1xyXG4gICAgICAgIGRlZmVycmVkLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgICBpdGVtLmNhbmNlbChjYW5jZWxWYWx1ZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgZGVmZXJyZWQubGVuZ3RoID0gMDtcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiBvbkNhbmNlbCA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgcmV0dXJuIG9uQ2FuY2VsKGNhbmNlbFZhbHVlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmV0dXJuIGNhbmNlbFZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCBudW1JdGVtcyA9IGFycmF5Lmxlbmd0aDtcclxuICAgIGNvbnN0IGl0ZW1UcmFja2VyID0ge1xyXG4gICAgICBmYWlsZWQ6IGZhbHNlLFxyXG4gICAgICBudW1SZXNvbHZlZDogMCxcclxuICAgICAgcmVzb2x1dGlvbnM6IFtdXHJcbiAgICB9XHJcblxyXG4gICAgYXJyYXkuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcclxuICAgICAgaWYgKGl0ZW1UcmFja2VyLmZhaWxlZCkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfSBlbHNlIGlmICghKGl0ZW0gaW5zdGFuY2VvZiBQcm9taXNlKSkge1xyXG4gICAgICAgIGl0ZW1UcmFja2VyLnJlc29sdXRpb25zW2luZGV4XSA9IGl0ZW07XHJcbiAgICAgICAgaXRlbVRyYWNrZXIubnVtUmVzb2x2ZWQgKz0gMTtcclxuXHJcbiAgICAgICAgaWYgKGl0ZW1UcmFja2VyLm51bVJlc29sdmVkID09PSBudW1JdGVtcykge1xyXG4gICAgICAgICAgcmVzdWx0LnJlc29sdmUoaXRlbVRyYWNrZXIucmVzb2x1dGlvbnMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGl0ZW0udGhlbihcclxuICAgICAgICB2YWx1ZSA9PiB7XHJcbiAgICAgICAgICBpZiAoIWl0ZW1UcmFja2VyLmZhaWxlZCAmJiAhaXRlbS5jYW5jZWxlZCkge1xyXG4gICAgICAgICAgICBpdGVtVHJhY2tlci5yZXNvbHV0aW9uc1tpbmRleF0gPSB2YWx1ZTtcclxuICAgICAgICAgICAgaXRlbVRyYWNrZXIubnVtUmVzb2x2ZWQgKz0gMTtcclxuXHJcbiAgICAgICAgICAgIGlmIChpdGVtVHJhY2tlci5udW1SZXNvbHZlZCA9PT0gbnVtSXRlbXMpIHtcclxuICAgICAgICAgICAgICByZXN1bHQucmVzb2x2ZShpdGVtVHJhY2tlci5yZXNvbHV0aW9ucyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSBpZiAoIWl0ZW1UcmFja2VyLmZhaWxlZCkge1xyXG4gICAgICAgICAgICBpdGVtVHJhY2tlci5mYWlsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICByZXN1bHQuY2FuY2VsKHZhbHVlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yID0+IHtcclxuICAgICAgICAgIGlmICghaXRlbVRyYWNrZXIuZmFpbGVkKSB7XHJcbiAgICAgICAgICAgIGl0ZW1UcmFja2VyLmZhaWxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHJlc3VsdC5yZWplY3QoZXJyb3IpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBEZWZlcnJlZDtcclxuIiwiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXHJcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxyXG5pbXBvcnQgRGVmZXJyZWQgZnJvbSAnY29yZS9EZWZlcnJlZCc7XHJcblxyXG4vKipcclxuICogQSBjb2xsZWN0aW9uIG9mIHVzZWZ1bCBnZW5lcmljIGZ1bmN0aW9ucy5cclxuICpcclxuICogQGhpZGVjb25zdHJ1Y3RvclxyXG4gKi9cclxuY2xhc3MgVXRpbHMge1xyXG4gIC8qKlxyXG4gICAqIEBzdGF0aWNcclxuICAgKlxyXG4gICAqIEdlbmVyYXRlIGEgdW5pcXVlIGlkXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7U3RyaW5nfVxyXG4gICAqL1xyXG4gIHN0YXRpYyBjcmVhdGVJZCgpIHtcclxuICAgIHJldHVybiAneHh4eHh4eHh4eHh4NHh4eHl4eHh4eHh4eHh4eHh4eHgnLnJlcGxhY2UoL1t4eV0vZywgYyA9PiB7XHJcbiAgICAgIGNvbnN0IHJhbmRvbU51bWJlciA9IE1hdGguZmxvb3IoKERhdGUubm93KCkgKyBNYXRoLnJhbmRvbSgpICogMTYpICUgMTYpO1xyXG4gICAgICBpZiAoYyA9PT0gJ3gnKSB7XHJcbiAgICAgICAgcmV0dXJuIHJhbmRvbU51bWJlci50b1N0cmluZygxNik7XHJcbiAgICAgIH1cclxuICAgICAgLy8gU2V0IGJpdCA2IGFuZCA3IHRvIDAgYW5kIDFcclxuICAgICAgcmV0dXJuICgocmFuZG9tTnVtYmVyICYgMHgzKSB8IDB4OCkudG9TdHJpbmcoMTYpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAc3RhdGljXHJcbiAgICpcclxuICAgKiBDaGVjayBhIG5hbWUgc3RyaW5nIGFnYWluc3QgYW4gYXJyYXkgb2Ygc3RyaW5ncyB0byBkZXRlcm1pbmUgaWYgaXQgaXMgdW5pcXVlLlxyXG4gICAqIElmIGl0IGlzbid0LCBhcHBlbmQgaW5jcmVtZW50ZWQgdHJhaWxpbmcgaW50ZWdlcnMgdG8gdGhlIGVuZCBvZiB0aGUgbmFtZVxyXG4gICAqIHVudGlsIGl0IGlzIHVuaXF1ZS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gU3RyaW5nIG5hbWUgdG8gbWFrZSB1bmlxdWUuXHJcbiAgICogQHBhcmFtIHtBcnJheS48c3RyaW5nPj19IG5hbWVBcnJheSAtIEFycmF5IG9mIHN0cmluZyBuYW1lcyB0byBjaGVjayBhZ2FpbnMuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxyXG4gICAqL1xyXG4gIHN0YXRpYyBnZXRVbmlxdWVOYW1lKG5hbWUsIG5hbWVBcnJheSA9IFtdKSB7XHJcbiAgICAvLyBJZiB0aGUgbmFtZSBpc24ndCBpbiB0aGUgYXJyYXkgcmV0dXJuIGl0IHJpZ2h0IGF3YXlcclxuICAgIGlmICghbmFtZUFycmF5LmluY2x1ZGVzKG5hbWUpKSB7XHJcbiAgICAgIHJldHVybiBuYW1lO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IG5hbWVTZXQgPSBuZXcgU2V0KG5hbWVBcnJheSk7XHJcblxyXG4gICAgLy8gU2VwYXJhdGUgdGhlIG5hbWUgaW50byBzdHJpbmcgYW5kIHRyYWlsaW5nIG51bWJlcnNcclxuICAgIGNvbnN0IG1hdGNoR3JvdXAgPSBuYW1lLm1hdGNoKC9cXGQqJC8pO1xyXG4gICAgY29uc3Qge2luZGV4fSA9IG1hdGNoR3JvdXA7XHJcbiAgICBjb25zdCBiYXNlTmFtZSA9IG5hbWUuc2xpY2UoMCwgaW5kZXgpO1xyXG4gICAgbGV0IGluY3JlbWVudCA9IE51bWJlcihtYXRjaEdyb3VwWzBdKTtcclxuXHJcbiAgICAvLyBGaW5kIHRoZSBoaWdoZXN0IHRyYWlsaW5nIG51bWJlciB2YWx1ZSBmb3IgdGhlIGJhc2Ugb2YgdGhlIG5hbWVcclxuICAgIG5hbWVTZXQuZm9yRWFjaChzZXROYW1lID0+IHtcclxuICAgICAgY29uc3Qgc2V0TWF0Y2hHcm91cCA9IHNldE5hbWUubWF0Y2goL1xcZCokLyk7XHJcblxyXG4gICAgICBpZiAoc2V0TmFtZS5zbGljZSgwLCBzZXRNYXRjaEdyb3VwLmluZGV4KSA9PT0gYmFzZU5hbWUpIHtcclxuICAgICAgICBjb25zdCBzZXRJbmNyZW1lbnQgPSBOdW1iZXIoc2V0TWF0Y2hHcm91cFswXSk7XHJcblxyXG4gICAgICAgIGlmIChzZXRJbmNyZW1lbnQgPiBpbmNyZW1lbnQpIHtcclxuICAgICAgICAgIGluY3JlbWVudCA9IHNldEluY3JlbWVudDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIC8vIEluY3JlbWVudCB0aGUgaGlnaGVzdCB0cmFpbGluZyBudW1iZXIgYW5kIGFwcGVuZCB0byB0aGUgbmFtZVxyXG4gICAgcmV0dXJuIGAke2Jhc2VOYW1lfSR7aW5jcmVtZW50ICsgMX1gO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIGEgZGVmZXJyZWQgcHJvbWlzZSB0aGF0IHdpbGwgd2FpdCBhIGdpdmVuIG51bWJlciBvZiBzZWNvbmRzIGJlZm9yZVxyXG4gICAqIHJlc29sdmluZy4gUGFzcyBkZWx0YSB0aW1lIGluIG1pbGxpc2Vjb25kcyB0byB0aGUgZGVmZXJyZWQgcHJvbWlzZSdzIGV4ZWN1dGVcclxuICAgKiBtZXRob2QgaW4gYW4gdXBkYXRlIGxvb3AgdG8gcHJvZ3Jlc3MgdGltZS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbc2Vjb25kcz0wXSAtIE51bWJlciBvZiBzZWNvbmRzIHRvIHdhaXQgYmVmb3JlIHJlc29sdmluZy5cclxuICAgKiBAcGFyYW0ge09iamVjdD19IG9wdGlvbnMgLSBPcHRpb25hbCBvcHRpb25zIG9iamVjdFxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRpb25zLm9uRmluaXNoXSAtIENhbGxiYWNrIHRvIGV4ZWN1dGUgb25jZSB0aGUgd2FpdCB0aW1lXHJcbiAgICogaXMgbWV0LlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvcHRpb25zLm9uUHJvZ3Jlc3MgLSBDYWxsYmFjayB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgd2FpdFxyXG4gICAqIHRpbWUgcHJvZ3Jlc3NlcyB0b3dhcmRzIHRoZSB0YXJnZXQgbnVtYmVyIG9mIHNlY29uZHMuIFRoZSBhbW91bnQgb2YgcHJvZ3Jlc3NcclxuICAgKiBhcyBhIDAtMSBwZXJjZW50YWdlIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudC5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb3B0aW9ucy5vbkNhbmNlbCAtIENhbGxiYWNrIHRvIGV4ZWN1dGUgaWYgdGhlIHVzZXIgY2FuY2Vsc1xyXG4gICAqIHRoZSB3YWl0IGJlZm9yZSBjb21wbGV0aW9uLlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvcHRpb25zLm9uRXJyb3IgLSBDYWxsYmFjayB0byBleGVjdXRlIGlmIHRoZSB3YWl0IHN0b3BzXHJcbiAgICogYmVjYXVzZSBhbiBlcnJvciBpcyBlbmNvdW50ZXJlZC4gVGhlIGVycm9yIG1lc3NhZ2UgaXMgcGFzc2VkIGFzIGEgcGFyYW1ldGVyLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0RlZmVycmVkfVxyXG4gICAqL1xyXG4gIHN0YXRpYyB3YWl0KHNlY29uZHMgPSAwLCB7b25GaW5pc2gsIG9uUHJvZ3Jlc3MsIG9uQ2FuY2VsLCBvbkVycm9yfSA9IHt9KSB7XHJcbiAgICAvLyBNYWtlIHN1cmUgc2Vjb25kcyBpcyBudW1lcmljXHJcbiAgICBpZiAodHlwZW9mIHNlY29uZHMgIT09ICdudW1iZXInKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICBgSW52YWxpZCBzZWNvbmRzIHZhbHVlICR7c2Vjb25kc30gZm9yIHdhaXQuIERlZmF1bHRpbmcgdG8gMC5gXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBzZWNvbmRzID0gMDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBSZXNvbHZlIGltbWVkaWF0ZWx5IGlmIHRoZSB3YWl0IHRpbWUgaXMgbm90IGdyZWF0ZXIgdGhhbiAwXHJcbiAgICBpZiAoc2Vjb25kcyA8PSAwKSB7XHJcbiAgICAgIGlmICh0eXBlb2Ygb25GaW5pc2ggPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICBvbkZpbmlzaCgpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gRGVmZXJyZWQucmVzb2x2ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBjdXJyZW50VGltZSA9IDA7XHJcbiAgICBjb25zdCB0b3RhbFRpbWUgPSBzZWNvbmRzICogMTAwMDsgLy8gY29udmVydCB0byBtaWxsaXNlY29uZHNcclxuXHJcbiAgICAvLyBFeGVjdXRhYmxlIHRvIHBhc3MgdG8gRGVmZXJyZWQsIG1lYW50IHRvIGJlIHJ1biBpbiBhbiB1cGRhdGUgbG9vcFxyXG4gICAgY29uc3Qgb25VcGRhdGUgPSAocmVzb2x2ZSwgcmVqZWN0LCBfY2FuY2VsLCBkZWx0YVRpbWUgPSAwKSA9PiB7XHJcbiAgICAgIGlmICh0eXBlb2YgZGVsdGFUaW1lICE9PSAnbnVtYmVyJykge1xyXG4gICAgICAgIGNvbnN0IGUgPSBuZXcgRXJyb3IoXHJcbiAgICAgICAgICBgSW52YWxpZCBwcm9wZXJ0eSB3YWl0IGRlbHRhVGltZS4gRGVsdGFUaW1lIG11c3QgYmUgYSBudW1iZXIuYFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgcmVqZWN0KGUpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gTWFrZSBzdXJlIHRpbWUgaGFzIHBhc3NlZFxyXG4gICAgICBpZiAoZGVsdGFUaW1lID09PSAwKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBTaWduYWwgcHJvZ3Jlc3NcclxuICAgICAgY3VycmVudFRpbWUgKz0gZGVsdGFUaW1lO1xyXG4gICAgICBpZiAoY3VycmVudFRpbWUgPCAwKSB7XHJcbiAgICAgICAgY3VycmVudFRpbWUgPSAwO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodHlwZW9mIG9uUHJvZ3Jlc3MgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICBvblByb2dyZXNzKE1hdGgubWluKGN1cnJlbnRUaW1lIC8gdG90YWxUaW1lLCAxKSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIFNpZ25hbCBjb21wbGV0aW9uIG9uY2UgdGltZSBpcyB1cFxyXG4gICAgICBpZiAoY3VycmVudFRpbWUgPj0gdG90YWxUaW1lKSB7XHJcbiAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiBuZXcgRGVmZXJyZWQob25VcGRhdGUsIG9uRmluaXNoLCBvbkVycm9yLCBvbkNhbmNlbCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgICogR2V0IGEgcmFuZG9tIGZsb2F0IG51bWJlciBiZXR3ZWVuIGEgbWluIChpbmNsdXNpdmUpIGFuZCBtYXggKGV4Y2x1c2l2ZSkgdmFsdWVcclxuICAgICogQHBhcmFtIHtudW1iZXJ9IG1pbiBtaW5pbXVtIHZhbHVlXHJcbiAgICAqIEBwYXJhbSB7bnVtYmVyfSBtYXggbWF4aW11bSB2YWx1ZVxyXG4gICAgKiBAcmV0dXJucyB7ZmxvYXR9XHJcbiAgICAqL1xyXG4gIHN0YXRpYyBnZXRSYW5kb21GbG9hdChtaW4sIG1heCkge1xyXG4gICAgcmV0dXJuIE1hdGgucmFuZG9tKCkgKiAobWF4IC0gbWluKSArIG1pbjtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAgKiBHZXQgYSByYW5kb20gaW50ZWdlciBudW1iZXIgYmV0d2VlbiBhIG1pbiAoaW5jbHVzaXZlKSBhbmQgbWF4IChleGNsdXNpdmUpIHZhbHVlXHJcbiAgICAqIEBwYXJhbSB7bnVtYmVyfSBtaW4gbWluaW11bSB2YWx1ZVxyXG4gICAgKiBAcGFyYW0ge251bWJlcn0gbWF4IG1heGltdW0gdmFsdWVcclxuICAgICogQHJldHVybnMge2ludGVnZXJ9XHJcbiAgICAqL1xyXG4gIHN0YXRpYyBnZXRSYW5kb21JbnQobWluLCBtYXgpIHtcclxuICAgIG1pbiA9IE1hdGguY2VpbChtaW4pO1xyXG4gICAgbWF4ID0gTWF0aC5mbG9vcihtYXgpO1xyXG4gICAgcmV0dXJuIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIChtYXggLSBtaW4pKSArIG1pbjtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IFV0aWxzO1xyXG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxuY29uc3QgUmFkaWFuVG9EZWdyZWUgPSAxODAgLyBNYXRoLlBJO1xuY29uc3QgRGVncmVlVG9SYWRpYW4gPSBNYXRoLlBJIC8gMTgwO1xuXG4vKipcbiAqIEEgY29sbGVjdGlvbiBvZiB1c2VmdWwgbWF0aCBmdW5jdGlvbnMuXG4gKlxuICogQGhpZGVjb25zdHJ1Y3RvclxuICovXG5jbGFzcyBNYXRoVXRpbHMge1xuICAvKipcbiAgICogQ29udmVydCB0aGUgZ2l2ZW4gYW5nbGUgZnJvbSByYWRpYW5zIHRvIGRlZ3JlZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSByYWRpYW5zIC0gQW5nbGUgaW4gcmFkaWFucy5cbiAgICpcbiAgICogQHJldHVybnMge251bWJlcn0gLSBBbmdsZSBpbiBkZWdyZWVzLlxuICAgKi9cbiAgc3RhdGljIHRvRGVncmVlcyhyYWRpYW5zKSB7XG4gICAgcmV0dXJuIHJhZGlhbnMgKiBSYWRpYW5Ub0RlZ3JlZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0IHRoZSBnaXZlbiBhbmdsZSBmcm9tIGRlZ3JlZXMgdG8gcmFkaWFucy5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGRlZ3JlZXMgLSBBbmdsZSBpbiBkZWdyZWVzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSAtIEFuZ2xlIGluIHJhZGlhbnMuXG4gICAqL1xuICBzdGF0aWMgdG9SYWRpYW5zKGRlZ3JlZXMpIHtcbiAgICByZXR1cm4gZGVncmVlcyAqIERlZ3JlZVRvUmFkaWFuO1xuICB9XG5cbiAgLyoqXG4gICAqIExpbmVhcmx5IGludGVycG9sYXRlIGJldHdlZW4gdHdvIHZhbHVlcy5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGZyb20gLSBTdGFydCB2YWx1ZS5cbiAgICogQHBhcmFtIHtudW1iZXJ9IHRvIC0gVGFyZ2V0IHZhbHVlLlxuICAgKiBAcGFyYW0ge251bWJlcn0gZmFjdG9yIC0gMC0xIGFtb3VudCB0byBpbnRlcnBvbGF0ZSBiZXR3ZWVuIGZyb20gYW5kIHRvLlxuICAgKlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgc3RhdGljIGxlcnAoZnJvbSwgdG8sIGZhY3Rvcikge1xuICAgIHJldHVybiBmcm9tICsgKHRvIC0gZnJvbSkgKiBmYWN0b3I7XG4gIH1cblxuICAvKipcbiAgICogQ2xhbXAgYSBudW1iZXIgYmV0d2VlbiAyIHZhbHVlcy5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIC0gVmFsdWUgdG8gY2xhbXAuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbbWluPTBdIC0gTWludW11bSB2YWx1ZS5cbiAgICogQHBhcmFtIHtudW1iZXJ9IFttYXg9MV0gLSBNYXhpbXVtIHZhbHVlLlxuICAgKlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgc3RhdGljIGNsYW1wKHZhbHVlLCBtaW4gPSAwLCBtYXggPSAxKSB7XG4gICAgcmV0dXJuIE1hdGgubWF4KG1pbiwgTWF0aC5taW4odmFsdWUsIG1heCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZXMgdGhlIGNsb3Nlc3QgcG9pbnQgb24gYSBnaXZlbiAyRCBsaW5lIHNlZ2VtZW50XG4gICAqIGZyb20gYSBnaXZlbiAyRCBwb2ludC5cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gYSAtIEZpcnN0IHBvaW50IG9uIGxpbmUgc2VnbWVudC5cbiAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gYiAtIFNlY29uZCBwb2ludCBvbiBsaW5lIHNlZ21lbnQuXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IHAgLSAyRCBwb2ludC5cbiAgICpcbiAgICogQHJldHVybnMge0FycmF5LjxudW1iZXI+fVxuICAgKi9cbiAgc3RhdGljIGNsb3Nlc3RQb2ludE9uTGluZShhLCBiLCBwKSB7XG4gICAgY29uc3QgZGlzdFNxciA9IE1hdGhVdGlscy5kaXN0YW5jZVNxdWFyZWQoYSwgYik7XG5cbiAgICAvLyBMaW5lIHNlZ21lbnQgaXMgYSBzaW5nbGUgcG9pbnRcbiAgICBpZiAoZGlzdFNxciA9PT0gMCkge1xuICAgICAgcmV0dXJuIGE7XG4gICAgfVxuXG4gICAgY29uc3QgdCA9XG4gICAgICAoKHBbMF0gLSBhWzBdKSAqIChiWzBdIC0gYVswXSkgKyAocFsxXSAtIGFbMV0pICogKGJbMV0gLSBhWzFdKSkgLyBkaXN0U3FyO1xuXG4gICAgbGV0IHBvaW50ID0gWy4uLmFdO1xuICAgIGlmICh0ID4gMSkge1xuICAgICAgcG9pbnQgPSBbLi4uYl07XG4gICAgfSBlbHNlIGlmICh0ID4gMCkge1xuICAgICAgcG9pbnQgPSBbYVswXSArIHQgKiAoYlswXSAtIGFbMF0pLCBhWzFdICsgdCAqIChiWzFdIC0gYVsxXSldO1xuICAgIH1cblxuICAgIHJldHVybiBwb2ludDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBkaXN0YW5jZSBzcXVhcmVkIGZvciB0d28gMkQgcG9pbnRzLlxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBhIC0gMkQgcG9pbnQuXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IGIgLSAyRCBwb2ludC5cbiAgICpcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIHN0YXRpYyBkaXN0YW5jZVNxdWFyZWQoYSwgYikge1xuICAgIHJldHVybiAoYVswXSAtIGJbMF0pICogKGFbMF0gLSBiWzBdKSArIChhWzFdIC0gYlsxXSkgKiAoYVsxXSAtIGJbMV0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyaWFuZ3VsYXRlcyBhIHNldCBvZiAyRCBwb2ludHMgdXNpbmcgYW4gaW1wbGVtZW50YXRpb25cbiAgICogb2YgdGhlIEJvd3llci1XYXRzb24gaW5jcmVtZW50YWwgRGVsYXVuYXkgdHJpYW5ndWxhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheS48QXJyYXkuPG51bWJlcj4+fSB2ZXJ0aWNlcyAtIEFycmF5IG9mIDJEIHBvaW50cy5cbiAgICpcbiAgICogQHJldHVybnMge0FycmF5LjxBcnJheTxudW1iZXI+Pn0gLSBBcnJheSBvZiB0cmlhbmdsZSBpbmRpY2VzLlxuICAgKi9cbiAgc3RhdGljIGdldERlbGF1bmF5VHJpYW5ndWxhdGlvbih2ZXJ0aWNlcykge1xuICAgIGlmICghdmVydGljZXMgfHwgdmVydGljZXMubGVuZ3RoIDwgMykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQ2Fubm90IGdldCBkZWxhdW5heSB0cmlhbmd1bGF0aW9uIGZvciBwb2ludHMgJHt2ZXJ0aWNlc30uIElucHV0IG11c3QgY29udGFpbiBhdCBsZWFzdCB0aHJlZSBwb2ludHMuYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBsZXQgbWluWCA9IE51bWJlci5QT1NJVElWRV9JTkZJTklUWTtcbiAgICBsZXQgbWluWSA9IE51bWJlci5QT1NJVElWRV9JTkZJTklUWTtcbiAgICBsZXQgbWF4WCA9IE51bWJlci5ORUdBVElWRV9JTkZJTklUWTtcbiAgICBsZXQgbWF4WSA9IE51bWJlci5ORUdBVElWRV9JTkZJTklUWTtcblxuICAgIHZlcnRpY2VzLmZvckVhY2godiA9PiB7XG4gICAgICBtaW5YID0gdlswXSA8IG1pblggPyB2WzBdIDogbWluWDtcbiAgICAgIG1pblkgPSB2WzFdIDwgbWluWSA/IHZbMV0gOiBtaW5ZO1xuICAgICAgbWF4WCA9IHZbMF0gPiBtYXhYID8gdlswXSA6IG1heFg7XG4gICAgICBtYXhZID0gdlsxXSA+IG1heFkgPyB2WzFdIDogbWF4WTtcbiAgICB9KTtcblxuICAgIGNvbnN0IGRYID0gbWF4WCAtIG1pblg7XG4gICAgY29uc3QgZFkgPSBtYXhZIC0gbWluWTtcbiAgICBjb25zdCBtaWRYID0gKG1pblggKyBtYXhYKSAvIDI7XG4gICAgY29uc3QgbWlkWSA9IChtaW5ZICsgbWF4WSkgLyAyO1xuICAgIGNvbnN0IGRNYXggPSBkWCA+IGRZID8gZFggOiBkWTtcblxuICAgIGNvbnN0IHN1cGVySW5kaWNlcyA9IFtcbiAgICAgIHZlcnRpY2VzLmxlbmd0aCxcbiAgICAgIHZlcnRpY2VzLmxlbmd0aCArIDEsXG4gICAgICB2ZXJ0aWNlcy5sZW5ndGggKyAyLFxuICAgIF07XG5cbiAgICBjb25zdCB2ZXJ0c1dpdGhTdXBlciA9IFtcbiAgICAgIC4uLnZlcnRpY2VzLFxuICAgICAgW21pZFggLSAyMCAqIGRNYXgsIG1pZFkgLSBkTWF4XSxcbiAgICAgIFttaWRYLCBtaWRZICsgMjAgKiBkTWF4XSxcbiAgICAgIFttaWRYICsgMjAgKiBkTWF4LCBtaWRZIC0gZE1heF0sXG4gICAgXTtcblxuICAgIGNvbnN0IHN1cGVyU29ydGVkSW5kaWNlcyA9IE1hdGhVdGlscy5zb3J0UG9pbnRzQ0NXKFxuICAgICAgc3VwZXJJbmRpY2VzLFxuICAgICAgdmVydHNXaXRoU3VwZXJcbiAgICApO1xuXG4gICAgY29uc3Qgc3VwZXJUcmlhbmdsZSA9IHtcbiAgICAgIGluZGljZXM6IHN1cGVyU29ydGVkSW5kaWNlcyxcbiAgICAgIGVkZ2VzOiBbXG4gICAgICAgIFtzdXBlclNvcnRlZEluZGljZXNbMF0sIHN1cGVyU29ydGVkSW5kaWNlc1sxXV0sXG4gICAgICAgIFtzdXBlclNvcnRlZEluZGljZXNbMV0sIHN1cGVyU29ydGVkSW5kaWNlc1syXV0sXG4gICAgICAgIFtzdXBlclNvcnRlZEluZGljZXNbMl0sIHN1cGVyU29ydGVkSW5kaWNlc1swXV0sXG4gICAgICBdLFxuICAgIH07XG5cbiAgICBjb25zdCB0cmlhbmdsZXMgPSBbc3VwZXJUcmlhbmdsZV07XG5cbiAgICB2ZXJ0c1dpdGhTdXBlci5mb3JFYWNoKChuZXdWZXJ0LCBuZXdJbmRleCkgPT4ge1xuICAgICAgY29uc3QgaW52YWxpZFRyaWFuZ2xlcyA9IFtdO1xuICAgICAgdHJpYW5nbGVzLmZvckVhY2godHJpYW5nbGUgPT4ge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgTWF0aFV0aWxzLmlzUG9pbnRJbkNpcmN1bUNpcmNsZShcbiAgICAgICAgICAgIHZlcnRzV2l0aFN1cGVyW3RyaWFuZ2xlLmluZGljZXNbMF1dLFxuICAgICAgICAgICAgdmVydHNXaXRoU3VwZXJbdHJpYW5nbGUuaW5kaWNlc1sxXV0sXG4gICAgICAgICAgICB2ZXJ0c1dpdGhTdXBlclt0cmlhbmdsZS5pbmRpY2VzWzJdXSxcbiAgICAgICAgICAgIG5ld1ZlcnRcbiAgICAgICAgICApXG4gICAgICAgICkge1xuICAgICAgICAgIGludmFsaWRUcmlhbmdsZXMucHVzaCh0cmlhbmdsZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBib3VuZGluZ1BvbHkgPSBbXTtcbiAgICAgIGludmFsaWRUcmlhbmdsZXMuZm9yRWFjaCh0cmlhbmdsZSA9PiB7XG4gICAgICAgIHRyaWFuZ2xlLmVkZ2VzLmZvckVhY2goZWRnZSA9PiB7XG4gICAgICAgICAgbGV0IGNvdW50ID0gMDtcbiAgICAgICAgICBpbnZhbGlkVHJpYW5nbGVzLmZvckVhY2gob3RoZXJUcmlhbmdsZSA9PiB7XG4gICAgICAgICAgICBpZiAodHJpYW5nbGUgIT09IG90aGVyVHJpYW5nbGUpIHtcbiAgICAgICAgICAgICAgb3RoZXJUcmlhbmdsZS5lZGdlcy5mb3JFYWNoKG90aGVyRWRnZSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgKGVkZ2VbMF0gPT09IG90aGVyRWRnZVswXSAmJiBlZGdlWzFdID09PSBvdGhlckVkZ2VbMV0pIHx8XG4gICAgICAgICAgICAgICAgICAoZWRnZVsxXSA9PT0gb3RoZXJFZGdlWzBdICYmIGVkZ2VbMF0gPT09IG90aGVyRWRnZVsxXSlcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgIGNvdW50ICs9IDE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpZiAoY291bnQgPT09IDApIGJvdW5kaW5nUG9seS5wdXNoKGVkZ2UpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBpbnZhbGlkVHJpYW5nbGVzLmZvckVhY2godHJpYW5nbGUgPT4ge1xuICAgICAgICB0cmlhbmdsZXMuc3BsaWNlKHRyaWFuZ2xlcy5pbmRleE9mKHRyaWFuZ2xlKSwgMSk7XG4gICAgICB9KTtcblxuICAgICAgYm91bmRpbmdQb2x5LmZvckVhY2goZWRnZSA9PiB7XG4gICAgICAgIGNvbnN0IHNvcnRlZEluZGljZXMgPSBNYXRoVXRpbHMuc29ydFBvaW50c0NDVyhcbiAgICAgICAgICBbZWRnZVswXSwgZWRnZVsxXSwgbmV3SW5kZXhdLFxuICAgICAgICAgIHZlcnRzV2l0aFN1cGVyXG4gICAgICAgICk7XG5cbiAgICAgICAgdHJpYW5nbGVzLnB1c2goe1xuICAgICAgICAgIGluZGljZXM6IHNvcnRlZEluZGljZXMsXG4gICAgICAgICAgZWRnZXM6IFtcbiAgICAgICAgICAgIFtzb3J0ZWRJbmRpY2VzWzBdLCBzb3J0ZWRJbmRpY2VzWzFdXSxcbiAgICAgICAgICAgIFtzb3J0ZWRJbmRpY2VzWzFdLCBzb3J0ZWRJbmRpY2VzWzJdXSxcbiAgICAgICAgICAgIFtzb3J0ZWRJbmRpY2VzWzJdLCBzb3J0ZWRJbmRpY2VzWzBdXSxcbiAgICAgICAgICBdLFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgY29uc3QgdHJpYW5nbGVzVG9SZW1vdmUgPSBbXTtcbiAgICB0cmlhbmdsZXMuZm9yRWFjaCh0cmlhbmdsZSA9PiB7XG4gICAgICB0cmlhbmdsZS5pbmRpY2VzLmZvckVhY2goaW5kZXggPT4ge1xuICAgICAgICBpZiAoc3VwZXJJbmRpY2VzLmluY2x1ZGVzKGluZGV4KSkge1xuICAgICAgICAgIHRyaWFuZ2xlc1RvUmVtb3ZlLnB1c2godHJpYW5nbGUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRyaWFuZ2xlc1RvUmVtb3ZlLmZvckVhY2godHJpYW5nbGUgPT4ge1xuICAgICAgY29uc3QgaW5kZXggPSB0cmlhbmdsZXMuaW5kZXhPZih0cmlhbmdsZSk7XG4gICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgIHRyaWFuZ2xlcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRyaWFuZ2xlcy5tYXAodHJpYW5nbGUgPT4gdHJpYW5nbGUuaW5kaWNlcyk7XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyBpZiBhIGdpdmVuIDJEIHBvaW50IGlzIHdpdGhpbiB0aGUgY2ljcnVtY2lyY2xlXG4gICAqIGRlZmluZWQgYnkgdGhyZWUgMkQgcG9pbnRzLiBUaGUgdHJpYW5nbGUgcG9pbnRzIG11c3QgYmUgaW5cbiAgICogY291bnRlci1jbG9ja3dpc2Ugb3JkZXIgYSAtPiBiIC0+IGMuXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IGEgLSBGaXJzdCB0cmlhbmdsZSBwb2ludC5cbiAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gYiAtIFNlY29uZCB0cmlhbmdsZSBwb2ludC5cbiAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gYyAtIFRoaXJkIHRyaWFuZ2xlIHBvaW50LlxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBwIC0gMkQgcG9pbnQuXG4gICAqXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgc3RhdGljIGlzUG9pbnRJbkNpcmN1bUNpcmNsZShhLCBiLCBjLCBwKSB7XG4gICAgY29uc3QgYXggPSBhWzBdIC0gcFswXTtcbiAgICBjb25zdCBheSA9IGFbMV0gLSBwWzFdO1xuICAgIGNvbnN0IGJ4ID0gYlswXSAtIHBbMF07XG4gICAgY29uc3QgYnkgPSBiWzFdIC0gcFsxXTtcbiAgICBjb25zdCBjeCA9IGNbMF0gLSBwWzBdO1xuICAgIGNvbnN0IGN5ID0gY1sxXSAtIHBbMV07XG5cbiAgICByZXR1cm4gKFxuICAgICAgKGF4ICogYXggKyBheSAqIGF5KSAqIChieCAqIGN5IC0gY3ggKiBieSkgLVxuICAgICAgICAoYnggKiBieCArIGJ5ICogYnkpICogKGF4ICogY3kgLSBjeCAqIGF5KSArXG4gICAgICAgIChjeCAqIGN4ICsgY3kgKiBjeSkgKiAoYXggKiBieSAtIGJ4ICogYXkpID5cbiAgICAgIDBcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgaWYgYSBnaXZlbiAyRCBwb2ludCBpcyB3aXRoaW4gYSBnaXZlbiB0cmlhbmdsZS5cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gYSAtIEZpcnN0IHRyaWFuZ2xlIHBvaW50LlxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBiIC0gU2Vjb25kIHRyaWFuZ2xlIHBvaW50LlxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBjIC0gVGhpcmQgdHJpYW5nbGUgcG9pbnQuXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IHAgLSAyRCBwb2ludC5cbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBzdGF0aWMgaXNQb2ludEluVHJpYW5nbGUoYSwgYiwgYywgcCkge1xuICAgIGNvbnN0IGRlbm9tID0gKGJbMV0gLSBjWzFdKSAqIChhWzBdIC0gY1swXSkgKyAoY1swXSAtIGJbMF0pICogKGFbMV0gLSBjWzFdKTtcbiAgICBjb25zdCBhVmFsID1cbiAgICAgICgoYlsxXSAtIGNbMV0pICogKHBbMF0gLSBjWzBdKSArIChjWzBdIC0gYlswXSkgKiAocFsxXSAtIGNbMV0pKSAvIGRlbm9tO1xuICAgIGNvbnN0IGJWYWwgPVxuICAgICAgKChjWzFdIC0gYVsxXSkgKiAocFswXSAtIGNbMF0pICsgKGFbMF0gLSBjWzBdKSAqIChwWzFdIC0gY1sxXSkpIC8gZGVub207XG4gICAgY29uc3QgY1ZhbCA9IDEgLSBhVmFsIC0gYlZhbDtcblxuICAgIHJldHVybiAoXG4gICAgICBhVmFsID49IDAgJiYgYVZhbCA8PSAxICYmIGJWYWwgPj0gMCAmJiBiVmFsIDw9IDEgJiYgY1ZhbCA+PSAwICYmIGNWYWwgPD0gMVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgc29ydGVkIGluZGljZXMgb2YgYSBnaXZlbiBzZXQgb2YgMkQgcG9pbnRzIGluXG4gICAqIGNvdW50ZXItY2xvY2t3aXNlIG9yZGVyLlxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBpbmRpY2VzIC0gTGlzdCBvZiBpbmRpY2VzLlxuICAgKiBAcGFyYW0ge0FycmF5LjxBcnJheS48bnVtYmVyPj59IHZlcnRpY2VzIC0gTGlzdCBvZiAyRCBwb2ludHMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtBcnJheS48QXJyYXkuPG51bWJlcj4+fSAtIExpc3Qgb2Ygc29ydGVkIGluZGljZXMuXG4gICAqL1xuICBzdGF0aWMgc29ydFBvaW50c0NDVyhpbmRpY2VzLCB2ZXJ0aWNlcykge1xuICAgIGNvbnN0IGNlbnRyb2lkID0gWzAsIDBdO1xuICAgIGluZGljZXMuZm9yRWFjaChpbmRleCA9PiB7XG4gICAgICBjZW50cm9pZFswXSArPSB2ZXJ0aWNlc1tpbmRleF1bMF07XG4gICAgICBjZW50cm9pZFsxXSArPSB2ZXJ0aWNlc1tpbmRleF1bMV07XG4gICAgfSk7XG4gICAgY2VudHJvaWRbMF0gLz0gaW5kaWNlcy5sZW5ndGg7XG4gICAgY2VudHJvaWRbMV0gLz0gaW5kaWNlcy5sZW5ndGg7XG5cbiAgICBpbmRpY2VzLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgIGNvbnN0IGJWYWwgPSBNYXRoLmF0YW4yKFxuICAgICAgICB2ZXJ0aWNlc1tiXVsxXSAtIGNlbnRyb2lkWzFdLFxuICAgICAgICB2ZXJ0aWNlc1tiXVswXSAtIGNlbnRyb2lkWzBdXG4gICAgICApO1xuICAgICAgY29uc3QgYVZhbCA9IE1hdGguYXRhbjIoXG4gICAgICAgIHZlcnRpY2VzW2FdWzFdIC0gY2VudHJvaWRbMV0sXG4gICAgICAgIHZlcnRpY2VzW2FdWzBdIC0gY2VudHJvaWRbMF1cbiAgICAgICk7XG5cbiAgICAgIHJldHVybiBhVmFsIC0gYlZhbDtcbiAgICB9KTtcblxuICAgIHJldHVybiBpbmRpY2VzO1xuICB9XG5cbiAgLyoqXG4gICAqIENhY2x1YXRlcyB0aGUgYXJlYSBvZiBhIHRyaWFuZ2xlXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IGEgLSBGaXJzdCB0cmlhbmdsZSBwb2ludC5cbiAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gYiAtIFNlY29uZCB0cmlhbmdsZSBwb2ludC5cbiAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gYyAtIFRoaXJkIHRyaWFuZ2xlIHBvaW50LlxuICAgKlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgc3RhdGljIHRyaWFuZ2xlQXJlYShhLCBiLCBjKSB7XG4gICAgcmV0dXJuIE1hdGguYWJzKFxuICAgICAgKGFbMF0gKiAoYlsxXSAtIGNbMV0pICsgYlswXSAqIChjWzFdIC0gYVsxXSkgKyBjWzBdICogKGFbMV0gLSBiWzFdKSkgKiAwLjVcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgbWFnbml0dWRlIG9mIGEgZ2l2ZW4gdmVjdG9yIGFycmF5LlxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSB2ZWN0b3IgLSBBcnJheSBjb25zaXN0aW5nIG9mIG51bWJlcnMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICBzdGF0aWMgZ2V0VmVjdG9yTWFnbml0dWRlKHZlY3Rvcikge1xuICAgIGlmICghKHZlY3RvciBpbnN0YW5jZW9mIEFycmF5KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQ2Fubm90IGdldCBtYWduaXR1ZGUgZm9yIHZlY3RvciAke3ZlY3Rvcn0uIElucHV0IG11c3QgYmUgYW4gQXJyYXkgbnVtYmVycy5gXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHJlZHVjZXIgPSAoYWNjdW11bGF0b3IsIGN1cnJlbnRWYWx1ZSkgPT4ge1xuICAgICAgaWYgKHR5cGVvZiBjdXJyZW50VmFsdWUgIT09ICdudW1iZXInKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgQ2Fubm90IGdldCBtYWduaXR1ZGUgZm9yIHZlY3RvciAke3ZlY3Rvcn0uIEFsbCBpdGVtcyBpbiB0aGUgaW5wdXQgQXJyYXkgbXVzdCBiZSBudW1iZXJzLmBcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGFjY3VtdWxhdG9yICsgKGN1cnJlbnRWYWx1ZSAqKiAyKTtcbiAgICB9XG5cbiAgICByZXR1cm4gTWF0aC5zcXJ0KHZlY3Rvci5yZWR1Y2UocmVkdWNlciwgMCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgZG90IHByb2R1Y3QgYmV0d2VlbiB0d28gdmVjdG9ycy5cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gdmVjdG9yQSAtIEFycmF5IGNvbnNpc3Rpbmcgb2YgbnVtYmVycy5cbiAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gdmVjdG9yQiAtIEFycmF5IGNvbnNpc3Rpbmcgb2YgbnVtYmVycy5cbiAgICpcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIHN0YXRpYyBnZXREb3RQcm9kdWN0KHZlY3RvckEsIHZlY3RvckIpIHtcbiAgICBpZiAoISh2ZWN0b3JBIGluc3RhbmNlb2YgQXJyYXkpIHx8ICEodmVjdG9yQiBpbnN0YW5jZW9mIEFycmF5KSB8fCB2ZWN0b3JBLmxlbmd0aCAhPT0gdmVjdG9yQi5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGdldCBkb3QgcHJvZHVjdCBiZXR3ZWVuICR7dmVjdG9yQX0gYW5kICR7dmVjdG9yQn0uIElucHV0cyBtdXN0IGJlIHZlY3RvcnMgb2YgdGhlIHNhbWUgbGVuZ3RoLmApO1xuICAgIH1cblxuICAgIGxldCByZXN1bHQgPSAwO1xuICAgIHZlY3RvckEuZm9yRWFjaCgodmFsdWVBLCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgdmFsdWVCID0gdmVjdG9yQltpbmRleF07XG5cbiAgICAgIGlmICh0eXBlb2YgdmFsdWVBICE9PSAnbnVtYmVyJyB8fCB0eXBlb2YgdmFsdWVCICE9PSAnbnVtYmVyJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBnZXQgZG90IHByb2R1Y3QgYmV0d2VlbiAke3ZlY3RvckF9IGFuZCAke3ZlY3RvckJ9LiBWZWN0b3JzIG11c3Qgb25seSBjb25zaXN0IG9mIG51bWVyaWMgdmFsdWVzLmApO1xuICAgICAgfVxuXG4gICAgICByZXN1bHQgKz0gdmFsdWVBICogdmFsdWVCO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIGFuZ2xlIGluIHJhZGlhbnMgYmV0d2VlbiB2ZWN0b3JBIGFuZCB2ZWN0b3JCLlxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSB2ZWN0b3JBIC0gQXJyYXkgY29uc2lzdGluZyBvZiBudW1iZXJzLlxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSB2ZWN0b3JCIC0gQXJyYXkgY29uc2lzdGluZyBvZiBudW1iZXJzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgc3RhdGljIGdldEFuZ2xlQmV0d2Vlbih2ZWN0b3JBLCB2ZWN0b3JCKSB7XG4gICAgY29uc3Qgbm9ybWFsQSA9IHRoaXMubm9ybWFsaXplVmVjdG9yKFsuLi52ZWN0b3JBXSk7XG4gICAgY29uc3Qgbm9ybWFsQiA9IHRoaXMubm9ybWFsaXplVmVjdG9yKFsuLi52ZWN0b3JCXSk7XG4gICAgY29uc3QgZG90ID0gdGhpcy5nZXREb3RQcm9kdWN0KG5vcm1hbEEsIG5vcm1hbEIpO1xuXG4gICAgcmV0dXJuIE1hdGguYWNvcyh0aGlzLmNsYW1wKGRvdCwgLTEsIDEpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNdWx0aXBseSBhIDN4MyByb3RhdGlvbiBtYXRyaXggd2l0aCBhIHZlY3RvcjMuXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IHZlY3RvcjMgLSBBcnJheSBjb25zaXN0aW5nIG9mIDMgbnVtYmVycyByZXByZXNlbnRpbmdcbiAgICogYSBkaXJlY3Rpb24gdmVjdG9yLlxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBtYXRyaXgzIC0gQW4gYXJyYXkgb2YgOSBudW1iZXJzIHJlcHJlc2VudGluZyBhIHJvd1xuICAgKiBtYWpvciByb3RhdGlvbiBtYXRyaXguXG4gICAqXG4gICAqIEByZXR1cm5zIHtBcnJheS48bnVtYmVyPn0gLSBBbiBhcnJheSBvZiAzIG51bWJlcnMgcmVwcmVzZW50aW5nIHRoZSBuZXcgZGlyZWN0aW9uXG4gICAqIG9mIHRoZSB2ZWN0b3IuXG4gICAqL1xuICBzdGF0aWMgcm90YXRlVmVjdG9yKHZlY3RvcjMsIG1hdHJpeDMpIHtcbiAgICBpZiAoISh2ZWN0b3IzIGluc3RhbmNlb2YgQXJyYXkpXG4gICAgICB8fCB2ZWN0b3IzLmxlbmd0aCAhPT0gM1xuICAgICAgfHwgIXZlY3RvcjMuZXZlcnkodiA9PiB0eXBlb2YgdiA9PT0gJ251bWJlcicpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBDYW5ub3Qgcm90YXRlIHZlY3RvciAke3ZlY3RvcjN9IGJ5IHJvdGF0aW9uIG1hdHJpeCAke21hdHJpeDN9LiBJbnB1dCB2ZWN0b3IgbXVzdCBiZSBhbiBhcnJheSBvZiAzIG51bWJlcnMuYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoIShtYXRyaXgzIGluc3RhbmNlb2YgQXJyYXkpXG4gICAgICB8fCBtYXRyaXgzLmxlbmd0aCAhPT0gOVxuICAgICAgfHwgIW1hdHJpeDMuZXZlcnkodiA9PiB0eXBlb2YgdiA9PT0gJ251bWJlcicpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBDYW5ub3Qgcm90YXRlIHZlY3RvciAke3ZlY3RvcjN9IGJ5IHJvdGF0aW9uIG1hdHJpeCAke21hdHJpeDN9LiBJbnB1dCBtYXRyaXgzIG11c3QgYmUgYW4gYXJyYXkgb2YgOSBudW1iZXJzLmBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgeCA9IG1hdHJpeDNbMF0gKiB2ZWN0b3IzWzBdXG4gICAgICArIG1hdHJpeDNbM10gKiB2ZWN0b3IzWzFdXG4gICAgICArIG1hdHJpeDNbNl0gKiB2ZWN0b3IzWzJdO1xuICAgIGNvbnN0IHkgPSBtYXRyaXgzWzFdICogdmVjdG9yM1swXVxuICAgICAgKyBtYXRyaXgzWzRdICogdmVjdG9yM1sxXVxuICAgICAgKyBtYXRyaXgzWzddICogdmVjdG9yM1syXTtcbiAgICBjb25zdCB6ID0gbWF0cml4M1syXSAqIHZlY3RvcjNbMF1cbiAgICAgICsgbWF0cml4M1s1XSAqIHZlY3RvcjNbMV1cbiAgICAgICsgbWF0cml4M1s4XSAqIHZlY3RvcjNbMl07XG5cbiAgICByZXR1cm4gW3gsIHksIHpdO1xuICB9XG5cbiAgLyoqXG4gICAqIE5vcm1hbGl6ZSBhIGdpdmVuIHZlY3RvciBhcnJheS5cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gdmVjdG9yIC0gQXJyYXkgY29uc2lzdGluZyBvZiBudW1iZXJzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7QXJyYXkuPG51bWJlcj59IFRoZSBvcmlnaW5hbCB2ZWN0b3Igd2l0aCBub3JtYWxpemVkIHZhbHVlcywgZm9yIGNoYWluaW5nLlxuICAgKi9cbiAgc3RhdGljIG5vcm1hbGl6ZVZlY3Rvcih2ZWN0b3IpIHtcbiAgICBjb25zdCBtYWduaXR1ZGUgPSB0aGlzLmdldFZlY3Rvck1hZ25pdHVkZSh2ZWN0b3IpO1xuXG4gICAgaWYgKG1hZ25pdHVkZSA9PT0gMCkge1xuICAgICAgdmVjdG9yLmZpbGwoMClcbiAgICB9IGVsc2Uge1xuICAgICAgdmVjdG9yLmZvckVhY2goKHZhbHVlLCBpbmRleCkgPT4ge1xuICAgICAgICB2ZWN0b3JbaW5kZXhdID0gdmFsdWUgLyBtYWduaXR1ZGU7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmVjdG9yO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4dHJhY3QgdGhlIDN4MyByb3RhdGlvbiBtYXRyaXggZnJvbSBhIGdpdmVuIDR4NCB0cmFuc2Zvcm1hdGlvbiBtYXRyaXguXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IG1hdHJpeDQgLSBBbiBhcnJheSBvZiAxNiBudW1iZXJzIHJlcHJlc2VudGluZyBhIHJvd1xuICAgKiBtYWpvciB0cmFuc2Zvcm1hdGlvbiBtYXRyaXguXG4gICAqXG4gICAqIEByZXR1cm5zIHtBcnJheS48bnVtYmVyPn0gLSBBbiBhcnJheSBvZiA5IG51bWJlcnMgcmVwcmVzZW50aW5nIGEgcm93IG1ham9yXG4gICAqIHJvdGF0aW9uIG1hdHJpeC5cbiAgICovXG4gIHN0YXRpYyBnZXRSb3RhdGlvbk1hdHJpeChtYXRyaXg0KSB7XG4gICAgaWYgKCEobWF0cml4NCBpbnN0YW5jZW9mIEFycmF5KVxuICAgICAgfHwgbWF0cml4NC5sZW5ndGggIT09IDE2XG4gICAgICB8fCAhbWF0cml4NC5ldmVyeSh2ID0+IHR5cGVvZiB2ID09PSAnbnVtYmVyJykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYENhbm5vdCBjb252ZXJ0IG1hdHJpeCAke21hdHJpeDR9IHRvIGEgcm90YXRpb24gbWF0cml4LiBJbnB1dCBtYXRyaXggbXVzdCBiZSBhbiBhcnJheSBvZiAxNiBudW1iZXJzLmBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gRXh0cmFjdCBzY2FsZVxuICAgIGNvbnN0IHNjYWxlWCA9IDEgLyAodGhpcy5nZXRWZWN0b3JNYWduaXR1ZGUobWF0cml4NC5zbGljZSgwLCA0KSkgfHwgMSk7XG4gICAgY29uc3Qgc2NhbGVZID0gMSAvICh0aGlzLmdldFZlY3Rvck1hZ25pdHVkZShtYXRyaXg0LnNsaWNlKDQsIDgpKSB8fCAxKTtcbiAgICBjb25zdCBzY2FsZVogPSAxIC8gKHRoaXMuZ2V0VmVjdG9yTWFnbml0dWRlKG1hdHJpeDQuc2xpY2UoOCwgMTIpKSB8fCAxKTtcblxuICAgIHJldHVybiBbXG4gICAgICBtYXRyaXg0WzBdICogc2NhbGVYLCBtYXRyaXg0WzFdICogc2NhbGVYLCBtYXRyaXg0WzJdICogc2NhbGVYLFxuICAgICAgbWF0cml4NFs0XSAqIHNjYWxlWSwgbWF0cml4NFs1XSAqIHNjYWxlWSwgbWF0cml4NFs2XSAqIHNjYWxlWSxcbiAgICAgIG1hdHJpeDRbOF0gKiBzY2FsZVosIG1hdHJpeDRbOV0gKiBzY2FsZVosIG1hdHJpeDRbMTBdICogc2NhbGVaXG4gICAgXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYW4gYXJyYXkgY29udGFpbmluZyB0aGUgc3BoZXJpY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBnaXZlbiBjYXJ0ZXNpYW5cbiAgICogeHl6IGNvb3JkaW5hdGVzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0geCAtIFBvc2l0aW9uIGFsb25nIHRoZSB4IGF4aXMuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gUG9zaXRpb24gYWxvbmcgdGhlIHkgYXhpcy5cbiAgICogQHBhcmFtIHtudW1iZXJ9IHogLSBQb3NpdGlvbiBhbG9uZyB0aGUgeiBheGlzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7QXJyYXkuPG51bWJlcj59IC0gQW4gYXJyYXkgY29uc2lzdGluZyBvZiB0aHJlZSBudW1iZXJlcyB3aGVyZSBpbmRleFxuICAgKiAwIHJlcHJlc2VudHMgdGhlIHJhZGl1cywgaW5kZXggMSByZXByZXNlbnRzIHRoZSB2ZXJ0aWNhbC9wb2xhciBhbmdsZSBpbiByYWRpYW5zXG4gICAqIGFuZCBpbmRleCAyIHJlcHJlc2VudHMgdGhlIGhvcml6b250YWwvYXppbXV0aGFsIGFuZ2xlIGluIHJhZGlhbnMuXG4gICAqL1xuICBzdGF0aWMgY2FydGVzaWFuVG9TcGhlcmljYWwoeCwgeSwgeikge1xuICAgIGNvbnN0IHIgPSB0aGlzLmdldFZlY3Rvck1hZ25pdHVkZShbeCwgeSwgel0pO1xuXG4gICAgLy8gUmV0dXJuIGlkZW50aXR5IGlmIHRoZSB2ZWN0b3IgaGFzIG5vIGxlbmd0aFxuICAgIGlmIChyID09PSAwKSB7XG4gICAgICByZXR1cm4gWzAsIDAsIDBdO1xuICAgIH1cblxuICAgIHJldHVybiBbXG4gICAgICByLFxuICAgICAgTWF0aC5hY29zKHRoaXMuY2xhbXAoeSAvIHIsIC0gMSwgMSkpLFxuICAgICAgTWF0aC5hdGFuMih4LCB6KSxcbiAgICBdO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYWR1YWxseSBjaGFuZ2UgYSB2YWx1ZSBvZiBhIG51bWVyaWMgcHJvcGVydHkgdG93YXJkcyBhIGdvYWwgb3ZlciB0aW1lIHVzaW5nXG4gICAqIGEgY3JpdGljYWxseSBkYW1wZWQgc3ByaW5nIGZ1bmN0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gY3VycmVudFZhbHVlIC0gVGhlIHN0YXJ0aW5nIHZhbHVlLlxuICAgKiBAcGFyYW0ge251bWJlcn0gdGFyZ2V0VmFsdWUtIFRoZSBnb2FsIHZhbHVlLlxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBbdmFsdWVTdG9yZSA9IFswLCAwXV0gLSBBbiBBcnJheSBjb25zaXN0aW5nIG9mIHR3b1xuICAgKiBudW1iZXJzIHdoZXJlIHRoZSBmaXJzdCBudW1iZXIgaG9sZHMgdGhlIHJlc3VsdCB2YWx1ZSBhbmQgdGhlIHNlY29uZCBob2xkc1xuICAgKiB0aGUgdmVsb2NpdHkgdGhhdCByZXN1bHRlZCBpbiB0aGF0IHZhbHVlLiBUaGUgc2FtZSBhcnJheSBzaG91bGQgYmUgcHJvdmlkZWRcbiAgICogd2l0aCBlYWNoIGNhbGwgdG8gdGhpcyBmdW5jdGlvbi5cbiAgICogQHBhcmFtIHtudW1iZXJ9IFtkZWx0YVRpbWUgPSAxZS03XSAtIFRoZSB0aW1lIHNpbmNlIHRoZSBsYXN0IGNhbGwgdG8gdGhpcyBmdW5jdGlvblxuICAgKiBpbiBzZWNvbmRzLlxuICAgKiBAcGFyYW0ge251bWJlcn0gW3Ntb290aFRpbWUgPSAwLjNdIC0gVGhlIGFwcHJveGltYXRlIGFtb3VudCBvZiB0aW1lIGluIHNlY29uZHNcbiAgICogaXQgc2hvdWxkIHRha2UgdG8gcmVhY2ggdGhlIHRhcmdldCB2YWx1ZS5cbiAgICogQHBhcmFtIHtudW1iZXJ9IFttYXhTcGVlZCA9IDFlN10gLSBBIGNsYW1waW5nIHZhbHVlIGZvciB0aGUgbWF4aW11bSBzcGVlZCB0aGVcbiAgICogdmFsdWUgY2FuIGNoYW5nZS5cbiAgICpcbiAgICogQHJldHVybnMge0FycmF5LjxudW1iZXI+fSAtIFRoZSB2YWx1ZVN0b3JlIGFycmF5LlxuICAgKi9cbiAgc3RhdGljIGRhbXBWYWx1ZShcbiAgICBjdXJyZW50VmFsdWUsXG4gICAgdGFyZ2V0VmFsdWUsXG4gICAgdmFsdWVTdG9yZSA9IFswLCAwXSxcbiAgICBkZWx0YVRpbWUgPSAxZS03LFxuICAgIHNtb290aFRpbWUgPSAwLjMsXG4gICAgbWF4U3BlZWQgPSAxZTdcbiAgKSB7XG4gICAgc21vb3RoVGltZSA9IE1hdGgubWF4KDAuMDAwMSwgc21vb3RoVGltZSk7XG4gICAgZGVsdGFUaW1lID0gTWF0aC5tYXgoMWUtNywgZGVsdGFUaW1lKTtcblxuICAgIC8vIEZpbmQgdGhlIGRlbHRhIGJldHdlZW4gdmFsdWVzIGFuZCB1c2UgaXQgdG8gZXN0aW1hdGUgdGhlIHByZXZpb3VzIHZhbHVlXG4gICAgY29uc3QgY2xhbXBUaW1lID0gbWF4U3BlZWQgKiBzbW9vdGhUaW1lO1xuICAgIGNvbnN0IGRlbHRhVmFsdWUgPSBjdXJyZW50VmFsdWUgLSB0YXJnZXRWYWx1ZTtcbiAgICBjb25zdCBjbGFtcERlbHRhVmFsdWUgPSB0aGlzLmNsYW1wKGRlbHRhVmFsdWUsIC1jbGFtcFRpbWUsIGNsYW1wVGltZSk7XG4gICAgY29uc3QgbGFzdFZhbHVlID0gY3VycmVudFZhbHVlIC0gY2xhbXBEZWx0YVZhbHVlO1xuXG4gICAgLy8gQ2FsY3VsYXRlIGRhbXBpbmcgZmFjdG9yc1xuICAgIGNvbnN0IGQxID0gMiAvIHNtb290aFRpbWU7XG4gICAgY29uc3QgZDIgPSBkMSAqIGRlbHRhVGltZTtcbiAgICBjb25zdCBkMyA9IDEgLyAoMSArIGQyICsgMC41ICogZDIgKiogMiArIDAuMjUgKiBkMiAqKiAzKTtcbiAgICBjb25zdCBkNCA9ICh2YWx1ZVN0b3JlWzFdICsgZDEgKiBjbGFtcERlbHRhVmFsdWUpICogZGVsdGFUaW1lO1xuXG4gICAgLy8gRGFtcCB0aGUgdGFyZ2V0IHZhbHVlIGFuZCB1cGRhdGUgdGhlIHZlbG9jaXR5XG4gICAgdmFsdWVTdG9yZVswXSA9IGxhc3RWYWx1ZSArIChjbGFtcERlbHRhVmFsdWUgKyBkNCkgKiBkMztcbiAgICB2YWx1ZVN0b3JlWzFdID0gKHZhbHVlU3RvcmVbMV0gLSBkMSAqIGQ0KSAqIGQzO1xuXG4gICAgLy8gUHJldmVudCBvdmVyc2hvb3RpbmdcbiAgICBpZiAodGFyZ2V0VmFsdWUgLSBjdXJyZW50VmFsdWUgPiAwID09PSB2YWx1ZVN0b3JlWzBdID4gdGFyZ2V0VmFsdWUpIHtcbiAgICAgIHZhbHVlU3RvcmVbMF0gPSB0YXJnZXRWYWx1ZTtcbiAgICAgIHZhbHVlU3RvcmVbMV0gPSAodmFsdWVTdG9yZVswXSAtIHRhcmdldFZhbHVlKSAvIGRlbHRhVGltZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWVTdG9yZTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBNYXRoVXRpbHM7XG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cclxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVC0wXHJcbi8qIGVzbGludC1kaXNhYmxlIGltcG9ydC9wcmVmZXItZGVmYXVsdC1leHBvcnQgKi9cclxuXHJcbi8qKlxyXG4gKiBJbmRpY2F0ZXMgdGhlIHR5cGUgb2YgaG9zdCBidWlsZC5cclxuICpcclxuICogQHR5cGUge3N0cmluZ31cclxuICovXHJcbmNvbnN0IGVudiA9ICdjb3JlJztcclxuXHJcbmV4cG9ydCB7ZW52fTtcclxuIiwiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTBcbi8qIGVzbGludC1kaXNhYmxlIG5vLXVuZGVyc2NvcmUtZGFuZ2xlICovXG5pbXBvcnQgVXRpbHMgZnJvbSAnLi9VdGlscyc7XG5cbi8qKlxuICogQ2xhc3MgdGhhdCBjYW4gZXhlY3V0ZSBmdW5jdGlvbnMgd2hlbiBsb2NhbCBtZXNzYWdlcyBhcmUgcmVjZWl2ZWQuIExvY2FsIG1lc3NhZ2VzXG4gKiBhcmUgcHJlZml4ZWQgd2l0aCB0aGUgaW5zdGFuY2UncyBpZC5cbiAqXG4gKiBAYWxpYXMgY29yZS9NZXNzZW5nZXJcbiAqXG4gKiBAcHJvcGVydHkge2NvcmUvTWVzc2VuZ2VyfSBHbG9iYWxNZXNzZW5nZXIgLSBBIG1lc3NlbmdlciB0aGF0IGNhbiBiZSB1c2VkIGZvclxuICogZ2xvYmFsIG1lc3NhZ2luZy4gV2hlbiB1c2luZyBzdGF0aWMgbGlzdGVuIGFuZCBlbWl0IG1ldGhvZHMgdGhleSBhcmUgZXhlY3V0ZWRcbiAqIG9uIHRoaXMgbWVzc2VuZ2VyLlxuICogQHByb3BlcnR5IHtPYmplY3R9IEVWRU5UUyAtIEJ1aWx0LWluIGV2ZW50cyB0aGF0IHRoZSBNZXNzZW5nZXIgZW1pdHMuXG4gKi9cbmNsYXNzIE1lc3NlbmdlciB7XG4gIC8qKlxuICAgKiBAY29uc3RydWN0b3JcbiAgICpcbiAgICogQHBhcmFtIHthbnk9fSBpZCAtIElkIGZvciB0aGUgb2JqZWN0LiBJZiBub25lIGlzIHByb3ZpZGVkIGEgbmV3IGlkIHdpbGxcbiAgICogYmUgY3JlYXRlZC4gSWQgc2hvdWxkIGJlIGFibGUgdG8gYmUgcmVwcmVzZW50ZWQgYXMgYSBzdHJpbmcuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihpZCkge1xuICAgIHRoaXMuX2lkID0gaWQgIT09IHVuZGVmaW5lZCA/IGlkIDogVXRpbHMuY3JlYXRlSWQoKTtcbiAgICB0aGlzLl9kaXNwYXRjaGVyID0gd2luZG93O1xuICAgIHRoaXMuX2NhbGxiYWNrcyA9IHt9O1xuICAgIHRoaXMuX2V2ZW50TGlzdGVuZXJzID0ge307XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgc3RyaW5nIGlkIG9mIHRoZSBvYmplY3QuXG4gICAqXG4gICAqIEByZWFkb25seVxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKi9cbiAgZ2V0IGlkKCkge1xuICAgIHJldHVybiB0aGlzLl9pZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcmVmaXggYSBtZXNzYWdlIHdpdGggdGhlIGluc3RhbmNlIGlkLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZVxuICAgKlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cbiAgX2NyZWF0ZUxvY2FsTWVzc2FnZShtZXNzYWdlKSB7XG4gICAgcmV0dXJuIGAke3RoaXMuaWR9LiR7bWVzc2FnZX1gO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBjYWxsIGEgY2FsbGJhY2sgZnVuY3Rpb24gYW5kIHN1cHBseSB0aGUgZXZlbnQnc1xuICAgKiBkZXRhaWwgcHJvcGVydHkgYXMgYW4gYXJndW1lbnQuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gICAqXG4gICAqIEByZXR1cm5zIHtGdW5jdGlvbn1cbiAgICovXG4gIF9jcmVhdGVMaXN0ZW5lcihjYWxsYmFjaykge1xuICAgIHJldHVybiBlID0+IHtcbiAgICAgIGxldCB2YWx1ZTtcblxuICAgICAgaWYgKGUuZGV0YWlsICE9PSBudWxsKSB7XG4gICAgICAgIHZhbHVlID0gZS5kZXRhaWw7XG4gICAgICB9XG5cbiAgICAgIGNhbGxiYWNrKHZhbHVlKTtcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBldmVudCBvYmplY3QgYW5kIHNlbmQgaXQgdG8gbGlzdGVuZXJzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSAtIEV2ZW50IHR5cGUgbmFtZS5cbiAgICogQHBhcmFtIHthbnk9fSB2YWx1ZSAtIFZhbHVlIHRvIHNlbmQgdG8gbGlzdGVuZXJzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7Q3VzdG9tRXZlbnR9XG4gICAqL1xuICBfY3JlYXRlRXZlbnQobWVzc2FnZSwgdmFsdWUpIHtcbiAgICByZXR1cm4gbmV3IEN1c3RvbUV2ZW50KG1lc3NhZ2UsIHtkZXRhaWw6IHZhbHVlfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXIgYW4gZXZlbnQuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIC0gRXZlbnQgdHlwZSBuYW1lLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBsaXN0ZW5lciAtIEEgbGlzdGVuZXIgZnVuY3Rpb24gZ2VuZXJhdGVkIHVzaW5nIF9jcmVhdGVMaXN0ZW5lci5cbiAgICovXG4gIF9hZGRMaXN0ZW5lcihtZXNzYWdlLCBsaXN0ZW5lcikge1xuICAgIHRoaXMuX2Rpc3BhdGNoZXIuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgIHRoaXMuX2NyZWF0ZUxvY2FsTWVzc2FnZShtZXNzYWdlKSxcbiAgICAgIGxpc3RlbmVyXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVbnJlZ2lzdGVyIGFuIGV2ZW50LlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSAtIEV2ZW50IHR5cGUgbmFtZS5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gbGlzdGVuZXIgLSBBIGxpc3RlbmVyIGZ1bmN0aW9uIGdlbmVyYXRlZCB1c2luZyBfY3JlYXRlTGlzdGVuZXIuXG4gICAqL1xuICBfcmVtb3ZlTGlzdGVuZXIobWVzc2FnZSwgbGlzdGVuZXIpIHtcbiAgICB0aGlzLl9kaXNwYXRjaGVyLnJlbW92ZUV2ZW50TGlzdGVuZXIoXG4gICAgICB0aGlzLl9jcmVhdGVMb2NhbE1lc3NhZ2UobWVzc2FnZSksXG4gICAgICBsaXN0ZW5lclxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogRXhlY3V0ZSBhIGZ1bmN0aW9uIHdoZW4gYSBtZXNzYWdlIGlzIHJlY2VpdmVkIGZvciB0aGlzIG9iamVjdC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgLSBUaGUgbWVzc2FnZSB0byBsaXN0ZW4gZm9yLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayAtIEZ1bmN0aW9uIHRvIGV4ZWN1dGUgb25jZSB0aGUgbWVzc2FnZSBpcyByZWNlaXZlZC5cbiAgICovXG4gIGxpc3RlblRvKG1lc3NhZ2UsIGNhbGxiYWNrKSB7XG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQ2Fubm90IGFkZCBsaXN0ZW5lciBmb3IgJHttZXNzYWdlfSBvbiAke3RoaXMuaWR9LiBDYWxsYmFjayBtdXN0IGJlIGEgZnVuY3Rpb24uYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fY2FsbGJhY2tzW21lc3NhZ2VdID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuX2NhbGxiYWNrc1ttZXNzYWdlXSA9IFtdO1xuICAgICAgdGhpcy5fZXZlbnRMaXN0ZW5lcnNbbWVzc2FnZV0gPSBbXTtcbiAgICB9XG5cbiAgICBjb25zdCBsaXN0ZW5lciA9IHRoaXMuX2NyZWF0ZUxpc3RlbmVyKGNhbGxiYWNrKTtcbiAgICB0aGlzLl9jYWxsYmFja3NbbWVzc2FnZV0ucHVzaChjYWxsYmFjayk7XG4gICAgdGhpcy5fZXZlbnRMaXN0ZW5lcnNbbWVzc2FnZV0ucHVzaChsaXN0ZW5lcik7XG5cbiAgICB0aGlzLl9hZGRMaXN0ZW5lcihtZXNzYWdlLCBsaXN0ZW5lcik7XG4gIH1cblxuICAvKipcbiAgICogUHJldmVudCBhIGZ1bmN0aW9uIGZyb20gYmVpbmcgZXhlY3V0ZWQgd2hlbiBhIG1lc3NhZ2UgaXMgcmVjZWl2ZWQgZm9yIHRoaXNcbiAgICogb2JqZWN0LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSAtIFRoZSBtZXNzYWdlIHRvIHN0b3AgbGlzdGVuaW5nIGZvci5cbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IGNhbGxiYWNrIC0gT3B0aW9uYWwgY2FsbGJhY2sgdG8gcmVtb3ZlLiBJZiBub25lIGlzIGRlZmluZWQsXG4gICAqIHJlbW92ZSBhbGwgY2FsbGJhY2tzIGZvciB0aGUgbWVzc2FnZS5cbiAgICovXG4gIHN0b3BMaXN0ZW5pbmcobWVzc2FnZSwgY2FsbGJhY2spIHtcbiAgICBpZiAodGhpcy5fY2FsbGJhY2tzW21lc3NhZ2VdID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2UgaWYgKGNhbGxiYWNrID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIElmIG5vIGNhbGxiYWNrIHdhcyBkZWZpbmVkLCBjYWxsIHN0b3BMaXN0ZW5pbmcgb24gYWxsIGNhbGxiYWNrcyBmb3IgdGhlIG1lc3NhZ2VcbiAgICAgIGZvciAobGV0IGkgPSB0aGlzLl9jYWxsYmFja3NbbWVzc2FnZV0ubGVuZ3RoIC0gMTsgaSA+IC0xOyBpLS0pIHtcbiAgICAgICAgdGhpcy5zdG9wTGlzdGVuaW5nKG1lc3NhZ2UsIHRoaXMuX2NhbGxiYWNrc1ttZXNzYWdlXVtpXSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBJZiBhIGNhbGxiYWNrIHdhcyBkZWZpbmVkLCBtYWtlIHN1cmUgaXQncyBhIGxpc3RlbmVyXG4gICAgY29uc3QgaW5kZXggPSB0aGlzLl9jYWxsYmFja3NbbWVzc2FnZV0uaW5kZXhPZihjYWxsYmFjayk7XG4gICAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGxpc3RlbmVyID0gdGhpcy5fZXZlbnRMaXN0ZW5lcnNbbWVzc2FnZV1baW5kZXhdO1xuICAgIHRoaXMuX3JlbW92ZUxpc3RlbmVyKG1lc3NhZ2UsIGxpc3RlbmVyKTtcblxuICAgIHRoaXMuX2NhbGxiYWNrc1ttZXNzYWdlXS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIHRoaXMuX2V2ZW50TGlzdGVuZXJzW21lc3NhZ2VdLnNwbGljZShpbmRleCwgMSk7XG5cbiAgICBpZiAodGhpcy5fY2FsbGJhY2tzW21lc3NhZ2VdLmxlbmd0aCA9PT0gMCkge1xuICAgICAgZGVsZXRlIHRoaXMuX2NhbGxiYWNrc1ttZXNzYWdlXTtcbiAgICAgIGRlbGV0ZSB0aGlzLl9ldmVudExpc3RlbmVyc1ttZXNzYWdlXTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGUtcmVnaXN0ZXIgY2FsbGJhY2socykgZnJvbSBiZWluZyBleGVjdXRlZCB3aGVuIG1lc3NhZ2VzIG1hdGNoaW5nIHRoZSBnaXZlblxuICAgKiByZWd1bGFyIGV4cHJlc3Npb24gYXJlIHJlY2VpdmVkLlxuICAgKlxuICAgKiBAcGFyYW0ge1JlZ2V4cH0gcmVnZXhwIC0gcmVnZXhwIC0gVGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiB0byBmaWx0ZXIgbWVzc2FnZXMgd2l0aC5cbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IGNhbGxiYWNrIC0gT3B0aW9uYWwgY2FsbGJhY2sgdG8gcmVtb3ZlLiBJZiBub25lIGlzIGRlZmluZWQsXG4gICAqIHJlbW92ZSBhbGwgY2FsbGJhY2tzIGZvciBtZXNzYWdlcyBtYXRjaGluZyB0aGUgcmVndWxhciBleHByZXNzaW9uLlxuICAgKi9cbiAgc3RvcExpc3RlbmluZ0J5UmVnZXhwKHJlZ2V4cCwgY2FsbGJhY2spIHtcbiAgICBjb25zdCBtZXNzYWdlcyA9IE9iamVjdC5rZXlzKHRoaXMuX2NhbGxiYWNrcykuZmlsdGVyKG1lc3NhZ2UgPT4gcmVnZXhwLnRlc3QobWVzc2FnZSkpO1xuXG4gICAgbWVzc2FnZXMuZm9yRWFjaChtZXNzYWdlID0+IHtcbiAgICAgIHRoaXMuc3RvcExpc3RlbmluZyhtZXNzYWdlLCBjYWxsYmFjayk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUHJldmVudCBhbnkgZnVuY3Rpb25zIGZyb20gYmVpbmcgZXhlY3V0ZWQgd2hlbiBhbnkgbWVzc2FnZSBpcyByZWNlaXZlZCBmb3JcbiAgICogdGhpcyBvYmplY3QuXG4gICAqL1xuICBzdG9wTGlzdGVuaW5nVG9BbGwoKSB7XG4gICAgY29uc3QgbWVzc2FnZXMgPSBPYmplY3Qua2V5cyh0aGlzLl9jYWxsYmFja3MpO1xuXG4gICAgZm9yIChsZXQgaSA9IG1lc3NhZ2VzLmxlbmd0aCAtIDE7IGkgPiAtMTsgaS0tKSB7XG4gICAgICB0aGlzLnN0b3BMaXN0ZW5pbmcobWVzc2FnZXNbaV0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZW5kIGEgbWVzc2FnZSwgY2F1c2luZyBsaXN0ZW5lciBmdW5jdGlvbnMgZm9yIHRoZSBtZXNzYWdlIG9uIHRoaXMgb2JqZWN0XG4gICAqIHRvIGJlIGV4ZWN1dGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSAtIFRoZSBtZXNzYWdlIHRvIGVtaXQuXG4gICAqIEBwYXJhbSB7YW55PX0gdmFsdWUgLSBPcHRpb25hbCBhcmd1bWVudCB0byBwYXNzIHRvIGxpc3RlbmVyIGNhbGxiYWNrcy5cbiAgICovXG4gIGVtaXQobWVzc2FnZSwgdmFsdWUpIHtcbiAgICBpZiAodGhpcy5fY2FsbGJhY2tzW21lc3NhZ2VdID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBtZXNzYWdlID0gdGhpcy5fY3JlYXRlTG9jYWxNZXNzYWdlKG1lc3NhZ2UpO1xuICAgIGNvbnN0IGV2ZW50ID0gdGhpcy5fY3JlYXRlRXZlbnQobWVzc2FnZSwgdmFsdWUpO1xuICAgIHRoaXMuX2Rpc3BhdGNoZXIuZGlzcGF0Y2hFdmVudChldmVudCk7XG4gIH1cblxuICAvKipcbiAgICogRXhlY3V0ZSBhIGZ1bmN0aW9uIHdoZW4gYSBtZXNzYWdlIGlzIHJlY2VpdmVkIGZvciB0aGUgZ2xvYmFsIE1lc3NlbmdlciBpbnN0YW5jZS5cbiAgICpcbiAgICogQHN0YXRpY1xuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSAtIFRoZSBtZXNzYWdlIHRvIGxpc3RlbiBmb3IuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIC0gRnVuY3Rpb24gdG8gZXhlY3V0ZSBvbmNlIHRoZSBtZXNzYWdlIGlzIHJlY2VpdmVkLlxuICAgKi9cbiAgc3RhdGljIGxpc3RlblRvKG1lc3NhZ2UsIGNhbGxiYWNrLCBtZXNzZW5nZXIpIHtcbiAgICB0aGlzLkdsb2JhbE1lc3Nlbmdlci5saXN0ZW5UbyhtZXNzYWdlLCBjYWxsYmFjaywgbWVzc2VuZ2VyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcmV2ZW50IGEgZnVuY3Rpb24gZnJvbSBiZWluZyBleGVjdXRlZCB3aGVuIGEgbWVzc2FnZSBpcyByZWNlaXZlZCBmb3IgdGhlXG4gICAqIGdsb2JhbCBNZXNzZW5nZXIgaW5zdGFuY2UuXG4gICAqXG4gICAqIEBzdGF0aWNcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgLSBUaGUgbWVzc2FnZSB0byBzdG9wIGxpc3RlbmluZyBmb3IuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBjYWxsYmFjayAtIE9wdGlvbmFsIGNhbGxiYWNrIHRvIHJlbW92ZS4gSWYgbm9uZSBpcyBkZWZpbmVkLFxuICAgKiByZW1vdmUgYWxsIGNhbGxiYWNrcyBmb3IgdGhlIG1lc3NhZ2UuXG4gICAqL1xuICBzdGF0aWMgc3RvcExpc3RlbmluZyhtZXNzYWdlLCBjYWxsYmFjaykge1xuICAgIHRoaXMuR2xvYmFsTWVzc2VuZ2VyLnN0b3BMaXN0ZW5pbmcobWVzc2FnZSwgY2FsbGJhY2spO1xuICB9XG5cbiAgLyoqXG4gICAqIERlLXJlZ2lzdGVyIGNhbGxiYWNrKHMpIGZyb20gYmVpbmcgZXhlY3V0ZWQgb24gdGhlIGdsb2JhbCBtZXNzZW5nZXJyIGluc3RhbmNlXG4gICAqIHdoZW4gbWVzc2FnZXMgbWF0Y2hpbmcgdGhlIGdpdmVuIHJlZ3VsYXIgZXhwcmVzc2lvbiBhcmUgcmVjZWl2ZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVnZXhwfSByZWdleHAgLSByZWdleHAgLSBUaGUgcmVndWxhciBleHByZXNzaW9uIHRvIGZpbHRlciBtZXNzYWdlcyB3aXRoLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gY2FsbGJhY2sgLSBPcHRpb25hbCBjYWxsYmFjayB0byByZW1vdmUuIElmIG5vbmUgaXMgZGVmaW5lZCxcbiAgICogcmVtb3ZlIGFsbCBjYWxsYmFja3MgZm9yIG1lc3NhZ2VzIG1hdGNoaW5nIHRoZSByZWd1bGFyIGV4cHJlc3Npb24uXG4gICAqL1xuICBzdGF0aWMgc3RvcExpc3RlbmluZ0J5UmVnZXhwKHJlZ2V4cCwgY2FsbGJhY2spIHtcbiAgICBjb25zdCBtZXNzYWdlcyA9IE9iamVjdC5rZXlzKHRoaXMuR2xvYmFsTWVzc2VuZ2VyLl9jYWxsYmFja3MpLmZpbHRlcihcbiAgICAgIG1lc3NhZ2UgPT4gcmVnZXhwLnRlc3QobWVzc2FnZSlcbiAgICApO1xuXG4gICAgbWVzc2FnZXMuZm9yRWFjaChtZXNzYWdlID0+IHtcbiAgICAgIHRoaXMuc3RvcExpc3RlbmluZyhtZXNzYWdlLCBjYWxsYmFjayk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUHJldmVudCBhbnkgZnVuY3Rpb25zIGZyb20gYmVpbmcgZXhlY3V0ZWQgd2hlbiBhbnkgbWVzc2FnZSBpcyByZWNlaXZlZCBmb3JcbiAgICogdGhlIGdsb2JhbCBNZXNzZW5nZXIgaW5zdGFuY2UuXG4gICAqXG4gICAqIEBzdGF0aWNcbiAgICovXG4gIHN0YXRpYyBzdG9wTGlzdGVuaW5nVG9BbGwoKSB7XG4gICAgdGhpcy5HbG9iYWxNZXNzZW5nZXIuc3RvcExpc3RlbmluZ1RvQWxsKCk7XG4gIH1cblxuICAvKipcbiAgICogU2VuZCBhIG1lc3NhZ2UsIGNhdXNpbmcgbGlzdGVuZXIgZnVuY3Rpb25zIGZvciB0aGUgbWVzc2FnZSBvbiB0aGUgZ2xvYmFsIE1lc3NlbmdlclxuICAgKiBpbnN0YW5jZSB0byBiZSBleGVjdXRlZC5cbiAgICpcbiAgICogQHN0YXRpY1xuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSAtIFRoZSBtZXNzYWdlIHRvIGVtaXQuXG4gICAqIEBwYXJhbSB7YW55PX0gdmFsdWUgLSBPcHRpb25hbCBhcmd1bWVudCB0byBwYXNzIHRvIGxpc3RlbmVyIGNhbGxiYWNrcy5cbiAgICovXG4gIHN0YXRpYyBlbWl0KG1lc3NhZ2UsIHZhbHVlKSB7XG4gICAgdGhpcy5HbG9iYWxNZXNzZW5nZXIuZW1pdChtZXNzYWdlLCB2YWx1ZSk7XG4gIH1cbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTWVzc2VuZ2VyLCB7XG4gIEdsb2JhbE1lc3Nlbmdlcjoge1xuICAgIHZhbHVlOiBuZXcgTWVzc2VuZ2VyKCksXG4gICAgd3JpdGFibGU6IGZhbHNlLFxuICB9LFxuICBFVkVOVFM6IHtcbiAgICB2YWx1ZToge30sXG4gICAgd3JpdGFibGU6IGZhbHNlLFxuICB9LFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IE1lc3NlbmdlcjtcbiIsIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxyXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTBcclxuaW1wb3J0IE1lc3NlbmdlciBmcm9tICdhcHAvTWVzc2VuZ2VyJztcclxuXHJcbi8qKlxyXG4gKiBCYXNlIGNsYXNzIGZvciBhbGwgaG9zdCBmZWF0dXJlcy4gS2VlcHMgYSByZWZlcmVuY2UgdG8gdGhlIGhvc3Qgb2JqZWN0IG1hbmFnaW5nXHJcbiAqIHRoZSBmZWF0dXJlLlxyXG4gKlxyXG4gKiBAYWJzdHJhY3RcclxuICpcclxuICogQHByb3BlcnR5IHtPYmplY3R9IEVWRU5UUyAtIEJ1aWx0LWluIG1lc3NhZ2VzIHRoYXQgdGhlIGZlYXR1cmUgZW1pdHMuIFdoZW4gdGhlXHJcbiAqIGZlYXR1cmUgaXMgYWRkZWQgdG8gYSB7QGxpbmsgY29yZS9Ib3N0T2JqZWN0fSwgZXZlbnQgbmFtZXMgd2lsbCBiZSBwcmVmaXhlZCBieSB0aGVcclxuICogbmFtZSBvZiB0aGUgZmVhdHVyZSBjbGFzcyArICcuJy5cclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtFVkVOVFMudXBkYXRlPW9uVXBkYXRlXSAtIE1lc3NhZ2UgdGhhdCBpcyBlbWl0dGVkIGFmdGVyXHJcbiAqIGVhY2ggY2FsbCB0byBbdXBkYXRlXXtAbGluayBBYnN0cmFjdEhvc3RGZWF0dXJlI3VwZGF0ZX0uXHJcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBTRVJWSUNFUyAtIEFueSBBV1Mgc2VydmljZXMgdGhhdCBhcmUgbmVjZXNzYXJ5IGZvciB0aGVcclxuICogZmVhdHVyZSB0byBmdW5jdGlvbi5cclxuICovXHJcbmNsYXNzIEFic3RyYWN0SG9zdEZlYXR1cmUge1xyXG4gIC8qKlxyXG4gICAqIEBjb25zdHJ1Y3RvclxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtjb3JlL0hvc3RPYmplY3R9IGhvc3QgLSBUaGUgSG9zdE9iamVjdCBtYW5hZ2luZyB0aGUgZmVhdHVyZS5cclxuICAgKi9cclxuICBjb25zdHJ1Y3Rvcihob3N0KSB7XHJcbiAgICB0aGlzLl9ob3N0ID0gaG9zdDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFkZHMgYSBuYW1lc3BhY2UgdG8gdGhlIGhvc3Qgd2l0aCB0aGUgbmFtZSBvZiB0aGUgZmVhdHVyZSB0byBjb250YWluIHByb3BlcnRpZXNcclxuICAgKiBhbmQgbWV0aG9kcyBmcm9tIHRoZSBmZWF0dXJlIHRoYXQgdXNlcnMgb2YgdGhlIGhvc3QgbmVlZCBhY2Nlc3MgdG8uXHJcbiAgICovXHJcbiAgaW5zdGFsbEFwaSgpIHtcclxuICAgIGNvbnN0IGV2ZW50cyA9IHt9O1xyXG4gICAgY29uc3QgYXBpID0ge0VWRU5UUzogZXZlbnRzfTtcclxuXHJcbiAgICAvLyBBZGQgdGhlIGNsYXNzIG5hbWUgdG8gZXZlbnQgbmFtZXNcclxuICAgIE9iamVjdC5lbnRyaWVzKHRoaXMuY29uc3RydWN0b3IuRVZFTlRTKS5mb3JFYWNoKChbbmFtZSwgdmFsdWVdKSA9PiB7XHJcbiAgICAgIGV2ZW50c1tuYW1lXSA9IGAke3RoaXMuY29uc3RydWN0b3IubmFtZX0uJHt2YWx1ZX1gO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5faG9zdFt0aGlzLmNvbnN0cnVjdG9yLm5hbWVdID0gYXBpO1xyXG5cclxuICAgIHJldHVybiBhcGk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSBob3N0IHRoYXQgbWFuYWdlcyB0aGUgZmVhdHVyZS5cclxuICAgKlxyXG4gICAqIEByZWFkb25seVxyXG4gICAqL1xyXG4gIGdldCBob3N0KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2hvc3Q7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSBlbmdpbmUgb3duZXIgb2JqZWN0IG9mIHRoZSBob3N0LlxyXG4gICAqXHJcbiAgICogQHJlYWRvbmx5XHJcbiAgICovXHJcbiAgZ2V0IG93bmVyKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2hvc3Qub3duZXI7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBMaXN0ZW4gdG8gYSBmZWF0dXJlIG1lc3NhZ2UgZnJvbSB0aGUgaG9zdCBvYmplY3QuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSAtIE1lc3NhZ2UgdG8gbGlzdGVuIGZvci5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayAtIFRoZSBjYWxsYmFjayB0byBleGVjdXRlIHdoZW4gdGhlIG1lc3NhZ2UgaXMgcmVjZWl2ZWQuXHJcbiAgICovXHJcbiAgbGlzdGVuVG8obWVzc2FnZSwgY2FsbGJhY2spIHtcclxuICAgIHRoaXMuX2hvc3QubGlzdGVuVG8obWVzc2FnZSwgY2FsbGJhY2spO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTGlzdGVuIHRvIGEgZmVhdHVyZSBtZXNzYWdlIGZyb20gdGhlIGdsb2JhbCBtZXNzZW5nZXIuIEZlYXR1cmUgbWVzc2FnZXMgd2lsbFxyXG4gICAqIGJlIHByZWZpeGVkIHdpdGggdGhlIGNsYXNzIG5hbWUgb2YgdGhlIGZlYXR1cmUuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSAtIE1lc3NhZ2UgdG8gbGlzdGVuIGZvci5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayAtIFRoZSBjYWxsYmFjayB0byBleGVjdXRlIHdoZW4gdGhlIG1lc3NhZ2UgaXMgcmVjZWl2ZWQuXHJcbiAgICovXHJcbiAgc3RhdGljIGxpc3RlblRvKG1lc3NhZ2UsIGNhbGxiYWNrKSB7XHJcbiAgICBtZXNzYWdlID0gYCR7dGhpcy5uYW1lfS4ke21lc3NhZ2V9YDtcclxuICAgIE1lc3Nlbmdlci5saXN0ZW5UbyhtZXNzYWdlLCBjYWxsYmFjayk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTdG9wIGxpc3RlbmluZyB0byBhIG1lc3NhZ2UgZnJvbSB0aGUgaG9zdCBvYmplY3QuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSAtIE1lc3NhZ2UgdG8gc3RvcCBsaXN0ZW5pbmcgZm9yLlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBjYWxsYmFjayAtIE9wdGlvbmFsIGNhbGxiYWNrIHRvIHJlbW92ZS4gSWYgbm9uZSBpcyBkZWZpbmVkLFxyXG4gICAqIHJlbW92ZSBhbGwgY2FsbGJhY2tzIGZvciB0aGUgbWVzc2FnZS5cclxuICAgKi9cclxuICBzdG9wTGlzdGVuaW5nKG1lc3NhZ2UsIGNhbGxiYWNrKSB7XHJcbiAgICB0aGlzLl9ob3N0LnN0b3BMaXN0ZW5pbmcobWVzc2FnZSwgY2FsbGJhY2spO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU3RvcCBsaXN0ZW5pbmcgdG8gYSBtZXNzYWdlIGZyb20gdGhlIGdsb2JhbCBtZXNzZW5nZXIuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSAtIE1lc3NhZ2UgdG8gc3RvcCBsaXN0ZW5pbmcgZm9yLlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBjYWxsYmFjayAtIE9wdGlvbmFsIGNhbGxiYWNrIHRvIHJlbW92ZS4gSWYgbm9uZSBpcyBkZWZpbmVkLFxyXG4gICAqIHJlbW92ZSBhbGwgY2FsbGJhY2tzIGZvciB0aGUgbWVzc2FnZS5cclxuICAgKi9cclxuICBzdGF0aWMgc3RvcExpc3RlbmluZyhtZXNzYWdlLCBjYWxsYmFjaykge1xyXG4gICAgbWVzc2FnZSA9IGAke3RoaXMubmFtZX0uJHttZXNzYWdlfWA7XHJcbiAgICBNZXNzZW5nZXIuc3RvcExpc3RlbmluZyhtZXNzYWdlLCBjYWxsYmFjayk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTdG9wIGxpc3RlbmluZyB0byBhIG1lc3NhZ2UgbWF0Y2hpbmcgdGhlIGdpdmVuIHJlZ3VsYXIgZXhwcmVzc2lvbiBmcm9tIHRoZVxyXG4gICAqIGhvc3Qgb2JqZWN0LlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtSZWdleHB9IHJlZ2V4cCAtIFRoZSByZWd1bGFyIGV4cHJlc3Npb24gdG8gc3RvcCBsaXN0ZW5pbmcgZm9yLlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBjYWxsYmFjayAtIE9wdGlvbmFsIGNhbGxiYWNrIHRvIHJlbW92ZS4gSWYgbm9uZSBpcyBkZWZpbmVkLFxyXG4gICAqIHJlbW92ZSBhbGwgY2FsbGJhY2tzIGZvciB0aGUgbWVzc2FnZS5cclxuICAgKi9cclxuICBzdG9wTGlzdGVuaW5nQnlSZWdleHAocmVnZXhwLCBjYWxsYmFjaykge1xyXG4gICAgdGhpcy5faG9zdC5zdG9wTGlzdGVuaW5nQnlSZWdleHAocmVnZXhwLCBjYWxsYmFjayk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTdG9wIGxpc3RlbmluZyB0byBhIG1lc3NhZ2UgbWF0Y2hpbmcgdGhlIGdpdmVuIHJlZ3VsYXIgZXhwcmVzc2lvbiBmcm9tIHRoZVxyXG4gICAqIGdsb2JhbCBtZXNzZW5nZXIuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge1JlZ2V4cH0gcmVnZXhwIC0gVGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiB0byBzdG9wIGxpc3RlbmluZyBmb3IuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IGNhbGxiYWNrIC0gT3B0aW9uYWwgY2FsbGJhY2sgdG8gcmVtb3ZlLiBJZiBub25lIGlzIGRlZmluZWQsXHJcbiAgICogcmVtb3ZlIGFsbCBjYWxsYmFja3MgZm9yIHRoZSBtZXNzYWdlLlxyXG4gICAqL1xyXG4gIHN0YXRpYyBzdG9wTGlzdGVuaW5nQnlSZWdleHAocmVnZXhwLCBjYWxsYmFjaykge1xyXG4gICAgcmVnZXhwID0gbmV3IFJlZ0V4cChgXiR7dGhpcy5uYW1lfS4ke3JlZ2V4cC5zb3VyY2UucmVwbGFjZSgvXFxeLywgJycpfWApO1xyXG4gICAgTWVzc2VuZ2VyLnN0b3BMaXN0ZW5pbmdCeVJlZ2V4cChyZWdleHAsIGNhbGxiYWNrKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFN0b3AgbGlzdGVuaW5nIHRvIGFsbCBtZXNzYWdlcy5cclxuICAgKi9cclxuICBzdG9wTGlzdGVuaW5nVG9BbGwoKSB7XHJcbiAgICB0aGlzLl9ob3N0LnN0b3BMaXN0ZW5pbmdUb0FsbCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU3RvcCBsaXN0ZW5pbmcgdG8gYWxsIGZlYXR1cmUgbWVzc2FnZXMuXHJcbiAgICovXHJcbiAgc3RhdGljIHN0b3BMaXN0ZW5pbmdUb0FsbCgpIHtcclxuICAgIE1lc3Nlbmdlci5zdG9wTGlzdGVuaW5nQnlSZWdleHAobmV3IFJlZ0V4cChgXiR7dGhpcy5uYW1lfS5gKSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFbWl0IGZlYXR1cmUgbWVzc2FnZXMgZnJvbSB0aGUgaG9zdC4gRmVhdHVyZSBtZXNzYWdlcyB3aWxsIGJlIHByZWZpeGVkIHdpdGhcclxuICAgKiB0aGUgY2xhc3MgbmFtZSBvZiB0aGUgZmVhdHVyZS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIC0gVGhlIG1lc3NhZ2UgdG8gZW1pdC5cclxuICAgKiBAcGFyYW0ge2FueT19IHZhbHVlIC0gT3B0aW9uYWwgcGFyYW1ldGVyIHRvIHBhc3MgdG8gbGlzdGVuZXIgY2FsbGJhY2tzLlxyXG4gICAqL1xyXG4gIGVtaXQobWVzc2FnZSwgdmFsdWUpIHtcclxuICAgIG1lc3NhZ2UgPSBgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9LiR7bWVzc2FnZX1gO1xyXG4gICAgdGhpcy5faG9zdC5lbWl0KG1lc3NhZ2UsIHZhbHVlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEVtaXQgZmVhdHVyZSBtZXNzYWdlcyBmcm9tIHRoZSBnbG9iYWwgbWVzc2VuZ2VyLiBGZWF0dXJlIG1lc3NhZ2VzIHdpbGwgYmUgcHJlZml4ZWRcclxuICAgKiB3aXRoIHRoZSBjbGFzcyBuYW1lIG9mIHRoZSBmZWF0dXJlLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgLSBUaGUgbWVzc2FnZSB0byBlbWl0LlxyXG4gICAqIEBwYXJhbSB7YW55PX0gdmFsdWUgLSBPcHRpb25hbCBwYXJhbWV0ZXIgdG8gcGFzcyB0byBsaXN0ZW5lciBjYWxsYmFja3MuXHJcbiAgICovXHJcbiAgc3RhdGljIGVtaXQobWVzc2FnZSwgdmFsdWUpIHtcclxuICAgIG1lc3NhZ2UgPSBgJHt0aGlzLm5hbWV9LiR7bWVzc2FnZX1gO1xyXG4gICAgTWVzc2VuZ2VyLmVtaXQobWVzc2FnZSwgdmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRXhlY3V0ZXMgZWFjaCB0aW1lIHRoZSBob3N0IGlzIHVwZGF0ZWQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge251bWJlcn0gZGVsdGFUaW1lIC0gQW1vdW50IG9mIHRpbWUgc2luY2UgdGhlIGxhc3QgaG9zdCB1cGRhdGUgd2FzXHJcbiAgICogY2FsbGVkLlxyXG4gICAqL1xyXG4gIHVwZGF0ZShkZWx0YVRpbWUpIHtcclxuICAgIHRoaXMuZW1pdCh0aGlzLmNvbnN0cnVjdG9yLkVWRU5UUy51cGRhdGUsIGRlbHRhVGltZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDbGVhbiB1cCBvbmNlIHRoZSBmZWF0dXJlIGlzIG5vIGxvbmdlciBpbiB1c2UuIFJlbW92ZSB0aGUgZmVhdHVyZSBuYW1lc3BhY2VcclxuICAgKiBmcm9tIHRoZSBob3N0IGFuZCByZW1vdmUgcmVmZXJlbmNlIHRvIHRoZSBob3N0LlxyXG4gICAqL1xyXG4gIGRpc2NhcmQoKSB7XHJcbiAgICBPYmplY3Qua2V5cyh0aGlzLl9ob3N0W3RoaXMuY29uc3RydWN0b3IubmFtZV0pLmZvckVhY2gobmFtZSA9PiB7XHJcbiAgICAgIGRlbGV0ZSB0aGlzLl9ob3N0W3RoaXMuY29uc3RydWN0b3IubmFtZV1bbmFtZV07XHJcbiAgICB9KTtcclxuXHJcbiAgICBkZWxldGUgdGhpcy5faG9zdFt0aGlzLmNvbnN0cnVjdG9yLm5hbWVdO1xyXG4gICAgZGVsZXRlIHRoaXMuX2hvc3Q7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBcHBsaWVzIGEgc2VxdWVuY2Ugb2YgbWl4aW4gY2xhc3MgZmFjdG9yeSBmdW5jdGlvbnMgdG8gdGhpcyBjbGFzcyBhbmRcclxuICAgKiByZXR1cm5zIHRoZSByZXN1bHQuIEVhY2ggZnVuY3Rpb24gaXMgZXhwZWN0ZWQgdG8gcmV0dXJuIGEgY2xhc3MgdGhhdFxyXG4gICAqIGV4dGVuZHMgdGhlIGNsYXNzIGl0IHdhcyBnaXZlbi4gVGhlIGZ1bmN0aW9ucyBhcmUgYXBwbGllZCBpbiB0aGUgb3JkZXJcclxuICAgKiB0aGF0IHBhcmFtZXRlcnMgYXJlIGdpdmVuLCBtZWFuaW5nIHRoYXQgdGhlIGZpcnN0IGZhY3Rvcnkgd2lsbFxyXG4gICAqIGV4dGVuZCB0aGlzIGJhc2UgY2xhc3MuXHJcbiAgICpcclxuICAgKiBAcGFyYW0gey4uLkZ1bmN0aW9ufSBtaXhpbkNsYXNzRmFjdG9yaWVzIENsYXNzIGZhY3RvcnkgZnVuY3Rpb25zIHRoYXQgd2lsbFxyXG4gICAqIGJlIGFwcGxpZWQuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7Q2xhc3N9IEEgY2xhc3MgdGhhdCBpcyB0aGUgcmVzdWx0IG9mIGFwcGx5aW5nIHRoZSBmYWN0b3J5IGZ1bmN0aW9ucy5cclxuICAgKiBUaGUgcmVzdWx0aW5nIGNsYXNzIHdpbGwgYWx3YXlzIGluaGVyaXQgZnJvbSBBYnN0cmFjdEhvc3RGZWF0dXJlLlxyXG4gICAqL1xyXG4gIHN0YXRpYyBtaXgoLi4ubWl4aW5DbGFzc0ZhY3Rvcmllcykge1xyXG4gICAgbGV0IFJlc3VsdENsYXNzID0gdGhpcztcclxuXHJcbiAgICBtaXhpbkNsYXNzRmFjdG9yaWVzLmZvckVhY2gobWl4aW5DbGFzc0ZhY3RvcnkgPT4ge1xyXG4gICAgICBSZXN1bHRDbGFzcyA9IG1peGluQ2xhc3NGYWN0b3J5KFJlc3VsdENsYXNzKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBSZXN1bHRDbGFzcztcclxuICB9XHJcbn1cclxuXHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEFic3RyYWN0SG9zdEZlYXR1cmUsIHtcclxuICBFVkVOVFM6IHtcclxuICAgIHZhbHVlOiB7XHJcbiAgICAgIHVwZGF0ZTogJ29uVXBkYXRlJyxcclxuICAgIH0sXHJcbiAgICB3cml0YWJsZTogZmFsc2UsXHJcbiAgfSxcclxuICBTRVJWSUNFUzoge1xyXG4gICAgdmFsdWU6IHt9LFxyXG4gICAgd3JpdGFibGU6IGZhbHNlLFxyXG4gIH0sXHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgQWJzdHJhY3RIb3N0RmVhdHVyZTtcclxuIiwiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXHJcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxyXG5pbXBvcnQgTWVzc2VuZ2VyIGZyb20gJ2FwcC9NZXNzZW5nZXInO1xyXG5pbXBvcnQgQWJzdHJhY3RIb3N0RmVhdHVyZSBmcm9tICcuL0Fic3RyYWN0SG9zdEZlYXR1cmUnO1xyXG5pbXBvcnQgVXRpbHMgZnJvbSAnLi9VdGlscyc7XHJcblxyXG4vKipcclxuICogT2JqZWN0IHRoYXQgbWFuYWdlcyBhY2Nlc3MgdG8gYWxsIEhvc3QgZmVhdHVyZXMuIENvbnRhaW5zIGEgcmVmZXJlbmNlIHRvXHJcbiAqIGVuZ2luZS1zcGVjaWZpYyB2aXN1YWxzIGlmIGFwcGxpY2FibGUuXHJcbiAqXHJcbiAqIEBleHRlbmRzIGNvcmUvTWVzc2VuZ2VyXHJcbiAqIEBhbGlhcyBjb3JlL0hvc3RPYmplY3RcclxuICpcclxuICogQHByb3BlcnR5IHtPYmplY3R9IEVWRU5UUyAtIEJ1aWx0LWluIG1lc3NhZ2VzIHRoYXQgdGhlIE1lc3NlbmdlciBlbWl0cy5cclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtFVkVOVFMudXBkYXRlPSdvblVwZGF0ZSddIC0gTWVzc2FnZSB0aGF0IGlzIGVtaXR0ZWQgYWZ0ZXJcclxuICogZWFjaCBjYWxsIHRvIFt1cGRhdGVde0BsaW5rIGNvcmUvSG9zdE9iamVjdCN1cGRhdGV9LlxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW0VWRU5UUy5hZGRGZWF0dXJlPSdvbkFkZEZlYXR1cmUnXSAtIE1lc3NhZ2UgdGhhdCBpcyBlbWl0dGVkXHJcbiAqIGFmdGVyIGVhY2ggY2FsbCB0byBbYWRkRmVhdHVyZV17QGxpbmsgY29yZS9Ib3N0T2JqZWN0I2FkZEZlYXR1cmV9LlxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW0VWRU5UUy5yZW1vdmVGZWF0dXJlPSdvblJlbW92ZUZlYXR1cmUnXSAtIE1lc3NhZ2UgdGhhdCBpcyBlbWl0dGVkXHJcbiAqIGFmdGVyIGVhY2ggY2FsbCB0byBbcmVtb3ZlRmVhdHVyZV17QGxpbmsgY29yZS9Ib3N0T2JqZWN0I3JlbW92ZUZlYXR1cmV9LlxyXG4gKi9cclxuY2xhc3MgSG9zdE9iamVjdCBleHRlbmRzIE1lc3NlbmdlciB7XHJcbiAgLyoqXHJcbiAgICogQGNvbnN0cnVjdG9yXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge09iamVjdD19IG9wdGlvbnMgLSBPcHRpb25zIGZvciB0aGUgaG9zdC5cclxuICAgKiBAcGFyYW0ge09iamVjdD19IG9wdGlvbnMub3duZXIgLSBPcHRpb25hbCBlbmdpbmUtc3BlY2lmaWMgb3duZXIgb2YgdGhlIGhvc3QuXHJcbiAgICovXHJcbiAgY29uc3RydWN0b3Ioe293bmVyID0ge319ID0ge30pIHtcclxuICAgIC8vIElmIGFuIG93bmVyIGlzIHNwZWNpZmllZCwgdXNlIGl0cyBpZCBmb3IgbWVzc2FnaW5nXHJcbiAgICBzdXBlcihvd25lci5pZCk7XHJcblxyXG4gICAgdGhpcy5fb3duZXIgPSBvd25lcjtcclxuICAgIHRoaXMuX2ZlYXR1cmVzID0ge307XHJcbiAgICB0aGlzLl93YWl0cyA9IFtdO1xyXG4gICAgdGhpcy5fbGFzdFVwZGF0ZSA9IHRoaXMubm93O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgZW5naW5lIG93bmVyIG9iamVjdCBvZiB0aGUgaG9zdC5cclxuICAgKlxyXG4gICAqIEByZWFkb25seVxyXG4gICAqIEB0eXBlIHtPYmplY3R9XHJcbiAgICovXHJcbiAgZ2V0IG93bmVyKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX293bmVyO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgY3VycmVudCB0aW1lIGluIG1pbGxpc2Vjb25kcy5cclxuICAgKlxyXG4gICAqIEByZWFkb25seVxyXG4gICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICovXHJcbiAgZ2V0IG5vdygpIHtcclxuICAgIHJldHVybiBEYXRlLm5vdygpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgYW1vdW50IG9mIHRpbWUgaW4gbWlsbGlzZWNvbmRzIHNpbmNlIHVwZGF0ZSB3YXMgbGFzdCBjYWxsZWQuXHJcbiAgICpcclxuICAgKiBAcmVhZG9ubHlcclxuICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAqL1xyXG4gIGdldCBkZWx0YVRpbWUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5ub3cgLSB0aGlzLl9sYXN0VXBkYXRlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIGluIHRoZSBlbmdpbmUncyByZW5kZXIgbG9vcC4gRXhlY3V0ZXMgdXBkYXRlXHJcbiAgICogbG9vcHMgZm9yIGFsbCBmZWF0dXJlcy5cclxuICAgKi9cclxuICB1cGRhdGUoKSB7XHJcbiAgICBjb25zdCBjdXJyZW50VGltZSA9IHRoaXMubm93O1xyXG4gICAgY29uc3QgZHQgPSB0aGlzLmRlbHRhVGltZTtcclxuXHJcbiAgICAvLyBQcm9ncmVzcyBzdG9yZWQgd2FpdHNcclxuICAgIHRoaXMuX3dhaXRzLmZvckVhY2god2FpdCA9PiB7XHJcbiAgICAgIHdhaXQuZXhlY3V0ZShkdCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBVcGRhdGUgYWxsIGZlYXR1cmVzXHJcbiAgICBPYmplY3QudmFsdWVzKHRoaXMuX2ZlYXR1cmVzKS5mb3JFYWNoKGZlYXR1cmUgPT4ge1xyXG4gICAgICBmZWF0dXJlLnVwZGF0ZShkdCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBOb3RpZnkgbGlzdGVuZXJzIGFuIHVwZGF0ZSBvY2N1cmVkXHJcbiAgICB0aGlzLmVtaXQodGhpcy5jb25zdHJ1Y3Rvci5FVkVOVFMudXBkYXRlLCBkdCk7XHJcblxyXG4gICAgdGhpcy5fbGFzdFVwZGF0ZSA9IGN1cnJlbnRUaW1lO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIGEgZGVmZXJyZWQgcHJvbWlzZSB0aGF0IHdpbGwgd2FpdCBhIGdpdmVuIG51bWJlciBvZiBzZWNvbmRzIGJlZm9yZVxyXG4gICAqIHJlc29sdmluZy4gVGhlIGhvc3Qgd2lsbCBjb250aW51b3VzbHkgdXBkYXRlIHRoZSB3YWl0IHByb21pc2UgZHVyaW5nIHRoZVxyXG4gICAqIHVwZGF0ZSBsb29wIHVudGlsIGl0IHJlc29sdmVzLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtzZWNvbmRzPTBdIC0gTnVtYmVyIG9mIHNlY29uZHMgdG8gd2FpdCBiZWZvcmUgcmVzb2x2aW5nLlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0PX0gb3B0aW9ucyAtIE9wdGlvbmFsIG9wdGlvbnMgb2JqZWN0XHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdGlvbnMub25GaW5pc2hdIC0gQ2FsbGJhY2sgdG8gZXhlY3V0ZSBvbmNlIHRoZSB3YWl0IHRpbWVcclxuICAgKiBpcyBtZXQuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9wdGlvbnMub25Qcm9ncmVzcyAtIENhbGxiYWNrIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSB3YWl0XHJcbiAgICogdGltZSBwcm9ncmVzc2VzIHRvd2FyZHMgdGhlIHRhcmdldCBudW1iZXIgb2Ygc2Vjb25kcy4gVGhlIGFtb3VudCBvZiBwcm9ncmVzc1xyXG4gICAqIGFzIGEgMC0xIHBlcmNlbnRhZ2UgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50LlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvcHRpb25zLm9uQ2FuY2VsIC0gQ2FsbGJhY2sgdG8gZXhlY3V0ZSBpZiB0aGUgdXNlciBjYW5jZWxzXHJcbiAgICogdGhlIHdhaXQgYmVmb3JlIGNvbXBsZXRpb24uXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9wdGlvbnMub25FcnJvciAtIENhbGxiYWNrIHRvIGV4ZWN1dGUgaWYgdGhlIHdhaXQgc3RvcHNcclxuICAgKiBiZWNhdXNlIGFuIGVycm9yIGlzIGVuY291bnRlcmVkLiBUaGUgZXJyb3IgbWVzc2FnZSBpcyBwYXNzZWQgYXMgYSBwYXJhbWV0ZXIuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7RGVmZXJyZWR9XHJcbiAgICovXHJcbiAgd2FpdChzZWNvbmRzLCB7b25GaW5pc2gsIG9uUHJvZ3Jlc3MsIG9uQ2FuY2VsLCBvbkVycm9yfSA9IHt9KSB7XHJcbiAgICBjb25zdCB3YWl0ID0gVXRpbHMud2FpdChzZWNvbmRzLCB7b25GaW5pc2gsIG9uUHJvZ3Jlc3MsIG9uQ2FuY2VsLCBvbkVycm9yfSk7XHJcbiAgICB0aGlzLl93YWl0cy5wdXNoKHdhaXQpO1xyXG5cclxuICAgIC8vIE9uY2UgdGhlIHdhaXQgcHJvbWlzZSBpcyBubyBsb25nZXIgcGVuZGluZyByZW1vdmUgaXQgZnJvbSB0aGUgd2FpdHMgYXJyYXlcclxuICAgIGNvbnN0IG9uQ29tcGxldGUgPSAoKSA9PiB7XHJcbiAgICAgIHRoaXMuX3dhaXRzLnNwbGljZSh0aGlzLl93YWl0cy5pbmRleE9mKHdhaXQpLCAxKTtcclxuICAgIH07XHJcbiAgICB3YWl0LnRoZW4ob25Db21wbGV0ZSwgb25Db21wbGV0ZSk7XHJcblxyXG4gICAgcmV0dXJuIHdhaXQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJbnN0YW50aWF0ZSBhIG5ldyBIb3N0IGZlYXR1cmUgYW5kIHN0b3JlIGl0LiBGZWF0dXJlcyBtdXN0IGluaGVyaXQgZnJvbVxyXG4gICAqIEFic3RyYWN0SG9zdEZlYXR1cmUuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge0NsYXNzfSBGZWF0dXJlQ2xhc3MgLSBDbGFzcyB0aGF0IHdpbGwgaW5zdGFudGlhdGUgdGhlIGZlYXR1cmUuIE11c3RcclxuICAgKiBleHRlbmQge0BsaW5rIEFic3RyYWN0SG9zdEZlYXR1cmV9LlxyXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2ZvcmNlPWZhbHNlXSAtIFdoZXRoZXIgb3Igbm90IHRvIG92ZXJ3cml0ZSBhbiBleGlzdGluZ1xyXG4gICAqIGZlYXR1cmUgaWYgb25lIG9mIHRoaXMgdHlwZSBhbHJlYWR5IGV4aXN0cyBvbiB0aGUgb2JqZWN0LlxyXG4gICAqIEBwYXJhbSAgey4uLmFueX0gYXJncyAtIEFkZGl0aW9uYWwgYXJndW1lbnRzIHRvIHBhc3MgdG8gdGhlIEZlYXR1cmVDbGFzc1xyXG4gICAqIGNvbnN0cnVjdG9yLiBUaGUgSG9zdE9iamVjdCB3aWxsIGFsd2F5cyBiZSBwYXNzZWQgYXMgdGhlIGZpcnN0IGFyZ3VtZW50LlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge2Jvb2xlYW59IC0gV2hldGhlciBvciBub3QgYSBmZWF0dXJlIHdhcyBzdWNjZXNzZnVsbHkgYWRkZWQuXHJcbiAgICovXHJcbiAgYWRkRmVhdHVyZShGZWF0dXJlQ2xhc3MsIGZvcmNlID0gZmFsc2UsIC4uLmFyZ3MpIHtcclxuICAgIGNvbnN0IGlucHV0VHlwZSA9IHR5cGVvZiBGZWF0dXJlQ2xhc3M7XHJcblxyXG4gICAgLy8gTWFrZSBzdXJlIHRoZSBGZWF0dXJlQ2xhc3MgY2FuIGJlIGV4ZWN1dGVkXHJcbiAgICBpZiAoaW5wdXRUeXBlICE9PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgQ2Fubm90IGFkZCBmZWF0dXJlIHRvIGhvc3QgJHt0aGlzLmlkfS4gRmVhdHVyZUNsYXNzIG11c3QgYmUgYSBjbGFzcy5gXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICAvLyBNYWtlIHN1cmUgdGhlIGZlYXR1cmUgaXMgYSBob3N0IGZlYXR1cmVcclxuICAgIGVsc2UgaWYgKCEoRmVhdHVyZUNsYXNzLnByb3RvdHlwZSBpbnN0YW5jZW9mIEFic3RyYWN0SG9zdEZlYXR1cmUpKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgQ2Fubm90IGFkZCBmZWF0dXJlICR7RmVhdHVyZUNsYXNzLm5hbWV9IHRvIGhvc3QgJHt0aGlzLmlkfS4gRmVhdHVyZUNsYXNzIG11c3QgZXh0ZW5kIEFic3RyYWN0SG9zdEZlYXR1cmUuYFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIENoZWNrIGlmIHRoZSBGZWF0dXJlQ2xhc3MgYWxyZWFkeSBleGlzdHMgb24gdGhpcyBvYmplY3RcclxuICAgIGlmICh0aGlzLl9mZWF0dXJlc1tGZWF0dXJlQ2xhc3MubmFtZV0gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBpZiAoZm9yY2UpIHtcclxuICAgICAgICBjb25zb2xlLndhcm4oXHJcbiAgICAgICAgICBgRmVhdHVyZSAke0ZlYXR1cmVDbGFzcy5uYW1lfSBhbHJlYWR5IGV4aXN0cyBvbiBob3N0ICR7dGhpcy5pZH0uIEV4aXN0aW5nIGZlYXR1cmUgd2lsbCBiZSBvdmVyd3JpdHRlbi5gXHJcbiAgICAgICAgKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgICBgRmVhdHVyZSAke0ZlYXR1cmVDbGFzcy5uYW1lfSBhbHJlYWR5IGV4aXN0cyBvbiBob3N0ICR7dGhpcy5pZH0uIFVzZSAnZm9yY2UnIGFyZ3VtZW50IHRvIG92ZXJ3cml0ZSB0aGUgZmVhdHVyZS5gXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIEluaXRpYWxpemUgdGhlIGZlYXR1cmVcclxuICAgIGNvbnN0IGZlYXR1cmUgPSBuZXcgRmVhdHVyZUNsYXNzKHRoaXMsIC4uLmFyZ3MpO1xyXG4gICAgZmVhdHVyZS5pbnN0YWxsQXBpKCk7XHJcblxyXG4gICAgdGhpcy5fZmVhdHVyZXNbRmVhdHVyZUNsYXNzLm5hbWVdID0gZmVhdHVyZTtcclxuICAgIHRoaXMuZW1pdCh0aGlzLmNvbnN0cnVjdG9yLkVWRU5UUy5hZGRGZWF0dXJlLCBGZWF0dXJlQ2xhc3MubmFtZSk7XHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZW1vdmUgYSBmZWF0dXJlIGZyb20gdGhlIG9iamVjdC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlTmFtZSAtIE5hbWUgb2YgdGhlIHR5cGUgb2YgZmVhdHVyZSB0byByZW1vdmUuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSBXaGV0aGVyIG9yIG5vdCBhIGZlYXR1cmUgd2FzIHN1Y2Nlc3NmdWxseSByZW1vdmVkLlxyXG4gICAqL1xyXG4gIHJlbW92ZUZlYXR1cmUodHlwZU5hbWUpIHtcclxuICAgIGlmICh0aGlzLl9mZWF0dXJlc1t0eXBlTmFtZV0gPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBjb25zb2xlLndhcm4oXHJcbiAgICAgICAgYEZlYXR1cmUgb2YgdHlwZSAke3R5cGVOYW1lfSBkb2VzIG5vdCBleGlzdCBvbiBob3N0ICR7dGhpcy5pZH0uIE5vIGZlYXR1cmUgd2lsbCBiZSByZW1vdmVkLmBcclxuICAgICAgKTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gUmVtb3ZlIHRoZSBmZWF0dXJlXHJcbiAgICAgIHRoaXMuZW1pdCh0aGlzLmNvbnN0cnVjdG9yLkVWRU5UUy5yZW1vdmVGZWF0dXJlLCB0eXBlTmFtZSk7XHJcbiAgICAgIHRoaXMuX2ZlYXR1cmVzW3R5cGVOYW1lXS5kaXNjYXJkKCk7XHJcbiAgICAgIGRlbGV0ZSB0aGlzLl9mZWF0dXJlc1t0eXBlTmFtZV07XHJcblxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEluZGljYXRlIHdoZXRoZXIgYSBzcGVjaWZpZWQgZmVhdHVyZSBpcyBpbnN0YWxsZWQgb24gdGhlIGhvc3QuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdHlwZU5hbWUgLSBOYW1lIG9mIHRoZSB0eXBlIG9mIGZlYXR1cmUgdG8gbG9vayBmb3IuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuICAgKi9cclxuICBoYXNGZWF0dXJlKHR5cGVOYW1lKSB7XHJcbiAgICByZXR1cm4gISF0aGlzLl9mZWF0dXJlc1t0eXBlTmFtZV07XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBMaXN0IHRoZSBuYW1lcyBvZiB0aGUgZmVhdHVyZXMgaW5zdGFsbGVkIG9uIHRoZSBob3N0LlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0FycmF5LjxzdHJpbmc+fVxyXG4gICAqL1xyXG4gIGxpc3RGZWF0dXJlcygpIHtcclxuICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLl9mZWF0dXJlcyk7XHJcbiAgfVxyXG59XHJcblxyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSG9zdE9iamVjdCwgJ0VWRU5UUycsIHtcclxuICB2YWx1ZToge1xyXG4gICAgLi4uT2JqZWN0LmdldFByb3RvdHlwZU9mKEhvc3RPYmplY3QpLkVWRU5UUyxcclxuICAgIHVwZGF0ZTogJ29uVXBkYXRlJyxcclxuICAgIGFkZEZlYXR1cmU6ICdvbkFkZEZlYXR1cmUnLFxyXG4gICAgcmVtb3ZlRmVhdHVyZTogJ29uUmVtb3ZlRmVhdHVyZScsXHJcbiAgfSxcclxuICB3cml0YWJsZTogZmFsc2UsXHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgSG9zdE9iamVjdDtcclxuIiwiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTBcbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gRWFzaW5nT2JqZWN0IE9iamVjdCBjb250YWluaW5nIGVhc2luZyBmdW5jdGlvbnNcbiAqIEBwcm9wZXJ0eSB7RnVuY3Rpb259IEluIC0gRWFzaW5nICdJbicgZnVuY3Rpb24uIFNob3VsZCB1c2UgdGhlIHNpZ25hdHVyZSAoazpudW1iZXIpOm51bWJlci5cbiAqIEBwcm9wZXJ0eSB7RnVuY3Rpb259IE91dCAtIEVhc2luZyAnT3V0JyBmdW5jdGlvbi4gU2hvdWxkIHVzZSB0aGUgc2lnbmF0dXJlIChrOm51bWJlcik6bnVtYmVyLlxuICogQHByb3BlcnR5IHtGdW5jdGlvbn0gSW5PdXQgLSBFYXNpbmcgJ0luT3V0JyBmdW5jdGlvbi4gU2hvdWxkIHVzZSB0aGUgc2lnbmF0dXJlIChrOm51bWJlcik6bnVtYmVyLlxuICovXG5cbi8qKlxuICogTGluZWFyIEVhc2luZ1xuICogQHR5cGUge0Vhc2luZ09iamVjdH1cbiAqL1xuZXhwb3J0IGNvbnN0IExpbmVhciA9IHtcbiAgTm9uZShrKSB7XG4gICAgcmV0dXJuIGs7XG4gIH0sXG4gIEluKGspIHtcbiAgICByZXR1cm4gaztcbiAgfSxcbiAgT3V0KGspIHtcbiAgICByZXR1cm4gaztcbiAgfSxcbiAgSW5PdXQoaykge1xuICAgIHJldHVybiBrO1xuICB9LFxufTtcblxuLyoqXG4gKiBRdWFkcmF0aWMgRWFzaW5nXG4gKiBAdHlwZSB7RWFzaW5nT2JqZWN0fVxuICovXG5leHBvcnQgY29uc3QgUXVhZHJhdGljID0ge1xuICBJbihrKSB7XG4gICAgcmV0dXJuIGsgKiBrO1xuICB9LFxuICBPdXQoaykge1xuICAgIHJldHVybiBrICogKDIgLSBrKTtcbiAgfSxcbiAgSW5PdXQoaykge1xuICAgIGsgKj0gMjtcbiAgICBpZiAoayA8IDEpIHtcbiAgICAgIHJldHVybiAwLjUgKiBrICogaztcbiAgICB9XG4gICAgcmV0dXJuIC0wLjUgKiAoLS1rICogKGsgLSAyKSAtIDEpO1xuICB9LFxufTtcblxuLyoqXG4gKiBDdWJpYyBFYXNpbmdcbiAqIEB0eXBlIHtFYXNpbmdPYmplY3R9XG4gKi9cbmV4cG9ydCBjb25zdCBDdWJpYyA9IHtcbiAgSW4oaykge1xuICAgIHJldHVybiBrICogayAqIGs7XG4gIH0sXG4gIE91dChrKSB7XG4gICAgcmV0dXJuIC0tayAqIGsgKiBrICsgMTtcbiAgfSxcbiAgSW5PdXQoaykge1xuICAgIGsgKj0gMjtcbiAgICBpZiAoayA8IDEpIHtcbiAgICAgIHJldHVybiAwLjUgKiBrICogayAqIGs7XG4gICAgfVxuXG4gICAgayAtPSAyO1xuICAgIHJldHVybiAwLjUgKiAoayAqIGsgKiBrICsgMik7XG4gIH0sXG59O1xuXG4vKipcbiAqIFF1YXJ0aWMgRWFzaW5nXG4gKiBAdHlwZSB7RWFzaW5nT2JqZWN0fVxuICovXG5leHBvcnQgY29uc3QgUXVhcnRpYyA9IHtcbiAgSW4oaykge1xuICAgIHJldHVybiBrICogayAqIGsgKiBrO1xuICB9LFxuICBPdXQoaykge1xuICAgIHJldHVybiAxIC0gLS1rICogayAqIGsgKiBrO1xuICB9LFxuICBJbk91dChrKSB7XG4gICAgayAqPSAyO1xuICAgIGlmIChrIDwgMSkge1xuICAgICAgcmV0dXJuIDAuNSAqIGsgKiBrICogayAqIGs7XG4gICAgfVxuXG4gICAgayAtPSAyO1xuICAgIHJldHVybiAtMC41ICogKGsgKiBrICogayAqIGsgLSAyKTtcbiAgfSxcbn07XG5cbi8qKlxuICogUXVpbnRpYyBFYXNpbmdcbiAqIEB0eXBlIHtFYXNpbmdPYmplY3R9XG4gKi9cbmV4cG9ydCBjb25zdCBRdWludGljID0ge1xuICBJbihrKSB7XG4gICAgcmV0dXJuIGsgKiBrICogayAqIGsgKiBrO1xuICB9LFxuICBPdXQoaykge1xuICAgIHJldHVybiAtLWsgKiBrICogayAqIGsgKiBrICsgMTtcbiAgfSxcbiAgSW5PdXQoaykge1xuICAgIGsgKj0gMjtcbiAgICBpZiAoayA8IDEpIHtcbiAgICAgIHJldHVybiAwLjUgKiBrICogayAqIGsgKiBrICogaztcbiAgICB9XG5cbiAgICBrIC09IDI7XG4gICAgcmV0dXJuIDAuNSAqIChrICogayAqIGsgKiBrICogayArIDIpO1xuICB9LFxufTtcblxuLyoqXG4gKiBTaW51c29pZGFsIEVhc2luZ1xuICogQHR5cGUge0Vhc2luZ09iamVjdH1cbiAqL1xuZXhwb3J0IGNvbnN0IFNpbnVzb2lkYWwgPSB7XG4gIEluKGspIHtcbiAgICByZXR1cm4gMSAtIE1hdGguY29zKChrICogTWF0aC5QSSkgLyAyKTtcbiAgfSxcbiAgT3V0KGspIHtcbiAgICByZXR1cm4gTWF0aC5zaW4oKGsgKiBNYXRoLlBJKSAvIDIpO1xuICB9LFxuICBJbk91dChrKSB7XG4gICAgcmV0dXJuIDAuNSAqICgxIC0gTWF0aC5jb3MoTWF0aC5QSSAqIGspKTtcbiAgfSxcbn07XG5cbi8qKlxuICogRXhwb25lbnRpYWwgRWFzaW5nXG4gKiBAdHlwZSB7RWFzaW5nT2JqZWN0fVxuICovXG5leHBvcnQgY29uc3QgRXhwb25lbnRpYWwgPSB7XG4gIEluKGspIHtcbiAgICByZXR1cm4gayA9PT0gMCA/IDAgOiAxMDI0ICoqIChrIC0gMSk7XG4gIH0sXG4gIE91dChrKSB7XG4gICAgcmV0dXJuIGsgPT09IDEgPyAxIDogMSAtIDIgKiogKC0xMCAqIGspO1xuICB9LFxuICBJbk91dChrKSB7XG4gICAgaWYgKGsgPT09IDApIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgICBpZiAoayA9PT0gMSkge1xuICAgICAgcmV0dXJuIDE7XG4gICAgfVxuXG4gICAgayAqPSAyO1xuICAgIGlmIChrIDwgMSkge1xuICAgICAgcmV0dXJuIDAuNSAqIDEwMjQgKiogKGsgLSAxKTtcbiAgICB9XG4gICAgcmV0dXJuIDAuNSAqICgtKDIgKiogKC0xMCAqIChrIC0gMSkpKSArIDIpO1xuICB9LFxufTtcblxuLyoqXG4gKiBDaXJjdWxhciBFYXNpbmdcbiAqIEB0eXBlIHtFYXNpbmdPYmplY3R9XG4gKi9cbmV4cG9ydCBjb25zdCBDaXJjdWxhciA9IHtcbiAgSW4oaykge1xuICAgIHJldHVybiAxIC0gTWF0aC5zcXJ0KDEgLSBrICogayk7XG4gIH0sXG4gIE91dChrKSB7XG4gICAgcmV0dXJuIE1hdGguc3FydCgxIC0gLS1rICogayk7XG4gIH0sXG4gIEluT3V0KGspIHtcbiAgICBrICo9IDI7XG4gICAgaWYgKGsgPCAxKSB7XG4gICAgICByZXR1cm4gLTAuNSAqIChNYXRoLnNxcnQoMSAtIGsgKiBrKSAtIDEpO1xuICAgIH1cblxuICAgIGsgLT0gMjtcbiAgICByZXR1cm4gMC41ICogKE1hdGguc3FydCgxIC0gayAqIGspICsgMSk7XG4gIH0sXG59O1xuXG4vKipcbiAqIEVsYXN0aWMgRWFzaW5nXG4gKiBAdHlwZSB7RWFzaW5nT2JqZWN0fVxuICovXG5leHBvcnQgY29uc3QgRWxhc3RpYyA9IHtcbiAgSW4oaykge1xuICAgIGxldCBzO1xuICAgIGxldCBhID0gMC4xO1xuICAgIGNvbnN0IHAgPSAwLjQ7XG5cbiAgICBpZiAoayA9PT0gMCkge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgaWYgKGsgPT09IDEpIHtcbiAgICAgIHJldHVybiAxO1xuICAgIH1cblxuICAgIGlmICghYSB8fCBhIDwgMSkge1xuICAgICAgYSA9IDE7XG4gICAgICBzID0gcCAvIDQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHMgPSAocCAqIE1hdGguYXNpbigxIC8gYSkpIC8gKDIgKiBNYXRoLlBJKTtcbiAgICB9XG5cbiAgICBrIC09IDE7XG4gICAgcmV0dXJuIC0oYSAqIDIgKiogKDEwICogaykgKiBNYXRoLnNpbigoKGsgLSBzKSAqICgyICogTWF0aC5QSSkpIC8gcCkpO1xuICB9LFxuICBPdXQoaykge1xuICAgIGxldCBzO1xuICAgIGxldCBhID0gMC4xO1xuICAgIGNvbnN0IHAgPSAwLjQ7XG5cbiAgICBpZiAoayA9PT0gMCkge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgaWYgKGsgPT09IDEpIHtcbiAgICAgIHJldHVybiAxO1xuICAgIH1cblxuICAgIGlmICghYSB8fCBhIDwgMSkge1xuICAgICAgYSA9IDE7XG4gICAgICBzID0gcCAvIDQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHMgPSAocCAqIE1hdGguYXNpbigxIC8gYSkpIC8gKDIgKiBNYXRoLlBJKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYSAqIDIgKiogKC0xMCAqIGspICogTWF0aC5zaW4oKChrIC0gcykgKiAoMiAqIE1hdGguUEkpKSAvIHApICsgMTtcbiAgfSxcbiAgSW5PdXQoaykge1xuICAgIGxldCBzO1xuICAgIGxldCBhID0gMC4xO1xuICAgIGNvbnN0IHAgPSAwLjQ7XG5cbiAgICBpZiAoayA9PT0gMCkge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgaWYgKGsgPT09IDEpIHtcbiAgICAgIHJldHVybiAxO1xuICAgIH1cblxuICAgIGlmICghYSB8fCBhIDwgMSkge1xuICAgICAgYSA9IDE7XG4gICAgICBzID0gcCAvIDQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHMgPSAocCAqIE1hdGguYXNpbigxIC8gYSkpIC8gKDIgKiBNYXRoLlBJKTtcbiAgICB9XG5cbiAgICBrICo9IDI7XG4gICAgaWYgKGsgPCAxKSB7XG4gICAgICBrIC09IDE7XG4gICAgICByZXR1cm4gKFxuICAgICAgICAtMC41ICogKGEgKiAyICoqICgxMCAqIGspICogTWF0aC5zaW4oKChrIC0gcykgKiAoMiAqIE1hdGguUEkpKSAvIHApKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBrIC09IDE7XG4gICAgcmV0dXJuIChcbiAgICAgIGEgKiAyICoqICgtMTAgKiBrKSAqIE1hdGguc2luKCgoayAtIHMpICogKDIgKiBNYXRoLlBJKSkgLyBwKSAqIDAuNSArIDFcbiAgICApO1xuICB9LFxufTtcblxuLyoqXG4gKiBCYWNrIEVhc2luZ1xuICogQHR5cGUge0Vhc2luZ09iamVjdH1cbiAqL1xuZXhwb3J0IGNvbnN0IEJhY2sgPSB7XG4gIEluKGspIHtcbiAgICBjb25zdCBzID0gMS43MDE1ODtcbiAgICByZXR1cm4gayAqIGsgKiAoKHMgKyAxKSAqIGsgLSBzKTtcbiAgfSxcbiAgT3V0KGspIHtcbiAgICBjb25zdCBzID0gMS43MDE1ODtcbiAgICByZXR1cm4gLS1rICogayAqICgocyArIDEpICogayArIHMpICsgMTtcbiAgfSxcbiAgSW5PdXQoaykge1xuICAgIGNvbnN0IHMgPSAxLjcwMTU4ICogMS41MjU7XG4gICAgayAqPSAyO1xuICAgIGlmIChrIDwgMSkge1xuICAgICAgcmV0dXJuIDAuNSAqIChrICogayAqICgocyArIDEpICogayAtIHMpKTtcbiAgICB9XG5cbiAgICBrIC09IDI7XG4gICAgcmV0dXJuIDAuNSAqIChrICogayAqICgocyArIDEpICogayArIHMpICsgMik7XG4gIH0sXG59O1xuXG4vKipcbiAqIEJvdW5jZSBFYXNpbmdcbiAqIEB0eXBlIHtFYXNpbmdPYmplY3R9XG4gKi9cbmV4cG9ydCBjb25zdCBCb3VuY2UgPSB7XG4gIEluKGspIHtcbiAgICByZXR1cm4gMSAtIEJvdW5jZS5PdXQoMSAtIGspO1xuICB9LFxuICBPdXQoaykge1xuICAgIGlmIChrIDwgMSAvIDIuNzUpIHtcbiAgICAgIHJldHVybiA3LjU2MjUgKiBrICogaztcbiAgICB9IGVsc2UgaWYgKGsgPCAyIC8gMi43NSkge1xuICAgICAgayAtPSAxLjU7XG4gICAgICByZXR1cm4gNy41NjI1ICogKGsgLyAyLjc1KSAqIGsgKyAwLjc1O1xuICAgIH0gZWxzZSBpZiAoayA8IDIuNSAvIDIuNzUpIHtcbiAgICAgIGsgLT0gMi4yNTtcbiAgICAgIHJldHVybiA3LjU2MjUgKiAoayAvIDIuNzUpICogayArIDAuOTM3NTtcbiAgICB9XG4gICAgayAtPSAyLjYyNTtcbiAgICByZXR1cm4gNy41NjI1ICogKGsgLyAyLjc1KSAqIGsgKyAwLjk4NDM3NTtcbiAgfSxcbiAgSW5PdXQoaykge1xuICAgIGlmIChrIDwgMC41KSB7XG4gICAgICByZXR1cm4gQm91bmNlLkluKGsgKiAyKSAqIDAuNTtcbiAgICB9XG4gICAgcmV0dXJuIEJvdW5jZS5PdXQoayAqIDIgLSAxKSAqIDAuNSArIDAuNTtcbiAgfSxcbn07XG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWNsYXNzZXMtcGVyLWZpbGUgKi9cbmltcG9ydCBIb3N0T2JqZWN0IGZyb20gJ2FwcC9Ib3N0T2JqZWN0JztcblxuLyoqXG4gKiBDbGFzcyBmYWN0b3J5IGludGVyZmFjZSBmb3IgZmVhdHVyZXMgdGhhdCBhcmUgZGVwZW5kZW50IG9uIG90aGVyIGZlYXR1cmVzIGJlaW5nXG4gKiBwcmVzZW50IG9uIHRoZSBob3N0LiBFdmVudCBkZXBlbmRlbmNpZXMgd2lsbCBiZSBsaXN0ZW5lZCBmb3Igd2hlbiBhIGZlYXR1cmUgb2ZcbiAqIG1hdGNoaW5nIHR5cGUgaXMgYWRkZWQgdG8gdGhlIGhvc3QgYW5kIHdpbGwgc3RvcCBiZWluZyBsaXN0ZW5lZCBmb3Igd2hlbiBvbmVcbiAqIGlzIHJlbW92ZWQuIElmIHRoZSBmZWF0dXJlIGlzIGFscmVhZHkgcHJlc2VudCB3aGVuIGNvbnN0cnVjdGVkLCBldmVudHMgd2lsbFxuICogYmUgbGlzdGVuZWQgZm9yIHJpZ2h0IGF3YXkuXG4gKlxuICogQGludGVyZmFjZVxuICpcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBFVkVOVF9ERVBFTkRFTkNJRVMgLSBFdmVudHMgdGhhdCB0aGUgZmVhdHVyZSBzaG91bGQgc3RhcnQvc3RvcFxuICogbGlzdGVuaW5nIGZvciB3aGVuIGEgZmVhdHVyZSBvZiB0eXBlIEZlYXR1cmVOYW1lIGlzIGFkZGVkL3JlbW92ZWQgZnJvbSB0aGUgaG9zdC5cbiAqIEV2ZW50IGRlcGVuZGVuY2llcyBzaG91bGQgZm9sbG93IHRoZSBzaWduYXR1cmU6XG4gKiAgeyBGZWF0dXJlTmFtZTogeyBldmVudE5hbWU6IGNhbGxiYWNrTmFtZSwgLi4uIH0sIC4uLiB9XG4gKi9cbmNsYXNzIEZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2Uge1xuICAvKipcbiAgICogU3RhcnQgbGlzdGVuaW5nIGZvciBldmVudCBkZXBlbmRlbmNpZXMgdGhhdCBtYXRjaCB0aGUgZ2l2ZW4gZmVhdHVyZSB0eXBlLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdHlwZU5hbWUgLSB0eXBlIG9mIGZlYXR1cmUgdG8gbGlzdGVuIGZvci5cbiAgICovXG4gIF9vbkZlYXR1cmVBZGRlZCh0eXBlTmFtZSkge31cblxuICAvKipcbiAgICogU3RvcCBsaXN0ZW5pbmcgZm9yIGV2ZW50IGRlcGVuZGVuY2llcyB0aGF0IG1hdGNoIHRoZSBnaXZlbiBmZWF0dXJlIHR5cGUuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlTmFtZSAtIHR5cGUgb2YgZmVhdHVyZSB0byBzdG9wIGxpc3RlbmluZyBmb3IuXG4gICAqL1xuICBfb25GZWF0dXJlUmVtb3ZlZCh0eXBlTmFtZSkge31cblxuICAvKipcbiAgICogQGF1Z21lbnRzIHtAbGluayBBYnN0cmFjdEhvc3RGZWF0dXJlI2Rpc2NhcmR9XG4gICAqL1xuICBkaXNjYXJkKCkge31cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIGNsYXNzIHRoYXQgaW1wbGVtZW50cyB7QGxpbmsgRmVhdHVyZURlcGVuZGVudEludGVyZmFjZX0gYW5kIGV4dGVuZHNcbiAgICogYSBzcGVjaWZpZWQgYmFzZSBjbGFzcy5cbiAgICpcbiAgICogQHBhcmFtIHtDbGFzc30gQmFzZUNsYXNzIC0gVGhlIGNsYXNzIHRvIGV4dGVuZC5cbiAgICpcbiAgICogQHJldHVybiB7Q2xhc3N9IEEgY2xhc3MgdGhhdCBleHRlbmRzIGBCYXNlQ2xhc3NgIGFuZCBpbXBsZW1lbnRzIHtAbGluayBGZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlfS5cbiAgICovXG4gIHN0YXRpYyBNaXhpbihCYXNlQ2xhc3MpIHtcbiAgICBjb25zdCBGZWF0dXJlRGVwZW5kZW50TWl4aW4gPSBjbGFzcyBleHRlbmRzIEJhc2VDbGFzcyB7XG4gICAgICBjb25zdHJ1Y3Rvcihob3N0KSB7XG4gICAgICAgIHN1cGVyKGhvc3QpO1xuICAgICAgICB0aGlzLl9ob3N0ID0gaG9zdDtcblxuICAgICAgICAvLyBObyBuZWVkIHRvIGxpc3RlbiBmb3IgZXZlbnRzIGlmIHRoZSBtaXhpbiBpcyBpbiB0aGUgcHJvdG90eXBlIGNoYWluIG11bHRpcGxlIHRpbWVzXG4gICAgICAgIGlmICghdGhpcy5faW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgICB0aGlzLl9pbml0aWFsaXplZCA9IHRydWU7XG5cbiAgICAgICAgICAvLyBTdGFydCBsaXN0ZW5pbmcgZm9yIGZlYXR1cmUgZXZlbnRzXG4gICAgICAgICAgdGhpcy5fb25GZWF0dXJlQWRkZWQgPSB0aGlzLl9vbkZlYXR1cmVBZGRlZC5iaW5kKHRoaXMpO1xuICAgICAgICAgIHRoaXMuX29uRmVhdHVyZVJlbW92ZWQgPSB0aGlzLl9vbkZlYXR1cmVSZW1vdmVkLmJpbmQodGhpcyk7XG5cbiAgICAgICAgICB0aGlzLl9ob3N0Lmxpc3RlblRvKFxuICAgICAgICAgICAgSG9zdE9iamVjdC5FVkVOVFMuYWRkRmVhdHVyZSxcbiAgICAgICAgICAgIHRoaXMuX29uRmVhdHVyZUFkZGVkXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0aGlzLl9ob3N0Lmxpc3RlblRvKFxuICAgICAgICAgICAgSG9zdE9iamVjdC5FVkVOVFMucmVtb3ZlRmVhdHVyZSxcbiAgICAgICAgICAgIHRoaXMuX29uRmVhdHVyZVJlbW92ZWRcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgLy8gUmVnaXN0ZXIgZmVhdHVyZXMgdGhhdCBhbHJlYWR5IGV4aXN0XG4gICAgICAgICAgT2JqZWN0LmtleXModGhpcy5jb25zdHJ1Y3Rvci5FVkVOVF9ERVBFTkRFTkNJRVMpLmZvckVhY2godHlwZU5hbWUgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2hvc3RbdHlwZU5hbWVdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgdGhpcy5fb25GZWF0dXJlQWRkZWQodHlwZU5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIF9vbkZlYXR1cmVBZGRlZCh0eXBlTmFtZSkge1xuICAgICAgICBpZiAodGhpcy5jb25zdHJ1Y3Rvci5FVkVOVF9ERVBFTkRFTkNJRVNbdHlwZU5hbWVdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBjb25zdCBldmVudHMgPSB0aGlzLmNvbnN0cnVjdG9yLkVWRU5UX0RFUEVOREVOQ0lFU1t0eXBlTmFtZV07XG5cbiAgICAgICAgICBPYmplY3QuZW50cmllcyhldmVudHMpLmZvckVhY2goKFtldmVudE5hbWUsIGNhbGxiYWNrXSkgPT4ge1xuICAgICAgICAgICAgdGhpc1tjYWxsYmFja10gPSB0aGlzW2NhbGxiYWNrXS5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5faG9zdC5saXN0ZW5UbyhcbiAgICAgICAgICAgICAgdGhpcy5faG9zdFt0eXBlTmFtZV0uRVZFTlRTW2V2ZW50TmFtZV0sXG4gICAgICAgICAgICAgIHRoaXNbY2FsbGJhY2tdXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIF9vbkZlYXR1cmVSZW1vdmVkKHR5cGVOYW1lKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbnN0cnVjdG9yLkVWRU5UX0RFUEVOREVOQ0lFU1t0eXBlTmFtZV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGNvbnN0IGV2ZW50cyA9IHRoaXMuY29uc3RydWN0b3IuRVZFTlRfREVQRU5ERU5DSUVTW3R5cGVOYW1lXTtcblxuICAgICAgICAgIE9iamVjdC5lbnRyaWVzKGV2ZW50cykuZm9yRWFjaCgoW2V2ZW50TmFtZSwgY2FsbGJhY2tdKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9ob3N0LnN0b3BMaXN0ZW5pbmcoXG4gICAgICAgICAgICAgIHRoaXMuX2hvc3RbdHlwZU5hbWVdLkVWRU5UU1tldmVudE5hbWVdLFxuICAgICAgICAgICAgICB0aGlzW2NhbGxiYWNrXVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBkaXNjYXJkKCkge1xuICAgICAgICAvLyBTdG9wIGxpc3RlbmluZyBmb3IgZmVhdHVyZSBldmVudHNcbiAgICAgICAgdGhpcy5faG9zdC5zdG9wTGlzdGVuaW5nKFxuICAgICAgICAgIEhvc3RPYmplY3QuRVZFTlRTLmFkZEZlYXR1cmUsXG4gICAgICAgICAgdGhpcy5fb25GZWF0dXJlQWRkZWRcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5faG9zdC5zdG9wTGlzdGVuaW5nKFxuICAgICAgICAgIEhvc3RPYmplY3QuRVZFTlRTLnJlbW92ZUZlYXR1cmUsXG4gICAgICAgICAgdGhpcy5fb25GZWF0dXJlUmVtb3ZlZFxuICAgICAgICApO1xuXG4gICAgICAgIC8vIFN0b3AgbGlzdGVuaW5nIHRvIGZlYXR1cmUtc3BlY2lmaWMgZXZlbnRzXG4gICAgICAgIE9iamVjdC5rZXlzKHRoaXMuY29uc3RydWN0b3IuRVZFTlRfREVQRU5ERU5DSUVTKS5mb3JFYWNoKHR5cGVOYW1lID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5faG9zdFt0eXBlTmFtZV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5fb25GZWF0dXJlUmVtb3ZlZCh0eXBlTmFtZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBzdXBlci5kaXNjYXJkKCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IEVWRU5UX0RFUEVOREVOQ0lFUyA9IEJhc2VDbGFzcy5FVkVOVF9ERVBFTkRFTkNJRVMgfHwge307XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhGZWF0dXJlRGVwZW5kZW50TWl4aW4sIHtcbiAgICAgIEVWRU5UX0RFUEVOREVOQ0lFUzoge1xuICAgICAgICB2YWx1ZToge1xuICAgICAgICAgIC4uLkVWRU5UX0RFUEVOREVOQ0lFUyxcbiAgICAgICAgfSxcbiAgICAgICAgd3JpdGFibGU6IGZhbHNlLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBGZWF0dXJlRGVwZW5kZW50TWl4aW47XG4gIH1cbn1cblxuLyoqXG4gKiBFdmVudCBkZXBlbmRlbmNpZXMgc2hvdWxkIGZvbGxvdyB0aGUgc2lnbmF0dXJlOlxuICoge1xuICogIEZlYXR1cmVOYW1lOiB7XG4gKiAgICAvLyBFdmVudHMgdGhhdCB0aGUgZmVhdHVyZSBzaG91bGQgc3RhcnQvc3RvcCBsaXN0ZW5pbmcgZm9yIHdoZW4gYSBmZWF0dXJlXG4gKiAgICAvLyBvZiB0eXBlIEZlYXR1cmVOYW1lIGlzIGFkZGVkL3JlbW92ZWQgZnJvbSB0aGUgaG9zdFxuICogICAge1xuICogICAgICBldmVudE5hbWU6IGNhbGxiYWNrTmFtZSxcbiAqICAgICAgLi4uXG4gKiAgICB9LFxuICogIH1cbiAqIH1cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRmVhdHVyZURlcGVuZGVudEludGVyZmFjZSwge1xuICBFVkVOVF9ERVBFTkRFTkNJRVM6IHtcbiAgICB2YWx1ZToge30sXG4gICAgd3JpdGFibGU6IGZhbHNlLFxuICB9LFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IEZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2U7XG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWNsYXNzZXMtcGVyLWZpbGUgKi9cbmltcG9ydCBGZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlIGZyb20gJ2NvcmUvRmVhdHVyZURlcGVuZGVudEludGVyZmFjZSc7XG5cbi8qKlxuICogQ2xhc3MgZmFjdG9yeSBpbnRlcmZhY2UgZm9yIGZlYXR1cmVzIHRoYXQgYXJlIGRlcGVuZGVudCBvbiB0aGUgQW5pbWF0aW9uRmVhdHVyZVxuICogYmVpbmcgcHJlc2VudCBvbiB0aGUgaG9zdC4gTGF5ZXIgYW5kIGFuaW1hdGlvbiBldmVudHMgd2lsbCBhdXRvbWF0aWNhbGx5IGJlXG4gKiBsaXN0ZW5lZCBmb3Igb25jZSBhIEFuaW1hdGlvbkZlYXR1cmUgaXMgYWRkZWQgdG8gdGhlIGhvc3QgYW5kIHN0b3BwZWQgb25jZSBpdFxuICogaXMgcmVtb3ZlZC5cbiAqXG4gKiBAaW50ZXJmYWNlXG4gKiBAZXh0ZW5kcyBGZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlXG4gKlxuICogQHByb3BlcnR5IHtPYmplY3R9IEVWRU5UX0RFUEVOREVOQ0lFUyAtIEV2ZW50cyB0aGF0IHRoZSBmZWF0dXJlIHNob3VsZCBzdGFydC9zdG9wXG4gKiBsaXN0ZW5pbmcgZm9yIHdoZW4gYSBmZWF0dXJlIG9mIHR5cGUgRmVhdHVyZU5hbWUgaXMgYWRkZWQvcmVtb3ZlZCBmcm9tIHRoZSBob3N0LlxuICogQHByb3BlcnR5IHtPYmplY3R9IEVWRU5UX0RFUEVOREVOQ0lFUy5BbmltYXRpb25GZWF0dXJlIC0gRXZlbnRzIHRoYXQgYXJlXG4gKiBzcGVjaWZpYyB0byB0aGUgQW5pbWF0aW9uRmVhdHVyZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbRVZFTlRfREVQRU5ERU5DSUVTLkFuaW1hdGlvbkZlYXR1cmUuYWRkTGF5ZXI9J19vbkxheWVyQWRkZWQnXSAtXG4gKiBUaGUgbmFtZSBvZiB0aGUgbWV0aG9kIHRoYXQgd2lsbCBiZSBleGVjdXRlZCB3aGVuIEFuaW1hdGlvbkZlYXR1cmUgYWRkTGF5ZXJcbiAqIGV2ZW50cyBhcmUgZW1pdHRlZC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbRVZFTlRfREVQRU5ERU5DSUVTLkFuaW1hdGlvbkZlYXR1cmUucmVtb3ZlTGF5ZXI9J19vbkxheWVyUmVtb3ZlZCddIC1cbiAqIFRoZSBuYW1lIG9mIHRoZSBtZXRob2QgdGhhdCB3aWxsIGJlIGV4ZWN1dGVkIHdoZW4gQW5pbWF0aW9uRmVhdHVyZSByZW1vdmVMYXllclxuICogZXZlbnRzIGFyZSBlbWl0dGVkLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtFVkVOVF9ERVBFTkRFTkNJRVMuQW5pbWF0aW9uRmVhdHVyZS5yZW5hbWVMYXllcj0nX29uTGF5ZXJSZW5hbWVkJ10gLVxuICogVGhlIG5hbWUgb2YgdGhlIG1ldGhvZCB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQgd2hlbiBBbmltYXRpb25GZWF0dXJlIHJlbmFtZUxheWVyXG4gKiBldmVudHMgYXJlIGVtaXR0ZWQuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW0VWRU5UX0RFUEVOREVOQ0lFUy5BbmltYXRpb25GZWF0dXJlLmFkZEFuaW1hdGlvbj0nX29uQW5pbWF0aW9uQWRkZWQnXSAtXG4gKiBUaGUgbmFtZSBvZiB0aGUgbWV0aG9kIHRoYXQgd2lsbCBiZSBleGVjdXRlZCB3aGVuIEFuaW1hdGlvbkZlYXR1cmUgYWRkQW5pbWF0aW9uXG4gKiBldmVudHMgYXJlIGVtaXR0ZWQuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW0VWRU5UX0RFUEVOREVOQ0lFUy5BbmltYXRpb25GZWF0dXJlLnJlbW92ZUFuaW1hdGlvbj0nX29uQW5pbWF0aW9uUmVtb3ZlZCddIC1cbiAqIFRoZSBuYW1lIG9mIHRoZSBtZXRob2QgdGhhdCB3aWxsIGJlIGV4ZWN1dGVkIHdoZW4gQW5pbWF0aW9uRmVhdHVyZSByZW1vdmVBbmltYXRpb25cbiAqIGV2ZW50cyBhcmUgZW1pdHRlZC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbRVZFTlRfREVQRU5ERU5DSUVTLkFuaW1hdGlvbkZlYXR1cmUucmVuYW1lQW5pbWF0aW9uPSdfb25BbmltYXRpb25SZW5hbWVkJ10gLVxuICogVGhlIG5hbWUgb2YgdGhlIG1ldGhvZCB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQgd2hlbiBBbmltYXRpb25GZWF0dXJlIHJlbmFtZUFuaW1hdGlvblxuICogZXZlbnRzIGFyZSBlbWl0dGVkLlxuICovXG5jbGFzcyBBbmltYXRpb25GZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlIGV4dGVuZHMgRmVhdHVyZURlcGVuZGVudEludGVyZmFjZSB7XG4gIC8qKlxuICAgKiBFeGVjdXRlZCB3aGVuIGFuaW1hdGlvbiBsYXllciBhZGRlZCBldmVudHMgYXJlIGNhdWdodC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBOYW1lIG9mIHRoZSBsYXllciB0aGF0IHdhcyBhZGRlZC5cbiAgICovXG4gIF9vbkxheWVyQWRkZWQoe25hbWV9KSB7fVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlZCB3aGVuIGFuaW1hdGlvbiBsYXllciByZW1vdmVkIGV2ZW50cyBhcmUgY2F1Z2h0LlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRoYXQgd2FzIHJlbW92ZWQuXG4gICAqL1xuICBfb25MYXllclJlbW92ZWQoe25hbWV9KSB7fVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlZCB3aGVuIGFuaW1hdGlvbiBsYXllciByZW5hbWVkIGV2ZW50cyBhcmUgY2F1Z2h0LlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gb2xkTmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRoYXQgd2FzIHJlbmFtZWQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuZXdOYW1lIC0gTmV3IG5hbWUgb2YgdGhlIGxheWVyLlxuICAgKi9cbiAgX29uTGF5ZXJSZW5hbWVkKHtvbGROYW1lLCBuZXdOYW1lfSkge31cblxuICAvKipcbiAgICogRXhlY3V0ZWQgd2hlbiBhbmltYXRpb24gYWRkZWQgZXZlbnRzIGFyZSBjYXVnaHQuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllck5hbWUgLSBOYW1lIG9mIHRoZSBsYXllciB0aGF0IGFuIGFuaW1hdGlvbiB3YXMgYWRkZWQgdG8uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhbmltYXRpb25OYW1lIC0gTmFtZSBvZiB0aGUgYW5pbWF0aW9uIHRoYXQgd2FzIGFkZGVkLlxuICAgKi9cbiAgX29uQW5pbWF0aW9uQWRkZWQoe2xheWVyTmFtZSwgYW5pbWF0aW9uTmFtZX0pIHt9XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGVkIHdoZW4gYW5pbWF0aW9uIHJlbW92ZWQgZXZlbnRzIGFyZSBjYXVnaHQuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllck5hbWUgLSBOYW1lIG9mIHRoZSBsYXllciB0aGF0IGFuIGFuaW1hdGlvbiB3YXMgcmVtb3ZlZCBmcm9tLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYW5pbWF0aW9uTmFtZSAtIE5hbWUgb2YgdGhlIGFuaW1hdGlvbiB0aGF0IHdhcyByZW1vdmVkLlxuICAgKi9cbiAgX29uQW5pbWF0aW9uUmVtb3ZlZCh7bGF5ZXJOYW1lLCBhbmltYXRpb25OYW1lfSkge31cblxuICAvKipcbiAgICogRXhlY3V0ZWQgd2hlbiBhbmltYXRpb24gcmVuYW1lZCBldmVudHMgYXJlIGNhdWdodC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVyTmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRoYXQgYW4gYW5pbWF0aW9uIGJlbG9uZ3MgdG8uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvbGROYW1lIC0gTmFtZSBvZiB0aGUgYW5pbWF0aW9uIHRoYXQgd2FzIHJlbmFtZWQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuZXdOYW1lIC0gTmV3IG5hbWUgb2YgdGhlIGFuaW1hdGlvbi5cbiAgICovXG4gIF9vbkFuaW1hdGlvblJlbmFtZWQoe2xheWVyTmFtZSwgb2xkTmFtZSwgbmV3TmFtZX0pIHt9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBjbGFzcyB0aGF0IGltcGxlbWVudHMge0BsaW5rIEFuaW1hdGlvbkZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2V9XG4gICAqIGFuZCBleHRlbmRzIGEgc3BlY2lmaWVkIGJhc2UgY2xhc3MuXG4gICAqXG4gICAqIEBwYXJhbSB7Q2xhc3N9IEJhc2VDbGFzcyAtIFRoZSBjbGFzcyB0byBleHRlbmQuXG4gICAqXG4gICAqIEByZXR1cm4ge0NsYXNzfSBBIGNsYXNzIHRoYXQgZXh0ZW5kcyBgQmFzZUNsYXNzYCBhbmQgaW1wbGVtZW50cyB7QGxpbmsgQW5pbWF0aW9uRmVhdHVyZURlcGVuZGVudEludGVyZmFjZX0uXG4gICAqL1xuICBzdGF0aWMgTWl4aW4oQmFzZUNsYXNzKSB7XG4gICAgY29uc3QgUGFyZW50Q2xhc3MgPSBGZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlLk1peGluKEJhc2VDbGFzcyk7XG4gICAgY29uc3QgQW5pbWF0aW9uRmVhdHVyZURlcGVuZGVudE1peGluID0gY2xhc3MgZXh0ZW5kcyBQYXJlbnRDbGFzcyB7XG4gICAgICBfb25MYXllckFkZGVkKHtuYW1lfSkge31cblxuICAgICAgX29uTGF5ZXJSZW1vdmVkKHtuYW1lfSkge31cblxuICAgICAgX29uTGF5ZXJSZW5hbWVkKHtvbGROYW1lLCBuZXdOYW1lfSkge31cblxuICAgICAgX29uQW5pbWF0aW9uQWRkZWQoe2xheWVyTmFtZSwgYW5pbWF0aW9uTmFtZX0pIHt9XG5cbiAgICAgIF9vbkFuaW1hdGlvblJlbW92ZWQoe2xheWVyTmFtZSwgYW5pbWF0aW9uTmFtZX0pIHt9XG5cbiAgICAgIF9vbkFuaW1hdGlvblJlbmFtZWQoe2xheWVyTmFtZSwgb2xkTmFtZSwgbmV3TmFtZX0pIHt9XG4gICAgfTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEFuaW1hdGlvbkZlYXR1cmVEZXBlbmRlbnRNaXhpbiwge1xuICAgICAgRVZFTlRfREVQRU5ERU5DSUVTOiB7XG4gICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgLi4uUGFyZW50Q2xhc3MuRVZFTlRfREVQRU5ERU5DSUVTLFxuICAgICAgICAgIC4uLkFuaW1hdGlvbkZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2UuRVZFTlRfREVQRU5ERU5DSUVTLFxuICAgICAgICB9LFxuICAgICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIEFuaW1hdGlvbkZlYXR1cmVEZXBlbmRlbnRNaXhpbjtcbiAgfVxufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhBbmltYXRpb25GZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlLCB7XG4gIEVWRU5UX0RFUEVOREVOQ0lFUzoge1xuICAgIHZhbHVlOiB7XG4gICAgICBBbmltYXRpb25GZWF0dXJlOiB7XG4gICAgICAgIGFkZExheWVyOiAnX29uTGF5ZXJBZGRlZCcsXG4gICAgICAgIHJlbW92ZUxheWVyOiAnX29uTGF5ZXJSZW1vdmVkJyxcbiAgICAgICAgcmVuYW1lTGF5ZXI6ICdfb25MYXllclJlbmFtZWQnLFxuICAgICAgICBhZGRBbmltYXRpb246ICdfb25BbmltYXRpb25BZGRlZCcsXG4gICAgICAgIHJlbW92ZUFuaW1hdGlvbjogJ19vbkFuaW1hdGlvblJlbW92ZWQnLFxuICAgICAgICByZW5hbWVBbmltYXRpb246ICdfb25BbmltYXRpb25SZW5hbWVkJyxcbiAgICAgIH0sXG4gICAgfSxcbiAgICB3cml0YWJsZTogZmFsc2UsXG4gIH0sXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgQW5pbWF0aW9uRmVhdHVyZURlcGVuZGVudEludGVyZmFjZTtcbiIsIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVC0wXG5cbi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtY2xhc3Nlcy1wZXItZmlsZSAqL1xuaW1wb3J0IEFuaW1hdGlvbkZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2UgZnJvbSAnY29yZS9hbmltcGFjay9BbmltYXRpb25GZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlJztcblxuLyoqXG4gKiBDbGFzcyBmYWN0b3J5IGludGVyZmFjZSBmb3IgdGhhdCBrZWVwcyB0cmFjayBvZiBsYXllcnMgYW5kIGFuaW1hdGlvbnMgb24gYSBob3N0LlxuICogVHJhY2tlZCBhc3NldHMgYXJlIG1hcmtlZCBhcyBpbmFjdGl2ZSB1bnRpbCBsYXllcnMgYW5kIGFuaW1hdGlvbnMgd2l0aCBtYXRjaGluZ1xuICogbmFtZXMgYXJlIGRldGVjdGVkIGFzIHByZXNlbnQgb24gdGhlIGhvc3QuXG4gKlxuICogQGludGVyZmFjZVxuICogQGV4dGVuZHMgQW5pbWF0aW9uRmVhdHVyZURlcGVuZGVudEludGVyZmFjZVxuICpcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBERUZBVUxUX0xBWUVSX09QVElPTlMgLSBEZWZhdWx0IG9wdGlvbnMgdG8gdXNlIHdoZW4gZXhlY3V0aW5nXG4gKiB7QGxpbmsgQW5pbWF0aW9uTGF5ZXJ9IG1ldGhvZHMuXG4gKiBAcHJvcGVydHkge251bWJlcn0gW0RFRkFVTFRfTEFZRVJfT1BUSU9OUy5ibGVuZFRpbWU9MC41XSAtIERlZmF1bHQgdGltZSBpbiBzZWNvbmRzXG4gKiB0byB1c2Ugd2hlbiBleGVjdXRpbmcge0BsaW5rIEFuaW1hdGlvbkxheWVyLnNldEJsZW5kV2VpZ2h0fS5cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBbREVGQVVMVF9MQVlFUl9PUFRJT05TLmFuaW1hdGlvbnM9e31dIC0gTWFwcyBhbmltYXRpb24gbmFtZXNcbiAqIHRvIGRlZmF1bHQgb3B0aW9ucyBvYmplY3RzIHRvIHVzZSBmb3IgbWFuYWdlZCBhbmltYXRpb25zLlxuICovXG5jbGFzcyBNYW5hZ2VkQW5pbWF0aW9uTGF5ZXJJbnRlcmZhY2UgZXh0ZW5kcyBBbmltYXRpb25GZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlIHtcbiAgLyoqXG4gICAqIFN0YXJ0IHRyYWNraW5nIGtlZXBpbmcgdHJhY2sgb2Ygd2hldGhlciBhIGxheWVyIHdpdGggdGhlIGdpdmVuIG5hbWUgaXMgcHJlc2VudFxuICAgKiBvbiB0aGUgaG9zdC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBOYW1lIG9mIHRoZSBsYXllciB0byBrZWVwIHRyYWNrIG9mLlxuICAgKiBAcGFyYW0ge09iamVjdD19IG9wdGlvbnMgLSBPcHRpb25zIGZvciB0aGUgbGF5ZXIuXG4gICAqIEBwYXJhbSB7bnVtYmVyPX0gb3B0aW9ucy5ibGVuZFRpbWUgLSBEZWZhdWx0IGFtb3VudCBvZiB0aW1lIHRvIHVzZSB3aGVuXG4gICAqIG1hbmlwdWxhdGluZyBsYXllciB3ZWlnaHRzIG9uIHRoaXMgbGF5ZXIuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvcHRpb25zLmVhc2luZ0ZuIC0gRGVmYXVsdCBlYXNpbmcgZnVuY3Rpb24gdG8gdXNlIHdoZW5cbiAgICogbWFuaXB1bGF0aW5nIGxheWVyIHdlaWdodHMgb24gdGhpcyBsYXllci5cbiAgICogQHBhcmFtIHtPYmplY3Q9fSBvcHRpb25zLmFuaW1hdGlvbnMgLSBBbmltYXRpb25zIHRvIGtlZXAgdHJhY2sgb2Ygb24gdGhlIGxheWVyLlxuICAgKiBBbmltYXRpb25zIGFyZSByZXByZXNlbnRlZCBhcyBrZXkvdmFsdWUgcGFpcnMgb2YgYW5pbWF0aW9uIG5hbWVzIGFuZCB0aGVpclxuICAgKiBvcHRpb25zLlxuICAgKi9cbiAgcmVnaXN0ZXJMYXllcihuYW1lLCBvcHRpb25zID0ge30pIHt9XG5cbiAgLyoqXG4gICAqIFN0YXJ0IHRyYWNraW5nIGtlZXBpbmcgdHJhY2sgb2Ygd2hldGhlciBhbiBhbmltYXRpb24gd2l0aCB0aGUgZ2l2ZW4gbmFtZSBpc1xuICAgKiBwcmVzZW50IG9uIHRoZSBob3N0LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGF5ZXJOYW1lIC0gTmFtZSBvZiB0aGUgbGF5ZXIgdGhhdCB3aWxsIG93biB0aGUgYW5pbWF0aW9uLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYW5pbWF0aW9uTmFtZSAtIE5hbWUgb2YgdGhlIGFuaW1hdGlvbiB0byBrZWVwIHRyYWNrIG9mLlxuICAgKiBAcGFyYW0ge09iamVjdD19IG9wdGlvbnMgLSBPcHRpb25zIGZvciB0aGUgYW5pbWF0aW9uLlxuICAgKi9cbiAgcmVnaXN0ZXJBbmltYXRpb24obGF5ZXJOYW1lLCBhbmltYXRpb25OYW1lLCBvcHRpb25zID0ge30pIHt9XG5cbiAgLyoqXG4gICAqIFNldCBsYXllciB3ZWlnaHRzIG9uIHRyYWNrZWQgbGF5ZXJzLlxuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gbmFtZUZpbHRlciAtIFByZWRpY2F0ZSBmdW5jdGlvbiB0byB0ZXN0IGVhY2ggdHJhY2tlZCBsYXllclxuICAgKiB3aXRoLiBCeSBkZWZhdWx0IGFsbCBsYXllcnMgd2lsbCBwYXNzLlxuICAgKiBAcGFyYW0ge251bWJlcn0gd2VpZ2h0IC0gV2VpZ2h0IHZhbHVlIHRvIHNldCBvbiBsYXllcnMuXG4gICAqIEBwYXJhbSB7bnVtYmVyPX0gc2Vjb25kcyAtIE51bWJlciBvZiBzZWNvbmRzIGl0IHdpbGwgdGFrZSB0byByZWFjaCB0aGUgd2VpZ2h0XG4gICAqIG9uIGVhY2ggbGF5ZXIuIElmIHVuZGVmaW5lZCwgZWFjaCBsYXllcnMnIGJsZW5kVGltZSBvcHRpb24gaXMgdXNlZC5cbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IGVhc2luZ0ZuIC0gRWFzaW5nIGZ1bmN0aW9uIHRvIHVzZSB3aGVuIHNldHRpbmcgd2VpZ2h0XG4gICAqIG9uIGVhY2ggbGF5ZXIuIElmIHVuZGVmaW5lZCwgZWFjaCBsYXllcnMnIGVhc2luZ0ZuIG9wdGlvbiBpcyB1c2VkLlxuICAgKi9cbiAgc2V0TGF5ZXJXZWlnaHRzKG5hbWVGaWx0ZXIgPSAoKSA9PiB0cnVlLCB3ZWlnaHQsIHNlY29uZHMsIGVhc2luZ0ZuKSB7fVxuXG4gIC8qKlxuICAgKiBTZXQgYWxsIHRyYWNrZWQgbGF5ZXJzJyB3ZWlnaHRzIHRvIDEuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyPX0gc2Vjb25kcyAtIE51bWJlciBvZiBzZWNvbmRzIGl0IHdpbGwgdGFrZSB0byByZWFjaCB0aGUgd2VpZ2h0XG4gICAqIG9uIGVhY2ggbGF5ZXIuIElmIHVuZGVmaW5lZCwgZWFjaCBsYXllcnMnIGJsZW5kVGltZSBvcHRpb24gaXMgdXNlZC5cbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IGVhc2luZ0ZuIC0gRWFzaW5nIGZ1bmN0aW9uIHRvIHVzZSB3aGVuIHNldHRpbmcgd2VpZ2h0XG4gICAqIG9uIGVhY2ggbGF5ZXIuIElmIHVuZGVmaW5lZCwgZWFjaCBsYXllcnMnIGVhc2luZ0ZuIG9wdGlvbiBpcyB1c2VkLlxuICAgKi9cbiAgZW5hYmxlKHNlY29uZHMsIGVhc2luZ0ZuKSB7fVxuXG4gIC8qKlxuICAgKiBTZXQgYWxsIHRyYWNrZWQgbGF5ZXJzJyB3ZWlnaHRzIHRvIDAuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyPX0gc2Vjb25kcyAtIE51bWJlciBvZiBzZWNvbmRzIGl0IHdpbGwgdGFrZSB0byByZWFjaCB0aGUgd2VpZ2h0XG4gICAqIG9uIGVhY2ggbGF5ZXIuIElmIHVuZGVmaW5lZCwgZWFjaCBsYXllcnMnIGJsZW5kVGltZSBvcHRpb24gaXMgdXNlZC5cbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IGVhc2luZ0ZuIC0gRWFzaW5nIGZ1bmN0aW9uIHRvIHVzZSB3aGVuIHNldHRpbmcgd2VpZ2h0XG4gICAqIG9uIGVhY2ggbGF5ZXIuIElmIHVuZGVmaW5lZCwgZWFjaCBsYXllcnMnIGVhc2luZ0ZuIG9wdGlvbiBpcyB1c2VkLlxuICAgKi9cbiAgZGlzYWJsZShzZWNvbmRzLCBlYXNpbmdGbikge31cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIGNsYXNzIHRoYXQgaW1wbGVtZW50cyB7QGxpbmsgTWFuYWdlZEFuaW1hdGlvbkxheWVySW50ZXJmYWNlfVxuICAgKiBhbmQgZXh0ZW5kcyBhIHNwZWNpZmllZCBiYXNlIGNsYXNzLlxuICAgKlxuICAgKiBAcGFyYW0ge0NsYXNzfSBCYXNlQ2xhc3MgLSBUaGUgY2xhc3MgdG8gZXh0ZW5kLlxuICAgKlxuICAgKiBAcmV0dXJuIHtDbGFzc30gQSBjbGFzcyB0aGF0IGV4dGVuZHMgYEJhc2VDbGFzc2AgYW5kIGltcGxlbWVudHMge0BsaW5rIE1hbmFnZWRBbmltYXRpb25MYXllckludGVyZmFjZX0uXG4gICAqL1xuICBzdGF0aWMgTWl4aW4oQmFzZUNsYXNzKSB7XG4gICAgY29uc3QgUGFyZW50Q2xhc3MgPSBBbmltYXRpb25GZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlLk1peGluKEJhc2VDbGFzcyk7XG4gICAgY29uc3QgTWFuYWdlZEFuaW1hdGlvbkxheWVyTWl4aW4gPSBjbGFzcyBleHRlbmRzIFBhcmVudENsYXNzIHtcbiAgICAgIGNvbnN0cnVjdG9yKC4uLmFyZ3MpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJncyk7XG5cbiAgICAgICAgdGhpcy5fbWFuYWdlZExheWVycyA9IHt9O1xuICAgICAgfVxuXG4gICAgICBfb25GZWF0dXJlQWRkZWQodHlwZU5hbWUpIHtcbiAgICAgICAgc3VwZXIuX29uRmVhdHVyZUFkZGVkKHR5cGVOYW1lKTtcblxuICAgICAgICBpZiAodHlwZU5hbWUgIT09ICdBbmltYXRpb25GZWF0dXJlJykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX21hbmFnZWRMYXllcnMgPSB0aGlzLl9tYW5hZ2VkTGF5ZXJzIHx8IHt9O1xuXG4gICAgICAgIC8vIERldGVjdCBuZXcgbGF5ZXJzXG4gICAgICAgIHRoaXMuX2hvc3QuQW5pbWF0aW9uRmVhdHVyZS5sYXllcnMuZm9yRWFjaChuYW1lID0+IHtcbiAgICAgICAgICB0aGlzLl9vbkxheWVyQWRkZWQoe25hbWV9KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIF9vbkZlYXR1cmVSZW1vdmVkKHR5cGVOYW1lKSB7XG4gICAgICAgIHN1cGVyLl9vbkZlYXR1cmVSZW1vdmVkKHR5cGVOYW1lKTtcblxuICAgICAgICBpZiAodHlwZU5hbWUgIT09ICdBbmltYXRpb25GZWF0dXJlJykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX21hbmFnZWRMYXllcnMgPSB0aGlzLl9tYW5hZ2VkTGF5ZXJzIHx8IHt9O1xuXG4gICAgICAgIC8vIERlYWN0aXZhdGUgdGhlIGxheWVyc1xuICAgICAgICBPYmplY3Qua2V5cyh0aGlzLl9tYW5hZ2VkTGF5ZXJzKS5mb3JFYWNoKG5hbWUgPT4ge1xuICAgICAgICAgIHRoaXMuX29uTGF5ZXJSZW1vdmVkKHtuYW1lfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBfb25MYXllckFkZGVkKHtuYW1lfSkge1xuICAgICAgICAvLyBNYXJrIHRoZSBsYXllciBhcyBhY3RpdmUgaWYgaXQgaXMgbWFuYWdlZFxuICAgICAgICBpZiAodGhpcy5fbWFuYWdlZExheWVyc1tuYW1lXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhpcy5fbWFuYWdlZExheWVyc1tuYW1lXS5pc0FjdGl2ZSA9IHRydWU7XG5cbiAgICAgICAgICAvLyBEZXRlY3QgbmV3IGFuaW1hdGlvbnNcbiAgICAgICAgICB0aGlzLl9ob3N0LkFuaW1hdGlvbkZlYXR1cmUuZ2V0QW5pbWF0aW9ucyhuYW1lKS5mb3JFYWNoKGFuaW1OYW1lID0+IHtcbiAgICAgICAgICAgIHRoaXMuX29uQW5pbWF0aW9uQWRkZWQoe2xheWVyTmFtZTogbmFtZSwgYW5pbWF0aW9uTmFtZTogYW5pbU5hbWV9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBfb25MYXllclJlbW92ZWQoe25hbWV9KSB7XG4gICAgICAgIC8vIERlYWN0aXZhdGUgdGhlIGxheWVyIGlmIGl0IGlzIG1hbmFnZWRcbiAgICAgICAgaWYgKHRoaXMuX21hbmFnZWRMYXllcnNbbmFtZV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRoaXMuX21hbmFnZWRMYXllcnNbbmFtZV0uaXNBY3RpdmUgPSBmYWxzZTtcblxuICAgICAgICAgIC8vIERlYWN0aXZhdGUgdGhlIGFuaW1hdGlvbnNcbiAgICAgICAgICBPYmplY3Qua2V5cyh0aGlzLl9tYW5hZ2VkTGF5ZXJzW25hbWVdLmFuaW1hdGlvbnMpLmZvckVhY2goXG4gICAgICAgICAgICBhbmltTmFtZSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuX29uQW5pbWF0aW9uUmVtb3ZlZCh7XG4gICAgICAgICAgICAgICAgbGF5ZXJOYW1lOiBuYW1lLFxuICAgICAgICAgICAgICAgIGFuaW1hdGlvbk5hbWU6IGFuaW1OYW1lLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIF9vbkxheWVyUmVuYW1lZCh7b2xkTmFtZSwgbmV3TmFtZX0pIHtcbiAgICAgICAgY29uc3QgbGF5ZXJPcHRpb25zID0gdGhpcy5fbWFuYWdlZExheWVyc1tvbGROYW1lXTtcblxuICAgICAgICAvLyBSZXBsYWNlIHRoZSBsYXllciBrZXkgd2l0aCB0aGUgbmV3IG5hbWVcbiAgICAgICAgaWYgKGxheWVyT3B0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZGVsZXRlIHRoaXMuX21hbmFnZWRMYXllcnNbb2xkTmFtZV07XG4gICAgICAgICAgdGhpcy5fbWFuYWdlZExheWVyc1tuZXdOYW1lXSA9IGxheWVyT3B0aW9ucztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBfb25BbmltYXRpb25BZGRlZCh7bGF5ZXJOYW1lLCBhbmltYXRpb25OYW1lfSkge1xuICAgICAgICAvLyBNYXJrIHRoZSBhbmltYXRpb24gYXMgYWN0aXZlIGlmIGl0IGlzIG1hbmFnZWRcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRoaXMuX21hbmFnZWRMYXllcnNbbGF5ZXJOYW1lXSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgdGhpcy5fbWFuYWdlZExheWVyc1tsYXllck5hbWVdLmFuaW1hdGlvbnNbYW5pbWF0aW9uTmFtZV0gIT09IHVuZGVmaW5lZFxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLl9tYW5hZ2VkTGF5ZXJzW2xheWVyTmFtZV0uYW5pbWF0aW9uc1tcbiAgICAgICAgICAgIGFuaW1hdGlvbk5hbWVcbiAgICAgICAgICBdLmlzQWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBfb25BbmltYXRpb25SZW1vdmVkKHtsYXllck5hbWUsIGFuaW1hdGlvbk5hbWV9KSB7XG4gICAgICAgIC8vIERlYWN0aXZhdGUgdGhlIGFuaW1hdGlvbiBpZiBpdCBpcyBtYW5hZ2VkXG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aGlzLl9tYW5hZ2VkTGF5ZXJzW2xheWVyTmFtZV0gIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgIHRoaXMuX21hbmFnZWRMYXllcnNbbGF5ZXJOYW1lXS5hbmltYXRpb25zW2FuaW1hdGlvbk5hbWVdICE9PSB1bmRlZmluZWRcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5fbWFuYWdlZExheWVyc1tsYXllck5hbWVdLmFuaW1hdGlvbnNbXG4gICAgICAgICAgICBhbmltYXRpb25OYW1lXG4gICAgICAgICAgXS5pc0FjdGl2ZSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIF9vbkFuaW1hdGlvblJlbmFtZWQoe2xheWVyTmFtZSwgb2xkTmFtZSwgbmV3TmFtZX0pIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRoaXMuX21hbmFnZWRMYXllcnNbbGF5ZXJOYW1lXSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgdGhpcy5fbWFuYWdlZExheWVyc1tsYXllck5hbWVdLmFuaW1hdGlvbnNbb2xkTmFtZV0gIT09IHVuZGVmaW5lZFxuICAgICAgICApIHtcbiAgICAgICAgICAvLyBSZXBsYWNlIHRoZSBhbmltYXRpb24ga2V5IHdpdGggdGhlIG5ldyBuYW1lXG4gICAgICAgICAgY29uc3QgYW5pbU9wdGlvbnMgPSB0aGlzLl9tYW5hZ2VkTGF5ZXJzW2xheWVyTmFtZV0uYW5pbWF0aW9uc1tcbiAgICAgICAgICAgIG9sZE5hbWVcbiAgICAgICAgICBdO1xuICAgICAgICAgIGRlbGV0ZSB0aGlzLl9tYW5hZ2VkTGF5ZXJzW2xheWVyTmFtZV0uYW5pbWF0aW9uc1tvbGROYW1lXTtcbiAgICAgICAgICB0aGlzLl9tYW5hZ2VkTGF5ZXJzW2xheWVyTmFtZV0uYW5pbWF0aW9uc1tuZXdOYW1lXSA9IGFuaW1PcHRpb25zO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJlZ2lzdGVyTGF5ZXIobmFtZSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIC8vIFN0YXJ0IHdpdGggZGVmYXVsdCBvcHRpb25zIGZvciBlYWNoIG5ldyBsYXllclxuICAgICAgICBpZiAodGhpcy5fbWFuYWdlZExheWVyc1tuYW1lXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhpcy5fbWFuYWdlZExheWVyc1tuYW1lXSA9IHtcbiAgICAgICAgICAgIC4uLnRoaXMuY29uc3RydWN0b3IuREVGQVVMVF9MQVlFUl9PUFRJT05TLFxuICAgICAgICAgICAgYW5pbWF0aW9uczoge30sXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFVwZGF0ZSBhbGwgb3B0aW9ucyBleGNlcHQgYW5pbWF0aW9uc1xuICAgICAgICBjb25zdCBsYXllck9wdGlvbnMgPSB0aGlzLl9tYW5hZ2VkTGF5ZXJzW25hbWVdO1xuICAgICAgICBvcHRpb25zID0gey4uLm9wdGlvbnN9O1xuICAgICAgICBjb25zdCBhbmltYXRpb25PcHRpb25zID0gb3B0aW9ucy5hbmltYXRpb25zIHx8IHt9O1xuICAgICAgICBkZWxldGUgb3B0aW9ucy5hbmltYXRpb25zO1xuICAgICAgICBPYmplY3QuYXNzaWduKGxheWVyT3B0aW9ucywgb3B0aW9ucyk7XG5cbiAgICAgICAgLy8gQ2hlY2sgd2hldGhlciB0aGUgbGF5ZXIgY2FuIGJlIG1hbmlwdWxhdGVkIG5vd1xuICAgICAgICBsYXllck9wdGlvbnMuaXNBY3RpdmUgPVxuICAgICAgICAgIHRoaXMuX2hvc3QuQW5pbWF0aW9uRmVhdHVyZSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgdGhpcy5faG9zdC5BbmltYXRpb25GZWF0dXJlLmxheWVycy5pbmNsdWRlcyhuYW1lKTtcblxuICAgICAgICAvLyBSZWdpc3RlciB0aGUgYW5pbWF0aW9uc1xuICAgICAgICBPYmplY3QuZW50cmllcyhhbmltYXRpb25PcHRpb25zKS5mb3JFYWNoKChbYW5pbU5hbWUsIGFuaW1PcHRpb25zXSkgPT4ge1xuICAgICAgICAgIHRoaXMucmVnaXN0ZXJBbmltYXRpb24obmFtZSwgYW5pbU5hbWUsIGFuaW1PcHRpb25zKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHJlZ2lzdGVyQW5pbWF0aW9uKGxheWVyTmFtZSwgYW5pbWF0aW9uTmFtZSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIC8vIFJlZ2lzdGVyIHRoZSBsYXllciBpZiBpdCBoYXNuJ3QgYmVlbiByZWdpc3RlcmVkIHlldFxuICAgICAgICBpZiAodGhpcy5fbWFuYWdlZExheWVyc1tsYXllck5hbWVdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLnJlZ2lzdGVyTGF5ZXIobGF5ZXJOYW1lKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFVwZGF0ZSBhbmltYXRpb24gb3B0aW9uc1xuICAgICAgICBjb25zdCBhbmltT3B0aW9ucyA9XG4gICAgICAgICAgdGhpcy5fbWFuYWdlZExheWVyc1tsYXllck5hbWVdLmFuaW1hdGlvbnNbYW5pbWF0aW9uTmFtZV0gfHwge307XG4gICAgICAgIE9iamVjdC5hc3NpZ24oYW5pbU9wdGlvbnMsIG9wdGlvbnMpO1xuICAgICAgICB0aGlzLl9tYW5hZ2VkTGF5ZXJzW2xheWVyTmFtZV0uYW5pbWF0aW9uc1thbmltYXRpb25OYW1lXSA9IGFuaW1PcHRpb25zO1xuXG4gICAgICAgIC8vIENoZWNrIHdoZXRoZXIgdGhlIGFuaW1hdGlvbiBjYW4gYmUgbWFuaXB1bGF0ZWQgbm93XG4gICAgICAgIHRoaXMuX21hbmFnZWRMYXllcnNbbGF5ZXJOYW1lXS5hbmltYXRpb25zW2FuaW1hdGlvbk5hbWVdLmlzQWN0aXZlID1cbiAgICAgICAgICB0aGlzLl9tYW5hZ2VkTGF5ZXJzW2xheWVyTmFtZV0uaXNBY3RpdmUgJiZcbiAgICAgICAgICB0aGlzLl9ob3N0LkFuaW1hdGlvbkZlYXR1cmUuZ2V0QW5pbWF0aW9ucyhsYXllck5hbWUpLmluY2x1ZGVzKFxuICAgICAgICAgICAgYW5pbWF0aW9uTmFtZVxuICAgICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHNldExheWVyV2VpZ2h0cyhuYW1lRmlsdGVyID0gKCkgPT4gdHJ1ZSwgd2VpZ2h0LCBzZWNvbmRzLCBlYXNpbmdGbikge1xuICAgICAgICBjb25zdCBsYXllck5hbWVzID0gT2JqZWN0LmtleXModGhpcy5fbWFuYWdlZExheWVycykuZmlsdGVyKG5hbWVGaWx0ZXIpO1xuXG4gICAgICAgIGxheWVyTmFtZXMuZm9yRWFjaChuYW1lID0+IHtcbiAgICAgICAgICBjb25zdCBsYXllck9wdGlvbnMgPSB0aGlzLl9tYW5hZ2VkTGF5ZXJzW25hbWVdO1xuXG4gICAgICAgICAgaWYgKGxheWVyT3B0aW9ucy5pc0FjdGl2ZSkge1xuICAgICAgICAgICAgdGhpcy5faG9zdC5BbmltYXRpb25GZWF0dXJlLnNldExheWVyV2VpZ2h0KFxuICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICB3ZWlnaHQsXG4gICAgICAgICAgICAgIHNlY29uZHMgIT09IHVuZGVmaW5lZCA/IHNlY29uZHMgOiBsYXllck9wdGlvbnMuYmxlbmRUaW1lLFxuICAgICAgICAgICAgICBlYXNpbmdGbiB8fCBsYXllck9wdGlvbnMuZWFzaW5nRm5cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgZW5hYmxlKHNlY29uZHMsIGVhc2luZ0ZuKSB7XG4gICAgICAgIHRoaXMuc2V0TGF5ZXJXZWlnaHRzKHVuZGVmaW5lZCwgMSwgc2Vjb25kcywgZWFzaW5nRm4pO1xuICAgICAgfVxuXG4gICAgICBkaXNhYmxlKHNlY29uZHMsIGVhc2luZ0ZuKSB7XG4gICAgICAgIHRoaXMuc2V0TGF5ZXJXZWlnaHRzKHVuZGVmaW5lZCwgMCwgc2Vjb25kcywgZWFzaW5nRm4pO1xuICAgICAgfVxuXG4gICAgICBpbnN0YWxsQXBpKCkge1xuICAgICAgICBjb25zdCBhcGkgPSBzdXBlci5pbnN0YWxsQXBpKCk7XG5cbiAgICAgICAgT2JqZWN0LmFzc2lnbihhcGksIHtcbiAgICAgICAgICByZWdpc3RlckxheWVyOiB0aGlzLnJlZ2lzdGVyTGF5ZXIuYmluZCh0aGlzKSxcbiAgICAgICAgICByZWdpc3RlckFuaW1hdGlvbjogdGhpcy5yZWdpc3RlckFuaW1hdGlvbi5iaW5kKHRoaXMpLFxuICAgICAgICAgIHNldExheWVyV2VpZ2h0czogdGhpcy5zZXRMYXllcldlaWdodHMuYmluZCh0aGlzKSxcbiAgICAgICAgICBlbmFibGU6IHRoaXMuZW5hYmxlLmJpbmQodGhpcyksXG4gICAgICAgICAgZGlzYWJsZTogdGhpcy5kaXNhYmxlLmJpbmQodGhpcyksXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBhcGk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE1hbmFnZWRBbmltYXRpb25MYXllck1peGluLCB7XG4gICAgICBERUZBVUxUX0xBWUVSX09QVElPTlM6IHtcbiAgICAgICAgdmFsdWU6IE1hbmFnZWRBbmltYXRpb25MYXllckludGVyZmFjZS5ERUZBVUxUX0xBWUVSX09QVElPTlMsXG4gICAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gTWFuYWdlZEFuaW1hdGlvbkxheWVyTWl4aW47XG4gIH1cbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTWFuYWdlZEFuaW1hdGlvbkxheWVySW50ZXJmYWNlLCB7XG4gIERFRkFVTFRfTEFZRVJfT1BUSU9OUzoge1xuICAgIHZhbHVlOiB7YmxlbmRUaW1lOiAwLjUsIGFuaW1hdGlvbnM6IHt9fSxcbiAgICB3cml0YWJsZTogZmFsc2UsXG4gIH0sXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgTWFuYWdlZEFuaW1hdGlvbkxheWVySW50ZXJmYWNlO1xuIiwiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTBcblxuLyogZXNsaW50LWRpc2FibGUgbWF4LWNsYXNzZXMtcGVyLWZpbGUgKi9cbmltcG9ydCBGZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlIGZyb20gJ2NvcmUvRmVhdHVyZURlcGVuZGVudEludGVyZmFjZSc7XG5cbi8qKlxuICogQ2xhc3MgZmFjdG9yeSBpbnRlcmZhY2UgZm9yIGZlYXR1cmVzIHRoYXQgYXJlIGRlcGVuZGVudCBvbiB0aGUgVGV4dFRvU3BlZWNoRmVhdHVyZVxuICogYmVpbmcgcHJlc2VudCBvbiB0aGUgaG9zdC4gU3BlZWNoIGV2ZW50cyB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgbGlzdGVuZWQgZm9yIG9uY2UgYVxuICogVGV4dFRvU3BlZWNoRmVhdHVyZSBpcyBhZGRlZCB0byB0aGUgaG9zdCBhbmQgc3RvcHBlZCBvbmNlIGl0IGlzIHJlbW92ZWQuXG4gKlxuICogQGludGVyZmFjZVxuICogQGV4dGVuZHMgRmVhdHVyZURlcGVuZGVudEludGVyZmFjZVxuICpcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBFVkVOVF9ERVBFTkRFTkNJRVMgLSBFdmVudHMgdGhhdCB0aGUgZmVhdHVyZSBzaG91bGQgc3RhcnQvc3RvcFxuICogbGlzdGVuaW5nIGZvciB3aGVuIGEgZmVhdHVyZSBvZiB0eXBlIEZlYXR1cmVOYW1lIGlzIGFkZGVkL3JlbW92ZWQgZnJvbSB0aGUgaG9zdC5cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBFVkVOVF9ERVBFTkRFTkNJRVMuVGV4dFRvU3BlZWNoRmVhdHVyZSAtIEV2ZW50cyB0aGF0IGFyZVxuICogc3BlY2lmaWMgdG8gdGhlIFRleHRUb1NwZWVjaEZlYXR1cmUuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW0VWRU5UX0RFUEVOREVOQ0lFUy5UZXh0VG9TcGVlY2hGZWF0dXJlLnBsYXk9J19vblBsYXknXSAtXG4gKiBUaGUgbmFtZSBvZiB0aGUgbWV0aG9kIHRoYXQgd2lsbCBiZSBleGVjdXRlZCB3aGVuIFRleHRUb1NwZWVjaEZlYXR1cmUgcGxheVxuICogZXZlbnRzIGFyZSBlbWl0dGVkLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtFVkVOVF9ERVBFTkRFTkNJRVMuVGV4dFRvU3BlZWNoRmVhdHVyZS5wYXVzZT0nX29uUGF1c2UnXSAtXG4gKiBUaGUgbmFtZSBvZiB0aGUgbWV0aG9kIHRoYXQgd2lsbCBiZSBleGVjdXRlZCB3aGVuIFRleHRUb1NwZWVjaEZlYXR1cmUgcGF1c2VcbiAqIGV2ZW50cyBhcmUgZW1pdHRlZC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbRVZFTlRfREVQRU5ERU5DSUVTLlRleHRUb1NwZWVjaEZlYXR1cmUucmVzdW1lPSdfb25SZXN1bWUnXSAtXG4gKiBUaGUgbmFtZSBvZiB0aGUgbWV0aG9kIHRoYXQgd2lsbCBiZSBleGVjdXRlZCB3aGVuIFRleHRUb1NwZWVjaEZlYXR1cmUgcmVzdW1lXG4gKiBldmVudHMgYXJlIGVtaXR0ZWQuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW0VWRU5UX0RFUEVOREVOQ0lFUy5UZXh0VG9TcGVlY2hGZWF0dXJlLnN0b3A9J19vblN0b3AnXSAtXG4gKiBUaGUgbmFtZSBvZiB0aGUgbWV0aG9kIHRoYXQgd2lsbCBiZSBleGVjdXRlZCB3aGVuIFRleHRUb1NwZWVjaEZlYXR1cmUgc3RvcFxuICogZXZlbnRzIGFyZSBlbWl0dGVkLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtFVkVOVF9ERVBFTkRFTkNJRVMuVGV4dFRvU3BlZWNoRmVhdHVyZS5zZW50ZW5jZT0nX29uU2VudGVuY2UnXSAtXG4gKiBUaGUgbmFtZSBvZiB0aGUgbWV0aG9kIHRoYXQgd2lsbCBiZSBleGVjdXRlZCB3aGVuIFRleHRUb1NwZWVjaEZlYXR1cmUgc2VudGVuY2VcbiAqIGV2ZW50cyBhcmUgZW1pdHRlZC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbRVZFTlRfREVQRU5ERU5DSUVTLlRleHRUb1NwZWVjaEZlYXR1cmUud29yZD0nX29uV29yZCddIC1cbiAqIFRoZSBuYW1lIG9mIHRoZSBtZXRob2QgdGhhdCB3aWxsIGJlIGV4ZWN1dGVkIHdoZW4gVGV4dFRvU3BlZWNoRmVhdHVyZSB3b3JkXG4gKiBldmVudHMgYXJlIGVtaXR0ZWQuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW0VWRU5UX0RFUEVOREVOQ0lFUy5UZXh0VG9TcGVlY2hGZWF0dXJlLnZpc2VtZT0nX29uVmlzZW1lJ10gLVxuICogVGhlIG5hbWUgb2YgdGhlIG1ldGhvZCB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQgd2hlbiBUZXh0VG9TcGVlY2hGZWF0dXJlIHZpc2VtZVxuICogZXZlbnRzIGFyZSBlbWl0dGVkLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtFVkVOVF9ERVBFTkRFTkNJRVMuVGV4dFRvU3BlZWNoRmVhdHVyZS5zc21sPSdfb25Tc21sJ10gLVxuICogVGhlIG5hbWUgb2YgdGhlIG1ldGhvZCB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQgd2hlbiBUZXh0VG9TcGVlY2hGZWF0dXJlIHNzbWxcbiAqIGV2ZW50cyBhcmUgZW1pdHRlZC5cbiAqL1xuY2xhc3MgVGV4dFRvU3BlZWNoRmVhdHVyZURlcGVuZGVudEludGVyZmFjZSBleHRlbmRzIEZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2Uge1xuICAvKipcbiAgICogRXhlY3V0ZWQgd2hlbiBzcGVlY2ggcGxheSBldmVudHMgYXJlIGNhdWdodC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9vblBsYXkoKSB7fVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlZCB3aGVuIHNwZWVjaCBwYXVzZSBldmVudHMgYXJlIGNhdWdodC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9vblBhdXNlKCkge31cblxuICAvKipcbiAgICogRXhlY3V0ZWQgd2hlbiBzcGVlY2ggcmVzdW1lIGV2ZW50cyBhcmUgY2F1Z2h0LlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX29uUmVzdW1lKCkge31cblxuICAvKipcbiAgICogRXhlY3V0ZWQgd2hlbiBzcGVlY2ggc3RvcCBldmVudHMgYXJlIGNhdWdodC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9vblN0b3AoKSB7fVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlZCB3aGVuIHNwZWVjaCBzZW50ZW5jZSBldmVudHMgYXJlIGNhdWdodC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9vblNlbnRlbmNlKCkge31cblxuICAvKipcbiAgICogRXhlY3V0ZWQgd2hlbiBzcGVlY2ggd29yZCBldmVudHMgYXJlIGNhdWdodC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9vbldvcmQoKSB7fVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlZCB3aGVuIHNwZWVjaCB2aXNlbWUgZXZlbnRzIGFyZSBjYXVnaHQuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfb25WaXNlbWUoKSB7fVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlZCB3aGVuIHNwZWVjaCBzc21sIGV2ZW50cyBhcmUgY2F1Z2h0LlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX29uU3NtbCgpIHt9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBjbGFzcyB0aGF0IGltcGxlbWVudHMge0BsaW5rIFRleHRUb1NwZWVjaEZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2V9XG4gICAqIGFuZCBleHRlbmRzIGEgc3BlY2lmaWVkIGJhc2UgY2xhc3MuXG4gICAqXG4gICAqIEBwYXJhbSB7Q2xhc3N9IEJhc2VDbGFzcyAtIFRoZSBjbGFzcyB0byBleHRlbmQuXG4gICAqXG4gICAqIEByZXR1cm4ge0NsYXNzfSBBIGNsYXNzIHRoYXQgZXh0ZW5kcyBgQmFzZUNsYXNzYCBhbmQgaW1wbGVtZW50cyB7QGxpbmsgVGV4dFRvU3BlZWNoRmVhdHVyZURlcGVuZGVudEludGVyZmFjZX0uXG4gICAqL1xuICBzdGF0aWMgTWl4aW4oQmFzZUNsYXNzKSB7XG4gICAgY29uc3QgUGFyZW50Q2xhc3MgPSBGZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlLk1peGluKEJhc2VDbGFzcyk7XG4gICAgY29uc3QgVGV4dFRvU3BlZWNoRmVhdHVyZURlcGVuZGVudE1peGluID0gY2xhc3MgZXh0ZW5kcyBQYXJlbnRDbGFzcyB7XG4gICAgICBfb25QbGF5KCkge31cblxuICAgICAgX29uUGF1c2UoKSB7fVxuXG4gICAgICBfb25SZXN1bWUoKSB7fVxuXG4gICAgICBfb25TdG9wKCkge31cblxuICAgICAgX29uU2VudGVuY2UoKSB7fVxuXG4gICAgICBfb25Xb3JkKCkge31cblxuICAgICAgX29uVmlzZW1lKCkge31cblxuICAgICAgX29uU3NtbCgpIHt9XG4gICAgfTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFRleHRUb1NwZWVjaEZlYXR1cmVEZXBlbmRlbnRNaXhpbiwge1xuICAgICAgRVZFTlRfREVQRU5ERU5DSUVTOiB7XG4gICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgLi4uUGFyZW50Q2xhc3MuRVZFTlRfREVQRU5ERU5DSUVTLFxuICAgICAgICAgIC4uLlRleHRUb1NwZWVjaEZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2UuRVZFTlRfREVQRU5ERU5DSUVTLFxuICAgICAgICB9LFxuICAgICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIFRleHRUb1NwZWVjaEZlYXR1cmVEZXBlbmRlbnRNaXhpbjtcbiAgfVxufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUZXh0VG9TcGVlY2hGZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlLCB7XG4gIEVWRU5UX0RFUEVOREVOQ0lFUzoge1xuICAgIHZhbHVlOiB7XG4gICAgICBUZXh0VG9TcGVlY2hGZWF0dXJlOiB7XG4gICAgICAgIHBsYXk6ICdfb25QbGF5JyxcbiAgICAgICAgcGF1c2U6ICdfb25QYXVzZScsXG4gICAgICAgIHJlc3VtZTogJ19vblJlc3VtZScsXG4gICAgICAgIHN0b3A6ICdfb25TdG9wJyxcbiAgICAgICAgc2VudGVuY2U6ICdfb25TZW50ZW5jZScsXG4gICAgICAgIHdvcmQ6ICdfb25Xb3JkJyxcbiAgICAgICAgdmlzZW1lOiAnX29uVmlzZW1lJyxcbiAgICAgICAgc3NtbDogJ19vblNzbWwnLFxuICAgICAgfSxcbiAgICB9LFxuICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgfSxcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBUZXh0VG9TcGVlY2hGZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlO1xuIiwiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTBcbmltcG9ydCBNYXRoVXRpbHMgZnJvbSAnLi9NYXRoVXRpbHMnO1xuaW1wb3J0IHtRdWFkcmF0aWN9IGZyb20gJy4vYW5pbXBhY2svRWFzaW5nJztcbmltcG9ydCBNYW5hZ2VkQW5pbWF0aW9uTGF5ZXJJbnRlcmZhY2UgZnJvbSAnLi9hbmltcGFjay9NYW5hZ2VkQW5pbWF0aW9uTGF5ZXJJbnRlcmZhY2UnO1xuaW1wb3J0IFRleHRUb1NwZWVjaEZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2UgZnJvbSAnLi9hd3NwYWNrL1RleHRUb1NwZWVjaEZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2UnO1xuaW1wb3J0IEFic3RyYWN0SG9zdEZlYXR1cmUgZnJvbSAnLi9BYnN0cmFjdEhvc3RGZWF0dXJlJztcblxuLyoqXG4gKiBEZWZhdWx0IG1hcHBpbmcgb2YgUG9sbHkgdmlzZW1lIG5hbWVzIHRvIGFuaW1hdGlvbiBvcHRpb25zIG9iamVjdHMuXG4gKlxuICogQHByb3BlcnR5IHtPYmplY3R9IFtzaWw9e25hbWU6ICdzaWwnfV1cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBbcD17bmFtZTogJ3AnLCBvdmVycmlkZVdlaWdodDogMC45fV1cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBbdD17bmFtZTogJ3QnLCBibGVuZFRpbWU6IDAuMn1dXG4gKiBAcHJvcGVydHkge09iamVjdH0gW1M9e25hbWU6ICdTJ31dXG4gKiBAcHJvcGVydHkge09iamVjdH0gW1Q9e25hbWU6ICdUJ31dXG4gKiBAcHJvcGVydHkge09iamVjdH0gW2Y9e25hbWU6ICdmJywgb3ZlcnJpZGVXZWlnaHQ6IDAuNzV9XVxuICogQHByb3BlcnR5IHtPYmplY3R9IFtrPXtuYW1lOiAnayd9XVxuICogQHByb3BlcnR5IHtPYmplY3R9IFtpPXtuYW1lOiAnaSd9XVxuICogQHByb3BlcnR5IHtPYmplY3R9IFtyPXtuYW1lOiAncid9XVxuICogQHByb3BlcnR5IHtPYmplY3R9IFtzPXtuYW1lOiAncycsIGJsZW5kVGltZTogMC4yNX1dXG4gKiBAcHJvcGVydHkge09iamVjdH0gW3U9e25hbWU6ICd1J31dXG4gKiBAcHJvcGVydHkge09iamVjdH0gW0A9e25hbWU6ICdAJ31dXG4gKiBAcHJvcGVydHkge09iamVjdH0gW2E9e25hbWU6ICdhJ31dXG4gKiBAcHJvcGVydHkge09iamVjdH0gW2U9e25hbWU6ICdlJywgYmxlbmRUaW1lOiAwLjJ9XVxuICogQHByb3BlcnR5IHtPYmplY3R9IFtFPXtuYW1lOiAnRSd9XVxuICogQHByb3BlcnR5IHtPYmplY3R9IFtvPXtuYW1lOiAnbyd9XVxuICogQHByb3BlcnR5IHtPYmplY3R9IFtPPXtuYW1lOiAnTyd9XVxuICovXG5jb25zdCBEZWZhdWx0VmlzZW1lTWFwID0ge1xuICBzaWw6IHtuYW1lOiAnc2lsJ30sXG4gIHA6IHtuYW1lOiAncCcsIG92ZXJyaWRlV2VpZ2h0OiAwLjl9LFxuICB0OiB7bmFtZTogJ3QnLCBibGVuZFRpbWU6IDAuMn0sXG4gIFM6IHtuYW1lOiAnUyd9LFxuICBUOiB7bmFtZTogJ1QnfSxcbiAgZjoge25hbWU6ICdmJywgb3ZlcnJpZGVXZWlnaHQ6IDAuNzV9LFxuICBrOiB7bmFtZTogJ2snfSxcbiAgaToge25hbWU6ICdpJ30sXG4gIHI6IHtuYW1lOiAncid9LFxuICBzOiB7bmFtZTogJ3MnLCBibGVuZFRpbWU6IDAuMjV9LFxuICB1OiB7bmFtZTogJ3UnfSxcbiAgJ0AnOiB7bmFtZTogJ0AnfSxcbiAgYToge25hbWU6ICdhJ30sXG4gIGU6IHtuYW1lOiAnZScsIGJsZW5kVGltZTogMC4yfSxcbiAgRToge25hbWU6ICdFJ30sXG4gIG86IHtuYW1lOiAnbyd9LFxuICBPOiB7bmFtZTogJ08nfSxcbn07XG5cbi8qKlxuICogTGlwc3luYyBjb250cm9scyB0d28gdHlwZXMgb2YgbW92ZW1lbnQ6IGlkbGUgYW5pbWF0aW9uIHRoYXQgc2hvdWxkIHBsYXkgd2hpbGVcbiAqIHNwZWVjaCBpcyBwbGF5aW5nIGFuZCB2aXNlbWUgYW5pbWF0aW9ucyBjb3JyZXNwb25kaW5nIHRvIFBvbGx5IHZpc2VtZXMgd2hvc2VcbiAqIHdlaWdodHMgc2hvdWxkIGJlIHR1cm5lZCBvbiBhbmQgb2ZmIGFzIHRoZXkgYXJlIGVuY291bnRlcmVkIGluIHRoZSBQb2xseSBTU01MXG4gKiB0cmFuc2NyaXB0LiBMYXllcnMgb3duZWQgYnkgdGhpcyBmZWF0dXJlIHdpbGwgYmUgZW5hYmxlZCB3aGlsZSBzcGVlY2ggaXMgcGxheWluZ1xuICogYW5kIGRpc2FibGVkIG9uY2UgaXQgc3RvcHMuXG4gKlxuICogQGV4dGVuZHMgQWJzdHJhY3RIb3N0RmVhdHVyZVxuICogQGFsaWFzIGNvcmUvTGlwc3luY0ZlYXR1cmVcbiAqIEBpbXBsZW1lbnRzIFRleHRUb1NwZWVjaEZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2VcbiAqIEBpbXBsZW1lbnRzIE1hbmFnZWRBbmltYXRpb25MYXllckludGVyZmFjZVxuICovXG5jbGFzcyBMaXBzeW5jRmVhdHVyZSBleHRlbmRzIEFic3RyYWN0SG9zdEZlYXR1cmUubWl4KFxuICBUZXh0VG9TcGVlY2hGZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlLk1peGluLFxuICBNYW5hZ2VkQW5pbWF0aW9uTGF5ZXJJbnRlcmZhY2UuTWl4aW5cbikge1xuICAvKipcbiAgICogQGNvbnN0cnVjdG9yXG4gICAqXG4gICAqIEBwYXJhbSB7Y29yZS9Ib3N0T2JqZWN0fSBob3N0IC0gSG9zdCB0aGF0IG93bnMgdGhlIGZlYXR1cmUuXG4gICAqIEBwYXJhbSB7T2JqZWN0PX0gdmlzZW1lT3B0aW9ucyAtIE9wdGlvbnMgZm9yIHRoZSB2aXNlbWUgbGF5ZXJzLlxuICAgKiBAcGFyYW0ge251bWJlcn0gW3Zpc2VtZU9wdGlvbnMuYmxlbmRUaW1lPTAuMTVdIC0gRGVmYXVsdCBhbW91bnQgb2YgdGltZSBpdFxuICAgKiB3aWxsIHRha2UgdG8gbWFuaXB1bGF0ZSBlYWNoIGZyZWVCbGVuZCB3ZWlnaHQgb24gdGhlIHZpc2VtZSBzdGF0ZXMuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbdmlzZW1lT3B0aW9ucy5kZWNheVJhdGU9e2Ftb3VudDogLjUsIHNlY29uZHM6IC41fV0gLSBBbiBvYmplY3RcbiAgICogZGVzY3JpYmluZyB0aGUgMC0xIGZhY3RvciB2aXNlbWUgd2VpZ2h0IHdpbGwgZGVjYXkgaWYgdGhlIHZpc2VtZSBkdXJhdGlvbiBpc1xuICAgKiBsb25nZXIgdGhhbiB0aGUgYmxlbmRUaW1lIGFuZCB0aGUgbnVtYmVyIG9mIHNlY29uZHMgaXQgd291bGQgdGFrZSB0byBkZWNheVxuICAgKiBieSB0aGF0IGZhY3Rvci5cbiAgICogQHBhcmFtIHtudW1iZXJ9IFt2aXNlbWVPcHRpb25zLmVhc2luZ0ZuPVF1YWRyYXRpYy5Jbk91dF0gLSBEZWZhdWx0IGVhc2luZyBmdW5jdGlvblxuICAgKiB0byB1c2Ugd2hlbiBtYW5pcHVsYXRpbmcgdmlzZW1lIGZyZWVCbGVuZCB3ZWlnaHRzLlxuICAgKiBAcGFyYW0ge0FycmF5LjxPYmplY3Q+fSBbdmlzZW1lT3B0aW9ucy4ubGF5ZXJzPVtdXSAtIEFuIGFycmF5IG9mIGxheWVyIG9wdGlvbnNcbiAgICogb2JqZWN0cyB0byByZWdpc3RlciBhcyB2aXNlbWUgbGF5ZXJzLlxuICAgKiBAcGFyYW0ge09iamVjdD19IHRhbGtpbmdPcHRpb25zIC0gT3B0aW9ucyBmb3IgdGhlIHRhbGtpbmcgbGF5ZXJzLlxuICAgKiBAcGFyYW0ge251bWJlcn0gW3RhbGtpbmdPcHRpb25zLmJsZW5kVGltZT0wLjc1XSAtIERlZmF1bHQgYW1vdW50IG9mIHRpbWUgdG9cbiAgICogZW5hYmxlIGFuZCBkaXNhYmxlIHRoZSB0YWxraW5nIGlkbGUgbGF5ZXJzXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbdGFsa2luZ09wdGlvbnMuZWFzaW5nRm49UXVhZHJhdGljLkluT3V0XSAtIERlZmF1bHQgZWFzaW5nXG4gICAqIGZ1bmN0aW9uIHRvIHVzZSB3aGVuIG1hbmlwdWxhdGluZyB3ZWlnaHRzIG9uIHRoZSB0YWxraW5nIGlkbGUgbGF5ZXJzLlxuICAgKiBAcGFyYW0ge0FycmF5LjxPYmplY3Q+fSBbdGFsa2luZ09wdGlvbnMubGF5ZXJzPVtdXSAtIEFuIGFycmF5IG9mIGxheWVyIG9wdGlvbnNcbiAgICogb2JqZWN0cyB0byByZWdpc3RlciBhcyB0YWxraW5nIGxheWVycy5cbiAgICogQHBhcmFtIHtudW1iZXJ9IFt2aXNlbWVMZWFkVGltZT0uMDY3XSAtIFRoZSBhbW91bnQgb2YgdGltZSB0byBpbnN0cnVjdCB0aGVcbiAgICogVGV4dFRvU3BlZWNoRmVhdHVyZSB0byBlbWl0IHNwZWVjaG1hcmtzIGJlZm9yZSBlYWNoIG9uZSdzIGFjdHVhbCB0aW1lc3RhbXBcbiAgICogaXMgcmVhY2hlZC4gVGhpcyB3aWxsIHNldCB0aGUgJ3NwZWVjaE1hcmtPZmZzZXQnIHZhcmlhYmxlIG9uIHRoZSBUZXh0VG9TcGVlY2hGZWF0dXJlLlxuICAgKi9cbiAgY29uc3RydWN0b3IoXG4gICAgaG9zdCxcbiAgICB7XG4gICAgICBibGVuZFRpbWU6IHZpc2VtZUJsZW5kVGltZSA9IDAuMTUsXG4gICAgICBkZWNheVJhdGU6IHthbW91bnQgPSAwLjUsIHNlY29uZHMgPSAwLjV9ID0ge30sXG4gICAgICBlYXNpbmdGbjogdmlzZW1lRWFzaW5nRm4gPSBRdWFkcmF0aWMuSW5PdXQsXG4gICAgICBsYXllcnM6IHZpc2VtZUxheWVycyA9IFtdLFxuICAgIH0gPSB7fSxcbiAgICB7XG4gICAgICBibGVuZFRpbWU6IHRhbGtpbmdCbGVuZFRpbWUgPSAwLjc1LFxuICAgICAgZWFzaW5nRm46IHRhbGtpbmdFYXNpbmdGbiA9IFF1YWRyYXRpYy5Jbk91dCxcbiAgICAgIGxheWVyczogdGFsa2luZ0xheWVycyA9IFtdLFxuICAgIH0gPSB7fSxcbiAgICB2aXNlbWVMZWFkVGltZSA9IDAuMDY3XG4gICkge1xuICAgIHN1cGVyKGhvc3QpO1xuXG4gICAgdGhpcy5fdmlzZW1lTGF5ZXJzID0ge307XG4gICAgdGhpcy5fdGFsa2luZ0xheWVycyA9IHt9O1xuICAgIHRoaXMudmlzZW1lTGVhZFRpbWUgPSB2aXNlbWVMZWFkVGltZTtcblxuICAgIC8vIFJlZ2lzdGVyIHRoZSB2aXNlbWUgbGF5ZXJzXG4gICAgdmlzZW1lTGF5ZXJzLmZvckVhY2goKHtuYW1lLCBhbmltYXRpb24sIHZpc2VtZU1hcCA9IERlZmF1bHRWaXNlbWVNYXB9KSA9PiB7XG4gICAgICB0aGlzLnJlZ2lzdGVyVmlzZW1lTGF5ZXIobmFtZSwge1xuICAgICAgICBhbmltYXRpb24sXG4gICAgICAgIHZpc2VtZU1hcCxcbiAgICAgICAgZGVjYXlSYXRlOiB7YW1vdW50LCBzZWNvbmRzfSxcbiAgICAgICAgYmxlbmRUaW1lOiB2aXNlbWVCbGVuZFRpbWUsXG4gICAgICAgIGVhc2luZ0ZuOiB2aXNlbWVFYXNpbmdGbixcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgLy8gUmVnaXN0ZXIgdGhlIHRhbGtpbmcgbGF5ZXJzXG4gICAgdGFsa2luZ0xheWVycy5mb3JFYWNoKCh7bmFtZSwgYW5pbWF0aW9ufSkgPT4ge1xuICAgICAgdGhpcy5yZWdpc3RlclRhbGtpbmdMYXllcihuYW1lLCB7XG4gICAgICAgIGFuaW1hdGlvbixcbiAgICAgICAgYmxlbmRUaW1lOiB0YWxraW5nQmxlbmRUaW1lLFxuICAgICAgICBlYXNpbmdGbjogdGFsa2luZ0Vhc2luZ0ZuLFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRW5zdXJlIHRoYXQgcmVnaXN0ZXJlZCB2aXNlbWUgYW5pbWF0aW9ucyBhcmUgRnJlZUJsZW5kU3RhdGVzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGF5ZXJOYW1lIC0gTmFtZSBvZiB0aGUgbGF5ZXIgdGhhdCBjb250YWlucyB0aGUgdmlzZW1lIGFuaW1hdGlvbi5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGFuaW1hdGlvbk5hbWUgLSBOYW1lIG9mIHRoZSBhbmltYXRpb24uXG4gICAqL1xuICBfcmVnaXN0ZXJWaXNlbWVBbmltYXRpb24obGF5ZXJOYW1lLCBhbmltYXRpb25OYW1lKSB7XG4gICAgaWYgKHRoaXMuX21hbmFnZWRMYXllcnNbbGF5ZXJOYW1lXS5hbmltYXRpb25zW2FuaW1hdGlvbk5hbWVdLmlzQWN0aXZlKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuX2hvc3QuQW5pbWF0aW9uRmVhdHVyZS5nZXRBbmltYXRpb25UeXBlKFxuICAgICAgICAgIGxheWVyTmFtZSxcbiAgICAgICAgICBhbmltYXRpb25OYW1lXG4gICAgICAgICkgIT09ICdmcmVlQmxlbmQnXG4gICAgICApIHtcbiAgICAgICAgLy8gV2FybiBhbmQgZGVhY3RpdmF0ZSBpZiB0aGUgcmVnaXN0ZXJlZCBzdGF0ZSBpcyBub3QgZnJlZUJsZW5kXG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICBgQ2Fubm90IHJlZ2lzdGVyIExpcHN5bmMgdmlzZW1lIGFuaW1hdGlvbiAke2FuaW1hdGlvbk5hbWV9IG9uIGxheWVyICR7bGF5ZXJOYW1lfSBmb3IgaG9zdCAke3RoaXMuX2hvc3QuaWR9LiBWaXNlbWUgYW5pbWF0aW9ucyBtdXN0IGJlIG9mIHR5cGUgJ2ZyZWVCbGVuZCcuYFxuICAgICAgICApO1xuICAgICAgICB0aGlzLl9tYW5hZ2VkTGF5ZXJzW2xheWVyTmFtZV0uYW5pbWF0aW9uc1tcbiAgICAgICAgICBhbmltYXRpb25OYW1lXG4gICAgICAgIF0uaXNBY3RpdmUgPSBmYWxzZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIENoZWNrIGlmIHRoZSBibGVuZFdlaWdodHMgY2FuIGJlIG1hbmlwdWxhdGVkIG5vd1xuICAgICAgICBjb25zdCB3ZWlnaHROYW1lcyA9IHRoaXMuX2hvc3QuQW5pbWF0aW9uRmVhdHVyZS5nZXRBbmltYXRpb25CbGVuZE5hbWVzKFxuICAgICAgICAgIGxheWVyTmFtZSxcbiAgICAgICAgICBhbmltYXRpb25OYW1lXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IHt2aXNlbWVNYXB9ID0gdGhpcy5fbWFuYWdlZExheWVyc1tsYXllck5hbWVdLmFuaW1hdGlvbnNbXG4gICAgICAgICAgYW5pbWF0aW9uTmFtZVxuICAgICAgICBdO1xuXG4gICAgICAgIE9iamVjdC52YWx1ZXModmlzZW1lTWFwKS5mb3JFYWNoKHZpc2VtZU9wdGlvbnMgPT4ge1xuICAgICAgICAgIHZpc2VtZU9wdGlvbnMuaXNBY3RpdmUgPSB3ZWlnaHROYW1lcy5pbmNsdWRlcyh2aXNlbWVPcHRpb25zLm5hbWUpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSWYgdGhlIGFkZGVkIGZlYXR1cmUgaXMgVGV4dFRvU3BlZWNoLCB1cGRhdGUgaXRzIHNwZWVjaE1hcmtPZmZzZXQgdmFyaWFibGUuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlTmFtZSAtIE5hbWUgb2YgdGhlIHR5cGUgb2YgZmVhdHVyZSB0aGF0IHdhcyBhZGRlZC5cbiAgICovXG4gIF9vbkZlYXR1cmVBZGRlZCh0eXBlTmFtZSkge1xuICAgIHRoaXMuX3Zpc2VtZUxheWVycyA9IHRoaXMuX3Zpc2VtZUxheWVycyB8fCB7fTtcbiAgICB0aGlzLl90YWxraW5nTGF5ZXJzID0gdGhpcy5fdGFsa2luZ0xheWVycyB8fCB7fTtcblxuICAgIHN1cGVyLl9vbkZlYXR1cmVBZGRlZCh0eXBlTmFtZSk7XG5cbiAgICBpZiAodHlwZU5hbWUgPT09ICdUZXh0VG9TcGVlY2hGZWF0dXJlJykge1xuICAgICAgdGhpcy5faG9zdC5UZXh0VG9TcGVlY2hGZWF0dXJlLnNwZWVjaG1hcmtPZmZzZXQgPVxuICAgICAgICAtdGhpcy5fdmlzZW1lTGVhZFRpbWUgfHwgMDtcbiAgICB9XG4gIH1cblxuICBfb25MYXllckFkZGVkKHtuYW1lfSkge1xuICAgIHN1cGVyLl9vbkxheWVyQWRkZWQoe25hbWV9KTtcblxuICAgIC8vIFZhbGlkYXRlIHRoZSB2aXNlbWUgYW5pbWF0aW9uXG4gICAgaWYgKHRoaXMuX3Zpc2VtZUxheWVyc1tuYW1lXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLl9yZWdpc3RlclZpc2VtZUFuaW1hdGlvbihuYW1lLCB0aGlzLl92aXNlbWVMYXllcnNbbmFtZV0pO1xuICAgIH1cbiAgfVxuXG4gIF9vbkFuaW1hdGlvbkFkZGVkKHtsYXllck5hbWUsIGFuaW1hdGlvbk5hbWV9KSB7XG4gICAgc3VwZXIuX29uQW5pbWF0aW9uQWRkZWQoe2xheWVyTmFtZX0pO1xuXG4gICAgLy8gVmFsaWRhdGUgdGhlIHZpc2VtZSBhbmltYXRpb25cbiAgICBpZiAodGhpcy5fdmlzZW1lTGF5ZXJzW2xheWVyTmFtZV0gPT09IGFuaW1hdGlvbk5hbWUpIHtcbiAgICAgIHRoaXMuX3JlZ2lzdGVyVmlzZW1lQW5pbWF0aW9uKGxheWVyTmFtZSwgdGhpcy5fdmlzZW1lTGF5ZXJzW2xheWVyTmFtZV0pO1xuICAgIH1cbiAgfVxuXG4gIF9vblBsYXkoKSB7XG4gICAgLy8gVHVybiBvbiB0aGUgbGF5ZXIgd2VpZ2h0c1xuICAgIHRoaXMuZW5hYmxlKCk7XG5cbiAgICAvLyBTZXQgdGhlIGN1cnJlbnQgYW5pbWF0aW9uc1xuICAgIFt0aGlzLl92aXNlbWVMYXllcnMsIHRoaXMuX3RhbGtpbmdMYXllcnNdLmZvckVhY2gobGF5ZXJzID0+IHtcbiAgICAgIE9iamVjdC5lbnRyaWVzKGxheWVycykuZm9yRWFjaCgoW2xheWVyTmFtZSwgYW5pbWF0aW9uTmFtZV0pID0+IHtcbiAgICAgICAgaWYgKHRoaXMuX21hbmFnZWRMYXllcnNbbGF5ZXJOYW1lXS5hbmltYXRpb25zW2FuaW1hdGlvbk5hbWVdLmlzQWN0aXZlKSB7XG4gICAgICAgICAgdGhpcy5faG9zdC5BbmltYXRpb25GZWF0dXJlLnJlc3VtZUFuaW1hdGlvbihsYXllck5hbWUsIGFuaW1hdGlvbk5hbWUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIF9vblBhdXNlKCkge1xuICAgIHRoaXMuX29uU3RvcCgpO1xuICB9XG5cbiAgX29uUmVzdW1lKCkge1xuICAgIHRoaXMuX29uUGxheSgpO1xuICB9XG5cbiAgX29uU3RvcCgpIHtcbiAgICAvLyBUdXJuIG9mZiB0aGUgbGF5ZXIgd2VpZ2h0c1xuICAgIHRoaXMuZGlzYWJsZSgpO1xuXG4gICAgLy8gUGF1c2UgdGhlIGN1cnJlbnQgYW5pbWF0aW9uc1xuICAgIFt0aGlzLl92aXNlbWVMYXllcnMsIHRoaXMuX3RhbGtpbmdMYXllcnNdLmZvckVhY2gobGF5ZXJzID0+IHtcbiAgICAgIE9iamVjdC5lbnRyaWVzKGxheWVycykuZm9yRWFjaCgoW2xheWVyTmFtZSwgYW5pbWF0aW9uTmFtZV0pID0+IHtcbiAgICAgICAgaWYgKHRoaXMuX21hbmFnZWRMYXllcnNbbGF5ZXJOYW1lXS5hbmltYXRpb25zW2FuaW1hdGlvbk5hbWVdLmlzQWN0aXZlKSB7XG4gICAgICAgICAgdGhpcy5faG9zdC5BbmltYXRpb25GZWF0dXJlLnBhdXNlQW5pbWF0aW9uKGxheWVyTmFtZSwgYW5pbWF0aW9uTmFtZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZW4gdmlzZW1lIGV2ZW50cyBhcmUgY2F1Z2h0LCB0dXJuIG9uIHdlaWdodCBvZiB0aGUgbmV3IHZpc2VtZSBmb3IgdGhlIGR1cmF0aW9uXG4gICAqIG9mIHRoZSBzcGVlY2ggbWFyaywgdGhlbiB0dXJuIHdlaWdodCBiYWNrIG9mZi5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IGV2ZW50IC0gRXZlbnQgZGF0YSBwYXNzZWQgZnJvbSB0aGUgc3BlZWNoLlxuICAgKiBAcGFyYW0ge09iamVjdH0gZXZlbnQubWFyayAtIFNwZWVjaG1hcmsgb2JqZWN0LlxuICAgKi9cbiAgYXN5bmMgX29uVmlzZW1lKHttYXJrfSkge1xuICAgIE9iamVjdC5lbnRyaWVzKHRoaXMuX3Zpc2VtZUxheWVycykuZm9yRWFjaCgoW2xheWVyTmFtZSwgYW5pbU5hbWVdKSA9PiB7XG4gICAgICAvLyBNYWtlIHN1cmUgdGhlIGxheWVyIGNhbiBiZSBtYW5pcHVsYXRlZFxuICAgICAgY29uc3Qge2lzQWN0aXZlLCB2aXNlbWVNYXB9ID0gdGhpcy5fbWFuYWdlZExheWVyc1tsYXllck5hbWVdLmFuaW1hdGlvbnNbXG4gICAgICAgIGFuaW1OYW1lXG4gICAgICBdO1xuXG4gICAgICBpZiAoIWlzQWN0aXZlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gVGFrZSB2YXJpYWJsZXMgZnJvbSB0aGUgdmlzZW1lIGlmIHRoZXkgZXhpc3QgYW5kIGRlZmF1bHQgdG8gdGhlIGxheWVyXG4gICAgICBjb25zdCB7XG4gICAgICAgIG5hbWU6IHZpc2VtZSxcbiAgICAgICAgaXNBY3RpdmU6IGlzVmlzZW1lQWN0aXZlLFxuICAgICAgICBkZWNheVJhdGUsXG4gICAgICAgIGJsZW5kVGltZSxcbiAgICAgICAgZWFzaW5nRm4sXG4gICAgICAgIG92ZXJyaWRlV2VpZ2h0LFxuICAgICAgfSA9IHtcbiAgICAgICAgLi4udGhpcy5fbWFuYWdlZExheWVyc1tsYXllck5hbWVdLFxuICAgICAgICAuLi52aXNlbWVNYXBbbWFyay52YWx1ZV0sXG4gICAgICB9O1xuXG4gICAgICBjb25zdCB2aXNlbWVOYW1lcyA9IHRoaXMuX2hvc3QuQW5pbWF0aW9uRmVhdHVyZS5nZXRBbmltYXRpb25CbGVuZE5hbWVzKFxuICAgICAgICBsYXllck5hbWUsXG4gICAgICAgIGFuaW1OYW1lXG4gICAgICApO1xuXG4gICAgICAvLyBNYWtlIHN1cmUgdGhlIG5ldyB2aXNlbWUgaGFzIGFuIGFjdGl2ZSBmcmVlQmxlbmQgd2VpZ2h0XG4gICAgICBpZiAoIWlzVmlzZW1lQWN0aXZlIHx8ICF2aXNlbWVOYW1lcy5pbmNsdWRlcyh2aXNlbWUpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gRmluZCB0aGUgcGVhayB3ZWlnaHQgZm9yIHRoZSB2aXNlbWUgYW5kIHRoZSBhbW91bnQgb2YgdGltZSBpdCBzaG91bGRcbiAgICAgIC8vIHRha2UgdG8gcmVhY2ggaXRcbiAgICAgIGxldCB3ZWlnaHQgPSAxO1xuICAgICAgY29uc3QgZHVyYXRpb24gPSBtYXJrLmR1cmF0aW9uIC8gMTAwMDtcbiAgICAgIGlmIChkdXJhdGlvbiA8IGJsZW5kVGltZSkge1xuICAgICAgICBjb25zdCBsZXJwRmFjdG9yID0gYmxlbmRUaW1lID4gMCA/IGR1cmF0aW9uIC8gYmxlbmRUaW1lIDogMTtcbiAgICAgICAgd2VpZ2h0ID1cbiAgICAgICAgICBvdmVycmlkZVdlaWdodCAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IG92ZXJyaWRlV2VpZ2h0XG4gICAgICAgICAgICA6IE1hdGhVdGlscy5sZXJwKDAsIDEsIGxlcnBGYWN0b3IpO1xuICAgICAgfVxuICAgICAgY29uc3QgYmxlbmRJblRpbWUgPSBNYXRoLm1pbihkdXJhdGlvbiwgYmxlbmRUaW1lKTtcblxuICAgICAgLy8gRmluZCB0aGUgYW1vdW50IGFuZCB0aW1lIHZpc2VtZSB3aWxsIGJlIGhlbGQgZm9yXG4gICAgICBjb25zdCBob2xkVGltZSA9IGR1cmF0aW9uIC0gYmxlbmRUaW1lO1xuXG4gICAgICBpZiAoaG9sZFRpbWUgPCAwKSB7XG4gICAgICAgIC8vIFBlcmZvcm0gaW4gLT4gb3V0IGFuaW1hdGlvblxuICAgICAgICB0aGlzLl9hbmltYXRlU2ltcGxlVmlzZW1lKFxuICAgICAgICAgIGxheWVyTmFtZSxcbiAgICAgICAgICBhbmltTmFtZSxcbiAgICAgICAgICB2aXNlbWUsXG4gICAgICAgICAgd2VpZ2h0LFxuICAgICAgICAgIGJsZW5kSW5UaW1lLFxuICAgICAgICAgIGJsZW5kVGltZSxcbiAgICAgICAgICBlYXNpbmdGblxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgbGVycEZhY3RvciA9XG4gICAgICAgICAgZGVjYXlSYXRlLnNlY29uZHMgPiAwID8gaG9sZFRpbWUgLyBkZWNheVJhdGUuc2Vjb25kcyA6IDE7XG4gICAgICAgIC8vIFBlcmZvcm0gaW4gLT4gaG9sZCAtPiBvdXQgYW5pbWF0aW9uXG4gICAgICAgIGNvbnN0IGRlY2F5V2VpZ2h0ID0gTWF0aFV0aWxzLmxlcnAoXG4gICAgICAgICAgd2VpZ2h0LFxuICAgICAgICAgIHdlaWdodCAqIGRlY2F5UmF0ZS5hbW91bnQsXG4gICAgICAgICAgTWF0aC5taW4oMSwgbGVycEZhY3RvcilcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5fYW5pbWF0ZUhlbGRWaXNlbWUoXG4gICAgICAgICAgbGF5ZXJOYW1lLFxuICAgICAgICAgIGFuaW1OYW1lLFxuICAgICAgICAgIHZpc2VtZSxcbiAgICAgICAgICB3ZWlnaHQsXG4gICAgICAgICAgZGVjYXlXZWlnaHQsXG4gICAgICAgICAgYmxlbmRJblRpbWUsXG4gICAgICAgICAgaG9sZFRpbWUsXG4gICAgICAgICAgYmxlbmRUaW1lLFxuICAgICAgICAgIGVhc2luZ0ZuXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQW5pbWF0ZSBhIHZpc2VtZSBibGVuZCB3ZWlnaHQgdG93YXJkcyBhIHZhbHVlIGFuZCB0aGVuIGJhY2sgdG8gemVyby5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVyTmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRoYXQgY29udGFpbnMgdGhlIHZpc2VtZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGFuaW1OYW1lIC0gTmFtZSBvZiB0aGUgZnJlZWJsZW5kIGFuaW1hdGlvbiB0aGF0IGNvbnRhaW5zXG4gICAqIHRoZSB2aXNlbWUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB2aXNlbWVOYW1lIC0gTmFtZSBvZiB0aGUgYmxlbmQgd2VpZ2h0IHRvIG1hbmlwdWxhdGUuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB3ZWlnaHQgLSBQZWFrIHdlaWdodCB0byBhbmltYXRlIHRvd2FyZHMuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBibGVuZEluVGltZSAtIEFtb3VudCBvZiB0aW1lIGl0IHNob3VsZCB0YWtlIHRvIHJlYWNoIHRoZVxuICAgKiBwZWFrIHdlaWdodC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGJsZW5kT3V0VGltZSAtIEFtb3VudCBvZiB0aW1lIGl0IHNob3VsZCB0YWtlIHRvIGFuaW1hdGUgYmFja1xuICAgKiB0byB6ZXJvIGFmdGVyIHJlYWNoaW5nIHRoZSBwZWFrIHdlaWdodC5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZWFzaW5nRm4gLSBFYXNpbmcgZnVuY3Rpb24gdG8gdXNlIGR1cmluZyBhbmltYXRpb24uXG4gICAqL1xuICBfYW5pbWF0ZVNpbXBsZVZpc2VtZShcbiAgICBsYXllck5hbWUsXG4gICAgYW5pbU5hbWUsXG4gICAgdmlzZW1lTmFtZSxcbiAgICBwZWFrV2VpZ2h0LFxuICAgIGJsZW5kSW5UaW1lLFxuICAgIGJsZW5kT3V0VGltZSxcbiAgICBlYXNpbmdGblxuICApIHtcbiAgICAvLyBBbmltYXRlIHRvd2FyZHMgdGhlIHBlYWsgdmFsdWVcbiAgICBjb25zdCB3ZWlnaHRQcm9taXNlID0gdGhpcy5faG9zdC5BbmltYXRpb25GZWF0dXJlLnNldEFuaW1hdGlvbkJsZW5kV2VpZ2h0KFxuICAgICAgbGF5ZXJOYW1lLFxuICAgICAgYW5pbU5hbWUsXG4gICAgICB2aXNlbWVOYW1lLFxuICAgICAgcGVha1dlaWdodCxcbiAgICAgIGJsZW5kSW5UaW1lLFxuICAgICAgZWFzaW5nRm5cbiAgICApO1xuXG4gICAgLy8gQW5pbWF0ZSBiYWNrIHRvIHplcm8gaWYgdGhlcmUgd2FzIG5vIHdlaWdodCBpbnRlcnJ1cHRpb25cbiAgICB3ZWlnaHRQcm9taXNlLnRoZW4oKCkgPT4ge1xuICAgICAgaWYgKCF3ZWlnaHRQcm9taXNlLmNhbmNlbGVkKSB7XG4gICAgICAgIHRoaXMuX2hvc3QuQW5pbWF0aW9uRmVhdHVyZS5zZXRBbmltYXRpb25CbGVuZFdlaWdodChcbiAgICAgICAgICBsYXllck5hbWUsXG4gICAgICAgICAgYW5pbU5hbWUsXG4gICAgICAgICAgdmlzZW1lTmFtZSxcbiAgICAgICAgICAwLFxuICAgICAgICAgIGJsZW5kT3V0VGltZSxcbiAgICAgICAgICBlYXNpbmdGblxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFuaW1hdGUgYSB2aXNlbWUgYmxlbmQgd2VpZ2h0IHRvd2FyZHMgYSB2YWx1ZSBhbmQgdGhlbiBiYWNrIHRvIHplcm8uXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllck5hbWUgLSBOYW1lIG9mIHRoZSBsYXllciB0aGF0IGNvbnRhaW5zIHRoZSB2aXNlbWUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhbmltTmFtZSAtIE5hbWUgb2YgdGhlIGZyZWVibGVuZCBhbmltYXRpb24gdGhhdCBjb250YWluc1xuICAgKiB0aGUgdmlzZW1lLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdmlzZW1lTmFtZSAtIE5hbWUgb2YgdGhlIGJsZW5kIHdlaWdodCB0byBtYW5pcHVsYXRlLlxuICAgKiBAcGFyYW0ge251bWJlcn0gcGVha1dlaWdodCAtIFBlYWsgd2VpZ2h0IHRvIGFuaW1hdGUgdG93YXJkcy5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGRlY2F5V2VpZ2h0IC0gV2VpZ2h0IHRvIGFuaW1hdGUgdG93YXJkcyBhZnRlciByZWFjaGluZyB0aGVcbiAgICogcGVhayB3ZWlnaHQuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBibGVuZEluVGltZSAtIEFtb3VudCBvZiB0aW1lIGl0IHNob3VsZCB0YWtlIHRvIHJlYWNoIHRoZVxuICAgKiBwZWFrIHdlaWdodC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGhvbGRUaW1lIC0gQW1vdW50IG9mIHRpbWUgaXQgc2hvdWxkIHRha2UgdG8gcmVhY2ggdGhlIGRlY2F5XG4gICAqIHdlaWdodCBhZnRlciB0aGUgcGVhayB3ZWlnaHQgaGFzIGJlZW4gcmVhY2hlZC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGJsZW5kT3V0VGltZSAtIEFtb3VudCBvZiB0aW1lIGl0IHNob3VsZCB0YWtlIHRvIGFuaW1hdGUgYmFja1xuICAgKiB0byB6ZXJvIGFmdGVyIHJlYWNoaW5nIHRoZSBkZWNheSB3ZWlnaHQuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGVhc2luZ0ZuIC0gRWFzaW5nIGZ1bmN0aW9uIHRvIHVzZSBkdXJpbmcgYW5pbWF0aW9uLlxuICAgKi9cbiAgYXN5bmMgX2FuaW1hdGVIZWxkVmlzZW1lKFxuICAgIGxheWVyTmFtZSxcbiAgICBhbmltTmFtZSxcbiAgICB2aXNlbWVOYW1lLFxuICAgIHBlYWtXZWlnaHQsXG4gICAgZGVjYXlXZWlnaHQsXG4gICAgYmxlbmRJblRpbWUsXG4gICAgaG9sZFRpbWUsXG4gICAgYmxlbmRPdXRUaW1lLFxuICAgIGVhc2luZ0ZuXG4gICkge1xuICAgIC8vIEFuaW1hdGUgdG93YXJkcyB0aGUgcGVhayB2YWx1ZVxuICAgIGNvbnN0IHN0YXJ0UHJvbWlzZSA9IHRoaXMuX2hvc3QuQW5pbWF0aW9uRmVhdHVyZS5zZXRBbmltYXRpb25CbGVuZFdlaWdodChcbiAgICAgIGxheWVyTmFtZSxcbiAgICAgIGFuaW1OYW1lLFxuICAgICAgdmlzZW1lTmFtZSxcbiAgICAgIHBlYWtXZWlnaHQsXG4gICAgICBibGVuZEluVGltZSxcbiAgICAgIGVhc2luZ0ZuXG4gICAgKTtcblxuICAgIGF3YWl0IHN0YXJ0UHJvbWlzZTtcblxuICAgIGlmICghc3RhcnRQcm9taXNlLmNhbmNlbGVkKSB7XG4gICAgICAvLyBBbmltYXRlIHRvd2FyZHMgdGhlIGRlY2F5IHZhbHVlIGlmIHRoZXJlIHdhcyBubyB3ZWlnaHQgaW50ZXJydXB0aW9uXG4gICAgICBjb25zdCBob2xkUHJvbWlzZSA9IHRoaXMuX2hvc3QuQW5pbWF0aW9uRmVhdHVyZS5zZXRBbmltYXRpb25CbGVuZFdlaWdodChcbiAgICAgICAgbGF5ZXJOYW1lLFxuICAgICAgICBhbmltTmFtZSxcbiAgICAgICAgdmlzZW1lTmFtZSxcbiAgICAgICAgZGVjYXlXZWlnaHQsXG4gICAgICAgIGhvbGRUaW1lLFxuICAgICAgICBlYXNpbmdGblxuICAgICAgKTtcblxuICAgICAgYXdhaXQgaG9sZFByb21pc2U7XG5cbiAgICAgIGlmICghaG9sZFByb21pc2UuY2FuY2VsZWQpIHtcbiAgICAgICAgLy8gQW5pbWF0ZSBiYWNrIHRvIHplcm8gaWYgdGhlcmUgd2FzIG5vIHdlaWdodCBpbnRlcnJ1cHRpb25cbiAgICAgICAgdGhpcy5faG9zdC5BbmltYXRpb25GZWF0dXJlLnNldEFuaW1hdGlvbkJsZW5kV2VpZ2h0KFxuICAgICAgICAgIGxheWVyTmFtZSxcbiAgICAgICAgICBhbmltTmFtZSxcbiAgICAgICAgICB2aXNlbWVOYW1lLFxuICAgICAgICAgIDAsXG4gICAgICAgICAgYmxlbmRPdXRUaW1lLFxuICAgICAgICAgIGVhc2luZ0ZuXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgYW5kIHNldHMgdGhlIGFtb3VudCBvZiB0aW1lIGluIHNlY29uZHMgdG8gbmVnYXRpdmVseSBvZmZzZXQgc3BlZWNobWFya1xuICAgKiBlbWlzc2lvbiBieS5cbiAgICpcbiAgICogQHR5cGUge251bWJlcn1cbiAgICovXG4gIGdldCB2aXNlbWVMZWFkVGltZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fdmlzZW1lTGVhZFRpbWU7XG4gIH1cblxuICBzZXQgdmlzZW1lTGVhZFRpbWUoc2Vjb25kcykge1xuICAgIHRoaXMuX3Zpc2VtZUxlYWRUaW1lID0gc2Vjb25kcztcblxuICAgIGlmICh0aGlzLl9ob3N0LlRleHRUb1NwZWVjaEZlYXR1cmUpIHtcbiAgICAgIHRoaXMuX2hvc3QuVGV4dFRvU3BlZWNoRmVhdHVyZS5zcGVlY2htYXJrT2Zmc2V0ID0gLXNlY29uZHM7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFN0YXJ0IGtlZXBpbmcgdHJhY2sgb2YgYW4gYW5pbWF0aW9uIGxheWVyIHRoYXQgb3ducyBhIGZyZWVCbGVuZCBhbmltYXRpb25cbiAgICogd2l0aCBibGVuZFdlaWdodHMgY29ycmVzcG9uZGluZyB0byB2aXNlbWVzLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGF5ZXJOYW1lIC0gTmFtZSBvZiB0aGUgbGF5ZXIgdG8ga2VlcCB0cmFjayBvZi5cbiAgICogQHBhcmFtIHtPYmplY3Q9fSBvcHRpb25zIC0gT3B0aW9ucyBmb3IgdGhlIGxheWVyLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuYW5pbWF0aW9uPSd2aXNlbWVzJ10gLSBOYW1lIG9mIHRoZSBhbmltYXRpb24gb24gdGhlXG4gICAqIGxheWVyIHRoYXQgd2lsbCBiZSBwbGF5ZWQgZHVyaW5nIHNwZWVjaC4gVGhpcyBhbmltYXRpb24gbXVzdCBiZSBvZiB0eXBlXG4gICAqIGZyZWVCbGVuZC5cbiAgICogQHBhcmFtIHtPYmplY3Q9fSBkZWNheVJhdGVcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtkZWNheVJhdGUuYW1vdW50PTAuNV0gLSBUaGUgcGVyY2VudGFnZSB0byBkZWNyZWFzZSB0aGUgdmlzZW1lJ3NcbiAgICogcGVhayB2YWx1ZSBieSBvdmVyIHRpbWUgb25jZSB0aGUgcGVhayB2YWx1ZSBoYXMgYmVlbiByZWFjaGVkLlxuICAgKiBAcGFyYW0ge251bWJlcn0gW2RlY2F5UmF0ZS5zZWNvbmRzPTAuNV0gLSBUaGUgYW1vdW50IG9mIHRpbWUgaW4gc2Vjb25kcyB0b1xuICAgKiBkZWNyZWFzZSB0aGUgdmlzZW1lJ3Mgd2VpZ2h0IG9uY2UgaXQgaGFzIHJlYWNoZWQgaXRzIHBlYWsgdmFsdWUuXG4gICAqIEBwYXJhbSB7bnVtYmVyPX0gW29wdGlvbnMuYmxlbmRUaW1lPVtMaXBzeW5jRmVhdHVyZS5ERUZBVUxUX0xBWUVSX09QVElPTlMuYmxlbmRUaW1lXXtAbGluayBMaXBzeW5jRmVhdHVyZSNERUZBVUxUX0xBWUVSX09QVElPTlMjYmxlbmRUaW1lfV0gLVxuICAgKiBEZWZhdWx0IGFtb3VudCBvZiB0aW1lIHRvIHVzZSB3aGVuIG1hbmlwdWxhdGluZyBhbmltYXRpb24gYmxlbmRXZWlnaHRzLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb3B0aW9ucy5lYXNpbmdGbiAtIERlZmF1bHQgZWFzaW5nIGZ1bmN0aW9uIHRvIHVzZSB3aGVuXG4gICAqIG1hbmlwdWxhdGluZyBhbmltYXRpb24gYmxlbmRXZWlnaHRzLlxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnMudmlzZW1lTWFwPURlZmF1bHRWaXNlbWVNYXBdIC0gT2JqZWN0IGNvbnRhaW5pbmcga2V5L3ZhbHVlIHBhaXJzIG9mXG4gICAqIFBvbGx5IHZpc2VtZSBuYW1lcyBtYXBwZWQgdG8gb2JqZWN0cyBjb250YWluaW5nIHRoZSBuYW1lIG9mIHRoZSBjb3JyZXNwb25kaW5nXG4gICAqIGFuaW1hdGlvbiBibGVuZFdlaWdodCBhbmQgYW55IG90aGVyIGFuaW1hdGlvbiBvcHRpb25zIHRvIHVzZSBzdWNoIGFzIHZpc2VtZVxuICAgKiBzcGVjaWZpYyBibGVuZCB0aW1lcyBhbmQgZWFzaW5nIGZ1bmN0aW9ucy5cbiAgICovXG4gIHJlZ2lzdGVyVmlzZW1lTGF5ZXIoXG4gICAgbGF5ZXJOYW1lLFxuICAgIHtcbiAgICAgIGFuaW1hdGlvbiA9ICd2aXNlbWVzJyxcbiAgICAgIGRlY2F5UmF0ZSA9IHthbW91bnQ6IDAuNSwgc2Vjb25kczogMC41fSxcbiAgICAgIGJsZW5kVGltZSA9IExpcHN5bmNGZWF0dXJlLkRFRkFVTFRfTEFZRVJfT1BUSU9OUy5ibGVuZFRpbWUsXG4gICAgICBlYXNpbmdGbixcbiAgICAgIHZpc2VtZU1hcCA9IERlZmF1bHRWaXNlbWVNYXAsXG4gICAgfSA9IHt9XG4gICkge1xuICAgIC8vIFJlZ2lzdGVyIHRoZSBsYXllciBhbmQgYW5pbWF0aW9uXG4gICAgdGhpcy5yZWdpc3RlckxheWVyKGxheWVyTmFtZSwge1xuICAgICAgZGVjYXlSYXRlLFxuICAgICAgYmxlbmRUaW1lLFxuICAgICAgZWFzaW5nRm4sXG4gICAgICBhbmltYXRpb25zOiB7W2FuaW1hdGlvbl06IHt2aXNlbWVNYXB9fSxcbiAgICB9KTtcbiAgICB0aGlzLl92aXNlbWVMYXllcnNbbGF5ZXJOYW1lXSA9IGFuaW1hdGlvbjtcblxuICAgIC8vIFZhbGlkYXRlIHRoZSB2aXNlbWUgYW5pbWF0aW9uXG4gICAgdGhpcy5fcmVnaXN0ZXJWaXNlbWVBbmltYXRpb24obGF5ZXJOYW1lLCBhbmltYXRpb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0YXJ0IGtlZXBpbmcgdHJhY2sgb2YgYW4gYW5pbWF0aW9uIGxheWVyIHRoYXQgY29udGFpbnMgYSBsb29waW5nIGFuaW1hdGlvblxuICAgKiB0byBiZSBwbGF5ZWQgZHVyaW5nIHNwZWVjaC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVyTmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRvIGtlZXAgdHJhY2sgb2YuXG4gICAqIEBwYXJhbSB7T2JqZWN0PX0gb3B0aW9ucyAtIE9wdGlvbnMgZm9yIHRoZSBsYXllci5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmFuaW1hdGlvbj0nc3RhbmRfdGFsayddIC0gTmFtZSBvZiB0aGUgYW5pbWF0aW9uIG9uIHRoZVxuICAgKiBsYXllciB0aGF0IHdpbGwgYmUgcGxheWVkIGR1cmluZyBzcGVlY2guXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5ibGVuZFRpbWU9W0xpcHN5bmNGZWF0dXJlLkRFRkFVTFRfTEFZRVJfT1BUSU9OUy5ibGVuZFRpbWVde0BsaW5rIExpcHN5bmNGZWF0dXJlI0RFRkFVTFRfTEFZRVJfT1BUSU9OUyNibGVuZFRpbWV9XSAtXG4gICAqIERlZmF1bHQgYW1vdW50IG9mIHRpbWUgdG8gdXNlIHdoZW4gbWFuaXB1bGF0aW5nIHRoZSBsYXllcidzIHdlaWdodHMuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvcHRpb25zLmVhc2luZ0ZuIC0gRGVmYXVsdCBlYXNpbmcgZnVuY3Rpb24gdG8gdXNlIHdoZW5cbiAgICogbWFuaXB1bGF0aW5nIHRoZSBsYXllcidzIHdlaWdodHMuXG4gICAqL1xuICByZWdpc3RlclRhbGtpbmdMYXllcihcbiAgICBsYXllck5hbWUsXG4gICAge1xuICAgICAgYW5pbWF0aW9uID0gJ3N0YW5kX3RhbGsnLFxuICAgICAgYmxlbmRUaW1lID0gTGlwc3luY0ZlYXR1cmUuREVGQVVMVF9MQVlFUl9PUFRJT05TLmJsZW5kVGltZSxcbiAgICAgIGVhc2luZ0ZuLFxuICAgIH0gPSB7fVxuICApIHtcbiAgICAvLyBSZWdpc3RlciB0aGUgbGF5ZXIgYW5kIGFuaW1hdGlvblxuICAgIHRoaXMucmVnaXN0ZXJMYXllcihsYXllck5hbWUsIHtcbiAgICAgIGJsZW5kVGltZSxcbiAgICAgIGVhc2luZ0ZuLFxuICAgICAgYW5pbWF0aW9uczoge1thbmltYXRpb25dOiB7fX0sXG4gICAgfSk7XG4gICAgdGhpcy5fdGFsa2luZ0xheWVyc1tsYXllck5hbWVdID0gYW5pbWF0aW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBuYW1lc3BhY2UgdG8gdGhlIGhvc3Qgd2l0aCB0aGUgbmFtZSBvZiB0aGUgZmVhdHVyZSB0byBjb250YWluIHByb3BlcnRpZXNcbiAgICogYW5kIG1ldGhvZHMgZnJvbSB0aGUgZmVhdHVyZSB0aGF0IHVzZXJzIG9mIHRoZSBob3N0IG5lZWQgYWNjZXNzIHRvLlxuICAgKlxuICAgKiBAc2VlIExpcHN5bmNGZWF0dXJlXG4gICAqL1xuICBpbnN0YWxsQXBpKCkge1xuICAgIC8qKlxuICAgICAqIEBpbm5lclxuICAgICAqIEBuYW1lc3BhY2UgTGlwc3luY0ZlYXR1cmVcbiAgICAgKi9cbiAgICBjb25zdCBhcGkgPSBzdXBlci5pbnN0YWxsQXBpKCk7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyb2YgTGlwc3luY0ZlYXR1cmVcbiAgICAgKiBAbmFtZSByZWdpc3RlckxheWVyXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBzZWUgTWFuYWdlZEFuaW1hdGlvbkxheWVySW50ZXJmYWNlI3JlZ2lzdGVyTGF5ZXJcbiAgICAgKi9cblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXJvZiBMaXBzeW5jRmVhdHVyZVxuICAgICAqIEBuYW1lIHJlZ2lzdGVyQW5pbWF0aW9uXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBzZWUgTWFuYWdlZEFuaW1hdGlvbkxheWVySW50ZXJmYWNlI3JlZ2lzdGVyQW5pbWF0aW9uXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyb2YgTGlwc3luY0ZlYXR1cmVcbiAgICAgKiBAbmFtZSBzZXRMYXllcldlaWdodHNcbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQHNlZSBNYW5hZ2VkQW5pbWF0aW9uTGF5ZXJJbnRlcmZhY2Ujc2V0TGF5ZXJXZWlnaHRzXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyb2YgTGlwc3luY0ZlYXR1cmVcbiAgICAgKiBAbmFtZSBlbmFibGVcbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQHNlZSBNYW5hZ2VkQW5pbWF0aW9uTGF5ZXJJbnRlcmZhY2UjZW5hYmxlXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyb2YgTGlwc3luY0ZlYXR1cmVcbiAgICAgKiBAbmFtZSBkaXNhYmxlXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBzZWUgTWFuYWdlZEFuaW1hdGlvbkxheWVySW50ZXJmYWNlI2Rpc2FibGVcbiAgICAgKi9cblxuICAgIE9iamVjdC5hc3NpZ24oYXBpLCB7XG4gICAgICAvKipcbiAgICAgICAqIEBtZW1iZXJvZiBMaXBzeW5jRmVhdHVyZVxuICAgICAgICogQGluc3RhbmNlXG4gICAgICAgKiBAbWV0aG9kXG4gICAgICAgKiBAc2VlIGNvcmUvTGlwc3luY0ZlYXR1cmUjcmVnaXN0ZXJWaXNlbWVMYXllclxuICAgICAgICovXG4gICAgICByZWdpc3RlclZpc2VtZUxheWVyOiB0aGlzLnJlZ2lzdGVyVmlzZW1lTGF5ZXIuYmluZCh0aGlzKSxcbiAgICAgIC8qKlxuICAgICAgICogQG1lbWJlcm9mIExpcHN5bmNGZWF0dXJlXG4gICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAqIEBtZXRob2RcbiAgICAgICAqIEBzZWUgY29yZS9MaXBzeW5jRmVhdHVyZSNyZWdpc3RlclRhbGtpbmdMYXllclxuICAgICAgICovXG4gICAgICByZWdpc3RlclRhbGtpbmdMYXllcjogdGhpcy5yZWdpc3RlclRhbGtpbmdMYXllci5iaW5kKHRoaXMpLFxuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlcm9mIExpcHN5bmNGZWF0dXJlXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQG5hbWUgdmlzZW1lTGVhZFRpbWVcbiAgICAgKiBAc2VlIGNvcmUvTGlwc3luY0ZlYXR1cmUjdmlzZW1lTGVhZFRpbWVcbiAgICAgKi9cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoYXBpLCAndmlzZW1lTGVhZFRpbWUnLCB7XG4gICAgICBnZXQ6ICgpID0+IHRoaXMudmlzZW1lTGVhZFRpbWUsXG4gICAgICBzZXQ6IHNlY29uZHMgPT4ge1xuICAgICAgICB0aGlzLnZpc2VtZUxlYWRUaW1lID0gc2Vjb25kcztcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gYXBpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IExpcHN5bmNGZWF0dXJlO1xuZXhwb3J0IHtEZWZhdWx0VmlzZW1lTWFwfTtcbiIsIi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXG4vLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxuXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtY2xhc3Nlcy1wZXItZmlsZSAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tZW1wdHkgKi9cbmltcG9ydCBUZXh0VG9TcGVlY2hGZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlIGZyb20gJ2NvcmUvYXdzcGFjay9UZXh0VG9TcGVlY2hGZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlJztcblxuLyoqXG4gKiBDbGFzcyBmYWN0b3J5IGludGVyZmFjZSBmb3IgdGhhdCByZWdpc3RlcnMgY2FsbGJhY2sgbWV0aG9kIHdoZW4gYSBzc21sIHNwZWVjaG1hcmsgZXZlbnQgaXMgZW1pdHRlZC5cbiAqXG4gKiBAaW50ZXJmYWNlXG4gKiBAZXh0ZW5kcyBUZXh0VG9TcGVlY2hGZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlXG4gKi9cbmNsYXNzIFNTTUxTcGVlY2htYXJrSW50ZXJmYWNlIGV4dGVuZHMgVGV4dFRvU3BlZWNoRmVhdHVyZURlcGVuZGVudEludGVyZmFjZSB7XG4gIC8qKlxuICAgKiBXaGVuIHNzbWwgZXZlbnRzIGFyZSBjYXVnaHQsIHRoaXMgd2lsbCB0cnkgdG8gcGFyc2UgdGhlIHNwZWVjaCBtYXJrIHZhbHVlIGFuZCBleGVjdXRlIGFueSBmdW5jdGlvbiB3aGljaCBtZWV0cyBjcml0ZXJpYSBkZWZpbmVkIGluIHRoZSB2YWx1ZS5cbiAgICogU3BlZWNoIG1hcmsgdmFsdWUgd2lsbCBiZSB0cmVhdGVkIGFzIHN0cmluZ2lmaWVkIGpzb24gZm9ybWF0IGNvbnRhaW5pbmcgcmVxdWlyZWQgZmVhdHVyZSBuYW1lLCBmdW5jdGlvbiBuYW1lIGFuZCBhcmd1bWVudCBhcnJheSB0byBwYXNzIGluLlxuICAgKiBFeGFtcGxlIHNwZWVjaCBtYXJrIHZhbHVlIG1pZ2h0IGxvb2sgbGlrZTogJ3tcImZlYXR1cmVcIjpcIkdlc3R1cmVGZWF0dXJlXCIsIFwibWV0aG9kXCI6XCJzd2l0Y2hUb0dlc3R1cmVcIiwgXCJhcmdzXCI6W1wiZ2VucmljQVwiLCAwLjVdfSdcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IGV2ZW50IC0gRXZlbnQgZGF0YSBwYXNzZWQgZnJvbSB0aGUgc3BlZWNoLlxuICAgKiBAcGFyYW0ge09iamVjdH0gZXZlbnQubWFyayAtIFNwZWVjaG1hcmsgb2JqZWN0LlxuICAgKi9cbiAgX29uU3NtbCh7bWFya30pIHt9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBjbGFzcyB0aGF0IGltcGxlbWVudHMge0BsaW5rIFNTTUxTcGVlY2htYXJrSW50ZXJmYWNlfVxuICAgKiBhbmQgZXh0ZW5kcyBhIHNwZWNpZmllZCBiYXNlIGNsYXNzLlxuICAgKlxuICAgKiBAcGFyYW0ge0NsYXNzfSBCYXNlQ2xhc3MgLSBUaGUgY2xhc3MgdG8gZXh0ZW5kLlxuICAgKlxuICAgKiBAcmV0dXJuIHtDbGFzc30gQSBjbGFzcyB0aGF0IGV4dGVuZHMgYEJhc2VDbGFzc2AgYW5kIGltcGxlbWVudHMge0BsaW5rIFNTTUxTcGVlY2htYXJrSW50ZXJmYWNlfS5cbiAgICovXG4gIHN0YXRpYyBNaXhpbihCYXNlQ2xhc3MpIHtcbiAgICBjb25zdCBQYXJlbnRDbGFzcyA9IFRleHRUb1NwZWVjaEZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2UuTWl4aW4oQmFzZUNsYXNzKTtcbiAgICBjb25zdCBTU01MU3BlZWNoTWFya01peGluID0gY2xhc3MgZXh0ZW5kcyBQYXJlbnRDbGFzcyB7XG4gICAgICBfb25Tc21sKHttYXJrfSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHtmZWF0dXJlLCBtZXRob2QsIGFyZ3N9ID0gSlNPTi5wYXJzZShtYXJrLnZhbHVlKTtcbiAgICAgICAgICBpZiAodGhpcy5jb25zdHJ1Y3Rvci5uYW1lID09PSBmZWF0dXJlKSB7XG4gICAgICAgICAgICBjb25zdCBjYWxsYmFjayA9IHRoaXNbbWV0aG9kXTtcbiAgICAgICAgICAgIGlmIChjYWxsYmFjayAmJiB0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkodGhpcywgYXJncylcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUud2FybihgRnVuY3Rpb24gJHttZXRob2R9IGRvZXMgbm90IGV4aXN0IHdpdGhpbiBmZWF0dXJlICR7ZmVhdHVyZX1gKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaChlKSB7fVxuICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gU1NNTFNwZWVjaE1hcmtNaXhpbjtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBTU01MU3BlZWNobWFya0ludGVyZmFjZTtcbiIsIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVC0wXG5pbXBvcnQgTWFuYWdlZEFuaW1hdGlvbkxheWVySW50ZXJmYWNlIGZyb20gJy4vYW5pbXBhY2svTWFuYWdlZEFuaW1hdGlvbkxheWVySW50ZXJmYWNlJztcbmltcG9ydCBTU01MU3BlZWNobWFya0ludGVyZmFjZSBmcm9tICcuL2F3c3BhY2svU1NNTFNwZWVjaG1hcmtJbnRlcmZhY2UnO1xuaW1wb3J0IEFic3RyYWN0SG9zdEZlYXR1cmUgZnJvbSAnLi9BYnN0cmFjdEhvc3RGZWF0dXJlJztcbmltcG9ydCBEZWZlcnJlZCBmcm9tICcuL0RlZmVycmVkJztcbmltcG9ydCBVdGlscyBmcm9tICcuL1V0aWxzJztcblxuY29uc3QgRGVmYXVsdEdlc3R1cmVXb3JkcyA9IHtcbiAgYmlnOiBbXG4gICAgJ2FkZCcsXG4gICAgJ2Fib3ZlJyxcbiAgICAnYXV0aG9yaXR5JyxcbiAgICAnYmlnJyxcbiAgICAnY292ZXInLFxuICAgICdmdWxsJyxcbiAgICAnZmx5JyxcbiAgICAnZ3JvdycsXG4gICAgJ2dyb3d0aCcsXG4gICAgJ2hpZ2gnLFxuICAgICdodWdlJyxcbiAgICAnaW5jcmVhc2UnLFxuICAgICdtYWpvcicsXG4gICAgJ21ham9yaXR5JyxcbiAgICAnbGFyZ2UnLFxuICAgICdsZWFkZXInLFxuICAgICdsb3QnLFxuICAgICdyYWlzZScsXG4gICAgJ3Jpc2UnLFxuICAgICd0YWxsJyxcbiAgXSxcbiAgaGVhcnQ6IFtcbiAgICAnYWNjZXB0JyxcbiAgICAnYWRtaXQnLFxuICAgICdiZWxpZXZlJyxcbiAgICAnY2FyZScsXG4gICAgJ2ZlZWxpbmcnLFxuICAgICdmZWVsJyxcbiAgICAnZnJpZW5kJyxcbiAgICAnZ3JhdGVmdWwnLFxuICAgICdoYXBweScsXG4gICAgJ2hlYXJ0JyxcbiAgICAnaHVtYW4nLFxuICAgICdwYWluJyxcbiAgICAnc2F2ZScsXG4gICAgJ3NhZmUnLFxuICAgICdraW5kJyxcbiAgICAnbG92ZScsXG4gIF0sXG4gIGluOiBbXG4gICAgJ2luY2x1ZGUnLFxuICAgICdpbmNsdWRpbmcnLFxuICAgICdpbnNpZGUnLFxuICAgICdpbnRvJyxcbiAgICAnbm93JyxcbiAgICAnbmVhcicsXG4gICAgJ25lYXJlc3QnLFxuICAgICdjbG9zZXN0JyxcbiAgICAndGhlcmVpbicsXG4gICAgJ3dpdGhpbicsXG4gIF0sXG4gIG1hbnk6IFtcbiAgICAnYWxsJyxcbiAgICAnYWx3YXlzJyxcbiAgICAnYW55JyxcbiAgICAnYW55b25lJyxcbiAgICAnYW1vbmcnLFxuICAgICdhcmVhJyxcbiAgICAnYXJvdW5kJyxcbiAgICAnYmVhdXRpZnVsJyxcbiAgICAnZW50aXJlJyxcbiAgICAnZW52aXJvbm1lbnQnLFxuICAgICdlbnZpcm9ubWVudHMnLFxuICAgICdlbnZpcm9ubWVudGFsJyxcbiAgICAnZXZlcnlib2R5JyxcbiAgICAnZXZlcnlvbmUnLFxuICAgICdldmVyeXRoaW5nJyxcbiAgICAnYXVkaWVuY2UnLFxuICAgICd0b3RhbCcsXG4gICAgJ2dyb3VwJyxcbiAgICAnZ3JvdXBzJyxcbiAgICAnbWlsbGlvbicsXG4gICAgJ21pbGxpb25zJyxcbiAgICAnb3RoZXJzJyxcbiAgICAnYmlsbGlvbicsXG4gICAgJ2JpbGxpb25zJyxcbiAgICAnaHVuZHJlZCcsXG4gICAgJ2h1bmRyZWRzJyxcbiAgICAnbWFueScsXG4gICAgJ3Rob3VzYW5kJyxcbiAgICAndGhvdXNhbmRzJyxcbiAgICAnd29ybGQnLFxuICAgICd3b3JsZHMnLFxuICAgICdvdXRzaWRlJyxcbiAgICAncmV2ZWFsJyxcbiAgXSxcbiAgbW92ZW1lbnQ6IFtcbiAgICAnYXdheScsXG4gICAgJ2Fjcm9zcycsXG4gICAgJ2FoZWFkJyxcbiAgICAnYWxvbmcnLFxuICAgICdmYXInLFxuICAgICdmYXN0JyxcbiAgICAnZm9sbG93JyxcbiAgICAnZ28nLFxuICAgICdsZWF2ZScsXG4gICAgJ21vdmUnLFxuICAgICdtb3ZlbWVudCcsXG4gICAgJ3Rocm91Z2gnLFxuICAgICd0aHJvdWdob3V0JyxcbiAgICAndG93YXJkJyxcbiAgICAndHJhdmVsJyxcbiAgICAndHVybmVkJyxcbiAgICAncGFzc2VkJyxcbiAgXSxcbiAgb25lOiBbXG4gICAgJ3NpbmdsZScsXG4gICAgJ29uZScsXG4gICAgJ29uY2UnLFxuICAgICdmaXJzdCcsXG4gICAgJ2ZpcnN0bHknLFxuICAgICdvbmx5JyxcbiAgICAnc29sbycsXG4gICAgJ3dhcm5lZCcsXG4gICAgJ3RydWx5JyxcbiAgICAndXAnLFxuICAgICdhbG9uZScsXG4gIF0sXG4gIGFnZ3Jlc3NpdmU6IFtcbiAgICAncG93ZXInLFxuICAgICdwb3dlcnMnLFxuICAgICdwb3dlcmZ1bCcsXG4gICAgJ2Fzc2VydCcsXG4gICAgJ2Fzc2VydGl2ZScsXG4gICAgJ3N0cm9uZycsXG4gICAgJ3N0cm9uZ2VyJyxcbiAgICAnc3Ryb25nZXN0JyxcbiAgICAnc3RyZW5ndGgnLFxuICAgICdmbGV4JyxcbiAgICAnZGFuZycsXG4gICAgJ2RhbW4nLFxuICAgICdkYW1uaXQnLFxuICAgICdkYXJuJyxcbiAgICAnc2h1Y2tzJyxcbiAgICAnZG9oJyxcbiAgICAnZHJhdCcsXG4gICAgJ2FuZ3J5JyxcbiAgICAnYW5ncmllcicsXG4gICAgJ2FuZ3JpZXN0JyxcbiAgICAnYWdncmVzc2l2ZScsXG4gICAgJ2Fubm95ZWQnLFxuICAgICdhbm5veWluZycsXG4gICAgJ2F0dGFjaycsXG4gICAgJ2F0dGFja2luZycsXG4gICAgJ29mZmVuc2UnLFxuICAgICdvZmZlbnNpdmUnLFxuICAgICdiYXR0bGUnLFxuICBdLFxuICB5b3U6IFsneW91JywgJ3lhbGwnLCBcInknYWxsXCIsICd5b3VyJywgJ3lvdXJzJywgJ3Rob3UnLCAndGh5J10sXG4gIGRlZmVuc2U6IFtcbiAgICAnZGVmZW5zZScsXG4gICAgJ2ZlYXInLFxuICAgICdyZXB1bHNlZCcsXG4gICAgJ3NjYXJlZCcsXG4gICAgJ3NjYXJ5JyxcbiAgICAnc2NhcmllcicsXG4gICAgJ3NjYXJpZXN0JyxcbiAgICAnZmVhcmZ1bCcsXG4gICAgJ2FmcmFpZCcsXG4gICAgJ2Nvd2VyJyxcbiAgICAnY293ZXJzJyxcbiAgICAnY293ZXJpbmcnLFxuICAgICdoaWRlb3VzJyxcbiAgICAnZG9vbWVkJyxcbiAgICAndGVycmlmaWVkJyxcbiAgICAndGVycmlmeScsXG4gICAgJ3RlcnJpZnlpbmcnLFxuICAgICd0ZXJyaWZpZXMnLFxuICAgICdzcG9va3knLFxuICAgICdzcG9va2llcicsXG4gICAgJ3Nwb29raWVzdCcsXG4gIF0sXG4gIHdhdmU6IFtcbiAgICAnaGVsbG8nLFxuICAgICdoaScsXG4gICAgJ2hpeWEnLFxuICAgICdob3dkeScsXG4gICAgJ3dlbGNvbWUnLFxuICAgICdhbG9oYScsXG4gICAgJ2hleWEnLFxuICAgICdoZXknLFxuICAgICdieWUnLFxuICAgICdnb29kYnllJyxcbiAgICAnaG9sYScsXG4gICAgJ2FkaW9zJyxcbiAgICAnY2hhbycsXG4gIF0sXG4gIHNlbGY6IFsnbXknLCAnSScsICdteXNlbGYnLCAnc2VsZicsIFwiSSd2ZVwiLCAnSXZlJywgJ21lJywgJ21pbmUnLCAnb3duJ10sXG59O1xuXG4vKipcbiAqIEdlc3R1cmUgYWxsb3dzIHlvdSB0byBwbGF5IGFuaW1hdGlvbnMgb24gZGVtYW5kIG9uIG9uZSBvciBtb3JlIGxheWVycyBmcm9tIHNjcmlwdFxuICogb3Igc3NtbC4gSWYgZ2VzdHVyZSBpcyBwbGF5ZWQgdGhhdCBpcyBhIFF1ZXVlU3RhdGUsIHRoZSBxdWV1ZSB3aWxsIGF1dG9tYXRpY2FsbHlcbiAqIGJlIHByb2dyZXNzZWQgYWZ0ZXIgYSBnaXZlbiBob2xkIHRpbWUgaWYgYSBsb29waW5nIHF1ZXVlZCBzdGF0ZSBpcyByZWFjaGVkLiBHZXN0dXJlXG4gKiBsYXllcnMgY2FuIG9wdGlvbmFsbHkgYmUgYXV0b21hdGljYWxseSBkaXNhYmxlZCB3aGVuIG5vIGdlc3R1cmUgYW5pbWF0aW9uIGlzXG4gKiBpbiBwcm9ncmVzcy5cbiAqXG4gKiBAZXh0ZW5kcyBBYnN0cmFjdEhvc3RGZWF0dXJlXG4gKiBAaW1wbGVtZW50cyBTU01MU3BlZWNobWFya0ludGVyZmFjZVxuICogQGltcGxlbWVudHMgTWFuYWdlZEFuaW1hdGlvbkxheWVySW50ZXJmYWNlXG4gKi9cbmNsYXNzIEdlc3R1cmVGZWF0dXJlIGV4dGVuZHMgQWJzdHJhY3RIb3N0RmVhdHVyZS5taXgoXG4gIFNTTUxTcGVlY2htYXJrSW50ZXJmYWNlLk1peGluLFxuICBNYW5hZ2VkQW5pbWF0aW9uTGF5ZXJJbnRlcmZhY2UuTWl4aW5cbikge1xuICAvKipcbiAgICogQGNvbnN0cnVjdG9yXG4gICAqXG4gICAqIEBwYXJhbSB7Y29yZS9Ib3N0T2JqZWN0fSBob3N0IC0gSG9zdCBvYmplY3QgdGhhdCBvd25zIHRoZSBmZWF0dXJlLlxuICAgKiBAcGFyYW0ge09iamVjdD19IG9wdGlvbnMgLSBPcHRpb25hbCBvcHRpb25zIGZvciB0aGUgZmVhdHVyZS5cbiAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLmhvbGRUaW1lID0gM10gLSBBbW91bnQgb2YgdGltZSBpbiBzZWNvbmRzIHRoYXQgbXVzdFxuICAgKiBlbGFwc2UgYmVmb3JlIGFkdmFuY2luZyBhIGdlc3R1cmUgdGhhdCdzIGEge0BsaW5rIFF1ZXVlU3RhdGV9IHdoZW4gdGhlIGN1cnJlbnRcbiAgICogc3RhdGUgaW4gdGhlIHF1ZXVlIGlzIHNldCB0byBsb29wIGluZmluaXRlbHkuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5taW5pbXVtSW50ZXJ2YWwgPSAwLjI1XSAtIFRoZSBtaW5pbXVtIGFtb3VudCBvZiB0aW1lXG4gICAqIGluIHNlY29uZHMgdGhhdCBtdXN0IGVsYXBzZSBiZWZvcmUgYW5vdGhlciBnZXN0dXJlIGNhbiBiZSBwbGF5ZWQuXG4gICAqIEBwYXJhbSAge09iamVjdH0gbGF5ZXJzIC0gQW4gb2JqZWN0IHRoYXQgbWFwcyBsYXllciBuYW1lcyB0byBsYXllciBvcHRpb25zLlxuICAgKiBUaGVzZSBhcmUgdGhlIGxheWVycyB0aGF0IHdpbGwgYmUgcmVnaXN0ZXJlZCBhcyB0cmFja2VkIGdlc3R1cmUgbGF5ZXJzLiBTZWVcbiAgICoge0BsaW5rIE1hbmFnZWRBbmltYXRpb25MYXllckludGVyZmFjZSNyZWdpc3RlckxheWVyfSBmb3IgbW9yZSBpbmZvcm1hdGlvblxuICAgKiBvbiBleHBlY3RlZCBmb3JtYXQgZm9yIGVhY2ggbGF5ZXIgb3B0aW9ucyBvYmplY3QuXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihob3N0LCB7aG9sZFRpbWUgPSAzLCBtaW5pbXVtSW50ZXJ2YWwgPSAxLCBsYXllcnMgPSB7fX0gPSB7fSkge1xuICAgIHN1cGVyKGhvc3QpO1xuXG4gICAgdGhpcy5ob2xkVGltZSA9IGhvbGRUaW1lO1xuICAgIHRoaXMubWluaW11bUludGVydmFsID0gbWluaW11bUludGVydmFsO1xuXG4gICAgLy8gUmVnaXN0ZXIgdGhlIGdlc3R1cmUgbGF5ZXJzXG4gICAgT2JqZWN0LmVudHJpZXMobGF5ZXJzKS5mb3JFYWNoKChbbmFtZSwgb3B0aW9ucyA9IHt9XSkgPT4ge1xuICAgICAgdGhpcy5yZWdpc3RlckxheWVyKG5hbWUsIG9wdGlvbnMpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIHZhbGlkIGhvbGQgdGltZSB2YWx1ZS4gSWYgaG9sZCB0aW1lIGlzbid0IGRlZmluZWQgZm9yIHRoZSBhbmltYXRpb24sXG4gICAqIHRyeSB0byB1c2UgdGhlIGhvbGQgdGltZSBmb3IgdGhlIGxheWVyLiBJZiB0aGF0J3Mgbm90IGRlZmluZWQsIGZhbGwgYmFjayB0b1xuICAgKiB0aGUgaG9sZCB0aW1lIGZvciB0aGUgZmVhdHVyZS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IGxheWVyIC0gTWFuYWdlZCBsYXllciBvcHRpb25zIG9iamVjdC5cbiAgICogQHBhcmFtIHtPYmplY3R9IGFuaW1hdGlvbiAtIE1hbmFnZWQgYW5pbWF0aW9uIG9wdGlvbnMgb2JqZWN0LlxuICAgKlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgX2dldEhvbGRUaW1lKGxheWVyLCBhbmltYXRpb24pIHtcbiAgICBjb25zdCBsYXllckhvbGRUaW1lID1cbiAgICAgIGxheWVyLmhvbGRUaW1lICE9PSB1bmRlZmluZWQgPyBsYXllci5ob2xkVGltZSA6IHRoaXMuaG9sZFRpbWU7XG5cbiAgICByZXR1cm4gYW5pbWF0aW9uLmhvbGRUaW1lICE9PSB1bmRlZmluZWRcbiAgICAgID8gYW5pbWF0aW9uLmhvbGRUaW1lXG4gICAgICA6IGxheWVySG9sZFRpbWU7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGEgdmFsaWQgbWluaW11bSBpbnRlcnZhbCB2YWx1ZS4gSWYgbWluaW11bSBpbnRlcnZhbCBpc24ndCBkZWZpbmVkIGZvclxuICAgKiB0aGUgYW5pbWF0aW9uLCB0cnkgdG8gdXNlIHRoZSBtaW5pbXVtIGludGVydmFsIGZvciB0aGUgbGF5ZXIuIElmIHRoYXQncyBub3RcbiAgICogZGVmaW5lZCwgZmFsbCBiYWNrIHRvIHRoZSBtaW5pbXVtIGludGVydmFsIGZvciB0aGUgZmVhdHVyZS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IGxheWVyIC0gTWFuYWdlZCBsYXllciBvcHRpb25zIG9iamVjdC5cbiAgICogQHBhcmFtIHtPYmplY3R9IGFuaW1hdGlvbiAtIE1hbmFnZWQgYW5pbWF0aW9uIG9wdGlvbnMgb2JqZWN0LlxuICAgKlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgX2dldE1pbmltdW1JbnRlcnZhbChsYXllciwgYW5pbWF0aW9uKSB7XG4gICAgY29uc3QgbGF5ZXJNaW5pbXVtSW50ZXJ2YWwgPVxuICAgICAgbGF5ZXIubWluaW11bUludGVydmFsICE9PSB1bmRlZmluZWRcbiAgICAgICAgPyBsYXllci5taW5pbXVtSW50ZXJ2YWxcbiAgICAgICAgOiB0aGlzLm1pbmltdW1JbnRlcnZhbDtcblxuICAgIHJldHVybiBhbmltYXRpb24ubWluaW11bUludGVydmFsICE9PSB1bmRlZmluZWRcbiAgICAgID8gYW5pbWF0aW9uLm1pbmltdW1JbnRlcnZhbFxuICAgICAgOiBsYXllck1pbmltdW1JbnRlcnZhbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmb3Ige0BsaW5rIGNvcmUvQW5pbWF0aW9uRmVhdHVyZSNwbGF5TmV4dEFuaW1hdGlvbn0gZXZlbnQuIElmIHRoZVxuICAgKiBldmVudCBpcyBlbWl0dGVkIGZvciBhIG1hbmFnZWQgYW5pbWF0aW9uIGFuZCB0aGUgbmV3IHF1ZXVlZCBzdGF0ZSBjYW5ub3RcbiAgICogYWR2YW5jZSBvbiBpdHMgb3duLCBzdGFydCBhIG5ldyB0aW1lciBwcm9taXNlIHRoYXQgd2lsbCBhZHZhbmNlIHRoZSBxdWV1ZVxuICAgKiBvbmNlIGl0IHJlc29sdmVzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIE9wdGlvbnMgb2JqZWN0IHBhc3NlZCBmcm9tIHBsYXlOZXh0QW5pbWF0aW9uIGV2ZW50LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGF5ZXJOYW1lIC0gTmFtZSBvZiB0aGUgbGF5ZXIgdGhhdCBvd25zIHRoZSBxdWV1ZSBzdGF0ZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGFuaW1hdGlvbk5hbWUgLSBOYW1lIG9mIHRoZSBxdWV1ZSBzdGF0ZSBhbmltYXRpb24uXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gY2FuQWR2YW5jZSAtIFdoZXRoZXIgb3Igbm90IHRoZSBjdXJyZW50IHN0YXRlIGluIHRoZSBxdWV1ZVxuICAgKiBjYW4gYWR2YW5jZSBvbiBpdHMgb3duLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGlzUXVldWVFbmQgLSBXaGV0aGVyIHRoZSBjdXJyZW50IHN0YXRlIGluIHRoZSBxdWV1ZSBpcyB0aGUgbGFzdFxuICAgKiBzdGF0ZSBpbiB0aGUgcXVldWUuXG4gICAqL1xuICBfb25OZXh0KHtsYXllck5hbWUsIGFuaW1hdGlvbk5hbWUsIGNhbkFkdmFuY2UsIGlzUXVldWVFbmR9KSB7XG4gICAgLy8gRXhpdCBpZiB0aGlzIGlzbid0IGEgbWFuYWdlZCBsYXllclxuICAgIGNvbnN0IGxheWVyID0gdGhpcy5fbWFuYWdlZExheWVyc1tsYXllck5hbWVdO1xuICAgIGlmIChsYXllciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gRXhpdCBpZiBpdCBpc24ndCBhIG1hbmFnZWQgYW5pbWF0aW9uXG4gICAgY29uc3QgYW5pbWF0aW9uID0gbGF5ZXIuYW5pbWF0aW9uc1thbmltYXRpb25OYW1lXTtcbiAgICBpZiAoYW5pbWF0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBTdGFydCBhIG5ldyB0aW1lciBmb3IgbG9vcGluZyBzdGF0ZXMgdGhhdCBhcmVuJ3QgdGhlIGVuZCBvZiB0aGUgcXVldWVcbiAgICBpZiAoIWNhbkFkdmFuY2UgJiYgIWlzUXVldWVFbmQgJiYgbGF5ZXIuY3VycmVudEdlc3R1cmUgPT09IGFuaW1hdGlvbk5hbWUpIHtcbiAgICAgIGNvbnN0IGhvbGRUaW1lID0gdGhpcy5fZ2V0SG9sZFRpbWUobGF5ZXIsIGFuaW1hdGlvbik7XG4gICAgICBsYXllci5ob2xkVGltZXIuY2FuY2VsKCk7XG5cbiAgICAgIC8vIFNraXAgdG8gdGhlIG5leHQgYW5pbWF0aW9uIHJpZ2h0IGF3YXkgaWYgaG9sZCB0aW1lIGlzIHplcm9cbiAgICAgIGlmIChob2xkVGltZSA8PSAwKSB7XG4gICAgICAgIHRoaXMuX2hvc3QuQW5pbWF0aW9uRmVhdHVyZS5wbGF5TmV4dEFuaW1hdGlvbihsYXllck5hbWUsIGFuaW1hdGlvbk5hbWUpO1xuICAgICAgfVxuXG4gICAgICAvLyBXYWl0IGZvciB0aGUgZ2l2ZW4gaG9sZCB0aW1lIGJlZm9yZSBwcm9ncmVzc2luZ1xuICAgICAgZWxzZSB7XG4gICAgICAgIGxheWVyLmhvbGRUaW1lciA9IFV0aWxzLndhaXQoaG9sZFRpbWUsIHtcbiAgICAgICAgICBvbkZpbmlzaDogKCkgPT4ge1xuICAgICAgICAgICAgLy8gQWR2YW5jZSB0aGUgcXVldWUgdG8gdGhlIG5leHQgc3RhdGVcbiAgICAgICAgICAgIGlmIChsYXllci5jdXJyZW50R2VzdHVyZSA9PT0gYW5pbWF0aW9uTmFtZSkge1xuICAgICAgICAgICAgICB0aGlzLl9ob3N0LkFuaW1hdGlvbkZlYXR1cmUucGxheU5leHRBbmltYXRpb24oXG4gICAgICAgICAgICAgICAgbGF5ZXJOYW1lLFxuICAgICAgICAgICAgICAgIGFuaW1hdGlvbk5hbWVcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2FsbGJhY2sgZm9yIHtAbGluayBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjc3RvcEFuaW1hdGlvbn0gZXZlbnQuIElmIHRoZVxuICAgKiBldmVudCBpcyBlbWl0dGVkIGZvciBhIG1hbmFnZWQgYW5pbWF0aW9uIGNhbmNlbCB0aGUgbGF5ZXIncyBzdG9yZWQgdGltZXJzLlxuICAgKiBJZiB0aGUgbGF5ZXIgaXMgc2V0IHRvIGF1dG8tZGlzYWJsZSBzZXQgaXRzIHdlaWdodCB0byAwLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIE9wdGlvbnMgb2JqZWN0IHBhc3NlZCBmcm9tIHBsYXlOZXh0QW5pbWF0aW9uIGV2ZW50LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGF5ZXJOYW1lIC0gTmFtZSBvZiB0aGUgbGF5ZXIgdGhhdCBvd25zIHRoZSBzdG9wcGVkIGFuaW1hdGlvbi5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGFuaW1hdGlvbk5hbWUgLSBOYW1lIG9mIHRoZSBhbmltYXRpb24gdGhhdCB3YXMgc3RvcHBlZC5cbiAgICovXG4gIF9vblN0b3Aoe2xheWVyTmFtZSwgYW5pbWF0aW9uTmFtZX0pIHtcbiAgICAvLyBNYWtlIHN1cmUgdGhlIGxheWVyIGlzIG1hbmFnZWRcbiAgICBjb25zdCBsYXllciA9IHRoaXMuX21hbmFnZWRMYXllcnNbbGF5ZXJOYW1lXTtcbiAgICBpZiAobGF5ZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIE1ha2Ugc3VyZSB0aGUgYW5pbWF0aW9uIGlzIG1hbmFnZWRcbiAgICBjb25zdCBhbmltYXRpb24gPSBsYXllci5hbmltYXRpb25zW2FuaW1hdGlvbk5hbWVdO1xuICAgIGlmIChhbmltYXRpb24gIT09IHVuZGVmaW5lZCAmJiBhbmltYXRpb25OYW1lID09PSBsYXllci5jdXJyZW50R2VzdHVyZSkge1xuICAgICAgbGF5ZXIuY3VycmVudEdlc3R1cmUgPSBudWxsO1xuICAgICAgbGF5ZXIucGxheVRpbWVyID0gbnVsbDtcbiAgICAgIGxheWVyLmhvbGRUaW1lci5jYW5jZWwoKTtcblxuICAgICAgLy8gVHVybiBvZmYgbGF5ZXIgd2VpZ2h0XG4gICAgICBpZiAobGF5ZXIuYXV0b0Rpc2FibGUpIHtcbiAgICAgICAgdGhpcy5zZXRMYXllcldlaWdodHMobmFtZSA9PiBuYW1lID09PSBsYXllck5hbWUsIDApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIF9vbkFuaW1hdGlvbkFkZGVkKHtsYXllck5hbWUsIGFuaW1hdGlvbk5hbWV9KSB7XG4gICAgY29uc3QgbGF5ZXIgPSB0aGlzLl9tYW5hZ2VkTGF5ZXJzW2xheWVyTmFtZV07XG5cbiAgICBpZiAobGF5ZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgYW5pbWF0aW9uID0gbGF5ZXIuYW5pbWF0aW9uc1thbmltYXRpb25OYW1lXTtcblxuICAgICAgLy8gUmVnaXN0ZXIgdGhlIGFuaW1hdGlvbiBhcyBhY3RpdmUgaWYgaXQgaXMgdW5tYW5hZ2VkXG4gICAgICBpZiAoYW5pbWF0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5yZWdpc3RlckFuaW1hdGlvbihsYXllck5hbWUsIGFuaW1hdGlvbk5hbWUpO1xuICAgICAgfVxuICAgICAgLy8gTWFyayB0aGUgYW5pbWF0aW9uIGFzIGFjdGl2ZSBpZiBpdCBpcyBtYW5hZ2VkXG4gICAgICBlbHNlIHtcbiAgICAgICAgYW5pbWF0aW9uLmlzQWN0aXZlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZWdpc3RlckxheWVyKG5hbWUsIG9wdGlvbnMgPSB7fSkge1xuICAgIHN1cGVyLnJlZ2lzdGVyTGF5ZXIobmFtZSwge1xuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIGhvbGRUaW1lcjogRGVmZXJyZWQucmVzb2x2ZSgpLFxuICAgICAgcGxheVRpbWVyOiBudWxsLFxuICAgICAgY3VycmVudEdlc3R1cmU6IG51bGwsXG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5fbWFuYWdlZExheWVyc1tuYW1lXS5pc0FjdGl2ZSkge1xuICAgICAgdGhpcy5faG9zdC5BbmltYXRpb25GZWF0dXJlLmdldEFuaW1hdGlvbnMobmFtZSkuZm9yRWFjaChhbmltID0+IHtcbiAgICAgICAgLy8gQXV0b21hdGljYWxseSByZWdpc3RlciBhbGwgYW5pbWF0aW9ucyBvbiB0aGUgbGF5ZXJcbiAgICAgICAgaWYgKHRoaXMuX21hbmFnZWRMYXllcnNbbmFtZV0uYW5pbWF0aW9uc1thbmltXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhpcy5yZWdpc3RlckFuaW1hdGlvbihcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICBhbmltLFxuICAgICAgICAgICAgdGhpcy5fbWFuYWdlZExheWVyc1tuYW1lXS5hbmltYXRpb25zW2FuaW1dXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcmVnaXN0ZXJBbmltYXRpb24obGF5ZXJOYW1lLCBhbmltYXRpb25OYW1lLCBvcHRpb25zID0ge30pIHtcbiAgICAvLyBUcnkgdG8gZmFsbCBiYWNrIHRvIGEgZGVmYXVsdCB3b3JkIGFycmF5XG4gICAgaWYgKCEob3B0aW9ucy53b3JkcyBpbnN0YW5jZW9mIEFycmF5KSAmJiAhKG9wdGlvbnMud29yZHMgaW5zdGFuY2VvZiBTZXQpKSB7XG4gICAgICBvcHRpb25zLndvcmRzID0gRGVmYXVsdEdlc3R1cmVXb3Jkc1thbmltYXRpb25OYW1lXSB8fCBbXTtcbiAgICB9XG5cbiAgICBzdXBlci5yZWdpc3RlckFuaW1hdGlvbihsYXllck5hbWUsIGFuaW1hdGlvbk5hbWUsIG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBvYmplY3QgdGhhdCBtYXBzIHNzbWwgbWFyayBzeW50YXggcmVxdWlyZWQgdG8gcGxheSBlYWNoIGdlc3R1cmUgdG9cbiAgICogdGhlIHdvcmRzIGFycmF5IGFzc29jaWF0ZWQgd2l0aCBlYWNoIGdlc3R1cmUuIFdvcmRzIGFycmF5cyBhcmUgZGVmaW5lZCBhdCB3aGVuXG4gICAqIHRoZSBnZXN0dXJlIGFuaW1hdGlvbiBpcyByZWdpc3RlcmVkLiBHZXN0dXJlcyB3aXRob3V0IGFzc29jaWF0ZWQgd29yZHMgd2lsbFxuICAgKiBiZSBleGNsdWRlZCBmcm9tIHRoZSByZXN1bHQuIFRoZSByZXN1bHRpbmcgb2JqZWN0IGNhbiBiZSB1c2VkIGFzIGFuIGlucHV0XG4gICAqIGZvciB7QGxpbmsgVGV4dFRvU3BlZWNoVXRpbHMuYXV0b0dlbmVyYXRlU1NNTE1hcmtzfSB0byB1cGRhdGUgYSBzcGVlY2ggc3RyaW5nXG4gICAqIHdpdGggdGhlIG1hcmt1cCByZXF1aXJlZCB0byBwbGF5IGdlc3R1cmVzIHRpbWVkIHdpdGggdGhlaXIgYXNzb2NpYXRlZCB3b3Jkcy5cbiAgICpcbiAgICogQHJldHVybnMge09iamVjdH1cbiAgICovXG4gIGNyZWF0ZUdlc3R1cmVNYXAoKSB7XG4gICAgY29uc3QgZ2VzdHVyZU1hcCA9IHt9O1xuXG4gICAgT2JqZWN0LmVudHJpZXModGhpcy5fbWFuYWdlZExheWVycykuZm9yRWFjaCgoW2xheWVyTmFtZSwge2FuaW1hdGlvbnN9XSkgPT4ge1xuICAgICAgT2JqZWN0LmVudHJpZXMoYW5pbWF0aW9ucykuZm9yRWFjaChcbiAgICAgICAgKFtcbiAgICAgICAgICBhbmltYXRpb25OYW1lLFxuICAgICAgICAgIHtob2xkVGltZSwgbWluaW11bUludGVydmFsLCB3b3JkcywgdHJhbnNpdGlvblRpbWV9LFxuICAgICAgICBdKSA9PiB7XG4gICAgICAgICAgLy8gT25seSBzdG9yZSBnZXN0dXJlcyB0aGF0IGhhdmUgYW55IGFzc29jaWF0ZWQgd29yZHNcbiAgICAgICAgICBpZiAod29yZHMubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICAgICAgICAuLi4oaG9sZFRpbWUgJiYgeyBob2xkVGltZSB9KSxcbiAgICAgICAgICAgICAgLi4uKG1pbmltdW1JbnRlcnZhbCAmJiB7IG1pbmltdW1JbnRlcnZhbCB9KSxcbiAgICAgICAgICAgICAgLi4uKHRyYW5zaXRpb25UaW1lICYmIHsgdHJhbnNpdGlvblRpbWUgfSksXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3Qga2V5ID0ge1xuICAgICAgICAgICAgICBmZWF0dXJlOiB0aGlzLmNvbnN0cnVjdG9yLm5hbWUsXG4gICAgICAgICAgICAgIG1ldGhvZDogJ3BsYXlHZXN0dXJlJyxcbiAgICAgICAgICAgICAgYXJnczogW2xheWVyTmFtZSwgYW5pbWF0aW9uTmFtZSwgb3B0aW9uc10sXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBnZXN0dXJlTWFwW0pTT04uc3RyaW5naWZ5KGtleSldID0gd29yZHM7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGdlc3R1cmVNYXA7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGFuIGFycmF5IHRoYXQgY29udGFpbnMgc3NtbCBtYXJrIHN5bnRheCByZXF1aXJlZCB0byBwbGF5IGVhY2ggZ2VzdHVyZVxuICAgKiB0aGF0IGRvZXMgbm90IGhhdmUgYW55IGFzc29jaWF0ZWQgd29yZHMuIFRoZSByZXN1bHRpbmcgYXJyYXkgY2FuIGJlIHVzZWQgYXNcbiAgICogYW4gaW5wdXQgZm9yIHtAbGluayBUZXh0VG9TcGVlY2hVdGlscy5hdXRvR2VuZXJhdGVTU01MTWFya3N9IG9yXG4gICAqIHtAbGluayBUZXh0VG9TcGVlY2hVdGlscy5hZGRNYXJrc1RvVW5tYXJrZWRTZW50ZW5jZXN9IHRvIHVwZGF0ZSBhIHNwZWVjaFxuICAgKiBzdHJpbmcgd2l0aCB0aGUgbWFya3VwIHJlcXVpcmVkIHRvIHBsYXkgcmFuZG9tIGdlc3R1cmVzIGF0IGVhY2ggdW5tYXJrZWRcbiAgICogc2VudGVuY2UgaW4gdGhlIHN0cmluZy5cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheS48c3RyaW5nPj19IGxheWVycyAtIEFuIGFycmF5IG9mIG5hbWVzIG9mIG1hbmFnZWQgbGF5ZXJzIHRvIGdlbmVyYXRlXG4gICAqIG1hcmtzIGZvci4gSWYgdW5kZWZpbmVkLCB1c2UgYWxsIG1hbmFnZWQgbGF5ZXJzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7QXJyYXkuPHN0cmluZz59XG4gICAqL1xuICBjcmVhdGVHZW5lcmljR2VzdHVyZUFycmF5KGxheWVycykge1xuICAgIGNvbnN0IGdlbmVyaWNHZXN0dXJlcyA9IFtdO1xuICAgIGxheWVycyA9IGxheWVycyB8fCBPYmplY3Qua2V5cyh0aGlzLl9tYW5hZ2VkTGF5ZXJzKTtcblxuICAgIGxheWVycy5mb3JFYWNoKGxheWVyTmFtZSA9PiB7XG4gICAgICBjb25zdCBsYXllciA9IHRoaXMuX21hbmFnZWRMYXllcnNbbGF5ZXJOYW1lXTtcblxuICAgICAgLy8gTWFrZSBzdXJlIHRoZSBsYXllciBpcyBtYW5hZ2VkXG4gICAgICBpZiAoIWxheWVyKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgT2JqZWN0LmVudHJpZXMobGF5ZXIuYW5pbWF0aW9ucykuZm9yRWFjaChcbiAgICAgICAgKFtcbiAgICAgICAgICBhbmltYXRpb25OYW1lLFxuICAgICAgICAgIHsgaG9sZFRpbWUsIG1pbmltdW1JbnRlcnZhbCwgd29yZHMsIHRyYW5zaXRpb25UaW1lIH0sXG4gICAgICAgIF0pID0+IHtcbiAgICAgICAgICAvLyBPbmx5IHN0b3JlIGdlc3R1cmVzIHRoYXQgZG9uJ3QgaGF2ZSBhbnkgYXNzb2NpYXRlZCB3b3Jkc1xuICAgICAgICAgIGlmICghd29yZHMubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICAgICAgICAuLi4oaG9sZFRpbWUgJiYgeyBob2xkVGltZSB9KSxcbiAgICAgICAgICAgICAgLi4uKG1pbmltdW1JbnRlcnZhbCAmJiB7IG1pbmltdW1JbnRlcnZhbCB9KSxcbiAgICAgICAgICAgICAgLi4uKHRyYW5zaXRpb25UaW1lICYmIHsgdHJhbnNpdGlvblRpbWUgfSksXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgICBmZWF0dXJlOiB0aGlzLmNvbnN0cnVjdG9yLm5hbWUsXG4gICAgICAgICAgICAgIG1ldGhvZDogJ3BsYXlHZXN0dXJlJyxcbiAgICAgICAgICAgICAgYXJnczogW2xheWVyTmFtZSwgYW5pbWF0aW9uTmFtZSwgb3B0aW9uc10sXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKCFnZW5lcmljR2VzdHVyZXMuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICAgICAgICBnZW5lcmljR2VzdHVyZXMucHVzaChrZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBnZW5lcmljR2VzdHVyZXM7XG4gIH1cblxuICAvKipcbiAgICogUGxheSBhIG1hbmFnZWQgZ2VzdHVyZSBhbmltYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllck5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgbGF5ZXIgdGhhdCBjb250YWlucyB0aGUgZ2VzdHVyZVxuICAgKiBhbmltYXRpb24uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhbmltYXRpb25OYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGdlc3R1cmUgYW5pbWF0aW9uLlxuICAgKiBAcGFyYW0ge09iamVjdD19IG9wdGlvbnMgLSBPcHRpb25hbCBnZXN0dXJlIG9wdGlvbnMuXG4gICAqIEBwYXJhbSB7bnVtYmVyPX0gb3B0aW9ucy5ob2xkVGltZSAtIFRoaXMgb3B0aW9uIG9ubHkgYXBwbGllcyB0byB7QGxpbmsgUXVldWVTdGF0ZX1cbiAgICogZ2VzdHVyZXMuIFdoZW4gYSBRdWV1ZVN0YXRlIGdlc3R1cmUgcHJvZ3Jlc3NlcyB0byBhIGxvb3Bpbmcgc3RhdGUsIHRoaXMgb3B0aW9uXG4gICAqIGRlZmluZXMgaG93IG1hbnkgc2Vjb25kcyBzaG91bGQgZWxhcHNlIGJlZm9yZSBtb3ZpbmcgdGhlIHF1ZXVlIGZvcndhcmQuIElmXG4gICAqIHVuZGVmaW5lZCwgaXQgd2lsbCBmYWxsIGJhY2sgZmlyc3QgdG8gdGhlIGhvbGRUaW1lIGRlZmluZWQgaW4gdGhlIG9wdGlvbnMgd2hlblxuICAgKiB0aGUgZ2VzdHVyZSBhbmltYXRpb24gd2FzIHJlZ2lzdGVyZWQgYW5kIHRoZW4gdG8gdGhlIGhvbGRUaW1lIGRlZmluZWQgb24gdGhlXG4gICAqIGZlYXR1cmUuXG4gICAqIEBwYXJhbSB7bnVtYmVyPX0gb3B0aW9ucy5taW5pbXVtSW50ZXJ2YWwgLSBUaGUgbWluaW11bSBhbW91bnQgb2YgdGltZSB0aGF0XG4gICAqIG11c3QgaGF2ZSBlbGFwc2VkIHNpbmNlIHRoZSBsYXN0IHRpbWUgYSBnZXN0dXJlIHdhcyBwbGF5ZWQuXG4gICAqL1xuICBwbGF5R2VzdHVyZShcbiAgICBsYXllck5hbWUsXG4gICAgYW5pbWF0aW9uTmFtZSxcbiAgICB7aG9sZFRpbWUsIG1pbmltdW1JbnRlcnZhbCwgdHJhbnNpdGlvblRpbWUsIGZvcmNlID0gZmFsc2V9ID0ge31cbiAgKSB7XG4gICAgLy8gTWFrZSBzdXJlIHRoZSBhbmltYXRpb24gaXMgcmVnaXN0ZXJlZFxuICAgIGlmIChcbiAgICAgIHRoaXMuX21hbmFnZWRMYXllcnNbbGF5ZXJOYW1lXSA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICB0aGlzLl9tYW5hZ2VkTGF5ZXJzW2xheWVyTmFtZV0uYW5pbWF0aW9uc1thbmltYXRpb25OYW1lXSA9PT0gdW5kZWZpbmVkXG4gICAgKSB7XG4gICAgICB0aGlzLnJlZ2lzdGVyQW5pbWF0aW9uKGxheWVyTmFtZSwgYW5pbWF0aW9uTmFtZSwge1xuICAgICAgICBob2xkVGltZSxcbiAgICAgICAgbWluaW11bUludGVydmFsLFxuICAgICAgICB0cmFuc2l0aW9uVGltZSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IGxheWVyID0gdGhpcy5fbWFuYWdlZExheWVyc1tsYXllck5hbWVdO1xuICAgIGNvbnN0IGFuaW1hdGlvbiA9IGxheWVyLmFuaW1hdGlvbnNbYW5pbWF0aW9uTmFtZV07XG5cbiAgICAvLyBNYWtlIHN1cmUgdGhlIGFuaW1hdGlvbiBpcyBhY3RpdmVcbiAgICBpZiAoIWFuaW1hdGlvbi5pc0FjdGl2ZSkge1xuICAgICAgLy8gQ3JlYXRlIHdhcm5pbmcgbWVzc2FnZSBiYXNlZCBvbiB3aGljaCBvYmplY3QgZG9lc24ndCBleGlzdCB5ZXRcbiAgICAgIGNvbnN0IHR5cGVOYW1lID0gbGF5ZXIuaXNBY3RpdmUgPyAnYW5pbWF0aW9uJyA6ICdsYXllcic7XG4gICAgICBjb25zdCBtZXNzYWdlID0gYFNraXBwaW5nIGdlc3R1cmUgJHthbmltYXRpb25OYW1lfSBvbiBsYXllciAke2xheWVyTmFtZX0gZm9yIGhvc3QgJHt0aGlzLl9ob3N0LmlkfS4gTm8gJHt0eXBlTmFtZX0gZXhpc3RzIHdpdGggdGhpcyBuYW1lIHlldC5gO1xuXG4gICAgICBjb25zb2xlLndhcm4obWVzc2FnZSk7XG4gICAgICByZXR1cm4gRGVmZXJyZWQuY2FuY2VsKHtyZWFzb246ICdpbmFjdGl2ZScsIHZhbHVlOiB0eXBlTmFtZX0pO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGlmIHRoZSBnZXN0dXJlIGlzIGFscmVhZHkgcGxheWluZ1xuICAgIGNvbnN0IHtjdXJyZW50R2VzdHVyZX0gPSBsYXllcjtcbiAgICBpZiAoY3VycmVudEdlc3R1cmUgPT09IGFuaW1hdGlvbk5hbWUgJiYgIWZvcmNlKSB7XG4gICAgICBjb25zdCBtZXNzYWdlID0gYFNraXBwaW5nIGdlc3R1cmUgJHthbmltYXRpb25OYW1lfSBvbiBsYXllciAke2xheWVyTmFtZX0gZm9yIGhvc3QgJHt0aGlzLl9ob3N0LmlkfS4gVGhlIGdlc3R1cmUgaXMgYWxyZWFkeSBwbGF5aW5nLiBVc2Ugb3B0aW9ucy5mb3JjZSB0byBmb3JjZSB0aGUgZ2VzdHVyZSByZXBsYXksIHdoaWNoIG1heSByZXN1bHQgaW4gYSBoYXJkIHRyYW5zaXRpb24uYDtcblxuICAgICAgY29uc29sZS53YXJuKG1lc3NhZ2UpO1xuICAgICAgcmV0dXJuIERlZmVycmVkLmNhbmNlbCh7cmVhc29uOiAncGxheWluZycsIHZhbHVlOiBhbmltYXRpb25OYW1lfSk7XG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIGFuaW1hdGlvbiBvcHRpb25zXG4gICAgaWYgKGhvbGRUaW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGFuaW1hdGlvbi5ob2xkVGltZSA9IGhvbGRUaW1lO1xuICAgIH1cblxuICAgIGlmIChtaW5pbXVtSW50ZXJ2YWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgYW5pbWF0aW9uLm1pbmltdW1JbnRlcnZhbCA9IG1pbmltdW1JbnRlcnZhbDtcbiAgICB9IGVsc2Uge1xuICAgICAgbWluaW11bUludGVydmFsID0gdGhpcy5fZ2V0TWluaW11bUludGVydmFsKGxheWVyLCBhbmltYXRpb24pO1xuICAgIH1cblxuICAgIC8vIENoZWNrIHRoZSBpbnRlcnZhbFxuICAgIGlmICghZm9yY2UgJiYgbGF5ZXIucGxheVRpbWVyICE9PSBudWxsICYmIGxheWVyLnBsYXlUaW1lciA8IG1pbmltdW1JbnRlcnZhbCkge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBgU2tpcHBpbmcgZ2VzdHVyZSAke2FuaW1hdGlvbk5hbWV9IG9uIGxheWVyICR7bGF5ZXJOYW1lfSBmb3IgaG9zdCAke3RoaXMuX2hvc3QuaWR9LiBNaW5pbXVtIGludGVydmFsICR7bWluaW11bUludGVydmFsfSBoYXMgbm90IGJlZW4gbWV0LmBcbiAgICAgICk7XG4gICAgICByZXR1cm4gRGVmZXJyZWQuY2FuY2VsKHtcbiAgICAgICAgcmVhc29uOiAnbWluaW11bUludGVydmFsJyxcbiAgICAgICAgdmFsdWU6IG1pbmltdW1JbnRlcnZhbCAtIGxheWVyLnBsYXlUaW1lcixcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIFBsYXkgdGhlIGFuaW1hdGlvblxuICAgIGxheWVyLmN1cnJlbnRHZXN0dXJlID0gYW5pbWF0aW9uTmFtZTtcbiAgICBsYXllci5wbGF5VGltZXIgPSAwO1xuICAgIGxheWVyLmhvbGRUaW1lci5jYW5jZWwoKTtcbiAgICBpZiAobGF5ZXIuYXV0b0Rpc2FibGUpIHtcbiAgICAgIHRoaXMuc2V0TGF5ZXJXZWlnaHRzKG5hbWUgPT4gbmFtZSA9PT0gbGF5ZXJOYW1lLCAxKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5faG9zdC5BbmltYXRpb25GZWF0dXJlLnBsYXlBbmltYXRpb24oXG4gICAgICBsYXllck5hbWUsXG4gICAgICBhbmltYXRpb25OYW1lLFxuICAgICAgdHJhbnNpdGlvblRpbWVcbiAgICApO1xuICB9XG5cbiAgdXBkYXRlKGRlbHRhVGltZSkge1xuICAgIHN1cGVyLnVwZGF0ZShkZWx0YVRpbWUpO1xuXG4gICAgLy8gSW5jcmVtZW50IHRoZSB0aW1lcnNcbiAgICBPYmplY3QuZW50cmllcyh0aGlzLl9tYW5hZ2VkTGF5ZXJzKS5mb3JFYWNoKChbbmFtZSwgb3B0aW9uc10pID0+IHtcbiAgICAgIGlmIChvcHRpb25zLmlzQWN0aXZlICYmICF0aGlzLl9ob3N0LkFuaW1hdGlvbkZlYXR1cmUuZ2V0UGF1c2VkKG5hbWUpKSB7XG4gICAgICAgIG9wdGlvbnMuaG9sZFRpbWVyLmV4ZWN1dGUoZGVsdGFUaW1lKTtcblxuICAgICAgICBpZiAob3B0aW9ucy5wbGF5VGltZXIgIT09IG51bGwpIHtcbiAgICAgICAgICBvcHRpb25zLnBsYXlUaW1lciArPSBkZWx0YVRpbWUgLyAxMDAwO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBpbnN0YWxsQXBpKCkge1xuICAgIC8qKlxuICAgICAqIEBpbm5lclxuICAgICAqIEBuYW1lc3BhY2UgR2VzdHVyZUZlYXR1cmVcbiAgICAgKi9cbiAgICBjb25zdCBhcGkgPSBzdXBlci5pbnN0YWxsQXBpKCk7XG5cbiAgICBPYmplY3QuYXNzaWduKGFwaSwge1xuICAgICAgLyoqXG4gICAgICAgKiBAbWVtYmVyb2YgR2VzdHVyZUZlYXR1cmVcbiAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICogQG1ldGhvZFxuICAgICAgICogQHNlZSBHZXN0dXJlRmVhdHVyZSNjcmVhdGVHZXN0dXJlTWFwXG4gICAgICAgKi9cbiAgICAgIGNyZWF0ZUdlc3R1cmVNYXA6IHRoaXMuY3JlYXRlR2VzdHVyZU1hcC5iaW5kKHRoaXMpLFxuICAgICAgLyoqXG4gICAgICAgKiBAbWVtYmVyb2YgR2VzdHVyZUZlYXR1cmVcbiAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICogQG1ldGhvZFxuICAgICAgICogQHNlZSBHZXN0dXJlRmVhdHVyZSNjcmVhdGVHZW5lcmljR2VzdHVyZUFycmF5XG4gICAgICAgKi9cbiAgICAgIGNyZWF0ZUdlbmVyaWNHZXN0dXJlQXJyYXk6IHRoaXMuY3JlYXRlR2VuZXJpY0dlc3R1cmVBcnJheS5iaW5kKHRoaXMpLFxuICAgICAgLyoqXG4gICAgICAgKiBAbWVtYmVyb2YgR2VzdHVyZUZlYXR1cmVcbiAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICogQG1ldGhvZFxuICAgICAgICogQHNlZSBHZXN0dXJlRmVhdHVyZSNwbGF5R2VzdHVyZVxuICAgICAgICovXG4gICAgICBwbGF5R2VzdHVyZTogdGhpcy5wbGF5R2VzdHVyZS5iaW5kKHRoaXMpLFxuICAgIH0pO1xuICB9XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEdlc3R1cmVGZWF0dXJlLCB7XG4gIERFRkFVTFRfTEFZRVJfT1BUSU9OUzoge1xuICAgIHZhbHVlOiB7XG4gICAgICAuLi5HZXN0dXJlRmVhdHVyZS5ERUZBVUxUX0xBWUVSX09QVElPTlMsXG4gICAgICBhdXRvRGlzYWJsZTogdHJ1ZSxcbiAgICB9LFxuICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgfSxcbiAgRVZFTlRfREVQRU5ERU5DSUVTOiB7XG4gICAgdmFsdWU6IHtcbiAgICAgIC4uLkdlc3R1cmVGZWF0dXJlLkVWRU5UX0RFUEVOREVOQ0lFUyxcbiAgICAgIEFuaW1hdGlvbkZlYXR1cmU6IHtcbiAgICAgICAgLi4uR2VzdHVyZUZlYXR1cmUuRVZFTlRfREVQRU5ERU5DSUVTLkFuaW1hdGlvbkZlYXR1cmUsXG4gICAgICAgIHBsYXlOZXh0QW5pbWF0aW9uOiAnX29uTmV4dCcsXG4gICAgICAgIHN0b3BBbmltYXRpb246ICdfb25TdG9wJyxcbiAgICAgICAgaW50ZXJydXB0QW5pbWF0aW9uOiAnX29uU3RvcCdcbiAgICAgIH0sXG4gICAgfSxcbiAgfSxcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBHZXN0dXJlRmVhdHVyZTtcbmV4cG9ydCB7RGVmYXVsdEdlc3R1cmVXb3Jkc307XG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cclxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVC0wXHJcbmltcG9ydCBEZWZlcnJlZCBmcm9tICdjb3JlL0RlZmVycmVkJztcclxuaW1wb3J0IFV0aWxzIGZyb20gJ2NvcmUvVXRpbHMnO1xyXG5pbXBvcnQgTWF0aFV0aWxzIGZyb20gJ2NvcmUvTWF0aFV0aWxzJztcclxuaW1wb3J0IHtMaW5lYXJ9IGZyb20gJy4vRWFzaW5nJztcclxuXHJcbi8qKlxyXG4gKiBBIGNvbGxlY3Rpb24gb2YgdXNlZnVsIGFuaW1hdGlvbiBmdW5jdGlvbnMuXHJcbiAqXHJcbiAqIEBoaWRlY29uc3RydWN0b3JcclxuICovXHJcbmNsYXNzIEFuaW1hdGlvblV0aWxzIHtcclxuICBzdGF0aWMgbGVycChmcm9tLCB0bywgZmFjdG9yKSB7XHJcbiAgICBjb25zb2xlLndhcm4oYEFuaW1hdGlvblV0aWxzLmxlcnAgaXMgYmVpbmcgZGVwcmVjYXRlZC4gVXNlIE1hdGhVdGlscy5sZXJwIGluc3RlYWQuYCk7XHJcblxyXG4gICAgcmV0dXJuIE1hdGhVdGlscy5sZXJwKGZyb20sIHRvLCBmYWN0b3IpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2xhbXAgYSBudW1iZXIgYmV0d2VlbiAyIHZhbHVlcy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSAtIFZhbHVlIHRvIGNsYW1wLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbbWluPTBdIC0gTWludW11bSB2YWx1ZS5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gW21heD0xXSAtIE1heGltdW0gdmFsdWUuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxyXG4gICAqL1xyXG4gIHN0YXRpYyBjbGFtcCh2YWx1ZSwgbWluID0gMCwgbWF4ID0gMSkge1xyXG4gICAgY29uc29sZS53YXJuKGBBbmltYXRpb25VdGlscy5jbGFtcCBpcyBiZWluZyBkZXByZWNhdGVkLiBVc2UgTWF0aFV0aWxzLmNsYW1wIGluc3RlYWQuYCk7XHJcblxyXG4gICAgcmV0dXJuIE1hdGhVdGlscy5jbGFtcCh2YWx1ZSwgbWluLCBtYXgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIGEgZGVmZXJyZWQgcHJvbWlzZSB0aGF0IGNhbiBiZSB1c2VkIHRvIHVwZGF0ZSB0aGUgdmFsdWUgb2YgYSBudW1lcmljXHJcbiAgICogcHJvcGVydHkgb2YgdGhpcyBvYmplY3Qgb3ZlciB0aW1lLiBQYXNzIGRlbHRhIHRpbWUgaW4gbWlsbGlzZWNvbmRzIHRvIHRoZVxyXG4gICAqIGRlZmVycmVkIHByb21pc2UncyBleGVjdXRlIG1ldGhvZCBpbiBhbiB1cGRhdGUgbG9vcCB0byBhbmltYXRlIHRoZSBwcm9wZXJ0eVxyXG4gICAqIHRvd2FyZHMgdGhlIHRhcmdldCB2YWx1ZS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wZXJ0eU93bmVyIC0gT2JqZWN0IHRoYXQgY29udGFpbnMgdGhlIHByb3BlcnR5IHRvIGFuaW1hdGlvbi5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHlOYW1lIC0gTmFtZSBvZiB0aGUgcHJvcGVydHkgdG8gYW5pbWF0ZS5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gdGFyZ2V0VmFsdWUgLSBUYXJnZXQgdmFsdWUgdG8gcmVhY2guXHJcbiAgICogQHBhcmFtIHtPYmplY3Q9fSBvcHRpb25zIC0gT3B0aW9uYWwgb3B0aW9ucyBvYmplY3RcclxuICAgKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMuc2Vjb25kcz0wXSAtIE51bWJlciBvZiBzZWNvbmRzIGl0IHdpbGwgdGFrZSB0byByZWFjaFxyXG4gICAqIHRoZSB0YXJnZXQgdmFsdWUuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdGlvbnMuZWFzaW5nRm49TGluZWFyLkluT3V0XSAtIEVhc2luZyBmdW5jdGlvbiB0byB1c2UgZm9yIGFuaW1hdGlvbi5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0aW9ucy5vbkZpbmlzaF0gLSBDYWxsYmFjayB0byBleGVjdXRlIG9uY2UgdGhlIGFuaW1hdGlvbiBjb21wbGV0ZXMuXHJcbiAgICogVGhlIHRhcmdldCB2YWx1ZSBpcyBwYXNzZWQgYXMgYSBwYXJhbWV0ZXIuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9wdGlvbnMub25Qcm9ncmVzcyAtIENhbGxiYWNrIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBhbmltYXRpb25cclxuICAgKiBwcm9wZXJ0eSBpcyB1cGRhdGVkIGR1cmluZyB0aGUgYW5pbWF0aW9uLiBUaGUgcHJvcGVydHkncyB2YWx1ZSBhdCB0aGUgdGltZSBvZlxyXG4gICAqIHRoZSB1cGRhdGUgaXMgcGFzc2VkIGFzIGEgcGFyYW1ldGVyLlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvcHRpb25zLm9uQ2FuY2VsIC0gQ2FsbGJhY2sgdG8gZXhlY3V0ZSBpZiB0aGUgdXNlciBjYW5jZWxzIHRoZVxyXG4gICAqIGFuaW1hdGlvbiBiZWZvcmUgY29tcGxldGlvbi4gVGhlIGFuaW1hdGlvbiBwcm9wZXJ0eSdzIHZhbHVlIGF0IHRoZSB0aW1lIG9mXHJcbiAgICogY2FuY2VsIGlzIHBhc3NlZCBhcyBhIHBhcmFtZXRlci5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb3B0aW9ucy5vbkVycm9yIC0gQ2FsbGJhY2sgdG8gZXhlY3V0ZSBpZiB0aGUgYW5pbWF0aW9uIHN0b3BzXHJcbiAgICogYmVjYXVzZSBhbiBlcnJvciBpcyBlbmNvdW50ZXJlZC4gVGhlIGVycm9yIG1lc3NhZ2UgaXMgcGFzc2VkIGFzIGEgcGFyYW1ldGVyLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0RlZmVycmVkfSBSZXNvbHZlcyB3aXRoIHRoZSBwcm9wZXJ0eSdzIHZhbHVlIG9uY2UgaXQgcmVhY2hlcyB0aGVcclxuICAgKiB0YXJnZXQgdmFsdWUuXHJcbiAgICovXHJcbiAgc3RhdGljIGludGVycG9sYXRlUHJvcGVydHkoXHJcbiAgICBwcm9wZXJ0eU93bmVyLFxyXG4gICAgcHJvcGVydHlOYW1lLFxyXG4gICAgdGFyZ2V0VmFsdWUsXHJcbiAgICB7c2Vjb25kcyA9IDAsIGVhc2luZ0ZuLCBvbkZpbmlzaCwgb25Qcm9ncmVzcywgb25DYW5jZWwsIG9uRXJyb3J9ID0ge31cclxuICApIHtcclxuICAgIC8vIE1ha2Ugc3VyZSBwcm9wZXJ0eSBpcyBhbiBvYmplY3RcclxuICAgIGlmICghKHByb3BlcnR5T3duZXIgaW5zdGFuY2VvZiBPYmplY3QpKSB7XHJcbiAgICAgIGNvbnN0IGUgPSBuZXcgRXJyb3IoXHJcbiAgICAgICAgYENhbm5vdCBpbnRlcnBvbGF0ZSBwcm9wZXJ0eSAke3Byb3BlcnR5TmFtZX0uIFByb3BlcnR5IG93bmVyIG11c3QgYmUgYW4gb2JqZWN0LmBcclxuICAgICAgKTtcclxuXHJcbiAgICAgIGlmICh0eXBlb2Ygb25FcnJvciA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgIG9uRXJyb3IoZSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBEZWZlcnJlZC5yZWplY3QoZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gTWFrZSBzdXJlIHByb3BlcnR5IGlzIG51bWVyaWNcclxuICAgIGlmIChOdW1iZXIuaXNOYU4oTnVtYmVyKHByb3BlcnR5T3duZXJbcHJvcGVydHlOYW1lXSkpKSB7XHJcbiAgICAgIGNvbnN0IGUgPSBuZXcgRXJyb3IoXHJcbiAgICAgICAgYENhbm5vdCBpbnRlcnBvbGF0ZSBwcm9wZXJ0eSAke3Byb3BlcnR5TmFtZX0uIFByb3BlcnR5IG11c3QgYmUgbnVtZXJpYy5gXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBpZiAodHlwZW9mIG9uRXJyb3IgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICBvbkVycm9yKGUpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gRGVmZXJyZWQucmVqZWN0KGUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIE1ha2Ugc3VyZSB0aGUgdGFyZ2V0IHZhbHVlIGlzIG51bWVyaWNcclxuICAgIGlmIChOdW1iZXIuaXNOYU4oTnVtYmVyKHRhcmdldFZhbHVlKSkpIHtcclxuICAgICAgY29uc3QgZSA9IG5ldyBFcnJvcihcclxuICAgICAgICBgQ2Fubm90IGludGVycG9sYXRlIHByb3BlcnR5ICR7cHJvcGVydHlOYW1lfSB0byB2YWx1ZSAke3RhcmdldFZhbHVlfS4gVGFyZ2V0IHZhbHVlIG11c3QgYmUgbnVtZXJpYy5gXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBpZiAodHlwZW9mIG9uRXJyb3IgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICBvbkVycm9yKGUpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gRGVmZXJyZWQucmVqZWN0KGUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFJlc29sdmUgaW1tZWRpYXRlbHkgaWYgdGhlIHRhcmdldCBoYXMgYWxyZWFkeSBiZWVuIHJlYWNoZWRcclxuICAgIGNvbnN0IHN0YXJ0VmFsdWUgPSBwcm9wZXJ0eU93bmVyW3Byb3BlcnR5TmFtZV07XHJcblxyXG4gICAgaWYgKHN0YXJ0VmFsdWUgPT09IHRhcmdldFZhbHVlKSB7XHJcbiAgICAgIGlmICh0eXBlb2Ygb25GaW5pc2ggPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICBvbkZpbmlzaCh0YXJnZXRWYWx1ZSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBEZWZlcnJlZC5yZXNvbHZlKHRhcmdldFZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBEZWZhdWx0IHRvIGxpbmVhciBpbnRlcnBvbGF0aW9uXHJcbiAgICBpZiAodHlwZW9mIGVhc2luZ0ZuICE9PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgIGlmIChlYXNpbmdGbiAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgICAgYEludmFsaWQgcHJvcGVydHkgaW50ZXJwb2xhdGlvbiBlYXNpbmdGbi4gRGVmYXVsdGluZyB0byBsaW5lYXIgaW50ZXJwb2xhdGlvbi5gXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgZWFzaW5nRm4gPSBMaW5lYXIuSW5PdXQ7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgaW50ZXJwb2xhdG9yID0gVXRpbHMud2FpdChzZWNvbmRzLCB7XHJcbiAgICAgIG9uRmluaXNoOiAoKSA9PiB7XHJcbiAgICAgICAgcHJvcGVydHlPd25lcltwcm9wZXJ0eU5hbWVdID0gdGFyZ2V0VmFsdWU7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2Ygb25GaW5pc2ggPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgIG9uRmluaXNoKHRhcmdldFZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIG9uQ2FuY2VsOiAoKSA9PiB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBvbkNhbmNlbCA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgb25DYW5jZWwocHJvcGVydHlPd25lcltwcm9wZXJ0eU5hbWVdKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIG9uUHJvZ3Jlc3M6IHByb2dyZXNzID0+IHtcclxuICAgICAgICBpZiAocHJvcGVydHlPd25lcltwcm9wZXJ0eU5hbWVdICE9PSB0YXJnZXRWYWx1ZSkge1xyXG4gICAgICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBsZXJwIGZhY3RvclxyXG4gICAgICAgICAgY29uc3QgZWFzZUZhY3RvciA9IGVhc2luZ0ZuKHByb2dyZXNzKTtcclxuXHJcbiAgICAgICAgICBpZiAodHlwZW9mIGVhc2VGYWN0b3IgIT09ICdudW1iZXInKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGUgPSBuZXcgRXJyb3IoXHJcbiAgICAgICAgICAgICAgYEludmFsaWQgcHJvcGVydHkgaW50ZXJwb2xhdGlvbiBlYXNpbmdGbi4gRWFzaW5nRm4gbXVzdCByZXR1cm4gYSBudW1iZXIuYFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBpbnRlcnBvbGF0b3IucmVqZWN0KGUpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gVXBkYXRlIHRoZSB2YWx1ZVxyXG4gICAgICAgICAgcHJvcGVydHlPd25lcltwcm9wZXJ0eU5hbWVdID0gTWF0aFV0aWxzLmxlcnAoXHJcbiAgICAgICAgICAgIHN0YXJ0VmFsdWUsXHJcbiAgICAgICAgICAgIHRhcmdldFZhbHVlLFxyXG4gICAgICAgICAgICBlYXNlRmFjdG9yXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gU2lnbmFsIHByb2dyZXNzXHJcbiAgICAgICAgaWYgKHR5cGVvZiBvblByb2dyZXNzID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICBvblByb2dyZXNzKHByb3BlcnR5T3duZXJbcHJvcGVydHlOYW1lXSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBTaWduYWwgY29tcGxldGlvbiBvbmNlIHRpbWUgaXMgdXBcclxuICAgICAgICBpZiAocHJvZ3Jlc3MgPT09IDEpIHtcclxuICAgICAgICAgIHByb3BlcnR5T3duZXJbcHJvcGVydHlOYW1lXSA9IHRhcmdldFZhbHVlO1xyXG4gICAgICAgICAgaW50ZXJwb2xhdG9yLnJlc29sdmUodGFyZ2V0VmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgb25FcnJvcixcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBpbnRlcnBvbGF0b3I7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBBbmltYXRpb25VdGlscztcclxuIiwiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTBcbmltcG9ydCBEZWZlcnJlZCBmcm9tICdjb3JlL0RlZmVycmVkJztcbmltcG9ydCBNYXRoVXRpbHMgZnJvbSAnY29yZS9NYXRoVXRpbHMnO1xuaW1wb3J0IEFuaW1hdGlvblV0aWxzIGZyb20gJy4uL0FuaW1hdGlvblV0aWxzJztcblxuLyoqXG4gKiBCYXNlIGNsYXNzIGZvciBhIHN0YXRlIGluIG91ciBhbmltYXRpb24gc3lzdGVtLlxuICpcbiAqIEBhYnN0cmFjdFxuICovXG5jbGFzcyBBYnN0cmFjdFN0YXRlIHtcbiAgLyoqXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdD19IG9wdGlvbnMgLSBPcHRpb25zIGZvciB0aGUgYW5pbWF0aW9uIHN0YXRlLlxuICAgKiBAcGFyYW0ge3N0cmluZz19IG9wdGlvbnMubmFtZSAtIE5hbWUgZm9yIHRoZSBhbmltYXRpb24gc3RhdGUuIE5hbWVzIG11c3QgYmVcbiAgICogdW5pcXVlIGZvciB0aGUgY29udGFpbmVyIHRoZSBzdGF0ZSBpcyBhcHBsaWVkIHRvIGFuZCBzaG91bGQgYmUgdmFsaWRhdGVkIGF0XG4gICAqIHRoZSBjb250YWluZXIgbGV2ZWwuIElmIG5vIG5hbWUgaXMgZ2l2ZW4gaXQgd2lsbCBkZWZhdWx0IHRvIHRoZSBjb25zdHJ1Y3RvclxuICAgKiBuYW1lLlxuICAgKiBAcGFyYW0ge3dlaWdodH0gW29wdGlvbnMud2VpZ2h0PTBdIC0gVGhlIDAtMSBhbW91bnQgb2YgaW5mbHVlbmNlIHRoZSBzdGF0ZSB3aWxsIGhhdmUuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihvcHRpb25zID0ge30pIHtcbiAgICB0aGlzLm5hbWUgPVxuICAgICAgb3B0aW9ucy5uYW1lICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLm5hbWUgOiB0aGlzLmNvbnN0cnVjdG9yLm5hbWU7XG4gICAgdGhpcy5fd2VpZ2h0ID1cbiAgICAgIG9wdGlvbnMud2VpZ2h0ICE9PSB1bmRlZmluZWRcbiAgICAgICAgPyBNYXRoVXRpbHMuY2xhbXAob3B0aW9ucy53ZWlnaHQsIDAsIDEpXG4gICAgICAgIDogMDtcbiAgICB0aGlzLl9pbnRlcm5hbFdlaWdodCA9IHRoaXMuX3dlaWdodDtcbiAgICB0aGlzLl9wYXVzZWQgPSBmYWxzZTtcblxuICAgIHRoaXMuX3Byb21pc2VzID0ge1xuICAgICAgZmluaXNoOiBEZWZlcnJlZC5yZXNvbHZlKCksXG4gICAgICB3ZWlnaHQ6IERlZmVycmVkLnJlc29sdmUoKSxcbiAgICAgIHBsYXk6IERlZmVycmVkLnJlc29sdmUoKSxcbiAgICB9O1xuXG4gICAgdGhpcy5fcGxheUNhbGxiYWNrcyA9IHtcbiAgICAgIG9uRmluaXNoOiB1bmRlZmluZWQsXG4gICAgICBvbkVycm9yOiB1bmRlZmluZWQsXG4gICAgICBvbkNhbmNlbDogdW5kZWZpbmVkLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB3aGV0aGVyIG9yIG5vdCB0aGUgc3RhdGUgaXMgY3VycmVudGx5IHBhdXNlZC5cbiAgICpcbiAgICogQHR5cGUge251bWJlcn1cbiAgICovXG4gIGdldCBwYXVzZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3BhdXNlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGFuZCBzZXRzIHRoZSB1c2VyIGRlZmluZWQgd2VpZ2h0LlxuICAgKlxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0IHdlaWdodCgpIHtcbiAgICByZXR1cm4gdGhpcy5fd2VpZ2h0O1xuICB9XG5cbiAgc2V0IHdlaWdodCh3ZWlnaHQpIHtcbiAgICB0aGlzLl93ZWlnaHQgPSBNYXRoVXRpbHMuY2xhbXAod2VpZ2h0LCAwLCAxKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHdoZXRoZXIgb3Igbm90IHRoZSB3ZWlnaHQgaXMgY3VycmVudGx5IGJlaW5nIGFuaW1hdGVkLlxuICAgKlxuICAgKiBAcmVhZG9ubHlcbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqL1xuICBnZXQgd2VpZ2h0UGVuZGluZygpIHtcbiAgICByZXR1cm4gdGhpcy5fcHJvbWlzZXMud2VpZ2h0ICYmIHRoaXMuX3Byb21pc2VzLndlaWdodC5wZW5kaW5nO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIHVzZXIgZGVmaW5lZCB3ZWlnaHQgb3ZlciB0aW1lLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gd2VpZ2h0IC0gVGhlIHRhcmdldCB3ZWlnaHQgdmFsdWUuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbc2Vjb25kcz0wXSAtIFRoZSBhbW91bnQgb2YgdGltZSBpdCB3aWxsIHRha2UgdG8gcmVhY2ggdGhlXG4gICAqIHRhcmdldCB3ZWlnaHQuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBlYXNpbmdGbiAtIFRoZSBlYXNpbmcgZnVuY3Rpb24gdG8gdXNlIGZvciBpbnRlcnBvbGF0aW9uLlxuICAgKlxuICAgKiBAcmV0dXJucyB7RGVmZXJyZWR9XG4gICAqL1xuICBzZXRXZWlnaHQod2VpZ2h0LCBzZWNvbmRzID0gMCwgZWFzaW5nRm4pIHtcbiAgICB0aGlzLl9wcm9taXNlcy53ZWlnaHQuY2FuY2VsKCk7XG4gICAgd2VpZ2h0ID0gTWF0aFV0aWxzLmNsYW1wKHdlaWdodCk7XG5cbiAgICB0aGlzLl9wcm9taXNlcy53ZWlnaHQgPSBBbmltYXRpb25VdGlscy5pbnRlcnBvbGF0ZVByb3BlcnR5KFxuICAgICAgdGhpcyxcbiAgICAgICd3ZWlnaHQnLFxuICAgICAgd2VpZ2h0LFxuICAgICAge3NlY29uZHMsIGVhc2luZ0ZufVxuICAgICk7XG5cbiAgICByZXR1cm4gdGhpcy5fcHJvbWlzZXMud2VpZ2h0O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGludGVybmFsIHdlaWdodC5cbiAgICpcbiAgICogQHJlYWRvbmx5XG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqL1xuICBnZXQgaW50ZXJuYWxXZWlnaHQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2ludGVybmFsV2VpZ2h0O1xuICB9XG5cbiAgLyoqXG4gICAqIE11bHRpcGxpZXMgdGhlIHVzZXIgd2VpZ2h0IGJ5IGEgZmFjdG9yIHRvIGRldGVybWluZSB0aGUgaW50ZXJuYWwgd2VpZ2h0LlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gZmFjdG9yIC0gMC0xIG11bHRpcGxpZXIgdG8gYXBwbHkgdG8gdGhlIHVzZXIgd2VpZ2h0LlxuICAgKi9cbiAgdXBkYXRlSW50ZXJuYWxXZWlnaHQoZmFjdG9yKSB7XG4gICAgdGhpcy5faW50ZXJuYWxXZWlnaHQgPSB0aGlzLl93ZWlnaHQgKiBmYWN0b3I7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIGFueSB2YWx1ZXMgdGhhdCBuZWVkIHRvIGJlIGV2YWx1YXRlZCBldmVyeSBmcmFtZS5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGRlbHRhVGltZSAtIFRpbWUgaW4gbWlsbGlzZWNvbmRzIHNpbmNlIHRoZSBsYXN0IHVwZGF0ZS5cbiAgICovXG4gIHVwZGF0ZShkZWx0YVRpbWUpIHtcbiAgICBpZiAoIXRoaXMuX3BhdXNlZCkge1xuICAgICAgT2JqZWN0LnZhbHVlcyh0aGlzLl9wcm9taXNlcykuZm9yRWFjaChwcm9taXNlID0+IHtcbiAgICAgICAgcHJvbWlzZS5leGVjdXRlKGRlbHRhVGltZSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU3RhcnQgcGxheWJhY2sgb2YgdGhlIHN0YXRlIGZyb20gdGhlIGJlZ2lubmluZy5cbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9uRmluaXNoIC0gRnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBzdGF0ZSBmaW5pc2hlcy5cbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9uRXJyb3IgLSBGdW5jdGlvbiB0byBleGVjdXRlIGlmIHRoZSBzdGF0ZSBlbmNvdW50ZXJzXG4gICAqIGFuIGVycm9yIGR1cmluZyBwbGF5YmFjay5cbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9uQ2FuY2VsIC0gRnVuY3Rpb24gdG8gZXhlY3V0ZSBpZiBwbGF5YmFjayBpcyBjYW5jZWxlZC5cbiAgICpcbiAgICogQHJldHVybnMge0RlZmVycmVkfVxuICAgKi9cbiAgcGxheShvbkZpbmlzaCwgb25FcnJvciwgb25DYW5jZWwpIHtcbiAgICB0aGlzLl9wYXVzZWQgPSBmYWxzZTtcbiAgICB0aGlzLl9wbGF5Q2FsbGJhY2tzLm9uRmluaXNoID0gb25GaW5pc2g7XG4gICAgdGhpcy5fcGxheUNhbGxiYWNrcy5vbkVycm9yID0gb25FcnJvcjtcbiAgICB0aGlzLl9wbGF5Q2FsbGJhY2tzLm9uQ2FuY2VsID0gb25DYW5jZWw7XG5cbiAgICB0aGlzLl9wcm9taXNlcy5wbGF5ID0gbmV3IERlZmVycmVkKHVuZGVmaW5lZCwgb25GaW5pc2gsIG9uRXJyb3IsIG9uQ2FuY2VsKTtcbiAgICB0aGlzLl9wcm9taXNlcy5maW5pc2ggPSBEZWZlcnJlZC5hbGwoW1xuICAgICAgdGhpcy5fcHJvbWlzZXMucGxheSxcbiAgICAgIHRoaXMuX3Byb21pc2VzLndlaWdodCxcbiAgICBdKTtcblxuICAgIHJldHVybiB0aGlzLl9wcm9taXNlcy5maW5pc2g7XG4gIH1cblxuICAvKipcbiAgICogUGF1c2UgcGxheWJhY2sgb2YgdGhlIHN0YXRlLiBUaGlzIHByZXZlbnRzIHBlbmRpbmcgcHJvbWlzZXMgZnJvbSBiZWluZyBleGVjdXRlZC5cbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBwYXVzZSgpIHtcbiAgICB0aGlzLl9wYXVzZWQgPSB0cnVlO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc3VtZSBwbGF5YmFjayBvZiB0aGUgc3RhdGUuXG4gICAqXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvbkZpbmlzaCAtIEZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgc3RhdGUgZmluaXNoZXMuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvbkVycm9yIC0gRnVuY3Rpb24gdG8gZXhlY3V0ZSBpZiB0aGUgc3RhdGUgZW5jb3VudGVyc1xuICAgKiBhbiBlcnJvciBkdXJpbmcgcGxheWJhY2suXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvbkNhbmNlbCAtIEZ1bmN0aW9uIHRvIGV4ZWN1dGUgaWYgcGxheWJhY2sgaXMgY2FuY2VsZWQuXG4gICAqXG4gICAqIEByZXR1cm5zIHtEZWZlcnJlZH1cbiAgICovXG4gIHJlc3VtZShvbkZpbmlzaCwgb25FcnJvciwgb25DYW5jZWwpIHtcbiAgICB0aGlzLl9wYXVzZWQgPSBmYWxzZTtcblxuICAgIGlmICghdGhpcy5fcHJvbWlzZXMucGxheS5wZW5kaW5nKSB7XG4gICAgICB0aGlzLl9wbGF5Q2FsbGJhY2tzLm9uRmluaXNoID0gb25GaW5pc2ggfHwgdGhpcy5fcGxheUNhbGxiYWNrcy5vbkZpbmlzaDtcbiAgICAgIHRoaXMuX3BsYXlDYWxsYmFja3Mub25FcnJvciA9IG9uRXJyb3IgfHwgdGhpcy5fcGxheUNhbGxiYWNrcy5vbkVycm9yO1xuICAgICAgdGhpcy5fcGxheUNhbGxiYWNrcy5vbkNhbmNlbCA9IG9uQ2FuY2VsIHx8IHRoaXMuX3BsYXlDYWxsYmFja3Mub25DYW5jZWw7XG5cbiAgICAgIHRoaXMuX3Byb21pc2VzLnBsYXkgPSBuZXcgRGVmZXJyZWQoXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgdGhpcy5fcGxheUNhbGxiYWNrcy5vbkZpbmlzaCxcbiAgICAgICAgdGhpcy5fcGxheUNhbGxiYWNrcy5vbkVycm9yLFxuICAgICAgICB0aGlzLl9wbGF5Q2FsbGJhY2tzLm9uQ2FuY2VsXG4gICAgICApO1xuICAgICAgdGhpcy5fcHJvbWlzZXMuZmluaXNoID0gRGVmZXJyZWQuYWxsKFtcbiAgICAgICAgdGhpcy5fcHJvbWlzZXMucGxheSxcbiAgICAgICAgdGhpcy5fcHJvbWlzZXMud2VpZ2h0LFxuICAgICAgXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3Byb21pc2VzLmZpbmlzaDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYW5jZWwgcGxheWJhY2sgb2YgdGhlIHN0YXRlIGFuZCBjYW5jZWwgYW55IHBlbmRpbmcgcHJvbWlzZXMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgY2FuY2VsKCkge1xuICAgIHRoaXMuX3BhdXNlZCA9IHRydWU7XG5cbiAgICBPYmplY3QudmFsdWVzKHRoaXMuX3Byb21pc2VzKS5mb3JFYWNoKHByb21pc2UgPT4ge1xuICAgICAgcHJvbWlzZS5jYW5jZWwoKTtcbiAgICB9KTtcblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0b3AgcGxheWJhY2sgb2YgdGhlIHN0YXRlIGFuZCByZXNvbHZlIGFueSBwZW5kaW5nIHByb21pc2VzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIHN0b3AoKSB7XG4gICAgdGhpcy5fcGF1c2VkID0gdHJ1ZTtcblxuICAgIE9iamVjdC52YWx1ZXModGhpcy5fcHJvbWlzZXMpLmZvckVhY2gocHJvbWlzZSA9PiB7XG4gICAgICBwcm9taXNlLnJlc29sdmUoKTtcbiAgICB9KTtcblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbmNlbCBhbnkgcGVuZGluZyBwcm9taXNlcyBhbmQgcmVtb3ZlIHJlZmVyZW5jZSB0byB0aGVtLlxuICAgKi9cbiAgZGlzY2FyZCgpIHtcbiAgICB0aGlzLmNhbmNlbCgpO1xuXG4gICAgZGVsZXRlIHRoaXMuX3Byb21pc2VzO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvcmNlIHRoZSBpbnRlcm5hbCB3ZWlnaHQgdG8gMC4gU2hvdWxkIGJlIGNhbGxlZCBiZWZvcmUgc3dpdGNoaW5nIG9yIHRyYW5zaXRpb25pbmdcbiAgICogdG8gYSBuZXcgc3RhdGUuXG4gICAqL1xuICBkZWFjdGl2YXRlKCkge1xuICAgIHRoaXMudXBkYXRlSW50ZXJuYWxXZWlnaHQoMCk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQWJzdHJhY3RTdGF0ZTtcbiIsIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxyXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTBcclxuaW1wb3J0IERlZmVycmVkIGZyb20gJ2NvcmUvRGVmZXJyZWQnO1xyXG5pbXBvcnQgQWJzdHJhY3RTdGF0ZSBmcm9tICcuL0Fic3RyYWN0U3RhdGUnO1xyXG5cclxuLyoqXHJcbiAqIENsYXNzIGZvciBzbW9vdGggdHJhbnNpdGlvbmluZyBiZXR3ZWVuIHN0YXRlcyBvbiBhbiBhbmltYXRpb24gbGF5ZXIuXHJcbiAqXHJcbiAqIEBleHRlbmRzIEFic3RyYWN0U3RhdGVcclxuICovXHJcbmNsYXNzIFRyYW5zaXRpb25TdGF0ZSBleHRlbmRzIEFic3RyYWN0U3RhdGUge1xyXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMgPSB7fSkge1xyXG4gICAgc3VwZXIob3B0aW9ucyk7XHJcblxyXG4gICAgdGhpcy5fdG8gPSBudWxsO1xyXG4gICAgdGhpcy5fZnJvbSA9IFtdO1xyXG4gICAgdGhpcy5fd2VpZ2h0UHJvbWlzZSA9IERlZmVycmVkLnJlc29sdmUoKTtcclxuICB9XHJcblxyXG4gIGdldCBpbnRlcm5hbFdlaWdodCgpIHtcclxuICAgIC8vIEZpbmQgdGhlIGNvbWJpbmVkIHdlaWdodCBvZiBhbGwgc3ViLXN0YXRlc1xyXG4gICAgbGV0IHRvdGFsV2VpZ2h0ID0gMDtcclxuXHJcbiAgICBpZiAodGhpcy5fdG8pIHtcclxuICAgICAgdG90YWxXZWlnaHQgKz0gdGhpcy5fdG8ud2VpZ2h0O1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX2Zyb20uZm9yRWFjaChzdGF0ZSA9PiB7XHJcbiAgICAgIHRvdGFsV2VpZ2h0ICs9IHN0YXRlLndlaWdodDtcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiB0b3RhbFdlaWdodCAqIHRoaXMuX2ludGVybmFsV2VpZ2h0O1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlSW50ZXJuYWxXZWlnaHQoZmFjdG9yKSB7XHJcbiAgICBzdXBlci51cGRhdGVJbnRlcm5hbFdlaWdodChmYWN0b3IpO1xyXG5cclxuICAgIHRoaXMuX2Zyb20uZm9yRWFjaChzdGF0ZSA9PiB7XHJcbiAgICAgIHN0YXRlLnVwZGF0ZUludGVybmFsV2VpZ2h0KHRoaXMuX2ludGVybmFsV2VpZ2h0KTtcclxuICAgIH0pO1xyXG5cclxuICAgIGlmICh0aGlzLl90bykge1xyXG4gICAgICB0aGlzLl90by51cGRhdGVJbnRlcm5hbFdlaWdodCh0aGlzLl9pbnRlcm5hbFdlaWdodCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGUgc3ViLXN0YXRlcyB0aGUgdHJhbnNpdGlvbiBpcyBjb250cm9sbGluZyBhbmQgc3RhcnQgbmV3IHdlaWdodFxyXG4gICAqIGFuaW1hdGlvbnMgb24gZWFjaCBvbmUuIFRoaXMgc2hvdWxkIGJlIGNhbGxlZCBlYWNoIHRpbWUgdGhlIGN1cnJlbnQgc3RhdGUgb2ZcclxuICAgKiBhbiBhbmltYXRpb24gbGF5ZXIgZ2V0cyB1cGRhdGVkIHRvIGEgbmV3IHZhbHVlIGFuZCBhIHRyYW5zaXRpb24gdGltZSBncmVhdGVyXHJcbiAgICogdGhhdCB6ZXJvIGlzIHNwZWNpZmllZC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7QXJyYXkuPEFic3RyYWN0U3RhdGU+fSBbY3VycmVudFN0YXRlcz1bXV0gLSBTdGF0ZXMgd2hvc2Ugd2VpZ2h0IHZhbHVlc1xyXG4gICAqIHdpbGwgYmUgYW5pbWF0ZWQgdG8gMC5cclxuICAgKiBAcGFyYW0ge0Fic3RyYWN0U3RhdGU9fSB0YXJnZXRTdGF0ZSAtIFN0YXRlIHdob3NlIHdlaWdodCB3aWxsIGJlIGFuaW1hdGVkXHJcbiAgICogdG8gMS5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gdHJhbnNpdGlvblRpbWUgLSBBbW91bnQgb2YgdGltZSBpdCB3aWxsIGluIHNlY29uZHMgdGFrZSBmb3JcclxuICAgKiB3ZWlnaHQgYW5pbWF0aW9ucyB0byBjb21wbGV0ZS5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gZWFzaW5nRm4gLSBFYXNpbmcgZnVuY3Rpb24gdG8gdXNlIGZvciB3ZWlnaHQgYW5pbWF0aW9ucy5cclxuICAgKiBEZWZhdWx0IGlzIEVhc2luZy5MaW5lYXIuSW5PdXQuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9uQ29tcGxldGUgLSBGdW5jdGlvbiB0byBleGVjdXRlIG9uY2UgYWxsIHdlaWdodCBhbmltYXRpb25zXHJcbiAgICogY29tcGxldGUuXHJcbiAgICovXHJcbiAgY29uZmlndXJlKFxyXG4gICAgY3VycmVudFN0YXRlcyA9IFtdLFxyXG4gICAgdGFyZ2V0U3RhdGUsXHJcbiAgICB0cmFuc2l0aW9uVGltZSxcclxuICAgIGVhc2luZ0ZuLFxyXG4gICAgb25Db21wbGV0ZVxyXG4gICkge1xyXG4gICAgLy8gRGVhY3RpdmF0ZSBhbnkgc3RhdGVzIHRoYXQgYXJlbid0IGluIHRoZSBuZXcgY29uZmlndXJhdGlvblxyXG4gICAgaWYgKHRoaXMuX3RvID09PSB0YXJnZXRTdGF0ZSB8fCBjdXJyZW50U3RhdGVzLmluY2x1ZGVzKHRoaXMuX3RvKSkge1xyXG4gICAgICB0aGlzLl90byA9IG51bGw7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9mcm9tID0gdGhpcy5fZnJvbS5maWx0ZXIoXHJcbiAgICAgIHN0YXRlID0+IHN0YXRlICE9PSB0YXJnZXRTdGF0ZSAmJiAhY3VycmVudFN0YXRlcy5pbmNsdWRlcyhzdGF0ZSlcclxuICAgICk7XHJcbiAgICB0aGlzLmRlYWN0aXZhdGUoKTtcclxuXHJcbiAgICB0aGlzLl9mcm9tID0gY3VycmVudFN0YXRlcztcclxuICAgIHRoaXMuX3RvID0gdGFyZ2V0U3RhdGU7XHJcbiAgICB0aGlzLnJlc2V0KHRyYW5zaXRpb25UaW1lLCBlYXNpbmdGbiwgb25Db21wbGV0ZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTdGFydCBuZXcgd2VpZ2h0IGFuaW1hdGlvbnMgc3RhdGUgdGhlIHRyYW5zaXRpb24gY29udHJvbHMuIFRoaXMgc2hvdWxkIGJlIGNhbGxlZFxyXG4gICAqIGlmIGFuIGFuaW1hdGlvbiBpcyBwbGF5ZWQgd2l0aCBhIHRyYW5zaXRpb24gdGltZSBncmVhdGVyIHRoYW4gemVybyBhbmQgYSB0cmFuc3Rpb25cclxuICAgKiB0byB0aGF0IGFuaW1hdGlvbiB3YXMgYWxyZWFkeSBpbiBwcm9ncmVzcy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB0cmFuc2l0aW9uVGltZSAtIEFtb3VudCBvZiB0aW1lIGl0IHdpbGwgaW4gc2Vjb25kcyB0YWtlIGZvclxyXG4gICAqIHdlaWdodCBhbmltYXRpb25zIHRvIGNvbXBsZXRlLlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBlYXNpbmdGbiAtIEVhc2luZyBmdW5jdGlvbiB0byB1c2UgZm9yIHdlaWdodCBhbmltYXRpb25zLlxyXG4gICAqIERlZmF1bHQgaXMgRWFzaW5nLkxpbmVhci5Jbk91dC5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb25Db21wbGV0ZSAtIEZ1bmN0aW9uIHRvIGV4ZWN1dGUgb25jZSBhbGwgd2VpZ2h0IGFuaW1hdGlvbnNcclxuICAgKiBjb21wbGV0ZS5cclxuICAgKi9cclxuICByZXNldCh0cmFuc2l0aW9uVGltZSwgZWFzaW5nRm4sIG9uQ29tcGxldGUpIHtcclxuICAgIC8vIFN0b3AgYW55IHBlbmRpbmcgcHJvbWlzZXNcclxuICAgIHRoaXMuX3dlaWdodFByb21pc2UuY2FuY2VsKCk7XHJcblxyXG4gICAgLy8gU3RhcnQgdHdlZW5pbmcgd2VpZ2h0IHRvIDAgZm9yIHRoZSBjdXJyZW50IHN0YXRlc1xyXG4gICAgY29uc3Qgd2VpZ2h0UHJvbWlzZXMgPSB0aGlzLl9mcm9tLm1hcChzdGF0ZSA9PlxyXG4gICAgICBzdGF0ZS5zZXRXZWlnaHQoMCwgdHJhbnNpdGlvblRpbWUsIGVhc2luZ0ZuKVxyXG4gICAgKTtcclxuXHJcbiAgICAvLyBTdGFydCB0d2VlbmluZyB3ZWlnaHQgdG8gMSBmb3IgdGhlIHRhcmdldCBzdGF0ZVxyXG4gICAgaWYgKHRoaXMuX3RvKSB7XHJcbiAgICAgIHdlaWdodFByb21pc2VzLnB1c2godGhpcy5fdG8uc2V0V2VpZ2h0KDEsIHRyYW5zaXRpb25UaW1lLCBlYXNpbmdGbikpO1xyXG4gICAgICB0aGlzLm5hbWUgPSB0aGlzLl90by5uYW1lO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5uYW1lID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl93ZWlnaHRQcm9taXNlID0gRGVmZXJyZWQuYWxsKHdlaWdodFByb21pc2VzLCAoKSA9PiB7XHJcbiAgICAgIHRoaXMuX2Zyb20uZm9yRWFjaChzdGF0ZSA9PiB7XHJcbiAgICAgICAgc3RhdGUuY2FuY2VsKCk7XHJcbiAgICAgICAgc3RhdGUuZGVhY3RpdmF0ZSgpO1xyXG4gICAgICB9KTtcclxuICAgICAgaWYgKHR5cGVvZiBvbkNvbXBsZXRlID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgb25Db21wbGV0ZSgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHBsYXkob25GaW5pc2gsIG9uRXJyb3IsIG9uQ2FuY2VsLCBvbk5leHQpIHtcclxuICAgIHRoaXMuX3BhdXNlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5fcGxheUNhbGxiYWNrcy5vbkZpbmlzaCA9IG9uRmluaXNoO1xyXG4gICAgdGhpcy5fcGxheUNhbGxiYWNrcy5vbkVycm9yID0gb25FcnJvcjtcclxuICAgIHRoaXMuX3BsYXlDYWxsYmFja3Mub25DYW5jZWwgPSBvbkNhbmNlbDtcclxuXHJcbiAgICBjb25zdCBwcm9taXNlcyA9IFt0aGlzLl93ZWlnaHRQcm9taXNlXTtcclxuXHJcbiAgICB0aGlzLl9mcm9tLmZvckVhY2goc3RhdGUgPT4ge1xyXG4gICAgICBzdGF0ZS5yZXN1bWUoKTtcclxuICAgIH0pO1xyXG5cclxuICAgIGlmICh0aGlzLl90bykge1xyXG4gICAgICB0aGlzLl9wcm9taXNlcy5wbGF5ID0gdGhpcy5fdG8ucGxheShcclxuICAgICAgICB1bmRlZmluZWQsXHJcbiAgICAgICAgdW5kZWZpbmVkLFxyXG4gICAgICAgIHVuZGVmaW5lZCxcclxuICAgICAgICBvbk5leHRcclxuICAgICAgKTtcclxuICAgICAgcHJvbWlzZXMucHVzaCh0aGlzLl9wcm9taXNlcy5wbGF5KTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9wcm9taXNlcy5maW5pc2ggPSBEZWZlcnJlZC5hbGwocHJvbWlzZXMsIG9uRmluaXNoLCBvbkVycm9yLCBvbkNhbmNlbCk7XHJcbiAgICByZXR1cm4gdGhpcy5fcHJvbWlzZXMuZmluaXNoO1xyXG4gIH1cclxuXHJcbiAgcGF1c2UoKSB7XHJcbiAgICB0aGlzLl9mcm9tLmZvckVhY2goc3RhdGUgPT4ge1xyXG4gICAgICBzdGF0ZS5wYXVzZSgpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKHRoaXMuX3RvKSB7XHJcbiAgICAgIHRoaXMuX3RvLnBhdXNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHN1cGVyLnBhdXNlKCk7XHJcbiAgfVxyXG5cclxuICByZXN1bWUob25GaW5pc2gsIG9uRXJyb3IsIG9uQ2FuY2VsLCBvbk5leHQpIHtcclxuICAgIHRoaXMuX3BhdXNlZCA9IGZhbHNlO1xyXG5cclxuICAgIGlmICghdGhpcy5fcHJvbWlzZXMucGxheS5wZW5kaW5nKSB7XHJcbiAgICAgIHRoaXMuX3BsYXlDYWxsYmFja3Mub25GaW5pc2ggPSBvbkZpbmlzaCB8fCB0aGlzLl9wbGF5Q2FsbGJhY2tzLm9uRmluaXNoO1xyXG4gICAgICB0aGlzLl9wbGF5Q2FsbGJhY2tzLm9uRXJyb3IgPSBvbkVycm9yIHx8IHRoaXMuX3BsYXlDYWxsYmFja3Mub25FcnJvcjtcclxuICAgICAgdGhpcy5fcGxheUNhbGxiYWNrcy5vbkNhbmNlbCA9IG9uQ2FuY2VsIHx8IHRoaXMuX3BsYXlDYWxsYmFja3Mub25DYW5jZWw7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgcHJvbWlzZXMgPSBbdGhpcy5fd2VpZ2h0UHJvbWlzZV07XHJcblxyXG4gICAgdGhpcy5fZnJvbS5mb3JFYWNoKHN0YXRlID0+IHtcclxuICAgICAgc3RhdGUucmVzdW1lKCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAodGhpcy5fdG8pIHtcclxuICAgICAgdGhpcy5fcHJvbWlzZXMucGxheSA9IHRoaXMuX3RvLnJlc3VtZShcclxuICAgICAgICB1bmRlZmluZWQsXHJcbiAgICAgICAgdW5kZWZpbmVkLFxyXG4gICAgICAgIHVuZGVmaW5lZCxcclxuICAgICAgICBvbk5leHRcclxuICAgICAgKTtcclxuICAgICAgcHJvbWlzZXMucHVzaCh0aGlzLl9wcm9taXNlcy5wbGF5KTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9wcm9taXNlcy5maW5pc2ggPSBEZWZlcnJlZC5hbGwoXHJcbiAgICAgIHByb21pc2VzLFxyXG4gICAgICB0aGlzLl9wbGF5Q2FsbGJhY2tzLm9uRmluaXNoLFxyXG4gICAgICB0aGlzLl9wbGF5Q2FsbGJhY2tzLm9uRXJyb3IsXHJcbiAgICAgIHRoaXMuX3BsYXlDYWxsYmFja3Mub25DYW5jZWxcclxuICAgICk7XHJcbiAgICByZXR1cm4gdGhpcy5fcHJvbWlzZXMuZmluaXNoO1xyXG4gIH1cclxuXHJcbiAgY2FuY2VsKCkge1xyXG4gICAgdGhpcy5fZnJvbS5mb3JFYWNoKHN0YXRlID0+IHtcclxuICAgICAgc3RhdGUucGF1c2UoKTtcclxuICAgIH0pO1xyXG5cclxuICAgIGlmICh0aGlzLl90bykge1xyXG4gICAgICB0aGlzLl90by5jYW5jZWwoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl93ZWlnaHRQcm9taXNlLmNhbmNlbCgpO1xyXG5cclxuICAgIHJldHVybiBzdXBlci5jYW5jZWwoKTtcclxuICB9XHJcblxyXG4gIHN0b3AoKSB7XHJcbiAgICB0aGlzLl9mcm9tLmZvckVhY2goc3RhdGUgPT4ge1xyXG4gICAgICBzdGF0ZS5wYXVzZSgpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKHRoaXMuX3RvKSB7XHJcbiAgICAgIHRoaXMuX3RvLnN0b3AoKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gc3VwZXIuc3RvcCgpO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlKGRlbHRhVGltZSkge1xyXG4gICAgc3VwZXIudXBkYXRlKGRlbHRhVGltZSk7XHJcblxyXG4gICAgdGhpcy5fZnJvbS5mb3JFYWNoKHN0YXRlID0+IHtcclxuICAgICAgc3RhdGUudXBkYXRlKGRlbHRhVGltZSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAodGhpcy5fdG8pIHtcclxuICAgICAgdGhpcy5fdG8udXBkYXRlKGRlbHRhVGltZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBkaXNjYXJkKCkge1xyXG4gICAgc3VwZXIuZGlzY2FyZCgpO1xyXG5cclxuICAgIHRoaXMuX3dlaWdodFByb21pc2UuY2FuY2VsKCk7XHJcbiAgICBkZWxldGUgdGhpcy5fd2VpZ2h0UHJvbWlzZTtcclxuICAgIHRoaXMuX3RvID0gbnVsbDtcclxuICAgIHRoaXMuX2Zyb20ubGVuZ3RoID0gMDtcclxuICB9XHJcblxyXG4gIGRlYWN0aXZhdGUoKSB7XHJcbiAgICBpZiAodGhpcy5fdG8pIHtcclxuICAgICAgdGhpcy5fdG8uZGVhY3RpdmF0ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX2Zyb20uZm9yRWFjaChzdGF0ZSA9PiB7XHJcbiAgICAgIHN0YXRlLmRlYWN0aXZhdGUoKTtcclxuICAgIH0pO1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgVHJhbnNpdGlvblN0YXRlO1xyXG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxuLyogZXNsaW50LWRpc2FibGUgbWF4LWNsYXNzZXMtcGVyLWZpbGUgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1lbXB0eS1mdW5jdGlvbiAqL1xuLyogZXNsaW50LWRpc2FibGUgZ2V0dGVyLXJldHVybiAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tdXNlbGVzcy1jb25zdHJ1Y3RvciAqL1xuaW1wb3J0IFRyYW5zaXRpb25TdGF0ZSBmcm9tICcuL3N0YXRlL1RyYW5zaXRpb25TdGF0ZSc7XG5pbXBvcnQgRGVmZXJyZWQgZnJvbSAnLi4vRGVmZXJyZWQnO1xuXG4vKipcbiAqIENsYXNzIGZhY3RvcnkgaW50ZXJmYWNlIGZvciBjb250cm9sbGluZyBwbGF5YmFjayBvZiBhIGNvbGxlY3Rpb24gb2YgYW5pbWF0aW9ucy5cbiAqIE9uZSBhbmltYXRpb24gY2FuIGJlIHBsYXllZCBhdCBhbnkgZ2l2ZW4gdGltZSwgY3Jvc3NmYWRpbmcgYmV0d2VlbiBhbmltYXRpb25zXG4gKiB3aWxsIHJlc3VsdCBpbiBwbGF5aW5nIGEge0BsaW5rIFRyYW5zaXRpb25TdGF0ZX0uXG4gKlxuICogQGludGVyZmFjZVxuICovXG5jbGFzcyBBbmltYXRpb25QbGF5ZXJJbnRlcmZhY2Uge1xuICAvKipcbiAgICogR2V0cyB3aGV0aGVyIG9yIG5vdCB0aGUgcGxheWVyIGlzIHVwZGF0aW5nIHN0YXRlcy5cbiAgICpcbiAgICogQHJlYWRvbmx5XG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKi9cbiAgZ2V0IHBhdXNlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fcGF1c2VkO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgYW5kIHNldHMgdGhlIGRlZmF1bHQgbnVtYmVyIG9mIHNlY29uZHMgaXQgdGFrZXMgdG8gdHJhbnNpdGlvbiB0byBhIG5ld1xuICAgKiBhbmltYXRpb24uXG4gICAqXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqL1xuICBnZXQgdHJhbnNpdGlvblRpbWUoKSB7fVxuXG4gIHNldCB0cmFuc2l0aW9uVGltZShzZWNvbmRzKSB7fVxuXG4gIC8qKlxuICAgKiBHZXRzIGFuZCBzZXRzIHRoZSBkZWZhdWx0IGVhc2luZyBmdW5jdGlvbiB0byB1c2Ugd2hlbiB0cmFuc2l0aW9uaW5nIGFuZFxuICAgKiBzZXR0aW5nIHdlaWdodHMuXG4gICAqXG4gICAqIEB0eXBlIHtGdW5jdGlvbn1cbiAgICovXG4gIGdldCBlYXNpbmdGbigpIHt9XG5cbiAgc2V0IGVhc2luZ0ZuKGZuKSB7fVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBzdGF0ZSB0aGUgbGF5ZXIgaXMgY3VycmVudGx5IGluIGNvbnRyb2wgb2YuXG4gICAqXG4gICAqIEByZWFkb25seVxuICAgKiBAdHlwZSB7QWJzdHJhY3RTdGF0ZX1cbiAgICovXG4gIGdldCBjdXJyZW50U3RhdGUoKSB7fVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBuYW1lIG9mIHRoZSBzdGF0ZSB0aGUgbGF5ZXIgaXMgY3VycmVudGx5IGluIGNvbnRyb2wgb2YuXG4gICAqXG4gICAqIEByZWFkb25seVxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKi9cbiAgZ2V0IGN1cnJlbnRBbmltYXRpb24oKSB7fVxuXG4gIC8qKlxuICAgKiBHZXRzIHdoZXRoZXIgb3Igbm90IHRoZSBsYXllciBpcyBjdXJyZW50bHkgdHJhbnNpdGlvbmluZyB0byBhIG5ldyBhbmltYXRpb24uXG4gICAqXG4gICAqIEByZWFkb25seVxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICovXG4gIGdldCBpc1RyYW5zaXRpb25pbmcoKSB7fVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgdGhlIGxheWVyJ3MgY3VycmVudCBzdGF0ZSB0byBhIG5ldyB2YWx1ZS4gSWYgdHJhbnNpdGlvblRpbWUgaXMgZGVmaW5lZFxuICAgKiBhbmQgZ3JlYXRlciB0aGFuIHplcm8sIHBlcmZvcm0gYSBzbW9vdGggYmxlbmQgYmV0d2VlbiBhbnkgc3RhdGVzIHRoYXQgY3VycmVudGx5XG4gICAqIGhhdmUgbm9uLXplcm8gd2VpZ2h0IHZhbHVlcyBhbmQgdGhlIG5ldyBzdGF0ZS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICpcbiAgICogQHBhcmFtIHsoc3RyaW5nfG51bGwpfSBuYW1lIC0gTmFtZSBvZiB0aGUgc3RhdGUgdG8gdHJhbnNpdGlvbiB0by5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHBsYXlNZXRob2QgLSBOYW1lIG9mIHRoZSBvcGVyYXRpb24gYmVpbmcgcHJlcGFyZWQgZm9yLCB0byBiZVxuICAgKiB1c2VkIGluIGVycm9yIG1lc3NhZ2luZy5cbiAgICogQHBhcmFtIHtudW1iZXI9fSB0cmFuc2l0aW9uVGltZSAtIEFtb3VudCBvZiB0aW1lIGluIHNlY29uZHMgaXQgd2lsbCB0YWtlIHRvXG4gICAqIHN3aXRjaCB0byB0aGUgbmV3IHN0YXRlLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gZWFzaW5nRm4gLSBFYXNpbmcgZnVuY3Rpb24gdG8gdXNlIHdoZW4gdHJhbnNpdGlvbmluZyB0byBhXG4gICAqIG5ldyBzdGF0ZSBvdmVyIHRpbWUuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvbkVycm9yIC0gRnVuY3Rpb24gdG8gZXhlY3V0ZSBpZiBhbiBlcnJvciBpcyBlbmNvdW50ZXJlZC5cbiAgICovXG4gIF9wcmVwYXJlQ3VycmVudFN0YXRlKG5hbWUsIHBsYXlNZXRob2QsIHRyYW5zaXRpb25UaW1lLCBlYXNpbmdGbiwgb25FcnJvcikge31cblxuICAvKipcbiAgICogU3RhcnQgcGxheWJhY2sgYW4gYW5pbWF0aW9uIGZyb20gdGhlIGJlZ2lubmluZy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBOYW1lIG9mIHRoZSBhbmltYXRpb24gdG8gcGxheS5cbiAgICogQHBhcmFtIHtudW1iZXI9fSB0cmFuc2l0aW9uVGltZSAtIEFtb3VudCBvZiB0aW1lIGl0IHdpbGwgdGFrZSBiZWZvcmUgdGhlXG4gICAqIG5ldyBzdGF0ZSBoYXMgZnVsbCBpbmZsdWVuY2UgZm9yIHRoZSBsYXllci5cbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IGVhc2luZ0ZuIC0gRWFzaW5nIGZ1bmN0aW9uIHRvIHVzZSBmb3IgYmxlbmRpbmcgaWYgdHJhbnNpdGlvblRpbWVcbiAgICogaXMgZ3JlYXRlciB0aGFuIHplcm8uXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvbkZpbmlzaCAtIEZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgYW5pbWF0aW9uIGZpbmlzaGVzLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb25FcnJvciAtIEZ1bmN0aW9uIHRvIGV4ZWN1dGUgaWYgdGhlIGFuaW1hdGlvbiBlbmNvdW50ZXJzXG4gICAqIGFuIGVycm9yIGR1cmluZyBwbGF5YmFjay5cbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9uQ2FuY2VsIC0gRnVuY3Rpb24gdG8gZXhlY3V0ZSBpZiBwbGF5YmFjayBpcyBjYW5jZWxlZC5cbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9uTmV4dCAtIEZ1bmN0aW9uIHRvIGV4ZWN1dGUgaWYgYW4gYW5pbWF0aW9uIHF1ZXVlIGlzXG4gICAqIHBsYXllZCBhbmQgaXQgYWR2YW5jZXMgdG8gdGhlIG5leHQgYW5pbWF0aW9uLlxuICAgKlxuICAgKiBAcmV0dXJucyB7RGVmZXJyZWR9XG4gICAqL1xuICBwbGF5QW5pbWF0aW9uKFxuICAgIG5hbWUsXG4gICAgdHJhbnNpdGlvblRpbWUsXG4gICAgZWFzaW5nRm4sXG4gICAgb25GaW5pc2gsXG4gICAgb25FcnJvcixcbiAgICBvbkNhbmNlbCxcbiAgICBvbk5leHRcbiAgKSB7fVxuXG4gIC8qKlxuICAgKiBDYW5jZWwgcGxheWJhY2sgb2YgdGhlIGN1cnJlbnQgYW5pbWF0aW9uLlxuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGNhbmNlbEFuaW1hdGlvbigpIHt9XG5cbiAgLyoqXG4gICAqIFBhdXNlIHBsYXliYWNrIG9mIHRoZSBjdXJyZW50IGFuaW1hdGlvbi5cbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBwYXVzZUFuaW1hdGlvbigpIHt9XG5cbiAgLyoqXG4gICAqIFJlc3VtZSBwbGF5YmFjayBvZiBhbiBhbmltYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nPX0gbmFtZSAtIE5hbWUgb2YgdGhlIGFuaW1hdGlvbiB0byByZXN1bWUgcGxheWJhY2sgZm9yLiBEZWZhdWx0XG4gICAqIGlzIHRoZSBsYXllcidzIGN1cnJlbnQgYW5pbWF0aW9uIG5hbWUuXG4gICAqIEBwYXJhbSB7bnVtYmVyPX0gdHJhbnNpdGlvblRpbWUgLSBBbW91bnQgb2YgdGltZSBpdCB3aWxsIHRha2UgYmVmb3JlIHRoZVxuICAgKiBuZXcgc3RhdGUgaGFzIGZ1bGwgaW5mbHVlbmNlIGZvciB0aGUgbGF5ZXIuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvbkZpbmlzaCAtIEZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgc3RhdGUgZmluaXNoZXMuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvbkVycm9yIC0gRnVuY3Rpb24gdG8gZXhlY3V0ZSBpZiB0aGUgc3RhdGUgZW5jb3VudGVyc1xuICAgKiBhbiBlcnJvciBkdXJpbmcgcGxheWJhY2suXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvbkNhbmNlbCAtIEZ1bmN0aW9uIHRvIGV4ZWN1dGUgaWYgcGxheWJhY2sgaXMgY2FuY2VsZWQuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvbk5leHQgLSBGdW5jdGlvbiB0byBleGVjdXRlIGlmIGFuIGFuaW1hdGlvbiBxdWV1ZSBpc1xuICAgKiBwbGF5ZWQgYW5kIGl0IGFkdmFuY2VzIHRvIHRoZSBuZXh0IGFuaW1hdGlvbi5cbiAgICpcbiAgICogQHJldHVybnMge0RlZmVycmVkfVxuICAgKi9cbiAgcmVzdW1lQW5pbWF0aW9uKFxuICAgIG5hbWUsXG4gICAgdHJhbnNpdGlvblRpbWUsXG4gICAgZWFzaW5nRm4sXG4gICAgb25GaW5pc2gsXG4gICAgb25FcnJvcixcbiAgICBvbkNhbmNlbCxcbiAgICBvbk5leHRcbiAgKSB7fVxuXG4gIC8qKlxuICAgKiBTdG9wIHBsYXliYWNrIG9mIHRoZSBjdXJyZW50IGFuaW1hdGlvbi5cbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBzdG9wQW5pbWF0aW9uKCkge31cblxuICAvKipcbiAgICogVXBkYXRlIHRoZSBjdXJyZW50IGFuaW1hdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGRlbHRhVGltZSAtIFRpbWUgaW4gbWlsbGlzZWNvbmRzIHNpbmNlIHRoZSBsYXN0IHVwZGF0ZS5cbiAgICovXG4gIHVwZGF0ZShkZWx0YVRpbWUpIHt9XG5cbiAgLyoqXG4gICAqIERpc2NhcmQgdGhlIHRyYW5zaXRpb24gc3RhdGUuXG4gICAqL1xuICBkaXNjYXJkKCkge31cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIGNsYXNzIHRoYXQgaW1wbGVtZW50cyB7QGxpbmsgQW5pbWF0aW9uUGxheWVySW50ZXJmYWNlfSBhbmQgZXh0ZW5kc1xuICAgKiBhIHNwZWNpZmllZCBiYXNlIGNsYXNzLlxuICAgKlxuICAgKiBAcGFyYW0ge0NsYXNzfSBbQmFzZUNsYXNzID0gY2xhc3N7fV0gLSBUaGUgY2xhc3MgdG8gZXh0ZW5kLlxuICAgKlxuICAgKiBAcmV0dXJuIHtDbGFzc30gQSBjbGFzcyB0aGF0IGV4dGVuZHMgYEJhc2VDbGFzc2AgYW5kIGltcGxlbWVudHMge0BsaW5rIEFuaW1hdGlvblBsYXllckludGVyZmFjZX0uXG4gICAqL1xuICBzdGF0aWMgTWl4aW4oQmFzZUNsYXNzID0gY2xhc3Mge30pIHtcbiAgICBjb25zdCBBbmltYXRpb25QbGF5ZXJNaXhpbiA9IGNsYXNzIGV4dGVuZHMgQmFzZUNsYXNzIHtcbiAgICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMgPSB7fSwgLi4uYXJncykge1xuICAgICAgICBzdXBlcihvcHRpb25zLCAuLi5hcmdzKTtcblxuICAgICAgICB0aGlzLl90cmFuc2l0aW9uU3RhdGUgPSBuZXcgVHJhbnNpdGlvblN0YXRlKCk7XG4gICAgICAgIHRoaXMuX3N0YXRlcyA9IHRoaXMuX3N0YXRlcyAhPT0gdW5kZWZpbmVkID8gdGhpcy5fc3RhdGVzIDogbmV3IE1hcCgpO1xuICAgICAgICB0aGlzLl9jdXJyZW50U3RhdGUgPSBudWxsO1xuICAgICAgICB0aGlzLl9wYXVzZWQgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLl90cmFuc2l0aW9uVGltZSA9XG4gICAgICAgICAgTnVtYmVyKG9wdGlvbnMudHJhbnNpdGlvblRpbWUpID49IDBcbiAgICAgICAgICAgID8gTnVtYmVyKG9wdGlvbnMudHJhbnNpdGlvblRpbWUpXG4gICAgICAgICAgICA6IDA7XG5cbiAgICAgICAgdGhpcy5fZWFzaW5nRm4gPVxuICAgICAgICAgIHR5cGVvZiBvcHRpb25zLmVhc2luZ0ZuID09PSAnZnVuY3Rpb24nID8gb3B0aW9ucy5lYXNpbmdGbiA6IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgZ2V0IHBhdXNlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BhdXNlZDtcbiAgICAgIH1cblxuICAgICAgZ2V0IHRyYW5zaXRpb25UaW1lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdHJhbnNpdGlvblRpbWU7XG4gICAgICB9XG5cbiAgICAgIHNldCB0cmFuc2l0aW9uVGltZShzZWNvbmRzKSB7XG4gICAgICAgIHNlY29uZHMgPSBOdW1iZXIoc2Vjb25kcyk7XG5cbiAgICAgICAgaWYgKCEoc2Vjb25kcyA+PSAwKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBDYW5ub3Qgc2V0IHRyYW5zaXRpb24gdGltZSBmb3IgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9IHRvICR7c2Vjb25kc30uIFNlY29uZHMgbXVzdCBiZSBhIG51bWVyaWMgdmFsdWUgZ3JlYXRoZXIgdGhhbiBvciBlcXVhbCB0byB6ZXJvLmBcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fdHJhbnNpdGlvblRpbWUgPSBzZWNvbmRzO1xuICAgICAgfVxuXG4gICAgICBnZXQgZWFzaW5nRm4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lYXNpbmdGbjtcbiAgICAgIH1cblxuICAgICAgc2V0IGVhc2luZ0ZuKGZuKSB7XG4gICAgICAgIHRoaXMuX2Vhc2luZ0ZuID0gZm47XG4gICAgICB9XG5cbiAgICAgIGdldCBjdXJyZW50U3RhdGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jdXJyZW50U3RhdGU7XG4gICAgICB9XG5cbiAgICAgIGdldCBjdXJyZW50QW5pbWF0aW9uKCkge1xuICAgICAgICBpZiAodGhpcy5fY3VycmVudFN0YXRlKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRTdGF0ZS5uYW1lO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIGdldCBpc1RyYW5zaXRpb25pbmcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jdXJyZW50U3RhdGUgPT09IHRoaXMuX3RyYW5zaXRpb25TdGF0ZTtcbiAgICAgIH1cblxuICAgICAgX3ByZXBhcmVDdXJyZW50U3RhdGUoXG4gICAgICAgIG5hbWUsXG4gICAgICAgIHBsYXlNZXRob2QsXG4gICAgICAgIHRyYW5zaXRpb25UaW1lLFxuICAgICAgICBlYXNpbmdGbixcbiAgICAgICAgb25FcnJvclxuICAgICAgKSB7XG4gICAgICAgIGlmIChuYW1lICE9PSBudWxsICYmICF0aGlzLl9zdGF0ZXMuaGFzKG5hbWUpKSB7XG4gICAgICAgICAgY29uc3QgZSA9IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBDYW5ub3QgJHtwbGF5TWV0aG9kfSBhbmltYXRpb24gJHtuYW1lfS4gTm8gYW5pbWF0aW9uIGV4aXN0cyB3aXRoIHRoaXMgbmFtZS5gXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGlmICh0eXBlb2Ygb25FcnJvciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgb25FcnJvcihlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdGFyZ2V0U3RhdGUgPSBuYW1lICE9PSBudWxsID8gdGhpcy5fc3RhdGVzLmdldChuYW1lKSA6IG51bGw7XG5cbiAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBuZXcgc3RhdGUgaXNuJ3QgYWxyZWFkeSBwbGF5aW5nXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRBbmltYXRpb24gIT09IG5hbWUpIHtcbiAgICAgICAgICAvLyBTd2l0Y2ggdG8gdGhlIG5ldyBzdGF0ZSBpbW1lZGlhdGVseVxuICAgICAgICAgIGlmICh0cmFuc2l0aW9uVGltZSA8PSAwKSB7XG4gICAgICAgICAgICAvLyBDYW5jZWwgdGhlIGN1cnJlbnQgc3RhdGUgYW5kIHNldCBpdHMgd2VpZ2h0IHRvIDBcbiAgICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50U3RhdGUpIHtcbiAgICAgICAgICAgICAgdGhpcy5fY3VycmVudFN0YXRlLmNhbmNlbCgpO1xuICAgICAgICAgICAgICB0aGlzLl9jdXJyZW50U3RhdGUud2VpZ2h0ID0gMDtcbiAgICAgICAgICAgICAgdGhpcy5fY3VycmVudFN0YXRlLmRlYWN0aXZhdGUoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fY3VycmVudFN0YXRlID0gdGFyZ2V0U3RhdGU7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIEJsZW5kIHRvIHRoZSBuZXcgc3RhdGUgb3ZlciB0aW1lXG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBNYWtlIHN1cmUgdG8gdHJhbnNpdGlvbiBvdXQgb2YgYW55IHN0YXRlcyB3aXRoIG5vbi16ZXJvIHdlaWdodFxuICAgICAgICAgICAgY29uc3QgY3VycmVudFN0YXRlcyA9IFsuLi50aGlzLl9zdGF0ZXMudmFsdWVzKCldLmZpbHRlcihcbiAgICAgICAgICAgICAgcyA9PiBzICE9PSB0YXJnZXRTdGF0ZSAmJiAocy53ZWlnaHQgfHwgcy53ZWlnaHRQZW5kaW5nKVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSB0cmFuc2l0aW9uIHN0YXRlIHdpdGggbmV3IGlucHV0c1xuICAgICAgICAgICAgdGhpcy5fdHJhbnNpdGlvblN0YXRlLmNvbmZpZ3VyZShcbiAgICAgICAgICAgICAgY3VycmVudFN0YXRlcyxcbiAgICAgICAgICAgICAgdGFyZ2V0U3RhdGUsXG4gICAgICAgICAgICAgIHRyYW5zaXRpb25UaW1lLFxuICAgICAgICAgICAgICBlYXNpbmdGbixcbiAgICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRTdGF0ZSA9IHRhcmdldFN0YXRlO1xuICAgICAgICAgICAgICAgIHRoaXMuX3RyYW5zaXRpb25TdGF0ZS53ZWlnaHQgPSAwO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICB0aGlzLl9jdXJyZW50U3RhdGUgPSB0aGlzLl90cmFuc2l0aW9uU3RhdGU7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHBsYXlNZXRob2QgPT09ICdwbGF5Jykge1xuICAgICAgICAgIHRoaXMuX2N1cnJlbnRTdGF0ZS5jYW5jZWwoKTtcblxuICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50U3RhdGUgPT09IHRoaXMuX3RyYW5zaXRpb25TdGF0ZSkge1xuICAgICAgICAgICAgdGhpcy5fdHJhbnNpdGlvblN0YXRlLnJlc2V0KHRyYW5zaXRpb25UaW1lLCBlYXNpbmdGbiwgKCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLl9jdXJyZW50U3RhdGUgPSB0YXJnZXRTdGF0ZTtcbiAgICAgICAgICAgICAgdGhpcy5fdHJhbnNpdGlvblN0YXRlLndlaWdodCA9IDA7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBVcGRhdGUgd2VpZ2h0IGZvciB0aGUgbmV3IGN1cnJlbnQgc3RhdGUgc28gaXQgaGFzIGZ1bGwgaW5mbHVlbmNlIGZvciB0aGUgcGxheWVyXG4gICAgICAgIHRoaXMuX2N1cnJlbnRTdGF0ZS53ZWlnaHQgPSAxO1xuICAgICAgICB0aGlzLl9jdXJyZW50U3RhdGUudXBkYXRlSW50ZXJuYWxXZWlnaHQodGhpcy5faW50ZXJuYWxXZWlnaHQpO1xuICAgICAgfVxuXG4gICAgICBwbGF5QW5pbWF0aW9uKFxuICAgICAgICBuYW1lLFxuICAgICAgICB0cmFuc2l0aW9uVGltZSxcbiAgICAgICAgZWFzaW5nRm4sXG4gICAgICAgIG9uRmluaXNoLFxuICAgICAgICBvbkVycm9yLFxuICAgICAgICBvbkNhbmNlbCxcbiAgICAgICAgb25OZXh0XG4gICAgICApIHtcbiAgICAgICAgbGV0IGVycm9yO1xuICAgICAgICBsZXQgcmVqZWN0ID0gZmFsc2U7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdGhpcy5fcHJlcGFyZUN1cnJlbnRTdGF0ZShcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAncGxheScsXG4gICAgICAgICAgICB0cmFuc2l0aW9uVGltZSAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgID8gdHJhbnNpdGlvblRpbWVcbiAgICAgICAgICAgICAgOiB0aGlzLl90cmFuc2l0aW9uVGltZSxcbiAgICAgICAgICAgIGVhc2luZ0ZuICE9PSB1bmRlZmluZWQgPyBlYXNpbmdGbiA6IHRoaXMuX2Vhc2luZ0ZuLFxuICAgICAgICAgICAgb25FcnJvclxuICAgICAgICAgICk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBlcnJvciA9IGU7XG4gICAgICAgICAgcmVqZWN0ID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyZWplY3QpIHtcbiAgICAgICAgICByZXR1cm4gRGVmZXJyZWQucmVqZWN0KGVycm9yKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLl9jdXJyZW50U3RhdGUucGxheShvbkZpbmlzaCwgb25FcnJvciwgb25DYW5jZWwsIG9uTmV4dCk7XG4gICAgICB9XG5cbiAgICAgIHBhdXNlQW5pbWF0aW9uKCkge1xuICAgICAgICBpZiAodGhpcy5fY3VycmVudFN0YXRlKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRTdGF0ZS5wYXVzZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXN1bWVBbmltYXRpb24oXG4gICAgICAgIG5hbWUsXG4gICAgICAgIHRyYW5zaXRpb25UaW1lLFxuICAgICAgICBlYXNpbmdGbixcbiAgICAgICAgb25GaW5pc2gsXG4gICAgICAgIG9uRXJyb3IsXG4gICAgICAgIG9uQ2FuY2VsLFxuICAgICAgICBvbk5leHRcbiAgICAgICkge1xuICAgICAgICBpZiAobmFtZSA9PT0gdW5kZWZpbmVkICYmIHRoaXMuX2N1cnJlbnRTdGF0ZSkge1xuICAgICAgICAgIG5hbWUgPSB0aGlzLl9jdXJyZW50U3RhdGUubmFtZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBlcnJvcjtcbiAgICAgICAgbGV0IHJlamVjdCA9IGZhbHNlO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHRoaXMuX3ByZXBhcmVDdXJyZW50U3RhdGUoXG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgJ3Jlc3VtZScsXG4gICAgICAgICAgICB0cmFuc2l0aW9uVGltZSAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgID8gdHJhbnNpdGlvblRpbWVcbiAgICAgICAgICAgICAgOiB0aGlzLl90cmFuc2l0aW9uVGltZSxcbiAgICAgICAgICAgIGVhc2luZ0ZuICE9PSB1bmRlZmluZWQgPyBlYXNpbmdGbiA6IHRoaXMuX2Vhc2luZ0ZuLFxuICAgICAgICAgICAgb25FcnJvclxuICAgICAgICAgICk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBlcnJvciA9IGU7XG4gICAgICAgICAgcmVqZWN0ID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyZWplY3QpIHtcbiAgICAgICAgICByZXR1cm4gRGVmZXJyZWQucmVqZWN0KGVycm9yKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLl9jdXJyZW50U3RhdGUucmVzdW1lKG9uRmluaXNoLCBvbkVycm9yLCBvbkNhbmNlbCwgb25OZXh0KTtcbiAgICAgIH1cblxuICAgICAgY2FuY2VsQW5pbWF0aW9uKCkge1xuICAgICAgICBpZiAodGhpcy5fY3VycmVudFN0YXRlKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRTdGF0ZS5jYW5jZWwoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgc3RvcEFuaW1hdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRTdGF0ZSkge1xuICAgICAgICAgIHJldHVybiB0aGlzLl9jdXJyZW50U3RhdGUuc3RvcCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB1cGRhdGUoZGVsdGFUaW1lKSB7XG4gICAgICAgIGlmIChzdXBlci51cGRhdGUpIHtcbiAgICAgICAgICBzdXBlci51cGRhdGUoZGVsdGFUaW1lKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9jdXJyZW50U3RhdGUpIHtcbiAgICAgICAgICB0aGlzLl9jdXJyZW50U3RhdGUudXBkYXRlKGRlbHRhVGltZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZGlzY2FyZCgpIHtcbiAgICAgICAgaWYgKHN1cGVyLmRpc2NhcmQpIHtcbiAgICAgICAgICBzdXBlci5kaXNjYXJkKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl90cmFuc2l0aW9uU3RhdGUuZGlzY2FyZCgpO1xuICAgICAgICBkZWxldGUgdGhpcy5fdHJhbnNpdGlvblN0YXRlO1xuICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gQW5pbWF0aW9uUGxheWVyTWl4aW47XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQW5pbWF0aW9uUGxheWVySW50ZXJmYWNlO1xuIiwiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTBcbi8qIGVzbGludC1kaXNhYmxlIG1heC1jbGFzc2VzLXBlci1maWxlICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tZW1wdHktZnVuY3Rpb24gKi9cbi8qIGVzbGludC1kaXNhYmxlIGdldHRlci1yZXR1cm4gKi9cblxuaW1wb3J0IFV0aWxzIGZyb20gJy4uLy4uL1V0aWxzJztcblxuLyoqXG4gKiBDbGFzcyBmYWN0b3J5IGludGVyZmFjZSBmb3IgbWFuaXB1bGF0aW5nIGEgY29sbGVjdGlvbiBvZiB7QGxpbmsgQWJzdHJhY3RTdGF0ZX0uXG4gKlxuICogQGludGVyZmFjZVxuICovXG5jbGFzcyBTdGF0ZUNvbnRhaW5lckludGVyZmFjZSB7XG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIHN0YXRlIHdpdGggdGhlIGdpdmVuIG5hbWUuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gTmFtZSBvZiB0aGUgc3RhdGUuXG4gICAqXG4gICAqIEByZXR1cm5zIHtBYnN0cmFjdFN0YXRlfVxuICAgKi9cbiAgZ2V0U3RhdGUobmFtZSkge31cblxuICAvKipcbiAgICogR2V0cyBhbiBhcnJheSBvZiB0aGUgbmFtZXMgb2YgYWxsIHN0YXRlcyBpbiB0aGUgY29udGFpbmVyLlxuICAgKlxuICAgKiBAdHlwZSB7QXJyYXkuPHN0cmluZz59XG4gICAqL1xuICBnZXRTdGF0ZU5hbWVzKCkge31cblxuICAvKipcbiAgICogQWRkIGEgbmV3IHN0YXRlIHRvIGJlIGNvbnRyb2xsZWQgYnkgdGhlIGNvbnRhaW5lci4gU3RhdGVzIGFyZSBzdG9yZWQga2V5ZWRcbiAgICogYnkgdGhlaXIgbmFtZSBwcm9wZXJ0eSwgd2hpY2ggbXVzdCBiZSB1bmlxdWUuIElmIGl0IGlzbid0LCBhIG51bWJlciB3aWxsXG4gICAqIGJlIGFkZGVkIG9yIGluY3JlbWVudGVkIHVudGlsIGEgdW5pcXVlIGtleSBpcyBnZW5lcmF0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7QWJzdHJhY3RTdGF0ZX0gc3RhdGUgLSBTdGF0ZSB0byBhZGQgdG8gdGhlIGNvbnRhaW5lci5cbiAgICpcbiAgICogQHJldHVybnMge3N0cmluZ30gLSBVbmlxdWUgbmFtZSBvZiB0aGUgc3RhdGUuXG4gICAqL1xuICBhZGRTdGF0ZShzdGF0ZSkge31cblxuICAvKipcbiAgICogUmVtb3ZlcyBhIHN0YXRlIHdpdGggdGhlIGdpdmVuIG5hbWUgZnJvbSB0aGUgY29udGFpbmVyLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIE5hbWUgb2YgdGhlIHN0YXRlIHRvIHJlbW92ZS5cbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59IC0gV2hldGhlciBvciBub3QgYSBzdGF0ZSB3YXMgcmVtb3ZlZC5cbiAgICovXG4gIHJlbW92ZVN0YXRlKG5hbWUpIHt9XG5cbiAgLyoqXG4gICAqIFJlbmFtZXMgYSBzdGF0ZSB3aXRoIHRoZSBnaXZlbiBuYW1lIGluIHRoZSBjb250YWluZXIuIE5hbWUgbXVzdCBiZSB1bmlxdWVcbiAgICogdG8gdGhlIGNvbnRhaW5lciwgaWYgaXQgaXNuJ3QgdGhlIG5hbWUgd2lsbCBiZSBpbmNyZW1lbnRlZCB1bnRpbCBpdCBpcyB1bmlxdWUuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjdXJyZW50TmFtZSAtIE5hbWUgb2YgdGhlIHN0YXRlIHRvIHJlbmFtZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG5ld05hbWUgLSBOYW1lIHRvIHVwZGF0ZSB0aGUgc3RhdGUgd2l0aC5cbiAgICpcbiAgICogQHJldHVybnMge3N0cmluZ30gLSBVcGRhdGVkIG5hbWUgZm9yIHRoZSBzdGF0ZS5cbiAgICovXG4gIHJlbmFtZVN0YXRlKGN1cnJlbnROYW1lLCBuZXdOYW1lKSB7fVxuXG4gIC8qKlxuICAgKiBEaXNjYXJkcyBhbGwgc3RhdGVzLlxuICAgKi9cbiAgZGlzY2FyZFN0YXRlcygpIHt9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBjbGFzcyB0aGF0IGltcGxlbWVudHMge0BsaW5rIFN0YXRlQ29udGFpbmVySW50ZXJmYWNlfSBhbmQgZXh0ZW5kc1xuICAgKiBhIHNwZWNpZmllZCBiYXNlIGNsYXNzLlxuICAgKlxuICAgKiBAcGFyYW0ge0NsYXNzfSBbQmFzZUNsYXNzID0gY2xhc3N7fV0gLSBUaGUgY2xhc3MgdG8gZXh0ZW5kLlxuICAgKlxuICAgKiBAcmV0dXJuIHtDbGFzc30gQSBjbGFzcyB0aGF0IGV4dGVuZHMgYEJhc2VDbGFzc2AgYW5kIGltcGxlbWVudHMge0BsaW5rIFN0YXRlQ29udGFpbmVySW50ZXJmYWNlfS5cbiAgICovXG4gIHN0YXRpYyBNaXhpbihCYXNlQ2xhc3MgPSBjbGFzcyB7fSkge1xuICAgIC8qKlxuICAgICAqIFRoaXMgbWl4aW4gYWRkcyBmdW5jdGlvbmFsaXR5IGZvciBtYW5pcHVsYXRpbmcgdW5pcXVlbHktbmFtZWQgYW5pbWF0aW9uIHN0YXRlcyBpblxuICAgICAqIGEgbWFwLlxuICAgICAqL1xuICAgIGNvbnN0IFN0YXRlQ29udGFpbmVyTWl4aW4gPSBjbGFzcyBleHRlbmRzIEJhc2VDbGFzcyB7XG4gICAgICBjb25zdHJ1Y3RvcihvcHRpb25zID0ge30sIC4uLmFyZ3MpIHtcbiAgICAgICAgc3VwZXIob3B0aW9ucywgLi4uYXJncyk7XG5cbiAgICAgICAgdGhpcy5fc3RhdGVzID0gdGhpcy5fc3RhdGVzICE9PSB1bmRlZmluZWQgPyB0aGlzLl9zdGF0ZXMgOiBuZXcgTWFwKCk7XG4gICAgICB9XG5cbiAgICAgIGdldFN0YXRlKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXRlcy5nZXQobmFtZSk7XG4gICAgICB9XG5cbiAgICAgIGdldFN0YXRlTmFtZXMoKSB7XG4gICAgICAgIHJldHVybiBbLi4udGhpcy5fc3RhdGVzLmtleXMoKV07XG4gICAgICB9XG5cbiAgICAgIGFkZFN0YXRlKHN0YXRlKSB7XG4gICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgc3RhdGUgaXMgbm90IGFscmVhZHkgaW4gdGhpcyBjb250YWluZXJcbiAgICAgICAgaWYgKFsuLi50aGlzLl9zdGF0ZXMudmFsdWVzKCldLmluY2x1ZGVzKHN0YXRlKSkge1xuICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgIGBDYW5ub3QgYWRkIGFuaW1hdGlvbiB0byBzdGF0ZSAke3RoaXMubmFtZX0uIEFuaW1hdGlvbiB3YXMgYWxyZWFkeSBhZGRlZC5gXG4gICAgICAgICAgKTtcbiAgICAgICAgICByZXR1cm4gc3RhdGUubmFtZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgc3RhdGUgbmFtZSBpcyB1bmlxdWVcbiAgICAgICAgY29uc3QgdW5pcXVlTmFtZSA9IFV0aWxzLmdldFVuaXF1ZU5hbWUoc3RhdGUubmFtZSwgW1xuICAgICAgICAgIC4uLnRoaXMuX3N0YXRlcy5rZXlzKCksXG4gICAgICAgIF0pO1xuXG4gICAgICAgIGlmIChzdGF0ZS5uYW1lICE9PSB1bmlxdWVOYW1lKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgYEFuaW1hdGlvbiBuYW1lICR7c3RhdGUubmFtZX0gaXMgbm90IHVuaXF1ZSBmb3Igc3RhdGUgJHt0aGlzLm5hbWV9LiBOZXcgYW5pbWF0aW9uIHdpbGwgYmUgYWRkZWQgd2l0aCBuYW1lICR7dW5pcXVlTmFtZX0uYFxuICAgICAgICAgICk7XG4gICAgICAgICAgc3RhdGUubmFtZSA9IHVuaXF1ZU5hbWU7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9zdGF0ZXMuc2V0KHN0YXRlLm5hbWUsIHN0YXRlKTtcblxuICAgICAgICByZXR1cm4gc3RhdGUubmFtZTtcbiAgICAgIH1cblxuICAgICAgcmVtb3ZlU3RhdGUobmFtZSkge1xuICAgICAgICAvLyBDaGVjayBpZiB0aGUgc3RhdGUgaXMgaW4gdGhpcyBjb250YWluZXJcbiAgICAgICAgaWYgKCF0aGlzLl9zdGF0ZXMgfHwgIXRoaXMuX3N0YXRlcy5oYXMobmFtZSkpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICBgRGlkIG5vdCByZW1vdmUgYW5pbWF0aW9uICR7bmFtZX0gZnJvbSBzdGF0ZSAke3RoaXMubmFtZX0uIE5vIGFuaW1hdGlvbiBleGlzdHMgd2l0aCB0aGlzIG5hbWUuYFxuICAgICAgICAgICk7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fc3RhdGVzLmdldChuYW1lKS5kaXNjYXJkKCk7XG4gICAgICAgIHRoaXMuX3N0YXRlcy5kZWxldGUobmFtZSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICByZW5hbWVTdGF0ZShjdXJyZW50TmFtZSwgbmV3TmFtZSkge1xuICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIHN0YXRlIGlzIGluIHRoaXMgY29udGFpbmVyXG4gICAgICAgIGlmICghdGhpcy5fc3RhdGVzIHx8ICF0aGlzLl9zdGF0ZXMuaGFzKGN1cnJlbnROYW1lKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBDYW5ub3QgcmVuYW1lIGFuaW1hdGlvbiAke2N1cnJlbnROYW1lfSBpbiAke3RoaXMubmFtZX0uIE5vIGFuaW1hdGlvbiBleGlzdHMgd2l0aCB0aGlzIG5hbWUuYFxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzdGF0ZSA9IHRoaXMuX3N0YXRlcy5nZXQoY3VycmVudE5hbWUpO1xuXG4gICAgICAgIC8vIEV4aXQgaWYgdGhlIG5hbWVzIGFyZSB0aGUgc2FtZVxuICAgICAgICBpZiAoY3VycmVudE5hbWUgPT09IG5ld05hbWUpIHtcbiAgICAgICAgICByZXR1cm4gY3VycmVudE5hbWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIG5hbWUgaXMgdW5pcXVlXG4gICAgICAgIGNvbnN0IHVuaXF1ZU5hbWUgPSBVdGlscy5nZXRVbmlxdWVOYW1lKFxuICAgICAgICAgIG5ld05hbWUsXG4gICAgICAgICAgWy4uLnRoaXMuX3N0YXRlcy5rZXlzKCldLmZpbHRlcihzID0+IHMubmFtZSAhPT0gY3VycmVudE5hbWUpXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKG5ld05hbWUgIT09IHVuaXF1ZU5hbWUpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICBgQW5pbWF0aW9uIG5hbWUgJHtuZXdOYW1lfSBpcyBub3QgdW5pcXVlIGluIHN0YXRlICR7dGhpcy5uYW1lfS4gQW5pbWF0aW9uIHdpbGwgYmUgcmVuYW1lZCB0byAke3VuaXF1ZU5hbWV9LmBcbiAgICAgICAgICApO1xuICAgICAgICAgIG5ld05hbWUgPSB1bmlxdWVOYW1lO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RhdGUubmFtZSA9IG5ld05hbWU7XG4gICAgICAgIHRoaXMuX3N0YXRlcy5kZWxldGUoY3VycmVudE5hbWUpO1xuICAgICAgICB0aGlzLl9zdGF0ZXMuc2V0KHN0YXRlLm5hbWUsIHN0YXRlKTtcblxuICAgICAgICByZXR1cm4gc3RhdGUubmFtZTtcbiAgICAgIH1cblxuICAgICAgZGlzY2FyZFN0YXRlcygpIHtcbiAgICAgICAgdGhpcy5fc3RhdGVzLmZvckVhY2goc3RhdGUgPT4ge1xuICAgICAgICAgIHN0YXRlLmRpc2NhcmQoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZGVsZXRlIHRoaXMuX3N0YXRlcztcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBTdGF0ZUNvbnRhaW5lck1peGluO1xuICB9XG59XG5leHBvcnQgZGVmYXVsdCBTdGF0ZUNvbnRhaW5lckludGVyZmFjZTtcbiIsIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVC0wXG5pbXBvcnQgQWJzdHJhY3RTdGF0ZSBmcm9tICcuL0Fic3RyYWN0U3RhdGUnO1xuaW1wb3J0IEFuaW1hdGlvblBsYXllckludGVyZmFjZSBmcm9tICcuLi9BbmltYXRpb25QbGF5ZXJJbnRlcmZhY2UnO1xuaW1wb3J0IFN0YXRlQ29udGFpbmVySW50ZXJmYWNlIGZyb20gJy4vU3RhdGVDb250YWluZXJJbnRlcmZhY2UnO1xuXG4vKipcbiAqIENsYXNzIGZvciBwbGF5aW5nIGFuIG9yZGVyZWQgYXJyYXkgb2YgYW5pbWF0aW9uIHN0YXRlcyBpbiBzZXF1ZW5jZS5cbiAqXG4gKiBAZXh0ZW5kcyBBYnN0cmFjdFN0YXRlXG4gKiBAaW1wbGVtZW50cyBAQW5pbWF0aW9uUGxheWVySW50ZXJmYWNlXG4gKi9cbmNsYXNzIFF1ZXVlU3RhdGUgZXh0ZW5kcyBBbmltYXRpb25QbGF5ZXJJbnRlcmZhY2UuTWl4aW4oXG4gIFN0YXRlQ29udGFpbmVySW50ZXJmYWNlLk1peGluKEFic3RyYWN0U3RhdGUpXG4pIHtcbiAgLyoqXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIC0gT3B0aW9ucyBmb3IgdGhlIHN0YXRlLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmF1dG9BZHZhbmNlPXRydWVdIC0gV2hldGhlciB0byBhdXRtYXRpY2FsbHkgYWR2YW5jZVxuICAgKiB0byB0aGUgbmV4dCBzdGF0ZSBpbiB0aGUgcXVldWUgYXMgZWFjaCBzdGF0ZSBjb21wbGV0ZXMuXG4gICAqIEBwYXJhbSB7QXJyYXkuPEFic3RyYWN0U3RhdGU+fSBbcXVldWVTdGF0ZXM9W11dIC0gQXJyYXkgb2Ygc3RhdGVzIHRvIGJlIHBsYXllZFxuICAgKiBpbiBvcmRlci5cbiAgICovXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMgPSB7fSwgcXVldWVTdGF0ZXMgPSBbXSkge1xuICAgIHN1cGVyKG9wdGlvbnMpO1xuXG4gICAgcXVldWVTdGF0ZXMuZm9yRWFjaChzdGF0ZSA9PiB7XG4gICAgICB0aGlzLmFkZFN0YXRlKHN0YXRlKTtcbiAgICB9KTtcblxuICAgIHRoaXMuX3F1ZXVlID0gdGhpcy5fc3RhdGVzLmtleXMoKTtcbiAgICB0aGlzLl9kb25lID0gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHdoZXRoZXIgdGhlIGFuaW1hdGlvbiBxdWV1ZSBoYXMgcmVhY2hlZCB0aGUgZW5kLlxuICAgKi9cbiAgZ2V0IGRvbmUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RvbmU7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgaW50ZXJuYWwgd2VpZ2h0LlxuICAgKlxuICAgKiBAcmVhZG9ubHlcbiAgICogQHR5cGUge251bWJlcn1cbiAgICovXG4gIGdldCBpbnRlcm5hbFdlaWdodCgpIHtcbiAgICByZXR1cm4gdGhpcy5fY3VycmVudFN0YXRlXG4gICAgICA/IHRoaXMuX2N1cnJlbnRTdGF0ZS5pbnRlcm5hbFdlaWdodCAqIHRoaXMuX2ludGVybmFsV2VpZ2h0XG4gICAgICA6IDA7XG4gIH1cblxuICAvKipcbiAgICogUmVzdGFydCB0aGUgcXVldWUgaXRlcmF0b3IuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfcmVzZXQoKSB7XG4gICAgdGhpcy5fcXVldWUgPSB0aGlzLl9zdGF0ZXMua2V5cygpO1xuICAgIGNvbnN0IHt2YWx1ZSwgZG9uZX0gPSB0aGlzLl9xdWV1ZS5uZXh0KCk7XG4gICAgdGhpcy5fZG9uZSA9IGRvbmU7XG5cbiAgICByZXR1cm4gdmFsdWUgfHwgbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBNdWx0aXBsaWVzIHRoZSB1c2VyIHdlaWdodCBieSBhIGZhY3RvciB0byBkZXRlcm1pbmUgdGhlIGludGVybmFsIHdlaWdodC5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGZhY3RvciAtIDAtMSBtdWx0aXBsaWVyIHRvIGFwcGx5IHRvIHRoZSB1c2VyIHdlaWdodC5cbiAgICovXG4gIHVwZGF0ZUludGVybmFsV2VpZ2h0KGZhY3Rvcikge1xuICAgIHN1cGVyLnVwZGF0ZUludGVybmFsV2VpZ2h0KGZhY3Rvcik7XG5cbiAgICBpZiAodGhpcy5fY3VycmVudFN0YXRlKSB7XG4gICAgICB0aGlzLl9jdXJyZW50U3RhdGUudXBkYXRlSW50ZXJuYWxXZWlnaHQodGhpcy5faW50ZXJuYWxXZWlnaHQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFydCB0aGUgbmV4dCBhbmltYXRpb24gaW4gdGhlIHF1ZXVlLlxuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb25OZXh0IC0gRnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgYW4gYW5pbWF0aW9uIGNvbXBsZXRlc1xuICAgKiBhbmQgdGhlIHF1ZXVlIG1vdmVzIHRvIHRoZSBuZXh0IGFuaW1hdGlvbi5cbiAgICogQHBhcmFtIHtib29sZWFufSBbd3JhcD1mYWxzZV0gLSBXaGV0aGVyIG9yIG5vdCB0byBzdGFydCB0aGUgcXVldWUgZnJvbSB0aGVcbiAgICogYmVnaW5uaW5nIGFnYWluIGlmIHRoZSBlbmQgaGFzIGJlZW4gcmVhY2hlZC5cbiAgICpcbiAgICogQHJldHVybnMge0RlZmVycmVkfVxuICAgKi9cbiAgbmV4dChvbk5leHQsIHdyYXAgPSBmYWxzZSkge1xuICAgIC8vIE1vdmUgdGhlIHF1ZXVlIGZvcndhcmRcbiAgICBjb25zdCB7dmFsdWU6IG5hbWUsIGRvbmV9ID0gdGhpcy5fcXVldWUubmV4dCgpO1xuICAgIHRoaXMuX2RvbmUgPSBkb25lO1xuICAgIHRoaXMuX3BhdXNlZCA9IGZhbHNlO1xuXG4gICAgLy8gVGhlIHF1ZXVlIGhhcyByZWFjaGVkIHRoZSBlbmRcbiAgICBpZiAoZG9uZSkge1xuICAgICAgLy8gU3RhcnQgdGhlIHF1ZXVlIG92ZXJcbiAgICAgIGlmICh3cmFwKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBsYXkoXG4gICAgICAgICAgdGhpcy5fcGxheUNhbGxiYWNrcy5vbkZpbmlzaCxcbiAgICAgICAgICB0aGlzLl9wbGF5Q2FsbGJhY2tzLm9uRXJyb3IsXG4gICAgICAgICAgdGhpcy5fcGxheUNhbGxiYWNrcy5vbkNhbmNlbCxcbiAgICAgICAgICBvbk5leHRcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIC8vIFN0b3AgdGhlIHF1ZXVlXG4gICAgICBlbHNlIHtcbiAgICAgICAgdGhpcy5fcHJvbWlzZXMuZmluaXNoLnJlc29sdmUoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Byb21pc2VzLmZpbmlzaDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTaWduYWwgdGhlIG5leHQgYW5pbWF0aW9uIGlzIHN0YXJ0aW5nXG4gICAgaWYgKHR5cGVvZiBvbk5leHQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNvbnN0IGxhc3ROYW1lID0gWy4uLnRoaXMuX3N0YXRlcy5rZXlzKCldW3RoaXMuX3N0YXRlcy5zaXplIC0gMV07XG4gICAgICBjb25zdCBpc1F1ZXVlRW5kID0gbmFtZSA9PT0gbGFzdE5hbWU7XG4gICAgICBvbk5leHQoe1xuICAgICAgICBuYW1lLFxuICAgICAgICBjYW5BZHZhbmNlOiB0aGlzLmdldFN0YXRlKG5hbWUpLmxvb3BDb3VudCAhPT0gSW5maW5pdHkgJiYgIWlzUXVldWVFbmQsXG4gICAgICAgIGlzUXVldWVFbmQsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBTdGFydCB0aGUgbmV4dCBhbmltYXRpb25cbiAgICB0aGlzLnBsYXlBbmltYXRpb24oXG4gICAgICBuYW1lLFxuICAgICAgdGhpcy5fdHJhbnNpdGlvblRpbWUsXG4gICAgICB0aGlzLl9lYXNpbmdGbixcbiAgICAgICgpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLl9wYXVzZWQgJiYgIXRoaXMuaXNUcmFuc2l0aW9uaW5nKSB7XG4gICAgICAgICAgdGhpcy5uZXh0KG9uTmV4dCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB0aGlzLl9wbGF5Q2FsbGJhY2tzLm9uRXJyb3JcbiAgICApO1xuXG4gICAgcmV0dXJuIHRoaXMuX3Byb21pc2VzLmZpbmlzaDtcbiAgfVxuXG4gIHBsYXkob25GaW5pc2gsIG9uRXJyb3IsIG9uQ2FuY2VsLCBvbk5leHQpIHtcbiAgICBjb25zdCBuYW1lID0gdGhpcy5fcmVzZXQoKTtcbiAgICBzdXBlci5wbGF5KG9uRmluaXNoLCBvbkVycm9yLCBvbkNhbmNlbCk7XG5cbiAgICBpZiAodGhpcy5fZG9uZSkge1xuICAgICAgdGhpcy5fcHJvbWlzZXMuZmluaXNoLnJlc29sdmUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gU2lnbmFsIHRoZSBuZXh0IGFuaW1hdGlvbiBpcyBzdGFydGluZ1xuICAgICAgaWYgKG5hbWUgIT09IHRoaXMuY3VycmVudEFuaW1hdGlvbiAmJiB0eXBlb2Ygb25OZXh0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGNvbnN0IGxhc3ROYW1lID0gWy4uLnRoaXMuX3N0YXRlcy5rZXlzKCldW3RoaXMuX3N0YXRlcy5zaXplIC0gMV07XG4gICAgICAgIGNvbnN0IGlzUXVldWVFbmQgPSBuYW1lID09PSBsYXN0TmFtZTtcbiAgICAgICAgb25OZXh0KHtcbiAgICAgICAgICBuYW1lLFxuICAgICAgICAgIGNhbkFkdmFuY2U6IG5hbWVcbiAgICAgICAgICAgID8gdGhpcy5nZXRTdGF0ZShuYW1lKS5sb29wQ291bnQgIT09IEluZmluaXR5ICYmICFpc1F1ZXVlRW5kXG4gICAgICAgICAgICA6IHRydWUsXG4gICAgICAgICAgaXNRdWV1ZUVuZDogIW5hbWUgfHwgaXNRdWV1ZUVuZCxcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIC8vIFN0YXJ0IHRoZSBuZXh0IGFuaW1hdGlvblxuICAgICAgdGhpcy5wbGF5QW5pbWF0aW9uKFxuICAgICAgICBuYW1lLFxuICAgICAgICB0aGlzLl9jdXJyZW50U3RhdGUgPyB0aGlzLl90cmFuc2l0aW9uVGltZSA6IDAsXG4gICAgICAgIHRoaXMuX2Vhc2luZ0ZuLFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgaWYgKCF0aGlzLl9wYXVzZWQgJiYgIXRoaXMuaXNUcmFuc2l0aW9uaW5nKSB7XG4gICAgICAgICAgICB0aGlzLm5leHQob25OZXh0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG9uRXJyb3JcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3Byb21pc2VzLmZpbmlzaDtcbiAgfVxuXG4gIHBhdXNlKCkge1xuICAgIGNvbnN0IHBhdXNlZCA9IHN1cGVyLnBhdXNlKCk7XG4gICAgdGhpcy5wYXVzZUFuaW1hdGlvbigpO1xuXG4gICAgcmV0dXJuIHBhdXNlZDtcbiAgfVxuXG4gIHJlc3VtZShvbkZpbmlzaCwgb25FcnJvciwgb25DYW5jZWwsIG9uTmV4dCkge1xuICAgIGlmICh0aGlzLl9kb25lKSB7XG4gICAgICByZXR1cm4gdGhpcy5wbGF5KG9uRmluaXNoLCBvbkVycm9yLCBvbkNhbmNlbCwgb25OZXh0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3VwZXIucmVzdW1lKG9uRmluaXNoLCBvbkVycm9yLCBvbkNhbmNlbCk7XG5cbiAgICAgIHRoaXMucmVzdW1lQW5pbWF0aW9uKFxuICAgICAgICB0aGlzLl9jdXJyZW50U3RhdGUubmFtZSxcbiAgICAgICAgdGhpcy5fdHJhbnNpdGlvblRpbWUsXG4gICAgICAgIHRoaXMuX2Vhc2luZ0ZuLFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgaWYgKCF0aGlzLl9wYXVzZWQgJiYgIXRoaXMuaXNUcmFuc2l0aW9uaW5nKSB7XG4gICAgICAgICAgICB0aGlzLm5leHQob25OZXh0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG9uRXJyb3JcbiAgICAgICk7XG5cbiAgICAgIHJldHVybiB0aGlzLl9wcm9taXNlcy5maW5pc2g7XG4gICAgfVxuICB9XG5cbiAgY2FuY2VsKCkge1xuICAgIGNvbnN0IGNhbmNlbGVkID0gc3VwZXIuY2FuY2VsKCk7XG5cbiAgICBpZiAodGhpcy5fY3VycmVudFN0YXRlKSB7XG4gICAgICB0aGlzLl9jdXJyZW50U3RhdGUuY2FuY2VsKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNhbmNlbGVkO1xuICB9XG5cbiAgc3RvcCgpIHtcbiAgICBjb25zdCBzdG9wcGVkID0gc3VwZXIuc3RvcCgpO1xuICAgIHRoaXMuc3RvcEFuaW1hdGlvbigpO1xuICAgIHRoaXMuX2RvbmUgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHN0b3BwZWQ7XG4gIH1cblxuICBkaXNjYXJkKCkge1xuICAgIHN1cGVyLmRpc2NhcmQoKTtcblxuICAgIHRoaXMuZGlzY2FyZFN0YXRlcygpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFF1ZXVlU3RhdGU7XG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxuaW1wb3J0IERlZmVycmVkIGZyb20gJ2NvcmUvRGVmZXJyZWQnO1xuaW1wb3J0IE1hdGhVdGlscyBmcm9tICdjb3JlL01hdGhVdGlscyc7XG5pbXBvcnQgQWJzdHJhY3RTdGF0ZSBmcm9tICcuL0Fic3RyYWN0U3RhdGUnO1xuaW1wb3J0IFN0YXRlQ29udGFpbmVySW50ZXJmYWNlIGZyb20gJy4vU3RhdGVDb250YWluZXJJbnRlcmZhY2UnO1xuXG4vKipcbiAqIEJhc2UgY2xhc3MgZm9yIGEgc3RhdGUgdGhhdCBibGVuZHMgYSBjb2xsZWN0aW9uIG9mIHtAbGluayBBYnN0cmFjdFN0YXRlfS5cbiAqXG4gKiBAYWJzdHJhY3RcbiAqIEBpbXBsZW1lbnRzIFN0YXRlQ29udGFpbmVySW50ZXJmYWNlXG4gKi9cbmNsYXNzIEFic3RyYWN0QmxlbmRTdGF0ZSBleHRlbmRzIFN0YXRlQ29udGFpbmVySW50ZXJmYWNlLk1peGluKEFic3RyYWN0U3RhdGUpIHtcbiAgY29uc3RydWN0b3Iob3B0aW9ucyA9IHt9LCBibGVuZFN0YXRlcyA9IFtdLCAuLi5hcmdzKSB7XG4gICAgc3VwZXIob3B0aW9ucywgLi4uYXJncyk7XG4gICAgYmxlbmRTdGF0ZXMuZm9yRWFjaChzdGF0ZSA9PiB7XG4gICAgICB0aGlzLmFkZFN0YXRlKHN0YXRlKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBzdW0gb2YgaW50ZXJuYWwgd2VpZ2h0cyBvZiB0aGUgc3ViLXN0YXRlcy5cbiAgICpcbiAgICogQHJlYWRvbmx5XG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqL1xuICBnZXQgaW50ZXJuYWxXZWlnaHQoKSB7XG4gICAgbGV0IGJsZW5kV2VpZ2h0cyA9IDA7XG4gICAgdGhpcy5fc3RhdGVzLmZvckVhY2goc3RhdGUgPT4ge1xuICAgICAgYmxlbmRXZWlnaHRzICs9IHN0YXRlLmludGVybmFsV2VpZ2h0O1xuICAgIH0pO1xuICAgIHJldHVybiBibGVuZFdlaWdodHM7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgd2VpZ2h0IG9mIGEgc3RhdGUgY29udHJvbGxlZCBieSB0aGUgY29udGFpbmVyLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIE5hbWUgb2YgdGhlIHN0YXRlIHRvIHJldHVybiB0aGUgd2VpZ2h0IGZyb20uXG4gICAqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IC0gV2VpZ2h0IG9mIHRoZSBzdGF0ZS5cbiAgICovXG4gIGdldEJsZW5kV2VpZ2h0KG5hbWUpIHtcbiAgICAvLyBNYWtlIHN1cmUgdGhlIG5hbWUgaXMgdmFsaWRcbiAgICBjb25zdCBzdGF0ZSA9IHRoaXMuZ2V0U3RhdGUobmFtZSk7XG4gICAgaWYgKHN0YXRlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYENhbm5vdCBnZXQgd2VpZ2h0IG9mIHN0YXRlICR7bmFtZX0gZnJvbSBCbGVuZFN0YXRlICR7dGhpcy5uYW1lfS4gTm8gc3RhdGUgZXhpc3RzIHdpdGggdGhpcyBuYW1lLmBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0YXRlLndlaWdodDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSB3ZWlnaHQgb2YgYSBzdGF0ZSBjb250cm9sbGVkIGJ5IHRoZSBjb250YWluZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gTmFtZSBvZiB0aGUgc3RhdGUgdG8gc2V0IHRoZSB3ZWlnaHQgb2YuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB3ZWlnaHQgLSBXZWlnaHQgdmFsdWUgdG8gc2V0IG9uIHRoZSBzdGF0ZS5cbiAgICpcbiAgICogQHJldHVybnMge0RlZmVycmVkfVxuICAgKi9cbiAgc2V0QmxlbmRXZWlnaHQobmFtZSwgd2VpZ2h0LCBzZWNvbmRzID0gMCwgZWFzaW5nRm4pIHtcbiAgICAvLyBNYWtlIHN1cmUgdGhlIG5hbWUgaXMgdmFsaWRcbiAgICBjb25zdCBzdGF0ZSA9IHRoaXMuZ2V0U3RhdGUobmFtZSk7XG5cbiAgICBpZiAoc3RhdGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQ2Fubm90IHNldCB3ZWlnaHQgb2Ygc3RhdGUgJHtuYW1lfSBmcm9tIEJsZW5kU3RhdGUgJHt0aGlzLm5hbWV9LiBObyBzdGF0ZSBleGlzdHMgd2l0aCB0aGlzIG5hbWUuYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICB3ZWlnaHQgPSBNYXRoVXRpbHMuY2xhbXAod2VpZ2h0KTtcbiAgICByZXR1cm4gc3RhdGUuc2V0V2VpZ2h0KHdlaWdodCwgc2Vjb25kcywgZWFzaW5nRm4pO1xuICB9XG5cbiAgLyoqXG4gICAqIE11bHRpcGxpZXMgdGhlIHdlaWdodCBvZiBlYWNoIHN1Yi1zdGF0ZSBieSBhIGZhY3RvciB0byBkZXRlcm1pbmUgdGhlIGludGVybmFsIHdlaWdodC5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGZhY3RvciAtIDAtMSBtdWx0aXBsaWVyIHRvIGFwcGx5IHRvIHRoZSB1c2VyIHdlaWdodC5cbiAgICovXG4gIHVwZGF0ZUludGVybmFsV2VpZ2h0KGZhY3Rvcikge1xuICAgIHN1cGVyLnVwZGF0ZUludGVybmFsV2VpZ2h0KGZhY3Rvcik7XG5cbiAgICB0aGlzLl9zdGF0ZXMuZm9yRWFjaChzdGF0ZSA9PiB7XG4gICAgICBzdGF0ZS51cGRhdGVJbnRlcm5hbFdlaWdodCh0aGlzLl9pbnRlcm5hbFdlaWdodCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIGFueSB2YWx1ZXMgb2YgdGhlIHN1Yi1zdGF0ZXMgdGhhdCBuZWVkIHRvIGJlIGV2YWx1YXRlZCBldmVyeSBmcmFtZS5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGRlbHRhVGltZSAtIFRpbWUgaW4gbWlsbGlzZWNvbmRzIHNpbmNlIHRoZSBsYXN0IHVwZGF0ZS5cbiAgICovXG4gIHVwZGF0ZShkZWx0YVRpbWUpIHtcbiAgICBzdXBlci51cGRhdGUoZGVsdGFUaW1lKTtcblxuICAgIHRoaXMuX3N0YXRlcy5mb3JFYWNoKHN0YXRlID0+IHtcbiAgICAgIHN0YXRlLnVwZGF0ZShkZWx0YVRpbWUpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0YXJ0IHBsYXliYWNrIG9mIHRoZSBzdWItc3RhdGVzIGZyb20gdGhlIGJlZ2lubmluZy5cbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9uRmluaXNoIC0gRnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBzdGF0ZSBmaW5pc2hlcy5cbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9uRXJyb3IgLSBGdW5jdGlvbiB0byBleGVjdXRlIGlmIHRoZSBzdGF0ZSBlbmNvdW50ZXJzXG4gICAqIGFuIGVycm9yIGR1cmluZyBwbGF5YmFjay5cbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9uQ2FuY2VsIC0gRnVuY3Rpb24gdG8gZXhlY3V0ZSBpZiBwbGF5YmFjayBpcyBjYW5jZWxlZC5cbiAgICpcbiAgICogQHJldHVybnMge0RlZmVycmVkfVxuICAgKi9cbiAgcGxheShvbkZpbmlzaCwgb25FcnJvciwgb25DYW5jZWwpIHtcbiAgICBjb25zdCBwcm9taXNlcyA9IFtzdXBlci5wbGF5KCldO1xuXG4gICAgdGhpcy5fc3RhdGVzLmZvckVhY2goc3RhdGUgPT4ge1xuICAgICAgcHJvbWlzZXMucHVzaChzdGF0ZS5wbGF5KCkpO1xuICAgIH0pO1xuICAgIHJldHVybiBEZWZlcnJlZC5hbGwocHJvbWlzZXMsIG9uRmluaXNoLCBvbkVycm9yLCBvbkNhbmNlbCk7XG4gIH1cblxuICAvKipcbiAgICogUGF1c2UgcGxheWJhY2sgb2YgdGhlIHN1Yi1zdGF0ZXMuIFRoaXMgcHJldmVudHMgcGVuZGluZyBwcm9taXNlcyBmcm9tIGJlaW5nIGV4ZWN1dGVkLlxuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIHBhdXNlKCkge1xuICAgIHRoaXMuX3N0YXRlcy5mb3JFYWNoKHN0YXRlID0+IHtcbiAgICAgIHN0YXRlLnBhdXNlKCk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHN1cGVyLnBhdXNlKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVzdW1lIHBsYXliYWNrIG9mIHRoZSBzdWItc3RhdGVzLlxuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb25GaW5pc2ggLSBGdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIHN0YXRlIGZpbmlzaGVzLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb25FcnJvciAtIEZ1bmN0aW9uIHRvIGV4ZWN1dGUgaWYgdGhlIHN0YXRlIGVuY291bnRlcnNcbiAgICogYW4gZXJyb3IgZHVyaW5nIHBsYXliYWNrLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb25DYW5jZWwgLSBGdW5jdGlvbiB0byBleGVjdXRlIGlmIHBsYXliYWNrIGlzIGNhbmNlbGVkLlxuICAgKlxuICAgKiBAcmV0dXJucyB7RGVmZXJyZWR9XG4gICAqL1xuICByZXN1bWUob25GaW5pc2gsIG9uRXJyb3IsIG9uQ2FuY2VsKSB7XG4gICAgY29uc3QgcHJvbWlzZXMgPSBbc3VwZXIucmVzdW1lKCldO1xuXG4gICAgdGhpcy5fc3RhdGVzLmZvckVhY2goc3RhdGUgPT4ge1xuICAgICAgcHJvbWlzZXMucHVzaChzdGF0ZS5yZXN1bWUoKSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIERlZmVycmVkLmFsbChwcm9taXNlcywgb25GaW5pc2gsIG9uRXJyb3IsIG9uQ2FuY2VsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYW5jZWwgcGxheWJhY2sgb2YgdGhlIHN1Yi1zdGF0ZXMgYW5kIGNhbmNlbCBhbnkgcGVuZGluZyBwcm9taXNlcy5cbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBjYW5jZWwoKSB7XG4gICAgdGhpcy5fc3RhdGVzLmZvckVhY2goc3RhdGUgPT4ge1xuICAgICAgc3RhdGUuY2FuY2VsKCk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHN1cGVyLmNhbmNlbCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0b3AgcGxheWJhY2sgb2YgdGhlIHN1Yi1zdGF0ZXMgYW5kIHJlc29sdmUgYW55IHBlbmRpbmcgcHJvbWlzZXMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgc3RvcCgpIHtcbiAgICB0aGlzLl9zdGF0ZXMuZm9yRWFjaChzdGF0ZSA9PiB7XG4gICAgICBzdGF0ZS5zdG9wKCk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHN1cGVyLnN0b3AoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNjYXJkcyBhbGwgc3ViLXN0YXRlIHJlc291cmNlcy5cbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBkaXNjYXJkKCkge1xuICAgIHN1cGVyLmRpc2NhcmQoKTtcblxuICAgIHRoaXMuZGlzY2FyZFN0YXRlcygpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEFic3RyYWN0QmxlbmRTdGF0ZTtcbiIsIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVC0wXG5pbXBvcnQgQWJzdHJhY3RCbGVuZFN0YXRlIGZyb20gJy4vQWJzdHJhY3RCbGVuZFN0YXRlJztcblxuLyoqXG4gKiBDbGFzcyBmb3IgYmxlbmRpbmcgTiBudW1iZXIgb2YgYmxlbmQgc3RhdGVzLlxuICpcbiAqIEBleHRlbmRzIEFic3RyYWN0QmxlbmRTdGF0ZVxuICovXG5jbGFzcyBGcmVlQmxlbmRTdGF0ZSBleHRlbmRzIEFic3RyYWN0QmxlbmRTdGF0ZSB7XG4gIC8qKlxuICAgKiBAY29uc3RydWN0b3JcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XSAtIE9wdGlvbnMgZm9yIHRoZSBjb250YWluZXIgc3RhdGUuXG4gICAqIEBwYXJhbSB7QXJyYXkuPEFic3RyYWN0U3RhdGU+fSBbYmxlbmRTdGF0ZXM9W11dIC0gQmxlbmQgc3RhdGVzIHRvIGJlIGNvbnRyb2xsZWQgYnlcbiAgICogdGhpcyBjb250YWluZXIuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihvcHRpb25zID0ge30sIGJsZW5kU3RhdGVzID0gW10pIHtcbiAgICBzdXBlcihvcHRpb25zLCBibGVuZFN0YXRlcyk7XG4gIH1cblxuICB1cGRhdGVJbnRlcm5hbFdlaWdodChmYWN0b3IpIHtcbiAgICBzdXBlci51cGRhdGVJbnRlcm5hbFdlaWdodChmYWN0b3IpO1xuXG4gICAgLy8gRGV0ZXJtaW5lIHRoZSB0b3RhbCBhY3RpdmUgd2VpZ2h0IG9mIGJsZW5kIHN0YXRlc1xuICAgIGxldCBzdW1XZWlnaHRzID0gMDtcblxuICAgIHRoaXMuX3N0YXRlcy5mb3JFYWNoKHN0YXRlID0+IHtcbiAgICAgIHN1bVdlaWdodHMgKz0gc3RhdGUud2VpZ2h0O1xuICAgIH0pO1xuXG4gICAgLy8gRW5zdXJlIHRoZSBzdW0gb2YgYmxlbmQgc3RhdGUgaW50ZXJuYWwgd2VpZ2h0cyBkb2VzIG5vdCBleGNlZWQgY29udGFpbmVyIGludGVybmFsIHdlaWdodFxuICAgIGZhY3RvciAvPSBNYXRoLm1heChzdW1XZWlnaHRzLCAxKTtcblxuICAgIC8vIFN1bSBvZiBibGVuZCBzdGF0ZSBpbnRlcm5hbCB3ZWlnaHRzIHNob3VsZCBub3QgZXhjZWVkIGNvbnRhaW5lciBpbnRlcm5hbCB3ZWlnaHRcbiAgICB0aGlzLl9zdGF0ZXMuZm9yRWFjaChzdGF0ZSA9PiB7XG4gICAgICBzdGF0ZS51cGRhdGVJbnRlcm5hbFdlaWdodChmYWN0b3IgKiB0aGlzLl93ZWlnaHQpO1xuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEZyZWVCbGVuZFN0YXRlO1xuIiwiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTBcbmltcG9ydCBEZWZlcnJlZCBmcm9tICdjb3JlL0RlZmVycmVkJztcbmltcG9ydCBBYnN0cmFjdEJsZW5kU3RhdGUgZnJvbSAnLi9BYnN0cmFjdEJsZW5kU3RhdGUnO1xuaW1wb3J0IEFuaW1hdGlvblV0aWxzIGZyb20gJy4uL0FuaW1hdGlvblV0aWxzJztcblxuLyoqXG4gKiBDbGFzcyBmb3IgYmxlbmRpbmcgTiBudW1iZXIgb2YgYmxlbmQgc3RhdGVzIGJhc2VkIG9uIGEgc2luZ2xlXG4gKiBwYXJhbWV0ZXIuXG4gKlxuICogQGV4dGVuZHMgQWJzdHJhY3RCbGVuZFN0YXRlXG4gKi9cbmNsYXNzIEJsZW5kMWRTdGF0ZSBleHRlbmRzIEFic3RyYWN0QmxlbmRTdGF0ZSB7XG4gIC8qKlxuICAgKiBAY29uc3RydWN0b3JcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSAtIE9wdGlvbnMgZm9yIHRoZSBjb250YWluZXIgc3RhdGVcbiAgICogQHBhcmFtIHtBcnJheS48QWJzdHJhY3RCbGVuZFN0YXRlPn0gW2JsZW5kU3RhdGVzPVtdXSAtIEJsZW5kIHN0YXRlcyB0byBiZVxuICAgKiBjb250cm9sbGVkIGJ5IHRoaXMgY29udGFpbmVyLlxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBbYmxlbmRUaHJlc2hvbGRzPVtdXSAtIFRocmVzaG9sZCB2YWx1ZXMgZm9yIGFjdGl2YXRpbmdcbiAgICogZWFjaCBibGVuZCBzdGF0ZS5cbiAgICogQHBhcmFtIHtBcnJheS48Ym9vbGVhbj59IFtwaGFzZU1hdGNoZXM9W11dIC0gQm9vbGVhbnMgaW5kaWNhdGluZyB3aGV0aGVyIG9yIG5vdFxuICAgKiBlYWNoIGJsZW5kIHN0YXRlIHNob3VsZCBiZSBwaGFzZSBtYXRjaGVkLlxuICAgKi9cbiAgY29uc3RydWN0b3IoXG4gICAgb3B0aW9ucyA9IHt9LFxuICAgIGJsZW5kU3RhdGVzID0gW10sXG4gICAgYmxlbmRUaHJlc2hvbGRzID0gW10sXG4gICAgcGhhc2VNYXRjaGVzID0gW11cbiAgKSB7XG4gICAgc3VwZXIob3B0aW9ucywgYmxlbmRTdGF0ZXMpO1xuXG4gICAgdGhpcy5fYmxlbmRWYWx1ZSA9IDA7XG4gICAgdGhpcy5fcHJvbWlzZXMgPSB7XG4gICAgICAuLi50aGlzLl9wcm9taXNlcyxcbiAgICAgIGJsZW5kVmFsdWU6IERlZmVycmVkLnJlc29sdmUoKSxcbiAgICB9O1xuXG4gICAgLy8gVmFsaWRhdGUgdGhlcmUgYXJlIG5vIGR1cGxpY2F0ZSB0aHJlc2hvbGRzXG4gICAgY29uc3Qgbm9uWmVyb0RpZmZlcmVudFNpemUgPVxuICAgICAgYmxlbmRTdGF0ZXMubGVuZ3RoICE9PSAwICYmIGJsZW5kU3RhdGVzLmxlbmd0aCAhPT0gYmxlbmRUaHJlc2hvbGRzLmxlbmd0aDtcbiAgICBpZiAobm9uWmVyb0RpZmZlcmVudFNpemUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYENhbm5vdCBjcmVhdGUgQmxlbmQxZFN0YXRlIHdpdGggYmxlbmRUaHJlc2hvbGRzICR7YmxlbmRUaHJlc2hvbGRzfS4gQmxlbmRUaHJlc2hvbGRzIGNvdW50IGRvZXMgbm90IG1hdGNoIGJsZW5kU3RhdGVzIGNvdW50LmBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgY29udGFpbnNEdXBsaWNhdGVzID1cbiAgICAgIG5ldyBTZXQoYmxlbmRUaHJlc2hvbGRzKS5zaXplICE9PSBibGVuZFRocmVzaG9sZHMubGVuZ3RoO1xuICAgIGlmIChjb250YWluc0R1cGxpY2F0ZXMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYENhbm5vdCBjcmVhdGUgQmxlbmQxZFN0YXRlIHdpdGggYmxlbmRUaHJlc2hvbGRzICR7YmxlbmRUaHJlc2hvbGRzfS4gQmxlbmRUaHJlc2hvbGRzIGNvbnRhaW5zIGR1cGxpY2F0ZSB2YWx1ZXNgXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIEluaXRpYWxpemUgdGhlIHRocmVzaG9sZHMgbWFwXG4gICAgdGhpcy5fdGhyZXNob2xkcyA9IFtdO1xuICAgIFsuLi50aGlzLl9zdGF0ZXMudmFsdWVzKCldLmZvckVhY2goKHN0YXRlLCBpbmRleCkgPT4ge1xuICAgICAgdGhpcy5fdGhyZXNob2xkcy5wdXNoKHtcbiAgICAgICAgdmFsdWU6IGJsZW5kVGhyZXNob2xkc1tpbmRleF0sXG4gICAgICAgIG5hbWU6IHN0YXRlLm5hbWUsXG4gICAgICAgIHBoYXNlTWF0Y2g6IHBoYXNlTWF0Y2hlc1tpbmRleF0gfHwgZmFsc2UsXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRoaXMuX3NvcnRUaHJlc2hvbGRzKCk7XG4gICAgdGhpcy5fZm9yY2VOb1RocmVzaG9sZER1cGVzID0gdHJ1ZTtcblxuICAgIHRoaXMuX3BoYXNlTGVhZFN0YXRlID0gbnVsbDtcblxuICAgIHRoaXMuX3VwZGF0ZUJsZW5kV2VpZ2h0cygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgYW5kIHNldHMgdGhlIGJsZW5kIHBhcmFtZXRlciB2YWx1ZS5cbiAgICovXG4gIGdldCBibGVuZFZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLl9ibGVuZFZhbHVlO1xuICB9XG5cbiAgc2V0IGJsZW5kVmFsdWUodmFsdWUpIHtcbiAgICB0aGlzLl9ibGVuZFZhbHVlID0gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB3aGV0aGVyIG9yIG5vdCB0aGUgYmxlbmQgdmFsdWUgaXMgY3VycmVudGx5IGJlaW5nIGFuaW1hdGVkLlxuICAgKi9cbiAgZ2V0IGJsZW5kVmFsdWVQZW5kaW5nKCkge1xuICAgIHJldHVybiB0aGlzLl9wcm9taXNlcy5ibGVuZFZhbHVlICYmIHRoaXMuX3Byb21pc2VzLmJsZW5kVmFsdWUucGVuZGluZztcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSB1c2VyIGRlZmluZWQgd2VpZ2h0IG92ZXIgdGltZS5cbiAgICpcbiAgICogQHBhcmFtIHtudWxsfSBuYW1lIC0gVW51c2VkIHBhcmFtZXRlci5cbiAgICogQHBhcmFtIHtudW1iZXJ9IHdlaWdodCAtIFRoZSB0YXJnZXQgd2VpZ2h0IHZhbHVlLlxuICAgKiBAcGFyYW0ge251bWJlcn0gW3NlY29uZHM9MF0gLSBUaGUgYW1vdW50IG9mIHRpbWUgaXQgd2lsbCB0YWtlIHRvIHJlYWNoIHRoZVxuICAgKiB0YXJnZXQgd2VpZ2h0LlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gZWFzaW5nRm4gLSBUaGUgZWFzaW5nIGZ1bmN0aW9uIHRvIHVzZSBmb3IgaW50ZXJwb2xhdGlvbi5cbiAgICpcbiAgICogQHJldHVybnMge0RlZmVycmVkfVxuICAgKi9cbiAgc2V0QmxlbmRXZWlnaHQobmFtZSwgdmFsdWUsIHNlY29uZHMgPSAwLCBlYXNpbmdGbikge1xuICAgIHRoaXMuX3Byb21pc2VzLmJsZW5kVmFsdWUuY2FuY2VsKCk7XG5cbiAgICB0aGlzLl9wcm9taXNlcy5ibGVuZFZhbHVlID0gQW5pbWF0aW9uVXRpbHMuaW50ZXJwb2xhdGVQcm9wZXJ0eShcbiAgICAgIHRoaXMsXG4gICAgICAnYmxlbmRWYWx1ZScsXG4gICAgICB2YWx1ZSxcbiAgICAgIHtcbiAgICAgICAgc2Vjb25kcyxcbiAgICAgICAgZWFzaW5nRm4sXG4gICAgICAgIG9uUHJvZ3Jlc3M6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLl91cGRhdGVCbGVuZFdlaWdodHMoKTtcbiAgICAgICAgfSxcbiAgICAgICAgb25GaW5pc2g6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLl91cGRhdGVCbGVuZFdlaWdodHMoKTtcbiAgICAgICAgfSxcbiAgICAgIH1cbiAgICApO1xuXG4gICAgcmV0dXJuIHRoaXMuX3Byb21pc2VzLmJsZW5kVmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgdXNlciBkZWZpbmVkIHdlaWdodC5cbiAgICpcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGdldEJsZW5kV2VpZ2h0KCkge1xuICAgIHJldHVybiB0aGlzLmJsZW5kVmFsdWU7XG4gIH1cblxuICBhZGRTdGF0ZShzdGF0ZSwgdGhyZXNob2xkVmFsdWUgPSAwLCBwaGFzZU1hdGNoID0gZmFsc2UpIHtcbiAgICB0aGlzLl90aHJlc2hvbGRzID0gdGhpcy5fdGhyZXNob2xkcyB8fCBbXTtcblxuICAgIC8vIE1ha2Ugc3VyZSB0aGVyZSBpcyBub3QgYWxyZWFkeSBhIHN0YXRlIHdpdGggdGhpcyB0aHJlc2hvbGRcbiAgICBjb25zdCBzYW1lVmFsdWUgPSB0aGlzLl90aHJlc2hvbGRzLmZpbmQoXG4gICAgICB0aHJlc2hvbGQgPT4gdGhyZXNob2xkLnZhbHVlID09PSB0aHJlc2hvbGRWYWx1ZVxuICAgICk7XG4gICAgaWYgKHRoaXMuX2ZvcmNlTm9UaHJlc2hvbGREdXBlcyAmJiBzYW1lVmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQ2Fubm90IHNldCBibGVuZCB0aHJlc2hvbGQgb2YgJHt0aHJlc2hvbGRWYWx1ZX0gZm9yIHN0YXRlICR7c3RhdGUubmFtZX0gb24gJHt0aGlzLm5hbWV9LiBBIHN0YXRlIGFscmVhZHkgZXhpc3RzIHdpdGggdGhhdCB0aHJlc2hvbGQuYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBzdXBlci5hZGRTdGF0ZShzdGF0ZSk7XG4gICAgdGhpcy5fdGhyZXNob2xkcy5wdXNoKHtcbiAgICAgIHZhbHVlOiB0aHJlc2hvbGRWYWx1ZSxcbiAgICAgIG5hbWU6IHN0YXRlLm5hbWUsXG4gICAgICBwaGFzZU1hdGNoOiBwaGFzZU1hdGNoIHx8IGZhbHNlLFxuICAgIH0pO1xuXG4gICAgdGhpcy5fc29ydFRocmVzaG9sZHMoKTtcblxuICAgIHJldHVybiBzdGF0ZS5uYW1lO1xuICB9XG5cbiAgcmVtb3ZlU3RhdGUobmFtZSkge1xuICAgIGNvbnN0IHJlbW92ZWQgPSBzdXBlci5yZW1vdmVTdGF0ZShuYW1lKTtcblxuICAgIGlmIChyZW1vdmVkKSB7XG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMuX3RocmVzaG9sZHMuZmluZEluZGV4KFxuICAgICAgICB0aHJlc2hvbGQgPT4gdGhyZXNob2xkLm5hbWUgPT09IG5hbWVcbiAgICAgICk7XG4gICAgICB0aGlzLl90aHJlc2hvbGRzLnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlbW92ZWQ7XG4gIH1cblxuICByZW5hbWVTdGF0ZShjdXJyZW50TmFtZSwgbmV3TmFtZSkge1xuICAgIG5ld05hbWUgPSBzdXBlci5yZW5hbWVTdGF0ZShjdXJyZW50TmFtZSwgbmV3TmFtZSk7XG5cbiAgICBjb25zdCB0aHJlc2hvbGQgPSB0aGlzLl90aHJlc2hvbGRzLmZpbmQoXG4gICAgICB0aHJlc2hvbGQgPT4gdGhyZXNob2xkLm5hbWUgPT09IGN1cnJlbnROYW1lXG4gICAgKTtcbiAgICB0aHJlc2hvbGQubmFtZSA9IG5ld05hbWU7XG5cbiAgICByZXR1cm4gbmV3TmFtZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSB0aHJlc2hvbGQgdmFsdWUgb2YgYSBibGVuZCB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIG5hbWUuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gTmFtZSBvZiB0aGUgYmxlbmQgdG8gZ2V0IHRoZSB0aHJlc2hvbGQgb2YuXG4gICAqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IFRocmVob2xkIHZhbHVlLlxuICAgKi9cbiAgZ2V0QmxlbmRUaHJlc2hvbGQobmFtZSkge1xuICAgIGNvbnN0IHRocmVzaG9sZCA9IHRoaXMuX3RocmVzaG9sZHMuZmluZChcbiAgICAgIHRocmVzaG9sZCA9PiB0aHJlc2hvbGQubmFtZSA9PT0gbmFtZVxuICAgICk7XG5cbiAgICBpZiAodGhyZXNob2xkID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYENhbm5vdCBnZXQgYmxlbmQgdGhyZXNob2xkIG9mIHN0YXRlICR7bmFtZX0gb24gJHt0aGlzLm5hbWV9LiBObyBzdGF0ZSBleGlzdHMgd2l0aCB0aGF0IG5hbWUuYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhyZXNob2xkLnZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIHRocmVzaG9sZCB2YWx1ZSBvZiBhIGJsZW5kIHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgbmFtZS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBOYW1lIG9mIHRoZSBibGVuZCB0byBzZXQgdGhlIHRocmVzaG9sZC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIC0gVmFsdWUgb2YgdGhlIHRocmVzaG9sZCB0byBzZXQuXG4gICAqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IFNldCB0aHJlc2hvbGQgdmFsdWUuXG4gICAqL1xuICBzZXRCbGVuZFRocmVzaG9sZChuYW1lLCB2YWx1ZSkge1xuICAgIC8vIE1ha2Ugc3VyZSB0aGVyZSBpcyBub3QgYWxyZWFkeSBhIHN0YXRlIHdpdGggdGhpcyB0aHJlc2hvbGRcbiAgICBjb25zdCBzYW1lVmFsdWUgPSB0aGlzLl90aHJlc2hvbGRzLmZpbmQoXG4gICAgICB0aHJlc2hvbGQgPT4gdGhyZXNob2xkLnZhbHVlID09PSB2YWx1ZVxuICAgICk7XG4gICAgaWYgKHNhbWVWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBDYW5ub3Qgc2V0IGJsZW5kIHRocmVzaG9sZCBvZiAke3ZhbHVlfSBmb3Igc3RhdGUgJHtuYW1lfSBvbiAke3RoaXMubmFtZX0uIEEgc3RhdGUgYWxyZWFkeSBleGlzdHMgd2l0aCB0aGF0IHRocmVzaG9sZC5gXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHRocmVzaG9sZCA9IHRoaXMuX3RocmVzaG9sZHMuZmluZChcbiAgICAgIHRocmVzaG9sZCA9PiB0aHJlc2hvbGQubmFtZSA9PT0gbmFtZVxuICAgICk7XG5cbiAgICBpZiAodGhyZXNob2xkID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYENhbm5vdCBzZXQgYmxlbmQgdGhyZXNob2xkIG9mIHN0YXRlICR7bmFtZX0gb24gJHt0aGlzLm5hbWV9LiBObyBzdGF0ZSBleGlzdHMgd2l0aCB0aGF0IG5hbWUuYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aHJlc2hvbGQudmFsdWUgPSB2YWx1ZTtcblxuICAgIHRoaXMuX3NvcnRUaHJlc2hvbGRzKCk7XG5cbiAgICByZXR1cm4gdGhyZXNob2xkLnZhbHVlO1xuICB9XG5cbiAgdXBkYXRlSW50ZXJuYWxXZWlnaHQoZmFjdG9yKSB7XG4gICAgc3VwZXIudXBkYXRlSW50ZXJuYWxXZWlnaHQoZmFjdG9yKTtcblxuICAgIGlmICh0aGlzLl9waGFzZUxlYWRTdGF0ZSkge1xuICAgICAgdGhpcy5fc3RhdGVzLmZvckVhY2goc3RhdGUgPT4ge1xuICAgICAgICBpZiAoc3RhdGUud2VpZ2h0ICE9PSAwKSB7XG4gICAgICAgICAgc3RhdGUubm9ybWFsaXplZFRpbWUgPSB0aGlzLl9waGFzZUxlYWRTdGF0ZS5ub3JtYWxpemVkVGltZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIGJsZW5kIHdlaWdodHMgYmFzZWQgb24gdGhlaXIgY29ycmVzcG9uZGluZyB0aHJlc2hvbGQgdmFsdWVzXG4gICAqIGFuZCB0aGUgY3VycmVudCBibGVuZFZhbHVlLiBBZGRpdGlvbmFsbHksIHNldHMgYSBsZWFkIHBoYXNlIHN0YXRlIGlmIHRoZVxuICAgKiBjb25kaXRpb25zIGZvciBwaGFzZS1tYXRjaGluZyBoYXZlIGJlZW4gc2F0aXNmaWVkLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3VwZGF0ZUJsZW5kV2VpZ2h0cygpIHtcbiAgICBpZiAodGhpcy5fdGhyZXNob2xkcy5sZW5ndGggPT09IDApIHJldHVybjtcblxuICAgIGlmICh0aGlzLl90aHJlc2hvbGRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzLl9zdGF0ZXMuZ2V0KHRoaXMuX3RocmVzaG9sZHNbMF0ubmFtZSk7XG4gICAgICBzdGF0ZS5zZXRXZWlnaHQoMSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gSW5pdGlhbGx5IHNldCBhbGwgc3ViLXN0YXRlIHdlaWdodHMgdG8gemVyb1xuICAgIHRoaXMuX3N0YXRlcy5mb3JFYWNoKHN0YXRlID0+IHtcbiAgICAgIHN0YXRlLnNldFdlaWdodCgwKTtcbiAgICB9KTtcblxuICAgIHRoaXMuX3BoYXNlTGVhZFN0YXRlID0gbnVsbDtcblxuICAgIC8vIEZpbmQgdGhlIGZpcnN0IHRocmVzaG9sZCB0aGF0IGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgcGFyYW1ldGVyIHZhbHVlXG4gICAgbGV0IHRhcmdldEluZGV4ID0gdGhpcy5fdGhyZXNob2xkcy5maW5kSW5kZXgodGhyZXNob2xkID0+IHtcbiAgICAgIHJldHVybiB0aHJlc2hvbGQudmFsdWUgPj0gdGhpcy5fYmxlbmRWYWx1ZTtcbiAgICB9KTtcblxuICAgIGlmICh0YXJnZXRJbmRleCA9PT0gMCB8fCB0YXJnZXRJbmRleCA9PT0gLTEpIHtcbiAgICAgIC8vIEdpdmUgb25lIHN0YXRlIGZ1bGwgaW5mbHVlbmNlXG4gICAgICB0YXJnZXRJbmRleCA9IHRhcmdldEluZGV4ID09PSAtMSA/IHRoaXMuX3RocmVzaG9sZHMubGVuZ3RoIC0gMSA6IDA7XG4gICAgICBjb25zdCBzdGF0ZSA9IHRoaXMuX3N0YXRlcy5nZXQodGhpcy5fdGhyZXNob2xkc1t0YXJnZXRJbmRleF0ubmFtZSk7XG4gICAgICBzdGF0ZS5zZXRXZWlnaHQoMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIExpbmVhciBpbnRlcnBvbGF0ZSBpbmZsdWVuY2UgYmV0d2VlbiB0d28gc3RhdGVzXG4gICAgICBjb25zdCB0aHJlc2hvbGRBID0gdGhpcy5fdGhyZXNob2xkc1t0YXJnZXRJbmRleCAtIDFdO1xuICAgICAgY29uc3QgdGhyZXNob2xkQiA9IHRoaXMuX3RocmVzaG9sZHNbdGFyZ2V0SW5kZXhdO1xuXG4gICAgICBjb25zdCBmYWN0b3JCID1cbiAgICAgICAgKHRoaXMuYmxlbmRWYWx1ZSAtIHRocmVzaG9sZEEudmFsdWUpIC9cbiAgICAgICAgKHRocmVzaG9sZEIudmFsdWUgLSB0aHJlc2hvbGRBLnZhbHVlKTtcbiAgICAgIGNvbnN0IGZhY3RvckEgPSAxIC0gZmFjdG9yQjtcblxuICAgICAgY29uc3Qgc3RhdGVBID0gdGhpcy5fc3RhdGVzLmdldCh0aHJlc2hvbGRBLm5hbWUpO1xuICAgICAgY29uc3Qgc3RhdGVCID0gdGhpcy5fc3RhdGVzLmdldCh0aHJlc2hvbGRCLm5hbWUpO1xuXG4gICAgICBzdGF0ZUEuc2V0V2VpZ2h0KGZhY3RvckEpO1xuICAgICAgc3RhdGVCLnNldFdlaWdodChmYWN0b3JCKTtcblxuICAgICAgLy8gU2V0IHBoYXNlLW1hdGNoaW5nIGlmIG5lZWRlZFxuICAgICAgaWYgKHRocmVzaG9sZEEucGhhc2VNYXRjaCAmJiB0aHJlc2hvbGRCLnBoYXNlTWF0Y2gpIHtcbiAgICAgICAgdGhpcy5fcGhhc2VMZWFkU3RhdGUgPSBmYWN0b3JBID4gZmFjdG9yQiA/IHN0YXRlQSA6IHN0YXRlQjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU29ydHMgdGhlIHRocmVzaG9sZHMgZnJvbSBsb3cgdG8gaGlnaCBiYXNlZCBvbiB2YWx1ZS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9zb3J0VGhyZXNob2xkcygpIHtcbiAgICB0aGlzLl90aHJlc2hvbGRzLnNvcnQoKGEsIGIpID0+IGEudmFsdWUgLSBiLnZhbHVlKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBCbGVuZDFkU3RhdGU7XG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxuLyogZXNsaW50LWRpc2FibGUgbm8tdW5kZXJzY29yZS1kYW5nbGUgKi9cbmltcG9ydCBEZWZlcnJlZCBmcm9tICdjb3JlL0RlZmVycmVkJztcbmltcG9ydCBNYXRoVXRpbHMgZnJvbSAnY29yZS9NYXRoVXRpbHMnO1xuaW1wb3J0IEFic3RyYWN0QmxlbmRTdGF0ZSBmcm9tICcuL0Fic3RyYWN0QmxlbmRTdGF0ZSc7XG5pbXBvcnQgQW5pbWF0aW9uVXRpbHMgZnJvbSAnLi4vQW5pbWF0aW9uVXRpbHMnO1xuXG4vKipcbiAqIENsYXNzIGZvciBibGVuZGluZyBOIG51bWJlciBvZiBibGVuZCBzdGF0ZXMgYmFzZWQgb24gdHdvXG4gKiBwYXJhbXRlcnMuXG4gKlxuICogQGV4dGVuZHMgQWJzdHJhY3RCbGVuZFN0YXRlXG4gKi9cbmNsYXNzIEJsZW5kMmRTdGF0ZSBleHRlbmRzIEFic3RyYWN0QmxlbmRTdGF0ZSB7XG4gIC8qKlxuICAgKiBAY29uc3RydWN0b3JcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSAtIE9wdGlvbnMgZm9yIHRoZSBjb250YWluZXIgc3RhdGVcbiAgICogQHBhcmFtIHtBcnJheS48QWJzdHJhY3RCbGVuZFN0YXRlPn0gW2JsZW5kU3RhdGVzPVtdXSAtIEJsZW5kIHN0YXRlcyB0byBiZVxuICAgKiBjb250cm9sbGVkIGJ5IHRoaXMgY29udGFpbmVyLlxuICAgKiBAcGFyYW0ge0FycmF5LjxBcnJheS48bnVtYmVyPj59IFtibGVuZFRocmVzaG9sZHM9W11dIC0gVGhyZXNob2xkIHZhbHVlcyBmb3IgYWN0aXZhdGluZ1xuICAgKiBlYWNoIGJsZW5kIHN0YXRlLlxuICAgKiBAcGFyYW0ge0FycmF5Ljxib29sZWFuPn0gW3BoYXNlTWF0Y2hlcz1bXV0gLSBCb29sZWFucyBpbmRpY2F0aW5nIHdoZXRoZXIgb3Igbm90XG4gICAqIGVhY2ggYmxlbmQgc3RhdGUgc2hvdWxkIGJlIHBoYXNlIG1hdGNoZWQuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihcbiAgICBvcHRpb25zID0ge30sXG4gICAgYmxlbmRTdGF0ZXMgPSBbXSxcbiAgICBibGVuZFRocmVzaG9sZHMgPSBbXSxcbiAgICBwaGFzZU1hdGNoZXMgPSBbXVxuICApIHtcbiAgICBzdXBlcihvcHRpb25zLCBibGVuZFN0YXRlcyk7XG5cbiAgICBpZiAoYmxlbmRTdGF0ZXMubGVuZ3RoICE9PSBibGVuZFRocmVzaG9sZHMubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBDYW5ub3QgY3JlYXRlIEJsZW5kMmRTdGF0ZSB3aXRoIGJsZW5kU3RhdGVzICR7YmxlbmRTdGF0ZXN9IGFuZCBibGVuZFRocmVzaG9sZHMgJHtibGVuZFRocmVzaG9sZHN9LiBDb3VudCBvZiBibGVuZFN0YXRlcyBtdXN0IG1hdGNoIGNvdW50IG9mIGJsZW5kVGhyZXNob2xkcy5gXG4gICAgICApO1xuICAgIH1cblxuICAgIGJsZW5kVGhyZXNob2xkc1xuICAgICAgLnNsaWNlKDAsIGJsZW5kVGhyZXNob2xkcy5sZW5ndGggLSAxKVxuICAgICAgLmZvckVhY2goKHRocmVzaG9sZCwgaW5kZXgpID0+IHtcbiAgICAgICAgYmxlbmRUaHJlc2hvbGRzLnNsaWNlKGluZGV4ICsgMSkuZm9yRWFjaChvdGhlclRocmVzaG9sZCA9PiB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhyZXNob2xkWzBdID09PSBvdGhlclRocmVzaG9sZFswXSAmJlxuICAgICAgICAgICAgdGhyZXNob2xkWzFdID09PSBvdGhlclRocmVzaG9sZFsxXVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICBgQ2Fubm90IGNyZWF0ZSBCbGVuZDJkU3RhdGUgd2l0aCBibGVuZFRocmVzaG9sZHMgJHtibGVuZFRocmVzaG9sZHN9LiBObyBkdXBsaWNhdGUgdmFsdWVzIGFsbG93ZWQgaW4gYmxlbmRUaHJlc2hvbGRzLmBcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgdGhpcy5fYmxlbmRWYWx1ZVggPSAwO1xuICAgIHRoaXMuX2JsZW5kVmFsdWVZID0gMDtcblxuICAgIHRoaXMuX3Byb21pc2VzID0ge1xuICAgICAgLi4udGhpcy5fcHJvbWlzZXMsXG4gICAgICBibGVuZFZhbHVlWDogRGVmZXJyZWQucmVzb2x2ZSgpLFxuICAgICAgYmxlbmRWYWx1ZVk6IERlZmVycmVkLnJlc29sdmUoKSxcbiAgICB9O1xuXG4gICAgdGhpcy5fdGhyZXNob2xkcyA9IFtdO1xuICAgIFsuLi50aGlzLl9zdGF0ZXMudmFsdWVzKCldLmZvckVhY2goKHN0YXRlLCBpbmRleCkgPT4ge1xuICAgICAgdGhpcy5fdGhyZXNob2xkcy5wdXNoKHtcbiAgICAgICAgbmFtZTogc3RhdGUubmFtZSxcbiAgICAgICAgcGhhc2VNYXRjaDogcGhhc2VNYXRjaGVzW2luZGV4XSB8fCBmYWxzZSxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgdGhpcy5fdmVydGljZXMgPSBibGVuZFRocmVzaG9sZHM7XG5cbiAgICBpZiAodGhpcy5fdmVydGljZXMubGVuZ3RoID49IDMpIHtcbiAgICAgIHRoaXMuX3RyaWFuZ2xlcyA9IE1hdGhVdGlscy5nZXREZWxhdW5heVRyaWFuZ3VsYXRpb24odGhpcy5fdmVydGljZXMpO1xuICAgIH1cblxuICAgIHRoaXMuX3BoYXNlTGVhZFN0YXRlID0gbnVsbDtcblxuICAgIHRoaXMuX3VwZGF0ZUJsZW5kV2VpZ2h0cygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIHVzZXIgZGVmaW5lZCB3ZWlnaHQgb3ZlciB0aW1lLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIE5hbWUgb2YgYmxlbmQgd2VpZ2h0IHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtudW1iZXJ9IHdlaWdodCAtIFRhcmdldCB3ZWlnaHQgdmFsdWUuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbc2Vjb25kcz0wXSAtIFRoZSBhbW91bnQgb2YgdGltZSBpdCB3aWxsIHRha2UgdG8gcmVhY2ggdGhlXG4gICAqIHRhcmdldCB2YWx1ZS5cbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IGVhc2luZ0ZuIC0gVGhlIGVhc2luZyBmdW5jdGlvbiB0byB1c2UgZm9yIGludGVycG9sYXRpb24uXG4gICAqXG4gICAqIEByZXR1cm5zIHtEZWZlcnJlZH1cbiAgICovXG4gIHNldEJsZW5kV2VpZ2h0KG5hbWUsIHZhbHVlLCBzZWNvbmRzID0gMCwgZWFzaW5nRm4pIHtcbiAgICBjb25zdCBwcm9wZXJ0eSA9IGBibGVuZFZhbHVlJHtuYW1lLnRvVXBwZXJDYXNlKCl9YDtcbiAgICBpZiAocHJvcGVydHkgIT09ICdibGVuZFZhbHVlWCcgJiYgcHJvcGVydHkgIT09ICdibGVuZFZhbHVlWScpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYENhbm5vdCBzZXQgYmxlbmQgd2VpZ2h0IGZvciAke25hbWV9IG9uICR7dGhpcy5uYW1lfS4gQmxlbmQyZFN0YXRlIG9ubHkgYWNjZXB0cyAnWCcgb3IgJ1knIGZvciBzZXRCbGVuZFdlaWdodGBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5fcHJvbWlzZXNbcHJvcGVydHldLmNhbmNlbCgpO1xuXG4gICAgdGhpcy5fcHJvbWlzZXNbcHJvcGVydHldID0gQW5pbWF0aW9uVXRpbHMuaW50ZXJwb2xhdGVQcm9wZXJ0eShcbiAgICAgIHRoaXMsXG4gICAgICBwcm9wZXJ0eSxcbiAgICAgIHZhbHVlLFxuICAgICAge1xuICAgICAgICBzZWNvbmRzLFxuICAgICAgICBlYXNpbmdGbixcbiAgICAgICAgb25Qcm9ncmVzczogKCkgPT4ge1xuICAgICAgICAgIHRoaXMuX3VwZGF0ZUJsZW5kV2VpZ2h0cygpO1xuICAgICAgICB9LFxuICAgICAgICBvbkZpbmlzaDogKCkgPT4ge1xuICAgICAgICAgIHRoaXMuX3VwZGF0ZUJsZW5kV2VpZ2h0cygpO1xuICAgICAgICB9LFxuICAgICAgfVxuICAgICk7XG5cbiAgICByZXR1cm4gdGhpcy5fcHJvbWlzZXNbcHJvcGVydHldO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHVzZXIgZGVmaW5lZCB3ZWlnaHQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gTmFtZSBvZiBibGVuZCB3ZWlnaHQuXG4gICAqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICBnZXRCbGVuZFdlaWdodChuYW1lKSB7XG4gICAgY29uc3QgcHJvcGVydHkgPSBuYW1lLnRvVXBwZXJDYXNlKCk7XG4gICAgaWYgKHByb3BlcnR5ICE9PSAnWCcgJiYgcHJvcGVydHkgIT09ICdZJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQ2Fubm90IGdldCBibGVuZCB3ZWlnaHQgZm9yICR7bmFtZX0gb24gJHt0aGlzLm5hbWV9LiBCbGVuZDJkU3RhdGUgb25seSBhY2NlcHRzICdYJyBvciAnWScgZm9yIGdldEJsZW5kV2VpZ2h0YFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvcGVydHkgPT09ICdYJyA/IHRoaXMuX2JsZW5kVmFsdWVYIDogdGhpcy5fYmxlbmRWYWx1ZVk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBhbmQgc2V0cyB0aGUgeCBibGVuZCB3ZWlnaHQuXG4gICAqL1xuICBnZXQgYmxlbmRWYWx1ZVgoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2JsZW5kVmFsdWVYO1xuICB9XG5cbiAgc2V0IGJsZW5kVmFsdWVYKHZhbHVlKSB7XG4gICAgdGhpcy5fYmxlbmRWYWx1ZVggPSB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGFuZCBzZXRzIHRoZSB5IGJsZW5kIHdlaWdodC5cbiAgICovXG4gIGdldCBibGVuZFZhbHVlWSgpIHtcbiAgICByZXR1cm4gdGhpcy5fYmxlbmRWYWx1ZVk7XG4gIH1cblxuICBzZXQgYmxlbmRWYWx1ZVkodmFsdWUpIHtcbiAgICB0aGlzLl9ibGVuZFZhbHVlWSA9IHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgd2hldGhlciBvciBub3QgdGhlIHggYmxlbmQgdmFsdWUgaXMgY3VycmVudGx5IGJlaW5nIGFuaW1hdGVkLlxuICAgKi9cbiAgZ2V0IGJsZW5kVmFsdWVYUGVuZGluZygpIHtcbiAgICByZXR1cm4gdGhpcy5fcHJvbWlzZXMuYmxlbmRWYWx1ZVggJiYgdGhpcy5fcHJvbWlzZXMuYmxlbmRWYWx1ZVgucGVuZGluZztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHdoZXRoZXIgb3Igbm90IHRoZSB5IGJsZW5kIHZhbHVlIGlzIGN1cnJlbnRseSBiZWluZyBhbmltYXRlZC5cbiAgICovXG4gIGdldCBibGVuZFZhbHVlWVBlbmRpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Byb21pc2VzLmJsZW5kVmFsdWVZICYmIHRoaXMuX3Byb21pc2VzLmJsZW5kVmFsdWVZLnBlbmRpbmc7XG4gIH1cblxuICB1cGRhdGVJbnRlcm5hbFdlaWdodChmYWN0b3IpIHtcbiAgICBzdXBlci51cGRhdGVJbnRlcm5hbFdlaWdodChmYWN0b3IpO1xuXG4gICAgaWYgKHRoaXMuX3BoYXNlTGVhZFN0YXRlKSB7XG4gICAgICBbLi4udGhpcy5fc3RhdGVzLnZhbHVlcygpXS5mb3JFYWNoKChzdGF0ZSwgaW5kZXgpID0+IHtcbiAgICAgICAgaWYgKHN0YXRlLndlaWdodCAhPT0gMCAmJiB0aGlzLl90aHJlc2hvbGRzW2luZGV4XS5waGFzZU1hdGNoKSB7XG4gICAgICAgICAgc3RhdGUubm9ybWFsaXplZFRpbWUgPSB0aGlzLl9waGFzZUxlYWRTdGF0ZS5ub3JtYWxpemVkVGltZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIGJsZW5kIHdlaWdodHMgYmFzZWQgb24gdGhlaXIgY29ycmVzcG9uZGluZyB0aHJlc2hvbGQgdmFsdWVzXG4gICAqIGFuZCB0aGUgY3VycmVudCBbeCx5XSBibGVuZFZhbHVlLiBBZGRpdGlvbmFsbHksIHNldHMgYSBsZWFkIHBoYXNlIHN0YXRlIGlmIHRoZVxuICAgKiBjb25kaXRpb25zIGZvciBwaGFzZS1tYXRjaGluZyBoYXZlIGJlZW4gc2F0aXNmaWVkLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3VwZGF0ZUJsZW5kV2VpZ2h0cygpIHtcbiAgICBpZiAoIXRoaXMuX3ZlcnRpY2VzIHx8IHRoaXMuX3ZlcnRpY2VzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuXG4gICAgaWYgKHRoaXMuX3ZlcnRpY2VzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgWy4uLnRoaXMuX3N0YXRlcy52YWx1ZXMoKV1bMF0ud2VpZ2h0ID0gMTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBJbml0aWFsbHkgc2V0IGFsbCBzdWItc3RhdGUgd2VpZ2h0cyB0byB6ZXJvXG4gICAgdGhpcy5fc3RhdGVzLmZvckVhY2goc3RhdGUgPT4ge1xuICAgICAgc3RhdGUuc2V0V2VpZ2h0KDApO1xuICAgIH0pO1xuICAgIHRoaXMuX3BoYXNlTGVhZFN0YXRlID0gbnVsbDtcblxuICAgIGNvbnN0IHAgPSBbdGhpcy5fYmxlbmRWYWx1ZVgsIHRoaXMuX2JsZW5kVmFsdWVZXTtcblxuICAgIGlmICh0aGlzLl92ZXJ0aWNlcy5sZW5ndGggPT09IDIpIHtcbiAgICAgIHRoaXMuX3NldEluZmx1ZW5jZUNsb3Nlc3RQb2ludE9uTGluZShwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgdHJpYW5nbGUgPSB0aGlzLl90cmlhbmdsZXMuZmluZCh0cmlhbmdsZSA9PiB7XG4gICAgICAgIHJldHVybiBNYXRoVXRpbHMuaXNQb2ludEluVHJpYW5nbGUoXG4gICAgICAgICAgdGhpcy5fdmVydGljZXNbdHJpYW5nbGVbMF1dLFxuICAgICAgICAgIHRoaXMuX3ZlcnRpY2VzW3RyaWFuZ2xlWzFdXSxcbiAgICAgICAgICB0aGlzLl92ZXJ0aWNlc1t0cmlhbmdsZVsyXV0sXG4gICAgICAgICAgcFxuICAgICAgICApO1xuICAgICAgfSk7XG5cbiAgICAgIGlmICh0cmlhbmdsZSkge1xuICAgICAgICB0aGlzLl9zZXRJbmZsdWVuY2VUcmlhbmdsZSh0cmlhbmdsZSwgcCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9zZXRJbmZsdWVuY2VDbG9zZXN0UG9pbnRJblRyaWFuZ2xlcyhwKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2V0cyBibGVuZCB3ZWlnaHRzIGZvciBzdGF0ZXMgY29ycmVzcG9uZGluZyB0byBhXG4gICAqIHRyaWFuZ2xlIG9mIHRocmVzaG9sZHMgYW5kIGEgZ2l2ZW4gW3gseV0gYmxlbmRWYWx1ZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkuPEFycmF5LjxudW1iZXI+Pn0gdHJpYW5nbGUgLSBTZXQgb2YgdHJpYW5nbHVhdGVkIGluZGljZXNcbiAgICogdGhhdCBjb3JyZXNwb25kIHRvIGJsZW5kIHRocmVzaG9sZHMuXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IHAgLSBHaXZlbiBbeCx5XSBibGVuZFZhbHVlLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3NldEluZmx1ZW5jZVRyaWFuZ2xlKHRyaWFuZ2xlLCBwKSB7XG4gICAgY29uc3QgYXJlYUEgPSBNYXRoVXRpbHMudHJpYW5nbGVBcmVhKFxuICAgICAgdGhpcy5fdmVydGljZXNbdHJpYW5nbGVbMV1dLFxuICAgICAgdGhpcy5fdmVydGljZXNbdHJpYW5nbGVbMl1dLFxuICAgICAgcFxuICAgICk7XG5cbiAgICBjb25zdCBhcmVhQiA9IE1hdGhVdGlscy50cmlhbmdsZUFyZWEoXG4gICAgICB0aGlzLl92ZXJ0aWNlc1t0cmlhbmdsZVswXV0sXG4gICAgICB0aGlzLl92ZXJ0aWNlc1t0cmlhbmdsZVsyXV0sXG4gICAgICBwXG4gICAgKTtcblxuICAgIGNvbnN0IGFyZWFDID0gTWF0aFV0aWxzLnRyaWFuZ2xlQXJlYShcbiAgICAgIHRoaXMuX3ZlcnRpY2VzW3RyaWFuZ2xlWzBdXSxcbiAgICAgIHRoaXMuX3ZlcnRpY2VzW3RyaWFuZ2xlWzFdXSxcbiAgICAgIHBcbiAgICApO1xuXG4gICAgY29uc3QgdG90YWxBcmVhID0gYXJlYUEgKyBhcmVhQiArIGFyZWFDO1xuXG4gICAgY29uc3Qgd2VpZ2h0QSA9IGFyZWFBIC8gdG90YWxBcmVhO1xuICAgIGNvbnN0IHdlaWdodEIgPSBhcmVhQiAvIHRvdGFsQXJlYTtcbiAgICBjb25zdCB3ZWlnaHRDID0gYXJlYUMgLyB0b3RhbEFyZWE7XG5cbiAgICBjb25zdCB0aHJlc2hvbGRBID0gdGhpcy5fdGhyZXNob2xkc1t0cmlhbmdsZVswXV07XG4gICAgY29uc3QgdGhyZXNob2xkQiA9IHRoaXMuX3RocmVzaG9sZHNbdHJpYW5nbGVbMV1dO1xuICAgIGNvbnN0IHRocmVzaG9sZEMgPSB0aGlzLl90aHJlc2hvbGRzW3RyaWFuZ2xlWzJdXTtcblxuICAgIGNvbnN0IHN0YXRlQSA9IHRoaXMuX3N0YXRlcy5nZXQodGhyZXNob2xkQS5uYW1lKTtcbiAgICBjb25zdCBzdGF0ZUIgPSB0aGlzLl9zdGF0ZXMuZ2V0KHRocmVzaG9sZEIubmFtZSk7XG4gICAgY29uc3Qgc3RhdGVDID0gdGhpcy5fc3RhdGVzLmdldCh0aHJlc2hvbGRDLm5hbWUpO1xuXG4gICAgc3RhdGVBLnNldFdlaWdodCh3ZWlnaHRBKTtcbiAgICBzdGF0ZUIuc2V0V2VpZ2h0KHdlaWdodEIpO1xuICAgIHN0YXRlQy5zZXRXZWlnaHQod2VpZ2h0Qyk7XG5cbiAgICB0aGlzLl9zZXRQaGFzZUxlYWRTdGF0ZShcbiAgICAgIFtzdGF0ZUEsIHN0YXRlQiwgc3RhdGVDXSxcbiAgICAgIFt0aHJlc2hvbGRBLnBoYXNlTWF0Y2gsIHRocmVzaG9sZEIucGhhc2VNYXRjaCwgdGhyZXNob2xkQy5waGFzZU1hdGNoXVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB0aGUgY2xvc2VzdCBwb2ludCB3aXRoaW4gYSB0cmlhbmdsZSBvZlxuICAgKiB0aHJlc2hvbGRzIGJhc2VkIG9uIHRoZSBjdXJyZW50IFt4LHldIGJsZW5kVmFsdWVzIGFuZFxuICAgKiB0aGVuIHNldHMgYmxlbmQgd2VpZ2h0cyBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgc3RhdGVzLlxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBwIC0gR2l2ZW4gW3gseV0gYmxlbmRWYWx1ZS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9zZXRJbmZsdWVuY2VDbG9zZXN0UG9pbnRJblRyaWFuZ2xlcyhwKSB7XG4gICAgbGV0IGdsb2JhbENsb3Nlc3RQb2ludCA9IG51bGw7XG4gICAgbGV0IGdsb2JhbE1pbkRpc3QgPSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7XG4gICAgbGV0IGNsb3Nlc3RUcmlhbmdsZSA9IC0xO1xuXG4gICAgdGhpcy5fdHJpYW5nbGVzLmZvckVhY2goKHRyaWFuZ2xlLCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgcG9pbnRBID0gTWF0aFV0aWxzLmNsb3Nlc3RQb2ludE9uTGluZShcbiAgICAgICAgdGhpcy5fdmVydGljZXNbdHJpYW5nbGVbMF1dLFxuICAgICAgICB0aGlzLl92ZXJ0aWNlc1t0cmlhbmdsZVsxXV0sXG4gICAgICAgIHBcbiAgICAgICk7XG4gICAgICBjb25zdCBwb2ludEIgPSBNYXRoVXRpbHMuY2xvc2VzdFBvaW50T25MaW5lKFxuICAgICAgICB0aGlzLl92ZXJ0aWNlc1t0cmlhbmdsZVsxXV0sXG4gICAgICAgIHRoaXMuX3ZlcnRpY2VzW3RyaWFuZ2xlWzJdXSxcbiAgICAgICAgcFxuICAgICAgKTtcbiAgICAgIGNvbnN0IHBvaW50QyA9IE1hdGhVdGlscy5jbG9zZXN0UG9pbnRPbkxpbmUoXG4gICAgICAgIHRoaXMuX3ZlcnRpY2VzW3RyaWFuZ2xlWzJdXSxcbiAgICAgICAgdGhpcy5fdmVydGljZXNbdHJpYW5nbGVbMF1dLFxuICAgICAgICBwXG4gICAgICApO1xuXG4gICAgICBjb25zdCBkaXN0QSA9IE1hdGhVdGlscy5kaXN0YW5jZVNxdWFyZWQocG9pbnRBLCBwKTtcbiAgICAgIGNvbnN0IGRpc3RCID0gTWF0aFV0aWxzLmRpc3RhbmNlU3F1YXJlZChwb2ludEIsIHApO1xuICAgICAgY29uc3QgZGlzdEMgPSBNYXRoVXRpbHMuZGlzdGFuY2VTcXVhcmVkKHBvaW50QywgcCk7XG5cbiAgICAgIGxldCBsb2NhbENsb3Nlc3RQb2ludCA9IHBvaW50QztcbiAgICAgIGxldCBsb2NhbE1pbkRpc3QgPSBkaXN0QztcblxuICAgICAgaWYgKGRpc3RBIDwgbG9jYWxNaW5EaXN0KSB7XG4gICAgICAgIGxvY2FsQ2xvc2VzdFBvaW50ID0gcG9pbnRBO1xuICAgICAgICBsb2NhbE1pbkRpc3QgPSBkaXN0QTtcbiAgICAgIH1cbiAgICAgIGlmIChkaXN0QiA8IGxvY2FsTWluRGlzdCkge1xuICAgICAgICBsb2NhbENsb3Nlc3RQb2ludCA9IHBvaW50QjtcbiAgICAgICAgbG9jYWxNaW5EaXN0ID0gZGlzdEI7XG4gICAgICB9XG5cbiAgICAgIGlmIChsb2NhbE1pbkRpc3QgPCBnbG9iYWxNaW5EaXN0KSB7XG4gICAgICAgIGdsb2JhbE1pbkRpc3QgPSBsb2NhbE1pbkRpc3Q7XG4gICAgICAgIGdsb2JhbENsb3Nlc3RQb2ludCA9IFsuLi5sb2NhbENsb3Nlc3RQb2ludF07XG4gICAgICAgIGNsb3Nlc3RUcmlhbmdsZSA9IGluZGV4O1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5fc2V0SW5mbHVlbmNlVHJpYW5nbGUoXG4gICAgICB0aGlzLl90cmlhbmdsZXNbY2xvc2VzdFRyaWFuZ2xlXSxcbiAgICAgIGdsb2JhbENsb3Nlc3RQb2ludFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB0aGUgY2xvc2VzdCBwb2ludCBvbiB0aGUgbGluZSBmb3JtZWQgYmV0d2VlbiB0aGVcbiAgICogdHdvIGJsZW5kIHRocmVzaG9sZHMgYmFzZWQgb24gdGhlIGN1cnJlbnQgW3gseV0gYmxlbmRWYWx1ZXMgYW5kXG4gICAqIHRoZW4gc2V0cyBibGVuZCB3ZWlnaHRzIGZvciB0aGUgY29ycmVzcG9uZGluZyBzdGF0ZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IHAgLSBHaXZlbiBbeCx5XSBibGVuZFZhbHVlLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3NldEluZmx1ZW5jZUNsb3Nlc3RQb2ludE9uTGluZShwKSB7XG4gICAgY29uc3QgY2xvc2VzdFBvaW50ID0gTWF0aFV0aWxzLmNsb3Nlc3RQb2ludE9uTGluZShcbiAgICAgIHRoaXMuX3ZlcnRpY2VzW1swXV0sXG4gICAgICB0aGlzLl92ZXJ0aWNlc1tbMV1dLFxuICAgICAgcFxuICAgICk7XG5cbiAgICBjb25zdCBkaXN0QSA9IE1hdGhVdGlscy5kaXN0YW5jZVNxdWFyZWQodGhpcy5fdmVydGljZXNbMF0sIGNsb3Nlc3RQb2ludCk7XG4gICAgY29uc3QgZGlzdEIgPSBNYXRoVXRpbHMuZGlzdGFuY2VTcXVhcmVkKHRoaXMuX3ZlcnRpY2VzWzFdLCBjbG9zZXN0UG9pbnQpO1xuXG4gICAgY29uc3Qgd2VpZ2h0QSA9IGRpc3RCIC8gKGRpc3RBICsgZGlzdEIpO1xuICAgIGNvbnN0IHdlaWdodEIgPSBkaXN0QSAvIChkaXN0QSArIGRpc3RCKTtcblxuICAgIGNvbnN0IHRocmVzaG9sZEEgPSB0aGlzLl90aHJlc2hvbGRzWzBdO1xuICAgIGNvbnN0IHRocmVzaG9sZEIgPSB0aGlzLl90aHJlc2hvbGRzWzFdO1xuXG4gICAgY29uc3Qgc3RhdGVBID0gdGhpcy5fc3RhdGVzLmdldCh0aHJlc2hvbGRBLm5hbWUpO1xuICAgIGNvbnN0IHN0YXRlQiA9IHRoaXMuX3N0YXRlcy5nZXQodGhyZXNob2xkQi5uYW1lKTtcblxuICAgIHN0YXRlQS5zZXRXZWlnaHQod2VpZ2h0QSk7XG4gICAgc3RhdGVCLnNldFdlaWdodCh3ZWlnaHRCKTtcblxuICAgIHRoaXMuX3NldFBoYXNlTGVhZFN0YXRlKFxuICAgICAgW3N0YXRlQSwgc3RhdGVCXSxcbiAgICAgIFt0aHJlc2hvbGRBLnBoYXNlTWF0Y2gsIHRocmVzaG9sZEIucGhhc2VNYXRjaF1cbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgYSBsZWFkIHBoYXNlIHN0YXRlIGlmIHRoZSBjb25kaXRpb25zXG4gICAqIGZvciBwaGFzZS1tYXRjaGluZyBhcmUgc2F0aXNmaWVkLlxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5LjxBYnN0cmFjdEJsZW5kU3RhdGU+fSBzdGF0ZXMgLSBTdGF0ZXMgdG9cbiAgICogY2hlY2sgcGhhc2UtbWF0Y2hpbmcgY3JpdGVyaWEuXG4gICAqIEBwYXJhbSB7QXJyYXkuPGJvb2xlYW4+fSBwaGFzZU1hdGNoZWQgLSBMaXN0IG9mIHBoYXNlLW1hdGNoIGJvb2xlYW5zLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3NldFBoYXNlTGVhZFN0YXRlKHN0YXRlcywgcGhhc2VNYXRjaGVkKSB7XG4gICAgbGV0IG1heCA9IDA7XG4gICAgc3RhdGVzLmZvckVhY2goKHN0YXRlLCBpbmRleCkgPT4ge1xuICAgICAgaWYgKHBoYXNlTWF0Y2hlZFtpbmRleF0gJiYgc3RhdGUud2VpZ2h0ID4gbWF4KSB7XG4gICAgICAgIHRoaXMuX3BoYXNlTGVhZFN0YXRlID0gc3RhdGU7XG4gICAgICAgIG1heCA9IHN0YXRlLndlaWdodDtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBCbGVuZDJkU3RhdGU7XG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxuaW1wb3J0IEFic3RyYWN0QmxlbmRTdGF0ZSBmcm9tICcuL3N0YXRlL0Fic3RyYWN0QmxlbmRTdGF0ZSc7XG5pbXBvcnQgQW5pbWF0aW9uUGxheWVySW50ZXJmYWNlIGZyb20gJy4vQW5pbWF0aW9uUGxheWVySW50ZXJmYWNlJztcbmltcG9ydCBBbmltYXRpb25VdGlscyBmcm9tICcuL0FuaW1hdGlvblV0aWxzJztcbmltcG9ydCBNYXRoVXRpbHMgZnJvbSAnLi4vTWF0aFV0aWxzJztcbmltcG9ydCBEZWZlcnJlZCBmcm9tICcuLi9EZWZlcnJlZCc7XG5pbXBvcnQgU3RhdGVDb250YWluZXJJbnRlcmZhY2UgZnJvbSAnLi9zdGF0ZS9TdGF0ZUNvbnRhaW5lckludGVyZmFjZSc7XG5cbi8qKlxuICogRW51bSBmb3IgdHlwZXMgb2Yge0BsaW5rIEFuaW1hdGlvbkxheWVyfSBibGVuZGluZy5cbiAqXG4gKiBAcmVhZG9ubHlcbiAqIEBlbnVtIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBjb25zdCBMYXllckJsZW5kTW9kZXMgPSB7T3ZlcnJpZGU6ICdPdmVycmlkZScsIEFkZGl0aXZlOiAnQWRkaXRpdmUnfTtcblxuLyoqXG4gKiBUaGUgZGVmYXVsdCBibGVuZGluZyBtb2RlIHtAbGluayBBbmltYXRpb25MYXllcn0uXG4gKlxuICogQHJlYWRvbmx5XG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5leHBvcnQgY29uc3QgRGVmYXVsdExheWVyQmxlbmRNb2RlID0gJ092ZXJyaWRlJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYSBnaXZlbiBibGVuZE1vZGUgaXMgcHJlc2VudCBpbiB0aGUgdmFsdWVzIG9mIHtAbGluayBMYXllckJsZW5kTW9kZXN9LlxuICogSWYgaXQgaXMsIHJldHVybiB0aGUgb3JpZ2luYWwgdmFsdWUsIG90aGVyd2lzZSByZXR1cm4ge0BsaW5rIERlZmF1bHRMYXllckJsZW5kTW9kZX0uXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGJsZW5kTW9kZSAtIFRoZSBuYW1lIG9mIHRoZSB0eXBlIG9mIGJsZW5kaW5nLlxuICpcbiAqIEByZXR1cm5zIHsoc3RyaW5nfERlZmF1bHRMYXllckJsZW5kTW9kZSl9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUJsZW5kTW9kZShibGVuZE1vZGUpIHtcbiAgaWYgKEFycmF5LmZyb20oT2JqZWN0LnZhbHVlcyhMYXllckJsZW5kTW9kZXMpKS5pbmNsdWRlcyhibGVuZE1vZGUpKSB7XG4gICAgcmV0dXJuIGJsZW5kTW9kZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gRGVmYXVsdExheWVyQmxlbmRNb2RlO1xuICB9XG59XG5cbi8qKlxuICogQ2xhc3MgZm9yIG1hbmFnaW5nIGEgc2V0IG9mIGFuaW1hdGlvbnMgd2hlcmUgb25seSBvbmUgc3RhdGUgY2FuIGJlIGFjdGl2ZSBhdFxuICogYW55IGdpdmVuIHRpbWUuXG4gKlxuICogQGltcGxlbWVudHMgQW5pbWF0aW9uUGxheWVySW50ZXJmYWNlXG4gKiBAaW1wbGVtZW50cyBTdGF0ZUNvbnRhaW5lckludGVyZmFjZVxuICovXG5jbGFzcyBBbmltYXRpb25MYXllciBleHRlbmRzIEFuaW1hdGlvblBsYXllckludGVyZmFjZS5NaXhpbihcbiAgU3RhdGVDb250YWluZXJJbnRlcmZhY2UuTWl4aW4oKVxuKSB7XG4gIC8qKlxuICAgKiBAY29uc3RydWN0b3JcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3Q9fSBvcHRpb25zIC0gIE9wdGlvbnMgZm9yIHRoZSBhbmltYXRpb24gbGF5ZXIuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRpb25zLm5hbWUgLSBOYW1lIG9mIHRoZSBsYXllci4gTmFtZXMgbXVzdCBiZSB1bmlxdWUgdG8gdGhlXG4gICAqIGFuaW1hdGlvbiBmZWF0dXJlIHRoYXQgY29udGFpbnMgdGhlIGxheWVyLlxuICAgKiBAcGFyYW0ge0xheWVyQmxlbmRNb2Rlc30gW29wdGlvbnMuYmxlbmRNb2RlPURlZmF1bHRMYXllckJsZW5kTW9kZV0gLVxuICAgKiBUeXBlIG9mIGJsZW5kaW5nIHRvIHVzZSBmb3IgYWxsIHN0YXRlcyBjb250cm9sbGVkIGJ5IHRoZSBsYXllci5cbiAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLndlaWdodD0xXSAtIFRoZSBhbW91bnQgb2YgaW5mbHVlbmNlIHRoZSBsYXllcidzIGN1cnJlbnRcbiAgICogYW5pbWF0aW9uIGhhcyBvdmVyIHRoZSByZXN1bHQgZm9yIHRoZSBob3N0LlxuICAgKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMudHJhbnNpdGlvblRpbWU9MF0gLSBUaGUgZGVmYXVsdCBhbW91bnQgb2YgdGltZSB0byB1c2Ugd2hlblxuICAgKiBwbGF5aW5nIGFuZCByZXN1bWluZyBhbmltYXRpb25zLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb3B0aW9ucy5lYXNpbmdGbiAtIFRoZSBkZWZhdWx0IGVhc2luZyBmdW5jdGlvbiB0byB1c2Ugd2hlblxuICAgKiB0cmFuc2l0aW9uaW5nIGJldHdlZW4gYW5pbWF0aW9ucyBhbmQgc2V0dGluZyBsYXllciB3ZWlnaHQuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihvcHRpb25zID0ge30pIHtcbiAgICBzdXBlcihvcHRpb25zKTtcblxuICAgIHRoaXMubmFtZSA9IG9wdGlvbnMubmFtZSA9PT0gdW5kZWZpbmVkID8gJ0FuaW1hdGlvbkxheWVyJyA6IG9wdGlvbnMubmFtZTtcbiAgICB0aGlzLl9ibGVuZE1vZGUgPSBBcnJheS5mcm9tKE9iamVjdC52YWx1ZXMoTGF5ZXJCbGVuZE1vZGVzKSkuaW5jbHVkZXMoXG4gICAgICBvcHRpb25zLmJsZW5kTW9kZVxuICAgIClcbiAgICAgID8gb3B0aW9ucy5ibGVuZE1vZGVcbiAgICAgIDogRGVmYXVsdExheWVyQmxlbmRNb2RlO1xuICAgIHRoaXMuX3Byb21pc2VzID0ge1xuICAgICAgd2VpZ2h0OiBEZWZlcnJlZC5yZXNvbHZlKCksXG4gICAgfTtcbiAgICB0aGlzLl93ZWlnaHRQYXVzZWQgPSBmYWxzZTtcblxuICAgIHRoaXMud2VpZ2h0ID0gdHlwZW9mIG9wdGlvbnMud2VpZ2h0ID09PSAnbnVtYmVyJyA/IG9wdGlvbnMud2VpZ2h0IDogMTtcbiAgICB0aGlzLl9pbnRlcm5hbFdlaWdodCA9IHRoaXMuX3dlaWdodDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSB0eXBlIG9mIGJsZW5kaW5nIHVzZWQgZm9yIHN0YXRlcyBjb250cm9sbGVkIGJ5IHRoZSBsYXllci5cbiAgICpcbiAgICogQHJlYWRvbmx5XG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICBnZXQgYmxlbmRNb2RlKCkge1xuICAgIHJldHVybiB0aGlzLl9ibGVuZE1vZGU7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBhbmQgc2V0cyB0aGUgYW1vdW50IG9mIGluZmx1ZW5jZSB0aGUgbGF5ZXIncyBjdXJyZW50IGFuaW1hdGlvbiBoYXMgb3ZlclxuICAgKiB0aGUgcmVzdWx0IGZvciB0aGUgaG9zdC5cbiAgICpcbiAgICogQHR5cGUge251bWJlcn1cbiAgICovXG4gIHNldCB3ZWlnaHQod2VpZ2h0KSB7XG4gICAgdGhpcy5fd2VpZ2h0ID0gTWF0aFV0aWxzLmNsYW1wKHdlaWdodCwgMCwgMSk7XG4gIH1cblxuICBnZXQgd2VpZ2h0KCkge1xuICAgIHJldHVybiB0aGlzLl93ZWlnaHQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB3aGV0aGVyIG9yIG5vdCB0aGUgbGF5ZXIncyB3ZWlnaHQgdmFsdWUgaXMgY3VycmVudGx5IGJlaW5nIGFuaW1hdGVkLlxuICAgKlxuICAgKiBAcmVhZG9ubHlcbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqL1xuICBnZXQgd2VpZ2h0UGVuZGluZygpIHtcbiAgICByZXR1cm4gdGhpcy5fcHJvbWlzZXMud2VpZ2h0ICYmIHRoaXMuX3Byb21pc2VzLndlaWdodC5wZW5kaW5nO1xuICB9XG5cbiAgLyoqXG4gICAqIFBhdXNlIHRoZSBjdXJyZW50IGFuaW1hdGlvbiBzdGF0ZSBhbmQgYW55IGludGVycG9sYXRpb24gaGFwcGVuaW5nIG9uIHRoZSBsYXllcidzXG4gICAqIHdlaWdodCBwcm9wZXJ0eS5cbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBwYXVzZSgpIHtcbiAgICB0aGlzLl9wYXVzZWQgPSB0cnVlO1xuICAgIHRoaXMuX3dlaWdodFBhdXNlZCA9IHRydWU7XG5cbiAgICByZXR1cm4gdGhpcy5wYXVzZUFuaW1hdGlvbigpIHx8IHRoaXMud2VpZ2h0UGVuZGluZztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXN1bWUgdGhlIGN1cnJlbnQgYW5pbWF0aW9uIHN0YXRlIGFuZCBhbnkgaW50ZXJwb2xhdGlvbiBoYXBwZW5pbmcgb24gdGhlIGxheWVyJ3NcbiAgICogd2VpZ2h0IHByb3BlcnR5LlxuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIHJlc3VtZSgpIHtcbiAgICB0aGlzLl9wYXVzZWQgPSBmYWxzZTtcbiAgICB0aGlzLl93ZWlnaHRQYXVzZWQgPSBmYWxzZTtcblxuICAgIGNvbnN0IGlzV2VpZ2h0QWN0aXZlID0gdGhpcy53ZWlnaHRQZW5kaW5nO1xuXG4gICAgaWYgKHRoaXMuX2N1cnJlbnRTdGF0ZSkge1xuICAgICAgcmV0dXJuIHRoaXMucmVzdW1lQW5pbWF0aW9uKCkgfHwgaXNXZWlnaHRBY3RpdmU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBpc1dlaWdodEFjdGl2ZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgdXNlciBkZWZpbmVkIHdlaWdodCBvdmVyIHRpbWUuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB3ZWlnaHQgLSBUaGUgdGFyZ2V0IHdlaWdodCB2YWx1ZS5cbiAgICogQHBhcmFtIHtudW1iZXJ9IFtzZWNvbmRzPTBdIC0gVGhlIGFtb3VudCBvZiB0aW1lIGl0IHdpbGwgdGFrZSB0byByZWFjaCB0aGVcbiAgICogdGFyZ2V0IHdlaWdodC5cbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IGVhc2luZ0ZuIC0gVGhlIGVhc2luZyBmdW5jdGlvbiB0byB1c2UgZm9yIGludGVycG9sYXRpb24uXG4gICAqXG4gICAqIEByZXR1cm5zIHtEZWZlcnJlZH1cbiAgICovXG4gIHNldFdlaWdodCh3ZWlnaHQsIHNlY29uZHMgPSAwLCBlYXNpbmdGbikge1xuICAgIGlmICh0aGlzLndlaWdodFBlbmRpbmcpIHtcbiAgICAgIHRoaXMuX3Byb21pc2VzLndlaWdodC5jYW5jZWwoKTtcbiAgICB9XG5cbiAgICB3ZWlnaHQgPSBNYXRoVXRpbHMuY2xhbXAod2VpZ2h0KTtcbiAgICB0aGlzLl9wcm9taXNlcy53ZWlnaHQgPSBBbmltYXRpb25VdGlscy5pbnRlcnBvbGF0ZVByb3BlcnR5KFxuICAgICAgdGhpcyxcbiAgICAgICd3ZWlnaHQnLFxuICAgICAgd2VpZ2h0LFxuICAgICAge1xuICAgICAgICBzZWNvbmRzLFxuICAgICAgICBlYXNpbmdGbjogZWFzaW5nRm4gIT09IHVuZGVmaW5lZCA/IGVhc2luZ0ZuIDogdGhpcy5fZWFzaW5nRm4sXG4gICAgICB9XG4gICAgKTtcblxuICAgIHJldHVybiB0aGlzLl9wcm9taXNlcy53ZWlnaHQ7XG4gIH1cblxuICAvKipcbiAgICogUGF1c2UgYW55IGludGVycG9sYXRpb24gaGFwcGVuaW5nIG9uIHRoZSBsYXllcidzIHdlaWdodCBwcm9wZXJ0eS5cbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBwYXVzZVdlaWdodCgpIHtcbiAgICB0aGlzLl93ZWlnaHRQYXVzZWQgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXMud2VpZ2h0UGVuZGluZztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXN1bWUgYW55IGludGVycG9sYXRpb24gaGFwcGVuaW5nIG9uIHRoZSBsYXllcidzIHdlaWdodCBwcm9wZXJ0eS5cbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICByZXN1bWVXZWlnaHQoKSB7XG4gICAgdGhpcy5fd2VpZ2h0UGF1c2VkID0gZmFsc2U7XG5cbiAgICByZXR1cm4gdGhpcy53ZWlnaHRQZW5kaW5nO1xuICB9XG5cbiAgLyoqXG4gICAqIE11bHRpcGxpZXMgdGhlIHVzZXIgd2VpZ2h0IGJ5IGEgZmFjdG9yIHRvIGRldGVybWluZSB0aGUgaW50ZXJuYWwgd2VpZ2h0LlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gZmFjdG9yIC0gMC0xIG11bHRpcGxpZXIgdG8gYXBwbHkgdG8gdGhlIHVzZXIgd2VpZ2h0LlxuICAgKi9cbiAgdXBkYXRlSW50ZXJuYWxXZWlnaHQoZmFjdG9yKSB7XG4gICAgdGhpcy5faW50ZXJuYWxXZWlnaHQgPSB0aGlzLl93ZWlnaHQgKiBmYWN0b3I7XG5cbiAgICBpZiAodGhpcy5fY3VycmVudFN0YXRlKSB7XG4gICAgICB0aGlzLl9jdXJyZW50U3RhdGUudXBkYXRlSW50ZXJuYWxXZWlnaHQodGhpcy5faW50ZXJuYWxXZWlnaHQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBuYW1lcyBvZiBibGVuZCBzdGF0ZXMgaW4gYW4gYW5pbWF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYW5pbWF0aW9uTmFtZSAtIE5hbWUgb2YgdGhlIGFuaW1hdGlvbi5cbiAgICpcbiAgICogQHJldHVybnMge0FycmF5LjxzdHJpbmc+fSAtIE5hbWVzIG9mIGJsZW5kIHN0YXRlcy5cbiAgICovXG4gIGdldEFuaW1hdGlvbkJsZW5kTmFtZXMoYW5pbWF0aW9uTmFtZSkge1xuICAgIGNvbnN0IHN0YXRlID0gdGhpcy5nZXRTdGF0ZShhbmltYXRpb25OYW1lKTtcblxuICAgIGlmIChzdGF0ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBDYW5ub3QgZ2V0IGJsZW5kIG5hbWVzIG9mIGFuaW1hdGlvbiAke2FuaW1hdGlvbk5hbWV9IG9uIGxheWVyICR7dGhpcy5uYW1lfS4gTm8gYW5pbWF0aW9uIGV4aXN0cyB3aXRoIHRoaXMgbmFtZS5gXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChzdGF0ZSBpbnN0YW5jZW9mIEFic3RyYWN0QmxlbmRTdGF0ZSkge1xuICAgICAgcmV0dXJuIHN0YXRlLmdldFN0YXRlTmFtZXMoKTtcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgQ2Fubm90IGdldCBibGVuZCBuYW1lcyBvZiBhbmltYXRpb24gJHthbmltYXRpb25OYW1lfSBvbiBsYXllciAke3RoaXMubmFtZX0uIEFuaW1hdGlvbiBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgQWJzdHJhY3RCbGVuZFN0YXRlLmBcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSB0aGUgd2VpZ2h0IGZvciBhIGJsZW5kIHN0YXRlIG9mIGFuIGFuaW1hdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFuaW1hdGlvbk5hbWUgLSBOYW1lIG9mIHRoZSBhbmltYXRpb24gY29udGFpbmluZyB0aGUgYmxlbmQgc3RhdGVcbiAgICogdG8gdXBkYXRlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYmxlbmROYW1lIC0gTmFtZSBvZiB0aGUgYmxlbmQgc3RhdGUgdG8gdXBkYXRlLlxuICAgKiBAcGFyYW0ge251bWJlcn0gd2VpZ2h0IC0gV2VpZ2h0IHZhbHVlIHRvIHNldCBvbiB0aGUgYW5pbWF0aW9uLiBUaGlzIG51bWJlciBzaG91ZGxkIGJlXG4gICAqIGluIHRoZSAwLTEgcmFuZ2UuXG4gICAqIEBwYXJhbSB7bnVtYmVyPX0gc2Vjb25kcyAtIE51bWJlciBvZiBzZWNvbmRzIGl0IHNob3VsZCB0YWtlIHRvIHJlYWNoIHRoZSBuZXcgd2VpZ2h0LlxuICAgKiBEZWZhdWx0IGlzIHplcm8gYW5kIHdpbGwgc2V0IGltbWVkaWF0ZWx5LlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gZWFzaW5nRm4gLSBFYXNpbmcgZnVuY3Rpb24gdG8gdXNlIHdoaWxlIGludGVycG9sYXRpbmcgdGhlIG5ld1xuICAgKiB3ZWlnaHQuIERlZmF1bHQgaXMgRWFzaW5nLkxpbmVhci5Jbk91dC5cbiAgICpcbiAgICogQHJldHVybnMge0RlZmVycmVkfSAtIFByb21pc2UgdGhhdCB3aWxsIHJlc29sdmUgb25jZSB0aGUgYW5pbWF0aW9uJ3Mgd2VpZ2h0IHJlYWNoZXNcbiAgICogdGhlIHRhcmdldCB2YWx1ZS5cbiAgICovXG4gIHNldEFuaW1hdGlvbkJsZW5kV2VpZ2h0KFxuICAgIGFuaW1hdGlvbk5hbWUsXG4gICAgYmxlbmROYW1lLFxuICAgIHdlaWdodCxcbiAgICBzZWNvbmRzID0gMCxcbiAgICBlYXNpbmdGblxuICApIHtcbiAgICBjb25zdCBzdGF0ZSA9IHRoaXMuZ2V0U3RhdGUoYW5pbWF0aW9uTmFtZSk7XG5cbiAgICBpZiAoc3RhdGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQ2Fubm90IHNldCBibGVuZCB3ZWlnaHQgb2YgYW5pbWF0aW9uICR7YW5pbWF0aW9uTmFtZX0gb24gbGF5ZXIgJHt0aGlzLm5hbWV9LiBObyBhbmltYXRpb24gZXhpc3RzIHdpdGggdGhpcyBuYW1lLmBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHN0YXRlIGluc3RhbmNlb2YgQWJzdHJhY3RCbGVuZFN0YXRlKSB7XG4gICAgICByZXR1cm4gc3RhdGUuc2V0QmxlbmRXZWlnaHQoYmxlbmROYW1lLCB3ZWlnaHQsIHNlY29uZHMsIGVhc2luZ0ZuKTtcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgQ2Fubm90IHNldCBibGVuZCB3ZWlnaHQgb2YgYW5pbWF0aW9uICR7YW5pbWF0aW9uTmFtZX0gb24gbGF5ZXIgJHt0aGlzLm5hbWV9LiBBbmltYXRpb24gaXMgbm90IGFuIGluc3RhbmNlIG9mIEFic3RyYWN0QmxlbmRTdGF0ZS5gXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSB3ZWlnaHQgZm9yIGEgYmxlbmQgc3RhdGUgb2YgYW4gYW5pbWF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYW5pbWF0aW9uTmFtZSAtIE5hbWUgb2YgdGhlIGFuaW1hdGlvbiBjb250YWluaW5nIHRoZSBibGVuZCBzdGF0ZVxuICAgKiB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBibGVuZE5hbWUgLSBOYW1lIG9mIHRoZSBibGVuZCBzdGF0ZSB0byByZXRyaWV2ZSB0aGUgd2VpZ2h0IG9mLlxuICAgKlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSAtIFdlaWdodCBvZiB0aGUgYmxlbmQgc3RhdGUuXG4gICAqL1xuICBnZXRBbmltYXRpb25CbGVuZFdlaWdodChhbmltYXRpb25OYW1lLCBibGVuZE5hbWUpIHtcbiAgICBjb25zdCBzdGF0ZSA9IHRoaXMuZ2V0U3RhdGUoYW5pbWF0aW9uTmFtZSk7XG5cbiAgICBpZiAoc3RhdGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQ2Fubm90IGdldCBibGVuZCB3ZWlnaHQgb2YgYW5pbWF0aW9uICR7YW5pbWF0aW9uTmFtZX0gb24gbGF5ZXIgJHt0aGlzLm5hbWV9LiBObyBhbmltYXRpb24gZXhpc3RzIHdpdGggdGhpcyBuYW1lLmBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHN0YXRlIGluc3RhbmNlb2YgQWJzdHJhY3RCbGVuZFN0YXRlKSB7XG4gICAgICByZXR1cm4gc3RhdGUuZ2V0QmxlbmRXZWlnaHQoYmxlbmROYW1lKTtcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgQ2Fubm90IGdldCBibGVuZCB3ZWlnaHQgb2YgYW5pbWF0aW9uICR7YW5pbWF0aW9uTmFtZX0gb24gbGF5ZXIgJHt0aGlzLm5hbWV9LiBBbmltYXRpb24gaXMgbm90IGFuIGluc3RhbmNlIG9mIEFic3RyYWN0QmxlbmRTdGF0ZS5gXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgYW55IHdlaWdodCBpbnRlcnBvbGF0b3JzIGFuZCB0aGUgY3VycmVudCBhbmltYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBkZWx0YVRpbWUgLSBUaW1lIGluIG1pbGxpc2Vjb25kcyBzaW5jZSB0aGUgbGFzdCB1cGRhdGUuXG4gICAqL1xuICB1cGRhdGUoZGVsdGFUaW1lKSB7XG4gICAgc3VwZXIudXBkYXRlKGRlbHRhVGltZSk7XG5cbiAgICBpZiAoIXRoaXMuX3BhdXNlZCAmJiAhdGhpcy5fd2VpZ2h0UGF1c2VkKSB7XG4gICAgICB0aGlzLl9wcm9taXNlcy53ZWlnaHQuZXhlY3V0ZShkZWx0YVRpbWUpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDYW5jZWwgYW55IHBlbmRpbmcgcHJvbWlzZXMgYW5kIGRpc2NhcmQgc3RhdGVzIGNvbnRyb2xsZWQgYnkgdGhlIGxheWVyLlxuICAgKi9cbiAgZGlzY2FyZCgpIHtcbiAgICBzdXBlci5kaXNjYXJkKCk7XG5cbiAgICB0aGlzLmRpc2NhcmRTdGF0ZXMoKTtcblxuICAgIHRoaXMuX3Byb21pc2VzLndlaWdodC5jYW5jZWwoKTtcbiAgICBkZWxldGUgdGhpcy5fcHJvbWlzZXM7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQW5pbWF0aW9uTGF5ZXI7XG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxuaW1wb3J0IERlZmVycmVkIGZyb20gJ2NvcmUvRGVmZXJyZWQnO1xuaW1wb3J0IEFic3RyYWN0U3RhdGUgZnJvbSAnLi9BYnN0cmFjdFN0YXRlJztcbmltcG9ydCB7dmFsaWRhdGVCbGVuZE1vZGV9IGZyb20gJy4uL0FuaW1hdGlvbkxheWVyJztcbmltcG9ydCBBbmltYXRpb25VdGlscyBmcm9tICcuLi9BbmltYXRpb25VdGlscyc7XG5cbi8qKlxuICogQ2xhc3MgZm9yIHBsYXlpbmcgYSBzaW5nbGUgYW5pbWF0aW9uIGNsaXAuXG4gKlxuICogQGV4dGVuZHMgQWJzdHJhY3RTdGF0ZVxuICogQGFsaWFzIGNvcmUvU2luZ2xlU3RhdGVcbiAqL1xuY2xhc3MgU2luZ2xlU3RhdGUgZXh0ZW5kcyBBYnN0cmFjdFN0YXRlIHtcbiAgLyoqXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdD19IG9wdGlvbnMgLSBPcHRpb25zIGZvciB0aGUgYW5pbWF0aW9uIHN0YXRlLlxuICAgKiBAcGFyYW0ge3N0cmluZz19IG9wdGlvbnMubmFtZSAtIE5hbWUgZm9yIHRoZSBhbmltYXRpb24gc3RhdGUuIE5hbWVzIG11c3QgYmVcbiAgICogdW5pcXVlIGZvciB0aGUgbGF5ZXIgdGhlIHN0YXRlIGlzIGFwcGxpZWQgdG8uXG4gICAqIEBwYXJhbSB7d2VpZ2h0fSBbb3B0aW9ucy53ZWlnaHQ9MF0gLSBUaGUgMC0xIGFtb3VudCBvZiBpbmZsdWVuY2UgdGhlIHN0YXRlIHdpbGwgaGF2ZS5cbiAgICogQHBhcmFtIHt0aW1lU2NhbGV9IFtvcHRpb25zLnRpbWVTY2FsZT0xXSAtIEZhY3RvciB0byBzY2FsZSB0aGUgcGxheWJhY2sgc3BlZWQgb2YgdGhlXG4gICAqIGFuaW1hdGlvbi5cbiAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLmxvb3BDb3VudD1JbmZpbml0eV0gLSBOdW1iZXIgb2YgdGltZXMgdGhlIGFuaW1hdGlvbiBzaG91bGRcbiAgICogcmVwZWF0IGJlZm9yZSBmaW5pc2hpbmcuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5ibGVuZE1vZGU9RGVmYXVsdExheWVyQmxlbmRNb2RlXSAtIFR5cGUgb2ZcbiAgICogYmxlbmRpbmcgdGhlIGFuaW1hdGlvbiBzaG91bGQgdXNlLlxuICAgKi9cbiAgY29uc3RydWN0b3Iob3B0aW9ucyA9IHt9KSB7XG4gICAgc3VwZXIob3B0aW9ucyk7XG5cbiAgICB0aGlzLl90aW1lU2NhbGUgPSBvcHRpb25zLnRpbWVTY2FsZSAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy50aW1lU2NhbGUgOiAxO1xuICAgIHRoaXMuX3Byb21pc2VzLnRpbWVTY2FsZSA9IERlZmVycmVkLnJlc29sdmUoKTtcbiAgICB0aGlzLl9sb29wQ291bnQgPVxuICAgICAgb3B0aW9ucy5sb29wQ291bnQgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMubG9vcENvdW50IDogSW5maW5pdHk7XG4gICAgdGhpcy5fYmxlbmRNb2RlID0gdmFsaWRhdGVCbGVuZE1vZGUob3B0aW9ucy5ibGVuZE1vZGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgYW5kIHNldHMgdGhlIG5vcm1hbGl6ZWQgcGxheWluZyB0aW1lIG9mIHRoZSBjdXJyZW50IGFuaW1hdGlvblxuICAgKlxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0IG5vcm1hbGl6ZWRUaW1lKCkge1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgc2V0IG5vcm1hbGl6ZWRUaW1lKHRpbWUpIHtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGFuZCBzZXRzIHRoZSBhIGZhY3RvciB0byBzY2FsZSBhbmltYXRpb24gcGxheWJhY2sgc3BlZWQgd2l0aC5cbiAgICpcbiAgICogQHR5cGUge251bWJlcn1cbiAgICovXG4gIGdldCB0aW1lU2NhbGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3RpbWVTY2FsZTtcbiAgfVxuXG4gIHNldCB0aW1lU2NhbGUodGltZVNjYWxlKSB7XG4gICAgdGhpcy5fdGltZVNjYWxlID0gdGltZVNjYWxlO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgd2hldGhlciBvciBub3QgdGhlIHRpbWVTY2FsZSBpcyBjdXJyZW50bHkgYmVpbmcgYW5pbWF0ZWQuXG4gICAqXG4gICAqIEByZWFkb25seVxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICovXG4gIGdldCB0aW1lU2NhbGVQZW5kaW5nKCkge1xuICAgIHJldHVybiB0aGlzLl9wcm9taXNlcy50aW1lU2NhbGUucGVuZGluZztcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSB0aW1lU2NhbGUgdmFsdWUgb3ZlciB0aW1lLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gd2VpZ2h0IC0gVGhlIHRhcmdldCB0aW1lU2NhbGUgdmFsdWUuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbc2Vjb25kcz0wXSAtIFRoZSBhbW91bnQgb2YgdGltZSBpdCB3aWxsIHRha2UgdG8gcmVhY2ggdGhlXG4gICAqIHRhcmdldCB0aW1lU2NhbGUuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBlYXNpbmdGbiAtIFRoZSBlYXNpbmcgZnVuY3Rpb24gdG8gdXNlIGZvciBpbnRlcnBvbGF0aW9uLlxuICAgKlxuICAgKiBAcmV0dXJucyB7RGVmZXJyZWR9XG4gICAqL1xuICBzZXRUaW1lU2NhbGUodGltZVNjYWxlLCBzZWNvbmRzID0gMCwgZWFzaW5nRm4pIHtcbiAgICB0aGlzLl9wcm9taXNlcy50aW1lU2NhbGUuY2FuY2VsKCk7XG5cbiAgICB0aGlzLl9wcm9taXNlcy50aW1lU2NhbGUgPSBBbmltYXRpb25VdGlscy5pbnRlcnBvbGF0ZVByb3BlcnR5KFxuICAgICAgdGhpcyxcbiAgICAgICd0aW1lU2NhbGUnLFxuICAgICAgdGltZVNjYWxlLFxuICAgICAge3NlY29uZHMsIGVhc2luZ0ZufVxuICAgICk7XG5cbiAgICByZXR1cm4gdGhpcy5fcHJvbWlzZXMudGltZVNjYWxlO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgYW5kIHNldHMgdGhlIG51bWJlciBvZiB0aW1lcyB0aGUgYW5pbWF0aW9uIHdpbGwgcmVwZWF0IGJlZm9yZSBmaW5pc2hpbmcuXG4gICAqXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqL1xuICBnZXQgbG9vcENvdW50KCkge1xuICAgIHJldHVybiB0aGlzLl9sb29wQ291bnQ7XG4gIH1cblxuICBzZXQgbG9vcENvdW50KGxvb3BDb3VudCkge1xuICAgIHRoaXMuX2xvb3BDb3VudCA9IGxvb3BDb3VudDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSB0eXBlIG9mIGJsZW5kaW5nIHVzZWQgZm9yIHRoZSBhbmltYXRpb24uXG4gICAqXG4gICAqIEByZWFkb25seVxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKi9cbiAgZ2V0IGJsZW5kTW9kZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fYmxlbmRNb2RlO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFNpbmdsZVN0YXRlO1xuIiwiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTBcbmltcG9ydCBBYnN0cmFjdFN0YXRlIGZyb20gJy4vQWJzdHJhY3RTdGF0ZSc7XG5pbXBvcnQgU3RhdGVDb250YWluZXJJbnRlcmZhY2UgZnJvbSAnLi9TdGF0ZUNvbnRhaW5lckludGVyZmFjZSc7XG5pbXBvcnQgQW5pbWF0aW9uUGxheWVySW50ZXJmYWNlIGZyb20gJy4uL0FuaW1hdGlvblBsYXllckludGVyZmFjZSc7XG5pbXBvcnQgVXRpbHMgZnJvbSAnLi4vLi4vVXRpbHMnO1xuXG4vKipcbiAqIENsYXNzIGZvciBwbGF5aW5nIHJhbmRvbSBhbmltYXRpb25zIGF0IHJhbmRvbSBpbnRlcnZhbHMgd2l0aGluIHRoaXMgc3RhdGUuXG4gKlxuICogQGV4dGVuZHMgQWJzdHJhY3RTdGF0ZVxuICogQGltcGxlbWVudHMgQW5pbWF0aW9uUGxheWVySW50ZXJmYWNlXG4gKiBAaW1wbGVtZW50cyBTdGF0ZUNvbnRhaW5lckludGVyZmFjZVxuICovXG5jbGFzcyBSYW5kb21BbmltYXRpb25TdGF0ZSBleHRlbmRzIEFuaW1hdGlvblBsYXllckludGVyZmFjZS5NaXhpbihTdGF0ZUNvbnRhaW5lckludGVyZmFjZS5NaXhpbihBYnN0cmFjdFN0YXRlKSkge1xuICAvKipcbiAgICogQGNvbnN0cnVjdG9yXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV0gLSBPcHRpb25zIGZvciB0aGUgY29udGFpbmVyIHN0YXRlLlxuICAgKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMucGxheUludGVydmFsPTNdIC0gVGhlIGJhc2UgYW5pbWF0aW9uIHBsYXliYWNrIGludGVydmFsLlxuICAgKiBAcGFyYW0ge0FycmF5LjxBYnN0cmFjdFN0YXRlPn0gW3N1YlN0YXRlcz1bXV0gLSBzdGF0ZXMgdG8gYmUgcmFuZG9tbHkgcGlja2VkIHRvIHBsYXlcbiAgICovXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMgPSB7fSwgc3ViU3RhdGVzID0gW10pIHtcbiAgICBzdXBlcihvcHRpb25zKTtcblxuICAgIHRoaXMuX3BsYXlJbnRlcnZhbCA9IG9wdGlvbnMucGxheUludGVydmFsID8gb3B0aW9ucy5wbGF5SW50ZXJ2YWwgOiAzO1xuXG4gICAgc3ViU3RhdGVzLmZvckVhY2goc3RhdGUgPT4ge1xuICAgICAgdGhpcy5hZGRTdGF0ZShzdGF0ZSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBhbmQgc2V0cyB0aGUgYmFzZSBhbmltYXRpb24gcGxheSBpbnRlcnZhbFxuICAgKlxuICAgKiBAdHlwZSB7ZmxvYXR9XG4gICAqL1xuICBnZXQgcGxheUludGVydmFsKCkge1xuICAgIHJldHVybiB0aGlzLl9wbGF5SW50ZXJ2YWw7XG4gIH1cblxuICBzZXQgcGxheUludGVydmFsKHBsYXlJbnRlcnZhbCkge1xuICAgIHRoaXMuX3BsYXlJbnRlcnZhbCA9IHBsYXlJbnRlcnZhbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldCB0aGUgaW50ZXJuYWwgdGltZXIgZm9yIGFuaW1hdGlvbiBwbGF5IGludGVydmFsXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfcmVzZXRUaW1lcigpIHtcbiAgICBjb25zdCBwbGF5VGltZXIgPSBVdGlscy5nZXRSYW5kb21GbG9hdCh0aGlzLl9wbGF5SW50ZXJ2YWwgLyA0LCB0aGlzLl9wbGF5SW50ZXJ2YWwgKiAyKTtcbiAgICBjb25zdCBvbkZpbmlzaCA9ICgpID0+IHtcbiAgICAgIHRoaXMucGxheVJhbmRvbUFuaW1hdGlvbih0aGlzLl9wbGF5Q2FsbGJhY2tzLm9uRXJyb3IpO1xuICAgIH1cbiAgICB0aGlzLl9wcm9taXNlcy50aW1lciA9IFV0aWxzLndhaXQocGxheVRpbWVyLCB7b25GaW5pc2h9KTtcbiAgfVxuXG4gIHVwZGF0ZUludGVybmFsV2VpZ2h0KGZhY3Rvcikge1xuICAgIHN1cGVyLnVwZGF0ZUludGVybmFsV2VpZ2h0KGZhY3Rvcik7XG5cbiAgICBpZiAodGhpcy5fY3VycmVudFN0YXRlKSB7XG4gICAgICB0aGlzLl9jdXJyZW50U3RhdGUudXBkYXRlSW50ZXJuYWxXZWlnaHQodGhpcy5faW50ZXJuYWxXZWlnaHQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBQaWNrIGEgcmFuZG9tIGFuaW1hdGlvbiBhbmQgdXRpbGl6ZSBBbmltYXRpb25QbGF5ZXJJbnRlcmZhY2UgdG8gcGxheSB0aGF0IGFuaW1hdGlvblxuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb25FcnJvciAtIEZ1bmN0aW9uIHRvIGV4ZWN1dGUgaWYgdGhlIHN0YXRlIGVuY291bnRlcnNcbiAgICogYW4gZXJyb3IgZHVyaW5nIHBsYXliYWNrLlxuICAgKi9cbiAgcGxheVJhbmRvbUFuaW1hdGlvbihvbkVycm9yKSB7XG4gICAgdGhpcy5fcmVzZXRUaW1lcigpO1xuXG4gICAgY29uc3Qgc3RhdGVzID0gdGhpcy5nZXRTdGF0ZU5hbWVzKCk7XG4gICAgaWYgKHRoaXMuX2N1cnJlbnRTdGF0ZSkge1xuICAgICAgc3RhdGVzLnNwbGljZShzdGF0ZXMuaW5kZXhPZih0aGlzLl9jdXJyZW50U3RhdGUubmFtZSksIDEpO1xuICAgIH1cbiAgICBjb25zdCByYW5kb21TdGF0ZSA9ICBzdGF0ZXNbVXRpbHMuZ2V0UmFuZG9tSW50KDAsIHN0YXRlcy5sZW5ndGgpXTtcblxuICAgIHRoaXMucGxheUFuaW1hdGlvbihyYW5kb21TdGF0ZSwgdGhpcy5fdHJhbnNpdGlvblRpbWUsIHRoaXMuX2Vhc2luZ0ZuLCB1bmRlZmluZWQsIG9uRXJyb3IsIHVuZGVmaW5lZCk7XG4gIH1cblxuICBwbGF5KG9uRmluaXNoLCBvbkVycm9yLCBvbkNhbmNlbCkge1xuICAgIHRoaXMucGxheVJhbmRvbUFuaW1hdGlvbihvbkVycm9yKTtcbiAgICByZXR1cm4gc3VwZXIucGxheShvbkZpbmlzaCwgb25FcnJvciwgb25DYW5jZWwpO1xuICB9XG5cbiAgcGF1c2UoKSB7XG4gICAgcmV0dXJuIHN1cGVyLnBhdXNlKCkgJiYgdGhpcy5wYXVzZUFuaW1hdGlvbigpO1xuICB9XG5cbiAgcmVzdW1lKG9uRmluaXNoLCBvbkVycm9yLCBvbkNhbmNlbCkge1xuICAgIGlmICh0aGlzLl9jdXJyZW50U3RhdGUpIHtcbiAgICAgIHRoaXMucmVzdW1lQW5pbWF0aW9uKHRoaXMuX2N1cnJlbnRTdGF0ZS5uYW1lLCB0aGlzLl90cmFuc2l0aW9uVGltZSwgdGhpcy5fZWFzaW5nRm4sIHVuZGVmaW5lZCwgb25FcnJvciwgdW5kZWZpbmVkKTtcbiAgICB9XG4gICAgcmV0dXJuIHN1cGVyLnJlc3VtZShvbkZpbmlzaCwgb25FcnJvciwgb25DYW5jZWwpO1xuICB9XG5cbiAgY2FuY2VsKCkge1xuICAgIHJldHVybiBzdXBlci5jYW5jZWwoKSAmJiB0aGlzLmNhbmNlbEFuaW1hdGlvbigpO1xuICB9XG5cbiAgc3RvcCgpIHtcbiAgICByZXR1cm4gc3VwZXIuc3RvcCgpICYmIHRoaXMuc3RvcEFuaW1hdGlvbigpO1xuICB9XG5cbiAgZGlzY2FyZCgpIHtcbiAgICBzdXBlci5kaXNjYXJkKCk7XG4gICAgdGhpcy5kaXNjYXJkU3RhdGVzKCk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgUmFuZG9tQW5pbWF0aW9uU3RhdGU7XG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cclxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVC0wXHJcbmltcG9ydCBBYnN0cmFjdEhvc3RGZWF0dXJlIGZyb20gJ2NvcmUvQWJzdHJhY3RIb3N0RmVhdHVyZSc7XHJcbmltcG9ydCBVdGlscyBmcm9tICdjb3JlL1V0aWxzJztcclxuaW1wb3J0IFF1ZXVlU3RhdGUgZnJvbSAnLi9zdGF0ZS9RdWV1ZVN0YXRlJztcclxuaW1wb3J0IEZyZWVCbGVuZFN0YXRlIGZyb20gJy4vc3RhdGUvRnJlZUJsZW5kU3RhdGUnO1xyXG5pbXBvcnQgQmxlbmQxZFN0YXRlIGZyb20gJy4vc3RhdGUvQmxlbmQxZFN0YXRlJztcclxuaW1wb3J0IEJsZW5kMmRTdGF0ZSBmcm9tICcuL3N0YXRlL0JsZW5kMmRTdGF0ZSc7XHJcbmltcG9ydCBTaW5nbGVTdGF0ZSBmcm9tICcuL3N0YXRlL1NpbmdsZVN0YXRlJztcclxuaW1wb3J0IFJhbmRvbUFuaW1hdGlvblN0YXRlIGZyb20gJy4vc3RhdGUvUmFuZG9tQW5pbWF0aW9uU3RhdGUnO1xyXG5pbXBvcnQgQW5pbWF0aW9uTGF5ZXIsIHtMYXllckJsZW5kTW9kZXN9IGZyb20gJy4vQW5pbWF0aW9uTGF5ZXInO1xyXG5pbXBvcnQgRGVmZXJyZWQgZnJvbSAnLi4vRGVmZXJyZWQnO1xyXG5cclxuLyoqXHJcbiAqIEVudW0gZm9yIGFuaW1hdGlvbiBzdGF0ZSBjbGFzc2VzLlxyXG4gKlxyXG4gKiBAcmVhZG9ubHlcclxuICogQGVudW0ge0NsYXNzfVxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IEFuaW1hdGlvblR5cGVzID0ge1xyXG4gIHNpbmdsZTogU2luZ2xlU3RhdGUsXHJcbiAgZnJlZUJsZW5kOiBGcmVlQmxlbmRTdGF0ZSxcclxuICBxdWV1ZTogUXVldWVTdGF0ZSxcclxuICByYW5kb21BbmltYXRpb246IFJhbmRvbUFuaW1hdGlvblN0YXRlLFxyXG4gIGJsZW5kMWQ6IEJsZW5kMWRTdGF0ZSxcclxuICBibGVuZDJkOiBCbGVuZDJkU3RhdGUsXHJcbn07XHJcblxyXG4vKipcclxuICogRmVhdHVyZSBmb3IgbWFuYWdpbmcgYW5pbWF0aW9ucyBvbiBhbiBvYmplY3QuXHJcbiAqXHJcbiAqIEBleHRlbmRzIEFic3RyYWN0SG9zdEZlYXR1cmVcclxuICogQGFsaWFzIGNvcmUvQW5pbWF0aW9uRmVhdHVyZVxyXG4gKlxyXG4gKiBAcHJvcGVydHkge09iamVjdH0gRVZFTlRTIC0gQnVpbHQtaW4gbWVzc2FnZXMgdGhhdCB0aGUgZmVhdHVyZSBlbWl0cy4gV2hlbiB0aGVcclxuICogZmVhdHVyZSBpcyBhZGRlZCB0byBhIHtAbGluayBjb3JlL0hvc3RPYmplY3R9LCBldmVudCBuYW1lcyB3aWxsIGJlIHByZWZpeGVkIGJ5IHRoZVxyXG4gKiBuYW1lIG9mIHRoZSBmZWF0dXJlIGNsYXNzICsgJy4nLlxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW0VWRU5UUy5hZGRMYXllcj1vbkFkZExheWVyRXZlbnRdIC0gTWVzc2FnZSB0aGF0IGlzIGVtaXR0ZWQgYWZ0ZXJcclxuICogW2FkZExheWVyXXtAbGluayBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjYWRkTGF5ZXJ9IGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBleGVjdXRlZC5cclxuICogQW4gb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgbmFtZSBvZiB0aGUgbGF5ZXIgdGhhdCB3YXMgYWRkZWQgYW5kIGl0cyBpbmRleCBpblxyXG4gKiB0aGUgbGF5ZXIgc3RhY2sgd2l0aCB0aGUgc2lnbmF0dXJlIHtuYW1lOiBzdHJpbmcsIGluZGV4OiBudW1iZXJ9IGlzIHN1cHBsaWVkXHJcbiAqIGFzIGFuIGFyZ3VtZW50IHRvIGxpc3RlbmVyIGZ1bmN0aW9ucy5cclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtFVkVOVFMucmVtb3ZlTGF5ZXI9b25SZW1vdmVMYXllckV2ZW50XSAtIE1lc3NhZ2UgdGhhdCBpc1xyXG4gKiBlbWl0dGVkIGFmdGVyIFtyZW1vdmVMYXllcl17QGxpbmsgY29yZS9BbmltYXRpb25GZWF0dXJlI3JlbW92ZUxheWVyfSBoYXMgYmVlblxyXG4gKiBzdWNjZXNzZnVsbHkgZXhlY3V0ZWQuIEFuIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIG5hbWUgb2YgdGhlIGxheWVyIHRoYXQgd2FzXHJcbiAqIHJlbW92ZWQgYW5kIGl0cyBpbmRleCBpbiB0aGUgbGF5ZXIgc3RhY2sgd2l0aCB0aGUgc2lnbmF0dXJlIHtuYW1lOiBzdHJpbmcsIGluZGV4OiBudW1iZXJ9XHJcbiAqIGlzIHN1cHBsaWVkIGFzIGFuIGFyZ3VtZW50IHRvIGxpc3RlbmVyIGZ1bmN0aW9ucy5cclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtFVkVOVFMucmVuYW1lTGF5ZXI9b25SZW5hbWVMYXllckV2ZW50XSAtIE1lc3NhZ2UgdGhhdCBpc1xyXG4gKiBlbWl0dGVkIGFmdGVyIFtyZW5hbWVMYXllcl17QGxpbmsgY29yZS9BbmltYXRpb25GZWF0dXJlI3JlbmFtZUxheWVyfSBoYXMgYmVlblxyXG4gKiBzdWNjZXNzZnVsbHkgZXhlY3V0ZWQuIEFuIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIG9yaWdpbmFsIG5hbWUgb2YgdGhlIGxheWVyXHJcbiAqIHRoYXQgd2FzIHJlbmFtZWQgYW5kIGl0cyB1cGRhdGVkIG5hbWUgd2l0aCB0aGUgc2lnbmF0dXJlIHtvbGROYW1lOiBzdHJpbmcsIG5ld05hbWU6IHN0cmluZ31cclxuICogaXMgc3VwcGxpZWQgYXMgYW4gYXJndW1lbnQgdG8gbGlzdGVuZXIgZnVuY3Rpb25zLlxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW0VWRU5UUy5hZGRBbmltYXRpb249b25BZGRBbmltYXRpb25FdmVudF0gLSBNZXNzYWdlIHRoYXQgaXNcclxuICogZW1pdHRlZCBhZnRlciBbYWRkQW5pbWF0aW9uXXtAbGluayBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjYWRkQW5pbWF0aW9ufSBoYXMgYmVlblxyXG4gKiBzdWNjZXNzZnVsbHkgZXhlY3V0ZWQuIEFuIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIG5hbWUgb2YgdGhlIGxheWVyIHRoYXQgdGhlXHJcbiAqIGFuaW1hdGlvbiB3YXMgYWRkZWQgdG8gYW5kIHRoZSBuYW1lIG9mIHRoZSBhbmltYXRpb24gdGhhdCB3YXMgYWRkZWQgd2l0aCB0aGVcclxuICogc2lnbmF0dXJlIHtsYXllck5hbWU6IHN0cmluZywgYW5pbWF0aW9uTmFtZTogc3RyaW5nfSBpcyBzdXBwbGllZCBhcyBhbiBhcmd1bWVudFxyXG4gKiB0byBsaXN0ZW5lciBmdW5jdGlvbnMuXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbRVZFTlRTLnJlbW92ZUFuaW1hdGlvbj1vblJlbW92ZWRBbmltYXRpb25FdmVudF0gLSBNZXNzYWdlXHJcbiAqIHRoYXQgaXMgZW1pdHRlZCBhZnRlciBbcmVtb3ZlQW5pbWF0aW9uXXtAbGluayBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjcmVtb3ZlQW5pbWF0aW9ufVxyXG4gKiBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgZXhlY3V0ZWQuIEFuIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIG5hbWUgb2YgdGhlIGxheWVyXHJcbiAqIHRoYXQgdGhlIGFuaW1hdGlvbiB3YXMgcmVtb3ZlZCBmcm9tIGFuZCB0aGUgbmFtZSBvZiB0aGUgYW5pbWF0aW9uIHRoYXQgd2FzIHJlbW92ZWRcclxuICogd2l0aCB0aGUgc2lnbmF0dXJlIHtsYXllck5hbWU6IHN0cmluZywgYW5pbWF0aW9uTmFtZTogc3RyaW5nfSBpcyBzdXBwbGllZCBhc1xyXG4gKiBhbiBhcmd1bWVudCB0byBsaXN0ZW5lciBmdW5jdGlvbnMuXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbRVZFTlRTLnJlbmFtZUFuaW1hdGlvbj1vblJlbmFtZUFuaW1hdGlvbkV2ZW50XSAtIE1lc3NhZ2VcclxuICogdGhhdCBpcyBlbWl0dGVkIGFmdGVyIFtyZW5hbWVBbmltYXRpb25de0BsaW5rIGNvcmUvQW5pbWF0aW9uRmVhdHVyZSNyZW5hbWVBbmltYXRpb259XHJcbiAqIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBleGVjdXRlZC4gQW4gb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgbmFtZSBvZiB0aGUgbGF5ZXJcclxuICogdGhhdCBjb250YWlucyB0aGUgYW5pbWF0aW9uIHRoYXQgd2FzIHJlbmFtZWQsIHRoZSBvcmlnaW5hbCBuYW1lIG9mIHRoZSBhbmltYXRpb25cclxuICogdGhhdCB3YXMgcmVuYW1lZCBhbmQgaXRzIHVwZGF0ZWQgbmFtZSB3aXRoIHRoZSBzaWduYXR1cmUge2xheWVyTmFtZTogc3RyaW5nLCBvbGROYW1lOiBzdHJpbmcsIG5ld05hbWU6IHN0cmluZ31cclxuICogaXMgc3VwcGxpZWQgYXMgYW4gYXJndW1lbnQgdG8gbGlzdGVuZXIgZnVuY3Rpb25zLlxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW0VWRU5UUy5wbGF5PW9uUGxheUV2ZW50XSAtIE1lc3NhZ2UgdGhhdCBpcyBlbWl0dGVkIGFmdGVyXHJcbiAqIGVhY2ggY2FsbCB0byBbcGxheV17QGxpbmsgY29yZS9BbmltYXRpb25GZWF0dXJlI3BsYXlBbmltYXRpb259LiBBbiBvYmplY3QgcmVwcmVzZW50aW5nXHJcbiAqIHRoZSBuYW1lIG9mIHRoZSBsYXllciBjb250YWlucyB0aGUgYW5pbWF0aW9uIHRoYXQgd2FzIHBsYXllZCBhbmQgdGhlIG5hbWUgb2ZcclxuICogdGhlIGFuaW1hdGlvbiB0aGF0IHdhcyBwbGF5ZWQgd2l0aCB0aGUgc2lnbmF0dXJlIHtsYXllck5hbWU6IHN0cmluZywgYW5pbWF0aW9uTmFtZTogc3RyaW5nfVxyXG4gKiBpcyBzdXBwbGllZCBhcyBhbiBhcmd1bWVudCB0byBsaXN0ZW5lciBmdW5jdGlvbnMuXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbRVZFTlRTLnBhdXNlPW9uUGF1c2VFdmVudF0gLSBNZXNzYWdlIHRoYXQgaXMgZW1pdHRlZCBhZnRlclxyXG4gKiBlYWNoIGNhbGwgdG8gW3BhdXNlXXtAbGluayBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjcGF1c2VBbmltYXRpb259LiBBbiBvYmplY3QgcmVwcmVzZW50aW5nXHJcbiAqIHRoZSBuYW1lIG9mIHRoZSBsYXllciBjb250YWlucyB0aGUgYW5pbWF0aW9uIHRoYXQgd2FzIHBhdXNlZCBhbmQgdGhlIG5hbWUgb2ZcclxuICogdGhlIGFuaW1hdGlvbiB0aGF0IHdhcyBwYXVzZWQgd2l0aCB0aGUgc2lnbmF0dXJlIHtsYXllck5hbWU6IHN0cmluZywgYW5pbWF0aW9uTmFtZTogc3RyaW5nfVxyXG4gKiBpcyBzdXBwbGllZCBhcyBhbiBhcmd1bWVudCB0byBsaXN0ZW5lciBmdW5jdGlvbnMuXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbRVZFTlRTLnJlc3VtZT1vblJlc3VtZUV2ZW50XSAtIE1lc3NhZ2UgdGhhdCBpcyBlbWl0dGVkIGFmdGVyXHJcbiAqIGVhY2ggY2FsbCB0byBbcmVzdW1lXXtAbGluayBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjcmVzdW1lQW5pbWF0aW9ufS4gQW4gb2JqZWN0IHJlcHJlc2VudGluZ1xyXG4gKiB0aGUgbmFtZSBvZiB0aGUgbGF5ZXIgY29udGFpbnMgdGhlIGFuaW1hdGlvbiB0aGF0IHdhcyByZXN1bWVkIGFuZCB0aGUgbmFtZSBvZlxyXG4gKiB0aGUgYW5pbWF0aW9uIHRoYXQgd2FzIHJlc3VtZWQgd2l0aCB0aGUgc2lnbmF0dXJlIHtsYXllck5hbWU6IHN0cmluZywgYW5pbWF0aW9uTmFtZTogc3RyaW5nfVxyXG4gKiBpcyBzdXBwbGllZCBhcyBhbiBhcmd1bWVudCB0byBsaXN0ZW5lciBmdW5jdGlvbnMuXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbRVZFTlRTLmludGVycnVwdD1vbkludGVycnVwdEV2ZW50XSAtIE1lc3NhZ2UgdGhhdCBpcyBlbWl0dGVkXHJcbiAqIGlmIHRoZXJlIGlzIGEgY3VycmVudCBzcGVlY2ggaW4gcHJvZ3Jlc3MgYW5kIFtwbGF5XXtAbGluayBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjcGxheUFuaW1hdGlvbn1cclxuICogb3IgW3Jlc3VtZV17QGxpbmsgY29yZS9BbmltYXRpb25GZWF0dXJlI3Jlc3VtZUFuaW1hdGlvbn0gYXJlIGV4ZWN1dGVkIGZvciBhIG5ldyBzcGVlY2guXHJcbiAqIEFuIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIG5hbWUgb2YgdGhlIGxheWVyIGNvbnRhaW5zIHRoZSBhbmltYXRpb24gdGhhdCB3YXNcclxuICogaW50ZXJydXB0ZWQgYW5kIHRoZSBuYW1lIG9mIHRoZSBhbmltYXRpb24gdGhhdCB3YXMgaW50ZXJydXB0ZWQgd2l0aCB0aGUgc2lnbmF0dXJlXHJcbiAqIHtsYXllck5hbWU6IHN0cmluZywgYW5pbWF0aW9uTmFtZTogc3RyaW5nfSBpcyBzdXBwbGllZCBhcyBhbiBhcmd1bWVudCB0byBsaXN0ZW5lclxyXG4gKiBmdW5jdGlvbnMuXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbRVZFTlRTLnN0b3A9b25TdG9wRXZlbnRdIC0gTWVzc2FnZSB0aGF0IGlzIGVtaXR0ZWQgYWZ0ZXJcclxuICogZWFjaCBjYWxsIHRvIFtzdG9wXXtAbGluayBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjc3RvcEFuaW1hdGlvbn0gYW5kIHdoZW4gYSBzcGVlY2ggcmVhY2hlc1xyXG4gKiB0aGUgZW5kIG9mIHBsYXliYWNrLiBBbiBvYmplY3QgcmVwcmVzZW50aW5nXHJcbiAqIHRoZSBuYW1lIG9mIHRoZSBsYXllciBjb250YWlucyB0aGUgYW5pbWF0aW9uIHRoYXQgd2FzIHN0b3BwZWQgYW5kIHRoZSBuYW1lIG9mXHJcbiAqIHRoZSBhbmltYXRpb24gdGhhdCB3YXMgc3RvcHBlZCB3aXRoIHRoZSBzaWduYXR1cmUge2xheWVyTmFtZTogc3RyaW5nLCBhbmltYXRpb25OYW1lOiBzdHJpbmd9XHJcbiAqIGlzIHN1cHBsaWVkIGFzIGFuIGFyZ3VtZW50IHRvIGxpc3RlbmVyIGZ1bmN0aW9ucy5cclxuICovXHJcbmNsYXNzIEFuaW1hdGlvbkZlYXR1cmUgZXh0ZW5kcyBBYnN0cmFjdEhvc3RGZWF0dXJlIHtcclxuICAvKipcclxuICAgKiBAY29uc3RydWN0b3JcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7Y29yZS9Ib3N0T2JqZWN0fSBob3N0IC0gSG9zdCBvYmplY3QgdGhhdCBvd25zIHRoZSBmZWF0dXJlLlxyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKGhvc3QpIHtcclxuICAgIHN1cGVyKGhvc3QpO1xyXG5cclxuICAgIHRoaXMuX2xheWVycyA9IFtdO1xyXG4gICAgdGhpcy5fbGF5ZXJNYXAgPSB7fTtcclxuICAgIHRoaXMuX3BhdXNlZCA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWFrZSBzdXJlIGEgc3VwcGxpZWQgbGF5ZXIgaW5kZXggaXMgd2l0aGluIHRoZSByYW5nZSBvZiBsYXllcnMuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XHJcbiAgICogQHBhcmFtIHtib29sZWFufSBbZXhpc3Rpbmc9dHJ1ZV0gLSBXaGV0aGVyIHRoZSBpbmRleCByZXByZXNlbnRzIGFuZCBleGlzdGluZ1xyXG4gICAqIGxheWVyIG9yIGEgbmV3IGxheWVyIHRvIGJlIGFkZGVkLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge251bWJlcj19XHJcbiAgICovXHJcbiAgX3ZhbGlkYXRlSW5kZXgoaW5kZXgsIGV4aXN0aW5nID0gdHJ1ZSkge1xyXG4gICAgLy8gSW5kZXggaXMgaW52YWxpZCBpZiB0aGVyZSBhcmUgbm8gbGF5ZXJzIGFuZCB3ZSdyZSBjaGVja2luZyBmb3IgYW4gZXhpc3RpbmcgbGF5ZXIgaW5kZXhcclxuICAgIGlmICh0aGlzLl9sYXllcnMubGVuZ3RoID09PSAwICYmIGV4aXN0aW5nKSB7XHJcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgbGFzdEluZGV4ID0gZXhpc3RpbmcgPyB0aGlzLl9sYXllcnMubGVuZ3RoIC0gMSA6IHRoaXMuX2xheWVycy5sZW5ndGg7XHJcblxyXG4gICAgLy8gQ291bnQgZnJvbSB0aGUgZW5kIG9mIHRoZSBhcnJheSBmb3IgbmVnYXRpdmUgaW5kaWNlc1xyXG4gICAgaWYgKGluZGV4IDwgMCkge1xyXG4gICAgICBpbmRleCA9IGxhc3RJbmRleCArIGluZGV4ICsgMTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID4gbGFzdEluZGV4KSB7XHJcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gaW5kZXg7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZS1ldmFsdWF0ZSBpbnRlcm5hbCB3ZWlnaHQgdmFsdWVzIG9mIGxheWVycyBzdGFydGluZyBmcm9tIHRoZSB0b3Agb2YgdGhlXHJcbiAgICogc3RhY2suIE92ZXJyaWRlIGxheWVycycgd2VpZ2h0cyBhZmZlY3QgdGhlIHZhbHVlcyBvZiBhbGwgbGF5ZXJzIGxvd2VyIGluIHRoZVxyXG4gICAqIHN0YWNrLlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBfdXBkYXRlSW50ZXJuYWxXZWlnaHRzKCkge1xyXG4gICAgY29uc3QgbnVtTGF5ZXJzID0gdGhpcy5fbGF5ZXJzLmxlbmd0aDtcclxuICAgIGxldCB3ZWlnaHRNdWx0aXBsaWVyID0gMTtcclxuXHJcbiAgICAvLyBVcGRhdGUgaW50ZXJuYWwgd2VpZ2h0IHZhbHVlcyBvbiBsYXllcnMgaW4gcmV2ZXJzZSBvcmRlclxyXG4gICAgZm9yIChsZXQgaSA9IG51bUxheWVycyAtIDE7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgIGNvbnN0IGxheWVyID0gdGhpcy5fbGF5ZXJzW2ldO1xyXG4gICAgICBsYXllci51cGRhdGVJbnRlcm5hbFdlaWdodCh3ZWlnaHRNdWx0aXBsaWVyKTtcclxuXHJcbiAgICAgIC8vIElmIHRoZSBsYXllciBpcyBvdmVycmlkZSwgdXBkYXRlIHRoZSBtdWx0aXBsaWVyIHdpdGggdGhlIHJlbWFpbmRlciBvZiB0aGUgZnVsbCB3ZWlnaHRcclxuICAgICAgaWYgKGxheWVyLmJsZW5kTW9kZSA9PT0gTGF5ZXJCbGVuZE1vZGVzLk92ZXJyaWRlICYmIGxheWVyLmN1cnJlbnRTdGF0ZSkge1xyXG4gICAgICAgIHdlaWdodE11bHRpcGxpZXIgKj0gMSAtIGxheWVyLmN1cnJlbnRTdGF0ZS5pbnRlcm5hbFdlaWdodDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIGEgbmV3IGluc3RhbmNlIG9mIGEgU2luZ2xlU3RhdGUuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBPcHRpb25zIHRvIHBhc3MgdG8gdGhlIFNpbmdsZVN0YXRlIGNvbnN0cnVjdG9yLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nPX0gb3B0aW9ucy5uYW1lIC0gTmFtZSBmb3IgdGhlIGFuaW1hdGlvbiBzdGF0ZS4gTmFtZXMgbXVzdCBiZVxyXG4gICAqIHVuaXF1ZSBmb3IgdGhlIGxheWVyIHRoZSBzdGF0ZSBpcyBhcHBsaWVkIHRvLlxyXG4gICAqIEBwYXJhbSB7d2VpZ2h0fSBbb3B0aW9ucy53ZWlnaHQ9MF0gLSBUaGUgMC0xIGFtb3VudCBvZiBpbmZsdWVuY2UgdGhlIHN0YXRlIHdpbGwgaGF2ZS5cclxuICAgKiBAcGFyYW0ge3RpbWVTY2FsZX0gW29wdGlvbnMudGltZVNjYWxlPTFdIC0gRmFjdG9yIHRvIHNjYWxlIHRoZSBwbGF5YmFjayBzcGVlZCBvZiB0aGVcclxuICAgKiBhbmltYXRpb24uXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLmxvb3BDb3VudD1JbmZpbml0eV0gLSBOdW1iZXIgb2YgdGltZXMgdGhlIGFuaW1hdGlvbiBzaG91bGRcclxuICAgKiByZXBlYXQgYmVmb3JlIGZpbmlzaGluZy5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuYmxlbmRNb2RlPUxheWVyQmxlbmRNb2Rlc1tEZWZhdWx0TGF5ZXJCbGVuZE1vZGVdXSAtIFR5cGUgb2ZcclxuICAgKiBibGVuZGluZyB0aGUgYW5pbWF0aW9uIHNob3VsZCB1c2UuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7Y29yZS9TaW5nbGVTdGF0ZX1cclxuICAgKi9cclxuICBfY3JlYXRlU2luZ2xlU3RhdGUob3B0aW9ucykge1xyXG4gICAgcmV0dXJuIG5ldyBTaW5nbGVTdGF0ZShvcHRpb25zKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiBhIG5ldyBpbnN0YW5jZSBvZiBhIEZyZWVCbGVuZFN0YXRlLlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gT3B0aW9ucyB0byBwYXNzIHRvIHRoZSBGcmVlQmxlbmRTdGF0ZSBjb25zdHJ1Y3Rvci5cclxuICAgKiBAcGFyYW0ge3N0cmluZz19IG9wdGlvbnMubmFtZSAtIE5hbWUgZm9yIHRoZSBhbmltYXRpb24gc3RhdGUuIE5hbWVzIG11c3QgYmVcclxuICAgKiB1bmlxdWUgZm9yIHRoZSBsYXllciB0aGUgc3RhdGUgaXMgYXBwbGllZCB0by5cclxuICAgKiBAcGFyYW0ge3dlaWdodH0gW29wdGlvbnMud2VpZ2h0PTBdIC0gVGhlIDAtMSBhbW91bnQgb2YgaW5mbHVlbmNlIHRoZSBzdGF0ZSB3aWxsIGhhdmUuXHJcbiAgICogQHBhcmFtIHt0aW1lU2NhbGV9IFtvcHRpb25zLnRpbWVTY2FsZT0xXSAtIEZhY3RvciB0byBzY2FsZSB0aGUgcGxheWJhY2sgc3BlZWQgb2YgdGhlXHJcbiAgICogYW5pbWF0aW9uLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5sb29wQ291bnQ9SW5maW5pdHldIC0gTnVtYmVyIG9mIHRpbWVzIHRoZSBhbmltYXRpb24gc2hvdWxkXHJcbiAgICogcmVwZWF0IGJlZm9yZSBmaW5pc2hpbmcuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmJsZW5kTW9kZT1MYXllckJsZW5kTW9kZXNbRGVmYXVsdExheWVyQmxlbmRNb2RlXV0gLSBUeXBlIG9mXHJcbiAgICogYmxlbmRpbmcgdGhlIGFuaW1hdGlvbiBzaG91bGQgdXNlLlxyXG4gICAqIEBwYXJhbSB7QXJyYXkuPE9iamVjdD59IFtvcHRpb25zLmJsZW5kU3RhdGVPcHRpb25zXSAtIEFycmF5IG9mIG9wdGlvbnMgdXNlZCB0byBjcmVhdGUgdGhlXHJcbiAgICogYmxlbmQgc3RhdGVzIGZvciB0aGlzIGNvbnRhaW5lci5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtGcmVlQmxlbmRTdGF0ZX1cclxuICAgKi9cclxuICBfY3JlYXRlRnJlZUJsZW5kU3RhdGUob3B0aW9ucykge1xyXG4gICAgY29uc3Qge2JsZW5kU3RhdGVPcHRpb25zID0gW119ID0gb3B0aW9ucztcclxuXHJcbiAgICBjb25zdCBibGVuZFN0YXRlcyA9IFtdO1xyXG4gICAgYmxlbmRTdGF0ZU9wdGlvbnMuZm9yRWFjaChibGVuZE9wdGlvbnMgPT4ge1xyXG4gICAgICBibGVuZFN0YXRlcy5wdXNoKFxyXG4gICAgICAgIHRoaXMuX2NyZWF0ZVNpbmdsZVN0YXRlKHsuLi5ibGVuZE9wdGlvbnMsIGJsZW5kTW9kZTogb3B0aW9ucy5ibGVuZE1vZGV9KVxyXG4gICAgICApO1xyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIG5ldyBGcmVlQmxlbmRTdGF0ZShvcHRpb25zLCBibGVuZFN0YXRlcyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gYSBuZXcgaW5zdGFuY2Ugb2YgYSBRdWV1ZVN0YXRlLlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gT3B0aW9ucyB0byBwYXNzIHRvIHRoZSBRdWV1ZVN0YXRlIGNvbnN0cnVjdG9yLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nPX0gb3B0aW9ucy5uYW1lIC0gTmFtZSBmb3IgdGhlIGFuaW1hdGlvbiBzdGF0ZS4gTmFtZXMgbXVzdCBiZVxyXG4gICAqIHVuaXF1ZSBmb3IgdGhlIGxheWVyIHRoZSBzdGF0ZSBpcyBhcHBsaWVkIHRvLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy53ZWlnaHQ9MF0gLSBUaGUgMC0xIGFtb3VudCBvZiBpbmZsdWVuY2UgdGhlIHN0YXRlIHdpbGwgaGF2ZS5cclxuICAgKiBAcGFyYW0ge251bWJlcj19IG9wdGlvbnMudHJhbnNpdGlvblRpbWUgLSBUaGUgYW1vdW50IG9mIHRpbWUgaXQgdGFrZXMgdG8gdHJhbnNpdGlvblxyXG4gICAqIGJldHdlZW4gcXVldWVkIHN0YXRlcy5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuYmxlbmRNb2RlPUxheWVyQmxlbmRNb2Rlc1tEZWZhdWx0TGF5ZXJCbGVuZE1vZGVdXSAtIFR5cGUgb2ZcclxuICAgKiBibGVuZGluZyB0aGUgYW5pbWF0aW9uIHNob3VsZCB1c2UuXHJcbiAgICogQHBhcmFtIHtBcnJheS48T2JqZWN0Pn0gW29wdGlvbnMucXVldWVPcHRpb25zXSAtIEFycmF5IG9mIG9wdGlvbnMgdXNlZCB0byBjcmVhdGUgdGhlXHJcbiAgICogcXVldWUgc3RhdGVzIGZvciB0aGlzIGNvbnRhaW5lci5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtRdWV1ZVN0YXRlfVxyXG4gICAqL1xyXG4gIF9jcmVhdGVRdWV1ZVN0YXRlKG9wdGlvbnMpIHtcclxuICAgIGNvbnN0IHtxdWV1ZU9wdGlvbnMgPSBbXX0gPSBvcHRpb25zO1xyXG5cclxuICAgIGNvbnN0IHF1ZXVlU3RhdGVzID0gcXVldWVPcHRpb25zLm1hcChxdWV1ZU9wdGlvbiA9PlxyXG4gICAgICB0aGlzLl9jcmVhdGVTaW5nbGVTdGF0ZSh7XHJcbiAgICAgICAgdHJhbnNpdGlvblRpbWU6IG9wdGlvbnMudHJhbnNpdGlvblRpbWUsXHJcbiAgICAgICAgLi4ucXVldWVPcHRpb24sXHJcbiAgICAgICAgYmxlbmRNb2RlOiBvcHRpb25zLmJsZW5kTW9kZSxcclxuICAgICAgfSlcclxuICAgICk7XHJcblxyXG4gICAgcmV0dXJuIG5ldyBRdWV1ZVN0YXRlKG9wdGlvbnMsIHF1ZXVlU3RhdGVzKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiBhIG5ldyBpbnN0YW5jZSBvZiBhIEJsZW5kMWRTdGF0ZS5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gcGFzcyB0byB0aGUgQmxlbmQxZFN0YXRlIGNvbnN0cnVjdG9yLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nPX0gb3B0aW9ucy5uYW1lIC0gTmFtZSBmb3IgdGhlIGFuaW1hdGlvbiBzdGF0ZS4gTmFtZXMgbXVzdCBiZVxyXG4gICAqIHVuaXF1ZSBmb3IgdGhlIGxheWVyIHRoZSBzdGF0ZSBpcyBhcHBsaWVkIHRvLlxyXG4gICAqIEBwYXJhbSB7d2VpZ2h0fSBbb3B0aW9ucy53ZWlnaHQ9MF0gLSBUaGUgMC0xIGFtb3VudCBvZiBpbmZsdWVuY2UgdGhlIHN0YXRlIHdpbGwgaGF2ZS5cclxuICAgKiBAcGFyYW0ge3RpbWVTY2FsZX0gW29wdGlvbnMudGltZVNjYWxlPTFdIC0gRmFjdG9yIHRvIHNjYWxlIHRoZSBwbGF5YmFjayBzcGVlZCBvZiB0aGVcclxuICAgKiBhbmltYXRpb24uXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLmxvb3BDb3VudD1JbmZpbml0eV0gLSBOdW1iZXIgb2YgdGltZXMgdGhlIGFuaW1hdGlvbiBzaG91bGRcclxuICAgKiByZXBlYXQgYmVmb3JlIGZpbmlzaGluZy5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuYmxlbmRNb2RlPUxheWVyQmxlbmRNb2Rlc1tEZWZhdWx0TGF5ZXJCbGVuZE1vZGVdXSAtIFR5cGUgb2ZcclxuICAgKiBibGVuZGluZyB0aGUgYW5pbWF0aW9uIHNob3VsZCB1c2UuXHJcbiAgICogQHBhcmFtIHtBcnJheS48T2JqZWN0Pn0gW29wdGlvbnMuYmxlbmRTdGF0ZU9wdGlvbnNdIC0gQXJyYXkgb2Ygb3B0aW9ucyB1c2VkIHRvIGNyZWF0ZSB0aGVcclxuICAgKiBibGVuZCBzdGF0ZXMgZm9yIHRoaXMgY29udGFpbmVyLlxyXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IFtvcHRpb25zLmJsZW5kVGhyZXNob2xkc10gLSBBcnJheSBvZiBudW1iZXJzIHVzZWQgdG8gc2V0IHRoZVxyXG4gICAqIHRocmVzaG9sZHMgZm9yIGVhY2ggYmxlbmQgc3RhdGUgaW4gdGhpcyBjb250YWluZXIuXHJcbiAgICogQHBhcmFtIHtBcnJheS48Ym9vbGVhbj59IFtvcHRpb25zLmJsZW5kTWF0Y2hQaGFzZXM9W11dIC0gT3B0aW9uYWwgYXJyYXkgb2YgYm9vbGVhbnMgdXNlZCB0b1xyXG4gICAqIHNldCB3aGV0aGVyIG9yIG5vdCBlYWNoIGJsZW5kIHN0YXRlIGluIHRoaXMgY29udGFpbmVyIHdpbGwgbWF0Y2ggcGhhc2VzLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0JsZW5kMWRTdGF0ZX1cclxuICAgKi9cclxuICBfY3JlYXRlQmxlbmQxZFN0YXRlKG9wdGlvbnMpIHtcclxuICAgIGNvbnN0IHtibGVuZFN0YXRlT3B0aW9ucyA9IFtdfSA9IG9wdGlvbnM7XHJcbiAgICBjb25zdCB7YmxlbmRUaHJlc2hvbGRzID0gW119ID0gb3B0aW9ucztcclxuICAgIGNvbnN0IHtibGVuZE1hdGNoUGhhc2VzID0gW119ID0gb3B0aW9ucztcclxuXHJcbiAgICBjb25zdCBibGVuZFN0YXRlcyA9IFtdO1xyXG4gICAgYmxlbmRTdGF0ZU9wdGlvbnMuZm9yRWFjaChibGVuZE9wdGlvbnMgPT4ge1xyXG4gICAgICBibGVuZFN0YXRlcy5wdXNoKFxyXG4gICAgICAgIHRoaXMuX2NyZWF0ZVNpbmdsZVN0YXRlKHsuLi5ibGVuZE9wdGlvbnMsIGJsZW5kTW9kZTogb3B0aW9ucy5ibGVuZE1vZGV9KVxyXG4gICAgICApO1xyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIG5ldyBCbGVuZDFkU3RhdGUoXHJcbiAgICAgIG9wdGlvbnMsXHJcbiAgICAgIGJsZW5kU3RhdGVzLFxyXG4gICAgICBibGVuZFRocmVzaG9sZHMsXHJcbiAgICAgIGJsZW5kTWF0Y2hQaGFzZXNcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gYSBuZXcgaW5zdGFuY2Ugb2YgYSBCbGVuZDJkU3RhdGUuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBPcHRpb25zIHRvIHBhc3MgdG8gdGhlIEJsZW5kMWRTdGF0ZSBjb25zdHJ1Y3Rvci5cclxuICAgKiBAcGFyYW0ge3N0cmluZz19IG9wdGlvbnMubmFtZSAtIE5hbWUgZm9yIHRoZSBhbmltYXRpb24gc3RhdGUuIE5hbWVzIG11c3QgYmVcclxuICAgKiB1bmlxdWUgZm9yIHRoZSBsYXllciB0aGUgc3RhdGUgaXMgYXBwbGllZCB0by5cclxuICAgKiBAcGFyYW0ge3dlaWdodH0gW29wdGlvbnMud2VpZ2h0PTBdIC0gVGhlIDAtMSBhbW91bnQgb2YgaW5mbHVlbmNlIHRoZSBzdGF0ZSB3aWxsIGhhdmUuXHJcbiAgICogQHBhcmFtIHt0aW1lU2NhbGV9IFtvcHRpb25zLnRpbWVTY2FsZT0xXSAtIEZhY3RvciB0byBzY2FsZSB0aGUgcGxheWJhY2sgc3BlZWQgb2YgdGhlXHJcbiAgICogYW5pbWF0aW9uLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5sb29wQ291bnQ9SW5maW5pdHldIC0gTnVtYmVyIG9mIHRpbWVzIHRoZSBhbmltYXRpb24gc2hvdWxkXHJcbiAgICogcmVwZWF0IGJlZm9yZSBmaW5pc2hpbmcuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmJsZW5kTW9kZT1MYXllckJsZW5kTW9kZXNbRGVmYXVsdExheWVyQmxlbmRNb2RlXV0gLSBUeXBlIG9mXHJcbiAgICogYmxlbmRpbmcgdGhlIGFuaW1hdGlvbiBzaG91bGQgdXNlLlxyXG4gICAqIEBwYXJhbSB7QXJyYXkuPE9iamVjdD59IFtvcHRpb25zLmJsZW5kU3RhdGVPcHRpb25zXSAtIEFycmF5IG9mIG9wdGlvbnMgdXNlZCB0byBjcmVhdGUgdGhlXHJcbiAgICogYmxlbmQgc3RhdGVzIGZvciB0aGlzIGNvbnRhaW5lci5cclxuICAgKiBAcGFyYW0ge0FycmF5LjxBcnJheS48bnVtYmVyPj59IFtvcHRpb25zLmJsZW5kVGhyZXNob2xkc10gLSBBcnJheSBvZiBBcnJheSBvZiBudW1iZXJzIHVzZWQgdG8gc2V0IHRoZVxyXG4gICAqIHRocmVzaG9sZHMgZm9yIGVhY2ggYmxlbmQgc3RhdGUgaW4gdGhpcyBjb250YWluZXIuXHJcbiAgICogQHBhcmFtIHtBcnJheS48Ym9vbGVhbj59IFtvcHRpb25zLmJsZW5kTWF0Y2hQaGFzZXM9W11dIC0gT3B0aW9uYWwgYXJyYXkgb2YgYm9vbGVhbnMgdXNlZCB0b1xyXG4gICAqIHNldCB3aGV0aGVyIG9yIG5vdCBlYWNoIGJsZW5kIHN0YXRlIGluIHRoaXMgY29udGFpbmVyIHdpbGwgbWF0Y2ggcGhhc2VzLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0JsZW5kMWRTdGF0ZX1cclxuICAgKi9cclxuICBfY3JlYXRlQmxlbmQyZFN0YXRlKG9wdGlvbnMpIHtcclxuICAgIGNvbnN0IHtibGVuZFN0YXRlT3B0aW9ucyA9IFtdfSA9IG9wdGlvbnM7XHJcbiAgICBjb25zdCB7YmxlbmRUaHJlc2hvbGRzID0gW119ID0gb3B0aW9ucztcclxuICAgIGNvbnN0IHtibGVuZE1hdGNoUGhhc2VzID0gW119ID0gb3B0aW9ucztcclxuXHJcbiAgICBjb25zdCBibGVuZFN0YXRlcyA9IFtdO1xyXG4gICAgYmxlbmRTdGF0ZU9wdGlvbnMuZm9yRWFjaChibGVuZE9wdGlvbnMgPT4ge1xyXG4gICAgICBibGVuZFN0YXRlcy5wdXNoKFxyXG4gICAgICAgIHRoaXMuX2NyZWF0ZVNpbmdsZVN0YXRlKHsuLi5ibGVuZE9wdGlvbnMsIGJsZW5kTW9kZTogb3B0aW9ucy5ibGVuZE1vZGV9KVxyXG4gICAgICApO1xyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIG5ldyBCbGVuZDJkU3RhdGUoXHJcbiAgICAgIG9wdGlvbnMsXHJcbiAgICAgIGJsZW5kU3RhdGVzLFxyXG4gICAgICBibGVuZFRocmVzaG9sZHMsXHJcbiAgICAgIGJsZW5kTWF0Y2hQaGFzZXNcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gYSBuZXcgaW5zdGFuY2Ugb2YgYSBSYW5kb21BbmltYXRpb25TdGF0ZS5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gcGFzcyB0byB0aGUgUmFuZG9tQW5pbWF0aW9uU3RhdGUgY29uc3RydWN0b3IuXHJcbiAgICogQHBhcmFtIHtzdHJpbmc9fSBvcHRpb25zLm5hbWUgLSBOYW1lIGZvciB0aGUgYW5pbWF0aW9uIHN0YXRlLiBOYW1lcyBtdXN0IGJlXHJcbiAgICogdW5pcXVlIGZvciB0aGUgbGF5ZXIgdGhlIHN0YXRlIGlzIGFwcGxpZWQgdG8uXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLnBsYXlJbnRlcnZhbD0zXSAtIFRoZSBiYXNlIGFuaW1hdGlvbiBwbGF5YmFjayBpbnRlcnZhbC5cclxuICAgKiBAcGFyYW0ge0FycmF5LjxPYmplY3Q+fSBbb3B0aW9ucy5zdWJTdGF0ZU9wdGlvbnNdIC0gQXJyYXkgb2Ygb3B0aW9ucyB1c2VkIHRvIGNyZWF0ZSB0aGVcclxuICAgKiBzdWIgc3RhdGVzIGZvciB0aGlzIGNvbnRhaW5lci5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtSYW5kb21BbmltYXRpb25TdGF0ZX1cclxuICAgKi9cclxuICBfY3JlYXRlUmFuZG9tQW5pbWF0aW9uU3RhdGUob3B0aW9ucykge1xyXG4gICAgY29uc3Qge3N1YlN0YXRlT3B0aW9ucyA9IFtdfSA9IG9wdGlvbnM7XHJcblxyXG4gICAgY29uc3Qgc3ViU3RhdGVzID0gW107XHJcbiAgICBzdWJTdGF0ZU9wdGlvbnMuZm9yRWFjaChzdWJTdGF0ZU9wdGlvbnMgPT4ge1xyXG4gICAgICBzdWJTdGF0ZXMucHVzaChcclxuICAgICAgICB0aGlzLl9jcmVhdGVTaW5nbGVTdGF0ZSh7XHJcbiAgICAgICAgICAuLi5zdWJTdGF0ZU9wdGlvbnMsXHJcbiAgICAgICAgICBibGVuZE1vZGU6IG9wdGlvbnMuYmxlbmRNb2RlLFxyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gbmV3IFJhbmRvbUFuaW1hdGlvblN0YXRlKG9wdGlvbnMsIHN1YlN0YXRlcyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNYWtlIHN1cmUgdGhlIGxheWVyIHdpdGggdGhlIGdpdmVuIG5hbWUgZXhpc3RzIGFuZCByZXR1cm4gYSB1bmlxdWUgdmVyc2lvblxyXG4gICAqIG9mIHRoZSBhbmltYXRpb24gbmFtZSBzdXBwbGllZCBmb3IgdGhhdCBsYXllci5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGF5ZXJOYW1lIC0gTmFtZSBvZiB0aGUgbGF5ZXIgdG8gY2hlY2sgYWdhaW5zdC5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gYW5pbWF0aW9uTmFtZSAtIE5hbWUgb2YgdGhlIGFuaW1hdGlvbiB0byB2YWxpZGF0ZS5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IFZhbGlkYXRlZCBhbmltYXRpb24gbmFtZS5cclxuICAgKi9cclxuICBfdmFsaWRhdGVOZXdBbmltYXRpb24obGF5ZXJOYW1lLCBhbmltYXRpb25OYW1lKSB7XHJcbiAgICAvLyBNYWtlIHN1cmUgdGhlIGxheWVyTmFtZSBpcyB2YWxpZFxyXG4gICAgY29uc3QgbGF5ZXIgPSB0aGlzLl9sYXllck1hcFtsYXllck5hbWVdO1xyXG5cclxuICAgIGlmIChsYXllciA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgQ2Fubm90IGFkZCBhbmltYXRpb24gdG8gbGF5ZXIgJHtsYXllck5hbWV9IGZyb20gaG9zdCAke3RoaXMuX2hvc3QuaWR9LiBObyBsYXllciBleGlzdHMgd2l0aCB0aGlzIG5hbWUuYFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIE1ha2Ugc3VyZSB0aGUgYW5pbWF0aW9uTmFtZSBpcyB1bmlxdWVcclxuICAgIGNvbnN0IG5hbWUgPSBVdGlscy5nZXRVbmlxdWVOYW1lKGFuaW1hdGlvbk5hbWUsIGxheWVyLmdldFN0YXRlTmFtZXMoKSk7XHJcblxyXG4gICAgaWYgKG5hbWUgIT09IGFuaW1hdGlvbk5hbWUpIHtcclxuICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgIGBBbmltYXRpb24gbmFtZSAke2FuaW1hdGlvbk5hbWV9IGlzIG5vdCB1bmlxdWUgZm9yIGxheWVyICR7bGF5ZXIubmFtZX0uIEFuaW1hdGlvbiB3aWxsIGJlIHJlbmFtZWQgdG8gJHtuYW1lfS5gXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG5hbWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHdoZXRoZXIgb3Igbm90IGFsbCBhbmltYXRpb25zIGFyZSBwYXVzZWQuXHJcbiAgICpcclxuICAgKiBAcmVhZG9ubHlcclxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgKi9cclxuICBnZXQgcGF1c2VkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3BhdXNlZDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgYW4gYXJyYXkgb2YgbmFtZXMgb2YgYW5pbWF0aW9uIGxheWVycy5cclxuICAgKlxyXG4gICAqIEByZWFkb25seVxyXG4gICAqIEB0eXBlIHtBcnJheS48c3RyaW5nPn1cclxuICAgKi9cclxuICBnZXQgbGF5ZXJzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2xheWVycy5tYXAobGF5ZXIgPT4gbGF5ZXIubmFtZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGUgYW5kIHN0b3JlIGEgbmV3IGFuaW1hdGlvbiBsYXllci5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbbmFtZT0nTmV3TGF5ZXInXSAtIE5hbWUgZm9yIHRoZSBsYXllci5cclxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIC0gT3B0aW9ucyB0byBwYXNzIHRvIHtAbGluayBBbmltYXRpb25MYXllciNjb25zdHJ1Y3Rvcn1cclxuICAgKiBAcGFyYW0ge2luZGV4PX0gaW5kZXggLSBJbmRleCB0byBpbnNlcnQgdGhlIG5ldyBsYXllciBhdC4gSWYgbm9uZSBpcyBwcm92aWRlZFxyXG4gICAqIGl0IHdpbGwgYmUgYWRkZWQgdG8gdGhlIGVuZCBvZiB0aGUgc3RhY2suXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBJbmRleCBvZiB0aGUgbmV3IGxheWVyLlxyXG4gICAqL1xyXG4gIGFkZExheWVyKG5hbWUgPSAnTmV3TGF5ZXInLCBvcHRpb25zID0ge30sIGluZGV4KSB7XHJcbiAgICBjb25zdCBudW1MYXllcnMgPSB0aGlzLl9sYXllcnMubGVuZ3RoO1xyXG4gICAgbGV0IGxheWVySW5kZXggPSBpbmRleDtcclxuXHJcbiAgICAvLyBNYWtlIHN1cmUgdGhlIGdpdmVuIGluZGV4IGlzIHdpdGhpbiB0aGUgcmFuZ2Ugb2YgbGF5ZXJzXHJcbiAgICBpZiAoaW5kZXggPT09IHVuZGVmaW5lZCB8fCBpbmRleCA9PT0gLTEpIHtcclxuICAgICAgbGF5ZXJJbmRleCA9IHRoaXMuX2xheWVycy5sZW5ndGg7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBsYXllckluZGV4ID0gdGhpcy5fdmFsaWRhdGVJbmRleChpbmRleCwgZmFsc2UpO1xyXG5cclxuICAgICAgaWYgKGxheWVySW5kZXggPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIC8vIEluc2VydCBhdCB0aGUgYmVnaW5uaW5nIGlmIHRoZSB1c2VyIHBhc3NlZCBpbiBhIG5lZ2F0aXZlIGluZGV4XHJcbiAgICAgICAgaWYgKGluZGV4IDwgMCkge1xyXG4gICAgICAgICAgbGF5ZXJJbmRleCA9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIE90aGVyd2lzZSBhcHBlbmQgdG8gdGhlIGVuZFxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgbGF5ZXJJbmRleCA9IHRoaXMuX2xheWVycy5sZW5ndGg7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zb2xlLndhcm4oXHJcbiAgICAgICAgICBgSW5kZXggJHtpbmRleH0gaXMgaW52YWxpZCBmb3IgaG9zdCAke3RoaXMuX2hvc3QuaWR9LiBOZXcgbGF5ZXIgd2lsbCBiZSBhZGRlZCBhdCB0aGUgY2xvc2VzdCB2YWxpZCBpbmRleDogJHtsYXllckluZGV4fS5gXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIE1ha2Ugc3VyZSB0aGUgbGF5ZXIgbmFtZSBpcyB1bmlxdWVcclxuICAgIGNvbnN0IGxheWVyTmFtZSA9IFV0aWxzLmdldFVuaXF1ZU5hbWUobmFtZSwgT2JqZWN0LmtleXModGhpcy5fbGF5ZXJNYXApKTtcclxuXHJcbiAgICBpZiAobmFtZSAhPT0gbGF5ZXJOYW1lKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICBgTGF5ZXIgbmFtZSAke25hbWV9IGlzIG5vdCB1bmlxdWUuIE5ldyBsYXllciB3aWxsIGJlIGFkZGVkIHdpdGggdGhlIG5hbWUgJHtsYXllck5hbWV9LmBcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBsYXllciA9IG5ldyBBbmltYXRpb25MYXllcih7Li4ub3B0aW9ucywgbmFtZTogbGF5ZXJOYW1lfSk7XHJcbiAgICB0aGlzLl9sYXllck1hcFtsYXllck5hbWVdID0gbGF5ZXI7XHJcblxyXG4gICAgaWYgKGxheWVySW5kZXggPT09IG51bUxheWVycykge1xyXG4gICAgICB0aGlzLl9sYXllcnMucHVzaChsYXllcik7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9sYXllcnMuc3BsaWNlKGxheWVySW5kZXgsIDAsIGxheWVyKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBOb3RpZnkgdGhhdCBhIGxheWVyIGhhcyBiZWVuIGFkZGVkIHRvIHRoZSBmZWF0dXJlXHJcbiAgICBjb25zdCBldmVudERhdGEgPSB7bmFtZTogbGF5ZXJOYW1lLCBpbmRleDogbGF5ZXJJbmRleH07XHJcbiAgICB0aGlzLmVtaXQodGhpcy5jb25zdHJ1Y3Rvci5FVkVOVFMuYWRkTGF5ZXIsIGV2ZW50RGF0YSk7XHJcblxyXG4gICAgcmV0dXJuIGV2ZW50RGF0YTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlbW92ZSBhbiBhbmltYXRpb24gbGF5ZXIgZnJvbSB0aGUgc3RhY2suIEFuaW1hdGlvbnMgb24gdGhpcyBsYXllciB3aWxsIG5vXHJcbiAgICogbG9uZ2VyIGJlIGV2YWx1YXRlZC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gTmFtZSBmb3IgdGhlIGxheWVyIHRvIHJlbW92ZS5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBXaGV0aGVyIG9yIG5vdCByZW1vdmFsIHdhcyBzdWNjZXNzZnVsLlxyXG4gICAqL1xyXG4gIHJlbW92ZUxheWVyKG5hbWUpIHtcclxuICAgIGNvbnN0IGxheWVyID0gdGhpcy5fbGF5ZXJNYXBbbmFtZV07XHJcblxyXG4gICAgaWYgKGxheWVyID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgIGBEaWQgbm90IHJlbW92ZSBsYXllciAke25hbWV9IGZyb20gaG9zdCAke3RoaXMuX2hvc3QuaWR9LiBObyBsYXllciBleGlzdHMgd2l0aCB0aGlzIG5hbWUuYFxyXG4gICAgICApO1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgbGF5ZXIuZGlzY2FyZCgpO1xyXG5cclxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fbGF5ZXJzLmluZGV4T2YobGF5ZXIpO1xyXG4gICAgdGhpcy5fbGF5ZXJzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICBkZWxldGUgdGhpcy5fbGF5ZXJNYXBbbmFtZV07XHJcblxyXG4gICAgLy8gTm90aWZ5IHRoYXQgYSBsYXllciBoYXMgYmVlbiByZW1vdmVkIGZyb20gdGhlIGZlYXR1cmVcclxuICAgIHRoaXMuZW1pdCh0aGlzLmNvbnN0cnVjdG9yLkVWRU5UUy5yZW1vdmVMYXllciwge25hbWUsIGluZGV4fSk7XHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZS1vcmRlciB0aGUgbGF5ZXIgc3RhY2sgc28gdGhhdCB0aGUgbGF5ZXIgd2l0aCB0aGUgZ2l2ZW4gbmFtZSBpcyBwb3NpdGlvbmVkXHJcbiAgICogYXQgdGhlIGdpdmVuIGluZGV4LlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBOYW1lIG9mIHRoZSBsYXllciB0byBtb3ZlLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleCAtIE5ldyBpbmRleCB0byBwb3NpdGlvbiB0aGUgbGF5ZXIgYXQuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBUaGUgbmV3IGluZGV4IG9mIHRoZSBsYXllclxyXG4gICAqL1xyXG4gIG1vdmVMYXllcihuYW1lLCBpbmRleCkge1xyXG4gICAgLy8gTWFrZSBzdXJlIHRoZSBuYW1lIGlzIHZhbGlkXHJcbiAgICBjb25zdCBsYXllciA9IHRoaXMuX2xheWVyTWFwW25hbWVdO1xyXG5cclxuICAgIGlmIChsYXllciA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgQ2Fubm90IG1vdmUgbGF5ZXIgJHtuYW1lfSBmcm9tIGhvc3QgJHt0aGlzLl9ob3N0LmlkfS4gTm8gbGF5ZXIgZXhpc3RzIHdpdGggdGhpcyBuYW1lLmBcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBNYWtlIHN1cmUgdGhlIGluZGV4IGZhbGxzIGluIHRoZSByYW5nZSBvZiBleGlzdGluZyBsYXllcnNcclxuICAgIGNvbnN0IGxheWVySW5kZXggPSB0aGlzLl92YWxpZGF0ZUluZGV4KGluZGV4LCB0cnVlKTtcclxuICAgIGNvbnN0IGxhc3RJbmRleCA9IHRoaXMuX2xheWVycy5sZW5ndGggLSAxO1xyXG5cclxuICAgIGlmIChsYXllckluZGV4ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgIGBDYW5ub3QgbW92ZSBsYXllciAke25hbWV9IGZyb20gaG9zdCAke3RoaXMuX2hvc3QuaWR9IHRvIGluZGV4ICR7aW5kZXh9LiBJbmRleCBtdXN0IGJlIGluIHRoZSAwIC0gJHtsYXN0SW5kZXh9IHJhbmdlLmBcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBjdXJyZW50SW5kZXggPSB0aGlzLl9sYXllcnMuaW5kZXhPZihsYXllcik7XHJcbiAgICBpZiAoY3VycmVudEluZGV4ID09PSBsYXllckluZGV4KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBSZW1vdmUgZnJvbSB0aGUgY3VycmVudCBwb3NpdGlvblxyXG4gICAgdGhpcy5fbGF5ZXJzLnNwbGljZShjdXJyZW50SW5kZXgsIDEpO1xyXG5cclxuICAgIC8vIEluc2VydCBhdCB0aGUgbmV3IHBvc2l0aW9uXHJcbiAgICBpZiAobGF5ZXJJbmRleCA9PT0gbGFzdEluZGV4KSB7XHJcbiAgICAgIHRoaXMuX2xheWVycy5wdXNoKGxheWVyKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2xheWVycy5zcGxpY2UobGF5ZXJJbmRleCwgMCwgbGF5ZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBsYXllckluZGV4O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlIHRoZSBuYW1lIG9mIGEgbGF5ZXIuIE5hbWVzIG11c3QgYmUgdW5pcXVlLCBpZiB0aGUgbmV3IG5hbWUgaXMgbm90XHJcbiAgICogdW5pcXVlIGl0IHdpbGwgaGF2ZSB0cmFpbGluZyBudW1iZXJzIGFwcGVuZGVkIHVudGlsIGl0IGlzIHVuaXF1ZS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjdXJyZW50TmFtZSAtIEN1cnJlbnQgbmFtZSBvZiB0aGUgbGF5ZXIuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5ld05hbWUgLSBOZXcgbmFtZSB0byBzZXQgb24gdGhlIGxheWVyLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge3N0cmluZ30gVGhlIG5ldyBuYW1lIG9mIHRoZSBsYXllclxyXG4gICAqL1xyXG4gIHJlbmFtZUxheWVyKGN1cnJlbnROYW1lLCBuZXdOYW1lKSB7XHJcbiAgICAvLyBNYWtlIHN1cmUgdGhlIG5hbWUgaXMgdmFsaWRcclxuICAgIGNvbnN0IGxheWVyID0gdGhpcy5fbGF5ZXJNYXBbY3VycmVudE5hbWVdO1xyXG5cclxuICAgIGlmIChsYXllciA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgQ2Fubm90IHJlbmFtZSBsYXllciAke2N1cnJlbnROYW1lfSBmcm9tIGhvc3QgJHt0aGlzLl9ob3N0LmlkfS4gTm8gbGF5ZXIgZXhpc3RzIHdpdGggdGhpcyBuYW1lLmBcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBNYWtlIHN1cmUgdGhlIGxheWVyIG5hbWUgaXMgdW5pcXVlXHJcbiAgICBjb25zdCBuYW1lID0gVXRpbHMuZ2V0VW5pcXVlTmFtZShuZXdOYW1lLCBPYmplY3Qua2V5cyh0aGlzLl9sYXllck1hcCkpO1xyXG5cclxuICAgIGlmIChuYW1lICE9PSBuZXdOYW1lKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICBgTGF5ZXIgbmFtZSAke25ld05hbWV9IGlzIG5vdCB1bmlxdWUuIExheWVyIHdpbGwgYmUgcmVuYW1lZCB0byAke25hbWV9LmBcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBkZWxldGUgdGhpcy5fbGF5ZXJNYXBbY3VycmVudE5hbWVdO1xyXG4gICAgdGhpcy5fbGF5ZXJNYXBbbmFtZV0gPSBsYXllcjtcclxuICAgIGxheWVyLm5hbWUgPSBuYW1lO1xyXG5cclxuICAgIC8vIE5vdGlmeSB0aGF0IGEgbGF5ZXIgaGFzIGJlZW4gcmVuYW1lZCBvbiB0aGUgZmVhdHVyZVxyXG4gICAgdGhpcy5lbWl0KHRoaXMuY29uc3RydWN0b3IuRVZFTlRTLnJlbmFtZUxheWVyLCB7XHJcbiAgICAgIG9sZE5hbWU6IGN1cnJlbnROYW1lLFxyXG4gICAgICBuZXdOYW1lOiBuYW1lLFxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIG5hbWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gdGhlIHdlaWdodCBvZiBhbiBhbmltYXRpb24gbGF5ZXIuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRvIHJldHVybiB3ZWlnaHQgZnJvbS5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XHJcbiAgICovXHJcbiAgZ2V0TGF5ZXJXZWlnaHQobmFtZSkge1xyXG4gICAgLy8gTWFrZSBzdXJlIHRoZSBuYW1lIGlzIHZhbGlkXHJcbiAgICBjb25zdCBsYXllciA9IHRoaXMuX2xheWVyTWFwW25hbWVdO1xyXG5cclxuICAgIGlmIChsYXllciA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgQ2Fubm90IGdldCB3ZWlnaHQgb24gbGF5ZXIgJHtuYW1lfSBmcm9tIGhvc3QgJHt0aGlzLl9ob3N0LmlkfS4gTm8gbGF5ZXIgZXhpc3RzIHdpdGggdGhpcyBuYW1lLmBcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbGF5ZXIud2VpZ2h0O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlIHRoZSB3ZWlnaHQgb2YgYW4gYW5pbWF0aW9uIGxheWVyLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgbGF5ZXIgdG8gdXBkYXRlLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB3ZWlnaHQgLSBUaGUgd2VpZ2h0IHZhbHVlIHRvIHNldCBvbiB0aGUgbGF5ZXIuIFRoaXMgbnVtYmVyXHJcbiAgICogc2hvdWxkIGJlIGluIHRoZSAwLTEgcmFuZ2UuXHJcbiAgICogQHBhcmFtIHtudW1iZXI9fSBzZWNvbmRzIC0gVGhlIG51bWJlciBvZiBzZWNvbmRzIGl0IHNob3VsZCB0YWtlIHRvIHJlYWNoIHRoZVxyXG4gICAqIG5ldyB3ZWlnaHQuIERlZmF1bHQgaXMgemVybyBhbmQgd2lsbCBzZXQgaW1tZWRpYXRlbHkuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IGVhc2luZ0ZuIC0gVGhlIGVhc2luZyBmdW5jdGlvbiB0byB1c2Ugd2hpbGUgaW50ZXJwb2xhdGluZ1xyXG4gICAqIHRoZSB3ZWlnaHQuIERlZmF1bHQgaXMgRWFzaW5nLkxpbmVhci5Jbk91dC5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtEZWZlcnJlZH0gQSBwcm9taXNlIHRoYXQgd2lsbCByZXNvbHZlIG9uY2UgdGhlIGxheWVyJ3Mgd2VpZ2h0IHJlYWNoZXNcclxuICAgKiB0aGUgdGFyZ2V0IHZhbHVlLlxyXG4gICAqL1xyXG4gIHNldExheWVyV2VpZ2h0KG5hbWUsIHdlaWdodCwgc2Vjb25kcywgZWFzaW5nRm4pIHtcclxuICAgIC8vIE1ha2Ugc3VyZSB0aGUgbmFtZSBpcyB2YWxpZFxyXG4gICAgY29uc3QgbGF5ZXIgPSB0aGlzLl9sYXllck1hcFtuYW1lXTtcclxuXHJcbiAgICBpZiAobGF5ZXIgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBjb25zdCBlID0gYENhbm5vdCBzZXQgd2VpZ2h0IG9uIGxheWVyICR7bmFtZX0gZnJvbSBob3N0ICR7dGhpcy5faG9zdC5pZH0uIE5vIGxheWVyIGV4aXN0cyB3aXRoIHRoaXMgbmFtZS5gO1xyXG4gICAgICByZXR1cm4gRGVmZXJyZWQucmVqZWN0KGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBsYXllci5zZXRXZWlnaHQod2VpZ2h0LCBzZWNvbmRzLCBlYXNpbmdGbik7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSBuYW1lcyBvZiBibGVuZCBzdGF0ZXMgaW4gYW4gYW5pbWF0aW9uIGluIGEgbGF5ZXIuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGF5ZXJOYW1lIC0gTmFtZSBvZiB0aGUgbGF5ZXIgY29udGFpbmluZyB0aGUgYW5pbWF0aW9uIGNvbnRhaW5pbmdcclxuICAgKiB0aGUgYmxlbmQgc3RhdGUgdG8gdXBkYXRlLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhbmltYXRpb25OYW1lIC0gTmFtZSBvZiB0aGUgYW5pbWF0aW9uIGNvbnRhaW5pbmcgdGhlIGJsZW5kIHN0YXRlXHJcbiAgICogdG8gdXBkYXRlLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0FycmF5LjxzdHJpbmc+fSAtIE5hbWVzIG9mIGJsZW5kIHN0YXRlcy5cclxuICAgKi9cclxuICBnZXRBbmltYXRpb25CbGVuZE5hbWVzKGxheWVyTmFtZSwgYW5pbWF0aW9uTmFtZSkge1xyXG4gICAgY29uc3QgbGF5ZXIgPSB0aGlzLl9sYXllck1hcFtsYXllck5hbWVdO1xyXG5cclxuICAgIGlmIChsYXllciA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgQ2Fubm90IGdldCBibGVuZCBuYW1lcyBvbiBsYXllciAke2xheWVyTmFtZX0gZnJvbSBob3N0ICR7dGhpcy5faG9zdC5pZH0uIE5vIGxheWVyIGV4aXN0cyB3aXRoIHRoaXMgbmFtZS5gXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGxheWVyLmdldEFuaW1hdGlvbkJsZW5kTmFtZXMoYW5pbWF0aW9uTmFtZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGUgdGhlIHdlaWdodCBmb3IgYSBibGVuZCBzdGF0ZSBpbiBhbiBhbmltYXRpb24gaW4gYSBsYXllci5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllck5hbWUgLSBOYW1lIG9mIHRoZSBsYXllciBjb250YWluaW5nIHRoZSBhbmltYXRpb24gY29udGFpbmluZ1xyXG4gICAqIHRoZSBibGVuZCBzdGF0ZSB0byB1cGRhdGUuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFuaW1hdGlvbk5hbWUgLSBOYW1lIG9mIHRoZSBhbmltYXRpb24gY29udGFpbmluZyB0aGUgYmxlbmQgc3RhdGVcclxuICAgKiB0byB1cGRhdGUuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGJsZW5kTmFtZSAtIE5hbWUgb2YgdGhlIGJsZW5kIHN0YXRlIHRvIHVwZGF0ZS5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gd2VpZ2h0IC0gV2VpZ2h0IHZhbHVlIHRvIHNldCBvbiB0aGUgYW5pbWF0aW9uLiBUaGlzIG51bWJlciBzaG91ZGxkIGJlXHJcbiAgICogaW4gdGhlIDAtMSByYW5nZS5cclxuICAgKiBAcGFyYW0ge251bWJlcj19IHNlY29uZHMgLSBOdW1iZXIgb2Ygc2Vjb25kcyBpdCBzaG91bGQgdGFrZSB0byByZWFjaCB0aGUgbmV3IHdlaWdodC5cclxuICAgKiBEZWZhdWx0IGlzIHplcm8gYW5kIHdpbGwgc2V0IGltbWVkaWF0ZWx5LlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBlYXNpbmdGbiAtIEVhc2luZyBmdW5jdGlvbiB0byB1c2Ugd2hpbGUgaW50ZXJwb2xhdGluZyB0aGUgbmV3XHJcbiAgICogd2VpZ2h0LiBEZWZhdWx0IGlzIEVhc2luZy5MaW5lYXIuSW5PdXQuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7RGVmZXJyZWR9IC0gUHJvbWlzZSB0aGF0IHdpbGwgcmVzb2x2ZSBvbmNlIHRoZSBhbmltYXRpb24ncyB3ZWlnaHQgcmVhY2hlc1xyXG4gICAqIHRoZSB0YXJnZXQgdmFsdWUuXHJcbiAgICovXHJcbiAgc2V0QW5pbWF0aW9uQmxlbmRXZWlnaHQoXHJcbiAgICBsYXllck5hbWUsXHJcbiAgICBhbmltYXRpb25OYW1lLFxyXG4gICAgYmxlbmROYW1lLFxyXG4gICAgd2VpZ2h0LFxyXG4gICAgc2Vjb25kcyxcclxuICAgIGVhc2luZ0ZuXHJcbiAgKSB7XHJcbiAgICBjb25zdCBsYXllciA9IHRoaXMuX2xheWVyTWFwW2xheWVyTmFtZV07XHJcblxyXG4gICAgaWYgKGxheWVyID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgY29uc3QgZSA9IGBDYW5ub3Qgc2V0IGJsZW5kIHdlaWdodCBvbiBsYXllciAke2xheWVyTmFtZX0gZnJvbSBob3N0ICR7dGhpcy5faG9zdC5pZH0uIE5vIGxheWVyIGV4aXN0cyB3aXRoIHRoaXMgbmFtZS5gO1xyXG4gICAgICByZXR1cm4gRGVmZXJyZWQucmVqZWN0KGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBsYXllci5zZXRBbmltYXRpb25CbGVuZFdlaWdodChcclxuICAgICAgYW5pbWF0aW9uTmFtZSxcclxuICAgICAgYmxlbmROYW1lLFxyXG4gICAgICB3ZWlnaHQsXHJcbiAgICAgIHNlY29uZHMsXHJcbiAgICAgIGVhc2luZ0ZuXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgd2VpZ2h0IGZvciBhIGJsZW5kIHN0YXRlIGluIGFuIGFuaW1hdGlvbiBpbiBhIGxheWVyLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVyTmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIGNvbnRhaW5pbmcgdGhlIGFuaW1hdGlvbiBjb250YWluaW5nXHJcbiAgICogdGhlIGJsZW5kIHN0YXRlIHRvIHVwZGF0ZS5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gYW5pbWF0aW9uTmFtZSAtIE5hbWUgb2YgdGhlIGFuaW1hdGlvbiBjb250YWluaW5nIHRoZSBibGVuZCBzdGF0ZVxyXG4gICAqIHRvIHVwZGF0ZS5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gYmxlbmROYW1lIC0gTmFtZSBvZiB0aGUgYmxlbmQgc3RhdGUgdG8gdXBkYXRlLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge251bWJlcn0gLSBXZWlnaHQgb2YgdGhlIGJsZW5kIHN0YXRlLlxyXG4gICAqL1xyXG4gIGdldEFuaW1hdGlvbkJsZW5kV2VpZ2h0KGxheWVyTmFtZSwgYW5pbWF0aW9uTmFtZSwgYmxlbmROYW1lKSB7XHJcbiAgICBjb25zdCBsYXllciA9IHRoaXMuX2xheWVyTWFwW2xheWVyTmFtZV07XHJcblxyXG4gICAgaWYgKGxheWVyID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgIGBDYW5ub3QgZ2V0IGJsZW5kIHdlaWdodCBvbiBsYXllciAke2xheWVyTmFtZX0gZnJvbSBob3N0ICR7dGhpcy5faG9zdC5pZH0uIE5vIGxheWVyIGV4aXN0cyB3aXRoIHRoaXMgbmFtZS5gXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGxheWVyLmdldEFuaW1hdGlvbkJsZW5kV2VpZ2h0KGFuaW1hdGlvbk5hbWUsIGJsZW5kTmFtZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQYXVzZSB3ZWlnaHQgaW50ZXJwb2xhdGlvbiBhbmltYXRpb24gb24gYSBsYXllciB3aXRoIHRoZSBnaXZlbiBuYW1lLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBOYW1lIG9mIHRoZSBsYXllciB0byBwYXVzZS5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtib29sZWFufSAtIFdoZXRoZXIgb3Igbm90IHRoZXJlIHdhcyBhbiBleGlzdGluZyBpbnRlcnBvbGF0aW9uIHRvIHBhdXNlLlxyXG4gICAqL1xyXG4gIHBhdXNlTGF5ZXJXZWlnaHQobmFtZSkge1xyXG4gICAgLy8gTWFrZSBzdXJlIHRoZSBuYW1lIGlzIHZhbGlkXHJcbiAgICBjb25zdCBsYXllciA9IHRoaXMuX2xheWVyTWFwW25hbWVdO1xyXG5cclxuICAgIGlmIChsYXllciA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgQ2Fubm90IHBhdXNlIHdlaWdodCBpbnRlcnBvbGF0aW9uIG9uIGxheWVyICR7bmFtZX0gZnJvbSBob3N0ICR7dGhpcy5faG9zdC5pZH0uIE5vIGxheWVyIGV4aXN0cyB3aXRoIHRoaXMgbmFtZS5gXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGxheWVyLnBhdXNlV2VpZ2h0KCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXN1bWUgd2VpZ2h0IGludGVycG9sYXRpb24gYW5pbWF0aW9uIG9uIGEgbGF5ZXIgd2l0aCB0aGUgZ2l2ZW4gbmFtZS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gTmFtZSBvZiB0aGUgbGF5ZXIgdG8gcmVzdW1lLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0RlZmVycmVkfSAtIFJlc29sdmVzIG9uY2UgdGhlIGxheWVyJ3Mgd2VpZ2h0IHJlYWNoZXMgaXRzIHRhcmdldCB2YWx1ZS5cclxuICAgKi9cclxuICByZXN1bWVMYXllcldlaWdodChuYW1lKSB7XHJcbiAgICAvLyBNYWtlIHN1cmUgdGhlIG5hbWUgaXMgdmFsaWRcclxuICAgIGNvbnN0IGxheWVyID0gdGhpcy5fbGF5ZXJNYXBbbmFtZV07XHJcblxyXG4gICAgaWYgKGxheWVyID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgY29uc3QgZSA9IGBDYW5ub3QgcmVzdW1lIHdlaWdodCBpbnRlcnBvbGF0aW9uIG9uIGxheWVyICR7bmFtZX0gZnJvbSBob3N0ICR7dGhpcy5faG9zdC5pZH0uIE5vIGxheWVyIGV4aXN0cyB3aXRoIHRoaXMgbmFtZS5gO1xyXG4gICAgICByZXR1cm4gRGVmZXJyZWQucmVqZWN0KGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBsYXllci5yZXN1bWVXZWlnaHQoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFBhdXNlIGN1cnJlbnQgYW5pbWF0aW9uIGFuZCB3ZWlnaHQgaW50ZXJwb2xhdGlvbiBhbmltYXRpb24gb24gYSBsYXllciB3aXRoXHJcbiAgICogdGhlIGdpdmVuIG5hbWUuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRvIHBhdXNlLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge2Jvb2xlYW59IC0gV2hldGhlciBvciBub3QgdGhlcmUgd2FzIGFuIGV4aXN0aW5nIGludGVycG9sYXRpb24gb3JcclxuICAgKiBjdXJyZW50IGFuaW1hdGlvbiB0byBwYXVzZS5cclxuICAgKi9cclxuICBwYXVzZUxheWVyKG5hbWUpIHtcclxuICAgIC8vIE1ha2Ugc3VyZSB0aGUgbmFtZSBpcyB2YWxpZFxyXG4gICAgY29uc3QgbGF5ZXIgPSB0aGlzLl9sYXllck1hcFtuYW1lXTtcclxuXHJcbiAgICBpZiAobGF5ZXIgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgYENhbm5vdCBwYXVzZSBsYXllciAke25hbWV9IGZyb20gaG9zdCAke3RoaXMuX2hvc3QuaWR9LiBObyBsYXllciBleGlzdHMgd2l0aCB0aGlzIG5hbWUuYFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBsYXllci5wYXVzZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVzdW1lIGN1cnJlbnQgYW5pbWF0aW9uIGFuZCB3ZWlnaHQgaW50ZXJwb2xhdGlvbiBhbmltYXRpb24gb24gYSBsYXllciB3aXRoXHJcbiAgICogdGhlIGdpdmVuIG5hbWUuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRvIHJlc3VtZS5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtEZWZlcnJlZH0gLSBSZXNvbHZlcyBvbmNlIHRoZSBsYXllcidzIHdlaWdodCByZWFjaGVzIGl0cyB0YXJnZXQgdmFsdWVcclxuICAgKiBhbmQgaXQncyBjdXJyZW50IGFuaW1hdGlvbiBmaW5pc2hlcyBwbGF5aW5nLlxyXG4gICAqL1xyXG4gIHJlc3VtZUxheWVyKG5hbWUpIHtcclxuICAgIC8vIE1ha2Ugc3VyZSB0aGUgbmFtZSBpcyB2YWxpZFxyXG4gICAgY29uc3QgbGF5ZXIgPSB0aGlzLl9sYXllck1hcFtuYW1lXTtcclxuXHJcbiAgICBpZiAobGF5ZXIgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBjb25zdCBlID0gYENhbm5vdCByZXN1bWUgbGF5ZXIgJHtuYW1lfSBmcm9tIGhvc3QgJHt0aGlzLl9ob3N0LmlkfS4gTm8gbGF5ZXIgZXhpc3RzIHdpdGggdGhpcyBuYW1lLmA7XHJcbiAgICAgIHJldHVybiBEZWZlcnJlZC5yZWplY3QoZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGxheWVyLnJlc3VtZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIHdoZXRoZXIgb3Igbm90IHRoZSBhbmltYXRpb24gbGF5ZXIgd2l0aCB0aGUgZ2l2ZW4gbmFtZSBpcyBjdXJyZW50bHlcclxuICAgKiB0cmFuc2l0aW9uaW5nIGJldHdlZW4gYW5pbWF0aW9ucy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllck5hbWUgLSBOYW1lIG9mIHRoZSBsYXllciB0byBjaGVjay5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gICAqL1xyXG4gIGdldFRyYW5zaXRpb25pbmcobGF5ZXJOYW1lKSB7XHJcbiAgICAvLyBNYWtlIHN1cmUgdGhlIGxheWVyTmFtZSBpcyB2YWxpZFxyXG4gICAgY29uc3QgbGF5ZXIgPSB0aGlzLl9sYXllck1hcFtsYXllck5hbWVdO1xyXG5cclxuICAgIGlmIChsYXllciA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgR2V0IHRyYW5zaXRpb25pbmcgb24gbGF5ZXIgJHtsYXllck5hbWV9IGZyb20gaG9zdCAke3RoaXMuX2hvc3QuaWR9LiBObyBsYXllciBleGlzdHMgd2l0aCB0aGlzIG5hbWUuYFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBsYXllci5pc1RyYW5zaXRpb25pbmc7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gYW4gYXJyYXkgb2YgdGhlIG5hbWVzIG9mIGFsbCBzdGF0ZXMgdGhlIGxheWVyIHdpdGggdGhlIGdpdmVuIG5hbWUgY29udHJvbHMuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGF5ZXJOYW1lIC0gTmFtZSBvZiB0aGUgbGF5ZXIgdG8gc2VhcmNoLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0FycmF5LjxzdHJpbmc+fVxyXG4gICAqL1xyXG4gIGdldEFuaW1hdGlvbnMobGF5ZXJOYW1lKSB7XHJcbiAgICAvLyBNYWtlIHN1cmUgdGhlIGxheWVyTmFtZSBpcyB2YWxpZFxyXG4gICAgY29uc3QgbGF5ZXIgPSB0aGlzLl9sYXllck1hcFtsYXllck5hbWVdO1xyXG5cclxuICAgIGlmIChsYXllciA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgR2V0IGFuaW1hdGlvbnMgb24gbGF5ZXIgJHtsYXllck5hbWV9IGZyb20gaG9zdCAke3RoaXMuX2hvc3QuaWR9LiBObyBsYXllciBleGlzdHMgd2l0aCB0aGlzIG5hbWUuYFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBsYXllci5nZXRTdGF0ZU5hbWVzKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gdGhlIG5hbWUgb2YgdGhlIHN0YXRlIGN1cnJlbnRseSBhY3RpdmUgb24gdGhlIGxheWVyIHdpdGggdGhlIGdpdmVuIG5hbWUuXHJcbiAgICogUmV0dXJuIG51bGwgaWYgdGhlcmUgaXMgbm8gY3VycmVudCBhbmltYXRpb24gZm9yIHRoZSBsYXllci5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllck5hbWUgLSBOYW1lIG9mIHRoZSBsYXllci5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHsoc3RyaW5nfG51bGwpfVxyXG4gICAqL1xyXG4gIGdldEN1cnJlbnRBbmltYXRpb24obGF5ZXJOYW1lKSB7XHJcbiAgICAvLyBNYWtlIHN1cmUgdGhlIGxheWVyTmFtZSBpcyB2YWxpZFxyXG4gICAgY29uc3QgbGF5ZXIgPSB0aGlzLl9sYXllck1hcFtsYXllck5hbWVdO1xyXG5cclxuICAgIGlmIChsYXllciA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgR2V0IGN1cnJlbnQgYW5pbWF0aW9uIG9uIGxheWVyICR7bGF5ZXJOYW1lfSBmcm9tIGhvc3QgJHt0aGlzLl9ob3N0LmlkfS4gTm8gbGF5ZXIgZXhpc3RzIHdpdGggdGhpcyBuYW1lLmBcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbGF5ZXIuY3VycmVudEFuaW1hdGlvbjtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiB3aGV0aGVyIG9yIG5vdCBhIGxheWVyIHdpdGggdGhlIGdpdmVuIG5hbWUgaXMgY3VycmVudGx5IHBsYXlpbmcgYW5cclxuICAgKiBhbmltYXRpb24gYW5kIHRoYXQgYW5pbWF0aW9uIGlzIHBhdXNlZC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllck5hbWUgLSBOYW1lIG9mIHRoZSBsYXllci5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gICAqL1xyXG4gIGdldFBhdXNlZChsYXllck5hbWUpIHtcclxuICAgIC8vIE1ha2Ugc3VyZSB0aGUgbGF5ZXJOYW1lIGlzIHZhbGlkXHJcbiAgICBjb25zdCBsYXllciA9IHRoaXMuX2xheWVyTWFwW2xheWVyTmFtZV07XHJcblxyXG4gICAgaWYgKGxheWVyID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgIGBHZXQgcGF1c2VkIG9uIGxheWVyICR7bGF5ZXJOYW1lfSBmcm9tIGhvc3QgJHt0aGlzLl9ob3N0LmlkfS4gTm8gbGF5ZXIgZXhpc3RzIHdpdGggdGhpcyBuYW1lLmBcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbGF5ZXIuY3VycmVudFN0YXRlICYmIGxheWVyLmN1cnJlbnRTdGF0ZS5wYXVzZWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gdGhlIHR5cGUgbmFtZSBvZiB0aGUgZ2l2ZW4gYW5pbWF0aW9uLiBAc2VlIEFuaW1hdGlvblR5cGVzLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVyTmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRoYXQgY29udGFpbnMgdGhlIGFuaW1hdGlvbi5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gYW5pbWF0aW9uTmFtZSAtIE5hbWUgb2YgdGhlIGFuaW1hdGlvbiB0byBjaGVjay5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XHJcbiAgICovXHJcbiAgZ2V0QW5pbWF0aW9uVHlwZShsYXllck5hbWUsIGFuaW1hdGlvbk5hbWUpIHtcclxuICAgIC8vIE1ha2Ugc3VyZSB0aGUgbGF5ZXJOYW1lIGlzIHZhbGlkXHJcbiAgICBjb25zdCBsYXllciA9IHRoaXMuX2xheWVyTWFwW2xheWVyTmFtZV07XHJcblxyXG4gICAgaWYgKGxheWVyID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgIGBHZXQgYW5pbWF0aW9uIHR5cGUgb24gbGF5ZXIgJHtsYXllck5hbWV9IGZyb20gaG9zdCAke3RoaXMuX2hvc3QuaWR9LiBObyBsYXllciBleGlzdHMgd2l0aCB0aGlzIG5hbWUuYFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHN0YXRlID0gbGF5ZXIuZ2V0U3RhdGUoYW5pbWF0aW9uTmFtZSk7XHJcblxyXG4gICAgaWYgKHN0YXRlID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgIGBHZXQgYW5pbWF0aW9uIHR5cGUgZm9yIGFuaW1hdGlvbiAke2FuaW1hdGlvbk5hbWV9IG9uIGxheWVyICR7bGF5ZXJOYW1lfSBmcm9tIGhvc3QgJHt0aGlzLl9ob3N0LmlkfS4gTm8gYW5pbWF0aW9uIGV4aXN0cyB3aXRoIHRoaXMgbmFtZS5gXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qge2NvbnN0cnVjdG9yfSA9IHN0YXRlO1xyXG5cclxuICAgIHJldHVybiBPYmplY3Qua2V5cyhBbmltYXRpb25UeXBlcykuZmluZChcclxuICAgICAgdHlwZU5hbWUgPT4gQW5pbWF0aW9uVHlwZXNbdHlwZU5hbWVdID09PSBjb25zdHJ1Y3RvclxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFkZCBhIG5ldyBhbmltYXRpb24gdG8gYW4gYW5pbWF0aW9uIGxheWVyLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVyTmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRvIGFkZCB0aGUgYW5pbWF0aW9uIHRvLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhbmltYXRpb25OYW1lIC0gTmFtZSB0byB1c2Ugd2hlbiBjYWxsaW5nIHRoZSBhbmltYXRpb24uXHJcbiAgICogQHBhcmFtIHtPYmplY3Q9fSBvcHRpb25zIC0gT3B0aW9ucyB0byBwYXNzIHRvIHRoZSBjb25zdHJ1Y3RvciBmb3IgdGhlIG5ld1xyXG4gICAqIFNpbmdsZVN0YXRlIGFuaW1hdGlvbi5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IC0gVGhlIG5hbWUgb2YgdGhlIGFuaW1hdGlvbiB0aGF0IHdhcyBhZGRlZFxyXG4gICAqL1xyXG4gIGFkZEFuaW1hdGlvbihcclxuICAgIGxheWVyTmFtZSxcclxuICAgIGFuaW1hdGlvbk5hbWUsXHJcbiAgICBhbmltYXRpb25UeXBlID0gQW5pbWF0aW9uVHlwZXMuc2luZ2xlLFxyXG4gICAgb3B0aW9ucyA9IHt9XHJcbiAgKSB7XHJcbiAgICBvcHRpb25zLm5hbWUgPSB0aGlzLl92YWxpZGF0ZU5ld0FuaW1hdGlvbihsYXllck5hbWUsIGFuaW1hdGlvbk5hbWUpO1xyXG5cclxuICAgIC8vIE1ha2Ugc3VyZSB0aGUgYW5pbWF0aW9uIHR5cGUgaXMgdmFsaWRcclxuICAgIGlmICghT2JqZWN0LnZhbHVlcyhBbmltYXRpb25UeXBlcykuaW5jbHVkZXMoYW5pbWF0aW9uVHlwZSkpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgIGBDYW5ub3QgYWRkIGFuaW1hdGlvbiAke2FuaW1hdGlvbk5hbWV9IHRvIGxheWVyICR7bGF5ZXJOYW1lfSBvbiBob3N0ICR7dGhpcy5faG9zdC5pZH0uIEludmFsaWQgYW5pbWF0aW9uIHR5cGUuYFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGxheWVyID0gdGhpcy5fbGF5ZXJNYXBbbGF5ZXJOYW1lXTtcclxuICAgIG9wdGlvbnMuYmxlbmRNb2RlID0gbGF5ZXIuYmxlbmRNb2RlO1xyXG4gICAgb3B0aW9ucy50cmFuc2l0aW9uVGltZSA9IGxheWVyLnRyYW5zaXRpb25UaW1lO1xyXG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzW2BfY3JlYXRlJHthbmltYXRpb25UeXBlLm5hbWV9YF0ob3B0aW9ucyk7XHJcblxyXG4gICAgY29uc3QgbmFtZSA9IGxheWVyLmFkZFN0YXRlKHN0YXRlKTtcclxuXHJcbiAgICAvLyBOb3RpZnkgdGhhdCBhbiBhbmltYXRpb24gaGFzIGJlZW4gYWRkZWQgdG8gdGhlIGZlYXR1cmVcclxuICAgIHRoaXMuZW1pdCh0aGlzLmNvbnN0cnVjdG9yLkVWRU5UUy5hZGRBbmltYXRpb24sIHtcclxuICAgICAgbGF5ZXJOYW1lLFxyXG4gICAgICBhbmltYXRpb25OYW1lOiBuYW1lLFxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIG5hbWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZW1vdmUgYW4gYW5pbWF0aW9uIGZyb20gYW4gYW5pbWF0aW9uIGxheWVyLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVyTmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRvIHJlbW92ZSB0aGUgYW5pbWF0aW9uIGZyb20uXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBOYW1lIG9mIHRoZSBhbmltYXRpb24gdG8gcmVtb3ZlLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAgICovXHJcbiAgcmVtb3ZlQW5pbWF0aW9uKGxheWVyTmFtZSwgYW5pbWF0aW9uTmFtZSkge1xyXG4gICAgLy8gTWFrZSBzdXJlIHRoZSBuYW1lIGlzIHZhbGlkXHJcbiAgICBjb25zdCBsYXllciA9IHRoaXMuX2xheWVyTWFwW2xheWVyTmFtZV07XHJcblxyXG4gICAgaWYgKGxheWVyID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgIGBDYW5ub3QgcmVtb3ZlIGFuaW1hdGlvbiBmcm9tIGxheWVyICR7bGF5ZXJOYW1lfSBmcm9tIGhvc3QgJHt0aGlzLl9ob3N0LmlkfS4gTm8gbGF5ZXIgZXhpc3RzIHdpdGggdGhpcyBuYW1lLmBcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCByZW1vdmVkID0gbGF5ZXIucmVtb3ZlU3RhdGUoYW5pbWF0aW9uTmFtZSk7XHJcblxyXG4gICAgLy8gTm90aWZ5IHRoYXQgYW4gYW5pbWF0aW9uIGhhcyBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgZmVhdHVyZVxyXG4gICAgaWYgKHJlbW92ZWQgPT09IHRydWUpIHtcclxuICAgICAgdGhpcy5lbWl0KHRoaXMuY29uc3RydWN0b3IuRVZFTlRTLnJlbW92ZUFuaW1hdGlvbiwge1xyXG4gICAgICAgIGxheWVyTmFtZSxcclxuICAgICAgICBhbmltYXRpb25OYW1lLFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcmVtb3ZlZDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZSB0aGUgbmFtZSBvZiBhbiBhbmltYXRpb24uIE5hbWVzIG11c3QgYmUgdW5pcXVlIG9uIGVhY2ggbGF5ZXIsIGlmIHRoZSBuZXdcclxuICAgKiBuYW1lIGlzIG5vdCB1bmlxdWUgaXQgd2lsbCBoYXZlIHRyYWlsaW5nIG51bWJlcnMgYXBwZW5kZWQgdW50aWwgaXQgaXMgdW5pcXVlLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVyTmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRoYXQgY29udGFpbnMgdGhlIGFuaW1hdGlvbiB0aGF0XHJcbiAgICogd2lsbCBiZSByZW5hbWVkLFxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjdXJyZW50QW5pbWF0aW9uTmFtZSAtIEN1cnJlbnQgbmFtZSBvZiB0aGUgYW5pbWF0aW9uLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuZXdBbmltYXRpb25OYW1lIC0gTmV3IG5hbWUgdG8gc2V0IG9uIHRoZSBhbmltYXRpb24uXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSAtIFRoZSBuZXcgbmFtZSBvZiB0aGUgYW5pbWF0aW9uXHJcbiAgICovXHJcbiAgcmVuYW1lQW5pbWF0aW9uKGxheWVyTmFtZSwgY3VycmVudEFuaW1hdGlvbk5hbWUsIG5ld0FuaW1hdGlvbk5hbWUpIHtcclxuICAgIGNvbnN0IGxheWVyID0gdGhpcy5fbGF5ZXJNYXBbbGF5ZXJOYW1lXTtcclxuXHJcbiAgICBpZiAobGF5ZXIgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgYENhbm5vdCByZW5hbWUgYW5pbWF0aW9uICR7Y3VycmVudEFuaW1hdGlvbk5hbWV9IG9uIGxheWVyICR7bGF5ZXJOYW1lfSBmb3IgaG9zdCAke3RoaXMuX2hvc3QuaWR9LiBObyBsYXllciBleGlzdHMgd2l0aCB0aGlzIG5hbWUuYFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IG5hbWUgPSBsYXllci5yZW5hbWVTdGF0ZShjdXJyZW50QW5pbWF0aW9uTmFtZSwgbmV3QW5pbWF0aW9uTmFtZSk7XHJcblxyXG4gICAgLy8gTm90aWZ5IHRoYXQgYW4gYW5pbWF0aW9uIGhhcyBiZWVuIHJlbmFtZWQgb24gdGhlIGZlYXR1cmVcclxuICAgIHRoaXMuZW1pdCh0aGlzLmNvbnN0cnVjdG9yLkVWRU5UUy5yZW5hbWVBbmltYXRpb24sIHtcclxuICAgICAgbGF5ZXJOYW1lLFxyXG4gICAgICBvbGROYW1lOiBjdXJyZW50QW5pbWF0aW9uTmFtZSxcclxuICAgICAgbmV3TmFtZTogbmFtZSxcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBuYW1lO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUGF1c2UgdGhlIGN1cnJlbnRseSBwbGF5aW5nIGFuaW1hdGlvbiBhbmQgcGxheSBhIG5ldyBhbmltYXRpb24gZnJvbSB0aGUgYmVnaW5uaW5nLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVyTmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRoYXQgY29udGFpbnMgdGhlIGFuaW1hdGlvbi5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gYW5pbWF0aW9uTmFtZSAtIE5hbWUgb2YgdGhlIGFuaW1hdGlvbiBzdGF0ZSB0byBwbGF5LlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyPX0gc2Vjb25kcyAtIFRoZSBudW1iZXIgb2Ygc2Vjb25kcyBpdCBzaG91bGQgdGFrZSB0byB0cmFuc2l0aW9uXHJcbiAgICogdG8gdGhlIG5ldyBhbmltYXRpb24uIERlZmF1bHQgaXMgemVybyBhbmQgd2lsbCBzZXQgaW1tZWRpYXRlbHkuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IGVhc2luZ0ZuIC0gVGhlIGVhc2luZyBmdW5jdGlvbiB0byB1c2Ugd2hpbGUgdHJhbnNpdGlvbmluZ1xyXG4gICAqIGJldHdlZW4gYW5pbWF0aW9ucy4gRGVmYXVsdCBpcyBFYXNpbmcuTGluZWFyLkluT3V0LlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0RlZmVycmVkfSAtIFJlc29sdmVzIG9uY2UgdGhlIGFuaW1hdGlvbiByZWFjaGVzIHRoZSBlbmQgb2YgaXRzXHJcbiAgICogdGltZWxpbmUuIExvb3BpbmcgYW5pbWF0aW9ucyBjYW4gb25seSByZXNvbHZlIGlmIHRoZXkgYXJlIGludGVycnVwdGVkIG9yXHJcbiAgICogbWFudWFsbHkgc3RvcHBlZC5cclxuICAgKi9cclxuICBwbGF5QW5pbWF0aW9uKGxheWVyTmFtZSwgYW5pbWF0aW9uTmFtZSwgc2Vjb25kcywgZWFzaW5nRm4pIHtcclxuICAgIGNvbnN0IGxheWVyID0gdGhpcy5fbGF5ZXJNYXBbbGF5ZXJOYW1lXTtcclxuXHJcbiAgICBpZiAobGF5ZXIgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBjb25zdCBlID0gYENhbm5vdCBwbGF5IGFuaW1hdGlvbiAke2FuaW1hdGlvbk5hbWV9IG9uIGxheWVyICR7bGF5ZXJOYW1lfSBmb3IgaG9zdCAke3RoaXMuX2hvc3QuaWR9LiBObyBsYXllciBleGlzdHMgd2l0aCB0aGlzIG5hbWUuYDtcclxuICAgICAgcmV0dXJuIERlZmVycmVkLnJlamVjdChlKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBOb3RpZnkgdGhhdCBhIG5ldyBhbmltYXRpb24gaGFzIGJlZ3VuXHJcbiAgICB0aGlzLmVtaXQodGhpcy5jb25zdHJ1Y3Rvci5FVkVOVFMucGxheUFuaW1hdGlvbiwge1xyXG4gICAgICBsYXllck5hbWUsXHJcbiAgICAgIGFuaW1hdGlvbk5hbWUsXHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gbGF5ZXIucGxheUFuaW1hdGlvbihcclxuICAgICAgYW5pbWF0aW9uTmFtZSxcclxuICAgICAgc2Vjb25kcyxcclxuICAgICAgZWFzaW5nRm4sXHJcbiAgICAgICgpID0+IHtcclxuICAgICAgICAvLyBOb3RpZnkgdGhhdCBhbiBhbmltYXRpb24gaGFzIHN0b3BwZWRcclxuICAgICAgICB0aGlzLmVtaXQodGhpcy5jb25zdHJ1Y3Rvci5FVkVOVFMuc3RvcEFuaW1hdGlvbiwge1xyXG4gICAgICAgICAgbGF5ZXJOYW1lLFxyXG4gICAgICAgICAgYW5pbWF0aW9uTmFtZSxcclxuICAgICAgICB9KTtcclxuICAgICAgfSxcclxuICAgICAgdW5kZWZpbmVkLFxyXG4gICAgICAoKSA9PiB7XHJcbiAgICAgICAgLy8gTm90aWZ5IHRoYXQgYW4gYW5pbWF0aW9uIGhhcyBiZWVuIGludGVycnVwdGVkXHJcbiAgICAgICAgdGhpcy5lbWl0KHRoaXMuY29uc3RydWN0b3IuRVZFTlRTLmludGVycnVwdEFuaW1hdGlvbiwge1xyXG4gICAgICAgICAgbGF5ZXJOYW1lLFxyXG4gICAgICAgICAgYW5pbWF0aW9uTmFtZSxcclxuICAgICAgICB9KTtcclxuICAgICAgfSxcclxuICAgICAgKHtuYW1lLCBjYW5BZHZhbmNlLCBpc1F1ZXVlRW5kfSkgPT4ge1xyXG4gICAgICAgIGlmIChsYXllci5jdXJyZW50QW5pbWF0aW9uID09PSBhbmltYXRpb25OYW1lKSB7XHJcbiAgICAgICAgICAvLyBOb3RpZnkgdGhhdCBhIG5ldyBhbmltYXRpb24gaGFzIGJlZ3VuXHJcbiAgICAgICAgICB0aGlzLmVtaXQodGhpcy5jb25zdHJ1Y3Rvci5FVkVOVFMucGxheU5leHRBbmltYXRpb24sIHtcclxuICAgICAgICAgICAgbGF5ZXJOYW1lLFxyXG4gICAgICAgICAgICBhbmltYXRpb25OYW1lLFxyXG4gICAgICAgICAgICBuZXh0UXVldWVkQW5pbWF0aW9uOiBuYW1lLFxyXG4gICAgICAgICAgICBjYW5BZHZhbmNlLFxyXG4gICAgICAgICAgICBpc1F1ZXVlRW5kLFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUGxheSB0aGUgbmV4dCBhbmltYXRpb24gaW4gdGhlIHF1ZXVlIG9mIGEgUXVldWVTdGF0ZSBhbmltYXRpb24uXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGF5ZXJOYW1lIC0gTmFtZSBvZiB0aGUgbGF5ZXIgdGhhdCBjb250YWlucyB0aGUgcXVldWUgYW5pbWF0aW9uLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nPX0gYW5pbWF0aW9uTmFtZSAtIE5hbWUgb2YgdGhlIGFuaW1hdGlvbiBxdWV1ZSBhbmltYXRpb24uIERlZmF1bHRzXHJcbiAgICogdG8gdGhlIG5hbWUgb2YgdGhlIGN1cnJlbnQgYW5pbWF0aW9uIGZvciB0aGUgbGF5ZXIuXHJcbiAgICogQHBhcmFtIHtudW1iZXI9fSBzZWNvbmRzIC0gVGhlIG51bWJlciBvZiBzZWNvbmRzIGl0IHNob3VsZCB0YWtlIHRvIHRyYW5zaXRpb25cclxuICAgKiB0byB0aGUgcXVldWUgYW5pbWF0aW9uIGlmIGl0J3Mgbm90IGFscmVhZHkgY3VycmVudGx5IHBsYXlpbmcuIERlZmF1bHQgaXMgemVyb1xyXG4gICAqIGFuZCB3aWxsIHNldCBpbW1lZGlhdGVseS5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gZWFzaW5nRm4gLSBUaGUgZWFzaW5nIGZ1bmN0aW9uIHRvIHVzZSB3aGlsZSB0cmFuc2l0aW9uaW5nXHJcbiAgICogdG8gdGhlIHF1ZXVlIGFuaW1hdGlvbiBpZiBpdCBpc24ndCBhbHJlYWR5IHBsYXlpbmcuIERlZmF1bHQgaXMgRWFzaW5nLkxpbmVhci5Jbk91dC5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtEZWZlcnJlZH0gLSBSZXNvbHZlcyBvbmNlIHRoZSBsYXN0IGFuaW1hdGlvbiBpbiB0aGUgcXVldWUgZmluaXNoZXNcclxuICAgKiBwbGF5aW5nLlxyXG4gICAqL1xyXG4gIHBsYXlOZXh0QW5pbWF0aW9uKGxheWVyTmFtZSwgYW5pbWF0aW9uTmFtZSwgdHJhbnNpdGlvblRpbWUsIGVhc2luZ0ZuKSB7XHJcbiAgICBjb25zdCBsYXllciA9IHRoaXMuX2xheWVyTWFwW2xheWVyTmFtZV07XHJcblxyXG4gICAgaWYgKGxheWVyID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgY29uc3QgZSA9IGBDYW5ub3QgcGxheSBuZXh0IGFuaW1hdGlvbiBvbiBsYXllciAke2xheWVyTmFtZX0gZm9yIGhvc3QgJHt0aGlzLl9ob3N0LmlkfS4gTm8gbGF5ZXIgZXhpc3RzIHdpdGggdGhpcyBuYW1lLmA7XHJcbiAgICAgIHJldHVybiBEZWZlcnJlZC5yZWplY3QoZSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGFuaW1hdGlvbk5hbWUgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBhbmltYXRpb25OYW1lID0gbGF5ZXIuY3VycmVudEFuaW1hdGlvbjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBhbmltYXRpb24gPSBsYXllci5nZXRTdGF0ZShsYXllci5jdXJyZW50QW5pbWF0aW9uKTtcclxuXHJcbiAgICBpZiAoYW5pbWF0aW9uID09PSBudWxsKSB7XHJcbiAgICAgIGNvbnN0IGUgPSBgQ2Fubm90IHBsYXkgbmV4dCBhbmltYXRpb24gb24gbGF5ZXIgJHtsYXllck5hbWV9IGZvciBob3N0ICR7dGhpcy5faG9zdC5pZH0uIE5vIGFuaW1hdGlvbiBleGlzdHMgd2l0aCBuYW1lICR7YW5pbWF0aW9uTmFtZX0uYDtcclxuICAgICAgcmV0dXJuIERlZmVycmVkLnJlamVjdChlKTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5nZXRBbmltYXRpb25UeXBlKGxheWVyTmFtZSwgYW5pbWF0aW9uTmFtZSkgIT09ICdxdWV1ZScpIHtcclxuICAgICAgY29uc3QgZSA9IGBDYW5ub3QgcGxheSBuZXh0IGFuaW1hdGlvbiBvbiBsYXllciAke2xheWVyTmFtZX0gZm9yIGhvc3QgJHt0aGlzLl9ob3N0LmlkfS4gJHthbmltYXRpb25OYW1lfSBpcyBub3QgYSBxdWV1ZSBzdGF0ZS5gO1xyXG4gICAgICByZXR1cm4gRGVmZXJyZWQucmVqZWN0KGUpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IG9uTmV4dCA9ICh7bmFtZSwgY2FuQWR2YW5jZSwgaXNRdWV1ZUVuZH0pID0+IHtcclxuICAgICAgaWYgKGxheWVyLmN1cnJlbnRBbmltYXRpb24gPT09IGFuaW1hdGlvbk5hbWUpIHtcclxuICAgICAgICAvLyBOb3RpZnkgdGhhdCBhIG5ldyBhbmltYXRpb24gaGFzIGJlZ3VuXHJcbiAgICAgICAgdGhpcy5lbWl0KHRoaXMuY29uc3RydWN0b3IuRVZFTlRTLnBsYXlOZXh0QW5pbWF0aW9uLCB7XHJcbiAgICAgICAgICBsYXllck5hbWUsXHJcbiAgICAgICAgICBhbmltYXRpb25OYW1lLFxyXG4gICAgICAgICAgbmV4dFF1ZXVlZEFuaW1hdGlvbjogbmFtZSxcclxuICAgICAgICAgIGNhbkFkdmFuY2UsXHJcbiAgICAgICAgICBpc1F1ZXVlRW5kLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIC8vIE1ha2UgdGhlIHF1ZXVlIGFuaW1hdGlvbiBjdXJyZW50IGlmIGl0IHdhc24ndCBhbHJlYWR5XHJcbiAgICBpZiAobGF5ZXIuY3VycmVudEFuaW1hdGlvbiA9PT0gbnVsbCkge1xyXG4gICAgICBsYXllci5yZXN1bWVBbmltYXRpb24oXHJcbiAgICAgICAgYW5pbWF0aW9uLm5hbWUsXHJcbiAgICAgICAgdHJhbnNpdGlvblRpbWUsXHJcbiAgICAgICAgZWFzaW5nRm4sXHJcbiAgICAgICAgdW5kZWZpbmVkLFxyXG4gICAgICAgIHVuZGVmaW5lZCxcclxuICAgICAgICB1bmRlZmluZWQsXHJcbiAgICAgICAgb25OZXh0XHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGFuaW1hdGlvbi5uZXh0KG9uTmV4dCwgdHJ1ZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQYXVzZSB0aGUgY3VycmVudCBhbmltYXRpb24gb24gYSBsYXllci5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gTmFtZSBvZiB0aGUgbGF5ZXIgdG8gcGF1c2UuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciBvciBub3QgYW4gYW5pbWF0aW9uIHdhcyBzdWNjZXNzZnVsbHkgcGF1c2VkLlxyXG4gICAqL1xyXG4gIHBhdXNlQW5pbWF0aW9uKG5hbWUpIHtcclxuICAgIGNvbnN0IGxheWVyID0gdGhpcy5fbGF5ZXJNYXBbbmFtZV07XHJcblxyXG4gICAgaWYgKGxheWVyID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgIGBEaWQgbm90IHBhdXNlIGFuaW1hdGlvbiBvbiBsYXllciAke25hbWV9IGZvciBob3N0ICR7dGhpcy5faG9zdC5pZH0uIE5vIGxheWVyIGV4aXN0cyB3aXRoIHRoaXMgbmFtZS5gXHJcbiAgICAgICk7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBwYXVzZWQgPSBsYXllci5wYXVzZUFuaW1hdGlvbigpO1xyXG5cclxuICAgIC8vIE5vdGlmeSB0aGF0IGFuIGFuaW1hdGlvbiB3YXMgcGF1c2VkXHJcbiAgICBpZiAocGF1c2VkKSB7XHJcbiAgICAgIGNvbnN0IGFuaW1hdGlvbk5hbWUgPSBsYXllci5jdXJyZW50QW5pbWF0aW9uO1xyXG4gICAgICB0aGlzLmVtaXQodGhpcy5jb25zdHJ1Y3Rvci5FVkVOVFMucGF1c2VBbmltYXRpb24sIHtcclxuICAgICAgICBsYXllck5hbWU6IG5hbWUsXHJcbiAgICAgICAgYW5pbWF0aW9uTmFtZSxcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHBhdXNlZDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFBhdXNlIHRoZSBjdXJyZW50bHkgcGxheWluZyBhbmltYXRpb24gYW5kIHBsYXkgYSBuZXcgYW5pbWF0aW9uIGZyb20gd2hlcmUgaXRcclxuICAgKiBsYXN0IGxlZnQgb2ZmLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVyTmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRoYXQgY29udGFpbnMgdGhlIGFuaW1hdGlvbi5cclxuICAgKiBAcGFyYW0ge3N0cmluZz19IGFuaW1hdGlvbk5hbWUgLSBOYW1lIG9mIHRoZSBhbmltYXRpb24gc3RhdGUgdG8gcmVzdW1lLiBEZWZhdWx0c1xyXG4gICAqIHRvIHRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IGFuaW1hdGlvbiBmb3IgdGhlIGxheWVyLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyPX0gc2Vjb25kcyAtIFRoZSBudW1iZXIgb2Ygc2Vjb25kcyBpdCBzaG91bGQgdGFrZSB0byB0cmFuc2l0aW9uXHJcbiAgICogdG8gdGhlIG5ldyBhbmltYXRpb24uIERlZmF1bHQgaXMgemVybyBhbmQgd2lsbCBzZXQgaW1tZWRpYXRlbHkuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IGVhc2luZ0ZuIC0gVGhlIGVhc2luZyBmdW5jdGlvbiB0byB1c2Ugd2hpbGUgdHJhbnNpdGlvbmluZ1xyXG4gICAqIGJldHdlZW4gYW5pbWF0aW9ucy4gRGVmYXVsdCBpcyBFYXNpbmcuTGluZWFyLkluT3V0LlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0RlZmVycmVkfSAtIFJlc29sdmVzIG9uY2UgdGhlIGFuaW1hdGlvbiByZWFjaGVzIHRoZSBlbmQgb2YgaXRzXHJcbiAgICogdGltZWxpbmUuIExvb3BpbmcgYW5pbWF0aW9ucyBjYW4gb25seSByZXNvbHZlIGlmIHRoZXkgYXJlIGludGVycnVwdGVkIG9yXHJcbiAgICogbWFudWFsbHkgc3RvcHBlZC5cclxuICAgKi9cclxuICByZXN1bWVBbmltYXRpb24obGF5ZXJOYW1lLCBhbmltYXRpb25OYW1lLCBzZWNvbmRzLCBlYXNpbmdGbikge1xyXG4gICAgY29uc3QgbGF5ZXIgPSB0aGlzLl9sYXllck1hcFtsYXllck5hbWVdO1xyXG5cclxuICAgIGlmIChsYXllciA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGNvbnN0IGUgPSBgQ2Fubm90IHJlc3VtZSBhbmltYXRpb24gJHthbmltYXRpb25OYW1lfSBvbiBsYXllciAke2xheWVyTmFtZX0gZm9yIGhvc3QgJHt0aGlzLl9ob3N0LmlkfS4gTm8gbGF5ZXIgZXhpc3RzIHdpdGggdGhpcyBuYW1lLmA7XHJcbiAgICAgIHJldHVybiBEZWZlcnJlZC5yZWplY3QoZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gTm90aWZ5IHRoYXQgYW4gYW5pbWF0aW9uIHdhcyByZXN1bWVkXHJcbiAgICB0aGlzLmVtaXQodGhpcy5jb25zdHJ1Y3Rvci5FVkVOVFMucmVzdW1lQW5pbWF0aW9uLCB7XHJcbiAgICAgIGxheWVyTmFtZSxcclxuICAgICAgYW5pbWF0aW9uTmFtZSxcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBsYXllci5yZXN1bWVBbmltYXRpb24oXHJcbiAgICAgIGFuaW1hdGlvbk5hbWUsXHJcbiAgICAgIHNlY29uZHMsXHJcbiAgICAgIGVhc2luZ0ZuLFxyXG4gICAgICAoKSA9PiB7XHJcbiAgICAgICAgLy8gTm90aWZ5IHRoYXQgYW4gYW5pbWF0aW9uIGhhcyBzdG9wcGVkXHJcbiAgICAgICAgdGhpcy5lbWl0KHRoaXMuY29uc3RydWN0b3IuRVZFTlRTLnN0b3BBbmltYXRpb24sIHtcclxuICAgICAgICAgIGxheWVyTmFtZSxcclxuICAgICAgICAgIGFuaW1hdGlvbk5hbWUsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0sXHJcbiAgICAgIHVuZGVmaW5lZCxcclxuICAgICAgKCkgPT4ge1xyXG4gICAgICAgIC8vIE5vdGlmeSB0aGF0IGFuIGFuaW1hdGlvbiBoYXMgYmVlbiBpbnRlcnJ1cHRlZFxyXG4gICAgICAgIHRoaXMuZW1pdCh0aGlzLmNvbnN0cnVjdG9yLkVWRU5UUy5pbnRlcnJ1cHRBbmltYXRpb24sIHtcclxuICAgICAgICAgIGxheWVyTmFtZSxcclxuICAgICAgICAgIGFuaW1hdGlvbk5hbWUsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0sXHJcbiAgICAgICh7bmFtZSwgY2FuQWR2YW5jZSwgaXNRdWV1ZUVuZH0pID0+IHtcclxuICAgICAgICBpZiAobGF5ZXIuY3VycmVudEFuaW1hdGlvbiA9PT0gYW5pbWF0aW9uTmFtZSkge1xyXG4gICAgICAgICAgLy8gTm90aWZ5IHRoYXQgYSBuZXcgYW5pbWF0aW9uIGhhcyBiZWd1blxyXG4gICAgICAgICAgdGhpcy5lbWl0KHRoaXMuY29uc3RydWN0b3IuRVZFTlRTLnBsYXlOZXh0QW5pbWF0aW9uLCB7XHJcbiAgICAgICAgICAgIGxheWVyTmFtZSxcclxuICAgICAgICAgICAgYW5pbWF0aW9uTmFtZSxcclxuICAgICAgICAgICAgbmV4dFF1ZXVlZEFuaW1hdGlvbjogbmFtZSxcclxuICAgICAgICAgICAgY2FuQWR2YW5jZSxcclxuICAgICAgICAgICAgaXNRdWV1ZUVuZCxcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFN0b3AgdGhlIGN1cnJlbnQgYW5pbWF0aW9uIG9uIGEgbGF5ZXIuIFN0b3AgcmV3aW5kcyB0aGUgYW5pbWF0aW9uIHRvIHRoZVxyXG4gICAqIGJlZ2lubmluZyBhbmQgcHJldmVudHMgaXQgZnJvbSBwcm9ncmVzc2luZyBmb3J3YXJkLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBOYW1lIG9mIHRoZSBsYXllciB0aGF0IGNvbnRhaW5zIHRoZSBhbmltYXRpb24uXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciBvciBub3QgYW4gYW5pbWF0aW9uIHdhcyBzdWNjZXNzZnVsbHkgc3RvcHBlZC5cclxuICAgKi9cclxuICBzdG9wQW5pbWF0aW9uKG5hbWUpIHtcclxuICAgIGNvbnN0IGxheWVyID0gdGhpcy5fbGF5ZXJNYXBbbmFtZV07XHJcblxyXG4gICAgaWYgKGxheWVyID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgIGBEaWQgbm90IHN0b3AgYW5pbWF0aW9uIG9uIGxheWVyICR7bmFtZX0gZm9yIGhvc3QgJHt0aGlzLl9ob3N0LmlkfS4gTm8gbGF5ZXIgZXhpc3RzIHdpdGggdGhpcyBuYW1lLmBcclxuICAgICAgKTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBsYXllci5zdG9wQW5pbWF0aW9uKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQYXVzZSBjdXJyZW50IGFuaW1hdGlvbiBhbmQgd2VpZ2h0IGludGVycG9sYXRpb24gYW5pbWF0aW9uIG9uIGFsbCBsYXllcnMuXHJcblxyXG4gICAqIEByZXR1cm5zIHtib29sZWFufSAtIFdoZXRoZXIgb3Igbm90IHRoZXJlIHdhcyBhbiBleGlzdGluZyBpbnRlcnBvbGF0aW9uIG9yXHJcbiAgICogY3VycmVudCBhbmltYXRpb25zIHRvIHBhdXNlLlxyXG4gICAqL1xyXG4gIHBhdXNlKCkge1xyXG4gICAgdGhpcy5fcGF1c2VkID0gdHJ1ZTtcclxuXHJcbiAgICBsZXQgcGF1c2VkID0gZmFsc2U7XHJcbiAgICB0aGlzLl9sYXllcnMuZm9yRWFjaChsID0+IHtcclxuICAgICAgaWYgKGwucGF1c2UoKSkge1xyXG4gICAgICAgIHBhdXNlZCA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBwYXVzZWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXN1bWUgY3VycmVudCBhbmltYXRpb24gYW5kIHdlaWdodCBpbnRlcnBvbGF0aW9uIGFuaW1hdGlvbiBvbiBhbGwgbGF5ZXJzLlxyXG5cclxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSBXaGV0aGVyIG9yIG5vdCB0aGVyZSB3YXMgYW4gZXhpc3RpbmcgaW50ZXJwb2xhdGlvbiBvclxyXG4gICAqIGN1cnJlbnQgYW5pbWF0aW9ucyB0byByZXN1bWUuXHJcbiAgICovXHJcbiAgcmVzdW1lKCkge1xyXG4gICAgdGhpcy5fcGF1c2VkID0gZmFsc2U7XHJcblxyXG4gICAgbGV0IHJlc3VtZWQgPSBmYWxzZTtcclxuICAgIHRoaXMuX2xheWVycy5mb3JFYWNoKGwgPT4ge1xyXG4gICAgICBpZiAobC5yZXN1bWUoKSkge1xyXG4gICAgICAgIHJlc3VtZWQgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gcmVzdW1lZDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFkZHMgYSBuYW1lc3BhY2UgdG8gdGhlIGhvc3Qgd2l0aCB0aGUgbmFtZSBvZiB0aGUgZmVhdHVyZSB0byBjb250YWluIHByb3BlcnRpZXNcclxuICAgKiBhbmQgbWV0aG9kcyBmcm9tIHRoZSBmZWF0dXJlIHRoYXQgdXNlcnMgb2YgdGhlIGhvc3QgbmVlZCBhY2Nlc3MgdG8uXHJcbiAgICpcclxuICAgKiBAc2VlIEFuaW1hdGlvbkZlYXR1cmVcclxuICAgKi9cclxuICBpbnN0YWxsQXBpKCkge1xyXG4gICAgLyoqXHJcbiAgICAgKiBAaW5uZXJcclxuICAgICAqIEBuYW1lc3BhY2UgQW5pbWF0aW9uRmVhdHVyZVxyXG4gICAgICovXHJcbiAgICBjb25zdCBhcGkgPSBzdXBlci5pbnN0YWxsQXBpKCk7XHJcblxyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoYXBpLCB7XHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbWVtYmVyb2YgQW5pbWF0aW9uRmVhdHVyZVxyXG4gICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICogQHNlZSBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjcGF1c2VkXHJcbiAgICAgICAqL1xyXG4gICAgICBwYXVzZWQ6IHtcclxuICAgICAgICBnZXQ6ICgpID0+IHRoaXMucGF1c2VkLFxyXG4gICAgICB9LFxyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIEFuaW1hdGlvbkZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBzZWUgY29yZS9BbmltYXRpb25GZWF0dXJlI2xheWVyc1xyXG4gICAgICAgKi9cclxuICAgICAgbGF5ZXJzOiB7XHJcbiAgICAgICAgZ2V0OiAoKSA9PiB0aGlzLmxheWVycyxcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG5cclxuICAgIE9iamVjdC5hc3NpZ24oYXBpLCB7XHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbWVtYmVyb2YgQW5pbWF0aW9uRmVhdHVyZVxyXG4gICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICogQG1ldGhvZFxyXG4gICAgICAgKiBAc2VlIGNvcmUvQW5pbWF0aW9uRmVhdHVyZSNhZGRMYXllclxyXG4gICAgICAgKi9cclxuICAgICAgYWRkTGF5ZXI6IHRoaXMuYWRkTGF5ZXIuYmluZCh0aGlzKSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBtZW1iZXJvZiBBbmltYXRpb25GZWF0dXJlXHJcbiAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgKiBAbWV0aG9kXHJcbiAgICAgICAqIEBzZWUgY29yZS9BbmltYXRpb25GZWF0dXJlI3JlbW92ZUxheWVyXHJcbiAgICAgICAqL1xyXG4gICAgICByZW1vdmVMYXllcjogdGhpcy5yZW1vdmVMYXllci5iaW5kKHRoaXMpLFxyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIEFuaW1hdGlvbkZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBtZXRob2RcclxuICAgICAgICogQHNlZSBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjbW92ZUxheWVyXHJcbiAgICAgICAqL1xyXG4gICAgICBtb3ZlTGF5ZXI6IHRoaXMubW92ZUxheWVyLmJpbmQodGhpcyksXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbWVtYmVyb2YgQW5pbWF0aW9uRmVhdHVyZVxyXG4gICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICogQG1ldGhvZFxyXG4gICAgICAgKiBAc2VlIGNvcmUvQW5pbWF0aW9uRmVhdHVyZSNyZW5hbWVMYXllclxyXG4gICAgICAgKi9cclxuICAgICAgcmVuYW1lTGF5ZXI6IHRoaXMucmVuYW1lTGF5ZXIuYmluZCh0aGlzKSxcclxuXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbWVtYmVyb2YgQW5pbWF0aW9uRmVhdHVyZVxyXG4gICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICogQG1ldGhvZFxyXG4gICAgICAgKiBAc2VlIGNvcmUvQW5pbWF0aW9uRmVhdHVyZSNnZXRMYXllcldlaWdodFxyXG4gICAgICAgKi9cclxuICAgICAgZ2V0TGF5ZXJXZWlnaHQ6IHRoaXMuZ2V0TGF5ZXJXZWlnaHQuYmluZCh0aGlzKSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBtZW1iZXJvZiBBbmltYXRpb25GZWF0dXJlXHJcbiAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgKiBAbWV0aG9kXHJcbiAgICAgICAqIEBzZWUgY29yZS9BbmltYXRpb25GZWF0dXJlI3NldExheWVyV2VpZ2h0XHJcbiAgICAgICAqL1xyXG4gICAgICBzZXRMYXllcldlaWdodDogdGhpcy5zZXRMYXllcldlaWdodC5iaW5kKHRoaXMpLFxyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIEFuaW1hdGlvbkZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBtZXRob2RcclxuICAgICAgICogQHNlZSBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjcGF1c2VMYXllcldlaWdodFxyXG4gICAgICAgKi9cclxuICAgICAgcGF1c2VMYXllcldlaWdodDogdGhpcy5wYXVzZUxheWVyV2VpZ2h0LmJpbmQodGhpcyksXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbWVtYmVyb2YgQW5pbWF0aW9uRmVhdHVyZVxyXG4gICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICogQG1ldGhvZFxyXG4gICAgICAgKiBAc2VlIGNvcmUvQW5pbWF0aW9uRmVhdHVyZSNyZXN1bWVMYXllcldlaWdodFxyXG4gICAgICAgKi9cclxuICAgICAgcmVzdW1lTGF5ZXJXZWlnaHQ6IHRoaXMucmVzdW1lTGF5ZXJXZWlnaHQuYmluZCh0aGlzKSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBtZW1iZXJvZiBBbmltYXRpb25GZWF0dXJlXHJcbiAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgKiBAbWV0aG9kXHJcbiAgICAgICAqIEBzZWUgY29yZS9BbmltYXRpb25GZWF0dXJlI3BhdXNlTGF5ZXJcclxuICAgICAgICovXHJcbiAgICAgIHBhdXNlTGF5ZXI6IHRoaXMucGF1c2VMYXllci5iaW5kKHRoaXMpLFxyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIEFuaW1hdGlvbkZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBtZXRob2RcclxuICAgICAgICogQHNlZSBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjcmVzdW1lTGF5ZXJcclxuICAgICAgICovXHJcbiAgICAgIHJlc3VtZUxheWVyOiB0aGlzLnJlc3VtZUxheWVyLmJpbmQodGhpcyksXHJcblxyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIEFuaW1hdGlvbkZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBtZXRob2RcclxuICAgICAgICogQHNlZSBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjZ2V0VHJhbnNpdGlvbmluZ1xyXG4gICAgICAgKi9cclxuICAgICAgZ2V0VHJhbnNpdGlvbmluZzogdGhpcy5nZXRUcmFuc2l0aW9uaW5nLmJpbmQodGhpcyksXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbWVtYmVyb2YgQW5pbWF0aW9uRmVhdHVyZVxyXG4gICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICogQG1ldGhvZFxyXG4gICAgICAgKiBAc2VlIGNvcmUvQW5pbWF0aW9uRmVhdHVyZSNnZXRBbmltYXRpb25zXHJcbiAgICAgICAqL1xyXG4gICAgICBnZXRBbmltYXRpb25zOiB0aGlzLmdldEFuaW1hdGlvbnMuYmluZCh0aGlzKSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBtZW1iZXJvZiBBbmltYXRpb25GZWF0dXJlXHJcbiAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgKiBAbWV0aG9kXHJcbiAgICAgICAqIEBzZWUgY29yZS9BbmltYXRpb25GZWF0dXJlI2dldEN1cnJlbnRBbmltYXRpb25cclxuICAgICAgICovXHJcbiAgICAgIGdldEN1cnJlbnRBbmltYXRpb246IHRoaXMuZ2V0Q3VycmVudEFuaW1hdGlvbi5iaW5kKHRoaXMpLFxyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIEFuaW1hdGlvbkZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBtZXRob2RcclxuICAgICAgICogQHNlZSBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjZ2V0UGF1c2VkXHJcbiAgICAgICAqL1xyXG4gICAgICBnZXRQYXVzZWQ6IHRoaXMuZ2V0UGF1c2VkLmJpbmQodGhpcyksXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbWVtYmVyb2YgQW5pbWF0aW9uRmVhdHVyZVxyXG4gICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICogQG1ldGhvZFxyXG4gICAgICAgKiBAc2VlIGNvcmUvQW5pbWF0aW9uRmVhdHVyZSNnZXRBbmltYXRpb25UeXBlXHJcbiAgICAgICAqL1xyXG4gICAgICBnZXRBbmltYXRpb25UeXBlOiB0aGlzLmdldEFuaW1hdGlvblR5cGUuYmluZCh0aGlzKSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBtZW1iZXJvZiBBbmltYXRpb25GZWF0dXJlXHJcbiAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgKiBAbWV0aG9kXHJcbiAgICAgICAqIEBzZWUgY29yZS9BbmltYXRpb25GZWF0dXJlI2FkZEFuaW1hdGlvblxyXG4gICAgICAgKi9cclxuICAgICAgYWRkQW5pbWF0aW9uOiB0aGlzLmFkZEFuaW1hdGlvbi5iaW5kKHRoaXMpLFxyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIEFuaW1hdGlvbkZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBtZXRob2RcclxuICAgICAgICogQHNlZSBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjcmVtb3ZlQW5pbWF0aW9uXHJcbiAgICAgICAqL1xyXG4gICAgICByZW1vdmVBbmltYXRpb246IHRoaXMucmVtb3ZlQW5pbWF0aW9uLmJpbmQodGhpcyksXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbWVtYmVyb2YgQW5pbWF0aW9uRmVhdHVyZVxyXG4gICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICogQG1ldGhvZFxyXG4gICAgICAgKiBAc2VlIGNvcmUvQW5pbWF0aW9uRmVhdHVyZSNyZW5hbWVBbmltYXRpb25cclxuICAgICAgICovXHJcbiAgICAgIHJlbmFtZUFuaW1hdGlvbjogdGhpcy5yZW5hbWVBbmltYXRpb24uYmluZCh0aGlzKSxcclxuXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbWVtYmVyb2YgQW5pbWF0aW9uRmVhdHVyZVxyXG4gICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICogQG1ldGhvZFxyXG4gICAgICAgKiBAc2VlIGNvcmUvQW5pbWF0aW9uRmVhdHVyZSNnZXRBbmltYXRpb25CbGVuZE5hbWVzXHJcbiAgICAgICAqL1xyXG4gICAgICBnZXRBbmltYXRpb25CbGVuZE5hbWVzOiB0aGlzLmdldEFuaW1hdGlvbkJsZW5kTmFtZXMuYmluZCh0aGlzKSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBtZW1iZXJvZiBBbmltYXRpb25GZWF0dXJlXHJcbiAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgKiBAbWV0aG9kXHJcbiAgICAgICAqIEBzZWUgY29yZS9BbmltYXRpb25GZWF0dXJlI2dldEFuaW1hdGlvbkJsZW5kV2VpZ2h0XHJcbiAgICAgICAqL1xyXG4gICAgICBnZXRBbmltYXRpb25CbGVuZFdlaWdodDogdGhpcy5nZXRBbmltYXRpb25CbGVuZFdlaWdodC5iaW5kKHRoaXMpLFxyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIEFuaW1hdGlvbkZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBtZXRob2RcclxuICAgICAgICogQHNlZSBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjc2V0QW5pbWF0aW9uQmxlbmRXZWlnaHRcclxuICAgICAgICovXHJcbiAgICAgIHNldEFuaW1hdGlvbkJsZW5kV2VpZ2h0OiB0aGlzLnNldEFuaW1hdGlvbkJsZW5kV2VpZ2h0LmJpbmQodGhpcyksXHJcblxyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIEFuaW1hdGlvbkZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBtZXRob2RcclxuICAgICAgICogQHNlZSBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjcGxheUFuaW1hdGlvblxyXG4gICAgICAgKi9cclxuICAgICAgcGxheUFuaW1hdGlvbjogdGhpcy5wbGF5QW5pbWF0aW9uLmJpbmQodGhpcyksXHJcblxyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIEFuaW1hdGlvbkZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBtZXRob2RcclxuICAgICAgICogQHNlZSBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjcGxheU5leHRBbmltYXRpb25cclxuICAgICAgICovXHJcbiAgICAgIHBsYXlOZXh0QW5pbWF0aW9uOiB0aGlzLnBsYXlOZXh0QW5pbWF0aW9uLmJpbmQodGhpcyksXHJcblxyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIEFuaW1hdGlvbkZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBtZXRob2RcclxuICAgICAgICogQHNlZSBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjcGF1c2VBbmltYXRpb25cclxuICAgICAgICovXHJcbiAgICAgIHBhdXNlQW5pbWF0aW9uOiB0aGlzLnBhdXNlQW5pbWF0aW9uLmJpbmQodGhpcyksXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbWVtYmVyb2YgQW5pbWF0aW9uRmVhdHVyZVxyXG4gICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICogQG1ldGhvZFxyXG4gICAgICAgKiBAc2VlIGNvcmUvQW5pbWF0aW9uRmVhdHVyZSNyZXN1bWVBbmltYXRpb25cclxuICAgICAgICovXHJcbiAgICAgIHJlc3VtZUFuaW1hdGlvbjogdGhpcy5yZXN1bWVBbmltYXRpb24uYmluZCh0aGlzKSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBtZW1iZXJvZiBBbmltYXRpb25GZWF0dXJlXHJcbiAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgKiBAbWV0aG9kXHJcbiAgICAgICAqIEBzZWUgY29yZS9BbmltYXRpb25GZWF0dXJlI3N0b3BBbmltYXRpb25cclxuICAgICAgICovXHJcbiAgICAgIHN0b3BBbmltYXRpb246IHRoaXMuc3RvcEFuaW1hdGlvbi5iaW5kKHRoaXMpLFxyXG5cclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBtZW1iZXJvZiBBbmltYXRpb25GZWF0dXJlXHJcbiAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgKiBAbWV0aG9kXHJcbiAgICAgICAqIEBzZWUgY29yZS9BbmltYXRpb25GZWF0dXJlI3BhdXNlXHJcbiAgICAgICAqL1xyXG4gICAgICBwYXVzZTogdGhpcy5wYXVzZS5iaW5kKHRoaXMpLFxyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIEFuaW1hdGlvbkZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBtZXRob2RcclxuICAgICAgICogQHNlZSBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjcmVzdW1lXHJcbiAgICAgICAqL1xyXG4gICAgICByZXN1bWU6IHRoaXMucmVzdW1lLmJpbmQodGhpcyksXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZSBlYWNoIGFuaW1hdGlvbiBsYXllci5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBkZWx0YVRpbWUgLSBUaW1lIHNpbmNlIHRoZSBsYXN0IHVwZGF0ZS5cclxuICAgKi9cclxuICB1cGRhdGUoZGVsdGFUaW1lKSB7XHJcbiAgICBpZiAoIXRoaXMuX2xheWVycy5sZW5ndGgpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLl9wYXVzZWQpIHtcclxuICAgICAgZGVsdGFUaW1lID0gMDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBSZS1ldmFsdWF0ZSBpbnRlcm5hbCB3ZWlnaHRzIGZvciBsYXllcnNcclxuICAgIHRoaXMuX3VwZGF0ZUludGVybmFsV2VpZ2h0cygpO1xyXG5cclxuICAgIC8vIFVwZGF0ZSBsYXllcnNcclxuICAgIHRoaXMuX2xheWVycy5mb3JFYWNoKGxheWVyID0+IHtcclxuICAgICAgbGF5ZXIudXBkYXRlKGRlbHRhVGltZSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBzdXBlci51cGRhdGUoZGVsdGFUaW1lKTtcclxuICB9XHJcblxyXG4gIGRpc2NhcmQoKSB7XHJcbiAgICB0aGlzLl9sYXllcnMuZm9yRWFjaChsYXllciA9PiB7XHJcbiAgICAgIGxheWVyLmRpc2NhcmQoKTtcclxuICAgIH0pO1xyXG5cclxuICAgIGRlbGV0ZSB0aGlzLl9sYXllcnM7XHJcbiAgICBkZWxldGUgdGhpcy5fbGF5ZXJNYXA7XHJcblxyXG4gICAgc3VwZXIuZGlzY2FyZCgpO1xyXG4gIH1cclxufVxyXG5cclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEFuaW1hdGlvbkZlYXR1cmUsICdFVkVOVFMnLCB7XHJcbiAgdmFsdWU6IHtcclxuICAgIC4uLk9iamVjdC5nZXRQcm90b3R5cGVPZihBYnN0cmFjdEhvc3RGZWF0dXJlKS5FVkVOVFMsXHJcbiAgICBhZGRMYXllcjogJ29uQWRkTGF5ZXJFdmVudCcsXHJcbiAgICByZW1vdmVMYXllcjogJ29uUmVtb3ZlTGF5ZXJFdmVudCcsXHJcbiAgICByZW5hbWVMYXllcjogJ29uUmVuYW1lTGF5ZXJFdmVudCcsXHJcbiAgICBhZGRBbmltYXRpb246ICdvbkFkZEFuaW1hdGlvbkV2ZW50JyxcclxuICAgIHJlbW92ZUFuaW1hdGlvbjogJ29uUmVtb3ZlZEFuaW1hdGlvbkV2ZW50JyxcclxuICAgIHJlbmFtZUFuaW1hdGlvbjogJ29uUmVuYW1lQW5pbWF0aW9uRXZlbnQnLFxyXG4gICAgcGxheUFuaW1hdGlvbjogJ29uUGxheUV2ZW50JyxcclxuICAgIHBsYXlOZXh0QW5pbWF0aW9uOiAnb25OZXh0RXZlbnQnLFxyXG4gICAgcGF1c2VBbmltYXRpb246ICdvblBhdXNlRXZlbnQnLFxyXG4gICAgcmVzdW1lQW5pbWF0aW9uOiAnb25SZXN1bWVFdmVudCcsXHJcbiAgICBpbnRlcnJ1cHRBbmltYXRpb246ICdvbkludGVycnVwdEV2ZW50JyxcclxuICAgIHN0b3BBbmltYXRpb246ICdvblN0b3BFdmVudCcsXHJcbiAgfSxcclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBBbmltYXRpb25GZWF0dXJlO1xyXG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxuLyogZXNsaW50LWRpc2FibGUgbm8tdW5kZXJzY29yZS1kYW5nbGUgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXG5pbXBvcnQgTWFuYWdlZEFuaW1hdGlvbkxheWVySW50ZXJmYWNlIGZyb20gJy4vYW5pbXBhY2svTWFuYWdlZEFuaW1hdGlvbkxheWVySW50ZXJmYWNlJztcbmltcG9ydCB7IEFuaW1hdGlvblR5cGVzIH0gZnJvbSAnLi9hbmltcGFjay9BbmltYXRpb25GZWF0dXJlJztcbmltcG9ydCBTU01MU3BlZWNobWFya0ludGVyZmFjZSBmcm9tICcuL2F3c3BhY2svU1NNTFNwZWVjaG1hcmtJbnRlcmZhY2UnO1xuaW1wb3J0IEFic3RyYWN0SG9zdEZlYXR1cmUgZnJvbSAnLi9BYnN0cmFjdEhvc3RGZWF0dXJlJztcbmltcG9ydCB7IFF1YWRyYXRpYyB9IGZyb20gJy4vYW5pbXBhY2svRWFzaW5nJztcbmltcG9ydCBNYXRoVXRpbHMgZnJvbSAnLi9NYXRoVXRpbHMnO1xuaW1wb3J0IFV0aWxzIGZyb20gJy4vVXRpbHMnO1xuXG4vKipcbiAqIEVudW0gZm9yIGF4aXMgZGlyZWN0aW9ucy5cbiAqXG4gKiBAcmVhZG9ubHlcbiAqIEBlbnVtIHtDbGFzc31cbiAqL1xuY29uc3QgQXhpc01hcCA9IHtcbiAgUG9zaXRpdmVYOiBbMSwgMCwgMF0sXG4gIE5lZ2F0aXZlWDogWy0xLCAwLCAwXSxcbiAgUG9zaXRpdmVZOiBbMCwgMSwgMF0sXG4gIE5lZ2F0aXZlWTogWzAsIC0xLCAwXSxcbiAgUG9zaXRpdmVaOiBbMCwgMCwgMV0sXG4gIE5lZ2F0aXZlWjogWzAsIDAsIC0xXSxcbn07XG5cbmNvbnN0IEZhY2VUYXJnZXRUeXBlcyA9IHtcbiAgRXllQ2VudGVyOiAwLFxuICBFeWVMZWZ0OiAxLFxuICBFeWVSaWdodDogMixcbiAgTW91dGg6IDMsXG59XG5cbi8vIEF2ZXJhZ2UgZGlzdGFuY2UgYmV0d2VlbiBwdXBpbHMgaXMgLjA2NG0sIGdvbGRlbiByYXRpbyBzYXlzIHRoYXQgdGhlIGRpc3RhbmNlXG4vLyBmcm9tIGNlbnRlciBvZiB0aGUgcHVwaWxzIHRvIHRoZSBjZW50ZXIgb2YgdGhlIG1vdXRoIHNob3VsZCBiZSBhYm91dCB0aGUgc2FtZS5cbmNvbnN0IEZhY2VWZWN0b3JzID0gW1xuICBbMCwgMCwgMF0sXG4gIFstLjAzMiwgMCwgMF0sXG4gIFsuMDMyLCAwLCAwXSxcbiAgWzAsIC0uMDY0LCAwXVxuXTtcblxuLy8gVGltZSByYW5nZXMgdG8gdXNlIHdoZW4gY2hvb3NpbmcgYSBuZXcgcmFuZG9tIHdhaXQgdGltZSBiZXR3ZWVuIHNhY2NhZGVzXG5jb25zdCBNaWNyb1NhY2NhZGVXYWl0UmFuZ2VzID0ge1xuICBkZWZhdWx0OiBbMC44LCAxLjc1XSxcbiAgcG9zdE1hY3JvOiBbMC42LCAxLjMxMjVdLFxufTtcblxuY29uc3QgTWFjcm9TYWNjYWRlV2FpdFJhbmdlcyA9IHtcbiAgZGVmYXVsdDogWzUuMCwgOC4wXSxcbiAgbW91dGhUYXJnZXQ6IFswLjIsIDAuNzVdLCAvLyBMb29rIGF3YXkgZnJvbSBhIG1vdXRoIHRhcmdldCB0aGUgZmFzdGVzdFxuICBleWVUYXJnZXQ6IFsxLjUsIDQuMF1cbn07XG5cbi8vIE1pbmltdW0gYW5nbGUgaW4gZGVncmVlcyB0aGUgZXllIGRpcmVjdGlvbiBtdXN0IGNoYW5nZSB0byB0cmlnZ2VyIGEgYmxpbmsgYW5pbWF0aW9uXG5jb25zdCBCbGlua1RocmVzaG9sZCA9IDM1O1xuXG4vLyBNYXhpbXVtIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gdXNlIGZvciBjYWxjdWxhdGluZyBsb29rIHNwZWVkXG5jb25zdCBNYXhEZWx0YSA9IDEwMCAvIDM7XG5cbi8qKlxuICogUG9pbnRPZkludGVyZXN0IGNvbnRyb2xzIHRoZSBnYXplIGRpcmVjdGlvbiBvZiB0aGUgaG9zdC4gR2l2ZW4gb25lIG9yIG1vcmVcbiAqIGFuaW1hdGlvbnMgb2YgdHlwZSBCbGVuZDJkU3RhdGUsIGl0IGNhbGN1bGF0ZXMgdGhlIGFuZ2xlcyBiZXR3ZWVuIHRoZSBsb29rVHJhY2tlclxuICogb2JqZWN0IChnZW5lcmFsbHkgYSBqb2ludCBpbiB0aGUgaG9zdCdzIHNrZWxldG9uKSBhbmQgdGhlIGxvb2tUYXJnZXQgKHRoZSBvYmplY3RcbiAqIHRoZSBob3N0IHNob3VsZCBsb29rIGF0KSBhbmQgZHJpdmVzIHRoZSBtYW5hZ2VkIEJsZW5kMmRTdGF0ZXMnIFggYW5kIFkgYmxlbmRcbiAqIHZhbHVlcyB1c2luZyB0aGUgcmVzdWx0LiBZb3UgY2FuIG9wdGlvbmFsbHkgYWRkIHNhY2NhZGljIG1vdmVtZW50IHRvIGFueSBtYW5hZ2VkXG4gKiBhbmltYXRpb24gdG8gaGVscCBtYWtlIHRoZSBob3N0J3MgZXllcyBhcHBlYXIgYWxpdmUgd2hlbiBmb2N1c2VkIG9uIHRoZSBzYW1lXG4gKiBwb2ludCBmb3IgZXh0ZWRlZCBwZXJpb2RzIG9mIHRpbWUuIElmIGJsaW5rIGFuaW1hdGlvbnMgYXJlIHNwZWNpZmllZCwgYSBibGlua1xuICogd2lsbCBiZSBwbGF5ZWQgZHVyaW5nIGxhcmdlIGNoYW5nZXMgaW4gZ2F6ZSBkaXJlY3Rpb24uXG4gKlxuICogQGV4dGVuZHMgQWJzdHJhY3RIb3N0RmVhdHVyZVxuICogQGFsaWFzIGNvcmUvUG9pbnRPZkludGVyZXN0RmVhdHVyZVxuICogQGltcGxlbWVudHMgU1NNTFNwZWVjaG1hcmtJbnRlcmZhY2VcbiAqIEBpbXBsZW1lbnRzIE1hbmFnZWRBbmltYXRpb25MYXllckludGVyZmFjZVxuICovXG5jbGFzcyBQb2ludE9mSW50ZXJlc3RGZWF0dXJlIGV4dGVuZHMgQWJzdHJhY3RIb3N0RmVhdHVyZS5taXgoXG4gIFNTTUxTcGVlY2htYXJrSW50ZXJmYWNlLk1peGluLFxuICBNYW5hZ2VkQW5pbWF0aW9uTGF5ZXJJbnRlcmZhY2UuTWl4aW5cbikge1xuICAvKipcbiAgICogQGNvbnN0cnVjdG9yXG4gICAqXG4gICAqIEBwYXJhbSB7Y29yZS9Ib3N0T2JqZWN0fSBob3N0IC0gSG9zdCB0aGF0IG93bnMgdGhlIGZlYXR1cmUuXG4gICAqIEBwYXJhbSB7T2JqZWN0PX0gb3B0aW9ucyAtIE9wdGlvbnMgZm9yIHRoZSBmZWF0dXJlLlxuICAgKiBAcGFyYW0ge09iamVjdD19IHRhcmdldCAtIDNEIHRyYW5zZm9ybWF0aW9uIG5vZGUgdGhhdCB0aGUgaG9zdCBzaG91bGQgdHJ5IHRvXG4gICAqIGxvb2sgYXQuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zLmxvb2tUcmFja2VyIC0gM0QgdHJhbnNmb3JtYXRpb24gbm9kZSB0aGF0IHJlcHJlc2VudHNcbiAgICogdGhlIGRpcmVjdGlvbiB0aGUgaG9zdCBpcyBjdXJyZW50bHkgbG9va2luZyBkdXJpbmcgYW5pbWF0aW9uLlxuICAgKiBAcGFyYW0ge09iamVjdD19IG9wdGlvbnMuc2NlbmUgLSBFbmdpbmUtc3BlY2lmaWMgc2NlbmUgb2JqZWN0IHRoYXQgY29udGFpbnNcbiAgICogdGhlIGhvc3QuIFRoaXMgb2JqZWN0IG11c3QgYmUgZGVmaW5lZCBpZiB1c2luZyAnc2V0VGFyZ2V0QnlOYW1lJyBvciAnU2V0VGFyZ2V0QnlJZCdcbiAgICogbWV0aG9kcy5cbiAgICogQHBhcmFtIHtPYmplY3Q9fSBsb29rT3B0aW9ucyAtIE9wdGlvbnMgZm9yIHRoZSBsb29rIGFuaW1hdGlvbiBsYXllcnMuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbbG9va09wdGlvbnMuYmxlbmRUaW1lPTAuMV0gLSBEZWZhdWx0IGFtb3VudCBvZiB0aW1lIGl0IHdpbGxcbiAgICogdGFrZSB0byBtYW5pcHVsYXRlIHRoZSB3ZWlnaHRzIG9mIHRoZSBsb29rIGxheWVycy5cbiAgICogQHBhcmFtIHtudW1iZXJ9IFtsb29rT3B0aW9ucy5lYXNpbmdGbj1RdWFkcmF0aWMuSW5PdXRdIC0gRGVmYXVsdCBlYXNpbmcgZnVuY3Rpb25cbiAgICogdG8gdXNlIHdoZW4gbWFuaXB1bGF0aW5nIGxvb2sgbGF5ZXIgd2VpZ2h0cy5cbiAgICogQHBhcmFtIHtBcnJheS48T2JqZWN0Pn0gW2xvb2tPcHRpb25zLmxheWVycz1bXV0gLSBBbiBhcnJheSBvZiBsYXllciBvcHRpb25zXG4gICAqIG9iamVjdHMgdG8gcmVnaXN0ZXIgYXMgbG9vayBsYXllcnMuXG4gICAqIEBwYXJhbSB7T2JqZWN0PX0gYmxpbmtPcHRpb25zIC0gT3B0aW9ucyBmb3IgdGhlIGJsaW5rIGFuaW1hdGlvbiBsYXllcnMuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbYmxpbmtPcHRpb25zLmJsZW5kVGltZT0wLjA3NV0gLSBEZWZhdWx0IGFtb3VudCBvZiB0aW1lIGl0XG4gICAqIHdpbGwgdGFrZSB0byBtYW5pcHVsYXRlIHRoZSB3ZWlnaHRzIG9mIHRoZSBibGluayBsYXllcnMuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbYmxpbmtPcHRpb25zLmVhc2luZ0ZuPVF1YWRyYXRpYy5Jbk91dF0gLSBEZWZhdWx0IGVhc2luZyBmdW5jdGlvblxuICAgKiB0byB1c2Ugd2hlbiBtYW5pcHVsYXRpbmcgYmxpbmsgbGF5ZXIgd2VpZ2h0cy5cbiAgICogQHBhcmFtIHtBcnJheS48T2JqZWN0Pn0gW2JsaW5rT3B0aW9ucy5sYXllcnM9W11dIC0gQW4gYXJyYXkgb2YgbGF5ZXIgb3B0aW9uc1xuICAgKiBvYmplY3RzIHRvIHJlZ2lzdGVyIGFzIGJsaW5rIGxheWVycy5cbiAgICovXG4gIGNvbnN0cnVjdG9yKFxuICAgIGhvc3QsXG4gICAge1xuICAgICAgdGFyZ2V0LFxuICAgICAgbG9va1RyYWNrZXIsXG4gICAgICBzY2VuZVxuICAgIH0gPSB7fSxcbiAgICB7XG4gICAgICBibGVuZFRpbWU6IGxvb2tCbGVuZFRpbWUgPSAwLjEsXG4gICAgICBlYXNpbmdGbjogbG9va0Vhc2luZ0ZuID0gUXVhZHJhdGljLkluT3V0LFxuICAgICAgbGF5ZXJzOiBsb29rTGF5ZXJzID0gW10sXG4gICAgfSA9IHt9LFxuICAgIHtcbiAgICAgIGJsZW5kVGltZTogYmxpbmtCbGVuZFRpbWUgPSAwLjA3NSxcbiAgICAgIGVhc2luZ0ZuOiBibGlua0Vhc2luZ0ZuID0gUXVhZHJhdGljLkluT3V0LFxuICAgICAgbGF5ZXJzOiBibGlua0xheWVycyA9IFtdLFxuICAgIH0gPSB7fVxuICApIHtcbiAgICBzdXBlcihob3N0KTtcblxuICAgIGlmICghdGhpcy5jb25zdHJ1Y3Rvci5fdmFsaWRhdGVUcmFuc2Zvcm1PYmplY3QobG9va1RyYWNrZXIpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBpbml0aWFsaXplIFBvaW50T2ZJbnRlcmVzdEZlYXR1cmUgb24gaG9zdCAke3RoaXMuX2hvc3QuaWR9LiBMb29rVHJhY2tlciBtdXN0IGJlIGRlZmluZWQgYXMgYSB2YWxpZCB0cmFuc2Zvcm1hdGlvbiBvYmplY3QuYCk7XG4gICAgfVxuICAgIHRoaXMuX2xvb2tUcmFja2VyID0gbG9va1RyYWNrZXI7XG5cbiAgICB0aGlzLl9zY2VuZSA9IHNjZW5lO1xuICAgIHRoaXMuX3RhcmdldCA9IHRhcmdldCB8fCBudWxsO1xuICAgIHRoaXMuX3ByZXZUYXJnZXRQb3MgPSBbMCwgMCwgMF07XG4gICAgdGhpcy5faXNUYXJnZXRNb3ZpbmcgPSBmYWxzZTtcbiAgICB0aGlzLl9sb29rTGF5ZXJzID0gdGhpcy5fbG9va0xheWVycyB8fCB7fTtcbiAgICB0aGlzLl90cmFja2luZ0NvbmZpZ3MgPSB0aGlzLl90cmFja2luZ0NvbmZpZ3MgfHwgW107XG4gICAgdGhpcy5fYmxpbmtMYXllcnMgPSB0aGlzLl9ibGlua0xheWVycyB8fCB7fTtcblxuICAgIC8vIFJlZ2lzdGVyIHRoZSBsb29rIGxheWVyc1xuICAgIGxvb2tMYXllcnMuZm9yRWFjaCgoe1xuICAgICAgbmFtZSxcbiAgICAgIGFuaW1hdGlvbixcbiAgICAgIG1heFNwZWVkLFxuICAgICAgcmVmZXJlbmNlLFxuICAgICAgZm9yd2FyZEF4aXMsXG4gICAgICBoYXNTYWNjYWRlLFxuICAgICAgYmxlbmRUaW1lLFxuICAgICAgZWFzaW5nRm5cbiAgICB9KSA9PiB7XG4gICAgICB0aGlzLnJlZ2lzdGVyTG9va0xheWVyKG5hbWUsIHtcbiAgICAgICAgYW5pbWF0aW9uLFxuICAgICAgICBtYXhTcGVlZCxcbiAgICAgICAgcmVmZXJlbmNlLFxuICAgICAgICBmb3J3YXJkQXhpcyxcbiAgICAgICAgaGFzU2FjY2FkZSxcbiAgICAgICAgYmxlbmRUaW1lOiBibGVuZFRpbWUgIT09IHVuZGVmaW5lZCA/IGJsZW5kVGltZSA6IGxvb2tCbGVuZFRpbWUsXG4gICAgICAgIGVhc2luZ0ZuOiBlYXNpbmdGbiAhPT0gdW5kZWZpbmVkID8gZWFzaW5nRm4gOiBsb29rRWFzaW5nRm4sXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIC8vIFJlZ2lzdGVyIHRoZSBibGluayBsYXllcnNcbiAgICBibGlua0xheWVycy5mb3JFYWNoKCh7IG5hbWUsIGFuaW1hdGlvbiwgYmxlbmRUaW1lLCBlYXNpbmdGbiB9KSA9PiB7XG4gICAgICB0aGlzLnJlZ2lzdGVyQmxpbmtMYXllcihuYW1lLCB7XG4gICAgICAgIGFuaW1hdGlvbixcbiAgICAgICAgYmxlbmRUaW1lOiBibGVuZFRpbWUgIT09IHVuZGVmaW5lZCA/IGJsZW5kVGltZSA6IGJsaW5rQmxlbmRUaW1lLFxuICAgICAgICBlYXNpbmdGbjogZWFzaW5nRm4gIT09IHVuZGVmaW5lZCA/IGVhc2luZ0ZuIDogYmxpbmtFYXNpbmdGbixcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgYW5kIHNldHMgdGhlIHRhcmdldCBvYmplY3QgdGhlIGhvc3Qgc2hvdWxkIGxvb2sgYXQuXG4gICAqXG4gICAqIEB0eXBlIHtPYmplY3R8bnVsbH1cbiAgICovXG4gIGdldCB0YXJnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3RhcmdldDtcbiAgfVxuXG4gIHNldCB0YXJnZXQodGFyZ2V0KSB7XG4gICAgdGhpcy5fdGFyZ2V0ID0gdGFyZ2V0IHx8IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGEgdmVjdG9yIHJlcHJlc2VudGluZyB0aGUgZ2xvYmFsIHBvc2l0aW9uIG9mIGFuIG9iamVjdC4gU2hvdWxkIGJlXG4gICAqIG92ZXJsb2FkZWQgZm9yIGVhY2ggcmVuZGVyaW5nIGVuZ2luZSBpbXBsZW1lbnRhdGlvbi5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICpcbiAgICogQHBhcmFtIHthbnl9IF9vYmogLSBFbmdpbmUtc3BlY2lmaWMgM0QgdHJhbnNmb3JtIG9iamVjdC5cbiAgICpcbiAgICogQHJldHVybnMge0FycmF5LjxudW1iZXI+fSAtIEFuIGFycmF5IGNvbnNpc3Rpbmcgb2YgdGhyZWUgbnVtYmVycyByZXByZXNlbnRpbmdcbiAgICogeCwgeSBhbmQgeiBjb29yZGluYXRlcy5cbiAgICovXG4gIHN0YXRpYyBfZ2V0V29ybGRQb3NpdGlvbihvYmopIHtcbiAgICByZXR1cm4gWzAsIDAsIDBdO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIG1hdHJpeCByZXByZXNlbnRpbmcgdGhlIGdsb2JhbCB0cmFuc2Zvcm1hdGlvbiBtYXRyaXggb2YgYW4gb2JqZWN0LlxuICAgKiBTaG91bGQgYmUgb3ZlcmxvYWRlZCBmb3IgZWFjaCByZW5kZXJpbmcgZW5naW5lIGltcGxlbWVudGF0aW9uLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKlxuICAgKiBAcGFyYW0ge2FueX0gb2JqIC0gRW5naW5lLXNwZWNpZmljIDNEIHRyYW5zZm9ybSBvYmplY3QuXG4gICAqXG4gICAqIEByZXR1cm5zIHtBcnJheS48bnVtYmVyPn0gLSBBbiBhcnJheSBjb25zaXN0aW5nIG9mIDE2IG51bWJlcnMgcmVwcmVzZW50aW5nXG4gICAqIHRoZSAzZCB0cmFuc2Zvcm1hdGlvbi5cbiAgICovXG4gIHN0YXRpYyBfZ2V0V29ybGRNYXRyaXgob2JqKSB7XG4gICAgcmV0dXJuIFsxLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAxXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSb3RhdGUgdGhlIGdpdmVuIGxvY2FsIGRpcmVjdGlvbiB2ZWN0b3IgYnkgdGhlIG9iamVjdCdzIHdvcmxkIHJvdGF0aW9uIG1hdHJpeC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICpcbiAgICogQHBhcmFtIHthbnl9IG9iaiAtIEVuZ2luZS1zcGVjaWZpYyAzRCB0cmFuc2Zvcm0gb2JqZWN0LlxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBmb3J3YXJkVmVjdG9yIC0gVW5pdCB2ZWN0b3IgcmVwcmVzZW50aW5nIHRoZSBsb2NhbFxuICAgKiBmb3J3YXJkIGRpcmVjdGlvbiBvZiB0aGUgb2JqZWN0LlxuICAgKlxuICAgKiBAcmV0dXJucyB7QXJyYXkuPG51bWJlcj59XG4gICAqL1xuICBzdGF0aWMgX2dldE9iamVjdERpcmVjdGlvbihvYmosIGZvcndhcmRWZWN0b3IgPSBBeGlzTWFwLlBvc2l0aXZlWikge1xuICAgIGNvbnN0IHJvdGF0aW9uID0gTWF0aFV0aWxzLmdldFJvdGF0aW9uTWF0cml4KHRoaXMuX2dldFdvcmxkTWF0cml4KG9iaikpO1xuXG4gICAgcmV0dXJuIE1hdGhVdGlscy5yb3RhdGVWZWN0b3IoZm9yd2FyZFZlY3Rvciwgcm90YXRpb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSBob3Jpem9udGFsIGFuZCB2ZXJ0aWNhbCBsb29rIGFuZ2xlcyBpbiBkZWdyZWVzIGdpdmVuIHNwaGVyaWNhbCB0aGV0YVxuICAgKiBhbmQgcGhpIGFuZ2xlcyBpbiByYWRpYW5zLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gdGhldGEgLSBWZXJ0aWNhbC9wb2xhciBhbmdsZSBpbiByYWRpYW5zIHdoZXJlIDAgcG9pbnRzIGRpcmVjdGx5XG4gICAqIGFsb25nIHBvc2l0aXZlIFkgYXhpcy5cbiAgICogQHBhcmFtIHtudW1iZXJ9IHBoaSAtIEhvcml6b250YWwvYXppbXV0aGFsIGFuZ2xlIGluIHJhZGlhbnMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtPYmplY3R9IC0gQW4gb2JqZWN0IHdpdGggdGhlIHNpZ25hdHVyZSB7aDogbnVtYmVyLCB2OiBudW1iZXJ9IHdoZXJlXG4gICAqIGggcmVwcmVzZW50cyBob3Jpem9udGFsIHJvdGF0aW9uIGluIGRlZ3JlZXMgYW5kIHYgcmVwcmVzZW50cyB2ZXJ0aWNhbCByb3RhdGlvblxuICAgKiBpbiBkZWdyZWVzLlxuICAgKi9cbiAgc3RhdGljIF9zcGhlcmljYWxUb0JsZW5kVmFsdWUodGhldGEsIHBoaSkge1xuICAgIGNvbnN0IGggPSBNYXRoVXRpbHMudG9EZWdyZWVzKHBoaSk7XG5cbiAgICAvLyBPZmZzZXQgdGhlIHZlcnRpY2FsIGFuZ2xlIHNvIDAgaXMgcG9pbnRpbmcgZm9yd2FyZCBpbnN0ZWFkIG9mIHVwXG4gICAgY29uc3QgdiA9IE1hdGhVdGlscy50b0RlZ3JlZXModGhldGEpIC0gOTA7XG5cbiAgICAvLyBDb252ZXJ0IHZlcnRpY2FsIGFuZ2xlIHRvIC0xODAsIDE4MCByYW5nZVxuICAgIHJldHVybiB7IGgsIHYgfVxuICB9XG5cbiAgX29uTGF5ZXJBZGRlZCh7IG5hbWUgfSkge1xuICAgIHRoaXMuX2xvb2tMYXllcnMgPSB0aGlzLl9sb29rTGF5ZXJzIHx8IHt9O1xuICAgIHRoaXMuX2JsaW5rTGF5ZXJzID0gdGhpcy5fYmxpbmtMYXllcnMgfHwge307XG5cbiAgICBzdXBlci5fb25MYXllckFkZGVkKHsgbmFtZSB9KTtcblxuICAgIC8vIFZhbGlkYXRlIHRoZSBsb29rIGFuaW1hdGlvblxuICAgIGlmICh0aGlzLl9sb29rTGF5ZXJzW25hbWVdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuX3JlZ2lzdGVyTG9va0FuaW1hdGlvbihuYW1lLCB0aGlzLl9sb29rTGF5ZXJzW25hbWVdKTtcbiAgICB9XG4gIH1cblxuICBfb25BbmltYXRpb25BZGRlZCh7IGxheWVyTmFtZSwgYW5pbWF0aW9uTmFtZSB9KSB7XG4gICAgdGhpcy5fbG9va0xheWVycyA9IHRoaXMuX2xvb2tMYXllcnMgfHwge307XG4gICAgdGhpcy5fYmxpbmtMYXllcnMgPSB0aGlzLl9ibGlua0xheWVycyB8fCB7fTtcblxuICAgIHN1cGVyLl9vbkFuaW1hdGlvbkFkZGVkKHsgbGF5ZXJOYW1lIH0pO1xuXG4gICAgLy8gVmFsaWRhdGUgdGhlIGxvb2sgYW5pbWF0aW9uXG4gICAgaWYgKHRoaXMuX2xvb2tMYXllcnNbbGF5ZXJOYW1lXSA9PT0gYW5pbWF0aW9uTmFtZSkge1xuICAgICAgdGhpcy5fcmVnaXN0ZXJMb29rQW5pbWF0aW9uKGxheWVyTmFtZSwgYW5pbWF0aW9uTmFtZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEVuc3VyZSB0aGF0IHJlZ2lzdGVyZWQgbG9vayBhbmltYXRpb25zIGFyZSBCbGVuZDJkU3RhdGVzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGF5ZXJOYW1lIC0gTmFtZSBvZiB0aGUgbGF5ZXIgdGhhdCBjb250YWlucyB0aGUgbG9vayBhbmltYXRpb24uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhbmltYXRpb25OYW1lIC0gTmFtZSBvZiB0aGUgYW5pbWF0aW9uLlxuICAgKi9cbiAgX3JlZ2lzdGVyTG9va0FuaW1hdGlvbihsYXllck5hbWUsIGFuaW1hdGlvbk5hbWUpIHtcbiAgICBpZiAodGhpcy5fbWFuYWdlZExheWVyc1tsYXllck5hbWVdLmFuaW1hdGlvbnNbYW5pbWF0aW9uTmFtZV0uaXNBY3RpdmUpIHtcbiAgICAgIGlmIChcbiAgICAgICAgQW5pbWF0aW9uVHlwZXNbdGhpcy5faG9zdC5BbmltYXRpb25GZWF0dXJlLmdldEFuaW1hdGlvblR5cGUoXG4gICAgICAgICAgbGF5ZXJOYW1lLFxuICAgICAgICAgIGFuaW1hdGlvbk5hbWVcbiAgICAgICAgKV0gIT09IEFuaW1hdGlvblR5cGVzLmJsZW5kMmRcbiAgICAgICkge1xuICAgICAgICAvLyBXYXJuIGFuZCBkZWFjdGl2YXRlIGlmIHRoZSByZWdpc3RlcmVkIHN0YXRlIGlzIG5vdCBibGVuZDJkXG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICBgQ2Fubm90IHJlZ2lzdGVyIFBvaW50IG9mIEludGVyZXN0IGxvb2sgYW5pbWF0aW9uICR7YW5pbWF0aW9uTmFtZX0gb24gbGF5ZXIgJHtsYXllck5hbWV9IGZvciBob3N0ICR7dGhpcy5faG9zdC5pZH0uIExvb2sgYW5pbWF0aW9ucyBtdXN0IGJlIG9mIHR5cGUgJ2JsZW5kMmQnLmBcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5fbWFuYWdlZExheWVyc1tsYXllck5hbWVdLmFuaW1hdGlvbnNbXG4gICAgICAgICAgYW5pbWF0aW9uTmFtZVxuICAgICAgICBdLmlzQWN0aXZlID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIHRoZSBnaXZlbiBvYmplY3QgaXMgbm90IG9mIGFuIGVuZ2luZS1zcGVjaWZpYyB0eXBlLiBTaG91bGRcbiAgICogYmUgb3ZlcmxvYWRlZCBmb3IgZWFjaCByZW5kZXJpbmcgZW5naW5lIGltcGxlbWVudGF0aW9uLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKlxuICAgKiBAcGFyYW0ge2FueX0gb2JqIC0gT2JqZWN0IHRvIHZhbGlkYXRlLlxuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIHN0YXRpYyBfdmFsaWRhdGVUcmFuc2Zvcm1PYmplY3Qob2JqKSB7XG4gICAgcmV0dXJuIG9iaiBpbnN0YW5jZW9mIE9iamVjdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiB0aGUgZ2l2ZW4gY29uZmlndXJhdGlvbiBvYmplY3QgaGFzIGFscmVhZHkgYmVlbiBzdG9yZWQgYXMgYSB0cmFja2luZ1xuICAgKiBjb25maWcuIElmIGl0IGhhcywgcmV0dXJuIHRoZSBzdG9yZWQgY29uZmlndXJhdGlvbi4gT3RoZXJ3aXNlLCBzdG9yZSBhbmRcbiAgICogcmV0dXJuIGl0LlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gY29uZmlnIC0gT2JqZWN0IGNvbnRhaW5pbmcgdHJhY2tlciwgcmVmZXJlbmNlIGFuZCBmb3J3YXJkQXhpc1xuICAgKiBwcm9wZXJ0aWVzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7T2JqZWN0fVxuICAgKi9cbiAgX2FkZFRyYWNraW5nQ29uZmlnKGNvbmZpZykge1xuICAgIGNvbnN0IHRyYWNraW5nQ29uZmlnID0gdGhpcy5fdHJhY2tpbmdDb25maWdzLmZpbmQoYyA9PlxuICAgICAgYy5yZWZlcmVuY2UgPT09IGNvbmZpZy5yZWZlcmVuY2UgJiYgYy5mb3J3YXJkQXhpcyA9PT0gY29uZmlnLmZvcndhcmRBeGlzXG4gICAgKTtcblxuICAgIGlmICh0cmFja2luZ0NvbmZpZykge1xuICAgICAgcmV0dXJuIHRyYWNraW5nQ29uZmlnO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25maWcuYW5nbGVzID0geyBoOiAwLCB2OiAwIH07XG4gICAgICBjb25maWcucHJldkFuZ2xlcyA9IHsgaDogMCwgdjogMCB9O1xuICAgICAgdGhpcy5fdHJhY2tpbmdDb25maWdzLnB1c2goY29uZmlnKTtcbiAgICAgIHJldHVybiBjb25maWc7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgZGlzdGFuY2UgYmV0d2VlbiB0aGUgbG9vayB0cmFja2VyIGFuZCB0aGUgbG9vayB0YXJnZXQuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICBfZ2V0VGFyZ2V0RGlzdGFuY2UoKSB7XG4gICAgLy8gRmluZCB0aGUgdmVjdG9yIGJldHdlZW4gdGhlIGdsb2JhbCBwb3NpdGlvbnMgb2YgdHJhY2tlciBhbmQgdGFyZ2V0XG4gICAgY29uc3Qgc291cmNlUG9zaXRpb24gPSB0aGlzLmNvbnN0cnVjdG9yLl9nZXRXb3JsZFBvc2l0aW9uKHRoaXMuX2xvb2tUcmFja2VyKTtcbiAgICBjb25zdCB0YXJnZXRQb3NpdGlvbiA9IHRoaXMuY29uc3RydWN0b3IuX2dldFdvcmxkUG9zaXRpb24odGhpcy5fdGFyZ2V0KTtcbiAgICBjb25zdCBsb29rVmVjdG9yID0gW1xuICAgICAgdGFyZ2V0UG9zaXRpb25bMF0gLSBzb3VyY2VQb3NpdGlvblswXSxcbiAgICAgIHRhcmdldFBvc2l0aW9uWzFdIC0gc291cmNlUG9zaXRpb25bMV0sXG4gICAgICB0YXJnZXRQb3NpdGlvblsyXSAtIHNvdXJjZVBvc2l0aW9uWzJdXG4gICAgXTtcblxuICAgIHJldHVybiBNYXRoVXRpbHMuZ2V0VmVjdG9yTWFnbml0dWRlKGxvb2tWZWN0b3IpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0IGFsbCBzdG9yZWQgdHJhY2tpbmcgYW5nbGVzIHRvIDAuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfcmVzZXRMb29rQW5nbGVzKCkge1xuICAgIHRoaXMuX3RyYWNraW5nQ29uZmlncy5mb3JFYWNoKCh7IGFuZ2xlcyB9KSA9PiB7XG4gICAgICBhbmdsZXMuaCA9IDA7XG4gICAgICBhbmdsZXMudiA9IDA7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogU3RvcmUgdGhlIGRpZmZlcmVuY2UgaW4gaG9yaXpvbnRhbCBhbmQgdmVydGljYWwgcm90YXRpb24gZm9yIHRoZSB0cmFja2VyJ3NcbiAgICogcmVmZXJlbmNlIHJvdGF0aW9uIGFuZCB0aGUgZGlyZWN0aW9uIG9mIHRoZSB0YXJnZXQgZnJvbSB0aGUgdHJhY2tlci5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9zZXRMb29rQW5nbGVzKCkge1xuICAgIC8vIEdldCB0aGUgY3VycmVudCBwb3NpdGlvbnMgb2YgdGhlIHRyYWNrZXIgYW5kIHRhcmdldCBvYmplY3RzXG4gICAgY29uc3QgdGFyZ2V0UG9zID0gdGhpcy5jb25zdHJ1Y3Rvci5fZ2V0V29ybGRQb3NpdGlvbih0aGlzLl90YXJnZXQpO1xuICAgIGNvbnN0IHRyYWNrZXJQb3MgPSB0aGlzLmNvbnN0cnVjdG9yLl9nZXRXb3JsZFBvc2l0aW9uKHRoaXMuX2xvb2tUcmFja2VyKTtcblxuICAgIC8vIENoZWNrIGlmIHRoZSB0YXJnZXQgaGFzIG1vdmVkXG4gICAgdGhpcy5faXNUYXJnZXRNb3ZpbmcgPSBNYXRoVXRpbHMuZ2V0VmVjdG9yTWFnbml0dWRlKFtcbiAgICAgIHRhcmdldFBvc1swXSAtIHRoaXMuX3ByZXZUYXJnZXRQb3NbMF0sXG4gICAgICB0YXJnZXRQb3NbMV0gLSB0aGlzLl9wcmV2VGFyZ2V0UG9zWzFdLFxuICAgICAgdGFyZ2V0UG9zWzJdIC0gdGhpcy5fcHJldlRhcmdldFBvc1syXV1cbiAgICApID4gMDtcbiAgICBPYmplY3QuYXNzaWduKHRoaXMuX3ByZXZUYXJnZXRQb3MsIHRhcmdldFBvcyk7XG5cblxuICAgIC8vIENhbGN1bGF0ZSB0aGUgaG9yaXpvbnRhbCBhbmQgdmVydGljYWwgYW5nbGVzIHRvIHJvdGF0ZSB0byB0aGUgdGFyZ2V0XG4gICAgY29uc3QgdGFyZ2V0U3BoZXJpY2FsID0gTWF0aFV0aWxzLmNhcnRlc2lhblRvU3BoZXJpY2FsKFxuICAgICAgdGFyZ2V0UG9zWzBdIC0gdHJhY2tlclBvc1swXSxcbiAgICAgIHRhcmdldFBvc1sxXSAtIHRyYWNrZXJQb3NbMV0sXG4gICAgICB0YXJnZXRQb3NbMl0gLSB0cmFja2VyUG9zWzJdXG4gICAgKTtcbiAgICBjb25zdCB0YXJnZXRBbmdsZXMgPSB0aGlzLmNvbnN0cnVjdG9yLl9zcGhlcmljYWxUb0JsZW5kVmFsdWUoXG4gICAgICB0YXJnZXRTcGhlcmljYWxbMV0sXG4gICAgICB0YXJnZXRTcGhlcmljYWxbMl1cbiAgICApO1xuXG4gICAgLy8gQ2FsY3VsYXRlIGFuZ2xlcyByZWxhdGl2ZSB0byB0aGUgcmVmZXJlbmNlIG9iamVjdHNcbiAgICB0aGlzLl90cmFja2luZ0NvbmZpZ3MuZm9yRWFjaCgoe1xuICAgICAgcmVmZXJlbmNlLFxuICAgICAgZm9yd2FyZEF4aXMsXG4gICAgICBhbmdsZXNcbiAgICB9KSA9PiB7XG4gICAgICAvLyBDYWxjdWxhdGUgdGhlIGhvcml6b250YWwgYW5kIHZlcnRpY2FsIGFuZ2xlcyB0byByb3RhdGUgdG8gdGhlIGRpcmVjdGlvbiBvZiB0aGUgdHJhY2tlclxuICAgICAgY29uc3QgcmVmRGlyZWN0aW9uID0gdGhpcy5jb25zdHJ1Y3Rvci5fZ2V0T2JqZWN0RGlyZWN0aW9uKFxuICAgICAgICByZWZlcmVuY2UsXG4gICAgICAgIGZvcndhcmRBeGlzLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IHJlZlNwaGVyaWNhbCA9IE1hdGhVdGlscy5jYXJ0ZXNpYW5Ub1NwaGVyaWNhbCguLi5yZWZEaXJlY3Rpb24pO1xuICAgICAgY29uc3QgcmVmQW5nbGVzID0gdGhpcy5jb25zdHJ1Y3Rvci5fc3BoZXJpY2FsVG9CbGVuZFZhbHVlKFxuICAgICAgICByZWZTcGhlcmljYWxbMV0sXG4gICAgICAgIHJlZlNwaGVyaWNhbFsyXVxuICAgICAgKTtcblxuICAgICAgLy8gU3RvcmUgdGhlIGRpZmZlcmVuY2VcbiAgICAgIGFuZ2xlcy5oID0gdGFyZ2V0QW5nbGVzLmggLSByZWZBbmdsZXMuaDtcbiAgICAgIGFuZ2xlcy52ID0gdGFyZ2V0QW5nbGVzLnYgLSByZWZBbmdsZXMudjtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIGhvcml6b250YWwgYW5kIHZlcnRpY2FsIGFuZ2xlcyBpdCB3b3VsZCByZXF1aXJlIHRvIHNpbXVsYXRlIGxvb2tpbmdcbiAgICogYXQgdGhlIGdpdmVuIHR5cGUgb2YgZmFjZSB0YXJnZXRcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHRhcmdldFR5cGUgLSBJbnRlZ2VyIHJlcHJlc2VudGluZyB0aGUgRmFjZVRhcmdldFR5cGUuXG4gICAqXG4gICAqIEByZXR1cm5zIHtPYmplY3R9LSBBbiBvYmplY3Qgd2l0aCBzaWduYXR1cmUge3I6IG51bWJlciwgaDogbnVtYmVyLCB2OiBudW1iZXJ9XG4gICAqIHdoZXJlICdyJyByZXByZXNlbnRzIHJhZGl1cywgaCByZXByZXNlbnRzIHRoZSBob3Jpem9udGFsL2F6aW11dGhhbCBhbmdsZSBhbmRcbiAgICogdiByZXByZXNlbnRzIHRoZSB2ZXJ0aWNhbC9wb2xhciBhbmdsZS5cbiAgICovXG4gIF9nZXRGYWNlVGFyZ2V0QW5nbGVzKHRhcmdldFR5cGUpIHtcbiAgICAvLyBObyBvZmZzZXQgd2hlbiB0aGUgdGFyZ2V0IGlzIHRoZSBjZW50ZXIgb2YgdGhlIGV5ZXNcbiAgICBpZiAodGFyZ2V0VHlwZSA9PT0gMCkge1xuICAgICAgcmV0dXJuIHsgaDogMCwgdjogMCB9O1xuICAgIH1cblxuICAgIC8vIEJ1aWxkIGEgdmVjdG9yIHRvIHRoZSBmYWNlIHRhcmdldCB0eXBlIHVzaW5nIHRoZSBjdXJyZW50IGRpc3RhbmNlIHRvIHRoZSB0YXJnZXRcbiAgICBjb25zdCBkaXN0YW5jZSA9IHRoaXMuX2dldFRhcmdldERpc3RhbmNlKHRoaXMuX2xvb2tUcmFja2VyKTtcbiAgICBjb25zdCBmYWNlVmVjdG9yID0gWy4uLkZhY2VWZWN0b3JzW3RhcmdldFR5cGVdXTtcbiAgICBmYWNlVmVjdG9yWzJdID0gZGlzdGFuY2U7XG4gICAgY29uc3Qgc3BoZXJpY2FsID0gTWF0aFV0aWxzLmNhcnRlc2lhblRvU3BoZXJpY2FsKC4uLmZhY2VWZWN0b3IpO1xuXG4gICAgLy8gTWFrZSBzdXJlIHZhbHVlcyBhcmUgY2xhbXBlZCB3aXRoaW4gdGhlIHJhbmdlIG9mIG1vdGlvbiBvZiB0aGUgaHVtYW4gZXllLCBpbiBjYXNlIHRoZSB0YXJnZXQgaXMgdmVyeSBjbG9zZVxuICAgIGNvbnN0IGJsZW5kVmFsdWVzID0gdGhpcy5jb25zdHJ1Y3Rvci5fc3BoZXJpY2FsVG9CbGVuZFZhbHVlKHNwaGVyaWNhbFsxXSwgc3BoZXJpY2FsWzJdKTtcbiAgICBibGVuZFZhbHVlcy5oID0gTWF0aFV0aWxzLmNsYW1wKGJsZW5kVmFsdWVzLmgsIC0zNSwgMzUpO1xuICAgIGJsZW5kVmFsdWVzLnYgPSBNYXRoVXRpbHMuY2xhbXAoYmxlbmRWYWx1ZXMudiwgLTI1LCAzMCk7XG5cbiAgICByZXR1cm4gYmxlbmRWYWx1ZXM7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlZCB0aGUgc3RvcmVkIHNwZWVkIGFuZCBkdXJhdGlvbiB2YXJpYWJsZXMgZm9yIGEgbGF5ZXIgYmFzZWQgb24gdGhlXG4gICAqIGNoYW5nZSBpbiBob3Jpem9udGFsIGFuZCB2ZXJ0aWNhbCBhbmdsZXMgb2YgdGhlIHRyYWNrZXIuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllck5hbWUgLSBOYW1lIG9mIHRoZSBsYXllciB0byBzdG9yZSB2YWx1ZXMgb24uXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBoIC0gQ2hhbmdlIGluIGhvcml6b250YWwgYW5nbGUsIGluIGRlZ3JlZXMuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB2IC0gQ2hhbmdlIGluIHZlcnRpY2FsIGFuZ2xlLCBpbiBkZWdyZWVzLlxuICAgKi9cbiAgX3VwZGF0ZUxheWVyU3BlZWQobGF5ZXJOYW1lLCBoLCB2KSB7XG4gICAgY29uc3QgbGF5ZXIgPSB0aGlzLl9tYW5hZ2VkTGF5ZXJzW2xheWVyTmFtZV07XG5cbiAgICAvLyBGcm9tIFwiUmVhbGlzdGljIEF2YXRhciBhbmQgaGVhZCBBbmltYXRpb24gVXNpbmcgYSBOZXVyb2Jpb2xvZ2ljYWwgTW9kZWwgb2YgVmlzdWFsIEF0dGVudGlvblwiLCBJdHRpLCBEaGF2YWxlLCBQaWdoaW5cbiAgICBsYXllci5tYXhIU3BlZWQgPSA0NzMgKiAoMSAtIE1hdGguZXhwKC1oIC8gNy44KSk7XG4gICAgbGF5ZXIubWF4VlNwZWVkID0gNDczICogKDEgLSBNYXRoLmV4cCgtdiAvIDcuOCkpO1xuXG4gICAgLy8gRnJvbSBcIkV5ZXMgQWxpdmVcIiwgTGVlLCBCYWRsZXJcbiAgICBjb25zdCBEMCA9IDAuMDI1O1xuICAgIGNvbnN0IGQgPSAwLjAwMjM1O1xuICAgIGxheWVyLmhEdXJhdGlvbiA9IEQwICsgZCAqIGg7XG4gICAgbGF5ZXIudkR1cmF0aW9uID0gRDAgKyBkICogdjtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIG1pY3JvU2FjY2FkZSBvYmplY3Qgd2l0aCBuZXcgcmFuZG9taXplZCB2YWx1ZXMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllck5hbWUgLSBOYW1lIG9mIHRoZSBsYXllciB0aGF0IG93bnMgdGhlIHNhY2NhZGUgbW90aW9uLlxuICAgKi9cbiAgX3NldE1pY3JvU2FjY2FkZShsYXllck5hbWUpIHtcbiAgICBjb25zdCBsYXllciA9IHRoaXMuX21hbmFnZWRMYXllcnNbbGF5ZXJOYW1lXTtcbiAgICBjb25zdCB7IG1pY3JvU2FjY2FkZSB9ID0gbGF5ZXI7XG5cbiAgICBpZiAodGhpcy5fdGFyZ2V0KSB7XG4gICAgICAvLyBNaWNybyBtb3ZlbWVudHMgc2hvdWxkIGJlIHNtYWxsZXIgd2hlbiBmb2N1c2VkIG9uIGEgdGFyZ2V0XG4gICAgICBtaWNyb1NhY2NhZGUuaCA9IFV0aWxzLmdldFJhbmRvbUZsb2F0KC4wMSwgLjE1KTtcbiAgICAgIG1pY3JvU2FjY2FkZS52ID0gVXRpbHMuZ2V0UmFuZG9tRmxvYXQoLjAxLCAuMTUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBNaWNyb3NhY2NhZGVzLiBFbmN5Y2xvcGVkaWEgb2YgTmV1cm9zY2llbmNlLiAoMjAwOSkgU3ByaW5nZXIsIEJlcmxpbiwgSGVpZGVsYmVyZy4gaHR0cHM6Ly9kb2kub3JnLzEwLjEwMDcvOTc4LTMtNTQwLTI5Njc4LTJfMzQ5MlxuICAgICAgbWljcm9TYWNjYWRlLmggPSBVdGlscy5nZXRSYW5kb21GbG9hdCguMDEsIC4zKTtcbiAgICAgIG1pY3JvU2FjY2FkZS52ID0gVXRpbHMuZ2V0UmFuZG9tRmxvYXQoLjAxLCAuMyk7XG4gICAgfVxuXG4gICAgdGhpcy5fdXBkYXRlTGF5ZXJTcGVlZChsYXllck5hbWUsIG1pY3JvU2FjY2FkZS5oLCBtaWNyb1NhY2NhZGUudik7XG5cbiAgICAvLyBSZXN0YXJ0IHRoZSB0aW1lclxuICAgIHRoaXMuX2luaXRpYWxpemVNaWNyb1RpbWVyKGxheWVyTmFtZSwgLi4uTWljcm9TYWNjYWRlV2FpdFJhbmdlcy5kZWZhdWx0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIG1hY3JvU2FjY2FkZSBvYmplY3Qgd2l0aCBuZXcgcmFuZG9taXplZCB2YWx1ZXMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllck5hbWUgLSBOYW1lIG9mIHRoZSBsYXllciB0aGF0IG93bnMgdGhlIHNhY2NhZGUgbW90aW9uLlxuICAgKi9cbiAgX3NldE1hY3JvU2FjY2FkZShsYXllck5hbWUpIHtcbiAgICBjb25zdCBsYXllciA9IHRoaXMuX21hbmFnZWRMYXllcnNbbGF5ZXJOYW1lXTtcbiAgICBjb25zdCB7IG1hY3JvU2FjY2FkZSB9ID0gbGF5ZXI7XG4gICAgbGV0IG1hY3JvU2FjY2FkZVdhaXRSYW5nZTtcblxuICAgIC8vIEluY3JlYXNlIHJhbmRvbSB2YWx1ZSByYW5nZSB3aGVuIG5vdCBmb2N1c2VkIG9uIGEgdGFyZ2V0XG4gICAgaWYgKCF0aGlzLl90YXJnZXQpIHtcbiAgICAgIG1hY3JvU2FjY2FkZVdhaXRSYW5nZSA9IE1hY3JvU2FjY2FkZVdhaXRSYW5nZXMuZGVmYXVsdDtcblxuICAgICAgLy8gTm9ybWFsIGh1bWFuIGhvcml6b250YWwgZXllIHJvdGF0aW9uIGxpbWl0IGlzIGFib3V0IDM1IGRlZ3JlZXNcbiAgICAgIGNvbnN0IGhMaW1pdCA9IFV0aWxzLmdldFJhbmRvbUZsb2F0KC4xNDMsIC4yODYpO1xuICAgICAgY29uc3QgaEZhY3RvciA9IFV0aWxzLmdldFJhbmRvbUZsb2F0KC1oTGltaXQsIGhMaW1pdCk7XG4gICAgICBtYWNyb1NhY2NhZGUuaCA9IGhGYWN0b3IgKiAzNTtcblxuICAgICAgLy8gTm9ybWFsIGh1bWFuIHZlcnRpY2FsIGV5ZSByb3RhdGlvbiBsaW1pdCBpcyBhYm91dCAyNSBkZWdyZWVzIHVwd2FyZCBhbmQgMzAgZGVncmVlcyBkb3dud2FyZFxuICAgICAgY29uc3QgdkxpbWl0ID0gVXRpbHMuZ2V0UmFuZG9tRmxvYXQoLjA5MywgLjE4Nik7XG4gICAgICBjb25zdCB2RmFjdG9yID0gVXRpbHMuZ2V0UmFuZG9tRmxvYXQoLXZMaW1pdCwgdkxpbWl0KTtcbiAgICAgIG1hY3JvU2FjY2FkZS52ID0gdkZhY3RvciA+IDAgPyB2RmFjdG9yICogMjUgOiB2RmFjdG9yICogMzA7XG4gICAgfVxuXG4gICAgLy8gUGljayBhIG5ldyBmYWNlIHRhcmdldFxuICAgIGVsc2Uge1xuICAgICAgLy8gU29jaWFsIHRyaWFuZ2xlIC0gc2FjY2FkZSBiZXR3ZWVuIGV5ZXMgYW5kIG1vdXRoLCB3ZWlnaHRlZCB0byBsb29rIGF0IGV5ZXMgbW9yZSBvZnRlblxuICAgICAgc3dpdGNoIChsYXllci5zYWNjYWRlVGFyZ2V0KSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBtYWNyb1NhY2NhZGVXYWl0UmFuZ2UgPSBNYWNyb1NhY2NhZGVXYWl0UmFuZ2VzLmV5ZVRhcmdldDtcbiAgICAgICAgICBsYXllci5zYWNjYWRlVGFyZ2V0ID0gTWF0aC5yYW5kb20oKSA8IDAuNzUgPyBGYWNlVGFyZ2V0VHlwZXMuRXllUmlnaHRcbiAgICAgICAgICAgIDogRmFjZVRhcmdldFR5cGVzLk1vdXRoO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgbWFjcm9TYWNjYWRlV2FpdFJhbmdlID0gTWFjcm9TYWNjYWRlV2FpdFJhbmdlcy5leWVUYXJnZXQ7XG4gICAgICAgICAgbGF5ZXIuc2FjY2FkZVRhcmdldCA9IE1hdGgucmFuZG9tKCkgPCAwLjc1ID8gRmFjZVRhcmdldFR5cGVzLkV5ZUxlZnRcbiAgICAgICAgICAgIDogRmFjZVRhcmdldFR5cGVzLk1vdXRoO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgbWFjcm9TYWNjYWRlV2FpdFJhbmdlID0gTWFjcm9TYWNjYWRlV2FpdFJhbmdlcy5tb3V0aFRhcmdldDtcbiAgICAgICAgICBsYXllci5zYWNjYWRlVGFyZ2V0ID0gTWF0aC5yYW5kb20oKSA8IDAuNSA/IEZhY2VUYXJnZXRUeXBlcy5FeWVMZWZ0XG4gICAgICAgICAgICA6IEZhY2VUYXJnZXRUeXBlcy5FeWVSaWdodDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIG1hY3JvU2FjY2FkZVdhaXRSYW5nZSA9IE1hY3JvU2FjY2FkZVdhaXRSYW5nZXMuZXllVGFyZ2V0O1xuICAgICAgICAgIGxheWVyLnNhY2NhZGVUYXJnZXQgPSBNYXRoLnJhbmRvbSgpIDwgMC41ID8gRmFjZVRhcmdldFR5cGVzLkV5ZUxlZnRcbiAgICAgICAgICAgIDogRmFjZVRhcmdldFR5cGVzLkV5ZVJpZ2h0O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB7IGgsIHYgfSA9IHRoaXMuX2dldEZhY2VUYXJnZXRBbmdsZXMobGF5ZXIuc2FjY2FkZVRhcmdldCk7XG4gICAgICBtYWNyb1NhY2NhZGUuaCA9IGg7XG4gICAgICBtYWNyb1NhY2NhZGUudiA9IHY7XG4gICAgfVxuXG4gICAgdGhpcy5fdXBkYXRlTGF5ZXJTcGVlZChsYXllck5hbWUsIG1hY3JvU2FjY2FkZS5oLCBtYWNyb1NhY2NhZGUudik7XG5cbiAgICAvLyBSZXN0YXJ0IHRoZSB0aW1lcnNcbiAgICB0aGlzLl9pbml0aWFsaXplTWljcm9UaW1lcihsYXllck5hbWUsIC4uLk1pY3JvU2FjY2FkZVdhaXRSYW5nZXMucG9zdE1hY3JvKTtcbiAgICB0aGlzLl9pbml0aWFsaXplTWFjcm9UaW1lcihsYXllck5hbWUsIC4uLm1hY3JvU2FjY2FkZVdhaXRSYW5nZSk7XG4gIH1cblxuICAvKipcbiAgICogU3RhcnQgYSBuZXcgd2FpdCB0aW1lciB0aGF0IHdpbGwgc2V0IGEgbmV3IG1pY3JvIHNhY2NhZGUgbW92ZW1lbnQgd2hlbiBpdFxuICAgKiByZXNvbHZlcy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVyTmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRoYXQgb3ducyB0aGUgc2FjY2FkZSBtb3Rpb24uXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBtaW5XYWl0VGltZSAtIE1pbmltdW0gbnVtYmVyIG9mIHNlY29uZHMgYmVmb3JlIGEgbmV3IHNhY2NhZGVcbiAgICogd2lsbCBiZSB0cmlnZ2VyZWQuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBtYXhXYWl0VGltZSAtIE1heGltdW0gbnVtYmVyIG9mIHNlY29uZHMgYmVmb3JlIGEgbmV3IHNhY2NhZGVcbiAgICogd2lsbCBiZSB0cmlnZ2VyZWQuXG4gICAqL1xuICBfaW5pdGlhbGl6ZU1pY3JvVGltZXIobGF5ZXJOYW1lLCBtaW5XYWl0VGltZSwgbWF4V2FpdFRpbWUpIHtcbiAgICBjb25zdCBsYXllciA9IHRoaXMuX21hbmFnZWRMYXllcnNbbGF5ZXJOYW1lXTtcbiAgICBjb25zdCB3YWl0VGltZSA9IFV0aWxzLmdldFJhbmRvbUZsb2F0KG1pbldhaXRUaW1lLCBtYXhXYWl0VGltZSk7XG5cbiAgICBpZiAobGF5ZXIubWljcm9TYWNjYWRlVGltZXIpIHtcbiAgICAgIGxheWVyLm1pY3JvU2FjY2FkZVRpbWVyLmNhbmNlbCgpO1xuICAgIH1cbiAgICBsYXllci5taWNyb1NhY2NhZGVUaW1lciA9IFV0aWxzLndhaXQod2FpdFRpbWUsIHtcbiAgICAgIG9uRmluaXNoOiAoKSA9PiB7IHRoaXMuX3NldE1pY3JvU2FjY2FkZShsYXllck5hbWUpIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFydCBhIG5ldyB3YWl0IHRpbWVyIHRoYXQgd2lsbCBzZXQgYSBuZXcgbWFjcm8gc2FjY2FkZSBtb3ZlbWVudCB3aGVuIGl0XG4gICAqIHJlc29sdmVzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGF5ZXJOYW1lIC0gTmFtZSBvZiB0aGUgbGF5ZXIgdGhhdCBvd25zIHRoZSBzYWNjYWRlIG1vdGlvbi5cbiAgICogQHBhcmFtIHtudW1iZXJ9IG1pbldhaXRUaW1lIC0gTWluaW11bSBudW1iZXIgb2Ygc2Vjb25kcyBiZWZvcmUgYSBuZXcgc2FjY2FkZVxuICAgKiB3aWxsIGJlIHRyaWdnZXJlZC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IG1heFdhaXRUaW1lIC0gTWF4aW11bSBudW1iZXIgb2Ygc2Vjb25kcyBiZWZvcmUgYSBuZXcgc2FjY2FkZVxuICAgKiB3aWxsIGJlIHRyaWdnZXJlZC5cbiAgICovXG4gIF9pbml0aWFsaXplTWFjcm9UaW1lcihsYXllck5hbWUsIG1pbldhaXRUaW1lLCBtYXhXYWl0VGltZSkge1xuICAgIGNvbnN0IGxheWVyID0gdGhpcy5fbWFuYWdlZExheWVyc1tsYXllck5hbWVdO1xuICAgIGNvbnN0IHdhaXRUaW1lID0gVXRpbHMuZ2V0UmFuZG9tRmxvYXQobWluV2FpdFRpbWUsIG1heFdhaXRUaW1lKTtcblxuICAgIGlmIChsYXllci5tYWNyb1NhY2NhZGVUaW1lcikge1xuICAgICAgbGF5ZXIubWFjcm9TYWNjYWRlVGltZXIuY2FuY2VsKCk7XG4gICAgfVxuICAgIGxheWVyLm1hY3JvU2FjY2FkZVRpbWVyID0gVXRpbHMud2FpdCh3YWl0VGltZSwge1xuICAgICAgb25GaW5pc2g6ICgpID0+IHsgdGhpcy5fc2V0TWFjcm9TYWNjYWRlKGxheWVyTmFtZSkgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgYSBuZXcgdGFyZ2V0IHRvIGxvb2sgYXQuXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fG51bGx9IHRhcmdldCAtIFRoZSBuZXcgdGFyZ2V0IHRvIGxvb2sgYXQuXG4gICAqL1xuICBzZXRUYXJnZXQodGFyZ2V0KSB7XG4gICAgdGhpcy50YXJnZXQgPSB0YXJnZXQ7XG4gIH1cblxuICAvKipcbiAgICogRmluZHMgYW4gb2JqZWN0IGdpdmVuIGl0cyBuYW1lIGFuZCBzZXRzIGl0IGFzIHRoZSBuZXcgdGFyZ2V0IHRvIGxvb2sgYXQuXG4gICAqIFNob3VsZCBiZSBvdmVybG9hZGVkIGZvciBlYWNoIHJlbmRlcmluZyBlbmdpbmUgaW1wbGVtZW50YXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0YXJnZXQgLSBOYW1lIHRvIHNlYXJjaCBmb3IuXG4gICAqL1xuICBzZXRUYXJnZXRCeU5hbWUobmFtZSkge1xuICAgIGlmICghbmFtZSkge1xuICAgICAgdGhpcy5fdGFyZ2V0ID0gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuX3NjZW5lKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBzZXQgUG9pbnRPZkludGVyZXN0RmVhdHVyZSB0YXJnZXQgdXNpbmcgbmFtZSAke25hbWV9IG9uIGhvc3QgJHt0aGlzLl9ob3N0LmlkfS4gU2NlbmUgbXVzdCBiZSBkZWZpbmVkLmApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kcyBhbiBvYmplY3QgZ2l2ZW4gaXRzIGlkIGFuZCBzZXRzIGl0IGFzIHRoZSBuZXcgdGFyZ2V0IHRvIGxvb2sgYXQuXG4gICAqIFNob3VsZCBiZSBvdmVybG9hZGVkIGZvciBlYWNoIHJlbmRlcmluZyBlbmdpbmUgaW1wbGVtZW50YXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gdGFyZ2V0IC0gSWQgdG8gc2VhcmNoIGZvci5cbiAgICovXG4gIHNldFRhcmdldEJ5SWQoaWQpIHtcbiAgICBpZiAoIWlkKSB7XG4gICAgICB0aGlzLl90YXJnZXQgPSBudWxsO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5fc2NlbmUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IHNldCBQb2ludE9mSW50ZXJlc3RGZWF0dXJlIHRhcmdldCB1c2luZyBpZCAke2lkfSBvbiBob3N0ICR7dGhpcy5faG9zdC5pZH0uIFNjZW5lIG11c3QgYmUgZGVmaW5lZC5gKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU3RhcnQga2VlcGluZyB0cmFjayBvZiBhbiBhbmltYXRpb24gbGF5ZXIgdGhhdCBvd25zIGEgYmxlbmQyZCBhbmltYXRpb24gd2l0aFxuICAgKiBibGVuZFdlaWdodHMgY29ycmVzcG9uZGluZyB0byBob3Jpem9udGFsIGFuZCB2ZXJ0aWNhbCBsb29rIGFuZ2xlcy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVyTmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRvIGtlZXAgdHJhY2sgb2YuXG4gICAqIEBwYXJhbSB7T2JqZWN0PX0gb3B0aW9ucyAtIE9wdGlvbnMgZm9yIHRoZSBsYXllci5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmFuaW1hdGlvbiA9ICdsb29rJ10gLSBOYW1lIG9mIHRoZSBhbmltYXRpb24gb24gdGhlXG4gICAqIGxheWVyIHdob3NlIGJsZW5kV2VpZ2h0cyB3aWxsIGJlIGRyaXZlbiBiYXNlZCBvbiB0aGUgYW5nbGUgYmV0d2VlbiB0aGUgbG9va1RyYWNrZXJcbiAgICogYW5kIHRoZSBsb29rVGFyZ2V0LiBUaGlzIGFuaW1hdGlvbiBtdXN0IGJlIG9mIHR5cGUgYmxlbmQyZC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLm1heFNwZWVkID0gMjVdIC0gVGhlIG1heGltdW0gc3BlZWQgYXQgd2hpY2ggdGhlIGJsZW5kMmRcbiAgICogYmxlbmRXZWlnaHRzIGNhbiBiZSBtYW5pcHVsYXRlZC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmZvcndhcmRBeGlzID0gJ1Bvc2l0aXZlWiddIC0gQXhpcyBwb2ludGluZyBmcm9tIHRoZVxuICAgKiBmcm9udCBvZiB0aGUgbG9va1JlZmVyZW5jZSBvYmplY3QuIFZhbGlkIG9wdGlvbnMgYXJlICdQb3NpdGl2ZVgnLCAnTmVnYXRpdmVYJyxcbiAgICogJ1Bvc2l0aXZlWScsICdOZWdhdGl2ZVknLCAnUG9zaXRpdmVaJywgJ05lZ2F0aXZlWicuXG4gICAqIEBwYXJhbSB7T2JqZWN0PX0gb3B0aW9ucy5sb29rUmVmZXJlbmNlIC0gM0QgdHJhbnNmb3JtYXRpb24gbm9kZSB0aGF0IHRoZSBsb29rVHJhY2tlclxuICAgKiByb3RhdGlvbiBsaW1pdHMgc2hvdWxkIGJlIGNhbGN1bGF0ZWQgcmVsYXRpdmUgdG8uIERlZmF1bHRzIHRvIHRoZSBob3N0IG93bmVyLlxuICAgKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMuaGFzU2FjY2FkZSA9IGZhbHNlXSAtIFdoZXRoZXIgb3Igbm90IHRvIGluY2x1ZGVcbiAgICogc2FjY2FkaWMgbW90aW9uIG9udG8gdGhlIGJsZW5kV2VpZ2h0IGFuaW1hdGlvbi4gVGhpcyBzaG91bGQgb25seSBiZSBzZXQgdG9cbiAgICogdHJ1ZSBmb3IgYmxlbmQyZCBhbmltYXRpb25zIHJlcHJlc2VudGluZyBleWUgYW5pbWF0aW9uLlxuICAgKiBAcGFyYW0ge251bWJlcj19IFtvcHRpb25zLmJsZW5kVGltZT1bUG9pbnRPZkludGVyZXN0RmVhdHVyZS5ERUZBVUxUX0xBWUVSX09QVElPTlMuYmxlbmRUaW1lXXtAbGluayBQb2ludE9mSW50ZXJlc3RGZWF0dXJlI0RFRkFVTFRfTEFZRVJfT1BUSU9OUyNibGVuZFRpbWV9XSAtXG4gICAqIERlZmF1bHQgYW1vdW50IG9mIHRpbWUgdG8gdXNlIHdoZW4gbWFuaXB1bGF0aW5nIGxheWVyIHdlaWdodC5cbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9wdGlvbnMuZWFzaW5nRm4gLSBEZWZhdWx0IGVhc2luZyBmdW5jdGlvbiB0byB1c2Ugd2hlblxuICAgKiBtYW5pcHVsYXRpbmcgbGF5ZXIgd2VpZ2h0LlxuICAgKi9cbiAgcmVnaXN0ZXJMb29rTGF5ZXIoXG4gICAgbGF5ZXJOYW1lLFxuICAgIHtcbiAgICAgIGFuaW1hdGlvbiA9ICdsb29rJyxcbiAgICAgIG1heFNwZWVkID0gMjUsXG4gICAgICByZWZlcmVuY2UsXG4gICAgICBmb3J3YXJkQXhpcyA9ICdQb3NpdGl2ZVonLFxuICAgICAgaGFzU2FjY2FkZSA9IGZhbHNlLFxuICAgICAgYmxlbmRUaW1lID0gUG9pbnRPZkludGVyZXN0RmVhdHVyZS5ERUZBVUxUX0xBWUVSX09QVElPTlMuYmxlbmRUaW1lLFxuICAgICAgZWFzaW5nRm5cbiAgICB9ID0ge31cbiAgKSB7XG4gICAgLy8gVmFsaWRhdGUgcmVmZXJlbmNlIG9iamVjdFxuICAgIHJlZmVyZW5jZSA9IHJlZmVyZW5jZSB8fCB0aGlzLl9ob3N0Lm93bmVyO1xuXG4gICAgaWYgKCF0aGlzLmNvbnN0cnVjdG9yLl92YWxpZGF0ZVRyYW5zZm9ybU9iamVjdChyZWZlcmVuY2UpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBpbml0aWFsaXplIHJlZ2lzdGVyIGxvb2sgbGF5ZXIgJHtsYXllck5hbWV9IGZvciBQb2ludE9mSW50ZXJlc3RGZWF0dXJlIG9uIGhvc3QgJHt0aGlzLl9ob3N0LmlkfS4gUmVmZXJlbmNlIG11c3QgYmUgZGVmaW5lZCBhcyBhIHZhbGlkIHRyYW5zZm9ybWF0aW9uIG9iamVjdC5gKTtcbiAgICB9XG5cbiAgICAvLyBGaW5kIHZlY3RvciBhc3NvY2lhdGVkIHdpdGggYXhpcyBzdHJpbmdcbiAgICBmb3J3YXJkQXhpcyA9IEF4aXNNYXBbZm9yd2FyZEF4aXNdICE9PSB1bmRlZmluZWRcbiAgICAgID8gQXhpc01hcFtmb3J3YXJkQXhpc11cbiAgICAgIDogQXhpc01hcC5Qb3NpdGl2ZVo7XG5cbiAgICAvLyBTdG9yZSB0cmFja2luZyBjb25maWd1cmF0aW9uXG4gICAgY29uc3QgdHJhY2tpbmdDb25maWcgPSB0aGlzLl9hZGRUcmFja2luZ0NvbmZpZyh7XG4gICAgICByZWZlcmVuY2UsXG4gICAgICBmb3J3YXJkQXhpc1xuICAgIH0pO1xuXG4gICAgLy8gUmVnaXN0ZXIgdGhlIGxheWVyIGFuZCBhbmltYXRpb25cbiAgICB0aGlzLnJlZ2lzdGVyTGF5ZXIobGF5ZXJOYW1lLCB7XG4gICAgICB0cmFja2luZ0NvbmZpZyxcbiAgICAgIG1heFNwZWVkLFxuICAgICAgbWF4SFNwZWVkOiB1bmRlZmluZWQsXG4gICAgICBtYXhWU3BlZWQ6IHVuZGVmaW5lZCxcbiAgICAgIGhEdXJhdGlvbjogdW5kZWZpbmVkLFxuICAgICAgdkR1cmF0aW9uOiB1bmRlZmluZWQsXG4gICAgICBoVmVsb2NpdHk6IFswLCAwXSxcbiAgICAgIHZWZWxvY2l0eTogWzAsIDBdLFxuICAgICAgaGFzU2FjY2FkZSxcbiAgICAgIGJsZW5kVGltZSxcbiAgICAgIGVhc2luZ0ZuLFxuICAgICAgbWljcm9TYWNjYWRlOiB7IGg6IDAsIHY6IDAgfSxcbiAgICAgIG1hY3JvU2FjY2FkZTogeyBoOiAwLCB2OiAwIH0sXG4gICAgICBzYWNjYWRlVGFyZ2V0OiBGYWNlVGFyZ2V0VHlwZXMuRXllQ2VudGVyLFxuICAgICAgYW5pbWF0aW9uczogeyBbYW5pbWF0aW9uXToge30gfSxcbiAgICB9KTtcbiAgICB0aGlzLl9sb29rTGF5ZXJzW2xheWVyTmFtZV0gPSBhbmltYXRpb247XG5cbiAgICAvLyBWYWxpZGF0ZSB0aGUgbG9vayBhbmltYXRpb25cbiAgICB0aGlzLl9yZWdpc3Rlckxvb2tBbmltYXRpb24obGF5ZXJOYW1lLCBhbmltYXRpb24pO1xuXG4gICAgLy8gSW5pdGlhbGl6ZSBzYWNjYWRlIHRpbWVyc1xuICAgIGlmIChoYXNTYWNjYWRlKSB7XG4gICAgICBjb25zdCBtYWNyb1NhY2NhZGVXYWl0UmFuZ2UgPSB0aGlzLl90YXJnZXRcbiAgICAgICAgPyBNYWNyb1NhY2NhZGVXYWl0UmFuZ2VzLmV5ZVRhcmdldFxuICAgICAgICA6IE1hY3JvU2FjY2FkZVdhaXRSYW5nZXMuZGVmYXVsdDtcbiAgICAgIHRoaXMuX2luaXRpYWxpemVNaWNyb1RpbWVyKGxheWVyTmFtZSwgLi4uTWljcm9TYWNjYWRlV2FpdFJhbmdlcy5kZWZhdWx0KTtcbiAgICAgIHRoaXMuX2luaXRpYWxpemVNYWNyb1RpbWVyKGxheWVyTmFtZSwgLi4ubWFjcm9TYWNjYWRlV2FpdFJhbmdlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU3RhcnQga2VlcGluZyB0cmFjayBvZiBhbiBhbmltYXRpb24gbGF5ZXIgdGhhdCBvd25zIGEgYmxpbmsgYW5pbWF0aW9uLiBCbGlua1xuICAgKiBhbmltYXRpb25zIGNhbiBiZSBvZiBhbnkgdHlwZSwgYnV0IGlmIGl0IGlzIG9mIHR5cGUgcmFuZG9tQW5pbWF0aW9uIHRoZW4gYVxuICAgKiBpdCB3aWxsIGJlIHJhbmRvbWl6ZWQgZWFjaCB0aW1lIGEgYmxpbmsgaXMgY2FsbGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGF5ZXJOYW1lIC0gTmFtZSBvZiB0aGUgbGF5ZXIgdG8ga2VlcCB0cmFjayBvZi5cbiAgICogQHBhcmFtIHtPYmplY3Q9fSBvcHRpb25zIC0gT3B0aW9ucyBmb3IgdGhlIGxheWVyLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuYW5pbWF0aW9uID0gJ2JsaW5rJ10gLSBOYW1lIG9mIHRoZSBibGluayBhbmltYXRpb25cbiAgICogb24gdGhlIGxheWVyLlxuICAgKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMuYmxlbmRUaW1lPVtQb2ludE9mSW50ZXJlc3RGZWF0dXJlLkRFRkFVTFRfTEFZRVJfT1BUSU9OUy5ibGVuZFRpbWVde0BsaW5rIFBvaW50T2ZJbnRlcmVzdEZlYXR1cmUjREVGQVVMVF9MQVlFUl9PUFRJT05TI2JsZW5kVGltZX1dIC1cbiAgICogRGVmYXVsdCBhbW91bnQgb2YgdGltZSB0byB1c2Ugd2hlbiBtYW5pcHVsYXRpbmcgdGhlIGxheWVyJ3Mgd2VpZ2h0LlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb3B0aW9ucy5lYXNpbmdGbiAtIERlZmF1bHQgZWFzaW5nIGZ1bmN0aW9uIHRvIHVzZSB3aGVuXG4gICAqIG1hbmlwdWxhdGluZyB0aGUgbGF5ZXIncyB3ZWlnaHQuXG4gICAqL1xuICByZWdpc3RlckJsaW5rTGF5ZXIoXG4gICAgbGF5ZXJOYW1lLFxuICAgIHtcbiAgICAgIGFuaW1hdGlvbiA9ICdibGluaycsXG4gICAgICBibGVuZFRpbWUgPSBQb2ludE9mSW50ZXJlc3RGZWF0dXJlLkRFRkFVTFRfTEFZRVJfT1BUSU9OUy5ibGVuZFRpbWUsXG4gICAgICBlYXNpbmdGblxuICAgIH0gPSB7fVxuICApIHtcbiAgICAvLyBSZWdpc3RlciB0aGUgbGF5ZXIgYW5kIGFuaW1hdGlvblxuICAgIHRoaXMucmVnaXN0ZXJMYXllcihsYXllck5hbWUsIHtcbiAgICAgIGJsZW5kVGltZSxcbiAgICAgIGVhc2luZ0ZuLFxuICAgICAgYW5pbWF0aW9uczogeyBbYW5pbWF0aW9uXToge30gfSxcbiAgICB9KTtcbiAgICB0aGlzLl9ibGlua0xheWVyc1tsYXllck5hbWVdID0gYW5pbWF0aW9uO1xuICB9XG5cbiAgdXBkYXRlKGRlbHRhVGltZSkge1xuICAgIHN1cGVyLnVwZGF0ZShkZWx0YVRpbWUpO1xuXG4gICAgLy8gVXBkYXRlIHRoZSBsb29rIGFuZ2xlc1xuICAgIGlmICh0aGlzLl90YXJnZXQpIHtcbiAgICAgIHRoaXMuX3NldExvb2tBbmdsZXMoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fcmVzZXRMb29rQW5nbGVzKCk7XG4gICAgfVxuXG4gICAgY29uc3QgZGVsdGFTZWNvbmRzID0gTWF0aC5taW4oZGVsdGFUaW1lLCBNYXhEZWx0YSkgLyAxMDAwO1xuICAgIGxldCB0cmlnZ2VyQmxpbmsgPSBmYWxzZTtcblxuICAgIC8vIFNldCBsb29rIGJsZW5kIHZhbHVlc1xuICAgIE9iamVjdC5lbnRyaWVzKHRoaXMuX2xvb2tMYXllcnMpLmZvckVhY2goKFtsYXllck5hbWUsIGFuaW1OYW1lXSkgPT4ge1xuICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuX21hbmFnZWRMYXllcnNbbGF5ZXJOYW1lXTtcblxuICAgICAgLy8gSW5jcmVtZW50IHRoZSBzYWNjYWRlIHRpbWVyc1xuICAgICAgaWYgKG9wdGlvbnMuaXNBY3RpdmUgJiYgb3B0aW9ucy5oYXNTYWNjYWRlKSB7XG4gICAgICAgIG9wdGlvbnMubWljcm9TYWNjYWRlVGltZXIuZXhlY3V0ZShkZWx0YVRpbWUpO1xuICAgICAgICBvcHRpb25zLm1hY3JvU2FjY2FkZVRpbWVyLmV4ZWN1dGUoZGVsdGFUaW1lKTtcbiAgICAgIH1cblxuICAgICAgLy8gU2V0IHRoZSBibGVuZCB2YWx1ZXNcbiAgICAgIGlmIChvcHRpb25zLmFuaW1hdGlvbnNbYW5pbU5hbWVdLmlzQWN0aXZlKSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRIID0gdGhpcy5faG9zdC5BbmltYXRpb25GZWF0dXJlLmdldEFuaW1hdGlvbkJsZW5kV2VpZ2h0KFxuICAgICAgICAgIGxheWVyTmFtZSwgYW5pbU5hbWUsICdYJ1xuICAgICAgICApO1xuICAgICAgICBjb25zdCBjdXJyZW50ViA9IHRoaXMuX2hvc3QuQW5pbWF0aW9uRmVhdHVyZS5nZXRBbmltYXRpb25CbGVuZFdlaWdodChcbiAgICAgICAgICBsYXllck5hbWUsIGFuaW1OYW1lLCAnWSdcbiAgICAgICAgKTtcblxuICAgICAgICBsZXQgdGFyZ2V0SCA9IG9wdGlvbnMudHJhY2tpbmdDb25maWcuYW5nbGVzLmg7XG4gICAgICAgIGxldCB0YXJnZXRWID0gb3B0aW9ucy50cmFja2luZ0NvbmZpZy5hbmdsZXMudjtcblxuICAgICAgICAvLyBDaGVjayBpZiB0aGUgbG9vayBhbmdsZSBoYXMgY2hhbmdlZCBlbm91Z2ggdG8gdHJpZ2dlciBhIGJsaW5rXG4gICAgICAgIGlmICh0aGlzLl9pc1RhcmdldE1vdmluZyAmJiAhdHJpZ2dlckJsaW5rKSB7XG4gICAgICAgICAgY29uc3QgcHJldlRhcmdldEggPSBvcHRpb25zLnRyYWNraW5nQ29uZmlnLnByZXZBbmdsZXMuaDtcbiAgICAgICAgICBjb25zdCBwcmV2VGFyZ2V0ViA9IG9wdGlvbnMudHJhY2tpbmdDb25maWcucHJldkFuZ2xlcy52O1xuICAgICAgICAgIGNvbnN0IGNoYW5nZUFtb3VudCA9IE1hdGhVdGlscy50b0RlZ3JlZXMoXG4gICAgICAgICAgICBNYXRoVXRpbHMuZ2V0QW5nbGVCZXR3ZWVuKFxuICAgICAgICAgICAgICBbcHJldlRhcmdldEgsIHByZXZUYXJnZXRWXSxcbiAgICAgICAgICAgICAgW3RhcmdldEgsIHRhcmdldFZdXG4gICAgICAgICAgICApXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGlmIChjaGFuZ2VBbW91bnQgPj0gQmxpbmtUaHJlc2hvbGQpIHtcbiAgICAgICAgICAgIHRyaWdnZXJCbGluayA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgb3B0aW9ucy50cmFja2luZ0NvbmZpZy5wcmV2QW5nbGVzLmggPSB0YXJnZXRIO1xuICAgICAgICBvcHRpb25zLnRyYWNraW5nQ29uZmlnLnByZXZBbmdsZXMudiA9IHRhcmdldFY7XG5cbiAgICAgICAgLy8gQWRkIGluIHRoZSBzYWNjYWRlIG1vdmVtZW50XG4gICAgICAgIGlmIChvcHRpb25zLmhhc1NhY2NhZGUpIHtcbiAgICAgICAgICBNYXRoVXRpbHMuZGFtcFZhbHVlKFxuICAgICAgICAgICAgMCxcbiAgICAgICAgICAgIG9wdGlvbnMubWFjcm9TYWNjYWRlLmggKyBvcHRpb25zLm1hY3JvU2FjY2FkZS5oLFxuICAgICAgICAgICAgb3B0aW9ucy5oVmVsb2NpdHksXG4gICAgICAgICAgICBvcHRpb25zLmhEdXJhdGlvbixcbiAgICAgICAgICAgIG9wdGlvbnMubWF4SFNwZWVkXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0YXJnZXRIICs9IG9wdGlvbnMuaFZlbG9jaXR5WzBdO1xuICAgICAgICAgIE1hdGhVdGlscy5kYW1wVmFsdWUoXG4gICAgICAgICAgICAwLFxuICAgICAgICAgICAgb3B0aW9ucy5tYWNyb1NhY2NhZGUudiArIG9wdGlvbnMubWFjcm9TYWNjYWRlLnYsXG4gICAgICAgICAgICBvcHRpb25zLnZWZWxvY2l0eSxcbiAgICAgICAgICAgIG9wdGlvbnMudkR1cmF0aW9uLFxuICAgICAgICAgICAgb3B0aW9ucy5tYXhWU3BlZWRcbiAgICAgICAgICApO1xuICAgICAgICAgIHRhcmdldFYgKz0gb3B0aW9ucy52VmVsb2NpdHlbMF07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDbGFtcCB0byBtYXggc3BlZWRcbiAgICAgICAgY29uc3QgZmFjdG9yID0gTWF0aFV0aWxzLmNsYW1wKGRlbHRhU2Vjb25kcyAqIG9wdGlvbnMubWF4U3BlZWQsIDAsIDEpO1xuICAgICAgICB0YXJnZXRIID0gTWF0aFV0aWxzLmxlcnAoY3VycmVudEgsIHRhcmdldEgsIGZhY3Rvcik7XG4gICAgICAgIHRhcmdldFYgPSBNYXRoVXRpbHMubGVycChjdXJyZW50ViwgdGFyZ2V0ViwgZmFjdG9yKTtcblxuICAgICAgICAvLyBVcGRhdGUgdGhlIGJsZW5kIHZhbHVlc1xuICAgICAgICB0aGlzLl9ob3N0LkFuaW1hdGlvbkZlYXR1cmUuc2V0QW5pbWF0aW9uQmxlbmRXZWlnaHQoXG4gICAgICAgICAgbGF5ZXJOYW1lLFxuICAgICAgICAgIGFuaW1OYW1lLFxuICAgICAgICAgICdYJyxcbiAgICAgICAgICB0YXJnZXRIXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuX2hvc3QuQW5pbWF0aW9uRmVhdHVyZS5zZXRBbmltYXRpb25CbGVuZFdlaWdodChcbiAgICAgICAgICBsYXllck5hbWUsXG4gICAgICAgICAgYW5pbU5hbWUsXG4gICAgICAgICAgJ1knLFxuICAgICAgICAgIHRhcmdldFZcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmICghdHJpZ2dlckJsaW5rIHx8ICF0aGlzLl9pc1RhcmdldE1vdmluZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEV4ZWN1dGUgYmxpbmtcbiAgICBPYmplY3QuZW50cmllcyh0aGlzLl9ibGlua0xheWVycykuZm9yRWFjaCgoW2xheWVyTmFtZSwgYW5pbU5hbWVdKSA9PiB7XG4gICAgICBjb25zdCBhbmltYXRpb24gPSB0aGlzLl9tYW5hZ2VkTGF5ZXJzW2xheWVyTmFtZV0uYW5pbWF0aW9uc1thbmltTmFtZV07XG5cbiAgICAgIGlmIChhbmltYXRpb24uaXNBY3RpdmUpIHtcbiAgICAgICAgdGhpcy5faG9zdC5BbmltYXRpb25GZWF0dXJlLnBsYXlBbmltYXRpb24obGF5ZXJOYW1lLCBhbmltTmFtZSk7XG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGluc3RhbGxBcGkoKSB7XG4gICAgLyoqXG4gICAgICogQGlubmVyXG4gICAgICogQG5hbWVzcGFjZSBQb2ludE9mSW50ZXJlc3RGZWF0dXJlXG4gICAgICovXG4gICAgY29uc3QgYXBpID0gc3VwZXIuaW5zdGFsbEFwaSgpO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoYXBpLCB7XG4gICAgICAvKipcbiAgICAgICAqIEBtZW1iZXJvZiBQb2ludE9mSW50ZXJlc3RGZWF0dXJlXG4gICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAqIEBzZWUgY29yZS9Qb2ludE9mSW50ZXJlc3RGZWF0dXJlI3RhcmdldFxuICAgICAgICovXG4gICAgICB0YXJnZXQ6IHtcbiAgICAgICAgZ2V0OiAoKSA9PiB0aGlzLnRhcmdldCxcbiAgICAgICAgc2V0OiB0YXJnZXQgPT4geyB0aGlzLnRhcmdldCA9IHRhcmdldCB9LFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIE9iamVjdC5hc3NpZ24oYXBpLCB7XG4gICAgICAvKipcbiAgICAgICAqIEBtZW1iZXJvZiBQb2ludE9mSW50ZXJlc3RGZWF0dXJlXG4gICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAqIEBtZXRob2RcbiAgICAgICAqIEBzZWUgY29yZS9Qb2ludE9mSW50ZXJlc3RGZWF0dXJlI3JlZ2lzdGVyTG9va0xheWVyXG4gICAgICAgKi9cbiAgICAgIHJlZ2lzdGVyTG9va0xheWVyOiB0aGlzLnJlZ2lzdGVyTG9va0xheWVyLmJpbmQodGhpcyksXG4gICAgICAvKipcbiAgICAgICAqIEBtZW1iZXJvZiBQb2ludE9mSW50ZXJlc3RGZWF0dXJlXG4gICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAqIEBtZXRob2RcbiAgICAgICAqIEBzZWUgY29yZS9Qb2ludE9mSW50ZXJlc3RGZWF0dXJlI3JlZ2lzdGVyQmxpbmtMYXllclxuICAgICAgICovXG4gICAgICByZWdpc3RlckJsaW5rTGF5ZXI6IHRoaXMucmVnaXN0ZXJCbGlua0xheWVyLmJpbmQodGhpcyksXG4gICAgICAvKipcbiAgICAgICAqIEBtZW1iZXJvZiBQb2ludE9mSW50ZXJlc3RGZWF0dXJlXG4gICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAqIEBtZXRob2RcbiAgICAgICAqIEBzZWUgY29yZS9Qb2ludE9mSW50ZXJlc3RGZWF0dXJlI3NldFRhcmdldFxuICAgICAgICovXG4gICAgICBzZXRUYXJnZXQ6IHRoaXMuc2V0VGFyZ2V0LmJpbmQodGhpcyksXG4gICAgICAvKipcbiAgICAgICAqIEBtZW1iZXJvZiBQb2ludE9mSW50ZXJlc3RGZWF0dXJlXG4gICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAqIEBtZXRob2RcbiAgICAgICAqIEBzZWUgY29yZS9Qb2ludE9mSW50ZXJlc3RGZWF0dXJlI3NldFRhcmdldEJ5TmFtZVxuICAgICAgICovXG4gICAgICBzZXRUYXJnZXRCeU5hbWU6IHRoaXMuc2V0VGFyZ2V0QnlOYW1lLmJpbmQodGhpcyksXG4gICAgICAvKipcbiAgICAgICAqIEBtZW1iZXJvZiBQb2ludE9mSW50ZXJlc3RGZWF0dXJlXG4gICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAqIEBtZXRob2RcbiAgICAgICAqIEBzZWUgY29yZS9Qb2ludE9mSW50ZXJlc3RGZWF0dXJlI3NldFRhcmdldEJ5SWRcbiAgICAgICAqL1xuICAgICAgc2V0VGFyZ2V0QnlJZDogdGhpcy5zZXRUYXJnZXRCeUlkLmJpbmQodGhpcyksXG4gICAgfSk7XG5cbiAgICByZXR1cm4gYXBpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFBvaW50T2ZJbnRlcmVzdEZlYXR1cmU7XG5leHBvcnQgeyBBeGlzTWFwIH07IiwiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXHJcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxyXG5pbXBvcnQgRGVmZXJyZWQgZnJvbSAnY29yZS9EZWZlcnJlZCc7XHJcblxyXG4vKipcclxuICogQ2xhc3MgdGhhdCBjYW4gcGxheSBiYWNrIGF1ZGlvIGdlbmVyYXRlZCBieSBBV1MgUG9sbHkgYW5kIHN5bmNocm9uaXplZCBlbWl0XHJcbiAqIHNwZWVjaG1hcmsgbWVzc2FnZXMuXHJcbiAqXHJcbiAqIEBhYnN0cmFjdFxyXG4gKi9cclxuY2xhc3MgQWJzdHJhY3RTcGVlY2gge1xyXG4gIC8qKlxyXG4gICAqIEBjb25zdHJ1Y3RvclxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtjb3JlL1RleHRUb1NwZWVjaEZlYXR1cmV9IHNwZWFrZXIgLSBUaGUgZmVhdHVyZSB0aGF0IG93bnMgdGhlIFNwZWVjaCBhbmRcclxuICAgKiB3aWxsIGVtaXQgc3BlZWNobWFyayBtZXNzYWdlcy5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIFRoZSB0ZXh0IG9mIHRoZSBzcGVlY2guXHJcbiAgICogQHBhcmFtIHtBcnJheS48T2JqZWN0Pn0gW3NwZWVjaG1hcmtzPVtdXSAtIEFuIGFycmF5IG9mIHNwZWVjaG1hcmsgb2JqZWN0cyByZXByZXNlbnRpbmdcclxuICAgKiB0aGUgdGV4dCBhbmQgdGltaW5nIG9mIHRoZSBzcGVlY2guXHJcbiAgICovXHJcbiAgY29uc3RydWN0b3Ioc3BlYWtlciwgdGV4dCwgc3BlZWNobWFya3MgPSBbXSkge1xyXG4gICAgdGhpcy5fc3BlYWtlciA9IHNwZWFrZXI7XHJcbiAgICB0aGlzLl90ZXh0ID0gdGV4dDtcclxuICAgIHRoaXMuX3NwZWVjaG1hcmtzID0gc3BlZWNobWFya3M7XHJcbiAgICB0aGlzLl9zcGVlY2htYXJrT2Zmc2V0ID0gMDtcclxuICAgIHRoaXMuX3Jlc2V0KCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXNldCB0cmFja2luZyBwcm9wZXJ0aWVzLlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbY3VycmVudFRpbWU9MF0gLSBUaW1lIHRvIHVzZSBmb3IgX3N0YXJ0VGltZS5cclxuICAgKi9cclxuICBfcmVzZXQoY3VycmVudFRpbWUgPSAwKSB7XHJcbiAgICB0aGlzLl9zdGFydFRpbWUgPSBjdXJyZW50VGltZTtcclxuICAgIHRoaXMuX2xvY2FsVGltZSA9IDA7XHJcbiAgICB0aGlzLl9wYXVzZVRpbWUgPSAwO1xyXG4gICAgdGhpcy5fcGxheWluZyA9IGZhbHNlO1xyXG4gICAgdGhpcy5fbWFya0l0ZXIgPSB0aGlzLl9zcGVlY2htYXJrcy52YWx1ZXMoKTtcclxuICAgIGNvbnN0IHt2YWx1ZSwgZG9uZX0gPSB0aGlzLl9tYXJrSXRlci5uZXh0KCk7XHJcbiAgICB0aGlzLl9jdXJyZW50TWFyayA9IHZhbHVlO1xyXG4gICAgdGhpcy5fZW5kVGltZSA9IHRoaXMuX3NwZWVjaG1hcmtzLmxlbmd0aFxyXG4gICAgICA/IHRoaXMuX3NwZWVjaG1hcmtzW3RoaXMuX3NwZWVjaG1hcmtzLmxlbmd0aCAtIDFdLnRpbWVcclxuICAgICAgOiAwO1xyXG4gICAgdGhpcy5fZG9uZSA9IGRvbmU7XHJcbiAgICB0aGlzLl9wcm9taXNlID0gbnVsbDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZSBhIG5ldyBwcm9taXNlIHRoYXQgd2lsbCBzdG9wIHBsYXliYWNrIGFuZCBlbWl0IG1lc3NhZ2VzIGZvciB0aGlzIHNwZWVjaC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvbkZpbmlzaCAtIEZ1bmNpdG9uIHRvIGV4ZWN1dGUgb25jZSB0aGUgc3BlZWNoIHN0b3BzLlxyXG4gICAqIEBwYXJhbSB7b25FcnJvcj19IG9uRXJyb3IgLSBGdW5jdGlvbiB0byBleGVjdXRlIGlmIHRoZSBzcGVlY2ggZW5jb3VudGVycyBhblxyXG4gICAqIGVycm9yLlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvbkludGVycnVwdCAtIEZ1bmN0aW9uIHRvIGV4ZWN1dGUgaWYgdGhlIHNwZWVjaCBpcyBjYW5jZWxlZC5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtEZWZlcnJlZH1cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICovXHJcbiAgX2NyZWF0ZVByb21pc2Uob25GaW5pc2gsIG9uRXJyb3IsIG9uSW50ZXJydXB0KSB7XHJcbiAgICBjb25zdCBvblJlc29sdmUgPSB2YWx1ZSA9PiB7XHJcbiAgICAgIHRoaXMuX3BsYXlpbmcgPSBmYWxzZTtcclxuXHJcbiAgICAgIHRoaXMuX3NwZWFrZXIuZW1pdCh0aGlzLl9zcGVha2VyLmNvbnN0cnVjdG9yLkVWRU5UUy5zdG9wLCB0aGlzKTtcclxuICAgICAgdGhpcy5fc3BlYWtlci5jb25zdHJ1Y3Rvci5lbWl0KFxyXG4gICAgICAgIHRoaXMuX3NwZWFrZXIuY29uc3RydWN0b3IuRVZFTlRTLnN0b3AsXHJcbiAgICAgICAgdGhpc1xyXG4gICAgICApO1xyXG5cclxuICAgICAgaWYgKHR5cGVvZiBvbkZpbmlzaCA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgIG9uRmluaXNoKHZhbHVlKTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBvblJlamVjdCA9IGUgPT4ge1xyXG4gICAgICB0aGlzLl9wbGF5aW5nID0gZmFsc2U7XHJcblxyXG4gICAgICB0aGlzLl9zcGVha2VyLmVtaXQodGhpcy5fc3BlYWtlci5jb25zdHJ1Y3Rvci5FVkVOVFMuc3RvcCwgdGhpcyk7XHJcbiAgICAgIHRoaXMuX3NwZWFrZXIuY29uc3RydWN0b3IuZW1pdChcclxuICAgICAgICB0aGlzLl9zcGVha2VyLmNvbnN0cnVjdG9yLkVWRU5UUy5zdG9wLFxyXG4gICAgICAgIHRoaXNcclxuICAgICAgKTtcclxuXHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoXHJcbiAgICAgICAgYCR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfSBlbmNvdW50ZXJlZCBhbiB1bmV4cGVjdGVkIGVycm9yOiAke2V9YFxyXG4gICAgICApO1xyXG5cclxuICAgICAgaWYgKHR5cGVvZiBvbkVycm9yID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgb25FcnJvcihlKTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBvbkNhbmNlbCA9IHZhbHVlID0+IHtcclxuICAgICAgdGhpcy5fcGxheWluZyA9IGZhbHNlO1xyXG5cclxuICAgICAgdGhpcy5fc3BlYWtlci5lbWl0KHRoaXMuX3NwZWFrZXIuY29uc3RydWN0b3IuRVZFTlRTLmludGVycnVwdCwgdGhpcyk7XHJcbiAgICAgIHRoaXMuX3NwZWFrZXIuY29uc3RydWN0b3IuZW1pdChcclxuICAgICAgICB0aGlzLl9zcGVha2VyLmNvbnN0cnVjdG9yLkVWRU5UUy5pbnRlcnJ1cHQsXHJcbiAgICAgICAgdGhpc1xyXG4gICAgICApO1xyXG5cclxuICAgICAgaWYgKHR5cGVvZiBvbkludGVycnVwdCA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgIG9uSW50ZXJydXB0KHZhbHVlKTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLl9wcm9taXNlID0gbmV3IERlZmVycmVkKHVuZGVmaW5lZCwgb25SZXNvbHZlLCBvblJlamVjdCwgb25DYW5jZWwpO1xyXG5cclxuICAgIHJldHVybiB0aGlzLl9wcm9taXNlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIHdoZXRoZXIgb3Igbm90IHRoZSBzcGVlY2ggaGFzIHJlYWNoZWQgaXQncyBlbmQuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAgICovXHJcbiAgX2NoZWNrRmluaXNoZWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fZG9uZSAmJiB0aGlzLl9sb2NhbFRpbWUgPj0gdGhpcy5fZW5kVGltZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIHBsYXliYWNrIHN0YXRlIG9mIHRoZSBhdWRpby5cclxuICAgKlxyXG4gICAqIEByZWFkb25seVxyXG4gICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAqL1xyXG4gIGdldCBwbGF5aW5nKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3BsYXlpbmc7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSB0ZXh0IG9mIHRoZSBzcGVlY2guXHJcbiAgICpcclxuICAgKiBAcmVhZG9ubHlcclxuICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAqL1xyXG4gIGdldCB0ZXh0KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3RleHQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIGEgc2hhbGxvdyBjb3B5IG9mIHRoZSBzcGVlY2htYXJrcyBhcnJheSBmb3IgdGhlIHNwZWVjaC5cclxuICAgKlxyXG4gICAqIEByZWFkb25seVxyXG4gICAqIEB0eXBlIHtBcnJheS48T2JqZWN0Pn1cclxuICAgKi9cclxuICBnZXQgc3BlZWNobWFya3MoKSB7XHJcbiAgICByZXR1cm4gWy4uLnRoaXMuX3NwZWVjaG1hcmtzXTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgYW5kIHNldHMgdGhlIG51bWJlciBvZiBzZWNvbmRzIHRvIG9mZnNldCBzcGVlY2htYXJrIGVtaXNzaW9uLlxyXG4gICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICovXHJcbiAgZ2V0IHNwZWVjaG1hcmtPZmZzZXQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fc3BlZWNobWFya09mZnNldCAvIDEwMDA7XHJcbiAgfVxyXG5cclxuICBzZXQgc3BlZWNobWFya09mZnNldChvZmZzZXQpIHtcclxuICAgIHRoaXMuX3NwZWVjaG1hcmtPZmZzZXQgPSBvZmZzZXQgKiAxMDAwOyAvLyBTdG9yZSBhcyBtaWxsaXNlY29uZHNcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEVtaXQgc3BlZWNobWFyayBtZXNzYWdlcyBhcyB0aGV5IGFyZSBlbmNvdW50ZXJlZCBpbiBzeW5jIHdpdGggYXVkaW8uXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge251bWJlcn0gY3VycmVudFRpbWUgLSBDdXJyZW50IGdsb2JhbCB0aW1lIHdoZW4gdXBkYXRlIHdhcyBjYWxsZWQuXHJcbiAgICovXHJcbiAgdXBkYXRlKGN1cnJlbnRUaW1lKSB7XHJcbiAgICBpZiAoIXRoaXMuX3BsYXlpbmcpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFVwZGF0ZSBsb2NhbCBhdWRpbyB0aW1lXHJcbiAgICB0aGlzLl9sb2NhbFRpbWUgPSBjdXJyZW50VGltZSAtIHRoaXMuX3N0YXJ0VGltZTtcclxuXHJcbiAgICBpZiAoIXRoaXMuX2RvbmUpIHtcclxuICAgICAgLy8gRW1pdCBzcGVlY2htYXJrIG1lc3NhZ2VzIGZvciBtYXJrcyB1cCB0byB0aGUgY3VycmVudCB0aW1lXHJcbiAgICAgIHdoaWxlIChcclxuICAgICAgICAhdGhpcy5fZG9uZSAmJlxyXG4gICAgICAgIHRoaXMuX2N1cnJlbnRNYXJrLnRpbWUgKyB0aGlzLl9zcGVlY2htYXJrT2Zmc2V0IDw9IHRoaXMuX2xvY2FsVGltZVxyXG4gICAgICApIHtcclxuICAgICAgICB0aGlzLl9zcGVha2VyLmVtaXQoXHJcbiAgICAgICAgICB0aGlzLl9zcGVha2VyLmNvbnN0cnVjdG9yLkVWRU5UU1t0aGlzLl9jdXJyZW50TWFyay50eXBlXSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgc3BlZWNoOiB0aGlzLFxyXG4gICAgICAgICAgICBtYXJrOiB0aGlzLl9jdXJyZW50TWFyayxcclxuICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbnN0IHt2YWx1ZSwgZG9uZX0gPSB0aGlzLl9tYXJrSXRlci5uZXh0KCk7XHJcblxyXG4gICAgICAgIHRoaXMuX2N1cnJlbnRNYXJrID0gdmFsdWU7XHJcbiAgICAgICAgdGhpcy5fZG9uZSA9IGRvbmU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBFbmQgcGxheWJhY2tcclxuICAgIGlmICh0aGlzLl9jaGVja0ZpbmlzaGVkKCkpIHtcclxuICAgICAgdGhpcy5zdG9wKCk7XHJcbiAgICAgIHRoaXMuX3Jlc2V0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQbGF5IHRoZSBzcGVlY2ggZnJvbSB0aGUgYmVnaW5uaW5nLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IGN1cnJlbnRUaW1lIC0gQ3VycmVudCBnbG9iYWwgdGltZSB3aGVuIHBsYXkgd2FzIGNhbGxlZC5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb25GaW5pc2ggLSBPcHRpb25hbCBmdW5jdGlvbiB0byBleGVjdXRlIG9uY2UgdGhlIHNwZWVjaFxyXG4gICAqIHByb21pc2UgcmVzb2x2ZXMuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9uRXJyb3IgLSBPcHRpb25hbCBmdW5jdGlvbiB0byBleGVjdXRlIGlmIHRoZSBzcGVlY2hcclxuICAgKiBlbmNvdW50ZXJzIGFuZCBlcnJvciBkdXJpbmcgcGxheWJhY2suXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9uSW50ZXJydXB0IC0gT3B0aW9uYWwgZnVuY3Rpb24gdG8gZXhlY3V0ZSBpZiB0aGUgc3BlZWNoXHJcbiAgICogaXMgY2FuY2VsZWQuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7RGVmZXJyZWR9IFJlc29sdmVzIG9uY2UgdGhlIHNwZWVjaCByZWFjaGVzIHRoZSBlbmQgb2YgcGxheWJhY2suXHJcbiAgICovXHJcbiAgcGxheShjdXJyZW50VGltZSwgb25GaW5pc2gsIG9uRXJyb3IsIG9uSW50ZXJydXB0KSB7XHJcbiAgICB0aGlzLl9yZXNldChjdXJyZW50VGltZSk7XHJcbiAgICB0aGlzLl9wbGF5aW5nID0gdHJ1ZTtcclxuXHJcbiAgICB0aGlzLl9zcGVha2VyLmVtaXQodGhpcy5fc3BlYWtlci5jb25zdHJ1Y3Rvci5FVkVOVFMucGxheSwgdGhpcyk7XHJcbiAgICB0aGlzLl9zcGVha2VyLmNvbnN0cnVjdG9yLmVtaXQodGhpcy5fc3BlYWtlci5jb25zdHJ1Y3Rvci5FVkVOVFMucGxheSwgdGhpcyk7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuX2NyZWF0ZVByb21pc2Uob25GaW5pc2gsIG9uRXJyb3IsIG9uSW50ZXJydXB0KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFBhdXNlIHRoZSBzcGVlY2ggYXQgdGhlIGN1cnJlbnQgdGltZS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBjdXJyZW50VGltZSAtIEN1cnJlbnQgZ2xvYmFsIHRpbWUgd2hlbiBwYXVzZSB3YXMgY2FsbGVkLlxyXG4gICAqL1xyXG4gIHBhdXNlKGN1cnJlbnRUaW1lKSB7XHJcbiAgICB0aGlzLl9wbGF5aW5nID0gZmFsc2U7XHJcbiAgICB0aGlzLl9wYXVzZVRpbWUgPSBjdXJyZW50VGltZTtcclxuXHJcbiAgICB0aGlzLl9zcGVha2VyLmVtaXQodGhpcy5fc3BlYWtlci5jb25zdHJ1Y3Rvci5FVkVOVFMucGF1c2UsIHRoaXMpO1xyXG4gICAgdGhpcy5fc3BlYWtlci5jb25zdHJ1Y3Rvci5lbWl0KFxyXG4gICAgICB0aGlzLl9zcGVha2VyLmNvbnN0cnVjdG9yLkVWRU5UUy5wYXVzZSxcclxuICAgICAgdGhpc1xyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlc3VtZSB0aGUgc3BlZWNoIGF0IHRoZSBjdXJyZW50IHRpbWUuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge251bWJlcn0gY3VycmVudFRpbWUgLSBDdXJyZW50IGdsb2JhbCB0aW1lIHdoZW4gcmVzdW1lIHdhcyBjYWxsZWQuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9uRmluaXNoIC0gT3B0aW9uYWwgZnVuY3Rpb24gdG8gZXhlY3V0ZSBvbmNlIHRoZSBzcGVlY2hcclxuICAgKiBwcm9taXNlIHJlc29sdmVzLlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvbkVycm9yIC0gT3B0aW9uYWwgZnVuY3Rpb24gdG8gZXhlY3V0ZSBpZiB0aGUgc3BlZWNoXHJcbiAgICogZW5jb3VudGVycyBhbmQgZXJyb3IgZHVyaW5nIHBsYXliYWNrLlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvbkludGVycnVwdCAtIE9wdGlvbmFsIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgaWYgdGhlIHNwZWVjaFxyXG4gICAqIGlzIGNhbmNlbGVkLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0RlZmVycmVkfSBSZXNvbHZlcyBvbmNlIHRoZSBzcGVlY2ggcmVhY2hlcyB0aGUgZW5kIG9mIHBsYXliYWNrLlxyXG4gICAqL1xyXG4gIHJlc3VtZShjdXJyZW50VGltZSwgb25GaW5pc2gsIG9uRXJyb3IsIG9uSW50ZXJydXB0KSB7XHJcbiAgICAvLyBQbGF5IGZyb20gdGhlIGJlZ2lubmluZyBpZiB0aGUgc3BlZWNoIGhhc24ndCBwbGF5ZWQgeWV0XHJcbiAgICBpZiAoIXRoaXMuX3Byb21pc2UpIHtcclxuICAgICAgdGhpcy5fcmVzZXQoY3VycmVudFRpbWUpO1xyXG4gICAgICB0aGlzLl9jcmVhdGVQcm9taXNlKG9uRmluaXNoLCBvbkVycm9yLCBvbkludGVycnVwdCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fcGxheWluZyA9IHRydWU7XHJcbiAgICB0aGlzLl9zdGFydFRpbWUgKz0gY3VycmVudFRpbWUgLSB0aGlzLl9wYXVzZVRpbWU7XHJcblxyXG4gICAgdGhpcy5fc3BlYWtlci5lbWl0KHRoaXMuX3NwZWFrZXIuY29uc3RydWN0b3IuRVZFTlRTLnJlc3VtZSwgdGhpcyk7XHJcbiAgICB0aGlzLl9zcGVha2VyLmNvbnN0cnVjdG9yLmVtaXQoXHJcbiAgICAgIHRoaXMuX3NwZWFrZXIuY29uc3RydWN0b3IuRVZFTlRTLnJlc3VtZSxcclxuICAgICAgdGhpc1xyXG4gICAgKTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5fcHJvbWlzZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENhbmNlbHMgcGxheWJhY2sgb2YgdGhlIHNwZWVjaCBhdCB0aGUgY3VycmVudCB0aW1lLiBDYW5jZWwgdGhlIHNwZWVjaCBwcm9taXNlLlxyXG4gICAqL1xyXG4gIGNhbmNlbCgpIHtcclxuICAgIGlmICh0aGlzLl9wcm9taXNlKSB7XHJcbiAgICAgIHRoaXMuX3Byb21pc2UuY2FuY2VsKCk7XHJcbiAgICAgIHRoaXMuX3Byb21pc2UgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX3BsYXlpbmcgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFN0b3AgdGhlIHNwZWVjaCBhbmQgcmVzZXQgdGltZSB0byB0aGUgYmVnaW5uaW5nLiBSZXNvbHZlIHRoZSBzcGVlY2ggcHJvbWlzZS5cclxuICAgKi9cclxuICBzdG9wKCkge1xyXG4gICAgaWYgKHRoaXMuX3Byb21pc2UpIHtcclxuICAgICAgdGhpcy5fcHJvbWlzZS5yZXNvbHZlKCk7XHJcbiAgICAgIHRoaXMuX3Byb21pc2UgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX3BsYXlpbmcgPSBmYWxzZTtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IEFic3RyYWN0U3BlZWNoO1xyXG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cclxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVC0wXHJcbmltcG9ydCBBYnN0cmFjdFNwZWVjaCBmcm9tICcuL0Fic3RyYWN0U3BlZWNoJztcclxuXHJcbi8qKlxyXG4gKiBUaGUgYnVpbHQtaW4gY2xhc3MgZm9yIGFzeW5jaHJvbm91cyBQcm9taXNlcy5cclxuICogQGV4dGVybmFsIEF1ZGlvXHJcbiAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0hUTUxBdWRpb0VsZW1lbnQvQXVkaW9cclxuICovXHJcblxyXG4vKipcclxuICogQGV4dGVuZHMgQWJzdHJhY3RTcGVlY2hcclxuICogQGFsaWFzIGNvcmUvU3BlZWNoXHJcbiAqL1xyXG5jbGFzcyBTcGVlY2ggZXh0ZW5kcyBBYnN0cmFjdFNwZWVjaCB7XHJcbiAgLyoqXHJcbiAgICogQGNvbnN0cnVjdG9yXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge1RleHRUb1NwZWVjaH0gc3BlYWtlciAtIFRoZSBvd25lciBvZiB0aGUgU3BlZWNoIHRoYXQgd2lsbCBlbWl0IHNwZWVjaG1hcmtcclxuICAgKiBtZXNzYWdlcy5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIFRoZSB0ZXh0IG9mIHRoZSBzcGVlY2guXHJcbiAgICogQHBhcmFtIHtBcnJheS48T2JqZWN0Pn0gW3NwZWVjaG1hcmtzPVtdXSAtIEFuIGFycmF5IG9mIHNwZWVjaG1hcmsgb2JqZWN0cyByZXByZXNlbnRpbmdcclxuICAgKiB0aGUgdGV4dCBhbmQgdGltaW5nIG9mIHRoZSBzcGVlY2guXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IGF1ZGlvQ29uZmlnIC0gT2JqZWN0IGNvbnRhaW5pbmcgYXVkaW8gYW5kIHVybC5cclxuICAgKiBAcGFyYW0ge2V4dGVybmFsOkF1ZGlvfSBhdWRpb0NvbmZpZy5hdWRpbyAtIFBsYXlhYmxlIGF1ZGlvIG9iamVjdC5cclxuICAgKi9cclxuICBjb25zdHJ1Y3RvcihzcGVha2VyLCB0ZXh0LCBzcGVlY2htYXJrcyA9IFtdLCBhdWRpb0NvbmZpZykge1xyXG4gICAgc3VwZXIoc3BlYWtlciwgdGV4dCwgc3BlZWNobWFya3MpO1xyXG4gICAgdGhpcy5fYXVkaW8gPSBhdWRpb0NvbmZpZy5hdWRpbztcclxuXHJcbiAgICAvLyBLZWVwIHRyYWNrIG9mIHdoZXRoZXIgdGhlIGF1ZGlvIGhhcyBmaW5pc2hlZCBwbGF5aW5nIHRocm91Z2hcclxuICAgIHRoaXMuX2F1ZGlvLm9uZW5kZWQgPSAoKSA9PiB7XHJcbiAgICAgIHRoaXMuX2F1ZGlvRmluaXNoZWQgPSB0cnVlO1xyXG4gICAgfTtcclxuICAgIHRoaXMuX2F1ZGlvRmluaXNoZWQgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgX2NoZWNrRmluaXNoZWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fYXVkaW9GaW5pc2hlZCAmJiBzdXBlci5fY2hlY2tGaW5pc2hlZCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgcGxheWFibGUgYXVkaW8gZm9yIHRoZSBzcGVlY2guXHJcbiAgICpcclxuICAgKiBAcmVhZG9ubHlcclxuICAgKiBAdHlwZSB7ZXh0ZXJuYWw6QXVkaW99XHJcbiAgICovXHJcbiAgZ2V0IGF1ZGlvKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2F1ZGlvO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgYXVkaW8gdm9sdW1lIGZvciB0aGUgc3BlZWNoLlxyXG4gICAqXHJcbiAgICogQHR5cGUge251bWJlcn1cclxuICAgKi9cclxuICBnZXQgdm9sdW1lKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2F1ZGlvLnZvbHVtZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHMgdGhlIGF1ZGlvIHZvbHVtZSBmb3IgdGhlIHNwZWVjaC5cclxuICAgKi9cclxuICBzZXQgdm9sdW1lKHZvbHVtZSkge1xyXG4gICAgdGhpcy5fYXVkaW8udm9sdW1lID0gdm9sdW1lO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0IHRoZSBhdWRpbydzIGN1cnJlbnQgbG9jYWwgdGltZSBhbmQgcGxheSBpdC5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICovXHJcbiAgX3BsYXlBdWRpbygpIHtcclxuICAgIGlmICh0aGlzLl9zcGVlY2htYXJrT2Zmc2V0IDwgMCkge1xyXG4gICAgICB0aGlzLl9hdWRpby5jdXJyZW50VGltZSA9IHRoaXMuX3NwZWVjaG1hcmtPZmZzZXQ7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLl9wbGF5aW5nKSB7XHJcbiAgICAgICAgICB0aGlzLl9hdWRpby5jdXJyZW50VGltZSA9XHJcbiAgICAgICAgICAgICh0aGlzLl9sb2NhbFRpbWUgKyB0aGlzLl9zcGVlY2htYXJrT2Zmc2V0KSAvIDEwMDA7XHJcbiAgICAgICAgICB0aGlzLl9hdWRpby5wbGF5KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LCAtdGhpcy5fc3BlZWNobWFya09mZnNldCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9hdWRpby5jdXJyZW50VGltZSA9IDA7XHJcbiAgICAgIHRoaXMuX2F1ZGlvLnBsYXkoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFBhdXNlIHRoZSBhdWRpbyBvbmNlIGl0IGlzIHBsYXlhYmxlLlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBfcGF1c2VBdWRpbygpIHtcclxuICAgIHRoaXMuX2F1ZGlvLnBsYXkoKS50aGVuKCgpID0+IHtcclxuICAgICAgaWYgKCF0aGlzLl9wbGF5aW5nKSB7XHJcbiAgICAgICAgdGhpcy5fYXVkaW8ucGF1c2UoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwbGF5KGN1cnJlbnRUaW1lLCBvbkZpbmlzaCwgb25FcnJvciwgb25JbnRlcnJ1cHQpIHtcclxuICAgIHRoaXMuX2F1ZGlvRmluaXNoZWQgPSBmYWxzZTtcclxuICAgIHRoaXMuX3BsYXlBdWRpbygpO1xyXG5cclxuICAgIHJldHVybiBzdXBlci5wbGF5KGN1cnJlbnRUaW1lLCBvbkZpbmlzaCwgb25FcnJvciwgb25JbnRlcnJ1cHQpO1xyXG4gIH1cclxuXHJcbiAgcGF1c2UoY3VycmVudFRpbWUpIHtcclxuICAgIHRoaXMuX3BhdXNlQXVkaW8oKTtcclxuICAgIHN1cGVyLnBhdXNlKGN1cnJlbnRUaW1lKTtcclxuICB9XHJcblxyXG4gIHJlc3VtZShjdXJyZW50VGltZSwgb25GaW5pc2gsIG9uRXJyb3IsIG9uSW50ZXJydXB0KSB7XHJcbiAgICB0aGlzLl9hdWRpb0ZpbmlzaGVkID0gZmFsc2U7XHJcbiAgICB0aGlzLl9hdWRpby5wbGF5KCk7XHJcblxyXG4gICAgcmV0dXJuIHN1cGVyLnJlc3VtZShjdXJyZW50VGltZSwgb25GaW5pc2gsIG9uRXJyb3IsIG9uSW50ZXJydXB0KTtcclxuICB9XHJcblxyXG4gIGNhbmNlbCgpIHtcclxuICAgIHRoaXMuX3BhdXNlQXVkaW8oKTtcclxuICAgIHN1cGVyLmNhbmNlbCgpO1xyXG4gIH1cclxuXHJcbiAgc3RvcCgpIHtcclxuICAgIHRoaXMuX3BhdXNlQXVkaW8oKTtcclxuICAgIHRoaXMuX2F1ZGlvLmN1cnJlbnRUaW1lID0gMDtcclxuICAgIHN1cGVyLnN0b3AoKTtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IFNwZWVjaDtcclxuIiwiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTBcblxuaW1wb3J0IFV0aWxzIGZyb20gJ2NvcmUvVXRpbHMnO1xuXG4vKipcbiAqIEEgY29sbGVjdGlvbiBvZiB1c2VmdWwgdGV4dC10by1zcGVlY2ggZnVuY3Rpb25zLlxuICpcbiAqIEBoaWRlY29uc3RydWN0b3JcbiAqL1xuY2xhc3MgVGV4dFRvU3BlZWNoVXRpbHMge1xuICAvKipcbiAgICogUmV0dXJucyBhIG5ldyBzdHJpbmcgd2l0aCBTU01MIG1hcmtzIGluc2VydGVkIGJhc2VkIG9uXG4gICAqIG1hdGNoZXMgYmV0d2VlbiB0aGUgaW5wdXQgc3RyaW5nIGFuZCB0aGUgaW5wdXQgbWFwLiBUaGVcbiAgICogd29yZCBtYXRjaGVzIGFyZSBjYXNlLWluc2Vuc2l0aXZlLiBXb3JkcyB3aXRoaW4gZXhpc3RpbmdcbiAgICogU1NNTCB0YWdzIHdpbGwgbm90IGJlIGFmZmVjdGVkLiBJbnB1dCB0ZXh0IHdpbGwgYmUgc3Vycm91bmRlZFxuICAgKiBieSA8c3BlYWs+PC9zcGVhaz4gdGFncyBpZiBuZWVkZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gSW5wdXQgc3RyaW5nLlxuICAgKiBAcGFyYW0ge29iamVjdH0gbWFwIC0gSW5wdXQgb2JqZWN0IHRoYXQgbWFwcyBtYXJrIGtleXNcbiAgICogdG8gYXJyYXlzIG9mIHdvcmRzLiBFeGFtcGxlOlxuICAgKlxuICAgKiAge1xuICAgKiAgICAnbWFyazpzYWQnIDogWydzYWQnLCAnYmx1ZScsICdkb3duJ10sXG4gICAqICAgICdtYXJrOmhhcHB5JyA6IFsnam95JywgJ2dsYWQnLCAnZ3JlYXQnXSxcbiAgICogICAgJ21hcms6bm8nIDogWydubycsICduYWgnLCAnbmF5JywgJ3N1cmUnXVxuICAgKiAgfVxuICAgKiBAcGFyYW0ge0FycmF5LjxzdHJpbmc+fSBbcmFuZG9tTWFya3MgPSBbXV0gLSBJZiB0aGVyZSBhcmUgc2VudGVuY2VzIHRoYXQgZG9uJ3RcbiAgICogbWF0Y2ggYW55IHdvcmRzIGZyb20gdGhlIG1hcCBvYmplY3QsIG1hcmtzIGZyb20gdGhpcyBhcnJheSB3aWxsIGJlIHJhbmRvbWx5XG4gICAqIGNob3NlbiBhbmQgaW5zZXJ0ZWQuXG4gICAqXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IC0gVXBkYXRlZCBpbnB1dCBzdHJpbmcuXG4gICAqL1xuICBzdGF0aWMgYXV0b0dlbmVyYXRlU1NNTE1hcmtzKHRleHQsIG1hcCwgcmFuZG9tTWFya3MgPSBbXSkge1xuICAgIGlmICh0eXBlb2YgbWFwICE9PSAnb2JqZWN0JyB8fCBtYXAgPT09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYENhbm5vdCBnZW5lcmF0ZSBTU01MIG1hcmtzIGZvciB0ZXh0IFwiJHt0ZXh0fVwiIGJlY2F1c2UgbWFwIGlzIG5vdCBhbiBvYmplY3QuYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBwcm9jZXNzIHRoZSBpbnB1dCBtYXAgaW50byBhbiBpbnRlcm5hbCBmb3JtYXRcbiAgICBjb25zdCBpbnRlcm5hbE1hcCA9IHRoaXMuX3Byb2Nlc3NJbnB1dE1hcChtYXApO1xuXG4gICAgY29uc3Qgc3BlYWtUYWdzID0gWyc8c3BlYWs+JywgJzwvc3BlYWs+J107XG4gICAgY29uc3Qgc3NtbE1hcmtSZWdleCA9IC88bWFyayBuYW1lPSg/OlwifCcpKC4qPykoPzpcInwnKVxcLz4vO1xuICAgIGNvbnN0IHNzbWxUYWdSZWdleCA9IC88W14+XSo+L2c7XG5cbiAgICAvLyBJZGVudGlmeSBhbnkgZXhpc3RpbmcgU1NNTCB0YWdzXG4gICAgY29uc3QgZXhpc3RpbmdUYWdzID0gW107XG4gICAgbGV0IHJlc3VsdCA9IHNzbWxUYWdSZWdleC5leGVjKHRleHQpO1xuXG4gICAgd2hpbGUgKHJlc3VsdCAhPT0gbnVsbCkge1xuICAgICAgZXhpc3RpbmdUYWdzLnB1c2goe1xuICAgICAgICBzdGFydDogcmVzdWx0LmluZGV4LFxuICAgICAgICBlbmQ6IHJlc3VsdC5pbmRleCArIHJlc3VsdFswXS5sZW5ndGgsXG4gICAgICAgIHRleHQ6IHJlc3VsdFswXSxcbiAgICAgIH0pO1xuXG4gICAgICByZXN1bHQgPSBzc21sVGFnUmVnZXguZXhlYyh0ZXh0KTtcbiAgICB9XG5cbiAgICBjb25zdCBjaHVua3MgPSBbXTtcbiAgICBsZXQgaW5kZXggPSAwO1xuICAgIGxldCBzc21sTWFya1Jlc3VsdDtcbiAgICBsZXQgZHVwbGljYXRlTWFya1RvQ2hlY2sgPSBbXTtcbiAgICBleGlzdGluZ1RhZ3MuZm9yRWFjaChleGlzdGluZ1RhZyA9PiB7XG4gICAgICBjb25zdCBzdWJzdHIgPSB0ZXh0LnNsaWNlKGluZGV4LCBleGlzdGluZ1RhZy5zdGFydCk7XG5cbiAgICAgIGlmIChzdWJzdHIgIT09ICcnKSB7XG4gICAgICAgIC8vIGF1dG8tbWFyayBub24tdGFnIHRleHRcbiAgICAgICAgY2h1bmtzLnB1c2goXG4gICAgICAgICAgdGhpcy5faW5zZXJ0TWFya3Moc3Vic3RyLCBpbnRlcm5hbE1hcCwgZHVwbGljYXRlTWFya1RvQ2hlY2spXG4gICAgICAgICk7XG5cbiAgICAgICAgZHVwbGljYXRlTWFya1RvQ2hlY2sgPSBbXTtcbiAgICAgIH1cblxuICAgICAgc3NtbE1hcmtSZXN1bHQgPSBzc21sTWFya1JlZ2V4LmV4ZWMoZXhpc3RpbmdUYWcudGV4dCk7XG5cbiAgICAgIGlmIChzc21sTWFya1Jlc3VsdCAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCBtYXJrVGV4dCA9IHNzbWxNYXJrUmVzdWx0WzFdO1xuICAgICAgICBkdXBsaWNhdGVNYXJrVG9DaGVjay5wdXNoKG1hcmtUZXh0KTtcbiAgICAgIH0gZWxzZSBpZiAoIXNwZWFrVGFncy5pbmNsdWRlcyhleGlzdGluZ1RhZy50ZXh0KSkge1xuICAgICAgICBjaHVua3MucHVzaChleGlzdGluZ1RhZy50ZXh0KTtcbiAgICAgIH1cblxuICAgICAgLy8gYWR2YW5jZSB0aGUgaW5kZXhcbiAgICAgIGluZGV4ID0gZXhpc3RpbmdUYWcuZW5kO1xuICAgIH0pO1xuXG4gICAgY2h1bmtzLnB1c2goXG4gICAgICB0aGlzLl9pbnNlcnRNYXJrcyh0ZXh0LnNsaWNlKGluZGV4KSwgaW50ZXJuYWxNYXAsIGR1cGxpY2F0ZU1hcmtUb0NoZWNrKVxuICAgICk7XG5cbiAgICBsZXQgbWFya2VkVGV4dCA9IGNodW5rcy5qb2luKCcnKTtcblxuICAgIGlmIChyYW5kb21NYXJrcyAmJiByYW5kb21NYXJrcy5sZW5ndGggPiAwKSB7XG4gICAgICAvLyBhZGQgcmFuZG9tIG1hcmtzIHRvIGFueSB1bm1hcmtlZCBzZW50ZW5jZXNcbiAgICAgIG1hcmtlZFRleHQgPSB0aGlzLmFkZE1hcmtzVG9Vbm1hcmtlZFNlbnRlbmNlcyhcbiAgICAgICAgbWFya2VkVGV4dCxcbiAgICAgICAgcmFuZG9tTWFya3NcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIFRleHRUb1NwZWVjaFV0aWxzLnZhbGlkYXRlVGV4dChtYXJrZWRUZXh0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgbmV3IHN0cmluZyB3aXRoIGEgcmFuZG9tIFNTTUwgbWFyayBpbnNlcnRlZCBhdCBlYWNoIHNlbnRlbmNlIHRoYXRcbiAgICogZG9lcyBub3QgYWxyZWFkeSBjb250YWluIGFuIFNTTUwgbWFyay5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSBJbnB1dCBzdHJpbmcuXG4gICAqIEBwYXJhbSB7QXJyYXkuPHN0cmluZz59IG1hcmtzIC0gQW55IGFycmF5IG9mIHJhbmRvbSBTU01MIG1hcmtzIHRvIGNob29zZSBmcm9tXG4gICAqIHdoZW4gbW9kaWZ5aW5nIHRoZSB0ZXh0LlxuICAgKlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cbiAgc3RhdGljIGFkZE1hcmtzVG9Vbm1hcmtlZFNlbnRlbmNlcyh0ZXh0LCBtYXJrcykge1xuICAgIGlmICghbWFya3MgfHwgbWFya3MubGVuZ3RoID09PSAwKSByZXR1cm4gdGV4dDtcblxuICAgIGNvbnN0IHNzbWxNYXJrUmVnZXggPSAvPG1hcmsgbmFtZT0oPzpcInwnKSguKj8pKD86XCJ8JylcXC8+L2c7XG4gICAgY29uc3Qgc3NtbFRhZ1JlZ2V4ID0gLzxbXj5dKj4vZztcblxuICAgIC8vIEZpbmQgdGhlIGluZGljZXMgb2YgYW55IG1hcmtzIGluIHRoZSB0ZXh0XG4gICAgY29uc3QgbWFya0luZGljZXMgPSBbXTtcbiAgICBsZXQgbWFya1Jlc3VsdCA9IHNzbWxNYXJrUmVnZXguZXhlYyh0ZXh0KTtcblxuICAgIHdoaWxlIChtYXJrUmVzdWx0ICE9PSBudWxsKSB7XG4gICAgICBtYXJrSW5kaWNlcy5wdXNoKG1hcmtSZXN1bHQuaW5kZXgpO1xuICAgICAgbWFya1Jlc3VsdCA9IHNzbWxNYXJrUmVnZXguZXhlYyh0ZXh0KTtcbiAgICB9XG5cbiAgICAvLyBGaW5kIGFsbCBTU01MIHRhZ3MgaW4gdGhlIHRleHRcbiAgICBjb25zdCBleGlzdGluZ1RhZ3MgPSBbXTtcbiAgICBsZXQgc3NtbFJlc3VsdCA9IHNzbWxUYWdSZWdleC5leGVjKHRleHQpO1xuICAgIHdoaWxlIChzc21sUmVzdWx0ICE9PSBudWxsKSB7XG4gICAgICBleGlzdGluZ1RhZ3MucHVzaCh7XG4gICAgICAgIHN0YXJ0OiBzc21sUmVzdWx0LmluZGV4LFxuICAgICAgICBlbmQ6IHNzbWxSZXN1bHQuaW5kZXggKyBzc21sUmVzdWx0WzBdLmxlbmd0aCxcbiAgICAgICAgdGV4dDogc3NtbFJlc3VsdFswXSxcbiAgICAgIH0pO1xuICAgICAgc3NtbFJlc3VsdCA9IHNzbWxUYWdSZWdleC5leGVjKHRleHQpO1xuICAgIH1cblxuICAgIC8vIENyZWF0ZSBhIGNvcHkgb2YgdGhlIHRleHQgd2l0aCBhbGwgU1NNTCBtYXJrcyByZXBsYWNlcyB3aXRoIHdoaXRlc3BhY2VcbiAgICBsZXQgY2xlYW5lZFRleHQgPSB0ZXh0LnNsaWNlKCk7XG4gICAgZXhpc3RpbmdUYWdzLmZvckVhY2goZXhpc3RpbmdTc21sID0+IHtcbiAgICAgIGNvbnN0IHdoaXRlc3BhY2UgPSBuZXcgQXJyYXkoZXhpc3RpbmdTc21sLnRleHQubGVuZ3RoICsgMSkuam9pbignICcpO1xuICAgICAgY2xlYW5lZFRleHQgPSBbXG4gICAgICAgIGNsZWFuZWRUZXh0LnNsaWNlKDAsIGV4aXN0aW5nU3NtbC5zdGFydCksXG4gICAgICAgIHdoaXRlc3BhY2UsXG4gICAgICAgIGNsZWFuZWRUZXh0LnNsaWNlKGV4aXN0aW5nU3NtbC5lbmQpLFxuICAgICAgXS5qb2luKCcnKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IHNlbnRlbmNlRW5kSW5kaWNlcyA9IHRoaXMuX2dldFNlbnRlbmNlRW5kcyhjbGVhbmVkVGV4dCk7XG5cbiAgICAvLyBPbmx5IGluc2VydCByYW5kb20gbWFya3MgaW50byBzZW50ZW5jZXMgdGhhdCBkb24ndCBhbHJlYWR5IGhhdmUgYW55XG4gICAgbGV0IHByZXZJbmRleCA9IDA7XG4gICAgY29uc3QgdGFyZ2V0SW5kaWNlcyA9IHNlbnRlbmNlRW5kSW5kaWNlcy5maWx0ZXIoaW5kZXggPT4ge1xuICAgICAgY29uc3QgY29udGFpbnNNYXJrID1cbiAgICAgICAgbWFya0luZGljZXMuZmluZEluZGV4KG1hcmtJbmRleCA9PiB7XG4gICAgICAgICAgcmV0dXJuIHByZXZJbmRleCA8PSBtYXJrSW5kZXggJiYgaW5kZXggPiBtYXJrSW5kZXg7XG4gICAgICAgIH0pICE9PSAtMTtcbiAgICAgIHByZXZJbmRleCA9IGluZGV4O1xuICAgICAgcmV0dXJuICFjb250YWluc01hcms7XG4gICAgfSk7XG5cbiAgICBjb25zdCByYW5kb21NYXJrZWRUZXh0ID0gdGhpcy5faW5zZXJ0UmFuZG9tTWFya3NBdChcbiAgICAgIHRleHQsXG4gICAgICB0YXJnZXRJbmRpY2VzLFxuICAgICAgbWFya3NcbiAgICApO1xuXG4gICAgcmV0dXJuIHJhbmRvbU1hcmtlZFRleHQ7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGUgYSB2ZXJzaW9uIG9mIGdpdmVuIHRleHQgdGhhdCBpcyBlbmNsb3NlZCBieSBQb2xseSBzc21sIHNwZWFrIHRhZ3MuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gVGhlIHRleHQgdG8gdmFsaWRhdGUuXG4gICAqXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IC0gVXBkYXRlZCBpbnB1dCBzdHJpbmcuXG4gICAqL1xuICBzdGF0aWMgdmFsaWRhdGVUZXh0KHRleHQpIHtcbiAgICBpZiAoIXRleHQpIHtcbiAgICAgIHRleHQgPSAnPHNwZWFrPjwvc3BlYWs+JztcbiAgICB9IGVsc2Uge1xuICAgICAgdGV4dCA9IHRleHRcbiAgICAgICAgLnJlcGxhY2UoLyheXFxzKjxcXHMqc3BlYWtcXHMqKT5cXHMqfCheXFxzKikvLCAnPHNwZWFrPicpXG4gICAgICAgIC5yZXBsYWNlKC8oXFxzKjxcXHMqXFwvXFxzKnNwZWFrXFxzKj5cXHMqJHxcXHMqJCkvLCAnPC9zcGVhaz4nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGV4dDtcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJzZSBhbiBpbnB1dCBzdHJpbmcgYW5kIGluc2VydCBTU01MIG1hcmtzIGJhc2VkIG9uXG4gICAqIHdvcmQgbWF0Y2hlcyBpbiBhIG1hcC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSBJbnB1dCBzdHJpbmcuXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IFtpbmRpY2VzID0gW11dIC0gQW4gYXJyYXkgb2YgaW5kaWNlcyBpbiB0aGUgdGV4dCBpbnB1dFxuICAgKiB3aGVyZSByYW5kb20gbWFya3Mgc2hvdWxkIGJlIGluc2VydGVkLlxuICAgKiBAcGFyYW0ge0FycmF5LjxzdHJpbmc+fSBbbWFya3MgPSBbXV0gLSBBbiBhcnJheSBvZiBtYXJrIHN0cmluZ3MgdG8gY2hvb3NlXG4gICAqIGZyb20gd2hlbiBpbnNlcnRpbmcgcmFuZG9tIG1hcmtzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSAtIFVwZGF0ZWQgaW5wdXQgc3RyaW5nLlxuICAgKi9cbiAgc3RhdGljIF9pbnNlcnRSYW5kb21NYXJrc0F0KHRleHQsIGluZGljZXMgPSBbXSwgbWFya3MgPSBbXSkge1xuICAgIGlmICghbWFya3MgfHwgbWFya3MubGVuZ3RoID09PSAwIHx8ICFpbmRpY2VzIHx8IGluZGljZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gdGV4dDtcbiAgICB9XG5cbiAgICBsZXQgb2Zmc2V0ID0gMDtcbiAgICBpbmRpY2VzLmZvckVhY2goaW5kZXggPT4ge1xuICAgICAgY29uc3QgcmFuZG9tTWFyayA9IGA8bWFyayBuYW1lPScke1xuICAgICAgICBtYXJrc1tVdGlscy5nZXRSYW5kb21JbnQoMCwgbWFya3MubGVuZ3RoKV1cbiAgICAgIH0nLz5gO1xuICAgICAgdGV4dCA9IFtcbiAgICAgICAgdGV4dC5zbGljZSgwLCBpbmRleCArIG9mZnNldCksXG4gICAgICAgIHJhbmRvbU1hcmssXG4gICAgICAgIHRleHQuc2xpY2UoaW5kZXggKyBvZmZzZXQpLFxuICAgICAgXS5qb2luKCcnKTtcbiAgICAgIG9mZnNldCArPSByYW5kb21NYXJrLmxlbmd0aDtcbiAgICB9KTtcblxuICAgIHJldHVybiB0ZXh0O1xuICB9XG5cbiAgLyoqXG4gICAqIFBhcnNlcyBhIHN0cmluZyBvZiB0ZXh0IGFuZCByZXR1cm5zIGFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGluZGljZXNcbiAgICogb2YgdGhlIGxhc3QgY2hhcmFjdGVyIGluIGEgc2VudGVuY2UgdGhhdCBpcyBub3QgaW4gdGhlIGZvbGxvd2luZyBsaXN0OlxuICAgKiAgKCcuJywgJz8nLCAnIScpXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gVGV4dCB0byBwcm9jZXNzIGZvciBlbmQgb2Ygc2VudGVuY2VcbiAgICogaW5kaWNlcy5cbiAgICpcbiAgICogQHJldHVybnMge0FycmF5LjxudW1iZXI+fSAtIEFycmF5IG9mIGVuZCBvZiBzZW50ZW5jZSBpbmRpY2VzLlxuICAgKi9cbiAgc3RhdGljIF9nZXRTZW50ZW5jZUVuZHModGV4dCkge1xuICAgIGNvbnN0IHNlbnRlbmNlUmVnZXggPSAvW14uIT9dK1suIT9dKy9nO1xuICAgIGNvbnN0IGVuZFNlbnRlbmNlUmVnZXggPSAvWy4hP10rLztcblxuICAgIGxldCByZXN1bHQgPSBzZW50ZW5jZVJlZ2V4LmV4ZWModGV4dCk7XG4gICAgY29uc3Qgc2VudGVuY2VFbmRzID0gW107XG4gICAgd2hpbGUgKHJlc3VsdCAhPT0gbnVsbCkge1xuICAgICAgLy8gZmluZCB0aGUgbGFzdCBub24tcHVuY3R1YXRpb24gY2hhcmFjdGVyXG4gICAgICBjb25zdCBwdW5jdFJlc3VsdCA9IGVuZFNlbnRlbmNlUmVnZXguZXhlYyhyZXN1bHRbMF0pO1xuICAgICAgc2VudGVuY2VFbmRzLnB1c2goXG4gICAgICAgIHJlc3VsdC5pbmRleCArIHJlc3VsdFswXS5sZW5ndGggLSBwdW5jdFJlc3VsdFswXS5sZW5ndGhcbiAgICAgICk7XG4gICAgICByZXN1bHQgPSBzZW50ZW5jZVJlZ2V4LmV4ZWModGV4dCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNlbnRlbmNlRW5kcztcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJzZSBhbiBpbnB1dCBzdHJpbmcgYW5kIGluc2VydCBTU01MIG1hcmtzIGJhc2VkIG9uXG4gICAqIHdvcmQgbWF0Y2hlcyBpbiBhIG1hcC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSBJbnB1dCBzdHJpbmcuXG4gICAqIEBwYXJhbSB7TWFwfSBtYXAgLSBNYXBwaW5nIG9mIHdvcmRzIHRvIG1hcmsgdmFsdWVzIHRoYXRcbiAgICogd2lsbCBiZSBpbnNlcnRlZCBhcyB0aGUgdmFsdWUgZm9yIGEgbWFyaydzICduYW1lJyBhdHRyaWJ1dGUuXG4gICAqIEBwYXJhbSB7QXJyYXl9IGR1cGxpY2F0ZXNUb0NoZWNrIC0gQSBsaXN0IG9mIG1hcmsgdmFsdWVzIHRvIGNoZWNrIGZvciBkdXBsaWNhdGUgYWdhaW5zdCB0aGUgZmlyc3Qgd29yZFxuICAgKlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSAtIFVwZGF0ZWQgaW5wdXQgc3RyaW5nLlxuICAgKi9cbiAgc3RhdGljIF9pbnNlcnRNYXJrcyh0ZXh0LCBtYXAsIGR1cGxpY2F0ZXNUb0NoZWNrKSB7XG4gICAgaWYgKHRleHQgPT09ICcnKSByZXR1cm4gdGV4dDtcblxuICAgIGNvbnN0IHdvcmRSZWdleCA9IC9cXHcrfFxccyt8W15cXHNcXHddKy9nO1xuXG4gICAgbGV0IGxvd2VyQ2FzZVdvcmQ7XG4gICAgbGV0IGNoZWNrRHVwbGljYXRlID0gdHJ1ZTtcbiAgICBjb25zdCBtYXJrZWRXb3JkcyA9IHRleHQubWF0Y2god29yZFJlZ2V4KS5tYXAod29yZCA9PiB7XG4gICAgICBsb3dlckNhc2VXb3JkID0gd29yZC50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICBpZiAobWFwLmhhcyhsb3dlckNhc2VXb3JkKSkge1xuICAgICAgICBjb25zdCBtYXJrcyA9IG1hcC5nZXQobG93ZXJDYXNlV29yZCkubWFwKG1hcmsgPT4ge1xuICAgICAgICAgIGlmIChjaGVja0R1cGxpY2F0ZSkge1xuICAgICAgICAgICAgY2hlY2tEdXBsaWNhdGUgPSBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybiBkdXBsaWNhdGVzVG9DaGVjay5pbmNsdWRlcyhtYXJrKVxuICAgICAgICAgICAgICA/ICcnXG4gICAgICAgICAgICAgIDogYDxtYXJrIG5hbWU9JyR7bWFya30nLz5gO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gYDxtYXJrIG5hbWU9JyR7bWFya30nLz5gO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBgJHttYXJrcy5qb2luKCcnKX0ke3dvcmR9YDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNoZWNrRHVwbGljYXRlID0gZmFsc2U7XG4gICAgICAgIHJldHVybiB3b3JkO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29uc3QgZXhpc3RpbmdNYXJrcyA9IGR1cGxpY2F0ZXNUb0NoZWNrLm1hcChtYXJrID0+IHtcbiAgICAgIHJldHVybiBgPG1hcmsgbmFtZT0nJHttYXJrfScvPmA7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gYCR7ZXhpc3RpbmdNYXJrcy5qb2luKCcnKX0ke21hcmtlZFdvcmRzLmpvaW4oJycpfWA7XG4gIH1cblxuICAvKipcbiAgICogUHJvY2Vzc2VzIGFuIGlucHV0IG9iamVjdCBmb3IgbWFwcGluZyBhbiBhcnJheVxuICAgKiBvZiB3b3JkcyB0byBzcGVjaWZpYyBtYXJrIGtleXMuIENvbnZlcnRzIHRoZSBpbnB1dFxuICAgKiBtYXAgaW50byBhIE1hcCB3aXRoIGEgbW9yZSBlZmZpY2llbnQgZm9ybWF0IGZvclxuICAgKiBwZXJmb3JtaW5nIG1hcmsgaW5qZWN0aW9uLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gbWFwIC0gSW5wdXQgb2JqZWN0IHRoYXQgbWFwcyBtYXJrIGtleXNcbiAgICogdG8gYXJyYXlzIG9mIHdvcmRzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7TWFwfSAtIE1hcCBmb3IgaW50ZXJuYWwgdXNlLlxuICAgKi9cbiAgc3RhdGljIF9wcm9jZXNzSW5wdXRNYXAobWFwKSB7XG4gICAgY29uc3QgaW50ZXJuYWxNYXAgPSBuZXcgTWFwKCk7XG5cbiAgICBsZXQgbGlzdCA9IFtdO1xuICAgIE9iamVjdC5lbnRyaWVzKG1hcCkuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgQ2Fubm90IGdlbmVyYXRlIFNTTUwgbWFya3MgZnJvbSBtYXAgXCIke21hcH1cIiBiZWNhdXNlIHZhbHVlIGZvciBrZXkgJyR7a2V5fScgaXMgbm90IGFuIGFycmF5LmBcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgdmFsdWUuZm9yRWFjaCh3b3JkID0+IHtcbiAgICAgICAgY29uc3QgbG93ZXJDYXNlV29yZCA9IHdvcmQudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgbGlzdCA9IGludGVybmFsTWFwLmdldChsb3dlckNhc2VXb3JkKTtcblxuICAgICAgICBpZiAobGlzdCAhPT0gdW5kZWZpbmVkICYmICFsaXN0LmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgICBpbnRlcm5hbE1hcC5zZXQobG93ZXJDYXNlV29yZCwgWy4uLmxpc3QsIGtleV0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGludGVybmFsTWFwLnNldChsb3dlckNhc2VXb3JkLCBba2V5XSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGludGVybmFsTWFwO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFRleHRUb1NwZWVjaFV0aWxzO1xuIiwiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXHJcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxyXG5pbXBvcnQgQWJzdHJhY3RIb3N0RmVhdHVyZSBmcm9tICdjb3JlL0Fic3RyYWN0SG9zdEZlYXR1cmUnO1xyXG5pbXBvcnQgQW5pbWF0aW9uVXRpbHMgZnJvbSAnY29yZS9hbmltcGFjay9BbmltYXRpb25VdGlscyc7XHJcbmltcG9ydCBNYXRoVXRpbHMgZnJvbSAnY29yZS9NYXRoVXRpbHMnO1xyXG5pbXBvcnQgRGVmZXJyZWQgZnJvbSAnY29yZS9EZWZlcnJlZCc7XHJcbmltcG9ydCBTcGVlY2ggZnJvbSAnLi9BYnN0cmFjdFNwZWVjaCc7XHJcbmltcG9ydCBUZXh0VG9TcGVlY2hVdGlscyBmcm9tICcuL1RleHRUb1NwZWVjaFV0aWxzJztcclxuXHJcbi8qKlxyXG4gKiBUaGUgQW1hem9uIFBvbGx5IHNlcnZpY2Ugb2JqZWN0LlxyXG4gKiBAZXh0ZXJuYWwgUG9sbHlcclxuICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTSmF2YVNjcmlwdFNESy9sYXRlc3QvQVdTL1BvbGx5Lmh0bWxcclxuICovXHJcblxyXG4vKipcclxuICogVGhlIHByZXNpZ25lciBvYmplY3QgdGhhdCBjYW4gYmUgdXNlZCB0byBnZW5lcmF0ZSBwcmVzaWduZWQgdXJscyBmb3IgdGhlIFBvbGx5IHNlcnZpY2UuXHJcbiAqIEBleHRlcm5hbCBQcmVzaWduZXJcclxuICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTSmF2YVNjcmlwdFNESy9sYXRlc3QvQVdTL1BvbGx5L1ByZXNpZ25lci5odG1sXHJcbiAqL1xyXG5cclxuLy8gQXZhaWxhYmxlIG9wdGlvbnMgZm9yIFBvbGx5XHJcbmNvbnN0IGVuZ2luZXMgPSBbJ3N0YW5kYXJkJywgJ25ldXJhbCddO1xyXG5jb25zdCBhdWRpb0Zvcm1hdHMgPSBbJ21wMycsICdvZ2dfdm9yYmlzJywgJ3BjbSddO1xyXG5jb25zdCBzcGVlY2htYXJrVHlwZXMgPSBbJ3NlbnRlbmNlJywgJ3NzbWwnLCAndmlzZW1lJywgJ3dvcmQnXTtcclxuY29uc3Qgc2FtcGxlUmF0ZXMgPSB7XHJcbiAgbXAzOiB7XHJcbiAgICByYXRlczogWyc4MDAwJywgJzE2MDAwJywgJzIyMDUwJywgJzI0MDAwJ10sXHJcbiAgICBkZWZhdWx0czoge1xyXG4gICAgICBzdGFuZGFyZDogJzIwNTAnLFxyXG4gICAgICBuZXVyYWw6ICcyNDAwJyxcclxuICAgIH0sXHJcbiAgfSxcclxuICBwY206IHtcclxuICAgIHJhdGVzOiBbJzgwMDAnLCAnMTYwMDAnXSxcclxuICAgIGRlZmF1bHRzOiB7XHJcbiAgICAgIHN0YW5kYXJkOiAnMTYwMCcsXHJcbiAgICAgIG5ldXJhbDogJzE2MDAnLFxyXG4gICAgfSxcclxuICB9LFxyXG59O1xyXG5zYW1wbGVSYXRlcy5vZ2dfdm9yYmlzID0gc2FtcGxlUmF0ZXMubXAzO1xyXG5sZXQgYXdzVmVyc2lvbjtcclxuXHJcbi8qKlxyXG4gKiBCYXNlIGNsYXNzIGZvciB0dXJuaW5nIHRleHQgaW5wdXQgaW50byBwbGF5YWJsZSBhdWRpby4gVGhlcmUgc2hvdWxkIGJlIG9uZSBpbnN0YW5jZVxyXG4gKiBwZXIgc3BlYWtlciwgZWFjaCBpbnN0YW5jZSBjYW4gcGxheSBvbmx5IG9uZSBwaWVjZSBvZiB0ZXh0IGF0IGEgdGltZS5cclxuICpcclxuICogQGV4dGVuZHMgQWJzdHJhY3RIb3N0RmVhdHVyZVxyXG4gKiBAYWJzdHJhY3RcclxuICpcclxuICogQHByb3BlcnR5IHsobnVtYmVyfHVuZGVmaW5lZCl9IEFXU19WRVJTSU9OIC0gR2V0cyB0aGUgdmVyc2lvbiBvZiBBV1MgU0RLIGJlaW5nXHJcbiAqIHVzZWQuIFdpbGwgYmUgdW5kZWZpbmVkIHVudGlsIFtpbml0aWFsaXplU2VydmljZV17QGxpbmsgQWJzdHJhY3RUZXh0VG9TcGVlY2hGZWF0dXJlLmluaXRpYWxpemVTZXJ2aWNlfVxyXG4gKiBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgZXhlY3V0ZWQuXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbUE9MTFlfTUlOX05FVVJBTF9WRVJTSU9OPScyLjUwMyddIC0gR2V0cyB0aGUgbWluaW11bSB2ZXJzaW9uXHJcbiAqIG9mIHRoZSBBV1MgU0RLIHRoYXQgaXMgbmVjZXNzYXJ5IHRvIHVzZSBuZXVyYWwgdm9pY2VzIHdpdGggQVdTIFBvbGx5LlxyXG4gKiBAcHJvcGVydHkge09iamVjdH0gUE9MTFlfREVGQVVMVFMgLSBEZWZhdWx0IHZhbHVlcyB0byB1c2Ugd2l0aCBjYWxscyB0byB7QGxpbmsgZXh0ZXJuYWw6UG9sbHl9LlxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW1BPTExZX0RFRkFVTFRTLkVuZ2luZT0nc3RhbmRhcmQnXVxyXG4gKiBAcHJvcGVydHkge0FycmF5LjxzdHJpbmc+fSBbUE9MTFlfREVGQVVMVFMuTGV4aWNvbk5hbWVzPVtdXVxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW1BPTExZX0RFRkFVTFRTLk91dHB1dEZvcm1hdD0nbXAzJ11cclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtQT0xMWV9ERUZBVUxUUy5TYW1wbGVSYXRlPScyMjA1MCddXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbUE9MTFlfREVGQVVMVFMuVGV4dD0nJ11cclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtQT0xMWV9ERUZBVUxUUy5UZXh0VHlwZT0nc3NtbCddXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbUE9MTFlfREVGQVVMVFMuVm9pY2VJZD0nQW15J11cclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtQT0xMWV9ERUZBVUxUUy5MYW5ndWFnZUNvZGU9J2VuLUdCJ11cclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtQT0xMWV9ERUZBVUxUUy5MYW5ndWFnZU5hbWU9J0JyaXRpc2ggRW5nbGlzaCddXHJcbiAqIEBwcm9wZXJ0eSB7QXJyYXkuPHN0cmluZz59IFtQT0xMWV9WT0lDRVM9W11dIC0gQW4gYXJyYXkgb2Ygdm9pY2VzIGF2YWlsYWJsZSBpblxyXG4gKiBQb2xseS4gV2lsbCBiZSBlbXB0eSB1bnRpbCBbaW5pdGlhbGl6ZVNlcnZpY2Vde0BsaW5rIEFic3RyYWN0VGV4dFRvU3BlZWNoRmVhdHVyZS5pbml0aWFsaXplU2VydmljZX1cclxuICogaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IGV4ZWN1dGVkLiBTZWUgW1BvbGx5IERvY3VtZW50YXRpb25de0BsaW5rIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9wb2xseS9sYXRlc3QvZGcvdm9pY2VsaXN0Lmh0bWx9XHJcbiAqIGZvciBhIGZ1bGwgbGlzdCBvZiBhdmFpbGFibGUgdm9pY2VzLlxyXG4gKiBAcHJvcGVydHkge09iamVjdH0gW1BPTExZX0xBTkdVQUdFUz17fV0gLSBBbiBvYmplY3QgdGhhdCBtYXBzIGxhbmd1YWdlIG5hbWVzXHJcbiAqIHRvIGxhbmd1YWdlIGNvZGVzIHRoYXQgYXJlIGF2YWlsYWJsZSBpbiBQb2xseS4gV2lsbCBiZSBlbXB0eSB1bnRpbFxyXG4gKiBbaW5pdGlhbGl6ZVNlcnZpY2Vde0BsaW5rIEFic3RyYWN0VGV4dFRvU3BlZWNoRmVhdHVyZS5pbml0aWFsaXplU2VydmljZX1cclxuICogaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IGV4ZWN1dGVkLiBTZWUgW1BvbGx5IERvY3VtZW50YXRpb25de0BsaW5rIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9wb2xseS9sYXRlc3QvZGcvU3VwcG9ydGVkTGFuZ3VhZ2UuaHRtbH1cclxuICogZm9yIGEgZnVsbCBsaXN0IG9mIGF2YWlsYWJsZSBsYW5ndWFnZXMgYW5kIGNvcnJlc3BvbmRpbmcgY29kZXMuXHJcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBbUE9MTFlfTEFOR1VBR0VfQ09ERVM9e31dIC0gQW4gb2JqZWN0IHRoYXQgbWFwcyBsYW5ndWFnZSBjb2Rlc1xyXG4gKiB0byBsYW5ndWFnZSBuYW1lcyB0aGF0IGFyZSBhdmFpbGFibGUgaW4gUG9sbHkuIFdpbGwgYmUgZW1wdHkgdW50aWxcclxuICogW2luaXRpYWxpemVTZXJ2aWNlXXtAbGluayBBYnN0cmFjdFRleHRUb1NwZWVjaEZlYXR1cmUuaW5pdGlhbGl6ZVNlcnZpY2V9XHJcbiAqIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBleGVjdXRlZC4gU2VlIFtQb2xseSBEb2N1bWVudGF0aW9uXXtAbGluayBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vcG9sbHkvbGF0ZXN0L2RnL1N1cHBvcnRlZExhbmd1YWdlLmh0bWx9XHJcbiAqIGZvciBhIGZ1bGwgbGlzdCBvZiBhdmFpbGFibGUgbGFuZ3VhZ2VzIGFuZCBjb3JyZXNwb25kaW5nIGNvZGVzLlxyXG4gKiBAcHJvcGVydHkge09iamVjdH0gRVZFTlRTIC0gQnVpbHQtaW4gbWVzc2FnZXMgdGhhdCB0aGUgZmVhdHVyZSBlbWl0cy4gV2hlbiB0aGVcclxuICogZmVhdHVyZSBpcyBhZGRlZCB0byBhIHtAbGluayBjb3JlL0hvc3RPYmplY3R9LCBldmVudCBuYW1lcyB3aWxsIGJlIHByZWZpeGVkIGJ5IHRoZVxyXG4gKiBuYW1lIG9mIHRoZSBmZWF0dXJlIGNsYXNzICsgJy4nLlxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW0VWRU5UUy5yZWFkeT1vblJlYWR5RXZlbnRdIC0gTWVzc2FnZSB0aGF0IGlzIGVtaXR0ZWQgYWZ0ZXJcclxuICogW2luaXRpYWxpemVTZXJ2aWNlXXtAbGluayBBYnN0cmFjdFRleHRUb1NwZWVjaEZlYXR1cmUuaW5pdGlhbGl6ZVNlcnZpY2V9IGhhcyBiZWVuXHJcbiAqIHN1Y2Nlc3NmdWxseSBleGVjdXRlZC5cclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtFVkVOVFMucGxheT1vblBsYXlFdmVudF0gLSBNZXNzYWdlIHRoYXQgaXMgZW1pdHRlZCBhZnRlclxyXG4gKiBlYWNoIGNhbGwgdG8gW3BsYXlde0BsaW5rIEFic3RyYWN0VGV4dFRvU3BlZWNoRmVhdHVyZSNwbGF5fS4gVGhlIHNwZWVjaCB0aGF0IHdhcyBwbGF5ZWRcclxuICogaXMgc3VwcGxpZWQgYXMgYW4gYXJndW1lbnQgdG8gbGlzdGVuZXIgZnVuY3Rpb25zLlxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW0VWRU5UUy5wYXVzZT1vblBhdXNlRXZlbnRdIC0gTWVzc2FnZSB0aGF0IGlzIGVtaXR0ZWQgYWZ0ZXJcclxuICogZWFjaCBjYWxsIHRvIFtwYXVzZV17QGxpbmsgQWJzdHJhY3RUZXh0VG9TcGVlY2hGZWF0dXJlI3BhdXNlfS4gVGhlIHNwZWVjaCB0aGF0IHdhcyBwYXVzZWRcclxuICogaXMgc3VwcGxpZWQgYXMgYW4gYXJndW1lbnQgdG8gbGlzdGVuZXIgZnVuY3Rpb25zLlxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW0VWRU5UUy5yZXN1bWU9b25SZXN1bWVFdmVudF0gLSBNZXNzYWdlIHRoYXQgaXMgZW1pdHRlZCBhZnRlclxyXG4gKiBlYWNoIGNhbGwgdG8gW3Jlc3VtZV17QGxpbmsgQWJzdHJhY3RUZXh0VG9TcGVlY2hGZWF0dXJlI3Jlc3VtZX0uIFRoZSBzcGVlY2ggdGhhdCB3YXNcclxuICogcmVzdW1lZCBpcyBzdXBwbGllZCBhcyBhbiBhcmd1bWVudCB0byBsaXN0ZW5lciBmdW5jdGlvbnMuXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbRVZFTlRTLmludGVycnVwdD1vbkludGVycnVwdEV2ZW50XSAtIE1lc3NhZ2UgdGhhdCBpcyBlbWl0dGVkXHJcbiAqIGlmIHRoZXJlIGlzIGEgY3VycmVudCBzcGVlY2ggaW4gcHJvZ3Jlc3MgYW5kIFtwbGF5XXtAbGluayBBYnN0cmFjdFRleHRUb1NwZWVjaEZlYXR1cmUjcGxheX1cclxuICogb3IgW3Jlc3VtZV17QGxpbmsgQWJzdHJhY3RUZXh0VG9TcGVlY2hGZWF0dXJlI3Jlc3VtZX0gYXJlIGV4ZWN1dGVkIGZvciBhIG5ldyBzcGVlY2guXHJcbiAqIFRoZSBzcGVlY2ggdGhhdCB3YXMgaW50ZXJydXB0ZWQgaXMgc3VwcGxpZWQgYXMgYW4gYXJndW1lbnQgdG8gbGlzdGVuZXIgZnVuY3Rpb25zLlxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW0VWRU5UUy5zdG9wPW9uU3RvcEV2ZW50XSAtIE1lc3NhZ2UgdGhhdCBpcyBlbWl0dGVkIGFmdGVyXHJcbiAqIGVhY2ggY2FsbCB0byBbc3RvcF17QGxpbmsgQWJzdHJhY3RUZXh0VG9TcGVlY2hGZWF0dXJlI3N0b3B9IGFuZCB3aGVuIGEgc3BlZWNoIHJlYWNoZXNcclxuICogdGhlIGVuZCBvZiBwbGF5YmFjay4gVGhlIHNwZWVjaCB0aGF0IHdhcyBzdG9wcGVkIGlzIHN1cHBsaWVkIGFzIGFuIGFyZ3VtZW50XHJcbiAqIHRvIGxpc3RlbmVyIGZ1bmN0aW9ucy5cclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtFVkVOVFMuc2VudGVuY2U9b25TZW50ZW5jZUV2ZW50XSAtIE1lc3NhZ2UgdGhhdCBpcyBlbWl0dGVkXHJcbiAqIGVhY2ggdGltZSBhIHNlbnRlbmNlIHNwZWVjaG1hcmsgaXMgZW5jb3VudGVyZWQgd2hvc2UgdGltZXN0YW1wIG1hdGNoZXMgdXAgd2l0aFxyXG4gKiB0aGUgc3BlZWNoIGF1ZGlvJ3MgY3VycmVudCB0aW1lLiBUaGUgc2VudGVuY2Ugc3BlZWNobWFyayBvYmplY3QgaXMgc3VwcGxpZWQgYXNcclxuICogYW4gYXJndW1lbnQgdG8gbGlzdGVuZXIgZnVuY3Rpb25zLlxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW0VWRU5UUy53b3JkPW9uV29yZEV2ZW50XSAtIE1lc3NhZ2UgdGhhdCBpcyBlbWl0dGVkXHJcbiAqIGVhY2ggdGltZSBhIHdvcmQgc3BlZWNobWFyayBpcyBlbmNvdW50ZXJlZCB3aG9zZSB0aW1lc3RhbXAgbWF0Y2hlcyB1cCB3aXRoXHJcbiAqIHRoZSBzcGVlY2ggYXVkaW8ncyBjdXJyZW50IHRpbWUuIFRoZSB3b3JkIHNwZWVjaG1hcmsgb2JqZWN0IGlzIHN1cHBsaWVkIGFzXHJcbiAqIGFuIGFyZ3VtZW50IHRvIGxpc3RlbmVyIGZ1bmN0aW9ucy5cclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtFVkVOVFMudmlzZW1lPW9uVmlzZW1lRXZlbnRdIC0gTWVzc2FnZSB0aGF0IGlzIGVtaXR0ZWRcclxuICogZWFjaCB0aW1lIGEgdmlzZW1lIHNwZWVjaG1hcmsgaXMgZW5jb3VudGVyZWQgd2hvc2UgdGltZXN0YW1wIG1hdGNoZXMgdXAgd2l0aFxyXG4gKiB0aGUgc3BlZWNoIGF1ZGlvJ3MgY3VycmVudCB0aW1lLiBUaGUgdmlzZW1lIHNwZWVjaG1hcmsgb2JqZWN0IGlzIHN1cHBsaWVkIGFzXHJcbiAqIGFuIGFyZ3VtZW50IHRvIGxpc3RlbmVyIGZ1bmN0aW9ucy5cclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtFVkVOVFMuc3NtbD1vblNzbWxFdmVudF0gLSBNZXNzYWdlIHRoYXQgaXMgZW1pdHRlZFxyXG4gKiBlYWNoIHRpbWUgYSBzc21sIHNwZWVjaG1hcmsgaXMgZW5jb3VudGVyZWQgd2hvc2UgdGltZXN0YW1wIG1hdGNoZXMgdXAgd2l0aFxyXG4gKiB0aGUgc3BlZWNoIGF1ZGlvJ3MgY3VycmVudCB0aW1lLiBUaGUgc3NtbCBzcGVlY2htYXJrIG9iamVjdCBpcyBzdXBwbGllZCBhc1xyXG4gKiBhbiBhcmd1bWVudCB0byBsaXN0ZW5lciBmdW5jdGlvbnMuXHJcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBTRVJWSUNFUyAtIEFXUyBzZXJ2aWNlcyB0aGF0IGFyZSBuZWNlc3NhcnkgZm9yIHRoZSBmZWF0dXJlXHJcbiAqIHRvIGZ1bmN0aW9uLlxyXG4gKiBAcHJvcGVydHkge2V4dGVybmFsOlBvbGx5fSBTRVJWSUNFUy5wb2xseSAtIFRoZSBQb2xseSBzZXJ2aWNlIHRoYXQgaXMgdXNlZFxyXG4gKiB0byBzeW50aGVzaXplIHNwZWVjaG1hcmtzLiBXaWxsIGJlIHVuZGVmaW5lZCB1bnRpbCBbaW5pdGlhbGl6ZVNlcnZpY2Vde0BsaW5rIEFic3RyYWN0VGV4dFRvU3BlZWNoRmVhdHVyZS5pbml0aWFsaXplU2VydmljZX1cclxuICogaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IGV4ZWN1dGVkXHJcbiAqIEBwcm9wZXJ0eSB7ZXh0ZXJuYWw6UHJlc2lnbmVyfSBTRVJWSUNFUy5wcmVzaWduZXIgLSBUaGUgUG9sbHkgUHJlc2lnbmVyXHJcbiAqIG9iamVjdCB0aGF0IGlzIHVzZWQgdG8gc3ludGhlc2l6ZSBzcGVlY2ggYXVkaW8uIFdpbGwgYmUgdW5kZWZpbmVkIHVudGlsXHJcbiAqIFtpbml0aWFsaXplU2VydmljZV17QGxpbmsgQWJzdHJhY3RUZXh0VG9TcGVlY2hGZWF0dXJlLmluaXRpYWxpemVTZXJ2aWNlfVxyXG4gKiBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgZXhlY3V0ZWQuXHJcbiAqL1xyXG5jbGFzcyBBYnN0cmFjdFRleHRUb1NwZWVjaEZlYXR1cmUgZXh0ZW5kcyBBYnN0cmFjdEhvc3RGZWF0dXJlIHtcclxuICAvKipcclxuICAgKiBAY29uc3RydWN0b3JcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7Y29yZS9Ib3N0T2JqZWN0fSBob3N0IC0gSG9zdCBvYmplY3QgbWFuYWdpbmcgdGhlIGZlYXR1cmUuXHJcbiAgICogQHBhcmFtIHtPYmplY3Q9fSBvcHRpb25zIC0gT3B0aW9ucyB0aGF0IHdpbGwgYmUgc2VudCB0byBQb2xseSBmb3IgZWFjaCBzcGVlY2guXHJcbiAgICogQHBhcmFtIHtzdHJpbmc9fSBvcHRpb25zLnZvaWNlIC0gVGhlIG5hbWUgb2YgdGhlIFBvbGx5IHZvaWNlIHRvIHVzZSBmb3IgYWxsIHNwZWVjaC5cclxuICAgKiBAcGFyYW0ge3N0cmluZz19IG9wdGlvbnMuZW5naW5lIC0gVGhlIG5hbWUgb2YgdGhlIFBvbGx5IGVuZ2luZSB0byB1c2UgZm9yIGFsbCBzcGVlY2guXHJcbiAgICogQHBhcmFtIHtzdHJpbmc9fSBvcHRpb25zLmxhbmd1YWdlIC0gVGhlIG5hbWUgb2YgdGhlIGxhbmd1YWdlIHRvIHVzZSBmb3IgYWxsIHNwZWVjaC5cclxuICAgKiBAcGFyYW0ge2F1ZGlvRm9ybWF0fSBbb3B0aW9ucy5hdWRpb0Zvcm1hdD0nbXAzJ10gLSBUaGUgZm9ybWF0IHRvIHVzZSBmb3IgZ2VuZXJhdGVkXHJcbiAgICogYXVkaW8gZm9yIGFsbCBzcGVlY2hlcy5cclxuICAgKiBAcGFyYW0ge3N0cmluZz19IG9wdGlvbnMuc2FtcGxlUmF0ZSAtIFRoZSBzYW1wbGUgcmF0ZSBmb3IgYXVkaW8gZmlsZXMgZm9yIGFsbFxyXG4gICAqIHNwZWVjaGVzLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5zcGVlY2htYXJrT2Zmc2V0PTBdIC0gQW1vdW50IG9mIHRpbWUgaW4gc2Vjb25kcyB0b1xyXG4gICAqIG9mZnNldCBzcGVlY2htYXJrIGV2ZW50IGVtaXNzaW9uIGZyb20gdGhlIGF1ZGlvLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5taW5FbmRNYXJrRHVyYXRpb249LjA1XSAtIFRoZSBtaW5pbXVtIGFtb3VudCBvZiB0aW1lXHJcbiAgICogaW4gc2Vjb25kcyB0aGF0IHRoZSBsYXN0IHNwZWVjaG1hcmsgb2YgZWFjaCB0eXBlIGluIGEgc3BlZWNoIGNhbiBoYXZlIGl0c1xyXG4gICAqIGR1cmF0aW9uIHByb3BlcnR5IHNldCB0by5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMudm9sdW1lPTFdIC0gVGhlIGRlZmF1bHQgdm9sdW1lIHRvIHBsYXkgc3BlZWNoIGF1ZGlvXHJcbiAgICogd2l0aC5cclxuICAgKi9cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIGhvc3QsXHJcbiAgICBvcHRpb25zID0ge1xyXG4gICAgICB2b2ljZTogdW5kZWZpbmVkLFxyXG4gICAgICBlbmdpbmU6IHVuZGVmaW5lZCxcclxuICAgICAgbGFuZ3VhZ2U6IHVuZGVmaW5lZCxcclxuICAgICAgYXVkaW9Gb3JtYXQ6ICdtcDMnLFxyXG4gICAgICBzYW1wbGVSYXRlOiB1bmRlZmluZWQsXHJcbiAgICAgIHNwZWVjaG1hcmtPZmZzZXQ6IDAsXHJcbiAgICAgIG1pbkVuZE1hcmtEdXJhdGlvbjogMC4wNSxcclxuICAgICAgdm9sdW1lOiAxLFxyXG4gICAgfVxyXG4gICkge1xyXG4gICAgc3VwZXIoaG9zdCk7XHJcblxyXG4gICAgdGhpcy5fc3BlZWNoQ2FjaGUgPSB7fTtcclxuICAgIHRoaXMuX2N1cnJlbnRTcGVlY2ggPSBudWxsO1xyXG4gICAgdGhpcy5fY3VycmVudFByb21pc2UgPSBudWxsO1xyXG4gICAgdGhpcy5faXNWYWxpZGF0ZWQgPSBmYWxzZTtcclxuICAgIHRoaXMuc3BlZWNobWFya09mZnNldCA9IE51bWJlci5pc05hTihOdW1iZXIob3B0aW9ucy5zcGVlY2htYXJrT2Zmc2V0KSlcclxuICAgICAgPyAwXHJcbiAgICAgIDogTnVtYmVyKG9wdGlvbnMuc3BlZWNobWFya09mZnNldCk7XHJcbiAgICB0aGlzLm1pbkVuZE1hcmtEdXJhdGlvbiA9IE51bWJlci5pc05hTihOdW1iZXIob3B0aW9ucy5taW5FbmRNYXJrRHVyYXRpb24pKVxyXG4gICAgICA/IDBcclxuICAgICAgOiBOdW1iZXIob3B0aW9ucy5taW5FbmRNYXJrRHVyYXRpb24pO1xyXG4gICAgdGhpcy52b2x1bWUgPSBOdW1iZXIuaXNOYU4oTnVtYmVyKG9wdGlvbnMudm9sdW1lKSlcclxuICAgICAgPyAxXHJcbiAgICAgIDogTnVtYmVyKG9wdGlvbnMudm9sdW1lKTtcclxuICAgIHRoaXMuX3Byb21pc2VzID0ge1xyXG4gICAgICB2b2x1bWU6IERlZmVycmVkLnJlc29sdmUoKSxcclxuICAgIH07XHJcbiAgICB0aGlzLl92b2x1bWVQYXVzZWQgPSBmYWxzZTtcclxuXHJcbiAgICAvLyBTZXQgZGVmYXVsdCBvcHRpb25zIGZvciBlYWNoIHNwZWVjaFxyXG4gICAgdGhpcy5fdm9pY2UgPSBvcHRpb25zLnZvaWNlIHx8IHRoaXMuY29uc3RydWN0b3IuUE9MTFlfREVGQVVMVFMuVm9pY2VJZDtcclxuICAgIHRoaXMuX2xhbmd1YWdlID0gb3B0aW9ucy5sYW5ndWFnZSB8fCB0aGlzLmNvbnN0cnVjdG9yLlBPTExZX0RFRkFVTFRTLkxhbmd1YWdlTmFtZTtcclxuICAgIHRoaXMuX2VuZ2luZSA9IGVuZ2luZXMuaW5jbHVkZXMob3B0aW9ucy5lbmdpbmUpXHJcbiAgICAgID8gb3B0aW9ucy5lbmdpbmVcclxuICAgICAgOiB0aGlzLmNvbnN0cnVjdG9yLlBPTExZX0RFRkFVTFRTLkVuZ2luZTtcclxuICAgIHRoaXMuX2F1ZGlvRm9ybWF0ID0gYXVkaW9Gb3JtYXRzLmluY2x1ZGVzKG9wdGlvbnMuYXVkaW9Gb3JtYXQpXHJcbiAgICAgID8gb3B0aW9ucy5hdWRpb0Zvcm1hdFxyXG4gICAgICA6IHRoaXMuY29uc3RydWN0b3IuUE9MTFlfREVGQVVMVFMuT3V0cHV0Rm9ybWF0O1xyXG4gICAgdGhpcy5fc2FtcGxlUmF0ZSA9IHNhbXBsZVJhdGVzW3RoaXMuX2F1ZGlvRm9ybWF0XS5yYXRlcy5pbmNsdWRlcyhcclxuICAgICAgb3B0aW9ucy5zYW1wbGVSYXRlXHJcbiAgICApXHJcbiAgICAgID8gb3B0aW9ucy5zYW1wbGVSYXRlXHJcbiAgICAgIDogdGhpcy5jb25zdHJ1Y3Rvci5QT0xMWV9ERUZBVUxUUy5TYW1wbGVSYXRlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU3RvcmUgUG9sbHksIFByZXNpZ25lciBhbmQgQVdTIFNESyBWZXJzaW9uIGZvciB1c2UgYWNyb3NzIGFsbCBpbnN0YW5jZXMuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge2V4dGVybmFsOlBvbGx5fSBwb2xseSAtIFBvbGx5IGluc3RhbmNlIHRvIHVzZSB0byBnZW5lcmF0ZSBzcGVlY2htYXJrcy5cclxuICAgKiBAcGFyYW0ge2V4dGVybmFsOlByZXNpZ25lcn0gcHJlc2lnbmVyIC0gUHJlc2lnbmVyIGluc3RhbmNlIHRvIHVzZSB0byBnZW5lcmF0ZVxyXG4gICAqIGF1ZGlvIFVSTHMuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHZlcnNpb24gLSBWZXJzaW9uIG9mIHRoZSBBV1MgU0RLIHRvIHVzZSB0byB2YWxpZGF0ZSB2b2ljZSBvcHRpb25zLlxyXG4gICAqL1xyXG4gIHN0YXRpYyBpbml0aWFsaXplU2VydmljZShwb2xseSwgcHJlc2lnbmVyLCB2ZXJzaW9uKSB7XHJcbiAgICAvLyBNYWtlIHN1cmUgYWxsIHdlcmUgZGVmaW5lZFxyXG4gICAgaWYgKFxyXG4gICAgICBwb2xseSA9PT0gdW5kZWZpbmVkXHJcbiAgICAgIHx8IHByZXNpZ25lciA9PT0gdW5kZWZpbmVkXHJcbiAgICAgIHx8IHZlcnNpb24gPT09IHVuZGVmaW5lZFxyXG4gICAgKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICAnQ2Fubm90IGluaXRpYWxpemUgVGV4dFRvU3BlZWNoIGZlYXR1cmUuIEFsbCBhcmd1bWVudHMgbXVzdCBiZSBkZWZpbmVkLidcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBBZGQgc3VtZXJpYW4gaG9zdHMgdXNlci1hZ2VudFxyXG4gICAgaWYgKHBvbGx5LmNvbmZpZykge1xyXG4gICAgICBwb2xseS5jb25maWcuY3VzdG9tVXNlckFnZW50ID0gdGhpcy5fd2l0aEN1c3RvbVVzZXJBZ2VudChcclxuICAgICAgICBwb2xseS5jb25maWcuY3VzdG9tVXNlckFnZW50XHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICBpZiAocHJlc2lnbmVyLnNlcnZpY2UgJiYgcHJlc2lnbmVyLnNlcnZpY2UuY29uZmlnKSB7XHJcbiAgICAgIHByZXNpZ25lci5zZXJ2aWNlLmNvbmZpZy5jdXN0b21Vc2VyQWdlbnQgPSB0aGlzLl93aXRoQ3VzdG9tVXNlckFnZW50KFxyXG4gICAgICAgIHByZXNpZ25lci5zZXJ2aWNlLmNvbmZpZy5jdXN0b21Vc2VyQWdlbnRcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9pc1JlYWR5ID0gZmFsc2U7XHJcblxyXG4gICAgLy8gU3RvcmUgcGFyYW1ldGVyc1xyXG4gICAgdGhpcy5TRVJWSUNFUy5wb2xseSA9IHBvbGx5O1xyXG4gICAgdGhpcy5TRVJWSUNFUy5wcmVzaWduZXIgPSBwcmVzaWduZXI7XHJcbiAgICBhd3NWZXJzaW9uID0gdmVyc2lvbjtcclxuXHJcbiAgICAvLyBDbGVhciB0aGUgY3VycmVudCBwb2xseSBvYmplY3RzXHJcbiAgICBjb25zdCBhdmFpbGFibGVWb2ljZXMgPSB0aGlzLlBPTExZX1ZPSUNFUztcclxuICAgIGF2YWlsYWJsZVZvaWNlcy5sZW5ndGggPSAwO1xyXG5cclxuICAgIGNvbnN0IGF2YWlsYWJsZUxhbmd1YWdlcyA9IHRoaXMuUE9MTFlfTEFOR1VBR0VTO1xyXG4gICAgT2JqZWN0LmtleXMoYXZhaWxhYmxlTGFuZ3VhZ2VzKS5mb3JFYWNoKG5hbWUgPT4ge1xyXG4gICAgICBkZWxldGUgYXZhaWxhYmxlTGFuZ3VhZ2VzW25hbWVdO1xyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgYXZhaWxhYmxlTGFuZ3VhZ2VDb2RlcyA9IHRoaXMuUE9MTFlfTEFOR1VBR0VfQ09ERVM7XHJcbiAgICBPYmplY3Qua2V5cyhhdmFpbGFibGVMYW5ndWFnZUNvZGVzKS5mb3JFYWNoKG5hbWUgPT4ge1xyXG4gICAgICBkZWxldGUgYXZhaWxhYmxlTGFuZ3VhZ2VDb2Rlc1tuYW1lXTtcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIFJlLXBvcHVsYXRlIGFjY29yZGluZyB0byB2ZXJzaW9uXHJcbiAgICBjb25zdCBtaW5OZXVyYWxTZGsgPSB0aGlzLlBPTExZX01JTl9ORVVSQUxfVkVSU0lPTjtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5TRVJWSUNFUy5wb2xseVxyXG4gICAgICAuZGVzY3JpYmVWb2ljZXMoKVxyXG4gICAgICAucHJvbWlzZSgpXHJcbiAgICAgIC50aGVuKHJlc3BvbnNlID0+IHtcclxuICAgICAgICBjb25zdCBhbGxDb2RlcyA9IHt9O1xyXG5cclxuICAgICAgICByZXNwb25zZS5Wb2ljZXMuZm9yRWFjaCh2b2ljZSA9PiB7XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIHZvaWNlLlN1cHBvcnRlZEVuZ2luZXMuaW5jbHVkZXMoJ3N0YW5kYXJkJylcclxuICAgICAgICAgICAgfHwgdmVyc2lvbiA+PSBtaW5OZXVyYWxTZGtcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBhdmFpbGFibGVWb2ljZXMucHVzaCh2b2ljZSk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgYXZhaWxhYmxlVm9pY2VzLmZvckVhY2godm9pY2UgPT4ge1xyXG4gICAgICAgICAgICBhdmFpbGFibGVMYW5ndWFnZXNbdm9pY2UuTGFuZ3VhZ2VOYW1lXSA9IHZvaWNlLkxhbmd1YWdlQ29kZTtcclxuICAgICAgICAgICAgYWxsQ29kZXNbdm9pY2UuTGFuZ3VhZ2VDb2RlXSA9IHZvaWNlLkxhbmd1YWdlTmFtZTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBPYmplY3QuZW50cmllcyhhdmFpbGFibGVMYW5ndWFnZXMpLmZvckVhY2goKFtuYW1lLCBjb2RlXSkgPT4ge1xyXG4gICAgICAgICAgYXZhaWxhYmxlTGFuZ3VhZ2VDb2Rlc1tjb2RlXSA9IG5hbWU7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIC8vIE5vdGlmeSB0aGF0IHdlJ3JlIHJlYWR5IHRvIGdlbmVyYXRlIHNwZWVjaGVzXHJcbiAgICAgICAgdGhpcy5faXNSZWFkeSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5lbWl0KHRoaXMuRVZFTlRTLnJlYWR5KTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIGNsYXNzIGlzIGNhcGFibGUgb2YgZ2VuZXJhdGluZyBzcGVlY2ggYXVkaW8uIFBvbGx5LFxyXG4gICAqIFByZXNpZ25lciBhbmQgQVdTIFNESyB2ZXJzaW9uIG51bWJlciBtdXN0IGhhdmUgYmVlbiBkZWZpbmVkIHVzaW5nXHJcbiAgICogW2luaXRpYWxpemVTZXJ2aWNlXXtAbGluayBBYnN0cmFjdFRleHRUb1NwZWVjaEZlYXR1cmUuaW5pdGlhbGl6ZVNlcnZpY2V9LlxyXG4gICAqXHJcbiAgICogQHJlYWRvbmx5XHJcbiAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICovXHJcbiAgc3RhdGljIGdldCBpc1JlYWR5KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2lzUmVhZHk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSB0ZXh0IG9mIHRoZSBjdXJyZW50bHkgcGxheWluZyBzcGVlY2guXHJcbiAgICpcclxuICAgKiBAcmVhZG9ubHlcclxuICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAqL1xyXG4gIGdldCBjdXJyZW50U3BlZWNoKCkge1xyXG4gICAgaWYgKHRoaXMuX2N1cnJlbnRTcGVlY2gpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRTcGVlY2gudGV4dDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyBhbmQgc2V0cyB0aGUgbnVtYmVyIG9mIHNlY29uZHMgdG8gb2Zmc2V0IHNwZWVjaG1hcmsgZW1pc3Npb24uXHJcbiAgICpcclxuICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAqL1xyXG4gIGdldCBzcGVlY2htYXJrT2Zmc2V0KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NwZWVjaG1hcmtPZmZzZXQ7XHJcbiAgfVxyXG5cclxuICBzZXQgc3BlZWNobWFya09mZnNldChvZmZzZXQpIHtcclxuICAgIHRoaXMuX3NwZWVjaG1hcmtPZmZzZXQgPSBvZmZzZXQ7XHJcblxyXG4gICAgaWYgKHRoaXMuX2N1cnJlbnRTcGVlY2gpIHtcclxuICAgICAgdGhpcy5fY3VycmVudFNwZWVjaC5zcGVlY2htYXJrT2Zmc2V0ID0gb2Zmc2V0O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyBhbmQgc2V0cyB0aGUgVGhlIG1pbmltdW0gYW1vdW50IG9mIHRpbWUgaW4gc2Vjb25kcyB0aGF0IHRoZSBsYXN0XHJcbiAgICogc3BlZWNobWFyayBvZiBlYWNoIHR5cGUgaW4gYSBzcGVlY2ggY2FuIGhhdmUgaXRzIGR1cmF0aW9uIHByb3BlcnR5IHNldCB0by5cclxuICAgKlxyXG4gICAqIEB0eXBlIG51bWJlclxyXG4gICAqL1xyXG4gIGdldCBtaW5FbmRNYXJrRHVyYXRpb24oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fbWluRW5kTWFya0R1cmF0aW9uIC8gMTAwMDtcclxuICB9XHJcblxyXG4gIHNldCBtaW5FbmRNYXJrRHVyYXRpb24oZHVyYXRpb24pIHtcclxuICAgIHRoaXMuX21pbkVuZE1hcmtEdXJhdGlvbiA9IGR1cmF0aW9uICogMTAwMDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFwcGVuZHMgdGhlIFN1bWVyaWFuIEhvc3RzIGN1c3RvbSB1c2VyLWFnZW50IHRvIGEgc3RyaW5nIGlmIGl0IGlzIG5vdFxyXG4gICAqIGFscmVhZHkgcHJlc2VudC5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gY3VycmVudFVzZXJBZ2VudCAtIFN0cmluZyB0byBhcHBlbmQgdG8gaWYgbmVlZGVkLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge3N0cmluZ31cclxuICAgKi9cclxuICBzdGF0aWMgX3dpdGhDdXN0b21Vc2VyQWdlbnQoY3VycmVudFVzZXJBZ2VudCkge1xyXG4gICAgY29uc3Qgc3VtZXJpYW5Ib3N0c1VzZXJBZ2VudCA9ICdyZXF1ZXN0LXNvdXJjZS9TdW1lcmlhbkhvc3RzJztcclxuXHJcbiAgICBpZiAoY3VycmVudFVzZXJBZ2VudCA9PSBudWxsKSB7XHJcbiAgICAgIHJldHVybiBzdW1lcmlhbkhvc3RzVXNlckFnZW50O1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjdXJyZW50VXNlckFnZW50LmluZGV4T2Yoc3VtZXJpYW5Ib3N0c1VzZXJBZ2VudCkgIT09IC0xKSB7XHJcbiAgICAgIHJldHVybiBjdXJyZW50VXNlckFnZW50O1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBjdXJyZW50VXNlckFnZW50LmNvbmNhdCgnICcsIHN1bWVyaWFuSG9zdHNVc2VyQWdlbnQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2hlY2tzIGlmIGEgZ2l2ZW4gZW5naW5lIHR5cGUgaXMgY29tcGF0aWJsZSB3aXRoIHRoZSBBV1MgU0RLIHZlcnNpb24uIElmIGl0XHJcbiAgICogaXMsIHJldHVybiB0aGUgb3JpZ2luYWwgdmFsdWUuIE90aGVyd2lzZSByZXR1cm4gYSBkZWZhdWx0LlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBlbmdpbmUgLSBUaGUgdHlwZSBvZiBQb2xseSB2b2ljZSBlbmdpbmUgdG8gdmFsaWRhdGUuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxyXG4gICAqL1xyXG4gIF92YWxpZGF0ZUVuZ2luZShlbmdpbmUpIHtcclxuICAgIC8vIERlZmF1bHQgdG8gdGhlIHN0YW5kYXJkIGVuZ2luZSBpZiBuZXVyYWwgaXMgbm90IGF2YWlsYWJsZSBmb3IgdGhpcyB2ZXJzaW9uXHJcbiAgICBpZiAoXHJcbiAgICAgIGVuZ2luZSA9PT0gdW5kZWZpbmVkXHJcbiAgICAgIHx8IHRoaXMuY29uc3RydWN0b3IuQVdTX1ZFUlNJT04gPCB0aGlzLmNvbnN0cnVjdG9yLlBPTExZX01JTl9ORVVSQUxfVkVSU0lPTlxyXG4gICAgKSB7XHJcbiAgICAgIGVuZ2luZSA9IHRoaXMuY29uc3RydWN0b3IuUE9MTFlfREVGQVVMVFMuRW5naW5lO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBlbmdpbmU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDaGVja3MgaWYgYSBnaXZlbiBhdWRpbyBmb3JtYXQgdHlwZSBpcyBjb21wYXRpYmxlIHdpdGggUG9sbHkuIElmIGl0IGlzLCByZXR1cm5cclxuICAgKiB0aGUgb3JpZ2luYWwgdmFsdWUuIE90aGVyd2lzZSByZXR1cm4gYSBkZWZhdWx0LlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBlbmdpbmUgLSBUaGUgdHlwZSBvZiBQb2xseSB2b2ljZSBlbmdpbmUgdG8gdmFsaWRhdGUuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxyXG4gICAqL1xyXG4gIF92YWxpZGF0ZUZvcm1hdChmb3JtYXQpIHtcclxuICAgIGlmIChmb3JtYXQgPT09IHVuZGVmaW5lZCB8fCAhYXVkaW9Gb3JtYXRzLmluY2x1ZGVzKGZvcm1hdCkpIHtcclxuICAgICAgZm9ybWF0ID0gdGhpcy5jb25zdHJ1Y3Rvci5QT0xMWV9ERUZBVUxUUy5PdXRwdXRGb3JtYXQ7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZvcm1hdDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENoZWNrcyBpZiBhIGdpdmVuIGF1ZGlvIHNhbXBsaW5nIHJhdGUgaXMgY29tcGF0aWJsZSB3aXRoIHRoZSBjdXJyZW50IGF1ZGlvXHJcbiAgICogZm9ybWF0LiBJZiBpdCBpcywgcmV0dXJuIHRoZSBvcmlnaW5hbCB2YWx1ZS4gT3RoZXJ3aXNlIHJldHVybiBhIGRlZmF1bHQuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGVuZ2luZSAtIFRoZSB0eXBlIG9mIFBvbGx5IHZvaWNlIGVuZ2luZSB0byB2YWxpZGF0ZS5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XHJcbiAgICovXHJcbiAgX3ZhbGlkYXRlUmF0ZShyYXRlKSB7XHJcbiAgICAvLyBVc2UgZGVmYXVsdCBpZiBzcGVjaWZpZWQgc2FtcGxlIHJhdGUgaXMgbm90IHZhbGlkIGZvciB0aGUgYXVkaW8gZm9ybWF0XHJcbiAgICBpZiAoXHJcbiAgICAgIHJhdGUgPT09IHVuZGVmaW5lZFxyXG4gICAgICB8fCAhc2FtcGxlUmF0ZXNbdGhpcy5fYXVkaW9Gb3JtYXRdLnJhdGVzLmluY2x1ZGVzKHJhdGUpXHJcbiAgICApIHtcclxuICAgICAgcmF0ZSA9IHNhbXBsZVJhdGVzW3RoaXMuX2F1ZGlvRm9ybWF0XS5kZWZhdWx0c1t0aGlzLl9lbmdpbmVdO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiByYXRlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2hlY2tzIGlmIGEgZ2l2ZW4gUG9sbHkgdm9pY2UgaWQgaXMgY29tcGF0aWJsZSB3aXRoIHRoZSBjdXJyZW50IFBvbGx5IGVuZ2luZS5cclxuICAgKiBJZiBpdCBpcywgcmV0dXJuIHRoZSBvcmlnaW5hbCB2YWx1ZS4gT3RoZXJ3aXNlIHJldHVybiBhIGRlZmF1bHQuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGVuZ2luZSAtIFRoZSB0eXBlIG9mIFBvbGx5IHZvaWNlIGVuZ2luZSB0byB2YWxpZGF0ZS5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XHJcbiAgICovXHJcbiAgX3ZhbGlkYXRlVm9pY2Uodm9pY2VJZCkge1xyXG4gICAgY29uc3Qgdm9pY2UgPSB0aGlzLmNvbnN0cnVjdG9yLlBPTExZX1ZPSUNFUy5maW5kKHYgPT4gdi5JZCA9PT0gdm9pY2VJZCk7XHJcblxyXG4gICAgLy8gVXNlIHRoZSBkZWZhdWx0IHZvaWNlIGlmIHRoZSB2b2ljZSBpc24ndCBzdXBwb3J0ZWQgYnkgdGhlIGVuZ2luZVxyXG4gICAgaWYgKHZvaWNlID09PSB1bmRlZmluZWQgfHwgIXZvaWNlLlN1cHBvcnRlZEVuZ2luZXMuaW5jbHVkZXModGhpcy5fZW5naW5lKSkge1xyXG4gICAgICB2b2ljZUlkID0gdGhpcy5jb25zdHJ1Y3Rvci5QT0xMWV9ERUZBVUxUUy5Wb2ljZUlkO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB2b2ljZUlkO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2hlY2tzIGlmIGEgZ2l2ZW4gUG9sbHkgbGFuZ3VhZ2UgaXMgY29tcGF0aWJsZSB3aXRoIHRoZSBjdXJyZW50IFBvbGx5IHZvaWNlLlxyXG4gICAqIElmIGl0IGlzLCByZXR1cm4gdGhlIG9yaWdpbmFsIHZhbHVlLiBPdGhlcndpc2UgcmV0dXJuIGEgZGVmYXVsdC5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gZW5naW5lIC0gVGhlIHR5cGUgb2YgUG9sbHkgdm9pY2UgZW5naW5lIHRvIHZhbGlkYXRlLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge3N0cmluZ31cclxuICAgKi9cclxuICBfdmFsaWRhdGVMYW5ndWFnZShsYW5ndWFnZSkge1xyXG4gICAgY29uc3Qgdm9pY2UgPSB0aGlzLmNvbnN0cnVjdG9yLlBPTExZX1ZPSUNFUy5maW5kKHYgPT4gdi5JZCA9PT0gdGhpcy5fdm9pY2UpO1xyXG4gICAgY29uc3QgbGFuZ3VhZ2VDb2RlID0gdGhpcy5jb25zdHJ1Y3Rvci5QT0xMWV9MQU5HVUFHRVNbbGFuZ3VhZ2VdO1xyXG5cclxuICAgIC8vIEZpbmQgdGhlIGxhbmd1YWdlcyBhdmFpbGFibGUgZm9yIHRoZSBjdXJyZW50IHZvaWNlXHJcbiAgICBjb25zdCBhdmFpbGFibGVDb2RlcyA9IFt2b2ljZS5MYW5ndWFnZUNvZGVdO1xyXG4gICAgaWYgKHZvaWNlLkFkZGl0aW9uYWxMYW5ndWFnZUNvZGVzKSB7XHJcbiAgICAgIGF2YWlsYWJsZUNvZGVzLnB1c2goLi4udm9pY2UuQWRkaXRpb25hbExhbmd1YWdlQ29kZXMpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIElmIHRoZSBjdXJyZW50IHZvaWNlIGRvZXNuJ3Qgc3VwcG9ydCB0aGUgbGFuZ3VhZ2UsIHVzZSBpdHMgZGVmYXVsdFxyXG4gICAgaWYgKCFhdmFpbGFibGVDb2Rlcy5pbmNsdWRlcyhsYW5ndWFnZUNvZGUpKSB7XHJcbiAgICAgIGxhbmd1YWdlID0gdGhpcy5jb25zdHJ1Y3Rvci5QT0xMWV9MQU5HVUFHRV9DT0RFU1t2b2ljZS5MYW5ndWFnZUNvZGVdO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBsYW5ndWFnZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFZhbGlkYXRlIHRoZSBjdXJyZW50IFBvbGx5IG9wdGlvbnMgdG8gbWFrZSBzdXJlIHRoZXkgYXJlIGNvbXBhdGlibGUgd2l0aCBlYWNoXHJcbiAgICogb3RoZXIuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIF92YWxpZGF0ZSgpIHtcclxuICAgIC8vIFZhbGlkYXRlIHNwZWVjaCBwYXJhbWV0ZXJzXHJcbiAgICB0aGlzLl9lbmdpbmUgPSB0aGlzLl92YWxpZGF0ZUVuZ2luZSh0aGlzLl9lbmdpbmUpO1xyXG4gICAgdGhpcy5fYXVkaW9Gb3JtYXQgPSB0aGlzLl92YWxpZGF0ZUZvcm1hdCh0aGlzLl9hdWRpb0Zvcm1hdCk7XHJcbiAgICB0aGlzLl9zYW1wbGVSYXRlID0gdGhpcy5fdmFsaWRhdGVSYXRlKHRoaXMuX3NhbXBsZVJhdGUpO1xyXG4gICAgdGhpcy5fdm9pY2UgPSB0aGlzLl92YWxpZGF0ZVZvaWNlKHRoaXMuX3ZvaWNlKTtcclxuICAgIHRoaXMuX2xhbmd1YWdlID0gdGhpcy5fdmFsaWRhdGVMYW5ndWFnZSh0aGlzLl9sYW5ndWFnZSk7XHJcbiAgICB0aGlzLl9pc1ZhbGlkYXRlZCA9IHRydWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gYW4gb2JqZWN0IGNvbnRhaW5pbmcgcGFyYW1ldGVycyBjb21wYXRpYmxlIHdpdGggUG9sbHkuc3ludGhlc2l6ZVNwZWVjaC5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7T2JqZWN0fVxyXG4gICAqL1xyXG4gIF9nZXRDb25maWcoKSB7XHJcbiAgICAvLyBNYWtlIHN1cmUgcGFyYW1ldGVycyBoYXZlIGJlZW4gdmFsaWRhdGVkXHJcbiAgICBpZiAodGhpcy5jb25zdHJ1Y3Rvci5pc1JlYWR5ICYmICF0aGlzLl9pc1ZhbGlkYXRlZCkge1xyXG4gICAgICB0aGlzLl92YWxpZGF0ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIENyZWF0ZSBhIGNvbmZpZyBvYmplY3QgY29tcGF0aWJsZSB3aXRoIFBvbGx5XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBFbmdpbmU6IHRoaXMuX2VuZ2luZSxcclxuICAgICAgT3V0cHV0Rm9ybWF0OiB0aGlzLl9hdWRpb0Zvcm1hdCxcclxuICAgICAgU2FtcGxlUmF0ZTogdGhpcy5fc2FtcGxlUmF0ZSxcclxuICAgICAgVm9pY2VJZDogdGhpcy5fdm9pY2UsXHJcbiAgICAgIExhbmd1YWdlQ29kZTogdGhpcy5jb25zdHJ1Y3Rvci5QT0xMWV9MQU5HVUFHRVNbdGhpcy5fbGFuZ3VhZ2VdLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZSBQb2xseSBwYXJhbWV0ZXJzIHdpdGggb3B0aW9ucyBmcm9tIGEgZ2l2ZW4gY29uZmlnLiBBbGwgc3RvcmVkIHNwZWVjaGVzXHJcbiAgICogd2lsbCBiZSB1cGRhdGVkIHRvIHVzZSB0aGUgbmV3IHBhcmFtZXRlcnMsIHVubGVzcyB0aGUgc3BlZWNoIHRleHQgaXMgY29udGFpbmVkXHJcbiAgICogaW4gdGhlICdza2lwU3BlZWNoZXMnIHBhcmFtZXRlci5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge09iamVjdH0gY29uZmlnIC0gUG9sbHkgcGFyYW1ldGVyIG9wdGlvbnMgdG8gb3ZlcndyaXRlLlxyXG4gICAqIEBwYXJhbSB7QXJyYXkuPHN0cmluZz59IHNraXBTcGVlY2hlcyAtIFRleHQgb2YgYW55IHNwZWVjaGVzIHRoYXQgc2hvdWxkIG5vdFxyXG4gICAqIGhhdmUgcGFyYW1ldGVycyB1cGRhdGVkLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge09iamVjdH1cclxuICAgKi9cclxuICBfdXBkYXRlQ29uZmlnKGNvbmZpZywgc2tpcFNwZWVjaGVzID0gW10pIHtcclxuICAgIGNvbnN0IGN1cnJlbnRDb25maWcgPSB0aGlzLl9nZXRDb25maWcoKTtcclxuICAgIGlmICghY29uZmlnKSB7XHJcbiAgICAgIHJldHVybiBjdXJyZW50Q29uZmlnO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX2lzVmFsaWRhdGVkID0gZmFsc2U7XHJcbiAgICBjb25zdCBjdXJyZW50Q29uZmlnU3RyID0gSlNPTi5zdHJpbmdpZnkoY3VycmVudENvbmZpZyk7XHJcblxyXG4gICAgLy8gVXBkYXRlIG9wdGlvbnNcclxuICAgIGlmIChjb25maWcuRW5naW5lKSB7XHJcbiAgICAgIHRoaXMuX2VuZ2luZSA9IGNvbmZpZy5FbmdpbmU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNvbmZpZy5hdWRpb0Zvcm1hdCkge1xyXG4gICAgICB0aGlzLl9hdWRpb0Zvcm1hdCA9IGNvbmZpZy5hdWRpb0Zvcm1hdDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoY29uZmlnLlNhbXBsZVJhdGUpIHtcclxuICAgICAgdGhpcy5fc2FtcGxlUmF0ZSA9IGNvbmZpZy5TYW1wbGVSYXRlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjb25maWcuVm9pY2VJZCkge1xyXG4gICAgICB0aGlzLl92b2ljZSA9IGNvbmZpZy5Wb2ljZUlkO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjb25maWcuTGFuZ3VhZ2UpIHtcclxuICAgICAgdGhpcy5fbGFuZ3VhZ2UgPSBjb25maWcuTGFuZ3VhZ2U7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gVmFsaWRhdGUgdGhlIGNvbmZpZ1xyXG4gICAgY29uc3QgdmFsaWRDb25maWcgPSB0aGlzLl9nZXRDb25maWcoKTtcclxuXHJcbiAgICAvLyBFeGl0IGlmIG5vdGhpbmcgaGFzIGNoYW5nZWRcclxuICAgIGNvbnN0IGNvbmZpZ1N0ciA9IEpTT04uc3RyaW5naWZ5KHZhbGlkQ29uZmlnKTtcclxuICAgIGlmIChjdXJyZW50Q29uZmlnU3RyID09PSBjb25maWdTdHIpIHtcclxuICAgICAgdGhpcy5faXNWYWxpZGF0ZWQgPSB0cnVlO1xyXG4gICAgICByZXR1cm4gdmFsaWRDb25maWc7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gVXBkYXRlIGFsbCBjYWNoZWQgY29uZmlnc1xyXG4gICAgT2JqZWN0LmVudHJpZXModGhpcy5fc3BlZWNoQ2FjaGUpLmZvckVhY2goKFt0ZXh0LCBzcGVlY2hdKSA9PiB7XHJcbiAgICAgIC8vIENoZWNrIGlmIHRoaXMgaXMgYSBza2lwcGVkIHNwZWVjaFxyXG4gICAgICBpZiAoc2tpcFNwZWVjaGVzLmluY2x1ZGVzKHRleHQpKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBzcGVlY2hDb25maWdTdHIgPSBKU09OLnN0cmluZ2lmeShzcGVlY2guY29uZmlnKTtcclxuXHJcbiAgICAgIC8vIFVwZGF0ZSB0aGUgc3BlZWNoIHdpdGggbmV3IHBhcmFtZXRlcnNcclxuICAgICAgaWYgKHNwZWVjaENvbmZpZ1N0ciAhPT0gY29uZmlnU3RyKSB7XHJcbiAgICAgICAgdGhpcy5fdXBkYXRlU3BlZWNoKHRleHQsIHZhbGlkQ29uZmlnKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIHZhbGlkQ29uZmlnO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlIGFuIGV4aXN0aW5nIHNwZWVjaCwgb3IgYWRkIGEgbmV3IHNwZWVjaCB3aXRoIG5ldyBQb2xseSBwYXJhbWV0ZXJzIHdpdGhcclxuICAgKiBvcHRpb25zIGZyb20gYSBnaXZlbiBjb25maWcuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSBUaGUgdGV4dCBvZiB0aGUgc3BlZWNoIHRvIHVwZGF0ZS5cclxuICAgKiBAcGFyYW0ge09iamVjdH0gY29uZmlnIC0gUG9sbHkgcGFyYW1ldGVyIG9wdGlvbnMgdG8gdXBkYXRlLlxyXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2ZvcmNlPWZhbHNlXSAtIFdoZXRoZXIgdG8gZm9yY2UgdGhlIHNwZWVjaCB0byBiZSB1cGRhdGVkXHJcbiAgICogaWYgbm8gcGFyYW1ldGVycyBoYXZlIGNoYW5nZXMuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7QWJzdHJhY3RTcGVlY2h9XHJcbiAgICovXHJcbiAgX3VwZGF0ZVNwZWVjaCh0ZXh0LCBjb25maWcsIGZvcmNlID0gZmFsc2UpIHtcclxuICAgIGNvbnN0IHNwZWVjaCA9IHRoaXMuX3NwZWVjaENhY2hlW3RleHRdIHx8IHt9O1xyXG4gICAgLy8gRXhpdCBpZiBub3RoaW5nIGhhcyBjaGFuZ2VkIGFuZCBmb3JjZSBpcyBmYWxzZVxyXG4gICAgaWYgKFxyXG4gICAgICAhZm9yY2VcclxuICAgICAgJiYgY29uZmlnICE9PSB1bmRlZmluZWRcclxuICAgICAgJiYgc3BlZWNoLmNvbmZpZ1xyXG4gICAgICAmJiBKU09OLnN0cmluZ2lmeShjb25maWcpID09PSBKU09OLnN0cmluZ2lmeShzcGVlY2guY29uZmlnKVxyXG4gICAgKSB7XHJcbiAgICAgIHJldHVybiBzcGVlY2g7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ3JlYXRlIHNlcGFyYXRlIHBhcmFtZXRlcnMgZm9yIGF1ZGlvIGFuZCBzcGVlY2htYXJrIGdlbmVyYXRpb25cclxuICAgIGNvbnN0IGF1ZGlvUGFyYW1zID0ge1xyXG4gICAgICAuLi5jb25maWcsXHJcbiAgICAgIFRleHQ6IHRleHQsXHJcbiAgICAgIFRleHRUeXBlOiAnc3NtbCcsXHJcbiAgICB9O1xyXG4gICAgY29uc3Qgc3BlZWNobWFya1BhcmFtcyA9IHtcclxuICAgICAgLi4uYXVkaW9QYXJhbXMsXHJcbiAgICAgIE91dHB1dEZvcm1hdDogJ2pzb24nLFxyXG4gICAgICBTcGVlY2hNYXJrVHlwZXM6IHNwZWVjaG1hcmtUeXBlcyxcclxuICAgIH07XHJcblxyXG4gICAgLy8gR2VuZXJhdGUgYXVkaW8gYW5kIHNwZWVjaG1hcmtzXHJcbiAgICBzcGVlY2guY29uZmlnID0gY29uZmlnO1xyXG4gICAgc3BlZWNoLnByb21pc2UgPSBQcm9taXNlLmFsbChbXHJcbiAgICAgIHRoaXMuX3N5bnRoZXNpemVTcGVlY2htYXJrcyhzcGVlY2htYXJrUGFyYW1zKSxcclxuICAgICAgdGhpcy5fc3ludGhlc2l6ZUF1ZGlvKGF1ZGlvUGFyYW1zKSxcclxuICAgIF0pLnRoZW4ocmVzdWx0cyA9PiB7XHJcbiAgICAgIHJldHVybiB0aGlzLl9jcmVhdGVTcGVlY2godGV4dCwgLi4ucmVzdWx0cyk7XHJcbiAgICB9KTtcclxuICAgIHRoaXMuX3NwZWVjaENhY2hlW3RleHRdID0gc3BlZWNoO1xyXG5cclxuICAgIHJldHVybiBzcGVlY2g7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGUgYSBuZXcgU3BlZWNoIG9iamVjdCBmb3IgdGhlIHNwZWFrZXIuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtUZXh0VG9TcGVlY2h9IHNwZWFrZXIgLSBUaGUgVGV4dFRvU3BlZWNoIGluc3RhbmNlIHRoYXQgd2lsbCBvd24gdGhlIHNwZWVjaC5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIFRleHQgb2YgdGhlIHNwZWVjaC5cclxuICAgKiBAcGFyYW0ge09iamVjdH0gc3BlZWNobWFya3MgLSBTcGVlY2htYXJrcyBmb3IgdGhlIHNwZWVjaC5cclxuICAgKiBAcGFyYW0ge09iamVjdH0gYXVkaW9Db25maWcgLSBBdWRpbyBmb3IgdGhlIHNwZWVjaC5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtBYnN0cmFjdFNwZWVjaH1cclxuICAgKi9cclxuICBfY3JlYXRlU3BlZWNoKHRleHQsIHNwZWVjaG1hcmtzLCBhdWRpb0NvbmZpZykge1xyXG4gICAgcmV0dXJuIG5ldyBTcGVlY2godGhpcywgdGV4dCwgc3BlZWNobWFya3MsIGF1ZGlvQ29uZmlnKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZSBwcmVzaWduZWQgVVJMIG9mIHNwZWVjaCBhdWRpbyBmb3IgdGhlIGdpdmVuIHNwZWVjaCB0ZXh0LlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXMgLSBQYXJhbWV0ZXJzIG9iamVjdCBjb21wYXRpYmxlIHdpdGggUG9sbHkuc3ludGhlc2l6ZVNwZWVjaC5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtEZWZlcnJlZH0gUmVzb2x2ZXMgd2l0aCBhbiBvYmplY3QgY29udGFpbmluZyB0aGUgYXVkaW8gVVJMLlxyXG4gICAqL1xyXG4gIF9zeW50aGVzaXplQXVkaW8ocGFyYW1zKSB7XHJcbiAgICByZXR1cm4gbmV3IERlZmVycmVkKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgdGhpcy5jb25zdHJ1Y3Rvci5TRVJWSUNFUy5wcmVzaWduZXIuZ2V0U3ludGhlc2l6ZVNwZWVjaFVybChcclxuICAgICAgICBwYXJhbXMsXHJcbiAgICAgICAgZnVuY3Rpb24gKGVycm9yLCB1cmwpIHtcclxuICAgICAgICAgIGlmICghZXJyb3IpIHtcclxuICAgICAgICAgICAgcmVzb2x2ZSh7IHVybCB9KTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJlamVjdChlcnJvcik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXRyaWV2ZXMgYW5kIHBhcnNlcyBzcGVlY2htYXJrcyBmb3IgdGhlIGdpdmVuIHNwZWVjaCB0ZXh0LlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXMgLSBQYXJhbWV0ZXJzIG9iamVjdCBjb21wYXRpYmxlIHdpdGggUG9sbHkuc3ludGhlc2l6ZVNwZWVjaC5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtEZWZlcnJlZH0gUmVzb2x2ZXMgd2l0aCBhbiBhcnJheSBvZiBzcGVlY2htYXJrIG9iamVjdHNcclxuICAgKi9cclxuICBfc3ludGhlc2l6ZVNwZWVjaG1hcmtzKHBhcmFtcykge1xyXG4gICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IuU0VSVklDRVMucG9sbHlcclxuICAgICAgLnN5bnRoZXNpemVTcGVlY2gocGFyYW1zKVxyXG4gICAgICAucHJvbWlzZSgpXHJcbiAgICAgIC50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgLy8gQ29udmVydCBjaGFyY29kZXMgdG8gc3RyaW5nXHJcbiAgICAgICAgY29uc3QganNvblN0cmluZyA9IEpTT04uc3RyaW5naWZ5KHJlc3VsdC5BdWRpb1N0cmVhbSk7XHJcbiAgICAgICAgY29uc3QganNvbiA9IEpTT04ucGFyc2UoanNvblN0cmluZyk7XHJcbiAgICAgICAgY29uc3QgZGF0YVN0ciA9IGpzb24uZGF0YS5tYXAoYyA9PiBTdHJpbmcuZnJvbUNoYXJDb2RlKGMpKS5qb2luKCcnKTtcclxuXHJcbiAgICAgICAgY29uc3QgbWFya1R5cGVzID0ge1xyXG4gICAgICAgICAgc2VudGVuY2U6IFtdLFxyXG4gICAgICAgICAgd29yZDogW10sXHJcbiAgICAgICAgICB2aXNlbWU6IFtdLFxyXG4gICAgICAgICAgc3NtbDogW10sXHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb25zdCBlbmRNYXJrVHlwZXMgPSB7XHJcbiAgICAgICAgICBzZW50ZW5jZTogbnVsbCxcclxuICAgICAgICAgIHdvcmQ6IG51bGwsXHJcbiAgICAgICAgICB2aXNlbWU6IG51bGwsXHJcbiAgICAgICAgICBzc21sOiBudWxsLFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIC8vIFNwbGl0IGJ5IGVuY2xvc2luZyB7fSB0byBjcmVhdGUgc3BlZWNobWFyayBvYmplY3RzXHJcbiAgICAgICAgY29uc3Qgc3BlZWNoTWFya3MgPSBbLi4uZGF0YVN0ci5tYXRjaEFsbCgvXFx7Lio/XFx9KD89XFxufCQpL2dtKV0ubWFwKFxyXG4gICAgICAgICAgbWF0Y2ggPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBtYXJrID0gSlNPTi5wYXJzZShtYXRjaFswXSk7XHJcblxyXG4gICAgICAgICAgICAvLyBTZXQgdGhlIGR1cmF0aW9uIG9mIHRoZSBsYXN0IHNwZWVjaG1hcmsgc3RvcmVkIG1hdGNoaW5nIHRoaXMgb25lJ3MgdHlwZVxyXG4gICAgICAgICAgICBjb25zdCBudW1NYXJrcyA9IG1hcmtUeXBlc1ttYXJrLnR5cGVdLmxlbmd0aDtcclxuICAgICAgICAgICAgaWYgKG51bU1hcmtzID4gMCkge1xyXG4gICAgICAgICAgICAgIGNvbnN0IGxhc3RNYXJrID0gbWFya1R5cGVzW21hcmsudHlwZV1bbnVtTWFya3MgLSAxXTtcclxuICAgICAgICAgICAgICBsYXN0TWFyay5kdXJhdGlvbiA9IG1hcmsudGltZSAtIGxhc3RNYXJrLnRpbWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIG1hcmtUeXBlc1ttYXJrLnR5cGVdLnB1c2gobWFyayk7XHJcbiAgICAgICAgICAgIGVuZE1hcmtUeXBlc1ttYXJrLnR5cGVdID0gbWFyaztcclxuICAgICAgICAgICAgcmV0dXJuIG1hcms7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgLy8gRmluZCB0aGUgdGltZSBvZiB0aGUgbGF0ZXN0IHNwZWVjaG1hcmtcclxuICAgICAgICBjb25zdCBlbmRUaW1lcyA9IFtdO1xyXG4gICAgICAgIGlmIChlbmRNYXJrVHlwZXMuc2VudGVuY2UpIHtcclxuICAgICAgICAgIGVuZFRpbWVzLnB1c2goZW5kTWFya1R5cGVzLnNlbnRlbmNlLnRpbWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZW5kTWFya1R5cGVzLndvcmQpIHtcclxuICAgICAgICAgIGVuZFRpbWVzLnB1c2goZW5kTWFya1R5cGVzLndvcmQudGltZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChlbmRNYXJrVHlwZXMudmlzZW1lKSB7XHJcbiAgICAgICAgICBlbmRUaW1lcy5wdXNoKGVuZE1hcmtUeXBlcy52aXNlbWUudGltZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChlbmRNYXJrVHlwZXMuc3NtbCkge1xyXG4gICAgICAgICAgZW5kVGltZXMucHVzaChlbmRNYXJrVHlwZXMuc3NtbC50aW1lKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgZW5kVGltZSA9IE1hdGgubWF4KC4uLmVuZFRpbWVzKTtcclxuXHJcbiAgICAgICAgLy8gQ2FsY3VsYXRlIGR1cmF0aW9uIGZvciB0aGUgZW5kaW5nIHNwZWVjaE1hcmtzIG9mIGVhY2ggdHlwZVxyXG4gICAgICAgIGlmIChlbmRNYXJrVHlwZXMuc2VudGVuY2UpIHtcclxuICAgICAgICAgIGVuZE1hcmtUeXBlcy5zZW50ZW5jZS5kdXJhdGlvbiA9IE1hdGgubWF4KFxyXG4gICAgICAgICAgICB0aGlzLl9taW5FbmRNYXJrRHVyYXRpb24sXHJcbiAgICAgICAgICAgIGVuZFRpbWUgLSBlbmRNYXJrVHlwZXMuc2VudGVuY2UudGltZVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGVuZE1hcmtUeXBlcy53b3JkKSB7XHJcbiAgICAgICAgICBlbmRNYXJrVHlwZXMud29yZC5kdXJhdGlvbiA9IE1hdGgubWF4KFxyXG4gICAgICAgICAgICB0aGlzLl9taW5FbmRNYXJrRHVyYXRpb24sXHJcbiAgICAgICAgICAgIGVuZFRpbWUgLSBlbmRNYXJrVHlwZXMud29yZC50aW1lXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZW5kTWFya1R5cGVzLnZpc2VtZSkge1xyXG4gICAgICAgICAgZW5kTWFya1R5cGVzLnZpc2VtZS5kdXJhdGlvbiA9IE1hdGgubWF4KFxyXG4gICAgICAgICAgICB0aGlzLl9taW5FbmRNYXJrRHVyYXRpb24sXHJcbiAgICAgICAgICAgIGVuZFRpbWUgLSBlbmRNYXJrVHlwZXMudmlzZW1lLnRpbWVcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChlbmRNYXJrVHlwZXMuc3NtbCkge1xyXG4gICAgICAgICAgZW5kTWFya1R5cGVzLnNzbWwuZHVyYXRpb24gPSBNYXRoLm1heChcclxuICAgICAgICAgICAgdGhpcy5fbWluRW5kTWFya0R1cmF0aW9uLFxyXG4gICAgICAgICAgICBlbmRUaW1lIC0gZW5kTWFya1R5cGVzLnNzbWwudGltZVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBzcGVlY2hNYXJrcztcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIGEgU3BlZWNoIG9iamVjdCB0aGF0IGhhcyB0aGUgZ2l2ZW4gdGV4dC5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIFRoZSB0ZXh0IGNvbnRlbnQgb2YgdGhlIFNwZWVjaC5cclxuICAgKiBAcGFyYW0ge09iamVjdD19IGNvbmZpZyAtIE9wdGlvbnMgdG8gdXBkYXRlIHRoZSBTcGVlY2ggd2l0aC5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtEZWZlcnJlZH0gUmVzb2x2ZXMgd2l0aCBTcGVlY2ggb3IgbnVsbDtcclxuICAgKi9cclxuICBfZ2V0U3BlZWNoKHRleHQsIGNvbmZpZykge1xyXG4gICAgLy8gTWFrZSBzdXJlIEFXUyBzZXJ2aWNlcyBleGlzdFxyXG4gICAgaWYgKCF0aGlzLmNvbnN0cnVjdG9yLmlzUmVhZHkpIHtcclxuICAgICAgY29uc3QgZSA9ICdBV1Mgc2VydmljZXMgaGF2ZSBub3QgYmVlbiBpbml0aWFsaXplZC4nO1xyXG4gICAgICByZXR1cm4gRGVmZXJyZWQucmVqZWN0KGUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIE1ha2Ugc3VyZSBpdHMgcG9zc2libGUgdG8gZ2VuZXJhdGUgc3BlZWNoZXNcclxuICAgIGlmICghdGV4dCkge1xyXG4gICAgICBjb25zdCBlID0gJ0Nhbm5vdCBwbGF5IGEgc3BlZWNoIHdpdGggbm8gdGV4dC4nO1xyXG4gICAgICByZXR1cm4gRGVmZXJyZWQucmVqZWN0KGUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFVwZGF0ZSB0aGUgc3BlZWNoIHdpdGggb3B0aW9uc1xyXG4gICAgdGV4dCA9IFRleHRUb1NwZWVjaFV0aWxzLnZhbGlkYXRlVGV4dCh0ZXh0KTtcclxuICAgIGNvbmZpZyA9IHRoaXMuX3VwZGF0ZUNvbmZpZyhjb25maWcsIHRleHQpO1xyXG5cclxuICAgIHJldHVybiB0aGlzLl91cGRhdGVTcGVlY2godGV4dCwgY29uZmlnKS5wcm9taXNlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWRkcyBhIG5hbWVzcGFjZSB0byB0aGUgaG9zdCB3aXRoIHRoZSBuYW1lIG9mIHRoZSBmZWF0dXJlIHRvIGNvbnRhaW4gcHJvcGVydGllc1xyXG4gICAqIGFuZCBtZXRob2RzIGZyb20gdGhlIGZlYXR1cmUgdGhhdCB1c2VycyBvZiB0aGUgaG9zdCBuZWVkIGFjY2VzcyB0by5cclxuICAgKlxyXG4gICAqIEBzZWUgVGV4dFRvU3BlZWNoRmVhdHVyZVxyXG4gICAqL1xyXG4gIGluc3RhbGxBcGkoKSB7XHJcbiAgICAvKipcclxuICAgICAqIEBpbm5lclxyXG4gICAgICogQG5hbWVzcGFjZSBUZXh0VG9TcGVlY2hGZWF0dXJlXHJcbiAgICAgKi9cclxuICAgIGNvbnN0IGFwaSA9IHN1cGVyLmluc3RhbGxBcGkoKTtcclxuXHJcbiAgICBPYmplY3QuYXNzaWduKGFwaSwge1xyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIFRleHRUb1NwZWVjaEZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBtZXRob2RcclxuICAgICAgICogQHNlZSBBYnN0cmFjdFRleHRUb1NwZWVjaEZlYXR1cmUjcGxheVxyXG4gICAgICAgKi9cclxuICAgICAgcGxheTogdGhpcy5wbGF5LmJpbmQodGhpcyksXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbWVtYmVyb2YgVGV4dFRvU3BlZWNoRmVhdHVyZVxyXG4gICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICogQG1ldGhvZFxyXG4gICAgICAgKiBAc2VlIEFic3RyYWN0VGV4dFRvU3BlZWNoRmVhdHVyZSNwYXVzZVxyXG4gICAgICAgKi9cclxuICAgICAgcGF1c2U6IHRoaXMucGF1c2UuYmluZCh0aGlzKSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBtZW1iZXJvZiBUZXh0VG9TcGVlY2hGZWF0dXJlXHJcbiAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgKiBAbWV0aG9kXHJcbiAgICAgICAqIEBzZWUgQWJzdHJhY3RUZXh0VG9TcGVlY2hGZWF0dXJlI3Jlc3VtZVxyXG4gICAgICAgKi9cclxuICAgICAgcmVzdW1lOiB0aGlzLnJlc3VtZS5iaW5kKHRoaXMpLFxyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIFRleHRUb1NwZWVjaEZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBtZXRob2RcclxuICAgICAgICogQHNlZSBBYnN0cmFjdFRleHRUb1NwZWVjaEZlYXR1cmUjc3RvcFxyXG4gICAgICAgKi9cclxuICAgICAgc3RvcDogdGhpcy5zdG9wLmJpbmQodGhpcyksXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbWVtYmVyb2YgVGV4dFRvU3BlZWNoRmVhdHVyZVxyXG4gICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICogQG1ldGhvZFxyXG4gICAgICAgKiBAc2VlIEFic3RyYWN0VGV4dFRvU3BlZWNoRmVhdHVyZSNnZXRWb2x1bWVcclxuICAgICAgICovXHJcbiAgICAgIGdldFZvbHVtZTogdGhpcy5nZXRWb2x1bWUuYmluZCh0aGlzKSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBtZW1iZXJvZiBUZXh0VG9TcGVlY2hGZWF0dXJlXHJcbiAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgKiBAbWV0aG9kXHJcbiAgICAgICAqIEBzZWUgQWJzdHJhY3RUZXh0VG9TcGVlY2hGZWF0dXJlI3NldFZvbHVtZVxyXG4gICAgICAgKi9cclxuICAgICAgc2V0Vm9sdW1lOiB0aGlzLnNldFZvbHVtZS5iaW5kKHRoaXMpLFxyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIFRleHRUb1NwZWVjaEZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBtZXRob2RcclxuICAgICAgICogQHNlZSBBYnN0cmFjdFRleHRUb1NwZWVjaEZlYXR1cmUjcGF1c2VWb2x1bWVcclxuICAgICAgICovXHJcbiAgICAgIHBhdXNlVm9sdW1lOiB0aGlzLnBhdXNlVm9sdW1lLmJpbmQodGhpcyksXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbWVtYmVyb2YgVGV4dFRvU3BlZWNoRmVhdHVyZVxyXG4gICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICogQG1ldGhvZFxyXG4gICAgICAgKiBAc2VlIEFic3RyYWN0VGV4dFRvU3BlZWNoRmVhdHVyZSNyZXN1bWVWb2x1bWVcclxuICAgICAgICovXHJcbiAgICAgIHJlc3VtZVZvbHVtZTogdGhpcy5yZXN1bWVWb2x1bWUuYmluZCh0aGlzKSxcclxuICAgIH0pO1xyXG5cclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGFwaSwge1xyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIFRleHRUb1NwZWVjaEZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBzZWUgQWJzdHJhY3RUZXh0VG9TcGVlY2hGZWF0dXJlI3NwZWVjaG1hcmtPZmZzZXRcclxuICAgICAgICovXHJcbiAgICAgIHNwZWVjaG1hcmtPZmZzZXQ6IHtcclxuICAgICAgICBnZXQ6ICgpID0+IHRoaXMuc3BlZWNobWFya09mZnNldCxcclxuICAgICAgICBzZXQ6IG9mZnNldCA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNwZWVjaG1hcmtPZmZzZXQgPSBvZmZzZXQ7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBhcGk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIGFuZCBzZXRzIHRoZSB2b2x1bWUgdXNlZCBmb3IgYWxsIGF1ZGlvIGNsaXBzIHBsYXllZCBieSB0aGUgc3BlYWtlci5cclxuICAgKlxyXG4gICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICovXHJcbiAgc2V0IHZvbHVtZSh2b2x1bWUpIHtcclxuICAgIHRoaXMuX3ZvbHVtZSA9IE1hdGhVdGlscy5jbGFtcCh2b2x1bWUpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHZvbHVtZSgpIHtcclxuICAgIHJldHVybiB0aGlzLl92b2x1bWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHdoZXRoZXIgb3Igbm90IHRoZSBzcGVha2VyJ3Mgdm9sdW1lIHZhbHVlIGlzIGN1cnJlbnRseSBiZWluZyB0d2VlbmVkLlxyXG4gICAqXHJcbiAgICogQHJlYWRvbmx5XHJcbiAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICovXHJcbiAgZ2V0IHZvbHVtZVBlbmRpbmcoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fcHJvbWlzZXMudm9sdW1lICYmIHRoaXMuX3Byb21pc2VzLnZvbHVtZS5wZW5kaW5nO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgdm9sdW1lIHVzZWQgZm9yIGFsbCBhdWRpbyBjbGlwcyBwbGF5ZWQgYnkgdGhlIHNwZWFrZXIuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxyXG4gICAqL1xyXG4gIGdldFZvbHVtZSgpIHtcclxuICAgIHJldHVybiB0aGlzLnZvbHVtZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZXMgdGhlIHZvbHVtZSB1c2VkIGZvciBhbGwgYXVkaW8gY2xpcHMgcGxheWVkIGJ5IHRoZSBzcGVha2VyIG92ZXIgdGltZS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB2b2x1bWUgLSBUYXJnZXQgdm9sdW1lIHZhbHVlLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbc2Vjb25kcz0wXSAtIEFtb3VudCBvZiB0aW1lIGl0IHdpbGwgdGFrZSB0byByZWFjaCB0aGUgdGFyZ2V0XHJcbiAgICogdm9sdW1lLlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBlYXNpbmdGbiAtIEVhc2luZyBmdW5jdGlvbiB1c2VkIGZvciBpbnRlcnBvbGF0aW9uLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0RlZmVycmVkfVxyXG4gICAqL1xyXG4gIHNldFZvbHVtZSh2b2x1bWUsIHNlY29uZHMgPSAwLCBlYXNpbmdGbikge1xyXG4gICAgaWYgKHRoaXMudm9sdW1lUGVuZGluZykge1xyXG4gICAgICB0aGlzLl9wcm9taXNlcy52b2x1bWUuY2FuY2VsKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdm9sdW1lID0gTWF0aFV0aWxzLmNsYW1wKHZvbHVtZSk7XHJcbiAgICB0aGlzLl9wcm9taXNlcy52b2x1bWUgPSBBbmltYXRpb25VdGlscy5pbnRlcnBvbGF0ZVByb3BlcnR5KFxyXG4gICAgICB0aGlzLFxyXG4gICAgICAndm9sdW1lJyxcclxuICAgICAgdm9sdW1lLFxyXG4gICAgICB7IHNlY29uZHMsIGVhc2luZ0ZuIH1cclxuICAgICk7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuX3Byb21pc2VzLnZvbHVtZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFBhdXNlIGludGVycG9sYXRpb24gaGFwcGVuaW5nIG9uIHRoZSBzcGVha2VyJ3Mgdm9sdW1lIHByb3BlcnR5LlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAgICovXHJcbiAgcGF1c2VWb2x1bWUoKSB7XHJcbiAgICB0aGlzLl92b2x1bWVQYXVzZWQgPSB0cnVlO1xyXG5cclxuICAgIHJldHVybiB0aGlzLnZvbHVtZVBlbmRpbmc7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXN1bWUgYW55IGludGVycG9sYXRpb24gaGFwcGVuaW5nIG9uIHRoZSBzcGVha2VyJ3Mgdm9sdW1lIHByb3BlcnR5LlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAgICovXHJcbiAgcmVzdW1lVm9sdW1lKCkge1xyXG4gICAgdGhpcy5fdm9sdW1lUGF1c2VkID0gZmFsc2U7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMudm9sdW1lUGVuZGluZztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZSB0aGUgY3VycmVudGx5IHBsYXlpbmcgc3BlZWNoLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IGRlbHRhVGltZSAtIFRpbWUgc2luY2UgdGhlIGxhc3QgdXBkYXRlLlxyXG4gICAqL1xyXG4gIHVwZGF0ZShkZWx0YVRpbWUpIHtcclxuICAgIGlmICghdGhpcy5fdm9sdW1lUGF1c2VkKSB7XHJcbiAgICAgIHRoaXMuX3Byb21pc2VzLnZvbHVtZS5leGVjdXRlKGRlbHRhVGltZSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuX2N1cnJlbnRTcGVlY2ggJiYgdGhpcy5fY3VycmVudFNwZWVjaC5wbGF5aW5nKSB7XHJcbiAgICAgIHRoaXMuX2N1cnJlbnRTcGVlY2gudm9sdW1lID0gdGhpcy5fdm9sdW1lO1xyXG4gICAgICB0aGlzLl9jdXJyZW50U3BlZWNoLnVwZGF0ZSh0aGlzLl9ob3N0Lm5vdyk7XHJcbiAgICAgIHN1cGVyLnVwZGF0ZShkZWx0YVRpbWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0IHRoZSBjdXJyZW50IHNwZWVjaCB0byBhIG5ldyBhc3NldCBhbmQgdXBkYXRlIHRoZSBzcGVlY2gncyBzcGVlY2htYXJrXHJcbiAgICogb2Zmc2V0IHZhbHVlIHRvIG1hdGNoIHRoYXQgb2YgdGhlIGZlYXR1cmUuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtBYnN0cmFjdFNwZWVjaH0gc3BlZWNoIC0gU3BlZWNoIHRvIHNldCBhcyBjdXJyZW50LlxyXG4gICAqL1xyXG4gIF9zZXRDdXJyZW50U3BlZWNoKHNwZWVjaCkge1xyXG4gICAgc3BlZWNoLnNwZWVjaG1hcmtPZmZzZXQgPSB0aGlzLl9zcGVlY2htYXJrT2Zmc2V0O1xyXG4gICAgdGhpcy5fY3VycmVudFNwZWVjaCA9IHNwZWVjaDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZSBhIHByb21pc2UgdGhhdCB3aWxsIHBsYXkvcmVzdW1lIGEgc3BlZWNoIHdpdGggdGhlIGdpdmVuIHRleHQgYWZ0ZXJcclxuICAgKiB0aGUgYXVkaW8gY29udGV4dCBhdHRlbXB0cyB0byByZXN1bWUgYW5kIHNwZWVjaCBhdWRpbyBpcyByZXRyaWV2ZWQgZnJvbSBQb2xseS5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIFRoZSB0ZXh0IG9mIHRoZSBuZXcgc3BlZWNoIHRvIHBsYXkuXHJcbiAgICogQHBhcmFtIHtPYmplY3Q9fSBjb25maWcgLSBPcHRpb25hbCBwYXJhbWV0ZXJzIGZvciB0aGUgc3BlZWNoLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcGxheU1ldGhvZCA9ICdwbGF5J10gLSBNZXRob2QgdG8gZXhlY3V0ZSBvbiB0aGUgcmVzdWx0aW5nXHJcbiAgICogU3BlZWNoIG9iamVjdC4gVmFsaWQgb3B0aW9ucyBhcmUgJ3BsYXknIGFuZCAncmVzdW1lJy5cclxuICAgKi9cclxuICBfc3RhcnRTcGVlY2godGV4dCwgY29uZmlnLCBwbGF5TWV0aG9kID0gJ3BsYXknKSB7XHJcbiAgICAvLyBJZiBubyB0ZXh0IGlzIHByb3ZpZGVkLCB0cnkgdG8gdXNlIHRoZSBjdXJyZW50IHNwZWVjaFxyXG4gICAgaWYgKHRleHQgPT09IHVuZGVmaW5lZCAmJiBwbGF5TWV0aG9kID09PSAncmVzdW1lJyAmJiB0aGlzLl9jdXJyZW50U3BlZWNoKSB7XHJcbiAgICAgIHRleHQgPSB0aGlzLl9jdXJyZW50U3BlZWNoLnRleHQ7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgY3VycmVudFByb21pc2UgPSB0aGlzLl9jdXJyZW50UHJvbWlzZSB8fCB7XHJcbiAgICAgIHBsYXk6IG5ldyBEZWZlcnJlZChcclxuICAgICAgICB1bmRlZmluZWQsXHJcbiAgICAgICAgKCkgPT4geyBjdXJyZW50UHJvbWlzZS5zcGVlY2guY2FuY2VsKCk7IH0sXHJcbiAgICAgICAgKCkgPT4geyBjdXJyZW50UHJvbWlzZS5zcGVlY2guY2FuY2VsKCk7IH0sXHJcbiAgICAgICAgKCkgPT4geyBjdXJyZW50UHJvbWlzZS5zcGVlY2guY2FuY2VsKCk7IH1cclxuICAgICAgKSxcclxuICAgICAgc3BlZWNoOiBuZXcgRGVmZXJyZWQoKSxcclxuICAgIH07XHJcbiAgICB0aGlzLl9jdXJyZW50UHJvbWlzZSA9IGN1cnJlbnRQcm9taXNlO1xyXG5cclxuICAgIHRoaXMuX2dldFNwZWVjaCh0ZXh0LCBjb25maWcpXHJcbiAgICAgIC50aGVuKHNwZWVjaCA9PiB7XHJcbiAgICAgICAgLy8gRXhpdCBpZiB0aGUgcHJvbWlzZSBpcyBubyBsb25nZXIgcGVuZGluZyBiZWNhdXNlIG9mIHVzZXIgaW50ZXJhY3Rpb25cclxuICAgICAgICBpZiAoIWN1cnJlbnRQcm9taXNlLnBsYXkucGVuZGluZykge1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5fY3VycmVudFByb21pc2UgIT09IGN1cnJlbnRQcm9taXNlKSB7XHJcbiAgICAgICAgICAvLyBDYW5jZWwgaWYgYW5vdGhlciBjYWxsIHRvIHBsYXkgaGFzIGFscmVhZHkgYmVlbiBtYWRlXHJcbiAgICAgICAgICBjdXJyZW50UHJvbWlzZS5wbGF5LmNhbmNlbCgpO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gUmVzZXQgY3VycmVudCBzcGVlY2ggd2hlbiB0aGUgc3BlZWNoIGVuZHNcclxuICAgICAgICBjb25zdCBvbkZpbmlzaCA9ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuX2N1cnJlbnRTcGVlY2ggPSBudWxsO1xyXG4gICAgICAgICAgdGhpcy5fY3VycmVudFByb21pc2UgPSBudWxsO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIC8vIENhbmNlbCB0aGUgY3VycmVudGx5IHBsYXlpbmcgc3BlZWNoXHJcbiAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRTcGVlY2ggJiYgdGhpcy5fY3VycmVudFNwZWVjaC5wbGF5aW5nKSB7XHJcbiAgICAgICAgICBpZiAocGxheU1ldGhvZCA9PT0gJ3BsYXknKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRTcGVlY2guY2FuY2VsKCk7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKHBsYXlNZXRob2QgPT09ICdyZXN1bWUnXHJcbiAgICAgICAgICAgICYmIHRoaXMuX2N1cnJlbnRTcGVlY2guYXVkaW8gIT09IHNwZWVjaC5hdWRpbykge1xyXG4gICAgICAgICAgICB0aGlzLl9jdXJyZW50U3BlZWNoLmNhbmNlbCgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fc2V0Q3VycmVudFNwZWVjaChzcGVlY2gpO1xyXG5cclxuICAgICAgICAvLyBQbGF5IHRoZSBzcGVlY2hcclxuICAgICAgICBjdXJyZW50UHJvbWlzZS5zcGVlY2ggPSBzcGVlY2hbcGxheU1ldGhvZF0odGhpcy5faG9zdC5ub3csIG9uRmluaXNoLCBvbkZpbmlzaCwgb25GaW5pc2gpO1xyXG4gICAgICAgIGN1cnJlbnRQcm9taXNlLnNwZWVjaC50aGVuKCgpID0+IHtcclxuICAgICAgICAgIGlmIChjdXJyZW50UHJvbWlzZS5zcGVlY2gucmVzb2x2ZWQpIHtcclxuICAgICAgICAgICAgY3VycmVudFByb21pc2UucGxheS5yZXNvbHZlKCk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjdXJyZW50UHJvbWlzZS5wbGF5LmNhbmNlbCgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pLmNhdGNoKGVycm9yID0+IHtcclxuICAgICAgICAgIGN1cnJlbnRQcm9taXNlLnBsYXkucmVqZWN0KGVycm9yKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfSlcclxuICAgICAgLmNhdGNoKGUgPT4ge1xyXG4gICAgICAgIGUgPSBgQ2Fubm90ICR7cGxheU1ldGhvZH0gc3BlZWNoICR7dGV4dH0gb24gaG9zdCAke3RoaXMuaG9zdC5pZH0uICR7ZX1gO1xyXG4gICAgICAgIGN1cnJlbnRQcm9taXNlLnBsYXkucmVqZWN0KGUpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gY3VycmVudFByb21pc2UucGxheTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFN0b3AgYW55IHNwZWVjaGVzIGN1cnJlbnRseSBwbGF5aW5nIGFuZCBwbGF5IGEgbmV3IHNwZWVjaCBmcm9tIHRoZSBiZWdpbm5pbmcuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIFRoZSB0ZXh0IG9mIHRoZSBuZXcgc3BlZWNoIHRvIHBsYXkuXHJcbiAgICogQHBhcmFtIHtPYmplY3Q9fSBjb25maWcgLSBPcHRpb25hbCBwYXJhbWV0ZXJzIGZvciB0aGUgc3BlZWNoLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0RlZmVycmVkfVxyXG4gICAqL1xyXG4gIHBsYXkodGV4dCwgY29uZmlnKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fc3RhcnRTcGVlY2godGV4dCwgY29uZmlnLCAncGxheScpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSWYgYSBzcGVlY2ggaXMgY3VycmVudGx5IHBsYXlpbmcsIHBhdXNlIGl0IGF0IHRoZSBjdXJyZW50IHRpbWUuXHJcbiAgICovXHJcbiAgcGF1c2UoKSB7XHJcbiAgICBpZiAodGhpcy5fY3VycmVudFNwZWVjaCAmJiB0aGlzLl9jdXJyZW50U3BlZWNoLnBsYXlpbmcpIHtcclxuICAgICAgdGhpcy5fY3VycmVudFNwZWVjaC5wYXVzZSh0aGlzLl9ob3N0Lm5vdyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLndhcm4oXHJcbiAgICAgICAgYENhbm5vdCBwYXVzZSBzcGVlY2ggb24gaG9zdCAke3RoaXMuaG9zdC5pZH0uIE5vIHNwZWVjaCBpcyBjdXJyZW50bHkgcGxheWluZ2BcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFN0b3AgYW55IHNwZWVjaGVzIGN1cnJlbnRseSBwbGF5aW5nIGFuZCByZXN1bWUgYSBuZXcgc3BlZWNoIGZyb20gdGhlIGN1cnJlbnRcclxuICAgKiB0aW1lLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmc9fSB0ZXh0IC0gVGhlIHRleHQgb2YgdGhlIG5ldyBzcGVlY2ggdG8gcGxheS4gSWYgdW5kZWZpbmVkIGFuZFxyXG4gICAqIHRoZXJlIGlzIGEgY3VycmVudCBzcGVlY2ggdGhhdCBpcyBwYXVzZWQsIHRoZSBjdXJyZW50IHNwZWVjaCB3aWxsIGJlIHJlc3VtZWQuXHJcbiAgICogQHBhcmFtIHtPYmplY3Q9fSBjb25maWcgLSBPcHRpb25hbCBwYXJhbWV0ZXJzIGZvciB0aGUgc3BlZWNoLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0RlZmVycmVkfVxyXG4gICAqL1xyXG4gIHJlc3VtZSh0ZXh0LCBjb25maWcpIHtcclxuICAgIHJldHVybiB0aGlzLl9zdGFydFNwZWVjaCh0ZXh0LCBjb25maWcsICdyZXN1bWUnKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIElmIGEgc3BlZWNoIGlzIGN1cnJlbnRseSBwbGF5aW5nLCBzdG9wIHBsYXliYWNrIGFuZCByZXNldCB0aW1lLlxyXG4gICAqL1xyXG4gIHN0b3AoKSB7XHJcbiAgICBpZiAodGhpcy5fY3VycmVudFNwZWVjaCAmJiB0aGlzLl9jdXJyZW50U3BlZWNoLnBsYXlpbmcpIHtcclxuICAgICAgdGhpcy5fY3VycmVudFNwZWVjaC5zdG9wKCk7XHJcbiAgICAgIHRoaXMuX2N1cnJlbnRTcGVlY2ggPSBudWxsO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgIGBDYW5ub3Qgc3RvcCBzcGVlY2ggb24gaG9zdCAke3RoaXMuaG9zdC5pZH0uIE5vIHNwZWVjaCBpcyBjdXJyZW50bHkgcGxheWluZy5gXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBkaXNjYXJkKCkge1xyXG4gICAgaWYgKHRoaXMuX2N1cnJlbnRTcGVlY2ggJiYgdGhpcy5fY3VycmVudFNwZWVjaC5wbGF5aW5nKSB7XHJcbiAgICAgIHRoaXMuX2N1cnJlbnRTcGVlY2guc3RvcCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGRlbGV0ZSB0aGlzLl9zcGVlY2hDYWNoZTtcclxuXHJcbiAgICBzdXBlci5kaXNjYXJkKCk7XHJcbiAgfVxyXG59XHJcblxyXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhBYnN0cmFjdFRleHRUb1NwZWVjaEZlYXR1cmUsIHtcclxuICBBV1NfVkVSU0lPTjoge1xyXG4gICAgZ2V0OiAoKSA9PiBhd3NWZXJzaW9uLFxyXG4gIH0sXHJcbiAgUE9MTFlfTUlOX05FVVJBTF9WRVJTSU9OOiB7XHJcbiAgICB2YWx1ZTogJzIuNTAzJyxcclxuICAgIHdyaXRhYmxlOiBmYWxzZSxcclxuICB9LFxyXG4gIFBPTExZX0RFRkFVTFRTOiB7XHJcbiAgICB2YWx1ZToge1xyXG4gICAgICBFbmdpbmU6ICdzdGFuZGFyZCcsXHJcbiAgICAgIExleGljb25OYW1lczogW10sXHJcbiAgICAgIE91dHB1dEZvcm1hdDogJ21wMycsXHJcbiAgICAgIFNhbXBsZVJhdGU6ICcyMjA1MCcsXHJcbiAgICAgIFRleHQ6ICcnLFxyXG4gICAgICBUZXh0VHlwZTogJ3NzbWwnLFxyXG4gICAgICBWb2ljZUlkOiAnQW15JyxcclxuICAgICAgTGFuZ3VhZ2VDb2RlOiAnZW4tR0InLFxyXG4gICAgICBMYW5ndWFnZU5hbWU6ICdCcml0aXNoIEVuZ2xpc2gnLFxyXG4gICAgfSxcclxuICAgIHdyaXRhYmxlOiBmYWxzZSxcclxuICB9LFxyXG4gIFBPTExZX1ZPSUNFUzoge1xyXG4gICAgdmFsdWU6IFtdLFxyXG4gICAgd3JpdGFibGU6IGZhbHNlLFxyXG4gIH0sXHJcbiAgUE9MTFlfTEFOR1VBR0VTOiB7XHJcbiAgICB2YWx1ZToge30sXHJcbiAgICB3cml0YWJsZTogZmFsc2UsXHJcbiAgfSxcclxuICBQT0xMWV9MQU5HVUFHRV9DT0RFUzoge1xyXG4gICAgdmFsdWU6IHt9LFxyXG4gICAgd3JpdGFibGU6IGZhbHNlLFxyXG4gIH0sXHJcbiAgX2lzUmVhZHk6IHtcclxuICAgIHZhbHVlOiBmYWxzZSxcclxuICAgIHdyaXRhYmxlOiB0cnVlLFxyXG4gIH0sXHJcbiAgRVZFTlRTOiB7XHJcbiAgICB2YWx1ZToge1xyXG4gICAgICAuLi5PYmplY3QuZ2V0UHJvdG90eXBlT2YoQWJzdHJhY3RUZXh0VG9TcGVlY2hGZWF0dXJlKS5FVkVOVFMsXHJcbiAgICAgIHJlYWR5OiAnb25SZWFkeUV2ZW50JyxcclxuICAgICAgcGxheTogJ29uUGxheUV2ZW50JyxcclxuICAgICAgcGF1c2U6ICdvblBhdXNlRXZlbnQnLFxyXG4gICAgICByZXN1bWU6ICdvblJlc3VtZUV2ZW50JyxcclxuICAgICAgaW50ZXJydXB0OiAnb25JbnRlcnJ1cHRFdmVudCcsXHJcbiAgICAgIHN0b3A6ICdvblN0b3BFdmVudCcsXHJcbiAgICAgIHNlbnRlbmNlOiAnb25TZW50ZW5jZUV2ZW50JyxcclxuICAgICAgd29yZDogJ29uV29yZEV2ZW50JyxcclxuICAgICAgdmlzZW1lOiAnb25WaXNlbWVFdmVudCcsXHJcbiAgICAgIHNzbWw6ICdvblNzbWxFdmVudCcsXHJcbiAgICB9LFxyXG4gIH0sXHJcbiAgU0VSVklDRVM6IHtcclxuICAgIHZhbHVlOiB7XHJcbiAgICAgIC4uLk9iamVjdC5nZXRQcm90b3R5cGVPZihBYnN0cmFjdFRleHRUb1NwZWVjaEZlYXR1cmUpLlNFUlZJQ0VTLFxyXG4gICAgICBwb2xseTogdW5kZWZpbmVkLFxyXG4gICAgICBwcmVzaWduZXI6IHVuZGVmaW5lZCxcclxuICAgIH0sXHJcbiAgfSxcclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBBYnN0cmFjdFRleHRUb1NwZWVjaEZlYXR1cmU7XHJcbiIsIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxyXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTBcclxuaW1wb3J0IFNwZWVjaCBmcm9tICdhcHAvYXdzcGFjay9TcGVlY2gnO1xyXG5pbXBvcnQgRGVmZXJyZWQgZnJvbSAnY29yZS9EZWZlcnJlZCc7XHJcbmltcG9ydCBBYnN0cmFjdFRleHRUb1NwZWVjaEZlYXR1cmUgZnJvbSAnLi9BYnN0cmFjdFRleHRUb1NwZWVjaEZlYXR1cmUnO1xyXG5cclxuLyoqXHJcbiAqIEBleHRlbmRzIEFic3RyYWN0VGV4dFRvU3BlZWNoRmVhdHVyZVxyXG4gKiBAYWxpYXMgY29yZS9UZXh0VG9TcGVlY2hGZWF0dXJlXHJcbiAqL1xyXG5jbGFzcyBUZXh0VG9TcGVlY2hGZWF0dXJlIGV4dGVuZHMgQWJzdHJhY3RUZXh0VG9TcGVlY2hGZWF0dXJlIHtcclxuICBjb25zdHJ1Y3RvciguLi5hcmdzKSB7XHJcbiAgICBzdXBlciguLi5hcmdzKTtcclxuXHJcbiAgICB0aGlzLl9lbmFibGVkID0gZmFsc2U7XHJcbiAgICB0aGlzLl9zZXRBdWRpb0NvbnRleHQoKTtcclxuICAgIHRoaXMuX29ic2VydmVBdWRpb0NvbnRleHQoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFN0b3JlIHRoZSBhdWRpbyBjb250ZXh0IHRoYXQgd2lsbCBiZSB1c2VkIHRvIGVuc3VyZSBhdWRpbyBjYW4gYmUgcGxheWVkLlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBfc2V0QXVkaW9Db250ZXh0KCkge1xyXG4gICAgdGhpcy5fYXVkaW9Db250ZXh0ID0gbmV3IEF1ZGlvQ29udGV4dCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTGlzdGVuIGZvciBzdGF0ZSBjaGFuZ2VzIG9uIHRoZSBhdWRpbyBjb250ZXh0IHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSBmZWF0dXJlXHJcbiAgICogaXMgZW5hYmxlZC5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICovXHJcbiAgX29ic2VydmVBdWRpb0NvbnRleHQoKSB7XHJcbiAgICBpZiAodGhpcy5fYXVkaW9Db250ZXh0KSB7XHJcbiAgICAgIHRoaXMuX2F1ZGlvQ29udGV4dC5vbnN0YXRlY2hhbmdlID0gKCkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLl9hdWRpb0NvbnRleHQuc3RhdGUgPT09ICdydW5uaW5nJykge1xyXG4gICAgICAgICAgdGhpcy5fZW5hYmxlZCA9IHRydWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuX2VuYWJsZWQgPSBmYWxzZTtcclxuICAgICAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICAgICAgJ1RoZSBhdWRpbyBjb250ZXh0IGlzIG5vdCBydW5uaW5nLiBTcGVlY2ggd2lsbCBub3QgYmUgYWJsZSB0byBiZSBwbGF5ZWQgdW50aWwgaXQgaXMgcmVzdW1lZC4gVXNlIHRoZSBcIlRleHRUb1NwZWVjaEZlYXR1cmUucmVzdW1lQXVkaW9cIiBtZXRob2QgdG8gdHJ5IHRvIHJlc3VtZSBpdCBhZnRlciBhIHVzZXIgZ2VzdHVyZS4nXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgfTtcclxuXHJcbiAgICAgIHRoaXMuX2F1ZGlvQ29udGV4dC5vbnN0YXRlY2hhbmdlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGUgYW4gQXVkaW8gb2JqZWN0IG9mIHNwZWVjaCBhdWRpbyBmb3IgdGhlIGdpdmVuIHNwZWVjaCB0ZXh0LlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXMgLSBQYXJhbWV0ZXJzIG9iamVjdCBjb21wYXRpYmxlIHdpdGggUG9sbHkuc3ludGhlc2l6ZVNwZWVjaC5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfSBSZXNvbHZlcyB3aXRoIGFuIG9iamVjdCBjb250YWluaW5nIHRoZSBhdWRpbyBVUkwgYW5kIEF1ZGlvXHJcbiAgICogb2JqZWN0LlxyXG4gICAqL1xyXG4gIF9zeW50aGVzaXplQXVkaW8ocGFyYW1zKSB7XHJcbiAgICByZXR1cm4gc3VwZXIuX3N5bnRoZXNpemVBdWRpbyhwYXJhbXMpLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgY29uc3Qge3VybH0gPSByZXN1bHQ7XHJcblxyXG4gICAgICAvLyBDcmVhdGUgYW4gQXVkaW8gb2JqZWN0IHRoYXQgcG9pbnRzIHRvIHRoZSBwcmVzaWduZWQgdXJsXHJcbiAgICAgIGNvbnN0IGF1ZGlvID0gbmV3IEF1ZGlvKHVybCk7XHJcbiAgICAgIGF1ZGlvLmxvb3AgPSB0aGlzLmxvb3A7XHJcbiAgICAgIGF1ZGlvLmNyb3NzT3JpZ2luID0gJ2Fub255bW91cyc7XHJcbiAgICAgIGF1ZGlvLnByZWxvYWQgPSAnYXV0byc7XHJcbiAgICAgIHJlc3VsdC5hdWRpbyA9IGF1ZGlvO1xyXG5cclxuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xyXG4gICAgICAgIC8vIFJlc29sdmUgb25jZSB0aGUgbWluaW11bSBhbW91bnQgaXMgbG9hZGVkXHJcbiAgICAgICAgYXVkaW8uYWRkRXZlbnRMaXN0ZW5lcignY2FucGxheXRocm91Z2gnLCAoKSA9PiB7XHJcbiAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIC8vIFN0YXJ0IGxvYWRpbmcgdGhlIGF1ZGlvXHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChhdWRpbyk7XHJcbiAgICAgICAgYXVkaW8ubG9hZCgpO1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlIGEgbmV3IFNwZWVjaCBvYmplY3QgZm9yIHRoZSBzcGVha2VyLlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7VGV4dFRvU3BlZWNofSBzcGVha2VyIC0gVGhlIFRleHRUb1NwZWVjaCBpbnN0YW5jZSB0aGF0IHdpbGwgb3duIHRoZSBzcGVlY2guXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSBUZXh0IG9mIHRoZSBzcGVlY2guXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IHNwZWVjaG1hcmtzIC0gU3BlZWNobWFya3MgZm9yIHRoZSBzcGVlY2guXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IGF1ZGlvQ29uZmlnIC0gQXVkaW8gZm9yIHRoZSBzcGVlY2guXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7QWJzdHJhY3RTcGVlY2h9XHJcbiAgICovXHJcbiAgX2NyZWF0ZVNwZWVjaCh0ZXh0LCBzcGVlY2htYXJrcywgYXVkaW9Db25maWcpIHtcclxuICAgIHJldHVybiBuZXcgU3BlZWNoKHRoaXMsIHRleHQsIHNwZWVjaG1hcmtzLCBhdWRpb0NvbmZpZyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHdoZXRoZXIgb3Igbm90IHRoZSBhdWRpbyBjb250ZXh0IGlzIHJ1bm5pbmcgYW5kIHNwZWVjaCBjYW4gYmUgcGxheWVkLlxyXG4gICAqXHJcbiAgICogQHJlYWRvbmx5XHJcbiAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICovXHJcbiAgZ2V0IGVuYWJsZWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fZW5hYmxlZDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRyeSB0byByZXN1bWUgdGhlIGF1ZGlvIGNvbnRleHQuIFRoaXMgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGV4ZWN1dGVkIGVhY2ggdGltZVxyXG4gICAqIHNwZWVjaCBpcyBwbGF5ZWQgb3IgcmVzdW1lZC4gSWYgdXNpbmcgbWFudWFsbHksIGl0IHNob3VsZCBiZSBjYWxsZWQgYWZ0ZXIgYVxyXG4gICAqIHVzZXIgaW50ZXJhY3Rpb24gb2NjdXJzLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0RlZmVycmVkfSAtIFJlc29sdmVzIG9uY2UgdGhlIGF1ZGlvIGNvbnRleHQgaGFzIHJlc3VtZWQuXHJcbiAgICovXHJcbiAgcmVzdW1lQXVkaW8oKSB7XHJcbiAgICBjb25zdCBwcm9taXNlID0gbmV3IERlZmVycmVkKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgdGhpcy5fYXVkaW9Db250ZXh0XHJcbiAgICAgICAgLnJlc3VtZSgpXHJcbiAgICAgICAgLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5fZW5hYmxlZCA9IHRydWU7XHJcbiAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuY2F0Y2goZSA9PiB7XHJcbiAgICAgICAgICB0aGlzLl9lbmFibGVkID0gZmFsc2U7XHJcbiAgICAgICAgICByZWplY3QoZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBwcm9taXNlO1xyXG4gIH1cclxuXHJcbiAgX3N0YXJ0U3BlZWNoKHRleHQsIGNvbmZpZywgcGxheU1ldGhvZCA9ICdwbGF5Jykge1xyXG4gICAgY29uc3QgY3VycmVudFByb21pc2UgPSB7XHJcbiAgICAgIHBsYXk6IG5ldyBEZWZlcnJlZChcclxuICAgICAgICB1bmRlZmluZWQsXHJcbiAgICAgICAgKCkgPT4geyBjdXJyZW50UHJvbWlzZS5zcGVlY2guY2FuY2VsKCk7IH0sXHJcbiAgICAgICAgKCkgPT4geyBjdXJyZW50UHJvbWlzZS5zcGVlY2guY2FuY2VsKCk7IH0sXHJcbiAgICAgICAgKCkgPT4geyBjdXJyZW50UHJvbWlzZS5zcGVlY2guY2FuY2VsKCk7IH1cclxuICAgICAgKSxcclxuICAgICAgc3BlZWNoOiBuZXcgRGVmZXJyZWQoKSxcclxuICAgIH07XHJcbiAgICB0aGlzLl9jdXJyZW50UHJvbWlzZSA9IGN1cnJlbnRQcm9taXNlO1xyXG5cclxuICAgIC8vIFRyeSB0byBzdGFydCB0aGUgYXVkaW8gY29udGV4dFxyXG4gICAgdGhpcy5yZXN1bWVBdWRpbygpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAvLyBFeGl0IGlmIHRoZSBwcm9taXNlIGlzIG5vIGxvbmdlciBwZW5kaW5nIGJlY2F1c2Ugb2YgdXNlciBpbnRlcmFjdGlvblxyXG4gICAgICBpZiAoIWN1cnJlbnRQcm9taXNlLnBsYXkucGVuZGluZykge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICAvLyBDYW5jZWwgaWYgYW5vdGhlciBjYWxsIHRvIHBsYXkgaGFzIGFscmVhZHkgYmVlbiBtYWRlXHJcbiAgICAgIGVsc2UgaWYgKHRoaXMuX2N1cnJlbnRQcm9taXNlICE9PSBjdXJyZW50UHJvbWlzZSkge1xyXG4gICAgICAgIGN1cnJlbnRQcm9taXNlLnBsYXkuY2FuY2VsKCk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBUaGUgYXVkaW8gY29udGV4dCBpcyBydW5uaW5nIHNvIHRoZSBzcGVlY2ggY2FuIGJlIHBsYXllZFxyXG4gICAgICBpZiAodGhpcy5fZW5hYmxlZCkge1xyXG4gICAgICAgIHN1cGVyLl9zdGFydFNwZWVjaCh0ZXh0LCBjb25maWcsIHBsYXlNZXRob2QpO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIFJlamVjdCBpZiB0aGUgYXVkaW8gY29udGV4dCBpcyBub3QgcnVubmluZ1xyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBjdXJyZW50UHJvbWlzZS5yZWplY3QoXHJcbiAgICAgICAgICBuZXcgRXJyb3IoXHJcbiAgICAgICAgICAgIGBDYW5ub3QgJHtwbGF5TWV0aG9kfSBzcGVlY2ggb24gaG9zdCAke3RoaXMuX2hvc3QuaWR9LiBUaGUgYXVkaW8gY29udGV4dCBpcyBub3QgcnVubmluZy4gVXNlIHRoZSBcIlRleHRUb1NwZWVjaEZlYXR1cmUucmVzdW1lQXVkaW9cIiBtZXRob2QgdG8gdHJ5IHRvIHJlc3VtZSBpdCBhZnRlciBhIHVzZXIgZ2VzdHVyZS5gXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIGN1cnJlbnRQcm9taXNlLnBsYXk7XHJcbiAgfVxyXG5cclxuICBwbGF5KHRleHQsIGNvbmZpZykge1xyXG4gICAgcmV0dXJuIHRoaXMuX3N0YXJ0U3BlZWNoKHRleHQsIGNvbmZpZywgJ3BsYXknKTtcclxuICB9XHJcblxyXG4gIHJlc3VtZSh0ZXh0LCBjb25maWcpIHtcclxuICAgIHJldHVybiB0aGlzLl9zdGFydFNwZWVjaCh0ZXh0LCBjb25maWcsICdyZXN1bWUnKTtcclxuICB9XHJcblxyXG4gIGluc3RhbGxBcGkoKSB7XHJcbiAgICBjb25zdCBhcGkgPSBzdXBlci5pbnN0YWxsQXBpKCk7XHJcblxyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoYXBpLCB7XHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbWVtYmVyb2YgVGV4dFRvU3BlZWNoRmVhdHVyZVxyXG4gICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICogQHNlZSBjb3JlL1RleHRUb1NwZWVjaEZlYXR1cmUjZW5hYmxlZFxyXG4gICAgICAgKi9cclxuICAgICAgZW5hYmxlZDoge1xyXG4gICAgICAgIGdldDogKCkgPT4gdGhpcy5fZW5hYmxlZCxcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBhcGk7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBUZXh0VG9TcGVlY2hGZWF0dXJlO1xyXG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cclxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVC0wXHJcbmltcG9ydCBUZXh0VG9TcGVlY2hGZWF0dXJlIGZyb20gJy4vVGV4dFRvU3BlZWNoRmVhdHVyZSc7XHJcbmltcG9ydCBUZXh0VG9TcGVlY2hVdGlscyBmcm9tICcuL1RleHRUb1NwZWVjaFV0aWxzJztcclxuaW1wb3J0IFNwZWVjaCBmcm9tICcuL1NwZWVjaCc7XHJcblxyXG4vKipcclxuICogQG1vZHVsZSBjb3JlL2F3c3BhY2tcclxuICovXHJcblxyXG5leHBvcnQgZGVmYXVsdCB7XHJcbiAgLyoqXHJcbiAgICogQHNlZSBjb3JlL1RleHRUb1NwZWVjaEZlYXR1cmVcclxuICAgKi9cclxuICBUZXh0VG9TcGVlY2hGZWF0dXJlLFxyXG4gIC8qKlxyXG4gICAqIEBzZWUgY29yZS9UZXh0VG9TcGVlY2hVdGlsc1xyXG4gICAqL1xyXG4gIFRleHRUb1NwZWVjaFV0aWxzLFxyXG4gIC8qKlxyXG4gICAqIEBzZWUgY29yZS9TcGVlY2hcclxuICAgKi9cclxuICBTcGVlY2gsXHJcbn07XHJcbiIsIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxyXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTBcclxuXHJcbi8qKlxyXG4gKiBAbW9kdWxlIGNvcmUvYW5pbXBhY2tcclxuICovXHJcblxyXG5pbXBvcnQge1xyXG4gIExpbmVhcixcclxuICBRdWFkcmF0aWMsXHJcbiAgQ3ViaWMsXHJcbiAgUXVhcnRpYyxcclxuICBRdWludGljLFxyXG4gIFNpbnVzb2lkYWwsXHJcbiAgRXhwb25lbnRpYWwsXHJcbiAgQ2lyY3VsYXIsXHJcbiAgRWxhc3RpYyxcclxuICBCYWNrLFxyXG4gIEJvdW5jZSxcclxufSBmcm9tICcuL0Vhc2luZyc7XHJcbmltcG9ydCBBbmltYXRpb25GZWF0dXJlLCB7QW5pbWF0aW9uVHlwZXN9IGZyb20gJy4vQW5pbWF0aW9uRmVhdHVyZSc7XHJcbmltcG9ydCBBbmltYXRpb25MYXllciwge1xyXG4gIExheWVyQmxlbmRNb2RlcyxcclxuICBEZWZhdWx0TGF5ZXJCbGVuZE1vZGUsXHJcbn0gZnJvbSAnLi9BbmltYXRpb25MYXllcic7XHJcbmltcG9ydCBTaW5nbGVTdGF0ZSBmcm9tICcuL3N0YXRlL1NpbmdsZVN0YXRlJztcclxuaW1wb3J0IFRyYW5zaXRpb25TdGF0ZSBmcm9tICcuL3N0YXRlL1RyYW5zaXRpb25TdGF0ZSc7XHJcbmltcG9ydCBGcmVlQmxlbmRTdGF0ZSBmcm9tICcuL3N0YXRlL0ZyZWVCbGVuZFN0YXRlJztcclxuaW1wb3J0IFF1ZXVlU3RhdGUgZnJvbSAnLi9zdGF0ZS9RdWV1ZVN0YXRlJztcclxuaW1wb3J0IFJhbmRvbUFuaW1hdGlvblN0YXRlIGZyb20gJy4vc3RhdGUvUmFuZG9tQW5pbWF0aW9uU3RhdGUnO1xyXG5pbXBvcnQgQmxlbmQxZFN0YXRlIGZyb20gJy4vc3RhdGUvQmxlbmQxZFN0YXRlJztcclxuaW1wb3J0IEJsZW5kMmRTdGF0ZSBmcm9tICcuL3N0YXRlL0JsZW5kMmRTdGF0ZSc7XHJcbmltcG9ydCBBbmltYXRpb25VdGlscyBmcm9tICcuL0FuaW1hdGlvblV0aWxzJztcclxuXHJcbi8qKlxyXG4gKiBAbmFtZXNwYWNlXHJcbiAqL1xyXG5jb25zdCBFYXNpbmcgPSB7XHJcbiAgLyoqXHJcbiAgICogQHNlZSBMaW5lYXJcclxuICAgKi9cclxuICBMaW5lYXIsXHJcbiAgLyoqXHJcbiAgICogQHNlZSBRdWFkcmF0aWNcclxuICAgKi9cclxuICBRdWFkcmF0aWMsXHJcbiAgLyoqXHJcbiAgICogQHNlZSBDdWJpY1xyXG4gICAqL1xyXG4gIEN1YmljLFxyXG4gIC8qKlxyXG4gICAqIEBzZWUgUXVhcnRpY1xyXG4gICAqL1xyXG4gIFF1YXJ0aWMsXHJcbiAgLyoqXHJcbiAgICogQHNlZSBRdWludGljXHJcbiAgICovXHJcbiAgUXVpbnRpYyxcclxuICAvKipcclxuICAgKiBAc2VlIFNpbnVzb2lkYWxcclxuICAgKi9cclxuICBTaW51c29pZGFsLFxyXG4gIC8qKlxyXG4gICAqIEBzZWUgRXhwb25lbnRpYWxcclxuICAgKi9cclxuICBFeHBvbmVudGlhbCxcclxuICAvKipcclxuICAgKiBAc2VlIENpcmN1bGFyXHJcbiAgICovXHJcbiAgQ2lyY3VsYXIsXHJcbiAgLyoqXHJcbiAgICogQHNlZSBFbGFzdGljXHJcbiAgICovXHJcbiAgRWxhc3RpYyxcclxuICAvKipcclxuICAgKiBAc2VlIEJhY2tcclxuICAgKi9cclxuICBCYWNrLFxyXG4gIC8qKlxyXG4gICAqIEBzZWUgQm91bmNlXHJcbiAgICovXHJcbiAgQm91bmNlLFxyXG59O1xyXG5leHBvcnQgZGVmYXVsdCB7XHJcbiAgLyoqXHJcbiAgICogQHNlZSBjb3JlL0FuaW1hdGlvbkZlYXR1cmVcclxuICAgKi9cclxuICBBbmltYXRpb25GZWF0dXJlLFxyXG4gIC8qKlxyXG4gICAqIEBzZWUgQW5pbWF0aW9uTGF5ZXJcclxuICAgKi9cclxuICBBbmltYXRpb25MYXllcixcclxuICAvKipcclxuICAgKiBAc2VlIGNvcmUvU2luZ2xlU3RhdGVcclxuICAgKi9cclxuICBTaW5nbGVTdGF0ZSxcclxuICAvKipcclxuICAgKiBAc2VlIFRyYW5zaXRpb25TdGF0ZVxyXG4gICAqL1xyXG4gIFRyYW5zaXRpb25TdGF0ZSxcclxuICAvKipcclxuICAgKiBAc2VlIEZyZWVCbGVuZFN0YXRlXHJcbiAgICovXHJcbiAgRnJlZUJsZW5kU3RhdGUsXHJcbiAgLyoqXHJcbiAgICogQHNlZSBRdWV1ZVN0YXRlXHJcbiAgICovXHJcbiAgUXVldWVTdGF0ZSxcclxuICAvKipcclxuICAgKiBAc2VlIFJhbmRvbUFuaW1hdGlvblN0YXRlXHJcbiAgICovXHJcbiAgUmFuZG9tQW5pbWF0aW9uU3RhdGUsXHJcbiAgLyoqXHJcbiAgICogQHNlZSBCbGVuZDFkU3RhdGVcclxuICAgKi9cclxuICBCbGVuZDFkU3RhdGUsXHJcbiAgLyoqXHJcbiAgICogQHNlZSBCbGVuZDJkU3RhdGVcclxuICAgKi9cclxuICBCbGVuZDJkU3RhdGUsXHJcbiAgLyoqXHJcbiAgICogQHNlZSBBbmltYXRpb25VdGlsc1xyXG4gICAqL1xyXG4gIEFuaW1hdGlvblV0aWxzLFxyXG5cclxuICBFYXNpbmcsXHJcbiAgLyoqXHJcbiAgICogQHNlZSBMYXllckJsZW5kTW9kZXNcclxuICAgKi9cclxuICBMYXllckJsZW5kTW9kZXMsXHJcbiAgLyoqXHJcbiAgICogQHNlZSBEZWZhdWx0TGF5ZXJCbGVuZE1vZGVcclxuICAgKi9cclxuICBEZWZhdWx0TGF5ZXJCbGVuZE1vZGUsXHJcbiAgLyoqXHJcbiAgICogQHNlZSBBbmltYXRpb25UeXBlc1xyXG4gICAqL1xyXG4gIEFuaW1hdGlvblR5cGVzLFxyXG59O1xyXG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cclxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVC0wXHJcblxyXG4vKipcclxuICogQG1vZHVsZSBjb3JlL0hPU1RcclxuICovXHJcblxyXG5pbXBvcnQgVXRpbHMgZnJvbSAnLi9VdGlscyc7XHJcbmltcG9ydCBNYXRoVXRpbHMgZnJvbSAnLi9NYXRoVXRpbHMnO1xyXG5pbXBvcnQgRGVmZXJyZWQgZnJvbSAnLi9EZWZlcnJlZCc7XHJcbmltcG9ydCB7ZW52fSBmcm9tICcuL0hvc3RFbnZpcm9ubWVudCc7XHJcbmltcG9ydCBNZXNzZW5nZXIgZnJvbSAnLi9NZXNzZW5nZXInO1xyXG5pbXBvcnQgSG9zdE9iamVjdCBmcm9tICcuL0hvc3RPYmplY3QnO1xyXG5pbXBvcnQgTGlwc3luY0ZlYXR1cmUsIHtEZWZhdWx0VmlzZW1lTWFwfSBmcm9tICcuL0xpcHN5bmNGZWF0dXJlJztcclxuaW1wb3J0IEdlc3R1cmVGZWF0dXJlLCB7IERlZmF1bHRHZXN0dXJlV29yZHMgfSBmcm9tICcuL0dlc3R1cmVGZWF0dXJlJztcclxuaW1wb3J0IFBvaW50T2ZJbnRlcmVzdEZlYXR1cmUsIHsgQXhpc01hcCB9IGZyb20gJy4vUG9pbnRPZkludGVyZXN0RmVhdHVyZSc7XHJcblxyXG5pbXBvcnQgYXdzIGZyb20gJy4vYXdzcGFjayc7XHJcbmltcG9ydCBhbmltIGZyb20gJy4vYW5pbXBhY2snO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gIC8qKlxyXG4gICAqIEBzZWUgZW52XHJcbiAgICovXHJcbiAgZW52LFxyXG4gIC8qKlxyXG4gICAqIEBzZWUgVXRpbHNcclxuICAgKi9cclxuICBVdGlscyxcclxuICAvKipcclxuICAgKiBAc2VlIE1hdGhVdGlsc1xyXG4gICAqL1xyXG4gIE1hdGhVdGlscyxcclxuICAvKipcclxuICAgKiBAc2VlIERlZmVycmVkXHJcbiAgICovXHJcbiAgRGVmZXJyZWQsXHJcbiAgLyoqXHJcbiAgICogQHNlZSBjb3JlL01lc3NlbmdlclxyXG4gICAqL1xyXG4gIE1lc3NlbmdlcixcclxuICAvKipcclxuICAgKiBAc2VlIGNvcmUvSG9zdE9iamVjdFxyXG4gICAqL1xyXG4gIEhvc3RPYmplY3QsXHJcbiAgLyoqXHJcbiAgICogQHNlZSBjb3JlL0xpcHN5bmNGZWF0dXJlXHJcbiAgICovXHJcbiAgTGlwc3luY0ZlYXR1cmUsXHJcbiAgLyoqXHJcbiAgICogQHNlZSBHZXN0dXJlRmVhdHVyZVxyXG4gICAqL1xyXG4gIEdlc3R1cmVGZWF0dXJlLFxyXG4gIC8qKlxyXG4gICAqIEBzZWUgY29yZS9Qb2ludE9mSW50ZXJlc3RGZWF0dXJlXHJcbiAgICovXHJcbiAgUG9pbnRPZkludGVyZXN0RmVhdHVyZSxcclxuICAvKipcclxuICAgKiBAc2VlIERlZmF1bHRWaXNlbWVNYXBcclxuICAgKi9cclxuICBEZWZhdWx0VmlzZW1lTWFwLFxyXG4gIC8qKlxyXG4gICAqIEBzZWUgRGVmYXVsdEdlc3R1cmVXb3Jkc1xyXG4gICAqL1xyXG4gIERlZmF1bHRHZXN0dXJlV29yZHMsXHJcbiAgLyoqXHJcbiAgICogQHNlZSBBeGlzTWFwXHJcbiAgICovXHJcbiAgQXhpc01hcCxcclxuICAvKipcclxuICAgKiBAc2VlIG1vZHVsZTpjb3JlL2F3c3BhY2tcclxuICAgKi9cclxuICBhd3MsXHJcbiAgLyoqXHJcbiAgICogQHNlZSBtb2R1bGU6Y29yZS9hbmltcGFja1xyXG4gICAqL1xyXG4gIGFuaW0sXHJcbn07XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///333\n')}]).default})); \ No newline at end of file +!function(e,n){"object"==typeof exports&&"object"==typeof module?module.exports=n():"function"==typeof define&&define.amd?define("HOST",[],n):"object"==typeof exports?exports.HOST=n():e.HOST=n()}("undefined"!=typeof self?self:"undefined"!=typeof global?global:this,(function(){return function(e){var n={};function t(c){if(n[c])return n[c].exports;var B=n[c]={i:c,l:!1,exports:{}};return e[c].call(B.exports,B,B.exports,t),B.l=!0,B.exports}return t.m=e,t.c=n,t.d=function(e,n,c){t.o(e,n)||Object.defineProperty(e,n,{enumerable:!0,get:c})},t.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},t.t=function(e,n){if(1&n&&(e=t(e)),8&n)return e;if(4&n&&"object"==typeof e&&e&&e.__esModule)return e;var c=Object.create(null);if(t.r(c),Object.defineProperty(c,"default",{enumerable:!0,value:e}),2&n&&"string"!=typeof e)for(var B in e)t.d(c,B,function(n){return e[n]}.bind(null,B));return c},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},t.p="",t(t.s=130)}([function(module,exports,__webpack_require__){eval("var global = __webpack_require__(2);\nvar core = __webpack_require__(18);\nvar hide = __webpack_require__(11);\nvar redefine = __webpack_require__(12);\nvar ctx = __webpack_require__(19);\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n var IS_FORCED = type & $export.F;\n var IS_GLOBAL = type & $export.G;\n var IS_STATIC = type & $export.S;\n var IS_PROTO = type & $export.P;\n var IS_BIND = type & $export.B;\n var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE];\n var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});\n var key, own, out, exp;\n if (IS_GLOBAL) source = name;\n for (key in source) {\n // contains in native\n own = !IS_FORCED && target && target[key] !== undefined;\n // export native or passed\n out = (own ? target : source)[key];\n // bind timers to global for call from export context\n exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n // extend global\n if (target) redefine(target, key, out, type & $export.U);\n // export\n if (exports[key] != out) hide(exports, key, exp);\n if (IS_PROTO && expProto[key] != out) expProto[key] = out;\n }\n};\nglobal.core = core;\n// type bitmap\n$export.F = 1; // forced\n$export.G = 2; // global\n$export.S = 4; // static\n$export.P = 8; // proto\n$export.B = 16; // bind\n$export.W = 32; // wrap\n$export.U = 64; // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZXhwb3J0LmpzPzVjYTEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsYUFBYSxtQkFBTyxDQUFDLENBQVc7QUFDaEMsV0FBVyxtQkFBTyxDQUFDLEVBQVM7QUFDNUIsV0FBVyxtQkFBTyxDQUFDLEVBQVM7QUFDNUIsZUFBZSxtQkFBTyxDQUFDLEVBQWE7QUFDcEMsVUFBVSxtQkFBTyxDQUFDLEVBQVE7QUFDMUI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0ZBQWtGLHVCQUF1QjtBQUN6RyxpRUFBaUU7QUFDakUsK0RBQStEO0FBQy9EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZCxjQUFjO0FBQ2QsY0FBYztBQUNkLGNBQWM7QUFDZCxlQUFlO0FBQ2YsZUFBZTtBQUNmLGVBQWU7QUFDZixnQkFBZ0I7QUFDaEIiLCJmaWxlIjoiMC5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xuXG52YXIgJGV4cG9ydCA9IGZ1bmN0aW9uICh0eXBlLCBuYW1lLCBzb3VyY2UpIHtcbiAgdmFyIElTX0ZPUkNFRCA9IHR5cGUgJiAkZXhwb3J0LkY7XG4gIHZhciBJU19HTE9CQUwgPSB0eXBlICYgJGV4cG9ydC5HO1xuICB2YXIgSVNfU1RBVElDID0gdHlwZSAmICRleHBvcnQuUztcbiAgdmFyIElTX1BST1RPID0gdHlwZSAmICRleHBvcnQuUDtcbiAgdmFyIElTX0JJTkQgPSB0eXBlICYgJGV4cG9ydC5CO1xuICB2YXIgdGFyZ2V0ID0gSVNfR0xPQkFMID8gZ2xvYmFsIDogSVNfU1RBVElDID8gZ2xvYmFsW25hbWVdIHx8IChnbG9iYWxbbmFtZV0gPSB7fSkgOiAoZ2xvYmFsW25hbWVdIHx8IHt9KVtQUk9UT1RZUEVdO1xuICB2YXIgZXhwb3J0cyA9IElTX0dMT0JBTCA/IGNvcmUgOiBjb3JlW25hbWVdIHx8IChjb3JlW25hbWVdID0ge30pO1xuICB2YXIgZXhwUHJvdG8gPSBleHBvcnRzW1BST1RPVFlQRV0gfHwgKGV4cG9ydHNbUFJPVE9UWVBFXSA9IHt9KTtcbiAgdmFyIGtleSwgb3duLCBvdXQsIGV4cDtcbiAgaWYgKElTX0dMT0JBTCkgc291cmNlID0gbmFtZTtcbiAgZm9yIChrZXkgaW4gc291cmNlKSB7XG4gICAgLy8gY29udGFpbnMgaW4gbmF0aXZlXG4gICAgb3duID0gIUlTX0ZPUkNFRCAmJiB0YXJnZXQgJiYgdGFyZ2V0W2tleV0gIT09IHVuZGVmaW5lZDtcbiAgICAvLyBleHBvcnQgbmF0aXZlIG9yIHBhc3NlZFxuICAgIG91dCA9IChvd24gPyB0YXJnZXQgOiBzb3VyY2UpW2tleV07XG4gICAgLy8gYmluZCB0aW1lcnMgdG8gZ2xvYmFsIGZvciBjYWxsIGZyb20gZXhwb3J0IGNvbnRleHRcbiAgICBleHAgPSBJU19CSU5EICYmIG93biA/IGN0eChvdXQsIGdsb2JhbCkgOiBJU19QUk9UTyAmJiB0eXBlb2Ygb3V0ID09ICdmdW5jdGlvbicgPyBjdHgoRnVuY3Rpb24uY2FsbCwgb3V0KSA6IG91dDtcbiAgICAvLyBleHRlbmQgZ2xvYmFsXG4gICAgaWYgKHRhcmdldCkgcmVkZWZpbmUodGFyZ2V0LCBrZXksIG91dCwgdHlwZSAmICRleHBvcnQuVSk7XG4gICAgLy8gZXhwb3J0XG4gICAgaWYgKGV4cG9ydHNba2V5XSAhPSBvdXQpIGhpZGUoZXhwb3J0cywga2V5LCBleHApO1xuICAgIGlmIChJU19QUk9UTyAmJiBleHBQcm90b1trZXldICE9IG91dCkgZXhwUHJvdG9ba2V5XSA9IG91dDtcbiAgfVxufTtcbmdsb2JhbC5jb3JlID0gY29yZTtcbi8vIHR5cGUgYml0bWFwXG4kZXhwb3J0LkYgPSAxOyAgIC8vIGZvcmNlZFxuJGV4cG9ydC5HID0gMjsgICAvLyBnbG9iYWxcbiRleHBvcnQuUyA9IDQ7ICAgLy8gc3RhdGljXG4kZXhwb3J0LlAgPSA4OyAgIC8vIHByb3RvXG4kZXhwb3J0LkIgPSAxNjsgIC8vIGJpbmRcbiRleHBvcnQuVyA9IDMyOyAgLy8gd3JhcFxuJGV4cG9ydC5VID0gNjQ7ICAvLyBzYWZlXG4kZXhwb3J0LlIgPSAxMjg7IC8vIHJlYWwgcHJvdG8gbWV0aG9kIGZvciBgbGlicmFyeWBcbm1vZHVsZS5leHBvcnRzID0gJGV4cG9ydDtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///0\n")},function(module,exports,__webpack_require__){eval("var isObject = __webpack_require__(4);\nmodule.exports = function (it) {\n if (!isObject(it)) throw TypeError(it + ' is not an object!');\n return it;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYW4tb2JqZWN0LmpzP2NiN2MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckM7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMS5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKCFpc09iamVjdChpdCkpIHRocm93IFR5cGVFcnJvcihpdCArICcgaXMgbm90IGFuIG9iamVjdCEnKTtcbiAgcmV0dXJuIGl0O1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///1\n")},function(module,exports){eval("// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n ? window : typeof self != 'undefined' && self.Math == Math ? self\n // eslint-disable-next-line no-new-func\n : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZ2xvYmFsLmpzPzc3MjYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlDQUF5QyIsImZpbGUiOiIyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzg2I2lzc3VlY29tbWVudC0xMTU3NTkwMjhcbnZhciBnbG9iYWwgPSBtb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiB3aW5kb3cgIT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93Lk1hdGggPT0gTWF0aFxuICA/IHdpbmRvdyA6IHR5cGVvZiBzZWxmICE9ICd1bmRlZmluZWQnICYmIHNlbGYuTWF0aCA9PSBNYXRoID8gc2VsZlxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmNcbiAgOiBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuaWYgKHR5cGVvZiBfX2cgPT0gJ251bWJlcicpIF9fZyA9IGdsb2JhbDsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bmRlZlxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2\n")},function(module,exports){eval("module.exports = function (exec) {\n try {\n return !!exec();\n } catch (e) {\n return true;\n }\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZmFpbHMuanM/NzllNSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBIiwiZmlsZSI6IjMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICEhZXhlYygpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///3\n")},function(module,exports){eval("module.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtb2JqZWN0LmpzP2QzZjQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBIiwiZmlsZSI6IjQuanMiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09PSAnb2JqZWN0JyA/IGl0ICE9PSBudWxsIDogdHlwZW9mIGl0ID09PSAnZnVuY3Rpb24nO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4\n")},function(module,exports,__webpack_require__){eval("var store = __webpack_require__(47)('wks');\nvar uid = __webpack_require__(33);\nvar Symbol = __webpack_require__(2).Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n return store[name] || (store[name] =\n USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fd2tzLmpzPzJiNGMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSxtQkFBTyxDQUFDLEVBQVc7QUFDL0IsVUFBVSxtQkFBTyxDQUFDLEVBQVE7QUFDMUIsYUFBYSxtQkFBTyxDQUFDLENBQVc7QUFDaEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiNS5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBzdG9yZSA9IHJlcXVpcmUoJy4vX3NoYXJlZCcpKCd3a3MnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuL191aWQnKTtcbnZhciBTeW1ib2wgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5TeW1ib2w7XG52YXIgVVNFX1NZTUJPTCA9IHR5cGVvZiBTeW1ib2wgPT0gJ2Z1bmN0aW9uJztcblxudmFyICRleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZSkge1xuICByZXR1cm4gc3RvcmVbbmFtZV0gfHwgKHN0b3JlW25hbWVdID1cbiAgICBVU0VfU1lNQk9MICYmIFN5bWJvbFtuYW1lXSB8fCAoVVNFX1NZTUJPTCA/IFN5bWJvbCA6IHVpZCkoJ1N5bWJvbC4nICsgbmFtZSkpO1xufTtcblxuJGV4cG9ydHMuc3RvcmUgPSBzdG9yZTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///5\n")},function(module,exports,__webpack_require__){eval("// 7.1.15 ToLength\nvar toInteger = __webpack_require__(21);\nvar min = Math.min;\nmodule.exports = function (it) {\n return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8tbGVuZ3RoLmpzPzlkZWYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDO0FBQ0E7QUFDQSwyREFBMkQ7QUFDM0QiLCJmaWxlIjoiNi5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDcuMS4xNSBUb0xlbmd0aFxudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciBtaW4gPSBNYXRoLm1pbjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCA+IDAgPyBtaW4odG9JbnRlZ2VyKGl0KSwgMHgxZmZmZmZmZmZmZmZmZikgOiAwOyAvLyBwb3coMiwgNTMpIC0gMSA9PSA5MDA3MTk5MjU0NzQwOTkxXG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///6\n")},function(module,exports,__webpack_require__){eval("// Thank's IE8 for his funny defineProperty\nmodule.exports = !__webpack_require__(3)(function () {\n return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZGVzY3JpcHRvcnMuanM/OWUxZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGtCQUFrQixtQkFBTyxDQUFDLENBQVU7QUFDcEMsaUNBQWlDLFFBQVEsbUJBQW1CLFVBQVUsRUFBRSxFQUFFO0FBQzFFLENBQUMiLCJmaWxlIjoiNy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIFRoYW5rJ3MgSUU4IGZvciBoaXMgZnVubnkgZGVmaW5lUHJvcGVydHlcbm1vZHVsZS5leHBvcnRzID0gIXJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAnYScsIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9IH0pLmEgIT0gNztcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7\n")},function(module,exports,__webpack_require__){eval("var anObject = __webpack_require__(1);\nvar IE8_DOM_DEFINE = __webpack_require__(94);\nvar toPrimitive = __webpack_require__(23);\nvar dP = Object.defineProperty;\n\nexports.f = __webpack_require__(7) ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return dP(O, P, Attributes);\n } catch (e) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWRwLmpzPzg2Y2MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMscUJBQXFCLG1CQUFPLENBQUMsRUFBbUI7QUFDaEQsa0JBQWtCLG1CQUFPLENBQUMsRUFBaUI7QUFDM0M7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLENBQWdCO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHLFlBQVk7QUFDZjtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiI4LmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuL19pZTgtZG9tLWRlZmluZScpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG52YXIgZFAgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG5cbmV4cG9ydHMuZiA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICBQID0gdG9QcmltaXRpdmUoUCwgdHJ1ZSk7XG4gIGFuT2JqZWN0KEF0dHJpYnV0ZXMpO1xuICBpZiAoSUU4X0RPTV9ERUZJTkUpIHRyeSB7XG4gICAgcmV0dXJuIGRQKE8sIFAsIEF0dHJpYnV0ZXMpO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKCdnZXQnIGluIEF0dHJpYnV0ZXMgfHwgJ3NldCcgaW4gQXR0cmlidXRlcykgdGhyb3cgVHlwZUVycm9yKCdBY2Nlc3NvcnMgbm90IHN1cHBvcnRlZCEnKTtcbiAgaWYgKCd2YWx1ZScgaW4gQXR0cmlidXRlcykgT1tQXSA9IEF0dHJpYnV0ZXMudmFsdWU7XG4gIHJldHVybiBPO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///8\n")},function(module,exports,__webpack_require__){eval("// 7.1.13 ToObject(argument)\nvar defined = __webpack_require__(24);\nmodule.exports = function (it) {\n return Object(defined(it));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8tb2JqZWN0LmpzPzRiZjgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsRUFBWTtBQUNsQztBQUNBO0FBQ0EiLCJmaWxlIjoiOS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDcuMS4xMyBUb09iamVjdChhcmd1bWVudClcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIE9iamVjdChkZWZpbmVkKGl0KSk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9\n")},function(module,exports){eval("module.exports = function (it) {\n if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n return it;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYS1mdW5jdGlvbi5qcz9kOGU4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjEwLmpzIiwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKHR5cGVvZiBpdCAhPSAnZnVuY3Rpb24nKSB0aHJvdyBUeXBlRXJyb3IoaXQgKyAnIGlzIG5vdCBhIGZ1bmN0aW9uIScpO1xuICByZXR1cm4gaXQ7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///10\n")},function(module,exports,__webpack_require__){eval("var dP = __webpack_require__(8);\nvar createDesc = __webpack_require__(32);\nmodule.exports = __webpack_require__(7) ? function (object, key, value) {\n return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faGlkZS5qcz8zMmU5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFNBQVMsbUJBQU8sQ0FBQyxDQUFjO0FBQy9CLGlCQUFpQixtQkFBTyxDQUFDLEVBQWtCO0FBQzNDLGlCQUFpQixtQkFBTyxDQUFDLENBQWdCO0FBQ3pDO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSIsImZpbGUiOiIxMS5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xudmFyIGNyZWF0ZURlc2MgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIHJldHVybiBkUC5mKG9iamVjdCwga2V5LCBjcmVhdGVEZXNjKDEsIHZhbHVlKSk7XG59IDogZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICBvYmplY3Rba2V5XSA9IHZhbHVlO1xuICByZXR1cm4gb2JqZWN0O1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///11\n")},function(module,exports,__webpack_require__){eval("var global = __webpack_require__(2);\nvar hide = __webpack_require__(11);\nvar has = __webpack_require__(14);\nvar SRC = __webpack_require__(33)('src');\nvar $toString = __webpack_require__(134);\nvar TO_STRING = 'toString';\nvar TPL = ('' + $toString).split(TO_STRING);\n\n__webpack_require__(18).inspectSource = function (it) {\n return $toString.call(it);\n};\n\n(module.exports = function (O, key, val, safe) {\n var isFunction = typeof val == 'function';\n if (isFunction) has(val, 'name') || hide(val, 'name', key);\n if (O[key] === val) return;\n if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));\n if (O === global) {\n O[key] = val;\n } else if (!safe) {\n delete O[key];\n hide(O, key, val);\n } else if (O[key]) {\n O[key] = val;\n } else {\n hide(O, key, val);\n }\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, TO_STRING, function toString() {\n return typeof this == 'function' && this[SRC] || $toString.call(this);\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcmVkZWZpbmUuanM/MmFiYSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxhQUFhLG1CQUFPLENBQUMsQ0FBVztBQUNoQyxXQUFXLG1CQUFPLENBQUMsRUFBUztBQUM1QixVQUFVLG1CQUFPLENBQUMsRUFBUTtBQUMxQixVQUFVLG1CQUFPLENBQUMsRUFBUTtBQUMxQixnQkFBZ0IsbUJBQU8sQ0FBQyxHQUF1QjtBQUMvQztBQUNBOztBQUVBLG1CQUFPLENBQUMsRUFBUztBQUNqQjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0EsQ0FBQyIsImZpbGUiOiIxMi5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIFNSQyA9IHJlcXVpcmUoJy4vX3VpZCcpKCdzcmMnKTtcbnZhciAkdG9TdHJpbmcgPSByZXF1aXJlKCcuL19mdW5jdGlvbi10by1zdHJpbmcnKTtcbnZhciBUT19TVFJJTkcgPSAndG9TdHJpbmcnO1xudmFyIFRQTCA9ICgnJyArICR0b1N0cmluZykuc3BsaXQoVE9fU1RSSU5HKTtcblxucmVxdWlyZSgnLi9fY29yZScpLmluc3BlY3RTb3VyY2UgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuICR0b1N0cmluZy5jYWxsKGl0KTtcbn07XG5cbihtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBrZXksIHZhbCwgc2FmZSkge1xuICB2YXIgaXNGdW5jdGlvbiA9IHR5cGVvZiB2YWwgPT0gJ2Z1bmN0aW9uJztcbiAgaWYgKGlzRnVuY3Rpb24pIGhhcyh2YWwsICduYW1lJykgfHwgaGlkZSh2YWwsICduYW1lJywga2V5KTtcbiAgaWYgKE9ba2V5XSA9PT0gdmFsKSByZXR1cm47XG4gIGlmIChpc0Z1bmN0aW9uKSBoYXModmFsLCBTUkMpIHx8IGhpZGUodmFsLCBTUkMsIE9ba2V5XSA/ICcnICsgT1trZXldIDogVFBMLmpvaW4oU3RyaW5nKGtleSkpKTtcbiAgaWYgKE8gPT09IGdsb2JhbCkge1xuICAgIE9ba2V5XSA9IHZhbDtcbiAgfSBlbHNlIGlmICghc2FmZSkge1xuICAgIGRlbGV0ZSBPW2tleV07XG4gICAgaGlkZShPLCBrZXksIHZhbCk7XG4gIH0gZWxzZSBpZiAoT1trZXldKSB7XG4gICAgT1trZXldID0gdmFsO1xuICB9IGVsc2Uge1xuICAgIGhpZGUoTywga2V5LCB2YWwpO1xuICB9XG4vLyBhZGQgZmFrZSBGdW5jdGlvbiN0b1N0cmluZyBmb3IgY29ycmVjdCB3b3JrIHdyYXBwZWQgbWV0aG9kcyAvIGNvbnN0cnVjdG9ycyB3aXRoIG1ldGhvZHMgbGlrZSBMb0Rhc2ggaXNOYXRpdmVcbn0pKEZ1bmN0aW9uLnByb3RvdHlwZSwgVE9fU1RSSU5HLCBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgcmV0dXJuIHR5cGVvZiB0aGlzID09ICdmdW5jdGlvbicgJiYgdGhpc1tTUkNdIHx8ICR0b1N0cmluZy5jYWxsKHRoaXMpO1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///12\n")},function(module,exports,__webpack_require__){eval("var $export = __webpack_require__(0);\nvar fails = __webpack_require__(3);\nvar defined = __webpack_require__(24);\nvar quot = /\"/g;\n// B.2.3.2.1 CreateHTML(string, tag, attribute, value)\nvar createHTML = function (string, tag, attribute, value) {\n var S = String(defined(string));\n var p1 = '<' + tag;\n if (attribute !== '') p1 += ' ' + attribute + '=\"' + String(value).replace(quot, '"') + '\"';\n return p1 + '>' + S + '';\n};\nmodule.exports = function (NAME, exec) {\n var O = {};\n O[NAME] = exec(createHTML);\n $export($export.P + $export.F * fails(function () {\n var test = ''[NAME]('\"');\n return test !== test.toLowerCase() || test.split('\"').length > 3;\n }), 'String', O);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLWh0bWwuanM/Mzg2YiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxZQUFZLG1CQUFPLENBQUMsQ0FBVTtBQUM5QixjQUFjLG1CQUFPLENBQUMsRUFBWTtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEZBQTBGO0FBQzFGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0giLCJmaWxlIjoiMTMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xudmFyIHF1b3QgPSAvXCIvZztcbi8vIEIuMi4zLjIuMSBDcmVhdGVIVE1MKHN0cmluZywgdGFnLCBhdHRyaWJ1dGUsIHZhbHVlKVxudmFyIGNyZWF0ZUhUTUwgPSBmdW5jdGlvbiAoc3RyaW5nLCB0YWcsIGF0dHJpYnV0ZSwgdmFsdWUpIHtcbiAgdmFyIFMgPSBTdHJpbmcoZGVmaW5lZChzdHJpbmcpKTtcbiAgdmFyIHAxID0gJzwnICsgdGFnO1xuICBpZiAoYXR0cmlidXRlICE9PSAnJykgcDEgKz0gJyAnICsgYXR0cmlidXRlICsgJz1cIicgKyBTdHJpbmcodmFsdWUpLnJlcGxhY2UocXVvdCwgJyZxdW90OycpICsgJ1wiJztcbiAgcmV0dXJuIHAxICsgJz4nICsgUyArICc8LycgKyB0YWcgKyAnPic7XG59O1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTkFNRSwgZXhlYykge1xuICB2YXIgTyA9IHt9O1xuICBPW05BTUVdID0gZXhlYyhjcmVhdGVIVE1MKTtcbiAgJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHRlc3QgPSAnJ1tOQU1FXSgnXCInKTtcbiAgICByZXR1cm4gdGVzdCAhPT0gdGVzdC50b0xvd2VyQ2FzZSgpIHx8IHRlc3Quc3BsaXQoJ1wiJykubGVuZ3RoID4gMztcbiAgfSksICdTdHJpbmcnLCBPKTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///13\n")},function(module,exports){eval("var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faGFzLmpzPzY5YTgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdUJBQXVCO0FBQ3ZCO0FBQ0E7QUFDQSIsImZpbGUiOiIxNC5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBoYXNPd25Qcm9wZXJ0eSA9IHt9Lmhhc093blByb3BlcnR5O1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIGtleSkge1xuICByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbChpdCwga2V5KTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///14\n")},function(module,exports,__webpack_require__){eval("// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = __webpack_require__(48);\nvar defined = __webpack_require__(24);\nmodule.exports = function (it) {\n return IObject(defined(it));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8taW9iamVjdC5qcz82ODIxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLEVBQVk7QUFDbEMsY0FBYyxtQkFBTyxDQUFDLEVBQVk7QUFDbEM7QUFDQTtBQUNBIiwiZmlsZSI6IjE1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gdG8gaW5kZXhlZCBvYmplY3QsIHRvT2JqZWN0IHdpdGggZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBzdHJpbmdzXG52YXIgSU9iamVjdCA9IHJlcXVpcmUoJy4vX2lvYmplY3QnKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIElPYmplY3QoZGVmaW5lZChpdCkpO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///15\n")},function(module,exports,__webpack_require__){eval("var pIE = __webpack_require__(49);\nvar createDesc = __webpack_require__(32);\nvar toIObject = __webpack_require__(15);\nvar toPrimitive = __webpack_require__(23);\nvar has = __webpack_require__(14);\nvar IE8_DOM_DEFINE = __webpack_require__(94);\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nexports.f = __webpack_require__(7) ? gOPD : function getOwnPropertyDescriptor(O, P) {\n O = toIObject(O);\n P = toPrimitive(P, true);\n if (IE8_DOM_DEFINE) try {\n return gOPD(O, P);\n } catch (e) { /* empty */ }\n if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdvcGQuanM/MTFlOSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxVQUFVLG1CQUFPLENBQUMsRUFBZTtBQUNqQyxpQkFBaUIsbUJBQU8sQ0FBQyxFQUFrQjtBQUMzQyxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDLGtCQUFrQixtQkFBTyxDQUFDLEVBQWlCO0FBQzNDLFVBQVUsbUJBQU8sQ0FBQyxFQUFRO0FBQzFCLHFCQUFxQixtQkFBTyxDQUFDLEVBQW1CO0FBQ2hEOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxDQUFnQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUcsWUFBWTtBQUNmO0FBQ0EiLCJmaWxlIjoiMTYuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgcElFID0gcmVxdWlyZSgnLi9fb2JqZWN0LXBpZScpO1xudmFyIGNyZWF0ZURlc2MgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuL19pZTgtZG9tLWRlZmluZScpO1xudmFyIGdPUEQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG5leHBvcnRzLmYgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gZ09QRCA6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKSB7XG4gIE8gPSB0b0lPYmplY3QoTyk7XG4gIFAgPSB0b1ByaW1pdGl2ZShQLCB0cnVlKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiBnT1BEKE8sIFApO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKGhhcyhPLCBQKSkgcmV0dXJuIGNyZWF0ZURlc2MoIXBJRS5mLmNhbGwoTywgUCksIE9bUF0pO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///16\n")},function(module,exports,__webpack_require__){eval("// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = __webpack_require__(14);\nvar toObject = __webpack_require__(9);\nvar IE_PROTO = __webpack_require__(68)('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n O = toObject(O);\n if (has(O, IE_PROTO)) return O[IE_PROTO];\n if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n return O.constructor.prototype;\n } return O instanceof Object ? ObjectProto : null;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdwby5qcz8zOGZkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsVUFBVSxtQkFBTyxDQUFDLEVBQVE7QUFDMUIsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZUFBZSxtQkFBTyxDQUFDLEVBQWU7QUFDdEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCIsImZpbGUiOiIxNy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDE5LjEuMi45IC8gMTUuMi4zLjIgT2JqZWN0LmdldFByb3RvdHlwZU9mKE8pXG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciBJRV9QUk9UTyA9IHJlcXVpcmUoJy4vX3NoYXJlZC1rZXknKSgnSUVfUFJPVE8nKTtcbnZhciBPYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmdldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIChPKSB7XG4gIE8gPSB0b09iamVjdChPKTtcbiAgaWYgKGhhcyhPLCBJRV9QUk9UTykpIHJldHVybiBPW0lFX1BST1RPXTtcbiAgaWYgKHR5cGVvZiBPLmNvbnN0cnVjdG9yID09ICdmdW5jdGlvbicgJiYgTyBpbnN0YW5jZW9mIE8uY29uc3RydWN0b3IpIHtcbiAgICByZXR1cm4gTy5jb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG4gIH0gcmV0dXJuIE8gaW5zdGFuY2VvZiBPYmplY3QgPyBPYmplY3RQcm90byA6IG51bGw7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///17\n")},function(module,exports){eval("var core = module.exports = { version: '2.6.12' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY29yZS5qcz84Mzc4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDZCQUE2QjtBQUM3Qix1Q0FBdUMiLCJmaWxlIjoiMTguanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgY29yZSA9IG1vZHVsZS5leHBvcnRzID0geyB2ZXJzaW9uOiAnMi42LjEyJyB9O1xuaWYgKHR5cGVvZiBfX2UgPT0gJ251bWJlcicpIF9fZSA9IGNvcmU7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///18\n")},function(module,exports,__webpack_require__){eval("// optional / simple context binding\nvar aFunction = __webpack_require__(10);\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY3R4LmpzPzliNDMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIxOS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIG9wdGlvbmFsIC8gc2ltcGxlIGNvbnRleHQgYmluZGluZ1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGZuLCB0aGF0LCBsZW5ndGgpIHtcbiAgYUZ1bmN0aW9uKGZuKTtcbiAgaWYgKHRoYXQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGZuO1xuICBzd2l0Y2ggKGxlbmd0aCkge1xuICAgIGNhc2UgMTogcmV0dXJuIGZ1bmN0aW9uIChhKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhKTtcbiAgICB9O1xuICAgIGNhc2UgMjogcmV0dXJuIGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhLCBiKTtcbiAgICB9O1xuICAgIGNhc2UgMzogcmV0dXJuIGZ1bmN0aW9uIChhLCBiLCBjKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhLCBiLCBjKTtcbiAgICB9O1xuICB9XG4gIHJldHVybiBmdW5jdGlvbiAoLyogLi4uYXJncyAqLykge1xuICAgIHJldHVybiBmbi5hcHBseSh0aGF0LCBhcmd1bWVudHMpO1xuICB9O1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///19\n")},function(module,exports){eval("var toString = {}.toString;\n\nmodule.exports = function (it) {\n return toString.call(it).slice(8, -1);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY29mLmpzPzJkOTUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsaUJBQWlCOztBQUVqQjtBQUNBO0FBQ0EiLCJmaWxlIjoiMjAuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgdG9TdHJpbmcgPSB7fS50b1N0cmluZztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwoaXQpLnNsaWNlKDgsIC0xKTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///20\n")},function(module,exports){eval("// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8taW50ZWdlci5qcz80NTg4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIyMS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDcuMS40IFRvSW50ZWdlclxudmFyIGNlaWwgPSBNYXRoLmNlaWw7XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGlzTmFOKGl0ID0gK2l0KSA/IDAgOiAoaXQgPiAwID8gZmxvb3IgOiBjZWlsKShpdCk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///21\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar fails = __webpack_require__(3);\n\nmodule.exports = function (method, arg) {\n return !!method && fails(function () {\n // eslint-disable-next-line no-useless-call\n arg ? method.call(null, function () { /* empty */ }, 1) : method.call(null);\n });\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaWN0LW1ldGhvZC5qcz8yZjIxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsWUFBWSxtQkFBTyxDQUFDLENBQVU7O0FBRTlCO0FBQ0E7QUFDQTtBQUNBLHlDQUF5QyxjQUFjO0FBQ3ZELEdBQUc7QUFDSCIsImZpbGUiOiIyMi5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG1ldGhvZCwgYXJnKSB7XG4gIHJldHVybiAhIW1ldGhvZCAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZWxlc3MtY2FsbFxuICAgIGFyZyA/IG1ldGhvZC5jYWxsKG51bGwsIGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSwgMSkgOiBtZXRob2QuY2FsbChudWxsKTtcbiAgfSk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///22\n")},function(module,exports,__webpack_require__){eval("// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = __webpack_require__(4);\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n if (!isObject(it)) return it;\n var fn, val;\n if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8tcHJpbWl0aXZlLmpzPzZhOTkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIyMy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDcuMS4xIFRvUHJpbWl0aXZlKGlucHV0IFssIFByZWZlcnJlZFR5cGVdKVxudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG4vLyBpbnN0ZWFkIG9mIHRoZSBFUzYgc3BlYyB2ZXJzaW9uLCB3ZSBkaWRuJ3QgaW1wbGVtZW50IEBAdG9QcmltaXRpdmUgY2FzZVxuLy8gYW5kIHRoZSBzZWNvbmQgYXJndW1lbnQgLSBmbGFnIC0gcHJlZmVycmVkIHR5cGUgaXMgYSBzdHJpbmdcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBTKSB7XG4gIGlmICghaXNPYmplY3QoaXQpKSByZXR1cm4gaXQ7XG4gIHZhciBmbiwgdmFsO1xuICBpZiAoUyAmJiB0eXBlb2YgKGZuID0gaXQudG9TdHJpbmcpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaXQpKSkgcmV0dXJuIHZhbDtcbiAgaWYgKHR5cGVvZiAoZm4gPSBpdC52YWx1ZU9mKSA9PSAnZnVuY3Rpb24nICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGl0KSkpIHJldHVybiB2YWw7XG4gIGlmICghUyAmJiB0eXBlb2YgKGZuID0gaXQudG9TdHJpbmcpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaXQpKSkgcmV0dXJuIHZhbDtcbiAgdGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///23\n")},function(module,exports){eval('// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError("Can\'t call method on " + it);\n return it;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZGVmaW5lZC5qcz9iZTEzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMjQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyA3LjIuMSBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGFyZ3VtZW50KVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGl0ID09IHVuZGVmaW5lZCkgdGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gIFwiICsgaXQpO1xuICByZXR1cm4gaXQ7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///24\n')},function(module,exports,__webpack_require__){eval("// most Object methods by ES6 should accept primitives\nvar $export = __webpack_require__(0);\nvar core = __webpack_require__(18);\nvar fails = __webpack_require__(3);\nmodule.exports = function (KEY, exec) {\n var fn = (core.Object || {})[KEY] || Object[KEY];\n var exp = {};\n exp[KEY] = exec(fn);\n $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LXNhcC5qcz81ZWRhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsV0FBVyxtQkFBTyxDQUFDLEVBQVM7QUFDNUIsWUFBWSxtQkFBTyxDQUFDLENBQVU7QUFDOUI7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBLHFEQUFxRCxPQUFPLEVBQUU7QUFDOUQiLCJmaWxlIjoiMjUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBtb3N0IE9iamVjdCBtZXRob2RzIGJ5IEVTNiBzaG91bGQgYWNjZXB0IHByaW1pdGl2ZXNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgY29yZSA9IHJlcXVpcmUoJy4vX2NvcmUnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChLRVksIGV4ZWMpIHtcbiAgdmFyIGZuID0gKGNvcmUuT2JqZWN0IHx8IHt9KVtLRVldIHx8IE9iamVjdFtLRVldO1xuICB2YXIgZXhwID0ge307XG4gIGV4cFtLRVldID0gZXhlYyhmbik7XG4gICRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogZmFpbHMoZnVuY3Rpb24gKCkgeyBmbigxKTsgfSksICdPYmplY3QnLCBleHApO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///25\n")},function(module,exports,__webpack_require__){eval("// 0 -> Array#forEach\n// 1 -> Array#map\n// 2 -> Array#filter\n// 3 -> Array#some\n// 4 -> Array#every\n// 5 -> Array#find\n// 6 -> Array#findIndex\nvar ctx = __webpack_require__(19);\nvar IObject = __webpack_require__(48);\nvar toObject = __webpack_require__(9);\nvar toLength = __webpack_require__(6);\nvar asc = __webpack_require__(84);\nmodule.exports = function (TYPE, $create) {\n var IS_MAP = TYPE == 1;\n var IS_FILTER = TYPE == 2;\n var IS_SOME = TYPE == 3;\n var IS_EVERY = TYPE == 4;\n var IS_FIND_INDEX = TYPE == 6;\n var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n var create = $create || asc;\n return function ($this, callbackfn, that) {\n var O = toObject($this);\n var self = IObject(O);\n var f = ctx(callbackfn, that, 3);\n var length = toLength(self.length);\n var index = 0;\n var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;\n var val, res;\n for (;length > index; index++) if (NO_HOLES || index in self) {\n val = self[index];\n res = f(val, index, O);\n if (TYPE) {\n if (IS_MAP) result[index] = res; // map\n else if (res) switch (TYPE) {\n case 3: return true; // some\n case 5: return val; // find\n case 6: return index; // findIndex\n case 2: result.push(val); // filter\n } else if (IS_EVERY) return false; // every\n }\n }\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;\n };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktbWV0aG9kcy5qcz8wYTQ5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVSxtQkFBTyxDQUFDLEVBQVE7QUFDMUIsY0FBYyxtQkFBTyxDQUFDLEVBQVk7QUFDbEMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsVUFBVSxtQkFBTyxDQUFDLEVBQXlCO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVSxlQUFlO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBLHdDQUF3QztBQUN4QztBQUNBLDhCQUE4QjtBQUM5Qiw2QkFBNkI7QUFDN0IsK0JBQStCO0FBQy9CLG1DQUFtQztBQUNuQyxTQUFTLGlDQUFpQztBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjI2LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMCAtPiBBcnJheSNmb3JFYWNoXG4vLyAxIC0+IEFycmF5I21hcFxuLy8gMiAtPiBBcnJheSNmaWx0ZXJcbi8vIDMgLT4gQXJyYXkjc29tZVxuLy8gNCAtPiBBcnJheSNldmVyeVxuLy8gNSAtPiBBcnJheSNmaW5kXG4vLyA2IC0+IEFycmF5I2ZpbmRJbmRleFxudmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIElPYmplY3QgPSByZXF1aXJlKCcuL19pb2JqZWN0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGFzYyA9IHJlcXVpcmUoJy4vX2FycmF5LXNwZWNpZXMtY3JlYXRlJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChUWVBFLCAkY3JlYXRlKSB7XG4gIHZhciBJU19NQVAgPSBUWVBFID09IDE7XG4gIHZhciBJU19GSUxURVIgPSBUWVBFID09IDI7XG4gIHZhciBJU19TT01FID0gVFlQRSA9PSAzO1xuICB2YXIgSVNfRVZFUlkgPSBUWVBFID09IDQ7XG4gIHZhciBJU19GSU5EX0lOREVYID0gVFlQRSA9PSA2O1xuICB2YXIgTk9fSE9MRVMgPSBUWVBFID09IDUgfHwgSVNfRklORF9JTkRFWDtcbiAgdmFyIGNyZWF0ZSA9ICRjcmVhdGUgfHwgYXNjO1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBjYWxsYmFja2ZuLCB0aGF0KSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCgkdGhpcyk7XG4gICAgdmFyIHNlbGYgPSBJT2JqZWN0KE8pO1xuICAgIHZhciBmID0gY3R4KGNhbGxiYWNrZm4sIHRoYXQsIDMpO1xuICAgIHZhciBsZW5ndGggPSB0b0xlbmd0aChzZWxmLmxlbmd0aCk7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgcmVzdWx0ID0gSVNfTUFQID8gY3JlYXRlKCR0aGlzLCBsZW5ndGgpIDogSVNfRklMVEVSID8gY3JlYXRlKCR0aGlzLCAwKSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgdmFsLCByZXM7XG4gICAgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIGlmIChOT19IT0xFUyB8fCBpbmRleCBpbiBzZWxmKSB7XG4gICAgICB2YWwgPSBzZWxmW2luZGV4XTtcbiAgICAgIHJlcyA9IGYodmFsLCBpbmRleCwgTyk7XG4gICAgICBpZiAoVFlQRSkge1xuICAgICAgICBpZiAoSVNfTUFQKSByZXN1bHRbaW5kZXhdID0gcmVzOyAgIC8vIG1hcFxuICAgICAgICBlbHNlIGlmIChyZXMpIHN3aXRjaCAoVFlQRSkge1xuICAgICAgICAgIGNhc2UgMzogcmV0dXJuIHRydWU7ICAgICAgICAgICAgIC8vIHNvbWVcbiAgICAgICAgICBjYXNlIDU6IHJldHVybiB2YWw7ICAgICAgICAgICAgICAvLyBmaW5kXG4gICAgICAgICAgY2FzZSA2OiByZXR1cm4gaW5kZXg7ICAgICAgICAgICAgLy8gZmluZEluZGV4XG4gICAgICAgICAgY2FzZSAyOiByZXN1bHQucHVzaCh2YWwpOyAgICAgICAgLy8gZmlsdGVyXG4gICAgICAgIH0gZWxzZSBpZiAoSVNfRVZFUlkpIHJldHVybiBmYWxzZTsgLy8gZXZlcnlcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIElTX0ZJTkRfSU5ERVggPyAtMSA6IElTX1NPTUUgfHwgSVNfRVZFUlkgPyBJU19FVkVSWSA6IHJlc3VsdDtcbiAgfTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///26\n")},function(module,exports,__webpack_require__){"use strict";eval("\nif (__webpack_require__(7)) {\n var LIBRARY = __webpack_require__(29);\n var global = __webpack_require__(2);\n var fails = __webpack_require__(3);\n var $export = __webpack_require__(0);\n var $typed = __webpack_require__(62);\n var $buffer = __webpack_require__(92);\n var ctx = __webpack_require__(19);\n var anInstance = __webpack_require__(39);\n var propertyDesc = __webpack_require__(32);\n var hide = __webpack_require__(11);\n var redefineAll = __webpack_require__(41);\n var toInteger = __webpack_require__(21);\n var toLength = __webpack_require__(6);\n var toIndex = __webpack_require__(122);\n var toAbsoluteIndex = __webpack_require__(35);\n var toPrimitive = __webpack_require__(23);\n var has = __webpack_require__(14);\n var classof = __webpack_require__(44);\n var isObject = __webpack_require__(4);\n var toObject = __webpack_require__(9);\n var isArrayIter = __webpack_require__(81);\n var create = __webpack_require__(36);\n var getPrototypeOf = __webpack_require__(17);\n var gOPN = __webpack_require__(37).f;\n var getIterFn = __webpack_require__(83);\n var uid = __webpack_require__(33);\n var wks = __webpack_require__(5);\n var createArrayMethod = __webpack_require__(26);\n var createArrayIncludes = __webpack_require__(52);\n var speciesConstructor = __webpack_require__(51);\n var ArrayIterators = __webpack_require__(86);\n var Iterators = __webpack_require__(46);\n var $iterDetect = __webpack_require__(57);\n var setSpecies = __webpack_require__(38);\n var arrayFill = __webpack_require__(85);\n var arrayCopyWithin = __webpack_require__(111);\n var $DP = __webpack_require__(8);\n var $GOPD = __webpack_require__(16);\n var dP = $DP.f;\n var gOPD = $GOPD.f;\n var RangeError = global.RangeError;\n var TypeError = global.TypeError;\n var Uint8Array = global.Uint8Array;\n var ARRAY_BUFFER = 'ArrayBuffer';\n var SHARED_BUFFER = 'Shared' + ARRAY_BUFFER;\n var BYTES_PER_ELEMENT = 'BYTES_PER_ELEMENT';\n var PROTOTYPE = 'prototype';\n var ArrayProto = Array[PROTOTYPE];\n var $ArrayBuffer = $buffer.ArrayBuffer;\n var $DataView = $buffer.DataView;\n var arrayForEach = createArrayMethod(0);\n var arrayFilter = createArrayMethod(2);\n var arraySome = createArrayMethod(3);\n var arrayEvery = createArrayMethod(4);\n var arrayFind = createArrayMethod(5);\n var arrayFindIndex = createArrayMethod(6);\n var arrayIncludes = createArrayIncludes(true);\n var arrayIndexOf = createArrayIncludes(false);\n var arrayValues = ArrayIterators.values;\n var arrayKeys = ArrayIterators.keys;\n var arrayEntries = ArrayIterators.entries;\n var arrayLastIndexOf = ArrayProto.lastIndexOf;\n var arrayReduce = ArrayProto.reduce;\n var arrayReduceRight = ArrayProto.reduceRight;\n var arrayJoin = ArrayProto.join;\n var arraySort = ArrayProto.sort;\n var arraySlice = ArrayProto.slice;\n var arrayToString = ArrayProto.toString;\n var arrayToLocaleString = ArrayProto.toLocaleString;\n var ITERATOR = wks('iterator');\n var TAG = wks('toStringTag');\n var TYPED_CONSTRUCTOR = uid('typed_constructor');\n var DEF_CONSTRUCTOR = uid('def_constructor');\n var ALL_CONSTRUCTORS = $typed.CONSTR;\n var TYPED_ARRAY = $typed.TYPED;\n var VIEW = $typed.VIEW;\n var WRONG_LENGTH = 'Wrong length!';\n\n var $map = createArrayMethod(1, function (O, length) {\n return allocate(speciesConstructor(O, O[DEF_CONSTRUCTOR]), length);\n });\n\n var LITTLE_ENDIAN = fails(function () {\n // eslint-disable-next-line no-undef\n return new Uint8Array(new Uint16Array([1]).buffer)[0] === 1;\n });\n\n var FORCED_SET = !!Uint8Array && !!Uint8Array[PROTOTYPE].set && fails(function () {\n new Uint8Array(1).set({});\n });\n\n var toOffset = function (it, BYTES) {\n var offset = toInteger(it);\n if (offset < 0 || offset % BYTES) throw RangeError('Wrong offset!');\n return offset;\n };\n\n var validate = function (it) {\n if (isObject(it) && TYPED_ARRAY in it) return it;\n throw TypeError(it + ' is not a typed array!');\n };\n\n var allocate = function (C, length) {\n if (!(isObject(C) && TYPED_CONSTRUCTOR in C)) {\n throw TypeError('It is not a typed array constructor!');\n } return new C(length);\n };\n\n var speciesFromList = function (O, list) {\n return fromList(speciesConstructor(O, O[DEF_CONSTRUCTOR]), list);\n };\n\n var fromList = function (C, list) {\n var index = 0;\n var length = list.length;\n var result = allocate(C, length);\n while (length > index) result[index] = list[index++];\n return result;\n };\n\n var addGetter = function (it, key, internal) {\n dP(it, key, { get: function () { return this._d[internal]; } });\n };\n\n var $from = function from(source /* , mapfn, thisArg */) {\n var O = toObject(source);\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var iterFn = getIterFn(O);\n var i, length, values, result, step, iterator;\n if (iterFn != undefined && !isArrayIter(iterFn)) {\n for (iterator = iterFn.call(O), values = [], i = 0; !(step = iterator.next()).done; i++) {\n values.push(step.value);\n } O = values;\n }\n if (mapping && aLen > 2) mapfn = ctx(mapfn, arguments[2], 2);\n for (i = 0, length = toLength(O.length), result = allocate(this, length); length > i; i++) {\n result[i] = mapping ? mapfn(O[i], i) : O[i];\n }\n return result;\n };\n\n var $of = function of(/* ...items */) {\n var index = 0;\n var length = arguments.length;\n var result = allocate(this, length);\n while (length > index) result[index] = arguments[index++];\n return result;\n };\n\n // iOS Safari 6.x fails here\n var TO_LOCALE_BUG = !!Uint8Array && fails(function () { arrayToLocaleString.call(new Uint8Array(1)); });\n\n var $toLocaleString = function toLocaleString() {\n return arrayToLocaleString.apply(TO_LOCALE_BUG ? arraySlice.call(validate(this)) : validate(this), arguments);\n };\n\n var proto = {\n copyWithin: function copyWithin(target, start /* , end */) {\n return arrayCopyWithin.call(validate(this), target, start, arguments.length > 2 ? arguments[2] : undefined);\n },\n every: function every(callbackfn /* , thisArg */) {\n return arrayEvery(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n fill: function fill(value /* , start, end */) { // eslint-disable-line no-unused-vars\n return arrayFill.apply(validate(this), arguments);\n },\n filter: function filter(callbackfn /* , thisArg */) {\n return speciesFromList(this, arrayFilter(validate(this), callbackfn,\n arguments.length > 1 ? arguments[1] : undefined));\n },\n find: function find(predicate /* , thisArg */) {\n return arrayFind(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n findIndex: function findIndex(predicate /* , thisArg */) {\n return arrayFindIndex(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n forEach: function forEach(callbackfn /* , thisArg */) {\n arrayForEach(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n indexOf: function indexOf(searchElement /* , fromIndex */) {\n return arrayIndexOf(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n includes: function includes(searchElement /* , fromIndex */) {\n return arrayIncludes(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n join: function join(separator) { // eslint-disable-line no-unused-vars\n return arrayJoin.apply(validate(this), arguments);\n },\n lastIndexOf: function lastIndexOf(searchElement /* , fromIndex */) { // eslint-disable-line no-unused-vars\n return arrayLastIndexOf.apply(validate(this), arguments);\n },\n map: function map(mapfn /* , thisArg */) {\n return $map(validate(this), mapfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n reduce: function reduce(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduce.apply(validate(this), arguments);\n },\n reduceRight: function reduceRight(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduceRight.apply(validate(this), arguments);\n },\n reverse: function reverse() {\n var that = this;\n var length = validate(that).length;\n var middle = Math.floor(length / 2);\n var index = 0;\n var value;\n while (index < middle) {\n value = that[index];\n that[index++] = that[--length];\n that[length] = value;\n } return that;\n },\n some: function some(callbackfn /* , thisArg */) {\n return arraySome(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n sort: function sort(comparefn) {\n return arraySort.call(validate(this), comparefn);\n },\n subarray: function subarray(begin, end) {\n var O = validate(this);\n var length = O.length;\n var $begin = toAbsoluteIndex(begin, length);\n return new (speciesConstructor(O, O[DEF_CONSTRUCTOR]))(\n O.buffer,\n O.byteOffset + $begin * O.BYTES_PER_ELEMENT,\n toLength((end === undefined ? length : toAbsoluteIndex(end, length)) - $begin)\n );\n }\n };\n\n var $slice = function slice(start, end) {\n return speciesFromList(this, arraySlice.call(validate(this), start, end));\n };\n\n var $set = function set(arrayLike /* , offset */) {\n validate(this);\n var offset = toOffset(arguments[1], 1);\n var length = this.length;\n var src = toObject(arrayLike);\n var len = toLength(src.length);\n var index = 0;\n if (len + offset > length) throw RangeError(WRONG_LENGTH);\n while (index < len) this[offset + index] = src[index++];\n };\n\n var $iterators = {\n entries: function entries() {\n return arrayEntries.call(validate(this));\n },\n keys: function keys() {\n return arrayKeys.call(validate(this));\n },\n values: function values() {\n return arrayValues.call(validate(this));\n }\n };\n\n var isTAIndex = function (target, key) {\n return isObject(target)\n && target[TYPED_ARRAY]\n && typeof key != 'symbol'\n && key in target\n && String(+key) == String(key);\n };\n var $getDesc = function getOwnPropertyDescriptor(target, key) {\n return isTAIndex(target, key = toPrimitive(key, true))\n ? propertyDesc(2, target[key])\n : gOPD(target, key);\n };\n var $setDesc = function defineProperty(target, key, desc) {\n if (isTAIndex(target, key = toPrimitive(key, true))\n && isObject(desc)\n && has(desc, 'value')\n && !has(desc, 'get')\n && !has(desc, 'set')\n // TODO: add validation descriptor w/o calling accessors\n && !desc.configurable\n && (!has(desc, 'writable') || desc.writable)\n && (!has(desc, 'enumerable') || desc.enumerable)\n ) {\n target[key] = desc.value;\n return target;\n } return dP(target, key, desc);\n };\n\n if (!ALL_CONSTRUCTORS) {\n $GOPD.f = $getDesc;\n $DP.f = $setDesc;\n }\n\n $export($export.S + $export.F * !ALL_CONSTRUCTORS, 'Object', {\n getOwnPropertyDescriptor: $getDesc,\n defineProperty: $setDesc\n });\n\n if (fails(function () { arrayToString.call({}); })) {\n arrayToString = arrayToLocaleString = function toString() {\n return arrayJoin.call(this);\n };\n }\n\n var $TypedArrayPrototype$ = redefineAll({}, proto);\n redefineAll($TypedArrayPrototype$, $iterators);\n hide($TypedArrayPrototype$, ITERATOR, $iterators.values);\n redefineAll($TypedArrayPrototype$, {\n slice: $slice,\n set: $set,\n constructor: function () { /* noop */ },\n toString: arrayToString,\n toLocaleString: $toLocaleString\n });\n addGetter($TypedArrayPrototype$, 'buffer', 'b');\n addGetter($TypedArrayPrototype$, 'byteOffset', 'o');\n addGetter($TypedArrayPrototype$, 'byteLength', 'l');\n addGetter($TypedArrayPrototype$, 'length', 'e');\n dP($TypedArrayPrototype$, TAG, {\n get: function () { return this[TYPED_ARRAY]; }\n });\n\n // eslint-disable-next-line max-statements\n module.exports = function (KEY, BYTES, wrapper, CLAMPED) {\n CLAMPED = !!CLAMPED;\n var NAME = KEY + (CLAMPED ? 'Clamped' : '') + 'Array';\n var GETTER = 'get' + KEY;\n var SETTER = 'set' + KEY;\n var TypedArray = global[NAME];\n var Base = TypedArray || {};\n var TAC = TypedArray && getPrototypeOf(TypedArray);\n var FORCED = !TypedArray || !$typed.ABV;\n var O = {};\n var TypedArrayPrototype = TypedArray && TypedArray[PROTOTYPE];\n var getter = function (that, index) {\n var data = that._d;\n return data.v[GETTER](index * BYTES + data.o, LITTLE_ENDIAN);\n };\n var setter = function (that, index, value) {\n var data = that._d;\n if (CLAMPED) value = (value = Math.round(value)) < 0 ? 0 : value > 0xff ? 0xff : value & 0xff;\n data.v[SETTER](index * BYTES + data.o, value, LITTLE_ENDIAN);\n };\n var addElement = function (that, index) {\n dP(that, index, {\n get: function () {\n return getter(this, index);\n },\n set: function (value) {\n return setter(this, index, value);\n },\n enumerable: true\n });\n };\n if (FORCED) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME, '_d');\n var index = 0;\n var offset = 0;\n var buffer, byteLength, length, klass;\n if (!isObject(data)) {\n length = toIndex(data);\n byteLength = length * BYTES;\n buffer = new $ArrayBuffer(byteLength);\n } else if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n buffer = data;\n offset = toOffset($offset, BYTES);\n var $len = data.byteLength;\n if ($length === undefined) {\n if ($len % BYTES) throw RangeError(WRONG_LENGTH);\n byteLength = $len - offset;\n if (byteLength < 0) throw RangeError(WRONG_LENGTH);\n } else {\n byteLength = toLength($length) * BYTES;\n if (byteLength + offset > $len) throw RangeError(WRONG_LENGTH);\n }\n length = byteLength / BYTES;\n } else if (TYPED_ARRAY in data) {\n return fromList(TypedArray, data);\n } else {\n return $from.call(TypedArray, data);\n }\n hide(that, '_d', {\n b: buffer,\n o: offset,\n l: byteLength,\n e: length,\n v: new $DataView(buffer)\n });\n while (index < length) addElement(that, index++);\n });\n TypedArrayPrototype = TypedArray[PROTOTYPE] = create($TypedArrayPrototype$);\n hide(TypedArrayPrototype, 'constructor', TypedArray);\n } else if (!fails(function () {\n TypedArray(1);\n }) || !fails(function () {\n new TypedArray(-1); // eslint-disable-line no-new\n }) || !$iterDetect(function (iter) {\n new TypedArray(); // eslint-disable-line no-new\n new TypedArray(null); // eslint-disable-line no-new\n new TypedArray(1.5); // eslint-disable-line no-new\n new TypedArray(iter); // eslint-disable-line no-new\n }, true)) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME);\n var klass;\n // `ws` module bug, temporarily remove validation length for Uint8Array\n // https://github.com/websockets/ws/pull/645\n if (!isObject(data)) return new Base(toIndex(data));\n if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n return $length !== undefined\n ? new Base(data, toOffset($offset, BYTES), $length)\n : $offset !== undefined\n ? new Base(data, toOffset($offset, BYTES))\n : new Base(data);\n }\n if (TYPED_ARRAY in data) return fromList(TypedArray, data);\n return $from.call(TypedArray, data);\n });\n arrayForEach(TAC !== Function.prototype ? gOPN(Base).concat(gOPN(TAC)) : gOPN(Base), function (key) {\n if (!(key in TypedArray)) hide(TypedArray, key, Base[key]);\n });\n TypedArray[PROTOTYPE] = TypedArrayPrototype;\n if (!LIBRARY) TypedArrayPrototype.constructor = TypedArray;\n }\n var $nativeIterator = TypedArrayPrototype[ITERATOR];\n var CORRECT_ITER_NAME = !!$nativeIterator\n && ($nativeIterator.name == 'values' || $nativeIterator.name == undefined);\n var $iterator = $iterators.values;\n hide(TypedArray, TYPED_CONSTRUCTOR, true);\n hide(TypedArrayPrototype, TYPED_ARRAY, NAME);\n hide(TypedArrayPrototype, VIEW, true);\n hide(TypedArrayPrototype, DEF_CONSTRUCTOR, TypedArray);\n\n if (CLAMPED ? new TypedArray(1)[TAG] != NAME : !(TAG in TypedArrayPrototype)) {\n dP(TypedArrayPrototype, TAG, {\n get: function () { return NAME; }\n });\n }\n\n O[NAME] = TypedArray;\n\n $export($export.G + $export.W + $export.F * (TypedArray != Base), O);\n\n $export($export.S, NAME, {\n BYTES_PER_ELEMENT: BYTES\n });\n\n $export($export.S + $export.F * fails(function () { Base.of.call(TypedArray, 1); }), NAME, {\n from: $from,\n of: $of\n });\n\n if (!(BYTES_PER_ELEMENT in TypedArrayPrototype)) hide(TypedArrayPrototype, BYTES_PER_ELEMENT, BYTES);\n\n $export($export.P, NAME, proto);\n\n setSpecies(NAME);\n\n $export($export.P + $export.F * FORCED_SET, NAME, { set: $set });\n\n $export($export.P + $export.F * !CORRECT_ITER_NAME, NAME, $iterators);\n\n if (!LIBRARY && TypedArrayPrototype.toString != arrayToString) TypedArrayPrototype.toString = arrayToString;\n\n $export($export.P + $export.F * fails(function () {\n new TypedArray(1).slice();\n }), NAME, { slice: $slice });\n\n $export($export.P + $export.F * (fails(function () {\n return [1, 2].toLocaleString() != new TypedArray([1, 2]).toLocaleString();\n }) || !fails(function () {\n TypedArrayPrototype.toLocaleString.call([1, 2]);\n })), NAME, { toLocaleString: $toLocaleString });\n\n Iterators[NAME] = CORRECT_ITER_NAME ? $nativeIterator : $iterator;\n if (!LIBRARY && !CORRECT_ITER_NAME) hide(TypedArrayPrototype, ITERATOR, $iterator);\n };\n} else module.exports = function () { /* empty */ };\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdHlwZWQtYXJyYXkuanM/ZWMzMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLElBQUksbUJBQU8sQ0FBQyxDQUFnQjtBQUM1QixnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFZO0FBQ3BDLGVBQWUsbUJBQU8sQ0FBQyxDQUFXO0FBQ2xDLGNBQWMsbUJBQU8sQ0FBQyxDQUFVO0FBQ2hDLGdCQUFnQixtQkFBTyxDQUFDLENBQVc7QUFDbkMsZUFBZSxtQkFBTyxDQUFDLEVBQVU7QUFDakMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBaUI7QUFDekMsWUFBWSxtQkFBTyxDQUFDLEVBQVE7QUFDNUIsbUJBQW1CLG1CQUFPLENBQUMsRUFBZ0I7QUFDM0MscUJBQXFCLG1CQUFPLENBQUMsRUFBa0I7QUFDL0MsYUFBYSxtQkFBTyxDQUFDLEVBQVM7QUFDOUIsb0JBQW9CLG1CQUFPLENBQUMsRUFBaUI7QUFDN0Msa0JBQWtCLG1CQUFPLENBQUMsRUFBZTtBQUN6QyxpQkFBaUIsbUJBQU8sQ0FBQyxDQUFjO0FBQ3ZDLGdCQUFnQixtQkFBTyxDQUFDLEdBQWE7QUFDckMsd0JBQXdCLG1CQUFPLENBQUMsRUFBc0I7QUFDdEQsb0JBQW9CLG1CQUFPLENBQUMsRUFBaUI7QUFDN0MsWUFBWSxtQkFBTyxDQUFDLEVBQVE7QUFDNUIsZ0JBQWdCLG1CQUFPLENBQUMsRUFBWTtBQUNwQyxpQkFBaUIsbUJBQU8sQ0FBQyxDQUFjO0FBQ3ZDLGlCQUFpQixtQkFBTyxDQUFDLENBQWM7QUFDdkMsb0JBQW9CLG1CQUFPLENBQUMsRUFBa0I7QUFDOUMsZUFBZSxtQkFBTyxDQUFDLEVBQWtCO0FBQ3pDLHVCQUF1QixtQkFBTyxDQUFDLEVBQWU7QUFDOUMsYUFBYSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3JDLGtCQUFrQixtQkFBTyxDQUFDLEVBQTRCO0FBQ3RELFlBQVksbUJBQU8sQ0FBQyxFQUFRO0FBQzVC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O0FBQ3ZDLE9BQU87QUFDUDs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTCx1REFBdUQsNkJBQTZCLEVBQUU7QUFDdEY7QUFDQTtBQUNBLEtBQUs7O0FBRUw7O0FBRUE7O0FBRUE7O0FBRUEsdURBQXVELFlBQVk7O0FBRW5FOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxLQUFLLFVBQVUsZ0JBQWdCOztBQUUvQjtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSyxXQUFXLGtDQUFrQzs7QUFFbEQ7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxvQ0FBb0MiLCJmaWxlIjoiMjcuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5pZiAocmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSkge1xuICB2YXIgTElCUkFSWSA9IHJlcXVpcmUoJy4vX2xpYnJhcnknKTtcbiAgdmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xuICB2YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xuICB2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuICB2YXIgJHR5cGVkID0gcmVxdWlyZSgnLi9fdHlwZWQnKTtcbiAgdmFyICRidWZmZXIgPSByZXF1aXJlKCcuL190eXBlZC1idWZmZXInKTtcbiAgdmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xuICB2YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG4gIHZhciBwcm9wZXJ0eURlc2MgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG4gIHZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xuICB2YXIgcmVkZWZpbmVBbGwgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKTtcbiAgdmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbiAgdmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG4gIHZhciB0b0luZGV4ID0gcmVxdWlyZSgnLi9fdG8taW5kZXgnKTtcbiAgdmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4vX3RvLWFic29sdXRlLWluZGV4Jyk7XG4gIHZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xuICB2YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG4gIHZhciBjbGFzc29mID0gcmVxdWlyZSgnLi9fY2xhc3NvZicpO1xuICB2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbiAgdmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG4gIHZhciBpc0FycmF5SXRlciA9IHJlcXVpcmUoJy4vX2lzLWFycmF5LWl0ZXInKTtcbiAgdmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKTtcbiAgdmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xuICB2YXIgZ09QTiA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJykuZjtcbiAgdmFyIGdldEl0ZXJGbiA9IHJlcXVpcmUoJy4vY29yZS5nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG4gIHZhciB1aWQgPSByZXF1aXJlKCcuL191aWQnKTtcbiAgdmFyIHdrcyA9IHJlcXVpcmUoJy4vX3drcycpO1xuICB2YXIgY3JlYXRlQXJyYXlNZXRob2QgPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJyk7XG4gIHZhciBjcmVhdGVBcnJheUluY2x1ZGVzID0gcmVxdWlyZSgnLi9fYXJyYXktaW5jbHVkZXMnKTtcbiAgdmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4vX3NwZWNpZXMtY29uc3RydWN0b3InKTtcbiAgdmFyIEFycmF5SXRlcmF0b3JzID0gcmVxdWlyZSgnLi9lczYuYXJyYXkuaXRlcmF0b3InKTtcbiAgdmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xuICB2YXIgJGl0ZXJEZXRlY3QgPSByZXF1aXJlKCcuL19pdGVyLWRldGVjdCcpO1xuICB2YXIgc2V0U3BlY2llcyA9IHJlcXVpcmUoJy4vX3NldC1zcGVjaWVzJyk7XG4gIHZhciBhcnJheUZpbGwgPSByZXF1aXJlKCcuL19hcnJheS1maWxsJyk7XG4gIHZhciBhcnJheUNvcHlXaXRoaW4gPSByZXF1aXJlKCcuL19hcnJheS1jb3B5LXdpdGhpbicpO1xuICB2YXIgJERQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG4gIHZhciAkR09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJyk7XG4gIHZhciBkUCA9ICREUC5mO1xuICB2YXIgZ09QRCA9ICRHT1BELmY7XG4gIHZhciBSYW5nZUVycm9yID0gZ2xvYmFsLlJhbmdlRXJyb3I7XG4gIHZhciBUeXBlRXJyb3IgPSBnbG9iYWwuVHlwZUVycm9yO1xuICB2YXIgVWludDhBcnJheSA9IGdsb2JhbC5VaW50OEFycmF5O1xuICB2YXIgQVJSQVlfQlVGRkVSID0gJ0FycmF5QnVmZmVyJztcbiAgdmFyIFNIQVJFRF9CVUZGRVIgPSAnU2hhcmVkJyArIEFSUkFZX0JVRkZFUjtcbiAgdmFyIEJZVEVTX1BFUl9FTEVNRU5UID0gJ0JZVEVTX1BFUl9FTEVNRU5UJztcbiAgdmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xuICB2YXIgQXJyYXlQcm90byA9IEFycmF5W1BST1RPVFlQRV07XG4gIHZhciAkQXJyYXlCdWZmZXIgPSAkYnVmZmVyLkFycmF5QnVmZmVyO1xuICB2YXIgJERhdGFWaWV3ID0gJGJ1ZmZlci5EYXRhVmlldztcbiAgdmFyIGFycmF5Rm9yRWFjaCA9IGNyZWF0ZUFycmF5TWV0aG9kKDApO1xuICB2YXIgYXJyYXlGaWx0ZXIgPSBjcmVhdGVBcnJheU1ldGhvZCgyKTtcbiAgdmFyIGFycmF5U29tZSA9IGNyZWF0ZUFycmF5TWV0aG9kKDMpO1xuICB2YXIgYXJyYXlFdmVyeSA9IGNyZWF0ZUFycmF5TWV0aG9kKDQpO1xuICB2YXIgYXJyYXlGaW5kID0gY3JlYXRlQXJyYXlNZXRob2QoNSk7XG4gIHZhciBhcnJheUZpbmRJbmRleCA9IGNyZWF0ZUFycmF5TWV0aG9kKDYpO1xuICB2YXIgYXJyYXlJbmNsdWRlcyA9IGNyZWF0ZUFycmF5SW5jbHVkZXModHJ1ZSk7XG4gIHZhciBhcnJheUluZGV4T2YgPSBjcmVhdGVBcnJheUluY2x1ZGVzKGZhbHNlKTtcbiAgdmFyIGFycmF5VmFsdWVzID0gQXJyYXlJdGVyYXRvcnMudmFsdWVzO1xuICB2YXIgYXJyYXlLZXlzID0gQXJyYXlJdGVyYXRvcnMua2V5cztcbiAgdmFyIGFycmF5RW50cmllcyA9IEFycmF5SXRlcmF0b3JzLmVudHJpZXM7XG4gIHZhciBhcnJheUxhc3RJbmRleE9mID0gQXJyYXlQcm90by5sYXN0SW5kZXhPZjtcbiAgdmFyIGFycmF5UmVkdWNlID0gQXJyYXlQcm90by5yZWR1Y2U7XG4gIHZhciBhcnJheVJlZHVjZVJpZ2h0ID0gQXJyYXlQcm90by5yZWR1Y2VSaWdodDtcbiAgdmFyIGFycmF5Sm9pbiA9IEFycmF5UHJvdG8uam9pbjtcbiAgdmFyIGFycmF5U29ydCA9IEFycmF5UHJvdG8uc29ydDtcbiAgdmFyIGFycmF5U2xpY2UgPSBBcnJheVByb3RvLnNsaWNlO1xuICB2YXIgYXJyYXlUb1N0cmluZyA9IEFycmF5UHJvdG8udG9TdHJpbmc7XG4gIHZhciBhcnJheVRvTG9jYWxlU3RyaW5nID0gQXJyYXlQcm90by50b0xvY2FsZVN0cmluZztcbiAgdmFyIElURVJBVE9SID0gd2tzKCdpdGVyYXRvcicpO1xuICB2YXIgVEFHID0gd2tzKCd0b1N0cmluZ1RhZycpO1xuICB2YXIgVFlQRURfQ09OU1RSVUNUT1IgPSB1aWQoJ3R5cGVkX2NvbnN0cnVjdG9yJyk7XG4gIHZhciBERUZfQ09OU1RSVUNUT1IgPSB1aWQoJ2RlZl9jb25zdHJ1Y3RvcicpO1xuICB2YXIgQUxMX0NPTlNUUlVDVE9SUyA9ICR0eXBlZC5DT05TVFI7XG4gIHZhciBUWVBFRF9BUlJBWSA9ICR0eXBlZC5UWVBFRDtcbiAgdmFyIFZJRVcgPSAkdHlwZWQuVklFVztcbiAgdmFyIFdST05HX0xFTkdUSCA9ICdXcm9uZyBsZW5ndGghJztcblxuICB2YXIgJG1hcCA9IGNyZWF0ZUFycmF5TWV0aG9kKDEsIGZ1bmN0aW9uIChPLCBsZW5ndGgpIHtcbiAgICByZXR1cm4gYWxsb2NhdGUoc3BlY2llc0NvbnN0cnVjdG9yKE8sIE9bREVGX0NPTlNUUlVDVE9SXSksIGxlbmd0aCk7XG4gIH0pO1xuXG4gIHZhciBMSVRUTEVfRU5ESUFOID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICAgIHJldHVybiBuZXcgVWludDhBcnJheShuZXcgVWludDE2QXJyYXkoWzFdKS5idWZmZXIpWzBdID09PSAxO1xuICB9KTtcblxuICB2YXIgRk9SQ0VEX1NFVCA9ICEhVWludDhBcnJheSAmJiAhIVVpbnQ4QXJyYXlbUFJPVE9UWVBFXS5zZXQgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIG5ldyBVaW50OEFycmF5KDEpLnNldCh7fSk7XG4gIH0pO1xuXG4gIHZhciB0b09mZnNldCA9IGZ1bmN0aW9uIChpdCwgQllURVMpIHtcbiAgICB2YXIgb2Zmc2V0ID0gdG9JbnRlZ2VyKGl0KTtcbiAgICBpZiAob2Zmc2V0IDwgMCB8fCBvZmZzZXQgJSBCWVRFUykgdGhyb3cgUmFuZ2VFcnJvcignV3Jvbmcgb2Zmc2V0IScpO1xuICAgIHJldHVybiBvZmZzZXQ7XG4gIH07XG5cbiAgdmFyIHZhbGlkYXRlID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgaWYgKGlzT2JqZWN0KGl0KSAmJiBUWVBFRF9BUlJBWSBpbiBpdCkgcmV0dXJuIGl0O1xuICAgIHRocm93IFR5cGVFcnJvcihpdCArICcgaXMgbm90IGEgdHlwZWQgYXJyYXkhJyk7XG4gIH07XG5cbiAgdmFyIGFsbG9jYXRlID0gZnVuY3Rpb24gKEMsIGxlbmd0aCkge1xuICAgIGlmICghKGlzT2JqZWN0KEMpICYmIFRZUEVEX0NPTlNUUlVDVE9SIGluIEMpKSB7XG4gICAgICB0aHJvdyBUeXBlRXJyb3IoJ0l0IGlzIG5vdCBhIHR5cGVkIGFycmF5IGNvbnN0cnVjdG9yIScpO1xuICAgIH0gcmV0dXJuIG5ldyBDKGxlbmd0aCk7XG4gIH07XG5cbiAgdmFyIHNwZWNpZXNGcm9tTGlzdCA9IGZ1bmN0aW9uIChPLCBsaXN0KSB7XG4gICAgcmV0dXJuIGZyb21MaXN0KHNwZWNpZXNDb25zdHJ1Y3RvcihPLCBPW0RFRl9DT05TVFJVQ1RPUl0pLCBsaXN0KTtcbiAgfTtcblxuICB2YXIgZnJvbUxpc3QgPSBmdW5jdGlvbiAoQywgbGlzdCkge1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGxlbmd0aCA9IGxpc3QubGVuZ3RoO1xuICAgIHZhciByZXN1bHQgPSBhbGxvY2F0ZShDLCBsZW5ndGgpO1xuICAgIHdoaWxlIChsZW5ndGggPiBpbmRleCkgcmVzdWx0W2luZGV4XSA9IGxpc3RbaW5kZXgrK107XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICB2YXIgYWRkR2V0dGVyID0gZnVuY3Rpb24gKGl0LCBrZXksIGludGVybmFsKSB7XG4gICAgZFAoaXQsIGtleSwgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMuX2RbaW50ZXJuYWxdOyB9IH0pO1xuICB9O1xuXG4gIHZhciAkZnJvbSA9IGZ1bmN0aW9uIGZyb20oc291cmNlIC8qICwgbWFwZm4sIHRoaXNBcmcgKi8pIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHNvdXJjZSk7XG4gICAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBtYXBmbiA9IGFMZW4gPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkO1xuICAgIHZhciBtYXBwaW5nID0gbWFwZm4gIT09IHVuZGVmaW5lZDtcbiAgICB2YXIgaXRlckZuID0gZ2V0SXRlckZuKE8pO1xuICAgIHZhciBpLCBsZW5ndGgsIHZhbHVlcywgcmVzdWx0LCBzdGVwLCBpdGVyYXRvcjtcbiAgICBpZiAoaXRlckZuICE9IHVuZGVmaW5lZCAmJiAhaXNBcnJheUl0ZXIoaXRlckZuKSkge1xuICAgICAgZm9yIChpdGVyYXRvciA9IGl0ZXJGbi5jYWxsKE8pLCB2YWx1ZXMgPSBbXSwgaSA9IDA7ICEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZTsgaSsrKSB7XG4gICAgICAgIHZhbHVlcy5wdXNoKHN0ZXAudmFsdWUpO1xuICAgICAgfSBPID0gdmFsdWVzO1xuICAgIH1cbiAgICBpZiAobWFwcGluZyAmJiBhTGVuID4gMikgbWFwZm4gPSBjdHgobWFwZm4sIGFyZ3VtZW50c1syXSwgMik7XG4gICAgZm9yIChpID0gMCwgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpLCByZXN1bHQgPSBhbGxvY2F0ZSh0aGlzLCBsZW5ndGgpOyBsZW5ndGggPiBpOyBpKyspIHtcbiAgICAgIHJlc3VsdFtpXSA9IG1hcHBpbmcgPyBtYXBmbihPW2ldLCBpKSA6IE9baV07XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgdmFyICRvZiA9IGZ1bmN0aW9uIG9mKC8qIC4uLml0ZW1zICovKSB7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgcmVzdWx0ID0gYWxsb2NhdGUodGhpcywgbGVuZ3RoKTtcbiAgICB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIHJlc3VsdFtpbmRleF0gPSBhcmd1bWVudHNbaW5kZXgrK107XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvLyBpT1MgU2FmYXJpIDYueCBmYWlscyBoZXJlXG4gIHZhciBUT19MT0NBTEVfQlVHID0gISFVaW50OEFycmF5ICYmIGZhaWxzKGZ1bmN0aW9uICgpIHsgYXJyYXlUb0xvY2FsZVN0cmluZy5jYWxsKG5ldyBVaW50OEFycmF5KDEpKTsgfSk7XG5cbiAgdmFyICR0b0xvY2FsZVN0cmluZyA9IGZ1bmN0aW9uIHRvTG9jYWxlU3RyaW5nKCkge1xuICAgIHJldHVybiBhcnJheVRvTG9jYWxlU3RyaW5nLmFwcGx5KFRPX0xPQ0FMRV9CVUcgPyBhcnJheVNsaWNlLmNhbGwodmFsaWRhdGUodGhpcykpIDogdmFsaWRhdGUodGhpcyksIGFyZ3VtZW50cyk7XG4gIH07XG5cbiAgdmFyIHByb3RvID0ge1xuICAgIGNvcHlXaXRoaW46IGZ1bmN0aW9uIGNvcHlXaXRoaW4odGFyZ2V0LCBzdGFydCAvKiAsIGVuZCAqLykge1xuICAgICAgcmV0dXJuIGFycmF5Q29weVdpdGhpbi5jYWxsKHZhbGlkYXRlKHRoaXMpLCB0YXJnZXQsIHN0YXJ0LCBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBldmVyeTogZnVuY3Rpb24gZXZlcnkoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICAgIHJldHVybiBhcnJheUV2ZXJ5KHZhbGlkYXRlKHRoaXMpLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBmaWxsOiBmdW5jdGlvbiBmaWxsKHZhbHVlIC8qICwgc3RhcnQsIGVuZCAqLykgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgICByZXR1cm4gYXJyYXlGaWxsLmFwcGx5KHZhbGlkYXRlKHRoaXMpLCBhcmd1bWVudHMpO1xuICAgIH0sXG4gICAgZmlsdGVyOiBmdW5jdGlvbiBmaWx0ZXIoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICAgIHJldHVybiBzcGVjaWVzRnJvbUxpc3QodGhpcywgYXJyYXlGaWx0ZXIodmFsaWRhdGUodGhpcyksIGNhbGxiYWNrZm4sXG4gICAgICAgIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKSk7XG4gICAgfSxcbiAgICBmaW5kOiBmdW5jdGlvbiBmaW5kKHByZWRpY2F0ZSAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICAgIHJldHVybiBhcnJheUZpbmQodmFsaWRhdGUodGhpcyksIHByZWRpY2F0ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgZmluZEluZGV4OiBmdW5jdGlvbiBmaW5kSW5kZXgocHJlZGljYXRlIC8qICwgdGhpc0FyZyAqLykge1xuICAgICAgcmV0dXJuIGFycmF5RmluZEluZGV4KHZhbGlkYXRlKHRoaXMpLCBwcmVkaWNhdGUsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgIGZvckVhY2g6IGZ1bmN0aW9uIGZvckVhY2goY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICAgIGFycmF5Rm9yRWFjaCh2YWxpZGF0ZSh0aGlzKSwgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgaW5kZXhPZjogZnVuY3Rpb24gaW5kZXhPZihzZWFyY2hFbGVtZW50IC8qICwgZnJvbUluZGV4ICovKSB7XG4gICAgICByZXR1cm4gYXJyYXlJbmRleE9mKHZhbGlkYXRlKHRoaXMpLCBzZWFyY2hFbGVtZW50LCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBpbmNsdWRlczogZnVuY3Rpb24gaW5jbHVkZXMoc2VhcmNoRWxlbWVudCAvKiAsIGZyb21JbmRleCAqLykge1xuICAgICAgcmV0dXJuIGFycmF5SW5jbHVkZXModmFsaWRhdGUodGhpcyksIHNlYXJjaEVsZW1lbnQsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgIGpvaW46IGZ1bmN0aW9uIGpvaW4oc2VwYXJhdG9yKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICAgIHJldHVybiBhcnJheUpvaW4uYXBwbHkodmFsaWRhdGUodGhpcyksIGFyZ3VtZW50cyk7XG4gICAgfSxcbiAgICBsYXN0SW5kZXhPZjogZnVuY3Rpb24gbGFzdEluZGV4T2Yoc2VhcmNoRWxlbWVudCAvKiAsIGZyb21JbmRleCAqLykgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgICByZXR1cm4gYXJyYXlMYXN0SW5kZXhPZi5hcHBseSh2YWxpZGF0ZSh0aGlzKSwgYXJndW1lbnRzKTtcbiAgICB9LFxuICAgIG1hcDogZnVuY3Rpb24gbWFwKG1hcGZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgICAgcmV0dXJuICRtYXAodmFsaWRhdGUodGhpcyksIG1hcGZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICByZWR1Y2U6IGZ1bmN0aW9uIHJlZHVjZShjYWxsYmFja2ZuIC8qICwgaW5pdGlhbFZhbHVlICovKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICAgIHJldHVybiBhcnJheVJlZHVjZS5hcHBseSh2YWxpZGF0ZSh0aGlzKSwgYXJndW1lbnRzKTtcbiAgICB9LFxuICAgIHJlZHVjZVJpZ2h0OiBmdW5jdGlvbiByZWR1Y2VSaWdodChjYWxsYmFja2ZuIC8qICwgaW5pdGlhbFZhbHVlICovKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICAgIHJldHVybiBhcnJheVJlZHVjZVJpZ2h0LmFwcGx5KHZhbGlkYXRlKHRoaXMpLCBhcmd1bWVudHMpO1xuICAgIH0sXG4gICAgcmV2ZXJzZTogZnVuY3Rpb24gcmV2ZXJzZSgpIHtcbiAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgIHZhciBsZW5ndGggPSB2YWxpZGF0ZSh0aGF0KS5sZW5ndGg7XG4gICAgICB2YXIgbWlkZGxlID0gTWF0aC5mbG9vcihsZW5ndGggLyAyKTtcbiAgICAgIHZhciBpbmRleCA9IDA7XG4gICAgICB2YXIgdmFsdWU7XG4gICAgICB3aGlsZSAoaW5kZXggPCBtaWRkbGUpIHtcbiAgICAgICAgdmFsdWUgPSB0aGF0W2luZGV4XTtcbiAgICAgICAgdGhhdFtpbmRleCsrXSA9IHRoYXRbLS1sZW5ndGhdO1xuICAgICAgICB0aGF0W2xlbmd0aF0gPSB2YWx1ZTtcbiAgICAgIH0gcmV0dXJuIHRoYXQ7XG4gICAgfSxcbiAgICBzb21lOiBmdW5jdGlvbiBzb21lKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgICByZXR1cm4gYXJyYXlTb21lKHZhbGlkYXRlKHRoaXMpLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBzb3J0OiBmdW5jdGlvbiBzb3J0KGNvbXBhcmVmbikge1xuICAgICAgcmV0dXJuIGFycmF5U29ydC5jYWxsKHZhbGlkYXRlKHRoaXMpLCBjb21wYXJlZm4pO1xuICAgIH0sXG4gICAgc3ViYXJyYXk6IGZ1bmN0aW9uIHN1YmFycmF5KGJlZ2luLCBlbmQpIHtcbiAgICAgIHZhciBPID0gdmFsaWRhdGUodGhpcyk7XG4gICAgICB2YXIgbGVuZ3RoID0gTy5sZW5ndGg7XG4gICAgICB2YXIgJGJlZ2luID0gdG9BYnNvbHV0ZUluZGV4KGJlZ2luLCBsZW5ndGgpO1xuICAgICAgcmV0dXJuIG5ldyAoc3BlY2llc0NvbnN0cnVjdG9yKE8sIE9bREVGX0NPTlNUUlVDVE9SXSkpKFxuICAgICAgICBPLmJ1ZmZlcixcbiAgICAgICAgTy5ieXRlT2Zmc2V0ICsgJGJlZ2luICogTy5CWVRFU19QRVJfRUxFTUVOVCxcbiAgICAgICAgdG9MZW5ndGgoKGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuZ3RoIDogdG9BYnNvbHV0ZUluZGV4KGVuZCwgbGVuZ3RoKSkgLSAkYmVnaW4pXG4gICAgICApO1xuICAgIH1cbiAgfTtcblxuICB2YXIgJHNsaWNlID0gZnVuY3Rpb24gc2xpY2Uoc3RhcnQsIGVuZCkge1xuICAgIHJldHVybiBzcGVjaWVzRnJvbUxpc3QodGhpcywgYXJyYXlTbGljZS5jYWxsKHZhbGlkYXRlKHRoaXMpLCBzdGFydCwgZW5kKSk7XG4gIH07XG5cbiAgdmFyICRzZXQgPSBmdW5jdGlvbiBzZXQoYXJyYXlMaWtlIC8qICwgb2Zmc2V0ICovKSB7XG4gICAgdmFsaWRhdGUodGhpcyk7XG4gICAgdmFyIG9mZnNldCA9IHRvT2Zmc2V0KGFyZ3VtZW50c1sxXSwgMSk7XG4gICAgdmFyIGxlbmd0aCA9IHRoaXMubGVuZ3RoO1xuICAgIHZhciBzcmMgPSB0b09iamVjdChhcnJheUxpa2UpO1xuICAgIHZhciBsZW4gPSB0b0xlbmd0aChzcmMubGVuZ3RoKTtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIGlmIChsZW4gKyBvZmZzZXQgPiBsZW5ndGgpIHRocm93IFJhbmdlRXJyb3IoV1JPTkdfTEVOR1RIKTtcbiAgICB3aGlsZSAoaW5kZXggPCBsZW4pIHRoaXNbb2Zmc2V0ICsgaW5kZXhdID0gc3JjW2luZGV4KytdO1xuICB9O1xuXG4gIHZhciAkaXRlcmF0b3JzID0ge1xuICAgIGVudHJpZXM6IGZ1bmN0aW9uIGVudHJpZXMoKSB7XG4gICAgICByZXR1cm4gYXJyYXlFbnRyaWVzLmNhbGwodmFsaWRhdGUodGhpcykpO1xuICAgIH0sXG4gICAga2V5czogZnVuY3Rpb24ga2V5cygpIHtcbiAgICAgIHJldHVybiBhcnJheUtleXMuY2FsbCh2YWxpZGF0ZSh0aGlzKSk7XG4gICAgfSxcbiAgICB2YWx1ZXM6IGZ1bmN0aW9uIHZhbHVlcygpIHtcbiAgICAgIHJldHVybiBhcnJheVZhbHVlcy5jYWxsKHZhbGlkYXRlKHRoaXMpKTtcbiAgICB9XG4gIH07XG5cbiAgdmFyIGlzVEFJbmRleCA9IGZ1bmN0aW9uICh0YXJnZXQsIGtleSkge1xuICAgIHJldHVybiBpc09iamVjdCh0YXJnZXQpXG4gICAgICAmJiB0YXJnZXRbVFlQRURfQVJSQVldXG4gICAgICAmJiB0eXBlb2Yga2V5ICE9ICdzeW1ib2wnXG4gICAgICAmJiBrZXkgaW4gdGFyZ2V0XG4gICAgICAmJiBTdHJpbmcoK2tleSkgPT0gU3RyaW5nKGtleSk7XG4gIH07XG4gIHZhciAkZ2V0RGVzYyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkge1xuICAgIHJldHVybiBpc1RBSW5kZXgodGFyZ2V0LCBrZXkgPSB0b1ByaW1pdGl2ZShrZXksIHRydWUpKVxuICAgICAgPyBwcm9wZXJ0eURlc2MoMiwgdGFyZ2V0W2tleV0pXG4gICAgICA6IGdPUEQodGFyZ2V0LCBrZXkpO1xuICB9O1xuICB2YXIgJHNldERlc2MgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgZGVzYykge1xuICAgIGlmIChpc1RBSW5kZXgodGFyZ2V0LCBrZXkgPSB0b1ByaW1pdGl2ZShrZXksIHRydWUpKVxuICAgICAgJiYgaXNPYmplY3QoZGVzYylcbiAgICAgICYmIGhhcyhkZXNjLCAndmFsdWUnKVxuICAgICAgJiYgIWhhcyhkZXNjLCAnZ2V0JylcbiAgICAgICYmICFoYXMoZGVzYywgJ3NldCcpXG4gICAgICAvLyBUT0RPOiBhZGQgdmFsaWRhdGlvbiBkZXNjcmlwdG9yIHcvbyBjYWxsaW5nIGFjY2Vzc29yc1xuICAgICAgJiYgIWRlc2MuY29uZmlndXJhYmxlXG4gICAgICAmJiAoIWhhcyhkZXNjLCAnd3JpdGFibGUnKSB8fCBkZXNjLndyaXRhYmxlKVxuICAgICAgJiYgKCFoYXMoZGVzYywgJ2VudW1lcmFibGUnKSB8fCBkZXNjLmVudW1lcmFibGUpXG4gICAgKSB7XG4gICAgICB0YXJnZXRba2V5XSA9IGRlc2MudmFsdWU7XG4gICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH0gcmV0dXJuIGRQKHRhcmdldCwga2V5LCBkZXNjKTtcbiAgfTtcblxuICBpZiAoIUFMTF9DT05TVFJVQ1RPUlMpIHtcbiAgICAkR09QRC5mID0gJGdldERlc2M7XG4gICAgJERQLmYgPSAkc2V0RGVzYztcbiAgfVxuXG4gICRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIUFMTF9DT05TVFJVQ1RPUlMsICdPYmplY3QnLCB7XG4gICAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiAkZ2V0RGVzYyxcbiAgICBkZWZpbmVQcm9wZXJ0eTogJHNldERlc2NcbiAgfSk7XG5cbiAgaWYgKGZhaWxzKGZ1bmN0aW9uICgpIHsgYXJyYXlUb1N0cmluZy5jYWxsKHt9KTsgfSkpIHtcbiAgICBhcnJheVRvU3RyaW5nID0gYXJyYXlUb0xvY2FsZVN0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgICAgcmV0dXJuIGFycmF5Sm9pbi5jYWxsKHRoaXMpO1xuICAgIH07XG4gIH1cblxuICB2YXIgJFR5cGVkQXJyYXlQcm90b3R5cGUkID0gcmVkZWZpbmVBbGwoe30sIHByb3RvKTtcbiAgcmVkZWZpbmVBbGwoJFR5cGVkQXJyYXlQcm90b3R5cGUkLCAkaXRlcmF0b3JzKTtcbiAgaGlkZSgkVHlwZWRBcnJheVByb3RvdHlwZSQsIElURVJBVE9SLCAkaXRlcmF0b3JzLnZhbHVlcyk7XG4gIHJlZGVmaW5lQWxsKCRUeXBlZEFycmF5UHJvdG90eXBlJCwge1xuICAgIHNsaWNlOiAkc2xpY2UsXG4gICAgc2V0OiAkc2V0LFxuICAgIGNvbnN0cnVjdG9yOiBmdW5jdGlvbiAoKSB7IC8qIG5vb3AgKi8gfSxcbiAgICB0b1N0cmluZzogYXJyYXlUb1N0cmluZyxcbiAgICB0b0xvY2FsZVN0cmluZzogJHRvTG9jYWxlU3RyaW5nXG4gIH0pO1xuICBhZGRHZXR0ZXIoJFR5cGVkQXJyYXlQcm90b3R5cGUkLCAnYnVmZmVyJywgJ2InKTtcbiAgYWRkR2V0dGVyKCRUeXBlZEFycmF5UHJvdG90eXBlJCwgJ2J5dGVPZmZzZXQnLCAnbycpO1xuICBhZGRHZXR0ZXIoJFR5cGVkQXJyYXlQcm90b3R5cGUkLCAnYnl0ZUxlbmd0aCcsICdsJyk7XG4gIGFkZEdldHRlcigkVHlwZWRBcnJheVByb3RvdHlwZSQsICdsZW5ndGgnLCAnZScpO1xuICBkUCgkVHlwZWRBcnJheVByb3RvdHlwZSQsIFRBRywge1xuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpc1tUWVBFRF9BUlJBWV07IH1cbiAgfSk7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1zdGF0ZW1lbnRzXG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEtFWSwgQllURVMsIHdyYXBwZXIsIENMQU1QRUQpIHtcbiAgICBDTEFNUEVEID0gISFDTEFNUEVEO1xuICAgIHZhciBOQU1FID0gS0VZICsgKENMQU1QRUQgPyAnQ2xhbXBlZCcgOiAnJykgKyAnQXJyYXknO1xuICAgIHZhciBHRVRURVIgPSAnZ2V0JyArIEtFWTtcbiAgICB2YXIgU0VUVEVSID0gJ3NldCcgKyBLRVk7XG4gICAgdmFyIFR5cGVkQXJyYXkgPSBnbG9iYWxbTkFNRV07XG4gICAgdmFyIEJhc2UgPSBUeXBlZEFycmF5IHx8IHt9O1xuICAgIHZhciBUQUMgPSBUeXBlZEFycmF5ICYmIGdldFByb3RvdHlwZU9mKFR5cGVkQXJyYXkpO1xuICAgIHZhciBGT1JDRUQgPSAhVHlwZWRBcnJheSB8fCAhJHR5cGVkLkFCVjtcbiAgICB2YXIgTyA9IHt9O1xuICAgIHZhciBUeXBlZEFycmF5UHJvdG90eXBlID0gVHlwZWRBcnJheSAmJiBUeXBlZEFycmF5W1BST1RPVFlQRV07XG4gICAgdmFyIGdldHRlciA9IGZ1bmN0aW9uICh0aGF0LCBpbmRleCkge1xuICAgICAgdmFyIGRhdGEgPSB0aGF0Ll9kO1xuICAgICAgcmV0dXJuIGRhdGEudltHRVRURVJdKGluZGV4ICogQllURVMgKyBkYXRhLm8sIExJVFRMRV9FTkRJQU4pO1xuICAgIH07XG4gICAgdmFyIHNldHRlciA9IGZ1bmN0aW9uICh0aGF0LCBpbmRleCwgdmFsdWUpIHtcbiAgICAgIHZhciBkYXRhID0gdGhhdC5fZDtcbiAgICAgIGlmIChDTEFNUEVEKSB2YWx1ZSA9ICh2YWx1ZSA9IE1hdGgucm91bmQodmFsdWUpKSA8IDAgPyAwIDogdmFsdWUgPiAweGZmID8gMHhmZiA6IHZhbHVlICYgMHhmZjtcbiAgICAgIGRhdGEudltTRVRURVJdKGluZGV4ICogQllURVMgKyBkYXRhLm8sIHZhbHVlLCBMSVRUTEVfRU5ESUFOKTtcbiAgICB9O1xuICAgIHZhciBhZGRFbGVtZW50ID0gZnVuY3Rpb24gKHRoYXQsIGluZGV4KSB7XG4gICAgICBkUCh0aGF0LCBpbmRleCwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gZ2V0dGVyKHRoaXMsIGluZGV4KTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICByZXR1cm4gc2V0dGVyKHRoaXMsIGluZGV4LCB2YWx1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IHRydWVcbiAgICAgIH0pO1xuICAgIH07XG4gICAgaWYgKEZPUkNFRCkge1xuICAgICAgVHlwZWRBcnJheSA9IHdyYXBwZXIoZnVuY3Rpb24gKHRoYXQsIGRhdGEsICRvZmZzZXQsICRsZW5ndGgpIHtcbiAgICAgICAgYW5JbnN0YW5jZSh0aGF0LCBUeXBlZEFycmF5LCBOQU1FLCAnX2QnKTtcbiAgICAgICAgdmFyIGluZGV4ID0gMDtcbiAgICAgICAgdmFyIG9mZnNldCA9IDA7XG4gICAgICAgIHZhciBidWZmZXIsIGJ5dGVMZW5ndGgsIGxlbmd0aCwga2xhc3M7XG4gICAgICAgIGlmICghaXNPYmplY3QoZGF0YSkpIHtcbiAgICAgICAgICBsZW5ndGggPSB0b0luZGV4KGRhdGEpO1xuICAgICAgICAgIGJ5dGVMZW5ndGggPSBsZW5ndGggKiBCWVRFUztcbiAgICAgICAgICBidWZmZXIgPSBuZXcgJEFycmF5QnVmZmVyKGJ5dGVMZW5ndGgpO1xuICAgICAgICB9IGVsc2UgaWYgKGRhdGEgaW5zdGFuY2VvZiAkQXJyYXlCdWZmZXIgfHwgKGtsYXNzID0gY2xhc3NvZihkYXRhKSkgPT0gQVJSQVlfQlVGRkVSIHx8IGtsYXNzID09IFNIQVJFRF9CVUZGRVIpIHtcbiAgICAgICAgICBidWZmZXIgPSBkYXRhO1xuICAgICAgICAgIG9mZnNldCA9IHRvT2Zmc2V0KCRvZmZzZXQsIEJZVEVTKTtcbiAgICAgICAgICB2YXIgJGxlbiA9IGRhdGEuYnl0ZUxlbmd0aDtcbiAgICAgICAgICBpZiAoJGxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBpZiAoJGxlbiAlIEJZVEVTKSB0aHJvdyBSYW5nZUVycm9yKFdST05HX0xFTkdUSCk7XG4gICAgICAgICAgICBieXRlTGVuZ3RoID0gJGxlbiAtIG9mZnNldDtcbiAgICAgICAgICAgIGlmIChieXRlTGVuZ3RoIDwgMCkgdGhyb3cgUmFuZ2VFcnJvcihXUk9OR19MRU5HVEgpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBieXRlTGVuZ3RoID0gdG9MZW5ndGgoJGxlbmd0aCkgKiBCWVRFUztcbiAgICAgICAgICAgIGlmIChieXRlTGVuZ3RoICsgb2Zmc2V0ID4gJGxlbikgdGhyb3cgUmFuZ2VFcnJvcihXUk9OR19MRU5HVEgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBsZW5ndGggPSBieXRlTGVuZ3RoIC8gQllURVM7XG4gICAgICAgIH0gZWxzZSBpZiAoVFlQRURfQVJSQVkgaW4gZGF0YSkge1xuICAgICAgICAgIHJldHVybiBmcm9tTGlzdChUeXBlZEFycmF5LCBkYXRhKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gJGZyb20uY2FsbChUeXBlZEFycmF5LCBkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBoaWRlKHRoYXQsICdfZCcsIHtcbiAgICAgICAgICBiOiBidWZmZXIsXG4gICAgICAgICAgbzogb2Zmc2V0LFxuICAgICAgICAgIGw6IGJ5dGVMZW5ndGgsXG4gICAgICAgICAgZTogbGVuZ3RoLFxuICAgICAgICAgIHY6IG5ldyAkRGF0YVZpZXcoYnVmZmVyKVxuICAgICAgICB9KTtcbiAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSBhZGRFbGVtZW50KHRoYXQsIGluZGV4KyspO1xuICAgICAgfSk7XG4gICAgICBUeXBlZEFycmF5UHJvdG90eXBlID0gVHlwZWRBcnJheVtQUk9UT1RZUEVdID0gY3JlYXRlKCRUeXBlZEFycmF5UHJvdG90eXBlJCk7XG4gICAgICBoaWRlKFR5cGVkQXJyYXlQcm90b3R5cGUsICdjb25zdHJ1Y3RvcicsIFR5cGVkQXJyYXkpO1xuICAgIH0gZWxzZSBpZiAoIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAgIFR5cGVkQXJyYXkoMSk7XG4gICAgfSkgfHwgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAgIG5ldyBUeXBlZEFycmF5KC0xKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICB9KSB8fCAhJGl0ZXJEZXRlY3QoZnVuY3Rpb24gKGl0ZXIpIHtcbiAgICAgIG5ldyBUeXBlZEFycmF5KCk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgICBuZXcgVHlwZWRBcnJheShudWxsKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICAgIG5ldyBUeXBlZEFycmF5KDEuNSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgICBuZXcgVHlwZWRBcnJheShpdGVyKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICB9LCB0cnVlKSkge1xuICAgICAgVHlwZWRBcnJheSA9IHdyYXBwZXIoZnVuY3Rpb24gKHRoYXQsIGRhdGEsICRvZmZzZXQsICRsZW5ndGgpIHtcbiAgICAgICAgYW5JbnN0YW5jZSh0aGF0LCBUeXBlZEFycmF5LCBOQU1FKTtcbiAgICAgICAgdmFyIGtsYXNzO1xuICAgICAgICAvLyBgd3NgIG1vZHVsZSBidWcsIHRlbXBvcmFyaWx5IHJlbW92ZSB2YWxpZGF0aW9uIGxlbmd0aCBmb3IgVWludDhBcnJheVxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vd2Vic29ja2V0cy93cy9wdWxsLzY0NVxuICAgICAgICBpZiAoIWlzT2JqZWN0KGRhdGEpKSByZXR1cm4gbmV3IEJhc2UodG9JbmRleChkYXRhKSk7XG4gICAgICAgIGlmIChkYXRhIGluc3RhbmNlb2YgJEFycmF5QnVmZmVyIHx8IChrbGFzcyA9IGNsYXNzb2YoZGF0YSkpID09IEFSUkFZX0JVRkZFUiB8fCBrbGFzcyA9PSBTSEFSRURfQlVGRkVSKSB7XG4gICAgICAgICAgcmV0dXJuICRsZW5ndGggIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyBuZXcgQmFzZShkYXRhLCB0b09mZnNldCgkb2Zmc2V0LCBCWVRFUyksICRsZW5ndGgpXG4gICAgICAgICAgICA6ICRvZmZzZXQgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICA/IG5ldyBCYXNlKGRhdGEsIHRvT2Zmc2V0KCRvZmZzZXQsIEJZVEVTKSlcbiAgICAgICAgICAgICAgOiBuZXcgQmFzZShkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoVFlQRURfQVJSQVkgaW4gZGF0YSkgcmV0dXJuIGZyb21MaXN0KFR5cGVkQXJyYXksIGRhdGEpO1xuICAgICAgICByZXR1cm4gJGZyb20uY2FsbChUeXBlZEFycmF5LCBkYXRhKTtcbiAgICAgIH0pO1xuICAgICAgYXJyYXlGb3JFYWNoKFRBQyAhPT0gRnVuY3Rpb24ucHJvdG90eXBlID8gZ09QTihCYXNlKS5jb25jYXQoZ09QTihUQUMpKSA6IGdPUE4oQmFzZSksIGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgaWYgKCEoa2V5IGluIFR5cGVkQXJyYXkpKSBoaWRlKFR5cGVkQXJyYXksIGtleSwgQmFzZVtrZXldKTtcbiAgICAgIH0pO1xuICAgICAgVHlwZWRBcnJheVtQUk9UT1RZUEVdID0gVHlwZWRBcnJheVByb3RvdHlwZTtcbiAgICAgIGlmICghTElCUkFSWSkgVHlwZWRBcnJheVByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFR5cGVkQXJyYXk7XG4gICAgfVxuICAgIHZhciAkbmF0aXZlSXRlcmF0b3IgPSBUeXBlZEFycmF5UHJvdG90eXBlW0lURVJBVE9SXTtcbiAgICB2YXIgQ09SUkVDVF9JVEVSX05BTUUgPSAhISRuYXRpdmVJdGVyYXRvclxuICAgICAgJiYgKCRuYXRpdmVJdGVyYXRvci5uYW1lID09ICd2YWx1ZXMnIHx8ICRuYXRpdmVJdGVyYXRvci5uYW1lID09IHVuZGVmaW5lZCk7XG4gICAgdmFyICRpdGVyYXRvciA9ICRpdGVyYXRvcnMudmFsdWVzO1xuICAgIGhpZGUoVHlwZWRBcnJheSwgVFlQRURfQ09OU1RSVUNUT1IsIHRydWUpO1xuICAgIGhpZGUoVHlwZWRBcnJheVByb3RvdHlwZSwgVFlQRURfQVJSQVksIE5BTUUpO1xuICAgIGhpZGUoVHlwZWRBcnJheVByb3RvdHlwZSwgVklFVywgdHJ1ZSk7XG4gICAgaGlkZShUeXBlZEFycmF5UHJvdG90eXBlLCBERUZfQ09OU1RSVUNUT1IsIFR5cGVkQXJyYXkpO1xuXG4gICAgaWYgKENMQU1QRUQgPyBuZXcgVHlwZWRBcnJheSgxKVtUQUddICE9IE5BTUUgOiAhKFRBRyBpbiBUeXBlZEFycmF5UHJvdG90eXBlKSkge1xuICAgICAgZFAoVHlwZWRBcnJheVByb3RvdHlwZSwgVEFHLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gTkFNRTsgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgT1tOQU1FXSA9IFR5cGVkQXJyYXk7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuVyArICRleHBvcnQuRiAqIChUeXBlZEFycmF5ICE9IEJhc2UpLCBPKTtcblxuICAgICRleHBvcnQoJGV4cG9ydC5TLCBOQU1FLCB7XG4gICAgICBCWVRFU19QRVJfRUxFTUVOVDogQllURVNcbiAgICB9KTtcblxuICAgICRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogZmFpbHMoZnVuY3Rpb24gKCkgeyBCYXNlLm9mLmNhbGwoVHlwZWRBcnJheSwgMSk7IH0pLCBOQU1FLCB7XG4gICAgICBmcm9tOiAkZnJvbSxcbiAgICAgIG9mOiAkb2ZcbiAgICB9KTtcblxuICAgIGlmICghKEJZVEVTX1BFUl9FTEVNRU5UIGluIFR5cGVkQXJyYXlQcm90b3R5cGUpKSBoaWRlKFR5cGVkQXJyYXlQcm90b3R5cGUsIEJZVEVTX1BFUl9FTEVNRU5ULCBCWVRFUyk7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuUCwgTkFNRSwgcHJvdG8pO1xuXG4gICAgc2V0U3BlY2llcyhOQU1FKTtcblxuICAgICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogRk9SQ0VEX1NFVCwgTkFNRSwgeyBzZXQ6ICRzZXQgfSk7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFDT1JSRUNUX0lURVJfTkFNRSwgTkFNRSwgJGl0ZXJhdG9ycyk7XG5cbiAgICBpZiAoIUxJQlJBUlkgJiYgVHlwZWRBcnJheVByb3RvdHlwZS50b1N0cmluZyAhPSBhcnJheVRvU3RyaW5nKSBUeXBlZEFycmF5UHJvdG90eXBlLnRvU3RyaW5nID0gYXJyYXlUb1N0cmluZztcblxuICAgICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgICAgbmV3IFR5cGVkQXJyYXkoMSkuc2xpY2UoKTtcbiAgICB9KSwgTkFNRSwgeyBzbGljZTogJHNsaWNlIH0pO1xuXG4gICAgJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIFsxLCAyXS50b0xvY2FsZVN0cmluZygpICE9IG5ldyBUeXBlZEFycmF5KFsxLCAyXSkudG9Mb2NhbGVTdHJpbmcoKTtcbiAgICB9KSB8fCAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgICAgVHlwZWRBcnJheVByb3RvdHlwZS50b0xvY2FsZVN0cmluZy5jYWxsKFsxLCAyXSk7XG4gICAgfSkpLCBOQU1FLCB7IHRvTG9jYWxlU3RyaW5nOiAkdG9Mb2NhbGVTdHJpbmcgfSk7XG5cbiAgICBJdGVyYXRvcnNbTkFNRV0gPSBDT1JSRUNUX0lURVJfTkFNRSA/ICRuYXRpdmVJdGVyYXRvciA6ICRpdGVyYXRvcjtcbiAgICBpZiAoIUxJQlJBUlkgJiYgIUNPUlJFQ1RfSVRFUl9OQU1FKSBoaWRlKFR5cGVkQXJyYXlQcm90b3R5cGUsIElURVJBVE9SLCAkaXRlcmF0b3IpO1xuICB9O1xufSBlbHNlIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///27\n")},function(module,exports,__webpack_require__){eval("var Map = __webpack_require__(117);\nvar $export = __webpack_require__(0);\nvar shared = __webpack_require__(47)('metadata');\nvar store = shared.store || (shared.store = new (__webpack_require__(120))());\n\nvar getOrCreateMetadataMap = function (target, targetKey, create) {\n var targetMetadata = store.get(target);\n if (!targetMetadata) {\n if (!create) return undefined;\n store.set(target, targetMetadata = new Map());\n }\n var keyMetadata = targetMetadata.get(targetKey);\n if (!keyMetadata) {\n if (!create) return undefined;\n targetMetadata.set(targetKey, keyMetadata = new Map());\n } return keyMetadata;\n};\nvar ordinaryHasOwnMetadata = function (MetadataKey, O, P) {\n var metadataMap = getOrCreateMetadataMap(O, P, false);\n return metadataMap === undefined ? false : metadataMap.has(MetadataKey);\n};\nvar ordinaryGetOwnMetadata = function (MetadataKey, O, P) {\n var metadataMap = getOrCreateMetadataMap(O, P, false);\n return metadataMap === undefined ? undefined : metadataMap.get(MetadataKey);\n};\nvar ordinaryDefineOwnMetadata = function (MetadataKey, MetadataValue, O, P) {\n getOrCreateMetadataMap(O, P, true).set(MetadataKey, MetadataValue);\n};\nvar ordinaryOwnMetadataKeys = function (target, targetKey) {\n var metadataMap = getOrCreateMetadataMap(target, targetKey, false);\n var keys = [];\n if (metadataMap) metadataMap.forEach(function (_, key) { keys.push(key); });\n return keys;\n};\nvar toMetaKey = function (it) {\n return it === undefined || typeof it == 'symbol' ? it : String(it);\n};\nvar exp = function (O) {\n $export($export.S, 'Reflect', O);\n};\n\nmodule.exports = {\n store: store,\n map: getOrCreateMetadataMap,\n has: ordinaryHasOwnMetadata,\n get: ordinaryGetOwnMetadata,\n set: ordinaryDefineOwnMetadata,\n keys: ordinaryOwnMetadataKeys,\n key: toMetaKey,\n exp: exp\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWV0YWRhdGEuanM/MzdhNyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxVQUFVLG1CQUFPLENBQUMsR0FBVztBQUM3QixjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxhQUFhLG1CQUFPLENBQUMsRUFBVztBQUNoQyxpREFBaUQsbUJBQU8sQ0FBQyxHQUFnQjs7QUFFekU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMERBQTBELGdCQUFnQixFQUFFO0FBQzVFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMjguanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgTWFwID0gcmVxdWlyZSgnLi9lczYubWFwJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4vX3NoYXJlZCcpKCdtZXRhZGF0YScpO1xudmFyIHN0b3JlID0gc2hhcmVkLnN0b3JlIHx8IChzaGFyZWQuc3RvcmUgPSBuZXcgKHJlcXVpcmUoJy4vZXM2LndlYWstbWFwJykpKCkpO1xuXG52YXIgZ2V0T3JDcmVhdGVNZXRhZGF0YU1hcCA9IGZ1bmN0aW9uICh0YXJnZXQsIHRhcmdldEtleSwgY3JlYXRlKSB7XG4gIHZhciB0YXJnZXRNZXRhZGF0YSA9IHN0b3JlLmdldCh0YXJnZXQpO1xuICBpZiAoIXRhcmdldE1ldGFkYXRhKSB7XG4gICAgaWYgKCFjcmVhdGUpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgc3RvcmUuc2V0KHRhcmdldCwgdGFyZ2V0TWV0YWRhdGEgPSBuZXcgTWFwKCkpO1xuICB9XG4gIHZhciBrZXlNZXRhZGF0YSA9IHRhcmdldE1ldGFkYXRhLmdldCh0YXJnZXRLZXkpO1xuICBpZiAoIWtleU1ldGFkYXRhKSB7XG4gICAgaWYgKCFjcmVhdGUpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgdGFyZ2V0TWV0YWRhdGEuc2V0KHRhcmdldEtleSwga2V5TWV0YWRhdGEgPSBuZXcgTWFwKCkpO1xuICB9IHJldHVybiBrZXlNZXRhZGF0YTtcbn07XG52YXIgb3JkaW5hcnlIYXNPd25NZXRhZGF0YSA9IGZ1bmN0aW9uIChNZXRhZGF0YUtleSwgTywgUCkge1xuICB2YXIgbWV0YWRhdGFNYXAgPSBnZXRPckNyZWF0ZU1ldGFkYXRhTWFwKE8sIFAsIGZhbHNlKTtcbiAgcmV0dXJuIG1ldGFkYXRhTWFwID09PSB1bmRlZmluZWQgPyBmYWxzZSA6IG1ldGFkYXRhTWFwLmhhcyhNZXRhZGF0YUtleSk7XG59O1xudmFyIG9yZGluYXJ5R2V0T3duTWV0YWRhdGEgPSBmdW5jdGlvbiAoTWV0YWRhdGFLZXksIE8sIFApIHtcbiAgdmFyIG1ldGFkYXRhTWFwID0gZ2V0T3JDcmVhdGVNZXRhZGF0YU1hcChPLCBQLCBmYWxzZSk7XG4gIHJldHVybiBtZXRhZGF0YU1hcCA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogbWV0YWRhdGFNYXAuZ2V0KE1ldGFkYXRhS2V5KTtcbn07XG52YXIgb3JkaW5hcnlEZWZpbmVPd25NZXRhZGF0YSA9IGZ1bmN0aW9uIChNZXRhZGF0YUtleSwgTWV0YWRhdGFWYWx1ZSwgTywgUCkge1xuICBnZXRPckNyZWF0ZU1ldGFkYXRhTWFwKE8sIFAsIHRydWUpLnNldChNZXRhZGF0YUtleSwgTWV0YWRhdGFWYWx1ZSk7XG59O1xudmFyIG9yZGluYXJ5T3duTWV0YWRhdGFLZXlzID0gZnVuY3Rpb24gKHRhcmdldCwgdGFyZ2V0S2V5KSB7XG4gIHZhciBtZXRhZGF0YU1hcCA9IGdldE9yQ3JlYXRlTWV0YWRhdGFNYXAodGFyZ2V0LCB0YXJnZXRLZXksIGZhbHNlKTtcbiAgdmFyIGtleXMgPSBbXTtcbiAgaWYgKG1ldGFkYXRhTWFwKSBtZXRhZGF0YU1hcC5mb3JFYWNoKGZ1bmN0aW9uIChfLCBrZXkpIHsga2V5cy5wdXNoKGtleSk7IH0pO1xuICByZXR1cm4ga2V5cztcbn07XG52YXIgdG9NZXRhS2V5ID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiBpdCA9PSAnc3ltYm9sJyA/IGl0IDogU3RyaW5nKGl0KTtcbn07XG52YXIgZXhwID0gZnVuY3Rpb24gKE8pIHtcbiAgJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0JywgTyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc3RvcmU6IHN0b3JlLFxuICBtYXA6IGdldE9yQ3JlYXRlTWV0YWRhdGFNYXAsXG4gIGhhczogb3JkaW5hcnlIYXNPd25NZXRhZGF0YSxcbiAgZ2V0OiBvcmRpbmFyeUdldE93bk1ldGFkYXRhLFxuICBzZXQ6IG9yZGluYXJ5RGVmaW5lT3duTWV0YWRhdGEsXG4gIGtleXM6IG9yZGluYXJ5T3duTWV0YWRhdGFLZXlzLFxuICBrZXk6IHRvTWV0YUtleSxcbiAgZXhwOiBleHBcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///28\n")},function(module,exports){eval("module.exports = false;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbGlicmFyeS5qcz8yZDAwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBIiwiZmlsZSI6IjI5LmpzIiwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBmYWxzZTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///29\n")},function(module,exports,__webpack_require__){eval("var META = __webpack_require__(33)('meta');\nvar isObject = __webpack_require__(4);\nvar has = __webpack_require__(14);\nvar setDesc = __webpack_require__(8).f;\nvar id = 0;\nvar isExtensible = Object.isExtensible || function () {\n return true;\n};\nvar FREEZE = !__webpack_require__(3)(function () {\n return isExtensible(Object.preventExtensions({}));\n});\nvar setMeta = function (it) {\n setDesc(it, META, { value: {\n i: 'O' + ++id, // object ID\n w: {} // weak collections IDs\n } });\n};\nvar fastKey = function (it, create) {\n // return primitive with prefix\n if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return 'F';\n // not necessary to add metadata\n if (!create) return 'E';\n // add missing metadata\n setMeta(it);\n // return object ID\n } return it[META].i;\n};\nvar getWeak = function (it, create) {\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return true;\n // not necessary to add metadata\n if (!create) return false;\n // add missing metadata\n setMeta(it);\n // return hash weak collections IDs\n } return it[META].w;\n};\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);\n return it;\n};\nvar meta = module.exports = {\n KEY: META,\n NEED: false,\n fastKey: fastKey,\n getWeak: getWeak,\n onFreeze: onFreeze\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWV0YS5qcz82N2FiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFdBQVcsbUJBQU8sQ0FBQyxFQUFRO0FBQzNCLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLFVBQVUsbUJBQU8sQ0FBQyxFQUFRO0FBQzFCLGNBQWMsbUJBQU8sQ0FBQyxDQUFjO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVU7QUFDaEMsaURBQWlEO0FBQ2pELENBQUM7QUFDRDtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBLFNBQVM7QUFDVCxHQUFHLEVBQUU7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMzAuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgTUVUQSA9IHJlcXVpcmUoJy4vX3VpZCcpKCdtZXRhJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciBzZXREZXNjID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbnZhciBpZCA9IDA7XG52YXIgaXNFeHRlbnNpYmxlID0gT2JqZWN0LmlzRXh0ZW5zaWJsZSB8fCBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0cnVlO1xufTtcbnZhciBGUkVFWkUgPSAhcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBpc0V4dGVuc2libGUoT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKHt9KSk7XG59KTtcbnZhciBzZXRNZXRhID0gZnVuY3Rpb24gKGl0KSB7XG4gIHNldERlc2MoaXQsIE1FVEEsIHsgdmFsdWU6IHtcbiAgICBpOiAnTycgKyArK2lkLCAvLyBvYmplY3QgSURcbiAgICB3OiB7fSAgICAgICAgICAvLyB3ZWFrIGNvbGxlY3Rpb25zIElEc1xuICB9IH0pO1xufTtcbnZhciBmYXN0S2V5ID0gZnVuY3Rpb24gKGl0LCBjcmVhdGUpIHtcbiAgLy8gcmV0dXJuIHByaW1pdGl2ZSB3aXRoIHByZWZpeFxuICBpZiAoIWlzT2JqZWN0KGl0KSkgcmV0dXJuIHR5cGVvZiBpdCA9PSAnc3ltYm9sJyA/IGl0IDogKHR5cGVvZiBpdCA9PSAnc3RyaW5nJyA/ICdTJyA6ICdQJykgKyBpdDtcbiAgaWYgKCFoYXMoaXQsIE1FVEEpKSB7XG4gICAgLy8gY2FuJ3Qgc2V0IG1ldGFkYXRhIHRvIHVuY2F1Z2h0IGZyb3plbiBvYmplY3RcbiAgICBpZiAoIWlzRXh0ZW5zaWJsZShpdCkpIHJldHVybiAnRic7XG4gICAgLy8gbm90IG5lY2Vzc2FyeSB0byBhZGQgbWV0YWRhdGFcbiAgICBpZiAoIWNyZWF0ZSkgcmV0dXJuICdFJztcbiAgICAvLyBhZGQgbWlzc2luZyBtZXRhZGF0YVxuICAgIHNldE1ldGEoaXQpO1xuICAvLyByZXR1cm4gb2JqZWN0IElEXG4gIH0gcmV0dXJuIGl0W01FVEFdLmk7XG59O1xudmFyIGdldFdlYWsgPSBmdW5jdGlvbiAoaXQsIGNyZWF0ZSkge1xuICBpZiAoIWhhcyhpdCwgTUVUQSkpIHtcbiAgICAvLyBjYW4ndCBzZXQgbWV0YWRhdGEgdG8gdW5jYXVnaHQgZnJvemVuIG9iamVjdFxuICAgIGlmICghaXNFeHRlbnNpYmxlKGl0KSkgcmV0dXJuIHRydWU7XG4gICAgLy8gbm90IG5lY2Vzc2FyeSB0byBhZGQgbWV0YWRhdGFcbiAgICBpZiAoIWNyZWF0ZSkgcmV0dXJuIGZhbHNlO1xuICAgIC8vIGFkZCBtaXNzaW5nIG1ldGFkYXRhXG4gICAgc2V0TWV0YShpdCk7XG4gIC8vIHJldHVybiBoYXNoIHdlYWsgY29sbGVjdGlvbnMgSURzXG4gIH0gcmV0dXJuIGl0W01FVEFdLnc7XG59O1xuLy8gYWRkIG1ldGFkYXRhIG9uIGZyZWV6ZS1mYW1pbHkgbWV0aG9kcyBjYWxsaW5nXG52YXIgb25GcmVlemUgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKEZSRUVaRSAmJiBtZXRhLk5FRUQgJiYgaXNFeHRlbnNpYmxlKGl0KSAmJiAhaGFzKGl0LCBNRVRBKSkgc2V0TWV0YShpdCk7XG4gIHJldHVybiBpdDtcbn07XG52YXIgbWV0YSA9IG1vZHVsZS5leHBvcnRzID0ge1xuICBLRVk6IE1FVEEsXG4gIE5FRUQ6IGZhbHNlLFxuICBmYXN0S2V5OiBmYXN0S2V5LFxuICBnZXRXZWFrOiBnZXRXZWFrLFxuICBvbkZyZWV6ZTogb25GcmVlemVcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///30\n")},function(module,exports,__webpack_require__){eval("// 22.1.3.31 Array.prototype[@@unscopables]\nvar UNSCOPABLES = __webpack_require__(5)('unscopables');\nvar ArrayProto = Array.prototype;\nif (ArrayProto[UNSCOPABLES] == undefined) __webpack_require__(11)(ArrayProto, UNSCOPABLES, {});\nmodule.exports = function (key) {\n ArrayProto[UNSCOPABLES][key] = true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYWRkLXRvLXVuc2NvcGFibGVzLmpzPzljNmMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxrQkFBa0IsbUJBQU8sQ0FBQyxDQUFRO0FBQ2xDO0FBQ0EsMENBQTBDLG1CQUFPLENBQUMsRUFBUyw2QkFBNkI7QUFDeEY7QUFDQTtBQUNBIiwiZmlsZSI6IjMxLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjIuMS4zLjMxIEFycmF5LnByb3RvdHlwZVtAQHVuc2NvcGFibGVzXVxudmFyIFVOU0NPUEFCTEVTID0gcmVxdWlyZSgnLi9fd2tzJykoJ3Vuc2NvcGFibGVzJyk7XG52YXIgQXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZTtcbmlmIChBcnJheVByb3RvW1VOU0NPUEFCTEVTXSA9PSB1bmRlZmluZWQpIHJlcXVpcmUoJy4vX2hpZGUnKShBcnJheVByb3RvLCBVTlNDT1BBQkxFUywge30pO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIEFycmF5UHJvdG9bVU5TQ09QQUJMRVNdW2tleV0gPSB0cnVlO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///31\n")},function(module,exports){eval("module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcHJvcGVydHktZGVzYy5qcz80NjMwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMzIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChiaXRtYXAsIHZhbHVlKSB7XG4gIHJldHVybiB7XG4gICAgZW51bWVyYWJsZTogIShiaXRtYXAgJiAxKSxcbiAgICBjb25maWd1cmFibGU6ICEoYml0bWFwICYgMiksXG4gICAgd3JpdGFibGU6ICEoYml0bWFwICYgNCksXG4gICAgdmFsdWU6IHZhbHVlXG4gIH07XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///32\n")},function(module,exports){eval("var id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdWlkLmpzP2NhNWEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIzMy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBpZCA9IDA7XG52YXIgcHggPSBNYXRoLnJhbmRvbSgpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiAnU3ltYm9sKCcuY29uY2F0KGtleSA9PT0gdW5kZWZpbmVkID8gJycgOiBrZXksICcpXycsICgrK2lkICsgcHgpLnRvU3RyaW5nKDM2KSk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///33\n")},function(module,exports,__webpack_require__){eval("// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = __webpack_require__(96);\nvar enumBugKeys = __webpack_require__(69);\n\nmodule.exports = Object.keys || function keys(O) {\n return $keys(O, enumBugKeys);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWtleXMuanM/MGQ1OCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLFlBQVksbUJBQU8sQ0FBQyxFQUF5QjtBQUM3QyxrQkFBa0IsbUJBQU8sQ0FBQyxFQUFrQjs7QUFFNUM7QUFDQTtBQUNBIiwiZmlsZSI6IjM0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMTkuMS4yLjE0IC8gMTUuMi4zLjE0IE9iamVjdC5rZXlzKE8pXG52YXIgJGtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cy1pbnRlcm5hbCcpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi9fZW51bS1idWcta2V5cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIGtleXMoTykge1xuICByZXR1cm4gJGtleXMoTywgZW51bUJ1Z0tleXMpO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///34\n")},function(module,exports,__webpack_require__){eval("var toInteger = __webpack_require__(21);\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n index = toInteger(index);\n return index < 0 ? max(index + length, 0) : min(index, length);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8tYWJzb2x1dGUtaW5kZXguanM/NzdmMSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIzNS5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgbWluID0gTWF0aC5taW47XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbmRleCwgbGVuZ3RoKSB7XG4gIGluZGV4ID0gdG9JbnRlZ2VyKGluZGV4KTtcbiAgcmV0dXJuIGluZGV4IDwgMCA/IG1heChpbmRleCArIGxlbmd0aCwgMCkgOiBtaW4oaW5kZXgsIGxlbmd0aCk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///35\n")},function(module,exports,__webpack_require__){eval("// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = __webpack_require__(1);\nvar dPs = __webpack_require__(97);\nvar enumBugKeys = __webpack_require__(69);\nvar IE_PROTO = __webpack_require__(68)('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = __webpack_require__(66)('iframe');\n var i = enumBugKeys.length;\n var lt = '<';\n var gt = '>';\n var iframeDocument;\n iframe.style.display = 'none';\n __webpack_require__(70).appendChild(iframe);\n iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n // createDict = iframe.contentWindow.Object;\n // html.removeChild(iframe);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n iframeDocument.close();\n createDict = iframeDocument.F;\n while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n Empty[PROTOTYPE] = anObject(O);\n result = new Empty();\n Empty[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = createDict();\n return Properties === undefined ? result : dPs(result, Properties);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWNyZWF0ZS5qcz8yYWViIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsVUFBVSxtQkFBTyxDQUFDLEVBQWU7QUFDakMsa0JBQWtCLG1CQUFPLENBQUMsRUFBa0I7QUFDNUMsZUFBZSxtQkFBTyxDQUFDLEVBQWU7QUFDdEMseUJBQXlCO0FBQ3pCOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsbUJBQU8sQ0FBQyxFQUFlO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLG1CQUFPLENBQUMsRUFBUztBQUNuQiw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBIiwiZmlsZSI6IjM2LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMTkuMS4yLjIgLyAxNS4yLjMuNSBPYmplY3QuY3JlYXRlKE8gWywgUHJvcGVydGllc10pXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBkUHMgPSByZXF1aXJlKCcuL19vYmplY3QtZHBzJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuL19lbnVtLWJ1Zy1rZXlzJyk7XG52YXIgSUVfUFJPVE8gPSByZXF1aXJlKCcuL19zaGFyZWQta2V5JykoJ0lFX1BST1RPJyk7XG52YXIgRW1wdHkgPSBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH07XG52YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG5cbi8vIENyZWF0ZSBvYmplY3Qgd2l0aCBmYWtlIGBudWxsYCBwcm90b3R5cGU6IHVzZSBpZnJhbWUgT2JqZWN0IHdpdGggY2xlYXJlZCBwcm90b3R5cGVcbnZhciBjcmVhdGVEaWN0ID0gZnVuY3Rpb24gKCkge1xuICAvLyBUaHJhc2gsIHdhc3RlIGFuZCBzb2RvbXk6IElFIEdDIGJ1Z1xuICB2YXIgaWZyYW1lID0gcmVxdWlyZSgnLi9fZG9tLWNyZWF0ZScpKCdpZnJhbWUnKTtcbiAgdmFyIGkgPSBlbnVtQnVnS2V5cy5sZW5ndGg7XG4gIHZhciBsdCA9ICc8JztcbiAgdmFyIGd0ID0gJz4nO1xuICB2YXIgaWZyYW1lRG9jdW1lbnQ7XG4gIGlmcmFtZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICByZXF1aXJlKCcuL19odG1sJykuYXBwZW5kQ2hpbGQoaWZyYW1lKTtcbiAgaWZyYW1lLnNyYyA9ICdqYXZhc2NyaXB0Oic7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tc2NyaXB0LXVybFxuICAvLyBjcmVhdGVEaWN0ID0gaWZyYW1lLmNvbnRlbnRXaW5kb3cuT2JqZWN0O1xuICAvLyBodG1sLnJlbW92ZUNoaWxkKGlmcmFtZSk7XG4gIGlmcmFtZURvY3VtZW50ID0gaWZyYW1lLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQ7XG4gIGlmcmFtZURvY3VtZW50Lm9wZW4oKTtcbiAgaWZyYW1lRG9jdW1lbnQud3JpdGUobHQgKyAnc2NyaXB0JyArIGd0ICsgJ2RvY3VtZW50LkY9T2JqZWN0JyArIGx0ICsgJy9zY3JpcHQnICsgZ3QpO1xuICBpZnJhbWVEb2N1bWVudC5jbG9zZSgpO1xuICBjcmVhdGVEaWN0ID0gaWZyYW1lRG9jdW1lbnQuRjtcbiAgd2hpbGUgKGktLSkgZGVsZXRlIGNyZWF0ZURpY3RbUFJPVE9UWVBFXVtlbnVtQnVnS2V5c1tpXV07XG4gIHJldHVybiBjcmVhdGVEaWN0KCk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5jcmVhdGUgfHwgZnVuY3Rpb24gY3JlYXRlKE8sIFByb3BlcnRpZXMpIHtcbiAgdmFyIHJlc3VsdDtcbiAgaWYgKE8gIT09IG51bGwpIHtcbiAgICBFbXB0eVtQUk9UT1RZUEVdID0gYW5PYmplY3QoTyk7XG4gICAgcmVzdWx0ID0gbmV3IEVtcHR5KCk7XG4gICAgRW1wdHlbUFJPVE9UWVBFXSA9IG51bGw7XG4gICAgLy8gYWRkIFwiX19wcm90b19fXCIgZm9yIE9iamVjdC5nZXRQcm90b3R5cGVPZiBwb2x5ZmlsbFxuICAgIHJlc3VsdFtJRV9QUk9UT10gPSBPO1xuICB9IGVsc2UgcmVzdWx0ID0gY3JlYXRlRGljdCgpO1xuICByZXR1cm4gUHJvcGVydGllcyA9PT0gdW5kZWZpbmVkID8gcmVzdWx0IDogZFBzKHJlc3VsdCwgUHJvcGVydGllcyk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///36\n")},function(module,exports,__webpack_require__){eval("// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\nvar $keys = __webpack_require__(96);\nvar hiddenKeys = __webpack_require__(69).concat('length', 'prototype');\n\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return $keys(O, hiddenKeys);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdvcG4uanM/OTA5MyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLFlBQVksbUJBQU8sQ0FBQyxFQUF5QjtBQUM3QyxpQkFBaUIsbUJBQU8sQ0FBQyxFQUFrQjs7QUFFM0M7QUFDQTtBQUNBIiwiZmlsZSI6IjM3LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMTkuMS4yLjcgLyAxNS4yLjMuNCBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhPKVxudmFyICRrZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMtaW50ZXJuYWwnKTtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi9fZW51bS1idWcta2V5cycpLmNvbmNhdCgnbGVuZ3RoJywgJ3Byb3RvdHlwZScpO1xuXG5leHBvcnRzLmYgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB8fCBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKE8pIHtcbiAgcmV0dXJuICRrZXlzKE8sIGhpZGRlbktleXMpO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///37\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar global = __webpack_require__(2);\nvar dP = __webpack_require__(8);\nvar DESCRIPTORS = __webpack_require__(7);\nvar SPECIES = __webpack_require__(5)('species');\n\nmodule.exports = function (KEY) {\n var C = global[KEY];\n if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2V0LXNwZWNpZXMuanM/N2E1NiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGFBQWEsbUJBQU8sQ0FBQyxDQUFXO0FBQ2hDLFNBQVMsbUJBQU8sQ0FBQyxDQUFjO0FBQy9CLGtCQUFrQixtQkFBTyxDQUFDLENBQWdCO0FBQzFDLGNBQWMsbUJBQU8sQ0FBQyxDQUFROztBQUU5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQixhQUFhO0FBQ25DLEdBQUc7QUFDSCIsImZpbGUiOiIzOC5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKTtcbnZhciBTUEVDSUVTID0gcmVxdWlyZSgnLi9fd2tzJykoJ3NwZWNpZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoS0VZKSB7XG4gIHZhciBDID0gZ2xvYmFsW0tFWV07XG4gIGlmIChERVNDUklQVE9SUyAmJiBDICYmICFDW1NQRUNJRVNdKSBkUC5mKEMsIFNQRUNJRVMsIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9XG4gIH0pO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///38\n")},function(module,exports){eval("module.exports = function (it, Constructor, name, forbiddenField) {\n if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) {\n throw TypeError(name + ': incorrect invocation!');\n } return it;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYW4taW5zdGFuY2UuanM/ZjYwNSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0giLCJmaWxlIjoiMzkuanMiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgQ29uc3RydWN0b3IsIG5hbWUsIGZvcmJpZGRlbkZpZWxkKSB7XG4gIGlmICghKGl0IGluc3RhbmNlb2YgQ29uc3RydWN0b3IpIHx8IChmb3JiaWRkZW5GaWVsZCAhPT0gdW5kZWZpbmVkICYmIGZvcmJpZGRlbkZpZWxkIGluIGl0KSkge1xuICAgIHRocm93IFR5cGVFcnJvcihuYW1lICsgJzogaW5jb3JyZWN0IGludm9jYXRpb24hJyk7XG4gIH0gcmV0dXJuIGl0O1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///39\n")},function(module,exports,__webpack_require__){eval("var ctx = __webpack_require__(19);\nvar call = __webpack_require__(109);\nvar isArrayIter = __webpack_require__(81);\nvar anObject = __webpack_require__(1);\nvar toLength = __webpack_require__(6);\nvar getIterFn = __webpack_require__(83);\nvar BREAK = {};\nvar RETURN = {};\nvar exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {\n var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable);\n var f = ctx(fn, that, entries ? 2 : 1);\n var index = 0;\n var length, step, iterator, result;\n if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');\n // fast case for arrays with default iterator\n if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {\n result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);\n if (result === BREAK || result === RETURN) return result;\n } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {\n result = call(iterator, f, step.value, entries);\n if (result === BREAK || result === RETURN) return result;\n }\n};\nexports.BREAK = BREAK;\nexports.RETURN = RETURN;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZm9yLW9mLmpzPzRhNTkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsVUFBVSxtQkFBTyxDQUFDLEVBQVE7QUFDMUIsV0FBVyxtQkFBTyxDQUFDLEdBQWM7QUFDakMsa0JBQWtCLG1CQUFPLENBQUMsRUFBa0I7QUFDNUMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBNEI7QUFDcEQ7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDLGlCQUFpQixFQUFFO0FBQzFEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtRUFBbUUsZ0JBQWdCO0FBQ25GO0FBQ0E7QUFDQSxHQUFHLDRDQUE0QyxnQ0FBZ0M7QUFDL0U7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjQwLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuL19pdGVyLWNhbGwnKTtcbnZhciBpc0FycmF5SXRlciA9IHJlcXVpcmUoJy4vX2lzLWFycmF5LWl0ZXInKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgZ2V0SXRlckZuID0gcmVxdWlyZSgnLi9jb3JlLmdldC1pdGVyYXRvci1tZXRob2QnKTtcbnZhciBCUkVBSyA9IHt9O1xudmFyIFJFVFVSTiA9IHt9O1xudmFyIGV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVyYWJsZSwgZW50cmllcywgZm4sIHRoYXQsIElURVJBVE9SKSB7XG4gIHZhciBpdGVyRm4gPSBJVEVSQVRPUiA/IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGl0ZXJhYmxlOyB9IDogZ2V0SXRlckZuKGl0ZXJhYmxlKTtcbiAgdmFyIGYgPSBjdHgoZm4sIHRoYXQsIGVudHJpZXMgPyAyIDogMSk7XG4gIHZhciBpbmRleCA9IDA7XG4gIHZhciBsZW5ndGgsIHN0ZXAsIGl0ZXJhdG9yLCByZXN1bHQ7XG4gIGlmICh0eXBlb2YgaXRlckZuICE9ICdmdW5jdGlvbicpIHRocm93IFR5cGVFcnJvcihpdGVyYWJsZSArICcgaXMgbm90IGl0ZXJhYmxlIScpO1xuICAvLyBmYXN0IGNhc2UgZm9yIGFycmF5cyB3aXRoIGRlZmF1bHQgaXRlcmF0b3JcbiAgaWYgKGlzQXJyYXlJdGVyKGl0ZXJGbikpIGZvciAobGVuZ3RoID0gdG9MZW5ndGgoaXRlcmFibGUubGVuZ3RoKTsgbGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIHtcbiAgICByZXN1bHQgPSBlbnRyaWVzID8gZihhbk9iamVjdChzdGVwID0gaXRlcmFibGVbaW5kZXhdKVswXSwgc3RlcFsxXSkgOiBmKGl0ZXJhYmxlW2luZGV4XSk7XG4gICAgaWYgKHJlc3VsdCA9PT0gQlJFQUsgfHwgcmVzdWx0ID09PSBSRVRVUk4pIHJldHVybiByZXN1bHQ7XG4gIH0gZWxzZSBmb3IgKGl0ZXJhdG9yID0gaXRlckZuLmNhbGwoaXRlcmFibGUpOyAhKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmU7KSB7XG4gICAgcmVzdWx0ID0gY2FsbChpdGVyYXRvciwgZiwgc3RlcC52YWx1ZSwgZW50cmllcyk7XG4gICAgaWYgKHJlc3VsdCA9PT0gQlJFQUsgfHwgcmVzdWx0ID09PSBSRVRVUk4pIHJldHVybiByZXN1bHQ7XG4gIH1cbn07XG5leHBvcnRzLkJSRUFLID0gQlJFQUs7XG5leHBvcnRzLlJFVFVSTiA9IFJFVFVSTjtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///40\n")},function(module,exports,__webpack_require__){eval("var redefine = __webpack_require__(12);\nmodule.exports = function (target, src, safe) {\n for (var key in src) redefine(target, key, src[key], safe);\n return target;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcmVkZWZpbmUtYWxsLmpzP2RjYmMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxtQkFBTyxDQUFDLEVBQWE7QUFDcEM7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiNDEuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGFyZ2V0LCBzcmMsIHNhZmUpIHtcbiAgZm9yICh2YXIga2V5IGluIHNyYykgcmVkZWZpbmUodGFyZ2V0LCBrZXksIHNyY1trZXldLCBzYWZlKTtcbiAgcmV0dXJuIHRhcmdldDtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///41\n")},function(module,exports,__webpack_require__){eval("var isObject = __webpack_require__(4);\nmodule.exports = function (it, TYPE) {\n if (!isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!');\n return it;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdmFsaWRhdGUtY29sbGVjdGlvbi5qcz9iMzlhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjQyLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgVFlQRSkge1xuICBpZiAoIWlzT2JqZWN0KGl0KSB8fCBpdC5fdCAhPT0gVFlQRSkgdGhyb3cgVHlwZUVycm9yKCdJbmNvbXBhdGlibGUgcmVjZWl2ZXIsICcgKyBUWVBFICsgJyByZXF1aXJlZCEnKTtcbiAgcmV0dXJuIGl0O1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///42\n")},function(module,exports,__webpack_require__){eval("var def = __webpack_require__(8).f;\nvar has = __webpack_require__(14);\nvar TAG = __webpack_require__(5)('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2V0LXRvLXN0cmluZy10YWcuanM/N2YyMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxVQUFVLG1CQUFPLENBQUMsQ0FBYztBQUNoQyxVQUFVLG1CQUFPLENBQUMsRUFBUTtBQUMxQixVQUFVLG1CQUFPLENBQUMsQ0FBUTs7QUFFMUI7QUFDQSxvRUFBb0UsaUNBQWlDO0FBQ3JHIiwiZmlsZSI6IjQzLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGRlZiA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgVEFHID0gcmVxdWlyZSgnLi9fd2tzJykoJ3RvU3RyaW5nVGFnJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCB0YWcsIHN0YXQpIHtcbiAgaWYgKGl0ICYmICFoYXMoaXQgPSBzdGF0ID8gaXQgOiBpdC5wcm90b3R5cGUsIFRBRykpIGRlZihpdCwgVEFHLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgdmFsdWU6IHRhZyB9KTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///43\n")},function(module,exports,__webpack_require__){eval("// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = __webpack_require__(20);\nvar TAG = __webpack_require__(5)('toStringTag');\n// ES3 wrong here\nvar ARG = cof(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (e) { /* empty */ }\n};\n\nmodule.exports = function (it) {\n var O, T, B;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n // builtinTag case\n : ARG ? cof(O)\n // ES3 arguments fallback\n : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY2xhc3NvZi5qcz8yM2M2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsVUFBVSxtQkFBTyxDQUFDLEVBQVE7QUFDMUIsVUFBVSxtQkFBTyxDQUFDLENBQVE7QUFDMUI7QUFDQSwyQkFBMkIsa0JBQWtCLEVBQUU7O0FBRS9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRyxZQUFZO0FBQ2Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiNDQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBnZXR0aW5nIHRhZyBmcm9tIDE5LjEuMy42IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcoKVxudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xudmFyIFRBRyA9IHJlcXVpcmUoJy4vX3drcycpKCd0b1N0cmluZ1RhZycpO1xuLy8gRVMzIHdyb25nIGhlcmVcbnZhciBBUkcgPSBjb2YoZnVuY3Rpb24gKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpID09ICdBcmd1bWVudHMnO1xuXG4vLyBmYWxsYmFjayBmb3IgSUUxMSBTY3JpcHQgQWNjZXNzIERlbmllZCBlcnJvclxudmFyIHRyeUdldCA9IGZ1bmN0aW9uIChpdCwga2V5KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGl0W2tleV07XG4gIH0gY2F0Y2ggKGUpIHsgLyogZW1wdHkgKi8gfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIE8sIFQsIEI7XG4gIHJldHVybiBpdCA9PT0gdW5kZWZpbmVkID8gJ1VuZGVmaW5lZCcgOiBpdCA9PT0gbnVsbCA/ICdOdWxsJ1xuICAgIC8vIEBAdG9TdHJpbmdUYWcgY2FzZVxuICAgIDogdHlwZW9mIChUID0gdHJ5R2V0KE8gPSBPYmplY3QoaXQpLCBUQUcpKSA9PSAnc3RyaW5nJyA/IFRcbiAgICAvLyBidWlsdGluVGFnIGNhc2VcbiAgICA6IEFSRyA/IGNvZihPKVxuICAgIC8vIEVTMyBhcmd1bWVudHMgZmFsbGJhY2tcbiAgICA6IChCID0gY29mKE8pKSA9PSAnT2JqZWN0JyAmJiB0eXBlb2YgTy5jYWxsZWUgPT0gJ2Z1bmN0aW9uJyA/ICdBcmd1bWVudHMnIDogQjtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///44\n")},function(module,exports,__webpack_require__){eval("var $export = __webpack_require__(0);\nvar defined = __webpack_require__(24);\nvar fails = __webpack_require__(3);\nvar spaces = __webpack_require__(72);\nvar space = '[' + spaces + ']';\nvar non = '\\u200b\\u0085';\nvar ltrim = RegExp('^' + space + space + '*');\nvar rtrim = RegExp(space + space + '*$');\n\nvar exporter = function (KEY, exec, ALIAS) {\n var exp = {};\n var FORCE = fails(function () {\n return !!spaces[KEY]() || non[KEY]() != non;\n });\n var fn = exp[KEY] = FORCE ? exec(trim) : spaces[KEY];\n if (ALIAS) exp[ALIAS] = fn;\n $export($export.P + $export.F * FORCE, 'String', exp);\n};\n\n// 1 -> String#trimLeft\n// 2 -> String#trimRight\n// 3 -> String#trim\nvar trim = exporter.trim = function (string, TYPE) {\n string = String(defined(string));\n if (TYPE & 1) string = string.replace(ltrim, '');\n if (TYPE & 2) string = string.replace(rtrim, '');\n return string;\n};\n\nmodule.exports = exporter;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLXRyaW0uanM/YWE3NyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxjQUFjLG1CQUFPLENBQUMsRUFBWTtBQUNsQyxZQUFZLG1CQUFPLENBQUMsQ0FBVTtBQUM5QixhQUFhLG1CQUFPLENBQUMsRUFBYztBQUNuQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiNDUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIHNwYWNlcyA9IHJlcXVpcmUoJy4vX3N0cmluZy13cycpO1xudmFyIHNwYWNlID0gJ1snICsgc3BhY2VzICsgJ10nO1xudmFyIG5vbiA9ICdcXHUyMDBiXFx1MDA4NSc7XG52YXIgbHRyaW0gPSBSZWdFeHAoJ14nICsgc3BhY2UgKyBzcGFjZSArICcqJyk7XG52YXIgcnRyaW0gPSBSZWdFeHAoc3BhY2UgKyBzcGFjZSArICcqJCcpO1xuXG52YXIgZXhwb3J0ZXIgPSBmdW5jdGlvbiAoS0VZLCBleGVjLCBBTElBUykge1xuICB2YXIgZXhwID0ge307XG4gIHZhciBGT1JDRSA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gISFzcGFjZXNbS0VZXSgpIHx8IG5vbltLRVldKCkgIT0gbm9uO1xuICB9KTtcbiAgdmFyIGZuID0gZXhwW0tFWV0gPSBGT1JDRSA/IGV4ZWModHJpbSkgOiBzcGFjZXNbS0VZXTtcbiAgaWYgKEFMSUFTKSBleHBbQUxJQVNdID0gZm47XG4gICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogRk9SQ0UsICdTdHJpbmcnLCBleHApO1xufTtcblxuLy8gMSAtPiBTdHJpbmcjdHJpbUxlZnRcbi8vIDIgLT4gU3RyaW5nI3RyaW1SaWdodFxuLy8gMyAtPiBTdHJpbmcjdHJpbVxudmFyIHRyaW0gPSBleHBvcnRlci50cmltID0gZnVuY3Rpb24gKHN0cmluZywgVFlQRSkge1xuICBzdHJpbmcgPSBTdHJpbmcoZGVmaW5lZChzdHJpbmcpKTtcbiAgaWYgKFRZUEUgJiAxKSBzdHJpbmcgPSBzdHJpbmcucmVwbGFjZShsdHJpbSwgJycpO1xuICBpZiAoVFlQRSAmIDIpIHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKHJ0cmltLCAnJyk7XG4gIHJldHVybiBzdHJpbmc7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydGVyO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///45\n")},function(module,exports){eval("module.exports = {};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlcmF0b3JzLmpzPzg0ZjIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEiLCJmaWxlIjoiNDYuanMiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IHt9O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///46\n")},function(module,exports,__webpack_require__){eval("var core = __webpack_require__(18);\nvar global = __webpack_require__(2);\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\n\n(module.exports = function (key, value) {\n return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n version: core.version,\n mode: __webpack_require__(29) ? 'pure' : 'global',\n copyright: '© 2020 Denis Pushkarev (zloirock.ru)'\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2hhcmVkLmpzPzU1MzciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsV0FBVyxtQkFBTyxDQUFDLEVBQVM7QUFDNUIsYUFBYSxtQkFBTyxDQUFDLENBQVc7QUFDaEM7QUFDQSxrREFBa0Q7O0FBRWxEO0FBQ0EscUVBQXFFO0FBQ3JFLENBQUM7QUFDRDtBQUNBLFFBQVEsbUJBQU8sQ0FBQyxFQUFZO0FBQzVCO0FBQ0EsQ0FBQyIsImZpbGUiOiI0Ny5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIFNIQVJFRCA9ICdfX2NvcmUtanNfc2hhcmVkX18nO1xudmFyIHN0b3JlID0gZ2xvYmFsW1NIQVJFRF0gfHwgKGdsb2JhbFtTSEFSRURdID0ge30pO1xuXG4obW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICByZXR1cm4gc3RvcmVba2V5XSB8fCAoc3RvcmVba2V5XSA9IHZhbHVlICE9PSB1bmRlZmluZWQgPyB2YWx1ZSA6IHt9KTtcbn0pKCd2ZXJzaW9ucycsIFtdKS5wdXNoKHtcbiAgdmVyc2lvbjogY29yZS52ZXJzaW9uLFxuICBtb2RlOiByZXF1aXJlKCcuL19saWJyYXJ5JykgPyAncHVyZScgOiAnZ2xvYmFsJyxcbiAgY29weXJpZ2h0OiAnwqkgMjAyMCBEZW5pcyBQdXNoa2FyZXYgKHpsb2lyb2NrLnJ1KSdcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///47\n")},function(module,exports,__webpack_require__){eval("// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = __webpack_require__(20);\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n return cof(it) == 'String' ? it.split('') : Object(it);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faW9iamVjdC5qcz82MjZhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsVUFBVSxtQkFBTyxDQUFDLEVBQVE7QUFDMUI7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiNDguanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIGFuZCBub24tZW51bWVyYWJsZSBvbGQgVjggc3RyaW5nc1xudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QoJ3onKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKSA/IE9iamVjdCA6IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gY29mKGl0KSA9PSAnU3RyaW5nJyA/IGl0LnNwbGl0KCcnKSA6IE9iamVjdChpdCk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///48\n")},function(module,exports){eval("exports.f = {}.propertyIsEnumerable;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LXBpZS5qcz81MmE3Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMiLCJmaWxlIjoiNDkuanMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnRzLmYgPSB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///49\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// 21.2.5.3 get RegExp.prototype.flags\nvar anObject = __webpack_require__(1);\nmodule.exports = function () {\n var that = anObject(this);\n var result = '';\n if (that.global) result += 'g';\n if (that.ignoreCase) result += 'i';\n if (that.multiline) result += 'm';\n if (that.unicode) result += 'u';\n if (that.sticky) result += 'y';\n return result;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZmxhZ3MuanM/MGJmYiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiNTAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG4vLyAyMS4yLjUuMyBnZXQgUmVnRXhwLnByb3RvdHlwZS5mbGFnc1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHRoYXQgPSBhbk9iamVjdCh0aGlzKTtcbiAgdmFyIHJlc3VsdCA9ICcnO1xuICBpZiAodGhhdC5nbG9iYWwpIHJlc3VsdCArPSAnZyc7XG4gIGlmICh0aGF0Lmlnbm9yZUNhc2UpIHJlc3VsdCArPSAnaSc7XG4gIGlmICh0aGF0Lm11bHRpbGluZSkgcmVzdWx0ICs9ICdtJztcbiAgaWYgKHRoYXQudW5pY29kZSkgcmVzdWx0ICs9ICd1JztcbiAgaWYgKHRoYXQuc3RpY2t5KSByZXN1bHQgKz0gJ3knO1xuICByZXR1cm4gcmVzdWx0O1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///50\n")},function(module,exports,__webpack_require__){eval("// 7.3.20 SpeciesConstructor(O, defaultConstructor)\nvar anObject = __webpack_require__(1);\nvar aFunction = __webpack_require__(10);\nvar SPECIES = __webpack_require__(5)('species');\nmodule.exports = function (O, D) {\n var C = anObject(O).constructor;\n var S;\n return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3BlY2llcy1jb25zdHJ1Y3Rvci5qcz9lYmQ2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2QyxjQUFjLG1CQUFPLENBQUMsQ0FBUTtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjUxLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gNy4zLjIwIFNwZWNpZXNDb25zdHJ1Y3RvcihPLCBkZWZhdWx0Q29uc3RydWN0b3IpXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgU1BFQ0lFUyA9IHJlcXVpcmUoJy4vX3drcycpKCdzcGVjaWVzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBEKSB7XG4gIHZhciBDID0gYW5PYmplY3QoTykuY29uc3RydWN0b3I7XG4gIHZhciBTO1xuICByZXR1cm4gQyA9PT0gdW5kZWZpbmVkIHx8IChTID0gYW5PYmplY3QoQylbU1BFQ0lFU10pID09IHVuZGVmaW5lZCA/IEQgOiBhRnVuY3Rpb24oUyk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///51\n")},function(module,exports,__webpack_require__){eval("// false -> Array#indexOf\n// true -> Array#includes\nvar toIObject = __webpack_require__(15);\nvar toLength = __webpack_require__(6);\nvar toAbsoluteIndex = __webpack_require__(35);\nmodule.exports = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIObject($this);\n var length = toLength(O.length);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n if (O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktaW5jbHVkZXMuanM/YzM2NiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0EsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2QyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxzQkFBc0IsbUJBQU8sQ0FBQyxFQUFzQjtBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUssWUFBWSxlQUFlO0FBQ2hDO0FBQ0EsS0FBSztBQUNMO0FBQ0EiLCJmaWxlIjoiNTIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBmYWxzZSAtPiBBcnJheSNpbmRleE9mXG4vLyB0cnVlICAtPiBBcnJheSNpbmNsdWRlc1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4vX3RvLWFic29sdXRlLWluZGV4Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChJU19JTkNMVURFUykge1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBlbCwgZnJvbUluZGV4KSB7XG4gICAgdmFyIE8gPSB0b0lPYmplY3QoJHRoaXMpO1xuICAgIHZhciBsZW5ndGggPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gICAgdmFyIGluZGV4ID0gdG9BYnNvbHV0ZUluZGV4KGZyb21JbmRleCwgbGVuZ3RoKTtcbiAgICB2YXIgdmFsdWU7XG4gICAgLy8gQXJyYXkjaW5jbHVkZXMgdXNlcyBTYW1lVmFsdWVaZXJvIGVxdWFsaXR5IGFsZ29yaXRobVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICBpZiAoSVNfSU5DTFVERVMgJiYgZWwgIT0gZWwpIHdoaWxlIChsZW5ndGggPiBpbmRleCkge1xuICAgICAgdmFsdWUgPSBPW2luZGV4KytdO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgICAgaWYgKHZhbHVlICE9IHZhbHVlKSByZXR1cm4gdHJ1ZTtcbiAgICAvLyBBcnJheSNpbmRleE9mIGlnbm9yZXMgaG9sZXMsIEFycmF5I2luY2x1ZGVzIC0gbm90XG4gICAgfSBlbHNlIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSBpZiAoSVNfSU5DTFVERVMgfHwgaW5kZXggaW4gTykge1xuICAgICAgaWYgKE9baW5kZXhdID09PSBlbCkgcmV0dXJuIElTX0lOQ0xVREVTIHx8IGluZGV4IHx8IDA7XG4gICAgfSByZXR1cm4gIUlTX0lOQ0xVREVTICYmIC0xO1xuICB9O1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///52\n")},function(module,exports){eval("exports.f = Object.getOwnPropertySymbols;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdvcHMuanM/MjYyMSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSIsImZpbGUiOiI1My5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///53\n")},function(module,exports,__webpack_require__){eval("// 7.2.2 IsArray(argument)\nvar cof = __webpack_require__(20);\nmodule.exports = Array.isArray || function isArray(arg) {\n return cof(arg) == 'Array';\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtYXJyYXkuanM/MTE2OSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLFVBQVUsbUJBQU8sQ0FBQyxFQUFRO0FBQzFCO0FBQ0E7QUFDQSIsImZpbGUiOiI1NC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDcuMi4yIElzQXJyYXkoYXJndW1lbnQpXG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG5tb2R1bGUuZXhwb3J0cyA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gaXNBcnJheShhcmcpIHtcbiAgcmV0dXJuIGNvZihhcmcpID09ICdBcnJheSc7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///54\n")},function(module,exports,__webpack_require__){eval("var toInteger = __webpack_require__(21);\nvar defined = __webpack_require__(24);\n// true -> String#at\n// false -> String#codePointAt\nmodule.exports = function (TO_STRING) {\n return function (that, pos) {\n var s = String(defined(that));\n var i = toInteger(pos);\n var l = s.length;\n var a, b;\n if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n a = s.charCodeAt(i);\n return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n ? TO_STRING ? s.charAt(i) : a\n : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLWF0LmpzPzAyZjQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2QyxjQUFjLG1CQUFPLENBQUMsRUFBWTtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiNTUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG4vLyB0cnVlICAtPiBTdHJpbmcjYXRcbi8vIGZhbHNlIC0+IFN0cmluZyNjb2RlUG9pbnRBdFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoVE9fU1RSSU5HKSB7XG4gIHJldHVybiBmdW5jdGlvbiAodGhhdCwgcG9zKSB7XG4gICAgdmFyIHMgPSBTdHJpbmcoZGVmaW5lZCh0aGF0KSk7XG4gICAgdmFyIGkgPSB0b0ludGVnZXIocG9zKTtcbiAgICB2YXIgbCA9IHMubGVuZ3RoO1xuICAgIHZhciBhLCBiO1xuICAgIGlmIChpIDwgMCB8fCBpID49IGwpIHJldHVybiBUT19TVFJJTkcgPyAnJyA6IHVuZGVmaW5lZDtcbiAgICBhID0gcy5jaGFyQ29kZUF0KGkpO1xuICAgIHJldHVybiBhIDwgMHhkODAwIHx8IGEgPiAweGRiZmYgfHwgaSArIDEgPT09IGwgfHwgKGIgPSBzLmNoYXJDb2RlQXQoaSArIDEpKSA8IDB4ZGMwMCB8fCBiID4gMHhkZmZmXG4gICAgICA/IFRPX1NUUklORyA/IHMuY2hhckF0KGkpIDogYVxuICAgICAgOiBUT19TVFJJTkcgPyBzLnNsaWNlKGksIGkgKyAyKSA6IChhIC0gMHhkODAwIDw8IDEwKSArIChiIC0gMHhkYzAwKSArIDB4MTAwMDA7XG4gIH07XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///55\n")},function(module,exports,__webpack_require__){eval("// 7.2.8 IsRegExp(argument)\nvar isObject = __webpack_require__(4);\nvar cof = __webpack_require__(20);\nvar MATCH = __webpack_require__(5)('match');\nmodule.exports = function (it) {\n var isRegExp;\n return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtcmVnZXhwLmpzP2FhZTMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxVQUFVLG1CQUFPLENBQUMsRUFBUTtBQUMxQixZQUFZLG1CQUFPLENBQUMsQ0FBUTtBQUM1QjtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiI1Ni5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDcuMi44IElzUmVnRXhwKGFyZ3VtZW50KVxudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG52YXIgTUFUQ0ggPSByZXF1aXJlKCcuL193a3MnKSgnbWF0Y2gnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBpc1JlZ0V4cDtcbiAgcmV0dXJuIGlzT2JqZWN0KGl0KSAmJiAoKGlzUmVnRXhwID0gaXRbTUFUQ0hdKSAhPT0gdW5kZWZpbmVkID8gISFpc1JlZ0V4cCA6IGNvZihpdCkgPT0gJ1JlZ0V4cCcpO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///56\n")},function(module,exports,__webpack_require__){eval("var ITERATOR = __webpack_require__(5)('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var riter = [7][ITERATOR]();\n riter['return'] = function () { SAFE_CLOSING = true; };\n // eslint-disable-next-line no-throw-literal\n Array.from(riter, function () { throw 2; });\n} catch (e) { /* empty */ }\n\nmodule.exports = function (exec, skipClosing) {\n if (!skipClosing && !SAFE_CLOSING) return false;\n var safe = false;\n try {\n var arr = [7];\n var iter = arr[ITERATOR]();\n iter.next = function () { return { done: safe = true }; };\n arr[ITERATOR] = function () { return iter; };\n exec(arr);\n } catch (e) { /* empty */ }\n return safe;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlci1kZXRlY3QuanM/NWNjNSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxlQUFlLG1CQUFPLENBQUMsQ0FBUTtBQUMvQjs7QUFFQTtBQUNBO0FBQ0EsaUNBQWlDLHFCQUFxQjtBQUN0RDtBQUNBLGlDQUFpQyxTQUFTLEVBQUU7QUFDNUMsQ0FBQyxZQUFZOztBQUViO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QixTQUFTLHFCQUFxQjtBQUMzRCxpQ0FBaUMsYUFBYTtBQUM5QztBQUNBLEdBQUcsWUFBWTtBQUNmO0FBQ0EiLCJmaWxlIjoiNTcuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgSVRFUkFUT1IgPSByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKTtcbnZhciBTQUZFX0NMT1NJTkcgPSBmYWxzZTtcblxudHJ5IHtcbiAgdmFyIHJpdGVyID0gWzddW0lURVJBVE9SXSgpO1xuICByaXRlclsncmV0dXJuJ10gPSBmdW5jdGlvbiAoKSB7IFNBRkVfQ0xPU0lORyA9IHRydWU7IH07XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby10aHJvdy1saXRlcmFsXG4gIEFycmF5LmZyb20ocml0ZXIsIGZ1bmN0aW9uICgpIHsgdGhyb3cgMjsgfSk7XG59IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYywgc2tpcENsb3NpbmcpIHtcbiAgaWYgKCFza2lwQ2xvc2luZyAmJiAhU0FGRV9DTE9TSU5HKSByZXR1cm4gZmFsc2U7XG4gIHZhciBzYWZlID0gZmFsc2U7XG4gIHRyeSB7XG4gICAgdmFyIGFyciA9IFs3XTtcbiAgICB2YXIgaXRlciA9IGFycltJVEVSQVRPUl0oKTtcbiAgICBpdGVyLm5leHQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB7IGRvbmU6IHNhZmUgPSB0cnVlIH07IH07XG4gICAgYXJyW0lURVJBVE9SXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGl0ZXI7IH07XG4gICAgZXhlYyhhcnIpO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbiAgcmV0dXJuIHNhZmU7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///57\n")},function(module,exports,__webpack_require__){"use strict";eval("\n\nvar classof = __webpack_require__(44);\nvar builtinExec = RegExp.prototype.exec;\n\n // `RegExpExec` abstract operation\n// https://tc39.github.io/ecma262/#sec-regexpexec\nmodule.exports = function (R, S) {\n var exec = R.exec;\n if (typeof exec === 'function') {\n var result = exec.call(R, S);\n if (typeof result !== 'object') {\n throw new TypeError('RegExp exec method returned something other than an Object or null');\n }\n return result;\n }\n if (classof(R) !== 'RegExp') {\n throw new TypeError('RegExp#exec called on incompatible receiver');\n }\n return builtinExec.call(R, S);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcmVnZXhwLWV4ZWMtYWJzdHJhY3QuanM/NWYxYiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixjQUFjLG1CQUFPLENBQUMsRUFBWTtBQUNsQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiI1OC5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuL19jbGFzc29mJyk7XG52YXIgYnVpbHRpbkV4ZWMgPSBSZWdFeHAucHJvdG90eXBlLmV4ZWM7XG5cbiAvLyBgUmVnRXhwRXhlY2AgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1yZWdleHBleGVjXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChSLCBTKSB7XG4gIHZhciBleGVjID0gUi5leGVjO1xuICBpZiAodHlwZW9mIGV4ZWMgPT09ICdmdW5jdGlvbicpIHtcbiAgICB2YXIgcmVzdWx0ID0gZXhlYy5jYWxsKFIsIFMpO1xuICAgIGlmICh0eXBlb2YgcmVzdWx0ICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUmVnRXhwIGV4ZWMgbWV0aG9kIHJldHVybmVkIHNvbWV0aGluZyBvdGhlciB0aGFuIGFuIE9iamVjdCBvciBudWxsJyk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgaWYgKGNsYXNzb2YoUikgIT09ICdSZWdFeHAnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUmVnRXhwI2V4ZWMgY2FsbGVkIG9uIGluY29tcGF0aWJsZSByZWNlaXZlcicpO1xuICB9XG4gIHJldHVybiBidWlsdGluRXhlYy5jYWxsKFIsIFMpO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///58\n")},function(module,exports,__webpack_require__){"use strict";eval("\n__webpack_require__(113);\nvar redefine = __webpack_require__(12);\nvar hide = __webpack_require__(11);\nvar fails = __webpack_require__(3);\nvar defined = __webpack_require__(24);\nvar wks = __webpack_require__(5);\nvar regexpExec = __webpack_require__(87);\n\nvar SPECIES = wks('species');\n\nvar REPLACE_SUPPORTS_NAMED_GROUPS = !fails(function () {\n // #replace needs built-in support for named groups.\n // #match works fine because it just return the exec results, even if it has\n // a \"grops\" property.\n var re = /./;\n re.exec = function () {\n var result = [];\n result.groups = { a: '7' };\n return result;\n };\n return ''.replace(re, '$') !== '7';\n});\n\nvar SPLIT_WORKS_WITH_OVERWRITTEN_EXEC = (function () {\n // Chrome 51 has a buggy \"split\" implementation when RegExp#exec !== nativeExec\n var re = /(?:)/;\n var originalExec = re.exec;\n re.exec = function () { return originalExec.apply(this, arguments); };\n var result = 'ab'.split(re);\n return result.length === 2 && result[0] === 'a' && result[1] === 'b';\n})();\n\nmodule.exports = function (KEY, length, exec) {\n var SYMBOL = wks(KEY);\n\n var DELEGATES_TO_SYMBOL = !fails(function () {\n // String methods call symbol-named RegEp methods\n var O = {};\n O[SYMBOL] = function () { return 7; };\n return ''[KEY](O) != 7;\n });\n\n var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL ? !fails(function () {\n // Symbol-named RegExp methods call .exec\n var execCalled = false;\n var re = /a/;\n re.exec = function () { execCalled = true; return null; };\n if (KEY === 'split') {\n // RegExp[@@split] doesn't call the regex's exec method, but first creates\n // a new one. We need to return the patched regex when creating the new one.\n re.constructor = {};\n re.constructor[SPECIES] = function () { return re; };\n }\n re[SYMBOL]('');\n return !execCalled;\n }) : undefined;\n\n if (\n !DELEGATES_TO_SYMBOL ||\n !DELEGATES_TO_EXEC ||\n (KEY === 'replace' && !REPLACE_SUPPORTS_NAMED_GROUPS) ||\n (KEY === 'split' && !SPLIT_WORKS_WITH_OVERWRITTEN_EXEC)\n ) {\n var nativeRegExpMethod = /./[SYMBOL];\n var fns = exec(\n defined,\n SYMBOL,\n ''[KEY],\n function maybeCallNative(nativeMethod, regexp, str, arg2, forceStringMethod) {\n if (regexp.exec === regexpExec) {\n if (DELEGATES_TO_SYMBOL && !forceStringMethod) {\n // The native String method already delegates to @@method (this\n // polyfilled function), leasing to infinite recursion.\n // We avoid it by directly calling the native @@method method.\n return { done: true, value: nativeRegExpMethod.call(regexp, str, arg2) };\n }\n return { done: true, value: nativeMethod.call(str, regexp, arg2) };\n }\n return { done: false };\n }\n );\n var strfn = fns[0];\n var rxfn = fns[1];\n\n redefine(String.prototype, KEY, strfn);\n hide(RegExp.prototype, SYMBOL, length == 2\n // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)\n // 21.2.5.11 RegExp.prototype[@@split](string, limit)\n ? function (string, arg) { return rxfn.call(string, this, arg); }\n // 21.2.5.6 RegExp.prototype[@@match](string)\n // 21.2.5.9 RegExp.prototype[@@search](string)\n : function (string) { return rxfn.call(string, this); }\n );\n }\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZml4LXJlLXdrcy5qcz8yMTRmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsbUJBQU8sQ0FBQyxHQUFtQjtBQUMzQixlQUFlLG1CQUFPLENBQUMsRUFBYTtBQUNwQyxXQUFXLG1CQUFPLENBQUMsRUFBUztBQUM1QixZQUFZLG1CQUFPLENBQUMsQ0FBVTtBQUM5QixjQUFjLG1CQUFPLENBQUMsRUFBWTtBQUNsQyxVQUFVLG1CQUFPLENBQUMsQ0FBUTtBQUMxQixpQkFBaUIsbUJBQU8sQ0FBQyxFQUFnQjs7QUFFekM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5Qiw0Q0FBNEM7QUFDckU7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkIsVUFBVTtBQUN2QztBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkIsbUJBQW1CLGFBQWE7QUFDM0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkMsV0FBVztBQUN4RDtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0I7QUFDcEI7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0MscUNBQXFDO0FBQ3JFO0FBQ0E7QUFDQSwyQkFBMkIsZ0NBQWdDO0FBQzNEO0FBQ0E7QUFDQSIsImZpbGUiOiI1OS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4vZXM2LnJlZ2V4cC5leGVjJyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG52YXIgd2tzID0gcmVxdWlyZSgnLi9fd2tzJyk7XG52YXIgcmVnZXhwRXhlYyA9IHJlcXVpcmUoJy4vX3JlZ2V4cC1leGVjJyk7XG5cbnZhciBTUEVDSUVTID0gd2tzKCdzcGVjaWVzJyk7XG5cbnZhciBSRVBMQUNFX1NVUFBPUlRTX05BTUVEX0dST1VQUyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vICNyZXBsYWNlIG5lZWRzIGJ1aWx0LWluIHN1cHBvcnQgZm9yIG5hbWVkIGdyb3Vwcy5cbiAgLy8gI21hdGNoIHdvcmtzIGZpbmUgYmVjYXVzZSBpdCBqdXN0IHJldHVybiB0aGUgZXhlYyByZXN1bHRzLCBldmVuIGlmIGl0IGhhc1xuICAvLyBhIFwiZ3JvcHNcIiBwcm9wZXJ0eS5cbiAgdmFyIHJlID0gLy4vO1xuICByZS5leGVjID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICByZXN1bHQuZ3JvdXBzID0geyBhOiAnNycgfTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuICByZXR1cm4gJycucmVwbGFjZShyZSwgJyQ8YT4nKSAhPT0gJzcnO1xufSk7XG5cbnZhciBTUExJVF9XT1JLU19XSVRIX09WRVJXUklUVEVOX0VYRUMgPSAoZnVuY3Rpb24gKCkge1xuICAvLyBDaHJvbWUgNTEgaGFzIGEgYnVnZ3kgXCJzcGxpdFwiIGltcGxlbWVudGF0aW9uIHdoZW4gUmVnRXhwI2V4ZWMgIT09IG5hdGl2ZUV4ZWNcbiAgdmFyIHJlID0gLyg/OikvO1xuICB2YXIgb3JpZ2luYWxFeGVjID0gcmUuZXhlYztcbiAgcmUuZXhlYyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG9yaWdpbmFsRXhlYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9O1xuICB2YXIgcmVzdWx0ID0gJ2FiJy5zcGxpdChyZSk7XG4gIHJldHVybiByZXN1bHQubGVuZ3RoID09PSAyICYmIHJlc3VsdFswXSA9PT0gJ2EnICYmIHJlc3VsdFsxXSA9PT0gJ2InO1xufSkoKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoS0VZLCBsZW5ndGgsIGV4ZWMpIHtcbiAgdmFyIFNZTUJPTCA9IHdrcyhLRVkpO1xuXG4gIHZhciBERUxFR0FURVNfVE9fU1lNQk9MID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAvLyBTdHJpbmcgbWV0aG9kcyBjYWxsIHN5bWJvbC1uYW1lZCBSZWdFcCBtZXRob2RzXG4gICAgdmFyIE8gPSB7fTtcbiAgICBPW1NZTUJPTF0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9O1xuICAgIHJldHVybiAnJ1tLRVldKE8pICE9IDc7XG4gIH0pO1xuXG4gIHZhciBERUxFR0FURVNfVE9fRVhFQyA9IERFTEVHQVRFU19UT19TWU1CT0wgPyAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIFN5bWJvbC1uYW1lZCBSZWdFeHAgbWV0aG9kcyBjYWxsIC5leGVjXG4gICAgdmFyIGV4ZWNDYWxsZWQgPSBmYWxzZTtcbiAgICB2YXIgcmUgPSAvYS87XG4gICAgcmUuZXhlYyA9IGZ1bmN0aW9uICgpIHsgZXhlY0NhbGxlZCA9IHRydWU7IHJldHVybiBudWxsOyB9O1xuICAgIGlmIChLRVkgPT09ICdzcGxpdCcpIHtcbiAgICAgIC8vIFJlZ0V4cFtAQHNwbGl0XSBkb2Vzbid0IGNhbGwgdGhlIHJlZ2V4J3MgZXhlYyBtZXRob2QsIGJ1dCBmaXJzdCBjcmVhdGVzXG4gICAgICAvLyBhIG5ldyBvbmUuIFdlIG5lZWQgdG8gcmV0dXJuIHRoZSBwYXRjaGVkIHJlZ2V4IHdoZW4gY3JlYXRpbmcgdGhlIG5ldyBvbmUuXG4gICAgICByZS5jb25zdHJ1Y3RvciA9IHt9O1xuICAgICAgcmUuY29uc3RydWN0b3JbU1BFQ0lFU10gPSBmdW5jdGlvbiAoKSB7IHJldHVybiByZTsgfTtcbiAgICB9XG4gICAgcmVbU1lNQk9MXSgnJyk7XG4gICAgcmV0dXJuICFleGVjQ2FsbGVkO1xuICB9KSA6IHVuZGVmaW5lZDtcblxuICBpZiAoXG4gICAgIURFTEVHQVRFU19UT19TWU1CT0wgfHxcbiAgICAhREVMRUdBVEVTX1RPX0VYRUMgfHxcbiAgICAoS0VZID09PSAncmVwbGFjZScgJiYgIVJFUExBQ0VfU1VQUE9SVFNfTkFNRURfR1JPVVBTKSB8fFxuICAgIChLRVkgPT09ICdzcGxpdCcgJiYgIVNQTElUX1dPUktTX1dJVEhfT1ZFUldSSVRURU5fRVhFQylcbiAgKSB7XG4gICAgdmFyIG5hdGl2ZVJlZ0V4cE1ldGhvZCA9IC8uL1tTWU1CT0xdO1xuICAgIHZhciBmbnMgPSBleGVjKFxuICAgICAgZGVmaW5lZCxcbiAgICAgIFNZTUJPTCxcbiAgICAgICcnW0tFWV0sXG4gICAgICBmdW5jdGlvbiBtYXliZUNhbGxOYXRpdmUobmF0aXZlTWV0aG9kLCByZWdleHAsIHN0ciwgYXJnMiwgZm9yY2VTdHJpbmdNZXRob2QpIHtcbiAgICAgICAgaWYgKHJlZ2V4cC5leGVjID09PSByZWdleHBFeGVjKSB7XG4gICAgICAgICAgaWYgKERFTEVHQVRFU19UT19TWU1CT0wgJiYgIWZvcmNlU3RyaW5nTWV0aG9kKSB7XG4gICAgICAgICAgICAvLyBUaGUgbmF0aXZlIFN0cmluZyBtZXRob2QgYWxyZWFkeSBkZWxlZ2F0ZXMgdG8gQEBtZXRob2QgKHRoaXNcbiAgICAgICAgICAgIC8vIHBvbHlmaWxsZWQgZnVuY3Rpb24pLCBsZWFzaW5nIHRvIGluZmluaXRlIHJlY3Vyc2lvbi5cbiAgICAgICAgICAgIC8vIFdlIGF2b2lkIGl0IGJ5IGRpcmVjdGx5IGNhbGxpbmcgdGhlIG5hdGl2ZSBAQG1ldGhvZCBtZXRob2QuXG4gICAgICAgICAgICByZXR1cm4geyBkb25lOiB0cnVlLCB2YWx1ZTogbmF0aXZlUmVnRXhwTWV0aG9kLmNhbGwocmVnZXhwLCBzdHIsIGFyZzIpIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB7IGRvbmU6IHRydWUsIHZhbHVlOiBuYXRpdmVNZXRob2QuY2FsbChzdHIsIHJlZ2V4cCwgYXJnMikgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBkb25lOiBmYWxzZSB9O1xuICAgICAgfVxuICAgICk7XG4gICAgdmFyIHN0cmZuID0gZm5zWzBdO1xuICAgIHZhciByeGZuID0gZm5zWzFdO1xuXG4gICAgcmVkZWZpbmUoU3RyaW5nLnByb3RvdHlwZSwgS0VZLCBzdHJmbik7XG4gICAgaGlkZShSZWdFeHAucHJvdG90eXBlLCBTWU1CT0wsIGxlbmd0aCA9PSAyXG4gICAgICAvLyAyMS4yLjUuOCBSZWdFeHAucHJvdG90eXBlW0BAcmVwbGFjZV0oc3RyaW5nLCByZXBsYWNlVmFsdWUpXG4gICAgICAvLyAyMS4yLjUuMTEgUmVnRXhwLnByb3RvdHlwZVtAQHNwbGl0XShzdHJpbmcsIGxpbWl0KVxuICAgICAgPyBmdW5jdGlvbiAoc3RyaW5nLCBhcmcpIHsgcmV0dXJuIHJ4Zm4uY2FsbChzdHJpbmcsIHRoaXMsIGFyZyk7IH1cbiAgICAgIC8vIDIxLjIuNS42IFJlZ0V4cC5wcm90b3R5cGVbQEBtYXRjaF0oc3RyaW5nKVxuICAgICAgLy8gMjEuMi41LjkgUmVnRXhwLnByb3RvdHlwZVtAQHNlYXJjaF0oc3RyaW5nKVxuICAgICAgOiBmdW5jdGlvbiAoc3RyaW5nKSB7IHJldHVybiByeGZuLmNhbGwoc3RyaW5nLCB0aGlzKTsgfVxuICAgICk7XG4gIH1cbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///59\n")},function(module,exports,__webpack_require__){eval("var global = __webpack_require__(2);\nvar navigator = global.navigator;\n\nmodule.exports = navigator && navigator.userAgent || '';\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdXNlci1hZ2VudC5qcz9hMjVmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGFBQWEsbUJBQU8sQ0FBQyxDQUFXO0FBQ2hDOztBQUVBIiwiZmlsZSI6IjYwLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIG5hdmlnYXRvciA9IGdsb2JhbC5uYXZpZ2F0b3I7XG5cbm1vZHVsZS5leHBvcnRzID0gbmF2aWdhdG9yICYmIG5hdmlnYXRvci51c2VyQWdlbnQgfHwgJyc7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///60\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar global = __webpack_require__(2);\nvar $export = __webpack_require__(0);\nvar redefine = __webpack_require__(12);\nvar redefineAll = __webpack_require__(41);\nvar meta = __webpack_require__(30);\nvar forOf = __webpack_require__(40);\nvar anInstance = __webpack_require__(39);\nvar isObject = __webpack_require__(4);\nvar fails = __webpack_require__(3);\nvar $iterDetect = __webpack_require__(57);\nvar setToStringTag = __webpack_require__(43);\nvar inheritIfRequired = __webpack_require__(73);\n\nmodule.exports = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) {\n var Base = global[NAME];\n var C = Base;\n var ADDER = IS_MAP ? 'set' : 'add';\n var proto = C && C.prototype;\n var O = {};\n var fixMethod = function (KEY) {\n var fn = proto[KEY];\n redefine(proto, KEY,\n KEY == 'delete' ? function (a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'has' ? function has(a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'get' ? function get(a) {\n return IS_WEAK && !isObject(a) ? undefined : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'add' ? function add(a) { fn.call(this, a === 0 ? 0 : a); return this; }\n : function set(a, b) { fn.call(this, a === 0 ? 0 : a, b); return this; }\n );\n };\n if (typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function () {\n new C().entries().next();\n }))) {\n // create collection constructor\n C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);\n redefineAll(C.prototype, methods);\n meta.NEED = true;\n } else {\n var instance = new C();\n // early implementations not supports chaining\n var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;\n // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false\n var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); });\n // most early implementations doesn't supports iterables, most modern - not close it correctly\n var ACCEPT_ITERABLES = $iterDetect(function (iter) { new C(iter); }); // eslint-disable-line no-new\n // for early implementations -0 and +0 not the same\n var BUGGY_ZERO = !IS_WEAK && fails(function () {\n // V8 ~ Chromium 42- fails only with 5+ elements\n var $instance = new C();\n var index = 5;\n while (index--) $instance[ADDER](index, index);\n return !$instance.has(-0);\n });\n if (!ACCEPT_ITERABLES) {\n C = wrapper(function (target, iterable) {\n anInstance(target, C, NAME);\n var that = inheritIfRequired(new Base(), target, C);\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n return that;\n });\n C.prototype = proto;\n proto.constructor = C;\n }\n if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {\n fixMethod('delete');\n fixMethod('has');\n IS_MAP && fixMethod('get');\n }\n if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);\n // weak collections should not contains .clear method\n if (IS_WEAK && proto.clear) delete proto.clear;\n }\n\n setToStringTag(C, NAME);\n\n O[NAME] = C;\n $export($export.G + $export.W + $export.F * (C != Base), O);\n\n if (!IS_WEAK) common.setStrong(C, NAME, IS_MAP);\n\n return C;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY29sbGVjdGlvbi5qcz9lMGI4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsYUFBYSxtQkFBTyxDQUFDLENBQVc7QUFDaEMsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsZUFBZSxtQkFBTyxDQUFDLEVBQWE7QUFDcEMsa0JBQWtCLG1CQUFPLENBQUMsRUFBaUI7QUFDM0MsV0FBVyxtQkFBTyxDQUFDLEVBQVM7QUFDNUIsWUFBWSxtQkFBTyxDQUFDLEVBQVc7QUFDL0IsaUJBQWlCLG1CQUFPLENBQUMsRUFBZ0I7QUFDekMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsWUFBWSxtQkFBTyxDQUFDLENBQVU7QUFDOUIsa0JBQWtCLG1CQUFPLENBQUMsRUFBZ0I7QUFDMUMscUJBQXFCLG1CQUFPLENBQUMsRUFBc0I7QUFDbkQsd0JBQXdCLG1CQUFPLENBQUMsRUFBd0I7O0FBRXhEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxPQUFPO0FBQ1A7QUFDQSxPQUFPLG1DQUFtQyxnQ0FBZ0MsYUFBYTtBQUN2Riw4QkFBOEIsbUNBQW1DLGFBQWE7QUFDOUU7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLHFEQUFxRDtBQUNyRDtBQUNBLGtEQUFrRCxpQkFBaUIsRUFBRTtBQUNyRTtBQUNBLHdEQUF3RCxhQUFhLEVBQUUsRUFBRTtBQUN6RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSIsImZpbGUiOiI2MS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIHJlZGVmaW5lQWxsID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUtYWxsJyk7XG52YXIgbWV0YSA9IHJlcXVpcmUoJy4vX21ldGEnKTtcbnZhciBmb3JPZiA9IHJlcXVpcmUoJy4vX2Zvci1vZicpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuL19hbi1pbnN0YW5jZScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyICRpdGVyRGV0ZWN0ID0gcmVxdWlyZSgnLi9faXRlci1kZXRlY3QnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgaW5oZXJpdElmUmVxdWlyZWQgPSByZXF1aXJlKCcuL19pbmhlcml0LWlmLXJlcXVpcmVkJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE5BTUUsIHdyYXBwZXIsIG1ldGhvZHMsIGNvbW1vbiwgSVNfTUFQLCBJU19XRUFLKSB7XG4gIHZhciBCYXNlID0gZ2xvYmFsW05BTUVdO1xuICB2YXIgQyA9IEJhc2U7XG4gIHZhciBBRERFUiA9IElTX01BUCA/ICdzZXQnIDogJ2FkZCc7XG4gIHZhciBwcm90byA9IEMgJiYgQy5wcm90b3R5cGU7XG4gIHZhciBPID0ge307XG4gIHZhciBmaXhNZXRob2QgPSBmdW5jdGlvbiAoS0VZKSB7XG4gICAgdmFyIGZuID0gcHJvdG9bS0VZXTtcbiAgICByZWRlZmluZShwcm90bywgS0VZLFxuICAgICAgS0VZID09ICdkZWxldGUnID8gZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgcmV0dXJuIElTX1dFQUsgJiYgIWlzT2JqZWN0KGEpID8gZmFsc2UgOiBmbi5jYWxsKHRoaXMsIGEgPT09IDAgPyAwIDogYSk7XG4gICAgICB9IDogS0VZID09ICdoYXMnID8gZnVuY3Rpb24gaGFzKGEpIHtcbiAgICAgICAgcmV0dXJuIElTX1dFQUsgJiYgIWlzT2JqZWN0KGEpID8gZmFsc2UgOiBmbi5jYWxsKHRoaXMsIGEgPT09IDAgPyAwIDogYSk7XG4gICAgICB9IDogS0VZID09ICdnZXQnID8gZnVuY3Rpb24gZ2V0KGEpIHtcbiAgICAgICAgcmV0dXJuIElTX1dFQUsgJiYgIWlzT2JqZWN0KGEpID8gdW5kZWZpbmVkIDogZm4uY2FsbCh0aGlzLCBhID09PSAwID8gMCA6IGEpO1xuICAgICAgfSA6IEtFWSA9PSAnYWRkJyA/IGZ1bmN0aW9uIGFkZChhKSB7IGZuLmNhbGwodGhpcywgYSA9PT0gMCA/IDAgOiBhKTsgcmV0dXJuIHRoaXM7IH1cbiAgICAgICAgOiBmdW5jdGlvbiBzZXQoYSwgYikgeyBmbi5jYWxsKHRoaXMsIGEgPT09IDAgPyAwIDogYSwgYik7IHJldHVybiB0aGlzOyB9XG4gICAgKTtcbiAgfTtcbiAgaWYgKHR5cGVvZiBDICE9ICdmdW5jdGlvbicgfHwgIShJU19XRUFLIHx8IHByb3RvLmZvckVhY2ggJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICBuZXcgQygpLmVudHJpZXMoKS5uZXh0KCk7XG4gIH0pKSkge1xuICAgIC8vIGNyZWF0ZSBjb2xsZWN0aW9uIGNvbnN0cnVjdG9yXG4gICAgQyA9IGNvbW1vbi5nZXRDb25zdHJ1Y3Rvcih3cmFwcGVyLCBOQU1FLCBJU19NQVAsIEFEREVSKTtcbiAgICByZWRlZmluZUFsbChDLnByb3RvdHlwZSwgbWV0aG9kcyk7XG4gICAgbWV0YS5ORUVEID0gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgaW5zdGFuY2UgPSBuZXcgQygpO1xuICAgIC8vIGVhcmx5IGltcGxlbWVudGF0aW9ucyBub3Qgc3VwcG9ydHMgY2hhaW5pbmdcbiAgICB2YXIgSEFTTlRfQ0hBSU5JTkcgPSBpbnN0YW5jZVtBRERFUl0oSVNfV0VBSyA/IHt9IDogLTAsIDEpICE9IGluc3RhbmNlO1xuICAgIC8vIFY4IH4gIENocm9taXVtIDQwLSB3ZWFrLWNvbGxlY3Rpb25zIHRocm93cyBvbiBwcmltaXRpdmVzLCBidXQgc2hvdWxkIHJldHVybiBmYWxzZVxuICAgIHZhciBUSFJPV1NfT05fUFJJTUlUSVZFUyA9IGZhaWxzKGZ1bmN0aW9uICgpIHsgaW5zdGFuY2UuaGFzKDEpOyB9KTtcbiAgICAvLyBtb3N0IGVhcmx5IGltcGxlbWVudGF0aW9ucyBkb2Vzbid0IHN1cHBvcnRzIGl0ZXJhYmxlcywgbW9zdCBtb2Rlcm4gLSBub3QgY2xvc2UgaXQgY29ycmVjdGx5XG4gICAgdmFyIEFDQ0VQVF9JVEVSQUJMRVMgPSAkaXRlckRldGVjdChmdW5jdGlvbiAoaXRlcikgeyBuZXcgQyhpdGVyKTsgfSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgLy8gZm9yIGVhcmx5IGltcGxlbWVudGF0aW9ucyAtMCBhbmQgKzAgbm90IHRoZSBzYW1lXG4gICAgdmFyIEJVR0dZX1pFUk8gPSAhSVNfV0VBSyAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBWOCB+IENocm9taXVtIDQyLSBmYWlscyBvbmx5IHdpdGggNSsgZWxlbWVudHNcbiAgICAgIHZhciAkaW5zdGFuY2UgPSBuZXcgQygpO1xuICAgICAgdmFyIGluZGV4ID0gNTtcbiAgICAgIHdoaWxlIChpbmRleC0tKSAkaW5zdGFuY2VbQURERVJdKGluZGV4LCBpbmRleCk7XG4gICAgICByZXR1cm4gISRpbnN0YW5jZS5oYXMoLTApO1xuICAgIH0pO1xuICAgIGlmICghQUNDRVBUX0lURVJBQkxFUykge1xuICAgICAgQyA9IHdyYXBwZXIoZnVuY3Rpb24gKHRhcmdldCwgaXRlcmFibGUpIHtcbiAgICAgICAgYW5JbnN0YW5jZSh0YXJnZXQsIEMsIE5BTUUpO1xuICAgICAgICB2YXIgdGhhdCA9IGluaGVyaXRJZlJlcXVpcmVkKG5ldyBCYXNlKCksIHRhcmdldCwgQyk7XG4gICAgICAgIGlmIChpdGVyYWJsZSAhPSB1bmRlZmluZWQpIGZvck9mKGl0ZXJhYmxlLCBJU19NQVAsIHRoYXRbQURERVJdLCB0aGF0KTtcbiAgICAgICAgcmV0dXJuIHRoYXQ7XG4gICAgICB9KTtcbiAgICAgIEMucHJvdG90eXBlID0gcHJvdG87XG4gICAgICBwcm90by5jb25zdHJ1Y3RvciA9IEM7XG4gICAgfVxuICAgIGlmIChUSFJPV1NfT05fUFJJTUlUSVZFUyB8fCBCVUdHWV9aRVJPKSB7XG4gICAgICBmaXhNZXRob2QoJ2RlbGV0ZScpO1xuICAgICAgZml4TWV0aG9kKCdoYXMnKTtcbiAgICAgIElTX01BUCAmJiBmaXhNZXRob2QoJ2dldCcpO1xuICAgIH1cbiAgICBpZiAoQlVHR1lfWkVSTyB8fCBIQVNOVF9DSEFJTklORykgZml4TWV0aG9kKEFEREVSKTtcbiAgICAvLyB3ZWFrIGNvbGxlY3Rpb25zIHNob3VsZCBub3QgY29udGFpbnMgLmNsZWFyIG1ldGhvZFxuICAgIGlmIChJU19XRUFLICYmIHByb3RvLmNsZWFyKSBkZWxldGUgcHJvdG8uY2xlYXI7XG4gIH1cblxuICBzZXRUb1N0cmluZ1RhZyhDLCBOQU1FKTtcblxuICBPW05BTUVdID0gQztcbiAgJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LlcgKyAkZXhwb3J0LkYgKiAoQyAhPSBCYXNlKSwgTyk7XG5cbiAgaWYgKCFJU19XRUFLKSBjb21tb24uc2V0U3Ryb25nKEMsIE5BTUUsIElTX01BUCk7XG5cbiAgcmV0dXJuIEM7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///61\n")},function(module,exports,__webpack_require__){eval("var global = __webpack_require__(2);\nvar hide = __webpack_require__(11);\nvar uid = __webpack_require__(33);\nvar TYPED = uid('typed_array');\nvar VIEW = uid('view');\nvar ABV = !!(global.ArrayBuffer && global.DataView);\nvar CONSTR = ABV;\nvar i = 0;\nvar l = 9;\nvar Typed;\n\nvar TypedArrayConstructors = (\n 'Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array'\n).split(',');\n\nwhile (i < l) {\n if (Typed = global[TypedArrayConstructors[i++]]) {\n hide(Typed.prototype, TYPED, true);\n hide(Typed.prototype, VIEW, true);\n } else CONSTR = false;\n}\n\nmodule.exports = {\n ABV: ABV,\n CONSTR: CONSTR,\n TYPED: TYPED,\n VIEW: VIEW\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdHlwZWQuanM/MGY4OCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxhQUFhLG1CQUFPLENBQUMsQ0FBVztBQUNoQyxXQUFXLG1CQUFPLENBQUMsRUFBUztBQUM1QixVQUFVLG1CQUFPLENBQUMsRUFBUTtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjYyLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi9fdWlkJyk7XG52YXIgVFlQRUQgPSB1aWQoJ3R5cGVkX2FycmF5Jyk7XG52YXIgVklFVyA9IHVpZCgndmlldycpO1xudmFyIEFCViA9ICEhKGdsb2JhbC5BcnJheUJ1ZmZlciAmJiBnbG9iYWwuRGF0YVZpZXcpO1xudmFyIENPTlNUUiA9IEFCVjtcbnZhciBpID0gMDtcbnZhciBsID0gOTtcbnZhciBUeXBlZDtcblxudmFyIFR5cGVkQXJyYXlDb25zdHJ1Y3RvcnMgPSAoXG4gICdJbnQ4QXJyYXksVWludDhBcnJheSxVaW50OENsYW1wZWRBcnJheSxJbnQxNkFycmF5LFVpbnQxNkFycmF5LEludDMyQXJyYXksVWludDMyQXJyYXksRmxvYXQzMkFycmF5LEZsb2F0NjRBcnJheSdcbikuc3BsaXQoJywnKTtcblxud2hpbGUgKGkgPCBsKSB7XG4gIGlmIChUeXBlZCA9IGdsb2JhbFtUeXBlZEFycmF5Q29uc3RydWN0b3JzW2krK11dKSB7XG4gICAgaGlkZShUeXBlZC5wcm90b3R5cGUsIFRZUEVELCB0cnVlKTtcbiAgICBoaWRlKFR5cGVkLnByb3RvdHlwZSwgVklFVywgdHJ1ZSk7XG4gIH0gZWxzZSBDT05TVFIgPSBmYWxzZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEFCVjogQUJWLFxuICBDT05TVFI6IENPTlNUUixcbiAgVFlQRUQ6IFRZUEVELFxuICBWSUVXOiBWSUVXXG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///62\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// Forced replacement prototype accessors methods\nmodule.exports = __webpack_require__(29) || !__webpack_require__(3)(function () {\n var K = Math.random();\n // In FF throws only define methods\n // eslint-disable-next-line no-undef, no-useless-call\n __defineSetter__.call(null, K, function () { /* empty */ });\n delete __webpack_require__(2)[K];\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWZvcmNlZC1wYW0uanM/YzViNCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsaUJBQWlCLG1CQUFPLENBQUMsRUFBWSxNQUFNLG1CQUFPLENBQUMsQ0FBVTtBQUM3RDtBQUNBO0FBQ0E7QUFDQSw4Q0FBOEMsY0FBYztBQUM1RCxTQUFTLG1CQUFPLENBQUMsQ0FBVztBQUM1QixDQUFDIiwiZmlsZSI6IjYzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gRm9yY2VkIHJlcGxhY2VtZW50IHByb3RvdHlwZSBhY2Nlc3NvcnMgbWV0aG9kc1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19saWJyYXJ5JykgfHwgIXJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICB2YXIgSyA9IE1hdGgucmFuZG9tKCk7XG4gIC8vIEluIEZGIHRocm93cyBvbmx5IGRlZmluZSBtZXRob2RzXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZiwgbm8tdXNlbGVzcy1jYWxsXG4gIF9fZGVmaW5lU2V0dGVyX18uY2FsbChudWxsLCBLLCBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pO1xuICBkZWxldGUgcmVxdWlyZSgnLi9fZ2xvYmFsJylbS107XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///63\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// https://tc39.github.io/proposal-setmap-offrom/\nvar $export = __webpack_require__(0);\n\nmodule.exports = function (COLLECTION) {\n $export($export.S, COLLECTION, { of: function of() {\n var length = arguments.length;\n var A = new Array(length);\n while (length--) A[length] = arguments[length];\n return new this(A);\n } });\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2V0LWNvbGxlY3Rpb24tb2YuanM/YzZhMSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDO0FBQ0Esa0NBQWtDO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRyxFQUFFO0FBQ0wiLCJmaWxlIjoiNjQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChDT0xMRUNUSU9OKSB7XG4gICRleHBvcnQoJGV4cG9ydC5TLCBDT0xMRUNUSU9OLCB7IG9mOiBmdW5jdGlvbiBvZigpIHtcbiAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgQSA9IG5ldyBBcnJheShsZW5ndGgpO1xuICAgIHdoaWxlIChsZW5ndGgtLSkgQVtsZW5ndGhdID0gYXJndW1lbnRzW2xlbmd0aF07XG4gICAgcmV0dXJuIG5ldyB0aGlzKEEpO1xuICB9IH0pO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///64\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// https://tc39.github.io/proposal-setmap-offrom/\nvar $export = __webpack_require__(0);\nvar aFunction = __webpack_require__(10);\nvar ctx = __webpack_require__(19);\nvar forOf = __webpack_require__(40);\n\nmodule.exports = function (COLLECTION) {\n $export($export.S, COLLECTION, { from: function from(source /* , mapFn, thisArg */) {\n var mapFn = arguments[1];\n var mapping, A, n, cb;\n aFunction(this);\n mapping = mapFn !== undefined;\n if (mapping) aFunction(mapFn);\n if (source == undefined) return new this();\n A = [];\n if (mapping) {\n n = 0;\n cb = ctx(mapFn, arguments[2], 2);\n forOf(source, false, function (nextItem) {\n A.push(cb(nextItem, n++));\n });\n } else {\n forOf(source, false, A.push, A);\n }\n return new this(A);\n } });\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2V0LWNvbGxlY3Rpb24tZnJvbS5qcz8yOGU0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDLFVBQVUsbUJBQU8sQ0FBQyxFQUFRO0FBQzFCLFlBQVksbUJBQU8sQ0FBQyxFQUFXOztBQUUvQjtBQUNBLGtDQUFrQztBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEdBQUcsRUFBRTtBQUNMIiwiZmlsZSI6IjY1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgZm9yT2YgPSByZXF1aXJlKCcuL19mb3Itb2YnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQ09MTEVDVElPTikge1xuICAkZXhwb3J0KCRleHBvcnQuUywgQ09MTEVDVElPTiwgeyBmcm9tOiBmdW5jdGlvbiBmcm9tKHNvdXJjZSAvKiAsIG1hcEZuLCB0aGlzQXJnICovKSB7XG4gICAgdmFyIG1hcEZuID0gYXJndW1lbnRzWzFdO1xuICAgIHZhciBtYXBwaW5nLCBBLCBuLCBjYjtcbiAgICBhRnVuY3Rpb24odGhpcyk7XG4gICAgbWFwcGluZyA9IG1hcEZuICE9PSB1bmRlZmluZWQ7XG4gICAgaWYgKG1hcHBpbmcpIGFGdW5jdGlvbihtYXBGbik7XG4gICAgaWYgKHNvdXJjZSA9PSB1bmRlZmluZWQpIHJldHVybiBuZXcgdGhpcygpO1xuICAgIEEgPSBbXTtcbiAgICBpZiAobWFwcGluZykge1xuICAgICAgbiA9IDA7XG4gICAgICBjYiA9IGN0eChtYXBGbiwgYXJndW1lbnRzWzJdLCAyKTtcbiAgICAgIGZvck9mKHNvdXJjZSwgZmFsc2UsIGZ1bmN0aW9uIChuZXh0SXRlbSkge1xuICAgICAgICBBLnB1c2goY2IobmV4dEl0ZW0sIG4rKykpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvck9mKHNvdXJjZSwgZmFsc2UsIEEucHVzaCwgQSk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgdGhpcyhBKTtcbiAgfSB9KTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///65\n")},function(module,exports,__webpack_require__){eval("var isObject = __webpack_require__(4);\nvar document = __webpack_require__(2).document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n return is ? document.createElement(it) : {};\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZG9tLWNyZWF0ZS5qcz8yMzBlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGVBQWUsbUJBQU8sQ0FBQyxDQUFXO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiNjYuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBkb2N1bWVudCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLmRvY3VtZW50O1xuLy8gdHlwZW9mIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQgaXMgJ29iamVjdCcgaW4gb2xkIElFXG52YXIgaXMgPSBpc09iamVjdChkb2N1bWVudCkgJiYgaXNPYmplY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXMgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGl0KSA6IHt9O1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///66\n")},function(module,exports,__webpack_require__){eval("var global = __webpack_require__(2);\nvar core = __webpack_require__(18);\nvar LIBRARY = __webpack_require__(29);\nvar wksExt = __webpack_require__(95);\nvar defineProperty = __webpack_require__(8).f;\nmodule.exports = function (name) {\n var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});\n if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) });\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fd2tzLWRlZmluZS5qcz8zYTcyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGFBQWEsbUJBQU8sQ0FBQyxDQUFXO0FBQ2hDLFdBQVcsbUJBQU8sQ0FBQyxFQUFTO0FBQzVCLGNBQWMsbUJBQU8sQ0FBQyxFQUFZO0FBQ2xDLGFBQWEsbUJBQU8sQ0FBQyxFQUFZO0FBQ2pDLHFCQUFxQixtQkFBTyxDQUFDLENBQWM7QUFDM0M7QUFDQSwwREFBMEQsc0JBQXNCO0FBQ2hGLGtGQUFrRix3QkFBd0I7QUFDMUciLCJmaWxlIjoiNjcuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgY29yZSA9IHJlcXVpcmUoJy4vX2NvcmUnKTtcbnZhciBMSUJSQVJZID0gcmVxdWlyZSgnLi9fbGlicmFyeScpO1xudmFyIHdrc0V4dCA9IHJlcXVpcmUoJy4vX3drcy1leHQnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIHZhciAkU3ltYm9sID0gY29yZS5TeW1ib2wgfHwgKGNvcmUuU3ltYm9sID0gTElCUkFSWSA/IHt9IDogZ2xvYmFsLlN5bWJvbCB8fCB7fSk7XG4gIGlmIChuYW1lLmNoYXJBdCgwKSAhPSAnXycgJiYgIShuYW1lIGluICRTeW1ib2wpKSBkZWZpbmVQcm9wZXJ0eSgkU3ltYm9sLCBuYW1lLCB7IHZhbHVlOiB3a3NFeHQuZihuYW1lKSB9KTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///67\n")},function(module,exports,__webpack_require__){eval("var shared = __webpack_require__(47)('keys');\nvar uid = __webpack_require__(33);\nmodule.exports = function (key) {\n return shared[key] || (shared[key] = uid(key));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2hhcmVkLWtleS5qcz82MTNiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGFBQWEsbUJBQU8sQ0FBQyxFQUFXO0FBQ2hDLFVBQVUsbUJBQU8sQ0FBQyxFQUFRO0FBQzFCO0FBQ0E7QUFDQSIsImZpbGUiOiI2OC5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBzaGFyZWQgPSByZXF1aXJlKCcuL19zaGFyZWQnKSgna2V5cycpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4vX3VpZCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiBzaGFyZWRba2V5XSB8fCAoc2hhcmVkW2tleV0gPSB1aWQoa2V5KSk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///68\n")},function(module,exports){eval("// IE 8- don't enum bug keys\nmodule.exports = (\n 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZW51bS1idWcta2V5cy5qcz9lMTFlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjY5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gSUUgOC0gZG9uJ3QgZW51bSBidWcga2V5c1xubW9kdWxlLmV4cG9ydHMgPSAoXG4gICdjb25zdHJ1Y3RvcixoYXNPd25Qcm9wZXJ0eSxpc1Byb3RvdHlwZU9mLHByb3BlcnR5SXNFbnVtZXJhYmxlLHRvTG9jYWxlU3RyaW5nLHRvU3RyaW5nLHZhbHVlT2YnXG4pLnNwbGl0KCcsJyk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///69\n")},function(module,exports,__webpack_require__){eval("var document = __webpack_require__(2).document;\nmodule.exports = document && document.documentElement;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faHRtbC5qcz9mYWIyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGVBQWUsbUJBQU8sQ0FBQyxDQUFXO0FBQ2xDIiwiZmlsZSI6IjcwLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGRvY3VtZW50ID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuZG9jdW1lbnQ7XG5tb2R1bGUuZXhwb3J0cyA9IGRvY3VtZW50ICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///70\n")},function(module,exports,__webpack_require__){eval("// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nvar isObject = __webpack_require__(4);\nvar anObject = __webpack_require__(1);\nvar check = function (O, proto) {\n anObject(O);\n if (!isObject(proto) && proto !== null) throw TypeError(proto + \": can't set as prototype!\");\n};\nmodule.exports = {\n set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line\n function (test, buggy, set) {\n try {\n set = __webpack_require__(19)(Function.call, __webpack_require__(16).f(Object.prototype, '__proto__').set, 2);\n set(test, []);\n buggy = !(test instanceof Array);\n } catch (e) { buggy = true; }\n return function setPrototypeOf(O, proto) {\n check(O, proto);\n if (buggy) O.__proto__ = proto;\n else set(O, proto);\n return O;\n };\n }({}, false) : undefined),\n check: check\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2V0LXByb3RvLmpzPzhiOTciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrREFBa0Q7QUFDbEQ7QUFDQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxFQUFRLGlCQUFpQixtQkFBTyxDQUFDLEVBQWdCO0FBQ3ZFO0FBQ0E7QUFDQSxPQUFPLFlBQVksY0FBYztBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLLEdBQUc7QUFDUjtBQUNBIiwiZmlsZSI6IjcxLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gV29ya3Mgd2l0aCBfX3Byb3RvX18gb25seS4gT2xkIHY4IGNhbid0IHdvcmsgd2l0aCBudWxsIHByb3RvIG9iamVjdHMuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90byAqL1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBjaGVjayA9IGZ1bmN0aW9uIChPLCBwcm90bykge1xuICBhbk9iamVjdChPKTtcbiAgaWYgKCFpc09iamVjdChwcm90bykgJiYgcHJvdG8gIT09IG51bGwpIHRocm93IFR5cGVFcnJvcihwcm90byArIFwiOiBjYW4ndCBzZXQgYXMgcHJvdG90eXBlIVwiKTtcbn07XG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc2V0OiBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgKCdfX3Byb3RvX18nIGluIHt9ID8gLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICAgIGZ1bmN0aW9uICh0ZXN0LCBidWdneSwgc2V0KSB7XG4gICAgICB0cnkge1xuICAgICAgICBzZXQgPSByZXF1aXJlKCcuL19jdHgnKShGdW5jdGlvbi5jYWxsLCByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpLmYoT2JqZWN0LnByb3RvdHlwZSwgJ19fcHJvdG9fXycpLnNldCwgMik7XG4gICAgICAgIHNldCh0ZXN0LCBbXSk7XG4gICAgICAgIGJ1Z2d5ID0gISh0ZXN0IGluc3RhbmNlb2YgQXJyYXkpO1xuICAgICAgfSBjYXRjaCAoZSkgeyBidWdneSA9IHRydWU7IH1cbiAgICAgIHJldHVybiBmdW5jdGlvbiBzZXRQcm90b3R5cGVPZihPLCBwcm90bykge1xuICAgICAgICBjaGVjayhPLCBwcm90byk7XG4gICAgICAgIGlmIChidWdneSkgTy5fX3Byb3RvX18gPSBwcm90bztcbiAgICAgICAgZWxzZSBzZXQoTywgcHJvdG8pO1xuICAgICAgICByZXR1cm4gTztcbiAgICAgIH07XG4gICAgfSh7fSwgZmFsc2UpIDogdW5kZWZpbmVkKSxcbiAgY2hlY2s6IGNoZWNrXG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///71\n")},function(module,exports){eval("module.exports = '\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003' +\n '\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF';\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLXdzLmpzP2ZkZWYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSIsImZpbGUiOiI3Mi5qcyIsInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gJ1xceDA5XFx4MEFcXHgwQlxceDBDXFx4MERcXHgyMFxceEEwXFx1MTY4MFxcdTE4MEVcXHUyMDAwXFx1MjAwMVxcdTIwMDJcXHUyMDAzJyArXG4gICdcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBBXFx1MjAyRlxcdTIwNUZcXHUzMDAwXFx1MjAyOFxcdTIwMjlcXHVGRUZGJztcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///72\n")},function(module,exports,__webpack_require__){eval("var isObject = __webpack_require__(4);\nvar setPrototypeOf = __webpack_require__(71).set;\nmodule.exports = function (that, target, C) {\n var S = target.constructor;\n var P;\n if (S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && isObject(P) && setPrototypeOf) {\n setPrototypeOf(that, P);\n } return that;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faW5oZXJpdC1pZi1yZXF1aXJlZC5qcz81ZGJjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLHFCQUFxQixtQkFBTyxDQUFDLEVBQWM7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCIsImZpbGUiOiI3My5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIHNldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fc2V0LXByb3RvJykuc2V0O1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGhhdCwgdGFyZ2V0LCBDKSB7XG4gIHZhciBTID0gdGFyZ2V0LmNvbnN0cnVjdG9yO1xuICB2YXIgUDtcbiAgaWYgKFMgIT09IEMgJiYgdHlwZW9mIFMgPT0gJ2Z1bmN0aW9uJyAmJiAoUCA9IFMucHJvdG90eXBlKSAhPT0gQy5wcm90b3R5cGUgJiYgaXNPYmplY3QoUCkgJiYgc2V0UHJvdG90eXBlT2YpIHtcbiAgICBzZXRQcm90b3R5cGVPZih0aGF0LCBQKTtcbiAgfSByZXR1cm4gdGhhdDtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///73\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar toInteger = __webpack_require__(21);\nvar defined = __webpack_require__(24);\n\nmodule.exports = function repeat(count) {\n var str = String(defined(this));\n var res = '';\n var n = toInteger(count);\n if (n < 0 || n == Infinity) throw RangeError(\"Count can't be negative\");\n for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) res += str;\n return res;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLXJlcGVhdC5qcz85NzQ0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2QyxjQUFjLG1CQUFPLENBQUMsRUFBWTs7QUFFbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsTUFBTTtBQUNkO0FBQ0EiLCJmaWxlIjoiNzQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gcmVwZWF0KGNvdW50KSB7XG4gIHZhciBzdHIgPSBTdHJpbmcoZGVmaW5lZCh0aGlzKSk7XG4gIHZhciByZXMgPSAnJztcbiAgdmFyIG4gPSB0b0ludGVnZXIoY291bnQpO1xuICBpZiAobiA8IDAgfHwgbiA9PSBJbmZpbml0eSkgdGhyb3cgUmFuZ2VFcnJvcihcIkNvdW50IGNhbid0IGJlIG5lZ2F0aXZlXCIpO1xuICBmb3IgKDtuID4gMDsgKG4gPj4+PSAxKSAmJiAoc3RyICs9IHN0cikpIGlmIChuICYgMSkgcmVzICs9IHN0cjtcbiAgcmV0dXJuIHJlcztcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///74\n")},function(module,exports){eval("// 20.2.2.28 Math.sign(x)\nmodule.exports = Math.sign || function sign(x) {\n // eslint-disable-next-line no-self-compare\n return (x = +x) == 0 || x != x ? x : x < 0 ? -1 : 1;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWF0aC1zaWduLmpzPzk2ZmIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiI3NS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDIwLjIuMi4yOCBNYXRoLnNpZ24oeClcbm1vZHVsZS5leHBvcnRzID0gTWF0aC5zaWduIHx8IGZ1bmN0aW9uIHNpZ24oeCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gIHJldHVybiAoeCA9ICt4KSA9PSAwIHx8IHggIT0geCA/IHggOiB4IDwgMCA/IC0xIDogMTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///75\n")},function(module,exports){eval("// 20.2.2.14 Math.expm1(x)\nvar $expm1 = Math.expm1;\nmodule.exports = (!$expm1\n // Old FF bug\n || $expm1(10) > 22025.465794806719 || $expm1(10) < 22025.4657948067165168\n // Tor Browser bug\n || $expm1(-2e-17) != -2e-17\n) ? function expm1(x) {\n return (x = +x) == 0 ? x : x > -1e-6 && x < 1e-6 ? x + x * x / 2 : Math.exp(x) - 1;\n} : $expm1;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWF0aC1leHBtMS5qcz8yZDVjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiNzYuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyMC4yLjIuMTQgTWF0aC5leHBtMSh4KVxudmFyICRleHBtMSA9IE1hdGguZXhwbTE7XG5tb2R1bGUuZXhwb3J0cyA9ICghJGV4cG0xXG4gIC8vIE9sZCBGRiBidWdcbiAgfHwgJGV4cG0xKDEwKSA+IDIyMDI1LjQ2NTc5NDgwNjcxOSB8fCAkZXhwbTEoMTApIDwgMjIwMjUuNDY1Nzk0ODA2NzE2NTE2OFxuICAvLyBUb3IgQnJvd3NlciBidWdcbiAgfHwgJGV4cG0xKC0yZS0xNykgIT0gLTJlLTE3XG4pID8gZnVuY3Rpb24gZXhwbTEoeCkge1xuICByZXR1cm4gKHggPSAreCkgPT0gMCA/IHggOiB4ID4gLTFlLTYgJiYgeCA8IDFlLTYgPyB4ICsgeCAqIHggLyAyIDogTWF0aC5leHAoeCkgLSAxO1xufSA6ICRleHBtMTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///76\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar LIBRARY = __webpack_require__(29);\nvar $export = __webpack_require__(0);\nvar redefine = __webpack_require__(12);\nvar hide = __webpack_require__(11);\nvar Iterators = __webpack_require__(46);\nvar $iterCreate = __webpack_require__(78);\nvar setToStringTag = __webpack_require__(43);\nvar getPrototypeOf = __webpack_require__(17);\nvar ITERATOR = __webpack_require__(5)('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n $iterCreate(Constructor, NAME, next);\n var getMethod = function (kind) {\n if (!BUGGY && kind in proto) return proto[kind];\n switch (kind) {\n case KEYS: return function keys() { return new Constructor(this, kind); };\n case VALUES: return function values() { return new Constructor(this, kind); };\n } return function entries() { return new Constructor(this, kind); };\n };\n var TAG = NAME + ' Iterator';\n var DEF_VALUES = DEFAULT == VALUES;\n var VALUES_BUG = false;\n var proto = Base.prototype;\n var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n var $default = $native || getMethod(DEFAULT);\n var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n var methods, key, IteratorPrototype;\n // Fix native\n if ($anyNative) {\n IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n // Set @@toStringTag to native iterators\n setToStringTag(IteratorPrototype, TAG, true);\n // fix for some old engines\n if (!LIBRARY && typeof IteratorPrototype[ITERATOR] != 'function') hide(IteratorPrototype, ITERATOR, returnThis);\n }\n }\n // fix Array#{values, @@iterator}.name in V8 / FF\n if (DEF_VALUES && $native && $native.name !== VALUES) {\n VALUES_BUG = true;\n $default = function values() { return $native.call(this); };\n }\n // Define iterator\n if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n hide(proto, ITERATOR, $default);\n }\n // Plug for library\n Iterators[NAME] = $default;\n Iterators[TAG] = returnThis;\n if (DEFAULT) {\n methods = {\n values: DEF_VALUES ? $default : getMethod(VALUES),\n keys: IS_SET ? $default : getMethod(KEYS),\n entries: $entries\n };\n if (FORCED) for (key in methods) {\n if (!(key in proto)) redefine(proto, key, methods[key]);\n } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n }\n return methods;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlci1kZWZpbmUuanM/MDFmOSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGNBQWMsbUJBQU8sQ0FBQyxFQUFZO0FBQ2xDLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyxFQUFhO0FBQ3BDLFdBQVcsbUJBQU8sQ0FBQyxFQUFTO0FBQzVCLGdCQUFnQixtQkFBTyxDQUFDLEVBQWM7QUFDdEMsa0JBQWtCLG1CQUFPLENBQUMsRUFBZ0I7QUFDMUMscUJBQXFCLG1CQUFPLENBQUMsRUFBc0I7QUFDbkQscUJBQXFCLG1CQUFPLENBQUMsRUFBZTtBQUM1QyxlQUFlLG1CQUFPLENBQUMsQ0FBUTtBQUMvQiw4Q0FBOEM7QUFDOUM7QUFDQTtBQUNBOztBQUVBLDhCQUE4QixhQUFhOztBQUUzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUNBQXlDLG9DQUFvQztBQUM3RSw2Q0FBNkMsb0NBQW9DO0FBQ2pGLEtBQUssNEJBQTRCLG9DQUFvQztBQUNyRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLG1CQUFtQjtBQUNuQztBQUNBO0FBQ0Esa0NBQWtDLDJCQUEyQjtBQUM3RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EiLCJmaWxlIjoiNzcuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgTElCUkFSWSA9IHJlcXVpcmUoJy4vX2xpYnJhcnknKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJyk7XG52YXIgJGl0ZXJDcmVhdGUgPSByZXF1aXJlKCcuL19pdGVyLWNyZWF0ZScpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBJVEVSQVRPUiA9IHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpO1xudmFyIEJVR0dZID0gIShbXS5rZXlzICYmICduZXh0JyBpbiBbXS5rZXlzKCkpOyAvLyBTYWZhcmkgaGFzIGJ1Z2d5IGl0ZXJhdG9ycyB3L28gYG5leHRgXG52YXIgRkZfSVRFUkFUT1IgPSAnQEBpdGVyYXRvcic7XG52YXIgS0VZUyA9ICdrZXlzJztcbnZhciBWQUxVRVMgPSAndmFsdWVzJztcblxudmFyIHJldHVyblRoaXMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChCYXNlLCBOQU1FLCBDb25zdHJ1Y3RvciwgbmV4dCwgREVGQVVMVCwgSVNfU0VULCBGT1JDRUQpIHtcbiAgJGl0ZXJDcmVhdGUoQ29uc3RydWN0b3IsIE5BTUUsIG5leHQpO1xuICB2YXIgZ2V0TWV0aG9kID0gZnVuY3Rpb24gKGtpbmQpIHtcbiAgICBpZiAoIUJVR0dZICYmIGtpbmQgaW4gcHJvdG8pIHJldHVybiBwcm90b1traW5kXTtcbiAgICBzd2l0Y2ggKGtpbmQpIHtcbiAgICAgIGNhc2UgS0VZUzogcmV0dXJuIGZ1bmN0aW9uIGtleXMoKSB7IHJldHVybiBuZXcgQ29uc3RydWN0b3IodGhpcywga2luZCk7IH07XG4gICAgICBjYXNlIFZBTFVFUzogcmV0dXJuIGZ1bmN0aW9uIHZhbHVlcygpIHsgcmV0dXJuIG5ldyBDb25zdHJ1Y3Rvcih0aGlzLCBraW5kKTsgfTtcbiAgICB9IHJldHVybiBmdW5jdGlvbiBlbnRyaWVzKCkgeyByZXR1cm4gbmV3IENvbnN0cnVjdG9yKHRoaXMsIGtpbmQpOyB9O1xuICB9O1xuICB2YXIgVEFHID0gTkFNRSArICcgSXRlcmF0b3InO1xuICB2YXIgREVGX1ZBTFVFUyA9IERFRkFVTFQgPT0gVkFMVUVTO1xuICB2YXIgVkFMVUVTX0JVRyA9IGZhbHNlO1xuICB2YXIgcHJvdG8gPSBCYXNlLnByb3RvdHlwZTtcbiAgdmFyICRuYXRpdmUgPSBwcm90b1tJVEVSQVRPUl0gfHwgcHJvdG9bRkZfSVRFUkFUT1JdIHx8IERFRkFVTFQgJiYgcHJvdG9bREVGQVVMVF07XG4gIHZhciAkZGVmYXVsdCA9ICRuYXRpdmUgfHwgZ2V0TWV0aG9kKERFRkFVTFQpO1xuICB2YXIgJGVudHJpZXMgPSBERUZBVUxUID8gIURFRl9WQUxVRVMgPyAkZGVmYXVsdCA6IGdldE1ldGhvZCgnZW50cmllcycpIDogdW5kZWZpbmVkO1xuICB2YXIgJGFueU5hdGl2ZSA9IE5BTUUgPT0gJ0FycmF5JyA/IHByb3RvLmVudHJpZXMgfHwgJG5hdGl2ZSA6ICRuYXRpdmU7XG4gIHZhciBtZXRob2RzLCBrZXksIEl0ZXJhdG9yUHJvdG90eXBlO1xuICAvLyBGaXggbmF0aXZlXG4gIGlmICgkYW55TmF0aXZlKSB7XG4gICAgSXRlcmF0b3JQcm90b3R5cGUgPSBnZXRQcm90b3R5cGVPZigkYW55TmF0aXZlLmNhbGwobmV3IEJhc2UoKSkpO1xuICAgIGlmIChJdGVyYXRvclByb3RvdHlwZSAhPT0gT2JqZWN0LnByb3RvdHlwZSAmJiBJdGVyYXRvclByb3RvdHlwZS5uZXh0KSB7XG4gICAgICAvLyBTZXQgQEB0b1N0cmluZ1RhZyB0byBuYXRpdmUgaXRlcmF0b3JzXG4gICAgICBzZXRUb1N0cmluZ1RhZyhJdGVyYXRvclByb3RvdHlwZSwgVEFHLCB0cnVlKTtcbiAgICAgIC8vIGZpeCBmb3Igc29tZSBvbGQgZW5naW5lc1xuICAgICAgaWYgKCFMSUJSQVJZICYmIHR5cGVvZiBJdGVyYXRvclByb3RvdHlwZVtJVEVSQVRPUl0gIT0gJ2Z1bmN0aW9uJykgaGlkZShJdGVyYXRvclByb3RvdHlwZSwgSVRFUkFUT1IsIHJldHVyblRoaXMpO1xuICAgIH1cbiAgfVxuICAvLyBmaXggQXJyYXkje3ZhbHVlcywgQEBpdGVyYXRvcn0ubmFtZSBpbiBWOCAvIEZGXG4gIGlmIChERUZfVkFMVUVTICYmICRuYXRpdmUgJiYgJG5hdGl2ZS5uYW1lICE9PSBWQUxVRVMpIHtcbiAgICBWQUxVRVNfQlVHID0gdHJ1ZTtcbiAgICAkZGVmYXVsdCA9IGZ1bmN0aW9uIHZhbHVlcygpIHsgcmV0dXJuICRuYXRpdmUuY2FsbCh0aGlzKTsgfTtcbiAgfVxuICAvLyBEZWZpbmUgaXRlcmF0b3JcbiAgaWYgKCghTElCUkFSWSB8fCBGT1JDRUQpICYmIChCVUdHWSB8fCBWQUxVRVNfQlVHIHx8ICFwcm90b1tJVEVSQVRPUl0pKSB7XG4gICAgaGlkZShwcm90bywgSVRFUkFUT1IsICRkZWZhdWx0KTtcbiAgfVxuICAvLyBQbHVnIGZvciBsaWJyYXJ5XG4gIEl0ZXJhdG9yc1tOQU1FXSA9ICRkZWZhdWx0O1xuICBJdGVyYXRvcnNbVEFHXSA9IHJldHVyblRoaXM7XG4gIGlmIChERUZBVUxUKSB7XG4gICAgbWV0aG9kcyA9IHtcbiAgICAgIHZhbHVlczogREVGX1ZBTFVFUyA/ICRkZWZhdWx0IDogZ2V0TWV0aG9kKFZBTFVFUyksXG4gICAgICBrZXlzOiBJU19TRVQgPyAkZGVmYXVsdCA6IGdldE1ldGhvZChLRVlTKSxcbiAgICAgIGVudHJpZXM6ICRlbnRyaWVzXG4gICAgfTtcbiAgICBpZiAoRk9SQ0VEKSBmb3IgKGtleSBpbiBtZXRob2RzKSB7XG4gICAgICBpZiAoIShrZXkgaW4gcHJvdG8pKSByZWRlZmluZShwcm90bywga2V5LCBtZXRob2RzW2tleV0pO1xuICAgIH0gZWxzZSAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIChCVUdHWSB8fCBWQUxVRVNfQlVHKSwgTkFNRSwgbWV0aG9kcyk7XG4gIH1cbiAgcmV0dXJuIG1ldGhvZHM7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///77\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar create = __webpack_require__(36);\nvar descriptor = __webpack_require__(32);\nvar setToStringTag = __webpack_require__(43);\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\n__webpack_require__(11)(IteratorPrototype, __webpack_require__(5)('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n setToStringTag(Constructor, NAME + ' Iterator');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlci1jcmVhdGUuanM/NDFhMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGFBQWEsbUJBQU8sQ0FBQyxFQUFrQjtBQUN2QyxpQkFBaUIsbUJBQU8sQ0FBQyxFQUFrQjtBQUMzQyxxQkFBcUIsbUJBQU8sQ0FBQyxFQUFzQjtBQUNuRDs7QUFFQTtBQUNBLG1CQUFPLENBQUMsRUFBUyxxQkFBcUIsbUJBQU8sQ0FBQyxDQUFRLDRCQUE0QixhQUFhLEVBQUU7O0FBRWpHO0FBQ0EscURBQXFELDRCQUE0QjtBQUNqRjtBQUNBIiwiZmlsZSI6Ijc4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKTtcbnZhciBkZXNjcmlwdG9yID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBJdGVyYXRvclByb3RvdHlwZSA9IHt9O1xuXG4vLyAyNS4xLjIuMS4xICVJdGVyYXRvclByb3RvdHlwZSVbQEBpdGVyYXRvcl0oKVxucmVxdWlyZSgnLi9faGlkZScpKEl0ZXJhdG9yUHJvdG90eXBlLCByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBOQU1FLCBuZXh0KSB7XG4gIENvbnN0cnVjdG9yLnByb3RvdHlwZSA9IGNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSwgeyBuZXh0OiBkZXNjcmlwdG9yKDEsIG5leHQpIH0pO1xuICBzZXRUb1N0cmluZ1RhZyhDb25zdHJ1Y3RvciwgTkFNRSArICcgSXRlcmF0b3InKTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///78\n")},function(module,exports,__webpack_require__){eval("// helper for String#{startsWith, endsWith, includes}\nvar isRegExp = __webpack_require__(56);\nvar defined = __webpack_require__(24);\n\nmodule.exports = function (that, searchString, NAME) {\n if (isRegExp(searchString)) throw TypeError('String#' + NAME + \" doesn't accept regex!\");\n return String(defined(that));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLWNvbnRleHQuanM/ZDJjOCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxzQkFBc0I7QUFDdEIsZUFBZSxtQkFBTyxDQUFDLEVBQWM7QUFDckMsY0FBYyxtQkFBTyxDQUFDLEVBQVk7O0FBRWxDO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6Ijc5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaGVscGVyIGZvciBTdHJpbmcje3N0YXJ0c1dpdGgsIGVuZHNXaXRoLCBpbmNsdWRlc31cbnZhciBpc1JlZ0V4cCA9IHJlcXVpcmUoJy4vX2lzLXJlZ2V4cCcpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRoYXQsIHNlYXJjaFN0cmluZywgTkFNRSkge1xuICBpZiAoaXNSZWdFeHAoc2VhcmNoU3RyaW5nKSkgdGhyb3cgVHlwZUVycm9yKCdTdHJpbmcjJyArIE5BTUUgKyBcIiBkb2Vzbid0IGFjY2VwdCByZWdleCFcIik7XG4gIHJldHVybiBTdHJpbmcoZGVmaW5lZCh0aGF0KSk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///79\n")},function(module,exports,__webpack_require__){eval("var MATCH = __webpack_require__(5)('match');\nmodule.exports = function (KEY) {\n var re = /./;\n try {\n '/./'[KEY](re);\n } catch (e) {\n try {\n re[MATCH] = false;\n return !'/./'[KEY](re);\n } catch (f) { /* empty */ }\n } return true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZmFpbHMtaXMtcmVnZXhwLmpzPzUxNDciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSxtQkFBTyxDQUFDLENBQVE7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsS0FBSyxZQUFZO0FBQ2pCLEdBQUc7QUFDSCIsImZpbGUiOiI4MC5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBNQVRDSCA9IHJlcXVpcmUoJy4vX3drcycpKCdtYXRjaCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoS0VZKSB7XG4gIHZhciByZSA9IC8uLztcbiAgdHJ5IHtcbiAgICAnLy4vJ1tLRVldKHJlKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHRyeSB7XG4gICAgICByZVtNQVRDSF0gPSBmYWxzZTtcbiAgICAgIHJldHVybiAhJy8uLydbS0VZXShyZSk7XG4gICAgfSBjYXRjaCAoZikgeyAvKiBlbXB0eSAqLyB9XG4gIH0gcmV0dXJuIHRydWU7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///80\n")},function(module,exports,__webpack_require__){eval("// check on default Array iterator\nvar Iterators = __webpack_require__(46);\nvar ITERATOR = __webpack_require__(5)('iterator');\nvar ArrayProto = Array.prototype;\n\nmodule.exports = function (it) {\n return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtYXJyYXktaXRlci5qcz8zM2E0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsZ0JBQWdCLG1CQUFPLENBQUMsRUFBYztBQUN0QyxlQUFlLG1CQUFPLENBQUMsQ0FBUTtBQUMvQjs7QUFFQTtBQUNBO0FBQ0EiLCJmaWxlIjoiODEuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBjaGVjayBvbiBkZWZhdWx0IEFycmF5IGl0ZXJhdG9yXG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJyk7XG52YXIgSVRFUkFUT1IgPSByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKTtcbnZhciBBcnJheVByb3RvID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgIT09IHVuZGVmaW5lZCAmJiAoSXRlcmF0b3JzLkFycmF5ID09PSBpdCB8fCBBcnJheVByb3RvW0lURVJBVE9SXSA9PT0gaXQpO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///81\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $defineProperty = __webpack_require__(8);\nvar createDesc = __webpack_require__(32);\n\nmodule.exports = function (object, index, value) {\n if (index in object) $defineProperty.f(object, index, createDesc(0, value));\n else object[index] = value;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY3JlYXRlLXByb3BlcnR5LmpzP2YxYWUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixzQkFBc0IsbUJBQU8sQ0FBQyxDQUFjO0FBQzVDLGlCQUFpQixtQkFBTyxDQUFDLEVBQWtCOztBQUUzQztBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiI4Mi5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciAkZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciBjcmVhdGVEZXNjID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIGluZGV4LCB2YWx1ZSkge1xuICBpZiAoaW5kZXggaW4gb2JqZWN0KSAkZGVmaW5lUHJvcGVydHkuZihvYmplY3QsIGluZGV4LCBjcmVhdGVEZXNjKDAsIHZhbHVlKSk7XG4gIGVsc2Ugb2JqZWN0W2luZGV4XSA9IHZhbHVlO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///82\n")},function(module,exports,__webpack_require__){eval("var classof = __webpack_require__(44);\nvar ITERATOR = __webpack_require__(5)('iterator');\nvar Iterators = __webpack_require__(46);\nmodule.exports = __webpack_require__(18).getIteratorMethod = function (it) {\n if (it != undefined) return it[ITERATOR]\n || it['@@iterator']\n || Iterators[classof(it)];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9jb3JlLmdldC1pdGVyYXRvci1tZXRob2QuanM/MjdlZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLG1CQUFPLENBQUMsRUFBWTtBQUNsQyxlQUFlLG1CQUFPLENBQUMsQ0FBUTtBQUMvQixnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFjO0FBQ3RDLGlCQUFpQixtQkFBTyxDQUFDLEVBQVM7QUFDbEM7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiODMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4vX2NsYXNzb2YnKTtcbnZhciBJVEVSQVRPUiA9IHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19jb3JlJykuZ2V0SXRlcmF0b3JNZXRob2QgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGl0ICE9IHVuZGVmaW5lZCkgcmV0dXJuIGl0W0lURVJBVE9SXVxuICAgIHx8IGl0WydAQGl0ZXJhdG9yJ11cbiAgICB8fCBJdGVyYXRvcnNbY2xhc3NvZihpdCldO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///83\n")},function(module,exports,__webpack_require__){eval("// 9.4.2.3 ArraySpeciesCreate(originalArray, length)\nvar speciesConstructor = __webpack_require__(223);\n\nmodule.exports = function (original, length) {\n return new (speciesConstructor(original))(length);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktc3BlY2llcy1jcmVhdGUuanM/Y2QxYyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLHlCQUF5QixtQkFBTyxDQUFDLEdBQThCOztBQUUvRDtBQUNBO0FBQ0EiLCJmaWxlIjoiODQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyA5LjQuMi4zIEFycmF5U3BlY2llc0NyZWF0ZShvcmlnaW5hbEFycmF5LCBsZW5ndGgpXG52YXIgc3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi9fYXJyYXktc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcmlnaW5hbCwgbGVuZ3RoKSB7XG4gIHJldHVybiBuZXcgKHNwZWNpZXNDb25zdHJ1Y3RvcihvcmlnaW5hbCkpKGxlbmd0aCk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///84\n")},function(module,exports,__webpack_require__){"use strict";eval("// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\n\nvar toObject = __webpack_require__(9);\nvar toAbsoluteIndex = __webpack_require__(35);\nvar toLength = __webpack_require__(6);\nmodule.exports = function fill(value /* , start = 0, end = @length */) {\n var O = toObject(this);\n var length = toLength(O.length);\n var aLen = arguments.length;\n var index = toAbsoluteIndex(aLen > 1 ? arguments[1] : undefined, length);\n var end = aLen > 2 ? arguments[2] : undefined;\n var endPos = end === undefined ? length : toAbsoluteIndex(end, length);\n while (endPos > index) O[index++] = value;\n return O;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktZmlsbC5qcz8zNmJkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ2E7QUFDYixlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxzQkFBc0IsbUJBQU8sQ0FBQyxFQUFzQjtBQUNwRCxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiI4NS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDIyLjEuMy42IEFycmF5LnByb3RvdHlwZS5maWxsKHZhbHVlLCBzdGFydCA9IDAsIGVuZCA9IHRoaXMubGVuZ3RoKVxuJ3VzZSBzdHJpY3QnO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi9fdG8tYWJzb2x1dGUtaW5kZXgnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBmaWxsKHZhbHVlIC8qICwgc3RhcnQgPSAwLCBlbmQgPSBAbGVuZ3RoICovKSB7XG4gIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gIHZhciBsZW5ndGggPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgdmFyIGluZGV4ID0gdG9BYnNvbHV0ZUluZGV4KGFMZW4gPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkLCBsZW5ndGgpO1xuICB2YXIgZW5kID0gYUxlbiA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQ7XG4gIHZhciBlbmRQb3MgPSBlbmQgPT09IHVuZGVmaW5lZCA/IGxlbmd0aCA6IHRvQWJzb2x1dGVJbmRleChlbmQsIGxlbmd0aCk7XG4gIHdoaWxlIChlbmRQb3MgPiBpbmRleCkgT1tpbmRleCsrXSA9IHZhbHVlO1xuICByZXR1cm4gTztcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///85\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar addToUnscopables = __webpack_require__(31);\nvar step = __webpack_require__(112);\nvar Iterators = __webpack_require__(46);\nvar toIObject = __webpack_require__(15);\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = __webpack_require__(77)(Array, 'Array', function (iterated, kind) {\n this._t = toIObject(iterated); // target\n this._i = 0; // next index\n this._k = kind; // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var kind = this._k;\n var index = this._i++;\n if (!O || index >= O.length) {\n this._t = undefined;\n return step(1);\n }\n if (kind == 'keys') return step(0, index);\n if (kind == 'values') return step(0, O[index]);\n return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuaXRlcmF0b3IuanM/Y2FkZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLHVCQUF1QixtQkFBTyxDQUFDLEVBQXVCO0FBQ3RELFdBQVcsbUJBQU8sQ0FBQyxHQUFjO0FBQ2pDLGdCQUFnQixtQkFBTyxDQUFDLEVBQWM7QUFDdEMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTs7QUFFdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsbUJBQU8sQ0FBQyxFQUFnQjtBQUN6QyxnQ0FBZ0M7QUFDaEMsY0FBYztBQUNkLGlCQUFpQjtBQUNqQjtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0EiLCJmaWxlIjoiODYuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgYWRkVG9VbnNjb3BhYmxlcyA9IHJlcXVpcmUoJy4vX2FkZC10by11bnNjb3BhYmxlcycpO1xudmFyIHN0ZXAgPSByZXF1aXJlKCcuL19pdGVyLXN0ZXAnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG5cbi8vIDIyLjEuMy40IEFycmF5LnByb3RvdHlwZS5lbnRyaWVzKClcbi8vIDIyLjEuMy4xMyBBcnJheS5wcm90b3R5cGUua2V5cygpXG4vLyAyMi4xLjMuMjkgQXJyYXkucHJvdG90eXBlLnZhbHVlcygpXG4vLyAyMi4xLjMuMzAgQXJyYXkucHJvdG90eXBlW0BAaXRlcmF0b3JdKClcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9faXRlci1kZWZpbmUnKShBcnJheSwgJ0FycmF5JywgZnVuY3Rpb24gKGl0ZXJhdGVkLCBraW5kKSB7XG4gIHRoaXMuX3QgPSB0b0lPYmplY3QoaXRlcmF0ZWQpOyAvLyB0YXJnZXRcbiAgdGhpcy5faSA9IDA7ICAgICAgICAgICAgICAgICAgIC8vIG5leHQgaW5kZXhcbiAgdGhpcy5fayA9IGtpbmQ7ICAgICAgICAgICAgICAgIC8vIGtpbmRcbi8vIDIyLjEuNS4yLjEgJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlLm5leHQoKVxufSwgZnVuY3Rpb24gKCkge1xuICB2YXIgTyA9IHRoaXMuX3Q7XG4gIHZhciBraW5kID0gdGhpcy5faztcbiAgdmFyIGluZGV4ID0gdGhpcy5faSsrO1xuICBpZiAoIU8gfHwgaW5kZXggPj0gTy5sZW5ndGgpIHtcbiAgICB0aGlzLl90ID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiBzdGVwKDEpO1xuICB9XG4gIGlmIChraW5kID09ICdrZXlzJykgcmV0dXJuIHN0ZXAoMCwgaW5kZXgpO1xuICBpZiAoa2luZCA9PSAndmFsdWVzJykgcmV0dXJuIHN0ZXAoMCwgT1tpbmRleF0pO1xuICByZXR1cm4gc3RlcCgwLCBbaW5kZXgsIE9baW5kZXhdXSk7XG59LCAndmFsdWVzJyk7XG5cbi8vIGFyZ3VtZW50c0xpc3RbQEBpdGVyYXRvcl0gaXMgJUFycmF5UHJvdG9fdmFsdWVzJSAoOS40LjQuNiwgOS40LjQuNylcbkl0ZXJhdG9ycy5Bcmd1bWVudHMgPSBJdGVyYXRvcnMuQXJyYXk7XG5cbmFkZFRvVW5zY29wYWJsZXMoJ2tleXMnKTtcbmFkZFRvVW5zY29wYWJsZXMoJ3ZhbHVlcycpO1xuYWRkVG9VbnNjb3BhYmxlcygnZW50cmllcycpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///86\n")},function(module,exports,__webpack_require__){"use strict";eval("\n\nvar regexpFlags = __webpack_require__(50);\n\nvar nativeExec = RegExp.prototype.exec;\n// This always refers to the native implementation, because the\n// String#replace polyfill uses ./fix-regexp-well-known-symbol-logic.js,\n// which loads this file before patching the method.\nvar nativeReplace = String.prototype.replace;\n\nvar patchedExec = nativeExec;\n\nvar LAST_INDEX = 'lastIndex';\n\nvar UPDATES_LAST_INDEX_WRONG = (function () {\n var re1 = /a/,\n re2 = /b*/g;\n nativeExec.call(re1, 'a');\n nativeExec.call(re2, 'a');\n return re1[LAST_INDEX] !== 0 || re2[LAST_INDEX] !== 0;\n})();\n\n// nonparticipating capturing group, copied from es5-shim's String#split patch.\nvar NPCG_INCLUDED = /()??/.exec('')[1] !== undefined;\n\nvar PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED;\n\nif (PATCH) {\n patchedExec = function exec(str) {\n var re = this;\n var lastIndex, reCopy, match, i;\n\n if (NPCG_INCLUDED) {\n reCopy = new RegExp('^' + re.source + '$(?!\\\\s)', regexpFlags.call(re));\n }\n if (UPDATES_LAST_INDEX_WRONG) lastIndex = re[LAST_INDEX];\n\n match = nativeExec.call(re, str);\n\n if (UPDATES_LAST_INDEX_WRONG && match) {\n re[LAST_INDEX] = re.global ? match.index + match[0].length : lastIndex;\n }\n if (NPCG_INCLUDED && match && match.length > 1) {\n // Fix browsers whose `exec` methods don't consistently return `undefined`\n // for NPCG, like IE8. NOTE: This doesn' work for /(.?)?/\n // eslint-disable-next-line no-loop-func\n nativeReplace.call(match[0], reCopy, function () {\n for (i = 1; i < arguments.length - 2; i++) {\n if (arguments[i] === undefined) match[i] = undefined;\n }\n });\n }\n\n return match;\n };\n}\n\nmodule.exports = patchedExec;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcmVnZXhwLWV4ZWMuanM/NTIwYSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixrQkFBa0IsbUJBQU8sQ0FBQyxFQUFVOztBQUVwQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLDBCQUEwQjtBQUM3QztBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiI4Ny5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHJlZ2V4cEZsYWdzID0gcmVxdWlyZSgnLi9fZmxhZ3MnKTtcblxudmFyIG5hdGl2ZUV4ZWMgPSBSZWdFeHAucHJvdG90eXBlLmV4ZWM7XG4vLyBUaGlzIGFsd2F5cyByZWZlcnMgdG8gdGhlIG5hdGl2ZSBpbXBsZW1lbnRhdGlvbiwgYmVjYXVzZSB0aGVcbi8vIFN0cmluZyNyZXBsYWNlIHBvbHlmaWxsIHVzZXMgLi9maXgtcmVnZXhwLXdlbGwta25vd24tc3ltYm9sLWxvZ2ljLmpzLFxuLy8gd2hpY2ggbG9hZHMgdGhpcyBmaWxlIGJlZm9yZSBwYXRjaGluZyB0aGUgbWV0aG9kLlxudmFyIG5hdGl2ZVJlcGxhY2UgPSBTdHJpbmcucHJvdG90eXBlLnJlcGxhY2U7XG5cbnZhciBwYXRjaGVkRXhlYyA9IG5hdGl2ZUV4ZWM7XG5cbnZhciBMQVNUX0lOREVYID0gJ2xhc3RJbmRleCc7XG5cbnZhciBVUERBVEVTX0xBU1RfSU5ERVhfV1JPTkcgPSAoZnVuY3Rpb24gKCkge1xuICB2YXIgcmUxID0gL2EvLFxuICAgICAgcmUyID0gL2IqL2c7XG4gIG5hdGl2ZUV4ZWMuY2FsbChyZTEsICdhJyk7XG4gIG5hdGl2ZUV4ZWMuY2FsbChyZTIsICdhJyk7XG4gIHJldHVybiByZTFbTEFTVF9JTkRFWF0gIT09IDAgfHwgcmUyW0xBU1RfSU5ERVhdICE9PSAwO1xufSkoKTtcblxuLy8gbm9ucGFydGljaXBhdGluZyBjYXB0dXJpbmcgZ3JvdXAsIGNvcGllZCBmcm9tIGVzNS1zaGltJ3MgU3RyaW5nI3NwbGl0IHBhdGNoLlxudmFyIE5QQ0dfSU5DTFVERUQgPSAvKCk/Py8uZXhlYygnJylbMV0gIT09IHVuZGVmaW5lZDtcblxudmFyIFBBVENIID0gVVBEQVRFU19MQVNUX0lOREVYX1dST05HIHx8IE5QQ0dfSU5DTFVERUQ7XG5cbmlmIChQQVRDSCkge1xuICBwYXRjaGVkRXhlYyA9IGZ1bmN0aW9uIGV4ZWMoc3RyKSB7XG4gICAgdmFyIHJlID0gdGhpcztcbiAgICB2YXIgbGFzdEluZGV4LCByZUNvcHksIG1hdGNoLCBpO1xuXG4gICAgaWYgKE5QQ0dfSU5DTFVERUQpIHtcbiAgICAgIHJlQ29weSA9IG5ldyBSZWdFeHAoJ14nICsgcmUuc291cmNlICsgJyQoPyFcXFxccyknLCByZWdleHBGbGFncy5jYWxsKHJlKSk7XG4gICAgfVxuICAgIGlmIChVUERBVEVTX0xBU1RfSU5ERVhfV1JPTkcpIGxhc3RJbmRleCA9IHJlW0xBU1RfSU5ERVhdO1xuXG4gICAgbWF0Y2ggPSBuYXRpdmVFeGVjLmNhbGwocmUsIHN0cik7XG5cbiAgICBpZiAoVVBEQVRFU19MQVNUX0lOREVYX1dST05HICYmIG1hdGNoKSB7XG4gICAgICByZVtMQVNUX0lOREVYXSA9IHJlLmdsb2JhbCA/IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoIDogbGFzdEluZGV4O1xuICAgIH1cbiAgICBpZiAoTlBDR19JTkNMVURFRCAmJiBtYXRjaCAmJiBtYXRjaC5sZW5ndGggPiAxKSB7XG4gICAgICAvLyBGaXggYnJvd3NlcnMgd2hvc2UgYGV4ZWNgIG1ldGhvZHMgZG9uJ3QgY29uc2lzdGVudGx5IHJldHVybiBgdW5kZWZpbmVkYFxuICAgICAgLy8gZm9yIE5QQ0csIGxpa2UgSUU4LiBOT1RFOiBUaGlzIGRvZXNuJyB3b3JrIGZvciAvKC4/KT8vXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbG9vcC1mdW5jXG4gICAgICBuYXRpdmVSZXBsYWNlLmNhbGwobWF0Y2hbMF0sIHJlQ29weSwgZnVuY3Rpb24gKCkge1xuICAgICAgICBmb3IgKGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aCAtIDI7IGkrKykge1xuICAgICAgICAgIGlmIChhcmd1bWVudHNbaV0gPT09IHVuZGVmaW5lZCkgbWF0Y2hbaV0gPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBtYXRjaDtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBwYXRjaGVkRXhlYztcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///87\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar at = __webpack_require__(55)(true);\n\n // `AdvanceStringIndex` abstract operation\n// https://tc39.github.io/ecma262/#sec-advancestringindex\nmodule.exports = function (S, index, unicode) {\n return index + (unicode ? at(S, index).length : 1);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYWR2YW5jZS1zdHJpbmctaW5kZXguanM/MDM5MCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLFNBQVMsbUJBQU8sQ0FBQyxFQUFjOztBQUUvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6Ijg4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIGF0ID0gcmVxdWlyZSgnLi9fc3RyaW5nLWF0JykodHJ1ZSk7XG5cbiAvLyBgQWR2YW5jZVN0cmluZ0luZGV4YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFkdmFuY2VzdHJpbmdpbmRleFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoUywgaW5kZXgsIHVuaWNvZGUpIHtcbiAgcmV0dXJuIGluZGV4ICsgKHVuaWNvZGUgPyBhdChTLCBpbmRleCkubGVuZ3RoIDogMSk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///88\n")},function(module,exports,__webpack_require__){eval("var ctx = __webpack_require__(19);\nvar invoke = __webpack_require__(102);\nvar html = __webpack_require__(70);\nvar cel = __webpack_require__(66);\nvar global = __webpack_require__(2);\nvar process = global.process;\nvar setTask = global.setImmediate;\nvar clearTask = global.clearImmediate;\nvar MessageChannel = global.MessageChannel;\nvar Dispatch = global.Dispatch;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar defer, channel, port;\nvar run = function () {\n var id = +this;\n // eslint-disable-next-line no-prototype-builtins\n if (queue.hasOwnProperty(id)) {\n var fn = queue[id];\n delete queue[id];\n fn();\n }\n};\nvar listener = function (event) {\n run.call(event.data);\n};\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!setTask || !clearTask) {\n setTask = function setImmediate(fn) {\n var args = [];\n var i = 1;\n while (arguments.length > i) args.push(arguments[i++]);\n queue[++counter] = function () {\n // eslint-disable-next-line no-new-func\n invoke(typeof fn == 'function' ? fn : Function(fn), args);\n };\n defer(counter);\n return counter;\n };\n clearTask = function clearImmediate(id) {\n delete queue[id];\n };\n // Node.js 0.8-\n if (__webpack_require__(20)(process) == 'process') {\n defer = function (id) {\n process.nextTick(ctx(run, id, 1));\n };\n // Sphere (JS game engine) Dispatch API\n } else if (Dispatch && Dispatch.now) {\n defer = function (id) {\n Dispatch.now(ctx(run, id, 1));\n };\n // Browsers with MessageChannel, includes WebWorkers\n } else if (MessageChannel) {\n channel = new MessageChannel();\n port = channel.port2;\n channel.port1.onmessage = listener;\n defer = ctx(port.postMessage, port, 1);\n // Browsers with postMessage, skip WebWorkers\n // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts) {\n defer = function (id) {\n global.postMessage(id + '', '*');\n };\n global.addEventListener('message', listener, false);\n // IE8-\n } else if (ONREADYSTATECHANGE in cel('script')) {\n defer = function (id) {\n html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () {\n html.removeChild(this);\n run.call(id);\n };\n };\n // Rest old browsers\n } else {\n defer = function (id) {\n setTimeout(ctx(run, id, 1), 0);\n };\n }\n}\nmodule.exports = {\n set: setTask,\n clear: clearTask\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdGFzay5qcz8xOTkxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFVBQVUsbUJBQU8sQ0FBQyxFQUFRO0FBQzFCLGFBQWEsbUJBQU8sQ0FBQyxHQUFXO0FBQ2hDLFdBQVcsbUJBQU8sQ0FBQyxFQUFTO0FBQzVCLFVBQVUsbUJBQU8sQ0FBQyxFQUFlO0FBQ2pDLGFBQWEsbUJBQU8sQ0FBQyxDQUFXO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNLG1CQUFPLENBQUMsRUFBUTtBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiODkuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgaW52b2tlID0gcmVxdWlyZSgnLi9faW52b2tlJyk7XG52YXIgaHRtbCA9IHJlcXVpcmUoJy4vX2h0bWwnKTtcbnZhciBjZWwgPSByZXF1aXJlKCcuL19kb20tY3JlYXRlJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgcHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzO1xudmFyIHNldFRhc2sgPSBnbG9iYWwuc2V0SW1tZWRpYXRlO1xudmFyIGNsZWFyVGFzayA9IGdsb2JhbC5jbGVhckltbWVkaWF0ZTtcbnZhciBNZXNzYWdlQ2hhbm5lbCA9IGdsb2JhbC5NZXNzYWdlQ2hhbm5lbDtcbnZhciBEaXNwYXRjaCA9IGdsb2JhbC5EaXNwYXRjaDtcbnZhciBjb3VudGVyID0gMDtcbnZhciBxdWV1ZSA9IHt9O1xudmFyIE9OUkVBRFlTVEFURUNIQU5HRSA9ICdvbnJlYWR5c3RhdGVjaGFuZ2UnO1xudmFyIGRlZmVyLCBjaGFubmVsLCBwb3J0O1xudmFyIHJ1biA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGlkID0gK3RoaXM7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgaWYgKHF1ZXVlLmhhc093blByb3BlcnR5KGlkKSkge1xuICAgIHZhciBmbiA9IHF1ZXVlW2lkXTtcbiAgICBkZWxldGUgcXVldWVbaWRdO1xuICAgIGZuKCk7XG4gIH1cbn07XG52YXIgbGlzdGVuZXIgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgcnVuLmNhbGwoZXZlbnQuZGF0YSk7XG59O1xuLy8gTm9kZS5qcyAwLjkrICYgSUUxMCsgaGFzIHNldEltbWVkaWF0ZSwgb3RoZXJ3aXNlOlxuaWYgKCFzZXRUYXNrIHx8ICFjbGVhclRhc2spIHtcbiAgc2V0VGFzayA9IGZ1bmN0aW9uIHNldEltbWVkaWF0ZShmbikge1xuICAgIHZhciBhcmdzID0gW107XG4gICAgdmFyIGkgPSAxO1xuICAgIHdoaWxlIChhcmd1bWVudHMubGVuZ3RoID4gaSkgYXJncy5wdXNoKGFyZ3VtZW50c1tpKytdKTtcbiAgICBxdWV1ZVsrK2NvdW50ZXJdID0gZnVuY3Rpb24gKCkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jXG4gICAgICBpbnZva2UodHlwZW9mIGZuID09ICdmdW5jdGlvbicgPyBmbiA6IEZ1bmN0aW9uKGZuKSwgYXJncyk7XG4gICAgfTtcbiAgICBkZWZlcihjb3VudGVyKTtcbiAgICByZXR1cm4gY291bnRlcjtcbiAgfTtcbiAgY2xlYXJUYXNrID0gZnVuY3Rpb24gY2xlYXJJbW1lZGlhdGUoaWQpIHtcbiAgICBkZWxldGUgcXVldWVbaWRdO1xuICB9O1xuICAvLyBOb2RlLmpzIDAuOC1cbiAgaWYgKHJlcXVpcmUoJy4vX2NvZicpKHByb2Nlc3MpID09ICdwcm9jZXNzJykge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGN0eChydW4sIGlkLCAxKSk7XG4gICAgfTtcbiAgLy8gU3BoZXJlIChKUyBnYW1lIGVuZ2luZSkgRGlzcGF0Y2ggQVBJXG4gIH0gZWxzZSBpZiAoRGlzcGF0Y2ggJiYgRGlzcGF0Y2gubm93KSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIERpc3BhdGNoLm5vdyhjdHgocnVuLCBpZCwgMSkpO1xuICAgIH07XG4gIC8vIEJyb3dzZXJzIHdpdGggTWVzc2FnZUNoYW5uZWwsIGluY2x1ZGVzIFdlYldvcmtlcnNcbiAgfSBlbHNlIGlmIChNZXNzYWdlQ2hhbm5lbCkge1xuICAgIGNoYW5uZWwgPSBuZXcgTWVzc2FnZUNoYW5uZWwoKTtcbiAgICBwb3J0ID0gY2hhbm5lbC5wb3J0MjtcbiAgICBjaGFubmVsLnBvcnQxLm9ubWVzc2FnZSA9IGxpc3RlbmVyO1xuICAgIGRlZmVyID0gY3R4KHBvcnQucG9zdE1lc3NhZ2UsIHBvcnQsIDEpO1xuICAvLyBCcm93c2VycyB3aXRoIHBvc3RNZXNzYWdlLCBza2lwIFdlYldvcmtlcnNcbiAgLy8gSUU4IGhhcyBwb3N0TWVzc2FnZSwgYnV0IGl0J3Mgc3luYyAmIHR5cGVvZiBpdHMgcG9zdE1lc3NhZ2UgaXMgJ29iamVjdCdcbiAgfSBlbHNlIGlmIChnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lciAmJiB0eXBlb2YgcG9zdE1lc3NhZ2UgPT0gJ2Z1bmN0aW9uJyAmJiAhZ2xvYmFsLmltcG9ydFNjcmlwdHMpIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgZ2xvYmFsLnBvc3RNZXNzYWdlKGlkICsgJycsICcqJyk7XG4gICAgfTtcbiAgICBnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGxpc3RlbmVyLCBmYWxzZSk7XG4gIC8vIElFOC1cbiAgfSBlbHNlIGlmIChPTlJFQURZU1RBVEVDSEFOR0UgaW4gY2VsKCdzY3JpcHQnKSkge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBodG1sLmFwcGVuZENoaWxkKGNlbCgnc2NyaXB0JykpW09OUkVBRFlTVEFURUNIQU5HRV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGh0bWwucmVtb3ZlQ2hpbGQodGhpcyk7XG4gICAgICAgIHJ1bi5jYWxsKGlkKTtcbiAgICAgIH07XG4gICAgfTtcbiAgLy8gUmVzdCBvbGQgYnJvd3NlcnNcbiAgfSBlbHNlIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgc2V0VGltZW91dChjdHgocnVuLCBpZCwgMSksIDApO1xuICAgIH07XG4gIH1cbn1cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZXQ6IHNldFRhc2ssXG4gIGNsZWFyOiBjbGVhclRhc2tcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///89\n")},function(module,exports,__webpack_require__){eval("var global = __webpack_require__(2);\nvar macrotask = __webpack_require__(89).set;\nvar Observer = global.MutationObserver || global.WebKitMutationObserver;\nvar process = global.process;\nvar Promise = global.Promise;\nvar isNode = __webpack_require__(20)(process) == 'process';\n\nmodule.exports = function () {\n var head, last, notify;\n\n var flush = function () {\n var parent, fn;\n if (isNode && (parent = process.domain)) parent.exit();\n while (head) {\n fn = head.fn;\n head = head.next;\n try {\n fn();\n } catch (e) {\n if (head) notify();\n else last = undefined;\n throw e;\n }\n } last = undefined;\n if (parent) parent.enter();\n };\n\n // Node.js\n if (isNode) {\n notify = function () {\n process.nextTick(flush);\n };\n // browsers with MutationObserver, except iOS Safari - https://github.com/zloirock/core-js/issues/339\n } else if (Observer && !(global.navigator && global.navigator.standalone)) {\n var toggle = true;\n var node = document.createTextNode('');\n new Observer(flush).observe(node, { characterData: true }); // eslint-disable-line no-new\n notify = function () {\n node.data = toggle = !toggle;\n };\n // environments with maybe non-completely correct, but existent Promise\n } else if (Promise && Promise.resolve) {\n // Promise.resolve without an argument throws an error in LG WebOS 2\n var promise = Promise.resolve(undefined);\n notify = function () {\n promise.then(flush);\n };\n // for other environments - macrotask based on:\n // - setImmediate\n // - MessageChannel\n // - window.postMessag\n // - onreadystatechange\n // - setTimeout\n } else {\n notify = function () {\n // strange IE + webpack dev server bug - use .call(global)\n macrotask.call(global, flush);\n };\n }\n\n return function (fn) {\n var task = { fn: fn, next: undefined };\n if (last) last.next = task;\n if (!head) {\n head = task;\n notify();\n } last = task;\n };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWljcm90YXNrLmpzPzgwNzkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsYUFBYSxtQkFBTyxDQUFDLENBQVc7QUFDaEMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBUztBQUNqQztBQUNBO0FBQ0E7QUFDQSxhQUFhLG1CQUFPLENBQUMsRUFBUTs7QUFFN0I7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSx1Q0FBdUMsc0JBQXNCLEVBQUU7QUFDL0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EiLCJmaWxlIjoiOTAuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgbWFjcm90YXNrID0gcmVxdWlyZSgnLi9fdGFzaycpLnNldDtcbnZhciBPYnNlcnZlciA9IGdsb2JhbC5NdXRhdGlvbk9ic2VydmVyIHx8IGdsb2JhbC5XZWJLaXRNdXRhdGlvbk9ic2VydmVyO1xudmFyIHByb2Nlc3MgPSBnbG9iYWwucHJvY2VzcztcbnZhciBQcm9taXNlID0gZ2xvYmFsLlByb21pc2U7XG52YXIgaXNOb2RlID0gcmVxdWlyZSgnLi9fY29mJykocHJvY2VzcykgPT0gJ3Byb2Nlc3MnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGhlYWQsIGxhc3QsIG5vdGlmeTtcblxuICB2YXIgZmx1c2ggPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHBhcmVudCwgZm47XG4gICAgaWYgKGlzTm9kZSAmJiAocGFyZW50ID0gcHJvY2Vzcy5kb21haW4pKSBwYXJlbnQuZXhpdCgpO1xuICAgIHdoaWxlIChoZWFkKSB7XG4gICAgICBmbiA9IGhlYWQuZm47XG4gICAgICBoZWFkID0gaGVhZC5uZXh0O1xuICAgICAgdHJ5IHtcbiAgICAgICAgZm4oKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKGhlYWQpIG5vdGlmeSgpO1xuICAgICAgICBlbHNlIGxhc3QgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgfSBsYXN0ID0gdW5kZWZpbmVkO1xuICAgIGlmIChwYXJlbnQpIHBhcmVudC5lbnRlcigpO1xuICB9O1xuXG4gIC8vIE5vZGUuanNcbiAgaWYgKGlzTm9kZSkge1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soZmx1c2gpO1xuICAgIH07XG4gIC8vIGJyb3dzZXJzIHdpdGggTXV0YXRpb25PYnNlcnZlciwgZXhjZXB0IGlPUyBTYWZhcmkgLSBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvMzM5XG4gIH0gZWxzZSBpZiAoT2JzZXJ2ZXIgJiYgIShnbG9iYWwubmF2aWdhdG9yICYmIGdsb2JhbC5uYXZpZ2F0b3Iuc3RhbmRhbG9uZSkpIHtcbiAgICB2YXIgdG9nZ2xlID0gdHJ1ZTtcbiAgICB2YXIgbm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcnKTtcbiAgICBuZXcgT2JzZXJ2ZXIoZmx1c2gpLm9ic2VydmUobm9kZSwgeyBjaGFyYWN0ZXJEYXRhOiB0cnVlIH0pOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIG5vZGUuZGF0YSA9IHRvZ2dsZSA9ICF0b2dnbGU7XG4gICAgfTtcbiAgLy8gZW52aXJvbm1lbnRzIHdpdGggbWF5YmUgbm9uLWNvbXBsZXRlbHkgY29ycmVjdCwgYnV0IGV4aXN0ZW50IFByb21pc2VcbiAgfSBlbHNlIGlmIChQcm9taXNlICYmIFByb21pc2UucmVzb2x2ZSkge1xuICAgIC8vIFByb21pc2UucmVzb2x2ZSB3aXRob3V0IGFuIGFyZ3VtZW50IHRocm93cyBhbiBlcnJvciBpbiBMRyBXZWJPUyAyXG4gICAgdmFyIHByb21pc2UgPSBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBwcm9taXNlLnRoZW4oZmx1c2gpO1xuICAgIH07XG4gIC8vIGZvciBvdGhlciBlbnZpcm9ubWVudHMgLSBtYWNyb3Rhc2sgYmFzZWQgb246XG4gIC8vIC0gc2V0SW1tZWRpYXRlXG4gIC8vIC0gTWVzc2FnZUNoYW5uZWxcbiAgLy8gLSB3aW5kb3cucG9zdE1lc3NhZ1xuICAvLyAtIG9ucmVhZHlzdGF0ZWNoYW5nZVxuICAvLyAtIHNldFRpbWVvdXRcbiAgfSBlbHNlIHtcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBzdHJhbmdlIElFICsgd2VicGFjayBkZXYgc2VydmVyIGJ1ZyAtIHVzZSAuY2FsbChnbG9iYWwpXG4gICAgICBtYWNyb3Rhc2suY2FsbChnbG9iYWwsIGZsdXNoKTtcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChmbikge1xuICAgIHZhciB0YXNrID0geyBmbjogZm4sIG5leHQ6IHVuZGVmaW5lZCB9O1xuICAgIGlmIChsYXN0KSBsYXN0Lm5leHQgPSB0YXNrO1xuICAgIGlmICghaGVhZCkge1xuICAgICAgaGVhZCA9IHRhc2s7XG4gICAgICBub3RpZnkoKTtcbiAgICB9IGxhc3QgPSB0YXNrO1xuICB9O1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///90\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// 25.4.1.5 NewPromiseCapability(C)\nvar aFunction = __webpack_require__(10);\n\nfunction PromiseCapability(C) {\n var resolve, reject;\n this.promise = new C(function ($$resolve, $$reject) {\n if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n resolve = $$resolve;\n reject = $$reject;\n });\n this.resolve = aFunction(resolve);\n this.reject = aFunction(reject);\n}\n\nmodule.exports.f = function (C) {\n return new PromiseCapability(C);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbmV3LXByb21pc2UtY2FwYWJpbGl0eS5qcz9hNWI4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlOztBQUV2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSIsImZpbGUiOiI5MS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIDI1LjQuMS41IE5ld1Byb21pc2VDYXBhYmlsaXR5KEMpXG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xuXG5mdW5jdGlvbiBQcm9taXNlQ2FwYWJpbGl0eShDKSB7XG4gIHZhciByZXNvbHZlLCByZWplY3Q7XG4gIHRoaXMucHJvbWlzZSA9IG5ldyBDKGZ1bmN0aW9uICgkJHJlc29sdmUsICQkcmVqZWN0KSB7XG4gICAgaWYgKHJlc29sdmUgIT09IHVuZGVmaW5lZCB8fCByZWplY3QgIT09IHVuZGVmaW5lZCkgdGhyb3cgVHlwZUVycm9yKCdCYWQgUHJvbWlzZSBjb25zdHJ1Y3RvcicpO1xuICAgIHJlc29sdmUgPSAkJHJlc29sdmU7XG4gICAgcmVqZWN0ID0gJCRyZWplY3Q7XG4gIH0pO1xuICB0aGlzLnJlc29sdmUgPSBhRnVuY3Rpb24ocmVzb2x2ZSk7XG4gIHRoaXMucmVqZWN0ID0gYUZ1bmN0aW9uKHJlamVjdCk7XG59XG5cbm1vZHVsZS5leHBvcnRzLmYgPSBmdW5jdGlvbiAoQykge1xuICByZXR1cm4gbmV3IFByb21pc2VDYXBhYmlsaXR5KEMpO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///91\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar global = __webpack_require__(2);\nvar DESCRIPTORS = __webpack_require__(7);\nvar LIBRARY = __webpack_require__(29);\nvar $typed = __webpack_require__(62);\nvar hide = __webpack_require__(11);\nvar redefineAll = __webpack_require__(41);\nvar fails = __webpack_require__(3);\nvar anInstance = __webpack_require__(39);\nvar toInteger = __webpack_require__(21);\nvar toLength = __webpack_require__(6);\nvar toIndex = __webpack_require__(122);\nvar gOPN = __webpack_require__(37).f;\nvar dP = __webpack_require__(8).f;\nvar arrayFill = __webpack_require__(85);\nvar setToStringTag = __webpack_require__(43);\nvar ARRAY_BUFFER = 'ArrayBuffer';\nvar DATA_VIEW = 'DataView';\nvar PROTOTYPE = 'prototype';\nvar WRONG_LENGTH = 'Wrong length!';\nvar WRONG_INDEX = 'Wrong index!';\nvar $ArrayBuffer = global[ARRAY_BUFFER];\nvar $DataView = global[DATA_VIEW];\nvar Math = global.Math;\nvar RangeError = global.RangeError;\n// eslint-disable-next-line no-shadow-restricted-names\nvar Infinity = global.Infinity;\nvar BaseBuffer = $ArrayBuffer;\nvar abs = Math.abs;\nvar pow = Math.pow;\nvar floor = Math.floor;\nvar log = Math.log;\nvar LN2 = Math.LN2;\nvar BUFFER = 'buffer';\nvar BYTE_LENGTH = 'byteLength';\nvar BYTE_OFFSET = 'byteOffset';\nvar $BUFFER = DESCRIPTORS ? '_b' : BUFFER;\nvar $LENGTH = DESCRIPTORS ? '_l' : BYTE_LENGTH;\nvar $OFFSET = DESCRIPTORS ? '_o' : BYTE_OFFSET;\n\n// IEEE754 conversions based on https://github.com/feross/ieee754\nfunction packIEEE754(value, mLen, nBytes) {\n var buffer = new Array(nBytes);\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var rt = mLen === 23 ? pow(2, -24) - pow(2, -77) : 0;\n var i = 0;\n var s = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0;\n var e, m, c;\n value = abs(value);\n // eslint-disable-next-line no-self-compare\n if (value != value || value === Infinity) {\n // eslint-disable-next-line no-self-compare\n m = value != value ? 1 : 0;\n e = eMax;\n } else {\n e = floor(log(value) / LN2);\n if (value * (c = pow(2, -e)) < 1) {\n e--;\n c *= 2;\n }\n if (e + eBias >= 1) {\n value += rt / c;\n } else {\n value += rt * pow(2, 1 - eBias);\n }\n if (value * c >= 2) {\n e++;\n c /= 2;\n }\n if (e + eBias >= eMax) {\n m = 0;\n e = eMax;\n } else if (e + eBias >= 1) {\n m = (value * c - 1) * pow(2, mLen);\n e = e + eBias;\n } else {\n m = value * pow(2, eBias - 1) * pow(2, mLen);\n e = 0;\n }\n }\n for (; mLen >= 8; buffer[i++] = m & 255, m /= 256, mLen -= 8);\n e = e << mLen | m;\n eLen += mLen;\n for (; eLen > 0; buffer[i++] = e & 255, e /= 256, eLen -= 8);\n buffer[--i] |= s * 128;\n return buffer;\n}\nfunction unpackIEEE754(buffer, mLen, nBytes) {\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var nBits = eLen - 7;\n var i = nBytes - 1;\n var s = buffer[i--];\n var e = s & 127;\n var m;\n s >>= 7;\n for (; nBits > 0; e = e * 256 + buffer[i], i--, nBits -= 8);\n m = e & (1 << -nBits) - 1;\n e >>= -nBits;\n nBits += mLen;\n for (; nBits > 0; m = m * 256 + buffer[i], i--, nBits -= 8);\n if (e === 0) {\n e = 1 - eBias;\n } else if (e === eMax) {\n return m ? NaN : s ? -Infinity : Infinity;\n } else {\n m = m + pow(2, mLen);\n e = e - eBias;\n } return (s ? -1 : 1) * m * pow(2, e - mLen);\n}\n\nfunction unpackI32(bytes) {\n return bytes[3] << 24 | bytes[2] << 16 | bytes[1] << 8 | bytes[0];\n}\nfunction packI8(it) {\n return [it & 0xff];\n}\nfunction packI16(it) {\n return [it & 0xff, it >> 8 & 0xff];\n}\nfunction packI32(it) {\n return [it & 0xff, it >> 8 & 0xff, it >> 16 & 0xff, it >> 24 & 0xff];\n}\nfunction packF64(it) {\n return packIEEE754(it, 52, 8);\n}\nfunction packF32(it) {\n return packIEEE754(it, 23, 4);\n}\n\nfunction addGetter(C, key, internal) {\n dP(C[PROTOTYPE], key, { get: function () { return this[internal]; } });\n}\n\nfunction get(view, bytes, index, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = store.slice(start, start + bytes);\n return isLittleEndian ? pack : pack.reverse();\n}\nfunction set(view, bytes, index, conversion, value, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = conversion(+value);\n for (var i = 0; i < bytes; i++) store[start + i] = pack[isLittleEndian ? i : bytes - i - 1];\n}\n\nif (!$typed.ABV) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer, ARRAY_BUFFER);\n var byteLength = toIndex(length);\n this._b = arrayFill.call(new Array(byteLength), 0);\n this[$LENGTH] = byteLength;\n };\n\n $DataView = function DataView(buffer, byteOffset, byteLength) {\n anInstance(this, $DataView, DATA_VIEW);\n anInstance(buffer, $ArrayBuffer, DATA_VIEW);\n var bufferLength = buffer[$LENGTH];\n var offset = toInteger(byteOffset);\n if (offset < 0 || offset > bufferLength) throw RangeError('Wrong offset!');\n byteLength = byteLength === undefined ? bufferLength - offset : toLength(byteLength);\n if (offset + byteLength > bufferLength) throw RangeError(WRONG_LENGTH);\n this[$BUFFER] = buffer;\n this[$OFFSET] = offset;\n this[$LENGTH] = byteLength;\n };\n\n if (DESCRIPTORS) {\n addGetter($ArrayBuffer, BYTE_LENGTH, '_l');\n addGetter($DataView, BUFFER, '_b');\n addGetter($DataView, BYTE_LENGTH, '_l');\n addGetter($DataView, BYTE_OFFSET, '_o');\n }\n\n redefineAll($DataView[PROTOTYPE], {\n getInt8: function getInt8(byteOffset) {\n return get(this, 1, byteOffset)[0] << 24 >> 24;\n },\n getUint8: function getUint8(byteOffset) {\n return get(this, 1, byteOffset)[0];\n },\n getInt16: function getInt16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return (bytes[1] << 8 | bytes[0]) << 16 >> 16;\n },\n getUint16: function getUint16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return bytes[1] << 8 | bytes[0];\n },\n getInt32: function getInt32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1]));\n },\n getUint32: function getUint32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1])) >>> 0;\n },\n getFloat32: function getFloat32(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 4, byteOffset, arguments[1]), 23, 4);\n },\n getFloat64: function getFloat64(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 8, byteOffset, arguments[1]), 52, 8);\n },\n setInt8: function setInt8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setUint8: function setUint8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setInt16: function setInt16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setUint16: function setUint16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setInt32: function setInt32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setUint32: function setUint32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setFloat32: function setFloat32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packF32, value, arguments[2]);\n },\n setFloat64: function setFloat64(byteOffset, value /* , littleEndian */) {\n set(this, 8, byteOffset, packF64, value, arguments[2]);\n }\n });\n} else {\n if (!fails(function () {\n $ArrayBuffer(1);\n }) || !fails(function () {\n new $ArrayBuffer(-1); // eslint-disable-line no-new\n }) || fails(function () {\n new $ArrayBuffer(); // eslint-disable-line no-new\n new $ArrayBuffer(1.5); // eslint-disable-line no-new\n new $ArrayBuffer(NaN); // eslint-disable-line no-new\n return $ArrayBuffer.name != ARRAY_BUFFER;\n })) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer);\n return new BaseBuffer(toIndex(length));\n };\n var ArrayBufferProto = $ArrayBuffer[PROTOTYPE] = BaseBuffer[PROTOTYPE];\n for (var keys = gOPN(BaseBuffer), j = 0, key; keys.length > j;) {\n if (!((key = keys[j++]) in $ArrayBuffer)) hide($ArrayBuffer, key, BaseBuffer[key]);\n }\n if (!LIBRARY) ArrayBufferProto.constructor = $ArrayBuffer;\n }\n // iOS Safari 7.x bug\n var view = new $DataView(new $ArrayBuffer(2));\n var $setInt8 = $DataView[PROTOTYPE].setInt8;\n view.setInt8(0, 2147483648);\n view.setInt8(1, 2147483649);\n if (view.getInt8(0) || !view.getInt8(1)) redefineAll($DataView[PROTOTYPE], {\n setInt8: function setInt8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n },\n setUint8: function setUint8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n }\n }, true);\n}\nsetToStringTag($ArrayBuffer, ARRAY_BUFFER);\nsetToStringTag($DataView, DATA_VIEW);\nhide($DataView[PROTOTYPE], $typed.VIEW, true);\nexports[ARRAY_BUFFER] = $ArrayBuffer;\nexports[DATA_VIEW] = $DataView;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdHlwZWQtYnVmZmVyLmpzP2VkMGIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixhQUFhLG1CQUFPLENBQUMsQ0FBVztBQUNoQyxrQkFBa0IsbUJBQU8sQ0FBQyxDQUFnQjtBQUMxQyxjQUFjLG1CQUFPLENBQUMsRUFBWTtBQUNsQyxhQUFhLG1CQUFPLENBQUMsRUFBVTtBQUMvQixXQUFXLG1CQUFPLENBQUMsRUFBUztBQUM1QixrQkFBa0IsbUJBQU8sQ0FBQyxFQUFpQjtBQUMzQyxZQUFZLG1CQUFPLENBQUMsQ0FBVTtBQUM5QixpQkFBaUIsbUJBQU8sQ0FBQyxFQUFnQjtBQUN6QyxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGNBQWMsbUJBQU8sQ0FBQyxHQUFhO0FBQ25DLFdBQVcsbUJBQU8sQ0FBQyxFQUFnQjtBQUNuQyxTQUFTLG1CQUFPLENBQUMsQ0FBYztBQUMvQixnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDLHFCQUFxQixtQkFBTyxDQUFDLEVBQXNCO0FBQ25EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLFdBQVc7QUFDbkI7QUFDQTtBQUNBLFFBQVEsVUFBVTtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsV0FBVztBQUNuQjtBQUNBO0FBQ0E7QUFDQSxRQUFRLFdBQVc7QUFDbkI7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHlCQUF5QixtQkFBbUIsdUJBQXVCLEVBQUUsRUFBRTtBQUN2RTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixXQUFXO0FBQzVCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBO0FBQ0EsR0FBRztBQUNILHlCQUF5QjtBQUN6QixHQUFHO0FBQ0gsdUJBQXVCO0FBQ3ZCLDBCQUEwQjtBQUMxQiwwQkFBMEI7QUFDMUI7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlEQUFpRCxpQkFBaUI7QUFDbEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiOTIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpO1xudmFyIExJQlJBUlkgPSByZXF1aXJlKCcuL19saWJyYXJ5Jyk7XG52YXIgJHR5cGVkID0gcmVxdWlyZSgnLi9fdHlwZWQnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIHJlZGVmaW5lQWxsID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUtYWxsJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuL19hbi1pbnN0YW5jZScpO1xudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIHRvSW5kZXggPSByZXF1aXJlKCcuL190by1pbmRleCcpO1xudmFyIGdPUE4gPSByZXF1aXJlKCcuL19vYmplY3QtZ29wbicpLmY7XG52YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mO1xudmFyIGFycmF5RmlsbCA9IHJlcXVpcmUoJy4vX2FycmF5LWZpbGwnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgQVJSQVlfQlVGRkVSID0gJ0FycmF5QnVmZmVyJztcbnZhciBEQVRBX1ZJRVcgPSAnRGF0YVZpZXcnO1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xudmFyIFdST05HX0xFTkdUSCA9ICdXcm9uZyBsZW5ndGghJztcbnZhciBXUk9OR19JTkRFWCA9ICdXcm9uZyBpbmRleCEnO1xudmFyICRBcnJheUJ1ZmZlciA9IGdsb2JhbFtBUlJBWV9CVUZGRVJdO1xudmFyICREYXRhVmlldyA9IGdsb2JhbFtEQVRBX1ZJRVddO1xudmFyIE1hdGggPSBnbG9iYWwuTWF0aDtcbnZhciBSYW5nZUVycm9yID0gZ2xvYmFsLlJhbmdlRXJyb3I7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2hhZG93LXJlc3RyaWN0ZWQtbmFtZXNcbnZhciBJbmZpbml0eSA9IGdsb2JhbC5JbmZpbml0eTtcbnZhciBCYXNlQnVmZmVyID0gJEFycmF5QnVmZmVyO1xudmFyIGFicyA9IE1hdGguYWJzO1xudmFyIHBvdyA9IE1hdGgucG93O1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcbnZhciBsb2cgPSBNYXRoLmxvZztcbnZhciBMTjIgPSBNYXRoLkxOMjtcbnZhciBCVUZGRVIgPSAnYnVmZmVyJztcbnZhciBCWVRFX0xFTkdUSCA9ICdieXRlTGVuZ3RoJztcbnZhciBCWVRFX09GRlNFVCA9ICdieXRlT2Zmc2V0JztcbnZhciAkQlVGRkVSID0gREVTQ1JJUFRPUlMgPyAnX2InIDogQlVGRkVSO1xudmFyICRMRU5HVEggPSBERVNDUklQVE9SUyA/ICdfbCcgOiBCWVRFX0xFTkdUSDtcbnZhciAkT0ZGU0VUID0gREVTQ1JJUFRPUlMgPyAnX28nIDogQllURV9PRkZTRVQ7XG5cbi8vIElFRUU3NTQgY29udmVyc2lvbnMgYmFzZWQgb24gaHR0cHM6Ly9naXRodWIuY29tL2Zlcm9zcy9pZWVlNzU0XG5mdW5jdGlvbiBwYWNrSUVFRTc1NCh2YWx1ZSwgbUxlbiwgbkJ5dGVzKSB7XG4gIHZhciBidWZmZXIgPSBuZXcgQXJyYXkobkJ5dGVzKTtcbiAgdmFyIGVMZW4gPSBuQnl0ZXMgKiA4IC0gbUxlbiAtIDE7XG4gIHZhciBlTWF4ID0gKDEgPDwgZUxlbikgLSAxO1xuICB2YXIgZUJpYXMgPSBlTWF4ID4+IDE7XG4gIHZhciBydCA9IG1MZW4gPT09IDIzID8gcG93KDIsIC0yNCkgLSBwb3coMiwgLTc3KSA6IDA7XG4gIHZhciBpID0gMDtcbiAgdmFyIHMgPSB2YWx1ZSA8IDAgfHwgdmFsdWUgPT09IDAgJiYgMSAvIHZhbHVlIDwgMCA/IDEgOiAwO1xuICB2YXIgZSwgbSwgYztcbiAgdmFsdWUgPSBhYnModmFsdWUpO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gIGlmICh2YWx1ZSAhPSB2YWx1ZSB8fCB2YWx1ZSA9PT0gSW5maW5pdHkpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgbSA9IHZhbHVlICE9IHZhbHVlID8gMSA6IDA7XG4gICAgZSA9IGVNYXg7XG4gIH0gZWxzZSB7XG4gICAgZSA9IGZsb29yKGxvZyh2YWx1ZSkgLyBMTjIpO1xuICAgIGlmICh2YWx1ZSAqIChjID0gcG93KDIsIC1lKSkgPCAxKSB7XG4gICAgICBlLS07XG4gICAgICBjICo9IDI7XG4gICAgfVxuICAgIGlmIChlICsgZUJpYXMgPj0gMSkge1xuICAgICAgdmFsdWUgKz0gcnQgLyBjO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YWx1ZSArPSBydCAqIHBvdygyLCAxIC0gZUJpYXMpO1xuICAgIH1cbiAgICBpZiAodmFsdWUgKiBjID49IDIpIHtcbiAgICAgIGUrKztcbiAgICAgIGMgLz0gMjtcbiAgICB9XG4gICAgaWYgKGUgKyBlQmlhcyA+PSBlTWF4KSB7XG4gICAgICBtID0gMDtcbiAgICAgIGUgPSBlTWF4O1xuICAgIH0gZWxzZSBpZiAoZSArIGVCaWFzID49IDEpIHtcbiAgICAgIG0gPSAodmFsdWUgKiBjIC0gMSkgKiBwb3coMiwgbUxlbik7XG4gICAgICBlID0gZSArIGVCaWFzO1xuICAgIH0gZWxzZSB7XG4gICAgICBtID0gdmFsdWUgKiBwb3coMiwgZUJpYXMgLSAxKSAqIHBvdygyLCBtTGVuKTtcbiAgICAgIGUgPSAwO1xuICAgIH1cbiAgfVxuICBmb3IgKDsgbUxlbiA+PSA4OyBidWZmZXJbaSsrXSA9IG0gJiAyNTUsIG0gLz0gMjU2LCBtTGVuIC09IDgpO1xuICBlID0gZSA8PCBtTGVuIHwgbTtcbiAgZUxlbiArPSBtTGVuO1xuICBmb3IgKDsgZUxlbiA+IDA7IGJ1ZmZlcltpKytdID0gZSAmIDI1NSwgZSAvPSAyNTYsIGVMZW4gLT0gOCk7XG4gIGJ1ZmZlclstLWldIHw9IHMgKiAxMjg7XG4gIHJldHVybiBidWZmZXI7XG59XG5mdW5jdGlvbiB1bnBhY2tJRUVFNzU0KGJ1ZmZlciwgbUxlbiwgbkJ5dGVzKSB7XG4gIHZhciBlTGVuID0gbkJ5dGVzICogOCAtIG1MZW4gLSAxO1xuICB2YXIgZU1heCA9ICgxIDw8IGVMZW4pIC0gMTtcbiAgdmFyIGVCaWFzID0gZU1heCA+PiAxO1xuICB2YXIgbkJpdHMgPSBlTGVuIC0gNztcbiAgdmFyIGkgPSBuQnl0ZXMgLSAxO1xuICB2YXIgcyA9IGJ1ZmZlcltpLS1dO1xuICB2YXIgZSA9IHMgJiAxMjc7XG4gIHZhciBtO1xuICBzID4+PSA3O1xuICBmb3IgKDsgbkJpdHMgPiAwOyBlID0gZSAqIDI1NiArIGJ1ZmZlcltpXSwgaS0tLCBuQml0cyAtPSA4KTtcbiAgbSA9IGUgJiAoMSA8PCAtbkJpdHMpIC0gMTtcbiAgZSA+Pj0gLW5CaXRzO1xuICBuQml0cyArPSBtTGVuO1xuICBmb3IgKDsgbkJpdHMgPiAwOyBtID0gbSAqIDI1NiArIGJ1ZmZlcltpXSwgaS0tLCBuQml0cyAtPSA4KTtcbiAgaWYgKGUgPT09IDApIHtcbiAgICBlID0gMSAtIGVCaWFzO1xuICB9IGVsc2UgaWYgKGUgPT09IGVNYXgpIHtcbiAgICByZXR1cm4gbSA/IE5hTiA6IHMgPyAtSW5maW5pdHkgOiBJbmZpbml0eTtcbiAgfSBlbHNlIHtcbiAgICBtID0gbSArIHBvdygyLCBtTGVuKTtcbiAgICBlID0gZSAtIGVCaWFzO1xuICB9IHJldHVybiAocyA/IC0xIDogMSkgKiBtICogcG93KDIsIGUgLSBtTGVuKTtcbn1cblxuZnVuY3Rpb24gdW5wYWNrSTMyKGJ5dGVzKSB7XG4gIHJldHVybiBieXRlc1szXSA8PCAyNCB8IGJ5dGVzWzJdIDw8IDE2IHwgYnl0ZXNbMV0gPDwgOCB8IGJ5dGVzWzBdO1xufVxuZnVuY3Rpb24gcGFja0k4KGl0KSB7XG4gIHJldHVybiBbaXQgJiAweGZmXTtcbn1cbmZ1bmN0aW9uIHBhY2tJMTYoaXQpIHtcbiAgcmV0dXJuIFtpdCAmIDB4ZmYsIGl0ID4+IDggJiAweGZmXTtcbn1cbmZ1bmN0aW9uIHBhY2tJMzIoaXQpIHtcbiAgcmV0dXJuIFtpdCAmIDB4ZmYsIGl0ID4+IDggJiAweGZmLCBpdCA+PiAxNiAmIDB4ZmYsIGl0ID4+IDI0ICYgMHhmZl07XG59XG5mdW5jdGlvbiBwYWNrRjY0KGl0KSB7XG4gIHJldHVybiBwYWNrSUVFRTc1NChpdCwgNTIsIDgpO1xufVxuZnVuY3Rpb24gcGFja0YzMihpdCkge1xuICByZXR1cm4gcGFja0lFRUU3NTQoaXQsIDIzLCA0KTtcbn1cblxuZnVuY3Rpb24gYWRkR2V0dGVyKEMsIGtleSwgaW50ZXJuYWwpIHtcbiAgZFAoQ1tQUk9UT1RZUEVdLCBrZXksIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzW2ludGVybmFsXTsgfSB9KTtcbn1cblxuZnVuY3Rpb24gZ2V0KHZpZXcsIGJ5dGVzLCBpbmRleCwgaXNMaXR0bGVFbmRpYW4pIHtcbiAgdmFyIG51bUluZGV4ID0gK2luZGV4O1xuICB2YXIgaW50SW5kZXggPSB0b0luZGV4KG51bUluZGV4KTtcbiAgaWYgKGludEluZGV4ICsgYnl0ZXMgPiB2aWV3WyRMRU5HVEhdKSB0aHJvdyBSYW5nZUVycm9yKFdST05HX0lOREVYKTtcbiAgdmFyIHN0b3JlID0gdmlld1skQlVGRkVSXS5fYjtcbiAgdmFyIHN0YXJ0ID0gaW50SW5kZXggKyB2aWV3WyRPRkZTRVRdO1xuICB2YXIgcGFjayA9IHN0b3JlLnNsaWNlKHN0YXJ0LCBzdGFydCArIGJ5dGVzKTtcbiAgcmV0dXJuIGlzTGl0dGxlRW5kaWFuID8gcGFjayA6IHBhY2sucmV2ZXJzZSgpO1xufVxuZnVuY3Rpb24gc2V0KHZpZXcsIGJ5dGVzLCBpbmRleCwgY29udmVyc2lvbiwgdmFsdWUsIGlzTGl0dGxlRW5kaWFuKSB7XG4gIHZhciBudW1JbmRleCA9ICtpbmRleDtcbiAgdmFyIGludEluZGV4ID0gdG9JbmRleChudW1JbmRleCk7XG4gIGlmIChpbnRJbmRleCArIGJ5dGVzID4gdmlld1skTEVOR1RIXSkgdGhyb3cgUmFuZ2VFcnJvcihXUk9OR19JTkRFWCk7XG4gIHZhciBzdG9yZSA9IHZpZXdbJEJVRkZFUl0uX2I7XG4gIHZhciBzdGFydCA9IGludEluZGV4ICsgdmlld1skT0ZGU0VUXTtcbiAgdmFyIHBhY2sgPSBjb252ZXJzaW9uKCt2YWx1ZSk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYnl0ZXM7IGkrKykgc3RvcmVbc3RhcnQgKyBpXSA9IHBhY2tbaXNMaXR0bGVFbmRpYW4gPyBpIDogYnl0ZXMgLSBpIC0gMV07XG59XG5cbmlmICghJHR5cGVkLkFCVikge1xuICAkQXJyYXlCdWZmZXIgPSBmdW5jdGlvbiBBcnJheUJ1ZmZlcihsZW5ndGgpIHtcbiAgICBhbkluc3RhbmNlKHRoaXMsICRBcnJheUJ1ZmZlciwgQVJSQVlfQlVGRkVSKTtcbiAgICB2YXIgYnl0ZUxlbmd0aCA9IHRvSW5kZXgobGVuZ3RoKTtcbiAgICB0aGlzLl9iID0gYXJyYXlGaWxsLmNhbGwobmV3IEFycmF5KGJ5dGVMZW5ndGgpLCAwKTtcbiAgICB0aGlzWyRMRU5HVEhdID0gYnl0ZUxlbmd0aDtcbiAgfTtcblxuICAkRGF0YVZpZXcgPSBmdW5jdGlvbiBEYXRhVmlldyhidWZmZXIsIGJ5dGVPZmZzZXQsIGJ5dGVMZW5ndGgpIHtcbiAgICBhbkluc3RhbmNlKHRoaXMsICREYXRhVmlldywgREFUQV9WSUVXKTtcbiAgICBhbkluc3RhbmNlKGJ1ZmZlciwgJEFycmF5QnVmZmVyLCBEQVRBX1ZJRVcpO1xuICAgIHZhciBidWZmZXJMZW5ndGggPSBidWZmZXJbJExFTkdUSF07XG4gICAgdmFyIG9mZnNldCA9IHRvSW50ZWdlcihieXRlT2Zmc2V0KTtcbiAgICBpZiAob2Zmc2V0IDwgMCB8fCBvZmZzZXQgPiBidWZmZXJMZW5ndGgpIHRocm93IFJhbmdlRXJyb3IoJ1dyb25nIG9mZnNldCEnKTtcbiAgICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCA9PT0gdW5kZWZpbmVkID8gYnVmZmVyTGVuZ3RoIC0gb2Zmc2V0IDogdG9MZW5ndGgoYnl0ZUxlbmd0aCk7XG4gICAgaWYgKG9mZnNldCArIGJ5dGVMZW5ndGggPiBidWZmZXJMZW5ndGgpIHRocm93IFJhbmdlRXJyb3IoV1JPTkdfTEVOR1RIKTtcbiAgICB0aGlzWyRCVUZGRVJdID0gYnVmZmVyO1xuICAgIHRoaXNbJE9GRlNFVF0gPSBvZmZzZXQ7XG4gICAgdGhpc1skTEVOR1RIXSA9IGJ5dGVMZW5ndGg7XG4gIH07XG5cbiAgaWYgKERFU0NSSVBUT1JTKSB7XG4gICAgYWRkR2V0dGVyKCRBcnJheUJ1ZmZlciwgQllURV9MRU5HVEgsICdfbCcpO1xuICAgIGFkZEdldHRlcigkRGF0YVZpZXcsIEJVRkZFUiwgJ19iJyk7XG4gICAgYWRkR2V0dGVyKCREYXRhVmlldywgQllURV9MRU5HVEgsICdfbCcpO1xuICAgIGFkZEdldHRlcigkRGF0YVZpZXcsIEJZVEVfT0ZGU0VULCAnX28nKTtcbiAgfVxuXG4gIHJlZGVmaW5lQWxsKCREYXRhVmlld1tQUk9UT1RZUEVdLCB7XG4gICAgZ2V0SW50ODogZnVuY3Rpb24gZ2V0SW50OChieXRlT2Zmc2V0KSB7XG4gICAgICByZXR1cm4gZ2V0KHRoaXMsIDEsIGJ5dGVPZmZzZXQpWzBdIDw8IDI0ID4+IDI0O1xuICAgIH0sXG4gICAgZ2V0VWludDg6IGZ1bmN0aW9uIGdldFVpbnQ4KGJ5dGVPZmZzZXQpIHtcbiAgICAgIHJldHVybiBnZXQodGhpcywgMSwgYnl0ZU9mZnNldClbMF07XG4gICAgfSxcbiAgICBnZXRJbnQxNjogZnVuY3Rpb24gZ2V0SW50MTYoYnl0ZU9mZnNldCAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgdmFyIGJ5dGVzID0gZ2V0KHRoaXMsIDIsIGJ5dGVPZmZzZXQsIGFyZ3VtZW50c1sxXSk7XG4gICAgICByZXR1cm4gKGJ5dGVzWzFdIDw8IDggfCBieXRlc1swXSkgPDwgMTYgPj4gMTY7XG4gICAgfSxcbiAgICBnZXRVaW50MTY6IGZ1bmN0aW9uIGdldFVpbnQxNihieXRlT2Zmc2V0IC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICB2YXIgYnl0ZXMgPSBnZXQodGhpcywgMiwgYnl0ZU9mZnNldCwgYXJndW1lbnRzWzFdKTtcbiAgICAgIHJldHVybiBieXRlc1sxXSA8PCA4IHwgYnl0ZXNbMF07XG4gICAgfSxcbiAgICBnZXRJbnQzMjogZnVuY3Rpb24gZ2V0SW50MzIoYnl0ZU9mZnNldCAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgcmV0dXJuIHVucGFja0kzMihnZXQodGhpcywgNCwgYnl0ZU9mZnNldCwgYXJndW1lbnRzWzFdKSk7XG4gICAgfSxcbiAgICBnZXRVaW50MzI6IGZ1bmN0aW9uIGdldFVpbnQzMihieXRlT2Zmc2V0IC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICByZXR1cm4gdW5wYWNrSTMyKGdldCh0aGlzLCA0LCBieXRlT2Zmc2V0LCBhcmd1bWVudHNbMV0pKSA+Pj4gMDtcbiAgICB9LFxuICAgIGdldEZsb2F0MzI6IGZ1bmN0aW9uIGdldEZsb2F0MzIoYnl0ZU9mZnNldCAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgcmV0dXJuIHVucGFja0lFRUU3NTQoZ2V0KHRoaXMsIDQsIGJ5dGVPZmZzZXQsIGFyZ3VtZW50c1sxXSksIDIzLCA0KTtcbiAgICB9LFxuICAgIGdldEZsb2F0NjQ6IGZ1bmN0aW9uIGdldEZsb2F0NjQoYnl0ZU9mZnNldCAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgcmV0dXJuIHVucGFja0lFRUU3NTQoZ2V0KHRoaXMsIDgsIGJ5dGVPZmZzZXQsIGFyZ3VtZW50c1sxXSksIDUyLCA4KTtcbiAgICB9LFxuICAgIHNldEludDg6IGZ1bmN0aW9uIHNldEludDgoYnl0ZU9mZnNldCwgdmFsdWUpIHtcbiAgICAgIHNldCh0aGlzLCAxLCBieXRlT2Zmc2V0LCBwYWNrSTgsIHZhbHVlKTtcbiAgICB9LFxuICAgIHNldFVpbnQ4OiBmdW5jdGlvbiBzZXRVaW50OChieXRlT2Zmc2V0LCB2YWx1ZSkge1xuICAgICAgc2V0KHRoaXMsIDEsIGJ5dGVPZmZzZXQsIHBhY2tJOCwgdmFsdWUpO1xuICAgIH0sXG4gICAgc2V0SW50MTY6IGZ1bmN0aW9uIHNldEludDE2KGJ5dGVPZmZzZXQsIHZhbHVlIC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICBzZXQodGhpcywgMiwgYnl0ZU9mZnNldCwgcGFja0kxNiwgdmFsdWUsIGFyZ3VtZW50c1syXSk7XG4gICAgfSxcbiAgICBzZXRVaW50MTY6IGZ1bmN0aW9uIHNldFVpbnQxNihieXRlT2Zmc2V0LCB2YWx1ZSAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgc2V0KHRoaXMsIDIsIGJ5dGVPZmZzZXQsIHBhY2tJMTYsIHZhbHVlLCBhcmd1bWVudHNbMl0pO1xuICAgIH0sXG4gICAgc2V0SW50MzI6IGZ1bmN0aW9uIHNldEludDMyKGJ5dGVPZmZzZXQsIHZhbHVlIC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICBzZXQodGhpcywgNCwgYnl0ZU9mZnNldCwgcGFja0kzMiwgdmFsdWUsIGFyZ3VtZW50c1syXSk7XG4gICAgfSxcbiAgICBzZXRVaW50MzI6IGZ1bmN0aW9uIHNldFVpbnQzMihieXRlT2Zmc2V0LCB2YWx1ZSAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgc2V0KHRoaXMsIDQsIGJ5dGVPZmZzZXQsIHBhY2tJMzIsIHZhbHVlLCBhcmd1bWVudHNbMl0pO1xuICAgIH0sXG4gICAgc2V0RmxvYXQzMjogZnVuY3Rpb24gc2V0RmxvYXQzMihieXRlT2Zmc2V0LCB2YWx1ZSAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgc2V0KHRoaXMsIDQsIGJ5dGVPZmZzZXQsIHBhY2tGMzIsIHZhbHVlLCBhcmd1bWVudHNbMl0pO1xuICAgIH0sXG4gICAgc2V0RmxvYXQ2NDogZnVuY3Rpb24gc2V0RmxvYXQ2NChieXRlT2Zmc2V0LCB2YWx1ZSAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgc2V0KHRoaXMsIDgsIGJ5dGVPZmZzZXQsIHBhY2tGNjQsIHZhbHVlLCBhcmd1bWVudHNbMl0pO1xuICAgIH1cbiAgfSk7XG59IGVsc2Uge1xuICBpZiAoIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAkQXJyYXlCdWZmZXIoMSk7XG4gIH0pIHx8ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgbmV3ICRBcnJheUJ1ZmZlcigtMSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gIH0pIHx8IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICBuZXcgJEFycmF5QnVmZmVyKCk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgbmV3ICRBcnJheUJ1ZmZlcigxLjUpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgIG5ldyAkQXJyYXlCdWZmZXIoTmFOKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICByZXR1cm4gJEFycmF5QnVmZmVyLm5hbWUgIT0gQVJSQVlfQlVGRkVSO1xuICB9KSkge1xuICAgICRBcnJheUJ1ZmZlciA9IGZ1bmN0aW9uIEFycmF5QnVmZmVyKGxlbmd0aCkge1xuICAgICAgYW5JbnN0YW5jZSh0aGlzLCAkQXJyYXlCdWZmZXIpO1xuICAgICAgcmV0dXJuIG5ldyBCYXNlQnVmZmVyKHRvSW5kZXgobGVuZ3RoKSk7XG4gICAgfTtcbiAgICB2YXIgQXJyYXlCdWZmZXJQcm90byA9ICRBcnJheUJ1ZmZlcltQUk9UT1RZUEVdID0gQmFzZUJ1ZmZlcltQUk9UT1RZUEVdO1xuICAgIGZvciAodmFyIGtleXMgPSBnT1BOKEJhc2VCdWZmZXIpLCBqID0gMCwga2V5OyBrZXlzLmxlbmd0aCA+IGo7KSB7XG4gICAgICBpZiAoISgoa2V5ID0ga2V5c1tqKytdKSBpbiAkQXJyYXlCdWZmZXIpKSBoaWRlKCRBcnJheUJ1ZmZlciwga2V5LCBCYXNlQnVmZmVyW2tleV0pO1xuICAgIH1cbiAgICBpZiAoIUxJQlJBUlkpIEFycmF5QnVmZmVyUHJvdG8uY29uc3RydWN0b3IgPSAkQXJyYXlCdWZmZXI7XG4gIH1cbiAgLy8gaU9TIFNhZmFyaSA3LnggYnVnXG4gIHZhciB2aWV3ID0gbmV3ICREYXRhVmlldyhuZXcgJEFycmF5QnVmZmVyKDIpKTtcbiAgdmFyICRzZXRJbnQ4ID0gJERhdGFWaWV3W1BST1RPVFlQRV0uc2V0SW50ODtcbiAgdmlldy5zZXRJbnQ4KDAsIDIxNDc0ODM2NDgpO1xuICB2aWV3LnNldEludDgoMSwgMjE0NzQ4MzY0OSk7XG4gIGlmICh2aWV3LmdldEludDgoMCkgfHwgIXZpZXcuZ2V0SW50OCgxKSkgcmVkZWZpbmVBbGwoJERhdGFWaWV3W1BST1RPVFlQRV0sIHtcbiAgICBzZXRJbnQ4OiBmdW5jdGlvbiBzZXRJbnQ4KGJ5dGVPZmZzZXQsIHZhbHVlKSB7XG4gICAgICAkc2V0SW50OC5jYWxsKHRoaXMsIGJ5dGVPZmZzZXQsIHZhbHVlIDw8IDI0ID4+IDI0KTtcbiAgICB9LFxuICAgIHNldFVpbnQ4OiBmdW5jdGlvbiBzZXRVaW50OChieXRlT2Zmc2V0LCB2YWx1ZSkge1xuICAgICAgJHNldEludDguY2FsbCh0aGlzLCBieXRlT2Zmc2V0LCB2YWx1ZSA8PCAyNCA+PiAyNCk7XG4gICAgfVxuICB9LCB0cnVlKTtcbn1cbnNldFRvU3RyaW5nVGFnKCRBcnJheUJ1ZmZlciwgQVJSQVlfQlVGRkVSKTtcbnNldFRvU3RyaW5nVGFnKCREYXRhVmlldywgREFUQV9WSUVXKTtcbmhpZGUoJERhdGFWaWV3W1BST1RPVFlQRV0sICR0eXBlZC5WSUVXLCB0cnVlKTtcbmV4cG9ydHNbQVJSQVlfQlVGRkVSXSA9ICRBcnJheUJ1ZmZlcjtcbmV4cG9ydHNbREFUQV9WSUVXXSA9ICREYXRhVmlldztcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///92\n")},function(module,exports){eval('var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function("return this")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === "object") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it\'s\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULyh3ZWJwYWNrKS9idWlsZGluL2dsb2JhbC5qcz9jZDAwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsNENBQTRDOztBQUU1QyIsImZpbGUiOiI5My5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBnO1xuXG4vLyBUaGlzIHdvcmtzIGluIG5vbi1zdHJpY3QgbW9kZVxuZyA9IChmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXM7XG59KSgpO1xuXG50cnkge1xuXHQvLyBUaGlzIHdvcmtzIGlmIGV2YWwgaXMgYWxsb3dlZCAoc2VlIENTUClcblx0ZyA9IGcgfHwgbmV3IEZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKTtcbn0gY2F0Y2ggKGUpIHtcblx0Ly8gVGhpcyB3b3JrcyBpZiB0aGUgd2luZG93IHJlZmVyZW5jZSBpcyBhdmFpbGFibGVcblx0aWYgKHR5cGVvZiB3aW5kb3cgPT09IFwib2JqZWN0XCIpIGcgPSB3aW5kb3c7XG59XG5cbi8vIGcgY2FuIHN0aWxsIGJlIHVuZGVmaW5lZCwgYnV0IG5vdGhpbmcgdG8gZG8gYWJvdXQgaXQuLi5cbi8vIFdlIHJldHVybiB1bmRlZmluZWQsIGluc3RlYWQgb2Ygbm90aGluZyBoZXJlLCBzbyBpdCdzXG4vLyBlYXNpZXIgdG8gaGFuZGxlIHRoaXMgY2FzZS4gaWYoIWdsb2JhbCkgeyAuLi59XG5cbm1vZHVsZS5leHBvcnRzID0gZztcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///93\n')},function(module,exports,__webpack_require__){eval("module.exports = !__webpack_require__(7) && !__webpack_require__(3)(function () {\n return Object.defineProperty(__webpack_require__(66)('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faWU4LWRvbS1kZWZpbmUuanM/YzY5YSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxrQkFBa0IsbUJBQU8sQ0FBQyxDQUFnQixNQUFNLG1CQUFPLENBQUMsQ0FBVTtBQUNsRSwrQkFBK0IsbUJBQU8sQ0FBQyxFQUFlLGdCQUFnQixtQkFBbUIsVUFBVSxFQUFFLEVBQUU7QUFDdkcsQ0FBQyIsImZpbGUiOiI5NC5qcyIsInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gIXJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgIXJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHJlcXVpcmUoJy4vX2RvbS1jcmVhdGUnKSgnZGl2JyksICdhJywgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH0gfSkuYSAhPSA3O1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///94\n")},function(module,exports,__webpack_require__){eval("exports.f = __webpack_require__(5);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fd2tzLWV4dC5qcz8zN2M4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVksbUJBQU8sQ0FBQyxDQUFRIiwiZmlsZSI6Ijk1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0cy5mID0gcmVxdWlyZSgnLi9fd2tzJyk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///95\n")},function(module,exports,__webpack_require__){eval("var has = __webpack_require__(14);\nvar toIObject = __webpack_require__(15);\nvar arrayIndexOf = __webpack_require__(52)(false);\nvar IE_PROTO = __webpack_require__(68)('IE_PROTO');\n\nmodule.exports = function (object, names) {\n var O = toIObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (has(O, key = names[i++])) {\n ~arrayIndexOf(result, key) || result.push(key);\n }\n return result;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWtleXMtaW50ZXJuYWwuanM/Y2UxMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxVQUFVLG1CQUFPLENBQUMsRUFBUTtBQUMxQixnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDLG1CQUFtQixtQkFBTyxDQUFDLEVBQW1CO0FBQzlDLGVBQWUsbUJBQU8sQ0FBQyxFQUFlOztBQUV0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiOTYuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIGFycmF5SW5kZXhPZiA9IHJlcXVpcmUoJy4vX2FycmF5LWluY2x1ZGVzJykoZmFsc2UpO1xudmFyIElFX1BST1RPID0gcmVxdWlyZSgnLi9fc2hhcmVkLWtleScpKCdJRV9QUk9UTycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIG5hbWVzKSB7XG4gIHZhciBPID0gdG9JT2JqZWN0KG9iamVjdCk7XG4gIHZhciBpID0gMDtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIga2V5O1xuICBmb3IgKGtleSBpbiBPKSBpZiAoa2V5ICE9IElFX1BST1RPKSBoYXMoTywga2V5KSAmJiByZXN1bHQucHVzaChrZXkpO1xuICAvLyBEb24ndCBlbnVtIGJ1ZyAmIGhpZGRlbiBrZXlzXG4gIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSBpZiAoaGFzKE8sIGtleSA9IG5hbWVzW2krK10pKSB7XG4gICAgfmFycmF5SW5kZXhPZihyZXN1bHQsIGtleSkgfHwgcmVzdWx0LnB1c2goa2V5KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///96\n")},function(module,exports,__webpack_require__){eval("var dP = __webpack_require__(8);\nvar anObject = __webpack_require__(1);\nvar getKeys = __webpack_require__(34);\n\nmodule.exports = __webpack_require__(7) ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var keys = getKeys(Properties);\n var length = keys.length;\n var i = 0;\n var P;\n while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n return O;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWRwcy5qcz8xNDk1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFNBQVMsbUJBQU8sQ0FBQyxDQUFjO0FBQy9CLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGNBQWMsbUJBQU8sQ0FBQyxFQUFnQjs7QUFFdEMsaUJBQWlCLG1CQUFPLENBQUMsQ0FBZ0I7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiI5Ny5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgZ2V0S2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzIDogZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhPLCBQcm9wZXJ0aWVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICB2YXIga2V5cyA9IGdldEtleXMoUHJvcGVydGllcyk7XG4gIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgdmFyIGkgPSAwO1xuICB2YXIgUDtcbiAgd2hpbGUgKGxlbmd0aCA+IGkpIGRQLmYoTywgUCA9IGtleXNbaSsrXSwgUHJvcGVydGllc1tQXSk7XG4gIHJldHVybiBPO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///97\n")},function(module,exports,__webpack_require__){eval("// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nvar toIObject = __webpack_require__(15);\nvar gOPN = __webpack_require__(37).f;\nvar toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return gOPN(it);\n } catch (e) {\n return windowNames.slice();\n }\n};\n\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdvcG4tZXh0LmpzPzdiYmMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDLFdBQVcsbUJBQU8sQ0FBQyxFQUFnQjtBQUNuQyxpQkFBaUI7O0FBRWpCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EiLCJmaWxlIjoiOTguanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBmYWxsYmFjayBmb3IgSUUxMSBidWdneSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB3aXRoIGlmcmFtZSBhbmQgd2luZG93XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIGdPUE4gPSByZXF1aXJlKCcuL19vYmplY3QtZ29wbicpLmY7XG52YXIgdG9TdHJpbmcgPSB7fS50b1N0cmluZztcblxudmFyIHdpbmRvd05hbWVzID0gdHlwZW9mIHdpbmRvdyA9PSAnb2JqZWN0JyAmJiB3aW5kb3cgJiYgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXNcbiAgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh3aW5kb3cpIDogW107XG5cbnZhciBnZXRXaW5kb3dOYW1lcyA9IGZ1bmN0aW9uIChpdCkge1xuICB0cnkge1xuICAgIHJldHVybiBnT1BOKGl0KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiB3aW5kb3dOYW1lcy5zbGljZSgpO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cy5mID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhpdCkge1xuICByZXR1cm4gd2luZG93TmFtZXMgJiYgdG9TdHJpbmcuY2FsbChpdCkgPT0gJ1tvYmplY3QgV2luZG93XScgPyBnZXRXaW5kb3dOYW1lcyhpdCkgOiBnT1BOKHRvSU9iamVjdChpdCkpO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///98\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// 19.1.2.1 Object.assign(target, source, ...)\nvar DESCRIPTORS = __webpack_require__(7);\nvar getKeys = __webpack_require__(34);\nvar gOPS = __webpack_require__(53);\nvar pIE = __webpack_require__(49);\nvar toObject = __webpack_require__(9);\nvar IObject = __webpack_require__(48);\nvar $assign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || __webpack_require__(3)(function () {\n var A = {};\n var B = {};\n // eslint-disable-next-line no-undef\n var S = Symbol();\n var K = 'abcdefghijklmnopqrst';\n A[S] = 7;\n K.split('').forEach(function (k) { B[k] = k; });\n return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n var T = toObject(target);\n var aLen = arguments.length;\n var index = 1;\n var getSymbols = gOPS.f;\n var isEnum = pIE.f;\n while (aLen > index) {\n var S = IObject(arguments[index++]);\n var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);\n var length = keys.length;\n var j = 0;\n var key;\n while (length > j) {\n key = keys[j++];\n if (!DESCRIPTORS || isEnum.call(S, key)) T[key] = S[key];\n }\n } return T;\n} : $assign;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWFzc2lnbi5qcz83MzMzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxrQkFBa0IsbUJBQU8sQ0FBQyxDQUFnQjtBQUMxQyxjQUFjLG1CQUFPLENBQUMsRUFBZ0I7QUFDdEMsV0FBVyxtQkFBTyxDQUFDLEVBQWdCO0FBQ25DLFVBQVUsbUJBQU8sQ0FBQyxFQUFlO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGNBQWMsbUJBQU8sQ0FBQyxFQUFZO0FBQ2xDOztBQUVBO0FBQ0EsNkJBQTZCLG1CQUFPLENBQUMsQ0FBVTtBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0MsVUFBVSxFQUFFO0FBQ2hELG1CQUFtQixzQ0FBc0M7QUFDekQsQ0FBQyxxQ0FBcUM7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUMiLCJmaWxlIjoiOTkuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG4vLyAxOS4xLjIuMSBPYmplY3QuYXNzaWduKHRhcmdldCwgc291cmNlLCAuLi4pXG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpO1xudmFyIGdldEtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xudmFyIGdPUFMgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wcycpO1xudmFyIHBJRSA9IHJlcXVpcmUoJy4vX29iamVjdC1waWUnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIElPYmplY3QgPSByZXF1aXJlKCcuL19pb2JqZWN0Jyk7XG52YXIgJGFzc2lnbiA9IE9iamVjdC5hc3NpZ247XG5cbi8vIHNob3VsZCB3b3JrIHdpdGggc3ltYm9scyBhbmQgc2hvdWxkIGhhdmUgZGV0ZXJtaW5pc3RpYyBwcm9wZXJ0eSBvcmRlciAoVjggYnVnKVxubW9kdWxlLmV4cG9ydHMgPSAhJGFzc2lnbiB8fCByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgdmFyIEEgPSB7fTtcbiAgdmFyIEIgPSB7fTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gIHZhciBTID0gU3ltYm9sKCk7XG4gIHZhciBLID0gJ2FiY2RlZmdoaWprbG1ub3BxcnN0JztcbiAgQVtTXSA9IDc7XG4gIEsuc3BsaXQoJycpLmZvckVhY2goZnVuY3Rpb24gKGspIHsgQltrXSA9IGs7IH0pO1xuICByZXR1cm4gJGFzc2lnbih7fSwgQSlbU10gIT0gNyB8fCBPYmplY3Qua2V5cygkYXNzaWduKHt9LCBCKSkuam9pbignJykgIT0gSztcbn0pID8gZnVuY3Rpb24gYXNzaWduKHRhcmdldCwgc291cmNlKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgdmFyIFQgPSB0b09iamVjdCh0YXJnZXQpO1xuICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gIHZhciBpbmRleCA9IDE7XG4gIHZhciBnZXRTeW1ib2xzID0gZ09QUy5mO1xuICB2YXIgaXNFbnVtID0gcElFLmY7XG4gIHdoaWxlIChhTGVuID4gaW5kZXgpIHtcbiAgICB2YXIgUyA9IElPYmplY3QoYXJndW1lbnRzW2luZGV4KytdKTtcbiAgICB2YXIga2V5cyA9IGdldFN5bWJvbHMgPyBnZXRLZXlzKFMpLmNvbmNhdChnZXRTeW1ib2xzKFMpKSA6IGdldEtleXMoUyk7XG4gICAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICAgIHZhciBqID0gMDtcbiAgICB2YXIga2V5O1xuICAgIHdoaWxlIChsZW5ndGggPiBqKSB7XG4gICAgICBrZXkgPSBrZXlzW2orK107XG4gICAgICBpZiAoIURFU0NSSVBUT1JTIHx8IGlzRW51bS5jYWxsKFMsIGtleSkpIFRba2V5XSA9IFNba2V5XTtcbiAgICB9XG4gIH0gcmV0dXJuIFQ7XG59IDogJGFzc2lnbjtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///99\n")},function(module,exports){eval("// 7.2.9 SameValue(x, y)\nmodule.exports = Object.is || function is(x, y) {\n // eslint-disable-next-line no-self-compare\n return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2FtZS12YWx1ZS5qcz84M2ExIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMTAwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gNy4yLjkgU2FtZVZhbHVlKHgsIHkpXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5pcyB8fCBmdW5jdGlvbiBpcyh4LCB5KSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgcmV0dXJuIHggPT09IHkgPyB4ICE9PSAwIHx8IDEgLyB4ID09PSAxIC8geSA6IHggIT0geCAmJiB5ICE9IHk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///100\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar aFunction = __webpack_require__(10);\nvar isObject = __webpack_require__(4);\nvar invoke = __webpack_require__(102);\nvar arraySlice = [].slice;\nvar factories = {};\n\nvar construct = function (F, len, args) {\n if (!(len in factories)) {\n for (var n = [], i = 0; i < len; i++) n[i] = 'a[' + i + ']';\n // eslint-disable-next-line no-new-func\n factories[len] = Function('F,a', 'return new F(' + n.join(',') + ')');\n } return factories[len](F, args);\n};\n\nmodule.exports = Function.bind || function bind(that /* , ...args */) {\n var fn = aFunction(this);\n var partArgs = arraySlice.call(arguments, 1);\n var bound = function (/* args... */) {\n var args = partArgs.concat(arraySlice.call(arguments));\n return this instanceof bound ? construct(fn, args.length, args) : invoke(fn, args, that);\n };\n if (isObject(fn.prototype)) bound.prototype = fn.prototype;\n return bound;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYmluZC5qcz9mMGMxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2QyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxhQUFhLG1CQUFPLENBQUMsR0FBVztBQUNoQztBQUNBOztBQUVBO0FBQ0E7QUFDQSwyQkFBMkIsU0FBUztBQUNwQztBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjEwMS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBpbnZva2UgPSByZXF1aXJlKCcuL19pbnZva2UnKTtcbnZhciBhcnJheVNsaWNlID0gW10uc2xpY2U7XG52YXIgZmFjdG9yaWVzID0ge307XG5cbnZhciBjb25zdHJ1Y3QgPSBmdW5jdGlvbiAoRiwgbGVuLCBhcmdzKSB7XG4gIGlmICghKGxlbiBpbiBmYWN0b3JpZXMpKSB7XG4gICAgZm9yICh2YXIgbiA9IFtdLCBpID0gMDsgaSA8IGxlbjsgaSsrKSBuW2ldID0gJ2FbJyArIGkgKyAnXSc7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jXG4gICAgZmFjdG9yaWVzW2xlbl0gPSBGdW5jdGlvbignRixhJywgJ3JldHVybiBuZXcgRignICsgbi5qb2luKCcsJykgKyAnKScpO1xuICB9IHJldHVybiBmYWN0b3JpZXNbbGVuXShGLCBhcmdzKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gRnVuY3Rpb24uYmluZCB8fCBmdW5jdGlvbiBiaW5kKHRoYXQgLyogLCAuLi5hcmdzICovKSB7XG4gIHZhciBmbiA9IGFGdW5jdGlvbih0aGlzKTtcbiAgdmFyIHBhcnRBcmdzID0gYXJyYXlTbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gIHZhciBib3VuZCA9IGZ1bmN0aW9uICgvKiBhcmdzLi4uICovKSB7XG4gICAgdmFyIGFyZ3MgPSBwYXJ0QXJncy5jb25jYXQoYXJyYXlTbGljZS5jYWxsKGFyZ3VtZW50cykpO1xuICAgIHJldHVybiB0aGlzIGluc3RhbmNlb2YgYm91bmQgPyBjb25zdHJ1Y3QoZm4sIGFyZ3MubGVuZ3RoLCBhcmdzKSA6IGludm9rZShmbiwgYXJncywgdGhhdCk7XG4gIH07XG4gIGlmIChpc09iamVjdChmbi5wcm90b3R5cGUpKSBib3VuZC5wcm90b3R5cGUgPSBmbi5wcm90b3R5cGU7XG4gIHJldHVybiBib3VuZDtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///101\n")},function(module,exports){eval("// fast apply, http://jsperf.lnkit.com/fast-apply/5\nmodule.exports = function (fn, args, that) {\n var un = that === undefined;\n switch (args.length) {\n case 0: return un ? fn()\n : fn.call(that);\n case 1: return un ? fn(args[0])\n : fn.call(that, args[0]);\n case 2: return un ? fn(args[0], args[1])\n : fn.call(that, args[0], args[1]);\n case 3: return un ? fn(args[0], args[1], args[2])\n : fn.call(that, args[0], args[1], args[2]);\n case 4: return un ? fn(args[0], args[1], args[2], args[3])\n : fn.call(that, args[0], args[1], args[2], args[3]);\n } return fn.apply(that, args);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faW52b2tlLmpzPzMxZjQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCIsImZpbGUiOiIxMDIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBmYXN0IGFwcGx5LCBodHRwOi8vanNwZXJmLmxua2l0LmNvbS9mYXN0LWFwcGx5LzVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGZuLCBhcmdzLCB0aGF0KSB7XG4gIHZhciB1biA9IHRoYXQgPT09IHVuZGVmaW5lZDtcbiAgc3dpdGNoIChhcmdzLmxlbmd0aCkge1xuICAgIGNhc2UgMDogcmV0dXJuIHVuID8gZm4oKVxuICAgICAgICAgICAgICAgICAgICAgIDogZm4uY2FsbCh0aGF0KTtcbiAgICBjYXNlIDE6IHJldHVybiB1biA/IGZuKGFyZ3NbMF0pXG4gICAgICAgICAgICAgICAgICAgICAgOiBmbi5jYWxsKHRoYXQsIGFyZ3NbMF0pO1xuICAgIGNhc2UgMjogcmV0dXJuIHVuID8gZm4oYXJnc1swXSwgYXJnc1sxXSlcbiAgICAgICAgICAgICAgICAgICAgICA6IGZuLmNhbGwodGhhdCwgYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgY2FzZSAzOiByZXR1cm4gdW4gPyBmbihhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKVxuICAgICAgICAgICAgICAgICAgICAgIDogZm4uY2FsbCh0aGF0LCBhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcbiAgICBjYXNlIDQ6IHJldHVybiB1biA/IGZuKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10pXG4gICAgICAgICAgICAgICAgICAgICAgOiBmbi5jYWxsKHRoYXQsIGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10pO1xuICB9IHJldHVybiBmbi5hcHBseSh0aGF0LCBhcmdzKTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///102\n")},function(module,exports,__webpack_require__){eval("var $parseInt = __webpack_require__(2).parseInt;\nvar $trim = __webpack_require__(45).trim;\nvar ws = __webpack_require__(72);\nvar hex = /^[-+]?0[xX]/;\n\nmodule.exports = $parseInt(ws + '08') !== 8 || $parseInt(ws + '0x16') !== 22 ? function parseInt(str, radix) {\n var string = $trim(String(str), 3);\n return $parseInt(string, (radix >>> 0) || (hex.test(string) ? 16 : 10));\n} : $parseInt;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcGFyc2UtaW50LmpzPzNjYTUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZ0JBQWdCLG1CQUFPLENBQUMsQ0FBVztBQUNuQyxZQUFZLG1CQUFPLENBQUMsRUFBZ0I7QUFDcEMsU0FBUyxtQkFBTyxDQUFDLEVBQWM7QUFDL0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIxMDMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgJHBhcnNlSW50ID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykucGFyc2VJbnQ7XG52YXIgJHRyaW0gPSByZXF1aXJlKCcuL19zdHJpbmctdHJpbScpLnRyaW07XG52YXIgd3MgPSByZXF1aXJlKCcuL19zdHJpbmctd3MnKTtcbnZhciBoZXggPSAvXlstK10/MFt4WF0vO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICRwYXJzZUludCh3cyArICcwOCcpICE9PSA4IHx8ICRwYXJzZUludCh3cyArICcweDE2JykgIT09IDIyID8gZnVuY3Rpb24gcGFyc2VJbnQoc3RyLCByYWRpeCkge1xuICB2YXIgc3RyaW5nID0gJHRyaW0oU3RyaW5nKHN0ciksIDMpO1xuICByZXR1cm4gJHBhcnNlSW50KHN0cmluZywgKHJhZGl4ID4+PiAwKSB8fCAoaGV4LnRlc3Qoc3RyaW5nKSA/IDE2IDogMTApKTtcbn0gOiAkcGFyc2VJbnQ7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///103\n")},function(module,exports,__webpack_require__){eval("var $parseFloat = __webpack_require__(2).parseFloat;\nvar $trim = __webpack_require__(45).trim;\n\nmodule.exports = 1 / $parseFloat(__webpack_require__(72) + '-0') !== -Infinity ? function parseFloat(str) {\n var string = $trim(String(str), 3);\n var result = $parseFloat(string);\n return result === 0 && string.charAt(0) == '-' ? -0 : result;\n} : $parseFloat;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcGFyc2UtZmxvYXQuanM/ZDc1MiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxrQkFBa0IsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JDLFlBQVksbUJBQU8sQ0FBQyxFQUFnQjs7QUFFcEMsaUNBQWlDLG1CQUFPLENBQUMsRUFBYztBQUN2RDtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjEwNC5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciAkcGFyc2VGbG9hdCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLnBhcnNlRmxvYXQ7XG52YXIgJHRyaW0gPSByZXF1aXJlKCcuL19zdHJpbmctdHJpbScpLnRyaW07XG5cbm1vZHVsZS5leHBvcnRzID0gMSAvICRwYXJzZUZsb2F0KHJlcXVpcmUoJy4vX3N0cmluZy13cycpICsgJy0wJykgIT09IC1JbmZpbml0eSA/IGZ1bmN0aW9uIHBhcnNlRmxvYXQoc3RyKSB7XG4gIHZhciBzdHJpbmcgPSAkdHJpbShTdHJpbmcoc3RyKSwgMyk7XG4gIHZhciByZXN1bHQgPSAkcGFyc2VGbG9hdChzdHJpbmcpO1xuICByZXR1cm4gcmVzdWx0ID09PSAwICYmIHN0cmluZy5jaGFyQXQoMCkgPT0gJy0nID8gLTAgOiByZXN1bHQ7XG59IDogJHBhcnNlRmxvYXQ7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///104\n")},function(module,exports,__webpack_require__){eval("var cof = __webpack_require__(20);\nmodule.exports = function (it, msg) {\n if (typeof it != 'number' && cof(it) != 'Number') throw TypeError(msg);\n return +it;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYS1udW1iZXItdmFsdWUuanM/YmVmOSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxVQUFVLG1CQUFPLENBQUMsRUFBUTtBQUMxQjtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIxMDUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgbXNnKSB7XG4gIGlmICh0eXBlb2YgaXQgIT0gJ251bWJlcicgJiYgY29mKGl0KSAhPSAnTnVtYmVyJykgdGhyb3cgVHlwZUVycm9yKG1zZyk7XG4gIHJldHVybiAraXQ7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///105\n")},function(module,exports,__webpack_require__){eval("// 20.1.2.3 Number.isInteger(number)\nvar isObject = __webpack_require__(4);\nvar floor = Math.floor;\nmodule.exports = function isInteger(it) {\n return !isObject(it) && isFinite(it) && floor(it) === it;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtaW50ZWdlci5qcz85YzEyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckM7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMTA2LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMS4yLjMgTnVtYmVyLmlzSW50ZWdlcihudW1iZXIpXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzSW50ZWdlcihpdCkge1xuICByZXR1cm4gIWlzT2JqZWN0KGl0KSAmJiBpc0Zpbml0ZShpdCkgJiYgZmxvb3IoaXQpID09PSBpdDtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///106\n")},function(module,exports){eval("// 20.2.2.20 Math.log1p(x)\nmodule.exports = Math.log1p || function log1p(x) {\n return (x = +x) > -1e-8 && x < 1e-8 ? x - x * x / 2 : Math.log(1 + x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWF0aC1sb2cxcC5qcz9kNmM2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjEwNy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDIwLjIuMi4yMCBNYXRoLmxvZzFwKHgpXG5tb2R1bGUuZXhwb3J0cyA9IE1hdGgubG9nMXAgfHwgZnVuY3Rpb24gbG9nMXAoeCkge1xuICByZXR1cm4gKHggPSAreCkgPiAtMWUtOCAmJiB4IDwgMWUtOCA/IHggLSB4ICogeCAvIDIgOiBNYXRoLmxvZygxICsgeCk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///107\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.16 Math.fround(x)\nvar sign = __webpack_require__(75);\nvar pow = Math.pow;\nvar EPSILON = pow(2, -52);\nvar EPSILON32 = pow(2, -23);\nvar MAX32 = pow(2, 127) * (2 - EPSILON32);\nvar MIN32 = pow(2, -126);\n\nvar roundTiesToEven = function (n) {\n return n + 1 / EPSILON - 1 / EPSILON;\n};\n\nmodule.exports = Math.fround || function fround(x) {\n var $abs = Math.abs(x);\n var $sign = sign(x);\n var a, result;\n if ($abs < MIN32) return $sign * roundTiesToEven($abs / MIN32 / EPSILON32) * MIN32 * EPSILON32;\n a = (1 + EPSILON32 / EPSILON) * $abs;\n result = a - (a - $abs);\n // eslint-disable-next-line no-self-compare\n if (result > MAX32 || result != result) return $sign * Infinity;\n return $sign * result;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWF0aC1mcm91bmQuanM/OTFjYSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLFdBQVcsbUJBQU8sQ0FBQyxFQUFjO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMTA4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMi4yLjE2IE1hdGguZnJvdW5kKHgpXG52YXIgc2lnbiA9IHJlcXVpcmUoJy4vX21hdGgtc2lnbicpO1xudmFyIHBvdyA9IE1hdGgucG93O1xudmFyIEVQU0lMT04gPSBwb3coMiwgLTUyKTtcbnZhciBFUFNJTE9OMzIgPSBwb3coMiwgLTIzKTtcbnZhciBNQVgzMiA9IHBvdygyLCAxMjcpICogKDIgLSBFUFNJTE9OMzIpO1xudmFyIE1JTjMyID0gcG93KDIsIC0xMjYpO1xuXG52YXIgcm91bmRUaWVzVG9FdmVuID0gZnVuY3Rpb24gKG4pIHtcbiAgcmV0dXJuIG4gKyAxIC8gRVBTSUxPTiAtIDEgLyBFUFNJTE9OO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBNYXRoLmZyb3VuZCB8fCBmdW5jdGlvbiBmcm91bmQoeCkge1xuICB2YXIgJGFicyA9IE1hdGguYWJzKHgpO1xuICB2YXIgJHNpZ24gPSBzaWduKHgpO1xuICB2YXIgYSwgcmVzdWx0O1xuICBpZiAoJGFicyA8IE1JTjMyKSByZXR1cm4gJHNpZ24gKiByb3VuZFRpZXNUb0V2ZW4oJGFicyAvIE1JTjMyIC8gRVBTSUxPTjMyKSAqIE1JTjMyICogRVBTSUxPTjMyO1xuICBhID0gKDEgKyBFUFNJTE9OMzIgLyBFUFNJTE9OKSAqICRhYnM7XG4gIHJlc3VsdCA9IGEgLSAoYSAtICRhYnMpO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gIGlmIChyZXN1bHQgPiBNQVgzMiB8fCByZXN1bHQgIT0gcmVzdWx0KSByZXR1cm4gJHNpZ24gKiBJbmZpbml0eTtcbiAgcmV0dXJuICRzaWduICogcmVzdWx0O1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///108\n")},function(module,exports,__webpack_require__){eval("// call something on iterator step with safe closing on error\nvar anObject = __webpack_require__(1);\nmodule.exports = function (iterator, fn, value, entries) {\n try {\n return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n // 7.4.6 IteratorClose(iterator, completion)\n } catch (e) {\n var ret = iterator['return'];\n if (ret !== undefined) anObject(ret.call(iterator));\n throw e;\n }\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlci1jYWxsLmpzPzFmYTgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjEwOS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGNhbGwgc29tZXRoaW5nIG9uIGl0ZXJhdG9yIHN0ZXAgd2l0aCBzYWZlIGNsb3Npbmcgb24gZXJyb3JcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIGZuLCB2YWx1ZSwgZW50cmllcykge1xuICB0cnkge1xuICAgIHJldHVybiBlbnRyaWVzID8gZm4oYW5PYmplY3QodmFsdWUpWzBdLCB2YWx1ZVsxXSkgOiBmbih2YWx1ZSk7XG4gIC8vIDcuNC42IEl0ZXJhdG9yQ2xvc2UoaXRlcmF0b3IsIGNvbXBsZXRpb24pXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB2YXIgcmV0ID0gaXRlcmF0b3JbJ3JldHVybiddO1xuICAgIGlmIChyZXQgIT09IHVuZGVmaW5lZCkgYW5PYmplY3QocmV0LmNhbGwoaXRlcmF0b3IpKTtcbiAgICB0aHJvdyBlO1xuICB9XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///109\n")},function(module,exports,__webpack_require__){eval("var aFunction = __webpack_require__(10);\nvar toObject = __webpack_require__(9);\nvar IObject = __webpack_require__(48);\nvar toLength = __webpack_require__(6);\n\nmodule.exports = function (that, callbackfn, aLen, memo, isRight) {\n aFunction(callbackfn);\n var O = toObject(that);\n var self = IObject(O);\n var length = toLength(O.length);\n var index = isRight ? length - 1 : 0;\n var i = isRight ? -1 : 1;\n if (aLen < 2) for (;;) {\n if (index in self) {\n memo = self[index];\n index += i;\n break;\n }\n index += i;\n if (isRight ? index < 0 : length <= index) {\n throw TypeError('Reduce of empty array with no initial value');\n }\n }\n for (;isRight ? index >= 0 : length > index; index += i) if (index in self) {\n memo = callbackfn(memo, self[index], index, O);\n }\n return memo;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktcmVkdWNlLmpzPzdiMjMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2QyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxjQUFjLG1CQUFPLENBQUMsRUFBWTtBQUNsQyxlQUFlLG1CQUFPLENBQUMsQ0FBYzs7QUFFckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLHNDQUFzQztBQUM5QztBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIxMTAuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgSU9iamVjdCA9IHJlcXVpcmUoJy4vX2lvYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0aGF0LCBjYWxsYmFja2ZuLCBhTGVuLCBtZW1vLCBpc1JpZ2h0KSB7XG4gIGFGdW5jdGlvbihjYWxsYmFja2ZuKTtcbiAgdmFyIE8gPSB0b09iamVjdCh0aGF0KTtcbiAgdmFyIHNlbGYgPSBJT2JqZWN0KE8pO1xuICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICB2YXIgaW5kZXggPSBpc1JpZ2h0ID8gbGVuZ3RoIC0gMSA6IDA7XG4gIHZhciBpID0gaXNSaWdodCA/IC0xIDogMTtcbiAgaWYgKGFMZW4gPCAyKSBmb3IgKDs7KSB7XG4gICAgaWYgKGluZGV4IGluIHNlbGYpIHtcbiAgICAgIG1lbW8gPSBzZWxmW2luZGV4XTtcbiAgICAgIGluZGV4ICs9IGk7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgaW5kZXggKz0gaTtcbiAgICBpZiAoaXNSaWdodCA/IGluZGV4IDwgMCA6IGxlbmd0aCA8PSBpbmRleCkge1xuICAgICAgdGhyb3cgVHlwZUVycm9yKCdSZWR1Y2Ugb2YgZW1wdHkgYXJyYXkgd2l0aCBubyBpbml0aWFsIHZhbHVlJyk7XG4gICAgfVxuICB9XG4gIGZvciAoO2lzUmlnaHQgPyBpbmRleCA+PSAwIDogbGVuZ3RoID4gaW5kZXg7IGluZGV4ICs9IGkpIGlmIChpbmRleCBpbiBzZWxmKSB7XG4gICAgbWVtbyA9IGNhbGxiYWNrZm4obWVtbywgc2VsZltpbmRleF0sIGluZGV4LCBPKTtcbiAgfVxuICByZXR1cm4gbWVtbztcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///110\n")},function(module,exports,__webpack_require__){"use strict";eval("// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\n\nvar toObject = __webpack_require__(9);\nvar toAbsoluteIndex = __webpack_require__(35);\nvar toLength = __webpack_require__(6);\n\nmodule.exports = [].copyWithin || function copyWithin(target /* = 0 */, start /* = 0, end = @length */) {\n var O = toObject(this);\n var len = toLength(O.length);\n var to = toAbsoluteIndex(target, len);\n var from = toAbsoluteIndex(start, len);\n var end = arguments.length > 2 ? arguments[2] : undefined;\n var count = Math.min((end === undefined ? len : toAbsoluteIndex(end, len)) - from, len - to);\n var inc = 1;\n if (from < to && to < from + count) {\n inc = -1;\n from += count - 1;\n to += count - 1;\n }\n while (count-- > 0) {\n if (from in O) O[to] = O[from];\n else delete O[to];\n to += inc;\n from += inc;\n } return O;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktY29weS13aXRoaW4uanM/YmE5MiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNhO0FBQ2IsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsc0JBQXNCLG1CQUFPLENBQUMsRUFBc0I7QUFDcEQsZUFBZSxtQkFBTyxDQUFDLENBQWM7O0FBRXJDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCIsImZpbGUiOiIxMTEuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyMi4xLjMuMyBBcnJheS5wcm90b3R5cGUuY29weVdpdGhpbih0YXJnZXQsIHN0YXJ0LCBlbmQgPSB0aGlzLmxlbmd0aClcbid1c2Ugc3RyaWN0JztcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4vX3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBbXS5jb3B5V2l0aGluIHx8IGZ1bmN0aW9uIGNvcHlXaXRoaW4odGFyZ2V0IC8qID0gMCAqLywgc3RhcnQgLyogPSAwLCBlbmQgPSBAbGVuZ3RoICovKSB7XG4gIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gIHZhciBsZW4gPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gIHZhciB0byA9IHRvQWJzb2x1dGVJbmRleCh0YXJnZXQsIGxlbik7XG4gIHZhciBmcm9tID0gdG9BYnNvbHV0ZUluZGV4KHN0YXJ0LCBsZW4pO1xuICB2YXIgZW5kID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQ7XG4gIHZhciBjb3VudCA9IE1hdGgubWluKChlbmQgPT09IHVuZGVmaW5lZCA/IGxlbiA6IHRvQWJzb2x1dGVJbmRleChlbmQsIGxlbikpIC0gZnJvbSwgbGVuIC0gdG8pO1xuICB2YXIgaW5jID0gMTtcbiAgaWYgKGZyb20gPCB0byAmJiB0byA8IGZyb20gKyBjb3VudCkge1xuICAgIGluYyA9IC0xO1xuICAgIGZyb20gKz0gY291bnQgLSAxO1xuICAgIHRvICs9IGNvdW50IC0gMTtcbiAgfVxuICB3aGlsZSAoY291bnQtLSA+IDApIHtcbiAgICBpZiAoZnJvbSBpbiBPKSBPW3RvXSA9IE9bZnJvbV07XG4gICAgZWxzZSBkZWxldGUgT1t0b107XG4gICAgdG8gKz0gaW5jO1xuICAgIGZyb20gKz0gaW5jO1xuICB9IHJldHVybiBPO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///111\n")},function(module,exports){eval("module.exports = function (done, value) {\n return { value: value, done: !!done };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlci1zdGVwLmpzP2Q1M2IiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxVQUFVO0FBQ1YiLCJmaWxlIjoiMTEyLmpzIiwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZG9uZSwgdmFsdWUpIHtcbiAgcmV0dXJuIHsgdmFsdWU6IHZhbHVlLCBkb25lOiAhIWRvbmUgfTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///112\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar regexpExec = __webpack_require__(87);\n__webpack_require__(0)({\n target: 'RegExp',\n proto: true,\n forced: regexpExec !== /./.exec\n}, {\n exec: regexpExec\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLmV4ZWMuanM/YjBjNSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGlCQUFpQixtQkFBTyxDQUFDLEVBQWdCO0FBQ3pDLG1CQUFPLENBQUMsQ0FBVztBQUNuQjtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQSxDQUFDIiwiZmlsZSI6IjExMy5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciByZWdleHBFeGVjID0gcmVxdWlyZSgnLi9fcmVnZXhwLWV4ZWMnKTtcbnJlcXVpcmUoJy4vX2V4cG9ydCcpKHtcbiAgdGFyZ2V0OiAnUmVnRXhwJyxcbiAgcHJvdG86IHRydWUsXG4gIGZvcmNlZDogcmVnZXhwRXhlYyAhPT0gLy4vLmV4ZWNcbn0sIHtcbiAgZXhlYzogcmVnZXhwRXhlY1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///113\n")},function(module,exports,__webpack_require__){eval("// 21.2.5.3 get RegExp.prototype.flags()\nif (__webpack_require__(7) && /./g.flags != 'g') __webpack_require__(8).f(RegExp.prototype, 'flags', {\n configurable: true,\n get: __webpack_require__(50)\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLmZsYWdzLmpzPzM4NDYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxJQUFJLG1CQUFPLENBQUMsQ0FBZ0Isd0JBQXdCLG1CQUFPLENBQUMsQ0FBYztBQUMxRTtBQUNBLE9BQU8sbUJBQU8sQ0FBQyxFQUFVO0FBQ3pCLENBQUMiLCJmaWxlIjoiMTE0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjEuMi41LjMgZ2V0IFJlZ0V4cC5wcm90b3R5cGUuZmxhZ3MoKVxuaWYgKHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgLy4vZy5mbGFncyAhPSAnZycpIHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmYoUmVnRXhwLnByb3RvdHlwZSwgJ2ZsYWdzJywge1xuICBjb25maWd1cmFibGU6IHRydWUsXG4gIGdldDogcmVxdWlyZSgnLi9fZmxhZ3MnKVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///114\n")},function(module,exports){eval("module.exports = function (exec) {\n try {\n return { e: false, v: exec() };\n } catch (e) {\n return { e: true, v: e };\n }\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcGVyZm9ybS5qcz85YzgwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQSxZQUFZO0FBQ1osR0FBRztBQUNILFlBQVk7QUFDWjtBQUNBIiwiZmlsZSI6IjExNS5qcyIsInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4geyBlOiBmYWxzZSwgdjogZXhlYygpIH07XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4geyBlOiB0cnVlLCB2OiBlIH07XG4gIH1cbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///115\n")},function(module,exports,__webpack_require__){eval("var anObject = __webpack_require__(1);\nvar isObject = __webpack_require__(4);\nvar newPromiseCapability = __webpack_require__(91);\n\nmodule.exports = function (C, x) {\n anObject(C);\n if (isObject(x) && x.constructor === C) return x;\n var promiseCapability = newPromiseCapability.f(C);\n var resolve = promiseCapability.resolve;\n resolve(x);\n return promiseCapability.promise;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcHJvbWlzZS1yZXNvbHZlLmpzP2JjYWEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsMkJBQTJCLG1CQUFPLENBQUMsRUFBMkI7O0FBRTlEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMTE2LmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IHJlcXVpcmUoJy4vX25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQywgeCkge1xuICBhbk9iamVjdChDKTtcbiAgaWYgKGlzT2JqZWN0KHgpICYmIHguY29uc3RydWN0b3IgPT09IEMpIHJldHVybiB4O1xuICB2YXIgcHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eS5mKEMpO1xuICB2YXIgcmVzb2x2ZSA9IHByb21pc2VDYXBhYmlsaXR5LnJlc29sdmU7XG4gIHJlc29sdmUoeCk7XG4gIHJldHVybiBwcm9taXNlQ2FwYWJpbGl0eS5wcm9taXNlO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///116\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar strong = __webpack_require__(118);\nvar validate = __webpack_require__(42);\nvar MAP = 'Map';\n\n// 23.1 Map Objects\nmodule.exports = __webpack_require__(61)(MAP, function (get) {\n return function Map() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.1.3.6 Map.prototype.get(key)\n get: function get(key) {\n var entry = strong.getEntry(validate(this, MAP), key);\n return entry && entry.v;\n },\n // 23.1.3.9 Map.prototype.set(key, value)\n set: function set(key, value) {\n return strong.def(validate(this, MAP), key === 0 ? 0 : key, value);\n }\n}, strong, true);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWFwLmpzP2Y0MDAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixhQUFhLG1CQUFPLENBQUMsR0FBc0I7QUFDM0MsZUFBZSxtQkFBTyxDQUFDLEVBQXdCO0FBQy9DOztBQUVBO0FBQ0EsaUJBQWlCLG1CQUFPLENBQUMsRUFBZTtBQUN4Qyx5QkFBeUIsbUVBQW1FO0FBQzVGLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTE3LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIHN0cm9uZyA9IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24tc3Ryb25nJyk7XG52YXIgdmFsaWRhdGUgPSByZXF1aXJlKCcuL192YWxpZGF0ZS1jb2xsZWN0aW9uJyk7XG52YXIgTUFQID0gJ01hcCc7XG5cbi8vIDIzLjEgTWFwIE9iamVjdHNcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fY29sbGVjdGlvbicpKE1BUCwgZnVuY3Rpb24gKGdldCkge1xuICByZXR1cm4gZnVuY3Rpb24gTWFwKCkgeyByZXR1cm4gZ2V0KHRoaXMsIGFyZ3VtZW50cy5sZW5ndGggPiAwID8gYXJndW1lbnRzWzBdIDogdW5kZWZpbmVkKTsgfTtcbn0sIHtcbiAgLy8gMjMuMS4zLjYgTWFwLnByb3RvdHlwZS5nZXQoa2V5KVxuICBnZXQ6IGZ1bmN0aW9uIGdldChrZXkpIHtcbiAgICB2YXIgZW50cnkgPSBzdHJvbmcuZ2V0RW50cnkodmFsaWRhdGUodGhpcywgTUFQKSwga2V5KTtcbiAgICByZXR1cm4gZW50cnkgJiYgZW50cnkudjtcbiAgfSxcbiAgLy8gMjMuMS4zLjkgTWFwLnByb3RvdHlwZS5zZXQoa2V5LCB2YWx1ZSlcbiAgc2V0OiBmdW5jdGlvbiBzZXQoa2V5LCB2YWx1ZSkge1xuICAgIHJldHVybiBzdHJvbmcuZGVmKHZhbGlkYXRlKHRoaXMsIE1BUCksIGtleSA9PT0gMCA/IDAgOiBrZXksIHZhbHVlKTtcbiAgfVxufSwgc3Ryb25nLCB0cnVlKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///117\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar dP = __webpack_require__(8).f;\nvar create = __webpack_require__(36);\nvar redefineAll = __webpack_require__(41);\nvar ctx = __webpack_require__(19);\nvar anInstance = __webpack_require__(39);\nvar forOf = __webpack_require__(40);\nvar $iterDefine = __webpack_require__(77);\nvar step = __webpack_require__(112);\nvar setSpecies = __webpack_require__(38);\nvar DESCRIPTORS = __webpack_require__(7);\nvar fastKey = __webpack_require__(30).fastKey;\nvar validate = __webpack_require__(42);\nvar SIZE = DESCRIPTORS ? '_s' : 'size';\n\nvar getEntry = function (that, key) {\n // fast case\n var index = fastKey(key);\n var entry;\n if (index !== 'F') return that._i[index];\n // frozen object case\n for (entry = that._f; entry; entry = entry.n) {\n if (entry.k == key) return entry;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = create(null); // index\n that._f = undefined; // first entry\n that._l = undefined; // last entry\n that[SIZE] = 0; // size\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.1.3.1 Map.prototype.clear()\n // 23.2.3.2 Set.prototype.clear()\n clear: function clear() {\n for (var that = validate(this, NAME), data = that._i, entry = that._f; entry; entry = entry.n) {\n entry.r = true;\n if (entry.p) entry.p = entry.p.n = undefined;\n delete data[entry.i];\n }\n that._f = that._l = undefined;\n that[SIZE] = 0;\n },\n // 23.1.3.3 Map.prototype.delete(key)\n // 23.2.3.4 Set.prototype.delete(value)\n 'delete': function (key) {\n var that = validate(this, NAME);\n var entry = getEntry(that, key);\n if (entry) {\n var next = entry.n;\n var prev = entry.p;\n delete that._i[entry.i];\n entry.r = true;\n if (prev) prev.n = next;\n if (next) next.p = prev;\n if (that._f == entry) that._f = next;\n if (that._l == entry) that._l = prev;\n that[SIZE]--;\n } return !!entry;\n },\n // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined)\n // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined)\n forEach: function forEach(callbackfn /* , that = undefined */) {\n validate(this, NAME);\n var f = ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3);\n var entry;\n while (entry = entry ? entry.n : this._f) {\n f(entry.v, entry.k, this);\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n }\n },\n // 23.1.3.7 Map.prototype.has(key)\n // 23.2.3.7 Set.prototype.has(value)\n has: function has(key) {\n return !!getEntry(validate(this, NAME), key);\n }\n });\n if (DESCRIPTORS) dP(C.prototype, 'size', {\n get: function () {\n return validate(this, NAME)[SIZE];\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var entry = getEntry(that, key);\n var prev, index;\n // change existing entry\n if (entry) {\n entry.v = value;\n // create new entry\n } else {\n that._l = entry = {\n i: index = fastKey(key, true), // <- index\n k: key, // <- key\n v: value, // <- value\n p: prev = that._l, // <- previous entry\n n: undefined, // <- next entry\n r: false // <- removed\n };\n if (!that._f) that._f = entry;\n if (prev) prev.n = entry;\n that[SIZE]++;\n // add to index\n if (index !== 'F') that._i[index] = entry;\n } return that;\n },\n getEntry: getEntry,\n setStrong: function (C, NAME, IS_MAP) {\n // add .keys, .values, .entries, [@@iterator]\n // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11\n $iterDefine(C, NAME, function (iterated, kind) {\n this._t = validate(iterated, NAME); // target\n this._k = kind; // kind\n this._l = undefined; // previous\n }, function () {\n var that = this;\n var kind = that._k;\n var entry = that._l;\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n // get next entry\n if (!that._t || !(that._l = entry = entry ? entry.n : that._t._f)) {\n // or finish the iteration\n that._t = undefined;\n return step(1);\n }\n // return step by kind\n if (kind == 'keys') return step(0, entry.k);\n if (kind == 'values') return step(0, entry.v);\n return step(0, [entry.k, entry.v]);\n }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);\n\n // add [@@species], 23.1.2.2, 23.2.2.2\n setSpecies(NAME);\n }\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY29sbGVjdGlvbi1zdHJvbmcuanM/YzI2YiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLFNBQVMsbUJBQU8sQ0FBQyxDQUFjO0FBQy9CLGFBQWEsbUJBQU8sQ0FBQyxFQUFrQjtBQUN2QyxrQkFBa0IsbUJBQU8sQ0FBQyxFQUFpQjtBQUMzQyxVQUFVLG1CQUFPLENBQUMsRUFBUTtBQUMxQixpQkFBaUIsbUJBQU8sQ0FBQyxFQUFnQjtBQUN6QyxZQUFZLG1CQUFPLENBQUMsRUFBVztBQUMvQixrQkFBa0IsbUJBQU8sQ0FBQyxFQUFnQjtBQUMxQyxXQUFXLG1CQUFPLENBQUMsR0FBYztBQUNqQyxpQkFBaUIsbUJBQU8sQ0FBQyxFQUFnQjtBQUN6QyxrQkFBa0IsbUJBQU8sQ0FBQyxDQUFnQjtBQUMxQyxjQUFjLG1CQUFPLENBQUMsRUFBUztBQUMvQixlQUFlLG1CQUFPLENBQUMsRUFBd0I7QUFDL0M7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLE9BQU87QUFDOUI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCLDZCQUE2QjtBQUM3QiwwQkFBMEI7QUFDMUIsMEJBQTBCO0FBQzFCLHFCQUFxQjtBQUNyQjtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhFQUE4RSxPQUFPO0FBQ3JGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlDQUF5QztBQUN6QyxxQkFBcUI7QUFDckIsMEJBQTBCO0FBQzFCLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjExOC5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpO1xudmFyIHJlZGVmaW5lQWxsID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUtYWxsJyk7XG52YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG52YXIgZm9yT2YgPSByZXF1aXJlKCcuL19mb3Itb2YnKTtcbnZhciAkaXRlckRlZmluZSA9IHJlcXVpcmUoJy4vX2l0ZXItZGVmaW5lJyk7XG52YXIgc3RlcCA9IHJlcXVpcmUoJy4vX2l0ZXItc3RlcCcpO1xudmFyIHNldFNwZWNpZXMgPSByZXF1aXJlKCcuL19zZXQtc3BlY2llcycpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKTtcbnZhciBmYXN0S2V5ID0gcmVxdWlyZSgnLi9fbWV0YScpLmZhc3RLZXk7XG52YXIgdmFsaWRhdGUgPSByZXF1aXJlKCcuL192YWxpZGF0ZS1jb2xsZWN0aW9uJyk7XG52YXIgU0laRSA9IERFU0NSSVBUT1JTID8gJ19zJyA6ICdzaXplJztcblxudmFyIGdldEVudHJ5ID0gZnVuY3Rpb24gKHRoYXQsIGtleSkge1xuICAvLyBmYXN0IGNhc2VcbiAgdmFyIGluZGV4ID0gZmFzdEtleShrZXkpO1xuICB2YXIgZW50cnk7XG4gIGlmIChpbmRleCAhPT0gJ0YnKSByZXR1cm4gdGhhdC5faVtpbmRleF07XG4gIC8vIGZyb3plbiBvYmplY3QgY2FzZVxuICBmb3IgKGVudHJ5ID0gdGhhdC5fZjsgZW50cnk7IGVudHJ5ID0gZW50cnkubikge1xuICAgIGlmIChlbnRyeS5rID09IGtleSkgcmV0dXJuIGVudHJ5O1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZ2V0Q29uc3RydWN0b3I6IGZ1bmN0aW9uICh3cmFwcGVyLCBOQU1FLCBJU19NQVAsIEFEREVSKSB7XG4gICAgdmFyIEMgPSB3cmFwcGVyKGZ1bmN0aW9uICh0aGF0LCBpdGVyYWJsZSkge1xuICAgICAgYW5JbnN0YW5jZSh0aGF0LCBDLCBOQU1FLCAnX2knKTtcbiAgICAgIHRoYXQuX3QgPSBOQU1FOyAgICAgICAgIC8vIGNvbGxlY3Rpb24gdHlwZVxuICAgICAgdGhhdC5faSA9IGNyZWF0ZShudWxsKTsgLy8gaW5kZXhcbiAgICAgIHRoYXQuX2YgPSB1bmRlZmluZWQ7ICAgIC8vIGZpcnN0IGVudHJ5XG4gICAgICB0aGF0Ll9sID0gdW5kZWZpbmVkOyAgICAvLyBsYXN0IGVudHJ5XG4gICAgICB0aGF0W1NJWkVdID0gMDsgICAgICAgICAvLyBzaXplXG4gICAgICBpZiAoaXRlcmFibGUgIT0gdW5kZWZpbmVkKSBmb3JPZihpdGVyYWJsZSwgSVNfTUFQLCB0aGF0W0FEREVSXSwgdGhhdCk7XG4gICAgfSk7XG4gICAgcmVkZWZpbmVBbGwoQy5wcm90b3R5cGUsIHtcbiAgICAgIC8vIDIzLjEuMy4xIE1hcC5wcm90b3R5cGUuY2xlYXIoKVxuICAgICAgLy8gMjMuMi4zLjIgU2V0LnByb3RvdHlwZS5jbGVhcigpXG4gICAgICBjbGVhcjogZnVuY3Rpb24gY2xlYXIoKSB7XG4gICAgICAgIGZvciAodmFyIHRoYXQgPSB2YWxpZGF0ZSh0aGlzLCBOQU1FKSwgZGF0YSA9IHRoYXQuX2ksIGVudHJ5ID0gdGhhdC5fZjsgZW50cnk7IGVudHJ5ID0gZW50cnkubikge1xuICAgICAgICAgIGVudHJ5LnIgPSB0cnVlO1xuICAgICAgICAgIGlmIChlbnRyeS5wKSBlbnRyeS5wID0gZW50cnkucC5uID0gdW5kZWZpbmVkO1xuICAgICAgICAgIGRlbGV0ZSBkYXRhW2VudHJ5LmldO1xuICAgICAgICB9XG4gICAgICAgIHRoYXQuX2YgPSB0aGF0Ll9sID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGF0W1NJWkVdID0gMDtcbiAgICAgIH0sXG4gICAgICAvLyAyMy4xLjMuMyBNYXAucHJvdG90eXBlLmRlbGV0ZShrZXkpXG4gICAgICAvLyAyMy4yLjMuNCBTZXQucHJvdG90eXBlLmRlbGV0ZSh2YWx1ZSlcbiAgICAgICdkZWxldGUnOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHZhciB0aGF0ID0gdmFsaWRhdGUodGhpcywgTkFNRSk7XG4gICAgICAgIHZhciBlbnRyeSA9IGdldEVudHJ5KHRoYXQsIGtleSk7XG4gICAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICAgIHZhciBuZXh0ID0gZW50cnkubjtcbiAgICAgICAgICB2YXIgcHJldiA9IGVudHJ5LnA7XG4gICAgICAgICAgZGVsZXRlIHRoYXQuX2lbZW50cnkuaV07XG4gICAgICAgICAgZW50cnkuciA9IHRydWU7XG4gICAgICAgICAgaWYgKHByZXYpIHByZXYubiA9IG5leHQ7XG4gICAgICAgICAgaWYgKG5leHQpIG5leHQucCA9IHByZXY7XG4gICAgICAgICAgaWYgKHRoYXQuX2YgPT0gZW50cnkpIHRoYXQuX2YgPSBuZXh0O1xuICAgICAgICAgIGlmICh0aGF0Ll9sID09IGVudHJ5KSB0aGF0Ll9sID0gcHJldjtcbiAgICAgICAgICB0aGF0W1NJWkVdLS07XG4gICAgICAgIH0gcmV0dXJuICEhZW50cnk7XG4gICAgICB9LFxuICAgICAgLy8gMjMuMi4zLjYgU2V0LnByb3RvdHlwZS5mb3JFYWNoKGNhbGxiYWNrZm4sIHRoaXNBcmcgPSB1bmRlZmluZWQpXG4gICAgICAvLyAyMy4xLjMuNSBNYXAucHJvdG90eXBlLmZvckVhY2goY2FsbGJhY2tmbiwgdGhpc0FyZyA9IHVuZGVmaW5lZClcbiAgICAgIGZvckVhY2g6IGZ1bmN0aW9uIGZvckVhY2goY2FsbGJhY2tmbiAvKiAsIHRoYXQgPSB1bmRlZmluZWQgKi8pIHtcbiAgICAgICAgdmFsaWRhdGUodGhpcywgTkFNRSk7XG4gICAgICAgIHZhciBmID0gY3R4KGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkLCAzKTtcbiAgICAgICAgdmFyIGVudHJ5O1xuICAgICAgICB3aGlsZSAoZW50cnkgPSBlbnRyeSA/IGVudHJ5Lm4gOiB0aGlzLl9mKSB7XG4gICAgICAgICAgZihlbnRyeS52LCBlbnRyeS5rLCB0aGlzKTtcbiAgICAgICAgICAvLyByZXZlcnQgdG8gdGhlIGxhc3QgZXhpc3RpbmcgZW50cnlcbiAgICAgICAgICB3aGlsZSAoZW50cnkgJiYgZW50cnkucikgZW50cnkgPSBlbnRyeS5wO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgLy8gMjMuMS4zLjcgTWFwLnByb3RvdHlwZS5oYXMoa2V5KVxuICAgICAgLy8gMjMuMi4zLjcgU2V0LnByb3RvdHlwZS5oYXModmFsdWUpXG4gICAgICBoYXM6IGZ1bmN0aW9uIGhhcyhrZXkpIHtcbiAgICAgICAgcmV0dXJuICEhZ2V0RW50cnkodmFsaWRhdGUodGhpcywgTkFNRSksIGtleSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKERFU0NSSVBUT1JTKSBkUChDLnByb3RvdHlwZSwgJ3NpemUnLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHZhbGlkYXRlKHRoaXMsIE5BTUUpW1NJWkVdO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBDO1xuICB9LFxuICBkZWY6IGZ1bmN0aW9uICh0aGF0LCBrZXksIHZhbHVlKSB7XG4gICAgdmFyIGVudHJ5ID0gZ2V0RW50cnkodGhhdCwga2V5KTtcbiAgICB2YXIgcHJldiwgaW5kZXg7XG4gICAgLy8gY2hhbmdlIGV4aXN0aW5nIGVudHJ5XG4gICAgaWYgKGVudHJ5KSB7XG4gICAgICBlbnRyeS52ID0gdmFsdWU7XG4gICAgLy8gY3JlYXRlIG5ldyBlbnRyeVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGF0Ll9sID0gZW50cnkgPSB7XG4gICAgICAgIGk6IGluZGV4ID0gZmFzdEtleShrZXksIHRydWUpLCAvLyA8LSBpbmRleFxuICAgICAgICBrOiBrZXksICAgICAgICAgICAgICAgICAgICAgICAgLy8gPC0ga2V5XG4gICAgICAgIHY6IHZhbHVlLCAgICAgICAgICAgICAgICAgICAgICAvLyA8LSB2YWx1ZVxuICAgICAgICBwOiBwcmV2ID0gdGhhdC5fbCwgICAgICAgICAgICAgLy8gPC0gcHJldmlvdXMgZW50cnlcbiAgICAgICAgbjogdW5kZWZpbmVkLCAgICAgICAgICAgICAgICAgIC8vIDwtIG5leHQgZW50cnlcbiAgICAgICAgcjogZmFsc2UgICAgICAgICAgICAgICAgICAgICAgIC8vIDwtIHJlbW92ZWRcbiAgICAgIH07XG4gICAgICBpZiAoIXRoYXQuX2YpIHRoYXQuX2YgPSBlbnRyeTtcbiAgICAgIGlmIChwcmV2KSBwcmV2Lm4gPSBlbnRyeTtcbiAgICAgIHRoYXRbU0laRV0rKztcbiAgICAgIC8vIGFkZCB0byBpbmRleFxuICAgICAgaWYgKGluZGV4ICE9PSAnRicpIHRoYXQuX2lbaW5kZXhdID0gZW50cnk7XG4gICAgfSByZXR1cm4gdGhhdDtcbiAgfSxcbiAgZ2V0RW50cnk6IGdldEVudHJ5LFxuICBzZXRTdHJvbmc6IGZ1bmN0aW9uIChDLCBOQU1FLCBJU19NQVApIHtcbiAgICAvLyBhZGQgLmtleXMsIC52YWx1ZXMsIC5lbnRyaWVzLCBbQEBpdGVyYXRvcl1cbiAgICAvLyAyMy4xLjMuNCwgMjMuMS4zLjgsIDIzLjEuMy4xMSwgMjMuMS4zLjEyLCAyMy4yLjMuNSwgMjMuMi4zLjgsIDIzLjIuMy4xMCwgMjMuMi4zLjExXG4gICAgJGl0ZXJEZWZpbmUoQywgTkFNRSwgZnVuY3Rpb24gKGl0ZXJhdGVkLCBraW5kKSB7XG4gICAgICB0aGlzLl90ID0gdmFsaWRhdGUoaXRlcmF0ZWQsIE5BTUUpOyAvLyB0YXJnZXRcbiAgICAgIHRoaXMuX2sgPSBraW5kOyAgICAgICAgICAgICAgICAgICAgIC8vIGtpbmRcbiAgICAgIHRoaXMuX2wgPSB1bmRlZmluZWQ7ICAgICAgICAgICAgICAgIC8vIHByZXZpb3VzXG4gICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgdmFyIGtpbmQgPSB0aGF0Ll9rO1xuICAgICAgdmFyIGVudHJ5ID0gdGhhdC5fbDtcbiAgICAgIC8vIHJldmVydCB0byB0aGUgbGFzdCBleGlzdGluZyBlbnRyeVxuICAgICAgd2hpbGUgKGVudHJ5ICYmIGVudHJ5LnIpIGVudHJ5ID0gZW50cnkucDtcbiAgICAgIC8vIGdldCBuZXh0IGVudHJ5XG4gICAgICBpZiAoIXRoYXQuX3QgfHwgISh0aGF0Ll9sID0gZW50cnkgPSBlbnRyeSA/IGVudHJ5Lm4gOiB0aGF0Ll90Ll9mKSkge1xuICAgICAgICAvLyBvciBmaW5pc2ggdGhlIGl0ZXJhdGlvblxuICAgICAgICB0aGF0Ll90ID0gdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gc3RlcCgxKTtcbiAgICAgIH1cbiAgICAgIC8vIHJldHVybiBzdGVwIGJ5IGtpbmRcbiAgICAgIGlmIChraW5kID09ICdrZXlzJykgcmV0dXJuIHN0ZXAoMCwgZW50cnkuayk7XG4gICAgICBpZiAoa2luZCA9PSAndmFsdWVzJykgcmV0dXJuIHN0ZXAoMCwgZW50cnkudik7XG4gICAgICByZXR1cm4gc3RlcCgwLCBbZW50cnkuaywgZW50cnkudl0pO1xuICAgIH0sIElTX01BUCA/ICdlbnRyaWVzJyA6ICd2YWx1ZXMnLCAhSVNfTUFQLCB0cnVlKTtcblxuICAgIC8vIGFkZCBbQEBzcGVjaWVzXSwgMjMuMS4yLjIsIDIzLjIuMi4yXG4gICAgc2V0U3BlY2llcyhOQU1FKTtcbiAgfVxufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///118\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar strong = __webpack_require__(118);\nvar validate = __webpack_require__(42);\nvar SET = 'Set';\n\n// 23.2 Set Objects\nmodule.exports = __webpack_require__(61)(SET, function (get) {\n return function Set() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.2.3.1 Set.prototype.add(value)\n add: function add(value) {\n return strong.def(validate(this, SET), value = value === 0 ? 0 : value, value);\n }\n}, strong);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc2V0LmpzPzRmN2YiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixhQUFhLG1CQUFPLENBQUMsR0FBc0I7QUFDM0MsZUFBZSxtQkFBTyxDQUFDLEVBQXdCO0FBQy9DOztBQUVBO0FBQ0EsaUJBQWlCLG1CQUFPLENBQUMsRUFBZTtBQUN4Qyx5QkFBeUIsbUVBQW1FO0FBQzVGLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTE5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIHN0cm9uZyA9IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24tc3Ryb25nJyk7XG52YXIgdmFsaWRhdGUgPSByZXF1aXJlKCcuL192YWxpZGF0ZS1jb2xsZWN0aW9uJyk7XG52YXIgU0VUID0gJ1NldCc7XG5cbi8vIDIzLjIgU2V0IE9iamVjdHNcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fY29sbGVjdGlvbicpKFNFVCwgZnVuY3Rpb24gKGdldCkge1xuICByZXR1cm4gZnVuY3Rpb24gU2V0KCkgeyByZXR1cm4gZ2V0KHRoaXMsIGFyZ3VtZW50cy5sZW5ndGggPiAwID8gYXJndW1lbnRzWzBdIDogdW5kZWZpbmVkKTsgfTtcbn0sIHtcbiAgLy8gMjMuMi4zLjEgU2V0LnByb3RvdHlwZS5hZGQodmFsdWUpXG4gIGFkZDogZnVuY3Rpb24gYWRkKHZhbHVlKSB7XG4gICAgcmV0dXJuIHN0cm9uZy5kZWYodmFsaWRhdGUodGhpcywgU0VUKSwgdmFsdWUgPSB2YWx1ZSA9PT0gMCA/IDAgOiB2YWx1ZSwgdmFsdWUpO1xuICB9XG59LCBzdHJvbmcpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///119\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar global = __webpack_require__(2);\nvar each = __webpack_require__(26)(0);\nvar redefine = __webpack_require__(12);\nvar meta = __webpack_require__(30);\nvar assign = __webpack_require__(99);\nvar weak = __webpack_require__(121);\nvar isObject = __webpack_require__(4);\nvar validate = __webpack_require__(42);\nvar NATIVE_WEAK_MAP = __webpack_require__(42);\nvar IS_IE11 = !global.ActiveXObject && 'ActiveXObject' in global;\nvar WEAK_MAP = 'WeakMap';\nvar getWeak = meta.getWeak;\nvar isExtensible = Object.isExtensible;\nvar uncaughtFrozenStore = weak.ufstore;\nvar InternalMap;\n\nvar wrapper = function (get) {\n return function WeakMap() {\n return get(this, arguments.length > 0 ? arguments[0] : undefined);\n };\n};\n\nvar methods = {\n // 23.3.3.3 WeakMap.prototype.get(key)\n get: function get(key) {\n if (isObject(key)) {\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, WEAK_MAP)).get(key);\n return data ? data[this._i] : undefined;\n }\n },\n // 23.3.3.5 WeakMap.prototype.set(key, value)\n set: function set(key, value) {\n return weak.def(validate(this, WEAK_MAP), key, value);\n }\n};\n\n// 23.3 WeakMap Objects\nvar $WeakMap = module.exports = __webpack_require__(61)(WEAK_MAP, wrapper, methods, weak, true, true);\n\n// IE11 WeakMap frozen keys fix\nif (NATIVE_WEAK_MAP && IS_IE11) {\n InternalMap = weak.getConstructor(wrapper, WEAK_MAP);\n assign(InternalMap.prototype, methods);\n meta.NEED = true;\n each(['delete', 'has', 'get', 'set'], function (key) {\n var proto = $WeakMap.prototype;\n var method = proto[key];\n redefine(proto, key, function (a, b) {\n // store frozen objects on internal weakmap shim\n if (isObject(a) && !isExtensible(a)) {\n if (!this._f) this._f = new InternalMap();\n var result = this._f[key](a, b);\n return key == 'set' ? this : result;\n // store all the rest on native weakmap\n } return method.call(this, a, b);\n });\n });\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYud2Vhay1tYXAuanM/MTBhZCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGFBQWEsbUJBQU8sQ0FBQyxDQUFXO0FBQ2hDLFdBQVcsbUJBQU8sQ0FBQyxFQUFrQjtBQUNyQyxlQUFlLG1CQUFPLENBQUMsRUFBYTtBQUNwQyxXQUFXLG1CQUFPLENBQUMsRUFBUztBQUM1QixhQUFhLG1CQUFPLENBQUMsRUFBa0I7QUFDdkMsV0FBVyxtQkFBTyxDQUFDLEdBQW9CO0FBQ3ZDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGVBQWUsbUJBQU8sQ0FBQyxFQUF3QjtBQUMvQyxzQkFBc0IsbUJBQU8sQ0FBQyxFQUF3QjtBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxnQ0FBZ0MsbUJBQU8sQ0FBQyxFQUFlOztBQUV2RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMLEdBQUc7QUFDSCIsImZpbGUiOiIxMjAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgZWFjaCA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKSgwKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG52YXIgbWV0YSA9IHJlcXVpcmUoJy4vX21ldGEnKTtcbnZhciBhc3NpZ24gPSByZXF1aXJlKCcuL19vYmplY3QtYXNzaWduJyk7XG52YXIgd2VhayA9IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24td2VhaycpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgdmFsaWRhdGUgPSByZXF1aXJlKCcuL192YWxpZGF0ZS1jb2xsZWN0aW9uJyk7XG52YXIgTkFUSVZFX1dFQUtfTUFQID0gcmVxdWlyZSgnLi9fdmFsaWRhdGUtY29sbGVjdGlvbicpO1xudmFyIElTX0lFMTEgPSAhZ2xvYmFsLkFjdGl2ZVhPYmplY3QgJiYgJ0FjdGl2ZVhPYmplY3QnIGluIGdsb2JhbDtcbnZhciBXRUFLX01BUCA9ICdXZWFrTWFwJztcbnZhciBnZXRXZWFrID0gbWV0YS5nZXRXZWFrO1xudmFyIGlzRXh0ZW5zaWJsZSA9IE9iamVjdC5pc0V4dGVuc2libGU7XG52YXIgdW5jYXVnaHRGcm96ZW5TdG9yZSA9IHdlYWsudWZzdG9yZTtcbnZhciBJbnRlcm5hbE1hcDtcblxudmFyIHdyYXBwZXIgPSBmdW5jdGlvbiAoZ2V0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBXZWFrTWFwKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgYXJndW1lbnRzLmxlbmd0aCA+IDAgPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQpO1xuICB9O1xufTtcblxudmFyIG1ldGhvZHMgPSB7XG4gIC8vIDIzLjMuMy4zIFdlYWtNYXAucHJvdG90eXBlLmdldChrZXkpXG4gIGdldDogZnVuY3Rpb24gZ2V0KGtleSkge1xuICAgIGlmIChpc09iamVjdChrZXkpKSB7XG4gICAgICB2YXIgZGF0YSA9IGdldFdlYWsoa2V5KTtcbiAgICAgIGlmIChkYXRhID09PSB0cnVlKSByZXR1cm4gdW5jYXVnaHRGcm96ZW5TdG9yZSh2YWxpZGF0ZSh0aGlzLCBXRUFLX01BUCkpLmdldChrZXkpO1xuICAgICAgcmV0dXJuIGRhdGEgPyBkYXRhW3RoaXMuX2ldIDogdW5kZWZpbmVkO1xuICAgIH1cbiAgfSxcbiAgLy8gMjMuMy4zLjUgV2Vha01hcC5wcm90b3R5cGUuc2V0KGtleSwgdmFsdWUpXG4gIHNldDogZnVuY3Rpb24gc2V0KGtleSwgdmFsdWUpIHtcbiAgICByZXR1cm4gd2Vhay5kZWYodmFsaWRhdGUodGhpcywgV0VBS19NQVApLCBrZXksIHZhbHVlKTtcbiAgfVxufTtcblxuLy8gMjMuMyBXZWFrTWFwIE9iamVjdHNcbnZhciAkV2Vha01hcCA9IG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fY29sbGVjdGlvbicpKFdFQUtfTUFQLCB3cmFwcGVyLCBtZXRob2RzLCB3ZWFrLCB0cnVlLCB0cnVlKTtcblxuLy8gSUUxMSBXZWFrTWFwIGZyb3plbiBrZXlzIGZpeFxuaWYgKE5BVElWRV9XRUFLX01BUCAmJiBJU19JRTExKSB7XG4gIEludGVybmFsTWFwID0gd2Vhay5nZXRDb25zdHJ1Y3Rvcih3cmFwcGVyLCBXRUFLX01BUCk7XG4gIGFzc2lnbihJbnRlcm5hbE1hcC5wcm90b3R5cGUsIG1ldGhvZHMpO1xuICBtZXRhLk5FRUQgPSB0cnVlO1xuICBlYWNoKFsnZGVsZXRlJywgJ2hhcycsICdnZXQnLCAnc2V0J10sIGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgcHJvdG8gPSAkV2Vha01hcC5wcm90b3R5cGU7XG4gICAgdmFyIG1ldGhvZCA9IHByb3RvW2tleV07XG4gICAgcmVkZWZpbmUocHJvdG8sIGtleSwgZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgIC8vIHN0b3JlIGZyb3plbiBvYmplY3RzIG9uIGludGVybmFsIHdlYWttYXAgc2hpbVxuICAgICAgaWYgKGlzT2JqZWN0KGEpICYmICFpc0V4dGVuc2libGUoYSkpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9mKSB0aGlzLl9mID0gbmV3IEludGVybmFsTWFwKCk7XG4gICAgICAgIHZhciByZXN1bHQgPSB0aGlzLl9mW2tleV0oYSwgYik7XG4gICAgICAgIHJldHVybiBrZXkgPT0gJ3NldCcgPyB0aGlzIDogcmVzdWx0O1xuICAgICAgLy8gc3RvcmUgYWxsIHRoZSByZXN0IG9uIG5hdGl2ZSB3ZWFrbWFwXG4gICAgICB9IHJldHVybiBtZXRob2QuY2FsbCh0aGlzLCBhLCBiKTtcbiAgICB9KTtcbiAgfSk7XG59XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///120\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar redefineAll = __webpack_require__(41);\nvar getWeak = __webpack_require__(30).getWeak;\nvar anObject = __webpack_require__(1);\nvar isObject = __webpack_require__(4);\nvar anInstance = __webpack_require__(39);\nvar forOf = __webpack_require__(40);\nvar createArrayMethod = __webpack_require__(26);\nvar $has = __webpack_require__(14);\nvar validate = __webpack_require__(42);\nvar arrayFind = createArrayMethod(5);\nvar arrayFindIndex = createArrayMethod(6);\nvar id = 0;\n\n// fallback for uncaught frozen keys\nvar uncaughtFrozenStore = function (that) {\n return that._l || (that._l = new UncaughtFrozenStore());\n};\nvar UncaughtFrozenStore = function () {\n this.a = [];\n};\nvar findUncaughtFrozen = function (store, key) {\n return arrayFind(store.a, function (it) {\n return it[0] === key;\n });\n};\nUncaughtFrozenStore.prototype = {\n get: function (key) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) return entry[1];\n },\n has: function (key) {\n return !!findUncaughtFrozen(this, key);\n },\n set: function (key, value) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) entry[1] = value;\n else this.a.push([key, value]);\n },\n 'delete': function (key) {\n var index = arrayFindIndex(this.a, function (it) {\n return it[0] === key;\n });\n if (~index) this.a.splice(index, 1);\n return !!~index;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = id++; // collection id\n that._l = undefined; // leak store for uncaught frozen objects\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.3.3.2 WeakMap.prototype.delete(key)\n // 23.4.3.3 WeakSet.prototype.delete(value)\n 'delete': function (key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME))['delete'](key);\n return data && $has(data, this._i) && delete data[this._i];\n },\n // 23.3.3.4 WeakMap.prototype.has(key)\n // 23.4.3.4 WeakSet.prototype.has(value)\n has: function has(key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME)).has(key);\n return data && $has(data, this._i);\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var data = getWeak(anObject(key), true);\n if (data === true) uncaughtFrozenStore(that).set(key, value);\n else data[that._i] = value;\n return that;\n },\n ufstore: uncaughtFrozenStore\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY29sbGVjdGlvbi13ZWFrLmpzPzY0M2UiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixrQkFBa0IsbUJBQU8sQ0FBQyxFQUFpQjtBQUMzQyxjQUFjLG1CQUFPLENBQUMsRUFBUztBQUMvQixlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxpQkFBaUIsbUJBQU8sQ0FBQyxFQUFnQjtBQUN6QyxZQUFZLG1CQUFPLENBQUMsRUFBVztBQUMvQix3QkFBd0IsbUJBQU8sQ0FBQyxFQUFrQjtBQUNsRCxXQUFXLG1CQUFPLENBQUMsRUFBUTtBQUMzQixlQUFlLG1CQUFPLENBQUMsRUFBd0I7QUFDL0M7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckIscUJBQXFCO0FBQ3JCLDBCQUEwQjtBQUMxQjtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBIiwiZmlsZSI6IjEyMS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciByZWRlZmluZUFsbCA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lLWFsbCcpO1xudmFyIGdldFdlYWsgPSByZXF1aXJlKCcuL19tZXRhJykuZ2V0V2VhaztcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG52YXIgZm9yT2YgPSByZXF1aXJlKCcuL19mb3Itb2YnKTtcbnZhciBjcmVhdGVBcnJheU1ldGhvZCA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKTtcbnZhciAkaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgdmFsaWRhdGUgPSByZXF1aXJlKCcuL192YWxpZGF0ZS1jb2xsZWN0aW9uJyk7XG52YXIgYXJyYXlGaW5kID0gY3JlYXRlQXJyYXlNZXRob2QoNSk7XG52YXIgYXJyYXlGaW5kSW5kZXggPSBjcmVhdGVBcnJheU1ldGhvZCg2KTtcbnZhciBpZCA9IDA7XG5cbi8vIGZhbGxiYWNrIGZvciB1bmNhdWdodCBmcm96ZW4ga2V5c1xudmFyIHVuY2F1Z2h0RnJvemVuU3RvcmUgPSBmdW5jdGlvbiAodGhhdCkge1xuICByZXR1cm4gdGhhdC5fbCB8fCAodGhhdC5fbCA9IG5ldyBVbmNhdWdodEZyb3plblN0b3JlKCkpO1xufTtcbnZhciBVbmNhdWdodEZyb3plblN0b3JlID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmEgPSBbXTtcbn07XG52YXIgZmluZFVuY2F1Z2h0RnJvemVuID0gZnVuY3Rpb24gKHN0b3JlLCBrZXkpIHtcbiAgcmV0dXJuIGFycmF5RmluZChzdG9yZS5hLCBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gaXRbMF0gPT09IGtleTtcbiAgfSk7XG59O1xuVW5jYXVnaHRGcm96ZW5TdG9yZS5wcm90b3R5cGUgPSB7XG4gIGdldDogZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciBlbnRyeSA9IGZpbmRVbmNhdWdodEZyb3plbih0aGlzLCBrZXkpO1xuICAgIGlmIChlbnRyeSkgcmV0dXJuIGVudHJ5WzFdO1xuICB9LFxuICBoYXM6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICByZXR1cm4gISFmaW5kVW5jYXVnaHRGcm96ZW4odGhpcywga2V5KTtcbiAgfSxcbiAgc2V0OiBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgIHZhciBlbnRyeSA9IGZpbmRVbmNhdWdodEZyb3plbih0aGlzLCBrZXkpO1xuICAgIGlmIChlbnRyeSkgZW50cnlbMV0gPSB2YWx1ZTtcbiAgICBlbHNlIHRoaXMuYS5wdXNoKFtrZXksIHZhbHVlXSk7XG4gIH0sXG4gICdkZWxldGUnOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIGluZGV4ID0gYXJyYXlGaW5kSW5kZXgodGhpcy5hLCBmdW5jdGlvbiAoaXQpIHtcbiAgICAgIHJldHVybiBpdFswXSA9PT0ga2V5O1xuICAgIH0pO1xuICAgIGlmICh+aW5kZXgpIHRoaXMuYS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIHJldHVybiAhIX5pbmRleDtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGdldENvbnN0cnVjdG9yOiBmdW5jdGlvbiAod3JhcHBlciwgTkFNRSwgSVNfTUFQLCBBRERFUikge1xuICAgIHZhciBDID0gd3JhcHBlcihmdW5jdGlvbiAodGhhdCwgaXRlcmFibGUpIHtcbiAgICAgIGFuSW5zdGFuY2UodGhhdCwgQywgTkFNRSwgJ19pJyk7XG4gICAgICB0aGF0Ll90ID0gTkFNRTsgICAgICAvLyBjb2xsZWN0aW9uIHR5cGVcbiAgICAgIHRoYXQuX2kgPSBpZCsrOyAgICAgIC8vIGNvbGxlY3Rpb24gaWRcbiAgICAgIHRoYXQuX2wgPSB1bmRlZmluZWQ7IC8vIGxlYWsgc3RvcmUgZm9yIHVuY2F1Z2h0IGZyb3plbiBvYmplY3RzXG4gICAgICBpZiAoaXRlcmFibGUgIT0gdW5kZWZpbmVkKSBmb3JPZihpdGVyYWJsZSwgSVNfTUFQLCB0aGF0W0FEREVSXSwgdGhhdCk7XG4gICAgfSk7XG4gICAgcmVkZWZpbmVBbGwoQy5wcm90b3R5cGUsIHtcbiAgICAgIC8vIDIzLjMuMy4yIFdlYWtNYXAucHJvdG90eXBlLmRlbGV0ZShrZXkpXG4gICAgICAvLyAyMy40LjMuMyBXZWFrU2V0LnByb3RvdHlwZS5kZWxldGUodmFsdWUpXG4gICAgICAnZGVsZXRlJzogZnVuY3Rpb24gKGtleSkge1xuICAgICAgICBpZiAoIWlzT2JqZWN0KGtleSkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgdmFyIGRhdGEgPSBnZXRXZWFrKGtleSk7XG4gICAgICAgIGlmIChkYXRhID09PSB0cnVlKSByZXR1cm4gdW5jYXVnaHRGcm96ZW5TdG9yZSh2YWxpZGF0ZSh0aGlzLCBOQU1FKSlbJ2RlbGV0ZSddKGtleSk7XG4gICAgICAgIHJldHVybiBkYXRhICYmICRoYXMoZGF0YSwgdGhpcy5faSkgJiYgZGVsZXRlIGRhdGFbdGhpcy5faV07XG4gICAgICB9LFxuICAgICAgLy8gMjMuMy4zLjQgV2Vha01hcC5wcm90b3R5cGUuaGFzKGtleSlcbiAgICAgIC8vIDIzLjQuMy40IFdlYWtTZXQucHJvdG90eXBlLmhhcyh2YWx1ZSlcbiAgICAgIGhhczogZnVuY3Rpb24gaGFzKGtleSkge1xuICAgICAgICBpZiAoIWlzT2JqZWN0KGtleSkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgdmFyIGRhdGEgPSBnZXRXZWFrKGtleSk7XG4gICAgICAgIGlmIChkYXRhID09PSB0cnVlKSByZXR1cm4gdW5jYXVnaHRGcm96ZW5TdG9yZSh2YWxpZGF0ZSh0aGlzLCBOQU1FKSkuaGFzKGtleSk7XG4gICAgICAgIHJldHVybiBkYXRhICYmICRoYXMoZGF0YSwgdGhpcy5faSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIEM7XG4gIH0sXG4gIGRlZjogZnVuY3Rpb24gKHRoYXQsIGtleSwgdmFsdWUpIHtcbiAgICB2YXIgZGF0YSA9IGdldFdlYWsoYW5PYmplY3Qoa2V5KSwgdHJ1ZSk7XG4gICAgaWYgKGRhdGEgPT09IHRydWUpIHVuY2F1Z2h0RnJvemVuU3RvcmUodGhhdCkuc2V0KGtleSwgdmFsdWUpO1xuICAgIGVsc2UgZGF0YVt0aGF0Ll9pXSA9IHZhbHVlO1xuICAgIHJldHVybiB0aGF0O1xuICB9LFxuICB1ZnN0b3JlOiB1bmNhdWdodEZyb3plblN0b3JlXG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///121\n")},function(module,exports,__webpack_require__){eval("// https://tc39.github.io/ecma262/#sec-toindex\nvar toInteger = __webpack_require__(21);\nvar toLength = __webpack_require__(6);\nmodule.exports = function (it) {\n if (it === undefined) return 0;\n var number = toInteger(it);\n var length = toLength(number);\n if (number !== length) throw RangeError('Wrong length!');\n return length;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8taW5kZXguanM/MDlmYSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGdCQUFnQixtQkFBTyxDQUFDLEVBQWU7QUFDdkMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMTIyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtdG9pbmRleFxudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGl0ID09PSB1bmRlZmluZWQpIHJldHVybiAwO1xuICB2YXIgbnVtYmVyID0gdG9JbnRlZ2VyKGl0KTtcbiAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKG51bWJlcik7XG4gIGlmIChudW1iZXIgIT09IGxlbmd0aCkgdGhyb3cgUmFuZ2VFcnJvcignV3JvbmcgbGVuZ3RoIScpO1xuICByZXR1cm4gbGVuZ3RoO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///122\n")},function(module,exports,__webpack_require__){eval("// all object keys, includes non-enumerable and symbols\nvar gOPN = __webpack_require__(37);\nvar gOPS = __webpack_require__(53);\nvar anObject = __webpack_require__(1);\nvar Reflect = __webpack_require__(2).Reflect;\nmodule.exports = Reflect && Reflect.ownKeys || function ownKeys(it) {\n var keys = gOPN.f(anObject(it));\n var getSymbols = gOPS.f;\n return getSymbols ? keys.concat(getSymbols(it)) : keys;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb3duLWtleXMuanM/OTkwYiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLFdBQVcsbUJBQU8sQ0FBQyxFQUFnQjtBQUNuQyxXQUFXLG1CQUFPLENBQUMsRUFBZ0I7QUFDbkMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIxMjMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBhbGwgb2JqZWN0IGtleXMsIGluY2x1ZGVzIG5vbi1lbnVtZXJhYmxlIGFuZCBzeW1ib2xzXG52YXIgZ09QTiA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJyk7XG52YXIgZ09QUyA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BzJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBSZWZsZWN0ID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuUmVmbGVjdDtcbm1vZHVsZS5leHBvcnRzID0gUmVmbGVjdCAmJiBSZWZsZWN0Lm93bktleXMgfHwgZnVuY3Rpb24gb3duS2V5cyhpdCkge1xuICB2YXIga2V5cyA9IGdPUE4uZihhbk9iamVjdChpdCkpO1xuICB2YXIgZ2V0U3ltYm9scyA9IGdPUFMuZjtcbiAgcmV0dXJuIGdldFN5bWJvbHMgPyBrZXlzLmNvbmNhdChnZXRTeW1ib2xzKGl0KSkgOiBrZXlzO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///123\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// https://tc39.github.io/proposal-flatMap/#sec-FlattenIntoArray\nvar isArray = __webpack_require__(54);\nvar isObject = __webpack_require__(4);\nvar toLength = __webpack_require__(6);\nvar ctx = __webpack_require__(19);\nvar IS_CONCAT_SPREADABLE = __webpack_require__(5)('isConcatSpreadable');\n\nfunction flattenIntoArray(target, original, source, sourceLen, start, depth, mapper, thisArg) {\n var targetIndex = start;\n var sourceIndex = 0;\n var mapFn = mapper ? ctx(mapper, thisArg, 3) : false;\n var element, spreadable;\n\n while (sourceIndex < sourceLen) {\n if (sourceIndex in source) {\n element = mapFn ? mapFn(source[sourceIndex], sourceIndex, original) : source[sourceIndex];\n\n spreadable = false;\n if (isObject(element)) {\n spreadable = element[IS_CONCAT_SPREADABLE];\n spreadable = spreadable !== undefined ? !!spreadable : isArray(element);\n }\n\n if (spreadable && depth > 0) {\n targetIndex = flattenIntoArray(target, original, element, toLength(element.length), targetIndex, depth - 1) - 1;\n } else {\n if (targetIndex >= 0x1fffffffffffff) throw TypeError();\n target[targetIndex] = element;\n }\n\n targetIndex++;\n }\n sourceIndex++;\n }\n return targetIndex;\n}\n\nmodule.exports = flattenIntoArray;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZmxhdHRlbi1pbnRvLWFycmF5LmpzP2M0NWYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxFQUFhO0FBQ25DLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLFVBQVUsbUJBQU8sQ0FBQyxFQUFRO0FBQzFCLDJCQUEyQixtQkFBTyxDQUFDLENBQVE7O0FBRTNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6IjEyNC5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtZmxhdE1hcC8jc2VjLUZsYXR0ZW5JbnRvQXJyYXlcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi9faXMtYXJyYXknKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgSVNfQ09OQ0FUX1NQUkVBREFCTEUgPSByZXF1aXJlKCcuL193a3MnKSgnaXNDb25jYXRTcHJlYWRhYmxlJyk7XG5cbmZ1bmN0aW9uIGZsYXR0ZW5JbnRvQXJyYXkodGFyZ2V0LCBvcmlnaW5hbCwgc291cmNlLCBzb3VyY2VMZW4sIHN0YXJ0LCBkZXB0aCwgbWFwcGVyLCB0aGlzQXJnKSB7XG4gIHZhciB0YXJnZXRJbmRleCA9IHN0YXJ0O1xuICB2YXIgc291cmNlSW5kZXggPSAwO1xuICB2YXIgbWFwRm4gPSBtYXBwZXIgPyBjdHgobWFwcGVyLCB0aGlzQXJnLCAzKSA6IGZhbHNlO1xuICB2YXIgZWxlbWVudCwgc3ByZWFkYWJsZTtcblxuICB3aGlsZSAoc291cmNlSW5kZXggPCBzb3VyY2VMZW4pIHtcbiAgICBpZiAoc291cmNlSW5kZXggaW4gc291cmNlKSB7XG4gICAgICBlbGVtZW50ID0gbWFwRm4gPyBtYXBGbihzb3VyY2Vbc291cmNlSW5kZXhdLCBzb3VyY2VJbmRleCwgb3JpZ2luYWwpIDogc291cmNlW3NvdXJjZUluZGV4XTtcblxuICAgICAgc3ByZWFkYWJsZSA9IGZhbHNlO1xuICAgICAgaWYgKGlzT2JqZWN0KGVsZW1lbnQpKSB7XG4gICAgICAgIHNwcmVhZGFibGUgPSBlbGVtZW50W0lTX0NPTkNBVF9TUFJFQURBQkxFXTtcbiAgICAgICAgc3ByZWFkYWJsZSA9IHNwcmVhZGFibGUgIT09IHVuZGVmaW5lZCA/ICEhc3ByZWFkYWJsZSA6IGlzQXJyYXkoZWxlbWVudCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChzcHJlYWRhYmxlICYmIGRlcHRoID4gMCkge1xuICAgICAgICB0YXJnZXRJbmRleCA9IGZsYXR0ZW5JbnRvQXJyYXkodGFyZ2V0LCBvcmlnaW5hbCwgZWxlbWVudCwgdG9MZW5ndGgoZWxlbWVudC5sZW5ndGgpLCB0YXJnZXRJbmRleCwgZGVwdGggLSAxKSAtIDE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodGFyZ2V0SW5kZXggPj0gMHgxZmZmZmZmZmZmZmZmZikgdGhyb3cgVHlwZUVycm9yKCk7XG4gICAgICAgIHRhcmdldFt0YXJnZXRJbmRleF0gPSBlbGVtZW50O1xuICAgICAgfVxuXG4gICAgICB0YXJnZXRJbmRleCsrO1xuICAgIH1cbiAgICBzb3VyY2VJbmRleCsrO1xuICB9XG4gIHJldHVybiB0YXJnZXRJbmRleDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmbGF0dGVuSW50b0FycmF5O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///124\n")},function(module,exports,__webpack_require__){eval("// https://github.com/tc39/proposal-string-pad-start-end\nvar toLength = __webpack_require__(6);\nvar repeat = __webpack_require__(74);\nvar defined = __webpack_require__(24);\n\nmodule.exports = function (that, maxLength, fillString, left) {\n var S = String(defined(that));\n var stringLength = S.length;\n var fillStr = fillString === undefined ? ' ' : String(fillString);\n var intMaxLength = toLength(maxLength);\n if (intMaxLength <= stringLength || fillStr == '') return S;\n var fillLen = intMaxLength - stringLength;\n var stringFiller = repeat.call(fillStr, Math.ceil(fillLen / fillStr.length));\n if (stringFiller.length > fillLen) stringFiller = stringFiller.slice(0, fillLen);\n return left ? stringFiller + S : S + stringFiller;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLXBhZC5qcz8yZTA4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsYUFBYSxtQkFBTyxDQUFDLEVBQWtCO0FBQ3ZDLGNBQWMsbUJBQU8sQ0FBQyxFQUFZOztBQUVsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjEyNS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXN0cmluZy1wYWQtc3RhcnQtZW5kXG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciByZXBlYXQgPSByZXF1aXJlKCcuL19zdHJpbmctcmVwZWF0Jyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGhhdCwgbWF4TGVuZ3RoLCBmaWxsU3RyaW5nLCBsZWZ0KSB7XG4gIHZhciBTID0gU3RyaW5nKGRlZmluZWQodGhhdCkpO1xuICB2YXIgc3RyaW5nTGVuZ3RoID0gUy5sZW5ndGg7XG4gIHZhciBmaWxsU3RyID0gZmlsbFN0cmluZyA9PT0gdW5kZWZpbmVkID8gJyAnIDogU3RyaW5nKGZpbGxTdHJpbmcpO1xuICB2YXIgaW50TWF4TGVuZ3RoID0gdG9MZW5ndGgobWF4TGVuZ3RoKTtcbiAgaWYgKGludE1heExlbmd0aCA8PSBzdHJpbmdMZW5ndGggfHwgZmlsbFN0ciA9PSAnJykgcmV0dXJuIFM7XG4gIHZhciBmaWxsTGVuID0gaW50TWF4TGVuZ3RoIC0gc3RyaW5nTGVuZ3RoO1xuICB2YXIgc3RyaW5nRmlsbGVyID0gcmVwZWF0LmNhbGwoZmlsbFN0ciwgTWF0aC5jZWlsKGZpbGxMZW4gLyBmaWxsU3RyLmxlbmd0aCkpO1xuICBpZiAoc3RyaW5nRmlsbGVyLmxlbmd0aCA+IGZpbGxMZW4pIHN0cmluZ0ZpbGxlciA9IHN0cmluZ0ZpbGxlci5zbGljZSgwLCBmaWxsTGVuKTtcbiAgcmV0dXJuIGxlZnQgPyBzdHJpbmdGaWxsZXIgKyBTIDogUyArIHN0cmluZ0ZpbGxlcjtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///125\n")},function(module,exports,__webpack_require__){eval("var DESCRIPTORS = __webpack_require__(7);\nvar getKeys = __webpack_require__(34);\nvar toIObject = __webpack_require__(15);\nvar isEnum = __webpack_require__(49).f;\nmodule.exports = function (isEntries) {\n return function (it) {\n var O = toIObject(it);\n var keys = getKeys(O);\n var length = keys.length;\n var i = 0;\n var result = [];\n var key;\n while (length > i) {\n key = keys[i++];\n if (!DESCRIPTORS || isEnum.call(O, key)) {\n result.push(isEntries ? [key, O[key]] : O[key]);\n }\n }\n return result;\n };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LXRvLWFycmF5LmpzPzUwNGMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsa0JBQWtCLG1CQUFPLENBQUMsQ0FBZ0I7QUFDMUMsY0FBYyxtQkFBTyxDQUFDLEVBQWdCO0FBQ3RDLGdCQUFnQixtQkFBTyxDQUFDLEVBQWU7QUFDdkMsYUFBYSxtQkFBTyxDQUFDLEVBQWU7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIxMjYuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpO1xudmFyIGdldEtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciBpc0VudW0gPSByZXF1aXJlKCcuL19vYmplY3QtcGllJykuZjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGlzRW50cmllcykge1xuICByZXR1cm4gZnVuY3Rpb24gKGl0KSB7XG4gICAgdmFyIE8gPSB0b0lPYmplY3QoaXQpO1xuICAgIHZhciBrZXlzID0gZ2V0S2V5cyhPKTtcbiAgICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICB2YXIga2V5O1xuICAgIHdoaWxlIChsZW5ndGggPiBpKSB7XG4gICAgICBrZXkgPSBrZXlzW2krK107XG4gICAgICBpZiAoIURFU0NSSVBUT1JTIHx8IGlzRW51bS5jYWxsKE8sIGtleSkpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goaXNFbnRyaWVzID8gW2tleSwgT1trZXldXSA6IE9ba2V5XSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///126\n")},function(module,exports,__webpack_require__){eval('// https://github.com/DavidBruant/Map-Set.prototype.toJSON\nvar classof = __webpack_require__(44);\nvar from = __webpack_require__(128);\nmodule.exports = function (NAME) {\n return function toJSON() {\n if (classof(this) != NAME) throw TypeError(NAME + "#toJSON isn\'t generic");\n return from(this);\n };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY29sbGVjdGlvbi10by1qc29uLmpzPzQ0YjgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsRUFBWTtBQUNsQyxXQUFXLG1CQUFPLENBQUMsR0FBd0I7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjEyNy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9EYXZpZEJydWFudC9NYXAtU2V0LnByb3RvdHlwZS50b0pTT05cbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi9fY2xhc3NvZicpO1xudmFyIGZyb20gPSByZXF1aXJlKCcuL19hcnJheS1mcm9tLWl0ZXJhYmxlJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChOQU1FKSB7XG4gIHJldHVybiBmdW5jdGlvbiB0b0pTT04oKSB7XG4gICAgaWYgKGNsYXNzb2YodGhpcykgIT0gTkFNRSkgdGhyb3cgVHlwZUVycm9yKE5BTUUgKyBcIiN0b0pTT04gaXNuJ3QgZ2VuZXJpY1wiKTtcbiAgICByZXR1cm4gZnJvbSh0aGlzKTtcbiAgfTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///127\n')},function(module,exports,__webpack_require__){eval("var forOf = __webpack_require__(40);\n\nmodule.exports = function (iter, ITERATOR) {\n var result = [];\n forOf(iter, false, result.push, result, ITERATOR);\n return result;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktZnJvbS1pdGVyYWJsZS5qcz80Mzc5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVksbUJBQU8sQ0FBQyxFQUFXOztBQUUvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjEyOC5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBmb3JPZiA9IHJlcXVpcmUoJy4vX2Zvci1vZicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVyLCBJVEVSQVRPUikge1xuICB2YXIgcmVzdWx0ID0gW107XG4gIGZvck9mKGl0ZXIsIGZhbHNlLCByZXN1bHQucHVzaCwgcmVzdWx0LCBJVEVSQVRPUik7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///128\n")},function(module,exports){eval("// https://rwaldron.github.io/proposal-math-extensions/\nmodule.exports = Math.scale || function scale(x, inLow, inHigh, outLow, outHigh) {\n if (\n arguments.length === 0\n // eslint-disable-next-line no-self-compare\n || x != x\n // eslint-disable-next-line no-self-compare\n || inLow != inLow\n // eslint-disable-next-line no-self-compare\n || inHigh != inHigh\n // eslint-disable-next-line no-self-compare\n || outLow != outLow\n // eslint-disable-next-line no-self-compare\n || outHigh != outHigh\n ) return NaN;\n if (x === Infinity || x === -Infinity) return x;\n return (x - inLow) * (outHigh - outLow) / (inHigh - inLow) + outLow;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWF0aC1zY2FsZS5qcz9lOWQyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIxMjkuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBodHRwczovL3J3YWxkcm9uLmdpdGh1Yi5pby9wcm9wb3NhbC1tYXRoLWV4dGVuc2lvbnMvXG5tb2R1bGUuZXhwb3J0cyA9IE1hdGguc2NhbGUgfHwgZnVuY3Rpb24gc2NhbGUoeCwgaW5Mb3csIGluSGlnaCwgb3V0TG93LCBvdXRIaWdoKSB7XG4gIGlmIChcbiAgICBhcmd1bWVudHMubGVuZ3RoID09PSAwXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICB8fCB4ICE9IHhcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICAgIHx8IGluTG93ICE9IGluTG93XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICB8fCBpbkhpZ2ggIT0gaW5IaWdoXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICB8fCBvdXRMb3cgIT0gb3V0TG93XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICB8fCBvdXRIaWdoICE9IG91dEhpZ2hcbiAgKSByZXR1cm4gTmFOO1xuICBpZiAoeCA9PT0gSW5maW5pdHkgfHwgeCA9PT0gLUluZmluaXR5KSByZXR1cm4geDtcbiAgcmV0dXJuICh4IC0gaW5Mb3cpICogKG91dEhpZ2ggLSBvdXRMb3cpIC8gKGluSGlnaCAtIGluTG93KSArIG91dExvdztcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///129\n")},function(e,n,t){t(131),e.exports=t(333)},function(module,exports,__webpack_require__){"use strict";eval('/* WEBPACK VAR INJECTION */(function(global) {\n\n__webpack_require__(132);\n\n__webpack_require__(329);\n\n__webpack_require__(330);\n\nif (global._babelPolyfill) {\n throw new Error("only one instance of babel-polyfill is allowed");\n}\nglobal._babelPolyfill = true;\n\nvar DEFINE_PROPERTY = "defineProperty";\nfunction define(O, key, value) {\n O[key] || Object[DEFINE_PROPERTY](O, key, {\n writable: true,\n configurable: true,\n value: value\n });\n}\n\ndefine(String.prototype, "padLeft", "".padStart);\ndefine(String.prototype, "padRight", "".padEnd);\n\n"pop,reverse,shift,keys,values,entries,indexOf,every,some,forEach,map,filter,find,findIndex,includes,join,slice,concat,push,splice,unshift,sort,lastIndexOf,reduce,reduceRight,copyWithin,fill".split(",").forEach(function (key) {\n [][key] && define(Array, key, Function.call.bind([][key]));\n});\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(93)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL2xpYi9pbmRleC5qcz9kYjRkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDhDQUFhOztBQUViLG1CQUFPLENBQUMsR0FBYzs7QUFFdEIsbUJBQU8sQ0FBQyxHQUE2Qjs7QUFFckMsbUJBQU8sQ0FBQyxHQUEwQjs7QUFFbEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLENBQUMsRSIsImZpbGUiOiIxMzEuanMiLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxucmVxdWlyZShcImNvcmUtanMvc2hpbVwiKTtcblxucmVxdWlyZShcInJlZ2VuZXJhdG9yLXJ1bnRpbWUvcnVudGltZVwiKTtcblxucmVxdWlyZShcImNvcmUtanMvZm4vcmVnZXhwL2VzY2FwZVwiKTtcblxuaWYgKGdsb2JhbC5fYmFiZWxQb2x5ZmlsbCkge1xuICB0aHJvdyBuZXcgRXJyb3IoXCJvbmx5IG9uZSBpbnN0YW5jZSBvZiBiYWJlbC1wb2x5ZmlsbCBpcyBhbGxvd2VkXCIpO1xufVxuZ2xvYmFsLl9iYWJlbFBvbHlmaWxsID0gdHJ1ZTtcblxudmFyIERFRklORV9QUk9QRVJUWSA9IFwiZGVmaW5lUHJvcGVydHlcIjtcbmZ1bmN0aW9uIGRlZmluZShPLCBrZXksIHZhbHVlKSB7XG4gIE9ba2V5XSB8fCBPYmplY3RbREVGSU5FX1BST1BFUlRZXShPLCBrZXksIHtcbiAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgdmFsdWU6IHZhbHVlXG4gIH0pO1xufVxuXG5kZWZpbmUoU3RyaW5nLnByb3RvdHlwZSwgXCJwYWRMZWZ0XCIsIFwiXCIucGFkU3RhcnQpO1xuZGVmaW5lKFN0cmluZy5wcm90b3R5cGUsIFwicGFkUmlnaHRcIiwgXCJcIi5wYWRFbmQpO1xuXG5cInBvcCxyZXZlcnNlLHNoaWZ0LGtleXMsdmFsdWVzLGVudHJpZXMsaW5kZXhPZixldmVyeSxzb21lLGZvckVhY2gsbWFwLGZpbHRlcixmaW5kLGZpbmRJbmRleCxpbmNsdWRlcyxqb2luLHNsaWNlLGNvbmNhdCxwdXNoLHNwbGljZSx1bnNoaWZ0LHNvcnQsbGFzdEluZGV4T2YscmVkdWNlLHJlZHVjZVJpZ2h0LGNvcHlXaXRoaW4sZmlsbFwiLnNwbGl0KFwiLFwiKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgW11ba2V5XSAmJiBkZWZpbmUoQXJyYXksIGtleSwgRnVuY3Rpb24uY2FsbC5iaW5kKFtdW2tleV0pKTtcbn0pOyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///131\n')},function(module,exports,__webpack_require__){eval("__webpack_require__(133);\n__webpack_require__(136);\n__webpack_require__(137);\n__webpack_require__(138);\n__webpack_require__(139);\n__webpack_require__(140);\n__webpack_require__(141);\n__webpack_require__(142);\n__webpack_require__(143);\n__webpack_require__(144);\n__webpack_require__(145);\n__webpack_require__(146);\n__webpack_require__(147);\n__webpack_require__(148);\n__webpack_require__(149);\n__webpack_require__(150);\n__webpack_require__(151);\n__webpack_require__(152);\n__webpack_require__(153);\n__webpack_require__(154);\n__webpack_require__(155);\n__webpack_require__(156);\n__webpack_require__(157);\n__webpack_require__(158);\n__webpack_require__(159);\n__webpack_require__(160);\n__webpack_require__(161);\n__webpack_require__(162);\n__webpack_require__(163);\n__webpack_require__(164);\n__webpack_require__(165);\n__webpack_require__(166);\n__webpack_require__(167);\n__webpack_require__(168);\n__webpack_require__(169);\n__webpack_require__(170);\n__webpack_require__(171);\n__webpack_require__(172);\n__webpack_require__(173);\n__webpack_require__(174);\n__webpack_require__(175);\n__webpack_require__(176);\n__webpack_require__(177);\n__webpack_require__(178);\n__webpack_require__(179);\n__webpack_require__(180);\n__webpack_require__(181);\n__webpack_require__(182);\n__webpack_require__(183);\n__webpack_require__(184);\n__webpack_require__(185);\n__webpack_require__(186);\n__webpack_require__(187);\n__webpack_require__(188);\n__webpack_require__(189);\n__webpack_require__(190);\n__webpack_require__(191);\n__webpack_require__(192);\n__webpack_require__(193);\n__webpack_require__(194);\n__webpack_require__(195);\n__webpack_require__(196);\n__webpack_require__(197);\n__webpack_require__(198);\n__webpack_require__(199);\n__webpack_require__(200);\n__webpack_require__(201);\n__webpack_require__(202);\n__webpack_require__(203);\n__webpack_require__(204);\n__webpack_require__(205);\n__webpack_require__(206);\n__webpack_require__(207);\n__webpack_require__(208);\n__webpack_require__(209);\n__webpack_require__(210);\n__webpack_require__(211);\n__webpack_require__(213);\n__webpack_require__(214);\n__webpack_require__(216);\n__webpack_require__(217);\n__webpack_require__(218);\n__webpack_require__(219);\n__webpack_require__(220);\n__webpack_require__(221);\n__webpack_require__(222);\n__webpack_require__(224);\n__webpack_require__(225);\n__webpack_require__(226);\n__webpack_require__(227);\n__webpack_require__(228);\n__webpack_require__(229);\n__webpack_require__(230);\n__webpack_require__(231);\n__webpack_require__(232);\n__webpack_require__(233);\n__webpack_require__(234);\n__webpack_require__(235);\n__webpack_require__(236);\n__webpack_require__(86);\n__webpack_require__(237);\n__webpack_require__(113);\n__webpack_require__(238);\n__webpack_require__(114);\n__webpack_require__(239);\n__webpack_require__(240);\n__webpack_require__(241);\n__webpack_require__(242);\n__webpack_require__(243);\n__webpack_require__(117);\n__webpack_require__(119);\n__webpack_require__(120);\n__webpack_require__(244);\n__webpack_require__(245);\n__webpack_require__(246);\n__webpack_require__(247);\n__webpack_require__(248);\n__webpack_require__(249);\n__webpack_require__(250);\n__webpack_require__(251);\n__webpack_require__(252);\n__webpack_require__(253);\n__webpack_require__(254);\n__webpack_require__(255);\n__webpack_require__(256);\n__webpack_require__(257);\n__webpack_require__(258);\n__webpack_require__(259);\n__webpack_require__(260);\n__webpack_require__(261);\n__webpack_require__(262);\n__webpack_require__(263);\n__webpack_require__(264);\n__webpack_require__(265);\n__webpack_require__(266);\n__webpack_require__(267);\n__webpack_require__(268);\n__webpack_require__(269);\n__webpack_require__(270);\n__webpack_require__(271);\n__webpack_require__(272);\n__webpack_require__(273);\n__webpack_require__(274);\n__webpack_require__(275);\n__webpack_require__(276);\n__webpack_require__(277);\n__webpack_require__(278);\n__webpack_require__(279);\n__webpack_require__(280);\n__webpack_require__(281);\n__webpack_require__(282);\n__webpack_require__(283);\n__webpack_require__(284);\n__webpack_require__(285);\n__webpack_require__(286);\n__webpack_require__(287);\n__webpack_require__(288);\n__webpack_require__(289);\n__webpack_require__(290);\n__webpack_require__(291);\n__webpack_require__(292);\n__webpack_require__(293);\n__webpack_require__(294);\n__webpack_require__(295);\n__webpack_require__(296);\n__webpack_require__(297);\n__webpack_require__(298);\n__webpack_require__(299);\n__webpack_require__(300);\n__webpack_require__(301);\n__webpack_require__(302);\n__webpack_require__(303);\n__webpack_require__(304);\n__webpack_require__(305);\n__webpack_require__(306);\n__webpack_require__(307);\n__webpack_require__(308);\n__webpack_require__(309);\n__webpack_require__(310);\n__webpack_require__(311);\n__webpack_require__(312);\n__webpack_require__(313);\n__webpack_require__(314);\n__webpack_require__(315);\n__webpack_require__(316);\n__webpack_require__(317);\n__webpack_require__(318);\n__webpack_require__(319);\n__webpack_require__(320);\n__webpack_require__(321);\n__webpack_require__(322);\n__webpack_require__(323);\n__webpack_require__(324);\n__webpack_require__(325);\n__webpack_require__(326);\n__webpack_require__(327);\n__webpack_require__(328);\nmodule.exports = __webpack_require__(18);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvc2hpbS5qcz82NmY5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLG1CQUFPLENBQUMsR0FBc0I7QUFDOUIsbUJBQU8sQ0FBQyxHQUE2QjtBQUNyQyxtQkFBTyxDQUFDLEdBQXNDO0FBQzlDLG1CQUFPLENBQUMsR0FBd0M7QUFDaEQsbUJBQU8sQ0FBQyxHQUFrRDtBQUMxRCxtQkFBTyxDQUFDLEdBQXVDO0FBQy9DLG1CQUFPLENBQUMsR0FBMkI7QUFDbkMsbUJBQU8sQ0FBQyxHQUE2QztBQUNyRCxtQkFBTyxDQUFDLEdBQTZCO0FBQ3JDLG1CQUFPLENBQUMsR0FBMkI7QUFDbkMsbUJBQU8sQ0FBQyxHQUF5QztBQUNqRCxtQkFBTyxDQUFDLEdBQWdDO0FBQ3hDLG1CQUFPLENBQUMsR0FBZ0M7QUFDeEMsbUJBQU8sQ0FBQyxHQUFvQztBQUM1QyxtQkFBTyxDQUFDLEdBQTZCO0FBQ3JDLG1CQUFPLENBQUMsR0FBeUI7QUFDakMsbUJBQU8sQ0FBQyxHQUF1QztBQUMvQyxtQkFBTyxDQUFDLEdBQWdDO0FBQ3hDLG1CQUFPLENBQUMsR0FBNkI7QUFDckMsbUJBQU8sQ0FBQyxHQUE2QjtBQUNyQyxtQkFBTyxDQUFDLEdBQXFDO0FBQzdDLG1CQUFPLENBQUMsR0FBeUI7QUFDakMsbUJBQU8sQ0FBQyxHQUEyQjtBQUNuQyxtQkFBTyxDQUFDLEdBQWtDO0FBQzFDLG1CQUFPLENBQUMsR0FBK0I7QUFDdkMsbUJBQU8sQ0FBQyxHQUFtQztBQUMzQyxtQkFBTyxDQUFDLEdBQThCO0FBQ3RDLG1CQUFPLENBQUMsR0FBZ0M7QUFDeEMsbUJBQU8sQ0FBQyxHQUFpQztBQUN6QyxtQkFBTyxDQUFDLEdBQTZCO0FBQ3JDLG1CQUFPLENBQUMsR0FBc0M7QUFDOUMsbUJBQU8sQ0FBQyxHQUF1QztBQUMvQyxtQkFBTyxDQUFDLEdBQXVDO0FBQy9DLG1CQUFPLENBQUMsR0FBa0M7QUFDMUMsbUJBQU8sQ0FBQyxH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QkFBTyxDQUFDLEdBQWdDO0FBQ3hDLG1CQUFPLENBQUMsR0FBb0I7QUFDNUIsbUJBQU8sQ0FBQyxHQUEwQjtBQUNsQyxtQkFBTyxDQUFDLEdBQXNCO0FBQzlCLG1CQUFPLENBQUMsR0FBeUI7QUFDakMsbUJBQU8sQ0FBQyxHQUE0QjtBQUNwQyxpQkFBaUIsbUJBQU8sQ0FBQyxFQUFpQiIsImZpbGUiOiIxMzIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJyZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN5bWJvbCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuY3JlYXRlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5kZWZpbmUtcHJvcGVydHknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmRlZmluZS1wcm9wZXJ0aWVzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmdldC1wcm90b3R5cGUtb2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmtleXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmdldC1vd24tcHJvcGVydHktbmFtZXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmZyZWV6ZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3Quc2VhbCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QucHJldmVudC1leHRlbnNpb25zJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5pcy1mcm96ZW4nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmlzLXNlYWxlZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuaXMtZXh0ZW5zaWJsZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuYXNzaWduJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5pcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3Quc2V0LXByb3RvdHlwZS1vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QudG8tc3RyaW5nJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmZ1bmN0aW9uLmJpbmQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuZnVuY3Rpb24ubmFtZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5mdW5jdGlvbi5oYXMtaW5zdGFuY2UnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucGFyc2UtaW50Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnBhcnNlLWZsb2F0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5jb25zdHJ1Y3RvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIudG8tZml4ZWQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLnRvLXByZWNpc2lvbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIuZXBzaWxvbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIuaXMtZmluaXRlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5pcy1pbnRlZ2VyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5pcy1uYW4nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLmlzLXNhZmUtaW50ZWdlcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIubWF4LXNhZmUtaW50ZWdlcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIubWluLXNhZmUtaW50ZWdlcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIucGFyc2UtZmxvYXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLnBhcnNlLWludCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmFjb3NoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguYXNpbmgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5hdGFuaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmNicnQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5jbHozMicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmNvc2gnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5leHBtMScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmZyb3VuZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmh5cG90Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguaW11bCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmxvZzEwJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGgubG9nMXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5sb2cyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguc2lnbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLnNpbmgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC50YW5oJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGgudHJ1bmMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLmZyb20tY29kZS1wb2ludCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcucmF3Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy50cmltJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuY29kZS1wb2ludC1hdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuZW5kcy13aXRoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5pbmNsdWRlcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcucmVwZWF0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5zdGFydHMtd2l0aCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuYW5jaG9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5iaWcnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLmJsaW5rJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5ib2xkJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5maXhlZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuZm9udGNvbG9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5mb250c2l6ZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuaXRhbGljcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcubGluaycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuc21hbGwnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLnN0cmlrZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuc3ViJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5zdXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuZGF0ZS5ub3cnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuZGF0ZS50by1qc29uJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmRhdGUudG8taXNvLXN0cmluZycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5kYXRlLnRvLXN0cmluZycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5kYXRlLnRvLXByaW1pdGl2ZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5pcy1hcnJheScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5mcm9tJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5Lm9mJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmpvaW4nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuc2xpY2UnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuc29ydCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5mb3ItZWFjaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5tYXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuZmlsdGVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LnNvbWUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuZXZlcnknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkucmVkdWNlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LnJlZHVjZS1yaWdodCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5pbmRleC1vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5sYXN0LWluZGV4LW9mJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmNvcHktd2l0aGluJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmZpbGwnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuZmluZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5maW5kLWluZGV4Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LnNwZWNpZXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVnZXhwLmNvbnN0cnVjdG9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZ2V4cC5leGVjJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZ2V4cC50by1zdHJpbmcnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVnZXhwLmZsYWdzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZ2V4cC5tYXRjaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWdleHAucmVwbGFjZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWdleHAuc2VhcmNoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZ2V4cC5zcGxpdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5wcm9taXNlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hcCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zZXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYud2Vhay1tYXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYud2Vhay1zZXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQuYXJyYXktYnVmZmVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLmRhdGEtdmlldycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi50eXBlZC5pbnQ4LWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLnVpbnQ4LWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLnVpbnQ4LWNsYW1wZWQtYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQuaW50MTYtYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQudWludDE2LWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLmludDMyLWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLnVpbnQzMi1hcnJheScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi50eXBlZC5mbG9hdDMyLWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLmZsb2F0NjQtYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5hcHBseScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmNvbnN0cnVjdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmRlZmluZS1wcm9wZXJ0eScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmRlbGV0ZS1wcm9wZXJ0eScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmVudW1lcmF0ZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmdldCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmdldC1wcm90b3R5cGUtb2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5oYXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5pcy1leHRlbnNpYmxlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3Qub3duLWtleXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5wcmV2ZW50LWV4dGVuc2lvbnMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5zZXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5zZXQtcHJvdG90eXBlLW9mJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LmFycmF5LmluY2x1ZGVzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LmFycmF5LmZsYXQtbWFwJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LmFycmF5LmZsYXR0ZW4nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc3RyaW5nLmF0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnN0cmluZy5wYWQtc3RhcnQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc3RyaW5nLnBhZC1lbmQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc3RyaW5nLnRyaW0tbGVmdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zdHJpbmcudHJpbS1yaWdodCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zdHJpbmcubWF0Y2gtYWxsJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnN5bWJvbC5hc3luYy1pdGVyYXRvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zeW1ib2wub2JzZXJ2YWJsZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9ycycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5vYmplY3QudmFsdWVzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC5lbnRyaWVzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC5kZWZpbmUtZ2V0dGVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC5kZWZpbmUtc2V0dGVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC5sb29rdXAtZ2V0dGVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC5sb29rdXAtc2V0dGVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hcC50by1qc29uJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnNldC50by1qc29uJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hcC5vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zZXQub2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcud2Vhay1tYXAub2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcud2Vhay1zZXQub2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWFwLmZyb20nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc2V0LmZyb20nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcud2Vhay1tYXAuZnJvbScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy53ZWFrLXNldC5mcm9tJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lmdsb2JhbCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zeXN0ZW0uZ2xvYmFsJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LmVycm9yLmlzLWVycm9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGguY2xhbXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5kZWctcGVyLXJhZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLmRlZ3JlZXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5mc2NhbGUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5pYWRkaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLmlzdWJoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGguaW11bGgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5yYWQtcGVyLWRlZycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLnJhZGlhbnMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5zY2FsZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLnVtdWxoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGguc2lnbmJpdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5wcm9taXNlLmZpbmFsbHknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucHJvbWlzZS50cnknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5kZWZpbmUtbWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5kZWxldGUtbWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtbWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtbWV0YWRhdGEta2V5cycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5yZWZsZWN0LmdldC1vd24tbWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtb3duLW1ldGFkYXRhLWtleXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5oYXMtbWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5oYXMtb3duLW1ldGFkYXRhJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnJlZmxlY3QubWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuYXNhcCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5vYnNlcnZhYmxlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvd2ViLnRpbWVycycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL3dlYi5pbW1lZGlhdGUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy93ZWIuZG9tLml0ZXJhYmxlJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vbW9kdWxlcy9fY29yZScpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///132\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// ECMAScript 6 symbols shim\nvar global = __webpack_require__(2);\nvar has = __webpack_require__(14);\nvar DESCRIPTORS = __webpack_require__(7);\nvar $export = __webpack_require__(0);\nvar redefine = __webpack_require__(12);\nvar META = __webpack_require__(30).KEY;\nvar $fails = __webpack_require__(3);\nvar shared = __webpack_require__(47);\nvar setToStringTag = __webpack_require__(43);\nvar uid = __webpack_require__(33);\nvar wks = __webpack_require__(5);\nvar wksExt = __webpack_require__(95);\nvar wksDefine = __webpack_require__(67);\nvar enumKeys = __webpack_require__(135);\nvar isArray = __webpack_require__(54);\nvar anObject = __webpack_require__(1);\nvar isObject = __webpack_require__(4);\nvar toObject = __webpack_require__(9);\nvar toIObject = __webpack_require__(15);\nvar toPrimitive = __webpack_require__(23);\nvar createDesc = __webpack_require__(32);\nvar _create = __webpack_require__(36);\nvar gOPNExt = __webpack_require__(98);\nvar $GOPD = __webpack_require__(16);\nvar $GOPS = __webpack_require__(53);\nvar $DP = __webpack_require__(8);\nvar $keys = __webpack_require__(34);\nvar gOPD = $GOPD.f;\nvar dP = $DP.f;\nvar gOPN = gOPNExt.f;\nvar $Symbol = global.Symbol;\nvar $JSON = global.JSON;\nvar _stringify = $JSON && $JSON.stringify;\nvar PROTOTYPE = 'prototype';\nvar HIDDEN = wks('_hidden');\nvar TO_PRIMITIVE = wks('toPrimitive');\nvar isEnum = {}.propertyIsEnumerable;\nvar SymbolRegistry = shared('symbol-registry');\nvar AllSymbols = shared('symbols');\nvar OPSymbols = shared('op-symbols');\nvar ObjectProto = Object[PROTOTYPE];\nvar USE_NATIVE = typeof $Symbol == 'function' && !!$GOPS.f;\nvar QObject = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDesc = DESCRIPTORS && $fails(function () {\n return _create(dP({}, 'a', {\n get: function () { return dP(this, 'a', { value: 7 }).a; }\n })).a != 7;\n}) ? function (it, key, D) {\n var protoDesc = gOPD(ObjectProto, key);\n if (protoDesc) delete ObjectProto[key];\n dP(it, key, D);\n if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc);\n} : dP;\n\nvar wrap = function (tag) {\n var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);\n sym._k = tag;\n return sym;\n};\n\nvar isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n return it instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(it, key, D) {\n if (it === ObjectProto) $defineProperty(OPSymbols, key, D);\n anObject(it);\n key = toPrimitive(key, true);\n anObject(D);\n if (has(AllSymbols, key)) {\n if (!D.enumerable) {\n if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {}));\n it[HIDDEN][key] = true;\n } else {\n if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;\n D = _create(D, { enumerable: createDesc(0, false) });\n } return setSymbolDesc(it, key, D);\n } return dP(it, key, D);\n};\nvar $defineProperties = function defineProperties(it, P) {\n anObject(it);\n var keys = enumKeys(P = toIObject(P));\n var i = 0;\n var l = keys.length;\n var key;\n while (l > i) $defineProperty(it, key = keys[i++], P[key]);\n return it;\n};\nvar $create = function create(it, P) {\n return P === undefined ? _create(it) : $defineProperties(_create(it), P);\n};\nvar $propertyIsEnumerable = function propertyIsEnumerable(key) {\n var E = isEnum.call(this, key = toPrimitive(key, true));\n if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false;\n return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;\n};\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {\n it = toIObject(it);\n key = toPrimitive(key, true);\n if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return;\n var D = gOPD(it, key);\n if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;\n return D;\n};\nvar $getOwnPropertyNames = function getOwnPropertyNames(it) {\n var names = gOPN(toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);\n } return result;\n};\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(it) {\n var IS_OP = it === ObjectProto;\n var names = gOPN(IS_OP ? OPSymbols : toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]);\n } return result;\n};\n\n// 19.4.1.1 Symbol([description])\nif (!USE_NATIVE) {\n $Symbol = function Symbol() {\n if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');\n var tag = uid(arguments.length > 0 ? arguments[0] : undefined);\n var $set = function (value) {\n if (this === ObjectProto) $set.call(OPSymbols, value);\n if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n setSymbolDesc(this, tag, createDesc(1, value));\n };\n if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set });\n return wrap(tag);\n };\n redefine($Symbol[PROTOTYPE], 'toString', function toString() {\n return this._k;\n });\n\n $GOPD.f = $getOwnPropertyDescriptor;\n $DP.f = $defineProperty;\n __webpack_require__(37).f = gOPNExt.f = $getOwnPropertyNames;\n __webpack_require__(49).f = $propertyIsEnumerable;\n $GOPS.f = $getOwnPropertySymbols;\n\n if (DESCRIPTORS && !__webpack_require__(29)) {\n redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);\n }\n\n wksExt.f = function (name) {\n return wrap(wks(name));\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol });\n\nfor (var es6Symbols = (\n // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14\n 'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'\n).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]);\n\nfor (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]);\n\n$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {\n // 19.4.2.1 Symbol.for(key)\n 'for': function (key) {\n return has(SymbolRegistry, key += '')\n ? SymbolRegistry[key]\n : SymbolRegistry[key] = $Symbol(key);\n },\n // 19.4.2.5 Symbol.keyFor(sym)\n keyFor: function keyFor(sym) {\n if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');\n for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key;\n },\n useSetter: function () { setter = true; },\n useSimple: function () { setter = false; }\n});\n\n$export($export.S + $export.F * !USE_NATIVE, 'Object', {\n // 19.1.2.2 Object.create(O [, Properties])\n create: $create,\n // 19.1.2.4 Object.defineProperty(O, P, Attributes)\n defineProperty: $defineProperty,\n // 19.1.2.3 Object.defineProperties(O, Properties)\n defineProperties: $defineProperties,\n // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n // 19.1.2.7 Object.getOwnPropertyNames(O)\n getOwnPropertyNames: $getOwnPropertyNames,\n // 19.1.2.8 Object.getOwnPropertySymbols(O)\n getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// Chrome 38 and 39 `Object.getOwnPropertySymbols` fails on primitives\n// https://bugs.chromium.org/p/v8/issues/detail?id=3443\nvar FAILS_ON_PRIMITIVES = $fails(function () { $GOPS.f(1); });\n\n$export($export.S + $export.F * FAILS_ON_PRIMITIVES, 'Object', {\n getOwnPropertySymbols: function getOwnPropertySymbols(it) {\n return $GOPS.f(toObject(it));\n }\n});\n\n// 24.3.2 JSON.stringify(value [, replacer [, space]])\n$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () {\n var S = $Symbol();\n // MS Edge converts symbol values to JSON as {}\n // WebKit converts symbol values to JSON as null\n // V8 throws on boxed symbols\n return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}';\n})), 'JSON', {\n stringify: function stringify(it) {\n var args = [it];\n var i = 1;\n var replacer, $replacer;\n while (arguments.length > i) args.push(arguments[i++]);\n $replacer = replacer = args[1];\n if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n if (!isArray(replacer)) replacer = function (key, value) {\n if (typeof $replacer == 'function') value = $replacer.call(this, key, value);\n if (!isSymbol(value)) return value;\n };\n args[1] = replacer;\n return _stringify.apply($JSON, args);\n }\n});\n\n// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)\n$Symbol[PROTOTYPE][TO_PRIMITIVE] || __webpack_require__(11)($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n// 19.4.3.5 Symbol.prototype[@@toStringTag]\nsetToStringTag($Symbol, 'Symbol');\n// 20.2.1.9 Math[@@toStringTag]\nsetToStringTag(Math, 'Math', true);\n// 24.3.3 JSON[@@toStringTag]\nsetToStringTag(global.JSON, 'JSON', true);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3ltYm9sLmpzPzhhODEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBLGFBQWEsbUJBQU8sQ0FBQyxDQUFXO0FBQ2hDLFVBQVUsbUJBQU8sQ0FBQyxFQUFRO0FBQzFCLGtCQUFrQixtQkFBTyxDQUFDLENBQWdCO0FBQzFDLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyxFQUFhO0FBQ3BDLFdBQVcsbUJBQU8sQ0FBQyxFQUFTO0FBQzVCLGFBQWEsbUJBQU8sQ0FBQyxDQUFVO0FBQy9CLGFBQWEsbUJBQU8sQ0FBQyxFQUFXO0FBQ2hDLHFCQUFxQixtQkFBTyxDQUFDLEVBQXNCO0FBQ25ELFVBQVUsbUJBQU8sQ0FBQyxFQUFRO0FBQzFCLFVBQVUsbUJBQU8sQ0FBQyxDQUFRO0FBQzFCLGFBQWEsbUJBQU8sQ0FBQyxFQUFZO0FBQ2pDLGdCQUFnQixtQkFBTyxDQUFDLEVBQWU7QUFDdkMsZUFBZSxtQkFBTyxDQUFDLEdBQWM7QUFDckMsY0FBYyxtQkFBTyxDQUFDLEVBQWE7QUFDbkMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2QyxrQkFBa0IsbUJBQU8sQ0FBQyxFQUFpQjtBQUMzQyxpQkFBaUIsbUJBQU8sQ0FBQyxFQUFrQjtBQUMzQyxjQUFjLG1CQUFPLENBQUMsRUFBa0I7QUFDeEMsY0FBYyxtQkFBTyxDQUFDLEVBQW9CO0FBQzFDLFlBQVksbUJBQU8sQ0FBQyxFQUFnQjtBQUNwQyxZQUFZLG1CQUFPLENBQUMsRUFBZ0I7QUFDcEMsVUFBVSxtQkFBTyxDQUFDLENBQWM7QUFDaEMsWUFBWSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxzQkFBc0I7QUFDdEIsc0JBQXNCLHVCQUF1QixXQUFXLElBQUk7QUFDNUQsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyREFBMkQ7QUFDM0Q7QUFDQSxLQUFLO0FBQ0w7QUFDQSxzQkFBc0IsbUNBQW1DO0FBQ3pELEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdFQUFnRSxnQ0FBZ0M7QUFDaEc7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxFQUFFLG1CQUFPLENBQUMsRUFBZ0I7QUFDMUIsRUFBRSxtQkFBTyxDQUFDLEVBQWU7QUFDekI7O0FBRUEsc0JBQXNCLG1CQUFPLENBQUMsRUFBWTtBQUMxQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDBEQUEwRCxrQkFBa0I7O0FBRTVFO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQix1QkFBdUI7O0FBRTNDLG9EQUFvRCw2QkFBNkI7O0FBRWpGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCwwQkFBMEIsZUFBZSxFQUFFO0FBQzNDLDBCQUEwQixnQkFBZ0I7QUFDMUMsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBLDhDQUE4QyxZQUFZLEVBQUU7O0FBRTVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvREFBb0QsT0FBTyxRQUFRLGlDQUFpQztBQUNwRyxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0VBQXdFO0FBQ3hFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBLG9DQUFvQyxtQkFBTyxDQUFDLEVBQVM7QUFDckQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjEzMy5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIEVDTUFTY3JpcHQgNiBzeW1ib2xzIHNoaW1cbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUnKTtcbnZhciBNRVRBID0gcmVxdWlyZSgnLi9fbWV0YScpLktFWTtcbnZhciAkZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4vX3NoYXJlZCcpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuL191aWQnKTtcbnZhciB3a3MgPSByZXF1aXJlKCcuL193a3MnKTtcbnZhciB3a3NFeHQgPSByZXF1aXJlKCcuL193a3MtZXh0Jyk7XG52YXIgd2tzRGVmaW5lID0gcmVxdWlyZSgnLi9fd2tzLWRlZmluZScpO1xudmFyIGVudW1LZXlzID0gcmVxdWlyZSgnLi9fZW51bS1rZXlzJyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4vX2lzLWFycmF5Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG52YXIgY3JlYXRlRGVzYyA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKTtcbnZhciBfY3JlYXRlID0gcmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpO1xudmFyIGdPUE5FeHQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wbi1leHQnKTtcbnZhciAkR09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJyk7XG52YXIgJEdPUFMgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wcycpO1xudmFyICREUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xudmFyICRrZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcbnZhciBnT1BEID0gJEdPUEQuZjtcbnZhciBkUCA9ICREUC5mO1xudmFyIGdPUE4gPSBnT1BORXh0LmY7XG52YXIgJFN5bWJvbCA9IGdsb2JhbC5TeW1ib2w7XG52YXIgJEpTT04gPSBnbG9iYWwuSlNPTjtcbnZhciBfc3RyaW5naWZ5ID0gJEpTT04gJiYgJEpTT04uc3RyaW5naWZ5O1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xudmFyIEhJRERFTiA9IHdrcygnX2hpZGRlbicpO1xudmFyIFRPX1BSSU1JVElWRSA9IHdrcygndG9QcmltaXRpdmUnKTtcbnZhciBpc0VudW0gPSB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbnZhciBTeW1ib2xSZWdpc3RyeSA9IHNoYXJlZCgnc3ltYm9sLXJlZ2lzdHJ5Jyk7XG52YXIgQWxsU3ltYm9scyA9IHNoYXJlZCgnc3ltYm9scycpO1xudmFyIE9QU3ltYm9scyA9IHNoYXJlZCgnb3Atc3ltYm9scycpO1xudmFyIE9iamVjdFByb3RvID0gT2JqZWN0W1BST1RPVFlQRV07XG52YXIgVVNFX05BVElWRSA9IHR5cGVvZiAkU3ltYm9sID09ICdmdW5jdGlvbicgJiYgISEkR09QUy5mO1xudmFyIFFPYmplY3QgPSBnbG9iYWwuUU9iamVjdDtcbi8vIERvbid0IHVzZSBzZXR0ZXJzIGluIFF0IFNjcmlwdCwgaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzE3M1xudmFyIHNldHRlciA9ICFRT2JqZWN0IHx8ICFRT2JqZWN0W1BST1RPVFlQRV0gfHwgIVFPYmplY3RbUFJPVE9UWVBFXS5maW5kQ2hpbGQ7XG5cbi8vIGZhbGxiYWNrIGZvciBvbGQgQW5kcm9pZCwgaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTY4N1xudmFyIHNldFN5bWJvbERlc2MgPSBERVNDUklQVE9SUyAmJiAkZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gX2NyZWF0ZShkUCh7fSwgJ2EnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBkUCh0aGlzLCAnYScsIHsgdmFsdWU6IDcgfSkuYTsgfVxuICB9KSkuYSAhPSA3O1xufSkgPyBmdW5jdGlvbiAoaXQsIGtleSwgRCkge1xuICB2YXIgcHJvdG9EZXNjID0gZ09QRChPYmplY3RQcm90bywga2V5KTtcbiAgaWYgKHByb3RvRGVzYykgZGVsZXRlIE9iamVjdFByb3RvW2tleV07XG4gIGRQKGl0LCBrZXksIEQpO1xuICBpZiAocHJvdG9EZXNjICYmIGl0ICE9PSBPYmplY3RQcm90bykgZFAoT2JqZWN0UHJvdG8sIGtleSwgcHJvdG9EZXNjKTtcbn0gOiBkUDtcblxudmFyIHdyYXAgPSBmdW5jdGlvbiAodGFnKSB7XG4gIHZhciBzeW0gPSBBbGxTeW1ib2xzW3RhZ10gPSBfY3JlYXRlKCRTeW1ib2xbUFJPVE9UWVBFXSk7XG4gIHN5bS5fayA9IHRhZztcbiAgcmV0dXJuIHN5bTtcbn07XG5cbnZhciBpc1N5bWJvbCA9IFVTRV9OQVRJVkUgJiYgdHlwZW9mICRTeW1ib2wuaXRlcmF0b3IgPT0gJ3N5bWJvbCcgPyBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnc3ltYm9sJztcbn0gOiBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0IGluc3RhbmNlb2YgJFN5bWJvbDtcbn07XG5cbnZhciAkZGVmaW5lUHJvcGVydHkgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShpdCwga2V5LCBEKSB7XG4gIGlmIChpdCA9PT0gT2JqZWN0UHJvdG8pICRkZWZpbmVQcm9wZXJ0eShPUFN5bWJvbHMsIGtleSwgRCk7XG4gIGFuT2JqZWN0KGl0KTtcbiAga2V5ID0gdG9QcmltaXRpdmUoa2V5LCB0cnVlKTtcbiAgYW5PYmplY3QoRCk7XG4gIGlmIChoYXMoQWxsU3ltYm9scywga2V5KSkge1xuICAgIGlmICghRC5lbnVtZXJhYmxlKSB7XG4gICAgICBpZiAoIWhhcyhpdCwgSElEREVOKSkgZFAoaXQsIEhJRERFTiwgY3JlYXRlRGVzYygxLCB7fSkpO1xuICAgICAgaXRbSElEREVOXVtrZXldID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGhhcyhpdCwgSElEREVOKSAmJiBpdFtISURERU5dW2tleV0pIGl0W0hJRERFTl1ba2V5XSA9IGZhbHNlO1xuICAgICAgRCA9IF9jcmVhdGUoRCwgeyBlbnVtZXJhYmxlOiBjcmVhdGVEZXNjKDAsIGZhbHNlKSB9KTtcbiAgICB9IHJldHVybiBzZXRTeW1ib2xEZXNjKGl0LCBrZXksIEQpO1xuICB9IHJldHVybiBkUChpdCwga2V5LCBEKTtcbn07XG52YXIgJGRlZmluZVByb3BlcnRpZXMgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKGl0LCBQKSB7XG4gIGFuT2JqZWN0KGl0KTtcbiAgdmFyIGtleXMgPSBlbnVtS2V5cyhQID0gdG9JT2JqZWN0KFApKTtcbiAgdmFyIGkgPSAwO1xuICB2YXIgbCA9IGtleXMubGVuZ3RoO1xuICB2YXIga2V5O1xuICB3aGlsZSAobCA+IGkpICRkZWZpbmVQcm9wZXJ0eShpdCwga2V5ID0ga2V5c1tpKytdLCBQW2tleV0pO1xuICByZXR1cm4gaXQ7XG59O1xudmFyICRjcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUoaXQsIFApIHtcbiAgcmV0dXJuIFAgPT09IHVuZGVmaW5lZCA/IF9jcmVhdGUoaXQpIDogJGRlZmluZVByb3BlcnRpZXMoX2NyZWF0ZShpdCksIFApO1xufTtcbnZhciAkcHJvcGVydHlJc0VudW1lcmFibGUgPSBmdW5jdGlvbiBwcm9wZXJ0eUlzRW51bWVyYWJsZShrZXkpIHtcbiAgdmFyIEUgPSBpc0VudW0uY2FsbCh0aGlzLCBrZXkgPSB0b1ByaW1pdGl2ZShrZXksIHRydWUpKTtcbiAgaWYgKHRoaXMgPT09IE9iamVjdFByb3RvICYmIGhhcyhBbGxTeW1ib2xzLCBrZXkpICYmICFoYXMoT1BTeW1ib2xzLCBrZXkpKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiBFIHx8ICFoYXModGhpcywga2V5KSB8fCAhaGFzKEFsbFN5bWJvbHMsIGtleSkgfHwgaGFzKHRoaXMsIEhJRERFTikgJiYgdGhpc1tISURERU5dW2tleV0gPyBFIDogdHJ1ZTtcbn07XG52YXIgJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihpdCwga2V5KSB7XG4gIGl0ID0gdG9JT2JqZWN0KGl0KTtcbiAga2V5ID0gdG9QcmltaXRpdmUoa2V5LCB0cnVlKTtcbiAgaWYgKGl0ID09PSBPYmplY3RQcm90byAmJiBoYXMoQWxsU3ltYm9scywga2V5KSAmJiAhaGFzKE9QU3ltYm9scywga2V5KSkgcmV0dXJuO1xuICB2YXIgRCA9IGdPUEQoaXQsIGtleSk7XG4gIGlmIChEICYmIGhhcyhBbGxTeW1ib2xzLCBrZXkpICYmICEoaGFzKGl0LCBISURERU4pICYmIGl0W0hJRERFTl1ba2V5XSkpIEQuZW51bWVyYWJsZSA9IHRydWU7XG4gIHJldHVybiBEO1xufTtcbnZhciAkZ2V0T3duUHJvcGVydHlOYW1lcyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoaXQpIHtcbiAgdmFyIG5hbWVzID0gZ09QTih0b0lPYmplY3QoaXQpKTtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIgaSA9IDA7XG4gIHZhciBrZXk7XG4gIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSB7XG4gICAgaWYgKCFoYXMoQWxsU3ltYm9scywga2V5ID0gbmFtZXNbaSsrXSkgJiYga2V5ICE9IEhJRERFTiAmJiBrZXkgIT0gTUVUQSkgcmVzdWx0LnB1c2goa2V5KTtcbiAgfSByZXR1cm4gcmVzdWx0O1xufTtcbnZhciAkZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlTeW1ib2xzKGl0KSB7XG4gIHZhciBJU19PUCA9IGl0ID09PSBPYmplY3RQcm90bztcbiAgdmFyIG5hbWVzID0gZ09QTihJU19PUCA/IE9QU3ltYm9scyA6IHRvSU9iamVjdChpdCkpO1xuICB2YXIgcmVzdWx0ID0gW107XG4gIHZhciBpID0gMDtcbiAgdmFyIGtleTtcbiAgd2hpbGUgKG5hbWVzLmxlbmd0aCA+IGkpIHtcbiAgICBpZiAoaGFzKEFsbFN5bWJvbHMsIGtleSA9IG5hbWVzW2krK10pICYmIChJU19PUCA/IGhhcyhPYmplY3RQcm90bywga2V5KSA6IHRydWUpKSByZXN1bHQucHVzaChBbGxTeW1ib2xzW2tleV0pO1xuICB9IHJldHVybiByZXN1bHQ7XG59O1xuXG4vLyAxOS40LjEuMSBTeW1ib2woW2Rlc2NyaXB0aW9uXSlcbmlmICghVVNFX05BVElWRSkge1xuICAkU3ltYm9sID0gZnVuY3Rpb24gU3ltYm9sKCkge1xuICAgIGlmICh0aGlzIGluc3RhbmNlb2YgJFN5bWJvbCkgdGhyb3cgVHlwZUVycm9yKCdTeW1ib2wgaXMgbm90IGEgY29uc3RydWN0b3IhJyk7XG4gICAgdmFyIHRhZyA9IHVpZChhcmd1bWVudHMubGVuZ3RoID4gMCA/IGFyZ3VtZW50c1swXSA6IHVuZGVmaW5lZCk7XG4gICAgdmFyICRzZXQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIGlmICh0aGlzID09PSBPYmplY3RQcm90bykgJHNldC5jYWxsKE9QU3ltYm9scywgdmFsdWUpO1xuICAgICAgaWYgKGhhcyh0aGlzLCBISURERU4pICYmIGhhcyh0aGlzW0hJRERFTl0sIHRhZykpIHRoaXNbSElEREVOXVt0YWddID0gZmFsc2U7XG4gICAgICBzZXRTeW1ib2xEZXNjKHRoaXMsIHRhZywgY3JlYXRlRGVzYygxLCB2YWx1ZSkpO1xuICAgIH07XG4gICAgaWYgKERFU0NSSVBUT1JTICYmIHNldHRlcikgc2V0U3ltYm9sRGVzYyhPYmplY3RQcm90bywgdGFnLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgc2V0OiAkc2V0IH0pO1xuICAgIHJldHVybiB3cmFwKHRhZyk7XG4gIH07XG4gIHJlZGVmaW5lKCRTeW1ib2xbUFJPVE9UWVBFXSwgJ3RvU3RyaW5nJywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2s7XG4gIH0pO1xuXG4gICRHT1BELmYgPSAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuICAkRFAuZiA9ICRkZWZpbmVQcm9wZXJ0eTtcbiAgcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4nKS5mID0gZ09QTkV4dC5mID0gJGdldE93blByb3BlcnR5TmFtZXM7XG4gIHJlcXVpcmUoJy4vX29iamVjdC1waWUnKS5mID0gJHByb3BlcnR5SXNFbnVtZXJhYmxlO1xuICAkR09QUy5mID0gJGdldE93blByb3BlcnR5U3ltYm9scztcblxuICBpZiAoREVTQ1JJUFRPUlMgJiYgIXJlcXVpcmUoJy4vX2xpYnJhcnknKSkge1xuICAgIHJlZGVmaW5lKE9iamVjdFByb3RvLCAncHJvcGVydHlJc0VudW1lcmFibGUnLCAkcHJvcGVydHlJc0VudW1lcmFibGUsIHRydWUpO1xuICB9XG5cbiAgd2tzRXh0LmYgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHJldHVybiB3cmFwKHdrcyhuYW1lKSk7XG4gIH07XG59XG5cbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5XICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsIHsgU3ltYm9sOiAkU3ltYm9sIH0pO1xuXG5mb3IgKHZhciBlczZTeW1ib2xzID0gKFxuICAvLyAxOS40LjIuMiwgMTkuNC4yLjMsIDE5LjQuMi40LCAxOS40LjIuNiwgMTkuNC4yLjgsIDE5LjQuMi45LCAxOS40LjIuMTAsIDE5LjQuMi4xMSwgMTkuNC4yLjEyLCAxOS40LjIuMTMsIDE5LjQuMi4xNFxuICAnaGFzSW5zdGFuY2UsaXNDb25jYXRTcHJlYWRhYmxlLGl0ZXJhdG9yLG1hdGNoLHJlcGxhY2Usc2VhcmNoLHNwZWNpZXMsc3BsaXQsdG9QcmltaXRpdmUsdG9TdHJpbmdUYWcsdW5zY29wYWJsZXMnXG4pLnNwbGl0KCcsJyksIGogPSAwOyBlczZTeW1ib2xzLmxlbmd0aCA+IGo7KXdrcyhlczZTeW1ib2xzW2orK10pO1xuXG5mb3IgKHZhciB3ZWxsS25vd25TeW1ib2xzID0gJGtleXMod2tzLnN0b3JlKSwgayA9IDA7IHdlbGxLbm93blN5bWJvbHMubGVuZ3RoID4gazspIHdrc0RlZmluZSh3ZWxsS25vd25TeW1ib2xzW2srK10pO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFVU0VfTkFUSVZFLCAnU3ltYm9sJywge1xuICAvLyAxOS40LjIuMSBTeW1ib2wuZm9yKGtleSlcbiAgJ2Zvcic6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICByZXR1cm4gaGFzKFN5bWJvbFJlZ2lzdHJ5LCBrZXkgKz0gJycpXG4gICAgICA/IFN5bWJvbFJlZ2lzdHJ5W2tleV1cbiAgICAgIDogU3ltYm9sUmVnaXN0cnlba2V5XSA9ICRTeW1ib2woa2V5KTtcbiAgfSxcbiAgLy8gMTkuNC4yLjUgU3ltYm9sLmtleUZvcihzeW0pXG4gIGtleUZvcjogZnVuY3Rpb24ga2V5Rm9yKHN5bSkge1xuICAgIGlmICghaXNTeW1ib2woc3ltKSkgdGhyb3cgVHlwZUVycm9yKHN5bSArICcgaXMgbm90IGEgc3ltYm9sIScpO1xuICAgIGZvciAodmFyIGtleSBpbiBTeW1ib2xSZWdpc3RyeSkgaWYgKFN5bWJvbFJlZ2lzdHJ5W2tleV0gPT09IHN5bSkgcmV0dXJuIGtleTtcbiAgfSxcbiAgdXNlU2V0dGVyOiBmdW5jdGlvbiAoKSB7IHNldHRlciA9IHRydWU7IH0sXG4gIHVzZVNpbXBsZTogZnVuY3Rpb24gKCkgeyBzZXR0ZXIgPSBmYWxzZTsgfVxufSk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsICdPYmplY3QnLCB7XG4gIC8vIDE5LjEuMi4yIE9iamVjdC5jcmVhdGUoTyBbLCBQcm9wZXJ0aWVzXSlcbiAgY3JlYXRlOiAkY3JlYXRlLFxuICAvLyAxOS4xLjIuNCBPYmplY3QuZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcylcbiAgZGVmaW5lUHJvcGVydHk6ICRkZWZpbmVQcm9wZXJ0eSxcbiAgLy8gMTkuMS4yLjMgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTywgUHJvcGVydGllcylcbiAgZGVmaW5lUHJvcGVydGllczogJGRlZmluZVByb3BlcnRpZXMsXG4gIC8vIDE5LjEuMi42IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUClcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLFxuICAvLyAxOS4xLjIuNyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhPKVxuICBnZXRPd25Qcm9wZXJ0eU5hbWVzOiAkZ2V0T3duUHJvcGVydHlOYW1lcyxcbiAgLy8gMTkuMS4yLjggT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhPKVxuICBnZXRPd25Qcm9wZXJ0eVN5bWJvbHM6ICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHNcbn0pO1xuXG4vLyBDaHJvbWUgMzggYW5kIDM5IGBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzYCBmYWlscyBvbiBwcmltaXRpdmVzXG4vLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zNDQzXG52YXIgRkFJTFNfT05fUFJJTUlUSVZFUyA9ICRmYWlscyhmdW5jdGlvbiAoKSB7ICRHT1BTLmYoMSk7IH0pO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIEZBSUxTX09OX1BSSU1JVElWRVMsICdPYmplY3QnLCB7XG4gIGdldE93blByb3BlcnR5U3ltYm9sczogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlTeW1ib2xzKGl0KSB7XG4gICAgcmV0dXJuICRHT1BTLmYodG9PYmplY3QoaXQpKTtcbiAgfVxufSk7XG5cbi8vIDI0LjMuMiBKU09OLnN0cmluZ2lmeSh2YWx1ZSBbLCByZXBsYWNlciBbLCBzcGFjZV1dKVxuJEpTT04gJiYgJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAoIVVTRV9OQVRJVkUgfHwgJGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIFMgPSAkU3ltYm9sKCk7XG4gIC8vIE1TIEVkZ2UgY29udmVydHMgc3ltYm9sIHZhbHVlcyB0byBKU09OIGFzIHt9XG4gIC8vIFdlYktpdCBjb252ZXJ0cyBzeW1ib2wgdmFsdWVzIHRvIEpTT04gYXMgbnVsbFxuICAvLyBWOCB0aHJvd3Mgb24gYm94ZWQgc3ltYm9sc1xuICByZXR1cm4gX3N0cmluZ2lmeShbU10pICE9ICdbbnVsbF0nIHx8IF9zdHJpbmdpZnkoeyBhOiBTIH0pICE9ICd7fScgfHwgX3N0cmluZ2lmeShPYmplY3QoUykpICE9ICd7fSc7XG59KSksICdKU09OJywge1xuICBzdHJpbmdpZnk6IGZ1bmN0aW9uIHN0cmluZ2lmeShpdCkge1xuICAgIHZhciBhcmdzID0gW2l0XTtcbiAgICB2YXIgaSA9IDE7XG4gICAgdmFyIHJlcGxhY2VyLCAkcmVwbGFjZXI7XG4gICAgd2hpbGUgKGFyZ3VtZW50cy5sZW5ndGggPiBpKSBhcmdzLnB1c2goYXJndW1lbnRzW2krK10pO1xuICAgICRyZXBsYWNlciA9IHJlcGxhY2VyID0gYXJnc1sxXTtcbiAgICBpZiAoIWlzT2JqZWN0KHJlcGxhY2VyKSAmJiBpdCA9PT0gdW5kZWZpbmVkIHx8IGlzU3ltYm9sKGl0KSkgcmV0dXJuOyAvLyBJRTggcmV0dXJucyBzdHJpbmcgb24gdW5kZWZpbmVkXG4gICAgaWYgKCFpc0FycmF5KHJlcGxhY2VyKSkgcmVwbGFjZXIgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgICAgaWYgKHR5cGVvZiAkcmVwbGFjZXIgPT0gJ2Z1bmN0aW9uJykgdmFsdWUgPSAkcmVwbGFjZXIuY2FsbCh0aGlzLCBrZXksIHZhbHVlKTtcbiAgICAgIGlmICghaXNTeW1ib2wodmFsdWUpKSByZXR1cm4gdmFsdWU7XG4gICAgfTtcbiAgICBhcmdzWzFdID0gcmVwbGFjZXI7XG4gICAgcmV0dXJuIF9zdHJpbmdpZnkuYXBwbHkoJEpTT04sIGFyZ3MpO1xuICB9XG59KTtcblxuLy8gMTkuNC4zLjQgU3ltYm9sLnByb3RvdHlwZVtAQHRvUHJpbWl0aXZlXShoaW50KVxuJFN5bWJvbFtQUk9UT1RZUEVdW1RPX1BSSU1JVElWRV0gfHwgcmVxdWlyZSgnLi9faGlkZScpKCRTeW1ib2xbUFJPVE9UWVBFXSwgVE9fUFJJTUlUSVZFLCAkU3ltYm9sW1BST1RPVFlQRV0udmFsdWVPZik7XG4vLyAxOS40LjMuNSBTeW1ib2wucHJvdG90eXBlW0BAdG9TdHJpbmdUYWddXG5zZXRUb1N0cmluZ1RhZygkU3ltYm9sLCAnU3ltYm9sJyk7XG4vLyAyMC4yLjEuOSBNYXRoW0BAdG9TdHJpbmdUYWddXG5zZXRUb1N0cmluZ1RhZyhNYXRoLCAnTWF0aCcsIHRydWUpO1xuLy8gMjQuMy4zIEpTT05bQEB0b1N0cmluZ1RhZ11cbnNldFRvU3RyaW5nVGFnKGdsb2JhbC5KU09OLCAnSlNPTicsIHRydWUpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///133\n")},function(module,exports,__webpack_require__){eval("module.exports = __webpack_require__(47)('native-function-to-string', Function.toString);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZnVuY3Rpb24tdG8tc3RyaW5nLmpzP2ZhNWIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsaUJBQWlCLG1CQUFPLENBQUMsRUFBVyIsImZpbGUiOiIxMzQuanMiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX3NoYXJlZCcpKCduYXRpdmUtZnVuY3Rpb24tdG8tc3RyaW5nJywgRnVuY3Rpb24udG9TdHJpbmcpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///134\n")},function(module,exports,__webpack_require__){eval("// all enumerable object keys, includes symbols\nvar getKeys = __webpack_require__(34);\nvar gOPS = __webpack_require__(53);\nvar pIE = __webpack_require__(49);\nmodule.exports = function (it) {\n var result = getKeys(it);\n var getSymbols = gOPS.f;\n if (getSymbols) {\n var symbols = getSymbols(it);\n var isEnum = pIE.f;\n var i = 0;\n var key;\n while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);\n } return result;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZW51bS1rZXlzLmpzP2Q0YzAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsRUFBZ0I7QUFDdEMsV0FBVyxtQkFBTyxDQUFDLEVBQWdCO0FBQ25DLFVBQVUsbUJBQU8sQ0FBQyxFQUFlO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCIsImZpbGUiOiIxMzUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBhbGwgZW51bWVyYWJsZSBvYmplY3Qga2V5cywgaW5jbHVkZXMgc3ltYm9sc1xudmFyIGdldEtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xudmFyIGdPUFMgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wcycpO1xudmFyIHBJRSA9IHJlcXVpcmUoJy4vX29iamVjdC1waWUnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciByZXN1bHQgPSBnZXRLZXlzKGl0KTtcbiAgdmFyIGdldFN5bWJvbHMgPSBnT1BTLmY7XG4gIGlmIChnZXRTeW1ib2xzKSB7XG4gICAgdmFyIHN5bWJvbHMgPSBnZXRTeW1ib2xzKGl0KTtcbiAgICB2YXIgaXNFbnVtID0gcElFLmY7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBrZXk7XG4gICAgd2hpbGUgKHN5bWJvbHMubGVuZ3RoID4gaSkgaWYgKGlzRW51bS5jYWxsKGl0LCBrZXkgPSBzeW1ib2xzW2krK10pKSByZXN1bHQucHVzaChrZXkpO1xuICB9IHJldHVybiByZXN1bHQ7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///135\n")},function(module,exports,__webpack_require__){eval("var $export = __webpack_require__(0);\n// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\n$export($export.S, 'Object', { create: __webpack_require__(36) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmNyZWF0ZS5qcz84NDc4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDO0FBQ0EsOEJBQThCLFNBQVMsbUJBQU8sQ0FBQyxFQUFrQixHQUFHIiwiZmlsZSI6IjEzNi5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG4vLyAxOS4xLjIuMiAvIDE1LjIuMy41IE9iamVjdC5jcmVhdGUoTyBbLCBQcm9wZXJ0aWVzXSlcbiRleHBvcnQoJGV4cG9ydC5TLCAnT2JqZWN0JywgeyBjcmVhdGU6IHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKSB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///136\n")},function(module,exports,__webpack_require__){eval("var $export = __webpack_require__(0);\n// 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes)\n$export($export.S + $export.F * !__webpack_require__(7), 'Object', { defineProperty: __webpack_require__(8).f });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmRlZmluZS1wcm9wZXJ0eS5qcz8xYzAxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDO0FBQ0EsaUNBQWlDLG1CQUFPLENBQUMsQ0FBZ0IsY0FBYyxpQkFBaUIsbUJBQU8sQ0FBQyxDQUFjLEtBQUsiLCJmaWxlIjoiMTM3LmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbi8vIDE5LjEuMi40IC8gMTUuMi4zLjYgT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpLCAnT2JqZWN0JywgeyBkZWZpbmVQcm9wZXJ0eTogcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZiB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///137\n")},function(module,exports,__webpack_require__){eval("var $export = __webpack_require__(0);\n// 19.1.2.3 / 15.2.3.7 Object.defineProperties(O, Properties)\n$export($export.S + $export.F * !__webpack_require__(7), 'Object', { defineProperties: __webpack_require__(97) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmRlZmluZS1wcm9wZXJ0aWVzLmpzPzU4YjIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakM7QUFDQSxpQ0FBaUMsbUJBQU8sQ0FBQyxDQUFnQixjQUFjLG1CQUFtQixtQkFBTyxDQUFDLEVBQWUsR0FBRyIsImZpbGUiOiIxMzguanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuLy8gMTkuMS4yLjMgLyAxNS4yLjMuNyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhPLCBQcm9wZXJ0aWVzKVxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSwgJ09iamVjdCcsIHsgZGVmaW5lUHJvcGVydGllczogcmVxdWlyZSgnLi9fb2JqZWN0LWRwcycpIH0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///138\n")},function(module,exports,__webpack_require__){eval("// 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\nvar toIObject = __webpack_require__(15);\nvar $getOwnPropertyDescriptor = __webpack_require__(16).f;\n\n__webpack_require__(25)('getOwnPropertyDescriptor', function () {\n return function getOwnPropertyDescriptor(it, key) {\n return $getOwnPropertyDescriptor(toIObject(it), key);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvci5qcz85OTg2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2QyxnQ0FBZ0MsbUJBQU8sQ0FBQyxFQUFnQjs7QUFFeEQsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTM5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMTkuMS4yLjYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKVxudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKS5mO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2dldE93blByb3BlcnR5RGVzY3JpcHRvcicsIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihpdCwga2V5KSB7XG4gICAgcmV0dXJuICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodG9JT2JqZWN0KGl0KSwga2V5KTtcbiAgfTtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///139\n")},function(module,exports,__webpack_require__){eval("// 19.1.2.9 Object.getPrototypeOf(O)\nvar toObject = __webpack_require__(9);\nvar $getPrototypeOf = __webpack_require__(17);\n\n__webpack_require__(25)('getPrototypeOf', function () {\n return function getPrototypeOf(it) {\n return $getPrototypeOf(toObject(it));\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmdldC1wcm90b3R5cGUtb2YuanM/ZTRmNyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLHNCQUFzQixtQkFBTyxDQUFDLEVBQWU7O0FBRTdDLG1CQUFPLENBQUMsRUFBZTtBQUN2QjtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjE0MC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDE5LjEuMi45IE9iamVjdC5nZXRQcm90b3R5cGVPZihPKVxudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgJGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2dldFByb3RvdHlwZU9mJywgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gZnVuY3Rpb24gZ2V0UHJvdG90eXBlT2YoaXQpIHtcbiAgICByZXR1cm4gJGdldFByb3RvdHlwZU9mKHRvT2JqZWN0KGl0KSk7XG4gIH07XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///140\n")},function(module,exports,__webpack_require__){eval("// 19.1.2.14 Object.keys(O)\nvar toObject = __webpack_require__(9);\nvar $keys = __webpack_require__(34);\n\n__webpack_require__(25)('keys', function () {\n return function keys(it) {\n return $keys(toObject(it));\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmtleXMuanM/NDU2ZCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLFlBQVksbUJBQU8sQ0FBQyxFQUFnQjs7QUFFcEMsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTQxLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMTkuMS4yLjE0IE9iamVjdC5rZXlzKE8pXG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciAka2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgna2V5cycsIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGtleXMoaXQpIHtcbiAgICByZXR1cm4gJGtleXModG9PYmplY3QoaXQpKTtcbiAgfTtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///141\n")},function(module,exports,__webpack_require__){eval("// 19.1.2.7 Object.getOwnPropertyNames(O)\n__webpack_require__(25)('getOwnPropertyNames', function () {\n return __webpack_require__(98).f;\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmdldC1vd24tcHJvcGVydHktbmFtZXMuanM/MjVkYiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLG1CQUFPLENBQUMsRUFBZTtBQUN2QixTQUFTLG1CQUFPLENBQUMsRUFBb0I7QUFDckMsQ0FBQyIsImZpbGUiOiIxNDIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAxOS4xLjIuNyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhPKVxucmVxdWlyZSgnLi9fb2JqZWN0LXNhcCcpKCdnZXRPd25Qcm9wZXJ0eU5hbWVzJywgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4tZXh0JykuZjtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///142\n")},function(module,exports,__webpack_require__){eval("// 19.1.2.5 Object.freeze(O)\nvar isObject = __webpack_require__(4);\nvar meta = __webpack_require__(30).onFreeze;\n\n__webpack_require__(25)('freeze', function ($freeze) {\n return function freeze(it) {\n return $freeze && isObject(it) ? $freeze(meta(it)) : it;\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmZyZWV6ZS5qcz8wZDZkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsV0FBVyxtQkFBTyxDQUFDLEVBQVM7O0FBRTVCLG1CQUFPLENBQUMsRUFBZTtBQUN2QjtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjE0My5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDE5LjEuMi41IE9iamVjdC5mcmVlemUoTylcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIG1ldGEgPSByZXF1aXJlKCcuL19tZXRhJykub25GcmVlemU7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgnZnJlZXplJywgZnVuY3Rpb24gKCRmcmVlemUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGZyZWV6ZShpdCkge1xuICAgIHJldHVybiAkZnJlZXplICYmIGlzT2JqZWN0KGl0KSA/ICRmcmVlemUobWV0YShpdCkpIDogaXQ7XG4gIH07XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///143\n")},function(module,exports,__webpack_require__){eval("// 19.1.2.17 Object.seal(O)\nvar isObject = __webpack_require__(4);\nvar meta = __webpack_require__(30).onFreeze;\n\n__webpack_require__(25)('seal', function ($seal) {\n return function seal(it) {\n return $seal && isObject(it) ? $seal(meta(it)) : it;\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LnNlYWwuanM/Y2Y2YSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLFdBQVcsbUJBQU8sQ0FBQyxFQUFTOztBQUU1QixtQkFBTyxDQUFDLEVBQWU7QUFDdkI7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIxNDQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAxOS4xLjIuMTcgT2JqZWN0LnNlYWwoTylcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIG1ldGEgPSByZXF1aXJlKCcuL19tZXRhJykub25GcmVlemU7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgnc2VhbCcsIGZ1bmN0aW9uICgkc2VhbCkge1xuICByZXR1cm4gZnVuY3Rpb24gc2VhbChpdCkge1xuICAgIHJldHVybiAkc2VhbCAmJiBpc09iamVjdChpdCkgPyAkc2VhbChtZXRhKGl0KSkgOiBpdDtcbiAgfTtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///144\n")},function(module,exports,__webpack_require__){eval("// 19.1.2.15 Object.preventExtensions(O)\nvar isObject = __webpack_require__(4);\nvar meta = __webpack_require__(30).onFreeze;\n\n__webpack_require__(25)('preventExtensions', function ($preventExtensions) {\n return function preventExtensions(it) {\n return $preventExtensions && isObject(it) ? $preventExtensions(meta(it)) : it;\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LnByZXZlbnQtZXh0ZW5zaW9ucy5qcz85YWVhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsV0FBVyxtQkFBTyxDQUFDLEVBQVM7O0FBRTVCLG1CQUFPLENBQUMsRUFBZTtBQUN2QjtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjE0NS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDE5LjEuMi4xNSBPYmplY3QucHJldmVudEV4dGVuc2lvbnMoTylcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIG1ldGEgPSByZXF1aXJlKCcuL19tZXRhJykub25GcmVlemU7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgncHJldmVudEV4dGVuc2lvbnMnLCBmdW5jdGlvbiAoJHByZXZlbnRFeHRlbnNpb25zKSB7XG4gIHJldHVybiBmdW5jdGlvbiBwcmV2ZW50RXh0ZW5zaW9ucyhpdCkge1xuICAgIHJldHVybiAkcHJldmVudEV4dGVuc2lvbnMgJiYgaXNPYmplY3QoaXQpID8gJHByZXZlbnRFeHRlbnNpb25zKG1ldGEoaXQpKSA6IGl0O1xuICB9O1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///145\n")},function(module,exports,__webpack_require__){eval("// 19.1.2.12 Object.isFrozen(O)\nvar isObject = __webpack_require__(4);\n\n__webpack_require__(25)('isFrozen', function ($isFrozen) {\n return function isFrozen(it) {\n return isObject(it) ? $isFrozen ? $isFrozen(it) : false : true;\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmlzLWZyb3plbi5qcz82NmM4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsZUFBZSxtQkFBTyxDQUFDLENBQWM7O0FBRXJDLG1CQUFPLENBQUMsRUFBZTtBQUN2QjtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjE0Ni5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDE5LjEuMi4xMiBPYmplY3QuaXNGcm96ZW4oTylcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2lzRnJvemVuJywgZnVuY3Rpb24gKCRpc0Zyb3plbikge1xuICByZXR1cm4gZnVuY3Rpb24gaXNGcm96ZW4oaXQpIHtcbiAgICByZXR1cm4gaXNPYmplY3QoaXQpID8gJGlzRnJvemVuID8gJGlzRnJvemVuKGl0KSA6IGZhbHNlIDogdHJ1ZTtcbiAgfTtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///146\n")},function(module,exports,__webpack_require__){eval("// 19.1.2.13 Object.isSealed(O)\nvar isObject = __webpack_require__(4);\n\n__webpack_require__(25)('isSealed', function ($isSealed) {\n return function isSealed(it) {\n return isObject(it) ? $isSealed ? $isSealed(it) : false : true;\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmlzLXNlYWxlZC5qcz81N2YwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsZUFBZSxtQkFBTyxDQUFDLENBQWM7O0FBRXJDLG1CQUFPLENBQUMsRUFBZTtBQUN2QjtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjE0Ny5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDE5LjEuMi4xMyBPYmplY3QuaXNTZWFsZWQoTylcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2lzU2VhbGVkJywgZnVuY3Rpb24gKCRpc1NlYWxlZCkge1xuICByZXR1cm4gZnVuY3Rpb24gaXNTZWFsZWQoaXQpIHtcbiAgICByZXR1cm4gaXNPYmplY3QoaXQpID8gJGlzU2VhbGVkID8gJGlzU2VhbGVkKGl0KSA6IGZhbHNlIDogdHJ1ZTtcbiAgfTtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///147\n")},function(module,exports,__webpack_require__){eval("// 19.1.2.11 Object.isExtensible(O)\nvar isObject = __webpack_require__(4);\n\n__webpack_require__(25)('isExtensible', function ($isExtensible) {\n return function isExtensible(it) {\n return isObject(it) ? $isExtensible ? $isExtensible(it) : true : false;\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmlzLWV4dGVuc2libGUuanM/MTY1YiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGVBQWUsbUJBQU8sQ0FBQyxDQUFjOztBQUVyQyxtQkFBTyxDQUFDLEVBQWU7QUFDdkI7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIxNDguanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAxOS4xLjIuMTEgT2JqZWN0LmlzRXh0ZW5zaWJsZShPKVxudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgnaXNFeHRlbnNpYmxlJywgZnVuY3Rpb24gKCRpc0V4dGVuc2libGUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGlzRXh0ZW5zaWJsZShpdCkge1xuICAgIHJldHVybiBpc09iamVjdChpdCkgPyAkaXNFeHRlbnNpYmxlID8gJGlzRXh0ZW5zaWJsZShpdCkgOiB0cnVlIDogZmFsc2U7XG4gIH07XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///148\n")},function(module,exports,__webpack_require__){eval("// 19.1.3.1 Object.assign(target, source)\nvar $export = __webpack_require__(0);\n\n$export($export.S + $export.F, 'Object', { assign: __webpack_require__(99) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmFzc2lnbi5qcz9mNzUxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDLDBDQUEwQyxTQUFTLG1CQUFPLENBQUMsRUFBa0IsR0FBRyIsImZpbGUiOiIxNDkuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAxOS4xLjMuMSBPYmplY3QuYXNzaWduKHRhcmdldCwgc291cmNlKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYsICdPYmplY3QnLCB7IGFzc2lnbjogcmVxdWlyZSgnLi9fb2JqZWN0LWFzc2lnbicpIH0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///149\n")},function(module,exports,__webpack_require__){eval("// 19.1.3.10 Object.is(value1, value2)\nvar $export = __webpack_require__(0);\n$export($export.S, 'Object', { is: __webpack_require__(100) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmlzLmpzP2RiOTciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyw4QkFBOEIsS0FBSyxtQkFBTyxDQUFDLEdBQWUsR0FBRyIsImZpbGUiOiIxNTAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAxOS4xLjMuMTAgT2JqZWN0LmlzKHZhbHVlMSwgdmFsdWUyKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbiRleHBvcnQoJGV4cG9ydC5TLCAnT2JqZWN0JywgeyBpczogcmVxdWlyZSgnLi9fc2FtZS12YWx1ZScpIH0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///150\n")},function(module,exports,__webpack_require__){eval("// 19.1.3.19 Object.setPrototypeOf(O, proto)\nvar $export = __webpack_require__(0);\n$export($export.S, 'Object', { setPrototypeOf: __webpack_require__(71).set });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LnNldC1wcm90b3R5cGUtb2YuanM/ZmQyNCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLDhCQUE4QixpQkFBaUIsbUJBQU8sQ0FBQyxFQUFjLE9BQU8iLCJmaWxlIjoiMTUxLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMTkuMS4zLjE5IE9iamVjdC5zZXRQcm90b3R5cGVPZihPLCBwcm90bylcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG4kZXhwb3J0KCRleHBvcnQuUywgJ09iamVjdCcsIHsgc2V0UHJvdG90eXBlT2Y6IHJlcXVpcmUoJy4vX3NldC1wcm90bycpLnNldCB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///151\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// 19.1.3.6 Object.prototype.toString()\nvar classof = __webpack_require__(44);\nvar test = {};\ntest[__webpack_require__(5)('toStringTag')] = 'z';\nif (test + '' != '[object z]') {\n __webpack_require__(12)(Object.prototype, 'toString', function toString() {\n return '[object ' + classof(this) + ']';\n }, true);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LnRvLXN0cmluZy5qcz8wNmRiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxjQUFjLG1CQUFPLENBQUMsRUFBWTtBQUNsQztBQUNBLEtBQUssbUJBQU8sQ0FBQyxDQUFRO0FBQ3JCO0FBQ0EsRUFBRSxtQkFBTyxDQUFDLEVBQWE7QUFDdkI7QUFDQSxHQUFHO0FBQ0giLCJmaWxlIjoiMTUyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gMTkuMS4zLjYgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZygpXG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4vX2NsYXNzb2YnKTtcbnZhciB0ZXN0ID0ge307XG50ZXN0W3JlcXVpcmUoJy4vX3drcycpKCd0b1N0cmluZ1RhZycpXSA9ICd6JztcbmlmICh0ZXN0ICsgJycgIT0gJ1tvYmplY3Qgel0nKSB7XG4gIHJlcXVpcmUoJy4vX3JlZGVmaW5lJykoT2JqZWN0LnByb3RvdHlwZSwgJ3RvU3RyaW5nJywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuICdbb2JqZWN0ICcgKyBjbGFzc29mKHRoaXMpICsgJ10nO1xuICB9LCB0cnVlKTtcbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///152\n")},function(module,exports,__webpack_require__){eval("// 19.2.3.2 / 15.3.4.5 Function.prototype.bind(thisArg, args...)\nvar $export = __webpack_require__(0);\n\n$export($export.P, 'Function', { bind: __webpack_require__(101) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZnVuY3Rpb24uYmluZC5qcz9kOTJhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDLGdDQUFnQyxPQUFPLG1CQUFPLENBQUMsR0FBUyxHQUFHIiwiZmlsZSI6IjE1My5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDE5LjIuMy4yIC8gMTUuMy40LjUgRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQodGhpc0FyZywgYXJncy4uLilcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QLCAnRnVuY3Rpb24nLCB7IGJpbmQ6IHJlcXVpcmUoJy4vX2JpbmQnKSB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///153\n")},function(module,exports,__webpack_require__){eval("var dP = __webpack_require__(8).f;\nvar FProto = Function.prototype;\nvar nameRE = /^\\s*function ([^ (]*)/;\nvar NAME = 'name';\n\n// 19.2.4.2 name\nNAME in FProto || __webpack_require__(7) && dP(FProto, NAME, {\n configurable: true,\n get: function () {\n try {\n return ('' + this).match(nameRE)[1];\n } catch (e) {\n return '';\n }\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZnVuY3Rpb24ubmFtZS5qcz83ZjdmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFNBQVMsbUJBQU8sQ0FBQyxDQUFjO0FBQy9CO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGtCQUFrQixtQkFBTyxDQUFDLENBQWdCO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTU0LmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbnZhciBGUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGU7XG52YXIgbmFtZVJFID0gL15cXHMqZnVuY3Rpb24gKFteIChdKikvO1xudmFyIE5BTUUgPSAnbmFtZSc7XG5cbi8vIDE5LjIuNC4yIG5hbWVcbk5BTUUgaW4gRlByb3RvIHx8IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgZFAoRlByb3RvLCBOQU1FLCB7XG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiAoJycgKyB0aGlzKS5tYXRjaChuYW1lUkUpWzFdO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///154\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar isObject = __webpack_require__(4);\nvar getPrototypeOf = __webpack_require__(17);\nvar HAS_INSTANCE = __webpack_require__(5)('hasInstance');\nvar FunctionProto = Function.prototype;\n// 19.2.3.6 Function.prototype[@@hasInstance](V)\nif (!(HAS_INSTANCE in FunctionProto)) __webpack_require__(8).f(FunctionProto, HAS_INSTANCE, { value: function (O) {\n if (typeof this != 'function' || !isObject(O)) return false;\n if (!isObject(this.prototype)) return O instanceof this;\n // for environment w/o native `@@hasInstance` logic enough `instanceof`, but add this:\n while (O = getPrototypeOf(O)) if (this.prototype === O) return true;\n return false;\n} });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZnVuY3Rpb24uaGFzLWluc3RhbmNlLmpzPzIxN2IiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxxQkFBcUIsbUJBQU8sQ0FBQyxFQUFlO0FBQzVDLG1CQUFtQixtQkFBTyxDQUFDLENBQVE7QUFDbkM7QUFDQTtBQUNBLHNDQUFzQyxtQkFBTyxDQUFDLENBQWMsa0NBQWtDO0FBQzlGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLEVBQUUiLCJmaWxlIjoiMTU1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgSEFTX0lOU1RBTkNFID0gcmVxdWlyZSgnLi9fd2tzJykoJ2hhc0luc3RhbmNlJyk7XG52YXIgRnVuY3Rpb25Qcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbi8vIDE5LjIuMy42IEZ1bmN0aW9uLnByb3RvdHlwZVtAQGhhc0luc3RhbmNlXShWKVxuaWYgKCEoSEFTX0lOU1RBTkNFIGluIEZ1bmN0aW9uUHJvdG8pKSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mKEZ1bmN0aW9uUHJvdG8sIEhBU19JTlNUQU5DRSwgeyB2YWx1ZTogZnVuY3Rpb24gKE8pIHtcbiAgaWYgKHR5cGVvZiB0aGlzICE9ICdmdW5jdGlvbicgfHwgIWlzT2JqZWN0KE8pKSByZXR1cm4gZmFsc2U7XG4gIGlmICghaXNPYmplY3QodGhpcy5wcm90b3R5cGUpKSByZXR1cm4gTyBpbnN0YW5jZW9mIHRoaXM7XG4gIC8vIGZvciBlbnZpcm9ubWVudCB3L28gbmF0aXZlIGBAQGhhc0luc3RhbmNlYCBsb2dpYyBlbm91Z2ggYGluc3RhbmNlb2ZgLCBidXQgYWRkIHRoaXM6XG4gIHdoaWxlIChPID0gZ2V0UHJvdG90eXBlT2YoTykpIGlmICh0aGlzLnByb3RvdHlwZSA9PT0gTykgcmV0dXJuIHRydWU7XG4gIHJldHVybiBmYWxzZTtcbn0gfSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///155\n")},function(module,exports,__webpack_require__){eval("var $export = __webpack_require__(0);\nvar $parseInt = __webpack_require__(103);\n// 18.2.5 parseInt(string, radix)\n$export($export.G + $export.F * (parseInt != $parseInt), { parseInt: $parseInt });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucGFyc2UtaW50LmpzPzE4ZDAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsZ0JBQWdCLG1CQUFPLENBQUMsR0FBYztBQUN0QztBQUNBLDBEQUEwRCxzQkFBc0IiLCJmaWxlIjoiMTU2LmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkcGFyc2VJbnQgPSByZXF1aXJlKCcuL19wYXJzZS1pbnQnKTtcbi8vIDE4LjIuNSBwYXJzZUludChzdHJpbmcsIHJhZGl4KVxuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LkYgKiAocGFyc2VJbnQgIT0gJHBhcnNlSW50KSwgeyBwYXJzZUludDogJHBhcnNlSW50IH0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///156\n")},function(module,exports,__webpack_require__){eval("var $export = __webpack_require__(0);\nvar $parseFloat = __webpack_require__(104);\n// 18.2.4 parseFloat(string)\n$export($export.G + $export.F * (parseFloat != $parseFloat), { parseFloat: $parseFloat });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucGFyc2UtZmxvYXQuanM/YjcyYyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxrQkFBa0IsbUJBQU8sQ0FBQyxHQUFnQjtBQUMxQztBQUNBLDhEQUE4RCwwQkFBMEIiLCJmaWxlIjoiMTU3LmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkcGFyc2VGbG9hdCA9IHJlcXVpcmUoJy4vX3BhcnNlLWZsb2F0Jyk7XG4vLyAxOC4yLjQgcGFyc2VGbG9hdChzdHJpbmcpXG4kZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuRiAqIChwYXJzZUZsb2F0ICE9ICRwYXJzZUZsb2F0KSwgeyBwYXJzZUZsb2F0OiAkcGFyc2VGbG9hdCB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///157\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar global = __webpack_require__(2);\nvar has = __webpack_require__(14);\nvar cof = __webpack_require__(20);\nvar inheritIfRequired = __webpack_require__(73);\nvar toPrimitive = __webpack_require__(23);\nvar fails = __webpack_require__(3);\nvar gOPN = __webpack_require__(37).f;\nvar gOPD = __webpack_require__(16).f;\nvar dP = __webpack_require__(8).f;\nvar $trim = __webpack_require__(45).trim;\nvar NUMBER = 'Number';\nvar $Number = global[NUMBER];\nvar Base = $Number;\nvar proto = $Number.prototype;\n// Opera ~12 has broken Object#toString\nvar BROKEN_COF = cof(__webpack_require__(36)(proto)) == NUMBER;\nvar TRIM = 'trim' in String.prototype;\n\n// 7.1.3 ToNumber(argument)\nvar toNumber = function (argument) {\n var it = toPrimitive(argument, false);\n if (typeof it == 'string' && it.length > 2) {\n it = TRIM ? it.trim() : $trim(it, 3);\n var first = it.charCodeAt(0);\n var third, radix, maxCode;\n if (first === 43 || first === 45) {\n third = it.charCodeAt(2);\n if (third === 88 || third === 120) return NaN; // Number('+0x1') should be NaN, old V8 fix\n } else if (first === 48) {\n switch (it.charCodeAt(1)) {\n case 66: case 98: radix = 2; maxCode = 49; break; // fast equal /^0b[01]+$/i\n case 79: case 111: radix = 8; maxCode = 55; break; // fast equal /^0o[0-7]+$/i\n default: return +it;\n }\n for (var digits = it.slice(2), i = 0, l = digits.length, code; i < l; i++) {\n code = digits.charCodeAt(i);\n // parseInt parses a string to a first unavailable symbol\n // but ToNumber should return NaN if a string contains unavailable symbols\n if (code < 48 || code > maxCode) return NaN;\n } return parseInt(digits, radix);\n }\n } return +it;\n};\n\nif (!$Number(' 0o1') || !$Number('0b1') || $Number('+0x1')) {\n $Number = function Number(value) {\n var it = arguments.length < 1 ? 0 : value;\n var that = this;\n return that instanceof $Number\n // check on 1..constructor(foo) case\n && (BROKEN_COF ? fails(function () { proto.valueOf.call(that); }) : cof(that) != NUMBER)\n ? inheritIfRequired(new Base(toNumber(it)), that, $Number) : toNumber(it);\n };\n for (var keys = __webpack_require__(7) ? gOPN(Base) : (\n // ES3:\n 'MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,' +\n // ES6 (in case, if modules with ES6 Number statics required before):\n 'EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,' +\n 'MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger'\n ).split(','), j = 0, key; keys.length > j; j++) {\n if (has(Base, key = keys[j]) && !has($Number, key)) {\n dP($Number, key, gOPD(Base, key));\n }\n }\n $Number.prototype = proto;\n proto.constructor = $Number;\n __webpack_require__(12)(global, NUMBER, $Number);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLmNvbnN0cnVjdG9yLmpzP2M1ZjYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixhQUFhLG1CQUFPLENBQUMsQ0FBVztBQUNoQyxVQUFVLG1CQUFPLENBQUMsRUFBUTtBQUMxQixVQUFVLG1CQUFPLENBQUMsRUFBUTtBQUMxQix3QkFBd0IsbUJBQU8sQ0FBQyxFQUF3QjtBQUN4RCxrQkFBa0IsbUJBQU8sQ0FBQyxFQUFpQjtBQUMzQyxZQUFZLG1CQUFPLENBQUMsQ0FBVTtBQUM5QixXQUFXLG1CQUFPLENBQUMsRUFBZ0I7QUFDbkMsV0FBVyxtQkFBTyxDQUFDLEVBQWdCO0FBQ25DLFNBQVMsbUJBQU8sQ0FBQyxDQUFjO0FBQy9CLFlBQVksbUJBQU8sQ0FBQyxFQUFnQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLG1CQUFPLENBQUMsRUFBa0I7QUFDL0M7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0RBQW9EO0FBQ3BELEtBQUs7QUFDTDtBQUNBLG9DQUFvQyxjQUFjLE9BQU87QUFDekQscUNBQXFDLGNBQWMsT0FBTztBQUMxRDtBQUNBO0FBQ0Esb0VBQW9FLE9BQU87QUFDM0U7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMENBQTBDLDBCQUEwQixFQUFFO0FBQ3RFO0FBQ0E7QUFDQSxrQkFBa0IsbUJBQU8sQ0FBQyxDQUFnQjtBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCLGlCQUFpQjtBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLG1CQUFPLENBQUMsRUFBYTtBQUN2QiIsImZpbGUiOiIxNTguanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG52YXIgaW5oZXJpdElmUmVxdWlyZWQgPSByZXF1aXJlKCcuL19pbmhlcml0LWlmLXJlcXVpcmVkJyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgZ09QTiA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJykuZjtcbnZhciBnT1BEID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKS5mO1xudmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbnZhciAkdHJpbSA9IHJlcXVpcmUoJy4vX3N0cmluZy10cmltJykudHJpbTtcbnZhciBOVU1CRVIgPSAnTnVtYmVyJztcbnZhciAkTnVtYmVyID0gZ2xvYmFsW05VTUJFUl07XG52YXIgQmFzZSA9ICROdW1iZXI7XG52YXIgcHJvdG8gPSAkTnVtYmVyLnByb3RvdHlwZTtcbi8vIE9wZXJhIH4xMiBoYXMgYnJva2VuIE9iamVjdCN0b1N0cmluZ1xudmFyIEJST0tFTl9DT0YgPSBjb2YocmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpKHByb3RvKSkgPT0gTlVNQkVSO1xudmFyIFRSSU0gPSAndHJpbScgaW4gU3RyaW5nLnByb3RvdHlwZTtcblxuLy8gNy4xLjMgVG9OdW1iZXIoYXJndW1lbnQpXG52YXIgdG9OdW1iZXIgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdmFyIGl0ID0gdG9QcmltaXRpdmUoYXJndW1lbnQsIGZhbHNlKTtcbiAgaWYgKHR5cGVvZiBpdCA9PSAnc3RyaW5nJyAmJiBpdC5sZW5ndGggPiAyKSB7XG4gICAgaXQgPSBUUklNID8gaXQudHJpbSgpIDogJHRyaW0oaXQsIDMpO1xuICAgIHZhciBmaXJzdCA9IGl0LmNoYXJDb2RlQXQoMCk7XG4gICAgdmFyIHRoaXJkLCByYWRpeCwgbWF4Q29kZTtcbiAgICBpZiAoZmlyc3QgPT09IDQzIHx8IGZpcnN0ID09PSA0NSkge1xuICAgICAgdGhpcmQgPSBpdC5jaGFyQ29kZUF0KDIpO1xuICAgICAgaWYgKHRoaXJkID09PSA4OCB8fCB0aGlyZCA9PT0gMTIwKSByZXR1cm4gTmFOOyAvLyBOdW1iZXIoJysweDEnKSBzaG91bGQgYmUgTmFOLCBvbGQgVjggZml4XG4gICAgfSBlbHNlIGlmIChmaXJzdCA9PT0gNDgpIHtcbiAgICAgIHN3aXRjaCAoaXQuY2hhckNvZGVBdCgxKSkge1xuICAgICAgICBjYXNlIDY2OiBjYXNlIDk4OiByYWRpeCA9IDI7IG1heENvZGUgPSA0OTsgYnJlYWs7IC8vIGZhc3QgZXF1YWwgL14wYlswMV0rJC9pXG4gICAgICAgIGNhc2UgNzk6IGNhc2UgMTExOiByYWRpeCA9IDg7IG1heENvZGUgPSA1NTsgYnJlYWs7IC8vIGZhc3QgZXF1YWwgL14wb1swLTddKyQvaVxuICAgICAgICBkZWZhdWx0OiByZXR1cm4gK2l0O1xuICAgICAgfVxuICAgICAgZm9yICh2YXIgZGlnaXRzID0gaXQuc2xpY2UoMiksIGkgPSAwLCBsID0gZGlnaXRzLmxlbmd0aCwgY29kZTsgaSA8IGw7IGkrKykge1xuICAgICAgICBjb2RlID0gZGlnaXRzLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIC8vIHBhcnNlSW50IHBhcnNlcyBhIHN0cmluZyB0byBhIGZpcnN0IHVuYXZhaWxhYmxlIHN5bWJvbFxuICAgICAgICAvLyBidXQgVG9OdW1iZXIgc2hvdWxkIHJldHVybiBOYU4gaWYgYSBzdHJpbmcgY29udGFpbnMgdW5hdmFpbGFibGUgc3ltYm9sc1xuICAgICAgICBpZiAoY29kZSA8IDQ4IHx8IGNvZGUgPiBtYXhDb2RlKSByZXR1cm4gTmFOO1xuICAgICAgfSByZXR1cm4gcGFyc2VJbnQoZGlnaXRzLCByYWRpeCk7XG4gICAgfVxuICB9IHJldHVybiAraXQ7XG59O1xuXG5pZiAoISROdW1iZXIoJyAwbzEnKSB8fCAhJE51bWJlcignMGIxJykgfHwgJE51bWJlcignKzB4MScpKSB7XG4gICROdW1iZXIgPSBmdW5jdGlvbiBOdW1iZXIodmFsdWUpIHtcbiAgICB2YXIgaXQgPSBhcmd1bWVudHMubGVuZ3RoIDwgMSA/IDAgOiB2YWx1ZTtcbiAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgcmV0dXJuIHRoYXQgaW5zdGFuY2VvZiAkTnVtYmVyXG4gICAgICAvLyBjaGVjayBvbiAxLi5jb25zdHJ1Y3Rvcihmb28pIGNhc2VcbiAgICAgICYmIChCUk9LRU5fQ09GID8gZmFpbHMoZnVuY3Rpb24gKCkgeyBwcm90by52YWx1ZU9mLmNhbGwodGhhdCk7IH0pIDogY29mKHRoYXQpICE9IE5VTUJFUilcbiAgICAgICAgPyBpbmhlcml0SWZSZXF1aXJlZChuZXcgQmFzZSh0b051bWJlcihpdCkpLCB0aGF0LCAkTnVtYmVyKSA6IHRvTnVtYmVyKGl0KTtcbiAgfTtcbiAgZm9yICh2YXIga2V5cyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBnT1BOKEJhc2UpIDogKFxuICAgIC8vIEVTMzpcbiAgICAnTUFYX1ZBTFVFLE1JTl9WQUxVRSxOYU4sTkVHQVRJVkVfSU5GSU5JVFksUE9TSVRJVkVfSU5GSU5JVFksJyArXG4gICAgLy8gRVM2IChpbiBjYXNlLCBpZiBtb2R1bGVzIHdpdGggRVM2IE51bWJlciBzdGF0aWNzIHJlcXVpcmVkIGJlZm9yZSk6XG4gICAgJ0VQU0lMT04saXNGaW5pdGUsaXNJbnRlZ2VyLGlzTmFOLGlzU2FmZUludGVnZXIsTUFYX1NBRkVfSU5URUdFUiwnICtcbiAgICAnTUlOX1NBRkVfSU5URUdFUixwYXJzZUZsb2F0LHBhcnNlSW50LGlzSW50ZWdlcidcbiAgKS5zcGxpdCgnLCcpLCBqID0gMCwga2V5OyBrZXlzLmxlbmd0aCA+IGo7IGorKykge1xuICAgIGlmIChoYXMoQmFzZSwga2V5ID0ga2V5c1tqXSkgJiYgIWhhcygkTnVtYmVyLCBrZXkpKSB7XG4gICAgICBkUCgkTnVtYmVyLCBrZXksIGdPUEQoQmFzZSwga2V5KSk7XG4gICAgfVxuICB9XG4gICROdW1iZXIucHJvdG90eXBlID0gcHJvdG87XG4gIHByb3RvLmNvbnN0cnVjdG9yID0gJE51bWJlcjtcbiAgcmVxdWlyZSgnLi9fcmVkZWZpbmUnKShnbG9iYWwsIE5VTUJFUiwgJE51bWJlcik7XG59XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///158\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar toInteger = __webpack_require__(21);\nvar aNumberValue = __webpack_require__(105);\nvar repeat = __webpack_require__(74);\nvar $toFixed = 1.0.toFixed;\nvar floor = Math.floor;\nvar data = [0, 0, 0, 0, 0, 0];\nvar ERROR = 'Number.toFixed: incorrect invocation!';\nvar ZERO = '0';\n\nvar multiply = function (n, c) {\n var i = -1;\n var c2 = c;\n while (++i < 6) {\n c2 += n * data[i];\n data[i] = c2 % 1e7;\n c2 = floor(c2 / 1e7);\n }\n};\nvar divide = function (n) {\n var i = 6;\n var c = 0;\n while (--i >= 0) {\n c += data[i];\n data[i] = floor(c / n);\n c = (c % n) * 1e7;\n }\n};\nvar numToString = function () {\n var i = 6;\n var s = '';\n while (--i >= 0) {\n if (s !== '' || i === 0 || data[i] !== 0) {\n var t = String(data[i]);\n s = s === '' ? t : s + repeat.call(ZERO, 7 - t.length) + t;\n }\n } return s;\n};\nvar pow = function (x, n, acc) {\n return n === 0 ? acc : n % 2 === 1 ? pow(x, n - 1, acc * x) : pow(x * x, n / 2, acc);\n};\nvar log = function (x) {\n var n = 0;\n var x2 = x;\n while (x2 >= 4096) {\n n += 12;\n x2 /= 4096;\n }\n while (x2 >= 2) {\n n += 1;\n x2 /= 2;\n } return n;\n};\n\n$export($export.P + $export.F * (!!$toFixed && (\n 0.00008.toFixed(3) !== '0.000' ||\n 0.9.toFixed(0) !== '1' ||\n 1.255.toFixed(2) !== '1.25' ||\n 1000000000000000128.0.toFixed(0) !== '1000000000000000128'\n) || !__webpack_require__(3)(function () {\n // V8 ~ Android 4.3-\n $toFixed.call({});\n})), 'Number', {\n toFixed: function toFixed(fractionDigits) {\n var x = aNumberValue(this, ERROR);\n var f = toInteger(fractionDigits);\n var s = '';\n var m = ZERO;\n var e, z, j, k;\n if (f < 0 || f > 20) throw RangeError(ERROR);\n // eslint-disable-next-line no-self-compare\n if (x != x) return 'NaN';\n if (x <= -1e21 || x >= 1e21) return String(x);\n if (x < 0) {\n s = '-';\n x = -x;\n }\n if (x > 1e-21) {\n e = log(x * pow(2, 69, 1)) - 69;\n z = e < 0 ? x * pow(2, -e, 1) : x / pow(2, e, 1);\n z *= 0x10000000000000;\n e = 52 - e;\n if (e > 0) {\n multiply(0, z);\n j = f;\n while (j >= 7) {\n multiply(1e7, 0);\n j -= 7;\n }\n multiply(pow(10, j, 1), 0);\n j = e - 1;\n while (j >= 23) {\n divide(1 << 23);\n j -= 23;\n }\n divide(1 << j);\n multiply(1, 1);\n divide(2);\n m = numToString();\n } else {\n multiply(0, z);\n multiply(1 << -e, 0);\n m = numToString() + repeat.call(ZERO, f);\n }\n }\n if (f > 0) {\n k = m.length;\n m = s + (k <= f ? '0.' + repeat.call(ZERO, f - k) + m : m.slice(0, k - f) + '.' + m.slice(k - f));\n } else {\n m = s + m;\n } return m;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLnRvLWZpeGVkLmpzPzAzNmMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDLG1CQUFtQixtQkFBTyxDQUFDLEdBQW1CO0FBQzlDLGFBQWEsbUJBQU8sQ0FBQyxFQUFrQjtBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTSxtQkFBTyxDQUFDLENBQVU7QUFDeEI7QUFDQSxrQkFBa0I7QUFDbEIsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMO0FBQ0EsQ0FBQyIsImZpbGUiOiIxNTkuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciBhTnVtYmVyVmFsdWUgPSByZXF1aXJlKCcuL19hLW51bWJlci12YWx1ZScpO1xudmFyIHJlcGVhdCA9IHJlcXVpcmUoJy4vX3N0cmluZy1yZXBlYXQnKTtcbnZhciAkdG9GaXhlZCA9IDEuMC50b0ZpeGVkO1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcbnZhciBkYXRhID0gWzAsIDAsIDAsIDAsIDAsIDBdO1xudmFyIEVSUk9SID0gJ051bWJlci50b0ZpeGVkOiBpbmNvcnJlY3QgaW52b2NhdGlvbiEnO1xudmFyIFpFUk8gPSAnMCc7XG5cbnZhciBtdWx0aXBseSA9IGZ1bmN0aW9uIChuLCBjKSB7XG4gIHZhciBpID0gLTE7XG4gIHZhciBjMiA9IGM7XG4gIHdoaWxlICgrK2kgPCA2KSB7XG4gICAgYzIgKz0gbiAqIGRhdGFbaV07XG4gICAgZGF0YVtpXSA9IGMyICUgMWU3O1xuICAgIGMyID0gZmxvb3IoYzIgLyAxZTcpO1xuICB9XG59O1xudmFyIGRpdmlkZSA9IGZ1bmN0aW9uIChuKSB7XG4gIHZhciBpID0gNjtcbiAgdmFyIGMgPSAwO1xuICB3aGlsZSAoLS1pID49IDApIHtcbiAgICBjICs9IGRhdGFbaV07XG4gICAgZGF0YVtpXSA9IGZsb29yKGMgLyBuKTtcbiAgICBjID0gKGMgJSBuKSAqIDFlNztcbiAgfVxufTtcbnZhciBudW1Ub1N0cmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGkgPSA2O1xuICB2YXIgcyA9ICcnO1xuICB3aGlsZSAoLS1pID49IDApIHtcbiAgICBpZiAocyAhPT0gJycgfHwgaSA9PT0gMCB8fCBkYXRhW2ldICE9PSAwKSB7XG4gICAgICB2YXIgdCA9IFN0cmluZyhkYXRhW2ldKTtcbiAgICAgIHMgPSBzID09PSAnJyA/IHQgOiBzICsgcmVwZWF0LmNhbGwoWkVSTywgNyAtIHQubGVuZ3RoKSArIHQ7XG4gICAgfVxuICB9IHJldHVybiBzO1xufTtcbnZhciBwb3cgPSBmdW5jdGlvbiAoeCwgbiwgYWNjKSB7XG4gIHJldHVybiBuID09PSAwID8gYWNjIDogbiAlIDIgPT09IDEgPyBwb3coeCwgbiAtIDEsIGFjYyAqIHgpIDogcG93KHggKiB4LCBuIC8gMiwgYWNjKTtcbn07XG52YXIgbG9nID0gZnVuY3Rpb24gKHgpIHtcbiAgdmFyIG4gPSAwO1xuICB2YXIgeDIgPSB4O1xuICB3aGlsZSAoeDIgPj0gNDA5Nikge1xuICAgIG4gKz0gMTI7XG4gICAgeDIgLz0gNDA5NjtcbiAgfVxuICB3aGlsZSAoeDIgPj0gMikge1xuICAgIG4gKz0gMTtcbiAgICB4MiAvPSAyO1xuICB9IHJldHVybiBuO1xufTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoISEkdG9GaXhlZCAmJiAoXG4gIDAuMDAwMDgudG9GaXhlZCgzKSAhPT0gJzAuMDAwJyB8fFxuICAwLjkudG9GaXhlZCgwKSAhPT0gJzEnIHx8XG4gIDEuMjU1LnRvRml4ZWQoMikgIT09ICcxLjI1JyB8fFxuICAxMDAwMDAwMDAwMDAwMDAwMTI4LjAudG9GaXhlZCgwKSAhPT0gJzEwMDAwMDAwMDAwMDAwMDAxMjgnXG4pIHx8ICFyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgLy8gVjggfiBBbmRyb2lkIDQuMy1cbiAgJHRvRml4ZWQuY2FsbCh7fSk7XG59KSksICdOdW1iZXInLCB7XG4gIHRvRml4ZWQ6IGZ1bmN0aW9uIHRvRml4ZWQoZnJhY3Rpb25EaWdpdHMpIHtcbiAgICB2YXIgeCA9IGFOdW1iZXJWYWx1ZSh0aGlzLCBFUlJPUik7XG4gICAgdmFyIGYgPSB0b0ludGVnZXIoZnJhY3Rpb25EaWdpdHMpO1xuICAgIHZhciBzID0gJyc7XG4gICAgdmFyIG0gPSBaRVJPO1xuICAgIHZhciBlLCB6LCBqLCBrO1xuICAgIGlmIChmIDwgMCB8fCBmID4gMjApIHRocm93IFJhbmdlRXJyb3IoRVJST1IpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICBpZiAoeCAhPSB4KSByZXR1cm4gJ05hTic7XG4gICAgaWYgKHggPD0gLTFlMjEgfHwgeCA+PSAxZTIxKSByZXR1cm4gU3RyaW5nKHgpO1xuICAgIGlmICh4IDwgMCkge1xuICAgICAgcyA9ICctJztcbiAgICAgIHggPSAteDtcbiAgICB9XG4gICAgaWYgKHggPiAxZS0yMSkge1xuICAgICAgZSA9IGxvZyh4ICogcG93KDIsIDY5LCAxKSkgLSA2OTtcbiAgICAgIHogPSBlIDwgMCA/IHggKiBwb3coMiwgLWUsIDEpIDogeCAvIHBvdygyLCBlLCAxKTtcbiAgICAgIHogKj0gMHgxMDAwMDAwMDAwMDAwMDtcbiAgICAgIGUgPSA1MiAtIGU7XG4gICAgICBpZiAoZSA+IDApIHtcbiAgICAgICAgbXVsdGlwbHkoMCwgeik7XG4gICAgICAgIGogPSBmO1xuICAgICAgICB3aGlsZSAoaiA+PSA3KSB7XG4gICAgICAgICAgbXVsdGlwbHkoMWU3LCAwKTtcbiAgICAgICAgICBqIC09IDc7XG4gICAgICAgIH1cbiAgICAgICAgbXVsdGlwbHkocG93KDEwLCBqLCAxKSwgMCk7XG4gICAgICAgIGogPSBlIC0gMTtcbiAgICAgICAgd2hpbGUgKGogPj0gMjMpIHtcbiAgICAgICAgICBkaXZpZGUoMSA8PCAyMyk7XG4gICAgICAgICAgaiAtPSAyMztcbiAgICAgICAgfVxuICAgICAgICBkaXZpZGUoMSA8PCBqKTtcbiAgICAgICAgbXVsdGlwbHkoMSwgMSk7XG4gICAgICAgIGRpdmlkZSgyKTtcbiAgICAgICAgbSA9IG51bVRvU3RyaW5nKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBtdWx0aXBseSgwLCB6KTtcbiAgICAgICAgbXVsdGlwbHkoMSA8PCAtZSwgMCk7XG4gICAgICAgIG0gPSBudW1Ub1N0cmluZygpICsgcmVwZWF0LmNhbGwoWkVSTywgZik7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChmID4gMCkge1xuICAgICAgayA9IG0ubGVuZ3RoO1xuICAgICAgbSA9IHMgKyAoayA8PSBmID8gJzAuJyArIHJlcGVhdC5jYWxsKFpFUk8sIGYgLSBrKSArIG0gOiBtLnNsaWNlKDAsIGsgLSBmKSArICcuJyArIG0uc2xpY2UoayAtIGYpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbSA9IHMgKyBtO1xuICAgIH0gcmV0dXJuIG07XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///159\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar $fails = __webpack_require__(3);\nvar aNumberValue = __webpack_require__(105);\nvar $toPrecision = 1.0.toPrecision;\n\n$export($export.P + $export.F * ($fails(function () {\n // IE7-\n return $toPrecision.call(1, undefined) !== '1';\n}) || !$fails(function () {\n // V8 ~ Android 4.3-\n $toPrecision.call({});\n})), 'Number', {\n toPrecision: function toPrecision(precision) {\n var that = aNumberValue(this, 'Number#toPrecision: incorrect invocation!');\n return precision === undefined ? $toPrecision.call(that) : $toPrecision.call(that, precision);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLnRvLXByZWNpc2lvbi5qcz81NGE4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsYUFBYSxtQkFBTyxDQUFDLENBQVU7QUFDL0IsbUJBQW1CLG1CQUFPLENBQUMsR0FBbUI7QUFDOUM7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0Esc0JBQXNCO0FBQ3RCLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTYwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIGFOdW1iZXJWYWx1ZSA9IHJlcXVpcmUoJy4vX2EtbnVtYmVyLXZhbHVlJyk7XG52YXIgJHRvUHJlY2lzaW9uID0gMS4wLnRvUHJlY2lzaW9uO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICgkZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBJRTctXG4gIHJldHVybiAkdG9QcmVjaXNpb24uY2FsbCgxLCB1bmRlZmluZWQpICE9PSAnMSc7XG59KSB8fCAhJGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gVjggfiBBbmRyb2lkIDQuMy1cbiAgJHRvUHJlY2lzaW9uLmNhbGwoe30pO1xufSkpLCAnTnVtYmVyJywge1xuICB0b1ByZWNpc2lvbjogZnVuY3Rpb24gdG9QcmVjaXNpb24ocHJlY2lzaW9uKSB7XG4gICAgdmFyIHRoYXQgPSBhTnVtYmVyVmFsdWUodGhpcywgJ051bWJlciN0b1ByZWNpc2lvbjogaW5jb3JyZWN0IGludm9jYXRpb24hJyk7XG4gICAgcmV0dXJuIHByZWNpc2lvbiA9PT0gdW5kZWZpbmVkID8gJHRvUHJlY2lzaW9uLmNhbGwodGhhdCkgOiAkdG9QcmVjaXNpb24uY2FsbCh0aGF0LCBwcmVjaXNpb24pO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///160\n")},function(module,exports,__webpack_require__){eval("// 20.1.2.1 Number.EPSILON\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Number', { EPSILON: Math.pow(2, -52) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLmVwc2lsb24uanM/MmUzNyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXOztBQUVqQyw4QkFBOEIsNEJBQTRCIiwiZmlsZSI6IjE2MS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDIwLjEuMi4xIE51bWJlci5FUFNJTE9OXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ051bWJlcicsIHsgRVBTSUxPTjogTWF0aC5wb3coMiwgLTUyKSB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///161\n")},function(module,exports,__webpack_require__){eval("// 20.1.2.2 Number.isFinite(number)\nvar $export = __webpack_require__(0);\nvar _isFinite = __webpack_require__(2).isFinite;\n\n$export($export.S, 'Number', {\n isFinite: function isFinite(it) {\n return typeof it == 'number' && _isFinite(it);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLmlzLWZpbml0ZS5qcz9mY2EwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsZ0JBQWdCLG1CQUFPLENBQUMsQ0FBVzs7QUFFbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjE2Mi5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDIwLjEuMi4yIE51bWJlci5pc0Zpbml0ZShudW1iZXIpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIF9pc0Zpbml0ZSA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLmlzRmluaXRlO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ051bWJlcicsIHtcbiAgaXNGaW5pdGU6IGZ1bmN0aW9uIGlzRmluaXRlKGl0KSB7XG4gICAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnbnVtYmVyJyAmJiBfaXNGaW5pdGUoaXQpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///162\n")},function(module,exports,__webpack_require__){eval("// 20.1.2.3 Number.isInteger(number)\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Number', { isInteger: __webpack_require__(106) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLmlzLWludGVnZXIuanM/N2NkZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXOztBQUVqQyw4QkFBOEIsWUFBWSxtQkFBTyxDQUFDLEdBQWUsR0FBRyIsImZpbGUiOiIxNjMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyMC4xLjIuMyBOdW1iZXIuaXNJbnRlZ2VyKG51bWJlcilcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTnVtYmVyJywgeyBpc0ludGVnZXI6IHJlcXVpcmUoJy4vX2lzLWludGVnZXInKSB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///163\n")},function(module,exports,__webpack_require__){eval("// 20.1.2.4 Number.isNaN(number)\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Number', {\n isNaN: function isNaN(number) {\n // eslint-disable-next-line no-self-compare\n return number != number;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLmlzLW5hbi5qcz9lZTFkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjE2NC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDIwLjEuMi40IE51bWJlci5pc05hTihudW1iZXIpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ051bWJlcicsIHtcbiAgaXNOYU46IGZ1bmN0aW9uIGlzTmFOKG51bWJlcikge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICByZXR1cm4gbnVtYmVyICE9IG51bWJlcjtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///164\n")},function(module,exports,__webpack_require__){eval("// 20.1.2.5 Number.isSafeInteger(number)\nvar $export = __webpack_require__(0);\nvar isInteger = __webpack_require__(106);\nvar abs = Math.abs;\n\n$export($export.S, 'Number', {\n isSafeInteger: function isSafeInteger(number) {\n return isInteger(number) && abs(number) <= 0x1fffffffffffff;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLmlzLXNhZmUtaW50ZWdlci5qcz9iMWIxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsZ0JBQWdCLG1CQUFPLENBQUMsR0FBZTtBQUN2Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTY1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMS4yLjUgTnVtYmVyLmlzU2FmZUludGVnZXIobnVtYmVyKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBpc0ludGVnZXIgPSByZXF1aXJlKCcuL19pcy1pbnRlZ2VyJyk7XG52YXIgYWJzID0gTWF0aC5hYnM7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTnVtYmVyJywge1xuICBpc1NhZmVJbnRlZ2VyOiBmdW5jdGlvbiBpc1NhZmVJbnRlZ2VyKG51bWJlcikge1xuICAgIHJldHVybiBpc0ludGVnZXIobnVtYmVyKSAmJiBhYnMobnVtYmVyKSA8PSAweDFmZmZmZmZmZmZmZmZmO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///165\n")},function(module,exports,__webpack_require__){eval("// 20.1.2.6 Number.MAX_SAFE_INTEGER\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Number', { MAX_SAFE_INTEGER: 0x1fffffffffffff });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLm1heC1zYWZlLWludGVnZXIuanM/ODdmMyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXOztBQUVqQyw4QkFBOEIscUNBQXFDIiwiZmlsZSI6IjE2Ni5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDIwLjEuMi42IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ051bWJlcicsIHsgTUFYX1NBRkVfSU5URUdFUjogMHgxZmZmZmZmZmZmZmZmZiB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///166\n")},function(module,exports,__webpack_require__){eval("// 20.1.2.10 Number.MIN_SAFE_INTEGER\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Number', { MIN_SAFE_INTEGER: -0x1fffffffffffff });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLm1pbi1zYWZlLWludGVnZXIuanM/OTI3OCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXOztBQUVqQyw4QkFBOEIsc0NBQXNDIiwiZmlsZSI6IjE2Ny5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDIwLjEuMi4xMCBOdW1iZXIuTUlOX1NBRkVfSU5URUdFUlxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdOdW1iZXInLCB7IE1JTl9TQUZFX0lOVEVHRVI6IC0weDFmZmZmZmZmZmZmZmZmIH0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///167\n")},function(module,exports,__webpack_require__){eval("var $export = __webpack_require__(0);\nvar $parseFloat = __webpack_require__(104);\n// 20.1.2.12 Number.parseFloat(string)\n$export($export.S + $export.F * (Number.parseFloat != $parseFloat), 'Number', { parseFloat: $parseFloat });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLnBhcnNlLWZsb2F0LmpzPzVkZjIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsa0JBQWtCLG1CQUFPLENBQUMsR0FBZ0I7QUFDMUM7QUFDQSwrRUFBK0UsMEJBQTBCIiwiZmlsZSI6IjE2OC5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHBhcnNlRmxvYXQgPSByZXF1aXJlKCcuL19wYXJzZS1mbG9hdCcpO1xuLy8gMjAuMS4yLjEyIE51bWJlci5wYXJzZUZsb2F0KHN0cmluZylcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogKE51bWJlci5wYXJzZUZsb2F0ICE9ICRwYXJzZUZsb2F0KSwgJ051bWJlcicsIHsgcGFyc2VGbG9hdDogJHBhcnNlRmxvYXQgfSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///168\n")},function(module,exports,__webpack_require__){eval("var $export = __webpack_require__(0);\nvar $parseInt = __webpack_require__(103);\n// 20.1.2.13 Number.parseInt(string, radix)\n$export($export.S + $export.F * (Number.parseInt != $parseInt), 'Number', { parseInt: $parseInt });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLnBhcnNlLWludC5qcz8wNGZmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGdCQUFnQixtQkFBTyxDQUFDLEdBQWM7QUFDdEM7QUFDQSwyRUFBMkUsc0JBQXNCIiwiZmlsZSI6IjE2OS5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHBhcnNlSW50ID0gcmVxdWlyZSgnLi9fcGFyc2UtaW50Jyk7XG4vLyAyMC4xLjIuMTMgTnVtYmVyLnBhcnNlSW50KHN0cmluZywgcmFkaXgpXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIChOdW1iZXIucGFyc2VJbnQgIT0gJHBhcnNlSW50KSwgJ051bWJlcicsIHsgcGFyc2VJbnQ6ICRwYXJzZUludCB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///169\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.3 Math.acosh(x)\nvar $export = __webpack_require__(0);\nvar log1p = __webpack_require__(107);\nvar sqrt = Math.sqrt;\nvar $acosh = Math.acosh;\n\n$export($export.S + $export.F * !($acosh\n // V8 bug: https://code.google.com/p/v8/issues/detail?id=3509\n && Math.floor($acosh(Number.MAX_VALUE)) == 710\n // Tor Browser bug: Math.acosh(Infinity) -> NaN\n && $acosh(Infinity) == Infinity\n), 'Math', {\n acosh: function acosh(x) {\n return (x = +x) < 1 ? NaN : x > 94906265.62425156\n ? Math.log(x) + Math.LN2\n : log1p(x - 1 + sqrt(x - 1) * sqrt(x + 1));\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5hY29zaC5qcz83ZjI1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsWUFBWSxtQkFBTyxDQUFDLEdBQWU7QUFDbkM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIxNzAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyMC4yLjIuMyBNYXRoLmFjb3NoKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGxvZzFwID0gcmVxdWlyZSgnLi9fbWF0aC1sb2cxcCcpO1xudmFyIHNxcnQgPSBNYXRoLnNxcnQ7XG52YXIgJGFjb3NoID0gTWF0aC5hY29zaDtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhKCRhY29zaFxuICAvLyBWOCBidWc6IGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zNTA5XG4gICYmIE1hdGguZmxvb3IoJGFjb3NoKE51bWJlci5NQVhfVkFMVUUpKSA9PSA3MTBcbiAgLy8gVG9yIEJyb3dzZXIgYnVnOiBNYXRoLmFjb3NoKEluZmluaXR5KSAtPiBOYU5cbiAgJiYgJGFjb3NoKEluZmluaXR5KSA9PSBJbmZpbml0eVxuKSwgJ01hdGgnLCB7XG4gIGFjb3NoOiBmdW5jdGlvbiBhY29zaCh4KSB7XG4gICAgcmV0dXJuICh4ID0gK3gpIDwgMSA/IE5hTiA6IHggPiA5NDkwNjI2NS42MjQyNTE1NlxuICAgICAgPyBNYXRoLmxvZyh4KSArIE1hdGguTE4yXG4gICAgICA6IGxvZzFwKHggLSAxICsgc3FydCh4IC0gMSkgKiBzcXJ0KHggKyAxKSk7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///170\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.5 Math.asinh(x)\nvar $export = __webpack_require__(0);\nvar $asinh = Math.asinh;\n\nfunction asinh(x) {\n return !isFinite(x = +x) || x == 0 ? x : x < 0 ? -asinh(-x) : Math.log(x + Math.sqrt(x * x + 1));\n}\n\n// Tor Browser bug: Math.asinh(0) -> -0\n$export($export.S + $export.F * !($asinh && 1 / $asinh(0) > 0), 'Math', { asinh: asinh });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5hc2luaC5qcz81MzZiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakM7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EseUVBQXlFLGVBQWUiLCJmaWxlIjoiMTcxLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMi4yLjUgTWF0aC5hc2luaCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkYXNpbmggPSBNYXRoLmFzaW5oO1xuXG5mdW5jdGlvbiBhc2luaCh4KSB7XG4gIHJldHVybiAhaXNGaW5pdGUoeCA9ICt4KSB8fCB4ID09IDAgPyB4IDogeCA8IDAgPyAtYXNpbmgoLXgpIDogTWF0aC5sb2coeCArIE1hdGguc3FydCh4ICogeCArIDEpKTtcbn1cblxuLy8gVG9yIEJyb3dzZXIgYnVnOiBNYXRoLmFzaW5oKDApIC0+IC0wXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICEoJGFzaW5oICYmIDEgLyAkYXNpbmgoMCkgPiAwKSwgJ01hdGgnLCB7IGFzaW5oOiBhc2luaCB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///171\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.7 Math.atanh(x)\nvar $export = __webpack_require__(0);\nvar $atanh = Math.atanh;\n\n// Tor Browser bug: Math.atanh(-0) -> 0\n$export($export.S + $export.F * !($atanh && 1 / $atanh(-0) < 0), 'Math', {\n atanh: function atanh(x) {\n return (x = +x) == 0 ? x : Math.log((1 + x) / (1 - x)) / 2;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5hdGFuaC5qcz9kOWFiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTcyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMi4yLjcgTWF0aC5hdGFuaCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkYXRhbmggPSBNYXRoLmF0YW5oO1xuXG4vLyBUb3IgQnJvd3NlciBidWc6IE1hdGguYXRhbmgoLTApIC0+IDBcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogISgkYXRhbmggJiYgMSAvICRhdGFuaCgtMCkgPCAwKSwgJ01hdGgnLCB7XG4gIGF0YW5oOiBmdW5jdGlvbiBhdGFuaCh4KSB7XG4gICAgcmV0dXJuICh4ID0gK3gpID09IDAgPyB4IDogTWF0aC5sb2coKDEgKyB4KSAvICgxIC0geCkpIC8gMjtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///172\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.9 Math.cbrt(x)\nvar $export = __webpack_require__(0);\nvar sign = __webpack_require__(75);\n\n$export($export.S, 'Math', {\n cbrt: function cbrt(x) {\n return sign(x = +x) * Math.pow(Math.abs(x), 1 / 3);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5jYnJ0LmpzP2Y5YWIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxXQUFXLG1CQUFPLENBQUMsRUFBYzs7QUFFakM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjE3My5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDIwLjIuMi45IE1hdGguY2JydCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBzaWduID0gcmVxdWlyZSgnLi9fbWF0aC1zaWduJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgY2JydDogZnVuY3Rpb24gY2JydCh4KSB7XG4gICAgcmV0dXJuIHNpZ24oeCA9ICt4KSAqIE1hdGgucG93KE1hdGguYWJzKHgpLCAxIC8gMyk7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///173\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.11 Math.clz32(x)\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', {\n clz32: function clz32(x) {\n return (x >>>= 0) ? 31 - Math.floor(Math.log(x + 0.5) * Math.LOG2E) : 32;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5jbHozMi5qcz8zMmQ3Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIxNzQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyMC4yLjIuMTEgTWF0aC5jbHozMih4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBjbHozMjogZnVuY3Rpb24gY2x6MzIoeCkge1xuICAgIHJldHVybiAoeCA+Pj49IDApID8gMzEgLSBNYXRoLmZsb29yKE1hdGgubG9nKHggKyAwLjUpICogTWF0aC5MT0cyRSkgOiAzMjtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///174\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.12 Math.cosh(x)\nvar $export = __webpack_require__(0);\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n cosh: function cosh(x) {\n return (exp(x = +x) + exp(-x)) / 2;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5jb3NoLmpzPzI1YzkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTc1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMi4yLjEyIE1hdGguY29zaCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBleHAgPSBNYXRoLmV4cDtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBjb3NoOiBmdW5jdGlvbiBjb3NoKHgpIHtcbiAgICByZXR1cm4gKGV4cCh4ID0gK3gpICsgZXhwKC14KSkgLyAyO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///175\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.14 Math.expm1(x)\nvar $export = __webpack_require__(0);\nvar $expm1 = __webpack_require__(76);\n\n$export($export.S + $export.F * ($expm1 != Math.expm1), 'Math', { expm1: $expm1 });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5leHBtMS5qcz85ZjNjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsYUFBYSxtQkFBTyxDQUFDLEVBQWU7O0FBRXBDLGlFQUFpRSxnQkFBZ0IiLCJmaWxlIjoiMTc2LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMi4yLjE0IE1hdGguZXhwbTEoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGV4cG0xID0gcmVxdWlyZSgnLi9fbWF0aC1leHBtMScpO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICgkZXhwbTEgIT0gTWF0aC5leHBtMSksICdNYXRoJywgeyBleHBtMTogJGV4cG0xIH0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///176\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.16 Math.fround(x)\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', { fround: __webpack_require__(108) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5mcm91bmQuanM/MDQyZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXOztBQUVqQyw0QkFBNEIsU0FBUyxtQkFBTyxDQUFDLEdBQWdCLEdBQUciLCJmaWxlIjoiMTc3LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMi4yLjE2IE1hdGguZnJvdW5kKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7IGZyb3VuZDogcmVxdWlyZSgnLi9fbWF0aC1mcm91bmQnKSB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///177\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.17 Math.hypot([value1[, value2[, … ]]])\nvar $export = __webpack_require__(0);\nvar abs = Math.abs;\n\n$export($export.S, 'Math', {\n hypot: function hypot(value1, value2) { // eslint-disable-line no-unused-vars\n var sum = 0;\n var i = 0;\n var aLen = arguments.length;\n var larg = 0;\n var arg, div;\n while (i < aLen) {\n arg = abs(arguments[i++]);\n if (larg < arg) {\n div = larg / arg;\n sum = sum * div * div + 1;\n larg = arg;\n } else if (arg > 0) {\n div = arg / larg;\n sum += div * div;\n } else sum += arg;\n }\n return larg === Infinity ? Infinity : larg * Math.sqrt(sum);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5oeXBvdC5qcz9jN2M2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakM7O0FBRUE7QUFDQSx5Q0FBeUM7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTc4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMi4yLjE3IE1hdGguaHlwb3QoW3ZhbHVlMVssIHZhbHVlMlssIOKApiBdXV0pXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGFicyA9IE1hdGguYWJzO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGh5cG90OiBmdW5jdGlvbiBoeXBvdCh2YWx1ZTEsIHZhbHVlMikgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgdmFyIHN1bSA9IDA7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgbGFyZyA9IDA7XG4gICAgdmFyIGFyZywgZGl2O1xuICAgIHdoaWxlIChpIDwgYUxlbikge1xuICAgICAgYXJnID0gYWJzKGFyZ3VtZW50c1tpKytdKTtcbiAgICAgIGlmIChsYXJnIDwgYXJnKSB7XG4gICAgICAgIGRpdiA9IGxhcmcgLyBhcmc7XG4gICAgICAgIHN1bSA9IHN1bSAqIGRpdiAqIGRpdiArIDE7XG4gICAgICAgIGxhcmcgPSBhcmc7XG4gICAgICB9IGVsc2UgaWYgKGFyZyA+IDApIHtcbiAgICAgICAgZGl2ID0gYXJnIC8gbGFyZztcbiAgICAgICAgc3VtICs9IGRpdiAqIGRpdjtcbiAgICAgIH0gZWxzZSBzdW0gKz0gYXJnO1xuICAgIH1cbiAgICByZXR1cm4gbGFyZyA9PT0gSW5maW5pdHkgPyBJbmZpbml0eSA6IGxhcmcgKiBNYXRoLnNxcnQoc3VtKTtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///178\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.18 Math.imul(x, y)\nvar $export = __webpack_require__(0);\nvar $imul = Math.imul;\n\n// some WebKit versions fails with big numbers, some has wrong arity\n$export($export.S + $export.F * __webpack_require__(3)(function () {\n return $imul(0xffffffff, 5) != -5 || $imul.length != 2;\n}), 'Math', {\n imul: function imul(x, y) {\n var UINT16 = 0xffff;\n var xn = +x;\n var yn = +y;\n var xl = UINT16 & xn;\n var yl = UINT16 & yn;\n return 0 | xl * yl + ((UINT16 & xn >>> 16) * yl + xl * (UINT16 & yn >>> 16) << 16 >>> 0);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5pbXVsLmpzP2Y0ZmYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQzs7QUFFQTtBQUNBLGdDQUFnQyxtQkFBTyxDQUFDLENBQVU7QUFDbEQ7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTc5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMi4yLjE4IE1hdGguaW11bCh4LCB5KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkaW11bCA9IE1hdGguaW11bDtcblxuLy8gc29tZSBXZWJLaXQgdmVyc2lvbnMgZmFpbHMgd2l0aCBiaWcgbnVtYmVycywgc29tZSBoYXMgd3JvbmcgYXJpdHlcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAkaW11bCgweGZmZmZmZmZmLCA1KSAhPSAtNSB8fCAkaW11bC5sZW5ndGggIT0gMjtcbn0pLCAnTWF0aCcsIHtcbiAgaW11bDogZnVuY3Rpb24gaW11bCh4LCB5KSB7XG4gICAgdmFyIFVJTlQxNiA9IDB4ZmZmZjtcbiAgICB2YXIgeG4gPSAreDtcbiAgICB2YXIgeW4gPSAreTtcbiAgICB2YXIgeGwgPSBVSU5UMTYgJiB4bjtcbiAgICB2YXIgeWwgPSBVSU5UMTYgJiB5bjtcbiAgICByZXR1cm4gMCB8IHhsICogeWwgKyAoKFVJTlQxNiAmIHhuID4+PiAxNikgKiB5bCArIHhsICogKFVJTlQxNiAmIHluID4+PiAxNikgPDwgMTYgPj4+IDApO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///179\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.21 Math.log10(x)\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', {\n log10: function log10(x) {\n return Math.log(x) * Math.LOG10E;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5sb2cxMC5qcz83ODcyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIxODAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyMC4yLjIuMjEgTWF0aC5sb2cxMCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBsb2cxMDogZnVuY3Rpb24gbG9nMTAoeCkge1xuICAgIHJldHVybiBNYXRoLmxvZyh4KSAqIE1hdGguTE9HMTBFO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///180\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.20 Math.log1p(x)\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', { log1p: __webpack_require__(107) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5sb2cxcC5qcz8wNDlmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDLDRCQUE0QixRQUFRLG1CQUFPLENBQUMsR0FBZSxHQUFHIiwiZmlsZSI6IjE4MS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDIwLjIuMi4yMCBNYXRoLmxvZzFwKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7IGxvZzFwOiByZXF1aXJlKCcuL19tYXRoLWxvZzFwJykgfSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///181\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.22 Math.log2(x)\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', {\n log2: function log2(x) {\n return Math.log(x) / Math.LN2;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5sb2cyLmpzP2E2OWYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVzs7QUFFakM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjE4Mi5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDIwLjIuMi4yMiBNYXRoLmxvZzIoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgbG9nMjogZnVuY3Rpb24gbG9nMih4KSB7XG4gICAgcmV0dXJuIE1hdGgubG9nKHgpIC8gTWF0aC5MTjI7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///182\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.28 Math.sign(x)\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', { sign: __webpack_require__(75) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5zaWduLmpzPzBiMjEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVzs7QUFFakMsNEJBQTRCLE9BQU8sbUJBQU8sQ0FBQyxFQUFjLEdBQUciLCJmaWxlIjoiMTgzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMi4yLjI4IE1hdGguc2lnbih4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywgeyBzaWduOiByZXF1aXJlKCcuL19tYXRoLXNpZ24nKSB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///183\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.30 Math.sinh(x)\nvar $export = __webpack_require__(0);\nvar expm1 = __webpack_require__(76);\nvar exp = Math.exp;\n\n// V8 near Chromium 38 has a problem with very small numbers\n$export($export.S + $export.F * __webpack_require__(3)(function () {\n return !Math.sinh(-2e-17) != -2e-17;\n}), 'Math', {\n sinh: function sinh(x) {\n return Math.abs(x = +x) < 1\n ? (expm1(x) - expm1(-x)) / 2\n : (exp(x - 1) - exp(-x - 1)) * (Math.E / 2);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5zaW5oLmpzPzZjMWEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxZQUFZLG1CQUFPLENBQUMsRUFBZTtBQUNuQzs7QUFFQTtBQUNBLGdDQUFnQyxtQkFBTyxDQUFDLENBQVU7QUFDbEQ7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTg0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMi4yLjMwIE1hdGguc2luaCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBleHBtMSA9IHJlcXVpcmUoJy4vX21hdGgtZXhwbTEnKTtcbnZhciBleHAgPSBNYXRoLmV4cDtcblxuLy8gVjggbmVhciBDaHJvbWl1bSAzOCBoYXMgYSBwcm9ibGVtIHdpdGggdmVyeSBzbWFsbCBudW1iZXJzXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gIU1hdGguc2luaCgtMmUtMTcpICE9IC0yZS0xNztcbn0pLCAnTWF0aCcsIHtcbiAgc2luaDogZnVuY3Rpb24gc2luaCh4KSB7XG4gICAgcmV0dXJuIE1hdGguYWJzKHggPSAreCkgPCAxXG4gICAgICA/IChleHBtMSh4KSAtIGV4cG0xKC14KSkgLyAyXG4gICAgICA6IChleHAoeCAtIDEpIC0gZXhwKC14IC0gMSkpICogKE1hdGguRSAvIDIpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///184\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.33 Math.tanh(x)\nvar $export = __webpack_require__(0);\nvar expm1 = __webpack_require__(76);\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n tanh: function tanh(x) {\n var a = expm1(x = +x);\n var b = expm1(-x);\n return a == Infinity ? 1 : b == Infinity ? -1 : (a - b) / (exp(x) + exp(-x));\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC50YW5oLmpzP2M3YzYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxZQUFZLG1CQUFPLENBQUMsRUFBZTtBQUNuQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjE4NS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDIwLjIuMi4zMyBNYXRoLnRhbmgoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZXhwbTEgPSByZXF1aXJlKCcuL19tYXRoLWV4cG0xJyk7XG52YXIgZXhwID0gTWF0aC5leHA7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgdGFuaDogZnVuY3Rpb24gdGFuaCh4KSB7XG4gICAgdmFyIGEgPSBleHBtMSh4ID0gK3gpO1xuICAgIHZhciBiID0gZXhwbTEoLXgpO1xuICAgIHJldHVybiBhID09IEluZmluaXR5ID8gMSA6IGIgPT0gSW5maW5pdHkgPyAtMSA6IChhIC0gYikgLyAoZXhwKHgpICsgZXhwKC14KSk7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///185\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.34 Math.trunc(x)\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', {\n trunc: function trunc(it) {\n return (it > 0 ? Math.floor : Math.ceil)(it);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC50cnVuYy5qcz84NGI0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIxODYuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyMC4yLjIuMzQgTWF0aC50cnVuYyh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICB0cnVuYzogZnVuY3Rpb24gdHJ1bmMoaXQpIHtcbiAgICByZXR1cm4gKGl0ID4gMCA/IE1hdGguZmxvb3IgOiBNYXRoLmNlaWwpKGl0KTtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///186\n")},function(module,exports,__webpack_require__){eval("var $export = __webpack_require__(0);\nvar toAbsoluteIndex = __webpack_require__(35);\nvar fromCharCode = String.fromCharCode;\nvar $fromCodePoint = String.fromCodePoint;\n\n// length should be 1, old FF problem\n$export($export.S + $export.F * (!!$fromCodePoint && $fromCodePoint.length != 1), 'String', {\n // 21.1.2.2 String.fromCodePoint(...codePoints)\n fromCodePoint: function fromCodePoint(x) { // eslint-disable-line no-unused-vars\n var res = [];\n var aLen = arguments.length;\n var i = 0;\n var code;\n while (aLen > i) {\n code = +arguments[i++];\n if (toAbsoluteIndex(code, 0x10ffff) !== code) throw RangeError(code + ' is not a valid code point');\n res.push(code < 0x10000\n ? fromCharCode(code)\n : fromCharCode(((code -= 0x10000) >> 10) + 0xd800, code % 0x400 + 0xdc00)\n );\n } return res.join('');\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmZyb20tY29kZS1wb2ludC5qcz81Njk1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLHNCQUFzQixtQkFBTyxDQUFDLEVBQXNCO0FBQ3BEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsNENBQTRDO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxDQUFDIiwiZmlsZSI6IjE4Ny5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi9fdG8tYWJzb2x1dGUtaW5kZXgnKTtcbnZhciBmcm9tQ2hhckNvZGUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlO1xudmFyICRmcm9tQ29kZVBvaW50ID0gU3RyaW5nLmZyb21Db2RlUG9pbnQ7XG5cbi8vIGxlbmd0aCBzaG91bGQgYmUgMSwgb2xkIEZGIHByb2JsZW1cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogKCEhJGZyb21Db2RlUG9pbnQgJiYgJGZyb21Db2RlUG9pbnQubGVuZ3RoICE9IDEpLCAnU3RyaW5nJywge1xuICAvLyAyMS4xLjIuMiBTdHJpbmcuZnJvbUNvZGVQb2ludCguLi5jb2RlUG9pbnRzKVxuICBmcm9tQ29kZVBvaW50OiBmdW5jdGlvbiBmcm9tQ29kZVBvaW50KHgpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgIHZhciByZXMgPSBbXTtcbiAgICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBjb2RlO1xuICAgIHdoaWxlIChhTGVuID4gaSkge1xuICAgICAgY29kZSA9ICthcmd1bWVudHNbaSsrXTtcbiAgICAgIGlmICh0b0Fic29sdXRlSW5kZXgoY29kZSwgMHgxMGZmZmYpICE9PSBjb2RlKSB0aHJvdyBSYW5nZUVycm9yKGNvZGUgKyAnIGlzIG5vdCBhIHZhbGlkIGNvZGUgcG9pbnQnKTtcbiAgICAgIHJlcy5wdXNoKGNvZGUgPCAweDEwMDAwXG4gICAgICAgID8gZnJvbUNoYXJDb2RlKGNvZGUpXG4gICAgICAgIDogZnJvbUNoYXJDb2RlKCgoY29kZSAtPSAweDEwMDAwKSA+PiAxMCkgKyAweGQ4MDAsIGNvZGUgJSAweDQwMCArIDB4ZGMwMClcbiAgICAgICk7XG4gICAgfSByZXR1cm4gcmVzLmpvaW4oJycpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///187\n")},function(module,exports,__webpack_require__){eval("var $export = __webpack_require__(0);\nvar toIObject = __webpack_require__(15);\nvar toLength = __webpack_require__(6);\n\n$export($export.S, 'String', {\n // 21.1.2.4 String.raw(callSite, ...substitutions)\n raw: function raw(callSite) {\n var tpl = toIObject(callSite.raw);\n var len = toLength(tpl.length);\n var aLen = arguments.length;\n var res = [];\n var i = 0;\n while (len > i) {\n res.push(String(tpl[i++]));\n if (i < aLen) res.push(String(arguments[i]));\n } return res.join('');\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnJhdy5qcz83ODhkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGdCQUFnQixtQkFBTyxDQUFDLEVBQWU7QUFDdkMsZUFBZSxtQkFBTyxDQUFDLENBQWM7O0FBRXJDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxDQUFDIiwiZmlsZSI6IjE4OC5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnU3RyaW5nJywge1xuICAvLyAyMS4xLjIuNCBTdHJpbmcucmF3KGNhbGxTaXRlLCAuLi5zdWJzdGl0dXRpb25zKVxuICByYXc6IGZ1bmN0aW9uIHJhdyhjYWxsU2l0ZSkge1xuICAgIHZhciB0cGwgPSB0b0lPYmplY3QoY2FsbFNpdGUucmF3KTtcbiAgICB2YXIgbGVuID0gdG9MZW5ndGgodHBsLmxlbmd0aCk7XG4gICAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciByZXMgPSBbXTtcbiAgICB2YXIgaSA9IDA7XG4gICAgd2hpbGUgKGxlbiA+IGkpIHtcbiAgICAgIHJlcy5wdXNoKFN0cmluZyh0cGxbaSsrXSkpO1xuICAgICAgaWYgKGkgPCBhTGVuKSByZXMucHVzaChTdHJpbmcoYXJndW1lbnRzW2ldKSk7XG4gICAgfSByZXR1cm4gcmVzLmpvaW4oJycpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///188\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// 21.1.3.25 String.prototype.trim()\n__webpack_require__(45)('trim', function ($trim) {\n return function trim() {\n return $trim(this, 3);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnRyaW0uanM/NGYzNyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsbUJBQU8sQ0FBQyxFQUFnQjtBQUN4QjtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjE4OS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIDIxLjEuMy4yNSBTdHJpbmcucHJvdG90eXBlLnRyaW0oKVxucmVxdWlyZSgnLi9fc3RyaW5nLXRyaW0nKSgndHJpbScsIGZ1bmN0aW9uICgkdHJpbSkge1xuICByZXR1cm4gZnVuY3Rpb24gdHJpbSgpIHtcbiAgICByZXR1cm4gJHRyaW0odGhpcywgMyk7XG4gIH07XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///189\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $at = __webpack_require__(55)(true);\n\n// 21.1.3.27 String.prototype[@@iterator]()\n__webpack_require__(77)(String, 'String', function (iterated) {\n this._t = String(iterated); // target\n this._i = 0; // next index\n// 21.1.5.2.1 %StringIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var index = this._i;\n var point;\n if (index >= O.length) return { value: undefined, done: true };\n point = $at(O, index);\n this._i += point.length;\n return { value: point, done: false };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLml0ZXJhdG9yLmpzPzVkZjMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixVQUFVLG1CQUFPLENBQUMsRUFBYzs7QUFFaEM7QUFDQSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3hCLDZCQUE2QjtBQUM3QixjQUFjO0FBQ2Q7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDO0FBQ2pDO0FBQ0E7QUFDQSxVQUFVO0FBQ1YsQ0FBQyIsImZpbGUiOiIxOTAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgJGF0ID0gcmVxdWlyZSgnLi9fc3RyaW5nLWF0JykodHJ1ZSk7XG5cbi8vIDIxLjEuMy4yNyBTdHJpbmcucHJvdG90eXBlW0BAaXRlcmF0b3JdKClcbnJlcXVpcmUoJy4vX2l0ZXItZGVmaW5lJykoU3RyaW5nLCAnU3RyaW5nJywgZnVuY3Rpb24gKGl0ZXJhdGVkKSB7XG4gIHRoaXMuX3QgPSBTdHJpbmcoaXRlcmF0ZWQpOyAvLyB0YXJnZXRcbiAgdGhpcy5faSA9IDA7ICAgICAgICAgICAgICAgIC8vIG5leHQgaW5kZXhcbi8vIDIxLjEuNS4yLjEgJVN0cmluZ0l0ZXJhdG9yUHJvdG90eXBlJS5uZXh0KClcbn0sIGZ1bmN0aW9uICgpIHtcbiAgdmFyIE8gPSB0aGlzLl90O1xuICB2YXIgaW5kZXggPSB0aGlzLl9pO1xuICB2YXIgcG9pbnQ7XG4gIGlmIChpbmRleCA+PSBPLmxlbmd0aCkgcmV0dXJuIHsgdmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1ZSB9O1xuICBwb2ludCA9ICRhdChPLCBpbmRleCk7XG4gIHRoaXMuX2kgKz0gcG9pbnQubGVuZ3RoO1xuICByZXR1cm4geyB2YWx1ZTogcG9pbnQsIGRvbmU6IGZhbHNlIH07XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///190\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar $at = __webpack_require__(55)(false);\n$export($export.P, 'String', {\n // 21.1.3.3 String.prototype.codePointAt(pos)\n codePointAt: function codePointAt(pos) {\n return $at(this, pos);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmNvZGUtcG9pbnQtYXQuanM/YTAzMiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLFVBQVUsbUJBQU8sQ0FBQyxFQUFjO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjE5MS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGF0ID0gcmVxdWlyZSgnLi9fc3RyaW5nLWF0JykoZmFsc2UpO1xuJGV4cG9ydCgkZXhwb3J0LlAsICdTdHJpbmcnLCB7XG4gIC8vIDIxLjEuMy4zIFN0cmluZy5wcm90b3R5cGUuY29kZVBvaW50QXQocG9zKVxuICBjb2RlUG9pbnRBdDogZnVuY3Rpb24gY29kZVBvaW50QXQocG9zKSB7XG4gICAgcmV0dXJuICRhdCh0aGlzLCBwb3MpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///191\n")},function(module,exports,__webpack_require__){"use strict";eval("// 21.1.3.6 String.prototype.endsWith(searchString [, endPosition])\n\nvar $export = __webpack_require__(0);\nvar toLength = __webpack_require__(6);\nvar context = __webpack_require__(79);\nvar ENDS_WITH = 'endsWith';\nvar $endsWith = ''[ENDS_WITH];\n\n$export($export.P + $export.F * __webpack_require__(80)(ENDS_WITH), 'String', {\n endsWith: function endsWith(searchString /* , endPosition = @length */) {\n var that = context(this, searchString, ENDS_WITH);\n var endPosition = arguments.length > 1 ? arguments[1] : undefined;\n var len = toLength(that.length);\n var end = endPosition === undefined ? len : Math.min(toLength(endPosition), len);\n var search = String(searchString);\n return $endsWith\n ? $endsWith.call(that, search, end)\n : that.slice(end - search.length, end) === search;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmVuZHMtd2l0aC5qcz9hZWY2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ2E7QUFDYixjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxjQUFjLG1CQUFPLENBQUMsRUFBbUI7QUFDekM7QUFDQTs7QUFFQSxnQ0FBZ0MsbUJBQU8sQ0FBQyxFQUFvQjtBQUM1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTkyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjEuMS4zLjYgU3RyaW5nLnByb3RvdHlwZS5lbmRzV2l0aChzZWFyY2hTdHJpbmcgWywgZW5kUG9zaXRpb25dKVxuJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGNvbnRleHQgPSByZXF1aXJlKCcuL19zdHJpbmctY29udGV4dCcpO1xudmFyIEVORFNfV0lUSCA9ICdlbmRzV2l0aCc7XG52YXIgJGVuZHNXaXRoID0gJydbRU5EU19XSVRIXTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscy1pcy1yZWdleHAnKShFTkRTX1dJVEgpLCAnU3RyaW5nJywge1xuICBlbmRzV2l0aDogZnVuY3Rpb24gZW5kc1dpdGgoc2VhcmNoU3RyaW5nIC8qICwgZW5kUG9zaXRpb24gPSBAbGVuZ3RoICovKSB7XG4gICAgdmFyIHRoYXQgPSBjb250ZXh0KHRoaXMsIHNlYXJjaFN0cmluZywgRU5EU19XSVRIKTtcbiAgICB2YXIgZW5kUG9zaXRpb24gPSBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgbGVuID0gdG9MZW5ndGgodGhhdC5sZW5ndGgpO1xuICAgIHZhciBlbmQgPSBlbmRQb3NpdGlvbiA9PT0gdW5kZWZpbmVkID8gbGVuIDogTWF0aC5taW4odG9MZW5ndGgoZW5kUG9zaXRpb24pLCBsZW4pO1xuICAgIHZhciBzZWFyY2ggPSBTdHJpbmcoc2VhcmNoU3RyaW5nKTtcbiAgICByZXR1cm4gJGVuZHNXaXRoXG4gICAgICA/ICRlbmRzV2l0aC5jYWxsKHRoYXQsIHNlYXJjaCwgZW5kKVxuICAgICAgOiB0aGF0LnNsaWNlKGVuZCAtIHNlYXJjaC5sZW5ndGgsIGVuZCkgPT09IHNlYXJjaDtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///192\n")},function(module,exports,__webpack_require__){"use strict";eval("// 21.1.3.7 String.prototype.includes(searchString, position = 0)\n\nvar $export = __webpack_require__(0);\nvar context = __webpack_require__(79);\nvar INCLUDES = 'includes';\n\n$export($export.P + $export.F * __webpack_require__(80)(INCLUDES), 'String', {\n includes: function includes(searchString /* , position = 0 */) {\n return !!~context(this, searchString, INCLUDES)\n .indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmluY2x1ZGVzLmpzPzJmZGIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDYTtBQUNiLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGNBQWMsbUJBQU8sQ0FBQyxFQUFtQjtBQUN6Qzs7QUFFQSxnQ0FBZ0MsbUJBQU8sQ0FBQyxFQUFvQjtBQUM1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTkzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjEuMS4zLjcgU3RyaW5nLnByb3RvdHlwZS5pbmNsdWRlcyhzZWFyY2hTdHJpbmcsIHBvc2l0aW9uID0gMClcbid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgY29udGV4dCA9IHJlcXVpcmUoJy4vX3N0cmluZy1jb250ZXh0Jyk7XG52YXIgSU5DTFVERVMgPSAnaW5jbHVkZXMnO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzLWlzLXJlZ2V4cCcpKElOQ0xVREVTKSwgJ1N0cmluZycsIHtcbiAgaW5jbHVkZXM6IGZ1bmN0aW9uIGluY2x1ZGVzKHNlYXJjaFN0cmluZyAvKiAsIHBvc2l0aW9uID0gMCAqLykge1xuICAgIHJldHVybiAhIX5jb250ZXh0KHRoaXMsIHNlYXJjaFN0cmluZywgSU5DTFVERVMpXG4gICAgICAuaW5kZXhPZihzZWFyY2hTdHJpbmcsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///193\n")},function(module,exports,__webpack_require__){eval("var $export = __webpack_require__(0);\n\n$export($export.P, 'String', {\n // 21.1.3.13 String.prototype.repeat(count)\n repeat: __webpack_require__(74)\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnJlcGVhdC5qcz8xNGI5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXOztBQUVqQztBQUNBO0FBQ0EsVUFBVSxtQkFBTyxDQUFDLEVBQWtCO0FBQ3BDLENBQUMiLCJmaWxlIjoiMTk0LmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdTdHJpbmcnLCB7XG4gIC8vIDIxLjEuMy4xMyBTdHJpbmcucHJvdG90eXBlLnJlcGVhdChjb3VudClcbiAgcmVwZWF0OiByZXF1aXJlKCcuL19zdHJpbmctcmVwZWF0Jylcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///194\n")},function(module,exports,__webpack_require__){"use strict";eval("// 21.1.3.18 String.prototype.startsWith(searchString [, position ])\n\nvar $export = __webpack_require__(0);\nvar toLength = __webpack_require__(6);\nvar context = __webpack_require__(79);\nvar STARTS_WITH = 'startsWith';\nvar $startsWith = ''[STARTS_WITH];\n\n$export($export.P + $export.F * __webpack_require__(80)(STARTS_WITH), 'String', {\n startsWith: function startsWith(searchString /* , position = 0 */) {\n var that = context(this, searchString, STARTS_WITH);\n var index = toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length));\n var search = String(searchString);\n return $startsWith\n ? $startsWith.call(that, search, index)\n : that.slice(index, index + search.length) === search;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnN0YXJ0cy13aXRoLmpzP2Y1NTkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDYTtBQUNiLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGNBQWMsbUJBQU8sQ0FBQyxFQUFtQjtBQUN6QztBQUNBOztBQUVBLGdDQUFnQyxtQkFBTyxDQUFDLEVBQW9CO0FBQzVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjE5NS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDIxLjEuMy4xOCBTdHJpbmcucHJvdG90eXBlLnN0YXJ0c1dpdGgoc2VhcmNoU3RyaW5nIFssIHBvc2l0aW9uIF0pXG4ndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgY29udGV4dCA9IHJlcXVpcmUoJy4vX3N0cmluZy1jb250ZXh0Jyk7XG52YXIgU1RBUlRTX1dJVEggPSAnc3RhcnRzV2l0aCc7XG52YXIgJHN0YXJ0c1dpdGggPSAnJ1tTVEFSVFNfV0lUSF07XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMtaXMtcmVnZXhwJykoU1RBUlRTX1dJVEgpLCAnU3RyaW5nJywge1xuICBzdGFydHNXaXRoOiBmdW5jdGlvbiBzdGFydHNXaXRoKHNlYXJjaFN0cmluZyAvKiAsIHBvc2l0aW9uID0gMCAqLykge1xuICAgIHZhciB0aGF0ID0gY29udGV4dCh0aGlzLCBzZWFyY2hTdHJpbmcsIFNUQVJUU19XSVRIKTtcbiAgICB2YXIgaW5kZXggPSB0b0xlbmd0aChNYXRoLm1pbihhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCwgdGhhdC5sZW5ndGgpKTtcbiAgICB2YXIgc2VhcmNoID0gU3RyaW5nKHNlYXJjaFN0cmluZyk7XG4gICAgcmV0dXJuICRzdGFydHNXaXRoXG4gICAgICA/ICRzdGFydHNXaXRoLmNhbGwodGhhdCwgc2VhcmNoLCBpbmRleClcbiAgICAgIDogdGhhdC5zbGljZShpbmRleCwgaW5kZXggKyBzZWFyY2gubGVuZ3RoKSA9PT0gc2VhcmNoO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///195\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// B.2.3.2 String.prototype.anchor(name)\n__webpack_require__(13)('anchor', function (createHTML) {\n return function anchor(name) {\n return createHTML(this, 'a', 'name', name);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmFuY2hvci5qcz84NDQ5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTk2LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuMiBTdHJpbmcucHJvdG90eXBlLmFuY2hvcihuYW1lKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnYW5jaG9yJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGFuY2hvcihuYW1lKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ2EnLCAnbmFtZScsIG5hbWUpO1xuICB9O1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///196\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// B.2.3.3 String.prototype.big()\n__webpack_require__(13)('big', function (createHTML) {\n return function big() {\n return createHTML(this, 'big', '', '');\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmJpZy5qcz85Yzg2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTk3LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuMyBTdHJpbmcucHJvdG90eXBlLmJpZygpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdiaWcnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gYmlnKCkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdiaWcnLCAnJywgJycpO1xuICB9O1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///197\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// B.2.3.4 String.prototype.blink()\n__webpack_require__(13)('blink', function (createHTML) {\n return function blink() {\n return createHTML(this, 'blink', '', '');\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmJsaW5rLmpzP2ZhODMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBLG1CQUFPLENBQUMsRUFBZ0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIxOTguanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy40IFN0cmluZy5wcm90b3R5cGUuYmxpbmsoKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnYmxpbmsnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gYmxpbmsoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ2JsaW5rJywgJycsICcnKTtcbiAgfTtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///198\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// B.2.3.5 String.prototype.bold()\n__webpack_require__(13)('bold', function (createHTML) {\n return function bold() {\n return createHTML(this, 'b', '', '');\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmJvbGQuanM/NDhjMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsbUJBQU8sQ0FBQyxFQUFnQjtBQUN4QjtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjE5OS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjUgU3RyaW5nLnByb3RvdHlwZS5ib2xkKClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ2JvbGQnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gYm9sZCgpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnYicsICcnLCAnJyk7XG4gIH07XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///199\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// B.2.3.6 String.prototype.fixed()\n__webpack_require__(13)('fixed', function (createHTML) {\n return function fixed() {\n return createHTML(this, 'tt', '', '');\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmZpeGVkLmpzP2QyNjMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBLG1CQUFPLENBQUMsRUFBZ0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyMDAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy42IFN0cmluZy5wcm90b3R5cGUuZml4ZWQoKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnZml4ZWQnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gZml4ZWQoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ3R0JywgJycsICcnKTtcbiAgfTtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///200\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// B.2.3.7 String.prototype.fontcolor(color)\n__webpack_require__(13)('fontcolor', function (createHTML) {\n return function fontcolor(color) {\n return createHTML(this, 'font', 'color', color);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmZvbnRjb2xvci5qcz82YzM3Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjAxLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuNyBTdHJpbmcucHJvdG90eXBlLmZvbnRjb2xvcihjb2xvcilcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ2ZvbnRjb2xvcicsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBmb250Y29sb3IoY29sb3IpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnZm9udCcsICdjb2xvcicsIGNvbG9yKTtcbiAgfTtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///201\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// B.2.3.8 String.prototype.fontsize(size)\n__webpack_require__(13)('fontsize', function (createHTML) {\n return function fontsize(size) {\n return createHTML(this, 'font', 'size', size);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmZvbnRzaXplLmpzPzllYzgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBLG1CQUFPLENBQUMsRUFBZ0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyMDIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy44IFN0cmluZy5wcm90b3R5cGUuZm9udHNpemUoc2l6ZSlcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ2ZvbnRzaXplJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGZvbnRzaXplKHNpemUpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnZm9udCcsICdzaXplJywgc2l6ZSk7XG4gIH07XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///202\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// B.2.3.9 String.prototype.italics()\n__webpack_require__(13)('italics', function (createHTML) {\n return function italics() {\n return createHTML(this, 'i', '', '');\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLml0YWxpY3MuanM/ZDBiMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsbUJBQU8sQ0FBQyxFQUFnQjtBQUN4QjtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjIwMy5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjkgU3RyaW5nLnByb3RvdHlwZS5pdGFsaWNzKClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ2l0YWxpY3MnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gaXRhbGljcygpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnaScsICcnLCAnJyk7XG4gIH07XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///203\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// B.2.3.10 String.prototype.link(url)\n__webpack_require__(13)('link', function (createHTML) {\n return function link(url) {\n return createHTML(this, 'a', 'href', url);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmxpbmsuanM/YjU0YSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsbUJBQU8sQ0FBQyxFQUFnQjtBQUN4QjtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjIwNC5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjEwIFN0cmluZy5wcm90b3R5cGUubGluayh1cmwpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdsaW5rJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGxpbmsodXJsKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ2EnLCAnaHJlZicsIHVybCk7XG4gIH07XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///204\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// B.2.3.11 String.prototype.small()\n__webpack_require__(13)('small', function (createHTML) {\n return function small() {\n return createHTML(this, 'small', '', '');\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnNtYWxsLmpzP2YzODYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBLG1CQUFPLENBQUMsRUFBZ0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyMDUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy4xMSBTdHJpbmcucHJvdG90eXBlLnNtYWxsKClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ3NtYWxsJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHNtYWxsKCkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdzbWFsbCcsICcnLCAnJyk7XG4gIH07XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///205\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// B.2.3.12 String.prototype.strike()\n__webpack_require__(13)('strike', function (createHTML) {\n return function strike() {\n return createHTML(this, 'strike', '', '');\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnN0cmlrZS5qcz8xNDQ4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjA2LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuMTIgU3RyaW5nLnByb3RvdHlwZS5zdHJpa2UoKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnc3RyaWtlJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHN0cmlrZSgpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnc3RyaWtlJywgJycsICcnKTtcbiAgfTtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///206\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// B.2.3.13 String.prototype.sub()\n__webpack_require__(13)('sub', function (createHTML) {\n return function sub() {\n return createHTML(this, 'sub', '', '');\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnN1Yi5qcz82NzNlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjA3LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuMTMgU3RyaW5nLnByb3RvdHlwZS5zdWIoKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnc3ViJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHN1YigpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnc3ViJywgJycsICcnKTtcbiAgfTtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///207\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// B.2.3.14 String.prototype.sup()\n__webpack_require__(13)('sup', function (createHTML) {\n return function sup() {\n return createHTML(this, 'sup', '', '');\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnN1cC5qcz8yNDJhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjA4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuMTQgU3RyaW5nLnByb3RvdHlwZS5zdXAoKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnc3VwJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHN1cCgpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnc3VwJywgJycsICcnKTtcbiAgfTtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///208\n")},function(module,exports,__webpack_require__){eval("// 20.3.3.1 / 15.9.4.4 Date.now()\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Date', { now: function () { return new Date().getTime(); } });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZGF0ZS5ub3cuanM/NzhjZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXOztBQUVqQyw0QkFBNEIsbUJBQW1CLDZCQUE2QixFQUFFLEVBQUUiLCJmaWxlIjoiMjA5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMy4zLjEgLyAxNS45LjQuNCBEYXRlLm5vdygpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ0RhdGUnLCB7IG5vdzogZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IERhdGUoKS5nZXRUaW1lKCk7IH0gfSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///209\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar toObject = __webpack_require__(9);\nvar toPrimitive = __webpack_require__(23);\n\n$export($export.P + $export.F * __webpack_require__(3)(function () {\n return new Date(NaN).toJSON() !== null\n || Date.prototype.toJSON.call({ toISOString: function () { return 1; } }) !== 1;\n}), 'Date', {\n // eslint-disable-next-line no-unused-vars\n toJSON: function toJSON(key) {\n var O = toObject(this);\n var pv = toPrimitive(O);\n return typeof pv == 'number' && !isFinite(pv) ? null : O.toISOString();\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZGF0ZS50by1qc29uLmpzPzAyOTgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxrQkFBa0IsbUJBQU8sQ0FBQyxFQUFpQjs7QUFFM0MsZ0NBQWdDLG1CQUFPLENBQUMsQ0FBVTtBQUNsRDtBQUNBLG1DQUFtQywyQkFBMkIsVUFBVSxFQUFFLEVBQUU7QUFDNUUsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjEwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBuZXcgRGF0ZShOYU4pLnRvSlNPTigpICE9PSBudWxsXG4gICAgfHwgRGF0ZS5wcm90b3R5cGUudG9KU09OLmNhbGwoeyB0b0lTT1N0cmluZzogZnVuY3Rpb24gKCkgeyByZXR1cm4gMTsgfSB9KSAhPT0gMTtcbn0pLCAnRGF0ZScsIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gIHRvSlNPTjogZnVuY3Rpb24gdG9KU09OKGtleSkge1xuICAgIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gICAgdmFyIHB2ID0gdG9QcmltaXRpdmUoTyk7XG4gICAgcmV0dXJuIHR5cGVvZiBwdiA9PSAnbnVtYmVyJyAmJiAhaXNGaW5pdGUocHYpID8gbnVsbCA6IE8udG9JU09TdHJpbmcoKTtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///210\n")},function(module,exports,__webpack_require__){eval("// 20.3.4.36 / 15.9.5.43 Date.prototype.toISOString()\nvar $export = __webpack_require__(0);\nvar toISOString = __webpack_require__(212);\n\n// PhantomJS / old WebKit has a broken implementations\n$export($export.P + $export.F * (Date.prototype.toISOString !== toISOString), 'Date', {\n toISOString: toISOString\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZGF0ZS50by1pc28tc3RyaW5nLmpzPzhlYTUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxrQkFBa0IsbUJBQU8sQ0FBQyxHQUF1Qjs7QUFFakQ7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyMTEuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyMC4zLjQuMzYgLyAxNS45LjUuNDMgRGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmcoKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b0lTT1N0cmluZyA9IHJlcXVpcmUoJy4vX2RhdGUtdG8taXNvLXN0cmluZycpO1xuXG4vLyBQaGFudG9tSlMgLyBvbGQgV2ViS2l0IGhhcyBhIGJyb2tlbiBpbXBsZW1lbnRhdGlvbnNcbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKERhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nICE9PSB0b0lTT1N0cmluZyksICdEYXRlJywge1xuICB0b0lTT1N0cmluZzogdG9JU09TdHJpbmdcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///211\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// 20.3.4.36 / 15.9.5.43 Date.prototype.toISOString()\nvar fails = __webpack_require__(3);\nvar getTime = Date.prototype.getTime;\nvar $toISOString = Date.prototype.toISOString;\n\nvar lz = function (num) {\n return num > 9 ? num : '0' + num;\n};\n\n// PhantomJS / old WebKit has a broken implementations\nmodule.exports = (fails(function () {\n return $toISOString.call(new Date(-5e13 - 1)) != '0385-07-25T07:06:39.999Z';\n}) || !fails(function () {\n $toISOString.call(new Date(NaN));\n})) ? function toISOString() {\n if (!isFinite(getTime.call(this))) throw RangeError('Invalid time value');\n var d = this;\n var y = d.getUTCFullYear();\n var m = d.getUTCMilliseconds();\n var s = y < 0 ? '-' : y > 9999 ? '+' : '';\n return s + ('00000' + Math.abs(y)).slice(s ? -6 : -4) +\n '-' + lz(d.getUTCMonth() + 1) + '-' + lz(d.getUTCDate()) +\n 'T' + lz(d.getUTCHours()) + ':' + lz(d.getUTCMinutes()) +\n ':' + lz(d.getUTCSeconds()) + '.' + (m > 99 ? m : '0' + lz(m)) + 'Z';\n} : $toISOString;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZGF0ZS10by1pc28tc3RyaW5nLmpzPzhlZDAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBLFlBQVksbUJBQU8sQ0FBQyxDQUFVO0FBQzlCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjIxMi5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIDIwLjMuNC4zNiAvIDE1LjkuNS40MyBEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZygpXG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIGdldFRpbWUgPSBEYXRlLnByb3RvdHlwZS5nZXRUaW1lO1xudmFyICR0b0lTT1N0cmluZyA9IERhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nO1xuXG52YXIgbHogPSBmdW5jdGlvbiAobnVtKSB7XG4gIHJldHVybiBudW0gPiA5ID8gbnVtIDogJzAnICsgbnVtO1xufTtcblxuLy8gUGhhbnRvbUpTIC8gb2xkIFdlYktpdCBoYXMgYSBicm9rZW4gaW1wbGVtZW50YXRpb25zXG5tb2R1bGUuZXhwb3J0cyA9IChmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAkdG9JU09TdHJpbmcuY2FsbChuZXcgRGF0ZSgtNWUxMyAtIDEpKSAhPSAnMDM4NS0wNy0yNVQwNzowNjozOS45OTlaJztcbn0pIHx8ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICR0b0lTT1N0cmluZy5jYWxsKG5ldyBEYXRlKE5hTikpO1xufSkpID8gZnVuY3Rpb24gdG9JU09TdHJpbmcoKSB7XG4gIGlmICghaXNGaW5pdGUoZ2V0VGltZS5jYWxsKHRoaXMpKSkgdGhyb3cgUmFuZ2VFcnJvcignSW52YWxpZCB0aW1lIHZhbHVlJyk7XG4gIHZhciBkID0gdGhpcztcbiAgdmFyIHkgPSBkLmdldFVUQ0Z1bGxZZWFyKCk7XG4gIHZhciBtID0gZC5nZXRVVENNaWxsaXNlY29uZHMoKTtcbiAgdmFyIHMgPSB5IDwgMCA/ICctJyA6IHkgPiA5OTk5ID8gJysnIDogJyc7XG4gIHJldHVybiBzICsgKCcwMDAwMCcgKyBNYXRoLmFicyh5KSkuc2xpY2UocyA/IC02IDogLTQpICtcbiAgICAnLScgKyBseihkLmdldFVUQ01vbnRoKCkgKyAxKSArICctJyArIGx6KGQuZ2V0VVRDRGF0ZSgpKSArXG4gICAgJ1QnICsgbHooZC5nZXRVVENIb3VycygpKSArICc6JyArIGx6KGQuZ2V0VVRDTWludXRlcygpKSArXG4gICAgJzonICsgbHooZC5nZXRVVENTZWNvbmRzKCkpICsgJy4nICsgKG0gPiA5OSA/IG0gOiAnMCcgKyBseihtKSkgKyAnWic7XG59IDogJHRvSVNPU3RyaW5nO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///212\n")},function(module,exports,__webpack_require__){eval("var DateProto = Date.prototype;\nvar INVALID_DATE = 'Invalid Date';\nvar TO_STRING = 'toString';\nvar $toString = DateProto[TO_STRING];\nvar getTime = DateProto.getTime;\nif (new Date(NaN) + '' != INVALID_DATE) {\n __webpack_require__(12)(DateProto, TO_STRING, function toString() {\n var value = getTime.call(this);\n // eslint-disable-next-line no-self-compare\n return value === value ? $toString.call(this) : INVALID_DATE;\n });\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZGF0ZS50by1zdHJpbmcuanM/ODdiMyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLG1CQUFPLENBQUMsRUFBYTtBQUN2QjtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0giLCJmaWxlIjoiMjEzLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIERhdGVQcm90byA9IERhdGUucHJvdG90eXBlO1xudmFyIElOVkFMSURfREFURSA9ICdJbnZhbGlkIERhdGUnO1xudmFyIFRPX1NUUklORyA9ICd0b1N0cmluZyc7XG52YXIgJHRvU3RyaW5nID0gRGF0ZVByb3RvW1RPX1NUUklOR107XG52YXIgZ2V0VGltZSA9IERhdGVQcm90by5nZXRUaW1lO1xuaWYgKG5ldyBEYXRlKE5hTikgKyAnJyAhPSBJTlZBTElEX0RBVEUpIHtcbiAgcmVxdWlyZSgnLi9fcmVkZWZpbmUnKShEYXRlUHJvdG8sIFRPX1NUUklORywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgdmFyIHZhbHVlID0gZ2V0VGltZS5jYWxsKHRoaXMpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICByZXR1cm4gdmFsdWUgPT09IHZhbHVlID8gJHRvU3RyaW5nLmNhbGwodGhpcykgOiBJTlZBTElEX0RBVEU7XG4gIH0pO1xufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///213\n")},function(module,exports,__webpack_require__){eval("var TO_PRIMITIVE = __webpack_require__(5)('toPrimitive');\nvar proto = Date.prototype;\n\nif (!(TO_PRIMITIVE in proto)) __webpack_require__(11)(proto, TO_PRIMITIVE, __webpack_require__(215));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZGF0ZS50by1wcmltaXRpdmUuanM/YzhjZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxtQkFBbUIsbUJBQU8sQ0FBQyxDQUFRO0FBQ25DOztBQUVBLDhCQUE4QixtQkFBTyxDQUFDLEVBQVMsdUJBQXVCLG1CQUFPLENBQUMsR0FBc0IiLCJmaWxlIjoiMjE0LmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIFRPX1BSSU1JVElWRSA9IHJlcXVpcmUoJy4vX3drcycpKCd0b1ByaW1pdGl2ZScpO1xudmFyIHByb3RvID0gRGF0ZS5wcm90b3R5cGU7XG5cbmlmICghKFRPX1BSSU1JVElWRSBpbiBwcm90bykpIHJlcXVpcmUoJy4vX2hpZGUnKShwcm90bywgVE9fUFJJTUlUSVZFLCByZXF1aXJlKCcuL19kYXRlLXRvLXByaW1pdGl2ZScpKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///214\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar anObject = __webpack_require__(1);\nvar toPrimitive = __webpack_require__(23);\nvar NUMBER = 'number';\n\nmodule.exports = function (hint) {\n if (hint !== 'string' && hint !== NUMBER && hint !== 'default') throw TypeError('Incorrect hint');\n return toPrimitive(anObject(this), hint != NUMBER);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZGF0ZS10by1wcmltaXRpdmUuanM/ODM4MSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGtCQUFrQixtQkFBTyxDQUFDLEVBQWlCO0FBQzNDOztBQUVBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjIxNS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG52YXIgTlVNQkVSID0gJ251bWJlcic7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGhpbnQpIHtcbiAgaWYgKGhpbnQgIT09ICdzdHJpbmcnICYmIGhpbnQgIT09IE5VTUJFUiAmJiBoaW50ICE9PSAnZGVmYXVsdCcpIHRocm93IFR5cGVFcnJvcignSW5jb3JyZWN0IGhpbnQnKTtcbiAgcmV0dXJuIHRvUHJpbWl0aXZlKGFuT2JqZWN0KHRoaXMpLCBoaW50ICE9IE5VTUJFUik7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///215\n")},function(module,exports,__webpack_require__){eval("// 22.1.2.2 / 15.4.3.2 Array.isArray(arg)\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Array', { isArray: __webpack_require__(54) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuaXMtYXJyYXkuanM/MmNhZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXOztBQUVqQyw2QkFBNkIsVUFBVSxtQkFBTyxDQUFDLEVBQWEsR0FBRyIsImZpbGUiOiIyMTYuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyMi4xLjIuMiAvIDE1LjQuMy4yIEFycmF5LmlzQXJyYXkoYXJnKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdBcnJheScsIHsgaXNBcnJheTogcmVxdWlyZSgnLi9faXMtYXJyYXknKSB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///216\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar ctx = __webpack_require__(19);\nvar $export = __webpack_require__(0);\nvar toObject = __webpack_require__(9);\nvar call = __webpack_require__(109);\nvar isArrayIter = __webpack_require__(81);\nvar toLength = __webpack_require__(6);\nvar createProperty = __webpack_require__(82);\nvar getIterFn = __webpack_require__(83);\n\n$export($export.S + $export.F * !__webpack_require__(57)(function (iter) { Array.from(iter); }), 'Array', {\n // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)\n from: function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n var O = toObject(arrayLike);\n var C = typeof this == 'function' ? this : Array;\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var index = 0;\n var iterFn = getIterFn(O);\n var length, result, step, iterator;\n if (mapping) mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);\n // if object isn't iterable or it's array with default iterator - use simple case\n if (iterFn != undefined && !(C == Array && isArrayIter(iterFn))) {\n for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) {\n createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);\n }\n } else {\n length = toLength(O.length);\n for (result = new C(length); length > index; index++) {\n createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);\n }\n }\n result.length = index;\n return result;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZnJvbS5qcz8xYzRjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsVUFBVSxtQkFBTyxDQUFDLEVBQVE7QUFDMUIsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsV0FBVyxtQkFBTyxDQUFDLEdBQWM7QUFDakMsa0JBQWtCLG1CQUFPLENBQUMsRUFBa0I7QUFDNUMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMscUJBQXFCLG1CQUFPLENBQUMsRUFBb0I7QUFDakQsZ0JBQWdCLG1CQUFPLENBQUMsRUFBNEI7O0FBRXBELGlDQUFpQyxtQkFBTyxDQUFDLEVBQWdCLG1CQUFtQixrQkFBa0IsRUFBRTtBQUNoRztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVEQUF1RCxnQ0FBZ0M7QUFDdkY7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLGtDQUFrQyxnQkFBZ0I7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyMTcuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4vX2l0ZXItY2FsbCcpO1xudmFyIGlzQXJyYXlJdGVyID0gcmVxdWlyZSgnLi9faXMtYXJyYXktaXRlcicpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSByZXF1aXJlKCcuL19jcmVhdGUtcHJvcGVydHknKTtcbnZhciBnZXRJdGVyRm4gPSByZXF1aXJlKCcuL2NvcmUuZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19pdGVyLWRldGVjdCcpKGZ1bmN0aW9uIChpdGVyKSB7IEFycmF5LmZyb20oaXRlcik7IH0pLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMi4xIEFycmF5LmZyb20oYXJyYXlMaWtlLCBtYXBmbiA9IHVuZGVmaW5lZCwgdGhpc0FyZyA9IHVuZGVmaW5lZClcbiAgZnJvbTogZnVuY3Rpb24gZnJvbShhcnJheUxpa2UgLyogLCBtYXBmbiA9IHVuZGVmaW5lZCwgdGhpc0FyZyA9IHVuZGVmaW5lZCAqLykge1xuICAgIHZhciBPID0gdG9PYmplY3QoYXJyYXlMaWtlKTtcbiAgICB2YXIgQyA9IHR5cGVvZiB0aGlzID09ICdmdW5jdGlvbicgPyB0aGlzIDogQXJyYXk7XG4gICAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBtYXBmbiA9IGFMZW4gPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkO1xuICAgIHZhciBtYXBwaW5nID0gbWFwZm4gIT09IHVuZGVmaW5lZDtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciBpdGVyRm4gPSBnZXRJdGVyRm4oTyk7XG4gICAgdmFyIGxlbmd0aCwgcmVzdWx0LCBzdGVwLCBpdGVyYXRvcjtcbiAgICBpZiAobWFwcGluZykgbWFwZm4gPSBjdHgobWFwZm4sIGFMZW4gPiAyID8gYXJndW1lbnRzWzJdIDogdW5kZWZpbmVkLCAyKTtcbiAgICAvLyBpZiBvYmplY3QgaXNuJ3QgaXRlcmFibGUgb3IgaXQncyBhcnJheSB3aXRoIGRlZmF1bHQgaXRlcmF0b3IgLSB1c2Ugc2ltcGxlIGNhc2VcbiAgICBpZiAoaXRlckZuICE9IHVuZGVmaW5lZCAmJiAhKEMgPT0gQXJyYXkgJiYgaXNBcnJheUl0ZXIoaXRlckZuKSkpIHtcbiAgICAgIGZvciAoaXRlcmF0b3IgPSBpdGVyRm4uY2FsbChPKSwgcmVzdWx0ID0gbmV3IEMoKTsgIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lOyBpbmRleCsrKSB7XG4gICAgICAgIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwgaW5kZXgsIG1hcHBpbmcgPyBjYWxsKGl0ZXJhdG9yLCBtYXBmbiwgW3N0ZXAudmFsdWUsIGluZGV4XSwgdHJ1ZSkgOiBzdGVwLnZhbHVlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICAgICAgZm9yIChyZXN1bHQgPSBuZXcgQyhsZW5ndGgpOyBsZW5ndGggPiBpbmRleDsgaW5kZXgrKykge1xuICAgICAgICBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIGluZGV4LCBtYXBwaW5nID8gbWFwZm4oT1tpbmRleF0sIGluZGV4KSA6IE9baW5kZXhdKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmVzdWx0Lmxlbmd0aCA9IGluZGV4O1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///217\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar createProperty = __webpack_require__(82);\n\n// WebKit Array.of isn't generic\n$export($export.S + $export.F * __webpack_require__(3)(function () {\n function F() { /* empty */ }\n return !(Array.of.call(F) instanceof F);\n}), 'Array', {\n // 22.1.2.3 Array.of( ...items)\n of: function of(/* ...args */) {\n var index = 0;\n var aLen = arguments.length;\n var result = new (typeof this == 'function' ? this : Array)(aLen);\n while (aLen > index) createProperty(result, index, arguments[index++]);\n result.length = aLen;\n return result;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkub2YuanM/ZTgwNCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLHFCQUFxQixtQkFBTyxDQUFDLEVBQW9COztBQUVqRDtBQUNBLGdDQUFnQyxtQkFBTyxDQUFDLENBQVU7QUFDbEQsZ0JBQWdCO0FBQ2hCO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjE4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX2NyZWF0ZS1wcm9wZXJ0eScpO1xuXG4vLyBXZWJLaXQgQXJyYXkub2YgaXNuJ3QgZ2VuZXJpY1xuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gRigpIHsgLyogZW1wdHkgKi8gfVxuICByZXR1cm4gIShBcnJheS5vZi5jYWxsKEYpIGluc3RhbmNlb2YgRik7XG59KSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjIuMyBBcnJheS5vZiggLi4uaXRlbXMpXG4gIG9mOiBmdW5jdGlvbiBvZigvKiAuLi5hcmdzICovKSB7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIHJlc3VsdCA9IG5ldyAodHlwZW9mIHRoaXMgPT0gJ2Z1bmN0aW9uJyA/IHRoaXMgOiBBcnJheSkoYUxlbik7XG4gICAgd2hpbGUgKGFMZW4gPiBpbmRleCkgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBpbmRleCwgYXJndW1lbnRzW2luZGV4KytdKTtcbiAgICByZXN1bHQubGVuZ3RoID0gYUxlbjtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///218\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// 22.1.3.13 Array.prototype.join(separator)\nvar $export = __webpack_require__(0);\nvar toIObject = __webpack_require__(15);\nvar arrayJoin = [].join;\n\n// fallback for not array-like strings\n$export($export.P + $export.F * (__webpack_require__(48) != Object || !__webpack_require__(22)(arrayJoin)), 'Array', {\n join: function join(separator) {\n return arrayJoin.call(toIObject(this), separator === undefined ? ',' : separator);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuam9pbi5qcz8zNzNmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDOztBQUVBO0FBQ0EsaUNBQWlDLG1CQUFPLENBQUMsRUFBWSxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFrQjtBQUMvRjtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjIxOS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIDIyLjEuMy4xMyBBcnJheS5wcm90b3R5cGUuam9pbihzZXBhcmF0b3IpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciBhcnJheUpvaW4gPSBbXS5qb2luO1xuXG4vLyBmYWxsYmFjayBmb3Igbm90IGFycmF5LWxpa2Ugc3RyaW5nc1xuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAocmVxdWlyZSgnLi9faW9iamVjdCcpICE9IE9iamVjdCB8fCAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKGFycmF5Sm9pbikpLCAnQXJyYXknLCB7XG4gIGpvaW46IGZ1bmN0aW9uIGpvaW4oc2VwYXJhdG9yKSB7XG4gICAgcmV0dXJuIGFycmF5Sm9pbi5jYWxsKHRvSU9iamVjdCh0aGlzKSwgc2VwYXJhdG9yID09PSB1bmRlZmluZWQgPyAnLCcgOiBzZXBhcmF0b3IpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///219\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar html = __webpack_require__(70);\nvar cof = __webpack_require__(20);\nvar toAbsoluteIndex = __webpack_require__(35);\nvar toLength = __webpack_require__(6);\nvar arraySlice = [].slice;\n\n// fallback for not array-like ES3 strings and DOM objects\n$export($export.P + $export.F * __webpack_require__(3)(function () {\n if (html) arraySlice.call(html);\n}), 'Array', {\n slice: function slice(begin, end) {\n var len = toLength(this.length);\n var klass = cof(this);\n end = end === undefined ? len : end;\n if (klass == 'Array') return arraySlice.call(this, begin, end);\n var start = toAbsoluteIndex(begin, len);\n var upTo = toAbsoluteIndex(end, len);\n var size = toLength(upTo - start);\n var cloned = new Array(size);\n var i = 0;\n for (; i < size; i++) cloned[i] = klass == 'String'\n ? this.charAt(start + i)\n : this[start + i];\n return cloned;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuc2xpY2UuanM/MjNiZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLFdBQVcsbUJBQU8sQ0FBQyxFQUFTO0FBQzVCLFVBQVUsbUJBQU8sQ0FBQyxFQUFRO0FBQzFCLHNCQUFzQixtQkFBTyxDQUFDLEVBQXNCO0FBQ3BELGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDOztBQUVBO0FBQ0EsZ0NBQWdDLG1CQUFPLENBQUMsQ0FBVTtBQUNsRDtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsVUFBVTtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjIwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBodG1sID0gcmVxdWlyZSgnLi9faHRtbCcpO1xudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4vX3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBhcnJheVNsaWNlID0gW10uc2xpY2U7XG5cbi8vIGZhbGxiYWNrIGZvciBub3QgYXJyYXktbGlrZSBFUzMgc3RyaW5ncyBhbmQgRE9NIG9iamVjdHNcbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIGlmIChodG1sKSBhcnJheVNsaWNlLmNhbGwoaHRtbCk7XG59KSwgJ0FycmF5Jywge1xuICBzbGljZTogZnVuY3Rpb24gc2xpY2UoYmVnaW4sIGVuZCkge1xuICAgIHZhciBsZW4gPSB0b0xlbmd0aCh0aGlzLmxlbmd0aCk7XG4gICAgdmFyIGtsYXNzID0gY29mKHRoaXMpO1xuICAgIGVuZCA9IGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuIDogZW5kO1xuICAgIGlmIChrbGFzcyA9PSAnQXJyYXknKSByZXR1cm4gYXJyYXlTbGljZS5jYWxsKHRoaXMsIGJlZ2luLCBlbmQpO1xuICAgIHZhciBzdGFydCA9IHRvQWJzb2x1dGVJbmRleChiZWdpbiwgbGVuKTtcbiAgICB2YXIgdXBUbyA9IHRvQWJzb2x1dGVJbmRleChlbmQsIGxlbik7XG4gICAgdmFyIHNpemUgPSB0b0xlbmd0aCh1cFRvIC0gc3RhcnQpO1xuICAgIHZhciBjbG9uZWQgPSBuZXcgQXJyYXkoc2l6ZSk7XG4gICAgdmFyIGkgPSAwO1xuICAgIGZvciAoOyBpIDwgc2l6ZTsgaSsrKSBjbG9uZWRbaV0gPSBrbGFzcyA9PSAnU3RyaW5nJ1xuICAgICAgPyB0aGlzLmNoYXJBdChzdGFydCArIGkpXG4gICAgICA6IHRoaXNbc3RhcnQgKyBpXTtcbiAgICByZXR1cm4gY2xvbmVkO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///220\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar aFunction = __webpack_require__(10);\nvar toObject = __webpack_require__(9);\nvar fails = __webpack_require__(3);\nvar $sort = [].sort;\nvar test = [1, 2, 3];\n\n$export($export.P + $export.F * (fails(function () {\n // IE8-\n test.sort(undefined);\n}) || !fails(function () {\n // V8 bug\n test.sort(null);\n // Old WebKit\n}) || !__webpack_require__(22)($sort)), 'Array', {\n // 22.1.3.25 Array.prototype.sort(comparefn)\n sort: function sort(comparefn) {\n return comparefn === undefined\n ? $sort.call(toObject(this))\n : $sort.call(toObject(this), aFunction(comparefn));\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuc29ydC5qcz81NWRkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2QyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxZQUFZLG1CQUFPLENBQUMsQ0FBVTtBQUM5QjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQSxDQUFDLE1BQU0sbUJBQU8sQ0FBQyxFQUFrQjtBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjIyMS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyICRzb3J0ID0gW10uc29ydDtcbnZhciB0ZXN0ID0gWzEsIDIsIDNdO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIChmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIElFOC1cbiAgdGVzdC5zb3J0KHVuZGVmaW5lZCk7XG59KSB8fCAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBWOCBidWdcbiAgdGVzdC5zb3J0KG51bGwpO1xuICAvLyBPbGQgV2ViS2l0XG59KSB8fCAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKCRzb3J0KSksICdBcnJheScsIHtcbiAgLy8gMjIuMS4zLjI1IEFycmF5LnByb3RvdHlwZS5zb3J0KGNvbXBhcmVmbilcbiAgc29ydDogZnVuY3Rpb24gc29ydChjb21wYXJlZm4pIHtcbiAgICByZXR1cm4gY29tcGFyZWZuID09PSB1bmRlZmluZWRcbiAgICAgID8gJHNvcnQuY2FsbCh0b09iamVjdCh0aGlzKSlcbiAgICAgIDogJHNvcnQuY2FsbCh0b09iamVjdCh0aGlzKSwgYUZ1bmN0aW9uKGNvbXBhcmVmbikpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///221\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar $forEach = __webpack_require__(26)(0);\nvar STRICT = __webpack_require__(22)([].forEach, true);\n\n$export($export.P + $export.F * !STRICT, 'Array', {\n // 22.1.3.10 / 15.4.4.18 Array.prototype.forEach(callbackfn [, thisArg])\n forEach: function forEach(callbackfn /* , thisArg */) {\n return $forEach(this, callbackfn, arguments[1]);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZm9yLWVhY2guanM/ZjNlMiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyxFQUFrQjtBQUN6QyxhQUFhLG1CQUFPLENBQUMsRUFBa0I7O0FBRXZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjIyMi5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGZvckVhY2ggPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJykoMCk7XG52YXIgU1RSSUNUID0gcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKFtdLmZvckVhY2gsIHRydWUpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFTVFJJQ1QsICdBcnJheScsIHtcbiAgLy8gMjIuMS4zLjEwIC8gMTUuNC40LjE4IEFycmF5LnByb3RvdHlwZS5mb3JFYWNoKGNhbGxiYWNrZm4gWywgdGhpc0FyZ10pXG4gIGZvckVhY2g6IGZ1bmN0aW9uIGZvckVhY2goY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJGZvckVhY2godGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzWzFdKTtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///222\n")},function(module,exports,__webpack_require__){eval("var isObject = __webpack_require__(4);\nvar isArray = __webpack_require__(54);\nvar SPECIES = __webpack_require__(5)('species');\n\nmodule.exports = function (original) {\n var C;\n if (isArray(original)) {\n C = original.constructor;\n // cross-realm fallback\n if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;\n if (isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n } return C === undefined ? Array : C;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktc3BlY2llcy1jb25zdHJ1Y3Rvci5qcz9lODUzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGNBQWMsbUJBQU8sQ0FBQyxFQUFhO0FBQ25DLGNBQWMsbUJBQU8sQ0FBQyxDQUFROztBQUU5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCIsImZpbGUiOiIyMjMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi9faXMtYXJyYXknKTtcbnZhciBTUEVDSUVTID0gcmVxdWlyZSgnLi9fd2tzJykoJ3NwZWNpZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3JpZ2luYWwpIHtcbiAgdmFyIEM7XG4gIGlmIChpc0FycmF5KG9yaWdpbmFsKSkge1xuICAgIEMgPSBvcmlnaW5hbC5jb25zdHJ1Y3RvcjtcbiAgICAvLyBjcm9zcy1yZWFsbSBmYWxsYmFja1xuICAgIGlmICh0eXBlb2YgQyA9PSAnZnVuY3Rpb24nICYmIChDID09PSBBcnJheSB8fCBpc0FycmF5KEMucHJvdG90eXBlKSkpIEMgPSB1bmRlZmluZWQ7XG4gICAgaWYgKGlzT2JqZWN0KEMpKSB7XG4gICAgICBDID0gQ1tTUEVDSUVTXTtcbiAgICAgIGlmIChDID09PSBudWxsKSBDID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfSByZXR1cm4gQyA9PT0gdW5kZWZpbmVkID8gQXJyYXkgOiBDO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///223\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar $map = __webpack_require__(26)(1);\n\n$export($export.P + $export.F * !__webpack_require__(22)([].map, true), 'Array', {\n // 22.1.3.15 / 15.4.4.19 Array.prototype.map(callbackfn [, thisArg])\n map: function map(callbackfn /* , thisArg */) {\n return $map(this, callbackfn, arguments[1]);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkubWFwLmpzPzZkNjciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxXQUFXLG1CQUFPLENBQUMsRUFBa0I7O0FBRXJDLGlDQUFpQyxtQkFBTyxDQUFDLEVBQWtCO0FBQzNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyMjQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRtYXAgPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJykoMSk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogIXJlcXVpcmUoJy4vX3N0cmljdC1tZXRob2QnKShbXS5tYXAsIHRydWUpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy4xNSAvIDE1LjQuNC4xOSBBcnJheS5wcm90b3R5cGUubWFwKGNhbGxiYWNrZm4gWywgdGhpc0FyZ10pXG4gIG1hcDogZnVuY3Rpb24gbWFwKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgcmV0dXJuICRtYXAodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzWzFdKTtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///224\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar $filter = __webpack_require__(26)(2);\n\n$export($export.P + $export.F * !__webpack_require__(22)([].filter, true), 'Array', {\n // 22.1.3.7 / 15.4.4.20 Array.prototype.filter(callbackfn [, thisArg])\n filter: function filter(callbackfn /* , thisArg */) {\n return $filter(this, callbackfn, arguments[1]);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZmlsdGVyLmpzP2QyNWYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxjQUFjLG1CQUFPLENBQUMsRUFBa0I7O0FBRXhDLGlDQUFpQyxtQkFBTyxDQUFDLEVBQWtCO0FBQzNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyMjUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRmaWx0ZXIgPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJykoMik7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogIXJlcXVpcmUoJy4vX3N0cmljdC1tZXRob2QnKShbXS5maWx0ZXIsIHRydWUpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy43IC8gMTUuNC40LjIwIEFycmF5LnByb3RvdHlwZS5maWx0ZXIoY2FsbGJhY2tmbiBbLCB0aGlzQXJnXSlcbiAgZmlsdGVyOiBmdW5jdGlvbiBmaWx0ZXIoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJGZpbHRlcih0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHNbMV0pO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///225\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar $some = __webpack_require__(26)(3);\n\n$export($export.P + $export.F * !__webpack_require__(22)([].some, true), 'Array', {\n // 22.1.3.23 / 15.4.4.17 Array.prototype.some(callbackfn [, thisArg])\n some: function some(callbackfn /* , thisArg */) {\n return $some(this, callbackfn, arguments[1]);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuc29tZS5qcz83NTlmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsWUFBWSxtQkFBTyxDQUFDLEVBQWtCOztBQUV0QyxpQ0FBaUMsbUJBQU8sQ0FBQyxFQUFrQjtBQUMzRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjI2LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkc29tZSA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKSgzKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKFtdLnNvbWUsIHRydWUpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy4yMyAvIDE1LjQuNC4xNyBBcnJheS5wcm90b3R5cGUuc29tZShjYWxsYmFja2ZuIFssIHRoaXNBcmddKVxuICBzb21lOiBmdW5jdGlvbiBzb21lKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgcmV0dXJuICRzb21lKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50c1sxXSk7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///226\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar $every = __webpack_require__(26)(4);\n\n$export($export.P + $export.F * !__webpack_require__(22)([].every, true), 'Array', {\n // 22.1.3.5 / 15.4.4.16 Array.prototype.every(callbackfn [, thisArg])\n every: function every(callbackfn /* , thisArg */) {\n return $every(this, callbackfn, arguments[1]);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZXZlcnkuanM/NjA5NSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGFBQWEsbUJBQU8sQ0FBQyxFQUFrQjs7QUFFdkMsaUNBQWlDLG1CQUFPLENBQUMsRUFBa0I7QUFDM0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjIyNy5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGV2ZXJ5ID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpKDQpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoW10uZXZlcnksIHRydWUpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy41IC8gMTUuNC40LjE2IEFycmF5LnByb3RvdHlwZS5ldmVyeShjYWxsYmFja2ZuIFssIHRoaXNBcmddKVxuICBldmVyeTogZnVuY3Rpb24gZXZlcnkoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJGV2ZXJ5KHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50c1sxXSk7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///227\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar $reduce = __webpack_require__(110);\n\n$export($export.P + $export.F * !__webpack_require__(22)([].reduce, true), 'Array', {\n // 22.1.3.18 / 15.4.4.21 Array.prototype.reduce(callbackfn [, initialValue])\n reduce: function reduce(callbackfn /* , initialValue */) {\n return $reduce(this, callbackfn, arguments.length, arguments[1], false);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkucmVkdWNlLmpzPzBjZDgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxjQUFjLG1CQUFPLENBQUMsR0FBaUI7O0FBRXZDLGlDQUFpQyxtQkFBTyxDQUFDLEVBQWtCO0FBQzNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyMjguanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRyZWR1Y2UgPSByZXF1aXJlKCcuL19hcnJheS1yZWR1Y2UnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKFtdLnJlZHVjZSwgdHJ1ZSksICdBcnJheScsIHtcbiAgLy8gMjIuMS4zLjE4IC8gMTUuNC40LjIxIEFycmF5LnByb3RvdHlwZS5yZWR1Y2UoY2FsbGJhY2tmbiBbLCBpbml0aWFsVmFsdWVdKVxuICByZWR1Y2U6IGZ1bmN0aW9uIHJlZHVjZShjYWxsYmFja2ZuIC8qICwgaW5pdGlhbFZhbHVlICovKSB7XG4gICAgcmV0dXJuICRyZWR1Y2UodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCwgYXJndW1lbnRzWzFdLCBmYWxzZSk7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///228\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar $reduce = __webpack_require__(110);\n\n$export($export.P + $export.F * !__webpack_require__(22)([].reduceRight, true), 'Array', {\n // 22.1.3.19 / 15.4.4.22 Array.prototype.reduceRight(callbackfn [, initialValue])\n reduceRight: function reduceRight(callbackfn /* , initialValue */) {\n return $reduce(this, callbackfn, arguments.length, arguments[1], true);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkucmVkdWNlLXJpZ2h0LmpzPzQ4ZjgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxjQUFjLG1CQUFPLENBQUMsR0FBaUI7O0FBRXZDLGlDQUFpQyxtQkFBTyxDQUFDLEVBQWtCO0FBQzNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyMjkuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRyZWR1Y2UgPSByZXF1aXJlKCcuL19hcnJheS1yZWR1Y2UnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKFtdLnJlZHVjZVJpZ2h0LCB0cnVlKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMTkgLyAxNS40LjQuMjIgQXJyYXkucHJvdG90eXBlLnJlZHVjZVJpZ2h0KGNhbGxiYWNrZm4gWywgaW5pdGlhbFZhbHVlXSlcbiAgcmVkdWNlUmlnaHQ6IGZ1bmN0aW9uIHJlZHVjZVJpZ2h0KGNhbGxiYWNrZm4gLyogLCBpbml0aWFsVmFsdWUgKi8pIHtcbiAgICByZXR1cm4gJHJlZHVjZSh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoLCBhcmd1bWVudHNbMV0sIHRydWUpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///229\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar $indexOf = __webpack_require__(52)(false);\nvar $native = [].indexOf;\nvar NEGATIVE_ZERO = !!$native && 1 / [1].indexOf(1, -0) < 0;\n\n$export($export.P + $export.F * (NEGATIVE_ZERO || !__webpack_require__(22)($native)), 'Array', {\n // 22.1.3.11 / 15.4.4.14 Array.prototype.indexOf(searchElement [, fromIndex])\n indexOf: function indexOf(searchElement /* , fromIndex = 0 */) {\n return NEGATIVE_ZERO\n // convert -0 to +0\n ? $native.apply(this, arguments) || 0\n : $indexOf(this, searchElement, arguments[1]);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuaW5kZXgtb2YuanM/NTdlNyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyxFQUFtQjtBQUMxQztBQUNBOztBQUVBLG1EQUFtRCxtQkFBTyxDQUFDLEVBQWtCO0FBQzdFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyMzAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRpbmRleE9mID0gcmVxdWlyZSgnLi9fYXJyYXktaW5jbHVkZXMnKShmYWxzZSk7XG52YXIgJG5hdGl2ZSA9IFtdLmluZGV4T2Y7XG52YXIgTkVHQVRJVkVfWkVSTyA9ICEhJG5hdGl2ZSAmJiAxIC8gWzFdLmluZGV4T2YoMSwgLTApIDwgMDtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoTkVHQVRJVkVfWkVSTyB8fCAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKCRuYXRpdmUpKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMTEgLyAxNS40LjQuMTQgQXJyYXkucHJvdG90eXBlLmluZGV4T2Yoc2VhcmNoRWxlbWVudCBbLCBmcm9tSW5kZXhdKVxuICBpbmRleE9mOiBmdW5jdGlvbiBpbmRleE9mKHNlYXJjaEVsZW1lbnQgLyogLCBmcm9tSW5kZXggPSAwICovKSB7XG4gICAgcmV0dXJuIE5FR0FUSVZFX1pFUk9cbiAgICAgIC8vIGNvbnZlcnQgLTAgdG8gKzBcbiAgICAgID8gJG5hdGl2ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IDBcbiAgICAgIDogJGluZGV4T2YodGhpcywgc2VhcmNoRWxlbWVudCwgYXJndW1lbnRzWzFdKTtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///230\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar toIObject = __webpack_require__(15);\nvar toInteger = __webpack_require__(21);\nvar toLength = __webpack_require__(6);\nvar $native = [].lastIndexOf;\nvar NEGATIVE_ZERO = !!$native && 1 / [1].lastIndexOf(1, -0) < 0;\n\n$export($export.P + $export.F * (NEGATIVE_ZERO || !__webpack_require__(22)($native)), 'Array', {\n // 22.1.3.14 / 15.4.4.15 Array.prototype.lastIndexOf(searchElement [, fromIndex])\n lastIndexOf: function lastIndexOf(searchElement /* , fromIndex = @[*-1] */) {\n // convert -0 to +0\n if (NEGATIVE_ZERO) return $native.apply(this, arguments) || 0;\n var O = toIObject(this);\n var length = toLength(O.length);\n var index = length - 1;\n if (arguments.length > 1) index = Math.min(index, toInteger(arguments[1]));\n if (index < 0) index = length + index;\n for (;index >= 0; index--) if (index in O) if (O[index] === searchElement) return index || 0;\n return -1;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkubGFzdC1pbmRleC1vZi5qcz85ODY1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2QyxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDO0FBQ0E7O0FBRUEsbURBQW1ELG1CQUFPLENBQUMsRUFBa0I7QUFDN0U7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVSxXQUFXO0FBQ3JCO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjIzMS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyICRuYXRpdmUgPSBbXS5sYXN0SW5kZXhPZjtcbnZhciBORUdBVElWRV9aRVJPID0gISEkbmF0aXZlICYmIDEgLyBbMV0ubGFzdEluZGV4T2YoMSwgLTApIDwgMDtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoTkVHQVRJVkVfWkVSTyB8fCAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKCRuYXRpdmUpKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMTQgLyAxNS40LjQuMTUgQXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mKHNlYXJjaEVsZW1lbnQgWywgZnJvbUluZGV4XSlcbiAgbGFzdEluZGV4T2Y6IGZ1bmN0aW9uIGxhc3RJbmRleE9mKHNlYXJjaEVsZW1lbnQgLyogLCBmcm9tSW5kZXggPSBAWyotMV0gKi8pIHtcbiAgICAvLyBjb252ZXJ0IC0wIHRvICswXG4gICAgaWYgKE5FR0FUSVZFX1pFUk8pIHJldHVybiAkbmF0aXZlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgMDtcbiAgICB2YXIgTyA9IHRvSU9iamVjdCh0aGlzKTtcbiAgICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICAgIHZhciBpbmRleCA9IGxlbmd0aCAtIDE7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSBpbmRleCA9IE1hdGgubWluKGluZGV4LCB0b0ludGVnZXIoYXJndW1lbnRzWzFdKSk7XG4gICAgaWYgKGluZGV4IDwgMCkgaW5kZXggPSBsZW5ndGggKyBpbmRleDtcbiAgICBmb3IgKDtpbmRleCA+PSAwOyBpbmRleC0tKSBpZiAoaW5kZXggaW4gTykgaWYgKE9baW5kZXhdID09PSBzZWFyY2hFbGVtZW50KSByZXR1cm4gaW5kZXggfHwgMDtcbiAgICByZXR1cm4gLTE7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///231\n")},function(module,exports,__webpack_require__){eval("// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\nvar $export = __webpack_require__(0);\n\n$export($export.P, 'Array', { copyWithin: __webpack_require__(111) });\n\n__webpack_require__(31)('copyWithin');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuY29weS13aXRoaW4uanM/NzQ0ZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXOztBQUVqQyw2QkFBNkIsYUFBYSxtQkFBTyxDQUFDLEdBQXNCLEdBQUc7O0FBRTNFLG1CQUFPLENBQUMsRUFBdUIiLCJmaWxlIjoiMjMyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjIuMS4zLjMgQXJyYXkucHJvdG90eXBlLmNvcHlXaXRoaW4odGFyZ2V0LCBzdGFydCwgZW5kID0gdGhpcy5sZW5ndGgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCwgJ0FycmF5JywgeyBjb3B5V2l0aGluOiByZXF1aXJlKCcuL19hcnJheS1jb3B5LXdpdGhpbicpIH0pO1xuXG5yZXF1aXJlKCcuL19hZGQtdG8tdW5zY29wYWJsZXMnKSgnY29weVdpdGhpbicpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///232\n")},function(module,exports,__webpack_require__){eval("// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\nvar $export = __webpack_require__(0);\n\n$export($export.P, 'Array', { fill: __webpack_require__(85) });\n\n__webpack_require__(31)('fill');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZmlsbC5qcz82YzdiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDLDZCQUE2QixPQUFPLG1CQUFPLENBQUMsRUFBZSxHQUFHOztBQUU5RCxtQkFBTyxDQUFDLEVBQXVCIiwiZmlsZSI6IjIzMy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDIyLjEuMy42IEFycmF5LnByb3RvdHlwZS5maWxsKHZhbHVlLCBzdGFydCA9IDAsIGVuZCA9IHRoaXMubGVuZ3RoKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdBcnJheScsIHsgZmlsbDogcmVxdWlyZSgnLi9fYXJyYXktZmlsbCcpIH0pO1xuXG5yZXF1aXJlKCcuL19hZGQtdG8tdW5zY29wYWJsZXMnKSgnZmlsbCcpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///233\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// 22.1.3.8 Array.prototype.find(predicate, thisArg = undefined)\nvar $export = __webpack_require__(0);\nvar $find = __webpack_require__(26)(5);\nvar KEY = 'find';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n find: function find(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n__webpack_require__(31)(KEY);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZmluZC5qcz83NTE0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxZQUFZLG1CQUFPLENBQUMsRUFBa0I7QUFDdEM7QUFDQTtBQUNBO0FBQ0EsMENBQTBDLGdCQUFnQixFQUFFO0FBQzVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELG1CQUFPLENBQUMsRUFBdUIiLCJmaWxlIjoiMjM0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gMjIuMS4zLjggQXJyYXkucHJvdG90eXBlLmZpbmQocHJlZGljYXRlLCB0aGlzQXJnID0gdW5kZWZpbmVkKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkZmluZCA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKSg1KTtcbnZhciBLRVkgPSAnZmluZCc7XG52YXIgZm9yY2VkID0gdHJ1ZTtcbi8vIFNob3VsZG4ndCBza2lwIGhvbGVzXG5pZiAoS0VZIGluIFtdKSBBcnJheSgxKVtLRVldKGZ1bmN0aW9uICgpIHsgZm9yY2VkID0gZmFsc2U7IH0pO1xuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiBmb3JjZWQsICdBcnJheScsIHtcbiAgZmluZDogZnVuY3Rpb24gZmluZChjYWxsYmFja2ZuIC8qICwgdGhhdCA9IHVuZGVmaW5lZCAqLykge1xuICAgIHJldHVybiAkZmluZCh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xucmVxdWlyZSgnLi9fYWRkLXRvLXVuc2NvcGFibGVzJykoS0VZKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///234\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// 22.1.3.9 Array.prototype.findIndex(predicate, thisArg = undefined)\nvar $export = __webpack_require__(0);\nvar $find = __webpack_require__(26)(6);\nvar KEY = 'findIndex';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n findIndex: function findIndex(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n__webpack_require__(31)(KEY);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZmluZC1pbmRleC5qcz8yMGQ2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxZQUFZLG1CQUFPLENBQUMsRUFBa0I7QUFDdEM7QUFDQTtBQUNBO0FBQ0EsMENBQTBDLGdCQUFnQixFQUFFO0FBQzVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELG1CQUFPLENBQUMsRUFBdUIiLCJmaWxlIjoiMjM1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gMjIuMS4zLjkgQXJyYXkucHJvdG90eXBlLmZpbmRJbmRleChwcmVkaWNhdGUsIHRoaXNBcmcgPSB1bmRlZmluZWQpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRmaW5kID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpKDYpO1xudmFyIEtFWSA9ICdmaW5kSW5kZXgnO1xudmFyIGZvcmNlZCA9IHRydWU7XG4vLyBTaG91bGRuJ3Qgc2tpcCBob2xlc1xuaWYgKEtFWSBpbiBbXSkgQXJyYXkoMSlbS0VZXShmdW5jdGlvbiAoKSB7IGZvcmNlZCA9IGZhbHNlOyB9KTtcbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogZm9yY2VkLCAnQXJyYXknLCB7XG4gIGZpbmRJbmRleDogZnVuY3Rpb24gZmluZEluZGV4KGNhbGxiYWNrZm4gLyogLCB0aGF0ID0gdW5kZWZpbmVkICovKSB7XG4gICAgcmV0dXJuICRmaW5kKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG5yZXF1aXJlKCcuL19hZGQtdG8tdW5zY29wYWJsZXMnKShLRVkpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///235\n")},function(module,exports,__webpack_require__){eval("__webpack_require__(38)('Array');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuc3BlY2llcy5qcz9kMDRmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLG1CQUFPLENBQUMsRUFBZ0IiLCJmaWxlIjoiMjM2LmpzIiwic291cmNlc0NvbnRlbnQiOlsicmVxdWlyZSgnLi9fc2V0LXNwZWNpZXMnKSgnQXJyYXknKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///236\n")},function(module,exports,__webpack_require__){eval("var global = __webpack_require__(2);\nvar inheritIfRequired = __webpack_require__(73);\nvar dP = __webpack_require__(8).f;\nvar gOPN = __webpack_require__(37).f;\nvar isRegExp = __webpack_require__(56);\nvar $flags = __webpack_require__(50);\nvar $RegExp = global.RegExp;\nvar Base = $RegExp;\nvar proto = $RegExp.prototype;\nvar re1 = /a/g;\nvar re2 = /a/g;\n// \"new\" creates a new object, old webkit buggy here\nvar CORRECT_NEW = new $RegExp(re1) !== re1;\n\nif (__webpack_require__(7) && (!CORRECT_NEW || __webpack_require__(3)(function () {\n re2[__webpack_require__(5)('match')] = false;\n // RegExp constructor can alter flags and IsRegExp works correct with @@match\n return $RegExp(re1) != re1 || $RegExp(re2) == re2 || $RegExp(re1, 'i') != '/a/i';\n}))) {\n $RegExp = function RegExp(p, f) {\n var tiRE = this instanceof $RegExp;\n var piRE = isRegExp(p);\n var fiU = f === undefined;\n return !tiRE && piRE && p.constructor === $RegExp && fiU ? p\n : inheritIfRequired(CORRECT_NEW\n ? new Base(piRE && !fiU ? p.source : p, f)\n : Base((piRE = p instanceof $RegExp) ? p.source : p, piRE && fiU ? $flags.call(p) : f)\n , tiRE ? this : proto, $RegExp);\n };\n var proxy = function (key) {\n key in $RegExp || dP($RegExp, key, {\n configurable: true,\n get: function () { return Base[key]; },\n set: function (it) { Base[key] = it; }\n });\n };\n for (var keys = gOPN(Base), i = 0; keys.length > i;) proxy(keys[i++]);\n proto.constructor = $RegExp;\n $RegExp.prototype = proto;\n __webpack_require__(12)(global, 'RegExp', $RegExp);\n}\n\n__webpack_require__(38)('RegExp');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLmNvbnN0cnVjdG9yLmpzPzNiMmIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsYUFBYSxtQkFBTyxDQUFDLENBQVc7QUFDaEMsd0JBQXdCLG1CQUFPLENBQUMsRUFBd0I7QUFDeEQsU0FBUyxtQkFBTyxDQUFDLENBQWM7QUFDL0IsV0FBVyxtQkFBTyxDQUFDLEVBQWdCO0FBQ25DLGVBQWUsbUJBQU8sQ0FBQyxFQUFjO0FBQ3JDLGFBQWEsbUJBQU8sQ0FBQyxFQUFVO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLElBQUksbUJBQU8sQ0FBQyxDQUFnQixzQkFBc0IsbUJBQU8sQ0FBQyxDQUFVO0FBQ3BFLE1BQU0sbUJBQU8sQ0FBQyxDQUFRO0FBQ3RCO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0Isa0JBQWtCLEVBQUU7QUFDNUMsMEJBQTBCLGdCQUFnQjtBQUMxQyxLQUFLO0FBQ0w7QUFDQSxvQ0FBb0MsaUJBQWlCO0FBQ3JEO0FBQ0E7QUFDQSxFQUFFLG1CQUFPLENBQUMsRUFBYTtBQUN2Qjs7QUFFQSxtQkFBTyxDQUFDLEVBQWdCIiwiZmlsZSI6IjIzNy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBpbmhlcml0SWZSZXF1aXJlZCA9IHJlcXVpcmUoJy4vX2luaGVyaXQtaWYtcmVxdWlyZWQnKTtcbnZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgZ09QTiA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJykuZjtcbnZhciBpc1JlZ0V4cCA9IHJlcXVpcmUoJy4vX2lzLXJlZ2V4cCcpO1xudmFyICRmbGFncyA9IHJlcXVpcmUoJy4vX2ZsYWdzJyk7XG52YXIgJFJlZ0V4cCA9IGdsb2JhbC5SZWdFeHA7XG52YXIgQmFzZSA9ICRSZWdFeHA7XG52YXIgcHJvdG8gPSAkUmVnRXhwLnByb3RvdHlwZTtcbnZhciByZTEgPSAvYS9nO1xudmFyIHJlMiA9IC9hL2c7XG4vLyBcIm5ld1wiIGNyZWF0ZXMgYSBuZXcgb2JqZWN0LCBvbGQgd2Via2l0IGJ1Z2d5IGhlcmVcbnZhciBDT1JSRUNUX05FVyA9IG5ldyAkUmVnRXhwKHJlMSkgIT09IHJlMTtcblxuaWYgKHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgKCFDT1JSRUNUX05FVyB8fCByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgcmUyW3JlcXVpcmUoJy4vX3drcycpKCdtYXRjaCcpXSA9IGZhbHNlO1xuICAvLyBSZWdFeHAgY29uc3RydWN0b3IgY2FuIGFsdGVyIGZsYWdzIGFuZCBJc1JlZ0V4cCB3b3JrcyBjb3JyZWN0IHdpdGggQEBtYXRjaFxuICByZXR1cm4gJFJlZ0V4cChyZTEpICE9IHJlMSB8fCAkUmVnRXhwKHJlMikgPT0gcmUyIHx8ICRSZWdFeHAocmUxLCAnaScpICE9ICcvYS9pJztcbn0pKSkge1xuICAkUmVnRXhwID0gZnVuY3Rpb24gUmVnRXhwKHAsIGYpIHtcbiAgICB2YXIgdGlSRSA9IHRoaXMgaW5zdGFuY2VvZiAkUmVnRXhwO1xuICAgIHZhciBwaVJFID0gaXNSZWdFeHAocCk7XG4gICAgdmFyIGZpVSA9IGYgPT09IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gIXRpUkUgJiYgcGlSRSAmJiBwLmNvbnN0cnVjdG9yID09PSAkUmVnRXhwICYmIGZpVSA/IHBcbiAgICAgIDogaW5oZXJpdElmUmVxdWlyZWQoQ09SUkVDVF9ORVdcbiAgICAgICAgPyBuZXcgQmFzZShwaVJFICYmICFmaVUgPyBwLnNvdXJjZSA6IHAsIGYpXG4gICAgICAgIDogQmFzZSgocGlSRSA9IHAgaW5zdGFuY2VvZiAkUmVnRXhwKSA/IHAuc291cmNlIDogcCwgcGlSRSAmJiBmaVUgPyAkZmxhZ3MuY2FsbChwKSA6IGYpXG4gICAgICAsIHRpUkUgPyB0aGlzIDogcHJvdG8sICRSZWdFeHApO1xuICB9O1xuICB2YXIgcHJveHkgPSBmdW5jdGlvbiAoa2V5KSB7XG4gICAga2V5IGluICRSZWdFeHAgfHwgZFAoJFJlZ0V4cCwga2V5LCB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIEJhc2Vba2V5XTsgfSxcbiAgICAgIHNldDogZnVuY3Rpb24gKGl0KSB7IEJhc2Vba2V5XSA9IGl0OyB9XG4gICAgfSk7XG4gIH07XG4gIGZvciAodmFyIGtleXMgPSBnT1BOKEJhc2UpLCBpID0gMDsga2V5cy5sZW5ndGggPiBpOykgcHJveHkoa2V5c1tpKytdKTtcbiAgcHJvdG8uY29uc3RydWN0b3IgPSAkUmVnRXhwO1xuICAkUmVnRXhwLnByb3RvdHlwZSA9IHByb3RvO1xuICByZXF1aXJlKCcuL19yZWRlZmluZScpKGdsb2JhbCwgJ1JlZ0V4cCcsICRSZWdFeHApO1xufVxuXG5yZXF1aXJlKCcuL19zZXQtc3BlY2llcycpKCdSZWdFeHAnKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///237\n")},function(module,exports,__webpack_require__){"use strict";eval("\n__webpack_require__(114);\nvar anObject = __webpack_require__(1);\nvar $flags = __webpack_require__(50);\nvar DESCRIPTORS = __webpack_require__(7);\nvar TO_STRING = 'toString';\nvar $toString = /./[TO_STRING];\n\nvar define = function (fn) {\n __webpack_require__(12)(RegExp.prototype, TO_STRING, fn, true);\n};\n\n// 21.2.5.14 RegExp.prototype.toString()\nif (__webpack_require__(3)(function () { return $toString.call({ source: 'a', flags: 'b' }) != '/a/b'; })) {\n define(function toString() {\n var R = anObject(this);\n return '/'.concat(R.source, '/',\n 'flags' in R ? R.flags : !DESCRIPTORS && R instanceof RegExp ? $flags.call(R) : undefined);\n });\n// FF44- RegExp#toString has a wrong name\n} else if ($toString.name != TO_STRING) {\n define(function toString() {\n return $toString.call(this);\n });\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLnRvLXN0cmluZy5qcz82YjU0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsbUJBQU8sQ0FBQyxHQUFvQjtBQUM1QixlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxhQUFhLG1CQUFPLENBQUMsRUFBVTtBQUMvQixrQkFBa0IsbUJBQU8sQ0FBQyxDQUFnQjtBQUMxQztBQUNBOztBQUVBO0FBQ0EsRUFBRSxtQkFBTyxDQUFDLEVBQWE7QUFDdkI7O0FBRUE7QUFDQSxJQUFJLG1CQUFPLENBQUMsQ0FBVSxlQUFlLHdCQUF3QiwwQkFBMEIsWUFBWSxFQUFFO0FBQ3JHO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxHQUFHO0FBQ0giLCJmaWxlIjoiMjM4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi9lczYucmVnZXhwLmZsYWdzJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciAkZmxhZ3MgPSByZXF1aXJlKCcuL19mbGFncycpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKTtcbnZhciBUT19TVFJJTkcgPSAndG9TdHJpbmcnO1xudmFyICR0b1N0cmluZyA9IC8uL1tUT19TVFJJTkddO1xuXG52YXIgZGVmaW5lID0gZnVuY3Rpb24gKGZuKSB7XG4gIHJlcXVpcmUoJy4vX3JlZGVmaW5lJykoUmVnRXhwLnByb3RvdHlwZSwgVE9fU1RSSU5HLCBmbiwgdHJ1ZSk7XG59O1xuXG4vLyAyMS4yLjUuMTQgUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZygpXG5pZiAocmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7IHJldHVybiAkdG9TdHJpbmcuY2FsbCh7IHNvdXJjZTogJ2EnLCBmbGFnczogJ2InIH0pICE9ICcvYS9iJzsgfSkpIHtcbiAgZGVmaW5lKGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHZhciBSID0gYW5PYmplY3QodGhpcyk7XG4gICAgcmV0dXJuICcvJy5jb25jYXQoUi5zb3VyY2UsICcvJyxcbiAgICAgICdmbGFncycgaW4gUiA/IFIuZmxhZ3MgOiAhREVTQ1JJUFRPUlMgJiYgUiBpbnN0YW5jZW9mIFJlZ0V4cCA/ICRmbGFncy5jYWxsKFIpIDogdW5kZWZpbmVkKTtcbiAgfSk7XG4vLyBGRjQ0LSBSZWdFeHAjdG9TdHJpbmcgaGFzIGEgd3JvbmcgbmFtZVxufSBlbHNlIGlmICgkdG9TdHJpbmcubmFtZSAhPSBUT19TVFJJTkcpIHtcbiAgZGVmaW5lKGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiAkdG9TdHJpbmcuY2FsbCh0aGlzKTtcbiAgfSk7XG59XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///238\n")},function(module,exports,__webpack_require__){"use strict";eval("\n\nvar anObject = __webpack_require__(1);\nvar toLength = __webpack_require__(6);\nvar advanceStringIndex = __webpack_require__(88);\nvar regExpExec = __webpack_require__(58);\n\n// @@match logic\n__webpack_require__(59)('match', 1, function (defined, MATCH, $match, maybeCallNative) {\n return [\n // `String.prototype.match` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.match\n function match(regexp) {\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[MATCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[MATCH](String(O));\n },\n // `RegExp.prototype[@@match]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@match\n function (regexp) {\n var res = maybeCallNative($match, regexp, this);\n if (res.done) return res.value;\n var rx = anObject(regexp);\n var S = String(this);\n if (!rx.global) return regExpExec(rx, S);\n var fullUnicode = rx.unicode;\n rx.lastIndex = 0;\n var A = [];\n var n = 0;\n var result;\n while ((result = regExpExec(rx, S)) !== null) {\n var matchStr = String(result[0]);\n A[n] = matchStr;\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n n++;\n }\n return n === 0 ? null : A;\n }\n ];\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLm1hdGNoLmpzPzQ5MTciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWIsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMseUJBQXlCLG1CQUFPLENBQUMsRUFBeUI7QUFDMUQsaUJBQWlCLG1CQUFPLENBQUMsRUFBeUI7O0FBRWxEO0FBQ0EsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyMzkuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgYWR2YW5jZVN0cmluZ0luZGV4ID0gcmVxdWlyZSgnLi9fYWR2YW5jZS1zdHJpbmctaW5kZXgnKTtcbnZhciByZWdFeHBFeGVjID0gcmVxdWlyZSgnLi9fcmVnZXhwLWV4ZWMtYWJzdHJhY3QnKTtcblxuLy8gQEBtYXRjaCBsb2dpY1xucmVxdWlyZSgnLi9fZml4LXJlLXdrcycpKCdtYXRjaCcsIDEsIGZ1bmN0aW9uIChkZWZpbmVkLCBNQVRDSCwgJG1hdGNoLCBtYXliZUNhbGxOYXRpdmUpIHtcbiAgcmV0dXJuIFtcbiAgICAvLyBgU3RyaW5nLnByb3RvdHlwZS5tYXRjaGAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5tYXRjaFxuICAgIGZ1bmN0aW9uIG1hdGNoKHJlZ2V4cCkge1xuICAgICAgdmFyIE8gPSBkZWZpbmVkKHRoaXMpO1xuICAgICAgdmFyIGZuID0gcmVnZXhwID09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHJlZ2V4cFtNQVRDSF07XG4gICAgICByZXR1cm4gZm4gIT09IHVuZGVmaW5lZCA/IGZuLmNhbGwocmVnZXhwLCBPKSA6IG5ldyBSZWdFeHAocmVnZXhwKVtNQVRDSF0oU3RyaW5nKE8pKTtcbiAgICB9LFxuICAgIC8vIGBSZWdFeHAucHJvdG90eXBlW0BAbWF0Y2hdYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1yZWdleHAucHJvdG90eXBlLUBAbWF0Y2hcbiAgICBmdW5jdGlvbiAocmVnZXhwKSB7XG4gICAgICB2YXIgcmVzID0gbWF5YmVDYWxsTmF0aXZlKCRtYXRjaCwgcmVnZXhwLCB0aGlzKTtcbiAgICAgIGlmIChyZXMuZG9uZSkgcmV0dXJuIHJlcy52YWx1ZTtcbiAgICAgIHZhciByeCA9IGFuT2JqZWN0KHJlZ2V4cCk7XG4gICAgICB2YXIgUyA9IFN0cmluZyh0aGlzKTtcbiAgICAgIGlmICghcnguZ2xvYmFsKSByZXR1cm4gcmVnRXhwRXhlYyhyeCwgUyk7XG4gICAgICB2YXIgZnVsbFVuaWNvZGUgPSByeC51bmljb2RlO1xuICAgICAgcngubGFzdEluZGV4ID0gMDtcbiAgICAgIHZhciBBID0gW107XG4gICAgICB2YXIgbiA9IDA7XG4gICAgICB2YXIgcmVzdWx0O1xuICAgICAgd2hpbGUgKChyZXN1bHQgPSByZWdFeHBFeGVjKHJ4LCBTKSkgIT09IG51bGwpIHtcbiAgICAgICAgdmFyIG1hdGNoU3RyID0gU3RyaW5nKHJlc3VsdFswXSk7XG4gICAgICAgIEFbbl0gPSBtYXRjaFN0cjtcbiAgICAgICAgaWYgKG1hdGNoU3RyID09PSAnJykgcngubGFzdEluZGV4ID0gYWR2YW5jZVN0cmluZ0luZGV4KFMsIHRvTGVuZ3RoKHJ4Lmxhc3RJbmRleCksIGZ1bGxVbmljb2RlKTtcbiAgICAgICAgbisrO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG4gPT09IDAgPyBudWxsIDogQTtcbiAgICB9XG4gIF07XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///239\n")},function(module,exports,__webpack_require__){"use strict";eval("\n\nvar anObject = __webpack_require__(1);\nvar toObject = __webpack_require__(9);\nvar toLength = __webpack_require__(6);\nvar toInteger = __webpack_require__(21);\nvar advanceStringIndex = __webpack_require__(88);\nvar regExpExec = __webpack_require__(58);\nvar max = Math.max;\nvar min = Math.min;\nvar floor = Math.floor;\nvar SUBSTITUTION_SYMBOLS = /\\$([$&`']|\\d\\d?|<[^>]*>)/g;\nvar SUBSTITUTION_SYMBOLS_NO_NAMED = /\\$([$&`']|\\d\\d?)/g;\n\nvar maybeToString = function (it) {\n return it === undefined ? it : String(it);\n};\n\n// @@replace logic\n__webpack_require__(59)('replace', 2, function (defined, REPLACE, $replace, maybeCallNative) {\n return [\n // `String.prototype.replace` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.replace\n function replace(searchValue, replaceValue) {\n var O = defined(this);\n var fn = searchValue == undefined ? undefined : searchValue[REPLACE];\n return fn !== undefined\n ? fn.call(searchValue, O, replaceValue)\n : $replace.call(String(O), searchValue, replaceValue);\n },\n // `RegExp.prototype[@@replace]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@replace\n function (regexp, replaceValue) {\n var res = maybeCallNative($replace, regexp, this, replaceValue);\n if (res.done) return res.value;\n\n var rx = anObject(regexp);\n var S = String(this);\n var functionalReplace = typeof replaceValue === 'function';\n if (!functionalReplace) replaceValue = String(replaceValue);\n var global = rx.global;\n if (global) {\n var fullUnicode = rx.unicode;\n rx.lastIndex = 0;\n }\n var results = [];\n while (true) {\n var result = regExpExec(rx, S);\n if (result === null) break;\n results.push(result);\n if (!global) break;\n var matchStr = String(result[0]);\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n }\n var accumulatedResult = '';\n var nextSourcePosition = 0;\n for (var i = 0; i < results.length; i++) {\n result = results[i];\n var matched = String(result[0]);\n var position = max(min(toInteger(result.index), S.length), 0);\n var captures = [];\n // NOTE: This is equivalent to\n // captures = result.slice(1).map(maybeToString)\n // but for some reason `nativeSlice.call(result, 1, result.length)` (called in\n // the slice polyfill when slicing native arrays) \"doesn't work\" in safari 9 and\n // causes a crash (https://pastebin.com/N21QzeQA) when trying to debug it.\n for (var j = 1; j < result.length; j++) captures.push(maybeToString(result[j]));\n var namedCaptures = result.groups;\n if (functionalReplace) {\n var replacerArgs = [matched].concat(captures, position, S);\n if (namedCaptures !== undefined) replacerArgs.push(namedCaptures);\n var replacement = String(replaceValue.apply(undefined, replacerArgs));\n } else {\n replacement = getSubstitution(matched, S, position, captures, namedCaptures, replaceValue);\n }\n if (position >= nextSourcePosition) {\n accumulatedResult += S.slice(nextSourcePosition, position) + replacement;\n nextSourcePosition = position + matched.length;\n }\n }\n return accumulatedResult + S.slice(nextSourcePosition);\n }\n ];\n\n // https://tc39.github.io/ecma262/#sec-getsubstitution\n function getSubstitution(matched, str, position, captures, namedCaptures, replacement) {\n var tailPos = position + matched.length;\n var m = captures.length;\n var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED;\n if (namedCaptures !== undefined) {\n namedCaptures = toObject(namedCaptures);\n symbols = SUBSTITUTION_SYMBOLS;\n }\n return $replace.call(replacement, symbols, function (match, ch) {\n var capture;\n switch (ch.charAt(0)) {\n case '$': return '$';\n case '&': return matched;\n case '`': return str.slice(0, position);\n case \"'\": return str.slice(tailPos);\n case '<':\n capture = namedCaptures[ch.slice(1, -1)];\n break;\n default: // \\d\\d?\n var n = +ch;\n if (n === 0) return match;\n if (n > m) {\n var f = floor(n / 10);\n if (f === 0) return match;\n if (f <= m) return captures[f - 1] === undefined ? ch.charAt(1) : captures[f - 1] + ch.charAt(1);\n return match;\n }\n capture = captures[n - 1];\n }\n return capture === undefined ? '' : capture;\n });\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLnJlcGxhY2UuanM/YTQ4MSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDLHlCQUF5QixtQkFBTyxDQUFDLEVBQXlCO0FBQzFELGlCQUFpQixtQkFBTyxDQUFDLEVBQXlCO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIsb0JBQW9CO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixtQkFBbUI7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLENBQUMiLCJmaWxlIjoiMjQwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIGFkdmFuY2VTdHJpbmdJbmRleCA9IHJlcXVpcmUoJy4vX2FkdmFuY2Utc3RyaW5nLWluZGV4Jyk7XG52YXIgcmVnRXhwRXhlYyA9IHJlcXVpcmUoJy4vX3JlZ2V4cC1leGVjLWFic3RyYWN0Jyk7XG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgbWluID0gTWF0aC5taW47XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xudmFyIFNVQlNUSVRVVElPTl9TWU1CT0xTID0gL1xcJChbJCZgJ118XFxkXFxkP3w8W14+XSo+KS9nO1xudmFyIFNVQlNUSVRVVElPTl9TWU1CT0xTX05PX05BTUVEID0gL1xcJChbJCZgJ118XFxkXFxkPykvZztcblxudmFyIG1heWJlVG9TdHJpbmcgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ID09PSB1bmRlZmluZWQgPyBpdCA6IFN0cmluZyhpdCk7XG59O1xuXG4vLyBAQHJlcGxhY2UgbG9naWNcbnJlcXVpcmUoJy4vX2ZpeC1yZS13a3MnKSgncmVwbGFjZScsIDIsIGZ1bmN0aW9uIChkZWZpbmVkLCBSRVBMQUNFLCAkcmVwbGFjZSwgbWF5YmVDYWxsTmF0aXZlKSB7XG4gIHJldHVybiBbXG4gICAgLy8gYFN0cmluZy5wcm90b3R5cGUucmVwbGFjZWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlXG4gICAgZnVuY3Rpb24gcmVwbGFjZShzZWFyY2hWYWx1ZSwgcmVwbGFjZVZhbHVlKSB7XG4gICAgICB2YXIgTyA9IGRlZmluZWQodGhpcyk7XG4gICAgICB2YXIgZm4gPSBzZWFyY2hWYWx1ZSA9PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBzZWFyY2hWYWx1ZVtSRVBMQUNFXTtcbiAgICAgIHJldHVybiBmbiAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8gZm4uY2FsbChzZWFyY2hWYWx1ZSwgTywgcmVwbGFjZVZhbHVlKVxuICAgICAgICA6ICRyZXBsYWNlLmNhbGwoU3RyaW5nKE8pLCBzZWFyY2hWYWx1ZSwgcmVwbGFjZVZhbHVlKTtcbiAgICB9LFxuICAgIC8vIGBSZWdFeHAucHJvdG90eXBlW0BAcmVwbGFjZV1gIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXJlZ2V4cC5wcm90b3R5cGUtQEByZXBsYWNlXG4gICAgZnVuY3Rpb24gKHJlZ2V4cCwgcmVwbGFjZVZhbHVlKSB7XG4gICAgICB2YXIgcmVzID0gbWF5YmVDYWxsTmF0aXZlKCRyZXBsYWNlLCByZWdleHAsIHRoaXMsIHJlcGxhY2VWYWx1ZSk7XG4gICAgICBpZiAocmVzLmRvbmUpIHJldHVybiByZXMudmFsdWU7XG5cbiAgICAgIHZhciByeCA9IGFuT2JqZWN0KHJlZ2V4cCk7XG4gICAgICB2YXIgUyA9IFN0cmluZyh0aGlzKTtcbiAgICAgIHZhciBmdW5jdGlvbmFsUmVwbGFjZSA9IHR5cGVvZiByZXBsYWNlVmFsdWUgPT09ICdmdW5jdGlvbic7XG4gICAgICBpZiAoIWZ1bmN0aW9uYWxSZXBsYWNlKSByZXBsYWNlVmFsdWUgPSBTdHJpbmcocmVwbGFjZVZhbHVlKTtcbiAgICAgIHZhciBnbG9iYWwgPSByeC5nbG9iYWw7XG4gICAgICBpZiAoZ2xvYmFsKSB7XG4gICAgICAgIHZhciBmdWxsVW5pY29kZSA9IHJ4LnVuaWNvZGU7XG4gICAgICAgIHJ4Lmxhc3RJbmRleCA9IDA7XG4gICAgICB9XG4gICAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHJlZ0V4cEV4ZWMocngsIFMpO1xuICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsKSBicmVhaztcbiAgICAgICAgcmVzdWx0cy5wdXNoKHJlc3VsdCk7XG4gICAgICAgIGlmICghZ2xvYmFsKSBicmVhaztcbiAgICAgICAgdmFyIG1hdGNoU3RyID0gU3RyaW5nKHJlc3VsdFswXSk7XG4gICAgICAgIGlmIChtYXRjaFN0ciA9PT0gJycpIHJ4Lmxhc3RJbmRleCA9IGFkdmFuY2VTdHJpbmdJbmRleChTLCB0b0xlbmd0aChyeC5sYXN0SW5kZXgpLCBmdWxsVW5pY29kZSk7XG4gICAgICB9XG4gICAgICB2YXIgYWNjdW11bGF0ZWRSZXN1bHQgPSAnJztcbiAgICAgIHZhciBuZXh0U291cmNlUG9zaXRpb24gPSAwO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXN1bHRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdHNbaV07XG4gICAgICAgIHZhciBtYXRjaGVkID0gU3RyaW5nKHJlc3VsdFswXSk7XG4gICAgICAgIHZhciBwb3NpdGlvbiA9IG1heChtaW4odG9JbnRlZ2VyKHJlc3VsdC5pbmRleCksIFMubGVuZ3RoKSwgMCk7XG4gICAgICAgIHZhciBjYXB0dXJlcyA9IFtdO1xuICAgICAgICAvLyBOT1RFOiBUaGlzIGlzIGVxdWl2YWxlbnQgdG9cbiAgICAgICAgLy8gICBjYXB0dXJlcyA9IHJlc3VsdC5zbGljZSgxKS5tYXAobWF5YmVUb1N0cmluZylcbiAgICAgICAgLy8gYnV0IGZvciBzb21lIHJlYXNvbiBgbmF0aXZlU2xpY2UuY2FsbChyZXN1bHQsIDEsIHJlc3VsdC5sZW5ndGgpYCAoY2FsbGVkIGluXG4gICAgICAgIC8vIHRoZSBzbGljZSBwb2x5ZmlsbCB3aGVuIHNsaWNpbmcgbmF0aXZlIGFycmF5cykgXCJkb2Vzbid0IHdvcmtcIiBpbiBzYWZhcmkgOSBhbmRcbiAgICAgICAgLy8gY2F1c2VzIGEgY3Jhc2ggKGh0dHBzOi8vcGFzdGViaW4uY29tL04yMVF6ZVFBKSB3aGVuIHRyeWluZyB0byBkZWJ1ZyBpdC5cbiAgICAgICAgZm9yICh2YXIgaiA9IDE7IGogPCByZXN1bHQubGVuZ3RoOyBqKyspIGNhcHR1cmVzLnB1c2gobWF5YmVUb1N0cmluZyhyZXN1bHRbal0pKTtcbiAgICAgICAgdmFyIG5hbWVkQ2FwdHVyZXMgPSByZXN1bHQuZ3JvdXBzO1xuICAgICAgICBpZiAoZnVuY3Rpb25hbFJlcGxhY2UpIHtcbiAgICAgICAgICB2YXIgcmVwbGFjZXJBcmdzID0gW21hdGNoZWRdLmNvbmNhdChjYXB0dXJlcywgcG9zaXRpb24sIFMpO1xuICAgICAgICAgIGlmIChuYW1lZENhcHR1cmVzICE9PSB1bmRlZmluZWQpIHJlcGxhY2VyQXJncy5wdXNoKG5hbWVkQ2FwdHVyZXMpO1xuICAgICAgICAgIHZhciByZXBsYWNlbWVudCA9IFN0cmluZyhyZXBsYWNlVmFsdWUuYXBwbHkodW5kZWZpbmVkLCByZXBsYWNlckFyZ3MpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXBsYWNlbWVudCA9IGdldFN1YnN0aXR1dGlvbihtYXRjaGVkLCBTLCBwb3NpdGlvbiwgY2FwdHVyZXMsIG5hbWVkQ2FwdHVyZXMsIHJlcGxhY2VWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBvc2l0aW9uID49IG5leHRTb3VyY2VQb3NpdGlvbikge1xuICAgICAgICAgIGFjY3VtdWxhdGVkUmVzdWx0ICs9IFMuc2xpY2UobmV4dFNvdXJjZVBvc2l0aW9uLCBwb3NpdGlvbikgKyByZXBsYWNlbWVudDtcbiAgICAgICAgICBuZXh0U291cmNlUG9zaXRpb24gPSBwb3NpdGlvbiArIG1hdGNoZWQubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gYWNjdW11bGF0ZWRSZXN1bHQgKyBTLnNsaWNlKG5leHRTb3VyY2VQb3NpdGlvbik7XG4gICAgfVxuICBdO1xuXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtZ2V0c3Vic3RpdHV0aW9uXG4gIGZ1bmN0aW9uIGdldFN1YnN0aXR1dGlvbihtYXRjaGVkLCBzdHIsIHBvc2l0aW9uLCBjYXB0dXJlcywgbmFtZWRDYXB0dXJlcywgcmVwbGFjZW1lbnQpIHtcbiAgICB2YXIgdGFpbFBvcyA9IHBvc2l0aW9uICsgbWF0Y2hlZC5sZW5ndGg7XG4gICAgdmFyIG0gPSBjYXB0dXJlcy5sZW5ndGg7XG4gICAgdmFyIHN5bWJvbHMgPSBTVUJTVElUVVRJT05fU1lNQk9MU19OT19OQU1FRDtcbiAgICBpZiAobmFtZWRDYXB0dXJlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBuYW1lZENhcHR1cmVzID0gdG9PYmplY3QobmFtZWRDYXB0dXJlcyk7XG4gICAgICBzeW1ib2xzID0gU1VCU1RJVFVUSU9OX1NZTUJPTFM7XG4gICAgfVxuICAgIHJldHVybiAkcmVwbGFjZS5jYWxsKHJlcGxhY2VtZW50LCBzeW1ib2xzLCBmdW5jdGlvbiAobWF0Y2gsIGNoKSB7XG4gICAgICB2YXIgY2FwdHVyZTtcbiAgICAgIHN3aXRjaCAoY2guY2hhckF0KDApKSB7XG4gICAgICAgIGNhc2UgJyQnOiByZXR1cm4gJyQnO1xuICAgICAgICBjYXNlICcmJzogcmV0dXJuIG1hdGNoZWQ7XG4gICAgICAgIGNhc2UgJ2AnOiByZXR1cm4gc3RyLnNsaWNlKDAsIHBvc2l0aW9uKTtcbiAgICAgICAgY2FzZSBcIidcIjogcmV0dXJuIHN0ci5zbGljZSh0YWlsUG9zKTtcbiAgICAgICAgY2FzZSAnPCc6XG4gICAgICAgICAgY2FwdHVyZSA9IG5hbWVkQ2FwdHVyZXNbY2guc2xpY2UoMSwgLTEpXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDogLy8gXFxkXFxkP1xuICAgICAgICAgIHZhciBuID0gK2NoO1xuICAgICAgICAgIGlmIChuID09PSAwKSByZXR1cm4gbWF0Y2g7XG4gICAgICAgICAgaWYgKG4gPiBtKSB7XG4gICAgICAgICAgICB2YXIgZiA9IGZsb29yKG4gLyAxMCk7XG4gICAgICAgICAgICBpZiAoZiA9PT0gMCkgcmV0dXJuIG1hdGNoO1xuICAgICAgICAgICAgaWYgKGYgPD0gbSkgcmV0dXJuIGNhcHR1cmVzW2YgLSAxXSA9PT0gdW5kZWZpbmVkID8gY2guY2hhckF0KDEpIDogY2FwdHVyZXNbZiAtIDFdICsgY2guY2hhckF0KDEpO1xuICAgICAgICAgICAgcmV0dXJuIG1hdGNoO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXB0dXJlID0gY2FwdHVyZXNbbiAtIDFdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNhcHR1cmUgPT09IHVuZGVmaW5lZCA/ICcnIDogY2FwdHVyZTtcbiAgICB9KTtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///240\n")},function(module,exports,__webpack_require__){"use strict";eval("\n\nvar anObject = __webpack_require__(1);\nvar sameValue = __webpack_require__(100);\nvar regExpExec = __webpack_require__(58);\n\n// @@search logic\n__webpack_require__(59)('search', 1, function (defined, SEARCH, $search, maybeCallNative) {\n return [\n // `String.prototype.search` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.search\n function search(regexp) {\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[SEARCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[SEARCH](String(O));\n },\n // `RegExp.prototype[@@search]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@search\n function (regexp) {\n var res = maybeCallNative($search, regexp, this);\n if (res.done) return res.value;\n var rx = anObject(regexp);\n var S = String(this);\n var previousLastIndex = rx.lastIndex;\n if (!sameValue(previousLastIndex, 0)) rx.lastIndex = 0;\n var result = regExpExec(rx, S);\n if (!sameValue(rx.lastIndex, previousLastIndex)) rx.lastIndex = previousLastIndex;\n return result === null ? -1 : result.index;\n }\n ];\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLnNlYXJjaC5qcz8zODZkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhOztBQUViLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGdCQUFnQixtQkFBTyxDQUFDLEdBQWU7QUFDdkMsaUJBQWlCLG1CQUFPLENBQUMsRUFBeUI7O0FBRWxEO0FBQ0EsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjI0MS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgc2FtZVZhbHVlID0gcmVxdWlyZSgnLi9fc2FtZS12YWx1ZScpO1xudmFyIHJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuL19yZWdleHAtZXhlYy1hYnN0cmFjdCcpO1xuXG4vLyBAQHNlYXJjaCBsb2dpY1xucmVxdWlyZSgnLi9fZml4LXJlLXdrcycpKCdzZWFyY2gnLCAxLCBmdW5jdGlvbiAoZGVmaW5lZCwgU0VBUkNILCAkc2VhcmNoLCBtYXliZUNhbGxOYXRpdmUpIHtcbiAgcmV0dXJuIFtcbiAgICAvLyBgU3RyaW5nLnByb3RvdHlwZS5zZWFyY2hgIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUuc2VhcmNoXG4gICAgZnVuY3Rpb24gc2VhcmNoKHJlZ2V4cCkge1xuICAgICAgdmFyIE8gPSBkZWZpbmVkKHRoaXMpO1xuICAgICAgdmFyIGZuID0gcmVnZXhwID09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHJlZ2V4cFtTRUFSQ0hdO1xuICAgICAgcmV0dXJuIGZuICE9PSB1bmRlZmluZWQgPyBmbi5jYWxsKHJlZ2V4cCwgTykgOiBuZXcgUmVnRXhwKHJlZ2V4cClbU0VBUkNIXShTdHJpbmcoTykpO1xuICAgIH0sXG4gICAgLy8gYFJlZ0V4cC5wcm90b3R5cGVbQEBzZWFyY2hdYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1yZWdleHAucHJvdG90eXBlLUBAc2VhcmNoXG4gICAgZnVuY3Rpb24gKHJlZ2V4cCkge1xuICAgICAgdmFyIHJlcyA9IG1heWJlQ2FsbE5hdGl2ZSgkc2VhcmNoLCByZWdleHAsIHRoaXMpO1xuICAgICAgaWYgKHJlcy5kb25lKSByZXR1cm4gcmVzLnZhbHVlO1xuICAgICAgdmFyIHJ4ID0gYW5PYmplY3QocmVnZXhwKTtcbiAgICAgIHZhciBTID0gU3RyaW5nKHRoaXMpO1xuICAgICAgdmFyIHByZXZpb3VzTGFzdEluZGV4ID0gcngubGFzdEluZGV4O1xuICAgICAgaWYgKCFzYW1lVmFsdWUocHJldmlvdXNMYXN0SW5kZXgsIDApKSByeC5sYXN0SW5kZXggPSAwO1xuICAgICAgdmFyIHJlc3VsdCA9IHJlZ0V4cEV4ZWMocngsIFMpO1xuICAgICAgaWYgKCFzYW1lVmFsdWUocngubGFzdEluZGV4LCBwcmV2aW91c0xhc3RJbmRleCkpIHJ4Lmxhc3RJbmRleCA9IHByZXZpb3VzTGFzdEluZGV4O1xuICAgICAgcmV0dXJuIHJlc3VsdCA9PT0gbnVsbCA/IC0xIDogcmVzdWx0LmluZGV4O1xuICAgIH1cbiAgXTtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///241\n")},function(module,exports,__webpack_require__){"use strict";eval("\n\nvar isRegExp = __webpack_require__(56);\nvar anObject = __webpack_require__(1);\nvar speciesConstructor = __webpack_require__(51);\nvar advanceStringIndex = __webpack_require__(88);\nvar toLength = __webpack_require__(6);\nvar callRegExpExec = __webpack_require__(58);\nvar regexpExec = __webpack_require__(87);\nvar fails = __webpack_require__(3);\nvar $min = Math.min;\nvar $push = [].push;\nvar $SPLIT = 'split';\nvar LENGTH = 'length';\nvar LAST_INDEX = 'lastIndex';\nvar MAX_UINT32 = 0xffffffff;\n\n// babel-minify transpiles RegExp('x', 'y') -> /x/y and it causes SyntaxError\nvar SUPPORTS_Y = !fails(function () { RegExp(MAX_UINT32, 'y'); });\n\n// @@split logic\n__webpack_require__(59)('split', 2, function (defined, SPLIT, $split, maybeCallNative) {\n var internalSplit;\n if (\n 'abbc'[$SPLIT](/(b)*/)[1] == 'c' ||\n 'test'[$SPLIT](/(?:)/, -1)[LENGTH] != 4 ||\n 'ab'[$SPLIT](/(?:ab)*/)[LENGTH] != 2 ||\n '.'[$SPLIT](/(.?)(.?)/)[LENGTH] != 4 ||\n '.'[$SPLIT](/()()/)[LENGTH] > 1 ||\n ''[$SPLIT](/.?/)[LENGTH]\n ) {\n // based on es5-shim implementation, need to rework it\n internalSplit = function (separator, limit) {\n var string = String(this);\n if (separator === undefined && limit === 0) return [];\n // If `separator` is not a regex, use native split\n if (!isRegExp(separator)) return $split.call(string, separator, limit);\n var output = [];\n var flags = (separator.ignoreCase ? 'i' : '') +\n (separator.multiline ? 'm' : '') +\n (separator.unicode ? 'u' : '') +\n (separator.sticky ? 'y' : '');\n var lastLastIndex = 0;\n var splitLimit = limit === undefined ? MAX_UINT32 : limit >>> 0;\n // Make `global` and avoid `lastIndex` issues by working with a copy\n var separatorCopy = new RegExp(separator.source, flags + 'g');\n var match, lastIndex, lastLength;\n while (match = regexpExec.call(separatorCopy, string)) {\n lastIndex = separatorCopy[LAST_INDEX];\n if (lastIndex > lastLastIndex) {\n output.push(string.slice(lastLastIndex, match.index));\n if (match[LENGTH] > 1 && match.index < string[LENGTH]) $push.apply(output, match.slice(1));\n lastLength = match[0][LENGTH];\n lastLastIndex = lastIndex;\n if (output[LENGTH] >= splitLimit) break;\n }\n if (separatorCopy[LAST_INDEX] === match.index) separatorCopy[LAST_INDEX]++; // Avoid an infinite loop\n }\n if (lastLastIndex === string[LENGTH]) {\n if (lastLength || !separatorCopy.test('')) output.push('');\n } else output.push(string.slice(lastLastIndex));\n return output[LENGTH] > splitLimit ? output.slice(0, splitLimit) : output;\n };\n // Chakra, V8\n } else if ('0'[$SPLIT](undefined, 0)[LENGTH]) {\n internalSplit = function (separator, limit) {\n return separator === undefined && limit === 0 ? [] : $split.call(this, separator, limit);\n };\n } else {\n internalSplit = $split;\n }\n\n return [\n // `String.prototype.split` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.split\n function split(separator, limit) {\n var O = defined(this);\n var splitter = separator == undefined ? undefined : separator[SPLIT];\n return splitter !== undefined\n ? splitter.call(separator, O, limit)\n : internalSplit.call(String(O), separator, limit);\n },\n // `RegExp.prototype[@@split]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@split\n //\n // NOTE: This cannot be properly polyfilled in engines that don't support\n // the 'y' flag.\n function (regexp, limit) {\n var res = maybeCallNative(internalSplit, regexp, this, limit, internalSplit !== $split);\n if (res.done) return res.value;\n\n var rx = anObject(regexp);\n var S = String(this);\n var C = speciesConstructor(rx, RegExp);\n\n var unicodeMatching = rx.unicode;\n var flags = (rx.ignoreCase ? 'i' : '') +\n (rx.multiline ? 'm' : '') +\n (rx.unicode ? 'u' : '') +\n (SUPPORTS_Y ? 'y' : 'g');\n\n // ^(? + rx + ) is needed, in combination with some S slicing, to\n // simulate the 'y' flag.\n var splitter = new C(SUPPORTS_Y ? rx : '^(?:' + rx.source + ')', flags);\n var lim = limit === undefined ? MAX_UINT32 : limit >>> 0;\n if (lim === 0) return [];\n if (S.length === 0) return callRegExpExec(splitter, S) === null ? [S] : [];\n var p = 0;\n var q = 0;\n var A = [];\n while (q < S.length) {\n splitter.lastIndex = SUPPORTS_Y ? q : 0;\n var z = callRegExpExec(splitter, SUPPORTS_Y ? S : S.slice(q));\n var e;\n if (\n z === null ||\n (e = $min(toLength(splitter.lastIndex + (SUPPORTS_Y ? 0 : q)), S.length)) === p\n ) {\n q = advanceStringIndex(S, q, unicodeMatching);\n } else {\n A.push(S.slice(p, q));\n if (A.length === lim) return A;\n for (var i = 1; i <= z.length - 1; i++) {\n A.push(z[i]);\n if (A.length === lim) return A;\n }\n q = p = e;\n }\n }\n A.push(S.slice(p));\n return A;\n }\n ];\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLnNwbGl0LmpzPzI4YTUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWIsZUFBZSxtQkFBTyxDQUFDLEVBQWM7QUFDckMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMseUJBQXlCLG1CQUFPLENBQUMsRUFBd0I7QUFDekQseUJBQXlCLG1CQUFPLENBQUMsRUFBeUI7QUFDMUQsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMscUJBQXFCLG1CQUFPLENBQUMsRUFBeUI7QUFDdEQsaUJBQWlCLG1CQUFPLENBQUMsRUFBZ0I7QUFDekMsWUFBWSxtQkFBTyxDQUFDLENBQVU7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EscUNBQXFDLHlCQUF5QixFQUFFOztBQUVoRTtBQUNBLG1CQUFPLENBQUMsRUFBZTtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1GQUFtRjtBQUNuRjtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EseUJBQXlCLG1CQUFtQjtBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjQyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaXNSZWdFeHAgPSByZXF1aXJlKCcuL19pcy1yZWdleHAnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4vX3NwZWNpZXMtY29uc3RydWN0b3InKTtcbnZhciBhZHZhbmNlU3RyaW5nSW5kZXggPSByZXF1aXJlKCcuL19hZHZhbmNlLXN0cmluZy1pbmRleCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgY2FsbFJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuL19yZWdleHAtZXhlYy1hYnN0cmFjdCcpO1xudmFyIHJlZ2V4cEV4ZWMgPSByZXF1aXJlKCcuL19yZWdleHAtZXhlYycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciAkbWluID0gTWF0aC5taW47XG52YXIgJHB1c2ggPSBbXS5wdXNoO1xudmFyICRTUExJVCA9ICdzcGxpdCc7XG52YXIgTEVOR1RIID0gJ2xlbmd0aCc7XG52YXIgTEFTVF9JTkRFWCA9ICdsYXN0SW5kZXgnO1xudmFyIE1BWF9VSU5UMzIgPSAweGZmZmZmZmZmO1xuXG4vLyBiYWJlbC1taW5pZnkgdHJhbnNwaWxlcyBSZWdFeHAoJ3gnLCAneScpIC0+IC94L3kgYW5kIGl0IGNhdXNlcyBTeW50YXhFcnJvclxudmFyIFNVUFBPUlRTX1kgPSAhZmFpbHMoZnVuY3Rpb24gKCkgeyBSZWdFeHAoTUFYX1VJTlQzMiwgJ3knKTsgfSk7XG5cbi8vIEBAc3BsaXQgbG9naWNcbnJlcXVpcmUoJy4vX2ZpeC1yZS13a3MnKSgnc3BsaXQnLCAyLCBmdW5jdGlvbiAoZGVmaW5lZCwgU1BMSVQsICRzcGxpdCwgbWF5YmVDYWxsTmF0aXZlKSB7XG4gIHZhciBpbnRlcm5hbFNwbGl0O1xuICBpZiAoXG4gICAgJ2FiYmMnWyRTUExJVF0oLyhiKSovKVsxXSA9PSAnYycgfHxcbiAgICAndGVzdCdbJFNQTElUXSgvKD86KS8sIC0xKVtMRU5HVEhdICE9IDQgfHxcbiAgICAnYWInWyRTUExJVF0oLyg/OmFiKSovKVtMRU5HVEhdICE9IDIgfHxcbiAgICAnLidbJFNQTElUXSgvKC4/KSguPykvKVtMRU5HVEhdICE9IDQgfHxcbiAgICAnLidbJFNQTElUXSgvKCkoKS8pW0xFTkdUSF0gPiAxIHx8XG4gICAgJydbJFNQTElUXSgvLj8vKVtMRU5HVEhdXG4gICkge1xuICAgIC8vIGJhc2VkIG9uIGVzNS1zaGltIGltcGxlbWVudGF0aW9uLCBuZWVkIHRvIHJld29yayBpdFxuICAgIGludGVybmFsU3BsaXQgPSBmdW5jdGlvbiAoc2VwYXJhdG9yLCBsaW1pdCkge1xuICAgICAgdmFyIHN0cmluZyA9IFN0cmluZyh0aGlzKTtcbiAgICAgIGlmIChzZXBhcmF0b3IgPT09IHVuZGVmaW5lZCAmJiBsaW1pdCA9PT0gMCkgcmV0dXJuIFtdO1xuICAgICAgLy8gSWYgYHNlcGFyYXRvcmAgaXMgbm90IGEgcmVnZXgsIHVzZSBuYXRpdmUgc3BsaXRcbiAgICAgIGlmICghaXNSZWdFeHAoc2VwYXJhdG9yKSkgcmV0dXJuICRzcGxpdC5jYWxsKHN0cmluZywgc2VwYXJhdG9yLCBsaW1pdCk7XG4gICAgICB2YXIgb3V0cHV0ID0gW107XG4gICAgICB2YXIgZmxhZ3MgPSAoc2VwYXJhdG9yLmlnbm9yZUNhc2UgPyAnaScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHNlcGFyYXRvci5tdWx0aWxpbmUgPyAnbScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHNlcGFyYXRvci51bmljb2RlID8gJ3UnIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChzZXBhcmF0b3Iuc3RpY2t5ID8gJ3knIDogJycpO1xuICAgICAgdmFyIGxhc3RMYXN0SW5kZXggPSAwO1xuICAgICAgdmFyIHNwbGl0TGltaXQgPSBsaW1pdCA9PT0gdW5kZWZpbmVkID8gTUFYX1VJTlQzMiA6IGxpbWl0ID4+PiAwO1xuICAgICAgLy8gTWFrZSBgZ2xvYmFsYCBhbmQgYXZvaWQgYGxhc3RJbmRleGAgaXNzdWVzIGJ5IHdvcmtpbmcgd2l0aCBhIGNvcHlcbiAgICAgIHZhciBzZXBhcmF0b3JDb3B5ID0gbmV3IFJlZ0V4cChzZXBhcmF0b3Iuc291cmNlLCBmbGFncyArICdnJyk7XG4gICAgICB2YXIgbWF0Y2gsIGxhc3RJbmRleCwgbGFzdExlbmd0aDtcbiAgICAgIHdoaWxlIChtYXRjaCA9IHJlZ2V4cEV4ZWMuY2FsbChzZXBhcmF0b3JDb3B5LCBzdHJpbmcpKSB7XG4gICAgICAgIGxhc3RJbmRleCA9IHNlcGFyYXRvckNvcHlbTEFTVF9JTkRFWF07XG4gICAgICAgIGlmIChsYXN0SW5kZXggPiBsYXN0TGFzdEluZGV4KSB7XG4gICAgICAgICAgb3V0cHV0LnB1c2goc3RyaW5nLnNsaWNlKGxhc3RMYXN0SW5kZXgsIG1hdGNoLmluZGV4KSk7XG4gICAgICAgICAgaWYgKG1hdGNoW0xFTkdUSF0gPiAxICYmIG1hdGNoLmluZGV4IDwgc3RyaW5nW0xFTkdUSF0pICRwdXNoLmFwcGx5KG91dHB1dCwgbWF0Y2guc2xpY2UoMSkpO1xuICAgICAgICAgIGxhc3RMZW5ndGggPSBtYXRjaFswXVtMRU5HVEhdO1xuICAgICAgICAgIGxhc3RMYXN0SW5kZXggPSBsYXN0SW5kZXg7XG4gICAgICAgICAgaWYgKG91dHB1dFtMRU5HVEhdID49IHNwbGl0TGltaXQpIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzZXBhcmF0b3JDb3B5W0xBU1RfSU5ERVhdID09PSBtYXRjaC5pbmRleCkgc2VwYXJhdG9yQ29weVtMQVNUX0lOREVYXSsrOyAvLyBBdm9pZCBhbiBpbmZpbml0ZSBsb29wXG4gICAgICB9XG4gICAgICBpZiAobGFzdExhc3RJbmRleCA9PT0gc3RyaW5nW0xFTkdUSF0pIHtcbiAgICAgICAgaWYgKGxhc3RMZW5ndGggfHwgIXNlcGFyYXRvckNvcHkudGVzdCgnJykpIG91dHB1dC5wdXNoKCcnKTtcbiAgICAgIH0gZWxzZSBvdXRwdXQucHVzaChzdHJpbmcuc2xpY2UobGFzdExhc3RJbmRleCkpO1xuICAgICAgcmV0dXJuIG91dHB1dFtMRU5HVEhdID4gc3BsaXRMaW1pdCA/IG91dHB1dC5zbGljZSgwLCBzcGxpdExpbWl0KSA6IG91dHB1dDtcbiAgICB9O1xuICAvLyBDaGFrcmEsIFY4XG4gIH0gZWxzZSBpZiAoJzAnWyRTUExJVF0odW5kZWZpbmVkLCAwKVtMRU5HVEhdKSB7XG4gICAgaW50ZXJuYWxTcGxpdCA9IGZ1bmN0aW9uIChzZXBhcmF0b3IsIGxpbWl0KSB7XG4gICAgICByZXR1cm4gc2VwYXJhdG9yID09PSB1bmRlZmluZWQgJiYgbGltaXQgPT09IDAgPyBbXSA6ICRzcGxpdC5jYWxsKHRoaXMsIHNlcGFyYXRvciwgbGltaXQpO1xuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgaW50ZXJuYWxTcGxpdCA9ICRzcGxpdDtcbiAgfVxuXG4gIHJldHVybiBbXG4gICAgLy8gYFN0cmluZy5wcm90b3R5cGUuc3BsaXRgIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUuc3BsaXRcbiAgICBmdW5jdGlvbiBzcGxpdChzZXBhcmF0b3IsIGxpbWl0KSB7XG4gICAgICB2YXIgTyA9IGRlZmluZWQodGhpcyk7XG4gICAgICB2YXIgc3BsaXR0ZXIgPSBzZXBhcmF0b3IgPT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogc2VwYXJhdG9yW1NQTElUXTtcbiAgICAgIHJldHVybiBzcGxpdHRlciAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8gc3BsaXR0ZXIuY2FsbChzZXBhcmF0b3IsIE8sIGxpbWl0KVxuICAgICAgICA6IGludGVybmFsU3BsaXQuY2FsbChTdHJpbmcoTyksIHNlcGFyYXRvciwgbGltaXQpO1xuICAgIH0sXG4gICAgLy8gYFJlZ0V4cC5wcm90b3R5cGVbQEBzcGxpdF1gIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXJlZ2V4cC5wcm90b3R5cGUtQEBzcGxpdFxuICAgIC8vXG4gICAgLy8gTk9URTogVGhpcyBjYW5ub3QgYmUgcHJvcGVybHkgcG9seWZpbGxlZCBpbiBlbmdpbmVzIHRoYXQgZG9uJ3Qgc3VwcG9ydFxuICAgIC8vIHRoZSAneScgZmxhZy5cbiAgICBmdW5jdGlvbiAocmVnZXhwLCBsaW1pdCkge1xuICAgICAgdmFyIHJlcyA9IG1heWJlQ2FsbE5hdGl2ZShpbnRlcm5hbFNwbGl0LCByZWdleHAsIHRoaXMsIGxpbWl0LCBpbnRlcm5hbFNwbGl0ICE9PSAkc3BsaXQpO1xuICAgICAgaWYgKHJlcy5kb25lKSByZXR1cm4gcmVzLnZhbHVlO1xuXG4gICAgICB2YXIgcnggPSBhbk9iamVjdChyZWdleHApO1xuICAgICAgdmFyIFMgPSBTdHJpbmcodGhpcyk7XG4gICAgICB2YXIgQyA9IHNwZWNpZXNDb25zdHJ1Y3RvcihyeCwgUmVnRXhwKTtcblxuICAgICAgdmFyIHVuaWNvZGVNYXRjaGluZyA9IHJ4LnVuaWNvZGU7XG4gICAgICB2YXIgZmxhZ3MgPSAocnguaWdub3JlQ2FzZSA/ICdpJyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAocngubXVsdGlsaW5lID8gJ20nIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChyeC51bmljb2RlID8gJ3UnIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChTVVBQT1JUU19ZID8gJ3knIDogJ2cnKTtcblxuICAgICAgLy8gXig/ICsgcnggKyApIGlzIG5lZWRlZCwgaW4gY29tYmluYXRpb24gd2l0aCBzb21lIFMgc2xpY2luZywgdG9cbiAgICAgIC8vIHNpbXVsYXRlIHRoZSAneScgZmxhZy5cbiAgICAgIHZhciBzcGxpdHRlciA9IG5ldyBDKFNVUFBPUlRTX1kgPyByeCA6ICdeKD86JyArIHJ4LnNvdXJjZSArICcpJywgZmxhZ3MpO1xuICAgICAgdmFyIGxpbSA9IGxpbWl0ID09PSB1bmRlZmluZWQgPyBNQVhfVUlOVDMyIDogbGltaXQgPj4+IDA7XG4gICAgICBpZiAobGltID09PSAwKSByZXR1cm4gW107XG4gICAgICBpZiAoUy5sZW5ndGggPT09IDApIHJldHVybiBjYWxsUmVnRXhwRXhlYyhzcGxpdHRlciwgUykgPT09IG51bGwgPyBbU10gOiBbXTtcbiAgICAgIHZhciBwID0gMDtcbiAgICAgIHZhciBxID0gMDtcbiAgICAgIHZhciBBID0gW107XG4gICAgICB3aGlsZSAocSA8IFMubGVuZ3RoKSB7XG4gICAgICAgIHNwbGl0dGVyLmxhc3RJbmRleCA9IFNVUFBPUlRTX1kgPyBxIDogMDtcbiAgICAgICAgdmFyIHogPSBjYWxsUmVnRXhwRXhlYyhzcGxpdHRlciwgU1VQUE9SVFNfWSA/IFMgOiBTLnNsaWNlKHEpKTtcbiAgICAgICAgdmFyIGU7XG4gICAgICAgIGlmIChcbiAgICAgICAgICB6ID09PSBudWxsIHx8XG4gICAgICAgICAgKGUgPSAkbWluKHRvTGVuZ3RoKHNwbGl0dGVyLmxhc3RJbmRleCArIChTVVBQT1JUU19ZID8gMCA6IHEpKSwgUy5sZW5ndGgpKSA9PT0gcFxuICAgICAgICApIHtcbiAgICAgICAgICBxID0gYWR2YW5jZVN0cmluZ0luZGV4KFMsIHEsIHVuaWNvZGVNYXRjaGluZyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgQS5wdXNoKFMuc2xpY2UocCwgcSkpO1xuICAgICAgICAgIGlmIChBLmxlbmd0aCA9PT0gbGltKSByZXR1cm4gQTtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8PSB6Lmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICAgICAgQS5wdXNoKHpbaV0pO1xuICAgICAgICAgICAgaWYgKEEubGVuZ3RoID09PSBsaW0pIHJldHVybiBBO1xuICAgICAgICAgIH1cbiAgICAgICAgICBxID0gcCA9IGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIEEucHVzaChTLnNsaWNlKHApKTtcbiAgICAgIHJldHVybiBBO1xuICAgIH1cbiAgXTtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///242\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar LIBRARY = __webpack_require__(29);\nvar global = __webpack_require__(2);\nvar ctx = __webpack_require__(19);\nvar classof = __webpack_require__(44);\nvar $export = __webpack_require__(0);\nvar isObject = __webpack_require__(4);\nvar aFunction = __webpack_require__(10);\nvar anInstance = __webpack_require__(39);\nvar forOf = __webpack_require__(40);\nvar speciesConstructor = __webpack_require__(51);\nvar task = __webpack_require__(89).set;\nvar microtask = __webpack_require__(90)();\nvar newPromiseCapabilityModule = __webpack_require__(91);\nvar perform = __webpack_require__(115);\nvar userAgent = __webpack_require__(60);\nvar promiseResolve = __webpack_require__(116);\nvar PROMISE = 'Promise';\nvar TypeError = global.TypeError;\nvar process = global.process;\nvar versions = process && process.versions;\nvar v8 = versions && versions.v8 || '';\nvar $Promise = global[PROMISE];\nvar isNode = classof(process) == 'process';\nvar empty = function () { /* empty */ };\nvar Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper;\nvar newPromiseCapability = newGenericPromiseCapability = newPromiseCapabilityModule.f;\n\nvar USE_NATIVE = !!function () {\n try {\n // correct subclassing with @@species support\n var promise = $Promise.resolve(1);\n var FakePromise = (promise.constructor = {})[__webpack_require__(5)('species')] = function (exec) {\n exec(empty, empty);\n };\n // unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n return (isNode || typeof PromiseRejectionEvent == 'function')\n && promise.then(empty) instanceof FakePromise\n // v8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables\n // https://bugs.chromium.org/p/chromium/issues/detail?id=830565\n // we can't detect it synchronously, so just check versions\n && v8.indexOf('6.6') !== 0\n && userAgent.indexOf('Chrome/66') === -1;\n } catch (e) { /* empty */ }\n}();\n\n// helpers\nvar isThenable = function (it) {\n var then;\n return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\nvar notify = function (promise, isReject) {\n if (promise._n) return;\n promise._n = true;\n var chain = promise._c;\n microtask(function () {\n var value = promise._v;\n var ok = promise._s == 1;\n var i = 0;\n var run = function (reaction) {\n var handler = ok ? reaction.ok : reaction.fail;\n var resolve = reaction.resolve;\n var reject = reaction.reject;\n var domain = reaction.domain;\n var result, then, exited;\n try {\n if (handler) {\n if (!ok) {\n if (promise._h == 2) onHandleUnhandled(promise);\n promise._h = 1;\n }\n if (handler === true) result = value;\n else {\n if (domain) domain.enter();\n result = handler(value); // may throw\n if (domain) {\n domain.exit();\n exited = true;\n }\n }\n if (result === reaction.promise) {\n reject(TypeError('Promise-chain cycle'));\n } else if (then = isThenable(result)) {\n then.call(result, resolve, reject);\n } else resolve(result);\n } else reject(value);\n } catch (e) {\n if (domain && !exited) domain.exit();\n reject(e);\n }\n };\n while (chain.length > i) run(chain[i++]); // variable length - can't use forEach\n promise._c = [];\n promise._n = false;\n if (isReject && !promise._h) onUnhandled(promise);\n });\n};\nvar onUnhandled = function (promise) {\n task.call(global, function () {\n var value = promise._v;\n var unhandled = isUnhandled(promise);\n var result, handler, console;\n if (unhandled) {\n result = perform(function () {\n if (isNode) {\n process.emit('unhandledRejection', value, promise);\n } else if (handler = global.onunhandledrejection) {\n handler({ promise: promise, reason: value });\n } else if ((console = global.console) && console.error) {\n console.error('Unhandled promise rejection', value);\n }\n });\n // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n promise._h = isNode || isUnhandled(promise) ? 2 : 1;\n } promise._a = undefined;\n if (unhandled && result.e) throw result.v;\n });\n};\nvar isUnhandled = function (promise) {\n return promise._h !== 1 && (promise._a || promise._c).length === 0;\n};\nvar onHandleUnhandled = function (promise) {\n task.call(global, function () {\n var handler;\n if (isNode) {\n process.emit('rejectionHandled', promise);\n } else if (handler = global.onrejectionhandled) {\n handler({ promise: promise, reason: promise._v });\n }\n });\n};\nvar $reject = function (value) {\n var promise = this;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n promise._v = value;\n promise._s = 2;\n if (!promise._a) promise._a = promise._c.slice();\n notify(promise, true);\n};\nvar $resolve = function (value) {\n var promise = this;\n var then;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n try {\n if (promise === value) throw TypeError(\"Promise can't be resolved itself\");\n if (then = isThenable(value)) {\n microtask(function () {\n var wrapper = { _w: promise, _d: false }; // wrap\n try {\n then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));\n } catch (e) {\n $reject.call(wrapper, e);\n }\n });\n } else {\n promise._v = value;\n promise._s = 1;\n notify(promise, false);\n }\n } catch (e) {\n $reject.call({ _w: promise, _d: false }, e); // wrap\n }\n};\n\n// constructor polyfill\nif (!USE_NATIVE) {\n // 25.4.3.1 Promise(executor)\n $Promise = function Promise(executor) {\n anInstance(this, $Promise, PROMISE, '_h');\n aFunction(executor);\n Internal.call(this);\n try {\n executor(ctx($resolve, this, 1), ctx($reject, this, 1));\n } catch (err) {\n $reject.call(this, err);\n }\n };\n // eslint-disable-next-line no-unused-vars\n Internal = function Promise(executor) {\n this._c = []; // <- awaiting reactions\n this._a = undefined; // <- checked in isUnhandled reactions\n this._s = 0; // <- state\n this._d = false; // <- done\n this._v = undefined; // <- value\n this._h = 0; // <- rejection state, 0 - default, 1 - handled, 2 - unhandled\n this._n = false; // <- notify\n };\n Internal.prototype = __webpack_require__(41)($Promise.prototype, {\n // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)\n then: function then(onFulfilled, onRejected) {\n var reaction = newPromiseCapability(speciesConstructor(this, $Promise));\n reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\n reaction.fail = typeof onRejected == 'function' && onRejected;\n reaction.domain = isNode ? process.domain : undefined;\n this._c.push(reaction);\n if (this._a) this._a.push(reaction);\n if (this._s) notify(this, false);\n return reaction.promise;\n },\n // 25.4.5.1 Promise.prototype.catch(onRejected)\n 'catch': function (onRejected) {\n return this.then(undefined, onRejected);\n }\n });\n OwnPromiseCapability = function () {\n var promise = new Internal();\n this.promise = promise;\n this.resolve = ctx($resolve, promise, 1);\n this.reject = ctx($reject, promise, 1);\n };\n newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n return C === $Promise || C === Wrapper\n ? new OwnPromiseCapability(C)\n : newGenericPromiseCapability(C);\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Promise: $Promise });\n__webpack_require__(43)($Promise, PROMISE);\n__webpack_require__(38)(PROMISE);\nWrapper = __webpack_require__(18)[PROMISE];\n\n// statics\n$export($export.S + $export.F * !USE_NATIVE, PROMISE, {\n // 25.4.4.5 Promise.reject(r)\n reject: function reject(r) {\n var capability = newPromiseCapability(this);\n var $$reject = capability.reject;\n $$reject(r);\n return capability.promise;\n }\n});\n$export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {\n // 25.4.4.6 Promise.resolve(x)\n resolve: function resolve(x) {\n return promiseResolve(LIBRARY && this === Wrapper ? $Promise : this, x);\n }\n});\n$export($export.S + $export.F * !(USE_NATIVE && __webpack_require__(57)(function (iter) {\n $Promise.all(iter)['catch'](empty);\n})), PROMISE, {\n // 25.4.4.1 Promise.all(iterable)\n all: function all(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var values = [];\n var index = 0;\n var remaining = 1;\n forOf(iterable, false, function (promise) {\n var $index = index++;\n var alreadyCalled = false;\n values.push(undefined);\n remaining++;\n C.resolve(promise).then(function (value) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[$index] = value;\n --remaining || resolve(values);\n }, reject);\n });\n --remaining || resolve(values);\n });\n if (result.e) reject(result.v);\n return capability.promise;\n },\n // 25.4.4.4 Promise.race(iterable)\n race: function race(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var reject = capability.reject;\n var result = perform(function () {\n forOf(iterable, false, function (promise) {\n C.resolve(promise).then(capability.resolve, reject);\n });\n });\n if (result.e) reject(result.v);\n return capability.promise;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucHJvbWlzZS5qcz81NTFjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsY0FBYyxtQkFBTyxDQUFDLEVBQVk7QUFDbEMsYUFBYSxtQkFBTyxDQUFDLENBQVc7QUFDaEMsVUFBVSxtQkFBTyxDQUFDLEVBQVE7QUFDMUIsY0FBYyxtQkFBTyxDQUFDLEVBQVk7QUFDbEMsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2QyxpQkFBaUIsbUJBQU8sQ0FBQyxFQUFnQjtBQUN6QyxZQUFZLG1CQUFPLENBQUMsRUFBVztBQUMvQix5QkFBeUIsbUJBQU8sQ0FBQyxFQUF3QjtBQUN6RCxXQUFXLG1CQUFPLENBQUMsRUFBUztBQUM1QixnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFjO0FBQ3RDLGlDQUFpQyxtQkFBTyxDQUFDLEVBQTJCO0FBQ3BFLGNBQWMsbUJBQU8sQ0FBQyxHQUFZO0FBQ2xDLGdCQUFnQixtQkFBTyxDQUFDLEVBQWU7QUFDdkMscUJBQXFCLG1CQUFPLENBQUMsR0FBb0I7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtDQUErQyxFQUFFLG1CQUFPLENBQUMsQ0FBUTtBQUNqRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUcsWUFBWTtBQUNmLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0M7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQSxXQUFXO0FBQ1gsU0FBUztBQUNULE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZDQUE2QztBQUM3QztBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsbUJBQW1CLGtDQUFrQztBQUNyRCxTQUFTO0FBQ1Q7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxlQUFlLHVDQUF1QztBQUN0RDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLDBCQUEwQjtBQUNqRDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILGtCQUFrQix5QkFBeUIsS0FBSztBQUNoRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCLHdCQUF3QjtBQUN4QixnQkFBZ0I7QUFDaEIsb0JBQW9CO0FBQ3BCLHdCQUF3QjtBQUN4QixnQkFBZ0I7QUFDaEIsb0JBQW9CO0FBQ3BCO0FBQ0EsdUJBQXVCLG1CQUFPLENBQUMsRUFBaUI7QUFDaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDBEQUEwRCxvQkFBb0I7QUFDOUUsbUJBQU8sQ0FBQyxFQUFzQjtBQUM5QixtQkFBTyxDQUFDLEVBQWdCO0FBQ3hCLFVBQVUsbUJBQU8sQ0FBQyxFQUFTOztBQUUzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCxnREFBZ0QsbUJBQU8sQ0FBQyxFQUFnQjtBQUN4RTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULE9BQU87QUFDUDtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjQzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIExJQlJBUlkgPSByZXF1aXJlKCcuL19saWJyYXJ5Jyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4vX2NsYXNzb2YnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG52YXIgZm9yT2YgPSByZXF1aXJlKCcuL19mb3Itb2YnKTtcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuL19zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG52YXIgdGFzayA9IHJlcXVpcmUoJy4vX3Rhc2snKS5zZXQ7XG52YXIgbWljcm90YXNrID0gcmVxdWlyZSgnLi9fbWljcm90YXNrJykoKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZSA9IHJlcXVpcmUoJy4vX25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcbnZhciBwZXJmb3JtID0gcmVxdWlyZSgnLi9fcGVyZm9ybScpO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4vX3VzZXItYWdlbnQnKTtcbnZhciBwcm9taXNlUmVzb2x2ZSA9IHJlcXVpcmUoJy4vX3Byb21pc2UtcmVzb2x2ZScpO1xudmFyIFBST01JU0UgPSAnUHJvbWlzZSc7XG52YXIgVHlwZUVycm9yID0gZ2xvYmFsLlR5cGVFcnJvcjtcbnZhciBwcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3M7XG52YXIgdmVyc2lvbnMgPSBwcm9jZXNzICYmIHByb2Nlc3MudmVyc2lvbnM7XG52YXIgdjggPSB2ZXJzaW9ucyAmJiB2ZXJzaW9ucy52OCB8fCAnJztcbnZhciAkUHJvbWlzZSA9IGdsb2JhbFtQUk9NSVNFXTtcbnZhciBpc05vZGUgPSBjbGFzc29mKHByb2Nlc3MpID09ICdwcm9jZXNzJztcbnZhciBlbXB0eSA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcbnZhciBJbnRlcm5hbCwgbmV3R2VuZXJpY1Byb21pc2VDYXBhYmlsaXR5LCBPd25Qcm9taXNlQ2FwYWJpbGl0eSwgV3JhcHBlcjtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IG5ld0dlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmY7XG5cbnZhciBVU0VfTkFUSVZFID0gISFmdW5jdGlvbiAoKSB7XG4gIHRyeSB7XG4gICAgLy8gY29ycmVjdCBzdWJjbGFzc2luZyB3aXRoIEBAc3BlY2llcyBzdXBwb3J0XG4gICAgdmFyIHByb21pc2UgPSAkUHJvbWlzZS5yZXNvbHZlKDEpO1xuICAgIHZhciBGYWtlUHJvbWlzZSA9IChwcm9taXNlLmNvbnN0cnVjdG9yID0ge30pW3JlcXVpcmUoJy4vX3drcycpKCdzcGVjaWVzJyldID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgICAgIGV4ZWMoZW1wdHksIGVtcHR5KTtcbiAgICB9O1xuICAgIC8vIHVuaGFuZGxlZCByZWplY3Rpb25zIHRyYWNraW5nIHN1cHBvcnQsIE5vZGVKUyBQcm9taXNlIHdpdGhvdXQgaXQgZmFpbHMgQEBzcGVjaWVzIHRlc3RcbiAgICByZXR1cm4gKGlzTm9kZSB8fCB0eXBlb2YgUHJvbWlzZVJlamVjdGlvbkV2ZW50ID09ICdmdW5jdGlvbicpXG4gICAgICAmJiBwcm9taXNlLnRoZW4oZW1wdHkpIGluc3RhbmNlb2YgRmFrZVByb21pc2VcbiAgICAgIC8vIHY4IDYuNiAoTm9kZSAxMCBhbmQgQ2hyb21lIDY2KSBoYXZlIGEgYnVnIHdpdGggcmVzb2x2aW5nIGN1c3RvbSB0aGVuYWJsZXNcbiAgICAgIC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTgzMDU2NVxuICAgICAgLy8gd2UgY2FuJ3QgZGV0ZWN0IGl0IHN5bmNocm9ub3VzbHksIHNvIGp1c3QgY2hlY2sgdmVyc2lvbnNcbiAgICAgICYmIHY4LmluZGV4T2YoJzYuNicpICE9PSAwXG4gICAgICAmJiB1c2VyQWdlbnQuaW5kZXhPZignQ2hyb21lLzY2JykgPT09IC0xO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbn0oKTtcblxuLy8gaGVscGVyc1xudmFyIGlzVGhlbmFibGUgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIHRoZW47XG4gIHJldHVybiBpc09iamVjdChpdCkgJiYgdHlwZW9mICh0aGVuID0gaXQudGhlbikgPT0gJ2Z1bmN0aW9uJyA/IHRoZW4gOiBmYWxzZTtcbn07XG52YXIgbm90aWZ5ID0gZnVuY3Rpb24gKHByb21pc2UsIGlzUmVqZWN0KSB7XG4gIGlmIChwcm9taXNlLl9uKSByZXR1cm47XG4gIHByb21pc2UuX24gPSB0cnVlO1xuICB2YXIgY2hhaW4gPSBwcm9taXNlLl9jO1xuICBtaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgIHZhciB2YWx1ZSA9IHByb21pc2UuX3Y7XG4gICAgdmFyIG9rID0gcHJvbWlzZS5fcyA9PSAxO1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIgcnVuID0gZnVuY3Rpb24gKHJlYWN0aW9uKSB7XG4gICAgICB2YXIgaGFuZGxlciA9IG9rID8gcmVhY3Rpb24ub2sgOiByZWFjdGlvbi5mYWlsO1xuICAgICAgdmFyIHJlc29sdmUgPSByZWFjdGlvbi5yZXNvbHZlO1xuICAgICAgdmFyIHJlamVjdCA9IHJlYWN0aW9uLnJlamVjdDtcbiAgICAgIHZhciBkb21haW4gPSByZWFjdGlvbi5kb21haW47XG4gICAgICB2YXIgcmVzdWx0LCB0aGVuLCBleGl0ZWQ7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoaGFuZGxlcikge1xuICAgICAgICAgIGlmICghb2spIHtcbiAgICAgICAgICAgIGlmIChwcm9taXNlLl9oID09IDIpIG9uSGFuZGxlVW5oYW5kbGVkKHByb21pc2UpO1xuICAgICAgICAgICAgcHJvbWlzZS5faCA9IDE7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChoYW5kbGVyID09PSB0cnVlKSByZXN1bHQgPSB2YWx1ZTtcbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChkb21haW4pIGRvbWFpbi5lbnRlcigpO1xuICAgICAgICAgICAgcmVzdWx0ID0gaGFuZGxlcih2YWx1ZSk7IC8vIG1heSB0aHJvd1xuICAgICAgICAgICAgaWYgKGRvbWFpbikge1xuICAgICAgICAgICAgICBkb21haW4uZXhpdCgpO1xuICAgICAgICAgICAgICBleGl0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocmVzdWx0ID09PSByZWFjdGlvbi5wcm9taXNlKSB7XG4gICAgICAgICAgICByZWplY3QoVHlwZUVycm9yKCdQcm9taXNlLWNoYWluIGN5Y2xlJykpO1xuICAgICAgICAgIH0gZWxzZSBpZiAodGhlbiA9IGlzVGhlbmFibGUocmVzdWx0KSkge1xuICAgICAgICAgICAgdGhlbi5jYWxsKHJlc3VsdCwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICB9IGVsc2UgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICB9IGVsc2UgcmVqZWN0KHZhbHVlKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKGRvbWFpbiAmJiAhZXhpdGVkKSBkb21haW4uZXhpdCgpO1xuICAgICAgICByZWplY3QoZSk7XG4gICAgICB9XG4gICAgfTtcbiAgICB3aGlsZSAoY2hhaW4ubGVuZ3RoID4gaSkgcnVuKGNoYWluW2krK10pOyAvLyB2YXJpYWJsZSBsZW5ndGggLSBjYW4ndCB1c2UgZm9yRWFjaFxuICAgIHByb21pc2UuX2MgPSBbXTtcbiAgICBwcm9taXNlLl9uID0gZmFsc2U7XG4gICAgaWYgKGlzUmVqZWN0ICYmICFwcm9taXNlLl9oKSBvblVuaGFuZGxlZChwcm9taXNlKTtcbiAgfSk7XG59O1xudmFyIG9uVW5oYW5kbGVkID0gZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgdGFzay5jYWxsKGdsb2JhbCwgZnVuY3Rpb24gKCkge1xuICAgIHZhciB2YWx1ZSA9IHByb21pc2UuX3Y7XG4gICAgdmFyIHVuaGFuZGxlZCA9IGlzVW5oYW5kbGVkKHByb21pc2UpO1xuICAgIHZhciByZXN1bHQsIGhhbmRsZXIsIGNvbnNvbGU7XG4gICAgaWYgKHVuaGFuZGxlZCkge1xuICAgICAgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChpc05vZGUpIHtcbiAgICAgICAgICBwcm9jZXNzLmVtaXQoJ3VuaGFuZGxlZFJlamVjdGlvbicsIHZhbHVlLCBwcm9taXNlKTtcbiAgICAgICAgfSBlbHNlIGlmIChoYW5kbGVyID0gZ2xvYmFsLm9udW5oYW5kbGVkcmVqZWN0aW9uKSB7XG4gICAgICAgICAgaGFuZGxlcih7IHByb21pc2U6IHByb21pc2UsIHJlYXNvbjogdmFsdWUgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoKGNvbnNvbGUgPSBnbG9iYWwuY29uc29sZSkgJiYgY29uc29sZS5lcnJvcikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1VuaGFuZGxlZCBwcm9taXNlIHJlamVjdGlvbicsIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICAvLyBCcm93c2VycyBzaG91bGQgbm90IHRyaWdnZXIgYHJlamVjdGlvbkhhbmRsZWRgIGV2ZW50IGlmIGl0IHdhcyBoYW5kbGVkIGhlcmUsIE5vZGVKUyAtIHNob3VsZFxuICAgICAgcHJvbWlzZS5faCA9IGlzTm9kZSB8fCBpc1VuaGFuZGxlZChwcm9taXNlKSA/IDIgOiAxO1xuICAgIH0gcHJvbWlzZS5fYSA9IHVuZGVmaW5lZDtcbiAgICBpZiAodW5oYW5kbGVkICYmIHJlc3VsdC5lKSB0aHJvdyByZXN1bHQudjtcbiAgfSk7XG59O1xudmFyIGlzVW5oYW5kbGVkID0gZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgcmV0dXJuIHByb21pc2UuX2ggIT09IDEgJiYgKHByb21pc2UuX2EgfHwgcHJvbWlzZS5fYykubGVuZ3RoID09PSAwO1xufTtcbnZhciBvbkhhbmRsZVVuaGFuZGxlZCA9IGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gIHRhc2suY2FsbChnbG9iYWwsIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgaGFuZGxlcjtcbiAgICBpZiAoaXNOb2RlKSB7XG4gICAgICBwcm9jZXNzLmVtaXQoJ3JlamVjdGlvbkhhbmRsZWQnLCBwcm9taXNlKTtcbiAgICB9IGVsc2UgaWYgKGhhbmRsZXIgPSBnbG9iYWwub25yZWplY3Rpb25oYW5kbGVkKSB7XG4gICAgICBoYW5kbGVyKHsgcHJvbWlzZTogcHJvbWlzZSwgcmVhc29uOiBwcm9taXNlLl92IH0pO1xuICAgIH1cbiAgfSk7XG59O1xudmFyICRyZWplY3QgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgdmFyIHByb21pc2UgPSB0aGlzO1xuICBpZiAocHJvbWlzZS5fZCkgcmV0dXJuO1xuICBwcm9taXNlLl9kID0gdHJ1ZTtcbiAgcHJvbWlzZSA9IHByb21pc2UuX3cgfHwgcHJvbWlzZTsgLy8gdW53cmFwXG4gIHByb21pc2UuX3YgPSB2YWx1ZTtcbiAgcHJvbWlzZS5fcyA9IDI7XG4gIGlmICghcHJvbWlzZS5fYSkgcHJvbWlzZS5fYSA9IHByb21pc2UuX2Muc2xpY2UoKTtcbiAgbm90aWZ5KHByb21pc2UsIHRydWUpO1xufTtcbnZhciAkcmVzb2x2ZSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICB2YXIgcHJvbWlzZSA9IHRoaXM7XG4gIHZhciB0aGVuO1xuICBpZiAocHJvbWlzZS5fZCkgcmV0dXJuO1xuICBwcm9taXNlLl9kID0gdHJ1ZTtcbiAgcHJvbWlzZSA9IHByb21pc2UuX3cgfHwgcHJvbWlzZTsgLy8gdW53cmFwXG4gIHRyeSB7XG4gICAgaWYgKHByb21pc2UgPT09IHZhbHVlKSB0aHJvdyBUeXBlRXJyb3IoXCJQcm9taXNlIGNhbid0IGJlIHJlc29sdmVkIGl0c2VsZlwiKTtcbiAgICBpZiAodGhlbiA9IGlzVGhlbmFibGUodmFsdWUpKSB7XG4gICAgICBtaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgd3JhcHBlciA9IHsgX3c6IHByb21pc2UsIF9kOiBmYWxzZSB9OyAvLyB3cmFwXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdGhlbi5jYWxsKHZhbHVlLCBjdHgoJHJlc29sdmUsIHdyYXBwZXIsIDEpLCBjdHgoJHJlamVjdCwgd3JhcHBlciwgMSkpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgJHJlamVjdC5jYWxsKHdyYXBwZXIsIGUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJvbWlzZS5fdiA9IHZhbHVlO1xuICAgICAgcHJvbWlzZS5fcyA9IDE7XG4gICAgICBub3RpZnkocHJvbWlzZSwgZmFsc2UpO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgICRyZWplY3QuY2FsbCh7IF93OiBwcm9taXNlLCBfZDogZmFsc2UgfSwgZSk7IC8vIHdyYXBcbiAgfVxufTtcblxuLy8gY29uc3RydWN0b3IgcG9seWZpbGxcbmlmICghVVNFX05BVElWRSkge1xuICAvLyAyNS40LjMuMSBQcm9taXNlKGV4ZWN1dG9yKVxuICAkUHJvbWlzZSA9IGZ1bmN0aW9uIFByb21pc2UoZXhlY3V0b3IpIHtcbiAgICBhbkluc3RhbmNlKHRoaXMsICRQcm9taXNlLCBQUk9NSVNFLCAnX2gnKTtcbiAgICBhRnVuY3Rpb24oZXhlY3V0b3IpO1xuICAgIEludGVybmFsLmNhbGwodGhpcyk7XG4gICAgdHJ5IHtcbiAgICAgIGV4ZWN1dG9yKGN0eCgkcmVzb2x2ZSwgdGhpcywgMSksIGN0eCgkcmVqZWN0LCB0aGlzLCAxKSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAkcmVqZWN0LmNhbGwodGhpcywgZXJyKTtcbiAgICB9XG4gIH07XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuICBJbnRlcm5hbCA9IGZ1bmN0aW9uIFByb21pc2UoZXhlY3V0b3IpIHtcbiAgICB0aGlzLl9jID0gW107ICAgICAgICAgICAgIC8vIDwtIGF3YWl0aW5nIHJlYWN0aW9uc1xuICAgIHRoaXMuX2EgPSB1bmRlZmluZWQ7ICAgICAgLy8gPC0gY2hlY2tlZCBpbiBpc1VuaGFuZGxlZCByZWFjdGlvbnNcbiAgICB0aGlzLl9zID0gMDsgICAgICAgICAgICAgIC8vIDwtIHN0YXRlXG4gICAgdGhpcy5fZCA9IGZhbHNlOyAgICAgICAgICAvLyA8LSBkb25lXG4gICAgdGhpcy5fdiA9IHVuZGVmaW5lZDsgICAgICAvLyA8LSB2YWx1ZVxuICAgIHRoaXMuX2ggPSAwOyAgICAgICAgICAgICAgLy8gPC0gcmVqZWN0aW9uIHN0YXRlLCAwIC0gZGVmYXVsdCwgMSAtIGhhbmRsZWQsIDIgLSB1bmhhbmRsZWRcbiAgICB0aGlzLl9uID0gZmFsc2U7ICAgICAgICAgIC8vIDwtIG5vdGlmeVxuICB9O1xuICBJbnRlcm5hbC5wcm90b3R5cGUgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKSgkUHJvbWlzZS5wcm90b3R5cGUsIHtcbiAgICAvLyAyNS40LjUuMyBQcm9taXNlLnByb3RvdHlwZS50aGVuKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKVxuICAgIHRoZW46IGZ1bmN0aW9uIHRoZW4ob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpIHtcbiAgICAgIHZhciByZWFjdGlvbiA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KHNwZWNpZXNDb25zdHJ1Y3Rvcih0aGlzLCAkUHJvbWlzZSkpO1xuICAgICAgcmVhY3Rpb24ub2sgPSB0eXBlb2Ygb25GdWxmaWxsZWQgPT0gJ2Z1bmN0aW9uJyA/IG9uRnVsZmlsbGVkIDogdHJ1ZTtcbiAgICAgIHJlYWN0aW9uLmZhaWwgPSB0eXBlb2Ygb25SZWplY3RlZCA9PSAnZnVuY3Rpb24nICYmIG9uUmVqZWN0ZWQ7XG4gICAgICByZWFjdGlvbi5kb21haW4gPSBpc05vZGUgPyBwcm9jZXNzLmRvbWFpbiA6IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX2MucHVzaChyZWFjdGlvbik7XG4gICAgICBpZiAodGhpcy5fYSkgdGhpcy5fYS5wdXNoKHJlYWN0aW9uKTtcbiAgICAgIGlmICh0aGlzLl9zKSBub3RpZnkodGhpcywgZmFsc2UpO1xuICAgICAgcmV0dXJuIHJlYWN0aW9uLnByb21pc2U7XG4gICAgfSxcbiAgICAvLyAyNS40LjUuMSBQcm9taXNlLnByb3RvdHlwZS5jYXRjaChvblJlamVjdGVkKVxuICAgICdjYXRjaCc6IGZ1bmN0aW9uIChvblJlamVjdGVkKSB7XG4gICAgICByZXR1cm4gdGhpcy50aGVuKHVuZGVmaW5lZCwgb25SZWplY3RlZCk7XG4gICAgfVxuICB9KTtcbiAgT3duUHJvbWlzZUNhcGFiaWxpdHkgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHByb21pc2UgPSBuZXcgSW50ZXJuYWwoKTtcbiAgICB0aGlzLnByb21pc2UgPSBwcm9taXNlO1xuICAgIHRoaXMucmVzb2x2ZSA9IGN0eCgkcmVzb2x2ZSwgcHJvbWlzZSwgMSk7XG4gICAgdGhpcy5yZWplY3QgPSBjdHgoJHJlamVjdCwgcHJvbWlzZSwgMSk7XG4gIH07XG4gIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmYgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IGZ1bmN0aW9uIChDKSB7XG4gICAgcmV0dXJuIEMgPT09ICRQcm9taXNlIHx8IEMgPT09IFdyYXBwZXJcbiAgICAgID8gbmV3IE93blByb21pc2VDYXBhYmlsaXR5KEMpXG4gICAgICA6IG5ld0dlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eShDKTtcbiAgfTtcbn1cblxuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LlcgKyAkZXhwb3J0LkYgKiAhVVNFX05BVElWRSwgeyBQcm9taXNlOiAkUHJvbWlzZSB9KTtcbnJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJykoJFByb21pc2UsIFBST01JU0UpO1xucmVxdWlyZSgnLi9fc2V0LXNwZWNpZXMnKShQUk9NSVNFKTtcbldyYXBwZXIgPSByZXF1aXJlKCcuL19jb3JlJylbUFJPTUlTRV07XG5cbi8vIHN0YXRpY3NcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsIFBST01JU0UsIHtcbiAgLy8gMjUuNC40LjUgUHJvbWlzZS5yZWplY3QocilcbiAgcmVqZWN0OiBmdW5jdGlvbiByZWplY3Qocikge1xuICAgIHZhciBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkodGhpcyk7XG4gICAgdmFyICQkcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgJCRyZWplY3Qocik7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIChMSUJSQVJZIHx8ICFVU0VfTkFUSVZFKSwgUFJPTUlTRSwge1xuICAvLyAyNS40LjQuNiBQcm9taXNlLnJlc29sdmUoeClcbiAgcmVzb2x2ZTogZnVuY3Rpb24gcmVzb2x2ZSh4KSB7XG4gICAgcmV0dXJuIHByb21pc2VSZXNvbHZlKExJQlJBUlkgJiYgdGhpcyA9PT0gV3JhcHBlciA/ICRQcm9taXNlIDogdGhpcywgeCk7XG4gIH1cbn0pO1xuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhKFVTRV9OQVRJVkUgJiYgcmVxdWlyZSgnLi9faXRlci1kZXRlY3QnKShmdW5jdGlvbiAoaXRlcikge1xuICAkUHJvbWlzZS5hbGwoaXRlcilbJ2NhdGNoJ10oZW1wdHkpO1xufSkpLCBQUk9NSVNFLCB7XG4gIC8vIDI1LjQuNC4xIFByb21pc2UuYWxsKGl0ZXJhYmxlKVxuICBhbGw6IGZ1bmN0aW9uIGFsbChpdGVyYWJsZSkge1xuICAgIHZhciBDID0gdGhpcztcbiAgICB2YXIgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KEMpO1xuICAgIHZhciByZXNvbHZlID0gY2FwYWJpbGl0eS5yZXNvbHZlO1xuICAgIHZhciByZWplY3QgPSBjYXBhYmlsaXR5LnJlamVjdDtcbiAgICB2YXIgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgdmFsdWVzID0gW107XG4gICAgICB2YXIgaW5kZXggPSAwO1xuICAgICAgdmFyIHJlbWFpbmluZyA9IDE7XG4gICAgICBmb3JPZihpdGVyYWJsZSwgZmFsc2UsIGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gICAgICAgIHZhciAkaW5kZXggPSBpbmRleCsrO1xuICAgICAgICB2YXIgYWxyZWFkeUNhbGxlZCA9IGZhbHNlO1xuICAgICAgICB2YWx1ZXMucHVzaCh1bmRlZmluZWQpO1xuICAgICAgICByZW1haW5pbmcrKztcbiAgICAgICAgQy5yZXNvbHZlKHByb21pc2UpLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgaWYgKGFscmVhZHlDYWxsZWQpIHJldHVybjtcbiAgICAgICAgICBhbHJlYWR5Q2FsbGVkID0gdHJ1ZTtcbiAgICAgICAgICB2YWx1ZXNbJGluZGV4XSA9IHZhbHVlO1xuICAgICAgICAgIC0tcmVtYWluaW5nIHx8IHJlc29sdmUodmFsdWVzKTtcbiAgICAgICAgfSwgcmVqZWN0KTtcbiAgICAgIH0pO1xuICAgICAgLS1yZW1haW5pbmcgfHwgcmVzb2x2ZSh2YWx1ZXMpO1xuICAgIH0pO1xuICAgIGlmIChyZXN1bHQuZSkgcmVqZWN0KHJlc3VsdC52KTtcbiAgICByZXR1cm4gY2FwYWJpbGl0eS5wcm9taXNlO1xuICB9LFxuICAvLyAyNS40LjQuNCBQcm9taXNlLnJhY2UoaXRlcmFibGUpXG4gIHJhY2U6IGZ1bmN0aW9uIHJhY2UoaXRlcmFibGUpIHtcbiAgICB2YXIgQyA9IHRoaXM7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eShDKTtcbiAgICB2YXIgcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgdmFyIHJlc3VsdCA9IHBlcmZvcm0oZnVuY3Rpb24gKCkge1xuICAgICAgZm9yT2YoaXRlcmFibGUsIGZhbHNlLCBmdW5jdGlvbiAocHJvbWlzZSkge1xuICAgICAgICBDLnJlc29sdmUocHJvbWlzZSkudGhlbihjYXBhYmlsaXR5LnJlc29sdmUsIHJlamVjdCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBpZiAocmVzdWx0LmUpIHJlamVjdChyZXN1bHQudik7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///243\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar weak = __webpack_require__(121);\nvar validate = __webpack_require__(42);\nvar WEAK_SET = 'WeakSet';\n\n// 23.4 WeakSet Objects\n__webpack_require__(61)(WEAK_SET, function (get) {\n return function WeakSet() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.4.3.1 WeakSet.prototype.add(value)\n add: function add(value) {\n return weak.def(validate(this, WEAK_SET), value, true);\n }\n}, weak, false, true);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYud2Vhay1zZXQuanM/YzAyYiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLFdBQVcsbUJBQU8sQ0FBQyxHQUFvQjtBQUN2QyxlQUFlLG1CQUFPLENBQUMsRUFBd0I7QUFDL0M7O0FBRUE7QUFDQSxtQkFBTyxDQUFDLEVBQWU7QUFDdkIsNkJBQTZCLG1FQUFtRTtBQUNoRyxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjI0NC5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciB3ZWFrID0gcmVxdWlyZSgnLi9fY29sbGVjdGlvbi13ZWFrJyk7XG52YXIgdmFsaWRhdGUgPSByZXF1aXJlKCcuL192YWxpZGF0ZS1jb2xsZWN0aW9uJyk7XG52YXIgV0VBS19TRVQgPSAnV2Vha1NldCc7XG5cbi8vIDIzLjQgV2Vha1NldCBPYmplY3RzXG5yZXF1aXJlKCcuL19jb2xsZWN0aW9uJykoV0VBS19TRVQsIGZ1bmN0aW9uIChnZXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIFdlYWtTZXQoKSB7IHJldHVybiBnZXQodGhpcywgYXJndW1lbnRzLmxlbmd0aCA+IDAgPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQpOyB9O1xufSwge1xuICAvLyAyMy40LjMuMSBXZWFrU2V0LnByb3RvdHlwZS5hZGQodmFsdWUpXG4gIGFkZDogZnVuY3Rpb24gYWRkKHZhbHVlKSB7XG4gICAgcmV0dXJuIHdlYWsuZGVmKHZhbGlkYXRlKHRoaXMsIFdFQUtfU0VUKSwgdmFsdWUsIHRydWUpO1xuICB9XG59LCB3ZWFrLCBmYWxzZSwgdHJ1ZSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///244\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar $typed = __webpack_require__(62);\nvar buffer = __webpack_require__(92);\nvar anObject = __webpack_require__(1);\nvar toAbsoluteIndex = __webpack_require__(35);\nvar toLength = __webpack_require__(6);\nvar isObject = __webpack_require__(4);\nvar ArrayBuffer = __webpack_require__(2).ArrayBuffer;\nvar speciesConstructor = __webpack_require__(51);\nvar $ArrayBuffer = buffer.ArrayBuffer;\nvar $DataView = buffer.DataView;\nvar $isView = $typed.ABV && ArrayBuffer.isView;\nvar $slice = $ArrayBuffer.prototype.slice;\nvar VIEW = $typed.VIEW;\nvar ARRAY_BUFFER = 'ArrayBuffer';\n\n$export($export.G + $export.W + $export.F * (ArrayBuffer !== $ArrayBuffer), { ArrayBuffer: $ArrayBuffer });\n\n$export($export.S + $export.F * !$typed.CONSTR, ARRAY_BUFFER, {\n // 24.1.3.1 ArrayBuffer.isView(arg)\n isView: function isView(it) {\n return $isView && $isView(it) || isObject(it) && VIEW in it;\n }\n});\n\n$export($export.P + $export.U + $export.F * __webpack_require__(3)(function () {\n return !new $ArrayBuffer(2).slice(1, undefined).byteLength;\n}), ARRAY_BUFFER, {\n // 24.1.4.3 ArrayBuffer.prototype.slice(start, end)\n slice: function slice(start, end) {\n if ($slice !== undefined && end === undefined) return $slice.call(anObject(this), start); // FF fix\n var len = anObject(this).byteLength;\n var first = toAbsoluteIndex(start, len);\n var fin = toAbsoluteIndex(end === undefined ? len : end, len);\n var result = new (speciesConstructor(this, $ArrayBuffer))(toLength(fin - first));\n var viewS = new $DataView(this);\n var viewT = new $DataView(result);\n var index = 0;\n while (first < fin) {\n viewT.setUint8(index++, viewS.getUint8(first++));\n } return result;\n }\n});\n\n__webpack_require__(38)(ARRAY_BUFFER);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuYXJyYXktYnVmZmVyLmpzP2M2NmYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxhQUFhLG1CQUFPLENBQUMsRUFBVTtBQUMvQixhQUFhLG1CQUFPLENBQUMsRUFBaUI7QUFDdEMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsc0JBQXNCLG1CQUFPLENBQUMsRUFBc0I7QUFDcEQsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsa0JBQWtCLG1CQUFPLENBQUMsQ0FBVztBQUNyQyx5QkFBeUIsbUJBQU8sQ0FBQyxFQUF3QjtBQUN6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsNkVBQTZFLDRCQUE0Qjs7QUFFekc7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQsNENBQTRDLG1CQUFPLENBQUMsQ0FBVTtBQUM5RDtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsNkZBQTZGO0FBQzdGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLENBQUM7O0FBRUQsbUJBQU8sQ0FBQyxFQUFnQiIsImZpbGUiOiIyNDUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICR0eXBlZCA9IHJlcXVpcmUoJy4vX3R5cGVkJyk7XG52YXIgYnVmZmVyID0gcmVxdWlyZSgnLi9fdHlwZWQtYnVmZmVyJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuL190by1hYnNvbHV0ZS1pbmRleCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBBcnJheUJ1ZmZlciA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLkFycmF5QnVmZmVyO1xudmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4vX3NwZWNpZXMtY29uc3RydWN0b3InKTtcbnZhciAkQXJyYXlCdWZmZXIgPSBidWZmZXIuQXJyYXlCdWZmZXI7XG52YXIgJERhdGFWaWV3ID0gYnVmZmVyLkRhdGFWaWV3O1xudmFyICRpc1ZpZXcgPSAkdHlwZWQuQUJWICYmIEFycmF5QnVmZmVyLmlzVmlldztcbnZhciAkc2xpY2UgPSAkQXJyYXlCdWZmZXIucHJvdG90eXBlLnNsaWNlO1xudmFyIFZJRVcgPSAkdHlwZWQuVklFVztcbnZhciBBUlJBWV9CVUZGRVIgPSAnQXJyYXlCdWZmZXInO1xuXG4kZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuVyArICRleHBvcnQuRiAqIChBcnJheUJ1ZmZlciAhPT0gJEFycmF5QnVmZmVyKSwgeyBBcnJheUJ1ZmZlcjogJEFycmF5QnVmZmVyIH0pO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICEkdHlwZWQuQ09OU1RSLCBBUlJBWV9CVUZGRVIsIHtcbiAgLy8gMjQuMS4zLjEgQXJyYXlCdWZmZXIuaXNWaWV3KGFyZylcbiAgaXNWaWV3OiBmdW5jdGlvbiBpc1ZpZXcoaXQpIHtcbiAgICByZXR1cm4gJGlzVmlldyAmJiAkaXNWaWV3KGl0KSB8fCBpc09iamVjdChpdCkgJiYgVklFVyBpbiBpdDtcbiAgfVxufSk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5VICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAhbmV3ICRBcnJheUJ1ZmZlcigyKS5zbGljZSgxLCB1bmRlZmluZWQpLmJ5dGVMZW5ndGg7XG59KSwgQVJSQVlfQlVGRkVSLCB7XG4gIC8vIDI0LjEuNC4zIEFycmF5QnVmZmVyLnByb3RvdHlwZS5zbGljZShzdGFydCwgZW5kKVxuICBzbGljZTogZnVuY3Rpb24gc2xpY2Uoc3RhcnQsIGVuZCkge1xuICAgIGlmICgkc2xpY2UgIT09IHVuZGVmaW5lZCAmJiBlbmQgPT09IHVuZGVmaW5lZCkgcmV0dXJuICRzbGljZS5jYWxsKGFuT2JqZWN0KHRoaXMpLCBzdGFydCk7IC8vIEZGIGZpeFxuICAgIHZhciBsZW4gPSBhbk9iamVjdCh0aGlzKS5ieXRlTGVuZ3RoO1xuICAgIHZhciBmaXJzdCA9IHRvQWJzb2x1dGVJbmRleChzdGFydCwgbGVuKTtcbiAgICB2YXIgZmluID0gdG9BYnNvbHV0ZUluZGV4KGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuIDogZW5kLCBsZW4pO1xuICAgIHZhciByZXN1bHQgPSBuZXcgKHNwZWNpZXNDb25zdHJ1Y3Rvcih0aGlzLCAkQXJyYXlCdWZmZXIpKSh0b0xlbmd0aChmaW4gLSBmaXJzdCkpO1xuICAgIHZhciB2aWV3UyA9IG5ldyAkRGF0YVZpZXcodGhpcyk7XG4gICAgdmFyIHZpZXdUID0gbmV3ICREYXRhVmlldyhyZXN1bHQpO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgd2hpbGUgKGZpcnN0IDwgZmluKSB7XG4gICAgICB2aWV3VC5zZXRVaW50OChpbmRleCsrLCB2aWV3Uy5nZXRVaW50OChmaXJzdCsrKSk7XG4gICAgfSByZXR1cm4gcmVzdWx0O1xuICB9XG59KTtcblxucmVxdWlyZSgnLi9fc2V0LXNwZWNpZXMnKShBUlJBWV9CVUZGRVIpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///245\n")},function(module,exports,__webpack_require__){eval("var $export = __webpack_require__(0);\n$export($export.G + $export.W + $export.F * !__webpack_require__(62).ABV, {\n DataView: __webpack_require__(92).DataView\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuZGF0YS12aWV3LmpzPzI2MmYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsNkNBQTZDLG1CQUFPLENBQUMsRUFBVTtBQUMvRCxZQUFZLG1CQUFPLENBQUMsRUFBaUI7QUFDckMsQ0FBQyIsImZpbGUiOiIyNDYuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LlcgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fdHlwZWQnKS5BQlYsIHtcbiAgRGF0YVZpZXc6IHJlcXVpcmUoJy4vX3R5cGVkLWJ1ZmZlcicpLkRhdGFWaWV3XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///246\n")},function(module,exports,__webpack_require__){eval("__webpack_require__(27)('Int8', 1, function (init) {\n return function Int8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuaW50OC1hcnJheS5qcz9iMDVjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLG1CQUFPLENBQUMsRUFBZ0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyNDcuanMiLCJzb3VyY2VzQ29udGVudCI6WyJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdJbnQ4JywgMSwgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIEludDhBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///247\n")},function(module,exports,__webpack_require__){eval("__webpack_require__(27)('Uint8', 1, function (init) {\n return function Uint8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQudWludDgtYXJyYXkuanM/MzRlZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjQ4LmpzIiwic291cmNlc0NvbnRlbnQiOlsicmVxdWlyZSgnLi9fdHlwZWQtYXJyYXknKSgnVWludDgnLCAxLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gVWludDhBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///248\n")},function(module,exports,__webpack_require__){eval("__webpack_require__(27)('Uint8', 1, function (init) {\n return function Uint8ClampedArray(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n}, true);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQudWludDgtY2xhbXBlZC1hcnJheS5qcz82YWEyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLG1CQUFPLENBQUMsRUFBZ0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyNDkuanMiLCJzb3VyY2VzQ29udGVudCI6WyJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdVaW50OCcsIDEsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBVaW50OENsYW1wZWRBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSwgdHJ1ZSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///249\n")},function(module,exports,__webpack_require__){eval("__webpack_require__(27)('Int16', 2, function (init) {\n return function Int16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuaW50MTYtYXJyYXkuanM/MTVhYyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjUwLmpzIiwic291cmNlc0NvbnRlbnQiOlsicmVxdWlyZSgnLi9fdHlwZWQtYXJyYXknKSgnSW50MTYnLCAyLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gSW50MTZBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///250\n")},function(module,exports,__webpack_require__){eval("__webpack_require__(27)('Uint16', 2, function (init) {\n return function Uint16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQudWludDE2LWFycmF5LmpzP2FmNTYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsbUJBQU8sQ0FBQyxFQUFnQjtBQUN4QjtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjI1MS5qcyIsInNvdXJjZXNDb250ZW50IjpbInJlcXVpcmUoJy4vX3R5cGVkLWFycmF5JykoJ1VpbnQxNicsIDIsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBVaW50MTZBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///251\n")},function(module,exports,__webpack_require__){eval("__webpack_require__(27)('Int32', 4, function (init) {\n return function Int32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuaW50MzItYXJyYXkuanM/YjZlNCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjUyLmpzIiwic291cmNlc0NvbnRlbnQiOlsicmVxdWlyZSgnLi9fdHlwZWQtYXJyYXknKSgnSW50MzInLCA0LCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gSW50MzJBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///252\n")},function(module,exports,__webpack_require__){eval("__webpack_require__(27)('Uint32', 4, function (init) {\n return function Uint32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQudWludDMyLWFycmF5LmpzPzljMjkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsbUJBQU8sQ0FBQyxFQUFnQjtBQUN4QjtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjI1My5qcyIsInNvdXJjZXNDb250ZW50IjpbInJlcXVpcmUoJy4vX3R5cGVkLWFycmF5JykoJ1VpbnQzMicsIDQsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBVaW50MzJBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///253\n")},function(module,exports,__webpack_require__){eval("__webpack_require__(27)('Float32', 4, function (init) {\n return function Float32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuZmxvYXQzMi1hcnJheS5qcz82M2Q5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLG1CQUFPLENBQUMsRUFBZ0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyNTQuanMiLCJzb3VyY2VzQ29udGVudCI6WyJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdGbG9hdDMyJywgNCwgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIEZsb2F0MzJBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///254\n")},function(module,exports,__webpack_require__){eval("__webpack_require__(27)('Float64', 8, function (init) {\n return function Float64Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuZmxvYXQ2NC1hcnJheS5qcz80ZGRhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLG1CQUFPLENBQUMsRUFBZ0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyNTUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdGbG9hdDY0JywgOCwgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIEZsb2F0NjRBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///255\n")},function(module,exports,__webpack_require__){eval("// 26.1.1 Reflect.apply(target, thisArgument, argumentsList)\nvar $export = __webpack_require__(0);\nvar aFunction = __webpack_require__(10);\nvar anObject = __webpack_require__(1);\nvar rApply = (__webpack_require__(2).Reflect || {}).apply;\nvar fApply = Function.apply;\n// MS Edge argumentsList argument is optional\n$export($export.S + $export.F * !__webpack_require__(3)(function () {\n rApply(function () { /* empty */ });\n}), 'Reflect', {\n apply: function apply(target, thisArgument, argumentsList) {\n var T = aFunction(target);\n var L = anObject(argumentsList);\n return rApply ? rApply(T, thisArgument, L) : fApply.call(T, thisArgument, L);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5hcHBseS5qcz9kZjFiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2QyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxjQUFjLG1CQUFPLENBQUMsQ0FBVyxlQUFlO0FBQ2hEO0FBQ0E7QUFDQSxpQ0FBaUMsbUJBQU8sQ0FBQyxDQUFVO0FBQ25ELHNCQUFzQixjQUFjO0FBQ3BDLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyNTYuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyNi4xLjEgUmVmbGVjdC5hcHBseSh0YXJnZXQsIHRoaXNBcmd1bWVudCwgYXJndW1lbnRzTGlzdClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgckFwcGx5ID0gKHJlcXVpcmUoJy4vX2dsb2JhbCcpLlJlZmxlY3QgfHwge30pLmFwcGx5O1xudmFyIGZBcHBseSA9IEZ1bmN0aW9uLmFwcGx5O1xuLy8gTVMgRWRnZSBhcmd1bWVudHNMaXN0IGFyZ3VtZW50IGlzIG9wdGlvbmFsXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgckFwcGx5KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSk7XG59KSwgJ1JlZmxlY3QnLCB7XG4gIGFwcGx5OiBmdW5jdGlvbiBhcHBseSh0YXJnZXQsIHRoaXNBcmd1bWVudCwgYXJndW1lbnRzTGlzdCkge1xuICAgIHZhciBUID0gYUZ1bmN0aW9uKHRhcmdldCk7XG4gICAgdmFyIEwgPSBhbk9iamVjdChhcmd1bWVudHNMaXN0KTtcbiAgICByZXR1cm4gckFwcGx5ID8gckFwcGx5KFQsIHRoaXNBcmd1bWVudCwgTCkgOiBmQXBwbHkuY2FsbChULCB0aGlzQXJndW1lbnQsIEwpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///256\n")},function(module,exports,__webpack_require__){eval("// 26.1.2 Reflect.construct(target, argumentsList [, newTarget])\nvar $export = __webpack_require__(0);\nvar create = __webpack_require__(36);\nvar aFunction = __webpack_require__(10);\nvar anObject = __webpack_require__(1);\nvar isObject = __webpack_require__(4);\nvar fails = __webpack_require__(3);\nvar bind = __webpack_require__(101);\nvar rConstruct = (__webpack_require__(2).Reflect || {}).construct;\n\n// MS Edge supports only 2 arguments and argumentsList argument is optional\n// FF Nightly sets third argument as `new.target`, but does not create `this` from it\nvar NEW_TARGET_BUG = fails(function () {\n function F() { /* empty */ }\n return !(rConstruct(function () { /* empty */ }, [], F) instanceof F);\n});\nvar ARGS_BUG = !fails(function () {\n rConstruct(function () { /* empty */ });\n});\n\n$export($export.S + $export.F * (NEW_TARGET_BUG || ARGS_BUG), 'Reflect', {\n construct: function construct(Target, args /* , newTarget */) {\n aFunction(Target);\n anObject(args);\n var newTarget = arguments.length < 3 ? Target : aFunction(arguments[2]);\n if (ARGS_BUG && !NEW_TARGET_BUG) return rConstruct(Target, args, newTarget);\n if (Target == newTarget) {\n // w/o altered newTarget, optimization for 0-4 arguments\n switch (args.length) {\n case 0: return new Target();\n case 1: return new Target(args[0]);\n case 2: return new Target(args[0], args[1]);\n case 3: return new Target(args[0], args[1], args[2]);\n case 4: return new Target(args[0], args[1], args[2], args[3]);\n }\n // w/o altered newTarget, lot of arguments case\n var $args = [null];\n $args.push.apply($args, args);\n return new (bind.apply(Target, $args))();\n }\n // with altered newTarget, not support built-in constructors\n var proto = newTarget.prototype;\n var instance = create(isObject(proto) ? proto : Object.prototype);\n var result = Function.apply.call(Target, instance, args);\n return isObject(result) ? result : instance;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5jb25zdHJ1Y3QuanM/MjM5NyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGFBQWEsbUJBQU8sQ0FBQyxFQUFrQjtBQUN2QyxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLFlBQVksbUJBQU8sQ0FBQyxDQUFVO0FBQzlCLFdBQVcsbUJBQU8sQ0FBQyxHQUFTO0FBQzVCLGtCQUFrQixtQkFBTyxDQUFDLENBQVcsZUFBZTs7QUFFcEQ7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCLG1DQUFtQyxjQUFjO0FBQ2pELENBQUM7QUFDRDtBQUNBLDBCQUEwQixjQUFjO0FBQ3hDLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjU3LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjYuMS4yIFJlZmxlY3QuY29uc3RydWN0KHRhcmdldCwgYXJndW1lbnRzTGlzdCBbLCBuZXdUYXJnZXRdKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuL19vYmplY3QtY3JlYXRlJyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4vX2JpbmQnKTtcbnZhciByQ29uc3RydWN0ID0gKHJlcXVpcmUoJy4vX2dsb2JhbCcpLlJlZmxlY3QgfHwge30pLmNvbnN0cnVjdDtcblxuLy8gTVMgRWRnZSBzdXBwb3J0cyBvbmx5IDIgYXJndW1lbnRzIGFuZCBhcmd1bWVudHNMaXN0IGFyZ3VtZW50IGlzIG9wdGlvbmFsXG4vLyBGRiBOaWdodGx5IHNldHMgdGhpcmQgYXJndW1lbnQgYXMgYG5ldy50YXJnZXRgLCBidXQgZG9lcyBub3QgY3JlYXRlIGB0aGlzYCBmcm9tIGl0XG52YXIgTkVXX1RBUkdFVF9CVUcgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEYoKSB7IC8qIGVtcHR5ICovIH1cbiAgcmV0dXJuICEockNvbnN0cnVjdChmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0sIFtdLCBGKSBpbnN0YW5jZW9mIEYpO1xufSk7XG52YXIgQVJHU19CVUcgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICByQ29uc3RydWN0KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSk7XG59KTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAoTkVXX1RBUkdFVF9CVUcgfHwgQVJHU19CVUcpLCAnUmVmbGVjdCcsIHtcbiAgY29uc3RydWN0OiBmdW5jdGlvbiBjb25zdHJ1Y3QoVGFyZ2V0LCBhcmdzIC8qICwgbmV3VGFyZ2V0ICovKSB7XG4gICAgYUZ1bmN0aW9uKFRhcmdldCk7XG4gICAgYW5PYmplY3QoYXJncyk7XG4gICAgdmFyIG5ld1RhcmdldCA9IGFyZ3VtZW50cy5sZW5ndGggPCAzID8gVGFyZ2V0IDogYUZ1bmN0aW9uKGFyZ3VtZW50c1syXSk7XG4gICAgaWYgKEFSR1NfQlVHICYmICFORVdfVEFSR0VUX0JVRykgcmV0dXJuIHJDb25zdHJ1Y3QoVGFyZ2V0LCBhcmdzLCBuZXdUYXJnZXQpO1xuICAgIGlmIChUYXJnZXQgPT0gbmV3VGFyZ2V0KSB7XG4gICAgICAvLyB3L28gYWx0ZXJlZCBuZXdUYXJnZXQsIG9wdGltaXphdGlvbiBmb3IgMC00IGFyZ3VtZW50c1xuICAgICAgc3dpdGNoIChhcmdzLmxlbmd0aCkge1xuICAgICAgICBjYXNlIDA6IHJldHVybiBuZXcgVGFyZ2V0KCk7XG4gICAgICAgIGNhc2UgMTogcmV0dXJuIG5ldyBUYXJnZXQoYXJnc1swXSk7XG4gICAgICAgIGNhc2UgMjogcmV0dXJuIG5ldyBUYXJnZXQoYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgICAgIGNhc2UgMzogcmV0dXJuIG5ldyBUYXJnZXQoYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7XG4gICAgICAgIGNhc2UgNDogcmV0dXJuIG5ldyBUYXJnZXQoYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSk7XG4gICAgICB9XG4gICAgICAvLyB3L28gYWx0ZXJlZCBuZXdUYXJnZXQsIGxvdCBvZiBhcmd1bWVudHMgY2FzZVxuICAgICAgdmFyICRhcmdzID0gW251bGxdO1xuICAgICAgJGFyZ3MucHVzaC5hcHBseSgkYXJncywgYXJncyk7XG4gICAgICByZXR1cm4gbmV3IChiaW5kLmFwcGx5KFRhcmdldCwgJGFyZ3MpKSgpO1xuICAgIH1cbiAgICAvLyB3aXRoIGFsdGVyZWQgbmV3VGFyZ2V0LCBub3Qgc3VwcG9ydCBidWlsdC1pbiBjb25zdHJ1Y3RvcnNcbiAgICB2YXIgcHJvdG8gPSBuZXdUYXJnZXQucHJvdG90eXBlO1xuICAgIHZhciBpbnN0YW5jZSA9IGNyZWF0ZShpc09iamVjdChwcm90bykgPyBwcm90byA6IE9iamVjdC5wcm90b3R5cGUpO1xuICAgIHZhciByZXN1bHQgPSBGdW5jdGlvbi5hcHBseS5jYWxsKFRhcmdldCwgaW5zdGFuY2UsIGFyZ3MpO1xuICAgIHJldHVybiBpc09iamVjdChyZXN1bHQpID8gcmVzdWx0IDogaW5zdGFuY2U7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///257\n")},function(module,exports,__webpack_require__){eval("// 26.1.3 Reflect.defineProperty(target, propertyKey, attributes)\nvar dP = __webpack_require__(8);\nvar $export = __webpack_require__(0);\nvar anObject = __webpack_require__(1);\nvar toPrimitive = __webpack_require__(23);\n\n// MS Edge has broken Reflect.defineProperty - throwing instead of returning false\n$export($export.S + $export.F * __webpack_require__(3)(function () {\n // eslint-disable-next-line no-undef\n Reflect.defineProperty(dP.f({}, 1, { value: 1 }), 1, { value: 2 });\n}), 'Reflect', {\n defineProperty: function defineProperty(target, propertyKey, attributes) {\n anObject(target);\n propertyKey = toPrimitive(propertyKey, true);\n anObject(attributes);\n try {\n dP.f(target, propertyKey, attributes);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5kZWZpbmUtcHJvcGVydHkuanM/ODhjYSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLFNBQVMsbUJBQU8sQ0FBQyxDQUFjO0FBQy9CLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGtCQUFrQixtQkFBTyxDQUFDLEVBQWlCOztBQUUzQztBQUNBLGdDQUFnQyxtQkFBTyxDQUFDLENBQVU7QUFDbEQ7QUFDQSxnQ0FBZ0MsTUFBTSxXQUFXLE9BQU8sV0FBVztBQUNuRSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyNTguanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyNi4xLjMgUmVmbGVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5S2V5LCBhdHRyaWJ1dGVzKVxudmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcblxuLy8gTVMgRWRnZSBoYXMgYnJva2VuIFJlZmxlY3QuZGVmaW5lUHJvcGVydHkgLSB0aHJvd2luZyBpbnN0ZWFkIG9mIHJldHVybmluZyBmYWxzZVxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gIFJlZmxlY3QuZGVmaW5lUHJvcGVydHkoZFAuZih7fSwgMSwgeyB2YWx1ZTogMSB9KSwgMSwgeyB2YWx1ZTogMiB9KTtcbn0pLCAnUmVmbGVjdCcsIHtcbiAgZGVmaW5lUHJvcGVydHk6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHlLZXksIGF0dHJpYnV0ZXMpIHtcbiAgICBhbk9iamVjdCh0YXJnZXQpO1xuICAgIHByb3BlcnR5S2V5ID0gdG9QcmltaXRpdmUocHJvcGVydHlLZXksIHRydWUpO1xuICAgIGFuT2JqZWN0KGF0dHJpYnV0ZXMpO1xuICAgIHRyeSB7XG4gICAgICBkUC5mKHRhcmdldCwgcHJvcGVydHlLZXksIGF0dHJpYnV0ZXMpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///258\n")},function(module,exports,__webpack_require__){eval("// 26.1.4 Reflect.deleteProperty(target, propertyKey)\nvar $export = __webpack_require__(0);\nvar gOPD = __webpack_require__(16).f;\nvar anObject = __webpack_require__(1);\n\n$export($export.S, 'Reflect', {\n deleteProperty: function deleteProperty(target, propertyKey) {\n var desc = gOPD(anObject(target), propertyKey);\n return desc && !desc.configurable ? false : delete target[propertyKey];\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5kZWxldGUtcHJvcGVydHkuanM/YmExNiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLFdBQVcsbUJBQU8sQ0FBQyxFQUFnQjtBQUNuQyxlQUFlLG1CQUFPLENBQUMsQ0FBYzs7QUFFckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjU5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjYuMS40IFJlZmxlY3QuZGVsZXRlUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eUtleSlcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZ09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJykuZjtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7XG4gIGRlbGV0ZVByb3BlcnR5OiBmdW5jdGlvbiBkZWxldGVQcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5S2V5KSB7XG4gICAgdmFyIGRlc2MgPSBnT1BEKGFuT2JqZWN0KHRhcmdldCksIHByb3BlcnR5S2V5KTtcbiAgICByZXR1cm4gZGVzYyAmJiAhZGVzYy5jb25maWd1cmFibGUgPyBmYWxzZSA6IGRlbGV0ZSB0YXJnZXRbcHJvcGVydHlLZXldO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///259\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// 26.1.5 Reflect.enumerate(target)\nvar $export = __webpack_require__(0);\nvar anObject = __webpack_require__(1);\nvar Enumerate = function (iterated) {\n this._t = anObject(iterated); // target\n this._i = 0; // next index\n var keys = this._k = []; // keys\n var key;\n for (key in iterated) keys.push(key);\n};\n__webpack_require__(78)(Enumerate, 'Object', function () {\n var that = this;\n var keys = that._k;\n var key;\n do {\n if (that._i >= keys.length) return { value: undefined, done: true };\n } while (!((key = keys[that._i++]) in that._t));\n return { value: key, done: false };\n});\n\n$export($export.S, 'Reflect', {\n enumerate: function enumerate(target) {\n return new Enumerate(target);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5lbnVtZXJhdGUuanM/N2ZmNiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckM7QUFDQSwrQkFBK0I7QUFDL0IsY0FBYztBQUNkLDBCQUEwQjtBQUMxQjtBQUNBO0FBQ0E7QUFDQSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0NBQXdDO0FBQ3hDLEdBQUc7QUFDSCxVQUFVO0FBQ1YsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjYwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gMjYuMS41IFJlZmxlY3QuZW51bWVyYXRlKHRhcmdldClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBFbnVtZXJhdGUgPSBmdW5jdGlvbiAoaXRlcmF0ZWQpIHtcbiAgdGhpcy5fdCA9IGFuT2JqZWN0KGl0ZXJhdGVkKTsgLy8gdGFyZ2V0XG4gIHRoaXMuX2kgPSAwOyAgICAgICAgICAgICAgICAgIC8vIG5leHQgaW5kZXhcbiAgdmFyIGtleXMgPSB0aGlzLl9rID0gW107ICAgICAgLy8ga2V5c1xuICB2YXIga2V5O1xuICBmb3IgKGtleSBpbiBpdGVyYXRlZCkga2V5cy5wdXNoKGtleSk7XG59O1xucmVxdWlyZSgnLi9faXRlci1jcmVhdGUnKShFbnVtZXJhdGUsICdPYmplY3QnLCBmdW5jdGlvbiAoKSB7XG4gIHZhciB0aGF0ID0gdGhpcztcbiAgdmFyIGtleXMgPSB0aGF0Ll9rO1xuICB2YXIga2V5O1xuICBkbyB7XG4gICAgaWYgKHRoYXQuX2kgPj0ga2V5cy5sZW5ndGgpIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfTtcbiAgfSB3aGlsZSAoISgoa2V5ID0ga2V5c1t0aGF0Ll9pKytdKSBpbiB0aGF0Ll90KSk7XG4gIHJldHVybiB7IHZhbHVlOiBrZXksIGRvbmU6IGZhbHNlIH07XG59KTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0Jywge1xuICBlbnVtZXJhdGU6IGZ1bmN0aW9uIGVudW1lcmF0ZSh0YXJnZXQpIHtcbiAgICByZXR1cm4gbmV3IEVudW1lcmF0ZSh0YXJnZXQpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///260\n")},function(module,exports,__webpack_require__){eval("// 26.1.6 Reflect.get(target, propertyKey [, receiver])\nvar gOPD = __webpack_require__(16);\nvar getPrototypeOf = __webpack_require__(17);\nvar has = __webpack_require__(14);\nvar $export = __webpack_require__(0);\nvar isObject = __webpack_require__(4);\nvar anObject = __webpack_require__(1);\n\nfunction get(target, propertyKey /* , receiver */) {\n var receiver = arguments.length < 3 ? target : arguments[2];\n var desc, proto;\n if (anObject(target) === receiver) return target[propertyKey];\n if (desc = gOPD.f(target, propertyKey)) return has(desc, 'value')\n ? desc.value\n : desc.get !== undefined\n ? desc.get.call(receiver)\n : undefined;\n if (isObject(proto = getPrototypeOf(target))) return get(proto, propertyKey, receiver);\n}\n\n$export($export.S, 'Reflect', { get: get });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5nZXQuanM/ZDE4NSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLFdBQVcsbUJBQU8sQ0FBQyxFQUFnQjtBQUNuQyxxQkFBcUIsbUJBQU8sQ0FBQyxFQUFlO0FBQzVDLFVBQVUsbUJBQU8sQ0FBQyxFQUFRO0FBQzFCLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjOztBQUVyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLCtCQUErQixXQUFXIiwiZmlsZSI6IjI2MS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDI2LjEuNiBSZWZsZWN0LmdldCh0YXJnZXQsIHByb3BlcnR5S2V5IFssIHJlY2VpdmVyXSlcbnZhciBnT1BEID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xuXG5mdW5jdGlvbiBnZXQodGFyZ2V0LCBwcm9wZXJ0eUtleSAvKiAsIHJlY2VpdmVyICovKSB7XG4gIHZhciByZWNlaXZlciA9IGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdGFyZ2V0IDogYXJndW1lbnRzWzJdO1xuICB2YXIgZGVzYywgcHJvdG87XG4gIGlmIChhbk9iamVjdCh0YXJnZXQpID09PSByZWNlaXZlcikgcmV0dXJuIHRhcmdldFtwcm9wZXJ0eUtleV07XG4gIGlmIChkZXNjID0gZ09QRC5mKHRhcmdldCwgcHJvcGVydHlLZXkpKSByZXR1cm4gaGFzKGRlc2MsICd2YWx1ZScpXG4gICAgPyBkZXNjLnZhbHVlXG4gICAgOiBkZXNjLmdldCAhPT0gdW5kZWZpbmVkXG4gICAgICA/IGRlc2MuZ2V0LmNhbGwocmVjZWl2ZXIpXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgaWYgKGlzT2JqZWN0KHByb3RvID0gZ2V0UHJvdG90eXBlT2YodGFyZ2V0KSkpIHJldHVybiBnZXQocHJvdG8sIHByb3BlcnR5S2V5LCByZWNlaXZlcik7XG59XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHsgZ2V0OiBnZXQgfSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///261\n")},function(module,exports,__webpack_require__){eval("// 26.1.7 Reflect.getOwnPropertyDescriptor(target, propertyKey)\nvar gOPD = __webpack_require__(16);\nvar $export = __webpack_require__(0);\nvar anObject = __webpack_require__(1);\n\n$export($export.S, 'Reflect', {\n getOwnPropertyDescriptor: function getOwnPropertyDescriptor(target, propertyKey) {\n return gOPD.f(anObject(target), propertyKey);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanM/ZWJkZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLFdBQVcsbUJBQU8sQ0FBQyxFQUFnQjtBQUNuQyxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxlQUFlLG1CQUFPLENBQUMsQ0FBYzs7QUFFckM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjI2Mi5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDI2LjEuNyBSZWZsZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIHByb3BlcnR5S2V5KVxudmFyIGdPUEQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7XG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgcHJvcGVydHlLZXkpIHtcbiAgICByZXR1cm4gZ09QRC5mKGFuT2JqZWN0KHRhcmdldCksIHByb3BlcnR5S2V5KTtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///262\n")},function(module,exports,__webpack_require__){eval("// 26.1.8 Reflect.getPrototypeOf(target)\nvar $export = __webpack_require__(0);\nvar getProto = __webpack_require__(17);\nvar anObject = __webpack_require__(1);\n\n$export($export.S, 'Reflect', {\n getPrototypeOf: function getPrototypeOf(target) {\n return getProto(anObject(target));\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5nZXQtcHJvdG90eXBlLW9mLmpzPzJkMzQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxlQUFlLG1CQUFPLENBQUMsRUFBZTtBQUN0QyxlQUFlLG1CQUFPLENBQUMsQ0FBYzs7QUFFckM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjI2My5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDI2LjEuOCBSZWZsZWN0LmdldFByb3RvdHlwZU9mKHRhcmdldClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZ2V0UHJvdG8gPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0Jywge1xuICBnZXRQcm90b3R5cGVPZjogZnVuY3Rpb24gZ2V0UHJvdG90eXBlT2YodGFyZ2V0KSB7XG4gICAgcmV0dXJuIGdldFByb3RvKGFuT2JqZWN0KHRhcmdldCkpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///263\n")},function(module,exports,__webpack_require__){eval("// 26.1.9 Reflect.has(target, propertyKey)\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Reflect', {\n has: function has(target, propertyKey) {\n return propertyKey in target;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5oYXMuanM/ZjZiMyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXOztBQUVqQztBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjY0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjYuMS45IFJlZmxlY3QuaGFzKHRhcmdldCwgcHJvcGVydHlLZXkpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7XG4gIGhhczogZnVuY3Rpb24gaGFzKHRhcmdldCwgcHJvcGVydHlLZXkpIHtcbiAgICByZXR1cm4gcHJvcGVydHlLZXkgaW4gdGFyZ2V0O1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///264\n")},function(module,exports,__webpack_require__){eval("// 26.1.10 Reflect.isExtensible(target)\nvar $export = __webpack_require__(0);\nvar anObject = __webpack_require__(1);\nvar $isExtensible = Object.isExtensible;\n\n$export($export.S, 'Reflect', {\n isExtensible: function isExtensible(target) {\n anObject(target);\n return $isExtensible ? $isExtensible(target) : true;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5pcy1leHRlbnNpYmxlLmpzPzIyNTEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyNjUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyNi4xLjEwIFJlZmxlY3QuaXNFeHRlbnNpYmxlKHRhcmdldClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciAkaXNFeHRlbnNpYmxlID0gT2JqZWN0LmlzRXh0ZW5zaWJsZTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0Jywge1xuICBpc0V4dGVuc2libGU6IGZ1bmN0aW9uIGlzRXh0ZW5zaWJsZSh0YXJnZXQpIHtcbiAgICBhbk9iamVjdCh0YXJnZXQpO1xuICAgIHJldHVybiAkaXNFeHRlbnNpYmxlID8gJGlzRXh0ZW5zaWJsZSh0YXJnZXQpIDogdHJ1ZTtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///265\n")},function(module,exports,__webpack_require__){eval("// 26.1.11 Reflect.ownKeys(target)\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Reflect', { ownKeys: __webpack_require__(123) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5vd24ta2V5cy5qcz9jNjk4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDLCtCQUErQixVQUFVLG1CQUFPLENBQUMsR0FBYSxHQUFHIiwiZmlsZSI6IjI2Ni5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDI2LjEuMTEgUmVmbGVjdC5vd25LZXlzKHRhcmdldClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHsgb3duS2V5czogcmVxdWlyZSgnLi9fb3duLWtleXMnKSB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///266\n")},function(module,exports,__webpack_require__){eval("// 26.1.12 Reflect.preventExtensions(target)\nvar $export = __webpack_require__(0);\nvar anObject = __webpack_require__(1);\nvar $preventExtensions = Object.preventExtensions;\n\n$export($export.S, 'Reflect', {\n preventExtensions: function preventExtensions(target) {\n anObject(target);\n try {\n if ($preventExtensions) $preventExtensions(target);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5wcmV2ZW50LWV4dGVuc2lvbnMuanM/YTE5ZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjI2Ny5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDI2LjEuMTIgUmVmbGVjdC5wcmV2ZW50RXh0ZW5zaW9ucyh0YXJnZXQpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgJHByZXZlbnRFeHRlbnNpb25zID0gT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7XG4gIHByZXZlbnRFeHRlbnNpb25zOiBmdW5jdGlvbiBwcmV2ZW50RXh0ZW5zaW9ucyh0YXJnZXQpIHtcbiAgICBhbk9iamVjdCh0YXJnZXQpO1xuICAgIHRyeSB7XG4gICAgICBpZiAoJHByZXZlbnRFeHRlbnNpb25zKSAkcHJldmVudEV4dGVuc2lvbnModGFyZ2V0KTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///267\n")},function(module,exports,__webpack_require__){eval("// 26.1.13 Reflect.set(target, propertyKey, V [, receiver])\nvar dP = __webpack_require__(8);\nvar gOPD = __webpack_require__(16);\nvar getPrototypeOf = __webpack_require__(17);\nvar has = __webpack_require__(14);\nvar $export = __webpack_require__(0);\nvar createDesc = __webpack_require__(32);\nvar anObject = __webpack_require__(1);\nvar isObject = __webpack_require__(4);\n\nfunction set(target, propertyKey, V /* , receiver */) {\n var receiver = arguments.length < 4 ? target : arguments[3];\n var ownDesc = gOPD.f(anObject(target), propertyKey);\n var existingDescriptor, proto;\n if (!ownDesc) {\n if (isObject(proto = getPrototypeOf(target))) {\n return set(proto, propertyKey, V, receiver);\n }\n ownDesc = createDesc(0);\n }\n if (has(ownDesc, 'value')) {\n if (ownDesc.writable === false || !isObject(receiver)) return false;\n if (existingDescriptor = gOPD.f(receiver, propertyKey)) {\n if (existingDescriptor.get || existingDescriptor.set || existingDescriptor.writable === false) return false;\n existingDescriptor.value = V;\n dP.f(receiver, propertyKey, existingDescriptor);\n } else dP.f(receiver, propertyKey, createDesc(0, V));\n return true;\n }\n return ownDesc.set === undefined ? false : (ownDesc.set.call(receiver, V), true);\n}\n\n$export($export.S, 'Reflect', { set: set });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5zZXQuanM/OTI1MyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLFNBQVMsbUJBQU8sQ0FBQyxDQUFjO0FBQy9CLFdBQVcsbUJBQU8sQ0FBQyxFQUFnQjtBQUNuQyxxQkFBcUIsbUJBQU8sQ0FBQyxFQUFlO0FBQzVDLFVBQVUsbUJBQU8sQ0FBQyxFQUFRO0FBQzFCLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGlCQUFpQixtQkFBTyxDQUFDLEVBQWtCO0FBQzNDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjOztBQUVyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSwrQkFBK0IsV0FBVyIsImZpbGUiOiIyNjguanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyNi4xLjEzIFJlZmxlY3Quc2V0KHRhcmdldCwgcHJvcGVydHlLZXksIFYgWywgcmVjZWl2ZXJdKVxudmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG52YXIgZ09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGNyZWF0ZURlc2MgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xuXG5mdW5jdGlvbiBzZXQodGFyZ2V0LCBwcm9wZXJ0eUtleSwgViAvKiAsIHJlY2VpdmVyICovKSB7XG4gIHZhciByZWNlaXZlciA9IGFyZ3VtZW50cy5sZW5ndGggPCA0ID8gdGFyZ2V0IDogYXJndW1lbnRzWzNdO1xuICB2YXIgb3duRGVzYyA9IGdPUEQuZihhbk9iamVjdCh0YXJnZXQpLCBwcm9wZXJ0eUtleSk7XG4gIHZhciBleGlzdGluZ0Rlc2NyaXB0b3IsIHByb3RvO1xuICBpZiAoIW93bkRlc2MpIHtcbiAgICBpZiAoaXNPYmplY3QocHJvdG8gPSBnZXRQcm90b3R5cGVPZih0YXJnZXQpKSkge1xuICAgICAgcmV0dXJuIHNldChwcm90bywgcHJvcGVydHlLZXksIFYsIHJlY2VpdmVyKTtcbiAgICB9XG4gICAgb3duRGVzYyA9IGNyZWF0ZURlc2MoMCk7XG4gIH1cbiAgaWYgKGhhcyhvd25EZXNjLCAndmFsdWUnKSkge1xuICAgIGlmIChvd25EZXNjLndyaXRhYmxlID09PSBmYWxzZSB8fCAhaXNPYmplY3QocmVjZWl2ZXIpKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKGV4aXN0aW5nRGVzY3JpcHRvciA9IGdPUEQuZihyZWNlaXZlciwgcHJvcGVydHlLZXkpKSB7XG4gICAgICBpZiAoZXhpc3RpbmdEZXNjcmlwdG9yLmdldCB8fCBleGlzdGluZ0Rlc2NyaXB0b3Iuc2V0IHx8IGV4aXN0aW5nRGVzY3JpcHRvci53cml0YWJsZSA9PT0gZmFsc2UpIHJldHVybiBmYWxzZTtcbiAgICAgIGV4aXN0aW5nRGVzY3JpcHRvci52YWx1ZSA9IFY7XG4gICAgICBkUC5mKHJlY2VpdmVyLCBwcm9wZXJ0eUtleSwgZXhpc3RpbmdEZXNjcmlwdG9yKTtcbiAgICB9IGVsc2UgZFAuZihyZWNlaXZlciwgcHJvcGVydHlLZXksIGNyZWF0ZURlc2MoMCwgVikpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBvd25EZXNjLnNldCA9PT0gdW5kZWZpbmVkID8gZmFsc2UgOiAob3duRGVzYy5zZXQuY2FsbChyZWNlaXZlciwgViksIHRydWUpO1xufVxuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7IHNldDogc2V0IH0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///268\n")},function(module,exports,__webpack_require__){eval("// 26.1.14 Reflect.setPrototypeOf(target, proto)\nvar $export = __webpack_require__(0);\nvar setProto = __webpack_require__(71);\n\nif (setProto) $export($export.S, 'Reflect', {\n setPrototypeOf: function setPrototypeOf(target, proto) {\n setProto.check(target, proto);\n try {\n setProto.set(target, proto);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5zZXQtcHJvdG90eXBlLW9mLmpzPzkyNzUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxlQUFlLG1CQUFPLENBQUMsRUFBYzs7QUFFckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjY5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjYuMS4xNCBSZWZsZWN0LnNldFByb3RvdHlwZU9mKHRhcmdldCwgcHJvdG8pXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHNldFByb3RvID0gcmVxdWlyZSgnLi9fc2V0LXByb3RvJyk7XG5cbmlmIChzZXRQcm90bykgJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0Jywge1xuICBzZXRQcm90b3R5cGVPZjogZnVuY3Rpb24gc2V0UHJvdG90eXBlT2YodGFyZ2V0LCBwcm90bykge1xuICAgIHNldFByb3RvLmNoZWNrKHRhcmdldCwgcHJvdG8pO1xuICAgIHRyeSB7XG4gICAgICBzZXRQcm90by5zZXQodGFyZ2V0LCBwcm90byk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///269\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// https://github.com/tc39/Array.prototype.includes\nvar $export = __webpack_require__(0);\nvar $includes = __webpack_require__(52)(true);\n\n$export($export.P, 'Array', {\n includes: function includes(el /* , fromIndex = 0 */) {\n return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\n__webpack_require__(31)('includes');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuYXJyYXkuaW5jbHVkZXMuanM/Njc2MiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBbUI7O0FBRTNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRCxtQkFBTyxDQUFDLEVBQXVCIiwiZmlsZSI6IjI3MC5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L0FycmF5LnByb3RvdHlwZS5pbmNsdWRlc1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkaW5jbHVkZXMgPSByZXF1aXJlKCcuL19hcnJheS1pbmNsdWRlcycpKHRydWUpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCwgJ0FycmF5Jywge1xuICBpbmNsdWRlczogZnVuY3Rpb24gaW5jbHVkZXMoZWwgLyogLCBmcm9tSW5kZXggPSAwICovKSB7XG4gICAgcmV0dXJuICRpbmNsdWRlcyh0aGlzLCBlbCwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcblxucmVxdWlyZSgnLi9fYWRkLXRvLXVuc2NvcGFibGVzJykoJ2luY2x1ZGVzJyk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///270\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// https://tc39.github.io/proposal-flatMap/#sec-Array.prototype.flatMap\nvar $export = __webpack_require__(0);\nvar flattenIntoArray = __webpack_require__(124);\nvar toObject = __webpack_require__(9);\nvar toLength = __webpack_require__(6);\nvar aFunction = __webpack_require__(10);\nvar arraySpeciesCreate = __webpack_require__(84);\n\n$export($export.P, 'Array', {\n flatMap: function flatMap(callbackfn /* , thisArg */) {\n var O = toObject(this);\n var sourceLen, A;\n aFunction(callbackfn);\n sourceLen = toLength(O.length);\n A = arraySpeciesCreate(O, 0);\n flattenIntoArray(A, O, O, sourceLen, 0, 1, callbackfn, arguments[1]);\n return A;\n }\n});\n\n__webpack_require__(31)('flatMap');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuYXJyYXkuZmxhdC1tYXAuanM/ZTk1NiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsdUJBQXVCLG1CQUFPLENBQUMsR0FBdUI7QUFDdEQsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2Qyx5QkFBeUIsbUJBQU8sQ0FBQyxFQUF5Qjs7QUFFMUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVELG1CQUFPLENBQUMsRUFBdUIiLCJmaWxlIjoiMjcxLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1mbGF0TWFwLyNzZWMtQXJyYXkucHJvdG90eXBlLmZsYXRNYXBcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZmxhdHRlbkludG9BcnJheSA9IHJlcXVpcmUoJy4vX2ZsYXR0ZW4taW50by1hcnJheScpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgYXJyYXlTcGVjaWVzQ3JlYXRlID0gcmVxdWlyZSgnLi9fYXJyYXktc3BlY2llcy1jcmVhdGUnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdBcnJheScsIHtcbiAgZmxhdE1hcDogZnVuY3Rpb24gZmxhdE1hcChjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gICAgdmFyIHNvdXJjZUxlbiwgQTtcbiAgICBhRnVuY3Rpb24oY2FsbGJhY2tmbik7XG4gICAgc291cmNlTGVuID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICAgIEEgPSBhcnJheVNwZWNpZXNDcmVhdGUoTywgMCk7XG4gICAgZmxhdHRlbkludG9BcnJheShBLCBPLCBPLCBzb3VyY2VMZW4sIDAsIDEsIGNhbGxiYWNrZm4sIGFyZ3VtZW50c1sxXSk7XG4gICAgcmV0dXJuIEE7XG4gIH1cbn0pO1xuXG5yZXF1aXJlKCcuL19hZGQtdG8tdW5zY29wYWJsZXMnKSgnZmxhdE1hcCcpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///271\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// https://tc39.github.io/proposal-flatMap/#sec-Array.prototype.flatten\nvar $export = __webpack_require__(0);\nvar flattenIntoArray = __webpack_require__(124);\nvar toObject = __webpack_require__(9);\nvar toLength = __webpack_require__(6);\nvar toInteger = __webpack_require__(21);\nvar arraySpeciesCreate = __webpack_require__(84);\n\n$export($export.P, 'Array', {\n flatten: function flatten(/* depthArg = 1 */) {\n var depthArg = arguments[0];\n var O = toObject(this);\n var sourceLen = toLength(O.length);\n var A = arraySpeciesCreate(O, 0);\n flattenIntoArray(A, O, O, sourceLen, 0, depthArg === undefined ? 1 : toInteger(depthArg));\n return A;\n }\n});\n\n__webpack_require__(31)('flatten');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuYXJyYXkuZmxhdHRlbi5qcz83MWYxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyx1QkFBdUIsbUJBQU8sQ0FBQyxHQUF1QjtBQUN0RCxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDLHlCQUF5QixtQkFBTyxDQUFDLEVBQXlCOztBQUUxRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVELG1CQUFPLENBQUMsRUFBdUIiLCJmaWxlIjoiMjcyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1mbGF0TWFwLyNzZWMtQXJyYXkucHJvdG90eXBlLmZsYXR0ZW5cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZmxhdHRlbkludG9BcnJheSA9IHJlcXVpcmUoJy4vX2ZsYXR0ZW4taW50by1hcnJheScpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgYXJyYXlTcGVjaWVzQ3JlYXRlID0gcmVxdWlyZSgnLi9fYXJyYXktc3BlY2llcy1jcmVhdGUnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdBcnJheScsIHtcbiAgZmxhdHRlbjogZnVuY3Rpb24gZmxhdHRlbigvKiBkZXB0aEFyZyA9IDEgKi8pIHtcbiAgICB2YXIgZGVwdGhBcmcgPSBhcmd1bWVudHNbMF07XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgc291cmNlTGVuID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICAgIHZhciBBID0gYXJyYXlTcGVjaWVzQ3JlYXRlKE8sIDApO1xuICAgIGZsYXR0ZW5JbnRvQXJyYXkoQSwgTywgTywgc291cmNlTGVuLCAwLCBkZXB0aEFyZyA9PT0gdW5kZWZpbmVkID8gMSA6IHRvSW50ZWdlcihkZXB0aEFyZykpO1xuICAgIHJldHVybiBBO1xuICB9XG59KTtcblxucmVxdWlyZSgnLi9fYWRkLXRvLXVuc2NvcGFibGVzJykoJ2ZsYXR0ZW4nKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///272\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// https://github.com/mathiasbynens/String.prototype.at\nvar $export = __webpack_require__(0);\nvar $at = __webpack_require__(55)(true);\nvar $fails = __webpack_require__(3);\n\nvar FORCED = $fails(function () {\n return '𠮷'.at(0) !== '𠮷';\n});\n\n$export($export.P + $export.F * FORCED, 'String', {\n at: function at(pos) {\n return $at(this, pos);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLmF0LmpzPzM1MzUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLFVBQVUsbUJBQU8sQ0FBQyxFQUFjO0FBQ2hDLGFBQWEsbUJBQU8sQ0FBQyxDQUFVOztBQUUvQjtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjczLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL21hdGhpYXNieW5lbnMvU3RyaW5nLnByb3RvdHlwZS5hdFxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkYXQgPSByZXF1aXJlKCcuL19zdHJpbmctYXQnKSh0cnVlKTtcbnZhciAkZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xuXG52YXIgRk9SQ0VEID0gJGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICfwoK63Jy5hdCgwKSAhPT0gJ/CgrrcnO1xufSk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogRk9SQ0VELCAnU3RyaW5nJywge1xuICBhdDogZnVuY3Rpb24gYXQocG9zKSB7XG4gICAgcmV0dXJuICRhdCh0aGlzLCBwb3MpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///273\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = __webpack_require__(0);\nvar $pad = __webpack_require__(125);\nvar userAgent = __webpack_require__(60);\n\n// https://github.com/zloirock/core-js/issues/280\nvar WEBKIT_BUG = /Version\\/10\\.\\d+(\\.\\d+)?( Mobile\\/\\w+)? Safari\\//.test(userAgent);\n\n$export($export.P + $export.F * WEBKIT_BUG, 'String', {\n padStart: function padStart(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, true);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLnBhZC1zdGFydC5qcz9mNTc2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxXQUFXLG1CQUFPLENBQUMsR0FBZTtBQUNsQyxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlOztBQUV2QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyNzQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zdHJpbmctcGFkLXN0YXJ0LWVuZFxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkcGFkID0gcmVxdWlyZSgnLi9fc3RyaW5nLXBhZCcpO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4vX3VzZXItYWdlbnQnKTtcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzI4MFxudmFyIFdFQktJVF9CVUcgPSAvVmVyc2lvblxcLzEwXFwuXFxkKyhcXC5cXGQrKT8oIE1vYmlsZVxcL1xcdyspPyBTYWZhcmlcXC8vLnRlc3QodXNlckFnZW50KTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiBXRUJLSVRfQlVHLCAnU3RyaW5nJywge1xuICBwYWRTdGFydDogZnVuY3Rpb24gcGFkU3RhcnQobWF4TGVuZ3RoIC8qICwgZmlsbFN0cmluZyA9ICcgJyAqLykge1xuICAgIHJldHVybiAkcGFkKHRoaXMsIG1heExlbmd0aCwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQsIHRydWUpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///274\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = __webpack_require__(0);\nvar $pad = __webpack_require__(125);\nvar userAgent = __webpack_require__(60);\n\n// https://github.com/zloirock/core-js/issues/280\nvar WEBKIT_BUG = /Version\\/10\\.\\d+(\\.\\d+)?( Mobile\\/\\w+)? Safari\\//.test(userAgent);\n\n$export($export.P + $export.F * WEBKIT_BUG, 'String', {\n padEnd: function padEnd(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, false);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLnBhZC1lbmQuanM/ZWQ1MCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsV0FBVyxtQkFBTyxDQUFDLEdBQWU7QUFDbEMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTs7QUFFdkM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjc1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc3RyaW5nLXBhZC1zdGFydC1lbmRcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHBhZCA9IHJlcXVpcmUoJy4vX3N0cmluZy1wYWQnKTtcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuL191c2VyLWFnZW50Jyk7XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8yODBcbnZhciBXRUJLSVRfQlVHID0gL1ZlcnNpb25cXC8xMFxcLlxcZCsoXFwuXFxkKyk/KCBNb2JpbGVcXC9cXHcrKT8gU2FmYXJpXFwvLy50ZXN0KHVzZXJBZ2VudCk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogV0VCS0lUX0JVRywgJ1N0cmluZycsIHtcbiAgcGFkRW5kOiBmdW5jdGlvbiBwYWRFbmQobWF4TGVuZ3RoIC8qICwgZmlsbFN0cmluZyA9ICcgJyAqLykge1xuICAgIHJldHVybiAkcGFkKHRoaXMsIG1heExlbmd0aCwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQsIGZhbHNlKTtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///275\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// https://github.com/sebmarkbage/ecmascript-string-left-right-trim\n__webpack_require__(45)('trimLeft', function ($trim) {\n return function trimLeft() {\n return $trim(this, 1);\n };\n}, 'trimStart');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLnRyaW0tbGVmdC5qcz8yM2JlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjc2LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3NlYm1hcmtiYWdlL2VjbWFzY3JpcHQtc3RyaW5nLWxlZnQtcmlnaHQtdHJpbVxucmVxdWlyZSgnLi9fc3RyaW5nLXRyaW0nKSgndHJpbUxlZnQnLCBmdW5jdGlvbiAoJHRyaW0pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHRyaW1MZWZ0KCkge1xuICAgIHJldHVybiAkdHJpbSh0aGlzLCAxKTtcbiAgfTtcbn0sICd0cmltU3RhcnQnKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///276\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// https://github.com/sebmarkbage/ecmascript-string-left-right-trim\n__webpack_require__(45)('trimRight', function ($trim) {\n return function trimRight() {\n return $trim(this, 2);\n };\n}, 'trimEnd');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLnRyaW0tcmlnaHQuanM/N2MwZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsbUJBQU8sQ0FBQyxFQUFnQjtBQUN4QjtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjI3Ny5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9zZWJtYXJrYmFnZS9lY21hc2NyaXB0LXN0cmluZy1sZWZ0LXJpZ2h0LXRyaW1cbnJlcXVpcmUoJy4vX3N0cmluZy10cmltJykoJ3RyaW1SaWdodCcsIGZ1bmN0aW9uICgkdHJpbSkge1xuICByZXR1cm4gZnVuY3Rpb24gdHJpbVJpZ2h0KCkge1xuICAgIHJldHVybiAkdHJpbSh0aGlzLCAyKTtcbiAgfTtcbn0sICd0cmltRW5kJyk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///277\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// https://tc39.github.io/String.prototype.matchAll/\nvar $export = __webpack_require__(0);\nvar defined = __webpack_require__(24);\nvar toLength = __webpack_require__(6);\nvar isRegExp = __webpack_require__(56);\nvar getFlags = __webpack_require__(50);\nvar RegExpProto = RegExp.prototype;\n\nvar $RegExpStringIterator = function (regexp, string) {\n this._r = regexp;\n this._s = string;\n};\n\n__webpack_require__(78)($RegExpStringIterator, 'RegExp String', function next() {\n var match = this._r.exec(this._s);\n return { value: match, done: match === null };\n});\n\n$export($export.P, 'String', {\n matchAll: function matchAll(regexp) {\n defined(this);\n if (!isRegExp(regexp)) throw TypeError(regexp + ' is not a regexp!');\n var S = String(this);\n var flags = 'flags' in RegExpProto ? String(regexp.flags) : getFlags.call(regexp);\n var rx = new RegExp(regexp.source, ~flags.indexOf('g') ? flags : 'g' + flags);\n rx.lastIndex = toLength(regexp.lastIndex);\n return new $RegExpStringIterator(rx, S);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLm1hdGNoLWFsbC5qcz85ODhkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxjQUFjLG1CQUFPLENBQUMsRUFBWTtBQUNsQyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxlQUFlLG1CQUFPLENBQUMsRUFBYztBQUNyQyxlQUFlLG1CQUFPLENBQUMsRUFBVTtBQUNqQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3hCO0FBQ0EsVUFBVTtBQUNWLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjI3OC5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vU3RyaW5nLnByb3RvdHlwZS5tYXRjaEFsbC9cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGlzUmVnRXhwID0gcmVxdWlyZSgnLi9faXMtcmVnZXhwJyk7XG52YXIgZ2V0RmxhZ3MgPSByZXF1aXJlKCcuL19mbGFncycpO1xudmFyIFJlZ0V4cFByb3RvID0gUmVnRXhwLnByb3RvdHlwZTtcblxudmFyICRSZWdFeHBTdHJpbmdJdGVyYXRvciA9IGZ1bmN0aW9uIChyZWdleHAsIHN0cmluZykge1xuICB0aGlzLl9yID0gcmVnZXhwO1xuICB0aGlzLl9zID0gc3RyaW5nO1xufTtcblxucmVxdWlyZSgnLi9faXRlci1jcmVhdGUnKSgkUmVnRXhwU3RyaW5nSXRlcmF0b3IsICdSZWdFeHAgU3RyaW5nJywgZnVuY3Rpb24gbmV4dCgpIHtcbiAgdmFyIG1hdGNoID0gdGhpcy5fci5leGVjKHRoaXMuX3MpO1xuICByZXR1cm4geyB2YWx1ZTogbWF0Y2gsIGRvbmU6IG1hdGNoID09PSBudWxsIH07XG59KTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdTdHJpbmcnLCB7XG4gIG1hdGNoQWxsOiBmdW5jdGlvbiBtYXRjaEFsbChyZWdleHApIHtcbiAgICBkZWZpbmVkKHRoaXMpO1xuICAgIGlmICghaXNSZWdFeHAocmVnZXhwKSkgdGhyb3cgVHlwZUVycm9yKHJlZ2V4cCArICcgaXMgbm90IGEgcmVnZXhwIScpO1xuICAgIHZhciBTID0gU3RyaW5nKHRoaXMpO1xuICAgIHZhciBmbGFncyA9ICdmbGFncycgaW4gUmVnRXhwUHJvdG8gPyBTdHJpbmcocmVnZXhwLmZsYWdzKSA6IGdldEZsYWdzLmNhbGwocmVnZXhwKTtcbiAgICB2YXIgcnggPSBuZXcgUmVnRXhwKHJlZ2V4cC5zb3VyY2UsIH5mbGFncy5pbmRleE9mKCdnJykgPyBmbGFncyA6ICdnJyArIGZsYWdzKTtcbiAgICByeC5sYXN0SW5kZXggPSB0b0xlbmd0aChyZWdleHAubGFzdEluZGV4KTtcbiAgICByZXR1cm4gbmV3ICRSZWdFeHBTdHJpbmdJdGVyYXRvcihyeCwgUyk7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///278\n")},function(module,exports,__webpack_require__){eval("__webpack_require__(67)('asyncIterator');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3ltYm9sLmFzeW5jLWl0ZXJhdG9yLmpzP2FjNGQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsbUJBQU8sQ0FBQyxFQUFlIiwiZmlsZSI6IjI3OS5qcyIsInNvdXJjZXNDb250ZW50IjpbInJlcXVpcmUoJy4vX3drcy1kZWZpbmUnKSgnYXN5bmNJdGVyYXRvcicpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///279\n")},function(module,exports,__webpack_require__){eval("__webpack_require__(67)('observable');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3ltYm9sLm9ic2VydmFibGUuanM/YzdjYSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxtQkFBTyxDQUFDLEVBQWUiLCJmaWxlIjoiMjgwLmpzIiwic291cmNlc0NvbnRlbnQiOlsicmVxdWlyZSgnLi9fd2tzLWRlZmluZScpKCdvYnNlcnZhYmxlJyk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///280\n")},function(module,exports,__webpack_require__){eval("// https://github.com/tc39/proposal-object-getownpropertydescriptors\nvar $export = __webpack_require__(0);\nvar ownKeys = __webpack_require__(123);\nvar toIObject = __webpack_require__(15);\nvar gOPD = __webpack_require__(16);\nvar createProperty = __webpack_require__(82);\n\n$export($export.S, 'Object', {\n getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {\n var O = toIObject(object);\n var getDesc = gOPD.f;\n var keys = ownKeys(O);\n var result = {};\n var i = 0;\n var key, desc;\n while (keys.length > i) {\n desc = getDesc(O, key = keys[i++]);\n if (desc !== undefined) createProperty(result, key, desc);\n }\n return result;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JqZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcnMuanM/OGU2ZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGNBQWMsbUJBQU8sQ0FBQyxHQUFhO0FBQ25DLGdCQUFnQixtQkFBTyxDQUFDLEVBQWU7QUFDdkMsV0FBVyxtQkFBTyxDQUFDLEVBQWdCO0FBQ25DLHFCQUFxQixtQkFBTyxDQUFDLEVBQW9COztBQUVqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyODEuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yc1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBvd25LZXlzID0gcmVxdWlyZSgnLi9fb3duLWtleXMnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgZ09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJyk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSByZXF1aXJlKCcuL19jcmVhdGUtcHJvcGVydHknKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdPYmplY3QnLCB7XG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvcnM6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KSB7XG4gICAgdmFyIE8gPSB0b0lPYmplY3Qob2JqZWN0KTtcbiAgICB2YXIgZ2V0RGVzYyA9IGdPUEQuZjtcbiAgICB2YXIga2V5cyA9IG93bktleXMoTyk7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIga2V5LCBkZXNjO1xuICAgIHdoaWxlIChrZXlzLmxlbmd0aCA+IGkpIHtcbiAgICAgIGRlc2MgPSBnZXREZXNjKE8sIGtleSA9IGtleXNbaSsrXSk7XG4gICAgICBpZiAoZGVzYyAhPT0gdW5kZWZpbmVkKSBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIGtleSwgZGVzYyk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///281\n")},function(module,exports,__webpack_require__){eval("// https://github.com/tc39/proposal-object-values-entries\nvar $export = __webpack_require__(0);\nvar $values = __webpack_require__(126)(false);\n\n$export($export.S, 'Object', {\n values: function values(it) {\n return $values(it);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JqZWN0LnZhbHVlcy5qcz84NjE1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsY0FBYyxtQkFBTyxDQUFDLEdBQW9COztBQUUxQztBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjgyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtb2JqZWN0LXZhbHVlcy1lbnRyaWVzXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICR2YWx1ZXMgPSByZXF1aXJlKCcuL19vYmplY3QtdG8tYXJyYXknKShmYWxzZSk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnT2JqZWN0Jywge1xuICB2YWx1ZXM6IGZ1bmN0aW9uIHZhbHVlcyhpdCkge1xuICAgIHJldHVybiAkdmFsdWVzKGl0KTtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///282\n")},function(module,exports,__webpack_require__){eval("// https://github.com/tc39/proposal-object-values-entries\nvar $export = __webpack_require__(0);\nvar $entries = __webpack_require__(126)(true);\n\n$export($export.S, 'Object', {\n entries: function entries(it) {\n return $entries(it);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JqZWN0LmVudHJpZXMuanM/ZmZjMSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyxHQUFvQjs7QUFFM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjI4My5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLW9iamVjdC12YWx1ZXMtZW50cmllc1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkZW50cmllcyA9IHJlcXVpcmUoJy4vX29iamVjdC10by1hcnJheScpKHRydWUpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ09iamVjdCcsIHtcbiAgZW50cmllczogZnVuY3Rpb24gZW50cmllcyhpdCkge1xuICAgIHJldHVybiAkZW50cmllcyhpdCk7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///283\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar toObject = __webpack_require__(9);\nvar aFunction = __webpack_require__(10);\nvar $defineProperty = __webpack_require__(8);\n\n// B.2.2.2 Object.prototype.__defineGetter__(P, getter)\n__webpack_require__(7) && $export($export.P + __webpack_require__(63), 'Object', {\n __defineGetter__: function __defineGetter__(P, getter) {\n $defineProperty.f(toObject(this), P, { get: aFunction(getter), enumerable: true, configurable: true });\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JqZWN0LmRlZmluZS1nZXR0ZXIuanM/NDUwNCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGdCQUFnQixtQkFBTyxDQUFDLEVBQWU7QUFDdkMsc0JBQXNCLG1CQUFPLENBQUMsQ0FBYzs7QUFFNUM7QUFDQSxtQkFBTyxDQUFDLENBQWdCLHlCQUF5QixtQkFBTyxDQUFDLEVBQXNCO0FBQy9FO0FBQ0EsMENBQTBDLCtEQUErRDtBQUN6RztBQUNBLENBQUMiLCJmaWxlIjoiMjg0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciAkZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcblxuLy8gQi4yLjIuMiBPYmplY3QucHJvdG90eXBlLl9fZGVmaW5lR2V0dGVyX18oUCwgZ2V0dGVyKVxucmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSAmJiAkZXhwb3J0KCRleHBvcnQuUCArIHJlcXVpcmUoJy4vX29iamVjdC1mb3JjZWQtcGFtJyksICdPYmplY3QnLCB7XG4gIF9fZGVmaW5lR2V0dGVyX186IGZ1bmN0aW9uIF9fZGVmaW5lR2V0dGVyX18oUCwgZ2V0dGVyKSB7XG4gICAgJGRlZmluZVByb3BlcnR5LmYodG9PYmplY3QodGhpcyksIFAsIHsgZ2V0OiBhRnVuY3Rpb24oZ2V0dGVyKSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0pO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///284\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar toObject = __webpack_require__(9);\nvar aFunction = __webpack_require__(10);\nvar $defineProperty = __webpack_require__(8);\n\n// B.2.2.3 Object.prototype.__defineSetter__(P, setter)\n__webpack_require__(7) && $export($export.P + __webpack_require__(63), 'Object', {\n __defineSetter__: function __defineSetter__(P, setter) {\n $defineProperty.f(toObject(this), P, { set: aFunction(setter), enumerable: true, configurable: true });\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JqZWN0LmRlZmluZS1zZXR0ZXIuanM/ZmVlNyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGdCQUFnQixtQkFBTyxDQUFDLEVBQWU7QUFDdkMsc0JBQXNCLG1CQUFPLENBQUMsQ0FBYzs7QUFFNUM7QUFDQSxtQkFBTyxDQUFDLENBQWdCLHlCQUF5QixtQkFBTyxDQUFDLEVBQXNCO0FBQy9FO0FBQ0EsMENBQTBDLCtEQUErRDtBQUN6RztBQUNBLENBQUMiLCJmaWxlIjoiMjg1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciAkZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcblxuLy8gQi4yLjIuMyBPYmplY3QucHJvdG90eXBlLl9fZGVmaW5lU2V0dGVyX18oUCwgc2V0dGVyKVxucmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSAmJiAkZXhwb3J0KCRleHBvcnQuUCArIHJlcXVpcmUoJy4vX29iamVjdC1mb3JjZWQtcGFtJyksICdPYmplY3QnLCB7XG4gIF9fZGVmaW5lU2V0dGVyX186IGZ1bmN0aW9uIF9fZGVmaW5lU2V0dGVyX18oUCwgc2V0dGVyKSB7XG4gICAgJGRlZmluZVByb3BlcnR5LmYodG9PYmplY3QodGhpcyksIFAsIHsgc2V0OiBhRnVuY3Rpb24oc2V0dGVyKSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0pO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///285\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar toObject = __webpack_require__(9);\nvar toPrimitive = __webpack_require__(23);\nvar getPrototypeOf = __webpack_require__(17);\nvar getOwnPropertyDescriptor = __webpack_require__(16).f;\n\n// B.2.2.4 Object.prototype.__lookupGetter__(P)\n__webpack_require__(7) && $export($export.P + __webpack_require__(63), 'Object', {\n __lookupGetter__: function __lookupGetter__(P) {\n var O = toObject(this);\n var K = toPrimitive(P, true);\n var D;\n do {\n if (D = getOwnPropertyDescriptor(O, K)) return D.get;\n } while (O = getPrototypeOf(O));\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JqZWN0Lmxvb2t1cC1nZXR0ZXIuanM/YjlhMSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGtCQUFrQixtQkFBTyxDQUFDLEVBQWlCO0FBQzNDLHFCQUFxQixtQkFBTyxDQUFDLEVBQWU7QUFDNUMsK0JBQStCLG1CQUFPLENBQUMsRUFBZ0I7O0FBRXZEO0FBQ0EsbUJBQU8sQ0FBQyxDQUFnQix5QkFBeUIsbUJBQU8sQ0FBQyxFQUFzQjtBQUMvRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxDQUFDIiwiZmlsZSI6IjI4Ni5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJykuZjtcblxuLy8gQi4yLjIuNCBPYmplY3QucHJvdG90eXBlLl9fbG9va3VwR2V0dGVyX18oUClcbnJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgJGV4cG9ydCgkZXhwb3J0LlAgKyByZXF1aXJlKCcuL19vYmplY3QtZm9yY2VkLXBhbScpLCAnT2JqZWN0Jywge1xuICBfX2xvb2t1cEdldHRlcl9fOiBmdW5jdGlvbiBfX2xvb2t1cEdldHRlcl9fKFApIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBLID0gdG9QcmltaXRpdmUoUCwgdHJ1ZSk7XG4gICAgdmFyIEQ7XG4gICAgZG8ge1xuICAgICAgaWYgKEQgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgSykpIHJldHVybiBELmdldDtcbiAgICB9IHdoaWxlIChPID0gZ2V0UHJvdG90eXBlT2YoTykpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///286\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar toObject = __webpack_require__(9);\nvar toPrimitive = __webpack_require__(23);\nvar getPrototypeOf = __webpack_require__(17);\nvar getOwnPropertyDescriptor = __webpack_require__(16).f;\n\n// B.2.2.5 Object.prototype.__lookupSetter__(P)\n__webpack_require__(7) && $export($export.P + __webpack_require__(63), 'Object', {\n __lookupSetter__: function __lookupSetter__(P) {\n var O = toObject(this);\n var K = toPrimitive(P, true);\n var D;\n do {\n if (D = getOwnPropertyDescriptor(O, K)) return D.set;\n } while (O = getPrototypeOf(O));\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JqZWN0Lmxvb2t1cC1zZXR0ZXIuanM/NjRkNSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGtCQUFrQixtQkFBTyxDQUFDLEVBQWlCO0FBQzNDLHFCQUFxQixtQkFBTyxDQUFDLEVBQWU7QUFDNUMsK0JBQStCLG1CQUFPLENBQUMsRUFBZ0I7O0FBRXZEO0FBQ0EsbUJBQU8sQ0FBQyxDQUFnQix5QkFBeUIsbUJBQU8sQ0FBQyxFQUFzQjtBQUMvRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxDQUFDIiwiZmlsZSI6IjI4Ny5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJykuZjtcblxuLy8gQi4yLjIuNSBPYmplY3QucHJvdG90eXBlLl9fbG9va3VwU2V0dGVyX18oUClcbnJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgJGV4cG9ydCgkZXhwb3J0LlAgKyByZXF1aXJlKCcuL19vYmplY3QtZm9yY2VkLXBhbScpLCAnT2JqZWN0Jywge1xuICBfX2xvb2t1cFNldHRlcl9fOiBmdW5jdGlvbiBfX2xvb2t1cFNldHRlcl9fKFApIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBLID0gdG9QcmltaXRpdmUoUCwgdHJ1ZSk7XG4gICAgdmFyIEQ7XG4gICAgZG8ge1xuICAgICAgaWYgKEQgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgSykpIHJldHVybiBELnNldDtcbiAgICB9IHdoaWxlIChPID0gZ2V0UHJvdG90eXBlT2YoTykpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///287\n")},function(module,exports,__webpack_require__){eval("// https://github.com/DavidBruant/Map-Set.prototype.toJSON\nvar $export = __webpack_require__(0);\n\n$export($export.P + $export.R, 'Map', { toJSON: __webpack_require__(127)('Map') });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWFwLnRvLWpzb24uanM/NDcwNCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXOztBQUVqQyx1Q0FBdUMsU0FBUyxtQkFBTyxDQUFDLEdBQXVCLFVBQVUiLCJmaWxlIjoiMjg4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXRodWIuY29tL0RhdmlkQnJ1YW50L01hcC1TZXQucHJvdG90eXBlLnRvSlNPTlxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LlIsICdNYXAnLCB7IHRvSlNPTjogcmVxdWlyZSgnLi9fY29sbGVjdGlvbi10by1qc29uJykoJ01hcCcpIH0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///288\n")},function(module,exports,__webpack_require__){eval("// https://github.com/DavidBruant/Map-Set.prototype.toJSON\nvar $export = __webpack_require__(0);\n\n$export($export.P + $export.R, 'Set', { toJSON: __webpack_require__(127)('Set') });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc2V0LnRvLWpzb24uanM/ZGI5YSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXOztBQUVqQyx1Q0FBdUMsU0FBUyxtQkFBTyxDQUFDLEdBQXVCLFVBQVUiLCJmaWxlIjoiMjg5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXRodWIuY29tL0RhdmlkQnJ1YW50L01hcC1TZXQucHJvdG90eXBlLnRvSlNPTlxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LlIsICdTZXQnLCB7IHRvSlNPTjogcmVxdWlyZSgnLi9fY29sbGVjdGlvbi10by1qc29uJykoJ1NldCcpIH0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///289\n")},function(module,exports,__webpack_require__){eval("// https://tc39.github.io/proposal-setmap-offrom/#sec-map.of\n__webpack_require__(64)('Map');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWFwLm9mLmpzPzcyOWIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxtQkFBTyxDQUFDLEVBQXNCIiwiZmlsZSI6IjI5MC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS8jc2VjLW1hcC5vZlxucmVxdWlyZSgnLi9fc2V0LWNvbGxlY3Rpb24tb2YnKSgnTWFwJyk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///290\n")},function(module,exports,__webpack_require__){eval("// https://tc39.github.io/proposal-setmap-offrom/#sec-set.of\n__webpack_require__(64)('Set');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc2V0Lm9mLmpzPzk5YzUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxtQkFBTyxDQUFDLEVBQXNCIiwiZmlsZSI6IjI5MS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS8jc2VjLXNldC5vZlxucmVxdWlyZSgnLi9fc2V0LWNvbGxlY3Rpb24tb2YnKSgnU2V0Jyk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///291\n")},function(module,exports,__webpack_require__){eval("// https://tc39.github.io/proposal-setmap-offrom/#sec-weakmap.of\n__webpack_require__(64)('WeakMap');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcud2Vhay1tYXAub2YuanM/NzY0ZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLG1CQUFPLENBQUMsRUFBc0IiLCJmaWxlIjoiMjkyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tLyNzZWMtd2Vha21hcC5vZlxucmVxdWlyZSgnLi9fc2V0LWNvbGxlY3Rpb24tb2YnKSgnV2Vha01hcCcpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///292\n")},function(module,exports,__webpack_require__){eval("// https://tc39.github.io/proposal-setmap-offrom/#sec-weakset.of\n__webpack_require__(64)('WeakSet');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcud2Vhay1zZXQub2YuanM/YmRkMSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLG1CQUFPLENBQUMsRUFBc0IiLCJmaWxlIjoiMjkzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tLyNzZWMtd2Vha3NldC5vZlxucmVxdWlyZSgnLi9fc2V0LWNvbGxlY3Rpb24tb2YnKSgnV2Vha1NldCcpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///293\n")},function(module,exports,__webpack_require__){eval("// https://tc39.github.io/proposal-setmap-offrom/#sec-map.from\n__webpack_require__(65)('Map');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWFwLmZyb20uanM/NDE2YyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLG1CQUFPLENBQUMsRUFBd0IiLCJmaWxlIjoiMjk0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tLyNzZWMtbWFwLmZyb21cbnJlcXVpcmUoJy4vX3NldC1jb2xsZWN0aW9uLWZyb20nKSgnTWFwJyk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///294\n")},function(module,exports,__webpack_require__){eval("// https://tc39.github.io/proposal-setmap-offrom/#sec-set.from\n__webpack_require__(65)('Set');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc2V0LmZyb20uanM/ZGQ4YSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLG1CQUFPLENBQUMsRUFBd0IiLCJmaWxlIjoiMjk1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tLyNzZWMtc2V0LmZyb21cbnJlcXVpcmUoJy4vX3NldC1jb2xsZWN0aW9uLWZyb20nKSgnU2V0Jyk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///295\n")},function(module,exports,__webpack_require__){eval("// https://tc39.github.io/proposal-setmap-offrom/#sec-weakmap.from\n__webpack_require__(65)('WeakMap');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcud2Vhay1tYXAuZnJvbS5qcz81ZDQwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsbUJBQU8sQ0FBQyxFQUF3QiIsImZpbGUiOiIyOTYuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vI3NlYy13ZWFrbWFwLmZyb21cbnJlcXVpcmUoJy4vX3NldC1jb2xsZWN0aW9uLWZyb20nKSgnV2Vha01hcCcpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///296\n")},function(module,exports,__webpack_require__){eval("// https://tc39.github.io/proposal-setmap-offrom/#sec-weakset.from\n__webpack_require__(65)('WeakSet');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcud2Vhay1zZXQuZnJvbS5qcz81ZDkwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsbUJBQU8sQ0FBQyxFQUF3QiIsImZpbGUiOiIyOTcuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vI3NlYy13ZWFrc2V0LmZyb21cbnJlcXVpcmUoJy4vX3NldC1jb2xsZWN0aW9uLWZyb20nKSgnV2Vha1NldCcpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///297\n")},function(module,exports,__webpack_require__){eval("// https://github.com/tc39/proposal-global\nvar $export = __webpack_require__(0);\n\n$export($export.G, { global: __webpack_require__(2) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuZ2xvYmFsLmpzPzBjMzYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVzs7QUFFakMsb0JBQW9CLFNBQVMsbUJBQU8sQ0FBQyxDQUFXLEdBQUciLCJmaWxlIjoiMjk4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtZ2xvYmFsXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuRywgeyBnbG9iYWw6IHJlcXVpcmUoJy4vX2dsb2JhbCcpIH0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///298\n")},function(module,exports,__webpack_require__){eval("// https://github.com/tc39/proposal-global\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'System', { global: __webpack_require__(2) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3lzdGVtLmdsb2JhbC5qcz9hMjM0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDLDhCQUE4QixTQUFTLG1CQUFPLENBQUMsQ0FBVyxHQUFHIiwiZmlsZSI6IjI5OS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWdsb2JhbFxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdTeXN0ZW0nLCB7IGdsb2JhbDogcmVxdWlyZSgnLi9fZ2xvYmFsJykgfSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///299\n")},function(module,exports,__webpack_require__){eval("// https://github.com/ljharb/proposal-is-error\nvar $export = __webpack_require__(0);\nvar cof = __webpack_require__(20);\n\n$export($export.S, 'Error', {\n isError: function isError(it) {\n return cof(it) === 'Error';\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuZXJyb3IuaXMtZXJyb3IuanM/NDI3NiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLFVBQVUsbUJBQU8sQ0FBQyxFQUFROztBQUUxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMzAwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXRodWIuY29tL2xqaGFyYi9wcm9wb3NhbC1pcy1lcnJvclxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdFcnJvcicsIHtcbiAgaXNFcnJvcjogZnVuY3Rpb24gaXNFcnJvcihpdCkge1xuICAgIHJldHVybiBjb2YoaXQpID09PSAnRXJyb3InO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///300\n")},function(module,exports,__webpack_require__){eval("// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', {\n clamp: function clamp(x, lower, upper) {\n return Math.min(upper, Math.max(lower, x));\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5jbGFtcC5qcz8wOWUwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIzMDEuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBodHRwczovL3J3YWxkcm9uLmdpdGh1Yi5pby9wcm9wb3NhbC1tYXRoLWV4dGVuc2lvbnMvXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGNsYW1wOiBmdW5jdGlvbiBjbGFtcCh4LCBsb3dlciwgdXBwZXIpIHtcbiAgICByZXR1cm4gTWF0aC5taW4odXBwZXIsIE1hdGgubWF4KGxvd2VyLCB4KSk7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///301\n")},function(module,exports,__webpack_require__){eval("// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', { DEG_PER_RAD: Math.PI / 180 });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5kZWctcGVyLXJhZC5qcz8wYzAwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDLDRCQUE0Qiw2QkFBNkIiLCJmaWxlIjoiMzAyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9yd2FsZHJvbi5naXRodWIuaW8vcHJvcG9zYWwtbWF0aC1leHRlbnNpb25zL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywgeyBERUdfUEVSX1JBRDogTWF0aC5QSSAvIDE4MCB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///302\n")},function(module,exports,__webpack_require__){eval("// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = __webpack_require__(0);\nvar RAD_PER_DEG = 180 / Math.PI;\n\n$export($export.S, 'Math', {\n degrees: function degrees(radians) {\n return radians * RAD_PER_DEG;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5kZWdyZWVzLmpzPzI3NDgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMzAzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9yd2FsZHJvbi5naXRodWIuaW8vcHJvcG9zYWwtbWF0aC1leHRlbnNpb25zL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBSQURfUEVSX0RFRyA9IDE4MCAvIE1hdGguUEk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgZGVncmVlczogZnVuY3Rpb24gZGVncmVlcyhyYWRpYW5zKSB7XG4gICAgcmV0dXJuIHJhZGlhbnMgKiBSQURfUEVSX0RFRztcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///303\n")},function(module,exports,__webpack_require__){eval("// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = __webpack_require__(0);\nvar scale = __webpack_require__(129);\nvar fround = __webpack_require__(108);\n\n$export($export.S, 'Math', {\n fscale: function fscale(x, inLow, inHigh, outLow, outHigh) {\n return fround(scale(x, inLow, inHigh, outLow, outHigh));\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5mc2NhbGUuanM/MWY5MSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLFlBQVksbUJBQU8sQ0FBQyxHQUFlO0FBQ25DLGFBQWEsbUJBQU8sQ0FBQyxHQUFnQjs7QUFFckM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjMwNC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vcndhbGRyb24uZ2l0aHViLmlvL3Byb3Bvc2FsLW1hdGgtZXh0ZW5zaW9ucy9cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgc2NhbGUgPSByZXF1aXJlKCcuL19tYXRoLXNjYWxlJyk7XG52YXIgZnJvdW5kID0gcmVxdWlyZSgnLi9fbWF0aC1mcm91bmQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBmc2NhbGU6IGZ1bmN0aW9uIGZzY2FsZSh4LCBpbkxvdywgaW5IaWdoLCBvdXRMb3csIG91dEhpZ2gpIHtcbiAgICByZXR1cm4gZnJvdW5kKHNjYWxlKHgsIGluTG93LCBpbkhpZ2gsIG91dExvdywgb3V0SGlnaCkpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///304\n")},function(module,exports,__webpack_require__){eval("// https://gist.github.com/BrendanEich/4294d5c212a6d2254703\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', {\n iaddh: function iaddh(x0, x1, y0, y1) {\n var $x0 = x0 >>> 0;\n var $x1 = x1 >>> 0;\n var $y0 = y0 >>> 0;\n return $x1 + (y1 >>> 0) + (($x0 & $y0 | ($x0 | $y0) & ~($x0 + $y0 >>> 0)) >>> 31) | 0;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5pYWRkaC5qcz85YzAwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIzMDUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9CcmVuZGFuRWljaC80Mjk0ZDVjMjEyYTZkMjI1NDcwM1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBpYWRkaDogZnVuY3Rpb24gaWFkZGgoeDAsIHgxLCB5MCwgeTEpIHtcbiAgICB2YXIgJHgwID0geDAgPj4+IDA7XG4gICAgdmFyICR4MSA9IHgxID4+PiAwO1xuICAgIHZhciAkeTAgPSB5MCA+Pj4gMDtcbiAgICByZXR1cm4gJHgxICsgKHkxID4+PiAwKSArICgoJHgwICYgJHkwIHwgKCR4MCB8ICR5MCkgJiB+KCR4MCArICR5MCA+Pj4gMCkpID4+PiAzMSkgfCAwO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///305\n")},function(module,exports,__webpack_require__){eval("// https://gist.github.com/BrendanEich/4294d5c212a6d2254703\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', {\n isubh: function isubh(x0, x1, y0, y1) {\n var $x0 = x0 >>> 0;\n var $x1 = x1 >>> 0;\n var $y0 = y0 >>> 0;\n return $x1 - (y1 >>> 0) - ((~$x0 & $y0 | ~($x0 ^ $y0) & $x0 - $y0 >>> 0) >>> 31) | 0;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5pc3ViaC5qcz8yZjc4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIzMDYuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9CcmVuZGFuRWljaC80Mjk0ZDVjMjEyYTZkMjI1NDcwM1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBpc3ViaDogZnVuY3Rpb24gaXN1YmgoeDAsIHgxLCB5MCwgeTEpIHtcbiAgICB2YXIgJHgwID0geDAgPj4+IDA7XG4gICAgdmFyICR4MSA9IHgxID4+PiAwO1xuICAgIHZhciAkeTAgPSB5MCA+Pj4gMDtcbiAgICByZXR1cm4gJHgxIC0gKHkxID4+PiAwKSAtICgofiR4MCAmICR5MCB8IH4oJHgwIF4gJHkwKSAmICR4MCAtICR5MCA+Pj4gMCkgPj4+IDMxKSB8IDA7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///306\n")},function(module,exports,__webpack_require__){eval("// https://gist.github.com/BrendanEich/4294d5c212a6d2254703\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', {\n imulh: function imulh(u, v) {\n var UINT16 = 0xffff;\n var $u = +u;\n var $v = +v;\n var u0 = $u & UINT16;\n var v0 = $v & UINT16;\n var u1 = $u >> 16;\n var v1 = $v >> 16;\n var t = (u1 * v0 >>> 0) + (u0 * v0 >>> 16);\n return u1 * v1 + (t >> 16) + ((u0 * v1 >>> 0) + (t & UINT16) >> 16);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5pbXVsaC5qcz9iNGMyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMzA3LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vQnJlbmRhbkVpY2gvNDI5NGQ1YzIxMmE2ZDIyNTQ3MDNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgaW11bGg6IGZ1bmN0aW9uIGltdWxoKHUsIHYpIHtcbiAgICB2YXIgVUlOVDE2ID0gMHhmZmZmO1xuICAgIHZhciAkdSA9ICt1O1xuICAgIHZhciAkdiA9ICt2O1xuICAgIHZhciB1MCA9ICR1ICYgVUlOVDE2O1xuICAgIHZhciB2MCA9ICR2ICYgVUlOVDE2O1xuICAgIHZhciB1MSA9ICR1ID4+IDE2O1xuICAgIHZhciB2MSA9ICR2ID4+IDE2O1xuICAgIHZhciB0ID0gKHUxICogdjAgPj4+IDApICsgKHUwICogdjAgPj4+IDE2KTtcbiAgICByZXR1cm4gdTEgKiB2MSArICh0ID4+IDE2KSArICgodTAgKiB2MSA+Pj4gMCkgKyAodCAmIFVJTlQxNikgPj4gMTYpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///307\n")},function(module,exports,__webpack_require__){eval("// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', { RAD_PER_DEG: 180 / Math.PI });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5yYWQtcGVyLWRlZy5qcz8xZjE4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDLDRCQUE0Qiw2QkFBNkIiLCJmaWxlIjoiMzA4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9yd2FsZHJvbi5naXRodWIuaW8vcHJvcG9zYWwtbWF0aC1leHRlbnNpb25zL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywgeyBSQURfUEVSX0RFRzogMTgwIC8gTWF0aC5QSSB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///308\n")},function(module,exports,__webpack_require__){eval("// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = __webpack_require__(0);\nvar DEG_PER_RAD = Math.PI / 180;\n\n$export($export.S, 'Math', {\n radians: function radians(degrees) {\n return degrees * DEG_PER_RAD;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5yYWRpYW5zLmpzPzY5MmIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMzA5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9yd2FsZHJvbi5naXRodWIuaW8vcHJvcG9zYWwtbWF0aC1leHRlbnNpb25zL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBERUdfUEVSX1JBRCA9IE1hdGguUEkgLyAxODA7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgcmFkaWFuczogZnVuY3Rpb24gcmFkaWFucyhkZWdyZWVzKSB7XG4gICAgcmV0dXJuIGRlZ3JlZXMgKiBERUdfUEVSX1JBRDtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///309\n")},function(module,exports,__webpack_require__){eval("// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', { scale: __webpack_require__(129) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5zY2FsZS5qcz9jNzc1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDLDRCQUE0QixRQUFRLG1CQUFPLENBQUMsR0FBZSxHQUFHIiwiZmlsZSI6IjMxMC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vcndhbGRyb24uZ2l0aHViLmlvL3Byb3Bvc2FsLW1hdGgtZXh0ZW5zaW9ucy9cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHsgc2NhbGU6IHJlcXVpcmUoJy4vX21hdGgtc2NhbGUnKSB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///310\n")},function(module,exports,__webpack_require__){eval("// https://gist.github.com/BrendanEich/4294d5c212a6d2254703\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', {\n umulh: function umulh(u, v) {\n var UINT16 = 0xffff;\n var $u = +u;\n var $v = +v;\n var u0 = $u & UINT16;\n var v0 = $v & UINT16;\n var u1 = $u >>> 16;\n var v1 = $v >>> 16;\n var t = (u1 * v0 >>> 0) + (u0 * v0 >>> 16);\n return u1 * v1 + (t >>> 16) + ((u0 * v1 >>> 0) + (t & UINT16) >>> 16);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC51bXVsaC5qcz84YTVjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMzExLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vQnJlbmRhbkVpY2gvNDI5NGQ1YzIxMmE2ZDIyNTQ3MDNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgdW11bGg6IGZ1bmN0aW9uIHVtdWxoKHUsIHYpIHtcbiAgICB2YXIgVUlOVDE2ID0gMHhmZmZmO1xuICAgIHZhciAkdSA9ICt1O1xuICAgIHZhciAkdiA9ICt2O1xuICAgIHZhciB1MCA9ICR1ICYgVUlOVDE2O1xuICAgIHZhciB2MCA9ICR2ICYgVUlOVDE2O1xuICAgIHZhciB1MSA9ICR1ID4+PiAxNjtcbiAgICB2YXIgdjEgPSAkdiA+Pj4gMTY7XG4gICAgdmFyIHQgPSAodTEgKiB2MCA+Pj4gMCkgKyAodTAgKiB2MCA+Pj4gMTYpO1xuICAgIHJldHVybiB1MSAqIHYxICsgKHQgPj4+IDE2KSArICgodTAgKiB2MSA+Pj4gMCkgKyAodCAmIFVJTlQxNikgPj4+IDE2KTtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///311\n")},function(module,exports,__webpack_require__){eval("// http://jfbastien.github.io/papers/Math.signbit.html\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', { signbit: function signbit(x) {\n // eslint-disable-next-line no-self-compare\n return (x = +x) != x ? x : x == 0 ? 1 / x == Infinity : x > 0;\n} });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5zaWduYml0LmpzP2VkN2UiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVzs7QUFFakMsNEJBQTRCO0FBQzVCO0FBQ0E7QUFDQSxDQUFDLEVBQUUiLCJmaWxlIjoiMzEyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cDovL2pmYmFzdGllbi5naXRodWIuaW8vcGFwZXJzL01hdGguc2lnbmJpdC5odG1sXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7IHNpZ25iaXQ6IGZ1bmN0aW9uIHNpZ25iaXQoeCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gIHJldHVybiAoeCA9ICt4KSAhPSB4ID8geCA6IHggPT0gMCA/IDEgLyB4ID09IEluZmluaXR5IDogeCA+IDA7XG59IH0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///312\n")},function(module,exports,__webpack_require__){"use strict";eval("// https://github.com/tc39/proposal-promise-finally\n\nvar $export = __webpack_require__(0);\nvar core = __webpack_require__(18);\nvar global = __webpack_require__(2);\nvar speciesConstructor = __webpack_require__(51);\nvar promiseResolve = __webpack_require__(116);\n\n$export($export.P + $export.R, 'Promise', { 'finally': function (onFinally) {\n var C = speciesConstructor(this, core.Promise || global.Promise);\n var isFunction = typeof onFinally == 'function';\n return this.then(\n isFunction ? function (x) {\n return promiseResolve(C, onFinally()).then(function () { return x; });\n } : onFinally,\n isFunction ? function (e) {\n return promiseResolve(C, onFinally()).then(function () { throw e; });\n } : onFinally\n );\n} });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucHJvbWlzZS5maW5hbGx5LmpzPzA5N2QiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDYTtBQUNiLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLFdBQVcsbUJBQU8sQ0FBQyxFQUFTO0FBQzVCLGFBQWEsbUJBQU8sQ0FBQyxDQUFXO0FBQ2hDLHlCQUF5QixtQkFBTyxDQUFDLEVBQXdCO0FBQ3pELHFCQUFxQixtQkFBTyxDQUFDLEdBQW9COztBQUVqRCwyQ0FBMkM7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4REFBOEQsVUFBVSxFQUFFO0FBQzFFLEtBQUs7QUFDTDtBQUNBLDhEQUE4RCxTQUFTLEVBQUU7QUFDekUsS0FBSztBQUNMO0FBQ0EsQ0FBQyxFQUFFIiwiZmlsZSI6IjMxMy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXByb21pc2UtZmluYWxseVxuJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4vX3NwZWNpZXMtY29uc3RydWN0b3InKTtcbnZhciBwcm9taXNlUmVzb2x2ZSA9IHJlcXVpcmUoJy4vX3Byb21pc2UtcmVzb2x2ZScpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuUiwgJ1Byb21pc2UnLCB7ICdmaW5hbGx5JzogZnVuY3Rpb24gKG9uRmluYWxseSkge1xuICB2YXIgQyA9IHNwZWNpZXNDb25zdHJ1Y3Rvcih0aGlzLCBjb3JlLlByb21pc2UgfHwgZ2xvYmFsLlByb21pc2UpO1xuICB2YXIgaXNGdW5jdGlvbiA9IHR5cGVvZiBvbkZpbmFsbHkgPT0gJ2Z1bmN0aW9uJztcbiAgcmV0dXJuIHRoaXMudGhlbihcbiAgICBpc0Z1bmN0aW9uID8gZnVuY3Rpb24gKHgpIHtcbiAgICAgIHJldHVybiBwcm9taXNlUmVzb2x2ZShDLCBvbkZpbmFsbHkoKSkudGhlbihmdW5jdGlvbiAoKSB7IHJldHVybiB4OyB9KTtcbiAgICB9IDogb25GaW5hbGx5LFxuICAgIGlzRnVuY3Rpb24gPyBmdW5jdGlvbiAoZSkge1xuICAgICAgcmV0dXJuIHByb21pc2VSZXNvbHZlKEMsIG9uRmluYWxseSgpKS50aGVuKGZ1bmN0aW9uICgpIHsgdGhyb3cgZTsgfSk7XG4gICAgfSA6IG9uRmluYWxseVxuICApO1xufSB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///313\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// https://github.com/tc39/proposal-promise-try\nvar $export = __webpack_require__(0);\nvar newPromiseCapability = __webpack_require__(91);\nvar perform = __webpack_require__(115);\n\n$export($export.S, 'Promise', { 'try': function (callbackfn) {\n var promiseCapability = newPromiseCapability.f(this);\n var result = perform(callbackfn);\n (result.e ? promiseCapability.reject : promiseCapability.resolve)(result.v);\n return promiseCapability.promise;\n} });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucHJvbWlzZS50cnkuanM/YTljYyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsMkJBQTJCLG1CQUFPLENBQUMsRUFBMkI7QUFDOUQsY0FBYyxtQkFBTyxDQUFDLEdBQVk7O0FBRWxDLCtCQUErQjtBQUMvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsRUFBRSIsImZpbGUiOiIzMTQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1wcm9taXNlLXRyeVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IHJlcXVpcmUoJy4vX25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcbnZhciBwZXJmb3JtID0gcmVxdWlyZSgnLi9fcGVyZm9ybScpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1Byb21pc2UnLCB7ICd0cnknOiBmdW5jdGlvbiAoY2FsbGJhY2tmbikge1xuICB2YXIgcHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eS5mKHRoaXMpO1xuICB2YXIgcmVzdWx0ID0gcGVyZm9ybShjYWxsYmFja2ZuKTtcbiAgKHJlc3VsdC5lID8gcHJvbWlzZUNhcGFiaWxpdHkucmVqZWN0IDogcHJvbWlzZUNhcGFiaWxpdHkucmVzb2x2ZSkocmVzdWx0LnYpO1xuICByZXR1cm4gcHJvbWlzZUNhcGFiaWxpdHkucHJvbWlzZTtcbn0gfSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///314\n")},function(module,exports,__webpack_require__){eval("var metadata = __webpack_require__(28);\nvar anObject = __webpack_require__(1);\nvar toMetaKey = metadata.key;\nvar ordinaryDefineOwnMetadata = metadata.set;\n\nmetadata.exp({ defineMetadata: function defineMetadata(metadataKey, metadataValue, target, targetKey) {\n ordinaryDefineOwnMetadata(metadataKey, metadataValue, anObject(target), toMetaKey(targetKey));\n} });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5kZWZpbmUtbWV0YWRhdGEuanM/ZTNkMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxlQUFlLG1CQUFPLENBQUMsRUFBYTtBQUNwQyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQztBQUNBOztBQUVBLGNBQWM7QUFDZDtBQUNBLENBQUMsRUFBRSIsImZpbGUiOiIzMTUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgbWV0YWRhdGEgPSByZXF1aXJlKCcuL19tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgdG9NZXRhS2V5ID0gbWV0YWRhdGEua2V5O1xudmFyIG9yZGluYXJ5RGVmaW5lT3duTWV0YWRhdGEgPSBtZXRhZGF0YS5zZXQ7XG5cbm1ldGFkYXRhLmV4cCh7IGRlZmluZU1ldGFkYXRhOiBmdW5jdGlvbiBkZWZpbmVNZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSwgdGFyZ2V0LCB0YXJnZXRLZXkpIHtcbiAgb3JkaW5hcnlEZWZpbmVPd25NZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSwgYW5PYmplY3QodGFyZ2V0KSwgdG9NZXRhS2V5KHRhcmdldEtleSkpO1xufSB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///315\n")},function(module,exports,__webpack_require__){eval("var metadata = __webpack_require__(28);\nvar anObject = __webpack_require__(1);\nvar toMetaKey = metadata.key;\nvar getOrCreateMetadataMap = metadata.map;\nvar store = metadata.store;\n\nmetadata.exp({ deleteMetadata: function deleteMetadata(metadataKey, target /* , targetKey */) {\n var targetKey = arguments.length < 3 ? undefined : toMetaKey(arguments[2]);\n var metadataMap = getOrCreateMetadataMap(anObject(target), targetKey, false);\n if (metadataMap === undefined || !metadataMap['delete'](metadataKey)) return false;\n if (metadataMap.size) return true;\n var targetMetadata = store.get(target);\n targetMetadata['delete'](targetKey);\n return !!targetMetadata.size || store['delete'](target);\n} });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5kZWxldGUtbWV0YWRhdGEuanM/Y2VhZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxlQUFlLG1CQUFPLENBQUMsRUFBYTtBQUNwQyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQztBQUNBO0FBQ0E7O0FBRUEsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxFQUFFIiwiZmlsZSI6IjMxNi5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBtZXRhZGF0YSA9IHJlcXVpcmUoJy4vX21ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciB0b01ldGFLZXkgPSBtZXRhZGF0YS5rZXk7XG52YXIgZ2V0T3JDcmVhdGVNZXRhZGF0YU1hcCA9IG1ldGFkYXRhLm1hcDtcbnZhciBzdG9yZSA9IG1ldGFkYXRhLnN0b3JlO1xuXG5tZXRhZGF0YS5leHAoeyBkZWxldGVNZXRhZGF0YTogZnVuY3Rpb24gZGVsZXRlTWV0YWRhdGEobWV0YWRhdGFLZXksIHRhcmdldCAvKiAsIHRhcmdldEtleSAqLykge1xuICB2YXIgdGFyZ2V0S2V5ID0gYXJndW1lbnRzLmxlbmd0aCA8IDMgPyB1bmRlZmluZWQgOiB0b01ldGFLZXkoYXJndW1lbnRzWzJdKTtcbiAgdmFyIG1ldGFkYXRhTWFwID0gZ2V0T3JDcmVhdGVNZXRhZGF0YU1hcChhbk9iamVjdCh0YXJnZXQpLCB0YXJnZXRLZXksIGZhbHNlKTtcbiAgaWYgKG1ldGFkYXRhTWFwID09PSB1bmRlZmluZWQgfHwgIW1ldGFkYXRhTWFwWydkZWxldGUnXShtZXRhZGF0YUtleSkpIHJldHVybiBmYWxzZTtcbiAgaWYgKG1ldGFkYXRhTWFwLnNpemUpIHJldHVybiB0cnVlO1xuICB2YXIgdGFyZ2V0TWV0YWRhdGEgPSBzdG9yZS5nZXQodGFyZ2V0KTtcbiAgdGFyZ2V0TWV0YWRhdGFbJ2RlbGV0ZSddKHRhcmdldEtleSk7XG4gIHJldHVybiAhIXRhcmdldE1ldGFkYXRhLnNpemUgfHwgc3RvcmVbJ2RlbGV0ZSddKHRhcmdldCk7XG59IH0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///316\n")},function(module,exports,__webpack_require__){eval("var metadata = __webpack_require__(28);\nvar anObject = __webpack_require__(1);\nvar getPrototypeOf = __webpack_require__(17);\nvar ordinaryHasOwnMetadata = metadata.has;\nvar ordinaryGetOwnMetadata = metadata.get;\nvar toMetaKey = metadata.key;\n\nvar ordinaryGetMetadata = function (MetadataKey, O, P) {\n var hasOwn = ordinaryHasOwnMetadata(MetadataKey, O, P);\n if (hasOwn) return ordinaryGetOwnMetadata(MetadataKey, O, P);\n var parent = getPrototypeOf(O);\n return parent !== null ? ordinaryGetMetadata(MetadataKey, parent, P) : undefined;\n};\n\nmetadata.exp({ getMetadata: function getMetadata(metadataKey, target /* , targetKey */) {\n return ordinaryGetMetadata(metadataKey, anObject(target), arguments.length < 3 ? undefined : toMetaKey(arguments[2]));\n} });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtbWV0YWRhdGEuanM/ZTM5NCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxlQUFlLG1CQUFPLENBQUMsRUFBYTtBQUNwQyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxxQkFBcUIsbUJBQU8sQ0FBQyxFQUFlO0FBQzVDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsY0FBYztBQUNkO0FBQ0EsQ0FBQyxFQUFFIiwiZmlsZSI6IjMxNy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBtZXRhZGF0YSA9IHJlcXVpcmUoJy4vX21ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBvcmRpbmFyeUhhc093bk1ldGFkYXRhID0gbWV0YWRhdGEuaGFzO1xudmFyIG9yZGluYXJ5R2V0T3duTWV0YWRhdGEgPSBtZXRhZGF0YS5nZXQ7XG52YXIgdG9NZXRhS2V5ID0gbWV0YWRhdGEua2V5O1xuXG52YXIgb3JkaW5hcnlHZXRNZXRhZGF0YSA9IGZ1bmN0aW9uIChNZXRhZGF0YUtleSwgTywgUCkge1xuICB2YXIgaGFzT3duID0gb3JkaW5hcnlIYXNPd25NZXRhZGF0YShNZXRhZGF0YUtleSwgTywgUCk7XG4gIGlmIChoYXNPd24pIHJldHVybiBvcmRpbmFyeUdldE93bk1ldGFkYXRhKE1ldGFkYXRhS2V5LCBPLCBQKTtcbiAgdmFyIHBhcmVudCA9IGdldFByb3RvdHlwZU9mKE8pO1xuICByZXR1cm4gcGFyZW50ICE9PSBudWxsID8gb3JkaW5hcnlHZXRNZXRhZGF0YShNZXRhZGF0YUtleSwgcGFyZW50LCBQKSA6IHVuZGVmaW5lZDtcbn07XG5cbm1ldGFkYXRhLmV4cCh7IGdldE1ldGFkYXRhOiBmdW5jdGlvbiBnZXRNZXRhZGF0YShtZXRhZGF0YUtleSwgdGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gIHJldHVybiBvcmRpbmFyeUdldE1ldGFkYXRhKG1ldGFkYXRhS2V5LCBhbk9iamVjdCh0YXJnZXQpLCBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHVuZGVmaW5lZCA6IHRvTWV0YUtleShhcmd1bWVudHNbMl0pKTtcbn0gfSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///317\n")},function(module,exports,__webpack_require__){eval("var Set = __webpack_require__(119);\nvar from = __webpack_require__(128);\nvar metadata = __webpack_require__(28);\nvar anObject = __webpack_require__(1);\nvar getPrototypeOf = __webpack_require__(17);\nvar ordinaryOwnMetadataKeys = metadata.keys;\nvar toMetaKey = metadata.key;\n\nvar ordinaryMetadataKeys = function (O, P) {\n var oKeys = ordinaryOwnMetadataKeys(O, P);\n var parent = getPrototypeOf(O);\n if (parent === null) return oKeys;\n var pKeys = ordinaryMetadataKeys(parent, P);\n return pKeys.length ? oKeys.length ? from(new Set(oKeys.concat(pKeys))) : pKeys : oKeys;\n};\n\nmetadata.exp({ getMetadataKeys: function getMetadataKeys(target /* , targetKey */) {\n return ordinaryMetadataKeys(anObject(target), arguments.length < 2 ? undefined : toMetaKey(arguments[1]));\n} });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtbWV0YWRhdGEta2V5cy5qcz9iODBiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFVBQVUsbUJBQU8sQ0FBQyxHQUFXO0FBQzdCLFdBQVcsbUJBQU8sQ0FBQyxHQUF3QjtBQUMzQyxlQUFlLG1CQUFPLENBQUMsRUFBYTtBQUNwQyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxxQkFBcUIsbUJBQU8sQ0FBQyxFQUFlO0FBQzVDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsY0FBYztBQUNkO0FBQ0EsQ0FBQyxFQUFFIiwiZmlsZSI6IjMxOC5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBTZXQgPSByZXF1aXJlKCcuL2VzNi5zZXQnKTtcbnZhciBmcm9tID0gcmVxdWlyZSgnLi9fYXJyYXktZnJvbS1pdGVyYWJsZScpO1xudmFyIG1ldGFkYXRhID0gcmVxdWlyZSgnLi9fbWV0YWRhdGEnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIG9yZGluYXJ5T3duTWV0YWRhdGFLZXlzID0gbWV0YWRhdGEua2V5cztcbnZhciB0b01ldGFLZXkgPSBtZXRhZGF0YS5rZXk7XG5cbnZhciBvcmRpbmFyeU1ldGFkYXRhS2V5cyA9IGZ1bmN0aW9uIChPLCBQKSB7XG4gIHZhciBvS2V5cyA9IG9yZGluYXJ5T3duTWV0YWRhdGFLZXlzKE8sIFApO1xuICB2YXIgcGFyZW50ID0gZ2V0UHJvdG90eXBlT2YoTyk7XG4gIGlmIChwYXJlbnQgPT09IG51bGwpIHJldHVybiBvS2V5cztcbiAgdmFyIHBLZXlzID0gb3JkaW5hcnlNZXRhZGF0YUtleXMocGFyZW50LCBQKTtcbiAgcmV0dXJuIHBLZXlzLmxlbmd0aCA/IG9LZXlzLmxlbmd0aCA/IGZyb20obmV3IFNldChvS2V5cy5jb25jYXQocEtleXMpKSkgOiBwS2V5cyA6IG9LZXlzO1xufTtcblxubWV0YWRhdGEuZXhwKHsgZ2V0TWV0YWRhdGFLZXlzOiBmdW5jdGlvbiBnZXRNZXRhZGF0YUtleXModGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gIHJldHVybiBvcmRpbmFyeU1ldGFkYXRhS2V5cyhhbk9iamVjdCh0YXJnZXQpLCBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IHVuZGVmaW5lZCA6IHRvTWV0YUtleShhcmd1bWVudHNbMV0pKTtcbn0gfSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///318\n")},function(module,exports,__webpack_require__){eval("var metadata = __webpack_require__(28);\nvar anObject = __webpack_require__(1);\nvar ordinaryGetOwnMetadata = metadata.get;\nvar toMetaKey = metadata.key;\n\nmetadata.exp({ getOwnMetadata: function getOwnMetadata(metadataKey, target /* , targetKey */) {\n return ordinaryGetOwnMetadata(metadataKey, anObject(target)\n , arguments.length < 3 ? undefined : toMetaKey(arguments[2]));\n} });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtb3duLW1ldGFkYXRhLmpzPzA2YTciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxtQkFBTyxDQUFDLEVBQWE7QUFDcEMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckM7QUFDQTs7QUFFQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBLENBQUMsRUFBRSIsImZpbGUiOiIzMTkuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgbWV0YWRhdGEgPSByZXF1aXJlKCcuL19tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgb3JkaW5hcnlHZXRPd25NZXRhZGF0YSA9IG1ldGFkYXRhLmdldDtcbnZhciB0b01ldGFLZXkgPSBtZXRhZGF0YS5rZXk7XG5cbm1ldGFkYXRhLmV4cCh7IGdldE93bk1ldGFkYXRhOiBmdW5jdGlvbiBnZXRPd25NZXRhZGF0YShtZXRhZGF0YUtleSwgdGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gIHJldHVybiBvcmRpbmFyeUdldE93bk1ldGFkYXRhKG1ldGFkYXRhS2V5LCBhbk9iamVjdCh0YXJnZXQpXG4gICAgLCBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHVuZGVmaW5lZCA6IHRvTWV0YUtleShhcmd1bWVudHNbMl0pKTtcbn0gfSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///319\n")},function(module,exports,__webpack_require__){eval("var metadata = __webpack_require__(28);\nvar anObject = __webpack_require__(1);\nvar ordinaryOwnMetadataKeys = metadata.keys;\nvar toMetaKey = metadata.key;\n\nmetadata.exp({ getOwnMetadataKeys: function getOwnMetadataKeys(target /* , targetKey */) {\n return ordinaryOwnMetadataKeys(anObject(target), arguments.length < 2 ? undefined : toMetaKey(arguments[1]));\n} });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtb3duLW1ldGFkYXRhLWtleXMuanM/N2NkZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxlQUFlLG1CQUFPLENBQUMsRUFBYTtBQUNwQyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQztBQUNBOztBQUVBLGNBQWM7QUFDZDtBQUNBLENBQUMsRUFBRSIsImZpbGUiOiIzMjAuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgbWV0YWRhdGEgPSByZXF1aXJlKCcuL19tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgb3JkaW5hcnlPd25NZXRhZGF0YUtleXMgPSBtZXRhZGF0YS5rZXlzO1xudmFyIHRvTWV0YUtleSA9IG1ldGFkYXRhLmtleTtcblxubWV0YWRhdGEuZXhwKHsgZ2V0T3duTWV0YWRhdGFLZXlzOiBmdW5jdGlvbiBnZXRPd25NZXRhZGF0YUtleXModGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gIHJldHVybiBvcmRpbmFyeU93bk1ldGFkYXRhS2V5cyhhbk9iamVjdCh0YXJnZXQpLCBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IHVuZGVmaW5lZCA6IHRvTWV0YUtleShhcmd1bWVudHNbMV0pKTtcbn0gfSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///320\n")},function(module,exports,__webpack_require__){eval("var metadata = __webpack_require__(28);\nvar anObject = __webpack_require__(1);\nvar getPrototypeOf = __webpack_require__(17);\nvar ordinaryHasOwnMetadata = metadata.has;\nvar toMetaKey = metadata.key;\n\nvar ordinaryHasMetadata = function (MetadataKey, O, P) {\n var hasOwn = ordinaryHasOwnMetadata(MetadataKey, O, P);\n if (hasOwn) return true;\n var parent = getPrototypeOf(O);\n return parent !== null ? ordinaryHasMetadata(MetadataKey, parent, P) : false;\n};\n\nmetadata.exp({ hasMetadata: function hasMetadata(metadataKey, target /* , targetKey */) {\n return ordinaryHasMetadata(metadataKey, anObject(target), arguments.length < 3 ? undefined : toMetaKey(arguments[2]));\n} });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5oYXMtbWV0YWRhdGEuanM/ODk2ZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxlQUFlLG1CQUFPLENBQUMsRUFBYTtBQUNwQyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxxQkFBcUIsbUJBQU8sQ0FBQyxFQUFlO0FBQzVDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGNBQWM7QUFDZDtBQUNBLENBQUMsRUFBRSIsImZpbGUiOiIzMjEuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgbWV0YWRhdGEgPSByZXF1aXJlKCcuL19tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgb3JkaW5hcnlIYXNPd25NZXRhZGF0YSA9IG1ldGFkYXRhLmhhcztcbnZhciB0b01ldGFLZXkgPSBtZXRhZGF0YS5rZXk7XG5cbnZhciBvcmRpbmFyeUhhc01ldGFkYXRhID0gZnVuY3Rpb24gKE1ldGFkYXRhS2V5LCBPLCBQKSB7XG4gIHZhciBoYXNPd24gPSBvcmRpbmFyeUhhc093bk1ldGFkYXRhKE1ldGFkYXRhS2V5LCBPLCBQKTtcbiAgaWYgKGhhc093bikgcmV0dXJuIHRydWU7XG4gIHZhciBwYXJlbnQgPSBnZXRQcm90b3R5cGVPZihPKTtcbiAgcmV0dXJuIHBhcmVudCAhPT0gbnVsbCA/IG9yZGluYXJ5SGFzTWV0YWRhdGEoTWV0YWRhdGFLZXksIHBhcmVudCwgUCkgOiBmYWxzZTtcbn07XG5cbm1ldGFkYXRhLmV4cCh7IGhhc01ldGFkYXRhOiBmdW5jdGlvbiBoYXNNZXRhZGF0YShtZXRhZGF0YUtleSwgdGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gIHJldHVybiBvcmRpbmFyeUhhc01ldGFkYXRhKG1ldGFkYXRhS2V5LCBhbk9iamVjdCh0YXJnZXQpLCBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHVuZGVmaW5lZCA6IHRvTWV0YUtleShhcmd1bWVudHNbMl0pKTtcbn0gfSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///321\n")},function(module,exports,__webpack_require__){eval("var metadata = __webpack_require__(28);\nvar anObject = __webpack_require__(1);\nvar ordinaryHasOwnMetadata = metadata.has;\nvar toMetaKey = metadata.key;\n\nmetadata.exp({ hasOwnMetadata: function hasOwnMetadata(metadataKey, target /* , targetKey */) {\n return ordinaryHasOwnMetadata(metadataKey, anObject(target)\n , arguments.length < 3 ? undefined : toMetaKey(arguments[2]));\n} });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5oYXMtb3duLW1ldGFkYXRhLmpzP2VjMzkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxtQkFBTyxDQUFDLEVBQWE7QUFDcEMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckM7QUFDQTs7QUFFQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBLENBQUMsRUFBRSIsImZpbGUiOiIzMjIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgbWV0YWRhdGEgPSByZXF1aXJlKCcuL19tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgb3JkaW5hcnlIYXNPd25NZXRhZGF0YSA9IG1ldGFkYXRhLmhhcztcbnZhciB0b01ldGFLZXkgPSBtZXRhZGF0YS5rZXk7XG5cbm1ldGFkYXRhLmV4cCh7IGhhc093bk1ldGFkYXRhOiBmdW5jdGlvbiBoYXNPd25NZXRhZGF0YShtZXRhZGF0YUtleSwgdGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gIHJldHVybiBvcmRpbmFyeUhhc093bk1ldGFkYXRhKG1ldGFkYXRhS2V5LCBhbk9iamVjdCh0YXJnZXQpXG4gICAgLCBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHVuZGVmaW5lZCA6IHRvTWV0YUtleShhcmd1bWVudHNbMl0pKTtcbn0gfSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///322\n")},function(module,exports,__webpack_require__){eval("var $metadata = __webpack_require__(28);\nvar anObject = __webpack_require__(1);\nvar aFunction = __webpack_require__(10);\nvar toMetaKey = $metadata.key;\nvar ordinaryDefineOwnMetadata = $metadata.set;\n\n$metadata.exp({ metadata: function metadata(metadataKey, metadataValue) {\n return function decorator(target, targetKey) {\n ordinaryDefineOwnMetadata(\n metadataKey, metadataValue,\n (targetKey !== undefined ? anObject : aFunction)(target),\n toMetaKey(targetKey)\n );\n };\n} });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5tZXRhZGF0YS5qcz8zYTljIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGdCQUFnQixtQkFBTyxDQUFDLEVBQWE7QUFDckMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2QztBQUNBOztBQUVBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsRUFBRSIsImZpbGUiOiIzMjMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgJG1ldGFkYXRhID0gcmVxdWlyZSgnLi9fbWV0YWRhdGEnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciB0b01ldGFLZXkgPSAkbWV0YWRhdGEua2V5O1xudmFyIG9yZGluYXJ5RGVmaW5lT3duTWV0YWRhdGEgPSAkbWV0YWRhdGEuc2V0O1xuXG4kbWV0YWRhdGEuZXhwKHsgbWV0YWRhdGE6IGZ1bmN0aW9uIG1ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbiBkZWNvcmF0b3IodGFyZ2V0LCB0YXJnZXRLZXkpIHtcbiAgICBvcmRpbmFyeURlZmluZU93bk1ldGFkYXRhKFxuICAgICAgbWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUsXG4gICAgICAodGFyZ2V0S2V5ICE9PSB1bmRlZmluZWQgPyBhbk9iamVjdCA6IGFGdW5jdGlvbikodGFyZ2V0KSxcbiAgICAgIHRvTWV0YUtleSh0YXJnZXRLZXkpXG4gICAgKTtcbiAgfTtcbn0gfSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///323\n")},function(module,exports,__webpack_require__){eval("// https://github.com/rwaldron/tc39-notes/blob/master/es6/2014-09/sept-25.md#510-globalasap-for-enqueuing-a-microtask\nvar $export = __webpack_require__(0);\nvar microtask = __webpack_require__(90)();\nvar process = __webpack_require__(2).process;\nvar isNode = __webpack_require__(20)(process) == 'process';\n\n$export($export.G, {\n asap: function asap(fn) {\n var domain = isNode && process.domain;\n microtask(domain ? domain.bind(fn) : fn);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuYXNhcC5qcz8wZDI1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBYztBQUN0QyxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxhQUFhLG1CQUFPLENBQUMsRUFBUTs7QUFFN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMzI0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXRodWIuY29tL3J3YWxkcm9uL3RjMzktbm90ZXMvYmxvYi9tYXN0ZXIvZXM2LzIwMTQtMDkvc2VwdC0yNS5tZCM1MTAtZ2xvYmFsYXNhcC1mb3ItZW5xdWV1aW5nLWEtbWljcm90YXNrXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIG1pY3JvdGFzayA9IHJlcXVpcmUoJy4vX21pY3JvdGFzaycpKCk7XG52YXIgcHJvY2VzcyA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLnByb2Nlc3M7XG52YXIgaXNOb2RlID0gcmVxdWlyZSgnLi9fY29mJykocHJvY2VzcykgPT0gJ3Byb2Nlc3MnO1xuXG4kZXhwb3J0KCRleHBvcnQuRywge1xuICBhc2FwOiBmdW5jdGlvbiBhc2FwKGZuKSB7XG4gICAgdmFyIGRvbWFpbiA9IGlzTm9kZSAmJiBwcm9jZXNzLmRvbWFpbjtcbiAgICBtaWNyb3Rhc2soZG9tYWluID8gZG9tYWluLmJpbmQoZm4pIDogZm4pO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///324\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// https://github.com/zenparsing/es-observable\nvar $export = __webpack_require__(0);\nvar global = __webpack_require__(2);\nvar core = __webpack_require__(18);\nvar microtask = __webpack_require__(90)();\nvar OBSERVABLE = __webpack_require__(5)('observable');\nvar aFunction = __webpack_require__(10);\nvar anObject = __webpack_require__(1);\nvar anInstance = __webpack_require__(39);\nvar redefineAll = __webpack_require__(41);\nvar hide = __webpack_require__(11);\nvar forOf = __webpack_require__(40);\nvar RETURN = forOf.RETURN;\n\nvar getMethod = function (fn) {\n return fn == null ? undefined : aFunction(fn);\n};\n\nvar cleanupSubscription = function (subscription) {\n var cleanup = subscription._c;\n if (cleanup) {\n subscription._c = undefined;\n cleanup();\n }\n};\n\nvar subscriptionClosed = function (subscription) {\n return subscription._o === undefined;\n};\n\nvar closeSubscription = function (subscription) {\n if (!subscriptionClosed(subscription)) {\n subscription._o = undefined;\n cleanupSubscription(subscription);\n }\n};\n\nvar Subscription = function (observer, subscriber) {\n anObject(observer);\n this._c = undefined;\n this._o = observer;\n observer = new SubscriptionObserver(this);\n try {\n var cleanup = subscriber(observer);\n var subscription = cleanup;\n if (cleanup != null) {\n if (typeof cleanup.unsubscribe === 'function') cleanup = function () { subscription.unsubscribe(); };\n else aFunction(cleanup);\n this._c = cleanup;\n }\n } catch (e) {\n observer.error(e);\n return;\n } if (subscriptionClosed(this)) cleanupSubscription(this);\n};\n\nSubscription.prototype = redefineAll({}, {\n unsubscribe: function unsubscribe() { closeSubscription(this); }\n});\n\nvar SubscriptionObserver = function (subscription) {\n this._s = subscription;\n};\n\nSubscriptionObserver.prototype = redefineAll({}, {\n next: function next(value) {\n var subscription = this._s;\n if (!subscriptionClosed(subscription)) {\n var observer = subscription._o;\n try {\n var m = getMethod(observer.next);\n if (m) return m.call(observer, value);\n } catch (e) {\n try {\n closeSubscription(subscription);\n } finally {\n throw e;\n }\n }\n }\n },\n error: function error(value) {\n var subscription = this._s;\n if (subscriptionClosed(subscription)) throw value;\n var observer = subscription._o;\n subscription._o = undefined;\n try {\n var m = getMethod(observer.error);\n if (!m) throw value;\n value = m.call(observer, value);\n } catch (e) {\n try {\n cleanupSubscription(subscription);\n } finally {\n throw e;\n }\n } cleanupSubscription(subscription);\n return value;\n },\n complete: function complete(value) {\n var subscription = this._s;\n if (!subscriptionClosed(subscription)) {\n var observer = subscription._o;\n subscription._o = undefined;\n try {\n var m = getMethod(observer.complete);\n value = m ? m.call(observer, value) : undefined;\n } catch (e) {\n try {\n cleanupSubscription(subscription);\n } finally {\n throw e;\n }\n } cleanupSubscription(subscription);\n return value;\n }\n }\n});\n\nvar $Observable = function Observable(subscriber) {\n anInstance(this, $Observable, 'Observable', '_f')._f = aFunction(subscriber);\n};\n\nredefineAll($Observable.prototype, {\n subscribe: function subscribe(observer) {\n return new Subscription(observer, this._f);\n },\n forEach: function forEach(fn) {\n var that = this;\n return new (core.Promise || global.Promise)(function (resolve, reject) {\n aFunction(fn);\n var subscription = that.subscribe({\n next: function (value) {\n try {\n return fn(value);\n } catch (e) {\n reject(e);\n subscription.unsubscribe();\n }\n },\n error: reject,\n complete: resolve\n });\n });\n }\n});\n\nredefineAll($Observable, {\n from: function from(x) {\n var C = typeof this === 'function' ? this : $Observable;\n var method = getMethod(anObject(x)[OBSERVABLE]);\n if (method) {\n var observable = anObject(method.call(x));\n return observable.constructor === C ? observable : new C(function (observer) {\n return observable.subscribe(observer);\n });\n }\n return new C(function (observer) {\n var done = false;\n microtask(function () {\n if (!done) {\n try {\n if (forOf(x, false, function (it) {\n observer.next(it);\n if (done) return RETURN;\n }) === RETURN) return;\n } catch (e) {\n if (done) throw e;\n observer.error(e);\n return;\n } observer.complete();\n }\n });\n return function () { done = true; };\n });\n },\n of: function of() {\n for (var i = 0, l = arguments.length, items = new Array(l); i < l;) items[i] = arguments[i++];\n return new (typeof this === 'function' ? this : $Observable)(function (observer) {\n var done = false;\n microtask(function () {\n if (!done) {\n for (var j = 0; j < items.length; ++j) {\n observer.next(items[j]);\n if (done) return;\n } observer.complete();\n }\n });\n return function () { done = true; };\n });\n }\n});\n\nhide($Observable.prototype, OBSERVABLE, function () { return this; });\n\n$export($export.G, { Observable: $Observable });\n\n__webpack_require__(38)('Observable');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JzZXJ2YWJsZS5qcz8zN2I1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxhQUFhLG1CQUFPLENBQUMsQ0FBVztBQUNoQyxXQUFXLG1CQUFPLENBQUMsRUFBUztBQUM1QixnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFjO0FBQ3RDLGlCQUFpQixtQkFBTyxDQUFDLENBQVE7QUFDakMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2QyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxpQkFBaUIsbUJBQU8sQ0FBQyxFQUFnQjtBQUN6QyxrQkFBa0IsbUJBQU8sQ0FBQyxFQUFpQjtBQUMzQyxXQUFXLG1CQUFPLENBQUMsRUFBUztBQUM1QixZQUFZLG1CQUFPLENBQUMsRUFBVztBQUMvQjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0RUFBNEUsNEJBQTRCO0FBQ3hHO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBLHVDQUF1QztBQUN2Qyx1Q0FBdUMseUJBQXlCO0FBQ2hFLENBQUM7O0FBRUQ7QUFDQTtBQUNBOztBQUVBLCtDQUErQztBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYixXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0EsT0FBTztBQUNQLDBCQUEwQixhQUFhO0FBQ3ZDLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQSwrREFBK0QsT0FBTztBQUN0RTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QixrQkFBa0I7QUFDM0M7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBLE9BQU87QUFDUCwwQkFBMEIsYUFBYTtBQUN2QyxLQUFLO0FBQ0w7QUFDQSxDQUFDOztBQUVELHFEQUFxRCxhQUFhLEVBQUU7O0FBRXBFLG9CQUFvQiwwQkFBMEI7O0FBRTlDLG1CQUFPLENBQUMsRUFBZ0IiLCJmaWxlIjoiMzI1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3plbnBhcnNpbmcvZXMtb2JzZXJ2YWJsZVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIG1pY3JvdGFzayA9IHJlcXVpcmUoJy4vX21pY3JvdGFzaycpKCk7XG52YXIgT0JTRVJWQUJMRSA9IHJlcXVpcmUoJy4vX3drcycpKCdvYnNlcnZhYmxlJyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG52YXIgcmVkZWZpbmVBbGwgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIGZvck9mID0gcmVxdWlyZSgnLi9fZm9yLW9mJyk7XG52YXIgUkVUVVJOID0gZm9yT2YuUkVUVVJOO1xuXG52YXIgZ2V0TWV0aG9kID0gZnVuY3Rpb24gKGZuKSB7XG4gIHJldHVybiBmbiA9PSBudWxsID8gdW5kZWZpbmVkIDogYUZ1bmN0aW9uKGZuKTtcbn07XG5cbnZhciBjbGVhbnVwU3Vic2NyaXB0aW9uID0gZnVuY3Rpb24gKHN1YnNjcmlwdGlvbikge1xuICB2YXIgY2xlYW51cCA9IHN1YnNjcmlwdGlvbi5fYztcbiAgaWYgKGNsZWFudXApIHtcbiAgICBzdWJzY3JpcHRpb24uX2MgPSB1bmRlZmluZWQ7XG4gICAgY2xlYW51cCgpO1xuICB9XG59O1xuXG52YXIgc3Vic2NyaXB0aW9uQ2xvc2VkID0gZnVuY3Rpb24gKHN1YnNjcmlwdGlvbikge1xuICByZXR1cm4gc3Vic2NyaXB0aW9uLl9vID09PSB1bmRlZmluZWQ7XG59O1xuXG52YXIgY2xvc2VTdWJzY3JpcHRpb24gPSBmdW5jdGlvbiAoc3Vic2NyaXB0aW9uKSB7XG4gIGlmICghc3Vic2NyaXB0aW9uQ2xvc2VkKHN1YnNjcmlwdGlvbikpIHtcbiAgICBzdWJzY3JpcHRpb24uX28gPSB1bmRlZmluZWQ7XG4gICAgY2xlYW51cFN1YnNjcmlwdGlvbihzdWJzY3JpcHRpb24pO1xuICB9XG59O1xuXG52YXIgU3Vic2NyaXB0aW9uID0gZnVuY3Rpb24gKG9ic2VydmVyLCBzdWJzY3JpYmVyKSB7XG4gIGFuT2JqZWN0KG9ic2VydmVyKTtcbiAgdGhpcy5fYyA9IHVuZGVmaW5lZDtcbiAgdGhpcy5fbyA9IG9ic2VydmVyO1xuICBvYnNlcnZlciA9IG5ldyBTdWJzY3JpcHRpb25PYnNlcnZlcih0aGlzKTtcbiAgdHJ5IHtcbiAgICB2YXIgY2xlYW51cCA9IHN1YnNjcmliZXIob2JzZXJ2ZXIpO1xuICAgIHZhciBzdWJzY3JpcHRpb24gPSBjbGVhbnVwO1xuICAgIGlmIChjbGVhbnVwICE9IG51bGwpIHtcbiAgICAgIGlmICh0eXBlb2YgY2xlYW51cC51bnN1YnNjcmliZSA9PT0gJ2Z1bmN0aW9uJykgY2xlYW51cCA9IGZ1bmN0aW9uICgpIHsgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7IH07XG4gICAgICBlbHNlIGFGdW5jdGlvbihjbGVhbnVwKTtcbiAgICAgIHRoaXMuX2MgPSBjbGVhbnVwO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIG9ic2VydmVyLmVycm9yKGUpO1xuICAgIHJldHVybjtcbiAgfSBpZiAoc3Vic2NyaXB0aW9uQ2xvc2VkKHRoaXMpKSBjbGVhbnVwU3Vic2NyaXB0aW9uKHRoaXMpO1xufTtcblxuU3Vic2NyaXB0aW9uLnByb3RvdHlwZSA9IHJlZGVmaW5lQWxsKHt9LCB7XG4gIHVuc3Vic2NyaWJlOiBmdW5jdGlvbiB1bnN1YnNjcmliZSgpIHsgY2xvc2VTdWJzY3JpcHRpb24odGhpcyk7IH1cbn0pO1xuXG52YXIgU3Vic2NyaXB0aW9uT2JzZXJ2ZXIgPSBmdW5jdGlvbiAoc3Vic2NyaXB0aW9uKSB7XG4gIHRoaXMuX3MgPSBzdWJzY3JpcHRpb247XG59O1xuXG5TdWJzY3JpcHRpb25PYnNlcnZlci5wcm90b3R5cGUgPSByZWRlZmluZUFsbCh7fSwge1xuICBuZXh0OiBmdW5jdGlvbiBuZXh0KHZhbHVlKSB7XG4gICAgdmFyIHN1YnNjcmlwdGlvbiA9IHRoaXMuX3M7XG4gICAgaWYgKCFzdWJzY3JpcHRpb25DbG9zZWQoc3Vic2NyaXB0aW9uKSkge1xuICAgICAgdmFyIG9ic2VydmVyID0gc3Vic2NyaXB0aW9uLl9vO1xuICAgICAgdHJ5IHtcbiAgICAgICAgdmFyIG0gPSBnZXRNZXRob2Qob2JzZXJ2ZXIubmV4dCk7XG4gICAgICAgIGlmIChtKSByZXR1cm4gbS5jYWxsKG9ic2VydmVyLCB2YWx1ZSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY2xvc2VTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LFxuICBlcnJvcjogZnVuY3Rpb24gZXJyb3IodmFsdWUpIHtcbiAgICB2YXIgc3Vic2NyaXB0aW9uID0gdGhpcy5fcztcbiAgICBpZiAoc3Vic2NyaXB0aW9uQ2xvc2VkKHN1YnNjcmlwdGlvbikpIHRocm93IHZhbHVlO1xuICAgIHZhciBvYnNlcnZlciA9IHN1YnNjcmlwdGlvbi5fbztcbiAgICBzdWJzY3JpcHRpb24uX28gPSB1bmRlZmluZWQ7XG4gICAgdHJ5IHtcbiAgICAgIHZhciBtID0gZ2V0TWV0aG9kKG9ic2VydmVyLmVycm9yKTtcbiAgICAgIGlmICghbSkgdGhyb3cgdmFsdWU7XG4gICAgICB2YWx1ZSA9IG0uY2FsbChvYnNlcnZlciwgdmFsdWUpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNsZWFudXBTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgfSBjbGVhbnVwU3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvbik7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9LFxuICBjb21wbGV0ZTogZnVuY3Rpb24gY29tcGxldGUodmFsdWUpIHtcbiAgICB2YXIgc3Vic2NyaXB0aW9uID0gdGhpcy5fcztcbiAgICBpZiAoIXN1YnNjcmlwdGlvbkNsb3NlZChzdWJzY3JpcHRpb24pKSB7XG4gICAgICB2YXIgb2JzZXJ2ZXIgPSBzdWJzY3JpcHRpb24uX287XG4gICAgICBzdWJzY3JpcHRpb24uX28gPSB1bmRlZmluZWQ7XG4gICAgICB0cnkge1xuICAgICAgICB2YXIgbSA9IGdldE1ldGhvZChvYnNlcnZlci5jb21wbGV0ZSk7XG4gICAgICAgIHZhbHVlID0gbSA/IG0uY2FsbChvYnNlcnZlciwgdmFsdWUpIDogdW5kZWZpbmVkO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNsZWFudXBTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICB9IGNsZWFudXBTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKTtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gIH1cbn0pO1xuXG52YXIgJE9ic2VydmFibGUgPSBmdW5jdGlvbiBPYnNlcnZhYmxlKHN1YnNjcmliZXIpIHtcbiAgYW5JbnN0YW5jZSh0aGlzLCAkT2JzZXJ2YWJsZSwgJ09ic2VydmFibGUnLCAnX2YnKS5fZiA9IGFGdW5jdGlvbihzdWJzY3JpYmVyKTtcbn07XG5cbnJlZGVmaW5lQWxsKCRPYnNlcnZhYmxlLnByb3RvdHlwZSwge1xuICBzdWJzY3JpYmU6IGZ1bmN0aW9uIHN1YnNjcmliZShvYnNlcnZlcikge1xuICAgIHJldHVybiBuZXcgU3Vic2NyaXB0aW9uKG9ic2VydmVyLCB0aGlzLl9mKTtcbiAgfSxcbiAgZm9yRWFjaDogZnVuY3Rpb24gZm9yRWFjaChmbikge1xuICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICByZXR1cm4gbmV3IChjb3JlLlByb21pc2UgfHwgZ2xvYmFsLlByb21pc2UpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIGFGdW5jdGlvbihmbik7XG4gICAgICB2YXIgc3Vic2NyaXB0aW9uID0gdGhhdC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIGZuKHZhbHVlKTtcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgICBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiByZWplY3QsXG4gICAgICAgIGNvbXBsZXRlOiByZXNvbHZlXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxufSk7XG5cbnJlZGVmaW5lQWxsKCRPYnNlcnZhYmxlLCB7XG4gIGZyb206IGZ1bmN0aW9uIGZyb20oeCkge1xuICAgIHZhciBDID0gdHlwZW9mIHRoaXMgPT09ICdmdW5jdGlvbicgPyB0aGlzIDogJE9ic2VydmFibGU7XG4gICAgdmFyIG1ldGhvZCA9IGdldE1ldGhvZChhbk9iamVjdCh4KVtPQlNFUlZBQkxFXSk7XG4gICAgaWYgKG1ldGhvZCkge1xuICAgICAgdmFyIG9ic2VydmFibGUgPSBhbk9iamVjdChtZXRob2QuY2FsbCh4KSk7XG4gICAgICByZXR1cm4gb2JzZXJ2YWJsZS5jb25zdHJ1Y3RvciA9PT0gQyA/IG9ic2VydmFibGUgOiBuZXcgQyhmdW5jdGlvbiAob2JzZXJ2ZXIpIHtcbiAgICAgICAgcmV0dXJuIG9ic2VydmFibGUuc3Vic2NyaWJlKG9ic2VydmVyKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IEMoZnVuY3Rpb24gKG9ic2VydmVyKSB7XG4gICAgICB2YXIgZG9uZSA9IGZhbHNlO1xuICAgICAgbWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCFkb25lKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChmb3JPZih4LCBmYWxzZSwgZnVuY3Rpb24gKGl0KSB7XG4gICAgICAgICAgICAgIG9ic2VydmVyLm5leHQoaXQpO1xuICAgICAgICAgICAgICBpZiAoZG9uZSkgcmV0dXJuIFJFVFVSTjtcbiAgICAgICAgICAgIH0pID09PSBSRVRVUk4pIHJldHVybjtcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBpZiAoZG9uZSkgdGhyb3cgZTtcbiAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKGUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH0gb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyBkb25lID0gdHJ1ZTsgfTtcbiAgICB9KTtcbiAgfSxcbiAgb2Y6IGZ1bmN0aW9uIG9mKCkge1xuICAgIGZvciAodmFyIGkgPSAwLCBsID0gYXJndW1lbnRzLmxlbmd0aCwgaXRlbXMgPSBuZXcgQXJyYXkobCk7IGkgPCBsOykgaXRlbXNbaV0gPSBhcmd1bWVudHNbaSsrXTtcbiAgICByZXR1cm4gbmV3ICh0eXBlb2YgdGhpcyA9PT0gJ2Z1bmN0aW9uJyA/IHRoaXMgOiAkT2JzZXJ2YWJsZSkoZnVuY3Rpb24gKG9ic2VydmVyKSB7XG4gICAgICB2YXIgZG9uZSA9IGZhbHNlO1xuICAgICAgbWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCFkb25lKSB7XG4gICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBpdGVtcy5sZW5ndGg7ICsraikge1xuICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChpdGVtc1tqXSk7XG4gICAgICAgICAgICBpZiAoZG9uZSkgcmV0dXJuO1xuICAgICAgICAgIH0gb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyBkb25lID0gdHJ1ZTsgfTtcbiAgICB9KTtcbiAgfVxufSk7XG5cbmhpZGUoJE9ic2VydmFibGUucHJvdG90eXBlLCBPQlNFUlZBQkxFLCBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9KTtcblxuJGV4cG9ydCgkZXhwb3J0LkcsIHsgT2JzZXJ2YWJsZTogJE9ic2VydmFibGUgfSk7XG5cbnJlcXVpcmUoJy4vX3NldC1zcGVjaWVzJykoJ09ic2VydmFibGUnKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///325\n")},function(module,exports,__webpack_require__){eval("// ie9- setTimeout & setInterval additional parameters fix\nvar global = __webpack_require__(2);\nvar $export = __webpack_require__(0);\nvar userAgent = __webpack_require__(60);\nvar slice = [].slice;\nvar MSIE = /MSIE .\\./.test(userAgent); // <- dirty ie9- check\nvar wrap = function (set) {\n return function (fn, time /* , ...args */) {\n var boundArgs = arguments.length > 2;\n var args = boundArgs ? slice.call(arguments, 2) : false;\n return set(boundArgs ? function () {\n // eslint-disable-next-line no-new-func\n (typeof fn == 'function' ? fn : Function(fn)).apply(this, args);\n } : fn, time);\n };\n};\n$export($export.G + $export.B + $export.F * MSIE, {\n setTimeout: wrap(global.setTimeout),\n setInterval: wrap(global.setInterval)\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy93ZWIudGltZXJzLmpzPzQ3OTUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxhQUFhLG1CQUFPLENBQUMsQ0FBVztBQUNoQyxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDO0FBQ0Esc0NBQXNDO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjMyNi5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGllOS0gc2V0VGltZW91dCAmIHNldEludGVydmFsIGFkZGl0aW9uYWwgcGFyYW1ldGVycyBmaXhcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi9fdXNlci1hZ2VudCcpO1xudmFyIHNsaWNlID0gW10uc2xpY2U7XG52YXIgTVNJRSA9IC9NU0lFIC5cXC4vLnRlc3QodXNlckFnZW50KTsgLy8gPC0gZGlydHkgaWU5LSBjaGVja1xudmFyIHdyYXAgPSBmdW5jdGlvbiAoc2V0KSB7XG4gIHJldHVybiBmdW5jdGlvbiAoZm4sIHRpbWUgLyogLCAuLi5hcmdzICovKSB7XG4gICAgdmFyIGJvdW5kQXJncyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyO1xuICAgIHZhciBhcmdzID0gYm91bmRBcmdzID8gc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpIDogZmFsc2U7XG4gICAgcmV0dXJuIHNldChib3VuZEFyZ3MgPyBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmNcbiAgICAgICh0eXBlb2YgZm4gPT0gJ2Z1bmN0aW9uJyA/IGZuIDogRnVuY3Rpb24oZm4pKS5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9IDogZm4sIHRpbWUpO1xuICB9O1xufTtcbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5CICsgJGV4cG9ydC5GICogTVNJRSwge1xuICBzZXRUaW1lb3V0OiB3cmFwKGdsb2JhbC5zZXRUaW1lb3V0KSxcbiAgc2V0SW50ZXJ2YWw6IHdyYXAoZ2xvYmFsLnNldEludGVydmFsKVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///326\n")},function(module,exports,__webpack_require__){eval("var $export = __webpack_require__(0);\nvar $task = __webpack_require__(89);\n$export($export.G + $export.B, {\n setImmediate: $task.set,\n clearImmediate: $task.clear\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy93ZWIuaW1tZWRpYXRlLmpzPzEzMGYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsWUFBWSxtQkFBTyxDQUFDLEVBQVM7QUFDN0I7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIzMjcuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICR0YXNrID0gcmVxdWlyZSgnLi9fdGFzaycpO1xuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LkIsIHtcbiAgc2V0SW1tZWRpYXRlOiAkdGFzay5zZXQsXG4gIGNsZWFySW1tZWRpYXRlOiAkdGFzay5jbGVhclxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///327\n")},function(module,exports,__webpack_require__){eval("var $iterators = __webpack_require__(86);\nvar getKeys = __webpack_require__(34);\nvar redefine = __webpack_require__(12);\nvar global = __webpack_require__(2);\nvar hide = __webpack_require__(11);\nvar Iterators = __webpack_require__(46);\nvar wks = __webpack_require__(5);\nvar ITERATOR = wks('iterator');\nvar TO_STRING_TAG = wks('toStringTag');\nvar ArrayValues = Iterators.Array;\n\nvar DOMIterables = {\n CSSRuleList: true, // TODO: Not spec compliant, should be false.\n CSSStyleDeclaration: false,\n CSSValueList: false,\n ClientRectList: false,\n DOMRectList: false,\n DOMStringList: false,\n DOMTokenList: true,\n DataTransferItemList: false,\n FileList: false,\n HTMLAllCollection: false,\n HTMLCollection: false,\n HTMLFormElement: false,\n HTMLSelectElement: false,\n MediaList: true, // TODO: Not spec compliant, should be false.\n MimeTypeArray: false,\n NamedNodeMap: false,\n NodeList: true,\n PaintRequestList: false,\n Plugin: false,\n PluginArray: false,\n SVGLengthList: false,\n SVGNumberList: false,\n SVGPathSegList: false,\n SVGPointList: false,\n SVGStringList: false,\n SVGTransformList: false,\n SourceBufferList: false,\n StyleSheetList: true, // TODO: Not spec compliant, should be false.\n TextTrackCueList: false,\n TextTrackList: false,\n TouchList: false\n};\n\nfor (var collections = getKeys(DOMIterables), i = 0; i < collections.length; i++) {\n var NAME = collections[i];\n var explicit = DOMIterables[NAME];\n var Collection = global[NAME];\n var proto = Collection && Collection.prototype;\n var key;\n if (proto) {\n if (!proto[ITERATOR]) hide(proto, ITERATOR, ArrayValues);\n if (!proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n Iterators[NAME] = ArrayValues;\n if (explicit) for (key in $iterators) if (!proto[key]) redefine(proto, key, $iterators[key], true);\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy93ZWIuZG9tLml0ZXJhYmxlLmpzP2FjNmEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsaUJBQWlCLG1CQUFPLENBQUMsRUFBc0I7QUFDL0MsY0FBYyxtQkFBTyxDQUFDLEVBQWdCO0FBQ3RDLGVBQWUsbUJBQU8sQ0FBQyxFQUFhO0FBQ3BDLGFBQWEsbUJBQU8sQ0FBQyxDQUFXO0FBQ2hDLFdBQVcsbUJBQU8sQ0FBQyxFQUFTO0FBQzVCLGdCQUFnQixtQkFBTyxDQUFDLEVBQWM7QUFDdEMsVUFBVSxtQkFBTyxDQUFDLENBQVE7QUFDMUI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxvREFBb0Qsd0JBQXdCO0FBQzVFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIzMjguanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgJGl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vZXM2LmFycmF5Lml0ZXJhdG9yJyk7XG52YXIgZ2V0S2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJyk7XG52YXIgd2tzID0gcmVxdWlyZSgnLi9fd2tzJyk7XG52YXIgSVRFUkFUT1IgPSB3a3MoJ2l0ZXJhdG9yJyk7XG52YXIgVE9fU1RSSU5HX1RBRyA9IHdrcygndG9TdHJpbmdUYWcnKTtcbnZhciBBcnJheVZhbHVlcyA9IEl0ZXJhdG9ycy5BcnJheTtcblxudmFyIERPTUl0ZXJhYmxlcyA9IHtcbiAgQ1NTUnVsZUxpc3Q6IHRydWUsIC8vIFRPRE86IE5vdCBzcGVjIGNvbXBsaWFudCwgc2hvdWxkIGJlIGZhbHNlLlxuICBDU1NTdHlsZURlY2xhcmF0aW9uOiBmYWxzZSxcbiAgQ1NTVmFsdWVMaXN0OiBmYWxzZSxcbiAgQ2xpZW50UmVjdExpc3Q6IGZhbHNlLFxuICBET01SZWN0TGlzdDogZmFsc2UsXG4gIERPTVN0cmluZ0xpc3Q6IGZhbHNlLFxuICBET01Ub2tlbkxpc3Q6IHRydWUsXG4gIERhdGFUcmFuc2Zlckl0ZW1MaXN0OiBmYWxzZSxcbiAgRmlsZUxpc3Q6IGZhbHNlLFxuICBIVE1MQWxsQ29sbGVjdGlvbjogZmFsc2UsXG4gIEhUTUxDb2xsZWN0aW9uOiBmYWxzZSxcbiAgSFRNTEZvcm1FbGVtZW50OiBmYWxzZSxcbiAgSFRNTFNlbGVjdEVsZW1lbnQ6IGZhbHNlLFxuICBNZWRpYUxpc3Q6IHRydWUsIC8vIFRPRE86IE5vdCBzcGVjIGNvbXBsaWFudCwgc2hvdWxkIGJlIGZhbHNlLlxuICBNaW1lVHlwZUFycmF5OiBmYWxzZSxcbiAgTmFtZWROb2RlTWFwOiBmYWxzZSxcbiAgTm9kZUxpc3Q6IHRydWUsXG4gIFBhaW50UmVxdWVzdExpc3Q6IGZhbHNlLFxuICBQbHVnaW46IGZhbHNlLFxuICBQbHVnaW5BcnJheTogZmFsc2UsXG4gIFNWR0xlbmd0aExpc3Q6IGZhbHNlLFxuICBTVkdOdW1iZXJMaXN0OiBmYWxzZSxcbiAgU1ZHUGF0aFNlZ0xpc3Q6IGZhbHNlLFxuICBTVkdQb2ludExpc3Q6IGZhbHNlLFxuICBTVkdTdHJpbmdMaXN0OiBmYWxzZSxcbiAgU1ZHVHJhbnNmb3JtTGlzdDogZmFsc2UsXG4gIFNvdXJjZUJ1ZmZlckxpc3Q6IGZhbHNlLFxuICBTdHlsZVNoZWV0TGlzdDogdHJ1ZSwgLy8gVE9ETzogTm90IHNwZWMgY29tcGxpYW50LCBzaG91bGQgYmUgZmFsc2UuXG4gIFRleHRUcmFja0N1ZUxpc3Q6IGZhbHNlLFxuICBUZXh0VHJhY2tMaXN0OiBmYWxzZSxcbiAgVG91Y2hMaXN0OiBmYWxzZVxufTtcblxuZm9yICh2YXIgY29sbGVjdGlvbnMgPSBnZXRLZXlzKERPTUl0ZXJhYmxlcyksIGkgPSAwOyBpIDwgY29sbGVjdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgdmFyIE5BTUUgPSBjb2xsZWN0aW9uc1tpXTtcbiAgdmFyIGV4cGxpY2l0ID0gRE9NSXRlcmFibGVzW05BTUVdO1xuICB2YXIgQ29sbGVjdGlvbiA9IGdsb2JhbFtOQU1FXTtcbiAgdmFyIHByb3RvID0gQ29sbGVjdGlvbiAmJiBDb2xsZWN0aW9uLnByb3RvdHlwZTtcbiAgdmFyIGtleTtcbiAgaWYgKHByb3RvKSB7XG4gICAgaWYgKCFwcm90b1tJVEVSQVRPUl0pIGhpZGUocHJvdG8sIElURVJBVE9SLCBBcnJheVZhbHVlcyk7XG4gICAgaWYgKCFwcm90b1tUT19TVFJJTkdfVEFHXSkgaGlkZShwcm90bywgVE9fU1RSSU5HX1RBRywgTkFNRSk7XG4gICAgSXRlcmF0b3JzW05BTUVdID0gQXJyYXlWYWx1ZXM7XG4gICAgaWYgKGV4cGxpY2l0KSBmb3IgKGtleSBpbiAkaXRlcmF0b3JzKSBpZiAoIXByb3RvW2tleV0pIHJlZGVmaW5lKHByb3RvLCBrZXksICRpdGVyYXRvcnNba2V5XSwgdHJ1ZSk7XG4gIH1cbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///328\n")},function(module,exports,__webpack_require__){eval('/* WEBPACK VAR INJECTION */(function(global) {/**\n * Copyright (c) 2014, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * https://raw.github.com/facebook/regenerator/master/LICENSE file. An\n * additional grant of patent rights can be found in the PATENTS file in\n * the same directory.\n */\n\n!(function(global) {\n "use strict";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === "function" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || "@@iterator";\n var asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator";\n var toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag";\n\n var inModule = typeof module === "object";\n var runtime = global.regeneratorRuntime;\n if (runtime) {\n if (inModule) {\n // If regeneratorRuntime is defined globally and we\'re in a module,\n // make the exports object identical to regeneratorRuntime.\n module.exports = runtime;\n }\n // Don\'t bother evaluating the rest of this file if the runtime was\n // already defined globally.\n return;\n }\n\n // Define the runtime globally (as expected by generated code) as either\n // module.exports (if we\'re in a module) or a new, empty object.\n runtime = global.regeneratorRuntime = inModule ? module.exports : {};\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n runtime.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there\'s no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don\'t have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: "normal", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: "throw", arg: err };\n }\n }\n\n var GenStateSuspendedStart = "suspendedStart";\n var GenStateSuspendedYield = "suspendedYield";\n var GenStateExecuting = "executing";\n var GenStateCompleted = "completed";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don\'t natively support it.\n var IteratorPrototype = {};\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunctionPrototype[toStringTagSymbol] =\n GeneratorFunction.displayName = "GeneratorFunction";\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n ["next", "throw", "return"].forEach(function(method) {\n prototype[method] = function(arg) {\n return this._invoke(method, arg);\n };\n });\n }\n\n runtime.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === "function" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === "GeneratorFunction"\n : false;\n };\n\n runtime.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n if (!(toStringTagSymbol in genFun)) {\n genFun[toStringTagSymbol] = "GeneratorFunction";\n }\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, "__await")` to determine if the yielded value is\n // meant to be awaited.\n runtime.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === "throw") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === "object" &&\n hasOwn.call(value, "__await")) {\n return Promise.resolve(value.__await).then(function(value) {\n invoke("next", value, resolve, reject);\n }, function(err) {\n invoke("throw", err, resolve, reject);\n });\n }\n\n return Promise.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration. If the Promise is rejected, however, the\n // result for this iteration will be rejected with the same\n // reason. Note that rejections of yielded Promises are not\n // thrown back into the generator function, as is the case\n // when an awaited Promise is rejected. This difference in\n // behavior between yield and await is important, because it\n // allows the consumer to decide what to do with the yielded\n // rejection (swallow it and continue, manually .throw it back\n // into the generator, abandon iteration, whatever). With\n // await, by contrast, there is no opportunity to examine the\n // rejection reason outside the generator function, so the\n // only option is to throw it from the await expression, and\n // let the generator function handle the exception.\n result.value = unwrapped;\n resolve(result);\n }, reject);\n }\n }\n\n if (typeof global.process === "object" && global.process.domain) {\n invoke = global.process.domain.bind(invoke);\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new Promise(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n runtime.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n runtime.async = function(innerFn, outerFn, self, tryLocsList) {\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList)\n );\n\n return runtime.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error("Generator is already running");\n }\n\n if (state === GenStateCompleted) {\n if (method === "throw") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === "next") {\n // Setting context._sent for legacy support of Babel\'s\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === "throw") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === "return") {\n context.abrupt("return", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === "normal") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === "throw") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = "throw";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === "throw") {\n if (delegate.iterator.return) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = "return";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === "throw") {\n // If maybeInvokeDelegate(context) changed context.method from\n // "return" to "throw", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = "throw";\n context.arg = new TypeError(\n "The iterator does not provide a \'throw\' method");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === "throw") {\n context.method = "throw";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = "throw";\n context.arg = new TypeError("iterator result is not an object");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was "throw" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was "next", forget context.arg since it has been\n // "consumed" by the delegate iterator. If context.method was\n // "return", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== "return") {\n context.method = "next";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n Gp[toStringTagSymbol] = "Generator";\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers\' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn\'t happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return "[object Generator]";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = "normal";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: "root" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n runtime.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === "function") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n runtime.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel\'s\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = "next";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === "t" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === "throw") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = "throw";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = "next";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === "root") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle("end");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, "catchLoc");\n var hasFinally = hasOwn.call(entry, "finallyLoc");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error("try statement without catch or finally");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, "finallyLoc") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === "break" ||\n type === "continue") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = "next";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === "throw") {\n throw record.arg;\n }\n\n if (record.type === "break" ||\n record.type === "continue") {\n this.next = record.arg;\n } else if (record.type === "return") {\n this.rval = this.arg = record.arg;\n this.method = "return";\n this.next = "end";\n } else if (record.type === "normal" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n "catch": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === "throw") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error("illegal catch attempt");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === "next") {\n // Deliberately forget the last sent value so that we don\'t\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n})(\n // Among the various tricks for obtaining a reference to the global\n // object, this seems to be the most reliable technique that does not\n // use indirect eval (which violates Content Security Policy).\n typeof global === "object" ? global :\n typeof window === "object" ? window :\n typeof self === "object" ? self : this\n);\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(93)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9yZWdlbmVyYXRvci1ydW50aW1lL3J1bnRpbWUuanM/ZjNhMiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZCxLQUFLO0FBQ0wsY0FBYztBQUNkO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseURBQXlEO0FBQ3pEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBLFdBQVc7QUFDWDs7QUFFQTtBQUNBO0FBQ0Esd0NBQXdDLFdBQVc7QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDJCQUEyQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLFNBQVM7QUFDVDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esb0NBQW9DLGNBQWM7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlDQUFpQyxrQkFBa0I7QUFDbkQ7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGlCQUFpQjs7QUFFakI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLGlCQUFpQjtBQUN6QztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFlBQVk7QUFDWjtBQUNBOztBQUVBO0FBQ0EsWUFBWTtBQUNaOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsOENBQThDLFFBQVE7QUFDdEQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBOztBQUVBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7O0FBRUEsV0FBVztBQUNYO0FBQ0E7QUFDQTs7QUFFQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0EsOENBQThDLFFBQVE7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQSw4Q0FBOEMsUUFBUTtBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQSw4Q0FBOEMsUUFBUTtBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIzMjkuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxNCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBodHRwczovL3Jhdy5naXRodWIuY29tL2ZhY2Vib29rL3JlZ2VuZXJhdG9yL21hc3Rlci9MSUNFTlNFIGZpbGUuIEFuXG4gKiBhZGRpdGlvbmFsIGdyYW50IG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW5cbiAqIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqL1xuXG4hKGZ1bmN0aW9uKGdsb2JhbCkge1xuICBcInVzZSBzdHJpY3RcIjtcblxuICB2YXIgT3AgPSBPYmplY3QucHJvdG90eXBlO1xuICB2YXIgaGFzT3duID0gT3AuaGFzT3duUHJvcGVydHk7XG4gIHZhciB1bmRlZmluZWQ7IC8vIE1vcmUgY29tcHJlc3NpYmxlIHRoYW4gdm9pZCAwLlxuICB2YXIgJFN5bWJvbCA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiA/IFN5bWJvbCA6IHt9O1xuICB2YXIgaXRlcmF0b3JTeW1ib2wgPSAkU3ltYm9sLml0ZXJhdG9yIHx8IFwiQEBpdGVyYXRvclwiO1xuICB2YXIgYXN5bmNJdGVyYXRvclN5bWJvbCA9ICRTeW1ib2wuYXN5bmNJdGVyYXRvciB8fCBcIkBAYXN5bmNJdGVyYXRvclwiO1xuICB2YXIgdG9TdHJpbmdUYWdTeW1ib2wgPSAkU3ltYm9sLnRvU3RyaW5nVGFnIHx8IFwiQEB0b1N0cmluZ1RhZ1wiO1xuXG4gIHZhciBpbk1vZHVsZSA9IHR5cGVvZiBtb2R1bGUgPT09IFwib2JqZWN0XCI7XG4gIHZhciBydW50aW1lID0gZ2xvYmFsLnJlZ2VuZXJhdG9yUnVudGltZTtcbiAgaWYgKHJ1bnRpbWUpIHtcbiAgICBpZiAoaW5Nb2R1bGUpIHtcbiAgICAgIC8vIElmIHJlZ2VuZXJhdG9yUnVudGltZSBpcyBkZWZpbmVkIGdsb2JhbGx5IGFuZCB3ZSdyZSBpbiBhIG1vZHVsZSxcbiAgICAgIC8vIG1ha2UgdGhlIGV4cG9ydHMgb2JqZWN0IGlkZW50aWNhbCB0byByZWdlbmVyYXRvclJ1bnRpbWUuXG4gICAgICBtb2R1bGUuZXhwb3J0cyA9IHJ1bnRpbWU7XG4gICAgfVxuICAgIC8vIERvbid0IGJvdGhlciBldmFsdWF0aW5nIHRoZSByZXN0IG9mIHRoaXMgZmlsZSBpZiB0aGUgcnVudGltZSB3YXNcbiAgICAvLyBhbHJlYWR5IGRlZmluZWQgZ2xvYmFsbHkuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gRGVmaW5lIHRoZSBydW50aW1lIGdsb2JhbGx5IChhcyBleHBlY3RlZCBieSBnZW5lcmF0ZWQgY29kZSkgYXMgZWl0aGVyXG4gIC8vIG1vZHVsZS5leHBvcnRzIChpZiB3ZSdyZSBpbiBhIG1vZHVsZSkgb3IgYSBuZXcsIGVtcHR5IG9iamVjdC5cbiAgcnVudGltZSA9IGdsb2JhbC5yZWdlbmVyYXRvclJ1bnRpbWUgPSBpbk1vZHVsZSA/IG1vZHVsZS5leHBvcnRzIDoge307XG5cbiAgZnVuY3Rpb24gd3JhcChpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdCkge1xuICAgIC8vIElmIG91dGVyRm4gcHJvdmlkZWQgYW5kIG91dGVyRm4ucHJvdG90eXBlIGlzIGEgR2VuZXJhdG9yLCB0aGVuIG91dGVyRm4ucHJvdG90eXBlIGluc3RhbmNlb2YgR2VuZXJhdG9yLlxuICAgIHZhciBwcm90b0dlbmVyYXRvciA9IG91dGVyRm4gJiYgb3V0ZXJGbi5wcm90b3R5cGUgaW5zdGFuY2VvZiBHZW5lcmF0b3IgPyBvdXRlckZuIDogR2VuZXJhdG9yO1xuICAgIHZhciBnZW5lcmF0b3IgPSBPYmplY3QuY3JlYXRlKHByb3RvR2VuZXJhdG9yLnByb3RvdHlwZSk7XG4gICAgdmFyIGNvbnRleHQgPSBuZXcgQ29udGV4dCh0cnlMb2NzTGlzdCB8fCBbXSk7XG5cbiAgICAvLyBUaGUgLl9pbnZva2UgbWV0aG9kIHVuaWZpZXMgdGhlIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgLm5leHQsXG4gICAgLy8gLnRocm93LCBhbmQgLnJldHVybiBtZXRob2RzLlxuICAgIGdlbmVyYXRvci5faW52b2tlID0gbWFrZUludm9rZU1ldGhvZChpbm5lckZuLCBzZWxmLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBnZW5lcmF0b3I7XG4gIH1cbiAgcnVudGltZS53cmFwID0gd3JhcDtcblxuICAvLyBUcnkvY2F0Y2ggaGVscGVyIHRvIG1pbmltaXplIGRlb3B0aW1pemF0aW9ucy4gUmV0dXJucyBhIGNvbXBsZXRpb25cbiAgLy8gcmVjb3JkIGxpa2UgY29udGV4dC50cnlFbnRyaWVzW2ldLmNvbXBsZXRpb24uIFRoaXMgaW50ZXJmYWNlIGNvdWxkXG4gIC8vIGhhdmUgYmVlbiAoYW5kIHdhcyBwcmV2aW91c2x5KSBkZXNpZ25lZCB0byB0YWtlIGEgY2xvc3VyZSB0byBiZVxuICAvLyBpbnZva2VkIHdpdGhvdXQgYXJndW1lbnRzLCBidXQgaW4gYWxsIHRoZSBjYXNlcyB3ZSBjYXJlIGFib3V0IHdlXG4gIC8vIGFscmVhZHkgaGF2ZSBhbiBleGlzdGluZyBtZXRob2Qgd2Ugd2FudCB0byBjYWxsLCBzbyB0aGVyZSdzIG5vIG5lZWRcbiAgLy8gdG8gY3JlYXRlIGEgbmV3IGZ1bmN0aW9uIG9iamVjdC4gV2UgY2FuIGV2ZW4gZ2V0IGF3YXkgd2l0aCBhc3N1bWluZ1xuICAvLyB0aGUgbWV0aG9kIHRha2VzIGV4YWN0bHkgb25lIGFyZ3VtZW50LCBzaW5jZSB0aGF0IGhhcHBlbnMgdG8gYmUgdHJ1ZVxuICAvLyBpbiBldmVyeSBjYXNlLCBzbyB3ZSBkb24ndCBoYXZlIHRvIHRvdWNoIHRoZSBhcmd1bWVudHMgb2JqZWN0LiBUaGVcbiAgLy8gb25seSBhZGRpdGlvbmFsIGFsbG9jYXRpb24gcmVxdWlyZWQgaXMgdGhlIGNvbXBsZXRpb24gcmVjb3JkLCB3aGljaFxuICAvLyBoYXMgYSBzdGFibGUgc2hhcGUgYW5kIHNvIGhvcGVmdWxseSBzaG91bGQgYmUgY2hlYXAgdG8gYWxsb2NhdGUuXG4gIGZ1bmN0aW9uIHRyeUNhdGNoKGZuLCBvYmosIGFyZykge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4geyB0eXBlOiBcIm5vcm1hbFwiLCBhcmc6IGZuLmNhbGwob2JqLCBhcmcpIH07XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICByZXR1cm4geyB0eXBlOiBcInRocm93XCIsIGFyZzogZXJyIH07XG4gICAgfVxuICB9XG5cbiAgdmFyIEdlblN0YXRlU3VzcGVuZGVkU3RhcnQgPSBcInN1c3BlbmRlZFN0YXJ0XCI7XG4gIHZhciBHZW5TdGF0ZVN1c3BlbmRlZFlpZWxkID0gXCJzdXNwZW5kZWRZaWVsZFwiO1xuICB2YXIgR2VuU3RhdGVFeGVjdXRpbmcgPSBcImV4ZWN1dGluZ1wiO1xuICB2YXIgR2VuU3RhdGVDb21wbGV0ZWQgPSBcImNvbXBsZXRlZFwiO1xuXG4gIC8vIFJldHVybmluZyB0aGlzIG9iamVjdCBmcm9tIHRoZSBpbm5lckZuIGhhcyB0aGUgc2FtZSBlZmZlY3QgYXNcbiAgLy8gYnJlYWtpbmcgb3V0IG9mIHRoZSBkaXNwYXRjaCBzd2l0Y2ggc3RhdGVtZW50LlxuICB2YXIgQ29udGludWVTZW50aW5lbCA9IHt9O1xuXG4gIC8vIER1bW15IGNvbnN0cnVjdG9yIGZ1bmN0aW9ucyB0aGF0IHdlIHVzZSBhcyB0aGUgLmNvbnN0cnVjdG9yIGFuZFxuICAvLyAuY29uc3RydWN0b3IucHJvdG90eXBlIHByb3BlcnRpZXMgZm9yIGZ1bmN0aW9ucyB0aGF0IHJldHVybiBHZW5lcmF0b3JcbiAgLy8gb2JqZWN0cy4gRm9yIGZ1bGwgc3BlYyBjb21wbGlhbmNlLCB5b3UgbWF5IHdpc2ggdG8gY29uZmlndXJlIHlvdXJcbiAgLy8gbWluaWZpZXIgbm90IHRvIG1hbmdsZSB0aGUgbmFtZXMgb2YgdGhlc2UgdHdvIGZ1bmN0aW9ucy5cbiAgZnVuY3Rpb24gR2VuZXJhdG9yKCkge31cbiAgZnVuY3Rpb24gR2VuZXJhdG9yRnVuY3Rpb24oKSB7fVxuICBmdW5jdGlvbiBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSgpIHt9XG5cbiAgLy8gVGhpcyBpcyBhIHBvbHlmaWxsIGZvciAlSXRlcmF0b3JQcm90b3R5cGUlIGZvciBlbnZpcm9ubWVudHMgdGhhdFxuICAvLyBkb24ndCBuYXRpdmVseSBzdXBwb3J0IGl0LlxuICB2YXIgSXRlcmF0b3JQcm90b3R5cGUgPSB7fTtcbiAgSXRlcmF0b3JQcm90b3R5cGVbaXRlcmF0b3JTeW1ib2xdID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIHZhciBnZXRQcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZjtcbiAgdmFyIE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlID0gZ2V0UHJvdG8gJiYgZ2V0UHJvdG8oZ2V0UHJvdG8odmFsdWVzKFtdKSkpO1xuICBpZiAoTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUgJiZcbiAgICAgIE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlICE9PSBPcCAmJlxuICAgICAgaGFzT3duLmNhbGwoTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUsIGl0ZXJhdG9yU3ltYm9sKSkge1xuICAgIC8vIFRoaXMgZW52aXJvbm1lbnQgaGFzIGEgbmF0aXZlICVJdGVyYXRvclByb3RvdHlwZSU7IHVzZSBpdCBpbnN0ZWFkXG4gICAgLy8gb2YgdGhlIHBvbHlmaWxsLlxuICAgIEl0ZXJhdG9yUHJvdG90eXBlID0gTmF0aXZlSXRlcmF0b3JQcm90b3R5cGU7XG4gIH1cblxuICB2YXIgR3AgPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZS5wcm90b3R5cGUgPVxuICAgIEdlbmVyYXRvci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEl0ZXJhdG9yUHJvdG90eXBlKTtcbiAgR2VuZXJhdG9yRnVuY3Rpb24ucHJvdG90eXBlID0gR3AuY29uc3RydWN0b3IgPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZTtcbiAgR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUuY29uc3RydWN0b3IgPSBHZW5lcmF0b3JGdW5jdGlvbjtcbiAgR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGVbdG9TdHJpbmdUYWdTeW1ib2xdID1cbiAgICBHZW5lcmF0b3JGdW5jdGlvbi5kaXNwbGF5TmFtZSA9IFwiR2VuZXJhdG9yRnVuY3Rpb25cIjtcblxuICAvLyBIZWxwZXIgZm9yIGRlZmluaW5nIHRoZSAubmV4dCwgLnRocm93LCBhbmQgLnJldHVybiBtZXRob2RzIG9mIHRoZVxuICAvLyBJdGVyYXRvciBpbnRlcmZhY2UgaW4gdGVybXMgb2YgYSBzaW5nbGUgLl9pbnZva2UgbWV0aG9kLlxuICBmdW5jdGlvbiBkZWZpbmVJdGVyYXRvck1ldGhvZHMocHJvdG90eXBlKSB7XG4gICAgW1wibmV4dFwiLCBcInRocm93XCIsIFwicmV0dXJuXCJdLmZvckVhY2goZnVuY3Rpb24obWV0aG9kKSB7XG4gICAgICBwcm90b3R5cGVbbWV0aG9kXSA9IGZ1bmN0aW9uKGFyZykge1xuICAgICAgICByZXR1cm4gdGhpcy5faW52b2tlKG1ldGhvZCwgYXJnKTtcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBydW50aW1lLmlzR2VuZXJhdG9yRnVuY3Rpb24gPSBmdW5jdGlvbihnZW5GdW4pIHtcbiAgICB2YXIgY3RvciA9IHR5cGVvZiBnZW5GdW4gPT09IFwiZnVuY3Rpb25cIiAmJiBnZW5GdW4uY29uc3RydWN0b3I7XG4gICAgcmV0dXJuIGN0b3JcbiAgICAgID8gY3RvciA9PT0gR2VuZXJhdG9yRnVuY3Rpb24gfHxcbiAgICAgICAgLy8gRm9yIHRoZSBuYXRpdmUgR2VuZXJhdG9yRnVuY3Rpb24gY29uc3RydWN0b3IsIHRoZSBiZXN0IHdlIGNhblxuICAgICAgICAvLyBkbyBpcyB0byBjaGVjayBpdHMgLm5hbWUgcHJvcGVydHkuXG4gICAgICAgIChjdG9yLmRpc3BsYXlOYW1lIHx8IGN0b3IubmFtZSkgPT09IFwiR2VuZXJhdG9yRnVuY3Rpb25cIlxuICAgICAgOiBmYWxzZTtcbiAgfTtcblxuICBydW50aW1lLm1hcmsgPSBmdW5jdGlvbihnZW5GdW4pIHtcbiAgICBpZiAoT2JqZWN0LnNldFByb3RvdHlwZU9mKSB7XG4gICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YoZ2VuRnVuLCBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGdlbkZ1bi5fX3Byb3RvX18gPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZTtcbiAgICAgIGlmICghKHRvU3RyaW5nVGFnU3ltYm9sIGluIGdlbkZ1bikpIHtcbiAgICAgICAgZ2VuRnVuW3RvU3RyaW5nVGFnU3ltYm9sXSA9IFwiR2VuZXJhdG9yRnVuY3Rpb25cIjtcbiAgICAgIH1cbiAgICB9XG4gICAgZ2VuRnVuLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoR3ApO1xuICAgIHJldHVybiBnZW5GdW47XG4gIH07XG5cbiAgLy8gV2l0aGluIHRoZSBib2R5IG9mIGFueSBhc3luYyBmdW5jdGlvbiwgYGF3YWl0IHhgIGlzIHRyYW5zZm9ybWVkIHRvXG4gIC8vIGB5aWVsZCByZWdlbmVyYXRvclJ1bnRpbWUuYXdyYXAoeClgLCBzbyB0aGF0IHRoZSBydW50aW1lIGNhbiB0ZXN0XG4gIC8vIGBoYXNPd24uY2FsbCh2YWx1ZSwgXCJfX2F3YWl0XCIpYCB0byBkZXRlcm1pbmUgaWYgdGhlIHlpZWxkZWQgdmFsdWUgaXNcbiAgLy8gbWVhbnQgdG8gYmUgYXdhaXRlZC5cbiAgcnVudGltZS5hd3JhcCA9IGZ1bmN0aW9uKGFyZykge1xuICAgIHJldHVybiB7IF9fYXdhaXQ6IGFyZyB9O1xuICB9O1xuXG4gIGZ1bmN0aW9uIEFzeW5jSXRlcmF0b3IoZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gaW52b2tlKG1ldGhvZCwgYXJnLCByZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChnZW5lcmF0b3JbbWV0aG9kXSwgZ2VuZXJhdG9yLCBhcmcpO1xuICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgcmVqZWN0KHJlY29yZC5hcmcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHJlY29yZC5hcmc7XG4gICAgICAgIHZhciB2YWx1ZSA9IHJlc3VsdC52YWx1ZTtcbiAgICAgICAgaWYgKHZhbHVlICYmXG4gICAgICAgICAgICB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgICAgIGhhc093bi5jYWxsKHZhbHVlLCBcIl9fYXdhaXRcIikpIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHZhbHVlLl9fYXdhaXQpLnRoZW4oZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgICAgIGludm9rZShcIm5leHRcIiwgdmFsdWUsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgfSwgZnVuY3Rpb24oZXJyKSB7XG4gICAgICAgICAgICBpbnZva2UoXCJ0aHJvd1wiLCBlcnIsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHZhbHVlKS50aGVuKGZ1bmN0aW9uKHVud3JhcHBlZCkge1xuICAgICAgICAgIC8vIFdoZW4gYSB5aWVsZGVkIFByb21pc2UgaXMgcmVzb2x2ZWQsIGl0cyBmaW5hbCB2YWx1ZSBiZWNvbWVzXG4gICAgICAgICAgLy8gdGhlIC52YWx1ZSBvZiB0aGUgUHJvbWlzZTx7dmFsdWUsZG9uZX0+IHJlc3VsdCBmb3IgdGhlXG4gICAgICAgICAgLy8gY3VycmVudCBpdGVyYXRpb24uIElmIHRoZSBQcm9taXNlIGlzIHJlamVjdGVkLCBob3dldmVyLCB0aGVcbiAgICAgICAgICAvLyByZXN1bHQgZm9yIHRoaXMgaXRlcmF0aW9uIHdpbGwgYmUgcmVqZWN0ZWQgd2l0aCB0aGUgc2FtZVxuICAgICAgICAgIC8vIHJlYXNvbi4gTm90ZSB0aGF0IHJlamVjdGlvbnMgb2YgeWllbGRlZCBQcm9taXNlcyBhcmUgbm90XG4gICAgICAgICAgLy8gdGhyb3duIGJhY2sgaW50byB0aGUgZ2VuZXJhdG9yIGZ1bmN0aW9uLCBhcyBpcyB0aGUgY2FzZVxuICAgICAgICAgIC8vIHdoZW4gYW4gYXdhaXRlZCBQcm9taXNlIGlzIHJlamVjdGVkLiBUaGlzIGRpZmZlcmVuY2UgaW5cbiAgICAgICAgICAvLyBiZWhhdmlvciBiZXR3ZWVuIHlpZWxkIGFuZCBhd2FpdCBpcyBpbXBvcnRhbnQsIGJlY2F1c2UgaXRcbiAgICAgICAgICAvLyBhbGxvd3MgdGhlIGNvbnN1bWVyIHRvIGRlY2lkZSB3aGF0IHRvIGRvIHdpdGggdGhlIHlpZWxkZWRcbiAgICAgICAgICAvLyByZWplY3Rpb24gKHN3YWxsb3cgaXQgYW5kIGNvbnRpbnVlLCBtYW51YWxseSAudGhyb3cgaXQgYmFja1xuICAgICAgICAgIC8vIGludG8gdGhlIGdlbmVyYXRvciwgYWJhbmRvbiBpdGVyYXRpb24sIHdoYXRldmVyKS4gV2l0aFxuICAgICAgICAgIC8vIGF3YWl0LCBieSBjb250cmFzdCwgdGhlcmUgaXMgbm8gb3Bwb3J0dW5pdHkgdG8gZXhhbWluZSB0aGVcbiAgICAgICAgICAvLyByZWplY3Rpb24gcmVhc29uIG91dHNpZGUgdGhlIGdlbmVyYXRvciBmdW5jdGlvbiwgc28gdGhlXG4gICAgICAgICAgLy8gb25seSBvcHRpb24gaXMgdG8gdGhyb3cgaXQgZnJvbSB0aGUgYXdhaXQgZXhwcmVzc2lvbiwgYW5kXG4gICAgICAgICAgLy8gbGV0IHRoZSBnZW5lcmF0b3IgZnVuY3Rpb24gaGFuZGxlIHRoZSBleGNlcHRpb24uXG4gICAgICAgICAgcmVzdWx0LnZhbHVlID0gdW53cmFwcGVkO1xuICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgfSwgcmVqZWN0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGdsb2JhbC5wcm9jZXNzID09PSBcIm9iamVjdFwiICYmIGdsb2JhbC5wcm9jZXNzLmRvbWFpbikge1xuICAgICAgaW52b2tlID0gZ2xvYmFsLnByb2Nlc3MuZG9tYWluLmJpbmQoaW52b2tlKTtcbiAgICB9XG5cbiAgICB2YXIgcHJldmlvdXNQcm9taXNlO1xuXG4gICAgZnVuY3Rpb24gZW5xdWV1ZShtZXRob2QsIGFyZykge1xuICAgICAgZnVuY3Rpb24gY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICBpbnZva2UobWV0aG9kLCBhcmcsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcHJldmlvdXNQcm9taXNlID1cbiAgICAgICAgLy8gSWYgZW5xdWV1ZSBoYXMgYmVlbiBjYWxsZWQgYmVmb3JlLCB0aGVuIHdlIHdhbnQgdG8gd2FpdCB1bnRpbFxuICAgICAgICAvLyBhbGwgcHJldmlvdXMgUHJvbWlzZXMgaGF2ZSBiZWVuIHJlc29sdmVkIGJlZm9yZSBjYWxsaW5nIGludm9rZSxcbiAgICAgICAgLy8gc28gdGhhdCByZXN1bHRzIGFyZSBhbHdheXMgZGVsaXZlcmVkIGluIHRoZSBjb3JyZWN0IG9yZGVyLiBJZlxuICAgICAgICAvLyBlbnF1ZXVlIGhhcyBub3QgYmVlbiBjYWxsZWQgYmVmb3JlLCB0aGVuIGl0IGlzIGltcG9ydGFudCB0b1xuICAgICAgICAvLyBjYWxsIGludm9rZSBpbW1lZGlhdGVseSwgd2l0aG91dCB3YWl0aW5nIG9uIGEgY2FsbGJhY2sgdG8gZmlyZSxcbiAgICAgICAgLy8gc28gdGhhdCB0aGUgYXN5bmMgZ2VuZXJhdG9yIGZ1bmN0aW9uIGhhcyB0aGUgb3Bwb3J0dW5pdHkgdG8gZG9cbiAgICAgICAgLy8gYW55IG5lY2Vzc2FyeSBzZXR1cCBpbiBhIHByZWRpY3RhYmxlIHdheS4gVGhpcyBwcmVkaWN0YWJpbGl0eVxuICAgICAgICAvLyBpcyB3aHkgdGhlIFByb21pc2UgY29uc3RydWN0b3Igc3luY2hyb25vdXNseSBpbnZva2VzIGl0c1xuICAgICAgICAvLyBleGVjdXRvciBjYWxsYmFjaywgYW5kIHdoeSBhc3luYyBmdW5jdGlvbnMgc3luY2hyb25vdXNseVxuICAgICAgICAvLyBleGVjdXRlIGNvZGUgYmVmb3JlIHRoZSBmaXJzdCBhd2FpdC4gU2luY2Ugd2UgaW1wbGVtZW50IHNpbXBsZVxuICAgICAgICAvLyBhc3luYyBmdW5jdGlvbnMgaW4gdGVybXMgb2YgYXN5bmMgZ2VuZXJhdG9ycywgaXQgaXMgZXNwZWNpYWxseVxuICAgICAgICAvLyBpbXBvcnRhbnQgdG8gZ2V0IHRoaXMgcmlnaHQsIGV2ZW4gdGhvdWdoIGl0IHJlcXVpcmVzIGNhcmUuXG4gICAgICAgIHByZXZpb3VzUHJvbWlzZSA/IHByZXZpb3VzUHJvbWlzZS50aGVuKFxuICAgICAgICAgIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnLFxuICAgICAgICAgIC8vIEF2b2lkIHByb3BhZ2F0aW5nIGZhaWx1cmVzIHRvIFByb21pc2VzIHJldHVybmVkIGJ5IGxhdGVyXG4gICAgICAgICAgLy8gaW52b2NhdGlvbnMgb2YgdGhlIGl0ZXJhdG9yLlxuICAgICAgICAgIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnXG4gICAgICAgICkgOiBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZygpO1xuICAgIH1cblxuICAgIC8vIERlZmluZSB0aGUgdW5pZmllZCBoZWxwZXIgbWV0aG9kIHRoYXQgaXMgdXNlZCB0byBpbXBsZW1lbnQgLm5leHQsXG4gICAgLy8gLnRocm93LCBhbmQgLnJldHVybiAoc2VlIGRlZmluZUl0ZXJhdG9yTWV0aG9kcykuXG4gICAgdGhpcy5faW52b2tlID0gZW5xdWV1ZTtcbiAgfVxuXG4gIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhBc3luY0l0ZXJhdG9yLnByb3RvdHlwZSk7XG4gIEFzeW5jSXRlcmF0b3IucHJvdG90eXBlW2FzeW5jSXRlcmF0b3JTeW1ib2xdID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICBydW50aW1lLkFzeW5jSXRlcmF0b3IgPSBBc3luY0l0ZXJhdG9yO1xuXG4gIC8vIE5vdGUgdGhhdCBzaW1wbGUgYXN5bmMgZnVuY3Rpb25zIGFyZSBpbXBsZW1lbnRlZCBvbiB0b3Agb2ZcbiAgLy8gQXN5bmNJdGVyYXRvciBvYmplY3RzOyB0aGV5IGp1c3QgcmV0dXJuIGEgUHJvbWlzZSBmb3IgdGhlIHZhbHVlIG9mXG4gIC8vIHRoZSBmaW5hbCByZXN1bHQgcHJvZHVjZWQgYnkgdGhlIGl0ZXJhdG9yLlxuICBydW50aW1lLmFzeW5jID0gZnVuY3Rpb24oaW5uZXJGbiwgb3V0ZXJGbiwgc2VsZiwgdHJ5TG9jc0xpc3QpIHtcbiAgICB2YXIgaXRlciA9IG5ldyBBc3luY0l0ZXJhdG9yKFxuICAgICAgd3JhcChpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdClcbiAgICApO1xuXG4gICAgcmV0dXJuIHJ1bnRpbWUuaXNHZW5lcmF0b3JGdW5jdGlvbihvdXRlckZuKVxuICAgICAgPyBpdGVyIC8vIElmIG91dGVyRm4gaXMgYSBnZW5lcmF0b3IsIHJldHVybiB0aGUgZnVsbCBpdGVyYXRvci5cbiAgICAgIDogaXRlci5uZXh0KCkudGhlbihmdW5jdGlvbihyZXN1bHQpIHtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0LmRvbmUgPyByZXN1bHQudmFsdWUgOiBpdGVyLm5leHQoKTtcbiAgICAgICAgfSk7XG4gIH07XG5cbiAgZnVuY3Rpb24gbWFrZUludm9rZU1ldGhvZChpbm5lckZuLCBzZWxmLCBjb250ZXh0KSB7XG4gICAgdmFyIHN0YXRlID0gR2VuU3RhdGVTdXNwZW5kZWRTdGFydDtcblxuICAgIHJldHVybiBmdW5jdGlvbiBpbnZva2UobWV0aG9kLCBhcmcpIHtcbiAgICAgIGlmIChzdGF0ZSA9PT0gR2VuU3RhdGVFeGVjdXRpbmcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgcnVubmluZ1wiKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHN0YXRlID09PSBHZW5TdGF0ZUNvbXBsZXRlZCkge1xuICAgICAgICBpZiAobWV0aG9kID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICB0aHJvdyBhcmc7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBCZSBmb3JnaXZpbmcsIHBlciAyNS4zLjMuMy4zIG9mIHRoZSBzcGVjOlxuICAgICAgICAvLyBodHRwczovL3Blb3BsZS5tb3ppbGxhLm9yZy9+am9yZW5kb3JmZi9lczYtZHJhZnQuaHRtbCNzZWMtZ2VuZXJhdG9ycmVzdW1lXG4gICAgICAgIHJldHVybiBkb25lUmVzdWx0KCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnRleHQubWV0aG9kID0gbWV0aG9kO1xuICAgICAgY29udGV4dC5hcmcgPSBhcmc7XG5cbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIHZhciBkZWxlZ2F0ZSA9IGNvbnRleHQuZGVsZWdhdGU7XG4gICAgICAgIGlmIChkZWxlZ2F0ZSkge1xuICAgICAgICAgIHZhciBkZWxlZ2F0ZVJlc3VsdCA9IG1heWJlSW52b2tlRGVsZWdhdGUoZGVsZWdhdGUsIGNvbnRleHQpO1xuICAgICAgICAgIGlmIChkZWxlZ2F0ZVJlc3VsdCkge1xuICAgICAgICAgICAgaWYgKGRlbGVnYXRlUmVzdWx0ID09PSBDb250aW51ZVNlbnRpbmVsKSBjb250aW51ZTtcbiAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZVJlc3VsdDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29udGV4dC5tZXRob2QgPT09IFwibmV4dFwiKSB7XG4gICAgICAgICAgLy8gU2V0dGluZyBjb250ZXh0Ll9zZW50IGZvciBsZWdhY3kgc3VwcG9ydCBvZiBCYWJlbCdzXG4gICAgICAgICAgLy8gZnVuY3Rpb24uc2VudCBpbXBsZW1lbnRhdGlvbi5cbiAgICAgICAgICBjb250ZXh0LnNlbnQgPSBjb250ZXh0Ll9zZW50ID0gY29udGV4dC5hcmc7XG5cbiAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgaWYgKHN0YXRlID09PSBHZW5TdGF0ZVN1c3BlbmRlZFN0YXJ0KSB7XG4gICAgICAgICAgICBzdGF0ZSA9IEdlblN0YXRlQ29tcGxldGVkO1xuICAgICAgICAgICAgdGhyb3cgY29udGV4dC5hcmc7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29udGV4dC5kaXNwYXRjaEV4Y2VwdGlvbihjb250ZXh0LmFyZyk7XG5cbiAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJyZXR1cm5cIikge1xuICAgICAgICAgIGNvbnRleHQuYWJydXB0KFwicmV0dXJuXCIsIGNvbnRleHQuYXJnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN0YXRlID0gR2VuU3RhdGVFeGVjdXRpbmc7XG5cbiAgICAgICAgdmFyIHJlY29yZCA9IHRyeUNhdGNoKGlubmVyRm4sIHNlbGYsIGNvbnRleHQpO1xuICAgICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwibm9ybWFsXCIpIHtcbiAgICAgICAgICAvLyBJZiBhbiBleGNlcHRpb24gaXMgdGhyb3duIGZyb20gaW5uZXJGbiwgd2UgbGVhdmUgc3RhdGUgPT09XG4gICAgICAgICAgLy8gR2VuU3RhdGVFeGVjdXRpbmcgYW5kIGxvb3AgYmFjayBmb3IgYW5vdGhlciBpbnZvY2F0aW9uLlxuICAgICAgICAgIHN0YXRlID0gY29udGV4dC5kb25lXG4gICAgICAgICAgICA/IEdlblN0YXRlQ29tcGxldGVkXG4gICAgICAgICAgICA6IEdlblN0YXRlU3VzcGVuZGVkWWllbGQ7XG5cbiAgICAgICAgICBpZiAocmVjb3JkLmFyZyA9PT0gQ29udGludWVTZW50aW5lbCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHZhbHVlOiByZWNvcmQuYXJnLFxuICAgICAgICAgICAgZG9uZTogY29udGV4dC5kb25lXG4gICAgICAgICAgfTtcblxuICAgICAgICB9IGVsc2UgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICBzdGF0ZSA9IEdlblN0YXRlQ29tcGxldGVkO1xuICAgICAgICAgIC8vIERpc3BhdGNoIHRoZSBleGNlcHRpb24gYnkgbG9vcGluZyBiYWNrIGFyb3VuZCB0byB0aGVcbiAgICAgICAgICAvLyBjb250ZXh0LmRpc3BhdGNoRXhjZXB0aW9uKGNvbnRleHQuYXJnKSBjYWxsIGFib3ZlLlxuICAgICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiO1xuICAgICAgICAgIGNvbnRleHQuYXJnID0gcmVjb3JkLmFyZztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICAvLyBDYWxsIGRlbGVnYXRlLml0ZXJhdG9yW2NvbnRleHQubWV0aG9kXShjb250ZXh0LmFyZykgYW5kIGhhbmRsZSB0aGVcbiAgLy8gcmVzdWx0LCBlaXRoZXIgYnkgcmV0dXJuaW5nIGEgeyB2YWx1ZSwgZG9uZSB9IHJlc3VsdCBmcm9tIHRoZVxuICAvLyBkZWxlZ2F0ZSBpdGVyYXRvciwgb3IgYnkgbW9kaWZ5aW5nIGNvbnRleHQubWV0aG9kIGFuZCBjb250ZXh0LmFyZyxcbiAgLy8gc2V0dGluZyBjb250ZXh0LmRlbGVnYXRlIHRvIG51bGwsIGFuZCByZXR1cm5pbmcgdGhlIENvbnRpbnVlU2VudGluZWwuXG4gIGZ1bmN0aW9uIG1heWJlSW52b2tlRGVsZWdhdGUoZGVsZWdhdGUsIGNvbnRleHQpIHtcbiAgICB2YXIgbWV0aG9kID0gZGVsZWdhdGUuaXRlcmF0b3JbY29udGV4dC5tZXRob2RdO1xuICAgIGlmIChtZXRob2QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gQSAudGhyb3cgb3IgLnJldHVybiB3aGVuIHRoZSBkZWxlZ2F0ZSBpdGVyYXRvciBoYXMgbm8gLnRocm93XG4gICAgICAvLyBtZXRob2QgYWx3YXlzIHRlcm1pbmF0ZXMgdGhlIHlpZWxkKiBsb29wLlxuICAgICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG5cbiAgICAgIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIGlmIChkZWxlZ2F0ZS5pdGVyYXRvci5yZXR1cm4pIHtcbiAgICAgICAgICAvLyBJZiB0aGUgZGVsZWdhdGUgaXRlcmF0b3IgaGFzIGEgcmV0dXJuIG1ldGhvZCwgZ2l2ZSBpdCBhXG4gICAgICAgICAgLy8gY2hhbmNlIHRvIGNsZWFuIHVwLlxuICAgICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJyZXR1cm5cIjtcbiAgICAgICAgICBjb250ZXh0LmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICBtYXliZUludm9rZURlbGVnYXRlKGRlbGVnYXRlLCBjb250ZXh0KTtcblxuICAgICAgICAgIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgICAvLyBJZiBtYXliZUludm9rZURlbGVnYXRlKGNvbnRleHQpIGNoYW5nZWQgY29udGV4dC5tZXRob2QgZnJvbVxuICAgICAgICAgICAgLy8gXCJyZXR1cm5cIiB0byBcInRocm93XCIsIGxldCB0aGF0IG92ZXJyaWRlIHRoZSBUeXBlRXJyb3IgYmVsb3cuXG4gICAgICAgICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIjtcbiAgICAgICAgY29udGV4dC5hcmcgPSBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgIFwiVGhlIGl0ZXJhdG9yIGRvZXMgbm90IHByb3ZpZGUgYSAndGhyb3cnIG1ldGhvZFwiKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuXG4gICAgdmFyIHJlY29yZCA9IHRyeUNhdGNoKG1ldGhvZCwgZGVsZWdhdGUuaXRlcmF0b3IsIGNvbnRleHQuYXJnKTtcblxuICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICBjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIjtcbiAgICAgIGNvbnRleHQuYXJnID0gcmVjb3JkLmFyZztcbiAgICAgIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsO1xuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuXG4gICAgdmFyIGluZm8gPSByZWNvcmQuYXJnO1xuXG4gICAgaWYgKCEgaW5mbykge1xuICAgICAgY29udGV4dC5tZXRob2QgPSBcInRocm93XCI7XG4gICAgICBjb250ZXh0LmFyZyA9IG5ldyBUeXBlRXJyb3IoXCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdFwiKTtcbiAgICAgIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsO1xuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuXG4gICAgaWYgKGluZm8uZG9uZSkge1xuICAgICAgLy8gQXNzaWduIHRoZSByZXN1bHQgb2YgdGhlIGZpbmlzaGVkIGRlbGVnYXRlIHRvIHRoZSB0ZW1wb3JhcnlcbiAgICAgIC8vIHZhcmlhYmxlIHNwZWNpZmllZCBieSBkZWxlZ2F0ZS5yZXN1bHROYW1lIChzZWUgZGVsZWdhdGVZaWVsZCkuXG4gICAgICBjb250ZXh0W2RlbGVnYXRlLnJlc3VsdE5hbWVdID0gaW5mby52YWx1ZTtcblxuICAgICAgLy8gUmVzdW1lIGV4ZWN1dGlvbiBhdCB0aGUgZGVzaXJlZCBsb2NhdGlvbiAoc2VlIGRlbGVnYXRlWWllbGQpLlxuICAgICAgY29udGV4dC5uZXh0ID0gZGVsZWdhdGUubmV4dExvYztcblxuICAgICAgLy8gSWYgY29udGV4dC5tZXRob2Qgd2FzIFwidGhyb3dcIiBidXQgdGhlIGRlbGVnYXRlIGhhbmRsZWQgdGhlXG4gICAgICAvLyBleGNlcHRpb24sIGxldCB0aGUgb3V0ZXIgZ2VuZXJhdG9yIHByb2NlZWQgbm9ybWFsbHkuIElmXG4gICAgICAvLyBjb250ZXh0Lm1ldGhvZCB3YXMgXCJuZXh0XCIsIGZvcmdldCBjb250ZXh0LmFyZyBzaW5jZSBpdCBoYXMgYmVlblxuICAgICAgLy8gXCJjb25zdW1lZFwiIGJ5IHRoZSBkZWxlZ2F0ZSBpdGVyYXRvci4gSWYgY29udGV4dC5tZXRob2Qgd2FzXG4gICAgICAvLyBcInJldHVyblwiLCBhbGxvdyB0aGUgb3JpZ2luYWwgLnJldHVybiBjYWxsIHRvIGNvbnRpbnVlIGluIHRoZVxuICAgICAgLy8gb3V0ZXIgZ2VuZXJhdG9yLlxuICAgICAgaWYgKGNvbnRleHQubWV0aG9kICE9PSBcInJldHVyblwiKSB7XG4gICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJuZXh0XCI7XG4gICAgICAgIGNvbnRleHQuYXJnID0gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFJlLXlpZWxkIHRoZSByZXN1bHQgcmV0dXJuZWQgYnkgdGhlIGRlbGVnYXRlIG1ldGhvZC5cbiAgICAgIHJldHVybiBpbmZvO1xuICAgIH1cblxuICAgIC8vIFRoZSBkZWxlZ2F0ZSBpdGVyYXRvciBpcyBmaW5pc2hlZCwgc28gZm9yZ2V0IGl0IGFuZCBjb250aW51ZSB3aXRoXG4gICAgLy8gdGhlIG91dGVyIGdlbmVyYXRvci5cbiAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcbiAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgfVxuXG4gIC8vIERlZmluZSBHZW5lcmF0b3IucHJvdG90eXBlLntuZXh0LHRocm93LHJldHVybn0gaW4gdGVybXMgb2YgdGhlXG4gIC8vIHVuaWZpZWQgLl9pbnZva2UgaGVscGVyIG1ldGhvZC5cbiAgZGVmaW5lSXRlcmF0b3JNZXRob2RzKEdwKTtcblxuICBHcFt0b1N0cmluZ1RhZ1N5bWJvbF0gPSBcIkdlbmVyYXRvclwiO1xuXG4gIC8vIEEgR2VuZXJhdG9yIHNob3VsZCBhbHdheXMgcmV0dXJuIGl0c2VsZiBhcyB0aGUgaXRlcmF0b3Igb2JqZWN0IHdoZW4gdGhlXG4gIC8vIEBAaXRlcmF0b3IgZnVuY3Rpb24gaXMgY2FsbGVkIG9uIGl0LiBTb21lIGJyb3dzZXJzJyBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlXG4gIC8vIGl0ZXJhdG9yIHByb3RvdHlwZSBjaGFpbiBpbmNvcnJlY3RseSBpbXBsZW1lbnQgdGhpcywgY2F1c2luZyB0aGUgR2VuZXJhdG9yXG4gIC8vIG9iamVjdCB0byBub3QgYmUgcmV0dXJuZWQgZnJvbSB0aGlzIGNhbGwuIFRoaXMgZW5zdXJlcyB0aGF0IGRvZXNuJ3QgaGFwcGVuLlxuICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlZ2VuZXJhdG9yL2lzc3Vlcy8yNzQgZm9yIG1vcmUgZGV0YWlscy5cbiAgR3BbaXRlcmF0b3JTeW1ib2xdID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgR3AudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gXCJbb2JqZWN0IEdlbmVyYXRvcl1cIjtcbiAgfTtcblxuICBmdW5jdGlvbiBwdXNoVHJ5RW50cnkobG9jcykge1xuICAgIHZhciBlbnRyeSA9IHsgdHJ5TG9jOiBsb2NzWzBdIH07XG5cbiAgICBpZiAoMSBpbiBsb2NzKSB7XG4gICAgICBlbnRyeS5jYXRjaExvYyA9IGxvY3NbMV07XG4gICAgfVxuXG4gICAgaWYgKDIgaW4gbG9jcykge1xuICAgICAgZW50cnkuZmluYWxseUxvYyA9IGxvY3NbMl07XG4gICAgICBlbnRyeS5hZnRlckxvYyA9IGxvY3NbM107XG4gICAgfVxuXG4gICAgdGhpcy50cnlFbnRyaWVzLnB1c2goZW50cnkpO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVzZXRUcnlFbnRyeShlbnRyeSkge1xuICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uIHx8IHt9O1xuICAgIHJlY29yZC50eXBlID0gXCJub3JtYWxcIjtcbiAgICBkZWxldGUgcmVjb3JkLmFyZztcbiAgICBlbnRyeS5jb21wbGV0aW9uID0gcmVjb3JkO1xuICB9XG5cbiAgZnVuY3Rpb24gQ29udGV4dCh0cnlMb2NzTGlzdCkge1xuICAgIC8vIFRoZSByb290IGVudHJ5IG9iamVjdCAoZWZmZWN0aXZlbHkgYSB0cnkgc3RhdGVtZW50IHdpdGhvdXQgYSBjYXRjaFxuICAgIC8vIG9yIGEgZmluYWxseSBibG9jaykgZ2l2ZXMgdXMgYSBwbGFjZSB0byBzdG9yZSB2YWx1ZXMgdGhyb3duIGZyb21cbiAgICAvLyBsb2NhdGlvbnMgd2hlcmUgdGhlcmUgaXMgbm8gZW5jbG9zaW5nIHRyeSBzdGF0ZW1lbnQuXG4gICAgdGhpcy50cnlFbnRyaWVzID0gW3sgdHJ5TG9jOiBcInJvb3RcIiB9XTtcbiAgICB0cnlMb2NzTGlzdC5mb3JFYWNoKHB1c2hUcnlFbnRyeSwgdGhpcyk7XG4gICAgdGhpcy5yZXNldCh0cnVlKTtcbiAgfVxuXG4gIHJ1bnRpbWUua2V5cyA9IGZ1bmN0aW9uKG9iamVjdCkge1xuICAgIHZhciBrZXlzID0gW107XG4gICAgZm9yICh2YXIga2V5IGluIG9iamVjdCkge1xuICAgICAga2V5cy5wdXNoKGtleSk7XG4gICAgfVxuICAgIGtleXMucmV2ZXJzZSgpO1xuXG4gICAgLy8gUmF0aGVyIHRoYW4gcmV0dXJuaW5nIGFuIG9iamVjdCB3aXRoIGEgbmV4dCBtZXRob2QsIHdlIGtlZXBcbiAgICAvLyB0aGluZ3Mgc2ltcGxlIGFuZCByZXR1cm4gdGhlIG5leHQgZnVuY3Rpb24gaXRzZWxmLlxuICAgIHJldHVybiBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgd2hpbGUgKGtleXMubGVuZ3RoKSB7XG4gICAgICAgIHZhciBrZXkgPSBrZXlzLnBvcCgpO1xuICAgICAgICBpZiAoa2V5IGluIG9iamVjdCkge1xuICAgICAgICAgIG5leHQudmFsdWUgPSBrZXk7XG4gICAgICAgICAgbmV4dC5kb25lID0gZmFsc2U7XG4gICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gVG8gYXZvaWQgY3JlYXRpbmcgYW4gYWRkaXRpb25hbCBvYmplY3QsIHdlIGp1c3QgaGFuZyB0aGUgLnZhbHVlXG4gICAgICAvLyBhbmQgLmRvbmUgcHJvcGVydGllcyBvZmYgdGhlIG5leHQgZnVuY3Rpb24gb2JqZWN0IGl0c2VsZi4gVGhpc1xuICAgICAgLy8gYWxzbyBlbnN1cmVzIHRoYXQgdGhlIG1pbmlmaWVyIHdpbGwgbm90IGFub255bWl6ZSB0aGUgZnVuY3Rpb24uXG4gICAgICBuZXh0LmRvbmUgPSB0cnVlO1xuICAgICAgcmV0dXJuIG5leHQ7XG4gICAgfTtcbiAgfTtcblxuICBmdW5jdGlvbiB2YWx1ZXMoaXRlcmFibGUpIHtcbiAgICBpZiAoaXRlcmFibGUpIHtcbiAgICAgIHZhciBpdGVyYXRvck1ldGhvZCA9IGl0ZXJhYmxlW2l0ZXJhdG9yU3ltYm9sXTtcbiAgICAgIGlmIChpdGVyYXRvck1ldGhvZCkge1xuICAgICAgICByZXR1cm4gaXRlcmF0b3JNZXRob2QuY2FsbChpdGVyYWJsZSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgaXRlcmFibGUubmV4dCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHJldHVybiBpdGVyYWJsZTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFpc05hTihpdGVyYWJsZS5sZW5ndGgpKSB7XG4gICAgICAgIHZhciBpID0gLTEsIG5leHQgPSBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgIHdoaWxlICgrK2kgPCBpdGVyYWJsZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmIChoYXNPd24uY2FsbChpdGVyYWJsZSwgaSkpIHtcbiAgICAgICAgICAgICAgbmV4dC52YWx1ZSA9IGl0ZXJhYmxlW2ldO1xuICAgICAgICAgICAgICBuZXh0LmRvbmUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbmV4dC52YWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICBuZXh0LmRvbmUgPSB0cnVlO1xuXG4gICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIG5leHQubmV4dCA9IG5leHQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmV0dXJuIGFuIGl0ZXJhdG9yIHdpdGggbm8gdmFsdWVzLlxuICAgIHJldHVybiB7IG5leHQ6IGRvbmVSZXN1bHQgfTtcbiAgfVxuICBydW50aW1lLnZhbHVlcyA9IHZhbHVlcztcblxuICBmdW5jdGlvbiBkb25lUmVzdWx0KCkge1xuICAgIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfTtcbiAgfVxuXG4gIENvbnRleHQucHJvdG90eXBlID0ge1xuICAgIGNvbnN0cnVjdG9yOiBDb250ZXh0LFxuXG4gICAgcmVzZXQ6IGZ1bmN0aW9uKHNraXBUZW1wUmVzZXQpIHtcbiAgICAgIHRoaXMucHJldiA9IDA7XG4gICAgICB0aGlzLm5leHQgPSAwO1xuICAgICAgLy8gUmVzZXR0aW5nIGNvbnRleHQuX3NlbnQgZm9yIGxlZ2FjeSBzdXBwb3J0IG9mIEJhYmVsJ3NcbiAgICAgIC8vIGZ1bmN0aW9uLnNlbnQgaW1wbGVtZW50YXRpb24uXG4gICAgICB0aGlzLnNlbnQgPSB0aGlzLl9zZW50ID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5kb25lID0gZmFsc2U7XG4gICAgICB0aGlzLmRlbGVnYXRlID0gbnVsbDtcblxuICAgICAgdGhpcy5tZXRob2QgPSBcIm5leHRcIjtcbiAgICAgIHRoaXMuYXJnID0gdW5kZWZpbmVkO1xuXG4gICAgICB0aGlzLnRyeUVudHJpZXMuZm9yRWFjaChyZXNldFRyeUVudHJ5KTtcblxuICAgICAgaWYgKCFza2lwVGVtcFJlc2V0KSB7XG4gICAgICAgIGZvciAodmFyIG5hbWUgaW4gdGhpcykge1xuICAgICAgICAgIC8vIE5vdCBzdXJlIGFib3V0IHRoZSBvcHRpbWFsIG9yZGVyIG9mIHRoZXNlIGNvbmRpdGlvbnM6XG4gICAgICAgICAgaWYgKG5hbWUuY2hhckF0KDApID09PSBcInRcIiAmJlxuICAgICAgICAgICAgICBoYXNPd24uY2FsbCh0aGlzLCBuYW1lKSAmJlxuICAgICAgICAgICAgICAhaXNOYU4oK25hbWUuc2xpY2UoMSkpKSB7XG4gICAgICAgICAgICB0aGlzW25hbWVdID0gdW5kZWZpbmVkO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzdG9wOiBmdW5jdGlvbigpIHtcbiAgICAgIHRoaXMuZG9uZSA9IHRydWU7XG5cbiAgICAgIHZhciByb290RW50cnkgPSB0aGlzLnRyeUVudHJpZXNbMF07XG4gICAgICB2YXIgcm9vdFJlY29yZCA9IHJvb3RFbnRyeS5jb21wbGV0aW9uO1xuICAgICAgaWYgKHJvb3RSZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIHRocm93IHJvb3RSZWNvcmQuYXJnO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5ydmFsO1xuICAgIH0sXG5cbiAgICBkaXNwYXRjaEV4Y2VwdGlvbjogZnVuY3Rpb24oZXhjZXB0aW9uKSB7XG4gICAgICBpZiAodGhpcy5kb25lKSB7XG4gICAgICAgIHRocm93IGV4Y2VwdGlvbjtcbiAgICAgIH1cblxuICAgICAgdmFyIGNvbnRleHQgPSB0aGlzO1xuICAgICAgZnVuY3Rpb24gaGFuZGxlKGxvYywgY2F1Z2h0KSB7XG4gICAgICAgIHJlY29yZC50eXBlID0gXCJ0aHJvd1wiO1xuICAgICAgICByZWNvcmQuYXJnID0gZXhjZXB0aW9uO1xuICAgICAgICBjb250ZXh0Lm5leHQgPSBsb2M7XG5cbiAgICAgICAgaWYgKGNhdWdodCkge1xuICAgICAgICAgIC8vIElmIHRoZSBkaXNwYXRjaGVkIGV4Y2VwdGlvbiB3YXMgY2F1Z2h0IGJ5IGEgY2F0Y2ggYmxvY2ssXG4gICAgICAgICAgLy8gdGhlbiBsZXQgdGhhdCBjYXRjaCBibG9jayBoYW5kbGUgdGhlIGV4Y2VwdGlvbiBub3JtYWxseS5cbiAgICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgICAgIGNvbnRleHQuYXJnID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICEhIGNhdWdodDtcbiAgICAgIH1cblxuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uO1xuXG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPT09IFwicm9vdFwiKSB7XG4gICAgICAgICAgLy8gRXhjZXB0aW9uIHRocm93biBvdXRzaWRlIG9mIGFueSB0cnkgYmxvY2sgdGhhdCBjb3VsZCBoYW5kbGVcbiAgICAgICAgICAvLyBpdCwgc28gc2V0IHRoZSBjb21wbGV0aW9uIHZhbHVlIG9mIHRoZSBlbnRpcmUgZnVuY3Rpb24gdG9cbiAgICAgICAgICAvLyB0aHJvdyB0aGUgZXhjZXB0aW9uLlxuICAgICAgICAgIHJldHVybiBoYW5kbGUoXCJlbmRcIik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZW50cnkudHJ5TG9jIDw9IHRoaXMucHJldikge1xuICAgICAgICAgIHZhciBoYXNDYXRjaCA9IGhhc093bi5jYWxsKGVudHJ5LCBcImNhdGNoTG9jXCIpO1xuICAgICAgICAgIHZhciBoYXNGaW5hbGx5ID0gaGFzT3duLmNhbGwoZW50cnksIFwiZmluYWxseUxvY1wiKTtcblxuICAgICAgICAgIGlmIChoYXNDYXRjaCAmJiBoYXNGaW5hbGx5KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgZW50cnkuY2F0Y2hMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5jYXRjaExvYywgdHJ1ZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5maW5hbGx5TG9jKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0gZWxzZSBpZiAoaGFzQ2F0Y2gpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBlbnRyeS5jYXRjaExvYykge1xuICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlKGVudHJ5LmNhdGNoTG9jLCB0cnVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0gZWxzZSBpZiAoaGFzRmluYWxseSkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5maW5hbGx5TG9jKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ0cnkgc3RhdGVtZW50IHdpdGhvdXQgY2F0Y2ggb3IgZmluYWxseVwiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYWJydXB0OiBmdW5jdGlvbih0eXBlLCBhcmcpIHtcbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICBpZiAoZW50cnkudHJ5TG9jIDw9IHRoaXMucHJldiAmJlxuICAgICAgICAgICAgaGFzT3duLmNhbGwoZW50cnksIFwiZmluYWxseUxvY1wiKSAmJlxuICAgICAgICAgICAgdGhpcy5wcmV2IDwgZW50cnkuZmluYWxseUxvYykge1xuICAgICAgICAgIHZhciBmaW5hbGx5RW50cnkgPSBlbnRyeTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZmluYWxseUVudHJ5ICYmXG4gICAgICAgICAgKHR5cGUgPT09IFwiYnJlYWtcIiB8fFxuICAgICAgICAgICB0eXBlID09PSBcImNvbnRpbnVlXCIpICYmXG4gICAgICAgICAgZmluYWxseUVudHJ5LnRyeUxvYyA8PSBhcmcgJiZcbiAgICAgICAgICBhcmcgPD0gZmluYWxseUVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgLy8gSWdub3JlIHRoZSBmaW5hbGx5IGVudHJ5IGlmIGNvbnRyb2wgaXMgbm90IGp1bXBpbmcgdG8gYVxuICAgICAgICAvLyBsb2NhdGlvbiBvdXRzaWRlIHRoZSB0cnkvY2F0Y2ggYmxvY2suXG4gICAgICAgIGZpbmFsbHlFbnRyeSA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIHZhciByZWNvcmQgPSBmaW5hbGx5RW50cnkgPyBmaW5hbGx5RW50cnkuY29tcGxldGlvbiA6IHt9O1xuICAgICAgcmVjb3JkLnR5cGUgPSB0eXBlO1xuICAgICAgcmVjb3JkLmFyZyA9IGFyZztcblxuICAgICAgaWYgKGZpbmFsbHlFbnRyeSkge1xuICAgICAgICB0aGlzLm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgICB0aGlzLm5leHQgPSBmaW5hbGx5RW50cnkuZmluYWxseUxvYztcbiAgICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLmNvbXBsZXRlKHJlY29yZCk7XG4gICAgfSxcblxuICAgIGNvbXBsZXRlOiBmdW5jdGlvbihyZWNvcmQsIGFmdGVyTG9jKSB7XG4gICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICB0aHJvdyByZWNvcmQuYXJnO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwiYnJlYWtcIiB8fFxuICAgICAgICAgIHJlY29yZC50eXBlID09PSBcImNvbnRpbnVlXCIpIHtcbiAgICAgICAgdGhpcy5uZXh0ID0gcmVjb3JkLmFyZztcbiAgICAgIH0gZWxzZSBpZiAocmVjb3JkLnR5cGUgPT09IFwicmV0dXJuXCIpIHtcbiAgICAgICAgdGhpcy5ydmFsID0gdGhpcy5hcmcgPSByZWNvcmQuYXJnO1xuICAgICAgICB0aGlzLm1ldGhvZCA9IFwicmV0dXJuXCI7XG4gICAgICAgIHRoaXMubmV4dCA9IFwiZW5kXCI7XG4gICAgICB9IGVsc2UgaWYgKHJlY29yZC50eXBlID09PSBcIm5vcm1hbFwiICYmIGFmdGVyTG9jKSB7XG4gICAgICAgIHRoaXMubmV4dCA9IGFmdGVyTG9jO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICB9LFxuXG4gICAgZmluaXNoOiBmdW5jdGlvbihmaW5hbGx5TG9jKSB7XG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcbiAgICAgICAgaWYgKGVudHJ5LmZpbmFsbHlMb2MgPT09IGZpbmFsbHlMb2MpIHtcbiAgICAgICAgICB0aGlzLmNvbXBsZXRlKGVudHJ5LmNvbXBsZXRpb24sIGVudHJ5LmFmdGVyTG9jKTtcbiAgICAgICAgICByZXNldFRyeUVudHJ5KGVudHJ5KTtcbiAgICAgICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBcImNhdGNoXCI6IGZ1bmN0aW9uKHRyeUxvYykge1xuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPT09IHRyeUxvYykge1xuICAgICAgICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uO1xuICAgICAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgICB2YXIgdGhyb3duID0gcmVjb3JkLmFyZztcbiAgICAgICAgICAgIHJlc2V0VHJ5RW50cnkoZW50cnkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdGhyb3duO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFRoZSBjb250ZXh0LmNhdGNoIG1ldGhvZCBtdXN0IG9ubHkgYmUgY2FsbGVkIHdpdGggYSBsb2NhdGlvblxuICAgICAgLy8gYXJndW1lbnQgdGhhdCBjb3JyZXNwb25kcyB0byBhIGtub3duIGNhdGNoIGJsb2NrLlxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaWxsZWdhbCBjYXRjaCBhdHRlbXB0XCIpO1xuICAgIH0sXG5cbiAgICBkZWxlZ2F0ZVlpZWxkOiBmdW5jdGlvbihpdGVyYWJsZSwgcmVzdWx0TmFtZSwgbmV4dExvYykge1xuICAgICAgdGhpcy5kZWxlZ2F0ZSA9IHtcbiAgICAgICAgaXRlcmF0b3I6IHZhbHVlcyhpdGVyYWJsZSksXG4gICAgICAgIHJlc3VsdE5hbWU6IHJlc3VsdE5hbWUsXG4gICAgICAgIG5leHRMb2M6IG5leHRMb2NcbiAgICAgIH07XG5cbiAgICAgIGlmICh0aGlzLm1ldGhvZCA9PT0gXCJuZXh0XCIpIHtcbiAgICAgICAgLy8gRGVsaWJlcmF0ZWx5IGZvcmdldCB0aGUgbGFzdCBzZW50IHZhbHVlIHNvIHRoYXQgd2UgZG9uJ3RcbiAgICAgICAgLy8gYWNjaWRlbnRhbGx5IHBhc3MgaXQgb24gdG8gdGhlIGRlbGVnYXRlLlxuICAgICAgICB0aGlzLmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuICB9O1xufSkoXG4gIC8vIEFtb25nIHRoZSB2YXJpb3VzIHRyaWNrcyBmb3Igb2J0YWluaW5nIGEgcmVmZXJlbmNlIHRvIHRoZSBnbG9iYWxcbiAgLy8gb2JqZWN0LCB0aGlzIHNlZW1zIHRvIGJlIHRoZSBtb3N0IHJlbGlhYmxlIHRlY2huaXF1ZSB0aGF0IGRvZXMgbm90XG4gIC8vIHVzZSBpbmRpcmVjdCBldmFsICh3aGljaCB2aW9sYXRlcyBDb250ZW50IFNlY3VyaXR5IFBvbGljeSkuXG4gIHR5cGVvZiBnbG9iYWwgPT09IFwib2JqZWN0XCIgPyBnbG9iYWwgOlxuICB0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiID8gd2luZG93IDpcbiAgdHlwZW9mIHNlbGYgPT09IFwib2JqZWN0XCIgPyBzZWxmIDogdGhpc1xuKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///329\n')},function(module,exports,__webpack_require__){eval("__webpack_require__(331);\nmodule.exports = __webpack_require__(18).RegExp.escape;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvZm4vcmVnZXhwL2VzY2FwZS5qcz9mZDVhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLG1CQUFPLENBQUMsR0FBa0M7QUFDMUMsaUJBQWlCLG1CQUFPLENBQUMsRUFBcUIiLCJmaWxlIjoiMzMwLmpzIiwic291cmNlc0NvbnRlbnQiOlsicmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9jb3JlLnJlZ2V4cC5lc2NhcGUnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9fY29yZScpLlJlZ0V4cC5lc2NhcGU7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///330\n")},function(module,exports,__webpack_require__){eval("// https://github.com/benjamingr/RexExp.escape\nvar $export = __webpack_require__(0);\nvar $re = __webpack_require__(332)(/[\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n\n$export($export.S, 'RegExp', { escape: function escape(it) { return $re(it); } });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9jb3JlLnJlZ2V4cC5lc2NhcGUuanM/ZDBjYSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLFVBQVUsbUJBQU8sQ0FBQyxHQUFhLG9CQUFvQjs7QUFFbkQsOEJBQThCLDhCQUE4QixnQkFBZ0IsRUFBRSxFQUFFIiwiZmlsZSI6IjMzMS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9iZW5qYW1pbmdyL1JleEV4cC5lc2NhcGVcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHJlID0gcmVxdWlyZSgnLi9fcmVwbGFjZXInKSgvW1xcXFxeJCorPy4oKXxbXFxde31dL2csICdcXFxcJCYnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWdFeHAnLCB7IGVzY2FwZTogZnVuY3Rpb24gZXNjYXBlKGl0KSB7IHJldHVybiAkcmUoaXQpOyB9IH0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///331\n")},function(module,exports){eval("module.exports = function (regExp, replace) {\n var replacer = replace === Object(replace) ? function (part) {\n return replace[part];\n } : replace;\n return function (it) {\n return String(it).replace(regExp, replacer);\n };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcmVwbGFjZXIuanM/YWJkNyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMzMyLmpzIiwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAocmVnRXhwLCByZXBsYWNlKSB7XG4gIHZhciByZXBsYWNlciA9IHJlcGxhY2UgPT09IE9iamVjdChyZXBsYWNlKSA/IGZ1bmN0aW9uIChwYXJ0KSB7XG4gICAgcmV0dXJuIHJlcGxhY2VbcGFydF07XG4gIH0gOiByZXBsYWNlO1xuICByZXR1cm4gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIFN0cmluZyhpdCkucmVwbGFjZShyZWdFeHAsIHJlcGxhY2VyKTtcbiAgfTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///332\n")},function(module,__webpack_exports__,__webpack_require__){"use strict";eval('// ESM COMPAT FLAG\n__webpack_require__.r(__webpack_exports__);\n\n// CONCATENATED MODULE: ./src/core/Deferred.js\nfunction _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }\n\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\n\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."); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction _wrapNativeSuper(Class) { var _cache = typeof Map === "function" ? new Map() : undefined; _wrapNativeSuper = function _wrapNativeSuper(Class) { if (Class === null || !_isNativeFunction(Class)) return Class; if (typeof Class !== "function") { throw new TypeError("Super expression must either be null or a function"); } if (typeof _cache !== "undefined") { if (_cache.has(Class)) return _cache.get(Class); _cache.set(Class, Wrapper); } function Wrapper() { return _construct(Class, arguments, _getPrototypeOf(this).constructor); } Wrapper.prototype = Object.create(Class.prototype, { constructor: { value: Wrapper, enumerable: false, writable: true, configurable: true } }); return _setPrototypeOf(Wrapper, Class); }; return _wrapNativeSuper(Class); }\n\nfunction _construct(Parent, args, Class) { if (_isNativeReflectConstruct()) { _construct = Reflect.construct; } else { _construct = function _construct(Parent, args, Class) { var a = [null]; a.push.apply(a, args); var Constructor = Function.bind.apply(Parent, a); var instance = new Constructor(); if (Class) _setPrototypeOf(instance, Class.prototype); return instance; }; } return _construct.apply(null, arguments); }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _isNativeFunction(fn) { return Function.toString.call(fn).indexOf("[native code]") !== -1; }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/**\r\n * The built-in class for asynchronous Promises.\r\n * @external Promise\r\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise\r\n */\n\n/**\r\n * A Promise object that can be resolved, rejected or canceled at any time by the\r\n * user.\r\n *\r\n * @extends external:Promise\r\n */\nvar Deferred = /*#__PURE__*/function (_Promise) {\n _inherits(Deferred, _Promise);\n\n var _super = _createSuper(Deferred);\n\n /**\r\n * @constructor\r\n *\r\n * @param {Function} [executable=() => {}] - The function to be executed by the\r\n * constructor, during the process of constructing the promise. The signature\r\n * of this is expected to be: executable( resolutionFunc, rejectionFunc, cancellationFunc ).\r\n * @param {Function=} onResolve - Optional function to execute once the promise\r\n * is resolved.\r\n * @param {Function=} onReject - Optional function to execute once the promise\r\n * is rejected.\r\n * @param {Function=} onCancel - Optional function to execute if the user cancels\r\n * the promise. Canceling results in the promise having a status of \'resolved\'.\r\n */\n function Deferred() {\n var _this;\n\n var executable = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : function () {};\n var onResolve = arguments.length > 1 ? arguments[1] : undefined;\n var onReject = arguments.length > 2 ? arguments[2] : undefined;\n var onCancel = arguments.length > 3 ? arguments[3] : undefined;\n\n _classCallCheck(this, Deferred);\n\n if (typeof executable !== \'function\') {\n throw new Error("Cannot create new Deferred. Executable must be a function.");\n }\n\n if (typeof onResolve !== \'undefined\' && typeof onResolve !== \'function\') {\n throw new Error("Cannot create new Deferred. OnResolve must be a function.");\n }\n\n if (typeof onReject !== \'undefined\' && typeof onReject !== \'function\') {\n throw new Error("Cannot create new Deferred. OnReject must be a function.");\n }\n\n if (typeof onCancel !== \'undefined\' && typeof onCancel !== \'function\') {\n throw new Error("Cannot create new Deferred. OnCancel must be a function.");\n }\n\n var res;\n var rej;\n var cancel;\n var status = {\n resolved: false,\n rejected: false,\n canceled: false,\n pending: true\n };\n _this = _super.call(this, function (resolve, reject) {\n // Store the resolver\n res = function res(value) {\n if (status.pending) {\n status.resolved = true;\n status.pending = false;\n\n if (typeof onResolve === \'function\') {\n value = onResolve(value);\n }\n\n return resolve(value);\n }\n }; // Store the rejecter\n\n\n rej = function rej(value) {\n if (status.pending) {\n status.rejected = true;\n status.pending = false;\n\n if (typeof onReject === \'function\') {\n value = onReject(value);\n }\n\n return reject(value);\n }\n }; // Store the canceler\n\n\n cancel = function cancel(value) {\n if (status.pending) {\n status.canceled = true;\n status.pending = false;\n\n if (typeof onCancel === \'function\') {\n value = onCancel(value);\n }\n\n return resolve(value);\n }\n }; // Run the executable with custom resolver and rejecter\n\n\n executable(res, rej, cancel);\n });\n _this._status = status;\n _this._resolve = res;\n _this._reject = rej;\n _this._cancel = cancel;\n _this._executable = executable;\n return _this;\n }\n /**\r\n * Gets the resolved state of the promise.\r\n *\r\n * @readonly\r\n */\n\n\n _createClass(Deferred, [{\n key: "resolved",\n get: function get() {\n return this._status.resolved;\n }\n /**\r\n * Gets the rejected state of the promise.\r\n *\r\n * @readonly\r\n */\n\n }, {\n key: "rejected",\n get: function get() {\n return this._status.rejected;\n }\n /**\r\n * Gets the canceled state of the promise.\r\n *\r\n * @readonly\r\n */\n\n }, {\n key: "canceled",\n get: function get() {\n return this._status.canceled;\n }\n /**\r\n * Gets the pending state of the promise.\r\n *\r\n * @readonly\r\n */\n\n }, {\n key: "pending",\n get: function get() {\n return this._status.pending;\n }\n /**\r\n * Force the promise to resolve.\r\n *\r\n * @param {any=} value - Value to pass to the resolver.\r\n *\r\n * @returns {any} - The return value of the resolver function.\r\n */\n\n }, {\n key: "resolve",\n value: function resolve(value) {\n return this._resolve(value);\n }\n /**\r\n * Force the promise to reject.\r\n *\r\n * @param {any=} value - Value to pass to the rejecter.\r\n *\r\n * @returns {any} - The return value of the rejecter function.\r\n */\n\n }, {\n key: "reject",\n value: function reject(value) {\n return this._reject(value);\n }\n /**\r\n * Force the promise to resolve and set the canceled state to true.\r\n *\r\n * @param {any=} value - Value to pass to the canceller.\r\n *\r\n * @returns {any} - The return value of the canceller function.\r\n */\n\n }, {\n key: "cancel",\n value: function cancel(value) {\n return this._cancel(value);\n }\n /**\r\n * Run the promise function to try to resolve the promise. Promise must be\r\n * pending.\r\n *\r\n * @param {...any} args - Optional arguments to pass after resolve and reject.\r\n */\n\n }, {\n key: "execute",\n value: function execute() {\n if (this.pending) {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n this._executable.apply(this, [this._resolve, this._reject, this._cancel].concat(args));\n }\n }\n /**\r\n * Return a canceled deferred promise.\r\n *\r\n * @param {any=} value - Value to cancel the promise with.\r\n *\r\n * @returns {Deferred}\r\n */\n\n }], [{\n key: "cancel",\n value: function cancel(value) {\n return new Deferred(function (_resolve, _reject, cancel) {\n cancel(value);\n });\n }\n /**\r\n * Return a new Deferred promise that will resolve or reject once all promises\r\n * in the input array have been resolved or one promise is canceled or rejected.\r\n * Promises in the array that are Deferred promises will be manually resolved,\r\n * rejected or canceled when calling resolve, reject or cancel on the return promise.\r\n *\r\n * @param {Array.} iterable - An iterable such as an array.\r\n * @param {Function=} onResolve - Optional function to execute once the promise\r\n * is resolved.\r\n * @param {Function=} onReject - Optional function to execute once the promise\r\n * is rejected.\r\n * @param {Function=} onCancel - Optional function to execute if the user cancels\r\n * the promise. Canceling results in the promise having a status of \'canceled\'.\r\n *\r\n * @returns Deferred\r\n */\n\n }, {\n key: "all",\n value: function all(iterable, onResolve, onReject, onCancel) {\n if (iterable == null || typeof iterable[Symbol.iterator] !== \'function\') {\n var e = "Cannot execute Deferred.all. First argument must be iterable.";\n\n if (typeof onReject === \'function\') {\n e = onReject(e);\n }\n\n return Deferred.reject(e);\n }\n\n var array = _toConsumableArray(iterable);\n\n var deferred = array.filter(function (item) {\n return item instanceof Deferred;\n });\n var result = new Deferred(undefined, function (resolveValue) {\n deferred.forEach(function (item) {\n item.resolve(resolveValue);\n });\n deferred.length = 0;\n\n if (typeof onResolve === \'function\') {\n return onResolve(resolveValue);\n } else {\n return resolveValue;\n }\n }, function (error) {\n deferred.forEach(function (item) {\n item.reject(error);\n });\n deferred.length = 0;\n\n if (typeof onReject === \'function\') {\n return onReject(error);\n } else {\n return error;\n }\n }, function (cancelValue) {\n deferred.forEach(function (item) {\n item.cancel(cancelValue);\n });\n deferred.length = 0;\n\n if (typeof onCancel === \'function\') {\n return onCancel(cancelValue);\n } else {\n return cancelValue;\n }\n });\n var numItems = array.length;\n var itemTracker = {\n failed: false,\n numResolved: 0,\n resolutions: []\n };\n array.forEach(function (item, index) {\n if (itemTracker.failed) {\n return;\n } else if (!(item instanceof Promise)) {\n itemTracker.resolutions[index] = item;\n itemTracker.numResolved += 1;\n\n if (itemTracker.numResolved === numItems) {\n result.resolve(itemTracker.resolutions);\n }\n\n return;\n }\n\n item.then(function (value) {\n if (!itemTracker.failed && !item.canceled) {\n itemTracker.resolutions[index] = value;\n itemTracker.numResolved += 1;\n\n if (itemTracker.numResolved === numItems) {\n result.resolve(itemTracker.resolutions);\n }\n } else if (!itemTracker.failed) {\n itemTracker.failed = true;\n result.cancel(value);\n }\n }, function (error) {\n if (!itemTracker.failed) {\n itemTracker.failed = true;\n result.reject(error);\n }\n });\n });\n return result;\n }\n }]);\n\n return Deferred;\n}( /*#__PURE__*/_wrapNativeSuper(Promise));\n\n/* harmony default export */ var core_Deferred = (Deferred);\n// CONCATENATED MODULE: ./src/core/Utils.js\nfunction Utils_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction Utils_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction Utils_createClass(Constructor, protoProps, staticProps) { if (protoProps) Utils_defineProperties(Constructor.prototype, protoProps); if (staticProps) Utils_defineProperties(Constructor, staticProps); return Constructor; }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/**\r\n * A collection of useful generic functions.\r\n *\r\n * @hideconstructor\r\n */\n\nvar Utils_Utils = /*#__PURE__*/function () {\n function Utils() {\n Utils_classCallCheck(this, Utils);\n }\n\n Utils_createClass(Utils, null, [{\n key: "createId",\n value:\n /**\r\n * @static\r\n *\r\n * Generate a unique id\r\n *\r\n * @returns {String}\r\n */\n function createId() {\n return \'xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx\'.replace(/[xy]/g, function (c) {\n var randomNumber = Math.floor((Date.now() + Math.random() * 16) % 16);\n\n if (c === \'x\') {\n return randomNumber.toString(16);\n } // Set bit 6 and 7 to 0 and 1\n\n\n return (randomNumber & 0x3 | 0x8).toString(16);\n });\n }\n /**\r\n * @static\r\n *\r\n * Check a name string against an array of strings to determine if it is unique.\r\n * If it isn\'t, append incremented trailing integers to the end of the name\r\n * until it is unique.\r\n *\r\n * @param {string} name - String name to make unique.\r\n * @param {Array.=} nameArray - Array of string names to check agains.\r\n *\r\n * @returns {string}\r\n */\n\n }, {\n key: "getUniqueName",\n value: function getUniqueName(name) {\n var nameArray = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n\n // If the name isn\'t in the array return it right away\n if (!nameArray.includes(name)) {\n return name;\n }\n\n var nameSet = new Set(nameArray); // Separate the name into string and trailing numbers\n\n var matchGroup = name.match(/\\d*$/);\n var index = matchGroup.index;\n var baseName = name.slice(0, index);\n var increment = Number(matchGroup[0]); // Find the highest trailing number value for the base of the name\n\n nameSet.forEach(function (setName) {\n var setMatchGroup = setName.match(/\\d*$/);\n\n if (setName.slice(0, setMatchGroup.index) === baseName) {\n var setIncrement = Number(setMatchGroup[0]);\n\n if (setIncrement > increment) {\n increment = setIncrement;\n }\n }\n }); // Increment the highest trailing number and append to the name\n\n return "".concat(baseName).concat(increment + 1);\n }\n /**\r\n * Return a deferred promise that will wait a given number of seconds before\r\n * resolving. Pass delta time in milliseconds to the deferred promise\'s execute\r\n * method in an update loop to progress time.\r\n *\r\n * @param {number} [seconds=0] - Number of seconds to wait before resolving.\r\n * @param {Object=} options - Optional options object\r\n * @param {Function} [options.onFinish] - Callback to execute once the wait time\r\n * is met.\r\n * @param {Function=} options.onProgress - Callback to execute each time the wait\r\n * time progresses towards the target number of seconds. The amount of progress\r\n * as a 0-1 percentage is passed as an argument.\r\n * @param {Function=} options.onCancel - Callback to execute if the user cancels\r\n * the wait before completion.\r\n * @param {Function=} options.onError - Callback to execute if the wait stops\r\n * because an error is encountered. The error message is passed as a parameter.\r\n *\r\n * @returns {Deferred}\r\n */\n\n }, {\n key: "wait",\n value: function wait() {\n var seconds = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n\n var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n onFinish = _ref.onFinish,\n onProgress = _ref.onProgress,\n onCancel = _ref.onCancel,\n onError = _ref.onError;\n\n // Make sure seconds is numeric\n if (typeof seconds !== \'number\') {\n console.warn("Invalid seconds value ".concat(seconds, " for wait. Defaulting to 0."));\n seconds = 0;\n } // Resolve immediately if the wait time is not greater than 0\n\n\n if (seconds <= 0) {\n if (typeof onFinish === \'function\') {\n onFinish();\n }\n\n return core_Deferred.resolve();\n }\n\n var currentTime = 0;\n var totalTime = seconds * 1000; // convert to milliseconds\n // Executable to pass to Deferred, meant to be run in an update loop\n\n var onUpdate = function onUpdate(resolve, reject, _cancel) {\n var deltaTime = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;\n\n if (typeof deltaTime !== \'number\') {\n var e = new Error("Invalid property wait deltaTime. DeltaTime must be a number.");\n reject(e);\n return;\n } // Make sure time has passed\n\n\n if (deltaTime === 0) {\n return;\n } // Signal progress\n\n\n currentTime += deltaTime;\n\n if (currentTime < 0) {\n currentTime = 0;\n }\n\n if (typeof onProgress === \'function\') {\n onProgress(Math.min(currentTime / totalTime, 1));\n } // Signal completion once time is up\n\n\n if (currentTime >= totalTime) {\n resolve();\n }\n };\n\n return new core_Deferred(onUpdate, onFinish, onError, onCancel);\n }\n /**\r\n * Get a random float number between a min (inclusive) and max (exclusive) value\r\n * @param {number} min minimum value\r\n * @param {number} max maximum value\r\n * @returns {float}\r\n */\n\n }, {\n key: "getRandomFloat",\n value: function getRandomFloat(min, max) {\n return Math.random() * (max - min) + min;\n }\n /**\r\n * Get a random integer number between a min (inclusive) and max (exclusive) value\r\n * @param {number} min minimum value\r\n * @param {number} max maximum value\r\n * @returns {integer}\r\n */\n\n }, {\n key: "getRandomInt",\n value: function getRandomInt(min, max) {\n min = Math.ceil(min);\n max = Math.floor(max);\n return Math.floor(Math.random() * (max - min)) + min;\n }\n }]);\n\n return Utils;\n}();\n\n/* harmony default export */ var core_Utils = (Utils_Utils);\n// CONCATENATED MODULE: ./src/core/MathUtils.js\nfunction MathUtils_toConsumableArray(arr) { return MathUtils_arrayWithoutHoles(arr) || MathUtils_iterableToArray(arr) || MathUtils_unsupportedIterableToArray(arr) || MathUtils_nonIterableSpread(); }\n\nfunction MathUtils_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."); }\n\nfunction MathUtils_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return MathUtils_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return MathUtils_arrayLikeToArray(o, minLen); }\n\nfunction MathUtils_iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction MathUtils_arrayWithoutHoles(arr) { if (Array.isArray(arr)) return MathUtils_arrayLikeToArray(arr); }\n\nfunction MathUtils_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction MathUtils_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction MathUtils_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction MathUtils_createClass(Constructor, protoProps, staticProps) { if (protoProps) MathUtils_defineProperties(Constructor.prototype, protoProps); if (staticProps) MathUtils_defineProperties(Constructor, staticProps); return Constructor; }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\nvar RadianToDegree = 180 / Math.PI;\nvar DegreeToRadian = Math.PI / 180;\n/**\r\n * A collection of useful math functions.\r\n *\r\n * @hideconstructor\r\n */\n\nvar MathUtils = /*#__PURE__*/function () {\n function MathUtils() {\n MathUtils_classCallCheck(this, MathUtils);\n }\n\n MathUtils_createClass(MathUtils, null, [{\n key: "toDegrees",\n value:\n /**\r\n * Convert the given angle from radians to degrees.\r\n *\r\n * @param {number} radians - Angle in radians.\r\n *\r\n * @returns {number} - Angle in degrees.\r\n */\n function toDegrees(radians) {\n return radians * RadianToDegree;\n }\n /**\r\n * Convert the given angle from degrees to radians.\r\n *\r\n * @param {number} degrees - Angle in degrees.\r\n *\r\n * @returns {number} - Angle in radians.\r\n */\n\n }, {\n key: "toRadians",\n value: function toRadians(degrees) {\n return degrees * DegreeToRadian;\n }\n /**\r\n * Linearly interpolate between two values.\r\n *\r\n * @param {number} from - Start value.\r\n * @param {number} to - Target value.\r\n * @param {number} factor - 0-1 amount to interpolate between from and to.\r\n *\r\n * @returns {number}\r\n */\n\n }, {\n key: "lerp",\n value: function lerp(from, to, factor) {\n return from + (to - from) * factor;\n }\n /**\r\n * Clamp a number between 2 values.\r\n *\r\n * @param {number} value - Value to clamp.\r\n * @param {number} [min=0] - Minumum value.\r\n * @param {number} [max=1] - Maximum value.\r\n *\r\n * @returns {number}\r\n */\n\n }, {\n key: "clamp",\n value: function clamp(value) {\n var min = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var max = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;\n return Math.max(min, Math.min(value, max));\n }\n /**\r\n * Calculates the closest point on a given 2D line segement\r\n * from a given 2D point.\r\n *\r\n * @param {Array.} a - First point on line segment.\r\n * @param {Array.} b - Second point on line segment.\r\n * @param {Array.} p - 2D point.\r\n *\r\n * @returns {Array.}\r\n */\n\n }, {\n key: "closestPointOnLine",\n value: function closestPointOnLine(a, b, p) {\n var distSqr = MathUtils.distanceSquared(a, b); // Line segment is a single point\n\n if (distSqr === 0) {\n return a;\n }\n\n var t = ((p[0] - a[0]) * (b[0] - a[0]) + (p[1] - a[1]) * (b[1] - a[1])) / distSqr;\n\n var point = MathUtils_toConsumableArray(a);\n\n if (t > 1) {\n point = MathUtils_toConsumableArray(b);\n } else if (t > 0) {\n point = [a[0] + t * (b[0] - a[0]), a[1] + t * (b[1] - a[1])];\n }\n\n return point;\n }\n /**\r\n * Gets the distance squared for two 2D points.\r\n * @param {Array.} a - 2D point.\r\n * @param {Array.} b - 2D point.\r\n *\r\n * @returns {number}\r\n */\n\n }, {\n key: "distanceSquared",\n value: function distanceSquared(a, b) {\n return (a[0] - b[0]) * (a[0] - b[0]) + (a[1] - b[1]) * (a[1] - b[1]);\n }\n /**\r\n * Triangulates a set of 2D points using an implementation\r\n * of the Bowyer-Watson incremental Delaunay triangulation.\r\n *\r\n * @param {Array.>} vertices - Array of 2D points.\r\n *\r\n * @returns {Array.>} - Array of triangle indices.\r\n */\n\n }, {\n key: "getDelaunayTriangulation",\n value: function getDelaunayTriangulation(vertices) {\n if (!vertices || vertices.length < 3) {\n throw new Error("Cannot get delaunay triangulation for points ".concat(vertices, ". Input must contain at least three points."));\n }\n\n var minX = Number.POSITIVE_INFINITY;\n var minY = Number.POSITIVE_INFINITY;\n var maxX = Number.NEGATIVE_INFINITY;\n var maxY = Number.NEGATIVE_INFINITY;\n vertices.forEach(function (v) {\n minX = v[0] < minX ? v[0] : minX;\n minY = v[1] < minY ? v[1] : minY;\n maxX = v[0] > maxX ? v[0] : maxX;\n maxY = v[1] > maxY ? v[1] : maxY;\n });\n var dX = maxX - minX;\n var dY = maxY - minY;\n var midX = (minX + maxX) / 2;\n var midY = (minY + maxY) / 2;\n var dMax = dX > dY ? dX : dY;\n var superIndices = [vertices.length, vertices.length + 1, vertices.length + 2];\n var vertsWithSuper = [].concat(MathUtils_toConsumableArray(vertices), [[midX - 20 * dMax, midY - dMax], [midX, midY + 20 * dMax], [midX + 20 * dMax, midY - dMax]]);\n var superSortedIndices = MathUtils.sortPointsCCW(superIndices, vertsWithSuper);\n var superTriangle = {\n indices: superSortedIndices,\n edges: [[superSortedIndices[0], superSortedIndices[1]], [superSortedIndices[1], superSortedIndices[2]], [superSortedIndices[2], superSortedIndices[0]]]\n };\n var triangles = [superTriangle];\n vertsWithSuper.forEach(function (newVert, newIndex) {\n var invalidTriangles = [];\n triangles.forEach(function (triangle) {\n if (MathUtils.isPointInCircumCircle(vertsWithSuper[triangle.indices[0]], vertsWithSuper[triangle.indices[1]], vertsWithSuper[triangle.indices[2]], newVert)) {\n invalidTriangles.push(triangle);\n }\n });\n var boundingPoly = [];\n invalidTriangles.forEach(function (triangle) {\n triangle.edges.forEach(function (edge) {\n var count = 0;\n invalidTriangles.forEach(function (otherTriangle) {\n if (triangle !== otherTriangle) {\n otherTriangle.edges.forEach(function (otherEdge) {\n if (edge[0] === otherEdge[0] && edge[1] === otherEdge[1] || edge[1] === otherEdge[0] && edge[0] === otherEdge[1]) {\n count += 1;\n }\n });\n }\n });\n if (count === 0) boundingPoly.push(edge);\n });\n });\n invalidTriangles.forEach(function (triangle) {\n triangles.splice(triangles.indexOf(triangle), 1);\n });\n boundingPoly.forEach(function (edge) {\n var sortedIndices = MathUtils.sortPointsCCW([edge[0], edge[1], newIndex], vertsWithSuper);\n triangles.push({\n indices: sortedIndices,\n edges: [[sortedIndices[0], sortedIndices[1]], [sortedIndices[1], sortedIndices[2]], [sortedIndices[2], sortedIndices[0]]]\n });\n });\n });\n var trianglesToRemove = [];\n triangles.forEach(function (triangle) {\n triangle.indices.forEach(function (index) {\n if (superIndices.includes(index)) {\n trianglesToRemove.push(triangle);\n }\n });\n });\n trianglesToRemove.forEach(function (triangle) {\n var index = triangles.indexOf(triangle);\n\n if (index !== -1) {\n triangles.splice(index, 1);\n }\n });\n return triangles.map(function (triangle) {\n return triangle.indices;\n });\n }\n /**\r\n * Determines if a given 2D point is within the cicrumcircle\r\n * defined by three 2D points. The triangle points must be in\r\n * counter-clockwise order a -> b -> c.\r\n *\r\n * @param {Array.} a - First triangle point.\r\n * @param {Array.} b - Second triangle point.\r\n * @param {Array.} c - Third triangle point.\r\n * @param {Array.} p - 2D point.\r\n *\r\n * @returns {boolean}\r\n */\n\n }, {\n key: "isPointInCircumCircle",\n value: function isPointInCircumCircle(a, b, c, p) {\n var ax = a[0] - p[0];\n var ay = a[1] - p[1];\n var bx = b[0] - p[0];\n var by = b[1] - p[1];\n var cx = c[0] - p[0];\n var cy = c[1] - p[1];\n return (ax * ax + ay * ay) * (bx * cy - cx * by) - (bx * bx + by * by) * (ax * cy - cx * ay) + (cx * cx + cy * cy) * (ax * by - bx * ay) > 0;\n }\n /**\r\n * Determines if a given 2D point is within a given triangle.\r\n *\r\n * @param {Array.} a - First triangle point.\r\n * @param {Array.} b - Second triangle point.\r\n * @param {Array.} c - Third triangle point.\r\n * @param {Array.} p - 2D point.\r\n *\r\n * @returns {boolean}\r\n */\n\n }, {\n key: "isPointInTriangle",\n value: function isPointInTriangle(a, b, c, p) {\n var denom = (b[1] - c[1]) * (a[0] - c[0]) + (c[0] - b[0]) * (a[1] - c[1]);\n var aVal = ((b[1] - c[1]) * (p[0] - c[0]) + (c[0] - b[0]) * (p[1] - c[1])) / denom;\n var bVal = ((c[1] - a[1]) * (p[0] - c[0]) + (a[0] - c[0]) * (p[1] - c[1])) / denom;\n var cVal = 1 - aVal - bVal;\n return aVal >= 0 && aVal <= 1 && bVal >= 0 && bVal <= 1 && cVal >= 0 && cVal <= 1;\n }\n /**\r\n * Gets the sorted indices of a given set of 2D points in\r\n * counter-clockwise order.\r\n *\r\n * @param {Array.} indices - List of indices.\r\n * @param {Array.>} vertices - List of 2D points.\r\n *\r\n * @returns {Array.>} - List of sorted indices.\r\n */\n\n }, {\n key: "sortPointsCCW",\n value: function sortPointsCCW(indices, vertices) {\n var centroid = [0, 0];\n indices.forEach(function (index) {\n centroid[0] += vertices[index][0];\n centroid[1] += vertices[index][1];\n });\n centroid[0] /= indices.length;\n centroid[1] /= indices.length;\n indices.sort(function (a, b) {\n var bVal = Math.atan2(vertices[b][1] - centroid[1], vertices[b][0] - centroid[0]);\n var aVal = Math.atan2(vertices[a][1] - centroid[1], vertices[a][0] - centroid[0]);\n return aVal - bVal;\n });\n return indices;\n }\n /**\r\n * Cacluates the area of a triangle\r\n * @param {Array.} a - First triangle point.\r\n * @param {Array.} b - Second triangle point.\r\n * @param {Array.} c - Third triangle point.\r\n *\r\n * @returns {number}\r\n */\n\n }, {\n key: "triangleArea",\n value: function triangleArea(a, b, c) {\n return Math.abs((a[0] * (b[1] - c[1]) + b[0] * (c[1] - a[1]) + c[0] * (a[1] - b[1])) * 0.5);\n }\n /**\r\n * Return the magnitude of a given vector array.\r\n *\r\n * @param {Array.} vector - Array consisting of numbers.\r\n *\r\n * @returns {number}\r\n */\n\n }, {\n key: "getVectorMagnitude",\n value: function getVectorMagnitude(vector) {\n if (!(vector instanceof Array)) {\n throw new Error("Cannot get magnitude for vector ".concat(vector, ". Input must be an Array numbers."));\n }\n\n var reducer = function reducer(accumulator, currentValue) {\n if (typeof currentValue !== \'number\') {\n throw new Error("Cannot get magnitude for vector ".concat(vector, ". All items in the input Array must be numbers."));\n }\n\n return accumulator + Math.pow(currentValue, 2);\n };\n\n return Math.sqrt(vector.reduce(reducer, 0));\n }\n /**\r\n * Return the dot product between two vectors.\r\n *\r\n * @param {Array.} vectorA - Array consisting of numbers.\r\n * @param {Array.} vectorB - Array consisting of numbers.\r\n *\r\n * @returns {number}\r\n */\n\n }, {\n key: "getDotProduct",\n value: function getDotProduct(vectorA, vectorB) {\n if (!(vectorA instanceof Array) || !(vectorB instanceof Array) || vectorA.length !== vectorB.length) {\n throw new Error("Cannot get dot product between ".concat(vectorA, " and ").concat(vectorB, ". Inputs must be vectors of the same length."));\n }\n\n var result = 0;\n vectorA.forEach(function (valueA, index) {\n var valueB = vectorB[index];\n\n if (typeof valueA !== \'number\' || typeof valueB !== \'number\') {\n throw new Error("Cannot get dot product between ".concat(vectorA, " and ").concat(vectorB, ". Vectors must only consist of numeric values."));\n }\n\n result += valueA * valueB;\n });\n return result;\n }\n /**\r\n * Return the angle in radians between vectorA and vectorB.\r\n *\r\n * @param {Array.} vectorA - Array consisting of numbers.\r\n * @param {Array.} vectorB - Array consisting of numbers.\r\n *\r\n * @returns {number}\r\n */\n\n }, {\n key: "getAngleBetween",\n value: function getAngleBetween(vectorA, vectorB) {\n var normalA = this.normalizeVector(MathUtils_toConsumableArray(vectorA));\n var normalB = this.normalizeVector(MathUtils_toConsumableArray(vectorB));\n var dot = this.getDotProduct(normalA, normalB);\n return Math.acos(this.clamp(dot, -1, 1));\n }\n /**\r\n * Multiply a 3x3 rotation matrix with a vector3.\r\n *\r\n * @param {Array.} vector3 - Array consisting of 3 numbers representing\r\n * a direction vector.\r\n * @param {Array.} matrix3 - An array of 9 numbers representing a row\r\n * major rotation matrix.\r\n *\r\n * @returns {Array.} - An array of 3 numbers representing the new direction\r\n * of the vector.\r\n */\n\n }, {\n key: "rotateVector",\n value: function rotateVector(vector3, matrix3) {\n if (!(vector3 instanceof Array) || vector3.length !== 3 || !vector3.every(function (v) {\n return typeof v === \'number\';\n })) {\n throw new Error("Cannot rotate vector ".concat(vector3, " by rotation matrix ").concat(matrix3, ". Input vector must be an array of 3 numbers."));\n }\n\n if (!(matrix3 instanceof Array) || matrix3.length !== 9 || !matrix3.every(function (v) {\n return typeof v === \'number\';\n })) {\n throw new Error("Cannot rotate vector ".concat(vector3, " by rotation matrix ").concat(matrix3, ". Input matrix3 must be an array of 9 numbers."));\n }\n\n var x = matrix3[0] * vector3[0] + matrix3[3] * vector3[1] + matrix3[6] * vector3[2];\n var y = matrix3[1] * vector3[0] + matrix3[4] * vector3[1] + matrix3[7] * vector3[2];\n var z = matrix3[2] * vector3[0] + matrix3[5] * vector3[1] + matrix3[8] * vector3[2];\n return [x, y, z];\n }\n /**\r\n * Normalize a given vector array.\r\n *\r\n * @param {Array.} vector - Array consisting of numbers.\r\n *\r\n * @returns {Array.} The original vector with normalized values, for chaining.\r\n */\n\n }, {\n key: "normalizeVector",\n value: function normalizeVector(vector) {\n var magnitude = this.getVectorMagnitude(vector);\n\n if (magnitude === 0) {\n vector.fill(0);\n } else {\n vector.forEach(function (value, index) {\n vector[index] = value / magnitude;\n });\n }\n\n return vector;\n }\n /**\r\n * Extract the 3x3 rotation matrix from a given 4x4 transformation matrix.\r\n *\r\n * @param {Array.} matrix4 - An array of 16 numbers representing a row\r\n * major transformation matrix.\r\n *\r\n * @returns {Array.} - An array of 9 numbers representing a row major\r\n * rotation matrix.\r\n */\n\n }, {\n key: "getRotationMatrix",\n value: function getRotationMatrix(matrix4) {\n if (!(matrix4 instanceof Array) || matrix4.length !== 16 || !matrix4.every(function (v) {\n return typeof v === \'number\';\n })) {\n throw new Error("Cannot convert matrix ".concat(matrix4, " to a rotation matrix. Input matrix must be an array of 16 numbers."));\n } // Extract scale\n\n\n var scaleX = 1 / (this.getVectorMagnitude(matrix4.slice(0, 4)) || 1);\n var scaleY = 1 / (this.getVectorMagnitude(matrix4.slice(4, 8)) || 1);\n var scaleZ = 1 / (this.getVectorMagnitude(matrix4.slice(8, 12)) || 1);\n return [matrix4[0] * scaleX, matrix4[1] * scaleX, matrix4[2] * scaleX, matrix4[4] * scaleY, matrix4[5] * scaleY, matrix4[6] * scaleY, matrix4[8] * scaleZ, matrix4[9] * scaleZ, matrix4[10] * scaleZ];\n }\n /**\r\n * Return an array containing the spherical coordinates of the given cartesian\r\n * xyz coordinates.\r\n *\r\n * @private\r\n *\r\n * @param {number} x - Position along the x axis.\r\n * @param {number} y - Position along the y axis.\r\n * @param {number} z - Position along the z axis.\r\n *\r\n * @returns {Array.} - An array consisting of three numberes where index\r\n * 0 represents the radius, index 1 represents the vertical/polar angle in radians\r\n * and index 2 represents the horizontal/azimuthal angle in radians.\r\n */\n\n }, {\n key: "cartesianToSpherical",\n value: function cartesianToSpherical(x, y, z) {\n var r = this.getVectorMagnitude([x, y, z]); // Return identity if the vector has no length\n\n if (r === 0) {\n return [0, 0, 0];\n }\n\n return [r, Math.acos(this.clamp(y / r, -1, 1)), Math.atan2(x, z)];\n }\n /**\r\n * Gradually change a value of a numeric property towards a goal over time using\r\n * a critically damped spring function.\r\n *\r\n * @param {number} currentValue - The starting value.\r\n * @param {number} targetValue- The goal value.\r\n * @param {Array.} [valueStore = [0, 0]] - An Array consisting of two\r\n * numbers where the first number holds the result value and the second holds\r\n * the velocity that resulted in that value. The same array should be provided\r\n * with each call to this function.\r\n * @param {number} [deltaTime = 1e-7] - The time since the last call to this function\r\n * in seconds.\r\n * @param {number} [smoothTime = 0.3] - The approximate amount of time in seconds\r\n * it should take to reach the target value.\r\n * @param {number} [maxSpeed = 1e7] - A clamping value for the maximum speed the\r\n * value can change.\r\n *\r\n * @returns {Array.} - The valueStore array.\r\n */\n\n }, {\n key: "dampValue",\n value: function dampValue(currentValue, targetValue) {\n var valueStore = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [0, 0];\n var deltaTime = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 1e-7;\n var smoothTime = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0.3;\n var maxSpeed = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 1e7;\n smoothTime = Math.max(0.0001, smoothTime);\n deltaTime = Math.max(1e-7, deltaTime); // Find the delta between values and use it to estimate the previous value\n\n var clampTime = maxSpeed * smoothTime;\n var deltaValue = currentValue - targetValue;\n var clampDeltaValue = this.clamp(deltaValue, -clampTime, clampTime);\n var lastValue = currentValue - clampDeltaValue; // Calculate damping factors\n\n var d1 = 2 / smoothTime;\n var d2 = d1 * deltaTime;\n var d3 = 1 / (1 + d2 + 0.5 * Math.pow(d2, 2) + 0.25 * Math.pow(d2, 3));\n var d4 = (valueStore[1] + d1 * clampDeltaValue) * deltaTime; // Damp the target value and update the velocity\n\n valueStore[0] = lastValue + (clampDeltaValue + d4) * d3;\n valueStore[1] = (valueStore[1] - d1 * d4) * d3; // Prevent overshooting\n\n if (targetValue - currentValue > 0 === valueStore[0] > targetValue) {\n valueStore[0] = targetValue;\n valueStore[1] = (valueStore[0] - targetValue) / deltaTime;\n }\n\n return valueStore;\n }\n }]);\n\n return MathUtils;\n}();\n\n/* harmony default export */ var core_MathUtils = (MathUtils);\n// CONCATENATED MODULE: ./src/core/HostEnvironment.js\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/* eslint-disable import/prefer-default-export */\n\n/**\r\n * Indicates the type of host build.\r\n *\r\n * @type {string}\r\n */\nvar env = \'core\';\n\n// CONCATENATED MODULE: ./src/core/Messenger.js\nfunction Messenger_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction Messenger_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction Messenger_createClass(Constructor, protoProps, staticProps) { if (protoProps) Messenger_defineProperties(Constructor.prototype, protoProps); if (staticProps) Messenger_defineProperties(Constructor, staticProps); return Constructor; }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/* eslint-disable no-underscore-dangle */\n\n/**\r\n * Class that can execute functions when local messages are received. Local messages\r\n * are prefixed with the instance\'s id.\r\n *\r\n * @alias core/Messenger\r\n *\r\n * @property {core/Messenger} GlobalMessenger - A messenger that can be used for\r\n * global messaging. When using static listen and emit methods they are executed\r\n * on this messenger.\r\n * @property {Object} EVENTS - Built-in events that the Messenger emits.\r\n */\n\nvar Messenger_Messenger = /*#__PURE__*/function () {\n /**\r\n * @constructor\r\n *\r\n * @param {any=} id - Id for the object. If none is provided a new id will\r\n * be created. Id should be able to be represented as a string.\r\n */\n function Messenger(id) {\n Messenger_classCallCheck(this, Messenger);\n\n this._id = id !== undefined ? id : core_Utils.createId();\n this._dispatcher = window;\n this._callbacks = {};\n this._eventListeners = {};\n }\n /**\r\n * Gets the string id of the object.\r\n *\r\n * @readonly\r\n * @type {string}\r\n */\n\n\n Messenger_createClass(Messenger, [{\n key: "id",\n get: function get() {\n return this._id;\n }\n /**\r\n * Prefix a message with the instance id.\r\n *\r\n * @private\r\n *\r\n * @param {string} message\r\n *\r\n * @returns {string}\r\n */\n\n }, {\n key: "_createLocalMessage",\n value: function _createLocalMessage(message) {\n return "".concat(this.id, ".").concat(message);\n }\n /**\r\n * Return a function that will call a callback function and supply the event\'s\r\n * detail property as an argument.\r\n *\r\n * @private\r\n *\r\n * @param {Function} callback\r\n *\r\n * @returns {Function}\r\n */\n\n }, {\n key: "_createListener",\n value: function _createListener(callback) {\n return function (e) {\n var value;\n\n if (e.detail !== null) {\n value = e.detail;\n }\n\n callback(value);\n };\n }\n /**\r\n * Create an event object and send it to listeners.\r\n *\r\n * @private\r\n *\r\n * @param {string} message - Event type name.\r\n * @param {any=} value - Value to send to listeners.\r\n *\r\n * @returns {CustomEvent}\r\n */\n\n }, {\n key: "_createEvent",\n value: function _createEvent(message, value) {\n return new CustomEvent(message, {\n detail: value\n });\n }\n /**\r\n * Register an event.\r\n *\r\n * @private\r\n *\r\n * @param {string} message - Event type name.\r\n * @param {Function} listener - A listener function generated using _createListener.\r\n */\n\n }, {\n key: "_addListener",\n value: function _addListener(message, listener) {\n this._dispatcher.addEventListener(this._createLocalMessage(message), listener);\n }\n /**\r\n * Unregister an event.\r\n *\r\n * @private\r\n *\r\n * @param {string} message - Event type name.\r\n * @param {Function} listener - A listener function generated using _createListener.\r\n */\n\n }, {\n key: "_removeListener",\n value: function _removeListener(message, listener) {\n this._dispatcher.removeEventListener(this._createLocalMessage(message), listener);\n }\n /**\r\n * Execute a function when a message is received for this object.\r\n *\r\n * @param {string} message - The message to listen for.\r\n * @param {Function} callback - Function to execute once the message is received.\r\n */\n\n }, {\n key: "listenTo",\n value: function listenTo(message, callback) {\n if (typeof callback !== \'function\') {\n throw new Error("Cannot add listener for ".concat(message, " on ").concat(this.id, ". Callback must be a function."));\n }\n\n if (this._callbacks[message] === undefined) {\n this._callbacks[message] = [];\n this._eventListeners[message] = [];\n }\n\n var listener = this._createListener(callback);\n\n this._callbacks[message].push(callback);\n\n this._eventListeners[message].push(listener);\n\n this._addListener(message, listener);\n }\n /**\r\n * Prevent a function from being executed when a message is received for this\r\n * object.\r\n *\r\n * @param {string} message - The message to stop listening for.\r\n * @param {Function=} callback - Optional callback to remove. If none is defined,\r\n * remove all callbacks for the message.\r\n */\n\n }, {\n key: "stopListening",\n value: function stopListening(message, callback) {\n if (this._callbacks[message] === undefined) {\n return;\n } else if (callback === undefined) {\n // If no callback was defined, call stopListening on all callbacks for the message\n for (var i = this._callbacks[message].length - 1; i > -1; i--) {\n this.stopListening(message, this._callbacks[message][i]);\n }\n\n return;\n } // If a callback was defined, make sure it\'s a listener\n\n\n var index = this._callbacks[message].indexOf(callback);\n\n if (index === -1) {\n return;\n }\n\n var listener = this._eventListeners[message][index];\n\n this._removeListener(message, listener);\n\n this._callbacks[message].splice(index, 1);\n\n this._eventListeners[message].splice(index, 1);\n\n if (this._callbacks[message].length === 0) {\n delete this._callbacks[message];\n delete this._eventListeners[message];\n }\n }\n /**\r\n * De-register callback(s) from being executed when messages matching the given\r\n * regular expression are received.\r\n *\r\n * @param {Regexp} regexp - regexp - The regular expression to filter messages with.\r\n * @param {Function=} callback - Optional callback to remove. If none is defined,\r\n * remove all callbacks for messages matching the regular expression.\r\n */\n\n }, {\n key: "stopListeningByRegexp",\n value: function stopListeningByRegexp(regexp, callback) {\n var _this = this;\n\n var messages = Object.keys(this._callbacks).filter(function (message) {\n return regexp.test(message);\n });\n messages.forEach(function (message) {\n _this.stopListening(message, callback);\n });\n }\n /**\r\n * Prevent any functions from being executed when any message is received for\r\n * this object.\r\n */\n\n }, {\n key: "stopListeningToAll",\n value: function stopListeningToAll() {\n var messages = Object.keys(this._callbacks);\n\n for (var i = messages.length - 1; i > -1; i--) {\n this.stopListening(messages[i]);\n }\n }\n /**\r\n * Send a message, causing listener functions for the message on this object\r\n * to be executed.\r\n *\r\n * @param {string} message - The message to emit.\r\n * @param {any=} value - Optional argument to pass to listener callbacks.\r\n */\n\n }, {\n key: "emit",\n value: function emit(message, value) {\n if (this._callbacks[message] === undefined) {\n return;\n }\n\n message = this._createLocalMessage(message);\n\n var event = this._createEvent(message, value);\n\n this._dispatcher.dispatchEvent(event);\n }\n /**\r\n * Execute a function when a message is received for the global Messenger instance.\r\n *\r\n * @static\r\n *\r\n * @param {string} message - The message to listen for.\r\n * @param {Function} callback - Function to execute once the message is received.\r\n */\n\n }], [{\n key: "listenTo",\n value: function listenTo(message, callback, messenger) {\n this.GlobalMessenger.listenTo(message, callback, messenger);\n }\n /**\r\n * Prevent a function from being executed when a message is received for the\r\n * global Messenger instance.\r\n *\r\n * @static\r\n *\r\n * @param {string} message - The message to stop listening for.\r\n * @param {Function=} callback - Optional callback to remove. If none is defined,\r\n * remove all callbacks for the message.\r\n */\n\n }, {\n key: "stopListening",\n value: function stopListening(message, callback) {\n this.GlobalMessenger.stopListening(message, callback);\n }\n /**\r\n * De-register callback(s) from being executed on the global messengerr instance\r\n * when messages matching the given regular expression are received.\r\n *\r\n * @param {Regexp} regexp - regexp - The regular expression to filter messages with.\r\n * @param {Function=} callback - Optional callback to remove. If none is defined,\r\n * remove all callbacks for messages matching the regular expression.\r\n */\n\n }, {\n key: "stopListeningByRegexp",\n value: function stopListeningByRegexp(regexp, callback) {\n var _this2 = this;\n\n var messages = Object.keys(this.GlobalMessenger._callbacks).filter(function (message) {\n return regexp.test(message);\n });\n messages.forEach(function (message) {\n _this2.stopListening(message, callback);\n });\n }\n /**\r\n * Prevent any functions from being executed when any message is received for\r\n * the global Messenger instance.\r\n *\r\n * @static\r\n */\n\n }, {\n key: "stopListeningToAll",\n value: function stopListeningToAll() {\n this.GlobalMessenger.stopListeningToAll();\n }\n /**\r\n * Send a message, causing listener functions for the message on the global Messenger\r\n * instance to be executed.\r\n *\r\n * @static\r\n *\r\n * @param {string} message - The message to emit.\r\n * @param {any=} value - Optional argument to pass to listener callbacks.\r\n */\n\n }, {\n key: "emit",\n value: function emit(message, value) {\n this.GlobalMessenger.emit(message, value);\n }\n }]);\n\n return Messenger;\n}();\n\nObject.defineProperties(Messenger_Messenger, {\n GlobalMessenger: {\n value: new Messenger_Messenger(),\n writable: false\n },\n EVENTS: {\n value: {},\n writable: false\n }\n});\n/* harmony default export */ var core_Messenger = (Messenger_Messenger);\n// CONCATENATED MODULE: ./src/core/AbstractHostFeature.js\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || AbstractHostFeature_unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\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."); }\n\nfunction AbstractHostFeature_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return AbstractHostFeature_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return AbstractHostFeature_arrayLikeToArray(o, minLen); }\n\nfunction AbstractHostFeature_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction AbstractHostFeature_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction AbstractHostFeature_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction AbstractHostFeature_createClass(Constructor, protoProps, staticProps) { if (protoProps) AbstractHostFeature_defineProperties(Constructor.prototype, protoProps); if (staticProps) AbstractHostFeature_defineProperties(Constructor, staticProps); return Constructor; }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/**\r\n * Base class for all host features. Keeps a reference to the host object managing\r\n * the feature.\r\n *\r\n * @abstract\r\n *\r\n * @property {Object} EVENTS - Built-in messages that the feature emits. When the\r\n * feature is added to a {@link core/HostObject}, event names will be prefixed by the\r\n * name of the feature class + \'.\'.\r\n * @property {string} [EVENTS.update=onUpdate] - Message that is emitted after\r\n * each call to [update]{@link AbstractHostFeature#update}.\r\n * @property {Object} SERVICES - Any AWS services that are necessary for the\r\n * feature to function.\r\n */\n\nvar AbstractHostFeature_AbstractHostFeature = /*#__PURE__*/function () {\n /**\r\n * @constructor\r\n *\r\n * @param {core/HostObject} host - The HostObject managing the feature.\r\n */\n function AbstractHostFeature(host) {\n AbstractHostFeature_classCallCheck(this, AbstractHostFeature);\n\n this._host = host;\n }\n /**\r\n * Adds a namespace to the host with the name of the feature to contain properties\r\n * and methods from the feature that users of the host need access to.\r\n */\n\n\n AbstractHostFeature_createClass(AbstractHostFeature, [{\n key: "installApi",\n value: function installApi() {\n var _this = this;\n\n var events = {};\n var api = {\n EVENTS: events\n }; // Add the class name to event names\n\n Object.entries(this.constructor.EVENTS).forEach(function (_ref) {\n var _ref2 = _slicedToArray(_ref, 2),\n name = _ref2[0],\n value = _ref2[1];\n\n events[name] = "".concat(_this.constructor.name, ".").concat(value);\n });\n this._host[this.constructor.name] = api;\n return api;\n }\n /**\r\n * Gets the host that manages the feature.\r\n *\r\n * @readonly\r\n */\n\n }, {\n key: "host",\n get: function get() {\n return this._host;\n }\n /**\r\n * Gets the engine owner object of the host.\r\n *\r\n * @readonly\r\n */\n\n }, {\n key: "owner",\n get: function get() {\n return this._host.owner;\n }\n /**\r\n * Listen to a feature message from the host object.\r\n *\r\n * @param {string} message - Message to listen for.\r\n * @param {Function} callback - The callback to execute when the message is received.\r\n */\n\n }, {\n key: "listenTo",\n value: function listenTo(message, callback) {\n this._host.listenTo(message, callback);\n }\n /**\r\n * Listen to a feature message from the global messenger. Feature messages will\r\n * be prefixed with the class name of the feature.\r\n *\r\n * @param {string} message - Message to listen for.\r\n * @param {Function} callback - The callback to execute when the message is received.\r\n */\n\n }, {\n key: "stopListening",\n value:\n /**\r\n * Stop listening to a message from the host object.\r\n *\r\n * @param {string} message - Message to stop listening for.\r\n * @param {Function=} callback - Optional callback to remove. If none is defined,\r\n * remove all callbacks for the message.\r\n */\n function stopListening(message, callback) {\n this._host.stopListening(message, callback);\n }\n /**\r\n * Stop listening to a message from the global messenger.\r\n *\r\n * @param {string} message - Message to stop listening for.\r\n * @param {Function=} callback - Optional callback to remove. If none is defined,\r\n * remove all callbacks for the message.\r\n */\n\n }, {\n key: "stopListeningByRegexp",\n value:\n /**\r\n * Stop listening to a message matching the given regular expression from the\r\n * host object.\r\n *\r\n * @param {Regexp} regexp - The regular expression to stop listening for.\r\n * @param {Function=} callback - Optional callback to remove. If none is defined,\r\n * remove all callbacks for the message.\r\n */\n function stopListeningByRegexp(regexp, callback) {\n this._host.stopListeningByRegexp(regexp, callback);\n }\n /**\r\n * Stop listening to a message matching the given regular expression from the\r\n * global messenger.\r\n *\r\n * @param {Regexp} regexp - The regular expression to stop listening for.\r\n * @param {Function=} callback - Optional callback to remove. If none is defined,\r\n * remove all callbacks for the message.\r\n */\n\n }, {\n key: "stopListeningToAll",\n value:\n /**\r\n * Stop listening to all messages.\r\n */\n function stopListeningToAll() {\n this._host.stopListeningToAll();\n }\n /**\r\n * Stop listening to all feature messages.\r\n */\n\n }, {\n key: "emit",\n value:\n /**\r\n * Emit feature messages from the host. Feature messages will be prefixed with\r\n * the class name of the feature.\r\n *\r\n * @param {string} message - The message to emit.\r\n * @param {any=} value - Optional parameter to pass to listener callbacks.\r\n */\n function emit(message, value) {\n message = "".concat(this.constructor.name, ".").concat(message);\n\n this._host.emit(message, value);\n }\n /**\r\n * Emit feature messages from the global messenger. Feature messages will be prefixed\r\n * with the class name of the feature.\r\n *\r\n * @param {string} message - The message to emit.\r\n * @param {any=} value - Optional parameter to pass to listener callbacks.\r\n */\n\n }, {\n key: "update",\n value:\n /**\r\n * Executes each time the host is updated.\r\n *\r\n * @param {number} deltaTime - Amount of time since the last host update was\r\n * called.\r\n */\n function update(deltaTime) {\n this.emit(this.constructor.EVENTS.update, deltaTime);\n }\n /**\r\n * Clean up once the feature is no longer in use. Remove the feature namespace\r\n * from the host and remove reference to the host.\r\n */\n\n }, {\n key: "discard",\n value: function discard() {\n var _this2 = this;\n\n Object.keys(this._host[this.constructor.name]).forEach(function (name) {\n delete _this2._host[_this2.constructor.name][name];\n });\n delete this._host[this.constructor.name];\n delete this._host;\n }\n /**\r\n * Applies a sequence of mixin class factory functions to this class and\r\n * returns the result. Each function is expected to return a class that\r\n * extends the class it was given. The functions are applied in the order\r\n * that parameters are given, meaning that the first factory will\r\n * extend this base class.\r\n *\r\n * @param {...Function} mixinClassFactories Class factory functions that will\r\n * be applied.\r\n *\r\n * @returns {Class} A class that is the result of applying the factory functions.\r\n * The resulting class will always inherit from AbstractHostFeature.\r\n */\n\n }], [{\n key: "listenTo",\n value: function listenTo(message, callback) {\n message = "".concat(this.name, ".").concat(message);\n core_Messenger.listenTo(message, callback);\n }\n }, {\n key: "stopListening",\n value: function stopListening(message, callback) {\n message = "".concat(this.name, ".").concat(message);\n core_Messenger.stopListening(message, callback);\n }\n }, {\n key: "stopListeningByRegexp",\n value: function stopListeningByRegexp(regexp, callback) {\n regexp = new RegExp("^".concat(this.name, ".").concat(regexp.source.replace(/\\^/, \'\')));\n core_Messenger.stopListeningByRegexp(regexp, callback);\n }\n }, {\n key: "stopListeningToAll",\n value: function stopListeningToAll() {\n core_Messenger.stopListeningByRegexp(new RegExp("^".concat(this.name, ".")));\n }\n }, {\n key: "emit",\n value: function emit(message, value) {\n message = "".concat(this.name, ".").concat(message);\n core_Messenger.emit(message, value);\n }\n }, {\n key: "mix",\n value: function mix() {\n var ResultClass = this;\n\n for (var _len = arguments.length, mixinClassFactories = new Array(_len), _key = 0; _key < _len; _key++) {\n mixinClassFactories[_key] = arguments[_key];\n }\n\n mixinClassFactories.forEach(function (mixinClassFactory) {\n ResultClass = mixinClassFactory(ResultClass);\n });\n return ResultClass;\n }\n }]);\n\n return AbstractHostFeature;\n}();\n\nObject.defineProperties(AbstractHostFeature_AbstractHostFeature, {\n EVENTS: {\n value: {\n update: \'onUpdate\'\n },\n writable: false\n },\n SERVICES: {\n value: {},\n writable: false\n }\n});\n/* harmony default export */ var core_AbstractHostFeature = (AbstractHostFeature_AbstractHostFeature);\n// CONCATENATED MODULE: ./src/core/HostObject.js\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction HostObject_construct(Parent, args, Class) { if (HostObject_isNativeReflectConstruct()) { HostObject_construct = Reflect.construct; } else { HostObject_construct = function _construct(Parent, args, Class) { var a = [null]; a.push.apply(a, args); var Constructor = Function.bind.apply(Parent, a); var instance = new Constructor(); if (Class) HostObject_setPrototypeOf(instance, Class.prototype); return instance; }; } return HostObject_construct.apply(null, arguments); }\n\nfunction HostObject_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { HostObject_typeof = function _typeof(obj) { return typeof obj; }; } else { HostObject_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return HostObject_typeof(obj); }\n\nfunction HostObject_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction HostObject_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction HostObject_createClass(Constructor, protoProps, staticProps) { if (protoProps) HostObject_defineProperties(Constructor.prototype, protoProps); if (staticProps) HostObject_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction HostObject_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) HostObject_setPrototypeOf(subClass, superClass); }\n\nfunction HostObject_setPrototypeOf(o, p) { HostObject_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return HostObject_setPrototypeOf(o, p); }\n\nfunction HostObject_createSuper(Derived) { var hasNativeReflectConstruct = HostObject_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = HostObject_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = HostObject_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return HostObject_possibleConstructorReturn(this, result); }; }\n\nfunction HostObject_possibleConstructorReturn(self, call) { if (call && (HostObject_typeof(call) === "object" || typeof call === "function")) { return call; } return HostObject_assertThisInitialized(self); }\n\nfunction HostObject_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction HostObject_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction HostObject_getPrototypeOf(o) { HostObject_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return HostObject_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n/**\r\n * Object that manages access to all Host features. Contains a reference to\r\n * engine-specific visuals if applicable.\r\n *\r\n * @extends core/Messenger\r\n * @alias core/HostObject\r\n *\r\n * @property {Object} EVENTS - Built-in messages that the Messenger emits.\r\n * @property {string} [EVENTS.update=\'onUpdate\'] - Message that is emitted after\r\n * each call to [update]{@link core/HostObject#update}.\r\n * @property {string} [EVENTS.addFeature=\'onAddFeature\'] - Message that is emitted\r\n * after each call to [addFeature]{@link core/HostObject#addFeature}.\r\n * @property {string} [EVENTS.removeFeature=\'onRemoveFeature\'] - Message that is emitted\r\n * after each call to [removeFeature]{@link core/HostObject#removeFeature}.\r\n */\n\nvar HostObject_HostObject = /*#__PURE__*/function (_Messenger) {\n HostObject_inherits(HostObject, _Messenger);\n\n var _super = HostObject_createSuper(HostObject);\n\n /**\r\n * @constructor\r\n *\r\n * @param {Object=} options - Options for the host.\r\n * @param {Object=} options.owner - Optional engine-specific owner of the host.\r\n */\n function HostObject() {\n var _this;\n\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n _ref$owner = _ref.owner,\n owner = _ref$owner === void 0 ? {} : _ref$owner;\n\n HostObject_classCallCheck(this, HostObject);\n\n // If an owner is specified, use its id for messaging\n _this = _super.call(this, owner.id);\n _this._owner = owner;\n _this._features = {};\n _this._waits = [];\n _this._lastUpdate = _this.now;\n return _this;\n }\n /**\r\n * Gets the engine owner object of the host.\r\n *\r\n * @readonly\r\n * @type {Object}\r\n */\n\n\n HostObject_createClass(HostObject, [{\n key: "owner",\n get: function get() {\n return this._owner;\n }\n /**\r\n * Gets the current time in milliseconds.\r\n *\r\n * @readonly\r\n * @type {number}\r\n */\n\n }, {\n key: "now",\n get: function get() {\n return Date.now();\n }\n /**\r\n * Gets the amount of time in milliseconds since update was last called.\r\n *\r\n * @readonly\r\n * @type {number}\r\n */\n\n }, {\n key: "deltaTime",\n get: function get() {\n return this.now - this._lastUpdate;\n }\n /**\r\n * This function should be called in the engine\'s render loop. Executes update\r\n * loops for all features.\r\n */\n\n }, {\n key: "update",\n value: function update() {\n var currentTime = this.now;\n var dt = this.deltaTime; // Progress stored waits\n\n this._waits.forEach(function (wait) {\n wait.execute(dt);\n }); // Update all features\n\n\n Object.values(this._features).forEach(function (feature) {\n feature.update(dt);\n }); // Notify listeners an update occured\n\n this.emit(this.constructor.EVENTS.update, dt);\n this._lastUpdate = currentTime;\n }\n /**\r\n * Return a deferred promise that will wait a given number of seconds before\r\n * resolving. The host will continuously update the wait promise during the\r\n * update loop until it resolves.\r\n *\r\n * @param {number} [seconds=0] - Number of seconds to wait before resolving.\r\n * @param {Object=} options - Optional options object\r\n * @param {Function} [options.onFinish] - Callback to execute once the wait time\r\n * is met.\r\n * @param {Function=} options.onProgress - Callback to execute each time the wait\r\n * time progresses towards the target number of seconds. The amount of progress\r\n * as a 0-1 percentage is passed as an argument.\r\n * @param {Function=} options.onCancel - Callback to execute if the user cancels\r\n * the wait before completion.\r\n * @param {Function=} options.onError - Callback to execute if the wait stops\r\n * because an error is encountered. The error message is passed as a parameter.\r\n *\r\n * @returns {Deferred}\r\n */\n\n }, {\n key: "wait",\n value: function wait(seconds) {\n var _this2 = this;\n\n var _ref2 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n onFinish = _ref2.onFinish,\n onProgress = _ref2.onProgress,\n onCancel = _ref2.onCancel,\n onError = _ref2.onError;\n\n var wait = core_Utils.wait(seconds, {\n onFinish: onFinish,\n onProgress: onProgress,\n onCancel: onCancel,\n onError: onError\n });\n\n this._waits.push(wait); // Once the wait promise is no longer pending remove it from the waits array\n\n\n var onComplete = function onComplete() {\n _this2._waits.splice(_this2._waits.indexOf(wait), 1);\n };\n\n wait.then(onComplete, onComplete);\n return wait;\n }\n /**\r\n * Instantiate a new Host feature and store it. Features must inherit from\r\n * AbstractHostFeature.\r\n *\r\n * @param {Class} FeatureClass - Class that will instantiate the feature. Must\r\n * extend {@link AbstractHostFeature}.\r\n * @param {boolean} [force=false] - Whether or not to overwrite an existing\r\n * feature if one of this type already exists on the object.\r\n * @param {...any} args - Additional arguments to pass to the FeatureClass\r\n * constructor. The HostObject will always be passed as the first argument.\r\n *\r\n * @returns {boolean} - Whether or not a feature was successfully added.\r\n */\n\n }, {\n key: "addFeature",\n value: function addFeature(FeatureClass) {\n var force = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n var inputType = HostObject_typeof(FeatureClass); // Make sure the FeatureClass can be executed\n\n\n if (inputType !== \'function\') {\n throw new Error("Cannot add feature to host ".concat(this.id, ". FeatureClass must be a class."));\n } // Make sure the feature is a host feature\n else if (!(FeatureClass.prototype instanceof core_AbstractHostFeature)) {\n throw new Error("Cannot add feature ".concat(FeatureClass.name, " to host ").concat(this.id, ". FeatureClass must extend AbstractHostFeature."));\n } // Check if the FeatureClass already exists on this object\n\n\n if (this._features[FeatureClass.name] !== undefined) {\n if (force) {\n console.warn("Feature ".concat(FeatureClass.name, " already exists on host ").concat(this.id, ". Existing feature will be overwritten."));\n } else {\n throw new Error("Feature ".concat(FeatureClass.name, " already exists on host ").concat(this.id, ". Use \'force\' argument to overwrite the feature."));\n }\n } // Initialize the feature\n\n\n for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n args[_key - 2] = arguments[_key];\n }\n\n var feature = HostObject_construct(FeatureClass, [this].concat(args));\n\n feature.installApi();\n this._features[FeatureClass.name] = feature;\n this.emit(this.constructor.EVENTS.addFeature, FeatureClass.name);\n return true;\n }\n /**\r\n * Remove a feature from the object.\r\n *\r\n * @param {string} typeName - Name of the type of feature to remove.\r\n *\r\n * @returns {boolean} - Whether or not a feature was successfully removed.\r\n */\n\n }, {\n key: "removeFeature",\n value: function removeFeature(typeName) {\n if (this._features[typeName] === undefined) {\n console.warn("Feature of type ".concat(typeName, " does not exist on host ").concat(this.id, ". No feature will be removed."));\n return false;\n } else {\n // Remove the feature\n this.emit(this.constructor.EVENTS.removeFeature, typeName);\n\n this._features[typeName].discard();\n\n delete this._features[typeName];\n return true;\n }\n }\n /**\r\n * Indicate whether a specified feature is installed on the host.\r\n *\r\n * @param {string} typeName - Name of the type of feature to look for.\r\n *\r\n * @returns {boolean}\r\n */\n\n }, {\n key: "hasFeature",\n value: function hasFeature(typeName) {\n return !!this._features[typeName];\n }\n /**\r\n * List the names of the features installed on the host.\r\n *\r\n * @returns {Array.}\r\n */\n\n }, {\n key: "listFeatures",\n value: function listFeatures() {\n return Object.keys(this._features);\n }\n }]);\n\n return HostObject;\n}(core_Messenger);\n\nObject.defineProperty(HostObject_HostObject, \'EVENTS\', {\n value: _objectSpread(_objectSpread({}, Object.getPrototypeOf(HostObject_HostObject).EVENTS), {}, {\n update: \'onUpdate\',\n addFeature: \'onAddFeature\',\n removeFeature: \'onRemoveFeature\'\n }),\n writable: false\n});\n/* harmony default export */ var core_HostObject = (HostObject_HostObject);\n// CONCATENATED MODULE: ./src/core/animpack/Easing.js\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/**\r\n * @typedef {Object} EasingObject Object containing easing functions\r\n * @property {Function} In - Easing \'In\' function. Should use the signature (k:number):number.\r\n * @property {Function} Out - Easing \'Out\' function. Should use the signature (k:number):number.\r\n * @property {Function} InOut - Easing \'InOut\' function. Should use the signature (k:number):number.\r\n */\n\n/**\r\n * Linear Easing\r\n * @type {EasingObject}\r\n */\nvar Linear = {\n None: function None(k) {\n return k;\n },\n In: function In(k) {\n return k;\n },\n Out: function Out(k) {\n return k;\n },\n InOut: function InOut(k) {\n return k;\n }\n};\n/**\r\n * Quadratic Easing\r\n * @type {EasingObject}\r\n */\n\nvar Quadratic = {\n In: function In(k) {\n return k * k;\n },\n Out: function Out(k) {\n return k * (2 - k);\n },\n InOut: function InOut(k) {\n k *= 2;\n\n if (k < 1) {\n return 0.5 * k * k;\n }\n\n return -0.5 * (--k * (k - 2) - 1);\n }\n};\n/**\r\n * Cubic Easing\r\n * @type {EasingObject}\r\n */\n\nvar Cubic = {\n In: function In(k) {\n return k * k * k;\n },\n Out: function Out(k) {\n return --k * k * k + 1;\n },\n InOut: function InOut(k) {\n k *= 2;\n\n if (k < 1) {\n return 0.5 * k * k * k;\n }\n\n k -= 2;\n return 0.5 * (k * k * k + 2);\n }\n};\n/**\r\n * Quartic Easing\r\n * @type {EasingObject}\r\n */\n\nvar Quartic = {\n In: function In(k) {\n return k * k * k * k;\n },\n Out: function Out(k) {\n return 1 - --k * k * k * k;\n },\n InOut: function InOut(k) {\n k *= 2;\n\n if (k < 1) {\n return 0.5 * k * k * k * k;\n }\n\n k -= 2;\n return -0.5 * (k * k * k * k - 2);\n }\n};\n/**\r\n * Quintic Easing\r\n * @type {EasingObject}\r\n */\n\nvar Quintic = {\n In: function In(k) {\n return k * k * k * k * k;\n },\n Out: function Out(k) {\n return --k * k * k * k * k + 1;\n },\n InOut: function InOut(k) {\n k *= 2;\n\n if (k < 1) {\n return 0.5 * k * k * k * k * k;\n }\n\n k -= 2;\n return 0.5 * (k * k * k * k * k + 2);\n }\n};\n/**\r\n * Sinusoidal Easing\r\n * @type {EasingObject}\r\n */\n\nvar Sinusoidal = {\n In: function In(k) {\n return 1 - Math.cos(k * Math.PI / 2);\n },\n Out: function Out(k) {\n return Math.sin(k * Math.PI / 2);\n },\n InOut: function InOut(k) {\n return 0.5 * (1 - Math.cos(Math.PI * k));\n }\n};\n/**\r\n * Exponential Easing\r\n * @type {EasingObject}\r\n */\n\nvar Exponential = {\n In: function In(k) {\n return k === 0 ? 0 : Math.pow(1024, k - 1);\n },\n Out: function Out(k) {\n return k === 1 ? 1 : 1 - Math.pow(2, -10 * k);\n },\n InOut: function InOut(k) {\n if (k === 0) {\n return 0;\n }\n\n if (k === 1) {\n return 1;\n }\n\n k *= 2;\n\n if (k < 1) {\n return 0.5 * Math.pow(1024, k - 1);\n }\n\n return 0.5 * (-Math.pow(2, -10 * (k - 1)) + 2);\n }\n};\n/**\r\n * Circular Easing\r\n * @type {EasingObject}\r\n */\n\nvar Circular = {\n In: function In(k) {\n return 1 - Math.sqrt(1 - k * k);\n },\n Out: function Out(k) {\n return Math.sqrt(1 - --k * k);\n },\n InOut: function InOut(k) {\n k *= 2;\n\n if (k < 1) {\n return -0.5 * (Math.sqrt(1 - k * k) - 1);\n }\n\n k -= 2;\n return 0.5 * (Math.sqrt(1 - k * k) + 1);\n }\n};\n/**\r\n * Elastic Easing\r\n * @type {EasingObject}\r\n */\n\nvar Elastic = {\n In: function In(k) {\n var s;\n var a = 0.1;\n var p = 0.4;\n\n if (k === 0) {\n return 0;\n }\n\n if (k === 1) {\n return 1;\n }\n\n if (!a || a < 1) {\n a = 1;\n s = p / 4;\n } else {\n s = p * Math.asin(1 / a) / (2 * Math.PI);\n }\n\n k -= 1;\n return -(a * Math.pow(2, 10 * k) * Math.sin((k - s) * (2 * Math.PI) / p));\n },\n Out: function Out(k) {\n var s;\n var a = 0.1;\n var p = 0.4;\n\n if (k === 0) {\n return 0;\n }\n\n if (k === 1) {\n return 1;\n }\n\n if (!a || a < 1) {\n a = 1;\n s = p / 4;\n } else {\n s = p * Math.asin(1 / a) / (2 * Math.PI);\n }\n\n return a * Math.pow(2, -10 * k) * Math.sin((k - s) * (2 * Math.PI) / p) + 1;\n },\n InOut: function InOut(k) {\n var s;\n var a = 0.1;\n var p = 0.4;\n\n if (k === 0) {\n return 0;\n }\n\n if (k === 1) {\n return 1;\n }\n\n if (!a || a < 1) {\n a = 1;\n s = p / 4;\n } else {\n s = p * Math.asin(1 / a) / (2 * Math.PI);\n }\n\n k *= 2;\n\n if (k < 1) {\n k -= 1;\n return -0.5 * (a * Math.pow(2, 10 * k) * Math.sin((k - s) * (2 * Math.PI) / p));\n }\n\n k -= 1;\n return a * Math.pow(2, -10 * k) * Math.sin((k - s) * (2 * Math.PI) / p) * 0.5 + 1;\n }\n};\n/**\r\n * Back Easing\r\n * @type {EasingObject}\r\n */\n\nvar Back = {\n In: function In(k) {\n var s = 1.70158;\n return k * k * ((s + 1) * k - s);\n },\n Out: function Out(k) {\n var s = 1.70158;\n return --k * k * ((s + 1) * k + s) + 1;\n },\n InOut: function InOut(k) {\n var s = 1.70158 * 1.525;\n k *= 2;\n\n if (k < 1) {\n return 0.5 * (k * k * ((s + 1) * k - s));\n }\n\n k -= 2;\n return 0.5 * (k * k * ((s + 1) * k + s) + 2);\n }\n};\n/**\r\n * Bounce Easing\r\n * @type {EasingObject}\r\n */\n\nvar Bounce = {\n In: function In(k) {\n return 1 - Bounce.Out(1 - k);\n },\n Out: function Out(k) {\n if (k < 1 / 2.75) {\n return 7.5625 * k * k;\n } else if (k < 2 / 2.75) {\n k -= 1.5;\n return 7.5625 * (k / 2.75) * k + 0.75;\n } else if (k < 2.5 / 2.75) {\n k -= 2.25;\n return 7.5625 * (k / 2.75) * k + 0.9375;\n }\n\n k -= 2.625;\n return 7.5625 * (k / 2.75) * k + 0.984375;\n },\n InOut: function InOut(k) {\n if (k < 0.5) {\n return Bounce.In(k * 2) * 0.5;\n }\n\n return Bounce.Out(k * 2 - 1) * 0.5 + 0.5;\n }\n};\n// CONCATENATED MODULE: ./src/core/FeatureDependentInterface.js\nfunction FeatureDependentInterface_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { FeatureDependentInterface_typeof = function _typeof(obj) { return typeof obj; }; } else { FeatureDependentInterface_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return FeatureDependentInterface_typeof(obj); }\n\nfunction FeatureDependentInterface_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction FeatureDependentInterface_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { FeatureDependentInterface_ownKeys(Object(source), true).forEach(function (key) { FeatureDependentInterface_defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { FeatureDependentInterface_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction FeatureDependentInterface_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction FeatureDependentInterface_slicedToArray(arr, i) { return FeatureDependentInterface_arrayWithHoles(arr) || FeatureDependentInterface_iterableToArrayLimit(arr, i) || FeatureDependentInterface_unsupportedIterableToArray(arr, i) || FeatureDependentInterface_nonIterableRest(); }\n\nfunction FeatureDependentInterface_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."); }\n\nfunction FeatureDependentInterface_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return FeatureDependentInterface_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return FeatureDependentInterface_arrayLikeToArray(o, minLen); }\n\nfunction FeatureDependentInterface_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction FeatureDependentInterface_iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction FeatureDependentInterface_arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction _get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return _get(target, property, receiver || target); }\n\nfunction _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = FeatureDependentInterface_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction FeatureDependentInterface_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) FeatureDependentInterface_setPrototypeOf(subClass, superClass); }\n\nfunction FeatureDependentInterface_setPrototypeOf(o, p) { FeatureDependentInterface_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return FeatureDependentInterface_setPrototypeOf(o, p); }\n\nfunction FeatureDependentInterface_createSuper(Derived) { var hasNativeReflectConstruct = FeatureDependentInterface_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = FeatureDependentInterface_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = FeatureDependentInterface_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return FeatureDependentInterface_possibleConstructorReturn(this, result); }; }\n\nfunction FeatureDependentInterface_possibleConstructorReturn(self, call) { if (call && (FeatureDependentInterface_typeof(call) === "object" || typeof call === "function")) { return call; } return FeatureDependentInterface_assertThisInitialized(self); }\n\nfunction FeatureDependentInterface_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction FeatureDependentInterface_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction FeatureDependentInterface_getPrototypeOf(o) { FeatureDependentInterface_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return FeatureDependentInterface_getPrototypeOf(o); }\n\nfunction FeatureDependentInterface_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction FeatureDependentInterface_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction FeatureDependentInterface_createClass(Constructor, protoProps, staticProps) { if (protoProps) FeatureDependentInterface_defineProperties(Constructor.prototype, protoProps); if (staticProps) FeatureDependentInterface_defineProperties(Constructor, staticProps); return Constructor; }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/* eslint-disable no-unused-vars */\n\n/* eslint-disable max-classes-per-file */\n\n/**\r\n * Class factory interface for features that are dependent on other features being\r\n * present on the host. Event dependencies will be listened for when a feature of\r\n * matching type is added to the host and will stop being listened for when one\r\n * is removed. If the feature is already present when constructed, events will\r\n * be listened for right away.\r\n *\r\n * @interface\r\n *\r\n * @property {Object} EVENT_DEPENDENCIES - Events that the feature should start/stop\r\n * listening for when a feature of type FeatureName is added/removed from the host.\r\n * Event dependencies should follow the signature:\r\n * { FeatureName: { eventName: callbackName, ... }, ... }\r\n */\n\nvar FeatureDependentInterface_FeatureDependentInterface = /*#__PURE__*/function () {\n function FeatureDependentInterface() {\n FeatureDependentInterface_classCallCheck(this, FeatureDependentInterface);\n }\n\n FeatureDependentInterface_createClass(FeatureDependentInterface, [{\n key: "_onFeatureAdded",\n value:\n /**\r\n * Start listening for event dependencies that match the given feature type.\r\n *\r\n * @private\r\n *\r\n * @param {string} typeName - type of feature to listen for.\r\n */\n function _onFeatureAdded(typeName) {}\n /**\r\n * Stop listening for event dependencies that match the given feature type.\r\n *\r\n * @private\r\n *\r\n * @param {string} typeName - type of feature to stop listening for.\r\n */\n\n }, {\n key: "_onFeatureRemoved",\n value: function _onFeatureRemoved(typeName) {}\n /**\r\n * @augments {@link AbstractHostFeature#discard}\r\n */\n\n }, {\n key: "discard",\n value: function discard() {}\n /**\r\n * Creates a class that implements {@link FeatureDependentInterface} and extends\r\n * a specified base class.\r\n *\r\n * @param {Class} BaseClass - The class to extend.\r\n *\r\n * @return {Class} A class that extends `BaseClass` and implements {@link FeatureDependentInterface}.\r\n */\n\n }], [{\n key: "Mixin",\n value: function Mixin(BaseClass) {\n var FeatureDependentMixin = /*#__PURE__*/function (_BaseClass) {\n FeatureDependentInterface_inherits(FeatureDependentMixin, _BaseClass);\n\n var _super = FeatureDependentInterface_createSuper(FeatureDependentMixin);\n\n function FeatureDependentMixin(host) {\n var _this;\n\n FeatureDependentInterface_classCallCheck(this, FeatureDependentMixin);\n\n _this = _super.call(this, host);\n _this._host = host; // No need to listen for events if the mixin is in the prototype chain multiple times\n\n if (!_this._initialized) {\n _this._initialized = true; // Start listening for feature events\n\n _this._onFeatureAdded = _this._onFeatureAdded.bind(FeatureDependentInterface_assertThisInitialized(_this));\n _this._onFeatureRemoved = _this._onFeatureRemoved.bind(FeatureDependentInterface_assertThisInitialized(_this));\n\n _this._host.listenTo(core_HostObject.EVENTS.addFeature, _this._onFeatureAdded);\n\n _this._host.listenTo(core_HostObject.EVENTS.removeFeature, _this._onFeatureRemoved); // Register features that already exist\n\n\n Object.keys(_this.constructor.EVENT_DEPENDENCIES).forEach(function (typeName) {\n if (_this._host[typeName] !== undefined) {\n _this._onFeatureAdded(typeName);\n }\n });\n }\n\n return _this;\n }\n\n FeatureDependentInterface_createClass(FeatureDependentMixin, [{\n key: "_onFeatureAdded",\n value: function _onFeatureAdded(typeName) {\n var _this2 = this;\n\n if (this.constructor.EVENT_DEPENDENCIES[typeName] !== undefined) {\n var events = this.constructor.EVENT_DEPENDENCIES[typeName];\n Object.entries(events).forEach(function (_ref) {\n var _ref2 = FeatureDependentInterface_slicedToArray(_ref, 2),\n eventName = _ref2[0],\n callback = _ref2[1];\n\n _this2[callback] = _this2[callback].bind(_this2);\n\n _this2._host.listenTo(_this2._host[typeName].EVENTS[eventName], _this2[callback]);\n });\n }\n }\n }, {\n key: "_onFeatureRemoved",\n value: function _onFeatureRemoved(typeName) {\n var _this3 = this;\n\n if (this.constructor.EVENT_DEPENDENCIES[typeName] !== undefined) {\n var events = this.constructor.EVENT_DEPENDENCIES[typeName];\n Object.entries(events).forEach(function (_ref3) {\n var _ref4 = FeatureDependentInterface_slicedToArray(_ref3, 2),\n eventName = _ref4[0],\n callback = _ref4[1];\n\n _this3._host.stopListening(_this3._host[typeName].EVENTS[eventName], _this3[callback]);\n });\n }\n }\n }, {\n key: "discard",\n value: function discard() {\n var _this4 = this;\n\n // Stop listening for feature events\n this._host.stopListening(core_HostObject.EVENTS.addFeature, this._onFeatureAdded);\n\n this._host.stopListening(core_HostObject.EVENTS.removeFeature, this._onFeatureRemoved); // Stop listening to feature-specific events\n\n\n Object.keys(this.constructor.EVENT_DEPENDENCIES).forEach(function (typeName) {\n if (_this4._host[typeName] !== undefined) {\n _this4._onFeatureRemoved(typeName);\n }\n });\n\n _get(FeatureDependentInterface_getPrototypeOf(FeatureDependentMixin.prototype), "discard", this).call(this);\n }\n }]);\n\n return FeatureDependentMixin;\n }(BaseClass);\n\n var EVENT_DEPENDENCIES = BaseClass.EVENT_DEPENDENCIES || {};\n Object.defineProperties(FeatureDependentMixin, {\n EVENT_DEPENDENCIES: {\n value: FeatureDependentInterface_objectSpread({}, EVENT_DEPENDENCIES),\n writable: false\n }\n });\n return FeatureDependentMixin;\n }\n }]);\n\n return FeatureDependentInterface;\n}();\n/**\r\n * Event dependencies should follow the signature:\r\n * {\r\n * FeatureName: {\r\n * // Events that the feature should start/stop listening for when a feature\r\n * // of type FeatureName is added/removed from the host\r\n * {\r\n * eventName: callbackName,\r\n * ...\r\n * },\r\n * }\r\n * }\r\n */\n\n\nObject.defineProperties(FeatureDependentInterface_FeatureDependentInterface, {\n EVENT_DEPENDENCIES: {\n value: {},\n writable: false\n }\n});\n/* harmony default export */ var core_FeatureDependentInterface = (FeatureDependentInterface_FeatureDependentInterface);\n// CONCATENATED MODULE: ./src/core/animpack/AnimationFeatureDependentInterface.js\nfunction AnimationFeatureDependentInterface_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { AnimationFeatureDependentInterface_typeof = function _typeof(obj) { return typeof obj; }; } else { AnimationFeatureDependentInterface_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return AnimationFeatureDependentInterface_typeof(obj); }\n\nfunction AnimationFeatureDependentInterface_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction AnimationFeatureDependentInterface_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { AnimationFeatureDependentInterface_ownKeys(Object(source), true).forEach(function (key) { AnimationFeatureDependentInterface_defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { AnimationFeatureDependentInterface_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction AnimationFeatureDependentInterface_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction AnimationFeatureDependentInterface_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction AnimationFeatureDependentInterface_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction AnimationFeatureDependentInterface_createClass(Constructor, protoProps, staticProps) { if (protoProps) AnimationFeatureDependentInterface_defineProperties(Constructor.prototype, protoProps); if (staticProps) AnimationFeatureDependentInterface_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction AnimationFeatureDependentInterface_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) AnimationFeatureDependentInterface_setPrototypeOf(subClass, superClass); }\n\nfunction AnimationFeatureDependentInterface_setPrototypeOf(o, p) { AnimationFeatureDependentInterface_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return AnimationFeatureDependentInterface_setPrototypeOf(o, p); }\n\nfunction AnimationFeatureDependentInterface_createSuper(Derived) { var hasNativeReflectConstruct = AnimationFeatureDependentInterface_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = AnimationFeatureDependentInterface_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = AnimationFeatureDependentInterface_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return AnimationFeatureDependentInterface_possibleConstructorReturn(this, result); }; }\n\nfunction AnimationFeatureDependentInterface_possibleConstructorReturn(self, call) { if (call && (AnimationFeatureDependentInterface_typeof(call) === "object" || typeof call === "function")) { return call; } return AnimationFeatureDependentInterface_assertThisInitialized(self); }\n\nfunction AnimationFeatureDependentInterface_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction AnimationFeatureDependentInterface_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction AnimationFeatureDependentInterface_getPrototypeOf(o) { AnimationFeatureDependentInterface_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return AnimationFeatureDependentInterface_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/* eslint-disable no-unused-vars */\n\n/* eslint-disable max-classes-per-file */\n\n/**\r\n * Class factory interface for features that are dependent on the AnimationFeature\r\n * being present on the host. Layer and animation events will automatically be\r\n * listened for once a AnimationFeature is added to the host and stopped once it\r\n * is removed.\r\n *\r\n * @interface\r\n * @extends FeatureDependentInterface\r\n *\r\n * @property {Object} EVENT_DEPENDENCIES - Events that the feature should start/stop\r\n * listening for when a feature of type FeatureName is added/removed from the host.\r\n * @property {Object} EVENT_DEPENDENCIES.AnimationFeature - Events that are\r\n * specific to the AnimationFeature.\r\n * @property {string} [EVENT_DEPENDENCIES.AnimationFeature.addLayer=\'_onLayerAdded\'] -\r\n * The name of the method that will be executed when AnimationFeature addLayer\r\n * events are emitted.\r\n * @property {string} [EVENT_DEPENDENCIES.AnimationFeature.removeLayer=\'_onLayerRemoved\'] -\r\n * The name of the method that will be executed when AnimationFeature removeLayer\r\n * events are emitted.\r\n * @property {string} [EVENT_DEPENDENCIES.AnimationFeature.renameLayer=\'_onLayerRenamed\'] -\r\n * The name of the method that will be executed when AnimationFeature renameLayer\r\n * events are emitted.\r\n * @property {string} [EVENT_DEPENDENCIES.AnimationFeature.addAnimation=\'_onAnimationAdded\'] -\r\n * The name of the method that will be executed when AnimationFeature addAnimation\r\n * events are emitted.\r\n * @property {string} [EVENT_DEPENDENCIES.AnimationFeature.removeAnimation=\'_onAnimationRemoved\'] -\r\n * The name of the method that will be executed when AnimationFeature removeAnimation\r\n * events are emitted.\r\n * @property {string} [EVENT_DEPENDENCIES.AnimationFeature.renameAnimation=\'_onAnimationRenamed\'] -\r\n * The name of the method that will be executed when AnimationFeature renameAnimation\r\n * events are emitted.\r\n */\n\nvar AnimationFeatureDependentInterface_AnimationFeatureDependentInterface = /*#__PURE__*/function (_FeatureDependentInte) {\n AnimationFeatureDependentInterface_inherits(AnimationFeatureDependentInterface, _FeatureDependentInte);\n\n var _super = AnimationFeatureDependentInterface_createSuper(AnimationFeatureDependentInterface);\n\n function AnimationFeatureDependentInterface() {\n AnimationFeatureDependentInterface_classCallCheck(this, AnimationFeatureDependentInterface);\n\n return _super.apply(this, arguments);\n }\n\n AnimationFeatureDependentInterface_createClass(AnimationFeatureDependentInterface, [{\n key: "_onLayerAdded",\n value:\n /**\r\n * Executed when animation layer added events are caught.\r\n *\r\n * @private\r\n *\r\n * @param {string} name - Name of the layer that was added.\r\n */\n function _onLayerAdded(_ref) {\n var name = _ref.name;\n }\n /**\r\n * Executed when animation layer removed events are caught.\r\n *\r\n * @private\r\n *\r\n * @param {string} name - Name of the layer that was removed.\r\n */\n\n }, {\n key: "_onLayerRemoved",\n value: function _onLayerRemoved(_ref2) {\n var name = _ref2.name;\n }\n /**\r\n * Executed when animation layer renamed events are caught.\r\n *\r\n * @private\r\n *\r\n * @param {string} oldName - Name of the layer that was renamed.\r\n * @param {string} newName - New name of the layer.\r\n */\n\n }, {\n key: "_onLayerRenamed",\n value: function _onLayerRenamed(_ref3) {\n var oldName = _ref3.oldName,\n newName = _ref3.newName;\n }\n /**\r\n * Executed when animation added events are caught.\r\n *\r\n * @private\r\n *\r\n * @param {string} layerName - Name of the layer that an animation was added to.\r\n * @param {string} animationName - Name of the animation that was added.\r\n */\n\n }, {\n key: "_onAnimationAdded",\n value: function _onAnimationAdded(_ref4) {\n var layerName = _ref4.layerName,\n animationName = _ref4.animationName;\n }\n /**\r\n * Executed when animation removed events are caught.\r\n *\r\n * @private\r\n *\r\n * @param {string} layerName - Name of the layer that an animation was removed from.\r\n * @param {string} animationName - Name of the animation that was removed.\r\n */\n\n }, {\n key: "_onAnimationRemoved",\n value: function _onAnimationRemoved(_ref5) {\n var layerName = _ref5.layerName,\n animationName = _ref5.animationName;\n }\n /**\r\n * Executed when animation renamed events are caught.\r\n *\r\n * @private\r\n *\r\n * @param {string} layerName - Name of the layer that an animation belongs to.\r\n * @param {string} oldName - Name of the animation that was renamed.\r\n * @param {string} newName - New name of the animation.\r\n */\n\n }, {\n key: "_onAnimationRenamed",\n value: function _onAnimationRenamed(_ref6) {\n var layerName = _ref6.layerName,\n oldName = _ref6.oldName,\n newName = _ref6.newName;\n }\n /**\r\n * Creates a class that implements {@link AnimationFeatureDependentInterface}\r\n * and extends a specified base class.\r\n *\r\n * @param {Class} BaseClass - The class to extend.\r\n *\r\n * @return {Class} A class that extends `BaseClass` and implements {@link AnimationFeatureDependentInterface}.\r\n */\n\n }], [{\n key: "Mixin",\n value: function Mixin(BaseClass) {\n var ParentClass = core_FeatureDependentInterface.Mixin(BaseClass);\n\n var AnimationFeatureDependentMixin = /*#__PURE__*/function (_ParentClass) {\n AnimationFeatureDependentInterface_inherits(AnimationFeatureDependentMixin, _ParentClass);\n\n var _super2 = AnimationFeatureDependentInterface_createSuper(AnimationFeatureDependentMixin);\n\n function AnimationFeatureDependentMixin() {\n AnimationFeatureDependentInterface_classCallCheck(this, AnimationFeatureDependentMixin);\n\n return _super2.apply(this, arguments);\n }\n\n AnimationFeatureDependentInterface_createClass(AnimationFeatureDependentMixin, [{\n key: "_onLayerAdded",\n value: function _onLayerAdded(_ref7) {\n var name = _ref7.name;\n }\n }, {\n key: "_onLayerRemoved",\n value: function _onLayerRemoved(_ref8) {\n var name = _ref8.name;\n }\n }, {\n key: "_onLayerRenamed",\n value: function _onLayerRenamed(_ref9) {\n var oldName = _ref9.oldName,\n newName = _ref9.newName;\n }\n }, {\n key: "_onAnimationAdded",\n value: function _onAnimationAdded(_ref10) {\n var layerName = _ref10.layerName,\n animationName = _ref10.animationName;\n }\n }, {\n key: "_onAnimationRemoved",\n value: function _onAnimationRemoved(_ref11) {\n var layerName = _ref11.layerName,\n animationName = _ref11.animationName;\n }\n }, {\n key: "_onAnimationRenamed",\n value: function _onAnimationRenamed(_ref12) {\n var layerName = _ref12.layerName,\n oldName = _ref12.oldName,\n newName = _ref12.newName;\n }\n }]);\n\n return AnimationFeatureDependentMixin;\n }(ParentClass);\n\n Object.defineProperties(AnimationFeatureDependentMixin, {\n EVENT_DEPENDENCIES: {\n value: AnimationFeatureDependentInterface_objectSpread(AnimationFeatureDependentInterface_objectSpread({}, ParentClass.EVENT_DEPENDENCIES), AnimationFeatureDependentInterface.EVENT_DEPENDENCIES),\n writable: false\n }\n });\n return AnimationFeatureDependentMixin;\n }\n }]);\n\n return AnimationFeatureDependentInterface;\n}(core_FeatureDependentInterface);\n\nObject.defineProperties(AnimationFeatureDependentInterface_AnimationFeatureDependentInterface, {\n EVENT_DEPENDENCIES: {\n value: {\n AnimationFeature: {\n addLayer: \'_onLayerAdded\',\n removeLayer: \'_onLayerRemoved\',\n renameLayer: \'_onLayerRenamed\',\n addAnimation: \'_onAnimationAdded\',\n removeAnimation: \'_onAnimationRemoved\',\n renameAnimation: \'_onAnimationRenamed\'\n }\n },\n writable: false\n }\n});\n/* harmony default export */ var animpack_AnimationFeatureDependentInterface = (AnimationFeatureDependentInterface_AnimationFeatureDependentInterface);\n// CONCATENATED MODULE: ./src/core/animpack/ManagedAnimationLayerInterface.js\nfunction ManagedAnimationLayerInterface_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { ManagedAnimationLayerInterface_typeof = function _typeof(obj) { return typeof obj; }; } else { ManagedAnimationLayerInterface_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return ManagedAnimationLayerInterface_typeof(obj); }\n\nfunction ManagedAnimationLayerInterface_slicedToArray(arr, i) { return ManagedAnimationLayerInterface_arrayWithHoles(arr) || ManagedAnimationLayerInterface_iterableToArrayLimit(arr, i) || ManagedAnimationLayerInterface_unsupportedIterableToArray(arr, i) || ManagedAnimationLayerInterface_nonIterableRest(); }\n\nfunction ManagedAnimationLayerInterface_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."); }\n\nfunction ManagedAnimationLayerInterface_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return ManagedAnimationLayerInterface_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return ManagedAnimationLayerInterface_arrayLikeToArray(o, minLen); }\n\nfunction ManagedAnimationLayerInterface_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction ManagedAnimationLayerInterface_iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction ManagedAnimationLayerInterface_arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction ManagedAnimationLayerInterface_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction ManagedAnimationLayerInterface_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ManagedAnimationLayerInterface_ownKeys(Object(source), true).forEach(function (key) { ManagedAnimationLayerInterface_defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ManagedAnimationLayerInterface_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction ManagedAnimationLayerInterface_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction ManagedAnimationLayerInterface_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { ManagedAnimationLayerInterface_get = Reflect.get; } else { ManagedAnimationLayerInterface_get = function _get(target, property, receiver) { var base = ManagedAnimationLayerInterface_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return ManagedAnimationLayerInterface_get(target, property, receiver || target); }\n\nfunction ManagedAnimationLayerInterface_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = ManagedAnimationLayerInterface_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction ManagedAnimationLayerInterface_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction ManagedAnimationLayerInterface_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction ManagedAnimationLayerInterface_createClass(Constructor, protoProps, staticProps) { if (protoProps) ManagedAnimationLayerInterface_defineProperties(Constructor.prototype, protoProps); if (staticProps) ManagedAnimationLayerInterface_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction ManagedAnimationLayerInterface_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) ManagedAnimationLayerInterface_setPrototypeOf(subClass, superClass); }\n\nfunction ManagedAnimationLayerInterface_setPrototypeOf(o, p) { ManagedAnimationLayerInterface_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return ManagedAnimationLayerInterface_setPrototypeOf(o, p); }\n\nfunction ManagedAnimationLayerInterface_createSuper(Derived) { var hasNativeReflectConstruct = ManagedAnimationLayerInterface_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = ManagedAnimationLayerInterface_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = ManagedAnimationLayerInterface_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return ManagedAnimationLayerInterface_possibleConstructorReturn(this, result); }; }\n\nfunction ManagedAnimationLayerInterface_possibleConstructorReturn(self, call) { if (call && (ManagedAnimationLayerInterface_typeof(call) === "object" || typeof call === "function")) { return call; } return ManagedAnimationLayerInterface_assertThisInitialized(self); }\n\nfunction ManagedAnimationLayerInterface_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction ManagedAnimationLayerInterface_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction ManagedAnimationLayerInterface_getPrototypeOf(o) { ManagedAnimationLayerInterface_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return ManagedAnimationLayerInterface_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/* eslint-disable no-unused-vars */\n\n/* eslint-disable max-classes-per-file */\n\n/**\r\n * Class factory interface for that keeps track of layers and animations on a host.\r\n * Tracked assets are marked as inactive until layers and animations with matching\r\n * names are detected as present on the host.\r\n *\r\n * @interface\r\n * @extends AnimationFeatureDependentInterface\r\n *\r\n * @property {Object} DEFAULT_LAYER_OPTIONS - Default options to use when executing\r\n * {@link AnimationLayer} methods.\r\n * @property {number} [DEFAULT_LAYER_OPTIONS.blendTime=0.5] - Default time in seconds\r\n * to use when executing {@link AnimationLayer.setBlendWeight}.\r\n * @property {Object} [DEFAULT_LAYER_OPTIONS.animations={}] - Maps animation names\r\n * to default options objects to use for managed animations.\r\n */\n\nvar ManagedAnimationLayerInterface_ManagedAnimationLayerInterface = /*#__PURE__*/function (_AnimationFeatureDepe) {\n ManagedAnimationLayerInterface_inherits(ManagedAnimationLayerInterface, _AnimationFeatureDepe);\n\n var _super = ManagedAnimationLayerInterface_createSuper(ManagedAnimationLayerInterface);\n\n function ManagedAnimationLayerInterface() {\n ManagedAnimationLayerInterface_classCallCheck(this, ManagedAnimationLayerInterface);\n\n return _super.apply(this, arguments);\n }\n\n ManagedAnimationLayerInterface_createClass(ManagedAnimationLayerInterface, [{\n key: "registerLayer",\n value:\n /**\r\n * Start tracking keeping track of whether a layer with the given name is present\r\n * on the host.\r\n *\r\n * @param {string} name - Name of the layer to keep track of.\r\n * @param {Object=} options - Options for the layer.\r\n * @param {number=} options.blendTime - Default amount of time to use when\r\n * manipulating layer weights on this layer.\r\n * @param {Function=} options.easingFn - Default easing function to use when\r\n * manipulating layer weights on this layer.\r\n * @param {Object=} options.animations - Animations to keep track of on the layer.\r\n * Animations are represented as key/value pairs of animation names and their\r\n * options.\r\n */\n function registerLayer(name) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n }\n /**\r\n * Start tracking keeping track of whether an animation with the given name is\r\n * present on the host.\r\n *\r\n * @param {string} layerName - Name of the layer that will own the animation.\r\n * @param {string} animationName - Name of the animation to keep track of.\r\n * @param {Object=} options - Options for the animation.\r\n */\n\n }, {\n key: "registerAnimation",\n value: function registerAnimation(layerName, animationName) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n }\n /**\r\n * Set layer weights on tracked layers.\r\n *\r\n * @param {Function=} nameFilter - Predicate function to test each tracked layer\r\n * with. By default all layers will pass.\r\n * @param {number} weight - Weight value to set on layers.\r\n * @param {number=} seconds - Number of seconds it will take to reach the weight\r\n * on each layer. If undefined, each layers\' blendTime option is used.\r\n * @param {Function=} easingFn - Easing function to use when setting weight\r\n * on each layer. If undefined, each layers\' easingFn option is used.\r\n */\n\n }, {\n key: "setLayerWeights",\n value: function setLayerWeights() {\n var nameFilter = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : function () {\n return true;\n };\n var weight = arguments.length > 1 ? arguments[1] : undefined;\n var seconds = arguments.length > 2 ? arguments[2] : undefined;\n var easingFn = arguments.length > 3 ? arguments[3] : undefined;\n }\n /**\r\n * Set all tracked layers\' weights to 1.\r\n *\r\n * @param {number=} seconds - Number of seconds it will take to reach the weight\r\n * on each layer. If undefined, each layers\' blendTime option is used.\r\n * @param {Function=} easingFn - Easing function to use when setting weight\r\n * on each layer. If undefined, each layers\' easingFn option is used.\r\n */\n\n }, {\n key: "enable",\n value: function enable(seconds, easingFn) {}\n /**\r\n * Set all tracked layers\' weights to 0.\r\n *\r\n * @param {number=} seconds - Number of seconds it will take to reach the weight\r\n * on each layer. If undefined, each layers\' blendTime option is used.\r\n * @param {Function=} easingFn - Easing function to use when setting weight\r\n * on each layer. If undefined, each layers\' easingFn option is used.\r\n */\n\n }, {\n key: "disable",\n value: function disable(seconds, easingFn) {}\n /**\r\n * Creates a class that implements {@link ManagedAnimationLayerInterface}\r\n * and extends a specified base class.\r\n *\r\n * @param {Class} BaseClass - The class to extend.\r\n *\r\n * @return {Class} A class that extends `BaseClass` and implements {@link ManagedAnimationLayerInterface}.\r\n */\n\n }], [{\n key: "Mixin",\n value: function Mixin(BaseClass) {\n var ParentClass = animpack_AnimationFeatureDependentInterface.Mixin(BaseClass);\n\n var ManagedAnimationLayerMixin = /*#__PURE__*/function (_ParentClass) {\n ManagedAnimationLayerInterface_inherits(ManagedAnimationLayerMixin, _ParentClass);\n\n var _super2 = ManagedAnimationLayerInterface_createSuper(ManagedAnimationLayerMixin);\n\n function ManagedAnimationLayerMixin() {\n var _this;\n\n ManagedAnimationLayerInterface_classCallCheck(this, ManagedAnimationLayerMixin);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super2.call.apply(_super2, [this].concat(args));\n _this._managedLayers = {};\n return _this;\n }\n\n ManagedAnimationLayerInterface_createClass(ManagedAnimationLayerMixin, [{\n key: "_onFeatureAdded",\n value: function _onFeatureAdded(typeName) {\n var _this2 = this;\n\n ManagedAnimationLayerInterface_get(ManagedAnimationLayerInterface_getPrototypeOf(ManagedAnimationLayerMixin.prototype), "_onFeatureAdded", this).call(this, typeName);\n\n if (typeName !== \'AnimationFeature\') {\n return;\n }\n\n this._managedLayers = this._managedLayers || {}; // Detect new layers\n\n this._host.AnimationFeature.layers.forEach(function (name) {\n _this2._onLayerAdded({\n name: name\n });\n });\n }\n }, {\n key: "_onFeatureRemoved",\n value: function _onFeatureRemoved(typeName) {\n var _this3 = this;\n\n ManagedAnimationLayerInterface_get(ManagedAnimationLayerInterface_getPrototypeOf(ManagedAnimationLayerMixin.prototype), "_onFeatureRemoved", this).call(this, typeName);\n\n if (typeName !== \'AnimationFeature\') {\n return;\n }\n\n this._managedLayers = this._managedLayers || {}; // Deactivate the layers\n\n Object.keys(this._managedLayers).forEach(function (name) {\n _this3._onLayerRemoved({\n name: name\n });\n });\n }\n }, {\n key: "_onLayerAdded",\n value: function _onLayerAdded(_ref) {\n var _this4 = this;\n\n var name = _ref.name;\n\n // Mark the layer as active if it is managed\n if (this._managedLayers[name] !== undefined) {\n this._managedLayers[name].isActive = true; // Detect new animations\n\n this._host.AnimationFeature.getAnimations(name).forEach(function (animName) {\n _this4._onAnimationAdded({\n layerName: name,\n animationName: animName\n });\n });\n }\n }\n }, {\n key: "_onLayerRemoved",\n value: function _onLayerRemoved(_ref2) {\n var _this5 = this;\n\n var name = _ref2.name;\n\n // Deactivate the layer if it is managed\n if (this._managedLayers[name] !== undefined) {\n this._managedLayers[name].isActive = false; // Deactivate the animations\n\n Object.keys(this._managedLayers[name].animations).forEach(function (animName) {\n _this5._onAnimationRemoved({\n layerName: name,\n animationName: animName\n });\n });\n }\n }\n }, {\n key: "_onLayerRenamed",\n value: function _onLayerRenamed(_ref3) {\n var oldName = _ref3.oldName,\n newName = _ref3.newName;\n var layerOptions = this._managedLayers[oldName]; // Replace the layer key with the new name\n\n if (layerOptions !== undefined) {\n delete this._managedLayers[oldName];\n this._managedLayers[newName] = layerOptions;\n }\n }\n }, {\n key: "_onAnimationAdded",\n value: function _onAnimationAdded(_ref4) {\n var layerName = _ref4.layerName,\n animationName = _ref4.animationName;\n\n // Mark the animation as active if it is managed\n if (this._managedLayers[layerName] !== undefined && this._managedLayers[layerName].animations[animationName] !== undefined) {\n this._managedLayers[layerName].animations[animationName].isActive = true;\n }\n }\n }, {\n key: "_onAnimationRemoved",\n value: function _onAnimationRemoved(_ref5) {\n var layerName = _ref5.layerName,\n animationName = _ref5.animationName;\n\n // Deactivate the animation if it is managed\n if (this._managedLayers[layerName] !== undefined && this._managedLayers[layerName].animations[animationName] !== undefined) {\n this._managedLayers[layerName].animations[animationName].isActive = false;\n }\n }\n }, {\n key: "_onAnimationRenamed",\n value: function _onAnimationRenamed(_ref6) {\n var layerName = _ref6.layerName,\n oldName = _ref6.oldName,\n newName = _ref6.newName;\n\n if (this._managedLayers[layerName] !== undefined && this._managedLayers[layerName].animations[oldName] !== undefined) {\n // Replace the animation key with the new name\n var animOptions = this._managedLayers[layerName].animations[oldName];\n delete this._managedLayers[layerName].animations[oldName];\n this._managedLayers[layerName].animations[newName] = animOptions;\n }\n }\n }, {\n key: "registerLayer",\n value: function registerLayer(name) {\n var _this6 = this;\n\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n // Start with default options for each new layer\n if (this._managedLayers[name] === undefined) {\n this._managedLayers[name] = ManagedAnimationLayerInterface_objectSpread(ManagedAnimationLayerInterface_objectSpread({}, this.constructor.DEFAULT_LAYER_OPTIONS), {}, {\n animations: {}\n });\n } // Update all options except animations\n\n\n var layerOptions = this._managedLayers[name];\n options = ManagedAnimationLayerInterface_objectSpread({}, options);\n var animationOptions = options.animations || {};\n delete options.animations;\n Object.assign(layerOptions, options); // Check whether the layer can be manipulated now\n\n layerOptions.isActive = this._host.AnimationFeature !== undefined && this._host.AnimationFeature.layers.includes(name); // Register the animations\n\n Object.entries(animationOptions).forEach(function (_ref7) {\n var _ref8 = ManagedAnimationLayerInterface_slicedToArray(_ref7, 2),\n animName = _ref8[0],\n animOptions = _ref8[1];\n\n _this6.registerAnimation(name, animName, animOptions);\n });\n }\n }, {\n key: "registerAnimation",\n value: function registerAnimation(layerName, animationName) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n // Register the layer if it hasn\'t been registered yet\n if (this._managedLayers[layerName] === undefined) {\n this.registerLayer(layerName);\n } // Update animation options\n\n\n var animOptions = this._managedLayers[layerName].animations[animationName] || {};\n Object.assign(animOptions, options);\n this._managedLayers[layerName].animations[animationName] = animOptions; // Check whether the animation can be manipulated now\n\n this._managedLayers[layerName].animations[animationName].isActive = this._managedLayers[layerName].isActive && this._host.AnimationFeature.getAnimations(layerName).includes(animationName);\n }\n }, {\n key: "setLayerWeights",\n value: function setLayerWeights() {\n var _this7 = this;\n\n var nameFilter = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : function () {\n return true;\n };\n var weight = arguments.length > 1 ? arguments[1] : undefined;\n var seconds = arguments.length > 2 ? arguments[2] : undefined;\n var easingFn = arguments.length > 3 ? arguments[3] : undefined;\n var layerNames = Object.keys(this._managedLayers).filter(nameFilter);\n layerNames.forEach(function (name) {\n var layerOptions = _this7._managedLayers[name];\n\n if (layerOptions.isActive) {\n _this7._host.AnimationFeature.setLayerWeight(name, weight, seconds !== undefined ? seconds : layerOptions.blendTime, easingFn || layerOptions.easingFn);\n }\n });\n }\n }, {\n key: "enable",\n value: function enable(seconds, easingFn) {\n this.setLayerWeights(undefined, 1, seconds, easingFn);\n }\n }, {\n key: "disable",\n value: function disable(seconds, easingFn) {\n this.setLayerWeights(undefined, 0, seconds, easingFn);\n }\n }, {\n key: "installApi",\n value: function installApi() {\n var api = ManagedAnimationLayerInterface_get(ManagedAnimationLayerInterface_getPrototypeOf(ManagedAnimationLayerMixin.prototype), "installApi", this).call(this);\n\n Object.assign(api, {\n registerLayer: this.registerLayer.bind(this),\n registerAnimation: this.registerAnimation.bind(this),\n setLayerWeights: this.setLayerWeights.bind(this),\n enable: this.enable.bind(this),\n disable: this.disable.bind(this)\n });\n return api;\n }\n }]);\n\n return ManagedAnimationLayerMixin;\n }(ParentClass);\n\n Object.defineProperties(ManagedAnimationLayerMixin, {\n DEFAULT_LAYER_OPTIONS: {\n value: ManagedAnimationLayerInterface.DEFAULT_LAYER_OPTIONS,\n writable: false\n }\n });\n return ManagedAnimationLayerMixin;\n }\n }]);\n\n return ManagedAnimationLayerInterface;\n}(animpack_AnimationFeatureDependentInterface);\n\nObject.defineProperties(ManagedAnimationLayerInterface_ManagedAnimationLayerInterface, {\n DEFAULT_LAYER_OPTIONS: {\n value: {\n blendTime: 0.5,\n animations: {}\n },\n writable: false\n }\n});\n/* harmony default export */ var animpack_ManagedAnimationLayerInterface = (ManagedAnimationLayerInterface_ManagedAnimationLayerInterface);\n// CONCATENATED MODULE: ./src/core/awspack/TextToSpeechFeatureDependentInterface.js\nfunction TextToSpeechFeatureDependentInterface_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { TextToSpeechFeatureDependentInterface_typeof = function _typeof(obj) { return typeof obj; }; } else { TextToSpeechFeatureDependentInterface_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return TextToSpeechFeatureDependentInterface_typeof(obj); }\n\nfunction TextToSpeechFeatureDependentInterface_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction TextToSpeechFeatureDependentInterface_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { TextToSpeechFeatureDependentInterface_ownKeys(Object(source), true).forEach(function (key) { TextToSpeechFeatureDependentInterface_defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { TextToSpeechFeatureDependentInterface_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction TextToSpeechFeatureDependentInterface_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction TextToSpeechFeatureDependentInterface_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction TextToSpeechFeatureDependentInterface_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction TextToSpeechFeatureDependentInterface_createClass(Constructor, protoProps, staticProps) { if (protoProps) TextToSpeechFeatureDependentInterface_defineProperties(Constructor.prototype, protoProps); if (staticProps) TextToSpeechFeatureDependentInterface_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction TextToSpeechFeatureDependentInterface_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) TextToSpeechFeatureDependentInterface_setPrototypeOf(subClass, superClass); }\n\nfunction TextToSpeechFeatureDependentInterface_setPrototypeOf(o, p) { TextToSpeechFeatureDependentInterface_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return TextToSpeechFeatureDependentInterface_setPrototypeOf(o, p); }\n\nfunction TextToSpeechFeatureDependentInterface_createSuper(Derived) { var hasNativeReflectConstruct = TextToSpeechFeatureDependentInterface_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = TextToSpeechFeatureDependentInterface_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = TextToSpeechFeatureDependentInterface_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return TextToSpeechFeatureDependentInterface_possibleConstructorReturn(this, result); }; }\n\nfunction TextToSpeechFeatureDependentInterface_possibleConstructorReturn(self, call) { if (call && (TextToSpeechFeatureDependentInterface_typeof(call) === "object" || typeof call === "function")) { return call; } return TextToSpeechFeatureDependentInterface_assertThisInitialized(self); }\n\nfunction TextToSpeechFeatureDependentInterface_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction TextToSpeechFeatureDependentInterface_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction TextToSpeechFeatureDependentInterface_getPrototypeOf(o) { TextToSpeechFeatureDependentInterface_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return TextToSpeechFeatureDependentInterface_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/* eslint-disable max-classes-per-file */\n\n/**\r\n * Class factory interface for features that are dependent on the TextToSpeechFeature\r\n * being present on the host. Speech events will automatically be listened for once a\r\n * TextToSpeechFeature is added to the host and stopped once it is removed.\r\n *\r\n * @interface\r\n * @extends FeatureDependentInterface\r\n *\r\n * @property {Object} EVENT_DEPENDENCIES - Events that the feature should start/stop\r\n * listening for when a feature of type FeatureName is added/removed from the host.\r\n * @property {Object} EVENT_DEPENDENCIES.TextToSpeechFeature - Events that are\r\n * specific to the TextToSpeechFeature.\r\n * @property {string} [EVENT_DEPENDENCIES.TextToSpeechFeature.play=\'_onPlay\'] -\r\n * The name of the method that will be executed when TextToSpeechFeature play\r\n * events are emitted.\r\n * @property {string} [EVENT_DEPENDENCIES.TextToSpeechFeature.pause=\'_onPause\'] -\r\n * The name of the method that will be executed when TextToSpeechFeature pause\r\n * events are emitted.\r\n * @property {string} [EVENT_DEPENDENCIES.TextToSpeechFeature.resume=\'_onResume\'] -\r\n * The name of the method that will be executed when TextToSpeechFeature resume\r\n * events are emitted.\r\n * @property {string} [EVENT_DEPENDENCIES.TextToSpeechFeature.stop=\'_onStop\'] -\r\n * The name of the method that will be executed when TextToSpeechFeature stop\r\n * events are emitted.\r\n * @property {string} [EVENT_DEPENDENCIES.TextToSpeechFeature.sentence=\'_onSentence\'] -\r\n * The name of the method that will be executed when TextToSpeechFeature sentence\r\n * events are emitted.\r\n * @property {string} [EVENT_DEPENDENCIES.TextToSpeechFeature.word=\'_onWord\'] -\r\n * The name of the method that will be executed when TextToSpeechFeature word\r\n * events are emitted.\r\n * @property {string} [EVENT_DEPENDENCIES.TextToSpeechFeature.viseme=\'_onViseme\'] -\r\n * The name of the method that will be executed when TextToSpeechFeature viseme\r\n * events are emitted.\r\n * @property {string} [EVENT_DEPENDENCIES.TextToSpeechFeature.ssml=\'_onSsml\'] -\r\n * The name of the method that will be executed when TextToSpeechFeature ssml\r\n * events are emitted.\r\n */\n\nvar TextToSpeechFeatureDependentInterface_TextToSpeechFeatureDependentInterface = /*#__PURE__*/function (_FeatureDependentInte) {\n TextToSpeechFeatureDependentInterface_inherits(TextToSpeechFeatureDependentInterface, _FeatureDependentInte);\n\n var _super = TextToSpeechFeatureDependentInterface_createSuper(TextToSpeechFeatureDependentInterface);\n\n function TextToSpeechFeatureDependentInterface() {\n TextToSpeechFeatureDependentInterface_classCallCheck(this, TextToSpeechFeatureDependentInterface);\n\n return _super.apply(this, arguments);\n }\n\n TextToSpeechFeatureDependentInterface_createClass(TextToSpeechFeatureDependentInterface, [{\n key: "_onPlay",\n value:\n /**\r\n * Executed when speech play events are caught.\r\n *\r\n * @private\r\n */\n function _onPlay() {}\n /**\r\n * Executed when speech pause events are caught.\r\n *\r\n * @private\r\n */\n\n }, {\n key: "_onPause",\n value: function _onPause() {}\n /**\r\n * Executed when speech resume events are caught.\r\n *\r\n * @private\r\n */\n\n }, {\n key: "_onResume",\n value: function _onResume() {}\n /**\r\n * Executed when speech stop events are caught.\r\n *\r\n * @private\r\n */\n\n }, {\n key: "_onStop",\n value: function _onStop() {}\n /**\r\n * Executed when speech sentence events are caught.\r\n *\r\n * @private\r\n */\n\n }, {\n key: "_onSentence",\n value: function _onSentence() {}\n /**\r\n * Executed when speech word events are caught.\r\n *\r\n * @private\r\n */\n\n }, {\n key: "_onWord",\n value: function _onWord() {}\n /**\r\n * Executed when speech viseme events are caught.\r\n *\r\n * @private\r\n */\n\n }, {\n key: "_onViseme",\n value: function _onViseme() {}\n /**\r\n * Executed when speech ssml events are caught.\r\n *\r\n * @private\r\n */\n\n }, {\n key: "_onSsml",\n value: function _onSsml() {}\n /**\r\n * Creates a class that implements {@link TextToSpeechFeatureDependentInterface}\r\n * and extends a specified base class.\r\n *\r\n * @param {Class} BaseClass - The class to extend.\r\n *\r\n * @return {Class} A class that extends `BaseClass` and implements {@link TextToSpeechFeatureDependentInterface}.\r\n */\n\n }], [{\n key: "Mixin",\n value: function Mixin(BaseClass) {\n var ParentClass = core_FeatureDependentInterface.Mixin(BaseClass);\n\n var TextToSpeechFeatureDependentMixin = /*#__PURE__*/function (_ParentClass) {\n TextToSpeechFeatureDependentInterface_inherits(TextToSpeechFeatureDependentMixin, _ParentClass);\n\n var _super2 = TextToSpeechFeatureDependentInterface_createSuper(TextToSpeechFeatureDependentMixin);\n\n function TextToSpeechFeatureDependentMixin() {\n TextToSpeechFeatureDependentInterface_classCallCheck(this, TextToSpeechFeatureDependentMixin);\n\n return _super2.apply(this, arguments);\n }\n\n TextToSpeechFeatureDependentInterface_createClass(TextToSpeechFeatureDependentMixin, [{\n key: "_onPlay",\n value: function _onPlay() {}\n }, {\n key: "_onPause",\n value: function _onPause() {}\n }, {\n key: "_onResume",\n value: function _onResume() {}\n }, {\n key: "_onStop",\n value: function _onStop() {}\n }, {\n key: "_onSentence",\n value: function _onSentence() {}\n }, {\n key: "_onWord",\n value: function _onWord() {}\n }, {\n key: "_onViseme",\n value: function _onViseme() {}\n }, {\n key: "_onSsml",\n value: function _onSsml() {}\n }]);\n\n return TextToSpeechFeatureDependentMixin;\n }(ParentClass);\n\n Object.defineProperties(TextToSpeechFeatureDependentMixin, {\n EVENT_DEPENDENCIES: {\n value: TextToSpeechFeatureDependentInterface_objectSpread(TextToSpeechFeatureDependentInterface_objectSpread({}, ParentClass.EVENT_DEPENDENCIES), TextToSpeechFeatureDependentInterface.EVENT_DEPENDENCIES),\n writable: false\n }\n });\n return TextToSpeechFeatureDependentMixin;\n }\n }]);\n\n return TextToSpeechFeatureDependentInterface;\n}(core_FeatureDependentInterface);\n\nObject.defineProperties(TextToSpeechFeatureDependentInterface_TextToSpeechFeatureDependentInterface, {\n EVENT_DEPENDENCIES: {\n value: {\n TextToSpeechFeature: {\n play: \'_onPlay\',\n pause: \'_onPause\',\n resume: \'_onResume\',\n stop: \'_onStop\',\n sentence: \'_onSentence\',\n word: \'_onWord\',\n viseme: \'_onViseme\',\n ssml: \'_onSsml\'\n }\n },\n writable: false\n }\n});\n/* harmony default export */ var awspack_TextToSpeechFeatureDependentInterface = (TextToSpeechFeatureDependentInterface_TextToSpeechFeatureDependentInterface);\n// CONCATENATED MODULE: ./src/core/LipsyncFeature.js\nfunction LipsyncFeature_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { LipsyncFeature_typeof = function _typeof(obj) { return typeof obj; }; } else { LipsyncFeature_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return LipsyncFeature_typeof(obj); }\n\nfunction LipsyncFeature_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction LipsyncFeature_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { LipsyncFeature_ownKeys(Object(source), true).forEach(function (key) { LipsyncFeature_defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { LipsyncFeature_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction LipsyncFeature_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\n\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }\n\nfunction LipsyncFeature_slicedToArray(arr, i) { return LipsyncFeature_arrayWithHoles(arr) || LipsyncFeature_iterableToArrayLimit(arr, i) || LipsyncFeature_unsupportedIterableToArray(arr, i) || LipsyncFeature_nonIterableRest(); }\n\nfunction LipsyncFeature_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."); }\n\nfunction LipsyncFeature_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return LipsyncFeature_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return LipsyncFeature_arrayLikeToArray(o, minLen); }\n\nfunction LipsyncFeature_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction LipsyncFeature_iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction LipsyncFeature_arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction LipsyncFeature_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction LipsyncFeature_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction LipsyncFeature_createClass(Constructor, protoProps, staticProps) { if (protoProps) LipsyncFeature_defineProperties(Constructor.prototype, protoProps); if (staticProps) LipsyncFeature_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction LipsyncFeature_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { LipsyncFeature_get = Reflect.get; } else { LipsyncFeature_get = function _get(target, property, receiver) { var base = LipsyncFeature_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return LipsyncFeature_get(target, property, receiver || target); }\n\nfunction LipsyncFeature_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = LipsyncFeature_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction LipsyncFeature_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) LipsyncFeature_setPrototypeOf(subClass, superClass); }\n\nfunction LipsyncFeature_setPrototypeOf(o, p) { LipsyncFeature_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return LipsyncFeature_setPrototypeOf(o, p); }\n\nfunction LipsyncFeature_createSuper(Derived) { var hasNativeReflectConstruct = LipsyncFeature_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = LipsyncFeature_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = LipsyncFeature_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return LipsyncFeature_possibleConstructorReturn(this, result); }; }\n\nfunction LipsyncFeature_possibleConstructorReturn(self, call) { if (call && (LipsyncFeature_typeof(call) === "object" || typeof call === "function")) { return call; } return LipsyncFeature_assertThisInitialized(self); }\n\nfunction LipsyncFeature_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction LipsyncFeature_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction LipsyncFeature_getPrototypeOf(o) { LipsyncFeature_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return LipsyncFeature_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n\n\n/**\r\n * Default mapping of Polly viseme names to animation options objects.\r\n *\r\n * @property {Object} [sil={name: \'sil\'}]\r\n * @property {Object} [p={name: \'p\', overrideWeight: 0.9}]\r\n * @property {Object} [t={name: \'t\', blendTime: 0.2}]\r\n * @property {Object} [S={name: \'S\'}]\r\n * @property {Object} [T={name: \'T\'}]\r\n * @property {Object} [f={name: \'f\', overrideWeight: 0.75}]\r\n * @property {Object} [k={name: \'k\'}]\r\n * @property {Object} [i={name: \'i\'}]\r\n * @property {Object} [r={name: \'r\'}]\r\n * @property {Object} [s={name: \'s\', blendTime: 0.25}]\r\n * @property {Object} [u={name: \'u\'}]\r\n * @property {Object} [@={name: \'@\'}]\r\n * @property {Object} [a={name: \'a\'}]\r\n * @property {Object} [e={name: \'e\', blendTime: 0.2}]\r\n * @property {Object} [E={name: \'E\'}]\r\n * @property {Object} [o={name: \'o\'}]\r\n * @property {Object} [O={name: \'O\'}]\r\n */\n\nvar DefaultVisemeMap = {\n sil: {\n name: \'sil\'\n },\n p: {\n name: \'p\',\n overrideWeight: 0.9\n },\n t: {\n name: \'t\',\n blendTime: 0.2\n },\n S: {\n name: \'S\'\n },\n T: {\n name: \'T\'\n },\n f: {\n name: \'f\',\n overrideWeight: 0.75\n },\n k: {\n name: \'k\'\n },\n i: {\n name: \'i\'\n },\n r: {\n name: \'r\'\n },\n s: {\n name: \'s\',\n blendTime: 0.25\n },\n u: {\n name: \'u\'\n },\n \'@\': {\n name: \'@\'\n },\n a: {\n name: \'a\'\n },\n e: {\n name: \'e\',\n blendTime: 0.2\n },\n E: {\n name: \'E\'\n },\n o: {\n name: \'o\'\n },\n O: {\n name: \'O\'\n }\n};\n/**\r\n * Lipsync controls two types of movement: idle animation that should play while\r\n * speech is playing and viseme animations corresponding to Polly visemes whose\r\n * weights should be turned on and off as they are encountered in the Polly SSML\r\n * transcript. Layers owned by this feature will be enabled while speech is playing\r\n * and disabled once it stops.\r\n *\r\n * @extends AbstractHostFeature\r\n * @alias core/LipsyncFeature\r\n * @implements TextToSpeechFeatureDependentInterface\r\n * @implements ManagedAnimationLayerInterface\r\n */\n\nvar LipsyncFeature_LipsyncFeature = /*#__PURE__*/function (_AbstractHostFeature$) {\n LipsyncFeature_inherits(LipsyncFeature, _AbstractHostFeature$);\n\n var _super = LipsyncFeature_createSuper(LipsyncFeature);\n\n /**\r\n * @constructor\r\n *\r\n * @param {core/HostObject} host - Host that owns the feature.\r\n * @param {Object=} visemeOptions - Options for the viseme layers.\r\n * @param {number} [visemeOptions.blendTime=0.15] - Default amount of time it\r\n * will take to manipulate each freeBlend weight on the viseme states.\r\n * @param {Object} [visemeOptions.decayRate={amount: .5, seconds: .5}] - An object\r\n * describing the 0-1 factor viseme weight will decay if the viseme duration is\r\n * longer than the blendTime and the number of seconds it would take to decay\r\n * by that factor.\r\n * @param {number} [visemeOptions.easingFn=Quadratic.InOut] - Default easing function\r\n * to use when manipulating viseme freeBlend weights.\r\n * @param {Array.} [visemeOptions..layers=[]] - An array of layer options\r\n * objects to register as viseme layers.\r\n * @param {Object=} talkingOptions - Options for the talking layers.\r\n * @param {number} [talkingOptions.blendTime=0.75] - Default amount of time to\r\n * enable and disable the talking idle layers\r\n * @param {number} [talkingOptions.easingFn=Quadratic.InOut] - Default easing\r\n * function to use when manipulating weights on the talking idle layers.\r\n * @param {Array.} [talkingOptions.layers=[]] - An array of layer options\r\n * objects to register as talking layers.\r\n * @param {number} [visemeLeadTime=.067] - The amount of time to instruct the\r\n * TextToSpeechFeature to emit speechmarks before each one\'s actual timestamp\r\n * is reached. This will set the \'speechMarkOffset\' variable on the TextToSpeechFeature.\r\n */\n function LipsyncFeature(host) {\n var _this;\n\n var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n _ref$blendTime = _ref.blendTime,\n visemeBlendTime = _ref$blendTime === void 0 ? 0.15 : _ref$blendTime,\n _ref$decayRate = _ref.decayRate;\n\n _ref$decayRate = _ref$decayRate === void 0 ? {} : _ref$decayRate;\n var _ref$decayRate$amount = _ref$decayRate.amount,\n amount = _ref$decayRate$amount === void 0 ? 0.5 : _ref$decayRate$amount,\n _ref$decayRate$second = _ref$decayRate.seconds,\n seconds = _ref$decayRate$second === void 0 ? 0.5 : _ref$decayRate$second,\n _ref$easingFn = _ref.easingFn,\n visemeEasingFn = _ref$easingFn === void 0 ? Quadratic.InOut : _ref$easingFn,\n _ref$layers = _ref.layers,\n visemeLayers = _ref$layers === void 0 ? [] : _ref$layers;\n\n var _ref2 = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},\n _ref2$blendTime = _ref2.blendTime,\n talkingBlendTime = _ref2$blendTime === void 0 ? 0.75 : _ref2$blendTime,\n _ref2$easingFn = _ref2.easingFn,\n talkingEasingFn = _ref2$easingFn === void 0 ? Quadratic.InOut : _ref2$easingFn,\n _ref2$layers = _ref2.layers,\n talkingLayers = _ref2$layers === void 0 ? [] : _ref2$layers;\n\n var visemeLeadTime = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0.067;\n\n LipsyncFeature_classCallCheck(this, LipsyncFeature);\n\n _this = _super.call(this, host);\n _this._visemeLayers = {};\n _this._talkingLayers = {};\n _this.visemeLeadTime = visemeLeadTime; // Register the viseme layers\n\n visemeLayers.forEach(function (_ref3) {\n var name = _ref3.name,\n animation = _ref3.animation,\n _ref3$visemeMap = _ref3.visemeMap,\n visemeMap = _ref3$visemeMap === void 0 ? DefaultVisemeMap : _ref3$visemeMap;\n\n _this.registerVisemeLayer(name, {\n animation: animation,\n visemeMap: visemeMap,\n decayRate: {\n amount: amount,\n seconds: seconds\n },\n blendTime: visemeBlendTime,\n easingFn: visemeEasingFn\n });\n }); // Register the talking layers\n\n talkingLayers.forEach(function (_ref4) {\n var name = _ref4.name,\n animation = _ref4.animation;\n\n _this.registerTalkingLayer(name, {\n animation: animation,\n blendTime: talkingBlendTime,\n easingFn: talkingEasingFn\n });\n });\n return _this;\n }\n /**\r\n * Ensure that registered viseme animations are FreeBlendStates.\r\n *\r\n * @private\r\n *\r\n * @param {string} layerName - Name of the layer that contains the viseme animation.\r\n * @param {string} animationName - Name of the animation.\r\n */\n\n\n LipsyncFeature_createClass(LipsyncFeature, [{\n key: "_registerVisemeAnimation",\n value: function _registerVisemeAnimation(layerName, animationName) {\n if (this._managedLayers[layerName].animations[animationName].isActive) {\n if (this._host.AnimationFeature.getAnimationType(layerName, animationName) !== \'freeBlend\') {\n // Warn and deactivate if the registered state is not freeBlend\n console.warn("Cannot register Lipsync viseme animation ".concat(animationName, " on layer ").concat(layerName, " for host ").concat(this._host.id, ". Viseme animations must be of type \'freeBlend\'."));\n this._managedLayers[layerName].animations[animationName].isActive = false;\n } else {\n // Check if the blendWeights can be manipulated now\n var weightNames = this._host.AnimationFeature.getAnimationBlendNames(layerName, animationName);\n\n var visemeMap = this._managedLayers[layerName].animations[animationName].visemeMap;\n Object.values(visemeMap).forEach(function (visemeOptions) {\n visemeOptions.isActive = weightNames.includes(visemeOptions.name);\n });\n }\n }\n }\n /**\r\n * If the added feature is TextToSpeech, update its speechMarkOffset variable.\r\n *\r\n * @private\r\n *\r\n * @param {string} typeName - Name of the type of feature that was added.\r\n */\n\n }, {\n key: "_onFeatureAdded",\n value: function _onFeatureAdded(typeName) {\n this._visemeLayers = this._visemeLayers || {};\n this._talkingLayers = this._talkingLayers || {};\n\n LipsyncFeature_get(LipsyncFeature_getPrototypeOf(LipsyncFeature.prototype), "_onFeatureAdded", this).call(this, typeName);\n\n if (typeName === \'TextToSpeechFeature\') {\n this._host.TextToSpeechFeature.speechmarkOffset = -this._visemeLeadTime || 0;\n }\n }\n }, {\n key: "_onLayerAdded",\n value: function _onLayerAdded(_ref5) {\n var name = _ref5.name;\n\n LipsyncFeature_get(LipsyncFeature_getPrototypeOf(LipsyncFeature.prototype), "_onLayerAdded", this).call(this, {\n name: name\n }); // Validate the viseme animation\n\n\n if (this._visemeLayers[name] !== undefined) {\n this._registerVisemeAnimation(name, this._visemeLayers[name]);\n }\n }\n }, {\n key: "_onAnimationAdded",\n value: function _onAnimationAdded(_ref6) {\n var layerName = _ref6.layerName,\n animationName = _ref6.animationName;\n\n LipsyncFeature_get(LipsyncFeature_getPrototypeOf(LipsyncFeature.prototype), "_onAnimationAdded", this).call(this, {\n layerName: layerName\n }); // Validate the viseme animation\n\n\n if (this._visemeLayers[layerName] === animationName) {\n this._registerVisemeAnimation(layerName, this._visemeLayers[layerName]);\n }\n }\n }, {\n key: "_onPlay",\n value: function _onPlay() {\n var _this2 = this;\n\n // Turn on the layer weights\n this.enable(); // Set the current animations\n\n [this._visemeLayers, this._talkingLayers].forEach(function (layers) {\n Object.entries(layers).forEach(function (_ref7) {\n var _ref8 = LipsyncFeature_slicedToArray(_ref7, 2),\n layerName = _ref8[0],\n animationName = _ref8[1];\n\n if (_this2._managedLayers[layerName].animations[animationName].isActive) {\n _this2._host.AnimationFeature.resumeAnimation(layerName, animationName);\n }\n });\n });\n }\n }, {\n key: "_onPause",\n value: function _onPause() {\n this._onStop();\n }\n }, {\n key: "_onResume",\n value: function _onResume() {\n this._onPlay();\n }\n }, {\n key: "_onStop",\n value: function _onStop() {\n var _this3 = this;\n\n // Turn off the layer weights\n this.disable(); // Pause the current animations\n\n [this._visemeLayers, this._talkingLayers].forEach(function (layers) {\n Object.entries(layers).forEach(function (_ref9) {\n var _ref10 = LipsyncFeature_slicedToArray(_ref9, 2),\n layerName = _ref10[0],\n animationName = _ref10[1];\n\n if (_this3._managedLayers[layerName].animations[animationName].isActive) {\n _this3._host.AnimationFeature.pauseAnimation(layerName, animationName);\n }\n });\n });\n }\n /**\r\n * When viseme events are caught, turn on weight of the new viseme for the duration\r\n * of the speech mark, then turn weight back off.\r\n *\r\n * @private\r\n *\r\n * @param {Object} event - Event data passed from the speech.\r\n * @param {Object} event.mark - Speechmark object.\r\n */\n\n }, {\n key: "_onViseme",\n value: function () {\n var _onViseme2 = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee(_ref11) {\n var _this4 = this;\n\n var mark;\n return regeneratorRuntime.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n mark = _ref11.mark;\n Object.entries(this._visemeLayers).forEach(function (_ref12) {\n var _ref13 = LipsyncFeature_slicedToArray(_ref12, 2),\n layerName = _ref13[0],\n animName = _ref13[1];\n\n // Make sure the layer can be manipulated\n var _this4$_managedLayers = _this4._managedLayers[layerName].animations[animName],\n isActive = _this4$_managedLayers.isActive,\n visemeMap = _this4$_managedLayers.visemeMap;\n\n if (!isActive) {\n return;\n } // Take variables from the viseme if they exist and default to the layer\n\n\n var _this4$_managedLayers2 = LipsyncFeature_objectSpread(LipsyncFeature_objectSpread({}, _this4._managedLayers[layerName]), visemeMap[mark.value]),\n viseme = _this4$_managedLayers2.name,\n isVisemeActive = _this4$_managedLayers2.isActive,\n decayRate = _this4$_managedLayers2.decayRate,\n blendTime = _this4$_managedLayers2.blendTime,\n easingFn = _this4$_managedLayers2.easingFn,\n overrideWeight = _this4$_managedLayers2.overrideWeight;\n\n var visemeNames = _this4._host.AnimationFeature.getAnimationBlendNames(layerName, animName); // Make sure the new viseme has an active freeBlend weight\n\n\n if (!isVisemeActive || !visemeNames.includes(viseme)) {\n return;\n } // Find the peak weight for the viseme and the amount of time it should\n // take to reach it\n\n\n var weight = 1;\n var duration = mark.duration / 1000;\n\n if (duration < blendTime) {\n var lerpFactor = blendTime > 0 ? duration / blendTime : 1;\n weight = overrideWeight !== undefined ? overrideWeight : core_MathUtils.lerp(0, 1, lerpFactor);\n }\n\n var blendInTime = Math.min(duration, blendTime); // Find the amount and time viseme will be held for\n\n var holdTime = duration - blendTime;\n\n if (holdTime < 0) {\n // Perform in -> out animation\n _this4._animateSimpleViseme(layerName, animName, viseme, weight, blendInTime, blendTime, easingFn);\n } else {\n var _lerpFactor = decayRate.seconds > 0 ? holdTime / decayRate.seconds : 1; // Perform in -> hold -> out animation\n\n\n var decayWeight = core_MathUtils.lerp(weight, weight * decayRate.amount, Math.min(1, _lerpFactor));\n\n _this4._animateHeldViseme(layerName, animName, viseme, weight, decayWeight, blendInTime, holdTime, blendTime, easingFn);\n }\n });\n\n case 2:\n case "end":\n return _context.stop();\n }\n }\n }, _callee, this);\n }));\n\n function _onViseme(_x) {\n return _onViseme2.apply(this, arguments);\n }\n\n return _onViseme;\n }()\n /**\r\n * Animate a viseme blend weight towards a value and then back to zero.\r\n *\r\n * @private\r\n *\r\n * @param {string} layerName - Name of the layer that contains the viseme.\r\n * @param {string} animName - Name of the freeblend animation that contains\r\n * the viseme.\r\n * @param {string} visemeName - Name of the blend weight to manipulate.\r\n * @param {number} weight - Peak weight to animate towards.\r\n * @param {number} blendInTime - Amount of time it should take to reach the\r\n * peak weight.\r\n * @param {number} blendOutTime - Amount of time it should take to animate back\r\n * to zero after reaching the peak weight.\r\n * @param {Function} easingFn - Easing function to use during animation.\r\n */\n\n }, {\n key: "_animateSimpleViseme",\n value: function _animateSimpleViseme(layerName, animName, visemeName, peakWeight, blendInTime, blendOutTime, easingFn) {\n var _this5 = this;\n\n // Animate towards the peak value\n var weightPromise = this._host.AnimationFeature.setAnimationBlendWeight(layerName, animName, visemeName, peakWeight, blendInTime, easingFn); // Animate back to zero if there was no weight interruption\n\n\n weightPromise.then(function () {\n if (!weightPromise.canceled) {\n _this5._host.AnimationFeature.setAnimationBlendWeight(layerName, animName, visemeName, 0, blendOutTime, easingFn);\n }\n });\n }\n /**\r\n * Animate a viseme blend weight towards a value and then back to zero.\r\n *\r\n * @private\r\n *\r\n * @param {string} layerName - Name of the layer that contains the viseme.\r\n * @param {string} animName - Name of the freeblend animation that contains\r\n * the viseme.\r\n * @param {string} visemeName - Name of the blend weight to manipulate.\r\n * @param {number} peakWeight - Peak weight to animate towards.\r\n * @param {number} decayWeight - Weight to animate towards after reaching the\r\n * peak weight.\r\n * @param {number} blendInTime - Amount of time it should take to reach the\r\n * peak weight.\r\n * @param {number} holdTime - Amount of time it should take to reach the decay\r\n * weight after the peak weight has been reached.\r\n * @param {number} blendOutTime - Amount of time it should take to animate back\r\n * to zero after reaching the decay weight.\r\n * @param {Function} easingFn - Easing function to use during animation.\r\n */\n\n }, {\n key: "_animateHeldViseme",\n value: function () {\n var _animateHeldViseme2 = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2(layerName, animName, visemeName, peakWeight, decayWeight, blendInTime, holdTime, blendOutTime, easingFn) {\n var startPromise, holdPromise;\n return regeneratorRuntime.wrap(function _callee2$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n // Animate towards the peak value\n startPromise = this._host.AnimationFeature.setAnimationBlendWeight(layerName, animName, visemeName, peakWeight, blendInTime, easingFn);\n _context2.next = 3;\n return startPromise;\n\n case 3:\n if (startPromise.canceled) {\n _context2.next = 8;\n break;\n }\n\n // Animate towards the decay value if there was no weight interruption\n holdPromise = this._host.AnimationFeature.setAnimationBlendWeight(layerName, animName, visemeName, decayWeight, holdTime, easingFn);\n _context2.next = 7;\n return holdPromise;\n\n case 7:\n if (!holdPromise.canceled) {\n // Animate back to zero if there was no weight interruption\n this._host.AnimationFeature.setAnimationBlendWeight(layerName, animName, visemeName, 0, blendOutTime, easingFn);\n }\n\n case 8:\n case "end":\n return _context2.stop();\n }\n }\n }, _callee2, this);\n }));\n\n function _animateHeldViseme(_x2, _x3, _x4, _x5, _x6, _x7, _x8, _x9, _x10) {\n return _animateHeldViseme2.apply(this, arguments);\n }\n\n return _animateHeldViseme;\n }()\n /**\r\n * Gets and sets the amount of time in seconds to negatively offset speechmark\r\n * emission by.\r\n *\r\n * @type {number}\r\n */\n\n }, {\n key: "visemeLeadTime",\n get: function get() {\n return this._visemeLeadTime;\n },\n set: function set(seconds) {\n this._visemeLeadTime = seconds;\n\n if (this._host.TextToSpeechFeature) {\n this._host.TextToSpeechFeature.speechmarkOffset = -seconds;\n }\n }\n /**\r\n * Start keeping track of an animation layer that owns a freeBlend animation\r\n * with blendWeights corresponding to visemes.\r\n *\r\n * @param {string} layerName - Name of the layer to keep track of.\r\n * @param {Object=} options - Options for the layer.\r\n * @param {string} [options.animation=\'visemes\'] - Name of the animation on the\r\n * layer that will be played during speech. This animation must be of type\r\n * freeBlend.\r\n * @param {Object=} decayRate\r\n * @param {number} [decayRate.amount=0.5] - The percentage to decrease the viseme\'s\r\n * peak value by over time once the peak value has been reached.\r\n * @param {number} [decayRate.seconds=0.5] - The amount of time in seconds to\r\n * decrease the viseme\'s weight once it has reached its peak value.\r\n * @param {number=} [options.blendTime=[LipsyncFeature.DEFAULT_LAYER_OPTIONS.blendTime]{@link LipsyncFeature#DEFAULT_LAYER_OPTIONS#blendTime}] -\r\n * Default amount of time to use when manipulating animation blendWeights.\r\n * @param {Function=} options.easingFn - Default easing function to use when\r\n * manipulating animation blendWeights.\r\n * @param {Object} [options.visemeMap=DefaultVisemeMap] - Object containing key/value pairs of\r\n * Polly viseme names mapped to objects containing the name of the corresponding\r\n * animation blendWeight and any other animation options to use such as viseme\r\n * specific blend times and easing functions.\r\n */\n\n }, {\n key: "registerVisemeLayer",\n value: function registerVisemeLayer(layerName) {\n var _ref14 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n _ref14$animation = _ref14.animation,\n animation = _ref14$animation === void 0 ? \'visemes\' : _ref14$animation,\n _ref14$decayRate = _ref14.decayRate,\n decayRate = _ref14$decayRate === void 0 ? {\n amount: 0.5,\n seconds: 0.5\n } : _ref14$decayRate,\n _ref14$blendTime = _ref14.blendTime,\n blendTime = _ref14$blendTime === void 0 ? LipsyncFeature.DEFAULT_LAYER_OPTIONS.blendTime : _ref14$blendTime,\n easingFn = _ref14.easingFn,\n _ref14$visemeMap = _ref14.visemeMap,\n visemeMap = _ref14$visemeMap === void 0 ? DefaultVisemeMap : _ref14$visemeMap;\n\n // Register the layer and animation\n this.registerLayer(layerName, {\n decayRate: decayRate,\n blendTime: blendTime,\n easingFn: easingFn,\n animations: LipsyncFeature_defineProperty({}, animation, {\n visemeMap: visemeMap\n })\n });\n this._visemeLayers[layerName] = animation; // Validate the viseme animation\n\n this._registerVisemeAnimation(layerName, animation);\n }\n /**\r\n * Start keeping track of an animation layer that contains a looping animation\r\n * to be played during speech.\r\n *\r\n * @param {string} layerName - Name of the layer to keep track of.\r\n * @param {Object=} options - Options for the layer.\r\n * @param {string} [options.animation=\'stand_talk\'] - Name of the animation on the\r\n * layer that will be played during speech.\r\n * @param {number} [options.blendTime=[LipsyncFeature.DEFAULT_LAYER_OPTIONS.blendTime]{@link LipsyncFeature#DEFAULT_LAYER_OPTIONS#blendTime}] -\r\n * Default amount of time to use when manipulating the layer\'s weights.\r\n * @param {Function=} options.easingFn - Default easing function to use when\r\n * manipulating the layer\'s weights.\r\n */\n\n }, {\n key: "registerTalkingLayer",\n value: function registerTalkingLayer(layerName) {\n var _ref15 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n _ref15$animation = _ref15.animation,\n animation = _ref15$animation === void 0 ? \'stand_talk\' : _ref15$animation,\n _ref15$blendTime = _ref15.blendTime,\n blendTime = _ref15$blendTime === void 0 ? LipsyncFeature.DEFAULT_LAYER_OPTIONS.blendTime : _ref15$blendTime,\n easingFn = _ref15.easingFn;\n\n // Register the layer and animation\n this.registerLayer(layerName, {\n blendTime: blendTime,\n easingFn: easingFn,\n animations: LipsyncFeature_defineProperty({}, animation, {})\n });\n this._talkingLayers[layerName] = animation;\n }\n /**\r\n * Adds a namespace to the host with the name of the feature to contain properties\r\n * and methods from the feature that users of the host need access to.\r\n *\r\n * @see LipsyncFeature\r\n */\n\n }, {\n key: "installApi",\n value: function installApi() {\n var _this6 = this;\n\n /**\r\n * @inner\r\n * @namespace LipsyncFeature\r\n */\n var api = LipsyncFeature_get(LipsyncFeature_getPrototypeOf(LipsyncFeature.prototype), "installApi", this).call(this);\n /**\r\n * @memberof LipsyncFeature\r\n * @name registerLayer\r\n * @instance\r\n * @method\r\n * @see ManagedAnimationLayerInterface#registerLayer\r\n */\n\n /**\r\n * @memberof LipsyncFeature\r\n * @name registerAnimation\r\n * @instance\r\n * @method\r\n * @see ManagedAnimationLayerInterface#registerAnimation\r\n */\n\n /**\r\n * @memberof LipsyncFeature\r\n * @name setLayerWeights\r\n * @instance\r\n * @method\r\n * @see ManagedAnimationLayerInterface#setLayerWeights\r\n */\n\n /**\r\n * @memberof LipsyncFeature\r\n * @name enable\r\n * @instance\r\n * @method\r\n * @see ManagedAnimationLayerInterface#enable\r\n */\n\n /**\r\n * @memberof LipsyncFeature\r\n * @name disable\r\n * @instance\r\n * @method\r\n * @see ManagedAnimationLayerInterface#disable\r\n */\n\n\n Object.assign(api, {\n /**\r\n * @memberof LipsyncFeature\r\n * @instance\r\n * @method\r\n * @see core/LipsyncFeature#registerVisemeLayer\r\n */\n registerVisemeLayer: this.registerVisemeLayer.bind(this),\n\n /**\r\n * @memberof LipsyncFeature\r\n * @instance\r\n * @method\r\n * @see core/LipsyncFeature#registerTalkingLayer\r\n */\n registerTalkingLayer: this.registerTalkingLayer.bind(this)\n });\n /**\r\n * @memberof LipsyncFeature\r\n * @instance\r\n * @name visemeLeadTime\r\n * @see core/LipsyncFeature#visemeLeadTime\r\n */\n\n Object.defineProperty(api, \'visemeLeadTime\', {\n get: function get() {\n return _this6.visemeLeadTime;\n },\n set: function set(seconds) {\n _this6.visemeLeadTime = seconds;\n }\n });\n return api;\n }\n }]);\n\n return LipsyncFeature;\n}(core_AbstractHostFeature.mix(awspack_TextToSpeechFeatureDependentInterface.Mixin, animpack_ManagedAnimationLayerInterface.Mixin));\n\n/* harmony default export */ var core_LipsyncFeature = (LipsyncFeature_LipsyncFeature);\n\n// CONCATENATED MODULE: ./src/core/awspack/SSMLSpeechmarkInterface.js\nfunction SSMLSpeechmarkInterface_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { SSMLSpeechmarkInterface_typeof = function _typeof(obj) { return typeof obj; }; } else { SSMLSpeechmarkInterface_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return SSMLSpeechmarkInterface_typeof(obj); }\n\nfunction SSMLSpeechmarkInterface_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction SSMLSpeechmarkInterface_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction SSMLSpeechmarkInterface_createClass(Constructor, protoProps, staticProps) { if (protoProps) SSMLSpeechmarkInterface_defineProperties(Constructor.prototype, protoProps); if (staticProps) SSMLSpeechmarkInterface_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction SSMLSpeechmarkInterface_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) SSMLSpeechmarkInterface_setPrototypeOf(subClass, superClass); }\n\nfunction SSMLSpeechmarkInterface_setPrototypeOf(o, p) { SSMLSpeechmarkInterface_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return SSMLSpeechmarkInterface_setPrototypeOf(o, p); }\n\nfunction SSMLSpeechmarkInterface_createSuper(Derived) { var hasNativeReflectConstruct = SSMLSpeechmarkInterface_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = SSMLSpeechmarkInterface_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = SSMLSpeechmarkInterface_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return SSMLSpeechmarkInterface_possibleConstructorReturn(this, result); }; }\n\nfunction SSMLSpeechmarkInterface_possibleConstructorReturn(self, call) { if (call && (SSMLSpeechmarkInterface_typeof(call) === "object" || typeof call === "function")) { return call; } return SSMLSpeechmarkInterface_assertThisInitialized(self); }\n\nfunction SSMLSpeechmarkInterface_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction SSMLSpeechmarkInterface_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction SSMLSpeechmarkInterface_getPrototypeOf(o) { SSMLSpeechmarkInterface_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return SSMLSpeechmarkInterface_getPrototypeOf(o); }\n\n/* eslint-disable no-unused-vars */\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/* eslint-disable max-classes-per-file */\n\n/* eslint-disable no-empty */\n\n/**\r\n * Class factory interface for that registers callback method when a ssml speechmark event is emitted.\r\n *\r\n * @interface\r\n * @extends TextToSpeechFeatureDependentInterface\r\n */\n\nvar SSMLSpeechmarkInterface_SSMLSpeechmarkInterface = /*#__PURE__*/function (_TextToSpeechFeatureD) {\n SSMLSpeechmarkInterface_inherits(SSMLSpeechmarkInterface, _TextToSpeechFeatureD);\n\n var _super = SSMLSpeechmarkInterface_createSuper(SSMLSpeechmarkInterface);\n\n function SSMLSpeechmarkInterface() {\n SSMLSpeechmarkInterface_classCallCheck(this, SSMLSpeechmarkInterface);\n\n return _super.apply(this, arguments);\n }\n\n SSMLSpeechmarkInterface_createClass(SSMLSpeechmarkInterface, [{\n key: "_onSsml",\n value:\n /**\r\n * When ssml events are caught, this will try to parse the speech mark value and execute any function which meets criteria defined in the value.\r\n * Speech mark value will be treated as stringified json format containing required feature name, function name and argument array to pass in.\r\n * Example speech mark value might look like: \'{"feature":"GestureFeature", "method":"switchToGesture", "args":["genricA", 0.5]}\'\r\n *\r\n * @private\r\n *\r\n * @param {Object} event - Event data passed from the speech.\r\n * @param {Object} event.mark - Speechmark object.\r\n */\n function _onSsml(_ref) {\n var mark = _ref.mark;\n }\n /**\r\n * Creates a class that implements {@link SSMLSpeechmarkInterface}\r\n * and extends a specified base class.\r\n *\r\n * @param {Class} BaseClass - The class to extend.\r\n *\r\n * @return {Class} A class that extends `BaseClass` and implements {@link SSMLSpeechmarkInterface}.\r\n */\n\n }], [{\n key: "Mixin",\n value: function Mixin(BaseClass) {\n var ParentClass = awspack_TextToSpeechFeatureDependentInterface.Mixin(BaseClass);\n\n var SSMLSpeechMarkMixin = /*#__PURE__*/function (_ParentClass) {\n SSMLSpeechmarkInterface_inherits(SSMLSpeechMarkMixin, _ParentClass);\n\n var _super2 = SSMLSpeechmarkInterface_createSuper(SSMLSpeechMarkMixin);\n\n function SSMLSpeechMarkMixin() {\n SSMLSpeechmarkInterface_classCallCheck(this, SSMLSpeechMarkMixin);\n\n return _super2.apply(this, arguments);\n }\n\n SSMLSpeechmarkInterface_createClass(SSMLSpeechMarkMixin, [{\n key: "_onSsml",\n value: function _onSsml(_ref2) {\n var mark = _ref2.mark;\n\n try {\n var _JSON$parse = JSON.parse(mark.value),\n feature = _JSON$parse.feature,\n method = _JSON$parse.method,\n args = _JSON$parse.args;\n\n if (this.constructor.name === feature) {\n var callback = this[method];\n\n if (callback && typeof callback === \'function\') {\n callback.apply(this, args);\n } else {\n console.warn("Function ".concat(method, " does not exist within feature ").concat(feature));\n }\n }\n } catch (e) {}\n }\n }]);\n\n return SSMLSpeechMarkMixin;\n }(ParentClass);\n\n return SSMLSpeechMarkMixin;\n }\n }]);\n\n return SSMLSpeechmarkInterface;\n}(awspack_TextToSpeechFeatureDependentInterface);\n\n/* harmony default export */ var awspack_SSMLSpeechmarkInterface = (SSMLSpeechmarkInterface_SSMLSpeechmarkInterface);\n// CONCATENATED MODULE: ./src/core/GestureFeature.js\nfunction GestureFeature_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { GestureFeature_typeof = function _typeof(obj) { return typeof obj; }; } else { GestureFeature_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return GestureFeature_typeof(obj); }\n\nfunction GestureFeature_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction GestureFeature_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { GestureFeature_ownKeys(Object(source), true).forEach(function (key) { GestureFeature_defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { GestureFeature_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction GestureFeature_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction GestureFeature_slicedToArray(arr, i) { return GestureFeature_arrayWithHoles(arr) || GestureFeature_iterableToArrayLimit(arr, i) || GestureFeature_unsupportedIterableToArray(arr, i) || GestureFeature_nonIterableRest(); }\n\nfunction GestureFeature_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."); }\n\nfunction GestureFeature_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return GestureFeature_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return GestureFeature_arrayLikeToArray(o, minLen); }\n\nfunction GestureFeature_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction GestureFeature_iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction GestureFeature_arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction GestureFeature_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction GestureFeature_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction GestureFeature_createClass(Constructor, protoProps, staticProps) { if (protoProps) GestureFeature_defineProperties(Constructor.prototype, protoProps); if (staticProps) GestureFeature_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction GestureFeature_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { GestureFeature_get = Reflect.get; } else { GestureFeature_get = function _get(target, property, receiver) { var base = GestureFeature_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return GestureFeature_get(target, property, receiver || target); }\n\nfunction GestureFeature_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = GestureFeature_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction GestureFeature_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) GestureFeature_setPrototypeOf(subClass, superClass); }\n\nfunction GestureFeature_setPrototypeOf(o, p) { GestureFeature_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return GestureFeature_setPrototypeOf(o, p); }\n\nfunction GestureFeature_createSuper(Derived) { var hasNativeReflectConstruct = GestureFeature_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = GestureFeature_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = GestureFeature_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return GestureFeature_possibleConstructorReturn(this, result); }; }\n\nfunction GestureFeature_possibleConstructorReturn(self, call) { if (call && (GestureFeature_typeof(call) === "object" || typeof call === "function")) { return call; } return GestureFeature_assertThisInitialized(self); }\n\nfunction GestureFeature_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction GestureFeature_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction GestureFeature_getPrototypeOf(o) { GestureFeature_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return GestureFeature_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n\n\nvar DefaultGestureWords = {\n big: [\'add\', \'above\', \'authority\', \'big\', \'cover\', \'full\', \'fly\', \'grow\', \'growth\', \'high\', \'huge\', \'increase\', \'major\', \'majority\', \'large\', \'leader\', \'lot\', \'raise\', \'rise\', \'tall\'],\n heart: [\'accept\', \'admit\', \'believe\', \'care\', \'feeling\', \'feel\', \'friend\', \'grateful\', \'happy\', \'heart\', \'human\', \'pain\', \'save\', \'safe\', \'kind\', \'love\'],\n "in": [\'include\', \'including\', \'inside\', \'into\', \'now\', \'near\', \'nearest\', \'closest\', \'therein\', \'within\'],\n many: [\'all\', \'always\', \'any\', \'anyone\', \'among\', \'area\', \'around\', \'beautiful\', \'entire\', \'environment\', \'environments\', \'environmental\', \'everybody\', \'everyone\', \'everything\', \'audience\', \'total\', \'group\', \'groups\', \'million\', \'millions\', \'others\', \'billion\', \'billions\', \'hundred\', \'hundreds\', \'many\', \'thousand\', \'thousands\', \'world\', \'worlds\', \'outside\', \'reveal\'],\n movement: [\'away\', \'across\', \'ahead\', \'along\', \'far\', \'fast\', \'follow\', \'go\', \'leave\', \'move\', \'movement\', \'through\', \'throughout\', \'toward\', \'travel\', \'turned\', \'passed\'],\n one: [\'single\', \'one\', \'once\', \'first\', \'firstly\', \'only\', \'solo\', \'warned\', \'truly\', \'up\', \'alone\'],\n aggressive: [\'power\', \'powers\', \'powerful\', \'assert\', \'assertive\', \'strong\', \'stronger\', \'strongest\', \'strength\', \'flex\', \'dang\', \'damn\', \'damnit\', \'darn\', \'shucks\', \'doh\', \'drat\', \'angry\', \'angrier\', \'angriest\', \'aggressive\', \'annoyed\', \'annoying\', \'attack\', \'attacking\', \'offense\', \'offensive\', \'battle\'],\n you: [\'you\', \'yall\', "y\'all", \'your\', \'yours\', \'thou\', \'thy\'],\n defense: [\'defense\', \'fear\', \'repulsed\', \'scared\', \'scary\', \'scarier\', \'scariest\', \'fearful\', \'afraid\', \'cower\', \'cowers\', \'cowering\', \'hideous\', \'doomed\', \'terrified\', \'terrify\', \'terrifying\', \'terrifies\', \'spooky\', \'spookier\', \'spookiest\'],\n wave: [\'hello\', \'hi\', \'hiya\', \'howdy\', \'welcome\', \'aloha\', \'heya\', \'hey\', \'bye\', \'goodbye\', \'hola\', \'adios\', \'chao\'],\n self: [\'my\', \'I\', \'myself\', \'self\', "I\'ve", \'Ive\', \'me\', \'mine\', \'own\']\n};\n/**\r\n * Gesture allows you to play animations on demand on one or more layers from script\r\n * or ssml. If gesture is played that is a QueueState, the queue will automatically\r\n * be progressed after a given hold time if a looping queued state is reached. Gesture\r\n * layers can optionally be automatically disabled when no gesture animation is\r\n * in progress.\r\n *\r\n * @extends AbstractHostFeature\r\n * @implements SSMLSpeechmarkInterface\r\n * @implements ManagedAnimationLayerInterface\r\n */\n\nvar GestureFeature_GestureFeature = /*#__PURE__*/function (_AbstractHostFeature$) {\n GestureFeature_inherits(GestureFeature, _AbstractHostFeature$);\n\n var _super = GestureFeature_createSuper(GestureFeature);\n\n /**\r\n * @constructor\r\n *\r\n * @param {core/HostObject} host - Host object that owns the feature.\r\n * @param {Object=} options - Optional options for the feature.\r\n * @param {number} [options.holdTime = 3] - Amount of time in seconds that must\r\n * elapse before advancing a gesture that\'s a {@link QueueState} when the current\r\n * state in the queue is set to loop infinitely.\r\n * @param {number} [options.minimumInterval = 0.25] - The minimum amount of time\r\n * in seconds that must elapse before another gesture can be played.\r\n * @param {Object} layers - An object that maps layer names to layer options.\r\n * These are the layers that will be registered as tracked gesture layers. See\r\n * {@link ManagedAnimationLayerInterface#registerLayer} for more information\r\n * on expected format for each layer options object.\r\n */\n function GestureFeature(host) {\n var _this;\n\n var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n _ref$holdTime = _ref.holdTime,\n holdTime = _ref$holdTime === void 0 ? 3 : _ref$holdTime,\n _ref$minimumInterval = _ref.minimumInterval,\n minimumInterval = _ref$minimumInterval === void 0 ? 1 : _ref$minimumInterval,\n _ref$layers = _ref.layers,\n layers = _ref$layers === void 0 ? {} : _ref$layers;\n\n GestureFeature_classCallCheck(this, GestureFeature);\n\n _this = _super.call(this, host);\n _this.holdTime = holdTime;\n _this.minimumInterval = minimumInterval; // Register the gesture layers\n\n Object.entries(layers).forEach(function (_ref2) {\n var _ref3 = GestureFeature_slicedToArray(_ref2, 2),\n name = _ref3[0],\n _ref3$ = _ref3[1],\n options = _ref3$ === void 0 ? {} : _ref3$;\n\n _this.registerLayer(name, options);\n });\n return _this;\n }\n /**\r\n * Return a valid hold time value. If hold time isn\'t defined for the animation,\r\n * try to use the hold time for the layer. If that\'s not defined, fall back to\r\n * the hold time for the feature.\r\n *\r\n * @private\r\n *\r\n * @param {Object} layer - Managed layer options object.\r\n * @param {Object} animation - Managed animation options object.\r\n *\r\n * @returns {number}\r\n */\n\n\n GestureFeature_createClass(GestureFeature, [{\n key: "_getHoldTime",\n value: function _getHoldTime(layer, animation) {\n var layerHoldTime = layer.holdTime !== undefined ? layer.holdTime : this.holdTime;\n return animation.holdTime !== undefined ? animation.holdTime : layerHoldTime;\n }\n /**\r\n * Return a valid minimum interval value. If minimum interval isn\'t defined for\r\n * the animation, try to use the minimum interval for the layer. If that\'s not\r\n * defined, fall back to the minimum interval for the feature.\r\n *\r\n * @private\r\n *\r\n * @param {Object} layer - Managed layer options object.\r\n * @param {Object} animation - Managed animation options object.\r\n *\r\n * @returns {number}\r\n */\n\n }, {\n key: "_getMinimumInterval",\n value: function _getMinimumInterval(layer, animation) {\n var layerMinimumInterval = layer.minimumInterval !== undefined ? layer.minimumInterval : this.minimumInterval;\n return animation.minimumInterval !== undefined ? animation.minimumInterval : layerMinimumInterval;\n }\n /**\r\n * Callback for {@link core/AnimationFeature#playNextAnimation} event. If the\r\n * event is emitted for a managed animation and the new queued state cannot\r\n * advance on its own, start a new timer promise that will advance the queue\r\n * once it resolves.\r\n *\r\n * @private\r\n *\r\n * @param {Object} options - Options object passed from playNextAnimation event.\r\n * @param {string} layerName - Name of the layer that owns the queue state.\r\n * @param {string} animationName - Name of the queue state animation.\r\n * @param {boolean} canAdvance - Whether or not the current state in the queue\r\n * can advance on its own.\r\n * @param {boolean} isQueueEnd - Whether the current state in the queue is the last\r\n * state in the queue.\r\n */\n\n }, {\n key: "_onNext",\n value: function _onNext(_ref4) {\n var _this2 = this;\n\n var layerName = _ref4.layerName,\n animationName = _ref4.animationName,\n canAdvance = _ref4.canAdvance,\n isQueueEnd = _ref4.isQueueEnd;\n // Exit if this isn\'t a managed layer\n var layer = this._managedLayers[layerName];\n\n if (layer === undefined) {\n return;\n } // Exit if it isn\'t a managed animation\n\n\n var animation = layer.animations[animationName];\n\n if (animation === undefined) {\n return;\n } // Start a new timer for looping states that aren\'t the end of the queue\n\n\n if (!canAdvance && !isQueueEnd && layer.currentGesture === animationName) {\n var holdTime = this._getHoldTime(layer, animation);\n\n layer.holdTimer.cancel(); // Skip to the next animation right away if hold time is zero\n\n if (holdTime <= 0) {\n this._host.AnimationFeature.playNextAnimation(layerName, animationName);\n } // Wait for the given hold time before progressing\n else {\n layer.holdTimer = core_Utils.wait(holdTime, {\n onFinish: function onFinish() {\n // Advance the queue to the next state\n if (layer.currentGesture === animationName) {\n _this2._host.AnimationFeature.playNextAnimation(layerName, animationName);\n }\n }\n });\n }\n }\n }\n /**\r\n * Callback for {@link core/AnimationFeature#stopAnimation} event. If the\r\n * event is emitted for a managed animation cancel the layer\'s stored timers.\r\n * If the layer is set to auto-disable set its weight to 0.\r\n *\r\n * @private\r\n *\r\n * @param {Object} options - Options object passed from playNextAnimation event.\r\n * @param {string} layerName - Name of the layer that owns the stopped animation.\r\n * @param {string} animationName - Name of the animation that was stopped.\r\n */\n\n }, {\n key: "_onStop",\n value: function _onStop(_ref5) {\n var layerName = _ref5.layerName,\n animationName = _ref5.animationName;\n // Make sure the layer is managed\n var layer = this._managedLayers[layerName];\n\n if (layer === undefined) {\n return;\n } // Make sure the animation is managed\n\n\n var animation = layer.animations[animationName];\n\n if (animation !== undefined && animationName === layer.currentGesture) {\n layer.currentGesture = null;\n layer.playTimer = null;\n layer.holdTimer.cancel(); // Turn off layer weight\n\n if (layer.autoDisable) {\n this.setLayerWeights(function (name) {\n return name === layerName;\n }, 0);\n }\n }\n }\n }, {\n key: "_onAnimationAdded",\n value: function _onAnimationAdded(_ref6) {\n var layerName = _ref6.layerName,\n animationName = _ref6.animationName;\n var layer = this._managedLayers[layerName];\n\n if (layer !== undefined) {\n var animation = layer.animations[animationName]; // Register the animation as active if it is unmanaged\n\n if (animation === undefined) {\n this.registerAnimation(layerName, animationName);\n } // Mark the animation as active if it is managed\n else {\n animation.isActive = true;\n }\n }\n }\n }, {\n key: "registerLayer",\n value: function registerLayer(name) {\n var _this3 = this;\n\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n GestureFeature_get(GestureFeature_getPrototypeOf(GestureFeature.prototype), "registerLayer", this).call(this, name, GestureFeature_objectSpread(GestureFeature_objectSpread({}, options), {}, {\n holdTimer: core_Deferred.resolve(),\n playTimer: null,\n currentGesture: null\n }));\n\n if (this._managedLayers[name].isActive) {\n this._host.AnimationFeature.getAnimations(name).forEach(function (anim) {\n // Automatically register all animations on the layer\n if (_this3._managedLayers[name].animations[anim] === undefined) {\n _this3.registerAnimation(name, anim, _this3._managedLayers[name].animations[anim]);\n }\n });\n }\n }\n }, {\n key: "registerAnimation",\n value: function registerAnimation(layerName, animationName) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n // Try to fall back to a default word array\n if (!(options.words instanceof Array) && !(options.words instanceof Set)) {\n options.words = DefaultGestureWords[animationName] || [];\n }\n\n GestureFeature_get(GestureFeature_getPrototypeOf(GestureFeature.prototype), "registerAnimation", this).call(this, layerName, animationName, options);\n }\n /**\r\n * Create an object that maps ssml mark syntax required to play each gesture to\r\n * the words array associated with each gesture. Words arrays are defined at when\r\n * the gesture animation is registered. Gestures without associated words will\r\n * be excluded from the result. The resulting object can be used as an input\r\n * for {@link TextToSpeechUtils.autoGenerateSSMLMarks} to update a speech string\r\n * with the markup required to play gestures timed with their associated words.\r\n *\r\n * @returns {Object}\r\n */\n\n }, {\n key: "createGestureMap",\n value: function createGestureMap() {\n var _this4 = this;\n\n var gestureMap = {};\n Object.entries(this._managedLayers).forEach(function (_ref7) {\n var _ref8 = GestureFeature_slicedToArray(_ref7, 2),\n layerName = _ref8[0],\n animations = _ref8[1].animations;\n\n Object.entries(animations).forEach(function (_ref9) {\n var _ref10 = GestureFeature_slicedToArray(_ref9, 2),\n animationName = _ref10[0],\n _ref10$ = _ref10[1],\n holdTime = _ref10$.holdTime,\n minimumInterval = _ref10$.minimumInterval,\n words = _ref10$.words,\n transitionTime = _ref10$.transitionTime;\n\n // Only store gestures that have any associated words\n if (words.length) {\n var options = GestureFeature_objectSpread(GestureFeature_objectSpread(GestureFeature_objectSpread({}, holdTime && {\n holdTime: holdTime\n }), minimumInterval && {\n minimumInterval: minimumInterval\n }), transitionTime && {\n transitionTime: transitionTime\n });\n\n var key = {\n feature: _this4.constructor.name,\n method: \'playGesture\',\n args: [layerName, animationName, options]\n };\n gestureMap[JSON.stringify(key)] = words;\n }\n });\n });\n return gestureMap;\n }\n /**\r\n * Create an array that contains ssml mark syntax required to play each gesture\r\n * that does not have any associated words. The resulting array can be used as\r\n * an input for {@link TextToSpeechUtils.autoGenerateSSMLMarks} or\r\n * {@link TextToSpeechUtils.addMarksToUnmarkedSentences} to update a speech\r\n * string with the markup required to play random gestures at each unmarked\r\n * sentence in the string.\r\n *\r\n * @param {Array.=} layers - An array of names of managed layers to generate\r\n * marks for. If undefined, use all managed layers.\r\n *\r\n * @returns {Array.}\r\n */\n\n }, {\n key: "createGenericGestureArray",\n value: function createGenericGestureArray(layers) {\n var _this5 = this;\n\n var genericGestures = [];\n layers = layers || Object.keys(this._managedLayers);\n layers.forEach(function (layerName) {\n var layer = _this5._managedLayers[layerName]; // Make sure the layer is managed\n\n if (!layer) {\n return;\n }\n\n Object.entries(layer.animations).forEach(function (_ref11) {\n var _ref12 = GestureFeature_slicedToArray(_ref11, 2),\n animationName = _ref12[0],\n _ref12$ = _ref12[1],\n holdTime = _ref12$.holdTime,\n minimumInterval = _ref12$.minimumInterval,\n words = _ref12$.words,\n transitionTime = _ref12$.transitionTime;\n\n // Only store gestures that don\'t have any associated words\n if (!words.length) {\n var options = GestureFeature_objectSpread(GestureFeature_objectSpread(GestureFeature_objectSpread({}, holdTime && {\n holdTime: holdTime\n }), minimumInterval && {\n minimumInterval: minimumInterval\n }), transitionTime && {\n transitionTime: transitionTime\n });\n\n var key = JSON.stringify({\n feature: _this5.constructor.name,\n method: \'playGesture\',\n args: [layerName, animationName, options]\n });\n\n if (!genericGestures.includes(key)) {\n genericGestures.push(key);\n }\n }\n });\n });\n return genericGestures;\n }\n /**\r\n * Play a managed gesture animation.\r\n *\r\n * @param {string} layerName - The name of the layer that contains the gesture\r\n * animation.\r\n * @param {string} animationName - The name of the gesture animation.\r\n * @param {Object=} options - Optional gesture options.\r\n * @param {number=} options.holdTime - This option only applies to {@link QueueState}\r\n * gestures. When a QueueState gesture progresses to a looping state, this option\r\n * defines how many seconds should elapse before moving the queue forward. If\r\n * undefined, it will fall back first to the holdTime defined in the options when\r\n * the gesture animation was registered and then to the holdTime defined on the\r\n * feature.\r\n * @param {number=} options.minimumInterval - The minimum amount of time that\r\n * must have elapsed since the last time a gesture was played.\r\n */\n\n }, {\n key: "playGesture",\n value: function playGesture(layerName, animationName) {\n var _ref13 = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},\n holdTime = _ref13.holdTime,\n minimumInterval = _ref13.minimumInterval,\n transitionTime = _ref13.transitionTime,\n _ref13$force = _ref13.force,\n force = _ref13$force === void 0 ? false : _ref13$force;\n\n // Make sure the animation is registered\n if (this._managedLayers[layerName] === undefined || this._managedLayers[layerName].animations[animationName] === undefined) {\n this.registerAnimation(layerName, animationName, {\n holdTime: holdTime,\n minimumInterval: minimumInterval,\n transitionTime: transitionTime\n });\n }\n\n var layer = this._managedLayers[layerName];\n var animation = layer.animations[animationName]; // Make sure the animation is active\n\n if (!animation.isActive) {\n // Create warning message based on which object doesn\'t exist yet\n var typeName = layer.isActive ? \'animation\' : \'layer\';\n var message = "Skipping gesture ".concat(animationName, " on layer ").concat(layerName, " for host ").concat(this._host.id, ". No ").concat(typeName, " exists with this name yet.");\n console.warn(message);\n return core_Deferred.cancel({\n reason: \'inactive\',\n value: typeName\n });\n } // Check if the gesture is already playing\n\n\n var currentGesture = layer.currentGesture;\n\n if (currentGesture === animationName && !force) {\n var _message = "Skipping gesture ".concat(animationName, " on layer ").concat(layerName, " for host ").concat(this._host.id, ". The gesture is already playing. Use options.force to force the gesture replay, which may result in a hard transition.");\n\n console.warn(_message);\n return core_Deferred.cancel({\n reason: \'playing\',\n value: animationName\n });\n } // Update animation options\n\n\n if (holdTime !== undefined) {\n animation.holdTime = holdTime;\n }\n\n if (minimumInterval !== undefined) {\n animation.minimumInterval = minimumInterval;\n } else {\n minimumInterval = this._getMinimumInterval(layer, animation);\n } // Check the interval\n\n\n if (!force && layer.playTimer !== null && layer.playTimer < minimumInterval) {\n console.warn("Skipping gesture ".concat(animationName, " on layer ").concat(layerName, " for host ").concat(this._host.id, ". Minimum interval ").concat(minimumInterval, " has not been met."));\n return core_Deferred.cancel({\n reason: \'minimumInterval\',\n value: minimumInterval - layer.playTimer\n });\n } // Play the animation\n\n\n layer.currentGesture = animationName;\n layer.playTimer = 0;\n layer.holdTimer.cancel();\n\n if (layer.autoDisable) {\n this.setLayerWeights(function (name) {\n return name === layerName;\n }, 1);\n }\n\n return this._host.AnimationFeature.playAnimation(layerName, animationName, transitionTime);\n }\n }, {\n key: "update",\n value: function update(deltaTime) {\n var _this6 = this;\n\n GestureFeature_get(GestureFeature_getPrototypeOf(GestureFeature.prototype), "update", this).call(this, deltaTime); // Increment the timers\n\n\n Object.entries(this._managedLayers).forEach(function (_ref14) {\n var _ref15 = GestureFeature_slicedToArray(_ref14, 2),\n name = _ref15[0],\n options = _ref15[1];\n\n if (options.isActive && !_this6._host.AnimationFeature.getPaused(name)) {\n options.holdTimer.execute(deltaTime);\n\n if (options.playTimer !== null) {\n options.playTimer += deltaTime / 1000;\n }\n }\n });\n }\n }, {\n key: "installApi",\n value: function installApi() {\n /**\r\n * @inner\r\n * @namespace GestureFeature\r\n */\n var api = GestureFeature_get(GestureFeature_getPrototypeOf(GestureFeature.prototype), "installApi", this).call(this);\n\n Object.assign(api, {\n /**\r\n * @memberof GestureFeature\r\n * @instance\r\n * @method\r\n * @see GestureFeature#createGestureMap\r\n */\n createGestureMap: this.createGestureMap.bind(this),\n\n /**\r\n * @memberof GestureFeature\r\n * @instance\r\n * @method\r\n * @see GestureFeature#createGenericGestureArray\r\n */\n createGenericGestureArray: this.createGenericGestureArray.bind(this),\n\n /**\r\n * @memberof GestureFeature\r\n * @instance\r\n * @method\r\n * @see GestureFeature#playGesture\r\n */\n playGesture: this.playGesture.bind(this)\n });\n }\n }]);\n\n return GestureFeature;\n}(core_AbstractHostFeature.mix(awspack_SSMLSpeechmarkInterface.Mixin, animpack_ManagedAnimationLayerInterface.Mixin));\n\nObject.defineProperties(GestureFeature_GestureFeature, {\n DEFAULT_LAYER_OPTIONS: {\n value: GestureFeature_objectSpread(GestureFeature_objectSpread({}, GestureFeature_GestureFeature.DEFAULT_LAYER_OPTIONS), {}, {\n autoDisable: true\n }),\n writable: false\n },\n EVENT_DEPENDENCIES: {\n value: GestureFeature_objectSpread(GestureFeature_objectSpread({}, GestureFeature_GestureFeature.EVENT_DEPENDENCIES), {}, {\n AnimationFeature: GestureFeature_objectSpread(GestureFeature_objectSpread({}, GestureFeature_GestureFeature.EVENT_DEPENDENCIES.AnimationFeature), {}, {\n playNextAnimation: \'_onNext\',\n stopAnimation: \'_onStop\',\n interruptAnimation: \'_onStop\'\n })\n })\n }\n});\n/* harmony default export */ var core_GestureFeature = (GestureFeature_GestureFeature);\n\n// CONCATENATED MODULE: ./src/core/animpack/AnimationUtils.js\nfunction AnimationUtils_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction AnimationUtils_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction AnimationUtils_createClass(Constructor, protoProps, staticProps) { if (protoProps) AnimationUtils_defineProperties(Constructor.prototype, protoProps); if (staticProps) AnimationUtils_defineProperties(Constructor, staticProps); return Constructor; }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n\n/**\r\n * A collection of useful animation functions.\r\n *\r\n * @hideconstructor\r\n */\n\nvar AnimationUtils_AnimationUtils = /*#__PURE__*/function () {\n function AnimationUtils() {\n AnimationUtils_classCallCheck(this, AnimationUtils);\n }\n\n AnimationUtils_createClass(AnimationUtils, null, [{\n key: "lerp",\n value: function lerp(from, to, factor) {\n console.warn("AnimationUtils.lerp is being deprecated. Use MathUtils.lerp instead.");\n return core_MathUtils.lerp(from, to, factor);\n }\n /**\r\n * Clamp a number between 2 values.\r\n *\r\n * @param {number} value - Value to clamp.\r\n * @param {number} [min=0] - Minumum value.\r\n * @param {number} [max=1] - Maximum value.\r\n *\r\n * @returns {number}\r\n */\n\n }, {\n key: "clamp",\n value: function clamp(value) {\n var min = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var max = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;\n console.warn("AnimationUtils.clamp is being deprecated. Use MathUtils.clamp instead.");\n return core_MathUtils.clamp(value, min, max);\n }\n /**\r\n * Return a deferred promise that can be used to update the value of a numeric\r\n * property of this object over time. Pass delta time in milliseconds to the\r\n * deferred promise\'s execute method in an update loop to animate the property\r\n * towards the target value.\r\n *\r\n * @param {Object} propertyOwner - Object that contains the property to animation.\r\n * @param {string} propertyName - Name of the property to animate.\r\n * @param {number} targetValue - Target value to reach.\r\n * @param {Object=} options - Optional options object\r\n * @param {number} [options.seconds=0] - Number of seconds it will take to reach\r\n * the target value.\r\n * @param {Function} [options.easingFn=Linear.InOut] - Easing function to use for animation.\r\n * @param {Function} [options.onFinish] - Callback to execute once the animation completes.\r\n * The target value is passed as a parameter.\r\n * @param {Function=} options.onProgress - Callback to execute each time the animation\r\n * property is updated during the animation. The property\'s value at the time of\r\n * the update is passed as a parameter.\r\n * @param {Function=} options.onCancel - Callback to execute if the user cancels the\r\n * animation before completion. The animation property\'s value at the time of\r\n * cancel is passed as a parameter.\r\n * @param {Function=} options.onError - Callback to execute if the animation stops\r\n * because an error is encountered. The error message is passed as a parameter.\r\n *\r\n * @returns {Deferred} Resolves with the property\'s value once it reaches the\r\n * target value.\r\n */\n\n }, {\n key: "interpolateProperty",\n value: function interpolateProperty(propertyOwner, propertyName, targetValue) {\n var _ref = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {},\n _ref$seconds = _ref.seconds,\n seconds = _ref$seconds === void 0 ? 0 : _ref$seconds,\n easingFn = _ref.easingFn,\n _onFinish = _ref.onFinish,\n _onProgress = _ref.onProgress,\n _onCancel = _ref.onCancel,\n onError = _ref.onError;\n\n // Make sure property is an object\n if (!(propertyOwner instanceof Object)) {\n var e = new Error("Cannot interpolate property ".concat(propertyName, ". Property owner must be an object."));\n\n if (typeof onError === \'function\') {\n onError(e);\n }\n\n return core_Deferred.reject(e);\n } // Make sure property is numeric\n\n\n if (Number.isNaN(Number(propertyOwner[propertyName]))) {\n var _e = new Error("Cannot interpolate property ".concat(propertyName, ". Property must be numeric."));\n\n if (typeof onError === \'function\') {\n onError(_e);\n }\n\n return core_Deferred.reject(_e);\n } // Make sure the target value is numeric\n\n\n if (Number.isNaN(Number(targetValue))) {\n var _e2 = new Error("Cannot interpolate property ".concat(propertyName, " to value ").concat(targetValue, ". Target value must be numeric."));\n\n if (typeof onError === \'function\') {\n onError(_e2);\n }\n\n return core_Deferred.reject(_e2);\n } // Resolve immediately if the target has already been reached\n\n\n var startValue = propertyOwner[propertyName];\n\n if (startValue === targetValue) {\n if (typeof _onFinish === \'function\') {\n _onFinish(targetValue);\n }\n\n return core_Deferred.resolve(targetValue);\n } // Default to linear interpolation\n\n\n if (typeof easingFn !== \'function\') {\n if (easingFn !== undefined) {\n console.warn("Invalid property interpolation easingFn. Defaulting to linear interpolation.");\n }\n\n easingFn = Linear.InOut;\n }\n\n var interpolator = core_Utils.wait(seconds, {\n onFinish: function onFinish() {\n propertyOwner[propertyName] = targetValue;\n\n if (typeof _onFinish === \'function\') {\n _onFinish(targetValue);\n }\n },\n onCancel: function onCancel() {\n if (typeof _onCancel === \'function\') {\n _onCancel(propertyOwner[propertyName]);\n }\n },\n onProgress: function onProgress(progress) {\n if (propertyOwner[propertyName] !== targetValue) {\n // Calculate the lerp factor\n var easeFactor = easingFn(progress);\n\n if (typeof easeFactor !== \'number\') {\n var _e3 = new Error("Invalid property interpolation easingFn. EasingFn must return a number.");\n\n interpolator.reject(_e3);\n return;\n } // Update the value\n\n\n propertyOwner[propertyName] = core_MathUtils.lerp(startValue, targetValue, easeFactor);\n } // Signal progress\n\n\n if (typeof _onProgress === \'function\') {\n _onProgress(propertyOwner[propertyName]);\n } // Signal completion once time is up\n\n\n if (progress === 1) {\n propertyOwner[propertyName] = targetValue;\n interpolator.resolve(targetValue);\n }\n },\n onError: onError\n });\n return interpolator;\n }\n }]);\n\n return AnimationUtils;\n}();\n\n/* harmony default export */ var animpack_AnimationUtils = (AnimationUtils_AnimationUtils);\n// CONCATENATED MODULE: ./src/core/animpack/state/AbstractState.js\nfunction AbstractState_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction AbstractState_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction AbstractState_createClass(Constructor, protoProps, staticProps) { if (protoProps) AbstractState_defineProperties(Constructor.prototype, protoProps); if (staticProps) AbstractState_defineProperties(Constructor, staticProps); return Constructor; }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n/**\r\n * Base class for a state in our animation system.\r\n *\r\n * @abstract\r\n */\n\nvar AbstractState_AbstractState = /*#__PURE__*/function () {\n /**\r\n * @constructor\r\n *\r\n * @param {Object=} options - Options for the animation state.\r\n * @param {string=} options.name - Name for the animation state. Names must be\r\n * unique for the container the state is applied to and should be validated at\r\n * the container level. If no name is given it will default to the constructor\r\n * name.\r\n * @param {weight} [options.weight=0] - The 0-1 amount of influence the state will have.\r\n */\n function AbstractState() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n AbstractState_classCallCheck(this, AbstractState);\n\n this.name = options.name !== undefined ? options.name : this.constructor.name;\n this._weight = options.weight !== undefined ? core_MathUtils.clamp(options.weight, 0, 1) : 0;\n this._internalWeight = this._weight;\n this._paused = false;\n this._promises = {\n finish: core_Deferred.resolve(),\n weight: core_Deferred.resolve(),\n play: core_Deferred.resolve()\n };\n this._playCallbacks = {\n onFinish: undefined,\n onError: undefined,\n onCancel: undefined\n };\n }\n /**\r\n * Gets whether or not the state is currently paused.\r\n *\r\n * @type {number}\r\n */\n\n\n AbstractState_createClass(AbstractState, [{\n key: "paused",\n get: function get() {\n return this._paused;\n }\n /**\r\n * Gets and sets the user defined weight.\r\n *\r\n * @type {number}\r\n */\n\n }, {\n key: "weight",\n get: function get() {\n return this._weight;\n },\n set: function set(weight) {\n this._weight = core_MathUtils.clamp(weight, 0, 1);\n }\n /**\r\n * Gets whether or not the weight is currently being animated.\r\n *\r\n * @readonly\r\n * @type {boolean}\r\n */\n\n }, {\n key: "weightPending",\n get: function get() {\n return this._promises.weight && this._promises.weight.pending;\n }\n /**\r\n * Updates the user defined weight over time.\r\n *\r\n * @param {number} weight - The target weight value.\r\n * @param {number} [seconds=0] - The amount of time it will take to reach the\r\n * target weight.\r\n * @param {Function=} easingFn - The easing function to use for interpolation.\r\n *\r\n * @returns {Deferred}\r\n */\n\n }, {\n key: "setWeight",\n value: function setWeight(weight) {\n var seconds = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var easingFn = arguments.length > 2 ? arguments[2] : undefined;\n\n this._promises.weight.cancel();\n\n weight = core_MathUtils.clamp(weight);\n this._promises.weight = animpack_AnimationUtils.interpolateProperty(this, \'weight\', weight, {\n seconds: seconds,\n easingFn: easingFn\n });\n return this._promises.weight;\n }\n /**\r\n * Gets the internal weight.\r\n *\r\n * @readonly\r\n * @type {number}\r\n */\n\n }, {\n key: "internalWeight",\n get: function get() {\n return this._internalWeight;\n }\n /**\r\n * Multiplies the user weight by a factor to determine the internal weight.\r\n *\r\n * @param {number} factor - 0-1 multiplier to apply to the user weight.\r\n */\n\n }, {\n key: "updateInternalWeight",\n value: function updateInternalWeight(factor) {\n this._internalWeight = this._weight * factor;\n }\n /**\r\n * Update any values that need to be evaluated every frame.\r\n *\r\n * @param {number} deltaTime - Time in milliseconds since the last update.\r\n */\n\n }, {\n key: "update",\n value: function update(deltaTime) {\n if (!this._paused) {\n Object.values(this._promises).forEach(function (promise) {\n promise.execute(deltaTime);\n });\n }\n }\n /**\r\n * Start playback of the state from the beginning.\r\n *\r\n * @param {Function=} onFinish - Function to execute when the state finishes.\r\n * @param {Function=} onError - Function to execute if the state encounters\r\n * an error during playback.\r\n * @param {Function=} onCancel - Function to execute if playback is canceled.\r\n *\r\n * @returns {Deferred}\r\n */\n\n }, {\n key: "play",\n value: function play(onFinish, onError, onCancel) {\n this._paused = false;\n this._playCallbacks.onFinish = onFinish;\n this._playCallbacks.onError = onError;\n this._playCallbacks.onCancel = onCancel;\n this._promises.play = new core_Deferred(undefined, onFinish, onError, onCancel);\n this._promises.finish = core_Deferred.all([this._promises.play, this._promises.weight]);\n return this._promises.finish;\n }\n /**\r\n * Pause playback of the state. This prevents pending promises from being executed.\r\n *\r\n * @returns {boolean}\r\n */\n\n }, {\n key: "pause",\n value: function pause() {\n this._paused = true;\n return true;\n }\n /**\r\n * Resume playback of the state.\r\n *\r\n * @param {Function=} onFinish - Function to execute when the state finishes.\r\n * @param {Function=} onError - Function to execute if the state encounters\r\n * an error during playback.\r\n * @param {Function=} onCancel - Function to execute if playback is canceled.\r\n *\r\n * @returns {Deferred}\r\n */\n\n }, {\n key: "resume",\n value: function resume(onFinish, onError, onCancel) {\n this._paused = false;\n\n if (!this._promises.play.pending) {\n this._playCallbacks.onFinish = onFinish || this._playCallbacks.onFinish;\n this._playCallbacks.onError = onError || this._playCallbacks.onError;\n this._playCallbacks.onCancel = onCancel || this._playCallbacks.onCancel;\n this._promises.play = new core_Deferred(undefined, this._playCallbacks.onFinish, this._playCallbacks.onError, this._playCallbacks.onCancel);\n this._promises.finish = core_Deferred.all([this._promises.play, this._promises.weight]);\n }\n\n return this._promises.finish;\n }\n /**\r\n * Cancel playback of the state and cancel any pending promises.\r\n *\r\n * @returns {boolean}\r\n */\n\n }, {\n key: "cancel",\n value: function cancel() {\n this._paused = true;\n Object.values(this._promises).forEach(function (promise) {\n promise.cancel();\n });\n return true;\n }\n /**\r\n * Stop playback of the state and resolve any pending promises.\r\n *\r\n * @returns {boolean}\r\n */\n\n }, {\n key: "stop",\n value: function stop() {\n this._paused = true;\n Object.values(this._promises).forEach(function (promise) {\n promise.resolve();\n });\n return true;\n }\n /**\r\n * Cancel any pending promises and remove reference to them.\r\n */\n\n }, {\n key: "discard",\n value: function discard() {\n this.cancel();\n delete this._promises;\n }\n /**\r\n * Force the internal weight to 0. Should be called before switching or transitioning\r\n * to a new state.\r\n */\n\n }, {\n key: "deactivate",\n value: function deactivate() {\n this.updateInternalWeight(0);\n }\n }]);\n\n return AbstractState;\n}();\n\n/* harmony default export */ var state_AbstractState = (AbstractState_AbstractState);\n// CONCATENATED MODULE: ./src/core/animpack/state/TransitionState.js\nfunction TransitionState_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { TransitionState_typeof = function _typeof(obj) { return typeof obj; }; } else { TransitionState_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return TransitionState_typeof(obj); }\n\nfunction TransitionState_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction TransitionState_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction TransitionState_createClass(Constructor, protoProps, staticProps) { if (protoProps) TransitionState_defineProperties(Constructor.prototype, protoProps); if (staticProps) TransitionState_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction TransitionState_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { TransitionState_get = Reflect.get; } else { TransitionState_get = function _get(target, property, receiver) { var base = TransitionState_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return TransitionState_get(target, property, receiver || target); }\n\nfunction TransitionState_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = TransitionState_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction TransitionState_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) TransitionState_setPrototypeOf(subClass, superClass); }\n\nfunction TransitionState_setPrototypeOf(o, p) { TransitionState_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return TransitionState_setPrototypeOf(o, p); }\n\nfunction TransitionState_createSuper(Derived) { var hasNativeReflectConstruct = TransitionState_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = TransitionState_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = TransitionState_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return TransitionState_possibleConstructorReturn(this, result); }; }\n\nfunction TransitionState_possibleConstructorReturn(self, call) { if (call && (TransitionState_typeof(call) === "object" || typeof call === "function")) { return call; } return TransitionState_assertThisInitialized(self); }\n\nfunction TransitionState_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction TransitionState_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction TransitionState_getPrototypeOf(o) { TransitionState_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return TransitionState_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n/**\r\n * Class for smooth transitioning between states on an animation layer.\r\n *\r\n * @extends AbstractState\r\n */\n\nvar TransitionState_TransitionState = /*#__PURE__*/function (_AbstractState) {\n TransitionState_inherits(TransitionState, _AbstractState);\n\n var _super = TransitionState_createSuper(TransitionState);\n\n function TransitionState() {\n var _this;\n\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n TransitionState_classCallCheck(this, TransitionState);\n\n _this = _super.call(this, options);\n _this._to = null;\n _this._from = [];\n _this._weightPromise = core_Deferred.resolve();\n return _this;\n }\n\n TransitionState_createClass(TransitionState, [{\n key: "internalWeight",\n get: function get() {\n // Find the combined weight of all sub-states\n var totalWeight = 0;\n\n if (this._to) {\n totalWeight += this._to.weight;\n }\n\n this._from.forEach(function (state) {\n totalWeight += state.weight;\n });\n\n return totalWeight * this._internalWeight;\n }\n }, {\n key: "updateInternalWeight",\n value: function updateInternalWeight(factor) {\n var _this2 = this;\n\n TransitionState_get(TransitionState_getPrototypeOf(TransitionState.prototype), "updateInternalWeight", this).call(this, factor);\n\n this._from.forEach(function (state) {\n state.updateInternalWeight(_this2._internalWeight);\n });\n\n if (this._to) {\n this._to.updateInternalWeight(this._internalWeight);\n }\n }\n /**\r\n * Update sub-states the transition is controlling and start new weight\r\n * animations on each one. This should be called each time the current state of\r\n * an animation layer gets updated to a new value and a transition time greater\r\n * that zero is specified.\r\n *\r\n * @param {Array.} [currentStates=[]] - States whose weight values\r\n * will be animated to 0.\r\n * @param {AbstractState=} targetState - State whose weight will be animated\r\n * to 1.\r\n * @param {number} transitionTime - Amount of time it will in seconds take for\r\n * weight animations to complete.\r\n * @param {Function=} easingFn - Easing function to use for weight animations.\r\n * Default is Easing.Linear.InOut.\r\n * @param {Function=} onComplete - Function to execute once all weight animations\r\n * complete.\r\n */\n\n }, {\n key: "configure",\n value: function configure() {\n var currentStates = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n var targetState = arguments.length > 1 ? arguments[1] : undefined;\n var transitionTime = arguments.length > 2 ? arguments[2] : undefined;\n var easingFn = arguments.length > 3 ? arguments[3] : undefined;\n var onComplete = arguments.length > 4 ? arguments[4] : undefined;\n\n // Deactivate any states that aren\'t in the new configuration\n if (this._to === targetState || currentStates.includes(this._to)) {\n this._to = null;\n }\n\n this._from = this._from.filter(function (state) {\n return state !== targetState && !currentStates.includes(state);\n });\n this.deactivate();\n this._from = currentStates;\n this._to = targetState;\n this.reset(transitionTime, easingFn, onComplete);\n }\n /**\r\n * Start new weight animations state the transition controls. This should be called\r\n * if an animation is played with a transition time greater than zero and a transtion\r\n * to that animation was already in progress.\r\n *\r\n * @param {number} transitionTime - Amount of time it will in seconds take for\r\n * weight animations to complete.\r\n * @param {Function=} easingFn - Easing function to use for weight animations.\r\n * Default is Easing.Linear.InOut.\r\n * @param {Function=} onComplete - Function to execute once all weight animations\r\n * complete.\r\n */\n\n }, {\n key: "reset",\n value: function reset(transitionTime, easingFn, onComplete) {\n var _this3 = this;\n\n // Stop any pending promises\n this._weightPromise.cancel(); // Start tweening weight to 0 for the current states\n\n\n var weightPromises = this._from.map(function (state) {\n return state.setWeight(0, transitionTime, easingFn);\n }); // Start tweening weight to 1 for the target state\n\n\n if (this._to) {\n weightPromises.push(this._to.setWeight(1, transitionTime, easingFn));\n this.name = this._to.name;\n } else {\n this.name = null;\n }\n\n this._weightPromise = core_Deferred.all(weightPromises, function () {\n _this3._from.forEach(function (state) {\n state.cancel();\n state.deactivate();\n });\n\n if (typeof onComplete === \'function\') {\n onComplete();\n }\n });\n }\n }, {\n key: "play",\n value: function play(onFinish, onError, onCancel, onNext) {\n this._paused = false;\n this._playCallbacks.onFinish = onFinish;\n this._playCallbacks.onError = onError;\n this._playCallbacks.onCancel = onCancel;\n var promises = [this._weightPromise];\n\n this._from.forEach(function (state) {\n state.resume();\n });\n\n if (this._to) {\n this._promises.play = this._to.play(undefined, undefined, undefined, onNext);\n promises.push(this._promises.play);\n }\n\n this._promises.finish = core_Deferred.all(promises, onFinish, onError, onCancel);\n return this._promises.finish;\n }\n }, {\n key: "pause",\n value: function pause() {\n this._from.forEach(function (state) {\n state.pause();\n });\n\n if (this._to) {\n this._to.pause();\n }\n\n return TransitionState_get(TransitionState_getPrototypeOf(TransitionState.prototype), "pause", this).call(this);\n }\n }, {\n key: "resume",\n value: function resume(onFinish, onError, onCancel, onNext) {\n this._paused = false;\n\n if (!this._promises.play.pending) {\n this._playCallbacks.onFinish = onFinish || this._playCallbacks.onFinish;\n this._playCallbacks.onError = onError || this._playCallbacks.onError;\n this._playCallbacks.onCancel = onCancel || this._playCallbacks.onCancel;\n }\n\n var promises = [this._weightPromise];\n\n this._from.forEach(function (state) {\n state.resume();\n });\n\n if (this._to) {\n this._promises.play = this._to.resume(undefined, undefined, undefined, onNext);\n promises.push(this._promises.play);\n }\n\n this._promises.finish = core_Deferred.all(promises, this._playCallbacks.onFinish, this._playCallbacks.onError, this._playCallbacks.onCancel);\n return this._promises.finish;\n }\n }, {\n key: "cancel",\n value: function cancel() {\n this._from.forEach(function (state) {\n state.pause();\n });\n\n if (this._to) {\n this._to.cancel();\n }\n\n this._weightPromise.cancel();\n\n return TransitionState_get(TransitionState_getPrototypeOf(TransitionState.prototype), "cancel", this).call(this);\n }\n }, {\n key: "stop",\n value: function stop() {\n this._from.forEach(function (state) {\n state.pause();\n });\n\n if (this._to) {\n this._to.stop();\n }\n\n return TransitionState_get(TransitionState_getPrototypeOf(TransitionState.prototype), "stop", this).call(this);\n }\n }, {\n key: "update",\n value: function update(deltaTime) {\n TransitionState_get(TransitionState_getPrototypeOf(TransitionState.prototype), "update", this).call(this, deltaTime);\n\n this._from.forEach(function (state) {\n state.update(deltaTime);\n });\n\n if (this._to) {\n this._to.update(deltaTime);\n }\n }\n }, {\n key: "discard",\n value: function discard() {\n TransitionState_get(TransitionState_getPrototypeOf(TransitionState.prototype), "discard", this).call(this);\n\n this._weightPromise.cancel();\n\n delete this._weightPromise;\n this._to = null;\n this._from.length = 0;\n }\n }, {\n key: "deactivate",\n value: function deactivate() {\n if (this._to) {\n this._to.deactivate();\n }\n\n this._from.forEach(function (state) {\n state.deactivate();\n });\n }\n }]);\n\n return TransitionState;\n}(state_AbstractState);\n\n/* harmony default export */ var state_TransitionState = (TransitionState_TransitionState);\n// CONCATENATED MODULE: ./src/core/animpack/AnimationPlayerInterface.js\nfunction AnimationPlayerInterface_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { AnimationPlayerInterface_typeof = function _typeof(obj) { return typeof obj; }; } else { AnimationPlayerInterface_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return AnimationPlayerInterface_typeof(obj); }\n\nfunction AnimationPlayerInterface_toConsumableArray(arr) { return AnimationPlayerInterface_arrayWithoutHoles(arr) || AnimationPlayerInterface_iterableToArray(arr) || AnimationPlayerInterface_unsupportedIterableToArray(arr) || AnimationPlayerInterface_nonIterableSpread(); }\n\nfunction AnimationPlayerInterface_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."); }\n\nfunction AnimationPlayerInterface_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return AnimationPlayerInterface_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return AnimationPlayerInterface_arrayLikeToArray(o, minLen); }\n\nfunction AnimationPlayerInterface_iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction AnimationPlayerInterface_arrayWithoutHoles(arr) { if (Array.isArray(arr)) return AnimationPlayerInterface_arrayLikeToArray(arr); }\n\nfunction AnimationPlayerInterface_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction AnimationPlayerInterface_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { AnimationPlayerInterface_get = Reflect.get; } else { AnimationPlayerInterface_get = function _get(target, property, receiver) { var base = AnimationPlayerInterface_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return AnimationPlayerInterface_get(target, property, receiver || target); }\n\nfunction AnimationPlayerInterface_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = AnimationPlayerInterface_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction AnimationPlayerInterface_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) AnimationPlayerInterface_setPrototypeOf(subClass, superClass); }\n\nfunction AnimationPlayerInterface_setPrototypeOf(o, p) { AnimationPlayerInterface_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return AnimationPlayerInterface_setPrototypeOf(o, p); }\n\nfunction AnimationPlayerInterface_createSuper(Derived) { var hasNativeReflectConstruct = AnimationPlayerInterface_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = AnimationPlayerInterface_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = AnimationPlayerInterface_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return AnimationPlayerInterface_possibleConstructorReturn(this, result); }; }\n\nfunction AnimationPlayerInterface_possibleConstructorReturn(self, call) { if (call && (AnimationPlayerInterface_typeof(call) === "object" || typeof call === "function")) { return call; } return AnimationPlayerInterface_assertThisInitialized(self); }\n\nfunction AnimationPlayerInterface_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction AnimationPlayerInterface_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction AnimationPlayerInterface_getPrototypeOf(o) { AnimationPlayerInterface_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return AnimationPlayerInterface_getPrototypeOf(o); }\n\nfunction AnimationPlayerInterface_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction AnimationPlayerInterface_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction AnimationPlayerInterface_createClass(Constructor, protoProps, staticProps) { if (protoProps) AnimationPlayerInterface_defineProperties(Constructor.prototype, protoProps); if (staticProps) AnimationPlayerInterface_defineProperties(Constructor, staticProps); return Constructor; }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/* eslint-disable max-classes-per-file */\n\n/* eslint-disable no-unused-vars */\n\n/* eslint-disable no-empty-function */\n\n/* eslint-disable getter-return */\n\n/* eslint-disable no-useless-constructor */\n\n\n/**\r\n * Class factory interface for controlling playback of a collection of animations.\r\n * One animation can be played at any given time, crossfading between animations\r\n * will result in playing a {@link TransitionState}.\r\n *\r\n * @interface\r\n */\n\nvar AnimationPlayerInterface_AnimationPlayerInterface = /*#__PURE__*/function () {\n function AnimationPlayerInterface() {\n AnimationPlayerInterface_classCallCheck(this, AnimationPlayerInterface);\n }\n\n AnimationPlayerInterface_createClass(AnimationPlayerInterface, [{\n key: "paused",\n get:\n /**\r\n * Gets whether or not the player is updating states.\r\n *\r\n * @readonly\r\n * @type {boolean}\r\n */\n function get() {\n return this._paused;\n }\n /**\r\n * Gets and sets the default number of seconds it takes to transition to a new\r\n * animation.\r\n *\r\n * @type {number}\r\n */\n\n }, {\n key: "transitionTime",\n get: function get() {},\n set: function set(seconds) {}\n /**\r\n * Gets and sets the default easing function to use when transitioning and\r\n * setting weights.\r\n *\r\n * @type {Function}\r\n */\n\n }, {\n key: "easingFn",\n get: function get() {},\n set: function set(fn) {}\n /**\r\n * Gets the state the layer is currently in control of.\r\n *\r\n * @readonly\r\n * @type {AbstractState}\r\n */\n\n }, {\n key: "currentState",\n get: function get() {}\n /**\r\n * Gets the name of the state the layer is currently in control of.\r\n *\r\n * @readonly\r\n * @type {string}\r\n */\n\n }, {\n key: "currentAnimation",\n get: function get() {}\n /**\r\n * Gets whether or not the layer is currently transitioning to a new animation.\r\n *\r\n * @readonly\r\n * @type {boolean}\r\n */\n\n }, {\n key: "isTransitioning",\n get: function get() {}\n /**\r\n * Update the layer\'s current state to a new value. If transitionTime is defined\r\n * and greater than zero, perform a smooth blend between any states that currently\r\n * have non-zero weight values and the new state.\r\n *\r\n * @private\r\n *\r\n * @param {(string|null)} name - Name of the state to transition to.\r\n * @param {string} playMethod - Name of the operation being prepared for, to be\r\n * used in error messaging.\r\n * @param {number=} transitionTime - Amount of time in seconds it will take to\r\n * switch to the new state.\r\n * @param {Function=} easingFn - Easing function to use when transitioning to a\r\n * new state over time.\r\n * @param {Function=} onError - Function to execute if an error is encountered.\r\n */\n\n }, {\n key: "_prepareCurrentState",\n value: function _prepareCurrentState(name, playMethod, transitionTime, easingFn, onError) {}\n /**\r\n * Start playback an animation from the beginning.\r\n *\r\n * @param {string} name - Name of the animation to play.\r\n * @param {number=} transitionTime - Amount of time it will take before the\r\n * new state has full influence for the layer.\r\n * @param {Function=} easingFn - Easing function to use for blending if transitionTime\r\n * is greater than zero.\r\n * @param {Function=} onFinish - Function to execute when the animation finishes.\r\n * @param {Function=} onError - Function to execute if the animation encounters\r\n * an error during playback.\r\n * @param {Function=} onCancel - Function to execute if playback is canceled.\r\n * @param {Function=} onNext - Function to execute if an animation queue is\r\n * played and it advances to the next animation.\r\n *\r\n * @returns {Deferred}\r\n */\n\n }, {\n key: "playAnimation",\n value: function playAnimation(name, transitionTime, easingFn, onFinish, onError, onCancel, onNext) {}\n /**\r\n * Cancel playback of the current animation.\r\n *\r\n * @returns {boolean}\r\n */\n\n }, {\n key: "cancelAnimation",\n value: function cancelAnimation() {}\n /**\r\n * Pause playback of the current animation.\r\n *\r\n * @returns {boolean}\r\n */\n\n }, {\n key: "pauseAnimation",\n value: function pauseAnimation() {}\n /**\r\n * Resume playback of an animation.\r\n *\r\n * @param {string=} name - Name of the animation to resume playback for. Default\r\n * is the layer\'s current animation name.\r\n * @param {number=} transitionTime - Amount of time it will take before the\r\n * new state has full influence for the layer.\r\n * @param {Function=} onFinish - Function to execute when the state finishes.\r\n * @param {Function=} onError - Function to execute if the state encounters\r\n * an error during playback.\r\n * @param {Function=} onCancel - Function to execute if playback is canceled.\r\n * @param {Function=} onNext - Function to execute if an animation queue is\r\n * played and it advances to the next animation.\r\n *\r\n * @returns {Deferred}\r\n */\n\n }, {\n key: "resumeAnimation",\n value: function resumeAnimation(name, transitionTime, easingFn, onFinish, onError, onCancel, onNext) {}\n /**\r\n * Stop playback of the current animation.\r\n *\r\n * @returns {boolean}\r\n */\n\n }, {\n key: "stopAnimation",\n value: function stopAnimation() {}\n /**\r\n * Update the current animation.\r\n *\r\n * @param {number} deltaTime - Time in milliseconds since the last update.\r\n */\n\n }, {\n key: "update",\n value: function update(deltaTime) {}\n /**\r\n * Discard the transition state.\r\n */\n\n }, {\n key: "discard",\n value: function discard() {}\n /**\r\n * Creates a class that implements {@link AnimationPlayerInterface} and extends\r\n * a specified base class.\r\n *\r\n * @param {Class} [BaseClass = class{}] - The class to extend.\r\n *\r\n * @return {Class} A class that extends `BaseClass` and implements {@link AnimationPlayerInterface}.\r\n */\n\n }], [{\n key: "Mixin",\n value: function Mixin() {\n var BaseClass = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : /*#__PURE__*/function () {\n function _class() {\n AnimationPlayerInterface_classCallCheck(this, _class);\n }\n\n return _class;\n }();\n\n var AnimationPlayerMixin = /*#__PURE__*/function (_BaseClass) {\n AnimationPlayerInterface_inherits(AnimationPlayerMixin, _BaseClass);\n\n var _super = AnimationPlayerInterface_createSuper(AnimationPlayerMixin);\n\n function AnimationPlayerMixin() {\n var _this;\n\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n AnimationPlayerInterface_classCallCheck(this, AnimationPlayerMixin);\n\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\n _this = _super.call.apply(_super, [this, options].concat(args));\n _this._transitionState = new state_TransitionState();\n _this._states = _this._states !== undefined ? _this._states : new Map();\n _this._currentState = null;\n _this._paused = false;\n _this._transitionTime = Number(options.transitionTime) >= 0 ? Number(options.transitionTime) : 0;\n _this._easingFn = typeof options.easingFn === \'function\' ? options.easingFn : undefined;\n return _this;\n }\n\n AnimationPlayerInterface_createClass(AnimationPlayerMixin, [{\n key: "paused",\n get: function get() {\n return this._paused;\n }\n }, {\n key: "transitionTime",\n get: function get() {\n return this._transitionTime;\n },\n set: function set(seconds) {\n seconds = Number(seconds);\n\n if (!(seconds >= 0)) {\n throw new Error("Cannot set transition time for ".concat(this.constructor.name, " to ").concat(seconds, ". Seconds must be a numeric value greather than or equal to zero."));\n }\n\n this._transitionTime = seconds;\n }\n }, {\n key: "easingFn",\n get: function get() {\n return this._easingFn;\n },\n set: function set(fn) {\n this._easingFn = fn;\n }\n }, {\n key: "currentState",\n get: function get() {\n return this._currentState;\n }\n }, {\n key: "currentAnimation",\n get: function get() {\n if (this._currentState) {\n return this._currentState.name;\n }\n\n return null;\n }\n }, {\n key: "isTransitioning",\n get: function get() {\n return this._currentState === this._transitionState;\n }\n }, {\n key: "_prepareCurrentState",\n value: function _prepareCurrentState(name, playMethod, transitionTime, easingFn, onError) {\n var _this2 = this;\n\n if (name !== null && !this._states.has(name)) {\n var e = new Error("Cannot ".concat(playMethod, " animation ").concat(name, ". No animation exists with this name."));\n\n if (typeof onError === \'function\') {\n onError(e);\n }\n\n throw e;\n }\n\n var targetState = name !== null ? this._states.get(name) : null; // Make sure the new state isn\'t already playing\n\n if (this.currentAnimation !== name) {\n // Switch to the new state immediately\n if (transitionTime <= 0) {\n // Cancel the current state and set its weight to 0\n if (this._currentState) {\n this._currentState.cancel();\n\n this._currentState.weight = 0;\n\n this._currentState.deactivate();\n }\n\n this._currentState = targetState;\n } // Blend to the new state over time\n else {\n // Make sure to transition out of any states with non-zero weight\n var currentStates = AnimationPlayerInterface_toConsumableArray(this._states.values()).filter(function (s) {\n return s !== targetState && (s.weight || s.weightPending);\n }); // Update the transition state with new inputs\n\n\n this._transitionState.configure(currentStates, targetState, transitionTime, easingFn, function () {\n _this2._currentState = targetState;\n _this2._transitionState.weight = 0;\n });\n\n this._currentState = this._transitionState;\n }\n } else if (playMethod === \'play\') {\n this._currentState.cancel();\n\n if (this._currentState === this._transitionState) {\n this._transitionState.reset(transitionTime, easingFn, function () {\n _this2._currentState = targetState;\n _this2._transitionState.weight = 0;\n });\n }\n } // Update weight for the new current state so it has full influence for the player\n\n\n this._currentState.weight = 1;\n\n this._currentState.updateInternalWeight(this._internalWeight);\n }\n }, {\n key: "playAnimation",\n value: function playAnimation(name, transitionTime, easingFn, onFinish, onError, onCancel, onNext) {\n var error;\n var reject = false;\n\n try {\n this._prepareCurrentState(name, \'play\', transitionTime !== undefined ? transitionTime : this._transitionTime, easingFn !== undefined ? easingFn : this._easingFn, onError);\n } catch (e) {\n error = e;\n reject = true;\n }\n\n if (reject) {\n return core_Deferred.reject(error);\n }\n\n return this._currentState.play(onFinish, onError, onCancel, onNext);\n }\n }, {\n key: "pauseAnimation",\n value: function pauseAnimation() {\n if (this._currentState) {\n return this._currentState.pause();\n } else {\n return false;\n }\n }\n }, {\n key: "resumeAnimation",\n value: function resumeAnimation(name, transitionTime, easingFn, onFinish, onError, onCancel, onNext) {\n if (name === undefined && this._currentState) {\n name = this._currentState.name;\n }\n\n var error;\n var reject = false;\n\n try {\n this._prepareCurrentState(name, \'resume\', transitionTime !== undefined ? transitionTime : this._transitionTime, easingFn !== undefined ? easingFn : this._easingFn, onError);\n } catch (e) {\n error = e;\n reject = true;\n }\n\n if (reject) {\n return core_Deferred.reject(error);\n }\n\n return this._currentState.resume(onFinish, onError, onCancel, onNext);\n }\n }, {\n key: "cancelAnimation",\n value: function cancelAnimation() {\n if (this._currentState) {\n return this._currentState.cancel();\n } else {\n return false;\n }\n }\n }, {\n key: "stopAnimation",\n value: function stopAnimation() {\n if (this._currentState) {\n return this._currentState.stop();\n } else {\n return false;\n }\n }\n }, {\n key: "update",\n value: function update(deltaTime) {\n if (AnimationPlayerInterface_get(AnimationPlayerInterface_getPrototypeOf(AnimationPlayerMixin.prototype), "update", this)) {\n AnimationPlayerInterface_get(AnimationPlayerInterface_getPrototypeOf(AnimationPlayerMixin.prototype), "update", this).call(this, deltaTime);\n }\n\n if (this._currentState) {\n this._currentState.update(deltaTime);\n }\n }\n }, {\n key: "discard",\n value: function discard() {\n if (AnimationPlayerInterface_get(AnimationPlayerInterface_getPrototypeOf(AnimationPlayerMixin.prototype), "discard", this)) {\n AnimationPlayerInterface_get(AnimationPlayerInterface_getPrototypeOf(AnimationPlayerMixin.prototype), "discard", this).call(this);\n }\n\n this._transitionState.discard();\n\n delete this._transitionState;\n }\n }]);\n\n return AnimationPlayerMixin;\n }(BaseClass);\n\n return AnimationPlayerMixin;\n }\n }]);\n\n return AnimationPlayerInterface;\n}();\n\n/* harmony default export */ var animpack_AnimationPlayerInterface = (AnimationPlayerInterface_AnimationPlayerInterface);\n// CONCATENATED MODULE: ./src/core/animpack/state/StateContainerInterface.js\nfunction StateContainerInterface_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { StateContainerInterface_typeof = function _typeof(obj) { return typeof obj; }; } else { StateContainerInterface_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return StateContainerInterface_typeof(obj); }\n\nfunction StateContainerInterface_toConsumableArray(arr) { return StateContainerInterface_arrayWithoutHoles(arr) || StateContainerInterface_iterableToArray(arr) || StateContainerInterface_unsupportedIterableToArray(arr) || StateContainerInterface_nonIterableSpread(); }\n\nfunction StateContainerInterface_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."); }\n\nfunction StateContainerInterface_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return StateContainerInterface_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return StateContainerInterface_arrayLikeToArray(o, minLen); }\n\nfunction StateContainerInterface_iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction StateContainerInterface_arrayWithoutHoles(arr) { if (Array.isArray(arr)) return StateContainerInterface_arrayLikeToArray(arr); }\n\nfunction StateContainerInterface_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction StateContainerInterface_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) StateContainerInterface_setPrototypeOf(subClass, superClass); }\n\nfunction StateContainerInterface_setPrototypeOf(o, p) { StateContainerInterface_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return StateContainerInterface_setPrototypeOf(o, p); }\n\nfunction StateContainerInterface_createSuper(Derived) { var hasNativeReflectConstruct = StateContainerInterface_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = StateContainerInterface_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = StateContainerInterface_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return StateContainerInterface_possibleConstructorReturn(this, result); }; }\n\nfunction StateContainerInterface_possibleConstructorReturn(self, call) { if (call && (StateContainerInterface_typeof(call) === "object" || typeof call === "function")) { return call; } return StateContainerInterface_assertThisInitialized(self); }\n\nfunction StateContainerInterface_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction StateContainerInterface_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction StateContainerInterface_getPrototypeOf(o) { StateContainerInterface_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return StateContainerInterface_getPrototypeOf(o); }\n\nfunction StateContainerInterface_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction StateContainerInterface_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction StateContainerInterface_createClass(Constructor, protoProps, staticProps) { if (protoProps) StateContainerInterface_defineProperties(Constructor.prototype, protoProps); if (staticProps) StateContainerInterface_defineProperties(Constructor, staticProps); return Constructor; }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/* eslint-disable max-classes-per-file */\n\n/* eslint-disable no-unused-vars */\n\n/* eslint-disable no-empty-function */\n\n/* eslint-disable getter-return */\n\n/**\r\n * Class factory interface for manipulating a collection of {@link AbstractState}.\r\n *\r\n * @interface\r\n */\n\nvar StateContainerInterface_StateContainerInterface = /*#__PURE__*/function () {\n function StateContainerInterface() {\n StateContainerInterface_classCallCheck(this, StateContainerInterface);\n }\n\n StateContainerInterface_createClass(StateContainerInterface, [{\n key: "getState",\n value:\n /**\r\n * Return the state with the given name.\r\n *\r\n * @param {string} name - Name of the state.\r\n *\r\n * @returns {AbstractState}\r\n */\n function getState(name) {}\n /**\r\n * Gets an array of the names of all states in the container.\r\n *\r\n * @type {Array.}\r\n */\n\n }, {\n key: "getStateNames",\n value: function getStateNames() {}\n /**\r\n * Add a new state to be controlled by the container. States are stored keyed\r\n * by their name property, which must be unique. If it isn\'t, a number will\r\n * be added or incremented until a unique key is generated.\r\n *\r\n * @param {AbstractState} state - State to add to the container.\r\n *\r\n * @returns {string} - Unique name of the state.\r\n */\n\n }, {\n key: "addState",\n value: function addState(state) {}\n /**\r\n * Removes a state with the given name from the container.\r\n *\r\n * @param {string} name - Name of the state to remove.\r\n *\r\n * @returns {boolean} - Whether or not a state was removed.\r\n */\n\n }, {\n key: "removeState",\n value: function removeState(name) {}\n /**\r\n * Renames a state with the given name in the container. Name must be unique\r\n * to the container, if it isn\'t the name will be incremented until it is unique.\r\n *\r\n * @param {string} currentName - Name of the state to rename.\r\n * @param {string} newName - Name to update the state with.\r\n *\r\n * @returns {string} - Updated name for the state.\r\n */\n\n }, {\n key: "renameState",\n value: function renameState(currentName, newName) {}\n /**\r\n * Discards all states.\r\n */\n\n }, {\n key: "discardStates",\n value: function discardStates() {}\n /**\r\n * Creates a class that implements {@link StateContainerInterface} and extends\r\n * a specified base class.\r\n *\r\n * @param {Class} [BaseClass = class{}] - The class to extend.\r\n *\r\n * @return {Class} A class that extends `BaseClass` and implements {@link StateContainerInterface}.\r\n */\n\n }], [{\n key: "Mixin",\n value: function Mixin() {\n var BaseClass = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : /*#__PURE__*/function () {\n function _class() {\n StateContainerInterface_classCallCheck(this, _class);\n }\n\n return _class;\n }();\n\n /**\r\n * This mixin adds functionality for manipulating uniquely-named animation states in\r\n * a map.\r\n */\n var StateContainerMixin = /*#__PURE__*/function (_BaseClass) {\n StateContainerInterface_inherits(StateContainerMixin, _BaseClass);\n\n var _super = StateContainerInterface_createSuper(StateContainerMixin);\n\n function StateContainerMixin() {\n var _this;\n\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n StateContainerInterface_classCallCheck(this, StateContainerMixin);\n\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\n _this = _super.call.apply(_super, [this, options].concat(args));\n _this._states = _this._states !== undefined ? _this._states : new Map();\n return _this;\n }\n\n StateContainerInterface_createClass(StateContainerMixin, [{\n key: "getState",\n value: function getState(name) {\n return this._states.get(name);\n }\n }, {\n key: "getStateNames",\n value: function getStateNames() {\n return StateContainerInterface_toConsumableArray(this._states.keys());\n }\n }, {\n key: "addState",\n value: function addState(state) {\n // Make sure the state is not already in this container\n if (StateContainerInterface_toConsumableArray(this._states.values()).includes(state)) {\n console.warn("Cannot add animation to state ".concat(this.name, ". Animation was already added."));\n return state.name;\n } // Make sure the state name is unique\n\n\n var uniqueName = core_Utils.getUniqueName(state.name, StateContainerInterface_toConsumableArray(this._states.keys()));\n\n if (state.name !== uniqueName) {\n console.warn("Animation name ".concat(state.name, " is not unique for state ").concat(this.name, ". New animation will be added with name ").concat(uniqueName, "."));\n state.name = uniqueName;\n }\n\n this._states.set(state.name, state);\n\n return state.name;\n }\n }, {\n key: "removeState",\n value: function removeState(name) {\n // Check if the state is in this container\n if (!this._states || !this._states.has(name)) {\n console.warn("Did not remove animation ".concat(name, " from state ").concat(this.name, ". No animation exists with this name."));\n return false;\n }\n\n this._states.get(name).discard();\n\n this._states["delete"](name);\n\n return true;\n }\n }, {\n key: "renameState",\n value: function renameState(currentName, newName) {\n // Make sure the state is in this container\n if (!this._states || !this._states.has(currentName)) {\n throw new Error("Cannot rename animation ".concat(currentName, " in ").concat(this.name, ". No animation exists with this name."));\n }\n\n var state = this._states.get(currentName); // Exit if the names are the same\n\n\n if (currentName === newName) {\n return currentName;\n } // Make sure the name is unique\n\n\n var uniqueName = core_Utils.getUniqueName(newName, StateContainerInterface_toConsumableArray(this._states.keys()).filter(function (s) {\n return s.name !== currentName;\n }));\n\n if (newName !== uniqueName) {\n console.warn("Animation name ".concat(newName, " is not unique in state ").concat(this.name, ". Animation will be renamed to ").concat(uniqueName, "."));\n newName = uniqueName;\n }\n\n state.name = newName;\n\n this._states["delete"](currentName);\n\n this._states.set(state.name, state);\n\n return state.name;\n }\n }, {\n key: "discardStates",\n value: function discardStates() {\n this._states.forEach(function (state) {\n state.discard();\n });\n\n delete this._states;\n }\n }]);\n\n return StateContainerMixin;\n }(BaseClass);\n\n return StateContainerMixin;\n }\n }]);\n\n return StateContainerInterface;\n}();\n\n/* harmony default export */ var state_StateContainerInterface = (StateContainerInterface_StateContainerInterface);\n// CONCATENATED MODULE: ./src/core/animpack/state/QueueState.js\nfunction QueueState_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { QueueState_typeof = function _typeof(obj) { return typeof obj; }; } else { QueueState_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return QueueState_typeof(obj); }\n\nfunction QueueState_toConsumableArray(arr) { return QueueState_arrayWithoutHoles(arr) || QueueState_iterableToArray(arr) || QueueState_unsupportedIterableToArray(arr) || QueueState_nonIterableSpread(); }\n\nfunction QueueState_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."); }\n\nfunction QueueState_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return QueueState_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return QueueState_arrayLikeToArray(o, minLen); }\n\nfunction QueueState_iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction QueueState_arrayWithoutHoles(arr) { if (Array.isArray(arr)) return QueueState_arrayLikeToArray(arr); }\n\nfunction QueueState_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction QueueState_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction QueueState_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction QueueState_createClass(Constructor, protoProps, staticProps) { if (protoProps) QueueState_defineProperties(Constructor.prototype, protoProps); if (staticProps) QueueState_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction QueueState_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { QueueState_get = Reflect.get; } else { QueueState_get = function _get(target, property, receiver) { var base = QueueState_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return QueueState_get(target, property, receiver || target); }\n\nfunction QueueState_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = QueueState_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction QueueState_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) QueueState_setPrototypeOf(subClass, superClass); }\n\nfunction QueueState_setPrototypeOf(o, p) { QueueState_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return QueueState_setPrototypeOf(o, p); }\n\nfunction QueueState_createSuper(Derived) { var hasNativeReflectConstruct = QueueState_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = QueueState_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = QueueState_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return QueueState_possibleConstructorReturn(this, result); }; }\n\nfunction QueueState_possibleConstructorReturn(self, call) { if (call && (QueueState_typeof(call) === "object" || typeof call === "function")) { return call; } return QueueState_assertThisInitialized(self); }\n\nfunction QueueState_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction QueueState_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction QueueState_getPrototypeOf(o) { QueueState_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return QueueState_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n/**\r\n * Class for playing an ordered array of animation states in sequence.\r\n *\r\n * @extends AbstractState\r\n * @implements @AnimationPlayerInterface\r\n */\n\nvar QueueState = /*#__PURE__*/function (_AnimationPlayerInter) {\n QueueState_inherits(QueueState, _AnimationPlayerInter);\n\n var _super = QueueState_createSuper(QueueState);\n\n /**\r\n * @constructor\r\n *\r\n * @param {Object} [options={}] - Options for the state.\r\n * @param {boolean} [options.autoAdvance=true] - Whether to autmatically advance\r\n * to the next state in the queue as each state completes.\r\n * @param {Array.} [queueStates=[]] - Array of states to be played\r\n * in order.\r\n */\n function QueueState() {\n var _this;\n\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var queueStates = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n\n QueueState_classCallCheck(this, QueueState);\n\n _this = _super.call(this, options);\n queueStates.forEach(function (state) {\n _this.addState(state);\n });\n _this._queue = _this._states.keys();\n _this._done = true;\n return _this;\n }\n /**\r\n * Gets whether the animation queue has reached the end.\r\n */\n\n\n QueueState_createClass(QueueState, [{\n key: "done",\n get: function get() {\n return this._done;\n }\n /**\r\n * Gets the internal weight.\r\n *\r\n * @readonly\r\n * @type {number}\r\n */\n\n }, {\n key: "internalWeight",\n get: function get() {\n return this._currentState ? this._currentState.internalWeight * this._internalWeight : 0;\n }\n /**\r\n * Restart the queue iterator.\r\n *\r\n * @private\r\n */\n\n }, {\n key: "_reset",\n value: function _reset() {\n this._queue = this._states.keys();\n\n var _this$_queue$next = this._queue.next(),\n value = _this$_queue$next.value,\n done = _this$_queue$next.done;\n\n this._done = done;\n return value || null;\n }\n /**\r\n * Multiplies the user weight by a factor to determine the internal weight.\r\n *\r\n * @param {number} factor - 0-1 multiplier to apply to the user weight.\r\n */\n\n }, {\n key: "updateInternalWeight",\n value: function updateInternalWeight(factor) {\n QueueState_get(QueueState_getPrototypeOf(QueueState.prototype), "updateInternalWeight", this).call(this, factor);\n\n if (this._currentState) {\n this._currentState.updateInternalWeight(this._internalWeight);\n }\n }\n /**\r\n * Start the next animation in the queue.\r\n *\r\n * @param {Function=} onNext - Function to execute each time an animation completes\r\n * and the queue moves to the next animation.\r\n * @param {boolean} [wrap=false] - Whether or not to start the queue from the\r\n * beginning again if the end has been reached.\r\n *\r\n * @returns {Deferred}\r\n */\n\n }, {\n key: "next",\n value: function next(onNext) {\n var _this2 = this;\n\n var wrap = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n // Move the queue forward\n var _this$_queue$next2 = this._queue.next(),\n name = _this$_queue$next2.value,\n done = _this$_queue$next2.done;\n\n this._done = done;\n this._paused = false; // The queue has reached the end\n\n if (done) {\n // Start the queue over\n if (wrap) {\n return this.play(this._playCallbacks.onFinish, this._playCallbacks.onError, this._playCallbacks.onCancel, onNext);\n } // Stop the queue\n else {\n this._promises.finish.resolve();\n\n return this._promises.finish;\n }\n } // Signal the next animation is starting\n\n\n if (typeof onNext === \'function\') {\n var lastName = QueueState_toConsumableArray(this._states.keys())[this._states.size - 1];\n\n var isQueueEnd = name === lastName;\n onNext({\n name: name,\n canAdvance: this.getState(name).loopCount !== Infinity && !isQueueEnd,\n isQueueEnd: isQueueEnd\n });\n } // Start the next animation\n\n\n this.playAnimation(name, this._transitionTime, this._easingFn, function () {\n if (!_this2._paused && !_this2.isTransitioning) {\n _this2.next(onNext);\n }\n }, this._playCallbacks.onError);\n return this._promises.finish;\n }\n }, {\n key: "play",\n value: function play(onFinish, onError, onCancel, onNext) {\n var _this3 = this;\n\n var name = this._reset();\n\n QueueState_get(QueueState_getPrototypeOf(QueueState.prototype), "play", this).call(this, onFinish, onError, onCancel);\n\n if (this._done) {\n this._promises.finish.resolve();\n } else {\n // Signal the next animation is starting\n if (name !== this.currentAnimation && typeof onNext === \'function\') {\n var lastName = QueueState_toConsumableArray(this._states.keys())[this._states.size - 1];\n\n var isQueueEnd = name === lastName;\n onNext({\n name: name,\n canAdvance: name ? this.getState(name).loopCount !== Infinity && !isQueueEnd : true,\n isQueueEnd: !name || isQueueEnd\n });\n } // Start the next animation\n\n\n this.playAnimation(name, this._currentState ? this._transitionTime : 0, this._easingFn, function () {\n if (!_this3._paused && !_this3.isTransitioning) {\n _this3.next(onNext);\n }\n }, onError);\n }\n\n return this._promises.finish;\n }\n }, {\n key: "pause",\n value: function pause() {\n var paused = QueueState_get(QueueState_getPrototypeOf(QueueState.prototype), "pause", this).call(this);\n\n this.pauseAnimation();\n return paused;\n }\n }, {\n key: "resume",\n value: function resume(onFinish, onError, onCancel, onNext) {\n var _this4 = this;\n\n if (this._done) {\n return this.play(onFinish, onError, onCancel, onNext);\n } else {\n QueueState_get(QueueState_getPrototypeOf(QueueState.prototype), "resume", this).call(this, onFinish, onError, onCancel);\n\n this.resumeAnimation(this._currentState.name, this._transitionTime, this._easingFn, function () {\n if (!_this4._paused && !_this4.isTransitioning) {\n _this4.next(onNext);\n }\n }, onError);\n return this._promises.finish;\n }\n }\n }, {\n key: "cancel",\n value: function cancel() {\n var canceled = QueueState_get(QueueState_getPrototypeOf(QueueState.prototype), "cancel", this).call(this);\n\n if (this._currentState) {\n this._currentState.cancel();\n }\n\n return canceled;\n }\n }, {\n key: "stop",\n value: function stop() {\n var stopped = QueueState_get(QueueState_getPrototypeOf(QueueState.prototype), "stop", this).call(this);\n\n this.stopAnimation();\n this._done = true;\n return stopped;\n }\n }, {\n key: "discard",\n value: function discard() {\n QueueState_get(QueueState_getPrototypeOf(QueueState.prototype), "discard", this).call(this);\n\n this.discardStates();\n }\n }]);\n\n return QueueState;\n}(animpack_AnimationPlayerInterface.Mixin(state_StateContainerInterface.Mixin(state_AbstractState)));\n\n/* harmony default export */ var state_QueueState = (QueueState);\n// CONCATENATED MODULE: ./src/core/animpack/state/AbstractBlendState.js\nfunction AbstractBlendState_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { AbstractBlendState_typeof = function _typeof(obj) { return typeof obj; }; } else { AbstractBlendState_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return AbstractBlendState_typeof(obj); }\n\nfunction AbstractBlendState_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction AbstractBlendState_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction AbstractBlendState_createClass(Constructor, protoProps, staticProps) { if (protoProps) AbstractBlendState_defineProperties(Constructor.prototype, protoProps); if (staticProps) AbstractBlendState_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction AbstractBlendState_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { AbstractBlendState_get = Reflect.get; } else { AbstractBlendState_get = function _get(target, property, receiver) { var base = AbstractBlendState_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return AbstractBlendState_get(target, property, receiver || target); }\n\nfunction AbstractBlendState_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = AbstractBlendState_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction AbstractBlendState_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) AbstractBlendState_setPrototypeOf(subClass, superClass); }\n\nfunction AbstractBlendState_setPrototypeOf(o, p) { AbstractBlendState_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return AbstractBlendState_setPrototypeOf(o, p); }\n\nfunction AbstractBlendState_createSuper(Derived) { var hasNativeReflectConstruct = AbstractBlendState_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = AbstractBlendState_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = AbstractBlendState_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return AbstractBlendState_possibleConstructorReturn(this, result); }; }\n\nfunction AbstractBlendState_possibleConstructorReturn(self, call) { if (call && (AbstractBlendState_typeof(call) === "object" || typeof call === "function")) { return call; } return AbstractBlendState_assertThisInitialized(self); }\n\nfunction AbstractBlendState_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction AbstractBlendState_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction AbstractBlendState_getPrototypeOf(o) { AbstractBlendState_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return AbstractBlendState_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n\n/**\r\n * Base class for a state that blends a collection of {@link AbstractState}.\r\n *\r\n * @abstract\r\n * @implements StateContainerInterface\r\n */\n\nvar AbstractBlendState_AbstractBlendState = /*#__PURE__*/function (_StateContainerInterf) {\n AbstractBlendState_inherits(AbstractBlendState, _StateContainerInterf);\n\n var _super = AbstractBlendState_createSuper(AbstractBlendState);\n\n function AbstractBlendState() {\n var _this;\n\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var blendStates = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n\n AbstractBlendState_classCallCheck(this, AbstractBlendState);\n\n for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n args[_key - 2] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this, options].concat(args));\n blendStates.forEach(function (state) {\n _this.addState(state);\n });\n return _this;\n }\n /**\r\n * Gets the sum of internal weights of the sub-states.\r\n *\r\n * @readonly\r\n * @type {number}\r\n */\n\n\n AbstractBlendState_createClass(AbstractBlendState, [{\n key: "internalWeight",\n get: function get() {\n var blendWeights = 0;\n\n this._states.forEach(function (state) {\n blendWeights += state.internalWeight;\n });\n\n return blendWeights;\n }\n /**\r\n * Returns the weight of a state controlled by the container.\r\n *\r\n * @param {string} name - Name of the state to return the weight from.\r\n *\r\n * @returns {number} - Weight of the state.\r\n */\n\n }, {\n key: "getBlendWeight",\n value: function getBlendWeight(name) {\n // Make sure the name is valid\n var state = this.getState(name);\n\n if (state === undefined) {\n throw new Error("Cannot get weight of state ".concat(name, " from BlendState ").concat(this.name, ". No state exists with this name."));\n }\n\n return state.weight;\n }\n /**\r\n * Sets the weight of a state controlled by the container.\r\n *\r\n * @param {string} name - Name of the state to set the weight of.\r\n * @param {number} weight - Weight value to set on the state.\r\n *\r\n * @returns {Deferred}\r\n */\n\n }, {\n key: "setBlendWeight",\n value: function setBlendWeight(name, weight) {\n var seconds = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n var easingFn = arguments.length > 3 ? arguments[3] : undefined;\n // Make sure the name is valid\n var state = this.getState(name);\n\n if (state === undefined) {\n throw new Error("Cannot set weight of state ".concat(name, " from BlendState ").concat(this.name, ". No state exists with this name."));\n }\n\n weight = core_MathUtils.clamp(weight);\n return state.setWeight(weight, seconds, easingFn);\n }\n /**\r\n * Multiplies the weight of each sub-state by a factor to determine the internal weight.\r\n *\r\n * @param {number} factor - 0-1 multiplier to apply to the user weight.\r\n */\n\n }, {\n key: "updateInternalWeight",\n value: function updateInternalWeight(factor) {\n var _this2 = this;\n\n AbstractBlendState_get(AbstractBlendState_getPrototypeOf(AbstractBlendState.prototype), "updateInternalWeight", this).call(this, factor);\n\n this._states.forEach(function (state) {\n state.updateInternalWeight(_this2._internalWeight);\n });\n }\n /**\r\n * Update any values of the sub-states that need to be evaluated every frame.\r\n *\r\n * @param {number} deltaTime - Time in milliseconds since the last update.\r\n */\n\n }, {\n key: "update",\n value: function update(deltaTime) {\n AbstractBlendState_get(AbstractBlendState_getPrototypeOf(AbstractBlendState.prototype), "update", this).call(this, deltaTime);\n\n this._states.forEach(function (state) {\n state.update(deltaTime);\n });\n }\n /**\r\n * Start playback of the sub-states from the beginning.\r\n *\r\n * @param {Function=} onFinish - Function to execute when the state finishes.\r\n * @param {Function=} onError - Function to execute if the state encounters\r\n * an error during playback.\r\n * @param {Function=} onCancel - Function to execute if playback is canceled.\r\n *\r\n * @returns {Deferred}\r\n */\n\n }, {\n key: "play",\n value: function play(onFinish, onError, onCancel) {\n var promises = [AbstractBlendState_get(AbstractBlendState_getPrototypeOf(AbstractBlendState.prototype), "play", this).call(this)];\n\n this._states.forEach(function (state) {\n promises.push(state.play());\n });\n\n return core_Deferred.all(promises, onFinish, onError, onCancel);\n }\n /**\r\n * Pause playback of the sub-states. This prevents pending promises from being executed.\r\n *\r\n * @returns {boolean}\r\n */\n\n }, {\n key: "pause",\n value: function pause() {\n this._states.forEach(function (state) {\n state.pause();\n });\n\n return AbstractBlendState_get(AbstractBlendState_getPrototypeOf(AbstractBlendState.prototype), "pause", this).call(this);\n }\n /**\r\n * Resume playback of the sub-states.\r\n *\r\n * @param {Function=} onFinish - Function to execute when the state finishes.\r\n * @param {Function=} onError - Function to execute if the state encounters\r\n * an error during playback.\r\n * @param {Function=} onCancel - Function to execute if playback is canceled.\r\n *\r\n * @returns {Deferred}\r\n */\n\n }, {\n key: "resume",\n value: function resume(onFinish, onError, onCancel) {\n var promises = [AbstractBlendState_get(AbstractBlendState_getPrototypeOf(AbstractBlendState.prototype), "resume", this).call(this)];\n\n this._states.forEach(function (state) {\n promises.push(state.resume());\n });\n\n return core_Deferred.all(promises, onFinish, onError, onCancel);\n }\n /**\r\n * Cancel playback of the sub-states and cancel any pending promises.\r\n *\r\n * @returns {boolean}\r\n */\n\n }, {\n key: "cancel",\n value: function cancel() {\n this._states.forEach(function (state) {\n state.cancel();\n });\n\n return AbstractBlendState_get(AbstractBlendState_getPrototypeOf(AbstractBlendState.prototype), "cancel", this).call(this);\n }\n /**\r\n * Stop playback of the sub-states and resolve any pending promises.\r\n *\r\n * @returns {boolean}\r\n */\n\n }, {\n key: "stop",\n value: function stop() {\n this._states.forEach(function (state) {\n state.stop();\n });\n\n return AbstractBlendState_get(AbstractBlendState_getPrototypeOf(AbstractBlendState.prototype), "stop", this).call(this);\n }\n /**\r\n * Discards all sub-state resources.\r\n *\r\n * @returns {boolean}\r\n */\n\n }, {\n key: "discard",\n value: function discard() {\n AbstractBlendState_get(AbstractBlendState_getPrototypeOf(AbstractBlendState.prototype), "discard", this).call(this);\n\n this.discardStates();\n }\n }]);\n\n return AbstractBlendState;\n}(state_StateContainerInterface.Mixin(state_AbstractState));\n\n/* harmony default export */ var state_AbstractBlendState = (AbstractBlendState_AbstractBlendState);\n// CONCATENATED MODULE: ./src/core/animpack/state/FreeBlendState.js\nfunction FreeBlendState_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { FreeBlendState_typeof = function _typeof(obj) { return typeof obj; }; } else { FreeBlendState_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return FreeBlendState_typeof(obj); }\n\nfunction FreeBlendState_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction FreeBlendState_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction FreeBlendState_createClass(Constructor, protoProps, staticProps) { if (protoProps) FreeBlendState_defineProperties(Constructor.prototype, protoProps); if (staticProps) FreeBlendState_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction FreeBlendState_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { FreeBlendState_get = Reflect.get; } else { FreeBlendState_get = function _get(target, property, receiver) { var base = FreeBlendState_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return FreeBlendState_get(target, property, receiver || target); }\n\nfunction FreeBlendState_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = FreeBlendState_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction FreeBlendState_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) FreeBlendState_setPrototypeOf(subClass, superClass); }\n\nfunction FreeBlendState_setPrototypeOf(o, p) { FreeBlendState_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return FreeBlendState_setPrototypeOf(o, p); }\n\nfunction FreeBlendState_createSuper(Derived) { var hasNativeReflectConstruct = FreeBlendState_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = FreeBlendState_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = FreeBlendState_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return FreeBlendState_possibleConstructorReturn(this, result); }; }\n\nfunction FreeBlendState_possibleConstructorReturn(self, call) { if (call && (FreeBlendState_typeof(call) === "object" || typeof call === "function")) { return call; } return FreeBlendState_assertThisInitialized(self); }\n\nfunction FreeBlendState_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction FreeBlendState_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction FreeBlendState_getPrototypeOf(o) { FreeBlendState_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return FreeBlendState_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/**\r\n * Class for blending N number of blend states.\r\n *\r\n * @extends AbstractBlendState\r\n */\n\nvar FreeBlendState = /*#__PURE__*/function (_AbstractBlendState) {\n FreeBlendState_inherits(FreeBlendState, _AbstractBlendState);\n\n var _super = FreeBlendState_createSuper(FreeBlendState);\n\n /**\r\n * @constructor\r\n *\r\n * @param {Object} [options={}] - Options for the container state.\r\n * @param {Array.} [blendStates=[]] - Blend states to be controlled by\r\n * this container.\r\n */\n function FreeBlendState() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var blendStates = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n\n FreeBlendState_classCallCheck(this, FreeBlendState);\n\n return _super.call(this, options, blendStates);\n }\n\n FreeBlendState_createClass(FreeBlendState, [{\n key: "updateInternalWeight",\n value: function updateInternalWeight(factor) {\n var _this = this;\n\n FreeBlendState_get(FreeBlendState_getPrototypeOf(FreeBlendState.prototype), "updateInternalWeight", this).call(this, factor); // Determine the total active weight of blend states\n\n\n var sumWeights = 0;\n\n this._states.forEach(function (state) {\n sumWeights += state.weight;\n }); // Ensure the sum of blend state internal weights does not exceed container internal weight\n\n\n factor /= Math.max(sumWeights, 1); // Sum of blend state internal weights should not exceed container internal weight\n\n this._states.forEach(function (state) {\n state.updateInternalWeight(factor * _this._weight);\n });\n }\n }]);\n\n return FreeBlendState;\n}(state_AbstractBlendState);\n\n/* harmony default export */ var state_FreeBlendState = (FreeBlendState);\n// CONCATENATED MODULE: ./src/core/animpack/state/Blend1dState.js\nfunction Blend1dState_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { Blend1dState_typeof = function _typeof(obj) { return typeof obj; }; } else { Blend1dState_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return Blend1dState_typeof(obj); }\n\nfunction Blend1dState_toConsumableArray(arr) { return Blend1dState_arrayWithoutHoles(arr) || Blend1dState_iterableToArray(arr) || Blend1dState_unsupportedIterableToArray(arr) || Blend1dState_nonIterableSpread(); }\n\nfunction Blend1dState_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."); }\n\nfunction Blend1dState_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return Blend1dState_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return Blend1dState_arrayLikeToArray(o, minLen); }\n\nfunction Blend1dState_iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction Blend1dState_arrayWithoutHoles(arr) { if (Array.isArray(arr)) return Blend1dState_arrayLikeToArray(arr); }\n\nfunction Blend1dState_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction Blend1dState_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction Blend1dState_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { Blend1dState_ownKeys(Object(source), true).forEach(function (key) { Blend1dState_defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { Blend1dState_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction Blend1dState_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction Blend1dState_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction Blend1dState_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction Blend1dState_createClass(Constructor, protoProps, staticProps) { if (protoProps) Blend1dState_defineProperties(Constructor.prototype, protoProps); if (staticProps) Blend1dState_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction Blend1dState_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { Blend1dState_get = Reflect.get; } else { Blend1dState_get = function _get(target, property, receiver) { var base = Blend1dState_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return Blend1dState_get(target, property, receiver || target); }\n\nfunction Blend1dState_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = Blend1dState_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction Blend1dState_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) Blend1dState_setPrototypeOf(subClass, superClass); }\n\nfunction Blend1dState_setPrototypeOf(o, p) { Blend1dState_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return Blend1dState_setPrototypeOf(o, p); }\n\nfunction Blend1dState_createSuper(Derived) { var hasNativeReflectConstruct = Blend1dState_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = Blend1dState_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = Blend1dState_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return Blend1dState_possibleConstructorReturn(this, result); }; }\n\nfunction Blend1dState_possibleConstructorReturn(self, call) { if (call && (Blend1dState_typeof(call) === "object" || typeof call === "function")) { return call; } return Blend1dState_assertThisInitialized(self); }\n\nfunction Blend1dState_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction Blend1dState_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction Blend1dState_getPrototypeOf(o) { Blend1dState_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return Blend1dState_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n/**\r\n * Class for blending N number of blend states based on a single\r\n * parameter.\r\n *\r\n * @extends AbstractBlendState\r\n */\n\nvar Blend1dState_Blend1dState = /*#__PURE__*/function (_AbstractBlendState) {\n Blend1dState_inherits(Blend1dState, _AbstractBlendState);\n\n var _super = Blend1dState_createSuper(Blend1dState);\n\n /**\r\n * @constructor\r\n *\r\n * @param {Object} [options] - Options for the container state\r\n * @param {Array.} [blendStates=[]] - Blend states to be\r\n * controlled by this container.\r\n * @param {Array.} [blendThresholds=[]] - Threshold values for activating\r\n * each blend state.\r\n * @param {Array.} [phaseMatches=[]] - Booleans indicating whether or not\r\n * each blend state should be phase matched.\r\n */\n function Blend1dState() {\n var _this;\n\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var blendStates = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n var blendThresholds = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];\n var phaseMatches = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : [];\n\n Blend1dState_classCallCheck(this, Blend1dState);\n\n _this = _super.call(this, options, blendStates);\n _this._blendValue = 0;\n _this._promises = Blend1dState_objectSpread(Blend1dState_objectSpread({}, _this._promises), {}, {\n blendValue: core_Deferred.resolve()\n }); // Validate there are no duplicate thresholds\n\n var nonZeroDifferentSize = blendStates.length !== 0 && blendStates.length !== blendThresholds.length;\n\n if (nonZeroDifferentSize) {\n throw new Error("Cannot create Blend1dState with blendThresholds ".concat(blendThresholds, ". BlendThresholds count does not match blendStates count."));\n }\n\n var containsDuplicates = new Set(blendThresholds).size !== blendThresholds.length;\n\n if (containsDuplicates) {\n throw new Error("Cannot create Blend1dState with blendThresholds ".concat(blendThresholds, ". BlendThresholds contains duplicate values"));\n } // Initialize the thresholds map\n\n\n _this._thresholds = [];\n\n Blend1dState_toConsumableArray(_this._states.values()).forEach(function (state, index) {\n _this._thresholds.push({\n value: blendThresholds[index],\n name: state.name,\n phaseMatch: phaseMatches[index] || false\n });\n });\n\n _this._sortThresholds();\n\n _this._forceNoThresholdDupes = true;\n _this._phaseLeadState = null;\n\n _this._updateBlendWeights();\n\n return _this;\n }\n /**\r\n * Gets and sets the blend parameter value.\r\n */\n\n\n Blend1dState_createClass(Blend1dState, [{\n key: "blendValue",\n get: function get() {\n return this._blendValue;\n },\n set: function set(value) {\n this._blendValue = value;\n }\n /**\r\n * Gets whether or not the blend value is currently being animated.\r\n */\n\n }, {\n key: "blendValuePending",\n get: function get() {\n return this._promises.blendValue && this._promises.blendValue.pending;\n }\n /**\r\n * Updates the user defined weight over time.\r\n *\r\n * @param {null} name - Unused parameter.\r\n * @param {number} weight - The target weight value.\r\n * @param {number} [seconds=0] - The amount of time it will take to reach the\r\n * target weight.\r\n * @param {Function=} easingFn - The easing function to use for interpolation.\r\n *\r\n * @returns {Deferred}\r\n */\n\n }, {\n key: "setBlendWeight",\n value: function setBlendWeight(name, value) {\n var _this2 = this;\n\n var seconds = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n var easingFn = arguments.length > 3 ? arguments[3] : undefined;\n\n this._promises.blendValue.cancel();\n\n this._promises.blendValue = animpack_AnimationUtils.interpolateProperty(this, \'blendValue\', value, {\n seconds: seconds,\n easingFn: easingFn,\n onProgress: function onProgress() {\n _this2._updateBlendWeights();\n },\n onFinish: function onFinish() {\n _this2._updateBlendWeights();\n }\n });\n return this._promises.blendValue;\n }\n /**\r\n * Gets the user defined weight.\r\n *\r\n * @returns {number}\r\n */\n\n }, {\n key: "getBlendWeight",\n value: function getBlendWeight() {\n return this.blendValue;\n }\n }, {\n key: "addState",\n value: function addState(state) {\n var thresholdValue = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var phaseMatch = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n this._thresholds = this._thresholds || []; // Make sure there is not already a state with this threshold\n\n var sameValue = this._thresholds.find(function (threshold) {\n return threshold.value === thresholdValue;\n });\n\n if (this._forceNoThresholdDupes && sameValue !== undefined) {\n throw new Error("Cannot set blend threshold of ".concat(thresholdValue, " for state ").concat(state.name, " on ").concat(this.name, ". A state already exists with that threshold."));\n }\n\n Blend1dState_get(Blend1dState_getPrototypeOf(Blend1dState.prototype), "addState", this).call(this, state);\n\n this._thresholds.push({\n value: thresholdValue,\n name: state.name,\n phaseMatch: phaseMatch || false\n });\n\n this._sortThresholds();\n\n return state.name;\n }\n }, {\n key: "removeState",\n value: function removeState(name) {\n var removed = Blend1dState_get(Blend1dState_getPrototypeOf(Blend1dState.prototype), "removeState", this).call(this, name);\n\n if (removed) {\n var index = this._thresholds.findIndex(function (threshold) {\n return threshold.name === name;\n });\n\n this._thresholds.splice(index, 1);\n }\n\n return removed;\n }\n }, {\n key: "renameState",\n value: function renameState(currentName, newName) {\n newName = Blend1dState_get(Blend1dState_getPrototypeOf(Blend1dState.prototype), "renameState", this).call(this, currentName, newName);\n\n var threshold = this._thresholds.find(function (threshold) {\n return threshold.name === currentName;\n });\n\n threshold.name = newName;\n return newName;\n }\n /**\r\n * Gets the threshold value of a blend with the corresponding name.\r\n *\r\n * @param {string} name - Name of the blend to get the threshold of.\r\n *\r\n * @returns {number} Threhold value.\r\n */\n\n }, {\n key: "getBlendThreshold",\n value: function getBlendThreshold(name) {\n var threshold = this._thresholds.find(function (threshold) {\n return threshold.name === name;\n });\n\n if (threshold === undefined) {\n throw new Error("Cannot get blend threshold of state ".concat(name, " on ").concat(this.name, ". No state exists with that name."));\n }\n\n return threshold.value;\n }\n /**\r\n * Sets the threshold value of a blend with the corresponding name.\r\n *\r\n * @param {string} name - Name of the blend to set the threshold.\r\n * @param {number} value - Value of the threshold to set.\r\n *\r\n * @returns {number} Set threshold value.\r\n */\n\n }, {\n key: "setBlendThreshold",\n value: function setBlendThreshold(name, value) {\n // Make sure there is not already a state with this threshold\n var sameValue = this._thresholds.find(function (threshold) {\n return threshold.value === value;\n });\n\n if (sameValue !== undefined) {\n throw new Error("Cannot set blend threshold of ".concat(value, " for state ").concat(name, " on ").concat(this.name, ". A state already exists with that threshold."));\n }\n\n var threshold = this._thresholds.find(function (threshold) {\n return threshold.name === name;\n });\n\n if (threshold === undefined) {\n throw new Error("Cannot set blend threshold of state ".concat(name, " on ").concat(this.name, ". No state exists with that name."));\n }\n\n threshold.value = value;\n\n this._sortThresholds();\n\n return threshold.value;\n }\n }, {\n key: "updateInternalWeight",\n value: function updateInternalWeight(factor) {\n var _this3 = this;\n\n Blend1dState_get(Blend1dState_getPrototypeOf(Blend1dState.prototype), "updateInternalWeight", this).call(this, factor);\n\n if (this._phaseLeadState) {\n this._states.forEach(function (state) {\n if (state.weight !== 0) {\n state.normalizedTime = _this3._phaseLeadState.normalizedTime;\n }\n });\n }\n }\n /**\r\n * Updates the blend weights based on their corresponding threshold values\r\n * and the current blendValue. Additionally, sets a lead phase state if the\r\n * conditions for phase-matching have been satisfied.\r\n *\r\n * @private\r\n */\n\n }, {\n key: "_updateBlendWeights",\n value: function _updateBlendWeights() {\n var _this4 = this;\n\n if (this._thresholds.length === 0) return;\n\n if (this._thresholds.length === 1) {\n var state = this._states.get(this._thresholds[0].name);\n\n state.setWeight(1);\n return;\n } // Initially set all sub-state weights to zero\n\n\n this._states.forEach(function (state) {\n state.setWeight(0);\n });\n\n this._phaseLeadState = null; // Find the first threshold that is greater than or equal to the parameter value\n\n var targetIndex = this._thresholds.findIndex(function (threshold) {\n return threshold.value >= _this4._blendValue;\n });\n\n if (targetIndex === 0 || targetIndex === -1) {\n // Give one state full influence\n targetIndex = targetIndex === -1 ? this._thresholds.length - 1 : 0;\n\n var _state = this._states.get(this._thresholds[targetIndex].name);\n\n _state.setWeight(1);\n } else {\n // Linear interpolate influence between two states\n var thresholdA = this._thresholds[targetIndex - 1];\n var thresholdB = this._thresholds[targetIndex];\n var factorB = (this.blendValue - thresholdA.value) / (thresholdB.value - thresholdA.value);\n var factorA = 1 - factorB;\n\n var stateA = this._states.get(thresholdA.name);\n\n var stateB = this._states.get(thresholdB.name);\n\n stateA.setWeight(factorA);\n stateB.setWeight(factorB); // Set phase-matching if needed\n\n if (thresholdA.phaseMatch && thresholdB.phaseMatch) {\n this._phaseLeadState = factorA > factorB ? stateA : stateB;\n }\n }\n }\n /**\r\n * Sorts the thresholds from low to high based on value.\r\n *\r\n * @private\r\n */\n\n }, {\n key: "_sortThresholds",\n value: function _sortThresholds() {\n this._thresholds.sort(function (a, b) {\n return a.value - b.value;\n });\n }\n }]);\n\n return Blend1dState;\n}(state_AbstractBlendState);\n\n/* harmony default export */ var state_Blend1dState = (Blend1dState_Blend1dState);\n// CONCATENATED MODULE: ./src/core/animpack/state/Blend2dState.js\nfunction Blend2dState_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { Blend2dState_typeof = function _typeof(obj) { return typeof obj; }; } else { Blend2dState_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return Blend2dState_typeof(obj); }\n\nfunction Blend2dState_toConsumableArray(arr) { return Blend2dState_arrayWithoutHoles(arr) || Blend2dState_iterableToArray(arr) || Blend2dState_unsupportedIterableToArray(arr) || Blend2dState_nonIterableSpread(); }\n\nfunction Blend2dState_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."); }\n\nfunction Blend2dState_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return Blend2dState_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return Blend2dState_arrayLikeToArray(o, minLen); }\n\nfunction Blend2dState_iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction Blend2dState_arrayWithoutHoles(arr) { if (Array.isArray(arr)) return Blend2dState_arrayLikeToArray(arr); }\n\nfunction Blend2dState_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction Blend2dState_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction Blend2dState_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { Blend2dState_ownKeys(Object(source), true).forEach(function (key) { Blend2dState_defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { Blend2dState_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction Blend2dState_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction Blend2dState_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction Blend2dState_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction Blend2dState_createClass(Constructor, protoProps, staticProps) { if (protoProps) Blend2dState_defineProperties(Constructor.prototype, protoProps); if (staticProps) Blend2dState_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction Blend2dState_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { Blend2dState_get = Reflect.get; } else { Blend2dState_get = function _get(target, property, receiver) { var base = Blend2dState_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return Blend2dState_get(target, property, receiver || target); }\n\nfunction Blend2dState_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = Blend2dState_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction Blend2dState_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) Blend2dState_setPrototypeOf(subClass, superClass); }\n\nfunction Blend2dState_setPrototypeOf(o, p) { Blend2dState_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return Blend2dState_setPrototypeOf(o, p); }\n\nfunction Blend2dState_createSuper(Derived) { var hasNativeReflectConstruct = Blend2dState_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = Blend2dState_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = Blend2dState_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return Blend2dState_possibleConstructorReturn(this, result); }; }\n\nfunction Blend2dState_possibleConstructorReturn(self, call) { if (call && (Blend2dState_typeof(call) === "object" || typeof call === "function")) { return call; } return Blend2dState_assertThisInitialized(self); }\n\nfunction Blend2dState_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction Blend2dState_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction Blend2dState_getPrototypeOf(o) { Blend2dState_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return Blend2dState_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/* eslint-disable no-underscore-dangle */\n\n\n\n\n/**\r\n * Class for blending N number of blend states based on two\r\n * paramters.\r\n *\r\n * @extends AbstractBlendState\r\n */\n\nvar Blend2dState_Blend2dState = /*#__PURE__*/function (_AbstractBlendState) {\n Blend2dState_inherits(Blend2dState, _AbstractBlendState);\n\n var _super = Blend2dState_createSuper(Blend2dState);\n\n /**\r\n * @constructor\r\n *\r\n * @param {Object} [options] - Options for the container state\r\n * @param {Array.} [blendStates=[]] - Blend states to be\r\n * controlled by this container.\r\n * @param {Array.>} [blendThresholds=[]] - Threshold values for activating\r\n * each blend state.\r\n * @param {Array.} [phaseMatches=[]] - Booleans indicating whether or not\r\n * each blend state should be phase matched.\r\n */\n function Blend2dState() {\n var _this;\n\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var blendStates = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n var blendThresholds = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];\n var phaseMatches = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : [];\n\n Blend2dState_classCallCheck(this, Blend2dState);\n\n _this = _super.call(this, options, blendStates);\n\n if (blendStates.length !== blendThresholds.length) {\n throw new Error("Cannot create Blend2dState with blendStates ".concat(blendStates, " and blendThresholds ").concat(blendThresholds, ". Count of blendStates must match count of blendThresholds."));\n }\n\n blendThresholds.slice(0, blendThresholds.length - 1).forEach(function (threshold, index) {\n blendThresholds.slice(index + 1).forEach(function (otherThreshold) {\n if (threshold[0] === otherThreshold[0] && threshold[1] === otherThreshold[1]) {\n throw new Error("Cannot create Blend2dState with blendThresholds ".concat(blendThresholds, ". No duplicate values allowed in blendThresholds."));\n }\n });\n });\n _this._blendValueX = 0;\n _this._blendValueY = 0;\n _this._promises = Blend2dState_objectSpread(Blend2dState_objectSpread({}, _this._promises), {}, {\n blendValueX: core_Deferred.resolve(),\n blendValueY: core_Deferred.resolve()\n });\n _this._thresholds = [];\n\n Blend2dState_toConsumableArray(_this._states.values()).forEach(function (state, index) {\n _this._thresholds.push({\n name: state.name,\n phaseMatch: phaseMatches[index] || false\n });\n });\n\n _this._vertices = blendThresholds;\n\n if (_this._vertices.length >= 3) {\n _this._triangles = core_MathUtils.getDelaunayTriangulation(_this._vertices);\n }\n\n _this._phaseLeadState = null;\n\n _this._updateBlendWeights();\n\n return _this;\n }\n /**\r\n * Updates the user defined weight over time.\r\n *\r\n * @param {string} name - Name of blend weight to update.\r\n * @param {number} weight - Target weight value.\r\n * @param {number} [seconds=0] - The amount of time it will take to reach the\r\n * target value.\r\n * @param {Function=} easingFn - The easing function to use for interpolation.\r\n *\r\n * @returns {Deferred}\r\n */\n\n\n Blend2dState_createClass(Blend2dState, [{\n key: "setBlendWeight",\n value: function setBlendWeight(name, value) {\n var _this2 = this;\n\n var seconds = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n var easingFn = arguments.length > 3 ? arguments[3] : undefined;\n var property = "blendValue".concat(name.toUpperCase());\n\n if (property !== \'blendValueX\' && property !== \'blendValueY\') {\n throw new Error("Cannot set blend weight for ".concat(name, " on ").concat(this.name, ". Blend2dState only accepts \'X\' or \'Y\' for setBlendWeight"));\n }\n\n this._promises[property].cancel();\n\n this._promises[property] = animpack_AnimationUtils.interpolateProperty(this, property, value, {\n seconds: seconds,\n easingFn: easingFn,\n onProgress: function onProgress() {\n _this2._updateBlendWeights();\n },\n onFinish: function onFinish() {\n _this2._updateBlendWeights();\n }\n });\n return this._promises[property];\n }\n /**\r\n * Gets the user defined weight.\r\n *\r\n * @param {string} name - Name of blend weight.\r\n *\r\n * @returns {number}\r\n */\n\n }, {\n key: "getBlendWeight",\n value: function getBlendWeight(name) {\n var property = name.toUpperCase();\n\n if (property !== \'X\' && property !== \'Y\') {\n throw new Error("Cannot get blend weight for ".concat(name, " on ").concat(this.name, ". Blend2dState only accepts \'X\' or \'Y\' for getBlendWeight"));\n }\n\n return property === \'X\' ? this._blendValueX : this._blendValueY;\n }\n /**\r\n * Gets and sets the x blend weight.\r\n */\n\n }, {\n key: "blendValueX",\n get: function get() {\n return this._blendValueX;\n },\n set: function set(value) {\n this._blendValueX = value;\n }\n /**\r\n * Gets and sets the y blend weight.\r\n */\n\n }, {\n key: "blendValueY",\n get: function get() {\n return this._blendValueY;\n },\n set: function set(value) {\n this._blendValueY = value;\n }\n /**\r\n * Gets whether or not the x blend value is currently being animated.\r\n */\n\n }, {\n key: "blendValueXPending",\n get: function get() {\n return this._promises.blendValueX && this._promises.blendValueX.pending;\n }\n /**\r\n * Gets whether or not the y blend value is currently being animated.\r\n */\n\n }, {\n key: "blendValueYPending",\n get: function get() {\n return this._promises.blendValueY && this._promises.blendValueY.pending;\n }\n }, {\n key: "updateInternalWeight",\n value: function updateInternalWeight(factor) {\n var _this3 = this;\n\n Blend2dState_get(Blend2dState_getPrototypeOf(Blend2dState.prototype), "updateInternalWeight", this).call(this, factor);\n\n if (this._phaseLeadState) {\n Blend2dState_toConsumableArray(this._states.values()).forEach(function (state, index) {\n if (state.weight !== 0 && _this3._thresholds[index].phaseMatch) {\n state.normalizedTime = _this3._phaseLeadState.normalizedTime;\n }\n });\n }\n }\n /**\r\n * Updates the blend weights based on their corresponding threshold values\r\n * and the current [x,y] blendValue. Additionally, sets a lead phase state if the\r\n * conditions for phase-matching have been satisfied.\r\n *\r\n * @private\r\n */\n\n }, {\n key: "_updateBlendWeights",\n value: function _updateBlendWeights() {\n var _this4 = this;\n\n if (!this._vertices || this._vertices.length === 0) return;\n\n if (this._vertices.length === 1) {\n Blend2dState_toConsumableArray(this._states.values())[0].weight = 1;\n return;\n } // Initially set all sub-state weights to zero\n\n\n this._states.forEach(function (state) {\n state.setWeight(0);\n });\n\n this._phaseLeadState = null;\n var p = [this._blendValueX, this._blendValueY];\n\n if (this._vertices.length === 2) {\n this._setInfluenceClosestPointOnLine(p);\n } else {\n var triangle = this._triangles.find(function (triangle) {\n return core_MathUtils.isPointInTriangle(_this4._vertices[triangle[0]], _this4._vertices[triangle[1]], _this4._vertices[triangle[2]], p);\n });\n\n if (triangle) {\n this._setInfluenceTriangle(triangle, p);\n } else {\n this._setInfluenceClosestPointInTriangles(p);\n }\n }\n }\n /**\r\n * Sets blend weights for states corresponding to a\r\n * triangle of thresholds and a given [x,y] blendValues.\r\n *\r\n * @param {Array.>} triangle - Set of triangluated indices\r\n * that correspond to blend thresholds.\r\n * @param {Array.} p - Given [x,y] blendValue.\r\n *\r\n * @private\r\n */\n\n }, {\n key: "_setInfluenceTriangle",\n value: function _setInfluenceTriangle(triangle, p) {\n var areaA = core_MathUtils.triangleArea(this._vertices[triangle[1]], this._vertices[triangle[2]], p);\n var areaB = core_MathUtils.triangleArea(this._vertices[triangle[0]], this._vertices[triangle[2]], p);\n var areaC = core_MathUtils.triangleArea(this._vertices[triangle[0]], this._vertices[triangle[1]], p);\n var totalArea = areaA + areaB + areaC;\n var weightA = areaA / totalArea;\n var weightB = areaB / totalArea;\n var weightC = areaC / totalArea;\n var thresholdA = this._thresholds[triangle[0]];\n var thresholdB = this._thresholds[triangle[1]];\n var thresholdC = this._thresholds[triangle[2]];\n\n var stateA = this._states.get(thresholdA.name);\n\n var stateB = this._states.get(thresholdB.name);\n\n var stateC = this._states.get(thresholdC.name);\n\n stateA.setWeight(weightA);\n stateB.setWeight(weightB);\n stateC.setWeight(weightC);\n\n this._setPhaseLeadState([stateA, stateB, stateC], [thresholdA.phaseMatch, thresholdB.phaseMatch, thresholdC.phaseMatch]);\n }\n /**\r\n * Determines the closest point within a triangle of\r\n * thresholds based on the current [x,y] blendValues and\r\n * then sets blend weights for the corresponding states.\r\n *\r\n * @param {Array.} p - Given [x,y] blendValue.\r\n *\r\n * @private\r\n */\n\n }, {\n key: "_setInfluenceClosestPointInTriangles",\n value: function _setInfluenceClosestPointInTriangles(p) {\n var _this5 = this;\n\n var globalClosestPoint = null;\n var globalMinDist = Number.POSITIVE_INFINITY;\n var closestTriangle = -1;\n\n this._triangles.forEach(function (triangle, index) {\n var pointA = core_MathUtils.closestPointOnLine(_this5._vertices[triangle[0]], _this5._vertices[triangle[1]], p);\n var pointB = core_MathUtils.closestPointOnLine(_this5._vertices[triangle[1]], _this5._vertices[triangle[2]], p);\n var pointC = core_MathUtils.closestPointOnLine(_this5._vertices[triangle[2]], _this5._vertices[triangle[0]], p);\n var distA = core_MathUtils.distanceSquared(pointA, p);\n var distB = core_MathUtils.distanceSquared(pointB, p);\n var distC = core_MathUtils.distanceSquared(pointC, p);\n var localClosestPoint = pointC;\n var localMinDist = distC;\n\n if (distA < localMinDist) {\n localClosestPoint = pointA;\n localMinDist = distA;\n }\n\n if (distB < localMinDist) {\n localClosestPoint = pointB;\n localMinDist = distB;\n }\n\n if (localMinDist < globalMinDist) {\n globalMinDist = localMinDist;\n globalClosestPoint = Blend2dState_toConsumableArray(localClosestPoint);\n closestTriangle = index;\n }\n });\n\n this._setInfluenceTriangle(this._triangles[closestTriangle], globalClosestPoint);\n }\n /**\r\n * Determines the closest point on the line formed between the\r\n * two blend thresholds based on the current [x,y] blendValues and\r\n * then sets blend weights for the corresponding states.\r\n *\r\n * @param {Array.} p - Given [x,y] blendValue.\r\n *\r\n * @private\r\n */\n\n }, {\n key: "_setInfluenceClosestPointOnLine",\n value: function _setInfluenceClosestPointOnLine(p) {\n var closestPoint = core_MathUtils.closestPointOnLine(this._vertices[[0]], this._vertices[[1]], p);\n var distA = core_MathUtils.distanceSquared(this._vertices[0], closestPoint);\n var distB = core_MathUtils.distanceSquared(this._vertices[1], closestPoint);\n var weightA = distB / (distA + distB);\n var weightB = distA / (distA + distB);\n var thresholdA = this._thresholds[0];\n var thresholdB = this._thresholds[1];\n\n var stateA = this._states.get(thresholdA.name);\n\n var stateB = this._states.get(thresholdB.name);\n\n stateA.setWeight(weightA);\n stateB.setWeight(weightB);\n\n this._setPhaseLeadState([stateA, stateB], [thresholdA.phaseMatch, thresholdB.phaseMatch]);\n }\n /**\r\n * Sets a lead phase state if the conditions\r\n * for phase-matching are satisfied.\r\n *\r\n * @param {Array.} states - States to\r\n * check phase-matching criteria.\r\n * @param {Array.} phaseMatched - List of phase-match booleans.\r\n *\r\n * @private\r\n */\n\n }, {\n key: "_setPhaseLeadState",\n value: function _setPhaseLeadState(states, phaseMatched) {\n var _this6 = this;\n\n var max = 0;\n states.forEach(function (state, index) {\n if (phaseMatched[index] && state.weight > max) {\n _this6._phaseLeadState = state;\n max = state.weight;\n }\n });\n }\n }]);\n\n return Blend2dState;\n}(state_AbstractBlendState);\n\n/* harmony default export */ var state_Blend2dState = (Blend2dState_Blend2dState);\n// CONCATENATED MODULE: ./src/core/animpack/AnimationLayer.js\nfunction AnimationLayer_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { AnimationLayer_typeof = function _typeof(obj) { return typeof obj; }; } else { AnimationLayer_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return AnimationLayer_typeof(obj); }\n\nfunction AnimationLayer_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction AnimationLayer_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction AnimationLayer_createClass(Constructor, protoProps, staticProps) { if (protoProps) AnimationLayer_defineProperties(Constructor.prototype, protoProps); if (staticProps) AnimationLayer_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction AnimationLayer_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { AnimationLayer_get = Reflect.get; } else { AnimationLayer_get = function _get(target, property, receiver) { var base = AnimationLayer_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return AnimationLayer_get(target, property, receiver || target); }\n\nfunction AnimationLayer_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = AnimationLayer_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction AnimationLayer_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) AnimationLayer_setPrototypeOf(subClass, superClass); }\n\nfunction AnimationLayer_setPrototypeOf(o, p) { AnimationLayer_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return AnimationLayer_setPrototypeOf(o, p); }\n\nfunction AnimationLayer_createSuper(Derived) { var hasNativeReflectConstruct = AnimationLayer_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = AnimationLayer_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = AnimationLayer_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return AnimationLayer_possibleConstructorReturn(this, result); }; }\n\nfunction AnimationLayer_possibleConstructorReturn(self, call) { if (call && (AnimationLayer_typeof(call) === "object" || typeof call === "function")) { return call; } return AnimationLayer_assertThisInitialized(self); }\n\nfunction AnimationLayer_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction AnimationLayer_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction AnimationLayer_getPrototypeOf(o) { AnimationLayer_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return AnimationLayer_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n\n\n\n/**\r\n * Enum for types of {@link AnimationLayer} blending.\r\n *\r\n * @readonly\r\n * @enum {string}\r\n */\n\nvar LayerBlendModes = {\n Override: \'Override\',\n Additive: \'Additive\'\n};\n/**\r\n * The default blending mode {@link AnimationLayer}.\r\n *\r\n * @readonly\r\n * @type {string}\r\n */\n\nvar DefaultLayerBlendMode = \'Override\';\n/**\r\n * Checks if a given blendMode is present in the values of {@link LayerBlendModes}.\r\n * If it is, return the original value, otherwise return {@link DefaultLayerBlendMode}.\r\n *\r\n * @param {string} blendMode - The name of the type of blending.\r\n *\r\n * @returns {(string|DefaultLayerBlendMode)}\r\n */\n\nfunction validateBlendMode(blendMode) {\n if (Array.from(Object.values(LayerBlendModes)).includes(blendMode)) {\n return blendMode;\n } else {\n return DefaultLayerBlendMode;\n }\n}\n/**\r\n * Class for managing a set of animations where only one state can be active at\r\n * any given time.\r\n *\r\n * @implements AnimationPlayerInterface\r\n * @implements StateContainerInterface\r\n */\n\nvar AnimationLayer_AnimationLayer = /*#__PURE__*/function (_AnimationPlayerInter) {\n AnimationLayer_inherits(AnimationLayer, _AnimationPlayerInter);\n\n var _super = AnimationLayer_createSuper(AnimationLayer);\n\n /**\r\n * @constructor\r\n *\r\n * @param {Object=} options - Options for the animation layer.\r\n * @param {string} options.name - Name of the layer. Names must be unique to the\r\n * animation feature that contains the layer.\r\n * @param {LayerBlendModes} [options.blendMode=DefaultLayerBlendMode] -\r\n * Type of blending to use for all states controlled by the layer.\r\n * @param {number} [options.weight=1] - The amount of influence the layer\'s current\r\n * animation has over the result for the host.\r\n * @param {number} [options.transitionTime=0] - The default amount of time to use when\r\n * playing and resuming animations.\r\n * @param {Function=} options.easingFn - The default easing function to use when\r\n * transitioning between animations and setting layer weight.\r\n */\n function AnimationLayer() {\n var _this;\n\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n AnimationLayer_classCallCheck(this, AnimationLayer);\n\n _this = _super.call(this, options);\n _this.name = options.name === undefined ? \'AnimationLayer\' : options.name;\n _this._blendMode = Array.from(Object.values(LayerBlendModes)).includes(options.blendMode) ? options.blendMode : DefaultLayerBlendMode;\n _this._promises = {\n weight: core_Deferred.resolve()\n };\n _this._weightPaused = false;\n _this.weight = typeof options.weight === \'number\' ? options.weight : 1;\n _this._internalWeight = _this._weight;\n return _this;\n }\n /**\r\n * Gets the type of blending used for states controlled by the layer.\r\n *\r\n * @readonly\r\n * @type {string}\r\n */\n\n\n AnimationLayer_createClass(AnimationLayer, [{\n key: "blendMode",\n get: function get() {\n return this._blendMode;\n }\n /**\r\n * Gets and sets the amount of influence the layer\'s current animation has over\r\n * the result for the host.\r\n *\r\n * @type {number}\r\n */\n\n }, {\n key: "weight",\n get: function get() {\n return this._weight;\n }\n /**\r\n * Gets whether or not the layer\'s weight value is currently being animated.\r\n *\r\n * @readonly\r\n * @type {boolean}\r\n */\n ,\n set: function set(weight) {\n this._weight = core_MathUtils.clamp(weight, 0, 1);\n }\n }, {\n key: "weightPending",\n get: function get() {\n return this._promises.weight && this._promises.weight.pending;\n }\n /**\r\n * Pause the current animation state and any interpolation happening on the layer\'s\r\n * weight property.\r\n *\r\n * @returns {boolean}\r\n */\n\n }, {\n key: "pause",\n value: function pause() {\n this._paused = true;\n this._weightPaused = true;\n return this.pauseAnimation() || this.weightPending;\n }\n /**\r\n * Resume the current animation state and any interpolation happening on the layer\'s\r\n * weight property.\r\n *\r\n * @returns {boolean}\r\n */\n\n }, {\n key: "resume",\n value: function resume() {\n this._paused = false;\n this._weightPaused = false;\n var isWeightActive = this.weightPending;\n\n if (this._currentState) {\n return this.resumeAnimation() || isWeightActive;\n } else {\n return isWeightActive;\n }\n }\n /**\r\n * Updates the user defined weight over time.\r\n *\r\n * @param {number} weight - The target weight value.\r\n * @param {number} [seconds=0] - The amount of time it will take to reach the\r\n * target weight.\r\n * @param {Function=} easingFn - The easing function to use for interpolation.\r\n *\r\n * @returns {Deferred}\r\n */\n\n }, {\n key: "setWeight",\n value: function setWeight(weight) {\n var seconds = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var easingFn = arguments.length > 2 ? arguments[2] : undefined;\n\n if (this.weightPending) {\n this._promises.weight.cancel();\n }\n\n weight = core_MathUtils.clamp(weight);\n this._promises.weight = animpack_AnimationUtils.interpolateProperty(this, \'weight\', weight, {\n seconds: seconds,\n easingFn: easingFn !== undefined ? easingFn : this._easingFn\n });\n return this._promises.weight;\n }\n /**\r\n * Pause any interpolation happening on the layer\'s weight property.\r\n *\r\n * @returns {boolean}\r\n */\n\n }, {\n key: "pauseWeight",\n value: function pauseWeight() {\n this._weightPaused = true;\n return this.weightPending;\n }\n /**\r\n * Resume any interpolation happening on the layer\'s weight property.\r\n *\r\n * @returns {boolean}\r\n */\n\n }, {\n key: "resumeWeight",\n value: function resumeWeight() {\n this._weightPaused = false;\n return this.weightPending;\n }\n /**\r\n * Multiplies the user weight by a factor to determine the internal weight.\r\n *\r\n * @param {number} factor - 0-1 multiplier to apply to the user weight.\r\n */\n\n }, {\n key: "updateInternalWeight",\n value: function updateInternalWeight(factor) {\n this._internalWeight = this._weight * factor;\n\n if (this._currentState) {\n this._currentState.updateInternalWeight(this._internalWeight);\n }\n }\n /**\r\n * Returns the names of blend states in an animation.\r\n *\r\n * @param {string} animationName - Name of the animation.\r\n *\r\n * @returns {Array.} - Names of blend states.\r\n */\n\n }, {\n key: "getAnimationBlendNames",\n value: function getAnimationBlendNames(animationName) {\n var state = this.getState(animationName);\n\n if (state === undefined) {\n throw new Error("Cannot get blend names of animation ".concat(animationName, " on layer ").concat(this.name, ". No animation exists with this name."));\n }\n\n if (state instanceof state_AbstractBlendState) {\n return state.getStateNames();\n }\n\n throw new Error("Cannot get blend names of animation ".concat(animationName, " on layer ").concat(this.name, ". Animation is not an instance of AbstractBlendState."));\n }\n /**\r\n * Update the weight for a blend state of an animation.\r\n *\r\n * @param {string} animationName - Name of the animation containing the blend state\r\n * to update.\r\n * @param {string} blendName - Name of the blend state to update.\r\n * @param {number} weight - Weight value to set on the animation. This number shoudld be\r\n * in the 0-1 range.\r\n * @param {number=} seconds - Number of seconds it should take to reach the new weight.\r\n * Default is zero and will set immediately.\r\n * @param {Function=} easingFn - Easing function to use while interpolating the new\r\n * weight. Default is Easing.Linear.InOut.\r\n *\r\n * @returns {Deferred} - Promise that will resolve once the animation\'s weight reaches\r\n * the target value.\r\n */\n\n }, {\n key: "setAnimationBlendWeight",\n value: function setAnimationBlendWeight(animationName, blendName, weight) {\n var seconds = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;\n var easingFn = arguments.length > 4 ? arguments[4] : undefined;\n var state = this.getState(animationName);\n\n if (state === undefined) {\n throw new Error("Cannot set blend weight of animation ".concat(animationName, " on layer ").concat(this.name, ". No animation exists with this name."));\n }\n\n if (state instanceof state_AbstractBlendState) {\n return state.setBlendWeight(blendName, weight, seconds, easingFn);\n }\n\n throw new Error("Cannot set blend weight of animation ".concat(animationName, " on layer ").concat(this.name, ". Animation is not an instance of AbstractBlendState."));\n }\n /**\r\n * Returns the weight for a blend state of an animation.\r\n *\r\n * @param {string} animationName - Name of the animation containing the blend state\r\n * to update.\r\n * @param {string} blendName - Name of the blend state to retrieve the weight of.\r\n *\r\n * @returns {number} - Weight of the blend state.\r\n */\n\n }, {\n key: "getAnimationBlendWeight",\n value: function getAnimationBlendWeight(animationName, blendName) {\n var state = this.getState(animationName);\n\n if (state === undefined) {\n throw new Error("Cannot get blend weight of animation ".concat(animationName, " on layer ").concat(this.name, ". No animation exists with this name."));\n }\n\n if (state instanceof state_AbstractBlendState) {\n return state.getBlendWeight(blendName);\n }\n\n throw new Error("Cannot get blend weight of animation ".concat(animationName, " on layer ").concat(this.name, ". Animation is not an instance of AbstractBlendState."));\n }\n /**\r\n * Update any weight interpolators and the current animation.\r\n *\r\n * @param {number} deltaTime - Time in milliseconds since the last update.\r\n */\n\n }, {\n key: "update",\n value: function update(deltaTime) {\n AnimationLayer_get(AnimationLayer_getPrototypeOf(AnimationLayer.prototype), "update", this).call(this, deltaTime);\n\n if (!this._paused && !this._weightPaused) {\n this._promises.weight.execute(deltaTime);\n }\n }\n /**\r\n * Cancel any pending promises and discard states controlled by the layer.\r\n */\n\n }, {\n key: "discard",\n value: function discard() {\n AnimationLayer_get(AnimationLayer_getPrototypeOf(AnimationLayer.prototype), "discard", this).call(this);\n\n this.discardStates();\n\n this._promises.weight.cancel();\n\n delete this._promises;\n }\n }]);\n\n return AnimationLayer;\n}(animpack_AnimationPlayerInterface.Mixin(state_StateContainerInterface.Mixin()));\n\n/* harmony default export */ var animpack_AnimationLayer = (AnimationLayer_AnimationLayer);\n// CONCATENATED MODULE: ./src/core/animpack/state/SingleState.js\nfunction SingleState_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { SingleState_typeof = function _typeof(obj) { return typeof obj; }; } else { SingleState_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return SingleState_typeof(obj); }\n\nfunction SingleState_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction SingleState_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction SingleState_createClass(Constructor, protoProps, staticProps) { if (protoProps) SingleState_defineProperties(Constructor.prototype, protoProps); if (staticProps) SingleState_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction SingleState_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) SingleState_setPrototypeOf(subClass, superClass); }\n\nfunction SingleState_setPrototypeOf(o, p) { SingleState_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return SingleState_setPrototypeOf(o, p); }\n\nfunction SingleState_createSuper(Derived) { var hasNativeReflectConstruct = SingleState_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = SingleState_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = SingleState_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return SingleState_possibleConstructorReturn(this, result); }; }\n\nfunction SingleState_possibleConstructorReturn(self, call) { if (call && (SingleState_typeof(call) === "object" || typeof call === "function")) { return call; } return SingleState_assertThisInitialized(self); }\n\nfunction SingleState_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction SingleState_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction SingleState_getPrototypeOf(o) { SingleState_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return SingleState_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n\n/**\r\n * Class for playing a single animation clip.\r\n *\r\n * @extends AbstractState\r\n * @alias core/SingleState\r\n */\n\nvar SingleState_SingleState = /*#__PURE__*/function (_AbstractState) {\n SingleState_inherits(SingleState, _AbstractState);\n\n var _super = SingleState_createSuper(SingleState);\n\n /**\r\n * @constructor\r\n *\r\n * @param {Object=} options - Options for the animation state.\r\n * @param {string=} options.name - Name for the animation state. Names must be\r\n * unique for the layer the state is applied to.\r\n * @param {weight} [options.weight=0] - The 0-1 amount of influence the state will have.\r\n * @param {timeScale} [options.timeScale=1] - Factor to scale the playback speed of the\r\n * animation.\r\n * @param {number} [options.loopCount=Infinity] - Number of times the animation should\r\n * repeat before finishing.\r\n * @param {string} [options.blendMode=DefaultLayerBlendMode] - Type of\r\n * blending the animation should use.\r\n */\n function SingleState() {\n var _this;\n\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n SingleState_classCallCheck(this, SingleState);\n\n _this = _super.call(this, options);\n _this._timeScale = options.timeScale !== undefined ? options.timeScale : 1;\n _this._promises.timeScale = core_Deferred.resolve();\n _this._loopCount = options.loopCount !== undefined ? options.loopCount : Infinity;\n _this._blendMode = validateBlendMode(options.blendMode);\n return _this;\n }\n /**\r\n * Gets and sets the normalized playing time of the current animation\r\n *\r\n * @type {number}\r\n */\n\n\n SingleState_createClass(SingleState, [{\n key: "normalizedTime",\n get: function get() {\n return 0;\n },\n set: function set(time) {}\n /**\r\n * Gets and sets the a factor to scale animation playback speed with.\r\n *\r\n * @type {number}\r\n */\n\n }, {\n key: "timeScale",\n get: function get() {\n return this._timeScale;\n },\n set: function set(timeScale) {\n this._timeScale = timeScale;\n }\n /**\r\n * Gets whether or not the timeScale is currently being animated.\r\n *\r\n * @readonly\r\n * @type {boolean}\r\n */\n\n }, {\n key: "timeScalePending",\n get: function get() {\n return this._promises.timeScale.pending;\n }\n /**\r\n * Updates the timeScale value over time.\r\n *\r\n * @param {number} weight - The target timeScale value.\r\n * @param {number} [seconds=0] - The amount of time it will take to reach the\r\n * target timeScale.\r\n * @param {Function=} easingFn - The easing function to use for interpolation.\r\n *\r\n * @returns {Deferred}\r\n */\n\n }, {\n key: "setTimeScale",\n value: function setTimeScale(timeScale) {\n var seconds = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var easingFn = arguments.length > 2 ? arguments[2] : undefined;\n\n this._promises.timeScale.cancel();\n\n this._promises.timeScale = animpack_AnimationUtils.interpolateProperty(this, \'timeScale\', timeScale, {\n seconds: seconds,\n easingFn: easingFn\n });\n return this._promises.timeScale;\n }\n /**\r\n * Gets and sets the number of times the animation will repeat before finishing.\r\n *\r\n * @type {number}\r\n */\n\n }, {\n key: "loopCount",\n get: function get() {\n return this._loopCount;\n },\n set: function set(loopCount) {\n this._loopCount = loopCount;\n }\n /**\r\n * Gets the type of blending used for the animation.\r\n *\r\n * @readonly\r\n * @type {string}\r\n */\n\n }, {\n key: "blendMode",\n get: function get() {\n return this._blendMode;\n }\n }]);\n\n return SingleState;\n}(state_AbstractState);\n\n/* harmony default export */ var state_SingleState = (SingleState_SingleState);\n// CONCATENATED MODULE: ./src/core/animpack/state/RandomAnimationState.js\nfunction RandomAnimationState_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { RandomAnimationState_typeof = function _typeof(obj) { return typeof obj; }; } else { RandomAnimationState_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return RandomAnimationState_typeof(obj); }\n\nfunction RandomAnimationState_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction RandomAnimationState_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction RandomAnimationState_createClass(Constructor, protoProps, staticProps) { if (protoProps) RandomAnimationState_defineProperties(Constructor.prototype, protoProps); if (staticProps) RandomAnimationState_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction RandomAnimationState_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { RandomAnimationState_get = Reflect.get; } else { RandomAnimationState_get = function _get(target, property, receiver) { var base = RandomAnimationState_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return RandomAnimationState_get(target, property, receiver || target); }\n\nfunction RandomAnimationState_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = RandomAnimationState_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction RandomAnimationState_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) RandomAnimationState_setPrototypeOf(subClass, superClass); }\n\nfunction RandomAnimationState_setPrototypeOf(o, p) { RandomAnimationState_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return RandomAnimationState_setPrototypeOf(o, p); }\n\nfunction RandomAnimationState_createSuper(Derived) { var hasNativeReflectConstruct = RandomAnimationState_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = RandomAnimationState_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = RandomAnimationState_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return RandomAnimationState_possibleConstructorReturn(this, result); }; }\n\nfunction RandomAnimationState_possibleConstructorReturn(self, call) { if (call && (RandomAnimationState_typeof(call) === "object" || typeof call === "function")) { return call; } return RandomAnimationState_assertThisInitialized(self); }\n\nfunction RandomAnimationState_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction RandomAnimationState_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction RandomAnimationState_getPrototypeOf(o) { RandomAnimationState_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return RandomAnimationState_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n\n/**\r\n * Class for playing random animations at random intervals within this state.\r\n *\r\n * @extends AbstractState\r\n * @implements AnimationPlayerInterface\r\n * @implements StateContainerInterface\r\n */\n\nvar RandomAnimationState_RandomAnimationState = /*#__PURE__*/function (_AnimationPlayerInter) {\n RandomAnimationState_inherits(RandomAnimationState, _AnimationPlayerInter);\n\n var _super = RandomAnimationState_createSuper(RandomAnimationState);\n\n /**\r\n * @constructor\r\n *\r\n * @param {Object} [options={}] - Options for the container state.\r\n * @param {number} [options.playInterval=3] - The base animation playback interval.\r\n * @param {Array.} [subStates=[]] - states to be randomly picked to play\r\n */\n function RandomAnimationState() {\n var _this;\n\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var subStates = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n\n RandomAnimationState_classCallCheck(this, RandomAnimationState);\n\n _this = _super.call(this, options);\n _this._playInterval = options.playInterval ? options.playInterval : 3;\n subStates.forEach(function (state) {\n _this.addState(state);\n });\n return _this;\n }\n /**\r\n * Gets and sets the base animation play interval\r\n *\r\n * @type {float}\r\n */\n\n\n RandomAnimationState_createClass(RandomAnimationState, [{\n key: "playInterval",\n get: function get() {\n return this._playInterval;\n },\n set: function set(playInterval) {\n this._playInterval = playInterval;\n }\n /**\r\n * Reset the internal timer for animation play interval\r\n *\r\n * @private\r\n */\n\n }, {\n key: "_resetTimer",\n value: function _resetTimer() {\n var _this2 = this;\n\n var playTimer = core_Utils.getRandomFloat(this._playInterval / 4, this._playInterval * 2);\n\n var onFinish = function onFinish() {\n _this2.playRandomAnimation(_this2._playCallbacks.onError);\n };\n\n this._promises.timer = core_Utils.wait(playTimer, {\n onFinish: onFinish\n });\n }\n }, {\n key: "updateInternalWeight",\n value: function updateInternalWeight(factor) {\n RandomAnimationState_get(RandomAnimationState_getPrototypeOf(RandomAnimationState.prototype), "updateInternalWeight", this).call(this, factor);\n\n if (this._currentState) {\n this._currentState.updateInternalWeight(this._internalWeight);\n }\n }\n /**\r\n * Pick a random animation and utilize AnimationPlayerInterface to play that animation\r\n *\r\n * @param {Function=} onError - Function to execute if the state encounters\r\n * an error during playback.\r\n */\n\n }, {\n key: "playRandomAnimation",\n value: function playRandomAnimation(onError) {\n this._resetTimer();\n\n var states = this.getStateNames();\n\n if (this._currentState) {\n states.splice(states.indexOf(this._currentState.name), 1);\n }\n\n var randomState = states[core_Utils.getRandomInt(0, states.length)];\n this.playAnimation(randomState, this._transitionTime, this._easingFn, undefined, onError, undefined);\n }\n }, {\n key: "play",\n value: function play(onFinish, onError, onCancel) {\n this.playRandomAnimation(onError);\n return RandomAnimationState_get(RandomAnimationState_getPrototypeOf(RandomAnimationState.prototype), "play", this).call(this, onFinish, onError, onCancel);\n }\n }, {\n key: "pause",\n value: function pause() {\n return RandomAnimationState_get(RandomAnimationState_getPrototypeOf(RandomAnimationState.prototype), "pause", this).call(this) && this.pauseAnimation();\n }\n }, {\n key: "resume",\n value: function resume(onFinish, onError, onCancel) {\n if (this._currentState) {\n this.resumeAnimation(this._currentState.name, this._transitionTime, this._easingFn, undefined, onError, undefined);\n }\n\n return RandomAnimationState_get(RandomAnimationState_getPrototypeOf(RandomAnimationState.prototype), "resume", this).call(this, onFinish, onError, onCancel);\n }\n }, {\n key: "cancel",\n value: function cancel() {\n return RandomAnimationState_get(RandomAnimationState_getPrototypeOf(RandomAnimationState.prototype), "cancel", this).call(this) && this.cancelAnimation();\n }\n }, {\n key: "stop",\n value: function stop() {\n return RandomAnimationState_get(RandomAnimationState_getPrototypeOf(RandomAnimationState.prototype), "stop", this).call(this) && this.stopAnimation();\n }\n }, {\n key: "discard",\n value: function discard() {\n RandomAnimationState_get(RandomAnimationState_getPrototypeOf(RandomAnimationState.prototype), "discard", this).call(this);\n\n this.discardStates();\n }\n }]);\n\n return RandomAnimationState;\n}(animpack_AnimationPlayerInterface.Mixin(state_StateContainerInterface.Mixin(state_AbstractState)));\n\n/* harmony default export */ var state_RandomAnimationState = (RandomAnimationState_RandomAnimationState);\n// CONCATENATED MODULE: ./src/core/animpack/AnimationFeature.js\nfunction AnimationFeature_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { AnimationFeature_typeof = function _typeof(obj) { return typeof obj; }; } else { AnimationFeature_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return AnimationFeature_typeof(obj); }\n\nfunction AnimationFeature_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction AnimationFeature_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { AnimationFeature_ownKeys(Object(source), true).forEach(function (key) { AnimationFeature_defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { AnimationFeature_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction AnimationFeature_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction AnimationFeature_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction AnimationFeature_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction AnimationFeature_createClass(Constructor, protoProps, staticProps) { if (protoProps) AnimationFeature_defineProperties(Constructor.prototype, protoProps); if (staticProps) AnimationFeature_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction AnimationFeature_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { AnimationFeature_get = Reflect.get; } else { AnimationFeature_get = function _get(target, property, receiver) { var base = AnimationFeature_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return AnimationFeature_get(target, property, receiver || target); }\n\nfunction AnimationFeature_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = AnimationFeature_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction AnimationFeature_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) AnimationFeature_setPrototypeOf(subClass, superClass); }\n\nfunction AnimationFeature_setPrototypeOf(o, p) { AnimationFeature_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return AnimationFeature_setPrototypeOf(o, p); }\n\nfunction AnimationFeature_createSuper(Derived) { var hasNativeReflectConstruct = AnimationFeature_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = AnimationFeature_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = AnimationFeature_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return AnimationFeature_possibleConstructorReturn(this, result); }; }\n\nfunction AnimationFeature_possibleConstructorReturn(self, call) { if (call && (AnimationFeature_typeof(call) === "object" || typeof call === "function")) { return call; } return AnimationFeature_assertThisInitialized(self); }\n\nfunction AnimationFeature_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction AnimationFeature_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction AnimationFeature_getPrototypeOf(o) { AnimationFeature_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return AnimationFeature_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n\n\n\n\n\n\n\n/**\r\n * Enum for animation state classes.\r\n *\r\n * @readonly\r\n * @enum {Class}\r\n */\n\nvar AnimationTypes = {\n single: state_SingleState,\n freeBlend: state_FreeBlendState,\n queue: state_QueueState,\n randomAnimation: state_RandomAnimationState,\n blend1d: state_Blend1dState,\n blend2d: state_Blend2dState\n};\n/**\r\n * Feature for managing animations on an object.\r\n *\r\n * @extends AbstractHostFeature\r\n * @alias core/AnimationFeature\r\n *\r\n * @property {Object} EVENTS - Built-in messages that the feature emits. When the\r\n * feature is added to a {@link core/HostObject}, event names will be prefixed by the\r\n * name of the feature class + \'.\'.\r\n * @property {string} [EVENTS.addLayer=onAddLayerEvent] - Message that is emitted after\r\n * [addLayer]{@link core/AnimationFeature#addLayer} has been successfully executed.\r\n * An object representing the name of the layer that was added and its index in\r\n * the layer stack with the signature {name: string, index: number} is supplied\r\n * as an argument to listener functions.\r\n * @property {string} [EVENTS.removeLayer=onRemoveLayerEvent] - Message that is\r\n * emitted after [removeLayer]{@link core/AnimationFeature#removeLayer} has been\r\n * successfully executed. An object representing the name of the layer that was\r\n * removed and its index in the layer stack with the signature {name: string, index: number}\r\n * is supplied as an argument to listener functions.\r\n * @property {string} [EVENTS.renameLayer=onRenameLayerEvent] - Message that is\r\n * emitted after [renameLayer]{@link core/AnimationFeature#renameLayer} has been\r\n * successfully executed. An object representing the original name of the layer\r\n * that was renamed and its updated name with the signature {oldName: string, newName: string}\r\n * is supplied as an argument to listener functions.\r\n * @property {string} [EVENTS.addAnimation=onAddAnimationEvent] - Message that is\r\n * emitted after [addAnimation]{@link core/AnimationFeature#addAnimation} has been\r\n * successfully executed. An object representing the name of the layer that the\r\n * animation was added to and the name of the animation that was added with the\r\n * signature {layerName: string, animationName: string} is supplied as an argument\r\n * to listener functions.\r\n * @property {string} [EVENTS.removeAnimation=onRemovedAnimationEvent] - Message\r\n * that is emitted after [removeAnimation]{@link core/AnimationFeature#removeAnimation}\r\n * has been successfully executed. An object representing the name of the layer\r\n * that the animation was removed from and the name of the animation that was removed\r\n * with the signature {layerName: string, animationName: string} is supplied as\r\n * an argument to listener functions.\r\n * @property {string} [EVENTS.renameAnimation=onRenameAnimationEvent] - Message\r\n * that is emitted after [renameAnimation]{@link core/AnimationFeature#renameAnimation}\r\n * has been successfully executed. An object representing the name of the layer\r\n * that contains the animation that was renamed, the original name of the animation\r\n * that was renamed and its updated name with the signature {layerName: string, oldName: string, newName: string}\r\n * is supplied as an argument to listener functions.\r\n * @property {string} [EVENTS.play=onPlayEvent] - Message that is emitted after\r\n * each call to [play]{@link core/AnimationFeature#playAnimation}. An object representing\r\n * the name of the layer contains the animation that was played and the name of\r\n * the animation that was played with the signature {layerName: string, animationName: string}\r\n * is supplied as an argument to listener functions.\r\n * @property {string} [EVENTS.pause=onPauseEvent] - Message that is emitted after\r\n * each call to [pause]{@link core/AnimationFeature#pauseAnimation}. An object representing\r\n * the name of the layer contains the animation that was paused and the name of\r\n * the animation that was paused with the signature {layerName: string, animationName: string}\r\n * is supplied as an argument to listener functions.\r\n * @property {string} [EVENTS.resume=onResumeEvent] - Message that is emitted after\r\n * each call to [resume]{@link core/AnimationFeature#resumeAnimation}. An object representing\r\n * the name of the layer contains the animation that was resumed and the name of\r\n * the animation that was resumed with the signature {layerName: string, animationName: string}\r\n * is supplied as an argument to listener functions.\r\n * @property {string} [EVENTS.interrupt=onInterruptEvent] - Message that is emitted\r\n * if there is a current speech in progress and [play]{@link core/AnimationFeature#playAnimation}\r\n * or [resume]{@link core/AnimationFeature#resumeAnimation} are executed for a new speech.\r\n * An object representing the name of the layer contains the animation that was\r\n * interrupted and the name of the animation that was interrupted with the signature\r\n * {layerName: string, animationName: string} is supplied as an argument to listener\r\n * functions.\r\n * @property {string} [EVENTS.stop=onStopEvent] - Message that is emitted after\r\n * each call to [stop]{@link core/AnimationFeature#stopAnimation} and when a speech reaches\r\n * the end of playback. An object representing\r\n * the name of the layer contains the animation that was stopped and the name of\r\n * the animation that was stopped with the signature {layerName: string, animationName: string}\r\n * is supplied as an argument to listener functions.\r\n */\n\nvar AnimationFeature_AnimationFeature = /*#__PURE__*/function (_AbstractHostFeature) {\n AnimationFeature_inherits(AnimationFeature, _AbstractHostFeature);\n\n var _super = AnimationFeature_createSuper(AnimationFeature);\n\n /**\r\n * @constructor\r\n *\r\n * @param {core/HostObject} host - Host object that owns the feature.\r\n */\n function AnimationFeature(host) {\n var _this;\n\n AnimationFeature_classCallCheck(this, AnimationFeature);\n\n _this = _super.call(this, host);\n _this._layers = [];\n _this._layerMap = {};\n _this._paused = false;\n return _this;\n }\n /**\r\n * Make sure a supplied layer index is within the range of layers.\r\n *\r\n * @private\r\n *\r\n * @param {number} index\r\n * @param {boolean} [existing=true] - Whether the index represents and existing\r\n * layer or a new layer to be added.\r\n *\r\n * @returns {number=}\r\n */\n\n\n AnimationFeature_createClass(AnimationFeature, [{\n key: "_validateIndex",\n value: function _validateIndex(index) {\n var existing = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\n // Index is invalid if there are no layers and we\'re checking for an existing layer index\n if (this._layers.length === 0 && existing) {\n return undefined;\n }\n\n var lastIndex = existing ? this._layers.length - 1 : this._layers.length; // Count from the end of the array for negative indices\n\n if (index < 0) {\n index = lastIndex + index + 1;\n }\n\n if (index < 0 || index > lastIndex) {\n return undefined;\n } else {\n return index;\n }\n }\n /**\r\n * Re-evaluate internal weight values of layers starting from the top of the\r\n * stack. Override layers\' weights affect the values of all layers lower in the\r\n * stack.\r\n *\r\n * @private\r\n */\n\n }, {\n key: "_updateInternalWeights",\n value: function _updateInternalWeights() {\n var numLayers = this._layers.length;\n var weightMultiplier = 1; // Update internal weight values on layers in reverse order\n\n for (var i = numLayers - 1; i >= 0; i--) {\n var layer = this._layers[i];\n layer.updateInternalWeight(weightMultiplier); // If the layer is override, update the multiplier with the remainder of the full weight\n\n if (layer.blendMode === LayerBlendModes.Override && layer.currentState) {\n weightMultiplier *= 1 - layer.currentState.internalWeight;\n }\n }\n }\n /**\r\n * Return a new instance of a SingleState.\r\n *\r\n * @private\r\n *\r\n * @param {Object} options - Options to pass to the SingleState constructor.\r\n * @param {string=} options.name - Name for the animation state. Names must be\r\n * unique for the layer the state is applied to.\r\n * @param {weight} [options.weight=0] - The 0-1 amount of influence the state will have.\r\n * @param {timeScale} [options.timeScale=1] - Factor to scale the playback speed of the\r\n * animation.\r\n * @param {number} [options.loopCount=Infinity] - Number of times the animation should\r\n * repeat before finishing.\r\n * @param {string} [options.blendMode=LayerBlendModes[DefaultLayerBlendMode]] - Type of\r\n * blending the animation should use.\r\n *\r\n * @returns {core/SingleState}\r\n */\n\n }, {\n key: "_createSingleState",\n value: function _createSingleState(options) {\n return new state_SingleState(options);\n }\n /**\r\n * Return a new instance of a FreeBlendState.\r\n *\r\n * @private\r\n *\r\n * @param {Object} options - Options to pass to the FreeBlendState constructor.\r\n * @param {string=} options.name - Name for the animation state. Names must be\r\n * unique for the layer the state is applied to.\r\n * @param {weight} [options.weight=0] - The 0-1 amount of influence the state will have.\r\n * @param {timeScale} [options.timeScale=1] - Factor to scale the playback speed of the\r\n * animation.\r\n * @param {number} [options.loopCount=Infinity] - Number of times the animation should\r\n * repeat before finishing.\r\n * @param {string} [options.blendMode=LayerBlendModes[DefaultLayerBlendMode]] - Type of\r\n * blending the animation should use.\r\n * @param {Array.} [options.blendStateOptions] - Array of options used to create the\r\n * blend states for this container.\r\n *\r\n * @returns {FreeBlendState}\r\n */\n\n }, {\n key: "_createFreeBlendState",\n value: function _createFreeBlendState(options) {\n var _this2 = this;\n\n var _options$blendStateOp = options.blendStateOptions,\n blendStateOptions = _options$blendStateOp === void 0 ? [] : _options$blendStateOp;\n var blendStates = [];\n blendStateOptions.forEach(function (blendOptions) {\n blendStates.push(_this2._createSingleState(AnimationFeature_objectSpread(AnimationFeature_objectSpread({}, blendOptions), {}, {\n blendMode: options.blendMode\n })));\n });\n return new state_FreeBlendState(options, blendStates);\n }\n /**\r\n * Return a new instance of a QueueState.\r\n *\r\n * @private\r\n *\r\n * @param {Object} options - Options to pass to the QueueState constructor.\r\n * @param {string=} options.name - Name for the animation state. Names must be\r\n * unique for the layer the state is applied to.\r\n * @param {number} [options.weight=0] - The 0-1 amount of influence the state will have.\r\n * @param {number=} options.transitionTime - The amount of time it takes to transition\r\n * between queued states.\r\n * @param {string} [options.blendMode=LayerBlendModes[DefaultLayerBlendMode]] - Type of\r\n * blending the animation should use.\r\n * @param {Array.} [options.queueOptions] - Array of options used to create the\r\n * queue states for this container.\r\n *\r\n * @returns {QueueState}\r\n */\n\n }, {\n key: "_createQueueState",\n value: function _createQueueState(options) {\n var _this3 = this;\n\n var _options$queueOptions = options.queueOptions,\n queueOptions = _options$queueOptions === void 0 ? [] : _options$queueOptions;\n var queueStates = queueOptions.map(function (queueOption) {\n return _this3._createSingleState(AnimationFeature_objectSpread(AnimationFeature_objectSpread({\n transitionTime: options.transitionTime\n }, queueOption), {}, {\n blendMode: options.blendMode\n }));\n });\n return new state_QueueState(options, queueStates);\n }\n /**\r\n * Return a new instance of a Blend1dState.\r\n *\r\n * @private\r\n *\r\n * @param {Object} options - Options to pass to the Blend1dState constructor.\r\n * @param {string=} options.name - Name for the animation state. Names must be\r\n * unique for the layer the state is applied to.\r\n * @param {weight} [options.weight=0] - The 0-1 amount of influence the state will have.\r\n * @param {timeScale} [options.timeScale=1] - Factor to scale the playback speed of the\r\n * animation.\r\n * @param {number} [options.loopCount=Infinity] - Number of times the animation should\r\n * repeat before finishing.\r\n * @param {string} [options.blendMode=LayerBlendModes[DefaultLayerBlendMode]] - Type of\r\n * blending the animation should use.\r\n * @param {Array.} [options.blendStateOptions] - Array of options used to create the\r\n * blend states for this container.\r\n * @param {Array.} [options.blendThresholds] - Array of numbers used to set the\r\n * thresholds for each blend state in this container.\r\n * @param {Array.} [options.blendMatchPhases=[]] - Optional array of booleans used to\r\n * set whether or not each blend state in this container will match phases.\r\n *\r\n * @returns {Blend1dState}\r\n */\n\n }, {\n key: "_createBlend1dState",\n value: function _createBlend1dState(options) {\n var _this4 = this;\n\n var _options$blendStateOp2 = options.blendStateOptions,\n blendStateOptions = _options$blendStateOp2 === void 0 ? [] : _options$blendStateOp2;\n var _options$blendThresho = options.blendThresholds,\n blendThresholds = _options$blendThresho === void 0 ? [] : _options$blendThresho;\n var _options$blendMatchPh = options.blendMatchPhases,\n blendMatchPhases = _options$blendMatchPh === void 0 ? [] : _options$blendMatchPh;\n var blendStates = [];\n blendStateOptions.forEach(function (blendOptions) {\n blendStates.push(_this4._createSingleState(AnimationFeature_objectSpread(AnimationFeature_objectSpread({}, blendOptions), {}, {\n blendMode: options.blendMode\n })));\n });\n return new state_Blend1dState(options, blendStates, blendThresholds, blendMatchPhases);\n }\n /**\r\n * Return a new instance of a Blend2dState.\r\n *\r\n * @private\r\n *\r\n * @param {Object} options - Options to pass to the Blend1dState constructor.\r\n * @param {string=} options.name - Name for the animation state. Names must be\r\n * unique for the layer the state is applied to.\r\n * @param {weight} [options.weight=0] - The 0-1 amount of influence the state will have.\r\n * @param {timeScale} [options.timeScale=1] - Factor to scale the playback speed of the\r\n * animation.\r\n * @param {number} [options.loopCount=Infinity] - Number of times the animation should\r\n * repeat before finishing.\r\n * @param {string} [options.blendMode=LayerBlendModes[DefaultLayerBlendMode]] - Type of\r\n * blending the animation should use.\r\n * @param {Array.} [options.blendStateOptions] - Array of options used to create the\r\n * blend states for this container.\r\n * @param {Array.>} [options.blendThresholds] - Array of Array of numbers used to set the\r\n * thresholds for each blend state in this container.\r\n * @param {Array.} [options.blendMatchPhases=[]] - Optional array of booleans used to\r\n * set whether or not each blend state in this container will match phases.\r\n *\r\n * @returns {Blend1dState}\r\n */\n\n }, {\n key: "_createBlend2dState",\n value: function _createBlend2dState(options) {\n var _this5 = this;\n\n var _options$blendStateOp3 = options.blendStateOptions,\n blendStateOptions = _options$blendStateOp3 === void 0 ? [] : _options$blendStateOp3;\n var _options$blendThresho2 = options.blendThresholds,\n blendThresholds = _options$blendThresho2 === void 0 ? [] : _options$blendThresho2;\n var _options$blendMatchPh2 = options.blendMatchPhases,\n blendMatchPhases = _options$blendMatchPh2 === void 0 ? [] : _options$blendMatchPh2;\n var blendStates = [];\n blendStateOptions.forEach(function (blendOptions) {\n blendStates.push(_this5._createSingleState(AnimationFeature_objectSpread(AnimationFeature_objectSpread({}, blendOptions), {}, {\n blendMode: options.blendMode\n })));\n });\n return new state_Blend2dState(options, blendStates, blendThresholds, blendMatchPhases);\n }\n /**\r\n * Return a new instance of a RandomAnimationState.\r\n *\r\n * @private\r\n *\r\n * @param {Object} options - Options to pass to the RandomAnimationState constructor.\r\n * @param {string=} options.name - Name for the animation state. Names must be\r\n * unique for the layer the state is applied to.\r\n * @param {number} [options.playInterval=3] - The base animation playback interval.\r\n * @param {Array.} [options.subStateOptions] - Array of options used to create the\r\n * sub states for this container.\r\n *\r\n * @returns {RandomAnimationState}\r\n */\n\n }, {\n key: "_createRandomAnimationState",\n value: function _createRandomAnimationState(options) {\n var _this6 = this;\n\n var _options$subStateOpti = options.subStateOptions,\n subStateOptions = _options$subStateOpti === void 0 ? [] : _options$subStateOpti;\n var subStates = [];\n subStateOptions.forEach(function (subStateOptions) {\n subStates.push(_this6._createSingleState(AnimationFeature_objectSpread(AnimationFeature_objectSpread({}, subStateOptions), {}, {\n blendMode: options.blendMode\n })));\n });\n return new state_RandomAnimationState(options, subStates);\n }\n /**\r\n * Make sure the layer with the given name exists and return a unique version\r\n * of the animation name supplied for that layer.\r\n *\r\n * @private\r\n *\r\n * @param {string} layerName - Name of the layer to check against.\r\n * @param {string} animationName - Name of the animation to validate.\r\n *\r\n * @returns {string} Validated animation name.\r\n */\n\n }, {\n key: "_validateNewAnimation",\n value: function _validateNewAnimation(layerName, animationName) {\n // Make sure the layerName is valid\n var layer = this._layerMap[layerName];\n\n if (layer === undefined) {\n throw new Error("Cannot add animation to layer ".concat(layerName, " from host ").concat(this._host.id, ". No layer exists with this name."));\n } // Make sure the animationName is unique\n\n\n var name = core_Utils.getUniqueName(animationName, layer.getStateNames());\n\n if (name !== animationName) {\n console.warn("Animation name ".concat(animationName, " is not unique for layer ").concat(layer.name, ". Animation will be renamed to ").concat(name, "."));\n }\n\n return name;\n }\n /**\r\n * Gets whether or not all animations are paused.\r\n *\r\n * @readonly\r\n * @type {boolean}\r\n */\n\n }, {\n key: "paused",\n get: function get() {\n return this._paused;\n }\n /**\r\n * Gets an array of names of animation layers.\r\n *\r\n * @readonly\r\n * @type {Array.}\r\n */\n\n }, {\n key: "layers",\n get: function get() {\n return this._layers.map(function (layer) {\n return layer.name;\n });\n }\n /**\r\n * Create and store a new animation layer.\r\n *\r\n * @param {string} [name=\'NewLayer\'] - Name for the layer.\r\n * @param {Object} [options={}] - Options to pass to {@link AnimationLayer#constructor}\r\n * @param {index=} index - Index to insert the new layer at. If none is provided\r\n * it will be added to the end of the stack.\r\n *\r\n * @returns {number} Index of the new layer.\r\n */\n\n }, {\n key: "addLayer",\n value: function addLayer() {\n var name = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : \'NewLayer\';\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var index = arguments.length > 2 ? arguments[2] : undefined;\n var numLayers = this._layers.length;\n var layerIndex = index; // Make sure the given index is within the range of layers\n\n if (index === undefined || index === -1) {\n layerIndex = this._layers.length;\n } else {\n layerIndex = this._validateIndex(index, false);\n\n if (layerIndex === undefined) {\n // Insert at the beginning if the user passed in a negative index\n if (index < 0) {\n layerIndex = 0;\n } // Otherwise append to the end\n else {\n layerIndex = this._layers.length;\n }\n\n console.warn("Index ".concat(index, " is invalid for host ").concat(this._host.id, ". New layer will be added at the closest valid index: ").concat(layerIndex, "."));\n }\n } // Make sure the layer name is unique\n\n\n var layerName = core_Utils.getUniqueName(name, Object.keys(this._layerMap));\n\n if (name !== layerName) {\n console.warn("Layer name ".concat(name, " is not unique. New layer will be added with the name ").concat(layerName, "."));\n }\n\n var layer = new animpack_AnimationLayer(AnimationFeature_objectSpread(AnimationFeature_objectSpread({}, options), {}, {\n name: layerName\n }));\n this._layerMap[layerName] = layer;\n\n if (layerIndex === numLayers) {\n this._layers.push(layer);\n } else {\n this._layers.splice(layerIndex, 0, layer);\n } // Notify that a layer has been added to the feature\n\n\n var eventData = {\n name: layerName,\n index: layerIndex\n };\n this.emit(this.constructor.EVENTS.addLayer, eventData);\n return eventData;\n }\n /**\r\n * Remove an animation layer from the stack. Animations on this layer will no\r\n * longer be evaluated.\r\n *\r\n * @param {string} name - Name for the layer to remove.\r\n *\r\n * @returns {boolean} Whether or not removal was successful.\r\n */\n\n }, {\n key: "removeLayer",\n value: function removeLayer(name) {\n var layer = this._layerMap[name];\n\n if (layer === undefined) {\n console.warn("Did not remove layer ".concat(name, " from host ").concat(this._host.id, ". No layer exists with this name."));\n return false;\n }\n\n layer.discard();\n\n var index = this._layers.indexOf(layer);\n\n this._layers.splice(index, 1);\n\n delete this._layerMap[name]; // Notify that a layer has been removed from the feature\n\n this.emit(this.constructor.EVENTS.removeLayer, {\n name: name,\n index: index\n });\n return true;\n }\n /**\r\n * Re-order the layer stack so that the layer with the given name is positioned\r\n * at the given index.\r\n *\r\n * @param {string} name - Name of the layer to move.\r\n * @param {number} index - New index to position the layer at.\r\n *\r\n * @returns {number} The new index of the layer\r\n */\n\n }, {\n key: "moveLayer",\n value: function moveLayer(name, index) {\n // Make sure the name is valid\n var layer = this._layerMap[name];\n\n if (layer === undefined) {\n throw new Error("Cannot move layer ".concat(name, " from host ").concat(this._host.id, ". No layer exists with this name."));\n } // Make sure the index falls in the range of existing layers\n\n\n var layerIndex = this._validateIndex(index, true);\n\n var lastIndex = this._layers.length - 1;\n\n if (layerIndex === undefined) {\n throw new Error("Cannot move layer ".concat(name, " from host ").concat(this._host.id, " to index ").concat(index, ". Index must be in the 0 - ").concat(lastIndex, " range."));\n }\n\n var currentIndex = this._layers.indexOf(layer);\n\n if (currentIndex === layerIndex) {\n return;\n } // Remove from the current position\n\n\n this._layers.splice(currentIndex, 1); // Insert at the new position\n\n\n if (layerIndex === lastIndex) {\n this._layers.push(layer);\n } else {\n this._layers.splice(layerIndex, 0, layer);\n }\n\n return layerIndex;\n }\n /**\r\n * Update the name of a layer. Names must be unique, if the new name is not\r\n * unique it will have trailing numbers appended until it is unique.\r\n *\r\n * @param {string} currentName - Current name of the layer.\r\n * @param {string} newName - New name to set on the layer.\r\n *\r\n * @returns {string} The new name of the layer\r\n */\n\n }, {\n key: "renameLayer",\n value: function renameLayer(currentName, newName) {\n // Make sure the name is valid\n var layer = this._layerMap[currentName];\n\n if (layer === undefined) {\n throw new Error("Cannot rename layer ".concat(currentName, " from host ").concat(this._host.id, ". No layer exists with this name."));\n } // Make sure the layer name is unique\n\n\n var name = core_Utils.getUniqueName(newName, Object.keys(this._layerMap));\n\n if (name !== newName) {\n console.warn("Layer name ".concat(newName, " is not unique. Layer will be renamed to ").concat(name, "."));\n }\n\n delete this._layerMap[currentName];\n this._layerMap[name] = layer;\n layer.name = name; // Notify that a layer has been renamed on the feature\n\n this.emit(this.constructor.EVENTS.renameLayer, {\n oldName: currentName,\n newName: name\n });\n return name;\n }\n /**\r\n * Return the weight of an animation layer.\r\n *\r\n * @param {string} name - Name of the layer to return weight from.\r\n *\r\n * @returns {number}\r\n */\n\n }, {\n key: "getLayerWeight",\n value: function getLayerWeight(name) {\n // Make sure the name is valid\n var layer = this._layerMap[name];\n\n if (layer === undefined) {\n throw new Error("Cannot get weight on layer ".concat(name, " from host ").concat(this._host.id, ". No layer exists with this name."));\n }\n\n return layer.weight;\n }\n /**\r\n * Update the weight of an animation layer.\r\n *\r\n * @param {string} name - The name of the layer to update.\r\n * @param {number} weight - The weight value to set on the layer. This number\r\n * should be in the 0-1 range.\r\n * @param {number=} seconds - The number of seconds it should take to reach the\r\n * new weight. Default is zero and will set immediately.\r\n * @param {Function=} easingFn - The easing function to use while interpolating\r\n * the weight. Default is Easing.Linear.InOut.\r\n *\r\n * @returns {Deferred} A promise that will resolve once the layer\'s weight reaches\r\n * the target value.\r\n */\n\n }, {\n key: "setLayerWeight",\n value: function setLayerWeight(name, weight, seconds, easingFn) {\n // Make sure the name is valid\n var layer = this._layerMap[name];\n\n if (layer === undefined) {\n var e = "Cannot set weight on layer ".concat(name, " from host ").concat(this._host.id, ". No layer exists with this name.");\n return core_Deferred.reject(e);\n }\n\n return layer.setWeight(weight, seconds, easingFn);\n }\n /**\r\n * Returns the names of blend states in an animation in a layer.\r\n *\r\n * @param {string} layerName - Name of the layer containing the animation containing\r\n * the blend state to update.\r\n * @param {string} animationName - Name of the animation containing the blend state\r\n * to update.\r\n *\r\n * @returns {Array.} - Names of blend states.\r\n */\n\n }, {\n key: "getAnimationBlendNames",\n value: function getAnimationBlendNames(layerName, animationName) {\n var layer = this._layerMap[layerName];\n\n if (layer === undefined) {\n throw new Error("Cannot get blend names on layer ".concat(layerName, " from host ").concat(this._host.id, ". No layer exists with this name."));\n }\n\n return layer.getAnimationBlendNames(animationName);\n }\n /**\r\n * Update the weight for a blend state in an animation in a layer.\r\n *\r\n * @param {string} layerName - Name of the layer containing the animation containing\r\n * the blend state to update.\r\n * @param {string} animationName - Name of the animation containing the blend state\r\n * to update.\r\n * @param {string} blendName - Name of the blend state to update.\r\n * @param {number} weight - Weight value to set on the animation. This number shoudld be\r\n * in the 0-1 range.\r\n * @param {number=} seconds - Number of seconds it should take to reach the new weight.\r\n * Default is zero and will set immediately.\r\n * @param {Function=} easingFn - Easing function to use while interpolating the new\r\n * weight. Default is Easing.Linear.InOut.\r\n *\r\n * @returns {Deferred} - Promise that will resolve once the animation\'s weight reaches\r\n * the target value.\r\n */\n\n }, {\n key: "setAnimationBlendWeight",\n value: function setAnimationBlendWeight(layerName, animationName, blendName, weight, seconds, easingFn) {\n var layer = this._layerMap[layerName];\n\n if (layer === undefined) {\n var e = "Cannot set blend weight on layer ".concat(layerName, " from host ").concat(this._host.id, ". No layer exists with this name.");\n return core_Deferred.reject(e);\n }\n\n return layer.setAnimationBlendWeight(animationName, blendName, weight, seconds, easingFn);\n }\n /**\r\n * Returns the weight for a blend state in an animation in a layer.\r\n *\r\n * @param {string} layerName - Name of the layer containing the animation containing\r\n * the blend state to update.\r\n * @param {string} animationName - Name of the animation containing the blend state\r\n * to update.\r\n * @param {string} blendName - Name of the blend state to update.\r\n *\r\n * @returns {number} - Weight of the blend state.\r\n */\n\n }, {\n key: "getAnimationBlendWeight",\n value: function getAnimationBlendWeight(layerName, animationName, blendName) {\n var layer = this._layerMap[layerName];\n\n if (layer === undefined) {\n throw new Error("Cannot get blend weight on layer ".concat(layerName, " from host ").concat(this._host.id, ". No layer exists with this name."));\n }\n\n return layer.getAnimationBlendWeight(animationName, blendName);\n }\n /**\r\n * Pause weight interpolation animation on a layer with the given name.\r\n *\r\n * @param {string} name - Name of the layer to pause.\r\n *\r\n * @returns {boolean} - Whether or not there was an existing interpolation to pause.\r\n */\n\n }, {\n key: "pauseLayerWeight",\n value: function pauseLayerWeight(name) {\n // Make sure the name is valid\n var layer = this._layerMap[name];\n\n if (layer === undefined) {\n throw new Error("Cannot pause weight interpolation on layer ".concat(name, " from host ").concat(this._host.id, ". No layer exists with this name."));\n }\n\n return layer.pauseWeight();\n }\n /**\r\n * Resume weight interpolation animation on a layer with the given name.\r\n *\r\n * @param {string} name - Name of the layer to resume.\r\n *\r\n * @returns {Deferred} - Resolves once the layer\'s weight reaches its target value.\r\n */\n\n }, {\n key: "resumeLayerWeight",\n value: function resumeLayerWeight(name) {\n // Make sure the name is valid\n var layer = this._layerMap[name];\n\n if (layer === undefined) {\n var e = "Cannot resume weight interpolation on layer ".concat(name, " from host ").concat(this._host.id, ". No layer exists with this name.");\n return core_Deferred.reject(e);\n }\n\n return layer.resumeWeight();\n }\n /**\r\n * Pause current animation and weight interpolation animation on a layer with\r\n * the given name.\r\n *\r\n * @param {string} name - Name of the layer to pause.\r\n *\r\n * @returns {boolean} - Whether or not there was an existing interpolation or\r\n * current animation to pause.\r\n */\n\n }, {\n key: "pauseLayer",\n value: function pauseLayer(name) {\n // Make sure the name is valid\n var layer = this._layerMap[name];\n\n if (layer === undefined) {\n throw new Error("Cannot pause layer ".concat(name, " from host ").concat(this._host.id, ". No layer exists with this name."));\n }\n\n return layer.pause();\n }\n /**\r\n * Resume current animation and weight interpolation animation on a layer with\r\n * the given name.\r\n *\r\n * @param {string} name - Name of the layer to resume.\r\n *\r\n * @returns {Deferred} - Resolves once the layer\'s weight reaches its target value\r\n * and it\'s current animation finishes playing.\r\n */\n\n }, {\n key: "resumeLayer",\n value: function resumeLayer(name) {\n // Make sure the name is valid\n var layer = this._layerMap[name];\n\n if (layer === undefined) {\n var e = "Cannot resume layer ".concat(name, " from host ").concat(this._host.id, ". No layer exists with this name.");\n return core_Deferred.reject(e);\n }\n\n return layer.resume();\n }\n /**\r\n * Return whether or not the animation layer with the given name is currently\r\n * transitioning between animations.\r\n *\r\n * @param {string} layerName - Name of the layer to check.\r\n *\r\n * @returns {boolean}\r\n */\n\n }, {\n key: "getTransitioning",\n value: function getTransitioning(layerName) {\n // Make sure the layerName is valid\n var layer = this._layerMap[layerName];\n\n if (layer === undefined) {\n throw new Error("Get transitioning on layer ".concat(layerName, " from host ").concat(this._host.id, ". No layer exists with this name."));\n }\n\n return layer.isTransitioning;\n }\n /**\r\n * Return an array of the names of all states the layer with the given name controls.\r\n *\r\n * @param {string} layerName - Name of the layer to search.\r\n *\r\n * @returns {Array.}\r\n */\n\n }, {\n key: "getAnimations",\n value: function getAnimations(layerName) {\n // Make sure the layerName is valid\n var layer = this._layerMap[layerName];\n\n if (layer === undefined) {\n throw new Error("Get animations on layer ".concat(layerName, " from host ").concat(this._host.id, ". No layer exists with this name."));\n }\n\n return layer.getStateNames();\n }\n /**\r\n * Return the name of the state currently active on the layer with the given name.\r\n * Return null if there is no current animation for the layer.\r\n *\r\n * @param {string} layerName - Name of the layer.\r\n *\r\n * @returns {(string|null)}\r\n */\n\n }, {\n key: "getCurrentAnimation",\n value: function getCurrentAnimation(layerName) {\n // Make sure the layerName is valid\n var layer = this._layerMap[layerName];\n\n if (layer === undefined) {\n throw new Error("Get current animation on layer ".concat(layerName, " from host ").concat(this._host.id, ". No layer exists with this name."));\n }\n\n return layer.currentAnimation;\n }\n /**\r\n * Return whether or not a layer with the given name is currently playing an\r\n * animation and that animation is paused.\r\n *\r\n * @param {string} layerName - Name of the layer.\r\n *\r\n * @returns {boolean}\r\n */\n\n }, {\n key: "getPaused",\n value: function getPaused(layerName) {\n // Make sure the layerName is valid\n var layer = this._layerMap[layerName];\n\n if (layer === undefined) {\n throw new Error("Get paused on layer ".concat(layerName, " from host ").concat(this._host.id, ". No layer exists with this name."));\n }\n\n return layer.currentState && layer.currentState.paused;\n }\n /**\r\n * Return the type name of the given animation. @see AnimationTypes.\r\n *\r\n * @param {string} layerName - Name of the layer that contains the animation.\r\n * @param {string} animationName - Name of the animation to check.\r\n *\r\n * @returns {string}\r\n */\n\n }, {\n key: "getAnimationType",\n value: function getAnimationType(layerName, animationName) {\n // Make sure the layerName is valid\n var layer = this._layerMap[layerName];\n\n if (layer === undefined) {\n throw new Error("Get animation type on layer ".concat(layerName, " from host ").concat(this._host.id, ". No layer exists with this name."));\n }\n\n var state = layer.getState(animationName);\n\n if (state === undefined) {\n throw new Error("Get animation type for animation ".concat(animationName, " on layer ").concat(layerName, " from host ").concat(this._host.id, ". No animation exists with this name."));\n }\n\n var constructor = state.constructor;\n return Object.keys(AnimationTypes).find(function (typeName) {\n return AnimationTypes[typeName] === constructor;\n });\n }\n /**\r\n * Add a new animation to an animation layer.\r\n *\r\n * @param {string} layerName - Name of the layer to add the animation to.\r\n * @param {string} animationName - Name to use when calling the animation.\r\n * @param {Object=} options - Options to pass to the constructor for the new\r\n * SingleState animation.\r\n *\r\n * @returns {string} - The name of the animation that was added\r\n */\n\n }, {\n key: "addAnimation",\n value: function addAnimation(layerName, animationName) {\n var animationType = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : AnimationTypes.single;\n var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n options.name = this._validateNewAnimation(layerName, animationName); // Make sure the animation type is valid\n\n if (!Object.values(AnimationTypes).includes(animationType)) {\n throw new Error("Cannot add animation ".concat(animationName, " to layer ").concat(layerName, " on host ").concat(this._host.id, ". Invalid animation type."));\n }\n\n var layer = this._layerMap[layerName];\n options.blendMode = layer.blendMode;\n options.transitionTime = layer.transitionTime;\n var state = this["_create".concat(animationType.name)](options);\n var name = layer.addState(state); // Notify that an animation has been added to the feature\n\n this.emit(this.constructor.EVENTS.addAnimation, {\n layerName: layerName,\n animationName: name\n });\n return name;\n }\n /**\r\n * Remove an animation from an animation layer.\r\n *\r\n * @param {string} layerName - Name of the layer to remove the animation from.\r\n * @param {string} name - Name of the animation to remove.\r\n *\r\n * @returns {boolean}\r\n */\n\n }, {\n key: "removeAnimation",\n value: function removeAnimation(layerName, animationName) {\n // Make sure the name is valid\n var layer = this._layerMap[layerName];\n\n if (layer === undefined) {\n throw new Error("Cannot remove animation from layer ".concat(layerName, " from host ").concat(this._host.id, ". No layer exists with this name."));\n }\n\n var removed = layer.removeState(animationName); // Notify that an animation has been removed from the feature\n\n if (removed === true) {\n this.emit(this.constructor.EVENTS.removeAnimation, {\n layerName: layerName,\n animationName: animationName\n });\n }\n\n return removed;\n }\n /**\r\n * Update the name of an animation. Names must be unique on each layer, if the new\r\n * name is not unique it will have trailing numbers appended until it is unique.\r\n *\r\n * @param {string} layerName - Name of the layer that contains the animation that\r\n * will be renamed,\r\n * @param {string} currentAnimationName - Current name of the animation.\r\n * @param {string} newAnimationName - New name to set on the animation.\r\n *\r\n * @returns {string} - The new name of the animation\r\n */\n\n }, {\n key: "renameAnimation",\n value: function renameAnimation(layerName, currentAnimationName, newAnimationName) {\n var layer = this._layerMap[layerName];\n\n if (layer === undefined) {\n throw new Error("Cannot rename animation ".concat(currentAnimationName, " on layer ").concat(layerName, " for host ").concat(this._host.id, ". No layer exists with this name."));\n }\n\n var name = layer.renameState(currentAnimationName, newAnimationName); // Notify that an animation has been renamed on the feature\n\n this.emit(this.constructor.EVENTS.renameAnimation, {\n layerName: layerName,\n oldName: currentAnimationName,\n newName: name\n });\n return name;\n }\n /**\r\n * Pause the currently playing animation and play a new animation from the beginning.\r\n *\r\n * @param {string} layerName - Name of the layer that contains the animation.\r\n * @param {string} animationName - Name of the animation state to play.\r\n * @param {number=} seconds - The number of seconds it should take to transition\r\n * to the new animation. Default is zero and will set immediately.\r\n * @param {Function=} easingFn - The easing function to use while transitioning\r\n * between animations. Default is Easing.Linear.InOut.\r\n *\r\n * @returns {Deferred} - Resolves once the animation reaches the end of its\r\n * timeline. Looping animations can only resolve if they are interrupted or\r\n * manually stopped.\r\n */\n\n }, {\n key: "playAnimation",\n value: function playAnimation(layerName, animationName, seconds, easingFn) {\n var _this7 = this;\n\n var layer = this._layerMap[layerName];\n\n if (layer === undefined) {\n var e = "Cannot play animation ".concat(animationName, " on layer ").concat(layerName, " for host ").concat(this._host.id, ". No layer exists with this name.");\n return core_Deferred.reject(e);\n } // Notify that a new animation has begun\n\n\n this.emit(this.constructor.EVENTS.playAnimation, {\n layerName: layerName,\n animationName: animationName\n });\n return layer.playAnimation(animationName, seconds, easingFn, function () {\n // Notify that an animation has stopped\n _this7.emit(_this7.constructor.EVENTS.stopAnimation, {\n layerName: layerName,\n animationName: animationName\n });\n }, undefined, function () {\n // Notify that an animation has been interrupted\n _this7.emit(_this7.constructor.EVENTS.interruptAnimation, {\n layerName: layerName,\n animationName: animationName\n });\n }, function (_ref) {\n var name = _ref.name,\n canAdvance = _ref.canAdvance,\n isQueueEnd = _ref.isQueueEnd;\n\n if (layer.currentAnimation === animationName) {\n // Notify that a new animation has begun\n _this7.emit(_this7.constructor.EVENTS.playNextAnimation, {\n layerName: layerName,\n animationName: animationName,\n nextQueuedAnimation: name,\n canAdvance: canAdvance,\n isQueueEnd: isQueueEnd\n });\n }\n });\n }\n /**\r\n * Play the next animation in the queue of a QueueState animation.\r\n *\r\n * @param {string} layerName - Name of the layer that contains the queue animation.\r\n * @param {string=} animationName - Name of the animation queue animation. Defaults\r\n * to the name of the current animation for the layer.\r\n * @param {number=} seconds - The number of seconds it should take to transition\r\n * to the queue animation if it\'s not already currently playing. Default is zero\r\n * and will set immediately.\r\n * @param {Function=} easingFn - The easing function to use while transitioning\r\n * to the queue animation if it isn\'t already playing. Default is Easing.Linear.InOut.\r\n *\r\n * @returns {Deferred} - Resolves once the last animation in the queue finishes\r\n * playing.\r\n */\n\n }, {\n key: "playNextAnimation",\n value: function playNextAnimation(layerName, animationName, transitionTime, easingFn) {\n var _this8 = this;\n\n var layer = this._layerMap[layerName];\n\n if (layer === undefined) {\n var e = "Cannot play next animation on layer ".concat(layerName, " for host ").concat(this._host.id, ". No layer exists with this name.");\n return core_Deferred.reject(e);\n }\n\n if (animationName === undefined) {\n animationName = layer.currentAnimation;\n }\n\n var animation = layer.getState(layer.currentAnimation);\n\n if (animation === null) {\n var _e = "Cannot play next animation on layer ".concat(layerName, " for host ").concat(this._host.id, ". No animation exists with name ").concat(animationName, ".");\n\n return core_Deferred.reject(_e);\n } else if (this.getAnimationType(layerName, animationName) !== \'queue\') {\n var _e2 = "Cannot play next animation on layer ".concat(layerName, " for host ").concat(this._host.id, ". ").concat(animationName, " is not a queue state.");\n\n return core_Deferred.reject(_e2);\n }\n\n var onNext = function onNext(_ref2) {\n var name = _ref2.name,\n canAdvance = _ref2.canAdvance,\n isQueueEnd = _ref2.isQueueEnd;\n\n if (layer.currentAnimation === animationName) {\n // Notify that a new animation has begun\n _this8.emit(_this8.constructor.EVENTS.playNextAnimation, {\n layerName: layerName,\n animationName: animationName,\n nextQueuedAnimation: name,\n canAdvance: canAdvance,\n isQueueEnd: isQueueEnd\n });\n }\n }; // Make the queue animation current if it wasn\'t already\n\n\n if (layer.currentAnimation === null) {\n layer.resumeAnimation(animation.name, transitionTime, easingFn, undefined, undefined, undefined, onNext);\n }\n\n return animation.next(onNext, true);\n }\n /**\r\n * Pause the current animation on a layer.\r\n *\r\n * @param {string} name - Name of the layer to pause.\r\n *\r\n * @returns {boolean} Whether or not an animation was successfully paused.\r\n */\n\n }, {\n key: "pauseAnimation",\n value: function pauseAnimation(name) {\n var layer = this._layerMap[name];\n\n if (layer === undefined) {\n console.warn("Did not pause animation on layer ".concat(name, " for host ").concat(this._host.id, ". No layer exists with this name."));\n return false;\n }\n\n var paused = layer.pauseAnimation(); // Notify that an animation was paused\n\n if (paused) {\n var animationName = layer.currentAnimation;\n this.emit(this.constructor.EVENTS.pauseAnimation, {\n layerName: name,\n animationName: animationName\n });\n }\n\n return paused;\n }\n /**\r\n * Pause the currently playing animation and play a new animation from where it\r\n * last left off.\r\n *\r\n * @param {string} layerName - Name of the layer that contains the animation.\r\n * @param {string=} animationName - Name of the animation state to resume. Defaults\r\n * to the name of the current animation for the layer.\r\n * @param {number=} seconds - The number of seconds it should take to transition\r\n * to the new animation. Default is zero and will set immediately.\r\n * @param {Function=} easingFn - The easing function to use while transitioning\r\n * between animations. Default is Easing.Linear.InOut.\r\n *\r\n * @returns {Deferred} - Resolves once the animation reaches the end of its\r\n * timeline. Looping animations can only resolve if they are interrupted or\r\n * manually stopped.\r\n */\n\n }, {\n key: "resumeAnimation",\n value: function resumeAnimation(layerName, animationName, seconds, easingFn) {\n var _this9 = this;\n\n var layer = this._layerMap[layerName];\n\n if (layer === undefined) {\n var e = "Cannot resume animation ".concat(animationName, " on layer ").concat(layerName, " for host ").concat(this._host.id, ". No layer exists with this name.");\n return core_Deferred.reject(e);\n } // Notify that an animation was resumed\n\n\n this.emit(this.constructor.EVENTS.resumeAnimation, {\n layerName: layerName,\n animationName: animationName\n });\n return layer.resumeAnimation(animationName, seconds, easingFn, function () {\n // Notify that an animation has stopped\n _this9.emit(_this9.constructor.EVENTS.stopAnimation, {\n layerName: layerName,\n animationName: animationName\n });\n }, undefined, function () {\n // Notify that an animation has been interrupted\n _this9.emit(_this9.constructor.EVENTS.interruptAnimation, {\n layerName: layerName,\n animationName: animationName\n });\n }, function (_ref3) {\n var name = _ref3.name,\n canAdvance = _ref3.canAdvance,\n isQueueEnd = _ref3.isQueueEnd;\n\n if (layer.currentAnimation === animationName) {\n // Notify that a new animation has begun\n _this9.emit(_this9.constructor.EVENTS.playNextAnimation, {\n layerName: layerName,\n animationName: animationName,\n nextQueuedAnimation: name,\n canAdvance: canAdvance,\n isQueueEnd: isQueueEnd\n });\n }\n });\n }\n /**\r\n * Stop the current animation on a layer. Stop rewinds the animation to the\r\n * beginning and prevents it from progressing forward.\r\n *\r\n * @param {string} name - Name of the layer that contains the animation.\r\n *\r\n * @returns {boolean} Whether or not an animation was successfully stopped.\r\n */\n\n }, {\n key: "stopAnimation",\n value: function stopAnimation(name) {\n var layer = this._layerMap[name];\n\n if (layer === undefined) {\n console.warn("Did not stop animation on layer ".concat(name, " for host ").concat(this._host.id, ". No layer exists with this name."));\n return false;\n }\n\n return layer.stopAnimation();\n }\n /**\r\n * Pause current animation and weight interpolation animation on all layers.\r\n * @returns {boolean} - Whether or not there was an existing interpolation or\r\n * current animations to pause.\r\n */\n\n }, {\n key: "pause",\n value: function pause() {\n this._paused = true;\n var paused = false;\n\n this._layers.forEach(function (l) {\n if (l.pause()) {\n paused = true;\n }\n });\n\n return paused;\n }\n /**\r\n * Resume current animation and weight interpolation animation on all layers.\r\n * @returns {boolean} - Whether or not there was an existing interpolation or\r\n * current animations to resume.\r\n */\n\n }, {\n key: "resume",\n value: function resume() {\n this._paused = false;\n var resumed = false;\n\n this._layers.forEach(function (l) {\n if (l.resume()) {\n resumed = true;\n }\n });\n\n return resumed;\n }\n /**\r\n * Adds a namespace to the host with the name of the feature to contain properties\r\n * and methods from the feature that users of the host need access to.\r\n *\r\n * @see AnimationFeature\r\n */\n\n }, {\n key: "installApi",\n value: function installApi() {\n var _this10 = this;\n\n /**\r\n * @inner\r\n * @namespace AnimationFeature\r\n */\n var api = AnimationFeature_get(AnimationFeature_getPrototypeOf(AnimationFeature.prototype), "installApi", this).call(this);\n\n Object.defineProperties(api, {\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @see core/AnimationFeature#paused\r\n */\n paused: {\n get: function get() {\n return _this10.paused;\n }\n },\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @see core/AnimationFeature#layers\r\n */\n layers: {\n get: function get() {\n return _this10.layers;\n }\n }\n });\n Object.assign(api, {\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#addLayer\r\n */\n addLayer: this.addLayer.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#removeLayer\r\n */\n removeLayer: this.removeLayer.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#moveLayer\r\n */\n moveLayer: this.moveLayer.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#renameLayer\r\n */\n renameLayer: this.renameLayer.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#getLayerWeight\r\n */\n getLayerWeight: this.getLayerWeight.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#setLayerWeight\r\n */\n setLayerWeight: this.setLayerWeight.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#pauseLayerWeight\r\n */\n pauseLayerWeight: this.pauseLayerWeight.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#resumeLayerWeight\r\n */\n resumeLayerWeight: this.resumeLayerWeight.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#pauseLayer\r\n */\n pauseLayer: this.pauseLayer.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#resumeLayer\r\n */\n resumeLayer: this.resumeLayer.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#getTransitioning\r\n */\n getTransitioning: this.getTransitioning.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#getAnimations\r\n */\n getAnimations: this.getAnimations.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#getCurrentAnimation\r\n */\n getCurrentAnimation: this.getCurrentAnimation.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#getPaused\r\n */\n getPaused: this.getPaused.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#getAnimationType\r\n */\n getAnimationType: this.getAnimationType.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#addAnimation\r\n */\n addAnimation: this.addAnimation.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#removeAnimation\r\n */\n removeAnimation: this.removeAnimation.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#renameAnimation\r\n */\n renameAnimation: this.renameAnimation.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#getAnimationBlendNames\r\n */\n getAnimationBlendNames: this.getAnimationBlendNames.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#getAnimationBlendWeight\r\n */\n getAnimationBlendWeight: this.getAnimationBlendWeight.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#setAnimationBlendWeight\r\n */\n setAnimationBlendWeight: this.setAnimationBlendWeight.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#playAnimation\r\n */\n playAnimation: this.playAnimation.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#playNextAnimation\r\n */\n playNextAnimation: this.playNextAnimation.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#pauseAnimation\r\n */\n pauseAnimation: this.pauseAnimation.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#resumeAnimation\r\n */\n resumeAnimation: this.resumeAnimation.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#stopAnimation\r\n */\n stopAnimation: this.stopAnimation.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#pause\r\n */\n pause: this.pause.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#resume\r\n */\n resume: this.resume.bind(this)\n });\n }\n /**\r\n * Update each animation layer.\r\n *\r\n * @param {number} deltaTime - Time since the last update.\r\n */\n\n }, {\n key: "update",\n value: function update(deltaTime) {\n if (!this._layers.length) {\n return;\n }\n\n if (this._paused) {\n deltaTime = 0;\n } // Re-evaluate internal weights for layers\n\n\n this._updateInternalWeights(); // Update layers\n\n\n this._layers.forEach(function (layer) {\n layer.update(deltaTime);\n });\n\n AnimationFeature_get(AnimationFeature_getPrototypeOf(AnimationFeature.prototype), "update", this).call(this, deltaTime);\n }\n }, {\n key: "discard",\n value: function discard() {\n this._layers.forEach(function (layer) {\n layer.discard();\n });\n\n delete this._layers;\n delete this._layerMap;\n\n AnimationFeature_get(AnimationFeature_getPrototypeOf(AnimationFeature.prototype), "discard", this).call(this);\n }\n }]);\n\n return AnimationFeature;\n}(core_AbstractHostFeature);\n\nObject.defineProperty(AnimationFeature_AnimationFeature, \'EVENTS\', {\n value: AnimationFeature_objectSpread(AnimationFeature_objectSpread({}, Object.getPrototypeOf(core_AbstractHostFeature).EVENTS), {}, {\n addLayer: \'onAddLayerEvent\',\n removeLayer: \'onRemoveLayerEvent\',\n renameLayer: \'onRenameLayerEvent\',\n addAnimation: \'onAddAnimationEvent\',\n removeAnimation: \'onRemovedAnimationEvent\',\n renameAnimation: \'onRenameAnimationEvent\',\n playAnimation: \'onPlayEvent\',\n playNextAnimation: \'onNextEvent\',\n pauseAnimation: \'onPauseEvent\',\n resumeAnimation: \'onResumeEvent\',\n interruptAnimation: \'onInterruptEvent\',\n stopAnimation: \'onStopEvent\'\n })\n});\n/* harmony default export */ var animpack_AnimationFeature = (AnimationFeature_AnimationFeature);\n// CONCATENATED MODULE: ./src/core/PointOfInterestFeature.js\nfunction PointOfInterestFeature_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { PointOfInterestFeature_typeof = function _typeof(obj) { return typeof obj; }; } else { PointOfInterestFeature_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return PointOfInterestFeature_typeof(obj); }\n\nfunction PointOfInterestFeature_slicedToArray(arr, i) { return PointOfInterestFeature_arrayWithHoles(arr) || PointOfInterestFeature_iterableToArrayLimit(arr, i) || PointOfInterestFeature_unsupportedIterableToArray(arr, i) || PointOfInterestFeature_nonIterableRest(); }\n\nfunction PointOfInterestFeature_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."); }\n\nfunction PointOfInterestFeature_iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction PointOfInterestFeature_arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction PointOfInterestFeature_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction PointOfInterestFeature_toConsumableArray(arr) { return PointOfInterestFeature_arrayWithoutHoles(arr) || PointOfInterestFeature_iterableToArray(arr) || PointOfInterestFeature_unsupportedIterableToArray(arr) || PointOfInterestFeature_nonIterableSpread(); }\n\nfunction PointOfInterestFeature_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."); }\n\nfunction PointOfInterestFeature_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return PointOfInterestFeature_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return PointOfInterestFeature_arrayLikeToArray(o, minLen); }\n\nfunction PointOfInterestFeature_iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction PointOfInterestFeature_arrayWithoutHoles(arr) { if (Array.isArray(arr)) return PointOfInterestFeature_arrayLikeToArray(arr); }\n\nfunction PointOfInterestFeature_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction PointOfInterestFeature_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction PointOfInterestFeature_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction PointOfInterestFeature_createClass(Constructor, protoProps, staticProps) { if (protoProps) PointOfInterestFeature_defineProperties(Constructor.prototype, protoProps); if (staticProps) PointOfInterestFeature_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction PointOfInterestFeature_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { PointOfInterestFeature_get = Reflect.get; } else { PointOfInterestFeature_get = function _get(target, property, receiver) { var base = PointOfInterestFeature_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return PointOfInterestFeature_get(target, property, receiver || target); }\n\nfunction PointOfInterestFeature_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = PointOfInterestFeature_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction PointOfInterestFeature_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) PointOfInterestFeature_setPrototypeOf(subClass, superClass); }\n\nfunction PointOfInterestFeature_setPrototypeOf(o, p) { PointOfInterestFeature_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return PointOfInterestFeature_setPrototypeOf(o, p); }\n\nfunction PointOfInterestFeature_createSuper(Derived) { var hasNativeReflectConstruct = PointOfInterestFeature_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = PointOfInterestFeature_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = PointOfInterestFeature_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return PointOfInterestFeature_possibleConstructorReturn(this, result); }; }\n\nfunction PointOfInterestFeature_possibleConstructorReturn(self, call) { if (call && (PointOfInterestFeature_typeof(call) === "object" || typeof call === "function")) { return call; } return PointOfInterestFeature_assertThisInitialized(self); }\n\nfunction PointOfInterestFeature_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction PointOfInterestFeature_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction PointOfInterestFeature_getPrototypeOf(o) { PointOfInterestFeature_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return PointOfInterestFeature_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/* eslint-disable no-underscore-dangle */\n\n/* eslint-disable no-unused-vars */\n\n\n\n\n\n\n\n/**\r\n * Enum for axis directions.\r\n *\r\n * @readonly\r\n * @enum {Class}\r\n */\n\nvar AxisMap = {\n PositiveX: [1, 0, 0],\n NegativeX: [-1, 0, 0],\n PositiveY: [0, 1, 0],\n NegativeY: [0, -1, 0],\n PositiveZ: [0, 0, 1],\n NegativeZ: [0, 0, -1]\n};\nvar FaceTargetTypes = {\n EyeCenter: 0,\n EyeLeft: 1,\n EyeRight: 2,\n Mouth: 3\n}; // Average distance between pupils is .064m, golden ratio says that the distance\n// from center of the pupils to the center of the mouth should be about the same.\n\nvar FaceVectors = [[0, 0, 0], [-.032, 0, 0], [.032, 0, 0], [0, -.064, 0]]; // Time ranges to use when choosing a new random wait time between saccades\n\nvar MicroSaccadeWaitRanges = {\n "default": [0.8, 1.75],\n postMacro: [0.6, 1.3125]\n};\nvar MacroSaccadeWaitRanges = {\n "default": [5.0, 8.0],\n mouthTarget: [0.2, 0.75],\n // Look away from a mouth target the fastest\n eyeTarget: [1.5, 4.0]\n}; // Minimum angle in degrees the eye direction must change to trigger a blink animation\n\nvar BlinkThreshold = 35; // Maximum number of milliseconds to use for calculating look speed\n\nvar MaxDelta = 100 / 3;\n/**\r\n * PointOfInterest controls the gaze direction of the host. Given one or more\r\n * animations of type Blend2dState, it calculates the angles between the lookTracker\r\n * object (generally a joint in the host\'s skeleton) and the lookTarget (the object\r\n * the host should look at) and drives the managed Blend2dStates\' X and Y blend\r\n * values using the result. You can optionally add saccadic movement to any managed\r\n * animation to help make the host\'s eyes appear alive when focused on the same\r\n * point for exteded periods of time. If blink animations are specified, a blink\r\n * will be played during large changes in gaze direction.\r\n *\r\n * @extends AbstractHostFeature\r\n * @alias core/PointOfInterestFeature\r\n * @implements SSMLSpeechmarkInterface\r\n * @implements ManagedAnimationLayerInterface\r\n */\n\nvar PointOfInterestFeature_PointOfInterestFeature = /*#__PURE__*/function (_AbstractHostFeature$) {\n PointOfInterestFeature_inherits(PointOfInterestFeature, _AbstractHostFeature$);\n\n var _super = PointOfInterestFeature_createSuper(PointOfInterestFeature);\n\n /**\r\n * @constructor\r\n *\r\n * @param {core/HostObject} host - Host that owns the feature.\r\n * @param {Object=} options - Options for the feature.\r\n * @param {Object=} target - 3D transformation node that the host should try to\r\n * look at.\r\n * @param {Object} options.lookTracker - 3D transformation node that represents\r\n * the direction the host is currently looking during animation.\r\n * @param {Object=} options.scene - Engine-specific scene object that contains\r\n * the host. This object must be defined if using \'setTargetByName\' or \'SetTargetById\'\r\n * methods.\r\n * @param {Object=} lookOptions - Options for the look animation layers.\r\n * @param {number} [lookOptions.blendTime=0.1] - Default amount of time it will\r\n * take to manipulate the weights of the look layers.\r\n * @param {number} [lookOptions.easingFn=Quadratic.InOut] - Default easing function\r\n * to use when manipulating look layer weights.\r\n * @param {Array.} [lookOptions.layers=[]] - An array of layer options\r\n * objects to register as look layers.\r\n * @param {Object=} blinkOptions - Options for the blink animation layers.\r\n * @param {number} [blinkOptions.blendTime=0.075] - Default amount of time it\r\n * will take to manipulate the weights of the blink layers.\r\n * @param {number} [blinkOptions.easingFn=Quadratic.InOut] - Default easing function\r\n * to use when manipulating blink layer weights.\r\n * @param {Array.} [blinkOptions.layers=[]] - An array of layer options\r\n * objects to register as blink layers.\r\n */\n function PointOfInterestFeature(host) {\n var _this;\n\n var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n target = _ref.target,\n lookTracker = _ref.lookTracker,\n scene = _ref.scene;\n\n var _ref2 = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},\n _ref2$blendTime = _ref2.blendTime,\n lookBlendTime = _ref2$blendTime === void 0 ? 0.1 : _ref2$blendTime,\n _ref2$easingFn = _ref2.easingFn,\n lookEasingFn = _ref2$easingFn === void 0 ? Quadratic.InOut : _ref2$easingFn,\n _ref2$layers = _ref2.layers,\n lookLayers = _ref2$layers === void 0 ? [] : _ref2$layers;\n\n var _ref3 = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {},\n _ref3$blendTime = _ref3.blendTime,\n blinkBlendTime = _ref3$blendTime === void 0 ? 0.075 : _ref3$blendTime,\n _ref3$easingFn = _ref3.easingFn,\n blinkEasingFn = _ref3$easingFn === void 0 ? Quadratic.InOut : _ref3$easingFn,\n _ref3$layers = _ref3.layers,\n blinkLayers = _ref3$layers === void 0 ? [] : _ref3$layers;\n\n PointOfInterestFeature_classCallCheck(this, PointOfInterestFeature);\n\n _this = _super.call(this, host);\n\n if (!_this.constructor._validateTransformObject(lookTracker)) {\n throw new Error("Cannot initialize PointOfInterestFeature on host ".concat(_this._host.id, ". LookTracker must be defined as a valid transformation object."));\n }\n\n _this._lookTracker = lookTracker;\n _this._scene = scene;\n _this._target = target || null;\n _this._prevTargetPos = [0, 0, 0];\n _this._isTargetMoving = false;\n _this._lookLayers = _this._lookLayers || {};\n _this._trackingConfigs = _this._trackingConfigs || [];\n _this._blinkLayers = _this._blinkLayers || {}; // Register the look layers\n\n lookLayers.forEach(function (_ref4) {\n var name = _ref4.name,\n animation = _ref4.animation,\n maxSpeed = _ref4.maxSpeed,\n reference = _ref4.reference,\n forwardAxis = _ref4.forwardAxis,\n hasSaccade = _ref4.hasSaccade,\n blendTime = _ref4.blendTime,\n easingFn = _ref4.easingFn;\n\n _this.registerLookLayer(name, {\n animation: animation,\n maxSpeed: maxSpeed,\n reference: reference,\n forwardAxis: forwardAxis,\n hasSaccade: hasSaccade,\n blendTime: blendTime !== undefined ? blendTime : lookBlendTime,\n easingFn: easingFn !== undefined ? easingFn : lookEasingFn\n });\n }); // Register the blink layers\n\n blinkLayers.forEach(function (_ref5) {\n var name = _ref5.name,\n animation = _ref5.animation,\n blendTime = _ref5.blendTime,\n easingFn = _ref5.easingFn;\n\n _this.registerBlinkLayer(name, {\n animation: animation,\n blendTime: blendTime !== undefined ? blendTime : blinkBlendTime,\n easingFn: easingFn !== undefined ? easingFn : blinkEasingFn\n });\n });\n return _this;\n }\n /**\r\n * Gets and sets the target object the host should look at.\r\n *\r\n * @type {Object|null}\r\n */\n\n\n PointOfInterestFeature_createClass(PointOfInterestFeature, [{\n key: "target",\n get: function get() {\n return this._target;\n },\n set: function set(target) {\n this._target = target || null;\n }\n /**\r\n * Return a vector representing the global position of an object. Should be\r\n * overloaded for each rendering engine implementation.\r\n *\r\n * @private\r\n *\r\n * @param {any} _obj - Engine-specific 3D transform object.\r\n *\r\n * @returns {Array.} - An array consisting of three numbers representing\r\n * x, y and z coordinates.\r\n */\n\n }, {\n key: "_onLayerAdded",\n value: function _onLayerAdded(_ref6) {\n var name = _ref6.name;\n this._lookLayers = this._lookLayers || {};\n this._blinkLayers = this._blinkLayers || {};\n\n PointOfInterestFeature_get(PointOfInterestFeature_getPrototypeOf(PointOfInterestFeature.prototype), "_onLayerAdded", this).call(this, {\n name: name\n }); // Validate the look animation\n\n\n if (this._lookLayers[name] !== undefined) {\n this._registerLookAnimation(name, this._lookLayers[name]);\n }\n }\n }, {\n key: "_onAnimationAdded",\n value: function _onAnimationAdded(_ref7) {\n var layerName = _ref7.layerName,\n animationName = _ref7.animationName;\n this._lookLayers = this._lookLayers || {};\n this._blinkLayers = this._blinkLayers || {};\n\n PointOfInterestFeature_get(PointOfInterestFeature_getPrototypeOf(PointOfInterestFeature.prototype), "_onAnimationAdded", this).call(this, {\n layerName: layerName\n }); // Validate the look animation\n\n\n if (this._lookLayers[layerName] === animationName) {\n this._registerLookAnimation(layerName, animationName);\n }\n }\n /**\r\n * Ensure that registered look animations are Blend2dStates.\r\n *\r\n * @private\r\n *\r\n * @param {string} layerName - Name of the layer that contains the look animation.\r\n * @param {string} animationName - Name of the animation.\r\n */\n\n }, {\n key: "_registerLookAnimation",\n value: function _registerLookAnimation(layerName, animationName) {\n if (this._managedLayers[layerName].animations[animationName].isActive) {\n if (AnimationTypes[this._host.AnimationFeature.getAnimationType(layerName, animationName)] !== AnimationTypes.blend2d) {\n // Warn and deactivate if the registered state is not blend2d\n console.warn("Cannot register Point of Interest look animation ".concat(animationName, " on layer ").concat(layerName, " for host ").concat(this._host.id, ". Look animations must be of type \'blend2d\'."));\n this._managedLayers[layerName].animations[animationName].isActive = false;\n }\n }\n }\n /**\r\n * Check if the given object is not of an engine-specific type. Should\r\n * be overloaded for each rendering engine implementation.\r\n *\r\n * @private\r\n *\r\n * @param {any} obj - Object to validate.\r\n *\r\n * @returns {boolean}\r\n */\n\n }, {\n key: "_addTrackingConfig",\n value:\n /**\r\n * Check if the given configuration object has already been stored as a tracking\r\n * config. If it has, return the stored configuration. Otherwise, store and\r\n * return it.\r\n *\r\n * @private\r\n *\r\n * @param {Object} config - Object containing tracker, reference and forwardAxis\r\n * properties.\r\n *\r\n * @returns {Object}\r\n */\n function _addTrackingConfig(config) {\n var trackingConfig = this._trackingConfigs.find(function (c) {\n return c.reference === config.reference && c.forwardAxis === config.forwardAxis;\n });\n\n if (trackingConfig) {\n return trackingConfig;\n } else {\n config.angles = {\n h: 0,\n v: 0\n };\n config.prevAngles = {\n h: 0,\n v: 0\n };\n\n this._trackingConfigs.push(config);\n\n return config;\n }\n }\n /**\r\n * Return the distance between the look tracker and the look target.\r\n *\r\n * @private\r\n *\r\n * @returns {number}\r\n */\n\n }, {\n key: "_getTargetDistance",\n value: function _getTargetDistance() {\n // Find the vector between the global positions of tracker and target\n var sourcePosition = this.constructor._getWorldPosition(this._lookTracker);\n\n var targetPosition = this.constructor._getWorldPosition(this._target);\n\n var lookVector = [targetPosition[0] - sourcePosition[0], targetPosition[1] - sourcePosition[1], targetPosition[2] - sourcePosition[2]];\n return core_MathUtils.getVectorMagnitude(lookVector);\n }\n /**\r\n * Reset all stored tracking angles to 0.\r\n *\r\n * @private\r\n */\n\n }, {\n key: "_resetLookAngles",\n value: function _resetLookAngles() {\n this._trackingConfigs.forEach(function (_ref8) {\n var angles = _ref8.angles;\n angles.h = 0;\n angles.v = 0;\n });\n }\n /**\r\n * Store the difference in horizontal and vertical rotation for the tracker\'s\r\n * reference rotation and the direction of the target from the tracker.\r\n *\r\n * @private\r\n */\n\n }, {\n key: "_setLookAngles",\n value: function _setLookAngles() {\n var _this2 = this;\n\n // Get the current positions of the tracker and target objects\n var targetPos = this.constructor._getWorldPosition(this._target);\n\n var trackerPos = this.constructor._getWorldPosition(this._lookTracker); // Check if the target has moved\n\n\n this._isTargetMoving = core_MathUtils.getVectorMagnitude([targetPos[0] - this._prevTargetPos[0], targetPos[1] - this._prevTargetPos[1], targetPos[2] - this._prevTargetPos[2]]) > 0;\n Object.assign(this._prevTargetPos, targetPos); // Calculate the horizontal and vertical angles to rotate to the target\n\n var targetSpherical = core_MathUtils.cartesianToSpherical(targetPos[0] - trackerPos[0], targetPos[1] - trackerPos[1], targetPos[2] - trackerPos[2]);\n\n var targetAngles = this.constructor._sphericalToBlendValue(targetSpherical[1], targetSpherical[2]); // Calculate angles relative to the reference objects\n\n\n this._trackingConfigs.forEach(function (_ref9) {\n var reference = _ref9.reference,\n forwardAxis = _ref9.forwardAxis,\n angles = _ref9.angles;\n\n // Calculate the horizontal and vertical angles to rotate to the direction of the tracker\n var refDirection = _this2.constructor._getObjectDirection(reference, forwardAxis);\n\n var refSpherical = core_MathUtils.cartesianToSpherical.apply(core_MathUtils, PointOfInterestFeature_toConsumableArray(refDirection));\n\n var refAngles = _this2.constructor._sphericalToBlendValue(refSpherical[1], refSpherical[2]); // Store the difference\n\n\n angles.h = targetAngles.h - refAngles.h;\n angles.v = targetAngles.v - refAngles.v;\n });\n }\n /**\r\n * Return the horizontal and vertical angles it would require to simulate looking\r\n * at the given type of face target\r\n *\r\n * @private\r\n *\r\n * @param {number} targetType - Integer representing the FaceTargetType.\r\n *\r\n * @returns {Object}- An object with signature {r: number, h: number, v: number}\r\n * where \'r\' represents radius, h represents the horizontal/azimuthal angle and\r\n * v represents the vertical/polar angle.\r\n */\n\n }, {\n key: "_getFaceTargetAngles",\n value: function _getFaceTargetAngles(targetType) {\n // No offset when the target is the center of the eyes\n if (targetType === 0) {\n return {\n h: 0,\n v: 0\n };\n } // Build a vector to the face target type using the current distance to the target\n\n\n var distance = this._getTargetDistance(this._lookTracker);\n\n var faceVector = PointOfInterestFeature_toConsumableArray(FaceVectors[targetType]);\n\n faceVector[2] = distance;\n var spherical = core_MathUtils.cartesianToSpherical.apply(core_MathUtils, PointOfInterestFeature_toConsumableArray(faceVector)); // Make sure values are clamped within the range of motion of the human eye, in case the target is very close\n\n var blendValues = this.constructor._sphericalToBlendValue(spherical[1], spherical[2]);\n\n blendValues.h = core_MathUtils.clamp(blendValues.h, -35, 35);\n blendValues.v = core_MathUtils.clamp(blendValues.v, -25, 30);\n return blendValues;\n }\n /**\r\n * Updated the stored speed and duration variables for a layer based on the\r\n * change in horizontal and vertical angles of the tracker.\r\n *\r\n * @private\r\n *\r\n * @param {string} layerName - Name of the layer to store values on.\r\n * @param {number} h - Change in horizontal angle, in degrees.\r\n * @param {number} v - Change in vertical angle, in degrees.\r\n */\n\n }, {\n key: "_updateLayerSpeed",\n value: function _updateLayerSpeed(layerName, h, v) {\n var layer = this._managedLayers[layerName]; // From "Realistic Avatar and head Animation Using a Neurobiological Model of Visual Attention", Itti, Dhavale, Pighin\n\n layer.maxHSpeed = 473 * (1 - Math.exp(-h / 7.8));\n layer.maxVSpeed = 473 * (1 - Math.exp(-v / 7.8)); // From "Eyes Alive", Lee, Badler\n\n var D0 = 0.025;\n var d = 0.00235;\n layer.hDuration = D0 + d * h;\n layer.vDuration = D0 + d * v;\n }\n /**\r\n * Set the microSaccade object with new randomized values.\r\n *\r\n * @private\r\n *\r\n * @param {string} layerName - Name of the layer that owns the saccade motion.\r\n */\n\n }, {\n key: "_setMicroSaccade",\n value: function _setMicroSaccade(layerName) {\n var layer = this._managedLayers[layerName];\n var microSaccade = layer.microSaccade;\n\n if (this._target) {\n // Micro movements should be smaller when focused on a target\n microSaccade.h = core_Utils.getRandomFloat(.01, .15);\n microSaccade.v = core_Utils.getRandomFloat(.01, .15);\n } else {\n // Microsaccades. Encyclopedia of Neuroscience. (2009) Springer, Berlin, Heidelberg. https://doi.org/10.1007/978-3-540-29678-2_3492\n microSaccade.h = core_Utils.getRandomFloat(.01, .3);\n microSaccade.v = core_Utils.getRandomFloat(.01, .3);\n }\n\n this._updateLayerSpeed(layerName, microSaccade.h, microSaccade.v); // Restart the timer\n\n\n this._initializeMicroTimer.apply(this, [layerName].concat(PointOfInterestFeature_toConsumableArray(MicroSaccadeWaitRanges["default"])));\n }\n /**\r\n * Set the macroSaccade object with new randomized values.\r\n *\r\n * @private\r\n *\r\n * @param {string} layerName - Name of the layer that owns the saccade motion.\r\n */\n\n }, {\n key: "_setMacroSaccade",\n value: function _setMacroSaccade(layerName) {\n var layer = this._managedLayers[layerName];\n var macroSaccade = layer.macroSaccade;\n var macroSaccadeWaitRange; // Increase random value range when not focused on a target\n\n if (!this._target) {\n macroSaccadeWaitRange = MacroSaccadeWaitRanges["default"]; // Normal human horizontal eye rotation limit is about 35 degrees\n\n var hLimit = core_Utils.getRandomFloat(.143, .286);\n var hFactor = core_Utils.getRandomFloat(-hLimit, hLimit);\n macroSaccade.h = hFactor * 35; // Normal human vertical eye rotation limit is about 25 degrees upward and 30 degrees downward\n\n var vLimit = core_Utils.getRandomFloat(.093, .186);\n var vFactor = core_Utils.getRandomFloat(-vLimit, vLimit);\n macroSaccade.v = vFactor > 0 ? vFactor * 25 : vFactor * 30;\n } // Pick a new face target\n else {\n // Social triangle - saccade between eyes and mouth, weighted to look at eyes more often\n switch (layer.saccadeTarget) {\n case 1:\n macroSaccadeWaitRange = MacroSaccadeWaitRanges.eyeTarget;\n layer.saccadeTarget = Math.random() < 0.75 ? FaceTargetTypes.EyeRight : FaceTargetTypes.Mouth;\n break;\n\n case 2:\n macroSaccadeWaitRange = MacroSaccadeWaitRanges.eyeTarget;\n layer.saccadeTarget = Math.random() < 0.75 ? FaceTargetTypes.EyeLeft : FaceTargetTypes.Mouth;\n break;\n\n case 3:\n macroSaccadeWaitRange = MacroSaccadeWaitRanges.mouthTarget;\n layer.saccadeTarget = Math.random() < 0.5 ? FaceTargetTypes.EyeLeft : FaceTargetTypes.EyeRight;\n break;\n\n case 0:\n default:\n macroSaccadeWaitRange = MacroSaccadeWaitRanges.eyeTarget;\n layer.saccadeTarget = Math.random() < 0.5 ? FaceTargetTypes.EyeLeft : FaceTargetTypes.EyeRight;\n break;\n }\n\n var _this$_getFaceTargetA = this._getFaceTargetAngles(layer.saccadeTarget),\n h = _this$_getFaceTargetA.h,\n v = _this$_getFaceTargetA.v;\n\n macroSaccade.h = h;\n macroSaccade.v = v;\n }\n\n this._updateLayerSpeed(layerName, macroSaccade.h, macroSaccade.v); // Restart the timers\n\n\n this._initializeMicroTimer.apply(this, [layerName].concat(PointOfInterestFeature_toConsumableArray(MicroSaccadeWaitRanges.postMacro)));\n\n this._initializeMacroTimer.apply(this, [layerName].concat(PointOfInterestFeature_toConsumableArray(macroSaccadeWaitRange)));\n }\n /**\r\n * Start a new wait timer that will set a new micro saccade movement when it\r\n * resolves.\r\n *\r\n * @private\r\n *\r\n * @param {string} layerName - Name of the layer that owns the saccade motion.\r\n * @param {number} minWaitTime - Minimum number of seconds before a new saccade\r\n * will be triggered.\r\n * @param {number} maxWaitTime - Maximum number of seconds before a new saccade\r\n * will be triggered.\r\n */\n\n }, {\n key: "_initializeMicroTimer",\n value: function _initializeMicroTimer(layerName, minWaitTime, maxWaitTime) {\n var _this3 = this;\n\n var layer = this._managedLayers[layerName];\n var waitTime = core_Utils.getRandomFloat(minWaitTime, maxWaitTime);\n\n if (layer.microSaccadeTimer) {\n layer.microSaccadeTimer.cancel();\n }\n\n layer.microSaccadeTimer = core_Utils.wait(waitTime, {\n onFinish: function onFinish() {\n _this3._setMicroSaccade(layerName);\n }\n });\n }\n /**\r\n * Start a new wait timer that will set a new macro saccade movement when it\r\n * resolves.\r\n *\r\n * @private\r\n *\r\n * @param {string} layerName - Name of the layer that owns the saccade motion.\r\n * @param {number} minWaitTime - Minimum number of seconds before a new saccade\r\n * will be triggered.\r\n * @param {number} maxWaitTime - Maximum number of seconds before a new saccade\r\n * will be triggered.\r\n */\n\n }, {\n key: "_initializeMacroTimer",\n value: function _initializeMacroTimer(layerName, minWaitTime, maxWaitTime) {\n var _this4 = this;\n\n var layer = this._managedLayers[layerName];\n var waitTime = core_Utils.getRandomFloat(minWaitTime, maxWaitTime);\n\n if (layer.macroSaccadeTimer) {\n layer.macroSaccadeTimer.cancel();\n }\n\n layer.macroSaccadeTimer = core_Utils.wait(waitTime, {\n onFinish: function onFinish() {\n _this4._setMacroSaccade(layerName);\n }\n });\n }\n /**\r\n * Sets a new target to look at.\r\n *\r\n * @param {Object|null} target - The new target to look at.\r\n */\n\n }, {\n key: "setTarget",\n value: function setTarget(target) {\n this.target = target;\n }\n /**\r\n * Finds an object given its name and sets it as the new target to look at.\r\n * Should be overloaded for each rendering engine implementation.\r\n *\r\n * @param {string} target - Name to search for.\r\n */\n\n }, {\n key: "setTargetByName",\n value: function setTargetByName(name) {\n if (!name) {\n this._target = null;\n }\n\n if (!this._scene) {\n throw new Error("Cannot set PointOfInterestFeature target using name ".concat(name, " on host ").concat(this._host.id, ". Scene must be defined."));\n }\n }\n /**\r\n * Finds an object given its id and sets it as the new target to look at.\r\n * Should be overloaded for each rendering engine implementation.\r\n *\r\n * @param {string|number} target - Id to search for.\r\n */\n\n }, {\n key: "setTargetById",\n value: function setTargetById(id) {\n if (!id) {\n this._target = null;\n }\n\n if (!this._scene) {\n throw new Error("Cannot set PointOfInterestFeature target using id ".concat(id, " on host ").concat(this._host.id, ". Scene must be defined."));\n }\n }\n /**\r\n * Start keeping track of an animation layer that owns a blend2d animation with\r\n * blendWeights corresponding to horizontal and vertical look angles.\r\n *\r\n * @param {string} layerName - Name of the layer to keep track of.\r\n * @param {Object=} options - Options for the layer.\r\n * @param {string} [options.animation = \'look\'] - Name of the animation on the\r\n * layer whose blendWeights will be driven based on the angle between the lookTracker\r\n * and the lookTarget. This animation must be of type blend2d.\r\n * @param {number} [options.maxSpeed = 25] - The maximum speed at which the blend2d\r\n * blendWeights can be manipulated.\r\n * @param {string} [options.forwardAxis = \'PositiveZ\'] - Axis pointing from the\r\n * front of the lookReference object. Valid options are \'PositiveX\', \'NegativeX\',\r\n * \'PositiveY\', \'NegativeY\', \'PositiveZ\', \'NegativeZ\'.\r\n * @param {Object=} options.lookReference - 3D transformation node that the lookTracker\r\n * rotation limits should be calculated relative to. Defaults to the host owner.\r\n * @param {number} [options.hasSaccade = false] - Whether or not to include\r\n * saccadic motion onto the blendWeight animation. This should only be set to\r\n * true for blend2d animations representing eye animation.\r\n * @param {number=} [options.blendTime=[PointOfInterestFeature.DEFAULT_LAYER_OPTIONS.blendTime]{@link PointOfInterestFeature#DEFAULT_LAYER_OPTIONS#blendTime}] -\r\n * Default amount of time to use when manipulating layer weight.\r\n * @param {Function=} options.easingFn - Default easing function to use when\r\n * manipulating layer weight.\r\n */\n\n }, {\n key: "registerLookLayer",\n value: function registerLookLayer(layerName) {\n var _ref10 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n _ref10$animation = _ref10.animation,\n animation = _ref10$animation === void 0 ? \'look\' : _ref10$animation,\n _ref10$maxSpeed = _ref10.maxSpeed,\n maxSpeed = _ref10$maxSpeed === void 0 ? 25 : _ref10$maxSpeed,\n reference = _ref10.reference,\n _ref10$forwardAxis = _ref10.forwardAxis,\n forwardAxis = _ref10$forwardAxis === void 0 ? \'PositiveZ\' : _ref10$forwardAxis,\n _ref10$hasSaccade = _ref10.hasSaccade,\n hasSaccade = _ref10$hasSaccade === void 0 ? false : _ref10$hasSaccade,\n _ref10$blendTime = _ref10.blendTime,\n blendTime = _ref10$blendTime === void 0 ? PointOfInterestFeature.DEFAULT_LAYER_OPTIONS.blendTime : _ref10$blendTime,\n easingFn = _ref10.easingFn;\n\n // Validate reference object\n reference = reference || this._host.owner;\n\n if (!this.constructor._validateTransformObject(reference)) {\n throw new Error("Cannot initialize register look layer ".concat(layerName, " for PointOfInterestFeature on host ").concat(this._host.id, ". Reference must be defined as a valid transformation object."));\n } // Find vector associated with axis string\n\n\n forwardAxis = AxisMap[forwardAxis] !== undefined ? AxisMap[forwardAxis] : AxisMap.PositiveZ; // Store tracking configuration\n\n var trackingConfig = this._addTrackingConfig({\n reference: reference,\n forwardAxis: forwardAxis\n }); // Register the layer and animation\n\n\n this.registerLayer(layerName, {\n trackingConfig: trackingConfig,\n maxSpeed: maxSpeed,\n maxHSpeed: undefined,\n maxVSpeed: undefined,\n hDuration: undefined,\n vDuration: undefined,\n hVelocity: [0, 0],\n vVelocity: [0, 0],\n hasSaccade: hasSaccade,\n blendTime: blendTime,\n easingFn: easingFn,\n microSaccade: {\n h: 0,\n v: 0\n },\n macroSaccade: {\n h: 0,\n v: 0\n },\n saccadeTarget: FaceTargetTypes.EyeCenter,\n animations: PointOfInterestFeature_defineProperty({}, animation, {})\n });\n this._lookLayers[layerName] = animation; // Validate the look animation\n\n this._registerLookAnimation(layerName, animation); // Initialize saccade timers\n\n\n if (hasSaccade) {\n var macroSaccadeWaitRange = this._target ? MacroSaccadeWaitRanges.eyeTarget : MacroSaccadeWaitRanges["default"];\n\n this._initializeMicroTimer.apply(this, [layerName].concat(PointOfInterestFeature_toConsumableArray(MicroSaccadeWaitRanges["default"])));\n\n this._initializeMacroTimer.apply(this, [layerName].concat(PointOfInterestFeature_toConsumableArray(macroSaccadeWaitRange)));\n }\n }\n /**\r\n * Start keeping track of an animation layer that owns a blink animation. Blink\r\n * animations can be of any type, but if it is of type randomAnimation then a\r\n * it will be randomized each time a blink is called.\r\n *\r\n * @param {string} layerName - Name of the layer to keep track of.\r\n * @param {Object=} options - Options for the layer.\r\n * @param {string} [options.animation = \'blink\'] - Name of the blink animation\r\n * on the layer.\r\n * @param {number} [options.blendTime=[PointOfInterestFeature.DEFAULT_LAYER_OPTIONS.blendTime]{@link PointOfInterestFeature#DEFAULT_LAYER_OPTIONS#blendTime}] -\r\n * Default amount of time to use when manipulating the layer\'s weight.\r\n * @param {Function=} options.easingFn - Default easing function to use when\r\n * manipulating the layer\'s weight.\r\n */\n\n }, {\n key: "registerBlinkLayer",\n value: function registerBlinkLayer(layerName) {\n var _ref11 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n _ref11$animation = _ref11.animation,\n animation = _ref11$animation === void 0 ? \'blink\' : _ref11$animation,\n _ref11$blendTime = _ref11.blendTime,\n blendTime = _ref11$blendTime === void 0 ? PointOfInterestFeature.DEFAULT_LAYER_OPTIONS.blendTime : _ref11$blendTime,\n easingFn = _ref11.easingFn;\n\n // Register the layer and animation\n this.registerLayer(layerName, {\n blendTime: blendTime,\n easingFn: easingFn,\n animations: PointOfInterestFeature_defineProperty({}, animation, {})\n });\n this._blinkLayers[layerName] = animation;\n }\n }, {\n key: "update",\n value: function update(deltaTime) {\n var _this5 = this;\n\n PointOfInterestFeature_get(PointOfInterestFeature_getPrototypeOf(PointOfInterestFeature.prototype), "update", this).call(this, deltaTime); // Update the look angles\n\n\n if (this._target) {\n this._setLookAngles();\n } else {\n this._resetLookAngles();\n }\n\n var deltaSeconds = Math.min(deltaTime, MaxDelta) / 1000;\n var triggerBlink = false; // Set look blend values\n\n Object.entries(this._lookLayers).forEach(function (_ref12) {\n var _ref13 = PointOfInterestFeature_slicedToArray(_ref12, 2),\n layerName = _ref13[0],\n animName = _ref13[1];\n\n var options = _this5._managedLayers[layerName]; // Increment the saccade timers\n\n if (options.isActive && options.hasSaccade) {\n options.microSaccadeTimer.execute(deltaTime);\n options.macroSaccadeTimer.execute(deltaTime);\n } // Set the blend values\n\n\n if (options.animations[animName].isActive) {\n var currentH = _this5._host.AnimationFeature.getAnimationBlendWeight(layerName, animName, \'X\');\n\n var currentV = _this5._host.AnimationFeature.getAnimationBlendWeight(layerName, animName, \'Y\');\n\n var targetH = options.trackingConfig.angles.h;\n var targetV = options.trackingConfig.angles.v; // Check if the look angle has changed enough to trigger a blink\n\n if (_this5._isTargetMoving && !triggerBlink) {\n var prevTargetH = options.trackingConfig.prevAngles.h;\n var prevTargetV = options.trackingConfig.prevAngles.v;\n var changeAmount = core_MathUtils.toDegrees(core_MathUtils.getAngleBetween([prevTargetH, prevTargetV], [targetH, targetV]));\n\n if (changeAmount >= BlinkThreshold) {\n triggerBlink = true;\n }\n }\n\n options.trackingConfig.prevAngles.h = targetH;\n options.trackingConfig.prevAngles.v = targetV; // Add in the saccade movement\n\n if (options.hasSaccade) {\n core_MathUtils.dampValue(0, options.macroSaccade.h + options.macroSaccade.h, options.hVelocity, options.hDuration, options.maxHSpeed);\n targetH += options.hVelocity[0];\n core_MathUtils.dampValue(0, options.macroSaccade.v + options.macroSaccade.v, options.vVelocity, options.vDuration, options.maxVSpeed);\n targetV += options.vVelocity[0];\n } // Clamp to max speed\n\n\n var factor = core_MathUtils.clamp(deltaSeconds * options.maxSpeed, 0, 1);\n targetH = core_MathUtils.lerp(currentH, targetH, factor);\n targetV = core_MathUtils.lerp(currentV, targetV, factor); // Update the blend values\n\n _this5._host.AnimationFeature.setAnimationBlendWeight(layerName, animName, \'X\', targetH);\n\n _this5._host.AnimationFeature.setAnimationBlendWeight(layerName, animName, \'Y\', targetV);\n }\n });\n\n if (!triggerBlink || !this._isTargetMoving) {\n return;\n } // Execute blink\n\n\n Object.entries(this._blinkLayers).forEach(function (_ref14) {\n var _ref15 = PointOfInterestFeature_slicedToArray(_ref14, 2),\n layerName = _ref15[0],\n animName = _ref15[1];\n\n var animation = _this5._managedLayers[layerName].animations[animName];\n\n if (animation.isActive) {\n _this5._host.AnimationFeature.playAnimation(layerName, animName);\n }\n });\n }\n }, {\n key: "installApi",\n value: function installApi() {\n var _this6 = this;\n\n /**\r\n * @inner\r\n * @namespace PointOfInterestFeature\r\n */\n var api = PointOfInterestFeature_get(PointOfInterestFeature_getPrototypeOf(PointOfInterestFeature.prototype), "installApi", this).call(this);\n\n Object.defineProperties(api, {\n /**\r\n * @memberof PointOfInterestFeature\r\n * @instance\r\n * @see core/PointOfInterestFeature#target\r\n */\n target: {\n get: function get() {\n return _this6.target;\n },\n set: function set(target) {\n _this6.target = target;\n }\n }\n });\n Object.assign(api, {\n /**\r\n * @memberof PointOfInterestFeature\r\n * @instance\r\n * @method\r\n * @see core/PointOfInterestFeature#registerLookLayer\r\n */\n registerLookLayer: this.registerLookLayer.bind(this),\n\n /**\r\n * @memberof PointOfInterestFeature\r\n * @instance\r\n * @method\r\n * @see core/PointOfInterestFeature#registerBlinkLayer\r\n */\n registerBlinkLayer: this.registerBlinkLayer.bind(this),\n\n /**\r\n * @memberof PointOfInterestFeature\r\n * @instance\r\n * @method\r\n * @see core/PointOfInterestFeature#setTarget\r\n */\n setTarget: this.setTarget.bind(this),\n\n /**\r\n * @memberof PointOfInterestFeature\r\n * @instance\r\n * @method\r\n * @see core/PointOfInterestFeature#setTargetByName\r\n */\n setTargetByName: this.setTargetByName.bind(this),\n\n /**\r\n * @memberof PointOfInterestFeature\r\n * @instance\r\n * @method\r\n * @see core/PointOfInterestFeature#setTargetById\r\n */\n setTargetById: this.setTargetById.bind(this)\n });\n return api;\n }\n }], [{\n key: "_getWorldPosition",\n value: function _getWorldPosition(obj) {\n return [0, 0, 0];\n }\n /**\r\n * Return a matrix representing the global transformation matrix of an object.\r\n * Should be overloaded for each rendering engine implementation.\r\n *\r\n * @private\r\n *\r\n * @param {any} obj - Engine-specific 3D transform object.\r\n *\r\n * @returns {Array.} - An array consisting of 16 numbers representing\r\n * the 3d transformation.\r\n */\n\n }, {\n key: "_getWorldMatrix",\n value: function _getWorldMatrix(obj) {\n return [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1];\n }\n /**\r\n * Rotate the given local direction vector by the object\'s world rotation matrix.\r\n *\r\n * @private\r\n *\r\n * @param {any} obj - Engine-specific 3D transform object.\r\n * @param {Array.} forwardVector - Unit vector representing the local\r\n * forward direction of the object.\r\n *\r\n * @returns {Array.}\r\n */\n\n }, {\n key: "_getObjectDirection",\n value: function _getObjectDirection(obj) {\n var forwardVector = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : AxisMap.PositiveZ;\n var rotation = core_MathUtils.getRotationMatrix(this._getWorldMatrix(obj));\n return core_MathUtils.rotateVector(forwardVector, rotation);\n }\n /**\r\n * Calculate horizontal and vertical look angles in degrees given spherical theta\r\n * and phi angles in radians.\r\n *\r\n * @param {number} theta - Vertical/polar angle in radians where 0 points directly\r\n * along positive Y axis.\r\n * @param {number} phi - Horizontal/azimuthal angle in radians.\r\n *\r\n * @returns {Object} - An object with the signature {h: number, v: number} where\r\n * h represents horizontal rotation in degrees and v represents vertical rotation\r\n * in degrees.\r\n */\n\n }, {\n key: "_sphericalToBlendValue",\n value: function _sphericalToBlendValue(theta, phi) {\n var h = core_MathUtils.toDegrees(phi); // Offset the vertical angle so 0 is pointing forward instead of up\n\n var v = core_MathUtils.toDegrees(theta) - 90; // Convert vertical angle to -180, 180 range\n\n return {\n h: h,\n v: v\n };\n }\n }, {\n key: "_validateTransformObject",\n value: function _validateTransformObject(obj) {\n return obj instanceof Object;\n }\n }]);\n\n return PointOfInterestFeature;\n}(core_AbstractHostFeature.mix(awspack_SSMLSpeechmarkInterface.Mixin, animpack_ManagedAnimationLayerInterface.Mixin));\n\n/* harmony default export */ var core_PointOfInterestFeature = (PointOfInterestFeature_PointOfInterestFeature);\n\n// CONCATENATED MODULE: ./src/core/awspack/AbstractSpeech.js\nfunction AbstractSpeech_toConsumableArray(arr) { return AbstractSpeech_arrayWithoutHoles(arr) || AbstractSpeech_iterableToArray(arr) || AbstractSpeech_unsupportedIterableToArray(arr) || AbstractSpeech_nonIterableSpread(); }\n\nfunction AbstractSpeech_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."); }\n\nfunction AbstractSpeech_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return AbstractSpeech_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return AbstractSpeech_arrayLikeToArray(o, minLen); }\n\nfunction AbstractSpeech_iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction AbstractSpeech_arrayWithoutHoles(arr) { if (Array.isArray(arr)) return AbstractSpeech_arrayLikeToArray(arr); }\n\nfunction AbstractSpeech_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction AbstractSpeech_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction AbstractSpeech_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction AbstractSpeech_createClass(Constructor, protoProps, staticProps) { if (protoProps) AbstractSpeech_defineProperties(Constructor.prototype, protoProps); if (staticProps) AbstractSpeech_defineProperties(Constructor, staticProps); return Constructor; }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/**\r\n * Class that can play back audio generated by AWS Polly and synchronized emit\r\n * speechmark messages.\r\n *\r\n * @abstract\r\n */\n\nvar AbstractSpeech_AbstractSpeech = /*#__PURE__*/function () {\n /**\r\n * @constructor\r\n *\r\n * @param {core/TextToSpeechFeature} speaker - The feature that owns the Speech and\r\n * will emit speechmark messages.\r\n * @param {string} text - The text of the speech.\r\n * @param {Array.} [speechmarks=[]] - An array of speechmark objects representing\r\n * the text and timing of the speech.\r\n */\n function AbstractSpeech(speaker, text) {\n var speechmarks = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];\n\n AbstractSpeech_classCallCheck(this, AbstractSpeech);\n\n this._speaker = speaker;\n this._text = text;\n this._speechmarks = speechmarks;\n this._speechmarkOffset = 0;\n\n this._reset();\n }\n /**\r\n * Reset tracking properties.\r\n *\r\n * @private\r\n *\r\n * @param {number} [currentTime=0] - Time to use for _startTime.\r\n */\n\n\n AbstractSpeech_createClass(AbstractSpeech, [{\n key: "_reset",\n value: function _reset() {\n var currentTime = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n this._startTime = currentTime;\n this._localTime = 0;\n this._pauseTime = 0;\n this._playing = false;\n this._markIter = this._speechmarks.values();\n\n var _this$_markIter$next = this._markIter.next(),\n value = _this$_markIter$next.value,\n done = _this$_markIter$next.done;\n\n this._currentMark = value;\n this._endTime = this._speechmarks.length ? this._speechmarks[this._speechmarks.length - 1].time : 0;\n this._done = done;\n this._promise = null;\n }\n /**\r\n * Create a new promise that will stop playback and emit messages for this speech.\r\n *\r\n * @param {Function=} onFinish - Funciton to execute once the speech stops.\r\n * @param {onError=} onError - Function to execute if the speech encounters an\r\n * error.\r\n * @param {Function=} onInterrupt - Function to execute if the speech is canceled.\r\n *\r\n * @returns {Deferred}\r\n *\r\n * @private\r\n */\n\n }, {\n key: "_createPromise",\n value: function _createPromise(onFinish, onError, onInterrupt) {\n var _this = this;\n\n var onResolve = function onResolve(value) {\n _this._playing = false;\n\n _this._speaker.emit(_this._speaker.constructor.EVENTS.stop, _this);\n\n _this._speaker.constructor.emit(_this._speaker.constructor.EVENTS.stop, _this);\n\n if (typeof onFinish === \'function\') {\n onFinish(value);\n }\n };\n\n var onReject = function onReject(e) {\n _this._playing = false;\n\n _this._speaker.emit(_this._speaker.constructor.EVENTS.stop, _this);\n\n _this._speaker.constructor.emit(_this._speaker.constructor.EVENTS.stop, _this);\n\n console.error("".concat(_this.constructor.name, " encountered an unexpected error: ").concat(e));\n\n if (typeof onError === \'function\') {\n onError(e);\n }\n };\n\n var onCancel = function onCancel(value) {\n _this._playing = false;\n\n _this._speaker.emit(_this._speaker.constructor.EVENTS.interrupt, _this);\n\n _this._speaker.constructor.emit(_this._speaker.constructor.EVENTS.interrupt, _this);\n\n if (typeof onInterrupt === \'function\') {\n onInterrupt(value);\n }\n };\n\n this._promise = new core_Deferred(undefined, onResolve, onReject, onCancel);\n return this._promise;\n }\n /**\r\n * Return whether or not the speech has reached it\'s end.\r\n *\r\n * @private\r\n *\r\n * @returns {boolean}\r\n */\n\n }, {\n key: "_checkFinished",\n value: function _checkFinished() {\n return this._done && this._localTime >= this._endTime;\n }\n /**\r\n * Gets the playback state of the audio.\r\n *\r\n * @readonly\r\n * @type {boolean}\r\n */\n\n }, {\n key: "playing",\n get: function get() {\n return this._playing;\n }\n /**\r\n * Gets the text of the speech.\r\n *\r\n * @readonly\r\n * @type {string}\r\n */\n\n }, {\n key: "text",\n get: function get() {\n return this._text;\n }\n /**\r\n * Gets a shallow copy of the speechmarks array for the speech.\r\n *\r\n * @readonly\r\n * @type {Array.}\r\n */\n\n }, {\n key: "speechmarks",\n get: function get() {\n return AbstractSpeech_toConsumableArray(this._speechmarks);\n }\n /**\r\n * Gets and sets the number of seconds to offset speechmark emission.\r\n * @type {number}\r\n */\n\n }, {\n key: "speechmarkOffset",\n get: function get() {\n return this._speechmarkOffset / 1000;\n },\n set: function set(offset) {\n this._speechmarkOffset = offset * 1000; // Store as milliseconds\n }\n /**\r\n * Emit speechmark messages as they are encountered in sync with audio.\r\n *\r\n * @param {number} currentTime - Current global time when update was called.\r\n */\n\n }, {\n key: "update",\n value: function update(currentTime) {\n if (!this._playing) {\n return;\n } // Update local audio time\n\n\n this._localTime = currentTime - this._startTime;\n\n if (!this._done) {\n // Emit speechmark messages for marks up to the current time\n while (!this._done && this._currentMark.time + this._speechmarkOffset <= this._localTime) {\n this._speaker.emit(this._speaker.constructor.EVENTS[this._currentMark.type], {\n speech: this,\n mark: this._currentMark\n });\n\n var _this$_markIter$next2 = this._markIter.next(),\n value = _this$_markIter$next2.value,\n done = _this$_markIter$next2.done;\n\n this._currentMark = value;\n this._done = done;\n }\n } // End playback\n\n\n if (this._checkFinished()) {\n this.stop();\n\n this._reset();\n }\n }\n /**\r\n * Play the speech from the beginning.\r\n *\r\n * @param {number} currentTime - Current global time when play was called.\r\n * @param {Function=} onFinish - Optional function to execute once the speech\r\n * promise resolves.\r\n * @param {Function=} onError - Optional function to execute if the speech\r\n * encounters and error during playback.\r\n * @param {Function=} onInterrupt - Optional function to execute if the speech\r\n * is canceled.\r\n *\r\n * @returns {Deferred} Resolves once the speech reaches the end of playback.\r\n */\n\n }, {\n key: "play",\n value: function play(currentTime, onFinish, onError, onInterrupt) {\n this._reset(currentTime);\n\n this._playing = true;\n\n this._speaker.emit(this._speaker.constructor.EVENTS.play, this);\n\n this._speaker.constructor.emit(this._speaker.constructor.EVENTS.play, this);\n\n return this._createPromise(onFinish, onError, onInterrupt);\n }\n /**\r\n * Pause the speech at the current time.\r\n *\r\n * @param {number} currentTime - Current global time when pause was called.\r\n */\n\n }, {\n key: "pause",\n value: function pause(currentTime) {\n this._playing = false;\n this._pauseTime = currentTime;\n\n this._speaker.emit(this._speaker.constructor.EVENTS.pause, this);\n\n this._speaker.constructor.emit(this._speaker.constructor.EVENTS.pause, this);\n }\n /**\r\n * Resume the speech at the current time.\r\n *\r\n * @param {number} currentTime - Current global time when resume was called.\r\n * @param {Function=} onFinish - Optional function to execute once the speech\r\n * promise resolves.\r\n * @param {Function=} onError - Optional function to execute if the speech\r\n * encounters and error during playback.\r\n * @param {Function=} onInterrupt - Optional function to execute if the speech\r\n * is canceled.\r\n *\r\n * @returns {Deferred} Resolves once the speech reaches the end of playback.\r\n */\n\n }, {\n key: "resume",\n value: function resume(currentTime, onFinish, onError, onInterrupt) {\n // Play from the beginning if the speech hasn\'t played yet\n if (!this._promise) {\n this._reset(currentTime);\n\n this._createPromise(onFinish, onError, onInterrupt);\n }\n\n this._playing = true;\n this._startTime += currentTime - this._pauseTime;\n\n this._speaker.emit(this._speaker.constructor.EVENTS.resume, this);\n\n this._speaker.constructor.emit(this._speaker.constructor.EVENTS.resume, this);\n\n return this._promise;\n }\n /**\r\n * Cancels playback of the speech at the current time. Cancel the speech promise.\r\n */\n\n }, {\n key: "cancel",\n value: function cancel() {\n if (this._promise) {\n this._promise.cancel();\n\n this._promise = null;\n }\n\n this._playing = false;\n }\n /**\r\n * Stop the speech and reset time to the beginning. Resolve the speech promise.\r\n */\n\n }, {\n key: "stop",\n value: function stop() {\n if (this._promise) {\n this._promise.resolve();\n\n this._promise = null;\n }\n\n this._playing = false;\n }\n }]);\n\n return AbstractSpeech;\n}();\n\n/* harmony default export */ var awspack_AbstractSpeech = (AbstractSpeech_AbstractSpeech);\n// CONCATENATED MODULE: ./src/core/awspack/Speech.js\nfunction Speech_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { Speech_typeof = function _typeof(obj) { return typeof obj; }; } else { Speech_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return Speech_typeof(obj); }\n\nfunction Speech_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction Speech_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction Speech_createClass(Constructor, protoProps, staticProps) { if (protoProps) Speech_defineProperties(Constructor.prototype, protoProps); if (staticProps) Speech_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction Speech_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { Speech_get = Reflect.get; } else { Speech_get = function _get(target, property, receiver) { var base = Speech_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return Speech_get(target, property, receiver || target); }\n\nfunction Speech_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = Speech_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction Speech_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) Speech_setPrototypeOf(subClass, superClass); }\n\nfunction Speech_setPrototypeOf(o, p) { Speech_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return Speech_setPrototypeOf(o, p); }\n\nfunction Speech_createSuper(Derived) { var hasNativeReflectConstruct = Speech_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = Speech_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = Speech_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return Speech_possibleConstructorReturn(this, result); }; }\n\nfunction Speech_possibleConstructorReturn(self, call) { if (call && (Speech_typeof(call) === "object" || typeof call === "function")) { return call; } return Speech_assertThisInitialized(self); }\n\nfunction Speech_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction Speech_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction Speech_getPrototypeOf(o) { Speech_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return Speech_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/**\r\n * The built-in class for asynchronous Promises.\r\n * @external Audio\r\n * @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLAudioElement/Audio\r\n */\n\n/**\r\n * @extends AbstractSpeech\r\n * @alias core/Speech\r\n */\n\nvar Speech = /*#__PURE__*/function (_AbstractSpeech) {\n Speech_inherits(Speech, _AbstractSpeech);\n\n var _super = Speech_createSuper(Speech);\n\n /**\r\n * @constructor\r\n *\r\n * @param {TextToSpeech} speaker - The owner of the Speech that will emit speechmark\r\n * messages.\r\n * @param {string} text - The text of the speech.\r\n * @param {Array.} [speechmarks=[]] - An array of speechmark objects representing\r\n * the text and timing of the speech.\r\n * @param {Object} audioConfig - Object containing audio and url.\r\n * @param {external:Audio} audioConfig.audio - Playable audio object.\r\n */\n function Speech(speaker, text) {\n var _this;\n\n var speechmarks = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];\n var audioConfig = arguments.length > 3 ? arguments[3] : undefined;\n\n Speech_classCallCheck(this, Speech);\n\n _this = _super.call(this, speaker, text, speechmarks);\n _this._audio = audioConfig.audio; // Keep track of whether the audio has finished playing through\n\n _this._audio.onended = function () {\n _this._audioFinished = true;\n };\n\n _this._audioFinished = true;\n return _this;\n }\n\n Speech_createClass(Speech, [{\n key: "_checkFinished",\n value: function _checkFinished() {\n return this._audioFinished && Speech_get(Speech_getPrototypeOf(Speech.prototype), "_checkFinished", this).call(this);\n }\n /**\r\n * Gets the playable audio for the speech.\r\n *\r\n * @readonly\r\n * @type {external:Audio}\r\n */\n\n }, {\n key: "audio",\n get: function get() {\n return this._audio;\n }\n /**\r\n * Gets the audio volume for the speech.\r\n *\r\n * @type {number}\r\n */\n\n }, {\n key: "volume",\n get: function get() {\n return this._audio.volume;\n }\n /**\r\n * Sets the audio volume for the speech.\r\n */\n ,\n set: function set(volume) {\n this._audio.volume = volume;\n }\n /**\r\n * Set the audio\'s current local time and play it.\r\n *\r\n * @private\r\n */\n\n }, {\n key: "_playAudio",\n value: function _playAudio() {\n var _this2 = this;\n\n if (this._speechmarkOffset < 0) {\n this._audio.currentTime = this._speechmarkOffset;\n setTimeout(function () {\n if (_this2._playing) {\n _this2._audio.currentTime = (_this2._localTime + _this2._speechmarkOffset) / 1000;\n\n _this2._audio.play();\n }\n }, -this._speechmarkOffset);\n } else {\n this._audio.currentTime = 0;\n\n this._audio.play();\n }\n }\n /**\r\n * Pause the audio once it is playable.\r\n *\r\n * @private\r\n */\n\n }, {\n key: "_pauseAudio",\n value: function _pauseAudio() {\n var _this3 = this;\n\n this._audio.play().then(function () {\n if (!_this3._playing) {\n _this3._audio.pause();\n }\n });\n }\n }, {\n key: "play",\n value: function play(currentTime, onFinish, onError, onInterrupt) {\n this._audioFinished = false;\n\n this._playAudio();\n\n return Speech_get(Speech_getPrototypeOf(Speech.prototype), "play", this).call(this, currentTime, onFinish, onError, onInterrupt);\n }\n }, {\n key: "pause",\n value: function pause(currentTime) {\n this._pauseAudio();\n\n Speech_get(Speech_getPrototypeOf(Speech.prototype), "pause", this).call(this, currentTime);\n }\n }, {\n key: "resume",\n value: function resume(currentTime, onFinish, onError, onInterrupt) {\n this._audioFinished = false;\n\n this._audio.play();\n\n return Speech_get(Speech_getPrototypeOf(Speech.prototype), "resume", this).call(this, currentTime, onFinish, onError, onInterrupt);\n }\n }, {\n key: "cancel",\n value: function cancel() {\n this._pauseAudio();\n\n Speech_get(Speech_getPrototypeOf(Speech.prototype), "cancel", this).call(this);\n }\n }, {\n key: "stop",\n value: function stop() {\n this._pauseAudio();\n\n this._audio.currentTime = 0;\n\n Speech_get(Speech_getPrototypeOf(Speech.prototype), "stop", this).call(this);\n }\n }]);\n\n return Speech;\n}(awspack_AbstractSpeech);\n\n/* harmony default export */ var awspack_Speech = (Speech);\n// CONCATENATED MODULE: ./src/core/awspack/TextToSpeechUtils.js\nfunction TextToSpeechUtils_toConsumableArray(arr) { return TextToSpeechUtils_arrayWithoutHoles(arr) || TextToSpeechUtils_iterableToArray(arr) || TextToSpeechUtils_unsupportedIterableToArray(arr) || TextToSpeechUtils_nonIterableSpread(); }\n\nfunction TextToSpeechUtils_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."); }\n\nfunction TextToSpeechUtils_iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction TextToSpeechUtils_arrayWithoutHoles(arr) { if (Array.isArray(arr)) return TextToSpeechUtils_arrayLikeToArray(arr); }\n\nfunction TextToSpeechUtils_slicedToArray(arr, i) { return TextToSpeechUtils_arrayWithHoles(arr) || TextToSpeechUtils_iterableToArrayLimit(arr, i) || TextToSpeechUtils_unsupportedIterableToArray(arr, i) || TextToSpeechUtils_nonIterableRest(); }\n\nfunction TextToSpeechUtils_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."); }\n\nfunction TextToSpeechUtils_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return TextToSpeechUtils_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return TextToSpeechUtils_arrayLikeToArray(o, minLen); }\n\nfunction TextToSpeechUtils_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction TextToSpeechUtils_iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction TextToSpeechUtils_arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction TextToSpeechUtils_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { TextToSpeechUtils_typeof = function _typeof(obj) { return typeof obj; }; } else { TextToSpeechUtils_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return TextToSpeechUtils_typeof(obj); }\n\nfunction TextToSpeechUtils_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction TextToSpeechUtils_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction TextToSpeechUtils_createClass(Constructor, protoProps, staticProps) { if (protoProps) TextToSpeechUtils_defineProperties(Constructor.prototype, protoProps); if (staticProps) TextToSpeechUtils_defineProperties(Constructor, staticProps); return Constructor; }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/**\r\n * A collection of useful text-to-speech functions.\r\n *\r\n * @hideconstructor\r\n */\n\nvar TextToSpeechUtils_TextToSpeechUtils = /*#__PURE__*/function () {\n function TextToSpeechUtils() {\n TextToSpeechUtils_classCallCheck(this, TextToSpeechUtils);\n }\n\n TextToSpeechUtils_createClass(TextToSpeechUtils, null, [{\n key: "autoGenerateSSMLMarks",\n value:\n /**\r\n * Returns a new string with SSML marks inserted based on\r\n * matches between the input string and the input map. The\r\n * word matches are case-insensitive. Words within existing\r\n * SSML tags will not be affected. Input text will be surrounded\r\n * by tags if needed.\r\n *\r\n * @param {string} text - Input string.\r\n * @param {object} map - Input object that maps mark keys\r\n * to arrays of words. Example:\r\n *\r\n * {\r\n * \'mark:sad\' : [\'sad\', \'blue\', \'down\'],\r\n * \'mark:happy\' : [\'joy\', \'glad\', \'great\'],\r\n * \'mark:no\' : [\'no\', \'nah\', \'nay\', \'sure\']\r\n * }\r\n * @param {Array.} [randomMarks = []] - If there are sentences that don\'t\r\n * match any words from the map object, marks from this array will be randomly\r\n * chosen and inserted.\r\n *\r\n * @returns {string} - Updated input string.\r\n */\n function autoGenerateSSMLMarks(text, map) {\n var _this = this;\n\n var randomMarks = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];\n\n if (TextToSpeechUtils_typeof(map) !== \'object\' || map === null) {\n throw new Error("Cannot generate SSML marks for text \\"".concat(text, "\\" because map is not an object."));\n } // process the input map into an internal format\n\n\n var internalMap = this._processInputMap(map);\n\n var speakTags = [\'\', \'\'];\n var ssmlMarkRegex = //;\n var ssmlTagRegex = /<[^>]*>/g; // Identify any existing SSML tags\n\n var existingTags = [];\n var result = ssmlTagRegex.exec(text);\n\n while (result !== null) {\n existingTags.push({\n start: result.index,\n end: result.index + result[0].length,\n text: result[0]\n });\n result = ssmlTagRegex.exec(text);\n }\n\n var chunks = [];\n var index = 0;\n var ssmlMarkResult;\n var duplicateMarkToCheck = [];\n existingTags.forEach(function (existingTag) {\n var substr = text.slice(index, existingTag.start);\n\n if (substr !== \'\') {\n // auto-mark non-tag text\n chunks.push(_this._insertMarks(substr, internalMap, duplicateMarkToCheck));\n duplicateMarkToCheck = [];\n }\n\n ssmlMarkResult = ssmlMarkRegex.exec(existingTag.text);\n\n if (ssmlMarkResult !== null) {\n var markText = ssmlMarkResult[1];\n duplicateMarkToCheck.push(markText);\n } else if (!speakTags.includes(existingTag.text)) {\n chunks.push(existingTag.text);\n } // advance the index\n\n\n index = existingTag.end;\n });\n chunks.push(this._insertMarks(text.slice(index), internalMap, duplicateMarkToCheck));\n var markedText = chunks.join(\'\');\n\n if (randomMarks && randomMarks.length > 0) {\n // add random marks to any unmarked sentences\n markedText = this.addMarksToUnmarkedSentences(markedText, randomMarks);\n }\n\n return TextToSpeechUtils.validateText(markedText);\n }\n /**\r\n * Returns a new string with a random SSML mark inserted at each sentence that\r\n * does not already contain an SSML mark.\r\n *\r\n * @param {string} text - Input string.\r\n * @param {Array.} marks - Any array of random SSML marks to choose from\r\n * when modifying the text.\r\n *\r\n * @returns {string}\r\n */\n\n }, {\n key: "addMarksToUnmarkedSentences",\n value: function addMarksToUnmarkedSentences(text, marks) {\n if (!marks || marks.length === 0) return text;\n var ssmlMarkRegex = //g;\n var ssmlTagRegex = /<[^>]*>/g; // Find the indices of any marks in the text\n\n var markIndices = [];\n var markResult = ssmlMarkRegex.exec(text);\n\n while (markResult !== null) {\n markIndices.push(markResult.index);\n markResult = ssmlMarkRegex.exec(text);\n } // Find all SSML tags in the text\n\n\n var existingTags = [];\n var ssmlResult = ssmlTagRegex.exec(text);\n\n while (ssmlResult !== null) {\n existingTags.push({\n start: ssmlResult.index,\n end: ssmlResult.index + ssmlResult[0].length,\n text: ssmlResult[0]\n });\n ssmlResult = ssmlTagRegex.exec(text);\n } // Create a copy of the text with all SSML marks replaces with whitespace\n\n\n var cleanedText = text.slice();\n existingTags.forEach(function (existingSsml) {\n var whitespace = new Array(existingSsml.text.length + 1).join(\' \');\n cleanedText = [cleanedText.slice(0, existingSsml.start), whitespace, cleanedText.slice(existingSsml.end)].join(\'\');\n });\n\n var sentenceEndIndices = this._getSentenceEnds(cleanedText); // Only insert random marks into sentences that don\'t already have any\n\n\n var prevIndex = 0;\n var targetIndices = sentenceEndIndices.filter(function (index) {\n var containsMark = markIndices.findIndex(function (markIndex) {\n return prevIndex <= markIndex && index > markIndex;\n }) !== -1;\n prevIndex = index;\n return !containsMark;\n });\n\n var randomMarkedText = this._insertRandomMarksAt(text, targetIndices, marks);\n\n return randomMarkedText;\n }\n /**\r\n * Generate a version of given text that is enclosed by Polly ssml speak tags.\r\n *\r\n * @param {string} text - The text to validate.\r\n *\r\n * @returns {string} - Updated input string.\r\n */\n\n }, {\n key: "validateText",\n value: function validateText(text) {\n if (!text) {\n text = \'\';\n } else {\n text = text.replace(/(^\\s*<\\s*speak\\s*)>\\s*|(^\\s*)/, \'\').replace(/(\\s*<\\s*\\/\\s*speak\\s*>\\s*$|\\s*$)/, \'\');\n }\n\n return text;\n }\n /**\r\n * Parse an input string and insert SSML marks based on\r\n * word matches in a map.\r\n *\r\n * @private\r\n *\r\n * @param {string} text - Input string.\r\n * @param {Array.} [indices = []] - An array of indices in the text input\r\n * where random marks should be inserted.\r\n * @param {Array.} [marks = []] - An array of mark strings to choose\r\n * from when inserting random marks.\r\n *\r\n * @returns {string} - Updated input string.\r\n */\n\n }, {\n key: "_insertRandomMarksAt",\n value: function _insertRandomMarksAt(text) {\n var indices = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n var marks = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];\n\n if (!marks || marks.length === 0 || !indices || indices.length === 0) {\n return text;\n }\n\n var offset = 0;\n indices.forEach(function (index) {\n var randomMark = "");\n text = [text.slice(0, index + offset), randomMark, text.slice(index + offset)].join(\'\');\n offset += randomMark.length;\n });\n return text;\n }\n /**\r\n * Parses a string of text and returns an array containing the indices\r\n * of the last character in a sentence that is not in the following list:\r\n * (\'.\', \'?\', \'!\')\r\n *\r\n * @private\r\n *\r\n * @param {string} text - Text to process for end of sentence\r\n * indices.\r\n *\r\n * @returns {Array.} - Array of end of sentence indices.\r\n */\n\n }, {\n key: "_getSentenceEnds",\n value: function _getSentenceEnds(text) {\n var sentenceRegex = /[^.!?]+[.!?]+/g;\n var endSentenceRegex = /[.!?]+/;\n var result = sentenceRegex.exec(text);\n var sentenceEnds = [];\n\n while (result !== null) {\n // find the last non-punctuation character\n var punctResult = endSentenceRegex.exec(result[0]);\n sentenceEnds.push(result.index + result[0].length - punctResult[0].length);\n result = sentenceRegex.exec(text);\n }\n\n return sentenceEnds;\n }\n /**\r\n * Parse an input string and insert SSML marks based on\r\n * word matches in a map.\r\n *\r\n * @private\r\n *\r\n * @param {string} text - Input string.\r\n * @param {Map} map - Mapping of words to mark values that\r\n * will be inserted as the value for a mark\'s \'name\' attribute.\r\n * @param {Array} duplicatesToCheck - A list of mark values to check for duplicate against the first word\r\n *\r\n * @returns {string} - Updated input string.\r\n */\n\n }, {\n key: "_insertMarks",\n value: function _insertMarks(text, map, duplicatesToCheck) {\n if (text === \'\') return text;\n var wordRegex = /\\w+|\\s+|[^\\s\\w]+/g;\n var lowerCaseWord;\n var checkDuplicate = true;\n var markedWords = text.match(wordRegex).map(function (word) {\n lowerCaseWord = word.toLowerCase();\n\n if (map.has(lowerCaseWord)) {\n var marks = map.get(lowerCaseWord).map(function (mark) {\n if (checkDuplicate) {\n checkDuplicate = false;\n return duplicatesToCheck.includes(mark) ? \'\' : "");\n } else {\n return "");\n }\n });\n return "".concat(marks.join(\'\')).concat(word);\n } else {\n checkDuplicate = false;\n return word;\n }\n });\n var existingMarks = duplicatesToCheck.map(function (mark) {\n return "");\n });\n return "".concat(existingMarks.join(\'\')).concat(markedWords.join(\'\'));\n }\n /**\r\n * Processes an input object for mapping an array\r\n * of words to specific mark keys. Converts the input\r\n * map into a Map with a more efficient format for\r\n * performing mark injection.\r\n *\r\n * @private\r\n *\r\n * @param {object} map - Input object that maps mark keys\r\n * to arrays of words.\r\n *\r\n * @returns {Map} - Map for internal use.\r\n */\n\n }, {\n key: "_processInputMap",\n value: function _processInputMap(map) {\n var internalMap = new Map();\n var list = [];\n Object.entries(map).forEach(function (_ref) {\n var _ref2 = TextToSpeechUtils_slicedToArray(_ref, 2),\n key = _ref2[0],\n value = _ref2[1];\n\n if (!Array.isArray(value)) {\n throw new Error("Cannot generate SSML marks from map \\"".concat(map, "\\" because value for key \'").concat(key, "\' is not an array."));\n }\n\n value.forEach(function (word) {\n var lowerCaseWord = word.toLowerCase();\n list = internalMap.get(lowerCaseWord);\n\n if (list !== undefined && !list.includes(key)) {\n internalMap.set(lowerCaseWord, [].concat(TextToSpeechUtils_toConsumableArray(list), [key]));\n } else {\n internalMap.set(lowerCaseWord, [key]);\n }\n });\n });\n return internalMap;\n }\n }]);\n\n return TextToSpeechUtils;\n}();\n\n/* harmony default export */ var awspack_TextToSpeechUtils = (TextToSpeechUtils_TextToSpeechUtils);\n// CONCATENATED MODULE: ./src/core/awspack/AbstractTextToSpeechFeature.js\nfunction AbstractTextToSpeechFeature_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { AbstractTextToSpeechFeature_typeof = function _typeof(obj) { return typeof obj; }; } else { AbstractTextToSpeechFeature_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return AbstractTextToSpeechFeature_typeof(obj); }\n\nfunction AbstractTextToSpeechFeature_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction AbstractTextToSpeechFeature_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { AbstractTextToSpeechFeature_ownKeys(Object(source), true).forEach(function (key) { AbstractTextToSpeechFeature_defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { AbstractTextToSpeechFeature_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction AbstractTextToSpeechFeature_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction AbstractTextToSpeechFeature_slicedToArray(arr, i) { return AbstractTextToSpeechFeature_arrayWithHoles(arr) || AbstractTextToSpeechFeature_iterableToArrayLimit(arr, i) || AbstractTextToSpeechFeature_unsupportedIterableToArray(arr, i) || AbstractTextToSpeechFeature_nonIterableRest(); }\n\nfunction AbstractTextToSpeechFeature_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."); }\n\nfunction AbstractTextToSpeechFeature_iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction AbstractTextToSpeechFeature_arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction AbstractTextToSpeechFeature_toConsumableArray(arr) { return AbstractTextToSpeechFeature_arrayWithoutHoles(arr) || AbstractTextToSpeechFeature_iterableToArray(arr) || AbstractTextToSpeechFeature_unsupportedIterableToArray(arr) || AbstractTextToSpeechFeature_nonIterableSpread(); }\n\nfunction AbstractTextToSpeechFeature_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."); }\n\nfunction AbstractTextToSpeechFeature_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return AbstractTextToSpeechFeature_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return AbstractTextToSpeechFeature_arrayLikeToArray(o, minLen); }\n\nfunction AbstractTextToSpeechFeature_iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction AbstractTextToSpeechFeature_arrayWithoutHoles(arr) { if (Array.isArray(arr)) return AbstractTextToSpeechFeature_arrayLikeToArray(arr); }\n\nfunction AbstractTextToSpeechFeature_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction AbstractTextToSpeechFeature_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction AbstractTextToSpeechFeature_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction AbstractTextToSpeechFeature_createClass(Constructor, protoProps, staticProps) { if (protoProps) AbstractTextToSpeechFeature_defineProperties(Constructor.prototype, protoProps); if (staticProps) AbstractTextToSpeechFeature_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction AbstractTextToSpeechFeature_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { AbstractTextToSpeechFeature_get = Reflect.get; } else { AbstractTextToSpeechFeature_get = function _get(target, property, receiver) { var base = AbstractTextToSpeechFeature_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return AbstractTextToSpeechFeature_get(target, property, receiver || target); }\n\nfunction AbstractTextToSpeechFeature_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = AbstractTextToSpeechFeature_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction AbstractTextToSpeechFeature_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) AbstractTextToSpeechFeature_setPrototypeOf(subClass, superClass); }\n\nfunction AbstractTextToSpeechFeature_setPrototypeOf(o, p) { AbstractTextToSpeechFeature_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return AbstractTextToSpeechFeature_setPrototypeOf(o, p); }\n\nfunction AbstractTextToSpeechFeature_createSuper(Derived) { var hasNativeReflectConstruct = AbstractTextToSpeechFeature_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = AbstractTextToSpeechFeature_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = AbstractTextToSpeechFeature_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return AbstractTextToSpeechFeature_possibleConstructorReturn(this, result); }; }\n\nfunction AbstractTextToSpeechFeature_possibleConstructorReturn(self, call) { if (call && (AbstractTextToSpeechFeature_typeof(call) === "object" || typeof call === "function")) { return call; } return AbstractTextToSpeechFeature_assertThisInitialized(self); }\n\nfunction AbstractTextToSpeechFeature_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction AbstractTextToSpeechFeature_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction AbstractTextToSpeechFeature_getPrototypeOf(o) { AbstractTextToSpeechFeature_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return AbstractTextToSpeechFeature_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n\n\n\n/**\r\n * The Amazon Polly service object.\r\n * @external Polly\r\n * @see https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Polly.html\r\n */\n\n/**\r\n * The presigner object that can be used to generate presigned urls for the Polly service.\r\n * @external Presigner\r\n * @see https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Polly/Presigner.html\r\n */\n// Available options for Polly\n\nvar engines = [\'standard\', \'neural\'];\nvar audioFormats = [\'mp3\', \'ogg_vorbis\', \'pcm\'];\nvar speechmarkTypes = [\'sentence\', \'ssml\', \'viseme\', \'word\'];\nvar sampleRates = {\n mp3: {\n rates: [\'8000\', \'16000\', \'22050\', \'24000\'],\n defaults: {\n standard: \'2050\',\n neural: \'2400\'\n }\n },\n pcm: {\n rates: [\'8000\', \'16000\'],\n defaults: {\n standard: \'1600\',\n neural: \'1600\'\n }\n }\n};\nsampleRates.ogg_vorbis = sampleRates.mp3;\nvar awsVersion;\n/**\r\n * Base class for turning text input into playable audio. There should be one instance\r\n * per speaker, each instance can play only one piece of text at a time.\r\n *\r\n * @extends AbstractHostFeature\r\n * @abstract\r\n *\r\n * @property {(number|undefined)} AWS_VERSION - Gets the version of AWS SDK being\r\n * used. Will be undefined until [initializeService]{@link AbstractTextToSpeechFeature.initializeService}\r\n * has been successfully executed.\r\n * @property {string} [POLLY_MIN_NEURAL_VERSION=\'2.503\'] - Gets the minimum version\r\n * of the AWS SDK that is necessary to use neural voices with AWS Polly.\r\n * @property {Object} POLLY_DEFAULTS - Default values to use with calls to {@link external:Polly}.\r\n * @property {string} [POLLY_DEFAULTS.Engine=\'standard\']\r\n * @property {Array.} [POLLY_DEFAULTS.LexiconNames=[]]\r\n * @property {string} [POLLY_DEFAULTS.OutputFormat=\'mp3\']\r\n * @property {string} [POLLY_DEFAULTS.SampleRate=\'22050\']\r\n * @property {string} [POLLY_DEFAULTS.Text=\'\']\r\n * @property {string} [POLLY_DEFAULTS.TextType=\'ssml\']\r\n * @property {string} [POLLY_DEFAULTS.VoiceId=\'Amy\']\r\n * @property {string} [POLLY_DEFAULTS.LanguageCode=\'en-GB\']\r\n * @property {string} [POLLY_DEFAULTS.LanguageName=\'British English\']\r\n * @property {Array.} [POLLY_VOICES=[]] - An array of voices available in\r\n * Polly. Will be empty until [initializeService]{@link AbstractTextToSpeechFeature.initializeService}\r\n * has been successfully executed. See [Polly Documentation]{@link https://docs.aws.amazon.com/polly/latest/dg/voicelist.html}\r\n * for a full list of available voices.\r\n * @property {Object} [POLLY_LANGUAGES={}] - An object that maps language names\r\n * to language codes that are available in Polly. Will be empty until\r\n * [initializeService]{@link AbstractTextToSpeechFeature.initializeService}\r\n * has been successfully executed. See [Polly Documentation]{@link https://docs.aws.amazon.com/polly/latest/dg/SupportedLanguage.html}\r\n * for a full list of available languages and corresponding codes.\r\n * @property {Object} [POLLY_LANGUAGE_CODES={}] - An object that maps language codes\r\n * to language names that are available in Polly. Will be empty until\r\n * [initializeService]{@link AbstractTextToSpeechFeature.initializeService}\r\n * has been successfully executed. See [Polly Documentation]{@link https://docs.aws.amazon.com/polly/latest/dg/SupportedLanguage.html}\r\n * for a full list of available languages and corresponding codes.\r\n * @property {Object} EVENTS - Built-in messages that the feature emits. When the\r\n * feature is added to a {@link core/HostObject}, event names will be prefixed by the\r\n * name of the feature class + \'.\'.\r\n * @property {string} [EVENTS.ready=onReadyEvent] - Message that is emitted after\r\n * [initializeService]{@link AbstractTextToSpeechFeature.initializeService} has been\r\n * successfully executed.\r\n * @property {string} [EVENTS.play=onPlayEvent] - Message that is emitted after\r\n * each call to [play]{@link AbstractTextToSpeechFeature#play}. The speech that was played\r\n * is supplied as an argument to listener functions.\r\n * @property {string} [EVENTS.pause=onPauseEvent] - Message that is emitted after\r\n * each call to [pause]{@link AbstractTextToSpeechFeature#pause}. The speech that was paused\r\n * is supplied as an argument to listener functions.\r\n * @property {string} [EVENTS.resume=onResumeEvent] - Message that is emitted after\r\n * each call to [resume]{@link AbstractTextToSpeechFeature#resume}. The speech that was\r\n * resumed is supplied as an argument to listener functions.\r\n * @property {string} [EVENTS.interrupt=onInterruptEvent] - Message that is emitted\r\n * if there is a current speech in progress and [play]{@link AbstractTextToSpeechFeature#play}\r\n * or [resume]{@link AbstractTextToSpeechFeature#resume} are executed for a new speech.\r\n * The speech that was interrupted is supplied as an argument to listener functions.\r\n * @property {string} [EVENTS.stop=onStopEvent] - Message that is emitted after\r\n * each call to [stop]{@link AbstractTextToSpeechFeature#stop} and when a speech reaches\r\n * the end of playback. The speech that was stopped is supplied as an argument\r\n * to listener functions.\r\n * @property {string} [EVENTS.sentence=onSentenceEvent] - Message that is emitted\r\n * each time a sentence speechmark is encountered whose timestamp matches up with\r\n * the speech audio\'s current time. The sentence speechmark object is supplied as\r\n * an argument to listener functions.\r\n * @property {string} [EVENTS.word=onWordEvent] - Message that is emitted\r\n * each time a word speechmark is encountered whose timestamp matches up with\r\n * the speech audio\'s current time. The word speechmark object is supplied as\r\n * an argument to listener functions.\r\n * @property {string} [EVENTS.viseme=onVisemeEvent] - Message that is emitted\r\n * each time a viseme speechmark is encountered whose timestamp matches up with\r\n * the speech audio\'s current time. The viseme speechmark object is supplied as\r\n * an argument to listener functions.\r\n * @property {string} [EVENTS.ssml=onSsmlEvent] - Message that is emitted\r\n * each time a ssml speechmark is encountered whose timestamp matches up with\r\n * the speech audio\'s current time. The ssml speechmark object is supplied as\r\n * an argument to listener functions.\r\n * @property {Object} SERVICES - AWS services that are necessary for the feature\r\n * to function.\r\n * @property {external:Polly} SERVICES.polly - The Polly service that is used\r\n * to synthesize speechmarks. Will be undefined until [initializeService]{@link AbstractTextToSpeechFeature.initializeService}\r\n * has been successfully executed\r\n * @property {external:Presigner} SERVICES.presigner - The Polly Presigner\r\n * object that is used to synthesize speech audio. Will be undefined until\r\n * [initializeService]{@link AbstractTextToSpeechFeature.initializeService}\r\n * has been successfully executed.\r\n */\n\nvar AbstractTextToSpeechFeature_AbstractTextToSpeechFeature = /*#__PURE__*/function (_AbstractHostFeature) {\n AbstractTextToSpeechFeature_inherits(AbstractTextToSpeechFeature, _AbstractHostFeature);\n\n var _super = AbstractTextToSpeechFeature_createSuper(AbstractTextToSpeechFeature);\n\n /**\r\n * @constructor\r\n *\r\n * @param {core/HostObject} host - Host object managing the feature.\r\n * @param {Object=} options - Options that will be sent to Polly for each speech.\r\n * @param {string=} options.voice - The name of the Polly voice to use for all speech.\r\n * @param {string=} options.engine - The name of the Polly engine to use for all speech.\r\n * @param {string=} options.language - The name of the language to use for all speech.\r\n * @param {audioFormat} [options.audioFormat=\'mp3\'] - The format to use for generated\r\n * audio for all speeches.\r\n * @param {string=} options.sampleRate - The sample rate for audio files for all\r\n * speeches.\r\n * @param {number} [options.speechmarkOffset=0] - Amount of time in seconds to\r\n * offset speechmark event emission from the audio.\r\n * @param {number} [options.minEndMarkDuration=.05] - The minimum amount of time\r\n * in seconds that the last speechmark of each type in a speech can have its\r\n * duration property set to.\r\n * @param {number} [options.volume=1] - The default volume to play speech audio\r\n * with.\r\n * @param {boolean} [options.isGlobal=false] - Whether the audio source should default\r\n * to global regardless of whether or not it is attached to an object.\r\n */\n function AbstractTextToSpeechFeature(host) {\n var _this;\n\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n voice: undefined,\n engine: undefined,\n language: undefined,\n audioFormat: \'mp3\',\n sampleRate: undefined,\n speechmarkOffset: 0,\n minEndMarkDuration: 0.05,\n volume: 1,\n isGlobal: false\n };\n\n AbstractTextToSpeechFeature_classCallCheck(this, AbstractTextToSpeechFeature);\n\n _this = _super.call(this, host);\n _this._speechCache = {};\n _this._currentSpeech = null;\n _this._currentPromise = null;\n _this._isValidated = false;\n _this.speechmarkOffset = Number.isNaN(Number(options.speechmarkOffset)) ? 0 : Number(options.speechmarkOffset);\n _this.minEndMarkDuration = Number.isNaN(Number(options.minEndMarkDuration)) ? 0 : Number(options.minEndMarkDuration);\n _this.volume = Number.isNaN(Number(options.volume)) ? 1 : Number(options.volume);\n _this._isGlobal = options.isGlobal || false;\n _this._promises = {\n volume: core_Deferred.resolve()\n };\n _this._volumePaused = false; // Set default options for each speech\n\n _this._voice = options.voice || _this.constructor.POLLY_DEFAULTS.VoiceId;\n _this._language = options.language || _this.constructor.POLLY_DEFAULTS.LanguageName;\n _this._engine = engines.includes(options.engine) ? options.engine : _this.constructor.POLLY_DEFAULTS.Engine;\n _this._audioFormat = audioFormats.includes(options.audioFormat) ? options.audioFormat : _this.constructor.POLLY_DEFAULTS.OutputFormat;\n _this._sampleRate = sampleRates[_this._audioFormat].rates.includes(options.sampleRate) ? options.sampleRate : _this.constructor.POLLY_DEFAULTS.SampleRate;\n return _this;\n }\n /**\r\n * Store Polly, Presigner and AWS SDK Version for use across all instances.\r\n *\r\n * @param {external:Polly} polly - Polly instance to use to generate speechmarks.\r\n * @param {external:Presigner} presigner - Presigner instance to use to generate\r\n * audio URLs.\r\n * @param {string} version - Version of the AWS SDK to use to validate voice options.\r\n */\n\n\n AbstractTextToSpeechFeature_createClass(AbstractTextToSpeechFeature, [{\n key: "currentSpeech",\n get:\n /**\r\n * Gets the text of the currently playing speech.\r\n *\r\n * @readonly\r\n * @type {string}\r\n */\n function get() {\n if (this._currentSpeech) {\n return this._currentSpeech.text;\n } else {\n return null;\n }\n }\n /**\r\n * Gets and sets the number of seconds to offset speechmark emission.\r\n *\r\n * @type {number}\r\n */\n\n }, {\n key: "speechmarkOffset",\n get: function get() {\n return this._speechmarkOffset;\n },\n set: function set(offset) {\n this._speechmarkOffset = offset;\n\n if (this._currentSpeech) {\n this._currentSpeech.speechmarkOffset = offset;\n }\n }\n /**\r\n * Gets and sets the The minimum amount of time in seconds that the last\r\n * speechmark of each type in a speech can have its duration property set to.\r\n *\r\n * @type number\r\n */\n\n }, {\n key: "minEndMarkDuration",\n get: function get() {\n return this._minEndMarkDuration / 1000;\n },\n set: function set(duration) {\n this._minEndMarkDuration = duration * 1000;\n }\n /**\r\n * Appends the Sumerian Hosts custom user-agent to a string if it is not\r\n * already present.\r\n *\r\n * @private\r\n *\r\n * @param {string} currentUserAgent - String to append to if needed.\r\n *\r\n * @returns {string}\r\n */\n\n }, {\n key: "_validateEngine",\n value:\n /**\r\n * Checks if a given engine type is compatible with the AWS SDK version. If it\r\n * is, return the original value. Otherwise return a default.\r\n *\r\n * @private\r\n *\r\n * @param {string} engine - The type of Polly voice engine to validate.\r\n *\r\n * @returns {string}\r\n */\n function _validateEngine(engine) {\n // Default to the standard engine if neural is not available for this version\n if (engine === undefined || this.constructor.AWS_VERSION < this.constructor.POLLY_MIN_NEURAL_VERSION) {\n engine = this.constructor.POLLY_DEFAULTS.Engine;\n }\n\n return engine;\n }\n /**\r\n * Checks if a given audio format type is compatible with Polly. If it is, return\r\n * the original value. Otherwise return a default.\r\n *\r\n * @private\r\n *\r\n * @param {string} engine - The type of Polly voice engine to validate.\r\n *\r\n * @returns {string}\r\n */\n\n }, {\n key: "_validateFormat",\n value: function _validateFormat(format) {\n if (format === undefined || !audioFormats.includes(format)) {\n format = this.constructor.POLLY_DEFAULTS.OutputFormat;\n }\n\n return format;\n }\n /**\r\n * Checks if a given audio sampling rate is compatible with the current audio\r\n * format. If it is, return the original value. Otherwise return a default.\r\n *\r\n * @private\r\n *\r\n * @param {string} engine - The type of Polly voice engine to validate.\r\n *\r\n * @returns {string}\r\n */\n\n }, {\n key: "_validateRate",\n value: function _validateRate(rate) {\n // Use default if specified sample rate is not valid for the audio format\n if (rate === undefined || !sampleRates[this._audioFormat].rates.includes(rate)) {\n rate = sampleRates[this._audioFormat].defaults[this._engine];\n }\n\n return rate;\n }\n /**\r\n * Checks if a given Polly voice id is compatible with the current Polly engine.\r\n * If it is, return the original value. Otherwise return a default.\r\n *\r\n * @private\r\n *\r\n * @param {string} engine - The type of Polly voice engine to validate.\r\n *\r\n * @returns {string}\r\n */\n\n }, {\n key: "_validateVoice",\n value: function _validateVoice(voiceId) {\n var voice = this.constructor.POLLY_VOICES.find(function (v) {\n return v.Id === voiceId;\n }); // Use the default voice if the voice isn\'t supported by the engine\n\n if (voice === undefined || !voice.SupportedEngines.includes(this._engine)) {\n voiceId = this.constructor.POLLY_DEFAULTS.VoiceId;\n }\n\n return voiceId;\n }\n /**\r\n * Checks if a given Polly language is compatible with the current Polly voice.\r\n * If it is, return the original value. Otherwise return a default.\r\n *\r\n * @private\r\n *\r\n * @param {string} engine - The type of Polly voice engine to validate.\r\n *\r\n * @returns {string}\r\n */\n\n }, {\n key: "_validateLanguage",\n value: function _validateLanguage(language) {\n var _this2 = this;\n\n var voice = this.constructor.POLLY_VOICES.find(function (v) {\n return v.Id === _this2._voice;\n });\n var languageCode = this.constructor.POLLY_LANGUAGES[language]; // Find the languages available for the current voice\n\n var availableCodes = [voice.LanguageCode];\n\n if (voice.AdditionalLanguageCodes) {\n availableCodes.push.apply(availableCodes, AbstractTextToSpeechFeature_toConsumableArray(voice.AdditionalLanguageCodes));\n } // If the current voice doesn\'t support the language, use its default\n\n\n if (!availableCodes.includes(languageCode)) {\n language = this.constructor.POLLY_LANGUAGE_CODES[voice.LanguageCode];\n }\n\n return language;\n }\n /**\r\n * Validate the current Polly options to make sure they are compatible with each\r\n * other.\r\n *\r\n * @private\r\n */\n\n }, {\n key: "_validate",\n value: function _validate() {\n // Validate speech parameters\n this._engine = this._validateEngine(this._engine);\n this._audioFormat = this._validateFormat(this._audioFormat);\n this._sampleRate = this._validateRate(this._sampleRate);\n this._voice = this._validateVoice(this._voice);\n this._language = this._validateLanguage(this._language);\n this._isValidated = true;\n }\n /**\r\n * Return an object containing parameters compatible with Polly.synthesizeSpeech.\r\n *\r\n * @private\r\n *\r\n * @returns {Object}\r\n */\n\n }, {\n key: "_getConfig",\n value: function _getConfig() {\n // Make sure parameters have been validated\n if (this.constructor.isReady && !this._isValidated) {\n this._validate();\n } // Create a config object compatible with Polly\n\n\n return {\n Engine: this._engine,\n OutputFormat: this._audioFormat,\n SampleRate: this._sampleRate,\n VoiceId: this._voice,\n LanguageCode: this.constructor.POLLY_LANGUAGES[this._language]\n };\n }\n /**\r\n * Update Polly parameters with options from a given config. All stored speeches\r\n * will be updated to use the new parameters, unless the speech text is contained\r\n * in the \'skipSpeeches\' parameter.\r\n *\r\n * @private\r\n *\r\n * @param {Object} config - Polly parameter options to overwrite.\r\n * @param {Array.} skipSpeeches - Text of any speeches that should not\r\n * have parameters updated.\r\n *\r\n * @returns {Object}\r\n */\n\n }, {\n key: "_updateConfig",\n value: function _updateConfig(config) {\n var _this3 = this;\n\n var skipSpeeches = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n\n var currentConfig = this._getConfig();\n\n if (!config) {\n return currentConfig;\n }\n\n this._isValidated = false;\n var currentConfigStr = JSON.stringify(currentConfig); // Update options\n\n if (config.Engine) {\n this._engine = config.Engine;\n }\n\n if (config.audioFormat) {\n this._audioFormat = config.audioFormat;\n }\n\n if (config.SampleRate) {\n this._sampleRate = config.SampleRate;\n }\n\n if (config.VoiceId) {\n this._voice = config.VoiceId;\n }\n\n if (config.Language) {\n this._language = config.Language;\n } // Validate the config\n\n\n var validConfig = this._getConfig(); // Exit if nothing has changed\n\n\n var configStr = JSON.stringify(validConfig);\n\n if (currentConfigStr === configStr) {\n this._isValidated = true;\n return validConfig;\n } // Update all cached configs\n\n\n Object.entries(this._speechCache).forEach(function (_ref) {\n var _ref2 = AbstractTextToSpeechFeature_slicedToArray(_ref, 2),\n text = _ref2[0],\n speech = _ref2[1];\n\n // Check if this is a skipped speech\n if (skipSpeeches.includes(text)) {\n return;\n }\n\n var speechConfigStr = JSON.stringify(speech.config); // Update the speech with new parameters\n\n if (speechConfigStr !== configStr) {\n _this3._updateSpeech(text, validConfig);\n }\n });\n return validConfig;\n }\n /**\r\n * Update an existing speech, or add a new speech with new Polly parameters with\r\n * options from a given config.\r\n *\r\n * @private\r\n *\r\n * @param {string} text - The text of the speech to update.\r\n * @param {Object} config - Polly parameter options to update.\r\n * @param {boolean} [force=false] - Whether to force the speech to be updated\r\n * if no parameters have changes.\r\n *\r\n * @returns {AbstractSpeech}\r\n */\n\n }, {\n key: "_updateSpeech",\n value: function _updateSpeech(text, config) {\n var _this4 = this;\n\n var force = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n var speech = this._speechCache[text] || {}; // Exit if nothing has changed and force is false\n\n if (!force && config !== undefined && speech.config && JSON.stringify(config) === JSON.stringify(speech.config)) {\n return speech;\n } // Create separate parameters for audio and speechmark generation\n\n\n var audioParams = AbstractTextToSpeechFeature_objectSpread(AbstractTextToSpeechFeature_objectSpread({}, config), {}, {\n Text: text,\n TextType: \'ssml\'\n });\n\n var speechmarkParams = AbstractTextToSpeechFeature_objectSpread(AbstractTextToSpeechFeature_objectSpread({}, audioParams), {}, {\n OutputFormat: \'json\',\n SpeechMarkTypes: speechmarkTypes\n }); // Generate audio and speechmarks\n\n\n speech.config = config;\n speech.promise = Promise.all([this._synthesizeSpeechmarks(speechmarkParams), this._synthesizeAudio(audioParams)]).then(function (results) {\n return _this4._createSpeech.apply(_this4, [text].concat(AbstractTextToSpeechFeature_toConsumableArray(results)));\n });\n this._speechCache[text] = speech;\n return speech;\n }\n /**\r\n * Create a new Speech object for the speaker.\r\n *\r\n * @private\r\n *\r\n * @param {TextToSpeech} speaker - The TextToSpeech instance that will own the speech.\r\n * @param {string} text - Text of the speech.\r\n * @param {Object} speechmarks - Speechmarks for the speech.\r\n * @param {Object} audioConfig - Audio for the speech.\r\n *\r\n * @returns {AbstractSpeech}\r\n */\n\n }, {\n key: "_createSpeech",\n value: function _createSpeech(text, speechmarks, audioConfig) {\n return new awspack_AbstractSpeech(this, text, speechmarks, audioConfig);\n }\n /**\r\n * Create presigned URL of speech audio for the given speech text.\r\n *\r\n * @private\r\n *\r\n * @param {Object} params - Parameters object compatible with Polly.synthesizeSpeech.\r\n *\r\n * @returns {Deferred} Resolves with an object containing the audio URL.\r\n */\n\n }, {\n key: "_synthesizeAudio",\n value: function _synthesizeAudio(params) {\n var _this5 = this;\n\n return new core_Deferred(function (resolve, reject) {\n _this5.constructor.SERVICES.presigner.getSynthesizeSpeechUrl(params, function (error, url) {\n if (!error) {\n resolve({\n url: url\n });\n } else {\n reject(error);\n }\n });\n });\n }\n /**\r\n * Retrieves and parses speechmarks for the given speech text.\r\n *\r\n * @private\r\n *\r\n * @param {Object} params - Parameters object compatible with Polly.synthesizeSpeech.\r\n *\r\n * @returns {Deferred} Resolves with an array of speechmark objects\r\n */\n\n }, {\n key: "_synthesizeSpeechmarks",\n value: function _synthesizeSpeechmarks(params) {\n var _this6 = this;\n\n return this.constructor.SERVICES.polly.synthesizeSpeech(params).promise().then(function (result) {\n // Convert charcodes to string\n var jsonString = JSON.stringify(result.AudioStream);\n var json = JSON.parse(jsonString);\n var dataStr = json.data.map(function (c) {\n return String.fromCharCode(c);\n }).join(\'\');\n var markTypes = {\n sentence: [],\n word: [],\n viseme: [],\n ssml: []\n };\n var endMarkTypes = {\n sentence: null,\n word: null,\n viseme: null,\n ssml: null\n }; // Split by enclosing {} to create speechmark objects\n\n var speechMarks = AbstractTextToSpeechFeature_toConsumableArray(dataStr.matchAll(/\\{.*?\\}(?=\\n|$)/gm)).map(function (match) {\n var mark = JSON.parse(match[0]); // Set the duration of the last speechmark stored matching this one\'s type\n\n var numMarks = markTypes[mark.type].length;\n\n if (numMarks > 0) {\n var lastMark = markTypes[mark.type][numMarks - 1];\n lastMark.duration = mark.time - lastMark.time;\n }\n\n markTypes[mark.type].push(mark);\n endMarkTypes[mark.type] = mark;\n return mark;\n }); // Find the time of the latest speechmark\n\n\n var endTimes = [];\n\n if (endMarkTypes.sentence) {\n endTimes.push(endMarkTypes.sentence.time);\n }\n\n if (endMarkTypes.word) {\n endTimes.push(endMarkTypes.word.time);\n }\n\n if (endMarkTypes.viseme) {\n endTimes.push(endMarkTypes.viseme.time);\n }\n\n if (endMarkTypes.ssml) {\n endTimes.push(endMarkTypes.ssml.time);\n }\n\n var endTime = Math.max.apply(Math, endTimes); // Calculate duration for the ending speechMarks of each type\n\n if (endMarkTypes.sentence) {\n endMarkTypes.sentence.duration = Math.max(_this6._minEndMarkDuration, endTime - endMarkTypes.sentence.time);\n }\n\n if (endMarkTypes.word) {\n endMarkTypes.word.duration = Math.max(_this6._minEndMarkDuration, endTime - endMarkTypes.word.time);\n }\n\n if (endMarkTypes.viseme) {\n endMarkTypes.viseme.duration = Math.max(_this6._minEndMarkDuration, endTime - endMarkTypes.viseme.time);\n }\n\n if (endMarkTypes.ssml) {\n endMarkTypes.ssml.duration = Math.max(_this6._minEndMarkDuration, endTime - endMarkTypes.ssml.time);\n }\n\n return speechMarks;\n });\n }\n /**\r\n * Returns a Speech object that has the given text.\r\n *\r\n * @private\r\n *\r\n * @param {string} text - The text content of the Speech.\r\n * @param {Object=} config - Options to update the Speech with.\r\n *\r\n * @returns {Deferred} Resolves with Speech or null;\r\n */\n\n }, {\n key: "_getSpeech",\n value: function _getSpeech(text, config) {\n // Make sure AWS services exist\n if (!this.constructor.isReady) {\n var e = \'AWS services have not been initialized.\';\n return core_Deferred.reject(e);\n } // Make sure its possible to generate speeches\n\n\n if (!text) {\n var _e2 = \'Cannot play a speech with no text.\';\n return core_Deferred.reject(_e2);\n } // Update the speech with options\n\n\n text = awspack_TextToSpeechUtils.validateText(text);\n config = this._updateConfig(config, text);\n return this._updateSpeech(text, config).promise;\n }\n /**\r\n * Adds a namespace to the host with the name of the feature to contain properties\r\n * and methods from the feature that users of the host need access to.\r\n *\r\n * @see TextToSpeechFeature\r\n */\n\n }, {\n key: "installApi",\n value: function installApi() {\n var _this7 = this;\n\n /**\r\n * @inner\r\n * @namespace TextToSpeechFeature\r\n */\n var api = AbstractTextToSpeechFeature_get(AbstractTextToSpeechFeature_getPrototypeOf(AbstractTextToSpeechFeature.prototype), "installApi", this).call(this);\n\n Object.assign(api, {\n /**\r\n * @memberof TextToSpeechFeature\r\n * @instance\r\n * @method\r\n * @see AbstractTextToSpeechFeature#play\r\n */\n play: this.play.bind(this),\n\n /**\r\n * @memberof TextToSpeechFeature\r\n * @instance\r\n * @method\r\n * @see AbstractTextToSpeechFeature#pause\r\n */\n pause: this.pause.bind(this),\n\n /**\r\n * @memberof TextToSpeechFeature\r\n * @instance\r\n * @method\r\n * @see AbstractTextToSpeechFeature#resume\r\n */\n resume: this.resume.bind(this),\n\n /**\r\n * @memberof TextToSpeechFeature\r\n * @instance\r\n * @method\r\n * @see AbstractTextToSpeechFeature#stop\r\n */\n stop: this.stop.bind(this),\n\n /**\r\n * @memberof TextToSpeechFeature\r\n * @instance\r\n * @method\r\n * @see AbstractTextToSpeechFeature#getVolume\r\n */\n getVolume: this.getVolume.bind(this),\n\n /**\r\n * @memberof TextToSpeechFeature\r\n * @instance\r\n * @method\r\n * @see AbstractTextToSpeechFeature#setVolume\r\n */\n setVolume: this.setVolume.bind(this),\n\n /**\r\n * @memberof TextToSpeechFeature\r\n * @instance\r\n * @method\r\n * @see AbstractTextToSpeechFeature#pauseVolume\r\n */\n pauseVolume: this.pauseVolume.bind(this),\n\n /**\r\n * @memberof TextToSpeechFeature\r\n * @instance\r\n * @method\r\n * @see AbstractTextToSpeechFeature#resumeVolume\r\n */\n resumeVolume: this.resumeVolume.bind(this)\n });\n Object.defineProperties(api, {\n /**\r\n * @memberof TextToSpeechFeature\r\n * @instance\r\n * @see AbstractTextToSpeechFeature#speechmarkOffset\r\n */\n speechmarkOffset: {\n get: function get() {\n return _this7.speechmarkOffset;\n },\n set: function set(offset) {\n _this7.speechmarkOffset = offset;\n }\n }\n });\n return api;\n }\n /**\r\n * Gets and sets the volume used for all audio clips played by the speaker.\r\n *\r\n * @type {number}\r\n */\n\n }, {\n key: "volume",\n get: function get() {\n return this._volume;\n }\n /**\r\n * Gets whether or not the speaker\'s volume value is currently being tweened.\r\n *\r\n * @readonly\r\n * @type {boolean}\r\n */\n ,\n set: function set(volume) {\n this._volume = core_MathUtils.clamp(volume);\n }\n }, {\n key: "volumePending",\n get: function get() {\n return this._promises.volume && this._promises.volume.pending;\n }\n /**\r\n * Gets the volume used for all audio clips played by the speaker.\r\n *\r\n * @returns {number}\r\n */\n\n }, {\n key: "getVolume",\n value: function getVolume() {\n return this.volume;\n }\n /**\r\n * Updates the volume used for all audio clips played by the speaker over time.\r\n *\r\n * @param {number} volume - Target volume value.\r\n * @param {number} [seconds=0] - Amount of time it will take to reach the target\r\n * volume.\r\n * @param {Function=} easingFn - Easing function used for interpolation.\r\n *\r\n * @returns {Deferred}\r\n */\n\n }, {\n key: "setVolume",\n value: function setVolume(volume) {\n var seconds = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var easingFn = arguments.length > 2 ? arguments[2] : undefined;\n\n if (this.volumePending) {\n this._promises.volume.cancel();\n }\n\n volume = core_MathUtils.clamp(volume);\n this._promises.volume = animpack_AnimationUtils.interpolateProperty(this, \'volume\', volume, {\n seconds: seconds,\n easingFn: easingFn\n });\n return this._promises.volume;\n }\n /**\r\n * Pause interpolation happening on the speaker\'s volume property.\r\n *\r\n * @returns {boolean}\r\n */\n\n }, {\n key: "pauseVolume",\n value: function pauseVolume() {\n this._volumePaused = true;\n return this.volumePending;\n }\n /**\r\n * Resume any interpolation happening on the speaker\'s volume property.\r\n *\r\n * @returns {boolean}\r\n */\n\n }, {\n key: "resumeVolume",\n value: function resumeVolume() {\n this._volumePaused = false;\n return this.volumePending;\n }\n /**\r\n * Update the currently playing speech.\r\n *\r\n * @param {number} deltaTime - Time since the last update.\r\n */\n\n }, {\n key: "update",\n value: function update(deltaTime) {\n if (!this._volumePaused) {\n this._promises.volume.execute(deltaTime);\n }\n\n if (this._currentSpeech && this._currentSpeech.playing) {\n this._currentSpeech.volume = this._volume;\n\n this._currentSpeech.update(this._host.now);\n\n AbstractTextToSpeechFeature_get(AbstractTextToSpeechFeature_getPrototypeOf(AbstractTextToSpeechFeature.prototype), "update", this).call(this, deltaTime);\n }\n }\n /**\r\n * Set the current speech to a new asset and update the speech\'s speechmark\r\n * offset value to match that of the feature.\r\n *\r\n * @private\r\n *\r\n * @param {AbstractSpeech} speech - Speech to set as current.\r\n */\n\n }, {\n key: "_setCurrentSpeech",\n value: function _setCurrentSpeech(speech) {\n speech.speechmarkOffset = this._speechmarkOffset;\n this._currentSpeech = speech;\n }\n /**\r\n * Create a promise that will play/resume a speech with the given text after\r\n * the audio context attempts to resume and speech audio is retrieved from Polly.\r\n *\r\n * @private\r\n *\r\n * @param {string} text - The text of the new speech to play.\r\n * @param {Object=} config - Optional parameters for the speech.\r\n * @param {string} [playMethod = \'play\'] - Method to execute on the resulting\r\n * Speech object. Valid options are \'play\' and \'resume\'.\r\n */\n\n }, {\n key: "_startSpeech",\n value: function _startSpeech(text, config) {\n var _this8 = this;\n\n var playMethod = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : \'play\';\n\n // If no text is provided, try to use the current speech\n if (text === undefined && playMethod === \'resume\' && this._currentSpeech) {\n text = this._currentSpeech.text;\n }\n\n var currentPromise = this._currentPromise || {\n play: new core_Deferred(undefined, function () {\n currentPromise.speech.cancel();\n }, function () {\n currentPromise.speech.cancel();\n }, function () {\n currentPromise.speech.cancel();\n }),\n speech: new core_Deferred()\n };\n this._currentPromise = currentPromise;\n\n this._getSpeech(text, config).then(function (speech) {\n // Exit if the promise is no longer pending because of user interaction\n if (!currentPromise.play.pending) {\n return;\n } else if (_this8._currentPromise !== currentPromise) {\n // Cancel if another call to play has already been made\n currentPromise.play.cancel();\n return;\n } // Reset current speech when the speech ends\n\n\n var onFinish = function onFinish() {\n _this8._currentSpeech = null;\n _this8._currentPromise = null;\n }; // Cancel the currently playing speech\n\n\n if (_this8._currentSpeech && _this8._currentSpeech.playing) {\n if (playMethod === \'play\') {\n _this8._currentSpeech.cancel();\n } else if (playMethod === \'resume\' && _this8._currentSpeech.audio !== speech.audio) {\n _this8._currentSpeech.cancel();\n }\n }\n\n _this8._setCurrentSpeech(speech); // Play the speech\n\n\n currentPromise.speech = speech[playMethod](_this8._host.now, onFinish, onFinish, onFinish);\n currentPromise.speech.then(function () {\n if (currentPromise.speech.resolved) {\n currentPromise.play.resolve();\n } else {\n currentPromise.play.cancel();\n }\n })["catch"](function (error) {\n currentPromise.play.reject(error);\n });\n })["catch"](function (e) {\n e = "Cannot ".concat(playMethod, " speech ").concat(text, " on host ").concat(_this8.host.id, ". ").concat(e);\n currentPromise.play.reject(e);\n });\n\n return currentPromise.play;\n }\n /**\r\n * Stop any speeches currently playing and play a new speech from the beginning.\r\n *\r\n * @param {string} text - The text of the new speech to play.\r\n * @param {Object=} config - Optional parameters for the speech.\r\n *\r\n * @returns {Deferred}\r\n */\n\n }, {\n key: "play",\n value: function play(text, config) {\n return this._startSpeech(text, config, \'play\');\n }\n /**\r\n * If a speech is currently playing, pause it at the current time.\r\n */\n\n }, {\n key: "pause",\n value: function pause() {\n if (this._currentSpeech && this._currentSpeech.playing) {\n this._currentSpeech.pause(this._host.now);\n } else {\n console.warn("Cannot pause speech on host ".concat(this.host.id, ". No speech is currently playing"));\n }\n }\n /**\r\n * Stop any speeches currently playing and resume a new speech from the current\r\n * time.\r\n *\r\n * @param {string=} text - The text of the new speech to play. If undefined and\r\n * there is a current speech that is paused, the current speech will be resumed.\r\n * @param {Object=} config - Optional parameters for the speech.\r\n *\r\n * @returns {Deferred}\r\n */\n\n }, {\n key: "resume",\n value: function resume(text, config) {\n return this._startSpeech(text, config, \'resume\');\n }\n /**\r\n * If a speech is currently playing, stop playback and reset time.\r\n */\n\n }, {\n key: "stop",\n value: function stop() {\n if (this._currentSpeech && this._currentSpeech.playing) {\n this._currentSpeech.stop();\n\n this._currentSpeech = null;\n } else {\n console.warn("Cannot stop speech on host ".concat(this.host.id, ". No speech is currently playing."));\n }\n }\n }, {\n key: "discard",\n value: function discard() {\n if (this._currentSpeech && this._currentSpeech.playing) {\n this._currentSpeech.stop();\n }\n\n delete this._speechCache;\n\n AbstractTextToSpeechFeature_get(AbstractTextToSpeechFeature_getPrototypeOf(AbstractTextToSpeechFeature.prototype), "discard", this).call(this);\n }\n }], [{\n key: "initializeService",\n value: function initializeService(polly, presigner, version) {\n var _this9 = this;\n\n // Make sure all were defined\n if (polly === undefined || presigner === undefined || version === undefined) {\n throw new Error(\'Cannot initialize TextToSpeech feature. All arguments must be defined.\');\n } // Add sumerian hosts user-agent\n\n\n if (polly.config) {\n polly.config.customUserAgent = this._withCustomUserAgent(polly.config.customUserAgent);\n }\n\n if (presigner.service && presigner.service.config) {\n presigner.service.config.customUserAgent = this._withCustomUserAgent(presigner.service.config.customUserAgent);\n }\n\n this._isReady = false; // Store parameters\n\n this.SERVICES.polly = polly;\n this.SERVICES.presigner = presigner;\n awsVersion = version; // Clear the current polly objects\n\n var availableVoices = this.POLLY_VOICES;\n availableVoices.length = 0;\n var availableLanguages = this.POLLY_LANGUAGES;\n Object.keys(availableLanguages).forEach(function (name) {\n delete availableLanguages[name];\n });\n var availableLanguageCodes = this.POLLY_LANGUAGE_CODES;\n Object.keys(availableLanguageCodes).forEach(function (name) {\n delete availableLanguageCodes[name];\n }); // Re-populate according to version\n\n var minNeuralSdk = this.POLLY_MIN_NEURAL_VERSION;\n return this.SERVICES.polly.describeVoices().promise().then(function (response) {\n var allCodes = {};\n response.Voices.forEach(function (voice) {\n if (voice.SupportedEngines.includes(\'standard\') || version >= minNeuralSdk) {\n availableVoices.push(voice);\n }\n\n availableVoices.forEach(function (voice) {\n availableLanguages[voice.LanguageName] = voice.LanguageCode;\n allCodes[voice.LanguageCode] = voice.LanguageName;\n });\n });\n Object.entries(availableLanguages).forEach(function (_ref3) {\n var _ref4 = AbstractTextToSpeechFeature_slicedToArray(_ref3, 2),\n name = _ref4[0],\n code = _ref4[1];\n\n availableLanguageCodes[code] = name;\n }); // Notify that we\'re ready to generate speeches\n\n _this9._isReady = true;\n\n _this9.emit(_this9.EVENTS.ready);\n });\n }\n /**\r\n * Indicates whether or not the class is capable of generating speech audio. Polly,\r\n * Presigner and AWS SDK version number must have been defined using\r\n * [initializeService]{@link AbstractTextToSpeechFeature.initializeService}.\r\n *\r\n * @readonly\r\n * @type {boolean}\r\n */\n\n }, {\n key: "isReady",\n get: function get() {\n return this._isReady;\n }\n }, {\n key: "_withCustomUserAgent",\n value: function _withCustomUserAgent(currentUserAgent) {\n var sumerianHostsUserAgent = \'request-source/SumerianHosts\';\n\n if (currentUserAgent == null) {\n return sumerianHostsUserAgent;\n }\n\n if (currentUserAgent.indexOf(sumerianHostsUserAgent) !== -1) {\n return currentUserAgent;\n }\n\n return currentUserAgent.concat(\' \', sumerianHostsUserAgent);\n }\n }]);\n\n return AbstractTextToSpeechFeature;\n}(core_AbstractHostFeature);\n\nObject.defineProperties(AbstractTextToSpeechFeature_AbstractTextToSpeechFeature, {\n AWS_VERSION: {\n get: function get() {\n return awsVersion;\n }\n },\n POLLY_MIN_NEURAL_VERSION: {\n value: \'2.503\',\n writable: false\n },\n POLLY_DEFAULTS: {\n value: {\n Engine: \'standard\',\n LexiconNames: [],\n OutputFormat: \'mp3\',\n SampleRate: \'22050\',\n Text: \'\',\n TextType: \'ssml\',\n VoiceId: \'Amy\',\n LanguageCode: \'en-GB\',\n LanguageName: \'British English\'\n },\n writable: false\n },\n POLLY_VOICES: {\n value: [],\n writable: false\n },\n POLLY_LANGUAGES: {\n value: {},\n writable: false\n },\n POLLY_LANGUAGE_CODES: {\n value: {},\n writable: false\n },\n _isReady: {\n value: false,\n writable: true\n },\n EVENTS: {\n value: AbstractTextToSpeechFeature_objectSpread(AbstractTextToSpeechFeature_objectSpread({}, Object.getPrototypeOf(AbstractTextToSpeechFeature_AbstractTextToSpeechFeature).EVENTS), {}, {\n ready: \'onReadyEvent\',\n play: \'onPlayEvent\',\n pause: \'onPauseEvent\',\n resume: \'onResumeEvent\',\n interrupt: \'onInterruptEvent\',\n stop: \'onStopEvent\',\n sentence: \'onSentenceEvent\',\n word: \'onWordEvent\',\n viseme: \'onVisemeEvent\',\n ssml: \'onSsmlEvent\'\n })\n },\n SERVICES: {\n value: AbstractTextToSpeechFeature_objectSpread(AbstractTextToSpeechFeature_objectSpread({}, Object.getPrototypeOf(AbstractTextToSpeechFeature_AbstractTextToSpeechFeature).SERVICES), {}, {\n polly: undefined,\n presigner: undefined\n })\n }\n});\n/* harmony default export */ var awspack_AbstractTextToSpeechFeature = (AbstractTextToSpeechFeature_AbstractTextToSpeechFeature);\n// CONCATENATED MODULE: ./src/core/awspack/TextToSpeechFeature.js\nfunction TextToSpeechFeature_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { TextToSpeechFeature_typeof = function _typeof(obj) { return typeof obj; }; } else { TextToSpeechFeature_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return TextToSpeechFeature_typeof(obj); }\n\nfunction TextToSpeechFeature_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction TextToSpeechFeature_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction TextToSpeechFeature_createClass(Constructor, protoProps, staticProps) { if (protoProps) TextToSpeechFeature_defineProperties(Constructor.prototype, protoProps); if (staticProps) TextToSpeechFeature_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction TextToSpeechFeature_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { TextToSpeechFeature_get = Reflect.get; } else { TextToSpeechFeature_get = function _get(target, property, receiver) { var base = TextToSpeechFeature_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return TextToSpeechFeature_get(target, property, receiver || target); }\n\nfunction TextToSpeechFeature_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = TextToSpeechFeature_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction TextToSpeechFeature_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) TextToSpeechFeature_setPrototypeOf(subClass, superClass); }\n\nfunction TextToSpeechFeature_setPrototypeOf(o, p) { TextToSpeechFeature_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return TextToSpeechFeature_setPrototypeOf(o, p); }\n\nfunction TextToSpeechFeature_createSuper(Derived) { var hasNativeReflectConstruct = TextToSpeechFeature_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = TextToSpeechFeature_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = TextToSpeechFeature_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return TextToSpeechFeature_possibleConstructorReturn(this, result); }; }\n\nfunction TextToSpeechFeature_possibleConstructorReturn(self, call) { if (call && (TextToSpeechFeature_typeof(call) === "object" || typeof call === "function")) { return call; } return TextToSpeechFeature_assertThisInitialized(self); }\n\nfunction TextToSpeechFeature_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction TextToSpeechFeature_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction TextToSpeechFeature_getPrototypeOf(o) { TextToSpeechFeature_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return TextToSpeechFeature_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n/**\r\n * @extends AbstractTextToSpeechFeature\r\n * @alias core/TextToSpeechFeature\r\n */\n\nvar TextToSpeechFeature_TextToSpeechFeature = /*#__PURE__*/function (_AbstractTextToSpeech) {\n TextToSpeechFeature_inherits(TextToSpeechFeature, _AbstractTextToSpeech);\n\n var _super = TextToSpeechFeature_createSuper(TextToSpeechFeature);\n\n function TextToSpeechFeature() {\n var _this;\n\n TextToSpeechFeature_classCallCheck(this, TextToSpeechFeature);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n _this._enabled = false;\n\n _this._setAudioContext();\n\n _this._observeAudioContext();\n\n return _this;\n }\n /**\r\n * Store the audio context that will be used to ensure audio can be played.\r\n *\r\n * @private\r\n */\n\n\n TextToSpeechFeature_createClass(TextToSpeechFeature, [{\n key: "_setAudioContext",\n value: function _setAudioContext() {\n this._audioContext = new AudioContext();\n }\n /**\r\n * Listen for state changes on the audio context to determine whether the feature\r\n * is enabled.\r\n *\r\n * @private\r\n */\n\n }, {\n key: "_observeAudioContext",\n value: function _observeAudioContext() {\n var _this2 = this;\n\n if (this._audioContext) {\n this._audioContext.onstatechange = function () {\n if (_this2._audioContext.state === \'running\') {\n _this2._enabled = true;\n } else {\n _this2._enabled = false;\n console.warn(\'The audio context is not running. Speech will not be able to be played until it is resumed. Use the "TextToSpeechFeature.resumeAudio" method to try to resume it after a user gesture.\');\n }\n };\n\n this._audioContext.onstatechange();\n }\n }\n /**\r\n * Create an Audio object of speech audio for the given speech text.\r\n *\r\n * @private\r\n *\r\n * @param {Object} params - Parameters object compatible with Polly.synthesizeSpeech.\r\n *\r\n * @returns {Promise} Resolves with an object containing the audio URL and Audio\r\n * object.\r\n */\n\n }, {\n key: "_synthesizeAudio",\n value: function _synthesizeAudio(params) {\n var _this3 = this;\n\n return TextToSpeechFeature_get(TextToSpeechFeature_getPrototypeOf(TextToSpeechFeature.prototype), "_synthesizeAudio", this).call(this, params).then(function (result) {\n var url = result.url; // Create an Audio object that points to the presigned url\n\n var audio = new Audio(url);\n audio.loop = _this3.loop;\n audio.crossOrigin = \'anonymous\';\n audio.preload = \'auto\';\n result.audio = audio;\n return new Promise(function (resolve) {\n // Resolve once the minimum amount is loaded\n audio.addEventListener(\'canplaythrough\', function () {\n resolve(result);\n }); // Start loading the audio\n\n document.body.appendChild(audio);\n audio.load();\n });\n });\n }\n /**\r\n * Create a new Speech object for the speaker.\r\n *\r\n * @private\r\n *\r\n * @param {TextToSpeech} speaker - The TextToSpeech instance that will own the speech.\r\n * @param {string} text - Text of the speech.\r\n * @param {Object} speechmarks - Speechmarks for the speech.\r\n * @param {Object} audioConfig - Audio for the speech.\r\n *\r\n * @returns {AbstractSpeech}\r\n */\n\n }, {\n key: "_createSpeech",\n value: function _createSpeech(text, speechmarks, audioConfig) {\n return new awspack_Speech(this, text, speechmarks, audioConfig);\n }\n /**\r\n * Gets whether or not the audio context is running and speech can be played.\r\n *\r\n * @readonly\r\n * @type {boolean}\r\n */\n\n }, {\n key: "enabled",\n get: function get() {\n return this._enabled;\n }\n /**\r\n * Try to resume the audio context. This will be automatically executed each time\r\n * speech is played or resumed. If using manually, it should be called after a\r\n * user interaction occurs.\r\n *\r\n * @returns {Deferred} - Resolves once the audio context has resumed.\r\n */\n\n }, {\n key: "resumeAudio",\n value: function resumeAudio() {\n var _this4 = this;\n\n var promise = new core_Deferred(function (resolve, reject) {\n _this4._audioContext.resume().then(function () {\n _this4._enabled = true;\n resolve();\n })["catch"](function (e) {\n _this4._enabled = false;\n reject(e);\n });\n });\n return promise;\n }\n }, {\n key: "_startSpeech",\n value: function _startSpeech(text, config) {\n var _this5 = this;\n\n var playMethod = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : \'play\';\n var currentPromise = {\n play: new core_Deferred(undefined, function () {\n currentPromise.speech.cancel();\n }, function () {\n currentPromise.speech.cancel();\n }, function () {\n currentPromise.speech.cancel();\n }),\n speech: new core_Deferred()\n };\n this._currentPromise = currentPromise; // Try to start the audio context\n\n this.resumeAudio().then(function () {\n // Exit if the promise is no longer pending because of user interaction\n if (!currentPromise.play.pending) {\n return;\n } // Cancel if another call to play has already been made\n else if (_this5._currentPromise !== currentPromise) {\n currentPromise.play.cancel();\n return;\n } // The audio context is running so the speech can be played\n\n\n if (_this5._enabled) {\n TextToSpeechFeature_get(TextToSpeechFeature_getPrototypeOf(TextToSpeechFeature.prototype), "_startSpeech", _this5).call(_this5, text, config, playMethod);\n } // Reject if the audio context is not running\n else {\n currentPromise.reject(new Error("Cannot ".concat(playMethod, " speech on host ").concat(_this5._host.id, ". The audio context is not running. Use the \\"TextToSpeechFeature.resumeAudio\\" method to try to resume it after a user gesture.")));\n }\n });\n return currentPromise.play;\n }\n }, {\n key: "play",\n value: function play(text, config) {\n return this._startSpeech(text, config, \'play\');\n }\n }, {\n key: "resume",\n value: function resume(text, config) {\n return this._startSpeech(text, config, \'resume\');\n }\n }, {\n key: "installApi",\n value: function installApi() {\n var _this6 = this;\n\n var api = TextToSpeechFeature_get(TextToSpeechFeature_getPrototypeOf(TextToSpeechFeature.prototype), "installApi", this).call(this);\n\n Object.defineProperties(api, {\n /**\r\n * @memberof TextToSpeechFeature\r\n * @instance\r\n * @see core/TextToSpeechFeature#enabled\r\n */\n enabled: {\n get: function get() {\n return _this6._enabled;\n }\n }\n });\n return api;\n }\n }]);\n\n return TextToSpeechFeature;\n}(awspack_AbstractTextToSpeechFeature);\n\n/* harmony default export */ var awspack_TextToSpeechFeature = (TextToSpeechFeature_TextToSpeechFeature);\n// CONCATENATED MODULE: ./src/core/awspack/index.js\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n/**\r\n * @module core/awspack\r\n */\n\n/* harmony default export */ var awspack = ({\n /**\r\n * @see core/TextToSpeechFeature\r\n */\n TextToSpeechFeature: awspack_TextToSpeechFeature,\n\n /**\r\n * @see core/TextToSpeechUtils\r\n */\n TextToSpeechUtils: awspack_TextToSpeechUtils,\n\n /**\r\n * @see core/Speech\r\n */\n Speech: awspack_Speech\n});\n// CONCATENATED MODULE: ./src/core/animpack/index.js\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/**\r\n * @module core/animpack\r\n */\n\n\n\n\n\n\n\n\n\n\n\n/**\r\n * @namespace\r\n */\n\nvar Easing = {\n /**\r\n * @see Linear\r\n */\n Linear: Linear,\n\n /**\r\n * @see Quadratic\r\n */\n Quadratic: Quadratic,\n\n /**\r\n * @see Cubic\r\n */\n Cubic: Cubic,\n\n /**\r\n * @see Quartic\r\n */\n Quartic: Quartic,\n\n /**\r\n * @see Quintic\r\n */\n Quintic: Quintic,\n\n /**\r\n * @see Sinusoidal\r\n */\n Sinusoidal: Sinusoidal,\n\n /**\r\n * @see Exponential\r\n */\n Exponential: Exponential,\n\n /**\r\n * @see Circular\r\n */\n Circular: Circular,\n\n /**\r\n * @see Elastic\r\n */\n Elastic: Elastic,\n\n /**\r\n * @see Back\r\n */\n Back: Back,\n\n /**\r\n * @see Bounce\r\n */\n Bounce: Bounce\n};\n/* harmony default export */ var animpack = ({\n /**\r\n * @see core/AnimationFeature\r\n */\n AnimationFeature: animpack_AnimationFeature,\n\n /**\r\n * @see AnimationLayer\r\n */\n AnimationLayer: animpack_AnimationLayer,\n\n /**\r\n * @see core/SingleState\r\n */\n SingleState: state_SingleState,\n\n /**\r\n * @see TransitionState\r\n */\n TransitionState: state_TransitionState,\n\n /**\r\n * @see FreeBlendState\r\n */\n FreeBlendState: state_FreeBlendState,\n\n /**\r\n * @see QueueState\r\n */\n QueueState: state_QueueState,\n\n /**\r\n * @see RandomAnimationState\r\n */\n RandomAnimationState: state_RandomAnimationState,\n\n /**\r\n * @see Blend1dState\r\n */\n Blend1dState: state_Blend1dState,\n\n /**\r\n * @see Blend2dState\r\n */\n Blend2dState: state_Blend2dState,\n\n /**\r\n * @see AnimationUtils\r\n */\n AnimationUtils: animpack_AnimationUtils,\n Easing: Easing,\n\n /**\r\n * @see LayerBlendModes\r\n */\n LayerBlendModes: LayerBlendModes,\n\n /**\r\n * @see DefaultLayerBlendMode\r\n */\n DefaultLayerBlendMode: DefaultLayerBlendMode,\n\n /**\r\n * @see AnimationTypes\r\n */\n AnimationTypes: AnimationTypes\n});\n// CONCATENATED MODULE: ./src/core/index.js\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/**\r\n * @module core/HOST\r\n */\n\n\n\n\n\n\n\n\n\n\n\n/* harmony default export */ var core = __webpack_exports__["default"] = ({\n /**\r\n * @see env\r\n */\n env: env,\n\n /**\r\n * @see Utils\r\n */\n Utils: core_Utils,\n\n /**\r\n * @see MathUtils\r\n */\n MathUtils: core_MathUtils,\n\n /**\r\n * @see Deferred\r\n */\n Deferred: core_Deferred,\n\n /**\r\n * @see core/Messenger\r\n */\n Messenger: core_Messenger,\n\n /**\r\n * @see core/HostObject\r\n */\n HostObject: core_HostObject,\n\n /**\r\n * @see core/LipsyncFeature\r\n */\n LipsyncFeature: core_LipsyncFeature,\n\n /**\r\n * @see GestureFeature\r\n */\n GestureFeature: core_GestureFeature,\n\n /**\r\n * @see core/PointOfInterestFeature\r\n */\n PointOfInterestFeature: core_PointOfInterestFeature,\n\n /**\r\n * @see DefaultVisemeMap\r\n */\n DefaultVisemeMap: DefaultVisemeMap,\n\n /**\r\n * @see DefaultGestureWords\r\n */\n DefaultGestureWords: DefaultGestureWords,\n\n /**\r\n * @see AxisMap\r\n */\n AxisMap: AxisMap,\n\n /**\r\n * @see module:core/awspack\r\n */\n aws: awspack,\n\n /**\r\n * @see module:core/animpack\r\n */\n anim: animpack\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vc3JjL2NvcmUvRGVmZXJyZWQuanM/Njg4ZSIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL2NvcmUvVXRpbHMuanM/YmYyNCIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL2NvcmUvTWF0aFV0aWxzLmpzPzgxZTciLCJ3ZWJwYWNrOi8vSE9TVC8uL3NyYy9jb3JlL0hvc3RFbnZpcm9ubWVudC5qcz8xNTFkIiwid2VicGFjazovL0hPU1QvLi9zcmMvY29yZS9NZXNzZW5nZXIuanM/ZDAwNiIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL2NvcmUvQWJzdHJhY3RIb3N0RmVhdHVyZS5qcz8yMzZlIiwid2VicGFjazovL0hPU1QvLi9zcmMvY29yZS9Ib3N0T2JqZWN0LmpzPzc1ZTciLCJ3ZWJwYWNrOi8vSE9TVC8uL3NyYy9jb3JlL2FuaW1wYWNrL0Vhc2luZy5qcz81ODZjIiwid2VicGFjazovL0hPU1QvLi9zcmMvY29yZS9GZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlLmpzPzA2YmIiLCJ3ZWJwYWNrOi8vSE9TVC8uL3NyYy9jb3JlL2FuaW1wYWNrL0FuaW1hdGlvbkZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2UuanM/NmU2MyIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL2NvcmUvYW5pbXBhY2svTWFuYWdlZEFuaW1hdGlvbkxheWVySW50ZXJmYWNlLmpzPzQ3ZDUiLCJ3ZWJwYWNrOi8vSE9TVC8uL3NyYy9jb3JlL2F3c3BhY2svVGV4dFRvU3BlZWNoRmVhdHVyZURlcGVuZGVudEludGVyZmFjZS5qcz9iY2FkIiwid2VicGFjazovL0hPU1QvLi9zcmMvY29yZS9MaXBzeW5jRmVhdHVyZS5qcz84ZDNhIiwid2VicGFjazovL0hPU1QvLi9zcmMvY29yZS9hd3NwYWNrL1NTTUxTcGVlY2htYXJrSW50ZXJmYWNlLmpzP2NhNzQiLCJ3ZWJwYWNrOi8vSE9TVC8uL3NyYy9jb3JlL0dlc3R1cmVGZWF0dXJlLmpzP2RiMzkiLCJ3ZWJwYWNrOi8vSE9TVC8uL3NyYy9jb3JlL2FuaW1wYWNrL0FuaW1hdGlvblV0aWxzLmpzPzExNDgiLCJ3ZWJwYWNrOi8vSE9TVC8uL3NyYy9jb3JlL2FuaW1wYWNrL3N0YXRlL0Fic3RyYWN0U3RhdGUuanM/MmY4NyIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL2NvcmUvYW5pbXBhY2svc3RhdGUvVHJhbnNpdGlvblN0YXRlLmpzPzllNzciLCJ3ZWJwYWNrOi8vSE9TVC8uL3NyYy9jb3JlL2FuaW1wYWNrL0FuaW1hdGlvblBsYXllckludGVyZmFjZS5qcz83MzNlIiwid2VicGFjazovL0hPU1QvLi9zcmMvY29yZS9hbmltcGFjay9zdGF0ZS9TdGF0ZUNvbnRhaW5lckludGVyZmFjZS5qcz8yNjU5Iiwid2VicGFjazovL0hPU1QvLi9zcmMvY29yZS9hbmltcGFjay9zdGF0ZS9RdWV1ZVN0YXRlLmpzPzBjNGEiLCJ3ZWJwYWNrOi8vSE9TVC8uL3NyYy9jb3JlL2FuaW1wYWNrL3N0YXRlL0Fic3RyYWN0QmxlbmRTdGF0ZS5qcz82Njk3Iiwid2VicGFjazovL0hPU1QvLi9zcmMvY29yZS9hbmltcGFjay9zdGF0ZS9GcmVlQmxlbmRTdGF0ZS5qcz9kNjc1Iiwid2VicGFjazovL0hPU1QvLi9zcmMvY29yZS9hbmltcGFjay9zdGF0ZS9CbGVuZDFkU3RhdGUuanM/YTc0MiIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL2NvcmUvYW5pbXBhY2svc3RhdGUvQmxlbmQyZFN0YXRlLmpzPzgxNjMiLCJ3ZWJwYWNrOi8vSE9TVC8uL3NyYy9jb3JlL2FuaW1wYWNrL0FuaW1hdGlvbkxheWVyLmpzP2JlZWMiLCJ3ZWJwYWNrOi8vSE9TVC8uL3NyYy9jb3JlL2FuaW1wYWNrL3N0YXRlL1NpbmdsZVN0YXRlLmpzPzRmMTQiLCJ3ZWJwYWNrOi8vSE9TVC8uL3NyYy9jb3JlL2FuaW1wYWNrL3N0YXRlL1JhbmRvbUFuaW1hdGlvblN0YXRlLmpzPzQ0OTMiLCJ3ZWJwYWNrOi8vSE9TVC8uL3NyYy9jb3JlL2FuaW1wYWNrL0FuaW1hdGlvbkZlYXR1cmUuanM/ZWJkZSIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL2NvcmUvUG9pbnRPZkludGVyZXN0RmVhdHVyZS5qcz9kZWU1Iiwid2VicGFjazovL0hPU1QvLi9zcmMvY29yZS9hd3NwYWNrL0Fic3RyYWN0U3BlZWNoLmpzPzdmMWMiLCJ3ZWJwYWNrOi8vSE9TVC8uL3NyYy9jb3JlL2F3c3BhY2svU3BlZWNoLmpzPzJhNDEiLCJ3ZWJwYWNrOi8vSE9TVC8uL3NyYy9jb3JlL2F3c3BhY2svVGV4dFRvU3BlZWNoVXRpbHMuanM/NzU1ZCIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL2NvcmUvYXdzcGFjay9BYnN0cmFjdFRleHRUb1NwZWVjaEZlYXR1cmUuanM/MzQxZiIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL2NvcmUvYXdzcGFjay9UZXh0VG9TcGVlY2hGZWF0dXJlLmpzPzVhODUiLCJ3ZWJwYWNrOi8vSE9TVC8uL3NyYy9jb3JlL2F3c3BhY2svaW5kZXguanM/M2FlMCIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL2NvcmUvYW5pbXBhY2svaW5kZXguanM/OWExMiIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL2NvcmUvaW5kZXguanM/YzdiMiJdLCJuYW1lcyI6WyJEZWZlcnJlZCIsImV4ZWN1dGFibGUiLCJvblJlc29sdmUiLCJvblJlamVjdCIsIm9uQ2FuY2VsIiwiRXJyb3IiLCJyZXMiLCJyZWoiLCJjYW5jZWwiLCJzdGF0dXMiLCJyZXNvbHZlZCIsInJlamVjdGVkIiwiY2FuY2VsZWQiLCJwZW5kaW5nIiwicmVzb2x2ZSIsInJlamVjdCIsInZhbHVlIiwiX3N0YXR1cyIsIl9yZXNvbHZlIiwiX3JlamVjdCIsIl9jYW5jZWwiLCJfZXhlY3V0YWJsZSIsImFyZ3MiLCJpdGVyYWJsZSIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiZSIsImFycmF5IiwiZGVmZXJyZWQiLCJmaWx0ZXIiLCJpdGVtIiwicmVzdWx0IiwidW5kZWZpbmVkIiwicmVzb2x2ZVZhbHVlIiwiZm9yRWFjaCIsImxlbmd0aCIsImVycm9yIiwiY2FuY2VsVmFsdWUiLCJudW1JdGVtcyIsIml0ZW1UcmFja2VyIiwiZmFpbGVkIiwibnVtUmVzb2x2ZWQiLCJyZXNvbHV0aW9ucyIsImluZGV4IiwiUHJvbWlzZSIsInRoZW4iLCJVdGlscyIsInJlcGxhY2UiLCJjIiwicmFuZG9tTnVtYmVyIiwiTWF0aCIsImZsb29yIiwiRGF0ZSIsIm5vdyIsInJhbmRvbSIsInRvU3RyaW5nIiwibmFtZSIsIm5hbWVBcnJheSIsImluY2x1ZGVzIiwibmFtZVNldCIsIlNldCIsIm1hdGNoR3JvdXAiLCJtYXRjaCIsImJhc2VOYW1lIiwic2xpY2UiLCJpbmNyZW1lbnQiLCJOdW1iZXIiLCJzZXROYW1lIiwic2V0TWF0Y2hHcm91cCIsInNldEluY3JlbWVudCIsInNlY29uZHMiLCJvbkZpbmlzaCIsIm9uUHJvZ3Jlc3MiLCJvbkVycm9yIiwiY29uc29sZSIsIndhcm4iLCJjdXJyZW50VGltZSIsInRvdGFsVGltZSIsIm9uVXBkYXRlIiwiZGVsdGFUaW1lIiwibWluIiwibWF4IiwiY2VpbCIsIlJhZGlhblRvRGVncmVlIiwiUEkiLCJEZWdyZWVUb1JhZGlhbiIsIk1hdGhVdGlscyIsInJhZGlhbnMiLCJkZWdyZWVzIiwiZnJvbSIsInRvIiwiZmFjdG9yIiwiYSIsImIiLCJwIiwiZGlzdFNxciIsImRpc3RhbmNlU3F1YXJlZCIsInQiLCJwb2ludCIsInZlcnRpY2VzIiwibWluWCIsIlBPU0lUSVZFX0lORklOSVRZIiwibWluWSIsIm1heFgiLCJORUdBVElWRV9JTkZJTklUWSIsIm1heFkiLCJ2IiwiZFgiLCJkWSIsIm1pZFgiLCJtaWRZIiwiZE1heCIsInN1cGVySW5kaWNlcyIsInZlcnRzV2l0aFN1cGVyIiwic3VwZXJTb3J0ZWRJbmRpY2VzIiwic29ydFBvaW50c0NDVyIsInN1cGVyVHJpYW5nbGUiLCJpbmRpY2VzIiwiZWRnZXMiLCJ0cmlhbmdsZXMiLCJuZXdWZXJ0IiwibmV3SW5kZXgiLCJpbnZhbGlkVHJpYW5nbGVzIiwidHJpYW5nbGUiLCJpc1BvaW50SW5DaXJjdW1DaXJjbGUiLCJwdXNoIiwiYm91bmRpbmdQb2x5IiwiZWRnZSIsImNvdW50Iiwib3RoZXJUcmlhbmdsZSIsIm90aGVyRWRnZSIsInNwbGljZSIsImluZGV4T2YiLCJzb3J0ZWRJbmRpY2VzIiwidHJpYW5nbGVzVG9SZW1vdmUiLCJtYXAiLCJheCIsImF5IiwiYngiLCJieSIsImN4IiwiY3kiLCJkZW5vbSIsImFWYWwiLCJiVmFsIiwiY1ZhbCIsImNlbnRyb2lkIiwic29ydCIsImF0YW4yIiwiYWJzIiwidmVjdG9yIiwiQXJyYXkiLCJyZWR1Y2VyIiwiYWNjdW11bGF0b3IiLCJjdXJyZW50VmFsdWUiLCJzcXJ0IiwicmVkdWNlIiwidmVjdG9yQSIsInZlY3RvckIiLCJ2YWx1ZUEiLCJ2YWx1ZUIiLCJub3JtYWxBIiwibm9ybWFsaXplVmVjdG9yIiwibm9ybWFsQiIsImRvdCIsImdldERvdFByb2R1Y3QiLCJhY29zIiwiY2xhbXAiLCJ2ZWN0b3IzIiwibWF0cml4MyIsImV2ZXJ5IiwieCIsInkiLCJ6IiwibWFnbml0dWRlIiwiZ2V0VmVjdG9yTWFnbml0dWRlIiwiZmlsbCIsIm1hdHJpeDQiLCJzY2FsZVgiLCJzY2FsZVkiLCJzY2FsZVoiLCJyIiwidGFyZ2V0VmFsdWUiLCJ2YWx1ZVN0b3JlIiwic21vb3RoVGltZSIsIm1heFNwZWVkIiwiY2xhbXBUaW1lIiwiZGVsdGFWYWx1ZSIsImNsYW1wRGVsdGFWYWx1ZSIsImxhc3RWYWx1ZSIsImQxIiwiZDIiLCJkMyIsImQ0IiwiZW52IiwiTWVzc2VuZ2VyIiwiaWQiLCJfaWQiLCJjcmVhdGVJZCIsIl9kaXNwYXRjaGVyIiwid2luZG93IiwiX2NhbGxiYWNrcyIsIl9ldmVudExpc3RlbmVycyIsIm1lc3NhZ2UiLCJjYWxsYmFjayIsImRldGFpbCIsIkN1c3RvbUV2ZW50IiwibGlzdGVuZXIiLCJhZGRFdmVudExpc3RlbmVyIiwiX2NyZWF0ZUxvY2FsTWVzc2FnZSIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJfY3JlYXRlTGlzdGVuZXIiLCJfYWRkTGlzdGVuZXIiLCJpIiwic3RvcExpc3RlbmluZyIsIl9yZW1vdmVMaXN0ZW5lciIsInJlZ2V4cCIsIm1lc3NhZ2VzIiwiT2JqZWN0Iiwia2V5cyIsInRlc3QiLCJldmVudCIsIl9jcmVhdGVFdmVudCIsImRpc3BhdGNoRXZlbnQiLCJtZXNzZW5nZXIiLCJHbG9iYWxNZXNzZW5nZXIiLCJsaXN0ZW5UbyIsInN0b3BMaXN0ZW5pbmdUb0FsbCIsImVtaXQiLCJkZWZpbmVQcm9wZXJ0aWVzIiwid3JpdGFibGUiLCJFVkVOVFMiLCJBYnN0cmFjdEhvc3RGZWF0dXJlIiwiaG9zdCIsIl9ob3N0IiwiZXZlbnRzIiwiYXBpIiwiZW50cmllcyIsImNvbnN0cnVjdG9yIiwib3duZXIiLCJzdG9wTGlzdGVuaW5nQnlSZWdleHAiLCJ1cGRhdGUiLCJSZWdFeHAiLCJzb3VyY2UiLCJSZXN1bHRDbGFzcyIsIm1peGluQ2xhc3NGYWN0b3JpZXMiLCJtaXhpbkNsYXNzRmFjdG9yeSIsIlNFUlZJQ0VTIiwiSG9zdE9iamVjdCIsIl9vd25lciIsIl9mZWF0dXJlcyIsIl93YWl0cyIsIl9sYXN0VXBkYXRlIiwiZHQiLCJ3YWl0IiwiZXhlY3V0ZSIsInZhbHVlcyIsImZlYXR1cmUiLCJvbkNvbXBsZXRlIiwiRmVhdHVyZUNsYXNzIiwiZm9yY2UiLCJpbnB1dFR5cGUiLCJwcm90b3R5cGUiLCJpbnN0YWxsQXBpIiwiYWRkRmVhdHVyZSIsInR5cGVOYW1lIiwicmVtb3ZlRmVhdHVyZSIsImRpc2NhcmQiLCJkZWZpbmVQcm9wZXJ0eSIsImdldFByb3RvdHlwZU9mIiwiTGluZWFyIiwiTm9uZSIsImsiLCJJbiIsIk91dCIsIkluT3V0IiwiUXVhZHJhdGljIiwiQ3ViaWMiLCJRdWFydGljIiwiUXVpbnRpYyIsIlNpbnVzb2lkYWwiLCJjb3MiLCJzaW4iLCJFeHBvbmVudGlhbCIsIkNpcmN1bGFyIiwiRWxhc3RpYyIsInMiLCJhc2luIiwiQmFjayIsIkJvdW5jZSIsIkZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2UiLCJCYXNlQ2xhc3MiLCJGZWF0dXJlRGVwZW5kZW50TWl4aW4iLCJfaW5pdGlhbGl6ZWQiLCJfb25GZWF0dXJlQWRkZWQiLCJiaW5kIiwiX29uRmVhdHVyZVJlbW92ZWQiLCJFVkVOVF9ERVBFTkRFTkNJRVMiLCJldmVudE5hbWUiLCJBbmltYXRpb25GZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlIiwib2xkTmFtZSIsIm5ld05hbWUiLCJsYXllck5hbWUiLCJhbmltYXRpb25OYW1lIiwiUGFyZW50Q2xhc3MiLCJNaXhpbiIsIkFuaW1hdGlvbkZlYXR1cmVEZXBlbmRlbnRNaXhpbiIsIkFuaW1hdGlvbkZlYXR1cmUiLCJhZGRMYXllciIsInJlbW92ZUxheWVyIiwicmVuYW1lTGF5ZXIiLCJhZGRBbmltYXRpb24iLCJyZW1vdmVBbmltYXRpb24iLCJyZW5hbWVBbmltYXRpb24iLCJNYW5hZ2VkQW5pbWF0aW9uTGF5ZXJJbnRlcmZhY2UiLCJvcHRpb25zIiwibmFtZUZpbHRlciIsIndlaWdodCIsImVhc2luZ0ZuIiwiTWFuYWdlZEFuaW1hdGlvbkxheWVyTWl4aW4iLCJfbWFuYWdlZExheWVycyIsImxheWVycyIsIl9vbkxheWVyQWRkZWQiLCJfb25MYXllclJlbW92ZWQiLCJpc0FjdGl2ZSIsImdldEFuaW1hdGlvbnMiLCJhbmltTmFtZSIsIl9vbkFuaW1hdGlvbkFkZGVkIiwiYW5pbWF0aW9ucyIsIl9vbkFuaW1hdGlvblJlbW92ZWQiLCJsYXllck9wdGlvbnMiLCJhbmltT3B0aW9ucyIsIkRFRkFVTFRfTEFZRVJfT1BUSU9OUyIsImFuaW1hdGlvbk9wdGlvbnMiLCJhc3NpZ24iLCJyZWdpc3RlckFuaW1hdGlvbiIsInJlZ2lzdGVyTGF5ZXIiLCJsYXllck5hbWVzIiwic2V0TGF5ZXJXZWlnaHQiLCJibGVuZFRpbWUiLCJzZXRMYXllcldlaWdodHMiLCJlbmFibGUiLCJkaXNhYmxlIiwiVGV4dFRvU3BlZWNoRmVhdHVyZURlcGVuZGVudEludGVyZmFjZSIsIlRleHRUb1NwZWVjaEZlYXR1cmVEZXBlbmRlbnRNaXhpbiIsIlRleHRUb1NwZWVjaEZlYXR1cmUiLCJwbGF5IiwicGF1c2UiLCJyZXN1bWUiLCJzdG9wIiwic2VudGVuY2UiLCJ3b3JkIiwidmlzZW1lIiwic3NtbCIsIkRlZmF1bHRWaXNlbWVNYXAiLCJzaWwiLCJvdmVycmlkZVdlaWdodCIsIlMiLCJUIiwiZiIsInUiLCJFIiwibyIsIk8iLCJMaXBzeW5jRmVhdHVyZSIsInZpc2VtZUJsZW5kVGltZSIsImRlY2F5UmF0ZSIsImFtb3VudCIsInZpc2VtZUVhc2luZ0ZuIiwidmlzZW1lTGF5ZXJzIiwidGFsa2luZ0JsZW5kVGltZSIsInRhbGtpbmdFYXNpbmdGbiIsInRhbGtpbmdMYXllcnMiLCJ2aXNlbWVMZWFkVGltZSIsIl92aXNlbWVMYXllcnMiLCJfdGFsa2luZ0xheWVycyIsImFuaW1hdGlvbiIsInZpc2VtZU1hcCIsInJlZ2lzdGVyVmlzZW1lTGF5ZXIiLCJyZWdpc3RlclRhbGtpbmdMYXllciIsImdldEFuaW1hdGlvblR5cGUiLCJ3ZWlnaHROYW1lcyIsImdldEFuaW1hdGlvbkJsZW5kTmFtZXMiLCJ2aXNlbWVPcHRpb25zIiwic3BlZWNobWFya09mZnNldCIsIl92aXNlbWVMZWFkVGltZSIsIl9yZWdpc3RlclZpc2VtZUFuaW1hdGlvbiIsInJlc3VtZUFuaW1hdGlvbiIsIl9vblN0b3AiLCJfb25QbGF5IiwicGF1c2VBbmltYXRpb24iLCJtYXJrIiwiaXNWaXNlbWVBY3RpdmUiLCJ2aXNlbWVOYW1lcyIsImR1cmF0aW9uIiwibGVycEZhY3RvciIsImxlcnAiLCJibGVuZEluVGltZSIsImhvbGRUaW1lIiwiX2FuaW1hdGVTaW1wbGVWaXNlbWUiLCJkZWNheVdlaWdodCIsIl9hbmltYXRlSGVsZFZpc2VtZSIsInZpc2VtZU5hbWUiLCJwZWFrV2VpZ2h0IiwiYmxlbmRPdXRUaW1lIiwid2VpZ2h0UHJvbWlzZSIsInNldEFuaW1hdGlvbkJsZW5kV2VpZ2h0Iiwic3RhcnRQcm9taXNlIiwiaG9sZFByb21pc2UiLCJnZXQiLCJzZXQiLCJtaXgiLCJTU01MU3BlZWNobWFya0ludGVyZmFjZSIsIlNTTUxTcGVlY2hNYXJrTWl4aW4iLCJKU09OIiwicGFyc2UiLCJtZXRob2QiLCJhcHBseSIsIkRlZmF1bHRHZXN0dXJlV29yZHMiLCJiaWciLCJoZWFydCIsIm1hbnkiLCJtb3ZlbWVudCIsIm9uZSIsImFnZ3Jlc3NpdmUiLCJ5b3UiLCJkZWZlbnNlIiwid2F2ZSIsInNlbGYiLCJHZXN0dXJlRmVhdHVyZSIsIm1pbmltdW1JbnRlcnZhbCIsImxheWVyIiwibGF5ZXJIb2xkVGltZSIsImxheWVyTWluaW11bUludGVydmFsIiwiY2FuQWR2YW5jZSIsImlzUXVldWVFbmQiLCJjdXJyZW50R2VzdHVyZSIsIl9nZXRIb2xkVGltZSIsImhvbGRUaW1lciIsInBsYXlOZXh0QW5pbWF0aW9uIiwicGxheVRpbWVyIiwiYXV0b0Rpc2FibGUiLCJhbmltIiwid29yZHMiLCJnZXN0dXJlTWFwIiwidHJhbnNpdGlvblRpbWUiLCJrZXkiLCJzdHJpbmdpZnkiLCJnZW5lcmljR2VzdHVyZXMiLCJyZWFzb24iLCJfZ2V0TWluaW11bUludGVydmFsIiwicGxheUFuaW1hdGlvbiIsImdldFBhdXNlZCIsImNyZWF0ZUdlc3R1cmVNYXAiLCJjcmVhdGVHZW5lcmljR2VzdHVyZUFycmF5IiwicGxheUdlc3R1cmUiLCJzdG9wQW5pbWF0aW9uIiwiaW50ZXJydXB0QW5pbWF0aW9uIiwiQW5pbWF0aW9uVXRpbHMiLCJwcm9wZXJ0eU93bmVyIiwicHJvcGVydHlOYW1lIiwiaXNOYU4iLCJzdGFydFZhbHVlIiwiaW50ZXJwb2xhdG9yIiwicHJvZ3Jlc3MiLCJlYXNlRmFjdG9yIiwiQWJzdHJhY3RTdGF0ZSIsIl93ZWlnaHQiLCJfaW50ZXJuYWxXZWlnaHQiLCJfcGF1c2VkIiwiX3Byb21pc2VzIiwiZmluaXNoIiwiX3BsYXlDYWxsYmFja3MiLCJpbnRlcnBvbGF0ZVByb3BlcnR5IiwicHJvbWlzZSIsImFsbCIsInVwZGF0ZUludGVybmFsV2VpZ2h0IiwiVHJhbnNpdGlvblN0YXRlIiwiX3RvIiwiX2Zyb20iLCJfd2VpZ2h0UHJvbWlzZSIsInRvdGFsV2VpZ2h0Iiwic3RhdGUiLCJjdXJyZW50U3RhdGVzIiwidGFyZ2V0U3RhdGUiLCJkZWFjdGl2YXRlIiwicmVzZXQiLCJ3ZWlnaHRQcm9taXNlcyIsInNldFdlaWdodCIsIm9uTmV4dCIsInByb21pc2VzIiwiQW5pbWF0aW9uUGxheWVySW50ZXJmYWNlIiwiZm4iLCJwbGF5TWV0aG9kIiwiQW5pbWF0aW9uUGxheWVyTWl4aW4iLCJfdHJhbnNpdGlvblN0YXRlIiwiX3N0YXRlcyIsIk1hcCIsIl9jdXJyZW50U3RhdGUiLCJfdHJhbnNpdGlvblRpbWUiLCJfZWFzaW5nRm4iLCJoYXMiLCJjdXJyZW50QW5pbWF0aW9uIiwid2VpZ2h0UGVuZGluZyIsImNvbmZpZ3VyZSIsIl9wcmVwYXJlQ3VycmVudFN0YXRlIiwiU3RhdGVDb250YWluZXJJbnRlcmZhY2UiLCJjdXJyZW50TmFtZSIsIlN0YXRlQ29udGFpbmVyTWl4aW4iLCJ1bmlxdWVOYW1lIiwiZ2V0VW5pcXVlTmFtZSIsIlF1ZXVlU3RhdGUiLCJxdWV1ZVN0YXRlcyIsImFkZFN0YXRlIiwiX3F1ZXVlIiwiX2RvbmUiLCJpbnRlcm5hbFdlaWdodCIsIm5leHQiLCJkb25lIiwid3JhcCIsImxhc3ROYW1lIiwic2l6ZSIsImdldFN0YXRlIiwibG9vcENvdW50IiwiSW5maW5pdHkiLCJpc1RyYW5zaXRpb25pbmciLCJfcmVzZXQiLCJwYXVzZWQiLCJzdG9wcGVkIiwiZGlzY2FyZFN0YXRlcyIsIkFic3RyYWN0QmxlbmRTdGF0ZSIsImJsZW5kU3RhdGVzIiwiYmxlbmRXZWlnaHRzIiwiRnJlZUJsZW5kU3RhdGUiLCJzdW1XZWlnaHRzIiwiQmxlbmQxZFN0YXRlIiwiYmxlbmRUaHJlc2hvbGRzIiwicGhhc2VNYXRjaGVzIiwiX2JsZW5kVmFsdWUiLCJibGVuZFZhbHVlIiwibm9uWmVyb0RpZmZlcmVudFNpemUiLCJjb250YWluc0R1cGxpY2F0ZXMiLCJfdGhyZXNob2xkcyIsInBoYXNlTWF0Y2giLCJfc29ydFRocmVzaG9sZHMiLCJfZm9yY2VOb1RocmVzaG9sZER1cGVzIiwiX3BoYXNlTGVhZFN0YXRlIiwiX3VwZGF0ZUJsZW5kV2VpZ2h0cyIsInRocmVzaG9sZFZhbHVlIiwic2FtZVZhbHVlIiwiZmluZCIsInRocmVzaG9sZCIsInJlbW92ZWQiLCJmaW5kSW5kZXgiLCJub3JtYWxpemVkVGltZSIsInRhcmdldEluZGV4IiwidGhyZXNob2xkQSIsInRocmVzaG9sZEIiLCJmYWN0b3JCIiwiZmFjdG9yQSIsInN0YXRlQSIsInN0YXRlQiIsIkJsZW5kMmRTdGF0ZSIsIm90aGVyVGhyZXNob2xkIiwiX2JsZW5kVmFsdWVYIiwiX2JsZW5kVmFsdWVZIiwiYmxlbmRWYWx1ZVgiLCJibGVuZFZhbHVlWSIsIl92ZXJ0aWNlcyIsIl90cmlhbmdsZXMiLCJnZXREZWxhdW5heVRyaWFuZ3VsYXRpb24iLCJwcm9wZXJ0eSIsInRvVXBwZXJDYXNlIiwiX3NldEluZmx1ZW5jZUNsb3Nlc3RQb2ludE9uTGluZSIsImlzUG9pbnRJblRyaWFuZ2xlIiwiX3NldEluZmx1ZW5jZVRyaWFuZ2xlIiwiX3NldEluZmx1ZW5jZUNsb3Nlc3RQb2ludEluVHJpYW5nbGVzIiwiYXJlYUEiLCJ0cmlhbmdsZUFyZWEiLCJhcmVhQiIsImFyZWFDIiwidG90YWxBcmVhIiwid2VpZ2h0QSIsIndlaWdodEIiLCJ3ZWlnaHRDIiwidGhyZXNob2xkQyIsInN0YXRlQyIsIl9zZXRQaGFzZUxlYWRTdGF0ZSIsImdsb2JhbENsb3Nlc3RQb2ludCIsImdsb2JhbE1pbkRpc3QiLCJjbG9zZXN0VHJpYW5nbGUiLCJwb2ludEEiLCJjbG9zZXN0UG9pbnRPbkxpbmUiLCJwb2ludEIiLCJwb2ludEMiLCJkaXN0QSIsImRpc3RCIiwiZGlzdEMiLCJsb2NhbENsb3Nlc3RQb2ludCIsImxvY2FsTWluRGlzdCIsImNsb3Nlc3RQb2ludCIsInN0YXRlcyIsInBoYXNlTWF0Y2hlZCIsIkxheWVyQmxlbmRNb2RlcyIsIk92ZXJyaWRlIiwiQWRkaXRpdmUiLCJEZWZhdWx0TGF5ZXJCbGVuZE1vZGUiLCJ2YWxpZGF0ZUJsZW5kTW9kZSIsImJsZW5kTW9kZSIsIkFuaW1hdGlvbkxheWVyIiwiX2JsZW5kTW9kZSIsIl93ZWlnaHRQYXVzZWQiLCJpc1dlaWdodEFjdGl2ZSIsImdldFN0YXRlTmFtZXMiLCJibGVuZE5hbWUiLCJzZXRCbGVuZFdlaWdodCIsImdldEJsZW5kV2VpZ2h0IiwiU2luZ2xlU3RhdGUiLCJfdGltZVNjYWxlIiwidGltZVNjYWxlIiwiX2xvb3BDb3VudCIsInRpbWUiLCJSYW5kb21BbmltYXRpb25TdGF0ZSIsInN1YlN0YXRlcyIsIl9wbGF5SW50ZXJ2YWwiLCJwbGF5SW50ZXJ2YWwiLCJnZXRSYW5kb21GbG9hdCIsInBsYXlSYW5kb21BbmltYXRpb24iLCJ0aW1lciIsIl9yZXNldFRpbWVyIiwicmFuZG9tU3RhdGUiLCJnZXRSYW5kb21JbnQiLCJjYW5jZWxBbmltYXRpb24iLCJBbmltYXRpb25UeXBlcyIsInNpbmdsZSIsImZyZWVCbGVuZCIsInF1ZXVlIiwicmFuZG9tQW5pbWF0aW9uIiwiYmxlbmQxZCIsImJsZW5kMmQiLCJfbGF5ZXJzIiwiX2xheWVyTWFwIiwiZXhpc3RpbmciLCJsYXN0SW5kZXgiLCJudW1MYXllcnMiLCJ3ZWlnaHRNdWx0aXBsaWVyIiwiY3VycmVudFN0YXRlIiwiYmxlbmRTdGF0ZU9wdGlvbnMiLCJibGVuZE9wdGlvbnMiLCJfY3JlYXRlU2luZ2xlU3RhdGUiLCJxdWV1ZU9wdGlvbnMiLCJxdWV1ZU9wdGlvbiIsImJsZW5kTWF0Y2hQaGFzZXMiLCJzdWJTdGF0ZU9wdGlvbnMiLCJsYXllckluZGV4IiwiX3ZhbGlkYXRlSW5kZXgiLCJldmVudERhdGEiLCJjdXJyZW50SW5kZXgiLCJnZXRBbmltYXRpb25CbGVuZFdlaWdodCIsInBhdXNlV2VpZ2h0IiwicmVzdW1lV2VpZ2h0IiwiYW5pbWF0aW9uVHlwZSIsIl92YWxpZGF0ZU5ld0FuaW1hdGlvbiIsInJlbW92ZVN0YXRlIiwiY3VycmVudEFuaW1hdGlvbk5hbWUiLCJuZXdBbmltYXRpb25OYW1lIiwicmVuYW1lU3RhdGUiLCJuZXh0UXVldWVkQW5pbWF0aW9uIiwibCIsInJlc3VtZWQiLCJtb3ZlTGF5ZXIiLCJnZXRMYXllcldlaWdodCIsInBhdXNlTGF5ZXJXZWlnaHQiLCJyZXN1bWVMYXllcldlaWdodCIsInBhdXNlTGF5ZXIiLCJyZXN1bWVMYXllciIsImdldFRyYW5zaXRpb25pbmciLCJnZXRDdXJyZW50QW5pbWF0aW9uIiwiX3VwZGF0ZUludGVybmFsV2VpZ2h0cyIsIkF4aXNNYXAiLCJQb3NpdGl2ZVgiLCJOZWdhdGl2ZVgiLCJQb3NpdGl2ZVkiLCJOZWdhdGl2ZVkiLCJQb3NpdGl2ZVoiLCJOZWdhdGl2ZVoiLCJGYWNlVGFyZ2V0VHlwZXMiLCJFeWVDZW50ZXIiLCJFeWVMZWZ0IiwiRXllUmlnaHQiLCJNb3V0aCIsIkZhY2VWZWN0b3JzIiwiTWljcm9TYWNjYWRlV2FpdFJhbmdlcyIsInBvc3RNYWNybyIsIk1hY3JvU2FjY2FkZVdhaXRSYW5nZXMiLCJtb3V0aFRhcmdldCIsImV5ZVRhcmdldCIsIkJsaW5rVGhyZXNob2xkIiwiTWF4RGVsdGEiLCJQb2ludE9mSW50ZXJlc3RGZWF0dXJlIiwidGFyZ2V0IiwibG9va1RyYWNrZXIiLCJzY2VuZSIsImxvb2tCbGVuZFRpbWUiLCJsb29rRWFzaW5nRm4iLCJsb29rTGF5ZXJzIiwiYmxpbmtCbGVuZFRpbWUiLCJibGlua0Vhc2luZ0ZuIiwiYmxpbmtMYXllcnMiLCJfdmFsaWRhdGVUcmFuc2Zvcm1PYmplY3QiLCJfbG9va1RyYWNrZXIiLCJfc2NlbmUiLCJfdGFyZ2V0IiwiX3ByZXZUYXJnZXRQb3MiLCJfaXNUYXJnZXRNb3ZpbmciLCJfbG9va0xheWVycyIsIl90cmFja2luZ0NvbmZpZ3MiLCJfYmxpbmtMYXllcnMiLCJyZWZlcmVuY2UiLCJmb3J3YXJkQXhpcyIsImhhc1NhY2NhZGUiLCJyZWdpc3Rlckxvb2tMYXllciIsInJlZ2lzdGVyQmxpbmtMYXllciIsIl9yZWdpc3Rlckxvb2tBbmltYXRpb24iLCJjb25maWciLCJ0cmFja2luZ0NvbmZpZyIsImFuZ2xlcyIsImgiLCJwcmV2QW5nbGVzIiwic291cmNlUG9zaXRpb24iLCJfZ2V0V29ybGRQb3NpdGlvbiIsInRhcmdldFBvc2l0aW9uIiwibG9va1ZlY3RvciIsInRhcmdldFBvcyIsInRyYWNrZXJQb3MiLCJ0YXJnZXRTcGhlcmljYWwiLCJjYXJ0ZXNpYW5Ub1NwaGVyaWNhbCIsInRhcmdldEFuZ2xlcyIsIl9zcGhlcmljYWxUb0JsZW5kVmFsdWUiLCJyZWZEaXJlY3Rpb24iLCJfZ2V0T2JqZWN0RGlyZWN0aW9uIiwicmVmU3BoZXJpY2FsIiwicmVmQW5nbGVzIiwidGFyZ2V0VHlwZSIsImRpc3RhbmNlIiwiX2dldFRhcmdldERpc3RhbmNlIiwiZmFjZVZlY3RvciIsInNwaGVyaWNhbCIsImJsZW5kVmFsdWVzIiwibWF4SFNwZWVkIiwiZXhwIiwibWF4VlNwZWVkIiwiRDAiLCJkIiwiaER1cmF0aW9uIiwidkR1cmF0aW9uIiwibWljcm9TYWNjYWRlIiwiX3VwZGF0ZUxheWVyU3BlZWQiLCJfaW5pdGlhbGl6ZU1pY3JvVGltZXIiLCJtYWNyb1NhY2NhZGUiLCJtYWNyb1NhY2NhZGVXYWl0UmFuZ2UiLCJoTGltaXQiLCJoRmFjdG9yIiwidkxpbWl0IiwidkZhY3RvciIsInNhY2NhZGVUYXJnZXQiLCJfZ2V0RmFjZVRhcmdldEFuZ2xlcyIsIl9pbml0aWFsaXplTWFjcm9UaW1lciIsIm1pbldhaXRUaW1lIiwibWF4V2FpdFRpbWUiLCJ3YWl0VGltZSIsIm1pY3JvU2FjY2FkZVRpbWVyIiwiX3NldE1pY3JvU2FjY2FkZSIsIm1hY3JvU2FjY2FkZVRpbWVyIiwiX3NldE1hY3JvU2FjY2FkZSIsIl9hZGRUcmFja2luZ0NvbmZpZyIsImhWZWxvY2l0eSIsInZWZWxvY2l0eSIsIl9zZXRMb29rQW5nbGVzIiwiX3Jlc2V0TG9va0FuZ2xlcyIsImRlbHRhU2Vjb25kcyIsInRyaWdnZXJCbGluayIsImN1cnJlbnRIIiwiY3VycmVudFYiLCJ0YXJnZXRIIiwidGFyZ2V0ViIsInByZXZUYXJnZXRIIiwicHJldlRhcmdldFYiLCJjaGFuZ2VBbW91bnQiLCJ0b0RlZ3JlZXMiLCJnZXRBbmdsZUJldHdlZW4iLCJkYW1wVmFsdWUiLCJzZXRUYXJnZXQiLCJzZXRUYXJnZXRCeU5hbWUiLCJzZXRUYXJnZXRCeUlkIiwib2JqIiwiZm9yd2FyZFZlY3RvciIsInJvdGF0aW9uIiwiZ2V0Um90YXRpb25NYXRyaXgiLCJfZ2V0V29ybGRNYXRyaXgiLCJyb3RhdGVWZWN0b3IiLCJ0aGV0YSIsInBoaSIsIkFic3RyYWN0U3BlZWNoIiwic3BlYWtlciIsInRleHQiLCJzcGVlY2htYXJrcyIsIl9zcGVha2VyIiwiX3RleHQiLCJfc3BlZWNobWFya3MiLCJfc3BlZWNobWFya09mZnNldCIsIl9zdGFydFRpbWUiLCJfbG9jYWxUaW1lIiwiX3BhdXNlVGltZSIsIl9wbGF5aW5nIiwiX21hcmtJdGVyIiwiX2N1cnJlbnRNYXJrIiwiX2VuZFRpbWUiLCJfcHJvbWlzZSIsIm9uSW50ZXJydXB0IiwiaW50ZXJydXB0Iiwib2Zmc2V0IiwidHlwZSIsInNwZWVjaCIsIl9jaGVja0ZpbmlzaGVkIiwiX2NyZWF0ZVByb21pc2UiLCJTcGVlY2giLCJhdWRpb0NvbmZpZyIsIl9hdWRpbyIsImF1ZGlvIiwib25lbmRlZCIsIl9hdWRpb0ZpbmlzaGVkIiwidm9sdW1lIiwic2V0VGltZW91dCIsIl9wbGF5QXVkaW8iLCJfcGF1c2VBdWRpbyIsIlRleHRUb1NwZWVjaFV0aWxzIiwicmFuZG9tTWFya3MiLCJpbnRlcm5hbE1hcCIsIl9wcm9jZXNzSW5wdXRNYXAiLCJzcGVha1RhZ3MiLCJzc21sTWFya1JlZ2V4Iiwic3NtbFRhZ1JlZ2V4IiwiZXhpc3RpbmdUYWdzIiwiZXhlYyIsInN0YXJ0IiwiZW5kIiwiY2h1bmtzIiwic3NtbE1hcmtSZXN1bHQiLCJkdXBsaWNhdGVNYXJrVG9DaGVjayIsImV4aXN0aW5nVGFnIiwic3Vic3RyIiwiX2luc2VydE1hcmtzIiwibWFya1RleHQiLCJtYXJrZWRUZXh0Iiwiam9pbiIsImFkZE1hcmtzVG9Vbm1hcmtlZFNlbnRlbmNlcyIsInZhbGlkYXRlVGV4dCIsIm1hcmtzIiwibWFya0luZGljZXMiLCJtYXJrUmVzdWx0Iiwic3NtbFJlc3VsdCIsImNsZWFuZWRUZXh0IiwiZXhpc3RpbmdTc21sIiwid2hpdGVzcGFjZSIsInNlbnRlbmNlRW5kSW5kaWNlcyIsIl9nZXRTZW50ZW5jZUVuZHMiLCJwcmV2SW5kZXgiLCJ0YXJnZXRJbmRpY2VzIiwiY29udGFpbnNNYXJrIiwibWFya0luZGV4IiwicmFuZG9tTWFya2VkVGV4dCIsIl9pbnNlcnRSYW5kb21NYXJrc0F0IiwicmFuZG9tTWFyayIsInNlbnRlbmNlUmVnZXgiLCJlbmRTZW50ZW5jZVJlZ2V4Iiwic2VudGVuY2VFbmRzIiwicHVuY3RSZXN1bHQiLCJkdXBsaWNhdGVzVG9DaGVjayIsIndvcmRSZWdleCIsImxvd2VyQ2FzZVdvcmQiLCJjaGVja0R1cGxpY2F0ZSIsIm1hcmtlZFdvcmRzIiwidG9Mb3dlckNhc2UiLCJleGlzdGluZ01hcmtzIiwibGlzdCIsImlzQXJyYXkiLCJlbmdpbmVzIiwiYXVkaW9Gb3JtYXRzIiwic3BlZWNobWFya1R5cGVzIiwic2FtcGxlUmF0ZXMiLCJtcDMiLCJyYXRlcyIsImRlZmF1bHRzIiwic3RhbmRhcmQiLCJuZXVyYWwiLCJwY20iLCJvZ2dfdm9yYmlzIiwiYXdzVmVyc2lvbiIsIkFic3RyYWN0VGV4dFRvU3BlZWNoRmVhdHVyZSIsInZvaWNlIiwiZW5naW5lIiwibGFuZ3VhZ2UiLCJhdWRpb0Zvcm1hdCIsInNhbXBsZVJhdGUiLCJtaW5FbmRNYXJrRHVyYXRpb24iLCJpc0dsb2JhbCIsIl9zcGVlY2hDYWNoZSIsIl9jdXJyZW50U3BlZWNoIiwiX2N1cnJlbnRQcm9taXNlIiwiX2lzVmFsaWRhdGVkIiwiX2lzR2xvYmFsIiwiX3ZvbHVtZVBhdXNlZCIsIl92b2ljZSIsIlBPTExZX0RFRkFVTFRTIiwiVm9pY2VJZCIsIl9sYW5ndWFnZSIsIkxhbmd1YWdlTmFtZSIsIl9lbmdpbmUiLCJFbmdpbmUiLCJfYXVkaW9Gb3JtYXQiLCJPdXRwdXRGb3JtYXQiLCJfc2FtcGxlUmF0ZSIsIlNhbXBsZVJhdGUiLCJfbWluRW5kTWFya0R1cmF0aW9uIiwiQVdTX1ZFUlNJT04iLCJQT0xMWV9NSU5fTkVVUkFMX1ZFUlNJT04iLCJmb3JtYXQiLCJyYXRlIiwidm9pY2VJZCIsIlBPTExZX1ZPSUNFUyIsIklkIiwiU3VwcG9ydGVkRW5naW5lcyIsImxhbmd1YWdlQ29kZSIsIlBPTExZX0xBTkdVQUdFUyIsImF2YWlsYWJsZUNvZGVzIiwiTGFuZ3VhZ2VDb2RlIiwiQWRkaXRpb25hbExhbmd1YWdlQ29kZXMiLCJQT0xMWV9MQU5HVUFHRV9DT0RFUyIsIl92YWxpZGF0ZUVuZ2luZSIsIl92YWxpZGF0ZUZvcm1hdCIsIl92YWxpZGF0ZVJhdGUiLCJfdmFsaWRhdGVWb2ljZSIsIl92YWxpZGF0ZUxhbmd1YWdlIiwiaXNSZWFkeSIsIl92YWxpZGF0ZSIsInNraXBTcGVlY2hlcyIsImN1cnJlbnRDb25maWciLCJfZ2V0Q29uZmlnIiwiY3VycmVudENvbmZpZ1N0ciIsIkxhbmd1YWdlIiwidmFsaWRDb25maWciLCJjb25maWdTdHIiLCJzcGVlY2hDb25maWdTdHIiLCJfdXBkYXRlU3BlZWNoIiwiYXVkaW9QYXJhbXMiLCJUZXh0IiwiVGV4dFR5cGUiLCJzcGVlY2htYXJrUGFyYW1zIiwiU3BlZWNoTWFya1R5cGVzIiwiX3N5bnRoZXNpemVTcGVlY2htYXJrcyIsIl9zeW50aGVzaXplQXVkaW8iLCJyZXN1bHRzIiwiX2NyZWF0ZVNwZWVjaCIsInBhcmFtcyIsInByZXNpZ25lciIsImdldFN5bnRoZXNpemVTcGVlY2hVcmwiLCJ1cmwiLCJwb2xseSIsInN5bnRoZXNpemVTcGVlY2giLCJqc29uU3RyaW5nIiwiQXVkaW9TdHJlYW0iLCJqc29uIiwiZGF0YVN0ciIsImRhdGEiLCJTdHJpbmciLCJmcm9tQ2hhckNvZGUiLCJtYXJrVHlwZXMiLCJlbmRNYXJrVHlwZXMiLCJzcGVlY2hNYXJrcyIsIm1hdGNoQWxsIiwibnVtTWFya3MiLCJsYXN0TWFyayIsImVuZFRpbWVzIiwiZW5kVGltZSIsIl91cGRhdGVDb25maWciLCJnZXRWb2x1bWUiLCJzZXRWb2x1bWUiLCJwYXVzZVZvbHVtZSIsInJlc3VtZVZvbHVtZSIsIl92b2x1bWUiLCJ2b2x1bWVQZW5kaW5nIiwicGxheWluZyIsImN1cnJlbnRQcm9taXNlIiwiX2dldFNwZWVjaCIsIl9zZXRDdXJyZW50U3BlZWNoIiwiX3N0YXJ0U3BlZWNoIiwidmVyc2lvbiIsImN1c3RvbVVzZXJBZ2VudCIsIl93aXRoQ3VzdG9tVXNlckFnZW50Iiwic2VydmljZSIsIl9pc1JlYWR5IiwiYXZhaWxhYmxlVm9pY2VzIiwiYXZhaWxhYmxlTGFuZ3VhZ2VzIiwiYXZhaWxhYmxlTGFuZ3VhZ2VDb2RlcyIsIm1pbk5ldXJhbFNkayIsImRlc2NyaWJlVm9pY2VzIiwicmVzcG9uc2UiLCJhbGxDb2RlcyIsIlZvaWNlcyIsImNvZGUiLCJyZWFkeSIsImN1cnJlbnRVc2VyQWdlbnQiLCJzdW1lcmlhbkhvc3RzVXNlckFnZW50IiwiY29uY2F0IiwiTGV4aWNvbk5hbWVzIiwiX2VuYWJsZWQiLCJfc2V0QXVkaW9Db250ZXh0IiwiX29ic2VydmVBdWRpb0NvbnRleHQiLCJfYXVkaW9Db250ZXh0IiwiQXVkaW9Db250ZXh0Iiwib25zdGF0ZWNoYW5nZSIsIkF1ZGlvIiwibG9vcCIsImNyb3NzT3JpZ2luIiwicHJlbG9hZCIsImRvY3VtZW50IiwiYm9keSIsImFwcGVuZENoaWxkIiwibG9hZCIsInJlc3VtZUF1ZGlvIiwiZW5hYmxlZCIsIkVhc2luZyIsImF3cyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0lBQ01BLFE7Ozs7O0FBQ0o7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDRSxzQkFBa0U7QUFBQTs7QUFBQSxRQUF0REMsVUFBc0Qs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QUFDRjtBQUNBO0FBQ0V3QyxXQUFTLEVBQVRBLGNBWmE7O0FBYWI7QUFDRjtBQUNBO0FBQ0V0RixVQUFRLEVBQVJBLGFBaEJhOztBQWlCYjtBQUNGO0FBQ0E7QUFDRW1NLFdBQVMsRUFBVEEsY0FwQmE7O0FBcUJiO0FBQ0Y7QUFDQTtBQUNFcUQsWUFBVSxFQUFWQSxlQXhCYTs7QUF5QmI7QUFDRjtBQUNBO0FBQ0VvSCxnQkFBYyxFQUFkQSxtQkE1QmE7O0FBNkJiO0FBQ0Y7QUFDQTtBQUNFaUUsZ0JBQWMsRUFBZEEsbUJBaENhOztBQWlDYjtBQUNGO0FBQ0E7QUFDRThRLHdCQUFzQixFQUF0QkEsMkJBcENhOztBQXFDYjtBQUNGO0FBQ0E7QUFDRXpWLGtCQUFnQixFQUFoQkEsZ0JBeENhOztBQXlDYjtBQUNGO0FBQ0E7QUFDRWdFLHFCQUFtQixFQUFuQkEsbUJBNUNhOztBQTZDYjtBQUNGO0FBQ0E7QUFDRXFRLFNBQU8sRUFBUEEsT0FoRGE7O0FBaURiO0FBQ0Y7QUFDQTtBQUNFa1csS0FBRyxFQUFIQSxPQXBEYTs7QUFxRGI7QUFDRjtBQUNBO0FBQ0Uva0IsTUFBSSxFQUFKQSxRQUFJQTtBQXhEUyxDQUFmIiwiZmlsZSI6IjMzMy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxyXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTBcclxuXHJcbi8qKlxyXG4gKiBUaGUgYnVpbHQtaW4gY2xhc3MgZm9yIGFzeW5jaHJvbm91cyBQcm9taXNlcy5cclxuICogQGV4dGVybmFsIFByb21pc2VcclxuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9Qcm9taXNlXHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEEgUHJvbWlzZSBvYmplY3QgdGhhdCBjYW4gYmUgcmVzb2x2ZWQsIHJlamVjdGVkIG9yIGNhbmNlbGVkIGF0IGFueSB0aW1lIGJ5IHRoZVxyXG4gKiB1c2VyLlxyXG4gKlxyXG4gKiBAZXh0ZW5kcyBleHRlcm5hbDpQcm9taXNlXHJcbiAqL1xyXG5jbGFzcyBEZWZlcnJlZCBleHRlbmRzIFByb21pc2Uge1xyXG4gIC8qKlxyXG4gICAqIEBjb25zdHJ1Y3RvclxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2V4ZWN1dGFibGU9KCkgPT4ge31dIC0gVGhlIGZ1bmN0aW9uIHRvIGJlIGV4ZWN1dGVkIGJ5IHRoZVxyXG4gICAqIGNvbnN0cnVjdG9yLCBkdXJpbmcgdGhlIHByb2Nlc3Mgb2YgY29uc3RydWN0aW5nIHRoZSBwcm9taXNlLiBUaGUgc2lnbmF0dXJlXHJcbiAgICogb2YgdGhpcyBpcyBleHBlY3RlZCB0byBiZTogZXhlY3V0YWJsZSggIHJlc29sdXRpb25GdW5jLCByZWplY3Rpb25GdW5jLCBjYW5jZWxsYXRpb25GdW5jICkuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9uUmVzb2x2ZSAtIE9wdGlvbmFsIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgb25jZSB0aGUgcHJvbWlzZVxyXG4gICAqIGlzIHJlc29sdmVkLlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvblJlamVjdCAtIE9wdGlvbmFsIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgb25jZSB0aGUgcHJvbWlzZVxyXG4gICAqIGlzIHJlamVjdGVkLlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvbkNhbmNlbCAtIE9wdGlvbmFsIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgaWYgdGhlIHVzZXIgY2FuY2Vsc1xyXG4gICAqIHRoZSBwcm9taXNlLiBDYW5jZWxpbmcgcmVzdWx0cyBpbiB0aGUgcHJvbWlzZSBoYXZpbmcgYSBzdGF0dXMgb2YgJ3Jlc29sdmVkJy5cclxuICAgKi9cclxuICBjb25zdHJ1Y3RvcihleGVjdXRhYmxlID0gKCkgPT4ge30sIG9uUmVzb2x2ZSwgb25SZWplY3QsIG9uQ2FuY2VsKSB7XHJcbiAgICBpZiAodHlwZW9mIGV4ZWN1dGFibGUgIT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgIGBDYW5ub3QgY3JlYXRlIG5ldyBEZWZlcnJlZC4gRXhlY3V0YWJsZSBtdXN0IGJlIGEgZnVuY3Rpb24uYFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0eXBlb2Ygb25SZXNvbHZlICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygb25SZXNvbHZlICE9PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgQ2Fubm90IGNyZWF0ZSBuZXcgRGVmZXJyZWQuIE9uUmVzb2x2ZSBtdXN0IGJlIGEgZnVuY3Rpb24uYFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0eXBlb2Ygb25SZWplY3QgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBvblJlamVjdCAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgYENhbm5vdCBjcmVhdGUgbmV3IERlZmVycmVkLiBPblJlamVjdCBtdXN0IGJlIGEgZnVuY3Rpb24uYFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0eXBlb2Ygb25DYW5jZWwgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBvbkNhbmNlbCAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgYENhbm5vdCBjcmVhdGUgbmV3IERlZmVycmVkLiBPbkNhbmNlbCBtdXN0IGJlIGEgZnVuY3Rpb24uYFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCByZXM7XHJcbiAgICBsZXQgcmVqO1xyXG4gICAgbGV0IGNhbmNlbDtcclxuICAgIGNvbnN0IHN0YXR1cyA9IHtcclxuICAgICAgcmVzb2x2ZWQ6IGZhbHNlLFxyXG4gICAgICByZWplY3RlZDogZmFsc2UsXHJcbiAgICAgIGNhbmNlbGVkOiBmYWxzZSxcclxuICAgICAgcGVuZGluZzogdHJ1ZSxcclxuICAgIH07XHJcblxyXG4gICAgc3VwZXIoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAvLyBTdG9yZSB0aGUgcmVzb2x2ZXJcclxuICAgICAgcmVzID0gdmFsdWUgPT4ge1xyXG4gICAgICAgIGlmIChzdGF0dXMucGVuZGluZykge1xyXG4gICAgICAgICAgc3RhdHVzLnJlc29sdmVkID0gdHJ1ZTtcclxuICAgICAgICAgIHN0YXR1cy5wZW5kaW5nID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgaWYgKHR5cGVvZiBvblJlc29sdmUgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgdmFsdWUgPSBvblJlc29sdmUodmFsdWUpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHJldHVybiByZXNvbHZlKHZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH07XHJcblxyXG4gICAgICAvLyBTdG9yZSB0aGUgcmVqZWN0ZXJcclxuICAgICAgcmVqID0gdmFsdWUgPT4ge1xyXG4gICAgICAgIGlmIChzdGF0dXMucGVuZGluZykge1xyXG4gICAgICAgICAgc3RhdHVzLnJlamVjdGVkID0gdHJ1ZTtcclxuICAgICAgICAgIHN0YXR1cy5wZW5kaW5nID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgaWYgKHR5cGVvZiBvblJlamVjdCA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IG9uUmVqZWN0KHZhbHVlKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICByZXR1cm4gcmVqZWN0KHZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH07XHJcblxyXG4gICAgICAvLyBTdG9yZSB0aGUgY2FuY2VsZXJcclxuICAgICAgY2FuY2VsID0gdmFsdWUgPT4ge1xyXG4gICAgICAgIGlmIChzdGF0dXMucGVuZGluZykge1xyXG4gICAgICAgICAgc3RhdHVzLmNhbmNlbGVkID0gdHJ1ZTtcclxuICAgICAgICAgIHN0YXR1cy5wZW5kaW5nID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgaWYgKHR5cGVvZiBvbkNhbmNlbCA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IG9uQ2FuY2VsKHZhbHVlKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICByZXR1cm4gcmVzb2x2ZSh2YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9O1xyXG5cclxuICAgICAgLy8gUnVuIHRoZSBleGVjdXRhYmxlIHdpdGggY3VzdG9tIHJlc29sdmVyIGFuZCByZWplY3RlclxyXG4gICAgICBleGVjdXRhYmxlKHJlcywgcmVqLCBjYW5jZWwpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5fc3RhdHVzID0gc3RhdHVzO1xyXG4gICAgdGhpcy5fcmVzb2x2ZSA9IHJlcztcclxuICAgIHRoaXMuX3JlamVjdCA9IHJlajtcclxuICAgIHRoaXMuX2NhbmNlbCA9IGNhbmNlbDtcclxuICAgIHRoaXMuX2V4ZWN1dGFibGUgPSBleGVjdXRhYmxlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgcmVzb2x2ZWQgc3RhdGUgb2YgdGhlIHByb21pc2UuXHJcbiAgICpcclxuICAgKiBAcmVhZG9ubHlcclxuICAgKi9cclxuICBnZXQgcmVzb2x2ZWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fc3RhdHVzLnJlc29sdmVkO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgcmVqZWN0ZWQgc3RhdGUgb2YgdGhlIHByb21pc2UuXHJcbiAgICpcclxuICAgKiBAcmVhZG9ubHlcclxuICAgKi9cclxuICBnZXQgcmVqZWN0ZWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fc3RhdHVzLnJlamVjdGVkO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgY2FuY2VsZWQgc3RhdGUgb2YgdGhlIHByb21pc2UuXHJcbiAgICpcclxuICAgKiBAcmVhZG9ubHlcclxuICAgKi9cclxuICBnZXQgY2FuY2VsZWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fc3RhdHVzLmNhbmNlbGVkO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgcGVuZGluZyBzdGF0ZSBvZiB0aGUgcHJvbWlzZS5cclxuICAgKlxyXG4gICAqIEByZWFkb25seVxyXG4gICAqL1xyXG4gIGdldCBwZW5kaW5nKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3N0YXR1cy5wZW5kaW5nO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRm9yY2UgdGhlIHByb21pc2UgdG8gcmVzb2x2ZS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7YW55PX0gdmFsdWUgLSBWYWx1ZSB0byBwYXNzIHRvIHRoZSByZXNvbHZlci5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHthbnl9IC0gVGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgcmVzb2x2ZXIgZnVuY3Rpb24uXHJcbiAgICovXHJcbiAgcmVzb2x2ZSh2YWx1ZSkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3Jlc29sdmUodmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRm9yY2UgdGhlIHByb21pc2UgdG8gcmVqZWN0LlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHthbnk9fSB2YWx1ZSAtIFZhbHVlIHRvIHBhc3MgdG8gdGhlIHJlamVjdGVyLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge2FueX0gLSBUaGUgcmV0dXJuIHZhbHVlIG9mIHRoZSByZWplY3RlciBmdW5jdGlvbi5cclxuICAgKi9cclxuICByZWplY3QodmFsdWUpIHtcclxuICAgIHJldHVybiB0aGlzLl9yZWplY3QodmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRm9yY2UgdGhlIHByb21pc2UgdG8gcmVzb2x2ZSBhbmQgc2V0IHRoZSBjYW5jZWxlZCBzdGF0ZSB0byB0cnVlLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHthbnk9fSB2YWx1ZSAtIFZhbHVlIHRvIHBhc3MgdG8gdGhlIGNhbmNlbGxlci5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHthbnl9IC0gVGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgY2FuY2VsbGVyIGZ1bmN0aW9uLlxyXG4gICAqL1xyXG4gIGNhbmNlbCh2YWx1ZSkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NhbmNlbCh2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSdW4gdGhlIHByb21pc2UgZnVuY3Rpb24gdG8gdHJ5IHRvIHJlc29sdmUgdGhlIHByb21pc2UuIFByb21pc2UgbXVzdCBiZVxyXG4gICAqIHBlbmRpbmcuXHJcbiAgICpcclxuICAgKiBAcGFyYW0gey4uLmFueX0gYXJncyAtIE9wdGlvbmFsIGFyZ3VtZW50cyB0byBwYXNzIGFmdGVyIHJlc29sdmUgYW5kIHJlamVjdC5cclxuICAgKi9cclxuICBleGVjdXRlKC4uLmFyZ3MpIHtcclxuICAgIGlmICh0aGlzLnBlbmRpbmcpIHtcclxuICAgICAgdGhpcy5fZXhlY3V0YWJsZSh0aGlzLl9yZXNvbHZlLCB0aGlzLl9yZWplY3QsIHRoaXMuX2NhbmNlbCwgLi4uYXJncyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gYSBjYW5jZWxlZCBkZWZlcnJlZCBwcm9taXNlLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHthbnk9fSB2YWx1ZSAtIFZhbHVlIHRvIGNhbmNlbCB0aGUgcHJvbWlzZSB3aXRoLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0RlZmVycmVkfVxyXG4gICAqL1xyXG4gIHN0YXRpYyBjYW5jZWwodmFsdWUpIHtcclxuICAgIHJldHVybiBuZXcgRGVmZXJyZWQoKF9yZXNvbHZlLCBfcmVqZWN0LCBjYW5jZWwpID0+IHtcclxuICAgICAgY2FuY2VsKHZhbHVlKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIGEgbmV3IERlZmVycmVkIHByb21pc2UgdGhhdCB3aWxsIHJlc29sdmUgb3IgcmVqZWN0IG9uY2UgYWxsIHByb21pc2VzXHJcbiAgICogaW4gdGhlIGlucHV0IGFycmF5IGhhdmUgYmVlbiByZXNvbHZlZCBvciBvbmUgcHJvbWlzZSBpcyBjYW5jZWxlZCBvciByZWplY3RlZC5cclxuICAgKiBQcm9taXNlcyBpbiB0aGUgYXJyYXkgdGhhdCBhcmUgRGVmZXJyZWQgcHJvbWlzZXMgd2lsbCBiZSBtYW51YWxseSByZXNvbHZlZCxcclxuICAgKiByZWplY3RlZCBvciBjYW5jZWxlZCB3aGVuIGNhbGxpbmcgcmVzb2x2ZSwgcmVqZWN0IG9yIGNhbmNlbCBvbiB0aGUgcmV0dXJuIHByb21pc2UuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge0FycmF5Ljxhbnk+fSBpdGVyYWJsZSAtIEFuIGl0ZXJhYmxlIHN1Y2ggYXMgYW4gYXJyYXkuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9uUmVzb2x2ZSAtIE9wdGlvbmFsIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgb25jZSB0aGUgcHJvbWlzZVxyXG4gICAqIGlzIHJlc29sdmVkLlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvblJlamVjdCAtIE9wdGlvbmFsIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgb25jZSB0aGUgcHJvbWlzZVxyXG4gICAqIGlzIHJlamVjdGVkLlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvbkNhbmNlbCAtIE9wdGlvbmFsIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgaWYgdGhlIHVzZXIgY2FuY2Vsc1xyXG4gICAqIHRoZSBwcm9taXNlLiBDYW5jZWxpbmcgcmVzdWx0cyBpbiB0aGUgcHJvbWlzZSBoYXZpbmcgYSBzdGF0dXMgb2YgJ2NhbmNlbGVkJy5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIERlZmVycmVkXHJcbiAgICovXHJcbiAgc3RhdGljIGFsbChpdGVyYWJsZSwgb25SZXNvbHZlLCBvblJlamVjdCwgb25DYW5jZWwpIHtcclxuICAgIGlmIChpdGVyYWJsZSA9PSBudWxsIHx8IHR5cGVvZiBpdGVyYWJsZVtTeW1ib2wuaXRlcmF0b3JdICE9PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgIGxldCBlID0gYENhbm5vdCBleGVjdXRlIERlZmVycmVkLmFsbC4gRmlyc3QgYXJndW1lbnQgbXVzdCBiZSBpdGVyYWJsZS5gO1xyXG5cclxuICAgICAgaWYgKHR5cGVvZiBvblJlamVjdCA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgIGUgPSBvblJlamVjdChlKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIERlZmVycmVkLnJlamVjdChlKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBhcnJheSA9IFsuLi5pdGVyYWJsZV07XHJcbiAgICBjb25zdCBkZWZlcnJlZCA9IGFycmF5LmZpbHRlcihpdGVtID0+IGl0ZW0gaW5zdGFuY2VvZiBEZWZlcnJlZCk7XHJcblxyXG4gICAgY29uc3QgcmVzdWx0ID0gbmV3IERlZmVycmVkKFxyXG4gICAgICB1bmRlZmluZWQsXHJcbiAgICAgIHJlc29sdmVWYWx1ZSA9PiB7XHJcbiAgICAgICAgZGVmZXJyZWQuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICAgIGl0ZW0ucmVzb2x2ZShyZXNvbHZlVmFsdWUpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGRlZmVycmVkLmxlbmd0aCA9IDA7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2Ygb25SZXNvbHZlID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICByZXR1cm4gb25SZXNvbHZlKHJlc29sdmVWYWx1ZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJldHVybiByZXNvbHZlVmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICBlcnJvciA9PiB7XHJcbiAgICAgICAgZGVmZXJyZWQuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICAgIGl0ZW0ucmVqZWN0KGVycm9yKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBkZWZlcnJlZC5sZW5ndGggPSAwO1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIG9uUmVqZWN0ID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICByZXR1cm4gb25SZWplY3QoZXJyb3IpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICByZXR1cm4gZXJyb3I7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICBjYW5jZWxWYWx1ZSA9PiB7XHJcbiAgICAgICAgZGVmZXJyZWQuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICAgIGl0ZW0uY2FuY2VsKGNhbmNlbFZhbHVlKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBkZWZlcnJlZC5sZW5ndGggPSAwO1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIG9uQ2FuY2VsID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICByZXR1cm4gb25DYW5jZWwoY2FuY2VsVmFsdWUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICByZXR1cm4gY2FuY2VsVmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICApO1xyXG5cclxuICAgIGNvbnN0IG51bUl0ZW1zID0gYXJyYXkubGVuZ3RoO1xyXG4gICAgY29uc3QgaXRlbVRyYWNrZXIgPSB7XHJcbiAgICAgIGZhaWxlZDogZmFsc2UsXHJcbiAgICAgIG51bVJlc29sdmVkOiAwLFxyXG4gICAgICByZXNvbHV0aW9uczogW11cclxuICAgIH1cclxuXHJcbiAgICBhcnJheS5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xyXG4gICAgICBpZiAoaXRlbVRyYWNrZXIuZmFpbGVkKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9IGVsc2UgaWYgKCEoaXRlbSBpbnN0YW5jZW9mIFByb21pc2UpKSB7XHJcbiAgICAgICAgaXRlbVRyYWNrZXIucmVzb2x1dGlvbnNbaW5kZXhdID0gaXRlbTtcclxuICAgICAgICBpdGVtVHJhY2tlci5udW1SZXNvbHZlZCArPSAxO1xyXG5cclxuICAgICAgICBpZiAoaXRlbVRyYWNrZXIubnVtUmVzb2x2ZWQgPT09IG51bUl0ZW1zKSB7XHJcbiAgICAgICAgICByZXN1bHQucmVzb2x2ZShpdGVtVHJhY2tlci5yZXNvbHV0aW9ucyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgaXRlbS50aGVuKFxyXG4gICAgICAgIHZhbHVlID0+IHtcclxuICAgICAgICAgIGlmICghaXRlbVRyYWNrZXIuZmFpbGVkICYmICFpdGVtLmNhbmNlbGVkKSB7XHJcbiAgICAgICAgICAgIGl0ZW1UcmFja2VyLnJlc29sdXRpb25zW2luZGV4XSA9IHZhbHVlO1xyXG4gICAgICAgICAgICBpdGVtVHJhY2tlci5udW1SZXNvbHZlZCArPSAxO1xyXG5cclxuICAgICAgICAgICAgaWYgKGl0ZW1UcmFja2VyLm51bVJlc29sdmVkID09PSBudW1JdGVtcykge1xyXG4gICAgICAgICAgICAgIHJlc3VsdC5yZXNvbHZlKGl0ZW1UcmFja2VyLnJlc29sdXRpb25zKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIGlmICghaXRlbVRyYWNrZXIuZmFpbGVkKSB7XHJcbiAgICAgICAgICAgIGl0ZW1UcmFja2VyLmZhaWxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHJlc3VsdC5jYW5jZWwodmFsdWUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3IgPT4ge1xyXG4gICAgICAgICAgaWYgKCFpdGVtVHJhY2tlci5mYWlsZWQpIHtcclxuICAgICAgICAgICAgaXRlbVRyYWNrZXIuZmFpbGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgcmVzdWx0LnJlamVjdChlcnJvcik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IERlZmVycmVkO1xyXG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cclxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVC0wXHJcbmltcG9ydCBEZWZlcnJlZCBmcm9tICdjb3JlL0RlZmVycmVkJztcclxuXHJcbi8qKlxyXG4gKiBBIGNvbGxlY3Rpb24gb2YgdXNlZnVsIGdlbmVyaWMgZnVuY3Rpb25zLlxyXG4gKlxyXG4gKiBAaGlkZWNvbnN0cnVjdG9yXHJcbiAqL1xyXG5jbGFzcyBVdGlscyB7XHJcbiAgLyoqXHJcbiAgICogQHN0YXRpY1xyXG4gICAqXHJcbiAgICogR2VuZXJhdGUgYSB1bmlxdWUgaWRcclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtTdHJpbmd9XHJcbiAgICovXHJcbiAgc3RhdGljIGNyZWF0ZUlkKCkge1xyXG4gICAgcmV0dXJuICd4eHh4eHh4eHh4eHg0eHh4eXh4eHh4eHh4eHh4eHh4eCcucmVwbGFjZSgvW3h5XS9nLCBjID0+IHtcclxuICAgICAgY29uc3QgcmFuZG9tTnVtYmVyID0gTWF0aC5mbG9vcigoRGF0ZS5ub3coKSArIE1hdGgucmFuZG9tKCkgKiAxNikgJSAxNik7XHJcbiAgICAgIGlmIChjID09PSAneCcpIHtcclxuICAgICAgICByZXR1cm4gcmFuZG9tTnVtYmVyLnRvU3RyaW5nKDE2KTtcclxuICAgICAgfVxyXG4gICAgICAvLyBTZXQgYml0IDYgYW5kIDcgdG8gMCBhbmQgMVxyXG4gICAgICByZXR1cm4gKChyYW5kb21OdW1iZXIgJiAweDMpIHwgMHg4KS50b1N0cmluZygxNik7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBzdGF0aWNcclxuICAgKlxyXG4gICAqIENoZWNrIGEgbmFtZSBzdHJpbmcgYWdhaW5zdCBhbiBhcnJheSBvZiBzdHJpbmdzIHRvIGRldGVybWluZSBpZiBpdCBpcyB1bmlxdWUuXHJcbiAgICogSWYgaXQgaXNuJ3QsIGFwcGVuZCBpbmNyZW1lbnRlZCB0cmFpbGluZyBpbnRlZ2VycyB0byB0aGUgZW5kIG9mIHRoZSBuYW1lXHJcbiAgICogdW50aWwgaXQgaXMgdW5pcXVlLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBTdHJpbmcgbmFtZSB0byBtYWtlIHVuaXF1ZS5cclxuICAgKiBAcGFyYW0ge0FycmF5LjxzdHJpbmc+PX0gbmFtZUFycmF5IC0gQXJyYXkgb2Ygc3RyaW5nIG5hbWVzIHRvIGNoZWNrIGFnYWlucy5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XHJcbiAgICovXHJcbiAgc3RhdGljIGdldFVuaXF1ZU5hbWUobmFtZSwgbmFtZUFycmF5ID0gW10pIHtcclxuICAgIC8vIElmIHRoZSBuYW1lIGlzbid0IGluIHRoZSBhcnJheSByZXR1cm4gaXQgcmlnaHQgYXdheVxyXG4gICAgaWYgKCFuYW1lQXJyYXkuaW5jbHVkZXMobmFtZSkpIHtcclxuICAgICAgcmV0dXJuIG5hbWU7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgbmFtZVNldCA9IG5ldyBTZXQobmFtZUFycmF5KTtcclxuXHJcbiAgICAvLyBTZXBhcmF0ZSB0aGUgbmFtZSBpbnRvIHN0cmluZyBhbmQgdHJhaWxpbmcgbnVtYmVyc1xyXG4gICAgY29uc3QgbWF0Y2hHcm91cCA9IG5hbWUubWF0Y2goL1xcZCokLyk7XHJcbiAgICBjb25zdCB7aW5kZXh9ID0gbWF0Y2hHcm91cDtcclxuICAgIGNvbnN0IGJhc2VOYW1lID0gbmFtZS5zbGljZSgwLCBpbmRleCk7XHJcbiAgICBsZXQgaW5jcmVtZW50ID0gTnVtYmVyKG1hdGNoR3JvdXBbMF0pO1xyXG5cclxuICAgIC8vIEZpbmQgdGhlIGhpZ2hlc3QgdHJhaWxpbmcgbnVtYmVyIHZhbHVlIGZvciB0aGUgYmFzZSBvZiB0aGUgbmFtZVxyXG4gICAgbmFtZVNldC5mb3JFYWNoKHNldE5hbWUgPT4ge1xyXG4gICAgICBjb25zdCBzZXRNYXRjaEdyb3VwID0gc2V0TmFtZS5tYXRjaCgvXFxkKiQvKTtcclxuXHJcbiAgICAgIGlmIChzZXROYW1lLnNsaWNlKDAsIHNldE1hdGNoR3JvdXAuaW5kZXgpID09PSBiYXNlTmFtZSkge1xyXG4gICAgICAgIGNvbnN0IHNldEluY3JlbWVudCA9IE51bWJlcihzZXRNYXRjaEdyb3VwWzBdKTtcclxuXHJcbiAgICAgICAgaWYgKHNldEluY3JlbWVudCA+IGluY3JlbWVudCkge1xyXG4gICAgICAgICAgaW5jcmVtZW50ID0gc2V0SW5jcmVtZW50O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gSW5jcmVtZW50IHRoZSBoaWdoZXN0IHRyYWlsaW5nIG51bWJlciBhbmQgYXBwZW5kIHRvIHRoZSBuYW1lXHJcbiAgICByZXR1cm4gYCR7YmFzZU5hbWV9JHtpbmNyZW1lbnQgKyAxfWA7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gYSBkZWZlcnJlZCBwcm9taXNlIHRoYXQgd2lsbCB3YWl0IGEgZ2l2ZW4gbnVtYmVyIG9mIHNlY29uZHMgYmVmb3JlXHJcbiAgICogcmVzb2x2aW5nLiBQYXNzIGRlbHRhIHRpbWUgaW4gbWlsbGlzZWNvbmRzIHRvIHRoZSBkZWZlcnJlZCBwcm9taXNlJ3MgZXhlY3V0ZVxyXG4gICAqIG1ldGhvZCBpbiBhbiB1cGRhdGUgbG9vcCB0byBwcm9ncmVzcyB0aW1lLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtzZWNvbmRzPTBdIC0gTnVtYmVyIG9mIHNlY29uZHMgdG8gd2FpdCBiZWZvcmUgcmVzb2x2aW5nLlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0PX0gb3B0aW9ucyAtIE9wdGlvbmFsIG9wdGlvbnMgb2JqZWN0XHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdGlvbnMub25GaW5pc2hdIC0gQ2FsbGJhY2sgdG8gZXhlY3V0ZSBvbmNlIHRoZSB3YWl0IHRpbWVcclxuICAgKiBpcyBtZXQuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9wdGlvbnMub25Qcm9ncmVzcyAtIENhbGxiYWNrIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSB3YWl0XHJcbiAgICogdGltZSBwcm9ncmVzc2VzIHRvd2FyZHMgdGhlIHRhcmdldCBudW1iZXIgb2Ygc2Vjb25kcy4gVGhlIGFtb3VudCBvZiBwcm9ncmVzc1xyXG4gICAqIGFzIGEgMC0xIHBlcmNlbnRhZ2UgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50LlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvcHRpb25zLm9uQ2FuY2VsIC0gQ2FsbGJhY2sgdG8gZXhlY3V0ZSBpZiB0aGUgdXNlciBjYW5jZWxzXHJcbiAgICogdGhlIHdhaXQgYmVmb3JlIGNvbXBsZXRpb24uXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9wdGlvbnMub25FcnJvciAtIENhbGxiYWNrIHRvIGV4ZWN1dGUgaWYgdGhlIHdhaXQgc3RvcHNcclxuICAgKiBiZWNhdXNlIGFuIGVycm9yIGlzIGVuY291bnRlcmVkLiBUaGUgZXJyb3IgbWVzc2FnZSBpcyBwYXNzZWQgYXMgYSBwYXJhbWV0ZXIuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7RGVmZXJyZWR9XHJcbiAgICovXHJcbiAgc3RhdGljIHdhaXQoc2Vjb25kcyA9IDAsIHtvbkZpbmlzaCwgb25Qcm9ncmVzcywgb25DYW5jZWwsIG9uRXJyb3J9ID0ge30pIHtcclxuICAgIC8vIE1ha2Ugc3VyZSBzZWNvbmRzIGlzIG51bWVyaWNcclxuICAgIGlmICh0eXBlb2Ygc2Vjb25kcyAhPT0gJ251bWJlcicpIHtcclxuICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgIGBJbnZhbGlkIHNlY29uZHMgdmFsdWUgJHtzZWNvbmRzfSBmb3Igd2FpdC4gRGVmYXVsdGluZyB0byAwLmBcclxuICAgICAgKTtcclxuXHJcbiAgICAgIHNlY29uZHMgPSAwO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFJlc29sdmUgaW1tZWRpYXRlbHkgaWYgdGhlIHdhaXQgdGltZSBpcyBub3QgZ3JlYXRlciB0aGFuIDBcclxuICAgIGlmIChzZWNvbmRzIDw9IDApIHtcclxuICAgICAgaWYgKHR5cGVvZiBvbkZpbmlzaCA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgIG9uRmluaXNoKCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBEZWZlcnJlZC5yZXNvbHZlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGN1cnJlbnRUaW1lID0gMDtcclxuICAgIGNvbnN0IHRvdGFsVGltZSA9IHNlY29uZHMgKiAxMDAwOyAvLyBjb252ZXJ0IHRvIG1pbGxpc2Vjb25kc1xyXG5cclxuICAgIC8vIEV4ZWN1dGFibGUgdG8gcGFzcyB0byBEZWZlcnJlZCwgbWVhbnQgdG8gYmUgcnVuIGluIGFuIHVwZGF0ZSBsb29wXHJcbiAgICBjb25zdCBvblVwZGF0ZSA9IChyZXNvbHZlLCByZWplY3QsIF9jYW5jZWwsIGRlbHRhVGltZSA9IDApID0+IHtcclxuICAgICAgaWYgKHR5cGVvZiBkZWx0YVRpbWUgIT09ICdudW1iZXInKSB7XHJcbiAgICAgICAgY29uc3QgZSA9IG5ldyBFcnJvcihcclxuICAgICAgICAgIGBJbnZhbGlkIHByb3BlcnR5IHdhaXQgZGVsdGFUaW1lLiBEZWx0YVRpbWUgbXVzdCBiZSBhIG51bWJlci5gXHJcbiAgICAgICAgKTtcclxuICAgICAgICByZWplY3QoZSk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBNYWtlIHN1cmUgdGltZSBoYXMgcGFzc2VkXHJcbiAgICAgIGlmIChkZWx0YVRpbWUgPT09IDApIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIFNpZ25hbCBwcm9ncmVzc1xyXG4gICAgICBjdXJyZW50VGltZSArPSBkZWx0YVRpbWU7XHJcbiAgICAgIGlmIChjdXJyZW50VGltZSA8IDApIHtcclxuICAgICAgICBjdXJyZW50VGltZSA9IDA7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0eXBlb2Ygb25Qcm9ncmVzcyA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgIG9uUHJvZ3Jlc3MoTWF0aC5taW4oY3VycmVudFRpbWUgLyB0b3RhbFRpbWUsIDEpKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gU2lnbmFsIGNvbXBsZXRpb24gb25jZSB0aW1lIGlzIHVwXHJcbiAgICAgIGlmIChjdXJyZW50VGltZSA+PSB0b3RhbFRpbWUpIHtcclxuICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIG5ldyBEZWZlcnJlZChvblVwZGF0ZSwgb25GaW5pc2gsIG9uRXJyb3IsIG9uQ2FuY2VsKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAgKiBHZXQgYSByYW5kb20gZmxvYXQgbnVtYmVyIGJldHdlZW4gYSBtaW4gKGluY2x1c2l2ZSkgYW5kIG1heCAoZXhjbHVzaXZlKSB2YWx1ZVxyXG4gICAgKiBAcGFyYW0ge251bWJlcn0gbWluIG1pbmltdW0gdmFsdWVcclxuICAgICogQHBhcmFtIHtudW1iZXJ9IG1heCBtYXhpbXVtIHZhbHVlXHJcbiAgICAqIEByZXR1cm5zIHtmbG9hdH1cclxuICAgICovXHJcbiAgc3RhdGljIGdldFJhbmRvbUZsb2F0KG1pbiwgbWF4KSB7XHJcbiAgICByZXR1cm4gTWF0aC5yYW5kb20oKSAqIChtYXggLSBtaW4pICsgbWluO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICAqIEdldCBhIHJhbmRvbSBpbnRlZ2VyIG51bWJlciBiZXR3ZWVuIGEgbWluIChpbmNsdXNpdmUpIGFuZCBtYXggKGV4Y2x1c2l2ZSkgdmFsdWVcclxuICAgICogQHBhcmFtIHtudW1iZXJ9IG1pbiBtaW5pbXVtIHZhbHVlXHJcbiAgICAqIEBwYXJhbSB7bnVtYmVyfSBtYXggbWF4aW11bSB2YWx1ZVxyXG4gICAgKiBAcmV0dXJucyB7aW50ZWdlcn1cclxuICAgICovXHJcbiAgc3RhdGljIGdldFJhbmRvbUludChtaW4sIG1heCkge1xyXG4gICAgbWluID0gTWF0aC5jZWlsKG1pbik7XHJcbiAgICBtYXggPSBNYXRoLmZsb29yKG1heCk7XHJcbiAgICByZXR1cm4gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKG1heCAtIG1pbikpICsgbWluO1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgVXRpbHM7XHJcbiIsIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxyXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTBcclxuY29uc3QgUmFkaWFuVG9EZWdyZWUgPSAxODAgLyBNYXRoLlBJO1xyXG5jb25zdCBEZWdyZWVUb1JhZGlhbiA9IE1hdGguUEkgLyAxODA7XHJcblxyXG4vKipcclxuICogQSBjb2xsZWN0aW9uIG9mIHVzZWZ1bCBtYXRoIGZ1bmN0aW9ucy5cclxuICpcclxuICogQGhpZGVjb25zdHJ1Y3RvclxyXG4gKi9cclxuY2xhc3MgTWF0aFV0aWxzIHtcclxuICAvKipcclxuICAgKiBDb252ZXJ0IHRoZSBnaXZlbiBhbmdsZSBmcm9tIHJhZGlhbnMgdG8gZGVncmVlcy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSByYWRpYW5zIC0gQW5nbGUgaW4gcmFkaWFucy5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IC0gQW5nbGUgaW4gZGVncmVlcy5cclxuICAgKi9cclxuICBzdGF0aWMgdG9EZWdyZWVzKHJhZGlhbnMpIHtcclxuICAgIHJldHVybiByYWRpYW5zICogUmFkaWFuVG9EZWdyZWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDb252ZXJ0IHRoZSBnaXZlbiBhbmdsZSBmcm9tIGRlZ3JlZXMgdG8gcmFkaWFucy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBkZWdyZWVzIC0gQW5nbGUgaW4gZGVncmVlcy5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IC0gQW5nbGUgaW4gcmFkaWFucy5cclxuICAgKi9cclxuICBzdGF0aWMgdG9SYWRpYW5zKGRlZ3JlZXMpIHtcclxuICAgIHJldHVybiBkZWdyZWVzICogRGVncmVlVG9SYWRpYW47XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBMaW5lYXJseSBpbnRlcnBvbGF0ZSBiZXR3ZWVuIHR3byB2YWx1ZXMuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge251bWJlcn0gZnJvbSAtIFN0YXJ0IHZhbHVlLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB0byAtIFRhcmdldCB2YWx1ZS5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gZmFjdG9yIC0gMC0xIGFtb3VudCB0byBpbnRlcnBvbGF0ZSBiZXR3ZWVuIGZyb20gYW5kIHRvLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge251bWJlcn1cclxuICAgKi9cclxuICBzdGF0aWMgbGVycChmcm9tLCB0bywgZmFjdG9yKSB7XHJcbiAgICByZXR1cm4gZnJvbSArICh0byAtIGZyb20pICogZmFjdG9yO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2xhbXAgYSBudW1iZXIgYmV0d2VlbiAyIHZhbHVlcy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSAtIFZhbHVlIHRvIGNsYW1wLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbbWluPTBdIC0gTWludW11bSB2YWx1ZS5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gW21heD0xXSAtIE1heGltdW0gdmFsdWUuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxyXG4gICAqL1xyXG4gIHN0YXRpYyBjbGFtcCh2YWx1ZSwgbWluID0gMCwgbWF4ID0gMSkge1xyXG4gICAgcmV0dXJuIE1hdGgubWF4KG1pbiwgTWF0aC5taW4odmFsdWUsIG1heCkpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2FsY3VsYXRlcyB0aGUgY2xvc2VzdCBwb2ludCBvbiBhIGdpdmVuIDJEIGxpbmUgc2VnZW1lbnRcclxuICAgKiBmcm9tIGEgZ2l2ZW4gMkQgcG9pbnQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBhIC0gRmlyc3QgcG9pbnQgb24gbGluZSBzZWdtZW50LlxyXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IGIgLSBTZWNvbmQgcG9pbnQgb24gbGluZSBzZWdtZW50LlxyXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IHAgLSAyRCBwb2ludC5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtBcnJheS48bnVtYmVyPn1cclxuICAgKi9cclxuICBzdGF0aWMgY2xvc2VzdFBvaW50T25MaW5lKGEsIGIsIHApIHtcclxuICAgIGNvbnN0IGRpc3RTcXIgPSBNYXRoVXRpbHMuZGlzdGFuY2VTcXVhcmVkKGEsIGIpO1xyXG5cclxuICAgIC8vIExpbmUgc2VnbWVudCBpcyBhIHNpbmdsZSBwb2ludFxyXG4gICAgaWYgKGRpc3RTcXIgPT09IDApIHtcclxuICAgICAgcmV0dXJuIGE7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdCA9XHJcbiAgICAgICgocFswXSAtIGFbMF0pICogKGJbMF0gLSBhWzBdKSArIChwWzFdIC0gYVsxXSkgKiAoYlsxXSAtIGFbMV0pKSAvIGRpc3RTcXI7XHJcblxyXG4gICAgbGV0IHBvaW50ID0gWy4uLmFdO1xyXG4gICAgaWYgKHQgPiAxKSB7XHJcbiAgICAgIHBvaW50ID0gWy4uLmJdO1xyXG4gICAgfSBlbHNlIGlmICh0ID4gMCkge1xyXG4gICAgICBwb2ludCA9IFthWzBdICsgdCAqIChiWzBdIC0gYVswXSksIGFbMV0gKyB0ICogKGJbMV0gLSBhWzFdKV07XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHBvaW50O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgZGlzdGFuY2Ugc3F1YXJlZCBmb3IgdHdvIDJEIHBvaW50cy5cclxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBhIC0gMkQgcG9pbnQuXHJcbiAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gYiAtIDJEIHBvaW50LlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge251bWJlcn1cclxuICAgKi9cclxuICBzdGF0aWMgZGlzdGFuY2VTcXVhcmVkKGEsIGIpIHtcclxuICAgIHJldHVybiAoYVswXSAtIGJbMF0pICogKGFbMF0gLSBiWzBdKSArIChhWzFdIC0gYlsxXSkgKiAoYVsxXSAtIGJbMV0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVHJpYW5ndWxhdGVzIGEgc2V0IG9mIDJEIHBvaW50cyB1c2luZyBhbiBpbXBsZW1lbnRhdGlvblxyXG4gICAqIG9mIHRoZSBCb3d5ZXItV2F0c29uIGluY3JlbWVudGFsIERlbGF1bmF5IHRyaWFuZ3VsYXRpb24uXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge0FycmF5LjxBcnJheS48bnVtYmVyPj59IHZlcnRpY2VzIC0gQXJyYXkgb2YgMkQgcG9pbnRzLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0FycmF5LjxBcnJheTxudW1iZXI+Pn0gLSBBcnJheSBvZiB0cmlhbmdsZSBpbmRpY2VzLlxyXG4gICAqL1xyXG4gIHN0YXRpYyBnZXREZWxhdW5heVRyaWFuZ3VsYXRpb24odmVydGljZXMpIHtcclxuICAgIGlmICghdmVydGljZXMgfHwgdmVydGljZXMubGVuZ3RoIDwgMykge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgYENhbm5vdCBnZXQgZGVsYXVuYXkgdHJpYW5ndWxhdGlvbiBmb3IgcG9pbnRzICR7dmVydGljZXN9LiBJbnB1dCBtdXN0IGNvbnRhaW4gYXQgbGVhc3QgdGhyZWUgcG9pbnRzLmBcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgbWluWCA9IE51bWJlci5QT1NJVElWRV9JTkZJTklUWTtcclxuICAgIGxldCBtaW5ZID0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO1xyXG4gICAgbGV0IG1heFggPSBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk7XHJcbiAgICBsZXQgbWF4WSA9IE51bWJlci5ORUdBVElWRV9JTkZJTklUWTtcclxuXHJcbiAgICB2ZXJ0aWNlcy5mb3JFYWNoKHYgPT4ge1xyXG4gICAgICBtaW5YID0gdlswXSA8IG1pblggPyB2WzBdIDogbWluWDtcclxuICAgICAgbWluWSA9IHZbMV0gPCBtaW5ZID8gdlsxXSA6IG1pblk7XHJcbiAgICAgIG1heFggPSB2WzBdID4gbWF4WCA/IHZbMF0gOiBtYXhYO1xyXG4gICAgICBtYXhZID0gdlsxXSA+IG1heFkgPyB2WzFdIDogbWF4WTtcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IGRYID0gbWF4WCAtIG1pblg7XHJcbiAgICBjb25zdCBkWSA9IG1heFkgLSBtaW5ZO1xyXG4gICAgY29uc3QgbWlkWCA9IChtaW5YICsgbWF4WCkgLyAyO1xyXG4gICAgY29uc3QgbWlkWSA9IChtaW5ZICsgbWF4WSkgLyAyO1xyXG4gICAgY29uc3QgZE1heCA9IGRYID4gZFkgPyBkWCA6IGRZO1xyXG5cclxuICAgIGNvbnN0IHN1cGVySW5kaWNlcyA9IFtcclxuICAgICAgdmVydGljZXMubGVuZ3RoLFxyXG4gICAgICB2ZXJ0aWNlcy5sZW5ndGggKyAxLFxyXG4gICAgICB2ZXJ0aWNlcy5sZW5ndGggKyAyLFxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdCB2ZXJ0c1dpdGhTdXBlciA9IFtcclxuICAgICAgLi4udmVydGljZXMsXHJcbiAgICAgIFttaWRYIC0gMjAgKiBkTWF4LCBtaWRZIC0gZE1heF0sXHJcbiAgICAgIFttaWRYLCBtaWRZICsgMjAgKiBkTWF4XSxcclxuICAgICAgW21pZFggKyAyMCAqIGRNYXgsIG1pZFkgLSBkTWF4XSxcclxuICAgIF07XHJcblxyXG4gICAgY29uc3Qgc3VwZXJTb3J0ZWRJbmRpY2VzID0gTWF0aFV0aWxzLnNvcnRQb2ludHNDQ1coXHJcbiAgICAgIHN1cGVySW5kaWNlcyxcclxuICAgICAgdmVydHNXaXRoU3VwZXJcclxuICAgICk7XHJcblxyXG4gICAgY29uc3Qgc3VwZXJUcmlhbmdsZSA9IHtcclxuICAgICAgaW5kaWNlczogc3VwZXJTb3J0ZWRJbmRpY2VzLFxyXG4gICAgICBlZGdlczogW1xyXG4gICAgICAgIFtzdXBlclNvcnRlZEluZGljZXNbMF0sIHN1cGVyU29ydGVkSW5kaWNlc1sxXV0sXHJcbiAgICAgICAgW3N1cGVyU29ydGVkSW5kaWNlc1sxXSwgc3VwZXJTb3J0ZWRJbmRpY2VzWzJdXSxcclxuICAgICAgICBbc3VwZXJTb3J0ZWRJbmRpY2VzWzJdLCBzdXBlclNvcnRlZEluZGljZXNbMF1dLFxyXG4gICAgICBdLFxyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCB0cmlhbmdsZXMgPSBbc3VwZXJUcmlhbmdsZV07XHJcblxyXG4gICAgdmVydHNXaXRoU3VwZXIuZm9yRWFjaCgobmV3VmVydCwgbmV3SW5kZXgpID0+IHtcclxuICAgICAgY29uc3QgaW52YWxpZFRyaWFuZ2xlcyA9IFtdO1xyXG4gICAgICB0cmlhbmdsZXMuZm9yRWFjaCh0cmlhbmdsZSA9PiB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgTWF0aFV0aWxzLmlzUG9pbnRJbkNpcmN1bUNpcmNsZShcclxuICAgICAgICAgICAgdmVydHNXaXRoU3VwZXJbdHJpYW5nbGUuaW5kaWNlc1swXV0sXHJcbiAgICAgICAgICAgIHZlcnRzV2l0aFN1cGVyW3RyaWFuZ2xlLmluZGljZXNbMV1dLFxyXG4gICAgICAgICAgICB2ZXJ0c1dpdGhTdXBlclt0cmlhbmdsZS5pbmRpY2VzWzJdXSxcclxuICAgICAgICAgICAgbmV3VmVydFxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgaW52YWxpZFRyaWFuZ2xlcy5wdXNoKHRyaWFuZ2xlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgY29uc3QgYm91bmRpbmdQb2x5ID0gW107XHJcbiAgICAgIGludmFsaWRUcmlhbmdsZXMuZm9yRWFjaCh0cmlhbmdsZSA9PiB7XHJcbiAgICAgICAgdHJpYW5nbGUuZWRnZXMuZm9yRWFjaChlZGdlID0+IHtcclxuICAgICAgICAgIGxldCBjb3VudCA9IDA7XHJcbiAgICAgICAgICBpbnZhbGlkVHJpYW5nbGVzLmZvckVhY2gob3RoZXJUcmlhbmdsZSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0cmlhbmdsZSAhPT0gb3RoZXJUcmlhbmdsZSkge1xyXG4gICAgICAgICAgICAgIG90aGVyVHJpYW5nbGUuZWRnZXMuZm9yRWFjaChvdGhlckVkZ2UgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAoZWRnZVswXSA9PT0gb3RoZXJFZGdlWzBdICYmIGVkZ2VbMV0gPT09IG90aGVyRWRnZVsxXSkgfHxcclxuICAgICAgICAgICAgICAgICAgKGVkZ2VbMV0gPT09IG90aGVyRWRnZVswXSAmJiBlZGdlWzBdID09PSBvdGhlckVkZ2VbMV0pXHJcbiAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgY291bnQgKz0gMTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICBpZiAoY291bnQgPT09IDApIGJvdW5kaW5nUG9seS5wdXNoKGVkZ2UpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGludmFsaWRUcmlhbmdsZXMuZm9yRWFjaCh0cmlhbmdsZSA9PiB7XHJcbiAgICAgICAgdHJpYW5nbGVzLnNwbGljZSh0cmlhbmdsZXMuaW5kZXhPZih0cmlhbmdsZSksIDEpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGJvdW5kaW5nUG9seS5mb3JFYWNoKGVkZ2UgPT4ge1xyXG4gICAgICAgIGNvbnN0IHNvcnRlZEluZGljZXMgPSBNYXRoVXRpbHMuc29ydFBvaW50c0NDVyhcclxuICAgICAgICAgIFtlZGdlWzBdLCBlZGdlWzFdLCBuZXdJbmRleF0sXHJcbiAgICAgICAgICB2ZXJ0c1dpdGhTdXBlclxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHRyaWFuZ2xlcy5wdXNoKHtcclxuICAgICAgICAgIGluZGljZXM6IHNvcnRlZEluZGljZXMsXHJcbiAgICAgICAgICBlZGdlczogW1xyXG4gICAgICAgICAgICBbc29ydGVkSW5kaWNlc1swXSwgc29ydGVkSW5kaWNlc1sxXV0sXHJcbiAgICAgICAgICAgIFtzb3J0ZWRJbmRpY2VzWzFdLCBzb3J0ZWRJbmRpY2VzWzJdXSxcclxuICAgICAgICAgICAgW3NvcnRlZEluZGljZXNbMl0sIHNvcnRlZEluZGljZXNbMF1dLFxyXG4gICAgICAgICAgXSxcclxuICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCB0cmlhbmdsZXNUb1JlbW92ZSA9IFtdO1xyXG4gICAgdHJpYW5nbGVzLmZvckVhY2godHJpYW5nbGUgPT4ge1xyXG4gICAgICB0cmlhbmdsZS5pbmRpY2VzLmZvckVhY2goaW5kZXggPT4ge1xyXG4gICAgICAgIGlmIChzdXBlckluZGljZXMuaW5jbHVkZXMoaW5kZXgpKSB7XHJcbiAgICAgICAgICB0cmlhbmdsZXNUb1JlbW92ZS5wdXNoKHRyaWFuZ2xlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdHJpYW5nbGVzVG9SZW1vdmUuZm9yRWFjaCh0cmlhbmdsZSA9PiB7XHJcbiAgICAgIGNvbnN0IGluZGV4ID0gdHJpYW5nbGVzLmluZGV4T2YodHJpYW5nbGUpO1xyXG4gICAgICBpZiAoaW5kZXggIT09IC0xKSB7XHJcbiAgICAgICAgdHJpYW5nbGVzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiB0cmlhbmdsZXMubWFwKHRyaWFuZ2xlID0+IHRyaWFuZ2xlLmluZGljZXMpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRGV0ZXJtaW5lcyBpZiBhIGdpdmVuIDJEIHBvaW50IGlzIHdpdGhpbiB0aGUgY2ljcnVtY2lyY2xlXHJcbiAgICogZGVmaW5lZCBieSB0aHJlZSAyRCBwb2ludHMuIFRoZSB0cmlhbmdsZSBwb2ludHMgbXVzdCBiZSBpblxyXG4gICAqIGNvdW50ZXItY2xvY2t3aXNlIG9yZGVyIGEgLT4gYiAtPiBjLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gYSAtIEZpcnN0IHRyaWFuZ2xlIHBvaW50LlxyXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IGIgLSBTZWNvbmQgdHJpYW5nbGUgcG9pbnQuXHJcbiAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gYyAtIFRoaXJkIHRyaWFuZ2xlIHBvaW50LlxyXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IHAgLSAyRCBwb2ludC5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gICAqL1xyXG4gIHN0YXRpYyBpc1BvaW50SW5DaXJjdW1DaXJjbGUoYSwgYiwgYywgcCkge1xyXG4gICAgY29uc3QgYXggPSBhWzBdIC0gcFswXTtcclxuICAgIGNvbnN0IGF5ID0gYVsxXSAtIHBbMV07XHJcbiAgICBjb25zdCBieCA9IGJbMF0gLSBwWzBdO1xyXG4gICAgY29uc3QgYnkgPSBiWzFdIC0gcFsxXTtcclxuICAgIGNvbnN0IGN4ID0gY1swXSAtIHBbMF07XHJcbiAgICBjb25zdCBjeSA9IGNbMV0gLSBwWzFdO1xyXG5cclxuICAgIHJldHVybiAoXHJcbiAgICAgIChheCAqIGF4ICsgYXkgKiBheSkgKiAoYnggKiBjeSAtIGN4ICogYnkpIC1cclxuICAgICAgICAoYnggKiBieCArIGJ5ICogYnkpICogKGF4ICogY3kgLSBjeCAqIGF5KSArXHJcbiAgICAgICAgKGN4ICogY3ggKyBjeSAqIGN5KSAqIChheCAqIGJ5IC0gYnggKiBheSkgPlxyXG4gICAgICAwXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRGV0ZXJtaW5lcyBpZiBhIGdpdmVuIDJEIHBvaW50IGlzIHdpdGhpbiBhIGdpdmVuIHRyaWFuZ2xlLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gYSAtIEZpcnN0IHRyaWFuZ2xlIHBvaW50LlxyXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IGIgLSBTZWNvbmQgdHJpYW5nbGUgcG9pbnQuXHJcbiAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gYyAtIFRoaXJkIHRyaWFuZ2xlIHBvaW50LlxyXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IHAgLSAyRCBwb2ludC5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gICAqL1xyXG4gIHN0YXRpYyBpc1BvaW50SW5UcmlhbmdsZShhLCBiLCBjLCBwKSB7XHJcbiAgICBjb25zdCBkZW5vbSA9IChiWzFdIC0gY1sxXSkgKiAoYVswXSAtIGNbMF0pICsgKGNbMF0gLSBiWzBdKSAqIChhWzFdIC0gY1sxXSk7XHJcbiAgICBjb25zdCBhVmFsID1cclxuICAgICAgKChiWzFdIC0gY1sxXSkgKiAocFswXSAtIGNbMF0pICsgKGNbMF0gLSBiWzBdKSAqIChwWzFdIC0gY1sxXSkpIC8gZGVub207XHJcbiAgICBjb25zdCBiVmFsID1cclxuICAgICAgKChjWzFdIC0gYVsxXSkgKiAocFswXSAtIGNbMF0pICsgKGFbMF0gLSBjWzBdKSAqIChwWzFdIC0gY1sxXSkpIC8gZGVub207XHJcbiAgICBjb25zdCBjVmFsID0gMSAtIGFWYWwgLSBiVmFsO1xyXG5cclxuICAgIHJldHVybiAoXHJcbiAgICAgIGFWYWwgPj0gMCAmJiBhVmFsIDw9IDEgJiYgYlZhbCA+PSAwICYmIGJWYWwgPD0gMSAmJiBjVmFsID49IDAgJiYgY1ZhbCA8PSAxXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgc29ydGVkIGluZGljZXMgb2YgYSBnaXZlbiBzZXQgb2YgMkQgcG9pbnRzIGluXHJcbiAgICogY291bnRlci1jbG9ja3dpc2Ugb3JkZXIuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBpbmRpY2VzIC0gTGlzdCBvZiBpbmRpY2VzLlxyXG4gICAqIEBwYXJhbSB7QXJyYXkuPEFycmF5LjxudW1iZXI+Pn0gdmVydGljZXMgLSBMaXN0IG9mIDJEIHBvaW50cy5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtBcnJheS48QXJyYXkuPG51bWJlcj4+fSAtIExpc3Qgb2Ygc29ydGVkIGluZGljZXMuXHJcbiAgICovXHJcbiAgc3RhdGljIHNvcnRQb2ludHNDQ1coaW5kaWNlcywgdmVydGljZXMpIHtcclxuICAgIGNvbnN0IGNlbnRyb2lkID0gWzAsIDBdO1xyXG4gICAgaW5kaWNlcy5mb3JFYWNoKGluZGV4ID0+IHtcclxuICAgICAgY2VudHJvaWRbMF0gKz0gdmVydGljZXNbaW5kZXhdWzBdO1xyXG4gICAgICBjZW50cm9pZFsxXSArPSB2ZXJ0aWNlc1tpbmRleF1bMV07XHJcbiAgICB9KTtcclxuICAgIGNlbnRyb2lkWzBdIC89IGluZGljZXMubGVuZ3RoO1xyXG4gICAgY2VudHJvaWRbMV0gLz0gaW5kaWNlcy5sZW5ndGg7XHJcblxyXG4gICAgaW5kaWNlcy5zb3J0KChhLCBiKSA9PiB7XHJcbiAgICAgIGNvbnN0IGJWYWwgPSBNYXRoLmF0YW4yKFxyXG4gICAgICAgIHZlcnRpY2VzW2JdWzFdIC0gY2VudHJvaWRbMV0sXHJcbiAgICAgICAgdmVydGljZXNbYl1bMF0gLSBjZW50cm9pZFswXVxyXG4gICAgICApO1xyXG4gICAgICBjb25zdCBhVmFsID0gTWF0aC5hdGFuMihcclxuICAgICAgICB2ZXJ0aWNlc1thXVsxXSAtIGNlbnRyb2lkWzFdLFxyXG4gICAgICAgIHZlcnRpY2VzW2FdWzBdIC0gY2VudHJvaWRbMF1cclxuICAgICAgKTtcclxuXHJcbiAgICAgIHJldHVybiBhVmFsIC0gYlZhbDtcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBpbmRpY2VzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2FjbHVhdGVzIHRoZSBhcmVhIG9mIGEgdHJpYW5nbGVcclxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBhIC0gRmlyc3QgdHJpYW5nbGUgcG9pbnQuXHJcbiAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gYiAtIFNlY29uZCB0cmlhbmdsZSBwb2ludC5cclxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBjIC0gVGhpcmQgdHJpYW5nbGUgcG9pbnQuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxyXG4gICAqL1xyXG4gIHN0YXRpYyB0cmlhbmdsZUFyZWEoYSwgYiwgYykge1xyXG4gICAgcmV0dXJuIE1hdGguYWJzKFxyXG4gICAgICAoYVswXSAqIChiWzFdIC0gY1sxXSkgKyBiWzBdICogKGNbMV0gLSBhWzFdKSArIGNbMF0gKiAoYVsxXSAtIGJbMV0pKSAqIDAuNVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiB0aGUgbWFnbml0dWRlIG9mIGEgZ2l2ZW4gdmVjdG9yIGFycmF5LlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gdmVjdG9yIC0gQXJyYXkgY29uc2lzdGluZyBvZiBudW1iZXJzLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge251bWJlcn1cclxuICAgKi9cclxuICBzdGF0aWMgZ2V0VmVjdG9yTWFnbml0dWRlKHZlY3Rvcikge1xyXG4gICAgaWYgKCEodmVjdG9yIGluc3RhbmNlb2YgQXJyYXkpKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgQ2Fubm90IGdldCBtYWduaXR1ZGUgZm9yIHZlY3RvciAke3ZlY3Rvcn0uIElucHV0IG11c3QgYmUgYW4gQXJyYXkgbnVtYmVycy5gXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgcmVkdWNlciA9IChhY2N1bXVsYXRvciwgY3VycmVudFZhbHVlKSA9PiB7XHJcbiAgICAgIGlmICh0eXBlb2YgY3VycmVudFZhbHVlICE9PSAnbnVtYmVyJykge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICAgIGBDYW5ub3QgZ2V0IG1hZ25pdHVkZSBmb3IgdmVjdG9yICR7dmVjdG9yfS4gQWxsIGl0ZW1zIGluIHRoZSBpbnB1dCBBcnJheSBtdXN0IGJlIG51bWJlcnMuYFxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBhY2N1bXVsYXRvciArIChjdXJyZW50VmFsdWUgKiogMik7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIE1hdGguc3FydCh2ZWN0b3IucmVkdWNlKHJlZHVjZXIsIDApKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiB0aGUgZG90IHByb2R1Y3QgYmV0d2VlbiB0d28gdmVjdG9ycy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IHZlY3RvckEgLSBBcnJheSBjb25zaXN0aW5nIG9mIG51bWJlcnMuXHJcbiAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gdmVjdG9yQiAtIEFycmF5IGNvbnNpc3Rpbmcgb2YgbnVtYmVycy5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XHJcbiAgICovXHJcbiAgc3RhdGljIGdldERvdFByb2R1Y3QodmVjdG9yQSwgdmVjdG9yQikge1xyXG4gICAgaWYgKCEodmVjdG9yQSBpbnN0YW5jZW9mIEFycmF5KSB8fCAhKHZlY3RvckIgaW5zdGFuY2VvZiBBcnJheSkgfHwgdmVjdG9yQS5sZW5ndGggIT09IHZlY3RvckIubGVuZ3RoKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGdldCBkb3QgcHJvZHVjdCBiZXR3ZWVuICR7dmVjdG9yQX0gYW5kICR7dmVjdG9yQn0uIElucHV0cyBtdXN0IGJlIHZlY3RvcnMgb2YgdGhlIHNhbWUgbGVuZ3RoLmApO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCByZXN1bHQgPSAwO1xyXG4gICAgdmVjdG9yQS5mb3JFYWNoKCh2YWx1ZUEsIGluZGV4KSA9PiB7XHJcbiAgICAgIGNvbnN0IHZhbHVlQiA9IHZlY3RvckJbaW5kZXhdO1xyXG5cclxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZUEgIT09ICdudW1iZXInIHx8IHR5cGVvZiB2YWx1ZUIgIT09ICdudW1iZXInKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZ2V0IGRvdCBwcm9kdWN0IGJldHdlZW4gJHt2ZWN0b3JBfSBhbmQgJHt2ZWN0b3JCfS4gVmVjdG9ycyBtdXN0IG9ubHkgY29uc2lzdCBvZiBudW1lcmljIHZhbHVlcy5gKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmVzdWx0ICs9IHZhbHVlQSAqIHZhbHVlQjtcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gdGhlIGFuZ2xlIGluIHJhZGlhbnMgYmV0d2VlbiB2ZWN0b3JBIGFuZCB2ZWN0b3JCLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gdmVjdG9yQSAtIEFycmF5IGNvbnNpc3Rpbmcgb2YgbnVtYmVycy5cclxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSB2ZWN0b3JCIC0gQXJyYXkgY29uc2lzdGluZyBvZiBudW1iZXJzLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge251bWJlcn1cclxuICAgKi9cclxuICBzdGF0aWMgZ2V0QW5nbGVCZXR3ZWVuKHZlY3RvckEsIHZlY3RvckIpIHtcclxuICAgIGNvbnN0IG5vcm1hbEEgPSB0aGlzLm5vcm1hbGl6ZVZlY3RvcihbLi4udmVjdG9yQV0pO1xyXG4gICAgY29uc3Qgbm9ybWFsQiA9IHRoaXMubm9ybWFsaXplVmVjdG9yKFsuLi52ZWN0b3JCXSk7XHJcbiAgICBjb25zdCBkb3QgPSB0aGlzLmdldERvdFByb2R1Y3Qobm9ybWFsQSwgbm9ybWFsQik7XHJcblxyXG4gICAgcmV0dXJuIE1hdGguYWNvcyh0aGlzLmNsYW1wKGRvdCwgLTEsIDEpKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE11bHRpcGx5IGEgM3gzIHJvdGF0aW9uIG1hdHJpeCB3aXRoIGEgdmVjdG9yMy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IHZlY3RvcjMgLSBBcnJheSBjb25zaXN0aW5nIG9mIDMgbnVtYmVycyByZXByZXNlbnRpbmdcclxuICAgKiBhIGRpcmVjdGlvbiB2ZWN0b3IuXHJcbiAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gbWF0cml4MyAtIEFuIGFycmF5IG9mIDkgbnVtYmVycyByZXByZXNlbnRpbmcgYSByb3dcclxuICAgKiBtYWpvciByb3RhdGlvbiBtYXRyaXguXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7QXJyYXkuPG51bWJlcj59IC0gQW4gYXJyYXkgb2YgMyBudW1iZXJzIHJlcHJlc2VudGluZyB0aGUgbmV3IGRpcmVjdGlvblxyXG4gICAqIG9mIHRoZSB2ZWN0b3IuXHJcbiAgICovXHJcbiAgc3RhdGljIHJvdGF0ZVZlY3Rvcih2ZWN0b3IzLCBtYXRyaXgzKSB7XHJcbiAgICBpZiAoISh2ZWN0b3IzIGluc3RhbmNlb2YgQXJyYXkpXHJcbiAgICAgIHx8IHZlY3RvcjMubGVuZ3RoICE9PSAzXHJcbiAgICAgIHx8ICF2ZWN0b3IzLmV2ZXJ5KHYgPT4gdHlwZW9mIHYgPT09ICdudW1iZXInKSkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgYENhbm5vdCByb3RhdGUgdmVjdG9yICR7dmVjdG9yM30gYnkgcm90YXRpb24gbWF0cml4ICR7bWF0cml4M30uIElucHV0IHZlY3RvciBtdXN0IGJlIGFuIGFycmF5IG9mIDMgbnVtYmVycy5gXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCEobWF0cml4MyBpbnN0YW5jZW9mIEFycmF5KVxyXG4gICAgICB8fCBtYXRyaXgzLmxlbmd0aCAhPT0gOVxyXG4gICAgICB8fCAhbWF0cml4My5ldmVyeSh2ID0+IHR5cGVvZiB2ID09PSAnbnVtYmVyJykpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgIGBDYW5ub3Qgcm90YXRlIHZlY3RvciAke3ZlY3RvcjN9IGJ5IHJvdGF0aW9uIG1hdHJpeCAke21hdHJpeDN9LiBJbnB1dCBtYXRyaXgzIG11c3QgYmUgYW4gYXJyYXkgb2YgOSBudW1iZXJzLmBcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB4ID0gbWF0cml4M1swXSAqIHZlY3RvcjNbMF1cclxuICAgICAgKyBtYXRyaXgzWzNdICogdmVjdG9yM1sxXVxyXG4gICAgICArIG1hdHJpeDNbNl0gKiB2ZWN0b3IzWzJdO1xyXG4gICAgY29uc3QgeSA9IG1hdHJpeDNbMV0gKiB2ZWN0b3IzWzBdXHJcbiAgICAgICsgbWF0cml4M1s0XSAqIHZlY3RvcjNbMV1cclxuICAgICAgKyBtYXRyaXgzWzddICogdmVjdG9yM1syXTtcclxuICAgIGNvbnN0IHogPSBtYXRyaXgzWzJdICogdmVjdG9yM1swXVxyXG4gICAgICArIG1hdHJpeDNbNV0gKiB2ZWN0b3IzWzFdXHJcbiAgICAgICsgbWF0cml4M1s4XSAqIHZlY3RvcjNbMl07XHJcblxyXG4gICAgcmV0dXJuIFt4LCB5LCB6XTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE5vcm1hbGl6ZSBhIGdpdmVuIHZlY3RvciBhcnJheS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IHZlY3RvciAtIEFycmF5IGNvbnNpc3Rpbmcgb2YgbnVtYmVycy5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtBcnJheS48bnVtYmVyPn0gVGhlIG9yaWdpbmFsIHZlY3RvciB3aXRoIG5vcm1hbGl6ZWQgdmFsdWVzLCBmb3IgY2hhaW5pbmcuXHJcbiAgICovXHJcbiAgc3RhdGljIG5vcm1hbGl6ZVZlY3Rvcih2ZWN0b3IpIHtcclxuICAgIGNvbnN0IG1hZ25pdHVkZSA9IHRoaXMuZ2V0VmVjdG9yTWFnbml0dWRlKHZlY3Rvcik7XHJcblxyXG4gICAgaWYgKG1hZ25pdHVkZSA9PT0gMCkge1xyXG4gICAgICB2ZWN0b3IuZmlsbCgwKVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdmVjdG9yLmZvckVhY2goKHZhbHVlLCBpbmRleCkgPT4ge1xyXG4gICAgICAgIHZlY3RvcltpbmRleF0gPSB2YWx1ZSAvIG1hZ25pdHVkZTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHZlY3RvcjtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEV4dHJhY3QgdGhlIDN4MyByb3RhdGlvbiBtYXRyaXggZnJvbSBhIGdpdmVuIDR4NCB0cmFuc2Zvcm1hdGlvbiBtYXRyaXguXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBtYXRyaXg0IC0gQW4gYXJyYXkgb2YgMTYgbnVtYmVycyByZXByZXNlbnRpbmcgYSByb3dcclxuICAgKiBtYWpvciB0cmFuc2Zvcm1hdGlvbiBtYXRyaXguXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7QXJyYXkuPG51bWJlcj59IC0gQW4gYXJyYXkgb2YgOSBudW1iZXJzIHJlcHJlc2VudGluZyBhIHJvdyBtYWpvclxyXG4gICAqIHJvdGF0aW9uIG1hdHJpeC5cclxuICAgKi9cclxuICBzdGF0aWMgZ2V0Um90YXRpb25NYXRyaXgobWF0cml4NCkge1xyXG4gICAgaWYgKCEobWF0cml4NCBpbnN0YW5jZW9mIEFycmF5KVxyXG4gICAgICB8fCBtYXRyaXg0Lmxlbmd0aCAhPT0gMTZcclxuICAgICAgfHwgIW1hdHJpeDQuZXZlcnkodiA9PiB0eXBlb2YgdiA9PT0gJ251bWJlcicpKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgQ2Fubm90IGNvbnZlcnQgbWF0cml4ICR7bWF0cml4NH0gdG8gYSByb3RhdGlvbiBtYXRyaXguIElucHV0IG1hdHJpeCBtdXN0IGJlIGFuIGFycmF5IG9mIDE2IG51bWJlcnMuYFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEV4dHJhY3Qgc2NhbGVcclxuICAgIGNvbnN0IHNjYWxlWCA9IDEgLyAodGhpcy5nZXRWZWN0b3JNYWduaXR1ZGUobWF0cml4NC5zbGljZSgwLCA0KSkgfHwgMSk7XHJcbiAgICBjb25zdCBzY2FsZVkgPSAxIC8gKHRoaXMuZ2V0VmVjdG9yTWFnbml0dWRlKG1hdHJpeDQuc2xpY2UoNCwgOCkpIHx8IDEpO1xyXG4gICAgY29uc3Qgc2NhbGVaID0gMSAvICh0aGlzLmdldFZlY3Rvck1hZ25pdHVkZShtYXRyaXg0LnNsaWNlKDgsIDEyKSkgfHwgMSk7XHJcblxyXG4gICAgcmV0dXJuIFtcclxuICAgICAgbWF0cml4NFswXSAqIHNjYWxlWCwgbWF0cml4NFsxXSAqIHNjYWxlWCwgbWF0cml4NFsyXSAqIHNjYWxlWCxcclxuICAgICAgbWF0cml4NFs0XSAqIHNjYWxlWSwgbWF0cml4NFs1XSAqIHNjYWxlWSwgbWF0cml4NFs2XSAqIHNjYWxlWSxcclxuICAgICAgbWF0cml4NFs4XSAqIHNjYWxlWiwgbWF0cml4NFs5XSAqIHNjYWxlWiwgbWF0cml4NFsxMF0gKiBzY2FsZVpcclxuICAgIF07XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gYW4gYXJyYXkgY29udGFpbmluZyB0aGUgc3BoZXJpY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBnaXZlbiBjYXJ0ZXNpYW5cclxuICAgKiB4eXogY29vcmRpbmF0ZXMuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IHggLSBQb3NpdGlvbiBhbG9uZyB0aGUgeCBheGlzLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gUG9zaXRpb24gYWxvbmcgdGhlIHkgYXhpcy5cclxuICAgKiBAcGFyYW0ge251bWJlcn0geiAtIFBvc2l0aW9uIGFsb25nIHRoZSB6IGF4aXMuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7QXJyYXkuPG51bWJlcj59IC0gQW4gYXJyYXkgY29uc2lzdGluZyBvZiB0aHJlZSBudW1iZXJlcyB3aGVyZSBpbmRleFxyXG4gICAqIDAgcmVwcmVzZW50cyB0aGUgcmFkaXVzLCBpbmRleCAxIHJlcHJlc2VudHMgdGhlIHZlcnRpY2FsL3BvbGFyIGFuZ2xlIGluIHJhZGlhbnNcclxuICAgKiBhbmQgaW5kZXggMiByZXByZXNlbnRzIHRoZSBob3Jpem9udGFsL2F6aW11dGhhbCBhbmdsZSBpbiByYWRpYW5zLlxyXG4gICAqL1xyXG4gIHN0YXRpYyBjYXJ0ZXNpYW5Ub1NwaGVyaWNhbCh4LCB5LCB6KSB7XHJcbiAgICBjb25zdCByID0gdGhpcy5nZXRWZWN0b3JNYWduaXR1ZGUoW3gsIHksIHpdKTtcclxuXHJcbiAgICAvLyBSZXR1cm4gaWRlbnRpdHkgaWYgdGhlIHZlY3RvciBoYXMgbm8gbGVuZ3RoXHJcbiAgICBpZiAociA9PT0gMCkge1xyXG4gICAgICByZXR1cm4gWzAsIDAsIDBdO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBbXHJcbiAgICAgIHIsXHJcbiAgICAgIE1hdGguYWNvcyh0aGlzLmNsYW1wKHkgLyByLCAtIDEsIDEpKSxcclxuICAgICAgTWF0aC5hdGFuMih4LCB6KSxcclxuICAgIF07XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHcmFkdWFsbHkgY2hhbmdlIGEgdmFsdWUgb2YgYSBudW1lcmljIHByb3BlcnR5IHRvd2FyZHMgYSBnb2FsIG92ZXIgdGltZSB1c2luZ1xyXG4gICAqIGEgY3JpdGljYWxseSBkYW1wZWQgc3ByaW5nIGZ1bmN0aW9uLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IGN1cnJlbnRWYWx1ZSAtIFRoZSBzdGFydGluZyB2YWx1ZS5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gdGFyZ2V0VmFsdWUtIFRoZSBnb2FsIHZhbHVlLlxyXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IFt2YWx1ZVN0b3JlID0gWzAsIDBdXSAtIEFuIEFycmF5IGNvbnNpc3Rpbmcgb2YgdHdvXHJcbiAgICogbnVtYmVycyB3aGVyZSB0aGUgZmlyc3QgbnVtYmVyIGhvbGRzIHRoZSByZXN1bHQgdmFsdWUgYW5kIHRoZSBzZWNvbmQgaG9sZHNcclxuICAgKiB0aGUgdmVsb2NpdHkgdGhhdCByZXN1bHRlZCBpbiB0aGF0IHZhbHVlLiBUaGUgc2FtZSBhcnJheSBzaG91bGQgYmUgcHJvdmlkZWRcclxuICAgKiB3aXRoIGVhY2ggY2FsbCB0byB0aGlzIGZ1bmN0aW9uLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbZGVsdGFUaW1lID0gMWUtN10gLSBUaGUgdGltZSBzaW5jZSB0aGUgbGFzdCBjYWxsIHRvIHRoaXMgZnVuY3Rpb25cclxuICAgKiBpbiBzZWNvbmRzLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbc21vb3RoVGltZSA9IDAuM10gLSBUaGUgYXBwcm94aW1hdGUgYW1vdW50IG9mIHRpbWUgaW4gc2Vjb25kc1xyXG4gICAqIGl0IHNob3VsZCB0YWtlIHRvIHJlYWNoIHRoZSB0YXJnZXQgdmFsdWUuXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IFttYXhTcGVlZCA9IDFlN10gLSBBIGNsYW1waW5nIHZhbHVlIGZvciB0aGUgbWF4aW11bSBzcGVlZCB0aGVcclxuICAgKiB2YWx1ZSBjYW4gY2hhbmdlLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0FycmF5LjxudW1iZXI+fSAtIFRoZSB2YWx1ZVN0b3JlIGFycmF5LlxyXG4gICAqL1xyXG4gIHN0YXRpYyBkYW1wVmFsdWUoXHJcbiAgICBjdXJyZW50VmFsdWUsXHJcbiAgICB0YXJnZXRWYWx1ZSxcclxuICAgIHZhbHVlU3RvcmUgPSBbMCwgMF0sXHJcbiAgICBkZWx0YVRpbWUgPSAxZS03LFxyXG4gICAgc21vb3RoVGltZSA9IDAuMyxcclxuICAgIG1heFNwZWVkID0gMWU3XHJcbiAgKSB7XHJcbiAgICBzbW9vdGhUaW1lID0gTWF0aC5tYXgoMC4wMDAxLCBzbW9vdGhUaW1lKTtcclxuICAgIGRlbHRhVGltZSA9IE1hdGgubWF4KDFlLTcsIGRlbHRhVGltZSk7XHJcblxyXG4gICAgLy8gRmluZCB0aGUgZGVsdGEgYmV0d2VlbiB2YWx1ZXMgYW5kIHVzZSBpdCB0byBlc3RpbWF0ZSB0aGUgcHJldmlvdXMgdmFsdWVcclxuICAgIGNvbnN0IGNsYW1wVGltZSA9IG1heFNwZWVkICogc21vb3RoVGltZTtcclxuICAgIGNvbnN0IGRlbHRhVmFsdWUgPSBjdXJyZW50VmFsdWUgLSB0YXJnZXRWYWx1ZTtcclxuICAgIGNvbnN0IGNsYW1wRGVsdGFWYWx1ZSA9IHRoaXMuY2xhbXAoZGVsdGFWYWx1ZSwgLWNsYW1wVGltZSwgY2xhbXBUaW1lKTtcclxuICAgIGNvbnN0IGxhc3RWYWx1ZSA9IGN1cnJlbnRWYWx1ZSAtIGNsYW1wRGVsdGFWYWx1ZTtcclxuXHJcbiAgICAvLyBDYWxjdWxhdGUgZGFtcGluZyBmYWN0b3JzXHJcbiAgICBjb25zdCBkMSA9IDIgLyBzbW9vdGhUaW1lO1xyXG4gICAgY29uc3QgZDIgPSBkMSAqIGRlbHRhVGltZTtcclxuICAgIGNvbnN0IGQzID0gMSAvICgxICsgZDIgKyAwLjUgKiBkMiAqKiAyICsgMC4yNSAqIGQyICoqIDMpO1xyXG4gICAgY29uc3QgZDQgPSAodmFsdWVTdG9yZVsxXSArIGQxICogY2xhbXBEZWx0YVZhbHVlKSAqIGRlbHRhVGltZTtcclxuXHJcbiAgICAvLyBEYW1wIHRoZSB0YXJnZXQgdmFsdWUgYW5kIHVwZGF0ZSB0aGUgdmVsb2NpdHlcclxuICAgIHZhbHVlU3RvcmVbMF0gPSBsYXN0VmFsdWUgKyAoY2xhbXBEZWx0YVZhbHVlICsgZDQpICogZDM7XHJcbiAgICB2YWx1ZVN0b3JlWzFdID0gKHZhbHVlU3RvcmVbMV0gLSBkMSAqIGQ0KSAqIGQzO1xyXG5cclxuICAgIC8vIFByZXZlbnQgb3ZlcnNob290aW5nXHJcbiAgICBpZiAodGFyZ2V0VmFsdWUgLSBjdXJyZW50VmFsdWUgPiAwID09PSB2YWx1ZVN0b3JlWzBdID4gdGFyZ2V0VmFsdWUpIHtcclxuICAgICAgdmFsdWVTdG9yZVswXSA9IHRhcmdldFZhbHVlO1xyXG4gICAgICB2YWx1ZVN0b3JlWzFdID0gKHZhbHVlU3RvcmVbMF0gLSB0YXJnZXRWYWx1ZSkgLyBkZWx0YVRpbWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHZhbHVlU3RvcmU7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBNYXRoVXRpbHM7XHJcbiIsIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxyXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTBcclxuLyogZXNsaW50LWRpc2FibGUgaW1wb3J0L3ByZWZlci1kZWZhdWx0LWV4cG9ydCAqL1xyXG5cclxuLyoqXHJcbiAqIEluZGljYXRlcyB0aGUgdHlwZSBvZiBob3N0IGJ1aWxkLlxyXG4gKlxyXG4gKiBAdHlwZSB7c3RyaW5nfVxyXG4gKi9cclxuY29uc3QgZW52ID0gJ2NvcmUnO1xyXG5cclxuZXhwb3J0IHtlbnZ9O1xyXG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cclxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVC0wXHJcbi8qIGVzbGludC1kaXNhYmxlIG5vLXVuZGVyc2NvcmUtZGFuZ2xlICovXHJcbmltcG9ydCBVdGlscyBmcm9tICcuL1V0aWxzJztcclxuXHJcbi8qKlxyXG4gKiBDbGFzcyB0aGF0IGNhbiBleGVjdXRlIGZ1bmN0aW9ucyB3aGVuIGxvY2FsIG1lc3NhZ2VzIGFyZSByZWNlaXZlZC4gTG9jYWwgbWVzc2FnZXNcclxuICogYXJlIHByZWZpeGVkIHdpdGggdGhlIGluc3RhbmNlJ3MgaWQuXHJcbiAqXHJcbiAqIEBhbGlhcyBjb3JlL01lc3NlbmdlclxyXG4gKlxyXG4gKiBAcHJvcGVydHkge2NvcmUvTWVzc2VuZ2VyfSBHbG9iYWxNZXNzZW5nZXIgLSBBIG1lc3NlbmdlciB0aGF0IGNhbiBiZSB1c2VkIGZvclxyXG4gKiBnbG9iYWwgbWVzc2FnaW5nLiBXaGVuIHVzaW5nIHN0YXRpYyBsaXN0ZW4gYW5kIGVtaXQgbWV0aG9kcyB0aGV5IGFyZSBleGVjdXRlZFxyXG4gKiBvbiB0aGlzIG1lc3Nlbmdlci5cclxuICogQHByb3BlcnR5IHtPYmplY3R9IEVWRU5UUyAtIEJ1aWx0LWluIGV2ZW50cyB0aGF0IHRoZSBNZXNzZW5nZXIgZW1pdHMuXHJcbiAqL1xyXG5jbGFzcyBNZXNzZW5nZXIge1xyXG4gIC8qKlxyXG4gICAqIEBjb25zdHJ1Y3RvclxyXG4gICAqXHJcbiAgICogQHBhcmFtIHthbnk9fSBpZCAtIElkIGZvciB0aGUgb2JqZWN0LiBJZiBub25lIGlzIHByb3ZpZGVkIGEgbmV3IGlkIHdpbGxcclxuICAgKiBiZSBjcmVhdGVkLiBJZCBzaG91bGQgYmUgYWJsZSB0byBiZSByZXByZXNlbnRlZCBhcyBhIHN0cmluZy5cclxuICAgKi9cclxuICBjb25zdHJ1Y3RvcihpZCkge1xyXG4gICAgdGhpcy5faWQgPSBpZCAhPT0gdW5kZWZpbmVkID8gaWQgOiBVdGlscy5jcmVhdGVJZCgpO1xyXG4gICAgdGhpcy5fZGlzcGF0Y2hlciA9IHdpbmRvdztcclxuICAgIHRoaXMuX2NhbGxiYWNrcyA9IHt9O1xyXG4gICAgdGhpcy5fZXZlbnRMaXN0ZW5lcnMgPSB7fTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIHN0cmluZyBpZCBvZiB0aGUgb2JqZWN0LlxyXG4gICAqXHJcbiAgICogQHJlYWRvbmx5XHJcbiAgICogQHR5cGUge3N0cmluZ31cclxuICAgKi9cclxuICBnZXQgaWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5faWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQcmVmaXggYSBtZXNzYWdlIHdpdGggdGhlIGluc3RhbmNlIGlkLlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxyXG4gICAqL1xyXG4gIF9jcmVhdGVMb2NhbE1lc3NhZ2UobWVzc2FnZSkge1xyXG4gICAgcmV0dXJuIGAke3RoaXMuaWR9LiR7bWVzc2FnZX1gO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIGEgZnVuY3Rpb24gdGhhdCB3aWxsIGNhbGwgYSBjYWxsYmFjayBmdW5jdGlvbiBhbmQgc3VwcGx5IHRoZSBldmVudCdzXHJcbiAgICogZGV0YWlsIHByb3BlcnR5IGFzIGFuIGFyZ3VtZW50LlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7RnVuY3Rpb259XHJcbiAgICovXHJcbiAgX2NyZWF0ZUxpc3RlbmVyKGNhbGxiYWNrKSB7XHJcbiAgICByZXR1cm4gZSA9PiB7XHJcbiAgICAgIGxldCB2YWx1ZTtcclxuXHJcbiAgICAgIGlmIChlLmRldGFpbCAhPT0gbnVsbCkge1xyXG4gICAgICAgIHZhbHVlID0gZS5kZXRhaWw7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNhbGxiYWNrKHZhbHVlKTtcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGUgYW4gZXZlbnQgb2JqZWN0IGFuZCBzZW5kIGl0IHRvIGxpc3RlbmVycy5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSAtIEV2ZW50IHR5cGUgbmFtZS5cclxuICAgKiBAcGFyYW0ge2FueT19IHZhbHVlIC0gVmFsdWUgdG8gc2VuZCB0byBsaXN0ZW5lcnMuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7Q3VzdG9tRXZlbnR9XHJcbiAgICovXHJcbiAgX2NyZWF0ZUV2ZW50KG1lc3NhZ2UsIHZhbHVlKSB7XHJcbiAgICByZXR1cm4gbmV3IEN1c3RvbUV2ZW50KG1lc3NhZ2UsIHtkZXRhaWw6IHZhbHVlfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZWdpc3RlciBhbiBldmVudC5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSAtIEV2ZW50IHR5cGUgbmFtZS5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBsaXN0ZW5lciAtIEEgbGlzdGVuZXIgZnVuY3Rpb24gZ2VuZXJhdGVkIHVzaW5nIF9jcmVhdGVMaXN0ZW5lci5cclxuICAgKi9cclxuICBfYWRkTGlzdGVuZXIobWVzc2FnZSwgbGlzdGVuZXIpIHtcclxuICAgIHRoaXMuX2Rpc3BhdGNoZXIuYWRkRXZlbnRMaXN0ZW5lcihcclxuICAgICAgdGhpcy5fY3JlYXRlTG9jYWxNZXNzYWdlKG1lc3NhZ2UpLFxyXG4gICAgICBsaXN0ZW5lclxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVucmVnaXN0ZXIgYW4gZXZlbnQuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgLSBFdmVudCB0eXBlIG5hbWUuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gbGlzdGVuZXIgLSBBIGxpc3RlbmVyIGZ1bmN0aW9uIGdlbmVyYXRlZCB1c2luZyBfY3JlYXRlTGlzdGVuZXIuXHJcbiAgICovXHJcbiAgX3JlbW92ZUxpc3RlbmVyKG1lc3NhZ2UsIGxpc3RlbmVyKSB7XHJcbiAgICB0aGlzLl9kaXNwYXRjaGVyLnJlbW92ZUV2ZW50TGlzdGVuZXIoXHJcbiAgICAgIHRoaXMuX2NyZWF0ZUxvY2FsTWVzc2FnZShtZXNzYWdlKSxcclxuICAgICAgbGlzdGVuZXJcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFeGVjdXRlIGEgZnVuY3Rpb24gd2hlbiBhIG1lc3NhZ2UgaXMgcmVjZWl2ZWQgZm9yIHRoaXMgb2JqZWN0LlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgLSBUaGUgbWVzc2FnZSB0byBsaXN0ZW4gZm9yLlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIC0gRnVuY3Rpb24gdG8gZXhlY3V0ZSBvbmNlIHRoZSBtZXNzYWdlIGlzIHJlY2VpdmVkLlxyXG4gICAqL1xyXG4gIGxpc3RlblRvKG1lc3NhZ2UsIGNhbGxiYWNrKSB7XHJcbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgQ2Fubm90IGFkZCBsaXN0ZW5lciBmb3IgJHttZXNzYWdlfSBvbiAke3RoaXMuaWR9LiBDYWxsYmFjayBtdXN0IGJlIGEgZnVuY3Rpb24uYFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLl9jYWxsYmFja3NbbWVzc2FnZV0gPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLl9jYWxsYmFja3NbbWVzc2FnZV0gPSBbXTtcclxuICAgICAgdGhpcy5fZXZlbnRMaXN0ZW5lcnNbbWVzc2FnZV0gPSBbXTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBsaXN0ZW5lciA9IHRoaXMuX2NyZWF0ZUxpc3RlbmVyKGNhbGxiYWNrKTtcclxuICAgIHRoaXMuX2NhbGxiYWNrc1ttZXNzYWdlXS5wdXNoKGNhbGxiYWNrKTtcclxuICAgIHRoaXMuX2V2ZW50TGlzdGVuZXJzW21lc3NhZ2VdLnB1c2gobGlzdGVuZXIpO1xyXG5cclxuICAgIHRoaXMuX2FkZExpc3RlbmVyKG1lc3NhZ2UsIGxpc3RlbmVyKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFByZXZlbnQgYSBmdW5jdGlvbiBmcm9tIGJlaW5nIGV4ZWN1dGVkIHdoZW4gYSBtZXNzYWdlIGlzIHJlY2VpdmVkIGZvciB0aGlzXHJcbiAgICogb2JqZWN0LlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgLSBUaGUgbWVzc2FnZSB0byBzdG9wIGxpc3RlbmluZyBmb3IuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IGNhbGxiYWNrIC0gT3B0aW9uYWwgY2FsbGJhY2sgdG8gcmVtb3ZlLiBJZiBub25lIGlzIGRlZmluZWQsXHJcbiAgICogcmVtb3ZlIGFsbCBjYWxsYmFja3MgZm9yIHRoZSBtZXNzYWdlLlxyXG4gICAqL1xyXG4gIHN0b3BMaXN0ZW5pbmcobWVzc2FnZSwgY2FsbGJhY2spIHtcclxuICAgIGlmICh0aGlzLl9jYWxsYmFja3NbbWVzc2FnZV0gPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9IGVsc2UgaWYgKGNhbGxiYWNrID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgLy8gSWYgbm8gY2FsbGJhY2sgd2FzIGRlZmluZWQsIGNhbGwgc3RvcExpc3RlbmluZyBvbiBhbGwgY2FsbGJhY2tzIGZvciB0aGUgbWVzc2FnZVxyXG4gICAgICBmb3IgKGxldCBpID0gdGhpcy5fY2FsbGJhY2tzW21lc3NhZ2VdLmxlbmd0aCAtIDE7IGkgPiAtMTsgaS0tKSB7XHJcbiAgICAgICAgdGhpcy5zdG9wTGlzdGVuaW5nKG1lc3NhZ2UsIHRoaXMuX2NhbGxiYWNrc1ttZXNzYWdlXVtpXSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBJZiBhIGNhbGxiYWNrIHdhcyBkZWZpbmVkLCBtYWtlIHN1cmUgaXQncyBhIGxpc3RlbmVyXHJcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuX2NhbGxiYWNrc1ttZXNzYWdlXS5pbmRleE9mKGNhbGxiYWNrKTtcclxuICAgIGlmIChpbmRleCA9PT0gLTEpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGxpc3RlbmVyID0gdGhpcy5fZXZlbnRMaXN0ZW5lcnNbbWVzc2FnZV1baW5kZXhdO1xyXG4gICAgdGhpcy5fcmVtb3ZlTGlzdGVuZXIobWVzc2FnZSwgbGlzdGVuZXIpO1xyXG5cclxuICAgIHRoaXMuX2NhbGxiYWNrc1ttZXNzYWdlXS5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgdGhpcy5fZXZlbnRMaXN0ZW5lcnNbbWVzc2FnZV0uc3BsaWNlKGluZGV4LCAxKTtcclxuXHJcbiAgICBpZiAodGhpcy5fY2FsbGJhY2tzW21lc3NhZ2VdLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICBkZWxldGUgdGhpcy5fY2FsbGJhY2tzW21lc3NhZ2VdO1xyXG4gICAgICBkZWxldGUgdGhpcy5fZXZlbnRMaXN0ZW5lcnNbbWVzc2FnZV07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEZS1yZWdpc3RlciBjYWxsYmFjayhzKSBmcm9tIGJlaW5nIGV4ZWN1dGVkIHdoZW4gbWVzc2FnZXMgbWF0Y2hpbmcgdGhlIGdpdmVuXHJcbiAgICogcmVndWxhciBleHByZXNzaW9uIGFyZSByZWNlaXZlZC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7UmVnZXhwfSByZWdleHAgLSByZWdleHAgLSBUaGUgcmVndWxhciBleHByZXNzaW9uIHRvIGZpbHRlciBtZXNzYWdlcyB3aXRoLlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBjYWxsYmFjayAtIE9wdGlvbmFsIGNhbGxiYWNrIHRvIHJlbW92ZS4gSWYgbm9uZSBpcyBkZWZpbmVkLFxyXG4gICAqIHJlbW92ZSBhbGwgY2FsbGJhY2tzIGZvciBtZXNzYWdlcyBtYXRjaGluZyB0aGUgcmVndWxhciBleHByZXNzaW9uLlxyXG4gICAqL1xyXG4gIHN0b3BMaXN0ZW5pbmdCeVJlZ2V4cChyZWdleHAsIGNhbGxiYWNrKSB7XHJcbiAgICBjb25zdCBtZXNzYWdlcyA9IE9iamVjdC5rZXlzKHRoaXMuX2NhbGxiYWNrcykuZmlsdGVyKG1lc3NhZ2UgPT4gcmVnZXhwLnRlc3QobWVzc2FnZSkpO1xyXG5cclxuICAgIG1lc3NhZ2VzLmZvckVhY2gobWVzc2FnZSA9PiB7XHJcbiAgICAgIHRoaXMuc3RvcExpc3RlbmluZyhtZXNzYWdlLCBjYWxsYmFjayk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFByZXZlbnQgYW55IGZ1bmN0aW9ucyBmcm9tIGJlaW5nIGV4ZWN1dGVkIHdoZW4gYW55IG1lc3NhZ2UgaXMgcmVjZWl2ZWQgZm9yXHJcbiAgICogdGhpcyBvYmplY3QuXHJcbiAgICovXHJcbiAgc3RvcExpc3RlbmluZ1RvQWxsKCkge1xyXG4gICAgY29uc3QgbWVzc2FnZXMgPSBPYmplY3Qua2V5cyh0aGlzLl9jYWxsYmFja3MpO1xyXG5cclxuICAgIGZvciAobGV0IGkgPSBtZXNzYWdlcy5sZW5ndGggLSAxOyBpID4gLTE7IGktLSkge1xyXG4gICAgICB0aGlzLnN0b3BMaXN0ZW5pbmcobWVzc2FnZXNbaV0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2VuZCBhIG1lc3NhZ2UsIGNhdXNpbmcgbGlzdGVuZXIgZnVuY3Rpb25zIGZvciB0aGUgbWVzc2FnZSBvbiB0aGlzIG9iamVjdFxyXG4gICAqIHRvIGJlIGV4ZWN1dGVkLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgLSBUaGUgbWVzc2FnZSB0byBlbWl0LlxyXG4gICAqIEBwYXJhbSB7YW55PX0gdmFsdWUgLSBPcHRpb25hbCBhcmd1bWVudCB0byBwYXNzIHRvIGxpc3RlbmVyIGNhbGxiYWNrcy5cclxuICAgKi9cclxuICBlbWl0KG1lc3NhZ2UsIHZhbHVlKSB7XHJcbiAgICBpZiAodGhpcy5fY2FsbGJhY2tzW21lc3NhZ2VdID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIG1lc3NhZ2UgPSB0aGlzLl9jcmVhdGVMb2NhbE1lc3NhZ2UobWVzc2FnZSk7XHJcbiAgICBjb25zdCBldmVudCA9IHRoaXMuX2NyZWF0ZUV2ZW50KG1lc3NhZ2UsIHZhbHVlKTtcclxuICAgIHRoaXMuX2Rpc3BhdGNoZXIuZGlzcGF0Y2hFdmVudChldmVudCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFeGVjdXRlIGEgZnVuY3Rpb24gd2hlbiBhIG1lc3NhZ2UgaXMgcmVjZWl2ZWQgZm9yIHRoZSBnbG9iYWwgTWVzc2VuZ2VyIGluc3RhbmNlLlxyXG4gICAqXHJcbiAgICogQHN0YXRpY1xyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgLSBUaGUgbWVzc2FnZSB0byBsaXN0ZW4gZm9yLlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIC0gRnVuY3Rpb24gdG8gZXhlY3V0ZSBvbmNlIHRoZSBtZXNzYWdlIGlzIHJlY2VpdmVkLlxyXG4gICAqL1xyXG4gIHN0YXRpYyBsaXN0ZW5UbyhtZXNzYWdlLCBjYWxsYmFjaywgbWVzc2VuZ2VyKSB7XHJcbiAgICB0aGlzLkdsb2JhbE1lc3Nlbmdlci5saXN0ZW5UbyhtZXNzYWdlLCBjYWxsYmFjaywgbWVzc2VuZ2VyKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFByZXZlbnQgYSBmdW5jdGlvbiBmcm9tIGJlaW5nIGV4ZWN1dGVkIHdoZW4gYSBtZXNzYWdlIGlzIHJlY2VpdmVkIGZvciB0aGVcclxuICAgKiBnbG9iYWwgTWVzc2VuZ2VyIGluc3RhbmNlLlxyXG4gICAqXHJcbiAgICogQHN0YXRpY1xyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgLSBUaGUgbWVzc2FnZSB0byBzdG9wIGxpc3RlbmluZyBmb3IuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IGNhbGxiYWNrIC0gT3B0aW9uYWwgY2FsbGJhY2sgdG8gcmVtb3ZlLiBJZiBub25lIGlzIGRlZmluZWQsXHJcbiAgICogcmVtb3ZlIGFsbCBjYWxsYmFja3MgZm9yIHRoZSBtZXNzYWdlLlxyXG4gICAqL1xyXG4gIHN0YXRpYyBzdG9wTGlzdGVuaW5nKG1lc3NhZ2UsIGNhbGxiYWNrKSB7XHJcbiAgICB0aGlzLkdsb2JhbE1lc3Nlbmdlci5zdG9wTGlzdGVuaW5nKG1lc3NhZ2UsIGNhbGxiYWNrKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERlLXJlZ2lzdGVyIGNhbGxiYWNrKHMpIGZyb20gYmVpbmcgZXhlY3V0ZWQgb24gdGhlIGdsb2JhbCBtZXNzZW5nZXJyIGluc3RhbmNlXHJcbiAgICogd2hlbiBtZXNzYWdlcyBtYXRjaGluZyB0aGUgZ2l2ZW4gcmVndWxhciBleHByZXNzaW9uIGFyZSByZWNlaXZlZC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7UmVnZXhwfSByZWdleHAgLSByZWdleHAgLSBUaGUgcmVndWxhciBleHByZXNzaW9uIHRvIGZpbHRlciBtZXNzYWdlcyB3aXRoLlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBjYWxsYmFjayAtIE9wdGlvbmFsIGNhbGxiYWNrIHRvIHJlbW92ZS4gSWYgbm9uZSBpcyBkZWZpbmVkLFxyXG4gICAqIHJlbW92ZSBhbGwgY2FsbGJhY2tzIGZvciBtZXNzYWdlcyBtYXRjaGluZyB0aGUgcmVndWxhciBleHByZXNzaW9uLlxyXG4gICAqL1xyXG4gIHN0YXRpYyBzdG9wTGlzdGVuaW5nQnlSZWdleHAocmVnZXhwLCBjYWxsYmFjaykge1xyXG4gICAgY29uc3QgbWVzc2FnZXMgPSBPYmplY3Qua2V5cyh0aGlzLkdsb2JhbE1lc3Nlbmdlci5fY2FsbGJhY2tzKS5maWx0ZXIoXHJcbiAgICAgIG1lc3NhZ2UgPT4gcmVnZXhwLnRlc3QobWVzc2FnZSlcclxuICAgICk7XHJcblxyXG4gICAgbWVzc2FnZXMuZm9yRWFjaChtZXNzYWdlID0+IHtcclxuICAgICAgdGhpcy5zdG9wTGlzdGVuaW5nKG1lc3NhZ2UsIGNhbGxiYWNrKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUHJldmVudCBhbnkgZnVuY3Rpb25zIGZyb20gYmVpbmcgZXhlY3V0ZWQgd2hlbiBhbnkgbWVzc2FnZSBpcyByZWNlaXZlZCBmb3JcclxuICAgKiB0aGUgZ2xvYmFsIE1lc3NlbmdlciBpbnN0YW5jZS5cclxuICAgKlxyXG4gICAqIEBzdGF0aWNcclxuICAgKi9cclxuICBzdGF0aWMgc3RvcExpc3RlbmluZ1RvQWxsKCkge1xyXG4gICAgdGhpcy5HbG9iYWxNZXNzZW5nZXIuc3RvcExpc3RlbmluZ1RvQWxsKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZW5kIGEgbWVzc2FnZSwgY2F1c2luZyBsaXN0ZW5lciBmdW5jdGlvbnMgZm9yIHRoZSBtZXNzYWdlIG9uIHRoZSBnbG9iYWwgTWVzc2VuZ2VyXHJcbiAgICogaW5zdGFuY2UgdG8gYmUgZXhlY3V0ZWQuXHJcbiAgICpcclxuICAgKiBAc3RhdGljXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSAtIFRoZSBtZXNzYWdlIHRvIGVtaXQuXHJcbiAgICogQHBhcmFtIHthbnk9fSB2YWx1ZSAtIE9wdGlvbmFsIGFyZ3VtZW50IHRvIHBhc3MgdG8gbGlzdGVuZXIgY2FsbGJhY2tzLlxyXG4gICAqL1xyXG4gIHN0YXRpYyBlbWl0KG1lc3NhZ2UsIHZhbHVlKSB7XHJcbiAgICB0aGlzLkdsb2JhbE1lc3Nlbmdlci5lbWl0KG1lc3NhZ2UsIHZhbHVlKTtcclxuICB9XHJcbn1cclxuXHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE1lc3Nlbmdlciwge1xyXG4gIEdsb2JhbE1lc3Nlbmdlcjoge1xyXG4gICAgdmFsdWU6IG5ldyBNZXNzZW5nZXIoKSxcclxuICAgIHdyaXRhYmxlOiBmYWxzZSxcclxuICB9LFxyXG4gIEVWRU5UUzoge1xyXG4gICAgdmFsdWU6IHt9LFxyXG4gICAgd3JpdGFibGU6IGZhbHNlLFxyXG4gIH0sXHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgTWVzc2VuZ2VyO1xyXG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cclxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVC0wXHJcbmltcG9ydCBNZXNzZW5nZXIgZnJvbSAnYXBwL01lc3Nlbmdlcic7XHJcblxyXG4vKipcclxuICogQmFzZSBjbGFzcyBmb3IgYWxsIGhvc3QgZmVhdHVyZXMuIEtlZXBzIGEgcmVmZXJlbmNlIHRvIHRoZSBob3N0IG9iamVjdCBtYW5hZ2luZ1xyXG4gKiB0aGUgZmVhdHVyZS5cclxuICpcclxuICogQGFic3RyYWN0XHJcbiAqXHJcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBFVkVOVFMgLSBCdWlsdC1pbiBtZXNzYWdlcyB0aGF0IHRoZSBmZWF0dXJlIGVtaXRzLiBXaGVuIHRoZVxyXG4gKiBmZWF0dXJlIGlzIGFkZGVkIHRvIGEge0BsaW5rIGNvcmUvSG9zdE9iamVjdH0sIGV2ZW50IG5hbWVzIHdpbGwgYmUgcHJlZml4ZWQgYnkgdGhlXHJcbiAqIG5hbWUgb2YgdGhlIGZlYXR1cmUgY2xhc3MgKyAnLicuXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbRVZFTlRTLnVwZGF0ZT1vblVwZGF0ZV0gLSBNZXNzYWdlIHRoYXQgaXMgZW1pdHRlZCBhZnRlclxyXG4gKiBlYWNoIGNhbGwgdG8gW3VwZGF0ZV17QGxpbmsgQWJzdHJhY3RIb3N0RmVhdHVyZSN1cGRhdGV9LlxyXG4gKiBAcHJvcGVydHkge09iamVjdH0gU0VSVklDRVMgLSBBbnkgQVdTIHNlcnZpY2VzIHRoYXQgYXJlIG5lY2Vzc2FyeSBmb3IgdGhlXHJcbiAqIGZlYXR1cmUgdG8gZnVuY3Rpb24uXHJcbiAqL1xyXG5jbGFzcyBBYnN0cmFjdEhvc3RGZWF0dXJlIHtcclxuICAvKipcclxuICAgKiBAY29uc3RydWN0b3JcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7Y29yZS9Ib3N0T2JqZWN0fSBob3N0IC0gVGhlIEhvc3RPYmplY3QgbWFuYWdpbmcgdGhlIGZlYXR1cmUuXHJcbiAgICovXHJcbiAgY29uc3RydWN0b3IoaG9zdCkge1xyXG4gICAgdGhpcy5faG9zdCA9IGhvc3Q7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBZGRzIGEgbmFtZXNwYWNlIHRvIHRoZSBob3N0IHdpdGggdGhlIG5hbWUgb2YgdGhlIGZlYXR1cmUgdG8gY29udGFpbiBwcm9wZXJ0aWVzXHJcbiAgICogYW5kIG1ldGhvZHMgZnJvbSB0aGUgZmVhdHVyZSB0aGF0IHVzZXJzIG9mIHRoZSBob3N0IG5lZWQgYWNjZXNzIHRvLlxyXG4gICAqL1xyXG4gIGluc3RhbGxBcGkoKSB7XHJcbiAgICBjb25zdCBldmVudHMgPSB7fTtcclxuICAgIGNvbnN0IGFwaSA9IHtFVkVOVFM6IGV2ZW50c307XHJcblxyXG4gICAgLy8gQWRkIHRoZSBjbGFzcyBuYW1lIHRvIGV2ZW50IG5hbWVzXHJcbiAgICBPYmplY3QuZW50cmllcyh0aGlzLmNvbnN0cnVjdG9yLkVWRU5UUykuZm9yRWFjaCgoW25hbWUsIHZhbHVlXSkgPT4ge1xyXG4gICAgICBldmVudHNbbmFtZV0gPSBgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9LiR7dmFsdWV9YDtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuX2hvc3RbdGhpcy5jb25zdHJ1Y3Rvci5uYW1lXSA9IGFwaTtcclxuXHJcbiAgICByZXR1cm4gYXBpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgaG9zdCB0aGF0IG1hbmFnZXMgdGhlIGZlYXR1cmUuXHJcbiAgICpcclxuICAgKiBAcmVhZG9ubHlcclxuICAgKi9cclxuICBnZXQgaG9zdCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9ob3N0O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgZW5naW5lIG93bmVyIG9iamVjdCBvZiB0aGUgaG9zdC5cclxuICAgKlxyXG4gICAqIEByZWFkb25seVxyXG4gICAqL1xyXG4gIGdldCBvd25lcigpIHtcclxuICAgIHJldHVybiB0aGlzLl9ob3N0Lm93bmVyO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTGlzdGVuIHRvIGEgZmVhdHVyZSBtZXNzYWdlIGZyb20gdGhlIGhvc3Qgb2JqZWN0LlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgLSBNZXNzYWdlIHRvIGxpc3RlbiBmb3IuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgLSBUaGUgY2FsbGJhY2sgdG8gZXhlY3V0ZSB3aGVuIHRoZSBtZXNzYWdlIGlzIHJlY2VpdmVkLlxyXG4gICAqL1xyXG4gIGxpc3RlblRvKG1lc3NhZ2UsIGNhbGxiYWNrKSB7XHJcbiAgICB0aGlzLl9ob3N0Lmxpc3RlblRvKG1lc3NhZ2UsIGNhbGxiYWNrKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIExpc3RlbiB0byBhIGZlYXR1cmUgbWVzc2FnZSBmcm9tIHRoZSBnbG9iYWwgbWVzc2VuZ2VyLiBGZWF0dXJlIG1lc3NhZ2VzIHdpbGxcclxuICAgKiBiZSBwcmVmaXhlZCB3aXRoIHRoZSBjbGFzcyBuYW1lIG9mIHRoZSBmZWF0dXJlLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgLSBNZXNzYWdlIHRvIGxpc3RlbiBmb3IuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgLSBUaGUgY2FsbGJhY2sgdG8gZXhlY3V0ZSB3aGVuIHRoZSBtZXNzYWdlIGlzIHJlY2VpdmVkLlxyXG4gICAqL1xyXG4gIHN0YXRpYyBsaXN0ZW5UbyhtZXNzYWdlLCBjYWxsYmFjaykge1xyXG4gICAgbWVzc2FnZSA9IGAke3RoaXMubmFtZX0uJHttZXNzYWdlfWA7XHJcbiAgICBNZXNzZW5nZXIubGlzdGVuVG8obWVzc2FnZSwgY2FsbGJhY2spO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU3RvcCBsaXN0ZW5pbmcgdG8gYSBtZXNzYWdlIGZyb20gdGhlIGhvc3Qgb2JqZWN0LlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgLSBNZXNzYWdlIHRvIHN0b3AgbGlzdGVuaW5nIGZvci5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gY2FsbGJhY2sgLSBPcHRpb25hbCBjYWxsYmFjayB0byByZW1vdmUuIElmIG5vbmUgaXMgZGVmaW5lZCxcclxuICAgKiByZW1vdmUgYWxsIGNhbGxiYWNrcyBmb3IgdGhlIG1lc3NhZ2UuXHJcbiAgICovXHJcbiAgc3RvcExpc3RlbmluZyhtZXNzYWdlLCBjYWxsYmFjaykge1xyXG4gICAgdGhpcy5faG9zdC5zdG9wTGlzdGVuaW5nKG1lc3NhZ2UsIGNhbGxiYWNrKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFN0b3AgbGlzdGVuaW5nIHRvIGEgbWVzc2FnZSBmcm9tIHRoZSBnbG9iYWwgbWVzc2VuZ2VyLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgLSBNZXNzYWdlIHRvIHN0b3AgbGlzdGVuaW5nIGZvci5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gY2FsbGJhY2sgLSBPcHRpb25hbCBjYWxsYmFjayB0byByZW1vdmUuIElmIG5vbmUgaXMgZGVmaW5lZCxcclxuICAgKiByZW1vdmUgYWxsIGNhbGxiYWNrcyBmb3IgdGhlIG1lc3NhZ2UuXHJcbiAgICovXHJcbiAgc3RhdGljIHN0b3BMaXN0ZW5pbmcobWVzc2FnZSwgY2FsbGJhY2spIHtcclxuICAgIG1lc3NhZ2UgPSBgJHt0aGlzLm5hbWV9LiR7bWVzc2FnZX1gO1xyXG4gICAgTWVzc2VuZ2VyLnN0b3BMaXN0ZW5pbmcobWVzc2FnZSwgY2FsbGJhY2spO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU3RvcCBsaXN0ZW5pbmcgdG8gYSBtZXNzYWdlIG1hdGNoaW5nIHRoZSBnaXZlbiByZWd1bGFyIGV4cHJlc3Npb24gZnJvbSB0aGVcclxuICAgKiBob3N0IG9iamVjdC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7UmVnZXhwfSByZWdleHAgLSBUaGUgcmVndWxhciBleHByZXNzaW9uIHRvIHN0b3AgbGlzdGVuaW5nIGZvci5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gY2FsbGJhY2sgLSBPcHRpb25hbCBjYWxsYmFjayB0byByZW1vdmUuIElmIG5vbmUgaXMgZGVmaW5lZCxcclxuICAgKiByZW1vdmUgYWxsIGNhbGxiYWNrcyBmb3IgdGhlIG1lc3NhZ2UuXHJcbiAgICovXHJcbiAgc3RvcExpc3RlbmluZ0J5UmVnZXhwKHJlZ2V4cCwgY2FsbGJhY2spIHtcclxuICAgIHRoaXMuX2hvc3Quc3RvcExpc3RlbmluZ0J5UmVnZXhwKHJlZ2V4cCwgY2FsbGJhY2spO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU3RvcCBsaXN0ZW5pbmcgdG8gYSBtZXNzYWdlIG1hdGNoaW5nIHRoZSBnaXZlbiByZWd1bGFyIGV4cHJlc3Npb24gZnJvbSB0aGVcclxuICAgKiBnbG9iYWwgbWVzc2VuZ2VyLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtSZWdleHB9IHJlZ2V4cCAtIFRoZSByZWd1bGFyIGV4cHJlc3Npb24gdG8gc3RvcCBsaXN0ZW5pbmcgZm9yLlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBjYWxsYmFjayAtIE9wdGlvbmFsIGNhbGxiYWNrIHRvIHJlbW92ZS4gSWYgbm9uZSBpcyBkZWZpbmVkLFxyXG4gICAqIHJlbW92ZSBhbGwgY2FsbGJhY2tzIGZvciB0aGUgbWVzc2FnZS5cclxuICAgKi9cclxuICBzdGF0aWMgc3RvcExpc3RlbmluZ0J5UmVnZXhwKHJlZ2V4cCwgY2FsbGJhY2spIHtcclxuICAgIHJlZ2V4cCA9IG5ldyBSZWdFeHAoYF4ke3RoaXMubmFtZX0uJHtyZWdleHAuc291cmNlLnJlcGxhY2UoL1xcXi8sICcnKX1gKTtcclxuICAgIE1lc3Nlbmdlci5zdG9wTGlzdGVuaW5nQnlSZWdleHAocmVnZXhwLCBjYWxsYmFjayk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTdG9wIGxpc3RlbmluZyB0byBhbGwgbWVzc2FnZXMuXHJcbiAgICovXHJcbiAgc3RvcExpc3RlbmluZ1RvQWxsKCkge1xyXG4gICAgdGhpcy5faG9zdC5zdG9wTGlzdGVuaW5nVG9BbGwoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFN0b3AgbGlzdGVuaW5nIHRvIGFsbCBmZWF0dXJlIG1lc3NhZ2VzLlxyXG4gICAqL1xyXG4gIHN0YXRpYyBzdG9wTGlzdGVuaW5nVG9BbGwoKSB7XHJcbiAgICBNZXNzZW5nZXIuc3RvcExpc3RlbmluZ0J5UmVnZXhwKG5ldyBSZWdFeHAoYF4ke3RoaXMubmFtZX0uYCkpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRW1pdCBmZWF0dXJlIG1lc3NhZ2VzIGZyb20gdGhlIGhvc3QuIEZlYXR1cmUgbWVzc2FnZXMgd2lsbCBiZSBwcmVmaXhlZCB3aXRoXHJcbiAgICogdGhlIGNsYXNzIG5hbWUgb2YgdGhlIGZlYXR1cmUuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSAtIFRoZSBtZXNzYWdlIHRvIGVtaXQuXHJcbiAgICogQHBhcmFtIHthbnk9fSB2YWx1ZSAtIE9wdGlvbmFsIHBhcmFtZXRlciB0byBwYXNzIHRvIGxpc3RlbmVyIGNhbGxiYWNrcy5cclxuICAgKi9cclxuICBlbWl0KG1lc3NhZ2UsIHZhbHVlKSB7XHJcbiAgICBtZXNzYWdlID0gYCR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfS4ke21lc3NhZ2V9YDtcclxuICAgIHRoaXMuX2hvc3QuZW1pdChtZXNzYWdlLCB2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFbWl0IGZlYXR1cmUgbWVzc2FnZXMgZnJvbSB0aGUgZ2xvYmFsIG1lc3Nlbmdlci4gRmVhdHVyZSBtZXNzYWdlcyB3aWxsIGJlIHByZWZpeGVkXHJcbiAgICogd2l0aCB0aGUgY2xhc3MgbmFtZSBvZiB0aGUgZmVhdHVyZS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIC0gVGhlIG1lc3NhZ2UgdG8gZW1pdC5cclxuICAgKiBAcGFyYW0ge2FueT19IHZhbHVlIC0gT3B0aW9uYWwgcGFyYW1ldGVyIHRvIHBhc3MgdG8gbGlzdGVuZXIgY2FsbGJhY2tzLlxyXG4gICAqL1xyXG4gIHN0YXRpYyBlbWl0KG1lc3NhZ2UsIHZhbHVlKSB7XHJcbiAgICBtZXNzYWdlID0gYCR7dGhpcy5uYW1lfS4ke21lc3NhZ2V9YDtcclxuICAgIE1lc3Nlbmdlci5lbWl0KG1lc3NhZ2UsIHZhbHVlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEV4ZWN1dGVzIGVhY2ggdGltZSB0aGUgaG9zdCBpcyB1cGRhdGVkLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IGRlbHRhVGltZSAtIEFtb3VudCBvZiB0aW1lIHNpbmNlIHRoZSBsYXN0IGhvc3QgdXBkYXRlIHdhc1xyXG4gICAqIGNhbGxlZC5cclxuICAgKi9cclxuICB1cGRhdGUoZGVsdGFUaW1lKSB7XHJcbiAgICB0aGlzLmVtaXQodGhpcy5jb25zdHJ1Y3Rvci5FVkVOVFMudXBkYXRlLCBkZWx0YVRpbWUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2xlYW4gdXAgb25jZSB0aGUgZmVhdHVyZSBpcyBubyBsb25nZXIgaW4gdXNlLiBSZW1vdmUgdGhlIGZlYXR1cmUgbmFtZXNwYWNlXHJcbiAgICogZnJvbSB0aGUgaG9zdCBhbmQgcmVtb3ZlIHJlZmVyZW5jZSB0byB0aGUgaG9zdC5cclxuICAgKi9cclxuICBkaXNjYXJkKCkge1xyXG4gICAgT2JqZWN0LmtleXModGhpcy5faG9zdFt0aGlzLmNvbnN0cnVjdG9yLm5hbWVdKS5mb3JFYWNoKG5hbWUgPT4ge1xyXG4gICAgICBkZWxldGUgdGhpcy5faG9zdFt0aGlzLmNvbnN0cnVjdG9yLm5hbWVdW25hbWVdO1xyXG4gICAgfSk7XHJcblxyXG4gICAgZGVsZXRlIHRoaXMuX2hvc3RbdGhpcy5jb25zdHJ1Y3Rvci5uYW1lXTtcclxuICAgIGRlbGV0ZSB0aGlzLl9ob3N0O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQXBwbGllcyBhIHNlcXVlbmNlIG9mIG1peGluIGNsYXNzIGZhY3RvcnkgZnVuY3Rpb25zIHRvIHRoaXMgY2xhc3MgYW5kXHJcbiAgICogcmV0dXJucyB0aGUgcmVzdWx0LiBFYWNoIGZ1bmN0aW9uIGlzIGV4cGVjdGVkIHRvIHJldHVybiBhIGNsYXNzIHRoYXRcclxuICAgKiBleHRlbmRzIHRoZSBjbGFzcyBpdCB3YXMgZ2l2ZW4uIFRoZSBmdW5jdGlvbnMgYXJlIGFwcGxpZWQgaW4gdGhlIG9yZGVyXHJcbiAgICogdGhhdCBwYXJhbWV0ZXJzIGFyZSBnaXZlbiwgbWVhbmluZyB0aGF0IHRoZSBmaXJzdCBmYWN0b3J5IHdpbGxcclxuICAgKiBleHRlbmQgdGhpcyBiYXNlIGNsYXNzLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHsuLi5GdW5jdGlvbn0gbWl4aW5DbGFzc0ZhY3RvcmllcyBDbGFzcyBmYWN0b3J5IGZ1bmN0aW9ucyB0aGF0IHdpbGxcclxuICAgKiBiZSBhcHBsaWVkLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0NsYXNzfSBBIGNsYXNzIHRoYXQgaXMgdGhlIHJlc3VsdCBvZiBhcHBseWluZyB0aGUgZmFjdG9yeSBmdW5jdGlvbnMuXHJcbiAgICogVGhlIHJlc3VsdGluZyBjbGFzcyB3aWxsIGFsd2F5cyBpbmhlcml0IGZyb20gQWJzdHJhY3RIb3N0RmVhdHVyZS5cclxuICAgKi9cclxuICBzdGF0aWMgbWl4KC4uLm1peGluQ2xhc3NGYWN0b3JpZXMpIHtcclxuICAgIGxldCBSZXN1bHRDbGFzcyA9IHRoaXM7XHJcblxyXG4gICAgbWl4aW5DbGFzc0ZhY3Rvcmllcy5mb3JFYWNoKG1peGluQ2xhc3NGYWN0b3J5ID0+IHtcclxuICAgICAgUmVzdWx0Q2xhc3MgPSBtaXhpbkNsYXNzRmFjdG9yeShSZXN1bHRDbGFzcyk7XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gUmVzdWx0Q2xhc3M7XHJcbiAgfVxyXG59XHJcblxyXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhBYnN0cmFjdEhvc3RGZWF0dXJlLCB7XHJcbiAgRVZFTlRTOiB7XHJcbiAgICB2YWx1ZToge1xyXG4gICAgICB1cGRhdGU6ICdvblVwZGF0ZScsXHJcbiAgICB9LFxyXG4gICAgd3JpdGFibGU6IGZhbHNlLFxyXG4gIH0sXHJcbiAgU0VSVklDRVM6IHtcclxuICAgIHZhbHVlOiB7fSxcclxuICAgIHdyaXRhYmxlOiBmYWxzZSxcclxuICB9LFxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IEFic3RyYWN0SG9zdEZlYXR1cmU7XHJcbiIsIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxyXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTBcclxuaW1wb3J0IE1lc3NlbmdlciBmcm9tICdhcHAvTWVzc2VuZ2VyJztcclxuaW1wb3J0IEFic3RyYWN0SG9zdEZlYXR1cmUgZnJvbSAnLi9BYnN0cmFjdEhvc3RGZWF0dXJlJztcclxuaW1wb3J0IFV0aWxzIGZyb20gJy4vVXRpbHMnO1xyXG5cclxuLyoqXHJcbiAqIE9iamVjdCB0aGF0IG1hbmFnZXMgYWNjZXNzIHRvIGFsbCBIb3N0IGZlYXR1cmVzLiBDb250YWlucyBhIHJlZmVyZW5jZSB0b1xyXG4gKiBlbmdpbmUtc3BlY2lmaWMgdmlzdWFscyBpZiBhcHBsaWNhYmxlLlxyXG4gKlxyXG4gKiBAZXh0ZW5kcyBjb3JlL01lc3NlbmdlclxyXG4gKiBAYWxpYXMgY29yZS9Ib3N0T2JqZWN0XHJcbiAqXHJcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBFVkVOVFMgLSBCdWlsdC1pbiBtZXNzYWdlcyB0aGF0IHRoZSBNZXNzZW5nZXIgZW1pdHMuXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbRVZFTlRTLnVwZGF0ZT0nb25VcGRhdGUnXSAtIE1lc3NhZ2UgdGhhdCBpcyBlbWl0dGVkIGFmdGVyXHJcbiAqIGVhY2ggY2FsbCB0byBbdXBkYXRlXXtAbGluayBjb3JlL0hvc3RPYmplY3QjdXBkYXRlfS5cclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtFVkVOVFMuYWRkRmVhdHVyZT0nb25BZGRGZWF0dXJlJ10gLSBNZXNzYWdlIHRoYXQgaXMgZW1pdHRlZFxyXG4gKiBhZnRlciBlYWNoIGNhbGwgdG8gW2FkZEZlYXR1cmVde0BsaW5rIGNvcmUvSG9zdE9iamVjdCNhZGRGZWF0dXJlfS5cclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtFVkVOVFMucmVtb3ZlRmVhdHVyZT0nb25SZW1vdmVGZWF0dXJlJ10gLSBNZXNzYWdlIHRoYXQgaXMgZW1pdHRlZFxyXG4gKiBhZnRlciBlYWNoIGNhbGwgdG8gW3JlbW92ZUZlYXR1cmVde0BsaW5rIGNvcmUvSG9zdE9iamVjdCNyZW1vdmVGZWF0dXJlfS5cclxuICovXHJcbmNsYXNzIEhvc3RPYmplY3QgZXh0ZW5kcyBNZXNzZW5nZXIge1xyXG4gIC8qKlxyXG4gICAqIEBjb25zdHJ1Y3RvclxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtPYmplY3Q9fSBvcHRpb25zIC0gT3B0aW9ucyBmb3IgdGhlIGhvc3QuXHJcbiAgICogQHBhcmFtIHtPYmplY3Q9fSBvcHRpb25zLm93bmVyIC0gT3B0aW9uYWwgZW5naW5lLXNwZWNpZmljIG93bmVyIG9mIHRoZSBob3N0LlxyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKHtvd25lciA9IHt9fSA9IHt9KSB7XHJcbiAgICAvLyBJZiBhbiBvd25lciBpcyBzcGVjaWZpZWQsIHVzZSBpdHMgaWQgZm9yIG1lc3NhZ2luZ1xyXG4gICAgc3VwZXIob3duZXIuaWQpO1xyXG5cclxuICAgIHRoaXMuX293bmVyID0gb3duZXI7XHJcbiAgICB0aGlzLl9mZWF0dXJlcyA9IHt9O1xyXG4gICAgdGhpcy5fd2FpdHMgPSBbXTtcclxuICAgIHRoaXMuX2xhc3RVcGRhdGUgPSB0aGlzLm5vdztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIGVuZ2luZSBvd25lciBvYmplY3Qgb2YgdGhlIGhvc3QuXHJcbiAgICpcclxuICAgKiBAcmVhZG9ubHlcclxuICAgKiBAdHlwZSB7T2JqZWN0fVxyXG4gICAqL1xyXG4gIGdldCBvd25lcigpIHtcclxuICAgIHJldHVybiB0aGlzLl9vd25lcjtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIGN1cnJlbnQgdGltZSBpbiBtaWxsaXNlY29uZHMuXHJcbiAgICpcclxuICAgKiBAcmVhZG9ubHlcclxuICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAqL1xyXG4gIGdldCBub3coKSB7XHJcbiAgICByZXR1cm4gRGF0ZS5ub3coKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIGFtb3VudCBvZiB0aW1lIGluIG1pbGxpc2Vjb25kcyBzaW5jZSB1cGRhdGUgd2FzIGxhc3QgY2FsbGVkLlxyXG4gICAqXHJcbiAgICogQHJlYWRvbmx5XHJcbiAgICogQHR5cGUge251bWJlcn1cclxuICAgKi9cclxuICBnZXQgZGVsdGFUaW1lKCkge1xyXG4gICAgcmV0dXJuIHRoaXMubm93IC0gdGhpcy5fbGFzdFVwZGF0ZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBpbiB0aGUgZW5naW5lJ3MgcmVuZGVyIGxvb3AuIEV4ZWN1dGVzIHVwZGF0ZVxyXG4gICAqIGxvb3BzIGZvciBhbGwgZmVhdHVyZXMuXHJcbiAgICovXHJcbiAgdXBkYXRlKCkge1xyXG4gICAgY29uc3QgY3VycmVudFRpbWUgPSB0aGlzLm5vdztcclxuICAgIGNvbnN0IGR0ID0gdGhpcy5kZWx0YVRpbWU7XHJcblxyXG4gICAgLy8gUHJvZ3Jlc3Mgc3RvcmVkIHdhaXRzXHJcbiAgICB0aGlzLl93YWl0cy5mb3JFYWNoKHdhaXQgPT4ge1xyXG4gICAgICB3YWl0LmV4ZWN1dGUoZHQpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gVXBkYXRlIGFsbCBmZWF0dXJlc1xyXG4gICAgT2JqZWN0LnZhbHVlcyh0aGlzLl9mZWF0dXJlcykuZm9yRWFjaChmZWF0dXJlID0+IHtcclxuICAgICAgZmVhdHVyZS51cGRhdGUoZHQpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gTm90aWZ5IGxpc3RlbmVycyBhbiB1cGRhdGUgb2NjdXJlZFxyXG4gICAgdGhpcy5lbWl0KHRoaXMuY29uc3RydWN0b3IuRVZFTlRTLnVwZGF0ZSwgZHQpO1xyXG5cclxuICAgIHRoaXMuX2xhc3RVcGRhdGUgPSBjdXJyZW50VGltZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiBhIGRlZmVycmVkIHByb21pc2UgdGhhdCB3aWxsIHdhaXQgYSBnaXZlbiBudW1iZXIgb2Ygc2Vjb25kcyBiZWZvcmVcclxuICAgKiByZXNvbHZpbmcuIFRoZSBob3N0IHdpbGwgY29udGludW91c2x5IHVwZGF0ZSB0aGUgd2FpdCBwcm9taXNlIGR1cmluZyB0aGVcclxuICAgKiB1cGRhdGUgbG9vcCB1bnRpbCBpdCByZXNvbHZlcy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbc2Vjb25kcz0wXSAtIE51bWJlciBvZiBzZWNvbmRzIHRvIHdhaXQgYmVmb3JlIHJlc29sdmluZy5cclxuICAgKiBAcGFyYW0ge09iamVjdD19IG9wdGlvbnMgLSBPcHRpb25hbCBvcHRpb25zIG9iamVjdFxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRpb25zLm9uRmluaXNoXSAtIENhbGxiYWNrIHRvIGV4ZWN1dGUgb25jZSB0aGUgd2FpdCB0aW1lXHJcbiAgICogaXMgbWV0LlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvcHRpb25zLm9uUHJvZ3Jlc3MgLSBDYWxsYmFjayB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgd2FpdFxyXG4gICAqIHRpbWUgcHJvZ3Jlc3NlcyB0b3dhcmRzIHRoZSB0YXJnZXQgbnVtYmVyIG9mIHNlY29uZHMuIFRoZSBhbW91bnQgb2YgcHJvZ3Jlc3NcclxuICAgKiBhcyBhIDAtMSBwZXJjZW50YWdlIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudC5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb3B0aW9ucy5vbkNhbmNlbCAtIENhbGxiYWNrIHRvIGV4ZWN1dGUgaWYgdGhlIHVzZXIgY2FuY2Vsc1xyXG4gICAqIHRoZSB3YWl0IGJlZm9yZSBjb21wbGV0aW9uLlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvcHRpb25zLm9uRXJyb3IgLSBDYWxsYmFjayB0byBleGVjdXRlIGlmIHRoZSB3YWl0IHN0b3BzXHJcbiAgICogYmVjYXVzZSBhbiBlcnJvciBpcyBlbmNvdW50ZXJlZC4gVGhlIGVycm9yIG1lc3NhZ2UgaXMgcGFzc2VkIGFzIGEgcGFyYW1ldGVyLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0RlZmVycmVkfVxyXG4gICAqL1xyXG4gIHdhaXQoc2Vjb25kcywge29uRmluaXNoLCBvblByb2dyZXNzLCBvbkNhbmNlbCwgb25FcnJvcn0gPSB7fSkge1xyXG4gICAgY29uc3Qgd2FpdCA9IFV0aWxzLndhaXQoc2Vjb25kcywge29uRmluaXNoLCBvblByb2dyZXNzLCBvbkNhbmNlbCwgb25FcnJvcn0pO1xyXG4gICAgdGhpcy5fd2FpdHMucHVzaCh3YWl0KTtcclxuXHJcbiAgICAvLyBPbmNlIHRoZSB3YWl0IHByb21pc2UgaXMgbm8gbG9uZ2VyIHBlbmRpbmcgcmVtb3ZlIGl0IGZyb20gdGhlIHdhaXRzIGFycmF5XHJcbiAgICBjb25zdCBvbkNvbXBsZXRlID0gKCkgPT4ge1xyXG4gICAgICB0aGlzLl93YWl0cy5zcGxpY2UodGhpcy5fd2FpdHMuaW5kZXhPZih3YWl0KSwgMSk7XHJcbiAgICB9O1xyXG4gICAgd2FpdC50aGVuKG9uQ29tcGxldGUsIG9uQ29tcGxldGUpO1xyXG5cclxuICAgIHJldHVybiB3YWl0O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSW5zdGFudGlhdGUgYSBuZXcgSG9zdCBmZWF0dXJlIGFuZCBzdG9yZSBpdC4gRmVhdHVyZXMgbXVzdCBpbmhlcml0IGZyb21cclxuICAgKiBBYnN0cmFjdEhvc3RGZWF0dXJlLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtDbGFzc30gRmVhdHVyZUNsYXNzIC0gQ2xhc3MgdGhhdCB3aWxsIGluc3RhbnRpYXRlIHRoZSBmZWF0dXJlLiBNdXN0XHJcbiAgICogZXh0ZW5kIHtAbGluayBBYnN0cmFjdEhvc3RGZWF0dXJlfS5cclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtmb3JjZT1mYWxzZV0gLSBXaGV0aGVyIG9yIG5vdCB0byBvdmVyd3JpdGUgYW4gZXhpc3RpbmdcclxuICAgKiBmZWF0dXJlIGlmIG9uZSBvZiB0aGlzIHR5cGUgYWxyZWFkeSBleGlzdHMgb24gdGhlIG9iamVjdC5cclxuICAgKiBAcGFyYW0gIHsuLi5hbnl9IGFyZ3MgLSBBZGRpdGlvbmFsIGFyZ3VtZW50cyB0byBwYXNzIHRvIHRoZSBGZWF0dXJlQ2xhc3NcclxuICAgKiBjb25zdHJ1Y3Rvci4gVGhlIEhvc3RPYmplY3Qgd2lsbCBhbHdheXMgYmUgcGFzc2VkIGFzIHRoZSBmaXJzdCBhcmd1bWVudC5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtib29sZWFufSAtIFdoZXRoZXIgb3Igbm90IGEgZmVhdHVyZSB3YXMgc3VjY2Vzc2Z1bGx5IGFkZGVkLlxyXG4gICAqL1xyXG4gIGFkZEZlYXR1cmUoRmVhdHVyZUNsYXNzLCBmb3JjZSA9IGZhbHNlLCAuLi5hcmdzKSB7XHJcbiAgICBjb25zdCBpbnB1dFR5cGUgPSB0eXBlb2YgRmVhdHVyZUNsYXNzO1xyXG5cclxuICAgIC8vIE1ha2Ugc3VyZSB0aGUgRmVhdHVyZUNsYXNzIGNhbiBiZSBleGVjdXRlZFxyXG4gICAgaWYgKGlucHV0VHlwZSAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgYENhbm5vdCBhZGQgZmVhdHVyZSB0byBob3N0ICR7dGhpcy5pZH0uIEZlYXR1cmVDbGFzcyBtdXN0IGJlIGEgY2xhc3MuYFxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgLy8gTWFrZSBzdXJlIHRoZSBmZWF0dXJlIGlzIGEgaG9zdCBmZWF0dXJlXHJcbiAgICBlbHNlIGlmICghKEZlYXR1cmVDbGFzcy5wcm90b3R5cGUgaW5zdGFuY2VvZiBBYnN0cmFjdEhvc3RGZWF0dXJlKSkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgYENhbm5vdCBhZGQgZmVhdHVyZSAke0ZlYXR1cmVDbGFzcy5uYW1lfSB0byBob3N0ICR7dGhpcy5pZH0uIEZlYXR1cmVDbGFzcyBtdXN0IGV4dGVuZCBBYnN0cmFjdEhvc3RGZWF0dXJlLmBcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBDaGVjayBpZiB0aGUgRmVhdHVyZUNsYXNzIGFscmVhZHkgZXhpc3RzIG9uIHRoaXMgb2JqZWN0XHJcbiAgICBpZiAodGhpcy5fZmVhdHVyZXNbRmVhdHVyZUNsYXNzLm5hbWVdICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgaWYgKGZvcmNlKSB7XHJcbiAgICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgICAgYEZlYXR1cmUgJHtGZWF0dXJlQ2xhc3MubmFtZX0gYWxyZWFkeSBleGlzdHMgb24gaG9zdCAke3RoaXMuaWR9LiBFeGlzdGluZyBmZWF0dXJlIHdpbGwgYmUgb3ZlcndyaXR0ZW4uYFxyXG4gICAgICAgICk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgICAgYEZlYXR1cmUgJHtGZWF0dXJlQ2xhc3MubmFtZX0gYWxyZWFkeSBleGlzdHMgb24gaG9zdCAke3RoaXMuaWR9LiBVc2UgJ2ZvcmNlJyBhcmd1bWVudCB0byBvdmVyd3JpdGUgdGhlIGZlYXR1cmUuYFxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBJbml0aWFsaXplIHRoZSBmZWF0dXJlXHJcbiAgICBjb25zdCBmZWF0dXJlID0gbmV3IEZlYXR1cmVDbGFzcyh0aGlzLCAuLi5hcmdzKTtcclxuICAgIGZlYXR1cmUuaW5zdGFsbEFwaSgpO1xyXG5cclxuICAgIHRoaXMuX2ZlYXR1cmVzW0ZlYXR1cmVDbGFzcy5uYW1lXSA9IGZlYXR1cmU7XHJcbiAgICB0aGlzLmVtaXQodGhpcy5jb25zdHJ1Y3Rvci5FVkVOVFMuYWRkRmVhdHVyZSwgRmVhdHVyZUNsYXNzLm5hbWUpO1xyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVtb3ZlIGEgZmVhdHVyZSBmcm9tIHRoZSBvYmplY3QuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdHlwZU5hbWUgLSBOYW1lIG9mIHRoZSB0eXBlIG9mIGZlYXR1cmUgdG8gcmVtb3ZlLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge2Jvb2xlYW59IC0gV2hldGhlciBvciBub3QgYSBmZWF0dXJlIHdhcyBzdWNjZXNzZnVsbHkgcmVtb3ZlZC5cclxuICAgKi9cclxuICByZW1vdmVGZWF0dXJlKHR5cGVOYW1lKSB7XHJcbiAgICBpZiAodGhpcy5fZmVhdHVyZXNbdHlwZU5hbWVdID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgIGBGZWF0dXJlIG9mIHR5cGUgJHt0eXBlTmFtZX0gZG9lcyBub3QgZXhpc3Qgb24gaG9zdCAke3RoaXMuaWR9LiBObyBmZWF0dXJlIHdpbGwgYmUgcmVtb3ZlZC5gXHJcbiAgICAgICk7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIFJlbW92ZSB0aGUgZmVhdHVyZVxyXG4gICAgICB0aGlzLmVtaXQodGhpcy5jb25zdHJ1Y3Rvci5FVkVOVFMucmVtb3ZlRmVhdHVyZSwgdHlwZU5hbWUpO1xyXG4gICAgICB0aGlzLl9mZWF0dXJlc1t0eXBlTmFtZV0uZGlzY2FyZCgpO1xyXG4gICAgICBkZWxldGUgdGhpcy5fZmVhdHVyZXNbdHlwZU5hbWVdO1xyXG5cclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJbmRpY2F0ZSB3aGV0aGVyIGEgc3BlY2lmaWVkIGZlYXR1cmUgaXMgaW5zdGFsbGVkIG9uIHRoZSBob3N0LlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHR5cGVOYW1lIC0gTmFtZSBvZiB0aGUgdHlwZSBvZiBmZWF0dXJlIHRvIGxvb2sgZm9yLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAgICovXHJcbiAgaGFzRmVhdHVyZSh0eXBlTmFtZSkge1xyXG4gICAgcmV0dXJuICEhdGhpcy5fZmVhdHVyZXNbdHlwZU5hbWVdO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTGlzdCB0aGUgbmFtZXMgb2YgdGhlIGZlYXR1cmVzIGluc3RhbGxlZCBvbiB0aGUgaG9zdC5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtBcnJheS48c3RyaW5nPn1cclxuICAgKi9cclxuICBsaXN0RmVhdHVyZXMoKSB7XHJcbiAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5fZmVhdHVyZXMpO1xyXG4gIH1cclxufVxyXG5cclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhvc3RPYmplY3QsICdFVkVOVFMnLCB7XHJcbiAgdmFsdWU6IHtcclxuICAgIC4uLk9iamVjdC5nZXRQcm90b3R5cGVPZihIb3N0T2JqZWN0KS5FVkVOVFMsXHJcbiAgICB1cGRhdGU6ICdvblVwZGF0ZScsXHJcbiAgICBhZGRGZWF0dXJlOiAnb25BZGRGZWF0dXJlJyxcclxuICAgIHJlbW92ZUZlYXR1cmU6ICdvblJlbW92ZUZlYXR1cmUnLFxyXG4gIH0sXHJcbiAgd3JpdGFibGU6IGZhbHNlLFxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IEhvc3RPYmplY3Q7XHJcbiIsIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxyXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTBcclxuLyoqXHJcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEVhc2luZ09iamVjdCBPYmplY3QgY29udGFpbmluZyBlYXNpbmcgZnVuY3Rpb25zXHJcbiAqIEBwcm9wZXJ0eSB7RnVuY3Rpb259IEluIC0gRWFzaW5nICdJbicgZnVuY3Rpb24uIFNob3VsZCB1c2UgdGhlIHNpZ25hdHVyZSAoazpudW1iZXIpOm51bWJlci5cclxuICogQHByb3BlcnR5IHtGdW5jdGlvbn0gT3V0IC0gRWFzaW5nICdPdXQnIGZ1bmN0aW9uLiBTaG91bGQgdXNlIHRoZSBzaWduYXR1cmUgKGs6bnVtYmVyKTpudW1iZXIuXHJcbiAqIEBwcm9wZXJ0eSB7RnVuY3Rpb259IEluT3V0IC0gRWFzaW5nICdJbk91dCcgZnVuY3Rpb24uIFNob3VsZCB1c2UgdGhlIHNpZ25hdHVyZSAoazpudW1iZXIpOm51bWJlci5cclxuICovXHJcblxyXG4vKipcclxuICogTGluZWFyIEVhc2luZ1xyXG4gKiBAdHlwZSB7RWFzaW5nT2JqZWN0fVxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IExpbmVhciA9IHtcclxuICBOb25lKGspIHtcclxuICAgIHJldHVybiBrO1xyXG4gIH0sXHJcbiAgSW4oaykge1xyXG4gICAgcmV0dXJuIGs7XHJcbiAgfSxcclxuICBPdXQoaykge1xyXG4gICAgcmV0dXJuIGs7XHJcbiAgfSxcclxuICBJbk91dChrKSB7XHJcbiAgICByZXR1cm4gaztcclxuICB9LFxyXG59O1xyXG5cclxuLyoqXHJcbiAqIFF1YWRyYXRpYyBFYXNpbmdcclxuICogQHR5cGUge0Vhc2luZ09iamVjdH1cclxuICovXHJcbmV4cG9ydCBjb25zdCBRdWFkcmF0aWMgPSB7XHJcbiAgSW4oaykge1xyXG4gICAgcmV0dXJuIGsgKiBrO1xyXG4gIH0sXHJcbiAgT3V0KGspIHtcclxuICAgIHJldHVybiBrICogKDIgLSBrKTtcclxuICB9LFxyXG4gIEluT3V0KGspIHtcclxuICAgIGsgKj0gMjtcclxuICAgIGlmIChrIDwgMSkge1xyXG4gICAgICByZXR1cm4gMC41ICogayAqIGs7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gLTAuNSAqICgtLWsgKiAoayAtIDIpIC0gMSk7XHJcbiAgfSxcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDdWJpYyBFYXNpbmdcclxuICogQHR5cGUge0Vhc2luZ09iamVjdH1cclxuICovXHJcbmV4cG9ydCBjb25zdCBDdWJpYyA9IHtcclxuICBJbihrKSB7XHJcbiAgICByZXR1cm4gayAqIGsgKiBrO1xyXG4gIH0sXHJcbiAgT3V0KGspIHtcclxuICAgIHJldHVybiAtLWsgKiBrICogayArIDE7XHJcbiAgfSxcclxuICBJbk91dChrKSB7XHJcbiAgICBrICo9IDI7XHJcbiAgICBpZiAoayA8IDEpIHtcclxuICAgICAgcmV0dXJuIDAuNSAqIGsgKiBrICogaztcclxuICAgIH1cclxuXHJcbiAgICBrIC09IDI7XHJcbiAgICByZXR1cm4gMC41ICogKGsgKiBrICogayArIDIpO1xyXG4gIH0sXHJcbn07XHJcblxyXG4vKipcclxuICogUXVhcnRpYyBFYXNpbmdcclxuICogQHR5cGUge0Vhc2luZ09iamVjdH1cclxuICovXHJcbmV4cG9ydCBjb25zdCBRdWFydGljID0ge1xyXG4gIEluKGspIHtcclxuICAgIHJldHVybiBrICogayAqIGsgKiBrO1xyXG4gIH0sXHJcbiAgT3V0KGspIHtcclxuICAgIHJldHVybiAxIC0gLS1rICogayAqIGsgKiBrO1xyXG4gIH0sXHJcbiAgSW5PdXQoaykge1xyXG4gICAgayAqPSAyO1xyXG4gICAgaWYgKGsgPCAxKSB7XHJcbiAgICAgIHJldHVybiAwLjUgKiBrICogayAqIGsgKiBrO1xyXG4gICAgfVxyXG5cclxuICAgIGsgLT0gMjtcclxuICAgIHJldHVybiAtMC41ICogKGsgKiBrICogayAqIGsgLSAyKTtcclxuICB9LFxyXG59O1xyXG5cclxuLyoqXHJcbiAqIFF1aW50aWMgRWFzaW5nXHJcbiAqIEB0eXBlIHtFYXNpbmdPYmplY3R9XHJcbiAqL1xyXG5leHBvcnQgY29uc3QgUXVpbnRpYyA9IHtcclxuICBJbihrKSB7XHJcbiAgICByZXR1cm4gayAqIGsgKiBrICogayAqIGs7XHJcbiAgfSxcclxuICBPdXQoaykge1xyXG4gICAgcmV0dXJuIC0tayAqIGsgKiBrICogayAqIGsgKyAxO1xyXG4gIH0sXHJcbiAgSW5PdXQoaykge1xyXG4gICAgayAqPSAyO1xyXG4gICAgaWYgKGsgPCAxKSB7XHJcbiAgICAgIHJldHVybiAwLjUgKiBrICogayAqIGsgKiBrICogaztcclxuICAgIH1cclxuXHJcbiAgICBrIC09IDI7XHJcbiAgICByZXR1cm4gMC41ICogKGsgKiBrICogayAqIGsgKiBrICsgMik7XHJcbiAgfSxcclxufTtcclxuXHJcbi8qKlxyXG4gKiBTaW51c29pZGFsIEVhc2luZ1xyXG4gKiBAdHlwZSB7RWFzaW5nT2JqZWN0fVxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IFNpbnVzb2lkYWwgPSB7XHJcbiAgSW4oaykge1xyXG4gICAgcmV0dXJuIDEgLSBNYXRoLmNvcygoayAqIE1hdGguUEkpIC8gMik7XHJcbiAgfSxcclxuICBPdXQoaykge1xyXG4gICAgcmV0dXJuIE1hdGguc2luKChrICogTWF0aC5QSSkgLyAyKTtcclxuICB9LFxyXG4gIEluT3V0KGspIHtcclxuICAgIHJldHVybiAwLjUgKiAoMSAtIE1hdGguY29zKE1hdGguUEkgKiBrKSk7XHJcbiAgfSxcclxufTtcclxuXHJcbi8qKlxyXG4gKiBFeHBvbmVudGlhbCBFYXNpbmdcclxuICogQHR5cGUge0Vhc2luZ09iamVjdH1cclxuICovXHJcbmV4cG9ydCBjb25zdCBFeHBvbmVudGlhbCA9IHtcclxuICBJbihrKSB7XHJcbiAgICByZXR1cm4gayA9PT0gMCA/IDAgOiAxMDI0ICoqIChrIC0gMSk7XHJcbiAgfSxcclxuICBPdXQoaykge1xyXG4gICAgcmV0dXJuIGsgPT09IDEgPyAxIDogMSAtIDIgKiogKC0xMCAqIGspO1xyXG4gIH0sXHJcbiAgSW5PdXQoaykge1xyXG4gICAgaWYgKGsgPT09IDApIHtcclxuICAgICAgcmV0dXJuIDA7XHJcbiAgICB9XHJcbiAgICBpZiAoayA9PT0gMSkge1xyXG4gICAgICByZXR1cm4gMTtcclxuICAgIH1cclxuXHJcbiAgICBrICo9IDI7XHJcbiAgICBpZiAoayA8IDEpIHtcclxuICAgICAgcmV0dXJuIDAuNSAqIDEwMjQgKiogKGsgLSAxKTtcclxuICAgIH1cclxuICAgIHJldHVybiAwLjUgKiAoLSgyICoqICgtMTAgKiAoayAtIDEpKSkgKyAyKTtcclxuICB9LFxyXG59O1xyXG5cclxuLyoqXHJcbiAqIENpcmN1bGFyIEVhc2luZ1xyXG4gKiBAdHlwZSB7RWFzaW5nT2JqZWN0fVxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IENpcmN1bGFyID0ge1xyXG4gIEluKGspIHtcclxuICAgIHJldHVybiAxIC0gTWF0aC5zcXJ0KDEgLSBrICogayk7XHJcbiAgfSxcclxuICBPdXQoaykge1xyXG4gICAgcmV0dXJuIE1hdGguc3FydCgxIC0gLS1rICogayk7XHJcbiAgfSxcclxuICBJbk91dChrKSB7XHJcbiAgICBrICo9IDI7XHJcbiAgICBpZiAoayA8IDEpIHtcclxuICAgICAgcmV0dXJuIC0wLjUgKiAoTWF0aC5zcXJ0KDEgLSBrICogaykgLSAxKTtcclxuICAgIH1cclxuXHJcbiAgICBrIC09IDI7XHJcbiAgICByZXR1cm4gMC41ICogKE1hdGguc3FydCgxIC0gayAqIGspICsgMSk7XHJcbiAgfSxcclxufTtcclxuXHJcbi8qKlxyXG4gKiBFbGFzdGljIEVhc2luZ1xyXG4gKiBAdHlwZSB7RWFzaW5nT2JqZWN0fVxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IEVsYXN0aWMgPSB7XHJcbiAgSW4oaykge1xyXG4gICAgbGV0IHM7XHJcbiAgICBsZXQgYSA9IDAuMTtcclxuICAgIGNvbnN0IHAgPSAwLjQ7XHJcblxyXG4gICAgaWYgKGsgPT09IDApIHtcclxuICAgICAgcmV0dXJuIDA7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGsgPT09IDEpIHtcclxuICAgICAgcmV0dXJuIDE7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFhIHx8IGEgPCAxKSB7XHJcbiAgICAgIGEgPSAxO1xyXG4gICAgICBzID0gcCAvIDQ7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBzID0gKHAgKiBNYXRoLmFzaW4oMSAvIGEpKSAvICgyICogTWF0aC5QSSk7XHJcbiAgICB9XHJcblxyXG4gICAgayAtPSAxO1xyXG4gICAgcmV0dXJuIC0oYSAqIDIgKiogKDEwICogaykgKiBNYXRoLnNpbigoKGsgLSBzKSAqICgyICogTWF0aC5QSSkpIC8gcCkpO1xyXG4gIH0sXHJcbiAgT3V0KGspIHtcclxuICAgIGxldCBzO1xyXG4gICAgbGV0IGEgPSAwLjE7XHJcbiAgICBjb25zdCBwID0gMC40O1xyXG5cclxuICAgIGlmIChrID09PSAwKSB7XHJcbiAgICAgIHJldHVybiAwO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChrID09PSAxKSB7XHJcbiAgICAgIHJldHVybiAxO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghYSB8fCBhIDwgMSkge1xyXG4gICAgICBhID0gMTtcclxuICAgICAgcyA9IHAgLyA0O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcyA9IChwICogTWF0aC5hc2luKDEgLyBhKSkgLyAoMiAqIE1hdGguUEkpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBhICogMiAqKiAoLTEwICogaykgKiBNYXRoLnNpbigoKGsgLSBzKSAqICgyICogTWF0aC5QSSkpIC8gcCkgKyAxO1xyXG4gIH0sXHJcbiAgSW5PdXQoaykge1xyXG4gICAgbGV0IHM7XHJcbiAgICBsZXQgYSA9IDAuMTtcclxuICAgIGNvbnN0IHAgPSAwLjQ7XHJcblxyXG4gICAgaWYgKGsgPT09IDApIHtcclxuICAgICAgcmV0dXJuIDA7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGsgPT09IDEpIHtcclxuICAgICAgcmV0dXJuIDE7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFhIHx8IGEgPCAxKSB7XHJcbiAgICAgIGEgPSAxO1xyXG4gICAgICBzID0gcCAvIDQ7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBzID0gKHAgKiBNYXRoLmFzaW4oMSAvIGEpKSAvICgyICogTWF0aC5QSSk7XHJcbiAgICB9XHJcblxyXG4gICAgayAqPSAyO1xyXG4gICAgaWYgKGsgPCAxKSB7XHJcbiAgICAgIGsgLT0gMTtcclxuICAgICAgcmV0dXJuIChcclxuICAgICAgICAtMC41ICogKGEgKiAyICoqICgxMCAqIGspICogTWF0aC5zaW4oKChrIC0gcykgKiAoMiAqIE1hdGguUEkpKSAvIHApKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGsgLT0gMTtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIGEgKiAyICoqICgtMTAgKiBrKSAqIE1hdGguc2luKCgoayAtIHMpICogKDIgKiBNYXRoLlBJKSkgLyBwKSAqIDAuNSArIDFcclxuICAgICk7XHJcbiAgfSxcclxufTtcclxuXHJcbi8qKlxyXG4gKiBCYWNrIEVhc2luZ1xyXG4gKiBAdHlwZSB7RWFzaW5nT2JqZWN0fVxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IEJhY2sgPSB7XHJcbiAgSW4oaykge1xyXG4gICAgY29uc3QgcyA9IDEuNzAxNTg7XHJcbiAgICByZXR1cm4gayAqIGsgKiAoKHMgKyAxKSAqIGsgLSBzKTtcclxuICB9LFxyXG4gIE91dChrKSB7XHJcbiAgICBjb25zdCBzID0gMS43MDE1ODtcclxuICAgIHJldHVybiAtLWsgKiBrICogKChzICsgMSkgKiBrICsgcykgKyAxO1xyXG4gIH0sXHJcbiAgSW5PdXQoaykge1xyXG4gICAgY29uc3QgcyA9IDEuNzAxNTggKiAxLjUyNTtcclxuICAgIGsgKj0gMjtcclxuICAgIGlmIChrIDwgMSkge1xyXG4gICAgICByZXR1cm4gMC41ICogKGsgKiBrICogKChzICsgMSkgKiBrIC0gcykpO1xyXG4gICAgfVxyXG5cclxuICAgIGsgLT0gMjtcclxuICAgIHJldHVybiAwLjUgKiAoayAqIGsgKiAoKHMgKyAxKSAqIGsgKyBzKSArIDIpO1xyXG4gIH0sXHJcbn07XHJcblxyXG4vKipcclxuICogQm91bmNlIEVhc2luZ1xyXG4gKiBAdHlwZSB7RWFzaW5nT2JqZWN0fVxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IEJvdW5jZSA9IHtcclxuICBJbihrKSB7XHJcbiAgICByZXR1cm4gMSAtIEJvdW5jZS5PdXQoMSAtIGspO1xyXG4gIH0sXHJcbiAgT3V0KGspIHtcclxuICAgIGlmIChrIDwgMSAvIDIuNzUpIHtcclxuICAgICAgcmV0dXJuIDcuNTYyNSAqIGsgKiBrO1xyXG4gICAgfSBlbHNlIGlmIChrIDwgMiAvIDIuNzUpIHtcclxuICAgICAgayAtPSAxLjU7XHJcbiAgICAgIHJldHVybiA3LjU2MjUgKiAoayAvIDIuNzUpICogayArIDAuNzU7XHJcbiAgICB9IGVsc2UgaWYgKGsgPCAyLjUgLyAyLjc1KSB7XHJcbiAgICAgIGsgLT0gMi4yNTtcclxuICAgICAgcmV0dXJuIDcuNTYyNSAqIChrIC8gMi43NSkgKiBrICsgMC45Mzc1O1xyXG4gICAgfVxyXG4gICAgayAtPSAyLjYyNTtcclxuICAgIHJldHVybiA3LjU2MjUgKiAoayAvIDIuNzUpICogayArIDAuOTg0Mzc1O1xyXG4gIH0sXHJcbiAgSW5PdXQoaykge1xyXG4gICAgaWYgKGsgPCAwLjUpIHtcclxuICAgICAgcmV0dXJuIEJvdW5jZS5JbihrICogMikgKiAwLjU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gQm91bmNlLk91dChrICogMiAtIDEpICogMC41ICsgMC41O1xyXG4gIH0sXHJcbn07XHJcbiIsIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxyXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTBcclxuXHJcbi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXHJcbi8qIGVzbGludC1kaXNhYmxlIG1heC1jbGFzc2VzLXBlci1maWxlICovXHJcbmltcG9ydCBIb3N0T2JqZWN0IGZyb20gJ2FwcC9Ib3N0T2JqZWN0JztcclxuXHJcbi8qKlxyXG4gKiBDbGFzcyBmYWN0b3J5IGludGVyZmFjZSBmb3IgZmVhdHVyZXMgdGhhdCBhcmUgZGVwZW5kZW50IG9uIG90aGVyIGZlYXR1cmVzIGJlaW5nXHJcbiAqIHByZXNlbnQgb24gdGhlIGhvc3QuIEV2ZW50IGRlcGVuZGVuY2llcyB3aWxsIGJlIGxpc3RlbmVkIGZvciB3aGVuIGEgZmVhdHVyZSBvZlxyXG4gKiBtYXRjaGluZyB0eXBlIGlzIGFkZGVkIHRvIHRoZSBob3N0IGFuZCB3aWxsIHN0b3AgYmVpbmcgbGlzdGVuZWQgZm9yIHdoZW4gb25lXHJcbiAqIGlzIHJlbW92ZWQuIElmIHRoZSBmZWF0dXJlIGlzIGFscmVhZHkgcHJlc2VudCB3aGVuIGNvbnN0cnVjdGVkLCBldmVudHMgd2lsbFxyXG4gKiBiZSBsaXN0ZW5lZCBmb3IgcmlnaHQgYXdheS5cclxuICpcclxuICogQGludGVyZmFjZVxyXG4gKlxyXG4gKiBAcHJvcGVydHkge09iamVjdH0gRVZFTlRfREVQRU5ERU5DSUVTIC0gRXZlbnRzIHRoYXQgdGhlIGZlYXR1cmUgc2hvdWxkIHN0YXJ0L3N0b3BcclxuICogbGlzdGVuaW5nIGZvciB3aGVuIGEgZmVhdHVyZSBvZiB0eXBlIEZlYXR1cmVOYW1lIGlzIGFkZGVkL3JlbW92ZWQgZnJvbSB0aGUgaG9zdC5cclxuICogRXZlbnQgZGVwZW5kZW5jaWVzIHNob3VsZCBmb2xsb3cgdGhlIHNpZ25hdHVyZTpcclxuICogIHsgRmVhdHVyZU5hbWU6IHsgZXZlbnROYW1lOiBjYWxsYmFja05hbWUsIC4uLiB9LCAuLi4gfVxyXG4gKi9cclxuY2xhc3MgRmVhdHVyZURlcGVuZGVudEludGVyZmFjZSB7XHJcbiAgLyoqXHJcbiAgICogU3RhcnQgbGlzdGVuaW5nIGZvciBldmVudCBkZXBlbmRlbmNpZXMgdGhhdCBtYXRjaCB0aGUgZ2l2ZW4gZmVhdHVyZSB0eXBlLlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlTmFtZSAtIHR5cGUgb2YgZmVhdHVyZSB0byBsaXN0ZW4gZm9yLlxyXG4gICAqL1xyXG4gIF9vbkZlYXR1cmVBZGRlZCh0eXBlTmFtZSkge31cclxuXHJcbiAgLyoqXHJcbiAgICogU3RvcCBsaXN0ZW5pbmcgZm9yIGV2ZW50IGRlcGVuZGVuY2llcyB0aGF0IG1hdGNoIHRoZSBnaXZlbiBmZWF0dXJlIHR5cGUuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHR5cGVOYW1lIC0gdHlwZSBvZiBmZWF0dXJlIHRvIHN0b3AgbGlzdGVuaW5nIGZvci5cclxuICAgKi9cclxuICBfb25GZWF0dXJlUmVtb3ZlZCh0eXBlTmFtZSkge31cclxuXHJcbiAgLyoqXHJcbiAgICogQGF1Z21lbnRzIHtAbGluayBBYnN0cmFjdEhvc3RGZWF0dXJlI2Rpc2NhcmR9XHJcbiAgICovXHJcbiAgZGlzY2FyZCgpIHt9XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZXMgYSBjbGFzcyB0aGF0IGltcGxlbWVudHMge0BsaW5rIEZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2V9IGFuZCBleHRlbmRzXHJcbiAgICogYSBzcGVjaWZpZWQgYmFzZSBjbGFzcy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7Q2xhc3N9IEJhc2VDbGFzcyAtIFRoZSBjbGFzcyB0byBleHRlbmQuXHJcbiAgICpcclxuICAgKiBAcmV0dXJuIHtDbGFzc30gQSBjbGFzcyB0aGF0IGV4dGVuZHMgYEJhc2VDbGFzc2AgYW5kIGltcGxlbWVudHMge0BsaW5rIEZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2V9LlxyXG4gICAqL1xyXG4gIHN0YXRpYyBNaXhpbihCYXNlQ2xhc3MpIHtcclxuICAgIGNvbnN0IEZlYXR1cmVEZXBlbmRlbnRNaXhpbiA9IGNsYXNzIGV4dGVuZHMgQmFzZUNsYXNzIHtcclxuICAgICAgY29uc3RydWN0b3IoaG9zdCkge1xyXG4gICAgICAgIHN1cGVyKGhvc3QpO1xyXG4gICAgICAgIHRoaXMuX2hvc3QgPSBob3N0O1xyXG5cclxuICAgICAgICAvLyBObyBuZWVkIHRvIGxpc3RlbiBmb3IgZXZlbnRzIGlmIHRoZSBtaXhpbiBpcyBpbiB0aGUgcHJvdG90eXBlIGNoYWluIG11bHRpcGxlIHRpbWVzXHJcbiAgICAgICAgaWYgKCF0aGlzLl9pbml0aWFsaXplZCkge1xyXG4gICAgICAgICAgdGhpcy5faW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICAgIC8vIFN0YXJ0IGxpc3RlbmluZyBmb3IgZmVhdHVyZSBldmVudHNcclxuICAgICAgICAgIHRoaXMuX29uRmVhdHVyZUFkZGVkID0gdGhpcy5fb25GZWF0dXJlQWRkZWQuYmluZCh0aGlzKTtcclxuICAgICAgICAgIHRoaXMuX29uRmVhdHVyZVJlbW92ZWQgPSB0aGlzLl9vbkZlYXR1cmVSZW1vdmVkLmJpbmQodGhpcyk7XHJcblxyXG4gICAgICAgICAgdGhpcy5faG9zdC5saXN0ZW5UbyhcclxuICAgICAgICAgICAgSG9zdE9iamVjdC5FVkVOVFMuYWRkRmVhdHVyZSxcclxuICAgICAgICAgICAgdGhpcy5fb25GZWF0dXJlQWRkZWRcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICB0aGlzLl9ob3N0Lmxpc3RlblRvKFxyXG4gICAgICAgICAgICBIb3N0T2JqZWN0LkVWRU5UUy5yZW1vdmVGZWF0dXJlLFxyXG4gICAgICAgICAgICB0aGlzLl9vbkZlYXR1cmVSZW1vdmVkXHJcbiAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgIC8vIFJlZ2lzdGVyIGZlYXR1cmVzIHRoYXQgYWxyZWFkeSBleGlzdFxyXG4gICAgICAgICAgT2JqZWN0LmtleXModGhpcy5jb25zdHJ1Y3Rvci5FVkVOVF9ERVBFTkRFTkNJRVMpLmZvckVhY2godHlwZU5hbWUgPT4ge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5faG9zdFt0eXBlTmFtZV0gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgIHRoaXMuX29uRmVhdHVyZUFkZGVkKHR5cGVOYW1lKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBfb25GZWF0dXJlQWRkZWQodHlwZU5hbWUpIHtcclxuICAgICAgICBpZiAodGhpcy5jb25zdHJ1Y3Rvci5FVkVOVF9ERVBFTkRFTkNJRVNbdHlwZU5hbWVdICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgIGNvbnN0IGV2ZW50cyA9IHRoaXMuY29uc3RydWN0b3IuRVZFTlRfREVQRU5ERU5DSUVTW3R5cGVOYW1lXTtcclxuXHJcbiAgICAgICAgICBPYmplY3QuZW50cmllcyhldmVudHMpLmZvckVhY2goKFtldmVudE5hbWUsIGNhbGxiYWNrXSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzW2NhbGxiYWNrXSA9IHRoaXNbY2FsbGJhY2tdLmJpbmQodGhpcyk7XHJcbiAgICAgICAgICAgIHRoaXMuX2hvc3QubGlzdGVuVG8oXHJcbiAgICAgICAgICAgICAgdGhpcy5faG9zdFt0eXBlTmFtZV0uRVZFTlRTW2V2ZW50TmFtZV0sXHJcbiAgICAgICAgICAgICAgdGhpc1tjYWxsYmFja11cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgX29uRmVhdHVyZVJlbW92ZWQodHlwZU5hbWUpIHtcclxuICAgICAgICBpZiAodGhpcy5jb25zdHJ1Y3Rvci5FVkVOVF9ERVBFTkRFTkNJRVNbdHlwZU5hbWVdICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgIGNvbnN0IGV2ZW50cyA9IHRoaXMuY29uc3RydWN0b3IuRVZFTlRfREVQRU5ERU5DSUVTW3R5cGVOYW1lXTtcclxuXHJcbiAgICAgICAgICBPYmplY3QuZW50cmllcyhldmVudHMpLmZvckVhY2goKFtldmVudE5hbWUsIGNhbGxiYWNrXSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLl9ob3N0LnN0b3BMaXN0ZW5pbmcoXHJcbiAgICAgICAgICAgICAgdGhpcy5faG9zdFt0eXBlTmFtZV0uRVZFTlRTW2V2ZW50TmFtZV0sXHJcbiAgICAgICAgICAgICAgdGhpc1tjYWxsYmFja11cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgZGlzY2FyZCgpIHtcclxuICAgICAgICAvLyBTdG9wIGxpc3RlbmluZyBmb3IgZmVhdHVyZSBldmVudHNcclxuICAgICAgICB0aGlzLl9ob3N0LnN0b3BMaXN0ZW5pbmcoXHJcbiAgICAgICAgICBIb3N0T2JqZWN0LkVWRU5UUy5hZGRGZWF0dXJlLFxyXG4gICAgICAgICAgdGhpcy5fb25GZWF0dXJlQWRkZWRcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuX2hvc3Quc3RvcExpc3RlbmluZyhcclxuICAgICAgICAgIEhvc3RPYmplY3QuRVZFTlRTLnJlbW92ZUZlYXR1cmUsXHJcbiAgICAgICAgICB0aGlzLl9vbkZlYXR1cmVSZW1vdmVkXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgLy8gU3RvcCBsaXN0ZW5pbmcgdG8gZmVhdHVyZS1zcGVjaWZpYyBldmVudHNcclxuICAgICAgICBPYmplY3Qua2V5cyh0aGlzLmNvbnN0cnVjdG9yLkVWRU5UX0RFUEVOREVOQ0lFUykuZm9yRWFjaCh0eXBlTmFtZSA9PiB7XHJcbiAgICAgICAgICBpZiAodGhpcy5faG9zdFt0eXBlTmFtZV0gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB0aGlzLl9vbkZlYXR1cmVSZW1vdmVkKHR5cGVOYW1lKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgc3VwZXIuZGlzY2FyZCgpO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IEVWRU5UX0RFUEVOREVOQ0lFUyA9IEJhc2VDbGFzcy5FVkVOVF9ERVBFTkRFTkNJRVMgfHwge307XHJcblxyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRmVhdHVyZURlcGVuZGVudE1peGluLCB7XHJcbiAgICAgIEVWRU5UX0RFUEVOREVOQ0lFUzoge1xyXG4gICAgICAgIHZhbHVlOiB7XHJcbiAgICAgICAgICAuLi5FVkVOVF9ERVBFTkRFTkNJRVMsXHJcbiAgICAgICAgfSxcclxuICAgICAgICB3cml0YWJsZTogZmFsc2UsXHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gRmVhdHVyZURlcGVuZGVudE1peGluO1xyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIEV2ZW50IGRlcGVuZGVuY2llcyBzaG91bGQgZm9sbG93IHRoZSBzaWduYXR1cmU6XHJcbiAqIHtcclxuICogIEZlYXR1cmVOYW1lOiB7XHJcbiAqICAgIC8vIEV2ZW50cyB0aGF0IHRoZSBmZWF0dXJlIHNob3VsZCBzdGFydC9zdG9wIGxpc3RlbmluZyBmb3Igd2hlbiBhIGZlYXR1cmVcclxuICogICAgLy8gb2YgdHlwZSBGZWF0dXJlTmFtZSBpcyBhZGRlZC9yZW1vdmVkIGZyb20gdGhlIGhvc3RcclxuICogICAge1xyXG4gKiAgICAgIGV2ZW50TmFtZTogY2FsbGJhY2tOYW1lLFxyXG4gKiAgICAgIC4uLlxyXG4gKiAgICB9LFxyXG4gKiAgfVxyXG4gKiB9XHJcbiAqL1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhGZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlLCB7XHJcbiAgRVZFTlRfREVQRU5ERU5DSUVTOiB7XHJcbiAgICB2YWx1ZToge30sXHJcbiAgICB3cml0YWJsZTogZmFsc2UsXHJcbiAgfSxcclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBGZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlO1xyXG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cclxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVC0wXHJcblxyXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xyXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtY2xhc3Nlcy1wZXItZmlsZSAqL1xyXG5pbXBvcnQgRmVhdHVyZURlcGVuZGVudEludGVyZmFjZSBmcm9tICdjb3JlL0ZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2UnO1xyXG5cclxuLyoqXHJcbiAqIENsYXNzIGZhY3RvcnkgaW50ZXJmYWNlIGZvciBmZWF0dXJlcyB0aGF0IGFyZSBkZXBlbmRlbnQgb24gdGhlIEFuaW1hdGlvbkZlYXR1cmVcclxuICogYmVpbmcgcHJlc2VudCBvbiB0aGUgaG9zdC4gTGF5ZXIgYW5kIGFuaW1hdGlvbiBldmVudHMgd2lsbCBhdXRvbWF0aWNhbGx5IGJlXHJcbiAqIGxpc3RlbmVkIGZvciBvbmNlIGEgQW5pbWF0aW9uRmVhdHVyZSBpcyBhZGRlZCB0byB0aGUgaG9zdCBhbmQgc3RvcHBlZCBvbmNlIGl0XHJcbiAqIGlzIHJlbW92ZWQuXHJcbiAqXHJcbiAqIEBpbnRlcmZhY2VcclxuICogQGV4dGVuZHMgRmVhdHVyZURlcGVuZGVudEludGVyZmFjZVxyXG4gKlxyXG4gKiBAcHJvcGVydHkge09iamVjdH0gRVZFTlRfREVQRU5ERU5DSUVTIC0gRXZlbnRzIHRoYXQgdGhlIGZlYXR1cmUgc2hvdWxkIHN0YXJ0L3N0b3BcclxuICogbGlzdGVuaW5nIGZvciB3aGVuIGEgZmVhdHVyZSBvZiB0eXBlIEZlYXR1cmVOYW1lIGlzIGFkZGVkL3JlbW92ZWQgZnJvbSB0aGUgaG9zdC5cclxuICogQHByb3BlcnR5IHtPYmplY3R9IEVWRU5UX0RFUEVOREVOQ0lFUy5BbmltYXRpb25GZWF0dXJlIC0gRXZlbnRzIHRoYXQgYXJlXHJcbiAqIHNwZWNpZmljIHRvIHRoZSBBbmltYXRpb25GZWF0dXJlLlxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW0VWRU5UX0RFUEVOREVOQ0lFUy5BbmltYXRpb25GZWF0dXJlLmFkZExheWVyPSdfb25MYXllckFkZGVkJ10gLVxyXG4gKiBUaGUgbmFtZSBvZiB0aGUgbWV0aG9kIHRoYXQgd2lsbCBiZSBleGVjdXRlZCB3aGVuIEFuaW1hdGlvbkZlYXR1cmUgYWRkTGF5ZXJcclxuICogZXZlbnRzIGFyZSBlbWl0dGVkLlxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW0VWRU5UX0RFUEVOREVOQ0lFUy5BbmltYXRpb25GZWF0dXJlLnJlbW92ZUxheWVyPSdfb25MYXllclJlbW92ZWQnXSAtXHJcbiAqIFRoZSBuYW1lIG9mIHRoZSBtZXRob2QgdGhhdCB3aWxsIGJlIGV4ZWN1dGVkIHdoZW4gQW5pbWF0aW9uRmVhdHVyZSByZW1vdmVMYXllclxyXG4gKiBldmVudHMgYXJlIGVtaXR0ZWQuXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbRVZFTlRfREVQRU5ERU5DSUVTLkFuaW1hdGlvbkZlYXR1cmUucmVuYW1lTGF5ZXI9J19vbkxheWVyUmVuYW1lZCddIC1cclxuICogVGhlIG5hbWUgb2YgdGhlIG1ldGhvZCB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQgd2hlbiBBbmltYXRpb25GZWF0dXJlIHJlbmFtZUxheWVyXHJcbiAqIGV2ZW50cyBhcmUgZW1pdHRlZC5cclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtFVkVOVF9ERVBFTkRFTkNJRVMuQW5pbWF0aW9uRmVhdHVyZS5hZGRBbmltYXRpb249J19vbkFuaW1hdGlvbkFkZGVkJ10gLVxyXG4gKiBUaGUgbmFtZSBvZiB0aGUgbWV0aG9kIHRoYXQgd2lsbCBiZSBleGVjdXRlZCB3aGVuIEFuaW1hdGlvbkZlYXR1cmUgYWRkQW5pbWF0aW9uXHJcbiAqIGV2ZW50cyBhcmUgZW1pdHRlZC5cclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtFVkVOVF9ERVBFTkRFTkNJRVMuQW5pbWF0aW9uRmVhdHVyZS5yZW1vdmVBbmltYXRpb249J19vbkFuaW1hdGlvblJlbW92ZWQnXSAtXHJcbiAqIFRoZSBuYW1lIG9mIHRoZSBtZXRob2QgdGhhdCB3aWxsIGJlIGV4ZWN1dGVkIHdoZW4gQW5pbWF0aW9uRmVhdHVyZSByZW1vdmVBbmltYXRpb25cclxuICogZXZlbnRzIGFyZSBlbWl0dGVkLlxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW0VWRU5UX0RFUEVOREVOQ0lFUy5BbmltYXRpb25GZWF0dXJlLnJlbmFtZUFuaW1hdGlvbj0nX29uQW5pbWF0aW9uUmVuYW1lZCddIC1cclxuICogVGhlIG5hbWUgb2YgdGhlIG1ldGhvZCB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQgd2hlbiBBbmltYXRpb25GZWF0dXJlIHJlbmFtZUFuaW1hdGlvblxyXG4gKiBldmVudHMgYXJlIGVtaXR0ZWQuXHJcbiAqL1xyXG5jbGFzcyBBbmltYXRpb25GZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlIGV4dGVuZHMgRmVhdHVyZURlcGVuZGVudEludGVyZmFjZSB7XHJcbiAgLyoqXHJcbiAgICogRXhlY3V0ZWQgd2hlbiBhbmltYXRpb24gbGF5ZXIgYWRkZWQgZXZlbnRzIGFyZSBjYXVnaHQuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBOYW1lIG9mIHRoZSBsYXllciB0aGF0IHdhcyBhZGRlZC5cclxuICAgKi9cclxuICBfb25MYXllckFkZGVkKHtuYW1lfSkge31cclxuXHJcbiAgLyoqXHJcbiAgICogRXhlY3V0ZWQgd2hlbiBhbmltYXRpb24gbGF5ZXIgcmVtb3ZlZCBldmVudHMgYXJlIGNhdWdodC5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRoYXQgd2FzIHJlbW92ZWQuXHJcbiAgICovXHJcbiAgX29uTGF5ZXJSZW1vdmVkKHtuYW1lfSkge31cclxuXHJcbiAgLyoqXHJcbiAgICogRXhlY3V0ZWQgd2hlbiBhbmltYXRpb24gbGF5ZXIgcmVuYW1lZCBldmVudHMgYXJlIGNhdWdodC5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gb2xkTmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRoYXQgd2FzIHJlbmFtZWQuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5ld05hbWUgLSBOZXcgbmFtZSBvZiB0aGUgbGF5ZXIuXHJcbiAgICovXHJcbiAgX29uTGF5ZXJSZW5hbWVkKHtvbGROYW1lLCBuZXdOYW1lfSkge31cclxuXHJcbiAgLyoqXHJcbiAgICogRXhlY3V0ZWQgd2hlbiBhbmltYXRpb24gYWRkZWQgZXZlbnRzIGFyZSBjYXVnaHQuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVyTmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRoYXQgYW4gYW5pbWF0aW9uIHdhcyBhZGRlZCB0by5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gYW5pbWF0aW9uTmFtZSAtIE5hbWUgb2YgdGhlIGFuaW1hdGlvbiB0aGF0IHdhcyBhZGRlZC5cclxuICAgKi9cclxuICBfb25BbmltYXRpb25BZGRlZCh7bGF5ZXJOYW1lLCBhbmltYXRpb25OYW1lfSkge31cclxuXHJcbiAgLyoqXHJcbiAgICogRXhlY3V0ZWQgd2hlbiBhbmltYXRpb24gcmVtb3ZlZCBldmVudHMgYXJlIGNhdWdodC5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGF5ZXJOYW1lIC0gTmFtZSBvZiB0aGUgbGF5ZXIgdGhhdCBhbiBhbmltYXRpb24gd2FzIHJlbW92ZWQgZnJvbS5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gYW5pbWF0aW9uTmFtZSAtIE5hbWUgb2YgdGhlIGFuaW1hdGlvbiB0aGF0IHdhcyByZW1vdmVkLlxyXG4gICAqL1xyXG4gIF9vbkFuaW1hdGlvblJlbW92ZWQoe2xheWVyTmFtZSwgYW5pbWF0aW9uTmFtZX0pIHt9XHJcblxyXG4gIC8qKlxyXG4gICAqIEV4ZWN1dGVkIHdoZW4gYW5pbWF0aW9uIHJlbmFtZWQgZXZlbnRzIGFyZSBjYXVnaHQuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVyTmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRoYXQgYW4gYW5pbWF0aW9uIGJlbG9uZ3MgdG8uXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9sZE5hbWUgLSBOYW1lIG9mIHRoZSBhbmltYXRpb24gdGhhdCB3YXMgcmVuYW1lZC5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmV3TmFtZSAtIE5ldyBuYW1lIG9mIHRoZSBhbmltYXRpb24uXHJcbiAgICovXHJcbiAgX29uQW5pbWF0aW9uUmVuYW1lZCh7bGF5ZXJOYW1lLCBvbGROYW1lLCBuZXdOYW1lfSkge31cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlcyBhIGNsYXNzIHRoYXQgaW1wbGVtZW50cyB7QGxpbmsgQW5pbWF0aW9uRmVhdHVyZURlcGVuZGVudEludGVyZmFjZX1cclxuICAgKiBhbmQgZXh0ZW5kcyBhIHNwZWNpZmllZCBiYXNlIGNsYXNzLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtDbGFzc30gQmFzZUNsYXNzIC0gVGhlIGNsYXNzIHRvIGV4dGVuZC5cclxuICAgKlxyXG4gICAqIEByZXR1cm4ge0NsYXNzfSBBIGNsYXNzIHRoYXQgZXh0ZW5kcyBgQmFzZUNsYXNzYCBhbmQgaW1wbGVtZW50cyB7QGxpbmsgQW5pbWF0aW9uRmVhdHVyZURlcGVuZGVudEludGVyZmFjZX0uXHJcbiAgICovXHJcbiAgc3RhdGljIE1peGluKEJhc2VDbGFzcykge1xyXG4gICAgY29uc3QgUGFyZW50Q2xhc3MgPSBGZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlLk1peGluKEJhc2VDbGFzcyk7XHJcbiAgICBjb25zdCBBbmltYXRpb25GZWF0dXJlRGVwZW5kZW50TWl4aW4gPSBjbGFzcyBleHRlbmRzIFBhcmVudENsYXNzIHtcclxuICAgICAgX29uTGF5ZXJBZGRlZCh7bmFtZX0pIHt9XHJcblxyXG4gICAgICBfb25MYXllclJlbW92ZWQoe25hbWV9KSB7fVxyXG5cclxuICAgICAgX29uTGF5ZXJSZW5hbWVkKHtvbGROYW1lLCBuZXdOYW1lfSkge31cclxuXHJcbiAgICAgIF9vbkFuaW1hdGlvbkFkZGVkKHtsYXllck5hbWUsIGFuaW1hdGlvbk5hbWV9KSB7fVxyXG5cclxuICAgICAgX29uQW5pbWF0aW9uUmVtb3ZlZCh7bGF5ZXJOYW1lLCBhbmltYXRpb25OYW1lfSkge31cclxuXHJcbiAgICAgIF9vbkFuaW1hdGlvblJlbmFtZWQoe2xheWVyTmFtZSwgb2xkTmFtZSwgbmV3TmFtZX0pIHt9XHJcbiAgICB9O1xyXG5cclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEFuaW1hdGlvbkZlYXR1cmVEZXBlbmRlbnRNaXhpbiwge1xyXG4gICAgICBFVkVOVF9ERVBFTkRFTkNJRVM6IHtcclxuICAgICAgICB2YWx1ZToge1xyXG4gICAgICAgICAgLi4uUGFyZW50Q2xhc3MuRVZFTlRfREVQRU5ERU5DSUVTLFxyXG4gICAgICAgICAgLi4uQW5pbWF0aW9uRmVhdHVyZURlcGVuZGVudEludGVyZmFjZS5FVkVOVF9ERVBFTkRFTkNJRVMsXHJcbiAgICAgICAgfSxcclxuICAgICAgICB3cml0YWJsZTogZmFsc2UsXHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gQW5pbWF0aW9uRmVhdHVyZURlcGVuZGVudE1peGluO1xyXG4gIH1cclxufVxyXG5cclxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQW5pbWF0aW9uRmVhdHVyZURlcGVuZGVudEludGVyZmFjZSwge1xyXG4gIEVWRU5UX0RFUEVOREVOQ0lFUzoge1xyXG4gICAgdmFsdWU6IHtcclxuICAgICAgQW5pbWF0aW9uRmVhdHVyZToge1xyXG4gICAgICAgIGFkZExheWVyOiAnX29uTGF5ZXJBZGRlZCcsXHJcbiAgICAgICAgcmVtb3ZlTGF5ZXI6ICdfb25MYXllclJlbW92ZWQnLFxyXG4gICAgICAgIHJlbmFtZUxheWVyOiAnX29uTGF5ZXJSZW5hbWVkJyxcclxuICAgICAgICBhZGRBbmltYXRpb246ICdfb25BbmltYXRpb25BZGRlZCcsXHJcbiAgICAgICAgcmVtb3ZlQW5pbWF0aW9uOiAnX29uQW5pbWF0aW9uUmVtb3ZlZCcsXHJcbiAgICAgICAgcmVuYW1lQW5pbWF0aW9uOiAnX29uQW5pbWF0aW9uUmVuYW1lZCcsXHJcbiAgICAgIH0sXHJcbiAgICB9LFxyXG4gICAgd3JpdGFibGU6IGZhbHNlLFxyXG4gIH0sXHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgQW5pbWF0aW9uRmVhdHVyZURlcGVuZGVudEludGVyZmFjZTtcclxuIiwiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXHJcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxyXG5cclxuLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cclxuLyogZXNsaW50LWRpc2FibGUgbWF4LWNsYXNzZXMtcGVyLWZpbGUgKi9cclxuaW1wb3J0IEFuaW1hdGlvbkZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2UgZnJvbSAnY29yZS9hbmltcGFjay9BbmltYXRpb25GZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlJztcclxuXHJcbi8qKlxyXG4gKiBDbGFzcyBmYWN0b3J5IGludGVyZmFjZSBmb3IgdGhhdCBrZWVwcyB0cmFjayBvZiBsYXllcnMgYW5kIGFuaW1hdGlvbnMgb24gYSBob3N0LlxyXG4gKiBUcmFja2VkIGFzc2V0cyBhcmUgbWFya2VkIGFzIGluYWN0aXZlIHVudGlsIGxheWVycyBhbmQgYW5pbWF0aW9ucyB3aXRoIG1hdGNoaW5nXHJcbiAqIG5hbWVzIGFyZSBkZXRlY3RlZCBhcyBwcmVzZW50IG9uIHRoZSBob3N0LlxyXG4gKlxyXG4gKiBAaW50ZXJmYWNlXHJcbiAqIEBleHRlbmRzIEFuaW1hdGlvbkZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2VcclxuICpcclxuICogQHByb3BlcnR5IHtPYmplY3R9IERFRkFVTFRfTEFZRVJfT1BUSU9OUyAtIERlZmF1bHQgb3B0aW9ucyB0byB1c2Ugd2hlbiBleGVjdXRpbmdcclxuICoge0BsaW5rIEFuaW1hdGlvbkxheWVyfSBtZXRob2RzLlxyXG4gKiBAcHJvcGVydHkge251bWJlcn0gW0RFRkFVTFRfTEFZRVJfT1BUSU9OUy5ibGVuZFRpbWU9MC41XSAtIERlZmF1bHQgdGltZSBpbiBzZWNvbmRzXHJcbiAqIHRvIHVzZSB3aGVuIGV4ZWN1dGluZyB7QGxpbmsgQW5pbWF0aW9uTGF5ZXIuc2V0QmxlbmRXZWlnaHR9LlxyXG4gKiBAcHJvcGVydHkge09iamVjdH0gW0RFRkFVTFRfTEFZRVJfT1BUSU9OUy5hbmltYXRpb25zPXt9XSAtIE1hcHMgYW5pbWF0aW9uIG5hbWVzXHJcbiAqIHRvIGRlZmF1bHQgb3B0aW9ucyBvYmplY3RzIHRvIHVzZSBmb3IgbWFuYWdlZCBhbmltYXRpb25zLlxyXG4gKi9cclxuY2xhc3MgTWFuYWdlZEFuaW1hdGlvbkxheWVySW50ZXJmYWNlIGV4dGVuZHMgQW5pbWF0aW9uRmVhdHVyZURlcGVuZGVudEludGVyZmFjZSB7XHJcbiAgLyoqXHJcbiAgICogU3RhcnQgdHJhY2tpbmcga2VlcGluZyB0cmFjayBvZiB3aGV0aGVyIGEgbGF5ZXIgd2l0aCB0aGUgZ2l2ZW4gbmFtZSBpcyBwcmVzZW50XHJcbiAgICogb24gdGhlIGhvc3QuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRvIGtlZXAgdHJhY2sgb2YuXHJcbiAgICogQHBhcmFtIHtPYmplY3Q9fSBvcHRpb25zIC0gT3B0aW9ucyBmb3IgdGhlIGxheWVyLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyPX0gb3B0aW9ucy5ibGVuZFRpbWUgLSBEZWZhdWx0IGFtb3VudCBvZiB0aW1lIHRvIHVzZSB3aGVuXHJcbiAgICogbWFuaXB1bGF0aW5nIGxheWVyIHdlaWdodHMgb24gdGhpcyBsYXllci5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb3B0aW9ucy5lYXNpbmdGbiAtIERlZmF1bHQgZWFzaW5nIGZ1bmN0aW9uIHRvIHVzZSB3aGVuXHJcbiAgICogbWFuaXB1bGF0aW5nIGxheWVyIHdlaWdodHMgb24gdGhpcyBsYXllci5cclxuICAgKiBAcGFyYW0ge09iamVjdD19IG9wdGlvbnMuYW5pbWF0aW9ucyAtIEFuaW1hdGlvbnMgdG8ga2VlcCB0cmFjayBvZiBvbiB0aGUgbGF5ZXIuXHJcbiAgICogQW5pbWF0aW9ucyBhcmUgcmVwcmVzZW50ZWQgYXMga2V5L3ZhbHVlIHBhaXJzIG9mIGFuaW1hdGlvbiBuYW1lcyBhbmQgdGhlaXJcclxuICAgKiBvcHRpb25zLlxyXG4gICAqL1xyXG4gIHJlZ2lzdGVyTGF5ZXIobmFtZSwgb3B0aW9ucyA9IHt9KSB7fVxyXG5cclxuICAvKipcclxuICAgKiBTdGFydCB0cmFja2luZyBrZWVwaW5nIHRyYWNrIG9mIHdoZXRoZXIgYW4gYW5pbWF0aW9uIHdpdGggdGhlIGdpdmVuIG5hbWUgaXNcclxuICAgKiBwcmVzZW50IG9uIHRoZSBob3N0LlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVyTmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRoYXQgd2lsbCBvd24gdGhlIGFuaW1hdGlvbi5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gYW5pbWF0aW9uTmFtZSAtIE5hbWUgb2YgdGhlIGFuaW1hdGlvbiB0byBrZWVwIHRyYWNrIG9mLlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0PX0gb3B0aW9ucyAtIE9wdGlvbnMgZm9yIHRoZSBhbmltYXRpb24uXHJcbiAgICovXHJcbiAgcmVnaXN0ZXJBbmltYXRpb24obGF5ZXJOYW1lLCBhbmltYXRpb25OYW1lLCBvcHRpb25zID0ge30pIHt9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldCBsYXllciB3ZWlnaHRzIG9uIHRyYWNrZWQgbGF5ZXJzLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG5hbWVGaWx0ZXIgLSBQcmVkaWNhdGUgZnVuY3Rpb24gdG8gdGVzdCBlYWNoIHRyYWNrZWQgbGF5ZXJcclxuICAgKiB3aXRoLiBCeSBkZWZhdWx0IGFsbCBsYXllcnMgd2lsbCBwYXNzLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB3ZWlnaHQgLSBXZWlnaHQgdmFsdWUgdG8gc2V0IG9uIGxheWVycy5cclxuICAgKiBAcGFyYW0ge251bWJlcj19IHNlY29uZHMgLSBOdW1iZXIgb2Ygc2Vjb25kcyBpdCB3aWxsIHRha2UgdG8gcmVhY2ggdGhlIHdlaWdodFxyXG4gICAqIG9uIGVhY2ggbGF5ZXIuIElmIHVuZGVmaW5lZCwgZWFjaCBsYXllcnMnIGJsZW5kVGltZSBvcHRpb24gaXMgdXNlZC5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gZWFzaW5nRm4gLSBFYXNpbmcgZnVuY3Rpb24gdG8gdXNlIHdoZW4gc2V0dGluZyB3ZWlnaHRcclxuICAgKiBvbiBlYWNoIGxheWVyLiBJZiB1bmRlZmluZWQsIGVhY2ggbGF5ZXJzJyBlYXNpbmdGbiBvcHRpb24gaXMgdXNlZC5cclxuICAgKi9cclxuICBzZXRMYXllcldlaWdodHMobmFtZUZpbHRlciA9ICgpID0+IHRydWUsIHdlaWdodCwgc2Vjb25kcywgZWFzaW5nRm4pIHt9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldCBhbGwgdHJhY2tlZCBsYXllcnMnIHdlaWdodHMgdG8gMS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyPX0gc2Vjb25kcyAtIE51bWJlciBvZiBzZWNvbmRzIGl0IHdpbGwgdGFrZSB0byByZWFjaCB0aGUgd2VpZ2h0XHJcbiAgICogb24gZWFjaCBsYXllci4gSWYgdW5kZWZpbmVkLCBlYWNoIGxheWVycycgYmxlbmRUaW1lIG9wdGlvbiBpcyB1c2VkLlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBlYXNpbmdGbiAtIEVhc2luZyBmdW5jdGlvbiB0byB1c2Ugd2hlbiBzZXR0aW5nIHdlaWdodFxyXG4gICAqIG9uIGVhY2ggbGF5ZXIuIElmIHVuZGVmaW5lZCwgZWFjaCBsYXllcnMnIGVhc2luZ0ZuIG9wdGlvbiBpcyB1c2VkLlxyXG4gICAqL1xyXG4gIGVuYWJsZShzZWNvbmRzLCBlYXNpbmdGbikge31cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0IGFsbCB0cmFja2VkIGxheWVycycgd2VpZ2h0cyB0byAwLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtudW1iZXI9fSBzZWNvbmRzIC0gTnVtYmVyIG9mIHNlY29uZHMgaXQgd2lsbCB0YWtlIHRvIHJlYWNoIHRoZSB3ZWlnaHRcclxuICAgKiBvbiBlYWNoIGxheWVyLiBJZiB1bmRlZmluZWQsIGVhY2ggbGF5ZXJzJyBibGVuZFRpbWUgb3B0aW9uIGlzIHVzZWQuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IGVhc2luZ0ZuIC0gRWFzaW5nIGZ1bmN0aW9uIHRvIHVzZSB3aGVuIHNldHRpbmcgd2VpZ2h0XHJcbiAgICogb24gZWFjaCBsYXllci4gSWYgdW5kZWZpbmVkLCBlYWNoIGxheWVycycgZWFzaW5nRm4gb3B0aW9uIGlzIHVzZWQuXHJcbiAgICovXHJcbiAgZGlzYWJsZShzZWNvbmRzLCBlYXNpbmdGbikge31cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlcyBhIGNsYXNzIHRoYXQgaW1wbGVtZW50cyB7QGxpbmsgTWFuYWdlZEFuaW1hdGlvbkxheWVySW50ZXJmYWNlfVxyXG4gICAqIGFuZCBleHRlbmRzIGEgc3BlY2lmaWVkIGJhc2UgY2xhc3MuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge0NsYXNzfSBCYXNlQ2xhc3MgLSBUaGUgY2xhc3MgdG8gZXh0ZW5kLlxyXG4gICAqXHJcbiAgICogQHJldHVybiB7Q2xhc3N9IEEgY2xhc3MgdGhhdCBleHRlbmRzIGBCYXNlQ2xhc3NgIGFuZCBpbXBsZW1lbnRzIHtAbGluayBNYW5hZ2VkQW5pbWF0aW9uTGF5ZXJJbnRlcmZhY2V9LlxyXG4gICAqL1xyXG4gIHN0YXRpYyBNaXhpbihCYXNlQ2xhc3MpIHtcclxuICAgIGNvbnN0IFBhcmVudENsYXNzID0gQW5pbWF0aW9uRmVhdHVyZURlcGVuZGVudEludGVyZmFjZS5NaXhpbihCYXNlQ2xhc3MpO1xyXG4gICAgY29uc3QgTWFuYWdlZEFuaW1hdGlvbkxheWVyTWl4aW4gPSBjbGFzcyBleHRlbmRzIFBhcmVudENsYXNzIHtcclxuICAgICAgY29uc3RydWN0b3IoLi4uYXJncykge1xyXG4gICAgICAgIHN1cGVyKC4uLmFyZ3MpO1xyXG5cclxuICAgICAgICB0aGlzLl9tYW5hZ2VkTGF5ZXJzID0ge307XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIF9vbkZlYXR1cmVBZGRlZCh0eXBlTmFtZSkge1xyXG4gICAgICAgIHN1cGVyLl9vbkZlYXR1cmVBZGRlZCh0eXBlTmFtZSk7XHJcblxyXG4gICAgICAgIGlmICh0eXBlTmFtZSAhPT0gJ0FuaW1hdGlvbkZlYXR1cmUnKSB7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9tYW5hZ2VkTGF5ZXJzID0gdGhpcy5fbWFuYWdlZExheWVycyB8fCB7fTtcclxuXHJcbiAgICAgICAgLy8gRGV0ZWN0IG5ldyBsYXllcnNcclxuICAgICAgICB0aGlzLl9ob3N0LkFuaW1hdGlvbkZlYXR1cmUubGF5ZXJzLmZvckVhY2gobmFtZSA9PiB7XHJcbiAgICAgICAgICB0aGlzLl9vbkxheWVyQWRkZWQoe25hbWV9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgX29uRmVhdHVyZVJlbW92ZWQodHlwZU5hbWUpIHtcclxuICAgICAgICBzdXBlci5fb25GZWF0dXJlUmVtb3ZlZCh0eXBlTmFtZSk7XHJcblxyXG4gICAgICAgIGlmICh0eXBlTmFtZSAhPT0gJ0FuaW1hdGlvbkZlYXR1cmUnKSB7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9tYW5hZ2VkTGF5ZXJzID0gdGhpcy5fbWFuYWdlZExheWVycyB8fCB7fTtcclxuXHJcbiAgICAgICAgLy8gRGVhY3RpdmF0ZSB0aGUgbGF5ZXJzXHJcbiAgICAgICAgT2JqZWN0LmtleXModGhpcy5fbWFuYWdlZExheWVycykuZm9yRWFjaChuYW1lID0+IHtcclxuICAgICAgICAgIHRoaXMuX29uTGF5ZXJSZW1vdmVkKHtuYW1lfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIF9vbkxheWVyQWRkZWQoe25hbWV9KSB7XHJcbiAgICAgICAgLy8gTWFyayB0aGUgbGF5ZXIgYXMgYWN0aXZlIGlmIGl0IGlzIG1hbmFnZWRcclxuICAgICAgICBpZiAodGhpcy5fbWFuYWdlZExheWVyc1tuYW1lXSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICB0aGlzLl9tYW5hZ2VkTGF5ZXJzW25hbWVdLmlzQWN0aXZlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAvLyBEZXRlY3QgbmV3IGFuaW1hdGlvbnNcclxuICAgICAgICAgIHRoaXMuX2hvc3QuQW5pbWF0aW9uRmVhdHVyZS5nZXRBbmltYXRpb25zKG5hbWUpLmZvckVhY2goYW5pbU5hbWUgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLl9vbkFuaW1hdGlvbkFkZGVkKHtsYXllck5hbWU6IG5hbWUsIGFuaW1hdGlvbk5hbWU6IGFuaW1OYW1lfSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIF9vbkxheWVyUmVtb3ZlZCh7bmFtZX0pIHtcclxuICAgICAgICAvLyBEZWFjdGl2YXRlIHRoZSBsYXllciBpZiBpdCBpcyBtYW5hZ2VkXHJcbiAgICAgICAgaWYgKHRoaXMuX21hbmFnZWRMYXllcnNbbmFtZV0gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgdGhpcy5fbWFuYWdlZExheWVyc1tuYW1lXS5pc0FjdGl2ZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgIC8vIERlYWN0aXZhdGUgdGhlIGFuaW1hdGlvbnNcclxuICAgICAgICAgIE9iamVjdC5rZXlzKHRoaXMuX21hbmFnZWRMYXllcnNbbmFtZV0uYW5pbWF0aW9ucykuZm9yRWFjaChcclxuICAgICAgICAgICAgYW5pbU5hbWUgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMuX29uQW5pbWF0aW9uUmVtb3ZlZCh7XHJcbiAgICAgICAgICAgICAgICBsYXllck5hbWU6IG5hbWUsXHJcbiAgICAgICAgICAgICAgICBhbmltYXRpb25OYW1lOiBhbmltTmFtZSxcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIF9vbkxheWVyUmVuYW1lZCh7b2xkTmFtZSwgbmV3TmFtZX0pIHtcclxuICAgICAgICBjb25zdCBsYXllck9wdGlvbnMgPSB0aGlzLl9tYW5hZ2VkTGF5ZXJzW29sZE5hbWVdO1xyXG5cclxuICAgICAgICAvLyBSZXBsYWNlIHRoZSBsYXllciBrZXkgd2l0aCB0aGUgbmV3IG5hbWVcclxuICAgICAgICBpZiAobGF5ZXJPcHRpb25zICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgIGRlbGV0ZSB0aGlzLl9tYW5hZ2VkTGF5ZXJzW29sZE5hbWVdO1xyXG4gICAgICAgICAgdGhpcy5fbWFuYWdlZExheWVyc1tuZXdOYW1lXSA9IGxheWVyT3B0aW9ucztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIF9vbkFuaW1hdGlvbkFkZGVkKHtsYXllck5hbWUsIGFuaW1hdGlvbk5hbWV9KSB7XHJcbiAgICAgICAgLy8gTWFyayB0aGUgYW5pbWF0aW9uIGFzIGFjdGl2ZSBpZiBpdCBpcyBtYW5hZ2VkXHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgdGhpcy5fbWFuYWdlZExheWVyc1tsYXllck5hbWVdICE9PSB1bmRlZmluZWQgJiZcclxuICAgICAgICAgIHRoaXMuX21hbmFnZWRMYXllcnNbbGF5ZXJOYW1lXS5hbmltYXRpb25zW2FuaW1hdGlvbk5hbWVdICE9PSB1bmRlZmluZWRcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHRoaXMuX21hbmFnZWRMYXllcnNbbGF5ZXJOYW1lXS5hbmltYXRpb25zW1xyXG4gICAgICAgICAgICBhbmltYXRpb25OYW1lXHJcbiAgICAgICAgICBdLmlzQWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIF9vbkFuaW1hdGlvblJlbW92ZWQoe2xheWVyTmFtZSwgYW5pbWF0aW9uTmFtZX0pIHtcclxuICAgICAgICAvLyBEZWFjdGl2YXRlIHRoZSBhbmltYXRpb24gaWYgaXQgaXMgbWFuYWdlZFxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIHRoaXMuX21hbmFnZWRMYXllcnNbbGF5ZXJOYW1lXSAhPT0gdW5kZWZpbmVkICYmXHJcbiAgICAgICAgICB0aGlzLl9tYW5hZ2VkTGF5ZXJzW2xheWVyTmFtZV0uYW5pbWF0aW9uc1thbmltYXRpb25OYW1lXSAhPT0gdW5kZWZpbmVkXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICB0aGlzLl9tYW5hZ2VkTGF5ZXJzW2xheWVyTmFtZV0uYW5pbWF0aW9uc1tcclxuICAgICAgICAgICAgYW5pbWF0aW9uTmFtZVxyXG4gICAgICAgICAgXS5pc0FjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgX29uQW5pbWF0aW9uUmVuYW1lZCh7bGF5ZXJOYW1lLCBvbGROYW1lLCBuZXdOYW1lfSkge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIHRoaXMuX21hbmFnZWRMYXllcnNbbGF5ZXJOYW1lXSAhPT0gdW5kZWZpbmVkICYmXHJcbiAgICAgICAgICB0aGlzLl9tYW5hZ2VkTGF5ZXJzW2xheWVyTmFtZV0uYW5pbWF0aW9uc1tvbGROYW1lXSAhPT0gdW5kZWZpbmVkXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAvLyBSZXBsYWNlIHRoZSBhbmltYXRpb24ga2V5IHdpdGggdGhlIG5ldyBuYW1lXHJcbiAgICAgICAgICBjb25zdCBhbmltT3B0aW9ucyA9IHRoaXMuX21hbmFnZWRMYXllcnNbbGF5ZXJOYW1lXS5hbmltYXRpb25zW1xyXG4gICAgICAgICAgICBvbGROYW1lXHJcbiAgICAgICAgICBdO1xyXG4gICAgICAgICAgZGVsZXRlIHRoaXMuX21hbmFnZWRMYXllcnNbbGF5ZXJOYW1lXS5hbmltYXRpb25zW29sZE5hbWVdO1xyXG4gICAgICAgICAgdGhpcy5fbWFuYWdlZExheWVyc1tsYXllck5hbWVdLmFuaW1hdGlvbnNbbmV3TmFtZV0gPSBhbmltT3B0aW9ucztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJlZ2lzdGVyTGF5ZXIobmFtZSwgb3B0aW9ucyA9IHt9KSB7XHJcbiAgICAgICAgLy8gU3RhcnQgd2l0aCBkZWZhdWx0IG9wdGlvbnMgZm9yIGVhY2ggbmV3IGxheWVyXHJcbiAgICAgICAgaWYgKHRoaXMuX21hbmFnZWRMYXllcnNbbmFtZV0gPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgdGhpcy5fbWFuYWdlZExheWVyc1tuYW1lXSA9IHtcclxuICAgICAgICAgICAgLi4udGhpcy5jb25zdHJ1Y3Rvci5ERUZBVUxUX0xBWUVSX09QVElPTlMsXHJcbiAgICAgICAgICAgIGFuaW1hdGlvbnM6IHt9LFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFVwZGF0ZSBhbGwgb3B0aW9ucyBleGNlcHQgYW5pbWF0aW9uc1xyXG4gICAgICAgIGNvbnN0IGxheWVyT3B0aW9ucyA9IHRoaXMuX21hbmFnZWRMYXllcnNbbmFtZV07XHJcbiAgICAgICAgb3B0aW9ucyA9IHsuLi5vcHRpb25zfTtcclxuICAgICAgICBjb25zdCBhbmltYXRpb25PcHRpb25zID0gb3B0aW9ucy5hbmltYXRpb25zIHx8IHt9O1xyXG4gICAgICAgIGRlbGV0ZSBvcHRpb25zLmFuaW1hdGlvbnM7XHJcbiAgICAgICAgT2JqZWN0LmFzc2lnbihsYXllck9wdGlvbnMsIG9wdGlvbnMpO1xyXG5cclxuICAgICAgICAvLyBDaGVjayB3aGV0aGVyIHRoZSBsYXllciBjYW4gYmUgbWFuaXB1bGF0ZWQgbm93XHJcbiAgICAgICAgbGF5ZXJPcHRpb25zLmlzQWN0aXZlID1cclxuICAgICAgICAgIHRoaXMuX2hvc3QuQW5pbWF0aW9uRmVhdHVyZSAhPT0gdW5kZWZpbmVkICYmXHJcbiAgICAgICAgICB0aGlzLl9ob3N0LkFuaW1hdGlvbkZlYXR1cmUubGF5ZXJzLmluY2x1ZGVzKG5hbWUpO1xyXG5cclxuICAgICAgICAvLyBSZWdpc3RlciB0aGUgYW5pbWF0aW9uc1xyXG4gICAgICAgIE9iamVjdC5lbnRyaWVzKGFuaW1hdGlvbk9wdGlvbnMpLmZvckVhY2goKFthbmltTmFtZSwgYW5pbU9wdGlvbnNdKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnJlZ2lzdGVyQW5pbWF0aW9uKG5hbWUsIGFuaW1OYW1lLCBhbmltT3B0aW9ucyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJlZ2lzdGVyQW5pbWF0aW9uKGxheWVyTmFtZSwgYW5pbWF0aW9uTmFtZSwgb3B0aW9ucyA9IHt9KSB7XHJcbiAgICAgICAgLy8gUmVnaXN0ZXIgdGhlIGxheWVyIGlmIGl0IGhhc24ndCBiZWVuIHJlZ2lzdGVyZWQgeWV0XHJcbiAgICAgICAgaWYgKHRoaXMuX21hbmFnZWRMYXllcnNbbGF5ZXJOYW1lXSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICB0aGlzLnJlZ2lzdGVyTGF5ZXIobGF5ZXJOYW1lKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFVwZGF0ZSBhbmltYXRpb24gb3B0aW9uc1xyXG4gICAgICAgIGNvbnN0IGFuaW1PcHRpb25zID1cclxuICAgICAgICAgIHRoaXMuX21hbmFnZWRMYXllcnNbbGF5ZXJOYW1lXS5hbmltYXRpb25zW2FuaW1hdGlvbk5hbWVdIHx8IHt9O1xyXG4gICAgICAgIE9iamVjdC5hc3NpZ24oYW5pbU9wdGlvbnMsIG9wdGlvbnMpO1xyXG4gICAgICAgIHRoaXMuX21hbmFnZWRMYXllcnNbbGF5ZXJOYW1lXS5hbmltYXRpb25zW2FuaW1hdGlvbk5hbWVdID0gYW5pbU9wdGlvbnM7XHJcblxyXG4gICAgICAgIC8vIENoZWNrIHdoZXRoZXIgdGhlIGFuaW1hdGlvbiBjYW4gYmUgbWFuaXB1bGF0ZWQgbm93XHJcbiAgICAgICAgdGhpcy5fbWFuYWdlZExheWVyc1tsYXllck5hbWVdLmFuaW1hdGlvbnNbYW5pbWF0aW9uTmFtZV0uaXNBY3RpdmUgPVxyXG4gICAgICAgICAgdGhpcy5fbWFuYWdlZExheWVyc1tsYXllck5hbWVdLmlzQWN0aXZlICYmXHJcbiAgICAgICAgICB0aGlzLl9ob3N0LkFuaW1hdGlvbkZlYXR1cmUuZ2V0QW5pbWF0aW9ucyhsYXllck5hbWUpLmluY2x1ZGVzKFxyXG4gICAgICAgICAgICBhbmltYXRpb25OYW1lXHJcbiAgICAgICAgICApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBzZXRMYXllcldlaWdodHMobmFtZUZpbHRlciA9ICgpID0+IHRydWUsIHdlaWdodCwgc2Vjb25kcywgZWFzaW5nRm4pIHtcclxuICAgICAgICBjb25zdCBsYXllck5hbWVzID0gT2JqZWN0LmtleXModGhpcy5fbWFuYWdlZExheWVycykuZmlsdGVyKG5hbWVGaWx0ZXIpO1xyXG5cclxuICAgICAgICBsYXllck5hbWVzLmZvckVhY2gobmFtZSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBsYXllck9wdGlvbnMgPSB0aGlzLl9tYW5hZ2VkTGF5ZXJzW25hbWVdO1xyXG5cclxuICAgICAgICAgIGlmIChsYXllck9wdGlvbnMuaXNBY3RpdmUpIHtcclxuICAgICAgICAgICAgdGhpcy5faG9zdC5BbmltYXRpb25GZWF0dXJlLnNldExheWVyV2VpZ2h0KFxyXG4gICAgICAgICAgICAgIG5hbWUsXHJcbiAgICAgICAgICAgICAgd2VpZ2h0LFxyXG4gICAgICAgICAgICAgIHNlY29uZHMgIT09IHVuZGVmaW5lZCA/IHNlY29uZHMgOiBsYXllck9wdGlvbnMuYmxlbmRUaW1lLFxyXG4gICAgICAgICAgICAgIGVhc2luZ0ZuIHx8IGxheWVyT3B0aW9ucy5lYXNpbmdGblxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBlbmFibGUoc2Vjb25kcywgZWFzaW5nRm4pIHtcclxuICAgICAgICB0aGlzLnNldExheWVyV2VpZ2h0cyh1bmRlZmluZWQsIDEsIHNlY29uZHMsIGVhc2luZ0ZuKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgZGlzYWJsZShzZWNvbmRzLCBlYXNpbmdGbikge1xyXG4gICAgICAgIHRoaXMuc2V0TGF5ZXJXZWlnaHRzKHVuZGVmaW5lZCwgMCwgc2Vjb25kcywgZWFzaW5nRm4pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpbnN0YWxsQXBpKCkge1xyXG4gICAgICAgIGNvbnN0IGFwaSA9IHN1cGVyLmluc3RhbGxBcGkoKTtcclxuXHJcbiAgICAgICAgT2JqZWN0LmFzc2lnbihhcGksIHtcclxuICAgICAgICAgIHJlZ2lzdGVyTGF5ZXI6IHRoaXMucmVnaXN0ZXJMYXllci5iaW5kKHRoaXMpLFxyXG4gICAgICAgICAgcmVnaXN0ZXJBbmltYXRpb246IHRoaXMucmVnaXN0ZXJBbmltYXRpb24uYmluZCh0aGlzKSxcclxuICAgICAgICAgIHNldExheWVyV2VpZ2h0czogdGhpcy5zZXRMYXllcldlaWdodHMuYmluZCh0aGlzKSxcclxuICAgICAgICAgIGVuYWJsZTogdGhpcy5lbmFibGUuYmluZCh0aGlzKSxcclxuICAgICAgICAgIGRpc2FibGU6IHRoaXMuZGlzYWJsZS5iaW5kKHRoaXMpLFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gYXBpO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE1hbmFnZWRBbmltYXRpb25MYXllck1peGluLCB7XHJcbiAgICAgIERFRkFVTFRfTEFZRVJfT1BUSU9OUzoge1xyXG4gICAgICAgIHZhbHVlOiBNYW5hZ2VkQW5pbWF0aW9uTGF5ZXJJbnRlcmZhY2UuREVGQVVMVF9MQVlFUl9PUFRJT05TLFxyXG4gICAgICAgIHdyaXRhYmxlOiBmYWxzZSxcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBNYW5hZ2VkQW5pbWF0aW9uTGF5ZXJNaXhpbjtcclxuICB9XHJcbn1cclxuXHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE1hbmFnZWRBbmltYXRpb25MYXllckludGVyZmFjZSwge1xyXG4gIERFRkFVTFRfTEFZRVJfT1BUSU9OUzoge1xyXG4gICAgdmFsdWU6IHtibGVuZFRpbWU6IDAuNSwgYW5pbWF0aW9uczoge319LFxyXG4gICAgd3JpdGFibGU6IGZhbHNlLFxyXG4gIH0sXHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgTWFuYWdlZEFuaW1hdGlvbkxheWVySW50ZXJmYWNlO1xyXG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cclxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVC0wXHJcblxyXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtY2xhc3Nlcy1wZXItZmlsZSAqL1xyXG5pbXBvcnQgRmVhdHVyZURlcGVuZGVudEludGVyZmFjZSBmcm9tICdjb3JlL0ZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2UnO1xyXG5cclxuLyoqXHJcbiAqIENsYXNzIGZhY3RvcnkgaW50ZXJmYWNlIGZvciBmZWF0dXJlcyB0aGF0IGFyZSBkZXBlbmRlbnQgb24gdGhlIFRleHRUb1NwZWVjaEZlYXR1cmVcclxuICogYmVpbmcgcHJlc2VudCBvbiB0aGUgaG9zdC4gU3BlZWNoIGV2ZW50cyB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgbGlzdGVuZWQgZm9yIG9uY2UgYVxyXG4gKiBUZXh0VG9TcGVlY2hGZWF0dXJlIGlzIGFkZGVkIHRvIHRoZSBob3N0IGFuZCBzdG9wcGVkIG9uY2UgaXQgaXMgcmVtb3ZlZC5cclxuICpcclxuICogQGludGVyZmFjZVxyXG4gKiBAZXh0ZW5kcyBGZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlXHJcbiAqXHJcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBFVkVOVF9ERVBFTkRFTkNJRVMgLSBFdmVudHMgdGhhdCB0aGUgZmVhdHVyZSBzaG91bGQgc3RhcnQvc3RvcFxyXG4gKiBsaXN0ZW5pbmcgZm9yIHdoZW4gYSBmZWF0dXJlIG9mIHR5cGUgRmVhdHVyZU5hbWUgaXMgYWRkZWQvcmVtb3ZlZCBmcm9tIHRoZSBob3N0LlxyXG4gKiBAcHJvcGVydHkge09iamVjdH0gRVZFTlRfREVQRU5ERU5DSUVTLlRleHRUb1NwZWVjaEZlYXR1cmUgLSBFdmVudHMgdGhhdCBhcmVcclxuICogc3BlY2lmaWMgdG8gdGhlIFRleHRUb1NwZWVjaEZlYXR1cmUuXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbRVZFTlRfREVQRU5ERU5DSUVTLlRleHRUb1NwZWVjaEZlYXR1cmUucGxheT0nX29uUGxheSddIC1cclxuICogVGhlIG5hbWUgb2YgdGhlIG1ldGhvZCB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQgd2hlbiBUZXh0VG9TcGVlY2hGZWF0dXJlIHBsYXlcclxuICogZXZlbnRzIGFyZSBlbWl0dGVkLlxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW0VWRU5UX0RFUEVOREVOQ0lFUy5UZXh0VG9TcGVlY2hGZWF0dXJlLnBhdXNlPSdfb25QYXVzZSddIC1cclxuICogVGhlIG5hbWUgb2YgdGhlIG1ldGhvZCB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQgd2hlbiBUZXh0VG9TcGVlY2hGZWF0dXJlIHBhdXNlXHJcbiAqIGV2ZW50cyBhcmUgZW1pdHRlZC5cclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtFVkVOVF9ERVBFTkRFTkNJRVMuVGV4dFRvU3BlZWNoRmVhdHVyZS5yZXN1bWU9J19vblJlc3VtZSddIC1cclxuICogVGhlIG5hbWUgb2YgdGhlIG1ldGhvZCB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQgd2hlbiBUZXh0VG9TcGVlY2hGZWF0dXJlIHJlc3VtZVxyXG4gKiBldmVudHMgYXJlIGVtaXR0ZWQuXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbRVZFTlRfREVQRU5ERU5DSUVTLlRleHRUb1NwZWVjaEZlYXR1cmUuc3RvcD0nX29uU3RvcCddIC1cclxuICogVGhlIG5hbWUgb2YgdGhlIG1ldGhvZCB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQgd2hlbiBUZXh0VG9TcGVlY2hGZWF0dXJlIHN0b3BcclxuICogZXZlbnRzIGFyZSBlbWl0dGVkLlxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW0VWRU5UX0RFUEVOREVOQ0lFUy5UZXh0VG9TcGVlY2hGZWF0dXJlLnNlbnRlbmNlPSdfb25TZW50ZW5jZSddIC1cclxuICogVGhlIG5hbWUgb2YgdGhlIG1ldGhvZCB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQgd2hlbiBUZXh0VG9TcGVlY2hGZWF0dXJlIHNlbnRlbmNlXHJcbiAqIGV2ZW50cyBhcmUgZW1pdHRlZC5cclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtFVkVOVF9ERVBFTkRFTkNJRVMuVGV4dFRvU3BlZWNoRmVhdHVyZS53b3JkPSdfb25Xb3JkJ10gLVxyXG4gKiBUaGUgbmFtZSBvZiB0aGUgbWV0aG9kIHRoYXQgd2lsbCBiZSBleGVjdXRlZCB3aGVuIFRleHRUb1NwZWVjaEZlYXR1cmUgd29yZFxyXG4gKiBldmVudHMgYXJlIGVtaXR0ZWQuXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbRVZFTlRfREVQRU5ERU5DSUVTLlRleHRUb1NwZWVjaEZlYXR1cmUudmlzZW1lPSdfb25WaXNlbWUnXSAtXHJcbiAqIFRoZSBuYW1lIG9mIHRoZSBtZXRob2QgdGhhdCB3aWxsIGJlIGV4ZWN1dGVkIHdoZW4gVGV4dFRvU3BlZWNoRmVhdHVyZSB2aXNlbWVcclxuICogZXZlbnRzIGFyZSBlbWl0dGVkLlxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW0VWRU5UX0RFUEVOREVOQ0lFUy5UZXh0VG9TcGVlY2hGZWF0dXJlLnNzbWw9J19vblNzbWwnXSAtXHJcbiAqIFRoZSBuYW1lIG9mIHRoZSBtZXRob2QgdGhhdCB3aWxsIGJlIGV4ZWN1dGVkIHdoZW4gVGV4dFRvU3BlZWNoRmVhdHVyZSBzc21sXHJcbiAqIGV2ZW50cyBhcmUgZW1pdHRlZC5cclxuICovXHJcbmNsYXNzIFRleHRUb1NwZWVjaEZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2UgZXh0ZW5kcyBGZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlIHtcclxuICAvKipcclxuICAgKiBFeGVjdXRlZCB3aGVuIHNwZWVjaCBwbGF5IGV2ZW50cyBhcmUgY2F1Z2h0LlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBfb25QbGF5KCkge31cclxuXHJcbiAgLyoqXHJcbiAgICogRXhlY3V0ZWQgd2hlbiBzcGVlY2ggcGF1c2UgZXZlbnRzIGFyZSBjYXVnaHQuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIF9vblBhdXNlKCkge31cclxuXHJcbiAgLyoqXHJcbiAgICogRXhlY3V0ZWQgd2hlbiBzcGVlY2ggcmVzdW1lIGV2ZW50cyBhcmUgY2F1Z2h0LlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBfb25SZXN1bWUoKSB7fVxyXG5cclxuICAvKipcclxuICAgKiBFeGVjdXRlZCB3aGVuIHNwZWVjaCBzdG9wIGV2ZW50cyBhcmUgY2F1Z2h0LlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBfb25TdG9wKCkge31cclxuXHJcbiAgLyoqXHJcbiAgICogRXhlY3V0ZWQgd2hlbiBzcGVlY2ggc2VudGVuY2UgZXZlbnRzIGFyZSBjYXVnaHQuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIF9vblNlbnRlbmNlKCkge31cclxuXHJcbiAgLyoqXHJcbiAgICogRXhlY3V0ZWQgd2hlbiBzcGVlY2ggd29yZCBldmVudHMgYXJlIGNhdWdodC5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICovXHJcbiAgX29uV29yZCgpIHt9XHJcblxyXG4gIC8qKlxyXG4gICAqIEV4ZWN1dGVkIHdoZW4gc3BlZWNoIHZpc2VtZSBldmVudHMgYXJlIGNhdWdodC5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICovXHJcbiAgX29uVmlzZW1lKCkge31cclxuXHJcbiAgLyoqXHJcbiAgICogRXhlY3V0ZWQgd2hlbiBzcGVlY2ggc3NtbCBldmVudHMgYXJlIGNhdWdodC5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICovXHJcbiAgX29uU3NtbCgpIHt9XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZXMgYSBjbGFzcyB0aGF0IGltcGxlbWVudHMge0BsaW5rIFRleHRUb1NwZWVjaEZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2V9XHJcbiAgICogYW5kIGV4dGVuZHMgYSBzcGVjaWZpZWQgYmFzZSBjbGFzcy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7Q2xhc3N9IEJhc2VDbGFzcyAtIFRoZSBjbGFzcyB0byBleHRlbmQuXHJcbiAgICpcclxuICAgKiBAcmV0dXJuIHtDbGFzc30gQSBjbGFzcyB0aGF0IGV4dGVuZHMgYEJhc2VDbGFzc2AgYW5kIGltcGxlbWVudHMge0BsaW5rIFRleHRUb1NwZWVjaEZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2V9LlxyXG4gICAqL1xyXG4gIHN0YXRpYyBNaXhpbihCYXNlQ2xhc3MpIHtcclxuICAgIGNvbnN0IFBhcmVudENsYXNzID0gRmVhdHVyZURlcGVuZGVudEludGVyZmFjZS5NaXhpbihCYXNlQ2xhc3MpO1xyXG4gICAgY29uc3QgVGV4dFRvU3BlZWNoRmVhdHVyZURlcGVuZGVudE1peGluID0gY2xhc3MgZXh0ZW5kcyBQYXJlbnRDbGFzcyB7XHJcbiAgICAgIF9vblBsYXkoKSB7fVxyXG5cclxuICAgICAgX29uUGF1c2UoKSB7fVxyXG5cclxuICAgICAgX29uUmVzdW1lKCkge31cclxuXHJcbiAgICAgIF9vblN0b3AoKSB7fVxyXG5cclxuICAgICAgX29uU2VudGVuY2UoKSB7fVxyXG5cclxuICAgICAgX29uV29yZCgpIHt9XHJcblxyXG4gICAgICBfb25WaXNlbWUoKSB7fVxyXG5cclxuICAgICAgX29uU3NtbCgpIHt9XHJcbiAgICB9O1xyXG5cclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFRleHRUb1NwZWVjaEZlYXR1cmVEZXBlbmRlbnRNaXhpbiwge1xyXG4gICAgICBFVkVOVF9ERVBFTkRFTkNJRVM6IHtcclxuICAgICAgICB2YWx1ZToge1xyXG4gICAgICAgICAgLi4uUGFyZW50Q2xhc3MuRVZFTlRfREVQRU5ERU5DSUVTLFxyXG4gICAgICAgICAgLi4uVGV4dFRvU3BlZWNoRmVhdHVyZURlcGVuZGVudEludGVyZmFjZS5FVkVOVF9ERVBFTkRFTkNJRVMsXHJcbiAgICAgICAgfSxcclxuICAgICAgICB3cml0YWJsZTogZmFsc2UsXHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gVGV4dFRvU3BlZWNoRmVhdHVyZURlcGVuZGVudE1peGluO1xyXG4gIH1cclxufVxyXG5cclxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVGV4dFRvU3BlZWNoRmVhdHVyZURlcGVuZGVudEludGVyZmFjZSwge1xyXG4gIEVWRU5UX0RFUEVOREVOQ0lFUzoge1xyXG4gICAgdmFsdWU6IHtcclxuICAgICAgVGV4dFRvU3BlZWNoRmVhdHVyZToge1xyXG4gICAgICAgIHBsYXk6ICdfb25QbGF5JyxcclxuICAgICAgICBwYXVzZTogJ19vblBhdXNlJyxcclxuICAgICAgICByZXN1bWU6ICdfb25SZXN1bWUnLFxyXG4gICAgICAgIHN0b3A6ICdfb25TdG9wJyxcclxuICAgICAgICBzZW50ZW5jZTogJ19vblNlbnRlbmNlJyxcclxuICAgICAgICB3b3JkOiAnX29uV29yZCcsXHJcbiAgICAgICAgdmlzZW1lOiAnX29uVmlzZW1lJyxcclxuICAgICAgICBzc21sOiAnX29uU3NtbCcsXHJcbiAgICAgIH0sXHJcbiAgICB9LFxyXG4gICAgd3JpdGFibGU6IGZhbHNlLFxyXG4gIH0sXHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgVGV4dFRvU3BlZWNoRmVhdHVyZURlcGVuZGVudEludGVyZmFjZTtcclxuIiwiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXHJcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxyXG5pbXBvcnQgTWF0aFV0aWxzIGZyb20gJy4vTWF0aFV0aWxzJztcclxuaW1wb3J0IHtRdWFkcmF0aWN9IGZyb20gJy4vYW5pbXBhY2svRWFzaW5nJztcclxuaW1wb3J0IE1hbmFnZWRBbmltYXRpb25MYXllckludGVyZmFjZSBmcm9tICcuL2FuaW1wYWNrL01hbmFnZWRBbmltYXRpb25MYXllckludGVyZmFjZSc7XHJcbmltcG9ydCBUZXh0VG9TcGVlY2hGZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlIGZyb20gJy4vYXdzcGFjay9UZXh0VG9TcGVlY2hGZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlJztcclxuaW1wb3J0IEFic3RyYWN0SG9zdEZlYXR1cmUgZnJvbSAnLi9BYnN0cmFjdEhvc3RGZWF0dXJlJztcclxuXHJcbi8qKlxyXG4gKiBEZWZhdWx0IG1hcHBpbmcgb2YgUG9sbHkgdmlzZW1lIG5hbWVzIHRvIGFuaW1hdGlvbiBvcHRpb25zIG9iamVjdHMuXHJcbiAqXHJcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBbc2lsPXtuYW1lOiAnc2lsJ31dXHJcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBbcD17bmFtZTogJ3AnLCBvdmVycmlkZVdlaWdodDogMC45fV1cclxuICogQHByb3BlcnR5IHtPYmplY3R9IFt0PXtuYW1lOiAndCcsIGJsZW5kVGltZTogMC4yfV1cclxuICogQHByb3BlcnR5IHtPYmplY3R9IFtTPXtuYW1lOiAnUyd9XVxyXG4gKiBAcHJvcGVydHkge09iamVjdH0gW1Q9e25hbWU6ICdUJ31dXHJcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBbZj17bmFtZTogJ2YnLCBvdmVycmlkZVdlaWdodDogMC43NX1dXHJcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBbaz17bmFtZTogJ2snfV1cclxuICogQHByb3BlcnR5IHtPYmplY3R9IFtpPXtuYW1lOiAnaSd9XVxyXG4gKiBAcHJvcGVydHkge09iamVjdH0gW3I9e25hbWU6ICdyJ31dXHJcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBbcz17bmFtZTogJ3MnLCBibGVuZFRpbWU6IDAuMjV9XVxyXG4gKiBAcHJvcGVydHkge09iamVjdH0gW3U9e25hbWU6ICd1J31dXHJcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBbQD17bmFtZTogJ0AnfV1cclxuICogQHByb3BlcnR5IHtPYmplY3R9IFthPXtuYW1lOiAnYSd9XVxyXG4gKiBAcHJvcGVydHkge09iamVjdH0gW2U9e25hbWU6ICdlJywgYmxlbmRUaW1lOiAwLjJ9XVxyXG4gKiBAcHJvcGVydHkge09iamVjdH0gW0U9e25hbWU6ICdFJ31dXHJcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBbbz17bmFtZTogJ28nfV1cclxuICogQHByb3BlcnR5IHtPYmplY3R9IFtPPXtuYW1lOiAnTyd9XVxyXG4gKi9cclxuY29uc3QgRGVmYXVsdFZpc2VtZU1hcCA9IHtcclxuICBzaWw6IHtuYW1lOiAnc2lsJ30sXHJcbiAgcDoge25hbWU6ICdwJywgb3ZlcnJpZGVXZWlnaHQ6IDAuOX0sXHJcbiAgdDoge25hbWU6ICd0JywgYmxlbmRUaW1lOiAwLjJ9LFxyXG4gIFM6IHtuYW1lOiAnUyd9LFxyXG4gIFQ6IHtuYW1lOiAnVCd9LFxyXG4gIGY6IHtuYW1lOiAnZicsIG92ZXJyaWRlV2VpZ2h0OiAwLjc1fSxcclxuICBrOiB7bmFtZTogJ2snfSxcclxuICBpOiB7bmFtZTogJ2knfSxcclxuICByOiB7bmFtZTogJ3InfSxcclxuICBzOiB7bmFtZTogJ3MnLCBibGVuZFRpbWU6IDAuMjV9LFxyXG4gIHU6IHtuYW1lOiAndSd9LFxyXG4gICdAJzoge25hbWU6ICdAJ30sXHJcbiAgYToge25hbWU6ICdhJ30sXHJcbiAgZToge25hbWU6ICdlJywgYmxlbmRUaW1lOiAwLjJ9LFxyXG4gIEU6IHtuYW1lOiAnRSd9LFxyXG4gIG86IHtuYW1lOiAnbyd9LFxyXG4gIE86IHtuYW1lOiAnTyd9LFxyXG59O1xyXG5cclxuLyoqXHJcbiAqIExpcHN5bmMgY29udHJvbHMgdHdvIHR5cGVzIG9mIG1vdmVtZW50OiBpZGxlIGFuaW1hdGlvbiB0aGF0IHNob3VsZCBwbGF5IHdoaWxlXHJcbiAqIHNwZWVjaCBpcyBwbGF5aW5nIGFuZCB2aXNlbWUgYW5pbWF0aW9ucyBjb3JyZXNwb25kaW5nIHRvIFBvbGx5IHZpc2VtZXMgd2hvc2VcclxuICogd2VpZ2h0cyBzaG91bGQgYmUgdHVybmVkIG9uIGFuZCBvZmYgYXMgdGhleSBhcmUgZW5jb3VudGVyZWQgaW4gdGhlIFBvbGx5IFNTTUxcclxuICogdHJhbnNjcmlwdC4gTGF5ZXJzIG93bmVkIGJ5IHRoaXMgZmVhdHVyZSB3aWxsIGJlIGVuYWJsZWQgd2hpbGUgc3BlZWNoIGlzIHBsYXlpbmdcclxuICogYW5kIGRpc2FibGVkIG9uY2UgaXQgc3RvcHMuXHJcbiAqXHJcbiAqIEBleHRlbmRzIEFic3RyYWN0SG9zdEZlYXR1cmVcclxuICogQGFsaWFzIGNvcmUvTGlwc3luY0ZlYXR1cmVcclxuICogQGltcGxlbWVudHMgVGV4dFRvU3BlZWNoRmVhdHVyZURlcGVuZGVudEludGVyZmFjZVxyXG4gKiBAaW1wbGVtZW50cyBNYW5hZ2VkQW5pbWF0aW9uTGF5ZXJJbnRlcmZhY2VcclxuICovXHJcbmNsYXNzIExpcHN5bmNGZWF0dXJlIGV4dGVuZHMgQWJzdHJhY3RIb3N0RmVhdHVyZS5taXgoXHJcbiAgVGV4dFRvU3BlZWNoRmVhdHVyZURlcGVuZGVudEludGVyZmFjZS5NaXhpbixcclxuICBNYW5hZ2VkQW5pbWF0aW9uTGF5ZXJJbnRlcmZhY2UuTWl4aW5cclxuKSB7XHJcbiAgLyoqXHJcbiAgICogQGNvbnN0cnVjdG9yXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge2NvcmUvSG9zdE9iamVjdH0gaG9zdCAtIEhvc3QgdGhhdCBvd25zIHRoZSBmZWF0dXJlLlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0PX0gdmlzZW1lT3B0aW9ucyAtIE9wdGlvbnMgZm9yIHRoZSB2aXNlbWUgbGF5ZXJzLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbdmlzZW1lT3B0aW9ucy5ibGVuZFRpbWU9MC4xNV0gLSBEZWZhdWx0IGFtb3VudCBvZiB0aW1lIGl0XHJcbiAgICogd2lsbCB0YWtlIHRvIG1hbmlwdWxhdGUgZWFjaCBmcmVlQmxlbmQgd2VpZ2h0IG9uIHRoZSB2aXNlbWUgc3RhdGVzLlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbdmlzZW1lT3B0aW9ucy5kZWNheVJhdGU9e2Ftb3VudDogLjUsIHNlY29uZHM6IC41fV0gLSBBbiBvYmplY3RcclxuICAgKiBkZXNjcmliaW5nIHRoZSAwLTEgZmFjdG9yIHZpc2VtZSB3ZWlnaHQgd2lsbCBkZWNheSBpZiB0aGUgdmlzZW1lIGR1cmF0aW9uIGlzXHJcbiAgICogbG9uZ2VyIHRoYW4gdGhlIGJsZW5kVGltZSBhbmQgdGhlIG51bWJlciBvZiBzZWNvbmRzIGl0IHdvdWxkIHRha2UgdG8gZGVjYXlcclxuICAgKiBieSB0aGF0IGZhY3Rvci5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gW3Zpc2VtZU9wdGlvbnMuZWFzaW5nRm49UXVhZHJhdGljLkluT3V0XSAtIERlZmF1bHQgZWFzaW5nIGZ1bmN0aW9uXHJcbiAgICogdG8gdXNlIHdoZW4gbWFuaXB1bGF0aW5nIHZpc2VtZSBmcmVlQmxlbmQgd2VpZ2h0cy5cclxuICAgKiBAcGFyYW0ge0FycmF5LjxPYmplY3Q+fSBbdmlzZW1lT3B0aW9ucy4ubGF5ZXJzPVtdXSAtIEFuIGFycmF5IG9mIGxheWVyIG9wdGlvbnNcclxuICAgKiBvYmplY3RzIHRvIHJlZ2lzdGVyIGFzIHZpc2VtZSBsYXllcnMuXHJcbiAgICogQHBhcmFtIHtPYmplY3Q9fSB0YWxraW5nT3B0aW9ucyAtIE9wdGlvbnMgZm9yIHRoZSB0YWxraW5nIGxheWVycy5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gW3RhbGtpbmdPcHRpb25zLmJsZW5kVGltZT0wLjc1XSAtIERlZmF1bHQgYW1vdW50IG9mIHRpbWUgdG9cclxuICAgKiBlbmFibGUgYW5kIGRpc2FibGUgdGhlIHRhbGtpbmcgaWRsZSBsYXllcnNcclxuICAgKiBAcGFyYW0ge251bWJlcn0gW3RhbGtpbmdPcHRpb25zLmVhc2luZ0ZuPVF1YWRyYXRpYy5Jbk91dF0gLSBEZWZhdWx0IGVhc2luZ1xyXG4gICAqIGZ1bmN0aW9uIHRvIHVzZSB3aGVuIG1hbmlwdWxhdGluZyB3ZWlnaHRzIG9uIHRoZSB0YWxraW5nIGlkbGUgbGF5ZXJzLlxyXG4gICAqIEBwYXJhbSB7QXJyYXkuPE9iamVjdD59IFt0YWxraW5nT3B0aW9ucy5sYXllcnM9W11dIC0gQW4gYXJyYXkgb2YgbGF5ZXIgb3B0aW9uc1xyXG4gICAqIG9iamVjdHMgdG8gcmVnaXN0ZXIgYXMgdGFsa2luZyBsYXllcnMuXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IFt2aXNlbWVMZWFkVGltZT0uMDY3XSAtIFRoZSBhbW91bnQgb2YgdGltZSB0byBpbnN0cnVjdCB0aGVcclxuICAgKiBUZXh0VG9TcGVlY2hGZWF0dXJlIHRvIGVtaXQgc3BlZWNobWFya3MgYmVmb3JlIGVhY2ggb25lJ3MgYWN0dWFsIHRpbWVzdGFtcFxyXG4gICAqIGlzIHJlYWNoZWQuIFRoaXMgd2lsbCBzZXQgdGhlICdzcGVlY2hNYXJrT2Zmc2V0JyB2YXJpYWJsZSBvbiB0aGUgVGV4dFRvU3BlZWNoRmVhdHVyZS5cclxuICAgKi9cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIGhvc3QsXHJcbiAgICB7XHJcbiAgICAgIGJsZW5kVGltZTogdmlzZW1lQmxlbmRUaW1lID0gMC4xNSxcclxuICAgICAgZGVjYXlSYXRlOiB7YW1vdW50ID0gMC41LCBzZWNvbmRzID0gMC41fSA9IHt9LFxyXG4gICAgICBlYXNpbmdGbjogdmlzZW1lRWFzaW5nRm4gPSBRdWFkcmF0aWMuSW5PdXQsXHJcbiAgICAgIGxheWVyczogdmlzZW1lTGF5ZXJzID0gW10sXHJcbiAgICB9ID0ge30sXHJcbiAgICB7XHJcbiAgICAgIGJsZW5kVGltZTogdGFsa2luZ0JsZW5kVGltZSA9IDAuNzUsXHJcbiAgICAgIGVhc2luZ0ZuOiB0YWxraW5nRWFzaW5nRm4gPSBRdWFkcmF0aWMuSW5PdXQsXHJcbiAgICAgIGxheWVyczogdGFsa2luZ0xheWVycyA9IFtdLFxyXG4gICAgfSA9IHt9LFxyXG4gICAgdmlzZW1lTGVhZFRpbWUgPSAwLjA2N1xyXG4gICkge1xyXG4gICAgc3VwZXIoaG9zdCk7XHJcblxyXG4gICAgdGhpcy5fdmlzZW1lTGF5ZXJzID0ge307XHJcbiAgICB0aGlzLl90YWxraW5nTGF5ZXJzID0ge307XHJcbiAgICB0aGlzLnZpc2VtZUxlYWRUaW1lID0gdmlzZW1lTGVhZFRpbWU7XHJcblxyXG4gICAgLy8gUmVnaXN0ZXIgdGhlIHZpc2VtZSBsYXllcnNcclxuICAgIHZpc2VtZUxheWVycy5mb3JFYWNoKCh7bmFtZSwgYW5pbWF0aW9uLCB2aXNlbWVNYXAgPSBEZWZhdWx0VmlzZW1lTWFwfSkgPT4ge1xyXG4gICAgICB0aGlzLnJlZ2lzdGVyVmlzZW1lTGF5ZXIobmFtZSwge1xyXG4gICAgICAgIGFuaW1hdGlvbixcclxuICAgICAgICB2aXNlbWVNYXAsXHJcbiAgICAgICAgZGVjYXlSYXRlOiB7YW1vdW50LCBzZWNvbmRzfSxcclxuICAgICAgICBibGVuZFRpbWU6IHZpc2VtZUJsZW5kVGltZSxcclxuICAgICAgICBlYXNpbmdGbjogdmlzZW1lRWFzaW5nRm4sXHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gUmVnaXN0ZXIgdGhlIHRhbGtpbmcgbGF5ZXJzXHJcbiAgICB0YWxraW5nTGF5ZXJzLmZvckVhY2goKHtuYW1lLCBhbmltYXRpb259KSA9PiB7XHJcbiAgICAgIHRoaXMucmVnaXN0ZXJUYWxraW5nTGF5ZXIobmFtZSwge1xyXG4gICAgICAgIGFuaW1hdGlvbixcclxuICAgICAgICBibGVuZFRpbWU6IHRhbGtpbmdCbGVuZFRpbWUsXHJcbiAgICAgICAgZWFzaW5nRm46IHRhbGtpbmdFYXNpbmdGbixcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEVuc3VyZSB0aGF0IHJlZ2lzdGVyZWQgdmlzZW1lIGFuaW1hdGlvbnMgYXJlIEZyZWVCbGVuZFN0YXRlcy5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGF5ZXJOYW1lIC0gTmFtZSBvZiB0aGUgbGF5ZXIgdGhhdCBjb250YWlucyB0aGUgdmlzZW1lIGFuaW1hdGlvbi5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gYW5pbWF0aW9uTmFtZSAtIE5hbWUgb2YgdGhlIGFuaW1hdGlvbi5cclxuICAgKi9cclxuICBfcmVnaXN0ZXJWaXNlbWVBbmltYXRpb24obGF5ZXJOYW1lLCBhbmltYXRpb25OYW1lKSB7XHJcbiAgICBpZiAodGhpcy5fbWFuYWdlZExheWVyc1tsYXllck5hbWVdLmFuaW1hdGlvbnNbYW5pbWF0aW9uTmFtZV0uaXNBY3RpdmUpIHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIHRoaXMuX2hvc3QuQW5pbWF0aW9uRmVhdHVyZS5nZXRBbmltYXRpb25UeXBlKFxyXG4gICAgICAgICAgbGF5ZXJOYW1lLFxyXG4gICAgICAgICAgYW5pbWF0aW9uTmFtZVxyXG4gICAgICAgICkgIT09ICdmcmVlQmxlbmQnXHJcbiAgICAgICkge1xyXG4gICAgICAgIC8vIFdhcm4gYW5kIGRlYWN0aXZhdGUgaWYgdGhlIHJlZ2lzdGVyZWQgc3RhdGUgaXMgbm90IGZyZWVCbGVuZFxyXG4gICAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICAgIGBDYW5ub3QgcmVnaXN0ZXIgTGlwc3luYyB2aXNlbWUgYW5pbWF0aW9uICR7YW5pbWF0aW9uTmFtZX0gb24gbGF5ZXIgJHtsYXllck5hbWV9IGZvciBob3N0ICR7dGhpcy5faG9zdC5pZH0uIFZpc2VtZSBhbmltYXRpb25zIG11c3QgYmUgb2YgdHlwZSAnZnJlZUJsZW5kJy5gXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLl9tYW5hZ2VkTGF5ZXJzW2xheWVyTmFtZV0uYW5pbWF0aW9uc1tcclxuICAgICAgICAgIGFuaW1hdGlvbk5hbWVcclxuICAgICAgICBdLmlzQWN0aXZlID0gZmFsc2U7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGJsZW5kV2VpZ2h0cyBjYW4gYmUgbWFuaXB1bGF0ZWQgbm93XHJcbiAgICAgICAgY29uc3Qgd2VpZ2h0TmFtZXMgPSB0aGlzLl9ob3N0LkFuaW1hdGlvbkZlYXR1cmUuZ2V0QW5pbWF0aW9uQmxlbmROYW1lcyhcclxuICAgICAgICAgIGxheWVyTmFtZSxcclxuICAgICAgICAgIGFuaW1hdGlvbk5hbWVcclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbnN0IHt2aXNlbWVNYXB9ID0gdGhpcy5fbWFuYWdlZExheWVyc1tsYXllck5hbWVdLmFuaW1hdGlvbnNbXHJcbiAgICAgICAgICBhbmltYXRpb25OYW1lXHJcbiAgICAgICAgXTtcclxuXHJcbiAgICAgICAgT2JqZWN0LnZhbHVlcyh2aXNlbWVNYXApLmZvckVhY2godmlzZW1lT3B0aW9ucyA9PiB7XHJcbiAgICAgICAgICB2aXNlbWVPcHRpb25zLmlzQWN0aXZlID0gd2VpZ2h0TmFtZXMuaW5jbHVkZXModmlzZW1lT3B0aW9ucy5uYW1lKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSWYgdGhlIGFkZGVkIGZlYXR1cmUgaXMgVGV4dFRvU3BlZWNoLCB1cGRhdGUgaXRzIHNwZWVjaE1hcmtPZmZzZXQgdmFyaWFibGUuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHR5cGVOYW1lIC0gTmFtZSBvZiB0aGUgdHlwZSBvZiBmZWF0dXJlIHRoYXQgd2FzIGFkZGVkLlxyXG4gICAqL1xyXG4gIF9vbkZlYXR1cmVBZGRlZCh0eXBlTmFtZSkge1xyXG4gICAgdGhpcy5fdmlzZW1lTGF5ZXJzID0gdGhpcy5fdmlzZW1lTGF5ZXJzIHx8IHt9O1xyXG4gICAgdGhpcy5fdGFsa2luZ0xheWVycyA9IHRoaXMuX3RhbGtpbmdMYXllcnMgfHwge307XHJcblxyXG4gICAgc3VwZXIuX29uRmVhdHVyZUFkZGVkKHR5cGVOYW1lKTtcclxuXHJcbiAgICBpZiAodHlwZU5hbWUgPT09ICdUZXh0VG9TcGVlY2hGZWF0dXJlJykge1xyXG4gICAgICB0aGlzLl9ob3N0LlRleHRUb1NwZWVjaEZlYXR1cmUuc3BlZWNobWFya09mZnNldCA9XHJcbiAgICAgICAgLXRoaXMuX3Zpc2VtZUxlYWRUaW1lIHx8IDA7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBfb25MYXllckFkZGVkKHtuYW1lfSkge1xyXG4gICAgc3VwZXIuX29uTGF5ZXJBZGRlZCh7bmFtZX0pO1xyXG5cclxuICAgIC8vIFZhbGlkYXRlIHRoZSB2aXNlbWUgYW5pbWF0aW9uXHJcbiAgICBpZiAodGhpcy5fdmlzZW1lTGF5ZXJzW25hbWVdICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhpcy5fcmVnaXN0ZXJWaXNlbWVBbmltYXRpb24obmFtZSwgdGhpcy5fdmlzZW1lTGF5ZXJzW25hbWVdKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIF9vbkFuaW1hdGlvbkFkZGVkKHtsYXllck5hbWUsIGFuaW1hdGlvbk5hbWV9KSB7XHJcbiAgICBzdXBlci5fb25BbmltYXRpb25BZGRlZCh7bGF5ZXJOYW1lfSk7XHJcblxyXG4gICAgLy8gVmFsaWRhdGUgdGhlIHZpc2VtZSBhbmltYXRpb25cclxuICAgIGlmICh0aGlzLl92aXNlbWVMYXllcnNbbGF5ZXJOYW1lXSA9PT0gYW5pbWF0aW9uTmFtZSkge1xyXG4gICAgICB0aGlzLl9yZWdpc3RlclZpc2VtZUFuaW1hdGlvbihsYXllck5hbWUsIHRoaXMuX3Zpc2VtZUxheWVyc1tsYXllck5hbWVdKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIF9vblBsYXkoKSB7XHJcbiAgICAvLyBUdXJuIG9uIHRoZSBsYXllciB3ZWlnaHRzXHJcbiAgICB0aGlzLmVuYWJsZSgpO1xyXG5cclxuICAgIC8vIFNldCB0aGUgY3VycmVudCBhbmltYXRpb25zXHJcbiAgICBbdGhpcy5fdmlzZW1lTGF5ZXJzLCB0aGlzLl90YWxraW5nTGF5ZXJzXS5mb3JFYWNoKGxheWVycyA9PiB7XHJcbiAgICAgIE9iamVjdC5lbnRyaWVzKGxheWVycykuZm9yRWFjaCgoW2xheWVyTmFtZSwgYW5pbWF0aW9uTmFtZV0pID0+IHtcclxuICAgICAgICBpZiAodGhpcy5fbWFuYWdlZExheWVyc1tsYXllck5hbWVdLmFuaW1hdGlvbnNbYW5pbWF0aW9uTmFtZV0uaXNBY3RpdmUpIHtcclxuICAgICAgICAgIHRoaXMuX2hvc3QuQW5pbWF0aW9uRmVhdHVyZS5yZXN1bWVBbmltYXRpb24obGF5ZXJOYW1lLCBhbmltYXRpb25OYW1lKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBfb25QYXVzZSgpIHtcclxuICAgIHRoaXMuX29uU3RvcCgpO1xyXG4gIH1cclxuXHJcbiAgX29uUmVzdW1lKCkge1xyXG4gICAgdGhpcy5fb25QbGF5KCk7XHJcbiAgfVxyXG5cclxuICBfb25TdG9wKCkge1xyXG4gICAgLy8gVHVybiBvZmYgdGhlIGxheWVyIHdlaWdodHNcclxuICAgIHRoaXMuZGlzYWJsZSgpO1xyXG5cclxuICAgIC8vIFBhdXNlIHRoZSBjdXJyZW50IGFuaW1hdGlvbnNcclxuICAgIFt0aGlzLl92aXNlbWVMYXllcnMsIHRoaXMuX3RhbGtpbmdMYXllcnNdLmZvckVhY2gobGF5ZXJzID0+IHtcclxuICAgICAgT2JqZWN0LmVudHJpZXMobGF5ZXJzKS5mb3JFYWNoKChbbGF5ZXJOYW1lLCBhbmltYXRpb25OYW1lXSkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLl9tYW5hZ2VkTGF5ZXJzW2xheWVyTmFtZV0uYW5pbWF0aW9uc1thbmltYXRpb25OYW1lXS5pc0FjdGl2ZSkge1xyXG4gICAgICAgICAgdGhpcy5faG9zdC5BbmltYXRpb25GZWF0dXJlLnBhdXNlQW5pbWF0aW9uKGxheWVyTmFtZSwgYW5pbWF0aW9uTmFtZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogV2hlbiB2aXNlbWUgZXZlbnRzIGFyZSBjYXVnaHQsIHR1cm4gb24gd2VpZ2h0IG9mIHRoZSBuZXcgdmlzZW1lIGZvciB0aGUgZHVyYXRpb25cclxuICAgKiBvZiB0aGUgc3BlZWNoIG1hcmssIHRoZW4gdHVybiB3ZWlnaHQgYmFjayBvZmYuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IGV2ZW50IC0gRXZlbnQgZGF0YSBwYXNzZWQgZnJvbSB0aGUgc3BlZWNoLlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBldmVudC5tYXJrIC0gU3BlZWNobWFyayBvYmplY3QuXHJcbiAgICovXHJcbiAgYXN5bmMgX29uVmlzZW1lKHttYXJrfSkge1xyXG4gICAgT2JqZWN0LmVudHJpZXModGhpcy5fdmlzZW1lTGF5ZXJzKS5mb3JFYWNoKChbbGF5ZXJOYW1lLCBhbmltTmFtZV0pID0+IHtcclxuICAgICAgLy8gTWFrZSBzdXJlIHRoZSBsYXllciBjYW4gYmUgbWFuaXB1bGF0ZWRcclxuICAgICAgY29uc3Qge2lzQWN0aXZlLCB2aXNlbWVNYXB9ID0gdGhpcy5fbWFuYWdlZExheWVyc1tsYXllck5hbWVdLmFuaW1hdGlvbnNbXHJcbiAgICAgICAgYW5pbU5hbWVcclxuICAgICAgXTtcclxuXHJcbiAgICAgIGlmICghaXNBY3RpdmUpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIFRha2UgdmFyaWFibGVzIGZyb20gdGhlIHZpc2VtZSBpZiB0aGV5IGV4aXN0IGFuZCBkZWZhdWx0IHRvIHRoZSBsYXllclxyXG4gICAgICBjb25zdCB7XHJcbiAgICAgICAgbmFtZTogdmlzZW1lLFxyXG4gICAgICAgIGlzQWN0aXZlOiBpc1Zpc2VtZUFjdGl2ZSxcclxuICAgICAgICBkZWNheVJhdGUsXHJcbiAgICAgICAgYmxlbmRUaW1lLFxyXG4gICAgICAgIGVhc2luZ0ZuLFxyXG4gICAgICAgIG92ZXJyaWRlV2VpZ2h0LFxyXG4gICAgICB9ID0ge1xyXG4gICAgICAgIC4uLnRoaXMuX21hbmFnZWRMYXllcnNbbGF5ZXJOYW1lXSxcclxuICAgICAgICAuLi52aXNlbWVNYXBbbWFyay52YWx1ZV0sXHJcbiAgICAgIH07XHJcblxyXG4gICAgICBjb25zdCB2aXNlbWVOYW1lcyA9IHRoaXMuX2hvc3QuQW5pbWF0aW9uRmVhdHVyZS5nZXRBbmltYXRpb25CbGVuZE5hbWVzKFxyXG4gICAgICAgIGxheWVyTmFtZSxcclxuICAgICAgICBhbmltTmFtZVxyXG4gICAgICApO1xyXG5cclxuICAgICAgLy8gTWFrZSBzdXJlIHRoZSBuZXcgdmlzZW1lIGhhcyBhbiBhY3RpdmUgZnJlZUJsZW5kIHdlaWdodFxyXG4gICAgICBpZiAoIWlzVmlzZW1lQWN0aXZlIHx8ICF2aXNlbWVOYW1lcy5pbmNsdWRlcyh2aXNlbWUpKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBGaW5kIHRoZSBwZWFrIHdlaWdodCBmb3IgdGhlIHZpc2VtZSBhbmQgdGhlIGFtb3VudCBvZiB0aW1lIGl0IHNob3VsZFxyXG4gICAgICAvLyB0YWtlIHRvIHJlYWNoIGl0XHJcbiAgICAgIGxldCB3ZWlnaHQgPSAxO1xyXG4gICAgICBjb25zdCBkdXJhdGlvbiA9IG1hcmsuZHVyYXRpb24gLyAxMDAwO1xyXG4gICAgICBpZiAoZHVyYXRpb24gPCBibGVuZFRpbWUpIHtcclxuICAgICAgICBjb25zdCBsZXJwRmFjdG9yID0gYmxlbmRUaW1lID4gMCA/IGR1cmF0aW9uIC8gYmxlbmRUaW1lIDogMTtcclxuICAgICAgICB3ZWlnaHQgPVxyXG4gICAgICAgICAgb3ZlcnJpZGVXZWlnaHQgIT09IHVuZGVmaW5lZFxyXG4gICAgICAgICAgICA/IG92ZXJyaWRlV2VpZ2h0XHJcbiAgICAgICAgICAgIDogTWF0aFV0aWxzLmxlcnAoMCwgMSwgbGVycEZhY3Rvcik7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgYmxlbmRJblRpbWUgPSBNYXRoLm1pbihkdXJhdGlvbiwgYmxlbmRUaW1lKTtcclxuXHJcbiAgICAgIC8vIEZpbmQgdGhlIGFtb3VudCBhbmQgdGltZSB2aXNlbWUgd2lsbCBiZSBoZWxkIGZvclxyXG4gICAgICBjb25zdCBob2xkVGltZSA9IGR1cmF0aW9uIC0gYmxlbmRUaW1lO1xyXG5cclxuICAgICAgaWYgKGhvbGRUaW1lIDwgMCkge1xyXG4gICAgICAgIC8vIFBlcmZvcm0gaW4gLT4gb3V0IGFuaW1hdGlvblxyXG4gICAgICAgIHRoaXMuX2FuaW1hdGVTaW1wbGVWaXNlbWUoXHJcbiAgICAgICAgICBsYXllck5hbWUsXHJcbiAgICAgICAgICBhbmltTmFtZSxcclxuICAgICAgICAgIHZpc2VtZSxcclxuICAgICAgICAgIHdlaWdodCxcclxuICAgICAgICAgIGJsZW5kSW5UaW1lLFxyXG4gICAgICAgICAgYmxlbmRUaW1lLFxyXG4gICAgICAgICAgZWFzaW5nRm5cclxuICAgICAgICApO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IGxlcnBGYWN0b3IgPVxyXG4gICAgICAgICAgZGVjYXlSYXRlLnNlY29uZHMgPiAwID8gaG9sZFRpbWUgLyBkZWNheVJhdGUuc2Vjb25kcyA6IDE7XHJcbiAgICAgICAgLy8gUGVyZm9ybSBpbiAtPiBob2xkIC0+IG91dCBhbmltYXRpb25cclxuICAgICAgICBjb25zdCBkZWNheVdlaWdodCA9IE1hdGhVdGlscy5sZXJwKFxyXG4gICAgICAgICAgd2VpZ2h0LFxyXG4gICAgICAgICAgd2VpZ2h0ICogZGVjYXlSYXRlLmFtb3VudCxcclxuICAgICAgICAgIE1hdGgubWluKDEsIGxlcnBGYWN0b3IpXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLl9hbmltYXRlSGVsZFZpc2VtZShcclxuICAgICAgICAgIGxheWVyTmFtZSxcclxuICAgICAgICAgIGFuaW1OYW1lLFxyXG4gICAgICAgICAgdmlzZW1lLFxyXG4gICAgICAgICAgd2VpZ2h0LFxyXG4gICAgICAgICAgZGVjYXlXZWlnaHQsXHJcbiAgICAgICAgICBibGVuZEluVGltZSxcclxuICAgICAgICAgIGhvbGRUaW1lLFxyXG4gICAgICAgICAgYmxlbmRUaW1lLFxyXG4gICAgICAgICAgZWFzaW5nRm5cclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFuaW1hdGUgYSB2aXNlbWUgYmxlbmQgd2VpZ2h0IHRvd2FyZHMgYSB2YWx1ZSBhbmQgdGhlbiBiYWNrIHRvIHplcm8uXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVyTmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRoYXQgY29udGFpbnMgdGhlIHZpc2VtZS5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gYW5pbU5hbWUgLSBOYW1lIG9mIHRoZSBmcmVlYmxlbmQgYW5pbWF0aW9uIHRoYXQgY29udGFpbnNcclxuICAgKiB0aGUgdmlzZW1lLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB2aXNlbWVOYW1lIC0gTmFtZSBvZiB0aGUgYmxlbmQgd2VpZ2h0IHRvIG1hbmlwdWxhdGUuXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IHdlaWdodCAtIFBlYWsgd2VpZ2h0IHRvIGFuaW1hdGUgdG93YXJkcy5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gYmxlbmRJblRpbWUgLSBBbW91bnQgb2YgdGltZSBpdCBzaG91bGQgdGFrZSB0byByZWFjaCB0aGVcclxuICAgKiBwZWFrIHdlaWdodC5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gYmxlbmRPdXRUaW1lIC0gQW1vdW50IG9mIHRpbWUgaXQgc2hvdWxkIHRha2UgdG8gYW5pbWF0ZSBiYWNrXHJcbiAgICogdG8gemVybyBhZnRlciByZWFjaGluZyB0aGUgcGVhayB3ZWlnaHQuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZWFzaW5nRm4gLSBFYXNpbmcgZnVuY3Rpb24gdG8gdXNlIGR1cmluZyBhbmltYXRpb24uXHJcbiAgICovXHJcbiAgX2FuaW1hdGVTaW1wbGVWaXNlbWUoXHJcbiAgICBsYXllck5hbWUsXHJcbiAgICBhbmltTmFtZSxcclxuICAgIHZpc2VtZU5hbWUsXHJcbiAgICBwZWFrV2VpZ2h0LFxyXG4gICAgYmxlbmRJblRpbWUsXHJcbiAgICBibGVuZE91dFRpbWUsXHJcbiAgICBlYXNpbmdGblxyXG4gICkge1xyXG4gICAgLy8gQW5pbWF0ZSB0b3dhcmRzIHRoZSBwZWFrIHZhbHVlXHJcbiAgICBjb25zdCB3ZWlnaHRQcm9taXNlID0gdGhpcy5faG9zdC5BbmltYXRpb25GZWF0dXJlLnNldEFuaW1hdGlvbkJsZW5kV2VpZ2h0KFxyXG4gICAgICBsYXllck5hbWUsXHJcbiAgICAgIGFuaW1OYW1lLFxyXG4gICAgICB2aXNlbWVOYW1lLFxyXG4gICAgICBwZWFrV2VpZ2h0LFxyXG4gICAgICBibGVuZEluVGltZSxcclxuICAgICAgZWFzaW5nRm5cclxuICAgICk7XHJcblxyXG4gICAgLy8gQW5pbWF0ZSBiYWNrIHRvIHplcm8gaWYgdGhlcmUgd2FzIG5vIHdlaWdodCBpbnRlcnJ1cHRpb25cclxuICAgIHdlaWdodFByb21pc2UudGhlbigoKSA9PiB7XHJcbiAgICAgIGlmICghd2VpZ2h0UHJvbWlzZS5jYW5jZWxlZCkge1xyXG4gICAgICAgIHRoaXMuX2hvc3QuQW5pbWF0aW9uRmVhdHVyZS5zZXRBbmltYXRpb25CbGVuZFdlaWdodChcclxuICAgICAgICAgIGxheWVyTmFtZSxcclxuICAgICAgICAgIGFuaW1OYW1lLFxyXG4gICAgICAgICAgdmlzZW1lTmFtZSxcclxuICAgICAgICAgIDAsXHJcbiAgICAgICAgICBibGVuZE91dFRpbWUsXHJcbiAgICAgICAgICBlYXNpbmdGblxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQW5pbWF0ZSBhIHZpc2VtZSBibGVuZCB3ZWlnaHQgdG93YXJkcyBhIHZhbHVlIGFuZCB0aGVuIGJhY2sgdG8gemVyby5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGF5ZXJOYW1lIC0gTmFtZSBvZiB0aGUgbGF5ZXIgdGhhdCBjb250YWlucyB0aGUgdmlzZW1lLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhbmltTmFtZSAtIE5hbWUgb2YgdGhlIGZyZWVibGVuZCBhbmltYXRpb24gdGhhdCBjb250YWluc1xyXG4gICAqIHRoZSB2aXNlbWUuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHZpc2VtZU5hbWUgLSBOYW1lIG9mIHRoZSBibGVuZCB3ZWlnaHQgdG8gbWFuaXB1bGF0ZS5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gcGVha1dlaWdodCAtIFBlYWsgd2VpZ2h0IHRvIGFuaW1hdGUgdG93YXJkcy5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gZGVjYXlXZWlnaHQgLSBXZWlnaHQgdG8gYW5pbWF0ZSB0b3dhcmRzIGFmdGVyIHJlYWNoaW5nIHRoZVxyXG4gICAqIHBlYWsgd2VpZ2h0LlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBibGVuZEluVGltZSAtIEFtb3VudCBvZiB0aW1lIGl0IHNob3VsZCB0YWtlIHRvIHJlYWNoIHRoZVxyXG4gICAqIHBlYWsgd2VpZ2h0LlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBob2xkVGltZSAtIEFtb3VudCBvZiB0aW1lIGl0IHNob3VsZCB0YWtlIHRvIHJlYWNoIHRoZSBkZWNheVxyXG4gICAqIHdlaWdodCBhZnRlciB0aGUgcGVhayB3ZWlnaHQgaGFzIGJlZW4gcmVhY2hlZC5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gYmxlbmRPdXRUaW1lIC0gQW1vdW50IG9mIHRpbWUgaXQgc2hvdWxkIHRha2UgdG8gYW5pbWF0ZSBiYWNrXHJcbiAgICogdG8gemVybyBhZnRlciByZWFjaGluZyB0aGUgZGVjYXkgd2VpZ2h0LlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGVhc2luZ0ZuIC0gRWFzaW5nIGZ1bmN0aW9uIHRvIHVzZSBkdXJpbmcgYW5pbWF0aW9uLlxyXG4gICAqL1xyXG4gIGFzeW5jIF9hbmltYXRlSGVsZFZpc2VtZShcclxuICAgIGxheWVyTmFtZSxcclxuICAgIGFuaW1OYW1lLFxyXG4gICAgdmlzZW1lTmFtZSxcclxuICAgIHBlYWtXZWlnaHQsXHJcbiAgICBkZWNheVdlaWdodCxcclxuICAgIGJsZW5kSW5UaW1lLFxyXG4gICAgaG9sZFRpbWUsXHJcbiAgICBibGVuZE91dFRpbWUsXHJcbiAgICBlYXNpbmdGblxyXG4gICkge1xyXG4gICAgLy8gQW5pbWF0ZSB0b3dhcmRzIHRoZSBwZWFrIHZhbHVlXHJcbiAgICBjb25zdCBzdGFydFByb21pc2UgPSB0aGlzLl9ob3N0LkFuaW1hdGlvbkZlYXR1cmUuc2V0QW5pbWF0aW9uQmxlbmRXZWlnaHQoXHJcbiAgICAgIGxheWVyTmFtZSxcclxuICAgICAgYW5pbU5hbWUsXHJcbiAgICAgIHZpc2VtZU5hbWUsXHJcbiAgICAgIHBlYWtXZWlnaHQsXHJcbiAgICAgIGJsZW5kSW5UaW1lLFxyXG4gICAgICBlYXNpbmdGblxyXG4gICAgKTtcclxuXHJcbiAgICBhd2FpdCBzdGFydFByb21pc2U7XHJcblxyXG4gICAgaWYgKCFzdGFydFByb21pc2UuY2FuY2VsZWQpIHtcclxuICAgICAgLy8gQW5pbWF0ZSB0b3dhcmRzIHRoZSBkZWNheSB2YWx1ZSBpZiB0aGVyZSB3YXMgbm8gd2VpZ2h0IGludGVycnVwdGlvblxyXG4gICAgICBjb25zdCBob2xkUHJvbWlzZSA9IHRoaXMuX2hvc3QuQW5pbWF0aW9uRmVhdHVyZS5zZXRBbmltYXRpb25CbGVuZFdlaWdodChcclxuICAgICAgICBsYXllck5hbWUsXHJcbiAgICAgICAgYW5pbU5hbWUsXHJcbiAgICAgICAgdmlzZW1lTmFtZSxcclxuICAgICAgICBkZWNheVdlaWdodCxcclxuICAgICAgICBob2xkVGltZSxcclxuICAgICAgICBlYXNpbmdGblxyXG4gICAgICApO1xyXG5cclxuICAgICAgYXdhaXQgaG9sZFByb21pc2U7XHJcblxyXG4gICAgICBpZiAoIWhvbGRQcm9taXNlLmNhbmNlbGVkKSB7XHJcbiAgICAgICAgLy8gQW5pbWF0ZSBiYWNrIHRvIHplcm8gaWYgdGhlcmUgd2FzIG5vIHdlaWdodCBpbnRlcnJ1cHRpb25cclxuICAgICAgICB0aGlzLl9ob3N0LkFuaW1hdGlvbkZlYXR1cmUuc2V0QW5pbWF0aW9uQmxlbmRXZWlnaHQoXHJcbiAgICAgICAgICBsYXllck5hbWUsXHJcbiAgICAgICAgICBhbmltTmFtZSxcclxuICAgICAgICAgIHZpc2VtZU5hbWUsXHJcbiAgICAgICAgICAwLFxyXG4gICAgICAgICAgYmxlbmRPdXRUaW1lLFxyXG4gICAgICAgICAgZWFzaW5nRm5cclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIGFuZCBzZXRzIHRoZSBhbW91bnQgb2YgdGltZSBpbiBzZWNvbmRzIHRvIG5lZ2F0aXZlbHkgb2Zmc2V0IHNwZWVjaG1hcmtcclxuICAgKiBlbWlzc2lvbiBieS5cclxuICAgKlxyXG4gICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICovXHJcbiAgZ2V0IHZpc2VtZUxlYWRUaW1lKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3Zpc2VtZUxlYWRUaW1lO1xyXG4gIH1cclxuXHJcbiAgc2V0IHZpc2VtZUxlYWRUaW1lKHNlY29uZHMpIHtcclxuICAgIHRoaXMuX3Zpc2VtZUxlYWRUaW1lID0gc2Vjb25kcztcclxuXHJcbiAgICBpZiAodGhpcy5faG9zdC5UZXh0VG9TcGVlY2hGZWF0dXJlKSB7XHJcbiAgICAgIHRoaXMuX2hvc3QuVGV4dFRvU3BlZWNoRmVhdHVyZS5zcGVlY2htYXJrT2Zmc2V0ID0gLXNlY29uZHM7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTdGFydCBrZWVwaW5nIHRyYWNrIG9mIGFuIGFuaW1hdGlvbiBsYXllciB0aGF0IG93bnMgYSBmcmVlQmxlbmQgYW5pbWF0aW9uXHJcbiAgICogd2l0aCBibGVuZFdlaWdodHMgY29ycmVzcG9uZGluZyB0byB2aXNlbWVzLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVyTmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRvIGtlZXAgdHJhY2sgb2YuXHJcbiAgICogQHBhcmFtIHtPYmplY3Q9fSBvcHRpb25zIC0gT3B0aW9ucyBmb3IgdGhlIGxheWVyLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5hbmltYXRpb249J3Zpc2VtZXMnXSAtIE5hbWUgb2YgdGhlIGFuaW1hdGlvbiBvbiB0aGVcclxuICAgKiBsYXllciB0aGF0IHdpbGwgYmUgcGxheWVkIGR1cmluZyBzcGVlY2guIFRoaXMgYW5pbWF0aW9uIG11c3QgYmUgb2YgdHlwZVxyXG4gICAqIGZyZWVCbGVuZC5cclxuICAgKiBAcGFyYW0ge09iamVjdD19IGRlY2F5UmF0ZVxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbZGVjYXlSYXRlLmFtb3VudD0wLjVdIC0gVGhlIHBlcmNlbnRhZ2UgdG8gZGVjcmVhc2UgdGhlIHZpc2VtZSdzXHJcbiAgICogcGVhayB2YWx1ZSBieSBvdmVyIHRpbWUgb25jZSB0aGUgcGVhayB2YWx1ZSBoYXMgYmVlbiByZWFjaGVkLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbZGVjYXlSYXRlLnNlY29uZHM9MC41XSAtIFRoZSBhbW91bnQgb2YgdGltZSBpbiBzZWNvbmRzIHRvXHJcbiAgICogZGVjcmVhc2UgdGhlIHZpc2VtZSdzIHdlaWdodCBvbmNlIGl0IGhhcyByZWFjaGVkIGl0cyBwZWFrIHZhbHVlLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyPX0gW29wdGlvbnMuYmxlbmRUaW1lPVtMaXBzeW5jRmVhdHVyZS5ERUZBVUxUX0xBWUVSX09QVElPTlMuYmxlbmRUaW1lXXtAbGluayBMaXBzeW5jRmVhdHVyZSNERUZBVUxUX0xBWUVSX09QVElPTlMjYmxlbmRUaW1lfV0gLVxyXG4gICAqIERlZmF1bHQgYW1vdW50IG9mIHRpbWUgdG8gdXNlIHdoZW4gbWFuaXB1bGF0aW5nIGFuaW1hdGlvbiBibGVuZFdlaWdodHMuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9wdGlvbnMuZWFzaW5nRm4gLSBEZWZhdWx0IGVhc2luZyBmdW5jdGlvbiB0byB1c2Ugd2hlblxyXG4gICAqIG1hbmlwdWxhdGluZyBhbmltYXRpb24gYmxlbmRXZWlnaHRzLlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucy52aXNlbWVNYXA9RGVmYXVsdFZpc2VtZU1hcF0gLSBPYmplY3QgY29udGFpbmluZyBrZXkvdmFsdWUgcGFpcnMgb2ZcclxuICAgKiBQb2xseSB2aXNlbWUgbmFtZXMgbWFwcGVkIHRvIG9iamVjdHMgY29udGFpbmluZyB0aGUgbmFtZSBvZiB0aGUgY29ycmVzcG9uZGluZ1xyXG4gICAqIGFuaW1hdGlvbiBibGVuZFdlaWdodCBhbmQgYW55IG90aGVyIGFuaW1hdGlvbiBvcHRpb25zIHRvIHVzZSBzdWNoIGFzIHZpc2VtZVxyXG4gICAqIHNwZWNpZmljIGJsZW5kIHRpbWVzIGFuZCBlYXNpbmcgZnVuY3Rpb25zLlxyXG4gICAqL1xyXG4gIHJlZ2lzdGVyVmlzZW1lTGF5ZXIoXHJcbiAgICBsYXllck5hbWUsXHJcbiAgICB7XHJcbiAgICAgIGFuaW1hdGlvbiA9ICd2aXNlbWVzJyxcclxuICAgICAgZGVjYXlSYXRlID0ge2Ftb3VudDogMC41LCBzZWNvbmRzOiAwLjV9LFxyXG4gICAgICBibGVuZFRpbWUgPSBMaXBzeW5jRmVhdHVyZS5ERUZBVUxUX0xBWUVSX09QVElPTlMuYmxlbmRUaW1lLFxyXG4gICAgICBlYXNpbmdGbixcclxuICAgICAgdmlzZW1lTWFwID0gRGVmYXVsdFZpc2VtZU1hcCxcclxuICAgIH0gPSB7fVxyXG4gICkge1xyXG4gICAgLy8gUmVnaXN0ZXIgdGhlIGxheWVyIGFuZCBhbmltYXRpb25cclxuICAgIHRoaXMucmVnaXN0ZXJMYXllcihsYXllck5hbWUsIHtcclxuICAgICAgZGVjYXlSYXRlLFxyXG4gICAgICBibGVuZFRpbWUsXHJcbiAgICAgIGVhc2luZ0ZuLFxyXG4gICAgICBhbmltYXRpb25zOiB7W2FuaW1hdGlvbl06IHt2aXNlbWVNYXB9fSxcclxuICAgIH0pO1xyXG4gICAgdGhpcy5fdmlzZW1lTGF5ZXJzW2xheWVyTmFtZV0gPSBhbmltYXRpb247XHJcblxyXG4gICAgLy8gVmFsaWRhdGUgdGhlIHZpc2VtZSBhbmltYXRpb25cclxuICAgIHRoaXMuX3JlZ2lzdGVyVmlzZW1lQW5pbWF0aW9uKGxheWVyTmFtZSwgYW5pbWF0aW9uKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFN0YXJ0IGtlZXBpbmcgdHJhY2sgb2YgYW4gYW5pbWF0aW9uIGxheWVyIHRoYXQgY29udGFpbnMgYSBsb29waW5nIGFuaW1hdGlvblxyXG4gICAqIHRvIGJlIHBsYXllZCBkdXJpbmcgc3BlZWNoLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVyTmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRvIGtlZXAgdHJhY2sgb2YuXHJcbiAgICogQHBhcmFtIHtPYmplY3Q9fSBvcHRpb25zIC0gT3B0aW9ucyBmb3IgdGhlIGxheWVyLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5hbmltYXRpb249J3N0YW5kX3RhbGsnXSAtIE5hbWUgb2YgdGhlIGFuaW1hdGlvbiBvbiB0aGVcclxuICAgKiBsYXllciB0aGF0IHdpbGwgYmUgcGxheWVkIGR1cmluZyBzcGVlY2guXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLmJsZW5kVGltZT1bTGlwc3luY0ZlYXR1cmUuREVGQVVMVF9MQVlFUl9PUFRJT05TLmJsZW5kVGltZV17QGxpbmsgTGlwc3luY0ZlYXR1cmUjREVGQVVMVF9MQVlFUl9PUFRJT05TI2JsZW5kVGltZX1dIC1cclxuICAgKiBEZWZhdWx0IGFtb3VudCBvZiB0aW1lIHRvIHVzZSB3aGVuIG1hbmlwdWxhdGluZyB0aGUgbGF5ZXIncyB3ZWlnaHRzLlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvcHRpb25zLmVhc2luZ0ZuIC0gRGVmYXVsdCBlYXNpbmcgZnVuY3Rpb24gdG8gdXNlIHdoZW5cclxuICAgKiBtYW5pcHVsYXRpbmcgdGhlIGxheWVyJ3Mgd2VpZ2h0cy5cclxuICAgKi9cclxuICByZWdpc3RlclRhbGtpbmdMYXllcihcclxuICAgIGxheWVyTmFtZSxcclxuICAgIHtcclxuICAgICAgYW5pbWF0aW9uID0gJ3N0YW5kX3RhbGsnLFxyXG4gICAgICBibGVuZFRpbWUgPSBMaXBzeW5jRmVhdHVyZS5ERUZBVUxUX0xBWUVSX09QVElPTlMuYmxlbmRUaW1lLFxyXG4gICAgICBlYXNpbmdGbixcclxuICAgIH0gPSB7fVxyXG4gICkge1xyXG4gICAgLy8gUmVnaXN0ZXIgdGhlIGxheWVyIGFuZCBhbmltYXRpb25cclxuICAgIHRoaXMucmVnaXN0ZXJMYXllcihsYXllck5hbWUsIHtcclxuICAgICAgYmxlbmRUaW1lLFxyXG4gICAgICBlYXNpbmdGbixcclxuICAgICAgYW5pbWF0aW9uczoge1thbmltYXRpb25dOiB7fX0sXHJcbiAgICB9KTtcclxuICAgIHRoaXMuX3RhbGtpbmdMYXllcnNbbGF5ZXJOYW1lXSA9IGFuaW1hdGlvbjtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFkZHMgYSBuYW1lc3BhY2UgdG8gdGhlIGhvc3Qgd2l0aCB0aGUgbmFtZSBvZiB0aGUgZmVhdHVyZSB0byBjb250YWluIHByb3BlcnRpZXNcclxuICAgKiBhbmQgbWV0aG9kcyBmcm9tIHRoZSBmZWF0dXJlIHRoYXQgdXNlcnMgb2YgdGhlIGhvc3QgbmVlZCBhY2Nlc3MgdG8uXHJcbiAgICpcclxuICAgKiBAc2VlIExpcHN5bmNGZWF0dXJlXHJcbiAgICovXHJcbiAgaW5zdGFsbEFwaSgpIHtcclxuICAgIC8qKlxyXG4gICAgICogQGlubmVyXHJcbiAgICAgKiBAbmFtZXNwYWNlIExpcHN5bmNGZWF0dXJlXHJcbiAgICAgKi9cclxuICAgIGNvbnN0IGFwaSA9IHN1cGVyLmluc3RhbGxBcGkoKTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBtZW1iZXJvZiBMaXBzeW5jRmVhdHVyZVxyXG4gICAgICogQG5hbWUgcmVnaXN0ZXJMYXllclxyXG4gICAgICogQGluc3RhbmNlXHJcbiAgICAgKiBAbWV0aG9kXHJcbiAgICAgKiBAc2VlIE1hbmFnZWRBbmltYXRpb25MYXllckludGVyZmFjZSNyZWdpc3RlckxheWVyXHJcbiAgICAgKi9cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBtZW1iZXJvZiBMaXBzeW5jRmVhdHVyZVxyXG4gICAgICogQG5hbWUgcmVnaXN0ZXJBbmltYXRpb25cclxuICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICogQG1ldGhvZFxyXG4gICAgICogQHNlZSBNYW5hZ2VkQW5pbWF0aW9uTGF5ZXJJbnRlcmZhY2UjcmVnaXN0ZXJBbmltYXRpb25cclxuICAgICAqL1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQG1lbWJlcm9mIExpcHN5bmNGZWF0dXJlXHJcbiAgICAgKiBAbmFtZSBzZXRMYXllcldlaWdodHNcclxuICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICogQG1ldGhvZFxyXG4gICAgICogQHNlZSBNYW5hZ2VkQW5pbWF0aW9uTGF5ZXJJbnRlcmZhY2Ujc2V0TGF5ZXJXZWlnaHRzXHJcbiAgICAgKi9cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBtZW1iZXJvZiBMaXBzeW5jRmVhdHVyZVxyXG4gICAgICogQG5hbWUgZW5hYmxlXHJcbiAgICAgKiBAaW5zdGFuY2VcclxuICAgICAqIEBtZXRob2RcclxuICAgICAqIEBzZWUgTWFuYWdlZEFuaW1hdGlvbkxheWVySW50ZXJmYWNlI2VuYWJsZVxyXG4gICAgICovXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAbWVtYmVyb2YgTGlwc3luY0ZlYXR1cmVcclxuICAgICAqIEBuYW1lIGRpc2FibGVcclxuICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICogQG1ldGhvZFxyXG4gICAgICogQHNlZSBNYW5hZ2VkQW5pbWF0aW9uTGF5ZXJJbnRlcmZhY2UjZGlzYWJsZVxyXG4gICAgICovXHJcblxyXG4gICAgT2JqZWN0LmFzc2lnbihhcGksIHtcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBtZW1iZXJvZiBMaXBzeW5jRmVhdHVyZVxyXG4gICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICogQG1ldGhvZFxyXG4gICAgICAgKiBAc2VlIGNvcmUvTGlwc3luY0ZlYXR1cmUjcmVnaXN0ZXJWaXNlbWVMYXllclxyXG4gICAgICAgKi9cclxuICAgICAgcmVnaXN0ZXJWaXNlbWVMYXllcjogdGhpcy5yZWdpc3RlclZpc2VtZUxheWVyLmJpbmQodGhpcyksXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbWVtYmVyb2YgTGlwc3luY0ZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBtZXRob2RcclxuICAgICAgICogQHNlZSBjb3JlL0xpcHN5bmNGZWF0dXJlI3JlZ2lzdGVyVGFsa2luZ0xheWVyXHJcbiAgICAgICAqL1xyXG4gICAgICByZWdpc3RlclRhbGtpbmdMYXllcjogdGhpcy5yZWdpc3RlclRhbGtpbmdMYXllci5iaW5kKHRoaXMpLFxyXG4gICAgfSk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAbWVtYmVyb2YgTGlwc3luY0ZlYXR1cmVcclxuICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICogQG5hbWUgdmlzZW1lTGVhZFRpbWVcclxuICAgICAqIEBzZWUgY29yZS9MaXBzeW5jRmVhdHVyZSN2aXNlbWVMZWFkVGltZVxyXG4gICAgICovXHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoYXBpLCAndmlzZW1lTGVhZFRpbWUnLCB7XHJcbiAgICAgIGdldDogKCkgPT4gdGhpcy52aXNlbWVMZWFkVGltZSxcclxuICAgICAgc2V0OiBzZWNvbmRzID0+IHtcclxuICAgICAgICB0aGlzLnZpc2VtZUxlYWRUaW1lID0gc2Vjb25kcztcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBhcGk7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBMaXBzeW5jRmVhdHVyZTtcclxuZXhwb3J0IHtEZWZhdWx0VmlzZW1lTWFwfTtcclxuIiwiLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cclxuLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXHJcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxyXG5cclxuLyogZXNsaW50LWRpc2FibGUgbWF4LWNsYXNzZXMtcGVyLWZpbGUgKi9cclxuLyogZXNsaW50LWRpc2FibGUgbm8tZW1wdHkgKi9cclxuaW1wb3J0IFRleHRUb1NwZWVjaEZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2UgZnJvbSAnY29yZS9hd3NwYWNrL1RleHRUb1NwZWVjaEZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2UnO1xyXG5cclxuLyoqXHJcbiAqIENsYXNzIGZhY3RvcnkgaW50ZXJmYWNlIGZvciB0aGF0IHJlZ2lzdGVycyBjYWxsYmFjayBtZXRob2Qgd2hlbiBhIHNzbWwgc3BlZWNobWFyayBldmVudCBpcyBlbWl0dGVkLlxyXG4gKlxyXG4gKiBAaW50ZXJmYWNlXHJcbiAqIEBleHRlbmRzIFRleHRUb1NwZWVjaEZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2VcclxuICovXHJcbmNsYXNzIFNTTUxTcGVlY2htYXJrSW50ZXJmYWNlIGV4dGVuZHMgVGV4dFRvU3BlZWNoRmVhdHVyZURlcGVuZGVudEludGVyZmFjZSB7XHJcbiAgLyoqXHJcbiAgICogV2hlbiBzc21sIGV2ZW50cyBhcmUgY2F1Z2h0LCB0aGlzIHdpbGwgdHJ5IHRvIHBhcnNlIHRoZSBzcGVlY2ggbWFyayB2YWx1ZSBhbmQgZXhlY3V0ZSBhbnkgZnVuY3Rpb24gd2hpY2ggbWVldHMgY3JpdGVyaWEgZGVmaW5lZCBpbiB0aGUgdmFsdWUuXHJcbiAgICogU3BlZWNoIG1hcmsgdmFsdWUgd2lsbCBiZSB0cmVhdGVkIGFzIHN0cmluZ2lmaWVkIGpzb24gZm9ybWF0IGNvbnRhaW5pbmcgcmVxdWlyZWQgZmVhdHVyZSBuYW1lLCBmdW5jdGlvbiBuYW1lIGFuZCBhcmd1bWVudCBhcnJheSB0byBwYXNzIGluLlxyXG4gICAqIEV4YW1wbGUgc3BlZWNoIG1hcmsgdmFsdWUgbWlnaHQgbG9vayBsaWtlOiAne1wiZmVhdHVyZVwiOlwiR2VzdHVyZUZlYXR1cmVcIiwgXCJtZXRob2RcIjpcInN3aXRjaFRvR2VzdHVyZVwiLCBcImFyZ3NcIjpbXCJnZW5yaWNBXCIsIDAuNV19J1xyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBldmVudCAtIEV2ZW50IGRhdGEgcGFzc2VkIGZyb20gdGhlIHNwZWVjaC5cclxuICAgKiBAcGFyYW0ge09iamVjdH0gZXZlbnQubWFyayAtIFNwZWVjaG1hcmsgb2JqZWN0LlxyXG4gICAqL1xyXG4gIF9vblNzbWwoe21hcmt9KSB7fVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGVzIGEgY2xhc3MgdGhhdCBpbXBsZW1lbnRzIHtAbGluayBTU01MU3BlZWNobWFya0ludGVyZmFjZX1cclxuICAgKiBhbmQgZXh0ZW5kcyBhIHNwZWNpZmllZCBiYXNlIGNsYXNzLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtDbGFzc30gQmFzZUNsYXNzIC0gVGhlIGNsYXNzIHRvIGV4dGVuZC5cclxuICAgKlxyXG4gICAqIEByZXR1cm4ge0NsYXNzfSBBIGNsYXNzIHRoYXQgZXh0ZW5kcyBgQmFzZUNsYXNzYCBhbmQgaW1wbGVtZW50cyB7QGxpbmsgU1NNTFNwZWVjaG1hcmtJbnRlcmZhY2V9LlxyXG4gICAqL1xyXG4gIHN0YXRpYyBNaXhpbihCYXNlQ2xhc3MpIHtcclxuICAgIGNvbnN0IFBhcmVudENsYXNzID0gVGV4dFRvU3BlZWNoRmVhdHVyZURlcGVuZGVudEludGVyZmFjZS5NaXhpbihCYXNlQ2xhc3MpO1xyXG4gICAgY29uc3QgU1NNTFNwZWVjaE1hcmtNaXhpbiA9IGNsYXNzIGV4dGVuZHMgUGFyZW50Q2xhc3Mge1xyXG4gICAgICBfb25Tc21sKHttYXJrfSkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICBjb25zdCB7ZmVhdHVyZSwgbWV0aG9kLCBhcmdzfSA9IEpTT04ucGFyc2UobWFyay52YWx1ZSk7XHJcbiAgICAgICAgICBpZiAodGhpcy5jb25zdHJ1Y3Rvci5uYW1lID09PSBmZWF0dXJlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNhbGxiYWNrID0gdGhpc1ttZXRob2RdO1xyXG4gICAgICAgICAgICBpZiAoY2FsbGJhY2sgJiYgdHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkodGhpcywgYXJncylcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBjb25zb2xlLndhcm4oYEZ1bmN0aW9uICR7bWV0aG9kfSBkb2VzIG5vdCBleGlzdCB3aXRoaW4gZmVhdHVyZSAke2ZlYXR1cmV9YClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gY2F0Y2goZSkge31cclxuICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gU1NNTFNwZWVjaE1hcmtNaXhpbjtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IFNTTUxTcGVlY2htYXJrSW50ZXJmYWNlO1xyXG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cclxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVC0wXHJcbmltcG9ydCBNYW5hZ2VkQW5pbWF0aW9uTGF5ZXJJbnRlcmZhY2UgZnJvbSAnLi9hbmltcGFjay9NYW5hZ2VkQW5pbWF0aW9uTGF5ZXJJbnRlcmZhY2UnO1xyXG5pbXBvcnQgU1NNTFNwZWVjaG1hcmtJbnRlcmZhY2UgZnJvbSAnLi9hd3NwYWNrL1NTTUxTcGVlY2htYXJrSW50ZXJmYWNlJztcclxuaW1wb3J0IEFic3RyYWN0SG9zdEZlYXR1cmUgZnJvbSAnLi9BYnN0cmFjdEhvc3RGZWF0dXJlJztcclxuaW1wb3J0IERlZmVycmVkIGZyb20gJy4vRGVmZXJyZWQnO1xyXG5pbXBvcnQgVXRpbHMgZnJvbSAnLi9VdGlscyc7XHJcblxyXG5jb25zdCBEZWZhdWx0R2VzdHVyZVdvcmRzID0ge1xyXG4gIGJpZzogW1xyXG4gICAgJ2FkZCcsXHJcbiAgICAnYWJvdmUnLFxyXG4gICAgJ2F1dGhvcml0eScsXHJcbiAgICAnYmlnJyxcclxuICAgICdjb3ZlcicsXHJcbiAgICAnZnVsbCcsXHJcbiAgICAnZmx5JyxcclxuICAgICdncm93JyxcclxuICAgICdncm93dGgnLFxyXG4gICAgJ2hpZ2gnLFxyXG4gICAgJ2h1Z2UnLFxyXG4gICAgJ2luY3JlYXNlJyxcclxuICAgICdtYWpvcicsXHJcbiAgICAnbWFqb3JpdHknLFxyXG4gICAgJ2xhcmdlJyxcclxuICAgICdsZWFkZXInLFxyXG4gICAgJ2xvdCcsXHJcbiAgICAncmFpc2UnLFxyXG4gICAgJ3Jpc2UnLFxyXG4gICAgJ3RhbGwnLFxyXG4gIF0sXHJcbiAgaGVhcnQ6IFtcclxuICAgICdhY2NlcHQnLFxyXG4gICAgJ2FkbWl0JyxcclxuICAgICdiZWxpZXZlJyxcclxuICAgICdjYXJlJyxcclxuICAgICdmZWVsaW5nJyxcclxuICAgICdmZWVsJyxcclxuICAgICdmcmllbmQnLFxyXG4gICAgJ2dyYXRlZnVsJyxcclxuICAgICdoYXBweScsXHJcbiAgICAnaGVhcnQnLFxyXG4gICAgJ2h1bWFuJyxcclxuICAgICdwYWluJyxcclxuICAgICdzYXZlJyxcclxuICAgICdzYWZlJyxcclxuICAgICdraW5kJyxcclxuICAgICdsb3ZlJyxcclxuICBdLFxyXG4gIGluOiBbXHJcbiAgICAnaW5jbHVkZScsXHJcbiAgICAnaW5jbHVkaW5nJyxcclxuICAgICdpbnNpZGUnLFxyXG4gICAgJ2ludG8nLFxyXG4gICAgJ25vdycsXHJcbiAgICAnbmVhcicsXHJcbiAgICAnbmVhcmVzdCcsXHJcbiAgICAnY2xvc2VzdCcsXHJcbiAgICAndGhlcmVpbicsXHJcbiAgICAnd2l0aGluJyxcclxuICBdLFxyXG4gIG1hbnk6IFtcclxuICAgICdhbGwnLFxyXG4gICAgJ2Fsd2F5cycsXHJcbiAgICAnYW55JyxcclxuICAgICdhbnlvbmUnLFxyXG4gICAgJ2Ftb25nJyxcclxuICAgICdhcmVhJyxcclxuICAgICdhcm91bmQnLFxyXG4gICAgJ2JlYXV0aWZ1bCcsXHJcbiAgICAnZW50aXJlJyxcclxuICAgICdlbnZpcm9ubWVudCcsXHJcbiAgICAnZW52aXJvbm1lbnRzJyxcclxuICAgICdlbnZpcm9ubWVudGFsJyxcclxuICAgICdldmVyeWJvZHknLFxyXG4gICAgJ2V2ZXJ5b25lJyxcclxuICAgICdldmVyeXRoaW5nJyxcclxuICAgICdhdWRpZW5jZScsXHJcbiAgICAndG90YWwnLFxyXG4gICAgJ2dyb3VwJyxcclxuICAgICdncm91cHMnLFxyXG4gICAgJ21pbGxpb24nLFxyXG4gICAgJ21pbGxpb25zJyxcclxuICAgICdvdGhlcnMnLFxyXG4gICAgJ2JpbGxpb24nLFxyXG4gICAgJ2JpbGxpb25zJyxcclxuICAgICdodW5kcmVkJyxcclxuICAgICdodW5kcmVkcycsXHJcbiAgICAnbWFueScsXHJcbiAgICAndGhvdXNhbmQnLFxyXG4gICAgJ3Rob3VzYW5kcycsXHJcbiAgICAnd29ybGQnLFxyXG4gICAgJ3dvcmxkcycsXHJcbiAgICAnb3V0c2lkZScsXHJcbiAgICAncmV2ZWFsJyxcclxuICBdLFxyXG4gIG1vdmVtZW50OiBbXHJcbiAgICAnYXdheScsXHJcbiAgICAnYWNyb3NzJyxcclxuICAgICdhaGVhZCcsXHJcbiAgICAnYWxvbmcnLFxyXG4gICAgJ2ZhcicsXHJcbiAgICAnZmFzdCcsXHJcbiAgICAnZm9sbG93JyxcclxuICAgICdnbycsXHJcbiAgICAnbGVhdmUnLFxyXG4gICAgJ21vdmUnLFxyXG4gICAgJ21vdmVtZW50JyxcclxuICAgICd0aHJvdWdoJyxcclxuICAgICd0aHJvdWdob3V0JyxcclxuICAgICd0b3dhcmQnLFxyXG4gICAgJ3RyYXZlbCcsXHJcbiAgICAndHVybmVkJyxcclxuICAgICdwYXNzZWQnLFxyXG4gIF0sXHJcbiAgb25lOiBbXHJcbiAgICAnc2luZ2xlJyxcclxuICAgICdvbmUnLFxyXG4gICAgJ29uY2UnLFxyXG4gICAgJ2ZpcnN0JyxcclxuICAgICdmaXJzdGx5JyxcclxuICAgICdvbmx5JyxcclxuICAgICdzb2xvJyxcclxuICAgICd3YXJuZWQnLFxyXG4gICAgJ3RydWx5JyxcclxuICAgICd1cCcsXHJcbiAgICAnYWxvbmUnLFxyXG4gIF0sXHJcbiAgYWdncmVzc2l2ZTogW1xyXG4gICAgJ3Bvd2VyJyxcclxuICAgICdwb3dlcnMnLFxyXG4gICAgJ3Bvd2VyZnVsJyxcclxuICAgICdhc3NlcnQnLFxyXG4gICAgJ2Fzc2VydGl2ZScsXHJcbiAgICAnc3Ryb25nJyxcclxuICAgICdzdHJvbmdlcicsXHJcbiAgICAnc3Ryb25nZXN0JyxcclxuICAgICdzdHJlbmd0aCcsXHJcbiAgICAnZmxleCcsXHJcbiAgICAnZGFuZycsXHJcbiAgICAnZGFtbicsXHJcbiAgICAnZGFtbml0JyxcclxuICAgICdkYXJuJyxcclxuICAgICdzaHVja3MnLFxyXG4gICAgJ2RvaCcsXHJcbiAgICAnZHJhdCcsXHJcbiAgICAnYW5ncnknLFxyXG4gICAgJ2FuZ3JpZXInLFxyXG4gICAgJ2FuZ3JpZXN0JyxcclxuICAgICdhZ2dyZXNzaXZlJyxcclxuICAgICdhbm5veWVkJyxcclxuICAgICdhbm5veWluZycsXHJcbiAgICAnYXR0YWNrJyxcclxuICAgICdhdHRhY2tpbmcnLFxyXG4gICAgJ29mZmVuc2UnLFxyXG4gICAgJ29mZmVuc2l2ZScsXHJcbiAgICAnYmF0dGxlJyxcclxuICBdLFxyXG4gIHlvdTogWyd5b3UnLCAneWFsbCcsIFwieSdhbGxcIiwgJ3lvdXInLCAneW91cnMnLCAndGhvdScsICd0aHknXSxcclxuICBkZWZlbnNlOiBbXHJcbiAgICAnZGVmZW5zZScsXHJcbiAgICAnZmVhcicsXHJcbiAgICAncmVwdWxzZWQnLFxyXG4gICAgJ3NjYXJlZCcsXHJcbiAgICAnc2NhcnknLFxyXG4gICAgJ3NjYXJpZXInLFxyXG4gICAgJ3NjYXJpZXN0JyxcclxuICAgICdmZWFyZnVsJyxcclxuICAgICdhZnJhaWQnLFxyXG4gICAgJ2Nvd2VyJyxcclxuICAgICdjb3dlcnMnLFxyXG4gICAgJ2Nvd2VyaW5nJyxcclxuICAgICdoaWRlb3VzJyxcclxuICAgICdkb29tZWQnLFxyXG4gICAgJ3RlcnJpZmllZCcsXHJcbiAgICAndGVycmlmeScsXHJcbiAgICAndGVycmlmeWluZycsXHJcbiAgICAndGVycmlmaWVzJyxcclxuICAgICdzcG9va3knLFxyXG4gICAgJ3Nwb29raWVyJyxcclxuICAgICdzcG9va2llc3QnLFxyXG4gIF0sXHJcbiAgd2F2ZTogW1xyXG4gICAgJ2hlbGxvJyxcclxuICAgICdoaScsXHJcbiAgICAnaGl5YScsXHJcbiAgICAnaG93ZHknLFxyXG4gICAgJ3dlbGNvbWUnLFxyXG4gICAgJ2Fsb2hhJyxcclxuICAgICdoZXlhJyxcclxuICAgICdoZXknLFxyXG4gICAgJ2J5ZScsXHJcbiAgICAnZ29vZGJ5ZScsXHJcbiAgICAnaG9sYScsXHJcbiAgICAnYWRpb3MnLFxyXG4gICAgJ2NoYW8nLFxyXG4gIF0sXHJcbiAgc2VsZjogWydteScsICdJJywgJ215c2VsZicsICdzZWxmJywgXCJJJ3ZlXCIsICdJdmUnLCAnbWUnLCAnbWluZScsICdvd24nXSxcclxufTtcclxuXHJcbi8qKlxyXG4gKiBHZXN0dXJlIGFsbG93cyB5b3UgdG8gcGxheSBhbmltYXRpb25zIG9uIGRlbWFuZCBvbiBvbmUgb3IgbW9yZSBsYXllcnMgZnJvbSBzY3JpcHRcclxuICogb3Igc3NtbC4gSWYgZ2VzdHVyZSBpcyBwbGF5ZWQgdGhhdCBpcyBhIFF1ZXVlU3RhdGUsIHRoZSBxdWV1ZSB3aWxsIGF1dG9tYXRpY2FsbHlcclxuICogYmUgcHJvZ3Jlc3NlZCBhZnRlciBhIGdpdmVuIGhvbGQgdGltZSBpZiBhIGxvb3BpbmcgcXVldWVkIHN0YXRlIGlzIHJlYWNoZWQuIEdlc3R1cmVcclxuICogbGF5ZXJzIGNhbiBvcHRpb25hbGx5IGJlIGF1dG9tYXRpY2FsbHkgZGlzYWJsZWQgd2hlbiBubyBnZXN0dXJlIGFuaW1hdGlvbiBpc1xyXG4gKiBpbiBwcm9ncmVzcy5cclxuICpcclxuICogQGV4dGVuZHMgQWJzdHJhY3RIb3N0RmVhdHVyZVxyXG4gKiBAaW1wbGVtZW50cyBTU01MU3BlZWNobWFya0ludGVyZmFjZVxyXG4gKiBAaW1wbGVtZW50cyBNYW5hZ2VkQW5pbWF0aW9uTGF5ZXJJbnRlcmZhY2VcclxuICovXHJcbmNsYXNzIEdlc3R1cmVGZWF0dXJlIGV4dGVuZHMgQWJzdHJhY3RIb3N0RmVhdHVyZS5taXgoXHJcbiAgU1NNTFNwZWVjaG1hcmtJbnRlcmZhY2UuTWl4aW4sXHJcbiAgTWFuYWdlZEFuaW1hdGlvbkxheWVySW50ZXJmYWNlLk1peGluXHJcbikge1xyXG4gIC8qKlxyXG4gICAqIEBjb25zdHJ1Y3RvclxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtjb3JlL0hvc3RPYmplY3R9IGhvc3QgLSBIb3N0IG9iamVjdCB0aGF0IG93bnMgdGhlIGZlYXR1cmUuXHJcbiAgICogQHBhcmFtIHtPYmplY3Q9fSBvcHRpb25zIC0gT3B0aW9uYWwgb3B0aW9ucyBmb3IgdGhlIGZlYXR1cmUuXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLmhvbGRUaW1lID0gM10gLSBBbW91bnQgb2YgdGltZSBpbiBzZWNvbmRzIHRoYXQgbXVzdFxyXG4gICAqIGVsYXBzZSBiZWZvcmUgYWR2YW5jaW5nIGEgZ2VzdHVyZSB0aGF0J3MgYSB7QGxpbmsgUXVldWVTdGF0ZX0gd2hlbiB0aGUgY3VycmVudFxyXG4gICAqIHN0YXRlIGluIHRoZSBxdWV1ZSBpcyBzZXQgdG8gbG9vcCBpbmZpbml0ZWx5LlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5taW5pbXVtSW50ZXJ2YWwgPSAwLjI1XSAtIFRoZSBtaW5pbXVtIGFtb3VudCBvZiB0aW1lXHJcbiAgICogaW4gc2Vjb25kcyB0aGF0IG11c3QgZWxhcHNlIGJlZm9yZSBhbm90aGVyIGdlc3R1cmUgY2FuIGJlIHBsYXllZC5cclxuICAgKiBAcGFyYW0gIHtPYmplY3R9IGxheWVycyAtIEFuIG9iamVjdCB0aGF0IG1hcHMgbGF5ZXIgbmFtZXMgdG8gbGF5ZXIgb3B0aW9ucy5cclxuICAgKiBUaGVzZSBhcmUgdGhlIGxheWVycyB0aGF0IHdpbGwgYmUgcmVnaXN0ZXJlZCBhcyB0cmFja2VkIGdlc3R1cmUgbGF5ZXJzLiBTZWVcclxuICAgKiB7QGxpbmsgTWFuYWdlZEFuaW1hdGlvbkxheWVySW50ZXJmYWNlI3JlZ2lzdGVyTGF5ZXJ9IGZvciBtb3JlIGluZm9ybWF0aW9uXHJcbiAgICogb24gZXhwZWN0ZWQgZm9ybWF0IGZvciBlYWNoIGxheWVyIG9wdGlvbnMgb2JqZWN0LlxyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKGhvc3QsIHtob2xkVGltZSA9IDMsIG1pbmltdW1JbnRlcnZhbCA9IDEsIGxheWVycyA9IHt9fSA9IHt9KSB7XHJcbiAgICBzdXBlcihob3N0KTtcclxuXHJcbiAgICB0aGlzLmhvbGRUaW1lID0gaG9sZFRpbWU7XHJcbiAgICB0aGlzLm1pbmltdW1JbnRlcnZhbCA9IG1pbmltdW1JbnRlcnZhbDtcclxuXHJcbiAgICAvLyBSZWdpc3RlciB0aGUgZ2VzdHVyZSBsYXllcnNcclxuICAgIE9iamVjdC5lbnRyaWVzKGxheWVycykuZm9yRWFjaCgoW25hbWUsIG9wdGlvbnMgPSB7fV0pID0+IHtcclxuICAgICAgdGhpcy5yZWdpc3RlckxheWVyKG5hbWUsIG9wdGlvbnMpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gYSB2YWxpZCBob2xkIHRpbWUgdmFsdWUuIElmIGhvbGQgdGltZSBpc24ndCBkZWZpbmVkIGZvciB0aGUgYW5pbWF0aW9uLFxyXG4gICAqIHRyeSB0byB1c2UgdGhlIGhvbGQgdGltZSBmb3IgdGhlIGxheWVyLiBJZiB0aGF0J3Mgbm90IGRlZmluZWQsIGZhbGwgYmFjayB0b1xyXG4gICAqIHRoZSBob2xkIHRpbWUgZm9yIHRoZSBmZWF0dXJlLlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBsYXllciAtIE1hbmFnZWQgbGF5ZXIgb3B0aW9ucyBvYmplY3QuXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IGFuaW1hdGlvbiAtIE1hbmFnZWQgYW5pbWF0aW9uIG9wdGlvbnMgb2JqZWN0LlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge251bWJlcn1cclxuICAgKi9cclxuICBfZ2V0SG9sZFRpbWUobGF5ZXIsIGFuaW1hdGlvbikge1xyXG4gICAgY29uc3QgbGF5ZXJIb2xkVGltZSA9XHJcbiAgICAgIGxheWVyLmhvbGRUaW1lICE9PSB1bmRlZmluZWQgPyBsYXllci5ob2xkVGltZSA6IHRoaXMuaG9sZFRpbWU7XHJcblxyXG4gICAgcmV0dXJuIGFuaW1hdGlvbi5ob2xkVGltZSAhPT0gdW5kZWZpbmVkXHJcbiAgICAgID8gYW5pbWF0aW9uLmhvbGRUaW1lXHJcbiAgICAgIDogbGF5ZXJIb2xkVGltZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiBhIHZhbGlkIG1pbmltdW0gaW50ZXJ2YWwgdmFsdWUuIElmIG1pbmltdW0gaW50ZXJ2YWwgaXNuJ3QgZGVmaW5lZCBmb3JcclxuICAgKiB0aGUgYW5pbWF0aW9uLCB0cnkgdG8gdXNlIHRoZSBtaW5pbXVtIGludGVydmFsIGZvciB0aGUgbGF5ZXIuIElmIHRoYXQncyBub3RcclxuICAgKiBkZWZpbmVkLCBmYWxsIGJhY2sgdG8gdGhlIG1pbmltdW0gaW50ZXJ2YWwgZm9yIHRoZSBmZWF0dXJlLlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBsYXllciAtIE1hbmFnZWQgbGF5ZXIgb3B0aW9ucyBvYmplY3QuXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IGFuaW1hdGlvbiAtIE1hbmFnZWQgYW5pbWF0aW9uIG9wdGlvbnMgb2JqZWN0LlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge251bWJlcn1cclxuICAgKi9cclxuICBfZ2V0TWluaW11bUludGVydmFsKGxheWVyLCBhbmltYXRpb24pIHtcclxuICAgIGNvbnN0IGxheWVyTWluaW11bUludGVydmFsID1cclxuICAgICAgbGF5ZXIubWluaW11bUludGVydmFsICE9PSB1bmRlZmluZWRcclxuICAgICAgICA/IGxheWVyLm1pbmltdW1JbnRlcnZhbFxyXG4gICAgICAgIDogdGhpcy5taW5pbXVtSW50ZXJ2YWw7XHJcblxyXG4gICAgcmV0dXJuIGFuaW1hdGlvbi5taW5pbXVtSW50ZXJ2YWwgIT09IHVuZGVmaW5lZFxyXG4gICAgICA/IGFuaW1hdGlvbi5taW5pbXVtSW50ZXJ2YWxcclxuICAgICAgOiBsYXllck1pbmltdW1JbnRlcnZhbDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENhbGxiYWNrIGZvciB7QGxpbmsgY29yZS9BbmltYXRpb25GZWF0dXJlI3BsYXlOZXh0QW5pbWF0aW9ufSBldmVudC4gSWYgdGhlXHJcbiAgICogZXZlbnQgaXMgZW1pdHRlZCBmb3IgYSBtYW5hZ2VkIGFuaW1hdGlvbiBhbmQgdGhlIG5ldyBxdWV1ZWQgc3RhdGUgY2Fubm90XHJcbiAgICogYWR2YW5jZSBvbiBpdHMgb3duLCBzdGFydCBhIG5ldyB0aW1lciBwcm9taXNlIHRoYXQgd2lsbCBhZHZhbmNlIHRoZSBxdWV1ZVxyXG4gICAqIG9uY2UgaXQgcmVzb2x2ZXMuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBPcHRpb25zIG9iamVjdCBwYXNzZWQgZnJvbSBwbGF5TmV4dEFuaW1hdGlvbiBldmVudC5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGF5ZXJOYW1lIC0gTmFtZSBvZiB0aGUgbGF5ZXIgdGhhdCBvd25zIHRoZSBxdWV1ZSBzdGF0ZS5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gYW5pbWF0aW9uTmFtZSAtIE5hbWUgb2YgdGhlIHF1ZXVlIHN0YXRlIGFuaW1hdGlvbi5cclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGNhbkFkdmFuY2UgLSBXaGV0aGVyIG9yIG5vdCB0aGUgY3VycmVudCBzdGF0ZSBpbiB0aGUgcXVldWVcclxuICAgKiBjYW4gYWR2YW5jZSBvbiBpdHMgb3duLlxyXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNRdWV1ZUVuZCAtIFdoZXRoZXIgdGhlIGN1cnJlbnQgc3RhdGUgaW4gdGhlIHF1ZXVlIGlzIHRoZSBsYXN0XHJcbiAgICogc3RhdGUgaW4gdGhlIHF1ZXVlLlxyXG4gICAqL1xyXG4gIF9vbk5leHQoe2xheWVyTmFtZSwgYW5pbWF0aW9uTmFtZSwgY2FuQWR2YW5jZSwgaXNRdWV1ZUVuZH0pIHtcclxuICAgIC8vIEV4aXQgaWYgdGhpcyBpc24ndCBhIG1hbmFnZWQgbGF5ZXJcclxuICAgIGNvbnN0IGxheWVyID0gdGhpcy5fbWFuYWdlZExheWVyc1tsYXllck5hbWVdO1xyXG4gICAgaWYgKGxheWVyID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEV4aXQgaWYgaXQgaXNuJ3QgYSBtYW5hZ2VkIGFuaW1hdGlvblxyXG4gICAgY29uc3QgYW5pbWF0aW9uID0gbGF5ZXIuYW5pbWF0aW9uc1thbmltYXRpb25OYW1lXTtcclxuICAgIGlmIChhbmltYXRpb24gPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gU3RhcnQgYSBuZXcgdGltZXIgZm9yIGxvb3Bpbmcgc3RhdGVzIHRoYXQgYXJlbid0IHRoZSBlbmQgb2YgdGhlIHF1ZXVlXHJcbiAgICBpZiAoIWNhbkFkdmFuY2UgJiYgIWlzUXVldWVFbmQgJiYgbGF5ZXIuY3VycmVudEdlc3R1cmUgPT09IGFuaW1hdGlvbk5hbWUpIHtcclxuICAgICAgY29uc3QgaG9sZFRpbWUgPSB0aGlzLl9nZXRIb2xkVGltZShsYXllciwgYW5pbWF0aW9uKTtcclxuICAgICAgbGF5ZXIuaG9sZFRpbWVyLmNhbmNlbCgpO1xyXG5cclxuICAgICAgLy8gU2tpcCB0byB0aGUgbmV4dCBhbmltYXRpb24gcmlnaHQgYXdheSBpZiBob2xkIHRpbWUgaXMgemVyb1xyXG4gICAgICBpZiAoaG9sZFRpbWUgPD0gMCkge1xyXG4gICAgICAgIHRoaXMuX2hvc3QuQW5pbWF0aW9uRmVhdHVyZS5wbGF5TmV4dEFuaW1hdGlvbihsYXllck5hbWUsIGFuaW1hdGlvbk5hbWUpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBXYWl0IGZvciB0aGUgZ2l2ZW4gaG9sZCB0aW1lIGJlZm9yZSBwcm9ncmVzc2luZ1xyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBsYXllci5ob2xkVGltZXIgPSBVdGlscy53YWl0KGhvbGRUaW1lLCB7XHJcbiAgICAgICAgICBvbkZpbmlzaDogKCkgPT4ge1xyXG4gICAgICAgICAgICAvLyBBZHZhbmNlIHRoZSBxdWV1ZSB0byB0aGUgbmV4dCBzdGF0ZVxyXG4gICAgICAgICAgICBpZiAobGF5ZXIuY3VycmVudEdlc3R1cmUgPT09IGFuaW1hdGlvbk5hbWUpIHtcclxuICAgICAgICAgICAgICB0aGlzLl9ob3N0LkFuaW1hdGlvbkZlYXR1cmUucGxheU5leHRBbmltYXRpb24oXHJcbiAgICAgICAgICAgICAgICBsYXllck5hbWUsXHJcbiAgICAgICAgICAgICAgICBhbmltYXRpb25OYW1lXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2FsbGJhY2sgZm9yIHtAbGluayBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjc3RvcEFuaW1hdGlvbn0gZXZlbnQuIElmIHRoZVxyXG4gICAqIGV2ZW50IGlzIGVtaXR0ZWQgZm9yIGEgbWFuYWdlZCBhbmltYXRpb24gY2FuY2VsIHRoZSBsYXllcidzIHN0b3JlZCB0aW1lcnMuXHJcbiAgICogSWYgdGhlIGxheWVyIGlzIHNldCB0byBhdXRvLWRpc2FibGUgc2V0IGl0cyB3ZWlnaHQgdG8gMC5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIE9wdGlvbnMgb2JqZWN0IHBhc3NlZCBmcm9tIHBsYXlOZXh0QW5pbWF0aW9uIGV2ZW50LlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllck5hbWUgLSBOYW1lIG9mIHRoZSBsYXllciB0aGF0IG93bnMgdGhlIHN0b3BwZWQgYW5pbWF0aW9uLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhbmltYXRpb25OYW1lIC0gTmFtZSBvZiB0aGUgYW5pbWF0aW9uIHRoYXQgd2FzIHN0b3BwZWQuXHJcbiAgICovXHJcbiAgX29uU3RvcCh7bGF5ZXJOYW1lLCBhbmltYXRpb25OYW1lfSkge1xyXG4gICAgLy8gTWFrZSBzdXJlIHRoZSBsYXllciBpcyBtYW5hZ2VkXHJcbiAgICBjb25zdCBsYXllciA9IHRoaXMuX21hbmFnZWRMYXllcnNbbGF5ZXJOYW1lXTtcclxuICAgIGlmIChsYXllciA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBNYWtlIHN1cmUgdGhlIGFuaW1hdGlvbiBpcyBtYW5hZ2VkXHJcbiAgICBjb25zdCBhbmltYXRpb24gPSBsYXllci5hbmltYXRpb25zW2FuaW1hdGlvbk5hbWVdO1xyXG4gICAgaWYgKGFuaW1hdGlvbiAhPT0gdW5kZWZpbmVkICYmIGFuaW1hdGlvbk5hbWUgPT09IGxheWVyLmN1cnJlbnRHZXN0dXJlKSB7XHJcbiAgICAgIGxheWVyLmN1cnJlbnRHZXN0dXJlID0gbnVsbDtcclxuICAgICAgbGF5ZXIucGxheVRpbWVyID0gbnVsbDtcclxuICAgICAgbGF5ZXIuaG9sZFRpbWVyLmNhbmNlbCgpO1xyXG5cclxuICAgICAgLy8gVHVybiBvZmYgbGF5ZXIgd2VpZ2h0XHJcbiAgICAgIGlmIChsYXllci5hdXRvRGlzYWJsZSkge1xyXG4gICAgICAgIHRoaXMuc2V0TGF5ZXJXZWlnaHRzKG5hbWUgPT4gbmFtZSA9PT0gbGF5ZXJOYW1lLCAwKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgX29uQW5pbWF0aW9uQWRkZWQoe2xheWVyTmFtZSwgYW5pbWF0aW9uTmFtZX0pIHtcclxuICAgIGNvbnN0IGxheWVyID0gdGhpcy5fbWFuYWdlZExheWVyc1tsYXllck5hbWVdO1xyXG5cclxuICAgIGlmIChsYXllciAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGNvbnN0IGFuaW1hdGlvbiA9IGxheWVyLmFuaW1hdGlvbnNbYW5pbWF0aW9uTmFtZV07XHJcblxyXG4gICAgICAvLyBSZWdpc3RlciB0aGUgYW5pbWF0aW9uIGFzIGFjdGl2ZSBpZiBpdCBpcyB1bm1hbmFnZWRcclxuICAgICAgaWYgKGFuaW1hdGlvbiA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgdGhpcy5yZWdpc3RlckFuaW1hdGlvbihsYXllck5hbWUsIGFuaW1hdGlvbk5hbWUpO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIE1hcmsgdGhlIGFuaW1hdGlvbiBhcyBhY3RpdmUgaWYgaXQgaXMgbWFuYWdlZFxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBhbmltYXRpb24uaXNBY3RpdmUgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZWdpc3RlckxheWVyKG5hbWUsIG9wdGlvbnMgPSB7fSkge1xyXG4gICAgc3VwZXIucmVnaXN0ZXJMYXllcihuYW1lLCB7XHJcbiAgICAgIC4uLm9wdGlvbnMsXHJcbiAgICAgIGhvbGRUaW1lcjogRGVmZXJyZWQucmVzb2x2ZSgpLFxyXG4gICAgICBwbGF5VGltZXI6IG51bGwsXHJcbiAgICAgIGN1cnJlbnRHZXN0dXJlOiBudWxsLFxyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKHRoaXMuX21hbmFnZWRMYXllcnNbbmFtZV0uaXNBY3RpdmUpIHtcclxuICAgICAgdGhpcy5faG9zdC5BbmltYXRpb25GZWF0dXJlLmdldEFuaW1hdGlvbnMobmFtZSkuZm9yRWFjaChhbmltID0+IHtcclxuICAgICAgICAvLyBBdXRvbWF0aWNhbGx5IHJlZ2lzdGVyIGFsbCBhbmltYXRpb25zIG9uIHRoZSBsYXllclxyXG4gICAgICAgIGlmICh0aGlzLl9tYW5hZ2VkTGF5ZXJzW25hbWVdLmFuaW1hdGlvbnNbYW5pbV0gPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgdGhpcy5yZWdpc3RlckFuaW1hdGlvbihcclxuICAgICAgICAgICAgbmFtZSxcclxuICAgICAgICAgICAgYW5pbSxcclxuICAgICAgICAgICAgdGhpcy5fbWFuYWdlZExheWVyc1tuYW1lXS5hbmltYXRpb25zW2FuaW1dXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZWdpc3RlckFuaW1hdGlvbihsYXllck5hbWUsIGFuaW1hdGlvbk5hbWUsIG9wdGlvbnMgPSB7fSkge1xyXG4gICAgLy8gVHJ5IHRvIGZhbGwgYmFjayB0byBhIGRlZmF1bHQgd29yZCBhcnJheVxyXG4gICAgaWYgKCEob3B0aW9ucy53b3JkcyBpbnN0YW5jZW9mIEFycmF5KSAmJiAhKG9wdGlvbnMud29yZHMgaW5zdGFuY2VvZiBTZXQpKSB7XHJcbiAgICAgIG9wdGlvbnMud29yZHMgPSBEZWZhdWx0R2VzdHVyZVdvcmRzW2FuaW1hdGlvbk5hbWVdIHx8IFtdO1xyXG4gICAgfVxyXG5cclxuICAgIHN1cGVyLnJlZ2lzdGVyQW5pbWF0aW9uKGxheWVyTmFtZSwgYW5pbWF0aW9uTmFtZSwgb3B0aW9ucyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGUgYW4gb2JqZWN0IHRoYXQgbWFwcyBzc21sIG1hcmsgc3ludGF4IHJlcXVpcmVkIHRvIHBsYXkgZWFjaCBnZXN0dXJlIHRvXHJcbiAgICogdGhlIHdvcmRzIGFycmF5IGFzc29jaWF0ZWQgd2l0aCBlYWNoIGdlc3R1cmUuIFdvcmRzIGFycmF5cyBhcmUgZGVmaW5lZCBhdCB3aGVuXHJcbiAgICogdGhlIGdlc3R1cmUgYW5pbWF0aW9uIGlzIHJlZ2lzdGVyZWQuIEdlc3R1cmVzIHdpdGhvdXQgYXNzb2NpYXRlZCB3b3JkcyB3aWxsXHJcbiAgICogYmUgZXhjbHVkZWQgZnJvbSB0aGUgcmVzdWx0LiBUaGUgcmVzdWx0aW5nIG9iamVjdCBjYW4gYmUgdXNlZCBhcyBhbiBpbnB1dFxyXG4gICAqIGZvciB7QGxpbmsgVGV4dFRvU3BlZWNoVXRpbHMuYXV0b0dlbmVyYXRlU1NNTE1hcmtzfSB0byB1cGRhdGUgYSBzcGVlY2ggc3RyaW5nXHJcbiAgICogd2l0aCB0aGUgbWFya3VwIHJlcXVpcmVkIHRvIHBsYXkgZ2VzdHVyZXMgdGltZWQgd2l0aCB0aGVpciBhc3NvY2lhdGVkIHdvcmRzLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge09iamVjdH1cclxuICAgKi9cclxuICBjcmVhdGVHZXN0dXJlTWFwKCkge1xyXG4gICAgY29uc3QgZ2VzdHVyZU1hcCA9IHt9O1xyXG5cclxuICAgIE9iamVjdC5lbnRyaWVzKHRoaXMuX21hbmFnZWRMYXllcnMpLmZvckVhY2goKFtsYXllck5hbWUsIHthbmltYXRpb25zfV0pID0+IHtcclxuICAgICAgT2JqZWN0LmVudHJpZXMoYW5pbWF0aW9ucykuZm9yRWFjaChcclxuICAgICAgICAoW1xyXG4gICAgICAgICAgYW5pbWF0aW9uTmFtZSxcclxuICAgICAgICAgIHtob2xkVGltZSwgbWluaW11bUludGVydmFsLCB3b3JkcywgdHJhbnNpdGlvblRpbWV9LFxyXG4gICAgICAgIF0pID0+IHtcclxuICAgICAgICAgIC8vIE9ubHkgc3RvcmUgZ2VzdHVyZXMgdGhhdCBoYXZlIGFueSBhc3NvY2lhdGVkIHdvcmRzXHJcbiAgICAgICAgICBpZiAod29yZHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgICAgLi4uKGhvbGRUaW1lICYmIHsgaG9sZFRpbWUgfSksXHJcbiAgICAgICAgICAgICAgLi4uKG1pbmltdW1JbnRlcnZhbCAmJiB7IG1pbmltdW1JbnRlcnZhbCB9KSxcclxuICAgICAgICAgICAgICAuLi4odHJhbnNpdGlvblRpbWUgJiYgeyB0cmFuc2l0aW9uVGltZSB9KSxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgY29uc3Qga2V5ID0ge1xyXG4gICAgICAgICAgICAgIGZlYXR1cmU6IHRoaXMuY29uc3RydWN0b3IubmFtZSxcclxuICAgICAgICAgICAgICBtZXRob2Q6ICdwbGF5R2VzdHVyZScsXHJcbiAgICAgICAgICAgICAgYXJnczogW2xheWVyTmFtZSwgYW5pbWF0aW9uTmFtZSwgb3B0aW9uc10sXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBnZXN0dXJlTWFwW0pTT04uc3RyaW5naWZ5KGtleSldID0gd29yZHM7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIGdlc3R1cmVNYXA7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGUgYW4gYXJyYXkgdGhhdCBjb250YWlucyBzc21sIG1hcmsgc3ludGF4IHJlcXVpcmVkIHRvIHBsYXkgZWFjaCBnZXN0dXJlXHJcbiAgICogdGhhdCBkb2VzIG5vdCBoYXZlIGFueSBhc3NvY2lhdGVkIHdvcmRzLiBUaGUgcmVzdWx0aW5nIGFycmF5IGNhbiBiZSB1c2VkIGFzXHJcbiAgICogYW4gaW5wdXQgZm9yIHtAbGluayBUZXh0VG9TcGVlY2hVdGlscy5hdXRvR2VuZXJhdGVTU01MTWFya3N9IG9yXHJcbiAgICoge0BsaW5rIFRleHRUb1NwZWVjaFV0aWxzLmFkZE1hcmtzVG9Vbm1hcmtlZFNlbnRlbmNlc30gdG8gdXBkYXRlIGEgc3BlZWNoXHJcbiAgICogc3RyaW5nIHdpdGggdGhlIG1hcmt1cCByZXF1aXJlZCB0byBwbGF5IHJhbmRvbSBnZXN0dXJlcyBhdCBlYWNoIHVubWFya2VkXHJcbiAgICogc2VudGVuY2UgaW4gdGhlIHN0cmluZy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7QXJyYXkuPHN0cmluZz49fSBsYXllcnMgLSBBbiBhcnJheSBvZiBuYW1lcyBvZiBtYW5hZ2VkIGxheWVycyB0byBnZW5lcmF0ZVxyXG4gICAqIG1hcmtzIGZvci4gSWYgdW5kZWZpbmVkLCB1c2UgYWxsIG1hbmFnZWQgbGF5ZXJzLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0FycmF5LjxzdHJpbmc+fVxyXG4gICAqL1xyXG4gIGNyZWF0ZUdlbmVyaWNHZXN0dXJlQXJyYXkobGF5ZXJzKSB7XHJcbiAgICBjb25zdCBnZW5lcmljR2VzdHVyZXMgPSBbXTtcclxuICAgIGxheWVycyA9IGxheWVycyB8fCBPYmplY3Qua2V5cyh0aGlzLl9tYW5hZ2VkTGF5ZXJzKTtcclxuXHJcbiAgICBsYXllcnMuZm9yRWFjaChsYXllck5hbWUgPT4ge1xyXG4gICAgICBjb25zdCBsYXllciA9IHRoaXMuX21hbmFnZWRMYXllcnNbbGF5ZXJOYW1lXTtcclxuXHJcbiAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgbGF5ZXIgaXMgbWFuYWdlZFxyXG4gICAgICBpZiAoIWxheWVyKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBPYmplY3QuZW50cmllcyhsYXllci5hbmltYXRpb25zKS5mb3JFYWNoKFxyXG4gICAgICAgIChbXHJcbiAgICAgICAgICBhbmltYXRpb25OYW1lLFxyXG4gICAgICAgICAgeyBob2xkVGltZSwgbWluaW11bUludGVydmFsLCB3b3JkcywgdHJhbnNpdGlvblRpbWUgfSxcclxuICAgICAgICBdKSA9PiB7XHJcbiAgICAgICAgICAvLyBPbmx5IHN0b3JlIGdlc3R1cmVzIHRoYXQgZG9uJ3QgaGF2ZSBhbnkgYXNzb2NpYXRlZCB3b3Jkc1xyXG4gICAgICAgICAgaWYgKCF3b3Jkcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcclxuICAgICAgICAgICAgICAuLi4oaG9sZFRpbWUgJiYgeyBob2xkVGltZSB9KSxcclxuICAgICAgICAgICAgICAuLi4obWluaW11bUludGVydmFsICYmIHsgbWluaW11bUludGVydmFsIH0pLFxyXG4gICAgICAgICAgICAgIC4uLih0cmFuc2l0aW9uVGltZSAmJiB7IHRyYW5zaXRpb25UaW1lIH0pLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBjb25zdCBrZXkgPSBKU09OLnN0cmluZ2lmeSh7XHJcbiAgICAgICAgICAgICAgZmVhdHVyZTogdGhpcy5jb25zdHJ1Y3Rvci5uYW1lLFxyXG4gICAgICAgICAgICAgIG1ldGhvZDogJ3BsYXlHZXN0dXJlJyxcclxuICAgICAgICAgICAgICBhcmdzOiBbbGF5ZXJOYW1lLCBhbmltYXRpb25OYW1lLCBvcHRpb25zXSxcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBpZiAoIWdlbmVyaWNHZXN0dXJlcy5pbmNsdWRlcyhrZXkpKSB7XHJcbiAgICAgICAgICAgICAgZ2VuZXJpY0dlc3R1cmVzLnB1c2goa2V5KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBnZW5lcmljR2VzdHVyZXM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQbGF5IGEgbWFuYWdlZCBnZXN0dXJlIGFuaW1hdGlvbi5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllck5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgbGF5ZXIgdGhhdCBjb250YWlucyB0aGUgZ2VzdHVyZVxyXG4gICAqIGFuaW1hdGlvbi5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gYW5pbWF0aW9uTmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBnZXN0dXJlIGFuaW1hdGlvbi5cclxuICAgKiBAcGFyYW0ge09iamVjdD19IG9wdGlvbnMgLSBPcHRpb25hbCBnZXN0dXJlIG9wdGlvbnMuXHJcbiAgICogQHBhcmFtIHtudW1iZXI9fSBvcHRpb25zLmhvbGRUaW1lIC0gVGhpcyBvcHRpb24gb25seSBhcHBsaWVzIHRvIHtAbGluayBRdWV1ZVN0YXRlfVxyXG4gICAqIGdlc3R1cmVzLiBXaGVuIGEgUXVldWVTdGF0ZSBnZXN0dXJlIHByb2dyZXNzZXMgdG8gYSBsb29waW5nIHN0YXRlLCB0aGlzIG9wdGlvblxyXG4gICAqIGRlZmluZXMgaG93IG1hbnkgc2Vjb25kcyBzaG91bGQgZWxhcHNlIGJlZm9yZSBtb3ZpbmcgdGhlIHF1ZXVlIGZvcndhcmQuIElmXHJcbiAgICogdW5kZWZpbmVkLCBpdCB3aWxsIGZhbGwgYmFjayBmaXJzdCB0byB0aGUgaG9sZFRpbWUgZGVmaW5lZCBpbiB0aGUgb3B0aW9ucyB3aGVuXHJcbiAgICogdGhlIGdlc3R1cmUgYW5pbWF0aW9uIHdhcyByZWdpc3RlcmVkIGFuZCB0aGVuIHRvIHRoZSBob2xkVGltZSBkZWZpbmVkIG9uIHRoZVxyXG4gICAqIGZlYXR1cmUuXHJcbiAgICogQHBhcmFtIHtudW1iZXI9fSBvcHRpb25zLm1pbmltdW1JbnRlcnZhbCAtIFRoZSBtaW5pbXVtIGFtb3VudCBvZiB0aW1lIHRoYXRcclxuICAgKiBtdXN0IGhhdmUgZWxhcHNlZCBzaW5jZSB0aGUgbGFzdCB0aW1lIGEgZ2VzdHVyZSB3YXMgcGxheWVkLlxyXG4gICAqL1xyXG4gIHBsYXlHZXN0dXJlKFxyXG4gICAgbGF5ZXJOYW1lLFxyXG4gICAgYW5pbWF0aW9uTmFtZSxcclxuICAgIHtob2xkVGltZSwgbWluaW11bUludGVydmFsLCB0cmFuc2l0aW9uVGltZSwgZm9yY2UgPSBmYWxzZX0gPSB7fVxyXG4gICkge1xyXG4gICAgLy8gTWFrZSBzdXJlIHRoZSBhbmltYXRpb24gaXMgcmVnaXN0ZXJlZFxyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLl9tYW5hZ2VkTGF5ZXJzW2xheWVyTmFtZV0gPT09IHVuZGVmaW5lZCB8fFxyXG4gICAgICB0aGlzLl9tYW5hZ2VkTGF5ZXJzW2xheWVyTmFtZV0uYW5pbWF0aW9uc1thbmltYXRpb25OYW1lXSA9PT0gdW5kZWZpbmVkXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5yZWdpc3RlckFuaW1hdGlvbihsYXllck5hbWUsIGFuaW1hdGlvbk5hbWUsIHtcclxuICAgICAgICBob2xkVGltZSxcclxuICAgICAgICBtaW5pbXVtSW50ZXJ2YWwsXHJcbiAgICAgICAgdHJhbnNpdGlvblRpbWUsXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGxheWVyID0gdGhpcy5fbWFuYWdlZExheWVyc1tsYXllck5hbWVdO1xyXG4gICAgY29uc3QgYW5pbWF0aW9uID0gbGF5ZXIuYW5pbWF0aW9uc1thbmltYXRpb25OYW1lXTtcclxuXHJcbiAgICAvLyBNYWtlIHN1cmUgdGhlIGFuaW1hdGlvbiBpcyBhY3RpdmVcclxuICAgIGlmICghYW5pbWF0aW9uLmlzQWN0aXZlKSB7XHJcbiAgICAgIC8vIENyZWF0ZSB3YXJuaW5nIG1lc3NhZ2UgYmFzZWQgb24gd2hpY2ggb2JqZWN0IGRvZXNuJ3QgZXhpc3QgeWV0XHJcbiAgICAgIGNvbnN0IHR5cGVOYW1lID0gbGF5ZXIuaXNBY3RpdmUgPyAnYW5pbWF0aW9uJyA6ICdsYXllcic7XHJcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBgU2tpcHBpbmcgZ2VzdHVyZSAke2FuaW1hdGlvbk5hbWV9IG9uIGxheWVyICR7bGF5ZXJOYW1lfSBmb3IgaG9zdCAke3RoaXMuX2hvc3QuaWR9LiBObyAke3R5cGVOYW1lfSBleGlzdHMgd2l0aCB0aGlzIG5hbWUgeWV0LmA7XHJcblxyXG4gICAgICBjb25zb2xlLndhcm4obWVzc2FnZSk7XHJcbiAgICAgIHJldHVybiBEZWZlcnJlZC5jYW5jZWwoe3JlYXNvbjogJ2luYWN0aXZlJywgdmFsdWU6IHR5cGVOYW1lfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ2hlY2sgaWYgdGhlIGdlc3R1cmUgaXMgYWxyZWFkeSBwbGF5aW5nXHJcbiAgICBjb25zdCB7Y3VycmVudEdlc3R1cmV9ID0gbGF5ZXI7XHJcbiAgICBpZiAoY3VycmVudEdlc3R1cmUgPT09IGFuaW1hdGlvbk5hbWUgJiYgIWZvcmNlKSB7XHJcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBgU2tpcHBpbmcgZ2VzdHVyZSAke2FuaW1hdGlvbk5hbWV9IG9uIGxheWVyICR7bGF5ZXJOYW1lfSBmb3IgaG9zdCAke3RoaXMuX2hvc3QuaWR9LiBUaGUgZ2VzdHVyZSBpcyBhbHJlYWR5IHBsYXlpbmcuIFVzZSBvcHRpb25zLmZvcmNlIHRvIGZvcmNlIHRoZSBnZXN0dXJlIHJlcGxheSwgd2hpY2ggbWF5IHJlc3VsdCBpbiBhIGhhcmQgdHJhbnNpdGlvbi5gO1xyXG5cclxuICAgICAgY29uc29sZS53YXJuKG1lc3NhZ2UpO1xyXG4gICAgICByZXR1cm4gRGVmZXJyZWQuY2FuY2VsKHtyZWFzb246ICdwbGF5aW5nJywgdmFsdWU6IGFuaW1hdGlvbk5hbWV9KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBVcGRhdGUgYW5pbWF0aW9uIG9wdGlvbnNcclxuICAgIGlmIChob2xkVGltZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGFuaW1hdGlvbi5ob2xkVGltZSA9IGhvbGRUaW1lO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChtaW5pbXVtSW50ZXJ2YWwgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBhbmltYXRpb24ubWluaW11bUludGVydmFsID0gbWluaW11bUludGVydmFsO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbWluaW11bUludGVydmFsID0gdGhpcy5fZ2V0TWluaW11bUludGVydmFsKGxheWVyLCBhbmltYXRpb24pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIENoZWNrIHRoZSBpbnRlcnZhbFxyXG4gICAgaWYgKCFmb3JjZSAmJiBsYXllci5wbGF5VGltZXIgIT09IG51bGwgJiYgbGF5ZXIucGxheVRpbWVyIDwgbWluaW11bUludGVydmFsKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICBgU2tpcHBpbmcgZ2VzdHVyZSAke2FuaW1hdGlvbk5hbWV9IG9uIGxheWVyICR7bGF5ZXJOYW1lfSBmb3IgaG9zdCAke3RoaXMuX2hvc3QuaWR9LiBNaW5pbXVtIGludGVydmFsICR7bWluaW11bUludGVydmFsfSBoYXMgbm90IGJlZW4gbWV0LmBcclxuICAgICAgKTtcclxuICAgICAgcmV0dXJuIERlZmVycmVkLmNhbmNlbCh7XHJcbiAgICAgICAgcmVhc29uOiAnbWluaW11bUludGVydmFsJyxcclxuICAgICAgICB2YWx1ZTogbWluaW11bUludGVydmFsIC0gbGF5ZXIucGxheVRpbWVyLFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBQbGF5IHRoZSBhbmltYXRpb25cclxuICAgIGxheWVyLmN1cnJlbnRHZXN0dXJlID0gYW5pbWF0aW9uTmFtZTtcclxuICAgIGxheWVyLnBsYXlUaW1lciA9IDA7XHJcbiAgICBsYXllci5ob2xkVGltZXIuY2FuY2VsKCk7XHJcbiAgICBpZiAobGF5ZXIuYXV0b0Rpc2FibGUpIHtcclxuICAgICAgdGhpcy5zZXRMYXllcldlaWdodHMobmFtZSA9PiBuYW1lID09PSBsYXllck5hbWUsIDEpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLl9ob3N0LkFuaW1hdGlvbkZlYXR1cmUucGxheUFuaW1hdGlvbihcclxuICAgICAgbGF5ZXJOYW1lLFxyXG4gICAgICBhbmltYXRpb25OYW1lLFxyXG4gICAgICB0cmFuc2l0aW9uVGltZVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZShkZWx0YVRpbWUpIHtcclxuICAgIHN1cGVyLnVwZGF0ZShkZWx0YVRpbWUpO1xyXG5cclxuICAgIC8vIEluY3JlbWVudCB0aGUgdGltZXJzXHJcbiAgICBPYmplY3QuZW50cmllcyh0aGlzLl9tYW5hZ2VkTGF5ZXJzKS5mb3JFYWNoKChbbmFtZSwgb3B0aW9uc10pID0+IHtcclxuICAgICAgaWYgKG9wdGlvbnMuaXNBY3RpdmUgJiYgIXRoaXMuX2hvc3QuQW5pbWF0aW9uRmVhdHVyZS5nZXRQYXVzZWQobmFtZSkpIHtcclxuICAgICAgICBvcHRpb25zLmhvbGRUaW1lci5leGVjdXRlKGRlbHRhVGltZSk7XHJcblxyXG4gICAgICAgIGlmIChvcHRpb25zLnBsYXlUaW1lciAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgb3B0aW9ucy5wbGF5VGltZXIgKz0gZGVsdGFUaW1lIC8gMTAwMDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgaW5zdGFsbEFwaSgpIHtcclxuICAgIC8qKlxyXG4gICAgICogQGlubmVyXHJcbiAgICAgKiBAbmFtZXNwYWNlIEdlc3R1cmVGZWF0dXJlXHJcbiAgICAgKi9cclxuICAgIGNvbnN0IGFwaSA9IHN1cGVyLmluc3RhbGxBcGkoKTtcclxuXHJcbiAgICBPYmplY3QuYXNzaWduKGFwaSwge1xyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIEdlc3R1cmVGZWF0dXJlXHJcbiAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgKiBAbWV0aG9kXHJcbiAgICAgICAqIEBzZWUgR2VzdHVyZUZlYXR1cmUjY3JlYXRlR2VzdHVyZU1hcFxyXG4gICAgICAgKi9cclxuICAgICAgY3JlYXRlR2VzdHVyZU1hcDogdGhpcy5jcmVhdGVHZXN0dXJlTWFwLmJpbmQodGhpcyksXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbWVtYmVyb2YgR2VzdHVyZUZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBtZXRob2RcclxuICAgICAgICogQHNlZSBHZXN0dXJlRmVhdHVyZSNjcmVhdGVHZW5lcmljR2VzdHVyZUFycmF5XHJcbiAgICAgICAqL1xyXG4gICAgICBjcmVhdGVHZW5lcmljR2VzdHVyZUFycmF5OiB0aGlzLmNyZWF0ZUdlbmVyaWNHZXN0dXJlQXJyYXkuYmluZCh0aGlzKSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBtZW1iZXJvZiBHZXN0dXJlRmVhdHVyZVxyXG4gICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICogQG1ldGhvZFxyXG4gICAgICAgKiBAc2VlIEdlc3R1cmVGZWF0dXJlI3BsYXlHZXN0dXJlXHJcbiAgICAgICAqL1xyXG4gICAgICBwbGF5R2VzdHVyZTogdGhpcy5wbGF5R2VzdHVyZS5iaW5kKHRoaXMpLFxyXG4gICAgfSk7XHJcbiAgfVxyXG59XHJcblxyXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhHZXN0dXJlRmVhdHVyZSwge1xyXG4gIERFRkFVTFRfTEFZRVJfT1BUSU9OUzoge1xyXG4gICAgdmFsdWU6IHtcclxuICAgICAgLi4uR2VzdHVyZUZlYXR1cmUuREVGQVVMVF9MQVlFUl9PUFRJT05TLFxyXG4gICAgICBhdXRvRGlzYWJsZTogdHJ1ZSxcclxuICAgIH0sXHJcbiAgICB3cml0YWJsZTogZmFsc2UsXHJcbiAgfSxcclxuICBFVkVOVF9ERVBFTkRFTkNJRVM6IHtcclxuICAgIHZhbHVlOiB7XHJcbiAgICAgIC4uLkdlc3R1cmVGZWF0dXJlLkVWRU5UX0RFUEVOREVOQ0lFUyxcclxuICAgICAgQW5pbWF0aW9uRmVhdHVyZToge1xyXG4gICAgICAgIC4uLkdlc3R1cmVGZWF0dXJlLkVWRU5UX0RFUEVOREVOQ0lFUy5BbmltYXRpb25GZWF0dXJlLFxyXG4gICAgICAgIHBsYXlOZXh0QW5pbWF0aW9uOiAnX29uTmV4dCcsXHJcbiAgICAgICAgc3RvcEFuaW1hdGlvbjogJ19vblN0b3AnLFxyXG4gICAgICAgIGludGVycnVwdEFuaW1hdGlvbjogJ19vblN0b3AnXHJcbiAgICAgIH0sXHJcbiAgICB9LFxyXG4gIH0sXHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgR2VzdHVyZUZlYXR1cmU7XHJcbmV4cG9ydCB7RGVmYXVsdEdlc3R1cmVXb3Jkc307XHJcbiIsIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxyXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTBcclxuaW1wb3J0IERlZmVycmVkIGZyb20gJ2NvcmUvRGVmZXJyZWQnO1xyXG5pbXBvcnQgVXRpbHMgZnJvbSAnY29yZS9VdGlscyc7XHJcbmltcG9ydCBNYXRoVXRpbHMgZnJvbSAnY29yZS9NYXRoVXRpbHMnO1xyXG5pbXBvcnQge0xpbmVhcn0gZnJvbSAnLi9FYXNpbmcnO1xyXG5cclxuLyoqXHJcbiAqIEEgY29sbGVjdGlvbiBvZiB1c2VmdWwgYW5pbWF0aW9uIGZ1bmN0aW9ucy5cclxuICpcclxuICogQGhpZGVjb25zdHJ1Y3RvclxyXG4gKi9cclxuY2xhc3MgQW5pbWF0aW9uVXRpbHMge1xyXG4gIHN0YXRpYyBsZXJwKGZyb20sIHRvLCBmYWN0b3IpIHtcclxuICAgIGNvbnNvbGUud2FybihgQW5pbWF0aW9uVXRpbHMubGVycCBpcyBiZWluZyBkZXByZWNhdGVkLiBVc2UgTWF0aFV0aWxzLmxlcnAgaW5zdGVhZC5gKTtcclxuXHJcbiAgICByZXR1cm4gTWF0aFV0aWxzLmxlcnAoZnJvbSwgdG8sIGZhY3Rvcik7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDbGFtcCBhIG51bWJlciBiZXR3ZWVuIDIgdmFsdWVzLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIC0gVmFsdWUgdG8gY2xhbXAuXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IFttaW49MF0gLSBNaW51bXVtIHZhbHVlLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbbWF4PTFdIC0gTWF4aW11bSB2YWx1ZS5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XHJcbiAgICovXHJcbiAgc3RhdGljIGNsYW1wKHZhbHVlLCBtaW4gPSAwLCBtYXggPSAxKSB7XHJcbiAgICBjb25zb2xlLndhcm4oYEFuaW1hdGlvblV0aWxzLmNsYW1wIGlzIGJlaW5nIGRlcHJlY2F0ZWQuIFVzZSBNYXRoVXRpbHMuY2xhbXAgaW5zdGVhZC5gKTtcclxuXHJcbiAgICByZXR1cm4gTWF0aFV0aWxzLmNsYW1wKHZhbHVlLCBtaW4sIG1heCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gYSBkZWZlcnJlZCBwcm9taXNlIHRoYXQgY2FuIGJlIHVzZWQgdG8gdXBkYXRlIHRoZSB2YWx1ZSBvZiBhIG51bWVyaWNcclxuICAgKiBwcm9wZXJ0eSBvZiB0aGlzIG9iamVjdCBvdmVyIHRpbWUuIFBhc3MgZGVsdGEgdGltZSBpbiBtaWxsaXNlY29uZHMgdG8gdGhlXHJcbiAgICogZGVmZXJyZWQgcHJvbWlzZSdzIGV4ZWN1dGUgbWV0aG9kIGluIGFuIHVwZGF0ZSBsb29wIHRvIGFuaW1hdGUgdGhlIHByb3BlcnR5XHJcbiAgICogdG93YXJkcyB0aGUgdGFyZ2V0IHZhbHVlLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IHByb3BlcnR5T3duZXIgLSBPYmplY3QgdGhhdCBjb250YWlucyB0aGUgcHJvcGVydHkgdG8gYW5pbWF0aW9uLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eU5hbWUgLSBOYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byBhbmltYXRlLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB0YXJnZXRWYWx1ZSAtIFRhcmdldCB2YWx1ZSB0byByZWFjaC5cclxuICAgKiBAcGFyYW0ge09iamVjdD19IG9wdGlvbnMgLSBPcHRpb25hbCBvcHRpb25zIG9iamVjdFxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5zZWNvbmRzPTBdIC0gTnVtYmVyIG9mIHNlY29uZHMgaXQgd2lsbCB0YWtlIHRvIHJlYWNoXHJcbiAgICogdGhlIHRhcmdldCB2YWx1ZS5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0aW9ucy5lYXNpbmdGbj1MaW5lYXIuSW5PdXRdIC0gRWFzaW5nIGZ1bmN0aW9uIHRvIHVzZSBmb3IgYW5pbWF0aW9uLlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRpb25zLm9uRmluaXNoXSAtIENhbGxiYWNrIHRvIGV4ZWN1dGUgb25jZSB0aGUgYW5pbWF0aW9uIGNvbXBsZXRlcy5cclxuICAgKiBUaGUgdGFyZ2V0IHZhbHVlIGlzIHBhc3NlZCBhcyBhIHBhcmFtZXRlci5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb3B0aW9ucy5vblByb2dyZXNzIC0gQ2FsbGJhY2sgdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGFuaW1hdGlvblxyXG4gICAqIHByb3BlcnR5IGlzIHVwZGF0ZWQgZHVyaW5nIHRoZSBhbmltYXRpb24uIFRoZSBwcm9wZXJ0eSdzIHZhbHVlIGF0IHRoZSB0aW1lIG9mXHJcbiAgICogdGhlIHVwZGF0ZSBpcyBwYXNzZWQgYXMgYSBwYXJhbWV0ZXIuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9wdGlvbnMub25DYW5jZWwgLSBDYWxsYmFjayB0byBleGVjdXRlIGlmIHRoZSB1c2VyIGNhbmNlbHMgdGhlXHJcbiAgICogYW5pbWF0aW9uIGJlZm9yZSBjb21wbGV0aW9uLiBUaGUgYW5pbWF0aW9uIHByb3BlcnR5J3MgdmFsdWUgYXQgdGhlIHRpbWUgb2ZcclxuICAgKiBjYW5jZWwgaXMgcGFzc2VkIGFzIGEgcGFyYW1ldGVyLlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvcHRpb25zLm9uRXJyb3IgLSBDYWxsYmFjayB0byBleGVjdXRlIGlmIHRoZSBhbmltYXRpb24gc3RvcHNcclxuICAgKiBiZWNhdXNlIGFuIGVycm9yIGlzIGVuY291bnRlcmVkLiBUaGUgZXJyb3IgbWVzc2FnZSBpcyBwYXNzZWQgYXMgYSBwYXJhbWV0ZXIuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7RGVmZXJyZWR9IFJlc29sdmVzIHdpdGggdGhlIHByb3BlcnR5J3MgdmFsdWUgb25jZSBpdCByZWFjaGVzIHRoZVxyXG4gICAqIHRhcmdldCB2YWx1ZS5cclxuICAgKi9cclxuICBzdGF0aWMgaW50ZXJwb2xhdGVQcm9wZXJ0eShcclxuICAgIHByb3BlcnR5T3duZXIsXHJcbiAgICBwcm9wZXJ0eU5hbWUsXHJcbiAgICB0YXJnZXRWYWx1ZSxcclxuICAgIHtzZWNvbmRzID0gMCwgZWFzaW5nRm4sIG9uRmluaXNoLCBvblByb2dyZXNzLCBvbkNhbmNlbCwgb25FcnJvcn0gPSB7fVxyXG4gICkge1xyXG4gICAgLy8gTWFrZSBzdXJlIHByb3BlcnR5IGlzIGFuIG9iamVjdFxyXG4gICAgaWYgKCEocHJvcGVydHlPd25lciBpbnN0YW5jZW9mIE9iamVjdCkpIHtcclxuICAgICAgY29uc3QgZSA9IG5ldyBFcnJvcihcclxuICAgICAgICBgQ2Fubm90IGludGVycG9sYXRlIHByb3BlcnR5ICR7cHJvcGVydHlOYW1lfS4gUHJvcGVydHkgb3duZXIgbXVzdCBiZSBhbiBvYmplY3QuYFxyXG4gICAgICApO1xyXG5cclxuICAgICAgaWYgKHR5cGVvZiBvbkVycm9yID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgb25FcnJvcihlKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIERlZmVycmVkLnJlamVjdChlKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBNYWtlIHN1cmUgcHJvcGVydHkgaXMgbnVtZXJpY1xyXG4gICAgaWYgKE51bWJlci5pc05hTihOdW1iZXIocHJvcGVydHlPd25lcltwcm9wZXJ0eU5hbWVdKSkpIHtcclxuICAgICAgY29uc3QgZSA9IG5ldyBFcnJvcihcclxuICAgICAgICBgQ2Fubm90IGludGVycG9sYXRlIHByb3BlcnR5ICR7cHJvcGVydHlOYW1lfS4gUHJvcGVydHkgbXVzdCBiZSBudW1lcmljLmBcclxuICAgICAgKTtcclxuXHJcbiAgICAgIGlmICh0eXBlb2Ygb25FcnJvciA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgIG9uRXJyb3IoZSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBEZWZlcnJlZC5yZWplY3QoZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gTWFrZSBzdXJlIHRoZSB0YXJnZXQgdmFsdWUgaXMgbnVtZXJpY1xyXG4gICAgaWYgKE51bWJlci5pc05hTihOdW1iZXIodGFyZ2V0VmFsdWUpKSkge1xyXG4gICAgICBjb25zdCBlID0gbmV3IEVycm9yKFxyXG4gICAgICAgIGBDYW5ub3QgaW50ZXJwb2xhdGUgcHJvcGVydHkgJHtwcm9wZXJ0eU5hbWV9IHRvIHZhbHVlICR7dGFyZ2V0VmFsdWV9LiBUYXJnZXQgdmFsdWUgbXVzdCBiZSBudW1lcmljLmBcclxuICAgICAgKTtcclxuXHJcbiAgICAgIGlmICh0eXBlb2Ygb25FcnJvciA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgIG9uRXJyb3IoZSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBEZWZlcnJlZC5yZWplY3QoZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUmVzb2x2ZSBpbW1lZGlhdGVseSBpZiB0aGUgdGFyZ2V0IGhhcyBhbHJlYWR5IGJlZW4gcmVhY2hlZFxyXG4gICAgY29uc3Qgc3RhcnRWYWx1ZSA9IHByb3BlcnR5T3duZXJbcHJvcGVydHlOYW1lXTtcclxuXHJcbiAgICBpZiAoc3RhcnRWYWx1ZSA9PT0gdGFyZ2V0VmFsdWUpIHtcclxuICAgICAgaWYgKHR5cGVvZiBvbkZpbmlzaCA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgIG9uRmluaXNoKHRhcmdldFZhbHVlKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIERlZmVycmVkLnJlc29sdmUodGFyZ2V0VmFsdWUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIERlZmF1bHQgdG8gbGluZWFyIGludGVycG9sYXRpb25cclxuICAgIGlmICh0eXBlb2YgZWFzaW5nRm4gIT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgaWYgKGVhc2luZ0ZuICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBjb25zb2xlLndhcm4oXHJcbiAgICAgICAgICBgSW52YWxpZCBwcm9wZXJ0eSBpbnRlcnBvbGF0aW9uIGVhc2luZ0ZuLiBEZWZhdWx0aW5nIHRvIGxpbmVhciBpbnRlcnBvbGF0aW9uLmBcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBlYXNpbmdGbiA9IExpbmVhci5Jbk91dDtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBpbnRlcnBvbGF0b3IgPSBVdGlscy53YWl0KHNlY29uZHMsIHtcclxuICAgICAgb25GaW5pc2g6ICgpID0+IHtcclxuICAgICAgICBwcm9wZXJ0eU93bmVyW3Byb3BlcnR5TmFtZV0gPSB0YXJnZXRWYWx1ZTtcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiBvbkZpbmlzaCA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgb25GaW5pc2godGFyZ2V0VmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgb25DYW5jZWw6ICgpID0+IHtcclxuICAgICAgICBpZiAodHlwZW9mIG9uQ2FuY2VsID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICBvbkNhbmNlbChwcm9wZXJ0eU93bmVyW3Byb3BlcnR5TmFtZV0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgb25Qcm9ncmVzczogcHJvZ3Jlc3MgPT4ge1xyXG4gICAgICAgIGlmIChwcm9wZXJ0eU93bmVyW3Byb3BlcnR5TmFtZV0gIT09IHRhcmdldFZhbHVlKSB7XHJcbiAgICAgICAgICAvLyBDYWxjdWxhdGUgdGhlIGxlcnAgZmFjdG9yXHJcbiAgICAgICAgICBjb25zdCBlYXNlRmFjdG9yID0gZWFzaW5nRm4ocHJvZ3Jlc3MpO1xyXG5cclxuICAgICAgICAgIGlmICh0eXBlb2YgZWFzZUZhY3RvciAhPT0gJ251bWJlcicpIHtcclxuICAgICAgICAgICAgY29uc3QgZSA9IG5ldyBFcnJvcihcclxuICAgICAgICAgICAgICBgSW52YWxpZCBwcm9wZXJ0eSBpbnRlcnBvbGF0aW9uIGVhc2luZ0ZuLiBFYXNpbmdGbiBtdXN0IHJldHVybiBhIG51bWJlci5gXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGludGVycG9sYXRvci5yZWplY3QoZSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyBVcGRhdGUgdGhlIHZhbHVlXHJcbiAgICAgICAgICBwcm9wZXJ0eU93bmVyW3Byb3BlcnR5TmFtZV0gPSBNYXRoVXRpbHMubGVycChcclxuICAgICAgICAgICAgc3RhcnRWYWx1ZSxcclxuICAgICAgICAgICAgdGFyZ2V0VmFsdWUsXHJcbiAgICAgICAgICAgIGVhc2VGYWN0b3JcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBTaWduYWwgcHJvZ3Jlc3NcclxuICAgICAgICBpZiAodHlwZW9mIG9uUHJvZ3Jlc3MgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgIG9uUHJvZ3Jlc3MocHJvcGVydHlPd25lcltwcm9wZXJ0eU5hbWVdKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFNpZ25hbCBjb21wbGV0aW9uIG9uY2UgdGltZSBpcyB1cFxyXG4gICAgICAgIGlmIChwcm9ncmVzcyA9PT0gMSkge1xyXG4gICAgICAgICAgcHJvcGVydHlPd25lcltwcm9wZXJ0eU5hbWVdID0gdGFyZ2V0VmFsdWU7XHJcbiAgICAgICAgICBpbnRlcnBvbGF0b3IucmVzb2x2ZSh0YXJnZXRWYWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICBvbkVycm9yLFxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIGludGVycG9sYXRvcjtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IEFuaW1hdGlvblV0aWxzO1xyXG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cclxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVC0wXHJcbmltcG9ydCBEZWZlcnJlZCBmcm9tICdjb3JlL0RlZmVycmVkJztcclxuaW1wb3J0IE1hdGhVdGlscyBmcm9tICdjb3JlL01hdGhVdGlscyc7XHJcbmltcG9ydCBBbmltYXRpb25VdGlscyBmcm9tICcuLi9BbmltYXRpb25VdGlscyc7XHJcblxyXG4vKipcclxuICogQmFzZSBjbGFzcyBmb3IgYSBzdGF0ZSBpbiBvdXIgYW5pbWF0aW9uIHN5c3RlbS5cclxuICpcclxuICogQGFic3RyYWN0XHJcbiAqL1xyXG5jbGFzcyBBYnN0cmFjdFN0YXRlIHtcclxuICAvKipcclxuICAgKiBAY29uc3RydWN0b3JcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0PX0gb3B0aW9ucyAtIE9wdGlvbnMgZm9yIHRoZSBhbmltYXRpb24gc3RhdGUuXHJcbiAgICogQHBhcmFtIHtzdHJpbmc9fSBvcHRpb25zLm5hbWUgLSBOYW1lIGZvciB0aGUgYW5pbWF0aW9uIHN0YXRlLiBOYW1lcyBtdXN0IGJlXHJcbiAgICogdW5pcXVlIGZvciB0aGUgY29udGFpbmVyIHRoZSBzdGF0ZSBpcyBhcHBsaWVkIHRvIGFuZCBzaG91bGQgYmUgdmFsaWRhdGVkIGF0XHJcbiAgICogdGhlIGNvbnRhaW5lciBsZXZlbC4gSWYgbm8gbmFtZSBpcyBnaXZlbiBpdCB3aWxsIGRlZmF1bHQgdG8gdGhlIGNvbnN0cnVjdG9yXHJcbiAgICogbmFtZS5cclxuICAgKiBAcGFyYW0ge3dlaWdodH0gW29wdGlvbnMud2VpZ2h0PTBdIC0gVGhlIDAtMSBhbW91bnQgb2YgaW5mbHVlbmNlIHRoZSBzdGF0ZSB3aWxsIGhhdmUuXHJcbiAgICovXHJcbiAgY29uc3RydWN0b3Iob3B0aW9ucyA9IHt9KSB7XHJcbiAgICB0aGlzLm5hbWUgPVxyXG4gICAgICBvcHRpb25zLm5hbWUgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMubmFtZSA6IHRoaXMuY29uc3RydWN0b3IubmFtZTtcclxuICAgIHRoaXMuX3dlaWdodCA9XHJcbiAgICAgIG9wdGlvbnMud2VpZ2h0ICE9PSB1bmRlZmluZWRcclxuICAgICAgICA/IE1hdGhVdGlscy5jbGFtcChvcHRpb25zLndlaWdodCwgMCwgMSlcclxuICAgICAgICA6IDA7XHJcbiAgICB0aGlzLl9pbnRlcm5hbFdlaWdodCA9IHRoaXMuX3dlaWdodDtcclxuICAgIHRoaXMuX3BhdXNlZCA9IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuX3Byb21pc2VzID0ge1xyXG4gICAgICBmaW5pc2g6IERlZmVycmVkLnJlc29sdmUoKSxcclxuICAgICAgd2VpZ2h0OiBEZWZlcnJlZC5yZXNvbHZlKCksXHJcbiAgICAgIHBsYXk6IERlZmVycmVkLnJlc29sdmUoKSxcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5fcGxheUNhbGxiYWNrcyA9IHtcclxuICAgICAgb25GaW5pc2g6IHVuZGVmaW5lZCxcclxuICAgICAgb25FcnJvcjogdW5kZWZpbmVkLFxyXG4gICAgICBvbkNhbmNlbDogdW5kZWZpbmVkLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgd2hldGhlciBvciBub3QgdGhlIHN0YXRlIGlzIGN1cnJlbnRseSBwYXVzZWQuXHJcbiAgICpcclxuICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAqL1xyXG4gIGdldCBwYXVzZWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fcGF1c2VkO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyBhbmQgc2V0cyB0aGUgdXNlciBkZWZpbmVkIHdlaWdodC5cclxuICAgKlxyXG4gICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICovXHJcbiAgZ2V0IHdlaWdodCgpIHtcclxuICAgIHJldHVybiB0aGlzLl93ZWlnaHQ7XHJcbiAgfVxyXG5cclxuICBzZXQgd2VpZ2h0KHdlaWdodCkge1xyXG4gICAgdGhpcy5fd2VpZ2h0ID0gTWF0aFV0aWxzLmNsYW1wKHdlaWdodCwgMCwgMSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHdoZXRoZXIgb3Igbm90IHRoZSB3ZWlnaHQgaXMgY3VycmVudGx5IGJlaW5nIGFuaW1hdGVkLlxyXG4gICAqXHJcbiAgICogQHJlYWRvbmx5XHJcbiAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICovXHJcbiAgZ2V0IHdlaWdodFBlbmRpbmcoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fcHJvbWlzZXMud2VpZ2h0ICYmIHRoaXMuX3Byb21pc2VzLndlaWdodC5wZW5kaW5nO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlcyB0aGUgdXNlciBkZWZpbmVkIHdlaWdodCBvdmVyIHRpbWUuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge251bWJlcn0gd2VpZ2h0IC0gVGhlIHRhcmdldCB3ZWlnaHQgdmFsdWUuXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtzZWNvbmRzPTBdIC0gVGhlIGFtb3VudCBvZiB0aW1lIGl0IHdpbGwgdGFrZSB0byByZWFjaCB0aGVcclxuICAgKiB0YXJnZXQgd2VpZ2h0LlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBlYXNpbmdGbiAtIFRoZSBlYXNpbmcgZnVuY3Rpb24gdG8gdXNlIGZvciBpbnRlcnBvbGF0aW9uLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0RlZmVycmVkfVxyXG4gICAqL1xyXG4gIHNldFdlaWdodCh3ZWlnaHQsIHNlY29uZHMgPSAwLCBlYXNpbmdGbikge1xyXG4gICAgdGhpcy5fcHJvbWlzZXMud2VpZ2h0LmNhbmNlbCgpO1xyXG4gICAgd2VpZ2h0ID0gTWF0aFV0aWxzLmNsYW1wKHdlaWdodCk7XHJcblxyXG4gICAgdGhpcy5fcHJvbWlzZXMud2VpZ2h0ID0gQW5pbWF0aW9uVXRpbHMuaW50ZXJwb2xhdGVQcm9wZXJ0eShcclxuICAgICAgdGhpcyxcclxuICAgICAgJ3dlaWdodCcsXHJcbiAgICAgIHdlaWdodCxcclxuICAgICAge3NlY29uZHMsIGVhc2luZ0ZufVxyXG4gICAgKTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5fcHJvbWlzZXMud2VpZ2h0O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgaW50ZXJuYWwgd2VpZ2h0LlxyXG4gICAqXHJcbiAgICogQHJlYWRvbmx5XHJcbiAgICogQHR5cGUge251bWJlcn1cclxuICAgKi9cclxuICBnZXQgaW50ZXJuYWxXZWlnaHQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5faW50ZXJuYWxXZWlnaHQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNdWx0aXBsaWVzIHRoZSB1c2VyIHdlaWdodCBieSBhIGZhY3RvciB0byBkZXRlcm1pbmUgdGhlIGludGVybmFsIHdlaWdodC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBmYWN0b3IgLSAwLTEgbXVsdGlwbGllciB0byBhcHBseSB0byB0aGUgdXNlciB3ZWlnaHQuXHJcbiAgICovXHJcbiAgdXBkYXRlSW50ZXJuYWxXZWlnaHQoZmFjdG9yKSB7XHJcbiAgICB0aGlzLl9pbnRlcm5hbFdlaWdodCA9IHRoaXMuX3dlaWdodCAqIGZhY3RvcjtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZSBhbnkgdmFsdWVzIHRoYXQgbmVlZCB0byBiZSBldmFsdWF0ZWQgZXZlcnkgZnJhbWUuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge251bWJlcn0gZGVsdGFUaW1lIC0gVGltZSBpbiBtaWxsaXNlY29uZHMgc2luY2UgdGhlIGxhc3QgdXBkYXRlLlxyXG4gICAqL1xyXG4gIHVwZGF0ZShkZWx0YVRpbWUpIHtcclxuICAgIGlmICghdGhpcy5fcGF1c2VkKSB7XHJcbiAgICAgIE9iamVjdC52YWx1ZXModGhpcy5fcHJvbWlzZXMpLmZvckVhY2gocHJvbWlzZSA9PiB7XHJcbiAgICAgICAgcHJvbWlzZS5leGVjdXRlKGRlbHRhVGltZSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU3RhcnQgcGxheWJhY2sgb2YgdGhlIHN0YXRlIGZyb20gdGhlIGJlZ2lubmluZy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvbkZpbmlzaCAtIEZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgc3RhdGUgZmluaXNoZXMuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9uRXJyb3IgLSBGdW5jdGlvbiB0byBleGVjdXRlIGlmIHRoZSBzdGF0ZSBlbmNvdW50ZXJzXHJcbiAgICogYW4gZXJyb3IgZHVyaW5nIHBsYXliYWNrLlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvbkNhbmNlbCAtIEZ1bmN0aW9uIHRvIGV4ZWN1dGUgaWYgcGxheWJhY2sgaXMgY2FuY2VsZWQuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7RGVmZXJyZWR9XHJcbiAgICovXHJcbiAgcGxheShvbkZpbmlzaCwgb25FcnJvciwgb25DYW5jZWwpIHtcclxuICAgIHRoaXMuX3BhdXNlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5fcGxheUNhbGxiYWNrcy5vbkZpbmlzaCA9IG9uRmluaXNoO1xyXG4gICAgdGhpcy5fcGxheUNhbGxiYWNrcy5vbkVycm9yID0gb25FcnJvcjtcclxuICAgIHRoaXMuX3BsYXlDYWxsYmFja3Mub25DYW5jZWwgPSBvbkNhbmNlbDtcclxuXHJcbiAgICB0aGlzLl9wcm9taXNlcy5wbGF5ID0gbmV3IERlZmVycmVkKHVuZGVmaW5lZCwgb25GaW5pc2gsIG9uRXJyb3IsIG9uQ2FuY2VsKTtcclxuICAgIHRoaXMuX3Byb21pc2VzLmZpbmlzaCA9IERlZmVycmVkLmFsbChbXHJcbiAgICAgIHRoaXMuX3Byb21pc2VzLnBsYXksXHJcbiAgICAgIHRoaXMuX3Byb21pc2VzLndlaWdodCxcclxuICAgIF0pO1xyXG5cclxuICAgIHJldHVybiB0aGlzLl9wcm9taXNlcy5maW5pc2g7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQYXVzZSBwbGF5YmFjayBvZiB0aGUgc3RhdGUuIFRoaXMgcHJldmVudHMgcGVuZGluZyBwcm9taXNlcyBmcm9tIGJlaW5nIGV4ZWN1dGVkLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAgICovXHJcbiAgcGF1c2UoKSB7XHJcbiAgICB0aGlzLl9wYXVzZWQgPSB0cnVlO1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXN1bWUgcGxheWJhY2sgb2YgdGhlIHN0YXRlLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9uRmluaXNoIC0gRnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBzdGF0ZSBmaW5pc2hlcy5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb25FcnJvciAtIEZ1bmN0aW9uIHRvIGV4ZWN1dGUgaWYgdGhlIHN0YXRlIGVuY291bnRlcnNcclxuICAgKiBhbiBlcnJvciBkdXJpbmcgcGxheWJhY2suXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9uQ2FuY2VsIC0gRnVuY3Rpb24gdG8gZXhlY3V0ZSBpZiBwbGF5YmFjayBpcyBjYW5jZWxlZC5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtEZWZlcnJlZH1cclxuICAgKi9cclxuICByZXN1bWUob25GaW5pc2gsIG9uRXJyb3IsIG9uQ2FuY2VsKSB7XHJcbiAgICB0aGlzLl9wYXVzZWQgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAoIXRoaXMuX3Byb21pc2VzLnBsYXkucGVuZGluZykge1xyXG4gICAgICB0aGlzLl9wbGF5Q2FsbGJhY2tzLm9uRmluaXNoID0gb25GaW5pc2ggfHwgdGhpcy5fcGxheUNhbGxiYWNrcy5vbkZpbmlzaDtcclxuICAgICAgdGhpcy5fcGxheUNhbGxiYWNrcy5vbkVycm9yID0gb25FcnJvciB8fCB0aGlzLl9wbGF5Q2FsbGJhY2tzLm9uRXJyb3I7XHJcbiAgICAgIHRoaXMuX3BsYXlDYWxsYmFja3Mub25DYW5jZWwgPSBvbkNhbmNlbCB8fCB0aGlzLl9wbGF5Q2FsbGJhY2tzLm9uQ2FuY2VsO1xyXG5cclxuICAgICAgdGhpcy5fcHJvbWlzZXMucGxheSA9IG5ldyBEZWZlcnJlZChcclxuICAgICAgICB1bmRlZmluZWQsXHJcbiAgICAgICAgdGhpcy5fcGxheUNhbGxiYWNrcy5vbkZpbmlzaCxcclxuICAgICAgICB0aGlzLl9wbGF5Q2FsbGJhY2tzLm9uRXJyb3IsXHJcbiAgICAgICAgdGhpcy5fcGxheUNhbGxiYWNrcy5vbkNhbmNlbFxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLl9wcm9taXNlcy5maW5pc2ggPSBEZWZlcnJlZC5hbGwoW1xyXG4gICAgICAgIHRoaXMuX3Byb21pc2VzLnBsYXksXHJcbiAgICAgICAgdGhpcy5fcHJvbWlzZXMud2VpZ2h0LFxyXG4gICAgICBdKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcy5fcHJvbWlzZXMuZmluaXNoO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2FuY2VsIHBsYXliYWNrIG9mIHRoZSBzdGF0ZSBhbmQgY2FuY2VsIGFueSBwZW5kaW5nIHByb21pc2VzLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAgICovXHJcbiAgY2FuY2VsKCkge1xyXG4gICAgdGhpcy5fcGF1c2VkID0gdHJ1ZTtcclxuXHJcbiAgICBPYmplY3QudmFsdWVzKHRoaXMuX3Byb21pc2VzKS5mb3JFYWNoKHByb21pc2UgPT4ge1xyXG4gICAgICBwcm9taXNlLmNhbmNlbCgpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTdG9wIHBsYXliYWNrIG9mIHRoZSBzdGF0ZSBhbmQgcmVzb2x2ZSBhbnkgcGVuZGluZyBwcm9taXNlcy5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gICAqL1xyXG4gIHN0b3AoKSB7XHJcbiAgICB0aGlzLl9wYXVzZWQgPSB0cnVlO1xyXG5cclxuICAgIE9iamVjdC52YWx1ZXModGhpcy5fcHJvbWlzZXMpLmZvckVhY2gocHJvbWlzZSA9PiB7XHJcbiAgICAgIHByb21pc2UucmVzb2x2ZSgpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDYW5jZWwgYW55IHBlbmRpbmcgcHJvbWlzZXMgYW5kIHJlbW92ZSByZWZlcmVuY2UgdG8gdGhlbS5cclxuICAgKi9cclxuICBkaXNjYXJkKCkge1xyXG4gICAgdGhpcy5jYW5jZWwoKTtcclxuXHJcbiAgICBkZWxldGUgdGhpcy5fcHJvbWlzZXM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGb3JjZSB0aGUgaW50ZXJuYWwgd2VpZ2h0IHRvIDAuIFNob3VsZCBiZSBjYWxsZWQgYmVmb3JlIHN3aXRjaGluZyBvciB0cmFuc2l0aW9uaW5nXHJcbiAgICogdG8gYSBuZXcgc3RhdGUuXHJcbiAgICovXHJcbiAgZGVhY3RpdmF0ZSgpIHtcclxuICAgIHRoaXMudXBkYXRlSW50ZXJuYWxXZWlnaHQoMCk7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBBYnN0cmFjdFN0YXRlO1xyXG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cclxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVC0wXHJcbmltcG9ydCBEZWZlcnJlZCBmcm9tICdjb3JlL0RlZmVycmVkJztcclxuaW1wb3J0IEFic3RyYWN0U3RhdGUgZnJvbSAnLi9BYnN0cmFjdFN0YXRlJztcclxuXHJcbi8qKlxyXG4gKiBDbGFzcyBmb3Igc21vb3RoIHRyYW5zaXRpb25pbmcgYmV0d2VlbiBzdGF0ZXMgb24gYW4gYW5pbWF0aW9uIGxheWVyLlxyXG4gKlxyXG4gKiBAZXh0ZW5kcyBBYnN0cmFjdFN0YXRlXHJcbiAqL1xyXG5jbGFzcyBUcmFuc2l0aW9uU3RhdGUgZXh0ZW5kcyBBYnN0cmFjdFN0YXRlIHtcclxuICBjb25zdHJ1Y3RvcihvcHRpb25zID0ge30pIHtcclxuICAgIHN1cGVyKG9wdGlvbnMpO1xyXG5cclxuICAgIHRoaXMuX3RvID0gbnVsbDtcclxuICAgIHRoaXMuX2Zyb20gPSBbXTtcclxuICAgIHRoaXMuX3dlaWdodFByb21pc2UgPSBEZWZlcnJlZC5yZXNvbHZlKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgaW50ZXJuYWxXZWlnaHQoKSB7XHJcbiAgICAvLyBGaW5kIHRoZSBjb21iaW5lZCB3ZWlnaHQgb2YgYWxsIHN1Yi1zdGF0ZXNcclxuICAgIGxldCB0b3RhbFdlaWdodCA9IDA7XHJcblxyXG4gICAgaWYgKHRoaXMuX3RvKSB7XHJcbiAgICAgIHRvdGFsV2VpZ2h0ICs9IHRoaXMuX3RvLndlaWdodDtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9mcm9tLmZvckVhY2goc3RhdGUgPT4ge1xyXG4gICAgICB0b3RhbFdlaWdodCArPSBzdGF0ZS53ZWlnaHQ7XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gdG90YWxXZWlnaHQgKiB0aGlzLl9pbnRlcm5hbFdlaWdodDtcclxuICB9XHJcblxyXG4gIHVwZGF0ZUludGVybmFsV2VpZ2h0KGZhY3Rvcikge1xyXG4gICAgc3VwZXIudXBkYXRlSW50ZXJuYWxXZWlnaHQoZmFjdG9yKTtcclxuXHJcbiAgICB0aGlzLl9mcm9tLmZvckVhY2goc3RhdGUgPT4ge1xyXG4gICAgICBzdGF0ZS51cGRhdGVJbnRlcm5hbFdlaWdodCh0aGlzLl9pbnRlcm5hbFdlaWdodCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAodGhpcy5fdG8pIHtcclxuICAgICAgdGhpcy5fdG8udXBkYXRlSW50ZXJuYWxXZWlnaHQodGhpcy5faW50ZXJuYWxXZWlnaHQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlIHN1Yi1zdGF0ZXMgdGhlIHRyYW5zaXRpb24gaXMgY29udHJvbGxpbmcgYW5kIHN0YXJ0IG5ldyB3ZWlnaHRcclxuICAgKiBhbmltYXRpb25zIG9uIGVhY2ggb25lLiBUaGlzIHNob3VsZCBiZSBjYWxsZWQgZWFjaCB0aW1lIHRoZSBjdXJyZW50IHN0YXRlIG9mXHJcbiAgICogYW4gYW5pbWF0aW9uIGxheWVyIGdldHMgdXBkYXRlZCB0byBhIG5ldyB2YWx1ZSBhbmQgYSB0cmFuc2l0aW9uIHRpbWUgZ3JlYXRlclxyXG4gICAqIHRoYXQgemVybyBpcyBzcGVjaWZpZWQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge0FycmF5LjxBYnN0cmFjdFN0YXRlPn0gW2N1cnJlbnRTdGF0ZXM9W11dIC0gU3RhdGVzIHdob3NlIHdlaWdodCB2YWx1ZXNcclxuICAgKiB3aWxsIGJlIGFuaW1hdGVkIHRvIDAuXHJcbiAgICogQHBhcmFtIHtBYnN0cmFjdFN0YXRlPX0gdGFyZ2V0U3RhdGUgLSBTdGF0ZSB3aG9zZSB3ZWlnaHQgd2lsbCBiZSBhbmltYXRlZFxyXG4gICAqIHRvIDEuXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IHRyYW5zaXRpb25UaW1lIC0gQW1vdW50IG9mIHRpbWUgaXQgd2lsbCBpbiBzZWNvbmRzIHRha2UgZm9yXHJcbiAgICogd2VpZ2h0IGFuaW1hdGlvbnMgdG8gY29tcGxldGUuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IGVhc2luZ0ZuIC0gRWFzaW5nIGZ1bmN0aW9uIHRvIHVzZSBmb3Igd2VpZ2h0IGFuaW1hdGlvbnMuXHJcbiAgICogRGVmYXVsdCBpcyBFYXNpbmcuTGluZWFyLkluT3V0LlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvbkNvbXBsZXRlIC0gRnVuY3Rpb24gdG8gZXhlY3V0ZSBvbmNlIGFsbCB3ZWlnaHQgYW5pbWF0aW9uc1xyXG4gICAqIGNvbXBsZXRlLlxyXG4gICAqL1xyXG4gIGNvbmZpZ3VyZShcclxuICAgIGN1cnJlbnRTdGF0ZXMgPSBbXSxcclxuICAgIHRhcmdldFN0YXRlLFxyXG4gICAgdHJhbnNpdGlvblRpbWUsXHJcbiAgICBlYXNpbmdGbixcclxuICAgIG9uQ29tcGxldGVcclxuICApIHtcclxuICAgIC8vIERlYWN0aXZhdGUgYW55IHN0YXRlcyB0aGF0IGFyZW4ndCBpbiB0aGUgbmV3IGNvbmZpZ3VyYXRpb25cclxuICAgIGlmICh0aGlzLl90byA9PT0gdGFyZ2V0U3RhdGUgfHwgY3VycmVudFN0YXRlcy5pbmNsdWRlcyh0aGlzLl90bykpIHtcclxuICAgICAgdGhpcy5fdG8gPSBudWxsO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fZnJvbSA9IHRoaXMuX2Zyb20uZmlsdGVyKFxyXG4gICAgICBzdGF0ZSA9PiBzdGF0ZSAhPT0gdGFyZ2V0U3RhdGUgJiYgIWN1cnJlbnRTdGF0ZXMuaW5jbHVkZXMoc3RhdGUpXHJcbiAgICApO1xyXG4gICAgdGhpcy5kZWFjdGl2YXRlKCk7XHJcblxyXG4gICAgdGhpcy5fZnJvbSA9IGN1cnJlbnRTdGF0ZXM7XHJcbiAgICB0aGlzLl90byA9IHRhcmdldFN0YXRlO1xyXG4gICAgdGhpcy5yZXNldCh0cmFuc2l0aW9uVGltZSwgZWFzaW5nRm4sIG9uQ29tcGxldGUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU3RhcnQgbmV3IHdlaWdodCBhbmltYXRpb25zIHN0YXRlIHRoZSB0cmFuc2l0aW9uIGNvbnRyb2xzLiBUaGlzIHNob3VsZCBiZSBjYWxsZWRcclxuICAgKiBpZiBhbiBhbmltYXRpb24gaXMgcGxheWVkIHdpdGggYSB0cmFuc2l0aW9uIHRpbWUgZ3JlYXRlciB0aGFuIHplcm8gYW5kIGEgdHJhbnN0aW9uXHJcbiAgICogdG8gdGhhdCBhbmltYXRpb24gd2FzIGFscmVhZHkgaW4gcHJvZ3Jlc3MuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge251bWJlcn0gdHJhbnNpdGlvblRpbWUgLSBBbW91bnQgb2YgdGltZSBpdCB3aWxsIGluIHNlY29uZHMgdGFrZSBmb3JcclxuICAgKiB3ZWlnaHQgYW5pbWF0aW9ucyB0byBjb21wbGV0ZS5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gZWFzaW5nRm4gLSBFYXNpbmcgZnVuY3Rpb24gdG8gdXNlIGZvciB3ZWlnaHQgYW5pbWF0aW9ucy5cclxuICAgKiBEZWZhdWx0IGlzIEVhc2luZy5MaW5lYXIuSW5PdXQuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9uQ29tcGxldGUgLSBGdW5jdGlvbiB0byBleGVjdXRlIG9uY2UgYWxsIHdlaWdodCBhbmltYXRpb25zXHJcbiAgICogY29tcGxldGUuXHJcbiAgICovXHJcbiAgcmVzZXQodHJhbnNpdGlvblRpbWUsIGVhc2luZ0ZuLCBvbkNvbXBsZXRlKSB7XHJcbiAgICAvLyBTdG9wIGFueSBwZW5kaW5nIHByb21pc2VzXHJcbiAgICB0aGlzLl93ZWlnaHRQcm9taXNlLmNhbmNlbCgpO1xyXG5cclxuICAgIC8vIFN0YXJ0IHR3ZWVuaW5nIHdlaWdodCB0byAwIGZvciB0aGUgY3VycmVudCBzdGF0ZXNcclxuICAgIGNvbnN0IHdlaWdodFByb21pc2VzID0gdGhpcy5fZnJvbS5tYXAoc3RhdGUgPT5cclxuICAgICAgc3RhdGUuc2V0V2VpZ2h0KDAsIHRyYW5zaXRpb25UaW1lLCBlYXNpbmdGbilcclxuICAgICk7XHJcblxyXG4gICAgLy8gU3RhcnQgdHdlZW5pbmcgd2VpZ2h0IHRvIDEgZm9yIHRoZSB0YXJnZXQgc3RhdGVcclxuICAgIGlmICh0aGlzLl90bykge1xyXG4gICAgICB3ZWlnaHRQcm9taXNlcy5wdXNoKHRoaXMuX3RvLnNldFdlaWdodCgxLCB0cmFuc2l0aW9uVGltZSwgZWFzaW5nRm4pKTtcclxuICAgICAgdGhpcy5uYW1lID0gdGhpcy5fdG8ubmFtZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMubmFtZSA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fd2VpZ2h0UHJvbWlzZSA9IERlZmVycmVkLmFsbCh3ZWlnaHRQcm9taXNlcywgKCkgPT4ge1xyXG4gICAgICB0aGlzLl9mcm9tLmZvckVhY2goc3RhdGUgPT4ge1xyXG4gICAgICAgIHN0YXRlLmNhbmNlbCgpO1xyXG4gICAgICAgIHN0YXRlLmRlYWN0aXZhdGUoKTtcclxuICAgICAgfSk7XHJcbiAgICAgIGlmICh0eXBlb2Ygb25Db21wbGV0ZSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgIG9uQ29tcGxldGUoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwbGF5KG9uRmluaXNoLCBvbkVycm9yLCBvbkNhbmNlbCwgb25OZXh0KSB7XHJcbiAgICB0aGlzLl9wYXVzZWQgPSBmYWxzZTtcclxuICAgIHRoaXMuX3BsYXlDYWxsYmFja3Mub25GaW5pc2ggPSBvbkZpbmlzaDtcclxuICAgIHRoaXMuX3BsYXlDYWxsYmFja3Mub25FcnJvciA9IG9uRXJyb3I7XHJcbiAgICB0aGlzLl9wbGF5Q2FsbGJhY2tzLm9uQ2FuY2VsID0gb25DYW5jZWw7XHJcblxyXG4gICAgY29uc3QgcHJvbWlzZXMgPSBbdGhpcy5fd2VpZ2h0UHJvbWlzZV07XHJcblxyXG4gICAgdGhpcy5fZnJvbS5mb3JFYWNoKHN0YXRlID0+IHtcclxuICAgICAgc3RhdGUucmVzdW1lKCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAodGhpcy5fdG8pIHtcclxuICAgICAgdGhpcy5fcHJvbWlzZXMucGxheSA9IHRoaXMuX3RvLnBsYXkoXHJcbiAgICAgICAgdW5kZWZpbmVkLFxyXG4gICAgICAgIHVuZGVmaW5lZCxcclxuICAgICAgICB1bmRlZmluZWQsXHJcbiAgICAgICAgb25OZXh0XHJcbiAgICAgICk7XHJcbiAgICAgIHByb21pc2VzLnB1c2godGhpcy5fcHJvbWlzZXMucGxheSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fcHJvbWlzZXMuZmluaXNoID0gRGVmZXJyZWQuYWxsKHByb21pc2VzLCBvbkZpbmlzaCwgb25FcnJvciwgb25DYW5jZWwpO1xyXG4gICAgcmV0dXJuIHRoaXMuX3Byb21pc2VzLmZpbmlzaDtcclxuICB9XHJcblxyXG4gIHBhdXNlKCkge1xyXG4gICAgdGhpcy5fZnJvbS5mb3JFYWNoKHN0YXRlID0+IHtcclxuICAgICAgc3RhdGUucGF1c2UoKTtcclxuICAgIH0pO1xyXG5cclxuICAgIGlmICh0aGlzLl90bykge1xyXG4gICAgICB0aGlzLl90by5wYXVzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBzdXBlci5wYXVzZSgpO1xyXG4gIH1cclxuXHJcbiAgcmVzdW1lKG9uRmluaXNoLCBvbkVycm9yLCBvbkNhbmNlbCwgb25OZXh0KSB7XHJcbiAgICB0aGlzLl9wYXVzZWQgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAoIXRoaXMuX3Byb21pc2VzLnBsYXkucGVuZGluZykge1xyXG4gICAgICB0aGlzLl9wbGF5Q2FsbGJhY2tzLm9uRmluaXNoID0gb25GaW5pc2ggfHwgdGhpcy5fcGxheUNhbGxiYWNrcy5vbkZpbmlzaDtcclxuICAgICAgdGhpcy5fcGxheUNhbGxiYWNrcy5vbkVycm9yID0gb25FcnJvciB8fCB0aGlzLl9wbGF5Q2FsbGJhY2tzLm9uRXJyb3I7XHJcbiAgICAgIHRoaXMuX3BsYXlDYWxsYmFja3Mub25DYW5jZWwgPSBvbkNhbmNlbCB8fCB0aGlzLl9wbGF5Q2FsbGJhY2tzLm9uQ2FuY2VsO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHByb21pc2VzID0gW3RoaXMuX3dlaWdodFByb21pc2VdO1xyXG5cclxuICAgIHRoaXMuX2Zyb20uZm9yRWFjaChzdGF0ZSA9PiB7XHJcbiAgICAgIHN0YXRlLnJlc3VtZSgpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKHRoaXMuX3RvKSB7XHJcbiAgICAgIHRoaXMuX3Byb21pc2VzLnBsYXkgPSB0aGlzLl90by5yZXN1bWUoXHJcbiAgICAgICAgdW5kZWZpbmVkLFxyXG4gICAgICAgIHVuZGVmaW5lZCxcclxuICAgICAgICB1bmRlZmluZWQsXHJcbiAgICAgICAgb25OZXh0XHJcbiAgICAgICk7XHJcbiAgICAgIHByb21pc2VzLnB1c2godGhpcy5fcHJvbWlzZXMucGxheSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fcHJvbWlzZXMuZmluaXNoID0gRGVmZXJyZWQuYWxsKFxyXG4gICAgICBwcm9taXNlcyxcclxuICAgICAgdGhpcy5fcGxheUNhbGxiYWNrcy5vbkZpbmlzaCxcclxuICAgICAgdGhpcy5fcGxheUNhbGxiYWNrcy5vbkVycm9yLFxyXG4gICAgICB0aGlzLl9wbGF5Q2FsbGJhY2tzLm9uQ2FuY2VsXHJcbiAgICApO1xyXG4gICAgcmV0dXJuIHRoaXMuX3Byb21pc2VzLmZpbmlzaDtcclxuICB9XHJcblxyXG4gIGNhbmNlbCgpIHtcclxuICAgIHRoaXMuX2Zyb20uZm9yRWFjaChzdGF0ZSA9PiB7XHJcbiAgICAgIHN0YXRlLnBhdXNlKCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAodGhpcy5fdG8pIHtcclxuICAgICAgdGhpcy5fdG8uY2FuY2VsKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fd2VpZ2h0UHJvbWlzZS5jYW5jZWwoKTtcclxuXHJcbiAgICByZXR1cm4gc3VwZXIuY2FuY2VsKCk7XHJcbiAgfVxyXG5cclxuICBzdG9wKCkge1xyXG4gICAgdGhpcy5fZnJvbS5mb3JFYWNoKHN0YXRlID0+IHtcclxuICAgICAgc3RhdGUucGF1c2UoKTtcclxuICAgIH0pO1xyXG5cclxuICAgIGlmICh0aGlzLl90bykge1xyXG4gICAgICB0aGlzLl90by5zdG9wKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHN1cGVyLnN0b3AoKTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZShkZWx0YVRpbWUpIHtcclxuICAgIHN1cGVyLnVwZGF0ZShkZWx0YVRpbWUpO1xyXG5cclxuICAgIHRoaXMuX2Zyb20uZm9yRWFjaChzdGF0ZSA9PiB7XHJcbiAgICAgIHN0YXRlLnVwZGF0ZShkZWx0YVRpbWUpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKHRoaXMuX3RvKSB7XHJcbiAgICAgIHRoaXMuX3RvLnVwZGF0ZShkZWx0YVRpbWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZGlzY2FyZCgpIHtcclxuICAgIHN1cGVyLmRpc2NhcmQoKTtcclxuXHJcbiAgICB0aGlzLl93ZWlnaHRQcm9taXNlLmNhbmNlbCgpO1xyXG4gICAgZGVsZXRlIHRoaXMuX3dlaWdodFByb21pc2U7XHJcbiAgICB0aGlzLl90byA9IG51bGw7XHJcbiAgICB0aGlzLl9mcm9tLmxlbmd0aCA9IDA7XHJcbiAgfVxyXG5cclxuICBkZWFjdGl2YXRlKCkge1xyXG4gICAgaWYgKHRoaXMuX3RvKSB7XHJcbiAgICAgIHRoaXMuX3RvLmRlYWN0aXZhdGUoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9mcm9tLmZvckVhY2goc3RhdGUgPT4ge1xyXG4gICAgICBzdGF0ZS5kZWFjdGl2YXRlKCk7XHJcbiAgICB9KTtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IFRyYW5zaXRpb25TdGF0ZTtcclxuIiwiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXHJcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxyXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtY2xhc3Nlcy1wZXItZmlsZSAqL1xyXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xyXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1lbXB0eS1mdW5jdGlvbiAqL1xyXG4vKiBlc2xpbnQtZGlzYWJsZSBnZXR0ZXItcmV0dXJuICovXHJcbi8qIGVzbGludC1kaXNhYmxlIG5vLXVzZWxlc3MtY29uc3RydWN0b3IgKi9cclxuaW1wb3J0IFRyYW5zaXRpb25TdGF0ZSBmcm9tICcuL3N0YXRlL1RyYW5zaXRpb25TdGF0ZSc7XHJcbmltcG9ydCBEZWZlcnJlZCBmcm9tICcuLi9EZWZlcnJlZCc7XHJcblxyXG4vKipcclxuICogQ2xhc3MgZmFjdG9yeSBpbnRlcmZhY2UgZm9yIGNvbnRyb2xsaW5nIHBsYXliYWNrIG9mIGEgY29sbGVjdGlvbiBvZiBhbmltYXRpb25zLlxyXG4gKiBPbmUgYW5pbWF0aW9uIGNhbiBiZSBwbGF5ZWQgYXQgYW55IGdpdmVuIHRpbWUsIGNyb3NzZmFkaW5nIGJldHdlZW4gYW5pbWF0aW9uc1xyXG4gKiB3aWxsIHJlc3VsdCBpbiBwbGF5aW5nIGEge0BsaW5rIFRyYW5zaXRpb25TdGF0ZX0uXHJcbiAqXHJcbiAqIEBpbnRlcmZhY2VcclxuICovXHJcbmNsYXNzIEFuaW1hdGlvblBsYXllckludGVyZmFjZSB7XHJcbiAgLyoqXHJcbiAgICogR2V0cyB3aGV0aGVyIG9yIG5vdCB0aGUgcGxheWVyIGlzIHVwZGF0aW5nIHN0YXRlcy5cclxuICAgKlxyXG4gICAqIEByZWFkb25seVxyXG4gICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAqL1xyXG4gIGdldCBwYXVzZWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fcGF1c2VkO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyBhbmQgc2V0cyB0aGUgZGVmYXVsdCBudW1iZXIgb2Ygc2Vjb25kcyBpdCB0YWtlcyB0byB0cmFuc2l0aW9uIHRvIGEgbmV3XHJcbiAgICogYW5pbWF0aW9uLlxyXG4gICAqXHJcbiAgICogQHR5cGUge251bWJlcn1cclxuICAgKi9cclxuICBnZXQgdHJhbnNpdGlvblRpbWUoKSB7fVxyXG5cclxuICBzZXQgdHJhbnNpdGlvblRpbWUoc2Vjb25kcykge31cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyBhbmQgc2V0cyB0aGUgZGVmYXVsdCBlYXNpbmcgZnVuY3Rpb24gdG8gdXNlIHdoZW4gdHJhbnNpdGlvbmluZyBhbmRcclxuICAgKiBzZXR0aW5nIHdlaWdodHMuXHJcbiAgICpcclxuICAgKiBAdHlwZSB7RnVuY3Rpb259XHJcbiAgICovXHJcbiAgZ2V0IGVhc2luZ0ZuKCkge31cclxuXHJcbiAgc2V0IGVhc2luZ0ZuKGZuKSB7fVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSBzdGF0ZSB0aGUgbGF5ZXIgaXMgY3VycmVudGx5IGluIGNvbnRyb2wgb2YuXHJcbiAgICpcclxuICAgKiBAcmVhZG9ubHlcclxuICAgKiBAdHlwZSB7QWJzdHJhY3RTdGF0ZX1cclxuICAgKi9cclxuICBnZXQgY3VycmVudFN0YXRlKCkge31cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgbmFtZSBvZiB0aGUgc3RhdGUgdGhlIGxheWVyIGlzIGN1cnJlbnRseSBpbiBjb250cm9sIG9mLlxyXG4gICAqXHJcbiAgICogQHJlYWRvbmx5XHJcbiAgICogQHR5cGUge3N0cmluZ31cclxuICAgKi9cclxuICBnZXQgY3VycmVudEFuaW1hdGlvbigpIHt9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgd2hldGhlciBvciBub3QgdGhlIGxheWVyIGlzIGN1cnJlbnRseSB0cmFuc2l0aW9uaW5nIHRvIGEgbmV3IGFuaW1hdGlvbi5cclxuICAgKlxyXG4gICAqIEByZWFkb25seVxyXG4gICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAqL1xyXG4gIGdldCBpc1RyYW5zaXRpb25pbmcoKSB7fVxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGUgdGhlIGxheWVyJ3MgY3VycmVudCBzdGF0ZSB0byBhIG5ldyB2YWx1ZS4gSWYgdHJhbnNpdGlvblRpbWUgaXMgZGVmaW5lZFxyXG4gICAqIGFuZCBncmVhdGVyIHRoYW4gemVybywgcGVyZm9ybSBhIHNtb290aCBibGVuZCBiZXR3ZWVuIGFueSBzdGF0ZXMgdGhhdCBjdXJyZW50bHlcclxuICAgKiBoYXZlIG5vbi16ZXJvIHdlaWdodCB2YWx1ZXMgYW5kIHRoZSBuZXcgc3RhdGUuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHsoc3RyaW5nfG51bGwpfSBuYW1lIC0gTmFtZSBvZiB0aGUgc3RhdGUgdG8gdHJhbnNpdGlvbiB0by5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGxheU1ldGhvZCAtIE5hbWUgb2YgdGhlIG9wZXJhdGlvbiBiZWluZyBwcmVwYXJlZCBmb3IsIHRvIGJlXHJcbiAgICogdXNlZCBpbiBlcnJvciBtZXNzYWdpbmcuXHJcbiAgICogQHBhcmFtIHtudW1iZXI9fSB0cmFuc2l0aW9uVGltZSAtIEFtb3VudCBvZiB0aW1lIGluIHNlY29uZHMgaXQgd2lsbCB0YWtlIHRvXHJcbiAgICogc3dpdGNoIHRvIHRoZSBuZXcgc3RhdGUuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IGVhc2luZ0ZuIC0gRWFzaW5nIGZ1bmN0aW9uIHRvIHVzZSB3aGVuIHRyYW5zaXRpb25pbmcgdG8gYVxyXG4gICAqIG5ldyBzdGF0ZSBvdmVyIHRpbWUuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9uRXJyb3IgLSBGdW5jdGlvbiB0byBleGVjdXRlIGlmIGFuIGVycm9yIGlzIGVuY291bnRlcmVkLlxyXG4gICAqL1xyXG4gIF9wcmVwYXJlQ3VycmVudFN0YXRlKG5hbWUsIHBsYXlNZXRob2QsIHRyYW5zaXRpb25UaW1lLCBlYXNpbmdGbiwgb25FcnJvcikge31cclxuXHJcbiAgLyoqXHJcbiAgICogU3RhcnQgcGxheWJhY2sgYW4gYW5pbWF0aW9uIGZyb20gdGhlIGJlZ2lubmluZy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gTmFtZSBvZiB0aGUgYW5pbWF0aW9uIHRvIHBsYXkuXHJcbiAgICogQHBhcmFtIHtudW1iZXI9fSB0cmFuc2l0aW9uVGltZSAtIEFtb3VudCBvZiB0aW1lIGl0IHdpbGwgdGFrZSBiZWZvcmUgdGhlXHJcbiAgICogbmV3IHN0YXRlIGhhcyBmdWxsIGluZmx1ZW5jZSBmb3IgdGhlIGxheWVyLlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBlYXNpbmdGbiAtIEVhc2luZyBmdW5jdGlvbiB0byB1c2UgZm9yIGJsZW5kaW5nIGlmIHRyYW5zaXRpb25UaW1lXHJcbiAgICogaXMgZ3JlYXRlciB0aGFuIHplcm8uXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9uRmluaXNoIC0gRnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBhbmltYXRpb24gZmluaXNoZXMuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9uRXJyb3IgLSBGdW5jdGlvbiB0byBleGVjdXRlIGlmIHRoZSBhbmltYXRpb24gZW5jb3VudGVyc1xyXG4gICAqIGFuIGVycm9yIGR1cmluZyBwbGF5YmFjay5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb25DYW5jZWwgLSBGdW5jdGlvbiB0byBleGVjdXRlIGlmIHBsYXliYWNrIGlzIGNhbmNlbGVkLlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvbk5leHQgLSBGdW5jdGlvbiB0byBleGVjdXRlIGlmIGFuIGFuaW1hdGlvbiBxdWV1ZSBpc1xyXG4gICAqIHBsYXllZCBhbmQgaXQgYWR2YW5jZXMgdG8gdGhlIG5leHQgYW5pbWF0aW9uLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0RlZmVycmVkfVxyXG4gICAqL1xyXG4gIHBsYXlBbmltYXRpb24oXHJcbiAgICBuYW1lLFxyXG4gICAgdHJhbnNpdGlvblRpbWUsXHJcbiAgICBlYXNpbmdGbixcclxuICAgIG9uRmluaXNoLFxyXG4gICAgb25FcnJvcixcclxuICAgIG9uQ2FuY2VsLFxyXG4gICAgb25OZXh0XHJcbiAgKSB7fVxyXG5cclxuICAvKipcclxuICAgKiBDYW5jZWwgcGxheWJhY2sgb2YgdGhlIGN1cnJlbnQgYW5pbWF0aW9uLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAgICovXHJcbiAgY2FuY2VsQW5pbWF0aW9uKCkge31cclxuXHJcbiAgLyoqXHJcbiAgICogUGF1c2UgcGxheWJhY2sgb2YgdGhlIGN1cnJlbnQgYW5pbWF0aW9uLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAgICovXHJcbiAgcGF1c2VBbmltYXRpb24oKSB7fVxyXG5cclxuICAvKipcclxuICAgKiBSZXN1bWUgcGxheWJhY2sgb2YgYW4gYW5pbWF0aW9uLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmc9fSBuYW1lIC0gTmFtZSBvZiB0aGUgYW5pbWF0aW9uIHRvIHJlc3VtZSBwbGF5YmFjayBmb3IuIERlZmF1bHRcclxuICAgKiBpcyB0aGUgbGF5ZXIncyBjdXJyZW50IGFuaW1hdGlvbiBuYW1lLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyPX0gdHJhbnNpdGlvblRpbWUgLSBBbW91bnQgb2YgdGltZSBpdCB3aWxsIHRha2UgYmVmb3JlIHRoZVxyXG4gICAqIG5ldyBzdGF0ZSBoYXMgZnVsbCBpbmZsdWVuY2UgZm9yIHRoZSBsYXllci5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb25GaW5pc2ggLSBGdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIHN0YXRlIGZpbmlzaGVzLlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvbkVycm9yIC0gRnVuY3Rpb24gdG8gZXhlY3V0ZSBpZiB0aGUgc3RhdGUgZW5jb3VudGVyc1xyXG4gICAqIGFuIGVycm9yIGR1cmluZyBwbGF5YmFjay5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb25DYW5jZWwgLSBGdW5jdGlvbiB0byBleGVjdXRlIGlmIHBsYXliYWNrIGlzIGNhbmNlbGVkLlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvbk5leHQgLSBGdW5jdGlvbiB0byBleGVjdXRlIGlmIGFuIGFuaW1hdGlvbiBxdWV1ZSBpc1xyXG4gICAqIHBsYXllZCBhbmQgaXQgYWR2YW5jZXMgdG8gdGhlIG5leHQgYW5pbWF0aW9uLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0RlZmVycmVkfVxyXG4gICAqL1xyXG4gIHJlc3VtZUFuaW1hdGlvbihcclxuICAgIG5hbWUsXHJcbiAgICB0cmFuc2l0aW9uVGltZSxcclxuICAgIGVhc2luZ0ZuLFxyXG4gICAgb25GaW5pc2gsXHJcbiAgICBvbkVycm9yLFxyXG4gICAgb25DYW5jZWwsXHJcbiAgICBvbk5leHRcclxuICApIHt9XHJcblxyXG4gIC8qKlxyXG4gICAqIFN0b3AgcGxheWJhY2sgb2YgdGhlIGN1cnJlbnQgYW5pbWF0aW9uLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAgICovXHJcbiAgc3RvcEFuaW1hdGlvbigpIHt9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZSB0aGUgY3VycmVudCBhbmltYXRpb24uXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge251bWJlcn0gZGVsdGFUaW1lIC0gVGltZSBpbiBtaWxsaXNlY29uZHMgc2luY2UgdGhlIGxhc3QgdXBkYXRlLlxyXG4gICAqL1xyXG4gIHVwZGF0ZShkZWx0YVRpbWUpIHt9XHJcblxyXG4gIC8qKlxyXG4gICAqIERpc2NhcmQgdGhlIHRyYW5zaXRpb24gc3RhdGUuXHJcbiAgICovXHJcbiAgZGlzY2FyZCgpIHt9XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZXMgYSBjbGFzcyB0aGF0IGltcGxlbWVudHMge0BsaW5rIEFuaW1hdGlvblBsYXllckludGVyZmFjZX0gYW5kIGV4dGVuZHNcclxuICAgKiBhIHNwZWNpZmllZCBiYXNlIGNsYXNzLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtDbGFzc30gW0Jhc2VDbGFzcyA9IGNsYXNze31dIC0gVGhlIGNsYXNzIHRvIGV4dGVuZC5cclxuICAgKlxyXG4gICAqIEByZXR1cm4ge0NsYXNzfSBBIGNsYXNzIHRoYXQgZXh0ZW5kcyBgQmFzZUNsYXNzYCBhbmQgaW1wbGVtZW50cyB7QGxpbmsgQW5pbWF0aW9uUGxheWVySW50ZXJmYWNlfS5cclxuICAgKi9cclxuICBzdGF0aWMgTWl4aW4oQmFzZUNsYXNzID0gY2xhc3Mge30pIHtcclxuICAgIGNvbnN0IEFuaW1hdGlvblBsYXllck1peGluID0gY2xhc3MgZXh0ZW5kcyBCYXNlQ2xhc3Mge1xyXG4gICAgICBjb25zdHJ1Y3RvcihvcHRpb25zID0ge30sIC4uLmFyZ3MpIHtcclxuICAgICAgICBzdXBlcihvcHRpb25zLCAuLi5hcmdzKTtcclxuXHJcbiAgICAgICAgdGhpcy5fdHJhbnNpdGlvblN0YXRlID0gbmV3IFRyYW5zaXRpb25TdGF0ZSgpO1xyXG4gICAgICAgIHRoaXMuX3N0YXRlcyA9IHRoaXMuX3N0YXRlcyAhPT0gdW5kZWZpbmVkID8gdGhpcy5fc3RhdGVzIDogbmV3IE1hcCgpO1xyXG4gICAgICAgIHRoaXMuX2N1cnJlbnRTdGF0ZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5fcGF1c2VkID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMuX3RyYW5zaXRpb25UaW1lID1cclxuICAgICAgICAgIE51bWJlcihvcHRpb25zLnRyYW5zaXRpb25UaW1lKSA+PSAwXHJcbiAgICAgICAgICAgID8gTnVtYmVyKG9wdGlvbnMudHJhbnNpdGlvblRpbWUpXHJcbiAgICAgICAgICAgIDogMDtcclxuXHJcbiAgICAgICAgdGhpcy5fZWFzaW5nRm4gPVxyXG4gICAgICAgICAgdHlwZW9mIG9wdGlvbnMuZWFzaW5nRm4gPT09ICdmdW5jdGlvbicgPyBvcHRpb25zLmVhc2luZ0ZuIDogdW5kZWZpbmVkO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBnZXQgcGF1c2VkKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wYXVzZWQ7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGdldCB0cmFuc2l0aW9uVGltZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fdHJhbnNpdGlvblRpbWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHNldCB0cmFuc2l0aW9uVGltZShzZWNvbmRzKSB7XHJcbiAgICAgICAgc2Vjb25kcyA9IE51bWJlcihzZWNvbmRzKTtcclxuXHJcbiAgICAgICAgaWYgKCEoc2Vjb25kcyA+PSAwKSkge1xyXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgICAgICBgQ2Fubm90IHNldCB0cmFuc2l0aW9uIHRpbWUgZm9yICR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfSB0byAke3NlY29uZHN9LiBTZWNvbmRzIG11c3QgYmUgYSBudW1lcmljIHZhbHVlIGdyZWF0aGVyIHRoYW4gb3IgZXF1YWwgdG8gemVyby5gXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fdHJhbnNpdGlvblRpbWUgPSBzZWNvbmRzO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBnZXQgZWFzaW5nRm4oKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Vhc2luZ0ZuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBzZXQgZWFzaW5nRm4oZm4pIHtcclxuICAgICAgICB0aGlzLl9lYXNpbmdGbiA9IGZuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBnZXQgY3VycmVudFN0YXRlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9jdXJyZW50U3RhdGU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGdldCBjdXJyZW50QW5pbWF0aW9uKCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9jdXJyZW50U3RhdGUpIHtcclxuICAgICAgICAgIHJldHVybiB0aGlzLl9jdXJyZW50U3RhdGUubmFtZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBnZXQgaXNUcmFuc2l0aW9uaW5nKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9jdXJyZW50U3RhdGUgPT09IHRoaXMuX3RyYW5zaXRpb25TdGF0ZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgX3ByZXBhcmVDdXJyZW50U3RhdGUoXHJcbiAgICAgICAgbmFtZSxcclxuICAgICAgICBwbGF5TWV0aG9kLFxyXG4gICAgICAgIHRyYW5zaXRpb25UaW1lLFxyXG4gICAgICAgIGVhc2luZ0ZuLFxyXG4gICAgICAgIG9uRXJyb3JcclxuICAgICAgKSB7XHJcbiAgICAgICAgaWYgKG5hbWUgIT09IG51bGwgJiYgIXRoaXMuX3N0YXRlcy5oYXMobmFtZSkpIHtcclxuICAgICAgICAgIGNvbnN0IGUgPSBuZXcgRXJyb3IoXHJcbiAgICAgICAgICAgIGBDYW5ub3QgJHtwbGF5TWV0aG9kfSBhbmltYXRpb24gJHtuYW1lfS4gTm8gYW5pbWF0aW9uIGV4aXN0cyB3aXRoIHRoaXMgbmFtZS5gXHJcbiAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgIGlmICh0eXBlb2Ygb25FcnJvciA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICBvbkVycm9yKGUpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHRocm93IGU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCB0YXJnZXRTdGF0ZSA9IG5hbWUgIT09IG51bGwgPyB0aGlzLl9zdGF0ZXMuZ2V0KG5hbWUpIDogbnVsbDtcclxuXHJcbiAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBuZXcgc3RhdGUgaXNuJ3QgYWxyZWFkeSBwbGF5aW5nXHJcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudEFuaW1hdGlvbiAhPT0gbmFtZSkge1xyXG4gICAgICAgICAgLy8gU3dpdGNoIHRvIHRoZSBuZXcgc3RhdGUgaW1tZWRpYXRlbHlcclxuICAgICAgICAgIGlmICh0cmFuc2l0aW9uVGltZSA8PSAwKSB7XHJcbiAgICAgICAgICAgIC8vIENhbmNlbCB0aGUgY3VycmVudCBzdGF0ZSBhbmQgc2V0IGl0cyB3ZWlnaHQgdG8gMFxyXG4gICAgICAgICAgICBpZiAodGhpcy5fY3VycmVudFN0YXRlKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5fY3VycmVudFN0YXRlLmNhbmNlbCgpO1xyXG4gICAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRTdGF0ZS53ZWlnaHQgPSAwO1xyXG4gICAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRTdGF0ZS5kZWFjdGl2YXRlKCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRTdGF0ZSA9IHRhcmdldFN0YXRlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgLy8gQmxlbmQgdG8gdGhlIG5ldyBzdGF0ZSBvdmVyIHRpbWVcclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBNYWtlIHN1cmUgdG8gdHJhbnNpdGlvbiBvdXQgb2YgYW55IHN0YXRlcyB3aXRoIG5vbi16ZXJvIHdlaWdodFxyXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50U3RhdGVzID0gWy4uLnRoaXMuX3N0YXRlcy52YWx1ZXMoKV0uZmlsdGVyKFxyXG4gICAgICAgICAgICAgIHMgPT4gcyAhPT0gdGFyZ2V0U3RhdGUgJiYgKHMud2VpZ2h0IHx8IHMud2VpZ2h0UGVuZGluZylcclxuICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgdHJhbnNpdGlvbiBzdGF0ZSB3aXRoIG5ldyBpbnB1dHNcclxuICAgICAgICAgICAgdGhpcy5fdHJhbnNpdGlvblN0YXRlLmNvbmZpZ3VyZShcclxuICAgICAgICAgICAgICBjdXJyZW50U3RhdGVzLFxyXG4gICAgICAgICAgICAgIHRhcmdldFN0YXRlLFxyXG4gICAgICAgICAgICAgIHRyYW5zaXRpb25UaW1lLFxyXG4gICAgICAgICAgICAgIGVhc2luZ0ZuLFxyXG4gICAgICAgICAgICAgICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRTdGF0ZSA9IHRhcmdldFN0YXRlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fdHJhbnNpdGlvblN0YXRlLndlaWdodCA9IDA7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5fY3VycmVudFN0YXRlID0gdGhpcy5fdHJhbnNpdGlvblN0YXRlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAocGxheU1ldGhvZCA9PT0gJ3BsYXknKSB7XHJcbiAgICAgICAgICB0aGlzLl9jdXJyZW50U3RhdGUuY2FuY2VsKCk7XHJcblxyXG4gICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRTdGF0ZSA9PT0gdGhpcy5fdHJhbnNpdGlvblN0YXRlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3RyYW5zaXRpb25TdGF0ZS5yZXNldCh0cmFuc2l0aW9uVGltZSwgZWFzaW5nRm4sICgpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLl9jdXJyZW50U3RhdGUgPSB0YXJnZXRTdGF0ZTtcclxuICAgICAgICAgICAgICB0aGlzLl90cmFuc2l0aW9uU3RhdGUud2VpZ2h0ID0gMDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBVcGRhdGUgd2VpZ2h0IGZvciB0aGUgbmV3IGN1cnJlbnQgc3RhdGUgc28gaXQgaGFzIGZ1bGwgaW5mbHVlbmNlIGZvciB0aGUgcGxheWVyXHJcbiAgICAgICAgdGhpcy5fY3VycmVudFN0YXRlLndlaWdodCA9IDE7XHJcbiAgICAgICAgdGhpcy5fY3VycmVudFN0YXRlLnVwZGF0ZUludGVybmFsV2VpZ2h0KHRoaXMuX2ludGVybmFsV2VpZ2h0KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcGxheUFuaW1hdGlvbihcclxuICAgICAgICBuYW1lLFxyXG4gICAgICAgIHRyYW5zaXRpb25UaW1lLFxyXG4gICAgICAgIGVhc2luZ0ZuLFxyXG4gICAgICAgIG9uRmluaXNoLFxyXG4gICAgICAgIG9uRXJyb3IsXHJcbiAgICAgICAgb25DYW5jZWwsXHJcbiAgICAgICAgb25OZXh0XHJcbiAgICAgICkge1xyXG4gICAgICAgIGxldCBlcnJvcjtcclxuICAgICAgICBsZXQgcmVqZWN0ID0gZmFsc2U7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIHRoaXMuX3ByZXBhcmVDdXJyZW50U3RhdGUoXHJcbiAgICAgICAgICAgIG5hbWUsXHJcbiAgICAgICAgICAgICdwbGF5JyxcclxuICAgICAgICAgICAgdHJhbnNpdGlvblRpbWUgIT09IHVuZGVmaW5lZFxyXG4gICAgICAgICAgICAgID8gdHJhbnNpdGlvblRpbWVcclxuICAgICAgICAgICAgICA6IHRoaXMuX3RyYW5zaXRpb25UaW1lLFxyXG4gICAgICAgICAgICBlYXNpbmdGbiAhPT0gdW5kZWZpbmVkID8gZWFzaW5nRm4gOiB0aGlzLl9lYXNpbmdGbixcclxuICAgICAgICAgICAgb25FcnJvclxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICBlcnJvciA9IGU7XHJcbiAgICAgICAgICByZWplY3QgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHJlamVjdCkge1xyXG4gICAgICAgICAgcmV0dXJuIERlZmVycmVkLnJlamVjdChlcnJvcik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5fY3VycmVudFN0YXRlLnBsYXkob25GaW5pc2gsIG9uRXJyb3IsIG9uQ2FuY2VsLCBvbk5leHQpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBwYXVzZUFuaW1hdGlvbigpIHtcclxuICAgICAgICBpZiAodGhpcy5fY3VycmVudFN0YXRlKSB7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5fY3VycmVudFN0YXRlLnBhdXNlKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJlc3VtZUFuaW1hdGlvbihcclxuICAgICAgICBuYW1lLFxyXG4gICAgICAgIHRyYW5zaXRpb25UaW1lLFxyXG4gICAgICAgIGVhc2luZ0ZuLFxyXG4gICAgICAgIG9uRmluaXNoLFxyXG4gICAgICAgIG9uRXJyb3IsXHJcbiAgICAgICAgb25DYW5jZWwsXHJcbiAgICAgICAgb25OZXh0XHJcbiAgICAgICkge1xyXG4gICAgICAgIGlmIChuYW1lID09PSB1bmRlZmluZWQgJiYgdGhpcy5fY3VycmVudFN0YXRlKSB7XHJcbiAgICAgICAgICBuYW1lID0gdGhpcy5fY3VycmVudFN0YXRlLm5hbWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgZXJyb3I7XHJcbiAgICAgICAgbGV0IHJlamVjdCA9IGZhbHNlO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICB0aGlzLl9wcmVwYXJlQ3VycmVudFN0YXRlKFxyXG4gICAgICAgICAgICBuYW1lLFxyXG4gICAgICAgICAgICAncmVzdW1lJyxcclxuICAgICAgICAgICAgdHJhbnNpdGlvblRpbWUgIT09IHVuZGVmaW5lZFxyXG4gICAgICAgICAgICAgID8gdHJhbnNpdGlvblRpbWVcclxuICAgICAgICAgICAgICA6IHRoaXMuX3RyYW5zaXRpb25UaW1lLFxyXG4gICAgICAgICAgICBlYXNpbmdGbiAhPT0gdW5kZWZpbmVkID8gZWFzaW5nRm4gOiB0aGlzLl9lYXNpbmdGbixcclxuICAgICAgICAgICAgb25FcnJvclxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICBlcnJvciA9IGU7XHJcbiAgICAgICAgICByZWplY3QgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHJlamVjdCkge1xyXG4gICAgICAgICAgcmV0dXJuIERlZmVycmVkLnJlamVjdChlcnJvcik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5fY3VycmVudFN0YXRlLnJlc3VtZShvbkZpbmlzaCwgb25FcnJvciwgb25DYW5jZWwsIG9uTmV4dCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNhbmNlbEFuaW1hdGlvbigpIHtcclxuICAgICAgICBpZiAodGhpcy5fY3VycmVudFN0YXRlKSB7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5fY3VycmVudFN0YXRlLmNhbmNlbCgpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBzdG9wQW5pbWF0aW9uKCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9jdXJyZW50U3RhdGUpIHtcclxuICAgICAgICAgIHJldHVybiB0aGlzLl9jdXJyZW50U3RhdGUuc3RvcCgpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICB1cGRhdGUoZGVsdGFUaW1lKSB7XHJcbiAgICAgICAgaWYgKHN1cGVyLnVwZGF0ZSkge1xyXG4gICAgICAgICAgc3VwZXIudXBkYXRlKGRlbHRhVGltZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5fY3VycmVudFN0YXRlKSB7XHJcbiAgICAgICAgICB0aGlzLl9jdXJyZW50U3RhdGUudXBkYXRlKGRlbHRhVGltZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBkaXNjYXJkKCkge1xyXG4gICAgICAgIGlmIChzdXBlci5kaXNjYXJkKSB7XHJcbiAgICAgICAgICBzdXBlci5kaXNjYXJkKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl90cmFuc2l0aW9uU3RhdGUuZGlzY2FyZCgpO1xyXG4gICAgICAgIGRlbGV0ZSB0aGlzLl90cmFuc2l0aW9uU3RhdGU7XHJcbiAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIEFuaW1hdGlvblBsYXllck1peGluO1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgQW5pbWF0aW9uUGxheWVySW50ZXJmYWNlO1xyXG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cclxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVC0wXHJcbi8qIGVzbGludC1kaXNhYmxlIG1heC1jbGFzc2VzLXBlci1maWxlICovXHJcbi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXHJcbi8qIGVzbGludC1kaXNhYmxlIG5vLWVtcHR5LWZ1bmN0aW9uICovXHJcbi8qIGVzbGludC1kaXNhYmxlIGdldHRlci1yZXR1cm4gKi9cclxuXHJcbmltcG9ydCBVdGlscyBmcm9tICcuLi8uLi9VdGlscyc7XHJcblxyXG4vKipcclxuICogQ2xhc3MgZmFjdG9yeSBpbnRlcmZhY2UgZm9yIG1hbmlwdWxhdGluZyBhIGNvbGxlY3Rpb24gb2Yge0BsaW5rIEFic3RyYWN0U3RhdGV9LlxyXG4gKlxyXG4gKiBAaW50ZXJmYWNlXHJcbiAqL1xyXG5jbGFzcyBTdGF0ZUNvbnRhaW5lckludGVyZmFjZSB7XHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIHRoZSBzdGF0ZSB3aXRoIHRoZSBnaXZlbiBuYW1lLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBOYW1lIG9mIHRoZSBzdGF0ZS5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtBYnN0cmFjdFN0YXRlfVxyXG4gICAqL1xyXG4gIGdldFN0YXRlKG5hbWUpIHt9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgYW4gYXJyYXkgb2YgdGhlIG5hbWVzIG9mIGFsbCBzdGF0ZXMgaW4gdGhlIGNvbnRhaW5lci5cclxuICAgKlxyXG4gICAqIEB0eXBlIHtBcnJheS48c3RyaW5nPn1cclxuICAgKi9cclxuICBnZXRTdGF0ZU5hbWVzKCkge31cclxuXHJcbiAgLyoqXHJcbiAgICogQWRkIGEgbmV3IHN0YXRlIHRvIGJlIGNvbnRyb2xsZWQgYnkgdGhlIGNvbnRhaW5lci4gU3RhdGVzIGFyZSBzdG9yZWQga2V5ZWRcclxuICAgKiBieSB0aGVpciBuYW1lIHByb3BlcnR5LCB3aGljaCBtdXN0IGJlIHVuaXF1ZS4gSWYgaXQgaXNuJ3QsIGEgbnVtYmVyIHdpbGxcclxuICAgKiBiZSBhZGRlZCBvciBpbmNyZW1lbnRlZCB1bnRpbCBhIHVuaXF1ZSBrZXkgaXMgZ2VuZXJhdGVkLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtBYnN0cmFjdFN0YXRlfSBzdGF0ZSAtIFN0YXRlIHRvIGFkZCB0byB0aGUgY29udGFpbmVyLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge3N0cmluZ30gLSBVbmlxdWUgbmFtZSBvZiB0aGUgc3RhdGUuXHJcbiAgICovXHJcbiAgYWRkU3RhdGUoc3RhdGUpIHt9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlbW92ZXMgYSBzdGF0ZSB3aXRoIHRoZSBnaXZlbiBuYW1lIGZyb20gdGhlIGNvbnRhaW5lci5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gTmFtZSBvZiB0aGUgc3RhdGUgdG8gcmVtb3ZlLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge2Jvb2xlYW59IC0gV2hldGhlciBvciBub3QgYSBzdGF0ZSB3YXMgcmVtb3ZlZC5cclxuICAgKi9cclxuICByZW1vdmVTdGF0ZShuYW1lKSB7fVxyXG5cclxuICAvKipcclxuICAgKiBSZW5hbWVzIGEgc3RhdGUgd2l0aCB0aGUgZ2l2ZW4gbmFtZSBpbiB0aGUgY29udGFpbmVyLiBOYW1lIG11c3QgYmUgdW5pcXVlXHJcbiAgICogdG8gdGhlIGNvbnRhaW5lciwgaWYgaXQgaXNuJ3QgdGhlIG5hbWUgd2lsbCBiZSBpbmNyZW1lbnRlZCB1bnRpbCBpdCBpcyB1bmlxdWUuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gY3VycmVudE5hbWUgLSBOYW1lIG9mIHRoZSBzdGF0ZSB0byByZW5hbWUuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5ld05hbWUgLSBOYW1lIHRvIHVwZGF0ZSB0aGUgc3RhdGUgd2l0aC5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IC0gVXBkYXRlZCBuYW1lIGZvciB0aGUgc3RhdGUuXHJcbiAgICovXHJcbiAgcmVuYW1lU3RhdGUoY3VycmVudE5hbWUsIG5ld05hbWUpIHt9XHJcblxyXG4gIC8qKlxyXG4gICAqIERpc2NhcmRzIGFsbCBzdGF0ZXMuXHJcbiAgICovXHJcbiAgZGlzY2FyZFN0YXRlcygpIHt9XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZXMgYSBjbGFzcyB0aGF0IGltcGxlbWVudHMge0BsaW5rIFN0YXRlQ29udGFpbmVySW50ZXJmYWNlfSBhbmQgZXh0ZW5kc1xyXG4gICAqIGEgc3BlY2lmaWVkIGJhc2UgY2xhc3MuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge0NsYXNzfSBbQmFzZUNsYXNzID0gY2xhc3N7fV0gLSBUaGUgY2xhc3MgdG8gZXh0ZW5kLlxyXG4gICAqXHJcbiAgICogQHJldHVybiB7Q2xhc3N9IEEgY2xhc3MgdGhhdCBleHRlbmRzIGBCYXNlQ2xhc3NgIGFuZCBpbXBsZW1lbnRzIHtAbGluayBTdGF0ZUNvbnRhaW5lckludGVyZmFjZX0uXHJcbiAgICovXHJcbiAgc3RhdGljIE1peGluKEJhc2VDbGFzcyA9IGNsYXNzIHt9KSB7XHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgbWl4aW4gYWRkcyBmdW5jdGlvbmFsaXR5IGZvciBtYW5pcHVsYXRpbmcgdW5pcXVlbHktbmFtZWQgYW5pbWF0aW9uIHN0YXRlcyBpblxyXG4gICAgICogYSBtYXAuXHJcbiAgICAgKi9cclxuICAgIGNvbnN0IFN0YXRlQ29udGFpbmVyTWl4aW4gPSBjbGFzcyBleHRlbmRzIEJhc2VDbGFzcyB7XHJcbiAgICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMgPSB7fSwgLi4uYXJncykge1xyXG4gICAgICAgIHN1cGVyKG9wdGlvbnMsIC4uLmFyZ3MpO1xyXG5cclxuICAgICAgICB0aGlzLl9zdGF0ZXMgPSB0aGlzLl9zdGF0ZXMgIT09IHVuZGVmaW5lZCA/IHRoaXMuX3N0YXRlcyA6IG5ldyBNYXAoKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgZ2V0U3RhdGUobmFtZSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zdGF0ZXMuZ2V0KG5hbWUpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBnZXRTdGF0ZU5hbWVzKCkge1xyXG4gICAgICAgIHJldHVybiBbLi4udGhpcy5fc3RhdGVzLmtleXMoKV07XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGFkZFN0YXRlKHN0YXRlKSB7XHJcbiAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBzdGF0ZSBpcyBub3QgYWxyZWFkeSBpbiB0aGlzIGNvbnRhaW5lclxyXG4gICAgICAgIGlmIChbLi4udGhpcy5fc3RhdGVzLnZhbHVlcygpXS5pbmNsdWRlcyhzdGF0ZSkpIHtcclxuICAgICAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICAgICAgYENhbm5vdCBhZGQgYW5pbWF0aW9uIHRvIHN0YXRlICR7dGhpcy5uYW1lfS4gQW5pbWF0aW9uIHdhcyBhbHJlYWR5IGFkZGVkLmBcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICByZXR1cm4gc3RhdGUubmFtZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgc3RhdGUgbmFtZSBpcyB1bmlxdWVcclxuICAgICAgICBjb25zdCB1bmlxdWVOYW1lID0gVXRpbHMuZ2V0VW5pcXVlTmFtZShzdGF0ZS5uYW1lLCBbXHJcbiAgICAgICAgICAuLi50aGlzLl9zdGF0ZXMua2V5cygpLFxyXG4gICAgICAgIF0pO1xyXG5cclxuICAgICAgICBpZiAoc3RhdGUubmFtZSAhPT0gdW5pcXVlTmFtZSkge1xyXG4gICAgICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgICAgICBgQW5pbWF0aW9uIG5hbWUgJHtzdGF0ZS5uYW1lfSBpcyBub3QgdW5pcXVlIGZvciBzdGF0ZSAke3RoaXMubmFtZX0uIE5ldyBhbmltYXRpb24gd2lsbCBiZSBhZGRlZCB3aXRoIG5hbWUgJHt1bmlxdWVOYW1lfS5gXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgc3RhdGUubmFtZSA9IHVuaXF1ZU5hbWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9zdGF0ZXMuc2V0KHN0YXRlLm5hbWUsIHN0YXRlKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHN0YXRlLm5hbWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJlbW92ZVN0YXRlKG5hbWUpIHtcclxuICAgICAgICAvLyBDaGVjayBpZiB0aGUgc3RhdGUgaXMgaW4gdGhpcyBjb250YWluZXJcclxuICAgICAgICBpZiAoIXRoaXMuX3N0YXRlcyB8fCAhdGhpcy5fc3RhdGVzLmhhcyhuYW1lKSkge1xyXG4gICAgICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgICAgICBgRGlkIG5vdCByZW1vdmUgYW5pbWF0aW9uICR7bmFtZX0gZnJvbSBzdGF0ZSAke3RoaXMubmFtZX0uIE5vIGFuaW1hdGlvbiBleGlzdHMgd2l0aCB0aGlzIG5hbWUuYFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3N0YXRlcy5nZXQobmFtZSkuZGlzY2FyZCgpO1xyXG4gICAgICAgIHRoaXMuX3N0YXRlcy5kZWxldGUobmFtZSk7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJlbmFtZVN0YXRlKGN1cnJlbnROYW1lLCBuZXdOYW1lKSB7XHJcbiAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBzdGF0ZSBpcyBpbiB0aGlzIGNvbnRhaW5lclxyXG4gICAgICAgIGlmICghdGhpcy5fc3RhdGVzIHx8ICF0aGlzLl9zdGF0ZXMuaGFzKGN1cnJlbnROYW1lKSkge1xyXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgICAgICBgQ2Fubm90IHJlbmFtZSBhbmltYXRpb24gJHtjdXJyZW50TmFtZX0gaW4gJHt0aGlzLm5hbWV9LiBObyBhbmltYXRpb24gZXhpc3RzIHdpdGggdGhpcyBuYW1lLmBcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBzdGF0ZSA9IHRoaXMuX3N0YXRlcy5nZXQoY3VycmVudE5hbWUpO1xyXG5cclxuICAgICAgICAvLyBFeGl0IGlmIHRoZSBuYW1lcyBhcmUgdGhlIHNhbWVcclxuICAgICAgICBpZiAoY3VycmVudE5hbWUgPT09IG5ld05hbWUpIHtcclxuICAgICAgICAgIHJldHVybiBjdXJyZW50TmFtZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgbmFtZSBpcyB1bmlxdWVcclxuICAgICAgICBjb25zdCB1bmlxdWVOYW1lID0gVXRpbHMuZ2V0VW5pcXVlTmFtZShcclxuICAgICAgICAgIG5ld05hbWUsXHJcbiAgICAgICAgICBbLi4udGhpcy5fc3RhdGVzLmtleXMoKV0uZmlsdGVyKHMgPT4gcy5uYW1lICE9PSBjdXJyZW50TmFtZSlcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBpZiAobmV3TmFtZSAhPT0gdW5pcXVlTmFtZSkge1xyXG4gICAgICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgICAgICBgQW5pbWF0aW9uIG5hbWUgJHtuZXdOYW1lfSBpcyBub3QgdW5pcXVlIGluIHN0YXRlICR7dGhpcy5uYW1lfS4gQW5pbWF0aW9uIHdpbGwgYmUgcmVuYW1lZCB0byAke3VuaXF1ZU5hbWV9LmBcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBuZXdOYW1lID0gdW5pcXVlTmFtZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHN0YXRlLm5hbWUgPSBuZXdOYW1lO1xyXG4gICAgICAgIHRoaXMuX3N0YXRlcy5kZWxldGUoY3VycmVudE5hbWUpO1xyXG4gICAgICAgIHRoaXMuX3N0YXRlcy5zZXQoc3RhdGUubmFtZSwgc3RhdGUpO1xyXG5cclxuICAgICAgICByZXR1cm4gc3RhdGUubmFtZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgZGlzY2FyZFN0YXRlcygpIHtcclxuICAgICAgICB0aGlzLl9zdGF0ZXMuZm9yRWFjaChzdGF0ZSA9PiB7XHJcbiAgICAgICAgICBzdGF0ZS5kaXNjYXJkKCk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGRlbGV0ZSB0aGlzLl9zdGF0ZXM7XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgICByZXR1cm4gU3RhdGVDb250YWluZXJNaXhpbjtcclxuICB9XHJcbn1cclxuZXhwb3J0IGRlZmF1bHQgU3RhdGVDb250YWluZXJJbnRlcmZhY2U7XHJcbiIsIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxyXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTBcclxuaW1wb3J0IEFic3RyYWN0U3RhdGUgZnJvbSAnLi9BYnN0cmFjdFN0YXRlJztcclxuaW1wb3J0IEFuaW1hdGlvblBsYXllckludGVyZmFjZSBmcm9tICcuLi9BbmltYXRpb25QbGF5ZXJJbnRlcmZhY2UnO1xyXG5pbXBvcnQgU3RhdGVDb250YWluZXJJbnRlcmZhY2UgZnJvbSAnLi9TdGF0ZUNvbnRhaW5lckludGVyZmFjZSc7XHJcblxyXG4vKipcclxuICogQ2xhc3MgZm9yIHBsYXlpbmcgYW4gb3JkZXJlZCBhcnJheSBvZiBhbmltYXRpb24gc3RhdGVzIGluIHNlcXVlbmNlLlxyXG4gKlxyXG4gKiBAZXh0ZW5kcyBBYnN0cmFjdFN0YXRlXHJcbiAqIEBpbXBsZW1lbnRzIEBBbmltYXRpb25QbGF5ZXJJbnRlcmZhY2VcclxuICovXHJcbmNsYXNzIFF1ZXVlU3RhdGUgZXh0ZW5kcyBBbmltYXRpb25QbGF5ZXJJbnRlcmZhY2UuTWl4aW4oXHJcbiAgU3RhdGVDb250YWluZXJJbnRlcmZhY2UuTWl4aW4oQWJzdHJhY3RTdGF0ZSlcclxuKSB7XHJcbiAgLyoqXHJcbiAgICogQGNvbnN0cnVjdG9yXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIC0gT3B0aW9ucyBmb3IgdGhlIHN0YXRlLlxyXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuYXV0b0FkdmFuY2U9dHJ1ZV0gLSBXaGV0aGVyIHRvIGF1dG1hdGljYWxseSBhZHZhbmNlXHJcbiAgICogdG8gdGhlIG5leHQgc3RhdGUgaW4gdGhlIHF1ZXVlIGFzIGVhY2ggc3RhdGUgY29tcGxldGVzLlxyXG4gICAqIEBwYXJhbSB7QXJyYXkuPEFic3RyYWN0U3RhdGU+fSBbcXVldWVTdGF0ZXM9W11dIC0gQXJyYXkgb2Ygc3RhdGVzIHRvIGJlIHBsYXllZFxyXG4gICAqIGluIG9yZGVyLlxyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMgPSB7fSwgcXVldWVTdGF0ZXMgPSBbXSkge1xyXG4gICAgc3VwZXIob3B0aW9ucyk7XHJcblxyXG4gICAgcXVldWVTdGF0ZXMuZm9yRWFjaChzdGF0ZSA9PiB7XHJcbiAgICAgIHRoaXMuYWRkU3RhdGUoc3RhdGUpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5fcXVldWUgPSB0aGlzLl9zdGF0ZXMua2V5cygpO1xyXG4gICAgdGhpcy5fZG9uZSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHdoZXRoZXIgdGhlIGFuaW1hdGlvbiBxdWV1ZSBoYXMgcmVhY2hlZCB0aGUgZW5kLlxyXG4gICAqL1xyXG4gIGdldCBkb25lKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2RvbmU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSBpbnRlcm5hbCB3ZWlnaHQuXHJcbiAgICpcclxuICAgKiBAcmVhZG9ubHlcclxuICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAqL1xyXG4gIGdldCBpbnRlcm5hbFdlaWdodCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9jdXJyZW50U3RhdGVcclxuICAgICAgPyB0aGlzLl9jdXJyZW50U3RhdGUuaW50ZXJuYWxXZWlnaHQgKiB0aGlzLl9pbnRlcm5hbFdlaWdodFxyXG4gICAgICA6IDA7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXN0YXJ0IHRoZSBxdWV1ZSBpdGVyYXRvci5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICovXHJcbiAgX3Jlc2V0KCkge1xyXG4gICAgdGhpcy5fcXVldWUgPSB0aGlzLl9zdGF0ZXMua2V5cygpO1xyXG4gICAgY29uc3Qge3ZhbHVlLCBkb25lfSA9IHRoaXMuX3F1ZXVlLm5leHQoKTtcclxuICAgIHRoaXMuX2RvbmUgPSBkb25lO1xyXG5cclxuICAgIHJldHVybiB2YWx1ZSB8fCBudWxsO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTXVsdGlwbGllcyB0aGUgdXNlciB3ZWlnaHQgYnkgYSBmYWN0b3IgdG8gZGV0ZXJtaW5lIHRoZSBpbnRlcm5hbCB3ZWlnaHQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge251bWJlcn0gZmFjdG9yIC0gMC0xIG11bHRpcGxpZXIgdG8gYXBwbHkgdG8gdGhlIHVzZXIgd2VpZ2h0LlxyXG4gICAqL1xyXG4gIHVwZGF0ZUludGVybmFsV2VpZ2h0KGZhY3Rvcikge1xyXG4gICAgc3VwZXIudXBkYXRlSW50ZXJuYWxXZWlnaHQoZmFjdG9yKTtcclxuXHJcbiAgICBpZiAodGhpcy5fY3VycmVudFN0YXRlKSB7XHJcbiAgICAgIHRoaXMuX2N1cnJlbnRTdGF0ZS51cGRhdGVJbnRlcm5hbFdlaWdodCh0aGlzLl9pbnRlcm5hbFdlaWdodCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTdGFydCB0aGUgbmV4dCBhbmltYXRpb24gaW4gdGhlIHF1ZXVlLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9uTmV4dCAtIEZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIGFuIGFuaW1hdGlvbiBjb21wbGV0ZXNcclxuICAgKiBhbmQgdGhlIHF1ZXVlIG1vdmVzIHRvIHRoZSBuZXh0IGFuaW1hdGlvbi5cclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFt3cmFwPWZhbHNlXSAtIFdoZXRoZXIgb3Igbm90IHRvIHN0YXJ0IHRoZSBxdWV1ZSBmcm9tIHRoZVxyXG4gICAqIGJlZ2lubmluZyBhZ2FpbiBpZiB0aGUgZW5kIGhhcyBiZWVuIHJlYWNoZWQuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7RGVmZXJyZWR9XHJcbiAgICovXHJcbiAgbmV4dChvbk5leHQsIHdyYXAgPSBmYWxzZSkge1xyXG4gICAgLy8gTW92ZSB0aGUgcXVldWUgZm9yd2FyZFxyXG4gICAgY29uc3Qge3ZhbHVlOiBuYW1lLCBkb25lfSA9IHRoaXMuX3F1ZXVlLm5leHQoKTtcclxuICAgIHRoaXMuX2RvbmUgPSBkb25lO1xyXG4gICAgdGhpcy5fcGF1c2VkID0gZmFsc2U7XHJcblxyXG4gICAgLy8gVGhlIHF1ZXVlIGhhcyByZWFjaGVkIHRoZSBlbmRcclxuICAgIGlmIChkb25lKSB7XHJcbiAgICAgIC8vIFN0YXJ0IHRoZSBxdWV1ZSBvdmVyXHJcbiAgICAgIGlmICh3cmFwKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucGxheShcclxuICAgICAgICAgIHRoaXMuX3BsYXlDYWxsYmFja3Mub25GaW5pc2gsXHJcbiAgICAgICAgICB0aGlzLl9wbGF5Q2FsbGJhY2tzLm9uRXJyb3IsXHJcbiAgICAgICAgICB0aGlzLl9wbGF5Q2FsbGJhY2tzLm9uQ2FuY2VsLFxyXG4gICAgICAgICAgb25OZXh0XHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgICAvLyBTdG9wIHRoZSBxdWV1ZVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLl9wcm9taXNlcy5maW5pc2gucmVzb2x2ZSgpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wcm9taXNlcy5maW5pc2g7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBTaWduYWwgdGhlIG5leHQgYW5pbWF0aW9uIGlzIHN0YXJ0aW5nXHJcbiAgICBpZiAodHlwZW9mIG9uTmV4dCA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICBjb25zdCBsYXN0TmFtZSA9IFsuLi50aGlzLl9zdGF0ZXMua2V5cygpXVt0aGlzLl9zdGF0ZXMuc2l6ZSAtIDFdO1xyXG4gICAgICBjb25zdCBpc1F1ZXVlRW5kID0gbmFtZSA9PT0gbGFzdE5hbWU7XHJcbiAgICAgIG9uTmV4dCh7XHJcbiAgICAgICAgbmFtZSxcclxuICAgICAgICBjYW5BZHZhbmNlOiB0aGlzLmdldFN0YXRlKG5hbWUpLmxvb3BDb3VudCAhPT0gSW5maW5pdHkgJiYgIWlzUXVldWVFbmQsXHJcbiAgICAgICAgaXNRdWV1ZUVuZCxcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gU3RhcnQgdGhlIG5leHQgYW5pbWF0aW9uXHJcbiAgICB0aGlzLnBsYXlBbmltYXRpb24oXHJcbiAgICAgIG5hbWUsXHJcbiAgICAgIHRoaXMuX3RyYW5zaXRpb25UaW1lLFxyXG4gICAgICB0aGlzLl9lYXNpbmdGbixcclxuICAgICAgKCkgPT4ge1xyXG4gICAgICAgIGlmICghdGhpcy5fcGF1c2VkICYmICF0aGlzLmlzVHJhbnNpdGlvbmluZykge1xyXG4gICAgICAgICAgdGhpcy5uZXh0KG9uTmV4dCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICB0aGlzLl9wbGF5Q2FsbGJhY2tzLm9uRXJyb3JcclxuICAgICk7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuX3Byb21pc2VzLmZpbmlzaDtcclxuICB9XHJcblxyXG4gIHBsYXkob25GaW5pc2gsIG9uRXJyb3IsIG9uQ2FuY2VsLCBvbk5leHQpIHtcclxuICAgIGNvbnN0IG5hbWUgPSB0aGlzLl9yZXNldCgpO1xyXG4gICAgc3VwZXIucGxheShvbkZpbmlzaCwgb25FcnJvciwgb25DYW5jZWwpO1xyXG5cclxuICAgIGlmICh0aGlzLl9kb25lKSB7XHJcbiAgICAgIHRoaXMuX3Byb21pc2VzLmZpbmlzaC5yZXNvbHZlKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBTaWduYWwgdGhlIG5leHQgYW5pbWF0aW9uIGlzIHN0YXJ0aW5nXHJcbiAgICAgIGlmIChuYW1lICE9PSB0aGlzLmN1cnJlbnRBbmltYXRpb24gJiYgdHlwZW9mIG9uTmV4dCA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgIGNvbnN0IGxhc3ROYW1lID0gWy4uLnRoaXMuX3N0YXRlcy5rZXlzKCldW3RoaXMuX3N0YXRlcy5zaXplIC0gMV07XHJcbiAgICAgICAgY29uc3QgaXNRdWV1ZUVuZCA9IG5hbWUgPT09IGxhc3ROYW1lO1xyXG4gICAgICAgIG9uTmV4dCh7XHJcbiAgICAgICAgICBuYW1lLFxyXG4gICAgICAgICAgY2FuQWR2YW5jZTogbmFtZVxyXG4gICAgICAgICAgICA/IHRoaXMuZ2V0U3RhdGUobmFtZSkubG9vcENvdW50ICE9PSBJbmZpbml0eSAmJiAhaXNRdWV1ZUVuZFxyXG4gICAgICAgICAgICA6IHRydWUsXHJcbiAgICAgICAgICBpc1F1ZXVlRW5kOiAhbmFtZSB8fCBpc1F1ZXVlRW5kLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBTdGFydCB0aGUgbmV4dCBhbmltYXRpb25cclxuICAgICAgdGhpcy5wbGF5QW5pbWF0aW9uKFxyXG4gICAgICAgIG5hbWUsXHJcbiAgICAgICAgdGhpcy5fY3VycmVudFN0YXRlID8gdGhpcy5fdHJhbnNpdGlvblRpbWUgOiAwLFxyXG4gICAgICAgIHRoaXMuX2Vhc2luZ0ZuLFxyXG4gICAgICAgICgpID0+IHtcclxuICAgICAgICAgIGlmICghdGhpcy5fcGF1c2VkICYmICF0aGlzLmlzVHJhbnNpdGlvbmluZykge1xyXG4gICAgICAgICAgICB0aGlzLm5leHQob25OZXh0KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIG9uRXJyb3JcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcy5fcHJvbWlzZXMuZmluaXNoO1xyXG4gIH1cclxuXHJcbiAgcGF1c2UoKSB7XHJcbiAgICBjb25zdCBwYXVzZWQgPSBzdXBlci5wYXVzZSgpO1xyXG4gICAgdGhpcy5wYXVzZUFuaW1hdGlvbigpO1xyXG5cclxuICAgIHJldHVybiBwYXVzZWQ7XHJcbiAgfVxyXG5cclxuICByZXN1bWUob25GaW5pc2gsIG9uRXJyb3IsIG9uQ2FuY2VsLCBvbk5leHQpIHtcclxuICAgIGlmICh0aGlzLl9kb25lKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnBsYXkob25GaW5pc2gsIG9uRXJyb3IsIG9uQ2FuY2VsLCBvbk5leHQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgc3VwZXIucmVzdW1lKG9uRmluaXNoLCBvbkVycm9yLCBvbkNhbmNlbCk7XHJcblxyXG4gICAgICB0aGlzLnJlc3VtZUFuaW1hdGlvbihcclxuICAgICAgICB0aGlzLl9jdXJyZW50U3RhdGUubmFtZSxcclxuICAgICAgICB0aGlzLl90cmFuc2l0aW9uVGltZSxcclxuICAgICAgICB0aGlzLl9lYXNpbmdGbixcclxuICAgICAgICAoKSA9PiB7XHJcbiAgICAgICAgICBpZiAoIXRoaXMuX3BhdXNlZCAmJiAhdGhpcy5pc1RyYW5zaXRpb25pbmcpIHtcclxuICAgICAgICAgICAgdGhpcy5uZXh0KG9uTmV4dCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBvbkVycm9yXHJcbiAgICAgICk7XHJcblxyXG4gICAgICByZXR1cm4gdGhpcy5fcHJvbWlzZXMuZmluaXNoO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2FuY2VsKCkge1xyXG4gICAgY29uc3QgY2FuY2VsZWQgPSBzdXBlci5jYW5jZWwoKTtcclxuXHJcbiAgICBpZiAodGhpcy5fY3VycmVudFN0YXRlKSB7XHJcbiAgICAgIHRoaXMuX2N1cnJlbnRTdGF0ZS5jYW5jZWwoKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gY2FuY2VsZWQ7XHJcbiAgfVxyXG5cclxuICBzdG9wKCkge1xyXG4gICAgY29uc3Qgc3RvcHBlZCA9IHN1cGVyLnN0b3AoKTtcclxuICAgIHRoaXMuc3RvcEFuaW1hdGlvbigpO1xyXG4gICAgdGhpcy5fZG9uZSA9IHRydWU7XHJcblxyXG4gICAgcmV0dXJuIHN0b3BwZWQ7XHJcbiAgfVxyXG5cclxuICBkaXNjYXJkKCkge1xyXG4gICAgc3VwZXIuZGlzY2FyZCgpO1xyXG5cclxuICAgIHRoaXMuZGlzY2FyZFN0YXRlcygpO1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgUXVldWVTdGF0ZTtcclxuIiwiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXHJcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxyXG5pbXBvcnQgRGVmZXJyZWQgZnJvbSAnY29yZS9EZWZlcnJlZCc7XHJcbmltcG9ydCBNYXRoVXRpbHMgZnJvbSAnY29yZS9NYXRoVXRpbHMnO1xyXG5pbXBvcnQgQWJzdHJhY3RTdGF0ZSBmcm9tICcuL0Fic3RyYWN0U3RhdGUnO1xyXG5pbXBvcnQgU3RhdGVDb250YWluZXJJbnRlcmZhY2UgZnJvbSAnLi9TdGF0ZUNvbnRhaW5lckludGVyZmFjZSc7XHJcblxyXG4vKipcclxuICogQmFzZSBjbGFzcyBmb3IgYSBzdGF0ZSB0aGF0IGJsZW5kcyBhIGNvbGxlY3Rpb24gb2Yge0BsaW5rIEFic3RyYWN0U3RhdGV9LlxyXG4gKlxyXG4gKiBAYWJzdHJhY3RcclxuICogQGltcGxlbWVudHMgU3RhdGVDb250YWluZXJJbnRlcmZhY2VcclxuICovXHJcbmNsYXNzIEFic3RyYWN0QmxlbmRTdGF0ZSBleHRlbmRzIFN0YXRlQ29udGFpbmVySW50ZXJmYWNlLk1peGluKEFic3RyYWN0U3RhdGUpIHtcclxuICBjb25zdHJ1Y3RvcihvcHRpb25zID0ge30sIGJsZW5kU3RhdGVzID0gW10sIC4uLmFyZ3MpIHtcclxuICAgIHN1cGVyKG9wdGlvbnMsIC4uLmFyZ3MpO1xyXG4gICAgYmxlbmRTdGF0ZXMuZm9yRWFjaChzdGF0ZSA9PiB7XHJcbiAgICAgIHRoaXMuYWRkU3RhdGUoc3RhdGUpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSBzdW0gb2YgaW50ZXJuYWwgd2VpZ2h0cyBvZiB0aGUgc3ViLXN0YXRlcy5cclxuICAgKlxyXG4gICAqIEByZWFkb25seVxyXG4gICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICovXHJcbiAgZ2V0IGludGVybmFsV2VpZ2h0KCkge1xyXG4gICAgbGV0IGJsZW5kV2VpZ2h0cyA9IDA7XHJcbiAgICB0aGlzLl9zdGF0ZXMuZm9yRWFjaChzdGF0ZSA9PiB7XHJcbiAgICAgIGJsZW5kV2VpZ2h0cyArPSBzdGF0ZS5pbnRlcm5hbFdlaWdodDtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGJsZW5kV2VpZ2h0cztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdGhlIHdlaWdodCBvZiBhIHN0YXRlIGNvbnRyb2xsZWQgYnkgdGhlIGNvbnRhaW5lci5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gTmFtZSBvZiB0aGUgc3RhdGUgdG8gcmV0dXJuIHRoZSB3ZWlnaHQgZnJvbS5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IC0gV2VpZ2h0IG9mIHRoZSBzdGF0ZS5cclxuICAgKi9cclxuICBnZXRCbGVuZFdlaWdodChuYW1lKSB7XHJcbiAgICAvLyBNYWtlIHN1cmUgdGhlIG5hbWUgaXMgdmFsaWRcclxuICAgIGNvbnN0IHN0YXRlID0gdGhpcy5nZXRTdGF0ZShuYW1lKTtcclxuICAgIGlmIChzdGF0ZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgQ2Fubm90IGdldCB3ZWlnaHQgb2Ygc3RhdGUgJHtuYW1lfSBmcm9tIEJsZW5kU3RhdGUgJHt0aGlzLm5hbWV9LiBObyBzdGF0ZSBleGlzdHMgd2l0aCB0aGlzIG5hbWUuYFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBzdGF0ZS53ZWlnaHQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXRzIHRoZSB3ZWlnaHQgb2YgYSBzdGF0ZSBjb250cm9sbGVkIGJ5IHRoZSBjb250YWluZXIuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIE5hbWUgb2YgdGhlIHN0YXRlIHRvIHNldCB0aGUgd2VpZ2h0IG9mLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB3ZWlnaHQgLSBXZWlnaHQgdmFsdWUgdG8gc2V0IG9uIHRoZSBzdGF0ZS5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtEZWZlcnJlZH1cclxuICAgKi9cclxuICBzZXRCbGVuZFdlaWdodChuYW1lLCB3ZWlnaHQsIHNlY29uZHMgPSAwLCBlYXNpbmdGbikge1xyXG4gICAgLy8gTWFrZSBzdXJlIHRoZSBuYW1lIGlzIHZhbGlkXHJcbiAgICBjb25zdCBzdGF0ZSA9IHRoaXMuZ2V0U3RhdGUobmFtZSk7XHJcblxyXG4gICAgaWYgKHN0YXRlID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgIGBDYW5ub3Qgc2V0IHdlaWdodCBvZiBzdGF0ZSAke25hbWV9IGZyb20gQmxlbmRTdGF0ZSAke3RoaXMubmFtZX0uIE5vIHN0YXRlIGV4aXN0cyB3aXRoIHRoaXMgbmFtZS5gXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgd2VpZ2h0ID0gTWF0aFV0aWxzLmNsYW1wKHdlaWdodCk7XHJcbiAgICByZXR1cm4gc3RhdGUuc2V0V2VpZ2h0KHdlaWdodCwgc2Vjb25kcywgZWFzaW5nRm4pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTXVsdGlwbGllcyB0aGUgd2VpZ2h0IG9mIGVhY2ggc3ViLXN0YXRlIGJ5IGEgZmFjdG9yIHRvIGRldGVybWluZSB0aGUgaW50ZXJuYWwgd2VpZ2h0LlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IGZhY3RvciAtIDAtMSBtdWx0aXBsaWVyIHRvIGFwcGx5IHRvIHRoZSB1c2VyIHdlaWdodC5cclxuICAgKi9cclxuICB1cGRhdGVJbnRlcm5hbFdlaWdodChmYWN0b3IpIHtcclxuICAgIHN1cGVyLnVwZGF0ZUludGVybmFsV2VpZ2h0KGZhY3Rvcik7XHJcblxyXG4gICAgdGhpcy5fc3RhdGVzLmZvckVhY2goc3RhdGUgPT4ge1xyXG4gICAgICBzdGF0ZS51cGRhdGVJbnRlcm5hbFdlaWdodCh0aGlzLl9pbnRlcm5hbFdlaWdodCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZSBhbnkgdmFsdWVzIG9mIHRoZSBzdWItc3RhdGVzIHRoYXQgbmVlZCB0byBiZSBldmFsdWF0ZWQgZXZlcnkgZnJhbWUuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge251bWJlcn0gZGVsdGFUaW1lIC0gVGltZSBpbiBtaWxsaXNlY29uZHMgc2luY2UgdGhlIGxhc3QgdXBkYXRlLlxyXG4gICAqL1xyXG4gIHVwZGF0ZShkZWx0YVRpbWUpIHtcclxuICAgIHN1cGVyLnVwZGF0ZShkZWx0YVRpbWUpO1xyXG5cclxuICAgIHRoaXMuX3N0YXRlcy5mb3JFYWNoKHN0YXRlID0+IHtcclxuICAgICAgc3RhdGUudXBkYXRlKGRlbHRhVGltZSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFN0YXJ0IHBsYXliYWNrIG9mIHRoZSBzdWItc3RhdGVzIGZyb20gdGhlIGJlZ2lubmluZy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvbkZpbmlzaCAtIEZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgc3RhdGUgZmluaXNoZXMuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9uRXJyb3IgLSBGdW5jdGlvbiB0byBleGVjdXRlIGlmIHRoZSBzdGF0ZSBlbmNvdW50ZXJzXHJcbiAgICogYW4gZXJyb3IgZHVyaW5nIHBsYXliYWNrLlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvbkNhbmNlbCAtIEZ1bmN0aW9uIHRvIGV4ZWN1dGUgaWYgcGxheWJhY2sgaXMgY2FuY2VsZWQuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7RGVmZXJyZWR9XHJcbiAgICovXHJcbiAgcGxheShvbkZpbmlzaCwgb25FcnJvciwgb25DYW5jZWwpIHtcclxuICAgIGNvbnN0IHByb21pc2VzID0gW3N1cGVyLnBsYXkoKV07XHJcblxyXG4gICAgdGhpcy5fc3RhdGVzLmZvckVhY2goc3RhdGUgPT4ge1xyXG4gICAgICBwcm9taXNlcy5wdXNoKHN0YXRlLnBsYXkoKSk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBEZWZlcnJlZC5hbGwocHJvbWlzZXMsIG9uRmluaXNoLCBvbkVycm9yLCBvbkNhbmNlbCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQYXVzZSBwbGF5YmFjayBvZiB0aGUgc3ViLXN0YXRlcy4gVGhpcyBwcmV2ZW50cyBwZW5kaW5nIHByb21pc2VzIGZyb20gYmVpbmcgZXhlY3V0ZWQuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuICAgKi9cclxuICBwYXVzZSgpIHtcclxuICAgIHRoaXMuX3N0YXRlcy5mb3JFYWNoKHN0YXRlID0+IHtcclxuICAgICAgc3RhdGUucGF1c2UoKTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHN1cGVyLnBhdXNlKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXN1bWUgcGxheWJhY2sgb2YgdGhlIHN1Yi1zdGF0ZXMuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb25GaW5pc2ggLSBGdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIHN0YXRlIGZpbmlzaGVzLlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvbkVycm9yIC0gRnVuY3Rpb24gdG8gZXhlY3V0ZSBpZiB0aGUgc3RhdGUgZW5jb3VudGVyc1xyXG4gICAqIGFuIGVycm9yIGR1cmluZyBwbGF5YmFjay5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb25DYW5jZWwgLSBGdW5jdGlvbiB0byBleGVjdXRlIGlmIHBsYXliYWNrIGlzIGNhbmNlbGVkLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0RlZmVycmVkfVxyXG4gICAqL1xyXG4gIHJlc3VtZShvbkZpbmlzaCwgb25FcnJvciwgb25DYW5jZWwpIHtcclxuICAgIGNvbnN0IHByb21pc2VzID0gW3N1cGVyLnJlc3VtZSgpXTtcclxuXHJcbiAgICB0aGlzLl9zdGF0ZXMuZm9yRWFjaChzdGF0ZSA9PiB7XHJcbiAgICAgIHByb21pc2VzLnB1c2goc3RhdGUucmVzdW1lKCkpO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gRGVmZXJyZWQuYWxsKHByb21pc2VzLCBvbkZpbmlzaCwgb25FcnJvciwgb25DYW5jZWwpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2FuY2VsIHBsYXliYWNrIG9mIHRoZSBzdWItc3RhdGVzIGFuZCBjYW5jZWwgYW55IHBlbmRpbmcgcHJvbWlzZXMuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuICAgKi9cclxuICBjYW5jZWwoKSB7XHJcbiAgICB0aGlzLl9zdGF0ZXMuZm9yRWFjaChzdGF0ZSA9PiB7XHJcbiAgICAgIHN0YXRlLmNhbmNlbCgpO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gc3VwZXIuY2FuY2VsKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTdG9wIHBsYXliYWNrIG9mIHRoZSBzdWItc3RhdGVzIGFuZCByZXNvbHZlIGFueSBwZW5kaW5nIHByb21pc2VzLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAgICovXHJcbiAgc3RvcCgpIHtcclxuICAgIHRoaXMuX3N0YXRlcy5mb3JFYWNoKHN0YXRlID0+IHtcclxuICAgICAgc3RhdGUuc3RvcCgpO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gc3VwZXIuc3RvcCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRGlzY2FyZHMgYWxsIHN1Yi1zdGF0ZSByZXNvdXJjZXMuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuICAgKi9cclxuICBkaXNjYXJkKCkge1xyXG4gICAgc3VwZXIuZGlzY2FyZCgpO1xyXG5cclxuICAgIHRoaXMuZGlzY2FyZFN0YXRlcygpO1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgQWJzdHJhY3RCbGVuZFN0YXRlO1xyXG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cclxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVC0wXHJcbmltcG9ydCBBYnN0cmFjdEJsZW5kU3RhdGUgZnJvbSAnLi9BYnN0cmFjdEJsZW5kU3RhdGUnO1xyXG5cclxuLyoqXHJcbiAqIENsYXNzIGZvciBibGVuZGluZyBOIG51bWJlciBvZiBibGVuZCBzdGF0ZXMuXHJcbiAqXHJcbiAqIEBleHRlbmRzIEFic3RyYWN0QmxlbmRTdGF0ZVxyXG4gKi9cclxuY2xhc3MgRnJlZUJsZW5kU3RhdGUgZXh0ZW5kcyBBYnN0cmFjdEJsZW5kU3RhdGUge1xyXG4gIC8qKlxyXG4gICAqIEBjb25zdHJ1Y3RvclxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XSAtIE9wdGlvbnMgZm9yIHRoZSBjb250YWluZXIgc3RhdGUuXHJcbiAgICogQHBhcmFtIHtBcnJheS48QWJzdHJhY3RTdGF0ZT59IFtibGVuZFN0YXRlcz1bXV0gLSBCbGVuZCBzdGF0ZXMgdG8gYmUgY29udHJvbGxlZCBieVxyXG4gICAqIHRoaXMgY29udGFpbmVyLlxyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMgPSB7fSwgYmxlbmRTdGF0ZXMgPSBbXSkge1xyXG4gICAgc3VwZXIob3B0aW9ucywgYmxlbmRTdGF0ZXMpO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlSW50ZXJuYWxXZWlnaHQoZmFjdG9yKSB7XHJcbiAgICBzdXBlci51cGRhdGVJbnRlcm5hbFdlaWdodChmYWN0b3IpO1xyXG5cclxuICAgIC8vIERldGVybWluZSB0aGUgdG90YWwgYWN0aXZlIHdlaWdodCBvZiBibGVuZCBzdGF0ZXNcclxuICAgIGxldCBzdW1XZWlnaHRzID0gMDtcclxuXHJcbiAgICB0aGlzLl9zdGF0ZXMuZm9yRWFjaChzdGF0ZSA9PiB7XHJcbiAgICAgIHN1bVdlaWdodHMgKz0gc3RhdGUud2VpZ2h0O1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gRW5zdXJlIHRoZSBzdW0gb2YgYmxlbmQgc3RhdGUgaW50ZXJuYWwgd2VpZ2h0cyBkb2VzIG5vdCBleGNlZWQgY29udGFpbmVyIGludGVybmFsIHdlaWdodFxyXG4gICAgZmFjdG9yIC89IE1hdGgubWF4KHN1bVdlaWdodHMsIDEpO1xyXG5cclxuICAgIC8vIFN1bSBvZiBibGVuZCBzdGF0ZSBpbnRlcm5hbCB3ZWlnaHRzIHNob3VsZCBub3QgZXhjZWVkIGNvbnRhaW5lciBpbnRlcm5hbCB3ZWlnaHRcclxuICAgIHRoaXMuX3N0YXRlcy5mb3JFYWNoKHN0YXRlID0+IHtcclxuICAgICAgc3RhdGUudXBkYXRlSW50ZXJuYWxXZWlnaHQoZmFjdG9yICogdGhpcy5fd2VpZ2h0KTtcclxuICAgIH0pO1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgRnJlZUJsZW5kU3RhdGU7XHJcbiIsIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxyXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTBcclxuaW1wb3J0IERlZmVycmVkIGZyb20gJ2NvcmUvRGVmZXJyZWQnO1xyXG5pbXBvcnQgQWJzdHJhY3RCbGVuZFN0YXRlIGZyb20gJy4vQWJzdHJhY3RCbGVuZFN0YXRlJztcclxuaW1wb3J0IEFuaW1hdGlvblV0aWxzIGZyb20gJy4uL0FuaW1hdGlvblV0aWxzJztcclxuXHJcbi8qKlxyXG4gKiBDbGFzcyBmb3IgYmxlbmRpbmcgTiBudW1iZXIgb2YgYmxlbmQgc3RhdGVzIGJhc2VkIG9uIGEgc2luZ2xlXHJcbiAqIHBhcmFtZXRlci5cclxuICpcclxuICogQGV4dGVuZHMgQWJzdHJhY3RCbGVuZFN0YXRlXHJcbiAqL1xyXG5jbGFzcyBCbGVuZDFkU3RhdGUgZXh0ZW5kcyBBYnN0cmFjdEJsZW5kU3RhdGUge1xyXG4gIC8qKlxyXG4gICAqIEBjb25zdHJ1Y3RvclxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSAtIE9wdGlvbnMgZm9yIHRoZSBjb250YWluZXIgc3RhdGVcclxuICAgKiBAcGFyYW0ge0FycmF5LjxBYnN0cmFjdEJsZW5kU3RhdGU+fSBbYmxlbmRTdGF0ZXM9W11dIC0gQmxlbmQgc3RhdGVzIHRvIGJlXHJcbiAgICogY29udHJvbGxlZCBieSB0aGlzIGNvbnRhaW5lci5cclxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBbYmxlbmRUaHJlc2hvbGRzPVtdXSAtIFRocmVzaG9sZCB2YWx1ZXMgZm9yIGFjdGl2YXRpbmdcclxuICAgKiBlYWNoIGJsZW5kIHN0YXRlLlxyXG4gICAqIEBwYXJhbSB7QXJyYXkuPGJvb2xlYW4+fSBbcGhhc2VNYXRjaGVzPVtdXSAtIEJvb2xlYW5zIGluZGljYXRpbmcgd2hldGhlciBvciBub3RcclxuICAgKiBlYWNoIGJsZW5kIHN0YXRlIHNob3VsZCBiZSBwaGFzZSBtYXRjaGVkLlxyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgb3B0aW9ucyA9IHt9LFxyXG4gICAgYmxlbmRTdGF0ZXMgPSBbXSxcclxuICAgIGJsZW5kVGhyZXNob2xkcyA9IFtdLFxyXG4gICAgcGhhc2VNYXRjaGVzID0gW11cclxuICApIHtcclxuICAgIHN1cGVyKG9wdGlvbnMsIGJsZW5kU3RhdGVzKTtcclxuXHJcbiAgICB0aGlzLl9ibGVuZFZhbHVlID0gMDtcclxuICAgIHRoaXMuX3Byb21pc2VzID0ge1xyXG4gICAgICAuLi50aGlzLl9wcm9taXNlcyxcclxuICAgICAgYmxlbmRWYWx1ZTogRGVmZXJyZWQucmVzb2x2ZSgpLFxyXG4gICAgfTtcclxuXHJcbiAgICAvLyBWYWxpZGF0ZSB0aGVyZSBhcmUgbm8gZHVwbGljYXRlIHRocmVzaG9sZHNcclxuICAgIGNvbnN0IG5vblplcm9EaWZmZXJlbnRTaXplID1cclxuICAgICAgYmxlbmRTdGF0ZXMubGVuZ3RoICE9PSAwICYmIGJsZW5kU3RhdGVzLmxlbmd0aCAhPT0gYmxlbmRUaHJlc2hvbGRzLmxlbmd0aDtcclxuICAgIGlmIChub25aZXJvRGlmZmVyZW50U2l6ZSkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgYENhbm5vdCBjcmVhdGUgQmxlbmQxZFN0YXRlIHdpdGggYmxlbmRUaHJlc2hvbGRzICR7YmxlbmRUaHJlc2hvbGRzfS4gQmxlbmRUaHJlc2hvbGRzIGNvdW50IGRvZXMgbm90IG1hdGNoIGJsZW5kU3RhdGVzIGNvdW50LmBcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBjb250YWluc0R1cGxpY2F0ZXMgPVxyXG4gICAgICBuZXcgU2V0KGJsZW5kVGhyZXNob2xkcykuc2l6ZSAhPT0gYmxlbmRUaHJlc2hvbGRzLmxlbmd0aDtcclxuICAgIGlmIChjb250YWluc0R1cGxpY2F0ZXMpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgIGBDYW5ub3QgY3JlYXRlIEJsZW5kMWRTdGF0ZSB3aXRoIGJsZW5kVGhyZXNob2xkcyAke2JsZW5kVGhyZXNob2xkc30uIEJsZW5kVGhyZXNob2xkcyBjb250YWlucyBkdXBsaWNhdGUgdmFsdWVzYFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEluaXRpYWxpemUgdGhlIHRocmVzaG9sZHMgbWFwXHJcbiAgICB0aGlzLl90aHJlc2hvbGRzID0gW107XHJcbiAgICBbLi4udGhpcy5fc3RhdGVzLnZhbHVlcygpXS5mb3JFYWNoKChzdGF0ZSwgaW5kZXgpID0+IHtcclxuICAgICAgdGhpcy5fdGhyZXNob2xkcy5wdXNoKHtcclxuICAgICAgICB2YWx1ZTogYmxlbmRUaHJlc2hvbGRzW2luZGV4XSxcclxuICAgICAgICBuYW1lOiBzdGF0ZS5uYW1lLFxyXG4gICAgICAgIHBoYXNlTWF0Y2g6IHBoYXNlTWF0Y2hlc1tpbmRleF0gfHwgZmFsc2UsXHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5fc29ydFRocmVzaG9sZHMoKTtcclxuICAgIHRoaXMuX2ZvcmNlTm9UaHJlc2hvbGREdXBlcyA9IHRydWU7XHJcblxyXG4gICAgdGhpcy5fcGhhc2VMZWFkU3RhdGUgPSBudWxsO1xyXG5cclxuICAgIHRoaXMuX3VwZGF0ZUJsZW5kV2VpZ2h0cygpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyBhbmQgc2V0cyB0aGUgYmxlbmQgcGFyYW1ldGVyIHZhbHVlLlxyXG4gICAqL1xyXG4gIGdldCBibGVuZFZhbHVlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2JsZW5kVmFsdWU7XHJcbiAgfVxyXG5cclxuICBzZXQgYmxlbmRWYWx1ZSh2YWx1ZSkge1xyXG4gICAgdGhpcy5fYmxlbmRWYWx1ZSA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyB3aGV0aGVyIG9yIG5vdCB0aGUgYmxlbmQgdmFsdWUgaXMgY3VycmVudGx5IGJlaW5nIGFuaW1hdGVkLlxyXG4gICAqL1xyXG4gIGdldCBibGVuZFZhbHVlUGVuZGluZygpIHtcclxuICAgIHJldHVybiB0aGlzLl9wcm9taXNlcy5ibGVuZFZhbHVlICYmIHRoaXMuX3Byb21pc2VzLmJsZW5kVmFsdWUucGVuZGluZztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZXMgdGhlIHVzZXIgZGVmaW5lZCB3ZWlnaHQgb3ZlciB0aW1lLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtudWxsfSBuYW1lIC0gVW51c2VkIHBhcmFtZXRlci5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gd2VpZ2h0IC0gVGhlIHRhcmdldCB3ZWlnaHQgdmFsdWUuXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtzZWNvbmRzPTBdIC0gVGhlIGFtb3VudCBvZiB0aW1lIGl0IHdpbGwgdGFrZSB0byByZWFjaCB0aGVcclxuICAgKiB0YXJnZXQgd2VpZ2h0LlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBlYXNpbmdGbiAtIFRoZSBlYXNpbmcgZnVuY3Rpb24gdG8gdXNlIGZvciBpbnRlcnBvbGF0aW9uLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0RlZmVycmVkfVxyXG4gICAqL1xyXG4gIHNldEJsZW5kV2VpZ2h0KG5hbWUsIHZhbHVlLCBzZWNvbmRzID0gMCwgZWFzaW5nRm4pIHtcclxuICAgIHRoaXMuX3Byb21pc2VzLmJsZW5kVmFsdWUuY2FuY2VsKCk7XHJcblxyXG4gICAgdGhpcy5fcHJvbWlzZXMuYmxlbmRWYWx1ZSA9IEFuaW1hdGlvblV0aWxzLmludGVycG9sYXRlUHJvcGVydHkoXHJcbiAgICAgIHRoaXMsXHJcbiAgICAgICdibGVuZFZhbHVlJyxcclxuICAgICAgdmFsdWUsXHJcbiAgICAgIHtcclxuICAgICAgICBzZWNvbmRzLFxyXG4gICAgICAgIGVhc2luZ0ZuLFxyXG4gICAgICAgIG9uUHJvZ3Jlc3M6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuX3VwZGF0ZUJsZW5kV2VpZ2h0cygpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgb25GaW5pc2g6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuX3VwZGF0ZUJsZW5kV2VpZ2h0cygpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH1cclxuICAgICk7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuX3Byb21pc2VzLmJsZW5kVmFsdWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSB1c2VyIGRlZmluZWQgd2VpZ2h0LlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge251bWJlcn1cclxuICAgKi9cclxuICBnZXRCbGVuZFdlaWdodCgpIHtcclxuICAgIHJldHVybiB0aGlzLmJsZW5kVmFsdWU7XHJcbiAgfVxyXG5cclxuICBhZGRTdGF0ZShzdGF0ZSwgdGhyZXNob2xkVmFsdWUgPSAwLCBwaGFzZU1hdGNoID0gZmFsc2UpIHtcclxuICAgIHRoaXMuX3RocmVzaG9sZHMgPSB0aGlzLl90aHJlc2hvbGRzIHx8IFtdO1xyXG5cclxuICAgIC8vIE1ha2Ugc3VyZSB0aGVyZSBpcyBub3QgYWxyZWFkeSBhIHN0YXRlIHdpdGggdGhpcyB0aHJlc2hvbGRcclxuICAgIGNvbnN0IHNhbWVWYWx1ZSA9IHRoaXMuX3RocmVzaG9sZHMuZmluZChcclxuICAgICAgdGhyZXNob2xkID0+IHRocmVzaG9sZC52YWx1ZSA9PT0gdGhyZXNob2xkVmFsdWVcclxuICAgICk7XHJcbiAgICBpZiAodGhpcy5fZm9yY2VOb1RocmVzaG9sZER1cGVzICYmIHNhbWVWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgQ2Fubm90IHNldCBibGVuZCB0aHJlc2hvbGQgb2YgJHt0aHJlc2hvbGRWYWx1ZX0gZm9yIHN0YXRlICR7c3RhdGUubmFtZX0gb24gJHt0aGlzLm5hbWV9LiBBIHN0YXRlIGFscmVhZHkgZXhpc3RzIHdpdGggdGhhdCB0aHJlc2hvbGQuYFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHN1cGVyLmFkZFN0YXRlKHN0YXRlKTtcclxuICAgIHRoaXMuX3RocmVzaG9sZHMucHVzaCh7XHJcbiAgICAgIHZhbHVlOiB0aHJlc2hvbGRWYWx1ZSxcclxuICAgICAgbmFtZTogc3RhdGUubmFtZSxcclxuICAgICAgcGhhc2VNYXRjaDogcGhhc2VNYXRjaCB8fCBmYWxzZSxcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuX3NvcnRUaHJlc2hvbGRzKCk7XHJcblxyXG4gICAgcmV0dXJuIHN0YXRlLm5hbWU7XHJcbiAgfVxyXG5cclxuICByZW1vdmVTdGF0ZShuYW1lKSB7XHJcbiAgICBjb25zdCByZW1vdmVkID0gc3VwZXIucmVtb3ZlU3RhdGUobmFtZSk7XHJcblxyXG4gICAgaWYgKHJlbW92ZWQpIHtcclxuICAgICAgY29uc3QgaW5kZXggPSB0aGlzLl90aHJlc2hvbGRzLmZpbmRJbmRleChcclxuICAgICAgICB0aHJlc2hvbGQgPT4gdGhyZXNob2xkLm5hbWUgPT09IG5hbWVcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5fdGhyZXNob2xkcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiByZW1vdmVkO1xyXG4gIH1cclxuXHJcbiAgcmVuYW1lU3RhdGUoY3VycmVudE5hbWUsIG5ld05hbWUpIHtcclxuICAgIG5ld05hbWUgPSBzdXBlci5yZW5hbWVTdGF0ZShjdXJyZW50TmFtZSwgbmV3TmFtZSk7XHJcblxyXG4gICAgY29uc3QgdGhyZXNob2xkID0gdGhpcy5fdGhyZXNob2xkcy5maW5kKFxyXG4gICAgICB0aHJlc2hvbGQgPT4gdGhyZXNob2xkLm5hbWUgPT09IGN1cnJlbnROYW1lXHJcbiAgICApO1xyXG4gICAgdGhyZXNob2xkLm5hbWUgPSBuZXdOYW1lO1xyXG5cclxuICAgIHJldHVybiBuZXdOYW1lO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgdGhyZXNob2xkIHZhbHVlIG9mIGEgYmxlbmQgd2l0aCB0aGUgY29ycmVzcG9uZGluZyBuYW1lLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBOYW1lIG9mIHRoZSBibGVuZCB0byBnZXQgdGhlIHRocmVzaG9sZCBvZi5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IFRocmVob2xkIHZhbHVlLlxyXG4gICAqL1xyXG4gIGdldEJsZW5kVGhyZXNob2xkKG5hbWUpIHtcclxuICAgIGNvbnN0IHRocmVzaG9sZCA9IHRoaXMuX3RocmVzaG9sZHMuZmluZChcclxuICAgICAgdGhyZXNob2xkID0+IHRocmVzaG9sZC5uYW1lID09PSBuYW1lXHJcbiAgICApO1xyXG5cclxuICAgIGlmICh0aHJlc2hvbGQgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgYENhbm5vdCBnZXQgYmxlbmQgdGhyZXNob2xkIG9mIHN0YXRlICR7bmFtZX0gb24gJHt0aGlzLm5hbWV9LiBObyBzdGF0ZSBleGlzdHMgd2l0aCB0aGF0IG5hbWUuYFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aHJlc2hvbGQudmFsdWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXRzIHRoZSB0aHJlc2hvbGQgdmFsdWUgb2YgYSBibGVuZCB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIG5hbWUuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIE5hbWUgb2YgdGhlIGJsZW5kIHRvIHNldCB0aGUgdGhyZXNob2xkLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSAtIFZhbHVlIG9mIHRoZSB0aHJlc2hvbGQgdG8gc2V0LlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge251bWJlcn0gU2V0IHRocmVzaG9sZCB2YWx1ZS5cclxuICAgKi9cclxuICBzZXRCbGVuZFRocmVzaG9sZChuYW1lLCB2YWx1ZSkge1xyXG4gICAgLy8gTWFrZSBzdXJlIHRoZXJlIGlzIG5vdCBhbHJlYWR5IGEgc3RhdGUgd2l0aCB0aGlzIHRocmVzaG9sZFxyXG4gICAgY29uc3Qgc2FtZVZhbHVlID0gdGhpcy5fdGhyZXNob2xkcy5maW5kKFxyXG4gICAgICB0aHJlc2hvbGQgPT4gdGhyZXNob2xkLnZhbHVlID09PSB2YWx1ZVxyXG4gICAgKTtcclxuICAgIGlmIChzYW1lVmFsdWUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgYENhbm5vdCBzZXQgYmxlbmQgdGhyZXNob2xkIG9mICR7dmFsdWV9IGZvciBzdGF0ZSAke25hbWV9IG9uICR7dGhpcy5uYW1lfS4gQSBzdGF0ZSBhbHJlYWR5IGV4aXN0cyB3aXRoIHRoYXQgdGhyZXNob2xkLmBcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0aHJlc2hvbGQgPSB0aGlzLl90aHJlc2hvbGRzLmZpbmQoXHJcbiAgICAgIHRocmVzaG9sZCA9PiB0aHJlc2hvbGQubmFtZSA9PT0gbmFtZVxyXG4gICAgKTtcclxuXHJcbiAgICBpZiAodGhyZXNob2xkID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgIGBDYW5ub3Qgc2V0IGJsZW5kIHRocmVzaG9sZCBvZiBzdGF0ZSAke25hbWV9IG9uICR7dGhpcy5uYW1lfS4gTm8gc3RhdGUgZXhpc3RzIHdpdGggdGhhdCBuYW1lLmBcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICB0aHJlc2hvbGQudmFsdWUgPSB2YWx1ZTtcclxuXHJcbiAgICB0aGlzLl9zb3J0VGhyZXNob2xkcygpO1xyXG5cclxuICAgIHJldHVybiB0aHJlc2hvbGQudmFsdWU7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVJbnRlcm5hbFdlaWdodChmYWN0b3IpIHtcclxuICAgIHN1cGVyLnVwZGF0ZUludGVybmFsV2VpZ2h0KGZhY3Rvcik7XHJcblxyXG4gICAgaWYgKHRoaXMuX3BoYXNlTGVhZFN0YXRlKSB7XHJcbiAgICAgIHRoaXMuX3N0YXRlcy5mb3JFYWNoKHN0YXRlID0+IHtcclxuICAgICAgICBpZiAoc3RhdGUud2VpZ2h0ICE9PSAwKSB7XHJcbiAgICAgICAgICBzdGF0ZS5ub3JtYWxpemVkVGltZSA9IHRoaXMuX3BoYXNlTGVhZFN0YXRlLm5vcm1hbGl6ZWRUaW1lO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGVzIHRoZSBibGVuZCB3ZWlnaHRzIGJhc2VkIG9uIHRoZWlyIGNvcnJlc3BvbmRpbmcgdGhyZXNob2xkIHZhbHVlc1xyXG4gICAqIGFuZCB0aGUgY3VycmVudCBibGVuZFZhbHVlLiBBZGRpdGlvbmFsbHksIHNldHMgYSBsZWFkIHBoYXNlIHN0YXRlIGlmIHRoZVxyXG4gICAqIGNvbmRpdGlvbnMgZm9yIHBoYXNlLW1hdGNoaW5nIGhhdmUgYmVlbiBzYXRpc2ZpZWQuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIF91cGRhdGVCbGVuZFdlaWdodHMoKSB7XHJcbiAgICBpZiAodGhpcy5fdGhyZXNob2xkcy5sZW5ndGggPT09IDApIHJldHVybjtcclxuXHJcbiAgICBpZiAodGhpcy5fdGhyZXNob2xkcy5sZW5ndGggPT09IDEpIHtcclxuICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzLl9zdGF0ZXMuZ2V0KHRoaXMuX3RocmVzaG9sZHNbMF0ubmFtZSk7XHJcbiAgICAgIHN0YXRlLnNldFdlaWdodCgxKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEluaXRpYWxseSBzZXQgYWxsIHN1Yi1zdGF0ZSB3ZWlnaHRzIHRvIHplcm9cclxuICAgIHRoaXMuX3N0YXRlcy5mb3JFYWNoKHN0YXRlID0+IHtcclxuICAgICAgc3RhdGUuc2V0V2VpZ2h0KDApO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5fcGhhc2VMZWFkU3RhdGUgPSBudWxsO1xyXG5cclxuICAgIC8vIEZpbmQgdGhlIGZpcnN0IHRocmVzaG9sZCB0aGF0IGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgcGFyYW1ldGVyIHZhbHVlXHJcbiAgICBsZXQgdGFyZ2V0SW5kZXggPSB0aGlzLl90aHJlc2hvbGRzLmZpbmRJbmRleCh0aHJlc2hvbGQgPT4ge1xyXG4gICAgICByZXR1cm4gdGhyZXNob2xkLnZhbHVlID49IHRoaXMuX2JsZW5kVmFsdWU7XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAodGFyZ2V0SW5kZXggPT09IDAgfHwgdGFyZ2V0SW5kZXggPT09IC0xKSB7XHJcbiAgICAgIC8vIEdpdmUgb25lIHN0YXRlIGZ1bGwgaW5mbHVlbmNlXHJcbiAgICAgIHRhcmdldEluZGV4ID0gdGFyZ2V0SW5kZXggPT09IC0xID8gdGhpcy5fdGhyZXNob2xkcy5sZW5ndGggLSAxIDogMDtcclxuICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzLl9zdGF0ZXMuZ2V0KHRoaXMuX3RocmVzaG9sZHNbdGFyZ2V0SW5kZXhdLm5hbWUpO1xyXG4gICAgICBzdGF0ZS5zZXRXZWlnaHQoMSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBMaW5lYXIgaW50ZXJwb2xhdGUgaW5mbHVlbmNlIGJldHdlZW4gdHdvIHN0YXRlc1xyXG4gICAgICBjb25zdCB0aHJlc2hvbGRBID0gdGhpcy5fdGhyZXNob2xkc1t0YXJnZXRJbmRleCAtIDFdO1xyXG4gICAgICBjb25zdCB0aHJlc2hvbGRCID0gdGhpcy5fdGhyZXNob2xkc1t0YXJnZXRJbmRleF07XHJcblxyXG4gICAgICBjb25zdCBmYWN0b3JCID1cclxuICAgICAgICAodGhpcy5ibGVuZFZhbHVlIC0gdGhyZXNob2xkQS52YWx1ZSkgL1xyXG4gICAgICAgICh0aHJlc2hvbGRCLnZhbHVlIC0gdGhyZXNob2xkQS52YWx1ZSk7XHJcbiAgICAgIGNvbnN0IGZhY3RvckEgPSAxIC0gZmFjdG9yQjtcclxuXHJcbiAgICAgIGNvbnN0IHN0YXRlQSA9IHRoaXMuX3N0YXRlcy5nZXQodGhyZXNob2xkQS5uYW1lKTtcclxuICAgICAgY29uc3Qgc3RhdGVCID0gdGhpcy5fc3RhdGVzLmdldCh0aHJlc2hvbGRCLm5hbWUpO1xyXG5cclxuICAgICAgc3RhdGVBLnNldFdlaWdodChmYWN0b3JBKTtcclxuICAgICAgc3RhdGVCLnNldFdlaWdodChmYWN0b3JCKTtcclxuXHJcbiAgICAgIC8vIFNldCBwaGFzZS1tYXRjaGluZyBpZiBuZWVkZWRcclxuICAgICAgaWYgKHRocmVzaG9sZEEucGhhc2VNYXRjaCAmJiB0aHJlc2hvbGRCLnBoYXNlTWF0Y2gpIHtcclxuICAgICAgICB0aGlzLl9waGFzZUxlYWRTdGF0ZSA9IGZhY3RvckEgPiBmYWN0b3JCID8gc3RhdGVBIDogc3RhdGVCO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTb3J0cyB0aGUgdGhyZXNob2xkcyBmcm9tIGxvdyB0byBoaWdoIGJhc2VkIG9uIHZhbHVlLlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBfc29ydFRocmVzaG9sZHMoKSB7XHJcbiAgICB0aGlzLl90aHJlc2hvbGRzLnNvcnQoKGEsIGIpID0+IGEudmFsdWUgLSBiLnZhbHVlKTtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IEJsZW5kMWRTdGF0ZTtcclxuIiwiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXHJcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxyXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bmRlcnNjb3JlLWRhbmdsZSAqL1xyXG5pbXBvcnQgRGVmZXJyZWQgZnJvbSAnY29yZS9EZWZlcnJlZCc7XHJcbmltcG9ydCBNYXRoVXRpbHMgZnJvbSAnY29yZS9NYXRoVXRpbHMnO1xyXG5pbXBvcnQgQWJzdHJhY3RCbGVuZFN0YXRlIGZyb20gJy4vQWJzdHJhY3RCbGVuZFN0YXRlJztcclxuaW1wb3J0IEFuaW1hdGlvblV0aWxzIGZyb20gJy4uL0FuaW1hdGlvblV0aWxzJztcclxuXHJcbi8qKlxyXG4gKiBDbGFzcyBmb3IgYmxlbmRpbmcgTiBudW1iZXIgb2YgYmxlbmQgc3RhdGVzIGJhc2VkIG9uIHR3b1xyXG4gKiBwYXJhbXRlcnMuXHJcbiAqXHJcbiAqIEBleHRlbmRzIEFic3RyYWN0QmxlbmRTdGF0ZVxyXG4gKi9cclxuY2xhc3MgQmxlbmQyZFN0YXRlIGV4dGVuZHMgQWJzdHJhY3RCbGVuZFN0YXRlIHtcclxuICAvKipcclxuICAgKiBAY29uc3RydWN0b3JcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gLSBPcHRpb25zIGZvciB0aGUgY29udGFpbmVyIHN0YXRlXHJcbiAgICogQHBhcmFtIHtBcnJheS48QWJzdHJhY3RCbGVuZFN0YXRlPn0gW2JsZW5kU3RhdGVzPVtdXSAtIEJsZW5kIHN0YXRlcyB0byBiZVxyXG4gICAqIGNvbnRyb2xsZWQgYnkgdGhpcyBjb250YWluZXIuXHJcbiAgICogQHBhcmFtIHtBcnJheS48QXJyYXkuPG51bWJlcj4+fSBbYmxlbmRUaHJlc2hvbGRzPVtdXSAtIFRocmVzaG9sZCB2YWx1ZXMgZm9yIGFjdGl2YXRpbmdcclxuICAgKiBlYWNoIGJsZW5kIHN0YXRlLlxyXG4gICAqIEBwYXJhbSB7QXJyYXkuPGJvb2xlYW4+fSBbcGhhc2VNYXRjaGVzPVtdXSAtIEJvb2xlYW5zIGluZGljYXRpbmcgd2hldGhlciBvciBub3RcclxuICAgKiBlYWNoIGJsZW5kIHN0YXRlIHNob3VsZCBiZSBwaGFzZSBtYXRjaGVkLlxyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgb3B0aW9ucyA9IHt9LFxyXG4gICAgYmxlbmRTdGF0ZXMgPSBbXSxcclxuICAgIGJsZW5kVGhyZXNob2xkcyA9IFtdLFxyXG4gICAgcGhhc2VNYXRjaGVzID0gW11cclxuICApIHtcclxuICAgIHN1cGVyKG9wdGlvbnMsIGJsZW5kU3RhdGVzKTtcclxuXHJcbiAgICBpZiAoYmxlbmRTdGF0ZXMubGVuZ3RoICE9PSBibGVuZFRocmVzaG9sZHMubGVuZ3RoKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgQ2Fubm90IGNyZWF0ZSBCbGVuZDJkU3RhdGUgd2l0aCBibGVuZFN0YXRlcyAke2JsZW5kU3RhdGVzfSBhbmQgYmxlbmRUaHJlc2hvbGRzICR7YmxlbmRUaHJlc2hvbGRzfS4gQ291bnQgb2YgYmxlbmRTdGF0ZXMgbXVzdCBtYXRjaCBjb3VudCBvZiBibGVuZFRocmVzaG9sZHMuYFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGJsZW5kVGhyZXNob2xkc1xyXG4gICAgICAuc2xpY2UoMCwgYmxlbmRUaHJlc2hvbGRzLmxlbmd0aCAtIDEpXHJcbiAgICAgIC5mb3JFYWNoKCh0aHJlc2hvbGQsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgYmxlbmRUaHJlc2hvbGRzLnNsaWNlKGluZGV4ICsgMSkuZm9yRWFjaChvdGhlclRocmVzaG9sZCA9PiB7XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIHRocmVzaG9sZFswXSA9PT0gb3RoZXJUaHJlc2hvbGRbMF0gJiZcclxuICAgICAgICAgICAgdGhyZXNob2xkWzFdID09PSBvdGhlclRocmVzaG9sZFsxXVxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICAgICAgICBgQ2Fubm90IGNyZWF0ZSBCbGVuZDJkU3RhdGUgd2l0aCBibGVuZFRocmVzaG9sZHMgJHtibGVuZFRocmVzaG9sZHN9LiBObyBkdXBsaWNhdGUgdmFsdWVzIGFsbG93ZWQgaW4gYmxlbmRUaHJlc2hvbGRzLmBcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgdGhpcy5fYmxlbmRWYWx1ZVggPSAwO1xyXG4gICAgdGhpcy5fYmxlbmRWYWx1ZVkgPSAwO1xyXG5cclxuICAgIHRoaXMuX3Byb21pc2VzID0ge1xyXG4gICAgICAuLi50aGlzLl9wcm9taXNlcyxcclxuICAgICAgYmxlbmRWYWx1ZVg6IERlZmVycmVkLnJlc29sdmUoKSxcclxuICAgICAgYmxlbmRWYWx1ZVk6IERlZmVycmVkLnJlc29sdmUoKSxcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5fdGhyZXNob2xkcyA9IFtdO1xyXG4gICAgWy4uLnRoaXMuX3N0YXRlcy52YWx1ZXMoKV0uZm9yRWFjaCgoc3RhdGUsIGluZGV4KSA9PiB7XHJcbiAgICAgIHRoaXMuX3RocmVzaG9sZHMucHVzaCh7XHJcbiAgICAgICAgbmFtZTogc3RhdGUubmFtZSxcclxuICAgICAgICBwaGFzZU1hdGNoOiBwaGFzZU1hdGNoZXNbaW5kZXhdIHx8IGZhbHNlLFxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuX3ZlcnRpY2VzID0gYmxlbmRUaHJlc2hvbGRzO1xyXG5cclxuICAgIGlmICh0aGlzLl92ZXJ0aWNlcy5sZW5ndGggPj0gMykge1xyXG4gICAgICB0aGlzLl90cmlhbmdsZXMgPSBNYXRoVXRpbHMuZ2V0RGVsYXVuYXlUcmlhbmd1bGF0aW9uKHRoaXMuX3ZlcnRpY2VzKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9waGFzZUxlYWRTdGF0ZSA9IG51bGw7XHJcblxyXG4gICAgdGhpcy5fdXBkYXRlQmxlbmRXZWlnaHRzKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGVzIHRoZSB1c2VyIGRlZmluZWQgd2VpZ2h0IG92ZXIgdGltZS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gTmFtZSBvZiBibGVuZCB3ZWlnaHQgdG8gdXBkYXRlLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB3ZWlnaHQgLSBUYXJnZXQgd2VpZ2h0IHZhbHVlLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbc2Vjb25kcz0wXSAtIFRoZSBhbW91bnQgb2YgdGltZSBpdCB3aWxsIHRha2UgdG8gcmVhY2ggdGhlXHJcbiAgICogdGFyZ2V0IHZhbHVlLlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBlYXNpbmdGbiAtIFRoZSBlYXNpbmcgZnVuY3Rpb24gdG8gdXNlIGZvciBpbnRlcnBvbGF0aW9uLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0RlZmVycmVkfVxyXG4gICAqL1xyXG4gIHNldEJsZW5kV2VpZ2h0KG5hbWUsIHZhbHVlLCBzZWNvbmRzID0gMCwgZWFzaW5nRm4pIHtcclxuICAgIGNvbnN0IHByb3BlcnR5ID0gYGJsZW5kVmFsdWUke25hbWUudG9VcHBlckNhc2UoKX1gO1xyXG4gICAgaWYgKHByb3BlcnR5ICE9PSAnYmxlbmRWYWx1ZVgnICYmIHByb3BlcnR5ICE9PSAnYmxlbmRWYWx1ZVknKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgQ2Fubm90IHNldCBibGVuZCB3ZWlnaHQgZm9yICR7bmFtZX0gb24gJHt0aGlzLm5hbWV9LiBCbGVuZDJkU3RhdGUgb25seSBhY2NlcHRzICdYJyBvciAnWScgZm9yIHNldEJsZW5kV2VpZ2h0YFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX3Byb21pc2VzW3Byb3BlcnR5XS5jYW5jZWwoKTtcclxuXHJcbiAgICB0aGlzLl9wcm9taXNlc1twcm9wZXJ0eV0gPSBBbmltYXRpb25VdGlscy5pbnRlcnBvbGF0ZVByb3BlcnR5KFxyXG4gICAgICB0aGlzLFxyXG4gICAgICBwcm9wZXJ0eSxcclxuICAgICAgdmFsdWUsXHJcbiAgICAgIHtcclxuICAgICAgICBzZWNvbmRzLFxyXG4gICAgICAgIGVhc2luZ0ZuLFxyXG4gICAgICAgIG9uUHJvZ3Jlc3M6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuX3VwZGF0ZUJsZW5kV2VpZ2h0cygpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgb25GaW5pc2g6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuX3VwZGF0ZUJsZW5kV2VpZ2h0cygpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH1cclxuICAgICk7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuX3Byb21pc2VzW3Byb3BlcnR5XTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIHVzZXIgZGVmaW5lZCB3ZWlnaHQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIE5hbWUgb2YgYmxlbmQgd2VpZ2h0LlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge251bWJlcn1cclxuICAgKi9cclxuICBnZXRCbGVuZFdlaWdodChuYW1lKSB7XHJcbiAgICBjb25zdCBwcm9wZXJ0eSA9IG5hbWUudG9VcHBlckNhc2UoKTtcclxuICAgIGlmIChwcm9wZXJ0eSAhPT0gJ1gnICYmIHByb3BlcnR5ICE9PSAnWScpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgIGBDYW5ub3QgZ2V0IGJsZW5kIHdlaWdodCBmb3IgJHtuYW1lfSBvbiAke3RoaXMubmFtZX0uIEJsZW5kMmRTdGF0ZSBvbmx5IGFjY2VwdHMgJ1gnIG9yICdZJyBmb3IgZ2V0QmxlbmRXZWlnaHRgXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHByb3BlcnR5ID09PSAnWCcgPyB0aGlzLl9ibGVuZFZhbHVlWCA6IHRoaXMuX2JsZW5kVmFsdWVZO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyBhbmQgc2V0cyB0aGUgeCBibGVuZCB3ZWlnaHQuXHJcbiAgICovXHJcbiAgZ2V0IGJsZW5kVmFsdWVYKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2JsZW5kVmFsdWVYO1xyXG4gIH1cclxuXHJcbiAgc2V0IGJsZW5kVmFsdWVYKHZhbHVlKSB7XHJcbiAgICB0aGlzLl9ibGVuZFZhbHVlWCA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyBhbmQgc2V0cyB0aGUgeSBibGVuZCB3ZWlnaHQuXHJcbiAgICovXHJcbiAgZ2V0IGJsZW5kVmFsdWVZKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2JsZW5kVmFsdWVZO1xyXG4gIH1cclxuXHJcbiAgc2V0IGJsZW5kVmFsdWVZKHZhbHVlKSB7XHJcbiAgICB0aGlzLl9ibGVuZFZhbHVlWSA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyB3aGV0aGVyIG9yIG5vdCB0aGUgeCBibGVuZCB2YWx1ZSBpcyBjdXJyZW50bHkgYmVpbmcgYW5pbWF0ZWQuXHJcbiAgICovXHJcbiAgZ2V0IGJsZW5kVmFsdWVYUGVuZGluZygpIHtcclxuICAgIHJldHVybiB0aGlzLl9wcm9taXNlcy5ibGVuZFZhbHVlWCAmJiB0aGlzLl9wcm9taXNlcy5ibGVuZFZhbHVlWC5wZW5kaW5nO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyB3aGV0aGVyIG9yIG5vdCB0aGUgeSBibGVuZCB2YWx1ZSBpcyBjdXJyZW50bHkgYmVpbmcgYW5pbWF0ZWQuXHJcbiAgICovXHJcbiAgZ2V0IGJsZW5kVmFsdWVZUGVuZGluZygpIHtcclxuICAgIHJldHVybiB0aGlzLl9wcm9taXNlcy5ibGVuZFZhbHVlWSAmJiB0aGlzLl9wcm9taXNlcy5ibGVuZFZhbHVlWS5wZW5kaW5nO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlSW50ZXJuYWxXZWlnaHQoZmFjdG9yKSB7XHJcbiAgICBzdXBlci51cGRhdGVJbnRlcm5hbFdlaWdodChmYWN0b3IpO1xyXG5cclxuICAgIGlmICh0aGlzLl9waGFzZUxlYWRTdGF0ZSkge1xyXG4gICAgICBbLi4udGhpcy5fc3RhdGVzLnZhbHVlcygpXS5mb3JFYWNoKChzdGF0ZSwgaW5kZXgpID0+IHtcclxuICAgICAgICBpZiAoc3RhdGUud2VpZ2h0ICE9PSAwICYmIHRoaXMuX3RocmVzaG9sZHNbaW5kZXhdLnBoYXNlTWF0Y2gpIHtcclxuICAgICAgICAgIHN0YXRlLm5vcm1hbGl6ZWRUaW1lID0gdGhpcy5fcGhhc2VMZWFkU3RhdGUubm9ybWFsaXplZFRpbWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZXMgdGhlIGJsZW5kIHdlaWdodHMgYmFzZWQgb24gdGhlaXIgY29ycmVzcG9uZGluZyB0aHJlc2hvbGQgdmFsdWVzXHJcbiAgICogYW5kIHRoZSBjdXJyZW50IFt4LHldIGJsZW5kVmFsdWUuIEFkZGl0aW9uYWxseSwgc2V0cyBhIGxlYWQgcGhhc2Ugc3RhdGUgaWYgdGhlXHJcbiAgICogY29uZGl0aW9ucyBmb3IgcGhhc2UtbWF0Y2hpbmcgaGF2ZSBiZWVuIHNhdGlzZmllZC5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICovXHJcbiAgX3VwZGF0ZUJsZW5kV2VpZ2h0cygpIHtcclxuICAgIGlmICghdGhpcy5fdmVydGljZXMgfHwgdGhpcy5fdmVydGljZXMubGVuZ3RoID09PSAwKSByZXR1cm47XHJcblxyXG4gICAgaWYgKHRoaXMuX3ZlcnRpY2VzLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICBbLi4udGhpcy5fc3RhdGVzLnZhbHVlcygpXVswXS53ZWlnaHQgPSAxO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gSW5pdGlhbGx5IHNldCBhbGwgc3ViLXN0YXRlIHdlaWdodHMgdG8gemVyb1xyXG4gICAgdGhpcy5fc3RhdGVzLmZvckVhY2goc3RhdGUgPT4ge1xyXG4gICAgICBzdGF0ZS5zZXRXZWlnaHQoMCk7XHJcbiAgICB9KTtcclxuICAgIHRoaXMuX3BoYXNlTGVhZFN0YXRlID0gbnVsbDtcclxuXHJcbiAgICBjb25zdCBwID0gW3RoaXMuX2JsZW5kVmFsdWVYLCB0aGlzLl9ibGVuZFZhbHVlWV07XHJcblxyXG4gICAgaWYgKHRoaXMuX3ZlcnRpY2VzLmxlbmd0aCA9PT0gMikge1xyXG4gICAgICB0aGlzLl9zZXRJbmZsdWVuY2VDbG9zZXN0UG9pbnRPbkxpbmUocCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCB0cmlhbmdsZSA9IHRoaXMuX3RyaWFuZ2xlcy5maW5kKHRyaWFuZ2xlID0+IHtcclxuICAgICAgICByZXR1cm4gTWF0aFV0aWxzLmlzUG9pbnRJblRyaWFuZ2xlKFxyXG4gICAgICAgICAgdGhpcy5fdmVydGljZXNbdHJpYW5nbGVbMF1dLFxyXG4gICAgICAgICAgdGhpcy5fdmVydGljZXNbdHJpYW5nbGVbMV1dLFxyXG4gICAgICAgICAgdGhpcy5fdmVydGljZXNbdHJpYW5nbGVbMl1dLFxyXG4gICAgICAgICAgcFxyXG4gICAgICAgICk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgaWYgKHRyaWFuZ2xlKSB7XHJcbiAgICAgICAgdGhpcy5fc2V0SW5mbHVlbmNlVHJpYW5nbGUodHJpYW5nbGUsIHApO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuX3NldEluZmx1ZW5jZUNsb3Nlc3RQb2ludEluVHJpYW5nbGVzKHApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXRzIGJsZW5kIHdlaWdodHMgZm9yIHN0YXRlcyBjb3JyZXNwb25kaW5nIHRvIGFcclxuICAgKiB0cmlhbmdsZSBvZiB0aHJlc2hvbGRzIGFuZCBhIGdpdmVuIFt4LHldIGJsZW5kVmFsdWVzLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtBcnJheS48QXJyYXkuPG51bWJlcj4+fSB0cmlhbmdsZSAtIFNldCBvZiB0cmlhbmdsdWF0ZWQgaW5kaWNlc1xyXG4gICAqIHRoYXQgY29ycmVzcG9uZCB0byBibGVuZCB0aHJlc2hvbGRzLlxyXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IHAgLSBHaXZlbiBbeCx5XSBibGVuZFZhbHVlLlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBfc2V0SW5mbHVlbmNlVHJpYW5nbGUodHJpYW5nbGUsIHApIHtcclxuICAgIGNvbnN0IGFyZWFBID0gTWF0aFV0aWxzLnRyaWFuZ2xlQXJlYShcclxuICAgICAgdGhpcy5fdmVydGljZXNbdHJpYW5nbGVbMV1dLFxyXG4gICAgICB0aGlzLl92ZXJ0aWNlc1t0cmlhbmdsZVsyXV0sXHJcbiAgICAgIHBcclxuICAgICk7XHJcblxyXG4gICAgY29uc3QgYXJlYUIgPSBNYXRoVXRpbHMudHJpYW5nbGVBcmVhKFxyXG4gICAgICB0aGlzLl92ZXJ0aWNlc1t0cmlhbmdsZVswXV0sXHJcbiAgICAgIHRoaXMuX3ZlcnRpY2VzW3RyaWFuZ2xlWzJdXSxcclxuICAgICAgcFxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCBhcmVhQyA9IE1hdGhVdGlscy50cmlhbmdsZUFyZWEoXHJcbiAgICAgIHRoaXMuX3ZlcnRpY2VzW3RyaWFuZ2xlWzBdXSxcclxuICAgICAgdGhpcy5fdmVydGljZXNbdHJpYW5nbGVbMV1dLFxyXG4gICAgICBwXHJcbiAgICApO1xyXG5cclxuICAgIGNvbnN0IHRvdGFsQXJlYSA9IGFyZWFBICsgYXJlYUIgKyBhcmVhQztcclxuXHJcbiAgICBjb25zdCB3ZWlnaHRBID0gYXJlYUEgLyB0b3RhbEFyZWE7XHJcbiAgICBjb25zdCB3ZWlnaHRCID0gYXJlYUIgLyB0b3RhbEFyZWE7XHJcbiAgICBjb25zdCB3ZWlnaHRDID0gYXJlYUMgLyB0b3RhbEFyZWE7XHJcblxyXG4gICAgY29uc3QgdGhyZXNob2xkQSA9IHRoaXMuX3RocmVzaG9sZHNbdHJpYW5nbGVbMF1dO1xyXG4gICAgY29uc3QgdGhyZXNob2xkQiA9IHRoaXMuX3RocmVzaG9sZHNbdHJpYW5nbGVbMV1dO1xyXG4gICAgY29uc3QgdGhyZXNob2xkQyA9IHRoaXMuX3RocmVzaG9sZHNbdHJpYW5nbGVbMl1dO1xyXG5cclxuICAgIGNvbnN0IHN0YXRlQSA9IHRoaXMuX3N0YXRlcy5nZXQodGhyZXNob2xkQS5uYW1lKTtcclxuICAgIGNvbnN0IHN0YXRlQiA9IHRoaXMuX3N0YXRlcy5nZXQodGhyZXNob2xkQi5uYW1lKTtcclxuICAgIGNvbnN0IHN0YXRlQyA9IHRoaXMuX3N0YXRlcy5nZXQodGhyZXNob2xkQy5uYW1lKTtcclxuXHJcbiAgICBzdGF0ZUEuc2V0V2VpZ2h0KHdlaWdodEEpO1xyXG4gICAgc3RhdGVCLnNldFdlaWdodCh3ZWlnaHRCKTtcclxuICAgIHN0YXRlQy5zZXRXZWlnaHQod2VpZ2h0Qyk7XHJcblxyXG4gICAgdGhpcy5fc2V0UGhhc2VMZWFkU3RhdGUoXHJcbiAgICAgIFtzdGF0ZUEsIHN0YXRlQiwgc3RhdGVDXSxcclxuICAgICAgW3RocmVzaG9sZEEucGhhc2VNYXRjaCwgdGhyZXNob2xkQi5waGFzZU1hdGNoLCB0aHJlc2hvbGRDLnBoYXNlTWF0Y2hdXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRGV0ZXJtaW5lcyB0aGUgY2xvc2VzdCBwb2ludCB3aXRoaW4gYSB0cmlhbmdsZSBvZlxyXG4gICAqIHRocmVzaG9sZHMgYmFzZWQgb24gdGhlIGN1cnJlbnQgW3gseV0gYmxlbmRWYWx1ZXMgYW5kXHJcbiAgICogdGhlbiBzZXRzIGJsZW5kIHdlaWdodHMgZm9yIHRoZSBjb3JyZXNwb25kaW5nIHN0YXRlcy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IHAgLSBHaXZlbiBbeCx5XSBibGVuZFZhbHVlLlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBfc2V0SW5mbHVlbmNlQ2xvc2VzdFBvaW50SW5UcmlhbmdsZXMocCkge1xyXG4gICAgbGV0IGdsb2JhbENsb3Nlc3RQb2ludCA9IG51bGw7XHJcbiAgICBsZXQgZ2xvYmFsTWluRGlzdCA9IE51bWJlci5QT1NJVElWRV9JTkZJTklUWTtcclxuICAgIGxldCBjbG9zZXN0VHJpYW5nbGUgPSAtMTtcclxuXHJcbiAgICB0aGlzLl90cmlhbmdsZXMuZm9yRWFjaCgodHJpYW5nbGUsIGluZGV4KSA9PiB7XHJcbiAgICAgIGNvbnN0IHBvaW50QSA9IE1hdGhVdGlscy5jbG9zZXN0UG9pbnRPbkxpbmUoXHJcbiAgICAgICAgdGhpcy5fdmVydGljZXNbdHJpYW5nbGVbMF1dLFxyXG4gICAgICAgIHRoaXMuX3ZlcnRpY2VzW3RyaWFuZ2xlWzFdXSxcclxuICAgICAgICBwXHJcbiAgICAgICk7XHJcbiAgICAgIGNvbnN0IHBvaW50QiA9IE1hdGhVdGlscy5jbG9zZXN0UG9pbnRPbkxpbmUoXHJcbiAgICAgICAgdGhpcy5fdmVydGljZXNbdHJpYW5nbGVbMV1dLFxyXG4gICAgICAgIHRoaXMuX3ZlcnRpY2VzW3RyaWFuZ2xlWzJdXSxcclxuICAgICAgICBwXHJcbiAgICAgICk7XHJcbiAgICAgIGNvbnN0IHBvaW50QyA9IE1hdGhVdGlscy5jbG9zZXN0UG9pbnRPbkxpbmUoXHJcbiAgICAgICAgdGhpcy5fdmVydGljZXNbdHJpYW5nbGVbMl1dLFxyXG4gICAgICAgIHRoaXMuX3ZlcnRpY2VzW3RyaWFuZ2xlWzBdXSxcclxuICAgICAgICBwXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBjb25zdCBkaXN0QSA9IE1hdGhVdGlscy5kaXN0YW5jZVNxdWFyZWQocG9pbnRBLCBwKTtcclxuICAgICAgY29uc3QgZGlzdEIgPSBNYXRoVXRpbHMuZGlzdGFuY2VTcXVhcmVkKHBvaW50QiwgcCk7XHJcbiAgICAgIGNvbnN0IGRpc3RDID0gTWF0aFV0aWxzLmRpc3RhbmNlU3F1YXJlZChwb2ludEMsIHApO1xyXG5cclxuICAgICAgbGV0IGxvY2FsQ2xvc2VzdFBvaW50ID0gcG9pbnRDO1xyXG4gICAgICBsZXQgbG9jYWxNaW5EaXN0ID0gZGlzdEM7XHJcblxyXG4gICAgICBpZiAoZGlzdEEgPCBsb2NhbE1pbkRpc3QpIHtcclxuICAgICAgICBsb2NhbENsb3Nlc3RQb2ludCA9IHBvaW50QTtcclxuICAgICAgICBsb2NhbE1pbkRpc3QgPSBkaXN0QTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoZGlzdEIgPCBsb2NhbE1pbkRpc3QpIHtcclxuICAgICAgICBsb2NhbENsb3Nlc3RQb2ludCA9IHBvaW50QjtcclxuICAgICAgICBsb2NhbE1pbkRpc3QgPSBkaXN0QjtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGxvY2FsTWluRGlzdCA8IGdsb2JhbE1pbkRpc3QpIHtcclxuICAgICAgICBnbG9iYWxNaW5EaXN0ID0gbG9jYWxNaW5EaXN0O1xyXG4gICAgICAgIGdsb2JhbENsb3Nlc3RQb2ludCA9IFsuLi5sb2NhbENsb3Nlc3RQb2ludF07XHJcbiAgICAgICAgY2xvc2VzdFRyaWFuZ2xlID0gaW5kZXg7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuX3NldEluZmx1ZW5jZVRyaWFuZ2xlKFxyXG4gICAgICB0aGlzLl90cmlhbmdsZXNbY2xvc2VzdFRyaWFuZ2xlXSxcclxuICAgICAgZ2xvYmFsQ2xvc2VzdFBvaW50XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRGV0ZXJtaW5lcyB0aGUgY2xvc2VzdCBwb2ludCBvbiB0aGUgbGluZSBmb3JtZWQgYmV0d2VlbiB0aGVcclxuICAgKiB0d28gYmxlbmQgdGhyZXNob2xkcyBiYXNlZCBvbiB0aGUgY3VycmVudCBbeCx5XSBibGVuZFZhbHVlcyBhbmRcclxuICAgKiB0aGVuIHNldHMgYmxlbmQgd2VpZ2h0cyBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgc3RhdGVzLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gcCAtIEdpdmVuIFt4LHldIGJsZW5kVmFsdWUuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIF9zZXRJbmZsdWVuY2VDbG9zZXN0UG9pbnRPbkxpbmUocCkge1xyXG4gICAgY29uc3QgY2xvc2VzdFBvaW50ID0gTWF0aFV0aWxzLmNsb3Nlc3RQb2ludE9uTGluZShcclxuICAgICAgdGhpcy5fdmVydGljZXNbWzBdXSxcclxuICAgICAgdGhpcy5fdmVydGljZXNbWzFdXSxcclxuICAgICAgcFxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCBkaXN0QSA9IE1hdGhVdGlscy5kaXN0YW5jZVNxdWFyZWQodGhpcy5fdmVydGljZXNbMF0sIGNsb3Nlc3RQb2ludCk7XHJcbiAgICBjb25zdCBkaXN0QiA9IE1hdGhVdGlscy5kaXN0YW5jZVNxdWFyZWQodGhpcy5fdmVydGljZXNbMV0sIGNsb3Nlc3RQb2ludCk7XHJcblxyXG4gICAgY29uc3Qgd2VpZ2h0QSA9IGRpc3RCIC8gKGRpc3RBICsgZGlzdEIpO1xyXG4gICAgY29uc3Qgd2VpZ2h0QiA9IGRpc3RBIC8gKGRpc3RBICsgZGlzdEIpO1xyXG5cclxuICAgIGNvbnN0IHRocmVzaG9sZEEgPSB0aGlzLl90aHJlc2hvbGRzWzBdO1xyXG4gICAgY29uc3QgdGhyZXNob2xkQiA9IHRoaXMuX3RocmVzaG9sZHNbMV07XHJcblxyXG4gICAgY29uc3Qgc3RhdGVBID0gdGhpcy5fc3RhdGVzLmdldCh0aHJlc2hvbGRBLm5hbWUpO1xyXG4gICAgY29uc3Qgc3RhdGVCID0gdGhpcy5fc3RhdGVzLmdldCh0aHJlc2hvbGRCLm5hbWUpO1xyXG5cclxuICAgIHN0YXRlQS5zZXRXZWlnaHQod2VpZ2h0QSk7XHJcbiAgICBzdGF0ZUIuc2V0V2VpZ2h0KHdlaWdodEIpO1xyXG5cclxuICAgIHRoaXMuX3NldFBoYXNlTGVhZFN0YXRlKFxyXG4gICAgICBbc3RhdGVBLCBzdGF0ZUJdLFxyXG4gICAgICBbdGhyZXNob2xkQS5waGFzZU1hdGNoLCB0aHJlc2hvbGRCLnBoYXNlTWF0Y2hdXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0cyBhIGxlYWQgcGhhc2Ugc3RhdGUgaWYgdGhlIGNvbmRpdGlvbnNcclxuICAgKiBmb3IgcGhhc2UtbWF0Y2hpbmcgYXJlIHNhdGlzZmllZC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7QXJyYXkuPEFic3RyYWN0QmxlbmRTdGF0ZT59IHN0YXRlcyAtIFN0YXRlcyB0b1xyXG4gICAqIGNoZWNrIHBoYXNlLW1hdGNoaW5nIGNyaXRlcmlhLlxyXG4gICAqIEBwYXJhbSB7QXJyYXkuPGJvb2xlYW4+fSBwaGFzZU1hdGNoZWQgLSBMaXN0IG9mIHBoYXNlLW1hdGNoIGJvb2xlYW5zLlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBfc2V0UGhhc2VMZWFkU3RhdGUoc3RhdGVzLCBwaGFzZU1hdGNoZWQpIHtcclxuICAgIGxldCBtYXggPSAwO1xyXG4gICAgc3RhdGVzLmZvckVhY2goKHN0YXRlLCBpbmRleCkgPT4ge1xyXG4gICAgICBpZiAocGhhc2VNYXRjaGVkW2luZGV4XSAmJiBzdGF0ZS53ZWlnaHQgPiBtYXgpIHtcclxuICAgICAgICB0aGlzLl9waGFzZUxlYWRTdGF0ZSA9IHN0YXRlO1xyXG4gICAgICAgIG1heCA9IHN0YXRlLndlaWdodDtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBCbGVuZDJkU3RhdGU7XHJcbiIsIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxyXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTBcclxuaW1wb3J0IEFic3RyYWN0QmxlbmRTdGF0ZSBmcm9tICcuL3N0YXRlL0Fic3RyYWN0QmxlbmRTdGF0ZSc7XHJcbmltcG9ydCBBbmltYXRpb25QbGF5ZXJJbnRlcmZhY2UgZnJvbSAnLi9BbmltYXRpb25QbGF5ZXJJbnRlcmZhY2UnO1xyXG5pbXBvcnQgQW5pbWF0aW9uVXRpbHMgZnJvbSAnLi9BbmltYXRpb25VdGlscyc7XHJcbmltcG9ydCBNYXRoVXRpbHMgZnJvbSAnLi4vTWF0aFV0aWxzJztcclxuaW1wb3J0IERlZmVycmVkIGZyb20gJy4uL0RlZmVycmVkJztcclxuaW1wb3J0IFN0YXRlQ29udGFpbmVySW50ZXJmYWNlIGZyb20gJy4vc3RhdGUvU3RhdGVDb250YWluZXJJbnRlcmZhY2UnO1xyXG5cclxuLyoqXHJcbiAqIEVudW0gZm9yIHR5cGVzIG9mIHtAbGluayBBbmltYXRpb25MYXllcn0gYmxlbmRpbmcuXHJcbiAqXHJcbiAqIEByZWFkb25seVxyXG4gKiBAZW51bSB7c3RyaW5nfVxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IExheWVyQmxlbmRNb2RlcyA9IHtPdmVycmlkZTogJ092ZXJyaWRlJywgQWRkaXRpdmU6ICdBZGRpdGl2ZSd9O1xyXG5cclxuLyoqXHJcbiAqIFRoZSBkZWZhdWx0IGJsZW5kaW5nIG1vZGUge0BsaW5rIEFuaW1hdGlvbkxheWVyfS5cclxuICpcclxuICogQHJlYWRvbmx5XHJcbiAqIEB0eXBlIHtzdHJpbmd9XHJcbiAqL1xyXG5leHBvcnQgY29uc3QgRGVmYXVsdExheWVyQmxlbmRNb2RlID0gJ092ZXJyaWRlJztcclxuXHJcbi8qKlxyXG4gKiBDaGVja3MgaWYgYSBnaXZlbiBibGVuZE1vZGUgaXMgcHJlc2VudCBpbiB0aGUgdmFsdWVzIG9mIHtAbGluayBMYXllckJsZW5kTW9kZXN9LlxyXG4gKiBJZiBpdCBpcywgcmV0dXJuIHRoZSBvcmlnaW5hbCB2YWx1ZSwgb3RoZXJ3aXNlIHJldHVybiB7QGxpbmsgRGVmYXVsdExheWVyQmxlbmRNb2RlfS5cclxuICpcclxuICogQHBhcmFtIHtzdHJpbmd9IGJsZW5kTW9kZSAtIFRoZSBuYW1lIG9mIHRoZSB0eXBlIG9mIGJsZW5kaW5nLlxyXG4gKlxyXG4gKiBAcmV0dXJucyB7KHN0cmluZ3xEZWZhdWx0TGF5ZXJCbGVuZE1vZGUpfVxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlQmxlbmRNb2RlKGJsZW5kTW9kZSkge1xyXG4gIGlmIChBcnJheS5mcm9tKE9iamVjdC52YWx1ZXMoTGF5ZXJCbGVuZE1vZGVzKSkuaW5jbHVkZXMoYmxlbmRNb2RlKSkge1xyXG4gICAgcmV0dXJuIGJsZW5kTW9kZTtcclxuICB9IGVsc2Uge1xyXG4gICAgcmV0dXJuIERlZmF1bHRMYXllckJsZW5kTW9kZTtcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDbGFzcyBmb3IgbWFuYWdpbmcgYSBzZXQgb2YgYW5pbWF0aW9ucyB3aGVyZSBvbmx5IG9uZSBzdGF0ZSBjYW4gYmUgYWN0aXZlIGF0XHJcbiAqIGFueSBnaXZlbiB0aW1lLlxyXG4gKlxyXG4gKiBAaW1wbGVtZW50cyBBbmltYXRpb25QbGF5ZXJJbnRlcmZhY2VcclxuICogQGltcGxlbWVudHMgU3RhdGVDb250YWluZXJJbnRlcmZhY2VcclxuICovXHJcbmNsYXNzIEFuaW1hdGlvbkxheWVyIGV4dGVuZHMgQW5pbWF0aW9uUGxheWVySW50ZXJmYWNlLk1peGluKFxyXG4gIFN0YXRlQ29udGFpbmVySW50ZXJmYWNlLk1peGluKClcclxuKSB7XHJcbiAgLyoqXHJcbiAgICogQGNvbnN0cnVjdG9yXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge09iamVjdD19IG9wdGlvbnMgLSAgT3B0aW9ucyBmb3IgdGhlIGFuaW1hdGlvbiBsYXllci5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0aW9ucy5uYW1lIC0gTmFtZSBvZiB0aGUgbGF5ZXIuIE5hbWVzIG11c3QgYmUgdW5pcXVlIHRvIHRoZVxyXG4gICAqIGFuaW1hdGlvbiBmZWF0dXJlIHRoYXQgY29udGFpbnMgdGhlIGxheWVyLlxyXG4gICAqIEBwYXJhbSB7TGF5ZXJCbGVuZE1vZGVzfSBbb3B0aW9ucy5ibGVuZE1vZGU9RGVmYXVsdExheWVyQmxlbmRNb2RlXSAtXHJcbiAgICogVHlwZSBvZiBibGVuZGluZyB0byB1c2UgZm9yIGFsbCBzdGF0ZXMgY29udHJvbGxlZCBieSB0aGUgbGF5ZXIuXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLndlaWdodD0xXSAtIFRoZSBhbW91bnQgb2YgaW5mbHVlbmNlIHRoZSBsYXllcidzIGN1cnJlbnRcclxuICAgKiBhbmltYXRpb24gaGFzIG92ZXIgdGhlIHJlc3VsdCBmb3IgdGhlIGhvc3QuXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLnRyYW5zaXRpb25UaW1lPTBdIC0gVGhlIGRlZmF1bHQgYW1vdW50IG9mIHRpbWUgdG8gdXNlIHdoZW5cclxuICAgKiBwbGF5aW5nIGFuZCByZXN1bWluZyBhbmltYXRpb25zLlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvcHRpb25zLmVhc2luZ0ZuIC0gVGhlIGRlZmF1bHQgZWFzaW5nIGZ1bmN0aW9uIHRvIHVzZSB3aGVuXHJcbiAgICogdHJhbnNpdGlvbmluZyBiZXR3ZWVuIGFuaW1hdGlvbnMgYW5kIHNldHRpbmcgbGF5ZXIgd2VpZ2h0LlxyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMgPSB7fSkge1xyXG4gICAgc3VwZXIob3B0aW9ucyk7XHJcblxyXG4gICAgdGhpcy5uYW1lID0gb3B0aW9ucy5uYW1lID09PSB1bmRlZmluZWQgPyAnQW5pbWF0aW9uTGF5ZXInIDogb3B0aW9ucy5uYW1lO1xyXG4gICAgdGhpcy5fYmxlbmRNb2RlID0gQXJyYXkuZnJvbShPYmplY3QudmFsdWVzKExheWVyQmxlbmRNb2RlcykpLmluY2x1ZGVzKFxyXG4gICAgICBvcHRpb25zLmJsZW5kTW9kZVxyXG4gICAgKVxyXG4gICAgICA/IG9wdGlvbnMuYmxlbmRNb2RlXHJcbiAgICAgIDogRGVmYXVsdExheWVyQmxlbmRNb2RlO1xyXG4gICAgdGhpcy5fcHJvbWlzZXMgPSB7XHJcbiAgICAgIHdlaWdodDogRGVmZXJyZWQucmVzb2x2ZSgpLFxyXG4gICAgfTtcclxuICAgIHRoaXMuX3dlaWdodFBhdXNlZCA9IGZhbHNlO1xyXG5cclxuICAgIHRoaXMud2VpZ2h0ID0gdHlwZW9mIG9wdGlvbnMud2VpZ2h0ID09PSAnbnVtYmVyJyA/IG9wdGlvbnMud2VpZ2h0IDogMTtcclxuICAgIHRoaXMuX2ludGVybmFsV2VpZ2h0ID0gdGhpcy5fd2VpZ2h0O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgdHlwZSBvZiBibGVuZGluZyB1c2VkIGZvciBzdGF0ZXMgY29udHJvbGxlZCBieSB0aGUgbGF5ZXIuXHJcbiAgICpcclxuICAgKiBAcmVhZG9ubHlcclxuICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAqL1xyXG4gIGdldCBibGVuZE1vZGUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fYmxlbmRNb2RlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyBhbmQgc2V0cyB0aGUgYW1vdW50IG9mIGluZmx1ZW5jZSB0aGUgbGF5ZXIncyBjdXJyZW50IGFuaW1hdGlvbiBoYXMgb3ZlclxyXG4gICAqIHRoZSByZXN1bHQgZm9yIHRoZSBob3N0LlxyXG4gICAqXHJcbiAgICogQHR5cGUge251bWJlcn1cclxuICAgKi9cclxuICBzZXQgd2VpZ2h0KHdlaWdodCkge1xyXG4gICAgdGhpcy5fd2VpZ2h0ID0gTWF0aFV0aWxzLmNsYW1wKHdlaWdodCwgMCwgMSk7XHJcbiAgfVxyXG5cclxuICBnZXQgd2VpZ2h0KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3dlaWdodDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgd2hldGhlciBvciBub3QgdGhlIGxheWVyJ3Mgd2VpZ2h0IHZhbHVlIGlzIGN1cnJlbnRseSBiZWluZyBhbmltYXRlZC5cclxuICAgKlxyXG4gICAqIEByZWFkb25seVxyXG4gICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAqL1xyXG4gIGdldCB3ZWlnaHRQZW5kaW5nKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3Byb21pc2VzLndlaWdodCAmJiB0aGlzLl9wcm9taXNlcy53ZWlnaHQucGVuZGluZztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFBhdXNlIHRoZSBjdXJyZW50IGFuaW1hdGlvbiBzdGF0ZSBhbmQgYW55IGludGVycG9sYXRpb24gaGFwcGVuaW5nIG9uIHRoZSBsYXllcidzXHJcbiAgICogd2VpZ2h0IHByb3BlcnR5LlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAgICovXHJcbiAgcGF1c2UoKSB7XHJcbiAgICB0aGlzLl9wYXVzZWQgPSB0cnVlO1xyXG4gICAgdGhpcy5fd2VpZ2h0UGF1c2VkID0gdHJ1ZTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5wYXVzZUFuaW1hdGlvbigpIHx8IHRoaXMud2VpZ2h0UGVuZGluZztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlc3VtZSB0aGUgY3VycmVudCBhbmltYXRpb24gc3RhdGUgYW5kIGFueSBpbnRlcnBvbGF0aW9uIGhhcHBlbmluZyBvbiB0aGUgbGF5ZXInc1xyXG4gICAqIHdlaWdodCBwcm9wZXJ0eS5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gICAqL1xyXG4gIHJlc3VtZSgpIHtcclxuICAgIHRoaXMuX3BhdXNlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5fd2VpZ2h0UGF1c2VkID0gZmFsc2U7XHJcblxyXG4gICAgY29uc3QgaXNXZWlnaHRBY3RpdmUgPSB0aGlzLndlaWdodFBlbmRpbmc7XHJcblxyXG4gICAgaWYgKHRoaXMuX2N1cnJlbnRTdGF0ZSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5yZXN1bWVBbmltYXRpb24oKSB8fCBpc1dlaWdodEFjdGl2ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBpc1dlaWdodEFjdGl2ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZXMgdGhlIHVzZXIgZGVmaW5lZCB3ZWlnaHQgb3ZlciB0aW1lLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IHdlaWdodCAtIFRoZSB0YXJnZXQgd2VpZ2h0IHZhbHVlLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbc2Vjb25kcz0wXSAtIFRoZSBhbW91bnQgb2YgdGltZSBpdCB3aWxsIHRha2UgdG8gcmVhY2ggdGhlXHJcbiAgICogdGFyZ2V0IHdlaWdodC5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gZWFzaW5nRm4gLSBUaGUgZWFzaW5nIGZ1bmN0aW9uIHRvIHVzZSBmb3IgaW50ZXJwb2xhdGlvbi5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtEZWZlcnJlZH1cclxuICAgKi9cclxuICBzZXRXZWlnaHQod2VpZ2h0LCBzZWNvbmRzID0gMCwgZWFzaW5nRm4pIHtcclxuICAgIGlmICh0aGlzLndlaWdodFBlbmRpbmcpIHtcclxuICAgICAgdGhpcy5fcHJvbWlzZXMud2VpZ2h0LmNhbmNlbCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHdlaWdodCA9IE1hdGhVdGlscy5jbGFtcCh3ZWlnaHQpO1xyXG4gICAgdGhpcy5fcHJvbWlzZXMud2VpZ2h0ID0gQW5pbWF0aW9uVXRpbHMuaW50ZXJwb2xhdGVQcm9wZXJ0eShcclxuICAgICAgdGhpcyxcclxuICAgICAgJ3dlaWdodCcsXHJcbiAgICAgIHdlaWdodCxcclxuICAgICAge1xyXG4gICAgICAgIHNlY29uZHMsXHJcbiAgICAgICAgZWFzaW5nRm46IGVhc2luZ0ZuICE9PSB1bmRlZmluZWQgPyBlYXNpbmdGbiA6IHRoaXMuX2Vhc2luZ0ZuLFxyXG4gICAgICB9XHJcbiAgICApO1xyXG5cclxuICAgIHJldHVybiB0aGlzLl9wcm9taXNlcy53ZWlnaHQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQYXVzZSBhbnkgaW50ZXJwb2xhdGlvbiBoYXBwZW5pbmcgb24gdGhlIGxheWVyJ3Mgd2VpZ2h0IHByb3BlcnR5LlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAgICovXHJcbiAgcGF1c2VXZWlnaHQoKSB7XHJcbiAgICB0aGlzLl93ZWlnaHRQYXVzZWQgPSB0cnVlO1xyXG5cclxuICAgIHJldHVybiB0aGlzLndlaWdodFBlbmRpbmc7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXN1bWUgYW55IGludGVycG9sYXRpb24gaGFwcGVuaW5nIG9uIHRoZSBsYXllcidzIHdlaWdodCBwcm9wZXJ0eS5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gICAqL1xyXG4gIHJlc3VtZVdlaWdodCgpIHtcclxuICAgIHRoaXMuX3dlaWdodFBhdXNlZCA9IGZhbHNlO1xyXG5cclxuICAgIHJldHVybiB0aGlzLndlaWdodFBlbmRpbmc7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNdWx0aXBsaWVzIHRoZSB1c2VyIHdlaWdodCBieSBhIGZhY3RvciB0byBkZXRlcm1pbmUgdGhlIGludGVybmFsIHdlaWdodC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBmYWN0b3IgLSAwLTEgbXVsdGlwbGllciB0byBhcHBseSB0byB0aGUgdXNlciB3ZWlnaHQuXHJcbiAgICovXHJcbiAgdXBkYXRlSW50ZXJuYWxXZWlnaHQoZmFjdG9yKSB7XHJcbiAgICB0aGlzLl9pbnRlcm5hbFdlaWdodCA9IHRoaXMuX3dlaWdodCAqIGZhY3RvcjtcclxuXHJcbiAgICBpZiAodGhpcy5fY3VycmVudFN0YXRlKSB7XHJcbiAgICAgIHRoaXMuX2N1cnJlbnRTdGF0ZS51cGRhdGVJbnRlcm5hbFdlaWdodCh0aGlzLl9pbnRlcm5hbFdlaWdodCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSBuYW1lcyBvZiBibGVuZCBzdGF0ZXMgaW4gYW4gYW5pbWF0aW9uLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFuaW1hdGlvbk5hbWUgLSBOYW1lIG9mIHRoZSBhbmltYXRpb24uXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7QXJyYXkuPHN0cmluZz59IC0gTmFtZXMgb2YgYmxlbmQgc3RhdGVzLlxyXG4gICAqL1xyXG4gIGdldEFuaW1hdGlvbkJsZW5kTmFtZXMoYW5pbWF0aW9uTmFtZSkge1xyXG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzLmdldFN0YXRlKGFuaW1hdGlvbk5hbWUpO1xyXG5cclxuICAgIGlmIChzdGF0ZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgQ2Fubm90IGdldCBibGVuZCBuYW1lcyBvZiBhbmltYXRpb24gJHthbmltYXRpb25OYW1lfSBvbiBsYXllciAke3RoaXMubmFtZX0uIE5vIGFuaW1hdGlvbiBleGlzdHMgd2l0aCB0aGlzIG5hbWUuYFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChzdGF0ZSBpbnN0YW5jZW9mIEFic3RyYWN0QmxlbmRTdGF0ZSkge1xyXG4gICAgICByZXR1cm4gc3RhdGUuZ2V0U3RhdGVOYW1lcygpO1xyXG4gICAgfVxyXG5cclxuICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgYENhbm5vdCBnZXQgYmxlbmQgbmFtZXMgb2YgYW5pbWF0aW9uICR7YW5pbWF0aW9uTmFtZX0gb24gbGF5ZXIgJHt0aGlzLm5hbWV9LiBBbmltYXRpb24gaXMgbm90IGFuIGluc3RhbmNlIG9mIEFic3RyYWN0QmxlbmRTdGF0ZS5gXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlIHRoZSB3ZWlnaHQgZm9yIGEgYmxlbmQgc3RhdGUgb2YgYW4gYW5pbWF0aW9uLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFuaW1hdGlvbk5hbWUgLSBOYW1lIG9mIHRoZSBhbmltYXRpb24gY29udGFpbmluZyB0aGUgYmxlbmQgc3RhdGVcclxuICAgKiB0byB1cGRhdGUuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGJsZW5kTmFtZSAtIE5hbWUgb2YgdGhlIGJsZW5kIHN0YXRlIHRvIHVwZGF0ZS5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gd2VpZ2h0IC0gV2VpZ2h0IHZhbHVlIHRvIHNldCBvbiB0aGUgYW5pbWF0aW9uLiBUaGlzIG51bWJlciBzaG91ZGxkIGJlXHJcbiAgICogaW4gdGhlIDAtMSByYW5nZS5cclxuICAgKiBAcGFyYW0ge251bWJlcj19IHNlY29uZHMgLSBOdW1iZXIgb2Ygc2Vjb25kcyBpdCBzaG91bGQgdGFrZSB0byByZWFjaCB0aGUgbmV3IHdlaWdodC5cclxuICAgKiBEZWZhdWx0IGlzIHplcm8gYW5kIHdpbGwgc2V0IGltbWVkaWF0ZWx5LlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBlYXNpbmdGbiAtIEVhc2luZyBmdW5jdGlvbiB0byB1c2Ugd2hpbGUgaW50ZXJwb2xhdGluZyB0aGUgbmV3XHJcbiAgICogd2VpZ2h0LiBEZWZhdWx0IGlzIEVhc2luZy5MaW5lYXIuSW5PdXQuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7RGVmZXJyZWR9IC0gUHJvbWlzZSB0aGF0IHdpbGwgcmVzb2x2ZSBvbmNlIHRoZSBhbmltYXRpb24ncyB3ZWlnaHQgcmVhY2hlc1xyXG4gICAqIHRoZSB0YXJnZXQgdmFsdWUuXHJcbiAgICovXHJcbiAgc2V0QW5pbWF0aW9uQmxlbmRXZWlnaHQoXHJcbiAgICBhbmltYXRpb25OYW1lLFxyXG4gICAgYmxlbmROYW1lLFxyXG4gICAgd2VpZ2h0LFxyXG4gICAgc2Vjb25kcyA9IDAsXHJcbiAgICBlYXNpbmdGblxyXG4gICkge1xyXG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzLmdldFN0YXRlKGFuaW1hdGlvbk5hbWUpO1xyXG5cclxuICAgIGlmIChzdGF0ZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgQ2Fubm90IHNldCBibGVuZCB3ZWlnaHQgb2YgYW5pbWF0aW9uICR7YW5pbWF0aW9uTmFtZX0gb24gbGF5ZXIgJHt0aGlzLm5hbWV9LiBObyBhbmltYXRpb24gZXhpc3RzIHdpdGggdGhpcyBuYW1lLmBcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoc3RhdGUgaW5zdGFuY2VvZiBBYnN0cmFjdEJsZW5kU3RhdGUpIHtcclxuICAgICAgcmV0dXJuIHN0YXRlLnNldEJsZW5kV2VpZ2h0KGJsZW5kTmFtZSwgd2VpZ2h0LCBzZWNvbmRzLCBlYXNpbmdGbik7XHJcbiAgICB9XHJcblxyXG4gICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICBgQ2Fubm90IHNldCBibGVuZCB3ZWlnaHQgb2YgYW5pbWF0aW9uICR7YW5pbWF0aW9uTmFtZX0gb24gbGF5ZXIgJHt0aGlzLm5hbWV9LiBBbmltYXRpb24gaXMgbm90IGFuIGluc3RhbmNlIG9mIEFic3RyYWN0QmxlbmRTdGF0ZS5gXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgd2VpZ2h0IGZvciBhIGJsZW5kIHN0YXRlIG9mIGFuIGFuaW1hdGlvbi5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhbmltYXRpb25OYW1lIC0gTmFtZSBvZiB0aGUgYW5pbWF0aW9uIGNvbnRhaW5pbmcgdGhlIGJsZW5kIHN0YXRlXHJcbiAgICogdG8gdXBkYXRlLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBibGVuZE5hbWUgLSBOYW1lIG9mIHRoZSBibGVuZCBzdGF0ZSB0byByZXRyaWV2ZSB0aGUgd2VpZ2h0IG9mLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge251bWJlcn0gLSBXZWlnaHQgb2YgdGhlIGJsZW5kIHN0YXRlLlxyXG4gICAqL1xyXG4gIGdldEFuaW1hdGlvbkJsZW5kV2VpZ2h0KGFuaW1hdGlvbk5hbWUsIGJsZW5kTmFtZSkge1xyXG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzLmdldFN0YXRlKGFuaW1hdGlvbk5hbWUpO1xyXG5cclxuICAgIGlmIChzdGF0ZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgQ2Fubm90IGdldCBibGVuZCB3ZWlnaHQgb2YgYW5pbWF0aW9uICR7YW5pbWF0aW9uTmFtZX0gb24gbGF5ZXIgJHt0aGlzLm5hbWV9LiBObyBhbmltYXRpb24gZXhpc3RzIHdpdGggdGhpcyBuYW1lLmBcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoc3RhdGUgaW5zdGFuY2VvZiBBYnN0cmFjdEJsZW5kU3RhdGUpIHtcclxuICAgICAgcmV0dXJuIHN0YXRlLmdldEJsZW5kV2VpZ2h0KGJsZW5kTmFtZSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICBgQ2Fubm90IGdldCBibGVuZCB3ZWlnaHQgb2YgYW5pbWF0aW9uICR7YW5pbWF0aW9uTmFtZX0gb24gbGF5ZXIgJHt0aGlzLm5hbWV9LiBBbmltYXRpb24gaXMgbm90IGFuIGluc3RhbmNlIG9mIEFic3RyYWN0QmxlbmRTdGF0ZS5gXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlIGFueSB3ZWlnaHQgaW50ZXJwb2xhdG9ycyBhbmQgdGhlIGN1cnJlbnQgYW5pbWF0aW9uLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IGRlbHRhVGltZSAtIFRpbWUgaW4gbWlsbGlzZWNvbmRzIHNpbmNlIHRoZSBsYXN0IHVwZGF0ZS5cclxuICAgKi9cclxuICB1cGRhdGUoZGVsdGFUaW1lKSB7XHJcbiAgICBzdXBlci51cGRhdGUoZGVsdGFUaW1lKTtcclxuXHJcbiAgICBpZiAoIXRoaXMuX3BhdXNlZCAmJiAhdGhpcy5fd2VpZ2h0UGF1c2VkKSB7XHJcbiAgICAgIHRoaXMuX3Byb21pc2VzLndlaWdodC5leGVjdXRlKGRlbHRhVGltZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDYW5jZWwgYW55IHBlbmRpbmcgcHJvbWlzZXMgYW5kIGRpc2NhcmQgc3RhdGVzIGNvbnRyb2xsZWQgYnkgdGhlIGxheWVyLlxyXG4gICAqL1xyXG4gIGRpc2NhcmQoKSB7XHJcbiAgICBzdXBlci5kaXNjYXJkKCk7XHJcblxyXG4gICAgdGhpcy5kaXNjYXJkU3RhdGVzKCk7XHJcblxyXG4gICAgdGhpcy5fcHJvbWlzZXMud2VpZ2h0LmNhbmNlbCgpO1xyXG4gICAgZGVsZXRlIHRoaXMuX3Byb21pc2VzO1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgQW5pbWF0aW9uTGF5ZXI7XHJcbiIsIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxyXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTBcclxuaW1wb3J0IERlZmVycmVkIGZyb20gJ2NvcmUvRGVmZXJyZWQnO1xyXG5pbXBvcnQgQWJzdHJhY3RTdGF0ZSBmcm9tICcuL0Fic3RyYWN0U3RhdGUnO1xyXG5pbXBvcnQge3ZhbGlkYXRlQmxlbmRNb2RlfSBmcm9tICcuLi9BbmltYXRpb25MYXllcic7XHJcbmltcG9ydCBBbmltYXRpb25VdGlscyBmcm9tICcuLi9BbmltYXRpb25VdGlscyc7XHJcblxyXG4vKipcclxuICogQ2xhc3MgZm9yIHBsYXlpbmcgYSBzaW5nbGUgYW5pbWF0aW9uIGNsaXAuXHJcbiAqXHJcbiAqIEBleHRlbmRzIEFic3RyYWN0U3RhdGVcclxuICogQGFsaWFzIGNvcmUvU2luZ2xlU3RhdGVcclxuICovXHJcbmNsYXNzIFNpbmdsZVN0YXRlIGV4dGVuZHMgQWJzdHJhY3RTdGF0ZSB7XHJcbiAgLyoqXHJcbiAgICogQGNvbnN0cnVjdG9yXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge09iamVjdD19IG9wdGlvbnMgLSBPcHRpb25zIGZvciB0aGUgYW5pbWF0aW9uIHN0YXRlLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nPX0gb3B0aW9ucy5uYW1lIC0gTmFtZSBmb3IgdGhlIGFuaW1hdGlvbiBzdGF0ZS4gTmFtZXMgbXVzdCBiZVxyXG4gICAqIHVuaXF1ZSBmb3IgdGhlIGxheWVyIHRoZSBzdGF0ZSBpcyBhcHBsaWVkIHRvLlxyXG4gICAqIEBwYXJhbSB7d2VpZ2h0fSBbb3B0aW9ucy53ZWlnaHQ9MF0gLSBUaGUgMC0xIGFtb3VudCBvZiBpbmZsdWVuY2UgdGhlIHN0YXRlIHdpbGwgaGF2ZS5cclxuICAgKiBAcGFyYW0ge3RpbWVTY2FsZX0gW29wdGlvbnMudGltZVNjYWxlPTFdIC0gRmFjdG9yIHRvIHNjYWxlIHRoZSBwbGF5YmFjayBzcGVlZCBvZiB0aGVcclxuICAgKiBhbmltYXRpb24uXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLmxvb3BDb3VudD1JbmZpbml0eV0gLSBOdW1iZXIgb2YgdGltZXMgdGhlIGFuaW1hdGlvbiBzaG91bGRcclxuICAgKiByZXBlYXQgYmVmb3JlIGZpbmlzaGluZy5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuYmxlbmRNb2RlPURlZmF1bHRMYXllckJsZW5kTW9kZV0gLSBUeXBlIG9mXHJcbiAgICogYmxlbmRpbmcgdGhlIGFuaW1hdGlvbiBzaG91bGQgdXNlLlxyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMgPSB7fSkge1xyXG4gICAgc3VwZXIob3B0aW9ucyk7XHJcblxyXG4gICAgdGhpcy5fdGltZVNjYWxlID0gb3B0aW9ucy50aW1lU2NhbGUgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMudGltZVNjYWxlIDogMTtcclxuICAgIHRoaXMuX3Byb21pc2VzLnRpbWVTY2FsZSA9IERlZmVycmVkLnJlc29sdmUoKTtcclxuICAgIHRoaXMuX2xvb3BDb3VudCA9XHJcbiAgICAgIG9wdGlvbnMubG9vcENvdW50ICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLmxvb3BDb3VudCA6IEluZmluaXR5O1xyXG4gICAgdGhpcy5fYmxlbmRNb2RlID0gdmFsaWRhdGVCbGVuZE1vZGUob3B0aW9ucy5ibGVuZE1vZGUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyBhbmQgc2V0cyB0aGUgbm9ybWFsaXplZCBwbGF5aW5nIHRpbWUgb2YgdGhlIGN1cnJlbnQgYW5pbWF0aW9uXHJcbiAgICpcclxuICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAqL1xyXG4gIGdldCBub3JtYWxpemVkVGltZSgpIHtcclxuICAgIHJldHVybiAwO1xyXG4gIH1cclxuXHJcbiAgc2V0IG5vcm1hbGl6ZWRUaW1lKHRpbWUpIHtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgYW5kIHNldHMgdGhlIGEgZmFjdG9yIHRvIHNjYWxlIGFuaW1hdGlvbiBwbGF5YmFjayBzcGVlZCB3aXRoLlxyXG4gICAqXHJcbiAgICogQHR5cGUge251bWJlcn1cclxuICAgKi9cclxuICBnZXQgdGltZVNjYWxlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3RpbWVTY2FsZTtcclxuICB9XHJcblxyXG4gIHNldCB0aW1lU2NhbGUodGltZVNjYWxlKSB7XHJcbiAgICB0aGlzLl90aW1lU2NhbGUgPSB0aW1lU2NhbGU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHdoZXRoZXIgb3Igbm90IHRoZSB0aW1lU2NhbGUgaXMgY3VycmVudGx5IGJlaW5nIGFuaW1hdGVkLlxyXG4gICAqXHJcbiAgICogQHJlYWRvbmx5XHJcbiAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICovXHJcbiAgZ2V0IHRpbWVTY2FsZVBlbmRpbmcoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fcHJvbWlzZXMudGltZVNjYWxlLnBlbmRpbmc7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGVzIHRoZSB0aW1lU2NhbGUgdmFsdWUgb3ZlciB0aW1lLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IHdlaWdodCAtIFRoZSB0YXJnZXQgdGltZVNjYWxlIHZhbHVlLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbc2Vjb25kcz0wXSAtIFRoZSBhbW91bnQgb2YgdGltZSBpdCB3aWxsIHRha2UgdG8gcmVhY2ggdGhlXHJcbiAgICogdGFyZ2V0IHRpbWVTY2FsZS5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gZWFzaW5nRm4gLSBUaGUgZWFzaW5nIGZ1bmN0aW9uIHRvIHVzZSBmb3IgaW50ZXJwb2xhdGlvbi5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtEZWZlcnJlZH1cclxuICAgKi9cclxuICBzZXRUaW1lU2NhbGUodGltZVNjYWxlLCBzZWNvbmRzID0gMCwgZWFzaW5nRm4pIHtcclxuICAgIHRoaXMuX3Byb21pc2VzLnRpbWVTY2FsZS5jYW5jZWwoKTtcclxuXHJcbiAgICB0aGlzLl9wcm9taXNlcy50aW1lU2NhbGUgPSBBbmltYXRpb25VdGlscy5pbnRlcnBvbGF0ZVByb3BlcnR5KFxyXG4gICAgICB0aGlzLFxyXG4gICAgICAndGltZVNjYWxlJyxcclxuICAgICAgdGltZVNjYWxlLFxyXG4gICAgICB7c2Vjb25kcywgZWFzaW5nRm59XHJcbiAgICApO1xyXG5cclxuICAgIHJldHVybiB0aGlzLl9wcm9taXNlcy50aW1lU2NhbGU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIGFuZCBzZXRzIHRoZSBudW1iZXIgb2YgdGltZXMgdGhlIGFuaW1hdGlvbiB3aWxsIHJlcGVhdCBiZWZvcmUgZmluaXNoaW5nLlxyXG4gICAqXHJcbiAgICogQHR5cGUge251bWJlcn1cclxuICAgKi9cclxuICBnZXQgbG9vcENvdW50KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2xvb3BDb3VudDtcclxuICB9XHJcblxyXG4gIHNldCBsb29wQ291bnQobG9vcENvdW50KSB7XHJcbiAgICB0aGlzLl9sb29wQ291bnQgPSBsb29wQ291bnQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSB0eXBlIG9mIGJsZW5kaW5nIHVzZWQgZm9yIHRoZSBhbmltYXRpb24uXHJcbiAgICpcclxuICAgKiBAcmVhZG9ubHlcclxuICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAqL1xyXG4gIGdldCBibGVuZE1vZGUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fYmxlbmRNb2RlO1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgU2luZ2xlU3RhdGU7XHJcbiIsIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxyXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTBcclxuaW1wb3J0IEFic3RyYWN0U3RhdGUgZnJvbSAnLi9BYnN0cmFjdFN0YXRlJztcclxuaW1wb3J0IFN0YXRlQ29udGFpbmVySW50ZXJmYWNlIGZyb20gJy4vU3RhdGVDb250YWluZXJJbnRlcmZhY2UnO1xyXG5pbXBvcnQgQW5pbWF0aW9uUGxheWVySW50ZXJmYWNlIGZyb20gJy4uL0FuaW1hdGlvblBsYXllckludGVyZmFjZSc7XHJcbmltcG9ydCBVdGlscyBmcm9tICcuLi8uLi9VdGlscyc7XHJcblxyXG4vKipcclxuICogQ2xhc3MgZm9yIHBsYXlpbmcgcmFuZG9tIGFuaW1hdGlvbnMgYXQgcmFuZG9tIGludGVydmFscyB3aXRoaW4gdGhpcyBzdGF0ZS5cclxuICpcclxuICogQGV4dGVuZHMgQWJzdHJhY3RTdGF0ZVxyXG4gKiBAaW1wbGVtZW50cyBBbmltYXRpb25QbGF5ZXJJbnRlcmZhY2VcclxuICogQGltcGxlbWVudHMgU3RhdGVDb250YWluZXJJbnRlcmZhY2VcclxuICovXHJcbmNsYXNzIFJhbmRvbUFuaW1hdGlvblN0YXRlIGV4dGVuZHMgQW5pbWF0aW9uUGxheWVySW50ZXJmYWNlLk1peGluKFN0YXRlQ29udGFpbmVySW50ZXJmYWNlLk1peGluKEFic3RyYWN0U3RhdGUpKSB7XHJcbiAgLyoqXHJcbiAgICogQGNvbnN0cnVjdG9yXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIC0gT3B0aW9ucyBmb3IgdGhlIGNvbnRhaW5lciBzdGF0ZS5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMucGxheUludGVydmFsPTNdIC0gVGhlIGJhc2UgYW5pbWF0aW9uIHBsYXliYWNrIGludGVydmFsLlxyXG4gICAqIEBwYXJhbSB7QXJyYXkuPEFic3RyYWN0U3RhdGU+fSBbc3ViU3RhdGVzPVtdXSAtIHN0YXRlcyB0byBiZSByYW5kb21seSBwaWNrZWQgdG8gcGxheVxyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMgPSB7fSwgc3ViU3RhdGVzID0gW10pIHtcclxuICAgIHN1cGVyKG9wdGlvbnMpO1xyXG5cclxuICAgIHRoaXMuX3BsYXlJbnRlcnZhbCA9IG9wdGlvbnMucGxheUludGVydmFsID8gb3B0aW9ucy5wbGF5SW50ZXJ2YWwgOiAzO1xyXG5cclxuICAgIHN1YlN0YXRlcy5mb3JFYWNoKHN0YXRlID0+IHtcclxuICAgICAgdGhpcy5hZGRTdGF0ZShzdGF0ZSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgYW5kIHNldHMgdGhlIGJhc2UgYW5pbWF0aW9uIHBsYXkgaW50ZXJ2YWxcclxuICAgKlxyXG4gICAqIEB0eXBlIHtmbG9hdH1cclxuICAgKi9cclxuICBnZXQgcGxheUludGVydmFsKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3BsYXlJbnRlcnZhbDtcclxuICB9XHJcblxyXG4gIHNldCBwbGF5SW50ZXJ2YWwocGxheUludGVydmFsKSB7XHJcbiAgICB0aGlzLl9wbGF5SW50ZXJ2YWwgPSBwbGF5SW50ZXJ2YWw7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXNldCB0aGUgaW50ZXJuYWwgdGltZXIgZm9yIGFuaW1hdGlvbiBwbGF5IGludGVydmFsXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIF9yZXNldFRpbWVyKCkge1xyXG4gICAgY29uc3QgcGxheVRpbWVyID0gVXRpbHMuZ2V0UmFuZG9tRmxvYXQodGhpcy5fcGxheUludGVydmFsIC8gNCwgdGhpcy5fcGxheUludGVydmFsICogMik7XHJcbiAgICBjb25zdCBvbkZpbmlzaCA9ICgpID0+IHtcclxuICAgICAgdGhpcy5wbGF5UmFuZG9tQW5pbWF0aW9uKHRoaXMuX3BsYXlDYWxsYmFja3Mub25FcnJvcik7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9wcm9taXNlcy50aW1lciA9IFV0aWxzLndhaXQocGxheVRpbWVyLCB7b25GaW5pc2h9KTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZUludGVybmFsV2VpZ2h0KGZhY3Rvcikge1xyXG4gICAgc3VwZXIudXBkYXRlSW50ZXJuYWxXZWlnaHQoZmFjdG9yKTtcclxuXHJcbiAgICBpZiAodGhpcy5fY3VycmVudFN0YXRlKSB7XHJcbiAgICAgIHRoaXMuX2N1cnJlbnRTdGF0ZS51cGRhdGVJbnRlcm5hbFdlaWdodCh0aGlzLl9pbnRlcm5hbFdlaWdodCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQaWNrIGEgcmFuZG9tIGFuaW1hdGlvbiBhbmQgdXRpbGl6ZSBBbmltYXRpb25QbGF5ZXJJbnRlcmZhY2UgdG8gcGxheSB0aGF0IGFuaW1hdGlvblxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9uRXJyb3IgLSBGdW5jdGlvbiB0byBleGVjdXRlIGlmIHRoZSBzdGF0ZSBlbmNvdW50ZXJzXHJcbiAgICogYW4gZXJyb3IgZHVyaW5nIHBsYXliYWNrLlxyXG4gICAqL1xyXG4gIHBsYXlSYW5kb21BbmltYXRpb24ob25FcnJvcikge1xyXG4gICAgdGhpcy5fcmVzZXRUaW1lcigpO1xyXG5cclxuICAgIGNvbnN0IHN0YXRlcyA9IHRoaXMuZ2V0U3RhdGVOYW1lcygpO1xyXG4gICAgaWYgKHRoaXMuX2N1cnJlbnRTdGF0ZSkge1xyXG4gICAgICBzdGF0ZXMuc3BsaWNlKHN0YXRlcy5pbmRleE9mKHRoaXMuX2N1cnJlbnRTdGF0ZS5uYW1lKSwgMSk7XHJcbiAgICB9XHJcbiAgICBjb25zdCByYW5kb21TdGF0ZSA9ICBzdGF0ZXNbVXRpbHMuZ2V0UmFuZG9tSW50KDAsIHN0YXRlcy5sZW5ndGgpXTtcclxuXHJcbiAgICB0aGlzLnBsYXlBbmltYXRpb24ocmFuZG9tU3RhdGUsIHRoaXMuX3RyYW5zaXRpb25UaW1lLCB0aGlzLl9lYXNpbmdGbiwgdW5kZWZpbmVkLCBvbkVycm9yLCB1bmRlZmluZWQpO1xyXG4gIH1cclxuXHJcbiAgcGxheShvbkZpbmlzaCwgb25FcnJvciwgb25DYW5jZWwpIHtcclxuICAgIHRoaXMucGxheVJhbmRvbUFuaW1hdGlvbihvbkVycm9yKTtcclxuICAgIHJldHVybiBzdXBlci5wbGF5KG9uRmluaXNoLCBvbkVycm9yLCBvbkNhbmNlbCk7XHJcbiAgfVxyXG5cclxuICBwYXVzZSgpIHtcclxuICAgIHJldHVybiBzdXBlci5wYXVzZSgpICYmIHRoaXMucGF1c2VBbmltYXRpb24oKTtcclxuICB9XHJcblxyXG4gIHJlc3VtZShvbkZpbmlzaCwgb25FcnJvciwgb25DYW5jZWwpIHtcclxuICAgIGlmICh0aGlzLl9jdXJyZW50U3RhdGUpIHtcclxuICAgICAgdGhpcy5yZXN1bWVBbmltYXRpb24odGhpcy5fY3VycmVudFN0YXRlLm5hbWUsIHRoaXMuX3RyYW5zaXRpb25UaW1lLCB0aGlzLl9lYXNpbmdGbiwgdW5kZWZpbmVkLCBvbkVycm9yLCB1bmRlZmluZWQpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHN1cGVyLnJlc3VtZShvbkZpbmlzaCwgb25FcnJvciwgb25DYW5jZWwpO1xyXG4gIH1cclxuXHJcbiAgY2FuY2VsKCkge1xyXG4gICAgcmV0dXJuIHN1cGVyLmNhbmNlbCgpICYmIHRoaXMuY2FuY2VsQW5pbWF0aW9uKCk7XHJcbiAgfVxyXG5cclxuICBzdG9wKCkge1xyXG4gICAgcmV0dXJuIHN1cGVyLnN0b3AoKSAmJiB0aGlzLnN0b3BBbmltYXRpb24oKTtcclxuICB9XHJcblxyXG4gIGRpc2NhcmQoKSB7XHJcbiAgICBzdXBlci5kaXNjYXJkKCk7XHJcbiAgICB0aGlzLmRpc2NhcmRTdGF0ZXMoKTtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IFJhbmRvbUFuaW1hdGlvblN0YXRlO1xyXG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cclxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVC0wXHJcbmltcG9ydCBBYnN0cmFjdEhvc3RGZWF0dXJlIGZyb20gJ2NvcmUvQWJzdHJhY3RIb3N0RmVhdHVyZSc7XHJcbmltcG9ydCBVdGlscyBmcm9tICdjb3JlL1V0aWxzJztcclxuaW1wb3J0IFF1ZXVlU3RhdGUgZnJvbSAnLi9zdGF0ZS9RdWV1ZVN0YXRlJztcclxuaW1wb3J0IEZyZWVCbGVuZFN0YXRlIGZyb20gJy4vc3RhdGUvRnJlZUJsZW5kU3RhdGUnO1xyXG5pbXBvcnQgQmxlbmQxZFN0YXRlIGZyb20gJy4vc3RhdGUvQmxlbmQxZFN0YXRlJztcclxuaW1wb3J0IEJsZW5kMmRTdGF0ZSBmcm9tICcuL3N0YXRlL0JsZW5kMmRTdGF0ZSc7XHJcbmltcG9ydCBTaW5nbGVTdGF0ZSBmcm9tICcuL3N0YXRlL1NpbmdsZVN0YXRlJztcclxuaW1wb3J0IFJhbmRvbUFuaW1hdGlvblN0YXRlIGZyb20gJy4vc3RhdGUvUmFuZG9tQW5pbWF0aW9uU3RhdGUnO1xyXG5pbXBvcnQgQW5pbWF0aW9uTGF5ZXIsIHtMYXllckJsZW5kTW9kZXN9IGZyb20gJy4vQW5pbWF0aW9uTGF5ZXInO1xyXG5pbXBvcnQgRGVmZXJyZWQgZnJvbSAnLi4vRGVmZXJyZWQnO1xyXG5cclxuLyoqXHJcbiAqIEVudW0gZm9yIGFuaW1hdGlvbiBzdGF0ZSBjbGFzc2VzLlxyXG4gKlxyXG4gKiBAcmVhZG9ubHlcclxuICogQGVudW0ge0NsYXNzfVxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IEFuaW1hdGlvblR5cGVzID0ge1xyXG4gIHNpbmdsZTogU2luZ2xlU3RhdGUsXHJcbiAgZnJlZUJsZW5kOiBGcmVlQmxlbmRTdGF0ZSxcclxuICBxdWV1ZTogUXVldWVTdGF0ZSxcclxuICByYW5kb21BbmltYXRpb246IFJhbmRvbUFuaW1hdGlvblN0YXRlLFxyXG4gIGJsZW5kMWQ6IEJsZW5kMWRTdGF0ZSxcclxuICBibGVuZDJkOiBCbGVuZDJkU3RhdGUsXHJcbn07XHJcblxyXG4vKipcclxuICogRmVhdHVyZSBmb3IgbWFuYWdpbmcgYW5pbWF0aW9ucyBvbiBhbiBvYmplY3QuXHJcbiAqXHJcbiAqIEBleHRlbmRzIEFic3RyYWN0SG9zdEZlYXR1cmVcclxuICogQGFsaWFzIGNvcmUvQW5pbWF0aW9uRmVhdHVyZVxyXG4gKlxyXG4gKiBAcHJvcGVydHkge09iamVjdH0gRVZFTlRTIC0gQnVpbHQtaW4gbWVzc2FnZXMgdGhhdCB0aGUgZmVhdHVyZSBlbWl0cy4gV2hlbiB0aGVcclxuICogZmVhdHVyZSBpcyBhZGRlZCB0byBhIHtAbGluayBjb3JlL0hvc3RPYmplY3R9LCBldmVudCBuYW1lcyB3aWxsIGJlIHByZWZpeGVkIGJ5IHRoZVxyXG4gKiBuYW1lIG9mIHRoZSBmZWF0dXJlIGNsYXNzICsgJy4nLlxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW0VWRU5UUy5hZGRMYXllcj1vbkFkZExheWVyRXZlbnRdIC0gTWVzc2FnZSB0aGF0IGlzIGVtaXR0ZWQgYWZ0ZXJcclxuICogW2FkZExheWVyXXtAbGluayBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjYWRkTGF5ZXJ9IGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBleGVjdXRlZC5cclxuICogQW4gb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgbmFtZSBvZiB0aGUgbGF5ZXIgdGhhdCB3YXMgYWRkZWQgYW5kIGl0cyBpbmRleCBpblxyXG4gKiB0aGUgbGF5ZXIgc3RhY2sgd2l0aCB0aGUgc2lnbmF0dXJlIHtuYW1lOiBzdHJpbmcsIGluZGV4OiBudW1iZXJ9IGlzIHN1cHBsaWVkXHJcbiAqIGFzIGFuIGFyZ3VtZW50IHRvIGxpc3RlbmVyIGZ1bmN0aW9ucy5cclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtFVkVOVFMucmVtb3ZlTGF5ZXI9b25SZW1vdmVMYXllckV2ZW50XSAtIE1lc3NhZ2UgdGhhdCBpc1xyXG4gKiBlbWl0dGVkIGFmdGVyIFtyZW1vdmVMYXllcl17QGxpbmsgY29yZS9BbmltYXRpb25GZWF0dXJlI3JlbW92ZUxheWVyfSBoYXMgYmVlblxyXG4gKiBzdWNjZXNzZnVsbHkgZXhlY3V0ZWQuIEFuIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIG5hbWUgb2YgdGhlIGxheWVyIHRoYXQgd2FzXHJcbiAqIHJlbW92ZWQgYW5kIGl0cyBpbmRleCBpbiB0aGUgbGF5ZXIgc3RhY2sgd2l0aCB0aGUgc2lnbmF0dXJlIHtuYW1lOiBzdHJpbmcsIGluZGV4OiBudW1iZXJ9XHJcbiAqIGlzIHN1cHBsaWVkIGFzIGFuIGFyZ3VtZW50IHRvIGxpc3RlbmVyIGZ1bmN0aW9ucy5cclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtFVkVOVFMucmVuYW1lTGF5ZXI9b25SZW5hbWVMYXllckV2ZW50XSAtIE1lc3NhZ2UgdGhhdCBpc1xyXG4gKiBlbWl0dGVkIGFmdGVyIFtyZW5hbWVMYXllcl17QGxpbmsgY29yZS9BbmltYXRpb25GZWF0dXJlI3JlbmFtZUxheWVyfSBoYXMgYmVlblxyXG4gKiBzdWNjZXNzZnVsbHkgZXhlY3V0ZWQuIEFuIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIG9yaWdpbmFsIG5hbWUgb2YgdGhlIGxheWVyXHJcbiAqIHRoYXQgd2FzIHJlbmFtZWQgYW5kIGl0cyB1cGRhdGVkIG5hbWUgd2l0aCB0aGUgc2lnbmF0dXJlIHtvbGROYW1lOiBzdHJpbmcsIG5ld05hbWU6IHN0cmluZ31cclxuICogaXMgc3VwcGxpZWQgYXMgYW4gYXJndW1lbnQgdG8gbGlzdGVuZXIgZnVuY3Rpb25zLlxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW0VWRU5UUy5hZGRBbmltYXRpb249b25BZGRBbmltYXRpb25FdmVudF0gLSBNZXNzYWdlIHRoYXQgaXNcclxuICogZW1pdHRlZCBhZnRlciBbYWRkQW5pbWF0aW9uXXtAbGluayBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjYWRkQW5pbWF0aW9ufSBoYXMgYmVlblxyXG4gKiBzdWNjZXNzZnVsbHkgZXhlY3V0ZWQuIEFuIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIG5hbWUgb2YgdGhlIGxheWVyIHRoYXQgdGhlXHJcbiAqIGFuaW1hdGlvbiB3YXMgYWRkZWQgdG8gYW5kIHRoZSBuYW1lIG9mIHRoZSBhbmltYXRpb24gdGhhdCB3YXMgYWRkZWQgd2l0aCB0aGVcclxuICogc2lnbmF0dXJlIHtsYXllck5hbWU6IHN0cmluZywgYW5pbWF0aW9uTmFtZTogc3RyaW5nfSBpcyBzdXBwbGllZCBhcyBhbiBhcmd1bWVudFxyXG4gKiB0byBsaXN0ZW5lciBmdW5jdGlvbnMuXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbRVZFTlRTLnJlbW92ZUFuaW1hdGlvbj1vblJlbW92ZWRBbmltYXRpb25FdmVudF0gLSBNZXNzYWdlXHJcbiAqIHRoYXQgaXMgZW1pdHRlZCBhZnRlciBbcmVtb3ZlQW5pbWF0aW9uXXtAbGluayBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjcmVtb3ZlQW5pbWF0aW9ufVxyXG4gKiBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgZXhlY3V0ZWQuIEFuIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIG5hbWUgb2YgdGhlIGxheWVyXHJcbiAqIHRoYXQgdGhlIGFuaW1hdGlvbiB3YXMgcmVtb3ZlZCBmcm9tIGFuZCB0aGUgbmFtZSBvZiB0aGUgYW5pbWF0aW9uIHRoYXQgd2FzIHJlbW92ZWRcclxuICogd2l0aCB0aGUgc2lnbmF0dXJlIHtsYXllck5hbWU6IHN0cmluZywgYW5pbWF0aW9uTmFtZTogc3RyaW5nfSBpcyBzdXBwbGllZCBhc1xyXG4gKiBhbiBhcmd1bWVudCB0byBsaXN0ZW5lciBmdW5jdGlvbnMuXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbRVZFTlRTLnJlbmFtZUFuaW1hdGlvbj1vblJlbmFtZUFuaW1hdGlvbkV2ZW50XSAtIE1lc3NhZ2VcclxuICogdGhhdCBpcyBlbWl0dGVkIGFmdGVyIFtyZW5hbWVBbmltYXRpb25de0BsaW5rIGNvcmUvQW5pbWF0aW9uRmVhdHVyZSNyZW5hbWVBbmltYXRpb259XHJcbiAqIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBleGVjdXRlZC4gQW4gb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgbmFtZSBvZiB0aGUgbGF5ZXJcclxuICogdGhhdCBjb250YWlucyB0aGUgYW5pbWF0aW9uIHRoYXQgd2FzIHJlbmFtZWQsIHRoZSBvcmlnaW5hbCBuYW1lIG9mIHRoZSBhbmltYXRpb25cclxuICogdGhhdCB3YXMgcmVuYW1lZCBhbmQgaXRzIHVwZGF0ZWQgbmFtZSB3aXRoIHRoZSBzaWduYXR1cmUge2xheWVyTmFtZTogc3RyaW5nLCBvbGROYW1lOiBzdHJpbmcsIG5ld05hbWU6IHN0cmluZ31cclxuICogaXMgc3VwcGxpZWQgYXMgYW4gYXJndW1lbnQgdG8gbGlzdGVuZXIgZnVuY3Rpb25zLlxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW0VWRU5UUy5wbGF5PW9uUGxheUV2ZW50XSAtIE1lc3NhZ2UgdGhhdCBpcyBlbWl0dGVkIGFmdGVyXHJcbiAqIGVhY2ggY2FsbCB0byBbcGxheV17QGxpbmsgY29yZS9BbmltYXRpb25GZWF0dXJlI3BsYXlBbmltYXRpb259LiBBbiBvYmplY3QgcmVwcmVzZW50aW5nXHJcbiAqIHRoZSBuYW1lIG9mIHRoZSBsYXllciBjb250YWlucyB0aGUgYW5pbWF0aW9uIHRoYXQgd2FzIHBsYXllZCBhbmQgdGhlIG5hbWUgb2ZcclxuICogdGhlIGFuaW1hdGlvbiB0aGF0IHdhcyBwbGF5ZWQgd2l0aCB0aGUgc2lnbmF0dXJlIHtsYXllck5hbWU6IHN0cmluZywgYW5pbWF0aW9uTmFtZTogc3RyaW5nfVxyXG4gKiBpcyBzdXBwbGllZCBhcyBhbiBhcmd1bWVudCB0byBsaXN0ZW5lciBmdW5jdGlvbnMuXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbRVZFTlRTLnBhdXNlPW9uUGF1c2VFdmVudF0gLSBNZXNzYWdlIHRoYXQgaXMgZW1pdHRlZCBhZnRlclxyXG4gKiBlYWNoIGNhbGwgdG8gW3BhdXNlXXtAbGluayBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjcGF1c2VBbmltYXRpb259LiBBbiBvYmplY3QgcmVwcmVzZW50aW5nXHJcbiAqIHRoZSBuYW1lIG9mIHRoZSBsYXllciBjb250YWlucyB0aGUgYW5pbWF0aW9uIHRoYXQgd2FzIHBhdXNlZCBhbmQgdGhlIG5hbWUgb2ZcclxuICogdGhlIGFuaW1hdGlvbiB0aGF0IHdhcyBwYXVzZWQgd2l0aCB0aGUgc2lnbmF0dXJlIHtsYXllck5hbWU6IHN0cmluZywgYW5pbWF0aW9uTmFtZTogc3RyaW5nfVxyXG4gKiBpcyBzdXBwbGllZCBhcyBhbiBhcmd1bWVudCB0byBsaXN0ZW5lciBmdW5jdGlvbnMuXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbRVZFTlRTLnJlc3VtZT1vblJlc3VtZUV2ZW50XSAtIE1lc3NhZ2UgdGhhdCBpcyBlbWl0dGVkIGFmdGVyXHJcbiAqIGVhY2ggY2FsbCB0byBbcmVzdW1lXXtAbGluayBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjcmVzdW1lQW5pbWF0aW9ufS4gQW4gb2JqZWN0IHJlcHJlc2VudGluZ1xyXG4gKiB0aGUgbmFtZSBvZiB0aGUgbGF5ZXIgY29udGFpbnMgdGhlIGFuaW1hdGlvbiB0aGF0IHdhcyByZXN1bWVkIGFuZCB0aGUgbmFtZSBvZlxyXG4gKiB0aGUgYW5pbWF0aW9uIHRoYXQgd2FzIHJlc3VtZWQgd2l0aCB0aGUgc2lnbmF0dXJlIHtsYXllck5hbWU6IHN0cmluZywgYW5pbWF0aW9uTmFtZTogc3RyaW5nfVxyXG4gKiBpcyBzdXBwbGllZCBhcyBhbiBhcmd1bWVudCB0byBsaXN0ZW5lciBmdW5jdGlvbnMuXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbRVZFTlRTLmludGVycnVwdD1vbkludGVycnVwdEV2ZW50XSAtIE1lc3NhZ2UgdGhhdCBpcyBlbWl0dGVkXHJcbiAqIGlmIHRoZXJlIGlzIGEgY3VycmVudCBzcGVlY2ggaW4gcHJvZ3Jlc3MgYW5kIFtwbGF5XXtAbGluayBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjcGxheUFuaW1hdGlvbn1cclxuICogb3IgW3Jlc3VtZV17QGxpbmsgY29yZS9BbmltYXRpb25GZWF0dXJlI3Jlc3VtZUFuaW1hdGlvbn0gYXJlIGV4ZWN1dGVkIGZvciBhIG5ldyBzcGVlY2guXHJcbiAqIEFuIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIG5hbWUgb2YgdGhlIGxheWVyIGNvbnRhaW5zIHRoZSBhbmltYXRpb24gdGhhdCB3YXNcclxuICogaW50ZXJydXB0ZWQgYW5kIHRoZSBuYW1lIG9mIHRoZSBhbmltYXRpb24gdGhhdCB3YXMgaW50ZXJydXB0ZWQgd2l0aCB0aGUgc2lnbmF0dXJlXHJcbiAqIHtsYXllck5hbWU6IHN0cmluZywgYW5pbWF0aW9uTmFtZTogc3RyaW5nfSBpcyBzdXBwbGllZCBhcyBhbiBhcmd1bWVudCB0byBsaXN0ZW5lclxyXG4gKiBmdW5jdGlvbnMuXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbRVZFTlRTLnN0b3A9b25TdG9wRXZlbnRdIC0gTWVzc2FnZSB0aGF0IGlzIGVtaXR0ZWQgYWZ0ZXJcclxuICogZWFjaCBjYWxsIHRvIFtzdG9wXXtAbGluayBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjc3RvcEFuaW1hdGlvbn0gYW5kIHdoZW4gYSBzcGVlY2ggcmVhY2hlc1xyXG4gKiB0aGUgZW5kIG9mIHBsYXliYWNrLiBBbiBvYmplY3QgcmVwcmVzZW50aW5nXHJcbiAqIHRoZSBuYW1lIG9mIHRoZSBsYXllciBjb250YWlucyB0aGUgYW5pbWF0aW9uIHRoYXQgd2FzIHN0b3BwZWQgYW5kIHRoZSBuYW1lIG9mXHJcbiAqIHRoZSBhbmltYXRpb24gdGhhdCB3YXMgc3RvcHBlZCB3aXRoIHRoZSBzaWduYXR1cmUge2xheWVyTmFtZTogc3RyaW5nLCBhbmltYXRpb25OYW1lOiBzdHJpbmd9XHJcbiAqIGlzIHN1cHBsaWVkIGFzIGFuIGFyZ3VtZW50IHRvIGxpc3RlbmVyIGZ1bmN0aW9ucy5cclxuICovXHJcbmNsYXNzIEFuaW1hdGlvbkZlYXR1cmUgZXh0ZW5kcyBBYnN0cmFjdEhvc3RGZWF0dXJlIHtcclxuICAvKipcclxuICAgKiBAY29uc3RydWN0b3JcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7Y29yZS9Ib3N0T2JqZWN0fSBob3N0IC0gSG9zdCBvYmplY3QgdGhhdCBvd25zIHRoZSBmZWF0dXJlLlxyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKGhvc3QpIHtcclxuICAgIHN1cGVyKGhvc3QpO1xyXG5cclxuICAgIHRoaXMuX2xheWVycyA9IFtdO1xyXG4gICAgdGhpcy5fbGF5ZXJNYXAgPSB7fTtcclxuICAgIHRoaXMuX3BhdXNlZCA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWFrZSBzdXJlIGEgc3VwcGxpZWQgbGF5ZXIgaW5kZXggaXMgd2l0aGluIHRoZSByYW5nZSBvZiBsYXllcnMuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XHJcbiAgICogQHBhcmFtIHtib29sZWFufSBbZXhpc3Rpbmc9dHJ1ZV0gLSBXaGV0aGVyIHRoZSBpbmRleCByZXByZXNlbnRzIGFuZCBleGlzdGluZ1xyXG4gICAqIGxheWVyIG9yIGEgbmV3IGxheWVyIHRvIGJlIGFkZGVkLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge251bWJlcj19XHJcbiAgICovXHJcbiAgX3ZhbGlkYXRlSW5kZXgoaW5kZXgsIGV4aXN0aW5nID0gdHJ1ZSkge1xyXG4gICAgLy8gSW5kZXggaXMgaW52YWxpZCBpZiB0aGVyZSBhcmUgbm8gbGF5ZXJzIGFuZCB3ZSdyZSBjaGVja2luZyBmb3IgYW4gZXhpc3RpbmcgbGF5ZXIgaW5kZXhcclxuICAgIGlmICh0aGlzLl9sYXllcnMubGVuZ3RoID09PSAwICYmIGV4aXN0aW5nKSB7XHJcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgbGFzdEluZGV4ID0gZXhpc3RpbmcgPyB0aGlzLl9sYXllcnMubGVuZ3RoIC0gMSA6IHRoaXMuX2xheWVycy5sZW5ndGg7XHJcblxyXG4gICAgLy8gQ291bnQgZnJvbSB0aGUgZW5kIG9mIHRoZSBhcnJheSBmb3IgbmVnYXRpdmUgaW5kaWNlc1xyXG4gICAgaWYgKGluZGV4IDwgMCkge1xyXG4gICAgICBpbmRleCA9IGxhc3RJbmRleCArIGluZGV4ICsgMTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID4gbGFzdEluZGV4KSB7XHJcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gaW5kZXg7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZS1ldmFsdWF0ZSBpbnRlcm5hbCB3ZWlnaHQgdmFsdWVzIG9mIGxheWVycyBzdGFydGluZyBmcm9tIHRoZSB0b3Agb2YgdGhlXHJcbiAgICogc3RhY2suIE92ZXJyaWRlIGxheWVycycgd2VpZ2h0cyBhZmZlY3QgdGhlIHZhbHVlcyBvZiBhbGwgbGF5ZXJzIGxvd2VyIGluIHRoZVxyXG4gICAqIHN0YWNrLlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBfdXBkYXRlSW50ZXJuYWxXZWlnaHRzKCkge1xyXG4gICAgY29uc3QgbnVtTGF5ZXJzID0gdGhpcy5fbGF5ZXJzLmxlbmd0aDtcclxuICAgIGxldCB3ZWlnaHRNdWx0aXBsaWVyID0gMTtcclxuXHJcbiAgICAvLyBVcGRhdGUgaW50ZXJuYWwgd2VpZ2h0IHZhbHVlcyBvbiBsYXllcnMgaW4gcmV2ZXJzZSBvcmRlclxyXG4gICAgZm9yIChsZXQgaSA9IG51bUxheWVycyAtIDE7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgIGNvbnN0IGxheWVyID0gdGhpcy5fbGF5ZXJzW2ldO1xyXG4gICAgICBsYXllci51cGRhdGVJbnRlcm5hbFdlaWdodCh3ZWlnaHRNdWx0aXBsaWVyKTtcclxuXHJcbiAgICAgIC8vIElmIHRoZSBsYXllciBpcyBvdmVycmlkZSwgdXBkYXRlIHRoZSBtdWx0aXBsaWVyIHdpdGggdGhlIHJlbWFpbmRlciBvZiB0aGUgZnVsbCB3ZWlnaHRcclxuICAgICAgaWYgKGxheWVyLmJsZW5kTW9kZSA9PT0gTGF5ZXJCbGVuZE1vZGVzLk92ZXJyaWRlICYmIGxheWVyLmN1cnJlbnRTdGF0ZSkge1xyXG4gICAgICAgIHdlaWdodE11bHRpcGxpZXIgKj0gMSAtIGxheWVyLmN1cnJlbnRTdGF0ZS5pbnRlcm5hbFdlaWdodDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIGEgbmV3IGluc3RhbmNlIG9mIGEgU2luZ2xlU3RhdGUuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBPcHRpb25zIHRvIHBhc3MgdG8gdGhlIFNpbmdsZVN0YXRlIGNvbnN0cnVjdG9yLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nPX0gb3B0aW9ucy5uYW1lIC0gTmFtZSBmb3IgdGhlIGFuaW1hdGlvbiBzdGF0ZS4gTmFtZXMgbXVzdCBiZVxyXG4gICAqIHVuaXF1ZSBmb3IgdGhlIGxheWVyIHRoZSBzdGF0ZSBpcyBhcHBsaWVkIHRvLlxyXG4gICAqIEBwYXJhbSB7d2VpZ2h0fSBbb3B0aW9ucy53ZWlnaHQ9MF0gLSBUaGUgMC0xIGFtb3VudCBvZiBpbmZsdWVuY2UgdGhlIHN0YXRlIHdpbGwgaGF2ZS5cclxuICAgKiBAcGFyYW0ge3RpbWVTY2FsZX0gW29wdGlvbnMudGltZVNjYWxlPTFdIC0gRmFjdG9yIHRvIHNjYWxlIHRoZSBwbGF5YmFjayBzcGVlZCBvZiB0aGVcclxuICAgKiBhbmltYXRpb24uXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLmxvb3BDb3VudD1JbmZpbml0eV0gLSBOdW1iZXIgb2YgdGltZXMgdGhlIGFuaW1hdGlvbiBzaG91bGRcclxuICAgKiByZXBlYXQgYmVmb3JlIGZpbmlzaGluZy5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuYmxlbmRNb2RlPUxheWVyQmxlbmRNb2Rlc1tEZWZhdWx0TGF5ZXJCbGVuZE1vZGVdXSAtIFR5cGUgb2ZcclxuICAgKiBibGVuZGluZyB0aGUgYW5pbWF0aW9uIHNob3VsZCB1c2UuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7Y29yZS9TaW5nbGVTdGF0ZX1cclxuICAgKi9cclxuICBfY3JlYXRlU2luZ2xlU3RhdGUob3B0aW9ucykge1xyXG4gICAgcmV0dXJuIG5ldyBTaW5nbGVTdGF0ZShvcHRpb25zKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiBhIG5ldyBpbnN0YW5jZSBvZiBhIEZyZWVCbGVuZFN0YXRlLlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gT3B0aW9ucyB0byBwYXNzIHRvIHRoZSBGcmVlQmxlbmRTdGF0ZSBjb25zdHJ1Y3Rvci5cclxuICAgKiBAcGFyYW0ge3N0cmluZz19IG9wdGlvbnMubmFtZSAtIE5hbWUgZm9yIHRoZSBhbmltYXRpb24gc3RhdGUuIE5hbWVzIG11c3QgYmVcclxuICAgKiB1bmlxdWUgZm9yIHRoZSBsYXllciB0aGUgc3RhdGUgaXMgYXBwbGllZCB0by5cclxuICAgKiBAcGFyYW0ge3dlaWdodH0gW29wdGlvbnMud2VpZ2h0PTBdIC0gVGhlIDAtMSBhbW91bnQgb2YgaW5mbHVlbmNlIHRoZSBzdGF0ZSB3aWxsIGhhdmUuXHJcbiAgICogQHBhcmFtIHt0aW1lU2NhbGV9IFtvcHRpb25zLnRpbWVTY2FsZT0xXSAtIEZhY3RvciB0byBzY2FsZSB0aGUgcGxheWJhY2sgc3BlZWQgb2YgdGhlXHJcbiAgICogYW5pbWF0aW9uLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5sb29wQ291bnQ9SW5maW5pdHldIC0gTnVtYmVyIG9mIHRpbWVzIHRoZSBhbmltYXRpb24gc2hvdWxkXHJcbiAgICogcmVwZWF0IGJlZm9yZSBmaW5pc2hpbmcuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmJsZW5kTW9kZT1MYXllckJsZW5kTW9kZXNbRGVmYXVsdExheWVyQmxlbmRNb2RlXV0gLSBUeXBlIG9mXHJcbiAgICogYmxlbmRpbmcgdGhlIGFuaW1hdGlvbiBzaG91bGQgdXNlLlxyXG4gICAqIEBwYXJhbSB7QXJyYXkuPE9iamVjdD59IFtvcHRpb25zLmJsZW5kU3RhdGVPcHRpb25zXSAtIEFycmF5IG9mIG9wdGlvbnMgdXNlZCB0byBjcmVhdGUgdGhlXHJcbiAgICogYmxlbmQgc3RhdGVzIGZvciB0aGlzIGNvbnRhaW5lci5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtGcmVlQmxlbmRTdGF0ZX1cclxuICAgKi9cclxuICBfY3JlYXRlRnJlZUJsZW5kU3RhdGUob3B0aW9ucykge1xyXG4gICAgY29uc3Qge2JsZW5kU3RhdGVPcHRpb25zID0gW119ID0gb3B0aW9ucztcclxuXHJcbiAgICBjb25zdCBibGVuZFN0YXRlcyA9IFtdO1xyXG4gICAgYmxlbmRTdGF0ZU9wdGlvbnMuZm9yRWFjaChibGVuZE9wdGlvbnMgPT4ge1xyXG4gICAgICBibGVuZFN0YXRlcy5wdXNoKFxyXG4gICAgICAgIHRoaXMuX2NyZWF0ZVNpbmdsZVN0YXRlKHsuLi5ibGVuZE9wdGlvbnMsIGJsZW5kTW9kZTogb3B0aW9ucy5ibGVuZE1vZGV9KVxyXG4gICAgICApO1xyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIG5ldyBGcmVlQmxlbmRTdGF0ZShvcHRpb25zLCBibGVuZFN0YXRlcyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gYSBuZXcgaW5zdGFuY2Ugb2YgYSBRdWV1ZVN0YXRlLlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gT3B0aW9ucyB0byBwYXNzIHRvIHRoZSBRdWV1ZVN0YXRlIGNvbnN0cnVjdG9yLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nPX0gb3B0aW9ucy5uYW1lIC0gTmFtZSBmb3IgdGhlIGFuaW1hdGlvbiBzdGF0ZS4gTmFtZXMgbXVzdCBiZVxyXG4gICAqIHVuaXF1ZSBmb3IgdGhlIGxheWVyIHRoZSBzdGF0ZSBpcyBhcHBsaWVkIHRvLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy53ZWlnaHQ9MF0gLSBUaGUgMC0xIGFtb3VudCBvZiBpbmZsdWVuY2UgdGhlIHN0YXRlIHdpbGwgaGF2ZS5cclxuICAgKiBAcGFyYW0ge251bWJlcj19IG9wdGlvbnMudHJhbnNpdGlvblRpbWUgLSBUaGUgYW1vdW50IG9mIHRpbWUgaXQgdGFrZXMgdG8gdHJhbnNpdGlvblxyXG4gICAqIGJldHdlZW4gcXVldWVkIHN0YXRlcy5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuYmxlbmRNb2RlPUxheWVyQmxlbmRNb2Rlc1tEZWZhdWx0TGF5ZXJCbGVuZE1vZGVdXSAtIFR5cGUgb2ZcclxuICAgKiBibGVuZGluZyB0aGUgYW5pbWF0aW9uIHNob3VsZCB1c2UuXHJcbiAgICogQHBhcmFtIHtBcnJheS48T2JqZWN0Pn0gW29wdGlvbnMucXVldWVPcHRpb25zXSAtIEFycmF5IG9mIG9wdGlvbnMgdXNlZCB0byBjcmVhdGUgdGhlXHJcbiAgICogcXVldWUgc3RhdGVzIGZvciB0aGlzIGNvbnRhaW5lci5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtRdWV1ZVN0YXRlfVxyXG4gICAqL1xyXG4gIF9jcmVhdGVRdWV1ZVN0YXRlKG9wdGlvbnMpIHtcclxuICAgIGNvbnN0IHtxdWV1ZU9wdGlvbnMgPSBbXX0gPSBvcHRpb25zO1xyXG5cclxuICAgIGNvbnN0IHF1ZXVlU3RhdGVzID0gcXVldWVPcHRpb25zLm1hcChxdWV1ZU9wdGlvbiA9PlxyXG4gICAgICB0aGlzLl9jcmVhdGVTaW5nbGVTdGF0ZSh7XHJcbiAgICAgICAgdHJhbnNpdGlvblRpbWU6IG9wdGlvbnMudHJhbnNpdGlvblRpbWUsXHJcbiAgICAgICAgLi4ucXVldWVPcHRpb24sXHJcbiAgICAgICAgYmxlbmRNb2RlOiBvcHRpb25zLmJsZW5kTW9kZSxcclxuICAgICAgfSlcclxuICAgICk7XHJcblxyXG4gICAgcmV0dXJuIG5ldyBRdWV1ZVN0YXRlKG9wdGlvbnMsIHF1ZXVlU3RhdGVzKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiBhIG5ldyBpbnN0YW5jZSBvZiBhIEJsZW5kMWRTdGF0ZS5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gcGFzcyB0byB0aGUgQmxlbmQxZFN0YXRlIGNvbnN0cnVjdG9yLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nPX0gb3B0aW9ucy5uYW1lIC0gTmFtZSBmb3IgdGhlIGFuaW1hdGlvbiBzdGF0ZS4gTmFtZXMgbXVzdCBiZVxyXG4gICAqIHVuaXF1ZSBmb3IgdGhlIGxheWVyIHRoZSBzdGF0ZSBpcyBhcHBsaWVkIHRvLlxyXG4gICAqIEBwYXJhbSB7d2VpZ2h0fSBbb3B0aW9ucy53ZWlnaHQ9MF0gLSBUaGUgMC0xIGFtb3VudCBvZiBpbmZsdWVuY2UgdGhlIHN0YXRlIHdpbGwgaGF2ZS5cclxuICAgKiBAcGFyYW0ge3RpbWVTY2FsZX0gW29wdGlvbnMudGltZVNjYWxlPTFdIC0gRmFjdG9yIHRvIHNjYWxlIHRoZSBwbGF5YmFjayBzcGVlZCBvZiB0aGVcclxuICAgKiBhbmltYXRpb24uXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLmxvb3BDb3VudD1JbmZpbml0eV0gLSBOdW1iZXIgb2YgdGltZXMgdGhlIGFuaW1hdGlvbiBzaG91bGRcclxuICAgKiByZXBlYXQgYmVmb3JlIGZpbmlzaGluZy5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuYmxlbmRNb2RlPUxheWVyQmxlbmRNb2Rlc1tEZWZhdWx0TGF5ZXJCbGVuZE1vZGVdXSAtIFR5cGUgb2ZcclxuICAgKiBibGVuZGluZyB0aGUgYW5pbWF0aW9uIHNob3VsZCB1c2UuXHJcbiAgICogQHBhcmFtIHtBcnJheS48T2JqZWN0Pn0gW29wdGlvbnMuYmxlbmRTdGF0ZU9wdGlvbnNdIC0gQXJyYXkgb2Ygb3B0aW9ucyB1c2VkIHRvIGNyZWF0ZSB0aGVcclxuICAgKiBibGVuZCBzdGF0ZXMgZm9yIHRoaXMgY29udGFpbmVyLlxyXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IFtvcHRpb25zLmJsZW5kVGhyZXNob2xkc10gLSBBcnJheSBvZiBudW1iZXJzIHVzZWQgdG8gc2V0IHRoZVxyXG4gICAqIHRocmVzaG9sZHMgZm9yIGVhY2ggYmxlbmQgc3RhdGUgaW4gdGhpcyBjb250YWluZXIuXHJcbiAgICogQHBhcmFtIHtBcnJheS48Ym9vbGVhbj59IFtvcHRpb25zLmJsZW5kTWF0Y2hQaGFzZXM9W11dIC0gT3B0aW9uYWwgYXJyYXkgb2YgYm9vbGVhbnMgdXNlZCB0b1xyXG4gICAqIHNldCB3aGV0aGVyIG9yIG5vdCBlYWNoIGJsZW5kIHN0YXRlIGluIHRoaXMgY29udGFpbmVyIHdpbGwgbWF0Y2ggcGhhc2VzLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0JsZW5kMWRTdGF0ZX1cclxuICAgKi9cclxuICBfY3JlYXRlQmxlbmQxZFN0YXRlKG9wdGlvbnMpIHtcclxuICAgIGNvbnN0IHtibGVuZFN0YXRlT3B0aW9ucyA9IFtdfSA9IG9wdGlvbnM7XHJcbiAgICBjb25zdCB7YmxlbmRUaHJlc2hvbGRzID0gW119ID0gb3B0aW9ucztcclxuICAgIGNvbnN0IHtibGVuZE1hdGNoUGhhc2VzID0gW119ID0gb3B0aW9ucztcclxuXHJcbiAgICBjb25zdCBibGVuZFN0YXRlcyA9IFtdO1xyXG4gICAgYmxlbmRTdGF0ZU9wdGlvbnMuZm9yRWFjaChibGVuZE9wdGlvbnMgPT4ge1xyXG4gICAgICBibGVuZFN0YXRlcy5wdXNoKFxyXG4gICAgICAgIHRoaXMuX2NyZWF0ZVNpbmdsZVN0YXRlKHsuLi5ibGVuZE9wdGlvbnMsIGJsZW5kTW9kZTogb3B0aW9ucy5ibGVuZE1vZGV9KVxyXG4gICAgICApO1xyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIG5ldyBCbGVuZDFkU3RhdGUoXHJcbiAgICAgIG9wdGlvbnMsXHJcbiAgICAgIGJsZW5kU3RhdGVzLFxyXG4gICAgICBibGVuZFRocmVzaG9sZHMsXHJcbiAgICAgIGJsZW5kTWF0Y2hQaGFzZXNcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gYSBuZXcgaW5zdGFuY2Ugb2YgYSBCbGVuZDJkU3RhdGUuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBPcHRpb25zIHRvIHBhc3MgdG8gdGhlIEJsZW5kMWRTdGF0ZSBjb25zdHJ1Y3Rvci5cclxuICAgKiBAcGFyYW0ge3N0cmluZz19IG9wdGlvbnMubmFtZSAtIE5hbWUgZm9yIHRoZSBhbmltYXRpb24gc3RhdGUuIE5hbWVzIG11c3QgYmVcclxuICAgKiB1bmlxdWUgZm9yIHRoZSBsYXllciB0aGUgc3RhdGUgaXMgYXBwbGllZCB0by5cclxuICAgKiBAcGFyYW0ge3dlaWdodH0gW29wdGlvbnMud2VpZ2h0PTBdIC0gVGhlIDAtMSBhbW91bnQgb2YgaW5mbHVlbmNlIHRoZSBzdGF0ZSB3aWxsIGhhdmUuXHJcbiAgICogQHBhcmFtIHt0aW1lU2NhbGV9IFtvcHRpb25zLnRpbWVTY2FsZT0xXSAtIEZhY3RvciB0byBzY2FsZSB0aGUgcGxheWJhY2sgc3BlZWQgb2YgdGhlXHJcbiAgICogYW5pbWF0aW9uLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5sb29wQ291bnQ9SW5maW5pdHldIC0gTnVtYmVyIG9mIHRpbWVzIHRoZSBhbmltYXRpb24gc2hvdWxkXHJcbiAgICogcmVwZWF0IGJlZm9yZSBmaW5pc2hpbmcuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmJsZW5kTW9kZT1MYXllckJsZW5kTW9kZXNbRGVmYXVsdExheWVyQmxlbmRNb2RlXV0gLSBUeXBlIG9mXHJcbiAgICogYmxlbmRpbmcgdGhlIGFuaW1hdGlvbiBzaG91bGQgdXNlLlxyXG4gICAqIEBwYXJhbSB7QXJyYXkuPE9iamVjdD59IFtvcHRpb25zLmJsZW5kU3RhdGVPcHRpb25zXSAtIEFycmF5IG9mIG9wdGlvbnMgdXNlZCB0byBjcmVhdGUgdGhlXHJcbiAgICogYmxlbmQgc3RhdGVzIGZvciB0aGlzIGNvbnRhaW5lci5cclxuICAgKiBAcGFyYW0ge0FycmF5LjxBcnJheS48bnVtYmVyPj59IFtvcHRpb25zLmJsZW5kVGhyZXNob2xkc10gLSBBcnJheSBvZiBBcnJheSBvZiBudW1iZXJzIHVzZWQgdG8gc2V0IHRoZVxyXG4gICAqIHRocmVzaG9sZHMgZm9yIGVhY2ggYmxlbmQgc3RhdGUgaW4gdGhpcyBjb250YWluZXIuXHJcbiAgICogQHBhcmFtIHtBcnJheS48Ym9vbGVhbj59IFtvcHRpb25zLmJsZW5kTWF0Y2hQaGFzZXM9W11dIC0gT3B0aW9uYWwgYXJyYXkgb2YgYm9vbGVhbnMgdXNlZCB0b1xyXG4gICAqIHNldCB3aGV0aGVyIG9yIG5vdCBlYWNoIGJsZW5kIHN0YXRlIGluIHRoaXMgY29udGFpbmVyIHdpbGwgbWF0Y2ggcGhhc2VzLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0JsZW5kMWRTdGF0ZX1cclxuICAgKi9cclxuICBfY3JlYXRlQmxlbmQyZFN0YXRlKG9wdGlvbnMpIHtcclxuICAgIGNvbnN0IHtibGVuZFN0YXRlT3B0aW9ucyA9IFtdfSA9IG9wdGlvbnM7XHJcbiAgICBjb25zdCB7YmxlbmRUaHJlc2hvbGRzID0gW119ID0gb3B0aW9ucztcclxuICAgIGNvbnN0IHtibGVuZE1hdGNoUGhhc2VzID0gW119ID0gb3B0aW9ucztcclxuXHJcbiAgICBjb25zdCBibGVuZFN0YXRlcyA9IFtdO1xyXG4gICAgYmxlbmRTdGF0ZU9wdGlvbnMuZm9yRWFjaChibGVuZE9wdGlvbnMgPT4ge1xyXG4gICAgICBibGVuZFN0YXRlcy5wdXNoKFxyXG4gICAgICAgIHRoaXMuX2NyZWF0ZVNpbmdsZVN0YXRlKHsuLi5ibGVuZE9wdGlvbnMsIGJsZW5kTW9kZTogb3B0aW9ucy5ibGVuZE1vZGV9KVxyXG4gICAgICApO1xyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIG5ldyBCbGVuZDJkU3RhdGUoXHJcbiAgICAgIG9wdGlvbnMsXHJcbiAgICAgIGJsZW5kU3RhdGVzLFxyXG4gICAgICBibGVuZFRocmVzaG9sZHMsXHJcbiAgICAgIGJsZW5kTWF0Y2hQaGFzZXNcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gYSBuZXcgaW5zdGFuY2Ugb2YgYSBSYW5kb21BbmltYXRpb25TdGF0ZS5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gcGFzcyB0byB0aGUgUmFuZG9tQW5pbWF0aW9uU3RhdGUgY29uc3RydWN0b3IuXHJcbiAgICogQHBhcmFtIHtzdHJpbmc9fSBvcHRpb25zLm5hbWUgLSBOYW1lIGZvciB0aGUgYW5pbWF0aW9uIHN0YXRlLiBOYW1lcyBtdXN0IGJlXHJcbiAgICogdW5pcXVlIGZvciB0aGUgbGF5ZXIgdGhlIHN0YXRlIGlzIGFwcGxpZWQgdG8uXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLnBsYXlJbnRlcnZhbD0zXSAtIFRoZSBiYXNlIGFuaW1hdGlvbiBwbGF5YmFjayBpbnRlcnZhbC5cclxuICAgKiBAcGFyYW0ge0FycmF5LjxPYmplY3Q+fSBbb3B0aW9ucy5zdWJTdGF0ZU9wdGlvbnNdIC0gQXJyYXkgb2Ygb3B0aW9ucyB1c2VkIHRvIGNyZWF0ZSB0aGVcclxuICAgKiBzdWIgc3RhdGVzIGZvciB0aGlzIGNvbnRhaW5lci5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtSYW5kb21BbmltYXRpb25TdGF0ZX1cclxuICAgKi9cclxuICBfY3JlYXRlUmFuZG9tQW5pbWF0aW9uU3RhdGUob3B0aW9ucykge1xyXG4gICAgY29uc3Qge3N1YlN0YXRlT3B0aW9ucyA9IFtdfSA9IG9wdGlvbnM7XHJcblxyXG4gICAgY29uc3Qgc3ViU3RhdGVzID0gW107XHJcbiAgICBzdWJTdGF0ZU9wdGlvbnMuZm9yRWFjaChzdWJTdGF0ZU9wdGlvbnMgPT4ge1xyXG4gICAgICBzdWJTdGF0ZXMucHVzaChcclxuICAgICAgICB0aGlzLl9jcmVhdGVTaW5nbGVTdGF0ZSh7XHJcbiAgICAgICAgICAuLi5zdWJTdGF0ZU9wdGlvbnMsXHJcbiAgICAgICAgICBibGVuZE1vZGU6IG9wdGlvbnMuYmxlbmRNb2RlLFxyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gbmV3IFJhbmRvbUFuaW1hdGlvblN0YXRlKG9wdGlvbnMsIHN1YlN0YXRlcyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNYWtlIHN1cmUgdGhlIGxheWVyIHdpdGggdGhlIGdpdmVuIG5hbWUgZXhpc3RzIGFuZCByZXR1cm4gYSB1bmlxdWUgdmVyc2lvblxyXG4gICAqIG9mIHRoZSBhbmltYXRpb24gbmFtZSBzdXBwbGllZCBmb3IgdGhhdCBsYXllci5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGF5ZXJOYW1lIC0gTmFtZSBvZiB0aGUgbGF5ZXIgdG8gY2hlY2sgYWdhaW5zdC5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gYW5pbWF0aW9uTmFtZSAtIE5hbWUgb2YgdGhlIGFuaW1hdGlvbiB0byB2YWxpZGF0ZS5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IFZhbGlkYXRlZCBhbmltYXRpb24gbmFtZS5cclxuICAgKi9cclxuICBfdmFsaWRhdGVOZXdBbmltYXRpb24obGF5ZXJOYW1lLCBhbmltYXRpb25OYW1lKSB7XHJcbiAgICAvLyBNYWtlIHN1cmUgdGhlIGxheWVyTmFtZSBpcyB2YWxpZFxyXG4gICAgY29uc3QgbGF5ZXIgPSB0aGlzLl9sYXllck1hcFtsYXllck5hbWVdO1xyXG5cclxuICAgIGlmIChsYXllciA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgQ2Fubm90IGFkZCBhbmltYXRpb24gdG8gbGF5ZXIgJHtsYXllck5hbWV9IGZyb20gaG9zdCAke3RoaXMuX2hvc3QuaWR9LiBObyBsYXllciBleGlzdHMgd2l0aCB0aGlzIG5hbWUuYFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIE1ha2Ugc3VyZSB0aGUgYW5pbWF0aW9uTmFtZSBpcyB1bmlxdWVcclxuICAgIGNvbnN0IG5hbWUgPSBVdGlscy5nZXRVbmlxdWVOYW1lKGFuaW1hdGlvbk5hbWUsIGxheWVyLmdldFN0YXRlTmFtZXMoKSk7XHJcblxyXG4gICAgaWYgKG5hbWUgIT09IGFuaW1hdGlvbk5hbWUpIHtcclxuICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgIGBBbmltYXRpb24gbmFtZSAke2FuaW1hdGlvbk5hbWV9IGlzIG5vdCB1bmlxdWUgZm9yIGxheWVyICR7bGF5ZXIubmFtZX0uIEFuaW1hdGlvbiB3aWxsIGJlIHJlbmFtZWQgdG8gJHtuYW1lfS5gXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG5hbWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHdoZXRoZXIgb3Igbm90IGFsbCBhbmltYXRpb25zIGFyZSBwYXVzZWQuXHJcbiAgICpcclxuICAgKiBAcmVhZG9ubHlcclxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgKi9cclxuICBnZXQgcGF1c2VkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3BhdXNlZDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgYW4gYXJyYXkgb2YgbmFtZXMgb2YgYW5pbWF0aW9uIGxheWVycy5cclxuICAgKlxyXG4gICAqIEByZWFkb25seVxyXG4gICAqIEB0eXBlIHtBcnJheS48c3RyaW5nPn1cclxuICAgKi9cclxuICBnZXQgbGF5ZXJzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2xheWVycy5tYXAobGF5ZXIgPT4gbGF5ZXIubmFtZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGUgYW5kIHN0b3JlIGEgbmV3IGFuaW1hdGlvbiBsYXllci5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbbmFtZT0nTmV3TGF5ZXInXSAtIE5hbWUgZm9yIHRoZSBsYXllci5cclxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIC0gT3B0aW9ucyB0byBwYXNzIHRvIHtAbGluayBBbmltYXRpb25MYXllciNjb25zdHJ1Y3Rvcn1cclxuICAgKiBAcGFyYW0ge2luZGV4PX0gaW5kZXggLSBJbmRleCB0byBpbnNlcnQgdGhlIG5ldyBsYXllciBhdC4gSWYgbm9uZSBpcyBwcm92aWRlZFxyXG4gICAqIGl0IHdpbGwgYmUgYWRkZWQgdG8gdGhlIGVuZCBvZiB0aGUgc3RhY2suXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBJbmRleCBvZiB0aGUgbmV3IGxheWVyLlxyXG4gICAqL1xyXG4gIGFkZExheWVyKG5hbWUgPSAnTmV3TGF5ZXInLCBvcHRpb25zID0ge30sIGluZGV4KSB7XHJcbiAgICBjb25zdCBudW1MYXllcnMgPSB0aGlzLl9sYXllcnMubGVuZ3RoO1xyXG4gICAgbGV0IGxheWVySW5kZXggPSBpbmRleDtcclxuXHJcbiAgICAvLyBNYWtlIHN1cmUgdGhlIGdpdmVuIGluZGV4IGlzIHdpdGhpbiB0aGUgcmFuZ2Ugb2YgbGF5ZXJzXHJcbiAgICBpZiAoaW5kZXggPT09IHVuZGVmaW5lZCB8fCBpbmRleCA9PT0gLTEpIHtcclxuICAgICAgbGF5ZXJJbmRleCA9IHRoaXMuX2xheWVycy5sZW5ndGg7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBsYXllckluZGV4ID0gdGhpcy5fdmFsaWRhdGVJbmRleChpbmRleCwgZmFsc2UpO1xyXG5cclxuICAgICAgaWYgKGxheWVySW5kZXggPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIC8vIEluc2VydCBhdCB0aGUgYmVnaW5uaW5nIGlmIHRoZSB1c2VyIHBhc3NlZCBpbiBhIG5lZ2F0aXZlIGluZGV4XHJcbiAgICAgICAgaWYgKGluZGV4IDwgMCkge1xyXG4gICAgICAgICAgbGF5ZXJJbmRleCA9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIE90aGVyd2lzZSBhcHBlbmQgdG8gdGhlIGVuZFxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgbGF5ZXJJbmRleCA9IHRoaXMuX2xheWVycy5sZW5ndGg7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zb2xlLndhcm4oXHJcbiAgICAgICAgICBgSW5kZXggJHtpbmRleH0gaXMgaW52YWxpZCBmb3IgaG9zdCAke3RoaXMuX2hvc3QuaWR9LiBOZXcgbGF5ZXIgd2lsbCBiZSBhZGRlZCBhdCB0aGUgY2xvc2VzdCB2YWxpZCBpbmRleDogJHtsYXllckluZGV4fS5gXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIE1ha2Ugc3VyZSB0aGUgbGF5ZXIgbmFtZSBpcyB1bmlxdWVcclxuICAgIGNvbnN0IGxheWVyTmFtZSA9IFV0aWxzLmdldFVuaXF1ZU5hbWUobmFtZSwgT2JqZWN0LmtleXModGhpcy5fbGF5ZXJNYXApKTtcclxuXHJcbiAgICBpZiAobmFtZSAhPT0gbGF5ZXJOYW1lKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICBgTGF5ZXIgbmFtZSAke25hbWV9IGlzIG5vdCB1bmlxdWUuIE5ldyBsYXllciB3aWxsIGJlIGFkZGVkIHdpdGggdGhlIG5hbWUgJHtsYXllck5hbWV9LmBcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBsYXllciA9IG5ldyBBbmltYXRpb25MYXllcih7Li4ub3B0aW9ucywgbmFtZTogbGF5ZXJOYW1lfSk7XHJcbiAgICB0aGlzLl9sYXllck1hcFtsYXllck5hbWVdID0gbGF5ZXI7XHJcblxyXG4gICAgaWYgKGxheWVySW5kZXggPT09IG51bUxheWVycykge1xyXG4gICAgICB0aGlzLl9sYXllcnMucHVzaChsYXllcik7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9sYXllcnMuc3BsaWNlKGxheWVySW5kZXgsIDAsIGxheWVyKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBOb3RpZnkgdGhhdCBhIGxheWVyIGhhcyBiZWVuIGFkZGVkIHRvIHRoZSBmZWF0dXJlXHJcbiAgICBjb25zdCBldmVudERhdGEgPSB7bmFtZTogbGF5ZXJOYW1lLCBpbmRleDogbGF5ZXJJbmRleH07XHJcbiAgICB0aGlzLmVtaXQodGhpcy5jb25zdHJ1Y3Rvci5FVkVOVFMuYWRkTGF5ZXIsIGV2ZW50RGF0YSk7XHJcblxyXG4gICAgcmV0dXJuIGV2ZW50RGF0YTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlbW92ZSBhbiBhbmltYXRpb24gbGF5ZXIgZnJvbSB0aGUgc3RhY2suIEFuaW1hdGlvbnMgb24gdGhpcyBsYXllciB3aWxsIG5vXHJcbiAgICogbG9uZ2VyIGJlIGV2YWx1YXRlZC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gTmFtZSBmb3IgdGhlIGxheWVyIHRvIHJlbW92ZS5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBXaGV0aGVyIG9yIG5vdCByZW1vdmFsIHdhcyBzdWNjZXNzZnVsLlxyXG4gICAqL1xyXG4gIHJlbW92ZUxheWVyKG5hbWUpIHtcclxuICAgIGNvbnN0IGxheWVyID0gdGhpcy5fbGF5ZXJNYXBbbmFtZV07XHJcblxyXG4gICAgaWYgKGxheWVyID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgIGBEaWQgbm90IHJlbW92ZSBsYXllciAke25hbWV9IGZyb20gaG9zdCAke3RoaXMuX2hvc3QuaWR9LiBObyBsYXllciBleGlzdHMgd2l0aCB0aGlzIG5hbWUuYFxyXG4gICAgICApO1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgbGF5ZXIuZGlzY2FyZCgpO1xyXG5cclxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fbGF5ZXJzLmluZGV4T2YobGF5ZXIpO1xyXG4gICAgdGhpcy5fbGF5ZXJzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICBkZWxldGUgdGhpcy5fbGF5ZXJNYXBbbmFtZV07XHJcblxyXG4gICAgLy8gTm90aWZ5IHRoYXQgYSBsYXllciBoYXMgYmVlbiByZW1vdmVkIGZyb20gdGhlIGZlYXR1cmVcclxuICAgIHRoaXMuZW1pdCh0aGlzLmNvbnN0cnVjdG9yLkVWRU5UUy5yZW1vdmVMYXllciwge25hbWUsIGluZGV4fSk7XHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZS1vcmRlciB0aGUgbGF5ZXIgc3RhY2sgc28gdGhhdCB0aGUgbGF5ZXIgd2l0aCB0aGUgZ2l2ZW4gbmFtZSBpcyBwb3NpdGlvbmVkXHJcbiAgICogYXQgdGhlIGdpdmVuIGluZGV4LlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBOYW1lIG9mIHRoZSBsYXllciB0byBtb3ZlLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleCAtIE5ldyBpbmRleCB0byBwb3NpdGlvbiB0aGUgbGF5ZXIgYXQuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBUaGUgbmV3IGluZGV4IG9mIHRoZSBsYXllclxyXG4gICAqL1xyXG4gIG1vdmVMYXllcihuYW1lLCBpbmRleCkge1xyXG4gICAgLy8gTWFrZSBzdXJlIHRoZSBuYW1lIGlzIHZhbGlkXHJcbiAgICBjb25zdCBsYXllciA9IHRoaXMuX2xheWVyTWFwW25hbWVdO1xyXG5cclxuICAgIGlmIChsYXllciA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgQ2Fubm90IG1vdmUgbGF5ZXIgJHtuYW1lfSBmcm9tIGhvc3QgJHt0aGlzLl9ob3N0LmlkfS4gTm8gbGF5ZXIgZXhpc3RzIHdpdGggdGhpcyBuYW1lLmBcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBNYWtlIHN1cmUgdGhlIGluZGV4IGZhbGxzIGluIHRoZSByYW5nZSBvZiBleGlzdGluZyBsYXllcnNcclxuICAgIGNvbnN0IGxheWVySW5kZXggPSB0aGlzLl92YWxpZGF0ZUluZGV4KGluZGV4LCB0cnVlKTtcclxuICAgIGNvbnN0IGxhc3RJbmRleCA9IHRoaXMuX2xheWVycy5sZW5ndGggLSAxO1xyXG5cclxuICAgIGlmIChsYXllckluZGV4ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgIGBDYW5ub3QgbW92ZSBsYXllciAke25hbWV9IGZyb20gaG9zdCAke3RoaXMuX2hvc3QuaWR9IHRvIGluZGV4ICR7aW5kZXh9LiBJbmRleCBtdXN0IGJlIGluIHRoZSAwIC0gJHtsYXN0SW5kZXh9IHJhbmdlLmBcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBjdXJyZW50SW5kZXggPSB0aGlzLl9sYXllcnMuaW5kZXhPZihsYXllcik7XHJcbiAgICBpZiAoY3VycmVudEluZGV4ID09PSBsYXllckluZGV4KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBSZW1vdmUgZnJvbSB0aGUgY3VycmVudCBwb3NpdGlvblxyXG4gICAgdGhpcy5fbGF5ZXJzLnNwbGljZShjdXJyZW50SW5kZXgsIDEpO1xyXG5cclxuICAgIC8vIEluc2VydCBhdCB0aGUgbmV3IHBvc2l0aW9uXHJcbiAgICBpZiAobGF5ZXJJbmRleCA9PT0gbGFzdEluZGV4KSB7XHJcbiAgICAgIHRoaXMuX2xheWVycy5wdXNoKGxheWVyKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2xheWVycy5zcGxpY2UobGF5ZXJJbmRleCwgMCwgbGF5ZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBsYXllckluZGV4O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlIHRoZSBuYW1lIG9mIGEgbGF5ZXIuIE5hbWVzIG11c3QgYmUgdW5pcXVlLCBpZiB0aGUgbmV3IG5hbWUgaXMgbm90XHJcbiAgICogdW5pcXVlIGl0IHdpbGwgaGF2ZSB0cmFpbGluZyBudW1iZXJzIGFwcGVuZGVkIHVudGlsIGl0IGlzIHVuaXF1ZS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjdXJyZW50TmFtZSAtIEN1cnJlbnQgbmFtZSBvZiB0aGUgbGF5ZXIuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5ld05hbWUgLSBOZXcgbmFtZSB0byBzZXQgb24gdGhlIGxheWVyLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge3N0cmluZ30gVGhlIG5ldyBuYW1lIG9mIHRoZSBsYXllclxyXG4gICAqL1xyXG4gIHJlbmFtZUxheWVyKGN1cnJlbnROYW1lLCBuZXdOYW1lKSB7XHJcbiAgICAvLyBNYWtlIHN1cmUgdGhlIG5hbWUgaXMgdmFsaWRcclxuICAgIGNvbnN0IGxheWVyID0gdGhpcy5fbGF5ZXJNYXBbY3VycmVudE5hbWVdO1xyXG5cclxuICAgIGlmIChsYXllciA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgQ2Fubm90IHJlbmFtZSBsYXllciAke2N1cnJlbnROYW1lfSBmcm9tIGhvc3QgJHt0aGlzLl9ob3N0LmlkfS4gTm8gbGF5ZXIgZXhpc3RzIHdpdGggdGhpcyBuYW1lLmBcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBNYWtlIHN1cmUgdGhlIGxheWVyIG5hbWUgaXMgdW5pcXVlXHJcbiAgICBjb25zdCBuYW1lID0gVXRpbHMuZ2V0VW5pcXVlTmFtZShuZXdOYW1lLCBPYmplY3Qua2V5cyh0aGlzLl9sYXllck1hcCkpO1xyXG5cclxuICAgIGlmIChuYW1lICE9PSBuZXdOYW1lKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICBgTGF5ZXIgbmFtZSAke25ld05hbWV9IGlzIG5vdCB1bmlxdWUuIExheWVyIHdpbGwgYmUgcmVuYW1lZCB0byAke25hbWV9LmBcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBkZWxldGUgdGhpcy5fbGF5ZXJNYXBbY3VycmVudE5hbWVdO1xyXG4gICAgdGhpcy5fbGF5ZXJNYXBbbmFtZV0gPSBsYXllcjtcclxuICAgIGxheWVyLm5hbWUgPSBuYW1lO1xyXG5cclxuICAgIC8vIE5vdGlmeSB0aGF0IGEgbGF5ZXIgaGFzIGJlZW4gcmVuYW1lZCBvbiB0aGUgZmVhdHVyZVxyXG4gICAgdGhpcy5lbWl0KHRoaXMuY29uc3RydWN0b3IuRVZFTlRTLnJlbmFtZUxheWVyLCB7XHJcbiAgICAgIG9sZE5hbWU6IGN1cnJlbnROYW1lLFxyXG4gICAgICBuZXdOYW1lOiBuYW1lLFxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIG5hbWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gdGhlIHdlaWdodCBvZiBhbiBhbmltYXRpb24gbGF5ZXIuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRvIHJldHVybiB3ZWlnaHQgZnJvbS5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XHJcbiAgICovXHJcbiAgZ2V0TGF5ZXJXZWlnaHQobmFtZSkge1xyXG4gICAgLy8gTWFrZSBzdXJlIHRoZSBuYW1lIGlzIHZhbGlkXHJcbiAgICBjb25zdCBsYXllciA9IHRoaXMuX2xheWVyTWFwW25hbWVdO1xyXG5cclxuICAgIGlmIChsYXllciA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgQ2Fubm90IGdldCB3ZWlnaHQgb24gbGF5ZXIgJHtuYW1lfSBmcm9tIGhvc3QgJHt0aGlzLl9ob3N0LmlkfS4gTm8gbGF5ZXIgZXhpc3RzIHdpdGggdGhpcyBuYW1lLmBcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbGF5ZXIud2VpZ2h0O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlIHRoZSB3ZWlnaHQgb2YgYW4gYW5pbWF0aW9uIGxheWVyLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgbGF5ZXIgdG8gdXBkYXRlLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB3ZWlnaHQgLSBUaGUgd2VpZ2h0IHZhbHVlIHRvIHNldCBvbiB0aGUgbGF5ZXIuIFRoaXMgbnVtYmVyXHJcbiAgICogc2hvdWxkIGJlIGluIHRoZSAwLTEgcmFuZ2UuXHJcbiAgICogQHBhcmFtIHtudW1iZXI9fSBzZWNvbmRzIC0gVGhlIG51bWJlciBvZiBzZWNvbmRzIGl0IHNob3VsZCB0YWtlIHRvIHJlYWNoIHRoZVxyXG4gICAqIG5ldyB3ZWlnaHQuIERlZmF1bHQgaXMgemVybyBhbmQgd2lsbCBzZXQgaW1tZWRpYXRlbHkuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IGVhc2luZ0ZuIC0gVGhlIGVhc2luZyBmdW5jdGlvbiB0byB1c2Ugd2hpbGUgaW50ZXJwb2xhdGluZ1xyXG4gICAqIHRoZSB3ZWlnaHQuIERlZmF1bHQgaXMgRWFzaW5nLkxpbmVhci5Jbk91dC5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtEZWZlcnJlZH0gQSBwcm9taXNlIHRoYXQgd2lsbCByZXNvbHZlIG9uY2UgdGhlIGxheWVyJ3Mgd2VpZ2h0IHJlYWNoZXNcclxuICAgKiB0aGUgdGFyZ2V0IHZhbHVlLlxyXG4gICAqL1xyXG4gIHNldExheWVyV2VpZ2h0KG5hbWUsIHdlaWdodCwgc2Vjb25kcywgZWFzaW5nRm4pIHtcclxuICAgIC8vIE1ha2Ugc3VyZSB0aGUgbmFtZSBpcyB2YWxpZFxyXG4gICAgY29uc3QgbGF5ZXIgPSB0aGlzLl9sYXllck1hcFtuYW1lXTtcclxuXHJcbiAgICBpZiAobGF5ZXIgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBjb25zdCBlID0gYENhbm5vdCBzZXQgd2VpZ2h0IG9uIGxheWVyICR7bmFtZX0gZnJvbSBob3N0ICR7dGhpcy5faG9zdC5pZH0uIE5vIGxheWVyIGV4aXN0cyB3aXRoIHRoaXMgbmFtZS5gO1xyXG4gICAgICByZXR1cm4gRGVmZXJyZWQucmVqZWN0KGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBsYXllci5zZXRXZWlnaHQod2VpZ2h0LCBzZWNvbmRzLCBlYXNpbmdGbik7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSBuYW1lcyBvZiBibGVuZCBzdGF0ZXMgaW4gYW4gYW5pbWF0aW9uIGluIGEgbGF5ZXIuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGF5ZXJOYW1lIC0gTmFtZSBvZiB0aGUgbGF5ZXIgY29udGFpbmluZyB0aGUgYW5pbWF0aW9uIGNvbnRhaW5pbmdcclxuICAgKiB0aGUgYmxlbmQgc3RhdGUgdG8gdXBkYXRlLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhbmltYXRpb25OYW1lIC0gTmFtZSBvZiB0aGUgYW5pbWF0aW9uIGNvbnRhaW5pbmcgdGhlIGJsZW5kIHN0YXRlXHJcbiAgICogdG8gdXBkYXRlLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0FycmF5LjxzdHJpbmc+fSAtIE5hbWVzIG9mIGJsZW5kIHN0YXRlcy5cclxuICAgKi9cclxuICBnZXRBbmltYXRpb25CbGVuZE5hbWVzKGxheWVyTmFtZSwgYW5pbWF0aW9uTmFtZSkge1xyXG4gICAgY29uc3QgbGF5ZXIgPSB0aGlzLl9sYXllck1hcFtsYXllck5hbWVdO1xyXG5cclxuICAgIGlmIChsYXllciA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgQ2Fubm90IGdldCBibGVuZCBuYW1lcyBvbiBsYXllciAke2xheWVyTmFtZX0gZnJvbSBob3N0ICR7dGhpcy5faG9zdC5pZH0uIE5vIGxheWVyIGV4aXN0cyB3aXRoIHRoaXMgbmFtZS5gXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGxheWVyLmdldEFuaW1hdGlvbkJsZW5kTmFtZXMoYW5pbWF0aW9uTmFtZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGUgdGhlIHdlaWdodCBmb3IgYSBibGVuZCBzdGF0ZSBpbiBhbiBhbmltYXRpb24gaW4gYSBsYXllci5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllck5hbWUgLSBOYW1lIG9mIHRoZSBsYXllciBjb250YWluaW5nIHRoZSBhbmltYXRpb24gY29udGFpbmluZ1xyXG4gICAqIHRoZSBibGVuZCBzdGF0ZSB0byB1cGRhdGUuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFuaW1hdGlvbk5hbWUgLSBOYW1lIG9mIHRoZSBhbmltYXRpb24gY29udGFpbmluZyB0aGUgYmxlbmQgc3RhdGVcclxuICAgKiB0byB1cGRhdGUuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGJsZW5kTmFtZSAtIE5hbWUgb2YgdGhlIGJsZW5kIHN0YXRlIHRvIHVwZGF0ZS5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gd2VpZ2h0IC0gV2VpZ2h0IHZhbHVlIHRvIHNldCBvbiB0aGUgYW5pbWF0aW9uLiBUaGlzIG51bWJlciBzaG91ZGxkIGJlXHJcbiAgICogaW4gdGhlIDAtMSByYW5nZS5cclxuICAgKiBAcGFyYW0ge251bWJlcj19IHNlY29uZHMgLSBOdW1iZXIgb2Ygc2Vjb25kcyBpdCBzaG91bGQgdGFrZSB0byByZWFjaCB0aGUgbmV3IHdlaWdodC5cclxuICAgKiBEZWZhdWx0IGlzIHplcm8gYW5kIHdpbGwgc2V0IGltbWVkaWF0ZWx5LlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBlYXNpbmdGbiAtIEVhc2luZyBmdW5jdGlvbiB0byB1c2Ugd2hpbGUgaW50ZXJwb2xhdGluZyB0aGUgbmV3XHJcbiAgICogd2VpZ2h0LiBEZWZhdWx0IGlzIEVhc2luZy5MaW5lYXIuSW5PdXQuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7RGVmZXJyZWR9IC0gUHJvbWlzZSB0aGF0IHdpbGwgcmVzb2x2ZSBvbmNlIHRoZSBhbmltYXRpb24ncyB3ZWlnaHQgcmVhY2hlc1xyXG4gICAqIHRoZSB0YXJnZXQgdmFsdWUuXHJcbiAgICovXHJcbiAgc2V0QW5pbWF0aW9uQmxlbmRXZWlnaHQoXHJcbiAgICBsYXllck5hbWUsXHJcbiAgICBhbmltYXRpb25OYW1lLFxyXG4gICAgYmxlbmROYW1lLFxyXG4gICAgd2VpZ2h0LFxyXG4gICAgc2Vjb25kcyxcclxuICAgIGVhc2luZ0ZuXHJcbiAgKSB7XHJcbiAgICBjb25zdCBsYXllciA9IHRoaXMuX2xheWVyTWFwW2xheWVyTmFtZV07XHJcblxyXG4gICAgaWYgKGxheWVyID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgY29uc3QgZSA9IGBDYW5ub3Qgc2V0IGJsZW5kIHdlaWdodCBvbiBsYXllciAke2xheWVyTmFtZX0gZnJvbSBob3N0ICR7dGhpcy5faG9zdC5pZH0uIE5vIGxheWVyIGV4aXN0cyB3aXRoIHRoaXMgbmFtZS5gO1xyXG4gICAgICByZXR1cm4gRGVmZXJyZWQucmVqZWN0KGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBsYXllci5zZXRBbmltYXRpb25CbGVuZFdlaWdodChcclxuICAgICAgYW5pbWF0aW9uTmFtZSxcclxuICAgICAgYmxlbmROYW1lLFxyXG4gICAgICB3ZWlnaHQsXHJcbiAgICAgIHNlY29uZHMsXHJcbiAgICAgIGVhc2luZ0ZuXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgd2VpZ2h0IGZvciBhIGJsZW5kIHN0YXRlIGluIGFuIGFuaW1hdGlvbiBpbiBhIGxheWVyLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVyTmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIGNvbnRhaW5pbmcgdGhlIGFuaW1hdGlvbiBjb250YWluaW5nXHJcbiAgICogdGhlIGJsZW5kIHN0YXRlIHRvIHVwZGF0ZS5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gYW5pbWF0aW9uTmFtZSAtIE5hbWUgb2YgdGhlIGFuaW1hdGlvbiBjb250YWluaW5nIHRoZSBibGVuZCBzdGF0ZVxyXG4gICAqIHRvIHVwZGF0ZS5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gYmxlbmROYW1lIC0gTmFtZSBvZiB0aGUgYmxlbmQgc3RhdGUgdG8gdXBkYXRlLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge251bWJlcn0gLSBXZWlnaHQgb2YgdGhlIGJsZW5kIHN0YXRlLlxyXG4gICAqL1xyXG4gIGdldEFuaW1hdGlvbkJsZW5kV2VpZ2h0KGxheWVyTmFtZSwgYW5pbWF0aW9uTmFtZSwgYmxlbmROYW1lKSB7XHJcbiAgICBjb25zdCBsYXllciA9IHRoaXMuX2xheWVyTWFwW2xheWVyTmFtZV07XHJcblxyXG4gICAgaWYgKGxheWVyID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgIGBDYW5ub3QgZ2V0IGJsZW5kIHdlaWdodCBvbiBsYXllciAke2xheWVyTmFtZX0gZnJvbSBob3N0ICR7dGhpcy5faG9zdC5pZH0uIE5vIGxheWVyIGV4aXN0cyB3aXRoIHRoaXMgbmFtZS5gXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGxheWVyLmdldEFuaW1hdGlvbkJsZW5kV2VpZ2h0KGFuaW1hdGlvbk5hbWUsIGJsZW5kTmFtZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQYXVzZSB3ZWlnaHQgaW50ZXJwb2xhdGlvbiBhbmltYXRpb24gb24gYSBsYXllciB3aXRoIHRoZSBnaXZlbiBuYW1lLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBOYW1lIG9mIHRoZSBsYXllciB0byBwYXVzZS5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtib29sZWFufSAtIFdoZXRoZXIgb3Igbm90IHRoZXJlIHdhcyBhbiBleGlzdGluZyBpbnRlcnBvbGF0aW9uIHRvIHBhdXNlLlxyXG4gICAqL1xyXG4gIHBhdXNlTGF5ZXJXZWlnaHQobmFtZSkge1xyXG4gICAgLy8gTWFrZSBzdXJlIHRoZSBuYW1lIGlzIHZhbGlkXHJcbiAgICBjb25zdCBsYXllciA9IHRoaXMuX2xheWVyTWFwW25hbWVdO1xyXG5cclxuICAgIGlmIChsYXllciA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgQ2Fubm90IHBhdXNlIHdlaWdodCBpbnRlcnBvbGF0aW9uIG9uIGxheWVyICR7bmFtZX0gZnJvbSBob3N0ICR7dGhpcy5faG9zdC5pZH0uIE5vIGxheWVyIGV4aXN0cyB3aXRoIHRoaXMgbmFtZS5gXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGxheWVyLnBhdXNlV2VpZ2h0KCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXN1bWUgd2VpZ2h0IGludGVycG9sYXRpb24gYW5pbWF0aW9uIG9uIGEgbGF5ZXIgd2l0aCB0aGUgZ2l2ZW4gbmFtZS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gTmFtZSBvZiB0aGUgbGF5ZXIgdG8gcmVzdW1lLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0RlZmVycmVkfSAtIFJlc29sdmVzIG9uY2UgdGhlIGxheWVyJ3Mgd2VpZ2h0IHJlYWNoZXMgaXRzIHRhcmdldCB2YWx1ZS5cclxuICAgKi9cclxuICByZXN1bWVMYXllcldlaWdodChuYW1lKSB7XHJcbiAgICAvLyBNYWtlIHN1cmUgdGhlIG5hbWUgaXMgdmFsaWRcclxuICAgIGNvbnN0IGxheWVyID0gdGhpcy5fbGF5ZXJNYXBbbmFtZV07XHJcblxyXG4gICAgaWYgKGxheWVyID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgY29uc3QgZSA9IGBDYW5ub3QgcmVzdW1lIHdlaWdodCBpbnRlcnBvbGF0aW9uIG9uIGxheWVyICR7bmFtZX0gZnJvbSBob3N0ICR7dGhpcy5faG9zdC5pZH0uIE5vIGxheWVyIGV4aXN0cyB3aXRoIHRoaXMgbmFtZS5gO1xyXG4gICAgICByZXR1cm4gRGVmZXJyZWQucmVqZWN0KGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBsYXllci5yZXN1bWVXZWlnaHQoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFBhdXNlIGN1cnJlbnQgYW5pbWF0aW9uIGFuZCB3ZWlnaHQgaW50ZXJwb2xhdGlvbiBhbmltYXRpb24gb24gYSBsYXllciB3aXRoXHJcbiAgICogdGhlIGdpdmVuIG5hbWUuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRvIHBhdXNlLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge2Jvb2xlYW59IC0gV2hldGhlciBvciBub3QgdGhlcmUgd2FzIGFuIGV4aXN0aW5nIGludGVycG9sYXRpb24gb3JcclxuICAgKiBjdXJyZW50IGFuaW1hdGlvbiB0byBwYXVzZS5cclxuICAgKi9cclxuICBwYXVzZUxheWVyKG5hbWUpIHtcclxuICAgIC8vIE1ha2Ugc3VyZSB0aGUgbmFtZSBpcyB2YWxpZFxyXG4gICAgY29uc3QgbGF5ZXIgPSB0aGlzLl9sYXllck1hcFtuYW1lXTtcclxuXHJcbiAgICBpZiAobGF5ZXIgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgYENhbm5vdCBwYXVzZSBsYXllciAke25hbWV9IGZyb20gaG9zdCAke3RoaXMuX2hvc3QuaWR9LiBObyBsYXllciBleGlzdHMgd2l0aCB0aGlzIG5hbWUuYFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBsYXllci5wYXVzZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVzdW1lIGN1cnJlbnQgYW5pbWF0aW9uIGFuZCB3ZWlnaHQgaW50ZXJwb2xhdGlvbiBhbmltYXRpb24gb24gYSBsYXllciB3aXRoXHJcbiAgICogdGhlIGdpdmVuIG5hbWUuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRvIHJlc3VtZS5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtEZWZlcnJlZH0gLSBSZXNvbHZlcyBvbmNlIHRoZSBsYXllcidzIHdlaWdodCByZWFjaGVzIGl0cyB0YXJnZXQgdmFsdWVcclxuICAgKiBhbmQgaXQncyBjdXJyZW50IGFuaW1hdGlvbiBmaW5pc2hlcyBwbGF5aW5nLlxyXG4gICAqL1xyXG4gIHJlc3VtZUxheWVyKG5hbWUpIHtcclxuICAgIC8vIE1ha2Ugc3VyZSB0aGUgbmFtZSBpcyB2YWxpZFxyXG4gICAgY29uc3QgbGF5ZXIgPSB0aGlzLl9sYXllck1hcFtuYW1lXTtcclxuXHJcbiAgICBpZiAobGF5ZXIgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBjb25zdCBlID0gYENhbm5vdCByZXN1bWUgbGF5ZXIgJHtuYW1lfSBmcm9tIGhvc3QgJHt0aGlzLl9ob3N0LmlkfS4gTm8gbGF5ZXIgZXhpc3RzIHdpdGggdGhpcyBuYW1lLmA7XHJcbiAgICAgIHJldHVybiBEZWZlcnJlZC5yZWplY3QoZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGxheWVyLnJlc3VtZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIHdoZXRoZXIgb3Igbm90IHRoZSBhbmltYXRpb24gbGF5ZXIgd2l0aCB0aGUgZ2l2ZW4gbmFtZSBpcyBjdXJyZW50bHlcclxuICAgKiB0cmFuc2l0aW9uaW5nIGJldHdlZW4gYW5pbWF0aW9ucy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllck5hbWUgLSBOYW1lIG9mIHRoZSBsYXllciB0byBjaGVjay5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gICAqL1xyXG4gIGdldFRyYW5zaXRpb25pbmcobGF5ZXJOYW1lKSB7XHJcbiAgICAvLyBNYWtlIHN1cmUgdGhlIGxheWVyTmFtZSBpcyB2YWxpZFxyXG4gICAgY29uc3QgbGF5ZXIgPSB0aGlzLl9sYXllck1hcFtsYXllck5hbWVdO1xyXG5cclxuICAgIGlmIChsYXllciA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgR2V0IHRyYW5zaXRpb25pbmcgb24gbGF5ZXIgJHtsYXllck5hbWV9IGZyb20gaG9zdCAke3RoaXMuX2hvc3QuaWR9LiBObyBsYXllciBleGlzdHMgd2l0aCB0aGlzIG5hbWUuYFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBsYXllci5pc1RyYW5zaXRpb25pbmc7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gYW4gYXJyYXkgb2YgdGhlIG5hbWVzIG9mIGFsbCBzdGF0ZXMgdGhlIGxheWVyIHdpdGggdGhlIGdpdmVuIG5hbWUgY29udHJvbHMuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGF5ZXJOYW1lIC0gTmFtZSBvZiB0aGUgbGF5ZXIgdG8gc2VhcmNoLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0FycmF5LjxzdHJpbmc+fVxyXG4gICAqL1xyXG4gIGdldEFuaW1hdGlvbnMobGF5ZXJOYW1lKSB7XHJcbiAgICAvLyBNYWtlIHN1cmUgdGhlIGxheWVyTmFtZSBpcyB2YWxpZFxyXG4gICAgY29uc3QgbGF5ZXIgPSB0aGlzLl9sYXllck1hcFtsYXllck5hbWVdO1xyXG5cclxuICAgIGlmIChsYXllciA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgR2V0IGFuaW1hdGlvbnMgb24gbGF5ZXIgJHtsYXllck5hbWV9IGZyb20gaG9zdCAke3RoaXMuX2hvc3QuaWR9LiBObyBsYXllciBleGlzdHMgd2l0aCB0aGlzIG5hbWUuYFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBsYXllci5nZXRTdGF0ZU5hbWVzKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gdGhlIG5hbWUgb2YgdGhlIHN0YXRlIGN1cnJlbnRseSBhY3RpdmUgb24gdGhlIGxheWVyIHdpdGggdGhlIGdpdmVuIG5hbWUuXHJcbiAgICogUmV0dXJuIG51bGwgaWYgdGhlcmUgaXMgbm8gY3VycmVudCBhbmltYXRpb24gZm9yIHRoZSBsYXllci5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllck5hbWUgLSBOYW1lIG9mIHRoZSBsYXllci5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHsoc3RyaW5nfG51bGwpfVxyXG4gICAqL1xyXG4gIGdldEN1cnJlbnRBbmltYXRpb24obGF5ZXJOYW1lKSB7XHJcbiAgICAvLyBNYWtlIHN1cmUgdGhlIGxheWVyTmFtZSBpcyB2YWxpZFxyXG4gICAgY29uc3QgbGF5ZXIgPSB0aGlzLl9sYXllck1hcFtsYXllck5hbWVdO1xyXG5cclxuICAgIGlmIChsYXllciA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgR2V0IGN1cnJlbnQgYW5pbWF0aW9uIG9uIGxheWVyICR7bGF5ZXJOYW1lfSBmcm9tIGhvc3QgJHt0aGlzLl9ob3N0LmlkfS4gTm8gbGF5ZXIgZXhpc3RzIHdpdGggdGhpcyBuYW1lLmBcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbGF5ZXIuY3VycmVudEFuaW1hdGlvbjtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiB3aGV0aGVyIG9yIG5vdCBhIGxheWVyIHdpdGggdGhlIGdpdmVuIG5hbWUgaXMgY3VycmVudGx5IHBsYXlpbmcgYW5cclxuICAgKiBhbmltYXRpb24gYW5kIHRoYXQgYW5pbWF0aW9uIGlzIHBhdXNlZC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllck5hbWUgLSBOYW1lIG9mIHRoZSBsYXllci5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gICAqL1xyXG4gIGdldFBhdXNlZChsYXllck5hbWUpIHtcclxuICAgIC8vIE1ha2Ugc3VyZSB0aGUgbGF5ZXJOYW1lIGlzIHZhbGlkXHJcbiAgICBjb25zdCBsYXllciA9IHRoaXMuX2xheWVyTWFwW2xheWVyTmFtZV07XHJcblxyXG4gICAgaWYgKGxheWVyID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgIGBHZXQgcGF1c2VkIG9uIGxheWVyICR7bGF5ZXJOYW1lfSBmcm9tIGhvc3QgJHt0aGlzLl9ob3N0LmlkfS4gTm8gbGF5ZXIgZXhpc3RzIHdpdGggdGhpcyBuYW1lLmBcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbGF5ZXIuY3VycmVudFN0YXRlICYmIGxheWVyLmN1cnJlbnRTdGF0ZS5wYXVzZWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gdGhlIHR5cGUgbmFtZSBvZiB0aGUgZ2l2ZW4gYW5pbWF0aW9uLiBAc2VlIEFuaW1hdGlvblR5cGVzLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVyTmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRoYXQgY29udGFpbnMgdGhlIGFuaW1hdGlvbi5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gYW5pbWF0aW9uTmFtZSAtIE5hbWUgb2YgdGhlIGFuaW1hdGlvbiB0byBjaGVjay5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XHJcbiAgICovXHJcbiAgZ2V0QW5pbWF0aW9uVHlwZShsYXllck5hbWUsIGFuaW1hdGlvbk5hbWUpIHtcclxuICAgIC8vIE1ha2Ugc3VyZSB0aGUgbGF5ZXJOYW1lIGlzIHZhbGlkXHJcbiAgICBjb25zdCBsYXllciA9IHRoaXMuX2xheWVyTWFwW2xheWVyTmFtZV07XHJcblxyXG4gICAgaWYgKGxheWVyID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgIGBHZXQgYW5pbWF0aW9uIHR5cGUgb24gbGF5ZXIgJHtsYXllck5hbWV9IGZyb20gaG9zdCAke3RoaXMuX2hvc3QuaWR9LiBObyBsYXllciBleGlzdHMgd2l0aCB0aGlzIG5hbWUuYFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHN0YXRlID0gbGF5ZXIuZ2V0U3RhdGUoYW5pbWF0aW9uTmFtZSk7XHJcblxyXG4gICAgaWYgKHN0YXRlID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgIGBHZXQgYW5pbWF0aW9uIHR5cGUgZm9yIGFuaW1hdGlvbiAke2FuaW1hdGlvbk5hbWV9IG9uIGxheWVyICR7bGF5ZXJOYW1lfSBmcm9tIGhvc3QgJHt0aGlzLl9ob3N0LmlkfS4gTm8gYW5pbWF0aW9uIGV4aXN0cyB3aXRoIHRoaXMgbmFtZS5gXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qge2NvbnN0cnVjdG9yfSA9IHN0YXRlO1xyXG5cclxuICAgIHJldHVybiBPYmplY3Qua2V5cyhBbmltYXRpb25UeXBlcykuZmluZChcclxuICAgICAgdHlwZU5hbWUgPT4gQW5pbWF0aW9uVHlwZXNbdHlwZU5hbWVdID09PSBjb25zdHJ1Y3RvclxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFkZCBhIG5ldyBhbmltYXRpb24gdG8gYW4gYW5pbWF0aW9uIGxheWVyLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVyTmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRvIGFkZCB0aGUgYW5pbWF0aW9uIHRvLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhbmltYXRpb25OYW1lIC0gTmFtZSB0byB1c2Ugd2hlbiBjYWxsaW5nIHRoZSBhbmltYXRpb24uXHJcbiAgICogQHBhcmFtIHtPYmplY3Q9fSBvcHRpb25zIC0gT3B0aW9ucyB0byBwYXNzIHRvIHRoZSBjb25zdHJ1Y3RvciBmb3IgdGhlIG5ld1xyXG4gICAqIFNpbmdsZVN0YXRlIGFuaW1hdGlvbi5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IC0gVGhlIG5hbWUgb2YgdGhlIGFuaW1hdGlvbiB0aGF0IHdhcyBhZGRlZFxyXG4gICAqL1xyXG4gIGFkZEFuaW1hdGlvbihcclxuICAgIGxheWVyTmFtZSxcclxuICAgIGFuaW1hdGlvbk5hbWUsXHJcbiAgICBhbmltYXRpb25UeXBlID0gQW5pbWF0aW9uVHlwZXMuc2luZ2xlLFxyXG4gICAgb3B0aW9ucyA9IHt9XHJcbiAgKSB7XHJcbiAgICBvcHRpb25zLm5hbWUgPSB0aGlzLl92YWxpZGF0ZU5ld0FuaW1hdGlvbihsYXllck5hbWUsIGFuaW1hdGlvbk5hbWUpO1xyXG5cclxuICAgIC8vIE1ha2Ugc3VyZSB0aGUgYW5pbWF0aW9uIHR5cGUgaXMgdmFsaWRcclxuICAgIGlmICghT2JqZWN0LnZhbHVlcyhBbmltYXRpb25UeXBlcykuaW5jbHVkZXMoYW5pbWF0aW9uVHlwZSkpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgIGBDYW5ub3QgYWRkIGFuaW1hdGlvbiAke2FuaW1hdGlvbk5hbWV9IHRvIGxheWVyICR7bGF5ZXJOYW1lfSBvbiBob3N0ICR7dGhpcy5faG9zdC5pZH0uIEludmFsaWQgYW5pbWF0aW9uIHR5cGUuYFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGxheWVyID0gdGhpcy5fbGF5ZXJNYXBbbGF5ZXJOYW1lXTtcclxuICAgIG9wdGlvbnMuYmxlbmRNb2RlID0gbGF5ZXIuYmxlbmRNb2RlO1xyXG4gICAgb3B0aW9ucy50cmFuc2l0aW9uVGltZSA9IGxheWVyLnRyYW5zaXRpb25UaW1lO1xyXG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzW2BfY3JlYXRlJHthbmltYXRpb25UeXBlLm5hbWV9YF0ob3B0aW9ucyk7XHJcblxyXG4gICAgY29uc3QgbmFtZSA9IGxheWVyLmFkZFN0YXRlKHN0YXRlKTtcclxuXHJcbiAgICAvLyBOb3RpZnkgdGhhdCBhbiBhbmltYXRpb24gaGFzIGJlZW4gYWRkZWQgdG8gdGhlIGZlYXR1cmVcclxuICAgIHRoaXMuZW1pdCh0aGlzLmNvbnN0cnVjdG9yLkVWRU5UUy5hZGRBbmltYXRpb24sIHtcclxuICAgICAgbGF5ZXJOYW1lLFxyXG4gICAgICBhbmltYXRpb25OYW1lOiBuYW1lLFxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIG5hbWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZW1vdmUgYW4gYW5pbWF0aW9uIGZyb20gYW4gYW5pbWF0aW9uIGxheWVyLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVyTmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRvIHJlbW92ZSB0aGUgYW5pbWF0aW9uIGZyb20uXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBOYW1lIG9mIHRoZSBhbmltYXRpb24gdG8gcmVtb3ZlLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAgICovXHJcbiAgcmVtb3ZlQW5pbWF0aW9uKGxheWVyTmFtZSwgYW5pbWF0aW9uTmFtZSkge1xyXG4gICAgLy8gTWFrZSBzdXJlIHRoZSBuYW1lIGlzIHZhbGlkXHJcbiAgICBjb25zdCBsYXllciA9IHRoaXMuX2xheWVyTWFwW2xheWVyTmFtZV07XHJcblxyXG4gICAgaWYgKGxheWVyID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgIGBDYW5ub3QgcmVtb3ZlIGFuaW1hdGlvbiBmcm9tIGxheWVyICR7bGF5ZXJOYW1lfSBmcm9tIGhvc3QgJHt0aGlzLl9ob3N0LmlkfS4gTm8gbGF5ZXIgZXhpc3RzIHdpdGggdGhpcyBuYW1lLmBcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCByZW1vdmVkID0gbGF5ZXIucmVtb3ZlU3RhdGUoYW5pbWF0aW9uTmFtZSk7XHJcblxyXG4gICAgLy8gTm90aWZ5IHRoYXQgYW4gYW5pbWF0aW9uIGhhcyBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgZmVhdHVyZVxyXG4gICAgaWYgKHJlbW92ZWQgPT09IHRydWUpIHtcclxuICAgICAgdGhpcy5lbWl0KHRoaXMuY29uc3RydWN0b3IuRVZFTlRTLnJlbW92ZUFuaW1hdGlvbiwge1xyXG4gICAgICAgIGxheWVyTmFtZSxcclxuICAgICAgICBhbmltYXRpb25OYW1lLFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcmVtb3ZlZDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZSB0aGUgbmFtZSBvZiBhbiBhbmltYXRpb24uIE5hbWVzIG11c3QgYmUgdW5pcXVlIG9uIGVhY2ggbGF5ZXIsIGlmIHRoZSBuZXdcclxuICAgKiBuYW1lIGlzIG5vdCB1bmlxdWUgaXQgd2lsbCBoYXZlIHRyYWlsaW5nIG51bWJlcnMgYXBwZW5kZWQgdW50aWwgaXQgaXMgdW5pcXVlLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVyTmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRoYXQgY29udGFpbnMgdGhlIGFuaW1hdGlvbiB0aGF0XHJcbiAgICogd2lsbCBiZSByZW5hbWVkLFxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjdXJyZW50QW5pbWF0aW9uTmFtZSAtIEN1cnJlbnQgbmFtZSBvZiB0aGUgYW5pbWF0aW9uLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuZXdBbmltYXRpb25OYW1lIC0gTmV3IG5hbWUgdG8gc2V0IG9uIHRoZSBhbmltYXRpb24uXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSAtIFRoZSBuZXcgbmFtZSBvZiB0aGUgYW5pbWF0aW9uXHJcbiAgICovXHJcbiAgcmVuYW1lQW5pbWF0aW9uKGxheWVyTmFtZSwgY3VycmVudEFuaW1hdGlvbk5hbWUsIG5ld0FuaW1hdGlvbk5hbWUpIHtcclxuICAgIGNvbnN0IGxheWVyID0gdGhpcy5fbGF5ZXJNYXBbbGF5ZXJOYW1lXTtcclxuXHJcbiAgICBpZiAobGF5ZXIgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgYENhbm5vdCByZW5hbWUgYW5pbWF0aW9uICR7Y3VycmVudEFuaW1hdGlvbk5hbWV9IG9uIGxheWVyICR7bGF5ZXJOYW1lfSBmb3IgaG9zdCAke3RoaXMuX2hvc3QuaWR9LiBObyBsYXllciBleGlzdHMgd2l0aCB0aGlzIG5hbWUuYFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IG5hbWUgPSBsYXllci5yZW5hbWVTdGF0ZShjdXJyZW50QW5pbWF0aW9uTmFtZSwgbmV3QW5pbWF0aW9uTmFtZSk7XHJcblxyXG4gICAgLy8gTm90aWZ5IHRoYXQgYW4gYW5pbWF0aW9uIGhhcyBiZWVuIHJlbmFtZWQgb24gdGhlIGZlYXR1cmVcclxuICAgIHRoaXMuZW1pdCh0aGlzLmNvbnN0cnVjdG9yLkVWRU5UUy5yZW5hbWVBbmltYXRpb24sIHtcclxuICAgICAgbGF5ZXJOYW1lLFxyXG4gICAgICBvbGROYW1lOiBjdXJyZW50QW5pbWF0aW9uTmFtZSxcclxuICAgICAgbmV3TmFtZTogbmFtZSxcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBuYW1lO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUGF1c2UgdGhlIGN1cnJlbnRseSBwbGF5aW5nIGFuaW1hdGlvbiBhbmQgcGxheSBhIG5ldyBhbmltYXRpb24gZnJvbSB0aGUgYmVnaW5uaW5nLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVyTmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRoYXQgY29udGFpbnMgdGhlIGFuaW1hdGlvbi5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gYW5pbWF0aW9uTmFtZSAtIE5hbWUgb2YgdGhlIGFuaW1hdGlvbiBzdGF0ZSB0byBwbGF5LlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyPX0gc2Vjb25kcyAtIFRoZSBudW1iZXIgb2Ygc2Vjb25kcyBpdCBzaG91bGQgdGFrZSB0byB0cmFuc2l0aW9uXHJcbiAgICogdG8gdGhlIG5ldyBhbmltYXRpb24uIERlZmF1bHQgaXMgemVybyBhbmQgd2lsbCBzZXQgaW1tZWRpYXRlbHkuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IGVhc2luZ0ZuIC0gVGhlIGVhc2luZyBmdW5jdGlvbiB0byB1c2Ugd2hpbGUgdHJhbnNpdGlvbmluZ1xyXG4gICAqIGJldHdlZW4gYW5pbWF0aW9ucy4gRGVmYXVsdCBpcyBFYXNpbmcuTGluZWFyLkluT3V0LlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0RlZmVycmVkfSAtIFJlc29sdmVzIG9uY2UgdGhlIGFuaW1hdGlvbiByZWFjaGVzIHRoZSBlbmQgb2YgaXRzXHJcbiAgICogdGltZWxpbmUuIExvb3BpbmcgYW5pbWF0aW9ucyBjYW4gb25seSByZXNvbHZlIGlmIHRoZXkgYXJlIGludGVycnVwdGVkIG9yXHJcbiAgICogbWFudWFsbHkgc3RvcHBlZC5cclxuICAgKi9cclxuICBwbGF5QW5pbWF0aW9uKGxheWVyTmFtZSwgYW5pbWF0aW9uTmFtZSwgc2Vjb25kcywgZWFzaW5nRm4pIHtcclxuICAgIGNvbnN0IGxheWVyID0gdGhpcy5fbGF5ZXJNYXBbbGF5ZXJOYW1lXTtcclxuXHJcbiAgICBpZiAobGF5ZXIgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBjb25zdCBlID0gYENhbm5vdCBwbGF5IGFuaW1hdGlvbiAke2FuaW1hdGlvbk5hbWV9IG9uIGxheWVyICR7bGF5ZXJOYW1lfSBmb3IgaG9zdCAke3RoaXMuX2hvc3QuaWR9LiBObyBsYXllciBleGlzdHMgd2l0aCB0aGlzIG5hbWUuYDtcclxuICAgICAgcmV0dXJuIERlZmVycmVkLnJlamVjdChlKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBOb3RpZnkgdGhhdCBhIG5ldyBhbmltYXRpb24gaGFzIGJlZ3VuXHJcbiAgICB0aGlzLmVtaXQodGhpcy5jb25zdHJ1Y3Rvci5FVkVOVFMucGxheUFuaW1hdGlvbiwge1xyXG4gICAgICBsYXllck5hbWUsXHJcbiAgICAgIGFuaW1hdGlvbk5hbWUsXHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gbGF5ZXIucGxheUFuaW1hdGlvbihcclxuICAgICAgYW5pbWF0aW9uTmFtZSxcclxuICAgICAgc2Vjb25kcyxcclxuICAgICAgZWFzaW5nRm4sXHJcbiAgICAgICgpID0+IHtcclxuICAgICAgICAvLyBOb3RpZnkgdGhhdCBhbiBhbmltYXRpb24gaGFzIHN0b3BwZWRcclxuICAgICAgICB0aGlzLmVtaXQodGhpcy5jb25zdHJ1Y3Rvci5FVkVOVFMuc3RvcEFuaW1hdGlvbiwge1xyXG4gICAgICAgICAgbGF5ZXJOYW1lLFxyXG4gICAgICAgICAgYW5pbWF0aW9uTmFtZSxcclxuICAgICAgICB9KTtcclxuICAgICAgfSxcclxuICAgICAgdW5kZWZpbmVkLFxyXG4gICAgICAoKSA9PiB7XHJcbiAgICAgICAgLy8gTm90aWZ5IHRoYXQgYW4gYW5pbWF0aW9uIGhhcyBiZWVuIGludGVycnVwdGVkXHJcbiAgICAgICAgdGhpcy5lbWl0KHRoaXMuY29uc3RydWN0b3IuRVZFTlRTLmludGVycnVwdEFuaW1hdGlvbiwge1xyXG4gICAgICAgICAgbGF5ZXJOYW1lLFxyXG4gICAgICAgICAgYW5pbWF0aW9uTmFtZSxcclxuICAgICAgICB9KTtcclxuICAgICAgfSxcclxuICAgICAgKHtuYW1lLCBjYW5BZHZhbmNlLCBpc1F1ZXVlRW5kfSkgPT4ge1xyXG4gICAgICAgIGlmIChsYXllci5jdXJyZW50QW5pbWF0aW9uID09PSBhbmltYXRpb25OYW1lKSB7XHJcbiAgICAgICAgICAvLyBOb3RpZnkgdGhhdCBhIG5ldyBhbmltYXRpb24gaGFzIGJlZ3VuXHJcbiAgICAgICAgICB0aGlzLmVtaXQodGhpcy5jb25zdHJ1Y3Rvci5FVkVOVFMucGxheU5leHRBbmltYXRpb24sIHtcclxuICAgICAgICAgICAgbGF5ZXJOYW1lLFxyXG4gICAgICAgICAgICBhbmltYXRpb25OYW1lLFxyXG4gICAgICAgICAgICBuZXh0UXVldWVkQW5pbWF0aW9uOiBuYW1lLFxyXG4gICAgICAgICAgICBjYW5BZHZhbmNlLFxyXG4gICAgICAgICAgICBpc1F1ZXVlRW5kLFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUGxheSB0aGUgbmV4dCBhbmltYXRpb24gaW4gdGhlIHF1ZXVlIG9mIGEgUXVldWVTdGF0ZSBhbmltYXRpb24uXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGF5ZXJOYW1lIC0gTmFtZSBvZiB0aGUgbGF5ZXIgdGhhdCBjb250YWlucyB0aGUgcXVldWUgYW5pbWF0aW9uLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nPX0gYW5pbWF0aW9uTmFtZSAtIE5hbWUgb2YgdGhlIGFuaW1hdGlvbiBxdWV1ZSBhbmltYXRpb24uIERlZmF1bHRzXHJcbiAgICogdG8gdGhlIG5hbWUgb2YgdGhlIGN1cnJlbnQgYW5pbWF0aW9uIGZvciB0aGUgbGF5ZXIuXHJcbiAgICogQHBhcmFtIHtudW1iZXI9fSBzZWNvbmRzIC0gVGhlIG51bWJlciBvZiBzZWNvbmRzIGl0IHNob3VsZCB0YWtlIHRvIHRyYW5zaXRpb25cclxuICAgKiB0byB0aGUgcXVldWUgYW5pbWF0aW9uIGlmIGl0J3Mgbm90IGFscmVhZHkgY3VycmVudGx5IHBsYXlpbmcuIERlZmF1bHQgaXMgemVyb1xyXG4gICAqIGFuZCB3aWxsIHNldCBpbW1lZGlhdGVseS5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gZWFzaW5nRm4gLSBUaGUgZWFzaW5nIGZ1bmN0aW9uIHRvIHVzZSB3aGlsZSB0cmFuc2l0aW9uaW5nXHJcbiAgICogdG8gdGhlIHF1ZXVlIGFuaW1hdGlvbiBpZiBpdCBpc24ndCBhbHJlYWR5IHBsYXlpbmcuIERlZmF1bHQgaXMgRWFzaW5nLkxpbmVhci5Jbk91dC5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtEZWZlcnJlZH0gLSBSZXNvbHZlcyBvbmNlIHRoZSBsYXN0IGFuaW1hdGlvbiBpbiB0aGUgcXVldWUgZmluaXNoZXNcclxuICAgKiBwbGF5aW5nLlxyXG4gICAqL1xyXG4gIHBsYXlOZXh0QW5pbWF0aW9uKGxheWVyTmFtZSwgYW5pbWF0aW9uTmFtZSwgdHJhbnNpdGlvblRpbWUsIGVhc2luZ0ZuKSB7XHJcbiAgICBjb25zdCBsYXllciA9IHRoaXMuX2xheWVyTWFwW2xheWVyTmFtZV07XHJcblxyXG4gICAgaWYgKGxheWVyID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgY29uc3QgZSA9IGBDYW5ub3QgcGxheSBuZXh0IGFuaW1hdGlvbiBvbiBsYXllciAke2xheWVyTmFtZX0gZm9yIGhvc3QgJHt0aGlzLl9ob3N0LmlkfS4gTm8gbGF5ZXIgZXhpc3RzIHdpdGggdGhpcyBuYW1lLmA7XHJcbiAgICAgIHJldHVybiBEZWZlcnJlZC5yZWplY3QoZSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGFuaW1hdGlvbk5hbWUgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBhbmltYXRpb25OYW1lID0gbGF5ZXIuY3VycmVudEFuaW1hdGlvbjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBhbmltYXRpb24gPSBsYXllci5nZXRTdGF0ZShsYXllci5jdXJyZW50QW5pbWF0aW9uKTtcclxuXHJcbiAgICBpZiAoYW5pbWF0aW9uID09PSBudWxsKSB7XHJcbiAgICAgIGNvbnN0IGUgPSBgQ2Fubm90IHBsYXkgbmV4dCBhbmltYXRpb24gb24gbGF5ZXIgJHtsYXllck5hbWV9IGZvciBob3N0ICR7dGhpcy5faG9zdC5pZH0uIE5vIGFuaW1hdGlvbiBleGlzdHMgd2l0aCBuYW1lICR7YW5pbWF0aW9uTmFtZX0uYDtcclxuICAgICAgcmV0dXJuIERlZmVycmVkLnJlamVjdChlKTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5nZXRBbmltYXRpb25UeXBlKGxheWVyTmFtZSwgYW5pbWF0aW9uTmFtZSkgIT09ICdxdWV1ZScpIHtcclxuICAgICAgY29uc3QgZSA9IGBDYW5ub3QgcGxheSBuZXh0IGFuaW1hdGlvbiBvbiBsYXllciAke2xheWVyTmFtZX0gZm9yIGhvc3QgJHt0aGlzLl9ob3N0LmlkfS4gJHthbmltYXRpb25OYW1lfSBpcyBub3QgYSBxdWV1ZSBzdGF0ZS5gO1xyXG4gICAgICByZXR1cm4gRGVmZXJyZWQucmVqZWN0KGUpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IG9uTmV4dCA9ICh7bmFtZSwgY2FuQWR2YW5jZSwgaXNRdWV1ZUVuZH0pID0+IHtcclxuICAgICAgaWYgKGxheWVyLmN1cnJlbnRBbmltYXRpb24gPT09IGFuaW1hdGlvbk5hbWUpIHtcclxuICAgICAgICAvLyBOb3RpZnkgdGhhdCBhIG5ldyBhbmltYXRpb24gaGFzIGJlZ3VuXHJcbiAgICAgICAgdGhpcy5lbWl0KHRoaXMuY29uc3RydWN0b3IuRVZFTlRTLnBsYXlOZXh0QW5pbWF0aW9uLCB7XHJcbiAgICAgICAgICBsYXllck5hbWUsXHJcbiAgICAgICAgICBhbmltYXRpb25OYW1lLFxyXG4gICAgICAgICAgbmV4dFF1ZXVlZEFuaW1hdGlvbjogbmFtZSxcclxuICAgICAgICAgIGNhbkFkdmFuY2UsXHJcbiAgICAgICAgICBpc1F1ZXVlRW5kLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIC8vIE1ha2UgdGhlIHF1ZXVlIGFuaW1hdGlvbiBjdXJyZW50IGlmIGl0IHdhc24ndCBhbHJlYWR5XHJcbiAgICBpZiAobGF5ZXIuY3VycmVudEFuaW1hdGlvbiA9PT0gbnVsbCkge1xyXG4gICAgICBsYXllci5yZXN1bWVBbmltYXRpb24oXHJcbiAgICAgICAgYW5pbWF0aW9uLm5hbWUsXHJcbiAgICAgICAgdHJhbnNpdGlvblRpbWUsXHJcbiAgICAgICAgZWFzaW5nRm4sXHJcbiAgICAgICAgdW5kZWZpbmVkLFxyXG4gICAgICAgIHVuZGVmaW5lZCxcclxuICAgICAgICB1bmRlZmluZWQsXHJcbiAgICAgICAgb25OZXh0XHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGFuaW1hdGlvbi5uZXh0KG9uTmV4dCwgdHJ1ZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQYXVzZSB0aGUgY3VycmVudCBhbmltYXRpb24gb24gYSBsYXllci5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gTmFtZSBvZiB0aGUgbGF5ZXIgdG8gcGF1c2UuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciBvciBub3QgYW4gYW5pbWF0aW9uIHdhcyBzdWNjZXNzZnVsbHkgcGF1c2VkLlxyXG4gICAqL1xyXG4gIHBhdXNlQW5pbWF0aW9uKG5hbWUpIHtcclxuICAgIGNvbnN0IGxheWVyID0gdGhpcy5fbGF5ZXJNYXBbbmFtZV07XHJcblxyXG4gICAgaWYgKGxheWVyID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgIGBEaWQgbm90IHBhdXNlIGFuaW1hdGlvbiBvbiBsYXllciAke25hbWV9IGZvciBob3N0ICR7dGhpcy5faG9zdC5pZH0uIE5vIGxheWVyIGV4aXN0cyB3aXRoIHRoaXMgbmFtZS5gXHJcbiAgICAgICk7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBwYXVzZWQgPSBsYXllci5wYXVzZUFuaW1hdGlvbigpO1xyXG5cclxuICAgIC8vIE5vdGlmeSB0aGF0IGFuIGFuaW1hdGlvbiB3YXMgcGF1c2VkXHJcbiAgICBpZiAocGF1c2VkKSB7XHJcbiAgICAgIGNvbnN0IGFuaW1hdGlvbk5hbWUgPSBsYXllci5jdXJyZW50QW5pbWF0aW9uO1xyXG4gICAgICB0aGlzLmVtaXQodGhpcy5jb25zdHJ1Y3Rvci5FVkVOVFMucGF1c2VBbmltYXRpb24sIHtcclxuICAgICAgICBsYXllck5hbWU6IG5hbWUsXHJcbiAgICAgICAgYW5pbWF0aW9uTmFtZSxcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHBhdXNlZDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFBhdXNlIHRoZSBjdXJyZW50bHkgcGxheWluZyBhbmltYXRpb24gYW5kIHBsYXkgYSBuZXcgYW5pbWF0aW9uIGZyb20gd2hlcmUgaXRcclxuICAgKiBsYXN0IGxlZnQgb2ZmLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVyTmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRoYXQgY29udGFpbnMgdGhlIGFuaW1hdGlvbi5cclxuICAgKiBAcGFyYW0ge3N0cmluZz19IGFuaW1hdGlvbk5hbWUgLSBOYW1lIG9mIHRoZSBhbmltYXRpb24gc3RhdGUgdG8gcmVzdW1lLiBEZWZhdWx0c1xyXG4gICAqIHRvIHRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IGFuaW1hdGlvbiBmb3IgdGhlIGxheWVyLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyPX0gc2Vjb25kcyAtIFRoZSBudW1iZXIgb2Ygc2Vjb25kcyBpdCBzaG91bGQgdGFrZSB0byB0cmFuc2l0aW9uXHJcbiAgICogdG8gdGhlIG5ldyBhbmltYXRpb24uIERlZmF1bHQgaXMgemVybyBhbmQgd2lsbCBzZXQgaW1tZWRpYXRlbHkuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IGVhc2luZ0ZuIC0gVGhlIGVhc2luZyBmdW5jdGlvbiB0byB1c2Ugd2hpbGUgdHJhbnNpdGlvbmluZ1xyXG4gICAqIGJldHdlZW4gYW5pbWF0aW9ucy4gRGVmYXVsdCBpcyBFYXNpbmcuTGluZWFyLkluT3V0LlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0RlZmVycmVkfSAtIFJlc29sdmVzIG9uY2UgdGhlIGFuaW1hdGlvbiByZWFjaGVzIHRoZSBlbmQgb2YgaXRzXHJcbiAgICogdGltZWxpbmUuIExvb3BpbmcgYW5pbWF0aW9ucyBjYW4gb25seSByZXNvbHZlIGlmIHRoZXkgYXJlIGludGVycnVwdGVkIG9yXHJcbiAgICogbWFudWFsbHkgc3RvcHBlZC5cclxuICAgKi9cclxuICByZXN1bWVBbmltYXRpb24obGF5ZXJOYW1lLCBhbmltYXRpb25OYW1lLCBzZWNvbmRzLCBlYXNpbmdGbikge1xyXG4gICAgY29uc3QgbGF5ZXIgPSB0aGlzLl9sYXllck1hcFtsYXllck5hbWVdO1xyXG5cclxuICAgIGlmIChsYXllciA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGNvbnN0IGUgPSBgQ2Fubm90IHJlc3VtZSBhbmltYXRpb24gJHthbmltYXRpb25OYW1lfSBvbiBsYXllciAke2xheWVyTmFtZX0gZm9yIGhvc3QgJHt0aGlzLl9ob3N0LmlkfS4gTm8gbGF5ZXIgZXhpc3RzIHdpdGggdGhpcyBuYW1lLmA7XHJcbiAgICAgIHJldHVybiBEZWZlcnJlZC5yZWplY3QoZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gTm90aWZ5IHRoYXQgYW4gYW5pbWF0aW9uIHdhcyByZXN1bWVkXHJcbiAgICB0aGlzLmVtaXQodGhpcy5jb25zdHJ1Y3Rvci5FVkVOVFMucmVzdW1lQW5pbWF0aW9uLCB7XHJcbiAgICAgIGxheWVyTmFtZSxcclxuICAgICAgYW5pbWF0aW9uTmFtZSxcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBsYXllci5yZXN1bWVBbmltYXRpb24oXHJcbiAgICAgIGFuaW1hdGlvbk5hbWUsXHJcbiAgICAgIHNlY29uZHMsXHJcbiAgICAgIGVhc2luZ0ZuLFxyXG4gICAgICAoKSA9PiB7XHJcbiAgICAgICAgLy8gTm90aWZ5IHRoYXQgYW4gYW5pbWF0aW9uIGhhcyBzdG9wcGVkXHJcbiAgICAgICAgdGhpcy5lbWl0KHRoaXMuY29uc3RydWN0b3IuRVZFTlRTLnN0b3BBbmltYXRpb24sIHtcclxuICAgICAgICAgIGxheWVyTmFtZSxcclxuICAgICAgICAgIGFuaW1hdGlvbk5hbWUsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0sXHJcbiAgICAgIHVuZGVmaW5lZCxcclxuICAgICAgKCkgPT4ge1xyXG4gICAgICAgIC8vIE5vdGlmeSB0aGF0IGFuIGFuaW1hdGlvbiBoYXMgYmVlbiBpbnRlcnJ1cHRlZFxyXG4gICAgICAgIHRoaXMuZW1pdCh0aGlzLmNvbnN0cnVjdG9yLkVWRU5UUy5pbnRlcnJ1cHRBbmltYXRpb24sIHtcclxuICAgICAgICAgIGxheWVyTmFtZSxcclxuICAgICAgICAgIGFuaW1hdGlvbk5hbWUsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0sXHJcbiAgICAgICh7bmFtZSwgY2FuQWR2YW5jZSwgaXNRdWV1ZUVuZH0pID0+IHtcclxuICAgICAgICBpZiAobGF5ZXIuY3VycmVudEFuaW1hdGlvbiA9PT0gYW5pbWF0aW9uTmFtZSkge1xyXG4gICAgICAgICAgLy8gTm90aWZ5IHRoYXQgYSBuZXcgYW5pbWF0aW9uIGhhcyBiZWd1blxyXG4gICAgICAgICAgdGhpcy5lbWl0KHRoaXMuY29uc3RydWN0b3IuRVZFTlRTLnBsYXlOZXh0QW5pbWF0aW9uLCB7XHJcbiAgICAgICAgICAgIGxheWVyTmFtZSxcclxuICAgICAgICAgICAgYW5pbWF0aW9uTmFtZSxcclxuICAgICAgICAgICAgbmV4dFF1ZXVlZEFuaW1hdGlvbjogbmFtZSxcclxuICAgICAgICAgICAgY2FuQWR2YW5jZSxcclxuICAgICAgICAgICAgaXNRdWV1ZUVuZCxcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFN0b3AgdGhlIGN1cnJlbnQgYW5pbWF0aW9uIG9uIGEgbGF5ZXIuIFN0b3AgcmV3aW5kcyB0aGUgYW5pbWF0aW9uIHRvIHRoZVxyXG4gICAqIGJlZ2lubmluZyBhbmQgcHJldmVudHMgaXQgZnJvbSBwcm9ncmVzc2luZyBmb3J3YXJkLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBOYW1lIG9mIHRoZSBsYXllciB0aGF0IGNvbnRhaW5zIHRoZSBhbmltYXRpb24uXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciBvciBub3QgYW4gYW5pbWF0aW9uIHdhcyBzdWNjZXNzZnVsbHkgc3RvcHBlZC5cclxuICAgKi9cclxuICBzdG9wQW5pbWF0aW9uKG5hbWUpIHtcclxuICAgIGNvbnN0IGxheWVyID0gdGhpcy5fbGF5ZXJNYXBbbmFtZV07XHJcblxyXG4gICAgaWYgKGxheWVyID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgIGBEaWQgbm90IHN0b3AgYW5pbWF0aW9uIG9uIGxheWVyICR7bmFtZX0gZm9yIGhvc3QgJHt0aGlzLl9ob3N0LmlkfS4gTm8gbGF5ZXIgZXhpc3RzIHdpdGggdGhpcyBuYW1lLmBcclxuICAgICAgKTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBsYXllci5zdG9wQW5pbWF0aW9uKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQYXVzZSBjdXJyZW50IGFuaW1hdGlvbiBhbmQgd2VpZ2h0IGludGVycG9sYXRpb24gYW5pbWF0aW9uIG9uIGFsbCBsYXllcnMuXHJcblxyXG4gICAqIEByZXR1cm5zIHtib29sZWFufSAtIFdoZXRoZXIgb3Igbm90IHRoZXJlIHdhcyBhbiBleGlzdGluZyBpbnRlcnBvbGF0aW9uIG9yXHJcbiAgICogY3VycmVudCBhbmltYXRpb25zIHRvIHBhdXNlLlxyXG4gICAqL1xyXG4gIHBhdXNlKCkge1xyXG4gICAgdGhpcy5fcGF1c2VkID0gdHJ1ZTtcclxuXHJcbiAgICBsZXQgcGF1c2VkID0gZmFsc2U7XHJcbiAgICB0aGlzLl9sYXllcnMuZm9yRWFjaChsID0+IHtcclxuICAgICAgaWYgKGwucGF1c2UoKSkge1xyXG4gICAgICAgIHBhdXNlZCA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBwYXVzZWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXN1bWUgY3VycmVudCBhbmltYXRpb24gYW5kIHdlaWdodCBpbnRlcnBvbGF0aW9uIGFuaW1hdGlvbiBvbiBhbGwgbGF5ZXJzLlxyXG5cclxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSBXaGV0aGVyIG9yIG5vdCB0aGVyZSB3YXMgYW4gZXhpc3RpbmcgaW50ZXJwb2xhdGlvbiBvclxyXG4gICAqIGN1cnJlbnQgYW5pbWF0aW9ucyB0byByZXN1bWUuXHJcbiAgICovXHJcbiAgcmVzdW1lKCkge1xyXG4gICAgdGhpcy5fcGF1c2VkID0gZmFsc2U7XHJcblxyXG4gICAgbGV0IHJlc3VtZWQgPSBmYWxzZTtcclxuICAgIHRoaXMuX2xheWVycy5mb3JFYWNoKGwgPT4ge1xyXG4gICAgICBpZiAobC5yZXN1bWUoKSkge1xyXG4gICAgICAgIHJlc3VtZWQgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gcmVzdW1lZDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFkZHMgYSBuYW1lc3BhY2UgdG8gdGhlIGhvc3Qgd2l0aCB0aGUgbmFtZSBvZiB0aGUgZmVhdHVyZSB0byBjb250YWluIHByb3BlcnRpZXNcclxuICAgKiBhbmQgbWV0aG9kcyBmcm9tIHRoZSBmZWF0dXJlIHRoYXQgdXNlcnMgb2YgdGhlIGhvc3QgbmVlZCBhY2Nlc3MgdG8uXHJcbiAgICpcclxuICAgKiBAc2VlIEFuaW1hdGlvbkZlYXR1cmVcclxuICAgKi9cclxuICBpbnN0YWxsQXBpKCkge1xyXG4gICAgLyoqXHJcbiAgICAgKiBAaW5uZXJcclxuICAgICAqIEBuYW1lc3BhY2UgQW5pbWF0aW9uRmVhdHVyZVxyXG4gICAgICovXHJcbiAgICBjb25zdCBhcGkgPSBzdXBlci5pbnN0YWxsQXBpKCk7XHJcblxyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoYXBpLCB7XHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbWVtYmVyb2YgQW5pbWF0aW9uRmVhdHVyZVxyXG4gICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICogQHNlZSBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjcGF1c2VkXHJcbiAgICAgICAqL1xyXG4gICAgICBwYXVzZWQ6IHtcclxuICAgICAgICBnZXQ6ICgpID0+IHRoaXMucGF1c2VkLFxyXG4gICAgICB9LFxyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIEFuaW1hdGlvbkZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBzZWUgY29yZS9BbmltYXRpb25GZWF0dXJlI2xheWVyc1xyXG4gICAgICAgKi9cclxuICAgICAgbGF5ZXJzOiB7XHJcbiAgICAgICAgZ2V0OiAoKSA9PiB0aGlzLmxheWVycyxcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG5cclxuICAgIE9iamVjdC5hc3NpZ24oYXBpLCB7XHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbWVtYmVyb2YgQW5pbWF0aW9uRmVhdHVyZVxyXG4gICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICogQG1ldGhvZFxyXG4gICAgICAgKiBAc2VlIGNvcmUvQW5pbWF0aW9uRmVhdHVyZSNhZGRMYXllclxyXG4gICAgICAgKi9cclxuICAgICAgYWRkTGF5ZXI6IHRoaXMuYWRkTGF5ZXIuYmluZCh0aGlzKSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBtZW1iZXJvZiBBbmltYXRpb25GZWF0dXJlXHJcbiAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgKiBAbWV0aG9kXHJcbiAgICAgICAqIEBzZWUgY29yZS9BbmltYXRpb25GZWF0dXJlI3JlbW92ZUxheWVyXHJcbiAgICAgICAqL1xyXG4gICAgICByZW1vdmVMYXllcjogdGhpcy5yZW1vdmVMYXllci5iaW5kKHRoaXMpLFxyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIEFuaW1hdGlvbkZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBtZXRob2RcclxuICAgICAgICogQHNlZSBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjbW92ZUxheWVyXHJcbiAgICAgICAqL1xyXG4gICAgICBtb3ZlTGF5ZXI6IHRoaXMubW92ZUxheWVyLmJpbmQodGhpcyksXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbWVtYmVyb2YgQW5pbWF0aW9uRmVhdHVyZVxyXG4gICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICogQG1ldGhvZFxyXG4gICAgICAgKiBAc2VlIGNvcmUvQW5pbWF0aW9uRmVhdHVyZSNyZW5hbWVMYXllclxyXG4gICAgICAgKi9cclxuICAgICAgcmVuYW1lTGF5ZXI6IHRoaXMucmVuYW1lTGF5ZXIuYmluZCh0aGlzKSxcclxuXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbWVtYmVyb2YgQW5pbWF0aW9uRmVhdHVyZVxyXG4gICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICogQG1ldGhvZFxyXG4gICAgICAgKiBAc2VlIGNvcmUvQW5pbWF0aW9uRmVhdHVyZSNnZXRMYXllcldlaWdodFxyXG4gICAgICAgKi9cclxuICAgICAgZ2V0TGF5ZXJXZWlnaHQ6IHRoaXMuZ2V0TGF5ZXJXZWlnaHQuYmluZCh0aGlzKSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBtZW1iZXJvZiBBbmltYXRpb25GZWF0dXJlXHJcbiAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgKiBAbWV0aG9kXHJcbiAgICAgICAqIEBzZWUgY29yZS9BbmltYXRpb25GZWF0dXJlI3NldExheWVyV2VpZ2h0XHJcbiAgICAgICAqL1xyXG4gICAgICBzZXRMYXllcldlaWdodDogdGhpcy5zZXRMYXllcldlaWdodC5iaW5kKHRoaXMpLFxyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIEFuaW1hdGlvbkZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBtZXRob2RcclxuICAgICAgICogQHNlZSBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjcGF1c2VMYXllcldlaWdodFxyXG4gICAgICAgKi9cclxuICAgICAgcGF1c2VMYXllcldlaWdodDogdGhpcy5wYXVzZUxheWVyV2VpZ2h0LmJpbmQodGhpcyksXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbWVtYmVyb2YgQW5pbWF0aW9uRmVhdHVyZVxyXG4gICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICogQG1ldGhvZFxyXG4gICAgICAgKiBAc2VlIGNvcmUvQW5pbWF0aW9uRmVhdHVyZSNyZXN1bWVMYXllcldlaWdodFxyXG4gICAgICAgKi9cclxuICAgICAgcmVzdW1lTGF5ZXJXZWlnaHQ6IHRoaXMucmVzdW1lTGF5ZXJXZWlnaHQuYmluZCh0aGlzKSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBtZW1iZXJvZiBBbmltYXRpb25GZWF0dXJlXHJcbiAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgKiBAbWV0aG9kXHJcbiAgICAgICAqIEBzZWUgY29yZS9BbmltYXRpb25GZWF0dXJlI3BhdXNlTGF5ZXJcclxuICAgICAgICovXHJcbiAgICAgIHBhdXNlTGF5ZXI6IHRoaXMucGF1c2VMYXllci5iaW5kKHRoaXMpLFxyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIEFuaW1hdGlvbkZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBtZXRob2RcclxuICAgICAgICogQHNlZSBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjcmVzdW1lTGF5ZXJcclxuICAgICAgICovXHJcbiAgICAgIHJlc3VtZUxheWVyOiB0aGlzLnJlc3VtZUxheWVyLmJpbmQodGhpcyksXHJcblxyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIEFuaW1hdGlvbkZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBtZXRob2RcclxuICAgICAgICogQHNlZSBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjZ2V0VHJhbnNpdGlvbmluZ1xyXG4gICAgICAgKi9cclxuICAgICAgZ2V0VHJhbnNpdGlvbmluZzogdGhpcy5nZXRUcmFuc2l0aW9uaW5nLmJpbmQodGhpcyksXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbWVtYmVyb2YgQW5pbWF0aW9uRmVhdHVyZVxyXG4gICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICogQG1ldGhvZFxyXG4gICAgICAgKiBAc2VlIGNvcmUvQW5pbWF0aW9uRmVhdHVyZSNnZXRBbmltYXRpb25zXHJcbiAgICAgICAqL1xyXG4gICAgICBnZXRBbmltYXRpb25zOiB0aGlzLmdldEFuaW1hdGlvbnMuYmluZCh0aGlzKSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBtZW1iZXJvZiBBbmltYXRpb25GZWF0dXJlXHJcbiAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgKiBAbWV0aG9kXHJcbiAgICAgICAqIEBzZWUgY29yZS9BbmltYXRpb25GZWF0dXJlI2dldEN1cnJlbnRBbmltYXRpb25cclxuICAgICAgICovXHJcbiAgICAgIGdldEN1cnJlbnRBbmltYXRpb246IHRoaXMuZ2V0Q3VycmVudEFuaW1hdGlvbi5iaW5kKHRoaXMpLFxyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIEFuaW1hdGlvbkZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBtZXRob2RcclxuICAgICAgICogQHNlZSBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjZ2V0UGF1c2VkXHJcbiAgICAgICAqL1xyXG4gICAgICBnZXRQYXVzZWQ6IHRoaXMuZ2V0UGF1c2VkLmJpbmQodGhpcyksXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbWVtYmVyb2YgQW5pbWF0aW9uRmVhdHVyZVxyXG4gICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICogQG1ldGhvZFxyXG4gICAgICAgKiBAc2VlIGNvcmUvQW5pbWF0aW9uRmVhdHVyZSNnZXRBbmltYXRpb25UeXBlXHJcbiAgICAgICAqL1xyXG4gICAgICBnZXRBbmltYXRpb25UeXBlOiB0aGlzLmdldEFuaW1hdGlvblR5cGUuYmluZCh0aGlzKSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBtZW1iZXJvZiBBbmltYXRpb25GZWF0dXJlXHJcbiAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgKiBAbWV0aG9kXHJcbiAgICAgICAqIEBzZWUgY29yZS9BbmltYXRpb25GZWF0dXJlI2FkZEFuaW1hdGlvblxyXG4gICAgICAgKi9cclxuICAgICAgYWRkQW5pbWF0aW9uOiB0aGlzLmFkZEFuaW1hdGlvbi5iaW5kKHRoaXMpLFxyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIEFuaW1hdGlvbkZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBtZXRob2RcclxuICAgICAgICogQHNlZSBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjcmVtb3ZlQW5pbWF0aW9uXHJcbiAgICAgICAqL1xyXG4gICAgICByZW1vdmVBbmltYXRpb246IHRoaXMucmVtb3ZlQW5pbWF0aW9uLmJpbmQodGhpcyksXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbWVtYmVyb2YgQW5pbWF0aW9uRmVhdHVyZVxyXG4gICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICogQG1ldGhvZFxyXG4gICAgICAgKiBAc2VlIGNvcmUvQW5pbWF0aW9uRmVhdHVyZSNyZW5hbWVBbmltYXRpb25cclxuICAgICAgICovXHJcbiAgICAgIHJlbmFtZUFuaW1hdGlvbjogdGhpcy5yZW5hbWVBbmltYXRpb24uYmluZCh0aGlzKSxcclxuXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbWVtYmVyb2YgQW5pbWF0aW9uRmVhdHVyZVxyXG4gICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICogQG1ldGhvZFxyXG4gICAgICAgKiBAc2VlIGNvcmUvQW5pbWF0aW9uRmVhdHVyZSNnZXRBbmltYXRpb25CbGVuZE5hbWVzXHJcbiAgICAgICAqL1xyXG4gICAgICBnZXRBbmltYXRpb25CbGVuZE5hbWVzOiB0aGlzLmdldEFuaW1hdGlvbkJsZW5kTmFtZXMuYmluZCh0aGlzKSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBtZW1iZXJvZiBBbmltYXRpb25GZWF0dXJlXHJcbiAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgKiBAbWV0aG9kXHJcbiAgICAgICAqIEBzZWUgY29yZS9BbmltYXRpb25GZWF0dXJlI2dldEFuaW1hdGlvbkJsZW5kV2VpZ2h0XHJcbiAgICAgICAqL1xyXG4gICAgICBnZXRBbmltYXRpb25CbGVuZFdlaWdodDogdGhpcy5nZXRBbmltYXRpb25CbGVuZFdlaWdodC5iaW5kKHRoaXMpLFxyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIEFuaW1hdGlvbkZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBtZXRob2RcclxuICAgICAgICogQHNlZSBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjc2V0QW5pbWF0aW9uQmxlbmRXZWlnaHRcclxuICAgICAgICovXHJcbiAgICAgIHNldEFuaW1hdGlvbkJsZW5kV2VpZ2h0OiB0aGlzLnNldEFuaW1hdGlvbkJsZW5kV2VpZ2h0LmJpbmQodGhpcyksXHJcblxyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIEFuaW1hdGlvbkZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBtZXRob2RcclxuICAgICAgICogQHNlZSBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjcGxheUFuaW1hdGlvblxyXG4gICAgICAgKi9cclxuICAgICAgcGxheUFuaW1hdGlvbjogdGhpcy5wbGF5QW5pbWF0aW9uLmJpbmQodGhpcyksXHJcblxyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIEFuaW1hdGlvbkZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBtZXRob2RcclxuICAgICAgICogQHNlZSBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjcGxheU5leHRBbmltYXRpb25cclxuICAgICAgICovXHJcbiAgICAgIHBsYXlOZXh0QW5pbWF0aW9uOiB0aGlzLnBsYXlOZXh0QW5pbWF0aW9uLmJpbmQodGhpcyksXHJcblxyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIEFuaW1hdGlvbkZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBtZXRob2RcclxuICAgICAgICogQHNlZSBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjcGF1c2VBbmltYXRpb25cclxuICAgICAgICovXHJcbiAgICAgIHBhdXNlQW5pbWF0aW9uOiB0aGlzLnBhdXNlQW5pbWF0aW9uLmJpbmQodGhpcyksXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbWVtYmVyb2YgQW5pbWF0aW9uRmVhdHVyZVxyXG4gICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICogQG1ldGhvZFxyXG4gICAgICAgKiBAc2VlIGNvcmUvQW5pbWF0aW9uRmVhdHVyZSNyZXN1bWVBbmltYXRpb25cclxuICAgICAgICovXHJcbiAgICAgIHJlc3VtZUFuaW1hdGlvbjogdGhpcy5yZXN1bWVBbmltYXRpb24uYmluZCh0aGlzKSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBtZW1iZXJvZiBBbmltYXRpb25GZWF0dXJlXHJcbiAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgKiBAbWV0aG9kXHJcbiAgICAgICAqIEBzZWUgY29yZS9BbmltYXRpb25GZWF0dXJlI3N0b3BBbmltYXRpb25cclxuICAgICAgICovXHJcbiAgICAgIHN0b3BBbmltYXRpb246IHRoaXMuc3RvcEFuaW1hdGlvbi5iaW5kKHRoaXMpLFxyXG5cclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBtZW1iZXJvZiBBbmltYXRpb25GZWF0dXJlXHJcbiAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgKiBAbWV0aG9kXHJcbiAgICAgICAqIEBzZWUgY29yZS9BbmltYXRpb25GZWF0dXJlI3BhdXNlXHJcbiAgICAgICAqL1xyXG4gICAgICBwYXVzZTogdGhpcy5wYXVzZS5iaW5kKHRoaXMpLFxyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIEFuaW1hdGlvbkZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBtZXRob2RcclxuICAgICAgICogQHNlZSBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjcmVzdW1lXHJcbiAgICAgICAqL1xyXG4gICAgICByZXN1bWU6IHRoaXMucmVzdW1lLmJpbmQodGhpcyksXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZSBlYWNoIGFuaW1hdGlvbiBsYXllci5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBkZWx0YVRpbWUgLSBUaW1lIHNpbmNlIHRoZSBsYXN0IHVwZGF0ZS5cclxuICAgKi9cclxuICB1cGRhdGUoZGVsdGFUaW1lKSB7XHJcbiAgICBpZiAoIXRoaXMuX2xheWVycy5sZW5ndGgpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLl9wYXVzZWQpIHtcclxuICAgICAgZGVsdGFUaW1lID0gMDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBSZS1ldmFsdWF0ZSBpbnRlcm5hbCB3ZWlnaHRzIGZvciBsYXllcnNcclxuICAgIHRoaXMuX3VwZGF0ZUludGVybmFsV2VpZ2h0cygpO1xyXG5cclxuICAgIC8vIFVwZGF0ZSBsYXllcnNcclxuICAgIHRoaXMuX2xheWVycy5mb3JFYWNoKGxheWVyID0+IHtcclxuICAgICAgbGF5ZXIudXBkYXRlKGRlbHRhVGltZSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBzdXBlci51cGRhdGUoZGVsdGFUaW1lKTtcclxuICB9XHJcblxyXG4gIGRpc2NhcmQoKSB7XHJcbiAgICB0aGlzLl9sYXllcnMuZm9yRWFjaChsYXllciA9PiB7XHJcbiAgICAgIGxheWVyLmRpc2NhcmQoKTtcclxuICAgIH0pO1xyXG5cclxuICAgIGRlbGV0ZSB0aGlzLl9sYXllcnM7XHJcbiAgICBkZWxldGUgdGhpcy5fbGF5ZXJNYXA7XHJcblxyXG4gICAgc3VwZXIuZGlzY2FyZCgpO1xyXG4gIH1cclxufVxyXG5cclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEFuaW1hdGlvbkZlYXR1cmUsICdFVkVOVFMnLCB7XHJcbiAgdmFsdWU6IHtcclxuICAgIC4uLk9iamVjdC5nZXRQcm90b3R5cGVPZihBYnN0cmFjdEhvc3RGZWF0dXJlKS5FVkVOVFMsXHJcbiAgICBhZGRMYXllcjogJ29uQWRkTGF5ZXJFdmVudCcsXHJcbiAgICByZW1vdmVMYXllcjogJ29uUmVtb3ZlTGF5ZXJFdmVudCcsXHJcbiAgICByZW5hbWVMYXllcjogJ29uUmVuYW1lTGF5ZXJFdmVudCcsXHJcbiAgICBhZGRBbmltYXRpb246ICdvbkFkZEFuaW1hdGlvbkV2ZW50JyxcclxuICAgIHJlbW92ZUFuaW1hdGlvbjogJ29uUmVtb3ZlZEFuaW1hdGlvbkV2ZW50JyxcclxuICAgIHJlbmFtZUFuaW1hdGlvbjogJ29uUmVuYW1lQW5pbWF0aW9uRXZlbnQnLFxyXG4gICAgcGxheUFuaW1hdGlvbjogJ29uUGxheUV2ZW50JyxcclxuICAgIHBsYXlOZXh0QW5pbWF0aW9uOiAnb25OZXh0RXZlbnQnLFxyXG4gICAgcGF1c2VBbmltYXRpb246ICdvblBhdXNlRXZlbnQnLFxyXG4gICAgcmVzdW1lQW5pbWF0aW9uOiAnb25SZXN1bWVFdmVudCcsXHJcbiAgICBpbnRlcnJ1cHRBbmltYXRpb246ICdvbkludGVycnVwdEV2ZW50JyxcclxuICAgIHN0b3BBbmltYXRpb246ICdvblN0b3BFdmVudCcsXHJcbiAgfSxcclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBBbmltYXRpb25GZWF0dXJlO1xyXG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cclxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVC0wXHJcbi8qIGVzbGludC1kaXNhYmxlIG5vLXVuZGVyc2NvcmUtZGFuZ2xlICovXHJcbi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXHJcbmltcG9ydCBNYW5hZ2VkQW5pbWF0aW9uTGF5ZXJJbnRlcmZhY2UgZnJvbSAnLi9hbmltcGFjay9NYW5hZ2VkQW5pbWF0aW9uTGF5ZXJJbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBBbmltYXRpb25UeXBlcyB9IGZyb20gJy4vYW5pbXBhY2svQW5pbWF0aW9uRmVhdHVyZSc7XHJcbmltcG9ydCBTU01MU3BlZWNobWFya0ludGVyZmFjZSBmcm9tICcuL2F3c3BhY2svU1NNTFNwZWVjaG1hcmtJbnRlcmZhY2UnO1xyXG5pbXBvcnQgQWJzdHJhY3RIb3N0RmVhdHVyZSBmcm9tICcuL0Fic3RyYWN0SG9zdEZlYXR1cmUnO1xyXG5pbXBvcnQgeyBRdWFkcmF0aWMgfSBmcm9tICcuL2FuaW1wYWNrL0Vhc2luZyc7XHJcbmltcG9ydCBNYXRoVXRpbHMgZnJvbSAnLi9NYXRoVXRpbHMnO1xyXG5pbXBvcnQgVXRpbHMgZnJvbSAnLi9VdGlscyc7XHJcblxyXG4vKipcclxuICogRW51bSBmb3IgYXhpcyBkaXJlY3Rpb25zLlxyXG4gKlxyXG4gKiBAcmVhZG9ubHlcclxuICogQGVudW0ge0NsYXNzfVxyXG4gKi9cclxuY29uc3QgQXhpc01hcCA9IHtcclxuICBQb3NpdGl2ZVg6IFsxLCAwLCAwXSxcclxuICBOZWdhdGl2ZVg6IFstMSwgMCwgMF0sXHJcbiAgUG9zaXRpdmVZOiBbMCwgMSwgMF0sXHJcbiAgTmVnYXRpdmVZOiBbMCwgLTEsIDBdLFxyXG4gIFBvc2l0aXZlWjogWzAsIDAsIDFdLFxyXG4gIE5lZ2F0aXZlWjogWzAsIDAsIC0xXSxcclxufTtcclxuXHJcbmNvbnN0IEZhY2VUYXJnZXRUeXBlcyA9IHtcclxuICBFeWVDZW50ZXI6IDAsXHJcbiAgRXllTGVmdDogMSxcclxuICBFeWVSaWdodDogMixcclxuICBNb3V0aDogMyxcclxufVxyXG5cclxuLy8gQXZlcmFnZSBkaXN0YW5jZSBiZXR3ZWVuIHB1cGlscyBpcyAuMDY0bSwgZ29sZGVuIHJhdGlvIHNheXMgdGhhdCB0aGUgZGlzdGFuY2VcclxuLy8gZnJvbSBjZW50ZXIgb2YgdGhlIHB1cGlscyB0byB0aGUgY2VudGVyIG9mIHRoZSBtb3V0aCBzaG91bGQgYmUgYWJvdXQgdGhlIHNhbWUuXHJcbmNvbnN0IEZhY2VWZWN0b3JzID0gW1xyXG4gIFswLCAwLCAwXSxcclxuICBbLS4wMzIsIDAsIDBdLFxyXG4gIFsuMDMyLCAwLCAwXSxcclxuICBbMCwgLS4wNjQsIDBdXHJcbl07XHJcblxyXG4vLyBUaW1lIHJhbmdlcyB0byB1c2Ugd2hlbiBjaG9vc2luZyBhIG5ldyByYW5kb20gd2FpdCB0aW1lIGJldHdlZW4gc2FjY2FkZXNcclxuY29uc3QgTWljcm9TYWNjYWRlV2FpdFJhbmdlcyA9IHtcclxuICBkZWZhdWx0OiBbMC44LCAxLjc1XSxcclxuICBwb3N0TWFjcm86IFswLjYsIDEuMzEyNV0sXHJcbn07XHJcblxyXG5jb25zdCBNYWNyb1NhY2NhZGVXYWl0UmFuZ2VzID0ge1xyXG4gIGRlZmF1bHQ6IFs1LjAsIDguMF0sXHJcbiAgbW91dGhUYXJnZXQ6IFswLjIsIDAuNzVdLCAvLyBMb29rIGF3YXkgZnJvbSBhIG1vdXRoIHRhcmdldCB0aGUgZmFzdGVzdFxyXG4gIGV5ZVRhcmdldDogWzEuNSwgNC4wXVxyXG59O1xyXG5cclxuLy8gTWluaW11bSBhbmdsZSBpbiBkZWdyZWVzIHRoZSBleWUgZGlyZWN0aW9uIG11c3QgY2hhbmdlIHRvIHRyaWdnZXIgYSBibGluayBhbmltYXRpb25cclxuY29uc3QgQmxpbmtUaHJlc2hvbGQgPSAzNTtcclxuXHJcbi8vIE1heGltdW0gbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byB1c2UgZm9yIGNhbGN1bGF0aW5nIGxvb2sgc3BlZWRcclxuY29uc3QgTWF4RGVsdGEgPSAxMDAgLyAzO1xyXG5cclxuLyoqXHJcbiAqIFBvaW50T2ZJbnRlcmVzdCBjb250cm9scyB0aGUgZ2F6ZSBkaXJlY3Rpb24gb2YgdGhlIGhvc3QuIEdpdmVuIG9uZSBvciBtb3JlXHJcbiAqIGFuaW1hdGlvbnMgb2YgdHlwZSBCbGVuZDJkU3RhdGUsIGl0IGNhbGN1bGF0ZXMgdGhlIGFuZ2xlcyBiZXR3ZWVuIHRoZSBsb29rVHJhY2tlclxyXG4gKiBvYmplY3QgKGdlbmVyYWxseSBhIGpvaW50IGluIHRoZSBob3N0J3Mgc2tlbGV0b24pIGFuZCB0aGUgbG9va1RhcmdldCAodGhlIG9iamVjdFxyXG4gKiB0aGUgaG9zdCBzaG91bGQgbG9vayBhdCkgYW5kIGRyaXZlcyB0aGUgbWFuYWdlZCBCbGVuZDJkU3RhdGVzJyBYIGFuZCBZIGJsZW5kXHJcbiAqIHZhbHVlcyB1c2luZyB0aGUgcmVzdWx0LiBZb3UgY2FuIG9wdGlvbmFsbHkgYWRkIHNhY2NhZGljIG1vdmVtZW50IHRvIGFueSBtYW5hZ2VkXHJcbiAqIGFuaW1hdGlvbiB0byBoZWxwIG1ha2UgdGhlIGhvc3QncyBleWVzIGFwcGVhciBhbGl2ZSB3aGVuIGZvY3VzZWQgb24gdGhlIHNhbWVcclxuICogcG9pbnQgZm9yIGV4dGVkZWQgcGVyaW9kcyBvZiB0aW1lLiBJZiBibGluayBhbmltYXRpb25zIGFyZSBzcGVjaWZpZWQsIGEgYmxpbmtcclxuICogd2lsbCBiZSBwbGF5ZWQgZHVyaW5nIGxhcmdlIGNoYW5nZXMgaW4gZ2F6ZSBkaXJlY3Rpb24uXHJcbiAqXHJcbiAqIEBleHRlbmRzIEFic3RyYWN0SG9zdEZlYXR1cmVcclxuICogQGFsaWFzIGNvcmUvUG9pbnRPZkludGVyZXN0RmVhdHVyZVxyXG4gKiBAaW1wbGVtZW50cyBTU01MU3BlZWNobWFya0ludGVyZmFjZVxyXG4gKiBAaW1wbGVtZW50cyBNYW5hZ2VkQW5pbWF0aW9uTGF5ZXJJbnRlcmZhY2VcclxuICovXHJcbmNsYXNzIFBvaW50T2ZJbnRlcmVzdEZlYXR1cmUgZXh0ZW5kcyBBYnN0cmFjdEhvc3RGZWF0dXJlLm1peChcclxuICBTU01MU3BlZWNobWFya0ludGVyZmFjZS5NaXhpbixcclxuICBNYW5hZ2VkQW5pbWF0aW9uTGF5ZXJJbnRlcmZhY2UuTWl4aW5cclxuKSB7XHJcbiAgLyoqXHJcbiAgICogQGNvbnN0cnVjdG9yXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge2NvcmUvSG9zdE9iamVjdH0gaG9zdCAtIEhvc3QgdGhhdCBvd25zIHRoZSBmZWF0dXJlLlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0PX0gb3B0aW9ucyAtIE9wdGlvbnMgZm9yIHRoZSBmZWF0dXJlLlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0PX0gdGFyZ2V0IC0gM0QgdHJhbnNmb3JtYXRpb24gbm9kZSB0aGF0IHRoZSBob3N0IHNob3VsZCB0cnkgdG9cclxuICAgKiBsb29rIGF0LlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zLmxvb2tUcmFja2VyIC0gM0QgdHJhbnNmb3JtYXRpb24gbm9kZSB0aGF0IHJlcHJlc2VudHNcclxuICAgKiB0aGUgZGlyZWN0aW9uIHRoZSBob3N0IGlzIGN1cnJlbnRseSBsb29raW5nIGR1cmluZyBhbmltYXRpb24uXHJcbiAgICogQHBhcmFtIHtPYmplY3Q9fSBvcHRpb25zLnNjZW5lIC0gRW5naW5lLXNwZWNpZmljIHNjZW5lIG9iamVjdCB0aGF0IGNvbnRhaW5zXHJcbiAgICogdGhlIGhvc3QuIFRoaXMgb2JqZWN0IG11c3QgYmUgZGVmaW5lZCBpZiB1c2luZyAnc2V0VGFyZ2V0QnlOYW1lJyBvciAnU2V0VGFyZ2V0QnlJZCdcclxuICAgKiBtZXRob2RzLlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0PX0gbG9va09wdGlvbnMgLSBPcHRpb25zIGZvciB0aGUgbG9vayBhbmltYXRpb24gbGF5ZXJzLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbbG9va09wdGlvbnMuYmxlbmRUaW1lPTAuMV0gLSBEZWZhdWx0IGFtb3VudCBvZiB0aW1lIGl0IHdpbGxcclxuICAgKiB0YWtlIHRvIG1hbmlwdWxhdGUgdGhlIHdlaWdodHMgb2YgdGhlIGxvb2sgbGF5ZXJzLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbbG9va09wdGlvbnMuZWFzaW5nRm49UXVhZHJhdGljLkluT3V0XSAtIERlZmF1bHQgZWFzaW5nIGZ1bmN0aW9uXHJcbiAgICogdG8gdXNlIHdoZW4gbWFuaXB1bGF0aW5nIGxvb2sgbGF5ZXIgd2VpZ2h0cy5cclxuICAgKiBAcGFyYW0ge0FycmF5LjxPYmplY3Q+fSBbbG9va09wdGlvbnMubGF5ZXJzPVtdXSAtIEFuIGFycmF5IG9mIGxheWVyIG9wdGlvbnNcclxuICAgKiBvYmplY3RzIHRvIHJlZ2lzdGVyIGFzIGxvb2sgbGF5ZXJzLlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0PX0gYmxpbmtPcHRpb25zIC0gT3B0aW9ucyBmb3IgdGhlIGJsaW5rIGFuaW1hdGlvbiBsYXllcnMuXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtibGlua09wdGlvbnMuYmxlbmRUaW1lPTAuMDc1XSAtIERlZmF1bHQgYW1vdW50IG9mIHRpbWUgaXRcclxuICAgKiB3aWxsIHRha2UgdG8gbWFuaXB1bGF0ZSB0aGUgd2VpZ2h0cyBvZiB0aGUgYmxpbmsgbGF5ZXJzLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbYmxpbmtPcHRpb25zLmVhc2luZ0ZuPVF1YWRyYXRpYy5Jbk91dF0gLSBEZWZhdWx0IGVhc2luZyBmdW5jdGlvblxyXG4gICAqIHRvIHVzZSB3aGVuIG1hbmlwdWxhdGluZyBibGluayBsYXllciB3ZWlnaHRzLlxyXG4gICAqIEBwYXJhbSB7QXJyYXkuPE9iamVjdD59IFtibGlua09wdGlvbnMubGF5ZXJzPVtdXSAtIEFuIGFycmF5IG9mIGxheWVyIG9wdGlvbnNcclxuICAgKiBvYmplY3RzIHRvIHJlZ2lzdGVyIGFzIGJsaW5rIGxheWVycy5cclxuICAgKi9cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIGhvc3QsXHJcbiAgICB7XHJcbiAgICAgIHRhcmdldCxcclxuICAgICAgbG9va1RyYWNrZXIsXHJcbiAgICAgIHNjZW5lXHJcbiAgICB9ID0ge30sXHJcbiAgICB7XHJcbiAgICAgIGJsZW5kVGltZTogbG9va0JsZW5kVGltZSA9IDAuMSxcclxuICAgICAgZWFzaW5nRm46IGxvb2tFYXNpbmdGbiA9IFF1YWRyYXRpYy5Jbk91dCxcclxuICAgICAgbGF5ZXJzOiBsb29rTGF5ZXJzID0gW10sXHJcbiAgICB9ID0ge30sXHJcbiAgICB7XHJcbiAgICAgIGJsZW5kVGltZTogYmxpbmtCbGVuZFRpbWUgPSAwLjA3NSxcclxuICAgICAgZWFzaW5nRm46IGJsaW5rRWFzaW5nRm4gPSBRdWFkcmF0aWMuSW5PdXQsXHJcbiAgICAgIGxheWVyczogYmxpbmtMYXllcnMgPSBbXSxcclxuICAgIH0gPSB7fVxyXG4gICkge1xyXG4gICAgc3VwZXIoaG9zdCk7XHJcblxyXG4gICAgaWYgKCF0aGlzLmNvbnN0cnVjdG9yLl92YWxpZGF0ZVRyYW5zZm9ybU9iamVjdChsb29rVHJhY2tlcikpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgaW5pdGlhbGl6ZSBQb2ludE9mSW50ZXJlc3RGZWF0dXJlIG9uIGhvc3QgJHt0aGlzLl9ob3N0LmlkfS4gTG9va1RyYWNrZXIgbXVzdCBiZSBkZWZpbmVkIGFzIGEgdmFsaWQgdHJhbnNmb3JtYXRpb24gb2JqZWN0LmApO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fbG9va1RyYWNrZXIgPSBsb29rVHJhY2tlcjtcclxuXHJcbiAgICB0aGlzLl9zY2VuZSA9IHNjZW5lO1xyXG4gICAgdGhpcy5fdGFyZ2V0ID0gdGFyZ2V0IHx8IG51bGw7XHJcbiAgICB0aGlzLl9wcmV2VGFyZ2V0UG9zID0gWzAsIDAsIDBdO1xyXG4gICAgdGhpcy5faXNUYXJnZXRNb3ZpbmcgPSBmYWxzZTtcclxuICAgIHRoaXMuX2xvb2tMYXllcnMgPSB0aGlzLl9sb29rTGF5ZXJzIHx8IHt9O1xyXG4gICAgdGhpcy5fdHJhY2tpbmdDb25maWdzID0gdGhpcy5fdHJhY2tpbmdDb25maWdzIHx8IFtdO1xyXG4gICAgdGhpcy5fYmxpbmtMYXllcnMgPSB0aGlzLl9ibGlua0xheWVycyB8fCB7fTtcclxuXHJcbiAgICAvLyBSZWdpc3RlciB0aGUgbG9vayBsYXllcnNcclxuICAgIGxvb2tMYXllcnMuZm9yRWFjaCgoe1xyXG4gICAgICBuYW1lLFxyXG4gICAgICBhbmltYXRpb24sXHJcbiAgICAgIG1heFNwZWVkLFxyXG4gICAgICByZWZlcmVuY2UsXHJcbiAgICAgIGZvcndhcmRBeGlzLFxyXG4gICAgICBoYXNTYWNjYWRlLFxyXG4gICAgICBibGVuZFRpbWUsXHJcbiAgICAgIGVhc2luZ0ZuXHJcbiAgICB9KSA9PiB7XHJcbiAgICAgIHRoaXMucmVnaXN0ZXJMb29rTGF5ZXIobmFtZSwge1xyXG4gICAgICAgIGFuaW1hdGlvbixcclxuICAgICAgICBtYXhTcGVlZCxcclxuICAgICAgICByZWZlcmVuY2UsXHJcbiAgICAgICAgZm9yd2FyZEF4aXMsXHJcbiAgICAgICAgaGFzU2FjY2FkZSxcclxuICAgICAgICBibGVuZFRpbWU6IGJsZW5kVGltZSAhPT0gdW5kZWZpbmVkID8gYmxlbmRUaW1lIDogbG9va0JsZW5kVGltZSxcclxuICAgICAgICBlYXNpbmdGbjogZWFzaW5nRm4gIT09IHVuZGVmaW5lZCA/IGVhc2luZ0ZuIDogbG9va0Vhc2luZ0ZuLFxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIFJlZ2lzdGVyIHRoZSBibGluayBsYXllcnNcclxuICAgIGJsaW5rTGF5ZXJzLmZvckVhY2goKHsgbmFtZSwgYW5pbWF0aW9uLCBibGVuZFRpbWUsIGVhc2luZ0ZuIH0pID0+IHtcclxuICAgICAgdGhpcy5yZWdpc3RlckJsaW5rTGF5ZXIobmFtZSwge1xyXG4gICAgICAgIGFuaW1hdGlvbixcclxuICAgICAgICBibGVuZFRpbWU6IGJsZW5kVGltZSAhPT0gdW5kZWZpbmVkID8gYmxlbmRUaW1lIDogYmxpbmtCbGVuZFRpbWUsXHJcbiAgICAgICAgZWFzaW5nRm46IGVhc2luZ0ZuICE9PSB1bmRlZmluZWQgPyBlYXNpbmdGbiA6IGJsaW5rRWFzaW5nRm4sXHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIGFuZCBzZXRzIHRoZSB0YXJnZXQgb2JqZWN0IHRoZSBob3N0IHNob3VsZCBsb29rIGF0LlxyXG4gICAqXHJcbiAgICogQHR5cGUge09iamVjdHxudWxsfVxyXG4gICAqL1xyXG4gIGdldCB0YXJnZXQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fdGFyZ2V0O1xyXG4gIH1cclxuXHJcbiAgc2V0IHRhcmdldCh0YXJnZXQpIHtcclxuICAgIHRoaXMuX3RhcmdldCA9IHRhcmdldCB8fCBudWxsO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIGEgdmVjdG9yIHJlcHJlc2VudGluZyB0aGUgZ2xvYmFsIHBvc2l0aW9uIG9mIGFuIG9iamVjdC4gU2hvdWxkIGJlXHJcbiAgICogb3ZlcmxvYWRlZCBmb3IgZWFjaCByZW5kZXJpbmcgZW5naW5lIGltcGxlbWVudGF0aW9uLlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7YW55fSBfb2JqIC0gRW5naW5lLXNwZWNpZmljIDNEIHRyYW5zZm9ybSBvYmplY3QuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7QXJyYXkuPG51bWJlcj59IC0gQW4gYXJyYXkgY29uc2lzdGluZyBvZiB0aHJlZSBudW1iZXJzIHJlcHJlc2VudGluZ1xyXG4gICAqIHgsIHkgYW5kIHogY29vcmRpbmF0ZXMuXHJcbiAgICovXHJcbiAgc3RhdGljIF9nZXRXb3JsZFBvc2l0aW9uKG9iaikge1xyXG4gICAgcmV0dXJuIFswLCAwLCAwXTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiBhIG1hdHJpeCByZXByZXNlbnRpbmcgdGhlIGdsb2JhbCB0cmFuc2Zvcm1hdGlvbiBtYXRyaXggb2YgYW4gb2JqZWN0LlxyXG4gICAqIFNob3VsZCBiZSBvdmVybG9hZGVkIGZvciBlYWNoIHJlbmRlcmluZyBlbmdpbmUgaW1wbGVtZW50YXRpb24uXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHthbnl9IG9iaiAtIEVuZ2luZS1zcGVjaWZpYyAzRCB0cmFuc2Zvcm0gb2JqZWN0LlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0FycmF5LjxudW1iZXI+fSAtIEFuIGFycmF5IGNvbnNpc3Rpbmcgb2YgMTYgbnVtYmVycyByZXByZXNlbnRpbmdcclxuICAgKiB0aGUgM2QgdHJhbnNmb3JtYXRpb24uXHJcbiAgICovXHJcbiAgc3RhdGljIF9nZXRXb3JsZE1hdHJpeChvYmopIHtcclxuICAgIHJldHVybiBbMSwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMCwgMV07XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSb3RhdGUgdGhlIGdpdmVuIGxvY2FsIGRpcmVjdGlvbiB2ZWN0b3IgYnkgdGhlIG9iamVjdCdzIHdvcmxkIHJvdGF0aW9uIG1hdHJpeC5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge2FueX0gb2JqIC0gRW5naW5lLXNwZWNpZmljIDNEIHRyYW5zZm9ybSBvYmplY3QuXHJcbiAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gZm9yd2FyZFZlY3RvciAtIFVuaXQgdmVjdG9yIHJlcHJlc2VudGluZyB0aGUgbG9jYWxcclxuICAgKiBmb3J3YXJkIGRpcmVjdGlvbiBvZiB0aGUgb2JqZWN0LlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0FycmF5LjxudW1iZXI+fVxyXG4gICAqL1xyXG4gIHN0YXRpYyBfZ2V0T2JqZWN0RGlyZWN0aW9uKG9iaiwgZm9yd2FyZFZlY3RvciA9IEF4aXNNYXAuUG9zaXRpdmVaKSB7XHJcbiAgICBjb25zdCByb3RhdGlvbiA9IE1hdGhVdGlscy5nZXRSb3RhdGlvbk1hdHJpeCh0aGlzLl9nZXRXb3JsZE1hdHJpeChvYmopKTtcclxuXHJcbiAgICByZXR1cm4gTWF0aFV0aWxzLnJvdGF0ZVZlY3Rvcihmb3J3YXJkVmVjdG9yLCByb3RhdGlvbik7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDYWxjdWxhdGUgaG9yaXpvbnRhbCBhbmQgdmVydGljYWwgbG9vayBhbmdsZXMgaW4gZGVncmVlcyBnaXZlbiBzcGhlcmljYWwgdGhldGFcclxuICAgKiBhbmQgcGhpIGFuZ2xlcyBpbiByYWRpYW5zLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IHRoZXRhIC0gVmVydGljYWwvcG9sYXIgYW5nbGUgaW4gcmFkaWFucyB3aGVyZSAwIHBvaW50cyBkaXJlY3RseVxyXG4gICAqIGFsb25nIHBvc2l0aXZlIFkgYXhpcy5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gcGhpIC0gSG9yaXpvbnRhbC9hemltdXRoYWwgYW5nbGUgaW4gcmFkaWFucy5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtPYmplY3R9IC0gQW4gb2JqZWN0IHdpdGggdGhlIHNpZ25hdHVyZSB7aDogbnVtYmVyLCB2OiBudW1iZXJ9IHdoZXJlXHJcbiAgICogaCByZXByZXNlbnRzIGhvcml6b250YWwgcm90YXRpb24gaW4gZGVncmVlcyBhbmQgdiByZXByZXNlbnRzIHZlcnRpY2FsIHJvdGF0aW9uXHJcbiAgICogaW4gZGVncmVlcy5cclxuICAgKi9cclxuICBzdGF0aWMgX3NwaGVyaWNhbFRvQmxlbmRWYWx1ZSh0aGV0YSwgcGhpKSB7XHJcbiAgICBjb25zdCBoID0gTWF0aFV0aWxzLnRvRGVncmVlcyhwaGkpO1xyXG5cclxuICAgIC8vIE9mZnNldCB0aGUgdmVydGljYWwgYW5nbGUgc28gMCBpcyBwb2ludGluZyBmb3J3YXJkIGluc3RlYWQgb2YgdXBcclxuICAgIGNvbnN0IHYgPSBNYXRoVXRpbHMudG9EZWdyZWVzKHRoZXRhKSAtIDkwO1xyXG5cclxuICAgIC8vIENvbnZlcnQgdmVydGljYWwgYW5nbGUgdG8gLTE4MCwgMTgwIHJhbmdlXHJcbiAgICByZXR1cm4geyBoLCB2IH1cclxuICB9XHJcblxyXG4gIF9vbkxheWVyQWRkZWQoeyBuYW1lIH0pIHtcclxuICAgIHRoaXMuX2xvb2tMYXllcnMgPSB0aGlzLl9sb29rTGF5ZXJzIHx8IHt9O1xyXG4gICAgdGhpcy5fYmxpbmtMYXllcnMgPSB0aGlzLl9ibGlua0xheWVycyB8fCB7fTtcclxuXHJcbiAgICBzdXBlci5fb25MYXllckFkZGVkKHsgbmFtZSB9KTtcclxuXHJcbiAgICAvLyBWYWxpZGF0ZSB0aGUgbG9vayBhbmltYXRpb25cclxuICAgIGlmICh0aGlzLl9sb29rTGF5ZXJzW25hbWVdICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhpcy5fcmVnaXN0ZXJMb29rQW5pbWF0aW9uKG5hbWUsIHRoaXMuX2xvb2tMYXllcnNbbmFtZV0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgX29uQW5pbWF0aW9uQWRkZWQoeyBsYXllck5hbWUsIGFuaW1hdGlvbk5hbWUgfSkge1xyXG4gICAgdGhpcy5fbG9va0xheWVycyA9IHRoaXMuX2xvb2tMYXllcnMgfHwge307XHJcbiAgICB0aGlzLl9ibGlua0xheWVycyA9IHRoaXMuX2JsaW5rTGF5ZXJzIHx8IHt9O1xyXG5cclxuICAgIHN1cGVyLl9vbkFuaW1hdGlvbkFkZGVkKHsgbGF5ZXJOYW1lIH0pO1xyXG5cclxuICAgIC8vIFZhbGlkYXRlIHRoZSBsb29rIGFuaW1hdGlvblxyXG4gICAgaWYgKHRoaXMuX2xvb2tMYXllcnNbbGF5ZXJOYW1lXSA9PT0gYW5pbWF0aW9uTmFtZSkge1xyXG4gICAgICB0aGlzLl9yZWdpc3Rlckxvb2tBbmltYXRpb24obGF5ZXJOYW1lLCBhbmltYXRpb25OYW1lKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEVuc3VyZSB0aGF0IHJlZ2lzdGVyZWQgbG9vayBhbmltYXRpb25zIGFyZSBCbGVuZDJkU3RhdGVzLlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllck5hbWUgLSBOYW1lIG9mIHRoZSBsYXllciB0aGF0IGNvbnRhaW5zIHRoZSBsb29rIGFuaW1hdGlvbi5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gYW5pbWF0aW9uTmFtZSAtIE5hbWUgb2YgdGhlIGFuaW1hdGlvbi5cclxuICAgKi9cclxuICBfcmVnaXN0ZXJMb29rQW5pbWF0aW9uKGxheWVyTmFtZSwgYW5pbWF0aW9uTmFtZSkge1xyXG4gICAgaWYgKHRoaXMuX21hbmFnZWRMYXllcnNbbGF5ZXJOYW1lXS5hbmltYXRpb25zW2FuaW1hdGlvbk5hbWVdLmlzQWN0aXZlKSB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICBBbmltYXRpb25UeXBlc1t0aGlzLl9ob3N0LkFuaW1hdGlvbkZlYXR1cmUuZ2V0QW5pbWF0aW9uVHlwZShcclxuICAgICAgICAgIGxheWVyTmFtZSxcclxuICAgICAgICAgIGFuaW1hdGlvbk5hbWVcclxuICAgICAgICApXSAhPT0gQW5pbWF0aW9uVHlwZXMuYmxlbmQyZFxyXG4gICAgICApIHtcclxuICAgICAgICAvLyBXYXJuIGFuZCBkZWFjdGl2YXRlIGlmIHRoZSByZWdpc3RlcmVkIHN0YXRlIGlzIG5vdCBibGVuZDJkXHJcbiAgICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgICAgYENhbm5vdCByZWdpc3RlciBQb2ludCBvZiBJbnRlcmVzdCBsb29rIGFuaW1hdGlvbiAke2FuaW1hdGlvbk5hbWV9IG9uIGxheWVyICR7bGF5ZXJOYW1lfSBmb3IgaG9zdCAke3RoaXMuX2hvc3QuaWR9LiBMb29rIGFuaW1hdGlvbnMgbXVzdCBiZSBvZiB0eXBlICdibGVuZDJkJy5gXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLl9tYW5hZ2VkTGF5ZXJzW2xheWVyTmFtZV0uYW5pbWF0aW9uc1tcclxuICAgICAgICAgIGFuaW1hdGlvbk5hbWVcclxuICAgICAgICBdLmlzQWN0aXZlID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENoZWNrIGlmIHRoZSBnaXZlbiBvYmplY3QgaXMgbm90IG9mIGFuIGVuZ2luZS1zcGVjaWZpYyB0eXBlLiBTaG91bGRcclxuICAgKiBiZSBvdmVybG9hZGVkIGZvciBlYWNoIHJlbmRlcmluZyBlbmdpbmUgaW1wbGVtZW50YXRpb24uXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHthbnl9IG9iaiAtIE9iamVjdCB0byB2YWxpZGF0ZS5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gICAqL1xyXG4gIHN0YXRpYyBfdmFsaWRhdGVUcmFuc2Zvcm1PYmplY3Qob2JqKSB7XHJcbiAgICByZXR1cm4gb2JqIGluc3RhbmNlb2YgT2JqZWN0O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2hlY2sgaWYgdGhlIGdpdmVuIGNvbmZpZ3VyYXRpb24gb2JqZWN0IGhhcyBhbHJlYWR5IGJlZW4gc3RvcmVkIGFzIGEgdHJhY2tpbmdcclxuICAgKiBjb25maWcuIElmIGl0IGhhcywgcmV0dXJuIHRoZSBzdG9yZWQgY29uZmlndXJhdGlvbi4gT3RoZXJ3aXNlLCBzdG9yZSBhbmRcclxuICAgKiByZXR1cm4gaXQuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyAtIE9iamVjdCBjb250YWluaW5nIHRyYWNrZXIsIHJlZmVyZW5jZSBhbmQgZm9yd2FyZEF4aXNcclxuICAgKiBwcm9wZXJ0aWVzLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge09iamVjdH1cclxuICAgKi9cclxuICBfYWRkVHJhY2tpbmdDb25maWcoY29uZmlnKSB7XHJcbiAgICBjb25zdCB0cmFja2luZ0NvbmZpZyA9IHRoaXMuX3RyYWNraW5nQ29uZmlncy5maW5kKGMgPT5cclxuICAgICAgYy5yZWZlcmVuY2UgPT09IGNvbmZpZy5yZWZlcmVuY2UgJiYgYy5mb3J3YXJkQXhpcyA9PT0gY29uZmlnLmZvcndhcmRBeGlzXHJcbiAgICApO1xyXG5cclxuICAgIGlmICh0cmFja2luZ0NvbmZpZykge1xyXG4gICAgICByZXR1cm4gdHJhY2tpbmdDb25maWc7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25maWcuYW5nbGVzID0geyBoOiAwLCB2OiAwIH07XHJcbiAgICAgIGNvbmZpZy5wcmV2QW5nbGVzID0geyBoOiAwLCB2OiAwIH07XHJcbiAgICAgIHRoaXMuX3RyYWNraW5nQ29uZmlncy5wdXNoKGNvbmZpZyk7XHJcbiAgICAgIHJldHVybiBjb25maWc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gdGhlIGRpc3RhbmNlIGJldHdlZW4gdGhlIGxvb2sgdHJhY2tlciBhbmQgdGhlIGxvb2sgdGFyZ2V0LlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XHJcbiAgICovXHJcbiAgX2dldFRhcmdldERpc3RhbmNlKCkge1xyXG4gICAgLy8gRmluZCB0aGUgdmVjdG9yIGJldHdlZW4gdGhlIGdsb2JhbCBwb3NpdGlvbnMgb2YgdHJhY2tlciBhbmQgdGFyZ2V0XHJcbiAgICBjb25zdCBzb3VyY2VQb3NpdGlvbiA9IHRoaXMuY29uc3RydWN0b3IuX2dldFdvcmxkUG9zaXRpb24odGhpcy5fbG9va1RyYWNrZXIpO1xyXG4gICAgY29uc3QgdGFyZ2V0UG9zaXRpb24gPSB0aGlzLmNvbnN0cnVjdG9yLl9nZXRXb3JsZFBvc2l0aW9uKHRoaXMuX3RhcmdldCk7XHJcbiAgICBjb25zdCBsb29rVmVjdG9yID0gW1xyXG4gICAgICB0YXJnZXRQb3NpdGlvblswXSAtIHNvdXJjZVBvc2l0aW9uWzBdLFxyXG4gICAgICB0YXJnZXRQb3NpdGlvblsxXSAtIHNvdXJjZVBvc2l0aW9uWzFdLFxyXG4gICAgICB0YXJnZXRQb3NpdGlvblsyXSAtIHNvdXJjZVBvc2l0aW9uWzJdXHJcbiAgICBdO1xyXG5cclxuICAgIHJldHVybiBNYXRoVXRpbHMuZ2V0VmVjdG9yTWFnbml0dWRlKGxvb2tWZWN0b3IpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVzZXQgYWxsIHN0b3JlZCB0cmFja2luZyBhbmdsZXMgdG8gMC5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICovXHJcbiAgX3Jlc2V0TG9va0FuZ2xlcygpIHtcclxuICAgIHRoaXMuX3RyYWNraW5nQ29uZmlncy5mb3JFYWNoKCh7IGFuZ2xlcyB9KSA9PiB7XHJcbiAgICAgIGFuZ2xlcy5oID0gMDtcclxuICAgICAgYW5nbGVzLnYgPSAwO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTdG9yZSB0aGUgZGlmZmVyZW5jZSBpbiBob3Jpem9udGFsIGFuZCB2ZXJ0aWNhbCByb3RhdGlvbiBmb3IgdGhlIHRyYWNrZXInc1xyXG4gICAqIHJlZmVyZW5jZSByb3RhdGlvbiBhbmQgdGhlIGRpcmVjdGlvbiBvZiB0aGUgdGFyZ2V0IGZyb20gdGhlIHRyYWNrZXIuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIF9zZXRMb29rQW5nbGVzKCkge1xyXG4gICAgLy8gR2V0IHRoZSBjdXJyZW50IHBvc2l0aW9ucyBvZiB0aGUgdHJhY2tlciBhbmQgdGFyZ2V0IG9iamVjdHNcclxuICAgIGNvbnN0IHRhcmdldFBvcyA9IHRoaXMuY29uc3RydWN0b3IuX2dldFdvcmxkUG9zaXRpb24odGhpcy5fdGFyZ2V0KTtcclxuICAgIGNvbnN0IHRyYWNrZXJQb3MgPSB0aGlzLmNvbnN0cnVjdG9yLl9nZXRXb3JsZFBvc2l0aW9uKHRoaXMuX2xvb2tUcmFja2VyKTtcclxuXHJcbiAgICAvLyBDaGVjayBpZiB0aGUgdGFyZ2V0IGhhcyBtb3ZlZFxyXG4gICAgdGhpcy5faXNUYXJnZXRNb3ZpbmcgPSBNYXRoVXRpbHMuZ2V0VmVjdG9yTWFnbml0dWRlKFtcclxuICAgICAgdGFyZ2V0UG9zWzBdIC0gdGhpcy5fcHJldlRhcmdldFBvc1swXSxcclxuICAgICAgdGFyZ2V0UG9zWzFdIC0gdGhpcy5fcHJldlRhcmdldFBvc1sxXSxcclxuICAgICAgdGFyZ2V0UG9zWzJdIC0gdGhpcy5fcHJldlRhcmdldFBvc1syXV1cclxuICAgICkgPiAwO1xyXG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLl9wcmV2VGFyZ2V0UG9zLCB0YXJnZXRQb3MpO1xyXG5cclxuXHJcbiAgICAvLyBDYWxjdWxhdGUgdGhlIGhvcml6b250YWwgYW5kIHZlcnRpY2FsIGFuZ2xlcyB0byByb3RhdGUgdG8gdGhlIHRhcmdldFxyXG4gICAgY29uc3QgdGFyZ2V0U3BoZXJpY2FsID0gTWF0aFV0aWxzLmNhcnRlc2lhblRvU3BoZXJpY2FsKFxyXG4gICAgICB0YXJnZXRQb3NbMF0gLSB0cmFja2VyUG9zWzBdLFxyXG4gICAgICB0YXJnZXRQb3NbMV0gLSB0cmFja2VyUG9zWzFdLFxyXG4gICAgICB0YXJnZXRQb3NbMl0gLSB0cmFja2VyUG9zWzJdXHJcbiAgICApO1xyXG4gICAgY29uc3QgdGFyZ2V0QW5nbGVzID0gdGhpcy5jb25zdHJ1Y3Rvci5fc3BoZXJpY2FsVG9CbGVuZFZhbHVlKFxyXG4gICAgICB0YXJnZXRTcGhlcmljYWxbMV0sXHJcbiAgICAgIHRhcmdldFNwaGVyaWNhbFsyXVxyXG4gICAgKTtcclxuXHJcbiAgICAvLyBDYWxjdWxhdGUgYW5nbGVzIHJlbGF0aXZlIHRvIHRoZSByZWZlcmVuY2Ugb2JqZWN0c1xyXG4gICAgdGhpcy5fdHJhY2tpbmdDb25maWdzLmZvckVhY2goKHtcclxuICAgICAgcmVmZXJlbmNlLFxyXG4gICAgICBmb3J3YXJkQXhpcyxcclxuICAgICAgYW5nbGVzXHJcbiAgICB9KSA9PiB7XHJcbiAgICAgIC8vIENhbGN1bGF0ZSB0aGUgaG9yaXpvbnRhbCBhbmQgdmVydGljYWwgYW5nbGVzIHRvIHJvdGF0ZSB0byB0aGUgZGlyZWN0aW9uIG9mIHRoZSB0cmFja2VyXHJcbiAgICAgIGNvbnN0IHJlZkRpcmVjdGlvbiA9IHRoaXMuY29uc3RydWN0b3IuX2dldE9iamVjdERpcmVjdGlvbihcclxuICAgICAgICByZWZlcmVuY2UsXHJcbiAgICAgICAgZm9yd2FyZEF4aXMsXHJcbiAgICAgICk7XHJcbiAgICAgIGNvbnN0IHJlZlNwaGVyaWNhbCA9IE1hdGhVdGlscy5jYXJ0ZXNpYW5Ub1NwaGVyaWNhbCguLi5yZWZEaXJlY3Rpb24pO1xyXG4gICAgICBjb25zdCByZWZBbmdsZXMgPSB0aGlzLmNvbnN0cnVjdG9yLl9zcGhlcmljYWxUb0JsZW5kVmFsdWUoXHJcbiAgICAgICAgcmVmU3BoZXJpY2FsWzFdLFxyXG4gICAgICAgIHJlZlNwaGVyaWNhbFsyXVxyXG4gICAgICApO1xyXG5cclxuICAgICAgLy8gU3RvcmUgdGhlIGRpZmZlcmVuY2VcclxuICAgICAgYW5nbGVzLmggPSB0YXJnZXRBbmdsZXMuaCAtIHJlZkFuZ2xlcy5oO1xyXG4gICAgICBhbmdsZXMudiA9IHRhcmdldEFuZ2xlcy52IC0gcmVmQW5nbGVzLnY7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiB0aGUgaG9yaXpvbnRhbCBhbmQgdmVydGljYWwgYW5nbGVzIGl0IHdvdWxkIHJlcXVpcmUgdG8gc2ltdWxhdGUgbG9va2luZ1xyXG4gICAqIGF0IHRoZSBnaXZlbiB0eXBlIG9mIGZhY2UgdGFyZ2V0XHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IHRhcmdldFR5cGUgLSBJbnRlZ2VyIHJlcHJlc2VudGluZyB0aGUgRmFjZVRhcmdldFR5cGUuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7T2JqZWN0fS0gQW4gb2JqZWN0IHdpdGggc2lnbmF0dXJlIHtyOiBudW1iZXIsIGg6IG51bWJlciwgdjogbnVtYmVyfVxyXG4gICAqIHdoZXJlICdyJyByZXByZXNlbnRzIHJhZGl1cywgaCByZXByZXNlbnRzIHRoZSBob3Jpem9udGFsL2F6aW11dGhhbCBhbmdsZSBhbmRcclxuICAgKiB2IHJlcHJlc2VudHMgdGhlIHZlcnRpY2FsL3BvbGFyIGFuZ2xlLlxyXG4gICAqL1xyXG4gIF9nZXRGYWNlVGFyZ2V0QW5nbGVzKHRhcmdldFR5cGUpIHtcclxuICAgIC8vIE5vIG9mZnNldCB3aGVuIHRoZSB0YXJnZXQgaXMgdGhlIGNlbnRlciBvZiB0aGUgZXllc1xyXG4gICAgaWYgKHRhcmdldFR5cGUgPT09IDApIHtcclxuICAgICAgcmV0dXJuIHsgaDogMCwgdjogMCB9O1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEJ1aWxkIGEgdmVjdG9yIHRvIHRoZSBmYWNlIHRhcmdldCB0eXBlIHVzaW5nIHRoZSBjdXJyZW50IGRpc3RhbmNlIHRvIHRoZSB0YXJnZXRcclxuICAgIGNvbnN0IGRpc3RhbmNlID0gdGhpcy5fZ2V0VGFyZ2V0RGlzdGFuY2UodGhpcy5fbG9va1RyYWNrZXIpO1xyXG4gICAgY29uc3QgZmFjZVZlY3RvciA9IFsuLi5GYWNlVmVjdG9yc1t0YXJnZXRUeXBlXV07XHJcbiAgICBmYWNlVmVjdG9yWzJdID0gZGlzdGFuY2U7XHJcbiAgICBjb25zdCBzcGhlcmljYWwgPSBNYXRoVXRpbHMuY2FydGVzaWFuVG9TcGhlcmljYWwoLi4uZmFjZVZlY3Rvcik7XHJcblxyXG4gICAgLy8gTWFrZSBzdXJlIHZhbHVlcyBhcmUgY2xhbXBlZCB3aXRoaW4gdGhlIHJhbmdlIG9mIG1vdGlvbiBvZiB0aGUgaHVtYW4gZXllLCBpbiBjYXNlIHRoZSB0YXJnZXQgaXMgdmVyeSBjbG9zZVxyXG4gICAgY29uc3QgYmxlbmRWYWx1ZXMgPSB0aGlzLmNvbnN0cnVjdG9yLl9zcGhlcmljYWxUb0JsZW5kVmFsdWUoc3BoZXJpY2FsWzFdLCBzcGhlcmljYWxbMl0pO1xyXG4gICAgYmxlbmRWYWx1ZXMuaCA9IE1hdGhVdGlscy5jbGFtcChibGVuZFZhbHVlcy5oLCAtMzUsIDM1KTtcclxuICAgIGJsZW5kVmFsdWVzLnYgPSBNYXRoVXRpbHMuY2xhbXAoYmxlbmRWYWx1ZXMudiwgLTI1LCAzMCk7XHJcblxyXG4gICAgcmV0dXJuIGJsZW5kVmFsdWVzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlZCB0aGUgc3RvcmVkIHNwZWVkIGFuZCBkdXJhdGlvbiB2YXJpYWJsZXMgZm9yIGEgbGF5ZXIgYmFzZWQgb24gdGhlXHJcbiAgICogY2hhbmdlIGluIGhvcml6b250YWwgYW5kIHZlcnRpY2FsIGFuZ2xlcyBvZiB0aGUgdHJhY2tlci5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGF5ZXJOYW1lIC0gTmFtZSBvZiB0aGUgbGF5ZXIgdG8gc3RvcmUgdmFsdWVzIG9uLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBoIC0gQ2hhbmdlIGluIGhvcml6b250YWwgYW5nbGUsIGluIGRlZ3JlZXMuXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IHYgLSBDaGFuZ2UgaW4gdmVydGljYWwgYW5nbGUsIGluIGRlZ3JlZXMuXHJcbiAgICovXHJcbiAgX3VwZGF0ZUxheWVyU3BlZWQobGF5ZXJOYW1lLCBoLCB2KSB7XHJcbiAgICBjb25zdCBsYXllciA9IHRoaXMuX21hbmFnZWRMYXllcnNbbGF5ZXJOYW1lXTtcclxuXHJcbiAgICAvLyBGcm9tIFwiUmVhbGlzdGljIEF2YXRhciBhbmQgaGVhZCBBbmltYXRpb24gVXNpbmcgYSBOZXVyb2Jpb2xvZ2ljYWwgTW9kZWwgb2YgVmlzdWFsIEF0dGVudGlvblwiLCBJdHRpLCBEaGF2YWxlLCBQaWdoaW5cclxuICAgIGxheWVyLm1heEhTcGVlZCA9IDQ3MyAqICgxIC0gTWF0aC5leHAoLWggLyA3LjgpKTtcclxuICAgIGxheWVyLm1heFZTcGVlZCA9IDQ3MyAqICgxIC0gTWF0aC5leHAoLXYgLyA3LjgpKTtcclxuXHJcbiAgICAvLyBGcm9tIFwiRXllcyBBbGl2ZVwiLCBMZWUsIEJhZGxlclxyXG4gICAgY29uc3QgRDAgPSAwLjAyNTtcclxuICAgIGNvbnN0IGQgPSAwLjAwMjM1O1xyXG4gICAgbGF5ZXIuaER1cmF0aW9uID0gRDAgKyBkICogaDtcclxuICAgIGxheWVyLnZEdXJhdGlvbiA9IEQwICsgZCAqIHY7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXQgdGhlIG1pY3JvU2FjY2FkZSBvYmplY3Qgd2l0aCBuZXcgcmFuZG9taXplZCB2YWx1ZXMuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVyTmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRoYXQgb3ducyB0aGUgc2FjY2FkZSBtb3Rpb24uXHJcbiAgICovXHJcbiAgX3NldE1pY3JvU2FjY2FkZShsYXllck5hbWUpIHtcclxuICAgIGNvbnN0IGxheWVyID0gdGhpcy5fbWFuYWdlZExheWVyc1tsYXllck5hbWVdO1xyXG4gICAgY29uc3QgeyBtaWNyb1NhY2NhZGUgfSA9IGxheWVyO1xyXG5cclxuICAgIGlmICh0aGlzLl90YXJnZXQpIHtcclxuICAgICAgLy8gTWljcm8gbW92ZW1lbnRzIHNob3VsZCBiZSBzbWFsbGVyIHdoZW4gZm9jdXNlZCBvbiBhIHRhcmdldFxyXG4gICAgICBtaWNyb1NhY2NhZGUuaCA9IFV0aWxzLmdldFJhbmRvbUZsb2F0KC4wMSwgLjE1KTtcclxuICAgICAgbWljcm9TYWNjYWRlLnYgPSBVdGlscy5nZXRSYW5kb21GbG9hdCguMDEsIC4xNSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBNaWNyb3NhY2NhZGVzLiBFbmN5Y2xvcGVkaWEgb2YgTmV1cm9zY2llbmNlLiAoMjAwOSkgU3ByaW5nZXIsIEJlcmxpbiwgSGVpZGVsYmVyZy4gaHR0cHM6Ly9kb2kub3JnLzEwLjEwMDcvOTc4LTMtNTQwLTI5Njc4LTJfMzQ5MlxyXG4gICAgICBtaWNyb1NhY2NhZGUuaCA9IFV0aWxzLmdldFJhbmRvbUZsb2F0KC4wMSwgLjMpO1xyXG4gICAgICBtaWNyb1NhY2NhZGUudiA9IFV0aWxzLmdldFJhbmRvbUZsb2F0KC4wMSwgLjMpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX3VwZGF0ZUxheWVyU3BlZWQobGF5ZXJOYW1lLCBtaWNyb1NhY2NhZGUuaCwgbWljcm9TYWNjYWRlLnYpO1xyXG5cclxuICAgIC8vIFJlc3RhcnQgdGhlIHRpbWVyXHJcbiAgICB0aGlzLl9pbml0aWFsaXplTWljcm9UaW1lcihsYXllck5hbWUsIC4uLk1pY3JvU2FjY2FkZVdhaXRSYW5nZXMuZGVmYXVsdCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXQgdGhlIG1hY3JvU2FjY2FkZSBvYmplY3Qgd2l0aCBuZXcgcmFuZG9taXplZCB2YWx1ZXMuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVyTmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRoYXQgb3ducyB0aGUgc2FjY2FkZSBtb3Rpb24uXHJcbiAgICovXHJcbiAgX3NldE1hY3JvU2FjY2FkZShsYXllck5hbWUpIHtcclxuICAgIGNvbnN0IGxheWVyID0gdGhpcy5fbWFuYWdlZExheWVyc1tsYXllck5hbWVdO1xyXG4gICAgY29uc3QgeyBtYWNyb1NhY2NhZGUgfSA9IGxheWVyO1xyXG4gICAgbGV0IG1hY3JvU2FjY2FkZVdhaXRSYW5nZTtcclxuXHJcbiAgICAvLyBJbmNyZWFzZSByYW5kb20gdmFsdWUgcmFuZ2Ugd2hlbiBub3QgZm9jdXNlZCBvbiBhIHRhcmdldFxyXG4gICAgaWYgKCF0aGlzLl90YXJnZXQpIHtcclxuICAgICAgbWFjcm9TYWNjYWRlV2FpdFJhbmdlID0gTWFjcm9TYWNjYWRlV2FpdFJhbmdlcy5kZWZhdWx0O1xyXG5cclxuICAgICAgLy8gTm9ybWFsIGh1bWFuIGhvcml6b250YWwgZXllIHJvdGF0aW9uIGxpbWl0IGlzIGFib3V0IDM1IGRlZ3JlZXNcclxuICAgICAgY29uc3QgaExpbWl0ID0gVXRpbHMuZ2V0UmFuZG9tRmxvYXQoLjE0MywgLjI4Nik7XHJcbiAgICAgIGNvbnN0IGhGYWN0b3IgPSBVdGlscy5nZXRSYW5kb21GbG9hdCgtaExpbWl0LCBoTGltaXQpO1xyXG4gICAgICBtYWNyb1NhY2NhZGUuaCA9IGhGYWN0b3IgKiAzNTtcclxuXHJcbiAgICAgIC8vIE5vcm1hbCBodW1hbiB2ZXJ0aWNhbCBleWUgcm90YXRpb24gbGltaXQgaXMgYWJvdXQgMjUgZGVncmVlcyB1cHdhcmQgYW5kIDMwIGRlZ3JlZXMgZG93bndhcmRcclxuICAgICAgY29uc3QgdkxpbWl0ID0gVXRpbHMuZ2V0UmFuZG9tRmxvYXQoLjA5MywgLjE4Nik7XHJcbiAgICAgIGNvbnN0IHZGYWN0b3IgPSBVdGlscy5nZXRSYW5kb21GbG9hdCgtdkxpbWl0LCB2TGltaXQpO1xyXG4gICAgICBtYWNyb1NhY2NhZGUudiA9IHZGYWN0b3IgPiAwID8gdkZhY3RvciAqIDI1IDogdkZhY3RvciAqIDMwO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFBpY2sgYSBuZXcgZmFjZSB0YXJnZXRcclxuICAgIGVsc2Uge1xyXG4gICAgICAvLyBTb2NpYWwgdHJpYW5nbGUgLSBzYWNjYWRlIGJldHdlZW4gZXllcyBhbmQgbW91dGgsIHdlaWdodGVkIHRvIGxvb2sgYXQgZXllcyBtb3JlIG9mdGVuXHJcbiAgICAgIHN3aXRjaCAobGF5ZXIuc2FjY2FkZVRhcmdldCkge1xyXG4gICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgIG1hY3JvU2FjY2FkZVdhaXRSYW5nZSA9IE1hY3JvU2FjY2FkZVdhaXRSYW5nZXMuZXllVGFyZ2V0O1xyXG4gICAgICAgICAgbGF5ZXIuc2FjY2FkZVRhcmdldCA9IE1hdGgucmFuZG9tKCkgPCAwLjc1ID8gRmFjZVRhcmdldFR5cGVzLkV5ZVJpZ2h0XHJcbiAgICAgICAgICAgIDogRmFjZVRhcmdldFR5cGVzLk1vdXRoO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgbWFjcm9TYWNjYWRlV2FpdFJhbmdlID0gTWFjcm9TYWNjYWRlV2FpdFJhbmdlcy5leWVUYXJnZXQ7XHJcbiAgICAgICAgICBsYXllci5zYWNjYWRlVGFyZ2V0ID0gTWF0aC5yYW5kb20oKSA8IDAuNzUgPyBGYWNlVGFyZ2V0VHlwZXMuRXllTGVmdFxyXG4gICAgICAgICAgICA6IEZhY2VUYXJnZXRUeXBlcy5Nb3V0aDtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgMzpcclxuICAgICAgICAgIG1hY3JvU2FjY2FkZVdhaXRSYW5nZSA9IE1hY3JvU2FjY2FkZVdhaXRSYW5nZXMubW91dGhUYXJnZXQ7XHJcbiAgICAgICAgICBsYXllci5zYWNjYWRlVGFyZ2V0ID0gTWF0aC5yYW5kb20oKSA8IDAuNSA/IEZhY2VUYXJnZXRUeXBlcy5FeWVMZWZ0XHJcbiAgICAgICAgICAgIDogRmFjZVRhcmdldFR5cGVzLkV5ZVJpZ2h0O1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAwOlxyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICBtYWNyb1NhY2NhZGVXYWl0UmFuZ2UgPSBNYWNyb1NhY2NhZGVXYWl0UmFuZ2VzLmV5ZVRhcmdldDtcclxuICAgICAgICAgIGxheWVyLnNhY2NhZGVUYXJnZXQgPSBNYXRoLnJhbmRvbSgpIDwgMC41ID8gRmFjZVRhcmdldFR5cGVzLkV5ZUxlZnRcclxuICAgICAgICAgICAgOiBGYWNlVGFyZ2V0VHlwZXMuRXllUmlnaHQ7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgeyBoLCB2IH0gPSB0aGlzLl9nZXRGYWNlVGFyZ2V0QW5nbGVzKGxheWVyLnNhY2NhZGVUYXJnZXQpO1xyXG4gICAgICBtYWNyb1NhY2NhZGUuaCA9IGg7XHJcbiAgICAgIG1hY3JvU2FjY2FkZS52ID0gdjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl91cGRhdGVMYXllclNwZWVkKGxheWVyTmFtZSwgbWFjcm9TYWNjYWRlLmgsIG1hY3JvU2FjY2FkZS52KTtcclxuXHJcbiAgICAvLyBSZXN0YXJ0IHRoZSB0aW1lcnNcclxuICAgIHRoaXMuX2luaXRpYWxpemVNaWNyb1RpbWVyKGxheWVyTmFtZSwgLi4uTWljcm9TYWNjYWRlV2FpdFJhbmdlcy5wb3N0TWFjcm8pO1xyXG4gICAgdGhpcy5faW5pdGlhbGl6ZU1hY3JvVGltZXIobGF5ZXJOYW1lLCAuLi5tYWNyb1NhY2NhZGVXYWl0UmFuZ2UpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU3RhcnQgYSBuZXcgd2FpdCB0aW1lciB0aGF0IHdpbGwgc2V0IGEgbmV3IG1pY3JvIHNhY2NhZGUgbW92ZW1lbnQgd2hlbiBpdFxyXG4gICAqIHJlc29sdmVzLlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllck5hbWUgLSBOYW1lIG9mIHRoZSBsYXllciB0aGF0IG93bnMgdGhlIHNhY2NhZGUgbW90aW9uLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBtaW5XYWl0VGltZSAtIE1pbmltdW0gbnVtYmVyIG9mIHNlY29uZHMgYmVmb3JlIGEgbmV3IHNhY2NhZGVcclxuICAgKiB3aWxsIGJlIHRyaWdnZXJlZC5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gbWF4V2FpdFRpbWUgLSBNYXhpbXVtIG51bWJlciBvZiBzZWNvbmRzIGJlZm9yZSBhIG5ldyBzYWNjYWRlXHJcbiAgICogd2lsbCBiZSB0cmlnZ2VyZWQuXHJcbiAgICovXHJcbiAgX2luaXRpYWxpemVNaWNyb1RpbWVyKGxheWVyTmFtZSwgbWluV2FpdFRpbWUsIG1heFdhaXRUaW1lKSB7XHJcbiAgICBjb25zdCBsYXllciA9IHRoaXMuX21hbmFnZWRMYXllcnNbbGF5ZXJOYW1lXTtcclxuICAgIGNvbnN0IHdhaXRUaW1lID0gVXRpbHMuZ2V0UmFuZG9tRmxvYXQobWluV2FpdFRpbWUsIG1heFdhaXRUaW1lKTtcclxuXHJcbiAgICBpZiAobGF5ZXIubWljcm9TYWNjYWRlVGltZXIpIHtcclxuICAgICAgbGF5ZXIubWljcm9TYWNjYWRlVGltZXIuY2FuY2VsKCk7XHJcbiAgICB9XHJcbiAgICBsYXllci5taWNyb1NhY2NhZGVUaW1lciA9IFV0aWxzLndhaXQod2FpdFRpbWUsIHtcclxuICAgICAgb25GaW5pc2g6ICgpID0+IHsgdGhpcy5fc2V0TWljcm9TYWNjYWRlKGxheWVyTmFtZSkgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTdGFydCBhIG5ldyB3YWl0IHRpbWVyIHRoYXQgd2lsbCBzZXQgYSBuZXcgbWFjcm8gc2FjY2FkZSBtb3ZlbWVudCB3aGVuIGl0XHJcbiAgICogcmVzb2x2ZXMuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVyTmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRoYXQgb3ducyB0aGUgc2FjY2FkZSBtb3Rpb24uXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IG1pbldhaXRUaW1lIC0gTWluaW11bSBudW1iZXIgb2Ygc2Vjb25kcyBiZWZvcmUgYSBuZXcgc2FjY2FkZVxyXG4gICAqIHdpbGwgYmUgdHJpZ2dlcmVkLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBtYXhXYWl0VGltZSAtIE1heGltdW0gbnVtYmVyIG9mIHNlY29uZHMgYmVmb3JlIGEgbmV3IHNhY2NhZGVcclxuICAgKiB3aWxsIGJlIHRyaWdnZXJlZC5cclxuICAgKi9cclxuICBfaW5pdGlhbGl6ZU1hY3JvVGltZXIobGF5ZXJOYW1lLCBtaW5XYWl0VGltZSwgbWF4V2FpdFRpbWUpIHtcclxuICAgIGNvbnN0IGxheWVyID0gdGhpcy5fbWFuYWdlZExheWVyc1tsYXllck5hbWVdO1xyXG4gICAgY29uc3Qgd2FpdFRpbWUgPSBVdGlscy5nZXRSYW5kb21GbG9hdChtaW5XYWl0VGltZSwgbWF4V2FpdFRpbWUpO1xyXG5cclxuICAgIGlmIChsYXllci5tYWNyb1NhY2NhZGVUaW1lcikge1xyXG4gICAgICBsYXllci5tYWNyb1NhY2NhZGVUaW1lci5jYW5jZWwoKTtcclxuICAgIH1cclxuICAgIGxheWVyLm1hY3JvU2FjY2FkZVRpbWVyID0gVXRpbHMud2FpdCh3YWl0VGltZSwge1xyXG4gICAgICBvbkZpbmlzaDogKCkgPT4geyB0aGlzLl9zZXRNYWNyb1NhY2NhZGUobGF5ZXJOYW1lKSB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHMgYSBuZXcgdGFyZ2V0IHRvIGxvb2sgYXQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge09iamVjdHxudWxsfSB0YXJnZXQgLSBUaGUgbmV3IHRhcmdldCB0byBsb29rIGF0LlxyXG4gICAqL1xyXG4gIHNldFRhcmdldCh0YXJnZXQpIHtcclxuICAgIHRoaXMudGFyZ2V0ID0gdGFyZ2V0O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRmluZHMgYW4gb2JqZWN0IGdpdmVuIGl0cyBuYW1lIGFuZCBzZXRzIGl0IGFzIHRoZSBuZXcgdGFyZ2V0IHRvIGxvb2sgYXQuXHJcbiAgICogU2hvdWxkIGJlIG92ZXJsb2FkZWQgZm9yIGVhY2ggcmVuZGVyaW5nIGVuZ2luZSBpbXBsZW1lbnRhdGlvbi5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0YXJnZXQgLSBOYW1lIHRvIHNlYXJjaCBmb3IuXHJcbiAgICovXHJcbiAgc2V0VGFyZ2V0QnlOYW1lKG5hbWUpIHtcclxuICAgIGlmICghbmFtZSkge1xyXG4gICAgICB0aGlzLl90YXJnZXQgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5fc2NlbmUpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3Qgc2V0IFBvaW50T2ZJbnRlcmVzdEZlYXR1cmUgdGFyZ2V0IHVzaW5nIG5hbWUgJHtuYW1lfSBvbiBob3N0ICR7dGhpcy5faG9zdC5pZH0uIFNjZW5lIG11c3QgYmUgZGVmaW5lZC5gKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEZpbmRzIGFuIG9iamVjdCBnaXZlbiBpdHMgaWQgYW5kIHNldHMgaXQgYXMgdGhlIG5ldyB0YXJnZXQgdG8gbG9vayBhdC5cclxuICAgKiBTaG91bGQgYmUgb3ZlcmxvYWRlZCBmb3IgZWFjaCByZW5kZXJpbmcgZW5naW5lIGltcGxlbWVudGF0aW9uLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSB0YXJnZXQgLSBJZCB0byBzZWFyY2ggZm9yLlxyXG4gICAqL1xyXG4gIHNldFRhcmdldEJ5SWQoaWQpIHtcclxuICAgIGlmICghaWQpIHtcclxuICAgICAgdGhpcy5fdGFyZ2V0ID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMuX3NjZW5lKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IHNldCBQb2ludE9mSW50ZXJlc3RGZWF0dXJlIHRhcmdldCB1c2luZyBpZCAke2lkfSBvbiBob3N0ICR7dGhpcy5faG9zdC5pZH0uIFNjZW5lIG11c3QgYmUgZGVmaW5lZC5gKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFN0YXJ0IGtlZXBpbmcgdHJhY2sgb2YgYW4gYW5pbWF0aW9uIGxheWVyIHRoYXQgb3ducyBhIGJsZW5kMmQgYW5pbWF0aW9uIHdpdGhcclxuICAgKiBibGVuZFdlaWdodHMgY29ycmVzcG9uZGluZyB0byBob3Jpem9udGFsIGFuZCB2ZXJ0aWNhbCBsb29rIGFuZ2xlcy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllck5hbWUgLSBOYW1lIG9mIHRoZSBsYXllciB0byBrZWVwIHRyYWNrIG9mLlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0PX0gb3B0aW9ucyAtIE9wdGlvbnMgZm9yIHRoZSBsYXllci5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuYW5pbWF0aW9uID0gJ2xvb2snXSAtIE5hbWUgb2YgdGhlIGFuaW1hdGlvbiBvbiB0aGVcclxuICAgKiBsYXllciB3aG9zZSBibGVuZFdlaWdodHMgd2lsbCBiZSBkcml2ZW4gYmFzZWQgb24gdGhlIGFuZ2xlIGJldHdlZW4gdGhlIGxvb2tUcmFja2VyXHJcbiAgICogYW5kIHRoZSBsb29rVGFyZ2V0LiBUaGlzIGFuaW1hdGlvbiBtdXN0IGJlIG9mIHR5cGUgYmxlbmQyZC5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMubWF4U3BlZWQgPSAyNV0gLSBUaGUgbWF4aW11bSBzcGVlZCBhdCB3aGljaCB0aGUgYmxlbmQyZFxyXG4gICAqIGJsZW5kV2VpZ2h0cyBjYW4gYmUgbWFuaXB1bGF0ZWQuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmZvcndhcmRBeGlzID0gJ1Bvc2l0aXZlWiddIC0gQXhpcyBwb2ludGluZyBmcm9tIHRoZVxyXG4gICAqIGZyb250IG9mIHRoZSBsb29rUmVmZXJlbmNlIG9iamVjdC4gVmFsaWQgb3B0aW9ucyBhcmUgJ1Bvc2l0aXZlWCcsICdOZWdhdGl2ZVgnLFxyXG4gICAqICdQb3NpdGl2ZVknLCAnTmVnYXRpdmVZJywgJ1Bvc2l0aXZlWicsICdOZWdhdGl2ZVonLlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0PX0gb3B0aW9ucy5sb29rUmVmZXJlbmNlIC0gM0QgdHJhbnNmb3JtYXRpb24gbm9kZSB0aGF0IHRoZSBsb29rVHJhY2tlclxyXG4gICAqIHJvdGF0aW9uIGxpbWl0cyBzaG91bGQgYmUgY2FsY3VsYXRlZCByZWxhdGl2ZSB0by4gRGVmYXVsdHMgdG8gdGhlIGhvc3Qgb3duZXIuXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLmhhc1NhY2NhZGUgPSBmYWxzZV0gLSBXaGV0aGVyIG9yIG5vdCB0byBpbmNsdWRlXHJcbiAgICogc2FjY2FkaWMgbW90aW9uIG9udG8gdGhlIGJsZW5kV2VpZ2h0IGFuaW1hdGlvbi4gVGhpcyBzaG91bGQgb25seSBiZSBzZXQgdG9cclxuICAgKiB0cnVlIGZvciBibGVuZDJkIGFuaW1hdGlvbnMgcmVwcmVzZW50aW5nIGV5ZSBhbmltYXRpb24uXHJcbiAgICogQHBhcmFtIHtudW1iZXI9fSBbb3B0aW9ucy5ibGVuZFRpbWU9W1BvaW50T2ZJbnRlcmVzdEZlYXR1cmUuREVGQVVMVF9MQVlFUl9PUFRJT05TLmJsZW5kVGltZV17QGxpbmsgUG9pbnRPZkludGVyZXN0RmVhdHVyZSNERUZBVUxUX0xBWUVSX09QVElPTlMjYmxlbmRUaW1lfV0gLVxyXG4gICAqIERlZmF1bHQgYW1vdW50IG9mIHRpbWUgdG8gdXNlIHdoZW4gbWFuaXB1bGF0aW5nIGxheWVyIHdlaWdodC5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb3B0aW9ucy5lYXNpbmdGbiAtIERlZmF1bHQgZWFzaW5nIGZ1bmN0aW9uIHRvIHVzZSB3aGVuXHJcbiAgICogbWFuaXB1bGF0aW5nIGxheWVyIHdlaWdodC5cclxuICAgKi9cclxuICByZWdpc3Rlckxvb2tMYXllcihcclxuICAgIGxheWVyTmFtZSxcclxuICAgIHtcclxuICAgICAgYW5pbWF0aW9uID0gJ2xvb2snLFxyXG4gICAgICBtYXhTcGVlZCA9IDI1LFxyXG4gICAgICByZWZlcmVuY2UsXHJcbiAgICAgIGZvcndhcmRBeGlzID0gJ1Bvc2l0aXZlWicsXHJcbiAgICAgIGhhc1NhY2NhZGUgPSBmYWxzZSxcclxuICAgICAgYmxlbmRUaW1lID0gUG9pbnRPZkludGVyZXN0RmVhdHVyZS5ERUZBVUxUX0xBWUVSX09QVElPTlMuYmxlbmRUaW1lLFxyXG4gICAgICBlYXNpbmdGblxyXG4gICAgfSA9IHt9XHJcbiAgKSB7XHJcbiAgICAvLyBWYWxpZGF0ZSByZWZlcmVuY2Ugb2JqZWN0XHJcbiAgICByZWZlcmVuY2UgPSByZWZlcmVuY2UgfHwgdGhpcy5faG9zdC5vd25lcjtcclxuXHJcbiAgICBpZiAoIXRoaXMuY29uc3RydWN0b3IuX3ZhbGlkYXRlVHJhbnNmb3JtT2JqZWN0KHJlZmVyZW5jZSkpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgaW5pdGlhbGl6ZSByZWdpc3RlciBsb29rIGxheWVyICR7bGF5ZXJOYW1lfSBmb3IgUG9pbnRPZkludGVyZXN0RmVhdHVyZSBvbiBob3N0ICR7dGhpcy5faG9zdC5pZH0uIFJlZmVyZW5jZSBtdXN0IGJlIGRlZmluZWQgYXMgYSB2YWxpZCB0cmFuc2Zvcm1hdGlvbiBvYmplY3QuYCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gRmluZCB2ZWN0b3IgYXNzb2NpYXRlZCB3aXRoIGF4aXMgc3RyaW5nXHJcbiAgICBmb3J3YXJkQXhpcyA9IEF4aXNNYXBbZm9yd2FyZEF4aXNdICE9PSB1bmRlZmluZWRcclxuICAgICAgPyBBeGlzTWFwW2ZvcndhcmRBeGlzXVxyXG4gICAgICA6IEF4aXNNYXAuUG9zaXRpdmVaO1xyXG5cclxuICAgIC8vIFN0b3JlIHRyYWNraW5nIGNvbmZpZ3VyYXRpb25cclxuICAgIGNvbnN0IHRyYWNraW5nQ29uZmlnID0gdGhpcy5fYWRkVHJhY2tpbmdDb25maWcoe1xyXG4gICAgICByZWZlcmVuY2UsXHJcbiAgICAgIGZvcndhcmRBeGlzXHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBSZWdpc3RlciB0aGUgbGF5ZXIgYW5kIGFuaW1hdGlvblxyXG4gICAgdGhpcy5yZWdpc3RlckxheWVyKGxheWVyTmFtZSwge1xyXG4gICAgICB0cmFja2luZ0NvbmZpZyxcclxuICAgICAgbWF4U3BlZWQsXHJcbiAgICAgIG1heEhTcGVlZDogdW5kZWZpbmVkLFxyXG4gICAgICBtYXhWU3BlZWQ6IHVuZGVmaW5lZCxcclxuICAgICAgaER1cmF0aW9uOiB1bmRlZmluZWQsXHJcbiAgICAgIHZEdXJhdGlvbjogdW5kZWZpbmVkLFxyXG4gICAgICBoVmVsb2NpdHk6IFswLCAwXSxcclxuICAgICAgdlZlbG9jaXR5OiBbMCwgMF0sXHJcbiAgICAgIGhhc1NhY2NhZGUsXHJcbiAgICAgIGJsZW5kVGltZSxcclxuICAgICAgZWFzaW5nRm4sXHJcbiAgICAgIG1pY3JvU2FjY2FkZTogeyBoOiAwLCB2OiAwIH0sXHJcbiAgICAgIG1hY3JvU2FjY2FkZTogeyBoOiAwLCB2OiAwIH0sXHJcbiAgICAgIHNhY2NhZGVUYXJnZXQ6IEZhY2VUYXJnZXRUeXBlcy5FeWVDZW50ZXIsXHJcbiAgICAgIGFuaW1hdGlvbnM6IHsgW2FuaW1hdGlvbl06IHt9IH0sXHJcbiAgICB9KTtcclxuICAgIHRoaXMuX2xvb2tMYXllcnNbbGF5ZXJOYW1lXSA9IGFuaW1hdGlvbjtcclxuXHJcbiAgICAvLyBWYWxpZGF0ZSB0aGUgbG9vayBhbmltYXRpb25cclxuICAgIHRoaXMuX3JlZ2lzdGVyTG9va0FuaW1hdGlvbihsYXllck5hbWUsIGFuaW1hdGlvbik7XHJcblxyXG4gICAgLy8gSW5pdGlhbGl6ZSBzYWNjYWRlIHRpbWVyc1xyXG4gICAgaWYgKGhhc1NhY2NhZGUpIHtcclxuICAgICAgY29uc3QgbWFjcm9TYWNjYWRlV2FpdFJhbmdlID0gdGhpcy5fdGFyZ2V0XHJcbiAgICAgICAgPyBNYWNyb1NhY2NhZGVXYWl0UmFuZ2VzLmV5ZVRhcmdldFxyXG4gICAgICAgIDogTWFjcm9TYWNjYWRlV2FpdFJhbmdlcy5kZWZhdWx0O1xyXG4gICAgICB0aGlzLl9pbml0aWFsaXplTWljcm9UaW1lcihsYXllck5hbWUsIC4uLk1pY3JvU2FjY2FkZVdhaXRSYW5nZXMuZGVmYXVsdCk7XHJcbiAgICAgIHRoaXMuX2luaXRpYWxpemVNYWNyb1RpbWVyKGxheWVyTmFtZSwgLi4ubWFjcm9TYWNjYWRlV2FpdFJhbmdlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFN0YXJ0IGtlZXBpbmcgdHJhY2sgb2YgYW4gYW5pbWF0aW9uIGxheWVyIHRoYXQgb3ducyBhIGJsaW5rIGFuaW1hdGlvbi4gQmxpbmtcclxuICAgKiBhbmltYXRpb25zIGNhbiBiZSBvZiBhbnkgdHlwZSwgYnV0IGlmIGl0IGlzIG9mIHR5cGUgcmFuZG9tQW5pbWF0aW9uIHRoZW4gYVxyXG4gICAqIGl0IHdpbGwgYmUgcmFuZG9taXplZCBlYWNoIHRpbWUgYSBibGluayBpcyBjYWxsZWQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGF5ZXJOYW1lIC0gTmFtZSBvZiB0aGUgbGF5ZXIgdG8ga2VlcCB0cmFjayBvZi5cclxuICAgKiBAcGFyYW0ge09iamVjdD19IG9wdGlvbnMgLSBPcHRpb25zIGZvciB0aGUgbGF5ZXIuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmFuaW1hdGlvbiA9ICdibGluayddIC0gTmFtZSBvZiB0aGUgYmxpbmsgYW5pbWF0aW9uXHJcbiAgICogb24gdGhlIGxheWVyLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5ibGVuZFRpbWU9W1BvaW50T2ZJbnRlcmVzdEZlYXR1cmUuREVGQVVMVF9MQVlFUl9PUFRJT05TLmJsZW5kVGltZV17QGxpbmsgUG9pbnRPZkludGVyZXN0RmVhdHVyZSNERUZBVUxUX0xBWUVSX09QVElPTlMjYmxlbmRUaW1lfV0gLVxyXG4gICAqIERlZmF1bHQgYW1vdW50IG9mIHRpbWUgdG8gdXNlIHdoZW4gbWFuaXB1bGF0aW5nIHRoZSBsYXllcidzIHdlaWdodC5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb3B0aW9ucy5lYXNpbmdGbiAtIERlZmF1bHQgZWFzaW5nIGZ1bmN0aW9uIHRvIHVzZSB3aGVuXHJcbiAgICogbWFuaXB1bGF0aW5nIHRoZSBsYXllcidzIHdlaWdodC5cclxuICAgKi9cclxuICByZWdpc3RlckJsaW5rTGF5ZXIoXHJcbiAgICBsYXllck5hbWUsXHJcbiAgICB7XHJcbiAgICAgIGFuaW1hdGlvbiA9ICdibGluaycsXHJcbiAgICAgIGJsZW5kVGltZSA9IFBvaW50T2ZJbnRlcmVzdEZlYXR1cmUuREVGQVVMVF9MQVlFUl9PUFRJT05TLmJsZW5kVGltZSxcclxuICAgICAgZWFzaW5nRm5cclxuICAgIH0gPSB7fVxyXG4gICkge1xyXG4gICAgLy8gUmVnaXN0ZXIgdGhlIGxheWVyIGFuZCBhbmltYXRpb25cclxuICAgIHRoaXMucmVnaXN0ZXJMYXllcihsYXllck5hbWUsIHtcclxuICAgICAgYmxlbmRUaW1lLFxyXG4gICAgICBlYXNpbmdGbixcclxuICAgICAgYW5pbWF0aW9uczogeyBbYW5pbWF0aW9uXToge30gfSxcclxuICAgIH0pO1xyXG4gICAgdGhpcy5fYmxpbmtMYXllcnNbbGF5ZXJOYW1lXSA9IGFuaW1hdGlvbjtcclxuICB9XHJcblxyXG4gIHVwZGF0ZShkZWx0YVRpbWUpIHtcclxuICAgIHN1cGVyLnVwZGF0ZShkZWx0YVRpbWUpO1xyXG5cclxuICAgIC8vIFVwZGF0ZSB0aGUgbG9vayBhbmdsZXNcclxuICAgIGlmICh0aGlzLl90YXJnZXQpIHtcclxuICAgICAgdGhpcy5fc2V0TG9va0FuZ2xlcygpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fcmVzZXRMb29rQW5nbGVzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZGVsdGFTZWNvbmRzID0gTWF0aC5taW4oZGVsdGFUaW1lLCBNYXhEZWx0YSkgLyAxMDAwO1xyXG4gICAgbGV0IHRyaWdnZXJCbGluayA9IGZhbHNlO1xyXG5cclxuICAgIC8vIFNldCBsb29rIGJsZW5kIHZhbHVlc1xyXG4gICAgT2JqZWN0LmVudHJpZXModGhpcy5fbG9va0xheWVycykuZm9yRWFjaCgoW2xheWVyTmFtZSwgYW5pbU5hbWVdKSA9PiB7XHJcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLl9tYW5hZ2VkTGF5ZXJzW2xheWVyTmFtZV07XHJcblxyXG4gICAgICAvLyBJbmNyZW1lbnQgdGhlIHNhY2NhZGUgdGltZXJzXHJcbiAgICAgIGlmIChvcHRpb25zLmlzQWN0aXZlICYmIG9wdGlvbnMuaGFzU2FjY2FkZSkge1xyXG4gICAgICAgIG9wdGlvbnMubWljcm9TYWNjYWRlVGltZXIuZXhlY3V0ZShkZWx0YVRpbWUpO1xyXG4gICAgICAgIG9wdGlvbnMubWFjcm9TYWNjYWRlVGltZXIuZXhlY3V0ZShkZWx0YVRpbWUpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBTZXQgdGhlIGJsZW5kIHZhbHVlc1xyXG4gICAgICBpZiAob3B0aW9ucy5hbmltYXRpb25zW2FuaW1OYW1lXS5pc0FjdGl2ZSkge1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRIID0gdGhpcy5faG9zdC5BbmltYXRpb25GZWF0dXJlLmdldEFuaW1hdGlvbkJsZW5kV2VpZ2h0KFxyXG4gICAgICAgICAgbGF5ZXJOYW1lLCBhbmltTmFtZSwgJ1gnXHJcbiAgICAgICAgKTtcclxuICAgICAgICBjb25zdCBjdXJyZW50ViA9IHRoaXMuX2hvc3QuQW5pbWF0aW9uRmVhdHVyZS5nZXRBbmltYXRpb25CbGVuZFdlaWdodChcclxuICAgICAgICAgIGxheWVyTmFtZSwgYW5pbU5hbWUsICdZJ1xyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIGxldCB0YXJnZXRIID0gb3B0aW9ucy50cmFja2luZ0NvbmZpZy5hbmdsZXMuaDtcclxuICAgICAgICBsZXQgdGFyZ2V0ViA9IG9wdGlvbnMudHJhY2tpbmdDb25maWcuYW5nbGVzLnY7XHJcblxyXG4gICAgICAgIC8vIENoZWNrIGlmIHRoZSBsb29rIGFuZ2xlIGhhcyBjaGFuZ2VkIGVub3VnaCB0byB0cmlnZ2VyIGEgYmxpbmtcclxuICAgICAgICBpZiAodGhpcy5faXNUYXJnZXRNb3ZpbmcgJiYgIXRyaWdnZXJCbGluaykge1xyXG4gICAgICAgICAgY29uc3QgcHJldlRhcmdldEggPSBvcHRpb25zLnRyYWNraW5nQ29uZmlnLnByZXZBbmdsZXMuaDtcclxuICAgICAgICAgIGNvbnN0IHByZXZUYXJnZXRWID0gb3B0aW9ucy50cmFja2luZ0NvbmZpZy5wcmV2QW5nbGVzLnY7XHJcbiAgICAgICAgICBjb25zdCBjaGFuZ2VBbW91bnQgPSBNYXRoVXRpbHMudG9EZWdyZWVzKFxyXG4gICAgICAgICAgICBNYXRoVXRpbHMuZ2V0QW5nbGVCZXR3ZWVuKFxyXG4gICAgICAgICAgICAgIFtwcmV2VGFyZ2V0SCwgcHJldlRhcmdldFZdLFxyXG4gICAgICAgICAgICAgIFt0YXJnZXRILCB0YXJnZXRWXVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgIGlmIChjaGFuZ2VBbW91bnQgPj0gQmxpbmtUaHJlc2hvbGQpIHtcclxuICAgICAgICAgICAgdHJpZ2dlckJsaW5rID0gdHJ1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIG9wdGlvbnMudHJhY2tpbmdDb25maWcucHJldkFuZ2xlcy5oID0gdGFyZ2V0SDtcclxuICAgICAgICBvcHRpb25zLnRyYWNraW5nQ29uZmlnLnByZXZBbmdsZXMudiA9IHRhcmdldFY7XHJcblxyXG4gICAgICAgIC8vIEFkZCBpbiB0aGUgc2FjY2FkZSBtb3ZlbWVudFxyXG4gICAgICAgIGlmIChvcHRpb25zLmhhc1NhY2NhZGUpIHtcclxuICAgICAgICAgIE1hdGhVdGlscy5kYW1wVmFsdWUoXHJcbiAgICAgICAgICAgIDAsXHJcbiAgICAgICAgICAgIG9wdGlvbnMubWFjcm9TYWNjYWRlLmggKyBvcHRpb25zLm1hY3JvU2FjY2FkZS5oLFxyXG4gICAgICAgICAgICBvcHRpb25zLmhWZWxvY2l0eSxcclxuICAgICAgICAgICAgb3B0aW9ucy5oRHVyYXRpb24sXHJcbiAgICAgICAgICAgIG9wdGlvbnMubWF4SFNwZWVkXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgdGFyZ2V0SCArPSBvcHRpb25zLmhWZWxvY2l0eVswXTtcclxuICAgICAgICAgIE1hdGhVdGlscy5kYW1wVmFsdWUoXHJcbiAgICAgICAgICAgIDAsXHJcbiAgICAgICAgICAgIG9wdGlvbnMubWFjcm9TYWNjYWRlLnYgKyBvcHRpb25zLm1hY3JvU2FjY2FkZS52LFxyXG4gICAgICAgICAgICBvcHRpb25zLnZWZWxvY2l0eSxcclxuICAgICAgICAgICAgb3B0aW9ucy52RHVyYXRpb24sXHJcbiAgICAgICAgICAgIG9wdGlvbnMubWF4VlNwZWVkXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgdGFyZ2V0ViArPSBvcHRpb25zLnZWZWxvY2l0eVswXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIENsYW1wIHRvIG1heCBzcGVlZFxyXG4gICAgICAgIGNvbnN0IGZhY3RvciA9IE1hdGhVdGlscy5jbGFtcChkZWx0YVNlY29uZHMgKiBvcHRpb25zLm1heFNwZWVkLCAwLCAxKTtcclxuICAgICAgICB0YXJnZXRIID0gTWF0aFV0aWxzLmxlcnAoY3VycmVudEgsIHRhcmdldEgsIGZhY3Rvcik7XHJcbiAgICAgICAgdGFyZ2V0ViA9IE1hdGhVdGlscy5sZXJwKGN1cnJlbnRWLCB0YXJnZXRWLCBmYWN0b3IpO1xyXG5cclxuICAgICAgICAvLyBVcGRhdGUgdGhlIGJsZW5kIHZhbHVlc1xyXG4gICAgICAgIHRoaXMuX2hvc3QuQW5pbWF0aW9uRmVhdHVyZS5zZXRBbmltYXRpb25CbGVuZFdlaWdodChcclxuICAgICAgICAgIGxheWVyTmFtZSxcclxuICAgICAgICAgIGFuaW1OYW1lLFxyXG4gICAgICAgICAgJ1gnLFxyXG4gICAgICAgICAgdGFyZ2V0SFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5faG9zdC5BbmltYXRpb25GZWF0dXJlLnNldEFuaW1hdGlvbkJsZW5kV2VpZ2h0KFxyXG4gICAgICAgICAgbGF5ZXJOYW1lLFxyXG4gICAgICAgICAgYW5pbU5hbWUsXHJcbiAgICAgICAgICAnWScsXHJcbiAgICAgICAgICB0YXJnZXRWXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKCF0cmlnZ2VyQmxpbmsgfHwgIXRoaXMuX2lzVGFyZ2V0TW92aW5nKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBFeGVjdXRlIGJsaW5rXHJcbiAgICBPYmplY3QuZW50cmllcyh0aGlzLl9ibGlua0xheWVycykuZm9yRWFjaCgoW2xheWVyTmFtZSwgYW5pbU5hbWVdKSA9PiB7XHJcbiAgICAgIGNvbnN0IGFuaW1hdGlvbiA9IHRoaXMuX21hbmFnZWRMYXllcnNbbGF5ZXJOYW1lXS5hbmltYXRpb25zW2FuaW1OYW1lXTtcclxuXHJcbiAgICAgIGlmIChhbmltYXRpb24uaXNBY3RpdmUpIHtcclxuICAgICAgICB0aGlzLl9ob3N0LkFuaW1hdGlvbkZlYXR1cmUucGxheUFuaW1hdGlvbihsYXllck5hbWUsIGFuaW1OYW1lKTtcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGluc3RhbGxBcGkoKSB7XHJcbiAgICAvKipcclxuICAgICAqIEBpbm5lclxyXG4gICAgICogQG5hbWVzcGFjZSBQb2ludE9mSW50ZXJlc3RGZWF0dXJlXHJcbiAgICAgKi9cclxuICAgIGNvbnN0IGFwaSA9IHN1cGVyLmluc3RhbGxBcGkoKTtcclxuXHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhhcGksIHtcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBtZW1iZXJvZiBQb2ludE9mSW50ZXJlc3RGZWF0dXJlXHJcbiAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgKiBAc2VlIGNvcmUvUG9pbnRPZkludGVyZXN0RmVhdHVyZSN0YXJnZXRcclxuICAgICAgICovXHJcbiAgICAgIHRhcmdldDoge1xyXG4gICAgICAgIGdldDogKCkgPT4gdGhpcy50YXJnZXQsXHJcbiAgICAgICAgc2V0OiB0YXJnZXQgPT4geyB0aGlzLnRhcmdldCA9IHRhcmdldCB9LFxyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcblxyXG4gICAgT2JqZWN0LmFzc2lnbihhcGksIHtcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBtZW1iZXJvZiBQb2ludE9mSW50ZXJlc3RGZWF0dXJlXHJcbiAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgKiBAbWV0aG9kXHJcbiAgICAgICAqIEBzZWUgY29yZS9Qb2ludE9mSW50ZXJlc3RGZWF0dXJlI3JlZ2lzdGVyTG9va0xheWVyXHJcbiAgICAgICAqL1xyXG4gICAgICByZWdpc3Rlckxvb2tMYXllcjogdGhpcy5yZWdpc3Rlckxvb2tMYXllci5iaW5kKHRoaXMpLFxyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIFBvaW50T2ZJbnRlcmVzdEZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBtZXRob2RcclxuICAgICAgICogQHNlZSBjb3JlL1BvaW50T2ZJbnRlcmVzdEZlYXR1cmUjcmVnaXN0ZXJCbGlua0xheWVyXHJcbiAgICAgICAqL1xyXG4gICAgICByZWdpc3RlckJsaW5rTGF5ZXI6IHRoaXMucmVnaXN0ZXJCbGlua0xheWVyLmJpbmQodGhpcyksXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbWVtYmVyb2YgUG9pbnRPZkludGVyZXN0RmVhdHVyZVxyXG4gICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICogQG1ldGhvZFxyXG4gICAgICAgKiBAc2VlIGNvcmUvUG9pbnRPZkludGVyZXN0RmVhdHVyZSNzZXRUYXJnZXRcclxuICAgICAgICovXHJcbiAgICAgIHNldFRhcmdldDogdGhpcy5zZXRUYXJnZXQuYmluZCh0aGlzKSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBtZW1iZXJvZiBQb2ludE9mSW50ZXJlc3RGZWF0dXJlXHJcbiAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgKiBAbWV0aG9kXHJcbiAgICAgICAqIEBzZWUgY29yZS9Qb2ludE9mSW50ZXJlc3RGZWF0dXJlI3NldFRhcmdldEJ5TmFtZVxyXG4gICAgICAgKi9cclxuICAgICAgc2V0VGFyZ2V0QnlOYW1lOiB0aGlzLnNldFRhcmdldEJ5TmFtZS5iaW5kKHRoaXMpLFxyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIFBvaW50T2ZJbnRlcmVzdEZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBtZXRob2RcclxuICAgICAgICogQHNlZSBjb3JlL1BvaW50T2ZJbnRlcmVzdEZlYXR1cmUjc2V0VGFyZ2V0QnlJZFxyXG4gICAgICAgKi9cclxuICAgICAgc2V0VGFyZ2V0QnlJZDogdGhpcy5zZXRUYXJnZXRCeUlkLmJpbmQodGhpcyksXHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gYXBpO1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgUG9pbnRPZkludGVyZXN0RmVhdHVyZTtcclxuZXhwb3J0IHsgQXhpc01hcCB9OyIsIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxyXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTBcclxuaW1wb3J0IERlZmVycmVkIGZyb20gJ2NvcmUvRGVmZXJyZWQnO1xyXG5cclxuLyoqXHJcbiAqIENsYXNzIHRoYXQgY2FuIHBsYXkgYmFjayBhdWRpbyBnZW5lcmF0ZWQgYnkgQVdTIFBvbGx5IGFuZCBzeW5jaHJvbml6ZWQgZW1pdFxyXG4gKiBzcGVlY2htYXJrIG1lc3NhZ2VzLlxyXG4gKlxyXG4gKiBAYWJzdHJhY3RcclxuICovXHJcbmNsYXNzIEFic3RyYWN0U3BlZWNoIHtcclxuICAvKipcclxuICAgKiBAY29uc3RydWN0b3JcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7Y29yZS9UZXh0VG9TcGVlY2hGZWF0dXJlfSBzcGVha2VyIC0gVGhlIGZlYXR1cmUgdGhhdCBvd25zIHRoZSBTcGVlY2ggYW5kXHJcbiAgICogd2lsbCBlbWl0IHNwZWVjaG1hcmsgbWVzc2FnZXMuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSBUaGUgdGV4dCBvZiB0aGUgc3BlZWNoLlxyXG4gICAqIEBwYXJhbSB7QXJyYXkuPE9iamVjdD59IFtzcGVlY2htYXJrcz1bXV0gLSBBbiBhcnJheSBvZiBzcGVlY2htYXJrIG9iamVjdHMgcmVwcmVzZW50aW5nXHJcbiAgICogdGhlIHRleHQgYW5kIHRpbWluZyBvZiB0aGUgc3BlZWNoLlxyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKHNwZWFrZXIsIHRleHQsIHNwZWVjaG1hcmtzID0gW10pIHtcclxuICAgIHRoaXMuX3NwZWFrZXIgPSBzcGVha2VyO1xyXG4gICAgdGhpcy5fdGV4dCA9IHRleHQ7XHJcbiAgICB0aGlzLl9zcGVlY2htYXJrcyA9IHNwZWVjaG1hcmtzO1xyXG4gICAgdGhpcy5fc3BlZWNobWFya09mZnNldCA9IDA7XHJcbiAgICB0aGlzLl9yZXNldCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVzZXQgdHJhY2tpbmcgcHJvcGVydGllcy5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge251bWJlcn0gW2N1cnJlbnRUaW1lPTBdIC0gVGltZSB0byB1c2UgZm9yIF9zdGFydFRpbWUuXHJcbiAgICovXHJcbiAgX3Jlc2V0KGN1cnJlbnRUaW1lID0gMCkge1xyXG4gICAgdGhpcy5fc3RhcnRUaW1lID0gY3VycmVudFRpbWU7XHJcbiAgICB0aGlzLl9sb2NhbFRpbWUgPSAwO1xyXG4gICAgdGhpcy5fcGF1c2VUaW1lID0gMDtcclxuICAgIHRoaXMuX3BsYXlpbmcgPSBmYWxzZTtcclxuICAgIHRoaXMuX21hcmtJdGVyID0gdGhpcy5fc3BlZWNobWFya3MudmFsdWVzKCk7XHJcbiAgICBjb25zdCB7dmFsdWUsIGRvbmV9ID0gdGhpcy5fbWFya0l0ZXIubmV4dCgpO1xyXG4gICAgdGhpcy5fY3VycmVudE1hcmsgPSB2YWx1ZTtcclxuICAgIHRoaXMuX2VuZFRpbWUgPSB0aGlzLl9zcGVlY2htYXJrcy5sZW5ndGhcclxuICAgICAgPyB0aGlzLl9zcGVlY2htYXJrc1t0aGlzLl9zcGVlY2htYXJrcy5sZW5ndGggLSAxXS50aW1lXHJcbiAgICAgIDogMDtcclxuICAgIHRoaXMuX2RvbmUgPSBkb25lO1xyXG4gICAgdGhpcy5fcHJvbWlzZSA9IG51bGw7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGUgYSBuZXcgcHJvbWlzZSB0aGF0IHdpbGwgc3RvcCBwbGF5YmFjayBhbmQgZW1pdCBtZXNzYWdlcyBmb3IgdGhpcyBzcGVlY2guXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb25GaW5pc2ggLSBGdW5jaXRvbiB0byBleGVjdXRlIG9uY2UgdGhlIHNwZWVjaCBzdG9wcy5cclxuICAgKiBAcGFyYW0ge29uRXJyb3I9fSBvbkVycm9yIC0gRnVuY3Rpb24gdG8gZXhlY3V0ZSBpZiB0aGUgc3BlZWNoIGVuY291bnRlcnMgYW5cclxuICAgKiBlcnJvci5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb25JbnRlcnJ1cHQgLSBGdW5jdGlvbiB0byBleGVjdXRlIGlmIHRoZSBzcGVlY2ggaXMgY2FuY2VsZWQuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7RGVmZXJyZWR9XHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIF9jcmVhdGVQcm9taXNlKG9uRmluaXNoLCBvbkVycm9yLCBvbkludGVycnVwdCkge1xyXG4gICAgY29uc3Qgb25SZXNvbHZlID0gdmFsdWUgPT4ge1xyXG4gICAgICB0aGlzLl9wbGF5aW5nID0gZmFsc2U7XHJcblxyXG4gICAgICB0aGlzLl9zcGVha2VyLmVtaXQodGhpcy5fc3BlYWtlci5jb25zdHJ1Y3Rvci5FVkVOVFMuc3RvcCwgdGhpcyk7XHJcbiAgICAgIHRoaXMuX3NwZWFrZXIuY29uc3RydWN0b3IuZW1pdChcclxuICAgICAgICB0aGlzLl9zcGVha2VyLmNvbnN0cnVjdG9yLkVWRU5UUy5zdG9wLFxyXG4gICAgICAgIHRoaXNcclxuICAgICAgKTtcclxuXHJcbiAgICAgIGlmICh0eXBlb2Ygb25GaW5pc2ggPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICBvbkZpbmlzaCh2YWx1ZSk7XHJcbiAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgY29uc3Qgb25SZWplY3QgPSBlID0+IHtcclxuICAgICAgdGhpcy5fcGxheWluZyA9IGZhbHNlO1xyXG5cclxuICAgICAgdGhpcy5fc3BlYWtlci5lbWl0KHRoaXMuX3NwZWFrZXIuY29uc3RydWN0b3IuRVZFTlRTLnN0b3AsIHRoaXMpO1xyXG4gICAgICB0aGlzLl9zcGVha2VyLmNvbnN0cnVjdG9yLmVtaXQoXHJcbiAgICAgICAgdGhpcy5fc3BlYWtlci5jb25zdHJ1Y3Rvci5FVkVOVFMuc3RvcCxcclxuICAgICAgICB0aGlzXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBjb25zb2xlLmVycm9yKFxyXG4gICAgICAgIGAke3RoaXMuY29uc3RydWN0b3IubmFtZX0gZW5jb3VudGVyZWQgYW4gdW5leHBlY3RlZCBlcnJvcjogJHtlfWBcclxuICAgICAgKTtcclxuXHJcbiAgICAgIGlmICh0eXBlb2Ygb25FcnJvciA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgIG9uRXJyb3IoZSk7XHJcbiAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgY29uc3Qgb25DYW5jZWwgPSB2YWx1ZSA9PiB7XHJcbiAgICAgIHRoaXMuX3BsYXlpbmcgPSBmYWxzZTtcclxuXHJcbiAgICAgIHRoaXMuX3NwZWFrZXIuZW1pdCh0aGlzLl9zcGVha2VyLmNvbnN0cnVjdG9yLkVWRU5UUy5pbnRlcnJ1cHQsIHRoaXMpO1xyXG4gICAgICB0aGlzLl9zcGVha2VyLmNvbnN0cnVjdG9yLmVtaXQoXHJcbiAgICAgICAgdGhpcy5fc3BlYWtlci5jb25zdHJ1Y3Rvci5FVkVOVFMuaW50ZXJydXB0LFxyXG4gICAgICAgIHRoaXNcclxuICAgICAgKTtcclxuXHJcbiAgICAgIGlmICh0eXBlb2Ygb25JbnRlcnJ1cHQgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICBvbkludGVycnVwdCh2YWx1ZSk7XHJcbiAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5fcHJvbWlzZSA9IG5ldyBEZWZlcnJlZCh1bmRlZmluZWQsIG9uUmVzb2x2ZSwgb25SZWplY3QsIG9uQ2FuY2VsKTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5fcHJvbWlzZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiB3aGV0aGVyIG9yIG5vdCB0aGUgc3BlZWNoIGhhcyByZWFjaGVkIGl0J3MgZW5kLlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gICAqL1xyXG4gIF9jaGVja0ZpbmlzaGVkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2RvbmUgJiYgdGhpcy5fbG9jYWxUaW1lID49IHRoaXMuX2VuZFRpbWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSBwbGF5YmFjayBzdGF0ZSBvZiB0aGUgYXVkaW8uXHJcbiAgICpcclxuICAgKiBAcmVhZG9ubHlcclxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgKi9cclxuICBnZXQgcGxheWluZygpIHtcclxuICAgIHJldHVybiB0aGlzLl9wbGF5aW5nO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgdGV4dCBvZiB0aGUgc3BlZWNoLlxyXG4gICAqXHJcbiAgICogQHJlYWRvbmx5XHJcbiAgICogQHR5cGUge3N0cmluZ31cclxuICAgKi9cclxuICBnZXQgdGV4dCgpIHtcclxuICAgIHJldHVybiB0aGlzLl90ZXh0O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyBhIHNoYWxsb3cgY29weSBvZiB0aGUgc3BlZWNobWFya3MgYXJyYXkgZm9yIHRoZSBzcGVlY2guXHJcbiAgICpcclxuICAgKiBAcmVhZG9ubHlcclxuICAgKiBAdHlwZSB7QXJyYXkuPE9iamVjdD59XHJcbiAgICovXHJcbiAgZ2V0IHNwZWVjaG1hcmtzKCkge1xyXG4gICAgcmV0dXJuIFsuLi50aGlzLl9zcGVlY2htYXJrc107XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIGFuZCBzZXRzIHRoZSBudW1iZXIgb2Ygc2Vjb25kcyB0byBvZmZzZXQgc3BlZWNobWFyayBlbWlzc2lvbi5cclxuICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAqL1xyXG4gIGdldCBzcGVlY2htYXJrT2Zmc2V0KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NwZWVjaG1hcmtPZmZzZXQgLyAxMDAwO1xyXG4gIH1cclxuXHJcbiAgc2V0IHNwZWVjaG1hcmtPZmZzZXQob2Zmc2V0KSB7XHJcbiAgICB0aGlzLl9zcGVlY2htYXJrT2Zmc2V0ID0gb2Zmc2V0ICogMTAwMDsgLy8gU3RvcmUgYXMgbWlsbGlzZWNvbmRzXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFbWl0IHNwZWVjaG1hcmsgbWVzc2FnZXMgYXMgdGhleSBhcmUgZW5jb3VudGVyZWQgaW4gc3luYyB3aXRoIGF1ZGlvLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IGN1cnJlbnRUaW1lIC0gQ3VycmVudCBnbG9iYWwgdGltZSB3aGVuIHVwZGF0ZSB3YXMgY2FsbGVkLlxyXG4gICAqL1xyXG4gIHVwZGF0ZShjdXJyZW50VGltZSkge1xyXG4gICAgaWYgKCF0aGlzLl9wbGF5aW5nKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBVcGRhdGUgbG9jYWwgYXVkaW8gdGltZVxyXG4gICAgdGhpcy5fbG9jYWxUaW1lID0gY3VycmVudFRpbWUgLSB0aGlzLl9zdGFydFRpbWU7XHJcblxyXG4gICAgaWYgKCF0aGlzLl9kb25lKSB7XHJcbiAgICAgIC8vIEVtaXQgc3BlZWNobWFyayBtZXNzYWdlcyBmb3IgbWFya3MgdXAgdG8gdGhlIGN1cnJlbnQgdGltZVxyXG4gICAgICB3aGlsZSAoXHJcbiAgICAgICAgIXRoaXMuX2RvbmUgJiZcclxuICAgICAgICB0aGlzLl9jdXJyZW50TWFyay50aW1lICsgdGhpcy5fc3BlZWNobWFya09mZnNldCA8PSB0aGlzLl9sb2NhbFRpbWVcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGhpcy5fc3BlYWtlci5lbWl0KFxyXG4gICAgICAgICAgdGhpcy5fc3BlYWtlci5jb25zdHJ1Y3Rvci5FVkVOVFNbdGhpcy5fY3VycmVudE1hcmsudHlwZV0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIHNwZWVjaDogdGhpcyxcclxuICAgICAgICAgICAgbWFyazogdGhpcy5fY3VycmVudE1hcmssXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICAgICAgICBjb25zdCB7dmFsdWUsIGRvbmV9ID0gdGhpcy5fbWFya0l0ZXIubmV4dCgpO1xyXG5cclxuICAgICAgICB0aGlzLl9jdXJyZW50TWFyayA9IHZhbHVlO1xyXG4gICAgICAgIHRoaXMuX2RvbmUgPSBkb25lO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gRW5kIHBsYXliYWNrXHJcbiAgICBpZiAodGhpcy5fY2hlY2tGaW5pc2hlZCgpKSB7XHJcbiAgICAgIHRoaXMuc3RvcCgpO1xyXG4gICAgICB0aGlzLl9yZXNldCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUGxheSB0aGUgc3BlZWNoIGZyb20gdGhlIGJlZ2lubmluZy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBjdXJyZW50VGltZSAtIEN1cnJlbnQgZ2xvYmFsIHRpbWUgd2hlbiBwbGF5IHdhcyBjYWxsZWQuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9uRmluaXNoIC0gT3B0aW9uYWwgZnVuY3Rpb24gdG8gZXhlY3V0ZSBvbmNlIHRoZSBzcGVlY2hcclxuICAgKiBwcm9taXNlIHJlc29sdmVzLlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvbkVycm9yIC0gT3B0aW9uYWwgZnVuY3Rpb24gdG8gZXhlY3V0ZSBpZiB0aGUgc3BlZWNoXHJcbiAgICogZW5jb3VudGVycyBhbmQgZXJyb3IgZHVyaW5nIHBsYXliYWNrLlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvbkludGVycnVwdCAtIE9wdGlvbmFsIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgaWYgdGhlIHNwZWVjaFxyXG4gICAqIGlzIGNhbmNlbGVkLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0RlZmVycmVkfSBSZXNvbHZlcyBvbmNlIHRoZSBzcGVlY2ggcmVhY2hlcyB0aGUgZW5kIG9mIHBsYXliYWNrLlxyXG4gICAqL1xyXG4gIHBsYXkoY3VycmVudFRpbWUsIG9uRmluaXNoLCBvbkVycm9yLCBvbkludGVycnVwdCkge1xyXG4gICAgdGhpcy5fcmVzZXQoY3VycmVudFRpbWUpO1xyXG4gICAgdGhpcy5fcGxheWluZyA9IHRydWU7XHJcblxyXG4gICAgdGhpcy5fc3BlYWtlci5lbWl0KHRoaXMuX3NwZWFrZXIuY29uc3RydWN0b3IuRVZFTlRTLnBsYXksIHRoaXMpO1xyXG4gICAgdGhpcy5fc3BlYWtlci5jb25zdHJ1Y3Rvci5lbWl0KHRoaXMuX3NwZWFrZXIuY29uc3RydWN0b3IuRVZFTlRTLnBsYXksIHRoaXMpO1xyXG5cclxuICAgIHJldHVybiB0aGlzLl9jcmVhdGVQcm9taXNlKG9uRmluaXNoLCBvbkVycm9yLCBvbkludGVycnVwdCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQYXVzZSB0aGUgc3BlZWNoIGF0IHRoZSBjdXJyZW50IHRpbWUuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge251bWJlcn0gY3VycmVudFRpbWUgLSBDdXJyZW50IGdsb2JhbCB0aW1lIHdoZW4gcGF1c2Ugd2FzIGNhbGxlZC5cclxuICAgKi9cclxuICBwYXVzZShjdXJyZW50VGltZSkge1xyXG4gICAgdGhpcy5fcGxheWluZyA9IGZhbHNlO1xyXG4gICAgdGhpcy5fcGF1c2VUaW1lID0gY3VycmVudFRpbWU7XHJcblxyXG4gICAgdGhpcy5fc3BlYWtlci5lbWl0KHRoaXMuX3NwZWFrZXIuY29uc3RydWN0b3IuRVZFTlRTLnBhdXNlLCB0aGlzKTtcclxuICAgIHRoaXMuX3NwZWFrZXIuY29uc3RydWN0b3IuZW1pdChcclxuICAgICAgdGhpcy5fc3BlYWtlci5jb25zdHJ1Y3Rvci5FVkVOVFMucGF1c2UsXHJcbiAgICAgIHRoaXNcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXN1bWUgdGhlIHNwZWVjaCBhdCB0aGUgY3VycmVudCB0aW1lLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IGN1cnJlbnRUaW1lIC0gQ3VycmVudCBnbG9iYWwgdGltZSB3aGVuIHJlc3VtZSB3YXMgY2FsbGVkLlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvbkZpbmlzaCAtIE9wdGlvbmFsIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgb25jZSB0aGUgc3BlZWNoXHJcbiAgICogcHJvbWlzZSByZXNvbHZlcy5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb25FcnJvciAtIE9wdGlvbmFsIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgaWYgdGhlIHNwZWVjaFxyXG4gICAqIGVuY291bnRlcnMgYW5kIGVycm9yIGR1cmluZyBwbGF5YmFjay5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb25JbnRlcnJ1cHQgLSBPcHRpb25hbCBmdW5jdGlvbiB0byBleGVjdXRlIGlmIHRoZSBzcGVlY2hcclxuICAgKiBpcyBjYW5jZWxlZC5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtEZWZlcnJlZH0gUmVzb2x2ZXMgb25jZSB0aGUgc3BlZWNoIHJlYWNoZXMgdGhlIGVuZCBvZiBwbGF5YmFjay5cclxuICAgKi9cclxuICByZXN1bWUoY3VycmVudFRpbWUsIG9uRmluaXNoLCBvbkVycm9yLCBvbkludGVycnVwdCkge1xyXG4gICAgLy8gUGxheSBmcm9tIHRoZSBiZWdpbm5pbmcgaWYgdGhlIHNwZWVjaCBoYXNuJ3QgcGxheWVkIHlldFxyXG4gICAgaWYgKCF0aGlzLl9wcm9taXNlKSB7XHJcbiAgICAgIHRoaXMuX3Jlc2V0KGN1cnJlbnRUaW1lKTtcclxuICAgICAgdGhpcy5fY3JlYXRlUHJvbWlzZShvbkZpbmlzaCwgb25FcnJvciwgb25JbnRlcnJ1cHQpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX3BsYXlpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5fc3RhcnRUaW1lICs9IGN1cnJlbnRUaW1lIC0gdGhpcy5fcGF1c2VUaW1lO1xyXG5cclxuICAgIHRoaXMuX3NwZWFrZXIuZW1pdCh0aGlzLl9zcGVha2VyLmNvbnN0cnVjdG9yLkVWRU5UUy5yZXN1bWUsIHRoaXMpO1xyXG4gICAgdGhpcy5fc3BlYWtlci5jb25zdHJ1Y3Rvci5lbWl0KFxyXG4gICAgICB0aGlzLl9zcGVha2VyLmNvbnN0cnVjdG9yLkVWRU5UUy5yZXN1bWUsXHJcbiAgICAgIHRoaXNcclxuICAgICk7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuX3Byb21pc2U7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDYW5jZWxzIHBsYXliYWNrIG9mIHRoZSBzcGVlY2ggYXQgdGhlIGN1cnJlbnQgdGltZS4gQ2FuY2VsIHRoZSBzcGVlY2ggcHJvbWlzZS5cclxuICAgKi9cclxuICBjYW5jZWwoKSB7XHJcbiAgICBpZiAodGhpcy5fcHJvbWlzZSkge1xyXG4gICAgICB0aGlzLl9wcm9taXNlLmNhbmNlbCgpO1xyXG4gICAgICB0aGlzLl9wcm9taXNlID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9wbGF5aW5nID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTdG9wIHRoZSBzcGVlY2ggYW5kIHJlc2V0IHRpbWUgdG8gdGhlIGJlZ2lubmluZy4gUmVzb2x2ZSB0aGUgc3BlZWNoIHByb21pc2UuXHJcbiAgICovXHJcbiAgc3RvcCgpIHtcclxuICAgIGlmICh0aGlzLl9wcm9taXNlKSB7XHJcbiAgICAgIHRoaXMuX3Byb21pc2UucmVzb2x2ZSgpO1xyXG4gICAgICB0aGlzLl9wcm9taXNlID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9wbGF5aW5nID0gZmFsc2U7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBBYnN0cmFjdFNwZWVjaDtcclxuIiwiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXHJcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxyXG5pbXBvcnQgQWJzdHJhY3RTcGVlY2ggZnJvbSAnLi9BYnN0cmFjdFNwZWVjaCc7XHJcblxyXG4vKipcclxuICogVGhlIGJ1aWx0LWluIGNsYXNzIGZvciBhc3luY2hyb25vdXMgUHJvbWlzZXMuXHJcbiAqIEBleHRlcm5hbCBBdWRpb1xyXG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9IVE1MQXVkaW9FbGVtZW50L0F1ZGlvXHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEBleHRlbmRzIEFic3RyYWN0U3BlZWNoXHJcbiAqIEBhbGlhcyBjb3JlL1NwZWVjaFxyXG4gKi9cclxuY2xhc3MgU3BlZWNoIGV4dGVuZHMgQWJzdHJhY3RTcGVlY2gge1xyXG4gIC8qKlxyXG4gICAqIEBjb25zdHJ1Y3RvclxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtUZXh0VG9TcGVlY2h9IHNwZWFrZXIgLSBUaGUgb3duZXIgb2YgdGhlIFNwZWVjaCB0aGF0IHdpbGwgZW1pdCBzcGVlY2htYXJrXHJcbiAgICogbWVzc2FnZXMuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSBUaGUgdGV4dCBvZiB0aGUgc3BlZWNoLlxyXG4gICAqIEBwYXJhbSB7QXJyYXkuPE9iamVjdD59IFtzcGVlY2htYXJrcz1bXV0gLSBBbiBhcnJheSBvZiBzcGVlY2htYXJrIG9iamVjdHMgcmVwcmVzZW50aW5nXHJcbiAgICogdGhlIHRleHQgYW5kIHRpbWluZyBvZiB0aGUgc3BlZWNoLlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBhdWRpb0NvbmZpZyAtIE9iamVjdCBjb250YWluaW5nIGF1ZGlvIGFuZCB1cmwuXHJcbiAgICogQHBhcmFtIHtleHRlcm5hbDpBdWRpb30gYXVkaW9Db25maWcuYXVkaW8gLSBQbGF5YWJsZSBhdWRpbyBvYmplY3QuXHJcbiAgICovXHJcbiAgY29uc3RydWN0b3Ioc3BlYWtlciwgdGV4dCwgc3BlZWNobWFya3MgPSBbXSwgYXVkaW9Db25maWcpIHtcclxuICAgIHN1cGVyKHNwZWFrZXIsIHRleHQsIHNwZWVjaG1hcmtzKTtcclxuICAgIHRoaXMuX2F1ZGlvID0gYXVkaW9Db25maWcuYXVkaW87XHJcblxyXG4gICAgLy8gS2VlcCB0cmFjayBvZiB3aGV0aGVyIHRoZSBhdWRpbyBoYXMgZmluaXNoZWQgcGxheWluZyB0aHJvdWdoXHJcbiAgICB0aGlzLl9hdWRpby5vbmVuZGVkID0gKCkgPT4ge1xyXG4gICAgICB0aGlzLl9hdWRpb0ZpbmlzaGVkID0gdHJ1ZTtcclxuICAgIH07XHJcbiAgICB0aGlzLl9hdWRpb0ZpbmlzaGVkID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIF9jaGVja0ZpbmlzaGVkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2F1ZGlvRmluaXNoZWQgJiYgc3VwZXIuX2NoZWNrRmluaXNoZWQoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIHBsYXlhYmxlIGF1ZGlvIGZvciB0aGUgc3BlZWNoLlxyXG4gICAqXHJcbiAgICogQHJlYWRvbmx5XHJcbiAgICogQHR5cGUge2V4dGVybmFsOkF1ZGlvfVxyXG4gICAqL1xyXG4gIGdldCBhdWRpbygpIHtcclxuICAgIHJldHVybiB0aGlzLl9hdWRpbztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIGF1ZGlvIHZvbHVtZSBmb3IgdGhlIHNwZWVjaC5cclxuICAgKlxyXG4gICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICovXHJcbiAgZ2V0IHZvbHVtZSgpIHtcclxuICAgIHJldHVybiB0aGlzLl9hdWRpby52b2x1bWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXRzIHRoZSBhdWRpbyB2b2x1bWUgZm9yIHRoZSBzcGVlY2guXHJcbiAgICovXHJcbiAgc2V0IHZvbHVtZSh2b2x1bWUpIHtcclxuICAgIHRoaXMuX2F1ZGlvLnZvbHVtZSA9IHZvbHVtZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldCB0aGUgYXVkaW8ncyBjdXJyZW50IGxvY2FsIHRpbWUgYW5kIHBsYXkgaXQuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIF9wbGF5QXVkaW8oKSB7XHJcbiAgICBpZiAodGhpcy5fc3BlZWNobWFya09mZnNldCA8IDApIHtcclxuICAgICAgdGhpcy5fYXVkaW8uY3VycmVudFRpbWUgPSB0aGlzLl9zcGVlY2htYXJrT2Zmc2V0O1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5fcGxheWluZykge1xyXG4gICAgICAgICAgdGhpcy5fYXVkaW8uY3VycmVudFRpbWUgPVxyXG4gICAgICAgICAgICAodGhpcy5fbG9jYWxUaW1lICsgdGhpcy5fc3BlZWNobWFya09mZnNldCkgLyAxMDAwO1xyXG4gICAgICAgICAgdGhpcy5fYXVkaW8ucGxheSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSwgLXRoaXMuX3NwZWVjaG1hcmtPZmZzZXQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fYXVkaW8uY3VycmVudFRpbWUgPSAwO1xyXG4gICAgICB0aGlzLl9hdWRpby5wbGF5KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQYXVzZSB0aGUgYXVkaW8gb25jZSBpdCBpcyBwbGF5YWJsZS5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICovXHJcbiAgX3BhdXNlQXVkaW8oKSB7XHJcbiAgICB0aGlzLl9hdWRpby5wbGF5KCkudGhlbigoKSA9PiB7XHJcbiAgICAgIGlmICghdGhpcy5fcGxheWluZykge1xyXG4gICAgICAgIHRoaXMuX2F1ZGlvLnBhdXNlKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcGxheShjdXJyZW50VGltZSwgb25GaW5pc2gsIG9uRXJyb3IsIG9uSW50ZXJydXB0KSB7XHJcbiAgICB0aGlzLl9hdWRpb0ZpbmlzaGVkID0gZmFsc2U7XHJcbiAgICB0aGlzLl9wbGF5QXVkaW8oKTtcclxuXHJcbiAgICByZXR1cm4gc3VwZXIucGxheShjdXJyZW50VGltZSwgb25GaW5pc2gsIG9uRXJyb3IsIG9uSW50ZXJydXB0KTtcclxuICB9XHJcblxyXG4gIHBhdXNlKGN1cnJlbnRUaW1lKSB7XHJcbiAgICB0aGlzLl9wYXVzZUF1ZGlvKCk7XHJcbiAgICBzdXBlci5wYXVzZShjdXJyZW50VGltZSk7XHJcbiAgfVxyXG5cclxuICByZXN1bWUoY3VycmVudFRpbWUsIG9uRmluaXNoLCBvbkVycm9yLCBvbkludGVycnVwdCkge1xyXG4gICAgdGhpcy5fYXVkaW9GaW5pc2hlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5fYXVkaW8ucGxheSgpO1xyXG5cclxuICAgIHJldHVybiBzdXBlci5yZXN1bWUoY3VycmVudFRpbWUsIG9uRmluaXNoLCBvbkVycm9yLCBvbkludGVycnVwdCk7XHJcbiAgfVxyXG5cclxuICBjYW5jZWwoKSB7XHJcbiAgICB0aGlzLl9wYXVzZUF1ZGlvKCk7XHJcbiAgICBzdXBlci5jYW5jZWwoKTtcclxuICB9XHJcblxyXG4gIHN0b3AoKSB7XHJcbiAgICB0aGlzLl9wYXVzZUF1ZGlvKCk7XHJcbiAgICB0aGlzLl9hdWRpby5jdXJyZW50VGltZSA9IDA7XHJcbiAgICBzdXBlci5zdG9wKCk7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBTcGVlY2g7XHJcbiIsIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxyXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTBcclxuXHJcbmltcG9ydCBVdGlscyBmcm9tICdjb3JlL1V0aWxzJztcclxuXHJcbi8qKlxyXG4gKiBBIGNvbGxlY3Rpb24gb2YgdXNlZnVsIHRleHQtdG8tc3BlZWNoIGZ1bmN0aW9ucy5cclxuICpcclxuICogQGhpZGVjb25zdHJ1Y3RvclxyXG4gKi9cclxuY2xhc3MgVGV4dFRvU3BlZWNoVXRpbHMge1xyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgYSBuZXcgc3RyaW5nIHdpdGggU1NNTCBtYXJrcyBpbnNlcnRlZCBiYXNlZCBvblxyXG4gICAqIG1hdGNoZXMgYmV0d2VlbiB0aGUgaW5wdXQgc3RyaW5nIGFuZCB0aGUgaW5wdXQgbWFwLiBUaGVcclxuICAgKiB3b3JkIG1hdGNoZXMgYXJlIGNhc2UtaW5zZW5zaXRpdmUuIFdvcmRzIHdpdGhpbiBleGlzdGluZ1xyXG4gICAqIFNTTUwgdGFncyB3aWxsIG5vdCBiZSBhZmZlY3RlZC4gSW5wdXQgdGV4dCB3aWxsIGJlIHN1cnJvdW5kZWRcclxuICAgKiBieSA8c3BlYWs+PC9zcGVhaz4gdGFncyBpZiBuZWVkZWQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIElucHV0IHN0cmluZy5cclxuICAgKiBAcGFyYW0ge29iamVjdH0gbWFwIC0gSW5wdXQgb2JqZWN0IHRoYXQgbWFwcyBtYXJrIGtleXNcclxuICAgKiB0byBhcnJheXMgb2Ygd29yZHMuIEV4YW1wbGU6XHJcbiAgICpcclxuICAgKiAge1xyXG4gICAqICAgICdtYXJrOnNhZCcgOiBbJ3NhZCcsICdibHVlJywgJ2Rvd24nXSxcclxuICAgKiAgICAnbWFyazpoYXBweScgOiBbJ2pveScsICdnbGFkJywgJ2dyZWF0J10sXHJcbiAgICogICAgJ21hcms6bm8nIDogWydubycsICduYWgnLCAnbmF5JywgJ3N1cmUnXVxyXG4gICAqICB9XHJcbiAgICogQHBhcmFtIHtBcnJheS48c3RyaW5nPn0gW3JhbmRvbU1hcmtzID0gW11dIC0gSWYgdGhlcmUgYXJlIHNlbnRlbmNlcyB0aGF0IGRvbid0XHJcbiAgICogbWF0Y2ggYW55IHdvcmRzIGZyb20gdGhlIG1hcCBvYmplY3QsIG1hcmtzIGZyb20gdGhpcyBhcnJheSB3aWxsIGJlIHJhbmRvbWx5XHJcbiAgICogY2hvc2VuIGFuZCBpbnNlcnRlZC5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IC0gVXBkYXRlZCBpbnB1dCBzdHJpbmcuXHJcbiAgICovXHJcbiAgc3RhdGljIGF1dG9HZW5lcmF0ZVNTTUxNYXJrcyh0ZXh0LCBtYXAsIHJhbmRvbU1hcmtzID0gW10pIHtcclxuICAgIGlmICh0eXBlb2YgbWFwICE9PSAnb2JqZWN0JyB8fCBtYXAgPT09IG51bGwpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgIGBDYW5ub3QgZ2VuZXJhdGUgU1NNTCBtYXJrcyBmb3IgdGV4dCBcIiR7dGV4dH1cIiBiZWNhdXNlIG1hcCBpcyBub3QgYW4gb2JqZWN0LmBcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBwcm9jZXNzIHRoZSBpbnB1dCBtYXAgaW50byBhbiBpbnRlcm5hbCBmb3JtYXRcclxuICAgIGNvbnN0IGludGVybmFsTWFwID0gdGhpcy5fcHJvY2Vzc0lucHV0TWFwKG1hcCk7XHJcblxyXG4gICAgY29uc3Qgc3BlYWtUYWdzID0gWyc8c3BlYWs+JywgJzwvc3BlYWs+J107XHJcbiAgICBjb25zdCBzc21sTWFya1JlZ2V4ID0gLzxtYXJrIG5hbWU9KD86XCJ8JykoLio/KSg/OlwifCcpXFwvPi87XHJcbiAgICBjb25zdCBzc21sVGFnUmVnZXggPSAvPFtePl0qPi9nO1xyXG5cclxuICAgIC8vIElkZW50aWZ5IGFueSBleGlzdGluZyBTU01MIHRhZ3NcclxuICAgIGNvbnN0IGV4aXN0aW5nVGFncyA9IFtdO1xyXG4gICAgbGV0IHJlc3VsdCA9IHNzbWxUYWdSZWdleC5leGVjKHRleHQpO1xyXG5cclxuICAgIHdoaWxlIChyZXN1bHQgIT09IG51bGwpIHtcclxuICAgICAgZXhpc3RpbmdUYWdzLnB1c2goe1xyXG4gICAgICAgIHN0YXJ0OiByZXN1bHQuaW5kZXgsXHJcbiAgICAgICAgZW5kOiByZXN1bHQuaW5kZXggKyByZXN1bHRbMF0ubGVuZ3RoLFxyXG4gICAgICAgIHRleHQ6IHJlc3VsdFswXSxcclxuICAgICAgfSk7XHJcblxyXG4gICAgICByZXN1bHQgPSBzc21sVGFnUmVnZXguZXhlYyh0ZXh0KTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBjaHVua3MgPSBbXTtcclxuICAgIGxldCBpbmRleCA9IDA7XHJcbiAgICBsZXQgc3NtbE1hcmtSZXN1bHQ7XHJcbiAgICBsZXQgZHVwbGljYXRlTWFya1RvQ2hlY2sgPSBbXTtcclxuICAgIGV4aXN0aW5nVGFncy5mb3JFYWNoKGV4aXN0aW5nVGFnID0+IHtcclxuICAgICAgY29uc3Qgc3Vic3RyID0gdGV4dC5zbGljZShpbmRleCwgZXhpc3RpbmdUYWcuc3RhcnQpO1xyXG5cclxuICAgICAgaWYgKHN1YnN0ciAhPT0gJycpIHtcclxuICAgICAgICAvLyBhdXRvLW1hcmsgbm9uLXRhZyB0ZXh0XHJcbiAgICAgICAgY2h1bmtzLnB1c2goXHJcbiAgICAgICAgICB0aGlzLl9pbnNlcnRNYXJrcyhzdWJzdHIsIGludGVybmFsTWFwLCBkdXBsaWNhdGVNYXJrVG9DaGVjaylcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBkdXBsaWNhdGVNYXJrVG9DaGVjayA9IFtdO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBzc21sTWFya1Jlc3VsdCA9IHNzbWxNYXJrUmVnZXguZXhlYyhleGlzdGluZ1RhZy50ZXh0KTtcclxuXHJcbiAgICAgIGlmIChzc21sTWFya1Jlc3VsdCAhPT0gbnVsbCkge1xyXG4gICAgICAgIGNvbnN0IG1hcmtUZXh0ID0gc3NtbE1hcmtSZXN1bHRbMV07XHJcbiAgICAgICAgZHVwbGljYXRlTWFya1RvQ2hlY2sucHVzaChtYXJrVGV4dCk7XHJcbiAgICAgIH0gZWxzZSBpZiAoIXNwZWFrVGFncy5pbmNsdWRlcyhleGlzdGluZ1RhZy50ZXh0KSkge1xyXG4gICAgICAgIGNodW5rcy5wdXNoKGV4aXN0aW5nVGFnLnRleHQpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBhZHZhbmNlIHRoZSBpbmRleFxyXG4gICAgICBpbmRleCA9IGV4aXN0aW5nVGFnLmVuZDtcclxuICAgIH0pO1xyXG5cclxuICAgIGNodW5rcy5wdXNoKFxyXG4gICAgICB0aGlzLl9pbnNlcnRNYXJrcyh0ZXh0LnNsaWNlKGluZGV4KSwgaW50ZXJuYWxNYXAsIGR1cGxpY2F0ZU1hcmtUb0NoZWNrKVxyXG4gICAgKTtcclxuXHJcbiAgICBsZXQgbWFya2VkVGV4dCA9IGNodW5rcy5qb2luKCcnKTtcclxuXHJcbiAgICBpZiAocmFuZG9tTWFya3MgJiYgcmFuZG9tTWFya3MubGVuZ3RoID4gMCkge1xyXG4gICAgICAvLyBhZGQgcmFuZG9tIG1hcmtzIHRvIGFueSB1bm1hcmtlZCBzZW50ZW5jZXNcclxuICAgICAgbWFya2VkVGV4dCA9IHRoaXMuYWRkTWFya3NUb1VubWFya2VkU2VudGVuY2VzKFxyXG4gICAgICAgIG1hcmtlZFRleHQsXHJcbiAgICAgICAgcmFuZG9tTWFya3NcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gVGV4dFRvU3BlZWNoVXRpbHMudmFsaWRhdGVUZXh0KG1hcmtlZFRleHQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyBhIG5ldyBzdHJpbmcgd2l0aCBhIHJhbmRvbSBTU01MIG1hcmsgaW5zZXJ0ZWQgYXQgZWFjaCBzZW50ZW5jZSB0aGF0XHJcbiAgICogZG9lcyBub3QgYWxyZWFkeSBjb250YWluIGFuIFNTTUwgbWFyay5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gSW5wdXQgc3RyaW5nLlxyXG4gICAqIEBwYXJhbSB7QXJyYXkuPHN0cmluZz59IG1hcmtzIC0gQW55IGFycmF5IG9mIHJhbmRvbSBTU01MIG1hcmtzIHRvIGNob29zZSBmcm9tXHJcbiAgICogd2hlbiBtb2RpZnlpbmcgdGhlIHRleHQuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxyXG4gICAqL1xyXG4gIHN0YXRpYyBhZGRNYXJrc1RvVW5tYXJrZWRTZW50ZW5jZXModGV4dCwgbWFya3MpIHtcclxuICAgIGlmICghbWFya3MgfHwgbWFya3MubGVuZ3RoID09PSAwKSByZXR1cm4gdGV4dDtcclxuXHJcbiAgICBjb25zdCBzc21sTWFya1JlZ2V4ID0gLzxtYXJrIG5hbWU9KD86XCJ8JykoLio/KSg/OlwifCcpXFwvPi9nO1xyXG4gICAgY29uc3Qgc3NtbFRhZ1JlZ2V4ID0gLzxbXj5dKj4vZztcclxuXHJcbiAgICAvLyBGaW5kIHRoZSBpbmRpY2VzIG9mIGFueSBtYXJrcyBpbiB0aGUgdGV4dFxyXG4gICAgY29uc3QgbWFya0luZGljZXMgPSBbXTtcclxuICAgIGxldCBtYXJrUmVzdWx0ID0gc3NtbE1hcmtSZWdleC5leGVjKHRleHQpO1xyXG5cclxuICAgIHdoaWxlIChtYXJrUmVzdWx0ICE9PSBudWxsKSB7XHJcbiAgICAgIG1hcmtJbmRpY2VzLnB1c2gobWFya1Jlc3VsdC5pbmRleCk7XHJcbiAgICAgIG1hcmtSZXN1bHQgPSBzc21sTWFya1JlZ2V4LmV4ZWModGV4dCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gRmluZCBhbGwgU1NNTCB0YWdzIGluIHRoZSB0ZXh0XHJcbiAgICBjb25zdCBleGlzdGluZ1RhZ3MgPSBbXTtcclxuICAgIGxldCBzc21sUmVzdWx0ID0gc3NtbFRhZ1JlZ2V4LmV4ZWModGV4dCk7XHJcbiAgICB3aGlsZSAoc3NtbFJlc3VsdCAhPT0gbnVsbCkge1xyXG4gICAgICBleGlzdGluZ1RhZ3MucHVzaCh7XHJcbiAgICAgICAgc3RhcnQ6IHNzbWxSZXN1bHQuaW5kZXgsXHJcbiAgICAgICAgZW5kOiBzc21sUmVzdWx0LmluZGV4ICsgc3NtbFJlc3VsdFswXS5sZW5ndGgsXHJcbiAgICAgICAgdGV4dDogc3NtbFJlc3VsdFswXSxcclxuICAgICAgfSk7XHJcbiAgICAgIHNzbWxSZXN1bHQgPSBzc21sVGFnUmVnZXguZXhlYyh0ZXh0KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBDcmVhdGUgYSBjb3B5IG9mIHRoZSB0ZXh0IHdpdGggYWxsIFNTTUwgbWFya3MgcmVwbGFjZXMgd2l0aCB3aGl0ZXNwYWNlXHJcbiAgICBsZXQgY2xlYW5lZFRleHQgPSB0ZXh0LnNsaWNlKCk7XHJcbiAgICBleGlzdGluZ1RhZ3MuZm9yRWFjaChleGlzdGluZ1NzbWwgPT4ge1xyXG4gICAgICBjb25zdCB3aGl0ZXNwYWNlID0gbmV3IEFycmF5KGV4aXN0aW5nU3NtbC50ZXh0Lmxlbmd0aCArIDEpLmpvaW4oJyAnKTtcclxuICAgICAgY2xlYW5lZFRleHQgPSBbXHJcbiAgICAgICAgY2xlYW5lZFRleHQuc2xpY2UoMCwgZXhpc3RpbmdTc21sLnN0YXJ0KSxcclxuICAgICAgICB3aGl0ZXNwYWNlLFxyXG4gICAgICAgIGNsZWFuZWRUZXh0LnNsaWNlKGV4aXN0aW5nU3NtbC5lbmQpLFxyXG4gICAgICBdLmpvaW4oJycpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3Qgc2VudGVuY2VFbmRJbmRpY2VzID0gdGhpcy5fZ2V0U2VudGVuY2VFbmRzKGNsZWFuZWRUZXh0KTtcclxuXHJcbiAgICAvLyBPbmx5IGluc2VydCByYW5kb20gbWFya3MgaW50byBzZW50ZW5jZXMgdGhhdCBkb24ndCBhbHJlYWR5IGhhdmUgYW55XHJcbiAgICBsZXQgcHJldkluZGV4ID0gMDtcclxuICAgIGNvbnN0IHRhcmdldEluZGljZXMgPSBzZW50ZW5jZUVuZEluZGljZXMuZmlsdGVyKGluZGV4ID0+IHtcclxuICAgICAgY29uc3QgY29udGFpbnNNYXJrID1cclxuICAgICAgICBtYXJrSW5kaWNlcy5maW5kSW5kZXgobWFya0luZGV4ID0+IHtcclxuICAgICAgICAgIHJldHVybiBwcmV2SW5kZXggPD0gbWFya0luZGV4ICYmIGluZGV4ID4gbWFya0luZGV4O1xyXG4gICAgICAgIH0pICE9PSAtMTtcclxuICAgICAgcHJldkluZGV4ID0gaW5kZXg7XHJcbiAgICAgIHJldHVybiAhY29udGFpbnNNYXJrO1xyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgcmFuZG9tTWFya2VkVGV4dCA9IHRoaXMuX2luc2VydFJhbmRvbU1hcmtzQXQoXHJcbiAgICAgIHRleHQsXHJcbiAgICAgIHRhcmdldEluZGljZXMsXHJcbiAgICAgIG1hcmtzXHJcbiAgICApO1xyXG5cclxuICAgIHJldHVybiByYW5kb21NYXJrZWRUZXh0O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2VuZXJhdGUgYSB2ZXJzaW9uIG9mIGdpdmVuIHRleHQgdGhhdCBpcyBlbmNsb3NlZCBieSBQb2xseSBzc21sIHNwZWFrIHRhZ3MuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIFRoZSB0ZXh0IHRvIHZhbGlkYXRlLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge3N0cmluZ30gLSBVcGRhdGVkIGlucHV0IHN0cmluZy5cclxuICAgKi9cclxuICBzdGF0aWMgdmFsaWRhdGVUZXh0KHRleHQpIHtcclxuICAgIGlmICghdGV4dCkge1xyXG4gICAgICB0ZXh0ID0gJzxzcGVhaz48L3NwZWFrPic7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0ZXh0ID0gdGV4dFxyXG4gICAgICAgIC5yZXBsYWNlKC8oXlxccyo8XFxzKnNwZWFrXFxzKik+XFxzKnwoXlxccyopLywgJzxzcGVhaz4nKVxyXG4gICAgICAgIC5yZXBsYWNlKC8oXFxzKjxcXHMqXFwvXFxzKnNwZWFrXFxzKj5cXHMqJHxcXHMqJCkvLCAnPC9zcGVhaz4nKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGV4dDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFBhcnNlIGFuIGlucHV0IHN0cmluZyBhbmQgaW5zZXJ0IFNTTUwgbWFya3MgYmFzZWQgb25cclxuICAgKiB3b3JkIG1hdGNoZXMgaW4gYSBtYXAuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSBJbnB1dCBzdHJpbmcuXHJcbiAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gW2luZGljZXMgPSBbXV0gLSBBbiBhcnJheSBvZiBpbmRpY2VzIGluIHRoZSB0ZXh0IGlucHV0XHJcbiAgICogd2hlcmUgcmFuZG9tIG1hcmtzIHNob3VsZCBiZSBpbnNlcnRlZC5cclxuICAgKiBAcGFyYW0ge0FycmF5LjxzdHJpbmc+fSBbbWFya3MgPSBbXV0gLSBBbiBhcnJheSBvZiBtYXJrIHN0cmluZ3MgdG8gY2hvb3NlXHJcbiAgICogZnJvbSB3aGVuIGluc2VydGluZyByYW5kb20gbWFya3MuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSAtIFVwZGF0ZWQgaW5wdXQgc3RyaW5nLlxyXG4gICAqL1xyXG4gIHN0YXRpYyBfaW5zZXJ0UmFuZG9tTWFya3NBdCh0ZXh0LCBpbmRpY2VzID0gW10sIG1hcmtzID0gW10pIHtcclxuICAgIGlmICghbWFya3MgfHwgbWFya3MubGVuZ3RoID09PSAwIHx8ICFpbmRpY2VzIHx8IGluZGljZXMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHJldHVybiB0ZXh0O1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBvZmZzZXQgPSAwO1xyXG4gICAgaW5kaWNlcy5mb3JFYWNoKGluZGV4ID0+IHtcclxuICAgICAgY29uc3QgcmFuZG9tTWFyayA9IGA8bWFyayBuYW1lPScke1xyXG4gICAgICAgIG1hcmtzW1V0aWxzLmdldFJhbmRvbUludCgwLCBtYXJrcy5sZW5ndGgpXVxyXG4gICAgICB9Jy8+YDtcclxuICAgICAgdGV4dCA9IFtcclxuICAgICAgICB0ZXh0LnNsaWNlKDAsIGluZGV4ICsgb2Zmc2V0KSxcclxuICAgICAgICByYW5kb21NYXJrLFxyXG4gICAgICAgIHRleHQuc2xpY2UoaW5kZXggKyBvZmZzZXQpLFxyXG4gICAgICBdLmpvaW4oJycpO1xyXG4gICAgICBvZmZzZXQgKz0gcmFuZG9tTWFyay5sZW5ndGg7XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gdGV4dDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFBhcnNlcyBhIHN0cmluZyBvZiB0ZXh0IGFuZCByZXR1cm5zIGFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGluZGljZXNcclxuICAgKiBvZiB0aGUgbGFzdCBjaGFyYWN0ZXIgaW4gYSBzZW50ZW5jZSB0aGF0IGlzIG5vdCBpbiB0aGUgZm9sbG93aW5nIGxpc3Q6XHJcbiAgICogICgnLicsICc/JywgJyEnKVxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gVGV4dCB0byBwcm9jZXNzIGZvciBlbmQgb2Ygc2VudGVuY2VcclxuICAgKiBpbmRpY2VzLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0FycmF5LjxudW1iZXI+fSAtIEFycmF5IG9mIGVuZCBvZiBzZW50ZW5jZSBpbmRpY2VzLlxyXG4gICAqL1xyXG4gIHN0YXRpYyBfZ2V0U2VudGVuY2VFbmRzKHRleHQpIHtcclxuICAgIGNvbnN0IHNlbnRlbmNlUmVnZXggPSAvW14uIT9dK1suIT9dKy9nO1xyXG4gICAgY29uc3QgZW5kU2VudGVuY2VSZWdleCA9IC9bLiE/XSsvO1xyXG5cclxuICAgIGxldCByZXN1bHQgPSBzZW50ZW5jZVJlZ2V4LmV4ZWModGV4dCk7XHJcbiAgICBjb25zdCBzZW50ZW5jZUVuZHMgPSBbXTtcclxuICAgIHdoaWxlIChyZXN1bHQgIT09IG51bGwpIHtcclxuICAgICAgLy8gZmluZCB0aGUgbGFzdCBub24tcHVuY3R1YXRpb24gY2hhcmFjdGVyXHJcbiAgICAgIGNvbnN0IHB1bmN0UmVzdWx0ID0gZW5kU2VudGVuY2VSZWdleC5leGVjKHJlc3VsdFswXSk7XHJcbiAgICAgIHNlbnRlbmNlRW5kcy5wdXNoKFxyXG4gICAgICAgIHJlc3VsdC5pbmRleCArIHJlc3VsdFswXS5sZW5ndGggLSBwdW5jdFJlc3VsdFswXS5sZW5ndGhcclxuICAgICAgKTtcclxuICAgICAgcmVzdWx0ID0gc2VudGVuY2VSZWdleC5leGVjKHRleHQpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBzZW50ZW5jZUVuZHM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQYXJzZSBhbiBpbnB1dCBzdHJpbmcgYW5kIGluc2VydCBTU01MIG1hcmtzIGJhc2VkIG9uXHJcbiAgICogd29yZCBtYXRjaGVzIGluIGEgbWFwLlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gSW5wdXQgc3RyaW5nLlxyXG4gICAqIEBwYXJhbSB7TWFwfSBtYXAgLSBNYXBwaW5nIG9mIHdvcmRzIHRvIG1hcmsgdmFsdWVzIHRoYXRcclxuICAgKiB3aWxsIGJlIGluc2VydGVkIGFzIHRoZSB2YWx1ZSBmb3IgYSBtYXJrJ3MgJ25hbWUnIGF0dHJpYnV0ZS5cclxuICAgKiBAcGFyYW0ge0FycmF5fSBkdXBsaWNhdGVzVG9DaGVjayAtIEEgbGlzdCBvZiBtYXJrIHZhbHVlcyB0byBjaGVjayBmb3IgZHVwbGljYXRlIGFnYWluc3QgdGhlIGZpcnN0IHdvcmRcclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IC0gVXBkYXRlZCBpbnB1dCBzdHJpbmcuXHJcbiAgICovXHJcbiAgc3RhdGljIF9pbnNlcnRNYXJrcyh0ZXh0LCBtYXAsIGR1cGxpY2F0ZXNUb0NoZWNrKSB7XHJcbiAgICBpZiAodGV4dCA9PT0gJycpIHJldHVybiB0ZXh0O1xyXG5cclxuICAgIGNvbnN0IHdvcmRSZWdleCA9IC9cXHcrfFxccyt8W15cXHNcXHddKy9nO1xyXG5cclxuICAgIGxldCBsb3dlckNhc2VXb3JkO1xyXG4gICAgbGV0IGNoZWNrRHVwbGljYXRlID0gdHJ1ZTtcclxuICAgIGNvbnN0IG1hcmtlZFdvcmRzID0gdGV4dC5tYXRjaCh3b3JkUmVnZXgpLm1hcCh3b3JkID0+IHtcclxuICAgICAgbG93ZXJDYXNlV29yZCA9IHdvcmQudG9Mb3dlckNhc2UoKTtcclxuXHJcbiAgICAgIGlmIChtYXAuaGFzKGxvd2VyQ2FzZVdvcmQpKSB7XHJcbiAgICAgICAgY29uc3QgbWFya3MgPSBtYXAuZ2V0KGxvd2VyQ2FzZVdvcmQpLm1hcChtYXJrID0+IHtcclxuICAgICAgICAgIGlmIChjaGVja0R1cGxpY2F0ZSkge1xyXG4gICAgICAgICAgICBjaGVja0R1cGxpY2F0ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICByZXR1cm4gZHVwbGljYXRlc1RvQ2hlY2suaW5jbHVkZXMobWFyaylcclxuICAgICAgICAgICAgICA/ICcnXHJcbiAgICAgICAgICAgICAgOiBgPG1hcmsgbmFtZT0nJHttYXJrfScvPmA7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gYDxtYXJrIG5hbWU9JyR7bWFya30nLz5gO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBgJHttYXJrcy5qb2luKCcnKX0ke3dvcmR9YDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjaGVja0R1cGxpY2F0ZSA9IGZhbHNlO1xyXG4gICAgICAgIHJldHVybiB3b3JkO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCBleGlzdGluZ01hcmtzID0gZHVwbGljYXRlc1RvQ2hlY2subWFwKG1hcmsgPT4ge1xyXG4gICAgICByZXR1cm4gYDxtYXJrIG5hbWU9JyR7bWFya30nLz5gO1xyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIGAke2V4aXN0aW5nTWFya3Muam9pbignJyl9JHttYXJrZWRXb3Jkcy5qb2luKCcnKX1gO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUHJvY2Vzc2VzIGFuIGlucHV0IG9iamVjdCBmb3IgbWFwcGluZyBhbiBhcnJheVxyXG4gICAqIG9mIHdvcmRzIHRvIHNwZWNpZmljIG1hcmsga2V5cy4gQ29udmVydHMgdGhlIGlucHV0XHJcbiAgICogbWFwIGludG8gYSBNYXAgd2l0aCBhIG1vcmUgZWZmaWNpZW50IGZvcm1hdCBmb3JcclxuICAgKiBwZXJmb3JtaW5nIG1hcmsgaW5qZWN0aW9uLlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBtYXAgLSBJbnB1dCBvYmplY3QgdGhhdCBtYXBzIG1hcmsga2V5c1xyXG4gICAqIHRvIGFycmF5cyBvZiB3b3Jkcy5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtNYXB9IC0gTWFwIGZvciBpbnRlcm5hbCB1c2UuXHJcbiAgICovXHJcbiAgc3RhdGljIF9wcm9jZXNzSW5wdXRNYXAobWFwKSB7XHJcbiAgICBjb25zdCBpbnRlcm5hbE1hcCA9IG5ldyBNYXAoKTtcclxuXHJcbiAgICBsZXQgbGlzdCA9IFtdO1xyXG4gICAgT2JqZWN0LmVudHJpZXMobWFwKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcclxuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICAgIGBDYW5ub3QgZ2VuZXJhdGUgU1NNTCBtYXJrcyBmcm9tIG1hcCBcIiR7bWFwfVwiIGJlY2F1c2UgdmFsdWUgZm9yIGtleSAnJHtrZXl9JyBpcyBub3QgYW4gYXJyYXkuYFxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHZhbHVlLmZvckVhY2god29yZCA9PiB7XHJcbiAgICAgICAgY29uc3QgbG93ZXJDYXNlV29yZCA9IHdvcmQudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICBsaXN0ID0gaW50ZXJuYWxNYXAuZ2V0KGxvd2VyQ2FzZVdvcmQpO1xyXG5cclxuICAgICAgICBpZiAobGlzdCAhPT0gdW5kZWZpbmVkICYmICFsaXN0LmluY2x1ZGVzKGtleSkpIHtcclxuICAgICAgICAgIGludGVybmFsTWFwLnNldChsb3dlckNhc2VXb3JkLCBbLi4ubGlzdCwga2V5XSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGludGVybmFsTWFwLnNldChsb3dlckNhc2VXb3JkLCBba2V5XSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBpbnRlcm5hbE1hcDtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IFRleHRUb1NwZWVjaFV0aWxzO1xyXG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cclxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVC0wXHJcbmltcG9ydCBBYnN0cmFjdEhvc3RGZWF0dXJlIGZyb20gJ2NvcmUvQWJzdHJhY3RIb3N0RmVhdHVyZSc7XHJcbmltcG9ydCBBbmltYXRpb25VdGlscyBmcm9tICdjb3JlL2FuaW1wYWNrL0FuaW1hdGlvblV0aWxzJztcclxuaW1wb3J0IE1hdGhVdGlscyBmcm9tICdjb3JlL01hdGhVdGlscyc7XHJcbmltcG9ydCBEZWZlcnJlZCBmcm9tICdjb3JlL0RlZmVycmVkJztcclxuaW1wb3J0IFNwZWVjaCBmcm9tICcuL0Fic3RyYWN0U3BlZWNoJztcclxuaW1wb3J0IFRleHRUb1NwZWVjaFV0aWxzIGZyb20gJy4vVGV4dFRvU3BlZWNoVXRpbHMnO1xyXG5cclxuLyoqXHJcbiAqIFRoZSBBbWF6b24gUG9sbHkgc2VydmljZSBvYmplY3QuXHJcbiAqIEBleHRlcm5hbCBQb2xseVxyXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NKYXZhU2NyaXB0U0RLL2xhdGVzdC9BV1MvUG9sbHkuaHRtbFxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUgcHJlc2lnbmVyIG9iamVjdCB0aGF0IGNhbiBiZSB1c2VkIHRvIGdlbmVyYXRlIHByZXNpZ25lZCB1cmxzIGZvciB0aGUgUG9sbHkgc2VydmljZS5cclxuICogQGV4dGVybmFsIFByZXNpZ25lclxyXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NKYXZhU2NyaXB0U0RLL2xhdGVzdC9BV1MvUG9sbHkvUHJlc2lnbmVyLmh0bWxcclxuICovXHJcblxyXG4vLyBBdmFpbGFibGUgb3B0aW9ucyBmb3IgUG9sbHlcclxuY29uc3QgZW5naW5lcyA9IFsnc3RhbmRhcmQnLCAnbmV1cmFsJ107XHJcbmNvbnN0IGF1ZGlvRm9ybWF0cyA9IFsnbXAzJywgJ29nZ192b3JiaXMnLCAncGNtJ107XHJcbmNvbnN0IHNwZWVjaG1hcmtUeXBlcyA9IFsnc2VudGVuY2UnLCAnc3NtbCcsICd2aXNlbWUnLCAnd29yZCddO1xyXG5jb25zdCBzYW1wbGVSYXRlcyA9IHtcclxuICBtcDM6IHtcclxuICAgIHJhdGVzOiBbJzgwMDAnLCAnMTYwMDAnLCAnMjIwNTAnLCAnMjQwMDAnXSxcclxuICAgIGRlZmF1bHRzOiB7XHJcbiAgICAgIHN0YW5kYXJkOiAnMjA1MCcsXHJcbiAgICAgIG5ldXJhbDogJzI0MDAnLFxyXG4gICAgfSxcclxuICB9LFxyXG4gIHBjbToge1xyXG4gICAgcmF0ZXM6IFsnODAwMCcsICcxNjAwMCddLFxyXG4gICAgZGVmYXVsdHM6IHtcclxuICAgICAgc3RhbmRhcmQ6ICcxNjAwJyxcclxuICAgICAgbmV1cmFsOiAnMTYwMCcsXHJcbiAgICB9LFxyXG4gIH0sXHJcbn07XHJcbnNhbXBsZVJhdGVzLm9nZ192b3JiaXMgPSBzYW1wbGVSYXRlcy5tcDM7XHJcbmxldCBhd3NWZXJzaW9uO1xyXG5cclxuLyoqXHJcbiAqIEJhc2UgY2xhc3MgZm9yIHR1cm5pbmcgdGV4dCBpbnB1dCBpbnRvIHBsYXlhYmxlIGF1ZGlvLiBUaGVyZSBzaG91bGQgYmUgb25lIGluc3RhbmNlXHJcbiAqIHBlciBzcGVha2VyLCBlYWNoIGluc3RhbmNlIGNhbiBwbGF5IG9ubHkgb25lIHBpZWNlIG9mIHRleHQgYXQgYSB0aW1lLlxyXG4gKlxyXG4gKiBAZXh0ZW5kcyBBYnN0cmFjdEhvc3RGZWF0dXJlXHJcbiAqIEBhYnN0cmFjdFxyXG4gKlxyXG4gKiBAcHJvcGVydHkgeyhudW1iZXJ8dW5kZWZpbmVkKX0gQVdTX1ZFUlNJT04gLSBHZXRzIHRoZSB2ZXJzaW9uIG9mIEFXUyBTREsgYmVpbmdcclxuICogdXNlZC4gV2lsbCBiZSB1bmRlZmluZWQgdW50aWwgW2luaXRpYWxpemVTZXJ2aWNlXXtAbGluayBBYnN0cmFjdFRleHRUb1NwZWVjaEZlYXR1cmUuaW5pdGlhbGl6ZVNlcnZpY2V9XHJcbiAqIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBleGVjdXRlZC5cclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtQT0xMWV9NSU5fTkVVUkFMX1ZFUlNJT049JzIuNTAzJ10gLSBHZXRzIHRoZSBtaW5pbXVtIHZlcnNpb25cclxuICogb2YgdGhlIEFXUyBTREsgdGhhdCBpcyBuZWNlc3NhcnkgdG8gdXNlIG5ldXJhbCB2b2ljZXMgd2l0aCBBV1MgUG9sbHkuXHJcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBQT0xMWV9ERUZBVUxUUyAtIERlZmF1bHQgdmFsdWVzIHRvIHVzZSB3aXRoIGNhbGxzIHRvIHtAbGluayBleHRlcm5hbDpQb2xseX0uXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbUE9MTFlfREVGQVVMVFMuRW5naW5lPSdzdGFuZGFyZCddXHJcbiAqIEBwcm9wZXJ0eSB7QXJyYXkuPHN0cmluZz59IFtQT0xMWV9ERUZBVUxUUy5MZXhpY29uTmFtZXM9W11dXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbUE9MTFlfREVGQVVMVFMuT3V0cHV0Rm9ybWF0PSdtcDMnXVxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW1BPTExZX0RFRkFVTFRTLlNhbXBsZVJhdGU9JzIyMDUwJ11cclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtQT0xMWV9ERUZBVUxUUy5UZXh0PScnXVxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW1BPTExZX0RFRkFVTFRTLlRleHRUeXBlPSdzc21sJ11cclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtQT0xMWV9ERUZBVUxUUy5Wb2ljZUlkPSdBbXknXVxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW1BPTExZX0RFRkFVTFRTLkxhbmd1YWdlQ29kZT0nZW4tR0InXVxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW1BPTExZX0RFRkFVTFRTLkxhbmd1YWdlTmFtZT0nQnJpdGlzaCBFbmdsaXNoJ11cclxuICogQHByb3BlcnR5IHtBcnJheS48c3RyaW5nPn0gW1BPTExZX1ZPSUNFUz1bXV0gLSBBbiBhcnJheSBvZiB2b2ljZXMgYXZhaWxhYmxlIGluXHJcbiAqIFBvbGx5LiBXaWxsIGJlIGVtcHR5IHVudGlsIFtpbml0aWFsaXplU2VydmljZV17QGxpbmsgQWJzdHJhY3RUZXh0VG9TcGVlY2hGZWF0dXJlLmluaXRpYWxpemVTZXJ2aWNlfVxyXG4gKiBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgZXhlY3V0ZWQuIFNlZSBbUG9sbHkgRG9jdW1lbnRhdGlvbl17QGxpbmsgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3BvbGx5L2xhdGVzdC9kZy92b2ljZWxpc3QuaHRtbH1cclxuICogZm9yIGEgZnVsbCBsaXN0IG9mIGF2YWlsYWJsZSB2b2ljZXMuXHJcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBbUE9MTFlfTEFOR1VBR0VTPXt9XSAtIEFuIG9iamVjdCB0aGF0IG1hcHMgbGFuZ3VhZ2UgbmFtZXNcclxuICogdG8gbGFuZ3VhZ2UgY29kZXMgdGhhdCBhcmUgYXZhaWxhYmxlIGluIFBvbGx5LiBXaWxsIGJlIGVtcHR5IHVudGlsXHJcbiAqIFtpbml0aWFsaXplU2VydmljZV17QGxpbmsgQWJzdHJhY3RUZXh0VG9TcGVlY2hGZWF0dXJlLmluaXRpYWxpemVTZXJ2aWNlfVxyXG4gKiBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgZXhlY3V0ZWQuIFNlZSBbUG9sbHkgRG9jdW1lbnRhdGlvbl17QGxpbmsgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3BvbGx5L2xhdGVzdC9kZy9TdXBwb3J0ZWRMYW5ndWFnZS5odG1sfVxyXG4gKiBmb3IgYSBmdWxsIGxpc3Qgb2YgYXZhaWxhYmxlIGxhbmd1YWdlcyBhbmQgY29ycmVzcG9uZGluZyBjb2Rlcy5cclxuICogQHByb3BlcnR5IHtPYmplY3R9IFtQT0xMWV9MQU5HVUFHRV9DT0RFUz17fV0gLSBBbiBvYmplY3QgdGhhdCBtYXBzIGxhbmd1YWdlIGNvZGVzXHJcbiAqIHRvIGxhbmd1YWdlIG5hbWVzIHRoYXQgYXJlIGF2YWlsYWJsZSBpbiBQb2xseS4gV2lsbCBiZSBlbXB0eSB1bnRpbFxyXG4gKiBbaW5pdGlhbGl6ZVNlcnZpY2Vde0BsaW5rIEFic3RyYWN0VGV4dFRvU3BlZWNoRmVhdHVyZS5pbml0aWFsaXplU2VydmljZX1cclxuICogaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IGV4ZWN1dGVkLiBTZWUgW1BvbGx5IERvY3VtZW50YXRpb25de0BsaW5rIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9wb2xseS9sYXRlc3QvZGcvU3VwcG9ydGVkTGFuZ3VhZ2UuaHRtbH1cclxuICogZm9yIGEgZnVsbCBsaXN0IG9mIGF2YWlsYWJsZSBsYW5ndWFnZXMgYW5kIGNvcnJlc3BvbmRpbmcgY29kZXMuXHJcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBFVkVOVFMgLSBCdWlsdC1pbiBtZXNzYWdlcyB0aGF0IHRoZSBmZWF0dXJlIGVtaXRzLiBXaGVuIHRoZVxyXG4gKiBmZWF0dXJlIGlzIGFkZGVkIHRvIGEge0BsaW5rIGNvcmUvSG9zdE9iamVjdH0sIGV2ZW50IG5hbWVzIHdpbGwgYmUgcHJlZml4ZWQgYnkgdGhlXHJcbiAqIG5hbWUgb2YgdGhlIGZlYXR1cmUgY2xhc3MgKyAnLicuXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbRVZFTlRTLnJlYWR5PW9uUmVhZHlFdmVudF0gLSBNZXNzYWdlIHRoYXQgaXMgZW1pdHRlZCBhZnRlclxyXG4gKiBbaW5pdGlhbGl6ZVNlcnZpY2Vde0BsaW5rIEFic3RyYWN0VGV4dFRvU3BlZWNoRmVhdHVyZS5pbml0aWFsaXplU2VydmljZX0gaGFzIGJlZW5cclxuICogc3VjY2Vzc2Z1bGx5IGV4ZWN1dGVkLlxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW0VWRU5UUy5wbGF5PW9uUGxheUV2ZW50XSAtIE1lc3NhZ2UgdGhhdCBpcyBlbWl0dGVkIGFmdGVyXHJcbiAqIGVhY2ggY2FsbCB0byBbcGxheV17QGxpbmsgQWJzdHJhY3RUZXh0VG9TcGVlY2hGZWF0dXJlI3BsYXl9LiBUaGUgc3BlZWNoIHRoYXQgd2FzIHBsYXllZFxyXG4gKiBpcyBzdXBwbGllZCBhcyBhbiBhcmd1bWVudCB0byBsaXN0ZW5lciBmdW5jdGlvbnMuXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbRVZFTlRTLnBhdXNlPW9uUGF1c2VFdmVudF0gLSBNZXNzYWdlIHRoYXQgaXMgZW1pdHRlZCBhZnRlclxyXG4gKiBlYWNoIGNhbGwgdG8gW3BhdXNlXXtAbGluayBBYnN0cmFjdFRleHRUb1NwZWVjaEZlYXR1cmUjcGF1c2V9LiBUaGUgc3BlZWNoIHRoYXQgd2FzIHBhdXNlZFxyXG4gKiBpcyBzdXBwbGllZCBhcyBhbiBhcmd1bWVudCB0byBsaXN0ZW5lciBmdW5jdGlvbnMuXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbRVZFTlRTLnJlc3VtZT1vblJlc3VtZUV2ZW50XSAtIE1lc3NhZ2UgdGhhdCBpcyBlbWl0dGVkIGFmdGVyXHJcbiAqIGVhY2ggY2FsbCB0byBbcmVzdW1lXXtAbGluayBBYnN0cmFjdFRleHRUb1NwZWVjaEZlYXR1cmUjcmVzdW1lfS4gVGhlIHNwZWVjaCB0aGF0IHdhc1xyXG4gKiByZXN1bWVkIGlzIHN1cHBsaWVkIGFzIGFuIGFyZ3VtZW50IHRvIGxpc3RlbmVyIGZ1bmN0aW9ucy5cclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtFVkVOVFMuaW50ZXJydXB0PW9uSW50ZXJydXB0RXZlbnRdIC0gTWVzc2FnZSB0aGF0IGlzIGVtaXR0ZWRcclxuICogaWYgdGhlcmUgaXMgYSBjdXJyZW50IHNwZWVjaCBpbiBwcm9ncmVzcyBhbmQgW3BsYXlde0BsaW5rIEFic3RyYWN0VGV4dFRvU3BlZWNoRmVhdHVyZSNwbGF5fVxyXG4gKiBvciBbcmVzdW1lXXtAbGluayBBYnN0cmFjdFRleHRUb1NwZWVjaEZlYXR1cmUjcmVzdW1lfSBhcmUgZXhlY3V0ZWQgZm9yIGEgbmV3IHNwZWVjaC5cclxuICogVGhlIHNwZWVjaCB0aGF0IHdhcyBpbnRlcnJ1cHRlZCBpcyBzdXBwbGllZCBhcyBhbiBhcmd1bWVudCB0byBsaXN0ZW5lciBmdW5jdGlvbnMuXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbRVZFTlRTLnN0b3A9b25TdG9wRXZlbnRdIC0gTWVzc2FnZSB0aGF0IGlzIGVtaXR0ZWQgYWZ0ZXJcclxuICogZWFjaCBjYWxsIHRvIFtzdG9wXXtAbGluayBBYnN0cmFjdFRleHRUb1NwZWVjaEZlYXR1cmUjc3RvcH0gYW5kIHdoZW4gYSBzcGVlY2ggcmVhY2hlc1xyXG4gKiB0aGUgZW5kIG9mIHBsYXliYWNrLiBUaGUgc3BlZWNoIHRoYXQgd2FzIHN0b3BwZWQgaXMgc3VwcGxpZWQgYXMgYW4gYXJndW1lbnRcclxuICogdG8gbGlzdGVuZXIgZnVuY3Rpb25zLlxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW0VWRU5UUy5zZW50ZW5jZT1vblNlbnRlbmNlRXZlbnRdIC0gTWVzc2FnZSB0aGF0IGlzIGVtaXR0ZWRcclxuICogZWFjaCB0aW1lIGEgc2VudGVuY2Ugc3BlZWNobWFyayBpcyBlbmNvdW50ZXJlZCB3aG9zZSB0aW1lc3RhbXAgbWF0Y2hlcyB1cCB3aXRoXHJcbiAqIHRoZSBzcGVlY2ggYXVkaW8ncyBjdXJyZW50IHRpbWUuIFRoZSBzZW50ZW5jZSBzcGVlY2htYXJrIG9iamVjdCBpcyBzdXBwbGllZCBhc1xyXG4gKiBhbiBhcmd1bWVudCB0byBsaXN0ZW5lciBmdW5jdGlvbnMuXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbRVZFTlRTLndvcmQ9b25Xb3JkRXZlbnRdIC0gTWVzc2FnZSB0aGF0IGlzIGVtaXR0ZWRcclxuICogZWFjaCB0aW1lIGEgd29yZCBzcGVlY2htYXJrIGlzIGVuY291bnRlcmVkIHdob3NlIHRpbWVzdGFtcCBtYXRjaGVzIHVwIHdpdGhcclxuICogdGhlIHNwZWVjaCBhdWRpbydzIGN1cnJlbnQgdGltZS4gVGhlIHdvcmQgc3BlZWNobWFyayBvYmplY3QgaXMgc3VwcGxpZWQgYXNcclxuICogYW4gYXJndW1lbnQgdG8gbGlzdGVuZXIgZnVuY3Rpb25zLlxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW0VWRU5UUy52aXNlbWU9b25WaXNlbWVFdmVudF0gLSBNZXNzYWdlIHRoYXQgaXMgZW1pdHRlZFxyXG4gKiBlYWNoIHRpbWUgYSB2aXNlbWUgc3BlZWNobWFyayBpcyBlbmNvdW50ZXJlZCB3aG9zZSB0aW1lc3RhbXAgbWF0Y2hlcyB1cCB3aXRoXHJcbiAqIHRoZSBzcGVlY2ggYXVkaW8ncyBjdXJyZW50IHRpbWUuIFRoZSB2aXNlbWUgc3BlZWNobWFyayBvYmplY3QgaXMgc3VwcGxpZWQgYXNcclxuICogYW4gYXJndW1lbnQgdG8gbGlzdGVuZXIgZnVuY3Rpb25zLlxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW0VWRU5UUy5zc21sPW9uU3NtbEV2ZW50XSAtIE1lc3NhZ2UgdGhhdCBpcyBlbWl0dGVkXHJcbiAqIGVhY2ggdGltZSBhIHNzbWwgc3BlZWNobWFyayBpcyBlbmNvdW50ZXJlZCB3aG9zZSB0aW1lc3RhbXAgbWF0Y2hlcyB1cCB3aXRoXHJcbiAqIHRoZSBzcGVlY2ggYXVkaW8ncyBjdXJyZW50IHRpbWUuIFRoZSBzc21sIHNwZWVjaG1hcmsgb2JqZWN0IGlzIHN1cHBsaWVkIGFzXHJcbiAqIGFuIGFyZ3VtZW50IHRvIGxpc3RlbmVyIGZ1bmN0aW9ucy5cclxuICogQHByb3BlcnR5IHtPYmplY3R9IFNFUlZJQ0VTIC0gQVdTIHNlcnZpY2VzIHRoYXQgYXJlIG5lY2Vzc2FyeSBmb3IgdGhlIGZlYXR1cmVcclxuICogdG8gZnVuY3Rpb24uXHJcbiAqIEBwcm9wZXJ0eSB7ZXh0ZXJuYWw6UG9sbHl9IFNFUlZJQ0VTLnBvbGx5IC0gVGhlIFBvbGx5IHNlcnZpY2UgdGhhdCBpcyB1c2VkXHJcbiAqIHRvIHN5bnRoZXNpemUgc3BlZWNobWFya3MuIFdpbGwgYmUgdW5kZWZpbmVkIHVudGlsIFtpbml0aWFsaXplU2VydmljZV17QGxpbmsgQWJzdHJhY3RUZXh0VG9TcGVlY2hGZWF0dXJlLmluaXRpYWxpemVTZXJ2aWNlfVxyXG4gKiBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgZXhlY3V0ZWRcclxuICogQHByb3BlcnR5IHtleHRlcm5hbDpQcmVzaWduZXJ9IFNFUlZJQ0VTLnByZXNpZ25lciAtIFRoZSBQb2xseSBQcmVzaWduZXJcclxuICogb2JqZWN0IHRoYXQgaXMgdXNlZCB0byBzeW50aGVzaXplIHNwZWVjaCBhdWRpby4gV2lsbCBiZSB1bmRlZmluZWQgdW50aWxcclxuICogW2luaXRpYWxpemVTZXJ2aWNlXXtAbGluayBBYnN0cmFjdFRleHRUb1NwZWVjaEZlYXR1cmUuaW5pdGlhbGl6ZVNlcnZpY2V9XHJcbiAqIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBleGVjdXRlZC5cclxuICovXHJcbmNsYXNzIEFic3RyYWN0VGV4dFRvU3BlZWNoRmVhdHVyZSBleHRlbmRzIEFic3RyYWN0SG9zdEZlYXR1cmUge1xyXG4gIC8qKlxyXG4gICAqIEBjb25zdHJ1Y3RvclxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtjb3JlL0hvc3RPYmplY3R9IGhvc3QgLSBIb3N0IG9iamVjdCBtYW5hZ2luZyB0aGUgZmVhdHVyZS5cclxuICAgKiBAcGFyYW0ge09iamVjdD19IG9wdGlvbnMgLSBPcHRpb25zIHRoYXQgd2lsbCBiZSBzZW50IHRvIFBvbGx5IGZvciBlYWNoIHNwZWVjaC5cclxuICAgKiBAcGFyYW0ge3N0cmluZz19IG9wdGlvbnMudm9pY2UgLSBUaGUgbmFtZSBvZiB0aGUgUG9sbHkgdm9pY2UgdG8gdXNlIGZvciBhbGwgc3BlZWNoLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nPX0gb3B0aW9ucy5lbmdpbmUgLSBUaGUgbmFtZSBvZiB0aGUgUG9sbHkgZW5naW5lIHRvIHVzZSBmb3IgYWxsIHNwZWVjaC5cclxuICAgKiBAcGFyYW0ge3N0cmluZz19IG9wdGlvbnMubGFuZ3VhZ2UgLSBUaGUgbmFtZSBvZiB0aGUgbGFuZ3VhZ2UgdG8gdXNlIGZvciBhbGwgc3BlZWNoLlxyXG4gICAqIEBwYXJhbSB7YXVkaW9Gb3JtYXR9IFtvcHRpb25zLmF1ZGlvRm9ybWF0PSdtcDMnXSAtIFRoZSBmb3JtYXQgdG8gdXNlIGZvciBnZW5lcmF0ZWRcclxuICAgKiBhdWRpbyBmb3IgYWxsIHNwZWVjaGVzLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nPX0gb3B0aW9ucy5zYW1wbGVSYXRlIC0gVGhlIHNhbXBsZSByYXRlIGZvciBhdWRpbyBmaWxlcyBmb3IgYWxsXHJcbiAgICogc3BlZWNoZXMuXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLnNwZWVjaG1hcmtPZmZzZXQ9MF0gLSBBbW91bnQgb2YgdGltZSBpbiBzZWNvbmRzIHRvXHJcbiAgICogb2Zmc2V0IHNwZWVjaG1hcmsgZXZlbnQgZW1pc3Npb24gZnJvbSB0aGUgYXVkaW8uXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLm1pbkVuZE1hcmtEdXJhdGlvbj0uMDVdIC0gVGhlIG1pbmltdW0gYW1vdW50IG9mIHRpbWVcclxuICAgKiBpbiBzZWNvbmRzIHRoYXQgdGhlIGxhc3Qgc3BlZWNobWFyayBvZiBlYWNoIHR5cGUgaW4gYSBzcGVlY2ggY2FuIGhhdmUgaXRzXHJcbiAgICogZHVyYXRpb24gcHJvcGVydHkgc2V0IHRvLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy52b2x1bWU9MV0gLSBUaGUgZGVmYXVsdCB2b2x1bWUgdG8gcGxheSBzcGVlY2ggYXVkaW9cclxuICAgKiB3aXRoLlxyXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuaXNHbG9iYWw9ZmFsc2VdIC0gV2hldGhlciB0aGUgYXVkaW8gc291cmNlIHNob3VsZCBkZWZhdWx0XHJcbiAgICogdG8gZ2xvYmFsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBvciBub3QgaXQgaXMgYXR0YWNoZWQgdG8gYW4gb2JqZWN0LlxyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgaG9zdCxcclxuICAgIG9wdGlvbnMgPSB7XHJcbiAgICAgIHZvaWNlOiB1bmRlZmluZWQsXHJcbiAgICAgIGVuZ2luZTogdW5kZWZpbmVkLFxyXG4gICAgICBsYW5ndWFnZTogdW5kZWZpbmVkLFxyXG4gICAgICBhdWRpb0Zvcm1hdDogJ21wMycsXHJcbiAgICAgIHNhbXBsZVJhdGU6IHVuZGVmaW5lZCxcclxuICAgICAgc3BlZWNobWFya09mZnNldDogMCxcclxuICAgICAgbWluRW5kTWFya0R1cmF0aW9uOiAwLjA1LFxyXG4gICAgICB2b2x1bWU6IDEsXHJcbiAgICAgIGlzR2xvYmFsOiBmYWxzZSxcclxuICAgIH1cclxuICApIHtcclxuICAgIHN1cGVyKGhvc3QpO1xyXG5cclxuICAgIHRoaXMuX3NwZWVjaENhY2hlID0ge307XHJcbiAgICB0aGlzLl9jdXJyZW50U3BlZWNoID0gbnVsbDtcclxuICAgIHRoaXMuX2N1cnJlbnRQcm9taXNlID0gbnVsbDtcclxuICAgIHRoaXMuX2lzVmFsaWRhdGVkID0gZmFsc2U7XHJcbiAgICB0aGlzLnNwZWVjaG1hcmtPZmZzZXQgPSBOdW1iZXIuaXNOYU4oTnVtYmVyKG9wdGlvbnMuc3BlZWNobWFya09mZnNldCkpXHJcbiAgICAgID8gMFxyXG4gICAgICA6IE51bWJlcihvcHRpb25zLnNwZWVjaG1hcmtPZmZzZXQpO1xyXG4gICAgdGhpcy5taW5FbmRNYXJrRHVyYXRpb24gPSBOdW1iZXIuaXNOYU4oTnVtYmVyKG9wdGlvbnMubWluRW5kTWFya0R1cmF0aW9uKSlcclxuICAgICAgPyAwXHJcbiAgICAgIDogTnVtYmVyKG9wdGlvbnMubWluRW5kTWFya0R1cmF0aW9uKTtcclxuICAgIHRoaXMudm9sdW1lID0gTnVtYmVyLmlzTmFOKE51bWJlcihvcHRpb25zLnZvbHVtZSkpXHJcbiAgICAgID8gMVxyXG4gICAgICA6IE51bWJlcihvcHRpb25zLnZvbHVtZSk7XHJcbiAgICB0aGlzLl9pc0dsb2JhbCA9IG9wdGlvbnMuaXNHbG9iYWwgfHwgZmFsc2U7XHJcbiAgICB0aGlzLl9wcm9taXNlcyA9IHtcclxuICAgICAgdm9sdW1lOiBEZWZlcnJlZC5yZXNvbHZlKCksXHJcbiAgICB9O1xyXG4gICAgdGhpcy5fdm9sdW1lUGF1c2VkID0gZmFsc2U7XHJcblxyXG4gICAgLy8gU2V0IGRlZmF1bHQgb3B0aW9ucyBmb3IgZWFjaCBzcGVlY2hcclxuICAgIHRoaXMuX3ZvaWNlID0gb3B0aW9ucy52b2ljZSB8fCB0aGlzLmNvbnN0cnVjdG9yLlBPTExZX0RFRkFVTFRTLlZvaWNlSWQ7XHJcbiAgICB0aGlzLl9sYW5ndWFnZSA9XHJcbiAgICAgIG9wdGlvbnMubGFuZ3VhZ2UgfHwgdGhpcy5jb25zdHJ1Y3Rvci5QT0xMWV9ERUZBVUxUUy5MYW5ndWFnZU5hbWU7XHJcbiAgICB0aGlzLl9lbmdpbmUgPSBlbmdpbmVzLmluY2x1ZGVzKG9wdGlvbnMuZW5naW5lKVxyXG4gICAgICA/IG9wdGlvbnMuZW5naW5lXHJcbiAgICAgIDogdGhpcy5jb25zdHJ1Y3Rvci5QT0xMWV9ERUZBVUxUUy5FbmdpbmU7XHJcbiAgICB0aGlzLl9hdWRpb0Zvcm1hdCA9IGF1ZGlvRm9ybWF0cy5pbmNsdWRlcyhvcHRpb25zLmF1ZGlvRm9ybWF0KVxyXG4gICAgICA/IG9wdGlvbnMuYXVkaW9Gb3JtYXRcclxuICAgICAgOiB0aGlzLmNvbnN0cnVjdG9yLlBPTExZX0RFRkFVTFRTLk91dHB1dEZvcm1hdDtcclxuICAgIHRoaXMuX3NhbXBsZVJhdGUgPSBzYW1wbGVSYXRlc1t0aGlzLl9hdWRpb0Zvcm1hdF0ucmF0ZXMuaW5jbHVkZXMoXHJcbiAgICAgIG9wdGlvbnMuc2FtcGxlUmF0ZVxyXG4gICAgKVxyXG4gICAgICA/IG9wdGlvbnMuc2FtcGxlUmF0ZVxyXG4gICAgICA6IHRoaXMuY29uc3RydWN0b3IuUE9MTFlfREVGQVVMVFMuU2FtcGxlUmF0ZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFN0b3JlIFBvbGx5LCBQcmVzaWduZXIgYW5kIEFXUyBTREsgVmVyc2lvbiBmb3IgdXNlIGFjcm9zcyBhbGwgaW5zdGFuY2VzLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtleHRlcm5hbDpQb2xseX0gcG9sbHkgLSBQb2xseSBpbnN0YW5jZSB0byB1c2UgdG8gZ2VuZXJhdGUgc3BlZWNobWFya3MuXHJcbiAgICogQHBhcmFtIHtleHRlcm5hbDpQcmVzaWduZXJ9IHByZXNpZ25lciAtIFByZXNpZ25lciBpbnN0YW5jZSB0byB1c2UgdG8gZ2VuZXJhdGVcclxuICAgKiBhdWRpbyBVUkxzLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB2ZXJzaW9uIC0gVmVyc2lvbiBvZiB0aGUgQVdTIFNESyB0byB1c2UgdG8gdmFsaWRhdGUgdm9pY2Ugb3B0aW9ucy5cclxuICAgKi9cclxuICBzdGF0aWMgaW5pdGlhbGl6ZVNlcnZpY2UocG9sbHksIHByZXNpZ25lciwgdmVyc2lvbikge1xyXG4gICAgLy8gTWFrZSBzdXJlIGFsbCB3ZXJlIGRlZmluZWRcclxuICAgIGlmIChcclxuICAgICAgcG9sbHkgPT09IHVuZGVmaW5lZCB8fFxyXG4gICAgICBwcmVzaWduZXIgPT09IHVuZGVmaW5lZCB8fFxyXG4gICAgICB2ZXJzaW9uID09PSB1bmRlZmluZWRcclxuICAgICkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgJ0Nhbm5vdCBpbml0aWFsaXplIFRleHRUb1NwZWVjaCBmZWF0dXJlLiBBbGwgYXJndW1lbnRzIG11c3QgYmUgZGVmaW5lZC4nXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQWRkIHN1bWVyaWFuIGhvc3RzIHVzZXItYWdlbnRcclxuICAgIGlmIChwb2xseS5jb25maWcpIHtcclxuICAgICAgcG9sbHkuY29uZmlnLmN1c3RvbVVzZXJBZ2VudCA9IHRoaXMuX3dpdGhDdXN0b21Vc2VyQWdlbnQoXHJcbiAgICAgICAgcG9sbHkuY29uZmlnLmN1c3RvbVVzZXJBZ2VudFxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgaWYgKHByZXNpZ25lci5zZXJ2aWNlICYmIHByZXNpZ25lci5zZXJ2aWNlLmNvbmZpZykge1xyXG4gICAgICBwcmVzaWduZXIuc2VydmljZS5jb25maWcuY3VzdG9tVXNlckFnZW50ID0gdGhpcy5fd2l0aEN1c3RvbVVzZXJBZ2VudChcclxuICAgICAgICBwcmVzaWduZXIuc2VydmljZS5jb25maWcuY3VzdG9tVXNlckFnZW50XHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5faXNSZWFkeSA9IGZhbHNlO1xyXG5cclxuICAgIC8vIFN0b3JlIHBhcmFtZXRlcnNcclxuICAgIHRoaXMuU0VSVklDRVMucG9sbHkgPSBwb2xseTtcclxuICAgIHRoaXMuU0VSVklDRVMucHJlc2lnbmVyID0gcHJlc2lnbmVyO1xyXG4gICAgYXdzVmVyc2lvbiA9IHZlcnNpb247XHJcblxyXG4gICAgLy8gQ2xlYXIgdGhlIGN1cnJlbnQgcG9sbHkgb2JqZWN0c1xyXG4gICAgY29uc3QgYXZhaWxhYmxlVm9pY2VzID0gdGhpcy5QT0xMWV9WT0lDRVM7XHJcbiAgICBhdmFpbGFibGVWb2ljZXMubGVuZ3RoID0gMDtcclxuXHJcbiAgICBjb25zdCBhdmFpbGFibGVMYW5ndWFnZXMgPSB0aGlzLlBPTExZX0xBTkdVQUdFUztcclxuICAgIE9iamVjdC5rZXlzKGF2YWlsYWJsZUxhbmd1YWdlcykuZm9yRWFjaChuYW1lID0+IHtcclxuICAgICAgZGVsZXRlIGF2YWlsYWJsZUxhbmd1YWdlc1tuYW1lXTtcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IGF2YWlsYWJsZUxhbmd1YWdlQ29kZXMgPSB0aGlzLlBPTExZX0xBTkdVQUdFX0NPREVTO1xyXG4gICAgT2JqZWN0LmtleXMoYXZhaWxhYmxlTGFuZ3VhZ2VDb2RlcykuZm9yRWFjaChuYW1lID0+IHtcclxuICAgICAgZGVsZXRlIGF2YWlsYWJsZUxhbmd1YWdlQ29kZXNbbmFtZV07XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBSZS1wb3B1bGF0ZSBhY2NvcmRpbmcgdG8gdmVyc2lvblxyXG4gICAgY29uc3QgbWluTmV1cmFsU2RrID0gdGhpcy5QT0xMWV9NSU5fTkVVUkFMX1ZFUlNJT047XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuU0VSVklDRVMucG9sbHlcclxuICAgICAgLmRlc2NyaWJlVm9pY2VzKClcclxuICAgICAgLnByb21pc2UoKVxyXG4gICAgICAudGhlbihyZXNwb25zZSA9PiB7XHJcbiAgICAgICAgY29uc3QgYWxsQ29kZXMgPSB7fTtcclxuXHJcbiAgICAgICAgcmVzcG9uc2UuVm9pY2VzLmZvckVhY2godm9pY2UgPT4ge1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICB2b2ljZS5TdXBwb3J0ZWRFbmdpbmVzLmluY2x1ZGVzKCdzdGFuZGFyZCcpIHx8XHJcbiAgICAgICAgICAgIHZlcnNpb24gPj0gbWluTmV1cmFsU2RrXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgYXZhaWxhYmxlVm9pY2VzLnB1c2godm9pY2UpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGF2YWlsYWJsZVZvaWNlcy5mb3JFYWNoKHZvaWNlID0+IHtcclxuICAgICAgICAgICAgYXZhaWxhYmxlTGFuZ3VhZ2VzW3ZvaWNlLkxhbmd1YWdlTmFtZV0gPSB2b2ljZS5MYW5ndWFnZUNvZGU7XHJcbiAgICAgICAgICAgIGFsbENvZGVzW3ZvaWNlLkxhbmd1YWdlQ29kZV0gPSB2b2ljZS5MYW5ndWFnZU5hbWU7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgT2JqZWN0LmVudHJpZXMoYXZhaWxhYmxlTGFuZ3VhZ2VzKS5mb3JFYWNoKChbbmFtZSwgY29kZV0pID0+IHtcclxuICAgICAgICAgIGF2YWlsYWJsZUxhbmd1YWdlQ29kZXNbY29kZV0gPSBuYW1lO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAvLyBOb3RpZnkgdGhhdCB3ZSdyZSByZWFkeSB0byBnZW5lcmF0ZSBzcGVlY2hlc1xyXG4gICAgICAgIHRoaXMuX2lzUmVhZHkgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuZW1pdCh0aGlzLkVWRU5UUy5yZWFkeSk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBjbGFzcyBpcyBjYXBhYmxlIG9mIGdlbmVyYXRpbmcgc3BlZWNoIGF1ZGlvLiBQb2xseSxcclxuICAgKiBQcmVzaWduZXIgYW5kIEFXUyBTREsgdmVyc2lvbiBudW1iZXIgbXVzdCBoYXZlIGJlZW4gZGVmaW5lZCB1c2luZ1xyXG4gICAqIFtpbml0aWFsaXplU2VydmljZV17QGxpbmsgQWJzdHJhY3RUZXh0VG9TcGVlY2hGZWF0dXJlLmluaXRpYWxpemVTZXJ2aWNlfS5cclxuICAgKlxyXG4gICAqIEByZWFkb25seVxyXG4gICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAqL1xyXG4gIHN0YXRpYyBnZXQgaXNSZWFkeSgpIHtcclxuICAgIHJldHVybiB0aGlzLl9pc1JlYWR5O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgdGV4dCBvZiB0aGUgY3VycmVudGx5IHBsYXlpbmcgc3BlZWNoLlxyXG4gICAqXHJcbiAgICogQHJlYWRvbmx5XHJcbiAgICogQHR5cGUge3N0cmluZ31cclxuICAgKi9cclxuICBnZXQgY3VycmVudFNwZWVjaCgpIHtcclxuICAgIGlmICh0aGlzLl9jdXJyZW50U3BlZWNoKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLl9jdXJyZW50U3BlZWNoLnRleHQ7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgYW5kIHNldHMgdGhlIG51bWJlciBvZiBzZWNvbmRzIHRvIG9mZnNldCBzcGVlY2htYXJrIGVtaXNzaW9uLlxyXG4gICAqXHJcbiAgICogQHR5cGUge251bWJlcn1cclxuICAgKi9cclxuICBnZXQgc3BlZWNobWFya09mZnNldCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9zcGVlY2htYXJrT2Zmc2V0O1xyXG4gIH1cclxuXHJcbiAgc2V0IHNwZWVjaG1hcmtPZmZzZXQob2Zmc2V0KSB7XHJcbiAgICB0aGlzLl9zcGVlY2htYXJrT2Zmc2V0ID0gb2Zmc2V0O1xyXG5cclxuICAgIGlmICh0aGlzLl9jdXJyZW50U3BlZWNoKSB7XHJcbiAgICAgIHRoaXMuX2N1cnJlbnRTcGVlY2guc3BlZWNobWFya09mZnNldCA9IG9mZnNldDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgYW5kIHNldHMgdGhlIFRoZSBtaW5pbXVtIGFtb3VudCBvZiB0aW1lIGluIHNlY29uZHMgdGhhdCB0aGUgbGFzdFxyXG4gICAqIHNwZWVjaG1hcmsgb2YgZWFjaCB0eXBlIGluIGEgc3BlZWNoIGNhbiBoYXZlIGl0cyBkdXJhdGlvbiBwcm9wZXJ0eSBzZXQgdG8uXHJcbiAgICpcclxuICAgKiBAdHlwZSBudW1iZXJcclxuICAgKi9cclxuICBnZXQgbWluRW5kTWFya0R1cmF0aW9uKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX21pbkVuZE1hcmtEdXJhdGlvbiAvIDEwMDA7XHJcbiAgfVxyXG5cclxuICBzZXQgbWluRW5kTWFya0R1cmF0aW9uKGR1cmF0aW9uKSB7XHJcbiAgICB0aGlzLl9taW5FbmRNYXJrRHVyYXRpb24gPSBkdXJhdGlvbiAqIDEwMDA7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBcHBlbmRzIHRoZSBTdW1lcmlhbiBIb3N0cyBjdXN0b20gdXNlci1hZ2VudCB0byBhIHN0cmluZyBpZiBpdCBpcyBub3RcclxuICAgKiBhbHJlYWR5IHByZXNlbnQuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGN1cnJlbnRVc2VyQWdlbnQgLSBTdHJpbmcgdG8gYXBwZW5kIHRvIGlmIG5lZWRlZC5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XHJcbiAgICovXHJcbiAgc3RhdGljIF93aXRoQ3VzdG9tVXNlckFnZW50KGN1cnJlbnRVc2VyQWdlbnQpIHtcclxuICAgIGNvbnN0IHN1bWVyaWFuSG9zdHNVc2VyQWdlbnQgPSAncmVxdWVzdC1zb3VyY2UvU3VtZXJpYW5Ib3N0cyc7XHJcblxyXG4gICAgaWYgKGN1cnJlbnRVc2VyQWdlbnQgPT0gbnVsbCkge1xyXG4gICAgICByZXR1cm4gc3VtZXJpYW5Ib3N0c1VzZXJBZ2VudDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoY3VycmVudFVzZXJBZ2VudC5pbmRleE9mKHN1bWVyaWFuSG9zdHNVc2VyQWdlbnQpICE9PSAtMSkge1xyXG4gICAgICByZXR1cm4gY3VycmVudFVzZXJBZ2VudDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gY3VycmVudFVzZXJBZ2VudC5jb25jYXQoJyAnLCBzdW1lcmlhbkhvc3RzVXNlckFnZW50KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENoZWNrcyBpZiBhIGdpdmVuIGVuZ2luZSB0eXBlIGlzIGNvbXBhdGlibGUgd2l0aCB0aGUgQVdTIFNESyB2ZXJzaW9uLiBJZiBpdFxyXG4gICAqIGlzLCByZXR1cm4gdGhlIG9yaWdpbmFsIHZhbHVlLiBPdGhlcndpc2UgcmV0dXJuIGEgZGVmYXVsdC5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gZW5naW5lIC0gVGhlIHR5cGUgb2YgUG9sbHkgdm9pY2UgZW5naW5lIHRvIHZhbGlkYXRlLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge3N0cmluZ31cclxuICAgKi9cclxuICBfdmFsaWRhdGVFbmdpbmUoZW5naW5lKSB7XHJcbiAgICAvLyBEZWZhdWx0IHRvIHRoZSBzdGFuZGFyZCBlbmdpbmUgaWYgbmV1cmFsIGlzIG5vdCBhdmFpbGFibGUgZm9yIHRoaXMgdmVyc2lvblxyXG4gICAgaWYgKFxyXG4gICAgICBlbmdpbmUgPT09IHVuZGVmaW5lZCB8fFxyXG4gICAgICB0aGlzLmNvbnN0cnVjdG9yLkFXU19WRVJTSU9OIDwgdGhpcy5jb25zdHJ1Y3Rvci5QT0xMWV9NSU5fTkVVUkFMX1ZFUlNJT05cclxuICAgICkge1xyXG4gICAgICBlbmdpbmUgPSB0aGlzLmNvbnN0cnVjdG9yLlBPTExZX0RFRkFVTFRTLkVuZ2luZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZW5naW5lO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2hlY2tzIGlmIGEgZ2l2ZW4gYXVkaW8gZm9ybWF0IHR5cGUgaXMgY29tcGF0aWJsZSB3aXRoIFBvbGx5LiBJZiBpdCBpcywgcmV0dXJuXHJcbiAgICogdGhlIG9yaWdpbmFsIHZhbHVlLiBPdGhlcndpc2UgcmV0dXJuIGEgZGVmYXVsdC5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gZW5naW5lIC0gVGhlIHR5cGUgb2YgUG9sbHkgdm9pY2UgZW5naW5lIHRvIHZhbGlkYXRlLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge3N0cmluZ31cclxuICAgKi9cclxuICBfdmFsaWRhdGVGb3JtYXQoZm9ybWF0KSB7XHJcbiAgICBpZiAoZm9ybWF0ID09PSB1bmRlZmluZWQgfHwgIWF1ZGlvRm9ybWF0cy5pbmNsdWRlcyhmb3JtYXQpKSB7XHJcbiAgICAgIGZvcm1hdCA9IHRoaXMuY29uc3RydWN0b3IuUE9MTFlfREVGQVVMVFMuT3V0cHV0Rm9ybWF0O1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmb3JtYXQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDaGVja3MgaWYgYSBnaXZlbiBhdWRpbyBzYW1wbGluZyByYXRlIGlzIGNvbXBhdGlibGUgd2l0aCB0aGUgY3VycmVudCBhdWRpb1xyXG4gICAqIGZvcm1hdC4gSWYgaXQgaXMsIHJldHVybiB0aGUgb3JpZ2luYWwgdmFsdWUuIE90aGVyd2lzZSByZXR1cm4gYSBkZWZhdWx0LlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBlbmdpbmUgLSBUaGUgdHlwZSBvZiBQb2xseSB2b2ljZSBlbmdpbmUgdG8gdmFsaWRhdGUuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxyXG4gICAqL1xyXG4gIF92YWxpZGF0ZVJhdGUocmF0ZSkge1xyXG4gICAgLy8gVXNlIGRlZmF1bHQgaWYgc3BlY2lmaWVkIHNhbXBsZSByYXRlIGlzIG5vdCB2YWxpZCBmb3IgdGhlIGF1ZGlvIGZvcm1hdFxyXG4gICAgaWYgKFxyXG4gICAgICByYXRlID09PSB1bmRlZmluZWQgfHxcclxuICAgICAgIXNhbXBsZVJhdGVzW3RoaXMuX2F1ZGlvRm9ybWF0XS5yYXRlcy5pbmNsdWRlcyhyYXRlKVxyXG4gICAgKSB7XHJcbiAgICAgIHJhdGUgPSBzYW1wbGVSYXRlc1t0aGlzLl9hdWRpb0Zvcm1hdF0uZGVmYXVsdHNbdGhpcy5fZW5naW5lXTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcmF0ZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENoZWNrcyBpZiBhIGdpdmVuIFBvbGx5IHZvaWNlIGlkIGlzIGNvbXBhdGlibGUgd2l0aCB0aGUgY3VycmVudCBQb2xseSBlbmdpbmUuXHJcbiAgICogSWYgaXQgaXMsIHJldHVybiB0aGUgb3JpZ2luYWwgdmFsdWUuIE90aGVyd2lzZSByZXR1cm4gYSBkZWZhdWx0LlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBlbmdpbmUgLSBUaGUgdHlwZSBvZiBQb2xseSB2b2ljZSBlbmdpbmUgdG8gdmFsaWRhdGUuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxyXG4gICAqL1xyXG4gIF92YWxpZGF0ZVZvaWNlKHZvaWNlSWQpIHtcclxuICAgIGNvbnN0IHZvaWNlID0gdGhpcy5jb25zdHJ1Y3Rvci5QT0xMWV9WT0lDRVMuZmluZCh2ID0+IHYuSWQgPT09IHZvaWNlSWQpO1xyXG5cclxuICAgIC8vIFVzZSB0aGUgZGVmYXVsdCB2b2ljZSBpZiB0aGUgdm9pY2UgaXNuJ3Qgc3VwcG9ydGVkIGJ5IHRoZSBlbmdpbmVcclxuICAgIGlmICh2b2ljZSA9PT0gdW5kZWZpbmVkIHx8ICF2b2ljZS5TdXBwb3J0ZWRFbmdpbmVzLmluY2x1ZGVzKHRoaXMuX2VuZ2luZSkpIHtcclxuICAgICAgdm9pY2VJZCA9IHRoaXMuY29uc3RydWN0b3IuUE9MTFlfREVGQVVMVFMuVm9pY2VJZDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdm9pY2VJZDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENoZWNrcyBpZiBhIGdpdmVuIFBvbGx5IGxhbmd1YWdlIGlzIGNvbXBhdGlibGUgd2l0aCB0aGUgY3VycmVudCBQb2xseSB2b2ljZS5cclxuICAgKiBJZiBpdCBpcywgcmV0dXJuIHRoZSBvcmlnaW5hbCB2YWx1ZS4gT3RoZXJ3aXNlIHJldHVybiBhIGRlZmF1bHQuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGVuZ2luZSAtIFRoZSB0eXBlIG9mIFBvbGx5IHZvaWNlIGVuZ2luZSB0byB2YWxpZGF0ZS5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XHJcbiAgICovXHJcbiAgX3ZhbGlkYXRlTGFuZ3VhZ2UobGFuZ3VhZ2UpIHtcclxuICAgIGNvbnN0IHZvaWNlID0gdGhpcy5jb25zdHJ1Y3Rvci5QT0xMWV9WT0lDRVMuZmluZCh2ID0+IHYuSWQgPT09IHRoaXMuX3ZvaWNlKTtcclxuICAgIGNvbnN0IGxhbmd1YWdlQ29kZSA9IHRoaXMuY29uc3RydWN0b3IuUE9MTFlfTEFOR1VBR0VTW2xhbmd1YWdlXTtcclxuXHJcbiAgICAvLyBGaW5kIHRoZSBsYW5ndWFnZXMgYXZhaWxhYmxlIGZvciB0aGUgY3VycmVudCB2b2ljZVxyXG4gICAgY29uc3QgYXZhaWxhYmxlQ29kZXMgPSBbdm9pY2UuTGFuZ3VhZ2VDb2RlXTtcclxuICAgIGlmICh2b2ljZS5BZGRpdGlvbmFsTGFuZ3VhZ2VDb2Rlcykge1xyXG4gICAgICBhdmFpbGFibGVDb2Rlcy5wdXNoKC4uLnZvaWNlLkFkZGl0aW9uYWxMYW5ndWFnZUNvZGVzKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBJZiB0aGUgY3VycmVudCB2b2ljZSBkb2Vzbid0IHN1cHBvcnQgdGhlIGxhbmd1YWdlLCB1c2UgaXRzIGRlZmF1bHRcclxuICAgIGlmICghYXZhaWxhYmxlQ29kZXMuaW5jbHVkZXMobGFuZ3VhZ2VDb2RlKSkge1xyXG4gICAgICBsYW5ndWFnZSA9IHRoaXMuY29uc3RydWN0b3IuUE9MTFlfTEFOR1VBR0VfQ09ERVNbdm9pY2UuTGFuZ3VhZ2VDb2RlXTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbGFuZ3VhZ2U7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBWYWxpZGF0ZSB0aGUgY3VycmVudCBQb2xseSBvcHRpb25zIHRvIG1ha2Ugc3VyZSB0aGV5IGFyZSBjb21wYXRpYmxlIHdpdGggZWFjaFxyXG4gICAqIG90aGVyLlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBfdmFsaWRhdGUoKSB7XHJcbiAgICAvLyBWYWxpZGF0ZSBzcGVlY2ggcGFyYW1ldGVyc1xyXG4gICAgdGhpcy5fZW5naW5lID0gdGhpcy5fdmFsaWRhdGVFbmdpbmUodGhpcy5fZW5naW5lKTtcclxuICAgIHRoaXMuX2F1ZGlvRm9ybWF0ID0gdGhpcy5fdmFsaWRhdGVGb3JtYXQodGhpcy5fYXVkaW9Gb3JtYXQpO1xyXG4gICAgdGhpcy5fc2FtcGxlUmF0ZSA9IHRoaXMuX3ZhbGlkYXRlUmF0ZSh0aGlzLl9zYW1wbGVSYXRlKTtcclxuICAgIHRoaXMuX3ZvaWNlID0gdGhpcy5fdmFsaWRhdGVWb2ljZSh0aGlzLl92b2ljZSk7XHJcbiAgICB0aGlzLl9sYW5ndWFnZSA9IHRoaXMuX3ZhbGlkYXRlTGFuZ3VhZ2UodGhpcy5fbGFuZ3VhZ2UpO1xyXG4gICAgdGhpcy5faXNWYWxpZGF0ZWQgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIGFuIG9iamVjdCBjb250YWluaW5nIHBhcmFtZXRlcnMgY29tcGF0aWJsZSB3aXRoIFBvbGx5LnN5bnRoZXNpemVTcGVlY2guXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHJldHVybnMge09iamVjdH1cclxuICAgKi9cclxuICBfZ2V0Q29uZmlnKCkge1xyXG4gICAgLy8gTWFrZSBzdXJlIHBhcmFtZXRlcnMgaGF2ZSBiZWVuIHZhbGlkYXRlZFxyXG4gICAgaWYgKHRoaXMuY29uc3RydWN0b3IuaXNSZWFkeSAmJiAhdGhpcy5faXNWYWxpZGF0ZWQpIHtcclxuICAgICAgdGhpcy5fdmFsaWRhdGUoKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBDcmVhdGUgYSBjb25maWcgb2JqZWN0IGNvbXBhdGlibGUgd2l0aCBQb2xseVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgRW5naW5lOiB0aGlzLl9lbmdpbmUsXHJcbiAgICAgIE91dHB1dEZvcm1hdDogdGhpcy5fYXVkaW9Gb3JtYXQsXHJcbiAgICAgIFNhbXBsZVJhdGU6IHRoaXMuX3NhbXBsZVJhdGUsXHJcbiAgICAgIFZvaWNlSWQ6IHRoaXMuX3ZvaWNlLFxyXG4gICAgICBMYW5ndWFnZUNvZGU6IHRoaXMuY29uc3RydWN0b3IuUE9MTFlfTEFOR1VBR0VTW3RoaXMuX2xhbmd1YWdlXSxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGUgUG9sbHkgcGFyYW1ldGVycyB3aXRoIG9wdGlvbnMgZnJvbSBhIGdpdmVuIGNvbmZpZy4gQWxsIHN0b3JlZCBzcGVlY2hlc1xyXG4gICAqIHdpbGwgYmUgdXBkYXRlZCB0byB1c2UgdGhlIG5ldyBwYXJhbWV0ZXJzLCB1bmxlc3MgdGhlIHNwZWVjaCB0ZXh0IGlzIGNvbnRhaW5lZFxyXG4gICAqIGluIHRoZSAnc2tpcFNwZWVjaGVzJyBwYXJhbWV0ZXIuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyAtIFBvbGx5IHBhcmFtZXRlciBvcHRpb25zIHRvIG92ZXJ3cml0ZS5cclxuICAgKiBAcGFyYW0ge0FycmF5LjxzdHJpbmc+fSBza2lwU3BlZWNoZXMgLSBUZXh0IG9mIGFueSBzcGVlY2hlcyB0aGF0IHNob3VsZCBub3RcclxuICAgKiBoYXZlIHBhcmFtZXRlcnMgdXBkYXRlZC5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtPYmplY3R9XHJcbiAgICovXHJcbiAgX3VwZGF0ZUNvbmZpZyhjb25maWcsIHNraXBTcGVlY2hlcyA9IFtdKSB7XHJcbiAgICBjb25zdCBjdXJyZW50Q29uZmlnID0gdGhpcy5fZ2V0Q29uZmlnKCk7XHJcbiAgICBpZiAoIWNvbmZpZykge1xyXG4gICAgICByZXR1cm4gY3VycmVudENvbmZpZztcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9pc1ZhbGlkYXRlZCA9IGZhbHNlO1xyXG4gICAgY29uc3QgY3VycmVudENvbmZpZ1N0ciA9IEpTT04uc3RyaW5naWZ5KGN1cnJlbnRDb25maWcpO1xyXG5cclxuICAgIC8vIFVwZGF0ZSBvcHRpb25zXHJcbiAgICBpZiAoY29uZmlnLkVuZ2luZSkge1xyXG4gICAgICB0aGlzLl9lbmdpbmUgPSBjb25maWcuRW5naW5lO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjb25maWcuYXVkaW9Gb3JtYXQpIHtcclxuICAgICAgdGhpcy5fYXVkaW9Gb3JtYXQgPSBjb25maWcuYXVkaW9Gb3JtYXQ7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNvbmZpZy5TYW1wbGVSYXRlKSB7XHJcbiAgICAgIHRoaXMuX3NhbXBsZVJhdGUgPSBjb25maWcuU2FtcGxlUmF0ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoY29uZmlnLlZvaWNlSWQpIHtcclxuICAgICAgdGhpcy5fdm9pY2UgPSBjb25maWcuVm9pY2VJZDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoY29uZmlnLkxhbmd1YWdlKSB7XHJcbiAgICAgIHRoaXMuX2xhbmd1YWdlID0gY29uZmlnLkxhbmd1YWdlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFZhbGlkYXRlIHRoZSBjb25maWdcclxuICAgIGNvbnN0IHZhbGlkQ29uZmlnID0gdGhpcy5fZ2V0Q29uZmlnKCk7XHJcblxyXG4gICAgLy8gRXhpdCBpZiBub3RoaW5nIGhhcyBjaGFuZ2VkXHJcbiAgICBjb25zdCBjb25maWdTdHIgPSBKU09OLnN0cmluZ2lmeSh2YWxpZENvbmZpZyk7XHJcbiAgICBpZiAoY3VycmVudENvbmZpZ1N0ciA9PT0gY29uZmlnU3RyKSB7XHJcbiAgICAgIHRoaXMuX2lzVmFsaWRhdGVkID0gdHJ1ZTtcclxuICAgICAgcmV0dXJuIHZhbGlkQ29uZmlnO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFVwZGF0ZSBhbGwgY2FjaGVkIGNvbmZpZ3NcclxuICAgIE9iamVjdC5lbnRyaWVzKHRoaXMuX3NwZWVjaENhY2hlKS5mb3JFYWNoKChbdGV4dCwgc3BlZWNoXSkgPT4ge1xyXG4gICAgICAvLyBDaGVjayBpZiB0aGlzIGlzIGEgc2tpcHBlZCBzcGVlY2hcclxuICAgICAgaWYgKHNraXBTcGVlY2hlcy5pbmNsdWRlcyh0ZXh0KSkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3Qgc3BlZWNoQ29uZmlnU3RyID0gSlNPTi5zdHJpbmdpZnkoc3BlZWNoLmNvbmZpZyk7XHJcblxyXG4gICAgICAvLyBVcGRhdGUgdGhlIHNwZWVjaCB3aXRoIG5ldyBwYXJhbWV0ZXJzXHJcbiAgICAgIGlmIChzcGVlY2hDb25maWdTdHIgIT09IGNvbmZpZ1N0cikge1xyXG4gICAgICAgIHRoaXMuX3VwZGF0ZVNwZWVjaCh0ZXh0LCB2YWxpZENvbmZpZyk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiB2YWxpZENvbmZpZztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZSBhbiBleGlzdGluZyBzcGVlY2gsIG9yIGFkZCBhIG5ldyBzcGVlY2ggd2l0aCBuZXcgUG9sbHkgcGFyYW1ldGVycyB3aXRoXHJcbiAgICogb3B0aW9ucyBmcm9tIGEgZ2l2ZW4gY29uZmlnLlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gVGhlIHRleHQgb2YgdGhlIHNwZWVjaCB0byB1cGRhdGUuXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyAtIFBvbGx5IHBhcmFtZXRlciBvcHRpb25zIHRvIHVwZGF0ZS5cclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtmb3JjZT1mYWxzZV0gLSBXaGV0aGVyIHRvIGZvcmNlIHRoZSBzcGVlY2ggdG8gYmUgdXBkYXRlZFxyXG4gICAqIGlmIG5vIHBhcmFtZXRlcnMgaGF2ZSBjaGFuZ2VzLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0Fic3RyYWN0U3BlZWNofVxyXG4gICAqL1xyXG4gIF91cGRhdGVTcGVlY2godGV4dCwgY29uZmlnLCBmb3JjZSA9IGZhbHNlKSB7XHJcbiAgICBjb25zdCBzcGVlY2ggPSB0aGlzLl9zcGVlY2hDYWNoZVt0ZXh0XSB8fCB7fTtcclxuICAgIC8vIEV4aXQgaWYgbm90aGluZyBoYXMgY2hhbmdlZCBhbmQgZm9yY2UgaXMgZmFsc2VcclxuICAgIGlmIChcclxuICAgICAgIWZvcmNlICYmXHJcbiAgICAgIGNvbmZpZyAhPT0gdW5kZWZpbmVkICYmXHJcbiAgICAgIHNwZWVjaC5jb25maWcgJiZcclxuICAgICAgSlNPTi5zdHJpbmdpZnkoY29uZmlnKSA9PT0gSlNPTi5zdHJpbmdpZnkoc3BlZWNoLmNvbmZpZylcclxuICAgICkge1xyXG4gICAgICByZXR1cm4gc3BlZWNoO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIENyZWF0ZSBzZXBhcmF0ZSBwYXJhbWV0ZXJzIGZvciBhdWRpbyBhbmQgc3BlZWNobWFyayBnZW5lcmF0aW9uXHJcbiAgICBjb25zdCBhdWRpb1BhcmFtcyA9IHtcclxuICAgICAgLi4uY29uZmlnLFxyXG4gICAgICBUZXh0OiB0ZXh0LFxyXG4gICAgICBUZXh0VHlwZTogJ3NzbWwnLFxyXG4gICAgfTtcclxuICAgIGNvbnN0IHNwZWVjaG1hcmtQYXJhbXMgPSB7XHJcbiAgICAgIC4uLmF1ZGlvUGFyYW1zLFxyXG4gICAgICBPdXRwdXRGb3JtYXQ6ICdqc29uJyxcclxuICAgICAgU3BlZWNoTWFya1R5cGVzOiBzcGVlY2htYXJrVHlwZXMsXHJcbiAgICB9O1xyXG5cclxuICAgIC8vIEdlbmVyYXRlIGF1ZGlvIGFuZCBzcGVlY2htYXJrc1xyXG4gICAgc3BlZWNoLmNvbmZpZyA9IGNvbmZpZztcclxuICAgIHNwZWVjaC5wcm9taXNlID0gUHJvbWlzZS5hbGwoW1xyXG4gICAgICB0aGlzLl9zeW50aGVzaXplU3BlZWNobWFya3Moc3BlZWNobWFya1BhcmFtcyksXHJcbiAgICAgIHRoaXMuX3N5bnRoZXNpemVBdWRpbyhhdWRpb1BhcmFtcyksXHJcbiAgICBdKS50aGVuKHJlc3VsdHMgPT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5fY3JlYXRlU3BlZWNoKHRleHQsIC4uLnJlc3VsdHMpO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLl9zcGVlY2hDYWNoZVt0ZXh0XSA9IHNwZWVjaDtcclxuXHJcbiAgICByZXR1cm4gc3BlZWNoO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlIGEgbmV3IFNwZWVjaCBvYmplY3QgZm9yIHRoZSBzcGVha2VyLlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7VGV4dFRvU3BlZWNofSBzcGVha2VyIC0gVGhlIFRleHRUb1NwZWVjaCBpbnN0YW5jZSB0aGF0IHdpbGwgb3duIHRoZSBzcGVlY2guXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSBUZXh0IG9mIHRoZSBzcGVlY2guXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IHNwZWVjaG1hcmtzIC0gU3BlZWNobWFya3MgZm9yIHRoZSBzcGVlY2guXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IGF1ZGlvQ29uZmlnIC0gQXVkaW8gZm9yIHRoZSBzcGVlY2guXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7QWJzdHJhY3RTcGVlY2h9XHJcbiAgICovXHJcbiAgX2NyZWF0ZVNwZWVjaCh0ZXh0LCBzcGVlY2htYXJrcywgYXVkaW9Db25maWcpIHtcclxuICAgIHJldHVybiBuZXcgU3BlZWNoKHRoaXMsIHRleHQsIHNwZWVjaG1hcmtzLCBhdWRpb0NvbmZpZyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGUgcHJlc2lnbmVkIFVSTCBvZiBzcGVlY2ggYXVkaW8gZm9yIHRoZSBnaXZlbiBzcGVlY2ggdGV4dC5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zIC0gUGFyYW1ldGVycyBvYmplY3QgY29tcGF0aWJsZSB3aXRoIFBvbGx5LnN5bnRoZXNpemVTcGVlY2guXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7RGVmZXJyZWR9IFJlc29sdmVzIHdpdGggYW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGF1ZGlvIFVSTC5cclxuICAgKi9cclxuICBfc3ludGhlc2l6ZUF1ZGlvKHBhcmFtcykge1xyXG4gICAgcmV0dXJuIG5ldyBEZWZlcnJlZCgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgIHRoaXMuY29uc3RydWN0b3IuU0VSVklDRVMucHJlc2lnbmVyLmdldFN5bnRoZXNpemVTcGVlY2hVcmwoXHJcbiAgICAgICAgcGFyYW1zLFxyXG4gICAgICAgIGZ1bmN0aW9uKGVycm9yLCB1cmwpIHtcclxuICAgICAgICAgIGlmICghZXJyb3IpIHtcclxuICAgICAgICAgICAgcmVzb2x2ZSh7dXJsfSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZWplY3QoZXJyb3IpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0cmlldmVzIGFuZCBwYXJzZXMgc3BlZWNobWFya3MgZm9yIHRoZSBnaXZlbiBzcGVlY2ggdGV4dC5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zIC0gUGFyYW1ldGVycyBvYmplY3QgY29tcGF0aWJsZSB3aXRoIFBvbGx5LnN5bnRoZXNpemVTcGVlY2guXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7RGVmZXJyZWR9IFJlc29sdmVzIHdpdGggYW4gYXJyYXkgb2Ygc3BlZWNobWFyayBvYmplY3RzXHJcbiAgICovXHJcbiAgX3N5bnRoZXNpemVTcGVlY2htYXJrcyhwYXJhbXMpIHtcclxuICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLlNFUlZJQ0VTLnBvbGx5XHJcbiAgICAgIC5zeW50aGVzaXplU3BlZWNoKHBhcmFtcylcclxuICAgICAgLnByb21pc2UoKVxyXG4gICAgICAudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgIC8vIENvbnZlcnQgY2hhcmNvZGVzIHRvIHN0cmluZ1xyXG4gICAgICAgIGNvbnN0IGpzb25TdHJpbmcgPSBKU09OLnN0cmluZ2lmeShyZXN1bHQuQXVkaW9TdHJlYW0pO1xyXG4gICAgICAgIGNvbnN0IGpzb24gPSBKU09OLnBhcnNlKGpzb25TdHJpbmcpO1xyXG4gICAgICAgIGNvbnN0IGRhdGFTdHIgPSBqc29uLmRhdGEubWFwKGMgPT4gU3RyaW5nLmZyb21DaGFyQ29kZShjKSkuam9pbignJyk7XHJcblxyXG4gICAgICAgIGNvbnN0IG1hcmtUeXBlcyA9IHtcclxuICAgICAgICAgIHNlbnRlbmNlOiBbXSxcclxuICAgICAgICAgIHdvcmQ6IFtdLFxyXG4gICAgICAgICAgdmlzZW1lOiBbXSxcclxuICAgICAgICAgIHNzbWw6IFtdLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29uc3QgZW5kTWFya1R5cGVzID0ge1xyXG4gICAgICAgICAgc2VudGVuY2U6IG51bGwsXHJcbiAgICAgICAgICB3b3JkOiBudWxsLFxyXG4gICAgICAgICAgdmlzZW1lOiBudWxsLFxyXG4gICAgICAgICAgc3NtbDogbnVsbCxcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICAvLyBTcGxpdCBieSBlbmNsb3Npbmcge30gdG8gY3JlYXRlIHNwZWVjaG1hcmsgb2JqZWN0c1xyXG4gICAgICAgIGNvbnN0IHNwZWVjaE1hcmtzID0gWy4uLmRhdGFTdHIubWF0Y2hBbGwoL1xcey4qP1xcfSg/PVxcbnwkKS9nbSldLm1hcChcclxuICAgICAgICAgIG1hdGNoID0+IHtcclxuICAgICAgICAgICAgY29uc3QgbWFyayA9IEpTT04ucGFyc2UobWF0Y2hbMF0pO1xyXG5cclxuICAgICAgICAgICAgLy8gU2V0IHRoZSBkdXJhdGlvbiBvZiB0aGUgbGFzdCBzcGVlY2htYXJrIHN0b3JlZCBtYXRjaGluZyB0aGlzIG9uZSdzIHR5cGVcclxuICAgICAgICAgICAgY29uc3QgbnVtTWFya3MgPSBtYXJrVHlwZXNbbWFyay50eXBlXS5sZW5ndGg7XHJcbiAgICAgICAgICAgIGlmIChudW1NYXJrcyA+IDApIHtcclxuICAgICAgICAgICAgICBjb25zdCBsYXN0TWFyayA9IG1hcmtUeXBlc1ttYXJrLnR5cGVdW251bU1hcmtzIC0gMV07XHJcbiAgICAgICAgICAgICAgbGFzdE1hcmsuZHVyYXRpb24gPSBtYXJrLnRpbWUgLSBsYXN0TWFyay50aW1lO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBtYXJrVHlwZXNbbWFyay50eXBlXS5wdXNoKG1hcmspO1xyXG4gICAgICAgICAgICBlbmRNYXJrVHlwZXNbbWFyay50eXBlXSA9IG1hcms7XHJcbiAgICAgICAgICAgIHJldHVybiBtYXJrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIC8vIEZpbmQgdGhlIHRpbWUgb2YgdGhlIGxhdGVzdCBzcGVlY2htYXJrXHJcbiAgICAgICAgY29uc3QgZW5kVGltZXMgPSBbXTtcclxuICAgICAgICBpZiAoZW5kTWFya1R5cGVzLnNlbnRlbmNlKSB7XHJcbiAgICAgICAgICBlbmRUaW1lcy5wdXNoKGVuZE1hcmtUeXBlcy5zZW50ZW5jZS50aW1lKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGVuZE1hcmtUeXBlcy53b3JkKSB7XHJcbiAgICAgICAgICBlbmRUaW1lcy5wdXNoKGVuZE1hcmtUeXBlcy53b3JkLnRpbWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZW5kTWFya1R5cGVzLnZpc2VtZSkge1xyXG4gICAgICAgICAgZW5kVGltZXMucHVzaChlbmRNYXJrVHlwZXMudmlzZW1lLnRpbWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZW5kTWFya1R5cGVzLnNzbWwpIHtcclxuICAgICAgICAgIGVuZFRpbWVzLnB1c2goZW5kTWFya1R5cGVzLnNzbWwudGltZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGVuZFRpbWUgPSBNYXRoLm1heCguLi5lbmRUaW1lcyk7XHJcblxyXG4gICAgICAgIC8vIENhbGN1bGF0ZSBkdXJhdGlvbiBmb3IgdGhlIGVuZGluZyBzcGVlY2hNYXJrcyBvZiBlYWNoIHR5cGVcclxuICAgICAgICBpZiAoZW5kTWFya1R5cGVzLnNlbnRlbmNlKSB7XHJcbiAgICAgICAgICBlbmRNYXJrVHlwZXMuc2VudGVuY2UuZHVyYXRpb24gPSBNYXRoLm1heChcclxuICAgICAgICAgICAgdGhpcy5fbWluRW5kTWFya0R1cmF0aW9uLFxyXG4gICAgICAgICAgICBlbmRUaW1lIC0gZW5kTWFya1R5cGVzLnNlbnRlbmNlLnRpbWVcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChlbmRNYXJrVHlwZXMud29yZCkge1xyXG4gICAgICAgICAgZW5kTWFya1R5cGVzLndvcmQuZHVyYXRpb24gPSBNYXRoLm1heChcclxuICAgICAgICAgICAgdGhpcy5fbWluRW5kTWFya0R1cmF0aW9uLFxyXG4gICAgICAgICAgICBlbmRUaW1lIC0gZW5kTWFya1R5cGVzLndvcmQudGltZVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGVuZE1hcmtUeXBlcy52aXNlbWUpIHtcclxuICAgICAgICAgIGVuZE1hcmtUeXBlcy52aXNlbWUuZHVyYXRpb24gPSBNYXRoLm1heChcclxuICAgICAgICAgICAgdGhpcy5fbWluRW5kTWFya0R1cmF0aW9uLFxyXG4gICAgICAgICAgICBlbmRUaW1lIC0gZW5kTWFya1R5cGVzLnZpc2VtZS50aW1lXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZW5kTWFya1R5cGVzLnNzbWwpIHtcclxuICAgICAgICAgIGVuZE1hcmtUeXBlcy5zc21sLmR1cmF0aW9uID0gTWF0aC5tYXgoXHJcbiAgICAgICAgICAgIHRoaXMuX21pbkVuZE1hcmtEdXJhdGlvbixcclxuICAgICAgICAgICAgZW5kVGltZSAtIGVuZE1hcmtUeXBlcy5zc21sLnRpbWVcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gc3BlZWNoTWFya3M7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyBhIFNwZWVjaCBvYmplY3QgdGhhdCBoYXMgdGhlIGdpdmVuIHRleHQuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSBUaGUgdGV4dCBjb250ZW50IG9mIHRoZSBTcGVlY2guXHJcbiAgICogQHBhcmFtIHtPYmplY3Q9fSBjb25maWcgLSBPcHRpb25zIHRvIHVwZGF0ZSB0aGUgU3BlZWNoIHdpdGguXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7RGVmZXJyZWR9IFJlc29sdmVzIHdpdGggU3BlZWNoIG9yIG51bGw7XHJcbiAgICovXHJcbiAgX2dldFNwZWVjaCh0ZXh0LCBjb25maWcpIHtcclxuICAgIC8vIE1ha2Ugc3VyZSBBV1Mgc2VydmljZXMgZXhpc3RcclxuICAgIGlmICghdGhpcy5jb25zdHJ1Y3Rvci5pc1JlYWR5KSB7XHJcbiAgICAgIGNvbnN0IGUgPSAnQVdTIHNlcnZpY2VzIGhhdmUgbm90IGJlZW4gaW5pdGlhbGl6ZWQuJztcclxuICAgICAgcmV0dXJuIERlZmVycmVkLnJlamVjdChlKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBNYWtlIHN1cmUgaXRzIHBvc3NpYmxlIHRvIGdlbmVyYXRlIHNwZWVjaGVzXHJcbiAgICBpZiAoIXRleHQpIHtcclxuICAgICAgY29uc3QgZSA9ICdDYW5ub3QgcGxheSBhIHNwZWVjaCB3aXRoIG5vIHRleHQuJztcclxuICAgICAgcmV0dXJuIERlZmVycmVkLnJlamVjdChlKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBVcGRhdGUgdGhlIHNwZWVjaCB3aXRoIG9wdGlvbnNcclxuICAgIHRleHQgPSBUZXh0VG9TcGVlY2hVdGlscy52YWxpZGF0ZVRleHQodGV4dCk7XHJcbiAgICBjb25maWcgPSB0aGlzLl91cGRhdGVDb25maWcoY29uZmlnLCB0ZXh0KTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5fdXBkYXRlU3BlZWNoKHRleHQsIGNvbmZpZykucHJvbWlzZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFkZHMgYSBuYW1lc3BhY2UgdG8gdGhlIGhvc3Qgd2l0aCB0aGUgbmFtZSBvZiB0aGUgZmVhdHVyZSB0byBjb250YWluIHByb3BlcnRpZXNcclxuICAgKiBhbmQgbWV0aG9kcyBmcm9tIHRoZSBmZWF0dXJlIHRoYXQgdXNlcnMgb2YgdGhlIGhvc3QgbmVlZCBhY2Nlc3MgdG8uXHJcbiAgICpcclxuICAgKiBAc2VlIFRleHRUb1NwZWVjaEZlYXR1cmVcclxuICAgKi9cclxuICBpbnN0YWxsQXBpKCkge1xyXG4gICAgLyoqXHJcbiAgICAgKiBAaW5uZXJcclxuICAgICAqIEBuYW1lc3BhY2UgVGV4dFRvU3BlZWNoRmVhdHVyZVxyXG4gICAgICovXHJcbiAgICBjb25zdCBhcGkgPSBzdXBlci5pbnN0YWxsQXBpKCk7XHJcblxyXG4gICAgT2JqZWN0LmFzc2lnbihhcGksIHtcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBtZW1iZXJvZiBUZXh0VG9TcGVlY2hGZWF0dXJlXHJcbiAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgKiBAbWV0aG9kXHJcbiAgICAgICAqIEBzZWUgQWJzdHJhY3RUZXh0VG9TcGVlY2hGZWF0dXJlI3BsYXlcclxuICAgICAgICovXHJcbiAgICAgIHBsYXk6IHRoaXMucGxheS5iaW5kKHRoaXMpLFxyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIFRleHRUb1NwZWVjaEZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBtZXRob2RcclxuICAgICAgICogQHNlZSBBYnN0cmFjdFRleHRUb1NwZWVjaEZlYXR1cmUjcGF1c2VcclxuICAgICAgICovXHJcbiAgICAgIHBhdXNlOiB0aGlzLnBhdXNlLmJpbmQodGhpcyksXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbWVtYmVyb2YgVGV4dFRvU3BlZWNoRmVhdHVyZVxyXG4gICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICogQG1ldGhvZFxyXG4gICAgICAgKiBAc2VlIEFic3RyYWN0VGV4dFRvU3BlZWNoRmVhdHVyZSNyZXN1bWVcclxuICAgICAgICovXHJcbiAgICAgIHJlc3VtZTogdGhpcy5yZXN1bWUuYmluZCh0aGlzKSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBtZW1iZXJvZiBUZXh0VG9TcGVlY2hGZWF0dXJlXHJcbiAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgKiBAbWV0aG9kXHJcbiAgICAgICAqIEBzZWUgQWJzdHJhY3RUZXh0VG9TcGVlY2hGZWF0dXJlI3N0b3BcclxuICAgICAgICovXHJcbiAgICAgIHN0b3A6IHRoaXMuc3RvcC5iaW5kKHRoaXMpLFxyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIFRleHRUb1NwZWVjaEZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBtZXRob2RcclxuICAgICAgICogQHNlZSBBYnN0cmFjdFRleHRUb1NwZWVjaEZlYXR1cmUjZ2V0Vm9sdW1lXHJcbiAgICAgICAqL1xyXG4gICAgICBnZXRWb2x1bWU6IHRoaXMuZ2V0Vm9sdW1lLmJpbmQodGhpcyksXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbWVtYmVyb2YgVGV4dFRvU3BlZWNoRmVhdHVyZVxyXG4gICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICogQG1ldGhvZFxyXG4gICAgICAgKiBAc2VlIEFic3RyYWN0VGV4dFRvU3BlZWNoRmVhdHVyZSNzZXRWb2x1bWVcclxuICAgICAgICovXHJcbiAgICAgIHNldFZvbHVtZTogdGhpcy5zZXRWb2x1bWUuYmluZCh0aGlzKSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBtZW1iZXJvZiBUZXh0VG9TcGVlY2hGZWF0dXJlXHJcbiAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgKiBAbWV0aG9kXHJcbiAgICAgICAqIEBzZWUgQWJzdHJhY3RUZXh0VG9TcGVlY2hGZWF0dXJlI3BhdXNlVm9sdW1lXHJcbiAgICAgICAqL1xyXG4gICAgICBwYXVzZVZvbHVtZTogdGhpcy5wYXVzZVZvbHVtZS5iaW5kKHRoaXMpLFxyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIFRleHRUb1NwZWVjaEZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBtZXRob2RcclxuICAgICAgICogQHNlZSBBYnN0cmFjdFRleHRUb1NwZWVjaEZlYXR1cmUjcmVzdW1lVm9sdW1lXHJcbiAgICAgICAqL1xyXG4gICAgICByZXN1bWVWb2x1bWU6IHRoaXMucmVzdW1lVm9sdW1lLmJpbmQodGhpcyksXHJcbiAgICB9KTtcclxuXHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhhcGksIHtcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBtZW1iZXJvZiBUZXh0VG9TcGVlY2hGZWF0dXJlXHJcbiAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgKiBAc2VlIEFic3RyYWN0VGV4dFRvU3BlZWNoRmVhdHVyZSNzcGVlY2htYXJrT2Zmc2V0XHJcbiAgICAgICAqL1xyXG4gICAgICBzcGVlY2htYXJrT2Zmc2V0OiB7XHJcbiAgICAgICAgZ2V0OiAoKSA9PiB0aGlzLnNwZWVjaG1hcmtPZmZzZXQsXHJcbiAgICAgICAgc2V0OiBvZmZzZXQgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zcGVlY2htYXJrT2Zmc2V0ID0gb2Zmc2V0O1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gYXBpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyBhbmQgc2V0cyB0aGUgdm9sdW1lIHVzZWQgZm9yIGFsbCBhdWRpbyBjbGlwcyBwbGF5ZWQgYnkgdGhlIHNwZWFrZXIuXHJcbiAgICpcclxuICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAqL1xyXG4gIHNldCB2b2x1bWUodm9sdW1lKSB7XHJcbiAgICB0aGlzLl92b2x1bWUgPSBNYXRoVXRpbHMuY2xhbXAodm9sdW1lKTtcclxuICB9XHJcblxyXG4gIGdldCB2b2x1bWUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fdm9sdW1lO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyB3aGV0aGVyIG9yIG5vdCB0aGUgc3BlYWtlcidzIHZvbHVtZSB2YWx1ZSBpcyBjdXJyZW50bHkgYmVpbmcgdHdlZW5lZC5cclxuICAgKlxyXG4gICAqIEByZWFkb25seVxyXG4gICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAqL1xyXG4gIGdldCB2b2x1bWVQZW5kaW5nKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3Byb21pc2VzLnZvbHVtZSAmJiB0aGlzLl9wcm9taXNlcy52b2x1bWUucGVuZGluZztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIHZvbHVtZSB1c2VkIGZvciBhbGwgYXVkaW8gY2xpcHMgcGxheWVkIGJ5IHRoZSBzcGVha2VyLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge251bWJlcn1cclxuICAgKi9cclxuICBnZXRWb2x1bWUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy52b2x1bWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGVzIHRoZSB2b2x1bWUgdXNlZCBmb3IgYWxsIGF1ZGlvIGNsaXBzIHBsYXllZCBieSB0aGUgc3BlYWtlciBvdmVyIHRpbWUuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge251bWJlcn0gdm9sdW1lIC0gVGFyZ2V0IHZvbHVtZSB2YWx1ZS5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gW3NlY29uZHM9MF0gLSBBbW91bnQgb2YgdGltZSBpdCB3aWxsIHRha2UgdG8gcmVhY2ggdGhlIHRhcmdldFxyXG4gICAqIHZvbHVtZS5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gZWFzaW5nRm4gLSBFYXNpbmcgZnVuY3Rpb24gdXNlZCBmb3IgaW50ZXJwb2xhdGlvbi5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtEZWZlcnJlZH1cclxuICAgKi9cclxuICBzZXRWb2x1bWUodm9sdW1lLCBzZWNvbmRzID0gMCwgZWFzaW5nRm4pIHtcclxuICAgIGlmICh0aGlzLnZvbHVtZVBlbmRpbmcpIHtcclxuICAgICAgdGhpcy5fcHJvbWlzZXMudm9sdW1lLmNhbmNlbCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHZvbHVtZSA9IE1hdGhVdGlscy5jbGFtcCh2b2x1bWUpO1xyXG4gICAgdGhpcy5fcHJvbWlzZXMudm9sdW1lID0gQW5pbWF0aW9uVXRpbHMuaW50ZXJwb2xhdGVQcm9wZXJ0eShcclxuICAgICAgdGhpcyxcclxuICAgICAgJ3ZvbHVtZScsXHJcbiAgICAgIHZvbHVtZSxcclxuICAgICAge3NlY29uZHMsIGVhc2luZ0ZufVxyXG4gICAgKTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5fcHJvbWlzZXMudm9sdW1lO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUGF1c2UgaW50ZXJwb2xhdGlvbiBoYXBwZW5pbmcgb24gdGhlIHNwZWFrZXIncyB2b2x1bWUgcHJvcGVydHkuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuICAgKi9cclxuICBwYXVzZVZvbHVtZSgpIHtcclxuICAgIHRoaXMuX3ZvbHVtZVBhdXNlZCA9IHRydWU7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMudm9sdW1lUGVuZGluZztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlc3VtZSBhbnkgaW50ZXJwb2xhdGlvbiBoYXBwZW5pbmcgb24gdGhlIHNwZWFrZXIncyB2b2x1bWUgcHJvcGVydHkuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuICAgKi9cclxuICByZXN1bWVWb2x1bWUoKSB7XHJcbiAgICB0aGlzLl92b2x1bWVQYXVzZWQgPSBmYWxzZTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy52b2x1bWVQZW5kaW5nO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlIHRoZSBjdXJyZW50bHkgcGxheWluZyBzcGVlY2guXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge251bWJlcn0gZGVsdGFUaW1lIC0gVGltZSBzaW5jZSB0aGUgbGFzdCB1cGRhdGUuXHJcbiAgICovXHJcbiAgdXBkYXRlKGRlbHRhVGltZSkge1xyXG4gICAgaWYgKCF0aGlzLl92b2x1bWVQYXVzZWQpIHtcclxuICAgICAgdGhpcy5fcHJvbWlzZXMudm9sdW1lLmV4ZWN1dGUoZGVsdGFUaW1lKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5fY3VycmVudFNwZWVjaCAmJiB0aGlzLl9jdXJyZW50U3BlZWNoLnBsYXlpbmcpIHtcclxuICAgICAgdGhpcy5fY3VycmVudFNwZWVjaC52b2x1bWUgPSB0aGlzLl92b2x1bWU7XHJcbiAgICAgIHRoaXMuX2N1cnJlbnRTcGVlY2gudXBkYXRlKHRoaXMuX2hvc3Qubm93KTtcclxuICAgICAgc3VwZXIudXBkYXRlKGRlbHRhVGltZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXQgdGhlIGN1cnJlbnQgc3BlZWNoIHRvIGEgbmV3IGFzc2V0IGFuZCB1cGRhdGUgdGhlIHNwZWVjaCdzIHNwZWVjaG1hcmtcclxuICAgKiBvZmZzZXQgdmFsdWUgdG8gbWF0Y2ggdGhhdCBvZiB0aGUgZmVhdHVyZS5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge0Fic3RyYWN0U3BlZWNofSBzcGVlY2ggLSBTcGVlY2ggdG8gc2V0IGFzIGN1cnJlbnQuXHJcbiAgICovXHJcbiAgX3NldEN1cnJlbnRTcGVlY2goc3BlZWNoKSB7XHJcbiAgICBzcGVlY2guc3BlZWNobWFya09mZnNldCA9IHRoaXMuX3NwZWVjaG1hcmtPZmZzZXQ7XHJcbiAgICB0aGlzLl9jdXJyZW50U3BlZWNoID0gc3BlZWNoO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlIGEgcHJvbWlzZSB0aGF0IHdpbGwgcGxheS9yZXN1bWUgYSBzcGVlY2ggd2l0aCB0aGUgZ2l2ZW4gdGV4dCBhZnRlclxyXG4gICAqIHRoZSBhdWRpbyBjb250ZXh0IGF0dGVtcHRzIHRvIHJlc3VtZSBhbmQgc3BlZWNoIGF1ZGlvIGlzIHJldHJpZXZlZCBmcm9tIFBvbGx5LlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gVGhlIHRleHQgb2YgdGhlIG5ldyBzcGVlY2ggdG8gcGxheS5cclxuICAgKiBAcGFyYW0ge09iamVjdD19IGNvbmZpZyAtIE9wdGlvbmFsIHBhcmFtZXRlcnMgZm9yIHRoZSBzcGVlY2guXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtwbGF5TWV0aG9kID0gJ3BsYXknXSAtIE1ldGhvZCB0byBleGVjdXRlIG9uIHRoZSByZXN1bHRpbmdcclxuICAgKiBTcGVlY2ggb2JqZWN0LiBWYWxpZCBvcHRpb25zIGFyZSAncGxheScgYW5kICdyZXN1bWUnLlxyXG4gICAqL1xyXG4gIF9zdGFydFNwZWVjaCh0ZXh0LCBjb25maWcsIHBsYXlNZXRob2QgPSAncGxheScpIHtcclxuICAgIC8vIElmIG5vIHRleHQgaXMgcHJvdmlkZWQsIHRyeSB0byB1c2UgdGhlIGN1cnJlbnQgc3BlZWNoXHJcbiAgICBpZiAodGV4dCA9PT0gdW5kZWZpbmVkICYmIHBsYXlNZXRob2QgPT09ICdyZXN1bWUnICYmIHRoaXMuX2N1cnJlbnRTcGVlY2gpIHtcclxuICAgICAgdGV4dCA9IHRoaXMuX2N1cnJlbnRTcGVlY2gudGV4dDtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBjdXJyZW50UHJvbWlzZSA9IHRoaXMuX2N1cnJlbnRQcm9taXNlIHx8IHtcclxuICAgICAgcGxheTogbmV3IERlZmVycmVkKFxyXG4gICAgICAgIHVuZGVmaW5lZCxcclxuICAgICAgICAoKSA9PiB7XHJcbiAgICAgICAgICBjdXJyZW50UHJvbWlzZS5zcGVlY2guY2FuY2VsKCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAoKSA9PiB7XHJcbiAgICAgICAgICBjdXJyZW50UHJvbWlzZS5zcGVlY2guY2FuY2VsKCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAoKSA9PiB7XHJcbiAgICAgICAgICBjdXJyZW50UHJvbWlzZS5zcGVlY2guY2FuY2VsKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICApLFxyXG4gICAgICBzcGVlY2g6IG5ldyBEZWZlcnJlZCgpLFxyXG4gICAgfTtcclxuICAgIHRoaXMuX2N1cnJlbnRQcm9taXNlID0gY3VycmVudFByb21pc2U7XHJcblxyXG4gICAgdGhpcy5fZ2V0U3BlZWNoKHRleHQsIGNvbmZpZylcclxuICAgICAgLnRoZW4oc3BlZWNoID0+IHtcclxuICAgICAgICAvLyBFeGl0IGlmIHRoZSBwcm9taXNlIGlzIG5vIGxvbmdlciBwZW5kaW5nIGJlY2F1c2Ugb2YgdXNlciBpbnRlcmFjdGlvblxyXG4gICAgICAgIGlmICghY3VycmVudFByb21pc2UucGxheS5wZW5kaW5nKSB7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9jdXJyZW50UHJvbWlzZSAhPT0gY3VycmVudFByb21pc2UpIHtcclxuICAgICAgICAgIC8vIENhbmNlbCBpZiBhbm90aGVyIGNhbGwgdG8gcGxheSBoYXMgYWxyZWFkeSBiZWVuIG1hZGVcclxuICAgICAgICAgIGN1cnJlbnRQcm9taXNlLnBsYXkuY2FuY2VsKCk7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBSZXNldCBjdXJyZW50IHNwZWVjaCB3aGVuIHRoZSBzcGVlY2ggZW5kc1xyXG4gICAgICAgIGNvbnN0IG9uRmluaXNoID0gKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5fY3VycmVudFNwZWVjaCA9IG51bGw7XHJcbiAgICAgICAgICB0aGlzLl9jdXJyZW50UHJvbWlzZSA9IG51bGw7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgLy8gQ2FuY2VsIHRoZSBjdXJyZW50bHkgcGxheWluZyBzcGVlY2hcclxuICAgICAgICBpZiAodGhpcy5fY3VycmVudFNwZWVjaCAmJiB0aGlzLl9jdXJyZW50U3BlZWNoLnBsYXlpbmcpIHtcclxuICAgICAgICAgIGlmIChwbGF5TWV0aG9kID09PSAncGxheScpIHtcclxuICAgICAgICAgICAgdGhpcy5fY3VycmVudFNwZWVjaC5jYW5jZWwoKTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgICAgIHBsYXlNZXRob2QgPT09ICdyZXN1bWUnICYmXHJcbiAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRTcGVlY2guYXVkaW8gIT09IHNwZWVjaC5hdWRpb1xyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRTcGVlY2guY2FuY2VsKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9zZXRDdXJyZW50U3BlZWNoKHNwZWVjaCk7XHJcblxyXG4gICAgICAgIC8vIFBsYXkgdGhlIHNwZWVjaFxyXG4gICAgICAgIGN1cnJlbnRQcm9taXNlLnNwZWVjaCA9IHNwZWVjaFtwbGF5TWV0aG9kXShcclxuICAgICAgICAgIHRoaXMuX2hvc3Qubm93LFxyXG4gICAgICAgICAgb25GaW5pc2gsXHJcbiAgICAgICAgICBvbkZpbmlzaCxcclxuICAgICAgICAgIG9uRmluaXNoXHJcbiAgICAgICAgKTtcclxuICAgICAgICBjdXJyZW50UHJvbWlzZS5zcGVlY2hcclxuICAgICAgICAgIC50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgaWYgKGN1cnJlbnRQcm9taXNlLnNwZWVjaC5yZXNvbHZlZCkge1xyXG4gICAgICAgICAgICAgIGN1cnJlbnRQcm9taXNlLnBsYXkucmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGN1cnJlbnRQcm9taXNlLnBsYXkuY2FuY2VsKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICAuY2F0Y2goZXJyb3IgPT4ge1xyXG4gICAgICAgICAgICBjdXJyZW50UHJvbWlzZS5wbGF5LnJlamVjdChlcnJvcik7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfSlcclxuICAgICAgLmNhdGNoKGUgPT4ge1xyXG4gICAgICAgIGUgPSBgQ2Fubm90ICR7cGxheU1ldGhvZH0gc3BlZWNoICR7dGV4dH0gb24gaG9zdCAke3RoaXMuaG9zdC5pZH0uICR7ZX1gO1xyXG4gICAgICAgIGN1cnJlbnRQcm9taXNlLnBsYXkucmVqZWN0KGUpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gY3VycmVudFByb21pc2UucGxheTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFN0b3AgYW55IHNwZWVjaGVzIGN1cnJlbnRseSBwbGF5aW5nIGFuZCBwbGF5IGEgbmV3IHNwZWVjaCBmcm9tIHRoZSBiZWdpbm5pbmcuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIFRoZSB0ZXh0IG9mIHRoZSBuZXcgc3BlZWNoIHRvIHBsYXkuXHJcbiAgICogQHBhcmFtIHtPYmplY3Q9fSBjb25maWcgLSBPcHRpb25hbCBwYXJhbWV0ZXJzIGZvciB0aGUgc3BlZWNoLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0RlZmVycmVkfVxyXG4gICAqL1xyXG4gIHBsYXkodGV4dCwgY29uZmlnKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fc3RhcnRTcGVlY2godGV4dCwgY29uZmlnLCAncGxheScpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSWYgYSBzcGVlY2ggaXMgY3VycmVudGx5IHBsYXlpbmcsIHBhdXNlIGl0IGF0IHRoZSBjdXJyZW50IHRpbWUuXHJcbiAgICovXHJcbiAgcGF1c2UoKSB7XHJcbiAgICBpZiAodGhpcy5fY3VycmVudFNwZWVjaCAmJiB0aGlzLl9jdXJyZW50U3BlZWNoLnBsYXlpbmcpIHtcclxuICAgICAgdGhpcy5fY3VycmVudFNwZWVjaC5wYXVzZSh0aGlzLl9ob3N0Lm5vdyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLndhcm4oXHJcbiAgICAgICAgYENhbm5vdCBwYXVzZSBzcGVlY2ggb24gaG9zdCAke3RoaXMuaG9zdC5pZH0uIE5vIHNwZWVjaCBpcyBjdXJyZW50bHkgcGxheWluZ2BcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFN0b3AgYW55IHNwZWVjaGVzIGN1cnJlbnRseSBwbGF5aW5nIGFuZCByZXN1bWUgYSBuZXcgc3BlZWNoIGZyb20gdGhlIGN1cnJlbnRcclxuICAgKiB0aW1lLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmc9fSB0ZXh0IC0gVGhlIHRleHQgb2YgdGhlIG5ldyBzcGVlY2ggdG8gcGxheS4gSWYgdW5kZWZpbmVkIGFuZFxyXG4gICAqIHRoZXJlIGlzIGEgY3VycmVudCBzcGVlY2ggdGhhdCBpcyBwYXVzZWQsIHRoZSBjdXJyZW50IHNwZWVjaCB3aWxsIGJlIHJlc3VtZWQuXHJcbiAgICogQHBhcmFtIHtPYmplY3Q9fSBjb25maWcgLSBPcHRpb25hbCBwYXJhbWV0ZXJzIGZvciB0aGUgc3BlZWNoLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0RlZmVycmVkfVxyXG4gICAqL1xyXG4gIHJlc3VtZSh0ZXh0LCBjb25maWcpIHtcclxuICAgIHJldHVybiB0aGlzLl9zdGFydFNwZWVjaCh0ZXh0LCBjb25maWcsICdyZXN1bWUnKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIElmIGEgc3BlZWNoIGlzIGN1cnJlbnRseSBwbGF5aW5nLCBzdG9wIHBsYXliYWNrIGFuZCByZXNldCB0aW1lLlxyXG4gICAqL1xyXG4gIHN0b3AoKSB7XHJcbiAgICBpZiAodGhpcy5fY3VycmVudFNwZWVjaCAmJiB0aGlzLl9jdXJyZW50U3BlZWNoLnBsYXlpbmcpIHtcclxuICAgICAgdGhpcy5fY3VycmVudFNwZWVjaC5zdG9wKCk7XHJcbiAgICAgIHRoaXMuX2N1cnJlbnRTcGVlY2ggPSBudWxsO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgIGBDYW5ub3Qgc3RvcCBzcGVlY2ggb24gaG9zdCAke3RoaXMuaG9zdC5pZH0uIE5vIHNwZWVjaCBpcyBjdXJyZW50bHkgcGxheWluZy5gXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBkaXNjYXJkKCkge1xyXG4gICAgaWYgKHRoaXMuX2N1cnJlbnRTcGVlY2ggJiYgdGhpcy5fY3VycmVudFNwZWVjaC5wbGF5aW5nKSB7XHJcbiAgICAgIHRoaXMuX2N1cnJlbnRTcGVlY2guc3RvcCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGRlbGV0ZSB0aGlzLl9zcGVlY2hDYWNoZTtcclxuXHJcbiAgICBzdXBlci5kaXNjYXJkKCk7XHJcbiAgfVxyXG59XHJcblxyXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhBYnN0cmFjdFRleHRUb1NwZWVjaEZlYXR1cmUsIHtcclxuICBBV1NfVkVSU0lPTjoge1xyXG4gICAgZ2V0OiAoKSA9PiBhd3NWZXJzaW9uLFxyXG4gIH0sXHJcbiAgUE9MTFlfTUlOX05FVVJBTF9WRVJTSU9OOiB7XHJcbiAgICB2YWx1ZTogJzIuNTAzJyxcclxuICAgIHdyaXRhYmxlOiBmYWxzZSxcclxuICB9LFxyXG4gIFBPTExZX0RFRkFVTFRTOiB7XHJcbiAgICB2YWx1ZToge1xyXG4gICAgICBFbmdpbmU6ICdzdGFuZGFyZCcsXHJcbiAgICAgIExleGljb25OYW1lczogW10sXHJcbiAgICAgIE91dHB1dEZvcm1hdDogJ21wMycsXHJcbiAgICAgIFNhbXBsZVJhdGU6ICcyMjA1MCcsXHJcbiAgICAgIFRleHQ6ICcnLFxyXG4gICAgICBUZXh0VHlwZTogJ3NzbWwnLFxyXG4gICAgICBWb2ljZUlkOiAnQW15JyxcclxuICAgICAgTGFuZ3VhZ2VDb2RlOiAnZW4tR0InLFxyXG4gICAgICBMYW5ndWFnZU5hbWU6ICdCcml0aXNoIEVuZ2xpc2gnLFxyXG4gICAgfSxcclxuICAgIHdyaXRhYmxlOiBmYWxzZSxcclxuICB9LFxyXG4gIFBPTExZX1ZPSUNFUzoge1xyXG4gICAgdmFsdWU6IFtdLFxyXG4gICAgd3JpdGFibGU6IGZhbHNlLFxyXG4gIH0sXHJcbiAgUE9MTFlfTEFOR1VBR0VTOiB7XHJcbiAgICB2YWx1ZToge30sXHJcbiAgICB3cml0YWJsZTogZmFsc2UsXHJcbiAgfSxcclxuICBQT0xMWV9MQU5HVUFHRV9DT0RFUzoge1xyXG4gICAgdmFsdWU6IHt9LFxyXG4gICAgd3JpdGFibGU6IGZhbHNlLFxyXG4gIH0sXHJcbiAgX2lzUmVhZHk6IHtcclxuICAgIHZhbHVlOiBmYWxzZSxcclxuICAgIHdyaXRhYmxlOiB0cnVlLFxyXG4gIH0sXHJcbiAgRVZFTlRTOiB7XHJcbiAgICB2YWx1ZToge1xyXG4gICAgICAuLi5PYmplY3QuZ2V0UHJvdG90eXBlT2YoQWJzdHJhY3RUZXh0VG9TcGVlY2hGZWF0dXJlKS5FVkVOVFMsXHJcbiAgICAgIHJlYWR5OiAnb25SZWFkeUV2ZW50JyxcclxuICAgICAgcGxheTogJ29uUGxheUV2ZW50JyxcclxuICAgICAgcGF1c2U6ICdvblBhdXNlRXZlbnQnLFxyXG4gICAgICByZXN1bWU6ICdvblJlc3VtZUV2ZW50JyxcclxuICAgICAgaW50ZXJydXB0OiAnb25JbnRlcnJ1cHRFdmVudCcsXHJcbiAgICAgIHN0b3A6ICdvblN0b3BFdmVudCcsXHJcbiAgICAgIHNlbnRlbmNlOiAnb25TZW50ZW5jZUV2ZW50JyxcclxuICAgICAgd29yZDogJ29uV29yZEV2ZW50JyxcclxuICAgICAgdmlzZW1lOiAnb25WaXNlbWVFdmVudCcsXHJcbiAgICAgIHNzbWw6ICdvblNzbWxFdmVudCcsXHJcbiAgICB9LFxyXG4gIH0sXHJcbiAgU0VSVklDRVM6IHtcclxuICAgIHZhbHVlOiB7XHJcbiAgICAgIC4uLk9iamVjdC5nZXRQcm90b3R5cGVPZihBYnN0cmFjdFRleHRUb1NwZWVjaEZlYXR1cmUpLlNFUlZJQ0VTLFxyXG4gICAgICBwb2xseTogdW5kZWZpbmVkLFxyXG4gICAgICBwcmVzaWduZXI6IHVuZGVmaW5lZCxcclxuICAgIH0sXHJcbiAgfSxcclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBBYnN0cmFjdFRleHRUb1NwZWVjaEZlYXR1cmU7XHJcbiIsIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxyXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTBcclxuaW1wb3J0IFNwZWVjaCBmcm9tICdhcHAvYXdzcGFjay9TcGVlY2gnO1xyXG5pbXBvcnQgRGVmZXJyZWQgZnJvbSAnY29yZS9EZWZlcnJlZCc7XHJcbmltcG9ydCBBYnN0cmFjdFRleHRUb1NwZWVjaEZlYXR1cmUgZnJvbSAnLi9BYnN0cmFjdFRleHRUb1NwZWVjaEZlYXR1cmUnO1xyXG5cclxuLyoqXHJcbiAqIEBleHRlbmRzIEFic3RyYWN0VGV4dFRvU3BlZWNoRmVhdHVyZVxyXG4gKiBAYWxpYXMgY29yZS9UZXh0VG9TcGVlY2hGZWF0dXJlXHJcbiAqL1xyXG5jbGFzcyBUZXh0VG9TcGVlY2hGZWF0dXJlIGV4dGVuZHMgQWJzdHJhY3RUZXh0VG9TcGVlY2hGZWF0dXJlIHtcclxuICBjb25zdHJ1Y3RvciguLi5hcmdzKSB7XHJcbiAgICBzdXBlciguLi5hcmdzKTtcclxuXHJcbiAgICB0aGlzLl9lbmFibGVkID0gZmFsc2U7XHJcbiAgICB0aGlzLl9zZXRBdWRpb0NvbnRleHQoKTtcclxuICAgIHRoaXMuX29ic2VydmVBdWRpb0NvbnRleHQoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFN0b3JlIHRoZSBhdWRpbyBjb250ZXh0IHRoYXQgd2lsbCBiZSB1c2VkIHRvIGVuc3VyZSBhdWRpbyBjYW4gYmUgcGxheWVkLlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBfc2V0QXVkaW9Db250ZXh0KCkge1xyXG4gICAgdGhpcy5fYXVkaW9Db250ZXh0ID0gbmV3IEF1ZGlvQ29udGV4dCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTGlzdGVuIGZvciBzdGF0ZSBjaGFuZ2VzIG9uIHRoZSBhdWRpbyBjb250ZXh0IHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSBmZWF0dXJlXHJcbiAgICogaXMgZW5hYmxlZC5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICovXHJcbiAgX29ic2VydmVBdWRpb0NvbnRleHQoKSB7XHJcbiAgICBpZiAodGhpcy5fYXVkaW9Db250ZXh0KSB7XHJcbiAgICAgIHRoaXMuX2F1ZGlvQ29udGV4dC5vbnN0YXRlY2hhbmdlID0gKCkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLl9hdWRpb0NvbnRleHQuc3RhdGUgPT09ICdydW5uaW5nJykge1xyXG4gICAgICAgICAgdGhpcy5fZW5hYmxlZCA9IHRydWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuX2VuYWJsZWQgPSBmYWxzZTtcclxuICAgICAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICAgICAgJ1RoZSBhdWRpbyBjb250ZXh0IGlzIG5vdCBydW5uaW5nLiBTcGVlY2ggd2lsbCBub3QgYmUgYWJsZSB0byBiZSBwbGF5ZWQgdW50aWwgaXQgaXMgcmVzdW1lZC4gVXNlIHRoZSBcIlRleHRUb1NwZWVjaEZlYXR1cmUucmVzdW1lQXVkaW9cIiBtZXRob2QgdG8gdHJ5IHRvIHJlc3VtZSBpdCBhZnRlciBhIHVzZXIgZ2VzdHVyZS4nXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgfTtcclxuXHJcbiAgICAgIHRoaXMuX2F1ZGlvQ29udGV4dC5vbnN0YXRlY2hhbmdlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGUgYW4gQXVkaW8gb2JqZWN0IG9mIHNwZWVjaCBhdWRpbyBmb3IgdGhlIGdpdmVuIHNwZWVjaCB0ZXh0LlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXMgLSBQYXJhbWV0ZXJzIG9iamVjdCBjb21wYXRpYmxlIHdpdGggUG9sbHkuc3ludGhlc2l6ZVNwZWVjaC5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfSBSZXNvbHZlcyB3aXRoIGFuIG9iamVjdCBjb250YWluaW5nIHRoZSBhdWRpbyBVUkwgYW5kIEF1ZGlvXHJcbiAgICogb2JqZWN0LlxyXG4gICAqL1xyXG4gIF9zeW50aGVzaXplQXVkaW8ocGFyYW1zKSB7XHJcbiAgICByZXR1cm4gc3VwZXIuX3N5bnRoZXNpemVBdWRpbyhwYXJhbXMpLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgY29uc3Qge3VybH0gPSByZXN1bHQ7XHJcblxyXG4gICAgICAvLyBDcmVhdGUgYW4gQXVkaW8gb2JqZWN0IHRoYXQgcG9pbnRzIHRvIHRoZSBwcmVzaWduZWQgdXJsXHJcbiAgICAgIGNvbnN0IGF1ZGlvID0gbmV3IEF1ZGlvKHVybCk7XHJcbiAgICAgIGF1ZGlvLmxvb3AgPSB0aGlzLmxvb3A7XHJcbiAgICAgIGF1ZGlvLmNyb3NzT3JpZ2luID0gJ2Fub255bW91cyc7XHJcbiAgICAgIGF1ZGlvLnByZWxvYWQgPSAnYXV0byc7XHJcbiAgICAgIHJlc3VsdC5hdWRpbyA9IGF1ZGlvO1xyXG5cclxuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xyXG4gICAgICAgIC8vIFJlc29sdmUgb25jZSB0aGUgbWluaW11bSBhbW91bnQgaXMgbG9hZGVkXHJcbiAgICAgICAgYXVkaW8uYWRkRXZlbnRMaXN0ZW5lcignY2FucGxheXRocm91Z2gnLCAoKSA9PiB7XHJcbiAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIC8vIFN0YXJ0IGxvYWRpbmcgdGhlIGF1ZGlvXHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChhdWRpbyk7XHJcbiAgICAgICAgYXVkaW8ubG9hZCgpO1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlIGEgbmV3IFNwZWVjaCBvYmplY3QgZm9yIHRoZSBzcGVha2VyLlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7VGV4dFRvU3BlZWNofSBzcGVha2VyIC0gVGhlIFRleHRUb1NwZWVjaCBpbnN0YW5jZSB0aGF0IHdpbGwgb3duIHRoZSBzcGVlY2guXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSBUZXh0IG9mIHRoZSBzcGVlY2guXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IHNwZWVjaG1hcmtzIC0gU3BlZWNobWFya3MgZm9yIHRoZSBzcGVlY2guXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IGF1ZGlvQ29uZmlnIC0gQXVkaW8gZm9yIHRoZSBzcGVlY2guXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7QWJzdHJhY3RTcGVlY2h9XHJcbiAgICovXHJcbiAgX2NyZWF0ZVNwZWVjaCh0ZXh0LCBzcGVlY2htYXJrcywgYXVkaW9Db25maWcpIHtcclxuICAgIHJldHVybiBuZXcgU3BlZWNoKHRoaXMsIHRleHQsIHNwZWVjaG1hcmtzLCBhdWRpb0NvbmZpZyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHdoZXRoZXIgb3Igbm90IHRoZSBhdWRpbyBjb250ZXh0IGlzIHJ1bm5pbmcgYW5kIHNwZWVjaCBjYW4gYmUgcGxheWVkLlxyXG4gICAqXHJcbiAgICogQHJlYWRvbmx5XHJcbiAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICovXHJcbiAgZ2V0IGVuYWJsZWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fZW5hYmxlZDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRyeSB0byByZXN1bWUgdGhlIGF1ZGlvIGNvbnRleHQuIFRoaXMgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGV4ZWN1dGVkIGVhY2ggdGltZVxyXG4gICAqIHNwZWVjaCBpcyBwbGF5ZWQgb3IgcmVzdW1lZC4gSWYgdXNpbmcgbWFudWFsbHksIGl0IHNob3VsZCBiZSBjYWxsZWQgYWZ0ZXIgYVxyXG4gICAqIHVzZXIgaW50ZXJhY3Rpb24gb2NjdXJzLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0RlZmVycmVkfSAtIFJlc29sdmVzIG9uY2UgdGhlIGF1ZGlvIGNvbnRleHQgaGFzIHJlc3VtZWQuXHJcbiAgICovXHJcbiAgcmVzdW1lQXVkaW8oKSB7XHJcbiAgICBjb25zdCBwcm9taXNlID0gbmV3IERlZmVycmVkKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgdGhpcy5fYXVkaW9Db250ZXh0XHJcbiAgICAgICAgLnJlc3VtZSgpXHJcbiAgICAgICAgLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5fZW5hYmxlZCA9IHRydWU7XHJcbiAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuY2F0Y2goZSA9PiB7XHJcbiAgICAgICAgICB0aGlzLl9lbmFibGVkID0gZmFsc2U7XHJcbiAgICAgICAgICByZWplY3QoZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBwcm9taXNlO1xyXG4gIH1cclxuXHJcbiAgX3N0YXJ0U3BlZWNoKHRleHQsIGNvbmZpZywgcGxheU1ldGhvZCA9ICdwbGF5Jykge1xyXG4gICAgY29uc3QgY3VycmVudFByb21pc2UgPSB7XHJcbiAgICAgIHBsYXk6IG5ldyBEZWZlcnJlZChcclxuICAgICAgICB1bmRlZmluZWQsXHJcbiAgICAgICAgKCkgPT4geyBjdXJyZW50UHJvbWlzZS5zcGVlY2guY2FuY2VsKCk7IH0sXHJcbiAgICAgICAgKCkgPT4geyBjdXJyZW50UHJvbWlzZS5zcGVlY2guY2FuY2VsKCk7IH0sXHJcbiAgICAgICAgKCkgPT4geyBjdXJyZW50UHJvbWlzZS5zcGVlY2guY2FuY2VsKCk7IH1cclxuICAgICAgKSxcclxuICAgICAgc3BlZWNoOiBuZXcgRGVmZXJyZWQoKSxcclxuICAgIH07XHJcbiAgICB0aGlzLl9jdXJyZW50UHJvbWlzZSA9IGN1cnJlbnRQcm9taXNlO1xyXG5cclxuICAgIC8vIFRyeSB0byBzdGFydCB0aGUgYXVkaW8gY29udGV4dFxyXG4gICAgdGhpcy5yZXN1bWVBdWRpbygpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAvLyBFeGl0IGlmIHRoZSBwcm9taXNlIGlzIG5vIGxvbmdlciBwZW5kaW5nIGJlY2F1c2Ugb2YgdXNlciBpbnRlcmFjdGlvblxyXG4gICAgICBpZiAoIWN1cnJlbnRQcm9taXNlLnBsYXkucGVuZGluZykge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICAvLyBDYW5jZWwgaWYgYW5vdGhlciBjYWxsIHRvIHBsYXkgaGFzIGFscmVhZHkgYmVlbiBtYWRlXHJcbiAgICAgIGVsc2UgaWYgKHRoaXMuX2N1cnJlbnRQcm9taXNlICE9PSBjdXJyZW50UHJvbWlzZSkge1xyXG4gICAgICAgIGN1cnJlbnRQcm9taXNlLnBsYXkuY2FuY2VsKCk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBUaGUgYXVkaW8gY29udGV4dCBpcyBydW5uaW5nIHNvIHRoZSBzcGVlY2ggY2FuIGJlIHBsYXllZFxyXG4gICAgICBpZiAodGhpcy5fZW5hYmxlZCkge1xyXG4gICAgICAgIHN1cGVyLl9zdGFydFNwZWVjaCh0ZXh0LCBjb25maWcsIHBsYXlNZXRob2QpO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIFJlamVjdCBpZiB0aGUgYXVkaW8gY29udGV4dCBpcyBub3QgcnVubmluZ1xyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBjdXJyZW50UHJvbWlzZS5yZWplY3QoXHJcbiAgICAgICAgICBuZXcgRXJyb3IoXHJcbiAgICAgICAgICAgIGBDYW5ub3QgJHtwbGF5TWV0aG9kfSBzcGVlY2ggb24gaG9zdCAke3RoaXMuX2hvc3QuaWR9LiBUaGUgYXVkaW8gY29udGV4dCBpcyBub3QgcnVubmluZy4gVXNlIHRoZSBcIlRleHRUb1NwZWVjaEZlYXR1cmUucmVzdW1lQXVkaW9cIiBtZXRob2QgdG8gdHJ5IHRvIHJlc3VtZSBpdCBhZnRlciBhIHVzZXIgZ2VzdHVyZS5gXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIGN1cnJlbnRQcm9taXNlLnBsYXk7XHJcbiAgfVxyXG5cclxuICBwbGF5KHRleHQsIGNvbmZpZykge1xyXG4gICAgcmV0dXJuIHRoaXMuX3N0YXJ0U3BlZWNoKHRleHQsIGNvbmZpZywgJ3BsYXknKTtcclxuICB9XHJcblxyXG4gIHJlc3VtZSh0ZXh0LCBjb25maWcpIHtcclxuICAgIHJldHVybiB0aGlzLl9zdGFydFNwZWVjaCh0ZXh0LCBjb25maWcsICdyZXN1bWUnKTtcclxuICB9XHJcblxyXG4gIGluc3RhbGxBcGkoKSB7XHJcbiAgICBjb25zdCBhcGkgPSBzdXBlci5pbnN0YWxsQXBpKCk7XHJcblxyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoYXBpLCB7XHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbWVtYmVyb2YgVGV4dFRvU3BlZWNoRmVhdHVyZVxyXG4gICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICogQHNlZSBjb3JlL1RleHRUb1NwZWVjaEZlYXR1cmUjZW5hYmxlZFxyXG4gICAgICAgKi9cclxuICAgICAgZW5hYmxlZDoge1xyXG4gICAgICAgIGdldDogKCkgPT4gdGhpcy5fZW5hYmxlZCxcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBhcGk7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBUZXh0VG9TcGVlY2hGZWF0dXJlO1xyXG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cclxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVC0wXHJcbmltcG9ydCBUZXh0VG9TcGVlY2hGZWF0dXJlIGZyb20gJy4vVGV4dFRvU3BlZWNoRmVhdHVyZSc7XHJcbmltcG9ydCBUZXh0VG9TcGVlY2hVdGlscyBmcm9tICcuL1RleHRUb1NwZWVjaFV0aWxzJztcclxuaW1wb3J0IFNwZWVjaCBmcm9tICcuL1NwZWVjaCc7XHJcblxyXG4vKipcclxuICogQG1vZHVsZSBjb3JlL2F3c3BhY2tcclxuICovXHJcblxyXG5leHBvcnQgZGVmYXVsdCB7XHJcbiAgLyoqXHJcbiAgICogQHNlZSBjb3JlL1RleHRUb1NwZWVjaEZlYXR1cmVcclxuICAgKi9cclxuICBUZXh0VG9TcGVlY2hGZWF0dXJlLFxyXG4gIC8qKlxyXG4gICAqIEBzZWUgY29yZS9UZXh0VG9TcGVlY2hVdGlsc1xyXG4gICAqL1xyXG4gIFRleHRUb1NwZWVjaFV0aWxzLFxyXG4gIC8qKlxyXG4gICAqIEBzZWUgY29yZS9TcGVlY2hcclxuICAgKi9cclxuICBTcGVlY2gsXHJcbn07XHJcbiIsIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxyXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTBcclxuXHJcbi8qKlxyXG4gKiBAbW9kdWxlIGNvcmUvYW5pbXBhY2tcclxuICovXHJcblxyXG5pbXBvcnQge1xyXG4gIExpbmVhcixcclxuICBRdWFkcmF0aWMsXHJcbiAgQ3ViaWMsXHJcbiAgUXVhcnRpYyxcclxuICBRdWludGljLFxyXG4gIFNpbnVzb2lkYWwsXHJcbiAgRXhwb25lbnRpYWwsXHJcbiAgQ2lyY3VsYXIsXHJcbiAgRWxhc3RpYyxcclxuICBCYWNrLFxyXG4gIEJvdW5jZSxcclxufSBmcm9tICcuL0Vhc2luZyc7XHJcbmltcG9ydCBBbmltYXRpb25GZWF0dXJlLCB7QW5pbWF0aW9uVHlwZXN9IGZyb20gJy4vQW5pbWF0aW9uRmVhdHVyZSc7XHJcbmltcG9ydCBBbmltYXRpb25MYXllciwge1xyXG4gIExheWVyQmxlbmRNb2RlcyxcclxuICBEZWZhdWx0TGF5ZXJCbGVuZE1vZGUsXHJcbn0gZnJvbSAnLi9BbmltYXRpb25MYXllcic7XHJcbmltcG9ydCBTaW5nbGVTdGF0ZSBmcm9tICcuL3N0YXRlL1NpbmdsZVN0YXRlJztcclxuaW1wb3J0IFRyYW5zaXRpb25TdGF0ZSBmcm9tICcuL3N0YXRlL1RyYW5zaXRpb25TdGF0ZSc7XHJcbmltcG9ydCBGcmVlQmxlbmRTdGF0ZSBmcm9tICcuL3N0YXRlL0ZyZWVCbGVuZFN0YXRlJztcclxuaW1wb3J0IFF1ZXVlU3RhdGUgZnJvbSAnLi9zdGF0ZS9RdWV1ZVN0YXRlJztcclxuaW1wb3J0IFJhbmRvbUFuaW1hdGlvblN0YXRlIGZyb20gJy4vc3RhdGUvUmFuZG9tQW5pbWF0aW9uU3RhdGUnO1xyXG5pbXBvcnQgQmxlbmQxZFN0YXRlIGZyb20gJy4vc3RhdGUvQmxlbmQxZFN0YXRlJztcclxuaW1wb3J0IEJsZW5kMmRTdGF0ZSBmcm9tICcuL3N0YXRlL0JsZW5kMmRTdGF0ZSc7XHJcbmltcG9ydCBBbmltYXRpb25VdGlscyBmcm9tICcuL0FuaW1hdGlvblV0aWxzJztcclxuXHJcbi8qKlxyXG4gKiBAbmFtZXNwYWNlXHJcbiAqL1xyXG5jb25zdCBFYXNpbmcgPSB7XHJcbiAgLyoqXHJcbiAgICogQHNlZSBMaW5lYXJcclxuICAgKi9cclxuICBMaW5lYXIsXHJcbiAgLyoqXHJcbiAgICogQHNlZSBRdWFkcmF0aWNcclxuICAgKi9cclxuICBRdWFkcmF0aWMsXHJcbiAgLyoqXHJcbiAgICogQHNlZSBDdWJpY1xyXG4gICAqL1xyXG4gIEN1YmljLFxyXG4gIC8qKlxyXG4gICAqIEBzZWUgUXVhcnRpY1xyXG4gICAqL1xyXG4gIFF1YXJ0aWMsXHJcbiAgLyoqXHJcbiAgICogQHNlZSBRdWludGljXHJcbiAgICovXHJcbiAgUXVpbnRpYyxcclxuICAvKipcclxuICAgKiBAc2VlIFNpbnVzb2lkYWxcclxuICAgKi9cclxuICBTaW51c29pZGFsLFxyXG4gIC8qKlxyXG4gICAqIEBzZWUgRXhwb25lbnRpYWxcclxuICAgKi9cclxuICBFeHBvbmVudGlhbCxcclxuICAvKipcclxuICAgKiBAc2VlIENpcmN1bGFyXHJcbiAgICovXHJcbiAgQ2lyY3VsYXIsXHJcbiAgLyoqXHJcbiAgICogQHNlZSBFbGFzdGljXHJcbiAgICovXHJcbiAgRWxhc3RpYyxcclxuICAvKipcclxuICAgKiBAc2VlIEJhY2tcclxuICAgKi9cclxuICBCYWNrLFxyXG4gIC8qKlxyXG4gICAqIEBzZWUgQm91bmNlXHJcbiAgICovXHJcbiAgQm91bmNlLFxyXG59O1xyXG5leHBvcnQgZGVmYXVsdCB7XHJcbiAgLyoqXHJcbiAgICogQHNlZSBjb3JlL0FuaW1hdGlvbkZlYXR1cmVcclxuICAgKi9cclxuICBBbmltYXRpb25GZWF0dXJlLFxyXG4gIC8qKlxyXG4gICAqIEBzZWUgQW5pbWF0aW9uTGF5ZXJcclxuICAgKi9cclxuICBBbmltYXRpb25MYXllcixcclxuICAvKipcclxuICAgKiBAc2VlIGNvcmUvU2luZ2xlU3RhdGVcclxuICAgKi9cclxuICBTaW5nbGVTdGF0ZSxcclxuICAvKipcclxuICAgKiBAc2VlIFRyYW5zaXRpb25TdGF0ZVxyXG4gICAqL1xyXG4gIFRyYW5zaXRpb25TdGF0ZSxcclxuICAvKipcclxuICAgKiBAc2VlIEZyZWVCbGVuZFN0YXRlXHJcbiAgICovXHJcbiAgRnJlZUJsZW5kU3RhdGUsXHJcbiAgLyoqXHJcbiAgICogQHNlZSBRdWV1ZVN0YXRlXHJcbiAgICovXHJcbiAgUXVldWVTdGF0ZSxcclxuICAvKipcclxuICAgKiBAc2VlIFJhbmRvbUFuaW1hdGlvblN0YXRlXHJcbiAgICovXHJcbiAgUmFuZG9tQW5pbWF0aW9uU3RhdGUsXHJcbiAgLyoqXHJcbiAgICogQHNlZSBCbGVuZDFkU3RhdGVcclxuICAgKi9cclxuICBCbGVuZDFkU3RhdGUsXHJcbiAgLyoqXHJcbiAgICogQHNlZSBCbGVuZDJkU3RhdGVcclxuICAgKi9cclxuICBCbGVuZDJkU3RhdGUsXHJcbiAgLyoqXHJcbiAgICogQHNlZSBBbmltYXRpb25VdGlsc1xyXG4gICAqL1xyXG4gIEFuaW1hdGlvblV0aWxzLFxyXG5cclxuICBFYXNpbmcsXHJcbiAgLyoqXHJcbiAgICogQHNlZSBMYXllckJsZW5kTW9kZXNcclxuICAgKi9cclxuICBMYXllckJsZW5kTW9kZXMsXHJcbiAgLyoqXHJcbiAgICogQHNlZSBEZWZhdWx0TGF5ZXJCbGVuZE1vZGVcclxuICAgKi9cclxuICBEZWZhdWx0TGF5ZXJCbGVuZE1vZGUsXHJcbiAgLyoqXHJcbiAgICogQHNlZSBBbmltYXRpb25UeXBlc1xyXG4gICAqL1xyXG4gIEFuaW1hdGlvblR5cGVzLFxyXG59O1xyXG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cclxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVC0wXHJcblxyXG4vKipcclxuICogQG1vZHVsZSBjb3JlL0hPU1RcclxuICovXHJcblxyXG5pbXBvcnQgVXRpbHMgZnJvbSAnLi9VdGlscyc7XHJcbmltcG9ydCBNYXRoVXRpbHMgZnJvbSAnLi9NYXRoVXRpbHMnO1xyXG5pbXBvcnQgRGVmZXJyZWQgZnJvbSAnLi9EZWZlcnJlZCc7XHJcbmltcG9ydCB7ZW52fSBmcm9tICcuL0hvc3RFbnZpcm9ubWVudCc7XHJcbmltcG9ydCBNZXNzZW5nZXIgZnJvbSAnLi9NZXNzZW5nZXInO1xyXG5pbXBvcnQgSG9zdE9iamVjdCBmcm9tICcuL0hvc3RPYmplY3QnO1xyXG5pbXBvcnQgTGlwc3luY0ZlYXR1cmUsIHtEZWZhdWx0VmlzZW1lTWFwfSBmcm9tICcuL0xpcHN5bmNGZWF0dXJlJztcclxuaW1wb3J0IEdlc3R1cmVGZWF0dXJlLCB7IERlZmF1bHRHZXN0dXJlV29yZHMgfSBmcm9tICcuL0dlc3R1cmVGZWF0dXJlJztcclxuaW1wb3J0IFBvaW50T2ZJbnRlcmVzdEZlYXR1cmUsIHsgQXhpc01hcCB9IGZyb20gJy4vUG9pbnRPZkludGVyZXN0RmVhdHVyZSc7XHJcblxyXG5pbXBvcnQgYXdzIGZyb20gJy4vYXdzcGFjayc7XHJcbmltcG9ydCBhbmltIGZyb20gJy4vYW5pbXBhY2snO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gIC8qKlxyXG4gICAqIEBzZWUgZW52XHJcbiAgICovXHJcbiAgZW52LFxyXG4gIC8qKlxyXG4gICAqIEBzZWUgVXRpbHNcclxuICAgKi9cclxuICBVdGlscyxcclxuICAvKipcclxuICAgKiBAc2VlIE1hdGhVdGlsc1xyXG4gICAqL1xyXG4gIE1hdGhVdGlscyxcclxuICAvKipcclxuICAgKiBAc2VlIERlZmVycmVkXHJcbiAgICovXHJcbiAgRGVmZXJyZWQsXHJcbiAgLyoqXHJcbiAgICogQHNlZSBjb3JlL01lc3NlbmdlclxyXG4gICAqL1xyXG4gIE1lc3NlbmdlcixcclxuICAvKipcclxuICAgKiBAc2VlIGNvcmUvSG9zdE9iamVjdFxyXG4gICAqL1xyXG4gIEhvc3RPYmplY3QsXHJcbiAgLyoqXHJcbiAgICogQHNlZSBjb3JlL0xpcHN5bmNGZWF0dXJlXHJcbiAgICovXHJcbiAgTGlwc3luY0ZlYXR1cmUsXHJcbiAgLyoqXHJcbiAgICogQHNlZSBHZXN0dXJlRmVhdHVyZVxyXG4gICAqL1xyXG4gIEdlc3R1cmVGZWF0dXJlLFxyXG4gIC8qKlxyXG4gICAqIEBzZWUgY29yZS9Qb2ludE9mSW50ZXJlc3RGZWF0dXJlXHJcbiAgICovXHJcbiAgUG9pbnRPZkludGVyZXN0RmVhdHVyZSxcclxuICAvKipcclxuICAgKiBAc2VlIERlZmF1bHRWaXNlbWVNYXBcclxuICAgKi9cclxuICBEZWZhdWx0VmlzZW1lTWFwLFxyXG4gIC8qKlxyXG4gICAqIEBzZWUgRGVmYXVsdEdlc3R1cmVXb3Jkc1xyXG4gICAqL1xyXG4gIERlZmF1bHRHZXN0dXJlV29yZHMsXHJcbiAgLyoqXHJcbiAgICogQHNlZSBBeGlzTWFwXHJcbiAgICovXHJcbiAgQXhpc01hcCxcclxuICAvKipcclxuICAgKiBAc2VlIG1vZHVsZTpjb3JlL2F3c3BhY2tcclxuICAgKi9cclxuICBhd3MsXHJcbiAgLyoqXHJcbiAgICogQHNlZSBtb2R1bGU6Y29yZS9hbmltcGFja1xyXG4gICAqL1xyXG4gIGFuaW0sXHJcbn07XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///333\n')}]).default})); \ No newline at end of file diff --git a/dist/host.three.js b/dist/host.three.js index 22833fd..64a8c7b 100644 --- a/dist/host.three.js +++ b/dist/host.three.js @@ -2,4 +2,4 @@ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. * SPDX-License-Identifier: MIT-0 */ -!function(e,n){"object"==typeof exports&&"object"==typeof module?module.exports=n():"function"==typeof define&&define.amd?define("HOST",[],n):"object"==typeof exports?exports.HOST=n():e.HOST=n()}("undefined"!=typeof self?self:"undefined"!=typeof global?global:this,(function(){return function(e){var n={};function t(c){if(n[c])return n[c].exports;var a=n[c]={i:c,l:!1,exports:{}};return e[c].call(a.exports,a,a.exports,t),a.l=!0,a.exports}return t.m=e,t.c=n,t.d=function(e,n,c){t.o(e,n)||Object.defineProperty(e,n,{enumerable:!0,get:c})},t.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},t.t=function(e,n){if(1&n&&(e=t(e)),8&n)return e;if(4&n&&"object"==typeof e&&e&&e.__esModule)return e;var c=Object.create(null);if(t.r(c),Object.defineProperty(c,"default",{enumerable:!0,value:e}),2&n&&"string"!=typeof e)for(var a in e)t.d(c,a,function(n){return e[n]}.bind(null,a));return c},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},t.p="",t(t.s=130)}([function(module,exports,__webpack_require__){eval("var global = __webpack_require__(2);\nvar core = __webpack_require__(18);\nvar hide = __webpack_require__(11);\nvar redefine = __webpack_require__(12);\nvar ctx = __webpack_require__(19);\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n var IS_FORCED = type & $export.F;\n var IS_GLOBAL = type & $export.G;\n var IS_STATIC = type & $export.S;\n var IS_PROTO = type & $export.P;\n var IS_BIND = type & $export.B;\n var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE];\n var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});\n var key, own, out, exp;\n if (IS_GLOBAL) source = name;\n for (key in source) {\n // contains in native\n own = !IS_FORCED && target && target[key] !== undefined;\n // export native or passed\n out = (own ? target : source)[key];\n // bind timers to global for call from export context\n exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n // extend global\n if (target) redefine(target, key, out, type & $export.U);\n // export\n if (exports[key] != out) hide(exports, key, exp);\n if (IS_PROTO && expProto[key] != out) expProto[key] = out;\n }\n};\nglobal.core = core;\n// type bitmap\n$export.F = 1; // forced\n$export.G = 2; // global\n$export.S = 4; // static\n$export.P = 8; // proto\n$export.B = 16; // bind\n$export.W = 32; // wrap\n$export.U = 64; // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZXhwb3J0LmpzPzVjYTEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsYUFBYSxtQkFBTyxDQUFDLENBQVc7QUFDaEMsV0FBVyxtQkFBTyxDQUFDLEVBQVM7QUFDNUIsV0FBVyxtQkFBTyxDQUFDLEVBQVM7QUFDNUIsZUFBZSxtQkFBTyxDQUFDLEVBQWE7QUFDcEMsVUFBVSxtQkFBTyxDQUFDLEVBQVE7QUFDMUI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0ZBQWtGLHVCQUF1QjtBQUN6RyxpRUFBaUU7QUFDakUsK0RBQStEO0FBQy9EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZCxjQUFjO0FBQ2QsY0FBYztBQUNkLGNBQWM7QUFDZCxlQUFlO0FBQ2YsZUFBZTtBQUNmLGVBQWU7QUFDZixnQkFBZ0I7QUFDaEIiLCJmaWxlIjoiMC5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xuXG52YXIgJGV4cG9ydCA9IGZ1bmN0aW9uICh0eXBlLCBuYW1lLCBzb3VyY2UpIHtcbiAgdmFyIElTX0ZPUkNFRCA9IHR5cGUgJiAkZXhwb3J0LkY7XG4gIHZhciBJU19HTE9CQUwgPSB0eXBlICYgJGV4cG9ydC5HO1xuICB2YXIgSVNfU1RBVElDID0gdHlwZSAmICRleHBvcnQuUztcbiAgdmFyIElTX1BST1RPID0gdHlwZSAmICRleHBvcnQuUDtcbiAgdmFyIElTX0JJTkQgPSB0eXBlICYgJGV4cG9ydC5CO1xuICB2YXIgdGFyZ2V0ID0gSVNfR0xPQkFMID8gZ2xvYmFsIDogSVNfU1RBVElDID8gZ2xvYmFsW25hbWVdIHx8IChnbG9iYWxbbmFtZV0gPSB7fSkgOiAoZ2xvYmFsW25hbWVdIHx8IHt9KVtQUk9UT1RZUEVdO1xuICB2YXIgZXhwb3J0cyA9IElTX0dMT0JBTCA/IGNvcmUgOiBjb3JlW25hbWVdIHx8IChjb3JlW25hbWVdID0ge30pO1xuICB2YXIgZXhwUHJvdG8gPSBleHBvcnRzW1BST1RPVFlQRV0gfHwgKGV4cG9ydHNbUFJPVE9UWVBFXSA9IHt9KTtcbiAgdmFyIGtleSwgb3duLCBvdXQsIGV4cDtcbiAgaWYgKElTX0dMT0JBTCkgc291cmNlID0gbmFtZTtcbiAgZm9yIChrZXkgaW4gc291cmNlKSB7XG4gICAgLy8gY29udGFpbnMgaW4gbmF0aXZlXG4gICAgb3duID0gIUlTX0ZPUkNFRCAmJiB0YXJnZXQgJiYgdGFyZ2V0W2tleV0gIT09IHVuZGVmaW5lZDtcbiAgICAvLyBleHBvcnQgbmF0aXZlIG9yIHBhc3NlZFxuICAgIG91dCA9IChvd24gPyB0YXJnZXQgOiBzb3VyY2UpW2tleV07XG4gICAgLy8gYmluZCB0aW1lcnMgdG8gZ2xvYmFsIGZvciBjYWxsIGZyb20gZXhwb3J0IGNvbnRleHRcbiAgICBleHAgPSBJU19CSU5EICYmIG93biA/IGN0eChvdXQsIGdsb2JhbCkgOiBJU19QUk9UTyAmJiB0eXBlb2Ygb3V0ID09ICdmdW5jdGlvbicgPyBjdHgoRnVuY3Rpb24uY2FsbCwgb3V0KSA6IG91dDtcbiAgICAvLyBleHRlbmQgZ2xvYmFsXG4gICAgaWYgKHRhcmdldCkgcmVkZWZpbmUodGFyZ2V0LCBrZXksIG91dCwgdHlwZSAmICRleHBvcnQuVSk7XG4gICAgLy8gZXhwb3J0XG4gICAgaWYgKGV4cG9ydHNba2V5XSAhPSBvdXQpIGhpZGUoZXhwb3J0cywga2V5LCBleHApO1xuICAgIGlmIChJU19QUk9UTyAmJiBleHBQcm90b1trZXldICE9IG91dCkgZXhwUHJvdG9ba2V5XSA9IG91dDtcbiAgfVxufTtcbmdsb2JhbC5jb3JlID0gY29yZTtcbi8vIHR5cGUgYml0bWFwXG4kZXhwb3J0LkYgPSAxOyAgIC8vIGZvcmNlZFxuJGV4cG9ydC5HID0gMjsgICAvLyBnbG9iYWxcbiRleHBvcnQuUyA9IDQ7ICAgLy8gc3RhdGljXG4kZXhwb3J0LlAgPSA4OyAgIC8vIHByb3RvXG4kZXhwb3J0LkIgPSAxNjsgIC8vIGJpbmRcbiRleHBvcnQuVyA9IDMyOyAgLy8gd3JhcFxuJGV4cG9ydC5VID0gNjQ7ICAvLyBzYWZlXG4kZXhwb3J0LlIgPSAxMjg7IC8vIHJlYWwgcHJvdG8gbWV0aG9kIGZvciBgbGlicmFyeWBcbm1vZHVsZS5leHBvcnRzID0gJGV4cG9ydDtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///0\n")},function(module,exports,__webpack_require__){eval("var isObject = __webpack_require__(4);\nmodule.exports = function (it) {\n if (!isObject(it)) throw TypeError(it + ' is not an object!');\n return it;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYW4tb2JqZWN0LmpzP2NiN2MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckM7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMS5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKCFpc09iamVjdChpdCkpIHRocm93IFR5cGVFcnJvcihpdCArICcgaXMgbm90IGFuIG9iamVjdCEnKTtcbiAgcmV0dXJuIGl0O1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///1\n")},function(module,exports){eval("// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n ? window : typeof self != 'undefined' && self.Math == Math ? self\n // eslint-disable-next-line no-new-func\n : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZ2xvYmFsLmpzPzc3MjYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlDQUF5QyIsImZpbGUiOiIyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzg2I2lzc3VlY29tbWVudC0xMTU3NTkwMjhcbnZhciBnbG9iYWwgPSBtb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiB3aW5kb3cgIT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93Lk1hdGggPT0gTWF0aFxuICA/IHdpbmRvdyA6IHR5cGVvZiBzZWxmICE9ICd1bmRlZmluZWQnICYmIHNlbGYuTWF0aCA9PSBNYXRoID8gc2VsZlxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmNcbiAgOiBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuaWYgKHR5cGVvZiBfX2cgPT0gJ251bWJlcicpIF9fZyA9IGdsb2JhbDsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bmRlZlxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2\n")},function(module,exports){eval("module.exports = function (exec) {\n try {\n return !!exec();\n } catch (e) {\n return true;\n }\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZmFpbHMuanM/NzllNSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBIiwiZmlsZSI6IjMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICEhZXhlYygpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///3\n")},function(module,exports){eval("module.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtb2JqZWN0LmpzP2QzZjQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBIiwiZmlsZSI6IjQuanMiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09PSAnb2JqZWN0JyA/IGl0ICE9PSBudWxsIDogdHlwZW9mIGl0ID09PSAnZnVuY3Rpb24nO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4\n")},function(module,exports,__webpack_require__){eval("var store = __webpack_require__(47)('wks');\nvar uid = __webpack_require__(33);\nvar Symbol = __webpack_require__(2).Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n return store[name] || (store[name] =\n USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fd2tzLmpzPzJiNGMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSxtQkFBTyxDQUFDLEVBQVc7QUFDL0IsVUFBVSxtQkFBTyxDQUFDLEVBQVE7QUFDMUIsYUFBYSxtQkFBTyxDQUFDLENBQVc7QUFDaEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiNS5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBzdG9yZSA9IHJlcXVpcmUoJy4vX3NoYXJlZCcpKCd3a3MnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuL191aWQnKTtcbnZhciBTeW1ib2wgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5TeW1ib2w7XG52YXIgVVNFX1NZTUJPTCA9IHR5cGVvZiBTeW1ib2wgPT0gJ2Z1bmN0aW9uJztcblxudmFyICRleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZSkge1xuICByZXR1cm4gc3RvcmVbbmFtZV0gfHwgKHN0b3JlW25hbWVdID1cbiAgICBVU0VfU1lNQk9MICYmIFN5bWJvbFtuYW1lXSB8fCAoVVNFX1NZTUJPTCA/IFN5bWJvbCA6IHVpZCkoJ1N5bWJvbC4nICsgbmFtZSkpO1xufTtcblxuJGV4cG9ydHMuc3RvcmUgPSBzdG9yZTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///5\n")},function(module,exports,__webpack_require__){eval("// 7.1.15 ToLength\nvar toInteger = __webpack_require__(21);\nvar min = Math.min;\nmodule.exports = function (it) {\n return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8tbGVuZ3RoLmpzPzlkZWYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDO0FBQ0E7QUFDQSwyREFBMkQ7QUFDM0QiLCJmaWxlIjoiNi5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDcuMS4xNSBUb0xlbmd0aFxudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciBtaW4gPSBNYXRoLm1pbjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCA+IDAgPyBtaW4odG9JbnRlZ2VyKGl0KSwgMHgxZmZmZmZmZmZmZmZmZikgOiAwOyAvLyBwb3coMiwgNTMpIC0gMSA9PSA5MDA3MTk5MjU0NzQwOTkxXG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///6\n")},function(module,exports,__webpack_require__){eval("// Thank's IE8 for his funny defineProperty\nmodule.exports = !__webpack_require__(3)(function () {\n return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZGVzY3JpcHRvcnMuanM/OWUxZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGtCQUFrQixtQkFBTyxDQUFDLENBQVU7QUFDcEMsaUNBQWlDLFFBQVEsbUJBQW1CLFVBQVUsRUFBRSxFQUFFO0FBQzFFLENBQUMiLCJmaWxlIjoiNy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIFRoYW5rJ3MgSUU4IGZvciBoaXMgZnVubnkgZGVmaW5lUHJvcGVydHlcbm1vZHVsZS5leHBvcnRzID0gIXJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAnYScsIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9IH0pLmEgIT0gNztcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7\n")},function(module,exports,__webpack_require__){eval("var anObject = __webpack_require__(1);\nvar IE8_DOM_DEFINE = __webpack_require__(94);\nvar toPrimitive = __webpack_require__(23);\nvar dP = Object.defineProperty;\n\nexports.f = __webpack_require__(7) ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return dP(O, P, Attributes);\n } catch (e) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWRwLmpzPzg2Y2MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMscUJBQXFCLG1CQUFPLENBQUMsRUFBbUI7QUFDaEQsa0JBQWtCLG1CQUFPLENBQUMsRUFBaUI7QUFDM0M7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLENBQWdCO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHLFlBQVk7QUFDZjtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiI4LmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuL19pZTgtZG9tLWRlZmluZScpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG52YXIgZFAgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG5cbmV4cG9ydHMuZiA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICBQID0gdG9QcmltaXRpdmUoUCwgdHJ1ZSk7XG4gIGFuT2JqZWN0KEF0dHJpYnV0ZXMpO1xuICBpZiAoSUU4X0RPTV9ERUZJTkUpIHRyeSB7XG4gICAgcmV0dXJuIGRQKE8sIFAsIEF0dHJpYnV0ZXMpO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKCdnZXQnIGluIEF0dHJpYnV0ZXMgfHwgJ3NldCcgaW4gQXR0cmlidXRlcykgdGhyb3cgVHlwZUVycm9yKCdBY2Nlc3NvcnMgbm90IHN1cHBvcnRlZCEnKTtcbiAgaWYgKCd2YWx1ZScgaW4gQXR0cmlidXRlcykgT1tQXSA9IEF0dHJpYnV0ZXMudmFsdWU7XG4gIHJldHVybiBPO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///8\n")},function(module,exports,__webpack_require__){eval("// 7.1.13 ToObject(argument)\nvar defined = __webpack_require__(24);\nmodule.exports = function (it) {\n return Object(defined(it));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8tb2JqZWN0LmpzPzRiZjgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsRUFBWTtBQUNsQztBQUNBO0FBQ0EiLCJmaWxlIjoiOS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDcuMS4xMyBUb09iamVjdChhcmd1bWVudClcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIE9iamVjdChkZWZpbmVkKGl0KSk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9\n")},function(module,exports){eval("module.exports = function (it) {\n if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n return it;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYS1mdW5jdGlvbi5qcz9kOGU4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjEwLmpzIiwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKHR5cGVvZiBpdCAhPSAnZnVuY3Rpb24nKSB0aHJvdyBUeXBlRXJyb3IoaXQgKyAnIGlzIG5vdCBhIGZ1bmN0aW9uIScpO1xuICByZXR1cm4gaXQ7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///10\n")},function(module,exports,__webpack_require__){eval("var dP = __webpack_require__(8);\nvar createDesc = __webpack_require__(32);\nmodule.exports = __webpack_require__(7) ? function (object, key, value) {\n return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faGlkZS5qcz8zMmU5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFNBQVMsbUJBQU8sQ0FBQyxDQUFjO0FBQy9CLGlCQUFpQixtQkFBTyxDQUFDLEVBQWtCO0FBQzNDLGlCQUFpQixtQkFBTyxDQUFDLENBQWdCO0FBQ3pDO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSIsImZpbGUiOiIxMS5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xudmFyIGNyZWF0ZURlc2MgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIHJldHVybiBkUC5mKG9iamVjdCwga2V5LCBjcmVhdGVEZXNjKDEsIHZhbHVlKSk7XG59IDogZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICBvYmplY3Rba2V5XSA9IHZhbHVlO1xuICByZXR1cm4gb2JqZWN0O1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///11\n")},function(module,exports,__webpack_require__){eval("var global = __webpack_require__(2);\nvar hide = __webpack_require__(11);\nvar has = __webpack_require__(14);\nvar SRC = __webpack_require__(33)('src');\nvar $toString = __webpack_require__(134);\nvar TO_STRING = 'toString';\nvar TPL = ('' + $toString).split(TO_STRING);\n\n__webpack_require__(18).inspectSource = function (it) {\n return $toString.call(it);\n};\n\n(module.exports = function (O, key, val, safe) {\n var isFunction = typeof val == 'function';\n if (isFunction) has(val, 'name') || hide(val, 'name', key);\n if (O[key] === val) return;\n if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));\n if (O === global) {\n O[key] = val;\n } else if (!safe) {\n delete O[key];\n hide(O, key, val);\n } else if (O[key]) {\n O[key] = val;\n } else {\n hide(O, key, val);\n }\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, TO_STRING, function toString() {\n return typeof this == 'function' && this[SRC] || $toString.call(this);\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcmVkZWZpbmUuanM/MmFiYSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxhQUFhLG1CQUFPLENBQUMsQ0FBVztBQUNoQyxXQUFXLG1CQUFPLENBQUMsRUFBUztBQUM1QixVQUFVLG1CQUFPLENBQUMsRUFBUTtBQUMxQixVQUFVLG1CQUFPLENBQUMsRUFBUTtBQUMxQixnQkFBZ0IsbUJBQU8sQ0FBQyxHQUF1QjtBQUMvQztBQUNBOztBQUVBLG1CQUFPLENBQUMsRUFBUztBQUNqQjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0EsQ0FBQyIsImZpbGUiOiIxMi5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIFNSQyA9IHJlcXVpcmUoJy4vX3VpZCcpKCdzcmMnKTtcbnZhciAkdG9TdHJpbmcgPSByZXF1aXJlKCcuL19mdW5jdGlvbi10by1zdHJpbmcnKTtcbnZhciBUT19TVFJJTkcgPSAndG9TdHJpbmcnO1xudmFyIFRQTCA9ICgnJyArICR0b1N0cmluZykuc3BsaXQoVE9fU1RSSU5HKTtcblxucmVxdWlyZSgnLi9fY29yZScpLmluc3BlY3RTb3VyY2UgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuICR0b1N0cmluZy5jYWxsKGl0KTtcbn07XG5cbihtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBrZXksIHZhbCwgc2FmZSkge1xuICB2YXIgaXNGdW5jdGlvbiA9IHR5cGVvZiB2YWwgPT0gJ2Z1bmN0aW9uJztcbiAgaWYgKGlzRnVuY3Rpb24pIGhhcyh2YWwsICduYW1lJykgfHwgaGlkZSh2YWwsICduYW1lJywga2V5KTtcbiAgaWYgKE9ba2V5XSA9PT0gdmFsKSByZXR1cm47XG4gIGlmIChpc0Z1bmN0aW9uKSBoYXModmFsLCBTUkMpIHx8IGhpZGUodmFsLCBTUkMsIE9ba2V5XSA/ICcnICsgT1trZXldIDogVFBMLmpvaW4oU3RyaW5nKGtleSkpKTtcbiAgaWYgKE8gPT09IGdsb2JhbCkge1xuICAgIE9ba2V5XSA9IHZhbDtcbiAgfSBlbHNlIGlmICghc2FmZSkge1xuICAgIGRlbGV0ZSBPW2tleV07XG4gICAgaGlkZShPLCBrZXksIHZhbCk7XG4gIH0gZWxzZSBpZiAoT1trZXldKSB7XG4gICAgT1trZXldID0gdmFsO1xuICB9IGVsc2Uge1xuICAgIGhpZGUoTywga2V5LCB2YWwpO1xuICB9XG4vLyBhZGQgZmFrZSBGdW5jdGlvbiN0b1N0cmluZyBmb3IgY29ycmVjdCB3b3JrIHdyYXBwZWQgbWV0aG9kcyAvIGNvbnN0cnVjdG9ycyB3aXRoIG1ldGhvZHMgbGlrZSBMb0Rhc2ggaXNOYXRpdmVcbn0pKEZ1bmN0aW9uLnByb3RvdHlwZSwgVE9fU1RSSU5HLCBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgcmV0dXJuIHR5cGVvZiB0aGlzID09ICdmdW5jdGlvbicgJiYgdGhpc1tTUkNdIHx8ICR0b1N0cmluZy5jYWxsKHRoaXMpO1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///12\n")},function(module,exports,__webpack_require__){eval("var $export = __webpack_require__(0);\nvar fails = __webpack_require__(3);\nvar defined = __webpack_require__(24);\nvar quot = /\"/g;\n// B.2.3.2.1 CreateHTML(string, tag, attribute, value)\nvar createHTML = function (string, tag, attribute, value) {\n var S = String(defined(string));\n var p1 = '<' + tag;\n if (attribute !== '') p1 += ' ' + attribute + '=\"' + String(value).replace(quot, '"') + '\"';\n return p1 + '>' + S + '';\n};\nmodule.exports = function (NAME, exec) {\n var O = {};\n O[NAME] = exec(createHTML);\n $export($export.P + $export.F * fails(function () {\n var test = ''[NAME]('\"');\n return test !== test.toLowerCase() || test.split('\"').length > 3;\n }), 'String', O);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLWh0bWwuanM/Mzg2YiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxZQUFZLG1CQUFPLENBQUMsQ0FBVTtBQUM5QixjQUFjLG1CQUFPLENBQUMsRUFBWTtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEZBQTBGO0FBQzFGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0giLCJmaWxlIjoiMTMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xudmFyIHF1b3QgPSAvXCIvZztcbi8vIEIuMi4zLjIuMSBDcmVhdGVIVE1MKHN0cmluZywgdGFnLCBhdHRyaWJ1dGUsIHZhbHVlKVxudmFyIGNyZWF0ZUhUTUwgPSBmdW5jdGlvbiAoc3RyaW5nLCB0YWcsIGF0dHJpYnV0ZSwgdmFsdWUpIHtcbiAgdmFyIFMgPSBTdHJpbmcoZGVmaW5lZChzdHJpbmcpKTtcbiAgdmFyIHAxID0gJzwnICsgdGFnO1xuICBpZiAoYXR0cmlidXRlICE9PSAnJykgcDEgKz0gJyAnICsgYXR0cmlidXRlICsgJz1cIicgKyBTdHJpbmcodmFsdWUpLnJlcGxhY2UocXVvdCwgJyZxdW90OycpICsgJ1wiJztcbiAgcmV0dXJuIHAxICsgJz4nICsgUyArICc8LycgKyB0YWcgKyAnPic7XG59O1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTkFNRSwgZXhlYykge1xuICB2YXIgTyA9IHt9O1xuICBPW05BTUVdID0gZXhlYyhjcmVhdGVIVE1MKTtcbiAgJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHRlc3QgPSAnJ1tOQU1FXSgnXCInKTtcbiAgICByZXR1cm4gdGVzdCAhPT0gdGVzdC50b0xvd2VyQ2FzZSgpIHx8IHRlc3Quc3BsaXQoJ1wiJykubGVuZ3RoID4gMztcbiAgfSksICdTdHJpbmcnLCBPKTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///13\n")},function(module,exports){eval("var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faGFzLmpzPzY5YTgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdUJBQXVCO0FBQ3ZCO0FBQ0E7QUFDQSIsImZpbGUiOiIxNC5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBoYXNPd25Qcm9wZXJ0eSA9IHt9Lmhhc093blByb3BlcnR5O1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIGtleSkge1xuICByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbChpdCwga2V5KTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///14\n")},function(module,exports,__webpack_require__){eval("// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = __webpack_require__(48);\nvar defined = __webpack_require__(24);\nmodule.exports = function (it) {\n return IObject(defined(it));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8taW9iamVjdC5qcz82ODIxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLEVBQVk7QUFDbEMsY0FBYyxtQkFBTyxDQUFDLEVBQVk7QUFDbEM7QUFDQTtBQUNBIiwiZmlsZSI6IjE1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gdG8gaW5kZXhlZCBvYmplY3QsIHRvT2JqZWN0IHdpdGggZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBzdHJpbmdzXG52YXIgSU9iamVjdCA9IHJlcXVpcmUoJy4vX2lvYmplY3QnKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIElPYmplY3QoZGVmaW5lZChpdCkpO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///15\n")},function(module,exports,__webpack_require__){eval("var pIE = __webpack_require__(49);\nvar createDesc = __webpack_require__(32);\nvar toIObject = __webpack_require__(15);\nvar toPrimitive = __webpack_require__(23);\nvar has = __webpack_require__(14);\nvar IE8_DOM_DEFINE = __webpack_require__(94);\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nexports.f = __webpack_require__(7) ? gOPD : function getOwnPropertyDescriptor(O, P) {\n O = toIObject(O);\n P = toPrimitive(P, true);\n if (IE8_DOM_DEFINE) try {\n return gOPD(O, P);\n } catch (e) { /* empty */ }\n if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdvcGQuanM/MTFlOSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxVQUFVLG1CQUFPLENBQUMsRUFBZTtBQUNqQyxpQkFBaUIsbUJBQU8sQ0FBQyxFQUFrQjtBQUMzQyxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDLGtCQUFrQixtQkFBTyxDQUFDLEVBQWlCO0FBQzNDLFVBQVUsbUJBQU8sQ0FBQyxFQUFRO0FBQzFCLHFCQUFxQixtQkFBTyxDQUFDLEVBQW1CO0FBQ2hEOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxDQUFnQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUcsWUFBWTtBQUNmO0FBQ0EiLCJmaWxlIjoiMTYuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgcElFID0gcmVxdWlyZSgnLi9fb2JqZWN0LXBpZScpO1xudmFyIGNyZWF0ZURlc2MgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuL19pZTgtZG9tLWRlZmluZScpO1xudmFyIGdPUEQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG5leHBvcnRzLmYgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gZ09QRCA6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKSB7XG4gIE8gPSB0b0lPYmplY3QoTyk7XG4gIFAgPSB0b1ByaW1pdGl2ZShQLCB0cnVlKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiBnT1BEKE8sIFApO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKGhhcyhPLCBQKSkgcmV0dXJuIGNyZWF0ZURlc2MoIXBJRS5mLmNhbGwoTywgUCksIE9bUF0pO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///16\n")},function(module,exports,__webpack_require__){eval("// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = __webpack_require__(14);\nvar toObject = __webpack_require__(9);\nvar IE_PROTO = __webpack_require__(68)('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n O = toObject(O);\n if (has(O, IE_PROTO)) return O[IE_PROTO];\n if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n return O.constructor.prototype;\n } return O instanceof Object ? ObjectProto : null;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdwby5qcz8zOGZkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsVUFBVSxtQkFBTyxDQUFDLEVBQVE7QUFDMUIsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZUFBZSxtQkFBTyxDQUFDLEVBQWU7QUFDdEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCIsImZpbGUiOiIxNy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDE5LjEuMi45IC8gMTUuMi4zLjIgT2JqZWN0LmdldFByb3RvdHlwZU9mKE8pXG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciBJRV9QUk9UTyA9IHJlcXVpcmUoJy4vX3NoYXJlZC1rZXknKSgnSUVfUFJPVE8nKTtcbnZhciBPYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmdldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIChPKSB7XG4gIE8gPSB0b09iamVjdChPKTtcbiAgaWYgKGhhcyhPLCBJRV9QUk9UTykpIHJldHVybiBPW0lFX1BST1RPXTtcbiAgaWYgKHR5cGVvZiBPLmNvbnN0cnVjdG9yID09ICdmdW5jdGlvbicgJiYgTyBpbnN0YW5jZW9mIE8uY29uc3RydWN0b3IpIHtcbiAgICByZXR1cm4gTy5jb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG4gIH0gcmV0dXJuIE8gaW5zdGFuY2VvZiBPYmplY3QgPyBPYmplY3RQcm90byA6IG51bGw7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///17\n")},function(module,exports){eval("var core = module.exports = { version: '2.6.12' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY29yZS5qcz84Mzc4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDZCQUE2QjtBQUM3Qix1Q0FBdUMiLCJmaWxlIjoiMTguanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgY29yZSA9IG1vZHVsZS5leHBvcnRzID0geyB2ZXJzaW9uOiAnMi42LjEyJyB9O1xuaWYgKHR5cGVvZiBfX2UgPT0gJ251bWJlcicpIF9fZSA9IGNvcmU7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///18\n")},function(module,exports,__webpack_require__){eval("// optional / simple context binding\nvar aFunction = __webpack_require__(10);\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY3R4LmpzPzliNDMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIxOS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIG9wdGlvbmFsIC8gc2ltcGxlIGNvbnRleHQgYmluZGluZ1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGZuLCB0aGF0LCBsZW5ndGgpIHtcbiAgYUZ1bmN0aW9uKGZuKTtcbiAgaWYgKHRoYXQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGZuO1xuICBzd2l0Y2ggKGxlbmd0aCkge1xuICAgIGNhc2UgMTogcmV0dXJuIGZ1bmN0aW9uIChhKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhKTtcbiAgICB9O1xuICAgIGNhc2UgMjogcmV0dXJuIGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhLCBiKTtcbiAgICB9O1xuICAgIGNhc2UgMzogcmV0dXJuIGZ1bmN0aW9uIChhLCBiLCBjKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhLCBiLCBjKTtcbiAgICB9O1xuICB9XG4gIHJldHVybiBmdW5jdGlvbiAoLyogLi4uYXJncyAqLykge1xuICAgIHJldHVybiBmbi5hcHBseSh0aGF0LCBhcmd1bWVudHMpO1xuICB9O1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///19\n")},function(module,exports){eval("var toString = {}.toString;\n\nmodule.exports = function (it) {\n return toString.call(it).slice(8, -1);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY29mLmpzPzJkOTUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsaUJBQWlCOztBQUVqQjtBQUNBO0FBQ0EiLCJmaWxlIjoiMjAuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgdG9TdHJpbmcgPSB7fS50b1N0cmluZztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwoaXQpLnNsaWNlKDgsIC0xKTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///20\n")},function(module,exports){eval("// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8taW50ZWdlci5qcz80NTg4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIyMS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDcuMS40IFRvSW50ZWdlclxudmFyIGNlaWwgPSBNYXRoLmNlaWw7XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGlzTmFOKGl0ID0gK2l0KSA/IDAgOiAoaXQgPiAwID8gZmxvb3IgOiBjZWlsKShpdCk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///21\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar fails = __webpack_require__(3);\n\nmodule.exports = function (method, arg) {\n return !!method && fails(function () {\n // eslint-disable-next-line no-useless-call\n arg ? method.call(null, function () { /* empty */ }, 1) : method.call(null);\n });\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaWN0LW1ldGhvZC5qcz8yZjIxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsWUFBWSxtQkFBTyxDQUFDLENBQVU7O0FBRTlCO0FBQ0E7QUFDQTtBQUNBLHlDQUF5QyxjQUFjO0FBQ3ZELEdBQUc7QUFDSCIsImZpbGUiOiIyMi5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG1ldGhvZCwgYXJnKSB7XG4gIHJldHVybiAhIW1ldGhvZCAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZWxlc3MtY2FsbFxuICAgIGFyZyA/IG1ldGhvZC5jYWxsKG51bGwsIGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSwgMSkgOiBtZXRob2QuY2FsbChudWxsKTtcbiAgfSk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///22\n")},function(module,exports,__webpack_require__){eval("// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = __webpack_require__(4);\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n if (!isObject(it)) return it;\n var fn, val;\n if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8tcHJpbWl0aXZlLmpzPzZhOTkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIyMy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDcuMS4xIFRvUHJpbWl0aXZlKGlucHV0IFssIFByZWZlcnJlZFR5cGVdKVxudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG4vLyBpbnN0ZWFkIG9mIHRoZSBFUzYgc3BlYyB2ZXJzaW9uLCB3ZSBkaWRuJ3QgaW1wbGVtZW50IEBAdG9QcmltaXRpdmUgY2FzZVxuLy8gYW5kIHRoZSBzZWNvbmQgYXJndW1lbnQgLSBmbGFnIC0gcHJlZmVycmVkIHR5cGUgaXMgYSBzdHJpbmdcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBTKSB7XG4gIGlmICghaXNPYmplY3QoaXQpKSByZXR1cm4gaXQ7XG4gIHZhciBmbiwgdmFsO1xuICBpZiAoUyAmJiB0eXBlb2YgKGZuID0gaXQudG9TdHJpbmcpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaXQpKSkgcmV0dXJuIHZhbDtcbiAgaWYgKHR5cGVvZiAoZm4gPSBpdC52YWx1ZU9mKSA9PSAnZnVuY3Rpb24nICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGl0KSkpIHJldHVybiB2YWw7XG4gIGlmICghUyAmJiB0eXBlb2YgKGZuID0gaXQudG9TdHJpbmcpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaXQpKSkgcmV0dXJuIHZhbDtcbiAgdGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///23\n")},function(module,exports){eval('// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError("Can\'t call method on " + it);\n return it;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZGVmaW5lZC5qcz9iZTEzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMjQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyA3LjIuMSBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGFyZ3VtZW50KVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGl0ID09IHVuZGVmaW5lZCkgdGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gIFwiICsgaXQpO1xuICByZXR1cm4gaXQ7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///24\n')},function(module,exports,__webpack_require__){eval("// most Object methods by ES6 should accept primitives\nvar $export = __webpack_require__(0);\nvar core = __webpack_require__(18);\nvar fails = __webpack_require__(3);\nmodule.exports = function (KEY, exec) {\n var fn = (core.Object || {})[KEY] || Object[KEY];\n var exp = {};\n exp[KEY] = exec(fn);\n $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LXNhcC5qcz81ZWRhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsV0FBVyxtQkFBTyxDQUFDLEVBQVM7QUFDNUIsWUFBWSxtQkFBTyxDQUFDLENBQVU7QUFDOUI7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBLHFEQUFxRCxPQUFPLEVBQUU7QUFDOUQiLCJmaWxlIjoiMjUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBtb3N0IE9iamVjdCBtZXRob2RzIGJ5IEVTNiBzaG91bGQgYWNjZXB0IHByaW1pdGl2ZXNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgY29yZSA9IHJlcXVpcmUoJy4vX2NvcmUnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChLRVksIGV4ZWMpIHtcbiAgdmFyIGZuID0gKGNvcmUuT2JqZWN0IHx8IHt9KVtLRVldIHx8IE9iamVjdFtLRVldO1xuICB2YXIgZXhwID0ge307XG4gIGV4cFtLRVldID0gZXhlYyhmbik7XG4gICRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogZmFpbHMoZnVuY3Rpb24gKCkgeyBmbigxKTsgfSksICdPYmplY3QnLCBleHApO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///25\n")},function(module,exports,__webpack_require__){eval("// 0 -> Array#forEach\n// 1 -> Array#map\n// 2 -> Array#filter\n// 3 -> Array#some\n// 4 -> Array#every\n// 5 -> Array#find\n// 6 -> Array#findIndex\nvar ctx = __webpack_require__(19);\nvar IObject = __webpack_require__(48);\nvar toObject = __webpack_require__(9);\nvar toLength = __webpack_require__(6);\nvar asc = __webpack_require__(84);\nmodule.exports = function (TYPE, $create) {\n var IS_MAP = TYPE == 1;\n var IS_FILTER = TYPE == 2;\n var IS_SOME = TYPE == 3;\n var IS_EVERY = TYPE == 4;\n var IS_FIND_INDEX = TYPE == 6;\n var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n var create = $create || asc;\n return function ($this, callbackfn, that) {\n var O = toObject($this);\n var self = IObject(O);\n var f = ctx(callbackfn, that, 3);\n var length = toLength(self.length);\n var index = 0;\n var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;\n var val, res;\n for (;length > index; index++) if (NO_HOLES || index in self) {\n val = self[index];\n res = f(val, index, O);\n if (TYPE) {\n if (IS_MAP) result[index] = res; // map\n else if (res) switch (TYPE) {\n case 3: return true; // some\n case 5: return val; // find\n case 6: return index; // findIndex\n case 2: result.push(val); // filter\n } else if (IS_EVERY) return false; // every\n }\n }\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;\n };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktbWV0aG9kcy5qcz8wYTQ5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVSxtQkFBTyxDQUFDLEVBQVE7QUFDMUIsY0FBYyxtQkFBTyxDQUFDLEVBQVk7QUFDbEMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsVUFBVSxtQkFBTyxDQUFDLEVBQXlCO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVSxlQUFlO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBLHdDQUF3QztBQUN4QztBQUNBLDhCQUE4QjtBQUM5Qiw2QkFBNkI7QUFDN0IsK0JBQStCO0FBQy9CLG1DQUFtQztBQUNuQyxTQUFTLGlDQUFpQztBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjI2LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMCAtPiBBcnJheSNmb3JFYWNoXG4vLyAxIC0+IEFycmF5I21hcFxuLy8gMiAtPiBBcnJheSNmaWx0ZXJcbi8vIDMgLT4gQXJyYXkjc29tZVxuLy8gNCAtPiBBcnJheSNldmVyeVxuLy8gNSAtPiBBcnJheSNmaW5kXG4vLyA2IC0+IEFycmF5I2ZpbmRJbmRleFxudmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIElPYmplY3QgPSByZXF1aXJlKCcuL19pb2JqZWN0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGFzYyA9IHJlcXVpcmUoJy4vX2FycmF5LXNwZWNpZXMtY3JlYXRlJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChUWVBFLCAkY3JlYXRlKSB7XG4gIHZhciBJU19NQVAgPSBUWVBFID09IDE7XG4gIHZhciBJU19GSUxURVIgPSBUWVBFID09IDI7XG4gIHZhciBJU19TT01FID0gVFlQRSA9PSAzO1xuICB2YXIgSVNfRVZFUlkgPSBUWVBFID09IDQ7XG4gIHZhciBJU19GSU5EX0lOREVYID0gVFlQRSA9PSA2O1xuICB2YXIgTk9fSE9MRVMgPSBUWVBFID09IDUgfHwgSVNfRklORF9JTkRFWDtcbiAgdmFyIGNyZWF0ZSA9ICRjcmVhdGUgfHwgYXNjO1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBjYWxsYmFja2ZuLCB0aGF0KSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCgkdGhpcyk7XG4gICAgdmFyIHNlbGYgPSBJT2JqZWN0KE8pO1xuICAgIHZhciBmID0gY3R4KGNhbGxiYWNrZm4sIHRoYXQsIDMpO1xuICAgIHZhciBsZW5ndGggPSB0b0xlbmd0aChzZWxmLmxlbmd0aCk7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgcmVzdWx0ID0gSVNfTUFQID8gY3JlYXRlKCR0aGlzLCBsZW5ndGgpIDogSVNfRklMVEVSID8gY3JlYXRlKCR0aGlzLCAwKSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgdmFsLCByZXM7XG4gICAgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIGlmIChOT19IT0xFUyB8fCBpbmRleCBpbiBzZWxmKSB7XG4gICAgICB2YWwgPSBzZWxmW2luZGV4XTtcbiAgICAgIHJlcyA9IGYodmFsLCBpbmRleCwgTyk7XG4gICAgICBpZiAoVFlQRSkge1xuICAgICAgICBpZiAoSVNfTUFQKSByZXN1bHRbaW5kZXhdID0gcmVzOyAgIC8vIG1hcFxuICAgICAgICBlbHNlIGlmIChyZXMpIHN3aXRjaCAoVFlQRSkge1xuICAgICAgICAgIGNhc2UgMzogcmV0dXJuIHRydWU7ICAgICAgICAgICAgIC8vIHNvbWVcbiAgICAgICAgICBjYXNlIDU6IHJldHVybiB2YWw7ICAgICAgICAgICAgICAvLyBmaW5kXG4gICAgICAgICAgY2FzZSA2OiByZXR1cm4gaW5kZXg7ICAgICAgICAgICAgLy8gZmluZEluZGV4XG4gICAgICAgICAgY2FzZSAyOiByZXN1bHQucHVzaCh2YWwpOyAgICAgICAgLy8gZmlsdGVyXG4gICAgICAgIH0gZWxzZSBpZiAoSVNfRVZFUlkpIHJldHVybiBmYWxzZTsgLy8gZXZlcnlcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIElTX0ZJTkRfSU5ERVggPyAtMSA6IElTX1NPTUUgfHwgSVNfRVZFUlkgPyBJU19FVkVSWSA6IHJlc3VsdDtcbiAgfTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///26\n")},function(module,exports,__webpack_require__){"use strict";eval("\nif (__webpack_require__(7)) {\n var LIBRARY = __webpack_require__(29);\n var global = __webpack_require__(2);\n var fails = __webpack_require__(3);\n var $export = __webpack_require__(0);\n var $typed = __webpack_require__(62);\n var $buffer = __webpack_require__(92);\n var ctx = __webpack_require__(19);\n var anInstance = __webpack_require__(39);\n var propertyDesc = __webpack_require__(32);\n var hide = __webpack_require__(11);\n var redefineAll = __webpack_require__(41);\n var toInteger = __webpack_require__(21);\n var toLength = __webpack_require__(6);\n var toIndex = __webpack_require__(122);\n var toAbsoluteIndex = __webpack_require__(35);\n var toPrimitive = __webpack_require__(23);\n var has = __webpack_require__(14);\n var classof = __webpack_require__(44);\n var isObject = __webpack_require__(4);\n var toObject = __webpack_require__(9);\n var isArrayIter = __webpack_require__(81);\n var create = __webpack_require__(36);\n var getPrototypeOf = __webpack_require__(17);\n var gOPN = __webpack_require__(37).f;\n var getIterFn = __webpack_require__(83);\n var uid = __webpack_require__(33);\n var wks = __webpack_require__(5);\n var createArrayMethod = __webpack_require__(26);\n var createArrayIncludes = __webpack_require__(52);\n var speciesConstructor = __webpack_require__(51);\n var ArrayIterators = __webpack_require__(86);\n var Iterators = __webpack_require__(46);\n var $iterDetect = __webpack_require__(57);\n var setSpecies = __webpack_require__(38);\n var arrayFill = __webpack_require__(85);\n var arrayCopyWithin = __webpack_require__(111);\n var $DP = __webpack_require__(8);\n var $GOPD = __webpack_require__(16);\n var dP = $DP.f;\n var gOPD = $GOPD.f;\n var RangeError = global.RangeError;\n var TypeError = global.TypeError;\n var Uint8Array = global.Uint8Array;\n var ARRAY_BUFFER = 'ArrayBuffer';\n var SHARED_BUFFER = 'Shared' + ARRAY_BUFFER;\n var BYTES_PER_ELEMENT = 'BYTES_PER_ELEMENT';\n var PROTOTYPE = 'prototype';\n var ArrayProto = Array[PROTOTYPE];\n var $ArrayBuffer = $buffer.ArrayBuffer;\n var $DataView = $buffer.DataView;\n var arrayForEach = createArrayMethod(0);\n var arrayFilter = createArrayMethod(2);\n var arraySome = createArrayMethod(3);\n var arrayEvery = createArrayMethod(4);\n var arrayFind = createArrayMethod(5);\n var arrayFindIndex = createArrayMethod(6);\n var arrayIncludes = createArrayIncludes(true);\n var arrayIndexOf = createArrayIncludes(false);\n var arrayValues = ArrayIterators.values;\n var arrayKeys = ArrayIterators.keys;\n var arrayEntries = ArrayIterators.entries;\n var arrayLastIndexOf = ArrayProto.lastIndexOf;\n var arrayReduce = ArrayProto.reduce;\n var arrayReduceRight = ArrayProto.reduceRight;\n var arrayJoin = ArrayProto.join;\n var arraySort = ArrayProto.sort;\n var arraySlice = ArrayProto.slice;\n var arrayToString = ArrayProto.toString;\n var arrayToLocaleString = ArrayProto.toLocaleString;\n var ITERATOR = wks('iterator');\n var TAG = wks('toStringTag');\n var TYPED_CONSTRUCTOR = uid('typed_constructor');\n var DEF_CONSTRUCTOR = uid('def_constructor');\n var ALL_CONSTRUCTORS = $typed.CONSTR;\n var TYPED_ARRAY = $typed.TYPED;\n var VIEW = $typed.VIEW;\n var WRONG_LENGTH = 'Wrong length!';\n\n var $map = createArrayMethod(1, function (O, length) {\n return allocate(speciesConstructor(O, O[DEF_CONSTRUCTOR]), length);\n });\n\n var LITTLE_ENDIAN = fails(function () {\n // eslint-disable-next-line no-undef\n return new Uint8Array(new Uint16Array([1]).buffer)[0] === 1;\n });\n\n var FORCED_SET = !!Uint8Array && !!Uint8Array[PROTOTYPE].set && fails(function () {\n new Uint8Array(1).set({});\n });\n\n var toOffset = function (it, BYTES) {\n var offset = toInteger(it);\n if (offset < 0 || offset % BYTES) throw RangeError('Wrong offset!');\n return offset;\n };\n\n var validate = function (it) {\n if (isObject(it) && TYPED_ARRAY in it) return it;\n throw TypeError(it + ' is not a typed array!');\n };\n\n var allocate = function (C, length) {\n if (!(isObject(C) && TYPED_CONSTRUCTOR in C)) {\n throw TypeError('It is not a typed array constructor!');\n } return new C(length);\n };\n\n var speciesFromList = function (O, list) {\n return fromList(speciesConstructor(O, O[DEF_CONSTRUCTOR]), list);\n };\n\n var fromList = function (C, list) {\n var index = 0;\n var length = list.length;\n var result = allocate(C, length);\n while (length > index) result[index] = list[index++];\n return result;\n };\n\n var addGetter = function (it, key, internal) {\n dP(it, key, { get: function () { return this._d[internal]; } });\n };\n\n var $from = function from(source /* , mapfn, thisArg */) {\n var O = toObject(source);\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var iterFn = getIterFn(O);\n var i, length, values, result, step, iterator;\n if (iterFn != undefined && !isArrayIter(iterFn)) {\n for (iterator = iterFn.call(O), values = [], i = 0; !(step = iterator.next()).done; i++) {\n values.push(step.value);\n } O = values;\n }\n if (mapping && aLen > 2) mapfn = ctx(mapfn, arguments[2], 2);\n for (i = 0, length = toLength(O.length), result = allocate(this, length); length > i; i++) {\n result[i] = mapping ? mapfn(O[i], i) : O[i];\n }\n return result;\n };\n\n var $of = function of(/* ...items */) {\n var index = 0;\n var length = arguments.length;\n var result = allocate(this, length);\n while (length > index) result[index] = arguments[index++];\n return result;\n };\n\n // iOS Safari 6.x fails here\n var TO_LOCALE_BUG = !!Uint8Array && fails(function () { arrayToLocaleString.call(new Uint8Array(1)); });\n\n var $toLocaleString = function toLocaleString() {\n return arrayToLocaleString.apply(TO_LOCALE_BUG ? arraySlice.call(validate(this)) : validate(this), arguments);\n };\n\n var proto = {\n copyWithin: function copyWithin(target, start /* , end */) {\n return arrayCopyWithin.call(validate(this), target, start, arguments.length > 2 ? arguments[2] : undefined);\n },\n every: function every(callbackfn /* , thisArg */) {\n return arrayEvery(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n fill: function fill(value /* , start, end */) { // eslint-disable-line no-unused-vars\n return arrayFill.apply(validate(this), arguments);\n },\n filter: function filter(callbackfn /* , thisArg */) {\n return speciesFromList(this, arrayFilter(validate(this), callbackfn,\n arguments.length > 1 ? arguments[1] : undefined));\n },\n find: function find(predicate /* , thisArg */) {\n return arrayFind(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n findIndex: function findIndex(predicate /* , thisArg */) {\n return arrayFindIndex(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n forEach: function forEach(callbackfn /* , thisArg */) {\n arrayForEach(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n indexOf: function indexOf(searchElement /* , fromIndex */) {\n return arrayIndexOf(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n includes: function includes(searchElement /* , fromIndex */) {\n return arrayIncludes(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n join: function join(separator) { // eslint-disable-line no-unused-vars\n return arrayJoin.apply(validate(this), arguments);\n },\n lastIndexOf: function lastIndexOf(searchElement /* , fromIndex */) { // eslint-disable-line no-unused-vars\n return arrayLastIndexOf.apply(validate(this), arguments);\n },\n map: function map(mapfn /* , thisArg */) {\n return $map(validate(this), mapfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n reduce: function reduce(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduce.apply(validate(this), arguments);\n },\n reduceRight: function reduceRight(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduceRight.apply(validate(this), arguments);\n },\n reverse: function reverse() {\n var that = this;\n var length = validate(that).length;\n var middle = Math.floor(length / 2);\n var index = 0;\n var value;\n while (index < middle) {\n value = that[index];\n that[index++] = that[--length];\n that[length] = value;\n } return that;\n },\n some: function some(callbackfn /* , thisArg */) {\n return arraySome(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n sort: function sort(comparefn) {\n return arraySort.call(validate(this), comparefn);\n },\n subarray: function subarray(begin, end) {\n var O = validate(this);\n var length = O.length;\n var $begin = toAbsoluteIndex(begin, length);\n return new (speciesConstructor(O, O[DEF_CONSTRUCTOR]))(\n O.buffer,\n O.byteOffset + $begin * O.BYTES_PER_ELEMENT,\n toLength((end === undefined ? length : toAbsoluteIndex(end, length)) - $begin)\n );\n }\n };\n\n var $slice = function slice(start, end) {\n return speciesFromList(this, arraySlice.call(validate(this), start, end));\n };\n\n var $set = function set(arrayLike /* , offset */) {\n validate(this);\n var offset = toOffset(arguments[1], 1);\n var length = this.length;\n var src = toObject(arrayLike);\n var len = toLength(src.length);\n var index = 0;\n if (len + offset > length) throw RangeError(WRONG_LENGTH);\n while (index < len) this[offset + index] = src[index++];\n };\n\n var $iterators = {\n entries: function entries() {\n return arrayEntries.call(validate(this));\n },\n keys: function keys() {\n return arrayKeys.call(validate(this));\n },\n values: function values() {\n return arrayValues.call(validate(this));\n }\n };\n\n var isTAIndex = function (target, key) {\n return isObject(target)\n && target[TYPED_ARRAY]\n && typeof key != 'symbol'\n && key in target\n && String(+key) == String(key);\n };\n var $getDesc = function getOwnPropertyDescriptor(target, key) {\n return isTAIndex(target, key = toPrimitive(key, true))\n ? propertyDesc(2, target[key])\n : gOPD(target, key);\n };\n var $setDesc = function defineProperty(target, key, desc) {\n if (isTAIndex(target, key = toPrimitive(key, true))\n && isObject(desc)\n && has(desc, 'value')\n && !has(desc, 'get')\n && !has(desc, 'set')\n // TODO: add validation descriptor w/o calling accessors\n && !desc.configurable\n && (!has(desc, 'writable') || desc.writable)\n && (!has(desc, 'enumerable') || desc.enumerable)\n ) {\n target[key] = desc.value;\n return target;\n } return dP(target, key, desc);\n };\n\n if (!ALL_CONSTRUCTORS) {\n $GOPD.f = $getDesc;\n $DP.f = $setDesc;\n }\n\n $export($export.S + $export.F * !ALL_CONSTRUCTORS, 'Object', {\n getOwnPropertyDescriptor: $getDesc,\n defineProperty: $setDesc\n });\n\n if (fails(function () { arrayToString.call({}); })) {\n arrayToString = arrayToLocaleString = function toString() {\n return arrayJoin.call(this);\n };\n }\n\n var $TypedArrayPrototype$ = redefineAll({}, proto);\n redefineAll($TypedArrayPrototype$, $iterators);\n hide($TypedArrayPrototype$, ITERATOR, $iterators.values);\n redefineAll($TypedArrayPrototype$, {\n slice: $slice,\n set: $set,\n constructor: function () { /* noop */ },\n toString: arrayToString,\n toLocaleString: $toLocaleString\n });\n addGetter($TypedArrayPrototype$, 'buffer', 'b');\n addGetter($TypedArrayPrototype$, 'byteOffset', 'o');\n addGetter($TypedArrayPrototype$, 'byteLength', 'l');\n addGetter($TypedArrayPrototype$, 'length', 'e');\n dP($TypedArrayPrototype$, TAG, {\n get: function () { return this[TYPED_ARRAY]; }\n });\n\n // eslint-disable-next-line max-statements\n module.exports = function (KEY, BYTES, wrapper, CLAMPED) {\n CLAMPED = !!CLAMPED;\n var NAME = KEY + (CLAMPED ? 'Clamped' : '') + 'Array';\n var GETTER = 'get' + KEY;\n var SETTER = 'set' + KEY;\n var TypedArray = global[NAME];\n var Base = TypedArray || {};\n var TAC = TypedArray && getPrototypeOf(TypedArray);\n var FORCED = !TypedArray || !$typed.ABV;\n var O = {};\n var TypedArrayPrototype = TypedArray && TypedArray[PROTOTYPE];\n var getter = function (that, index) {\n var data = that._d;\n return data.v[GETTER](index * BYTES + data.o, LITTLE_ENDIAN);\n };\n var setter = function (that, index, value) {\n var data = that._d;\n if (CLAMPED) value = (value = Math.round(value)) < 0 ? 0 : value > 0xff ? 0xff : value & 0xff;\n data.v[SETTER](index * BYTES + data.o, value, LITTLE_ENDIAN);\n };\n var addElement = function (that, index) {\n dP(that, index, {\n get: function () {\n return getter(this, index);\n },\n set: function (value) {\n return setter(this, index, value);\n },\n enumerable: true\n });\n };\n if (FORCED) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME, '_d');\n var index = 0;\n var offset = 0;\n var buffer, byteLength, length, klass;\n if (!isObject(data)) {\n length = toIndex(data);\n byteLength = length * BYTES;\n buffer = new $ArrayBuffer(byteLength);\n } else if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n buffer = data;\n offset = toOffset($offset, BYTES);\n var $len = data.byteLength;\n if ($length === undefined) {\n if ($len % BYTES) throw RangeError(WRONG_LENGTH);\n byteLength = $len - offset;\n if (byteLength < 0) throw RangeError(WRONG_LENGTH);\n } else {\n byteLength = toLength($length) * BYTES;\n if (byteLength + offset > $len) throw RangeError(WRONG_LENGTH);\n }\n length = byteLength / BYTES;\n } else if (TYPED_ARRAY in data) {\n return fromList(TypedArray, data);\n } else {\n return $from.call(TypedArray, data);\n }\n hide(that, '_d', {\n b: buffer,\n o: offset,\n l: byteLength,\n e: length,\n v: new $DataView(buffer)\n });\n while (index < length) addElement(that, index++);\n });\n TypedArrayPrototype = TypedArray[PROTOTYPE] = create($TypedArrayPrototype$);\n hide(TypedArrayPrototype, 'constructor', TypedArray);\n } else if (!fails(function () {\n TypedArray(1);\n }) || !fails(function () {\n new TypedArray(-1); // eslint-disable-line no-new\n }) || !$iterDetect(function (iter) {\n new TypedArray(); // eslint-disable-line no-new\n new TypedArray(null); // eslint-disable-line no-new\n new TypedArray(1.5); // eslint-disable-line no-new\n new TypedArray(iter); // eslint-disable-line no-new\n }, true)) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME);\n var klass;\n // `ws` module bug, temporarily remove validation length for Uint8Array\n // https://github.com/websockets/ws/pull/645\n if (!isObject(data)) return new Base(toIndex(data));\n if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n return $length !== undefined\n ? new Base(data, toOffset($offset, BYTES), $length)\n : $offset !== undefined\n ? new Base(data, toOffset($offset, BYTES))\n : new Base(data);\n }\n if (TYPED_ARRAY in data) return fromList(TypedArray, data);\n return $from.call(TypedArray, data);\n });\n arrayForEach(TAC !== Function.prototype ? gOPN(Base).concat(gOPN(TAC)) : gOPN(Base), function (key) {\n if (!(key in TypedArray)) hide(TypedArray, key, Base[key]);\n });\n TypedArray[PROTOTYPE] = TypedArrayPrototype;\n if (!LIBRARY) TypedArrayPrototype.constructor = TypedArray;\n }\n var $nativeIterator = TypedArrayPrototype[ITERATOR];\n var CORRECT_ITER_NAME = !!$nativeIterator\n && ($nativeIterator.name == 'values' || $nativeIterator.name == undefined);\n var $iterator = $iterators.values;\n hide(TypedArray, TYPED_CONSTRUCTOR, true);\n hide(TypedArrayPrototype, TYPED_ARRAY, NAME);\n hide(TypedArrayPrototype, VIEW, true);\n hide(TypedArrayPrototype, DEF_CONSTRUCTOR, TypedArray);\n\n if (CLAMPED ? new TypedArray(1)[TAG] != NAME : !(TAG in TypedArrayPrototype)) {\n dP(TypedArrayPrototype, TAG, {\n get: function () { return NAME; }\n });\n }\n\n O[NAME] = TypedArray;\n\n $export($export.G + $export.W + $export.F * (TypedArray != Base), O);\n\n $export($export.S, NAME, {\n BYTES_PER_ELEMENT: BYTES\n });\n\n $export($export.S + $export.F * fails(function () { Base.of.call(TypedArray, 1); }), NAME, {\n from: $from,\n of: $of\n });\n\n if (!(BYTES_PER_ELEMENT in TypedArrayPrototype)) hide(TypedArrayPrototype, BYTES_PER_ELEMENT, BYTES);\n\n $export($export.P, NAME, proto);\n\n setSpecies(NAME);\n\n $export($export.P + $export.F * FORCED_SET, NAME, { set: $set });\n\n $export($export.P + $export.F * !CORRECT_ITER_NAME, NAME, $iterators);\n\n if (!LIBRARY && TypedArrayPrototype.toString != arrayToString) TypedArrayPrototype.toString = arrayToString;\n\n $export($export.P + $export.F * fails(function () {\n new TypedArray(1).slice();\n }), NAME, { slice: $slice });\n\n $export($export.P + $export.F * (fails(function () {\n return [1, 2].toLocaleString() != new TypedArray([1, 2]).toLocaleString();\n }) || !fails(function () {\n TypedArrayPrototype.toLocaleString.call([1, 2]);\n })), NAME, { toLocaleString: $toLocaleString });\n\n Iterators[NAME] = CORRECT_ITER_NAME ? $nativeIterator : $iterator;\n if (!LIBRARY && !CORRECT_ITER_NAME) hide(TypedArrayPrototype, ITERATOR, $iterator);\n };\n} else module.exports = function () { /* empty */ };\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdHlwZWQtYXJyYXkuanM/ZWMzMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLElBQUksbUJBQU8sQ0FBQyxDQUFnQjtBQUM1QixnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFZO0FBQ3BDLGVBQWUsbUJBQU8sQ0FBQyxDQUFXO0FBQ2xDLGNBQWMsbUJBQU8sQ0FBQyxDQUFVO0FBQ2hDLGdCQUFnQixtQkFBTyxDQUFDLENBQVc7QUFDbkMsZUFBZSxtQkFBTyxDQUFDLEVBQVU7QUFDakMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBaUI7QUFDekMsWUFBWSxtQkFBTyxDQUFDLEVBQVE7QUFDNUIsbUJBQW1CLG1CQUFPLENBQUMsRUFBZ0I7QUFDM0MscUJBQXFCLG1CQUFPLENBQUMsRUFBa0I7QUFDL0MsYUFBYSxtQkFBTyxDQUFDLEVBQVM7QUFDOUIsb0JBQW9CLG1CQUFPLENBQUMsRUFBaUI7QUFDN0Msa0JBQWtCLG1CQUFPLENBQUMsRUFBZTtBQUN6QyxpQkFBaUIsbUJBQU8sQ0FBQyxDQUFjO0FBQ3ZDLGdCQUFnQixtQkFBTyxDQUFDLEdBQWE7QUFDckMsd0JBQXdCLG1CQUFPLENBQUMsRUFBc0I7QUFDdEQsb0JBQW9CLG1CQUFPLENBQUMsRUFBaUI7QUFDN0MsWUFBWSxtQkFBTyxDQUFDLEVBQVE7QUFDNUIsZ0JBQWdCLG1CQUFPLENBQUMsRUFBWTtBQUNwQyxpQkFBaUIsbUJBQU8sQ0FBQyxDQUFjO0FBQ3ZDLGlCQUFpQixtQkFBTyxDQUFDLENBQWM7QUFDdkMsb0JBQW9CLG1CQUFPLENBQUMsRUFBa0I7QUFDOUMsZUFBZSxtQkFBTyxDQUFDLEVBQWtCO0FBQ3pDLHVCQUF1QixtQkFBTyxDQUFDLEVBQWU7QUFDOUMsYUFBYSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3JDLGtCQUFrQixtQkFBTyxDQUFDLEVBQTRCO0FBQ3RELFlBQVksbUJBQU8sQ0FBQyxFQUFRO0FBQzVC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O0FBQ3ZDLE9BQU87QUFDUDs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTCx1REFBdUQsNkJBQTZCLEVBQUU7QUFDdEY7QUFDQTtBQUNBLEtBQUs7O0FBRUw7O0FBRUE7O0FBRUE7O0FBRUEsdURBQXVELFlBQVk7O0FBRW5FOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxLQUFLLFVBQVUsZ0JBQWdCOztBQUUvQjtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSyxXQUFXLGtDQUFrQzs7QUFFbEQ7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxvQ0FBb0MiLCJmaWxlIjoiMjcuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5pZiAocmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSkge1xuICB2YXIgTElCUkFSWSA9IHJlcXVpcmUoJy4vX2xpYnJhcnknKTtcbiAgdmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xuICB2YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xuICB2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuICB2YXIgJHR5cGVkID0gcmVxdWlyZSgnLi9fdHlwZWQnKTtcbiAgdmFyICRidWZmZXIgPSByZXF1aXJlKCcuL190eXBlZC1idWZmZXInKTtcbiAgdmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xuICB2YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG4gIHZhciBwcm9wZXJ0eURlc2MgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG4gIHZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xuICB2YXIgcmVkZWZpbmVBbGwgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKTtcbiAgdmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbiAgdmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG4gIHZhciB0b0luZGV4ID0gcmVxdWlyZSgnLi9fdG8taW5kZXgnKTtcbiAgdmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4vX3RvLWFic29sdXRlLWluZGV4Jyk7XG4gIHZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xuICB2YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG4gIHZhciBjbGFzc29mID0gcmVxdWlyZSgnLi9fY2xhc3NvZicpO1xuICB2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbiAgdmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG4gIHZhciBpc0FycmF5SXRlciA9IHJlcXVpcmUoJy4vX2lzLWFycmF5LWl0ZXInKTtcbiAgdmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKTtcbiAgdmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xuICB2YXIgZ09QTiA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJykuZjtcbiAgdmFyIGdldEl0ZXJGbiA9IHJlcXVpcmUoJy4vY29yZS5nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG4gIHZhciB1aWQgPSByZXF1aXJlKCcuL191aWQnKTtcbiAgdmFyIHdrcyA9IHJlcXVpcmUoJy4vX3drcycpO1xuICB2YXIgY3JlYXRlQXJyYXlNZXRob2QgPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJyk7XG4gIHZhciBjcmVhdGVBcnJheUluY2x1ZGVzID0gcmVxdWlyZSgnLi9fYXJyYXktaW5jbHVkZXMnKTtcbiAgdmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4vX3NwZWNpZXMtY29uc3RydWN0b3InKTtcbiAgdmFyIEFycmF5SXRlcmF0b3JzID0gcmVxdWlyZSgnLi9lczYuYXJyYXkuaXRlcmF0b3InKTtcbiAgdmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xuICB2YXIgJGl0ZXJEZXRlY3QgPSByZXF1aXJlKCcuL19pdGVyLWRldGVjdCcpO1xuICB2YXIgc2V0U3BlY2llcyA9IHJlcXVpcmUoJy4vX3NldC1zcGVjaWVzJyk7XG4gIHZhciBhcnJheUZpbGwgPSByZXF1aXJlKCcuL19hcnJheS1maWxsJyk7XG4gIHZhciBhcnJheUNvcHlXaXRoaW4gPSByZXF1aXJlKCcuL19hcnJheS1jb3B5LXdpdGhpbicpO1xuICB2YXIgJERQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG4gIHZhciAkR09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJyk7XG4gIHZhciBkUCA9ICREUC5mO1xuICB2YXIgZ09QRCA9ICRHT1BELmY7XG4gIHZhciBSYW5nZUVycm9yID0gZ2xvYmFsLlJhbmdlRXJyb3I7XG4gIHZhciBUeXBlRXJyb3IgPSBnbG9iYWwuVHlwZUVycm9yO1xuICB2YXIgVWludDhBcnJheSA9IGdsb2JhbC5VaW50OEFycmF5O1xuICB2YXIgQVJSQVlfQlVGRkVSID0gJ0FycmF5QnVmZmVyJztcbiAgdmFyIFNIQVJFRF9CVUZGRVIgPSAnU2hhcmVkJyArIEFSUkFZX0JVRkZFUjtcbiAgdmFyIEJZVEVTX1BFUl9FTEVNRU5UID0gJ0JZVEVTX1BFUl9FTEVNRU5UJztcbiAgdmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xuICB2YXIgQXJyYXlQcm90byA9IEFycmF5W1BST1RPVFlQRV07XG4gIHZhciAkQXJyYXlCdWZmZXIgPSAkYnVmZmVyLkFycmF5QnVmZmVyO1xuICB2YXIgJERhdGFWaWV3ID0gJGJ1ZmZlci5EYXRhVmlldztcbiAgdmFyIGFycmF5Rm9yRWFjaCA9IGNyZWF0ZUFycmF5TWV0aG9kKDApO1xuICB2YXIgYXJyYXlGaWx0ZXIgPSBjcmVhdGVBcnJheU1ldGhvZCgyKTtcbiAgdmFyIGFycmF5U29tZSA9IGNyZWF0ZUFycmF5TWV0aG9kKDMpO1xuICB2YXIgYXJyYXlFdmVyeSA9IGNyZWF0ZUFycmF5TWV0aG9kKDQpO1xuICB2YXIgYXJyYXlGaW5kID0gY3JlYXRlQXJyYXlNZXRob2QoNSk7XG4gIHZhciBhcnJheUZpbmRJbmRleCA9IGNyZWF0ZUFycmF5TWV0aG9kKDYpO1xuICB2YXIgYXJyYXlJbmNsdWRlcyA9IGNyZWF0ZUFycmF5SW5jbHVkZXModHJ1ZSk7XG4gIHZhciBhcnJheUluZGV4T2YgPSBjcmVhdGVBcnJheUluY2x1ZGVzKGZhbHNlKTtcbiAgdmFyIGFycmF5VmFsdWVzID0gQXJyYXlJdGVyYXRvcnMudmFsdWVzO1xuICB2YXIgYXJyYXlLZXlzID0gQXJyYXlJdGVyYXRvcnMua2V5cztcbiAgdmFyIGFycmF5RW50cmllcyA9IEFycmF5SXRlcmF0b3JzLmVudHJpZXM7XG4gIHZhciBhcnJheUxhc3RJbmRleE9mID0gQXJyYXlQcm90by5sYXN0SW5kZXhPZjtcbiAgdmFyIGFycmF5UmVkdWNlID0gQXJyYXlQcm90by5yZWR1Y2U7XG4gIHZhciBhcnJheVJlZHVjZVJpZ2h0ID0gQXJyYXlQcm90by5yZWR1Y2VSaWdodDtcbiAgdmFyIGFycmF5Sm9pbiA9IEFycmF5UHJvdG8uam9pbjtcbiAgdmFyIGFycmF5U29ydCA9IEFycmF5UHJvdG8uc29ydDtcbiAgdmFyIGFycmF5U2xpY2UgPSBBcnJheVByb3RvLnNsaWNlO1xuICB2YXIgYXJyYXlUb1N0cmluZyA9IEFycmF5UHJvdG8udG9TdHJpbmc7XG4gIHZhciBhcnJheVRvTG9jYWxlU3RyaW5nID0gQXJyYXlQcm90by50b0xvY2FsZVN0cmluZztcbiAgdmFyIElURVJBVE9SID0gd2tzKCdpdGVyYXRvcicpO1xuICB2YXIgVEFHID0gd2tzKCd0b1N0cmluZ1RhZycpO1xuICB2YXIgVFlQRURfQ09OU1RSVUNUT1IgPSB1aWQoJ3R5cGVkX2NvbnN0cnVjdG9yJyk7XG4gIHZhciBERUZfQ09OU1RSVUNUT1IgPSB1aWQoJ2RlZl9jb25zdHJ1Y3RvcicpO1xuICB2YXIgQUxMX0NPTlNUUlVDVE9SUyA9ICR0eXBlZC5DT05TVFI7XG4gIHZhciBUWVBFRF9BUlJBWSA9ICR0eXBlZC5UWVBFRDtcbiAgdmFyIFZJRVcgPSAkdHlwZWQuVklFVztcbiAgdmFyIFdST05HX0xFTkdUSCA9ICdXcm9uZyBsZW5ndGghJztcblxuICB2YXIgJG1hcCA9IGNyZWF0ZUFycmF5TWV0aG9kKDEsIGZ1bmN0aW9uIChPLCBsZW5ndGgpIHtcbiAgICByZXR1cm4gYWxsb2NhdGUoc3BlY2llc0NvbnN0cnVjdG9yKE8sIE9bREVGX0NPTlNUUlVDVE9SXSksIGxlbmd0aCk7XG4gIH0pO1xuXG4gIHZhciBMSVRUTEVfRU5ESUFOID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICAgIHJldHVybiBuZXcgVWludDhBcnJheShuZXcgVWludDE2QXJyYXkoWzFdKS5idWZmZXIpWzBdID09PSAxO1xuICB9KTtcblxuICB2YXIgRk9SQ0VEX1NFVCA9ICEhVWludDhBcnJheSAmJiAhIVVpbnQ4QXJyYXlbUFJPVE9UWVBFXS5zZXQgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIG5ldyBVaW50OEFycmF5KDEpLnNldCh7fSk7XG4gIH0pO1xuXG4gIHZhciB0b09mZnNldCA9IGZ1bmN0aW9uIChpdCwgQllURVMpIHtcbiAgICB2YXIgb2Zmc2V0ID0gdG9JbnRlZ2VyKGl0KTtcbiAgICBpZiAob2Zmc2V0IDwgMCB8fCBvZmZzZXQgJSBCWVRFUykgdGhyb3cgUmFuZ2VFcnJvcignV3Jvbmcgb2Zmc2V0IScpO1xuICAgIHJldHVybiBvZmZzZXQ7XG4gIH07XG5cbiAgdmFyIHZhbGlkYXRlID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgaWYgKGlzT2JqZWN0KGl0KSAmJiBUWVBFRF9BUlJBWSBpbiBpdCkgcmV0dXJuIGl0O1xuICAgIHRocm93IFR5cGVFcnJvcihpdCArICcgaXMgbm90IGEgdHlwZWQgYXJyYXkhJyk7XG4gIH07XG5cbiAgdmFyIGFsbG9jYXRlID0gZnVuY3Rpb24gKEMsIGxlbmd0aCkge1xuICAgIGlmICghKGlzT2JqZWN0KEMpICYmIFRZUEVEX0NPTlNUUlVDVE9SIGluIEMpKSB7XG4gICAgICB0aHJvdyBUeXBlRXJyb3IoJ0l0IGlzIG5vdCBhIHR5cGVkIGFycmF5IGNvbnN0cnVjdG9yIScpO1xuICAgIH0gcmV0dXJuIG5ldyBDKGxlbmd0aCk7XG4gIH07XG5cbiAgdmFyIHNwZWNpZXNGcm9tTGlzdCA9IGZ1bmN0aW9uIChPLCBsaXN0KSB7XG4gICAgcmV0dXJuIGZyb21MaXN0KHNwZWNpZXNDb25zdHJ1Y3RvcihPLCBPW0RFRl9DT05TVFJVQ1RPUl0pLCBsaXN0KTtcbiAgfTtcblxuICB2YXIgZnJvbUxpc3QgPSBmdW5jdGlvbiAoQywgbGlzdCkge1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGxlbmd0aCA9IGxpc3QubGVuZ3RoO1xuICAgIHZhciByZXN1bHQgPSBhbGxvY2F0ZShDLCBsZW5ndGgpO1xuICAgIHdoaWxlIChsZW5ndGggPiBpbmRleCkgcmVzdWx0W2luZGV4XSA9IGxpc3RbaW5kZXgrK107XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICB2YXIgYWRkR2V0dGVyID0gZnVuY3Rpb24gKGl0LCBrZXksIGludGVybmFsKSB7XG4gICAgZFAoaXQsIGtleSwgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMuX2RbaW50ZXJuYWxdOyB9IH0pO1xuICB9O1xuXG4gIHZhciAkZnJvbSA9IGZ1bmN0aW9uIGZyb20oc291cmNlIC8qICwgbWFwZm4sIHRoaXNBcmcgKi8pIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHNvdXJjZSk7XG4gICAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBtYXBmbiA9IGFMZW4gPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkO1xuICAgIHZhciBtYXBwaW5nID0gbWFwZm4gIT09IHVuZGVmaW5lZDtcbiAgICB2YXIgaXRlckZuID0gZ2V0SXRlckZuKE8pO1xuICAgIHZhciBpLCBsZW5ndGgsIHZhbHVlcywgcmVzdWx0LCBzdGVwLCBpdGVyYXRvcjtcbiAgICBpZiAoaXRlckZuICE9IHVuZGVmaW5lZCAmJiAhaXNBcnJheUl0ZXIoaXRlckZuKSkge1xuICAgICAgZm9yIChpdGVyYXRvciA9IGl0ZXJGbi5jYWxsKE8pLCB2YWx1ZXMgPSBbXSwgaSA9IDA7ICEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZTsgaSsrKSB7XG4gICAgICAgIHZhbHVlcy5wdXNoKHN0ZXAudmFsdWUpO1xuICAgICAgfSBPID0gdmFsdWVzO1xuICAgIH1cbiAgICBpZiAobWFwcGluZyAmJiBhTGVuID4gMikgbWFwZm4gPSBjdHgobWFwZm4sIGFyZ3VtZW50c1syXSwgMik7XG4gICAgZm9yIChpID0gMCwgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpLCByZXN1bHQgPSBhbGxvY2F0ZSh0aGlzLCBsZW5ndGgpOyBsZW5ndGggPiBpOyBpKyspIHtcbiAgICAgIHJlc3VsdFtpXSA9IG1hcHBpbmcgPyBtYXBmbihPW2ldLCBpKSA6IE9baV07XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgdmFyICRvZiA9IGZ1bmN0aW9uIG9mKC8qIC4uLml0ZW1zICovKSB7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgcmVzdWx0ID0gYWxsb2NhdGUodGhpcywgbGVuZ3RoKTtcbiAgICB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIHJlc3VsdFtpbmRleF0gPSBhcmd1bWVudHNbaW5kZXgrK107XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvLyBpT1MgU2FmYXJpIDYueCBmYWlscyBoZXJlXG4gIHZhciBUT19MT0NBTEVfQlVHID0gISFVaW50OEFycmF5ICYmIGZhaWxzKGZ1bmN0aW9uICgpIHsgYXJyYXlUb0xvY2FsZVN0cmluZy5jYWxsKG5ldyBVaW50OEFycmF5KDEpKTsgfSk7XG5cbiAgdmFyICR0b0xvY2FsZVN0cmluZyA9IGZ1bmN0aW9uIHRvTG9jYWxlU3RyaW5nKCkge1xuICAgIHJldHVybiBhcnJheVRvTG9jYWxlU3RyaW5nLmFwcGx5KFRPX0xPQ0FMRV9CVUcgPyBhcnJheVNsaWNlLmNhbGwodmFsaWRhdGUodGhpcykpIDogdmFsaWRhdGUodGhpcyksIGFyZ3VtZW50cyk7XG4gIH07XG5cbiAgdmFyIHByb3RvID0ge1xuICAgIGNvcHlXaXRoaW46IGZ1bmN0aW9uIGNvcHlXaXRoaW4odGFyZ2V0LCBzdGFydCAvKiAsIGVuZCAqLykge1xuICAgICAgcmV0dXJuIGFycmF5Q29weVdpdGhpbi5jYWxsKHZhbGlkYXRlKHRoaXMpLCB0YXJnZXQsIHN0YXJ0LCBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBldmVyeTogZnVuY3Rpb24gZXZlcnkoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICAgIHJldHVybiBhcnJheUV2ZXJ5KHZhbGlkYXRlKHRoaXMpLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBmaWxsOiBmdW5jdGlvbiBmaWxsKHZhbHVlIC8qICwgc3RhcnQsIGVuZCAqLykgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgICByZXR1cm4gYXJyYXlGaWxsLmFwcGx5KHZhbGlkYXRlKHRoaXMpLCBhcmd1bWVudHMpO1xuICAgIH0sXG4gICAgZmlsdGVyOiBmdW5jdGlvbiBmaWx0ZXIoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICAgIHJldHVybiBzcGVjaWVzRnJvbUxpc3QodGhpcywgYXJyYXlGaWx0ZXIodmFsaWRhdGUodGhpcyksIGNhbGxiYWNrZm4sXG4gICAgICAgIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKSk7XG4gICAgfSxcbiAgICBmaW5kOiBmdW5jdGlvbiBmaW5kKHByZWRpY2F0ZSAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICAgIHJldHVybiBhcnJheUZpbmQodmFsaWRhdGUodGhpcyksIHByZWRpY2F0ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgZmluZEluZGV4OiBmdW5jdGlvbiBmaW5kSW5kZXgocHJlZGljYXRlIC8qICwgdGhpc0FyZyAqLykge1xuICAgICAgcmV0dXJuIGFycmF5RmluZEluZGV4KHZhbGlkYXRlKHRoaXMpLCBwcmVkaWNhdGUsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgIGZvckVhY2g6IGZ1bmN0aW9uIGZvckVhY2goY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICAgIGFycmF5Rm9yRWFjaCh2YWxpZGF0ZSh0aGlzKSwgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgaW5kZXhPZjogZnVuY3Rpb24gaW5kZXhPZihzZWFyY2hFbGVtZW50IC8qICwgZnJvbUluZGV4ICovKSB7XG4gICAgICByZXR1cm4gYXJyYXlJbmRleE9mKHZhbGlkYXRlKHRoaXMpLCBzZWFyY2hFbGVtZW50LCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBpbmNsdWRlczogZnVuY3Rpb24gaW5jbHVkZXMoc2VhcmNoRWxlbWVudCAvKiAsIGZyb21JbmRleCAqLykge1xuICAgICAgcmV0dXJuIGFycmF5SW5jbHVkZXModmFsaWRhdGUodGhpcyksIHNlYXJjaEVsZW1lbnQsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgIGpvaW46IGZ1bmN0aW9uIGpvaW4oc2VwYXJhdG9yKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICAgIHJldHVybiBhcnJheUpvaW4uYXBwbHkodmFsaWRhdGUodGhpcyksIGFyZ3VtZW50cyk7XG4gICAgfSxcbiAgICBsYXN0SW5kZXhPZjogZnVuY3Rpb24gbGFzdEluZGV4T2Yoc2VhcmNoRWxlbWVudCAvKiAsIGZyb21JbmRleCAqLykgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgICByZXR1cm4gYXJyYXlMYXN0SW5kZXhPZi5hcHBseSh2YWxpZGF0ZSh0aGlzKSwgYXJndW1lbnRzKTtcbiAgICB9LFxuICAgIG1hcDogZnVuY3Rpb24gbWFwKG1hcGZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgICAgcmV0dXJuICRtYXAodmFsaWRhdGUodGhpcyksIG1hcGZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICByZWR1Y2U6IGZ1bmN0aW9uIHJlZHVjZShjYWxsYmFja2ZuIC8qICwgaW5pdGlhbFZhbHVlICovKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICAgIHJldHVybiBhcnJheVJlZHVjZS5hcHBseSh2YWxpZGF0ZSh0aGlzKSwgYXJndW1lbnRzKTtcbiAgICB9LFxuICAgIHJlZHVjZVJpZ2h0OiBmdW5jdGlvbiByZWR1Y2VSaWdodChjYWxsYmFja2ZuIC8qICwgaW5pdGlhbFZhbHVlICovKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICAgIHJldHVybiBhcnJheVJlZHVjZVJpZ2h0LmFwcGx5KHZhbGlkYXRlKHRoaXMpLCBhcmd1bWVudHMpO1xuICAgIH0sXG4gICAgcmV2ZXJzZTogZnVuY3Rpb24gcmV2ZXJzZSgpIHtcbiAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgIHZhciBsZW5ndGggPSB2YWxpZGF0ZSh0aGF0KS5sZW5ndGg7XG4gICAgICB2YXIgbWlkZGxlID0gTWF0aC5mbG9vcihsZW5ndGggLyAyKTtcbiAgICAgIHZhciBpbmRleCA9IDA7XG4gICAgICB2YXIgdmFsdWU7XG4gICAgICB3aGlsZSAoaW5kZXggPCBtaWRkbGUpIHtcbiAgICAgICAgdmFsdWUgPSB0aGF0W2luZGV4XTtcbiAgICAgICAgdGhhdFtpbmRleCsrXSA9IHRoYXRbLS1sZW5ndGhdO1xuICAgICAgICB0aGF0W2xlbmd0aF0gPSB2YWx1ZTtcbiAgICAgIH0gcmV0dXJuIHRoYXQ7XG4gICAgfSxcbiAgICBzb21lOiBmdW5jdGlvbiBzb21lKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgICByZXR1cm4gYXJyYXlTb21lKHZhbGlkYXRlKHRoaXMpLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBzb3J0OiBmdW5jdGlvbiBzb3J0KGNvbXBhcmVmbikge1xuICAgICAgcmV0dXJuIGFycmF5U29ydC5jYWxsKHZhbGlkYXRlKHRoaXMpLCBjb21wYXJlZm4pO1xuICAgIH0sXG4gICAgc3ViYXJyYXk6IGZ1bmN0aW9uIHN1YmFycmF5KGJlZ2luLCBlbmQpIHtcbiAgICAgIHZhciBPID0gdmFsaWRhdGUodGhpcyk7XG4gICAgICB2YXIgbGVuZ3RoID0gTy5sZW5ndGg7XG4gICAgICB2YXIgJGJlZ2luID0gdG9BYnNvbHV0ZUluZGV4KGJlZ2luLCBsZW5ndGgpO1xuICAgICAgcmV0dXJuIG5ldyAoc3BlY2llc0NvbnN0cnVjdG9yKE8sIE9bREVGX0NPTlNUUlVDVE9SXSkpKFxuICAgICAgICBPLmJ1ZmZlcixcbiAgICAgICAgTy5ieXRlT2Zmc2V0ICsgJGJlZ2luICogTy5CWVRFU19QRVJfRUxFTUVOVCxcbiAgICAgICAgdG9MZW5ndGgoKGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuZ3RoIDogdG9BYnNvbHV0ZUluZGV4KGVuZCwgbGVuZ3RoKSkgLSAkYmVnaW4pXG4gICAgICApO1xuICAgIH1cbiAgfTtcblxuICB2YXIgJHNsaWNlID0gZnVuY3Rpb24gc2xpY2Uoc3RhcnQsIGVuZCkge1xuICAgIHJldHVybiBzcGVjaWVzRnJvbUxpc3QodGhpcywgYXJyYXlTbGljZS5jYWxsKHZhbGlkYXRlKHRoaXMpLCBzdGFydCwgZW5kKSk7XG4gIH07XG5cbiAgdmFyICRzZXQgPSBmdW5jdGlvbiBzZXQoYXJyYXlMaWtlIC8qICwgb2Zmc2V0ICovKSB7XG4gICAgdmFsaWRhdGUodGhpcyk7XG4gICAgdmFyIG9mZnNldCA9IHRvT2Zmc2V0KGFyZ3VtZW50c1sxXSwgMSk7XG4gICAgdmFyIGxlbmd0aCA9IHRoaXMubGVuZ3RoO1xuICAgIHZhciBzcmMgPSB0b09iamVjdChhcnJheUxpa2UpO1xuICAgIHZhciBsZW4gPSB0b0xlbmd0aChzcmMubGVuZ3RoKTtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIGlmIChsZW4gKyBvZmZzZXQgPiBsZW5ndGgpIHRocm93IFJhbmdlRXJyb3IoV1JPTkdfTEVOR1RIKTtcbiAgICB3aGlsZSAoaW5kZXggPCBsZW4pIHRoaXNbb2Zmc2V0ICsgaW5kZXhdID0gc3JjW2luZGV4KytdO1xuICB9O1xuXG4gIHZhciAkaXRlcmF0b3JzID0ge1xuICAgIGVudHJpZXM6IGZ1bmN0aW9uIGVudHJpZXMoKSB7XG4gICAgICByZXR1cm4gYXJyYXlFbnRyaWVzLmNhbGwodmFsaWRhdGUodGhpcykpO1xuICAgIH0sXG4gICAga2V5czogZnVuY3Rpb24ga2V5cygpIHtcbiAgICAgIHJldHVybiBhcnJheUtleXMuY2FsbCh2YWxpZGF0ZSh0aGlzKSk7XG4gICAgfSxcbiAgICB2YWx1ZXM6IGZ1bmN0aW9uIHZhbHVlcygpIHtcbiAgICAgIHJldHVybiBhcnJheVZhbHVlcy5jYWxsKHZhbGlkYXRlKHRoaXMpKTtcbiAgICB9XG4gIH07XG5cbiAgdmFyIGlzVEFJbmRleCA9IGZ1bmN0aW9uICh0YXJnZXQsIGtleSkge1xuICAgIHJldHVybiBpc09iamVjdCh0YXJnZXQpXG4gICAgICAmJiB0YXJnZXRbVFlQRURfQVJSQVldXG4gICAgICAmJiB0eXBlb2Yga2V5ICE9ICdzeW1ib2wnXG4gICAgICAmJiBrZXkgaW4gdGFyZ2V0XG4gICAgICAmJiBTdHJpbmcoK2tleSkgPT0gU3RyaW5nKGtleSk7XG4gIH07XG4gIHZhciAkZ2V0RGVzYyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkge1xuICAgIHJldHVybiBpc1RBSW5kZXgodGFyZ2V0LCBrZXkgPSB0b1ByaW1pdGl2ZShrZXksIHRydWUpKVxuICAgICAgPyBwcm9wZXJ0eURlc2MoMiwgdGFyZ2V0W2tleV0pXG4gICAgICA6IGdPUEQodGFyZ2V0LCBrZXkpO1xuICB9O1xuICB2YXIgJHNldERlc2MgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgZGVzYykge1xuICAgIGlmIChpc1RBSW5kZXgodGFyZ2V0LCBrZXkgPSB0b1ByaW1pdGl2ZShrZXksIHRydWUpKVxuICAgICAgJiYgaXNPYmplY3QoZGVzYylcbiAgICAgICYmIGhhcyhkZXNjLCAndmFsdWUnKVxuICAgICAgJiYgIWhhcyhkZXNjLCAnZ2V0JylcbiAgICAgICYmICFoYXMoZGVzYywgJ3NldCcpXG4gICAgICAvLyBUT0RPOiBhZGQgdmFsaWRhdGlvbiBkZXNjcmlwdG9yIHcvbyBjYWxsaW5nIGFjY2Vzc29yc1xuICAgICAgJiYgIWRlc2MuY29uZmlndXJhYmxlXG4gICAgICAmJiAoIWhhcyhkZXNjLCAnd3JpdGFibGUnKSB8fCBkZXNjLndyaXRhYmxlKVxuICAgICAgJiYgKCFoYXMoZGVzYywgJ2VudW1lcmFibGUnKSB8fCBkZXNjLmVudW1lcmFibGUpXG4gICAgKSB7XG4gICAgICB0YXJnZXRba2V5XSA9IGRlc2MudmFsdWU7XG4gICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH0gcmV0dXJuIGRQKHRhcmdldCwga2V5LCBkZXNjKTtcbiAgfTtcblxuICBpZiAoIUFMTF9DT05TVFJVQ1RPUlMpIHtcbiAgICAkR09QRC5mID0gJGdldERlc2M7XG4gICAgJERQLmYgPSAkc2V0RGVzYztcbiAgfVxuXG4gICRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIUFMTF9DT05TVFJVQ1RPUlMsICdPYmplY3QnLCB7XG4gICAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiAkZ2V0RGVzYyxcbiAgICBkZWZpbmVQcm9wZXJ0eTogJHNldERlc2NcbiAgfSk7XG5cbiAgaWYgKGZhaWxzKGZ1bmN0aW9uICgpIHsgYXJyYXlUb1N0cmluZy5jYWxsKHt9KTsgfSkpIHtcbiAgICBhcnJheVRvU3RyaW5nID0gYXJyYXlUb0xvY2FsZVN0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgICAgcmV0dXJuIGFycmF5Sm9pbi5jYWxsKHRoaXMpO1xuICAgIH07XG4gIH1cblxuICB2YXIgJFR5cGVkQXJyYXlQcm90b3R5cGUkID0gcmVkZWZpbmVBbGwoe30sIHByb3RvKTtcbiAgcmVkZWZpbmVBbGwoJFR5cGVkQXJyYXlQcm90b3R5cGUkLCAkaXRlcmF0b3JzKTtcbiAgaGlkZSgkVHlwZWRBcnJheVByb3RvdHlwZSQsIElURVJBVE9SLCAkaXRlcmF0b3JzLnZhbHVlcyk7XG4gIHJlZGVmaW5lQWxsKCRUeXBlZEFycmF5UHJvdG90eXBlJCwge1xuICAgIHNsaWNlOiAkc2xpY2UsXG4gICAgc2V0OiAkc2V0LFxuICAgIGNvbnN0cnVjdG9yOiBmdW5jdGlvbiAoKSB7IC8qIG5vb3AgKi8gfSxcbiAgICB0b1N0cmluZzogYXJyYXlUb1N0cmluZyxcbiAgICB0b0xvY2FsZVN0cmluZzogJHRvTG9jYWxlU3RyaW5nXG4gIH0pO1xuICBhZGRHZXR0ZXIoJFR5cGVkQXJyYXlQcm90b3R5cGUkLCAnYnVmZmVyJywgJ2InKTtcbiAgYWRkR2V0dGVyKCRUeXBlZEFycmF5UHJvdG90eXBlJCwgJ2J5dGVPZmZzZXQnLCAnbycpO1xuICBhZGRHZXR0ZXIoJFR5cGVkQXJyYXlQcm90b3R5cGUkLCAnYnl0ZUxlbmd0aCcsICdsJyk7XG4gIGFkZEdldHRlcigkVHlwZWRBcnJheVByb3RvdHlwZSQsICdsZW5ndGgnLCAnZScpO1xuICBkUCgkVHlwZWRBcnJheVByb3RvdHlwZSQsIFRBRywge1xuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpc1tUWVBFRF9BUlJBWV07IH1cbiAgfSk7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1zdGF0ZW1lbnRzXG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEtFWSwgQllURVMsIHdyYXBwZXIsIENMQU1QRUQpIHtcbiAgICBDTEFNUEVEID0gISFDTEFNUEVEO1xuICAgIHZhciBOQU1FID0gS0VZICsgKENMQU1QRUQgPyAnQ2xhbXBlZCcgOiAnJykgKyAnQXJyYXknO1xuICAgIHZhciBHRVRURVIgPSAnZ2V0JyArIEtFWTtcbiAgICB2YXIgU0VUVEVSID0gJ3NldCcgKyBLRVk7XG4gICAgdmFyIFR5cGVkQXJyYXkgPSBnbG9iYWxbTkFNRV07XG4gICAgdmFyIEJhc2UgPSBUeXBlZEFycmF5IHx8IHt9O1xuICAgIHZhciBUQUMgPSBUeXBlZEFycmF5ICYmIGdldFByb3RvdHlwZU9mKFR5cGVkQXJyYXkpO1xuICAgIHZhciBGT1JDRUQgPSAhVHlwZWRBcnJheSB8fCAhJHR5cGVkLkFCVjtcbiAgICB2YXIgTyA9IHt9O1xuICAgIHZhciBUeXBlZEFycmF5UHJvdG90eXBlID0gVHlwZWRBcnJheSAmJiBUeXBlZEFycmF5W1BST1RPVFlQRV07XG4gICAgdmFyIGdldHRlciA9IGZ1bmN0aW9uICh0aGF0LCBpbmRleCkge1xuICAgICAgdmFyIGRhdGEgPSB0aGF0Ll9kO1xuICAgICAgcmV0dXJuIGRhdGEudltHRVRURVJdKGluZGV4ICogQllURVMgKyBkYXRhLm8sIExJVFRMRV9FTkRJQU4pO1xuICAgIH07XG4gICAgdmFyIHNldHRlciA9IGZ1bmN0aW9uICh0aGF0LCBpbmRleCwgdmFsdWUpIHtcbiAgICAgIHZhciBkYXRhID0gdGhhdC5fZDtcbiAgICAgIGlmIChDTEFNUEVEKSB2YWx1ZSA9ICh2YWx1ZSA9IE1hdGgucm91bmQodmFsdWUpKSA8IDAgPyAwIDogdmFsdWUgPiAweGZmID8gMHhmZiA6IHZhbHVlICYgMHhmZjtcbiAgICAgIGRhdGEudltTRVRURVJdKGluZGV4ICogQllURVMgKyBkYXRhLm8sIHZhbHVlLCBMSVRUTEVfRU5ESUFOKTtcbiAgICB9O1xuICAgIHZhciBhZGRFbGVtZW50ID0gZnVuY3Rpb24gKHRoYXQsIGluZGV4KSB7XG4gICAgICBkUCh0aGF0LCBpbmRleCwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gZ2V0dGVyKHRoaXMsIGluZGV4KTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICByZXR1cm4gc2V0dGVyKHRoaXMsIGluZGV4LCB2YWx1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IHRydWVcbiAgICAgIH0pO1xuICAgIH07XG4gICAgaWYgKEZPUkNFRCkge1xuICAgICAgVHlwZWRBcnJheSA9IHdyYXBwZXIoZnVuY3Rpb24gKHRoYXQsIGRhdGEsICRvZmZzZXQsICRsZW5ndGgpIHtcbiAgICAgICAgYW5JbnN0YW5jZSh0aGF0LCBUeXBlZEFycmF5LCBOQU1FLCAnX2QnKTtcbiAgICAgICAgdmFyIGluZGV4ID0gMDtcbiAgICAgICAgdmFyIG9mZnNldCA9IDA7XG4gICAgICAgIHZhciBidWZmZXIsIGJ5dGVMZW5ndGgsIGxlbmd0aCwga2xhc3M7XG4gICAgICAgIGlmICghaXNPYmplY3QoZGF0YSkpIHtcbiAgICAgICAgICBsZW5ndGggPSB0b0luZGV4KGRhdGEpO1xuICAgICAgICAgIGJ5dGVMZW5ndGggPSBsZW5ndGggKiBCWVRFUztcbiAgICAgICAgICBidWZmZXIgPSBuZXcgJEFycmF5QnVmZmVyKGJ5dGVMZW5ndGgpO1xuICAgICAgICB9IGVsc2UgaWYgKGRhdGEgaW5zdGFuY2VvZiAkQXJyYXlCdWZmZXIgfHwgKGtsYXNzID0gY2xhc3NvZihkYXRhKSkgPT0gQVJSQVlfQlVGRkVSIHx8IGtsYXNzID09IFNIQVJFRF9CVUZGRVIpIHtcbiAgICAgICAgICBidWZmZXIgPSBkYXRhO1xuICAgICAgICAgIG9mZnNldCA9IHRvT2Zmc2V0KCRvZmZzZXQsIEJZVEVTKTtcbiAgICAgICAgICB2YXIgJGxlbiA9IGRhdGEuYnl0ZUxlbmd0aDtcbiAgICAgICAgICBpZiAoJGxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBpZiAoJGxlbiAlIEJZVEVTKSB0aHJvdyBSYW5nZUVycm9yKFdST05HX0xFTkdUSCk7XG4gICAgICAgICAgICBieXRlTGVuZ3RoID0gJGxlbiAtIG9mZnNldDtcbiAgICAgICAgICAgIGlmIChieXRlTGVuZ3RoIDwgMCkgdGhyb3cgUmFuZ2VFcnJvcihXUk9OR19MRU5HVEgpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBieXRlTGVuZ3RoID0gdG9MZW5ndGgoJGxlbmd0aCkgKiBCWVRFUztcbiAgICAgICAgICAgIGlmIChieXRlTGVuZ3RoICsgb2Zmc2V0ID4gJGxlbikgdGhyb3cgUmFuZ2VFcnJvcihXUk9OR19MRU5HVEgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBsZW5ndGggPSBieXRlTGVuZ3RoIC8gQllURVM7XG4gICAgICAgIH0gZWxzZSBpZiAoVFlQRURfQVJSQVkgaW4gZGF0YSkge1xuICAgICAgICAgIHJldHVybiBmcm9tTGlzdChUeXBlZEFycmF5LCBkYXRhKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gJGZyb20uY2FsbChUeXBlZEFycmF5LCBkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBoaWRlKHRoYXQsICdfZCcsIHtcbiAgICAgICAgICBiOiBidWZmZXIsXG4gICAgICAgICAgbzogb2Zmc2V0LFxuICAgICAgICAgIGw6IGJ5dGVMZW5ndGgsXG4gICAgICAgICAgZTogbGVuZ3RoLFxuICAgICAgICAgIHY6IG5ldyAkRGF0YVZpZXcoYnVmZmVyKVxuICAgICAgICB9KTtcbiAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSBhZGRFbGVtZW50KHRoYXQsIGluZGV4KyspO1xuICAgICAgfSk7XG4gICAgICBUeXBlZEFycmF5UHJvdG90eXBlID0gVHlwZWRBcnJheVtQUk9UT1RZUEVdID0gY3JlYXRlKCRUeXBlZEFycmF5UHJvdG90eXBlJCk7XG4gICAgICBoaWRlKFR5cGVkQXJyYXlQcm90b3R5cGUsICdjb25zdHJ1Y3RvcicsIFR5cGVkQXJyYXkpO1xuICAgIH0gZWxzZSBpZiAoIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAgIFR5cGVkQXJyYXkoMSk7XG4gICAgfSkgfHwgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAgIG5ldyBUeXBlZEFycmF5KC0xKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICB9KSB8fCAhJGl0ZXJEZXRlY3QoZnVuY3Rpb24gKGl0ZXIpIHtcbiAgICAgIG5ldyBUeXBlZEFycmF5KCk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgICBuZXcgVHlwZWRBcnJheShudWxsKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICAgIG5ldyBUeXBlZEFycmF5KDEuNSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgICBuZXcgVHlwZWRBcnJheShpdGVyKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICB9LCB0cnVlKSkge1xuICAgICAgVHlwZWRBcnJheSA9IHdyYXBwZXIoZnVuY3Rpb24gKHRoYXQsIGRhdGEsICRvZmZzZXQsICRsZW5ndGgpIHtcbiAgICAgICAgYW5JbnN0YW5jZSh0aGF0LCBUeXBlZEFycmF5LCBOQU1FKTtcbiAgICAgICAgdmFyIGtsYXNzO1xuICAgICAgICAvLyBgd3NgIG1vZHVsZSBidWcsIHRlbXBvcmFyaWx5IHJlbW92ZSB2YWxpZGF0aW9uIGxlbmd0aCBmb3IgVWludDhBcnJheVxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vd2Vic29ja2V0cy93cy9wdWxsLzY0NVxuICAgICAgICBpZiAoIWlzT2JqZWN0KGRhdGEpKSByZXR1cm4gbmV3IEJhc2UodG9JbmRleChkYXRhKSk7XG4gICAgICAgIGlmIChkYXRhIGluc3RhbmNlb2YgJEFycmF5QnVmZmVyIHx8IChrbGFzcyA9IGNsYXNzb2YoZGF0YSkpID09IEFSUkFZX0JVRkZFUiB8fCBrbGFzcyA9PSBTSEFSRURfQlVGRkVSKSB7XG4gICAgICAgICAgcmV0dXJuICRsZW5ndGggIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyBuZXcgQmFzZShkYXRhLCB0b09mZnNldCgkb2Zmc2V0LCBCWVRFUyksICRsZW5ndGgpXG4gICAgICAgICAgICA6ICRvZmZzZXQgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICA/IG5ldyBCYXNlKGRhdGEsIHRvT2Zmc2V0KCRvZmZzZXQsIEJZVEVTKSlcbiAgICAgICAgICAgICAgOiBuZXcgQmFzZShkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoVFlQRURfQVJSQVkgaW4gZGF0YSkgcmV0dXJuIGZyb21MaXN0KFR5cGVkQXJyYXksIGRhdGEpO1xuICAgICAgICByZXR1cm4gJGZyb20uY2FsbChUeXBlZEFycmF5LCBkYXRhKTtcbiAgICAgIH0pO1xuICAgICAgYXJyYXlGb3JFYWNoKFRBQyAhPT0gRnVuY3Rpb24ucHJvdG90eXBlID8gZ09QTihCYXNlKS5jb25jYXQoZ09QTihUQUMpKSA6IGdPUE4oQmFzZSksIGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgaWYgKCEoa2V5IGluIFR5cGVkQXJyYXkpKSBoaWRlKFR5cGVkQXJyYXksIGtleSwgQmFzZVtrZXldKTtcbiAgICAgIH0pO1xuICAgICAgVHlwZWRBcnJheVtQUk9UT1RZUEVdID0gVHlwZWRBcnJheVByb3RvdHlwZTtcbiAgICAgIGlmICghTElCUkFSWSkgVHlwZWRBcnJheVByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFR5cGVkQXJyYXk7XG4gICAgfVxuICAgIHZhciAkbmF0aXZlSXRlcmF0b3IgPSBUeXBlZEFycmF5UHJvdG90eXBlW0lURVJBVE9SXTtcbiAgICB2YXIgQ09SUkVDVF9JVEVSX05BTUUgPSAhISRuYXRpdmVJdGVyYXRvclxuICAgICAgJiYgKCRuYXRpdmVJdGVyYXRvci5uYW1lID09ICd2YWx1ZXMnIHx8ICRuYXRpdmVJdGVyYXRvci5uYW1lID09IHVuZGVmaW5lZCk7XG4gICAgdmFyICRpdGVyYXRvciA9ICRpdGVyYXRvcnMudmFsdWVzO1xuICAgIGhpZGUoVHlwZWRBcnJheSwgVFlQRURfQ09OU1RSVUNUT1IsIHRydWUpO1xuICAgIGhpZGUoVHlwZWRBcnJheVByb3RvdHlwZSwgVFlQRURfQVJSQVksIE5BTUUpO1xuICAgIGhpZGUoVHlwZWRBcnJheVByb3RvdHlwZSwgVklFVywgdHJ1ZSk7XG4gICAgaGlkZShUeXBlZEFycmF5UHJvdG90eXBlLCBERUZfQ09OU1RSVUNUT1IsIFR5cGVkQXJyYXkpO1xuXG4gICAgaWYgKENMQU1QRUQgPyBuZXcgVHlwZWRBcnJheSgxKVtUQUddICE9IE5BTUUgOiAhKFRBRyBpbiBUeXBlZEFycmF5UHJvdG90eXBlKSkge1xuICAgICAgZFAoVHlwZWRBcnJheVByb3RvdHlwZSwgVEFHLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gTkFNRTsgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgT1tOQU1FXSA9IFR5cGVkQXJyYXk7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuVyArICRleHBvcnQuRiAqIChUeXBlZEFycmF5ICE9IEJhc2UpLCBPKTtcblxuICAgICRleHBvcnQoJGV4cG9ydC5TLCBOQU1FLCB7XG4gICAgICBCWVRFU19QRVJfRUxFTUVOVDogQllURVNcbiAgICB9KTtcblxuICAgICRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogZmFpbHMoZnVuY3Rpb24gKCkgeyBCYXNlLm9mLmNhbGwoVHlwZWRBcnJheSwgMSk7IH0pLCBOQU1FLCB7XG4gICAgICBmcm9tOiAkZnJvbSxcbiAgICAgIG9mOiAkb2ZcbiAgICB9KTtcblxuICAgIGlmICghKEJZVEVTX1BFUl9FTEVNRU5UIGluIFR5cGVkQXJyYXlQcm90b3R5cGUpKSBoaWRlKFR5cGVkQXJyYXlQcm90b3R5cGUsIEJZVEVTX1BFUl9FTEVNRU5ULCBCWVRFUyk7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuUCwgTkFNRSwgcHJvdG8pO1xuXG4gICAgc2V0U3BlY2llcyhOQU1FKTtcblxuICAgICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogRk9SQ0VEX1NFVCwgTkFNRSwgeyBzZXQ6ICRzZXQgfSk7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFDT1JSRUNUX0lURVJfTkFNRSwgTkFNRSwgJGl0ZXJhdG9ycyk7XG5cbiAgICBpZiAoIUxJQlJBUlkgJiYgVHlwZWRBcnJheVByb3RvdHlwZS50b1N0cmluZyAhPSBhcnJheVRvU3RyaW5nKSBUeXBlZEFycmF5UHJvdG90eXBlLnRvU3RyaW5nID0gYXJyYXlUb1N0cmluZztcblxuICAgICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgICAgbmV3IFR5cGVkQXJyYXkoMSkuc2xpY2UoKTtcbiAgICB9KSwgTkFNRSwgeyBzbGljZTogJHNsaWNlIH0pO1xuXG4gICAgJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIFsxLCAyXS50b0xvY2FsZVN0cmluZygpICE9IG5ldyBUeXBlZEFycmF5KFsxLCAyXSkudG9Mb2NhbGVTdHJpbmcoKTtcbiAgICB9KSB8fCAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgICAgVHlwZWRBcnJheVByb3RvdHlwZS50b0xvY2FsZVN0cmluZy5jYWxsKFsxLCAyXSk7XG4gICAgfSkpLCBOQU1FLCB7IHRvTG9jYWxlU3RyaW5nOiAkdG9Mb2NhbGVTdHJpbmcgfSk7XG5cbiAgICBJdGVyYXRvcnNbTkFNRV0gPSBDT1JSRUNUX0lURVJfTkFNRSA/ICRuYXRpdmVJdGVyYXRvciA6ICRpdGVyYXRvcjtcbiAgICBpZiAoIUxJQlJBUlkgJiYgIUNPUlJFQ1RfSVRFUl9OQU1FKSBoaWRlKFR5cGVkQXJyYXlQcm90b3R5cGUsIElURVJBVE9SLCAkaXRlcmF0b3IpO1xuICB9O1xufSBlbHNlIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///27\n")},function(module,exports,__webpack_require__){eval("var Map = __webpack_require__(117);\nvar $export = __webpack_require__(0);\nvar shared = __webpack_require__(47)('metadata');\nvar store = shared.store || (shared.store = new (__webpack_require__(120))());\n\nvar getOrCreateMetadataMap = function (target, targetKey, create) {\n var targetMetadata = store.get(target);\n if (!targetMetadata) {\n if (!create) return undefined;\n store.set(target, targetMetadata = new Map());\n }\n var keyMetadata = targetMetadata.get(targetKey);\n if (!keyMetadata) {\n if (!create) return undefined;\n targetMetadata.set(targetKey, keyMetadata = new Map());\n } return keyMetadata;\n};\nvar ordinaryHasOwnMetadata = function (MetadataKey, O, P) {\n var metadataMap = getOrCreateMetadataMap(O, P, false);\n return metadataMap === undefined ? false : metadataMap.has(MetadataKey);\n};\nvar ordinaryGetOwnMetadata = function (MetadataKey, O, P) {\n var metadataMap = getOrCreateMetadataMap(O, P, false);\n return metadataMap === undefined ? undefined : metadataMap.get(MetadataKey);\n};\nvar ordinaryDefineOwnMetadata = function (MetadataKey, MetadataValue, O, P) {\n getOrCreateMetadataMap(O, P, true).set(MetadataKey, MetadataValue);\n};\nvar ordinaryOwnMetadataKeys = function (target, targetKey) {\n var metadataMap = getOrCreateMetadataMap(target, targetKey, false);\n var keys = [];\n if (metadataMap) metadataMap.forEach(function (_, key) { keys.push(key); });\n return keys;\n};\nvar toMetaKey = function (it) {\n return it === undefined || typeof it == 'symbol' ? it : String(it);\n};\nvar exp = function (O) {\n $export($export.S, 'Reflect', O);\n};\n\nmodule.exports = {\n store: store,\n map: getOrCreateMetadataMap,\n has: ordinaryHasOwnMetadata,\n get: ordinaryGetOwnMetadata,\n set: ordinaryDefineOwnMetadata,\n keys: ordinaryOwnMetadataKeys,\n key: toMetaKey,\n exp: exp\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWV0YWRhdGEuanM/MzdhNyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxVQUFVLG1CQUFPLENBQUMsR0FBVztBQUM3QixjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxhQUFhLG1CQUFPLENBQUMsRUFBVztBQUNoQyxpREFBaUQsbUJBQU8sQ0FBQyxHQUFnQjs7QUFFekU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMERBQTBELGdCQUFnQixFQUFFO0FBQzVFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMjguanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgTWFwID0gcmVxdWlyZSgnLi9lczYubWFwJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4vX3NoYXJlZCcpKCdtZXRhZGF0YScpO1xudmFyIHN0b3JlID0gc2hhcmVkLnN0b3JlIHx8IChzaGFyZWQuc3RvcmUgPSBuZXcgKHJlcXVpcmUoJy4vZXM2LndlYWstbWFwJykpKCkpO1xuXG52YXIgZ2V0T3JDcmVhdGVNZXRhZGF0YU1hcCA9IGZ1bmN0aW9uICh0YXJnZXQsIHRhcmdldEtleSwgY3JlYXRlKSB7XG4gIHZhciB0YXJnZXRNZXRhZGF0YSA9IHN0b3JlLmdldCh0YXJnZXQpO1xuICBpZiAoIXRhcmdldE1ldGFkYXRhKSB7XG4gICAgaWYgKCFjcmVhdGUpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgc3RvcmUuc2V0KHRhcmdldCwgdGFyZ2V0TWV0YWRhdGEgPSBuZXcgTWFwKCkpO1xuICB9XG4gIHZhciBrZXlNZXRhZGF0YSA9IHRhcmdldE1ldGFkYXRhLmdldCh0YXJnZXRLZXkpO1xuICBpZiAoIWtleU1ldGFkYXRhKSB7XG4gICAgaWYgKCFjcmVhdGUpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgdGFyZ2V0TWV0YWRhdGEuc2V0KHRhcmdldEtleSwga2V5TWV0YWRhdGEgPSBuZXcgTWFwKCkpO1xuICB9IHJldHVybiBrZXlNZXRhZGF0YTtcbn07XG52YXIgb3JkaW5hcnlIYXNPd25NZXRhZGF0YSA9IGZ1bmN0aW9uIChNZXRhZGF0YUtleSwgTywgUCkge1xuICB2YXIgbWV0YWRhdGFNYXAgPSBnZXRPckNyZWF0ZU1ldGFkYXRhTWFwKE8sIFAsIGZhbHNlKTtcbiAgcmV0dXJuIG1ldGFkYXRhTWFwID09PSB1bmRlZmluZWQgPyBmYWxzZSA6IG1ldGFkYXRhTWFwLmhhcyhNZXRhZGF0YUtleSk7XG59O1xudmFyIG9yZGluYXJ5R2V0T3duTWV0YWRhdGEgPSBmdW5jdGlvbiAoTWV0YWRhdGFLZXksIE8sIFApIHtcbiAgdmFyIG1ldGFkYXRhTWFwID0gZ2V0T3JDcmVhdGVNZXRhZGF0YU1hcChPLCBQLCBmYWxzZSk7XG4gIHJldHVybiBtZXRhZGF0YU1hcCA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogbWV0YWRhdGFNYXAuZ2V0KE1ldGFkYXRhS2V5KTtcbn07XG52YXIgb3JkaW5hcnlEZWZpbmVPd25NZXRhZGF0YSA9IGZ1bmN0aW9uIChNZXRhZGF0YUtleSwgTWV0YWRhdGFWYWx1ZSwgTywgUCkge1xuICBnZXRPckNyZWF0ZU1ldGFkYXRhTWFwKE8sIFAsIHRydWUpLnNldChNZXRhZGF0YUtleSwgTWV0YWRhdGFWYWx1ZSk7XG59O1xudmFyIG9yZGluYXJ5T3duTWV0YWRhdGFLZXlzID0gZnVuY3Rpb24gKHRhcmdldCwgdGFyZ2V0S2V5KSB7XG4gIHZhciBtZXRhZGF0YU1hcCA9IGdldE9yQ3JlYXRlTWV0YWRhdGFNYXAodGFyZ2V0LCB0YXJnZXRLZXksIGZhbHNlKTtcbiAgdmFyIGtleXMgPSBbXTtcbiAgaWYgKG1ldGFkYXRhTWFwKSBtZXRhZGF0YU1hcC5mb3JFYWNoKGZ1bmN0aW9uIChfLCBrZXkpIHsga2V5cy5wdXNoKGtleSk7IH0pO1xuICByZXR1cm4ga2V5cztcbn07XG52YXIgdG9NZXRhS2V5ID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiBpdCA9PSAnc3ltYm9sJyA/IGl0IDogU3RyaW5nKGl0KTtcbn07XG52YXIgZXhwID0gZnVuY3Rpb24gKE8pIHtcbiAgJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0JywgTyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc3RvcmU6IHN0b3JlLFxuICBtYXA6IGdldE9yQ3JlYXRlTWV0YWRhdGFNYXAsXG4gIGhhczogb3JkaW5hcnlIYXNPd25NZXRhZGF0YSxcbiAgZ2V0OiBvcmRpbmFyeUdldE93bk1ldGFkYXRhLFxuICBzZXQ6IG9yZGluYXJ5RGVmaW5lT3duTWV0YWRhdGEsXG4gIGtleXM6IG9yZGluYXJ5T3duTWV0YWRhdGFLZXlzLFxuICBrZXk6IHRvTWV0YUtleSxcbiAgZXhwOiBleHBcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///28\n")},function(module,exports){eval("module.exports = false;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbGlicmFyeS5qcz8yZDAwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBIiwiZmlsZSI6IjI5LmpzIiwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBmYWxzZTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///29\n")},function(module,exports,__webpack_require__){eval("var META = __webpack_require__(33)('meta');\nvar isObject = __webpack_require__(4);\nvar has = __webpack_require__(14);\nvar setDesc = __webpack_require__(8).f;\nvar id = 0;\nvar isExtensible = Object.isExtensible || function () {\n return true;\n};\nvar FREEZE = !__webpack_require__(3)(function () {\n return isExtensible(Object.preventExtensions({}));\n});\nvar setMeta = function (it) {\n setDesc(it, META, { value: {\n i: 'O' + ++id, // object ID\n w: {} // weak collections IDs\n } });\n};\nvar fastKey = function (it, create) {\n // return primitive with prefix\n if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return 'F';\n // not necessary to add metadata\n if (!create) return 'E';\n // add missing metadata\n setMeta(it);\n // return object ID\n } return it[META].i;\n};\nvar getWeak = function (it, create) {\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return true;\n // not necessary to add metadata\n if (!create) return false;\n // add missing metadata\n setMeta(it);\n // return hash weak collections IDs\n } return it[META].w;\n};\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);\n return it;\n};\nvar meta = module.exports = {\n KEY: META,\n NEED: false,\n fastKey: fastKey,\n getWeak: getWeak,\n onFreeze: onFreeze\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWV0YS5qcz82N2FiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFdBQVcsbUJBQU8sQ0FBQyxFQUFRO0FBQzNCLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLFVBQVUsbUJBQU8sQ0FBQyxFQUFRO0FBQzFCLGNBQWMsbUJBQU8sQ0FBQyxDQUFjO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVU7QUFDaEMsaURBQWlEO0FBQ2pELENBQUM7QUFDRDtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBLFNBQVM7QUFDVCxHQUFHLEVBQUU7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMzAuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgTUVUQSA9IHJlcXVpcmUoJy4vX3VpZCcpKCdtZXRhJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciBzZXREZXNjID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbnZhciBpZCA9IDA7XG52YXIgaXNFeHRlbnNpYmxlID0gT2JqZWN0LmlzRXh0ZW5zaWJsZSB8fCBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0cnVlO1xufTtcbnZhciBGUkVFWkUgPSAhcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBpc0V4dGVuc2libGUoT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKHt9KSk7XG59KTtcbnZhciBzZXRNZXRhID0gZnVuY3Rpb24gKGl0KSB7XG4gIHNldERlc2MoaXQsIE1FVEEsIHsgdmFsdWU6IHtcbiAgICBpOiAnTycgKyArK2lkLCAvLyBvYmplY3QgSURcbiAgICB3OiB7fSAgICAgICAgICAvLyB3ZWFrIGNvbGxlY3Rpb25zIElEc1xuICB9IH0pO1xufTtcbnZhciBmYXN0S2V5ID0gZnVuY3Rpb24gKGl0LCBjcmVhdGUpIHtcbiAgLy8gcmV0dXJuIHByaW1pdGl2ZSB3aXRoIHByZWZpeFxuICBpZiAoIWlzT2JqZWN0KGl0KSkgcmV0dXJuIHR5cGVvZiBpdCA9PSAnc3ltYm9sJyA/IGl0IDogKHR5cGVvZiBpdCA9PSAnc3RyaW5nJyA/ICdTJyA6ICdQJykgKyBpdDtcbiAgaWYgKCFoYXMoaXQsIE1FVEEpKSB7XG4gICAgLy8gY2FuJ3Qgc2V0IG1ldGFkYXRhIHRvIHVuY2F1Z2h0IGZyb3plbiBvYmplY3RcbiAgICBpZiAoIWlzRXh0ZW5zaWJsZShpdCkpIHJldHVybiAnRic7XG4gICAgLy8gbm90IG5lY2Vzc2FyeSB0byBhZGQgbWV0YWRhdGFcbiAgICBpZiAoIWNyZWF0ZSkgcmV0dXJuICdFJztcbiAgICAvLyBhZGQgbWlzc2luZyBtZXRhZGF0YVxuICAgIHNldE1ldGEoaXQpO1xuICAvLyByZXR1cm4gb2JqZWN0IElEXG4gIH0gcmV0dXJuIGl0W01FVEFdLmk7XG59O1xudmFyIGdldFdlYWsgPSBmdW5jdGlvbiAoaXQsIGNyZWF0ZSkge1xuICBpZiAoIWhhcyhpdCwgTUVUQSkpIHtcbiAgICAvLyBjYW4ndCBzZXQgbWV0YWRhdGEgdG8gdW5jYXVnaHQgZnJvemVuIG9iamVjdFxuICAgIGlmICghaXNFeHRlbnNpYmxlKGl0KSkgcmV0dXJuIHRydWU7XG4gICAgLy8gbm90IG5lY2Vzc2FyeSB0byBhZGQgbWV0YWRhdGFcbiAgICBpZiAoIWNyZWF0ZSkgcmV0dXJuIGZhbHNlO1xuICAgIC8vIGFkZCBtaXNzaW5nIG1ldGFkYXRhXG4gICAgc2V0TWV0YShpdCk7XG4gIC8vIHJldHVybiBoYXNoIHdlYWsgY29sbGVjdGlvbnMgSURzXG4gIH0gcmV0dXJuIGl0W01FVEFdLnc7XG59O1xuLy8gYWRkIG1ldGFkYXRhIG9uIGZyZWV6ZS1mYW1pbHkgbWV0aG9kcyBjYWxsaW5nXG52YXIgb25GcmVlemUgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKEZSRUVaRSAmJiBtZXRhLk5FRUQgJiYgaXNFeHRlbnNpYmxlKGl0KSAmJiAhaGFzKGl0LCBNRVRBKSkgc2V0TWV0YShpdCk7XG4gIHJldHVybiBpdDtcbn07XG52YXIgbWV0YSA9IG1vZHVsZS5leHBvcnRzID0ge1xuICBLRVk6IE1FVEEsXG4gIE5FRUQ6IGZhbHNlLFxuICBmYXN0S2V5OiBmYXN0S2V5LFxuICBnZXRXZWFrOiBnZXRXZWFrLFxuICBvbkZyZWV6ZTogb25GcmVlemVcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///30\n")},function(module,exports,__webpack_require__){eval("// 22.1.3.31 Array.prototype[@@unscopables]\nvar UNSCOPABLES = __webpack_require__(5)('unscopables');\nvar ArrayProto = Array.prototype;\nif (ArrayProto[UNSCOPABLES] == undefined) __webpack_require__(11)(ArrayProto, UNSCOPABLES, {});\nmodule.exports = function (key) {\n ArrayProto[UNSCOPABLES][key] = true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYWRkLXRvLXVuc2NvcGFibGVzLmpzPzljNmMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxrQkFBa0IsbUJBQU8sQ0FBQyxDQUFRO0FBQ2xDO0FBQ0EsMENBQTBDLG1CQUFPLENBQUMsRUFBUyw2QkFBNkI7QUFDeEY7QUFDQTtBQUNBIiwiZmlsZSI6IjMxLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjIuMS4zLjMxIEFycmF5LnByb3RvdHlwZVtAQHVuc2NvcGFibGVzXVxudmFyIFVOU0NPUEFCTEVTID0gcmVxdWlyZSgnLi9fd2tzJykoJ3Vuc2NvcGFibGVzJyk7XG52YXIgQXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZTtcbmlmIChBcnJheVByb3RvW1VOU0NPUEFCTEVTXSA9PSB1bmRlZmluZWQpIHJlcXVpcmUoJy4vX2hpZGUnKShBcnJheVByb3RvLCBVTlNDT1BBQkxFUywge30pO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIEFycmF5UHJvdG9bVU5TQ09QQUJMRVNdW2tleV0gPSB0cnVlO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///31\n")},function(module,exports){eval("module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcHJvcGVydHktZGVzYy5qcz80NjMwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMzIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChiaXRtYXAsIHZhbHVlKSB7XG4gIHJldHVybiB7XG4gICAgZW51bWVyYWJsZTogIShiaXRtYXAgJiAxKSxcbiAgICBjb25maWd1cmFibGU6ICEoYml0bWFwICYgMiksXG4gICAgd3JpdGFibGU6ICEoYml0bWFwICYgNCksXG4gICAgdmFsdWU6IHZhbHVlXG4gIH07XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///32\n")},function(module,exports){eval("var id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdWlkLmpzP2NhNWEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIzMy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBpZCA9IDA7XG52YXIgcHggPSBNYXRoLnJhbmRvbSgpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiAnU3ltYm9sKCcuY29uY2F0KGtleSA9PT0gdW5kZWZpbmVkID8gJycgOiBrZXksICcpXycsICgrK2lkICsgcHgpLnRvU3RyaW5nKDM2KSk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///33\n")},function(module,exports,__webpack_require__){eval("// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = __webpack_require__(96);\nvar enumBugKeys = __webpack_require__(69);\n\nmodule.exports = Object.keys || function keys(O) {\n return $keys(O, enumBugKeys);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWtleXMuanM/MGQ1OCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLFlBQVksbUJBQU8sQ0FBQyxFQUF5QjtBQUM3QyxrQkFBa0IsbUJBQU8sQ0FBQyxFQUFrQjs7QUFFNUM7QUFDQTtBQUNBIiwiZmlsZSI6IjM0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMTkuMS4yLjE0IC8gMTUuMi4zLjE0IE9iamVjdC5rZXlzKE8pXG52YXIgJGtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cy1pbnRlcm5hbCcpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi9fZW51bS1idWcta2V5cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIGtleXMoTykge1xuICByZXR1cm4gJGtleXMoTywgZW51bUJ1Z0tleXMpO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///34\n")},function(module,exports,__webpack_require__){eval("var toInteger = __webpack_require__(21);\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n index = toInteger(index);\n return index < 0 ? max(index + length, 0) : min(index, length);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8tYWJzb2x1dGUtaW5kZXguanM/NzdmMSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIzNS5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgbWluID0gTWF0aC5taW47XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbmRleCwgbGVuZ3RoKSB7XG4gIGluZGV4ID0gdG9JbnRlZ2VyKGluZGV4KTtcbiAgcmV0dXJuIGluZGV4IDwgMCA/IG1heChpbmRleCArIGxlbmd0aCwgMCkgOiBtaW4oaW5kZXgsIGxlbmd0aCk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///35\n")},function(module,exports,__webpack_require__){eval("// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = __webpack_require__(1);\nvar dPs = __webpack_require__(97);\nvar enumBugKeys = __webpack_require__(69);\nvar IE_PROTO = __webpack_require__(68)('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = __webpack_require__(66)('iframe');\n var i = enumBugKeys.length;\n var lt = '<';\n var gt = '>';\n var iframeDocument;\n iframe.style.display = 'none';\n __webpack_require__(70).appendChild(iframe);\n iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n // createDict = iframe.contentWindow.Object;\n // html.removeChild(iframe);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n iframeDocument.close();\n createDict = iframeDocument.F;\n while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n Empty[PROTOTYPE] = anObject(O);\n result = new Empty();\n Empty[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = createDict();\n return Properties === undefined ? result : dPs(result, Properties);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWNyZWF0ZS5qcz8yYWViIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsVUFBVSxtQkFBTyxDQUFDLEVBQWU7QUFDakMsa0JBQWtCLG1CQUFPLENBQUMsRUFBa0I7QUFDNUMsZUFBZSxtQkFBTyxDQUFDLEVBQWU7QUFDdEMseUJBQXlCO0FBQ3pCOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsbUJBQU8sQ0FBQyxFQUFlO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLG1CQUFPLENBQUMsRUFBUztBQUNuQiw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBIiwiZmlsZSI6IjM2LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMTkuMS4yLjIgLyAxNS4yLjMuNSBPYmplY3QuY3JlYXRlKE8gWywgUHJvcGVydGllc10pXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBkUHMgPSByZXF1aXJlKCcuL19vYmplY3QtZHBzJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuL19lbnVtLWJ1Zy1rZXlzJyk7XG52YXIgSUVfUFJPVE8gPSByZXF1aXJlKCcuL19zaGFyZWQta2V5JykoJ0lFX1BST1RPJyk7XG52YXIgRW1wdHkgPSBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH07XG52YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG5cbi8vIENyZWF0ZSBvYmplY3Qgd2l0aCBmYWtlIGBudWxsYCBwcm90b3R5cGU6IHVzZSBpZnJhbWUgT2JqZWN0IHdpdGggY2xlYXJlZCBwcm90b3R5cGVcbnZhciBjcmVhdGVEaWN0ID0gZnVuY3Rpb24gKCkge1xuICAvLyBUaHJhc2gsIHdhc3RlIGFuZCBzb2RvbXk6IElFIEdDIGJ1Z1xuICB2YXIgaWZyYW1lID0gcmVxdWlyZSgnLi9fZG9tLWNyZWF0ZScpKCdpZnJhbWUnKTtcbiAgdmFyIGkgPSBlbnVtQnVnS2V5cy5sZW5ndGg7XG4gIHZhciBsdCA9ICc8JztcbiAgdmFyIGd0ID0gJz4nO1xuICB2YXIgaWZyYW1lRG9jdW1lbnQ7XG4gIGlmcmFtZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICByZXF1aXJlKCcuL19odG1sJykuYXBwZW5kQ2hpbGQoaWZyYW1lKTtcbiAgaWZyYW1lLnNyYyA9ICdqYXZhc2NyaXB0Oic7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tc2NyaXB0LXVybFxuICAvLyBjcmVhdGVEaWN0ID0gaWZyYW1lLmNvbnRlbnRXaW5kb3cuT2JqZWN0O1xuICAvLyBodG1sLnJlbW92ZUNoaWxkKGlmcmFtZSk7XG4gIGlmcmFtZURvY3VtZW50ID0gaWZyYW1lLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQ7XG4gIGlmcmFtZURvY3VtZW50Lm9wZW4oKTtcbiAgaWZyYW1lRG9jdW1lbnQud3JpdGUobHQgKyAnc2NyaXB0JyArIGd0ICsgJ2RvY3VtZW50LkY9T2JqZWN0JyArIGx0ICsgJy9zY3JpcHQnICsgZ3QpO1xuICBpZnJhbWVEb2N1bWVudC5jbG9zZSgpO1xuICBjcmVhdGVEaWN0ID0gaWZyYW1lRG9jdW1lbnQuRjtcbiAgd2hpbGUgKGktLSkgZGVsZXRlIGNyZWF0ZURpY3RbUFJPVE9UWVBFXVtlbnVtQnVnS2V5c1tpXV07XG4gIHJldHVybiBjcmVhdGVEaWN0KCk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5jcmVhdGUgfHwgZnVuY3Rpb24gY3JlYXRlKE8sIFByb3BlcnRpZXMpIHtcbiAgdmFyIHJlc3VsdDtcbiAgaWYgKE8gIT09IG51bGwpIHtcbiAgICBFbXB0eVtQUk9UT1RZUEVdID0gYW5PYmplY3QoTyk7XG4gICAgcmVzdWx0ID0gbmV3IEVtcHR5KCk7XG4gICAgRW1wdHlbUFJPVE9UWVBFXSA9IG51bGw7XG4gICAgLy8gYWRkIFwiX19wcm90b19fXCIgZm9yIE9iamVjdC5nZXRQcm90b3R5cGVPZiBwb2x5ZmlsbFxuICAgIHJlc3VsdFtJRV9QUk9UT10gPSBPO1xuICB9IGVsc2UgcmVzdWx0ID0gY3JlYXRlRGljdCgpO1xuICByZXR1cm4gUHJvcGVydGllcyA9PT0gdW5kZWZpbmVkID8gcmVzdWx0IDogZFBzKHJlc3VsdCwgUHJvcGVydGllcyk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///36\n")},function(module,exports,__webpack_require__){eval("// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\nvar $keys = __webpack_require__(96);\nvar hiddenKeys = __webpack_require__(69).concat('length', 'prototype');\n\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return $keys(O, hiddenKeys);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdvcG4uanM/OTA5MyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLFlBQVksbUJBQU8sQ0FBQyxFQUF5QjtBQUM3QyxpQkFBaUIsbUJBQU8sQ0FBQyxFQUFrQjs7QUFFM0M7QUFDQTtBQUNBIiwiZmlsZSI6IjM3LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMTkuMS4yLjcgLyAxNS4yLjMuNCBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhPKVxudmFyICRrZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMtaW50ZXJuYWwnKTtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi9fZW51bS1idWcta2V5cycpLmNvbmNhdCgnbGVuZ3RoJywgJ3Byb3RvdHlwZScpO1xuXG5leHBvcnRzLmYgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB8fCBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKE8pIHtcbiAgcmV0dXJuICRrZXlzKE8sIGhpZGRlbktleXMpO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///37\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar global = __webpack_require__(2);\nvar dP = __webpack_require__(8);\nvar DESCRIPTORS = __webpack_require__(7);\nvar SPECIES = __webpack_require__(5)('species');\n\nmodule.exports = function (KEY) {\n var C = global[KEY];\n if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2V0LXNwZWNpZXMuanM/N2E1NiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGFBQWEsbUJBQU8sQ0FBQyxDQUFXO0FBQ2hDLFNBQVMsbUJBQU8sQ0FBQyxDQUFjO0FBQy9CLGtCQUFrQixtQkFBTyxDQUFDLENBQWdCO0FBQzFDLGNBQWMsbUJBQU8sQ0FBQyxDQUFROztBQUU5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQixhQUFhO0FBQ25DLEdBQUc7QUFDSCIsImZpbGUiOiIzOC5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKTtcbnZhciBTUEVDSUVTID0gcmVxdWlyZSgnLi9fd2tzJykoJ3NwZWNpZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoS0VZKSB7XG4gIHZhciBDID0gZ2xvYmFsW0tFWV07XG4gIGlmIChERVNDUklQVE9SUyAmJiBDICYmICFDW1NQRUNJRVNdKSBkUC5mKEMsIFNQRUNJRVMsIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9XG4gIH0pO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///38\n")},function(module,exports){eval("module.exports = function (it, Constructor, name, forbiddenField) {\n if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) {\n throw TypeError(name + ': incorrect invocation!');\n } return it;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYW4taW5zdGFuY2UuanM/ZjYwNSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0giLCJmaWxlIjoiMzkuanMiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgQ29uc3RydWN0b3IsIG5hbWUsIGZvcmJpZGRlbkZpZWxkKSB7XG4gIGlmICghKGl0IGluc3RhbmNlb2YgQ29uc3RydWN0b3IpIHx8IChmb3JiaWRkZW5GaWVsZCAhPT0gdW5kZWZpbmVkICYmIGZvcmJpZGRlbkZpZWxkIGluIGl0KSkge1xuICAgIHRocm93IFR5cGVFcnJvcihuYW1lICsgJzogaW5jb3JyZWN0IGludm9jYXRpb24hJyk7XG4gIH0gcmV0dXJuIGl0O1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///39\n")},function(module,exports,__webpack_require__){eval("var ctx = __webpack_require__(19);\nvar call = __webpack_require__(109);\nvar isArrayIter = __webpack_require__(81);\nvar anObject = __webpack_require__(1);\nvar toLength = __webpack_require__(6);\nvar getIterFn = __webpack_require__(83);\nvar BREAK = {};\nvar RETURN = {};\nvar exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {\n var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable);\n var f = ctx(fn, that, entries ? 2 : 1);\n var index = 0;\n var length, step, iterator, result;\n if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');\n // fast case for arrays with default iterator\n if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {\n result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);\n if (result === BREAK || result === RETURN) return result;\n } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {\n result = call(iterator, f, step.value, entries);\n if (result === BREAK || result === RETURN) return result;\n }\n};\nexports.BREAK = BREAK;\nexports.RETURN = RETURN;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZm9yLW9mLmpzPzRhNTkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsVUFBVSxtQkFBTyxDQUFDLEVBQVE7QUFDMUIsV0FBVyxtQkFBTyxDQUFDLEdBQWM7QUFDakMsa0JBQWtCLG1CQUFPLENBQUMsRUFBa0I7QUFDNUMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBNEI7QUFDcEQ7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDLGlCQUFpQixFQUFFO0FBQzFEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtRUFBbUUsZ0JBQWdCO0FBQ25GO0FBQ0E7QUFDQSxHQUFHLDRDQUE0QyxnQ0FBZ0M7QUFDL0U7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjQwLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuL19pdGVyLWNhbGwnKTtcbnZhciBpc0FycmF5SXRlciA9IHJlcXVpcmUoJy4vX2lzLWFycmF5LWl0ZXInKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgZ2V0SXRlckZuID0gcmVxdWlyZSgnLi9jb3JlLmdldC1pdGVyYXRvci1tZXRob2QnKTtcbnZhciBCUkVBSyA9IHt9O1xudmFyIFJFVFVSTiA9IHt9O1xudmFyIGV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVyYWJsZSwgZW50cmllcywgZm4sIHRoYXQsIElURVJBVE9SKSB7XG4gIHZhciBpdGVyRm4gPSBJVEVSQVRPUiA/IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGl0ZXJhYmxlOyB9IDogZ2V0SXRlckZuKGl0ZXJhYmxlKTtcbiAgdmFyIGYgPSBjdHgoZm4sIHRoYXQsIGVudHJpZXMgPyAyIDogMSk7XG4gIHZhciBpbmRleCA9IDA7XG4gIHZhciBsZW5ndGgsIHN0ZXAsIGl0ZXJhdG9yLCByZXN1bHQ7XG4gIGlmICh0eXBlb2YgaXRlckZuICE9ICdmdW5jdGlvbicpIHRocm93IFR5cGVFcnJvcihpdGVyYWJsZSArICcgaXMgbm90IGl0ZXJhYmxlIScpO1xuICAvLyBmYXN0IGNhc2UgZm9yIGFycmF5cyB3aXRoIGRlZmF1bHQgaXRlcmF0b3JcbiAgaWYgKGlzQXJyYXlJdGVyKGl0ZXJGbikpIGZvciAobGVuZ3RoID0gdG9MZW5ndGgoaXRlcmFibGUubGVuZ3RoKTsgbGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIHtcbiAgICByZXN1bHQgPSBlbnRyaWVzID8gZihhbk9iamVjdChzdGVwID0gaXRlcmFibGVbaW5kZXhdKVswXSwgc3RlcFsxXSkgOiBmKGl0ZXJhYmxlW2luZGV4XSk7XG4gICAgaWYgKHJlc3VsdCA9PT0gQlJFQUsgfHwgcmVzdWx0ID09PSBSRVRVUk4pIHJldHVybiByZXN1bHQ7XG4gIH0gZWxzZSBmb3IgKGl0ZXJhdG9yID0gaXRlckZuLmNhbGwoaXRlcmFibGUpOyAhKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmU7KSB7XG4gICAgcmVzdWx0ID0gY2FsbChpdGVyYXRvciwgZiwgc3RlcC52YWx1ZSwgZW50cmllcyk7XG4gICAgaWYgKHJlc3VsdCA9PT0gQlJFQUsgfHwgcmVzdWx0ID09PSBSRVRVUk4pIHJldHVybiByZXN1bHQ7XG4gIH1cbn07XG5leHBvcnRzLkJSRUFLID0gQlJFQUs7XG5leHBvcnRzLlJFVFVSTiA9IFJFVFVSTjtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///40\n")},function(module,exports,__webpack_require__){eval("var redefine = __webpack_require__(12);\nmodule.exports = function (target, src, safe) {\n for (var key in src) redefine(target, key, src[key], safe);\n return target;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcmVkZWZpbmUtYWxsLmpzP2RjYmMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxtQkFBTyxDQUFDLEVBQWE7QUFDcEM7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiNDEuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGFyZ2V0LCBzcmMsIHNhZmUpIHtcbiAgZm9yICh2YXIga2V5IGluIHNyYykgcmVkZWZpbmUodGFyZ2V0LCBrZXksIHNyY1trZXldLCBzYWZlKTtcbiAgcmV0dXJuIHRhcmdldDtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///41\n")},function(module,exports,__webpack_require__){eval("var isObject = __webpack_require__(4);\nmodule.exports = function (it, TYPE) {\n if (!isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!');\n return it;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdmFsaWRhdGUtY29sbGVjdGlvbi5qcz9iMzlhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjQyLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgVFlQRSkge1xuICBpZiAoIWlzT2JqZWN0KGl0KSB8fCBpdC5fdCAhPT0gVFlQRSkgdGhyb3cgVHlwZUVycm9yKCdJbmNvbXBhdGlibGUgcmVjZWl2ZXIsICcgKyBUWVBFICsgJyByZXF1aXJlZCEnKTtcbiAgcmV0dXJuIGl0O1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///42\n")},function(module,exports,__webpack_require__){eval("var def = __webpack_require__(8).f;\nvar has = __webpack_require__(14);\nvar TAG = __webpack_require__(5)('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2V0LXRvLXN0cmluZy10YWcuanM/N2YyMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxVQUFVLG1CQUFPLENBQUMsQ0FBYztBQUNoQyxVQUFVLG1CQUFPLENBQUMsRUFBUTtBQUMxQixVQUFVLG1CQUFPLENBQUMsQ0FBUTs7QUFFMUI7QUFDQSxvRUFBb0UsaUNBQWlDO0FBQ3JHIiwiZmlsZSI6IjQzLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGRlZiA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgVEFHID0gcmVxdWlyZSgnLi9fd2tzJykoJ3RvU3RyaW5nVGFnJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCB0YWcsIHN0YXQpIHtcbiAgaWYgKGl0ICYmICFoYXMoaXQgPSBzdGF0ID8gaXQgOiBpdC5wcm90b3R5cGUsIFRBRykpIGRlZihpdCwgVEFHLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgdmFsdWU6IHRhZyB9KTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///43\n")},function(module,exports,__webpack_require__){eval("// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = __webpack_require__(20);\nvar TAG = __webpack_require__(5)('toStringTag');\n// ES3 wrong here\nvar ARG = cof(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (e) { /* empty */ }\n};\n\nmodule.exports = function (it) {\n var O, T, B;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n // builtinTag case\n : ARG ? cof(O)\n // ES3 arguments fallback\n : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY2xhc3NvZi5qcz8yM2M2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsVUFBVSxtQkFBTyxDQUFDLEVBQVE7QUFDMUIsVUFBVSxtQkFBTyxDQUFDLENBQVE7QUFDMUI7QUFDQSwyQkFBMkIsa0JBQWtCLEVBQUU7O0FBRS9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRyxZQUFZO0FBQ2Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiNDQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBnZXR0aW5nIHRhZyBmcm9tIDE5LjEuMy42IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcoKVxudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xudmFyIFRBRyA9IHJlcXVpcmUoJy4vX3drcycpKCd0b1N0cmluZ1RhZycpO1xuLy8gRVMzIHdyb25nIGhlcmVcbnZhciBBUkcgPSBjb2YoZnVuY3Rpb24gKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpID09ICdBcmd1bWVudHMnO1xuXG4vLyBmYWxsYmFjayBmb3IgSUUxMSBTY3JpcHQgQWNjZXNzIERlbmllZCBlcnJvclxudmFyIHRyeUdldCA9IGZ1bmN0aW9uIChpdCwga2V5KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGl0W2tleV07XG4gIH0gY2F0Y2ggKGUpIHsgLyogZW1wdHkgKi8gfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIE8sIFQsIEI7XG4gIHJldHVybiBpdCA9PT0gdW5kZWZpbmVkID8gJ1VuZGVmaW5lZCcgOiBpdCA9PT0gbnVsbCA/ICdOdWxsJ1xuICAgIC8vIEBAdG9TdHJpbmdUYWcgY2FzZVxuICAgIDogdHlwZW9mIChUID0gdHJ5R2V0KE8gPSBPYmplY3QoaXQpLCBUQUcpKSA9PSAnc3RyaW5nJyA/IFRcbiAgICAvLyBidWlsdGluVGFnIGNhc2VcbiAgICA6IEFSRyA/IGNvZihPKVxuICAgIC8vIEVTMyBhcmd1bWVudHMgZmFsbGJhY2tcbiAgICA6IChCID0gY29mKE8pKSA9PSAnT2JqZWN0JyAmJiB0eXBlb2YgTy5jYWxsZWUgPT0gJ2Z1bmN0aW9uJyA/ICdBcmd1bWVudHMnIDogQjtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///44\n")},function(module,exports,__webpack_require__){eval("var $export = __webpack_require__(0);\nvar defined = __webpack_require__(24);\nvar fails = __webpack_require__(3);\nvar spaces = __webpack_require__(72);\nvar space = '[' + spaces + ']';\nvar non = '\\u200b\\u0085';\nvar ltrim = RegExp('^' + space + space + '*');\nvar rtrim = RegExp(space + space + '*$');\n\nvar exporter = function (KEY, exec, ALIAS) {\n var exp = {};\n var FORCE = fails(function () {\n return !!spaces[KEY]() || non[KEY]() != non;\n });\n var fn = exp[KEY] = FORCE ? exec(trim) : spaces[KEY];\n if (ALIAS) exp[ALIAS] = fn;\n $export($export.P + $export.F * FORCE, 'String', exp);\n};\n\n// 1 -> String#trimLeft\n// 2 -> String#trimRight\n// 3 -> String#trim\nvar trim = exporter.trim = function (string, TYPE) {\n string = String(defined(string));\n if (TYPE & 1) string = string.replace(ltrim, '');\n if (TYPE & 2) string = string.replace(rtrim, '');\n return string;\n};\n\nmodule.exports = exporter;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLXRyaW0uanM/YWE3NyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxjQUFjLG1CQUFPLENBQUMsRUFBWTtBQUNsQyxZQUFZLG1CQUFPLENBQUMsQ0FBVTtBQUM5QixhQUFhLG1CQUFPLENBQUMsRUFBYztBQUNuQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiNDUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIHNwYWNlcyA9IHJlcXVpcmUoJy4vX3N0cmluZy13cycpO1xudmFyIHNwYWNlID0gJ1snICsgc3BhY2VzICsgJ10nO1xudmFyIG5vbiA9ICdcXHUyMDBiXFx1MDA4NSc7XG52YXIgbHRyaW0gPSBSZWdFeHAoJ14nICsgc3BhY2UgKyBzcGFjZSArICcqJyk7XG52YXIgcnRyaW0gPSBSZWdFeHAoc3BhY2UgKyBzcGFjZSArICcqJCcpO1xuXG52YXIgZXhwb3J0ZXIgPSBmdW5jdGlvbiAoS0VZLCBleGVjLCBBTElBUykge1xuICB2YXIgZXhwID0ge307XG4gIHZhciBGT1JDRSA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gISFzcGFjZXNbS0VZXSgpIHx8IG5vbltLRVldKCkgIT0gbm9uO1xuICB9KTtcbiAgdmFyIGZuID0gZXhwW0tFWV0gPSBGT1JDRSA/IGV4ZWModHJpbSkgOiBzcGFjZXNbS0VZXTtcbiAgaWYgKEFMSUFTKSBleHBbQUxJQVNdID0gZm47XG4gICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogRk9SQ0UsICdTdHJpbmcnLCBleHApO1xufTtcblxuLy8gMSAtPiBTdHJpbmcjdHJpbUxlZnRcbi8vIDIgLT4gU3RyaW5nI3RyaW1SaWdodFxuLy8gMyAtPiBTdHJpbmcjdHJpbVxudmFyIHRyaW0gPSBleHBvcnRlci50cmltID0gZnVuY3Rpb24gKHN0cmluZywgVFlQRSkge1xuICBzdHJpbmcgPSBTdHJpbmcoZGVmaW5lZChzdHJpbmcpKTtcbiAgaWYgKFRZUEUgJiAxKSBzdHJpbmcgPSBzdHJpbmcucmVwbGFjZShsdHJpbSwgJycpO1xuICBpZiAoVFlQRSAmIDIpIHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKHJ0cmltLCAnJyk7XG4gIHJldHVybiBzdHJpbmc7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydGVyO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///45\n")},function(module,exports){eval("module.exports = {};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlcmF0b3JzLmpzPzg0ZjIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEiLCJmaWxlIjoiNDYuanMiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IHt9O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///46\n")},function(module,exports,__webpack_require__){eval("var core = __webpack_require__(18);\nvar global = __webpack_require__(2);\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\n\n(module.exports = function (key, value) {\n return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n version: core.version,\n mode: __webpack_require__(29) ? 'pure' : 'global',\n copyright: '© 2020 Denis Pushkarev (zloirock.ru)'\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2hhcmVkLmpzPzU1MzciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsV0FBVyxtQkFBTyxDQUFDLEVBQVM7QUFDNUIsYUFBYSxtQkFBTyxDQUFDLENBQVc7QUFDaEM7QUFDQSxrREFBa0Q7O0FBRWxEO0FBQ0EscUVBQXFFO0FBQ3JFLENBQUM7QUFDRDtBQUNBLFFBQVEsbUJBQU8sQ0FBQyxFQUFZO0FBQzVCO0FBQ0EsQ0FBQyIsImZpbGUiOiI0Ny5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIFNIQVJFRCA9ICdfX2NvcmUtanNfc2hhcmVkX18nO1xudmFyIHN0b3JlID0gZ2xvYmFsW1NIQVJFRF0gfHwgKGdsb2JhbFtTSEFSRURdID0ge30pO1xuXG4obW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICByZXR1cm4gc3RvcmVba2V5XSB8fCAoc3RvcmVba2V5XSA9IHZhbHVlICE9PSB1bmRlZmluZWQgPyB2YWx1ZSA6IHt9KTtcbn0pKCd2ZXJzaW9ucycsIFtdKS5wdXNoKHtcbiAgdmVyc2lvbjogY29yZS52ZXJzaW9uLFxuICBtb2RlOiByZXF1aXJlKCcuL19saWJyYXJ5JykgPyAncHVyZScgOiAnZ2xvYmFsJyxcbiAgY29weXJpZ2h0OiAnwqkgMjAyMCBEZW5pcyBQdXNoa2FyZXYgKHpsb2lyb2NrLnJ1KSdcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///47\n")},function(module,exports,__webpack_require__){eval("// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = __webpack_require__(20);\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n return cof(it) == 'String' ? it.split('') : Object(it);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faW9iamVjdC5qcz82MjZhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsVUFBVSxtQkFBTyxDQUFDLEVBQVE7QUFDMUI7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiNDguanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIGFuZCBub24tZW51bWVyYWJsZSBvbGQgVjggc3RyaW5nc1xudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QoJ3onKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKSA/IE9iamVjdCA6IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gY29mKGl0KSA9PSAnU3RyaW5nJyA/IGl0LnNwbGl0KCcnKSA6IE9iamVjdChpdCk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///48\n")},function(module,exports){eval("exports.f = {}.propertyIsEnumerable;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LXBpZS5qcz81MmE3Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMiLCJmaWxlIjoiNDkuanMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnRzLmYgPSB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///49\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// 21.2.5.3 get RegExp.prototype.flags\nvar anObject = __webpack_require__(1);\nmodule.exports = function () {\n var that = anObject(this);\n var result = '';\n if (that.global) result += 'g';\n if (that.ignoreCase) result += 'i';\n if (that.multiline) result += 'm';\n if (that.unicode) result += 'u';\n if (that.sticky) result += 'y';\n return result;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZmxhZ3MuanM/MGJmYiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiNTAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG4vLyAyMS4yLjUuMyBnZXQgUmVnRXhwLnByb3RvdHlwZS5mbGFnc1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHRoYXQgPSBhbk9iamVjdCh0aGlzKTtcbiAgdmFyIHJlc3VsdCA9ICcnO1xuICBpZiAodGhhdC5nbG9iYWwpIHJlc3VsdCArPSAnZyc7XG4gIGlmICh0aGF0Lmlnbm9yZUNhc2UpIHJlc3VsdCArPSAnaSc7XG4gIGlmICh0aGF0Lm11bHRpbGluZSkgcmVzdWx0ICs9ICdtJztcbiAgaWYgKHRoYXQudW5pY29kZSkgcmVzdWx0ICs9ICd1JztcbiAgaWYgKHRoYXQuc3RpY2t5KSByZXN1bHQgKz0gJ3knO1xuICByZXR1cm4gcmVzdWx0O1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///50\n")},function(module,exports,__webpack_require__){eval("// 7.3.20 SpeciesConstructor(O, defaultConstructor)\nvar anObject = __webpack_require__(1);\nvar aFunction = __webpack_require__(10);\nvar SPECIES = __webpack_require__(5)('species');\nmodule.exports = function (O, D) {\n var C = anObject(O).constructor;\n var S;\n return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3BlY2llcy1jb25zdHJ1Y3Rvci5qcz9lYmQ2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2QyxjQUFjLG1CQUFPLENBQUMsQ0FBUTtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjUxLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gNy4zLjIwIFNwZWNpZXNDb25zdHJ1Y3RvcihPLCBkZWZhdWx0Q29uc3RydWN0b3IpXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgU1BFQ0lFUyA9IHJlcXVpcmUoJy4vX3drcycpKCdzcGVjaWVzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBEKSB7XG4gIHZhciBDID0gYW5PYmplY3QoTykuY29uc3RydWN0b3I7XG4gIHZhciBTO1xuICByZXR1cm4gQyA9PT0gdW5kZWZpbmVkIHx8IChTID0gYW5PYmplY3QoQylbU1BFQ0lFU10pID09IHVuZGVmaW5lZCA/IEQgOiBhRnVuY3Rpb24oUyk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///51\n")},function(module,exports,__webpack_require__){eval("// false -> Array#indexOf\n// true -> Array#includes\nvar toIObject = __webpack_require__(15);\nvar toLength = __webpack_require__(6);\nvar toAbsoluteIndex = __webpack_require__(35);\nmodule.exports = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIObject($this);\n var length = toLength(O.length);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n if (O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktaW5jbHVkZXMuanM/YzM2NiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0EsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2QyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxzQkFBc0IsbUJBQU8sQ0FBQyxFQUFzQjtBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUssWUFBWSxlQUFlO0FBQ2hDO0FBQ0EsS0FBSztBQUNMO0FBQ0EiLCJmaWxlIjoiNTIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBmYWxzZSAtPiBBcnJheSNpbmRleE9mXG4vLyB0cnVlICAtPiBBcnJheSNpbmNsdWRlc1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4vX3RvLWFic29sdXRlLWluZGV4Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChJU19JTkNMVURFUykge1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBlbCwgZnJvbUluZGV4KSB7XG4gICAgdmFyIE8gPSB0b0lPYmplY3QoJHRoaXMpO1xuICAgIHZhciBsZW5ndGggPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gICAgdmFyIGluZGV4ID0gdG9BYnNvbHV0ZUluZGV4KGZyb21JbmRleCwgbGVuZ3RoKTtcbiAgICB2YXIgdmFsdWU7XG4gICAgLy8gQXJyYXkjaW5jbHVkZXMgdXNlcyBTYW1lVmFsdWVaZXJvIGVxdWFsaXR5IGFsZ29yaXRobVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICBpZiAoSVNfSU5DTFVERVMgJiYgZWwgIT0gZWwpIHdoaWxlIChsZW5ndGggPiBpbmRleCkge1xuICAgICAgdmFsdWUgPSBPW2luZGV4KytdO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgICAgaWYgKHZhbHVlICE9IHZhbHVlKSByZXR1cm4gdHJ1ZTtcbiAgICAvLyBBcnJheSNpbmRleE9mIGlnbm9yZXMgaG9sZXMsIEFycmF5I2luY2x1ZGVzIC0gbm90XG4gICAgfSBlbHNlIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSBpZiAoSVNfSU5DTFVERVMgfHwgaW5kZXggaW4gTykge1xuICAgICAgaWYgKE9baW5kZXhdID09PSBlbCkgcmV0dXJuIElTX0lOQ0xVREVTIHx8IGluZGV4IHx8IDA7XG4gICAgfSByZXR1cm4gIUlTX0lOQ0xVREVTICYmIC0xO1xuICB9O1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///52\n")},function(module,exports){eval("exports.f = Object.getOwnPropertySymbols;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdvcHMuanM/MjYyMSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSIsImZpbGUiOiI1My5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///53\n")},function(module,exports,__webpack_require__){eval("// 7.2.2 IsArray(argument)\nvar cof = __webpack_require__(20);\nmodule.exports = Array.isArray || function isArray(arg) {\n return cof(arg) == 'Array';\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtYXJyYXkuanM/MTE2OSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLFVBQVUsbUJBQU8sQ0FBQyxFQUFRO0FBQzFCO0FBQ0E7QUFDQSIsImZpbGUiOiI1NC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDcuMi4yIElzQXJyYXkoYXJndW1lbnQpXG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG5tb2R1bGUuZXhwb3J0cyA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gaXNBcnJheShhcmcpIHtcbiAgcmV0dXJuIGNvZihhcmcpID09ICdBcnJheSc7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///54\n")},function(module,exports,__webpack_require__){eval("var toInteger = __webpack_require__(21);\nvar defined = __webpack_require__(24);\n// true -> String#at\n// false -> String#codePointAt\nmodule.exports = function (TO_STRING) {\n return function (that, pos) {\n var s = String(defined(that));\n var i = toInteger(pos);\n var l = s.length;\n var a, b;\n if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n a = s.charCodeAt(i);\n return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n ? TO_STRING ? s.charAt(i) : a\n : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLWF0LmpzPzAyZjQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2QyxjQUFjLG1CQUFPLENBQUMsRUFBWTtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiNTUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG4vLyB0cnVlICAtPiBTdHJpbmcjYXRcbi8vIGZhbHNlIC0+IFN0cmluZyNjb2RlUG9pbnRBdFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoVE9fU1RSSU5HKSB7XG4gIHJldHVybiBmdW5jdGlvbiAodGhhdCwgcG9zKSB7XG4gICAgdmFyIHMgPSBTdHJpbmcoZGVmaW5lZCh0aGF0KSk7XG4gICAgdmFyIGkgPSB0b0ludGVnZXIocG9zKTtcbiAgICB2YXIgbCA9IHMubGVuZ3RoO1xuICAgIHZhciBhLCBiO1xuICAgIGlmIChpIDwgMCB8fCBpID49IGwpIHJldHVybiBUT19TVFJJTkcgPyAnJyA6IHVuZGVmaW5lZDtcbiAgICBhID0gcy5jaGFyQ29kZUF0KGkpO1xuICAgIHJldHVybiBhIDwgMHhkODAwIHx8IGEgPiAweGRiZmYgfHwgaSArIDEgPT09IGwgfHwgKGIgPSBzLmNoYXJDb2RlQXQoaSArIDEpKSA8IDB4ZGMwMCB8fCBiID4gMHhkZmZmXG4gICAgICA/IFRPX1NUUklORyA/IHMuY2hhckF0KGkpIDogYVxuICAgICAgOiBUT19TVFJJTkcgPyBzLnNsaWNlKGksIGkgKyAyKSA6IChhIC0gMHhkODAwIDw8IDEwKSArIChiIC0gMHhkYzAwKSArIDB4MTAwMDA7XG4gIH07XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///55\n")},function(module,exports,__webpack_require__){eval("// 7.2.8 IsRegExp(argument)\nvar isObject = __webpack_require__(4);\nvar cof = __webpack_require__(20);\nvar MATCH = __webpack_require__(5)('match');\nmodule.exports = function (it) {\n var isRegExp;\n return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtcmVnZXhwLmpzP2FhZTMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxVQUFVLG1CQUFPLENBQUMsRUFBUTtBQUMxQixZQUFZLG1CQUFPLENBQUMsQ0FBUTtBQUM1QjtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiI1Ni5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDcuMi44IElzUmVnRXhwKGFyZ3VtZW50KVxudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG52YXIgTUFUQ0ggPSByZXF1aXJlKCcuL193a3MnKSgnbWF0Y2gnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBpc1JlZ0V4cDtcbiAgcmV0dXJuIGlzT2JqZWN0KGl0KSAmJiAoKGlzUmVnRXhwID0gaXRbTUFUQ0hdKSAhPT0gdW5kZWZpbmVkID8gISFpc1JlZ0V4cCA6IGNvZihpdCkgPT0gJ1JlZ0V4cCcpO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///56\n")},function(module,exports,__webpack_require__){eval("var ITERATOR = __webpack_require__(5)('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var riter = [7][ITERATOR]();\n riter['return'] = function () { SAFE_CLOSING = true; };\n // eslint-disable-next-line no-throw-literal\n Array.from(riter, function () { throw 2; });\n} catch (e) { /* empty */ }\n\nmodule.exports = function (exec, skipClosing) {\n if (!skipClosing && !SAFE_CLOSING) return false;\n var safe = false;\n try {\n var arr = [7];\n var iter = arr[ITERATOR]();\n iter.next = function () { return { done: safe = true }; };\n arr[ITERATOR] = function () { return iter; };\n exec(arr);\n } catch (e) { /* empty */ }\n return safe;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlci1kZXRlY3QuanM/NWNjNSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxlQUFlLG1CQUFPLENBQUMsQ0FBUTtBQUMvQjs7QUFFQTtBQUNBO0FBQ0EsaUNBQWlDLHFCQUFxQjtBQUN0RDtBQUNBLGlDQUFpQyxTQUFTLEVBQUU7QUFDNUMsQ0FBQyxZQUFZOztBQUViO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QixTQUFTLHFCQUFxQjtBQUMzRCxpQ0FBaUMsYUFBYTtBQUM5QztBQUNBLEdBQUcsWUFBWTtBQUNmO0FBQ0EiLCJmaWxlIjoiNTcuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgSVRFUkFUT1IgPSByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKTtcbnZhciBTQUZFX0NMT1NJTkcgPSBmYWxzZTtcblxudHJ5IHtcbiAgdmFyIHJpdGVyID0gWzddW0lURVJBVE9SXSgpO1xuICByaXRlclsncmV0dXJuJ10gPSBmdW5jdGlvbiAoKSB7IFNBRkVfQ0xPU0lORyA9IHRydWU7IH07XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby10aHJvdy1saXRlcmFsXG4gIEFycmF5LmZyb20ocml0ZXIsIGZ1bmN0aW9uICgpIHsgdGhyb3cgMjsgfSk7XG59IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYywgc2tpcENsb3NpbmcpIHtcbiAgaWYgKCFza2lwQ2xvc2luZyAmJiAhU0FGRV9DTE9TSU5HKSByZXR1cm4gZmFsc2U7XG4gIHZhciBzYWZlID0gZmFsc2U7XG4gIHRyeSB7XG4gICAgdmFyIGFyciA9IFs3XTtcbiAgICB2YXIgaXRlciA9IGFycltJVEVSQVRPUl0oKTtcbiAgICBpdGVyLm5leHQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB7IGRvbmU6IHNhZmUgPSB0cnVlIH07IH07XG4gICAgYXJyW0lURVJBVE9SXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGl0ZXI7IH07XG4gICAgZXhlYyhhcnIpO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbiAgcmV0dXJuIHNhZmU7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///57\n")},function(module,exports,__webpack_require__){"use strict";eval("\n\nvar classof = __webpack_require__(44);\nvar builtinExec = RegExp.prototype.exec;\n\n // `RegExpExec` abstract operation\n// https://tc39.github.io/ecma262/#sec-regexpexec\nmodule.exports = function (R, S) {\n var exec = R.exec;\n if (typeof exec === 'function') {\n var result = exec.call(R, S);\n if (typeof result !== 'object') {\n throw new TypeError('RegExp exec method returned something other than an Object or null');\n }\n return result;\n }\n if (classof(R) !== 'RegExp') {\n throw new TypeError('RegExp#exec called on incompatible receiver');\n }\n return builtinExec.call(R, S);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcmVnZXhwLWV4ZWMtYWJzdHJhY3QuanM/NWYxYiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixjQUFjLG1CQUFPLENBQUMsRUFBWTtBQUNsQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiI1OC5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuL19jbGFzc29mJyk7XG52YXIgYnVpbHRpbkV4ZWMgPSBSZWdFeHAucHJvdG90eXBlLmV4ZWM7XG5cbiAvLyBgUmVnRXhwRXhlY2AgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1yZWdleHBleGVjXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChSLCBTKSB7XG4gIHZhciBleGVjID0gUi5leGVjO1xuICBpZiAodHlwZW9mIGV4ZWMgPT09ICdmdW5jdGlvbicpIHtcbiAgICB2YXIgcmVzdWx0ID0gZXhlYy5jYWxsKFIsIFMpO1xuICAgIGlmICh0eXBlb2YgcmVzdWx0ICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUmVnRXhwIGV4ZWMgbWV0aG9kIHJldHVybmVkIHNvbWV0aGluZyBvdGhlciB0aGFuIGFuIE9iamVjdCBvciBudWxsJyk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgaWYgKGNsYXNzb2YoUikgIT09ICdSZWdFeHAnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUmVnRXhwI2V4ZWMgY2FsbGVkIG9uIGluY29tcGF0aWJsZSByZWNlaXZlcicpO1xuICB9XG4gIHJldHVybiBidWlsdGluRXhlYy5jYWxsKFIsIFMpO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///58\n")},function(module,exports,__webpack_require__){"use strict";eval("\n__webpack_require__(113);\nvar redefine = __webpack_require__(12);\nvar hide = __webpack_require__(11);\nvar fails = __webpack_require__(3);\nvar defined = __webpack_require__(24);\nvar wks = __webpack_require__(5);\nvar regexpExec = __webpack_require__(87);\n\nvar SPECIES = wks('species');\n\nvar REPLACE_SUPPORTS_NAMED_GROUPS = !fails(function () {\n // #replace needs built-in support for named groups.\n // #match works fine because it just return the exec results, even if it has\n // a \"grops\" property.\n var re = /./;\n re.exec = function () {\n var result = [];\n result.groups = { a: '7' };\n return result;\n };\n return ''.replace(re, '$') !== '7';\n});\n\nvar SPLIT_WORKS_WITH_OVERWRITTEN_EXEC = (function () {\n // Chrome 51 has a buggy \"split\" implementation when RegExp#exec !== nativeExec\n var re = /(?:)/;\n var originalExec = re.exec;\n re.exec = function () { return originalExec.apply(this, arguments); };\n var result = 'ab'.split(re);\n return result.length === 2 && result[0] === 'a' && result[1] === 'b';\n})();\n\nmodule.exports = function (KEY, length, exec) {\n var SYMBOL = wks(KEY);\n\n var DELEGATES_TO_SYMBOL = !fails(function () {\n // String methods call symbol-named RegEp methods\n var O = {};\n O[SYMBOL] = function () { return 7; };\n return ''[KEY](O) != 7;\n });\n\n var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL ? !fails(function () {\n // Symbol-named RegExp methods call .exec\n var execCalled = false;\n var re = /a/;\n re.exec = function () { execCalled = true; return null; };\n if (KEY === 'split') {\n // RegExp[@@split] doesn't call the regex's exec method, but first creates\n // a new one. We need to return the patched regex when creating the new one.\n re.constructor = {};\n re.constructor[SPECIES] = function () { return re; };\n }\n re[SYMBOL]('');\n return !execCalled;\n }) : undefined;\n\n if (\n !DELEGATES_TO_SYMBOL ||\n !DELEGATES_TO_EXEC ||\n (KEY === 'replace' && !REPLACE_SUPPORTS_NAMED_GROUPS) ||\n (KEY === 'split' && !SPLIT_WORKS_WITH_OVERWRITTEN_EXEC)\n ) {\n var nativeRegExpMethod = /./[SYMBOL];\n var fns = exec(\n defined,\n SYMBOL,\n ''[KEY],\n function maybeCallNative(nativeMethod, regexp, str, arg2, forceStringMethod) {\n if (regexp.exec === regexpExec) {\n if (DELEGATES_TO_SYMBOL && !forceStringMethod) {\n // The native String method already delegates to @@method (this\n // polyfilled function), leasing to infinite recursion.\n // We avoid it by directly calling the native @@method method.\n return { done: true, value: nativeRegExpMethod.call(regexp, str, arg2) };\n }\n return { done: true, value: nativeMethod.call(str, regexp, arg2) };\n }\n return { done: false };\n }\n );\n var strfn = fns[0];\n var rxfn = fns[1];\n\n redefine(String.prototype, KEY, strfn);\n hide(RegExp.prototype, SYMBOL, length == 2\n // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)\n // 21.2.5.11 RegExp.prototype[@@split](string, limit)\n ? function (string, arg) { return rxfn.call(string, this, arg); }\n // 21.2.5.6 RegExp.prototype[@@match](string)\n // 21.2.5.9 RegExp.prototype[@@search](string)\n : function (string) { return rxfn.call(string, this); }\n );\n }\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZml4LXJlLXdrcy5qcz8yMTRmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsbUJBQU8sQ0FBQyxHQUFtQjtBQUMzQixlQUFlLG1CQUFPLENBQUMsRUFBYTtBQUNwQyxXQUFXLG1CQUFPLENBQUMsRUFBUztBQUM1QixZQUFZLG1CQUFPLENBQUMsQ0FBVTtBQUM5QixjQUFjLG1CQUFPLENBQUMsRUFBWTtBQUNsQyxVQUFVLG1CQUFPLENBQUMsQ0FBUTtBQUMxQixpQkFBaUIsbUJBQU8sQ0FBQyxFQUFnQjs7QUFFekM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5Qiw0Q0FBNEM7QUFDckU7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkIsVUFBVTtBQUN2QztBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkIsbUJBQW1CLGFBQWE7QUFDM0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkMsV0FBVztBQUN4RDtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0I7QUFDcEI7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0MscUNBQXFDO0FBQ3JFO0FBQ0E7QUFDQSwyQkFBMkIsZ0NBQWdDO0FBQzNEO0FBQ0E7QUFDQSIsImZpbGUiOiI1OS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4vZXM2LnJlZ2V4cC5leGVjJyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG52YXIgd2tzID0gcmVxdWlyZSgnLi9fd2tzJyk7XG52YXIgcmVnZXhwRXhlYyA9IHJlcXVpcmUoJy4vX3JlZ2V4cC1leGVjJyk7XG5cbnZhciBTUEVDSUVTID0gd2tzKCdzcGVjaWVzJyk7XG5cbnZhciBSRVBMQUNFX1NVUFBPUlRTX05BTUVEX0dST1VQUyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vICNyZXBsYWNlIG5lZWRzIGJ1aWx0LWluIHN1cHBvcnQgZm9yIG5hbWVkIGdyb3Vwcy5cbiAgLy8gI21hdGNoIHdvcmtzIGZpbmUgYmVjYXVzZSBpdCBqdXN0IHJldHVybiB0aGUgZXhlYyByZXN1bHRzLCBldmVuIGlmIGl0IGhhc1xuICAvLyBhIFwiZ3JvcHNcIiBwcm9wZXJ0eS5cbiAgdmFyIHJlID0gLy4vO1xuICByZS5leGVjID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICByZXN1bHQuZ3JvdXBzID0geyBhOiAnNycgfTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuICByZXR1cm4gJycucmVwbGFjZShyZSwgJyQ8YT4nKSAhPT0gJzcnO1xufSk7XG5cbnZhciBTUExJVF9XT1JLU19XSVRIX09WRVJXUklUVEVOX0VYRUMgPSAoZnVuY3Rpb24gKCkge1xuICAvLyBDaHJvbWUgNTEgaGFzIGEgYnVnZ3kgXCJzcGxpdFwiIGltcGxlbWVudGF0aW9uIHdoZW4gUmVnRXhwI2V4ZWMgIT09IG5hdGl2ZUV4ZWNcbiAgdmFyIHJlID0gLyg/OikvO1xuICB2YXIgb3JpZ2luYWxFeGVjID0gcmUuZXhlYztcbiAgcmUuZXhlYyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG9yaWdpbmFsRXhlYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9O1xuICB2YXIgcmVzdWx0ID0gJ2FiJy5zcGxpdChyZSk7XG4gIHJldHVybiByZXN1bHQubGVuZ3RoID09PSAyICYmIHJlc3VsdFswXSA9PT0gJ2EnICYmIHJlc3VsdFsxXSA9PT0gJ2InO1xufSkoKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoS0VZLCBsZW5ndGgsIGV4ZWMpIHtcbiAgdmFyIFNZTUJPTCA9IHdrcyhLRVkpO1xuXG4gIHZhciBERUxFR0FURVNfVE9fU1lNQk9MID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAvLyBTdHJpbmcgbWV0aG9kcyBjYWxsIHN5bWJvbC1uYW1lZCBSZWdFcCBtZXRob2RzXG4gICAgdmFyIE8gPSB7fTtcbiAgICBPW1NZTUJPTF0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9O1xuICAgIHJldHVybiAnJ1tLRVldKE8pICE9IDc7XG4gIH0pO1xuXG4gIHZhciBERUxFR0FURVNfVE9fRVhFQyA9IERFTEVHQVRFU19UT19TWU1CT0wgPyAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIFN5bWJvbC1uYW1lZCBSZWdFeHAgbWV0aG9kcyBjYWxsIC5leGVjXG4gICAgdmFyIGV4ZWNDYWxsZWQgPSBmYWxzZTtcbiAgICB2YXIgcmUgPSAvYS87XG4gICAgcmUuZXhlYyA9IGZ1bmN0aW9uICgpIHsgZXhlY0NhbGxlZCA9IHRydWU7IHJldHVybiBudWxsOyB9O1xuICAgIGlmIChLRVkgPT09ICdzcGxpdCcpIHtcbiAgICAgIC8vIFJlZ0V4cFtAQHNwbGl0XSBkb2Vzbid0IGNhbGwgdGhlIHJlZ2V4J3MgZXhlYyBtZXRob2QsIGJ1dCBmaXJzdCBjcmVhdGVzXG4gICAgICAvLyBhIG5ldyBvbmUuIFdlIG5lZWQgdG8gcmV0dXJuIHRoZSBwYXRjaGVkIHJlZ2V4IHdoZW4gY3JlYXRpbmcgdGhlIG5ldyBvbmUuXG4gICAgICByZS5jb25zdHJ1Y3RvciA9IHt9O1xuICAgICAgcmUuY29uc3RydWN0b3JbU1BFQ0lFU10gPSBmdW5jdGlvbiAoKSB7IHJldHVybiByZTsgfTtcbiAgICB9XG4gICAgcmVbU1lNQk9MXSgnJyk7XG4gICAgcmV0dXJuICFleGVjQ2FsbGVkO1xuICB9KSA6IHVuZGVmaW5lZDtcblxuICBpZiAoXG4gICAgIURFTEVHQVRFU19UT19TWU1CT0wgfHxcbiAgICAhREVMRUdBVEVTX1RPX0VYRUMgfHxcbiAgICAoS0VZID09PSAncmVwbGFjZScgJiYgIVJFUExBQ0VfU1VQUE9SVFNfTkFNRURfR1JPVVBTKSB8fFxuICAgIChLRVkgPT09ICdzcGxpdCcgJiYgIVNQTElUX1dPUktTX1dJVEhfT1ZFUldSSVRURU5fRVhFQylcbiAgKSB7XG4gICAgdmFyIG5hdGl2ZVJlZ0V4cE1ldGhvZCA9IC8uL1tTWU1CT0xdO1xuICAgIHZhciBmbnMgPSBleGVjKFxuICAgICAgZGVmaW5lZCxcbiAgICAgIFNZTUJPTCxcbiAgICAgICcnW0tFWV0sXG4gICAgICBmdW5jdGlvbiBtYXliZUNhbGxOYXRpdmUobmF0aXZlTWV0aG9kLCByZWdleHAsIHN0ciwgYXJnMiwgZm9yY2VTdHJpbmdNZXRob2QpIHtcbiAgICAgICAgaWYgKHJlZ2V4cC5leGVjID09PSByZWdleHBFeGVjKSB7XG4gICAgICAgICAgaWYgKERFTEVHQVRFU19UT19TWU1CT0wgJiYgIWZvcmNlU3RyaW5nTWV0aG9kKSB7XG4gICAgICAgICAgICAvLyBUaGUgbmF0aXZlIFN0cmluZyBtZXRob2QgYWxyZWFkeSBkZWxlZ2F0ZXMgdG8gQEBtZXRob2QgKHRoaXNcbiAgICAgICAgICAgIC8vIHBvbHlmaWxsZWQgZnVuY3Rpb24pLCBsZWFzaW5nIHRvIGluZmluaXRlIHJlY3Vyc2lvbi5cbiAgICAgICAgICAgIC8vIFdlIGF2b2lkIGl0IGJ5IGRpcmVjdGx5IGNhbGxpbmcgdGhlIG5hdGl2ZSBAQG1ldGhvZCBtZXRob2QuXG4gICAgICAgICAgICByZXR1cm4geyBkb25lOiB0cnVlLCB2YWx1ZTogbmF0aXZlUmVnRXhwTWV0aG9kLmNhbGwocmVnZXhwLCBzdHIsIGFyZzIpIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB7IGRvbmU6IHRydWUsIHZhbHVlOiBuYXRpdmVNZXRob2QuY2FsbChzdHIsIHJlZ2V4cCwgYXJnMikgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBkb25lOiBmYWxzZSB9O1xuICAgICAgfVxuICAgICk7XG4gICAgdmFyIHN0cmZuID0gZm5zWzBdO1xuICAgIHZhciByeGZuID0gZm5zWzFdO1xuXG4gICAgcmVkZWZpbmUoU3RyaW5nLnByb3RvdHlwZSwgS0VZLCBzdHJmbik7XG4gICAgaGlkZShSZWdFeHAucHJvdG90eXBlLCBTWU1CT0wsIGxlbmd0aCA9PSAyXG4gICAgICAvLyAyMS4yLjUuOCBSZWdFeHAucHJvdG90eXBlW0BAcmVwbGFjZV0oc3RyaW5nLCByZXBsYWNlVmFsdWUpXG4gICAgICAvLyAyMS4yLjUuMTEgUmVnRXhwLnByb3RvdHlwZVtAQHNwbGl0XShzdHJpbmcsIGxpbWl0KVxuICAgICAgPyBmdW5jdGlvbiAoc3RyaW5nLCBhcmcpIHsgcmV0dXJuIHJ4Zm4uY2FsbChzdHJpbmcsIHRoaXMsIGFyZyk7IH1cbiAgICAgIC8vIDIxLjIuNS42IFJlZ0V4cC5wcm90b3R5cGVbQEBtYXRjaF0oc3RyaW5nKVxuICAgICAgLy8gMjEuMi41LjkgUmVnRXhwLnByb3RvdHlwZVtAQHNlYXJjaF0oc3RyaW5nKVxuICAgICAgOiBmdW5jdGlvbiAoc3RyaW5nKSB7IHJldHVybiByeGZuLmNhbGwoc3RyaW5nLCB0aGlzKTsgfVxuICAgICk7XG4gIH1cbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///59\n")},function(module,exports,__webpack_require__){eval("var global = __webpack_require__(2);\nvar navigator = global.navigator;\n\nmodule.exports = navigator && navigator.userAgent || '';\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdXNlci1hZ2VudC5qcz9hMjVmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGFBQWEsbUJBQU8sQ0FBQyxDQUFXO0FBQ2hDOztBQUVBIiwiZmlsZSI6IjYwLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIG5hdmlnYXRvciA9IGdsb2JhbC5uYXZpZ2F0b3I7XG5cbm1vZHVsZS5leHBvcnRzID0gbmF2aWdhdG9yICYmIG5hdmlnYXRvci51c2VyQWdlbnQgfHwgJyc7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///60\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar global = __webpack_require__(2);\nvar $export = __webpack_require__(0);\nvar redefine = __webpack_require__(12);\nvar redefineAll = __webpack_require__(41);\nvar meta = __webpack_require__(30);\nvar forOf = __webpack_require__(40);\nvar anInstance = __webpack_require__(39);\nvar isObject = __webpack_require__(4);\nvar fails = __webpack_require__(3);\nvar $iterDetect = __webpack_require__(57);\nvar setToStringTag = __webpack_require__(43);\nvar inheritIfRequired = __webpack_require__(73);\n\nmodule.exports = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) {\n var Base = global[NAME];\n var C = Base;\n var ADDER = IS_MAP ? 'set' : 'add';\n var proto = C && C.prototype;\n var O = {};\n var fixMethod = function (KEY) {\n var fn = proto[KEY];\n redefine(proto, KEY,\n KEY == 'delete' ? function (a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'has' ? function has(a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'get' ? function get(a) {\n return IS_WEAK && !isObject(a) ? undefined : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'add' ? function add(a) { fn.call(this, a === 0 ? 0 : a); return this; }\n : function set(a, b) { fn.call(this, a === 0 ? 0 : a, b); return this; }\n );\n };\n if (typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function () {\n new C().entries().next();\n }))) {\n // create collection constructor\n C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);\n redefineAll(C.prototype, methods);\n meta.NEED = true;\n } else {\n var instance = new C();\n // early implementations not supports chaining\n var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;\n // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false\n var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); });\n // most early implementations doesn't supports iterables, most modern - not close it correctly\n var ACCEPT_ITERABLES = $iterDetect(function (iter) { new C(iter); }); // eslint-disable-line no-new\n // for early implementations -0 and +0 not the same\n var BUGGY_ZERO = !IS_WEAK && fails(function () {\n // V8 ~ Chromium 42- fails only with 5+ elements\n var $instance = new C();\n var index = 5;\n while (index--) $instance[ADDER](index, index);\n return !$instance.has(-0);\n });\n if (!ACCEPT_ITERABLES) {\n C = wrapper(function (target, iterable) {\n anInstance(target, C, NAME);\n var that = inheritIfRequired(new Base(), target, C);\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n return that;\n });\n C.prototype = proto;\n proto.constructor = C;\n }\n if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {\n fixMethod('delete');\n fixMethod('has');\n IS_MAP && fixMethod('get');\n }\n if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);\n // weak collections should not contains .clear method\n if (IS_WEAK && proto.clear) delete proto.clear;\n }\n\n setToStringTag(C, NAME);\n\n O[NAME] = C;\n $export($export.G + $export.W + $export.F * (C != Base), O);\n\n if (!IS_WEAK) common.setStrong(C, NAME, IS_MAP);\n\n return C;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY29sbGVjdGlvbi5qcz9lMGI4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsYUFBYSxtQkFBTyxDQUFDLENBQVc7QUFDaEMsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsZUFBZSxtQkFBTyxDQUFDLEVBQWE7QUFDcEMsa0JBQWtCLG1CQUFPLENBQUMsRUFBaUI7QUFDM0MsV0FBVyxtQkFBTyxDQUFDLEVBQVM7QUFDNUIsWUFBWSxtQkFBTyxDQUFDLEVBQVc7QUFDL0IsaUJBQWlCLG1CQUFPLENBQUMsRUFBZ0I7QUFDekMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsWUFBWSxtQkFBTyxDQUFDLENBQVU7QUFDOUIsa0JBQWtCLG1CQUFPLENBQUMsRUFBZ0I7QUFDMUMscUJBQXFCLG1CQUFPLENBQUMsRUFBc0I7QUFDbkQsd0JBQXdCLG1CQUFPLENBQUMsRUFBd0I7O0FBRXhEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxPQUFPO0FBQ1A7QUFDQSxPQUFPLG1DQUFtQyxnQ0FBZ0MsYUFBYTtBQUN2Riw4QkFBOEIsbUNBQW1DLGFBQWE7QUFDOUU7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLHFEQUFxRDtBQUNyRDtBQUNBLGtEQUFrRCxpQkFBaUIsRUFBRTtBQUNyRTtBQUNBLHdEQUF3RCxhQUFhLEVBQUUsRUFBRTtBQUN6RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSIsImZpbGUiOiI2MS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIHJlZGVmaW5lQWxsID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUtYWxsJyk7XG52YXIgbWV0YSA9IHJlcXVpcmUoJy4vX21ldGEnKTtcbnZhciBmb3JPZiA9IHJlcXVpcmUoJy4vX2Zvci1vZicpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuL19hbi1pbnN0YW5jZScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyICRpdGVyRGV0ZWN0ID0gcmVxdWlyZSgnLi9faXRlci1kZXRlY3QnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgaW5oZXJpdElmUmVxdWlyZWQgPSByZXF1aXJlKCcuL19pbmhlcml0LWlmLXJlcXVpcmVkJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE5BTUUsIHdyYXBwZXIsIG1ldGhvZHMsIGNvbW1vbiwgSVNfTUFQLCBJU19XRUFLKSB7XG4gIHZhciBCYXNlID0gZ2xvYmFsW05BTUVdO1xuICB2YXIgQyA9IEJhc2U7XG4gIHZhciBBRERFUiA9IElTX01BUCA/ICdzZXQnIDogJ2FkZCc7XG4gIHZhciBwcm90byA9IEMgJiYgQy5wcm90b3R5cGU7XG4gIHZhciBPID0ge307XG4gIHZhciBmaXhNZXRob2QgPSBmdW5jdGlvbiAoS0VZKSB7XG4gICAgdmFyIGZuID0gcHJvdG9bS0VZXTtcbiAgICByZWRlZmluZShwcm90bywgS0VZLFxuICAgICAgS0VZID09ICdkZWxldGUnID8gZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgcmV0dXJuIElTX1dFQUsgJiYgIWlzT2JqZWN0KGEpID8gZmFsc2UgOiBmbi5jYWxsKHRoaXMsIGEgPT09IDAgPyAwIDogYSk7XG4gICAgICB9IDogS0VZID09ICdoYXMnID8gZnVuY3Rpb24gaGFzKGEpIHtcbiAgICAgICAgcmV0dXJuIElTX1dFQUsgJiYgIWlzT2JqZWN0KGEpID8gZmFsc2UgOiBmbi5jYWxsKHRoaXMsIGEgPT09IDAgPyAwIDogYSk7XG4gICAgICB9IDogS0VZID09ICdnZXQnID8gZnVuY3Rpb24gZ2V0KGEpIHtcbiAgICAgICAgcmV0dXJuIElTX1dFQUsgJiYgIWlzT2JqZWN0KGEpID8gdW5kZWZpbmVkIDogZm4uY2FsbCh0aGlzLCBhID09PSAwID8gMCA6IGEpO1xuICAgICAgfSA6IEtFWSA9PSAnYWRkJyA/IGZ1bmN0aW9uIGFkZChhKSB7IGZuLmNhbGwodGhpcywgYSA9PT0gMCA/IDAgOiBhKTsgcmV0dXJuIHRoaXM7IH1cbiAgICAgICAgOiBmdW5jdGlvbiBzZXQoYSwgYikgeyBmbi5jYWxsKHRoaXMsIGEgPT09IDAgPyAwIDogYSwgYik7IHJldHVybiB0aGlzOyB9XG4gICAgKTtcbiAgfTtcbiAgaWYgKHR5cGVvZiBDICE9ICdmdW5jdGlvbicgfHwgIShJU19XRUFLIHx8IHByb3RvLmZvckVhY2ggJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICBuZXcgQygpLmVudHJpZXMoKS5uZXh0KCk7XG4gIH0pKSkge1xuICAgIC8vIGNyZWF0ZSBjb2xsZWN0aW9uIGNvbnN0cnVjdG9yXG4gICAgQyA9IGNvbW1vbi5nZXRDb25zdHJ1Y3Rvcih3cmFwcGVyLCBOQU1FLCBJU19NQVAsIEFEREVSKTtcbiAgICByZWRlZmluZUFsbChDLnByb3RvdHlwZSwgbWV0aG9kcyk7XG4gICAgbWV0YS5ORUVEID0gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgaW5zdGFuY2UgPSBuZXcgQygpO1xuICAgIC8vIGVhcmx5IGltcGxlbWVudGF0aW9ucyBub3Qgc3VwcG9ydHMgY2hhaW5pbmdcbiAgICB2YXIgSEFTTlRfQ0hBSU5JTkcgPSBpbnN0YW5jZVtBRERFUl0oSVNfV0VBSyA/IHt9IDogLTAsIDEpICE9IGluc3RhbmNlO1xuICAgIC8vIFY4IH4gIENocm9taXVtIDQwLSB3ZWFrLWNvbGxlY3Rpb25zIHRocm93cyBvbiBwcmltaXRpdmVzLCBidXQgc2hvdWxkIHJldHVybiBmYWxzZVxuICAgIHZhciBUSFJPV1NfT05fUFJJTUlUSVZFUyA9IGZhaWxzKGZ1bmN0aW9uICgpIHsgaW5zdGFuY2UuaGFzKDEpOyB9KTtcbiAgICAvLyBtb3N0IGVhcmx5IGltcGxlbWVudGF0aW9ucyBkb2Vzbid0IHN1cHBvcnRzIGl0ZXJhYmxlcywgbW9zdCBtb2Rlcm4gLSBub3QgY2xvc2UgaXQgY29ycmVjdGx5XG4gICAgdmFyIEFDQ0VQVF9JVEVSQUJMRVMgPSAkaXRlckRldGVjdChmdW5jdGlvbiAoaXRlcikgeyBuZXcgQyhpdGVyKTsgfSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgLy8gZm9yIGVhcmx5IGltcGxlbWVudGF0aW9ucyAtMCBhbmQgKzAgbm90IHRoZSBzYW1lXG4gICAgdmFyIEJVR0dZX1pFUk8gPSAhSVNfV0VBSyAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBWOCB+IENocm9taXVtIDQyLSBmYWlscyBvbmx5IHdpdGggNSsgZWxlbWVudHNcbiAgICAgIHZhciAkaW5zdGFuY2UgPSBuZXcgQygpO1xuICAgICAgdmFyIGluZGV4ID0gNTtcbiAgICAgIHdoaWxlIChpbmRleC0tKSAkaW5zdGFuY2VbQURERVJdKGluZGV4LCBpbmRleCk7XG4gICAgICByZXR1cm4gISRpbnN0YW5jZS5oYXMoLTApO1xuICAgIH0pO1xuICAgIGlmICghQUNDRVBUX0lURVJBQkxFUykge1xuICAgICAgQyA9IHdyYXBwZXIoZnVuY3Rpb24gKHRhcmdldCwgaXRlcmFibGUpIHtcbiAgICAgICAgYW5JbnN0YW5jZSh0YXJnZXQsIEMsIE5BTUUpO1xuICAgICAgICB2YXIgdGhhdCA9IGluaGVyaXRJZlJlcXVpcmVkKG5ldyBCYXNlKCksIHRhcmdldCwgQyk7XG4gICAgICAgIGlmIChpdGVyYWJsZSAhPSB1bmRlZmluZWQpIGZvck9mKGl0ZXJhYmxlLCBJU19NQVAsIHRoYXRbQURERVJdLCB0aGF0KTtcbiAgICAgICAgcmV0dXJuIHRoYXQ7XG4gICAgICB9KTtcbiAgICAgIEMucHJvdG90eXBlID0gcHJvdG87XG4gICAgICBwcm90by5jb25zdHJ1Y3RvciA9IEM7XG4gICAgfVxuICAgIGlmIChUSFJPV1NfT05fUFJJTUlUSVZFUyB8fCBCVUdHWV9aRVJPKSB7XG4gICAgICBmaXhNZXRob2QoJ2RlbGV0ZScpO1xuICAgICAgZml4TWV0aG9kKCdoYXMnKTtcbiAgICAgIElTX01BUCAmJiBmaXhNZXRob2QoJ2dldCcpO1xuICAgIH1cbiAgICBpZiAoQlVHR1lfWkVSTyB8fCBIQVNOVF9DSEFJTklORykgZml4TWV0aG9kKEFEREVSKTtcbiAgICAvLyB3ZWFrIGNvbGxlY3Rpb25zIHNob3VsZCBub3QgY29udGFpbnMgLmNsZWFyIG1ldGhvZFxuICAgIGlmIChJU19XRUFLICYmIHByb3RvLmNsZWFyKSBkZWxldGUgcHJvdG8uY2xlYXI7XG4gIH1cblxuICBzZXRUb1N0cmluZ1RhZyhDLCBOQU1FKTtcblxuICBPW05BTUVdID0gQztcbiAgJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LlcgKyAkZXhwb3J0LkYgKiAoQyAhPSBCYXNlKSwgTyk7XG5cbiAgaWYgKCFJU19XRUFLKSBjb21tb24uc2V0U3Ryb25nKEMsIE5BTUUsIElTX01BUCk7XG5cbiAgcmV0dXJuIEM7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///61\n")},function(module,exports,__webpack_require__){eval("var global = __webpack_require__(2);\nvar hide = __webpack_require__(11);\nvar uid = __webpack_require__(33);\nvar TYPED = uid('typed_array');\nvar VIEW = uid('view');\nvar ABV = !!(global.ArrayBuffer && global.DataView);\nvar CONSTR = ABV;\nvar i = 0;\nvar l = 9;\nvar Typed;\n\nvar TypedArrayConstructors = (\n 'Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array'\n).split(',');\n\nwhile (i < l) {\n if (Typed = global[TypedArrayConstructors[i++]]) {\n hide(Typed.prototype, TYPED, true);\n hide(Typed.prototype, VIEW, true);\n } else CONSTR = false;\n}\n\nmodule.exports = {\n ABV: ABV,\n CONSTR: CONSTR,\n TYPED: TYPED,\n VIEW: VIEW\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdHlwZWQuanM/MGY4OCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxhQUFhLG1CQUFPLENBQUMsQ0FBVztBQUNoQyxXQUFXLG1CQUFPLENBQUMsRUFBUztBQUM1QixVQUFVLG1CQUFPLENBQUMsRUFBUTtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjYyLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi9fdWlkJyk7XG52YXIgVFlQRUQgPSB1aWQoJ3R5cGVkX2FycmF5Jyk7XG52YXIgVklFVyA9IHVpZCgndmlldycpO1xudmFyIEFCViA9ICEhKGdsb2JhbC5BcnJheUJ1ZmZlciAmJiBnbG9iYWwuRGF0YVZpZXcpO1xudmFyIENPTlNUUiA9IEFCVjtcbnZhciBpID0gMDtcbnZhciBsID0gOTtcbnZhciBUeXBlZDtcblxudmFyIFR5cGVkQXJyYXlDb25zdHJ1Y3RvcnMgPSAoXG4gICdJbnQ4QXJyYXksVWludDhBcnJheSxVaW50OENsYW1wZWRBcnJheSxJbnQxNkFycmF5LFVpbnQxNkFycmF5LEludDMyQXJyYXksVWludDMyQXJyYXksRmxvYXQzMkFycmF5LEZsb2F0NjRBcnJheSdcbikuc3BsaXQoJywnKTtcblxud2hpbGUgKGkgPCBsKSB7XG4gIGlmIChUeXBlZCA9IGdsb2JhbFtUeXBlZEFycmF5Q29uc3RydWN0b3JzW2krK11dKSB7XG4gICAgaGlkZShUeXBlZC5wcm90b3R5cGUsIFRZUEVELCB0cnVlKTtcbiAgICBoaWRlKFR5cGVkLnByb3RvdHlwZSwgVklFVywgdHJ1ZSk7XG4gIH0gZWxzZSBDT05TVFIgPSBmYWxzZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEFCVjogQUJWLFxuICBDT05TVFI6IENPTlNUUixcbiAgVFlQRUQ6IFRZUEVELFxuICBWSUVXOiBWSUVXXG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///62\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// Forced replacement prototype accessors methods\nmodule.exports = __webpack_require__(29) || !__webpack_require__(3)(function () {\n var K = Math.random();\n // In FF throws only define methods\n // eslint-disable-next-line no-undef, no-useless-call\n __defineSetter__.call(null, K, function () { /* empty */ });\n delete __webpack_require__(2)[K];\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWZvcmNlZC1wYW0uanM/YzViNCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsaUJBQWlCLG1CQUFPLENBQUMsRUFBWSxNQUFNLG1CQUFPLENBQUMsQ0FBVTtBQUM3RDtBQUNBO0FBQ0E7QUFDQSw4Q0FBOEMsY0FBYztBQUM1RCxTQUFTLG1CQUFPLENBQUMsQ0FBVztBQUM1QixDQUFDIiwiZmlsZSI6IjYzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gRm9yY2VkIHJlcGxhY2VtZW50IHByb3RvdHlwZSBhY2Nlc3NvcnMgbWV0aG9kc1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19saWJyYXJ5JykgfHwgIXJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICB2YXIgSyA9IE1hdGgucmFuZG9tKCk7XG4gIC8vIEluIEZGIHRocm93cyBvbmx5IGRlZmluZSBtZXRob2RzXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZiwgbm8tdXNlbGVzcy1jYWxsXG4gIF9fZGVmaW5lU2V0dGVyX18uY2FsbChudWxsLCBLLCBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pO1xuICBkZWxldGUgcmVxdWlyZSgnLi9fZ2xvYmFsJylbS107XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///63\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// https://tc39.github.io/proposal-setmap-offrom/\nvar $export = __webpack_require__(0);\n\nmodule.exports = function (COLLECTION) {\n $export($export.S, COLLECTION, { of: function of() {\n var length = arguments.length;\n var A = new Array(length);\n while (length--) A[length] = arguments[length];\n return new this(A);\n } });\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2V0LWNvbGxlY3Rpb24tb2YuanM/YzZhMSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDO0FBQ0Esa0NBQWtDO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRyxFQUFFO0FBQ0wiLCJmaWxlIjoiNjQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChDT0xMRUNUSU9OKSB7XG4gICRleHBvcnQoJGV4cG9ydC5TLCBDT0xMRUNUSU9OLCB7IG9mOiBmdW5jdGlvbiBvZigpIHtcbiAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgQSA9IG5ldyBBcnJheShsZW5ndGgpO1xuICAgIHdoaWxlIChsZW5ndGgtLSkgQVtsZW5ndGhdID0gYXJndW1lbnRzW2xlbmd0aF07XG4gICAgcmV0dXJuIG5ldyB0aGlzKEEpO1xuICB9IH0pO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///64\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// https://tc39.github.io/proposal-setmap-offrom/\nvar $export = __webpack_require__(0);\nvar aFunction = __webpack_require__(10);\nvar ctx = __webpack_require__(19);\nvar forOf = __webpack_require__(40);\n\nmodule.exports = function (COLLECTION) {\n $export($export.S, COLLECTION, { from: function from(source /* , mapFn, thisArg */) {\n var mapFn = arguments[1];\n var mapping, A, n, cb;\n aFunction(this);\n mapping = mapFn !== undefined;\n if (mapping) aFunction(mapFn);\n if (source == undefined) return new this();\n A = [];\n if (mapping) {\n n = 0;\n cb = ctx(mapFn, arguments[2], 2);\n forOf(source, false, function (nextItem) {\n A.push(cb(nextItem, n++));\n });\n } else {\n forOf(source, false, A.push, A);\n }\n return new this(A);\n } });\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2V0LWNvbGxlY3Rpb24tZnJvbS5qcz8yOGU0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDLFVBQVUsbUJBQU8sQ0FBQyxFQUFRO0FBQzFCLFlBQVksbUJBQU8sQ0FBQyxFQUFXOztBQUUvQjtBQUNBLGtDQUFrQztBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEdBQUcsRUFBRTtBQUNMIiwiZmlsZSI6IjY1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgZm9yT2YgPSByZXF1aXJlKCcuL19mb3Itb2YnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQ09MTEVDVElPTikge1xuICAkZXhwb3J0KCRleHBvcnQuUywgQ09MTEVDVElPTiwgeyBmcm9tOiBmdW5jdGlvbiBmcm9tKHNvdXJjZSAvKiAsIG1hcEZuLCB0aGlzQXJnICovKSB7XG4gICAgdmFyIG1hcEZuID0gYXJndW1lbnRzWzFdO1xuICAgIHZhciBtYXBwaW5nLCBBLCBuLCBjYjtcbiAgICBhRnVuY3Rpb24odGhpcyk7XG4gICAgbWFwcGluZyA9IG1hcEZuICE9PSB1bmRlZmluZWQ7XG4gICAgaWYgKG1hcHBpbmcpIGFGdW5jdGlvbihtYXBGbik7XG4gICAgaWYgKHNvdXJjZSA9PSB1bmRlZmluZWQpIHJldHVybiBuZXcgdGhpcygpO1xuICAgIEEgPSBbXTtcbiAgICBpZiAobWFwcGluZykge1xuICAgICAgbiA9IDA7XG4gICAgICBjYiA9IGN0eChtYXBGbiwgYXJndW1lbnRzWzJdLCAyKTtcbiAgICAgIGZvck9mKHNvdXJjZSwgZmFsc2UsIGZ1bmN0aW9uIChuZXh0SXRlbSkge1xuICAgICAgICBBLnB1c2goY2IobmV4dEl0ZW0sIG4rKykpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvck9mKHNvdXJjZSwgZmFsc2UsIEEucHVzaCwgQSk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgdGhpcyhBKTtcbiAgfSB9KTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///65\n")},function(module,exports,__webpack_require__){eval("var isObject = __webpack_require__(4);\nvar document = __webpack_require__(2).document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n return is ? document.createElement(it) : {};\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZG9tLWNyZWF0ZS5qcz8yMzBlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGVBQWUsbUJBQU8sQ0FBQyxDQUFXO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiNjYuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBkb2N1bWVudCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLmRvY3VtZW50O1xuLy8gdHlwZW9mIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQgaXMgJ29iamVjdCcgaW4gb2xkIElFXG52YXIgaXMgPSBpc09iamVjdChkb2N1bWVudCkgJiYgaXNPYmplY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXMgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGl0KSA6IHt9O1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///66\n")},function(module,exports,__webpack_require__){eval("var global = __webpack_require__(2);\nvar core = __webpack_require__(18);\nvar LIBRARY = __webpack_require__(29);\nvar wksExt = __webpack_require__(95);\nvar defineProperty = __webpack_require__(8).f;\nmodule.exports = function (name) {\n var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});\n if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) });\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fd2tzLWRlZmluZS5qcz8zYTcyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGFBQWEsbUJBQU8sQ0FBQyxDQUFXO0FBQ2hDLFdBQVcsbUJBQU8sQ0FBQyxFQUFTO0FBQzVCLGNBQWMsbUJBQU8sQ0FBQyxFQUFZO0FBQ2xDLGFBQWEsbUJBQU8sQ0FBQyxFQUFZO0FBQ2pDLHFCQUFxQixtQkFBTyxDQUFDLENBQWM7QUFDM0M7QUFDQSwwREFBMEQsc0JBQXNCO0FBQ2hGLGtGQUFrRix3QkFBd0I7QUFDMUciLCJmaWxlIjoiNjcuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgY29yZSA9IHJlcXVpcmUoJy4vX2NvcmUnKTtcbnZhciBMSUJSQVJZID0gcmVxdWlyZSgnLi9fbGlicmFyeScpO1xudmFyIHdrc0V4dCA9IHJlcXVpcmUoJy4vX3drcy1leHQnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIHZhciAkU3ltYm9sID0gY29yZS5TeW1ib2wgfHwgKGNvcmUuU3ltYm9sID0gTElCUkFSWSA/IHt9IDogZ2xvYmFsLlN5bWJvbCB8fCB7fSk7XG4gIGlmIChuYW1lLmNoYXJBdCgwKSAhPSAnXycgJiYgIShuYW1lIGluICRTeW1ib2wpKSBkZWZpbmVQcm9wZXJ0eSgkU3ltYm9sLCBuYW1lLCB7IHZhbHVlOiB3a3NFeHQuZihuYW1lKSB9KTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///67\n")},function(module,exports,__webpack_require__){eval("var shared = __webpack_require__(47)('keys');\nvar uid = __webpack_require__(33);\nmodule.exports = function (key) {\n return shared[key] || (shared[key] = uid(key));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2hhcmVkLWtleS5qcz82MTNiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGFBQWEsbUJBQU8sQ0FBQyxFQUFXO0FBQ2hDLFVBQVUsbUJBQU8sQ0FBQyxFQUFRO0FBQzFCO0FBQ0E7QUFDQSIsImZpbGUiOiI2OC5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBzaGFyZWQgPSByZXF1aXJlKCcuL19zaGFyZWQnKSgna2V5cycpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4vX3VpZCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiBzaGFyZWRba2V5XSB8fCAoc2hhcmVkW2tleV0gPSB1aWQoa2V5KSk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///68\n")},function(module,exports){eval("// IE 8- don't enum bug keys\nmodule.exports = (\n 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZW51bS1idWcta2V5cy5qcz9lMTFlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjY5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gSUUgOC0gZG9uJ3QgZW51bSBidWcga2V5c1xubW9kdWxlLmV4cG9ydHMgPSAoXG4gICdjb25zdHJ1Y3RvcixoYXNPd25Qcm9wZXJ0eSxpc1Byb3RvdHlwZU9mLHByb3BlcnR5SXNFbnVtZXJhYmxlLHRvTG9jYWxlU3RyaW5nLHRvU3RyaW5nLHZhbHVlT2YnXG4pLnNwbGl0KCcsJyk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///69\n")},function(module,exports,__webpack_require__){eval("var document = __webpack_require__(2).document;\nmodule.exports = document && document.documentElement;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faHRtbC5qcz9mYWIyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGVBQWUsbUJBQU8sQ0FBQyxDQUFXO0FBQ2xDIiwiZmlsZSI6IjcwLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGRvY3VtZW50ID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuZG9jdW1lbnQ7XG5tb2R1bGUuZXhwb3J0cyA9IGRvY3VtZW50ICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///70\n")},function(module,exports,__webpack_require__){eval("// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nvar isObject = __webpack_require__(4);\nvar anObject = __webpack_require__(1);\nvar check = function (O, proto) {\n anObject(O);\n if (!isObject(proto) && proto !== null) throw TypeError(proto + \": can't set as prototype!\");\n};\nmodule.exports = {\n set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line\n function (test, buggy, set) {\n try {\n set = __webpack_require__(19)(Function.call, __webpack_require__(16).f(Object.prototype, '__proto__').set, 2);\n set(test, []);\n buggy = !(test instanceof Array);\n } catch (e) { buggy = true; }\n return function setPrototypeOf(O, proto) {\n check(O, proto);\n if (buggy) O.__proto__ = proto;\n else set(O, proto);\n return O;\n };\n }({}, false) : undefined),\n check: check\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2V0LXByb3RvLmpzPzhiOTciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrREFBa0Q7QUFDbEQ7QUFDQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxFQUFRLGlCQUFpQixtQkFBTyxDQUFDLEVBQWdCO0FBQ3ZFO0FBQ0E7QUFDQSxPQUFPLFlBQVksY0FBYztBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLLEdBQUc7QUFDUjtBQUNBIiwiZmlsZSI6IjcxLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gV29ya3Mgd2l0aCBfX3Byb3RvX18gb25seS4gT2xkIHY4IGNhbid0IHdvcmsgd2l0aCBudWxsIHByb3RvIG9iamVjdHMuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90byAqL1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBjaGVjayA9IGZ1bmN0aW9uIChPLCBwcm90bykge1xuICBhbk9iamVjdChPKTtcbiAgaWYgKCFpc09iamVjdChwcm90bykgJiYgcHJvdG8gIT09IG51bGwpIHRocm93IFR5cGVFcnJvcihwcm90byArIFwiOiBjYW4ndCBzZXQgYXMgcHJvdG90eXBlIVwiKTtcbn07XG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc2V0OiBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgKCdfX3Byb3RvX18nIGluIHt9ID8gLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICAgIGZ1bmN0aW9uICh0ZXN0LCBidWdneSwgc2V0KSB7XG4gICAgICB0cnkge1xuICAgICAgICBzZXQgPSByZXF1aXJlKCcuL19jdHgnKShGdW5jdGlvbi5jYWxsLCByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpLmYoT2JqZWN0LnByb3RvdHlwZSwgJ19fcHJvdG9fXycpLnNldCwgMik7XG4gICAgICAgIHNldCh0ZXN0LCBbXSk7XG4gICAgICAgIGJ1Z2d5ID0gISh0ZXN0IGluc3RhbmNlb2YgQXJyYXkpO1xuICAgICAgfSBjYXRjaCAoZSkgeyBidWdneSA9IHRydWU7IH1cbiAgICAgIHJldHVybiBmdW5jdGlvbiBzZXRQcm90b3R5cGVPZihPLCBwcm90bykge1xuICAgICAgICBjaGVjayhPLCBwcm90byk7XG4gICAgICAgIGlmIChidWdneSkgTy5fX3Byb3RvX18gPSBwcm90bztcbiAgICAgICAgZWxzZSBzZXQoTywgcHJvdG8pO1xuICAgICAgICByZXR1cm4gTztcbiAgICAgIH07XG4gICAgfSh7fSwgZmFsc2UpIDogdW5kZWZpbmVkKSxcbiAgY2hlY2s6IGNoZWNrXG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///71\n")},function(module,exports){eval("module.exports = '\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003' +\n '\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF';\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLXdzLmpzP2ZkZWYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSIsImZpbGUiOiI3Mi5qcyIsInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gJ1xceDA5XFx4MEFcXHgwQlxceDBDXFx4MERcXHgyMFxceEEwXFx1MTY4MFxcdTE4MEVcXHUyMDAwXFx1MjAwMVxcdTIwMDJcXHUyMDAzJyArXG4gICdcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBBXFx1MjAyRlxcdTIwNUZcXHUzMDAwXFx1MjAyOFxcdTIwMjlcXHVGRUZGJztcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///72\n")},function(module,exports,__webpack_require__){eval("var isObject = __webpack_require__(4);\nvar setPrototypeOf = __webpack_require__(71).set;\nmodule.exports = function (that, target, C) {\n var S = target.constructor;\n var P;\n if (S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && isObject(P) && setPrototypeOf) {\n setPrototypeOf(that, P);\n } return that;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faW5oZXJpdC1pZi1yZXF1aXJlZC5qcz81ZGJjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLHFCQUFxQixtQkFBTyxDQUFDLEVBQWM7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCIsImZpbGUiOiI3My5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIHNldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fc2V0LXByb3RvJykuc2V0O1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGhhdCwgdGFyZ2V0LCBDKSB7XG4gIHZhciBTID0gdGFyZ2V0LmNvbnN0cnVjdG9yO1xuICB2YXIgUDtcbiAgaWYgKFMgIT09IEMgJiYgdHlwZW9mIFMgPT0gJ2Z1bmN0aW9uJyAmJiAoUCA9IFMucHJvdG90eXBlKSAhPT0gQy5wcm90b3R5cGUgJiYgaXNPYmplY3QoUCkgJiYgc2V0UHJvdG90eXBlT2YpIHtcbiAgICBzZXRQcm90b3R5cGVPZih0aGF0LCBQKTtcbiAgfSByZXR1cm4gdGhhdDtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///73\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar toInteger = __webpack_require__(21);\nvar defined = __webpack_require__(24);\n\nmodule.exports = function repeat(count) {\n var str = String(defined(this));\n var res = '';\n var n = toInteger(count);\n if (n < 0 || n == Infinity) throw RangeError(\"Count can't be negative\");\n for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) res += str;\n return res;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLXJlcGVhdC5qcz85NzQ0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2QyxjQUFjLG1CQUFPLENBQUMsRUFBWTs7QUFFbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsTUFBTTtBQUNkO0FBQ0EiLCJmaWxlIjoiNzQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gcmVwZWF0KGNvdW50KSB7XG4gIHZhciBzdHIgPSBTdHJpbmcoZGVmaW5lZCh0aGlzKSk7XG4gIHZhciByZXMgPSAnJztcbiAgdmFyIG4gPSB0b0ludGVnZXIoY291bnQpO1xuICBpZiAobiA8IDAgfHwgbiA9PSBJbmZpbml0eSkgdGhyb3cgUmFuZ2VFcnJvcihcIkNvdW50IGNhbid0IGJlIG5lZ2F0aXZlXCIpO1xuICBmb3IgKDtuID4gMDsgKG4gPj4+PSAxKSAmJiAoc3RyICs9IHN0cikpIGlmIChuICYgMSkgcmVzICs9IHN0cjtcbiAgcmV0dXJuIHJlcztcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///74\n")},function(module,exports){eval("// 20.2.2.28 Math.sign(x)\nmodule.exports = Math.sign || function sign(x) {\n // eslint-disable-next-line no-self-compare\n return (x = +x) == 0 || x != x ? x : x < 0 ? -1 : 1;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWF0aC1zaWduLmpzPzk2ZmIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiI3NS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDIwLjIuMi4yOCBNYXRoLnNpZ24oeClcbm1vZHVsZS5leHBvcnRzID0gTWF0aC5zaWduIHx8IGZ1bmN0aW9uIHNpZ24oeCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gIHJldHVybiAoeCA9ICt4KSA9PSAwIHx8IHggIT0geCA/IHggOiB4IDwgMCA/IC0xIDogMTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///75\n")},function(module,exports){eval("// 20.2.2.14 Math.expm1(x)\nvar $expm1 = Math.expm1;\nmodule.exports = (!$expm1\n // Old FF bug\n || $expm1(10) > 22025.465794806719 || $expm1(10) < 22025.4657948067165168\n // Tor Browser bug\n || $expm1(-2e-17) != -2e-17\n) ? function expm1(x) {\n return (x = +x) == 0 ? x : x > -1e-6 && x < 1e-6 ? x + x * x / 2 : Math.exp(x) - 1;\n} : $expm1;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWF0aC1leHBtMS5qcz8yZDVjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiNzYuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyMC4yLjIuMTQgTWF0aC5leHBtMSh4KVxudmFyICRleHBtMSA9IE1hdGguZXhwbTE7XG5tb2R1bGUuZXhwb3J0cyA9ICghJGV4cG0xXG4gIC8vIE9sZCBGRiBidWdcbiAgfHwgJGV4cG0xKDEwKSA+IDIyMDI1LjQ2NTc5NDgwNjcxOSB8fCAkZXhwbTEoMTApIDwgMjIwMjUuNDY1Nzk0ODA2NzE2NTE2OFxuICAvLyBUb3IgQnJvd3NlciBidWdcbiAgfHwgJGV4cG0xKC0yZS0xNykgIT0gLTJlLTE3XG4pID8gZnVuY3Rpb24gZXhwbTEoeCkge1xuICByZXR1cm4gKHggPSAreCkgPT0gMCA/IHggOiB4ID4gLTFlLTYgJiYgeCA8IDFlLTYgPyB4ICsgeCAqIHggLyAyIDogTWF0aC5leHAoeCkgLSAxO1xufSA6ICRleHBtMTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///76\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar LIBRARY = __webpack_require__(29);\nvar $export = __webpack_require__(0);\nvar redefine = __webpack_require__(12);\nvar hide = __webpack_require__(11);\nvar Iterators = __webpack_require__(46);\nvar $iterCreate = __webpack_require__(78);\nvar setToStringTag = __webpack_require__(43);\nvar getPrototypeOf = __webpack_require__(17);\nvar ITERATOR = __webpack_require__(5)('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n $iterCreate(Constructor, NAME, next);\n var getMethod = function (kind) {\n if (!BUGGY && kind in proto) return proto[kind];\n switch (kind) {\n case KEYS: return function keys() { return new Constructor(this, kind); };\n case VALUES: return function values() { return new Constructor(this, kind); };\n } return function entries() { return new Constructor(this, kind); };\n };\n var TAG = NAME + ' Iterator';\n var DEF_VALUES = DEFAULT == VALUES;\n var VALUES_BUG = false;\n var proto = Base.prototype;\n var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n var $default = $native || getMethod(DEFAULT);\n var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n var methods, key, IteratorPrototype;\n // Fix native\n if ($anyNative) {\n IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n // Set @@toStringTag to native iterators\n setToStringTag(IteratorPrototype, TAG, true);\n // fix for some old engines\n if (!LIBRARY && typeof IteratorPrototype[ITERATOR] != 'function') hide(IteratorPrototype, ITERATOR, returnThis);\n }\n }\n // fix Array#{values, @@iterator}.name in V8 / FF\n if (DEF_VALUES && $native && $native.name !== VALUES) {\n VALUES_BUG = true;\n $default = function values() { return $native.call(this); };\n }\n // Define iterator\n if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n hide(proto, ITERATOR, $default);\n }\n // Plug for library\n Iterators[NAME] = $default;\n Iterators[TAG] = returnThis;\n if (DEFAULT) {\n methods = {\n values: DEF_VALUES ? $default : getMethod(VALUES),\n keys: IS_SET ? $default : getMethod(KEYS),\n entries: $entries\n };\n if (FORCED) for (key in methods) {\n if (!(key in proto)) redefine(proto, key, methods[key]);\n } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n }\n return methods;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlci1kZWZpbmUuanM/MDFmOSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGNBQWMsbUJBQU8sQ0FBQyxFQUFZO0FBQ2xDLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyxFQUFhO0FBQ3BDLFdBQVcsbUJBQU8sQ0FBQyxFQUFTO0FBQzVCLGdCQUFnQixtQkFBTyxDQUFDLEVBQWM7QUFDdEMsa0JBQWtCLG1CQUFPLENBQUMsRUFBZ0I7QUFDMUMscUJBQXFCLG1CQUFPLENBQUMsRUFBc0I7QUFDbkQscUJBQXFCLG1CQUFPLENBQUMsRUFBZTtBQUM1QyxlQUFlLG1CQUFPLENBQUMsQ0FBUTtBQUMvQiw4Q0FBOEM7QUFDOUM7QUFDQTtBQUNBOztBQUVBLDhCQUE4QixhQUFhOztBQUUzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUNBQXlDLG9DQUFvQztBQUM3RSw2Q0FBNkMsb0NBQW9DO0FBQ2pGLEtBQUssNEJBQTRCLG9DQUFvQztBQUNyRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLG1CQUFtQjtBQUNuQztBQUNBO0FBQ0Esa0NBQWtDLDJCQUEyQjtBQUM3RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EiLCJmaWxlIjoiNzcuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgTElCUkFSWSA9IHJlcXVpcmUoJy4vX2xpYnJhcnknKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJyk7XG52YXIgJGl0ZXJDcmVhdGUgPSByZXF1aXJlKCcuL19pdGVyLWNyZWF0ZScpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBJVEVSQVRPUiA9IHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpO1xudmFyIEJVR0dZID0gIShbXS5rZXlzICYmICduZXh0JyBpbiBbXS5rZXlzKCkpOyAvLyBTYWZhcmkgaGFzIGJ1Z2d5IGl0ZXJhdG9ycyB3L28gYG5leHRgXG52YXIgRkZfSVRFUkFUT1IgPSAnQEBpdGVyYXRvcic7XG52YXIgS0VZUyA9ICdrZXlzJztcbnZhciBWQUxVRVMgPSAndmFsdWVzJztcblxudmFyIHJldHVyblRoaXMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChCYXNlLCBOQU1FLCBDb25zdHJ1Y3RvciwgbmV4dCwgREVGQVVMVCwgSVNfU0VULCBGT1JDRUQpIHtcbiAgJGl0ZXJDcmVhdGUoQ29uc3RydWN0b3IsIE5BTUUsIG5leHQpO1xuICB2YXIgZ2V0TWV0aG9kID0gZnVuY3Rpb24gKGtpbmQpIHtcbiAgICBpZiAoIUJVR0dZICYmIGtpbmQgaW4gcHJvdG8pIHJldHVybiBwcm90b1traW5kXTtcbiAgICBzd2l0Y2ggKGtpbmQpIHtcbiAgICAgIGNhc2UgS0VZUzogcmV0dXJuIGZ1bmN0aW9uIGtleXMoKSB7IHJldHVybiBuZXcgQ29uc3RydWN0b3IodGhpcywga2luZCk7IH07XG4gICAgICBjYXNlIFZBTFVFUzogcmV0dXJuIGZ1bmN0aW9uIHZhbHVlcygpIHsgcmV0dXJuIG5ldyBDb25zdHJ1Y3Rvcih0aGlzLCBraW5kKTsgfTtcbiAgICB9IHJldHVybiBmdW5jdGlvbiBlbnRyaWVzKCkgeyByZXR1cm4gbmV3IENvbnN0cnVjdG9yKHRoaXMsIGtpbmQpOyB9O1xuICB9O1xuICB2YXIgVEFHID0gTkFNRSArICcgSXRlcmF0b3InO1xuICB2YXIgREVGX1ZBTFVFUyA9IERFRkFVTFQgPT0gVkFMVUVTO1xuICB2YXIgVkFMVUVTX0JVRyA9IGZhbHNlO1xuICB2YXIgcHJvdG8gPSBCYXNlLnByb3RvdHlwZTtcbiAgdmFyICRuYXRpdmUgPSBwcm90b1tJVEVSQVRPUl0gfHwgcHJvdG9bRkZfSVRFUkFUT1JdIHx8IERFRkFVTFQgJiYgcHJvdG9bREVGQVVMVF07XG4gIHZhciAkZGVmYXVsdCA9ICRuYXRpdmUgfHwgZ2V0TWV0aG9kKERFRkFVTFQpO1xuICB2YXIgJGVudHJpZXMgPSBERUZBVUxUID8gIURFRl9WQUxVRVMgPyAkZGVmYXVsdCA6IGdldE1ldGhvZCgnZW50cmllcycpIDogdW5kZWZpbmVkO1xuICB2YXIgJGFueU5hdGl2ZSA9IE5BTUUgPT0gJ0FycmF5JyA/IHByb3RvLmVudHJpZXMgfHwgJG5hdGl2ZSA6ICRuYXRpdmU7XG4gIHZhciBtZXRob2RzLCBrZXksIEl0ZXJhdG9yUHJvdG90eXBlO1xuICAvLyBGaXggbmF0aXZlXG4gIGlmICgkYW55TmF0aXZlKSB7XG4gICAgSXRlcmF0b3JQcm90b3R5cGUgPSBnZXRQcm90b3R5cGVPZigkYW55TmF0aXZlLmNhbGwobmV3IEJhc2UoKSkpO1xuICAgIGlmIChJdGVyYXRvclByb3RvdHlwZSAhPT0gT2JqZWN0LnByb3RvdHlwZSAmJiBJdGVyYXRvclByb3RvdHlwZS5uZXh0KSB7XG4gICAgICAvLyBTZXQgQEB0b1N0cmluZ1RhZyB0byBuYXRpdmUgaXRlcmF0b3JzXG4gICAgICBzZXRUb1N0cmluZ1RhZyhJdGVyYXRvclByb3RvdHlwZSwgVEFHLCB0cnVlKTtcbiAgICAgIC8vIGZpeCBmb3Igc29tZSBvbGQgZW5naW5lc1xuICAgICAgaWYgKCFMSUJSQVJZICYmIHR5cGVvZiBJdGVyYXRvclByb3RvdHlwZVtJVEVSQVRPUl0gIT0gJ2Z1bmN0aW9uJykgaGlkZShJdGVyYXRvclByb3RvdHlwZSwgSVRFUkFUT1IsIHJldHVyblRoaXMpO1xuICAgIH1cbiAgfVxuICAvLyBmaXggQXJyYXkje3ZhbHVlcywgQEBpdGVyYXRvcn0ubmFtZSBpbiBWOCAvIEZGXG4gIGlmIChERUZfVkFMVUVTICYmICRuYXRpdmUgJiYgJG5hdGl2ZS5uYW1lICE9PSBWQUxVRVMpIHtcbiAgICBWQUxVRVNfQlVHID0gdHJ1ZTtcbiAgICAkZGVmYXVsdCA9IGZ1bmN0aW9uIHZhbHVlcygpIHsgcmV0dXJuICRuYXRpdmUuY2FsbCh0aGlzKTsgfTtcbiAgfVxuICAvLyBEZWZpbmUgaXRlcmF0b3JcbiAgaWYgKCghTElCUkFSWSB8fCBGT1JDRUQpICYmIChCVUdHWSB8fCBWQUxVRVNfQlVHIHx8ICFwcm90b1tJVEVSQVRPUl0pKSB7XG4gICAgaGlkZShwcm90bywgSVRFUkFUT1IsICRkZWZhdWx0KTtcbiAgfVxuICAvLyBQbHVnIGZvciBsaWJyYXJ5XG4gIEl0ZXJhdG9yc1tOQU1FXSA9ICRkZWZhdWx0O1xuICBJdGVyYXRvcnNbVEFHXSA9IHJldHVyblRoaXM7XG4gIGlmIChERUZBVUxUKSB7XG4gICAgbWV0aG9kcyA9IHtcbiAgICAgIHZhbHVlczogREVGX1ZBTFVFUyA/ICRkZWZhdWx0IDogZ2V0TWV0aG9kKFZBTFVFUyksXG4gICAgICBrZXlzOiBJU19TRVQgPyAkZGVmYXVsdCA6IGdldE1ldGhvZChLRVlTKSxcbiAgICAgIGVudHJpZXM6ICRlbnRyaWVzXG4gICAgfTtcbiAgICBpZiAoRk9SQ0VEKSBmb3IgKGtleSBpbiBtZXRob2RzKSB7XG4gICAgICBpZiAoIShrZXkgaW4gcHJvdG8pKSByZWRlZmluZShwcm90bywga2V5LCBtZXRob2RzW2tleV0pO1xuICAgIH0gZWxzZSAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIChCVUdHWSB8fCBWQUxVRVNfQlVHKSwgTkFNRSwgbWV0aG9kcyk7XG4gIH1cbiAgcmV0dXJuIG1ldGhvZHM7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///77\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar create = __webpack_require__(36);\nvar descriptor = __webpack_require__(32);\nvar setToStringTag = __webpack_require__(43);\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\n__webpack_require__(11)(IteratorPrototype, __webpack_require__(5)('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n setToStringTag(Constructor, NAME + ' Iterator');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlci1jcmVhdGUuanM/NDFhMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGFBQWEsbUJBQU8sQ0FBQyxFQUFrQjtBQUN2QyxpQkFBaUIsbUJBQU8sQ0FBQyxFQUFrQjtBQUMzQyxxQkFBcUIsbUJBQU8sQ0FBQyxFQUFzQjtBQUNuRDs7QUFFQTtBQUNBLG1CQUFPLENBQUMsRUFBUyxxQkFBcUIsbUJBQU8sQ0FBQyxDQUFRLDRCQUE0QixhQUFhLEVBQUU7O0FBRWpHO0FBQ0EscURBQXFELDRCQUE0QjtBQUNqRjtBQUNBIiwiZmlsZSI6Ijc4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKTtcbnZhciBkZXNjcmlwdG9yID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBJdGVyYXRvclByb3RvdHlwZSA9IHt9O1xuXG4vLyAyNS4xLjIuMS4xICVJdGVyYXRvclByb3RvdHlwZSVbQEBpdGVyYXRvcl0oKVxucmVxdWlyZSgnLi9faGlkZScpKEl0ZXJhdG9yUHJvdG90eXBlLCByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBOQU1FLCBuZXh0KSB7XG4gIENvbnN0cnVjdG9yLnByb3RvdHlwZSA9IGNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSwgeyBuZXh0OiBkZXNjcmlwdG9yKDEsIG5leHQpIH0pO1xuICBzZXRUb1N0cmluZ1RhZyhDb25zdHJ1Y3RvciwgTkFNRSArICcgSXRlcmF0b3InKTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///78\n")},function(module,exports,__webpack_require__){eval("// helper for String#{startsWith, endsWith, includes}\nvar isRegExp = __webpack_require__(56);\nvar defined = __webpack_require__(24);\n\nmodule.exports = function (that, searchString, NAME) {\n if (isRegExp(searchString)) throw TypeError('String#' + NAME + \" doesn't accept regex!\");\n return String(defined(that));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLWNvbnRleHQuanM/ZDJjOCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxzQkFBc0I7QUFDdEIsZUFBZSxtQkFBTyxDQUFDLEVBQWM7QUFDckMsY0FBYyxtQkFBTyxDQUFDLEVBQVk7O0FBRWxDO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6Ijc5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaGVscGVyIGZvciBTdHJpbmcje3N0YXJ0c1dpdGgsIGVuZHNXaXRoLCBpbmNsdWRlc31cbnZhciBpc1JlZ0V4cCA9IHJlcXVpcmUoJy4vX2lzLXJlZ2V4cCcpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRoYXQsIHNlYXJjaFN0cmluZywgTkFNRSkge1xuICBpZiAoaXNSZWdFeHAoc2VhcmNoU3RyaW5nKSkgdGhyb3cgVHlwZUVycm9yKCdTdHJpbmcjJyArIE5BTUUgKyBcIiBkb2Vzbid0IGFjY2VwdCByZWdleCFcIik7XG4gIHJldHVybiBTdHJpbmcoZGVmaW5lZCh0aGF0KSk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///79\n")},function(module,exports,__webpack_require__){eval("var MATCH = __webpack_require__(5)('match');\nmodule.exports = function (KEY) {\n var re = /./;\n try {\n '/./'[KEY](re);\n } catch (e) {\n try {\n re[MATCH] = false;\n return !'/./'[KEY](re);\n } catch (f) { /* empty */ }\n } return true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZmFpbHMtaXMtcmVnZXhwLmpzPzUxNDciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSxtQkFBTyxDQUFDLENBQVE7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsS0FBSyxZQUFZO0FBQ2pCLEdBQUc7QUFDSCIsImZpbGUiOiI4MC5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBNQVRDSCA9IHJlcXVpcmUoJy4vX3drcycpKCdtYXRjaCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoS0VZKSB7XG4gIHZhciByZSA9IC8uLztcbiAgdHJ5IHtcbiAgICAnLy4vJ1tLRVldKHJlKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHRyeSB7XG4gICAgICByZVtNQVRDSF0gPSBmYWxzZTtcbiAgICAgIHJldHVybiAhJy8uLydbS0VZXShyZSk7XG4gICAgfSBjYXRjaCAoZikgeyAvKiBlbXB0eSAqLyB9XG4gIH0gcmV0dXJuIHRydWU7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///80\n")},function(module,exports,__webpack_require__){eval("// check on default Array iterator\nvar Iterators = __webpack_require__(46);\nvar ITERATOR = __webpack_require__(5)('iterator');\nvar ArrayProto = Array.prototype;\n\nmodule.exports = function (it) {\n return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtYXJyYXktaXRlci5qcz8zM2E0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsZ0JBQWdCLG1CQUFPLENBQUMsRUFBYztBQUN0QyxlQUFlLG1CQUFPLENBQUMsQ0FBUTtBQUMvQjs7QUFFQTtBQUNBO0FBQ0EiLCJmaWxlIjoiODEuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBjaGVjayBvbiBkZWZhdWx0IEFycmF5IGl0ZXJhdG9yXG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJyk7XG52YXIgSVRFUkFUT1IgPSByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKTtcbnZhciBBcnJheVByb3RvID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgIT09IHVuZGVmaW5lZCAmJiAoSXRlcmF0b3JzLkFycmF5ID09PSBpdCB8fCBBcnJheVByb3RvW0lURVJBVE9SXSA9PT0gaXQpO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///81\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $defineProperty = __webpack_require__(8);\nvar createDesc = __webpack_require__(32);\n\nmodule.exports = function (object, index, value) {\n if (index in object) $defineProperty.f(object, index, createDesc(0, value));\n else object[index] = value;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY3JlYXRlLXByb3BlcnR5LmpzP2YxYWUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixzQkFBc0IsbUJBQU8sQ0FBQyxDQUFjO0FBQzVDLGlCQUFpQixtQkFBTyxDQUFDLEVBQWtCOztBQUUzQztBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiI4Mi5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciAkZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciBjcmVhdGVEZXNjID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIGluZGV4LCB2YWx1ZSkge1xuICBpZiAoaW5kZXggaW4gb2JqZWN0KSAkZGVmaW5lUHJvcGVydHkuZihvYmplY3QsIGluZGV4LCBjcmVhdGVEZXNjKDAsIHZhbHVlKSk7XG4gIGVsc2Ugb2JqZWN0W2luZGV4XSA9IHZhbHVlO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///82\n")},function(module,exports,__webpack_require__){eval("var classof = __webpack_require__(44);\nvar ITERATOR = __webpack_require__(5)('iterator');\nvar Iterators = __webpack_require__(46);\nmodule.exports = __webpack_require__(18).getIteratorMethod = function (it) {\n if (it != undefined) return it[ITERATOR]\n || it['@@iterator']\n || Iterators[classof(it)];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9jb3JlLmdldC1pdGVyYXRvci1tZXRob2QuanM/MjdlZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLG1CQUFPLENBQUMsRUFBWTtBQUNsQyxlQUFlLG1CQUFPLENBQUMsQ0FBUTtBQUMvQixnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFjO0FBQ3RDLGlCQUFpQixtQkFBTyxDQUFDLEVBQVM7QUFDbEM7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiODMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4vX2NsYXNzb2YnKTtcbnZhciBJVEVSQVRPUiA9IHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19jb3JlJykuZ2V0SXRlcmF0b3JNZXRob2QgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGl0ICE9IHVuZGVmaW5lZCkgcmV0dXJuIGl0W0lURVJBVE9SXVxuICAgIHx8IGl0WydAQGl0ZXJhdG9yJ11cbiAgICB8fCBJdGVyYXRvcnNbY2xhc3NvZihpdCldO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///83\n")},function(module,exports,__webpack_require__){eval("// 9.4.2.3 ArraySpeciesCreate(originalArray, length)\nvar speciesConstructor = __webpack_require__(223);\n\nmodule.exports = function (original, length) {\n return new (speciesConstructor(original))(length);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktc3BlY2llcy1jcmVhdGUuanM/Y2QxYyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLHlCQUF5QixtQkFBTyxDQUFDLEdBQThCOztBQUUvRDtBQUNBO0FBQ0EiLCJmaWxlIjoiODQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyA5LjQuMi4zIEFycmF5U3BlY2llc0NyZWF0ZShvcmlnaW5hbEFycmF5LCBsZW5ndGgpXG52YXIgc3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi9fYXJyYXktc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcmlnaW5hbCwgbGVuZ3RoKSB7XG4gIHJldHVybiBuZXcgKHNwZWNpZXNDb25zdHJ1Y3RvcihvcmlnaW5hbCkpKGxlbmd0aCk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///84\n")},function(module,exports,__webpack_require__){"use strict";eval("// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\n\nvar toObject = __webpack_require__(9);\nvar toAbsoluteIndex = __webpack_require__(35);\nvar toLength = __webpack_require__(6);\nmodule.exports = function fill(value /* , start = 0, end = @length */) {\n var O = toObject(this);\n var length = toLength(O.length);\n var aLen = arguments.length;\n var index = toAbsoluteIndex(aLen > 1 ? arguments[1] : undefined, length);\n var end = aLen > 2 ? arguments[2] : undefined;\n var endPos = end === undefined ? length : toAbsoluteIndex(end, length);\n while (endPos > index) O[index++] = value;\n return O;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktZmlsbC5qcz8zNmJkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ2E7QUFDYixlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxzQkFBc0IsbUJBQU8sQ0FBQyxFQUFzQjtBQUNwRCxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiI4NS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDIyLjEuMy42IEFycmF5LnByb3RvdHlwZS5maWxsKHZhbHVlLCBzdGFydCA9IDAsIGVuZCA9IHRoaXMubGVuZ3RoKVxuJ3VzZSBzdHJpY3QnO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi9fdG8tYWJzb2x1dGUtaW5kZXgnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBmaWxsKHZhbHVlIC8qICwgc3RhcnQgPSAwLCBlbmQgPSBAbGVuZ3RoICovKSB7XG4gIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gIHZhciBsZW5ndGggPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgdmFyIGluZGV4ID0gdG9BYnNvbHV0ZUluZGV4KGFMZW4gPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkLCBsZW5ndGgpO1xuICB2YXIgZW5kID0gYUxlbiA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQ7XG4gIHZhciBlbmRQb3MgPSBlbmQgPT09IHVuZGVmaW5lZCA/IGxlbmd0aCA6IHRvQWJzb2x1dGVJbmRleChlbmQsIGxlbmd0aCk7XG4gIHdoaWxlIChlbmRQb3MgPiBpbmRleCkgT1tpbmRleCsrXSA9IHZhbHVlO1xuICByZXR1cm4gTztcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///85\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar addToUnscopables = __webpack_require__(31);\nvar step = __webpack_require__(112);\nvar Iterators = __webpack_require__(46);\nvar toIObject = __webpack_require__(15);\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = __webpack_require__(77)(Array, 'Array', function (iterated, kind) {\n this._t = toIObject(iterated); // target\n this._i = 0; // next index\n this._k = kind; // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var kind = this._k;\n var index = this._i++;\n if (!O || index >= O.length) {\n this._t = undefined;\n return step(1);\n }\n if (kind == 'keys') return step(0, index);\n if (kind == 'values') return step(0, O[index]);\n return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuaXRlcmF0b3IuanM/Y2FkZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLHVCQUF1QixtQkFBTyxDQUFDLEVBQXVCO0FBQ3RELFdBQVcsbUJBQU8sQ0FBQyxHQUFjO0FBQ2pDLGdCQUFnQixtQkFBTyxDQUFDLEVBQWM7QUFDdEMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTs7QUFFdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsbUJBQU8sQ0FBQyxFQUFnQjtBQUN6QyxnQ0FBZ0M7QUFDaEMsY0FBYztBQUNkLGlCQUFpQjtBQUNqQjtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0EiLCJmaWxlIjoiODYuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgYWRkVG9VbnNjb3BhYmxlcyA9IHJlcXVpcmUoJy4vX2FkZC10by11bnNjb3BhYmxlcycpO1xudmFyIHN0ZXAgPSByZXF1aXJlKCcuL19pdGVyLXN0ZXAnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG5cbi8vIDIyLjEuMy40IEFycmF5LnByb3RvdHlwZS5lbnRyaWVzKClcbi8vIDIyLjEuMy4xMyBBcnJheS5wcm90b3R5cGUua2V5cygpXG4vLyAyMi4xLjMuMjkgQXJyYXkucHJvdG90eXBlLnZhbHVlcygpXG4vLyAyMi4xLjMuMzAgQXJyYXkucHJvdG90eXBlW0BAaXRlcmF0b3JdKClcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9faXRlci1kZWZpbmUnKShBcnJheSwgJ0FycmF5JywgZnVuY3Rpb24gKGl0ZXJhdGVkLCBraW5kKSB7XG4gIHRoaXMuX3QgPSB0b0lPYmplY3QoaXRlcmF0ZWQpOyAvLyB0YXJnZXRcbiAgdGhpcy5faSA9IDA7ICAgICAgICAgICAgICAgICAgIC8vIG5leHQgaW5kZXhcbiAgdGhpcy5fayA9IGtpbmQ7ICAgICAgICAgICAgICAgIC8vIGtpbmRcbi8vIDIyLjEuNS4yLjEgJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlLm5leHQoKVxufSwgZnVuY3Rpb24gKCkge1xuICB2YXIgTyA9IHRoaXMuX3Q7XG4gIHZhciBraW5kID0gdGhpcy5faztcbiAgdmFyIGluZGV4ID0gdGhpcy5faSsrO1xuICBpZiAoIU8gfHwgaW5kZXggPj0gTy5sZW5ndGgpIHtcbiAgICB0aGlzLl90ID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiBzdGVwKDEpO1xuICB9XG4gIGlmIChraW5kID09ICdrZXlzJykgcmV0dXJuIHN0ZXAoMCwgaW5kZXgpO1xuICBpZiAoa2luZCA9PSAndmFsdWVzJykgcmV0dXJuIHN0ZXAoMCwgT1tpbmRleF0pO1xuICByZXR1cm4gc3RlcCgwLCBbaW5kZXgsIE9baW5kZXhdXSk7XG59LCAndmFsdWVzJyk7XG5cbi8vIGFyZ3VtZW50c0xpc3RbQEBpdGVyYXRvcl0gaXMgJUFycmF5UHJvdG9fdmFsdWVzJSAoOS40LjQuNiwgOS40LjQuNylcbkl0ZXJhdG9ycy5Bcmd1bWVudHMgPSBJdGVyYXRvcnMuQXJyYXk7XG5cbmFkZFRvVW5zY29wYWJsZXMoJ2tleXMnKTtcbmFkZFRvVW5zY29wYWJsZXMoJ3ZhbHVlcycpO1xuYWRkVG9VbnNjb3BhYmxlcygnZW50cmllcycpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///86\n")},function(module,exports,__webpack_require__){"use strict";eval("\n\nvar regexpFlags = __webpack_require__(50);\n\nvar nativeExec = RegExp.prototype.exec;\n// This always refers to the native implementation, because the\n// String#replace polyfill uses ./fix-regexp-well-known-symbol-logic.js,\n// which loads this file before patching the method.\nvar nativeReplace = String.prototype.replace;\n\nvar patchedExec = nativeExec;\n\nvar LAST_INDEX = 'lastIndex';\n\nvar UPDATES_LAST_INDEX_WRONG = (function () {\n var re1 = /a/,\n re2 = /b*/g;\n nativeExec.call(re1, 'a');\n nativeExec.call(re2, 'a');\n return re1[LAST_INDEX] !== 0 || re2[LAST_INDEX] !== 0;\n})();\n\n// nonparticipating capturing group, copied from es5-shim's String#split patch.\nvar NPCG_INCLUDED = /()??/.exec('')[1] !== undefined;\n\nvar PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED;\n\nif (PATCH) {\n patchedExec = function exec(str) {\n var re = this;\n var lastIndex, reCopy, match, i;\n\n if (NPCG_INCLUDED) {\n reCopy = new RegExp('^' + re.source + '$(?!\\\\s)', regexpFlags.call(re));\n }\n if (UPDATES_LAST_INDEX_WRONG) lastIndex = re[LAST_INDEX];\n\n match = nativeExec.call(re, str);\n\n if (UPDATES_LAST_INDEX_WRONG && match) {\n re[LAST_INDEX] = re.global ? match.index + match[0].length : lastIndex;\n }\n if (NPCG_INCLUDED && match && match.length > 1) {\n // Fix browsers whose `exec` methods don't consistently return `undefined`\n // for NPCG, like IE8. NOTE: This doesn' work for /(.?)?/\n // eslint-disable-next-line no-loop-func\n nativeReplace.call(match[0], reCopy, function () {\n for (i = 1; i < arguments.length - 2; i++) {\n if (arguments[i] === undefined) match[i] = undefined;\n }\n });\n }\n\n return match;\n };\n}\n\nmodule.exports = patchedExec;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcmVnZXhwLWV4ZWMuanM/NTIwYSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixrQkFBa0IsbUJBQU8sQ0FBQyxFQUFVOztBQUVwQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLDBCQUEwQjtBQUM3QztBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiI4Ny5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHJlZ2V4cEZsYWdzID0gcmVxdWlyZSgnLi9fZmxhZ3MnKTtcblxudmFyIG5hdGl2ZUV4ZWMgPSBSZWdFeHAucHJvdG90eXBlLmV4ZWM7XG4vLyBUaGlzIGFsd2F5cyByZWZlcnMgdG8gdGhlIG5hdGl2ZSBpbXBsZW1lbnRhdGlvbiwgYmVjYXVzZSB0aGVcbi8vIFN0cmluZyNyZXBsYWNlIHBvbHlmaWxsIHVzZXMgLi9maXgtcmVnZXhwLXdlbGwta25vd24tc3ltYm9sLWxvZ2ljLmpzLFxuLy8gd2hpY2ggbG9hZHMgdGhpcyBmaWxlIGJlZm9yZSBwYXRjaGluZyB0aGUgbWV0aG9kLlxudmFyIG5hdGl2ZVJlcGxhY2UgPSBTdHJpbmcucHJvdG90eXBlLnJlcGxhY2U7XG5cbnZhciBwYXRjaGVkRXhlYyA9IG5hdGl2ZUV4ZWM7XG5cbnZhciBMQVNUX0lOREVYID0gJ2xhc3RJbmRleCc7XG5cbnZhciBVUERBVEVTX0xBU1RfSU5ERVhfV1JPTkcgPSAoZnVuY3Rpb24gKCkge1xuICB2YXIgcmUxID0gL2EvLFxuICAgICAgcmUyID0gL2IqL2c7XG4gIG5hdGl2ZUV4ZWMuY2FsbChyZTEsICdhJyk7XG4gIG5hdGl2ZUV4ZWMuY2FsbChyZTIsICdhJyk7XG4gIHJldHVybiByZTFbTEFTVF9JTkRFWF0gIT09IDAgfHwgcmUyW0xBU1RfSU5ERVhdICE9PSAwO1xufSkoKTtcblxuLy8gbm9ucGFydGljaXBhdGluZyBjYXB0dXJpbmcgZ3JvdXAsIGNvcGllZCBmcm9tIGVzNS1zaGltJ3MgU3RyaW5nI3NwbGl0IHBhdGNoLlxudmFyIE5QQ0dfSU5DTFVERUQgPSAvKCk/Py8uZXhlYygnJylbMV0gIT09IHVuZGVmaW5lZDtcblxudmFyIFBBVENIID0gVVBEQVRFU19MQVNUX0lOREVYX1dST05HIHx8IE5QQ0dfSU5DTFVERUQ7XG5cbmlmIChQQVRDSCkge1xuICBwYXRjaGVkRXhlYyA9IGZ1bmN0aW9uIGV4ZWMoc3RyKSB7XG4gICAgdmFyIHJlID0gdGhpcztcbiAgICB2YXIgbGFzdEluZGV4LCByZUNvcHksIG1hdGNoLCBpO1xuXG4gICAgaWYgKE5QQ0dfSU5DTFVERUQpIHtcbiAgICAgIHJlQ29weSA9IG5ldyBSZWdFeHAoJ14nICsgcmUuc291cmNlICsgJyQoPyFcXFxccyknLCByZWdleHBGbGFncy5jYWxsKHJlKSk7XG4gICAgfVxuICAgIGlmIChVUERBVEVTX0xBU1RfSU5ERVhfV1JPTkcpIGxhc3RJbmRleCA9IHJlW0xBU1RfSU5ERVhdO1xuXG4gICAgbWF0Y2ggPSBuYXRpdmVFeGVjLmNhbGwocmUsIHN0cik7XG5cbiAgICBpZiAoVVBEQVRFU19MQVNUX0lOREVYX1dST05HICYmIG1hdGNoKSB7XG4gICAgICByZVtMQVNUX0lOREVYXSA9IHJlLmdsb2JhbCA/IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoIDogbGFzdEluZGV4O1xuICAgIH1cbiAgICBpZiAoTlBDR19JTkNMVURFRCAmJiBtYXRjaCAmJiBtYXRjaC5sZW5ndGggPiAxKSB7XG4gICAgICAvLyBGaXggYnJvd3NlcnMgd2hvc2UgYGV4ZWNgIG1ldGhvZHMgZG9uJ3QgY29uc2lzdGVudGx5IHJldHVybiBgdW5kZWZpbmVkYFxuICAgICAgLy8gZm9yIE5QQ0csIGxpa2UgSUU4LiBOT1RFOiBUaGlzIGRvZXNuJyB3b3JrIGZvciAvKC4/KT8vXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbG9vcC1mdW5jXG4gICAgICBuYXRpdmVSZXBsYWNlLmNhbGwobWF0Y2hbMF0sIHJlQ29weSwgZnVuY3Rpb24gKCkge1xuICAgICAgICBmb3IgKGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aCAtIDI7IGkrKykge1xuICAgICAgICAgIGlmIChhcmd1bWVudHNbaV0gPT09IHVuZGVmaW5lZCkgbWF0Y2hbaV0gPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBtYXRjaDtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBwYXRjaGVkRXhlYztcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///87\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar at = __webpack_require__(55)(true);\n\n // `AdvanceStringIndex` abstract operation\n// https://tc39.github.io/ecma262/#sec-advancestringindex\nmodule.exports = function (S, index, unicode) {\n return index + (unicode ? at(S, index).length : 1);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYWR2YW5jZS1zdHJpbmctaW5kZXguanM/MDM5MCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLFNBQVMsbUJBQU8sQ0FBQyxFQUFjOztBQUUvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6Ijg4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIGF0ID0gcmVxdWlyZSgnLi9fc3RyaW5nLWF0JykodHJ1ZSk7XG5cbiAvLyBgQWR2YW5jZVN0cmluZ0luZGV4YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFkdmFuY2VzdHJpbmdpbmRleFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoUywgaW5kZXgsIHVuaWNvZGUpIHtcbiAgcmV0dXJuIGluZGV4ICsgKHVuaWNvZGUgPyBhdChTLCBpbmRleCkubGVuZ3RoIDogMSk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///88\n")},function(module,exports,__webpack_require__){eval("var ctx = __webpack_require__(19);\nvar invoke = __webpack_require__(102);\nvar html = __webpack_require__(70);\nvar cel = __webpack_require__(66);\nvar global = __webpack_require__(2);\nvar process = global.process;\nvar setTask = global.setImmediate;\nvar clearTask = global.clearImmediate;\nvar MessageChannel = global.MessageChannel;\nvar Dispatch = global.Dispatch;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar defer, channel, port;\nvar run = function () {\n var id = +this;\n // eslint-disable-next-line no-prototype-builtins\n if (queue.hasOwnProperty(id)) {\n var fn = queue[id];\n delete queue[id];\n fn();\n }\n};\nvar listener = function (event) {\n run.call(event.data);\n};\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!setTask || !clearTask) {\n setTask = function setImmediate(fn) {\n var args = [];\n var i = 1;\n while (arguments.length > i) args.push(arguments[i++]);\n queue[++counter] = function () {\n // eslint-disable-next-line no-new-func\n invoke(typeof fn == 'function' ? fn : Function(fn), args);\n };\n defer(counter);\n return counter;\n };\n clearTask = function clearImmediate(id) {\n delete queue[id];\n };\n // Node.js 0.8-\n if (__webpack_require__(20)(process) == 'process') {\n defer = function (id) {\n process.nextTick(ctx(run, id, 1));\n };\n // Sphere (JS game engine) Dispatch API\n } else if (Dispatch && Dispatch.now) {\n defer = function (id) {\n Dispatch.now(ctx(run, id, 1));\n };\n // Browsers with MessageChannel, includes WebWorkers\n } else if (MessageChannel) {\n channel = new MessageChannel();\n port = channel.port2;\n channel.port1.onmessage = listener;\n defer = ctx(port.postMessage, port, 1);\n // Browsers with postMessage, skip WebWorkers\n // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts) {\n defer = function (id) {\n global.postMessage(id + '', '*');\n };\n global.addEventListener('message', listener, false);\n // IE8-\n } else if (ONREADYSTATECHANGE in cel('script')) {\n defer = function (id) {\n html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () {\n html.removeChild(this);\n run.call(id);\n };\n };\n // Rest old browsers\n } else {\n defer = function (id) {\n setTimeout(ctx(run, id, 1), 0);\n };\n }\n}\nmodule.exports = {\n set: setTask,\n clear: clearTask\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdGFzay5qcz8xOTkxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFVBQVUsbUJBQU8sQ0FBQyxFQUFRO0FBQzFCLGFBQWEsbUJBQU8sQ0FBQyxHQUFXO0FBQ2hDLFdBQVcsbUJBQU8sQ0FBQyxFQUFTO0FBQzVCLFVBQVUsbUJBQU8sQ0FBQyxFQUFlO0FBQ2pDLGFBQWEsbUJBQU8sQ0FBQyxDQUFXO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNLG1CQUFPLENBQUMsRUFBUTtBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiODkuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgaW52b2tlID0gcmVxdWlyZSgnLi9faW52b2tlJyk7XG52YXIgaHRtbCA9IHJlcXVpcmUoJy4vX2h0bWwnKTtcbnZhciBjZWwgPSByZXF1aXJlKCcuL19kb20tY3JlYXRlJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgcHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzO1xudmFyIHNldFRhc2sgPSBnbG9iYWwuc2V0SW1tZWRpYXRlO1xudmFyIGNsZWFyVGFzayA9IGdsb2JhbC5jbGVhckltbWVkaWF0ZTtcbnZhciBNZXNzYWdlQ2hhbm5lbCA9IGdsb2JhbC5NZXNzYWdlQ2hhbm5lbDtcbnZhciBEaXNwYXRjaCA9IGdsb2JhbC5EaXNwYXRjaDtcbnZhciBjb3VudGVyID0gMDtcbnZhciBxdWV1ZSA9IHt9O1xudmFyIE9OUkVBRFlTVEFURUNIQU5HRSA9ICdvbnJlYWR5c3RhdGVjaGFuZ2UnO1xudmFyIGRlZmVyLCBjaGFubmVsLCBwb3J0O1xudmFyIHJ1biA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGlkID0gK3RoaXM7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgaWYgKHF1ZXVlLmhhc093blByb3BlcnR5KGlkKSkge1xuICAgIHZhciBmbiA9IHF1ZXVlW2lkXTtcbiAgICBkZWxldGUgcXVldWVbaWRdO1xuICAgIGZuKCk7XG4gIH1cbn07XG52YXIgbGlzdGVuZXIgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgcnVuLmNhbGwoZXZlbnQuZGF0YSk7XG59O1xuLy8gTm9kZS5qcyAwLjkrICYgSUUxMCsgaGFzIHNldEltbWVkaWF0ZSwgb3RoZXJ3aXNlOlxuaWYgKCFzZXRUYXNrIHx8ICFjbGVhclRhc2spIHtcbiAgc2V0VGFzayA9IGZ1bmN0aW9uIHNldEltbWVkaWF0ZShmbikge1xuICAgIHZhciBhcmdzID0gW107XG4gICAgdmFyIGkgPSAxO1xuICAgIHdoaWxlIChhcmd1bWVudHMubGVuZ3RoID4gaSkgYXJncy5wdXNoKGFyZ3VtZW50c1tpKytdKTtcbiAgICBxdWV1ZVsrK2NvdW50ZXJdID0gZnVuY3Rpb24gKCkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jXG4gICAgICBpbnZva2UodHlwZW9mIGZuID09ICdmdW5jdGlvbicgPyBmbiA6IEZ1bmN0aW9uKGZuKSwgYXJncyk7XG4gICAgfTtcbiAgICBkZWZlcihjb3VudGVyKTtcbiAgICByZXR1cm4gY291bnRlcjtcbiAgfTtcbiAgY2xlYXJUYXNrID0gZnVuY3Rpb24gY2xlYXJJbW1lZGlhdGUoaWQpIHtcbiAgICBkZWxldGUgcXVldWVbaWRdO1xuICB9O1xuICAvLyBOb2RlLmpzIDAuOC1cbiAgaWYgKHJlcXVpcmUoJy4vX2NvZicpKHByb2Nlc3MpID09ICdwcm9jZXNzJykge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGN0eChydW4sIGlkLCAxKSk7XG4gICAgfTtcbiAgLy8gU3BoZXJlIChKUyBnYW1lIGVuZ2luZSkgRGlzcGF0Y2ggQVBJXG4gIH0gZWxzZSBpZiAoRGlzcGF0Y2ggJiYgRGlzcGF0Y2gubm93KSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIERpc3BhdGNoLm5vdyhjdHgocnVuLCBpZCwgMSkpO1xuICAgIH07XG4gIC8vIEJyb3dzZXJzIHdpdGggTWVzc2FnZUNoYW5uZWwsIGluY2x1ZGVzIFdlYldvcmtlcnNcbiAgfSBlbHNlIGlmIChNZXNzYWdlQ2hhbm5lbCkge1xuICAgIGNoYW5uZWwgPSBuZXcgTWVzc2FnZUNoYW5uZWwoKTtcbiAgICBwb3J0ID0gY2hhbm5lbC5wb3J0MjtcbiAgICBjaGFubmVsLnBvcnQxLm9ubWVzc2FnZSA9IGxpc3RlbmVyO1xuICAgIGRlZmVyID0gY3R4KHBvcnQucG9zdE1lc3NhZ2UsIHBvcnQsIDEpO1xuICAvLyBCcm93c2VycyB3aXRoIHBvc3RNZXNzYWdlLCBza2lwIFdlYldvcmtlcnNcbiAgLy8gSUU4IGhhcyBwb3N0TWVzc2FnZSwgYnV0IGl0J3Mgc3luYyAmIHR5cGVvZiBpdHMgcG9zdE1lc3NhZ2UgaXMgJ29iamVjdCdcbiAgfSBlbHNlIGlmIChnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lciAmJiB0eXBlb2YgcG9zdE1lc3NhZ2UgPT0gJ2Z1bmN0aW9uJyAmJiAhZ2xvYmFsLmltcG9ydFNjcmlwdHMpIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgZ2xvYmFsLnBvc3RNZXNzYWdlKGlkICsgJycsICcqJyk7XG4gICAgfTtcbiAgICBnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGxpc3RlbmVyLCBmYWxzZSk7XG4gIC8vIElFOC1cbiAgfSBlbHNlIGlmIChPTlJFQURZU1RBVEVDSEFOR0UgaW4gY2VsKCdzY3JpcHQnKSkge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBodG1sLmFwcGVuZENoaWxkKGNlbCgnc2NyaXB0JykpW09OUkVBRFlTVEFURUNIQU5HRV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGh0bWwucmVtb3ZlQ2hpbGQodGhpcyk7XG4gICAgICAgIHJ1bi5jYWxsKGlkKTtcbiAgICAgIH07XG4gICAgfTtcbiAgLy8gUmVzdCBvbGQgYnJvd3NlcnNcbiAgfSBlbHNlIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgc2V0VGltZW91dChjdHgocnVuLCBpZCwgMSksIDApO1xuICAgIH07XG4gIH1cbn1cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZXQ6IHNldFRhc2ssXG4gIGNsZWFyOiBjbGVhclRhc2tcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///89\n")},function(module,exports,__webpack_require__){eval("var global = __webpack_require__(2);\nvar macrotask = __webpack_require__(89).set;\nvar Observer = global.MutationObserver || global.WebKitMutationObserver;\nvar process = global.process;\nvar Promise = global.Promise;\nvar isNode = __webpack_require__(20)(process) == 'process';\n\nmodule.exports = function () {\n var head, last, notify;\n\n var flush = function () {\n var parent, fn;\n if (isNode && (parent = process.domain)) parent.exit();\n while (head) {\n fn = head.fn;\n head = head.next;\n try {\n fn();\n } catch (e) {\n if (head) notify();\n else last = undefined;\n throw e;\n }\n } last = undefined;\n if (parent) parent.enter();\n };\n\n // Node.js\n if (isNode) {\n notify = function () {\n process.nextTick(flush);\n };\n // browsers with MutationObserver, except iOS Safari - https://github.com/zloirock/core-js/issues/339\n } else if (Observer && !(global.navigator && global.navigator.standalone)) {\n var toggle = true;\n var node = document.createTextNode('');\n new Observer(flush).observe(node, { characterData: true }); // eslint-disable-line no-new\n notify = function () {\n node.data = toggle = !toggle;\n };\n // environments with maybe non-completely correct, but existent Promise\n } else if (Promise && Promise.resolve) {\n // Promise.resolve without an argument throws an error in LG WebOS 2\n var promise = Promise.resolve(undefined);\n notify = function () {\n promise.then(flush);\n };\n // for other environments - macrotask based on:\n // - setImmediate\n // - MessageChannel\n // - window.postMessag\n // - onreadystatechange\n // - setTimeout\n } else {\n notify = function () {\n // strange IE + webpack dev server bug - use .call(global)\n macrotask.call(global, flush);\n };\n }\n\n return function (fn) {\n var task = { fn: fn, next: undefined };\n if (last) last.next = task;\n if (!head) {\n head = task;\n notify();\n } last = task;\n };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWljcm90YXNrLmpzPzgwNzkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsYUFBYSxtQkFBTyxDQUFDLENBQVc7QUFDaEMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBUztBQUNqQztBQUNBO0FBQ0E7QUFDQSxhQUFhLG1CQUFPLENBQUMsRUFBUTs7QUFFN0I7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSx1Q0FBdUMsc0JBQXNCLEVBQUU7QUFDL0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EiLCJmaWxlIjoiOTAuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgbWFjcm90YXNrID0gcmVxdWlyZSgnLi9fdGFzaycpLnNldDtcbnZhciBPYnNlcnZlciA9IGdsb2JhbC5NdXRhdGlvbk9ic2VydmVyIHx8IGdsb2JhbC5XZWJLaXRNdXRhdGlvbk9ic2VydmVyO1xudmFyIHByb2Nlc3MgPSBnbG9iYWwucHJvY2VzcztcbnZhciBQcm9taXNlID0gZ2xvYmFsLlByb21pc2U7XG52YXIgaXNOb2RlID0gcmVxdWlyZSgnLi9fY29mJykocHJvY2VzcykgPT0gJ3Byb2Nlc3MnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGhlYWQsIGxhc3QsIG5vdGlmeTtcblxuICB2YXIgZmx1c2ggPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHBhcmVudCwgZm47XG4gICAgaWYgKGlzTm9kZSAmJiAocGFyZW50ID0gcHJvY2Vzcy5kb21haW4pKSBwYXJlbnQuZXhpdCgpO1xuICAgIHdoaWxlIChoZWFkKSB7XG4gICAgICBmbiA9IGhlYWQuZm47XG4gICAgICBoZWFkID0gaGVhZC5uZXh0O1xuICAgICAgdHJ5IHtcbiAgICAgICAgZm4oKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKGhlYWQpIG5vdGlmeSgpO1xuICAgICAgICBlbHNlIGxhc3QgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgfSBsYXN0ID0gdW5kZWZpbmVkO1xuICAgIGlmIChwYXJlbnQpIHBhcmVudC5lbnRlcigpO1xuICB9O1xuXG4gIC8vIE5vZGUuanNcbiAgaWYgKGlzTm9kZSkge1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soZmx1c2gpO1xuICAgIH07XG4gIC8vIGJyb3dzZXJzIHdpdGggTXV0YXRpb25PYnNlcnZlciwgZXhjZXB0IGlPUyBTYWZhcmkgLSBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvMzM5XG4gIH0gZWxzZSBpZiAoT2JzZXJ2ZXIgJiYgIShnbG9iYWwubmF2aWdhdG9yICYmIGdsb2JhbC5uYXZpZ2F0b3Iuc3RhbmRhbG9uZSkpIHtcbiAgICB2YXIgdG9nZ2xlID0gdHJ1ZTtcbiAgICB2YXIgbm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcnKTtcbiAgICBuZXcgT2JzZXJ2ZXIoZmx1c2gpLm9ic2VydmUobm9kZSwgeyBjaGFyYWN0ZXJEYXRhOiB0cnVlIH0pOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIG5vZGUuZGF0YSA9IHRvZ2dsZSA9ICF0b2dnbGU7XG4gICAgfTtcbiAgLy8gZW52aXJvbm1lbnRzIHdpdGggbWF5YmUgbm9uLWNvbXBsZXRlbHkgY29ycmVjdCwgYnV0IGV4aXN0ZW50IFByb21pc2VcbiAgfSBlbHNlIGlmIChQcm9taXNlICYmIFByb21pc2UucmVzb2x2ZSkge1xuICAgIC8vIFByb21pc2UucmVzb2x2ZSB3aXRob3V0IGFuIGFyZ3VtZW50IHRocm93cyBhbiBlcnJvciBpbiBMRyBXZWJPUyAyXG4gICAgdmFyIHByb21pc2UgPSBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBwcm9taXNlLnRoZW4oZmx1c2gpO1xuICAgIH07XG4gIC8vIGZvciBvdGhlciBlbnZpcm9ubWVudHMgLSBtYWNyb3Rhc2sgYmFzZWQgb246XG4gIC8vIC0gc2V0SW1tZWRpYXRlXG4gIC8vIC0gTWVzc2FnZUNoYW5uZWxcbiAgLy8gLSB3aW5kb3cucG9zdE1lc3NhZ1xuICAvLyAtIG9ucmVhZHlzdGF0ZWNoYW5nZVxuICAvLyAtIHNldFRpbWVvdXRcbiAgfSBlbHNlIHtcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBzdHJhbmdlIElFICsgd2VicGFjayBkZXYgc2VydmVyIGJ1ZyAtIHVzZSAuY2FsbChnbG9iYWwpXG4gICAgICBtYWNyb3Rhc2suY2FsbChnbG9iYWwsIGZsdXNoKTtcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChmbikge1xuICAgIHZhciB0YXNrID0geyBmbjogZm4sIG5leHQ6IHVuZGVmaW5lZCB9O1xuICAgIGlmIChsYXN0KSBsYXN0Lm5leHQgPSB0YXNrO1xuICAgIGlmICghaGVhZCkge1xuICAgICAgaGVhZCA9IHRhc2s7XG4gICAgICBub3RpZnkoKTtcbiAgICB9IGxhc3QgPSB0YXNrO1xuICB9O1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///90\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// 25.4.1.5 NewPromiseCapability(C)\nvar aFunction = __webpack_require__(10);\n\nfunction PromiseCapability(C) {\n var resolve, reject;\n this.promise = new C(function ($$resolve, $$reject) {\n if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n resolve = $$resolve;\n reject = $$reject;\n });\n this.resolve = aFunction(resolve);\n this.reject = aFunction(reject);\n}\n\nmodule.exports.f = function (C) {\n return new PromiseCapability(C);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbmV3LXByb21pc2UtY2FwYWJpbGl0eS5qcz9hNWI4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlOztBQUV2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSIsImZpbGUiOiI5MS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIDI1LjQuMS41IE5ld1Byb21pc2VDYXBhYmlsaXR5KEMpXG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xuXG5mdW5jdGlvbiBQcm9taXNlQ2FwYWJpbGl0eShDKSB7XG4gIHZhciByZXNvbHZlLCByZWplY3Q7XG4gIHRoaXMucHJvbWlzZSA9IG5ldyBDKGZ1bmN0aW9uICgkJHJlc29sdmUsICQkcmVqZWN0KSB7XG4gICAgaWYgKHJlc29sdmUgIT09IHVuZGVmaW5lZCB8fCByZWplY3QgIT09IHVuZGVmaW5lZCkgdGhyb3cgVHlwZUVycm9yKCdCYWQgUHJvbWlzZSBjb25zdHJ1Y3RvcicpO1xuICAgIHJlc29sdmUgPSAkJHJlc29sdmU7XG4gICAgcmVqZWN0ID0gJCRyZWplY3Q7XG4gIH0pO1xuICB0aGlzLnJlc29sdmUgPSBhRnVuY3Rpb24ocmVzb2x2ZSk7XG4gIHRoaXMucmVqZWN0ID0gYUZ1bmN0aW9uKHJlamVjdCk7XG59XG5cbm1vZHVsZS5leHBvcnRzLmYgPSBmdW5jdGlvbiAoQykge1xuICByZXR1cm4gbmV3IFByb21pc2VDYXBhYmlsaXR5KEMpO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///91\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar global = __webpack_require__(2);\nvar DESCRIPTORS = __webpack_require__(7);\nvar LIBRARY = __webpack_require__(29);\nvar $typed = __webpack_require__(62);\nvar hide = __webpack_require__(11);\nvar redefineAll = __webpack_require__(41);\nvar fails = __webpack_require__(3);\nvar anInstance = __webpack_require__(39);\nvar toInteger = __webpack_require__(21);\nvar toLength = __webpack_require__(6);\nvar toIndex = __webpack_require__(122);\nvar gOPN = __webpack_require__(37).f;\nvar dP = __webpack_require__(8).f;\nvar arrayFill = __webpack_require__(85);\nvar setToStringTag = __webpack_require__(43);\nvar ARRAY_BUFFER = 'ArrayBuffer';\nvar DATA_VIEW = 'DataView';\nvar PROTOTYPE = 'prototype';\nvar WRONG_LENGTH = 'Wrong length!';\nvar WRONG_INDEX = 'Wrong index!';\nvar $ArrayBuffer = global[ARRAY_BUFFER];\nvar $DataView = global[DATA_VIEW];\nvar Math = global.Math;\nvar RangeError = global.RangeError;\n// eslint-disable-next-line no-shadow-restricted-names\nvar Infinity = global.Infinity;\nvar BaseBuffer = $ArrayBuffer;\nvar abs = Math.abs;\nvar pow = Math.pow;\nvar floor = Math.floor;\nvar log = Math.log;\nvar LN2 = Math.LN2;\nvar BUFFER = 'buffer';\nvar BYTE_LENGTH = 'byteLength';\nvar BYTE_OFFSET = 'byteOffset';\nvar $BUFFER = DESCRIPTORS ? '_b' : BUFFER;\nvar $LENGTH = DESCRIPTORS ? '_l' : BYTE_LENGTH;\nvar $OFFSET = DESCRIPTORS ? '_o' : BYTE_OFFSET;\n\n// IEEE754 conversions based on https://github.com/feross/ieee754\nfunction packIEEE754(value, mLen, nBytes) {\n var buffer = new Array(nBytes);\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var rt = mLen === 23 ? pow(2, -24) - pow(2, -77) : 0;\n var i = 0;\n var s = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0;\n var e, m, c;\n value = abs(value);\n // eslint-disable-next-line no-self-compare\n if (value != value || value === Infinity) {\n // eslint-disable-next-line no-self-compare\n m = value != value ? 1 : 0;\n e = eMax;\n } else {\n e = floor(log(value) / LN2);\n if (value * (c = pow(2, -e)) < 1) {\n e--;\n c *= 2;\n }\n if (e + eBias >= 1) {\n value += rt / c;\n } else {\n value += rt * pow(2, 1 - eBias);\n }\n if (value * c >= 2) {\n e++;\n c /= 2;\n }\n if (e + eBias >= eMax) {\n m = 0;\n e = eMax;\n } else if (e + eBias >= 1) {\n m = (value * c - 1) * pow(2, mLen);\n e = e + eBias;\n } else {\n m = value * pow(2, eBias - 1) * pow(2, mLen);\n e = 0;\n }\n }\n for (; mLen >= 8; buffer[i++] = m & 255, m /= 256, mLen -= 8);\n e = e << mLen | m;\n eLen += mLen;\n for (; eLen > 0; buffer[i++] = e & 255, e /= 256, eLen -= 8);\n buffer[--i] |= s * 128;\n return buffer;\n}\nfunction unpackIEEE754(buffer, mLen, nBytes) {\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var nBits = eLen - 7;\n var i = nBytes - 1;\n var s = buffer[i--];\n var e = s & 127;\n var m;\n s >>= 7;\n for (; nBits > 0; e = e * 256 + buffer[i], i--, nBits -= 8);\n m = e & (1 << -nBits) - 1;\n e >>= -nBits;\n nBits += mLen;\n for (; nBits > 0; m = m * 256 + buffer[i], i--, nBits -= 8);\n if (e === 0) {\n e = 1 - eBias;\n } else if (e === eMax) {\n return m ? NaN : s ? -Infinity : Infinity;\n } else {\n m = m + pow(2, mLen);\n e = e - eBias;\n } return (s ? -1 : 1) * m * pow(2, e - mLen);\n}\n\nfunction unpackI32(bytes) {\n return bytes[3] << 24 | bytes[2] << 16 | bytes[1] << 8 | bytes[0];\n}\nfunction packI8(it) {\n return [it & 0xff];\n}\nfunction packI16(it) {\n return [it & 0xff, it >> 8 & 0xff];\n}\nfunction packI32(it) {\n return [it & 0xff, it >> 8 & 0xff, it >> 16 & 0xff, it >> 24 & 0xff];\n}\nfunction packF64(it) {\n return packIEEE754(it, 52, 8);\n}\nfunction packF32(it) {\n return packIEEE754(it, 23, 4);\n}\n\nfunction addGetter(C, key, internal) {\n dP(C[PROTOTYPE], key, { get: function () { return this[internal]; } });\n}\n\nfunction get(view, bytes, index, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = store.slice(start, start + bytes);\n return isLittleEndian ? pack : pack.reverse();\n}\nfunction set(view, bytes, index, conversion, value, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = conversion(+value);\n for (var i = 0; i < bytes; i++) store[start + i] = pack[isLittleEndian ? i : bytes - i - 1];\n}\n\nif (!$typed.ABV) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer, ARRAY_BUFFER);\n var byteLength = toIndex(length);\n this._b = arrayFill.call(new Array(byteLength), 0);\n this[$LENGTH] = byteLength;\n };\n\n $DataView = function DataView(buffer, byteOffset, byteLength) {\n anInstance(this, $DataView, DATA_VIEW);\n anInstance(buffer, $ArrayBuffer, DATA_VIEW);\n var bufferLength = buffer[$LENGTH];\n var offset = toInteger(byteOffset);\n if (offset < 0 || offset > bufferLength) throw RangeError('Wrong offset!');\n byteLength = byteLength === undefined ? bufferLength - offset : toLength(byteLength);\n if (offset + byteLength > bufferLength) throw RangeError(WRONG_LENGTH);\n this[$BUFFER] = buffer;\n this[$OFFSET] = offset;\n this[$LENGTH] = byteLength;\n };\n\n if (DESCRIPTORS) {\n addGetter($ArrayBuffer, BYTE_LENGTH, '_l');\n addGetter($DataView, BUFFER, '_b');\n addGetter($DataView, BYTE_LENGTH, '_l');\n addGetter($DataView, BYTE_OFFSET, '_o');\n }\n\n redefineAll($DataView[PROTOTYPE], {\n getInt8: function getInt8(byteOffset) {\n return get(this, 1, byteOffset)[0] << 24 >> 24;\n },\n getUint8: function getUint8(byteOffset) {\n return get(this, 1, byteOffset)[0];\n },\n getInt16: function getInt16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return (bytes[1] << 8 | bytes[0]) << 16 >> 16;\n },\n getUint16: function getUint16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return bytes[1] << 8 | bytes[0];\n },\n getInt32: function getInt32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1]));\n },\n getUint32: function getUint32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1])) >>> 0;\n },\n getFloat32: function getFloat32(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 4, byteOffset, arguments[1]), 23, 4);\n },\n getFloat64: function getFloat64(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 8, byteOffset, arguments[1]), 52, 8);\n },\n setInt8: function setInt8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setUint8: function setUint8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setInt16: function setInt16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setUint16: function setUint16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setInt32: function setInt32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setUint32: function setUint32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setFloat32: function setFloat32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packF32, value, arguments[2]);\n },\n setFloat64: function setFloat64(byteOffset, value /* , littleEndian */) {\n set(this, 8, byteOffset, packF64, value, arguments[2]);\n }\n });\n} else {\n if (!fails(function () {\n $ArrayBuffer(1);\n }) || !fails(function () {\n new $ArrayBuffer(-1); // eslint-disable-line no-new\n }) || fails(function () {\n new $ArrayBuffer(); // eslint-disable-line no-new\n new $ArrayBuffer(1.5); // eslint-disable-line no-new\n new $ArrayBuffer(NaN); // eslint-disable-line no-new\n return $ArrayBuffer.name != ARRAY_BUFFER;\n })) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer);\n return new BaseBuffer(toIndex(length));\n };\n var ArrayBufferProto = $ArrayBuffer[PROTOTYPE] = BaseBuffer[PROTOTYPE];\n for (var keys = gOPN(BaseBuffer), j = 0, key; keys.length > j;) {\n if (!((key = keys[j++]) in $ArrayBuffer)) hide($ArrayBuffer, key, BaseBuffer[key]);\n }\n if (!LIBRARY) ArrayBufferProto.constructor = $ArrayBuffer;\n }\n // iOS Safari 7.x bug\n var view = new $DataView(new $ArrayBuffer(2));\n var $setInt8 = $DataView[PROTOTYPE].setInt8;\n view.setInt8(0, 2147483648);\n view.setInt8(1, 2147483649);\n if (view.getInt8(0) || !view.getInt8(1)) redefineAll($DataView[PROTOTYPE], {\n setInt8: function setInt8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n },\n setUint8: function setUint8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n }\n }, true);\n}\nsetToStringTag($ArrayBuffer, ARRAY_BUFFER);\nsetToStringTag($DataView, DATA_VIEW);\nhide($DataView[PROTOTYPE], $typed.VIEW, true);\nexports[ARRAY_BUFFER] = $ArrayBuffer;\nexports[DATA_VIEW] = $DataView;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdHlwZWQtYnVmZmVyLmpzP2VkMGIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixhQUFhLG1CQUFPLENBQUMsQ0FBVztBQUNoQyxrQkFBa0IsbUJBQU8sQ0FBQyxDQUFnQjtBQUMxQyxjQUFjLG1CQUFPLENBQUMsRUFBWTtBQUNsQyxhQUFhLG1CQUFPLENBQUMsRUFBVTtBQUMvQixXQUFXLG1CQUFPLENBQUMsRUFBUztBQUM1QixrQkFBa0IsbUJBQU8sQ0FBQyxFQUFpQjtBQUMzQyxZQUFZLG1CQUFPLENBQUMsQ0FBVTtBQUM5QixpQkFBaUIsbUJBQU8sQ0FBQyxFQUFnQjtBQUN6QyxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGNBQWMsbUJBQU8sQ0FBQyxHQUFhO0FBQ25DLFdBQVcsbUJBQU8sQ0FBQyxFQUFnQjtBQUNuQyxTQUFTLG1CQUFPLENBQUMsQ0FBYztBQUMvQixnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDLHFCQUFxQixtQkFBTyxDQUFDLEVBQXNCO0FBQ25EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLFdBQVc7QUFDbkI7QUFDQTtBQUNBLFFBQVEsVUFBVTtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsV0FBVztBQUNuQjtBQUNBO0FBQ0E7QUFDQSxRQUFRLFdBQVc7QUFDbkI7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHlCQUF5QixtQkFBbUIsdUJBQXVCLEVBQUUsRUFBRTtBQUN2RTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixXQUFXO0FBQzVCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBO0FBQ0EsR0FBRztBQUNILHlCQUF5QjtBQUN6QixHQUFHO0FBQ0gsdUJBQXVCO0FBQ3ZCLDBCQUEwQjtBQUMxQiwwQkFBMEI7QUFDMUI7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlEQUFpRCxpQkFBaUI7QUFDbEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiOTIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpO1xudmFyIExJQlJBUlkgPSByZXF1aXJlKCcuL19saWJyYXJ5Jyk7XG52YXIgJHR5cGVkID0gcmVxdWlyZSgnLi9fdHlwZWQnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIHJlZGVmaW5lQWxsID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUtYWxsJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuL19hbi1pbnN0YW5jZScpO1xudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIHRvSW5kZXggPSByZXF1aXJlKCcuL190by1pbmRleCcpO1xudmFyIGdPUE4gPSByZXF1aXJlKCcuL19vYmplY3QtZ29wbicpLmY7XG52YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mO1xudmFyIGFycmF5RmlsbCA9IHJlcXVpcmUoJy4vX2FycmF5LWZpbGwnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgQVJSQVlfQlVGRkVSID0gJ0FycmF5QnVmZmVyJztcbnZhciBEQVRBX1ZJRVcgPSAnRGF0YVZpZXcnO1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xudmFyIFdST05HX0xFTkdUSCA9ICdXcm9uZyBsZW5ndGghJztcbnZhciBXUk9OR19JTkRFWCA9ICdXcm9uZyBpbmRleCEnO1xudmFyICRBcnJheUJ1ZmZlciA9IGdsb2JhbFtBUlJBWV9CVUZGRVJdO1xudmFyICREYXRhVmlldyA9IGdsb2JhbFtEQVRBX1ZJRVddO1xudmFyIE1hdGggPSBnbG9iYWwuTWF0aDtcbnZhciBSYW5nZUVycm9yID0gZ2xvYmFsLlJhbmdlRXJyb3I7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2hhZG93LXJlc3RyaWN0ZWQtbmFtZXNcbnZhciBJbmZpbml0eSA9IGdsb2JhbC5JbmZpbml0eTtcbnZhciBCYXNlQnVmZmVyID0gJEFycmF5QnVmZmVyO1xudmFyIGFicyA9IE1hdGguYWJzO1xudmFyIHBvdyA9IE1hdGgucG93O1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcbnZhciBsb2cgPSBNYXRoLmxvZztcbnZhciBMTjIgPSBNYXRoLkxOMjtcbnZhciBCVUZGRVIgPSAnYnVmZmVyJztcbnZhciBCWVRFX0xFTkdUSCA9ICdieXRlTGVuZ3RoJztcbnZhciBCWVRFX09GRlNFVCA9ICdieXRlT2Zmc2V0JztcbnZhciAkQlVGRkVSID0gREVTQ1JJUFRPUlMgPyAnX2InIDogQlVGRkVSO1xudmFyICRMRU5HVEggPSBERVNDUklQVE9SUyA/ICdfbCcgOiBCWVRFX0xFTkdUSDtcbnZhciAkT0ZGU0VUID0gREVTQ1JJUFRPUlMgPyAnX28nIDogQllURV9PRkZTRVQ7XG5cbi8vIElFRUU3NTQgY29udmVyc2lvbnMgYmFzZWQgb24gaHR0cHM6Ly9naXRodWIuY29tL2Zlcm9zcy9pZWVlNzU0XG5mdW5jdGlvbiBwYWNrSUVFRTc1NCh2YWx1ZSwgbUxlbiwgbkJ5dGVzKSB7XG4gIHZhciBidWZmZXIgPSBuZXcgQXJyYXkobkJ5dGVzKTtcbiAgdmFyIGVMZW4gPSBuQnl0ZXMgKiA4IC0gbUxlbiAtIDE7XG4gIHZhciBlTWF4ID0gKDEgPDwgZUxlbikgLSAxO1xuICB2YXIgZUJpYXMgPSBlTWF4ID4+IDE7XG4gIHZhciBydCA9IG1MZW4gPT09IDIzID8gcG93KDIsIC0yNCkgLSBwb3coMiwgLTc3KSA6IDA7XG4gIHZhciBpID0gMDtcbiAgdmFyIHMgPSB2YWx1ZSA8IDAgfHwgdmFsdWUgPT09IDAgJiYgMSAvIHZhbHVlIDwgMCA/IDEgOiAwO1xuICB2YXIgZSwgbSwgYztcbiAgdmFsdWUgPSBhYnModmFsdWUpO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gIGlmICh2YWx1ZSAhPSB2YWx1ZSB8fCB2YWx1ZSA9PT0gSW5maW5pdHkpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgbSA9IHZhbHVlICE9IHZhbHVlID8gMSA6IDA7XG4gICAgZSA9IGVNYXg7XG4gIH0gZWxzZSB7XG4gICAgZSA9IGZsb29yKGxvZyh2YWx1ZSkgLyBMTjIpO1xuICAgIGlmICh2YWx1ZSAqIChjID0gcG93KDIsIC1lKSkgPCAxKSB7XG4gICAgICBlLS07XG4gICAgICBjICo9IDI7XG4gICAgfVxuICAgIGlmIChlICsgZUJpYXMgPj0gMSkge1xuICAgICAgdmFsdWUgKz0gcnQgLyBjO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YWx1ZSArPSBydCAqIHBvdygyLCAxIC0gZUJpYXMpO1xuICAgIH1cbiAgICBpZiAodmFsdWUgKiBjID49IDIpIHtcbiAgICAgIGUrKztcbiAgICAgIGMgLz0gMjtcbiAgICB9XG4gICAgaWYgKGUgKyBlQmlhcyA+PSBlTWF4KSB7XG4gICAgICBtID0gMDtcbiAgICAgIGUgPSBlTWF4O1xuICAgIH0gZWxzZSBpZiAoZSArIGVCaWFzID49IDEpIHtcbiAgICAgIG0gPSAodmFsdWUgKiBjIC0gMSkgKiBwb3coMiwgbUxlbik7XG4gICAgICBlID0gZSArIGVCaWFzO1xuICAgIH0gZWxzZSB7XG4gICAgICBtID0gdmFsdWUgKiBwb3coMiwgZUJpYXMgLSAxKSAqIHBvdygyLCBtTGVuKTtcbiAgICAgIGUgPSAwO1xuICAgIH1cbiAgfVxuICBmb3IgKDsgbUxlbiA+PSA4OyBidWZmZXJbaSsrXSA9IG0gJiAyNTUsIG0gLz0gMjU2LCBtTGVuIC09IDgpO1xuICBlID0gZSA8PCBtTGVuIHwgbTtcbiAgZUxlbiArPSBtTGVuO1xuICBmb3IgKDsgZUxlbiA+IDA7IGJ1ZmZlcltpKytdID0gZSAmIDI1NSwgZSAvPSAyNTYsIGVMZW4gLT0gOCk7XG4gIGJ1ZmZlclstLWldIHw9IHMgKiAxMjg7XG4gIHJldHVybiBidWZmZXI7XG59XG5mdW5jdGlvbiB1bnBhY2tJRUVFNzU0KGJ1ZmZlciwgbUxlbiwgbkJ5dGVzKSB7XG4gIHZhciBlTGVuID0gbkJ5dGVzICogOCAtIG1MZW4gLSAxO1xuICB2YXIgZU1heCA9ICgxIDw8IGVMZW4pIC0gMTtcbiAgdmFyIGVCaWFzID0gZU1heCA+PiAxO1xuICB2YXIgbkJpdHMgPSBlTGVuIC0gNztcbiAgdmFyIGkgPSBuQnl0ZXMgLSAxO1xuICB2YXIgcyA9IGJ1ZmZlcltpLS1dO1xuICB2YXIgZSA9IHMgJiAxMjc7XG4gIHZhciBtO1xuICBzID4+PSA3O1xuICBmb3IgKDsgbkJpdHMgPiAwOyBlID0gZSAqIDI1NiArIGJ1ZmZlcltpXSwgaS0tLCBuQml0cyAtPSA4KTtcbiAgbSA9IGUgJiAoMSA8PCAtbkJpdHMpIC0gMTtcbiAgZSA+Pj0gLW5CaXRzO1xuICBuQml0cyArPSBtTGVuO1xuICBmb3IgKDsgbkJpdHMgPiAwOyBtID0gbSAqIDI1NiArIGJ1ZmZlcltpXSwgaS0tLCBuQml0cyAtPSA4KTtcbiAgaWYgKGUgPT09IDApIHtcbiAgICBlID0gMSAtIGVCaWFzO1xuICB9IGVsc2UgaWYgKGUgPT09IGVNYXgpIHtcbiAgICByZXR1cm4gbSA/IE5hTiA6IHMgPyAtSW5maW5pdHkgOiBJbmZpbml0eTtcbiAgfSBlbHNlIHtcbiAgICBtID0gbSArIHBvdygyLCBtTGVuKTtcbiAgICBlID0gZSAtIGVCaWFzO1xuICB9IHJldHVybiAocyA/IC0xIDogMSkgKiBtICogcG93KDIsIGUgLSBtTGVuKTtcbn1cblxuZnVuY3Rpb24gdW5wYWNrSTMyKGJ5dGVzKSB7XG4gIHJldHVybiBieXRlc1szXSA8PCAyNCB8IGJ5dGVzWzJdIDw8IDE2IHwgYnl0ZXNbMV0gPDwgOCB8IGJ5dGVzWzBdO1xufVxuZnVuY3Rpb24gcGFja0k4KGl0KSB7XG4gIHJldHVybiBbaXQgJiAweGZmXTtcbn1cbmZ1bmN0aW9uIHBhY2tJMTYoaXQpIHtcbiAgcmV0dXJuIFtpdCAmIDB4ZmYsIGl0ID4+IDggJiAweGZmXTtcbn1cbmZ1bmN0aW9uIHBhY2tJMzIoaXQpIHtcbiAgcmV0dXJuIFtpdCAmIDB4ZmYsIGl0ID4+IDggJiAweGZmLCBpdCA+PiAxNiAmIDB4ZmYsIGl0ID4+IDI0ICYgMHhmZl07XG59XG5mdW5jdGlvbiBwYWNrRjY0KGl0KSB7XG4gIHJldHVybiBwYWNrSUVFRTc1NChpdCwgNTIsIDgpO1xufVxuZnVuY3Rpb24gcGFja0YzMihpdCkge1xuICByZXR1cm4gcGFja0lFRUU3NTQoaXQsIDIzLCA0KTtcbn1cblxuZnVuY3Rpb24gYWRkR2V0dGVyKEMsIGtleSwgaW50ZXJuYWwpIHtcbiAgZFAoQ1tQUk9UT1RZUEVdLCBrZXksIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzW2ludGVybmFsXTsgfSB9KTtcbn1cblxuZnVuY3Rpb24gZ2V0KHZpZXcsIGJ5dGVzLCBpbmRleCwgaXNMaXR0bGVFbmRpYW4pIHtcbiAgdmFyIG51bUluZGV4ID0gK2luZGV4O1xuICB2YXIgaW50SW5kZXggPSB0b0luZGV4KG51bUluZGV4KTtcbiAgaWYgKGludEluZGV4ICsgYnl0ZXMgPiB2aWV3WyRMRU5HVEhdKSB0aHJvdyBSYW5nZUVycm9yKFdST05HX0lOREVYKTtcbiAgdmFyIHN0b3JlID0gdmlld1skQlVGRkVSXS5fYjtcbiAgdmFyIHN0YXJ0ID0gaW50SW5kZXggKyB2aWV3WyRPRkZTRVRdO1xuICB2YXIgcGFjayA9IHN0b3JlLnNsaWNlKHN0YXJ0LCBzdGFydCArIGJ5dGVzKTtcbiAgcmV0dXJuIGlzTGl0dGxlRW5kaWFuID8gcGFjayA6IHBhY2sucmV2ZXJzZSgpO1xufVxuZnVuY3Rpb24gc2V0KHZpZXcsIGJ5dGVzLCBpbmRleCwgY29udmVyc2lvbiwgdmFsdWUsIGlzTGl0dGxlRW5kaWFuKSB7XG4gIHZhciBudW1JbmRleCA9ICtpbmRleDtcbiAgdmFyIGludEluZGV4ID0gdG9JbmRleChudW1JbmRleCk7XG4gIGlmIChpbnRJbmRleCArIGJ5dGVzID4gdmlld1skTEVOR1RIXSkgdGhyb3cgUmFuZ2VFcnJvcihXUk9OR19JTkRFWCk7XG4gIHZhciBzdG9yZSA9IHZpZXdbJEJVRkZFUl0uX2I7XG4gIHZhciBzdGFydCA9IGludEluZGV4ICsgdmlld1skT0ZGU0VUXTtcbiAgdmFyIHBhY2sgPSBjb252ZXJzaW9uKCt2YWx1ZSk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYnl0ZXM7IGkrKykgc3RvcmVbc3RhcnQgKyBpXSA9IHBhY2tbaXNMaXR0bGVFbmRpYW4gPyBpIDogYnl0ZXMgLSBpIC0gMV07XG59XG5cbmlmICghJHR5cGVkLkFCVikge1xuICAkQXJyYXlCdWZmZXIgPSBmdW5jdGlvbiBBcnJheUJ1ZmZlcihsZW5ndGgpIHtcbiAgICBhbkluc3RhbmNlKHRoaXMsICRBcnJheUJ1ZmZlciwgQVJSQVlfQlVGRkVSKTtcbiAgICB2YXIgYnl0ZUxlbmd0aCA9IHRvSW5kZXgobGVuZ3RoKTtcbiAgICB0aGlzLl9iID0gYXJyYXlGaWxsLmNhbGwobmV3IEFycmF5KGJ5dGVMZW5ndGgpLCAwKTtcbiAgICB0aGlzWyRMRU5HVEhdID0gYnl0ZUxlbmd0aDtcbiAgfTtcblxuICAkRGF0YVZpZXcgPSBmdW5jdGlvbiBEYXRhVmlldyhidWZmZXIsIGJ5dGVPZmZzZXQsIGJ5dGVMZW5ndGgpIHtcbiAgICBhbkluc3RhbmNlKHRoaXMsICREYXRhVmlldywgREFUQV9WSUVXKTtcbiAgICBhbkluc3RhbmNlKGJ1ZmZlciwgJEFycmF5QnVmZmVyLCBEQVRBX1ZJRVcpO1xuICAgIHZhciBidWZmZXJMZW5ndGggPSBidWZmZXJbJExFTkdUSF07XG4gICAgdmFyIG9mZnNldCA9IHRvSW50ZWdlcihieXRlT2Zmc2V0KTtcbiAgICBpZiAob2Zmc2V0IDwgMCB8fCBvZmZzZXQgPiBidWZmZXJMZW5ndGgpIHRocm93IFJhbmdlRXJyb3IoJ1dyb25nIG9mZnNldCEnKTtcbiAgICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCA9PT0gdW5kZWZpbmVkID8gYnVmZmVyTGVuZ3RoIC0gb2Zmc2V0IDogdG9MZW5ndGgoYnl0ZUxlbmd0aCk7XG4gICAgaWYgKG9mZnNldCArIGJ5dGVMZW5ndGggPiBidWZmZXJMZW5ndGgpIHRocm93IFJhbmdlRXJyb3IoV1JPTkdfTEVOR1RIKTtcbiAgICB0aGlzWyRCVUZGRVJdID0gYnVmZmVyO1xuICAgIHRoaXNbJE9GRlNFVF0gPSBvZmZzZXQ7XG4gICAgdGhpc1skTEVOR1RIXSA9IGJ5dGVMZW5ndGg7XG4gIH07XG5cbiAgaWYgKERFU0NSSVBUT1JTKSB7XG4gICAgYWRkR2V0dGVyKCRBcnJheUJ1ZmZlciwgQllURV9MRU5HVEgsICdfbCcpO1xuICAgIGFkZEdldHRlcigkRGF0YVZpZXcsIEJVRkZFUiwgJ19iJyk7XG4gICAgYWRkR2V0dGVyKCREYXRhVmlldywgQllURV9MRU5HVEgsICdfbCcpO1xuICAgIGFkZEdldHRlcigkRGF0YVZpZXcsIEJZVEVfT0ZGU0VULCAnX28nKTtcbiAgfVxuXG4gIHJlZGVmaW5lQWxsKCREYXRhVmlld1tQUk9UT1RZUEVdLCB7XG4gICAgZ2V0SW50ODogZnVuY3Rpb24gZ2V0SW50OChieXRlT2Zmc2V0KSB7XG4gICAgICByZXR1cm4gZ2V0KHRoaXMsIDEsIGJ5dGVPZmZzZXQpWzBdIDw8IDI0ID4+IDI0O1xuICAgIH0sXG4gICAgZ2V0VWludDg6IGZ1bmN0aW9uIGdldFVpbnQ4KGJ5dGVPZmZzZXQpIHtcbiAgICAgIHJldHVybiBnZXQodGhpcywgMSwgYnl0ZU9mZnNldClbMF07XG4gICAgfSxcbiAgICBnZXRJbnQxNjogZnVuY3Rpb24gZ2V0SW50MTYoYnl0ZU9mZnNldCAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgdmFyIGJ5dGVzID0gZ2V0KHRoaXMsIDIsIGJ5dGVPZmZzZXQsIGFyZ3VtZW50c1sxXSk7XG4gICAgICByZXR1cm4gKGJ5dGVzWzFdIDw8IDggfCBieXRlc1swXSkgPDwgMTYgPj4gMTY7XG4gICAgfSxcbiAgICBnZXRVaW50MTY6IGZ1bmN0aW9uIGdldFVpbnQxNihieXRlT2Zmc2V0IC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICB2YXIgYnl0ZXMgPSBnZXQodGhpcywgMiwgYnl0ZU9mZnNldCwgYXJndW1lbnRzWzFdKTtcbiAgICAgIHJldHVybiBieXRlc1sxXSA8PCA4IHwgYnl0ZXNbMF07XG4gICAgfSxcbiAgICBnZXRJbnQzMjogZnVuY3Rpb24gZ2V0SW50MzIoYnl0ZU9mZnNldCAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgcmV0dXJuIHVucGFja0kzMihnZXQodGhpcywgNCwgYnl0ZU9mZnNldCwgYXJndW1lbnRzWzFdKSk7XG4gICAgfSxcbiAgICBnZXRVaW50MzI6IGZ1bmN0aW9uIGdldFVpbnQzMihieXRlT2Zmc2V0IC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICByZXR1cm4gdW5wYWNrSTMyKGdldCh0aGlzLCA0LCBieXRlT2Zmc2V0LCBhcmd1bWVudHNbMV0pKSA+Pj4gMDtcbiAgICB9LFxuICAgIGdldEZsb2F0MzI6IGZ1bmN0aW9uIGdldEZsb2F0MzIoYnl0ZU9mZnNldCAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgcmV0dXJuIHVucGFja0lFRUU3NTQoZ2V0KHRoaXMsIDQsIGJ5dGVPZmZzZXQsIGFyZ3VtZW50c1sxXSksIDIzLCA0KTtcbiAgICB9LFxuICAgIGdldEZsb2F0NjQ6IGZ1bmN0aW9uIGdldEZsb2F0NjQoYnl0ZU9mZnNldCAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgcmV0dXJuIHVucGFja0lFRUU3NTQoZ2V0KHRoaXMsIDgsIGJ5dGVPZmZzZXQsIGFyZ3VtZW50c1sxXSksIDUyLCA4KTtcbiAgICB9LFxuICAgIHNldEludDg6IGZ1bmN0aW9uIHNldEludDgoYnl0ZU9mZnNldCwgdmFsdWUpIHtcbiAgICAgIHNldCh0aGlzLCAxLCBieXRlT2Zmc2V0LCBwYWNrSTgsIHZhbHVlKTtcbiAgICB9LFxuICAgIHNldFVpbnQ4OiBmdW5jdGlvbiBzZXRVaW50OChieXRlT2Zmc2V0LCB2YWx1ZSkge1xuICAgICAgc2V0KHRoaXMsIDEsIGJ5dGVPZmZzZXQsIHBhY2tJOCwgdmFsdWUpO1xuICAgIH0sXG4gICAgc2V0SW50MTY6IGZ1bmN0aW9uIHNldEludDE2KGJ5dGVPZmZzZXQsIHZhbHVlIC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICBzZXQodGhpcywgMiwgYnl0ZU9mZnNldCwgcGFja0kxNiwgdmFsdWUsIGFyZ3VtZW50c1syXSk7XG4gICAgfSxcbiAgICBzZXRVaW50MTY6IGZ1bmN0aW9uIHNldFVpbnQxNihieXRlT2Zmc2V0LCB2YWx1ZSAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgc2V0KHRoaXMsIDIsIGJ5dGVPZmZzZXQsIHBhY2tJMTYsIHZhbHVlLCBhcmd1bWVudHNbMl0pO1xuICAgIH0sXG4gICAgc2V0SW50MzI6IGZ1bmN0aW9uIHNldEludDMyKGJ5dGVPZmZzZXQsIHZhbHVlIC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICBzZXQodGhpcywgNCwgYnl0ZU9mZnNldCwgcGFja0kzMiwgdmFsdWUsIGFyZ3VtZW50c1syXSk7XG4gICAgfSxcbiAgICBzZXRVaW50MzI6IGZ1bmN0aW9uIHNldFVpbnQzMihieXRlT2Zmc2V0LCB2YWx1ZSAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgc2V0KHRoaXMsIDQsIGJ5dGVPZmZzZXQsIHBhY2tJMzIsIHZhbHVlLCBhcmd1bWVudHNbMl0pO1xuICAgIH0sXG4gICAgc2V0RmxvYXQzMjogZnVuY3Rpb24gc2V0RmxvYXQzMihieXRlT2Zmc2V0LCB2YWx1ZSAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgc2V0KHRoaXMsIDQsIGJ5dGVPZmZzZXQsIHBhY2tGMzIsIHZhbHVlLCBhcmd1bWVudHNbMl0pO1xuICAgIH0sXG4gICAgc2V0RmxvYXQ2NDogZnVuY3Rpb24gc2V0RmxvYXQ2NChieXRlT2Zmc2V0LCB2YWx1ZSAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgc2V0KHRoaXMsIDgsIGJ5dGVPZmZzZXQsIHBhY2tGNjQsIHZhbHVlLCBhcmd1bWVudHNbMl0pO1xuICAgIH1cbiAgfSk7XG59IGVsc2Uge1xuICBpZiAoIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAkQXJyYXlCdWZmZXIoMSk7XG4gIH0pIHx8ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgbmV3ICRBcnJheUJ1ZmZlcigtMSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gIH0pIHx8IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICBuZXcgJEFycmF5QnVmZmVyKCk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgbmV3ICRBcnJheUJ1ZmZlcigxLjUpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgIG5ldyAkQXJyYXlCdWZmZXIoTmFOKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICByZXR1cm4gJEFycmF5QnVmZmVyLm5hbWUgIT0gQVJSQVlfQlVGRkVSO1xuICB9KSkge1xuICAgICRBcnJheUJ1ZmZlciA9IGZ1bmN0aW9uIEFycmF5QnVmZmVyKGxlbmd0aCkge1xuICAgICAgYW5JbnN0YW5jZSh0aGlzLCAkQXJyYXlCdWZmZXIpO1xuICAgICAgcmV0dXJuIG5ldyBCYXNlQnVmZmVyKHRvSW5kZXgobGVuZ3RoKSk7XG4gICAgfTtcbiAgICB2YXIgQXJyYXlCdWZmZXJQcm90byA9ICRBcnJheUJ1ZmZlcltQUk9UT1RZUEVdID0gQmFzZUJ1ZmZlcltQUk9UT1RZUEVdO1xuICAgIGZvciAodmFyIGtleXMgPSBnT1BOKEJhc2VCdWZmZXIpLCBqID0gMCwga2V5OyBrZXlzLmxlbmd0aCA+IGo7KSB7XG4gICAgICBpZiAoISgoa2V5ID0ga2V5c1tqKytdKSBpbiAkQXJyYXlCdWZmZXIpKSBoaWRlKCRBcnJheUJ1ZmZlciwga2V5LCBCYXNlQnVmZmVyW2tleV0pO1xuICAgIH1cbiAgICBpZiAoIUxJQlJBUlkpIEFycmF5QnVmZmVyUHJvdG8uY29uc3RydWN0b3IgPSAkQXJyYXlCdWZmZXI7XG4gIH1cbiAgLy8gaU9TIFNhZmFyaSA3LnggYnVnXG4gIHZhciB2aWV3ID0gbmV3ICREYXRhVmlldyhuZXcgJEFycmF5QnVmZmVyKDIpKTtcbiAgdmFyICRzZXRJbnQ4ID0gJERhdGFWaWV3W1BST1RPVFlQRV0uc2V0SW50ODtcbiAgdmlldy5zZXRJbnQ4KDAsIDIxNDc0ODM2NDgpO1xuICB2aWV3LnNldEludDgoMSwgMjE0NzQ4MzY0OSk7XG4gIGlmICh2aWV3LmdldEludDgoMCkgfHwgIXZpZXcuZ2V0SW50OCgxKSkgcmVkZWZpbmVBbGwoJERhdGFWaWV3W1BST1RPVFlQRV0sIHtcbiAgICBzZXRJbnQ4OiBmdW5jdGlvbiBzZXRJbnQ4KGJ5dGVPZmZzZXQsIHZhbHVlKSB7XG4gICAgICAkc2V0SW50OC5jYWxsKHRoaXMsIGJ5dGVPZmZzZXQsIHZhbHVlIDw8IDI0ID4+IDI0KTtcbiAgICB9LFxuICAgIHNldFVpbnQ4OiBmdW5jdGlvbiBzZXRVaW50OChieXRlT2Zmc2V0LCB2YWx1ZSkge1xuICAgICAgJHNldEludDguY2FsbCh0aGlzLCBieXRlT2Zmc2V0LCB2YWx1ZSA8PCAyNCA+PiAyNCk7XG4gICAgfVxuICB9LCB0cnVlKTtcbn1cbnNldFRvU3RyaW5nVGFnKCRBcnJheUJ1ZmZlciwgQVJSQVlfQlVGRkVSKTtcbnNldFRvU3RyaW5nVGFnKCREYXRhVmlldywgREFUQV9WSUVXKTtcbmhpZGUoJERhdGFWaWV3W1BST1RPVFlQRV0sICR0eXBlZC5WSUVXLCB0cnVlKTtcbmV4cG9ydHNbQVJSQVlfQlVGRkVSXSA9ICRBcnJheUJ1ZmZlcjtcbmV4cG9ydHNbREFUQV9WSUVXXSA9ICREYXRhVmlldztcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///92\n")},function(module,exports){eval('var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function("return this")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === "object") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it\'s\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULyh3ZWJwYWNrKS9idWlsZGluL2dsb2JhbC5qcz9jZDAwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsNENBQTRDOztBQUU1QyIsImZpbGUiOiI5My5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBnO1xuXG4vLyBUaGlzIHdvcmtzIGluIG5vbi1zdHJpY3QgbW9kZVxuZyA9IChmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXM7XG59KSgpO1xuXG50cnkge1xuXHQvLyBUaGlzIHdvcmtzIGlmIGV2YWwgaXMgYWxsb3dlZCAoc2VlIENTUClcblx0ZyA9IGcgfHwgbmV3IEZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKTtcbn0gY2F0Y2ggKGUpIHtcblx0Ly8gVGhpcyB3b3JrcyBpZiB0aGUgd2luZG93IHJlZmVyZW5jZSBpcyBhdmFpbGFibGVcblx0aWYgKHR5cGVvZiB3aW5kb3cgPT09IFwib2JqZWN0XCIpIGcgPSB3aW5kb3c7XG59XG5cbi8vIGcgY2FuIHN0aWxsIGJlIHVuZGVmaW5lZCwgYnV0IG5vdGhpbmcgdG8gZG8gYWJvdXQgaXQuLi5cbi8vIFdlIHJldHVybiB1bmRlZmluZWQsIGluc3RlYWQgb2Ygbm90aGluZyBoZXJlLCBzbyBpdCdzXG4vLyBlYXNpZXIgdG8gaGFuZGxlIHRoaXMgY2FzZS4gaWYoIWdsb2JhbCkgeyAuLi59XG5cbm1vZHVsZS5leHBvcnRzID0gZztcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///93\n')},function(module,exports,__webpack_require__){eval("module.exports = !__webpack_require__(7) && !__webpack_require__(3)(function () {\n return Object.defineProperty(__webpack_require__(66)('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faWU4LWRvbS1kZWZpbmUuanM/YzY5YSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxrQkFBa0IsbUJBQU8sQ0FBQyxDQUFnQixNQUFNLG1CQUFPLENBQUMsQ0FBVTtBQUNsRSwrQkFBK0IsbUJBQU8sQ0FBQyxFQUFlLGdCQUFnQixtQkFBbUIsVUFBVSxFQUFFLEVBQUU7QUFDdkcsQ0FBQyIsImZpbGUiOiI5NC5qcyIsInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gIXJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgIXJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHJlcXVpcmUoJy4vX2RvbS1jcmVhdGUnKSgnZGl2JyksICdhJywgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH0gfSkuYSAhPSA3O1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///94\n")},function(module,exports,__webpack_require__){eval("exports.f = __webpack_require__(5);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fd2tzLWV4dC5qcz8zN2M4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVksbUJBQU8sQ0FBQyxDQUFRIiwiZmlsZSI6Ijk1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0cy5mID0gcmVxdWlyZSgnLi9fd2tzJyk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///95\n")},function(module,exports,__webpack_require__){eval("var has = __webpack_require__(14);\nvar toIObject = __webpack_require__(15);\nvar arrayIndexOf = __webpack_require__(52)(false);\nvar IE_PROTO = __webpack_require__(68)('IE_PROTO');\n\nmodule.exports = function (object, names) {\n var O = toIObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (has(O, key = names[i++])) {\n ~arrayIndexOf(result, key) || result.push(key);\n }\n return result;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWtleXMtaW50ZXJuYWwuanM/Y2UxMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxVQUFVLG1CQUFPLENBQUMsRUFBUTtBQUMxQixnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDLG1CQUFtQixtQkFBTyxDQUFDLEVBQW1CO0FBQzlDLGVBQWUsbUJBQU8sQ0FBQyxFQUFlOztBQUV0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiOTYuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIGFycmF5SW5kZXhPZiA9IHJlcXVpcmUoJy4vX2FycmF5LWluY2x1ZGVzJykoZmFsc2UpO1xudmFyIElFX1BST1RPID0gcmVxdWlyZSgnLi9fc2hhcmVkLWtleScpKCdJRV9QUk9UTycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIG5hbWVzKSB7XG4gIHZhciBPID0gdG9JT2JqZWN0KG9iamVjdCk7XG4gIHZhciBpID0gMDtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIga2V5O1xuICBmb3IgKGtleSBpbiBPKSBpZiAoa2V5ICE9IElFX1BST1RPKSBoYXMoTywga2V5KSAmJiByZXN1bHQucHVzaChrZXkpO1xuICAvLyBEb24ndCBlbnVtIGJ1ZyAmIGhpZGRlbiBrZXlzXG4gIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSBpZiAoaGFzKE8sIGtleSA9IG5hbWVzW2krK10pKSB7XG4gICAgfmFycmF5SW5kZXhPZihyZXN1bHQsIGtleSkgfHwgcmVzdWx0LnB1c2goa2V5KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///96\n")},function(module,exports,__webpack_require__){eval("var dP = __webpack_require__(8);\nvar anObject = __webpack_require__(1);\nvar getKeys = __webpack_require__(34);\n\nmodule.exports = __webpack_require__(7) ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var keys = getKeys(Properties);\n var length = keys.length;\n var i = 0;\n var P;\n while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n return O;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWRwcy5qcz8xNDk1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFNBQVMsbUJBQU8sQ0FBQyxDQUFjO0FBQy9CLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGNBQWMsbUJBQU8sQ0FBQyxFQUFnQjs7QUFFdEMsaUJBQWlCLG1CQUFPLENBQUMsQ0FBZ0I7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiI5Ny5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgZ2V0S2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzIDogZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhPLCBQcm9wZXJ0aWVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICB2YXIga2V5cyA9IGdldEtleXMoUHJvcGVydGllcyk7XG4gIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgdmFyIGkgPSAwO1xuICB2YXIgUDtcbiAgd2hpbGUgKGxlbmd0aCA+IGkpIGRQLmYoTywgUCA9IGtleXNbaSsrXSwgUHJvcGVydGllc1tQXSk7XG4gIHJldHVybiBPO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///97\n")},function(module,exports,__webpack_require__){eval("// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nvar toIObject = __webpack_require__(15);\nvar gOPN = __webpack_require__(37).f;\nvar toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return gOPN(it);\n } catch (e) {\n return windowNames.slice();\n }\n};\n\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdvcG4tZXh0LmpzPzdiYmMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDLFdBQVcsbUJBQU8sQ0FBQyxFQUFnQjtBQUNuQyxpQkFBaUI7O0FBRWpCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EiLCJmaWxlIjoiOTguanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBmYWxsYmFjayBmb3IgSUUxMSBidWdneSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB3aXRoIGlmcmFtZSBhbmQgd2luZG93XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIGdPUE4gPSByZXF1aXJlKCcuL19vYmplY3QtZ29wbicpLmY7XG52YXIgdG9TdHJpbmcgPSB7fS50b1N0cmluZztcblxudmFyIHdpbmRvd05hbWVzID0gdHlwZW9mIHdpbmRvdyA9PSAnb2JqZWN0JyAmJiB3aW5kb3cgJiYgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXNcbiAgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh3aW5kb3cpIDogW107XG5cbnZhciBnZXRXaW5kb3dOYW1lcyA9IGZ1bmN0aW9uIChpdCkge1xuICB0cnkge1xuICAgIHJldHVybiBnT1BOKGl0KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiB3aW5kb3dOYW1lcy5zbGljZSgpO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cy5mID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhpdCkge1xuICByZXR1cm4gd2luZG93TmFtZXMgJiYgdG9TdHJpbmcuY2FsbChpdCkgPT0gJ1tvYmplY3QgV2luZG93XScgPyBnZXRXaW5kb3dOYW1lcyhpdCkgOiBnT1BOKHRvSU9iamVjdChpdCkpO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///98\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// 19.1.2.1 Object.assign(target, source, ...)\nvar DESCRIPTORS = __webpack_require__(7);\nvar getKeys = __webpack_require__(34);\nvar gOPS = __webpack_require__(53);\nvar pIE = __webpack_require__(49);\nvar toObject = __webpack_require__(9);\nvar IObject = __webpack_require__(48);\nvar $assign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || __webpack_require__(3)(function () {\n var A = {};\n var B = {};\n // eslint-disable-next-line no-undef\n var S = Symbol();\n var K = 'abcdefghijklmnopqrst';\n A[S] = 7;\n K.split('').forEach(function (k) { B[k] = k; });\n return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n var T = toObject(target);\n var aLen = arguments.length;\n var index = 1;\n var getSymbols = gOPS.f;\n var isEnum = pIE.f;\n while (aLen > index) {\n var S = IObject(arguments[index++]);\n var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);\n var length = keys.length;\n var j = 0;\n var key;\n while (length > j) {\n key = keys[j++];\n if (!DESCRIPTORS || isEnum.call(S, key)) T[key] = S[key];\n }\n } return T;\n} : $assign;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWFzc2lnbi5qcz83MzMzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxrQkFBa0IsbUJBQU8sQ0FBQyxDQUFnQjtBQUMxQyxjQUFjLG1CQUFPLENBQUMsRUFBZ0I7QUFDdEMsV0FBVyxtQkFBTyxDQUFDLEVBQWdCO0FBQ25DLFVBQVUsbUJBQU8sQ0FBQyxFQUFlO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGNBQWMsbUJBQU8sQ0FBQyxFQUFZO0FBQ2xDOztBQUVBO0FBQ0EsNkJBQTZCLG1CQUFPLENBQUMsQ0FBVTtBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0MsVUFBVSxFQUFFO0FBQ2hELG1CQUFtQixzQ0FBc0M7QUFDekQsQ0FBQyxxQ0FBcUM7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUMiLCJmaWxlIjoiOTkuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG4vLyAxOS4xLjIuMSBPYmplY3QuYXNzaWduKHRhcmdldCwgc291cmNlLCAuLi4pXG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpO1xudmFyIGdldEtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xudmFyIGdPUFMgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wcycpO1xudmFyIHBJRSA9IHJlcXVpcmUoJy4vX29iamVjdC1waWUnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIElPYmplY3QgPSByZXF1aXJlKCcuL19pb2JqZWN0Jyk7XG52YXIgJGFzc2lnbiA9IE9iamVjdC5hc3NpZ247XG5cbi8vIHNob3VsZCB3b3JrIHdpdGggc3ltYm9scyBhbmQgc2hvdWxkIGhhdmUgZGV0ZXJtaW5pc3RpYyBwcm9wZXJ0eSBvcmRlciAoVjggYnVnKVxubW9kdWxlLmV4cG9ydHMgPSAhJGFzc2lnbiB8fCByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgdmFyIEEgPSB7fTtcbiAgdmFyIEIgPSB7fTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gIHZhciBTID0gU3ltYm9sKCk7XG4gIHZhciBLID0gJ2FiY2RlZmdoaWprbG1ub3BxcnN0JztcbiAgQVtTXSA9IDc7XG4gIEsuc3BsaXQoJycpLmZvckVhY2goZnVuY3Rpb24gKGspIHsgQltrXSA9IGs7IH0pO1xuICByZXR1cm4gJGFzc2lnbih7fSwgQSlbU10gIT0gNyB8fCBPYmplY3Qua2V5cygkYXNzaWduKHt9LCBCKSkuam9pbignJykgIT0gSztcbn0pID8gZnVuY3Rpb24gYXNzaWduKHRhcmdldCwgc291cmNlKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgdmFyIFQgPSB0b09iamVjdCh0YXJnZXQpO1xuICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gIHZhciBpbmRleCA9IDE7XG4gIHZhciBnZXRTeW1ib2xzID0gZ09QUy5mO1xuICB2YXIgaXNFbnVtID0gcElFLmY7XG4gIHdoaWxlIChhTGVuID4gaW5kZXgpIHtcbiAgICB2YXIgUyA9IElPYmplY3QoYXJndW1lbnRzW2luZGV4KytdKTtcbiAgICB2YXIga2V5cyA9IGdldFN5bWJvbHMgPyBnZXRLZXlzKFMpLmNvbmNhdChnZXRTeW1ib2xzKFMpKSA6IGdldEtleXMoUyk7XG4gICAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICAgIHZhciBqID0gMDtcbiAgICB2YXIga2V5O1xuICAgIHdoaWxlIChsZW5ndGggPiBqKSB7XG4gICAgICBrZXkgPSBrZXlzW2orK107XG4gICAgICBpZiAoIURFU0NSSVBUT1JTIHx8IGlzRW51bS5jYWxsKFMsIGtleSkpIFRba2V5XSA9IFNba2V5XTtcbiAgICB9XG4gIH0gcmV0dXJuIFQ7XG59IDogJGFzc2lnbjtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///99\n")},function(module,exports){eval("// 7.2.9 SameValue(x, y)\nmodule.exports = Object.is || function is(x, y) {\n // eslint-disable-next-line no-self-compare\n return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2FtZS12YWx1ZS5qcz84M2ExIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMTAwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gNy4yLjkgU2FtZVZhbHVlKHgsIHkpXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5pcyB8fCBmdW5jdGlvbiBpcyh4LCB5KSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgcmV0dXJuIHggPT09IHkgPyB4ICE9PSAwIHx8IDEgLyB4ID09PSAxIC8geSA6IHggIT0geCAmJiB5ICE9IHk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///100\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar aFunction = __webpack_require__(10);\nvar isObject = __webpack_require__(4);\nvar invoke = __webpack_require__(102);\nvar arraySlice = [].slice;\nvar factories = {};\n\nvar construct = function (F, len, args) {\n if (!(len in factories)) {\n for (var n = [], i = 0; i < len; i++) n[i] = 'a[' + i + ']';\n // eslint-disable-next-line no-new-func\n factories[len] = Function('F,a', 'return new F(' + n.join(',') + ')');\n } return factories[len](F, args);\n};\n\nmodule.exports = Function.bind || function bind(that /* , ...args */) {\n var fn = aFunction(this);\n var partArgs = arraySlice.call(arguments, 1);\n var bound = function (/* args... */) {\n var args = partArgs.concat(arraySlice.call(arguments));\n return this instanceof bound ? construct(fn, args.length, args) : invoke(fn, args, that);\n };\n if (isObject(fn.prototype)) bound.prototype = fn.prototype;\n return bound;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYmluZC5qcz9mMGMxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2QyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxhQUFhLG1CQUFPLENBQUMsR0FBVztBQUNoQztBQUNBOztBQUVBO0FBQ0E7QUFDQSwyQkFBMkIsU0FBUztBQUNwQztBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjEwMS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBpbnZva2UgPSByZXF1aXJlKCcuL19pbnZva2UnKTtcbnZhciBhcnJheVNsaWNlID0gW10uc2xpY2U7XG52YXIgZmFjdG9yaWVzID0ge307XG5cbnZhciBjb25zdHJ1Y3QgPSBmdW5jdGlvbiAoRiwgbGVuLCBhcmdzKSB7XG4gIGlmICghKGxlbiBpbiBmYWN0b3JpZXMpKSB7XG4gICAgZm9yICh2YXIgbiA9IFtdLCBpID0gMDsgaSA8IGxlbjsgaSsrKSBuW2ldID0gJ2FbJyArIGkgKyAnXSc7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jXG4gICAgZmFjdG9yaWVzW2xlbl0gPSBGdW5jdGlvbignRixhJywgJ3JldHVybiBuZXcgRignICsgbi5qb2luKCcsJykgKyAnKScpO1xuICB9IHJldHVybiBmYWN0b3JpZXNbbGVuXShGLCBhcmdzKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gRnVuY3Rpb24uYmluZCB8fCBmdW5jdGlvbiBiaW5kKHRoYXQgLyogLCAuLi5hcmdzICovKSB7XG4gIHZhciBmbiA9IGFGdW5jdGlvbih0aGlzKTtcbiAgdmFyIHBhcnRBcmdzID0gYXJyYXlTbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gIHZhciBib3VuZCA9IGZ1bmN0aW9uICgvKiBhcmdzLi4uICovKSB7XG4gICAgdmFyIGFyZ3MgPSBwYXJ0QXJncy5jb25jYXQoYXJyYXlTbGljZS5jYWxsKGFyZ3VtZW50cykpO1xuICAgIHJldHVybiB0aGlzIGluc3RhbmNlb2YgYm91bmQgPyBjb25zdHJ1Y3QoZm4sIGFyZ3MubGVuZ3RoLCBhcmdzKSA6IGludm9rZShmbiwgYXJncywgdGhhdCk7XG4gIH07XG4gIGlmIChpc09iamVjdChmbi5wcm90b3R5cGUpKSBib3VuZC5wcm90b3R5cGUgPSBmbi5wcm90b3R5cGU7XG4gIHJldHVybiBib3VuZDtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///101\n")},function(module,exports){eval("// fast apply, http://jsperf.lnkit.com/fast-apply/5\nmodule.exports = function (fn, args, that) {\n var un = that === undefined;\n switch (args.length) {\n case 0: return un ? fn()\n : fn.call(that);\n case 1: return un ? fn(args[0])\n : fn.call(that, args[0]);\n case 2: return un ? fn(args[0], args[1])\n : fn.call(that, args[0], args[1]);\n case 3: return un ? fn(args[0], args[1], args[2])\n : fn.call(that, args[0], args[1], args[2]);\n case 4: return un ? fn(args[0], args[1], args[2], args[3])\n : fn.call(that, args[0], args[1], args[2], args[3]);\n } return fn.apply(that, args);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faW52b2tlLmpzPzMxZjQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCIsImZpbGUiOiIxMDIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBmYXN0IGFwcGx5LCBodHRwOi8vanNwZXJmLmxua2l0LmNvbS9mYXN0LWFwcGx5LzVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGZuLCBhcmdzLCB0aGF0KSB7XG4gIHZhciB1biA9IHRoYXQgPT09IHVuZGVmaW5lZDtcbiAgc3dpdGNoIChhcmdzLmxlbmd0aCkge1xuICAgIGNhc2UgMDogcmV0dXJuIHVuID8gZm4oKVxuICAgICAgICAgICAgICAgICAgICAgIDogZm4uY2FsbCh0aGF0KTtcbiAgICBjYXNlIDE6IHJldHVybiB1biA/IGZuKGFyZ3NbMF0pXG4gICAgICAgICAgICAgICAgICAgICAgOiBmbi5jYWxsKHRoYXQsIGFyZ3NbMF0pO1xuICAgIGNhc2UgMjogcmV0dXJuIHVuID8gZm4oYXJnc1swXSwgYXJnc1sxXSlcbiAgICAgICAgICAgICAgICAgICAgICA6IGZuLmNhbGwodGhhdCwgYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgY2FzZSAzOiByZXR1cm4gdW4gPyBmbihhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKVxuICAgICAgICAgICAgICAgICAgICAgIDogZm4uY2FsbCh0aGF0LCBhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcbiAgICBjYXNlIDQ6IHJldHVybiB1biA/IGZuKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10pXG4gICAgICAgICAgICAgICAgICAgICAgOiBmbi5jYWxsKHRoYXQsIGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10pO1xuICB9IHJldHVybiBmbi5hcHBseSh0aGF0LCBhcmdzKTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///102\n")},function(module,exports,__webpack_require__){eval("var $parseInt = __webpack_require__(2).parseInt;\nvar $trim = __webpack_require__(45).trim;\nvar ws = __webpack_require__(72);\nvar hex = /^[-+]?0[xX]/;\n\nmodule.exports = $parseInt(ws + '08') !== 8 || $parseInt(ws + '0x16') !== 22 ? function parseInt(str, radix) {\n var string = $trim(String(str), 3);\n return $parseInt(string, (radix >>> 0) || (hex.test(string) ? 16 : 10));\n} : $parseInt;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcGFyc2UtaW50LmpzPzNjYTUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZ0JBQWdCLG1CQUFPLENBQUMsQ0FBVztBQUNuQyxZQUFZLG1CQUFPLENBQUMsRUFBZ0I7QUFDcEMsU0FBUyxtQkFBTyxDQUFDLEVBQWM7QUFDL0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIxMDMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgJHBhcnNlSW50ID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykucGFyc2VJbnQ7XG52YXIgJHRyaW0gPSByZXF1aXJlKCcuL19zdHJpbmctdHJpbScpLnRyaW07XG52YXIgd3MgPSByZXF1aXJlKCcuL19zdHJpbmctd3MnKTtcbnZhciBoZXggPSAvXlstK10/MFt4WF0vO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICRwYXJzZUludCh3cyArICcwOCcpICE9PSA4IHx8ICRwYXJzZUludCh3cyArICcweDE2JykgIT09IDIyID8gZnVuY3Rpb24gcGFyc2VJbnQoc3RyLCByYWRpeCkge1xuICB2YXIgc3RyaW5nID0gJHRyaW0oU3RyaW5nKHN0ciksIDMpO1xuICByZXR1cm4gJHBhcnNlSW50KHN0cmluZywgKHJhZGl4ID4+PiAwKSB8fCAoaGV4LnRlc3Qoc3RyaW5nKSA/IDE2IDogMTApKTtcbn0gOiAkcGFyc2VJbnQ7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///103\n")},function(module,exports,__webpack_require__){eval("var $parseFloat = __webpack_require__(2).parseFloat;\nvar $trim = __webpack_require__(45).trim;\n\nmodule.exports = 1 / $parseFloat(__webpack_require__(72) + '-0') !== -Infinity ? function parseFloat(str) {\n var string = $trim(String(str), 3);\n var result = $parseFloat(string);\n return result === 0 && string.charAt(0) == '-' ? -0 : result;\n} : $parseFloat;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcGFyc2UtZmxvYXQuanM/ZDc1MiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxrQkFBa0IsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JDLFlBQVksbUJBQU8sQ0FBQyxFQUFnQjs7QUFFcEMsaUNBQWlDLG1CQUFPLENBQUMsRUFBYztBQUN2RDtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjEwNC5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciAkcGFyc2VGbG9hdCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLnBhcnNlRmxvYXQ7XG52YXIgJHRyaW0gPSByZXF1aXJlKCcuL19zdHJpbmctdHJpbScpLnRyaW07XG5cbm1vZHVsZS5leHBvcnRzID0gMSAvICRwYXJzZUZsb2F0KHJlcXVpcmUoJy4vX3N0cmluZy13cycpICsgJy0wJykgIT09IC1JbmZpbml0eSA/IGZ1bmN0aW9uIHBhcnNlRmxvYXQoc3RyKSB7XG4gIHZhciBzdHJpbmcgPSAkdHJpbShTdHJpbmcoc3RyKSwgMyk7XG4gIHZhciByZXN1bHQgPSAkcGFyc2VGbG9hdChzdHJpbmcpO1xuICByZXR1cm4gcmVzdWx0ID09PSAwICYmIHN0cmluZy5jaGFyQXQoMCkgPT0gJy0nID8gLTAgOiByZXN1bHQ7XG59IDogJHBhcnNlRmxvYXQ7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///104\n")},function(module,exports,__webpack_require__){eval("var cof = __webpack_require__(20);\nmodule.exports = function (it, msg) {\n if (typeof it != 'number' && cof(it) != 'Number') throw TypeError(msg);\n return +it;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYS1udW1iZXItdmFsdWUuanM/YmVmOSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxVQUFVLG1CQUFPLENBQUMsRUFBUTtBQUMxQjtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIxMDUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgbXNnKSB7XG4gIGlmICh0eXBlb2YgaXQgIT0gJ251bWJlcicgJiYgY29mKGl0KSAhPSAnTnVtYmVyJykgdGhyb3cgVHlwZUVycm9yKG1zZyk7XG4gIHJldHVybiAraXQ7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///105\n")},function(module,exports,__webpack_require__){eval("// 20.1.2.3 Number.isInteger(number)\nvar isObject = __webpack_require__(4);\nvar floor = Math.floor;\nmodule.exports = function isInteger(it) {\n return !isObject(it) && isFinite(it) && floor(it) === it;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtaW50ZWdlci5qcz85YzEyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckM7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMTA2LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMS4yLjMgTnVtYmVyLmlzSW50ZWdlcihudW1iZXIpXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzSW50ZWdlcihpdCkge1xuICByZXR1cm4gIWlzT2JqZWN0KGl0KSAmJiBpc0Zpbml0ZShpdCkgJiYgZmxvb3IoaXQpID09PSBpdDtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///106\n")},function(module,exports){eval("// 20.2.2.20 Math.log1p(x)\nmodule.exports = Math.log1p || function log1p(x) {\n return (x = +x) > -1e-8 && x < 1e-8 ? x - x * x / 2 : Math.log(1 + x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWF0aC1sb2cxcC5qcz9kNmM2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjEwNy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDIwLjIuMi4yMCBNYXRoLmxvZzFwKHgpXG5tb2R1bGUuZXhwb3J0cyA9IE1hdGgubG9nMXAgfHwgZnVuY3Rpb24gbG9nMXAoeCkge1xuICByZXR1cm4gKHggPSAreCkgPiAtMWUtOCAmJiB4IDwgMWUtOCA/IHggLSB4ICogeCAvIDIgOiBNYXRoLmxvZygxICsgeCk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///107\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.16 Math.fround(x)\nvar sign = __webpack_require__(75);\nvar pow = Math.pow;\nvar EPSILON = pow(2, -52);\nvar EPSILON32 = pow(2, -23);\nvar MAX32 = pow(2, 127) * (2 - EPSILON32);\nvar MIN32 = pow(2, -126);\n\nvar roundTiesToEven = function (n) {\n return n + 1 / EPSILON - 1 / EPSILON;\n};\n\nmodule.exports = Math.fround || function fround(x) {\n var $abs = Math.abs(x);\n var $sign = sign(x);\n var a, result;\n if ($abs < MIN32) return $sign * roundTiesToEven($abs / MIN32 / EPSILON32) * MIN32 * EPSILON32;\n a = (1 + EPSILON32 / EPSILON) * $abs;\n result = a - (a - $abs);\n // eslint-disable-next-line no-self-compare\n if (result > MAX32 || result != result) return $sign * Infinity;\n return $sign * result;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWF0aC1mcm91bmQuanM/OTFjYSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLFdBQVcsbUJBQU8sQ0FBQyxFQUFjO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMTA4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMi4yLjE2IE1hdGguZnJvdW5kKHgpXG52YXIgc2lnbiA9IHJlcXVpcmUoJy4vX21hdGgtc2lnbicpO1xudmFyIHBvdyA9IE1hdGgucG93O1xudmFyIEVQU0lMT04gPSBwb3coMiwgLTUyKTtcbnZhciBFUFNJTE9OMzIgPSBwb3coMiwgLTIzKTtcbnZhciBNQVgzMiA9IHBvdygyLCAxMjcpICogKDIgLSBFUFNJTE9OMzIpO1xudmFyIE1JTjMyID0gcG93KDIsIC0xMjYpO1xuXG52YXIgcm91bmRUaWVzVG9FdmVuID0gZnVuY3Rpb24gKG4pIHtcbiAgcmV0dXJuIG4gKyAxIC8gRVBTSUxPTiAtIDEgLyBFUFNJTE9OO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBNYXRoLmZyb3VuZCB8fCBmdW5jdGlvbiBmcm91bmQoeCkge1xuICB2YXIgJGFicyA9IE1hdGguYWJzKHgpO1xuICB2YXIgJHNpZ24gPSBzaWduKHgpO1xuICB2YXIgYSwgcmVzdWx0O1xuICBpZiAoJGFicyA8IE1JTjMyKSByZXR1cm4gJHNpZ24gKiByb3VuZFRpZXNUb0V2ZW4oJGFicyAvIE1JTjMyIC8gRVBTSUxPTjMyKSAqIE1JTjMyICogRVBTSUxPTjMyO1xuICBhID0gKDEgKyBFUFNJTE9OMzIgLyBFUFNJTE9OKSAqICRhYnM7XG4gIHJlc3VsdCA9IGEgLSAoYSAtICRhYnMpO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gIGlmIChyZXN1bHQgPiBNQVgzMiB8fCByZXN1bHQgIT0gcmVzdWx0KSByZXR1cm4gJHNpZ24gKiBJbmZpbml0eTtcbiAgcmV0dXJuICRzaWduICogcmVzdWx0O1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///108\n")},function(module,exports,__webpack_require__){eval("// call something on iterator step with safe closing on error\nvar anObject = __webpack_require__(1);\nmodule.exports = function (iterator, fn, value, entries) {\n try {\n return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n // 7.4.6 IteratorClose(iterator, completion)\n } catch (e) {\n var ret = iterator['return'];\n if (ret !== undefined) anObject(ret.call(iterator));\n throw e;\n }\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlci1jYWxsLmpzPzFmYTgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjEwOS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGNhbGwgc29tZXRoaW5nIG9uIGl0ZXJhdG9yIHN0ZXAgd2l0aCBzYWZlIGNsb3Npbmcgb24gZXJyb3JcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIGZuLCB2YWx1ZSwgZW50cmllcykge1xuICB0cnkge1xuICAgIHJldHVybiBlbnRyaWVzID8gZm4oYW5PYmplY3QodmFsdWUpWzBdLCB2YWx1ZVsxXSkgOiBmbih2YWx1ZSk7XG4gIC8vIDcuNC42IEl0ZXJhdG9yQ2xvc2UoaXRlcmF0b3IsIGNvbXBsZXRpb24pXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB2YXIgcmV0ID0gaXRlcmF0b3JbJ3JldHVybiddO1xuICAgIGlmIChyZXQgIT09IHVuZGVmaW5lZCkgYW5PYmplY3QocmV0LmNhbGwoaXRlcmF0b3IpKTtcbiAgICB0aHJvdyBlO1xuICB9XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///109\n")},function(module,exports,__webpack_require__){eval("var aFunction = __webpack_require__(10);\nvar toObject = __webpack_require__(9);\nvar IObject = __webpack_require__(48);\nvar toLength = __webpack_require__(6);\n\nmodule.exports = function (that, callbackfn, aLen, memo, isRight) {\n aFunction(callbackfn);\n var O = toObject(that);\n var self = IObject(O);\n var length = toLength(O.length);\n var index = isRight ? length - 1 : 0;\n var i = isRight ? -1 : 1;\n if (aLen < 2) for (;;) {\n if (index in self) {\n memo = self[index];\n index += i;\n break;\n }\n index += i;\n if (isRight ? index < 0 : length <= index) {\n throw TypeError('Reduce of empty array with no initial value');\n }\n }\n for (;isRight ? index >= 0 : length > index; index += i) if (index in self) {\n memo = callbackfn(memo, self[index], index, O);\n }\n return memo;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktcmVkdWNlLmpzPzdiMjMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2QyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxjQUFjLG1CQUFPLENBQUMsRUFBWTtBQUNsQyxlQUFlLG1CQUFPLENBQUMsQ0FBYzs7QUFFckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLHNDQUFzQztBQUM5QztBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIxMTAuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgSU9iamVjdCA9IHJlcXVpcmUoJy4vX2lvYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0aGF0LCBjYWxsYmFja2ZuLCBhTGVuLCBtZW1vLCBpc1JpZ2h0KSB7XG4gIGFGdW5jdGlvbihjYWxsYmFja2ZuKTtcbiAgdmFyIE8gPSB0b09iamVjdCh0aGF0KTtcbiAgdmFyIHNlbGYgPSBJT2JqZWN0KE8pO1xuICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICB2YXIgaW5kZXggPSBpc1JpZ2h0ID8gbGVuZ3RoIC0gMSA6IDA7XG4gIHZhciBpID0gaXNSaWdodCA/IC0xIDogMTtcbiAgaWYgKGFMZW4gPCAyKSBmb3IgKDs7KSB7XG4gICAgaWYgKGluZGV4IGluIHNlbGYpIHtcbiAgICAgIG1lbW8gPSBzZWxmW2luZGV4XTtcbiAgICAgIGluZGV4ICs9IGk7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgaW5kZXggKz0gaTtcbiAgICBpZiAoaXNSaWdodCA/IGluZGV4IDwgMCA6IGxlbmd0aCA8PSBpbmRleCkge1xuICAgICAgdGhyb3cgVHlwZUVycm9yKCdSZWR1Y2Ugb2YgZW1wdHkgYXJyYXkgd2l0aCBubyBpbml0aWFsIHZhbHVlJyk7XG4gICAgfVxuICB9XG4gIGZvciAoO2lzUmlnaHQgPyBpbmRleCA+PSAwIDogbGVuZ3RoID4gaW5kZXg7IGluZGV4ICs9IGkpIGlmIChpbmRleCBpbiBzZWxmKSB7XG4gICAgbWVtbyA9IGNhbGxiYWNrZm4obWVtbywgc2VsZltpbmRleF0sIGluZGV4LCBPKTtcbiAgfVxuICByZXR1cm4gbWVtbztcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///110\n")},function(module,exports,__webpack_require__){"use strict";eval("// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\n\nvar toObject = __webpack_require__(9);\nvar toAbsoluteIndex = __webpack_require__(35);\nvar toLength = __webpack_require__(6);\n\nmodule.exports = [].copyWithin || function copyWithin(target /* = 0 */, start /* = 0, end = @length */) {\n var O = toObject(this);\n var len = toLength(O.length);\n var to = toAbsoluteIndex(target, len);\n var from = toAbsoluteIndex(start, len);\n var end = arguments.length > 2 ? arguments[2] : undefined;\n var count = Math.min((end === undefined ? len : toAbsoluteIndex(end, len)) - from, len - to);\n var inc = 1;\n if (from < to && to < from + count) {\n inc = -1;\n from += count - 1;\n to += count - 1;\n }\n while (count-- > 0) {\n if (from in O) O[to] = O[from];\n else delete O[to];\n to += inc;\n from += inc;\n } return O;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktY29weS13aXRoaW4uanM/YmE5MiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNhO0FBQ2IsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsc0JBQXNCLG1CQUFPLENBQUMsRUFBc0I7QUFDcEQsZUFBZSxtQkFBTyxDQUFDLENBQWM7O0FBRXJDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCIsImZpbGUiOiIxMTEuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyMi4xLjMuMyBBcnJheS5wcm90b3R5cGUuY29weVdpdGhpbih0YXJnZXQsIHN0YXJ0LCBlbmQgPSB0aGlzLmxlbmd0aClcbid1c2Ugc3RyaWN0JztcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4vX3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBbXS5jb3B5V2l0aGluIHx8IGZ1bmN0aW9uIGNvcHlXaXRoaW4odGFyZ2V0IC8qID0gMCAqLywgc3RhcnQgLyogPSAwLCBlbmQgPSBAbGVuZ3RoICovKSB7XG4gIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gIHZhciBsZW4gPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gIHZhciB0byA9IHRvQWJzb2x1dGVJbmRleCh0YXJnZXQsIGxlbik7XG4gIHZhciBmcm9tID0gdG9BYnNvbHV0ZUluZGV4KHN0YXJ0LCBsZW4pO1xuICB2YXIgZW5kID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQ7XG4gIHZhciBjb3VudCA9IE1hdGgubWluKChlbmQgPT09IHVuZGVmaW5lZCA/IGxlbiA6IHRvQWJzb2x1dGVJbmRleChlbmQsIGxlbikpIC0gZnJvbSwgbGVuIC0gdG8pO1xuICB2YXIgaW5jID0gMTtcbiAgaWYgKGZyb20gPCB0byAmJiB0byA8IGZyb20gKyBjb3VudCkge1xuICAgIGluYyA9IC0xO1xuICAgIGZyb20gKz0gY291bnQgLSAxO1xuICAgIHRvICs9IGNvdW50IC0gMTtcbiAgfVxuICB3aGlsZSAoY291bnQtLSA+IDApIHtcbiAgICBpZiAoZnJvbSBpbiBPKSBPW3RvXSA9IE9bZnJvbV07XG4gICAgZWxzZSBkZWxldGUgT1t0b107XG4gICAgdG8gKz0gaW5jO1xuICAgIGZyb20gKz0gaW5jO1xuICB9IHJldHVybiBPO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///111\n")},function(module,exports){eval("module.exports = function (done, value) {\n return { value: value, done: !!done };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlci1zdGVwLmpzP2Q1M2IiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxVQUFVO0FBQ1YiLCJmaWxlIjoiMTEyLmpzIiwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZG9uZSwgdmFsdWUpIHtcbiAgcmV0dXJuIHsgdmFsdWU6IHZhbHVlLCBkb25lOiAhIWRvbmUgfTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///112\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar regexpExec = __webpack_require__(87);\n__webpack_require__(0)({\n target: 'RegExp',\n proto: true,\n forced: regexpExec !== /./.exec\n}, {\n exec: regexpExec\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLmV4ZWMuanM/YjBjNSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGlCQUFpQixtQkFBTyxDQUFDLEVBQWdCO0FBQ3pDLG1CQUFPLENBQUMsQ0FBVztBQUNuQjtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQSxDQUFDIiwiZmlsZSI6IjExMy5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciByZWdleHBFeGVjID0gcmVxdWlyZSgnLi9fcmVnZXhwLWV4ZWMnKTtcbnJlcXVpcmUoJy4vX2V4cG9ydCcpKHtcbiAgdGFyZ2V0OiAnUmVnRXhwJyxcbiAgcHJvdG86IHRydWUsXG4gIGZvcmNlZDogcmVnZXhwRXhlYyAhPT0gLy4vLmV4ZWNcbn0sIHtcbiAgZXhlYzogcmVnZXhwRXhlY1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///113\n")},function(module,exports,__webpack_require__){eval("// 21.2.5.3 get RegExp.prototype.flags()\nif (__webpack_require__(7) && /./g.flags != 'g') __webpack_require__(8).f(RegExp.prototype, 'flags', {\n configurable: true,\n get: __webpack_require__(50)\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLmZsYWdzLmpzPzM4NDYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxJQUFJLG1CQUFPLENBQUMsQ0FBZ0Isd0JBQXdCLG1CQUFPLENBQUMsQ0FBYztBQUMxRTtBQUNBLE9BQU8sbUJBQU8sQ0FBQyxFQUFVO0FBQ3pCLENBQUMiLCJmaWxlIjoiMTE0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjEuMi41LjMgZ2V0IFJlZ0V4cC5wcm90b3R5cGUuZmxhZ3MoKVxuaWYgKHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgLy4vZy5mbGFncyAhPSAnZycpIHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmYoUmVnRXhwLnByb3RvdHlwZSwgJ2ZsYWdzJywge1xuICBjb25maWd1cmFibGU6IHRydWUsXG4gIGdldDogcmVxdWlyZSgnLi9fZmxhZ3MnKVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///114\n")},function(module,exports){eval("module.exports = function (exec) {\n try {\n return { e: false, v: exec() };\n } catch (e) {\n return { e: true, v: e };\n }\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcGVyZm9ybS5qcz85YzgwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQSxZQUFZO0FBQ1osR0FBRztBQUNILFlBQVk7QUFDWjtBQUNBIiwiZmlsZSI6IjExNS5qcyIsInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4geyBlOiBmYWxzZSwgdjogZXhlYygpIH07XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4geyBlOiB0cnVlLCB2OiBlIH07XG4gIH1cbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///115\n")},function(module,exports,__webpack_require__){eval("var anObject = __webpack_require__(1);\nvar isObject = __webpack_require__(4);\nvar newPromiseCapability = __webpack_require__(91);\n\nmodule.exports = function (C, x) {\n anObject(C);\n if (isObject(x) && x.constructor === C) return x;\n var promiseCapability = newPromiseCapability.f(C);\n var resolve = promiseCapability.resolve;\n resolve(x);\n return promiseCapability.promise;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcHJvbWlzZS1yZXNvbHZlLmpzP2JjYWEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsMkJBQTJCLG1CQUFPLENBQUMsRUFBMkI7O0FBRTlEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMTE2LmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IHJlcXVpcmUoJy4vX25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQywgeCkge1xuICBhbk9iamVjdChDKTtcbiAgaWYgKGlzT2JqZWN0KHgpICYmIHguY29uc3RydWN0b3IgPT09IEMpIHJldHVybiB4O1xuICB2YXIgcHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eS5mKEMpO1xuICB2YXIgcmVzb2x2ZSA9IHByb21pc2VDYXBhYmlsaXR5LnJlc29sdmU7XG4gIHJlc29sdmUoeCk7XG4gIHJldHVybiBwcm9taXNlQ2FwYWJpbGl0eS5wcm9taXNlO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///116\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar strong = __webpack_require__(118);\nvar validate = __webpack_require__(42);\nvar MAP = 'Map';\n\n// 23.1 Map Objects\nmodule.exports = __webpack_require__(61)(MAP, function (get) {\n return function Map() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.1.3.6 Map.prototype.get(key)\n get: function get(key) {\n var entry = strong.getEntry(validate(this, MAP), key);\n return entry && entry.v;\n },\n // 23.1.3.9 Map.prototype.set(key, value)\n set: function set(key, value) {\n return strong.def(validate(this, MAP), key === 0 ? 0 : key, value);\n }\n}, strong, true);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWFwLmpzP2Y0MDAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixhQUFhLG1CQUFPLENBQUMsR0FBc0I7QUFDM0MsZUFBZSxtQkFBTyxDQUFDLEVBQXdCO0FBQy9DOztBQUVBO0FBQ0EsaUJBQWlCLG1CQUFPLENBQUMsRUFBZTtBQUN4Qyx5QkFBeUIsbUVBQW1FO0FBQzVGLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTE3LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIHN0cm9uZyA9IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24tc3Ryb25nJyk7XG52YXIgdmFsaWRhdGUgPSByZXF1aXJlKCcuL192YWxpZGF0ZS1jb2xsZWN0aW9uJyk7XG52YXIgTUFQID0gJ01hcCc7XG5cbi8vIDIzLjEgTWFwIE9iamVjdHNcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fY29sbGVjdGlvbicpKE1BUCwgZnVuY3Rpb24gKGdldCkge1xuICByZXR1cm4gZnVuY3Rpb24gTWFwKCkgeyByZXR1cm4gZ2V0KHRoaXMsIGFyZ3VtZW50cy5sZW5ndGggPiAwID8gYXJndW1lbnRzWzBdIDogdW5kZWZpbmVkKTsgfTtcbn0sIHtcbiAgLy8gMjMuMS4zLjYgTWFwLnByb3RvdHlwZS5nZXQoa2V5KVxuICBnZXQ6IGZ1bmN0aW9uIGdldChrZXkpIHtcbiAgICB2YXIgZW50cnkgPSBzdHJvbmcuZ2V0RW50cnkodmFsaWRhdGUodGhpcywgTUFQKSwga2V5KTtcbiAgICByZXR1cm4gZW50cnkgJiYgZW50cnkudjtcbiAgfSxcbiAgLy8gMjMuMS4zLjkgTWFwLnByb3RvdHlwZS5zZXQoa2V5LCB2YWx1ZSlcbiAgc2V0OiBmdW5jdGlvbiBzZXQoa2V5LCB2YWx1ZSkge1xuICAgIHJldHVybiBzdHJvbmcuZGVmKHZhbGlkYXRlKHRoaXMsIE1BUCksIGtleSA9PT0gMCA/IDAgOiBrZXksIHZhbHVlKTtcbiAgfVxufSwgc3Ryb25nLCB0cnVlKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///117\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar dP = __webpack_require__(8).f;\nvar create = __webpack_require__(36);\nvar redefineAll = __webpack_require__(41);\nvar ctx = __webpack_require__(19);\nvar anInstance = __webpack_require__(39);\nvar forOf = __webpack_require__(40);\nvar $iterDefine = __webpack_require__(77);\nvar step = __webpack_require__(112);\nvar setSpecies = __webpack_require__(38);\nvar DESCRIPTORS = __webpack_require__(7);\nvar fastKey = __webpack_require__(30).fastKey;\nvar validate = __webpack_require__(42);\nvar SIZE = DESCRIPTORS ? '_s' : 'size';\n\nvar getEntry = function (that, key) {\n // fast case\n var index = fastKey(key);\n var entry;\n if (index !== 'F') return that._i[index];\n // frozen object case\n for (entry = that._f; entry; entry = entry.n) {\n if (entry.k == key) return entry;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = create(null); // index\n that._f = undefined; // first entry\n that._l = undefined; // last entry\n that[SIZE] = 0; // size\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.1.3.1 Map.prototype.clear()\n // 23.2.3.2 Set.prototype.clear()\n clear: function clear() {\n for (var that = validate(this, NAME), data = that._i, entry = that._f; entry; entry = entry.n) {\n entry.r = true;\n if (entry.p) entry.p = entry.p.n = undefined;\n delete data[entry.i];\n }\n that._f = that._l = undefined;\n that[SIZE] = 0;\n },\n // 23.1.3.3 Map.prototype.delete(key)\n // 23.2.3.4 Set.prototype.delete(value)\n 'delete': function (key) {\n var that = validate(this, NAME);\n var entry = getEntry(that, key);\n if (entry) {\n var next = entry.n;\n var prev = entry.p;\n delete that._i[entry.i];\n entry.r = true;\n if (prev) prev.n = next;\n if (next) next.p = prev;\n if (that._f == entry) that._f = next;\n if (that._l == entry) that._l = prev;\n that[SIZE]--;\n } return !!entry;\n },\n // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined)\n // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined)\n forEach: function forEach(callbackfn /* , that = undefined */) {\n validate(this, NAME);\n var f = ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3);\n var entry;\n while (entry = entry ? entry.n : this._f) {\n f(entry.v, entry.k, this);\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n }\n },\n // 23.1.3.7 Map.prototype.has(key)\n // 23.2.3.7 Set.prototype.has(value)\n has: function has(key) {\n return !!getEntry(validate(this, NAME), key);\n }\n });\n if (DESCRIPTORS) dP(C.prototype, 'size', {\n get: function () {\n return validate(this, NAME)[SIZE];\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var entry = getEntry(that, key);\n var prev, index;\n // change existing entry\n if (entry) {\n entry.v = value;\n // create new entry\n } else {\n that._l = entry = {\n i: index = fastKey(key, true), // <- index\n k: key, // <- key\n v: value, // <- value\n p: prev = that._l, // <- previous entry\n n: undefined, // <- next entry\n r: false // <- removed\n };\n if (!that._f) that._f = entry;\n if (prev) prev.n = entry;\n that[SIZE]++;\n // add to index\n if (index !== 'F') that._i[index] = entry;\n } return that;\n },\n getEntry: getEntry,\n setStrong: function (C, NAME, IS_MAP) {\n // add .keys, .values, .entries, [@@iterator]\n // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11\n $iterDefine(C, NAME, function (iterated, kind) {\n this._t = validate(iterated, NAME); // target\n this._k = kind; // kind\n this._l = undefined; // previous\n }, function () {\n var that = this;\n var kind = that._k;\n var entry = that._l;\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n // get next entry\n if (!that._t || !(that._l = entry = entry ? entry.n : that._t._f)) {\n // or finish the iteration\n that._t = undefined;\n return step(1);\n }\n // return step by kind\n if (kind == 'keys') return step(0, entry.k);\n if (kind == 'values') return step(0, entry.v);\n return step(0, [entry.k, entry.v]);\n }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);\n\n // add [@@species], 23.1.2.2, 23.2.2.2\n setSpecies(NAME);\n }\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY29sbGVjdGlvbi1zdHJvbmcuanM/YzI2YiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLFNBQVMsbUJBQU8sQ0FBQyxDQUFjO0FBQy9CLGFBQWEsbUJBQU8sQ0FBQyxFQUFrQjtBQUN2QyxrQkFBa0IsbUJBQU8sQ0FBQyxFQUFpQjtBQUMzQyxVQUFVLG1CQUFPLENBQUMsRUFBUTtBQUMxQixpQkFBaUIsbUJBQU8sQ0FBQyxFQUFnQjtBQUN6QyxZQUFZLG1CQUFPLENBQUMsRUFBVztBQUMvQixrQkFBa0IsbUJBQU8sQ0FBQyxFQUFnQjtBQUMxQyxXQUFXLG1CQUFPLENBQUMsR0FBYztBQUNqQyxpQkFBaUIsbUJBQU8sQ0FBQyxFQUFnQjtBQUN6QyxrQkFBa0IsbUJBQU8sQ0FBQyxDQUFnQjtBQUMxQyxjQUFjLG1CQUFPLENBQUMsRUFBUztBQUMvQixlQUFlLG1CQUFPLENBQUMsRUFBd0I7QUFDL0M7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLE9BQU87QUFDOUI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCLDZCQUE2QjtBQUM3QiwwQkFBMEI7QUFDMUIsMEJBQTBCO0FBQzFCLHFCQUFxQjtBQUNyQjtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhFQUE4RSxPQUFPO0FBQ3JGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlDQUF5QztBQUN6QyxxQkFBcUI7QUFDckIsMEJBQTBCO0FBQzFCLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjExOC5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpO1xudmFyIHJlZGVmaW5lQWxsID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUtYWxsJyk7XG52YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG52YXIgZm9yT2YgPSByZXF1aXJlKCcuL19mb3Itb2YnKTtcbnZhciAkaXRlckRlZmluZSA9IHJlcXVpcmUoJy4vX2l0ZXItZGVmaW5lJyk7XG52YXIgc3RlcCA9IHJlcXVpcmUoJy4vX2l0ZXItc3RlcCcpO1xudmFyIHNldFNwZWNpZXMgPSByZXF1aXJlKCcuL19zZXQtc3BlY2llcycpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKTtcbnZhciBmYXN0S2V5ID0gcmVxdWlyZSgnLi9fbWV0YScpLmZhc3RLZXk7XG52YXIgdmFsaWRhdGUgPSByZXF1aXJlKCcuL192YWxpZGF0ZS1jb2xsZWN0aW9uJyk7XG52YXIgU0laRSA9IERFU0NSSVBUT1JTID8gJ19zJyA6ICdzaXplJztcblxudmFyIGdldEVudHJ5ID0gZnVuY3Rpb24gKHRoYXQsIGtleSkge1xuICAvLyBmYXN0IGNhc2VcbiAgdmFyIGluZGV4ID0gZmFzdEtleShrZXkpO1xuICB2YXIgZW50cnk7XG4gIGlmIChpbmRleCAhPT0gJ0YnKSByZXR1cm4gdGhhdC5faVtpbmRleF07XG4gIC8vIGZyb3plbiBvYmplY3QgY2FzZVxuICBmb3IgKGVudHJ5ID0gdGhhdC5fZjsgZW50cnk7IGVudHJ5ID0gZW50cnkubikge1xuICAgIGlmIChlbnRyeS5rID09IGtleSkgcmV0dXJuIGVudHJ5O1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZ2V0Q29uc3RydWN0b3I6IGZ1bmN0aW9uICh3cmFwcGVyLCBOQU1FLCBJU19NQVAsIEFEREVSKSB7XG4gICAgdmFyIEMgPSB3cmFwcGVyKGZ1bmN0aW9uICh0aGF0LCBpdGVyYWJsZSkge1xuICAgICAgYW5JbnN0YW5jZSh0aGF0LCBDLCBOQU1FLCAnX2knKTtcbiAgICAgIHRoYXQuX3QgPSBOQU1FOyAgICAgICAgIC8vIGNvbGxlY3Rpb24gdHlwZVxuICAgICAgdGhhdC5faSA9IGNyZWF0ZShudWxsKTsgLy8gaW5kZXhcbiAgICAgIHRoYXQuX2YgPSB1bmRlZmluZWQ7ICAgIC8vIGZpcnN0IGVudHJ5XG4gICAgICB0aGF0Ll9sID0gdW5kZWZpbmVkOyAgICAvLyBsYXN0IGVudHJ5XG4gICAgICB0aGF0W1NJWkVdID0gMDsgICAgICAgICAvLyBzaXplXG4gICAgICBpZiAoaXRlcmFibGUgIT0gdW5kZWZpbmVkKSBmb3JPZihpdGVyYWJsZSwgSVNfTUFQLCB0aGF0W0FEREVSXSwgdGhhdCk7XG4gICAgfSk7XG4gICAgcmVkZWZpbmVBbGwoQy5wcm90b3R5cGUsIHtcbiAgICAgIC8vIDIzLjEuMy4xIE1hcC5wcm90b3R5cGUuY2xlYXIoKVxuICAgICAgLy8gMjMuMi4zLjIgU2V0LnByb3RvdHlwZS5jbGVhcigpXG4gICAgICBjbGVhcjogZnVuY3Rpb24gY2xlYXIoKSB7XG4gICAgICAgIGZvciAodmFyIHRoYXQgPSB2YWxpZGF0ZSh0aGlzLCBOQU1FKSwgZGF0YSA9IHRoYXQuX2ksIGVudHJ5ID0gdGhhdC5fZjsgZW50cnk7IGVudHJ5ID0gZW50cnkubikge1xuICAgICAgICAgIGVudHJ5LnIgPSB0cnVlO1xuICAgICAgICAgIGlmIChlbnRyeS5wKSBlbnRyeS5wID0gZW50cnkucC5uID0gdW5kZWZpbmVkO1xuICAgICAgICAgIGRlbGV0ZSBkYXRhW2VudHJ5LmldO1xuICAgICAgICB9XG4gICAgICAgIHRoYXQuX2YgPSB0aGF0Ll9sID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGF0W1NJWkVdID0gMDtcbiAgICAgIH0sXG4gICAgICAvLyAyMy4xLjMuMyBNYXAucHJvdG90eXBlLmRlbGV0ZShrZXkpXG4gICAgICAvLyAyMy4yLjMuNCBTZXQucHJvdG90eXBlLmRlbGV0ZSh2YWx1ZSlcbiAgICAgICdkZWxldGUnOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHZhciB0aGF0ID0gdmFsaWRhdGUodGhpcywgTkFNRSk7XG4gICAgICAgIHZhciBlbnRyeSA9IGdldEVudHJ5KHRoYXQsIGtleSk7XG4gICAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICAgIHZhciBuZXh0ID0gZW50cnkubjtcbiAgICAgICAgICB2YXIgcHJldiA9IGVudHJ5LnA7XG4gICAgICAgICAgZGVsZXRlIHRoYXQuX2lbZW50cnkuaV07XG4gICAgICAgICAgZW50cnkuciA9IHRydWU7XG4gICAgICAgICAgaWYgKHByZXYpIHByZXYubiA9IG5leHQ7XG4gICAgICAgICAgaWYgKG5leHQpIG5leHQucCA9IHByZXY7XG4gICAgICAgICAgaWYgKHRoYXQuX2YgPT0gZW50cnkpIHRoYXQuX2YgPSBuZXh0O1xuICAgICAgICAgIGlmICh0aGF0Ll9sID09IGVudHJ5KSB0aGF0Ll9sID0gcHJldjtcbiAgICAgICAgICB0aGF0W1NJWkVdLS07XG4gICAgICAgIH0gcmV0dXJuICEhZW50cnk7XG4gICAgICB9LFxuICAgICAgLy8gMjMuMi4zLjYgU2V0LnByb3RvdHlwZS5mb3JFYWNoKGNhbGxiYWNrZm4sIHRoaXNBcmcgPSB1bmRlZmluZWQpXG4gICAgICAvLyAyMy4xLjMuNSBNYXAucHJvdG90eXBlLmZvckVhY2goY2FsbGJhY2tmbiwgdGhpc0FyZyA9IHVuZGVmaW5lZClcbiAgICAgIGZvckVhY2g6IGZ1bmN0aW9uIGZvckVhY2goY2FsbGJhY2tmbiAvKiAsIHRoYXQgPSB1bmRlZmluZWQgKi8pIHtcbiAgICAgICAgdmFsaWRhdGUodGhpcywgTkFNRSk7XG4gICAgICAgIHZhciBmID0gY3R4KGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkLCAzKTtcbiAgICAgICAgdmFyIGVudHJ5O1xuICAgICAgICB3aGlsZSAoZW50cnkgPSBlbnRyeSA/IGVudHJ5Lm4gOiB0aGlzLl9mKSB7XG4gICAgICAgICAgZihlbnRyeS52LCBlbnRyeS5rLCB0aGlzKTtcbiAgICAgICAgICAvLyByZXZlcnQgdG8gdGhlIGxhc3QgZXhpc3RpbmcgZW50cnlcbiAgICAgICAgICB3aGlsZSAoZW50cnkgJiYgZW50cnkucikgZW50cnkgPSBlbnRyeS5wO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgLy8gMjMuMS4zLjcgTWFwLnByb3RvdHlwZS5oYXMoa2V5KVxuICAgICAgLy8gMjMuMi4zLjcgU2V0LnByb3RvdHlwZS5oYXModmFsdWUpXG4gICAgICBoYXM6IGZ1bmN0aW9uIGhhcyhrZXkpIHtcbiAgICAgICAgcmV0dXJuICEhZ2V0RW50cnkodmFsaWRhdGUodGhpcywgTkFNRSksIGtleSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKERFU0NSSVBUT1JTKSBkUChDLnByb3RvdHlwZSwgJ3NpemUnLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHZhbGlkYXRlKHRoaXMsIE5BTUUpW1NJWkVdO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBDO1xuICB9LFxuICBkZWY6IGZ1bmN0aW9uICh0aGF0LCBrZXksIHZhbHVlKSB7XG4gICAgdmFyIGVudHJ5ID0gZ2V0RW50cnkodGhhdCwga2V5KTtcbiAgICB2YXIgcHJldiwgaW5kZXg7XG4gICAgLy8gY2hhbmdlIGV4aXN0aW5nIGVudHJ5XG4gICAgaWYgKGVudHJ5KSB7XG4gICAgICBlbnRyeS52ID0gdmFsdWU7XG4gICAgLy8gY3JlYXRlIG5ldyBlbnRyeVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGF0Ll9sID0gZW50cnkgPSB7XG4gICAgICAgIGk6IGluZGV4ID0gZmFzdEtleShrZXksIHRydWUpLCAvLyA8LSBpbmRleFxuICAgICAgICBrOiBrZXksICAgICAgICAgICAgICAgICAgICAgICAgLy8gPC0ga2V5XG4gICAgICAgIHY6IHZhbHVlLCAgICAgICAgICAgICAgICAgICAgICAvLyA8LSB2YWx1ZVxuICAgICAgICBwOiBwcmV2ID0gdGhhdC5fbCwgICAgICAgICAgICAgLy8gPC0gcHJldmlvdXMgZW50cnlcbiAgICAgICAgbjogdW5kZWZpbmVkLCAgICAgICAgICAgICAgICAgIC8vIDwtIG5leHQgZW50cnlcbiAgICAgICAgcjogZmFsc2UgICAgICAgICAgICAgICAgICAgICAgIC8vIDwtIHJlbW92ZWRcbiAgICAgIH07XG4gICAgICBpZiAoIXRoYXQuX2YpIHRoYXQuX2YgPSBlbnRyeTtcbiAgICAgIGlmIChwcmV2KSBwcmV2Lm4gPSBlbnRyeTtcbiAgICAgIHRoYXRbU0laRV0rKztcbiAgICAgIC8vIGFkZCB0byBpbmRleFxuICAgICAgaWYgKGluZGV4ICE9PSAnRicpIHRoYXQuX2lbaW5kZXhdID0gZW50cnk7XG4gICAgfSByZXR1cm4gdGhhdDtcbiAgfSxcbiAgZ2V0RW50cnk6IGdldEVudHJ5LFxuICBzZXRTdHJvbmc6IGZ1bmN0aW9uIChDLCBOQU1FLCBJU19NQVApIHtcbiAgICAvLyBhZGQgLmtleXMsIC52YWx1ZXMsIC5lbnRyaWVzLCBbQEBpdGVyYXRvcl1cbiAgICAvLyAyMy4xLjMuNCwgMjMuMS4zLjgsIDIzLjEuMy4xMSwgMjMuMS4zLjEyLCAyMy4yLjMuNSwgMjMuMi4zLjgsIDIzLjIuMy4xMCwgMjMuMi4zLjExXG4gICAgJGl0ZXJEZWZpbmUoQywgTkFNRSwgZnVuY3Rpb24gKGl0ZXJhdGVkLCBraW5kKSB7XG4gICAgICB0aGlzLl90ID0gdmFsaWRhdGUoaXRlcmF0ZWQsIE5BTUUpOyAvLyB0YXJnZXRcbiAgICAgIHRoaXMuX2sgPSBraW5kOyAgICAgICAgICAgICAgICAgICAgIC8vIGtpbmRcbiAgICAgIHRoaXMuX2wgPSB1bmRlZmluZWQ7ICAgICAgICAgICAgICAgIC8vIHByZXZpb3VzXG4gICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgdmFyIGtpbmQgPSB0aGF0Ll9rO1xuICAgICAgdmFyIGVudHJ5ID0gdGhhdC5fbDtcbiAgICAgIC8vIHJldmVydCB0byB0aGUgbGFzdCBleGlzdGluZyBlbnRyeVxuICAgICAgd2hpbGUgKGVudHJ5ICYmIGVudHJ5LnIpIGVudHJ5ID0gZW50cnkucDtcbiAgICAgIC8vIGdldCBuZXh0IGVudHJ5XG4gICAgICBpZiAoIXRoYXQuX3QgfHwgISh0aGF0Ll9sID0gZW50cnkgPSBlbnRyeSA/IGVudHJ5Lm4gOiB0aGF0Ll90Ll9mKSkge1xuICAgICAgICAvLyBvciBmaW5pc2ggdGhlIGl0ZXJhdGlvblxuICAgICAgICB0aGF0Ll90ID0gdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gc3RlcCgxKTtcbiAgICAgIH1cbiAgICAgIC8vIHJldHVybiBzdGVwIGJ5IGtpbmRcbiAgICAgIGlmIChraW5kID09ICdrZXlzJykgcmV0dXJuIHN0ZXAoMCwgZW50cnkuayk7XG4gICAgICBpZiAoa2luZCA9PSAndmFsdWVzJykgcmV0dXJuIHN0ZXAoMCwgZW50cnkudik7XG4gICAgICByZXR1cm4gc3RlcCgwLCBbZW50cnkuaywgZW50cnkudl0pO1xuICAgIH0sIElTX01BUCA/ICdlbnRyaWVzJyA6ICd2YWx1ZXMnLCAhSVNfTUFQLCB0cnVlKTtcblxuICAgIC8vIGFkZCBbQEBzcGVjaWVzXSwgMjMuMS4yLjIsIDIzLjIuMi4yXG4gICAgc2V0U3BlY2llcyhOQU1FKTtcbiAgfVxufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///118\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar strong = __webpack_require__(118);\nvar validate = __webpack_require__(42);\nvar SET = 'Set';\n\n// 23.2 Set Objects\nmodule.exports = __webpack_require__(61)(SET, function (get) {\n return function Set() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.2.3.1 Set.prototype.add(value)\n add: function add(value) {\n return strong.def(validate(this, SET), value = value === 0 ? 0 : value, value);\n }\n}, strong);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc2V0LmpzPzRmN2YiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixhQUFhLG1CQUFPLENBQUMsR0FBc0I7QUFDM0MsZUFBZSxtQkFBTyxDQUFDLEVBQXdCO0FBQy9DOztBQUVBO0FBQ0EsaUJBQWlCLG1CQUFPLENBQUMsRUFBZTtBQUN4Qyx5QkFBeUIsbUVBQW1FO0FBQzVGLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTE5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIHN0cm9uZyA9IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24tc3Ryb25nJyk7XG52YXIgdmFsaWRhdGUgPSByZXF1aXJlKCcuL192YWxpZGF0ZS1jb2xsZWN0aW9uJyk7XG52YXIgU0VUID0gJ1NldCc7XG5cbi8vIDIzLjIgU2V0IE9iamVjdHNcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fY29sbGVjdGlvbicpKFNFVCwgZnVuY3Rpb24gKGdldCkge1xuICByZXR1cm4gZnVuY3Rpb24gU2V0KCkgeyByZXR1cm4gZ2V0KHRoaXMsIGFyZ3VtZW50cy5sZW5ndGggPiAwID8gYXJndW1lbnRzWzBdIDogdW5kZWZpbmVkKTsgfTtcbn0sIHtcbiAgLy8gMjMuMi4zLjEgU2V0LnByb3RvdHlwZS5hZGQodmFsdWUpXG4gIGFkZDogZnVuY3Rpb24gYWRkKHZhbHVlKSB7XG4gICAgcmV0dXJuIHN0cm9uZy5kZWYodmFsaWRhdGUodGhpcywgU0VUKSwgdmFsdWUgPSB2YWx1ZSA9PT0gMCA/IDAgOiB2YWx1ZSwgdmFsdWUpO1xuICB9XG59LCBzdHJvbmcpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///119\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar global = __webpack_require__(2);\nvar each = __webpack_require__(26)(0);\nvar redefine = __webpack_require__(12);\nvar meta = __webpack_require__(30);\nvar assign = __webpack_require__(99);\nvar weak = __webpack_require__(121);\nvar isObject = __webpack_require__(4);\nvar validate = __webpack_require__(42);\nvar NATIVE_WEAK_MAP = __webpack_require__(42);\nvar IS_IE11 = !global.ActiveXObject && 'ActiveXObject' in global;\nvar WEAK_MAP = 'WeakMap';\nvar getWeak = meta.getWeak;\nvar isExtensible = Object.isExtensible;\nvar uncaughtFrozenStore = weak.ufstore;\nvar InternalMap;\n\nvar wrapper = function (get) {\n return function WeakMap() {\n return get(this, arguments.length > 0 ? arguments[0] : undefined);\n };\n};\n\nvar methods = {\n // 23.3.3.3 WeakMap.prototype.get(key)\n get: function get(key) {\n if (isObject(key)) {\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, WEAK_MAP)).get(key);\n return data ? data[this._i] : undefined;\n }\n },\n // 23.3.3.5 WeakMap.prototype.set(key, value)\n set: function set(key, value) {\n return weak.def(validate(this, WEAK_MAP), key, value);\n }\n};\n\n// 23.3 WeakMap Objects\nvar $WeakMap = module.exports = __webpack_require__(61)(WEAK_MAP, wrapper, methods, weak, true, true);\n\n// IE11 WeakMap frozen keys fix\nif (NATIVE_WEAK_MAP && IS_IE11) {\n InternalMap = weak.getConstructor(wrapper, WEAK_MAP);\n assign(InternalMap.prototype, methods);\n meta.NEED = true;\n each(['delete', 'has', 'get', 'set'], function (key) {\n var proto = $WeakMap.prototype;\n var method = proto[key];\n redefine(proto, key, function (a, b) {\n // store frozen objects on internal weakmap shim\n if (isObject(a) && !isExtensible(a)) {\n if (!this._f) this._f = new InternalMap();\n var result = this._f[key](a, b);\n return key == 'set' ? this : result;\n // store all the rest on native weakmap\n } return method.call(this, a, b);\n });\n });\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYud2Vhay1tYXAuanM/MTBhZCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGFBQWEsbUJBQU8sQ0FBQyxDQUFXO0FBQ2hDLFdBQVcsbUJBQU8sQ0FBQyxFQUFrQjtBQUNyQyxlQUFlLG1CQUFPLENBQUMsRUFBYTtBQUNwQyxXQUFXLG1CQUFPLENBQUMsRUFBUztBQUM1QixhQUFhLG1CQUFPLENBQUMsRUFBa0I7QUFDdkMsV0FBVyxtQkFBTyxDQUFDLEdBQW9CO0FBQ3ZDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGVBQWUsbUJBQU8sQ0FBQyxFQUF3QjtBQUMvQyxzQkFBc0IsbUJBQU8sQ0FBQyxFQUF3QjtBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxnQ0FBZ0MsbUJBQU8sQ0FBQyxFQUFlOztBQUV2RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMLEdBQUc7QUFDSCIsImZpbGUiOiIxMjAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgZWFjaCA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKSgwKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG52YXIgbWV0YSA9IHJlcXVpcmUoJy4vX21ldGEnKTtcbnZhciBhc3NpZ24gPSByZXF1aXJlKCcuL19vYmplY3QtYXNzaWduJyk7XG52YXIgd2VhayA9IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24td2VhaycpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgdmFsaWRhdGUgPSByZXF1aXJlKCcuL192YWxpZGF0ZS1jb2xsZWN0aW9uJyk7XG52YXIgTkFUSVZFX1dFQUtfTUFQID0gcmVxdWlyZSgnLi9fdmFsaWRhdGUtY29sbGVjdGlvbicpO1xudmFyIElTX0lFMTEgPSAhZ2xvYmFsLkFjdGl2ZVhPYmplY3QgJiYgJ0FjdGl2ZVhPYmplY3QnIGluIGdsb2JhbDtcbnZhciBXRUFLX01BUCA9ICdXZWFrTWFwJztcbnZhciBnZXRXZWFrID0gbWV0YS5nZXRXZWFrO1xudmFyIGlzRXh0ZW5zaWJsZSA9IE9iamVjdC5pc0V4dGVuc2libGU7XG52YXIgdW5jYXVnaHRGcm96ZW5TdG9yZSA9IHdlYWsudWZzdG9yZTtcbnZhciBJbnRlcm5hbE1hcDtcblxudmFyIHdyYXBwZXIgPSBmdW5jdGlvbiAoZ2V0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBXZWFrTWFwKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgYXJndW1lbnRzLmxlbmd0aCA+IDAgPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQpO1xuICB9O1xufTtcblxudmFyIG1ldGhvZHMgPSB7XG4gIC8vIDIzLjMuMy4zIFdlYWtNYXAucHJvdG90eXBlLmdldChrZXkpXG4gIGdldDogZnVuY3Rpb24gZ2V0KGtleSkge1xuICAgIGlmIChpc09iamVjdChrZXkpKSB7XG4gICAgICB2YXIgZGF0YSA9IGdldFdlYWsoa2V5KTtcbiAgICAgIGlmIChkYXRhID09PSB0cnVlKSByZXR1cm4gdW5jYXVnaHRGcm96ZW5TdG9yZSh2YWxpZGF0ZSh0aGlzLCBXRUFLX01BUCkpLmdldChrZXkpO1xuICAgICAgcmV0dXJuIGRhdGEgPyBkYXRhW3RoaXMuX2ldIDogdW5kZWZpbmVkO1xuICAgIH1cbiAgfSxcbiAgLy8gMjMuMy4zLjUgV2Vha01hcC5wcm90b3R5cGUuc2V0KGtleSwgdmFsdWUpXG4gIHNldDogZnVuY3Rpb24gc2V0KGtleSwgdmFsdWUpIHtcbiAgICByZXR1cm4gd2Vhay5kZWYodmFsaWRhdGUodGhpcywgV0VBS19NQVApLCBrZXksIHZhbHVlKTtcbiAgfVxufTtcblxuLy8gMjMuMyBXZWFrTWFwIE9iamVjdHNcbnZhciAkV2Vha01hcCA9IG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fY29sbGVjdGlvbicpKFdFQUtfTUFQLCB3cmFwcGVyLCBtZXRob2RzLCB3ZWFrLCB0cnVlLCB0cnVlKTtcblxuLy8gSUUxMSBXZWFrTWFwIGZyb3plbiBrZXlzIGZpeFxuaWYgKE5BVElWRV9XRUFLX01BUCAmJiBJU19JRTExKSB7XG4gIEludGVybmFsTWFwID0gd2Vhay5nZXRDb25zdHJ1Y3Rvcih3cmFwcGVyLCBXRUFLX01BUCk7XG4gIGFzc2lnbihJbnRlcm5hbE1hcC5wcm90b3R5cGUsIG1ldGhvZHMpO1xuICBtZXRhLk5FRUQgPSB0cnVlO1xuICBlYWNoKFsnZGVsZXRlJywgJ2hhcycsICdnZXQnLCAnc2V0J10sIGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgcHJvdG8gPSAkV2Vha01hcC5wcm90b3R5cGU7XG4gICAgdmFyIG1ldGhvZCA9IHByb3RvW2tleV07XG4gICAgcmVkZWZpbmUocHJvdG8sIGtleSwgZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgIC8vIHN0b3JlIGZyb3plbiBvYmplY3RzIG9uIGludGVybmFsIHdlYWttYXAgc2hpbVxuICAgICAgaWYgKGlzT2JqZWN0KGEpICYmICFpc0V4dGVuc2libGUoYSkpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9mKSB0aGlzLl9mID0gbmV3IEludGVybmFsTWFwKCk7XG4gICAgICAgIHZhciByZXN1bHQgPSB0aGlzLl9mW2tleV0oYSwgYik7XG4gICAgICAgIHJldHVybiBrZXkgPT0gJ3NldCcgPyB0aGlzIDogcmVzdWx0O1xuICAgICAgLy8gc3RvcmUgYWxsIHRoZSByZXN0IG9uIG5hdGl2ZSB3ZWFrbWFwXG4gICAgICB9IHJldHVybiBtZXRob2QuY2FsbCh0aGlzLCBhLCBiKTtcbiAgICB9KTtcbiAgfSk7XG59XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///120\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar redefineAll = __webpack_require__(41);\nvar getWeak = __webpack_require__(30).getWeak;\nvar anObject = __webpack_require__(1);\nvar isObject = __webpack_require__(4);\nvar anInstance = __webpack_require__(39);\nvar forOf = __webpack_require__(40);\nvar createArrayMethod = __webpack_require__(26);\nvar $has = __webpack_require__(14);\nvar validate = __webpack_require__(42);\nvar arrayFind = createArrayMethod(5);\nvar arrayFindIndex = createArrayMethod(6);\nvar id = 0;\n\n// fallback for uncaught frozen keys\nvar uncaughtFrozenStore = function (that) {\n return that._l || (that._l = new UncaughtFrozenStore());\n};\nvar UncaughtFrozenStore = function () {\n this.a = [];\n};\nvar findUncaughtFrozen = function (store, key) {\n return arrayFind(store.a, function (it) {\n return it[0] === key;\n });\n};\nUncaughtFrozenStore.prototype = {\n get: function (key) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) return entry[1];\n },\n has: function (key) {\n return !!findUncaughtFrozen(this, key);\n },\n set: function (key, value) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) entry[1] = value;\n else this.a.push([key, value]);\n },\n 'delete': function (key) {\n var index = arrayFindIndex(this.a, function (it) {\n return it[0] === key;\n });\n if (~index) this.a.splice(index, 1);\n return !!~index;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = id++; // collection id\n that._l = undefined; // leak store for uncaught frozen objects\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.3.3.2 WeakMap.prototype.delete(key)\n // 23.4.3.3 WeakSet.prototype.delete(value)\n 'delete': function (key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME))['delete'](key);\n return data && $has(data, this._i) && delete data[this._i];\n },\n // 23.3.3.4 WeakMap.prototype.has(key)\n // 23.4.3.4 WeakSet.prototype.has(value)\n has: function has(key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME)).has(key);\n return data && $has(data, this._i);\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var data = getWeak(anObject(key), true);\n if (data === true) uncaughtFrozenStore(that).set(key, value);\n else data[that._i] = value;\n return that;\n },\n ufstore: uncaughtFrozenStore\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY29sbGVjdGlvbi13ZWFrLmpzPzY0M2UiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixrQkFBa0IsbUJBQU8sQ0FBQyxFQUFpQjtBQUMzQyxjQUFjLG1CQUFPLENBQUMsRUFBUztBQUMvQixlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxpQkFBaUIsbUJBQU8sQ0FBQyxFQUFnQjtBQUN6QyxZQUFZLG1CQUFPLENBQUMsRUFBVztBQUMvQix3QkFBd0IsbUJBQU8sQ0FBQyxFQUFrQjtBQUNsRCxXQUFXLG1CQUFPLENBQUMsRUFBUTtBQUMzQixlQUFlLG1CQUFPLENBQUMsRUFBd0I7QUFDL0M7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckIscUJBQXFCO0FBQ3JCLDBCQUEwQjtBQUMxQjtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBIiwiZmlsZSI6IjEyMS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciByZWRlZmluZUFsbCA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lLWFsbCcpO1xudmFyIGdldFdlYWsgPSByZXF1aXJlKCcuL19tZXRhJykuZ2V0V2VhaztcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG52YXIgZm9yT2YgPSByZXF1aXJlKCcuL19mb3Itb2YnKTtcbnZhciBjcmVhdGVBcnJheU1ldGhvZCA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKTtcbnZhciAkaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgdmFsaWRhdGUgPSByZXF1aXJlKCcuL192YWxpZGF0ZS1jb2xsZWN0aW9uJyk7XG52YXIgYXJyYXlGaW5kID0gY3JlYXRlQXJyYXlNZXRob2QoNSk7XG52YXIgYXJyYXlGaW5kSW5kZXggPSBjcmVhdGVBcnJheU1ldGhvZCg2KTtcbnZhciBpZCA9IDA7XG5cbi8vIGZhbGxiYWNrIGZvciB1bmNhdWdodCBmcm96ZW4ga2V5c1xudmFyIHVuY2F1Z2h0RnJvemVuU3RvcmUgPSBmdW5jdGlvbiAodGhhdCkge1xuICByZXR1cm4gdGhhdC5fbCB8fCAodGhhdC5fbCA9IG5ldyBVbmNhdWdodEZyb3plblN0b3JlKCkpO1xufTtcbnZhciBVbmNhdWdodEZyb3plblN0b3JlID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmEgPSBbXTtcbn07XG52YXIgZmluZFVuY2F1Z2h0RnJvemVuID0gZnVuY3Rpb24gKHN0b3JlLCBrZXkpIHtcbiAgcmV0dXJuIGFycmF5RmluZChzdG9yZS5hLCBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gaXRbMF0gPT09IGtleTtcbiAgfSk7XG59O1xuVW5jYXVnaHRGcm96ZW5TdG9yZS5wcm90b3R5cGUgPSB7XG4gIGdldDogZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciBlbnRyeSA9IGZpbmRVbmNhdWdodEZyb3plbih0aGlzLCBrZXkpO1xuICAgIGlmIChlbnRyeSkgcmV0dXJuIGVudHJ5WzFdO1xuICB9LFxuICBoYXM6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICByZXR1cm4gISFmaW5kVW5jYXVnaHRGcm96ZW4odGhpcywga2V5KTtcbiAgfSxcbiAgc2V0OiBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgIHZhciBlbnRyeSA9IGZpbmRVbmNhdWdodEZyb3plbih0aGlzLCBrZXkpO1xuICAgIGlmIChlbnRyeSkgZW50cnlbMV0gPSB2YWx1ZTtcbiAgICBlbHNlIHRoaXMuYS5wdXNoKFtrZXksIHZhbHVlXSk7XG4gIH0sXG4gICdkZWxldGUnOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIGluZGV4ID0gYXJyYXlGaW5kSW5kZXgodGhpcy5hLCBmdW5jdGlvbiAoaXQpIHtcbiAgICAgIHJldHVybiBpdFswXSA9PT0ga2V5O1xuICAgIH0pO1xuICAgIGlmICh+aW5kZXgpIHRoaXMuYS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIHJldHVybiAhIX5pbmRleDtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGdldENvbnN0cnVjdG9yOiBmdW5jdGlvbiAod3JhcHBlciwgTkFNRSwgSVNfTUFQLCBBRERFUikge1xuICAgIHZhciBDID0gd3JhcHBlcihmdW5jdGlvbiAodGhhdCwgaXRlcmFibGUpIHtcbiAgICAgIGFuSW5zdGFuY2UodGhhdCwgQywgTkFNRSwgJ19pJyk7XG4gICAgICB0aGF0Ll90ID0gTkFNRTsgICAgICAvLyBjb2xsZWN0aW9uIHR5cGVcbiAgICAgIHRoYXQuX2kgPSBpZCsrOyAgICAgIC8vIGNvbGxlY3Rpb24gaWRcbiAgICAgIHRoYXQuX2wgPSB1bmRlZmluZWQ7IC8vIGxlYWsgc3RvcmUgZm9yIHVuY2F1Z2h0IGZyb3plbiBvYmplY3RzXG4gICAgICBpZiAoaXRlcmFibGUgIT0gdW5kZWZpbmVkKSBmb3JPZihpdGVyYWJsZSwgSVNfTUFQLCB0aGF0W0FEREVSXSwgdGhhdCk7XG4gICAgfSk7XG4gICAgcmVkZWZpbmVBbGwoQy5wcm90b3R5cGUsIHtcbiAgICAgIC8vIDIzLjMuMy4yIFdlYWtNYXAucHJvdG90eXBlLmRlbGV0ZShrZXkpXG4gICAgICAvLyAyMy40LjMuMyBXZWFrU2V0LnByb3RvdHlwZS5kZWxldGUodmFsdWUpXG4gICAgICAnZGVsZXRlJzogZnVuY3Rpb24gKGtleSkge1xuICAgICAgICBpZiAoIWlzT2JqZWN0KGtleSkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgdmFyIGRhdGEgPSBnZXRXZWFrKGtleSk7XG4gICAgICAgIGlmIChkYXRhID09PSB0cnVlKSByZXR1cm4gdW5jYXVnaHRGcm96ZW5TdG9yZSh2YWxpZGF0ZSh0aGlzLCBOQU1FKSlbJ2RlbGV0ZSddKGtleSk7XG4gICAgICAgIHJldHVybiBkYXRhICYmICRoYXMoZGF0YSwgdGhpcy5faSkgJiYgZGVsZXRlIGRhdGFbdGhpcy5faV07XG4gICAgICB9LFxuICAgICAgLy8gMjMuMy4zLjQgV2Vha01hcC5wcm90b3R5cGUuaGFzKGtleSlcbiAgICAgIC8vIDIzLjQuMy40IFdlYWtTZXQucHJvdG90eXBlLmhhcyh2YWx1ZSlcbiAgICAgIGhhczogZnVuY3Rpb24gaGFzKGtleSkge1xuICAgICAgICBpZiAoIWlzT2JqZWN0KGtleSkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgdmFyIGRhdGEgPSBnZXRXZWFrKGtleSk7XG4gICAgICAgIGlmIChkYXRhID09PSB0cnVlKSByZXR1cm4gdW5jYXVnaHRGcm96ZW5TdG9yZSh2YWxpZGF0ZSh0aGlzLCBOQU1FKSkuaGFzKGtleSk7XG4gICAgICAgIHJldHVybiBkYXRhICYmICRoYXMoZGF0YSwgdGhpcy5faSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIEM7XG4gIH0sXG4gIGRlZjogZnVuY3Rpb24gKHRoYXQsIGtleSwgdmFsdWUpIHtcbiAgICB2YXIgZGF0YSA9IGdldFdlYWsoYW5PYmplY3Qoa2V5KSwgdHJ1ZSk7XG4gICAgaWYgKGRhdGEgPT09IHRydWUpIHVuY2F1Z2h0RnJvemVuU3RvcmUodGhhdCkuc2V0KGtleSwgdmFsdWUpO1xuICAgIGVsc2UgZGF0YVt0aGF0Ll9pXSA9IHZhbHVlO1xuICAgIHJldHVybiB0aGF0O1xuICB9LFxuICB1ZnN0b3JlOiB1bmNhdWdodEZyb3plblN0b3JlXG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///121\n")},function(module,exports,__webpack_require__){eval("// https://tc39.github.io/ecma262/#sec-toindex\nvar toInteger = __webpack_require__(21);\nvar toLength = __webpack_require__(6);\nmodule.exports = function (it) {\n if (it === undefined) return 0;\n var number = toInteger(it);\n var length = toLength(number);\n if (number !== length) throw RangeError('Wrong length!');\n return length;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8taW5kZXguanM/MDlmYSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGdCQUFnQixtQkFBTyxDQUFDLEVBQWU7QUFDdkMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMTIyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtdG9pbmRleFxudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGl0ID09PSB1bmRlZmluZWQpIHJldHVybiAwO1xuICB2YXIgbnVtYmVyID0gdG9JbnRlZ2VyKGl0KTtcbiAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKG51bWJlcik7XG4gIGlmIChudW1iZXIgIT09IGxlbmd0aCkgdGhyb3cgUmFuZ2VFcnJvcignV3JvbmcgbGVuZ3RoIScpO1xuICByZXR1cm4gbGVuZ3RoO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///122\n")},function(module,exports,__webpack_require__){eval("// all object keys, includes non-enumerable and symbols\nvar gOPN = __webpack_require__(37);\nvar gOPS = __webpack_require__(53);\nvar anObject = __webpack_require__(1);\nvar Reflect = __webpack_require__(2).Reflect;\nmodule.exports = Reflect && Reflect.ownKeys || function ownKeys(it) {\n var keys = gOPN.f(anObject(it));\n var getSymbols = gOPS.f;\n return getSymbols ? keys.concat(getSymbols(it)) : keys;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb3duLWtleXMuanM/OTkwYiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLFdBQVcsbUJBQU8sQ0FBQyxFQUFnQjtBQUNuQyxXQUFXLG1CQUFPLENBQUMsRUFBZ0I7QUFDbkMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIxMjMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBhbGwgb2JqZWN0IGtleXMsIGluY2x1ZGVzIG5vbi1lbnVtZXJhYmxlIGFuZCBzeW1ib2xzXG52YXIgZ09QTiA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJyk7XG52YXIgZ09QUyA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BzJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBSZWZsZWN0ID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuUmVmbGVjdDtcbm1vZHVsZS5leHBvcnRzID0gUmVmbGVjdCAmJiBSZWZsZWN0Lm93bktleXMgfHwgZnVuY3Rpb24gb3duS2V5cyhpdCkge1xuICB2YXIga2V5cyA9IGdPUE4uZihhbk9iamVjdChpdCkpO1xuICB2YXIgZ2V0U3ltYm9scyA9IGdPUFMuZjtcbiAgcmV0dXJuIGdldFN5bWJvbHMgPyBrZXlzLmNvbmNhdChnZXRTeW1ib2xzKGl0KSkgOiBrZXlzO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///123\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// https://tc39.github.io/proposal-flatMap/#sec-FlattenIntoArray\nvar isArray = __webpack_require__(54);\nvar isObject = __webpack_require__(4);\nvar toLength = __webpack_require__(6);\nvar ctx = __webpack_require__(19);\nvar IS_CONCAT_SPREADABLE = __webpack_require__(5)('isConcatSpreadable');\n\nfunction flattenIntoArray(target, original, source, sourceLen, start, depth, mapper, thisArg) {\n var targetIndex = start;\n var sourceIndex = 0;\n var mapFn = mapper ? ctx(mapper, thisArg, 3) : false;\n var element, spreadable;\n\n while (sourceIndex < sourceLen) {\n if (sourceIndex in source) {\n element = mapFn ? mapFn(source[sourceIndex], sourceIndex, original) : source[sourceIndex];\n\n spreadable = false;\n if (isObject(element)) {\n spreadable = element[IS_CONCAT_SPREADABLE];\n spreadable = spreadable !== undefined ? !!spreadable : isArray(element);\n }\n\n if (spreadable && depth > 0) {\n targetIndex = flattenIntoArray(target, original, element, toLength(element.length), targetIndex, depth - 1) - 1;\n } else {\n if (targetIndex >= 0x1fffffffffffff) throw TypeError();\n target[targetIndex] = element;\n }\n\n targetIndex++;\n }\n sourceIndex++;\n }\n return targetIndex;\n}\n\nmodule.exports = flattenIntoArray;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZmxhdHRlbi1pbnRvLWFycmF5LmpzP2M0NWYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxFQUFhO0FBQ25DLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLFVBQVUsbUJBQU8sQ0FBQyxFQUFRO0FBQzFCLDJCQUEyQixtQkFBTyxDQUFDLENBQVE7O0FBRTNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6IjEyNC5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtZmxhdE1hcC8jc2VjLUZsYXR0ZW5JbnRvQXJyYXlcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi9faXMtYXJyYXknKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgSVNfQ09OQ0FUX1NQUkVBREFCTEUgPSByZXF1aXJlKCcuL193a3MnKSgnaXNDb25jYXRTcHJlYWRhYmxlJyk7XG5cbmZ1bmN0aW9uIGZsYXR0ZW5JbnRvQXJyYXkodGFyZ2V0LCBvcmlnaW5hbCwgc291cmNlLCBzb3VyY2VMZW4sIHN0YXJ0LCBkZXB0aCwgbWFwcGVyLCB0aGlzQXJnKSB7XG4gIHZhciB0YXJnZXRJbmRleCA9IHN0YXJ0O1xuICB2YXIgc291cmNlSW5kZXggPSAwO1xuICB2YXIgbWFwRm4gPSBtYXBwZXIgPyBjdHgobWFwcGVyLCB0aGlzQXJnLCAzKSA6IGZhbHNlO1xuICB2YXIgZWxlbWVudCwgc3ByZWFkYWJsZTtcblxuICB3aGlsZSAoc291cmNlSW5kZXggPCBzb3VyY2VMZW4pIHtcbiAgICBpZiAoc291cmNlSW5kZXggaW4gc291cmNlKSB7XG4gICAgICBlbGVtZW50ID0gbWFwRm4gPyBtYXBGbihzb3VyY2Vbc291cmNlSW5kZXhdLCBzb3VyY2VJbmRleCwgb3JpZ2luYWwpIDogc291cmNlW3NvdXJjZUluZGV4XTtcblxuICAgICAgc3ByZWFkYWJsZSA9IGZhbHNlO1xuICAgICAgaWYgKGlzT2JqZWN0KGVsZW1lbnQpKSB7XG4gICAgICAgIHNwcmVhZGFibGUgPSBlbGVtZW50W0lTX0NPTkNBVF9TUFJFQURBQkxFXTtcbiAgICAgICAgc3ByZWFkYWJsZSA9IHNwcmVhZGFibGUgIT09IHVuZGVmaW5lZCA/ICEhc3ByZWFkYWJsZSA6IGlzQXJyYXkoZWxlbWVudCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChzcHJlYWRhYmxlICYmIGRlcHRoID4gMCkge1xuICAgICAgICB0YXJnZXRJbmRleCA9IGZsYXR0ZW5JbnRvQXJyYXkodGFyZ2V0LCBvcmlnaW5hbCwgZWxlbWVudCwgdG9MZW5ndGgoZWxlbWVudC5sZW5ndGgpLCB0YXJnZXRJbmRleCwgZGVwdGggLSAxKSAtIDE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodGFyZ2V0SW5kZXggPj0gMHgxZmZmZmZmZmZmZmZmZikgdGhyb3cgVHlwZUVycm9yKCk7XG4gICAgICAgIHRhcmdldFt0YXJnZXRJbmRleF0gPSBlbGVtZW50O1xuICAgICAgfVxuXG4gICAgICB0YXJnZXRJbmRleCsrO1xuICAgIH1cbiAgICBzb3VyY2VJbmRleCsrO1xuICB9XG4gIHJldHVybiB0YXJnZXRJbmRleDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmbGF0dGVuSW50b0FycmF5O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///124\n")},function(module,exports,__webpack_require__){eval("// https://github.com/tc39/proposal-string-pad-start-end\nvar toLength = __webpack_require__(6);\nvar repeat = __webpack_require__(74);\nvar defined = __webpack_require__(24);\n\nmodule.exports = function (that, maxLength, fillString, left) {\n var S = String(defined(that));\n var stringLength = S.length;\n var fillStr = fillString === undefined ? ' ' : String(fillString);\n var intMaxLength = toLength(maxLength);\n if (intMaxLength <= stringLength || fillStr == '') return S;\n var fillLen = intMaxLength - stringLength;\n var stringFiller = repeat.call(fillStr, Math.ceil(fillLen / fillStr.length));\n if (stringFiller.length > fillLen) stringFiller = stringFiller.slice(0, fillLen);\n return left ? stringFiller + S : S + stringFiller;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLXBhZC5qcz8yZTA4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsYUFBYSxtQkFBTyxDQUFDLEVBQWtCO0FBQ3ZDLGNBQWMsbUJBQU8sQ0FBQyxFQUFZOztBQUVsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjEyNS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXN0cmluZy1wYWQtc3RhcnQtZW5kXG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciByZXBlYXQgPSByZXF1aXJlKCcuL19zdHJpbmctcmVwZWF0Jyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGhhdCwgbWF4TGVuZ3RoLCBmaWxsU3RyaW5nLCBsZWZ0KSB7XG4gIHZhciBTID0gU3RyaW5nKGRlZmluZWQodGhhdCkpO1xuICB2YXIgc3RyaW5nTGVuZ3RoID0gUy5sZW5ndGg7XG4gIHZhciBmaWxsU3RyID0gZmlsbFN0cmluZyA9PT0gdW5kZWZpbmVkID8gJyAnIDogU3RyaW5nKGZpbGxTdHJpbmcpO1xuICB2YXIgaW50TWF4TGVuZ3RoID0gdG9MZW5ndGgobWF4TGVuZ3RoKTtcbiAgaWYgKGludE1heExlbmd0aCA8PSBzdHJpbmdMZW5ndGggfHwgZmlsbFN0ciA9PSAnJykgcmV0dXJuIFM7XG4gIHZhciBmaWxsTGVuID0gaW50TWF4TGVuZ3RoIC0gc3RyaW5nTGVuZ3RoO1xuICB2YXIgc3RyaW5nRmlsbGVyID0gcmVwZWF0LmNhbGwoZmlsbFN0ciwgTWF0aC5jZWlsKGZpbGxMZW4gLyBmaWxsU3RyLmxlbmd0aCkpO1xuICBpZiAoc3RyaW5nRmlsbGVyLmxlbmd0aCA+IGZpbGxMZW4pIHN0cmluZ0ZpbGxlciA9IHN0cmluZ0ZpbGxlci5zbGljZSgwLCBmaWxsTGVuKTtcbiAgcmV0dXJuIGxlZnQgPyBzdHJpbmdGaWxsZXIgKyBTIDogUyArIHN0cmluZ0ZpbGxlcjtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///125\n")},function(module,exports,__webpack_require__){eval("var DESCRIPTORS = __webpack_require__(7);\nvar getKeys = __webpack_require__(34);\nvar toIObject = __webpack_require__(15);\nvar isEnum = __webpack_require__(49).f;\nmodule.exports = function (isEntries) {\n return function (it) {\n var O = toIObject(it);\n var keys = getKeys(O);\n var length = keys.length;\n var i = 0;\n var result = [];\n var key;\n while (length > i) {\n key = keys[i++];\n if (!DESCRIPTORS || isEnum.call(O, key)) {\n result.push(isEntries ? [key, O[key]] : O[key]);\n }\n }\n return result;\n };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LXRvLWFycmF5LmpzPzUwNGMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsa0JBQWtCLG1CQUFPLENBQUMsQ0FBZ0I7QUFDMUMsY0FBYyxtQkFBTyxDQUFDLEVBQWdCO0FBQ3RDLGdCQUFnQixtQkFBTyxDQUFDLEVBQWU7QUFDdkMsYUFBYSxtQkFBTyxDQUFDLEVBQWU7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIxMjYuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpO1xudmFyIGdldEtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciBpc0VudW0gPSByZXF1aXJlKCcuL19vYmplY3QtcGllJykuZjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGlzRW50cmllcykge1xuICByZXR1cm4gZnVuY3Rpb24gKGl0KSB7XG4gICAgdmFyIE8gPSB0b0lPYmplY3QoaXQpO1xuICAgIHZhciBrZXlzID0gZ2V0S2V5cyhPKTtcbiAgICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICB2YXIga2V5O1xuICAgIHdoaWxlIChsZW5ndGggPiBpKSB7XG4gICAgICBrZXkgPSBrZXlzW2krK107XG4gICAgICBpZiAoIURFU0NSSVBUT1JTIHx8IGlzRW51bS5jYWxsKE8sIGtleSkpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goaXNFbnRyaWVzID8gW2tleSwgT1trZXldXSA6IE9ba2V5XSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///126\n")},function(module,exports,__webpack_require__){eval('// https://github.com/DavidBruant/Map-Set.prototype.toJSON\nvar classof = __webpack_require__(44);\nvar from = __webpack_require__(128);\nmodule.exports = function (NAME) {\n return function toJSON() {\n if (classof(this) != NAME) throw TypeError(NAME + "#toJSON isn\'t generic");\n return from(this);\n };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY29sbGVjdGlvbi10by1qc29uLmpzPzQ0YjgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsRUFBWTtBQUNsQyxXQUFXLG1CQUFPLENBQUMsR0FBd0I7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjEyNy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9EYXZpZEJydWFudC9NYXAtU2V0LnByb3RvdHlwZS50b0pTT05cbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi9fY2xhc3NvZicpO1xudmFyIGZyb20gPSByZXF1aXJlKCcuL19hcnJheS1mcm9tLWl0ZXJhYmxlJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChOQU1FKSB7XG4gIHJldHVybiBmdW5jdGlvbiB0b0pTT04oKSB7XG4gICAgaWYgKGNsYXNzb2YodGhpcykgIT0gTkFNRSkgdGhyb3cgVHlwZUVycm9yKE5BTUUgKyBcIiN0b0pTT04gaXNuJ3QgZ2VuZXJpY1wiKTtcbiAgICByZXR1cm4gZnJvbSh0aGlzKTtcbiAgfTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///127\n')},function(module,exports,__webpack_require__){eval("var forOf = __webpack_require__(40);\n\nmodule.exports = function (iter, ITERATOR) {\n var result = [];\n forOf(iter, false, result.push, result, ITERATOR);\n return result;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktZnJvbS1pdGVyYWJsZS5qcz80Mzc5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVksbUJBQU8sQ0FBQyxFQUFXOztBQUUvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjEyOC5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBmb3JPZiA9IHJlcXVpcmUoJy4vX2Zvci1vZicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVyLCBJVEVSQVRPUikge1xuICB2YXIgcmVzdWx0ID0gW107XG4gIGZvck9mKGl0ZXIsIGZhbHNlLCByZXN1bHQucHVzaCwgcmVzdWx0LCBJVEVSQVRPUik7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///128\n")},function(module,exports){eval("// https://rwaldron.github.io/proposal-math-extensions/\nmodule.exports = Math.scale || function scale(x, inLow, inHigh, outLow, outHigh) {\n if (\n arguments.length === 0\n // eslint-disable-next-line no-self-compare\n || x != x\n // eslint-disable-next-line no-self-compare\n || inLow != inLow\n // eslint-disable-next-line no-self-compare\n || inHigh != inHigh\n // eslint-disable-next-line no-self-compare\n || outLow != outLow\n // eslint-disable-next-line no-self-compare\n || outHigh != outHigh\n ) return NaN;\n if (x === Infinity || x === -Infinity) return x;\n return (x - inLow) * (outHigh - outLow) / (inHigh - inLow) + outLow;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWF0aC1zY2FsZS5qcz9lOWQyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIxMjkuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBodHRwczovL3J3YWxkcm9uLmdpdGh1Yi5pby9wcm9wb3NhbC1tYXRoLWV4dGVuc2lvbnMvXG5tb2R1bGUuZXhwb3J0cyA9IE1hdGguc2NhbGUgfHwgZnVuY3Rpb24gc2NhbGUoeCwgaW5Mb3csIGluSGlnaCwgb3V0TG93LCBvdXRIaWdoKSB7XG4gIGlmIChcbiAgICBhcmd1bWVudHMubGVuZ3RoID09PSAwXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICB8fCB4ICE9IHhcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICAgIHx8IGluTG93ICE9IGluTG93XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICB8fCBpbkhpZ2ggIT0gaW5IaWdoXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICB8fCBvdXRMb3cgIT0gb3V0TG93XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICB8fCBvdXRIaWdoICE9IG91dEhpZ2hcbiAgKSByZXR1cm4gTmFOO1xuICBpZiAoeCA9PT0gSW5maW5pdHkgfHwgeCA9PT0gLUluZmluaXR5KSByZXR1cm4geDtcbiAgcmV0dXJuICh4IC0gaW5Mb3cpICogKG91dEhpZ2ggLSBvdXRMb3cpIC8gKGluSGlnaCAtIGluTG93KSArIG91dExvdztcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///129\n")},function(e,n,t){t(131),e.exports=t(333)},function(module,exports,__webpack_require__){"use strict";eval('/* WEBPACK VAR INJECTION */(function(global) {\n\n__webpack_require__(132);\n\n__webpack_require__(329);\n\n__webpack_require__(330);\n\nif (global._babelPolyfill) {\n throw new Error("only one instance of babel-polyfill is allowed");\n}\nglobal._babelPolyfill = true;\n\nvar DEFINE_PROPERTY = "defineProperty";\nfunction define(O, key, value) {\n O[key] || Object[DEFINE_PROPERTY](O, key, {\n writable: true,\n configurable: true,\n value: value\n });\n}\n\ndefine(String.prototype, "padLeft", "".padStart);\ndefine(String.prototype, "padRight", "".padEnd);\n\n"pop,reverse,shift,keys,values,entries,indexOf,every,some,forEach,map,filter,find,findIndex,includes,join,slice,concat,push,splice,unshift,sort,lastIndexOf,reduce,reduceRight,copyWithin,fill".split(",").forEach(function (key) {\n [][key] && define(Array, key, Function.call.bind([][key]));\n});\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(93)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL2xpYi9pbmRleC5qcz9kYjRkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDhDQUFhOztBQUViLG1CQUFPLENBQUMsR0FBYzs7QUFFdEIsbUJBQU8sQ0FBQyxHQUE2Qjs7QUFFckMsbUJBQU8sQ0FBQyxHQUEwQjs7QUFFbEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLENBQUMsRSIsImZpbGUiOiIxMzEuanMiLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxucmVxdWlyZShcImNvcmUtanMvc2hpbVwiKTtcblxucmVxdWlyZShcInJlZ2VuZXJhdG9yLXJ1bnRpbWUvcnVudGltZVwiKTtcblxucmVxdWlyZShcImNvcmUtanMvZm4vcmVnZXhwL2VzY2FwZVwiKTtcblxuaWYgKGdsb2JhbC5fYmFiZWxQb2x5ZmlsbCkge1xuICB0aHJvdyBuZXcgRXJyb3IoXCJvbmx5IG9uZSBpbnN0YW5jZSBvZiBiYWJlbC1wb2x5ZmlsbCBpcyBhbGxvd2VkXCIpO1xufVxuZ2xvYmFsLl9iYWJlbFBvbHlmaWxsID0gdHJ1ZTtcblxudmFyIERFRklORV9QUk9QRVJUWSA9IFwiZGVmaW5lUHJvcGVydHlcIjtcbmZ1bmN0aW9uIGRlZmluZShPLCBrZXksIHZhbHVlKSB7XG4gIE9ba2V5XSB8fCBPYmplY3RbREVGSU5FX1BST1BFUlRZXShPLCBrZXksIHtcbiAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgdmFsdWU6IHZhbHVlXG4gIH0pO1xufVxuXG5kZWZpbmUoU3RyaW5nLnByb3RvdHlwZSwgXCJwYWRMZWZ0XCIsIFwiXCIucGFkU3RhcnQpO1xuZGVmaW5lKFN0cmluZy5wcm90b3R5cGUsIFwicGFkUmlnaHRcIiwgXCJcIi5wYWRFbmQpO1xuXG5cInBvcCxyZXZlcnNlLHNoaWZ0LGtleXMsdmFsdWVzLGVudHJpZXMsaW5kZXhPZixldmVyeSxzb21lLGZvckVhY2gsbWFwLGZpbHRlcixmaW5kLGZpbmRJbmRleCxpbmNsdWRlcyxqb2luLHNsaWNlLGNvbmNhdCxwdXNoLHNwbGljZSx1bnNoaWZ0LHNvcnQsbGFzdEluZGV4T2YscmVkdWNlLHJlZHVjZVJpZ2h0LGNvcHlXaXRoaW4sZmlsbFwiLnNwbGl0KFwiLFwiKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgW11ba2V5XSAmJiBkZWZpbmUoQXJyYXksIGtleSwgRnVuY3Rpb24uY2FsbC5iaW5kKFtdW2tleV0pKTtcbn0pOyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///131\n')},function(module,exports,__webpack_require__){eval("__webpack_require__(133);\n__webpack_require__(136);\n__webpack_require__(137);\n__webpack_require__(138);\n__webpack_require__(139);\n__webpack_require__(140);\n__webpack_require__(141);\n__webpack_require__(142);\n__webpack_require__(143);\n__webpack_require__(144);\n__webpack_require__(145);\n__webpack_require__(146);\n__webpack_require__(147);\n__webpack_require__(148);\n__webpack_require__(149);\n__webpack_require__(150);\n__webpack_require__(151);\n__webpack_require__(152);\n__webpack_require__(153);\n__webpack_require__(154);\n__webpack_require__(155);\n__webpack_require__(156);\n__webpack_require__(157);\n__webpack_require__(158);\n__webpack_require__(159);\n__webpack_require__(160);\n__webpack_require__(161);\n__webpack_require__(162);\n__webpack_require__(163);\n__webpack_require__(164);\n__webpack_require__(165);\n__webpack_require__(166);\n__webpack_require__(167);\n__webpack_require__(168);\n__webpack_require__(169);\n__webpack_require__(170);\n__webpack_require__(171);\n__webpack_require__(172);\n__webpack_require__(173);\n__webpack_require__(174);\n__webpack_require__(175);\n__webpack_require__(176);\n__webpack_require__(177);\n__webpack_require__(178);\n__webpack_require__(179);\n__webpack_require__(180);\n__webpack_require__(181);\n__webpack_require__(182);\n__webpack_require__(183);\n__webpack_require__(184);\n__webpack_require__(185);\n__webpack_require__(186);\n__webpack_require__(187);\n__webpack_require__(188);\n__webpack_require__(189);\n__webpack_require__(190);\n__webpack_require__(191);\n__webpack_require__(192);\n__webpack_require__(193);\n__webpack_require__(194);\n__webpack_require__(195);\n__webpack_require__(196);\n__webpack_require__(197);\n__webpack_require__(198);\n__webpack_require__(199);\n__webpack_require__(200);\n__webpack_require__(201);\n__webpack_require__(202);\n__webpack_require__(203);\n__webpack_require__(204);\n__webpack_require__(205);\n__webpack_require__(206);\n__webpack_require__(207);\n__webpack_require__(208);\n__webpack_require__(209);\n__webpack_require__(210);\n__webpack_require__(211);\n__webpack_require__(213);\n__webpack_require__(214);\n__webpack_require__(216);\n__webpack_require__(217);\n__webpack_require__(218);\n__webpack_require__(219);\n__webpack_require__(220);\n__webpack_require__(221);\n__webpack_require__(222);\n__webpack_require__(224);\n__webpack_require__(225);\n__webpack_require__(226);\n__webpack_require__(227);\n__webpack_require__(228);\n__webpack_require__(229);\n__webpack_require__(230);\n__webpack_require__(231);\n__webpack_require__(232);\n__webpack_require__(233);\n__webpack_require__(234);\n__webpack_require__(235);\n__webpack_require__(236);\n__webpack_require__(86);\n__webpack_require__(237);\n__webpack_require__(113);\n__webpack_require__(238);\n__webpack_require__(114);\n__webpack_require__(239);\n__webpack_require__(240);\n__webpack_require__(241);\n__webpack_require__(242);\n__webpack_require__(243);\n__webpack_require__(117);\n__webpack_require__(119);\n__webpack_require__(120);\n__webpack_require__(244);\n__webpack_require__(245);\n__webpack_require__(246);\n__webpack_require__(247);\n__webpack_require__(248);\n__webpack_require__(249);\n__webpack_require__(250);\n__webpack_require__(251);\n__webpack_require__(252);\n__webpack_require__(253);\n__webpack_require__(254);\n__webpack_require__(255);\n__webpack_require__(256);\n__webpack_require__(257);\n__webpack_require__(258);\n__webpack_require__(259);\n__webpack_require__(260);\n__webpack_require__(261);\n__webpack_require__(262);\n__webpack_require__(263);\n__webpack_require__(264);\n__webpack_require__(265);\n__webpack_require__(266);\n__webpack_require__(267);\n__webpack_require__(268);\n__webpack_require__(269);\n__webpack_require__(270);\n__webpack_require__(271);\n__webpack_require__(272);\n__webpack_require__(273);\n__webpack_require__(274);\n__webpack_require__(275);\n__webpack_require__(276);\n__webpack_require__(277);\n__webpack_require__(278);\n__webpack_require__(279);\n__webpack_require__(280);\n__webpack_require__(281);\n__webpack_require__(282);\n__webpack_require__(283);\n__webpack_require__(284);\n__webpack_require__(285);\n__webpack_require__(286);\n__webpack_require__(287);\n__webpack_require__(288);\n__webpack_require__(289);\n__webpack_require__(290);\n__webpack_require__(291);\n__webpack_require__(292);\n__webpack_require__(293);\n__webpack_require__(294);\n__webpack_require__(295);\n__webpack_require__(296);\n__webpack_require__(297);\n__webpack_require__(298);\n__webpack_require__(299);\n__webpack_require__(300);\n__webpack_require__(301);\n__webpack_require__(302);\n__webpack_require__(303);\n__webpack_require__(304);\n__webpack_require__(305);\n__webpack_require__(306);\n__webpack_require__(307);\n__webpack_require__(308);\n__webpack_require__(309);\n__webpack_require__(310);\n__webpack_require__(311);\n__webpack_require__(312);\n__webpack_require__(313);\n__webpack_require__(314);\n__webpack_require__(315);\n__webpack_require__(316);\n__webpack_require__(317);\n__webpack_require__(318);\n__webpack_require__(319);\n__webpack_require__(320);\n__webpack_require__(321);\n__webpack_require__(322);\n__webpack_require__(323);\n__webpack_require__(324);\n__webpack_require__(325);\n__webpack_require__(326);\n__webpack_require__(327);\n__webpack_require__(328);\nmodule.exports = __webpack_require__(18);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvc2hpbS5qcz82NmY5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLG1CQUFPLENBQUMsR0FBc0I7QUFDOUIsbUJBQU8sQ0FBQyxHQUE2QjtBQUNyQyxtQkFBTyxDQUFDLEdBQXNDO0FBQzlDLG1CQUFPLENBQUMsR0FBd0M7QUFDaEQsbUJBQU8sQ0FBQyxHQUFrRDtBQUMxRCxtQkFBTyxDQUFDLEdBQXVDO0FBQy9DLG1CQUFPLENBQUMsR0FBMkI7QUFDbkMsbUJBQU8sQ0FBQyxHQUE2QztBQUNyRCxtQkFBTyxDQUFDLEdBQTZCO0FBQ3JDLG1CQUFPLENBQUMsR0FBMkI7QUFDbkMsbUJBQU8sQ0FBQyxHQUF5QztBQUNqRCxtQkFBTyxDQUFDLEdBQWdDO0FBQ3hDLG1CQUFPLENBQUMsR0FBZ0M7QUFDeEMsbUJBQU8sQ0FBQyxHQUFvQztBQUM1QyxtQkFBTyxDQUFDLEdBQTZCO0FBQ3JDLG1CQUFPLENBQUMsR0FBeUI7QUFDakMsbUJBQU8sQ0FBQyxHQUF1QztBQUMvQyxtQkFBTyxDQUFDLEdBQWdDO0FBQ3hDLG1CQUFPLENBQUMsR0FBNkI7QUFDckMsbUJBQU8sQ0FBQyxHQUE2QjtBQUNyQyxtQkFBTyxDQUFDLEdBQXFDO0FBQzdDLG1CQUFPLENBQUMsR0FBeUI7QUFDakMsbUJBQU8sQ0FBQyxHQUEyQjtBQUNuQyxtQkFBTyxDQUFDLEdBQWtDO0FBQzFDLG1CQUFPLENBQUMsR0FBK0I7QUFDdkMsbUJBQU8sQ0FBQyxHQUFtQztBQUMzQyxtQkFBTyxDQUFDLEdBQThCO0FBQ3RDLG1CQUFPLENBQUMsR0FBZ0M7QUFDeEMsbUJBQU8sQ0FBQyxHQUFpQztBQUN6QyxtQkFBTyxDQUFDLEdBQTZCO0FBQ3JDLG1CQUFPLENBQUMsR0FBc0M7QUFDOUMsbUJBQU8sQ0FBQyxHQUF1QztBQUMvQyxtQkFBTyxDQUFDLEdBQXVDO0FBQy9DLG1CQUFPLENBQUMsR0FBa0M7QUFDMUMsbUJBQU8sQ0FBQyxH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QkFBTyxDQUFDLEdBQWdDO0FBQ3hDLG1CQUFPLENBQUMsR0FBb0I7QUFDNUIsbUJBQU8sQ0FBQyxHQUEwQjtBQUNsQyxtQkFBTyxDQUFDLEdBQXNCO0FBQzlCLG1CQUFPLENBQUMsR0FBeUI7QUFDakMsbUJBQU8sQ0FBQyxHQUE0QjtBQUNwQyxpQkFBaUIsbUJBQU8sQ0FBQyxFQUFpQiIsImZpbGUiOiIxMzIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJyZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN5bWJvbCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuY3JlYXRlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5kZWZpbmUtcHJvcGVydHknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmRlZmluZS1wcm9wZXJ0aWVzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmdldC1wcm90b3R5cGUtb2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmtleXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmdldC1vd24tcHJvcGVydHktbmFtZXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmZyZWV6ZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3Quc2VhbCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QucHJldmVudC1leHRlbnNpb25zJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5pcy1mcm96ZW4nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmlzLXNlYWxlZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuaXMtZXh0ZW5zaWJsZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuYXNzaWduJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5pcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3Quc2V0LXByb3RvdHlwZS1vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QudG8tc3RyaW5nJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmZ1bmN0aW9uLmJpbmQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuZnVuY3Rpb24ubmFtZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5mdW5jdGlvbi5oYXMtaW5zdGFuY2UnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucGFyc2UtaW50Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnBhcnNlLWZsb2F0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5jb25zdHJ1Y3RvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIudG8tZml4ZWQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLnRvLXByZWNpc2lvbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIuZXBzaWxvbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIuaXMtZmluaXRlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5pcy1pbnRlZ2VyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5pcy1uYW4nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLmlzLXNhZmUtaW50ZWdlcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIubWF4LXNhZmUtaW50ZWdlcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIubWluLXNhZmUtaW50ZWdlcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIucGFyc2UtZmxvYXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLnBhcnNlLWludCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmFjb3NoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguYXNpbmgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5hdGFuaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmNicnQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5jbHozMicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmNvc2gnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5leHBtMScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmZyb3VuZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmh5cG90Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguaW11bCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmxvZzEwJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGgubG9nMXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5sb2cyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguc2lnbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLnNpbmgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC50YW5oJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGgudHJ1bmMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLmZyb20tY29kZS1wb2ludCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcucmF3Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy50cmltJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuY29kZS1wb2ludC1hdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuZW5kcy13aXRoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5pbmNsdWRlcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcucmVwZWF0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5zdGFydHMtd2l0aCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuYW5jaG9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5iaWcnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLmJsaW5rJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5ib2xkJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5maXhlZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuZm9udGNvbG9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5mb250c2l6ZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuaXRhbGljcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcubGluaycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuc21hbGwnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLnN0cmlrZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuc3ViJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5zdXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuZGF0ZS5ub3cnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuZGF0ZS50by1qc29uJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmRhdGUudG8taXNvLXN0cmluZycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5kYXRlLnRvLXN0cmluZycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5kYXRlLnRvLXByaW1pdGl2ZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5pcy1hcnJheScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5mcm9tJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5Lm9mJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmpvaW4nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuc2xpY2UnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuc29ydCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5mb3ItZWFjaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5tYXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuZmlsdGVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LnNvbWUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuZXZlcnknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkucmVkdWNlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LnJlZHVjZS1yaWdodCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5pbmRleC1vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5sYXN0LWluZGV4LW9mJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmNvcHktd2l0aGluJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmZpbGwnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuZmluZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5maW5kLWluZGV4Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LnNwZWNpZXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVnZXhwLmNvbnN0cnVjdG9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZ2V4cC5leGVjJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZ2V4cC50by1zdHJpbmcnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVnZXhwLmZsYWdzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZ2V4cC5tYXRjaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWdleHAucmVwbGFjZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWdleHAuc2VhcmNoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZ2V4cC5zcGxpdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5wcm9taXNlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hcCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zZXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYud2Vhay1tYXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYud2Vhay1zZXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQuYXJyYXktYnVmZmVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLmRhdGEtdmlldycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi50eXBlZC5pbnQ4LWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLnVpbnQ4LWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLnVpbnQ4LWNsYW1wZWQtYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQuaW50MTYtYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQudWludDE2LWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLmludDMyLWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLnVpbnQzMi1hcnJheScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi50eXBlZC5mbG9hdDMyLWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLmZsb2F0NjQtYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5hcHBseScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmNvbnN0cnVjdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmRlZmluZS1wcm9wZXJ0eScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmRlbGV0ZS1wcm9wZXJ0eScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmVudW1lcmF0ZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmdldCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmdldC1wcm90b3R5cGUtb2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5oYXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5pcy1leHRlbnNpYmxlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3Qub3duLWtleXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5wcmV2ZW50LWV4dGVuc2lvbnMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5zZXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5zZXQtcHJvdG90eXBlLW9mJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LmFycmF5LmluY2x1ZGVzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LmFycmF5LmZsYXQtbWFwJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LmFycmF5LmZsYXR0ZW4nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc3RyaW5nLmF0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnN0cmluZy5wYWQtc3RhcnQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc3RyaW5nLnBhZC1lbmQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc3RyaW5nLnRyaW0tbGVmdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zdHJpbmcudHJpbS1yaWdodCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zdHJpbmcubWF0Y2gtYWxsJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnN5bWJvbC5hc3luYy1pdGVyYXRvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zeW1ib2wub2JzZXJ2YWJsZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9ycycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5vYmplY3QudmFsdWVzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC5lbnRyaWVzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC5kZWZpbmUtZ2V0dGVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC5kZWZpbmUtc2V0dGVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC5sb29rdXAtZ2V0dGVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC5sb29rdXAtc2V0dGVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hcC50by1qc29uJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnNldC50by1qc29uJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hcC5vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zZXQub2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcud2Vhay1tYXAub2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcud2Vhay1zZXQub2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWFwLmZyb20nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc2V0LmZyb20nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcud2Vhay1tYXAuZnJvbScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy53ZWFrLXNldC5mcm9tJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lmdsb2JhbCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zeXN0ZW0uZ2xvYmFsJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LmVycm9yLmlzLWVycm9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGguY2xhbXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5kZWctcGVyLXJhZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLmRlZ3JlZXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5mc2NhbGUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5pYWRkaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLmlzdWJoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGguaW11bGgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5yYWQtcGVyLWRlZycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLnJhZGlhbnMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5zY2FsZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLnVtdWxoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGguc2lnbmJpdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5wcm9taXNlLmZpbmFsbHknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucHJvbWlzZS50cnknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5kZWZpbmUtbWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5kZWxldGUtbWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtbWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtbWV0YWRhdGEta2V5cycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5yZWZsZWN0LmdldC1vd24tbWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtb3duLW1ldGFkYXRhLWtleXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5oYXMtbWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5oYXMtb3duLW1ldGFkYXRhJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnJlZmxlY3QubWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuYXNhcCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5vYnNlcnZhYmxlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvd2ViLnRpbWVycycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL3dlYi5pbW1lZGlhdGUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy93ZWIuZG9tLml0ZXJhYmxlJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vbW9kdWxlcy9fY29yZScpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///132\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// ECMAScript 6 symbols shim\nvar global = __webpack_require__(2);\nvar has = __webpack_require__(14);\nvar DESCRIPTORS = __webpack_require__(7);\nvar $export = __webpack_require__(0);\nvar redefine = __webpack_require__(12);\nvar META = __webpack_require__(30).KEY;\nvar $fails = __webpack_require__(3);\nvar shared = __webpack_require__(47);\nvar setToStringTag = __webpack_require__(43);\nvar uid = __webpack_require__(33);\nvar wks = __webpack_require__(5);\nvar wksExt = __webpack_require__(95);\nvar wksDefine = __webpack_require__(67);\nvar enumKeys = __webpack_require__(135);\nvar isArray = __webpack_require__(54);\nvar anObject = __webpack_require__(1);\nvar isObject = __webpack_require__(4);\nvar toObject = __webpack_require__(9);\nvar toIObject = __webpack_require__(15);\nvar toPrimitive = __webpack_require__(23);\nvar createDesc = __webpack_require__(32);\nvar _create = __webpack_require__(36);\nvar gOPNExt = __webpack_require__(98);\nvar $GOPD = __webpack_require__(16);\nvar $GOPS = __webpack_require__(53);\nvar $DP = __webpack_require__(8);\nvar $keys = __webpack_require__(34);\nvar gOPD = $GOPD.f;\nvar dP = $DP.f;\nvar gOPN = gOPNExt.f;\nvar $Symbol = global.Symbol;\nvar $JSON = global.JSON;\nvar _stringify = $JSON && $JSON.stringify;\nvar PROTOTYPE = 'prototype';\nvar HIDDEN = wks('_hidden');\nvar TO_PRIMITIVE = wks('toPrimitive');\nvar isEnum = {}.propertyIsEnumerable;\nvar SymbolRegistry = shared('symbol-registry');\nvar AllSymbols = shared('symbols');\nvar OPSymbols = shared('op-symbols');\nvar ObjectProto = Object[PROTOTYPE];\nvar USE_NATIVE = typeof $Symbol == 'function' && !!$GOPS.f;\nvar QObject = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDesc = DESCRIPTORS && $fails(function () {\n return _create(dP({}, 'a', {\n get: function () { return dP(this, 'a', { value: 7 }).a; }\n })).a != 7;\n}) ? function (it, key, D) {\n var protoDesc = gOPD(ObjectProto, key);\n if (protoDesc) delete ObjectProto[key];\n dP(it, key, D);\n if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc);\n} : dP;\n\nvar wrap = function (tag) {\n var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);\n sym._k = tag;\n return sym;\n};\n\nvar isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n return it instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(it, key, D) {\n if (it === ObjectProto) $defineProperty(OPSymbols, key, D);\n anObject(it);\n key = toPrimitive(key, true);\n anObject(D);\n if (has(AllSymbols, key)) {\n if (!D.enumerable) {\n if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {}));\n it[HIDDEN][key] = true;\n } else {\n if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;\n D = _create(D, { enumerable: createDesc(0, false) });\n } return setSymbolDesc(it, key, D);\n } return dP(it, key, D);\n};\nvar $defineProperties = function defineProperties(it, P) {\n anObject(it);\n var keys = enumKeys(P = toIObject(P));\n var i = 0;\n var l = keys.length;\n var key;\n while (l > i) $defineProperty(it, key = keys[i++], P[key]);\n return it;\n};\nvar $create = function create(it, P) {\n return P === undefined ? _create(it) : $defineProperties(_create(it), P);\n};\nvar $propertyIsEnumerable = function propertyIsEnumerable(key) {\n var E = isEnum.call(this, key = toPrimitive(key, true));\n if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false;\n return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;\n};\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {\n it = toIObject(it);\n key = toPrimitive(key, true);\n if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return;\n var D = gOPD(it, key);\n if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;\n return D;\n};\nvar $getOwnPropertyNames = function getOwnPropertyNames(it) {\n var names = gOPN(toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);\n } return result;\n};\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(it) {\n var IS_OP = it === ObjectProto;\n var names = gOPN(IS_OP ? OPSymbols : toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]);\n } return result;\n};\n\n// 19.4.1.1 Symbol([description])\nif (!USE_NATIVE) {\n $Symbol = function Symbol() {\n if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');\n var tag = uid(arguments.length > 0 ? arguments[0] : undefined);\n var $set = function (value) {\n if (this === ObjectProto) $set.call(OPSymbols, value);\n if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n setSymbolDesc(this, tag, createDesc(1, value));\n };\n if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set });\n return wrap(tag);\n };\n redefine($Symbol[PROTOTYPE], 'toString', function toString() {\n return this._k;\n });\n\n $GOPD.f = $getOwnPropertyDescriptor;\n $DP.f = $defineProperty;\n __webpack_require__(37).f = gOPNExt.f = $getOwnPropertyNames;\n __webpack_require__(49).f = $propertyIsEnumerable;\n $GOPS.f = $getOwnPropertySymbols;\n\n if (DESCRIPTORS && !__webpack_require__(29)) {\n redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);\n }\n\n wksExt.f = function (name) {\n return wrap(wks(name));\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol });\n\nfor (var es6Symbols = (\n // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14\n 'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'\n).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]);\n\nfor (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]);\n\n$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {\n // 19.4.2.1 Symbol.for(key)\n 'for': function (key) {\n return has(SymbolRegistry, key += '')\n ? SymbolRegistry[key]\n : SymbolRegistry[key] = $Symbol(key);\n },\n // 19.4.2.5 Symbol.keyFor(sym)\n keyFor: function keyFor(sym) {\n if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');\n for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key;\n },\n useSetter: function () { setter = true; },\n useSimple: function () { setter = false; }\n});\n\n$export($export.S + $export.F * !USE_NATIVE, 'Object', {\n // 19.1.2.2 Object.create(O [, Properties])\n create: $create,\n // 19.1.2.4 Object.defineProperty(O, P, Attributes)\n defineProperty: $defineProperty,\n // 19.1.2.3 Object.defineProperties(O, Properties)\n defineProperties: $defineProperties,\n // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n // 19.1.2.7 Object.getOwnPropertyNames(O)\n getOwnPropertyNames: $getOwnPropertyNames,\n // 19.1.2.8 Object.getOwnPropertySymbols(O)\n getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// Chrome 38 and 39 `Object.getOwnPropertySymbols` fails on primitives\n// https://bugs.chromium.org/p/v8/issues/detail?id=3443\nvar FAILS_ON_PRIMITIVES = $fails(function () { $GOPS.f(1); });\n\n$export($export.S + $export.F * FAILS_ON_PRIMITIVES, 'Object', {\n getOwnPropertySymbols: function getOwnPropertySymbols(it) {\n return $GOPS.f(toObject(it));\n }\n});\n\n// 24.3.2 JSON.stringify(value [, replacer [, space]])\n$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () {\n var S = $Symbol();\n // MS Edge converts symbol values to JSON as {}\n // WebKit converts symbol values to JSON as null\n // V8 throws on boxed symbols\n return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}';\n})), 'JSON', {\n stringify: function stringify(it) {\n var args = [it];\n var i = 1;\n var replacer, $replacer;\n while (arguments.length > i) args.push(arguments[i++]);\n $replacer = replacer = args[1];\n if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n if (!isArray(replacer)) replacer = function (key, value) {\n if (typeof $replacer == 'function') value = $replacer.call(this, key, value);\n if (!isSymbol(value)) return value;\n };\n args[1] = replacer;\n return _stringify.apply($JSON, args);\n }\n});\n\n// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)\n$Symbol[PROTOTYPE][TO_PRIMITIVE] || __webpack_require__(11)($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n// 19.4.3.5 Symbol.prototype[@@toStringTag]\nsetToStringTag($Symbol, 'Symbol');\n// 20.2.1.9 Math[@@toStringTag]\nsetToStringTag(Math, 'Math', true);\n// 24.3.3 JSON[@@toStringTag]\nsetToStringTag(global.JSON, 'JSON', true);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3ltYm9sLmpzPzhhODEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBLGFBQWEsbUJBQU8sQ0FBQyxDQUFXO0FBQ2hDLFVBQVUsbUJBQU8sQ0FBQyxFQUFRO0FBQzFCLGtCQUFrQixtQkFBTyxDQUFDLENBQWdCO0FBQzFDLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyxFQUFhO0FBQ3BDLFdBQVcsbUJBQU8sQ0FBQyxFQUFTO0FBQzVCLGFBQWEsbUJBQU8sQ0FBQyxDQUFVO0FBQy9CLGFBQWEsbUJBQU8sQ0FBQyxFQUFXO0FBQ2hDLHFCQUFxQixtQkFBTyxDQUFDLEVBQXNCO0FBQ25ELFVBQVUsbUJBQU8sQ0FBQyxFQUFRO0FBQzFCLFVBQVUsbUJBQU8sQ0FBQyxDQUFRO0FBQzFCLGFBQWEsbUJBQU8sQ0FBQyxFQUFZO0FBQ2pDLGdCQUFnQixtQkFBTyxDQUFDLEVBQWU7QUFDdkMsZUFBZSxtQkFBTyxDQUFDLEdBQWM7QUFDckMsY0FBYyxtQkFBTyxDQUFDLEVBQWE7QUFDbkMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2QyxrQkFBa0IsbUJBQU8sQ0FBQyxFQUFpQjtBQUMzQyxpQkFBaUIsbUJBQU8sQ0FBQyxFQUFrQjtBQUMzQyxjQUFjLG1CQUFPLENBQUMsRUFBa0I7QUFDeEMsY0FBYyxtQkFBTyxDQUFDLEVBQW9CO0FBQzFDLFlBQVksbUJBQU8sQ0FBQyxFQUFnQjtBQUNwQyxZQUFZLG1CQUFPLENBQUMsRUFBZ0I7QUFDcEMsVUFBVSxtQkFBTyxDQUFDLENBQWM7QUFDaEMsWUFBWSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxzQkFBc0I7QUFDdEIsc0JBQXNCLHVCQUF1QixXQUFXLElBQUk7QUFDNUQsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyREFBMkQ7QUFDM0Q7QUFDQSxLQUFLO0FBQ0w7QUFDQSxzQkFBc0IsbUNBQW1DO0FBQ3pELEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdFQUFnRSxnQ0FBZ0M7QUFDaEc7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxFQUFFLG1CQUFPLENBQUMsRUFBZ0I7QUFDMUIsRUFBRSxtQkFBTyxDQUFDLEVBQWU7QUFDekI7O0FBRUEsc0JBQXNCLG1CQUFPLENBQUMsRUFBWTtBQUMxQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDBEQUEwRCxrQkFBa0I7O0FBRTVFO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQix1QkFBdUI7O0FBRTNDLG9EQUFvRCw2QkFBNkI7O0FBRWpGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCwwQkFBMEIsZUFBZSxFQUFFO0FBQzNDLDBCQUEwQixnQkFBZ0I7QUFDMUMsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBLDhDQUE4QyxZQUFZLEVBQUU7O0FBRTVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvREFBb0QsT0FBTyxRQUFRLGlDQUFpQztBQUNwRyxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0VBQXdFO0FBQ3hFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBLG9DQUFvQyxtQkFBTyxDQUFDLEVBQVM7QUFDckQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjEzMy5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIEVDTUFTY3JpcHQgNiBzeW1ib2xzIHNoaW1cbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUnKTtcbnZhciBNRVRBID0gcmVxdWlyZSgnLi9fbWV0YScpLktFWTtcbnZhciAkZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4vX3NoYXJlZCcpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuL191aWQnKTtcbnZhciB3a3MgPSByZXF1aXJlKCcuL193a3MnKTtcbnZhciB3a3NFeHQgPSByZXF1aXJlKCcuL193a3MtZXh0Jyk7XG52YXIgd2tzRGVmaW5lID0gcmVxdWlyZSgnLi9fd2tzLWRlZmluZScpO1xudmFyIGVudW1LZXlzID0gcmVxdWlyZSgnLi9fZW51bS1rZXlzJyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4vX2lzLWFycmF5Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG52YXIgY3JlYXRlRGVzYyA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKTtcbnZhciBfY3JlYXRlID0gcmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpO1xudmFyIGdPUE5FeHQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wbi1leHQnKTtcbnZhciAkR09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJyk7XG52YXIgJEdPUFMgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wcycpO1xudmFyICREUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xudmFyICRrZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcbnZhciBnT1BEID0gJEdPUEQuZjtcbnZhciBkUCA9ICREUC5mO1xudmFyIGdPUE4gPSBnT1BORXh0LmY7XG52YXIgJFN5bWJvbCA9IGdsb2JhbC5TeW1ib2w7XG52YXIgJEpTT04gPSBnbG9iYWwuSlNPTjtcbnZhciBfc3RyaW5naWZ5ID0gJEpTT04gJiYgJEpTT04uc3RyaW5naWZ5O1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xudmFyIEhJRERFTiA9IHdrcygnX2hpZGRlbicpO1xudmFyIFRPX1BSSU1JVElWRSA9IHdrcygndG9QcmltaXRpdmUnKTtcbnZhciBpc0VudW0gPSB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbnZhciBTeW1ib2xSZWdpc3RyeSA9IHNoYXJlZCgnc3ltYm9sLXJlZ2lzdHJ5Jyk7XG52YXIgQWxsU3ltYm9scyA9IHNoYXJlZCgnc3ltYm9scycpO1xudmFyIE9QU3ltYm9scyA9IHNoYXJlZCgnb3Atc3ltYm9scycpO1xudmFyIE9iamVjdFByb3RvID0gT2JqZWN0W1BST1RPVFlQRV07XG52YXIgVVNFX05BVElWRSA9IHR5cGVvZiAkU3ltYm9sID09ICdmdW5jdGlvbicgJiYgISEkR09QUy5mO1xudmFyIFFPYmplY3QgPSBnbG9iYWwuUU9iamVjdDtcbi8vIERvbid0IHVzZSBzZXR0ZXJzIGluIFF0IFNjcmlwdCwgaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzE3M1xudmFyIHNldHRlciA9ICFRT2JqZWN0IHx8ICFRT2JqZWN0W1BST1RPVFlQRV0gfHwgIVFPYmplY3RbUFJPVE9UWVBFXS5maW5kQ2hpbGQ7XG5cbi8vIGZhbGxiYWNrIGZvciBvbGQgQW5kcm9pZCwgaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTY4N1xudmFyIHNldFN5bWJvbERlc2MgPSBERVNDUklQVE9SUyAmJiAkZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gX2NyZWF0ZShkUCh7fSwgJ2EnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBkUCh0aGlzLCAnYScsIHsgdmFsdWU6IDcgfSkuYTsgfVxuICB9KSkuYSAhPSA3O1xufSkgPyBmdW5jdGlvbiAoaXQsIGtleSwgRCkge1xuICB2YXIgcHJvdG9EZXNjID0gZ09QRChPYmplY3RQcm90bywga2V5KTtcbiAgaWYgKHByb3RvRGVzYykgZGVsZXRlIE9iamVjdFByb3RvW2tleV07XG4gIGRQKGl0LCBrZXksIEQpO1xuICBpZiAocHJvdG9EZXNjICYmIGl0ICE9PSBPYmplY3RQcm90bykgZFAoT2JqZWN0UHJvdG8sIGtleSwgcHJvdG9EZXNjKTtcbn0gOiBkUDtcblxudmFyIHdyYXAgPSBmdW5jdGlvbiAodGFnKSB7XG4gIHZhciBzeW0gPSBBbGxTeW1ib2xzW3RhZ10gPSBfY3JlYXRlKCRTeW1ib2xbUFJPVE9UWVBFXSk7XG4gIHN5bS5fayA9IHRhZztcbiAgcmV0dXJuIHN5bTtcbn07XG5cbnZhciBpc1N5bWJvbCA9IFVTRV9OQVRJVkUgJiYgdHlwZW9mICRTeW1ib2wuaXRlcmF0b3IgPT0gJ3N5bWJvbCcgPyBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnc3ltYm9sJztcbn0gOiBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0IGluc3RhbmNlb2YgJFN5bWJvbDtcbn07XG5cbnZhciAkZGVmaW5lUHJvcGVydHkgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShpdCwga2V5LCBEKSB7XG4gIGlmIChpdCA9PT0gT2JqZWN0UHJvdG8pICRkZWZpbmVQcm9wZXJ0eShPUFN5bWJvbHMsIGtleSwgRCk7XG4gIGFuT2JqZWN0KGl0KTtcbiAga2V5ID0gdG9QcmltaXRpdmUoa2V5LCB0cnVlKTtcbiAgYW5PYmplY3QoRCk7XG4gIGlmIChoYXMoQWxsU3ltYm9scywga2V5KSkge1xuICAgIGlmICghRC5lbnVtZXJhYmxlKSB7XG4gICAgICBpZiAoIWhhcyhpdCwgSElEREVOKSkgZFAoaXQsIEhJRERFTiwgY3JlYXRlRGVzYygxLCB7fSkpO1xuICAgICAgaXRbSElEREVOXVtrZXldID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGhhcyhpdCwgSElEREVOKSAmJiBpdFtISURERU5dW2tleV0pIGl0W0hJRERFTl1ba2V5XSA9IGZhbHNlO1xuICAgICAgRCA9IF9jcmVhdGUoRCwgeyBlbnVtZXJhYmxlOiBjcmVhdGVEZXNjKDAsIGZhbHNlKSB9KTtcbiAgICB9IHJldHVybiBzZXRTeW1ib2xEZXNjKGl0LCBrZXksIEQpO1xuICB9IHJldHVybiBkUChpdCwga2V5LCBEKTtcbn07XG52YXIgJGRlZmluZVByb3BlcnRpZXMgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKGl0LCBQKSB7XG4gIGFuT2JqZWN0KGl0KTtcbiAgdmFyIGtleXMgPSBlbnVtS2V5cyhQID0gdG9JT2JqZWN0KFApKTtcbiAgdmFyIGkgPSAwO1xuICB2YXIgbCA9IGtleXMubGVuZ3RoO1xuICB2YXIga2V5O1xuICB3aGlsZSAobCA+IGkpICRkZWZpbmVQcm9wZXJ0eShpdCwga2V5ID0ga2V5c1tpKytdLCBQW2tleV0pO1xuICByZXR1cm4gaXQ7XG59O1xudmFyICRjcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUoaXQsIFApIHtcbiAgcmV0dXJuIFAgPT09IHVuZGVmaW5lZCA/IF9jcmVhdGUoaXQpIDogJGRlZmluZVByb3BlcnRpZXMoX2NyZWF0ZShpdCksIFApO1xufTtcbnZhciAkcHJvcGVydHlJc0VudW1lcmFibGUgPSBmdW5jdGlvbiBwcm9wZXJ0eUlzRW51bWVyYWJsZShrZXkpIHtcbiAgdmFyIEUgPSBpc0VudW0uY2FsbCh0aGlzLCBrZXkgPSB0b1ByaW1pdGl2ZShrZXksIHRydWUpKTtcbiAgaWYgKHRoaXMgPT09IE9iamVjdFByb3RvICYmIGhhcyhBbGxTeW1ib2xzLCBrZXkpICYmICFoYXMoT1BTeW1ib2xzLCBrZXkpKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiBFIHx8ICFoYXModGhpcywga2V5KSB8fCAhaGFzKEFsbFN5bWJvbHMsIGtleSkgfHwgaGFzKHRoaXMsIEhJRERFTikgJiYgdGhpc1tISURERU5dW2tleV0gPyBFIDogdHJ1ZTtcbn07XG52YXIgJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihpdCwga2V5KSB7XG4gIGl0ID0gdG9JT2JqZWN0KGl0KTtcbiAga2V5ID0gdG9QcmltaXRpdmUoa2V5LCB0cnVlKTtcbiAgaWYgKGl0ID09PSBPYmplY3RQcm90byAmJiBoYXMoQWxsU3ltYm9scywga2V5KSAmJiAhaGFzKE9QU3ltYm9scywga2V5KSkgcmV0dXJuO1xuICB2YXIgRCA9IGdPUEQoaXQsIGtleSk7XG4gIGlmIChEICYmIGhhcyhBbGxTeW1ib2xzLCBrZXkpICYmICEoaGFzKGl0LCBISURERU4pICYmIGl0W0hJRERFTl1ba2V5XSkpIEQuZW51bWVyYWJsZSA9IHRydWU7XG4gIHJldHVybiBEO1xufTtcbnZhciAkZ2V0T3duUHJvcGVydHlOYW1lcyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoaXQpIHtcbiAgdmFyIG5hbWVzID0gZ09QTih0b0lPYmplY3QoaXQpKTtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIgaSA9IDA7XG4gIHZhciBrZXk7XG4gIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSB7XG4gICAgaWYgKCFoYXMoQWxsU3ltYm9scywga2V5ID0gbmFtZXNbaSsrXSkgJiYga2V5ICE9IEhJRERFTiAmJiBrZXkgIT0gTUVUQSkgcmVzdWx0LnB1c2goa2V5KTtcbiAgfSByZXR1cm4gcmVzdWx0O1xufTtcbnZhciAkZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlTeW1ib2xzKGl0KSB7XG4gIHZhciBJU19PUCA9IGl0ID09PSBPYmplY3RQcm90bztcbiAgdmFyIG5hbWVzID0gZ09QTihJU19PUCA/IE9QU3ltYm9scyA6IHRvSU9iamVjdChpdCkpO1xuICB2YXIgcmVzdWx0ID0gW107XG4gIHZhciBpID0gMDtcbiAgdmFyIGtleTtcbiAgd2hpbGUgKG5hbWVzLmxlbmd0aCA+IGkpIHtcbiAgICBpZiAoaGFzKEFsbFN5bWJvbHMsIGtleSA9IG5hbWVzW2krK10pICYmIChJU19PUCA/IGhhcyhPYmplY3RQcm90bywga2V5KSA6IHRydWUpKSByZXN1bHQucHVzaChBbGxTeW1ib2xzW2tleV0pO1xuICB9IHJldHVybiByZXN1bHQ7XG59O1xuXG4vLyAxOS40LjEuMSBTeW1ib2woW2Rlc2NyaXB0aW9uXSlcbmlmICghVVNFX05BVElWRSkge1xuICAkU3ltYm9sID0gZnVuY3Rpb24gU3ltYm9sKCkge1xuICAgIGlmICh0aGlzIGluc3RhbmNlb2YgJFN5bWJvbCkgdGhyb3cgVHlwZUVycm9yKCdTeW1ib2wgaXMgbm90IGEgY29uc3RydWN0b3IhJyk7XG4gICAgdmFyIHRhZyA9IHVpZChhcmd1bWVudHMubGVuZ3RoID4gMCA/IGFyZ3VtZW50c1swXSA6IHVuZGVmaW5lZCk7XG4gICAgdmFyICRzZXQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIGlmICh0aGlzID09PSBPYmplY3RQcm90bykgJHNldC5jYWxsKE9QU3ltYm9scywgdmFsdWUpO1xuICAgICAgaWYgKGhhcyh0aGlzLCBISURERU4pICYmIGhhcyh0aGlzW0hJRERFTl0sIHRhZykpIHRoaXNbSElEREVOXVt0YWddID0gZmFsc2U7XG4gICAgICBzZXRTeW1ib2xEZXNjKHRoaXMsIHRhZywgY3JlYXRlRGVzYygxLCB2YWx1ZSkpO1xuICAgIH07XG4gICAgaWYgKERFU0NSSVBUT1JTICYmIHNldHRlcikgc2V0U3ltYm9sRGVzYyhPYmplY3RQcm90bywgdGFnLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgc2V0OiAkc2V0IH0pO1xuICAgIHJldHVybiB3cmFwKHRhZyk7XG4gIH07XG4gIHJlZGVmaW5lKCRTeW1ib2xbUFJPVE9UWVBFXSwgJ3RvU3RyaW5nJywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2s7XG4gIH0pO1xuXG4gICRHT1BELmYgPSAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuICAkRFAuZiA9ICRkZWZpbmVQcm9wZXJ0eTtcbiAgcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4nKS5mID0gZ09QTkV4dC5mID0gJGdldE93blByb3BlcnR5TmFtZXM7XG4gIHJlcXVpcmUoJy4vX29iamVjdC1waWUnKS5mID0gJHByb3BlcnR5SXNFbnVtZXJhYmxlO1xuICAkR09QUy5mID0gJGdldE93blByb3BlcnR5U3ltYm9scztcblxuICBpZiAoREVTQ1JJUFRPUlMgJiYgIXJlcXVpcmUoJy4vX2xpYnJhcnknKSkge1xuICAgIHJlZGVmaW5lKE9iamVjdFByb3RvLCAncHJvcGVydHlJc0VudW1lcmFibGUnLCAkcHJvcGVydHlJc0VudW1lcmFibGUsIHRydWUpO1xuICB9XG5cbiAgd2tzRXh0LmYgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHJldHVybiB3cmFwKHdrcyhuYW1lKSk7XG4gIH07XG59XG5cbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5XICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsIHsgU3ltYm9sOiAkU3ltYm9sIH0pO1xuXG5mb3IgKHZhciBlczZTeW1ib2xzID0gKFxuICAvLyAxOS40LjIuMiwgMTkuNC4yLjMsIDE5LjQuMi40LCAxOS40LjIuNiwgMTkuNC4yLjgsIDE5LjQuMi45LCAxOS40LjIuMTAsIDE5LjQuMi4xMSwgMTkuNC4yLjEyLCAxOS40LjIuMTMsIDE5LjQuMi4xNFxuICAnaGFzSW5zdGFuY2UsaXNDb25jYXRTcHJlYWRhYmxlLGl0ZXJhdG9yLG1hdGNoLHJlcGxhY2Usc2VhcmNoLHNwZWNpZXMsc3BsaXQsdG9QcmltaXRpdmUsdG9TdHJpbmdUYWcsdW5zY29wYWJsZXMnXG4pLnNwbGl0KCcsJyksIGogPSAwOyBlczZTeW1ib2xzLmxlbmd0aCA+IGo7KXdrcyhlczZTeW1ib2xzW2orK10pO1xuXG5mb3IgKHZhciB3ZWxsS25vd25TeW1ib2xzID0gJGtleXMod2tzLnN0b3JlKSwgayA9IDA7IHdlbGxLbm93blN5bWJvbHMubGVuZ3RoID4gazspIHdrc0RlZmluZSh3ZWxsS25vd25TeW1ib2xzW2srK10pO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFVU0VfTkFUSVZFLCAnU3ltYm9sJywge1xuICAvLyAxOS40LjIuMSBTeW1ib2wuZm9yKGtleSlcbiAgJ2Zvcic6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICByZXR1cm4gaGFzKFN5bWJvbFJlZ2lzdHJ5LCBrZXkgKz0gJycpXG4gICAgICA/IFN5bWJvbFJlZ2lzdHJ5W2tleV1cbiAgICAgIDogU3ltYm9sUmVnaXN0cnlba2V5XSA9ICRTeW1ib2woa2V5KTtcbiAgfSxcbiAgLy8gMTkuNC4yLjUgU3ltYm9sLmtleUZvcihzeW0pXG4gIGtleUZvcjogZnVuY3Rpb24ga2V5Rm9yKHN5bSkge1xuICAgIGlmICghaXNTeW1ib2woc3ltKSkgdGhyb3cgVHlwZUVycm9yKHN5bSArICcgaXMgbm90IGEgc3ltYm9sIScpO1xuICAgIGZvciAodmFyIGtleSBpbiBTeW1ib2xSZWdpc3RyeSkgaWYgKFN5bWJvbFJlZ2lzdHJ5W2tleV0gPT09IHN5bSkgcmV0dXJuIGtleTtcbiAgfSxcbiAgdXNlU2V0dGVyOiBmdW5jdGlvbiAoKSB7IHNldHRlciA9IHRydWU7IH0sXG4gIHVzZVNpbXBsZTogZnVuY3Rpb24gKCkgeyBzZXR0ZXIgPSBmYWxzZTsgfVxufSk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsICdPYmplY3QnLCB7XG4gIC8vIDE5LjEuMi4yIE9iamVjdC5jcmVhdGUoTyBbLCBQcm9wZXJ0aWVzXSlcbiAgY3JlYXRlOiAkY3JlYXRlLFxuICAvLyAxOS4xLjIuNCBPYmplY3QuZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcylcbiAgZGVmaW5lUHJvcGVydHk6ICRkZWZpbmVQcm9wZXJ0eSxcbiAgLy8gMTkuMS4yLjMgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTywgUHJvcGVydGllcylcbiAgZGVmaW5lUHJvcGVydGllczogJGRlZmluZVByb3BlcnRpZXMsXG4gIC8vIDE5LjEuMi42IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUClcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLFxuICAvLyAxOS4xLjIuNyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhPKVxuICBnZXRPd25Qcm9wZXJ0eU5hbWVzOiAkZ2V0T3duUHJvcGVydHlOYW1lcyxcbiAgLy8gMTkuMS4yLjggT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhPKVxuICBnZXRPd25Qcm9wZXJ0eVN5bWJvbHM6ICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHNcbn0pO1xuXG4vLyBDaHJvbWUgMzggYW5kIDM5IGBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzYCBmYWlscyBvbiBwcmltaXRpdmVzXG4vLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zNDQzXG52YXIgRkFJTFNfT05fUFJJTUlUSVZFUyA9ICRmYWlscyhmdW5jdGlvbiAoKSB7ICRHT1BTLmYoMSk7IH0pO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIEZBSUxTX09OX1BSSU1JVElWRVMsICdPYmplY3QnLCB7XG4gIGdldE93blByb3BlcnR5U3ltYm9sczogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlTeW1ib2xzKGl0KSB7XG4gICAgcmV0dXJuICRHT1BTLmYodG9PYmplY3QoaXQpKTtcbiAgfVxufSk7XG5cbi8vIDI0LjMuMiBKU09OLnN0cmluZ2lmeSh2YWx1ZSBbLCByZXBsYWNlciBbLCBzcGFjZV1dKVxuJEpTT04gJiYgJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAoIVVTRV9OQVRJVkUgfHwgJGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIFMgPSAkU3ltYm9sKCk7XG4gIC8vIE1TIEVkZ2UgY29udmVydHMgc3ltYm9sIHZhbHVlcyB0byBKU09OIGFzIHt9XG4gIC8vIFdlYktpdCBjb252ZXJ0cyBzeW1ib2wgdmFsdWVzIHRvIEpTT04gYXMgbnVsbFxuICAvLyBWOCB0aHJvd3Mgb24gYm94ZWQgc3ltYm9sc1xuICByZXR1cm4gX3N0cmluZ2lmeShbU10pICE9ICdbbnVsbF0nIHx8IF9zdHJpbmdpZnkoeyBhOiBTIH0pICE9ICd7fScgfHwgX3N0cmluZ2lmeShPYmplY3QoUykpICE9ICd7fSc7XG59KSksICdKU09OJywge1xuICBzdHJpbmdpZnk6IGZ1bmN0aW9uIHN0cmluZ2lmeShpdCkge1xuICAgIHZhciBhcmdzID0gW2l0XTtcbiAgICB2YXIgaSA9IDE7XG4gICAgdmFyIHJlcGxhY2VyLCAkcmVwbGFjZXI7XG4gICAgd2hpbGUgKGFyZ3VtZW50cy5sZW5ndGggPiBpKSBhcmdzLnB1c2goYXJndW1lbnRzW2krK10pO1xuICAgICRyZXBsYWNlciA9IHJlcGxhY2VyID0gYXJnc1sxXTtcbiAgICBpZiAoIWlzT2JqZWN0KHJlcGxhY2VyKSAmJiBpdCA9PT0gdW5kZWZpbmVkIHx8IGlzU3ltYm9sKGl0KSkgcmV0dXJuOyAvLyBJRTggcmV0dXJucyBzdHJpbmcgb24gdW5kZWZpbmVkXG4gICAgaWYgKCFpc0FycmF5KHJlcGxhY2VyKSkgcmVwbGFjZXIgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgICAgaWYgKHR5cGVvZiAkcmVwbGFjZXIgPT0gJ2Z1bmN0aW9uJykgdmFsdWUgPSAkcmVwbGFjZXIuY2FsbCh0aGlzLCBrZXksIHZhbHVlKTtcbiAgICAgIGlmICghaXNTeW1ib2wodmFsdWUpKSByZXR1cm4gdmFsdWU7XG4gICAgfTtcbiAgICBhcmdzWzFdID0gcmVwbGFjZXI7XG4gICAgcmV0dXJuIF9zdHJpbmdpZnkuYXBwbHkoJEpTT04sIGFyZ3MpO1xuICB9XG59KTtcblxuLy8gMTkuNC4zLjQgU3ltYm9sLnByb3RvdHlwZVtAQHRvUHJpbWl0aXZlXShoaW50KVxuJFN5bWJvbFtQUk9UT1RZUEVdW1RPX1BSSU1JVElWRV0gfHwgcmVxdWlyZSgnLi9faGlkZScpKCRTeW1ib2xbUFJPVE9UWVBFXSwgVE9fUFJJTUlUSVZFLCAkU3ltYm9sW1BST1RPVFlQRV0udmFsdWVPZik7XG4vLyAxOS40LjMuNSBTeW1ib2wucHJvdG90eXBlW0BAdG9TdHJpbmdUYWddXG5zZXRUb1N0cmluZ1RhZygkU3ltYm9sLCAnU3ltYm9sJyk7XG4vLyAyMC4yLjEuOSBNYXRoW0BAdG9TdHJpbmdUYWddXG5zZXRUb1N0cmluZ1RhZyhNYXRoLCAnTWF0aCcsIHRydWUpO1xuLy8gMjQuMy4zIEpTT05bQEB0b1N0cmluZ1RhZ11cbnNldFRvU3RyaW5nVGFnKGdsb2JhbC5KU09OLCAnSlNPTicsIHRydWUpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///133\n")},function(module,exports,__webpack_require__){eval("module.exports = __webpack_require__(47)('native-function-to-string', Function.toString);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZnVuY3Rpb24tdG8tc3RyaW5nLmpzP2ZhNWIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsaUJBQWlCLG1CQUFPLENBQUMsRUFBVyIsImZpbGUiOiIxMzQuanMiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX3NoYXJlZCcpKCduYXRpdmUtZnVuY3Rpb24tdG8tc3RyaW5nJywgRnVuY3Rpb24udG9TdHJpbmcpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///134\n")},function(module,exports,__webpack_require__){eval("// all enumerable object keys, includes symbols\nvar getKeys = __webpack_require__(34);\nvar gOPS = __webpack_require__(53);\nvar pIE = __webpack_require__(49);\nmodule.exports = function (it) {\n var result = getKeys(it);\n var getSymbols = gOPS.f;\n if (getSymbols) {\n var symbols = getSymbols(it);\n var isEnum = pIE.f;\n var i = 0;\n var key;\n while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);\n } return result;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZW51bS1rZXlzLmpzP2Q0YzAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsRUFBZ0I7QUFDdEMsV0FBVyxtQkFBTyxDQUFDLEVBQWdCO0FBQ25DLFVBQVUsbUJBQU8sQ0FBQyxFQUFlO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCIsImZpbGUiOiIxMzUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBhbGwgZW51bWVyYWJsZSBvYmplY3Qga2V5cywgaW5jbHVkZXMgc3ltYm9sc1xudmFyIGdldEtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xudmFyIGdPUFMgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wcycpO1xudmFyIHBJRSA9IHJlcXVpcmUoJy4vX29iamVjdC1waWUnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciByZXN1bHQgPSBnZXRLZXlzKGl0KTtcbiAgdmFyIGdldFN5bWJvbHMgPSBnT1BTLmY7XG4gIGlmIChnZXRTeW1ib2xzKSB7XG4gICAgdmFyIHN5bWJvbHMgPSBnZXRTeW1ib2xzKGl0KTtcbiAgICB2YXIgaXNFbnVtID0gcElFLmY7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBrZXk7XG4gICAgd2hpbGUgKHN5bWJvbHMubGVuZ3RoID4gaSkgaWYgKGlzRW51bS5jYWxsKGl0LCBrZXkgPSBzeW1ib2xzW2krK10pKSByZXN1bHQucHVzaChrZXkpO1xuICB9IHJldHVybiByZXN1bHQ7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///135\n")},function(module,exports,__webpack_require__){eval("var $export = __webpack_require__(0);\n// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\n$export($export.S, 'Object', { create: __webpack_require__(36) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmNyZWF0ZS5qcz84NDc4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDO0FBQ0EsOEJBQThCLFNBQVMsbUJBQU8sQ0FBQyxFQUFrQixHQUFHIiwiZmlsZSI6IjEzNi5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG4vLyAxOS4xLjIuMiAvIDE1LjIuMy41IE9iamVjdC5jcmVhdGUoTyBbLCBQcm9wZXJ0aWVzXSlcbiRleHBvcnQoJGV4cG9ydC5TLCAnT2JqZWN0JywgeyBjcmVhdGU6IHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKSB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///136\n")},function(module,exports,__webpack_require__){eval("var $export = __webpack_require__(0);\n// 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes)\n$export($export.S + $export.F * !__webpack_require__(7), 'Object', { defineProperty: __webpack_require__(8).f });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmRlZmluZS1wcm9wZXJ0eS5qcz8xYzAxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDO0FBQ0EsaUNBQWlDLG1CQUFPLENBQUMsQ0FBZ0IsY0FBYyxpQkFBaUIsbUJBQU8sQ0FBQyxDQUFjLEtBQUsiLCJmaWxlIjoiMTM3LmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbi8vIDE5LjEuMi40IC8gMTUuMi4zLjYgT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpLCAnT2JqZWN0JywgeyBkZWZpbmVQcm9wZXJ0eTogcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZiB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///137\n")},function(module,exports,__webpack_require__){eval("var $export = __webpack_require__(0);\n// 19.1.2.3 / 15.2.3.7 Object.defineProperties(O, Properties)\n$export($export.S + $export.F * !__webpack_require__(7), 'Object', { defineProperties: __webpack_require__(97) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmRlZmluZS1wcm9wZXJ0aWVzLmpzPzU4YjIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakM7QUFDQSxpQ0FBaUMsbUJBQU8sQ0FBQyxDQUFnQixjQUFjLG1CQUFtQixtQkFBTyxDQUFDLEVBQWUsR0FBRyIsImZpbGUiOiIxMzguanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuLy8gMTkuMS4yLjMgLyAxNS4yLjMuNyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhPLCBQcm9wZXJ0aWVzKVxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSwgJ09iamVjdCcsIHsgZGVmaW5lUHJvcGVydGllczogcmVxdWlyZSgnLi9fb2JqZWN0LWRwcycpIH0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///138\n")},function(module,exports,__webpack_require__){eval("// 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\nvar toIObject = __webpack_require__(15);\nvar $getOwnPropertyDescriptor = __webpack_require__(16).f;\n\n__webpack_require__(25)('getOwnPropertyDescriptor', function () {\n return function getOwnPropertyDescriptor(it, key) {\n return $getOwnPropertyDescriptor(toIObject(it), key);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvci5qcz85OTg2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2QyxnQ0FBZ0MsbUJBQU8sQ0FBQyxFQUFnQjs7QUFFeEQsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTM5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMTkuMS4yLjYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKVxudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKS5mO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2dldE93blByb3BlcnR5RGVzY3JpcHRvcicsIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihpdCwga2V5KSB7XG4gICAgcmV0dXJuICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodG9JT2JqZWN0KGl0KSwga2V5KTtcbiAgfTtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///139\n")},function(module,exports,__webpack_require__){eval("// 19.1.2.9 Object.getPrototypeOf(O)\nvar toObject = __webpack_require__(9);\nvar $getPrototypeOf = __webpack_require__(17);\n\n__webpack_require__(25)('getPrototypeOf', function () {\n return function getPrototypeOf(it) {\n return $getPrototypeOf(toObject(it));\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmdldC1wcm90b3R5cGUtb2YuanM/ZTRmNyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLHNCQUFzQixtQkFBTyxDQUFDLEVBQWU7O0FBRTdDLG1CQUFPLENBQUMsRUFBZTtBQUN2QjtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjE0MC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDE5LjEuMi45IE9iamVjdC5nZXRQcm90b3R5cGVPZihPKVxudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgJGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2dldFByb3RvdHlwZU9mJywgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gZnVuY3Rpb24gZ2V0UHJvdG90eXBlT2YoaXQpIHtcbiAgICByZXR1cm4gJGdldFByb3RvdHlwZU9mKHRvT2JqZWN0KGl0KSk7XG4gIH07XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///140\n")},function(module,exports,__webpack_require__){eval("// 19.1.2.14 Object.keys(O)\nvar toObject = __webpack_require__(9);\nvar $keys = __webpack_require__(34);\n\n__webpack_require__(25)('keys', function () {\n return function keys(it) {\n return $keys(toObject(it));\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmtleXMuanM/NDU2ZCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLFlBQVksbUJBQU8sQ0FBQyxFQUFnQjs7QUFFcEMsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTQxLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMTkuMS4yLjE0IE9iamVjdC5rZXlzKE8pXG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciAka2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgna2V5cycsIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGtleXMoaXQpIHtcbiAgICByZXR1cm4gJGtleXModG9PYmplY3QoaXQpKTtcbiAgfTtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///141\n")},function(module,exports,__webpack_require__){eval("// 19.1.2.7 Object.getOwnPropertyNames(O)\n__webpack_require__(25)('getOwnPropertyNames', function () {\n return __webpack_require__(98).f;\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmdldC1vd24tcHJvcGVydHktbmFtZXMuanM/MjVkYiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLG1CQUFPLENBQUMsRUFBZTtBQUN2QixTQUFTLG1CQUFPLENBQUMsRUFBb0I7QUFDckMsQ0FBQyIsImZpbGUiOiIxNDIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAxOS4xLjIuNyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhPKVxucmVxdWlyZSgnLi9fb2JqZWN0LXNhcCcpKCdnZXRPd25Qcm9wZXJ0eU5hbWVzJywgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4tZXh0JykuZjtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///142\n")},function(module,exports,__webpack_require__){eval("// 19.1.2.5 Object.freeze(O)\nvar isObject = __webpack_require__(4);\nvar meta = __webpack_require__(30).onFreeze;\n\n__webpack_require__(25)('freeze', function ($freeze) {\n return function freeze(it) {\n return $freeze && isObject(it) ? $freeze(meta(it)) : it;\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmZyZWV6ZS5qcz8wZDZkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsV0FBVyxtQkFBTyxDQUFDLEVBQVM7O0FBRTVCLG1CQUFPLENBQUMsRUFBZTtBQUN2QjtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjE0My5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDE5LjEuMi41IE9iamVjdC5mcmVlemUoTylcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIG1ldGEgPSByZXF1aXJlKCcuL19tZXRhJykub25GcmVlemU7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgnZnJlZXplJywgZnVuY3Rpb24gKCRmcmVlemUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGZyZWV6ZShpdCkge1xuICAgIHJldHVybiAkZnJlZXplICYmIGlzT2JqZWN0KGl0KSA/ICRmcmVlemUobWV0YShpdCkpIDogaXQ7XG4gIH07XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///143\n")},function(module,exports,__webpack_require__){eval("// 19.1.2.17 Object.seal(O)\nvar isObject = __webpack_require__(4);\nvar meta = __webpack_require__(30).onFreeze;\n\n__webpack_require__(25)('seal', function ($seal) {\n return function seal(it) {\n return $seal && isObject(it) ? $seal(meta(it)) : it;\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LnNlYWwuanM/Y2Y2YSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLFdBQVcsbUJBQU8sQ0FBQyxFQUFTOztBQUU1QixtQkFBTyxDQUFDLEVBQWU7QUFDdkI7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIxNDQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAxOS4xLjIuMTcgT2JqZWN0LnNlYWwoTylcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIG1ldGEgPSByZXF1aXJlKCcuL19tZXRhJykub25GcmVlemU7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgnc2VhbCcsIGZ1bmN0aW9uICgkc2VhbCkge1xuICByZXR1cm4gZnVuY3Rpb24gc2VhbChpdCkge1xuICAgIHJldHVybiAkc2VhbCAmJiBpc09iamVjdChpdCkgPyAkc2VhbChtZXRhKGl0KSkgOiBpdDtcbiAgfTtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///144\n")},function(module,exports,__webpack_require__){eval("// 19.1.2.15 Object.preventExtensions(O)\nvar isObject = __webpack_require__(4);\nvar meta = __webpack_require__(30).onFreeze;\n\n__webpack_require__(25)('preventExtensions', function ($preventExtensions) {\n return function preventExtensions(it) {\n return $preventExtensions && isObject(it) ? $preventExtensions(meta(it)) : it;\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LnByZXZlbnQtZXh0ZW5zaW9ucy5qcz85YWVhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsV0FBVyxtQkFBTyxDQUFDLEVBQVM7O0FBRTVCLG1CQUFPLENBQUMsRUFBZTtBQUN2QjtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjE0NS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDE5LjEuMi4xNSBPYmplY3QucHJldmVudEV4dGVuc2lvbnMoTylcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIG1ldGEgPSByZXF1aXJlKCcuL19tZXRhJykub25GcmVlemU7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgncHJldmVudEV4dGVuc2lvbnMnLCBmdW5jdGlvbiAoJHByZXZlbnRFeHRlbnNpb25zKSB7XG4gIHJldHVybiBmdW5jdGlvbiBwcmV2ZW50RXh0ZW5zaW9ucyhpdCkge1xuICAgIHJldHVybiAkcHJldmVudEV4dGVuc2lvbnMgJiYgaXNPYmplY3QoaXQpID8gJHByZXZlbnRFeHRlbnNpb25zKG1ldGEoaXQpKSA6IGl0O1xuICB9O1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///145\n")},function(module,exports,__webpack_require__){eval("// 19.1.2.12 Object.isFrozen(O)\nvar isObject = __webpack_require__(4);\n\n__webpack_require__(25)('isFrozen', function ($isFrozen) {\n return function isFrozen(it) {\n return isObject(it) ? $isFrozen ? $isFrozen(it) : false : true;\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmlzLWZyb3plbi5qcz82NmM4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsZUFBZSxtQkFBTyxDQUFDLENBQWM7O0FBRXJDLG1CQUFPLENBQUMsRUFBZTtBQUN2QjtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjE0Ni5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDE5LjEuMi4xMiBPYmplY3QuaXNGcm96ZW4oTylcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2lzRnJvemVuJywgZnVuY3Rpb24gKCRpc0Zyb3plbikge1xuICByZXR1cm4gZnVuY3Rpb24gaXNGcm96ZW4oaXQpIHtcbiAgICByZXR1cm4gaXNPYmplY3QoaXQpID8gJGlzRnJvemVuID8gJGlzRnJvemVuKGl0KSA6IGZhbHNlIDogdHJ1ZTtcbiAgfTtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///146\n")},function(module,exports,__webpack_require__){eval("// 19.1.2.13 Object.isSealed(O)\nvar isObject = __webpack_require__(4);\n\n__webpack_require__(25)('isSealed', function ($isSealed) {\n return function isSealed(it) {\n return isObject(it) ? $isSealed ? $isSealed(it) : false : true;\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmlzLXNlYWxlZC5qcz81N2YwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsZUFBZSxtQkFBTyxDQUFDLENBQWM7O0FBRXJDLG1CQUFPLENBQUMsRUFBZTtBQUN2QjtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjE0Ny5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDE5LjEuMi4xMyBPYmplY3QuaXNTZWFsZWQoTylcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2lzU2VhbGVkJywgZnVuY3Rpb24gKCRpc1NlYWxlZCkge1xuICByZXR1cm4gZnVuY3Rpb24gaXNTZWFsZWQoaXQpIHtcbiAgICByZXR1cm4gaXNPYmplY3QoaXQpID8gJGlzU2VhbGVkID8gJGlzU2VhbGVkKGl0KSA6IGZhbHNlIDogdHJ1ZTtcbiAgfTtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///147\n")},function(module,exports,__webpack_require__){eval("// 19.1.2.11 Object.isExtensible(O)\nvar isObject = __webpack_require__(4);\n\n__webpack_require__(25)('isExtensible', function ($isExtensible) {\n return function isExtensible(it) {\n return isObject(it) ? $isExtensible ? $isExtensible(it) : true : false;\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmlzLWV4dGVuc2libGUuanM/MTY1YiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGVBQWUsbUJBQU8sQ0FBQyxDQUFjOztBQUVyQyxtQkFBTyxDQUFDLEVBQWU7QUFDdkI7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIxNDguanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAxOS4xLjIuMTEgT2JqZWN0LmlzRXh0ZW5zaWJsZShPKVxudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgnaXNFeHRlbnNpYmxlJywgZnVuY3Rpb24gKCRpc0V4dGVuc2libGUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGlzRXh0ZW5zaWJsZShpdCkge1xuICAgIHJldHVybiBpc09iamVjdChpdCkgPyAkaXNFeHRlbnNpYmxlID8gJGlzRXh0ZW5zaWJsZShpdCkgOiB0cnVlIDogZmFsc2U7XG4gIH07XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///148\n")},function(module,exports,__webpack_require__){eval("// 19.1.3.1 Object.assign(target, source)\nvar $export = __webpack_require__(0);\n\n$export($export.S + $export.F, 'Object', { assign: __webpack_require__(99) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmFzc2lnbi5qcz9mNzUxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDLDBDQUEwQyxTQUFTLG1CQUFPLENBQUMsRUFBa0IsR0FBRyIsImZpbGUiOiIxNDkuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAxOS4xLjMuMSBPYmplY3QuYXNzaWduKHRhcmdldCwgc291cmNlKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYsICdPYmplY3QnLCB7IGFzc2lnbjogcmVxdWlyZSgnLi9fb2JqZWN0LWFzc2lnbicpIH0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///149\n")},function(module,exports,__webpack_require__){eval("// 19.1.3.10 Object.is(value1, value2)\nvar $export = __webpack_require__(0);\n$export($export.S, 'Object', { is: __webpack_require__(100) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmlzLmpzP2RiOTciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyw4QkFBOEIsS0FBSyxtQkFBTyxDQUFDLEdBQWUsR0FBRyIsImZpbGUiOiIxNTAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAxOS4xLjMuMTAgT2JqZWN0LmlzKHZhbHVlMSwgdmFsdWUyKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbiRleHBvcnQoJGV4cG9ydC5TLCAnT2JqZWN0JywgeyBpczogcmVxdWlyZSgnLi9fc2FtZS12YWx1ZScpIH0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///150\n")},function(module,exports,__webpack_require__){eval("// 19.1.3.19 Object.setPrototypeOf(O, proto)\nvar $export = __webpack_require__(0);\n$export($export.S, 'Object', { setPrototypeOf: __webpack_require__(71).set });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LnNldC1wcm90b3R5cGUtb2YuanM/ZmQyNCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLDhCQUE4QixpQkFBaUIsbUJBQU8sQ0FBQyxFQUFjLE9BQU8iLCJmaWxlIjoiMTUxLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMTkuMS4zLjE5IE9iamVjdC5zZXRQcm90b3R5cGVPZihPLCBwcm90bylcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG4kZXhwb3J0KCRleHBvcnQuUywgJ09iamVjdCcsIHsgc2V0UHJvdG90eXBlT2Y6IHJlcXVpcmUoJy4vX3NldC1wcm90bycpLnNldCB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///151\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// 19.1.3.6 Object.prototype.toString()\nvar classof = __webpack_require__(44);\nvar test = {};\ntest[__webpack_require__(5)('toStringTag')] = 'z';\nif (test + '' != '[object z]') {\n __webpack_require__(12)(Object.prototype, 'toString', function toString() {\n return '[object ' + classof(this) + ']';\n }, true);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LnRvLXN0cmluZy5qcz8wNmRiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxjQUFjLG1CQUFPLENBQUMsRUFBWTtBQUNsQztBQUNBLEtBQUssbUJBQU8sQ0FBQyxDQUFRO0FBQ3JCO0FBQ0EsRUFBRSxtQkFBTyxDQUFDLEVBQWE7QUFDdkI7QUFDQSxHQUFHO0FBQ0giLCJmaWxlIjoiMTUyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gMTkuMS4zLjYgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZygpXG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4vX2NsYXNzb2YnKTtcbnZhciB0ZXN0ID0ge307XG50ZXN0W3JlcXVpcmUoJy4vX3drcycpKCd0b1N0cmluZ1RhZycpXSA9ICd6JztcbmlmICh0ZXN0ICsgJycgIT0gJ1tvYmplY3Qgel0nKSB7XG4gIHJlcXVpcmUoJy4vX3JlZGVmaW5lJykoT2JqZWN0LnByb3RvdHlwZSwgJ3RvU3RyaW5nJywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuICdbb2JqZWN0ICcgKyBjbGFzc29mKHRoaXMpICsgJ10nO1xuICB9LCB0cnVlKTtcbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///152\n")},function(module,exports,__webpack_require__){eval("// 19.2.3.2 / 15.3.4.5 Function.prototype.bind(thisArg, args...)\nvar $export = __webpack_require__(0);\n\n$export($export.P, 'Function', { bind: __webpack_require__(101) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZnVuY3Rpb24uYmluZC5qcz9kOTJhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDLGdDQUFnQyxPQUFPLG1CQUFPLENBQUMsR0FBUyxHQUFHIiwiZmlsZSI6IjE1My5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDE5LjIuMy4yIC8gMTUuMy40LjUgRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQodGhpc0FyZywgYXJncy4uLilcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QLCAnRnVuY3Rpb24nLCB7IGJpbmQ6IHJlcXVpcmUoJy4vX2JpbmQnKSB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///153\n")},function(module,exports,__webpack_require__){eval("var dP = __webpack_require__(8).f;\nvar FProto = Function.prototype;\nvar nameRE = /^\\s*function ([^ (]*)/;\nvar NAME = 'name';\n\n// 19.2.4.2 name\nNAME in FProto || __webpack_require__(7) && dP(FProto, NAME, {\n configurable: true,\n get: function () {\n try {\n return ('' + this).match(nameRE)[1];\n } catch (e) {\n return '';\n }\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZnVuY3Rpb24ubmFtZS5qcz83ZjdmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFNBQVMsbUJBQU8sQ0FBQyxDQUFjO0FBQy9CO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGtCQUFrQixtQkFBTyxDQUFDLENBQWdCO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTU0LmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbnZhciBGUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGU7XG52YXIgbmFtZVJFID0gL15cXHMqZnVuY3Rpb24gKFteIChdKikvO1xudmFyIE5BTUUgPSAnbmFtZSc7XG5cbi8vIDE5LjIuNC4yIG5hbWVcbk5BTUUgaW4gRlByb3RvIHx8IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgZFAoRlByb3RvLCBOQU1FLCB7XG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiAoJycgKyB0aGlzKS5tYXRjaChuYW1lUkUpWzFdO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///154\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar isObject = __webpack_require__(4);\nvar getPrototypeOf = __webpack_require__(17);\nvar HAS_INSTANCE = __webpack_require__(5)('hasInstance');\nvar FunctionProto = Function.prototype;\n// 19.2.3.6 Function.prototype[@@hasInstance](V)\nif (!(HAS_INSTANCE in FunctionProto)) __webpack_require__(8).f(FunctionProto, HAS_INSTANCE, { value: function (O) {\n if (typeof this != 'function' || !isObject(O)) return false;\n if (!isObject(this.prototype)) return O instanceof this;\n // for environment w/o native `@@hasInstance` logic enough `instanceof`, but add this:\n while (O = getPrototypeOf(O)) if (this.prototype === O) return true;\n return false;\n} });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZnVuY3Rpb24uaGFzLWluc3RhbmNlLmpzPzIxN2IiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxxQkFBcUIsbUJBQU8sQ0FBQyxFQUFlO0FBQzVDLG1CQUFtQixtQkFBTyxDQUFDLENBQVE7QUFDbkM7QUFDQTtBQUNBLHNDQUFzQyxtQkFBTyxDQUFDLENBQWMsa0NBQWtDO0FBQzlGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLEVBQUUiLCJmaWxlIjoiMTU1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgSEFTX0lOU1RBTkNFID0gcmVxdWlyZSgnLi9fd2tzJykoJ2hhc0luc3RhbmNlJyk7XG52YXIgRnVuY3Rpb25Qcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbi8vIDE5LjIuMy42IEZ1bmN0aW9uLnByb3RvdHlwZVtAQGhhc0luc3RhbmNlXShWKVxuaWYgKCEoSEFTX0lOU1RBTkNFIGluIEZ1bmN0aW9uUHJvdG8pKSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mKEZ1bmN0aW9uUHJvdG8sIEhBU19JTlNUQU5DRSwgeyB2YWx1ZTogZnVuY3Rpb24gKE8pIHtcbiAgaWYgKHR5cGVvZiB0aGlzICE9ICdmdW5jdGlvbicgfHwgIWlzT2JqZWN0KE8pKSByZXR1cm4gZmFsc2U7XG4gIGlmICghaXNPYmplY3QodGhpcy5wcm90b3R5cGUpKSByZXR1cm4gTyBpbnN0YW5jZW9mIHRoaXM7XG4gIC8vIGZvciBlbnZpcm9ubWVudCB3L28gbmF0aXZlIGBAQGhhc0luc3RhbmNlYCBsb2dpYyBlbm91Z2ggYGluc3RhbmNlb2ZgLCBidXQgYWRkIHRoaXM6XG4gIHdoaWxlIChPID0gZ2V0UHJvdG90eXBlT2YoTykpIGlmICh0aGlzLnByb3RvdHlwZSA9PT0gTykgcmV0dXJuIHRydWU7XG4gIHJldHVybiBmYWxzZTtcbn0gfSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///155\n")},function(module,exports,__webpack_require__){eval("var $export = __webpack_require__(0);\nvar $parseInt = __webpack_require__(103);\n// 18.2.5 parseInt(string, radix)\n$export($export.G + $export.F * (parseInt != $parseInt), { parseInt: $parseInt });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucGFyc2UtaW50LmpzPzE4ZDAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsZ0JBQWdCLG1CQUFPLENBQUMsR0FBYztBQUN0QztBQUNBLDBEQUEwRCxzQkFBc0IiLCJmaWxlIjoiMTU2LmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkcGFyc2VJbnQgPSByZXF1aXJlKCcuL19wYXJzZS1pbnQnKTtcbi8vIDE4LjIuNSBwYXJzZUludChzdHJpbmcsIHJhZGl4KVxuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LkYgKiAocGFyc2VJbnQgIT0gJHBhcnNlSW50KSwgeyBwYXJzZUludDogJHBhcnNlSW50IH0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///156\n")},function(module,exports,__webpack_require__){eval("var $export = __webpack_require__(0);\nvar $parseFloat = __webpack_require__(104);\n// 18.2.4 parseFloat(string)\n$export($export.G + $export.F * (parseFloat != $parseFloat), { parseFloat: $parseFloat });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucGFyc2UtZmxvYXQuanM/YjcyYyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxrQkFBa0IsbUJBQU8sQ0FBQyxHQUFnQjtBQUMxQztBQUNBLDhEQUE4RCwwQkFBMEIiLCJmaWxlIjoiMTU3LmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkcGFyc2VGbG9hdCA9IHJlcXVpcmUoJy4vX3BhcnNlLWZsb2F0Jyk7XG4vLyAxOC4yLjQgcGFyc2VGbG9hdChzdHJpbmcpXG4kZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuRiAqIChwYXJzZUZsb2F0ICE9ICRwYXJzZUZsb2F0KSwgeyBwYXJzZUZsb2F0OiAkcGFyc2VGbG9hdCB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///157\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar global = __webpack_require__(2);\nvar has = __webpack_require__(14);\nvar cof = __webpack_require__(20);\nvar inheritIfRequired = __webpack_require__(73);\nvar toPrimitive = __webpack_require__(23);\nvar fails = __webpack_require__(3);\nvar gOPN = __webpack_require__(37).f;\nvar gOPD = __webpack_require__(16).f;\nvar dP = __webpack_require__(8).f;\nvar $trim = __webpack_require__(45).trim;\nvar NUMBER = 'Number';\nvar $Number = global[NUMBER];\nvar Base = $Number;\nvar proto = $Number.prototype;\n// Opera ~12 has broken Object#toString\nvar BROKEN_COF = cof(__webpack_require__(36)(proto)) == NUMBER;\nvar TRIM = 'trim' in String.prototype;\n\n// 7.1.3 ToNumber(argument)\nvar toNumber = function (argument) {\n var it = toPrimitive(argument, false);\n if (typeof it == 'string' && it.length > 2) {\n it = TRIM ? it.trim() : $trim(it, 3);\n var first = it.charCodeAt(0);\n var third, radix, maxCode;\n if (first === 43 || first === 45) {\n third = it.charCodeAt(2);\n if (third === 88 || third === 120) return NaN; // Number('+0x1') should be NaN, old V8 fix\n } else if (first === 48) {\n switch (it.charCodeAt(1)) {\n case 66: case 98: radix = 2; maxCode = 49; break; // fast equal /^0b[01]+$/i\n case 79: case 111: radix = 8; maxCode = 55; break; // fast equal /^0o[0-7]+$/i\n default: return +it;\n }\n for (var digits = it.slice(2), i = 0, l = digits.length, code; i < l; i++) {\n code = digits.charCodeAt(i);\n // parseInt parses a string to a first unavailable symbol\n // but ToNumber should return NaN if a string contains unavailable symbols\n if (code < 48 || code > maxCode) return NaN;\n } return parseInt(digits, radix);\n }\n } return +it;\n};\n\nif (!$Number(' 0o1') || !$Number('0b1') || $Number('+0x1')) {\n $Number = function Number(value) {\n var it = arguments.length < 1 ? 0 : value;\n var that = this;\n return that instanceof $Number\n // check on 1..constructor(foo) case\n && (BROKEN_COF ? fails(function () { proto.valueOf.call(that); }) : cof(that) != NUMBER)\n ? inheritIfRequired(new Base(toNumber(it)), that, $Number) : toNumber(it);\n };\n for (var keys = __webpack_require__(7) ? gOPN(Base) : (\n // ES3:\n 'MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,' +\n // ES6 (in case, if modules with ES6 Number statics required before):\n 'EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,' +\n 'MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger'\n ).split(','), j = 0, key; keys.length > j; j++) {\n if (has(Base, key = keys[j]) && !has($Number, key)) {\n dP($Number, key, gOPD(Base, key));\n }\n }\n $Number.prototype = proto;\n proto.constructor = $Number;\n __webpack_require__(12)(global, NUMBER, $Number);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLmNvbnN0cnVjdG9yLmpzP2M1ZjYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixhQUFhLG1CQUFPLENBQUMsQ0FBVztBQUNoQyxVQUFVLG1CQUFPLENBQUMsRUFBUTtBQUMxQixVQUFVLG1CQUFPLENBQUMsRUFBUTtBQUMxQix3QkFBd0IsbUJBQU8sQ0FBQyxFQUF3QjtBQUN4RCxrQkFBa0IsbUJBQU8sQ0FBQyxFQUFpQjtBQUMzQyxZQUFZLG1CQUFPLENBQUMsQ0FBVTtBQUM5QixXQUFXLG1CQUFPLENBQUMsRUFBZ0I7QUFDbkMsV0FBVyxtQkFBTyxDQUFDLEVBQWdCO0FBQ25DLFNBQVMsbUJBQU8sQ0FBQyxDQUFjO0FBQy9CLFlBQVksbUJBQU8sQ0FBQyxFQUFnQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLG1CQUFPLENBQUMsRUFBa0I7QUFDL0M7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0RBQW9EO0FBQ3BELEtBQUs7QUFDTDtBQUNBLG9DQUFvQyxjQUFjLE9BQU87QUFDekQscUNBQXFDLGNBQWMsT0FBTztBQUMxRDtBQUNBO0FBQ0Esb0VBQW9FLE9BQU87QUFDM0U7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMENBQTBDLDBCQUEwQixFQUFFO0FBQ3RFO0FBQ0E7QUFDQSxrQkFBa0IsbUJBQU8sQ0FBQyxDQUFnQjtBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCLGlCQUFpQjtBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLG1CQUFPLENBQUMsRUFBYTtBQUN2QiIsImZpbGUiOiIxNTguanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG52YXIgaW5oZXJpdElmUmVxdWlyZWQgPSByZXF1aXJlKCcuL19pbmhlcml0LWlmLXJlcXVpcmVkJyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgZ09QTiA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJykuZjtcbnZhciBnT1BEID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKS5mO1xudmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbnZhciAkdHJpbSA9IHJlcXVpcmUoJy4vX3N0cmluZy10cmltJykudHJpbTtcbnZhciBOVU1CRVIgPSAnTnVtYmVyJztcbnZhciAkTnVtYmVyID0gZ2xvYmFsW05VTUJFUl07XG52YXIgQmFzZSA9ICROdW1iZXI7XG52YXIgcHJvdG8gPSAkTnVtYmVyLnByb3RvdHlwZTtcbi8vIE9wZXJhIH4xMiBoYXMgYnJva2VuIE9iamVjdCN0b1N0cmluZ1xudmFyIEJST0tFTl9DT0YgPSBjb2YocmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpKHByb3RvKSkgPT0gTlVNQkVSO1xudmFyIFRSSU0gPSAndHJpbScgaW4gU3RyaW5nLnByb3RvdHlwZTtcblxuLy8gNy4xLjMgVG9OdW1iZXIoYXJndW1lbnQpXG52YXIgdG9OdW1iZXIgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdmFyIGl0ID0gdG9QcmltaXRpdmUoYXJndW1lbnQsIGZhbHNlKTtcbiAgaWYgKHR5cGVvZiBpdCA9PSAnc3RyaW5nJyAmJiBpdC5sZW5ndGggPiAyKSB7XG4gICAgaXQgPSBUUklNID8gaXQudHJpbSgpIDogJHRyaW0oaXQsIDMpO1xuICAgIHZhciBmaXJzdCA9IGl0LmNoYXJDb2RlQXQoMCk7XG4gICAgdmFyIHRoaXJkLCByYWRpeCwgbWF4Q29kZTtcbiAgICBpZiAoZmlyc3QgPT09IDQzIHx8IGZpcnN0ID09PSA0NSkge1xuICAgICAgdGhpcmQgPSBpdC5jaGFyQ29kZUF0KDIpO1xuICAgICAgaWYgKHRoaXJkID09PSA4OCB8fCB0aGlyZCA9PT0gMTIwKSByZXR1cm4gTmFOOyAvLyBOdW1iZXIoJysweDEnKSBzaG91bGQgYmUgTmFOLCBvbGQgVjggZml4XG4gICAgfSBlbHNlIGlmIChmaXJzdCA9PT0gNDgpIHtcbiAgICAgIHN3aXRjaCAoaXQuY2hhckNvZGVBdCgxKSkge1xuICAgICAgICBjYXNlIDY2OiBjYXNlIDk4OiByYWRpeCA9IDI7IG1heENvZGUgPSA0OTsgYnJlYWs7IC8vIGZhc3QgZXF1YWwgL14wYlswMV0rJC9pXG4gICAgICAgIGNhc2UgNzk6IGNhc2UgMTExOiByYWRpeCA9IDg7IG1heENvZGUgPSA1NTsgYnJlYWs7IC8vIGZhc3QgZXF1YWwgL14wb1swLTddKyQvaVxuICAgICAgICBkZWZhdWx0OiByZXR1cm4gK2l0O1xuICAgICAgfVxuICAgICAgZm9yICh2YXIgZGlnaXRzID0gaXQuc2xpY2UoMiksIGkgPSAwLCBsID0gZGlnaXRzLmxlbmd0aCwgY29kZTsgaSA8IGw7IGkrKykge1xuICAgICAgICBjb2RlID0gZGlnaXRzLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIC8vIHBhcnNlSW50IHBhcnNlcyBhIHN0cmluZyB0byBhIGZpcnN0IHVuYXZhaWxhYmxlIHN5bWJvbFxuICAgICAgICAvLyBidXQgVG9OdW1iZXIgc2hvdWxkIHJldHVybiBOYU4gaWYgYSBzdHJpbmcgY29udGFpbnMgdW5hdmFpbGFibGUgc3ltYm9sc1xuICAgICAgICBpZiAoY29kZSA8IDQ4IHx8IGNvZGUgPiBtYXhDb2RlKSByZXR1cm4gTmFOO1xuICAgICAgfSByZXR1cm4gcGFyc2VJbnQoZGlnaXRzLCByYWRpeCk7XG4gICAgfVxuICB9IHJldHVybiAraXQ7XG59O1xuXG5pZiAoISROdW1iZXIoJyAwbzEnKSB8fCAhJE51bWJlcignMGIxJykgfHwgJE51bWJlcignKzB4MScpKSB7XG4gICROdW1iZXIgPSBmdW5jdGlvbiBOdW1iZXIodmFsdWUpIHtcbiAgICB2YXIgaXQgPSBhcmd1bWVudHMubGVuZ3RoIDwgMSA/IDAgOiB2YWx1ZTtcbiAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgcmV0dXJuIHRoYXQgaW5zdGFuY2VvZiAkTnVtYmVyXG4gICAgICAvLyBjaGVjayBvbiAxLi5jb25zdHJ1Y3Rvcihmb28pIGNhc2VcbiAgICAgICYmIChCUk9LRU5fQ09GID8gZmFpbHMoZnVuY3Rpb24gKCkgeyBwcm90by52YWx1ZU9mLmNhbGwodGhhdCk7IH0pIDogY29mKHRoYXQpICE9IE5VTUJFUilcbiAgICAgICAgPyBpbmhlcml0SWZSZXF1aXJlZChuZXcgQmFzZSh0b051bWJlcihpdCkpLCB0aGF0LCAkTnVtYmVyKSA6IHRvTnVtYmVyKGl0KTtcbiAgfTtcbiAgZm9yICh2YXIga2V5cyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBnT1BOKEJhc2UpIDogKFxuICAgIC8vIEVTMzpcbiAgICAnTUFYX1ZBTFVFLE1JTl9WQUxVRSxOYU4sTkVHQVRJVkVfSU5GSU5JVFksUE9TSVRJVkVfSU5GSU5JVFksJyArXG4gICAgLy8gRVM2IChpbiBjYXNlLCBpZiBtb2R1bGVzIHdpdGggRVM2IE51bWJlciBzdGF0aWNzIHJlcXVpcmVkIGJlZm9yZSk6XG4gICAgJ0VQU0lMT04saXNGaW5pdGUsaXNJbnRlZ2VyLGlzTmFOLGlzU2FmZUludGVnZXIsTUFYX1NBRkVfSU5URUdFUiwnICtcbiAgICAnTUlOX1NBRkVfSU5URUdFUixwYXJzZUZsb2F0LHBhcnNlSW50LGlzSW50ZWdlcidcbiAgKS5zcGxpdCgnLCcpLCBqID0gMCwga2V5OyBrZXlzLmxlbmd0aCA+IGo7IGorKykge1xuICAgIGlmIChoYXMoQmFzZSwga2V5ID0ga2V5c1tqXSkgJiYgIWhhcygkTnVtYmVyLCBrZXkpKSB7XG4gICAgICBkUCgkTnVtYmVyLCBrZXksIGdPUEQoQmFzZSwga2V5KSk7XG4gICAgfVxuICB9XG4gICROdW1iZXIucHJvdG90eXBlID0gcHJvdG87XG4gIHByb3RvLmNvbnN0cnVjdG9yID0gJE51bWJlcjtcbiAgcmVxdWlyZSgnLi9fcmVkZWZpbmUnKShnbG9iYWwsIE5VTUJFUiwgJE51bWJlcik7XG59XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///158\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar toInteger = __webpack_require__(21);\nvar aNumberValue = __webpack_require__(105);\nvar repeat = __webpack_require__(74);\nvar $toFixed = 1.0.toFixed;\nvar floor = Math.floor;\nvar data = [0, 0, 0, 0, 0, 0];\nvar ERROR = 'Number.toFixed: incorrect invocation!';\nvar ZERO = '0';\n\nvar multiply = function (n, c) {\n var i = -1;\n var c2 = c;\n while (++i < 6) {\n c2 += n * data[i];\n data[i] = c2 % 1e7;\n c2 = floor(c2 / 1e7);\n }\n};\nvar divide = function (n) {\n var i = 6;\n var c = 0;\n while (--i >= 0) {\n c += data[i];\n data[i] = floor(c / n);\n c = (c % n) * 1e7;\n }\n};\nvar numToString = function () {\n var i = 6;\n var s = '';\n while (--i >= 0) {\n if (s !== '' || i === 0 || data[i] !== 0) {\n var t = String(data[i]);\n s = s === '' ? t : s + repeat.call(ZERO, 7 - t.length) + t;\n }\n } return s;\n};\nvar pow = function (x, n, acc) {\n return n === 0 ? acc : n % 2 === 1 ? pow(x, n - 1, acc * x) : pow(x * x, n / 2, acc);\n};\nvar log = function (x) {\n var n = 0;\n var x2 = x;\n while (x2 >= 4096) {\n n += 12;\n x2 /= 4096;\n }\n while (x2 >= 2) {\n n += 1;\n x2 /= 2;\n } return n;\n};\n\n$export($export.P + $export.F * (!!$toFixed && (\n 0.00008.toFixed(3) !== '0.000' ||\n 0.9.toFixed(0) !== '1' ||\n 1.255.toFixed(2) !== '1.25' ||\n 1000000000000000128.0.toFixed(0) !== '1000000000000000128'\n) || !__webpack_require__(3)(function () {\n // V8 ~ Android 4.3-\n $toFixed.call({});\n})), 'Number', {\n toFixed: function toFixed(fractionDigits) {\n var x = aNumberValue(this, ERROR);\n var f = toInteger(fractionDigits);\n var s = '';\n var m = ZERO;\n var e, z, j, k;\n if (f < 0 || f > 20) throw RangeError(ERROR);\n // eslint-disable-next-line no-self-compare\n if (x != x) return 'NaN';\n if (x <= -1e21 || x >= 1e21) return String(x);\n if (x < 0) {\n s = '-';\n x = -x;\n }\n if (x > 1e-21) {\n e = log(x * pow(2, 69, 1)) - 69;\n z = e < 0 ? x * pow(2, -e, 1) : x / pow(2, e, 1);\n z *= 0x10000000000000;\n e = 52 - e;\n if (e > 0) {\n multiply(0, z);\n j = f;\n while (j >= 7) {\n multiply(1e7, 0);\n j -= 7;\n }\n multiply(pow(10, j, 1), 0);\n j = e - 1;\n while (j >= 23) {\n divide(1 << 23);\n j -= 23;\n }\n divide(1 << j);\n multiply(1, 1);\n divide(2);\n m = numToString();\n } else {\n multiply(0, z);\n multiply(1 << -e, 0);\n m = numToString() + repeat.call(ZERO, f);\n }\n }\n if (f > 0) {\n k = m.length;\n m = s + (k <= f ? '0.' + repeat.call(ZERO, f - k) + m : m.slice(0, k - f) + '.' + m.slice(k - f));\n } else {\n m = s + m;\n } return m;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLnRvLWZpeGVkLmpzPzAzNmMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDLG1CQUFtQixtQkFBTyxDQUFDLEdBQW1CO0FBQzlDLGFBQWEsbUJBQU8sQ0FBQyxFQUFrQjtBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTSxtQkFBTyxDQUFDLENBQVU7QUFDeEI7QUFDQSxrQkFBa0I7QUFDbEIsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMO0FBQ0EsQ0FBQyIsImZpbGUiOiIxNTkuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciBhTnVtYmVyVmFsdWUgPSByZXF1aXJlKCcuL19hLW51bWJlci12YWx1ZScpO1xudmFyIHJlcGVhdCA9IHJlcXVpcmUoJy4vX3N0cmluZy1yZXBlYXQnKTtcbnZhciAkdG9GaXhlZCA9IDEuMC50b0ZpeGVkO1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcbnZhciBkYXRhID0gWzAsIDAsIDAsIDAsIDAsIDBdO1xudmFyIEVSUk9SID0gJ051bWJlci50b0ZpeGVkOiBpbmNvcnJlY3QgaW52b2NhdGlvbiEnO1xudmFyIFpFUk8gPSAnMCc7XG5cbnZhciBtdWx0aXBseSA9IGZ1bmN0aW9uIChuLCBjKSB7XG4gIHZhciBpID0gLTE7XG4gIHZhciBjMiA9IGM7XG4gIHdoaWxlICgrK2kgPCA2KSB7XG4gICAgYzIgKz0gbiAqIGRhdGFbaV07XG4gICAgZGF0YVtpXSA9IGMyICUgMWU3O1xuICAgIGMyID0gZmxvb3IoYzIgLyAxZTcpO1xuICB9XG59O1xudmFyIGRpdmlkZSA9IGZ1bmN0aW9uIChuKSB7XG4gIHZhciBpID0gNjtcbiAgdmFyIGMgPSAwO1xuICB3aGlsZSAoLS1pID49IDApIHtcbiAgICBjICs9IGRhdGFbaV07XG4gICAgZGF0YVtpXSA9IGZsb29yKGMgLyBuKTtcbiAgICBjID0gKGMgJSBuKSAqIDFlNztcbiAgfVxufTtcbnZhciBudW1Ub1N0cmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGkgPSA2O1xuICB2YXIgcyA9ICcnO1xuICB3aGlsZSAoLS1pID49IDApIHtcbiAgICBpZiAocyAhPT0gJycgfHwgaSA9PT0gMCB8fCBkYXRhW2ldICE9PSAwKSB7XG4gICAgICB2YXIgdCA9IFN0cmluZyhkYXRhW2ldKTtcbiAgICAgIHMgPSBzID09PSAnJyA/IHQgOiBzICsgcmVwZWF0LmNhbGwoWkVSTywgNyAtIHQubGVuZ3RoKSArIHQ7XG4gICAgfVxuICB9IHJldHVybiBzO1xufTtcbnZhciBwb3cgPSBmdW5jdGlvbiAoeCwgbiwgYWNjKSB7XG4gIHJldHVybiBuID09PSAwID8gYWNjIDogbiAlIDIgPT09IDEgPyBwb3coeCwgbiAtIDEsIGFjYyAqIHgpIDogcG93KHggKiB4LCBuIC8gMiwgYWNjKTtcbn07XG52YXIgbG9nID0gZnVuY3Rpb24gKHgpIHtcbiAgdmFyIG4gPSAwO1xuICB2YXIgeDIgPSB4O1xuICB3aGlsZSAoeDIgPj0gNDA5Nikge1xuICAgIG4gKz0gMTI7XG4gICAgeDIgLz0gNDA5NjtcbiAgfVxuICB3aGlsZSAoeDIgPj0gMikge1xuICAgIG4gKz0gMTtcbiAgICB4MiAvPSAyO1xuICB9IHJldHVybiBuO1xufTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoISEkdG9GaXhlZCAmJiAoXG4gIDAuMDAwMDgudG9GaXhlZCgzKSAhPT0gJzAuMDAwJyB8fFxuICAwLjkudG9GaXhlZCgwKSAhPT0gJzEnIHx8XG4gIDEuMjU1LnRvRml4ZWQoMikgIT09ICcxLjI1JyB8fFxuICAxMDAwMDAwMDAwMDAwMDAwMTI4LjAudG9GaXhlZCgwKSAhPT0gJzEwMDAwMDAwMDAwMDAwMDAxMjgnXG4pIHx8ICFyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgLy8gVjggfiBBbmRyb2lkIDQuMy1cbiAgJHRvRml4ZWQuY2FsbCh7fSk7XG59KSksICdOdW1iZXInLCB7XG4gIHRvRml4ZWQ6IGZ1bmN0aW9uIHRvRml4ZWQoZnJhY3Rpb25EaWdpdHMpIHtcbiAgICB2YXIgeCA9IGFOdW1iZXJWYWx1ZSh0aGlzLCBFUlJPUik7XG4gICAgdmFyIGYgPSB0b0ludGVnZXIoZnJhY3Rpb25EaWdpdHMpO1xuICAgIHZhciBzID0gJyc7XG4gICAgdmFyIG0gPSBaRVJPO1xuICAgIHZhciBlLCB6LCBqLCBrO1xuICAgIGlmIChmIDwgMCB8fCBmID4gMjApIHRocm93IFJhbmdlRXJyb3IoRVJST1IpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICBpZiAoeCAhPSB4KSByZXR1cm4gJ05hTic7XG4gICAgaWYgKHggPD0gLTFlMjEgfHwgeCA+PSAxZTIxKSByZXR1cm4gU3RyaW5nKHgpO1xuICAgIGlmICh4IDwgMCkge1xuICAgICAgcyA9ICctJztcbiAgICAgIHggPSAteDtcbiAgICB9XG4gICAgaWYgKHggPiAxZS0yMSkge1xuICAgICAgZSA9IGxvZyh4ICogcG93KDIsIDY5LCAxKSkgLSA2OTtcbiAgICAgIHogPSBlIDwgMCA/IHggKiBwb3coMiwgLWUsIDEpIDogeCAvIHBvdygyLCBlLCAxKTtcbiAgICAgIHogKj0gMHgxMDAwMDAwMDAwMDAwMDtcbiAgICAgIGUgPSA1MiAtIGU7XG4gICAgICBpZiAoZSA+IDApIHtcbiAgICAgICAgbXVsdGlwbHkoMCwgeik7XG4gICAgICAgIGogPSBmO1xuICAgICAgICB3aGlsZSAoaiA+PSA3KSB7XG4gICAgICAgICAgbXVsdGlwbHkoMWU3LCAwKTtcbiAgICAgICAgICBqIC09IDc7XG4gICAgICAgIH1cbiAgICAgICAgbXVsdGlwbHkocG93KDEwLCBqLCAxKSwgMCk7XG4gICAgICAgIGogPSBlIC0gMTtcbiAgICAgICAgd2hpbGUgKGogPj0gMjMpIHtcbiAgICAgICAgICBkaXZpZGUoMSA8PCAyMyk7XG4gICAgICAgICAgaiAtPSAyMztcbiAgICAgICAgfVxuICAgICAgICBkaXZpZGUoMSA8PCBqKTtcbiAgICAgICAgbXVsdGlwbHkoMSwgMSk7XG4gICAgICAgIGRpdmlkZSgyKTtcbiAgICAgICAgbSA9IG51bVRvU3RyaW5nKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBtdWx0aXBseSgwLCB6KTtcbiAgICAgICAgbXVsdGlwbHkoMSA8PCAtZSwgMCk7XG4gICAgICAgIG0gPSBudW1Ub1N0cmluZygpICsgcmVwZWF0LmNhbGwoWkVSTywgZik7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChmID4gMCkge1xuICAgICAgayA9IG0ubGVuZ3RoO1xuICAgICAgbSA9IHMgKyAoayA8PSBmID8gJzAuJyArIHJlcGVhdC5jYWxsKFpFUk8sIGYgLSBrKSArIG0gOiBtLnNsaWNlKDAsIGsgLSBmKSArICcuJyArIG0uc2xpY2UoayAtIGYpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbSA9IHMgKyBtO1xuICAgIH0gcmV0dXJuIG07XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///159\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar $fails = __webpack_require__(3);\nvar aNumberValue = __webpack_require__(105);\nvar $toPrecision = 1.0.toPrecision;\n\n$export($export.P + $export.F * ($fails(function () {\n // IE7-\n return $toPrecision.call(1, undefined) !== '1';\n}) || !$fails(function () {\n // V8 ~ Android 4.3-\n $toPrecision.call({});\n})), 'Number', {\n toPrecision: function toPrecision(precision) {\n var that = aNumberValue(this, 'Number#toPrecision: incorrect invocation!');\n return precision === undefined ? $toPrecision.call(that) : $toPrecision.call(that, precision);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLnRvLXByZWNpc2lvbi5qcz81NGE4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsYUFBYSxtQkFBTyxDQUFDLENBQVU7QUFDL0IsbUJBQW1CLG1CQUFPLENBQUMsR0FBbUI7QUFDOUM7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0Esc0JBQXNCO0FBQ3RCLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTYwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIGFOdW1iZXJWYWx1ZSA9IHJlcXVpcmUoJy4vX2EtbnVtYmVyLXZhbHVlJyk7XG52YXIgJHRvUHJlY2lzaW9uID0gMS4wLnRvUHJlY2lzaW9uO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICgkZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBJRTctXG4gIHJldHVybiAkdG9QcmVjaXNpb24uY2FsbCgxLCB1bmRlZmluZWQpICE9PSAnMSc7XG59KSB8fCAhJGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gVjggfiBBbmRyb2lkIDQuMy1cbiAgJHRvUHJlY2lzaW9uLmNhbGwoe30pO1xufSkpLCAnTnVtYmVyJywge1xuICB0b1ByZWNpc2lvbjogZnVuY3Rpb24gdG9QcmVjaXNpb24ocHJlY2lzaW9uKSB7XG4gICAgdmFyIHRoYXQgPSBhTnVtYmVyVmFsdWUodGhpcywgJ051bWJlciN0b1ByZWNpc2lvbjogaW5jb3JyZWN0IGludm9jYXRpb24hJyk7XG4gICAgcmV0dXJuIHByZWNpc2lvbiA9PT0gdW5kZWZpbmVkID8gJHRvUHJlY2lzaW9uLmNhbGwodGhhdCkgOiAkdG9QcmVjaXNpb24uY2FsbCh0aGF0LCBwcmVjaXNpb24pO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///160\n")},function(module,exports,__webpack_require__){eval("// 20.1.2.1 Number.EPSILON\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Number', { EPSILON: Math.pow(2, -52) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLmVwc2lsb24uanM/MmUzNyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXOztBQUVqQyw4QkFBOEIsNEJBQTRCIiwiZmlsZSI6IjE2MS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDIwLjEuMi4xIE51bWJlci5FUFNJTE9OXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ051bWJlcicsIHsgRVBTSUxPTjogTWF0aC5wb3coMiwgLTUyKSB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///161\n")},function(module,exports,__webpack_require__){eval("// 20.1.2.2 Number.isFinite(number)\nvar $export = __webpack_require__(0);\nvar _isFinite = __webpack_require__(2).isFinite;\n\n$export($export.S, 'Number', {\n isFinite: function isFinite(it) {\n return typeof it == 'number' && _isFinite(it);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLmlzLWZpbml0ZS5qcz9mY2EwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsZ0JBQWdCLG1CQUFPLENBQUMsQ0FBVzs7QUFFbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjE2Mi5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDIwLjEuMi4yIE51bWJlci5pc0Zpbml0ZShudW1iZXIpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIF9pc0Zpbml0ZSA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLmlzRmluaXRlO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ051bWJlcicsIHtcbiAgaXNGaW5pdGU6IGZ1bmN0aW9uIGlzRmluaXRlKGl0KSB7XG4gICAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnbnVtYmVyJyAmJiBfaXNGaW5pdGUoaXQpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///162\n")},function(module,exports,__webpack_require__){eval("// 20.1.2.3 Number.isInteger(number)\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Number', { isInteger: __webpack_require__(106) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLmlzLWludGVnZXIuanM/N2NkZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXOztBQUVqQyw4QkFBOEIsWUFBWSxtQkFBTyxDQUFDLEdBQWUsR0FBRyIsImZpbGUiOiIxNjMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyMC4xLjIuMyBOdW1iZXIuaXNJbnRlZ2VyKG51bWJlcilcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTnVtYmVyJywgeyBpc0ludGVnZXI6IHJlcXVpcmUoJy4vX2lzLWludGVnZXInKSB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///163\n")},function(module,exports,__webpack_require__){eval("// 20.1.2.4 Number.isNaN(number)\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Number', {\n isNaN: function isNaN(number) {\n // eslint-disable-next-line no-self-compare\n return number != number;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLmlzLW5hbi5qcz9lZTFkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjE2NC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDIwLjEuMi40IE51bWJlci5pc05hTihudW1iZXIpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ051bWJlcicsIHtcbiAgaXNOYU46IGZ1bmN0aW9uIGlzTmFOKG51bWJlcikge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICByZXR1cm4gbnVtYmVyICE9IG51bWJlcjtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///164\n")},function(module,exports,__webpack_require__){eval("// 20.1.2.5 Number.isSafeInteger(number)\nvar $export = __webpack_require__(0);\nvar isInteger = __webpack_require__(106);\nvar abs = Math.abs;\n\n$export($export.S, 'Number', {\n isSafeInteger: function isSafeInteger(number) {\n return isInteger(number) && abs(number) <= 0x1fffffffffffff;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLmlzLXNhZmUtaW50ZWdlci5qcz9iMWIxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsZ0JBQWdCLG1CQUFPLENBQUMsR0FBZTtBQUN2Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTY1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMS4yLjUgTnVtYmVyLmlzU2FmZUludGVnZXIobnVtYmVyKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBpc0ludGVnZXIgPSByZXF1aXJlKCcuL19pcy1pbnRlZ2VyJyk7XG52YXIgYWJzID0gTWF0aC5hYnM7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTnVtYmVyJywge1xuICBpc1NhZmVJbnRlZ2VyOiBmdW5jdGlvbiBpc1NhZmVJbnRlZ2VyKG51bWJlcikge1xuICAgIHJldHVybiBpc0ludGVnZXIobnVtYmVyKSAmJiBhYnMobnVtYmVyKSA8PSAweDFmZmZmZmZmZmZmZmZmO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///165\n")},function(module,exports,__webpack_require__){eval("// 20.1.2.6 Number.MAX_SAFE_INTEGER\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Number', { MAX_SAFE_INTEGER: 0x1fffffffffffff });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLm1heC1zYWZlLWludGVnZXIuanM/ODdmMyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXOztBQUVqQyw4QkFBOEIscUNBQXFDIiwiZmlsZSI6IjE2Ni5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDIwLjEuMi42IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ051bWJlcicsIHsgTUFYX1NBRkVfSU5URUdFUjogMHgxZmZmZmZmZmZmZmZmZiB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///166\n")},function(module,exports,__webpack_require__){eval("// 20.1.2.10 Number.MIN_SAFE_INTEGER\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Number', { MIN_SAFE_INTEGER: -0x1fffffffffffff });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLm1pbi1zYWZlLWludGVnZXIuanM/OTI3OCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXOztBQUVqQyw4QkFBOEIsc0NBQXNDIiwiZmlsZSI6IjE2Ny5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDIwLjEuMi4xMCBOdW1iZXIuTUlOX1NBRkVfSU5URUdFUlxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdOdW1iZXInLCB7IE1JTl9TQUZFX0lOVEVHRVI6IC0weDFmZmZmZmZmZmZmZmZmIH0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///167\n")},function(module,exports,__webpack_require__){eval("var $export = __webpack_require__(0);\nvar $parseFloat = __webpack_require__(104);\n// 20.1.2.12 Number.parseFloat(string)\n$export($export.S + $export.F * (Number.parseFloat != $parseFloat), 'Number', { parseFloat: $parseFloat });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLnBhcnNlLWZsb2F0LmpzPzVkZjIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsa0JBQWtCLG1CQUFPLENBQUMsR0FBZ0I7QUFDMUM7QUFDQSwrRUFBK0UsMEJBQTBCIiwiZmlsZSI6IjE2OC5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHBhcnNlRmxvYXQgPSByZXF1aXJlKCcuL19wYXJzZS1mbG9hdCcpO1xuLy8gMjAuMS4yLjEyIE51bWJlci5wYXJzZUZsb2F0KHN0cmluZylcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogKE51bWJlci5wYXJzZUZsb2F0ICE9ICRwYXJzZUZsb2F0KSwgJ051bWJlcicsIHsgcGFyc2VGbG9hdDogJHBhcnNlRmxvYXQgfSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///168\n")},function(module,exports,__webpack_require__){eval("var $export = __webpack_require__(0);\nvar $parseInt = __webpack_require__(103);\n// 20.1.2.13 Number.parseInt(string, radix)\n$export($export.S + $export.F * (Number.parseInt != $parseInt), 'Number', { parseInt: $parseInt });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLnBhcnNlLWludC5qcz8wNGZmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGdCQUFnQixtQkFBTyxDQUFDLEdBQWM7QUFDdEM7QUFDQSwyRUFBMkUsc0JBQXNCIiwiZmlsZSI6IjE2OS5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHBhcnNlSW50ID0gcmVxdWlyZSgnLi9fcGFyc2UtaW50Jyk7XG4vLyAyMC4xLjIuMTMgTnVtYmVyLnBhcnNlSW50KHN0cmluZywgcmFkaXgpXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIChOdW1iZXIucGFyc2VJbnQgIT0gJHBhcnNlSW50KSwgJ051bWJlcicsIHsgcGFyc2VJbnQ6ICRwYXJzZUludCB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///169\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.3 Math.acosh(x)\nvar $export = __webpack_require__(0);\nvar log1p = __webpack_require__(107);\nvar sqrt = Math.sqrt;\nvar $acosh = Math.acosh;\n\n$export($export.S + $export.F * !($acosh\n // V8 bug: https://code.google.com/p/v8/issues/detail?id=3509\n && Math.floor($acosh(Number.MAX_VALUE)) == 710\n // Tor Browser bug: Math.acosh(Infinity) -> NaN\n && $acosh(Infinity) == Infinity\n), 'Math', {\n acosh: function acosh(x) {\n return (x = +x) < 1 ? NaN : x > 94906265.62425156\n ? Math.log(x) + Math.LN2\n : log1p(x - 1 + sqrt(x - 1) * sqrt(x + 1));\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5hY29zaC5qcz83ZjI1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsWUFBWSxtQkFBTyxDQUFDLEdBQWU7QUFDbkM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIxNzAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyMC4yLjIuMyBNYXRoLmFjb3NoKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGxvZzFwID0gcmVxdWlyZSgnLi9fbWF0aC1sb2cxcCcpO1xudmFyIHNxcnQgPSBNYXRoLnNxcnQ7XG52YXIgJGFjb3NoID0gTWF0aC5hY29zaDtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhKCRhY29zaFxuICAvLyBWOCBidWc6IGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zNTA5XG4gICYmIE1hdGguZmxvb3IoJGFjb3NoKE51bWJlci5NQVhfVkFMVUUpKSA9PSA3MTBcbiAgLy8gVG9yIEJyb3dzZXIgYnVnOiBNYXRoLmFjb3NoKEluZmluaXR5KSAtPiBOYU5cbiAgJiYgJGFjb3NoKEluZmluaXR5KSA9PSBJbmZpbml0eVxuKSwgJ01hdGgnLCB7XG4gIGFjb3NoOiBmdW5jdGlvbiBhY29zaCh4KSB7XG4gICAgcmV0dXJuICh4ID0gK3gpIDwgMSA/IE5hTiA6IHggPiA5NDkwNjI2NS42MjQyNTE1NlxuICAgICAgPyBNYXRoLmxvZyh4KSArIE1hdGguTE4yXG4gICAgICA6IGxvZzFwKHggLSAxICsgc3FydCh4IC0gMSkgKiBzcXJ0KHggKyAxKSk7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///170\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.5 Math.asinh(x)\nvar $export = __webpack_require__(0);\nvar $asinh = Math.asinh;\n\nfunction asinh(x) {\n return !isFinite(x = +x) || x == 0 ? x : x < 0 ? -asinh(-x) : Math.log(x + Math.sqrt(x * x + 1));\n}\n\n// Tor Browser bug: Math.asinh(0) -> -0\n$export($export.S + $export.F * !($asinh && 1 / $asinh(0) > 0), 'Math', { asinh: asinh });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5hc2luaC5qcz81MzZiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakM7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EseUVBQXlFLGVBQWUiLCJmaWxlIjoiMTcxLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMi4yLjUgTWF0aC5hc2luaCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkYXNpbmggPSBNYXRoLmFzaW5oO1xuXG5mdW5jdGlvbiBhc2luaCh4KSB7XG4gIHJldHVybiAhaXNGaW5pdGUoeCA9ICt4KSB8fCB4ID09IDAgPyB4IDogeCA8IDAgPyAtYXNpbmgoLXgpIDogTWF0aC5sb2coeCArIE1hdGguc3FydCh4ICogeCArIDEpKTtcbn1cblxuLy8gVG9yIEJyb3dzZXIgYnVnOiBNYXRoLmFzaW5oKDApIC0+IC0wXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICEoJGFzaW5oICYmIDEgLyAkYXNpbmgoMCkgPiAwKSwgJ01hdGgnLCB7IGFzaW5oOiBhc2luaCB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///171\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.7 Math.atanh(x)\nvar $export = __webpack_require__(0);\nvar $atanh = Math.atanh;\n\n// Tor Browser bug: Math.atanh(-0) -> 0\n$export($export.S + $export.F * !($atanh && 1 / $atanh(-0) < 0), 'Math', {\n atanh: function atanh(x) {\n return (x = +x) == 0 ? x : Math.log((1 + x) / (1 - x)) / 2;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5hdGFuaC5qcz9kOWFiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTcyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMi4yLjcgTWF0aC5hdGFuaCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkYXRhbmggPSBNYXRoLmF0YW5oO1xuXG4vLyBUb3IgQnJvd3NlciBidWc6IE1hdGguYXRhbmgoLTApIC0+IDBcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogISgkYXRhbmggJiYgMSAvICRhdGFuaCgtMCkgPCAwKSwgJ01hdGgnLCB7XG4gIGF0YW5oOiBmdW5jdGlvbiBhdGFuaCh4KSB7XG4gICAgcmV0dXJuICh4ID0gK3gpID09IDAgPyB4IDogTWF0aC5sb2coKDEgKyB4KSAvICgxIC0geCkpIC8gMjtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///172\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.9 Math.cbrt(x)\nvar $export = __webpack_require__(0);\nvar sign = __webpack_require__(75);\n\n$export($export.S, 'Math', {\n cbrt: function cbrt(x) {\n return sign(x = +x) * Math.pow(Math.abs(x), 1 / 3);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5jYnJ0LmpzP2Y5YWIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxXQUFXLG1CQUFPLENBQUMsRUFBYzs7QUFFakM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjE3My5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDIwLjIuMi45IE1hdGguY2JydCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBzaWduID0gcmVxdWlyZSgnLi9fbWF0aC1zaWduJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgY2JydDogZnVuY3Rpb24gY2JydCh4KSB7XG4gICAgcmV0dXJuIHNpZ24oeCA9ICt4KSAqIE1hdGgucG93KE1hdGguYWJzKHgpLCAxIC8gMyk7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///173\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.11 Math.clz32(x)\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', {\n clz32: function clz32(x) {\n return (x >>>= 0) ? 31 - Math.floor(Math.log(x + 0.5) * Math.LOG2E) : 32;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5jbHozMi5qcz8zMmQ3Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIxNzQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyMC4yLjIuMTEgTWF0aC5jbHozMih4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBjbHozMjogZnVuY3Rpb24gY2x6MzIoeCkge1xuICAgIHJldHVybiAoeCA+Pj49IDApID8gMzEgLSBNYXRoLmZsb29yKE1hdGgubG9nKHggKyAwLjUpICogTWF0aC5MT0cyRSkgOiAzMjtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///174\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.12 Math.cosh(x)\nvar $export = __webpack_require__(0);\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n cosh: function cosh(x) {\n return (exp(x = +x) + exp(-x)) / 2;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5jb3NoLmpzPzI1YzkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTc1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMi4yLjEyIE1hdGguY29zaCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBleHAgPSBNYXRoLmV4cDtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBjb3NoOiBmdW5jdGlvbiBjb3NoKHgpIHtcbiAgICByZXR1cm4gKGV4cCh4ID0gK3gpICsgZXhwKC14KSkgLyAyO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///175\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.14 Math.expm1(x)\nvar $export = __webpack_require__(0);\nvar $expm1 = __webpack_require__(76);\n\n$export($export.S + $export.F * ($expm1 != Math.expm1), 'Math', { expm1: $expm1 });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5leHBtMS5qcz85ZjNjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsYUFBYSxtQkFBTyxDQUFDLEVBQWU7O0FBRXBDLGlFQUFpRSxnQkFBZ0IiLCJmaWxlIjoiMTc2LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMi4yLjE0IE1hdGguZXhwbTEoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGV4cG0xID0gcmVxdWlyZSgnLi9fbWF0aC1leHBtMScpO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICgkZXhwbTEgIT0gTWF0aC5leHBtMSksICdNYXRoJywgeyBleHBtMTogJGV4cG0xIH0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///176\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.16 Math.fround(x)\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', { fround: __webpack_require__(108) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5mcm91bmQuanM/MDQyZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXOztBQUVqQyw0QkFBNEIsU0FBUyxtQkFBTyxDQUFDLEdBQWdCLEdBQUciLCJmaWxlIjoiMTc3LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMi4yLjE2IE1hdGguZnJvdW5kKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7IGZyb3VuZDogcmVxdWlyZSgnLi9fbWF0aC1mcm91bmQnKSB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///177\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.17 Math.hypot([value1[, value2[, … ]]])\nvar $export = __webpack_require__(0);\nvar abs = Math.abs;\n\n$export($export.S, 'Math', {\n hypot: function hypot(value1, value2) { // eslint-disable-line no-unused-vars\n var sum = 0;\n var i = 0;\n var aLen = arguments.length;\n var larg = 0;\n var arg, div;\n while (i < aLen) {\n arg = abs(arguments[i++]);\n if (larg < arg) {\n div = larg / arg;\n sum = sum * div * div + 1;\n larg = arg;\n } else if (arg > 0) {\n div = arg / larg;\n sum += div * div;\n } else sum += arg;\n }\n return larg === Infinity ? Infinity : larg * Math.sqrt(sum);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5oeXBvdC5qcz9jN2M2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakM7O0FBRUE7QUFDQSx5Q0FBeUM7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTc4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMi4yLjE3IE1hdGguaHlwb3QoW3ZhbHVlMVssIHZhbHVlMlssIOKApiBdXV0pXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGFicyA9IE1hdGguYWJzO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGh5cG90OiBmdW5jdGlvbiBoeXBvdCh2YWx1ZTEsIHZhbHVlMikgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgdmFyIHN1bSA9IDA7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgbGFyZyA9IDA7XG4gICAgdmFyIGFyZywgZGl2O1xuICAgIHdoaWxlIChpIDwgYUxlbikge1xuICAgICAgYXJnID0gYWJzKGFyZ3VtZW50c1tpKytdKTtcbiAgICAgIGlmIChsYXJnIDwgYXJnKSB7XG4gICAgICAgIGRpdiA9IGxhcmcgLyBhcmc7XG4gICAgICAgIHN1bSA9IHN1bSAqIGRpdiAqIGRpdiArIDE7XG4gICAgICAgIGxhcmcgPSBhcmc7XG4gICAgICB9IGVsc2UgaWYgKGFyZyA+IDApIHtcbiAgICAgICAgZGl2ID0gYXJnIC8gbGFyZztcbiAgICAgICAgc3VtICs9IGRpdiAqIGRpdjtcbiAgICAgIH0gZWxzZSBzdW0gKz0gYXJnO1xuICAgIH1cbiAgICByZXR1cm4gbGFyZyA9PT0gSW5maW5pdHkgPyBJbmZpbml0eSA6IGxhcmcgKiBNYXRoLnNxcnQoc3VtKTtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///178\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.18 Math.imul(x, y)\nvar $export = __webpack_require__(0);\nvar $imul = Math.imul;\n\n// some WebKit versions fails with big numbers, some has wrong arity\n$export($export.S + $export.F * __webpack_require__(3)(function () {\n return $imul(0xffffffff, 5) != -5 || $imul.length != 2;\n}), 'Math', {\n imul: function imul(x, y) {\n var UINT16 = 0xffff;\n var xn = +x;\n var yn = +y;\n var xl = UINT16 & xn;\n var yl = UINT16 & yn;\n return 0 | xl * yl + ((UINT16 & xn >>> 16) * yl + xl * (UINT16 & yn >>> 16) << 16 >>> 0);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5pbXVsLmpzP2Y0ZmYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQzs7QUFFQTtBQUNBLGdDQUFnQyxtQkFBTyxDQUFDLENBQVU7QUFDbEQ7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTc5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMi4yLjE4IE1hdGguaW11bCh4LCB5KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkaW11bCA9IE1hdGguaW11bDtcblxuLy8gc29tZSBXZWJLaXQgdmVyc2lvbnMgZmFpbHMgd2l0aCBiaWcgbnVtYmVycywgc29tZSBoYXMgd3JvbmcgYXJpdHlcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAkaW11bCgweGZmZmZmZmZmLCA1KSAhPSAtNSB8fCAkaW11bC5sZW5ndGggIT0gMjtcbn0pLCAnTWF0aCcsIHtcbiAgaW11bDogZnVuY3Rpb24gaW11bCh4LCB5KSB7XG4gICAgdmFyIFVJTlQxNiA9IDB4ZmZmZjtcbiAgICB2YXIgeG4gPSAreDtcbiAgICB2YXIgeW4gPSAreTtcbiAgICB2YXIgeGwgPSBVSU5UMTYgJiB4bjtcbiAgICB2YXIgeWwgPSBVSU5UMTYgJiB5bjtcbiAgICByZXR1cm4gMCB8IHhsICogeWwgKyAoKFVJTlQxNiAmIHhuID4+PiAxNikgKiB5bCArIHhsICogKFVJTlQxNiAmIHluID4+PiAxNikgPDwgMTYgPj4+IDApO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///179\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.21 Math.log10(x)\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', {\n log10: function log10(x) {\n return Math.log(x) * Math.LOG10E;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5sb2cxMC5qcz83ODcyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIxODAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyMC4yLjIuMjEgTWF0aC5sb2cxMCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBsb2cxMDogZnVuY3Rpb24gbG9nMTAoeCkge1xuICAgIHJldHVybiBNYXRoLmxvZyh4KSAqIE1hdGguTE9HMTBFO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///180\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.20 Math.log1p(x)\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', { log1p: __webpack_require__(107) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5sb2cxcC5qcz8wNDlmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDLDRCQUE0QixRQUFRLG1CQUFPLENBQUMsR0FBZSxHQUFHIiwiZmlsZSI6IjE4MS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDIwLjIuMi4yMCBNYXRoLmxvZzFwKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7IGxvZzFwOiByZXF1aXJlKCcuL19tYXRoLWxvZzFwJykgfSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///181\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.22 Math.log2(x)\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', {\n log2: function log2(x) {\n return Math.log(x) / Math.LN2;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5sb2cyLmpzP2E2OWYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVzs7QUFFakM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjE4Mi5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDIwLjIuMi4yMiBNYXRoLmxvZzIoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgbG9nMjogZnVuY3Rpb24gbG9nMih4KSB7XG4gICAgcmV0dXJuIE1hdGgubG9nKHgpIC8gTWF0aC5MTjI7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///182\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.28 Math.sign(x)\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', { sign: __webpack_require__(75) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5zaWduLmpzPzBiMjEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVzs7QUFFakMsNEJBQTRCLE9BQU8sbUJBQU8sQ0FBQyxFQUFjLEdBQUciLCJmaWxlIjoiMTgzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMi4yLjI4IE1hdGguc2lnbih4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywgeyBzaWduOiByZXF1aXJlKCcuL19tYXRoLXNpZ24nKSB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///183\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.30 Math.sinh(x)\nvar $export = __webpack_require__(0);\nvar expm1 = __webpack_require__(76);\nvar exp = Math.exp;\n\n// V8 near Chromium 38 has a problem with very small numbers\n$export($export.S + $export.F * __webpack_require__(3)(function () {\n return !Math.sinh(-2e-17) != -2e-17;\n}), 'Math', {\n sinh: function sinh(x) {\n return Math.abs(x = +x) < 1\n ? (expm1(x) - expm1(-x)) / 2\n : (exp(x - 1) - exp(-x - 1)) * (Math.E / 2);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5zaW5oLmpzPzZjMWEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxZQUFZLG1CQUFPLENBQUMsRUFBZTtBQUNuQzs7QUFFQTtBQUNBLGdDQUFnQyxtQkFBTyxDQUFDLENBQVU7QUFDbEQ7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTg0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMi4yLjMwIE1hdGguc2luaCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBleHBtMSA9IHJlcXVpcmUoJy4vX21hdGgtZXhwbTEnKTtcbnZhciBleHAgPSBNYXRoLmV4cDtcblxuLy8gVjggbmVhciBDaHJvbWl1bSAzOCBoYXMgYSBwcm9ibGVtIHdpdGggdmVyeSBzbWFsbCBudW1iZXJzXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gIU1hdGguc2luaCgtMmUtMTcpICE9IC0yZS0xNztcbn0pLCAnTWF0aCcsIHtcbiAgc2luaDogZnVuY3Rpb24gc2luaCh4KSB7XG4gICAgcmV0dXJuIE1hdGguYWJzKHggPSAreCkgPCAxXG4gICAgICA/IChleHBtMSh4KSAtIGV4cG0xKC14KSkgLyAyXG4gICAgICA6IChleHAoeCAtIDEpIC0gZXhwKC14IC0gMSkpICogKE1hdGguRSAvIDIpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///184\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.33 Math.tanh(x)\nvar $export = __webpack_require__(0);\nvar expm1 = __webpack_require__(76);\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n tanh: function tanh(x) {\n var a = expm1(x = +x);\n var b = expm1(-x);\n return a == Infinity ? 1 : b == Infinity ? -1 : (a - b) / (exp(x) + exp(-x));\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC50YW5oLmpzP2M3YzYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxZQUFZLG1CQUFPLENBQUMsRUFBZTtBQUNuQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjE4NS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDIwLjIuMi4zMyBNYXRoLnRhbmgoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZXhwbTEgPSByZXF1aXJlKCcuL19tYXRoLWV4cG0xJyk7XG52YXIgZXhwID0gTWF0aC5leHA7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgdGFuaDogZnVuY3Rpb24gdGFuaCh4KSB7XG4gICAgdmFyIGEgPSBleHBtMSh4ID0gK3gpO1xuICAgIHZhciBiID0gZXhwbTEoLXgpO1xuICAgIHJldHVybiBhID09IEluZmluaXR5ID8gMSA6IGIgPT0gSW5maW5pdHkgPyAtMSA6IChhIC0gYikgLyAoZXhwKHgpICsgZXhwKC14KSk7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///185\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.34 Math.trunc(x)\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', {\n trunc: function trunc(it) {\n return (it > 0 ? Math.floor : Math.ceil)(it);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC50cnVuYy5qcz84NGI0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIxODYuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyMC4yLjIuMzQgTWF0aC50cnVuYyh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICB0cnVuYzogZnVuY3Rpb24gdHJ1bmMoaXQpIHtcbiAgICByZXR1cm4gKGl0ID4gMCA/IE1hdGguZmxvb3IgOiBNYXRoLmNlaWwpKGl0KTtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///186\n")},function(module,exports,__webpack_require__){eval("var $export = __webpack_require__(0);\nvar toAbsoluteIndex = __webpack_require__(35);\nvar fromCharCode = String.fromCharCode;\nvar $fromCodePoint = String.fromCodePoint;\n\n// length should be 1, old FF problem\n$export($export.S + $export.F * (!!$fromCodePoint && $fromCodePoint.length != 1), 'String', {\n // 21.1.2.2 String.fromCodePoint(...codePoints)\n fromCodePoint: function fromCodePoint(x) { // eslint-disable-line no-unused-vars\n var res = [];\n var aLen = arguments.length;\n var i = 0;\n var code;\n while (aLen > i) {\n code = +arguments[i++];\n if (toAbsoluteIndex(code, 0x10ffff) !== code) throw RangeError(code + ' is not a valid code point');\n res.push(code < 0x10000\n ? fromCharCode(code)\n : fromCharCode(((code -= 0x10000) >> 10) + 0xd800, code % 0x400 + 0xdc00)\n );\n } return res.join('');\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmZyb20tY29kZS1wb2ludC5qcz81Njk1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLHNCQUFzQixtQkFBTyxDQUFDLEVBQXNCO0FBQ3BEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsNENBQTRDO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxDQUFDIiwiZmlsZSI6IjE4Ny5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi9fdG8tYWJzb2x1dGUtaW5kZXgnKTtcbnZhciBmcm9tQ2hhckNvZGUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlO1xudmFyICRmcm9tQ29kZVBvaW50ID0gU3RyaW5nLmZyb21Db2RlUG9pbnQ7XG5cbi8vIGxlbmd0aCBzaG91bGQgYmUgMSwgb2xkIEZGIHByb2JsZW1cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogKCEhJGZyb21Db2RlUG9pbnQgJiYgJGZyb21Db2RlUG9pbnQubGVuZ3RoICE9IDEpLCAnU3RyaW5nJywge1xuICAvLyAyMS4xLjIuMiBTdHJpbmcuZnJvbUNvZGVQb2ludCguLi5jb2RlUG9pbnRzKVxuICBmcm9tQ29kZVBvaW50OiBmdW5jdGlvbiBmcm9tQ29kZVBvaW50KHgpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgIHZhciByZXMgPSBbXTtcbiAgICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBjb2RlO1xuICAgIHdoaWxlIChhTGVuID4gaSkge1xuICAgICAgY29kZSA9ICthcmd1bWVudHNbaSsrXTtcbiAgICAgIGlmICh0b0Fic29sdXRlSW5kZXgoY29kZSwgMHgxMGZmZmYpICE9PSBjb2RlKSB0aHJvdyBSYW5nZUVycm9yKGNvZGUgKyAnIGlzIG5vdCBhIHZhbGlkIGNvZGUgcG9pbnQnKTtcbiAgICAgIHJlcy5wdXNoKGNvZGUgPCAweDEwMDAwXG4gICAgICAgID8gZnJvbUNoYXJDb2RlKGNvZGUpXG4gICAgICAgIDogZnJvbUNoYXJDb2RlKCgoY29kZSAtPSAweDEwMDAwKSA+PiAxMCkgKyAweGQ4MDAsIGNvZGUgJSAweDQwMCArIDB4ZGMwMClcbiAgICAgICk7XG4gICAgfSByZXR1cm4gcmVzLmpvaW4oJycpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///187\n")},function(module,exports,__webpack_require__){eval("var $export = __webpack_require__(0);\nvar toIObject = __webpack_require__(15);\nvar toLength = __webpack_require__(6);\n\n$export($export.S, 'String', {\n // 21.1.2.4 String.raw(callSite, ...substitutions)\n raw: function raw(callSite) {\n var tpl = toIObject(callSite.raw);\n var len = toLength(tpl.length);\n var aLen = arguments.length;\n var res = [];\n var i = 0;\n while (len > i) {\n res.push(String(tpl[i++]));\n if (i < aLen) res.push(String(arguments[i]));\n } return res.join('');\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnJhdy5qcz83ODhkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGdCQUFnQixtQkFBTyxDQUFDLEVBQWU7QUFDdkMsZUFBZSxtQkFBTyxDQUFDLENBQWM7O0FBRXJDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxDQUFDIiwiZmlsZSI6IjE4OC5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnU3RyaW5nJywge1xuICAvLyAyMS4xLjIuNCBTdHJpbmcucmF3KGNhbGxTaXRlLCAuLi5zdWJzdGl0dXRpb25zKVxuICByYXc6IGZ1bmN0aW9uIHJhdyhjYWxsU2l0ZSkge1xuICAgIHZhciB0cGwgPSB0b0lPYmplY3QoY2FsbFNpdGUucmF3KTtcbiAgICB2YXIgbGVuID0gdG9MZW5ndGgodHBsLmxlbmd0aCk7XG4gICAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciByZXMgPSBbXTtcbiAgICB2YXIgaSA9IDA7XG4gICAgd2hpbGUgKGxlbiA+IGkpIHtcbiAgICAgIHJlcy5wdXNoKFN0cmluZyh0cGxbaSsrXSkpO1xuICAgICAgaWYgKGkgPCBhTGVuKSByZXMucHVzaChTdHJpbmcoYXJndW1lbnRzW2ldKSk7XG4gICAgfSByZXR1cm4gcmVzLmpvaW4oJycpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///188\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// 21.1.3.25 String.prototype.trim()\n__webpack_require__(45)('trim', function ($trim) {\n return function trim() {\n return $trim(this, 3);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnRyaW0uanM/NGYzNyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsbUJBQU8sQ0FBQyxFQUFnQjtBQUN4QjtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjE4OS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIDIxLjEuMy4yNSBTdHJpbmcucHJvdG90eXBlLnRyaW0oKVxucmVxdWlyZSgnLi9fc3RyaW5nLXRyaW0nKSgndHJpbScsIGZ1bmN0aW9uICgkdHJpbSkge1xuICByZXR1cm4gZnVuY3Rpb24gdHJpbSgpIHtcbiAgICByZXR1cm4gJHRyaW0odGhpcywgMyk7XG4gIH07XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///189\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $at = __webpack_require__(55)(true);\n\n// 21.1.3.27 String.prototype[@@iterator]()\n__webpack_require__(77)(String, 'String', function (iterated) {\n this._t = String(iterated); // target\n this._i = 0; // next index\n// 21.1.5.2.1 %StringIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var index = this._i;\n var point;\n if (index >= O.length) return { value: undefined, done: true };\n point = $at(O, index);\n this._i += point.length;\n return { value: point, done: false };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLml0ZXJhdG9yLmpzPzVkZjMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixVQUFVLG1CQUFPLENBQUMsRUFBYzs7QUFFaEM7QUFDQSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3hCLDZCQUE2QjtBQUM3QixjQUFjO0FBQ2Q7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDO0FBQ2pDO0FBQ0E7QUFDQSxVQUFVO0FBQ1YsQ0FBQyIsImZpbGUiOiIxOTAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgJGF0ID0gcmVxdWlyZSgnLi9fc3RyaW5nLWF0JykodHJ1ZSk7XG5cbi8vIDIxLjEuMy4yNyBTdHJpbmcucHJvdG90eXBlW0BAaXRlcmF0b3JdKClcbnJlcXVpcmUoJy4vX2l0ZXItZGVmaW5lJykoU3RyaW5nLCAnU3RyaW5nJywgZnVuY3Rpb24gKGl0ZXJhdGVkKSB7XG4gIHRoaXMuX3QgPSBTdHJpbmcoaXRlcmF0ZWQpOyAvLyB0YXJnZXRcbiAgdGhpcy5faSA9IDA7ICAgICAgICAgICAgICAgIC8vIG5leHQgaW5kZXhcbi8vIDIxLjEuNS4yLjEgJVN0cmluZ0l0ZXJhdG9yUHJvdG90eXBlJS5uZXh0KClcbn0sIGZ1bmN0aW9uICgpIHtcbiAgdmFyIE8gPSB0aGlzLl90O1xuICB2YXIgaW5kZXggPSB0aGlzLl9pO1xuICB2YXIgcG9pbnQ7XG4gIGlmIChpbmRleCA+PSBPLmxlbmd0aCkgcmV0dXJuIHsgdmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1ZSB9O1xuICBwb2ludCA9ICRhdChPLCBpbmRleCk7XG4gIHRoaXMuX2kgKz0gcG9pbnQubGVuZ3RoO1xuICByZXR1cm4geyB2YWx1ZTogcG9pbnQsIGRvbmU6IGZhbHNlIH07XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///190\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar $at = __webpack_require__(55)(false);\n$export($export.P, 'String', {\n // 21.1.3.3 String.prototype.codePointAt(pos)\n codePointAt: function codePointAt(pos) {\n return $at(this, pos);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmNvZGUtcG9pbnQtYXQuanM/YTAzMiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLFVBQVUsbUJBQU8sQ0FBQyxFQUFjO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjE5MS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGF0ID0gcmVxdWlyZSgnLi9fc3RyaW5nLWF0JykoZmFsc2UpO1xuJGV4cG9ydCgkZXhwb3J0LlAsICdTdHJpbmcnLCB7XG4gIC8vIDIxLjEuMy4zIFN0cmluZy5wcm90b3R5cGUuY29kZVBvaW50QXQocG9zKVxuICBjb2RlUG9pbnRBdDogZnVuY3Rpb24gY29kZVBvaW50QXQocG9zKSB7XG4gICAgcmV0dXJuICRhdCh0aGlzLCBwb3MpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///191\n")},function(module,exports,__webpack_require__){"use strict";eval("// 21.1.3.6 String.prototype.endsWith(searchString [, endPosition])\n\nvar $export = __webpack_require__(0);\nvar toLength = __webpack_require__(6);\nvar context = __webpack_require__(79);\nvar ENDS_WITH = 'endsWith';\nvar $endsWith = ''[ENDS_WITH];\n\n$export($export.P + $export.F * __webpack_require__(80)(ENDS_WITH), 'String', {\n endsWith: function endsWith(searchString /* , endPosition = @length */) {\n var that = context(this, searchString, ENDS_WITH);\n var endPosition = arguments.length > 1 ? arguments[1] : undefined;\n var len = toLength(that.length);\n var end = endPosition === undefined ? len : Math.min(toLength(endPosition), len);\n var search = String(searchString);\n return $endsWith\n ? $endsWith.call(that, search, end)\n : that.slice(end - search.length, end) === search;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmVuZHMtd2l0aC5qcz9hZWY2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ2E7QUFDYixjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxjQUFjLG1CQUFPLENBQUMsRUFBbUI7QUFDekM7QUFDQTs7QUFFQSxnQ0FBZ0MsbUJBQU8sQ0FBQyxFQUFvQjtBQUM1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTkyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjEuMS4zLjYgU3RyaW5nLnByb3RvdHlwZS5lbmRzV2l0aChzZWFyY2hTdHJpbmcgWywgZW5kUG9zaXRpb25dKVxuJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGNvbnRleHQgPSByZXF1aXJlKCcuL19zdHJpbmctY29udGV4dCcpO1xudmFyIEVORFNfV0lUSCA9ICdlbmRzV2l0aCc7XG52YXIgJGVuZHNXaXRoID0gJydbRU5EU19XSVRIXTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscy1pcy1yZWdleHAnKShFTkRTX1dJVEgpLCAnU3RyaW5nJywge1xuICBlbmRzV2l0aDogZnVuY3Rpb24gZW5kc1dpdGgoc2VhcmNoU3RyaW5nIC8qICwgZW5kUG9zaXRpb24gPSBAbGVuZ3RoICovKSB7XG4gICAgdmFyIHRoYXQgPSBjb250ZXh0KHRoaXMsIHNlYXJjaFN0cmluZywgRU5EU19XSVRIKTtcbiAgICB2YXIgZW5kUG9zaXRpb24gPSBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgbGVuID0gdG9MZW5ndGgodGhhdC5sZW5ndGgpO1xuICAgIHZhciBlbmQgPSBlbmRQb3NpdGlvbiA9PT0gdW5kZWZpbmVkID8gbGVuIDogTWF0aC5taW4odG9MZW5ndGgoZW5kUG9zaXRpb24pLCBsZW4pO1xuICAgIHZhciBzZWFyY2ggPSBTdHJpbmcoc2VhcmNoU3RyaW5nKTtcbiAgICByZXR1cm4gJGVuZHNXaXRoXG4gICAgICA/ICRlbmRzV2l0aC5jYWxsKHRoYXQsIHNlYXJjaCwgZW5kKVxuICAgICAgOiB0aGF0LnNsaWNlKGVuZCAtIHNlYXJjaC5sZW5ndGgsIGVuZCkgPT09IHNlYXJjaDtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///192\n")},function(module,exports,__webpack_require__){"use strict";eval("// 21.1.3.7 String.prototype.includes(searchString, position = 0)\n\nvar $export = __webpack_require__(0);\nvar context = __webpack_require__(79);\nvar INCLUDES = 'includes';\n\n$export($export.P + $export.F * __webpack_require__(80)(INCLUDES), 'String', {\n includes: function includes(searchString /* , position = 0 */) {\n return !!~context(this, searchString, INCLUDES)\n .indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmluY2x1ZGVzLmpzPzJmZGIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDYTtBQUNiLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGNBQWMsbUJBQU8sQ0FBQyxFQUFtQjtBQUN6Qzs7QUFFQSxnQ0FBZ0MsbUJBQU8sQ0FBQyxFQUFvQjtBQUM1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTkzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjEuMS4zLjcgU3RyaW5nLnByb3RvdHlwZS5pbmNsdWRlcyhzZWFyY2hTdHJpbmcsIHBvc2l0aW9uID0gMClcbid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgY29udGV4dCA9IHJlcXVpcmUoJy4vX3N0cmluZy1jb250ZXh0Jyk7XG52YXIgSU5DTFVERVMgPSAnaW5jbHVkZXMnO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzLWlzLXJlZ2V4cCcpKElOQ0xVREVTKSwgJ1N0cmluZycsIHtcbiAgaW5jbHVkZXM6IGZ1bmN0aW9uIGluY2x1ZGVzKHNlYXJjaFN0cmluZyAvKiAsIHBvc2l0aW9uID0gMCAqLykge1xuICAgIHJldHVybiAhIX5jb250ZXh0KHRoaXMsIHNlYXJjaFN0cmluZywgSU5DTFVERVMpXG4gICAgICAuaW5kZXhPZihzZWFyY2hTdHJpbmcsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///193\n")},function(module,exports,__webpack_require__){eval("var $export = __webpack_require__(0);\n\n$export($export.P, 'String', {\n // 21.1.3.13 String.prototype.repeat(count)\n repeat: __webpack_require__(74)\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnJlcGVhdC5qcz8xNGI5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXOztBQUVqQztBQUNBO0FBQ0EsVUFBVSxtQkFBTyxDQUFDLEVBQWtCO0FBQ3BDLENBQUMiLCJmaWxlIjoiMTk0LmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdTdHJpbmcnLCB7XG4gIC8vIDIxLjEuMy4xMyBTdHJpbmcucHJvdG90eXBlLnJlcGVhdChjb3VudClcbiAgcmVwZWF0OiByZXF1aXJlKCcuL19zdHJpbmctcmVwZWF0Jylcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///194\n")},function(module,exports,__webpack_require__){"use strict";eval("// 21.1.3.18 String.prototype.startsWith(searchString [, position ])\n\nvar $export = __webpack_require__(0);\nvar toLength = __webpack_require__(6);\nvar context = __webpack_require__(79);\nvar STARTS_WITH = 'startsWith';\nvar $startsWith = ''[STARTS_WITH];\n\n$export($export.P + $export.F * __webpack_require__(80)(STARTS_WITH), 'String', {\n startsWith: function startsWith(searchString /* , position = 0 */) {\n var that = context(this, searchString, STARTS_WITH);\n var index = toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length));\n var search = String(searchString);\n return $startsWith\n ? $startsWith.call(that, search, index)\n : that.slice(index, index + search.length) === search;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnN0YXJ0cy13aXRoLmpzP2Y1NTkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDYTtBQUNiLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGNBQWMsbUJBQU8sQ0FBQyxFQUFtQjtBQUN6QztBQUNBOztBQUVBLGdDQUFnQyxtQkFBTyxDQUFDLEVBQW9CO0FBQzVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjE5NS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDIxLjEuMy4xOCBTdHJpbmcucHJvdG90eXBlLnN0YXJ0c1dpdGgoc2VhcmNoU3RyaW5nIFssIHBvc2l0aW9uIF0pXG4ndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgY29udGV4dCA9IHJlcXVpcmUoJy4vX3N0cmluZy1jb250ZXh0Jyk7XG52YXIgU1RBUlRTX1dJVEggPSAnc3RhcnRzV2l0aCc7XG52YXIgJHN0YXJ0c1dpdGggPSAnJ1tTVEFSVFNfV0lUSF07XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMtaXMtcmVnZXhwJykoU1RBUlRTX1dJVEgpLCAnU3RyaW5nJywge1xuICBzdGFydHNXaXRoOiBmdW5jdGlvbiBzdGFydHNXaXRoKHNlYXJjaFN0cmluZyAvKiAsIHBvc2l0aW9uID0gMCAqLykge1xuICAgIHZhciB0aGF0ID0gY29udGV4dCh0aGlzLCBzZWFyY2hTdHJpbmcsIFNUQVJUU19XSVRIKTtcbiAgICB2YXIgaW5kZXggPSB0b0xlbmd0aChNYXRoLm1pbihhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCwgdGhhdC5sZW5ndGgpKTtcbiAgICB2YXIgc2VhcmNoID0gU3RyaW5nKHNlYXJjaFN0cmluZyk7XG4gICAgcmV0dXJuICRzdGFydHNXaXRoXG4gICAgICA/ICRzdGFydHNXaXRoLmNhbGwodGhhdCwgc2VhcmNoLCBpbmRleClcbiAgICAgIDogdGhhdC5zbGljZShpbmRleCwgaW5kZXggKyBzZWFyY2gubGVuZ3RoKSA9PT0gc2VhcmNoO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///195\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// B.2.3.2 String.prototype.anchor(name)\n__webpack_require__(13)('anchor', function (createHTML) {\n return function anchor(name) {\n return createHTML(this, 'a', 'name', name);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmFuY2hvci5qcz84NDQ5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTk2LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuMiBTdHJpbmcucHJvdG90eXBlLmFuY2hvcihuYW1lKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnYW5jaG9yJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGFuY2hvcihuYW1lKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ2EnLCAnbmFtZScsIG5hbWUpO1xuICB9O1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///196\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// B.2.3.3 String.prototype.big()\n__webpack_require__(13)('big', function (createHTML) {\n return function big() {\n return createHTML(this, 'big', '', '');\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmJpZy5qcz85Yzg2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTk3LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuMyBTdHJpbmcucHJvdG90eXBlLmJpZygpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdiaWcnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gYmlnKCkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdiaWcnLCAnJywgJycpO1xuICB9O1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///197\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// B.2.3.4 String.prototype.blink()\n__webpack_require__(13)('blink', function (createHTML) {\n return function blink() {\n return createHTML(this, 'blink', '', '');\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmJsaW5rLmpzP2ZhODMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBLG1CQUFPLENBQUMsRUFBZ0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIxOTguanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy40IFN0cmluZy5wcm90b3R5cGUuYmxpbmsoKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnYmxpbmsnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gYmxpbmsoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ2JsaW5rJywgJycsICcnKTtcbiAgfTtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///198\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// B.2.3.5 String.prototype.bold()\n__webpack_require__(13)('bold', function (createHTML) {\n return function bold() {\n return createHTML(this, 'b', '', '');\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmJvbGQuanM/NDhjMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsbUJBQU8sQ0FBQyxFQUFnQjtBQUN4QjtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjE5OS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjUgU3RyaW5nLnByb3RvdHlwZS5ib2xkKClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ2JvbGQnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gYm9sZCgpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnYicsICcnLCAnJyk7XG4gIH07XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///199\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// B.2.3.6 String.prototype.fixed()\n__webpack_require__(13)('fixed', function (createHTML) {\n return function fixed() {\n return createHTML(this, 'tt', '', '');\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmZpeGVkLmpzP2QyNjMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBLG1CQUFPLENBQUMsRUFBZ0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyMDAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy42IFN0cmluZy5wcm90b3R5cGUuZml4ZWQoKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnZml4ZWQnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gZml4ZWQoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ3R0JywgJycsICcnKTtcbiAgfTtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///200\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// B.2.3.7 String.prototype.fontcolor(color)\n__webpack_require__(13)('fontcolor', function (createHTML) {\n return function fontcolor(color) {\n return createHTML(this, 'font', 'color', color);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmZvbnRjb2xvci5qcz82YzM3Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjAxLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuNyBTdHJpbmcucHJvdG90eXBlLmZvbnRjb2xvcihjb2xvcilcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ2ZvbnRjb2xvcicsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBmb250Y29sb3IoY29sb3IpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnZm9udCcsICdjb2xvcicsIGNvbG9yKTtcbiAgfTtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///201\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// B.2.3.8 String.prototype.fontsize(size)\n__webpack_require__(13)('fontsize', function (createHTML) {\n return function fontsize(size) {\n return createHTML(this, 'font', 'size', size);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmZvbnRzaXplLmpzPzllYzgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBLG1CQUFPLENBQUMsRUFBZ0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyMDIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy44IFN0cmluZy5wcm90b3R5cGUuZm9udHNpemUoc2l6ZSlcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ2ZvbnRzaXplJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGZvbnRzaXplKHNpemUpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnZm9udCcsICdzaXplJywgc2l6ZSk7XG4gIH07XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///202\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// B.2.3.9 String.prototype.italics()\n__webpack_require__(13)('italics', function (createHTML) {\n return function italics() {\n return createHTML(this, 'i', '', '');\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLml0YWxpY3MuanM/ZDBiMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsbUJBQU8sQ0FBQyxFQUFnQjtBQUN4QjtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjIwMy5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjkgU3RyaW5nLnByb3RvdHlwZS5pdGFsaWNzKClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ2l0YWxpY3MnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gaXRhbGljcygpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnaScsICcnLCAnJyk7XG4gIH07XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///203\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// B.2.3.10 String.prototype.link(url)\n__webpack_require__(13)('link', function (createHTML) {\n return function link(url) {\n return createHTML(this, 'a', 'href', url);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmxpbmsuanM/YjU0YSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsbUJBQU8sQ0FBQyxFQUFnQjtBQUN4QjtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjIwNC5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjEwIFN0cmluZy5wcm90b3R5cGUubGluayh1cmwpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdsaW5rJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGxpbmsodXJsKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ2EnLCAnaHJlZicsIHVybCk7XG4gIH07XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///204\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// B.2.3.11 String.prototype.small()\n__webpack_require__(13)('small', function (createHTML) {\n return function small() {\n return createHTML(this, 'small', '', '');\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnNtYWxsLmpzP2YzODYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBLG1CQUFPLENBQUMsRUFBZ0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyMDUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy4xMSBTdHJpbmcucHJvdG90eXBlLnNtYWxsKClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ3NtYWxsJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHNtYWxsKCkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdzbWFsbCcsICcnLCAnJyk7XG4gIH07XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///205\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// B.2.3.12 String.prototype.strike()\n__webpack_require__(13)('strike', function (createHTML) {\n return function strike() {\n return createHTML(this, 'strike', '', '');\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnN0cmlrZS5qcz8xNDQ4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjA2LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuMTIgU3RyaW5nLnByb3RvdHlwZS5zdHJpa2UoKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnc3RyaWtlJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHN0cmlrZSgpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnc3RyaWtlJywgJycsICcnKTtcbiAgfTtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///206\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// B.2.3.13 String.prototype.sub()\n__webpack_require__(13)('sub', function (createHTML) {\n return function sub() {\n return createHTML(this, 'sub', '', '');\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnN1Yi5qcz82NzNlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjA3LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuMTMgU3RyaW5nLnByb3RvdHlwZS5zdWIoKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnc3ViJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHN1YigpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnc3ViJywgJycsICcnKTtcbiAgfTtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///207\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// B.2.3.14 String.prototype.sup()\n__webpack_require__(13)('sup', function (createHTML) {\n return function sup() {\n return createHTML(this, 'sup', '', '');\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnN1cC5qcz8yNDJhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjA4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuMTQgU3RyaW5nLnByb3RvdHlwZS5zdXAoKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnc3VwJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHN1cCgpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnc3VwJywgJycsICcnKTtcbiAgfTtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///208\n")},function(module,exports,__webpack_require__){eval("// 20.3.3.1 / 15.9.4.4 Date.now()\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Date', { now: function () { return new Date().getTime(); } });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZGF0ZS5ub3cuanM/NzhjZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXOztBQUVqQyw0QkFBNEIsbUJBQW1CLDZCQUE2QixFQUFFLEVBQUUiLCJmaWxlIjoiMjA5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMy4zLjEgLyAxNS45LjQuNCBEYXRlLm5vdygpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ0RhdGUnLCB7IG5vdzogZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IERhdGUoKS5nZXRUaW1lKCk7IH0gfSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///209\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar toObject = __webpack_require__(9);\nvar toPrimitive = __webpack_require__(23);\n\n$export($export.P + $export.F * __webpack_require__(3)(function () {\n return new Date(NaN).toJSON() !== null\n || Date.prototype.toJSON.call({ toISOString: function () { return 1; } }) !== 1;\n}), 'Date', {\n // eslint-disable-next-line no-unused-vars\n toJSON: function toJSON(key) {\n var O = toObject(this);\n var pv = toPrimitive(O);\n return typeof pv == 'number' && !isFinite(pv) ? null : O.toISOString();\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZGF0ZS50by1qc29uLmpzPzAyOTgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxrQkFBa0IsbUJBQU8sQ0FBQyxFQUFpQjs7QUFFM0MsZ0NBQWdDLG1CQUFPLENBQUMsQ0FBVTtBQUNsRDtBQUNBLG1DQUFtQywyQkFBMkIsVUFBVSxFQUFFLEVBQUU7QUFDNUUsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjEwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBuZXcgRGF0ZShOYU4pLnRvSlNPTigpICE9PSBudWxsXG4gICAgfHwgRGF0ZS5wcm90b3R5cGUudG9KU09OLmNhbGwoeyB0b0lTT1N0cmluZzogZnVuY3Rpb24gKCkgeyByZXR1cm4gMTsgfSB9KSAhPT0gMTtcbn0pLCAnRGF0ZScsIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gIHRvSlNPTjogZnVuY3Rpb24gdG9KU09OKGtleSkge1xuICAgIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gICAgdmFyIHB2ID0gdG9QcmltaXRpdmUoTyk7XG4gICAgcmV0dXJuIHR5cGVvZiBwdiA9PSAnbnVtYmVyJyAmJiAhaXNGaW5pdGUocHYpID8gbnVsbCA6IE8udG9JU09TdHJpbmcoKTtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///210\n")},function(module,exports,__webpack_require__){eval("// 20.3.4.36 / 15.9.5.43 Date.prototype.toISOString()\nvar $export = __webpack_require__(0);\nvar toISOString = __webpack_require__(212);\n\n// PhantomJS / old WebKit has a broken implementations\n$export($export.P + $export.F * (Date.prototype.toISOString !== toISOString), 'Date', {\n toISOString: toISOString\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZGF0ZS50by1pc28tc3RyaW5nLmpzPzhlYTUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxrQkFBa0IsbUJBQU8sQ0FBQyxHQUF1Qjs7QUFFakQ7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyMTEuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyMC4zLjQuMzYgLyAxNS45LjUuNDMgRGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmcoKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b0lTT1N0cmluZyA9IHJlcXVpcmUoJy4vX2RhdGUtdG8taXNvLXN0cmluZycpO1xuXG4vLyBQaGFudG9tSlMgLyBvbGQgV2ViS2l0IGhhcyBhIGJyb2tlbiBpbXBsZW1lbnRhdGlvbnNcbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKERhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nICE9PSB0b0lTT1N0cmluZyksICdEYXRlJywge1xuICB0b0lTT1N0cmluZzogdG9JU09TdHJpbmdcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///211\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// 20.3.4.36 / 15.9.5.43 Date.prototype.toISOString()\nvar fails = __webpack_require__(3);\nvar getTime = Date.prototype.getTime;\nvar $toISOString = Date.prototype.toISOString;\n\nvar lz = function (num) {\n return num > 9 ? num : '0' + num;\n};\n\n// PhantomJS / old WebKit has a broken implementations\nmodule.exports = (fails(function () {\n return $toISOString.call(new Date(-5e13 - 1)) != '0385-07-25T07:06:39.999Z';\n}) || !fails(function () {\n $toISOString.call(new Date(NaN));\n})) ? function toISOString() {\n if (!isFinite(getTime.call(this))) throw RangeError('Invalid time value');\n var d = this;\n var y = d.getUTCFullYear();\n var m = d.getUTCMilliseconds();\n var s = y < 0 ? '-' : y > 9999 ? '+' : '';\n return s + ('00000' + Math.abs(y)).slice(s ? -6 : -4) +\n '-' + lz(d.getUTCMonth() + 1) + '-' + lz(d.getUTCDate()) +\n 'T' + lz(d.getUTCHours()) + ':' + lz(d.getUTCMinutes()) +\n ':' + lz(d.getUTCSeconds()) + '.' + (m > 99 ? m : '0' + lz(m)) + 'Z';\n} : $toISOString;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZGF0ZS10by1pc28tc3RyaW5nLmpzPzhlZDAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBLFlBQVksbUJBQU8sQ0FBQyxDQUFVO0FBQzlCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjIxMi5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIDIwLjMuNC4zNiAvIDE1LjkuNS40MyBEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZygpXG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIGdldFRpbWUgPSBEYXRlLnByb3RvdHlwZS5nZXRUaW1lO1xudmFyICR0b0lTT1N0cmluZyA9IERhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nO1xuXG52YXIgbHogPSBmdW5jdGlvbiAobnVtKSB7XG4gIHJldHVybiBudW0gPiA5ID8gbnVtIDogJzAnICsgbnVtO1xufTtcblxuLy8gUGhhbnRvbUpTIC8gb2xkIFdlYktpdCBoYXMgYSBicm9rZW4gaW1wbGVtZW50YXRpb25zXG5tb2R1bGUuZXhwb3J0cyA9IChmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAkdG9JU09TdHJpbmcuY2FsbChuZXcgRGF0ZSgtNWUxMyAtIDEpKSAhPSAnMDM4NS0wNy0yNVQwNzowNjozOS45OTlaJztcbn0pIHx8ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICR0b0lTT1N0cmluZy5jYWxsKG5ldyBEYXRlKE5hTikpO1xufSkpID8gZnVuY3Rpb24gdG9JU09TdHJpbmcoKSB7XG4gIGlmICghaXNGaW5pdGUoZ2V0VGltZS5jYWxsKHRoaXMpKSkgdGhyb3cgUmFuZ2VFcnJvcignSW52YWxpZCB0aW1lIHZhbHVlJyk7XG4gIHZhciBkID0gdGhpcztcbiAgdmFyIHkgPSBkLmdldFVUQ0Z1bGxZZWFyKCk7XG4gIHZhciBtID0gZC5nZXRVVENNaWxsaXNlY29uZHMoKTtcbiAgdmFyIHMgPSB5IDwgMCA/ICctJyA6IHkgPiA5OTk5ID8gJysnIDogJyc7XG4gIHJldHVybiBzICsgKCcwMDAwMCcgKyBNYXRoLmFicyh5KSkuc2xpY2UocyA/IC02IDogLTQpICtcbiAgICAnLScgKyBseihkLmdldFVUQ01vbnRoKCkgKyAxKSArICctJyArIGx6KGQuZ2V0VVRDRGF0ZSgpKSArXG4gICAgJ1QnICsgbHooZC5nZXRVVENIb3VycygpKSArICc6JyArIGx6KGQuZ2V0VVRDTWludXRlcygpKSArXG4gICAgJzonICsgbHooZC5nZXRVVENTZWNvbmRzKCkpICsgJy4nICsgKG0gPiA5OSA/IG0gOiAnMCcgKyBseihtKSkgKyAnWic7XG59IDogJHRvSVNPU3RyaW5nO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///212\n")},function(module,exports,__webpack_require__){eval("var DateProto = Date.prototype;\nvar INVALID_DATE = 'Invalid Date';\nvar TO_STRING = 'toString';\nvar $toString = DateProto[TO_STRING];\nvar getTime = DateProto.getTime;\nif (new Date(NaN) + '' != INVALID_DATE) {\n __webpack_require__(12)(DateProto, TO_STRING, function toString() {\n var value = getTime.call(this);\n // eslint-disable-next-line no-self-compare\n return value === value ? $toString.call(this) : INVALID_DATE;\n });\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZGF0ZS50by1zdHJpbmcuanM/ODdiMyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLG1CQUFPLENBQUMsRUFBYTtBQUN2QjtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0giLCJmaWxlIjoiMjEzLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIERhdGVQcm90byA9IERhdGUucHJvdG90eXBlO1xudmFyIElOVkFMSURfREFURSA9ICdJbnZhbGlkIERhdGUnO1xudmFyIFRPX1NUUklORyA9ICd0b1N0cmluZyc7XG52YXIgJHRvU3RyaW5nID0gRGF0ZVByb3RvW1RPX1NUUklOR107XG52YXIgZ2V0VGltZSA9IERhdGVQcm90by5nZXRUaW1lO1xuaWYgKG5ldyBEYXRlKE5hTikgKyAnJyAhPSBJTlZBTElEX0RBVEUpIHtcbiAgcmVxdWlyZSgnLi9fcmVkZWZpbmUnKShEYXRlUHJvdG8sIFRPX1NUUklORywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgdmFyIHZhbHVlID0gZ2V0VGltZS5jYWxsKHRoaXMpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICByZXR1cm4gdmFsdWUgPT09IHZhbHVlID8gJHRvU3RyaW5nLmNhbGwodGhpcykgOiBJTlZBTElEX0RBVEU7XG4gIH0pO1xufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///213\n")},function(module,exports,__webpack_require__){eval("var TO_PRIMITIVE = __webpack_require__(5)('toPrimitive');\nvar proto = Date.prototype;\n\nif (!(TO_PRIMITIVE in proto)) __webpack_require__(11)(proto, TO_PRIMITIVE, __webpack_require__(215));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZGF0ZS50by1wcmltaXRpdmUuanM/YzhjZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxtQkFBbUIsbUJBQU8sQ0FBQyxDQUFRO0FBQ25DOztBQUVBLDhCQUE4QixtQkFBTyxDQUFDLEVBQVMsdUJBQXVCLG1CQUFPLENBQUMsR0FBc0IiLCJmaWxlIjoiMjE0LmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIFRPX1BSSU1JVElWRSA9IHJlcXVpcmUoJy4vX3drcycpKCd0b1ByaW1pdGl2ZScpO1xudmFyIHByb3RvID0gRGF0ZS5wcm90b3R5cGU7XG5cbmlmICghKFRPX1BSSU1JVElWRSBpbiBwcm90bykpIHJlcXVpcmUoJy4vX2hpZGUnKShwcm90bywgVE9fUFJJTUlUSVZFLCByZXF1aXJlKCcuL19kYXRlLXRvLXByaW1pdGl2ZScpKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///214\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar anObject = __webpack_require__(1);\nvar toPrimitive = __webpack_require__(23);\nvar NUMBER = 'number';\n\nmodule.exports = function (hint) {\n if (hint !== 'string' && hint !== NUMBER && hint !== 'default') throw TypeError('Incorrect hint');\n return toPrimitive(anObject(this), hint != NUMBER);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZGF0ZS10by1wcmltaXRpdmUuanM/ODM4MSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGtCQUFrQixtQkFBTyxDQUFDLEVBQWlCO0FBQzNDOztBQUVBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjIxNS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG52YXIgTlVNQkVSID0gJ251bWJlcic7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGhpbnQpIHtcbiAgaWYgKGhpbnQgIT09ICdzdHJpbmcnICYmIGhpbnQgIT09IE5VTUJFUiAmJiBoaW50ICE9PSAnZGVmYXVsdCcpIHRocm93IFR5cGVFcnJvcignSW5jb3JyZWN0IGhpbnQnKTtcbiAgcmV0dXJuIHRvUHJpbWl0aXZlKGFuT2JqZWN0KHRoaXMpLCBoaW50ICE9IE5VTUJFUik7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///215\n")},function(module,exports,__webpack_require__){eval("// 22.1.2.2 / 15.4.3.2 Array.isArray(arg)\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Array', { isArray: __webpack_require__(54) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuaXMtYXJyYXkuanM/MmNhZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXOztBQUVqQyw2QkFBNkIsVUFBVSxtQkFBTyxDQUFDLEVBQWEsR0FBRyIsImZpbGUiOiIyMTYuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyMi4xLjIuMiAvIDE1LjQuMy4yIEFycmF5LmlzQXJyYXkoYXJnKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdBcnJheScsIHsgaXNBcnJheTogcmVxdWlyZSgnLi9faXMtYXJyYXknKSB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///216\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar ctx = __webpack_require__(19);\nvar $export = __webpack_require__(0);\nvar toObject = __webpack_require__(9);\nvar call = __webpack_require__(109);\nvar isArrayIter = __webpack_require__(81);\nvar toLength = __webpack_require__(6);\nvar createProperty = __webpack_require__(82);\nvar getIterFn = __webpack_require__(83);\n\n$export($export.S + $export.F * !__webpack_require__(57)(function (iter) { Array.from(iter); }), 'Array', {\n // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)\n from: function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n var O = toObject(arrayLike);\n var C = typeof this == 'function' ? this : Array;\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var index = 0;\n var iterFn = getIterFn(O);\n var length, result, step, iterator;\n if (mapping) mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);\n // if object isn't iterable or it's array with default iterator - use simple case\n if (iterFn != undefined && !(C == Array && isArrayIter(iterFn))) {\n for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) {\n createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);\n }\n } else {\n length = toLength(O.length);\n for (result = new C(length); length > index; index++) {\n createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);\n }\n }\n result.length = index;\n return result;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZnJvbS5qcz8xYzRjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsVUFBVSxtQkFBTyxDQUFDLEVBQVE7QUFDMUIsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsV0FBVyxtQkFBTyxDQUFDLEdBQWM7QUFDakMsa0JBQWtCLG1CQUFPLENBQUMsRUFBa0I7QUFDNUMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMscUJBQXFCLG1CQUFPLENBQUMsRUFBb0I7QUFDakQsZ0JBQWdCLG1CQUFPLENBQUMsRUFBNEI7O0FBRXBELGlDQUFpQyxtQkFBTyxDQUFDLEVBQWdCLG1CQUFtQixrQkFBa0IsRUFBRTtBQUNoRztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVEQUF1RCxnQ0FBZ0M7QUFDdkY7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLGtDQUFrQyxnQkFBZ0I7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyMTcuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4vX2l0ZXItY2FsbCcpO1xudmFyIGlzQXJyYXlJdGVyID0gcmVxdWlyZSgnLi9faXMtYXJyYXktaXRlcicpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSByZXF1aXJlKCcuL19jcmVhdGUtcHJvcGVydHknKTtcbnZhciBnZXRJdGVyRm4gPSByZXF1aXJlKCcuL2NvcmUuZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19pdGVyLWRldGVjdCcpKGZ1bmN0aW9uIChpdGVyKSB7IEFycmF5LmZyb20oaXRlcik7IH0pLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMi4xIEFycmF5LmZyb20oYXJyYXlMaWtlLCBtYXBmbiA9IHVuZGVmaW5lZCwgdGhpc0FyZyA9IHVuZGVmaW5lZClcbiAgZnJvbTogZnVuY3Rpb24gZnJvbShhcnJheUxpa2UgLyogLCBtYXBmbiA9IHVuZGVmaW5lZCwgdGhpc0FyZyA9IHVuZGVmaW5lZCAqLykge1xuICAgIHZhciBPID0gdG9PYmplY3QoYXJyYXlMaWtlKTtcbiAgICB2YXIgQyA9IHR5cGVvZiB0aGlzID09ICdmdW5jdGlvbicgPyB0aGlzIDogQXJyYXk7XG4gICAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBtYXBmbiA9IGFMZW4gPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkO1xuICAgIHZhciBtYXBwaW5nID0gbWFwZm4gIT09IHVuZGVmaW5lZDtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciBpdGVyRm4gPSBnZXRJdGVyRm4oTyk7XG4gICAgdmFyIGxlbmd0aCwgcmVzdWx0LCBzdGVwLCBpdGVyYXRvcjtcbiAgICBpZiAobWFwcGluZykgbWFwZm4gPSBjdHgobWFwZm4sIGFMZW4gPiAyID8gYXJndW1lbnRzWzJdIDogdW5kZWZpbmVkLCAyKTtcbiAgICAvLyBpZiBvYmplY3QgaXNuJ3QgaXRlcmFibGUgb3IgaXQncyBhcnJheSB3aXRoIGRlZmF1bHQgaXRlcmF0b3IgLSB1c2Ugc2ltcGxlIGNhc2VcbiAgICBpZiAoaXRlckZuICE9IHVuZGVmaW5lZCAmJiAhKEMgPT0gQXJyYXkgJiYgaXNBcnJheUl0ZXIoaXRlckZuKSkpIHtcbiAgICAgIGZvciAoaXRlcmF0b3IgPSBpdGVyRm4uY2FsbChPKSwgcmVzdWx0ID0gbmV3IEMoKTsgIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lOyBpbmRleCsrKSB7XG4gICAgICAgIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwgaW5kZXgsIG1hcHBpbmcgPyBjYWxsKGl0ZXJhdG9yLCBtYXBmbiwgW3N0ZXAudmFsdWUsIGluZGV4XSwgdHJ1ZSkgOiBzdGVwLnZhbHVlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICAgICAgZm9yIChyZXN1bHQgPSBuZXcgQyhsZW5ndGgpOyBsZW5ndGggPiBpbmRleDsgaW5kZXgrKykge1xuICAgICAgICBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIGluZGV4LCBtYXBwaW5nID8gbWFwZm4oT1tpbmRleF0sIGluZGV4KSA6IE9baW5kZXhdKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmVzdWx0Lmxlbmd0aCA9IGluZGV4O1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///217\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar createProperty = __webpack_require__(82);\n\n// WebKit Array.of isn't generic\n$export($export.S + $export.F * __webpack_require__(3)(function () {\n function F() { /* empty */ }\n return !(Array.of.call(F) instanceof F);\n}), 'Array', {\n // 22.1.2.3 Array.of( ...items)\n of: function of(/* ...args */) {\n var index = 0;\n var aLen = arguments.length;\n var result = new (typeof this == 'function' ? this : Array)(aLen);\n while (aLen > index) createProperty(result, index, arguments[index++]);\n result.length = aLen;\n return result;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkub2YuanM/ZTgwNCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLHFCQUFxQixtQkFBTyxDQUFDLEVBQW9COztBQUVqRDtBQUNBLGdDQUFnQyxtQkFBTyxDQUFDLENBQVU7QUFDbEQsZ0JBQWdCO0FBQ2hCO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjE4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX2NyZWF0ZS1wcm9wZXJ0eScpO1xuXG4vLyBXZWJLaXQgQXJyYXkub2YgaXNuJ3QgZ2VuZXJpY1xuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gRigpIHsgLyogZW1wdHkgKi8gfVxuICByZXR1cm4gIShBcnJheS5vZi5jYWxsKEYpIGluc3RhbmNlb2YgRik7XG59KSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjIuMyBBcnJheS5vZiggLi4uaXRlbXMpXG4gIG9mOiBmdW5jdGlvbiBvZigvKiAuLi5hcmdzICovKSB7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIHJlc3VsdCA9IG5ldyAodHlwZW9mIHRoaXMgPT0gJ2Z1bmN0aW9uJyA/IHRoaXMgOiBBcnJheSkoYUxlbik7XG4gICAgd2hpbGUgKGFMZW4gPiBpbmRleCkgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBpbmRleCwgYXJndW1lbnRzW2luZGV4KytdKTtcbiAgICByZXN1bHQubGVuZ3RoID0gYUxlbjtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///218\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// 22.1.3.13 Array.prototype.join(separator)\nvar $export = __webpack_require__(0);\nvar toIObject = __webpack_require__(15);\nvar arrayJoin = [].join;\n\n// fallback for not array-like strings\n$export($export.P + $export.F * (__webpack_require__(48) != Object || !__webpack_require__(22)(arrayJoin)), 'Array', {\n join: function join(separator) {\n return arrayJoin.call(toIObject(this), separator === undefined ? ',' : separator);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuam9pbi5qcz8zNzNmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDOztBQUVBO0FBQ0EsaUNBQWlDLG1CQUFPLENBQUMsRUFBWSxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFrQjtBQUMvRjtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjIxOS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIDIyLjEuMy4xMyBBcnJheS5wcm90b3R5cGUuam9pbihzZXBhcmF0b3IpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciBhcnJheUpvaW4gPSBbXS5qb2luO1xuXG4vLyBmYWxsYmFjayBmb3Igbm90IGFycmF5LWxpa2Ugc3RyaW5nc1xuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAocmVxdWlyZSgnLi9faW9iamVjdCcpICE9IE9iamVjdCB8fCAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKGFycmF5Sm9pbikpLCAnQXJyYXknLCB7XG4gIGpvaW46IGZ1bmN0aW9uIGpvaW4oc2VwYXJhdG9yKSB7XG4gICAgcmV0dXJuIGFycmF5Sm9pbi5jYWxsKHRvSU9iamVjdCh0aGlzKSwgc2VwYXJhdG9yID09PSB1bmRlZmluZWQgPyAnLCcgOiBzZXBhcmF0b3IpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///219\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar html = __webpack_require__(70);\nvar cof = __webpack_require__(20);\nvar toAbsoluteIndex = __webpack_require__(35);\nvar toLength = __webpack_require__(6);\nvar arraySlice = [].slice;\n\n// fallback for not array-like ES3 strings and DOM objects\n$export($export.P + $export.F * __webpack_require__(3)(function () {\n if (html) arraySlice.call(html);\n}), 'Array', {\n slice: function slice(begin, end) {\n var len = toLength(this.length);\n var klass = cof(this);\n end = end === undefined ? len : end;\n if (klass == 'Array') return arraySlice.call(this, begin, end);\n var start = toAbsoluteIndex(begin, len);\n var upTo = toAbsoluteIndex(end, len);\n var size = toLength(upTo - start);\n var cloned = new Array(size);\n var i = 0;\n for (; i < size; i++) cloned[i] = klass == 'String'\n ? this.charAt(start + i)\n : this[start + i];\n return cloned;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuc2xpY2UuanM/MjNiZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLFdBQVcsbUJBQU8sQ0FBQyxFQUFTO0FBQzVCLFVBQVUsbUJBQU8sQ0FBQyxFQUFRO0FBQzFCLHNCQUFzQixtQkFBTyxDQUFDLEVBQXNCO0FBQ3BELGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDOztBQUVBO0FBQ0EsZ0NBQWdDLG1CQUFPLENBQUMsQ0FBVTtBQUNsRDtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsVUFBVTtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjIwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBodG1sID0gcmVxdWlyZSgnLi9faHRtbCcpO1xudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4vX3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBhcnJheVNsaWNlID0gW10uc2xpY2U7XG5cbi8vIGZhbGxiYWNrIGZvciBub3QgYXJyYXktbGlrZSBFUzMgc3RyaW5ncyBhbmQgRE9NIG9iamVjdHNcbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIGlmIChodG1sKSBhcnJheVNsaWNlLmNhbGwoaHRtbCk7XG59KSwgJ0FycmF5Jywge1xuICBzbGljZTogZnVuY3Rpb24gc2xpY2UoYmVnaW4sIGVuZCkge1xuICAgIHZhciBsZW4gPSB0b0xlbmd0aCh0aGlzLmxlbmd0aCk7XG4gICAgdmFyIGtsYXNzID0gY29mKHRoaXMpO1xuICAgIGVuZCA9IGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuIDogZW5kO1xuICAgIGlmIChrbGFzcyA9PSAnQXJyYXknKSByZXR1cm4gYXJyYXlTbGljZS5jYWxsKHRoaXMsIGJlZ2luLCBlbmQpO1xuICAgIHZhciBzdGFydCA9IHRvQWJzb2x1dGVJbmRleChiZWdpbiwgbGVuKTtcbiAgICB2YXIgdXBUbyA9IHRvQWJzb2x1dGVJbmRleChlbmQsIGxlbik7XG4gICAgdmFyIHNpemUgPSB0b0xlbmd0aCh1cFRvIC0gc3RhcnQpO1xuICAgIHZhciBjbG9uZWQgPSBuZXcgQXJyYXkoc2l6ZSk7XG4gICAgdmFyIGkgPSAwO1xuICAgIGZvciAoOyBpIDwgc2l6ZTsgaSsrKSBjbG9uZWRbaV0gPSBrbGFzcyA9PSAnU3RyaW5nJ1xuICAgICAgPyB0aGlzLmNoYXJBdChzdGFydCArIGkpXG4gICAgICA6IHRoaXNbc3RhcnQgKyBpXTtcbiAgICByZXR1cm4gY2xvbmVkO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///220\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar aFunction = __webpack_require__(10);\nvar toObject = __webpack_require__(9);\nvar fails = __webpack_require__(3);\nvar $sort = [].sort;\nvar test = [1, 2, 3];\n\n$export($export.P + $export.F * (fails(function () {\n // IE8-\n test.sort(undefined);\n}) || !fails(function () {\n // V8 bug\n test.sort(null);\n // Old WebKit\n}) || !__webpack_require__(22)($sort)), 'Array', {\n // 22.1.3.25 Array.prototype.sort(comparefn)\n sort: function sort(comparefn) {\n return comparefn === undefined\n ? $sort.call(toObject(this))\n : $sort.call(toObject(this), aFunction(comparefn));\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuc29ydC5qcz81NWRkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2QyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxZQUFZLG1CQUFPLENBQUMsQ0FBVTtBQUM5QjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQSxDQUFDLE1BQU0sbUJBQU8sQ0FBQyxFQUFrQjtBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjIyMS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyICRzb3J0ID0gW10uc29ydDtcbnZhciB0ZXN0ID0gWzEsIDIsIDNdO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIChmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIElFOC1cbiAgdGVzdC5zb3J0KHVuZGVmaW5lZCk7XG59KSB8fCAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBWOCBidWdcbiAgdGVzdC5zb3J0KG51bGwpO1xuICAvLyBPbGQgV2ViS2l0XG59KSB8fCAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKCRzb3J0KSksICdBcnJheScsIHtcbiAgLy8gMjIuMS4zLjI1IEFycmF5LnByb3RvdHlwZS5zb3J0KGNvbXBhcmVmbilcbiAgc29ydDogZnVuY3Rpb24gc29ydChjb21wYXJlZm4pIHtcbiAgICByZXR1cm4gY29tcGFyZWZuID09PSB1bmRlZmluZWRcbiAgICAgID8gJHNvcnQuY2FsbCh0b09iamVjdCh0aGlzKSlcbiAgICAgIDogJHNvcnQuY2FsbCh0b09iamVjdCh0aGlzKSwgYUZ1bmN0aW9uKGNvbXBhcmVmbikpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///221\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar $forEach = __webpack_require__(26)(0);\nvar STRICT = __webpack_require__(22)([].forEach, true);\n\n$export($export.P + $export.F * !STRICT, 'Array', {\n // 22.1.3.10 / 15.4.4.18 Array.prototype.forEach(callbackfn [, thisArg])\n forEach: function forEach(callbackfn /* , thisArg */) {\n return $forEach(this, callbackfn, arguments[1]);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZm9yLWVhY2guanM/ZjNlMiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyxFQUFrQjtBQUN6QyxhQUFhLG1CQUFPLENBQUMsRUFBa0I7O0FBRXZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjIyMi5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGZvckVhY2ggPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJykoMCk7XG52YXIgU1RSSUNUID0gcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKFtdLmZvckVhY2gsIHRydWUpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFTVFJJQ1QsICdBcnJheScsIHtcbiAgLy8gMjIuMS4zLjEwIC8gMTUuNC40LjE4IEFycmF5LnByb3RvdHlwZS5mb3JFYWNoKGNhbGxiYWNrZm4gWywgdGhpc0FyZ10pXG4gIGZvckVhY2g6IGZ1bmN0aW9uIGZvckVhY2goY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJGZvckVhY2godGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzWzFdKTtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///222\n")},function(module,exports,__webpack_require__){eval("var isObject = __webpack_require__(4);\nvar isArray = __webpack_require__(54);\nvar SPECIES = __webpack_require__(5)('species');\n\nmodule.exports = function (original) {\n var C;\n if (isArray(original)) {\n C = original.constructor;\n // cross-realm fallback\n if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;\n if (isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n } return C === undefined ? Array : C;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktc3BlY2llcy1jb25zdHJ1Y3Rvci5qcz9lODUzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGNBQWMsbUJBQU8sQ0FBQyxFQUFhO0FBQ25DLGNBQWMsbUJBQU8sQ0FBQyxDQUFROztBQUU5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCIsImZpbGUiOiIyMjMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi9faXMtYXJyYXknKTtcbnZhciBTUEVDSUVTID0gcmVxdWlyZSgnLi9fd2tzJykoJ3NwZWNpZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3JpZ2luYWwpIHtcbiAgdmFyIEM7XG4gIGlmIChpc0FycmF5KG9yaWdpbmFsKSkge1xuICAgIEMgPSBvcmlnaW5hbC5jb25zdHJ1Y3RvcjtcbiAgICAvLyBjcm9zcy1yZWFsbSBmYWxsYmFja1xuICAgIGlmICh0eXBlb2YgQyA9PSAnZnVuY3Rpb24nICYmIChDID09PSBBcnJheSB8fCBpc0FycmF5KEMucHJvdG90eXBlKSkpIEMgPSB1bmRlZmluZWQ7XG4gICAgaWYgKGlzT2JqZWN0KEMpKSB7XG4gICAgICBDID0gQ1tTUEVDSUVTXTtcbiAgICAgIGlmIChDID09PSBudWxsKSBDID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfSByZXR1cm4gQyA9PT0gdW5kZWZpbmVkID8gQXJyYXkgOiBDO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///223\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar $map = __webpack_require__(26)(1);\n\n$export($export.P + $export.F * !__webpack_require__(22)([].map, true), 'Array', {\n // 22.1.3.15 / 15.4.4.19 Array.prototype.map(callbackfn [, thisArg])\n map: function map(callbackfn /* , thisArg */) {\n return $map(this, callbackfn, arguments[1]);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkubWFwLmpzPzZkNjciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxXQUFXLG1CQUFPLENBQUMsRUFBa0I7O0FBRXJDLGlDQUFpQyxtQkFBTyxDQUFDLEVBQWtCO0FBQzNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyMjQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRtYXAgPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJykoMSk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogIXJlcXVpcmUoJy4vX3N0cmljdC1tZXRob2QnKShbXS5tYXAsIHRydWUpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy4xNSAvIDE1LjQuNC4xOSBBcnJheS5wcm90b3R5cGUubWFwKGNhbGxiYWNrZm4gWywgdGhpc0FyZ10pXG4gIG1hcDogZnVuY3Rpb24gbWFwKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgcmV0dXJuICRtYXAodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzWzFdKTtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///224\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar $filter = __webpack_require__(26)(2);\n\n$export($export.P + $export.F * !__webpack_require__(22)([].filter, true), 'Array', {\n // 22.1.3.7 / 15.4.4.20 Array.prototype.filter(callbackfn [, thisArg])\n filter: function filter(callbackfn /* , thisArg */) {\n return $filter(this, callbackfn, arguments[1]);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZmlsdGVyLmpzP2QyNWYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxjQUFjLG1CQUFPLENBQUMsRUFBa0I7O0FBRXhDLGlDQUFpQyxtQkFBTyxDQUFDLEVBQWtCO0FBQzNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyMjUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRmaWx0ZXIgPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJykoMik7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogIXJlcXVpcmUoJy4vX3N0cmljdC1tZXRob2QnKShbXS5maWx0ZXIsIHRydWUpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy43IC8gMTUuNC40LjIwIEFycmF5LnByb3RvdHlwZS5maWx0ZXIoY2FsbGJhY2tmbiBbLCB0aGlzQXJnXSlcbiAgZmlsdGVyOiBmdW5jdGlvbiBmaWx0ZXIoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJGZpbHRlcih0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHNbMV0pO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///225\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar $some = __webpack_require__(26)(3);\n\n$export($export.P + $export.F * !__webpack_require__(22)([].some, true), 'Array', {\n // 22.1.3.23 / 15.4.4.17 Array.prototype.some(callbackfn [, thisArg])\n some: function some(callbackfn /* , thisArg */) {\n return $some(this, callbackfn, arguments[1]);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuc29tZS5qcz83NTlmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsWUFBWSxtQkFBTyxDQUFDLEVBQWtCOztBQUV0QyxpQ0FBaUMsbUJBQU8sQ0FBQyxFQUFrQjtBQUMzRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjI2LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkc29tZSA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKSgzKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKFtdLnNvbWUsIHRydWUpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy4yMyAvIDE1LjQuNC4xNyBBcnJheS5wcm90b3R5cGUuc29tZShjYWxsYmFja2ZuIFssIHRoaXNBcmddKVxuICBzb21lOiBmdW5jdGlvbiBzb21lKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgcmV0dXJuICRzb21lKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50c1sxXSk7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///226\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar $every = __webpack_require__(26)(4);\n\n$export($export.P + $export.F * !__webpack_require__(22)([].every, true), 'Array', {\n // 22.1.3.5 / 15.4.4.16 Array.prototype.every(callbackfn [, thisArg])\n every: function every(callbackfn /* , thisArg */) {\n return $every(this, callbackfn, arguments[1]);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZXZlcnkuanM/NjA5NSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGFBQWEsbUJBQU8sQ0FBQyxFQUFrQjs7QUFFdkMsaUNBQWlDLG1CQUFPLENBQUMsRUFBa0I7QUFDM0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjIyNy5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGV2ZXJ5ID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpKDQpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoW10uZXZlcnksIHRydWUpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy41IC8gMTUuNC40LjE2IEFycmF5LnByb3RvdHlwZS5ldmVyeShjYWxsYmFja2ZuIFssIHRoaXNBcmddKVxuICBldmVyeTogZnVuY3Rpb24gZXZlcnkoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJGV2ZXJ5KHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50c1sxXSk7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///227\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar $reduce = __webpack_require__(110);\n\n$export($export.P + $export.F * !__webpack_require__(22)([].reduce, true), 'Array', {\n // 22.1.3.18 / 15.4.4.21 Array.prototype.reduce(callbackfn [, initialValue])\n reduce: function reduce(callbackfn /* , initialValue */) {\n return $reduce(this, callbackfn, arguments.length, arguments[1], false);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkucmVkdWNlLmpzPzBjZDgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxjQUFjLG1CQUFPLENBQUMsR0FBaUI7O0FBRXZDLGlDQUFpQyxtQkFBTyxDQUFDLEVBQWtCO0FBQzNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyMjguanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRyZWR1Y2UgPSByZXF1aXJlKCcuL19hcnJheS1yZWR1Y2UnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKFtdLnJlZHVjZSwgdHJ1ZSksICdBcnJheScsIHtcbiAgLy8gMjIuMS4zLjE4IC8gMTUuNC40LjIxIEFycmF5LnByb3RvdHlwZS5yZWR1Y2UoY2FsbGJhY2tmbiBbLCBpbml0aWFsVmFsdWVdKVxuICByZWR1Y2U6IGZ1bmN0aW9uIHJlZHVjZShjYWxsYmFja2ZuIC8qICwgaW5pdGlhbFZhbHVlICovKSB7XG4gICAgcmV0dXJuICRyZWR1Y2UodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCwgYXJndW1lbnRzWzFdLCBmYWxzZSk7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///228\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar $reduce = __webpack_require__(110);\n\n$export($export.P + $export.F * !__webpack_require__(22)([].reduceRight, true), 'Array', {\n // 22.1.3.19 / 15.4.4.22 Array.prototype.reduceRight(callbackfn [, initialValue])\n reduceRight: function reduceRight(callbackfn /* , initialValue */) {\n return $reduce(this, callbackfn, arguments.length, arguments[1], true);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkucmVkdWNlLXJpZ2h0LmpzPzQ4ZjgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxjQUFjLG1CQUFPLENBQUMsR0FBaUI7O0FBRXZDLGlDQUFpQyxtQkFBTyxDQUFDLEVBQWtCO0FBQzNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyMjkuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRyZWR1Y2UgPSByZXF1aXJlKCcuL19hcnJheS1yZWR1Y2UnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKFtdLnJlZHVjZVJpZ2h0LCB0cnVlKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMTkgLyAxNS40LjQuMjIgQXJyYXkucHJvdG90eXBlLnJlZHVjZVJpZ2h0KGNhbGxiYWNrZm4gWywgaW5pdGlhbFZhbHVlXSlcbiAgcmVkdWNlUmlnaHQ6IGZ1bmN0aW9uIHJlZHVjZVJpZ2h0KGNhbGxiYWNrZm4gLyogLCBpbml0aWFsVmFsdWUgKi8pIHtcbiAgICByZXR1cm4gJHJlZHVjZSh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoLCBhcmd1bWVudHNbMV0sIHRydWUpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///229\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar $indexOf = __webpack_require__(52)(false);\nvar $native = [].indexOf;\nvar NEGATIVE_ZERO = !!$native && 1 / [1].indexOf(1, -0) < 0;\n\n$export($export.P + $export.F * (NEGATIVE_ZERO || !__webpack_require__(22)($native)), 'Array', {\n // 22.1.3.11 / 15.4.4.14 Array.prototype.indexOf(searchElement [, fromIndex])\n indexOf: function indexOf(searchElement /* , fromIndex = 0 */) {\n return NEGATIVE_ZERO\n // convert -0 to +0\n ? $native.apply(this, arguments) || 0\n : $indexOf(this, searchElement, arguments[1]);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuaW5kZXgtb2YuanM/NTdlNyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyxFQUFtQjtBQUMxQztBQUNBOztBQUVBLG1EQUFtRCxtQkFBTyxDQUFDLEVBQWtCO0FBQzdFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyMzAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRpbmRleE9mID0gcmVxdWlyZSgnLi9fYXJyYXktaW5jbHVkZXMnKShmYWxzZSk7XG52YXIgJG5hdGl2ZSA9IFtdLmluZGV4T2Y7XG52YXIgTkVHQVRJVkVfWkVSTyA9ICEhJG5hdGl2ZSAmJiAxIC8gWzFdLmluZGV4T2YoMSwgLTApIDwgMDtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoTkVHQVRJVkVfWkVSTyB8fCAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKCRuYXRpdmUpKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMTEgLyAxNS40LjQuMTQgQXJyYXkucHJvdG90eXBlLmluZGV4T2Yoc2VhcmNoRWxlbWVudCBbLCBmcm9tSW5kZXhdKVxuICBpbmRleE9mOiBmdW5jdGlvbiBpbmRleE9mKHNlYXJjaEVsZW1lbnQgLyogLCBmcm9tSW5kZXggPSAwICovKSB7XG4gICAgcmV0dXJuIE5FR0FUSVZFX1pFUk9cbiAgICAgIC8vIGNvbnZlcnQgLTAgdG8gKzBcbiAgICAgID8gJG5hdGl2ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IDBcbiAgICAgIDogJGluZGV4T2YodGhpcywgc2VhcmNoRWxlbWVudCwgYXJndW1lbnRzWzFdKTtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///230\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar toIObject = __webpack_require__(15);\nvar toInteger = __webpack_require__(21);\nvar toLength = __webpack_require__(6);\nvar $native = [].lastIndexOf;\nvar NEGATIVE_ZERO = !!$native && 1 / [1].lastIndexOf(1, -0) < 0;\n\n$export($export.P + $export.F * (NEGATIVE_ZERO || !__webpack_require__(22)($native)), 'Array', {\n // 22.1.3.14 / 15.4.4.15 Array.prototype.lastIndexOf(searchElement [, fromIndex])\n lastIndexOf: function lastIndexOf(searchElement /* , fromIndex = @[*-1] */) {\n // convert -0 to +0\n if (NEGATIVE_ZERO) return $native.apply(this, arguments) || 0;\n var O = toIObject(this);\n var length = toLength(O.length);\n var index = length - 1;\n if (arguments.length > 1) index = Math.min(index, toInteger(arguments[1]));\n if (index < 0) index = length + index;\n for (;index >= 0; index--) if (index in O) if (O[index] === searchElement) return index || 0;\n return -1;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkubGFzdC1pbmRleC1vZi5qcz85ODY1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2QyxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDO0FBQ0E7O0FBRUEsbURBQW1ELG1CQUFPLENBQUMsRUFBa0I7QUFDN0U7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVSxXQUFXO0FBQ3JCO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjIzMS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyICRuYXRpdmUgPSBbXS5sYXN0SW5kZXhPZjtcbnZhciBORUdBVElWRV9aRVJPID0gISEkbmF0aXZlICYmIDEgLyBbMV0ubGFzdEluZGV4T2YoMSwgLTApIDwgMDtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoTkVHQVRJVkVfWkVSTyB8fCAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKCRuYXRpdmUpKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMTQgLyAxNS40LjQuMTUgQXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mKHNlYXJjaEVsZW1lbnQgWywgZnJvbUluZGV4XSlcbiAgbGFzdEluZGV4T2Y6IGZ1bmN0aW9uIGxhc3RJbmRleE9mKHNlYXJjaEVsZW1lbnQgLyogLCBmcm9tSW5kZXggPSBAWyotMV0gKi8pIHtcbiAgICAvLyBjb252ZXJ0IC0wIHRvICswXG4gICAgaWYgKE5FR0FUSVZFX1pFUk8pIHJldHVybiAkbmF0aXZlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgMDtcbiAgICB2YXIgTyA9IHRvSU9iamVjdCh0aGlzKTtcbiAgICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICAgIHZhciBpbmRleCA9IGxlbmd0aCAtIDE7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSBpbmRleCA9IE1hdGgubWluKGluZGV4LCB0b0ludGVnZXIoYXJndW1lbnRzWzFdKSk7XG4gICAgaWYgKGluZGV4IDwgMCkgaW5kZXggPSBsZW5ndGggKyBpbmRleDtcbiAgICBmb3IgKDtpbmRleCA+PSAwOyBpbmRleC0tKSBpZiAoaW5kZXggaW4gTykgaWYgKE9baW5kZXhdID09PSBzZWFyY2hFbGVtZW50KSByZXR1cm4gaW5kZXggfHwgMDtcbiAgICByZXR1cm4gLTE7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///231\n")},function(module,exports,__webpack_require__){eval("// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\nvar $export = __webpack_require__(0);\n\n$export($export.P, 'Array', { copyWithin: __webpack_require__(111) });\n\n__webpack_require__(31)('copyWithin');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuY29weS13aXRoaW4uanM/NzQ0ZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXOztBQUVqQyw2QkFBNkIsYUFBYSxtQkFBTyxDQUFDLEdBQXNCLEdBQUc7O0FBRTNFLG1CQUFPLENBQUMsRUFBdUIiLCJmaWxlIjoiMjMyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjIuMS4zLjMgQXJyYXkucHJvdG90eXBlLmNvcHlXaXRoaW4odGFyZ2V0LCBzdGFydCwgZW5kID0gdGhpcy5sZW5ndGgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCwgJ0FycmF5JywgeyBjb3B5V2l0aGluOiByZXF1aXJlKCcuL19hcnJheS1jb3B5LXdpdGhpbicpIH0pO1xuXG5yZXF1aXJlKCcuL19hZGQtdG8tdW5zY29wYWJsZXMnKSgnY29weVdpdGhpbicpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///232\n")},function(module,exports,__webpack_require__){eval("// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\nvar $export = __webpack_require__(0);\n\n$export($export.P, 'Array', { fill: __webpack_require__(85) });\n\n__webpack_require__(31)('fill');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZmlsbC5qcz82YzdiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDLDZCQUE2QixPQUFPLG1CQUFPLENBQUMsRUFBZSxHQUFHOztBQUU5RCxtQkFBTyxDQUFDLEVBQXVCIiwiZmlsZSI6IjIzMy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDIyLjEuMy42IEFycmF5LnByb3RvdHlwZS5maWxsKHZhbHVlLCBzdGFydCA9IDAsIGVuZCA9IHRoaXMubGVuZ3RoKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdBcnJheScsIHsgZmlsbDogcmVxdWlyZSgnLi9fYXJyYXktZmlsbCcpIH0pO1xuXG5yZXF1aXJlKCcuL19hZGQtdG8tdW5zY29wYWJsZXMnKSgnZmlsbCcpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///233\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// 22.1.3.8 Array.prototype.find(predicate, thisArg = undefined)\nvar $export = __webpack_require__(0);\nvar $find = __webpack_require__(26)(5);\nvar KEY = 'find';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n find: function find(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n__webpack_require__(31)(KEY);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZmluZC5qcz83NTE0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxZQUFZLG1CQUFPLENBQUMsRUFBa0I7QUFDdEM7QUFDQTtBQUNBO0FBQ0EsMENBQTBDLGdCQUFnQixFQUFFO0FBQzVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELG1CQUFPLENBQUMsRUFBdUIiLCJmaWxlIjoiMjM0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gMjIuMS4zLjggQXJyYXkucHJvdG90eXBlLmZpbmQocHJlZGljYXRlLCB0aGlzQXJnID0gdW5kZWZpbmVkKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkZmluZCA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKSg1KTtcbnZhciBLRVkgPSAnZmluZCc7XG52YXIgZm9yY2VkID0gdHJ1ZTtcbi8vIFNob3VsZG4ndCBza2lwIGhvbGVzXG5pZiAoS0VZIGluIFtdKSBBcnJheSgxKVtLRVldKGZ1bmN0aW9uICgpIHsgZm9yY2VkID0gZmFsc2U7IH0pO1xuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiBmb3JjZWQsICdBcnJheScsIHtcbiAgZmluZDogZnVuY3Rpb24gZmluZChjYWxsYmFja2ZuIC8qICwgdGhhdCA9IHVuZGVmaW5lZCAqLykge1xuICAgIHJldHVybiAkZmluZCh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xucmVxdWlyZSgnLi9fYWRkLXRvLXVuc2NvcGFibGVzJykoS0VZKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///234\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// 22.1.3.9 Array.prototype.findIndex(predicate, thisArg = undefined)\nvar $export = __webpack_require__(0);\nvar $find = __webpack_require__(26)(6);\nvar KEY = 'findIndex';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n findIndex: function findIndex(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n__webpack_require__(31)(KEY);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZmluZC1pbmRleC5qcz8yMGQ2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxZQUFZLG1CQUFPLENBQUMsRUFBa0I7QUFDdEM7QUFDQTtBQUNBO0FBQ0EsMENBQTBDLGdCQUFnQixFQUFFO0FBQzVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELG1CQUFPLENBQUMsRUFBdUIiLCJmaWxlIjoiMjM1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gMjIuMS4zLjkgQXJyYXkucHJvdG90eXBlLmZpbmRJbmRleChwcmVkaWNhdGUsIHRoaXNBcmcgPSB1bmRlZmluZWQpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRmaW5kID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpKDYpO1xudmFyIEtFWSA9ICdmaW5kSW5kZXgnO1xudmFyIGZvcmNlZCA9IHRydWU7XG4vLyBTaG91bGRuJ3Qgc2tpcCBob2xlc1xuaWYgKEtFWSBpbiBbXSkgQXJyYXkoMSlbS0VZXShmdW5jdGlvbiAoKSB7IGZvcmNlZCA9IGZhbHNlOyB9KTtcbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogZm9yY2VkLCAnQXJyYXknLCB7XG4gIGZpbmRJbmRleDogZnVuY3Rpb24gZmluZEluZGV4KGNhbGxiYWNrZm4gLyogLCB0aGF0ID0gdW5kZWZpbmVkICovKSB7XG4gICAgcmV0dXJuICRmaW5kKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG5yZXF1aXJlKCcuL19hZGQtdG8tdW5zY29wYWJsZXMnKShLRVkpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///235\n")},function(module,exports,__webpack_require__){eval("__webpack_require__(38)('Array');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuc3BlY2llcy5qcz9kMDRmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLG1CQUFPLENBQUMsRUFBZ0IiLCJmaWxlIjoiMjM2LmpzIiwic291cmNlc0NvbnRlbnQiOlsicmVxdWlyZSgnLi9fc2V0LXNwZWNpZXMnKSgnQXJyYXknKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///236\n")},function(module,exports,__webpack_require__){eval("var global = __webpack_require__(2);\nvar inheritIfRequired = __webpack_require__(73);\nvar dP = __webpack_require__(8).f;\nvar gOPN = __webpack_require__(37).f;\nvar isRegExp = __webpack_require__(56);\nvar $flags = __webpack_require__(50);\nvar $RegExp = global.RegExp;\nvar Base = $RegExp;\nvar proto = $RegExp.prototype;\nvar re1 = /a/g;\nvar re2 = /a/g;\n// \"new\" creates a new object, old webkit buggy here\nvar CORRECT_NEW = new $RegExp(re1) !== re1;\n\nif (__webpack_require__(7) && (!CORRECT_NEW || __webpack_require__(3)(function () {\n re2[__webpack_require__(5)('match')] = false;\n // RegExp constructor can alter flags and IsRegExp works correct with @@match\n return $RegExp(re1) != re1 || $RegExp(re2) == re2 || $RegExp(re1, 'i') != '/a/i';\n}))) {\n $RegExp = function RegExp(p, f) {\n var tiRE = this instanceof $RegExp;\n var piRE = isRegExp(p);\n var fiU = f === undefined;\n return !tiRE && piRE && p.constructor === $RegExp && fiU ? p\n : inheritIfRequired(CORRECT_NEW\n ? new Base(piRE && !fiU ? p.source : p, f)\n : Base((piRE = p instanceof $RegExp) ? p.source : p, piRE && fiU ? $flags.call(p) : f)\n , tiRE ? this : proto, $RegExp);\n };\n var proxy = function (key) {\n key in $RegExp || dP($RegExp, key, {\n configurable: true,\n get: function () { return Base[key]; },\n set: function (it) { Base[key] = it; }\n });\n };\n for (var keys = gOPN(Base), i = 0; keys.length > i;) proxy(keys[i++]);\n proto.constructor = $RegExp;\n $RegExp.prototype = proto;\n __webpack_require__(12)(global, 'RegExp', $RegExp);\n}\n\n__webpack_require__(38)('RegExp');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLmNvbnN0cnVjdG9yLmpzPzNiMmIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsYUFBYSxtQkFBTyxDQUFDLENBQVc7QUFDaEMsd0JBQXdCLG1CQUFPLENBQUMsRUFBd0I7QUFDeEQsU0FBUyxtQkFBTyxDQUFDLENBQWM7QUFDL0IsV0FBVyxtQkFBTyxDQUFDLEVBQWdCO0FBQ25DLGVBQWUsbUJBQU8sQ0FBQyxFQUFjO0FBQ3JDLGFBQWEsbUJBQU8sQ0FBQyxFQUFVO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLElBQUksbUJBQU8sQ0FBQyxDQUFnQixzQkFBc0IsbUJBQU8sQ0FBQyxDQUFVO0FBQ3BFLE1BQU0sbUJBQU8sQ0FBQyxDQUFRO0FBQ3RCO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0Isa0JBQWtCLEVBQUU7QUFDNUMsMEJBQTBCLGdCQUFnQjtBQUMxQyxLQUFLO0FBQ0w7QUFDQSxvQ0FBb0MsaUJBQWlCO0FBQ3JEO0FBQ0E7QUFDQSxFQUFFLG1CQUFPLENBQUMsRUFBYTtBQUN2Qjs7QUFFQSxtQkFBTyxDQUFDLEVBQWdCIiwiZmlsZSI6IjIzNy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBpbmhlcml0SWZSZXF1aXJlZCA9IHJlcXVpcmUoJy4vX2luaGVyaXQtaWYtcmVxdWlyZWQnKTtcbnZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgZ09QTiA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJykuZjtcbnZhciBpc1JlZ0V4cCA9IHJlcXVpcmUoJy4vX2lzLXJlZ2V4cCcpO1xudmFyICRmbGFncyA9IHJlcXVpcmUoJy4vX2ZsYWdzJyk7XG52YXIgJFJlZ0V4cCA9IGdsb2JhbC5SZWdFeHA7XG52YXIgQmFzZSA9ICRSZWdFeHA7XG52YXIgcHJvdG8gPSAkUmVnRXhwLnByb3RvdHlwZTtcbnZhciByZTEgPSAvYS9nO1xudmFyIHJlMiA9IC9hL2c7XG4vLyBcIm5ld1wiIGNyZWF0ZXMgYSBuZXcgb2JqZWN0LCBvbGQgd2Via2l0IGJ1Z2d5IGhlcmVcbnZhciBDT1JSRUNUX05FVyA9IG5ldyAkUmVnRXhwKHJlMSkgIT09IHJlMTtcblxuaWYgKHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgKCFDT1JSRUNUX05FVyB8fCByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgcmUyW3JlcXVpcmUoJy4vX3drcycpKCdtYXRjaCcpXSA9IGZhbHNlO1xuICAvLyBSZWdFeHAgY29uc3RydWN0b3IgY2FuIGFsdGVyIGZsYWdzIGFuZCBJc1JlZ0V4cCB3b3JrcyBjb3JyZWN0IHdpdGggQEBtYXRjaFxuICByZXR1cm4gJFJlZ0V4cChyZTEpICE9IHJlMSB8fCAkUmVnRXhwKHJlMikgPT0gcmUyIHx8ICRSZWdFeHAocmUxLCAnaScpICE9ICcvYS9pJztcbn0pKSkge1xuICAkUmVnRXhwID0gZnVuY3Rpb24gUmVnRXhwKHAsIGYpIHtcbiAgICB2YXIgdGlSRSA9IHRoaXMgaW5zdGFuY2VvZiAkUmVnRXhwO1xuICAgIHZhciBwaVJFID0gaXNSZWdFeHAocCk7XG4gICAgdmFyIGZpVSA9IGYgPT09IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gIXRpUkUgJiYgcGlSRSAmJiBwLmNvbnN0cnVjdG9yID09PSAkUmVnRXhwICYmIGZpVSA/IHBcbiAgICAgIDogaW5oZXJpdElmUmVxdWlyZWQoQ09SUkVDVF9ORVdcbiAgICAgICAgPyBuZXcgQmFzZShwaVJFICYmICFmaVUgPyBwLnNvdXJjZSA6IHAsIGYpXG4gICAgICAgIDogQmFzZSgocGlSRSA9IHAgaW5zdGFuY2VvZiAkUmVnRXhwKSA/IHAuc291cmNlIDogcCwgcGlSRSAmJiBmaVUgPyAkZmxhZ3MuY2FsbChwKSA6IGYpXG4gICAgICAsIHRpUkUgPyB0aGlzIDogcHJvdG8sICRSZWdFeHApO1xuICB9O1xuICB2YXIgcHJveHkgPSBmdW5jdGlvbiAoa2V5KSB7XG4gICAga2V5IGluICRSZWdFeHAgfHwgZFAoJFJlZ0V4cCwga2V5LCB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIEJhc2Vba2V5XTsgfSxcbiAgICAgIHNldDogZnVuY3Rpb24gKGl0KSB7IEJhc2Vba2V5XSA9IGl0OyB9XG4gICAgfSk7XG4gIH07XG4gIGZvciAodmFyIGtleXMgPSBnT1BOKEJhc2UpLCBpID0gMDsga2V5cy5sZW5ndGggPiBpOykgcHJveHkoa2V5c1tpKytdKTtcbiAgcHJvdG8uY29uc3RydWN0b3IgPSAkUmVnRXhwO1xuICAkUmVnRXhwLnByb3RvdHlwZSA9IHByb3RvO1xuICByZXF1aXJlKCcuL19yZWRlZmluZScpKGdsb2JhbCwgJ1JlZ0V4cCcsICRSZWdFeHApO1xufVxuXG5yZXF1aXJlKCcuL19zZXQtc3BlY2llcycpKCdSZWdFeHAnKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///237\n")},function(module,exports,__webpack_require__){"use strict";eval("\n__webpack_require__(114);\nvar anObject = __webpack_require__(1);\nvar $flags = __webpack_require__(50);\nvar DESCRIPTORS = __webpack_require__(7);\nvar TO_STRING = 'toString';\nvar $toString = /./[TO_STRING];\n\nvar define = function (fn) {\n __webpack_require__(12)(RegExp.prototype, TO_STRING, fn, true);\n};\n\n// 21.2.5.14 RegExp.prototype.toString()\nif (__webpack_require__(3)(function () { return $toString.call({ source: 'a', flags: 'b' }) != '/a/b'; })) {\n define(function toString() {\n var R = anObject(this);\n return '/'.concat(R.source, '/',\n 'flags' in R ? R.flags : !DESCRIPTORS && R instanceof RegExp ? $flags.call(R) : undefined);\n });\n// FF44- RegExp#toString has a wrong name\n} else if ($toString.name != TO_STRING) {\n define(function toString() {\n return $toString.call(this);\n });\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLnRvLXN0cmluZy5qcz82YjU0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsbUJBQU8sQ0FBQyxHQUFvQjtBQUM1QixlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxhQUFhLG1CQUFPLENBQUMsRUFBVTtBQUMvQixrQkFBa0IsbUJBQU8sQ0FBQyxDQUFnQjtBQUMxQztBQUNBOztBQUVBO0FBQ0EsRUFBRSxtQkFBTyxDQUFDLEVBQWE7QUFDdkI7O0FBRUE7QUFDQSxJQUFJLG1CQUFPLENBQUMsQ0FBVSxlQUFlLHdCQUF3QiwwQkFBMEIsWUFBWSxFQUFFO0FBQ3JHO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxHQUFHO0FBQ0giLCJmaWxlIjoiMjM4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi9lczYucmVnZXhwLmZsYWdzJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciAkZmxhZ3MgPSByZXF1aXJlKCcuL19mbGFncycpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKTtcbnZhciBUT19TVFJJTkcgPSAndG9TdHJpbmcnO1xudmFyICR0b1N0cmluZyA9IC8uL1tUT19TVFJJTkddO1xuXG52YXIgZGVmaW5lID0gZnVuY3Rpb24gKGZuKSB7XG4gIHJlcXVpcmUoJy4vX3JlZGVmaW5lJykoUmVnRXhwLnByb3RvdHlwZSwgVE9fU1RSSU5HLCBmbiwgdHJ1ZSk7XG59O1xuXG4vLyAyMS4yLjUuMTQgUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZygpXG5pZiAocmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7IHJldHVybiAkdG9TdHJpbmcuY2FsbCh7IHNvdXJjZTogJ2EnLCBmbGFnczogJ2InIH0pICE9ICcvYS9iJzsgfSkpIHtcbiAgZGVmaW5lKGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHZhciBSID0gYW5PYmplY3QodGhpcyk7XG4gICAgcmV0dXJuICcvJy5jb25jYXQoUi5zb3VyY2UsICcvJyxcbiAgICAgICdmbGFncycgaW4gUiA/IFIuZmxhZ3MgOiAhREVTQ1JJUFRPUlMgJiYgUiBpbnN0YW5jZW9mIFJlZ0V4cCA/ICRmbGFncy5jYWxsKFIpIDogdW5kZWZpbmVkKTtcbiAgfSk7XG4vLyBGRjQ0LSBSZWdFeHAjdG9TdHJpbmcgaGFzIGEgd3JvbmcgbmFtZVxufSBlbHNlIGlmICgkdG9TdHJpbmcubmFtZSAhPSBUT19TVFJJTkcpIHtcbiAgZGVmaW5lKGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiAkdG9TdHJpbmcuY2FsbCh0aGlzKTtcbiAgfSk7XG59XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///238\n")},function(module,exports,__webpack_require__){"use strict";eval("\n\nvar anObject = __webpack_require__(1);\nvar toLength = __webpack_require__(6);\nvar advanceStringIndex = __webpack_require__(88);\nvar regExpExec = __webpack_require__(58);\n\n// @@match logic\n__webpack_require__(59)('match', 1, function (defined, MATCH, $match, maybeCallNative) {\n return [\n // `String.prototype.match` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.match\n function match(regexp) {\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[MATCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[MATCH](String(O));\n },\n // `RegExp.prototype[@@match]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@match\n function (regexp) {\n var res = maybeCallNative($match, regexp, this);\n if (res.done) return res.value;\n var rx = anObject(regexp);\n var S = String(this);\n if (!rx.global) return regExpExec(rx, S);\n var fullUnicode = rx.unicode;\n rx.lastIndex = 0;\n var A = [];\n var n = 0;\n var result;\n while ((result = regExpExec(rx, S)) !== null) {\n var matchStr = String(result[0]);\n A[n] = matchStr;\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n n++;\n }\n return n === 0 ? null : A;\n }\n ];\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLm1hdGNoLmpzPzQ5MTciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWIsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMseUJBQXlCLG1CQUFPLENBQUMsRUFBeUI7QUFDMUQsaUJBQWlCLG1CQUFPLENBQUMsRUFBeUI7O0FBRWxEO0FBQ0EsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyMzkuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgYWR2YW5jZVN0cmluZ0luZGV4ID0gcmVxdWlyZSgnLi9fYWR2YW5jZS1zdHJpbmctaW5kZXgnKTtcbnZhciByZWdFeHBFeGVjID0gcmVxdWlyZSgnLi9fcmVnZXhwLWV4ZWMtYWJzdHJhY3QnKTtcblxuLy8gQEBtYXRjaCBsb2dpY1xucmVxdWlyZSgnLi9fZml4LXJlLXdrcycpKCdtYXRjaCcsIDEsIGZ1bmN0aW9uIChkZWZpbmVkLCBNQVRDSCwgJG1hdGNoLCBtYXliZUNhbGxOYXRpdmUpIHtcbiAgcmV0dXJuIFtcbiAgICAvLyBgU3RyaW5nLnByb3RvdHlwZS5tYXRjaGAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5tYXRjaFxuICAgIGZ1bmN0aW9uIG1hdGNoKHJlZ2V4cCkge1xuICAgICAgdmFyIE8gPSBkZWZpbmVkKHRoaXMpO1xuICAgICAgdmFyIGZuID0gcmVnZXhwID09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHJlZ2V4cFtNQVRDSF07XG4gICAgICByZXR1cm4gZm4gIT09IHVuZGVmaW5lZCA/IGZuLmNhbGwocmVnZXhwLCBPKSA6IG5ldyBSZWdFeHAocmVnZXhwKVtNQVRDSF0oU3RyaW5nKE8pKTtcbiAgICB9LFxuICAgIC8vIGBSZWdFeHAucHJvdG90eXBlW0BAbWF0Y2hdYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1yZWdleHAucHJvdG90eXBlLUBAbWF0Y2hcbiAgICBmdW5jdGlvbiAocmVnZXhwKSB7XG4gICAgICB2YXIgcmVzID0gbWF5YmVDYWxsTmF0aXZlKCRtYXRjaCwgcmVnZXhwLCB0aGlzKTtcbiAgICAgIGlmIChyZXMuZG9uZSkgcmV0dXJuIHJlcy52YWx1ZTtcbiAgICAgIHZhciByeCA9IGFuT2JqZWN0KHJlZ2V4cCk7XG4gICAgICB2YXIgUyA9IFN0cmluZyh0aGlzKTtcbiAgICAgIGlmICghcnguZ2xvYmFsKSByZXR1cm4gcmVnRXhwRXhlYyhyeCwgUyk7XG4gICAgICB2YXIgZnVsbFVuaWNvZGUgPSByeC51bmljb2RlO1xuICAgICAgcngubGFzdEluZGV4ID0gMDtcbiAgICAgIHZhciBBID0gW107XG4gICAgICB2YXIgbiA9IDA7XG4gICAgICB2YXIgcmVzdWx0O1xuICAgICAgd2hpbGUgKChyZXN1bHQgPSByZWdFeHBFeGVjKHJ4LCBTKSkgIT09IG51bGwpIHtcbiAgICAgICAgdmFyIG1hdGNoU3RyID0gU3RyaW5nKHJlc3VsdFswXSk7XG4gICAgICAgIEFbbl0gPSBtYXRjaFN0cjtcbiAgICAgICAgaWYgKG1hdGNoU3RyID09PSAnJykgcngubGFzdEluZGV4ID0gYWR2YW5jZVN0cmluZ0luZGV4KFMsIHRvTGVuZ3RoKHJ4Lmxhc3RJbmRleCksIGZ1bGxVbmljb2RlKTtcbiAgICAgICAgbisrO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG4gPT09IDAgPyBudWxsIDogQTtcbiAgICB9XG4gIF07XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///239\n")},function(module,exports,__webpack_require__){"use strict";eval("\n\nvar anObject = __webpack_require__(1);\nvar toObject = __webpack_require__(9);\nvar toLength = __webpack_require__(6);\nvar toInteger = __webpack_require__(21);\nvar advanceStringIndex = __webpack_require__(88);\nvar regExpExec = __webpack_require__(58);\nvar max = Math.max;\nvar min = Math.min;\nvar floor = Math.floor;\nvar SUBSTITUTION_SYMBOLS = /\\$([$&`']|\\d\\d?|<[^>]*>)/g;\nvar SUBSTITUTION_SYMBOLS_NO_NAMED = /\\$([$&`']|\\d\\d?)/g;\n\nvar maybeToString = function (it) {\n return it === undefined ? it : String(it);\n};\n\n// @@replace logic\n__webpack_require__(59)('replace', 2, function (defined, REPLACE, $replace, maybeCallNative) {\n return [\n // `String.prototype.replace` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.replace\n function replace(searchValue, replaceValue) {\n var O = defined(this);\n var fn = searchValue == undefined ? undefined : searchValue[REPLACE];\n return fn !== undefined\n ? fn.call(searchValue, O, replaceValue)\n : $replace.call(String(O), searchValue, replaceValue);\n },\n // `RegExp.prototype[@@replace]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@replace\n function (regexp, replaceValue) {\n var res = maybeCallNative($replace, regexp, this, replaceValue);\n if (res.done) return res.value;\n\n var rx = anObject(regexp);\n var S = String(this);\n var functionalReplace = typeof replaceValue === 'function';\n if (!functionalReplace) replaceValue = String(replaceValue);\n var global = rx.global;\n if (global) {\n var fullUnicode = rx.unicode;\n rx.lastIndex = 0;\n }\n var results = [];\n while (true) {\n var result = regExpExec(rx, S);\n if (result === null) break;\n results.push(result);\n if (!global) break;\n var matchStr = String(result[0]);\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n }\n var accumulatedResult = '';\n var nextSourcePosition = 0;\n for (var i = 0; i < results.length; i++) {\n result = results[i];\n var matched = String(result[0]);\n var position = max(min(toInteger(result.index), S.length), 0);\n var captures = [];\n // NOTE: This is equivalent to\n // captures = result.slice(1).map(maybeToString)\n // but for some reason `nativeSlice.call(result, 1, result.length)` (called in\n // the slice polyfill when slicing native arrays) \"doesn't work\" in safari 9 and\n // causes a crash (https://pastebin.com/N21QzeQA) when trying to debug it.\n for (var j = 1; j < result.length; j++) captures.push(maybeToString(result[j]));\n var namedCaptures = result.groups;\n if (functionalReplace) {\n var replacerArgs = [matched].concat(captures, position, S);\n if (namedCaptures !== undefined) replacerArgs.push(namedCaptures);\n var replacement = String(replaceValue.apply(undefined, replacerArgs));\n } else {\n replacement = getSubstitution(matched, S, position, captures, namedCaptures, replaceValue);\n }\n if (position >= nextSourcePosition) {\n accumulatedResult += S.slice(nextSourcePosition, position) + replacement;\n nextSourcePosition = position + matched.length;\n }\n }\n return accumulatedResult + S.slice(nextSourcePosition);\n }\n ];\n\n // https://tc39.github.io/ecma262/#sec-getsubstitution\n function getSubstitution(matched, str, position, captures, namedCaptures, replacement) {\n var tailPos = position + matched.length;\n var m = captures.length;\n var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED;\n if (namedCaptures !== undefined) {\n namedCaptures = toObject(namedCaptures);\n symbols = SUBSTITUTION_SYMBOLS;\n }\n return $replace.call(replacement, symbols, function (match, ch) {\n var capture;\n switch (ch.charAt(0)) {\n case '$': return '$';\n case '&': return matched;\n case '`': return str.slice(0, position);\n case \"'\": return str.slice(tailPos);\n case '<':\n capture = namedCaptures[ch.slice(1, -1)];\n break;\n default: // \\d\\d?\n var n = +ch;\n if (n === 0) return match;\n if (n > m) {\n var f = floor(n / 10);\n if (f === 0) return match;\n if (f <= m) return captures[f - 1] === undefined ? ch.charAt(1) : captures[f - 1] + ch.charAt(1);\n return match;\n }\n capture = captures[n - 1];\n }\n return capture === undefined ? '' : capture;\n });\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLnJlcGxhY2UuanM/YTQ4MSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDLHlCQUF5QixtQkFBTyxDQUFDLEVBQXlCO0FBQzFELGlCQUFpQixtQkFBTyxDQUFDLEVBQXlCO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIsb0JBQW9CO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixtQkFBbUI7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLENBQUMiLCJmaWxlIjoiMjQwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIGFkdmFuY2VTdHJpbmdJbmRleCA9IHJlcXVpcmUoJy4vX2FkdmFuY2Utc3RyaW5nLWluZGV4Jyk7XG52YXIgcmVnRXhwRXhlYyA9IHJlcXVpcmUoJy4vX3JlZ2V4cC1leGVjLWFic3RyYWN0Jyk7XG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgbWluID0gTWF0aC5taW47XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xudmFyIFNVQlNUSVRVVElPTl9TWU1CT0xTID0gL1xcJChbJCZgJ118XFxkXFxkP3w8W14+XSo+KS9nO1xudmFyIFNVQlNUSVRVVElPTl9TWU1CT0xTX05PX05BTUVEID0gL1xcJChbJCZgJ118XFxkXFxkPykvZztcblxudmFyIG1heWJlVG9TdHJpbmcgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ID09PSB1bmRlZmluZWQgPyBpdCA6IFN0cmluZyhpdCk7XG59O1xuXG4vLyBAQHJlcGxhY2UgbG9naWNcbnJlcXVpcmUoJy4vX2ZpeC1yZS13a3MnKSgncmVwbGFjZScsIDIsIGZ1bmN0aW9uIChkZWZpbmVkLCBSRVBMQUNFLCAkcmVwbGFjZSwgbWF5YmVDYWxsTmF0aXZlKSB7XG4gIHJldHVybiBbXG4gICAgLy8gYFN0cmluZy5wcm90b3R5cGUucmVwbGFjZWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlXG4gICAgZnVuY3Rpb24gcmVwbGFjZShzZWFyY2hWYWx1ZSwgcmVwbGFjZVZhbHVlKSB7XG4gICAgICB2YXIgTyA9IGRlZmluZWQodGhpcyk7XG4gICAgICB2YXIgZm4gPSBzZWFyY2hWYWx1ZSA9PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBzZWFyY2hWYWx1ZVtSRVBMQUNFXTtcbiAgICAgIHJldHVybiBmbiAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8gZm4uY2FsbChzZWFyY2hWYWx1ZSwgTywgcmVwbGFjZVZhbHVlKVxuICAgICAgICA6ICRyZXBsYWNlLmNhbGwoU3RyaW5nKE8pLCBzZWFyY2hWYWx1ZSwgcmVwbGFjZVZhbHVlKTtcbiAgICB9LFxuICAgIC8vIGBSZWdFeHAucHJvdG90eXBlW0BAcmVwbGFjZV1gIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXJlZ2V4cC5wcm90b3R5cGUtQEByZXBsYWNlXG4gICAgZnVuY3Rpb24gKHJlZ2V4cCwgcmVwbGFjZVZhbHVlKSB7XG4gICAgICB2YXIgcmVzID0gbWF5YmVDYWxsTmF0aXZlKCRyZXBsYWNlLCByZWdleHAsIHRoaXMsIHJlcGxhY2VWYWx1ZSk7XG4gICAgICBpZiAocmVzLmRvbmUpIHJldHVybiByZXMudmFsdWU7XG5cbiAgICAgIHZhciByeCA9IGFuT2JqZWN0KHJlZ2V4cCk7XG4gICAgICB2YXIgUyA9IFN0cmluZyh0aGlzKTtcbiAgICAgIHZhciBmdW5jdGlvbmFsUmVwbGFjZSA9IHR5cGVvZiByZXBsYWNlVmFsdWUgPT09ICdmdW5jdGlvbic7XG4gICAgICBpZiAoIWZ1bmN0aW9uYWxSZXBsYWNlKSByZXBsYWNlVmFsdWUgPSBTdHJpbmcocmVwbGFjZVZhbHVlKTtcbiAgICAgIHZhciBnbG9iYWwgPSByeC5nbG9iYWw7XG4gICAgICBpZiAoZ2xvYmFsKSB7XG4gICAgICAgIHZhciBmdWxsVW5pY29kZSA9IHJ4LnVuaWNvZGU7XG4gICAgICAgIHJ4Lmxhc3RJbmRleCA9IDA7XG4gICAgICB9XG4gICAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHJlZ0V4cEV4ZWMocngsIFMpO1xuICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsKSBicmVhaztcbiAgICAgICAgcmVzdWx0cy5wdXNoKHJlc3VsdCk7XG4gICAgICAgIGlmICghZ2xvYmFsKSBicmVhaztcbiAgICAgICAgdmFyIG1hdGNoU3RyID0gU3RyaW5nKHJlc3VsdFswXSk7XG4gICAgICAgIGlmIChtYXRjaFN0ciA9PT0gJycpIHJ4Lmxhc3RJbmRleCA9IGFkdmFuY2VTdHJpbmdJbmRleChTLCB0b0xlbmd0aChyeC5sYXN0SW5kZXgpLCBmdWxsVW5pY29kZSk7XG4gICAgICB9XG4gICAgICB2YXIgYWNjdW11bGF0ZWRSZXN1bHQgPSAnJztcbiAgICAgIHZhciBuZXh0U291cmNlUG9zaXRpb24gPSAwO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXN1bHRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdHNbaV07XG4gICAgICAgIHZhciBtYXRjaGVkID0gU3RyaW5nKHJlc3VsdFswXSk7XG4gICAgICAgIHZhciBwb3NpdGlvbiA9IG1heChtaW4odG9JbnRlZ2VyKHJlc3VsdC5pbmRleCksIFMubGVuZ3RoKSwgMCk7XG4gICAgICAgIHZhciBjYXB0dXJlcyA9IFtdO1xuICAgICAgICAvLyBOT1RFOiBUaGlzIGlzIGVxdWl2YWxlbnQgdG9cbiAgICAgICAgLy8gICBjYXB0dXJlcyA9IHJlc3VsdC5zbGljZSgxKS5tYXAobWF5YmVUb1N0cmluZylcbiAgICAgICAgLy8gYnV0IGZvciBzb21lIHJlYXNvbiBgbmF0aXZlU2xpY2UuY2FsbChyZXN1bHQsIDEsIHJlc3VsdC5sZW5ndGgpYCAoY2FsbGVkIGluXG4gICAgICAgIC8vIHRoZSBzbGljZSBwb2x5ZmlsbCB3aGVuIHNsaWNpbmcgbmF0aXZlIGFycmF5cykgXCJkb2Vzbid0IHdvcmtcIiBpbiBzYWZhcmkgOSBhbmRcbiAgICAgICAgLy8gY2F1c2VzIGEgY3Jhc2ggKGh0dHBzOi8vcGFzdGViaW4uY29tL04yMVF6ZVFBKSB3aGVuIHRyeWluZyB0byBkZWJ1ZyBpdC5cbiAgICAgICAgZm9yICh2YXIgaiA9IDE7IGogPCByZXN1bHQubGVuZ3RoOyBqKyspIGNhcHR1cmVzLnB1c2gobWF5YmVUb1N0cmluZyhyZXN1bHRbal0pKTtcbiAgICAgICAgdmFyIG5hbWVkQ2FwdHVyZXMgPSByZXN1bHQuZ3JvdXBzO1xuICAgICAgICBpZiAoZnVuY3Rpb25hbFJlcGxhY2UpIHtcbiAgICAgICAgICB2YXIgcmVwbGFjZXJBcmdzID0gW21hdGNoZWRdLmNvbmNhdChjYXB0dXJlcywgcG9zaXRpb24sIFMpO1xuICAgICAgICAgIGlmIChuYW1lZENhcHR1cmVzICE9PSB1bmRlZmluZWQpIHJlcGxhY2VyQXJncy5wdXNoKG5hbWVkQ2FwdHVyZXMpO1xuICAgICAgICAgIHZhciByZXBsYWNlbWVudCA9IFN0cmluZyhyZXBsYWNlVmFsdWUuYXBwbHkodW5kZWZpbmVkLCByZXBsYWNlckFyZ3MpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXBsYWNlbWVudCA9IGdldFN1YnN0aXR1dGlvbihtYXRjaGVkLCBTLCBwb3NpdGlvbiwgY2FwdHVyZXMsIG5hbWVkQ2FwdHVyZXMsIHJlcGxhY2VWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBvc2l0aW9uID49IG5leHRTb3VyY2VQb3NpdGlvbikge1xuICAgICAgICAgIGFjY3VtdWxhdGVkUmVzdWx0ICs9IFMuc2xpY2UobmV4dFNvdXJjZVBvc2l0aW9uLCBwb3NpdGlvbikgKyByZXBsYWNlbWVudDtcbiAgICAgICAgICBuZXh0U291cmNlUG9zaXRpb24gPSBwb3NpdGlvbiArIG1hdGNoZWQubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gYWNjdW11bGF0ZWRSZXN1bHQgKyBTLnNsaWNlKG5leHRTb3VyY2VQb3NpdGlvbik7XG4gICAgfVxuICBdO1xuXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtZ2V0c3Vic3RpdHV0aW9uXG4gIGZ1bmN0aW9uIGdldFN1YnN0aXR1dGlvbihtYXRjaGVkLCBzdHIsIHBvc2l0aW9uLCBjYXB0dXJlcywgbmFtZWRDYXB0dXJlcywgcmVwbGFjZW1lbnQpIHtcbiAgICB2YXIgdGFpbFBvcyA9IHBvc2l0aW9uICsgbWF0Y2hlZC5sZW5ndGg7XG4gICAgdmFyIG0gPSBjYXB0dXJlcy5sZW5ndGg7XG4gICAgdmFyIHN5bWJvbHMgPSBTVUJTVElUVVRJT05fU1lNQk9MU19OT19OQU1FRDtcbiAgICBpZiAobmFtZWRDYXB0dXJlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBuYW1lZENhcHR1cmVzID0gdG9PYmplY3QobmFtZWRDYXB0dXJlcyk7XG4gICAgICBzeW1ib2xzID0gU1VCU1RJVFVUSU9OX1NZTUJPTFM7XG4gICAgfVxuICAgIHJldHVybiAkcmVwbGFjZS5jYWxsKHJlcGxhY2VtZW50LCBzeW1ib2xzLCBmdW5jdGlvbiAobWF0Y2gsIGNoKSB7XG4gICAgICB2YXIgY2FwdHVyZTtcbiAgICAgIHN3aXRjaCAoY2guY2hhckF0KDApKSB7XG4gICAgICAgIGNhc2UgJyQnOiByZXR1cm4gJyQnO1xuICAgICAgICBjYXNlICcmJzogcmV0dXJuIG1hdGNoZWQ7XG4gICAgICAgIGNhc2UgJ2AnOiByZXR1cm4gc3RyLnNsaWNlKDAsIHBvc2l0aW9uKTtcbiAgICAgICAgY2FzZSBcIidcIjogcmV0dXJuIHN0ci5zbGljZSh0YWlsUG9zKTtcbiAgICAgICAgY2FzZSAnPCc6XG4gICAgICAgICAgY2FwdHVyZSA9IG5hbWVkQ2FwdHVyZXNbY2guc2xpY2UoMSwgLTEpXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDogLy8gXFxkXFxkP1xuICAgICAgICAgIHZhciBuID0gK2NoO1xuICAgICAgICAgIGlmIChuID09PSAwKSByZXR1cm4gbWF0Y2g7XG4gICAgICAgICAgaWYgKG4gPiBtKSB7XG4gICAgICAgICAgICB2YXIgZiA9IGZsb29yKG4gLyAxMCk7XG4gICAgICAgICAgICBpZiAoZiA9PT0gMCkgcmV0dXJuIG1hdGNoO1xuICAgICAgICAgICAgaWYgKGYgPD0gbSkgcmV0dXJuIGNhcHR1cmVzW2YgLSAxXSA9PT0gdW5kZWZpbmVkID8gY2guY2hhckF0KDEpIDogY2FwdHVyZXNbZiAtIDFdICsgY2guY2hhckF0KDEpO1xuICAgICAgICAgICAgcmV0dXJuIG1hdGNoO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXB0dXJlID0gY2FwdHVyZXNbbiAtIDFdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNhcHR1cmUgPT09IHVuZGVmaW5lZCA/ICcnIDogY2FwdHVyZTtcbiAgICB9KTtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///240\n")},function(module,exports,__webpack_require__){"use strict";eval("\n\nvar anObject = __webpack_require__(1);\nvar sameValue = __webpack_require__(100);\nvar regExpExec = __webpack_require__(58);\n\n// @@search logic\n__webpack_require__(59)('search', 1, function (defined, SEARCH, $search, maybeCallNative) {\n return [\n // `String.prototype.search` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.search\n function search(regexp) {\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[SEARCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[SEARCH](String(O));\n },\n // `RegExp.prototype[@@search]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@search\n function (regexp) {\n var res = maybeCallNative($search, regexp, this);\n if (res.done) return res.value;\n var rx = anObject(regexp);\n var S = String(this);\n var previousLastIndex = rx.lastIndex;\n if (!sameValue(previousLastIndex, 0)) rx.lastIndex = 0;\n var result = regExpExec(rx, S);\n if (!sameValue(rx.lastIndex, previousLastIndex)) rx.lastIndex = previousLastIndex;\n return result === null ? -1 : result.index;\n }\n ];\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLnNlYXJjaC5qcz8zODZkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhOztBQUViLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGdCQUFnQixtQkFBTyxDQUFDLEdBQWU7QUFDdkMsaUJBQWlCLG1CQUFPLENBQUMsRUFBeUI7O0FBRWxEO0FBQ0EsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjI0MS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgc2FtZVZhbHVlID0gcmVxdWlyZSgnLi9fc2FtZS12YWx1ZScpO1xudmFyIHJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuL19yZWdleHAtZXhlYy1hYnN0cmFjdCcpO1xuXG4vLyBAQHNlYXJjaCBsb2dpY1xucmVxdWlyZSgnLi9fZml4LXJlLXdrcycpKCdzZWFyY2gnLCAxLCBmdW5jdGlvbiAoZGVmaW5lZCwgU0VBUkNILCAkc2VhcmNoLCBtYXliZUNhbGxOYXRpdmUpIHtcbiAgcmV0dXJuIFtcbiAgICAvLyBgU3RyaW5nLnByb3RvdHlwZS5zZWFyY2hgIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUuc2VhcmNoXG4gICAgZnVuY3Rpb24gc2VhcmNoKHJlZ2V4cCkge1xuICAgICAgdmFyIE8gPSBkZWZpbmVkKHRoaXMpO1xuICAgICAgdmFyIGZuID0gcmVnZXhwID09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHJlZ2V4cFtTRUFSQ0hdO1xuICAgICAgcmV0dXJuIGZuICE9PSB1bmRlZmluZWQgPyBmbi5jYWxsKHJlZ2V4cCwgTykgOiBuZXcgUmVnRXhwKHJlZ2V4cClbU0VBUkNIXShTdHJpbmcoTykpO1xuICAgIH0sXG4gICAgLy8gYFJlZ0V4cC5wcm90b3R5cGVbQEBzZWFyY2hdYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1yZWdleHAucHJvdG90eXBlLUBAc2VhcmNoXG4gICAgZnVuY3Rpb24gKHJlZ2V4cCkge1xuICAgICAgdmFyIHJlcyA9IG1heWJlQ2FsbE5hdGl2ZSgkc2VhcmNoLCByZWdleHAsIHRoaXMpO1xuICAgICAgaWYgKHJlcy5kb25lKSByZXR1cm4gcmVzLnZhbHVlO1xuICAgICAgdmFyIHJ4ID0gYW5PYmplY3QocmVnZXhwKTtcbiAgICAgIHZhciBTID0gU3RyaW5nKHRoaXMpO1xuICAgICAgdmFyIHByZXZpb3VzTGFzdEluZGV4ID0gcngubGFzdEluZGV4O1xuICAgICAgaWYgKCFzYW1lVmFsdWUocHJldmlvdXNMYXN0SW5kZXgsIDApKSByeC5sYXN0SW5kZXggPSAwO1xuICAgICAgdmFyIHJlc3VsdCA9IHJlZ0V4cEV4ZWMocngsIFMpO1xuICAgICAgaWYgKCFzYW1lVmFsdWUocngubGFzdEluZGV4LCBwcmV2aW91c0xhc3RJbmRleCkpIHJ4Lmxhc3RJbmRleCA9IHByZXZpb3VzTGFzdEluZGV4O1xuICAgICAgcmV0dXJuIHJlc3VsdCA9PT0gbnVsbCA/IC0xIDogcmVzdWx0LmluZGV4O1xuICAgIH1cbiAgXTtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///241\n")},function(module,exports,__webpack_require__){"use strict";eval("\n\nvar isRegExp = __webpack_require__(56);\nvar anObject = __webpack_require__(1);\nvar speciesConstructor = __webpack_require__(51);\nvar advanceStringIndex = __webpack_require__(88);\nvar toLength = __webpack_require__(6);\nvar callRegExpExec = __webpack_require__(58);\nvar regexpExec = __webpack_require__(87);\nvar fails = __webpack_require__(3);\nvar $min = Math.min;\nvar $push = [].push;\nvar $SPLIT = 'split';\nvar LENGTH = 'length';\nvar LAST_INDEX = 'lastIndex';\nvar MAX_UINT32 = 0xffffffff;\n\n// babel-minify transpiles RegExp('x', 'y') -> /x/y and it causes SyntaxError\nvar SUPPORTS_Y = !fails(function () { RegExp(MAX_UINT32, 'y'); });\n\n// @@split logic\n__webpack_require__(59)('split', 2, function (defined, SPLIT, $split, maybeCallNative) {\n var internalSplit;\n if (\n 'abbc'[$SPLIT](/(b)*/)[1] == 'c' ||\n 'test'[$SPLIT](/(?:)/, -1)[LENGTH] != 4 ||\n 'ab'[$SPLIT](/(?:ab)*/)[LENGTH] != 2 ||\n '.'[$SPLIT](/(.?)(.?)/)[LENGTH] != 4 ||\n '.'[$SPLIT](/()()/)[LENGTH] > 1 ||\n ''[$SPLIT](/.?/)[LENGTH]\n ) {\n // based on es5-shim implementation, need to rework it\n internalSplit = function (separator, limit) {\n var string = String(this);\n if (separator === undefined && limit === 0) return [];\n // If `separator` is not a regex, use native split\n if (!isRegExp(separator)) return $split.call(string, separator, limit);\n var output = [];\n var flags = (separator.ignoreCase ? 'i' : '') +\n (separator.multiline ? 'm' : '') +\n (separator.unicode ? 'u' : '') +\n (separator.sticky ? 'y' : '');\n var lastLastIndex = 0;\n var splitLimit = limit === undefined ? MAX_UINT32 : limit >>> 0;\n // Make `global` and avoid `lastIndex` issues by working with a copy\n var separatorCopy = new RegExp(separator.source, flags + 'g');\n var match, lastIndex, lastLength;\n while (match = regexpExec.call(separatorCopy, string)) {\n lastIndex = separatorCopy[LAST_INDEX];\n if (lastIndex > lastLastIndex) {\n output.push(string.slice(lastLastIndex, match.index));\n if (match[LENGTH] > 1 && match.index < string[LENGTH]) $push.apply(output, match.slice(1));\n lastLength = match[0][LENGTH];\n lastLastIndex = lastIndex;\n if (output[LENGTH] >= splitLimit) break;\n }\n if (separatorCopy[LAST_INDEX] === match.index) separatorCopy[LAST_INDEX]++; // Avoid an infinite loop\n }\n if (lastLastIndex === string[LENGTH]) {\n if (lastLength || !separatorCopy.test('')) output.push('');\n } else output.push(string.slice(lastLastIndex));\n return output[LENGTH] > splitLimit ? output.slice(0, splitLimit) : output;\n };\n // Chakra, V8\n } else if ('0'[$SPLIT](undefined, 0)[LENGTH]) {\n internalSplit = function (separator, limit) {\n return separator === undefined && limit === 0 ? [] : $split.call(this, separator, limit);\n };\n } else {\n internalSplit = $split;\n }\n\n return [\n // `String.prototype.split` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.split\n function split(separator, limit) {\n var O = defined(this);\n var splitter = separator == undefined ? undefined : separator[SPLIT];\n return splitter !== undefined\n ? splitter.call(separator, O, limit)\n : internalSplit.call(String(O), separator, limit);\n },\n // `RegExp.prototype[@@split]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@split\n //\n // NOTE: This cannot be properly polyfilled in engines that don't support\n // the 'y' flag.\n function (regexp, limit) {\n var res = maybeCallNative(internalSplit, regexp, this, limit, internalSplit !== $split);\n if (res.done) return res.value;\n\n var rx = anObject(regexp);\n var S = String(this);\n var C = speciesConstructor(rx, RegExp);\n\n var unicodeMatching = rx.unicode;\n var flags = (rx.ignoreCase ? 'i' : '') +\n (rx.multiline ? 'm' : '') +\n (rx.unicode ? 'u' : '') +\n (SUPPORTS_Y ? 'y' : 'g');\n\n // ^(? + rx + ) is needed, in combination with some S slicing, to\n // simulate the 'y' flag.\n var splitter = new C(SUPPORTS_Y ? rx : '^(?:' + rx.source + ')', flags);\n var lim = limit === undefined ? MAX_UINT32 : limit >>> 0;\n if (lim === 0) return [];\n if (S.length === 0) return callRegExpExec(splitter, S) === null ? [S] : [];\n var p = 0;\n var q = 0;\n var A = [];\n while (q < S.length) {\n splitter.lastIndex = SUPPORTS_Y ? q : 0;\n var z = callRegExpExec(splitter, SUPPORTS_Y ? S : S.slice(q));\n var e;\n if (\n z === null ||\n (e = $min(toLength(splitter.lastIndex + (SUPPORTS_Y ? 0 : q)), S.length)) === p\n ) {\n q = advanceStringIndex(S, q, unicodeMatching);\n } else {\n A.push(S.slice(p, q));\n if (A.length === lim) return A;\n for (var i = 1; i <= z.length - 1; i++) {\n A.push(z[i]);\n if (A.length === lim) return A;\n }\n q = p = e;\n }\n }\n A.push(S.slice(p));\n return A;\n }\n ];\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLnNwbGl0LmpzPzI4YTUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWIsZUFBZSxtQkFBTyxDQUFDLEVBQWM7QUFDckMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMseUJBQXlCLG1CQUFPLENBQUMsRUFBd0I7QUFDekQseUJBQXlCLG1CQUFPLENBQUMsRUFBeUI7QUFDMUQsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMscUJBQXFCLG1CQUFPLENBQUMsRUFBeUI7QUFDdEQsaUJBQWlCLG1CQUFPLENBQUMsRUFBZ0I7QUFDekMsWUFBWSxtQkFBTyxDQUFDLENBQVU7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EscUNBQXFDLHlCQUF5QixFQUFFOztBQUVoRTtBQUNBLG1CQUFPLENBQUMsRUFBZTtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1GQUFtRjtBQUNuRjtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EseUJBQXlCLG1CQUFtQjtBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjQyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaXNSZWdFeHAgPSByZXF1aXJlKCcuL19pcy1yZWdleHAnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4vX3NwZWNpZXMtY29uc3RydWN0b3InKTtcbnZhciBhZHZhbmNlU3RyaW5nSW5kZXggPSByZXF1aXJlKCcuL19hZHZhbmNlLXN0cmluZy1pbmRleCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgY2FsbFJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuL19yZWdleHAtZXhlYy1hYnN0cmFjdCcpO1xudmFyIHJlZ2V4cEV4ZWMgPSByZXF1aXJlKCcuL19yZWdleHAtZXhlYycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciAkbWluID0gTWF0aC5taW47XG52YXIgJHB1c2ggPSBbXS5wdXNoO1xudmFyICRTUExJVCA9ICdzcGxpdCc7XG52YXIgTEVOR1RIID0gJ2xlbmd0aCc7XG52YXIgTEFTVF9JTkRFWCA9ICdsYXN0SW5kZXgnO1xudmFyIE1BWF9VSU5UMzIgPSAweGZmZmZmZmZmO1xuXG4vLyBiYWJlbC1taW5pZnkgdHJhbnNwaWxlcyBSZWdFeHAoJ3gnLCAneScpIC0+IC94L3kgYW5kIGl0IGNhdXNlcyBTeW50YXhFcnJvclxudmFyIFNVUFBPUlRTX1kgPSAhZmFpbHMoZnVuY3Rpb24gKCkgeyBSZWdFeHAoTUFYX1VJTlQzMiwgJ3knKTsgfSk7XG5cbi8vIEBAc3BsaXQgbG9naWNcbnJlcXVpcmUoJy4vX2ZpeC1yZS13a3MnKSgnc3BsaXQnLCAyLCBmdW5jdGlvbiAoZGVmaW5lZCwgU1BMSVQsICRzcGxpdCwgbWF5YmVDYWxsTmF0aXZlKSB7XG4gIHZhciBpbnRlcm5hbFNwbGl0O1xuICBpZiAoXG4gICAgJ2FiYmMnWyRTUExJVF0oLyhiKSovKVsxXSA9PSAnYycgfHxcbiAgICAndGVzdCdbJFNQTElUXSgvKD86KS8sIC0xKVtMRU5HVEhdICE9IDQgfHxcbiAgICAnYWInWyRTUExJVF0oLyg/OmFiKSovKVtMRU5HVEhdICE9IDIgfHxcbiAgICAnLidbJFNQTElUXSgvKC4/KSguPykvKVtMRU5HVEhdICE9IDQgfHxcbiAgICAnLidbJFNQTElUXSgvKCkoKS8pW0xFTkdUSF0gPiAxIHx8XG4gICAgJydbJFNQTElUXSgvLj8vKVtMRU5HVEhdXG4gICkge1xuICAgIC8vIGJhc2VkIG9uIGVzNS1zaGltIGltcGxlbWVudGF0aW9uLCBuZWVkIHRvIHJld29yayBpdFxuICAgIGludGVybmFsU3BsaXQgPSBmdW5jdGlvbiAoc2VwYXJhdG9yLCBsaW1pdCkge1xuICAgICAgdmFyIHN0cmluZyA9IFN0cmluZyh0aGlzKTtcbiAgICAgIGlmIChzZXBhcmF0b3IgPT09IHVuZGVmaW5lZCAmJiBsaW1pdCA9PT0gMCkgcmV0dXJuIFtdO1xuICAgICAgLy8gSWYgYHNlcGFyYXRvcmAgaXMgbm90IGEgcmVnZXgsIHVzZSBuYXRpdmUgc3BsaXRcbiAgICAgIGlmICghaXNSZWdFeHAoc2VwYXJhdG9yKSkgcmV0dXJuICRzcGxpdC5jYWxsKHN0cmluZywgc2VwYXJhdG9yLCBsaW1pdCk7XG4gICAgICB2YXIgb3V0cHV0ID0gW107XG4gICAgICB2YXIgZmxhZ3MgPSAoc2VwYXJhdG9yLmlnbm9yZUNhc2UgPyAnaScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHNlcGFyYXRvci5tdWx0aWxpbmUgPyAnbScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHNlcGFyYXRvci51bmljb2RlID8gJ3UnIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChzZXBhcmF0b3Iuc3RpY2t5ID8gJ3knIDogJycpO1xuICAgICAgdmFyIGxhc3RMYXN0SW5kZXggPSAwO1xuICAgICAgdmFyIHNwbGl0TGltaXQgPSBsaW1pdCA9PT0gdW5kZWZpbmVkID8gTUFYX1VJTlQzMiA6IGxpbWl0ID4+PiAwO1xuICAgICAgLy8gTWFrZSBgZ2xvYmFsYCBhbmQgYXZvaWQgYGxhc3RJbmRleGAgaXNzdWVzIGJ5IHdvcmtpbmcgd2l0aCBhIGNvcHlcbiAgICAgIHZhciBzZXBhcmF0b3JDb3B5ID0gbmV3IFJlZ0V4cChzZXBhcmF0b3Iuc291cmNlLCBmbGFncyArICdnJyk7XG4gICAgICB2YXIgbWF0Y2gsIGxhc3RJbmRleCwgbGFzdExlbmd0aDtcbiAgICAgIHdoaWxlIChtYXRjaCA9IHJlZ2V4cEV4ZWMuY2FsbChzZXBhcmF0b3JDb3B5LCBzdHJpbmcpKSB7XG4gICAgICAgIGxhc3RJbmRleCA9IHNlcGFyYXRvckNvcHlbTEFTVF9JTkRFWF07XG4gICAgICAgIGlmIChsYXN0SW5kZXggPiBsYXN0TGFzdEluZGV4KSB7XG4gICAgICAgICAgb3V0cHV0LnB1c2goc3RyaW5nLnNsaWNlKGxhc3RMYXN0SW5kZXgsIG1hdGNoLmluZGV4KSk7XG4gICAgICAgICAgaWYgKG1hdGNoW0xFTkdUSF0gPiAxICYmIG1hdGNoLmluZGV4IDwgc3RyaW5nW0xFTkdUSF0pICRwdXNoLmFwcGx5KG91dHB1dCwgbWF0Y2guc2xpY2UoMSkpO1xuICAgICAgICAgIGxhc3RMZW5ndGggPSBtYXRjaFswXVtMRU5HVEhdO1xuICAgICAgICAgIGxhc3RMYXN0SW5kZXggPSBsYXN0SW5kZXg7XG4gICAgICAgICAgaWYgKG91dHB1dFtMRU5HVEhdID49IHNwbGl0TGltaXQpIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzZXBhcmF0b3JDb3B5W0xBU1RfSU5ERVhdID09PSBtYXRjaC5pbmRleCkgc2VwYXJhdG9yQ29weVtMQVNUX0lOREVYXSsrOyAvLyBBdm9pZCBhbiBpbmZpbml0ZSBsb29wXG4gICAgICB9XG4gICAgICBpZiAobGFzdExhc3RJbmRleCA9PT0gc3RyaW5nW0xFTkdUSF0pIHtcbiAgICAgICAgaWYgKGxhc3RMZW5ndGggfHwgIXNlcGFyYXRvckNvcHkudGVzdCgnJykpIG91dHB1dC5wdXNoKCcnKTtcbiAgICAgIH0gZWxzZSBvdXRwdXQucHVzaChzdHJpbmcuc2xpY2UobGFzdExhc3RJbmRleCkpO1xuICAgICAgcmV0dXJuIG91dHB1dFtMRU5HVEhdID4gc3BsaXRMaW1pdCA/IG91dHB1dC5zbGljZSgwLCBzcGxpdExpbWl0KSA6IG91dHB1dDtcbiAgICB9O1xuICAvLyBDaGFrcmEsIFY4XG4gIH0gZWxzZSBpZiAoJzAnWyRTUExJVF0odW5kZWZpbmVkLCAwKVtMRU5HVEhdKSB7XG4gICAgaW50ZXJuYWxTcGxpdCA9IGZ1bmN0aW9uIChzZXBhcmF0b3IsIGxpbWl0KSB7XG4gICAgICByZXR1cm4gc2VwYXJhdG9yID09PSB1bmRlZmluZWQgJiYgbGltaXQgPT09IDAgPyBbXSA6ICRzcGxpdC5jYWxsKHRoaXMsIHNlcGFyYXRvciwgbGltaXQpO1xuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgaW50ZXJuYWxTcGxpdCA9ICRzcGxpdDtcbiAgfVxuXG4gIHJldHVybiBbXG4gICAgLy8gYFN0cmluZy5wcm90b3R5cGUuc3BsaXRgIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUuc3BsaXRcbiAgICBmdW5jdGlvbiBzcGxpdChzZXBhcmF0b3IsIGxpbWl0KSB7XG4gICAgICB2YXIgTyA9IGRlZmluZWQodGhpcyk7XG4gICAgICB2YXIgc3BsaXR0ZXIgPSBzZXBhcmF0b3IgPT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogc2VwYXJhdG9yW1NQTElUXTtcbiAgICAgIHJldHVybiBzcGxpdHRlciAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8gc3BsaXR0ZXIuY2FsbChzZXBhcmF0b3IsIE8sIGxpbWl0KVxuICAgICAgICA6IGludGVybmFsU3BsaXQuY2FsbChTdHJpbmcoTyksIHNlcGFyYXRvciwgbGltaXQpO1xuICAgIH0sXG4gICAgLy8gYFJlZ0V4cC5wcm90b3R5cGVbQEBzcGxpdF1gIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXJlZ2V4cC5wcm90b3R5cGUtQEBzcGxpdFxuICAgIC8vXG4gICAgLy8gTk9URTogVGhpcyBjYW5ub3QgYmUgcHJvcGVybHkgcG9seWZpbGxlZCBpbiBlbmdpbmVzIHRoYXQgZG9uJ3Qgc3VwcG9ydFxuICAgIC8vIHRoZSAneScgZmxhZy5cbiAgICBmdW5jdGlvbiAocmVnZXhwLCBsaW1pdCkge1xuICAgICAgdmFyIHJlcyA9IG1heWJlQ2FsbE5hdGl2ZShpbnRlcm5hbFNwbGl0LCByZWdleHAsIHRoaXMsIGxpbWl0LCBpbnRlcm5hbFNwbGl0ICE9PSAkc3BsaXQpO1xuICAgICAgaWYgKHJlcy5kb25lKSByZXR1cm4gcmVzLnZhbHVlO1xuXG4gICAgICB2YXIgcnggPSBhbk9iamVjdChyZWdleHApO1xuICAgICAgdmFyIFMgPSBTdHJpbmcodGhpcyk7XG4gICAgICB2YXIgQyA9IHNwZWNpZXNDb25zdHJ1Y3RvcihyeCwgUmVnRXhwKTtcblxuICAgICAgdmFyIHVuaWNvZGVNYXRjaGluZyA9IHJ4LnVuaWNvZGU7XG4gICAgICB2YXIgZmxhZ3MgPSAocnguaWdub3JlQ2FzZSA/ICdpJyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAocngubXVsdGlsaW5lID8gJ20nIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChyeC51bmljb2RlID8gJ3UnIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChTVVBQT1JUU19ZID8gJ3knIDogJ2cnKTtcblxuICAgICAgLy8gXig/ICsgcnggKyApIGlzIG5lZWRlZCwgaW4gY29tYmluYXRpb24gd2l0aCBzb21lIFMgc2xpY2luZywgdG9cbiAgICAgIC8vIHNpbXVsYXRlIHRoZSAneScgZmxhZy5cbiAgICAgIHZhciBzcGxpdHRlciA9IG5ldyBDKFNVUFBPUlRTX1kgPyByeCA6ICdeKD86JyArIHJ4LnNvdXJjZSArICcpJywgZmxhZ3MpO1xuICAgICAgdmFyIGxpbSA9IGxpbWl0ID09PSB1bmRlZmluZWQgPyBNQVhfVUlOVDMyIDogbGltaXQgPj4+IDA7XG4gICAgICBpZiAobGltID09PSAwKSByZXR1cm4gW107XG4gICAgICBpZiAoUy5sZW5ndGggPT09IDApIHJldHVybiBjYWxsUmVnRXhwRXhlYyhzcGxpdHRlciwgUykgPT09IG51bGwgPyBbU10gOiBbXTtcbiAgICAgIHZhciBwID0gMDtcbiAgICAgIHZhciBxID0gMDtcbiAgICAgIHZhciBBID0gW107XG4gICAgICB3aGlsZSAocSA8IFMubGVuZ3RoKSB7XG4gICAgICAgIHNwbGl0dGVyLmxhc3RJbmRleCA9IFNVUFBPUlRTX1kgPyBxIDogMDtcbiAgICAgICAgdmFyIHogPSBjYWxsUmVnRXhwRXhlYyhzcGxpdHRlciwgU1VQUE9SVFNfWSA/IFMgOiBTLnNsaWNlKHEpKTtcbiAgICAgICAgdmFyIGU7XG4gICAgICAgIGlmIChcbiAgICAgICAgICB6ID09PSBudWxsIHx8XG4gICAgICAgICAgKGUgPSAkbWluKHRvTGVuZ3RoKHNwbGl0dGVyLmxhc3RJbmRleCArIChTVVBQT1JUU19ZID8gMCA6IHEpKSwgUy5sZW5ndGgpKSA9PT0gcFxuICAgICAgICApIHtcbiAgICAgICAgICBxID0gYWR2YW5jZVN0cmluZ0luZGV4KFMsIHEsIHVuaWNvZGVNYXRjaGluZyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgQS5wdXNoKFMuc2xpY2UocCwgcSkpO1xuICAgICAgICAgIGlmIChBLmxlbmd0aCA9PT0gbGltKSByZXR1cm4gQTtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8PSB6Lmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICAgICAgQS5wdXNoKHpbaV0pO1xuICAgICAgICAgICAgaWYgKEEubGVuZ3RoID09PSBsaW0pIHJldHVybiBBO1xuICAgICAgICAgIH1cbiAgICAgICAgICBxID0gcCA9IGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIEEucHVzaChTLnNsaWNlKHApKTtcbiAgICAgIHJldHVybiBBO1xuICAgIH1cbiAgXTtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///242\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar LIBRARY = __webpack_require__(29);\nvar global = __webpack_require__(2);\nvar ctx = __webpack_require__(19);\nvar classof = __webpack_require__(44);\nvar $export = __webpack_require__(0);\nvar isObject = __webpack_require__(4);\nvar aFunction = __webpack_require__(10);\nvar anInstance = __webpack_require__(39);\nvar forOf = __webpack_require__(40);\nvar speciesConstructor = __webpack_require__(51);\nvar task = __webpack_require__(89).set;\nvar microtask = __webpack_require__(90)();\nvar newPromiseCapabilityModule = __webpack_require__(91);\nvar perform = __webpack_require__(115);\nvar userAgent = __webpack_require__(60);\nvar promiseResolve = __webpack_require__(116);\nvar PROMISE = 'Promise';\nvar TypeError = global.TypeError;\nvar process = global.process;\nvar versions = process && process.versions;\nvar v8 = versions && versions.v8 || '';\nvar $Promise = global[PROMISE];\nvar isNode = classof(process) == 'process';\nvar empty = function () { /* empty */ };\nvar Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper;\nvar newPromiseCapability = newGenericPromiseCapability = newPromiseCapabilityModule.f;\n\nvar USE_NATIVE = !!function () {\n try {\n // correct subclassing with @@species support\n var promise = $Promise.resolve(1);\n var FakePromise = (promise.constructor = {})[__webpack_require__(5)('species')] = function (exec) {\n exec(empty, empty);\n };\n // unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n return (isNode || typeof PromiseRejectionEvent == 'function')\n && promise.then(empty) instanceof FakePromise\n // v8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables\n // https://bugs.chromium.org/p/chromium/issues/detail?id=830565\n // we can't detect it synchronously, so just check versions\n && v8.indexOf('6.6') !== 0\n && userAgent.indexOf('Chrome/66') === -1;\n } catch (e) { /* empty */ }\n}();\n\n// helpers\nvar isThenable = function (it) {\n var then;\n return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\nvar notify = function (promise, isReject) {\n if (promise._n) return;\n promise._n = true;\n var chain = promise._c;\n microtask(function () {\n var value = promise._v;\n var ok = promise._s == 1;\n var i = 0;\n var run = function (reaction) {\n var handler = ok ? reaction.ok : reaction.fail;\n var resolve = reaction.resolve;\n var reject = reaction.reject;\n var domain = reaction.domain;\n var result, then, exited;\n try {\n if (handler) {\n if (!ok) {\n if (promise._h == 2) onHandleUnhandled(promise);\n promise._h = 1;\n }\n if (handler === true) result = value;\n else {\n if (domain) domain.enter();\n result = handler(value); // may throw\n if (domain) {\n domain.exit();\n exited = true;\n }\n }\n if (result === reaction.promise) {\n reject(TypeError('Promise-chain cycle'));\n } else if (then = isThenable(result)) {\n then.call(result, resolve, reject);\n } else resolve(result);\n } else reject(value);\n } catch (e) {\n if (domain && !exited) domain.exit();\n reject(e);\n }\n };\n while (chain.length > i) run(chain[i++]); // variable length - can't use forEach\n promise._c = [];\n promise._n = false;\n if (isReject && !promise._h) onUnhandled(promise);\n });\n};\nvar onUnhandled = function (promise) {\n task.call(global, function () {\n var value = promise._v;\n var unhandled = isUnhandled(promise);\n var result, handler, console;\n if (unhandled) {\n result = perform(function () {\n if (isNode) {\n process.emit('unhandledRejection', value, promise);\n } else if (handler = global.onunhandledrejection) {\n handler({ promise: promise, reason: value });\n } else if ((console = global.console) && console.error) {\n console.error('Unhandled promise rejection', value);\n }\n });\n // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n promise._h = isNode || isUnhandled(promise) ? 2 : 1;\n } promise._a = undefined;\n if (unhandled && result.e) throw result.v;\n });\n};\nvar isUnhandled = function (promise) {\n return promise._h !== 1 && (promise._a || promise._c).length === 0;\n};\nvar onHandleUnhandled = function (promise) {\n task.call(global, function () {\n var handler;\n if (isNode) {\n process.emit('rejectionHandled', promise);\n } else if (handler = global.onrejectionhandled) {\n handler({ promise: promise, reason: promise._v });\n }\n });\n};\nvar $reject = function (value) {\n var promise = this;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n promise._v = value;\n promise._s = 2;\n if (!promise._a) promise._a = promise._c.slice();\n notify(promise, true);\n};\nvar $resolve = function (value) {\n var promise = this;\n var then;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n try {\n if (promise === value) throw TypeError(\"Promise can't be resolved itself\");\n if (then = isThenable(value)) {\n microtask(function () {\n var wrapper = { _w: promise, _d: false }; // wrap\n try {\n then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));\n } catch (e) {\n $reject.call(wrapper, e);\n }\n });\n } else {\n promise._v = value;\n promise._s = 1;\n notify(promise, false);\n }\n } catch (e) {\n $reject.call({ _w: promise, _d: false }, e); // wrap\n }\n};\n\n// constructor polyfill\nif (!USE_NATIVE) {\n // 25.4.3.1 Promise(executor)\n $Promise = function Promise(executor) {\n anInstance(this, $Promise, PROMISE, '_h');\n aFunction(executor);\n Internal.call(this);\n try {\n executor(ctx($resolve, this, 1), ctx($reject, this, 1));\n } catch (err) {\n $reject.call(this, err);\n }\n };\n // eslint-disable-next-line no-unused-vars\n Internal = function Promise(executor) {\n this._c = []; // <- awaiting reactions\n this._a = undefined; // <- checked in isUnhandled reactions\n this._s = 0; // <- state\n this._d = false; // <- done\n this._v = undefined; // <- value\n this._h = 0; // <- rejection state, 0 - default, 1 - handled, 2 - unhandled\n this._n = false; // <- notify\n };\n Internal.prototype = __webpack_require__(41)($Promise.prototype, {\n // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)\n then: function then(onFulfilled, onRejected) {\n var reaction = newPromiseCapability(speciesConstructor(this, $Promise));\n reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\n reaction.fail = typeof onRejected == 'function' && onRejected;\n reaction.domain = isNode ? process.domain : undefined;\n this._c.push(reaction);\n if (this._a) this._a.push(reaction);\n if (this._s) notify(this, false);\n return reaction.promise;\n },\n // 25.4.5.1 Promise.prototype.catch(onRejected)\n 'catch': function (onRejected) {\n return this.then(undefined, onRejected);\n }\n });\n OwnPromiseCapability = function () {\n var promise = new Internal();\n this.promise = promise;\n this.resolve = ctx($resolve, promise, 1);\n this.reject = ctx($reject, promise, 1);\n };\n newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n return C === $Promise || C === Wrapper\n ? new OwnPromiseCapability(C)\n : newGenericPromiseCapability(C);\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Promise: $Promise });\n__webpack_require__(43)($Promise, PROMISE);\n__webpack_require__(38)(PROMISE);\nWrapper = __webpack_require__(18)[PROMISE];\n\n// statics\n$export($export.S + $export.F * !USE_NATIVE, PROMISE, {\n // 25.4.4.5 Promise.reject(r)\n reject: function reject(r) {\n var capability = newPromiseCapability(this);\n var $$reject = capability.reject;\n $$reject(r);\n return capability.promise;\n }\n});\n$export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {\n // 25.4.4.6 Promise.resolve(x)\n resolve: function resolve(x) {\n return promiseResolve(LIBRARY && this === Wrapper ? $Promise : this, x);\n }\n});\n$export($export.S + $export.F * !(USE_NATIVE && __webpack_require__(57)(function (iter) {\n $Promise.all(iter)['catch'](empty);\n})), PROMISE, {\n // 25.4.4.1 Promise.all(iterable)\n all: function all(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var values = [];\n var index = 0;\n var remaining = 1;\n forOf(iterable, false, function (promise) {\n var $index = index++;\n var alreadyCalled = false;\n values.push(undefined);\n remaining++;\n C.resolve(promise).then(function (value) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[$index] = value;\n --remaining || resolve(values);\n }, reject);\n });\n --remaining || resolve(values);\n });\n if (result.e) reject(result.v);\n return capability.promise;\n },\n // 25.4.4.4 Promise.race(iterable)\n race: function race(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var reject = capability.reject;\n var result = perform(function () {\n forOf(iterable, false, function (promise) {\n C.resolve(promise).then(capability.resolve, reject);\n });\n });\n if (result.e) reject(result.v);\n return capability.promise;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucHJvbWlzZS5qcz81NTFjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsY0FBYyxtQkFBTyxDQUFDLEVBQVk7QUFDbEMsYUFBYSxtQkFBTyxDQUFDLENBQVc7QUFDaEMsVUFBVSxtQkFBTyxDQUFDLEVBQVE7QUFDMUIsY0FBYyxtQkFBTyxDQUFDLEVBQVk7QUFDbEMsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2QyxpQkFBaUIsbUJBQU8sQ0FBQyxFQUFnQjtBQUN6QyxZQUFZLG1CQUFPLENBQUMsRUFBVztBQUMvQix5QkFBeUIsbUJBQU8sQ0FBQyxFQUF3QjtBQUN6RCxXQUFXLG1CQUFPLENBQUMsRUFBUztBQUM1QixnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFjO0FBQ3RDLGlDQUFpQyxtQkFBTyxDQUFDLEVBQTJCO0FBQ3BFLGNBQWMsbUJBQU8sQ0FBQyxHQUFZO0FBQ2xDLGdCQUFnQixtQkFBTyxDQUFDLEVBQWU7QUFDdkMscUJBQXFCLG1CQUFPLENBQUMsR0FBb0I7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtDQUErQyxFQUFFLG1CQUFPLENBQUMsQ0FBUTtBQUNqRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUcsWUFBWTtBQUNmLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0M7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQSxXQUFXO0FBQ1gsU0FBUztBQUNULE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZDQUE2QztBQUM3QztBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsbUJBQW1CLGtDQUFrQztBQUNyRCxTQUFTO0FBQ1Q7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxlQUFlLHVDQUF1QztBQUN0RDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLDBCQUEwQjtBQUNqRDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILGtCQUFrQix5QkFBeUIsS0FBSztBQUNoRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCLHdCQUF3QjtBQUN4QixnQkFBZ0I7QUFDaEIsb0JBQW9CO0FBQ3BCLHdCQUF3QjtBQUN4QixnQkFBZ0I7QUFDaEIsb0JBQW9CO0FBQ3BCO0FBQ0EsdUJBQXVCLG1CQUFPLENBQUMsRUFBaUI7QUFDaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDBEQUEwRCxvQkFBb0I7QUFDOUUsbUJBQU8sQ0FBQyxFQUFzQjtBQUM5QixtQkFBTyxDQUFDLEVBQWdCO0FBQ3hCLFVBQVUsbUJBQU8sQ0FBQyxFQUFTOztBQUUzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCxnREFBZ0QsbUJBQU8sQ0FBQyxFQUFnQjtBQUN4RTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULE9BQU87QUFDUDtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjQzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIExJQlJBUlkgPSByZXF1aXJlKCcuL19saWJyYXJ5Jyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4vX2NsYXNzb2YnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG52YXIgZm9yT2YgPSByZXF1aXJlKCcuL19mb3Itb2YnKTtcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuL19zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG52YXIgdGFzayA9IHJlcXVpcmUoJy4vX3Rhc2snKS5zZXQ7XG52YXIgbWljcm90YXNrID0gcmVxdWlyZSgnLi9fbWljcm90YXNrJykoKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZSA9IHJlcXVpcmUoJy4vX25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcbnZhciBwZXJmb3JtID0gcmVxdWlyZSgnLi9fcGVyZm9ybScpO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4vX3VzZXItYWdlbnQnKTtcbnZhciBwcm9taXNlUmVzb2x2ZSA9IHJlcXVpcmUoJy4vX3Byb21pc2UtcmVzb2x2ZScpO1xudmFyIFBST01JU0UgPSAnUHJvbWlzZSc7XG52YXIgVHlwZUVycm9yID0gZ2xvYmFsLlR5cGVFcnJvcjtcbnZhciBwcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3M7XG52YXIgdmVyc2lvbnMgPSBwcm9jZXNzICYmIHByb2Nlc3MudmVyc2lvbnM7XG52YXIgdjggPSB2ZXJzaW9ucyAmJiB2ZXJzaW9ucy52OCB8fCAnJztcbnZhciAkUHJvbWlzZSA9IGdsb2JhbFtQUk9NSVNFXTtcbnZhciBpc05vZGUgPSBjbGFzc29mKHByb2Nlc3MpID09ICdwcm9jZXNzJztcbnZhciBlbXB0eSA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcbnZhciBJbnRlcm5hbCwgbmV3R2VuZXJpY1Byb21pc2VDYXBhYmlsaXR5LCBPd25Qcm9taXNlQ2FwYWJpbGl0eSwgV3JhcHBlcjtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IG5ld0dlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmY7XG5cbnZhciBVU0VfTkFUSVZFID0gISFmdW5jdGlvbiAoKSB7XG4gIHRyeSB7XG4gICAgLy8gY29ycmVjdCBzdWJjbGFzc2luZyB3aXRoIEBAc3BlY2llcyBzdXBwb3J0XG4gICAgdmFyIHByb21pc2UgPSAkUHJvbWlzZS5yZXNvbHZlKDEpO1xuICAgIHZhciBGYWtlUHJvbWlzZSA9IChwcm9taXNlLmNvbnN0cnVjdG9yID0ge30pW3JlcXVpcmUoJy4vX3drcycpKCdzcGVjaWVzJyldID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgICAgIGV4ZWMoZW1wdHksIGVtcHR5KTtcbiAgICB9O1xuICAgIC8vIHVuaGFuZGxlZCByZWplY3Rpb25zIHRyYWNraW5nIHN1cHBvcnQsIE5vZGVKUyBQcm9taXNlIHdpdGhvdXQgaXQgZmFpbHMgQEBzcGVjaWVzIHRlc3RcbiAgICByZXR1cm4gKGlzTm9kZSB8fCB0eXBlb2YgUHJvbWlzZVJlamVjdGlvbkV2ZW50ID09ICdmdW5jdGlvbicpXG4gICAgICAmJiBwcm9taXNlLnRoZW4oZW1wdHkpIGluc3RhbmNlb2YgRmFrZVByb21pc2VcbiAgICAgIC8vIHY4IDYuNiAoTm9kZSAxMCBhbmQgQ2hyb21lIDY2KSBoYXZlIGEgYnVnIHdpdGggcmVzb2x2aW5nIGN1c3RvbSB0aGVuYWJsZXNcbiAgICAgIC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTgzMDU2NVxuICAgICAgLy8gd2UgY2FuJ3QgZGV0ZWN0IGl0IHN5bmNocm9ub3VzbHksIHNvIGp1c3QgY2hlY2sgdmVyc2lvbnNcbiAgICAgICYmIHY4LmluZGV4T2YoJzYuNicpICE9PSAwXG4gICAgICAmJiB1c2VyQWdlbnQuaW5kZXhPZignQ2hyb21lLzY2JykgPT09IC0xO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbn0oKTtcblxuLy8gaGVscGVyc1xudmFyIGlzVGhlbmFibGUgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIHRoZW47XG4gIHJldHVybiBpc09iamVjdChpdCkgJiYgdHlwZW9mICh0aGVuID0gaXQudGhlbikgPT0gJ2Z1bmN0aW9uJyA/IHRoZW4gOiBmYWxzZTtcbn07XG52YXIgbm90aWZ5ID0gZnVuY3Rpb24gKHByb21pc2UsIGlzUmVqZWN0KSB7XG4gIGlmIChwcm9taXNlLl9uKSByZXR1cm47XG4gIHByb21pc2UuX24gPSB0cnVlO1xuICB2YXIgY2hhaW4gPSBwcm9taXNlLl9jO1xuICBtaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgIHZhciB2YWx1ZSA9IHByb21pc2UuX3Y7XG4gICAgdmFyIG9rID0gcHJvbWlzZS5fcyA9PSAxO1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIgcnVuID0gZnVuY3Rpb24gKHJlYWN0aW9uKSB7XG4gICAgICB2YXIgaGFuZGxlciA9IG9rID8gcmVhY3Rpb24ub2sgOiByZWFjdGlvbi5mYWlsO1xuICAgICAgdmFyIHJlc29sdmUgPSByZWFjdGlvbi5yZXNvbHZlO1xuICAgICAgdmFyIHJlamVjdCA9IHJlYWN0aW9uLnJlamVjdDtcbiAgICAgIHZhciBkb21haW4gPSByZWFjdGlvbi5kb21haW47XG4gICAgICB2YXIgcmVzdWx0LCB0aGVuLCBleGl0ZWQ7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoaGFuZGxlcikge1xuICAgICAgICAgIGlmICghb2spIHtcbiAgICAgICAgICAgIGlmIChwcm9taXNlLl9oID09IDIpIG9uSGFuZGxlVW5oYW5kbGVkKHByb21pc2UpO1xuICAgICAgICAgICAgcHJvbWlzZS5faCA9IDE7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChoYW5kbGVyID09PSB0cnVlKSByZXN1bHQgPSB2YWx1ZTtcbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChkb21haW4pIGRvbWFpbi5lbnRlcigpO1xuICAgICAgICAgICAgcmVzdWx0ID0gaGFuZGxlcih2YWx1ZSk7IC8vIG1heSB0aHJvd1xuICAgICAgICAgICAgaWYgKGRvbWFpbikge1xuICAgICAgICAgICAgICBkb21haW4uZXhpdCgpO1xuICAgICAgICAgICAgICBleGl0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocmVzdWx0ID09PSByZWFjdGlvbi5wcm9taXNlKSB7XG4gICAgICAgICAgICByZWplY3QoVHlwZUVycm9yKCdQcm9taXNlLWNoYWluIGN5Y2xlJykpO1xuICAgICAgICAgIH0gZWxzZSBpZiAodGhlbiA9IGlzVGhlbmFibGUocmVzdWx0KSkge1xuICAgICAgICAgICAgdGhlbi5jYWxsKHJlc3VsdCwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICB9IGVsc2UgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICB9IGVsc2UgcmVqZWN0KHZhbHVlKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKGRvbWFpbiAmJiAhZXhpdGVkKSBkb21haW4uZXhpdCgpO1xuICAgICAgICByZWplY3QoZSk7XG4gICAgICB9XG4gICAgfTtcbiAgICB3aGlsZSAoY2hhaW4ubGVuZ3RoID4gaSkgcnVuKGNoYWluW2krK10pOyAvLyB2YXJpYWJsZSBsZW5ndGggLSBjYW4ndCB1c2UgZm9yRWFjaFxuICAgIHByb21pc2UuX2MgPSBbXTtcbiAgICBwcm9taXNlLl9uID0gZmFsc2U7XG4gICAgaWYgKGlzUmVqZWN0ICYmICFwcm9taXNlLl9oKSBvblVuaGFuZGxlZChwcm9taXNlKTtcbiAgfSk7XG59O1xudmFyIG9uVW5oYW5kbGVkID0gZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgdGFzay5jYWxsKGdsb2JhbCwgZnVuY3Rpb24gKCkge1xuICAgIHZhciB2YWx1ZSA9IHByb21pc2UuX3Y7XG4gICAgdmFyIHVuaGFuZGxlZCA9IGlzVW5oYW5kbGVkKHByb21pc2UpO1xuICAgIHZhciByZXN1bHQsIGhhbmRsZXIsIGNvbnNvbGU7XG4gICAgaWYgKHVuaGFuZGxlZCkge1xuICAgICAgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChpc05vZGUpIHtcbiAgICAgICAgICBwcm9jZXNzLmVtaXQoJ3VuaGFuZGxlZFJlamVjdGlvbicsIHZhbHVlLCBwcm9taXNlKTtcbiAgICAgICAgfSBlbHNlIGlmIChoYW5kbGVyID0gZ2xvYmFsLm9udW5oYW5kbGVkcmVqZWN0aW9uKSB7XG4gICAgICAgICAgaGFuZGxlcih7IHByb21pc2U6IHByb21pc2UsIHJlYXNvbjogdmFsdWUgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoKGNvbnNvbGUgPSBnbG9iYWwuY29uc29sZSkgJiYgY29uc29sZS5lcnJvcikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1VuaGFuZGxlZCBwcm9taXNlIHJlamVjdGlvbicsIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICAvLyBCcm93c2VycyBzaG91bGQgbm90IHRyaWdnZXIgYHJlamVjdGlvbkhhbmRsZWRgIGV2ZW50IGlmIGl0IHdhcyBoYW5kbGVkIGhlcmUsIE5vZGVKUyAtIHNob3VsZFxuICAgICAgcHJvbWlzZS5faCA9IGlzTm9kZSB8fCBpc1VuaGFuZGxlZChwcm9taXNlKSA/IDIgOiAxO1xuICAgIH0gcHJvbWlzZS5fYSA9IHVuZGVmaW5lZDtcbiAgICBpZiAodW5oYW5kbGVkICYmIHJlc3VsdC5lKSB0aHJvdyByZXN1bHQudjtcbiAgfSk7XG59O1xudmFyIGlzVW5oYW5kbGVkID0gZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgcmV0dXJuIHByb21pc2UuX2ggIT09IDEgJiYgKHByb21pc2UuX2EgfHwgcHJvbWlzZS5fYykubGVuZ3RoID09PSAwO1xufTtcbnZhciBvbkhhbmRsZVVuaGFuZGxlZCA9IGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gIHRhc2suY2FsbChnbG9iYWwsIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgaGFuZGxlcjtcbiAgICBpZiAoaXNOb2RlKSB7XG4gICAgICBwcm9jZXNzLmVtaXQoJ3JlamVjdGlvbkhhbmRsZWQnLCBwcm9taXNlKTtcbiAgICB9IGVsc2UgaWYgKGhhbmRsZXIgPSBnbG9iYWwub25yZWplY3Rpb25oYW5kbGVkKSB7XG4gICAgICBoYW5kbGVyKHsgcHJvbWlzZTogcHJvbWlzZSwgcmVhc29uOiBwcm9taXNlLl92IH0pO1xuICAgIH1cbiAgfSk7XG59O1xudmFyICRyZWplY3QgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgdmFyIHByb21pc2UgPSB0aGlzO1xuICBpZiAocHJvbWlzZS5fZCkgcmV0dXJuO1xuICBwcm9taXNlLl9kID0gdHJ1ZTtcbiAgcHJvbWlzZSA9IHByb21pc2UuX3cgfHwgcHJvbWlzZTsgLy8gdW53cmFwXG4gIHByb21pc2UuX3YgPSB2YWx1ZTtcbiAgcHJvbWlzZS5fcyA9IDI7XG4gIGlmICghcHJvbWlzZS5fYSkgcHJvbWlzZS5fYSA9IHByb21pc2UuX2Muc2xpY2UoKTtcbiAgbm90aWZ5KHByb21pc2UsIHRydWUpO1xufTtcbnZhciAkcmVzb2x2ZSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICB2YXIgcHJvbWlzZSA9IHRoaXM7XG4gIHZhciB0aGVuO1xuICBpZiAocHJvbWlzZS5fZCkgcmV0dXJuO1xuICBwcm9taXNlLl9kID0gdHJ1ZTtcbiAgcHJvbWlzZSA9IHByb21pc2UuX3cgfHwgcHJvbWlzZTsgLy8gdW53cmFwXG4gIHRyeSB7XG4gICAgaWYgKHByb21pc2UgPT09IHZhbHVlKSB0aHJvdyBUeXBlRXJyb3IoXCJQcm9taXNlIGNhbid0IGJlIHJlc29sdmVkIGl0c2VsZlwiKTtcbiAgICBpZiAodGhlbiA9IGlzVGhlbmFibGUodmFsdWUpKSB7XG4gICAgICBtaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgd3JhcHBlciA9IHsgX3c6IHByb21pc2UsIF9kOiBmYWxzZSB9OyAvLyB3cmFwXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdGhlbi5jYWxsKHZhbHVlLCBjdHgoJHJlc29sdmUsIHdyYXBwZXIsIDEpLCBjdHgoJHJlamVjdCwgd3JhcHBlciwgMSkpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgJHJlamVjdC5jYWxsKHdyYXBwZXIsIGUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJvbWlzZS5fdiA9IHZhbHVlO1xuICAgICAgcHJvbWlzZS5fcyA9IDE7XG4gICAgICBub3RpZnkocHJvbWlzZSwgZmFsc2UpO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgICRyZWplY3QuY2FsbCh7IF93OiBwcm9taXNlLCBfZDogZmFsc2UgfSwgZSk7IC8vIHdyYXBcbiAgfVxufTtcblxuLy8gY29uc3RydWN0b3IgcG9seWZpbGxcbmlmICghVVNFX05BVElWRSkge1xuICAvLyAyNS40LjMuMSBQcm9taXNlKGV4ZWN1dG9yKVxuICAkUHJvbWlzZSA9IGZ1bmN0aW9uIFByb21pc2UoZXhlY3V0b3IpIHtcbiAgICBhbkluc3RhbmNlKHRoaXMsICRQcm9taXNlLCBQUk9NSVNFLCAnX2gnKTtcbiAgICBhRnVuY3Rpb24oZXhlY3V0b3IpO1xuICAgIEludGVybmFsLmNhbGwodGhpcyk7XG4gICAgdHJ5IHtcbiAgICAgIGV4ZWN1dG9yKGN0eCgkcmVzb2x2ZSwgdGhpcywgMSksIGN0eCgkcmVqZWN0LCB0aGlzLCAxKSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAkcmVqZWN0LmNhbGwodGhpcywgZXJyKTtcbiAgICB9XG4gIH07XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuICBJbnRlcm5hbCA9IGZ1bmN0aW9uIFByb21pc2UoZXhlY3V0b3IpIHtcbiAgICB0aGlzLl9jID0gW107ICAgICAgICAgICAgIC8vIDwtIGF3YWl0aW5nIHJlYWN0aW9uc1xuICAgIHRoaXMuX2EgPSB1bmRlZmluZWQ7ICAgICAgLy8gPC0gY2hlY2tlZCBpbiBpc1VuaGFuZGxlZCByZWFjdGlvbnNcbiAgICB0aGlzLl9zID0gMDsgICAgICAgICAgICAgIC8vIDwtIHN0YXRlXG4gICAgdGhpcy5fZCA9IGZhbHNlOyAgICAgICAgICAvLyA8LSBkb25lXG4gICAgdGhpcy5fdiA9IHVuZGVmaW5lZDsgICAgICAvLyA8LSB2YWx1ZVxuICAgIHRoaXMuX2ggPSAwOyAgICAgICAgICAgICAgLy8gPC0gcmVqZWN0aW9uIHN0YXRlLCAwIC0gZGVmYXVsdCwgMSAtIGhhbmRsZWQsIDIgLSB1bmhhbmRsZWRcbiAgICB0aGlzLl9uID0gZmFsc2U7ICAgICAgICAgIC8vIDwtIG5vdGlmeVxuICB9O1xuICBJbnRlcm5hbC5wcm90b3R5cGUgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKSgkUHJvbWlzZS5wcm90b3R5cGUsIHtcbiAgICAvLyAyNS40LjUuMyBQcm9taXNlLnByb3RvdHlwZS50aGVuKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKVxuICAgIHRoZW46IGZ1bmN0aW9uIHRoZW4ob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpIHtcbiAgICAgIHZhciByZWFjdGlvbiA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KHNwZWNpZXNDb25zdHJ1Y3Rvcih0aGlzLCAkUHJvbWlzZSkpO1xuICAgICAgcmVhY3Rpb24ub2sgPSB0eXBlb2Ygb25GdWxmaWxsZWQgPT0gJ2Z1bmN0aW9uJyA/IG9uRnVsZmlsbGVkIDogdHJ1ZTtcbiAgICAgIHJlYWN0aW9uLmZhaWwgPSB0eXBlb2Ygb25SZWplY3RlZCA9PSAnZnVuY3Rpb24nICYmIG9uUmVqZWN0ZWQ7XG4gICAgICByZWFjdGlvbi5kb21haW4gPSBpc05vZGUgPyBwcm9jZXNzLmRvbWFpbiA6IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX2MucHVzaChyZWFjdGlvbik7XG4gICAgICBpZiAodGhpcy5fYSkgdGhpcy5fYS5wdXNoKHJlYWN0aW9uKTtcbiAgICAgIGlmICh0aGlzLl9zKSBub3RpZnkodGhpcywgZmFsc2UpO1xuICAgICAgcmV0dXJuIHJlYWN0aW9uLnByb21pc2U7XG4gICAgfSxcbiAgICAvLyAyNS40LjUuMSBQcm9taXNlLnByb3RvdHlwZS5jYXRjaChvblJlamVjdGVkKVxuICAgICdjYXRjaCc6IGZ1bmN0aW9uIChvblJlamVjdGVkKSB7XG4gICAgICByZXR1cm4gdGhpcy50aGVuKHVuZGVmaW5lZCwgb25SZWplY3RlZCk7XG4gICAgfVxuICB9KTtcbiAgT3duUHJvbWlzZUNhcGFiaWxpdHkgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHByb21pc2UgPSBuZXcgSW50ZXJuYWwoKTtcbiAgICB0aGlzLnByb21pc2UgPSBwcm9taXNlO1xuICAgIHRoaXMucmVzb2x2ZSA9IGN0eCgkcmVzb2x2ZSwgcHJvbWlzZSwgMSk7XG4gICAgdGhpcy5yZWplY3QgPSBjdHgoJHJlamVjdCwgcHJvbWlzZSwgMSk7XG4gIH07XG4gIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmYgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IGZ1bmN0aW9uIChDKSB7XG4gICAgcmV0dXJuIEMgPT09ICRQcm9taXNlIHx8IEMgPT09IFdyYXBwZXJcbiAgICAgID8gbmV3IE93blByb21pc2VDYXBhYmlsaXR5KEMpXG4gICAgICA6IG5ld0dlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eShDKTtcbiAgfTtcbn1cblxuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LlcgKyAkZXhwb3J0LkYgKiAhVVNFX05BVElWRSwgeyBQcm9taXNlOiAkUHJvbWlzZSB9KTtcbnJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJykoJFByb21pc2UsIFBST01JU0UpO1xucmVxdWlyZSgnLi9fc2V0LXNwZWNpZXMnKShQUk9NSVNFKTtcbldyYXBwZXIgPSByZXF1aXJlKCcuL19jb3JlJylbUFJPTUlTRV07XG5cbi8vIHN0YXRpY3NcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsIFBST01JU0UsIHtcbiAgLy8gMjUuNC40LjUgUHJvbWlzZS5yZWplY3QocilcbiAgcmVqZWN0OiBmdW5jdGlvbiByZWplY3Qocikge1xuICAgIHZhciBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkodGhpcyk7XG4gICAgdmFyICQkcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgJCRyZWplY3Qocik7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIChMSUJSQVJZIHx8ICFVU0VfTkFUSVZFKSwgUFJPTUlTRSwge1xuICAvLyAyNS40LjQuNiBQcm9taXNlLnJlc29sdmUoeClcbiAgcmVzb2x2ZTogZnVuY3Rpb24gcmVzb2x2ZSh4KSB7XG4gICAgcmV0dXJuIHByb21pc2VSZXNvbHZlKExJQlJBUlkgJiYgdGhpcyA9PT0gV3JhcHBlciA/ICRQcm9taXNlIDogdGhpcywgeCk7XG4gIH1cbn0pO1xuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhKFVTRV9OQVRJVkUgJiYgcmVxdWlyZSgnLi9faXRlci1kZXRlY3QnKShmdW5jdGlvbiAoaXRlcikge1xuICAkUHJvbWlzZS5hbGwoaXRlcilbJ2NhdGNoJ10oZW1wdHkpO1xufSkpLCBQUk9NSVNFLCB7XG4gIC8vIDI1LjQuNC4xIFByb21pc2UuYWxsKGl0ZXJhYmxlKVxuICBhbGw6IGZ1bmN0aW9uIGFsbChpdGVyYWJsZSkge1xuICAgIHZhciBDID0gdGhpcztcbiAgICB2YXIgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KEMpO1xuICAgIHZhciByZXNvbHZlID0gY2FwYWJpbGl0eS5yZXNvbHZlO1xuICAgIHZhciByZWplY3QgPSBjYXBhYmlsaXR5LnJlamVjdDtcbiAgICB2YXIgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgdmFsdWVzID0gW107XG4gICAgICB2YXIgaW5kZXggPSAwO1xuICAgICAgdmFyIHJlbWFpbmluZyA9IDE7XG4gICAgICBmb3JPZihpdGVyYWJsZSwgZmFsc2UsIGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gICAgICAgIHZhciAkaW5kZXggPSBpbmRleCsrO1xuICAgICAgICB2YXIgYWxyZWFkeUNhbGxlZCA9IGZhbHNlO1xuICAgICAgICB2YWx1ZXMucHVzaCh1bmRlZmluZWQpO1xuICAgICAgICByZW1haW5pbmcrKztcbiAgICAgICAgQy5yZXNvbHZlKHByb21pc2UpLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgaWYgKGFscmVhZHlDYWxsZWQpIHJldHVybjtcbiAgICAgICAgICBhbHJlYWR5Q2FsbGVkID0gdHJ1ZTtcbiAgICAgICAgICB2YWx1ZXNbJGluZGV4XSA9IHZhbHVlO1xuICAgICAgICAgIC0tcmVtYWluaW5nIHx8IHJlc29sdmUodmFsdWVzKTtcbiAgICAgICAgfSwgcmVqZWN0KTtcbiAgICAgIH0pO1xuICAgICAgLS1yZW1haW5pbmcgfHwgcmVzb2x2ZSh2YWx1ZXMpO1xuICAgIH0pO1xuICAgIGlmIChyZXN1bHQuZSkgcmVqZWN0KHJlc3VsdC52KTtcbiAgICByZXR1cm4gY2FwYWJpbGl0eS5wcm9taXNlO1xuICB9LFxuICAvLyAyNS40LjQuNCBQcm9taXNlLnJhY2UoaXRlcmFibGUpXG4gIHJhY2U6IGZ1bmN0aW9uIHJhY2UoaXRlcmFibGUpIHtcbiAgICB2YXIgQyA9IHRoaXM7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eShDKTtcbiAgICB2YXIgcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgdmFyIHJlc3VsdCA9IHBlcmZvcm0oZnVuY3Rpb24gKCkge1xuICAgICAgZm9yT2YoaXRlcmFibGUsIGZhbHNlLCBmdW5jdGlvbiAocHJvbWlzZSkge1xuICAgICAgICBDLnJlc29sdmUocHJvbWlzZSkudGhlbihjYXBhYmlsaXR5LnJlc29sdmUsIHJlamVjdCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBpZiAocmVzdWx0LmUpIHJlamVjdChyZXN1bHQudik7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///243\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar weak = __webpack_require__(121);\nvar validate = __webpack_require__(42);\nvar WEAK_SET = 'WeakSet';\n\n// 23.4 WeakSet Objects\n__webpack_require__(61)(WEAK_SET, function (get) {\n return function WeakSet() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.4.3.1 WeakSet.prototype.add(value)\n add: function add(value) {\n return weak.def(validate(this, WEAK_SET), value, true);\n }\n}, weak, false, true);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYud2Vhay1zZXQuanM/YzAyYiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLFdBQVcsbUJBQU8sQ0FBQyxHQUFvQjtBQUN2QyxlQUFlLG1CQUFPLENBQUMsRUFBd0I7QUFDL0M7O0FBRUE7QUFDQSxtQkFBTyxDQUFDLEVBQWU7QUFDdkIsNkJBQTZCLG1FQUFtRTtBQUNoRyxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjI0NC5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciB3ZWFrID0gcmVxdWlyZSgnLi9fY29sbGVjdGlvbi13ZWFrJyk7XG52YXIgdmFsaWRhdGUgPSByZXF1aXJlKCcuL192YWxpZGF0ZS1jb2xsZWN0aW9uJyk7XG52YXIgV0VBS19TRVQgPSAnV2Vha1NldCc7XG5cbi8vIDIzLjQgV2Vha1NldCBPYmplY3RzXG5yZXF1aXJlKCcuL19jb2xsZWN0aW9uJykoV0VBS19TRVQsIGZ1bmN0aW9uIChnZXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIFdlYWtTZXQoKSB7IHJldHVybiBnZXQodGhpcywgYXJndW1lbnRzLmxlbmd0aCA+IDAgPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQpOyB9O1xufSwge1xuICAvLyAyMy40LjMuMSBXZWFrU2V0LnByb3RvdHlwZS5hZGQodmFsdWUpXG4gIGFkZDogZnVuY3Rpb24gYWRkKHZhbHVlKSB7XG4gICAgcmV0dXJuIHdlYWsuZGVmKHZhbGlkYXRlKHRoaXMsIFdFQUtfU0VUKSwgdmFsdWUsIHRydWUpO1xuICB9XG59LCB3ZWFrLCBmYWxzZSwgdHJ1ZSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///244\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar $typed = __webpack_require__(62);\nvar buffer = __webpack_require__(92);\nvar anObject = __webpack_require__(1);\nvar toAbsoluteIndex = __webpack_require__(35);\nvar toLength = __webpack_require__(6);\nvar isObject = __webpack_require__(4);\nvar ArrayBuffer = __webpack_require__(2).ArrayBuffer;\nvar speciesConstructor = __webpack_require__(51);\nvar $ArrayBuffer = buffer.ArrayBuffer;\nvar $DataView = buffer.DataView;\nvar $isView = $typed.ABV && ArrayBuffer.isView;\nvar $slice = $ArrayBuffer.prototype.slice;\nvar VIEW = $typed.VIEW;\nvar ARRAY_BUFFER = 'ArrayBuffer';\n\n$export($export.G + $export.W + $export.F * (ArrayBuffer !== $ArrayBuffer), { ArrayBuffer: $ArrayBuffer });\n\n$export($export.S + $export.F * !$typed.CONSTR, ARRAY_BUFFER, {\n // 24.1.3.1 ArrayBuffer.isView(arg)\n isView: function isView(it) {\n return $isView && $isView(it) || isObject(it) && VIEW in it;\n }\n});\n\n$export($export.P + $export.U + $export.F * __webpack_require__(3)(function () {\n return !new $ArrayBuffer(2).slice(1, undefined).byteLength;\n}), ARRAY_BUFFER, {\n // 24.1.4.3 ArrayBuffer.prototype.slice(start, end)\n slice: function slice(start, end) {\n if ($slice !== undefined && end === undefined) return $slice.call(anObject(this), start); // FF fix\n var len = anObject(this).byteLength;\n var first = toAbsoluteIndex(start, len);\n var fin = toAbsoluteIndex(end === undefined ? len : end, len);\n var result = new (speciesConstructor(this, $ArrayBuffer))(toLength(fin - first));\n var viewS = new $DataView(this);\n var viewT = new $DataView(result);\n var index = 0;\n while (first < fin) {\n viewT.setUint8(index++, viewS.getUint8(first++));\n } return result;\n }\n});\n\n__webpack_require__(38)(ARRAY_BUFFER);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuYXJyYXktYnVmZmVyLmpzP2M2NmYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxhQUFhLG1CQUFPLENBQUMsRUFBVTtBQUMvQixhQUFhLG1CQUFPLENBQUMsRUFBaUI7QUFDdEMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsc0JBQXNCLG1CQUFPLENBQUMsRUFBc0I7QUFDcEQsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsa0JBQWtCLG1CQUFPLENBQUMsQ0FBVztBQUNyQyx5QkFBeUIsbUJBQU8sQ0FBQyxFQUF3QjtBQUN6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsNkVBQTZFLDRCQUE0Qjs7QUFFekc7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQsNENBQTRDLG1CQUFPLENBQUMsQ0FBVTtBQUM5RDtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsNkZBQTZGO0FBQzdGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLENBQUM7O0FBRUQsbUJBQU8sQ0FBQyxFQUFnQiIsImZpbGUiOiIyNDUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICR0eXBlZCA9IHJlcXVpcmUoJy4vX3R5cGVkJyk7XG52YXIgYnVmZmVyID0gcmVxdWlyZSgnLi9fdHlwZWQtYnVmZmVyJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuL190by1hYnNvbHV0ZS1pbmRleCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBBcnJheUJ1ZmZlciA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLkFycmF5QnVmZmVyO1xudmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4vX3NwZWNpZXMtY29uc3RydWN0b3InKTtcbnZhciAkQXJyYXlCdWZmZXIgPSBidWZmZXIuQXJyYXlCdWZmZXI7XG52YXIgJERhdGFWaWV3ID0gYnVmZmVyLkRhdGFWaWV3O1xudmFyICRpc1ZpZXcgPSAkdHlwZWQuQUJWICYmIEFycmF5QnVmZmVyLmlzVmlldztcbnZhciAkc2xpY2UgPSAkQXJyYXlCdWZmZXIucHJvdG90eXBlLnNsaWNlO1xudmFyIFZJRVcgPSAkdHlwZWQuVklFVztcbnZhciBBUlJBWV9CVUZGRVIgPSAnQXJyYXlCdWZmZXInO1xuXG4kZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuVyArICRleHBvcnQuRiAqIChBcnJheUJ1ZmZlciAhPT0gJEFycmF5QnVmZmVyKSwgeyBBcnJheUJ1ZmZlcjogJEFycmF5QnVmZmVyIH0pO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICEkdHlwZWQuQ09OU1RSLCBBUlJBWV9CVUZGRVIsIHtcbiAgLy8gMjQuMS4zLjEgQXJyYXlCdWZmZXIuaXNWaWV3KGFyZylcbiAgaXNWaWV3OiBmdW5jdGlvbiBpc1ZpZXcoaXQpIHtcbiAgICByZXR1cm4gJGlzVmlldyAmJiAkaXNWaWV3KGl0KSB8fCBpc09iamVjdChpdCkgJiYgVklFVyBpbiBpdDtcbiAgfVxufSk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5VICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAhbmV3ICRBcnJheUJ1ZmZlcigyKS5zbGljZSgxLCB1bmRlZmluZWQpLmJ5dGVMZW5ndGg7XG59KSwgQVJSQVlfQlVGRkVSLCB7XG4gIC8vIDI0LjEuNC4zIEFycmF5QnVmZmVyLnByb3RvdHlwZS5zbGljZShzdGFydCwgZW5kKVxuICBzbGljZTogZnVuY3Rpb24gc2xpY2Uoc3RhcnQsIGVuZCkge1xuICAgIGlmICgkc2xpY2UgIT09IHVuZGVmaW5lZCAmJiBlbmQgPT09IHVuZGVmaW5lZCkgcmV0dXJuICRzbGljZS5jYWxsKGFuT2JqZWN0KHRoaXMpLCBzdGFydCk7IC8vIEZGIGZpeFxuICAgIHZhciBsZW4gPSBhbk9iamVjdCh0aGlzKS5ieXRlTGVuZ3RoO1xuICAgIHZhciBmaXJzdCA9IHRvQWJzb2x1dGVJbmRleChzdGFydCwgbGVuKTtcbiAgICB2YXIgZmluID0gdG9BYnNvbHV0ZUluZGV4KGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuIDogZW5kLCBsZW4pO1xuICAgIHZhciByZXN1bHQgPSBuZXcgKHNwZWNpZXNDb25zdHJ1Y3Rvcih0aGlzLCAkQXJyYXlCdWZmZXIpKSh0b0xlbmd0aChmaW4gLSBmaXJzdCkpO1xuICAgIHZhciB2aWV3UyA9IG5ldyAkRGF0YVZpZXcodGhpcyk7XG4gICAgdmFyIHZpZXdUID0gbmV3ICREYXRhVmlldyhyZXN1bHQpO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgd2hpbGUgKGZpcnN0IDwgZmluKSB7XG4gICAgICB2aWV3VC5zZXRVaW50OChpbmRleCsrLCB2aWV3Uy5nZXRVaW50OChmaXJzdCsrKSk7XG4gICAgfSByZXR1cm4gcmVzdWx0O1xuICB9XG59KTtcblxucmVxdWlyZSgnLi9fc2V0LXNwZWNpZXMnKShBUlJBWV9CVUZGRVIpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///245\n")},function(module,exports,__webpack_require__){eval("var $export = __webpack_require__(0);\n$export($export.G + $export.W + $export.F * !__webpack_require__(62).ABV, {\n DataView: __webpack_require__(92).DataView\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuZGF0YS12aWV3LmpzPzI2MmYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsNkNBQTZDLG1CQUFPLENBQUMsRUFBVTtBQUMvRCxZQUFZLG1CQUFPLENBQUMsRUFBaUI7QUFDckMsQ0FBQyIsImZpbGUiOiIyNDYuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LlcgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fdHlwZWQnKS5BQlYsIHtcbiAgRGF0YVZpZXc6IHJlcXVpcmUoJy4vX3R5cGVkLWJ1ZmZlcicpLkRhdGFWaWV3XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///246\n")},function(module,exports,__webpack_require__){eval("__webpack_require__(27)('Int8', 1, function (init) {\n return function Int8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuaW50OC1hcnJheS5qcz9iMDVjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLG1CQUFPLENBQUMsRUFBZ0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyNDcuanMiLCJzb3VyY2VzQ29udGVudCI6WyJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdJbnQ4JywgMSwgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIEludDhBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///247\n")},function(module,exports,__webpack_require__){eval("__webpack_require__(27)('Uint8', 1, function (init) {\n return function Uint8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQudWludDgtYXJyYXkuanM/MzRlZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjQ4LmpzIiwic291cmNlc0NvbnRlbnQiOlsicmVxdWlyZSgnLi9fdHlwZWQtYXJyYXknKSgnVWludDgnLCAxLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gVWludDhBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///248\n")},function(module,exports,__webpack_require__){eval("__webpack_require__(27)('Uint8', 1, function (init) {\n return function Uint8ClampedArray(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n}, true);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQudWludDgtY2xhbXBlZC1hcnJheS5qcz82YWEyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLG1CQUFPLENBQUMsRUFBZ0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyNDkuanMiLCJzb3VyY2VzQ29udGVudCI6WyJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdVaW50OCcsIDEsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBVaW50OENsYW1wZWRBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSwgdHJ1ZSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///249\n")},function(module,exports,__webpack_require__){eval("__webpack_require__(27)('Int16', 2, function (init) {\n return function Int16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuaW50MTYtYXJyYXkuanM/MTVhYyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjUwLmpzIiwic291cmNlc0NvbnRlbnQiOlsicmVxdWlyZSgnLi9fdHlwZWQtYXJyYXknKSgnSW50MTYnLCAyLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gSW50MTZBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///250\n")},function(module,exports,__webpack_require__){eval("__webpack_require__(27)('Uint16', 2, function (init) {\n return function Uint16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQudWludDE2LWFycmF5LmpzP2FmNTYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsbUJBQU8sQ0FBQyxFQUFnQjtBQUN4QjtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjI1MS5qcyIsInNvdXJjZXNDb250ZW50IjpbInJlcXVpcmUoJy4vX3R5cGVkLWFycmF5JykoJ1VpbnQxNicsIDIsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBVaW50MTZBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///251\n")},function(module,exports,__webpack_require__){eval("__webpack_require__(27)('Int32', 4, function (init) {\n return function Int32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuaW50MzItYXJyYXkuanM/YjZlNCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjUyLmpzIiwic291cmNlc0NvbnRlbnQiOlsicmVxdWlyZSgnLi9fdHlwZWQtYXJyYXknKSgnSW50MzInLCA0LCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gSW50MzJBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///252\n")},function(module,exports,__webpack_require__){eval("__webpack_require__(27)('Uint32', 4, function (init) {\n return function Uint32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQudWludDMyLWFycmF5LmpzPzljMjkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsbUJBQU8sQ0FBQyxFQUFnQjtBQUN4QjtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjI1My5qcyIsInNvdXJjZXNDb250ZW50IjpbInJlcXVpcmUoJy4vX3R5cGVkLWFycmF5JykoJ1VpbnQzMicsIDQsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBVaW50MzJBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///253\n")},function(module,exports,__webpack_require__){eval("__webpack_require__(27)('Float32', 4, function (init) {\n return function Float32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuZmxvYXQzMi1hcnJheS5qcz82M2Q5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLG1CQUFPLENBQUMsRUFBZ0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyNTQuanMiLCJzb3VyY2VzQ29udGVudCI6WyJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdGbG9hdDMyJywgNCwgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIEZsb2F0MzJBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///254\n")},function(module,exports,__webpack_require__){eval("__webpack_require__(27)('Float64', 8, function (init) {\n return function Float64Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuZmxvYXQ2NC1hcnJheS5qcz80ZGRhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLG1CQUFPLENBQUMsRUFBZ0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyNTUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdGbG9hdDY0JywgOCwgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIEZsb2F0NjRBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///255\n")},function(module,exports,__webpack_require__){eval("// 26.1.1 Reflect.apply(target, thisArgument, argumentsList)\nvar $export = __webpack_require__(0);\nvar aFunction = __webpack_require__(10);\nvar anObject = __webpack_require__(1);\nvar rApply = (__webpack_require__(2).Reflect || {}).apply;\nvar fApply = Function.apply;\n// MS Edge argumentsList argument is optional\n$export($export.S + $export.F * !__webpack_require__(3)(function () {\n rApply(function () { /* empty */ });\n}), 'Reflect', {\n apply: function apply(target, thisArgument, argumentsList) {\n var T = aFunction(target);\n var L = anObject(argumentsList);\n return rApply ? rApply(T, thisArgument, L) : fApply.call(T, thisArgument, L);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5hcHBseS5qcz9kZjFiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2QyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxjQUFjLG1CQUFPLENBQUMsQ0FBVyxlQUFlO0FBQ2hEO0FBQ0E7QUFDQSxpQ0FBaUMsbUJBQU8sQ0FBQyxDQUFVO0FBQ25ELHNCQUFzQixjQUFjO0FBQ3BDLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyNTYuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyNi4xLjEgUmVmbGVjdC5hcHBseSh0YXJnZXQsIHRoaXNBcmd1bWVudCwgYXJndW1lbnRzTGlzdClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgckFwcGx5ID0gKHJlcXVpcmUoJy4vX2dsb2JhbCcpLlJlZmxlY3QgfHwge30pLmFwcGx5O1xudmFyIGZBcHBseSA9IEZ1bmN0aW9uLmFwcGx5O1xuLy8gTVMgRWRnZSBhcmd1bWVudHNMaXN0IGFyZ3VtZW50IGlzIG9wdGlvbmFsXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgckFwcGx5KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSk7XG59KSwgJ1JlZmxlY3QnLCB7XG4gIGFwcGx5OiBmdW5jdGlvbiBhcHBseSh0YXJnZXQsIHRoaXNBcmd1bWVudCwgYXJndW1lbnRzTGlzdCkge1xuICAgIHZhciBUID0gYUZ1bmN0aW9uKHRhcmdldCk7XG4gICAgdmFyIEwgPSBhbk9iamVjdChhcmd1bWVudHNMaXN0KTtcbiAgICByZXR1cm4gckFwcGx5ID8gckFwcGx5KFQsIHRoaXNBcmd1bWVudCwgTCkgOiBmQXBwbHkuY2FsbChULCB0aGlzQXJndW1lbnQsIEwpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///256\n")},function(module,exports,__webpack_require__){eval("// 26.1.2 Reflect.construct(target, argumentsList [, newTarget])\nvar $export = __webpack_require__(0);\nvar create = __webpack_require__(36);\nvar aFunction = __webpack_require__(10);\nvar anObject = __webpack_require__(1);\nvar isObject = __webpack_require__(4);\nvar fails = __webpack_require__(3);\nvar bind = __webpack_require__(101);\nvar rConstruct = (__webpack_require__(2).Reflect || {}).construct;\n\n// MS Edge supports only 2 arguments and argumentsList argument is optional\n// FF Nightly sets third argument as `new.target`, but does not create `this` from it\nvar NEW_TARGET_BUG = fails(function () {\n function F() { /* empty */ }\n return !(rConstruct(function () { /* empty */ }, [], F) instanceof F);\n});\nvar ARGS_BUG = !fails(function () {\n rConstruct(function () { /* empty */ });\n});\n\n$export($export.S + $export.F * (NEW_TARGET_BUG || ARGS_BUG), 'Reflect', {\n construct: function construct(Target, args /* , newTarget */) {\n aFunction(Target);\n anObject(args);\n var newTarget = arguments.length < 3 ? Target : aFunction(arguments[2]);\n if (ARGS_BUG && !NEW_TARGET_BUG) return rConstruct(Target, args, newTarget);\n if (Target == newTarget) {\n // w/o altered newTarget, optimization for 0-4 arguments\n switch (args.length) {\n case 0: return new Target();\n case 1: return new Target(args[0]);\n case 2: return new Target(args[0], args[1]);\n case 3: return new Target(args[0], args[1], args[2]);\n case 4: return new Target(args[0], args[1], args[2], args[3]);\n }\n // w/o altered newTarget, lot of arguments case\n var $args = [null];\n $args.push.apply($args, args);\n return new (bind.apply(Target, $args))();\n }\n // with altered newTarget, not support built-in constructors\n var proto = newTarget.prototype;\n var instance = create(isObject(proto) ? proto : Object.prototype);\n var result = Function.apply.call(Target, instance, args);\n return isObject(result) ? result : instance;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5jb25zdHJ1Y3QuanM/MjM5NyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGFBQWEsbUJBQU8sQ0FBQyxFQUFrQjtBQUN2QyxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLFlBQVksbUJBQU8sQ0FBQyxDQUFVO0FBQzlCLFdBQVcsbUJBQU8sQ0FBQyxHQUFTO0FBQzVCLGtCQUFrQixtQkFBTyxDQUFDLENBQVcsZUFBZTs7QUFFcEQ7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCLG1DQUFtQyxjQUFjO0FBQ2pELENBQUM7QUFDRDtBQUNBLDBCQUEwQixjQUFjO0FBQ3hDLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjU3LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjYuMS4yIFJlZmxlY3QuY29uc3RydWN0KHRhcmdldCwgYXJndW1lbnRzTGlzdCBbLCBuZXdUYXJnZXRdKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuL19vYmplY3QtY3JlYXRlJyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4vX2JpbmQnKTtcbnZhciByQ29uc3RydWN0ID0gKHJlcXVpcmUoJy4vX2dsb2JhbCcpLlJlZmxlY3QgfHwge30pLmNvbnN0cnVjdDtcblxuLy8gTVMgRWRnZSBzdXBwb3J0cyBvbmx5IDIgYXJndW1lbnRzIGFuZCBhcmd1bWVudHNMaXN0IGFyZ3VtZW50IGlzIG9wdGlvbmFsXG4vLyBGRiBOaWdodGx5IHNldHMgdGhpcmQgYXJndW1lbnQgYXMgYG5ldy50YXJnZXRgLCBidXQgZG9lcyBub3QgY3JlYXRlIGB0aGlzYCBmcm9tIGl0XG52YXIgTkVXX1RBUkdFVF9CVUcgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEYoKSB7IC8qIGVtcHR5ICovIH1cbiAgcmV0dXJuICEockNvbnN0cnVjdChmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0sIFtdLCBGKSBpbnN0YW5jZW9mIEYpO1xufSk7XG52YXIgQVJHU19CVUcgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICByQ29uc3RydWN0KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSk7XG59KTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAoTkVXX1RBUkdFVF9CVUcgfHwgQVJHU19CVUcpLCAnUmVmbGVjdCcsIHtcbiAgY29uc3RydWN0OiBmdW5jdGlvbiBjb25zdHJ1Y3QoVGFyZ2V0LCBhcmdzIC8qICwgbmV3VGFyZ2V0ICovKSB7XG4gICAgYUZ1bmN0aW9uKFRhcmdldCk7XG4gICAgYW5PYmplY3QoYXJncyk7XG4gICAgdmFyIG5ld1RhcmdldCA9IGFyZ3VtZW50cy5sZW5ndGggPCAzID8gVGFyZ2V0IDogYUZ1bmN0aW9uKGFyZ3VtZW50c1syXSk7XG4gICAgaWYgKEFSR1NfQlVHICYmICFORVdfVEFSR0VUX0JVRykgcmV0dXJuIHJDb25zdHJ1Y3QoVGFyZ2V0LCBhcmdzLCBuZXdUYXJnZXQpO1xuICAgIGlmIChUYXJnZXQgPT0gbmV3VGFyZ2V0KSB7XG4gICAgICAvLyB3L28gYWx0ZXJlZCBuZXdUYXJnZXQsIG9wdGltaXphdGlvbiBmb3IgMC00IGFyZ3VtZW50c1xuICAgICAgc3dpdGNoIChhcmdzLmxlbmd0aCkge1xuICAgICAgICBjYXNlIDA6IHJldHVybiBuZXcgVGFyZ2V0KCk7XG4gICAgICAgIGNhc2UgMTogcmV0dXJuIG5ldyBUYXJnZXQoYXJnc1swXSk7XG4gICAgICAgIGNhc2UgMjogcmV0dXJuIG5ldyBUYXJnZXQoYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgICAgIGNhc2UgMzogcmV0dXJuIG5ldyBUYXJnZXQoYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7XG4gICAgICAgIGNhc2UgNDogcmV0dXJuIG5ldyBUYXJnZXQoYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSk7XG4gICAgICB9XG4gICAgICAvLyB3L28gYWx0ZXJlZCBuZXdUYXJnZXQsIGxvdCBvZiBhcmd1bWVudHMgY2FzZVxuICAgICAgdmFyICRhcmdzID0gW251bGxdO1xuICAgICAgJGFyZ3MucHVzaC5hcHBseSgkYXJncywgYXJncyk7XG4gICAgICByZXR1cm4gbmV3IChiaW5kLmFwcGx5KFRhcmdldCwgJGFyZ3MpKSgpO1xuICAgIH1cbiAgICAvLyB3aXRoIGFsdGVyZWQgbmV3VGFyZ2V0LCBub3Qgc3VwcG9ydCBidWlsdC1pbiBjb25zdHJ1Y3RvcnNcbiAgICB2YXIgcHJvdG8gPSBuZXdUYXJnZXQucHJvdG90eXBlO1xuICAgIHZhciBpbnN0YW5jZSA9IGNyZWF0ZShpc09iamVjdChwcm90bykgPyBwcm90byA6IE9iamVjdC5wcm90b3R5cGUpO1xuICAgIHZhciByZXN1bHQgPSBGdW5jdGlvbi5hcHBseS5jYWxsKFRhcmdldCwgaW5zdGFuY2UsIGFyZ3MpO1xuICAgIHJldHVybiBpc09iamVjdChyZXN1bHQpID8gcmVzdWx0IDogaW5zdGFuY2U7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///257\n")},function(module,exports,__webpack_require__){eval("// 26.1.3 Reflect.defineProperty(target, propertyKey, attributes)\nvar dP = __webpack_require__(8);\nvar $export = __webpack_require__(0);\nvar anObject = __webpack_require__(1);\nvar toPrimitive = __webpack_require__(23);\n\n// MS Edge has broken Reflect.defineProperty - throwing instead of returning false\n$export($export.S + $export.F * __webpack_require__(3)(function () {\n // eslint-disable-next-line no-undef\n Reflect.defineProperty(dP.f({}, 1, { value: 1 }), 1, { value: 2 });\n}), 'Reflect', {\n defineProperty: function defineProperty(target, propertyKey, attributes) {\n anObject(target);\n propertyKey = toPrimitive(propertyKey, true);\n anObject(attributes);\n try {\n dP.f(target, propertyKey, attributes);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5kZWZpbmUtcHJvcGVydHkuanM/ODhjYSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLFNBQVMsbUJBQU8sQ0FBQyxDQUFjO0FBQy9CLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGtCQUFrQixtQkFBTyxDQUFDLEVBQWlCOztBQUUzQztBQUNBLGdDQUFnQyxtQkFBTyxDQUFDLENBQVU7QUFDbEQ7QUFDQSxnQ0FBZ0MsTUFBTSxXQUFXLE9BQU8sV0FBVztBQUNuRSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyNTguanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyNi4xLjMgUmVmbGVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5S2V5LCBhdHRyaWJ1dGVzKVxudmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcblxuLy8gTVMgRWRnZSBoYXMgYnJva2VuIFJlZmxlY3QuZGVmaW5lUHJvcGVydHkgLSB0aHJvd2luZyBpbnN0ZWFkIG9mIHJldHVybmluZyBmYWxzZVxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gIFJlZmxlY3QuZGVmaW5lUHJvcGVydHkoZFAuZih7fSwgMSwgeyB2YWx1ZTogMSB9KSwgMSwgeyB2YWx1ZTogMiB9KTtcbn0pLCAnUmVmbGVjdCcsIHtcbiAgZGVmaW5lUHJvcGVydHk6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHlLZXksIGF0dHJpYnV0ZXMpIHtcbiAgICBhbk9iamVjdCh0YXJnZXQpO1xuICAgIHByb3BlcnR5S2V5ID0gdG9QcmltaXRpdmUocHJvcGVydHlLZXksIHRydWUpO1xuICAgIGFuT2JqZWN0KGF0dHJpYnV0ZXMpO1xuICAgIHRyeSB7XG4gICAgICBkUC5mKHRhcmdldCwgcHJvcGVydHlLZXksIGF0dHJpYnV0ZXMpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///258\n")},function(module,exports,__webpack_require__){eval("// 26.1.4 Reflect.deleteProperty(target, propertyKey)\nvar $export = __webpack_require__(0);\nvar gOPD = __webpack_require__(16).f;\nvar anObject = __webpack_require__(1);\n\n$export($export.S, 'Reflect', {\n deleteProperty: function deleteProperty(target, propertyKey) {\n var desc = gOPD(anObject(target), propertyKey);\n return desc && !desc.configurable ? false : delete target[propertyKey];\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5kZWxldGUtcHJvcGVydHkuanM/YmExNiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLFdBQVcsbUJBQU8sQ0FBQyxFQUFnQjtBQUNuQyxlQUFlLG1CQUFPLENBQUMsQ0FBYzs7QUFFckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjU5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjYuMS40IFJlZmxlY3QuZGVsZXRlUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eUtleSlcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZ09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJykuZjtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7XG4gIGRlbGV0ZVByb3BlcnR5OiBmdW5jdGlvbiBkZWxldGVQcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5S2V5KSB7XG4gICAgdmFyIGRlc2MgPSBnT1BEKGFuT2JqZWN0KHRhcmdldCksIHByb3BlcnR5S2V5KTtcbiAgICByZXR1cm4gZGVzYyAmJiAhZGVzYy5jb25maWd1cmFibGUgPyBmYWxzZSA6IGRlbGV0ZSB0YXJnZXRbcHJvcGVydHlLZXldO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///259\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// 26.1.5 Reflect.enumerate(target)\nvar $export = __webpack_require__(0);\nvar anObject = __webpack_require__(1);\nvar Enumerate = function (iterated) {\n this._t = anObject(iterated); // target\n this._i = 0; // next index\n var keys = this._k = []; // keys\n var key;\n for (key in iterated) keys.push(key);\n};\n__webpack_require__(78)(Enumerate, 'Object', function () {\n var that = this;\n var keys = that._k;\n var key;\n do {\n if (that._i >= keys.length) return { value: undefined, done: true };\n } while (!((key = keys[that._i++]) in that._t));\n return { value: key, done: false };\n});\n\n$export($export.S, 'Reflect', {\n enumerate: function enumerate(target) {\n return new Enumerate(target);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5lbnVtZXJhdGUuanM/N2ZmNiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckM7QUFDQSwrQkFBK0I7QUFDL0IsY0FBYztBQUNkLDBCQUEwQjtBQUMxQjtBQUNBO0FBQ0E7QUFDQSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0NBQXdDO0FBQ3hDLEdBQUc7QUFDSCxVQUFVO0FBQ1YsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjYwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gMjYuMS41IFJlZmxlY3QuZW51bWVyYXRlKHRhcmdldClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBFbnVtZXJhdGUgPSBmdW5jdGlvbiAoaXRlcmF0ZWQpIHtcbiAgdGhpcy5fdCA9IGFuT2JqZWN0KGl0ZXJhdGVkKTsgLy8gdGFyZ2V0XG4gIHRoaXMuX2kgPSAwOyAgICAgICAgICAgICAgICAgIC8vIG5leHQgaW5kZXhcbiAgdmFyIGtleXMgPSB0aGlzLl9rID0gW107ICAgICAgLy8ga2V5c1xuICB2YXIga2V5O1xuICBmb3IgKGtleSBpbiBpdGVyYXRlZCkga2V5cy5wdXNoKGtleSk7XG59O1xucmVxdWlyZSgnLi9faXRlci1jcmVhdGUnKShFbnVtZXJhdGUsICdPYmplY3QnLCBmdW5jdGlvbiAoKSB7XG4gIHZhciB0aGF0ID0gdGhpcztcbiAgdmFyIGtleXMgPSB0aGF0Ll9rO1xuICB2YXIga2V5O1xuICBkbyB7XG4gICAgaWYgKHRoYXQuX2kgPj0ga2V5cy5sZW5ndGgpIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfTtcbiAgfSB3aGlsZSAoISgoa2V5ID0ga2V5c1t0aGF0Ll9pKytdKSBpbiB0aGF0Ll90KSk7XG4gIHJldHVybiB7IHZhbHVlOiBrZXksIGRvbmU6IGZhbHNlIH07XG59KTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0Jywge1xuICBlbnVtZXJhdGU6IGZ1bmN0aW9uIGVudW1lcmF0ZSh0YXJnZXQpIHtcbiAgICByZXR1cm4gbmV3IEVudW1lcmF0ZSh0YXJnZXQpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///260\n")},function(module,exports,__webpack_require__){eval("// 26.1.6 Reflect.get(target, propertyKey [, receiver])\nvar gOPD = __webpack_require__(16);\nvar getPrototypeOf = __webpack_require__(17);\nvar has = __webpack_require__(14);\nvar $export = __webpack_require__(0);\nvar isObject = __webpack_require__(4);\nvar anObject = __webpack_require__(1);\n\nfunction get(target, propertyKey /* , receiver */) {\n var receiver = arguments.length < 3 ? target : arguments[2];\n var desc, proto;\n if (anObject(target) === receiver) return target[propertyKey];\n if (desc = gOPD.f(target, propertyKey)) return has(desc, 'value')\n ? desc.value\n : desc.get !== undefined\n ? desc.get.call(receiver)\n : undefined;\n if (isObject(proto = getPrototypeOf(target))) return get(proto, propertyKey, receiver);\n}\n\n$export($export.S, 'Reflect', { get: get });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5nZXQuanM/ZDE4NSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLFdBQVcsbUJBQU8sQ0FBQyxFQUFnQjtBQUNuQyxxQkFBcUIsbUJBQU8sQ0FBQyxFQUFlO0FBQzVDLFVBQVUsbUJBQU8sQ0FBQyxFQUFRO0FBQzFCLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjOztBQUVyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLCtCQUErQixXQUFXIiwiZmlsZSI6IjI2MS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDI2LjEuNiBSZWZsZWN0LmdldCh0YXJnZXQsIHByb3BlcnR5S2V5IFssIHJlY2VpdmVyXSlcbnZhciBnT1BEID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xuXG5mdW5jdGlvbiBnZXQodGFyZ2V0LCBwcm9wZXJ0eUtleSAvKiAsIHJlY2VpdmVyICovKSB7XG4gIHZhciByZWNlaXZlciA9IGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdGFyZ2V0IDogYXJndW1lbnRzWzJdO1xuICB2YXIgZGVzYywgcHJvdG87XG4gIGlmIChhbk9iamVjdCh0YXJnZXQpID09PSByZWNlaXZlcikgcmV0dXJuIHRhcmdldFtwcm9wZXJ0eUtleV07XG4gIGlmIChkZXNjID0gZ09QRC5mKHRhcmdldCwgcHJvcGVydHlLZXkpKSByZXR1cm4gaGFzKGRlc2MsICd2YWx1ZScpXG4gICAgPyBkZXNjLnZhbHVlXG4gICAgOiBkZXNjLmdldCAhPT0gdW5kZWZpbmVkXG4gICAgICA/IGRlc2MuZ2V0LmNhbGwocmVjZWl2ZXIpXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgaWYgKGlzT2JqZWN0KHByb3RvID0gZ2V0UHJvdG90eXBlT2YodGFyZ2V0KSkpIHJldHVybiBnZXQocHJvdG8sIHByb3BlcnR5S2V5LCByZWNlaXZlcik7XG59XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHsgZ2V0OiBnZXQgfSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///261\n")},function(module,exports,__webpack_require__){eval("// 26.1.7 Reflect.getOwnPropertyDescriptor(target, propertyKey)\nvar gOPD = __webpack_require__(16);\nvar $export = __webpack_require__(0);\nvar anObject = __webpack_require__(1);\n\n$export($export.S, 'Reflect', {\n getOwnPropertyDescriptor: function getOwnPropertyDescriptor(target, propertyKey) {\n return gOPD.f(anObject(target), propertyKey);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanM/ZWJkZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLFdBQVcsbUJBQU8sQ0FBQyxFQUFnQjtBQUNuQyxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxlQUFlLG1CQUFPLENBQUMsQ0FBYzs7QUFFckM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjI2Mi5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDI2LjEuNyBSZWZsZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIHByb3BlcnR5S2V5KVxudmFyIGdPUEQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7XG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgcHJvcGVydHlLZXkpIHtcbiAgICByZXR1cm4gZ09QRC5mKGFuT2JqZWN0KHRhcmdldCksIHByb3BlcnR5S2V5KTtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///262\n")},function(module,exports,__webpack_require__){eval("// 26.1.8 Reflect.getPrototypeOf(target)\nvar $export = __webpack_require__(0);\nvar getProto = __webpack_require__(17);\nvar anObject = __webpack_require__(1);\n\n$export($export.S, 'Reflect', {\n getPrototypeOf: function getPrototypeOf(target) {\n return getProto(anObject(target));\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5nZXQtcHJvdG90eXBlLW9mLmpzPzJkMzQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxlQUFlLG1CQUFPLENBQUMsRUFBZTtBQUN0QyxlQUFlLG1CQUFPLENBQUMsQ0FBYzs7QUFFckM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjI2My5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDI2LjEuOCBSZWZsZWN0LmdldFByb3RvdHlwZU9mKHRhcmdldClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZ2V0UHJvdG8gPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0Jywge1xuICBnZXRQcm90b3R5cGVPZjogZnVuY3Rpb24gZ2V0UHJvdG90eXBlT2YodGFyZ2V0KSB7XG4gICAgcmV0dXJuIGdldFByb3RvKGFuT2JqZWN0KHRhcmdldCkpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///263\n")},function(module,exports,__webpack_require__){eval("// 26.1.9 Reflect.has(target, propertyKey)\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Reflect', {\n has: function has(target, propertyKey) {\n return propertyKey in target;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5oYXMuanM/ZjZiMyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXOztBQUVqQztBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjY0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjYuMS45IFJlZmxlY3QuaGFzKHRhcmdldCwgcHJvcGVydHlLZXkpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7XG4gIGhhczogZnVuY3Rpb24gaGFzKHRhcmdldCwgcHJvcGVydHlLZXkpIHtcbiAgICByZXR1cm4gcHJvcGVydHlLZXkgaW4gdGFyZ2V0O1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///264\n")},function(module,exports,__webpack_require__){eval("// 26.1.10 Reflect.isExtensible(target)\nvar $export = __webpack_require__(0);\nvar anObject = __webpack_require__(1);\nvar $isExtensible = Object.isExtensible;\n\n$export($export.S, 'Reflect', {\n isExtensible: function isExtensible(target) {\n anObject(target);\n return $isExtensible ? $isExtensible(target) : true;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5pcy1leHRlbnNpYmxlLmpzPzIyNTEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyNjUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyNi4xLjEwIFJlZmxlY3QuaXNFeHRlbnNpYmxlKHRhcmdldClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciAkaXNFeHRlbnNpYmxlID0gT2JqZWN0LmlzRXh0ZW5zaWJsZTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0Jywge1xuICBpc0V4dGVuc2libGU6IGZ1bmN0aW9uIGlzRXh0ZW5zaWJsZSh0YXJnZXQpIHtcbiAgICBhbk9iamVjdCh0YXJnZXQpO1xuICAgIHJldHVybiAkaXNFeHRlbnNpYmxlID8gJGlzRXh0ZW5zaWJsZSh0YXJnZXQpIDogdHJ1ZTtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///265\n")},function(module,exports,__webpack_require__){eval("// 26.1.11 Reflect.ownKeys(target)\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Reflect', { ownKeys: __webpack_require__(123) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5vd24ta2V5cy5qcz9jNjk4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDLCtCQUErQixVQUFVLG1CQUFPLENBQUMsR0FBYSxHQUFHIiwiZmlsZSI6IjI2Ni5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDI2LjEuMTEgUmVmbGVjdC5vd25LZXlzKHRhcmdldClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHsgb3duS2V5czogcmVxdWlyZSgnLi9fb3duLWtleXMnKSB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///266\n")},function(module,exports,__webpack_require__){eval("// 26.1.12 Reflect.preventExtensions(target)\nvar $export = __webpack_require__(0);\nvar anObject = __webpack_require__(1);\nvar $preventExtensions = Object.preventExtensions;\n\n$export($export.S, 'Reflect', {\n preventExtensions: function preventExtensions(target) {\n anObject(target);\n try {\n if ($preventExtensions) $preventExtensions(target);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5wcmV2ZW50LWV4dGVuc2lvbnMuanM/YTE5ZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjI2Ny5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDI2LjEuMTIgUmVmbGVjdC5wcmV2ZW50RXh0ZW5zaW9ucyh0YXJnZXQpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgJHByZXZlbnRFeHRlbnNpb25zID0gT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7XG4gIHByZXZlbnRFeHRlbnNpb25zOiBmdW5jdGlvbiBwcmV2ZW50RXh0ZW5zaW9ucyh0YXJnZXQpIHtcbiAgICBhbk9iamVjdCh0YXJnZXQpO1xuICAgIHRyeSB7XG4gICAgICBpZiAoJHByZXZlbnRFeHRlbnNpb25zKSAkcHJldmVudEV4dGVuc2lvbnModGFyZ2V0KTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///267\n")},function(module,exports,__webpack_require__){eval("// 26.1.13 Reflect.set(target, propertyKey, V [, receiver])\nvar dP = __webpack_require__(8);\nvar gOPD = __webpack_require__(16);\nvar getPrototypeOf = __webpack_require__(17);\nvar has = __webpack_require__(14);\nvar $export = __webpack_require__(0);\nvar createDesc = __webpack_require__(32);\nvar anObject = __webpack_require__(1);\nvar isObject = __webpack_require__(4);\n\nfunction set(target, propertyKey, V /* , receiver */) {\n var receiver = arguments.length < 4 ? target : arguments[3];\n var ownDesc = gOPD.f(anObject(target), propertyKey);\n var existingDescriptor, proto;\n if (!ownDesc) {\n if (isObject(proto = getPrototypeOf(target))) {\n return set(proto, propertyKey, V, receiver);\n }\n ownDesc = createDesc(0);\n }\n if (has(ownDesc, 'value')) {\n if (ownDesc.writable === false || !isObject(receiver)) return false;\n if (existingDescriptor = gOPD.f(receiver, propertyKey)) {\n if (existingDescriptor.get || existingDescriptor.set || existingDescriptor.writable === false) return false;\n existingDescriptor.value = V;\n dP.f(receiver, propertyKey, existingDescriptor);\n } else dP.f(receiver, propertyKey, createDesc(0, V));\n return true;\n }\n return ownDesc.set === undefined ? false : (ownDesc.set.call(receiver, V), true);\n}\n\n$export($export.S, 'Reflect', { set: set });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5zZXQuanM/OTI1MyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLFNBQVMsbUJBQU8sQ0FBQyxDQUFjO0FBQy9CLFdBQVcsbUJBQU8sQ0FBQyxFQUFnQjtBQUNuQyxxQkFBcUIsbUJBQU8sQ0FBQyxFQUFlO0FBQzVDLFVBQVUsbUJBQU8sQ0FBQyxFQUFRO0FBQzFCLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGlCQUFpQixtQkFBTyxDQUFDLEVBQWtCO0FBQzNDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjOztBQUVyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSwrQkFBK0IsV0FBVyIsImZpbGUiOiIyNjguanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyNi4xLjEzIFJlZmxlY3Quc2V0KHRhcmdldCwgcHJvcGVydHlLZXksIFYgWywgcmVjZWl2ZXJdKVxudmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG52YXIgZ09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGNyZWF0ZURlc2MgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xuXG5mdW5jdGlvbiBzZXQodGFyZ2V0LCBwcm9wZXJ0eUtleSwgViAvKiAsIHJlY2VpdmVyICovKSB7XG4gIHZhciByZWNlaXZlciA9IGFyZ3VtZW50cy5sZW5ndGggPCA0ID8gdGFyZ2V0IDogYXJndW1lbnRzWzNdO1xuICB2YXIgb3duRGVzYyA9IGdPUEQuZihhbk9iamVjdCh0YXJnZXQpLCBwcm9wZXJ0eUtleSk7XG4gIHZhciBleGlzdGluZ0Rlc2NyaXB0b3IsIHByb3RvO1xuICBpZiAoIW93bkRlc2MpIHtcbiAgICBpZiAoaXNPYmplY3QocHJvdG8gPSBnZXRQcm90b3R5cGVPZih0YXJnZXQpKSkge1xuICAgICAgcmV0dXJuIHNldChwcm90bywgcHJvcGVydHlLZXksIFYsIHJlY2VpdmVyKTtcbiAgICB9XG4gICAgb3duRGVzYyA9IGNyZWF0ZURlc2MoMCk7XG4gIH1cbiAgaWYgKGhhcyhvd25EZXNjLCAndmFsdWUnKSkge1xuICAgIGlmIChvd25EZXNjLndyaXRhYmxlID09PSBmYWxzZSB8fCAhaXNPYmplY3QocmVjZWl2ZXIpKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKGV4aXN0aW5nRGVzY3JpcHRvciA9IGdPUEQuZihyZWNlaXZlciwgcHJvcGVydHlLZXkpKSB7XG4gICAgICBpZiAoZXhpc3RpbmdEZXNjcmlwdG9yLmdldCB8fCBleGlzdGluZ0Rlc2NyaXB0b3Iuc2V0IHx8IGV4aXN0aW5nRGVzY3JpcHRvci53cml0YWJsZSA9PT0gZmFsc2UpIHJldHVybiBmYWxzZTtcbiAgICAgIGV4aXN0aW5nRGVzY3JpcHRvci52YWx1ZSA9IFY7XG4gICAgICBkUC5mKHJlY2VpdmVyLCBwcm9wZXJ0eUtleSwgZXhpc3RpbmdEZXNjcmlwdG9yKTtcbiAgICB9IGVsc2UgZFAuZihyZWNlaXZlciwgcHJvcGVydHlLZXksIGNyZWF0ZURlc2MoMCwgVikpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBvd25EZXNjLnNldCA9PT0gdW5kZWZpbmVkID8gZmFsc2UgOiAob3duRGVzYy5zZXQuY2FsbChyZWNlaXZlciwgViksIHRydWUpO1xufVxuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7IHNldDogc2V0IH0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///268\n")},function(module,exports,__webpack_require__){eval("// 26.1.14 Reflect.setPrototypeOf(target, proto)\nvar $export = __webpack_require__(0);\nvar setProto = __webpack_require__(71);\n\nif (setProto) $export($export.S, 'Reflect', {\n setPrototypeOf: function setPrototypeOf(target, proto) {\n setProto.check(target, proto);\n try {\n setProto.set(target, proto);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5zZXQtcHJvdG90eXBlLW9mLmpzPzkyNzUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxlQUFlLG1CQUFPLENBQUMsRUFBYzs7QUFFckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjY5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjYuMS4xNCBSZWZsZWN0LnNldFByb3RvdHlwZU9mKHRhcmdldCwgcHJvdG8pXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHNldFByb3RvID0gcmVxdWlyZSgnLi9fc2V0LXByb3RvJyk7XG5cbmlmIChzZXRQcm90bykgJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0Jywge1xuICBzZXRQcm90b3R5cGVPZjogZnVuY3Rpb24gc2V0UHJvdG90eXBlT2YodGFyZ2V0LCBwcm90bykge1xuICAgIHNldFByb3RvLmNoZWNrKHRhcmdldCwgcHJvdG8pO1xuICAgIHRyeSB7XG4gICAgICBzZXRQcm90by5zZXQodGFyZ2V0LCBwcm90byk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///269\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// https://github.com/tc39/Array.prototype.includes\nvar $export = __webpack_require__(0);\nvar $includes = __webpack_require__(52)(true);\n\n$export($export.P, 'Array', {\n includes: function includes(el /* , fromIndex = 0 */) {\n return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\n__webpack_require__(31)('includes');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuYXJyYXkuaW5jbHVkZXMuanM/Njc2MiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBbUI7O0FBRTNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRCxtQkFBTyxDQUFDLEVBQXVCIiwiZmlsZSI6IjI3MC5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L0FycmF5LnByb3RvdHlwZS5pbmNsdWRlc1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkaW5jbHVkZXMgPSByZXF1aXJlKCcuL19hcnJheS1pbmNsdWRlcycpKHRydWUpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCwgJ0FycmF5Jywge1xuICBpbmNsdWRlczogZnVuY3Rpb24gaW5jbHVkZXMoZWwgLyogLCBmcm9tSW5kZXggPSAwICovKSB7XG4gICAgcmV0dXJuICRpbmNsdWRlcyh0aGlzLCBlbCwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcblxucmVxdWlyZSgnLi9fYWRkLXRvLXVuc2NvcGFibGVzJykoJ2luY2x1ZGVzJyk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///270\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// https://tc39.github.io/proposal-flatMap/#sec-Array.prototype.flatMap\nvar $export = __webpack_require__(0);\nvar flattenIntoArray = __webpack_require__(124);\nvar toObject = __webpack_require__(9);\nvar toLength = __webpack_require__(6);\nvar aFunction = __webpack_require__(10);\nvar arraySpeciesCreate = __webpack_require__(84);\n\n$export($export.P, 'Array', {\n flatMap: function flatMap(callbackfn /* , thisArg */) {\n var O = toObject(this);\n var sourceLen, A;\n aFunction(callbackfn);\n sourceLen = toLength(O.length);\n A = arraySpeciesCreate(O, 0);\n flattenIntoArray(A, O, O, sourceLen, 0, 1, callbackfn, arguments[1]);\n return A;\n }\n});\n\n__webpack_require__(31)('flatMap');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuYXJyYXkuZmxhdC1tYXAuanM/ZTk1NiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsdUJBQXVCLG1CQUFPLENBQUMsR0FBdUI7QUFDdEQsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2Qyx5QkFBeUIsbUJBQU8sQ0FBQyxFQUF5Qjs7QUFFMUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVELG1CQUFPLENBQUMsRUFBdUIiLCJmaWxlIjoiMjcxLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1mbGF0TWFwLyNzZWMtQXJyYXkucHJvdG90eXBlLmZsYXRNYXBcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZmxhdHRlbkludG9BcnJheSA9IHJlcXVpcmUoJy4vX2ZsYXR0ZW4taW50by1hcnJheScpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgYXJyYXlTcGVjaWVzQ3JlYXRlID0gcmVxdWlyZSgnLi9fYXJyYXktc3BlY2llcy1jcmVhdGUnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdBcnJheScsIHtcbiAgZmxhdE1hcDogZnVuY3Rpb24gZmxhdE1hcChjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gICAgdmFyIHNvdXJjZUxlbiwgQTtcbiAgICBhRnVuY3Rpb24oY2FsbGJhY2tmbik7XG4gICAgc291cmNlTGVuID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICAgIEEgPSBhcnJheVNwZWNpZXNDcmVhdGUoTywgMCk7XG4gICAgZmxhdHRlbkludG9BcnJheShBLCBPLCBPLCBzb3VyY2VMZW4sIDAsIDEsIGNhbGxiYWNrZm4sIGFyZ3VtZW50c1sxXSk7XG4gICAgcmV0dXJuIEE7XG4gIH1cbn0pO1xuXG5yZXF1aXJlKCcuL19hZGQtdG8tdW5zY29wYWJsZXMnKSgnZmxhdE1hcCcpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///271\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// https://tc39.github.io/proposal-flatMap/#sec-Array.prototype.flatten\nvar $export = __webpack_require__(0);\nvar flattenIntoArray = __webpack_require__(124);\nvar toObject = __webpack_require__(9);\nvar toLength = __webpack_require__(6);\nvar toInteger = __webpack_require__(21);\nvar arraySpeciesCreate = __webpack_require__(84);\n\n$export($export.P, 'Array', {\n flatten: function flatten(/* depthArg = 1 */) {\n var depthArg = arguments[0];\n var O = toObject(this);\n var sourceLen = toLength(O.length);\n var A = arraySpeciesCreate(O, 0);\n flattenIntoArray(A, O, O, sourceLen, 0, depthArg === undefined ? 1 : toInteger(depthArg));\n return A;\n }\n});\n\n__webpack_require__(31)('flatten');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuYXJyYXkuZmxhdHRlbi5qcz83MWYxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyx1QkFBdUIsbUJBQU8sQ0FBQyxHQUF1QjtBQUN0RCxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDLHlCQUF5QixtQkFBTyxDQUFDLEVBQXlCOztBQUUxRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVELG1CQUFPLENBQUMsRUFBdUIiLCJmaWxlIjoiMjcyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1mbGF0TWFwLyNzZWMtQXJyYXkucHJvdG90eXBlLmZsYXR0ZW5cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZmxhdHRlbkludG9BcnJheSA9IHJlcXVpcmUoJy4vX2ZsYXR0ZW4taW50by1hcnJheScpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgYXJyYXlTcGVjaWVzQ3JlYXRlID0gcmVxdWlyZSgnLi9fYXJyYXktc3BlY2llcy1jcmVhdGUnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdBcnJheScsIHtcbiAgZmxhdHRlbjogZnVuY3Rpb24gZmxhdHRlbigvKiBkZXB0aEFyZyA9IDEgKi8pIHtcbiAgICB2YXIgZGVwdGhBcmcgPSBhcmd1bWVudHNbMF07XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgc291cmNlTGVuID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICAgIHZhciBBID0gYXJyYXlTcGVjaWVzQ3JlYXRlKE8sIDApO1xuICAgIGZsYXR0ZW5JbnRvQXJyYXkoQSwgTywgTywgc291cmNlTGVuLCAwLCBkZXB0aEFyZyA9PT0gdW5kZWZpbmVkID8gMSA6IHRvSW50ZWdlcihkZXB0aEFyZykpO1xuICAgIHJldHVybiBBO1xuICB9XG59KTtcblxucmVxdWlyZSgnLi9fYWRkLXRvLXVuc2NvcGFibGVzJykoJ2ZsYXR0ZW4nKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///272\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// https://github.com/mathiasbynens/String.prototype.at\nvar $export = __webpack_require__(0);\nvar $at = __webpack_require__(55)(true);\nvar $fails = __webpack_require__(3);\n\nvar FORCED = $fails(function () {\n return '𠮷'.at(0) !== '𠮷';\n});\n\n$export($export.P + $export.F * FORCED, 'String', {\n at: function at(pos) {\n return $at(this, pos);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLmF0LmpzPzM1MzUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLFVBQVUsbUJBQU8sQ0FBQyxFQUFjO0FBQ2hDLGFBQWEsbUJBQU8sQ0FBQyxDQUFVOztBQUUvQjtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjczLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL21hdGhpYXNieW5lbnMvU3RyaW5nLnByb3RvdHlwZS5hdFxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkYXQgPSByZXF1aXJlKCcuL19zdHJpbmctYXQnKSh0cnVlKTtcbnZhciAkZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xuXG52YXIgRk9SQ0VEID0gJGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICfwoK63Jy5hdCgwKSAhPT0gJ/CgrrcnO1xufSk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogRk9SQ0VELCAnU3RyaW5nJywge1xuICBhdDogZnVuY3Rpb24gYXQocG9zKSB7XG4gICAgcmV0dXJuICRhdCh0aGlzLCBwb3MpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///273\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = __webpack_require__(0);\nvar $pad = __webpack_require__(125);\nvar userAgent = __webpack_require__(60);\n\n// https://github.com/zloirock/core-js/issues/280\nvar WEBKIT_BUG = /Version\\/10\\.\\d+(\\.\\d+)?( Mobile\\/\\w+)? Safari\\//.test(userAgent);\n\n$export($export.P + $export.F * WEBKIT_BUG, 'String', {\n padStart: function padStart(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, true);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLnBhZC1zdGFydC5qcz9mNTc2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxXQUFXLG1CQUFPLENBQUMsR0FBZTtBQUNsQyxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlOztBQUV2QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyNzQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zdHJpbmctcGFkLXN0YXJ0LWVuZFxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkcGFkID0gcmVxdWlyZSgnLi9fc3RyaW5nLXBhZCcpO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4vX3VzZXItYWdlbnQnKTtcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzI4MFxudmFyIFdFQktJVF9CVUcgPSAvVmVyc2lvblxcLzEwXFwuXFxkKyhcXC5cXGQrKT8oIE1vYmlsZVxcL1xcdyspPyBTYWZhcmlcXC8vLnRlc3QodXNlckFnZW50KTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiBXRUJLSVRfQlVHLCAnU3RyaW5nJywge1xuICBwYWRTdGFydDogZnVuY3Rpb24gcGFkU3RhcnQobWF4TGVuZ3RoIC8qICwgZmlsbFN0cmluZyA9ICcgJyAqLykge1xuICAgIHJldHVybiAkcGFkKHRoaXMsIG1heExlbmd0aCwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQsIHRydWUpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///274\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = __webpack_require__(0);\nvar $pad = __webpack_require__(125);\nvar userAgent = __webpack_require__(60);\n\n// https://github.com/zloirock/core-js/issues/280\nvar WEBKIT_BUG = /Version\\/10\\.\\d+(\\.\\d+)?( Mobile\\/\\w+)? Safari\\//.test(userAgent);\n\n$export($export.P + $export.F * WEBKIT_BUG, 'String', {\n padEnd: function padEnd(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, false);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLnBhZC1lbmQuanM/ZWQ1MCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsV0FBVyxtQkFBTyxDQUFDLEdBQWU7QUFDbEMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTs7QUFFdkM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjc1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc3RyaW5nLXBhZC1zdGFydC1lbmRcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHBhZCA9IHJlcXVpcmUoJy4vX3N0cmluZy1wYWQnKTtcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuL191c2VyLWFnZW50Jyk7XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8yODBcbnZhciBXRUJLSVRfQlVHID0gL1ZlcnNpb25cXC8xMFxcLlxcZCsoXFwuXFxkKyk/KCBNb2JpbGVcXC9cXHcrKT8gU2FmYXJpXFwvLy50ZXN0KHVzZXJBZ2VudCk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogV0VCS0lUX0JVRywgJ1N0cmluZycsIHtcbiAgcGFkRW5kOiBmdW5jdGlvbiBwYWRFbmQobWF4TGVuZ3RoIC8qICwgZmlsbFN0cmluZyA9ICcgJyAqLykge1xuICAgIHJldHVybiAkcGFkKHRoaXMsIG1heExlbmd0aCwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQsIGZhbHNlKTtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///275\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// https://github.com/sebmarkbage/ecmascript-string-left-right-trim\n__webpack_require__(45)('trimLeft', function ($trim) {\n return function trimLeft() {\n return $trim(this, 1);\n };\n}, 'trimStart');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLnRyaW0tbGVmdC5qcz8yM2JlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjc2LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3NlYm1hcmtiYWdlL2VjbWFzY3JpcHQtc3RyaW5nLWxlZnQtcmlnaHQtdHJpbVxucmVxdWlyZSgnLi9fc3RyaW5nLXRyaW0nKSgndHJpbUxlZnQnLCBmdW5jdGlvbiAoJHRyaW0pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHRyaW1MZWZ0KCkge1xuICAgIHJldHVybiAkdHJpbSh0aGlzLCAxKTtcbiAgfTtcbn0sICd0cmltU3RhcnQnKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///276\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// https://github.com/sebmarkbage/ecmascript-string-left-right-trim\n__webpack_require__(45)('trimRight', function ($trim) {\n return function trimRight() {\n return $trim(this, 2);\n };\n}, 'trimEnd');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLnRyaW0tcmlnaHQuanM/N2MwZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsbUJBQU8sQ0FBQyxFQUFnQjtBQUN4QjtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjI3Ny5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9zZWJtYXJrYmFnZS9lY21hc2NyaXB0LXN0cmluZy1sZWZ0LXJpZ2h0LXRyaW1cbnJlcXVpcmUoJy4vX3N0cmluZy10cmltJykoJ3RyaW1SaWdodCcsIGZ1bmN0aW9uICgkdHJpbSkge1xuICByZXR1cm4gZnVuY3Rpb24gdHJpbVJpZ2h0KCkge1xuICAgIHJldHVybiAkdHJpbSh0aGlzLCAyKTtcbiAgfTtcbn0sICd0cmltRW5kJyk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///277\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// https://tc39.github.io/String.prototype.matchAll/\nvar $export = __webpack_require__(0);\nvar defined = __webpack_require__(24);\nvar toLength = __webpack_require__(6);\nvar isRegExp = __webpack_require__(56);\nvar getFlags = __webpack_require__(50);\nvar RegExpProto = RegExp.prototype;\n\nvar $RegExpStringIterator = function (regexp, string) {\n this._r = regexp;\n this._s = string;\n};\n\n__webpack_require__(78)($RegExpStringIterator, 'RegExp String', function next() {\n var match = this._r.exec(this._s);\n return { value: match, done: match === null };\n});\n\n$export($export.P, 'String', {\n matchAll: function matchAll(regexp) {\n defined(this);\n if (!isRegExp(regexp)) throw TypeError(regexp + ' is not a regexp!');\n var S = String(this);\n var flags = 'flags' in RegExpProto ? String(regexp.flags) : getFlags.call(regexp);\n var rx = new RegExp(regexp.source, ~flags.indexOf('g') ? flags : 'g' + flags);\n rx.lastIndex = toLength(regexp.lastIndex);\n return new $RegExpStringIterator(rx, S);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLm1hdGNoLWFsbC5qcz85ODhkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxjQUFjLG1CQUFPLENBQUMsRUFBWTtBQUNsQyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxlQUFlLG1CQUFPLENBQUMsRUFBYztBQUNyQyxlQUFlLG1CQUFPLENBQUMsRUFBVTtBQUNqQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3hCO0FBQ0EsVUFBVTtBQUNWLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjI3OC5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vU3RyaW5nLnByb3RvdHlwZS5tYXRjaEFsbC9cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGlzUmVnRXhwID0gcmVxdWlyZSgnLi9faXMtcmVnZXhwJyk7XG52YXIgZ2V0RmxhZ3MgPSByZXF1aXJlKCcuL19mbGFncycpO1xudmFyIFJlZ0V4cFByb3RvID0gUmVnRXhwLnByb3RvdHlwZTtcblxudmFyICRSZWdFeHBTdHJpbmdJdGVyYXRvciA9IGZ1bmN0aW9uIChyZWdleHAsIHN0cmluZykge1xuICB0aGlzLl9yID0gcmVnZXhwO1xuICB0aGlzLl9zID0gc3RyaW5nO1xufTtcblxucmVxdWlyZSgnLi9faXRlci1jcmVhdGUnKSgkUmVnRXhwU3RyaW5nSXRlcmF0b3IsICdSZWdFeHAgU3RyaW5nJywgZnVuY3Rpb24gbmV4dCgpIHtcbiAgdmFyIG1hdGNoID0gdGhpcy5fci5leGVjKHRoaXMuX3MpO1xuICByZXR1cm4geyB2YWx1ZTogbWF0Y2gsIGRvbmU6IG1hdGNoID09PSBudWxsIH07XG59KTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdTdHJpbmcnLCB7XG4gIG1hdGNoQWxsOiBmdW5jdGlvbiBtYXRjaEFsbChyZWdleHApIHtcbiAgICBkZWZpbmVkKHRoaXMpO1xuICAgIGlmICghaXNSZWdFeHAocmVnZXhwKSkgdGhyb3cgVHlwZUVycm9yKHJlZ2V4cCArICcgaXMgbm90IGEgcmVnZXhwIScpO1xuICAgIHZhciBTID0gU3RyaW5nKHRoaXMpO1xuICAgIHZhciBmbGFncyA9ICdmbGFncycgaW4gUmVnRXhwUHJvdG8gPyBTdHJpbmcocmVnZXhwLmZsYWdzKSA6IGdldEZsYWdzLmNhbGwocmVnZXhwKTtcbiAgICB2YXIgcnggPSBuZXcgUmVnRXhwKHJlZ2V4cC5zb3VyY2UsIH5mbGFncy5pbmRleE9mKCdnJykgPyBmbGFncyA6ICdnJyArIGZsYWdzKTtcbiAgICByeC5sYXN0SW5kZXggPSB0b0xlbmd0aChyZWdleHAubGFzdEluZGV4KTtcbiAgICByZXR1cm4gbmV3ICRSZWdFeHBTdHJpbmdJdGVyYXRvcihyeCwgUyk7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///278\n")},function(module,exports,__webpack_require__){eval("__webpack_require__(67)('asyncIterator');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3ltYm9sLmFzeW5jLWl0ZXJhdG9yLmpzP2FjNGQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsbUJBQU8sQ0FBQyxFQUFlIiwiZmlsZSI6IjI3OS5qcyIsInNvdXJjZXNDb250ZW50IjpbInJlcXVpcmUoJy4vX3drcy1kZWZpbmUnKSgnYXN5bmNJdGVyYXRvcicpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///279\n")},function(module,exports,__webpack_require__){eval("__webpack_require__(67)('observable');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3ltYm9sLm9ic2VydmFibGUuanM/YzdjYSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxtQkFBTyxDQUFDLEVBQWUiLCJmaWxlIjoiMjgwLmpzIiwic291cmNlc0NvbnRlbnQiOlsicmVxdWlyZSgnLi9fd2tzLWRlZmluZScpKCdvYnNlcnZhYmxlJyk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///280\n")},function(module,exports,__webpack_require__){eval("// https://github.com/tc39/proposal-object-getownpropertydescriptors\nvar $export = __webpack_require__(0);\nvar ownKeys = __webpack_require__(123);\nvar toIObject = __webpack_require__(15);\nvar gOPD = __webpack_require__(16);\nvar createProperty = __webpack_require__(82);\n\n$export($export.S, 'Object', {\n getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {\n var O = toIObject(object);\n var getDesc = gOPD.f;\n var keys = ownKeys(O);\n var result = {};\n var i = 0;\n var key, desc;\n while (keys.length > i) {\n desc = getDesc(O, key = keys[i++]);\n if (desc !== undefined) createProperty(result, key, desc);\n }\n return result;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JqZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcnMuanM/OGU2ZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGNBQWMsbUJBQU8sQ0FBQyxHQUFhO0FBQ25DLGdCQUFnQixtQkFBTyxDQUFDLEVBQWU7QUFDdkMsV0FBVyxtQkFBTyxDQUFDLEVBQWdCO0FBQ25DLHFCQUFxQixtQkFBTyxDQUFDLEVBQW9COztBQUVqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyODEuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yc1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBvd25LZXlzID0gcmVxdWlyZSgnLi9fb3duLWtleXMnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgZ09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJyk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSByZXF1aXJlKCcuL19jcmVhdGUtcHJvcGVydHknKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdPYmplY3QnLCB7XG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvcnM6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KSB7XG4gICAgdmFyIE8gPSB0b0lPYmplY3Qob2JqZWN0KTtcbiAgICB2YXIgZ2V0RGVzYyA9IGdPUEQuZjtcbiAgICB2YXIga2V5cyA9IG93bktleXMoTyk7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIga2V5LCBkZXNjO1xuICAgIHdoaWxlIChrZXlzLmxlbmd0aCA+IGkpIHtcbiAgICAgIGRlc2MgPSBnZXREZXNjKE8sIGtleSA9IGtleXNbaSsrXSk7XG4gICAgICBpZiAoZGVzYyAhPT0gdW5kZWZpbmVkKSBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIGtleSwgZGVzYyk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///281\n")},function(module,exports,__webpack_require__){eval("// https://github.com/tc39/proposal-object-values-entries\nvar $export = __webpack_require__(0);\nvar $values = __webpack_require__(126)(false);\n\n$export($export.S, 'Object', {\n values: function values(it) {\n return $values(it);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JqZWN0LnZhbHVlcy5qcz84NjE1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsY0FBYyxtQkFBTyxDQUFDLEdBQW9COztBQUUxQztBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjgyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtb2JqZWN0LXZhbHVlcy1lbnRyaWVzXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICR2YWx1ZXMgPSByZXF1aXJlKCcuL19vYmplY3QtdG8tYXJyYXknKShmYWxzZSk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnT2JqZWN0Jywge1xuICB2YWx1ZXM6IGZ1bmN0aW9uIHZhbHVlcyhpdCkge1xuICAgIHJldHVybiAkdmFsdWVzKGl0KTtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///282\n")},function(module,exports,__webpack_require__){eval("// https://github.com/tc39/proposal-object-values-entries\nvar $export = __webpack_require__(0);\nvar $entries = __webpack_require__(126)(true);\n\n$export($export.S, 'Object', {\n entries: function entries(it) {\n return $entries(it);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JqZWN0LmVudHJpZXMuanM/ZmZjMSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyxHQUFvQjs7QUFFM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjI4My5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLW9iamVjdC12YWx1ZXMtZW50cmllc1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkZW50cmllcyA9IHJlcXVpcmUoJy4vX29iamVjdC10by1hcnJheScpKHRydWUpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ09iamVjdCcsIHtcbiAgZW50cmllczogZnVuY3Rpb24gZW50cmllcyhpdCkge1xuICAgIHJldHVybiAkZW50cmllcyhpdCk7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///283\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar toObject = __webpack_require__(9);\nvar aFunction = __webpack_require__(10);\nvar $defineProperty = __webpack_require__(8);\n\n// B.2.2.2 Object.prototype.__defineGetter__(P, getter)\n__webpack_require__(7) && $export($export.P + __webpack_require__(63), 'Object', {\n __defineGetter__: function __defineGetter__(P, getter) {\n $defineProperty.f(toObject(this), P, { get: aFunction(getter), enumerable: true, configurable: true });\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JqZWN0LmRlZmluZS1nZXR0ZXIuanM/NDUwNCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGdCQUFnQixtQkFBTyxDQUFDLEVBQWU7QUFDdkMsc0JBQXNCLG1CQUFPLENBQUMsQ0FBYzs7QUFFNUM7QUFDQSxtQkFBTyxDQUFDLENBQWdCLHlCQUF5QixtQkFBTyxDQUFDLEVBQXNCO0FBQy9FO0FBQ0EsMENBQTBDLCtEQUErRDtBQUN6RztBQUNBLENBQUMiLCJmaWxlIjoiMjg0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciAkZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcblxuLy8gQi4yLjIuMiBPYmplY3QucHJvdG90eXBlLl9fZGVmaW5lR2V0dGVyX18oUCwgZ2V0dGVyKVxucmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSAmJiAkZXhwb3J0KCRleHBvcnQuUCArIHJlcXVpcmUoJy4vX29iamVjdC1mb3JjZWQtcGFtJyksICdPYmplY3QnLCB7XG4gIF9fZGVmaW5lR2V0dGVyX186IGZ1bmN0aW9uIF9fZGVmaW5lR2V0dGVyX18oUCwgZ2V0dGVyKSB7XG4gICAgJGRlZmluZVByb3BlcnR5LmYodG9PYmplY3QodGhpcyksIFAsIHsgZ2V0OiBhRnVuY3Rpb24oZ2V0dGVyKSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0pO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///284\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar toObject = __webpack_require__(9);\nvar aFunction = __webpack_require__(10);\nvar $defineProperty = __webpack_require__(8);\n\n// B.2.2.3 Object.prototype.__defineSetter__(P, setter)\n__webpack_require__(7) && $export($export.P + __webpack_require__(63), 'Object', {\n __defineSetter__: function __defineSetter__(P, setter) {\n $defineProperty.f(toObject(this), P, { set: aFunction(setter), enumerable: true, configurable: true });\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JqZWN0LmRlZmluZS1zZXR0ZXIuanM/ZmVlNyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGdCQUFnQixtQkFBTyxDQUFDLEVBQWU7QUFDdkMsc0JBQXNCLG1CQUFPLENBQUMsQ0FBYzs7QUFFNUM7QUFDQSxtQkFBTyxDQUFDLENBQWdCLHlCQUF5QixtQkFBTyxDQUFDLEVBQXNCO0FBQy9FO0FBQ0EsMENBQTBDLCtEQUErRDtBQUN6RztBQUNBLENBQUMiLCJmaWxlIjoiMjg1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciAkZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcblxuLy8gQi4yLjIuMyBPYmplY3QucHJvdG90eXBlLl9fZGVmaW5lU2V0dGVyX18oUCwgc2V0dGVyKVxucmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSAmJiAkZXhwb3J0KCRleHBvcnQuUCArIHJlcXVpcmUoJy4vX29iamVjdC1mb3JjZWQtcGFtJyksICdPYmplY3QnLCB7XG4gIF9fZGVmaW5lU2V0dGVyX186IGZ1bmN0aW9uIF9fZGVmaW5lU2V0dGVyX18oUCwgc2V0dGVyKSB7XG4gICAgJGRlZmluZVByb3BlcnR5LmYodG9PYmplY3QodGhpcyksIFAsIHsgc2V0OiBhRnVuY3Rpb24oc2V0dGVyKSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0pO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///285\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar toObject = __webpack_require__(9);\nvar toPrimitive = __webpack_require__(23);\nvar getPrototypeOf = __webpack_require__(17);\nvar getOwnPropertyDescriptor = __webpack_require__(16).f;\n\n// B.2.2.4 Object.prototype.__lookupGetter__(P)\n__webpack_require__(7) && $export($export.P + __webpack_require__(63), 'Object', {\n __lookupGetter__: function __lookupGetter__(P) {\n var O = toObject(this);\n var K = toPrimitive(P, true);\n var D;\n do {\n if (D = getOwnPropertyDescriptor(O, K)) return D.get;\n } while (O = getPrototypeOf(O));\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JqZWN0Lmxvb2t1cC1nZXR0ZXIuanM/YjlhMSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGtCQUFrQixtQkFBTyxDQUFDLEVBQWlCO0FBQzNDLHFCQUFxQixtQkFBTyxDQUFDLEVBQWU7QUFDNUMsK0JBQStCLG1CQUFPLENBQUMsRUFBZ0I7O0FBRXZEO0FBQ0EsbUJBQU8sQ0FBQyxDQUFnQix5QkFBeUIsbUJBQU8sQ0FBQyxFQUFzQjtBQUMvRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxDQUFDIiwiZmlsZSI6IjI4Ni5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJykuZjtcblxuLy8gQi4yLjIuNCBPYmplY3QucHJvdG90eXBlLl9fbG9va3VwR2V0dGVyX18oUClcbnJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgJGV4cG9ydCgkZXhwb3J0LlAgKyByZXF1aXJlKCcuL19vYmplY3QtZm9yY2VkLXBhbScpLCAnT2JqZWN0Jywge1xuICBfX2xvb2t1cEdldHRlcl9fOiBmdW5jdGlvbiBfX2xvb2t1cEdldHRlcl9fKFApIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBLID0gdG9QcmltaXRpdmUoUCwgdHJ1ZSk7XG4gICAgdmFyIEQ7XG4gICAgZG8ge1xuICAgICAgaWYgKEQgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgSykpIHJldHVybiBELmdldDtcbiAgICB9IHdoaWxlIChPID0gZ2V0UHJvdG90eXBlT2YoTykpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///286\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar toObject = __webpack_require__(9);\nvar toPrimitive = __webpack_require__(23);\nvar getPrototypeOf = __webpack_require__(17);\nvar getOwnPropertyDescriptor = __webpack_require__(16).f;\n\n// B.2.2.5 Object.prototype.__lookupSetter__(P)\n__webpack_require__(7) && $export($export.P + __webpack_require__(63), 'Object', {\n __lookupSetter__: function __lookupSetter__(P) {\n var O = toObject(this);\n var K = toPrimitive(P, true);\n var D;\n do {\n if (D = getOwnPropertyDescriptor(O, K)) return D.set;\n } while (O = getPrototypeOf(O));\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JqZWN0Lmxvb2t1cC1zZXR0ZXIuanM/NjRkNSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGtCQUFrQixtQkFBTyxDQUFDLEVBQWlCO0FBQzNDLHFCQUFxQixtQkFBTyxDQUFDLEVBQWU7QUFDNUMsK0JBQStCLG1CQUFPLENBQUMsRUFBZ0I7O0FBRXZEO0FBQ0EsbUJBQU8sQ0FBQyxDQUFnQix5QkFBeUIsbUJBQU8sQ0FBQyxFQUFzQjtBQUMvRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxDQUFDIiwiZmlsZSI6IjI4Ny5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJykuZjtcblxuLy8gQi4yLjIuNSBPYmplY3QucHJvdG90eXBlLl9fbG9va3VwU2V0dGVyX18oUClcbnJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgJGV4cG9ydCgkZXhwb3J0LlAgKyByZXF1aXJlKCcuL19vYmplY3QtZm9yY2VkLXBhbScpLCAnT2JqZWN0Jywge1xuICBfX2xvb2t1cFNldHRlcl9fOiBmdW5jdGlvbiBfX2xvb2t1cFNldHRlcl9fKFApIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBLID0gdG9QcmltaXRpdmUoUCwgdHJ1ZSk7XG4gICAgdmFyIEQ7XG4gICAgZG8ge1xuICAgICAgaWYgKEQgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgSykpIHJldHVybiBELnNldDtcbiAgICB9IHdoaWxlIChPID0gZ2V0UHJvdG90eXBlT2YoTykpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///287\n")},function(module,exports,__webpack_require__){eval("// https://github.com/DavidBruant/Map-Set.prototype.toJSON\nvar $export = __webpack_require__(0);\n\n$export($export.P + $export.R, 'Map', { toJSON: __webpack_require__(127)('Map') });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWFwLnRvLWpzb24uanM/NDcwNCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXOztBQUVqQyx1Q0FBdUMsU0FBUyxtQkFBTyxDQUFDLEdBQXVCLFVBQVUiLCJmaWxlIjoiMjg4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXRodWIuY29tL0RhdmlkQnJ1YW50L01hcC1TZXQucHJvdG90eXBlLnRvSlNPTlxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LlIsICdNYXAnLCB7IHRvSlNPTjogcmVxdWlyZSgnLi9fY29sbGVjdGlvbi10by1qc29uJykoJ01hcCcpIH0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///288\n")},function(module,exports,__webpack_require__){eval("// https://github.com/DavidBruant/Map-Set.prototype.toJSON\nvar $export = __webpack_require__(0);\n\n$export($export.P + $export.R, 'Set', { toJSON: __webpack_require__(127)('Set') });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc2V0LnRvLWpzb24uanM/ZGI5YSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXOztBQUVqQyx1Q0FBdUMsU0FBUyxtQkFBTyxDQUFDLEdBQXVCLFVBQVUiLCJmaWxlIjoiMjg5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXRodWIuY29tL0RhdmlkQnJ1YW50L01hcC1TZXQucHJvdG90eXBlLnRvSlNPTlxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LlIsICdTZXQnLCB7IHRvSlNPTjogcmVxdWlyZSgnLi9fY29sbGVjdGlvbi10by1qc29uJykoJ1NldCcpIH0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///289\n")},function(module,exports,__webpack_require__){eval("// https://tc39.github.io/proposal-setmap-offrom/#sec-map.of\n__webpack_require__(64)('Map');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWFwLm9mLmpzPzcyOWIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxtQkFBTyxDQUFDLEVBQXNCIiwiZmlsZSI6IjI5MC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS8jc2VjLW1hcC5vZlxucmVxdWlyZSgnLi9fc2V0LWNvbGxlY3Rpb24tb2YnKSgnTWFwJyk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///290\n")},function(module,exports,__webpack_require__){eval("// https://tc39.github.io/proposal-setmap-offrom/#sec-set.of\n__webpack_require__(64)('Set');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc2V0Lm9mLmpzPzk5YzUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxtQkFBTyxDQUFDLEVBQXNCIiwiZmlsZSI6IjI5MS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS8jc2VjLXNldC5vZlxucmVxdWlyZSgnLi9fc2V0LWNvbGxlY3Rpb24tb2YnKSgnU2V0Jyk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///291\n")},function(module,exports,__webpack_require__){eval("// https://tc39.github.io/proposal-setmap-offrom/#sec-weakmap.of\n__webpack_require__(64)('WeakMap');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcud2Vhay1tYXAub2YuanM/NzY0ZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLG1CQUFPLENBQUMsRUFBc0IiLCJmaWxlIjoiMjkyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tLyNzZWMtd2Vha21hcC5vZlxucmVxdWlyZSgnLi9fc2V0LWNvbGxlY3Rpb24tb2YnKSgnV2Vha01hcCcpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///292\n")},function(module,exports,__webpack_require__){eval("// https://tc39.github.io/proposal-setmap-offrom/#sec-weakset.of\n__webpack_require__(64)('WeakSet');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcud2Vhay1zZXQub2YuanM/YmRkMSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLG1CQUFPLENBQUMsRUFBc0IiLCJmaWxlIjoiMjkzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tLyNzZWMtd2Vha3NldC5vZlxucmVxdWlyZSgnLi9fc2V0LWNvbGxlY3Rpb24tb2YnKSgnV2Vha1NldCcpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///293\n")},function(module,exports,__webpack_require__){eval("// https://tc39.github.io/proposal-setmap-offrom/#sec-map.from\n__webpack_require__(65)('Map');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWFwLmZyb20uanM/NDE2YyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLG1CQUFPLENBQUMsRUFBd0IiLCJmaWxlIjoiMjk0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tLyNzZWMtbWFwLmZyb21cbnJlcXVpcmUoJy4vX3NldC1jb2xsZWN0aW9uLWZyb20nKSgnTWFwJyk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///294\n")},function(module,exports,__webpack_require__){eval("// https://tc39.github.io/proposal-setmap-offrom/#sec-set.from\n__webpack_require__(65)('Set');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc2V0LmZyb20uanM/ZGQ4YSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLG1CQUFPLENBQUMsRUFBd0IiLCJmaWxlIjoiMjk1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tLyNzZWMtc2V0LmZyb21cbnJlcXVpcmUoJy4vX3NldC1jb2xsZWN0aW9uLWZyb20nKSgnU2V0Jyk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///295\n")},function(module,exports,__webpack_require__){eval("// https://tc39.github.io/proposal-setmap-offrom/#sec-weakmap.from\n__webpack_require__(65)('WeakMap');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcud2Vhay1tYXAuZnJvbS5qcz81ZDQwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsbUJBQU8sQ0FBQyxFQUF3QiIsImZpbGUiOiIyOTYuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vI3NlYy13ZWFrbWFwLmZyb21cbnJlcXVpcmUoJy4vX3NldC1jb2xsZWN0aW9uLWZyb20nKSgnV2Vha01hcCcpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///296\n")},function(module,exports,__webpack_require__){eval("// https://tc39.github.io/proposal-setmap-offrom/#sec-weakset.from\n__webpack_require__(65)('WeakSet');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcud2Vhay1zZXQuZnJvbS5qcz81ZDkwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsbUJBQU8sQ0FBQyxFQUF3QiIsImZpbGUiOiIyOTcuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vI3NlYy13ZWFrc2V0LmZyb21cbnJlcXVpcmUoJy4vX3NldC1jb2xsZWN0aW9uLWZyb20nKSgnV2Vha1NldCcpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///297\n")},function(module,exports,__webpack_require__){eval("// https://github.com/tc39/proposal-global\nvar $export = __webpack_require__(0);\n\n$export($export.G, { global: __webpack_require__(2) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuZ2xvYmFsLmpzPzBjMzYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVzs7QUFFakMsb0JBQW9CLFNBQVMsbUJBQU8sQ0FBQyxDQUFXLEdBQUciLCJmaWxlIjoiMjk4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtZ2xvYmFsXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuRywgeyBnbG9iYWw6IHJlcXVpcmUoJy4vX2dsb2JhbCcpIH0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///298\n")},function(module,exports,__webpack_require__){eval("// https://github.com/tc39/proposal-global\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'System', { global: __webpack_require__(2) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3lzdGVtLmdsb2JhbC5qcz9hMjM0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDLDhCQUE4QixTQUFTLG1CQUFPLENBQUMsQ0FBVyxHQUFHIiwiZmlsZSI6IjI5OS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWdsb2JhbFxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdTeXN0ZW0nLCB7IGdsb2JhbDogcmVxdWlyZSgnLi9fZ2xvYmFsJykgfSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///299\n")},function(module,exports,__webpack_require__){eval("// https://github.com/ljharb/proposal-is-error\nvar $export = __webpack_require__(0);\nvar cof = __webpack_require__(20);\n\n$export($export.S, 'Error', {\n isError: function isError(it) {\n return cof(it) === 'Error';\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuZXJyb3IuaXMtZXJyb3IuanM/NDI3NiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLFVBQVUsbUJBQU8sQ0FBQyxFQUFROztBQUUxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMzAwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXRodWIuY29tL2xqaGFyYi9wcm9wb3NhbC1pcy1lcnJvclxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdFcnJvcicsIHtcbiAgaXNFcnJvcjogZnVuY3Rpb24gaXNFcnJvcihpdCkge1xuICAgIHJldHVybiBjb2YoaXQpID09PSAnRXJyb3InO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///300\n")},function(module,exports,__webpack_require__){eval("// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', {\n clamp: function clamp(x, lower, upper) {\n return Math.min(upper, Math.max(lower, x));\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5jbGFtcC5qcz8wOWUwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIzMDEuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBodHRwczovL3J3YWxkcm9uLmdpdGh1Yi5pby9wcm9wb3NhbC1tYXRoLWV4dGVuc2lvbnMvXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGNsYW1wOiBmdW5jdGlvbiBjbGFtcCh4LCBsb3dlciwgdXBwZXIpIHtcbiAgICByZXR1cm4gTWF0aC5taW4odXBwZXIsIE1hdGgubWF4KGxvd2VyLCB4KSk7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///301\n")},function(module,exports,__webpack_require__){eval("// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', { DEG_PER_RAD: Math.PI / 180 });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5kZWctcGVyLXJhZC5qcz8wYzAwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDLDRCQUE0Qiw2QkFBNkIiLCJmaWxlIjoiMzAyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9yd2FsZHJvbi5naXRodWIuaW8vcHJvcG9zYWwtbWF0aC1leHRlbnNpb25zL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywgeyBERUdfUEVSX1JBRDogTWF0aC5QSSAvIDE4MCB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///302\n")},function(module,exports,__webpack_require__){eval("// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = __webpack_require__(0);\nvar RAD_PER_DEG = 180 / Math.PI;\n\n$export($export.S, 'Math', {\n degrees: function degrees(radians) {\n return radians * RAD_PER_DEG;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5kZWdyZWVzLmpzPzI3NDgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMzAzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9yd2FsZHJvbi5naXRodWIuaW8vcHJvcG9zYWwtbWF0aC1leHRlbnNpb25zL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBSQURfUEVSX0RFRyA9IDE4MCAvIE1hdGguUEk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgZGVncmVlczogZnVuY3Rpb24gZGVncmVlcyhyYWRpYW5zKSB7XG4gICAgcmV0dXJuIHJhZGlhbnMgKiBSQURfUEVSX0RFRztcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///303\n")},function(module,exports,__webpack_require__){eval("// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = __webpack_require__(0);\nvar scale = __webpack_require__(129);\nvar fround = __webpack_require__(108);\n\n$export($export.S, 'Math', {\n fscale: function fscale(x, inLow, inHigh, outLow, outHigh) {\n return fround(scale(x, inLow, inHigh, outLow, outHigh));\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5mc2NhbGUuanM/MWY5MSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLFlBQVksbUJBQU8sQ0FBQyxHQUFlO0FBQ25DLGFBQWEsbUJBQU8sQ0FBQyxHQUFnQjs7QUFFckM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjMwNC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vcndhbGRyb24uZ2l0aHViLmlvL3Byb3Bvc2FsLW1hdGgtZXh0ZW5zaW9ucy9cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgc2NhbGUgPSByZXF1aXJlKCcuL19tYXRoLXNjYWxlJyk7XG52YXIgZnJvdW5kID0gcmVxdWlyZSgnLi9fbWF0aC1mcm91bmQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBmc2NhbGU6IGZ1bmN0aW9uIGZzY2FsZSh4LCBpbkxvdywgaW5IaWdoLCBvdXRMb3csIG91dEhpZ2gpIHtcbiAgICByZXR1cm4gZnJvdW5kKHNjYWxlKHgsIGluTG93LCBpbkhpZ2gsIG91dExvdywgb3V0SGlnaCkpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///304\n")},function(module,exports,__webpack_require__){eval("// https://gist.github.com/BrendanEich/4294d5c212a6d2254703\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', {\n iaddh: function iaddh(x0, x1, y0, y1) {\n var $x0 = x0 >>> 0;\n var $x1 = x1 >>> 0;\n var $y0 = y0 >>> 0;\n return $x1 + (y1 >>> 0) + (($x0 & $y0 | ($x0 | $y0) & ~($x0 + $y0 >>> 0)) >>> 31) | 0;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5pYWRkaC5qcz85YzAwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIzMDUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9CcmVuZGFuRWljaC80Mjk0ZDVjMjEyYTZkMjI1NDcwM1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBpYWRkaDogZnVuY3Rpb24gaWFkZGgoeDAsIHgxLCB5MCwgeTEpIHtcbiAgICB2YXIgJHgwID0geDAgPj4+IDA7XG4gICAgdmFyICR4MSA9IHgxID4+PiAwO1xuICAgIHZhciAkeTAgPSB5MCA+Pj4gMDtcbiAgICByZXR1cm4gJHgxICsgKHkxID4+PiAwKSArICgoJHgwICYgJHkwIHwgKCR4MCB8ICR5MCkgJiB+KCR4MCArICR5MCA+Pj4gMCkpID4+PiAzMSkgfCAwO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///305\n")},function(module,exports,__webpack_require__){eval("// https://gist.github.com/BrendanEich/4294d5c212a6d2254703\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', {\n isubh: function isubh(x0, x1, y0, y1) {\n var $x0 = x0 >>> 0;\n var $x1 = x1 >>> 0;\n var $y0 = y0 >>> 0;\n return $x1 - (y1 >>> 0) - ((~$x0 & $y0 | ~($x0 ^ $y0) & $x0 - $y0 >>> 0) >>> 31) | 0;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5pc3ViaC5qcz8yZjc4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIzMDYuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9CcmVuZGFuRWljaC80Mjk0ZDVjMjEyYTZkMjI1NDcwM1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBpc3ViaDogZnVuY3Rpb24gaXN1YmgoeDAsIHgxLCB5MCwgeTEpIHtcbiAgICB2YXIgJHgwID0geDAgPj4+IDA7XG4gICAgdmFyICR4MSA9IHgxID4+PiAwO1xuICAgIHZhciAkeTAgPSB5MCA+Pj4gMDtcbiAgICByZXR1cm4gJHgxIC0gKHkxID4+PiAwKSAtICgofiR4MCAmICR5MCB8IH4oJHgwIF4gJHkwKSAmICR4MCAtICR5MCA+Pj4gMCkgPj4+IDMxKSB8IDA7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///306\n")},function(module,exports,__webpack_require__){eval("// https://gist.github.com/BrendanEich/4294d5c212a6d2254703\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', {\n imulh: function imulh(u, v) {\n var UINT16 = 0xffff;\n var $u = +u;\n var $v = +v;\n var u0 = $u & UINT16;\n var v0 = $v & UINT16;\n var u1 = $u >> 16;\n var v1 = $v >> 16;\n var t = (u1 * v0 >>> 0) + (u0 * v0 >>> 16);\n return u1 * v1 + (t >> 16) + ((u0 * v1 >>> 0) + (t & UINT16) >> 16);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5pbXVsaC5qcz9iNGMyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMzA3LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vQnJlbmRhbkVpY2gvNDI5NGQ1YzIxMmE2ZDIyNTQ3MDNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgaW11bGg6IGZ1bmN0aW9uIGltdWxoKHUsIHYpIHtcbiAgICB2YXIgVUlOVDE2ID0gMHhmZmZmO1xuICAgIHZhciAkdSA9ICt1O1xuICAgIHZhciAkdiA9ICt2O1xuICAgIHZhciB1MCA9ICR1ICYgVUlOVDE2O1xuICAgIHZhciB2MCA9ICR2ICYgVUlOVDE2O1xuICAgIHZhciB1MSA9ICR1ID4+IDE2O1xuICAgIHZhciB2MSA9ICR2ID4+IDE2O1xuICAgIHZhciB0ID0gKHUxICogdjAgPj4+IDApICsgKHUwICogdjAgPj4+IDE2KTtcbiAgICByZXR1cm4gdTEgKiB2MSArICh0ID4+IDE2KSArICgodTAgKiB2MSA+Pj4gMCkgKyAodCAmIFVJTlQxNikgPj4gMTYpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///307\n")},function(module,exports,__webpack_require__){eval("// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', { RAD_PER_DEG: 180 / Math.PI });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5yYWQtcGVyLWRlZy5qcz8xZjE4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDLDRCQUE0Qiw2QkFBNkIiLCJmaWxlIjoiMzA4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9yd2FsZHJvbi5naXRodWIuaW8vcHJvcG9zYWwtbWF0aC1leHRlbnNpb25zL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywgeyBSQURfUEVSX0RFRzogMTgwIC8gTWF0aC5QSSB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///308\n")},function(module,exports,__webpack_require__){eval("// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = __webpack_require__(0);\nvar DEG_PER_RAD = Math.PI / 180;\n\n$export($export.S, 'Math', {\n radians: function radians(degrees) {\n return degrees * DEG_PER_RAD;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5yYWRpYW5zLmpzPzY5MmIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMzA5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9yd2FsZHJvbi5naXRodWIuaW8vcHJvcG9zYWwtbWF0aC1leHRlbnNpb25zL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBERUdfUEVSX1JBRCA9IE1hdGguUEkgLyAxODA7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgcmFkaWFuczogZnVuY3Rpb24gcmFkaWFucyhkZWdyZWVzKSB7XG4gICAgcmV0dXJuIGRlZ3JlZXMgKiBERUdfUEVSX1JBRDtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///309\n")},function(module,exports,__webpack_require__){eval("// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', { scale: __webpack_require__(129) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5zY2FsZS5qcz9jNzc1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDLDRCQUE0QixRQUFRLG1CQUFPLENBQUMsR0FBZSxHQUFHIiwiZmlsZSI6IjMxMC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vcndhbGRyb24uZ2l0aHViLmlvL3Byb3Bvc2FsLW1hdGgtZXh0ZW5zaW9ucy9cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHsgc2NhbGU6IHJlcXVpcmUoJy4vX21hdGgtc2NhbGUnKSB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///310\n")},function(module,exports,__webpack_require__){eval("// https://gist.github.com/BrendanEich/4294d5c212a6d2254703\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', {\n umulh: function umulh(u, v) {\n var UINT16 = 0xffff;\n var $u = +u;\n var $v = +v;\n var u0 = $u & UINT16;\n var v0 = $v & UINT16;\n var u1 = $u >>> 16;\n var v1 = $v >>> 16;\n var t = (u1 * v0 >>> 0) + (u0 * v0 >>> 16);\n return u1 * v1 + (t >>> 16) + ((u0 * v1 >>> 0) + (t & UINT16) >>> 16);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC51bXVsaC5qcz84YTVjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMzExLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vQnJlbmRhbkVpY2gvNDI5NGQ1YzIxMmE2ZDIyNTQ3MDNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgdW11bGg6IGZ1bmN0aW9uIHVtdWxoKHUsIHYpIHtcbiAgICB2YXIgVUlOVDE2ID0gMHhmZmZmO1xuICAgIHZhciAkdSA9ICt1O1xuICAgIHZhciAkdiA9ICt2O1xuICAgIHZhciB1MCA9ICR1ICYgVUlOVDE2O1xuICAgIHZhciB2MCA9ICR2ICYgVUlOVDE2O1xuICAgIHZhciB1MSA9ICR1ID4+PiAxNjtcbiAgICB2YXIgdjEgPSAkdiA+Pj4gMTY7XG4gICAgdmFyIHQgPSAodTEgKiB2MCA+Pj4gMCkgKyAodTAgKiB2MCA+Pj4gMTYpO1xuICAgIHJldHVybiB1MSAqIHYxICsgKHQgPj4+IDE2KSArICgodTAgKiB2MSA+Pj4gMCkgKyAodCAmIFVJTlQxNikgPj4+IDE2KTtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///311\n")},function(module,exports,__webpack_require__){eval("// http://jfbastien.github.io/papers/Math.signbit.html\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', { signbit: function signbit(x) {\n // eslint-disable-next-line no-self-compare\n return (x = +x) != x ? x : x == 0 ? 1 / x == Infinity : x > 0;\n} });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5zaWduYml0LmpzP2VkN2UiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVzs7QUFFakMsNEJBQTRCO0FBQzVCO0FBQ0E7QUFDQSxDQUFDLEVBQUUiLCJmaWxlIjoiMzEyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cDovL2pmYmFzdGllbi5naXRodWIuaW8vcGFwZXJzL01hdGguc2lnbmJpdC5odG1sXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7IHNpZ25iaXQ6IGZ1bmN0aW9uIHNpZ25iaXQoeCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gIHJldHVybiAoeCA9ICt4KSAhPSB4ID8geCA6IHggPT0gMCA/IDEgLyB4ID09IEluZmluaXR5IDogeCA+IDA7XG59IH0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///312\n")},function(module,exports,__webpack_require__){"use strict";eval("// https://github.com/tc39/proposal-promise-finally\n\nvar $export = __webpack_require__(0);\nvar core = __webpack_require__(18);\nvar global = __webpack_require__(2);\nvar speciesConstructor = __webpack_require__(51);\nvar promiseResolve = __webpack_require__(116);\n\n$export($export.P + $export.R, 'Promise', { 'finally': function (onFinally) {\n var C = speciesConstructor(this, core.Promise || global.Promise);\n var isFunction = typeof onFinally == 'function';\n return this.then(\n isFunction ? function (x) {\n return promiseResolve(C, onFinally()).then(function () { return x; });\n } : onFinally,\n isFunction ? function (e) {\n return promiseResolve(C, onFinally()).then(function () { throw e; });\n } : onFinally\n );\n} });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucHJvbWlzZS5maW5hbGx5LmpzPzA5N2QiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDYTtBQUNiLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLFdBQVcsbUJBQU8sQ0FBQyxFQUFTO0FBQzVCLGFBQWEsbUJBQU8sQ0FBQyxDQUFXO0FBQ2hDLHlCQUF5QixtQkFBTyxDQUFDLEVBQXdCO0FBQ3pELHFCQUFxQixtQkFBTyxDQUFDLEdBQW9COztBQUVqRCwyQ0FBMkM7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4REFBOEQsVUFBVSxFQUFFO0FBQzFFLEtBQUs7QUFDTDtBQUNBLDhEQUE4RCxTQUFTLEVBQUU7QUFDekUsS0FBSztBQUNMO0FBQ0EsQ0FBQyxFQUFFIiwiZmlsZSI6IjMxMy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXByb21pc2UtZmluYWxseVxuJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4vX3NwZWNpZXMtY29uc3RydWN0b3InKTtcbnZhciBwcm9taXNlUmVzb2x2ZSA9IHJlcXVpcmUoJy4vX3Byb21pc2UtcmVzb2x2ZScpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuUiwgJ1Byb21pc2UnLCB7ICdmaW5hbGx5JzogZnVuY3Rpb24gKG9uRmluYWxseSkge1xuICB2YXIgQyA9IHNwZWNpZXNDb25zdHJ1Y3Rvcih0aGlzLCBjb3JlLlByb21pc2UgfHwgZ2xvYmFsLlByb21pc2UpO1xuICB2YXIgaXNGdW5jdGlvbiA9IHR5cGVvZiBvbkZpbmFsbHkgPT0gJ2Z1bmN0aW9uJztcbiAgcmV0dXJuIHRoaXMudGhlbihcbiAgICBpc0Z1bmN0aW9uID8gZnVuY3Rpb24gKHgpIHtcbiAgICAgIHJldHVybiBwcm9taXNlUmVzb2x2ZShDLCBvbkZpbmFsbHkoKSkudGhlbihmdW5jdGlvbiAoKSB7IHJldHVybiB4OyB9KTtcbiAgICB9IDogb25GaW5hbGx5LFxuICAgIGlzRnVuY3Rpb24gPyBmdW5jdGlvbiAoZSkge1xuICAgICAgcmV0dXJuIHByb21pc2VSZXNvbHZlKEMsIG9uRmluYWxseSgpKS50aGVuKGZ1bmN0aW9uICgpIHsgdGhyb3cgZTsgfSk7XG4gICAgfSA6IG9uRmluYWxseVxuICApO1xufSB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///313\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// https://github.com/tc39/proposal-promise-try\nvar $export = __webpack_require__(0);\nvar newPromiseCapability = __webpack_require__(91);\nvar perform = __webpack_require__(115);\n\n$export($export.S, 'Promise', { 'try': function (callbackfn) {\n var promiseCapability = newPromiseCapability.f(this);\n var result = perform(callbackfn);\n (result.e ? promiseCapability.reject : promiseCapability.resolve)(result.v);\n return promiseCapability.promise;\n} });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucHJvbWlzZS50cnkuanM/YTljYyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsMkJBQTJCLG1CQUFPLENBQUMsRUFBMkI7QUFDOUQsY0FBYyxtQkFBTyxDQUFDLEdBQVk7O0FBRWxDLCtCQUErQjtBQUMvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsRUFBRSIsImZpbGUiOiIzMTQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1wcm9taXNlLXRyeVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IHJlcXVpcmUoJy4vX25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcbnZhciBwZXJmb3JtID0gcmVxdWlyZSgnLi9fcGVyZm9ybScpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1Byb21pc2UnLCB7ICd0cnknOiBmdW5jdGlvbiAoY2FsbGJhY2tmbikge1xuICB2YXIgcHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eS5mKHRoaXMpO1xuICB2YXIgcmVzdWx0ID0gcGVyZm9ybShjYWxsYmFja2ZuKTtcbiAgKHJlc3VsdC5lID8gcHJvbWlzZUNhcGFiaWxpdHkucmVqZWN0IDogcHJvbWlzZUNhcGFiaWxpdHkucmVzb2x2ZSkocmVzdWx0LnYpO1xuICByZXR1cm4gcHJvbWlzZUNhcGFiaWxpdHkucHJvbWlzZTtcbn0gfSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///314\n")},function(module,exports,__webpack_require__){eval("var metadata = __webpack_require__(28);\nvar anObject = __webpack_require__(1);\nvar toMetaKey = metadata.key;\nvar ordinaryDefineOwnMetadata = metadata.set;\n\nmetadata.exp({ defineMetadata: function defineMetadata(metadataKey, metadataValue, target, targetKey) {\n ordinaryDefineOwnMetadata(metadataKey, metadataValue, anObject(target), toMetaKey(targetKey));\n} });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5kZWZpbmUtbWV0YWRhdGEuanM/ZTNkMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxlQUFlLG1CQUFPLENBQUMsRUFBYTtBQUNwQyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQztBQUNBOztBQUVBLGNBQWM7QUFDZDtBQUNBLENBQUMsRUFBRSIsImZpbGUiOiIzMTUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgbWV0YWRhdGEgPSByZXF1aXJlKCcuL19tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgdG9NZXRhS2V5ID0gbWV0YWRhdGEua2V5O1xudmFyIG9yZGluYXJ5RGVmaW5lT3duTWV0YWRhdGEgPSBtZXRhZGF0YS5zZXQ7XG5cbm1ldGFkYXRhLmV4cCh7IGRlZmluZU1ldGFkYXRhOiBmdW5jdGlvbiBkZWZpbmVNZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSwgdGFyZ2V0LCB0YXJnZXRLZXkpIHtcbiAgb3JkaW5hcnlEZWZpbmVPd25NZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSwgYW5PYmplY3QodGFyZ2V0KSwgdG9NZXRhS2V5KHRhcmdldEtleSkpO1xufSB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///315\n")},function(module,exports,__webpack_require__){eval("var metadata = __webpack_require__(28);\nvar anObject = __webpack_require__(1);\nvar toMetaKey = metadata.key;\nvar getOrCreateMetadataMap = metadata.map;\nvar store = metadata.store;\n\nmetadata.exp({ deleteMetadata: function deleteMetadata(metadataKey, target /* , targetKey */) {\n var targetKey = arguments.length < 3 ? undefined : toMetaKey(arguments[2]);\n var metadataMap = getOrCreateMetadataMap(anObject(target), targetKey, false);\n if (metadataMap === undefined || !metadataMap['delete'](metadataKey)) return false;\n if (metadataMap.size) return true;\n var targetMetadata = store.get(target);\n targetMetadata['delete'](targetKey);\n return !!targetMetadata.size || store['delete'](target);\n} });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5kZWxldGUtbWV0YWRhdGEuanM/Y2VhZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxlQUFlLG1CQUFPLENBQUMsRUFBYTtBQUNwQyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQztBQUNBO0FBQ0E7O0FBRUEsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxFQUFFIiwiZmlsZSI6IjMxNi5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBtZXRhZGF0YSA9IHJlcXVpcmUoJy4vX21ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciB0b01ldGFLZXkgPSBtZXRhZGF0YS5rZXk7XG52YXIgZ2V0T3JDcmVhdGVNZXRhZGF0YU1hcCA9IG1ldGFkYXRhLm1hcDtcbnZhciBzdG9yZSA9IG1ldGFkYXRhLnN0b3JlO1xuXG5tZXRhZGF0YS5leHAoeyBkZWxldGVNZXRhZGF0YTogZnVuY3Rpb24gZGVsZXRlTWV0YWRhdGEobWV0YWRhdGFLZXksIHRhcmdldCAvKiAsIHRhcmdldEtleSAqLykge1xuICB2YXIgdGFyZ2V0S2V5ID0gYXJndW1lbnRzLmxlbmd0aCA8IDMgPyB1bmRlZmluZWQgOiB0b01ldGFLZXkoYXJndW1lbnRzWzJdKTtcbiAgdmFyIG1ldGFkYXRhTWFwID0gZ2V0T3JDcmVhdGVNZXRhZGF0YU1hcChhbk9iamVjdCh0YXJnZXQpLCB0YXJnZXRLZXksIGZhbHNlKTtcbiAgaWYgKG1ldGFkYXRhTWFwID09PSB1bmRlZmluZWQgfHwgIW1ldGFkYXRhTWFwWydkZWxldGUnXShtZXRhZGF0YUtleSkpIHJldHVybiBmYWxzZTtcbiAgaWYgKG1ldGFkYXRhTWFwLnNpemUpIHJldHVybiB0cnVlO1xuICB2YXIgdGFyZ2V0TWV0YWRhdGEgPSBzdG9yZS5nZXQodGFyZ2V0KTtcbiAgdGFyZ2V0TWV0YWRhdGFbJ2RlbGV0ZSddKHRhcmdldEtleSk7XG4gIHJldHVybiAhIXRhcmdldE1ldGFkYXRhLnNpemUgfHwgc3RvcmVbJ2RlbGV0ZSddKHRhcmdldCk7XG59IH0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///316\n")},function(module,exports,__webpack_require__){eval("var metadata = __webpack_require__(28);\nvar anObject = __webpack_require__(1);\nvar getPrototypeOf = __webpack_require__(17);\nvar ordinaryHasOwnMetadata = metadata.has;\nvar ordinaryGetOwnMetadata = metadata.get;\nvar toMetaKey = metadata.key;\n\nvar ordinaryGetMetadata = function (MetadataKey, O, P) {\n var hasOwn = ordinaryHasOwnMetadata(MetadataKey, O, P);\n if (hasOwn) return ordinaryGetOwnMetadata(MetadataKey, O, P);\n var parent = getPrototypeOf(O);\n return parent !== null ? ordinaryGetMetadata(MetadataKey, parent, P) : undefined;\n};\n\nmetadata.exp({ getMetadata: function getMetadata(metadataKey, target /* , targetKey */) {\n return ordinaryGetMetadata(metadataKey, anObject(target), arguments.length < 3 ? undefined : toMetaKey(arguments[2]));\n} });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtbWV0YWRhdGEuanM/ZTM5NCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxlQUFlLG1CQUFPLENBQUMsRUFBYTtBQUNwQyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxxQkFBcUIsbUJBQU8sQ0FBQyxFQUFlO0FBQzVDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsY0FBYztBQUNkO0FBQ0EsQ0FBQyxFQUFFIiwiZmlsZSI6IjMxNy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBtZXRhZGF0YSA9IHJlcXVpcmUoJy4vX21ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBvcmRpbmFyeUhhc093bk1ldGFkYXRhID0gbWV0YWRhdGEuaGFzO1xudmFyIG9yZGluYXJ5R2V0T3duTWV0YWRhdGEgPSBtZXRhZGF0YS5nZXQ7XG52YXIgdG9NZXRhS2V5ID0gbWV0YWRhdGEua2V5O1xuXG52YXIgb3JkaW5hcnlHZXRNZXRhZGF0YSA9IGZ1bmN0aW9uIChNZXRhZGF0YUtleSwgTywgUCkge1xuICB2YXIgaGFzT3duID0gb3JkaW5hcnlIYXNPd25NZXRhZGF0YShNZXRhZGF0YUtleSwgTywgUCk7XG4gIGlmIChoYXNPd24pIHJldHVybiBvcmRpbmFyeUdldE93bk1ldGFkYXRhKE1ldGFkYXRhS2V5LCBPLCBQKTtcbiAgdmFyIHBhcmVudCA9IGdldFByb3RvdHlwZU9mKE8pO1xuICByZXR1cm4gcGFyZW50ICE9PSBudWxsID8gb3JkaW5hcnlHZXRNZXRhZGF0YShNZXRhZGF0YUtleSwgcGFyZW50LCBQKSA6IHVuZGVmaW5lZDtcbn07XG5cbm1ldGFkYXRhLmV4cCh7IGdldE1ldGFkYXRhOiBmdW5jdGlvbiBnZXRNZXRhZGF0YShtZXRhZGF0YUtleSwgdGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gIHJldHVybiBvcmRpbmFyeUdldE1ldGFkYXRhKG1ldGFkYXRhS2V5LCBhbk9iamVjdCh0YXJnZXQpLCBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHVuZGVmaW5lZCA6IHRvTWV0YUtleShhcmd1bWVudHNbMl0pKTtcbn0gfSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///317\n")},function(module,exports,__webpack_require__){eval("var Set = __webpack_require__(119);\nvar from = __webpack_require__(128);\nvar metadata = __webpack_require__(28);\nvar anObject = __webpack_require__(1);\nvar getPrototypeOf = __webpack_require__(17);\nvar ordinaryOwnMetadataKeys = metadata.keys;\nvar toMetaKey = metadata.key;\n\nvar ordinaryMetadataKeys = function (O, P) {\n var oKeys = ordinaryOwnMetadataKeys(O, P);\n var parent = getPrototypeOf(O);\n if (parent === null) return oKeys;\n var pKeys = ordinaryMetadataKeys(parent, P);\n return pKeys.length ? oKeys.length ? from(new Set(oKeys.concat(pKeys))) : pKeys : oKeys;\n};\n\nmetadata.exp({ getMetadataKeys: function getMetadataKeys(target /* , targetKey */) {\n return ordinaryMetadataKeys(anObject(target), arguments.length < 2 ? undefined : toMetaKey(arguments[1]));\n} });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtbWV0YWRhdGEta2V5cy5qcz9iODBiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFVBQVUsbUJBQU8sQ0FBQyxHQUFXO0FBQzdCLFdBQVcsbUJBQU8sQ0FBQyxHQUF3QjtBQUMzQyxlQUFlLG1CQUFPLENBQUMsRUFBYTtBQUNwQyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxxQkFBcUIsbUJBQU8sQ0FBQyxFQUFlO0FBQzVDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsY0FBYztBQUNkO0FBQ0EsQ0FBQyxFQUFFIiwiZmlsZSI6IjMxOC5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBTZXQgPSByZXF1aXJlKCcuL2VzNi5zZXQnKTtcbnZhciBmcm9tID0gcmVxdWlyZSgnLi9fYXJyYXktZnJvbS1pdGVyYWJsZScpO1xudmFyIG1ldGFkYXRhID0gcmVxdWlyZSgnLi9fbWV0YWRhdGEnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIG9yZGluYXJ5T3duTWV0YWRhdGFLZXlzID0gbWV0YWRhdGEua2V5cztcbnZhciB0b01ldGFLZXkgPSBtZXRhZGF0YS5rZXk7XG5cbnZhciBvcmRpbmFyeU1ldGFkYXRhS2V5cyA9IGZ1bmN0aW9uIChPLCBQKSB7XG4gIHZhciBvS2V5cyA9IG9yZGluYXJ5T3duTWV0YWRhdGFLZXlzKE8sIFApO1xuICB2YXIgcGFyZW50ID0gZ2V0UHJvdG90eXBlT2YoTyk7XG4gIGlmIChwYXJlbnQgPT09IG51bGwpIHJldHVybiBvS2V5cztcbiAgdmFyIHBLZXlzID0gb3JkaW5hcnlNZXRhZGF0YUtleXMocGFyZW50LCBQKTtcbiAgcmV0dXJuIHBLZXlzLmxlbmd0aCA/IG9LZXlzLmxlbmd0aCA/IGZyb20obmV3IFNldChvS2V5cy5jb25jYXQocEtleXMpKSkgOiBwS2V5cyA6IG9LZXlzO1xufTtcblxubWV0YWRhdGEuZXhwKHsgZ2V0TWV0YWRhdGFLZXlzOiBmdW5jdGlvbiBnZXRNZXRhZGF0YUtleXModGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gIHJldHVybiBvcmRpbmFyeU1ldGFkYXRhS2V5cyhhbk9iamVjdCh0YXJnZXQpLCBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IHVuZGVmaW5lZCA6IHRvTWV0YUtleShhcmd1bWVudHNbMV0pKTtcbn0gfSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///318\n")},function(module,exports,__webpack_require__){eval("var metadata = __webpack_require__(28);\nvar anObject = __webpack_require__(1);\nvar ordinaryGetOwnMetadata = metadata.get;\nvar toMetaKey = metadata.key;\n\nmetadata.exp({ getOwnMetadata: function getOwnMetadata(metadataKey, target /* , targetKey */) {\n return ordinaryGetOwnMetadata(metadataKey, anObject(target)\n , arguments.length < 3 ? undefined : toMetaKey(arguments[2]));\n} });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtb3duLW1ldGFkYXRhLmpzPzA2YTciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxtQkFBTyxDQUFDLEVBQWE7QUFDcEMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckM7QUFDQTs7QUFFQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBLENBQUMsRUFBRSIsImZpbGUiOiIzMTkuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgbWV0YWRhdGEgPSByZXF1aXJlKCcuL19tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgb3JkaW5hcnlHZXRPd25NZXRhZGF0YSA9IG1ldGFkYXRhLmdldDtcbnZhciB0b01ldGFLZXkgPSBtZXRhZGF0YS5rZXk7XG5cbm1ldGFkYXRhLmV4cCh7IGdldE93bk1ldGFkYXRhOiBmdW5jdGlvbiBnZXRPd25NZXRhZGF0YShtZXRhZGF0YUtleSwgdGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gIHJldHVybiBvcmRpbmFyeUdldE93bk1ldGFkYXRhKG1ldGFkYXRhS2V5LCBhbk9iamVjdCh0YXJnZXQpXG4gICAgLCBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHVuZGVmaW5lZCA6IHRvTWV0YUtleShhcmd1bWVudHNbMl0pKTtcbn0gfSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///319\n")},function(module,exports,__webpack_require__){eval("var metadata = __webpack_require__(28);\nvar anObject = __webpack_require__(1);\nvar ordinaryOwnMetadataKeys = metadata.keys;\nvar toMetaKey = metadata.key;\n\nmetadata.exp({ getOwnMetadataKeys: function getOwnMetadataKeys(target /* , targetKey */) {\n return ordinaryOwnMetadataKeys(anObject(target), arguments.length < 2 ? undefined : toMetaKey(arguments[1]));\n} });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtb3duLW1ldGFkYXRhLWtleXMuanM/N2NkZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxlQUFlLG1CQUFPLENBQUMsRUFBYTtBQUNwQyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQztBQUNBOztBQUVBLGNBQWM7QUFDZDtBQUNBLENBQUMsRUFBRSIsImZpbGUiOiIzMjAuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgbWV0YWRhdGEgPSByZXF1aXJlKCcuL19tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgb3JkaW5hcnlPd25NZXRhZGF0YUtleXMgPSBtZXRhZGF0YS5rZXlzO1xudmFyIHRvTWV0YUtleSA9IG1ldGFkYXRhLmtleTtcblxubWV0YWRhdGEuZXhwKHsgZ2V0T3duTWV0YWRhdGFLZXlzOiBmdW5jdGlvbiBnZXRPd25NZXRhZGF0YUtleXModGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gIHJldHVybiBvcmRpbmFyeU93bk1ldGFkYXRhS2V5cyhhbk9iamVjdCh0YXJnZXQpLCBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IHVuZGVmaW5lZCA6IHRvTWV0YUtleShhcmd1bWVudHNbMV0pKTtcbn0gfSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///320\n")},function(module,exports,__webpack_require__){eval("var metadata = __webpack_require__(28);\nvar anObject = __webpack_require__(1);\nvar getPrototypeOf = __webpack_require__(17);\nvar ordinaryHasOwnMetadata = metadata.has;\nvar toMetaKey = metadata.key;\n\nvar ordinaryHasMetadata = function (MetadataKey, O, P) {\n var hasOwn = ordinaryHasOwnMetadata(MetadataKey, O, P);\n if (hasOwn) return true;\n var parent = getPrototypeOf(O);\n return parent !== null ? ordinaryHasMetadata(MetadataKey, parent, P) : false;\n};\n\nmetadata.exp({ hasMetadata: function hasMetadata(metadataKey, target /* , targetKey */) {\n return ordinaryHasMetadata(metadataKey, anObject(target), arguments.length < 3 ? undefined : toMetaKey(arguments[2]));\n} });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5oYXMtbWV0YWRhdGEuanM/ODk2ZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxlQUFlLG1CQUFPLENBQUMsRUFBYTtBQUNwQyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxxQkFBcUIsbUJBQU8sQ0FBQyxFQUFlO0FBQzVDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGNBQWM7QUFDZDtBQUNBLENBQUMsRUFBRSIsImZpbGUiOiIzMjEuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgbWV0YWRhdGEgPSByZXF1aXJlKCcuL19tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgb3JkaW5hcnlIYXNPd25NZXRhZGF0YSA9IG1ldGFkYXRhLmhhcztcbnZhciB0b01ldGFLZXkgPSBtZXRhZGF0YS5rZXk7XG5cbnZhciBvcmRpbmFyeUhhc01ldGFkYXRhID0gZnVuY3Rpb24gKE1ldGFkYXRhS2V5LCBPLCBQKSB7XG4gIHZhciBoYXNPd24gPSBvcmRpbmFyeUhhc093bk1ldGFkYXRhKE1ldGFkYXRhS2V5LCBPLCBQKTtcbiAgaWYgKGhhc093bikgcmV0dXJuIHRydWU7XG4gIHZhciBwYXJlbnQgPSBnZXRQcm90b3R5cGVPZihPKTtcbiAgcmV0dXJuIHBhcmVudCAhPT0gbnVsbCA/IG9yZGluYXJ5SGFzTWV0YWRhdGEoTWV0YWRhdGFLZXksIHBhcmVudCwgUCkgOiBmYWxzZTtcbn07XG5cbm1ldGFkYXRhLmV4cCh7IGhhc01ldGFkYXRhOiBmdW5jdGlvbiBoYXNNZXRhZGF0YShtZXRhZGF0YUtleSwgdGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gIHJldHVybiBvcmRpbmFyeUhhc01ldGFkYXRhKG1ldGFkYXRhS2V5LCBhbk9iamVjdCh0YXJnZXQpLCBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHVuZGVmaW5lZCA6IHRvTWV0YUtleShhcmd1bWVudHNbMl0pKTtcbn0gfSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///321\n")},function(module,exports,__webpack_require__){eval("var metadata = __webpack_require__(28);\nvar anObject = __webpack_require__(1);\nvar ordinaryHasOwnMetadata = metadata.has;\nvar toMetaKey = metadata.key;\n\nmetadata.exp({ hasOwnMetadata: function hasOwnMetadata(metadataKey, target /* , targetKey */) {\n return ordinaryHasOwnMetadata(metadataKey, anObject(target)\n , arguments.length < 3 ? undefined : toMetaKey(arguments[2]));\n} });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5oYXMtb3duLW1ldGFkYXRhLmpzP2VjMzkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxtQkFBTyxDQUFDLEVBQWE7QUFDcEMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckM7QUFDQTs7QUFFQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBLENBQUMsRUFBRSIsImZpbGUiOiIzMjIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgbWV0YWRhdGEgPSByZXF1aXJlKCcuL19tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgb3JkaW5hcnlIYXNPd25NZXRhZGF0YSA9IG1ldGFkYXRhLmhhcztcbnZhciB0b01ldGFLZXkgPSBtZXRhZGF0YS5rZXk7XG5cbm1ldGFkYXRhLmV4cCh7IGhhc093bk1ldGFkYXRhOiBmdW5jdGlvbiBoYXNPd25NZXRhZGF0YShtZXRhZGF0YUtleSwgdGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gIHJldHVybiBvcmRpbmFyeUhhc093bk1ldGFkYXRhKG1ldGFkYXRhS2V5LCBhbk9iamVjdCh0YXJnZXQpXG4gICAgLCBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHVuZGVmaW5lZCA6IHRvTWV0YUtleShhcmd1bWVudHNbMl0pKTtcbn0gfSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///322\n")},function(module,exports,__webpack_require__){eval("var $metadata = __webpack_require__(28);\nvar anObject = __webpack_require__(1);\nvar aFunction = __webpack_require__(10);\nvar toMetaKey = $metadata.key;\nvar ordinaryDefineOwnMetadata = $metadata.set;\n\n$metadata.exp({ metadata: function metadata(metadataKey, metadataValue) {\n return function decorator(target, targetKey) {\n ordinaryDefineOwnMetadata(\n metadataKey, metadataValue,\n (targetKey !== undefined ? anObject : aFunction)(target),\n toMetaKey(targetKey)\n );\n };\n} });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5tZXRhZGF0YS5qcz8zYTljIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGdCQUFnQixtQkFBTyxDQUFDLEVBQWE7QUFDckMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2QztBQUNBOztBQUVBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsRUFBRSIsImZpbGUiOiIzMjMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgJG1ldGFkYXRhID0gcmVxdWlyZSgnLi9fbWV0YWRhdGEnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciB0b01ldGFLZXkgPSAkbWV0YWRhdGEua2V5O1xudmFyIG9yZGluYXJ5RGVmaW5lT3duTWV0YWRhdGEgPSAkbWV0YWRhdGEuc2V0O1xuXG4kbWV0YWRhdGEuZXhwKHsgbWV0YWRhdGE6IGZ1bmN0aW9uIG1ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbiBkZWNvcmF0b3IodGFyZ2V0LCB0YXJnZXRLZXkpIHtcbiAgICBvcmRpbmFyeURlZmluZU93bk1ldGFkYXRhKFxuICAgICAgbWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUsXG4gICAgICAodGFyZ2V0S2V5ICE9PSB1bmRlZmluZWQgPyBhbk9iamVjdCA6IGFGdW5jdGlvbikodGFyZ2V0KSxcbiAgICAgIHRvTWV0YUtleSh0YXJnZXRLZXkpXG4gICAgKTtcbiAgfTtcbn0gfSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///323\n")},function(module,exports,__webpack_require__){eval("// https://github.com/rwaldron/tc39-notes/blob/master/es6/2014-09/sept-25.md#510-globalasap-for-enqueuing-a-microtask\nvar $export = __webpack_require__(0);\nvar microtask = __webpack_require__(90)();\nvar process = __webpack_require__(2).process;\nvar isNode = __webpack_require__(20)(process) == 'process';\n\n$export($export.G, {\n asap: function asap(fn) {\n var domain = isNode && process.domain;\n microtask(domain ? domain.bind(fn) : fn);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuYXNhcC5qcz8wZDI1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBYztBQUN0QyxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxhQUFhLG1CQUFPLENBQUMsRUFBUTs7QUFFN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMzI0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXRodWIuY29tL3J3YWxkcm9uL3RjMzktbm90ZXMvYmxvYi9tYXN0ZXIvZXM2LzIwMTQtMDkvc2VwdC0yNS5tZCM1MTAtZ2xvYmFsYXNhcC1mb3ItZW5xdWV1aW5nLWEtbWljcm90YXNrXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIG1pY3JvdGFzayA9IHJlcXVpcmUoJy4vX21pY3JvdGFzaycpKCk7XG52YXIgcHJvY2VzcyA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLnByb2Nlc3M7XG52YXIgaXNOb2RlID0gcmVxdWlyZSgnLi9fY29mJykocHJvY2VzcykgPT0gJ3Byb2Nlc3MnO1xuXG4kZXhwb3J0KCRleHBvcnQuRywge1xuICBhc2FwOiBmdW5jdGlvbiBhc2FwKGZuKSB7XG4gICAgdmFyIGRvbWFpbiA9IGlzTm9kZSAmJiBwcm9jZXNzLmRvbWFpbjtcbiAgICBtaWNyb3Rhc2soZG9tYWluID8gZG9tYWluLmJpbmQoZm4pIDogZm4pO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///324\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// https://github.com/zenparsing/es-observable\nvar $export = __webpack_require__(0);\nvar global = __webpack_require__(2);\nvar core = __webpack_require__(18);\nvar microtask = __webpack_require__(90)();\nvar OBSERVABLE = __webpack_require__(5)('observable');\nvar aFunction = __webpack_require__(10);\nvar anObject = __webpack_require__(1);\nvar anInstance = __webpack_require__(39);\nvar redefineAll = __webpack_require__(41);\nvar hide = __webpack_require__(11);\nvar forOf = __webpack_require__(40);\nvar RETURN = forOf.RETURN;\n\nvar getMethod = function (fn) {\n return fn == null ? undefined : aFunction(fn);\n};\n\nvar cleanupSubscription = function (subscription) {\n var cleanup = subscription._c;\n if (cleanup) {\n subscription._c = undefined;\n cleanup();\n }\n};\n\nvar subscriptionClosed = function (subscription) {\n return subscription._o === undefined;\n};\n\nvar closeSubscription = function (subscription) {\n if (!subscriptionClosed(subscription)) {\n subscription._o = undefined;\n cleanupSubscription(subscription);\n }\n};\n\nvar Subscription = function (observer, subscriber) {\n anObject(observer);\n this._c = undefined;\n this._o = observer;\n observer = new SubscriptionObserver(this);\n try {\n var cleanup = subscriber(observer);\n var subscription = cleanup;\n if (cleanup != null) {\n if (typeof cleanup.unsubscribe === 'function') cleanup = function () { subscription.unsubscribe(); };\n else aFunction(cleanup);\n this._c = cleanup;\n }\n } catch (e) {\n observer.error(e);\n return;\n } if (subscriptionClosed(this)) cleanupSubscription(this);\n};\n\nSubscription.prototype = redefineAll({}, {\n unsubscribe: function unsubscribe() { closeSubscription(this); }\n});\n\nvar SubscriptionObserver = function (subscription) {\n this._s = subscription;\n};\n\nSubscriptionObserver.prototype = redefineAll({}, {\n next: function next(value) {\n var subscription = this._s;\n if (!subscriptionClosed(subscription)) {\n var observer = subscription._o;\n try {\n var m = getMethod(observer.next);\n if (m) return m.call(observer, value);\n } catch (e) {\n try {\n closeSubscription(subscription);\n } finally {\n throw e;\n }\n }\n }\n },\n error: function error(value) {\n var subscription = this._s;\n if (subscriptionClosed(subscription)) throw value;\n var observer = subscription._o;\n subscription._o = undefined;\n try {\n var m = getMethod(observer.error);\n if (!m) throw value;\n value = m.call(observer, value);\n } catch (e) {\n try {\n cleanupSubscription(subscription);\n } finally {\n throw e;\n }\n } cleanupSubscription(subscription);\n return value;\n },\n complete: function complete(value) {\n var subscription = this._s;\n if (!subscriptionClosed(subscription)) {\n var observer = subscription._o;\n subscription._o = undefined;\n try {\n var m = getMethod(observer.complete);\n value = m ? m.call(observer, value) : undefined;\n } catch (e) {\n try {\n cleanupSubscription(subscription);\n } finally {\n throw e;\n }\n } cleanupSubscription(subscription);\n return value;\n }\n }\n});\n\nvar $Observable = function Observable(subscriber) {\n anInstance(this, $Observable, 'Observable', '_f')._f = aFunction(subscriber);\n};\n\nredefineAll($Observable.prototype, {\n subscribe: function subscribe(observer) {\n return new Subscription(observer, this._f);\n },\n forEach: function forEach(fn) {\n var that = this;\n return new (core.Promise || global.Promise)(function (resolve, reject) {\n aFunction(fn);\n var subscription = that.subscribe({\n next: function (value) {\n try {\n return fn(value);\n } catch (e) {\n reject(e);\n subscription.unsubscribe();\n }\n },\n error: reject,\n complete: resolve\n });\n });\n }\n});\n\nredefineAll($Observable, {\n from: function from(x) {\n var C = typeof this === 'function' ? this : $Observable;\n var method = getMethod(anObject(x)[OBSERVABLE]);\n if (method) {\n var observable = anObject(method.call(x));\n return observable.constructor === C ? observable : new C(function (observer) {\n return observable.subscribe(observer);\n });\n }\n return new C(function (observer) {\n var done = false;\n microtask(function () {\n if (!done) {\n try {\n if (forOf(x, false, function (it) {\n observer.next(it);\n if (done) return RETURN;\n }) === RETURN) return;\n } catch (e) {\n if (done) throw e;\n observer.error(e);\n return;\n } observer.complete();\n }\n });\n return function () { done = true; };\n });\n },\n of: function of() {\n for (var i = 0, l = arguments.length, items = new Array(l); i < l;) items[i] = arguments[i++];\n return new (typeof this === 'function' ? this : $Observable)(function (observer) {\n var done = false;\n microtask(function () {\n if (!done) {\n for (var j = 0; j < items.length; ++j) {\n observer.next(items[j]);\n if (done) return;\n } observer.complete();\n }\n });\n return function () { done = true; };\n });\n }\n});\n\nhide($Observable.prototype, OBSERVABLE, function () { return this; });\n\n$export($export.G, { Observable: $Observable });\n\n__webpack_require__(38)('Observable');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JzZXJ2YWJsZS5qcz8zN2I1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxhQUFhLG1CQUFPLENBQUMsQ0FBVztBQUNoQyxXQUFXLG1CQUFPLENBQUMsRUFBUztBQUM1QixnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFjO0FBQ3RDLGlCQUFpQixtQkFBTyxDQUFDLENBQVE7QUFDakMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2QyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxpQkFBaUIsbUJBQU8sQ0FBQyxFQUFnQjtBQUN6QyxrQkFBa0IsbUJBQU8sQ0FBQyxFQUFpQjtBQUMzQyxXQUFXLG1CQUFPLENBQUMsRUFBUztBQUM1QixZQUFZLG1CQUFPLENBQUMsRUFBVztBQUMvQjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0RUFBNEUsNEJBQTRCO0FBQ3hHO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBLHVDQUF1QztBQUN2Qyx1Q0FBdUMseUJBQXlCO0FBQ2hFLENBQUM7O0FBRUQ7QUFDQTtBQUNBOztBQUVBLCtDQUErQztBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYixXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0EsT0FBTztBQUNQLDBCQUEwQixhQUFhO0FBQ3ZDLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQSwrREFBK0QsT0FBTztBQUN0RTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QixrQkFBa0I7QUFDM0M7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBLE9BQU87QUFDUCwwQkFBMEIsYUFBYTtBQUN2QyxLQUFLO0FBQ0w7QUFDQSxDQUFDOztBQUVELHFEQUFxRCxhQUFhLEVBQUU7O0FBRXBFLG9CQUFvQiwwQkFBMEI7O0FBRTlDLG1CQUFPLENBQUMsRUFBZ0IiLCJmaWxlIjoiMzI1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3plbnBhcnNpbmcvZXMtb2JzZXJ2YWJsZVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIG1pY3JvdGFzayA9IHJlcXVpcmUoJy4vX21pY3JvdGFzaycpKCk7XG52YXIgT0JTRVJWQUJMRSA9IHJlcXVpcmUoJy4vX3drcycpKCdvYnNlcnZhYmxlJyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG52YXIgcmVkZWZpbmVBbGwgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIGZvck9mID0gcmVxdWlyZSgnLi9fZm9yLW9mJyk7XG52YXIgUkVUVVJOID0gZm9yT2YuUkVUVVJOO1xuXG52YXIgZ2V0TWV0aG9kID0gZnVuY3Rpb24gKGZuKSB7XG4gIHJldHVybiBmbiA9PSBudWxsID8gdW5kZWZpbmVkIDogYUZ1bmN0aW9uKGZuKTtcbn07XG5cbnZhciBjbGVhbnVwU3Vic2NyaXB0aW9uID0gZnVuY3Rpb24gKHN1YnNjcmlwdGlvbikge1xuICB2YXIgY2xlYW51cCA9IHN1YnNjcmlwdGlvbi5fYztcbiAgaWYgKGNsZWFudXApIHtcbiAgICBzdWJzY3JpcHRpb24uX2MgPSB1bmRlZmluZWQ7XG4gICAgY2xlYW51cCgpO1xuICB9XG59O1xuXG52YXIgc3Vic2NyaXB0aW9uQ2xvc2VkID0gZnVuY3Rpb24gKHN1YnNjcmlwdGlvbikge1xuICByZXR1cm4gc3Vic2NyaXB0aW9uLl9vID09PSB1bmRlZmluZWQ7XG59O1xuXG52YXIgY2xvc2VTdWJzY3JpcHRpb24gPSBmdW5jdGlvbiAoc3Vic2NyaXB0aW9uKSB7XG4gIGlmICghc3Vic2NyaXB0aW9uQ2xvc2VkKHN1YnNjcmlwdGlvbikpIHtcbiAgICBzdWJzY3JpcHRpb24uX28gPSB1bmRlZmluZWQ7XG4gICAgY2xlYW51cFN1YnNjcmlwdGlvbihzdWJzY3JpcHRpb24pO1xuICB9XG59O1xuXG52YXIgU3Vic2NyaXB0aW9uID0gZnVuY3Rpb24gKG9ic2VydmVyLCBzdWJzY3JpYmVyKSB7XG4gIGFuT2JqZWN0KG9ic2VydmVyKTtcbiAgdGhpcy5fYyA9IHVuZGVmaW5lZDtcbiAgdGhpcy5fbyA9IG9ic2VydmVyO1xuICBvYnNlcnZlciA9IG5ldyBTdWJzY3JpcHRpb25PYnNlcnZlcih0aGlzKTtcbiAgdHJ5IHtcbiAgICB2YXIgY2xlYW51cCA9IHN1YnNjcmliZXIob2JzZXJ2ZXIpO1xuICAgIHZhciBzdWJzY3JpcHRpb24gPSBjbGVhbnVwO1xuICAgIGlmIChjbGVhbnVwICE9IG51bGwpIHtcbiAgICAgIGlmICh0eXBlb2YgY2xlYW51cC51bnN1YnNjcmliZSA9PT0gJ2Z1bmN0aW9uJykgY2xlYW51cCA9IGZ1bmN0aW9uICgpIHsgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7IH07XG4gICAgICBlbHNlIGFGdW5jdGlvbihjbGVhbnVwKTtcbiAgICAgIHRoaXMuX2MgPSBjbGVhbnVwO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIG9ic2VydmVyLmVycm9yKGUpO1xuICAgIHJldHVybjtcbiAgfSBpZiAoc3Vic2NyaXB0aW9uQ2xvc2VkKHRoaXMpKSBjbGVhbnVwU3Vic2NyaXB0aW9uKHRoaXMpO1xufTtcblxuU3Vic2NyaXB0aW9uLnByb3RvdHlwZSA9IHJlZGVmaW5lQWxsKHt9LCB7XG4gIHVuc3Vic2NyaWJlOiBmdW5jdGlvbiB1bnN1YnNjcmliZSgpIHsgY2xvc2VTdWJzY3JpcHRpb24odGhpcyk7IH1cbn0pO1xuXG52YXIgU3Vic2NyaXB0aW9uT2JzZXJ2ZXIgPSBmdW5jdGlvbiAoc3Vic2NyaXB0aW9uKSB7XG4gIHRoaXMuX3MgPSBzdWJzY3JpcHRpb247XG59O1xuXG5TdWJzY3JpcHRpb25PYnNlcnZlci5wcm90b3R5cGUgPSByZWRlZmluZUFsbCh7fSwge1xuICBuZXh0OiBmdW5jdGlvbiBuZXh0KHZhbHVlKSB7XG4gICAgdmFyIHN1YnNjcmlwdGlvbiA9IHRoaXMuX3M7XG4gICAgaWYgKCFzdWJzY3JpcHRpb25DbG9zZWQoc3Vic2NyaXB0aW9uKSkge1xuICAgICAgdmFyIG9ic2VydmVyID0gc3Vic2NyaXB0aW9uLl9vO1xuICAgICAgdHJ5IHtcbiAgICAgICAgdmFyIG0gPSBnZXRNZXRob2Qob2JzZXJ2ZXIubmV4dCk7XG4gICAgICAgIGlmIChtKSByZXR1cm4gbS5jYWxsKG9ic2VydmVyLCB2YWx1ZSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY2xvc2VTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LFxuICBlcnJvcjogZnVuY3Rpb24gZXJyb3IodmFsdWUpIHtcbiAgICB2YXIgc3Vic2NyaXB0aW9uID0gdGhpcy5fcztcbiAgICBpZiAoc3Vic2NyaXB0aW9uQ2xvc2VkKHN1YnNjcmlwdGlvbikpIHRocm93IHZhbHVlO1xuICAgIHZhciBvYnNlcnZlciA9IHN1YnNjcmlwdGlvbi5fbztcbiAgICBzdWJzY3JpcHRpb24uX28gPSB1bmRlZmluZWQ7XG4gICAgdHJ5IHtcbiAgICAgIHZhciBtID0gZ2V0TWV0aG9kKG9ic2VydmVyLmVycm9yKTtcbiAgICAgIGlmICghbSkgdGhyb3cgdmFsdWU7XG4gICAgICB2YWx1ZSA9IG0uY2FsbChvYnNlcnZlciwgdmFsdWUpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNsZWFudXBTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgfSBjbGVhbnVwU3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvbik7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9LFxuICBjb21wbGV0ZTogZnVuY3Rpb24gY29tcGxldGUodmFsdWUpIHtcbiAgICB2YXIgc3Vic2NyaXB0aW9uID0gdGhpcy5fcztcbiAgICBpZiAoIXN1YnNjcmlwdGlvbkNsb3NlZChzdWJzY3JpcHRpb24pKSB7XG4gICAgICB2YXIgb2JzZXJ2ZXIgPSBzdWJzY3JpcHRpb24uX287XG4gICAgICBzdWJzY3JpcHRpb24uX28gPSB1bmRlZmluZWQ7XG4gICAgICB0cnkge1xuICAgICAgICB2YXIgbSA9IGdldE1ldGhvZChvYnNlcnZlci5jb21wbGV0ZSk7XG4gICAgICAgIHZhbHVlID0gbSA/IG0uY2FsbChvYnNlcnZlciwgdmFsdWUpIDogdW5kZWZpbmVkO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNsZWFudXBTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICB9IGNsZWFudXBTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKTtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gIH1cbn0pO1xuXG52YXIgJE9ic2VydmFibGUgPSBmdW5jdGlvbiBPYnNlcnZhYmxlKHN1YnNjcmliZXIpIHtcbiAgYW5JbnN0YW5jZSh0aGlzLCAkT2JzZXJ2YWJsZSwgJ09ic2VydmFibGUnLCAnX2YnKS5fZiA9IGFGdW5jdGlvbihzdWJzY3JpYmVyKTtcbn07XG5cbnJlZGVmaW5lQWxsKCRPYnNlcnZhYmxlLnByb3RvdHlwZSwge1xuICBzdWJzY3JpYmU6IGZ1bmN0aW9uIHN1YnNjcmliZShvYnNlcnZlcikge1xuICAgIHJldHVybiBuZXcgU3Vic2NyaXB0aW9uKG9ic2VydmVyLCB0aGlzLl9mKTtcbiAgfSxcbiAgZm9yRWFjaDogZnVuY3Rpb24gZm9yRWFjaChmbikge1xuICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICByZXR1cm4gbmV3IChjb3JlLlByb21pc2UgfHwgZ2xvYmFsLlByb21pc2UpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIGFGdW5jdGlvbihmbik7XG4gICAgICB2YXIgc3Vic2NyaXB0aW9uID0gdGhhdC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIGZuKHZhbHVlKTtcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgICBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiByZWplY3QsXG4gICAgICAgIGNvbXBsZXRlOiByZXNvbHZlXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxufSk7XG5cbnJlZGVmaW5lQWxsKCRPYnNlcnZhYmxlLCB7XG4gIGZyb206IGZ1bmN0aW9uIGZyb20oeCkge1xuICAgIHZhciBDID0gdHlwZW9mIHRoaXMgPT09ICdmdW5jdGlvbicgPyB0aGlzIDogJE9ic2VydmFibGU7XG4gICAgdmFyIG1ldGhvZCA9IGdldE1ldGhvZChhbk9iamVjdCh4KVtPQlNFUlZBQkxFXSk7XG4gICAgaWYgKG1ldGhvZCkge1xuICAgICAgdmFyIG9ic2VydmFibGUgPSBhbk9iamVjdChtZXRob2QuY2FsbCh4KSk7XG4gICAgICByZXR1cm4gb2JzZXJ2YWJsZS5jb25zdHJ1Y3RvciA9PT0gQyA/IG9ic2VydmFibGUgOiBuZXcgQyhmdW5jdGlvbiAob2JzZXJ2ZXIpIHtcbiAgICAgICAgcmV0dXJuIG9ic2VydmFibGUuc3Vic2NyaWJlKG9ic2VydmVyKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IEMoZnVuY3Rpb24gKG9ic2VydmVyKSB7XG4gICAgICB2YXIgZG9uZSA9IGZhbHNlO1xuICAgICAgbWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCFkb25lKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChmb3JPZih4LCBmYWxzZSwgZnVuY3Rpb24gKGl0KSB7XG4gICAgICAgICAgICAgIG9ic2VydmVyLm5leHQoaXQpO1xuICAgICAgICAgICAgICBpZiAoZG9uZSkgcmV0dXJuIFJFVFVSTjtcbiAgICAgICAgICAgIH0pID09PSBSRVRVUk4pIHJldHVybjtcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBpZiAoZG9uZSkgdGhyb3cgZTtcbiAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKGUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH0gb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyBkb25lID0gdHJ1ZTsgfTtcbiAgICB9KTtcbiAgfSxcbiAgb2Y6IGZ1bmN0aW9uIG9mKCkge1xuICAgIGZvciAodmFyIGkgPSAwLCBsID0gYXJndW1lbnRzLmxlbmd0aCwgaXRlbXMgPSBuZXcgQXJyYXkobCk7IGkgPCBsOykgaXRlbXNbaV0gPSBhcmd1bWVudHNbaSsrXTtcbiAgICByZXR1cm4gbmV3ICh0eXBlb2YgdGhpcyA9PT0gJ2Z1bmN0aW9uJyA/IHRoaXMgOiAkT2JzZXJ2YWJsZSkoZnVuY3Rpb24gKG9ic2VydmVyKSB7XG4gICAgICB2YXIgZG9uZSA9IGZhbHNlO1xuICAgICAgbWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCFkb25lKSB7XG4gICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBpdGVtcy5sZW5ndGg7ICsraikge1xuICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChpdGVtc1tqXSk7XG4gICAgICAgICAgICBpZiAoZG9uZSkgcmV0dXJuO1xuICAgICAgICAgIH0gb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyBkb25lID0gdHJ1ZTsgfTtcbiAgICB9KTtcbiAgfVxufSk7XG5cbmhpZGUoJE9ic2VydmFibGUucHJvdG90eXBlLCBPQlNFUlZBQkxFLCBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9KTtcblxuJGV4cG9ydCgkZXhwb3J0LkcsIHsgT2JzZXJ2YWJsZTogJE9ic2VydmFibGUgfSk7XG5cbnJlcXVpcmUoJy4vX3NldC1zcGVjaWVzJykoJ09ic2VydmFibGUnKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///325\n")},function(module,exports,__webpack_require__){eval("// ie9- setTimeout & setInterval additional parameters fix\nvar global = __webpack_require__(2);\nvar $export = __webpack_require__(0);\nvar userAgent = __webpack_require__(60);\nvar slice = [].slice;\nvar MSIE = /MSIE .\\./.test(userAgent); // <- dirty ie9- check\nvar wrap = function (set) {\n return function (fn, time /* , ...args */) {\n var boundArgs = arguments.length > 2;\n var args = boundArgs ? slice.call(arguments, 2) : false;\n return set(boundArgs ? function () {\n // eslint-disable-next-line no-new-func\n (typeof fn == 'function' ? fn : Function(fn)).apply(this, args);\n } : fn, time);\n };\n};\n$export($export.G + $export.B + $export.F * MSIE, {\n setTimeout: wrap(global.setTimeout),\n setInterval: wrap(global.setInterval)\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy93ZWIudGltZXJzLmpzPzQ3OTUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxhQUFhLG1CQUFPLENBQUMsQ0FBVztBQUNoQyxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDO0FBQ0Esc0NBQXNDO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjMyNi5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGllOS0gc2V0VGltZW91dCAmIHNldEludGVydmFsIGFkZGl0aW9uYWwgcGFyYW1ldGVycyBmaXhcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi9fdXNlci1hZ2VudCcpO1xudmFyIHNsaWNlID0gW10uc2xpY2U7XG52YXIgTVNJRSA9IC9NU0lFIC5cXC4vLnRlc3QodXNlckFnZW50KTsgLy8gPC0gZGlydHkgaWU5LSBjaGVja1xudmFyIHdyYXAgPSBmdW5jdGlvbiAoc2V0KSB7XG4gIHJldHVybiBmdW5jdGlvbiAoZm4sIHRpbWUgLyogLCAuLi5hcmdzICovKSB7XG4gICAgdmFyIGJvdW5kQXJncyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyO1xuICAgIHZhciBhcmdzID0gYm91bmRBcmdzID8gc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpIDogZmFsc2U7XG4gICAgcmV0dXJuIHNldChib3VuZEFyZ3MgPyBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmNcbiAgICAgICh0eXBlb2YgZm4gPT0gJ2Z1bmN0aW9uJyA/IGZuIDogRnVuY3Rpb24oZm4pKS5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9IDogZm4sIHRpbWUpO1xuICB9O1xufTtcbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5CICsgJGV4cG9ydC5GICogTVNJRSwge1xuICBzZXRUaW1lb3V0OiB3cmFwKGdsb2JhbC5zZXRUaW1lb3V0KSxcbiAgc2V0SW50ZXJ2YWw6IHdyYXAoZ2xvYmFsLnNldEludGVydmFsKVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///326\n")},function(module,exports,__webpack_require__){eval("var $export = __webpack_require__(0);\nvar $task = __webpack_require__(89);\n$export($export.G + $export.B, {\n setImmediate: $task.set,\n clearImmediate: $task.clear\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy93ZWIuaW1tZWRpYXRlLmpzPzEzMGYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsWUFBWSxtQkFBTyxDQUFDLEVBQVM7QUFDN0I7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIzMjcuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICR0YXNrID0gcmVxdWlyZSgnLi9fdGFzaycpO1xuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LkIsIHtcbiAgc2V0SW1tZWRpYXRlOiAkdGFzay5zZXQsXG4gIGNsZWFySW1tZWRpYXRlOiAkdGFzay5jbGVhclxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///327\n")},function(module,exports,__webpack_require__){eval("var $iterators = __webpack_require__(86);\nvar getKeys = __webpack_require__(34);\nvar redefine = __webpack_require__(12);\nvar global = __webpack_require__(2);\nvar hide = __webpack_require__(11);\nvar Iterators = __webpack_require__(46);\nvar wks = __webpack_require__(5);\nvar ITERATOR = wks('iterator');\nvar TO_STRING_TAG = wks('toStringTag');\nvar ArrayValues = Iterators.Array;\n\nvar DOMIterables = {\n CSSRuleList: true, // TODO: Not spec compliant, should be false.\n CSSStyleDeclaration: false,\n CSSValueList: false,\n ClientRectList: false,\n DOMRectList: false,\n DOMStringList: false,\n DOMTokenList: true,\n DataTransferItemList: false,\n FileList: false,\n HTMLAllCollection: false,\n HTMLCollection: false,\n HTMLFormElement: false,\n HTMLSelectElement: false,\n MediaList: true, // TODO: Not spec compliant, should be false.\n MimeTypeArray: false,\n NamedNodeMap: false,\n NodeList: true,\n PaintRequestList: false,\n Plugin: false,\n PluginArray: false,\n SVGLengthList: false,\n SVGNumberList: false,\n SVGPathSegList: false,\n SVGPointList: false,\n SVGStringList: false,\n SVGTransformList: false,\n SourceBufferList: false,\n StyleSheetList: true, // TODO: Not spec compliant, should be false.\n TextTrackCueList: false,\n TextTrackList: false,\n TouchList: false\n};\n\nfor (var collections = getKeys(DOMIterables), i = 0; i < collections.length; i++) {\n var NAME = collections[i];\n var explicit = DOMIterables[NAME];\n var Collection = global[NAME];\n var proto = Collection && Collection.prototype;\n var key;\n if (proto) {\n if (!proto[ITERATOR]) hide(proto, ITERATOR, ArrayValues);\n if (!proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n Iterators[NAME] = ArrayValues;\n if (explicit) for (key in $iterators) if (!proto[key]) redefine(proto, key, $iterators[key], true);\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy93ZWIuZG9tLml0ZXJhYmxlLmpzP2FjNmEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsaUJBQWlCLG1CQUFPLENBQUMsRUFBc0I7QUFDL0MsY0FBYyxtQkFBTyxDQUFDLEVBQWdCO0FBQ3RDLGVBQWUsbUJBQU8sQ0FBQyxFQUFhO0FBQ3BDLGFBQWEsbUJBQU8sQ0FBQyxDQUFXO0FBQ2hDLFdBQVcsbUJBQU8sQ0FBQyxFQUFTO0FBQzVCLGdCQUFnQixtQkFBTyxDQUFDLEVBQWM7QUFDdEMsVUFBVSxtQkFBTyxDQUFDLENBQVE7QUFDMUI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxvREFBb0Qsd0JBQXdCO0FBQzVFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIzMjguanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgJGl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vZXM2LmFycmF5Lml0ZXJhdG9yJyk7XG52YXIgZ2V0S2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJyk7XG52YXIgd2tzID0gcmVxdWlyZSgnLi9fd2tzJyk7XG52YXIgSVRFUkFUT1IgPSB3a3MoJ2l0ZXJhdG9yJyk7XG52YXIgVE9fU1RSSU5HX1RBRyA9IHdrcygndG9TdHJpbmdUYWcnKTtcbnZhciBBcnJheVZhbHVlcyA9IEl0ZXJhdG9ycy5BcnJheTtcblxudmFyIERPTUl0ZXJhYmxlcyA9IHtcbiAgQ1NTUnVsZUxpc3Q6IHRydWUsIC8vIFRPRE86IE5vdCBzcGVjIGNvbXBsaWFudCwgc2hvdWxkIGJlIGZhbHNlLlxuICBDU1NTdHlsZURlY2xhcmF0aW9uOiBmYWxzZSxcbiAgQ1NTVmFsdWVMaXN0OiBmYWxzZSxcbiAgQ2xpZW50UmVjdExpc3Q6IGZhbHNlLFxuICBET01SZWN0TGlzdDogZmFsc2UsXG4gIERPTVN0cmluZ0xpc3Q6IGZhbHNlLFxuICBET01Ub2tlbkxpc3Q6IHRydWUsXG4gIERhdGFUcmFuc2Zlckl0ZW1MaXN0OiBmYWxzZSxcbiAgRmlsZUxpc3Q6IGZhbHNlLFxuICBIVE1MQWxsQ29sbGVjdGlvbjogZmFsc2UsXG4gIEhUTUxDb2xsZWN0aW9uOiBmYWxzZSxcbiAgSFRNTEZvcm1FbGVtZW50OiBmYWxzZSxcbiAgSFRNTFNlbGVjdEVsZW1lbnQ6IGZhbHNlLFxuICBNZWRpYUxpc3Q6IHRydWUsIC8vIFRPRE86IE5vdCBzcGVjIGNvbXBsaWFudCwgc2hvdWxkIGJlIGZhbHNlLlxuICBNaW1lVHlwZUFycmF5OiBmYWxzZSxcbiAgTmFtZWROb2RlTWFwOiBmYWxzZSxcbiAgTm9kZUxpc3Q6IHRydWUsXG4gIFBhaW50UmVxdWVzdExpc3Q6IGZhbHNlLFxuICBQbHVnaW46IGZhbHNlLFxuICBQbHVnaW5BcnJheTogZmFsc2UsXG4gIFNWR0xlbmd0aExpc3Q6IGZhbHNlLFxuICBTVkdOdW1iZXJMaXN0OiBmYWxzZSxcbiAgU1ZHUGF0aFNlZ0xpc3Q6IGZhbHNlLFxuICBTVkdQb2ludExpc3Q6IGZhbHNlLFxuICBTVkdTdHJpbmdMaXN0OiBmYWxzZSxcbiAgU1ZHVHJhbnNmb3JtTGlzdDogZmFsc2UsXG4gIFNvdXJjZUJ1ZmZlckxpc3Q6IGZhbHNlLFxuICBTdHlsZVNoZWV0TGlzdDogdHJ1ZSwgLy8gVE9ETzogTm90IHNwZWMgY29tcGxpYW50LCBzaG91bGQgYmUgZmFsc2UuXG4gIFRleHRUcmFja0N1ZUxpc3Q6IGZhbHNlLFxuICBUZXh0VHJhY2tMaXN0OiBmYWxzZSxcbiAgVG91Y2hMaXN0OiBmYWxzZVxufTtcblxuZm9yICh2YXIgY29sbGVjdGlvbnMgPSBnZXRLZXlzKERPTUl0ZXJhYmxlcyksIGkgPSAwOyBpIDwgY29sbGVjdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgdmFyIE5BTUUgPSBjb2xsZWN0aW9uc1tpXTtcbiAgdmFyIGV4cGxpY2l0ID0gRE9NSXRlcmFibGVzW05BTUVdO1xuICB2YXIgQ29sbGVjdGlvbiA9IGdsb2JhbFtOQU1FXTtcbiAgdmFyIHByb3RvID0gQ29sbGVjdGlvbiAmJiBDb2xsZWN0aW9uLnByb3RvdHlwZTtcbiAgdmFyIGtleTtcbiAgaWYgKHByb3RvKSB7XG4gICAgaWYgKCFwcm90b1tJVEVSQVRPUl0pIGhpZGUocHJvdG8sIElURVJBVE9SLCBBcnJheVZhbHVlcyk7XG4gICAgaWYgKCFwcm90b1tUT19TVFJJTkdfVEFHXSkgaGlkZShwcm90bywgVE9fU1RSSU5HX1RBRywgTkFNRSk7XG4gICAgSXRlcmF0b3JzW05BTUVdID0gQXJyYXlWYWx1ZXM7XG4gICAgaWYgKGV4cGxpY2l0KSBmb3IgKGtleSBpbiAkaXRlcmF0b3JzKSBpZiAoIXByb3RvW2tleV0pIHJlZGVmaW5lKHByb3RvLCBrZXksICRpdGVyYXRvcnNba2V5XSwgdHJ1ZSk7XG4gIH1cbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///328\n")},function(module,exports,__webpack_require__){eval('/* WEBPACK VAR INJECTION */(function(global) {/**\n * Copyright (c) 2014, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * https://raw.github.com/facebook/regenerator/master/LICENSE file. An\n * additional grant of patent rights can be found in the PATENTS file in\n * the same directory.\n */\n\n!(function(global) {\n "use strict";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === "function" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || "@@iterator";\n var asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator";\n var toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag";\n\n var inModule = typeof module === "object";\n var runtime = global.regeneratorRuntime;\n if (runtime) {\n if (inModule) {\n // If regeneratorRuntime is defined globally and we\'re in a module,\n // make the exports object identical to regeneratorRuntime.\n module.exports = runtime;\n }\n // Don\'t bother evaluating the rest of this file if the runtime was\n // already defined globally.\n return;\n }\n\n // Define the runtime globally (as expected by generated code) as either\n // module.exports (if we\'re in a module) or a new, empty object.\n runtime = global.regeneratorRuntime = inModule ? module.exports : {};\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n runtime.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there\'s no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don\'t have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: "normal", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: "throw", arg: err };\n }\n }\n\n var GenStateSuspendedStart = "suspendedStart";\n var GenStateSuspendedYield = "suspendedYield";\n var GenStateExecuting = "executing";\n var GenStateCompleted = "completed";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don\'t natively support it.\n var IteratorPrototype = {};\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunctionPrototype[toStringTagSymbol] =\n GeneratorFunction.displayName = "GeneratorFunction";\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n ["next", "throw", "return"].forEach(function(method) {\n prototype[method] = function(arg) {\n return this._invoke(method, arg);\n };\n });\n }\n\n runtime.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === "function" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === "GeneratorFunction"\n : false;\n };\n\n runtime.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n if (!(toStringTagSymbol in genFun)) {\n genFun[toStringTagSymbol] = "GeneratorFunction";\n }\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, "__await")` to determine if the yielded value is\n // meant to be awaited.\n runtime.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === "throw") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === "object" &&\n hasOwn.call(value, "__await")) {\n return Promise.resolve(value.__await).then(function(value) {\n invoke("next", value, resolve, reject);\n }, function(err) {\n invoke("throw", err, resolve, reject);\n });\n }\n\n return Promise.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration. If the Promise is rejected, however, the\n // result for this iteration will be rejected with the same\n // reason. Note that rejections of yielded Promises are not\n // thrown back into the generator function, as is the case\n // when an awaited Promise is rejected. This difference in\n // behavior between yield and await is important, because it\n // allows the consumer to decide what to do with the yielded\n // rejection (swallow it and continue, manually .throw it back\n // into the generator, abandon iteration, whatever). With\n // await, by contrast, there is no opportunity to examine the\n // rejection reason outside the generator function, so the\n // only option is to throw it from the await expression, and\n // let the generator function handle the exception.\n result.value = unwrapped;\n resolve(result);\n }, reject);\n }\n }\n\n if (typeof global.process === "object" && global.process.domain) {\n invoke = global.process.domain.bind(invoke);\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new Promise(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n runtime.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n runtime.async = function(innerFn, outerFn, self, tryLocsList) {\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList)\n );\n\n return runtime.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error("Generator is already running");\n }\n\n if (state === GenStateCompleted) {\n if (method === "throw") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === "next") {\n // Setting context._sent for legacy support of Babel\'s\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === "throw") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === "return") {\n context.abrupt("return", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === "normal") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === "throw") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = "throw";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === "throw") {\n if (delegate.iterator.return) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = "return";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === "throw") {\n // If maybeInvokeDelegate(context) changed context.method from\n // "return" to "throw", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = "throw";\n context.arg = new TypeError(\n "The iterator does not provide a \'throw\' method");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === "throw") {\n context.method = "throw";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = "throw";\n context.arg = new TypeError("iterator result is not an object");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was "throw" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was "next", forget context.arg since it has been\n // "consumed" by the delegate iterator. If context.method was\n // "return", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== "return") {\n context.method = "next";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n Gp[toStringTagSymbol] = "Generator";\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers\' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn\'t happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return "[object Generator]";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = "normal";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: "root" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n runtime.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === "function") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n runtime.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel\'s\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = "next";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === "t" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === "throw") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = "throw";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = "next";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === "root") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle("end");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, "catchLoc");\n var hasFinally = hasOwn.call(entry, "finallyLoc");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error("try statement without catch or finally");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, "finallyLoc") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === "break" ||\n type === "continue") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = "next";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === "throw") {\n throw record.arg;\n }\n\n if (record.type === "break" ||\n record.type === "continue") {\n this.next = record.arg;\n } else if (record.type === "return") {\n this.rval = this.arg = record.arg;\n this.method = "return";\n this.next = "end";\n } else if (record.type === "normal" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n "catch": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === "throw") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error("illegal catch attempt");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === "next") {\n // Deliberately forget the last sent value so that we don\'t\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n})(\n // Among the various tricks for obtaining a reference to the global\n // object, this seems to be the most reliable technique that does not\n // use indirect eval (which violates Content Security Policy).\n typeof global === "object" ? global :\n typeof window === "object" ? window :\n typeof self === "object" ? self : this\n);\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(93)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9yZWdlbmVyYXRvci1ydW50aW1lL3J1bnRpbWUuanM/ZjNhMiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZCxLQUFLO0FBQ0wsY0FBYztBQUNkO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseURBQXlEO0FBQ3pEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBLFdBQVc7QUFDWDs7QUFFQTtBQUNBO0FBQ0Esd0NBQXdDLFdBQVc7QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDJCQUEyQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLFNBQVM7QUFDVDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esb0NBQW9DLGNBQWM7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlDQUFpQyxrQkFBa0I7QUFDbkQ7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGlCQUFpQjs7QUFFakI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLGlCQUFpQjtBQUN6QztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFlBQVk7QUFDWjtBQUNBOztBQUVBO0FBQ0EsWUFBWTtBQUNaOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsOENBQThDLFFBQVE7QUFDdEQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBOztBQUVBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7O0FBRUEsV0FBVztBQUNYO0FBQ0E7QUFDQTs7QUFFQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0EsOENBQThDLFFBQVE7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQSw4Q0FBOEMsUUFBUTtBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQSw4Q0FBOEMsUUFBUTtBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIzMjkuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxNCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBodHRwczovL3Jhdy5naXRodWIuY29tL2ZhY2Vib29rL3JlZ2VuZXJhdG9yL21hc3Rlci9MSUNFTlNFIGZpbGUuIEFuXG4gKiBhZGRpdGlvbmFsIGdyYW50IG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW5cbiAqIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqL1xuXG4hKGZ1bmN0aW9uKGdsb2JhbCkge1xuICBcInVzZSBzdHJpY3RcIjtcblxuICB2YXIgT3AgPSBPYmplY3QucHJvdG90eXBlO1xuICB2YXIgaGFzT3duID0gT3AuaGFzT3duUHJvcGVydHk7XG4gIHZhciB1bmRlZmluZWQ7IC8vIE1vcmUgY29tcHJlc3NpYmxlIHRoYW4gdm9pZCAwLlxuICB2YXIgJFN5bWJvbCA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiA/IFN5bWJvbCA6IHt9O1xuICB2YXIgaXRlcmF0b3JTeW1ib2wgPSAkU3ltYm9sLml0ZXJhdG9yIHx8IFwiQEBpdGVyYXRvclwiO1xuICB2YXIgYXN5bmNJdGVyYXRvclN5bWJvbCA9ICRTeW1ib2wuYXN5bmNJdGVyYXRvciB8fCBcIkBAYXN5bmNJdGVyYXRvclwiO1xuICB2YXIgdG9TdHJpbmdUYWdTeW1ib2wgPSAkU3ltYm9sLnRvU3RyaW5nVGFnIHx8IFwiQEB0b1N0cmluZ1RhZ1wiO1xuXG4gIHZhciBpbk1vZHVsZSA9IHR5cGVvZiBtb2R1bGUgPT09IFwib2JqZWN0XCI7XG4gIHZhciBydW50aW1lID0gZ2xvYmFsLnJlZ2VuZXJhdG9yUnVudGltZTtcbiAgaWYgKHJ1bnRpbWUpIHtcbiAgICBpZiAoaW5Nb2R1bGUpIHtcbiAgICAgIC8vIElmIHJlZ2VuZXJhdG9yUnVudGltZSBpcyBkZWZpbmVkIGdsb2JhbGx5IGFuZCB3ZSdyZSBpbiBhIG1vZHVsZSxcbiAgICAgIC8vIG1ha2UgdGhlIGV4cG9ydHMgb2JqZWN0IGlkZW50aWNhbCB0byByZWdlbmVyYXRvclJ1bnRpbWUuXG4gICAgICBtb2R1bGUuZXhwb3J0cyA9IHJ1bnRpbWU7XG4gICAgfVxuICAgIC8vIERvbid0IGJvdGhlciBldmFsdWF0aW5nIHRoZSByZXN0IG9mIHRoaXMgZmlsZSBpZiB0aGUgcnVudGltZSB3YXNcbiAgICAvLyBhbHJlYWR5IGRlZmluZWQgZ2xvYmFsbHkuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gRGVmaW5lIHRoZSBydW50aW1lIGdsb2JhbGx5IChhcyBleHBlY3RlZCBieSBnZW5lcmF0ZWQgY29kZSkgYXMgZWl0aGVyXG4gIC8vIG1vZHVsZS5leHBvcnRzIChpZiB3ZSdyZSBpbiBhIG1vZHVsZSkgb3IgYSBuZXcsIGVtcHR5IG9iamVjdC5cbiAgcnVudGltZSA9IGdsb2JhbC5yZWdlbmVyYXRvclJ1bnRpbWUgPSBpbk1vZHVsZSA/IG1vZHVsZS5leHBvcnRzIDoge307XG5cbiAgZnVuY3Rpb24gd3JhcChpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdCkge1xuICAgIC8vIElmIG91dGVyRm4gcHJvdmlkZWQgYW5kIG91dGVyRm4ucHJvdG90eXBlIGlzIGEgR2VuZXJhdG9yLCB0aGVuIG91dGVyRm4ucHJvdG90eXBlIGluc3RhbmNlb2YgR2VuZXJhdG9yLlxuICAgIHZhciBwcm90b0dlbmVyYXRvciA9IG91dGVyRm4gJiYgb3V0ZXJGbi5wcm90b3R5cGUgaW5zdGFuY2VvZiBHZW5lcmF0b3IgPyBvdXRlckZuIDogR2VuZXJhdG9yO1xuICAgIHZhciBnZW5lcmF0b3IgPSBPYmplY3QuY3JlYXRlKHByb3RvR2VuZXJhdG9yLnByb3RvdHlwZSk7XG4gICAgdmFyIGNvbnRleHQgPSBuZXcgQ29udGV4dCh0cnlMb2NzTGlzdCB8fCBbXSk7XG5cbiAgICAvLyBUaGUgLl9pbnZva2UgbWV0aG9kIHVuaWZpZXMgdGhlIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgLm5leHQsXG4gICAgLy8gLnRocm93LCBhbmQgLnJldHVybiBtZXRob2RzLlxuICAgIGdlbmVyYXRvci5faW52b2tlID0gbWFrZUludm9rZU1ldGhvZChpbm5lckZuLCBzZWxmLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBnZW5lcmF0b3I7XG4gIH1cbiAgcnVudGltZS53cmFwID0gd3JhcDtcblxuICAvLyBUcnkvY2F0Y2ggaGVscGVyIHRvIG1pbmltaXplIGRlb3B0aW1pemF0aW9ucy4gUmV0dXJucyBhIGNvbXBsZXRpb25cbiAgLy8gcmVjb3JkIGxpa2UgY29udGV4dC50cnlFbnRyaWVzW2ldLmNvbXBsZXRpb24uIFRoaXMgaW50ZXJmYWNlIGNvdWxkXG4gIC8vIGhhdmUgYmVlbiAoYW5kIHdhcyBwcmV2aW91c2x5KSBkZXNpZ25lZCB0byB0YWtlIGEgY2xvc3VyZSB0byBiZVxuICAvLyBpbnZva2VkIHdpdGhvdXQgYXJndW1lbnRzLCBidXQgaW4gYWxsIHRoZSBjYXNlcyB3ZSBjYXJlIGFib3V0IHdlXG4gIC8vIGFscmVhZHkgaGF2ZSBhbiBleGlzdGluZyBtZXRob2Qgd2Ugd2FudCB0byBjYWxsLCBzbyB0aGVyZSdzIG5vIG5lZWRcbiAgLy8gdG8gY3JlYXRlIGEgbmV3IGZ1bmN0aW9uIG9iamVjdC4gV2UgY2FuIGV2ZW4gZ2V0IGF3YXkgd2l0aCBhc3N1bWluZ1xuICAvLyB0aGUgbWV0aG9kIHRha2VzIGV4YWN0bHkgb25lIGFyZ3VtZW50LCBzaW5jZSB0aGF0IGhhcHBlbnMgdG8gYmUgdHJ1ZVxuICAvLyBpbiBldmVyeSBjYXNlLCBzbyB3ZSBkb24ndCBoYXZlIHRvIHRvdWNoIHRoZSBhcmd1bWVudHMgb2JqZWN0LiBUaGVcbiAgLy8gb25seSBhZGRpdGlvbmFsIGFsbG9jYXRpb24gcmVxdWlyZWQgaXMgdGhlIGNvbXBsZXRpb24gcmVjb3JkLCB3aGljaFxuICAvLyBoYXMgYSBzdGFibGUgc2hhcGUgYW5kIHNvIGhvcGVmdWxseSBzaG91bGQgYmUgY2hlYXAgdG8gYWxsb2NhdGUuXG4gIGZ1bmN0aW9uIHRyeUNhdGNoKGZuLCBvYmosIGFyZykge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4geyB0eXBlOiBcIm5vcm1hbFwiLCBhcmc6IGZuLmNhbGwob2JqLCBhcmcpIH07XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICByZXR1cm4geyB0eXBlOiBcInRocm93XCIsIGFyZzogZXJyIH07XG4gICAgfVxuICB9XG5cbiAgdmFyIEdlblN0YXRlU3VzcGVuZGVkU3RhcnQgPSBcInN1c3BlbmRlZFN0YXJ0XCI7XG4gIHZhciBHZW5TdGF0ZVN1c3BlbmRlZFlpZWxkID0gXCJzdXNwZW5kZWRZaWVsZFwiO1xuICB2YXIgR2VuU3RhdGVFeGVjdXRpbmcgPSBcImV4ZWN1dGluZ1wiO1xuICB2YXIgR2VuU3RhdGVDb21wbGV0ZWQgPSBcImNvbXBsZXRlZFwiO1xuXG4gIC8vIFJldHVybmluZyB0aGlzIG9iamVjdCBmcm9tIHRoZSBpbm5lckZuIGhhcyB0aGUgc2FtZSBlZmZlY3QgYXNcbiAgLy8gYnJlYWtpbmcgb3V0IG9mIHRoZSBkaXNwYXRjaCBzd2l0Y2ggc3RhdGVtZW50LlxuICB2YXIgQ29udGludWVTZW50aW5lbCA9IHt9O1xuXG4gIC8vIER1bW15IGNvbnN0cnVjdG9yIGZ1bmN0aW9ucyB0aGF0IHdlIHVzZSBhcyB0aGUgLmNvbnN0cnVjdG9yIGFuZFxuICAvLyAuY29uc3RydWN0b3IucHJvdG90eXBlIHByb3BlcnRpZXMgZm9yIGZ1bmN0aW9ucyB0aGF0IHJldHVybiBHZW5lcmF0b3JcbiAgLy8gb2JqZWN0cy4gRm9yIGZ1bGwgc3BlYyBjb21wbGlhbmNlLCB5b3UgbWF5IHdpc2ggdG8gY29uZmlndXJlIHlvdXJcbiAgLy8gbWluaWZpZXIgbm90IHRvIG1hbmdsZSB0aGUgbmFtZXMgb2YgdGhlc2UgdHdvIGZ1bmN0aW9ucy5cbiAgZnVuY3Rpb24gR2VuZXJhdG9yKCkge31cbiAgZnVuY3Rpb24gR2VuZXJhdG9yRnVuY3Rpb24oKSB7fVxuICBmdW5jdGlvbiBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSgpIHt9XG5cbiAgLy8gVGhpcyBpcyBhIHBvbHlmaWxsIGZvciAlSXRlcmF0b3JQcm90b3R5cGUlIGZvciBlbnZpcm9ubWVudHMgdGhhdFxuICAvLyBkb24ndCBuYXRpdmVseSBzdXBwb3J0IGl0LlxuICB2YXIgSXRlcmF0b3JQcm90b3R5cGUgPSB7fTtcbiAgSXRlcmF0b3JQcm90b3R5cGVbaXRlcmF0b3JTeW1ib2xdID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIHZhciBnZXRQcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZjtcbiAgdmFyIE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlID0gZ2V0UHJvdG8gJiYgZ2V0UHJvdG8oZ2V0UHJvdG8odmFsdWVzKFtdKSkpO1xuICBpZiAoTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUgJiZcbiAgICAgIE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlICE9PSBPcCAmJlxuICAgICAgaGFzT3duLmNhbGwoTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUsIGl0ZXJhdG9yU3ltYm9sKSkge1xuICAgIC8vIFRoaXMgZW52aXJvbm1lbnQgaGFzIGEgbmF0aXZlICVJdGVyYXRvclByb3RvdHlwZSU7IHVzZSBpdCBpbnN0ZWFkXG4gICAgLy8gb2YgdGhlIHBvbHlmaWxsLlxuICAgIEl0ZXJhdG9yUHJvdG90eXBlID0gTmF0aXZlSXRlcmF0b3JQcm90b3R5cGU7XG4gIH1cblxuICB2YXIgR3AgPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZS5wcm90b3R5cGUgPVxuICAgIEdlbmVyYXRvci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEl0ZXJhdG9yUHJvdG90eXBlKTtcbiAgR2VuZXJhdG9yRnVuY3Rpb24ucHJvdG90eXBlID0gR3AuY29uc3RydWN0b3IgPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZTtcbiAgR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUuY29uc3RydWN0b3IgPSBHZW5lcmF0b3JGdW5jdGlvbjtcbiAgR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGVbdG9TdHJpbmdUYWdTeW1ib2xdID1cbiAgICBHZW5lcmF0b3JGdW5jdGlvbi5kaXNwbGF5TmFtZSA9IFwiR2VuZXJhdG9yRnVuY3Rpb25cIjtcblxuICAvLyBIZWxwZXIgZm9yIGRlZmluaW5nIHRoZSAubmV4dCwgLnRocm93LCBhbmQgLnJldHVybiBtZXRob2RzIG9mIHRoZVxuICAvLyBJdGVyYXRvciBpbnRlcmZhY2UgaW4gdGVybXMgb2YgYSBzaW5nbGUgLl9pbnZva2UgbWV0aG9kLlxuICBmdW5jdGlvbiBkZWZpbmVJdGVyYXRvck1ldGhvZHMocHJvdG90eXBlKSB7XG4gICAgW1wibmV4dFwiLCBcInRocm93XCIsIFwicmV0dXJuXCJdLmZvckVhY2goZnVuY3Rpb24obWV0aG9kKSB7XG4gICAgICBwcm90b3R5cGVbbWV0aG9kXSA9IGZ1bmN0aW9uKGFyZykge1xuICAgICAgICByZXR1cm4gdGhpcy5faW52b2tlKG1ldGhvZCwgYXJnKTtcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBydW50aW1lLmlzR2VuZXJhdG9yRnVuY3Rpb24gPSBmdW5jdGlvbihnZW5GdW4pIHtcbiAgICB2YXIgY3RvciA9IHR5cGVvZiBnZW5GdW4gPT09IFwiZnVuY3Rpb25cIiAmJiBnZW5GdW4uY29uc3RydWN0b3I7XG4gICAgcmV0dXJuIGN0b3JcbiAgICAgID8gY3RvciA9PT0gR2VuZXJhdG9yRnVuY3Rpb24gfHxcbiAgICAgICAgLy8gRm9yIHRoZSBuYXRpdmUgR2VuZXJhdG9yRnVuY3Rpb24gY29uc3RydWN0b3IsIHRoZSBiZXN0IHdlIGNhblxuICAgICAgICAvLyBkbyBpcyB0byBjaGVjayBpdHMgLm5hbWUgcHJvcGVydHkuXG4gICAgICAgIChjdG9yLmRpc3BsYXlOYW1lIHx8IGN0b3IubmFtZSkgPT09IFwiR2VuZXJhdG9yRnVuY3Rpb25cIlxuICAgICAgOiBmYWxzZTtcbiAgfTtcblxuICBydW50aW1lLm1hcmsgPSBmdW5jdGlvbihnZW5GdW4pIHtcbiAgICBpZiAoT2JqZWN0LnNldFByb3RvdHlwZU9mKSB7XG4gICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YoZ2VuRnVuLCBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGdlbkZ1bi5fX3Byb3RvX18gPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZTtcbiAgICAgIGlmICghKHRvU3RyaW5nVGFnU3ltYm9sIGluIGdlbkZ1bikpIHtcbiAgICAgICAgZ2VuRnVuW3RvU3RyaW5nVGFnU3ltYm9sXSA9IFwiR2VuZXJhdG9yRnVuY3Rpb25cIjtcbiAgICAgIH1cbiAgICB9XG4gICAgZ2VuRnVuLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoR3ApO1xuICAgIHJldHVybiBnZW5GdW47XG4gIH07XG5cbiAgLy8gV2l0aGluIHRoZSBib2R5IG9mIGFueSBhc3luYyBmdW5jdGlvbiwgYGF3YWl0IHhgIGlzIHRyYW5zZm9ybWVkIHRvXG4gIC8vIGB5aWVsZCByZWdlbmVyYXRvclJ1bnRpbWUuYXdyYXAoeClgLCBzbyB0aGF0IHRoZSBydW50aW1lIGNhbiB0ZXN0XG4gIC8vIGBoYXNPd24uY2FsbCh2YWx1ZSwgXCJfX2F3YWl0XCIpYCB0byBkZXRlcm1pbmUgaWYgdGhlIHlpZWxkZWQgdmFsdWUgaXNcbiAgLy8gbWVhbnQgdG8gYmUgYXdhaXRlZC5cbiAgcnVudGltZS5hd3JhcCA9IGZ1bmN0aW9uKGFyZykge1xuICAgIHJldHVybiB7IF9fYXdhaXQ6IGFyZyB9O1xuICB9O1xuXG4gIGZ1bmN0aW9uIEFzeW5jSXRlcmF0b3IoZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gaW52b2tlKG1ldGhvZCwgYXJnLCByZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChnZW5lcmF0b3JbbWV0aG9kXSwgZ2VuZXJhdG9yLCBhcmcpO1xuICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgcmVqZWN0KHJlY29yZC5hcmcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHJlY29yZC5hcmc7XG4gICAgICAgIHZhciB2YWx1ZSA9IHJlc3VsdC52YWx1ZTtcbiAgICAgICAgaWYgKHZhbHVlICYmXG4gICAgICAgICAgICB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgICAgIGhhc093bi5jYWxsKHZhbHVlLCBcIl9fYXdhaXRcIikpIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHZhbHVlLl9fYXdhaXQpLnRoZW4oZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgICAgIGludm9rZShcIm5leHRcIiwgdmFsdWUsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgfSwgZnVuY3Rpb24oZXJyKSB7XG4gICAgICAgICAgICBpbnZva2UoXCJ0aHJvd1wiLCBlcnIsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHZhbHVlKS50aGVuKGZ1bmN0aW9uKHVud3JhcHBlZCkge1xuICAgICAgICAgIC8vIFdoZW4gYSB5aWVsZGVkIFByb21pc2UgaXMgcmVzb2x2ZWQsIGl0cyBmaW5hbCB2YWx1ZSBiZWNvbWVzXG4gICAgICAgICAgLy8gdGhlIC52YWx1ZSBvZiB0aGUgUHJvbWlzZTx7dmFsdWUsZG9uZX0+IHJlc3VsdCBmb3IgdGhlXG4gICAgICAgICAgLy8gY3VycmVudCBpdGVyYXRpb24uIElmIHRoZSBQcm9taXNlIGlzIHJlamVjdGVkLCBob3dldmVyLCB0aGVcbiAgICAgICAgICAvLyByZXN1bHQgZm9yIHRoaXMgaXRlcmF0aW9uIHdpbGwgYmUgcmVqZWN0ZWQgd2l0aCB0aGUgc2FtZVxuICAgICAgICAgIC8vIHJlYXNvbi4gTm90ZSB0aGF0IHJlamVjdGlvbnMgb2YgeWllbGRlZCBQcm9taXNlcyBhcmUgbm90XG4gICAgICAgICAgLy8gdGhyb3duIGJhY2sgaW50byB0aGUgZ2VuZXJhdG9yIGZ1bmN0aW9uLCBhcyBpcyB0aGUgY2FzZVxuICAgICAgICAgIC8vIHdoZW4gYW4gYXdhaXRlZCBQcm9taXNlIGlzIHJlamVjdGVkLiBUaGlzIGRpZmZlcmVuY2UgaW5cbiAgICAgICAgICAvLyBiZWhhdmlvciBiZXR3ZWVuIHlpZWxkIGFuZCBhd2FpdCBpcyBpbXBvcnRhbnQsIGJlY2F1c2UgaXRcbiAgICAgICAgICAvLyBhbGxvd3MgdGhlIGNvbnN1bWVyIHRvIGRlY2lkZSB3aGF0IHRvIGRvIHdpdGggdGhlIHlpZWxkZWRcbiAgICAgICAgICAvLyByZWplY3Rpb24gKHN3YWxsb3cgaXQgYW5kIGNvbnRpbnVlLCBtYW51YWxseSAudGhyb3cgaXQgYmFja1xuICAgICAgICAgIC8vIGludG8gdGhlIGdlbmVyYXRvciwgYWJhbmRvbiBpdGVyYXRpb24sIHdoYXRldmVyKS4gV2l0aFxuICAgICAgICAgIC8vIGF3YWl0LCBieSBjb250cmFzdCwgdGhlcmUgaXMgbm8gb3Bwb3J0dW5pdHkgdG8gZXhhbWluZSB0aGVcbiAgICAgICAgICAvLyByZWplY3Rpb24gcmVhc29uIG91dHNpZGUgdGhlIGdlbmVyYXRvciBmdW5jdGlvbiwgc28gdGhlXG4gICAgICAgICAgLy8gb25seSBvcHRpb24gaXMgdG8gdGhyb3cgaXQgZnJvbSB0aGUgYXdhaXQgZXhwcmVzc2lvbiwgYW5kXG4gICAgICAgICAgLy8gbGV0IHRoZSBnZW5lcmF0b3IgZnVuY3Rpb24gaGFuZGxlIHRoZSBleGNlcHRpb24uXG4gICAgICAgICAgcmVzdWx0LnZhbHVlID0gdW53cmFwcGVkO1xuICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgfSwgcmVqZWN0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGdsb2JhbC5wcm9jZXNzID09PSBcIm9iamVjdFwiICYmIGdsb2JhbC5wcm9jZXNzLmRvbWFpbikge1xuICAgICAgaW52b2tlID0gZ2xvYmFsLnByb2Nlc3MuZG9tYWluLmJpbmQoaW52b2tlKTtcbiAgICB9XG5cbiAgICB2YXIgcHJldmlvdXNQcm9taXNlO1xuXG4gICAgZnVuY3Rpb24gZW5xdWV1ZShtZXRob2QsIGFyZykge1xuICAgICAgZnVuY3Rpb24gY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICBpbnZva2UobWV0aG9kLCBhcmcsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcHJldmlvdXNQcm9taXNlID1cbiAgICAgICAgLy8gSWYgZW5xdWV1ZSBoYXMgYmVlbiBjYWxsZWQgYmVmb3JlLCB0aGVuIHdlIHdhbnQgdG8gd2FpdCB1bnRpbFxuICAgICAgICAvLyBhbGwgcHJldmlvdXMgUHJvbWlzZXMgaGF2ZSBiZWVuIHJlc29sdmVkIGJlZm9yZSBjYWxsaW5nIGludm9rZSxcbiAgICAgICAgLy8gc28gdGhhdCByZXN1bHRzIGFyZSBhbHdheXMgZGVsaXZlcmVkIGluIHRoZSBjb3JyZWN0IG9yZGVyLiBJZlxuICAgICAgICAvLyBlbnF1ZXVlIGhhcyBub3QgYmVlbiBjYWxsZWQgYmVmb3JlLCB0aGVuIGl0IGlzIGltcG9ydGFudCB0b1xuICAgICAgICAvLyBjYWxsIGludm9rZSBpbW1lZGlhdGVseSwgd2l0aG91dCB3YWl0aW5nIG9uIGEgY2FsbGJhY2sgdG8gZmlyZSxcbiAgICAgICAgLy8gc28gdGhhdCB0aGUgYXN5bmMgZ2VuZXJhdG9yIGZ1bmN0aW9uIGhhcyB0aGUgb3Bwb3J0dW5pdHkgdG8gZG9cbiAgICAgICAgLy8gYW55IG5lY2Vzc2FyeSBzZXR1cCBpbiBhIHByZWRpY3RhYmxlIHdheS4gVGhpcyBwcmVkaWN0YWJpbGl0eVxuICAgICAgICAvLyBpcyB3aHkgdGhlIFByb21pc2UgY29uc3RydWN0b3Igc3luY2hyb25vdXNseSBpbnZva2VzIGl0c1xuICAgICAgICAvLyBleGVjdXRvciBjYWxsYmFjaywgYW5kIHdoeSBhc3luYyBmdW5jdGlvbnMgc3luY2hyb25vdXNseVxuICAgICAgICAvLyBleGVjdXRlIGNvZGUgYmVmb3JlIHRoZSBmaXJzdCBhd2FpdC4gU2luY2Ugd2UgaW1wbGVtZW50IHNpbXBsZVxuICAgICAgICAvLyBhc3luYyBmdW5jdGlvbnMgaW4gdGVybXMgb2YgYXN5bmMgZ2VuZXJhdG9ycywgaXQgaXMgZXNwZWNpYWxseVxuICAgICAgICAvLyBpbXBvcnRhbnQgdG8gZ2V0IHRoaXMgcmlnaHQsIGV2ZW4gdGhvdWdoIGl0IHJlcXVpcmVzIGNhcmUuXG4gICAgICAgIHByZXZpb3VzUHJvbWlzZSA/IHByZXZpb3VzUHJvbWlzZS50aGVuKFxuICAgICAgICAgIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnLFxuICAgICAgICAgIC8vIEF2b2lkIHByb3BhZ2F0aW5nIGZhaWx1cmVzIHRvIFByb21pc2VzIHJldHVybmVkIGJ5IGxhdGVyXG4gICAgICAgICAgLy8gaW52b2NhdGlvbnMgb2YgdGhlIGl0ZXJhdG9yLlxuICAgICAgICAgIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnXG4gICAgICAgICkgOiBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZygpO1xuICAgIH1cblxuICAgIC8vIERlZmluZSB0aGUgdW5pZmllZCBoZWxwZXIgbWV0aG9kIHRoYXQgaXMgdXNlZCB0byBpbXBsZW1lbnQgLm5leHQsXG4gICAgLy8gLnRocm93LCBhbmQgLnJldHVybiAoc2VlIGRlZmluZUl0ZXJhdG9yTWV0aG9kcykuXG4gICAgdGhpcy5faW52b2tlID0gZW5xdWV1ZTtcbiAgfVxuXG4gIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhBc3luY0l0ZXJhdG9yLnByb3RvdHlwZSk7XG4gIEFzeW5jSXRlcmF0b3IucHJvdG90eXBlW2FzeW5jSXRlcmF0b3JTeW1ib2xdID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICBydW50aW1lLkFzeW5jSXRlcmF0b3IgPSBBc3luY0l0ZXJhdG9yO1xuXG4gIC8vIE5vdGUgdGhhdCBzaW1wbGUgYXN5bmMgZnVuY3Rpb25zIGFyZSBpbXBsZW1lbnRlZCBvbiB0b3Agb2ZcbiAgLy8gQXN5bmNJdGVyYXRvciBvYmplY3RzOyB0aGV5IGp1c3QgcmV0dXJuIGEgUHJvbWlzZSBmb3IgdGhlIHZhbHVlIG9mXG4gIC8vIHRoZSBmaW5hbCByZXN1bHQgcHJvZHVjZWQgYnkgdGhlIGl0ZXJhdG9yLlxuICBydW50aW1lLmFzeW5jID0gZnVuY3Rpb24oaW5uZXJGbiwgb3V0ZXJGbiwgc2VsZiwgdHJ5TG9jc0xpc3QpIHtcbiAgICB2YXIgaXRlciA9IG5ldyBBc3luY0l0ZXJhdG9yKFxuICAgICAgd3JhcChpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdClcbiAgICApO1xuXG4gICAgcmV0dXJuIHJ1bnRpbWUuaXNHZW5lcmF0b3JGdW5jdGlvbihvdXRlckZuKVxuICAgICAgPyBpdGVyIC8vIElmIG91dGVyRm4gaXMgYSBnZW5lcmF0b3IsIHJldHVybiB0aGUgZnVsbCBpdGVyYXRvci5cbiAgICAgIDogaXRlci5uZXh0KCkudGhlbihmdW5jdGlvbihyZXN1bHQpIHtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0LmRvbmUgPyByZXN1bHQudmFsdWUgOiBpdGVyLm5leHQoKTtcbiAgICAgICAgfSk7XG4gIH07XG5cbiAgZnVuY3Rpb24gbWFrZUludm9rZU1ldGhvZChpbm5lckZuLCBzZWxmLCBjb250ZXh0KSB7XG4gICAgdmFyIHN0YXRlID0gR2VuU3RhdGVTdXNwZW5kZWRTdGFydDtcblxuICAgIHJldHVybiBmdW5jdGlvbiBpbnZva2UobWV0aG9kLCBhcmcpIHtcbiAgICAgIGlmIChzdGF0ZSA9PT0gR2VuU3RhdGVFeGVjdXRpbmcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgcnVubmluZ1wiKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHN0YXRlID09PSBHZW5TdGF0ZUNvbXBsZXRlZCkge1xuICAgICAgICBpZiAobWV0aG9kID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICB0aHJvdyBhcmc7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBCZSBmb3JnaXZpbmcsIHBlciAyNS4zLjMuMy4zIG9mIHRoZSBzcGVjOlxuICAgICAgICAvLyBodHRwczovL3Blb3BsZS5tb3ppbGxhLm9yZy9+am9yZW5kb3JmZi9lczYtZHJhZnQuaHRtbCNzZWMtZ2VuZXJhdG9ycmVzdW1lXG4gICAgICAgIHJldHVybiBkb25lUmVzdWx0KCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnRleHQubWV0aG9kID0gbWV0aG9kO1xuICAgICAgY29udGV4dC5hcmcgPSBhcmc7XG5cbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIHZhciBkZWxlZ2F0ZSA9IGNvbnRleHQuZGVsZWdhdGU7XG4gICAgICAgIGlmIChkZWxlZ2F0ZSkge1xuICAgICAgICAgIHZhciBkZWxlZ2F0ZVJlc3VsdCA9IG1heWJlSW52b2tlRGVsZWdhdGUoZGVsZWdhdGUsIGNvbnRleHQpO1xuICAgICAgICAgIGlmIChkZWxlZ2F0ZVJlc3VsdCkge1xuICAgICAgICAgICAgaWYgKGRlbGVnYXRlUmVzdWx0ID09PSBDb250aW51ZVNlbnRpbmVsKSBjb250aW51ZTtcbiAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZVJlc3VsdDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29udGV4dC5tZXRob2QgPT09IFwibmV4dFwiKSB7XG4gICAgICAgICAgLy8gU2V0dGluZyBjb250ZXh0Ll9zZW50IGZvciBsZWdhY3kgc3VwcG9ydCBvZiBCYWJlbCdzXG4gICAgICAgICAgLy8gZnVuY3Rpb24uc2VudCBpbXBsZW1lbnRhdGlvbi5cbiAgICAgICAgICBjb250ZXh0LnNlbnQgPSBjb250ZXh0Ll9zZW50ID0gY29udGV4dC5hcmc7XG5cbiAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgaWYgKHN0YXRlID09PSBHZW5TdGF0ZVN1c3BlbmRlZFN0YXJ0KSB7XG4gICAgICAgICAgICBzdGF0ZSA9IEdlblN0YXRlQ29tcGxldGVkO1xuICAgICAgICAgICAgdGhyb3cgY29udGV4dC5hcmc7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29udGV4dC5kaXNwYXRjaEV4Y2VwdGlvbihjb250ZXh0LmFyZyk7XG5cbiAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJyZXR1cm5cIikge1xuICAgICAgICAgIGNvbnRleHQuYWJydXB0KFwicmV0dXJuXCIsIGNvbnRleHQuYXJnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN0YXRlID0gR2VuU3RhdGVFeGVjdXRpbmc7XG5cbiAgICAgICAgdmFyIHJlY29yZCA9IHRyeUNhdGNoKGlubmVyRm4sIHNlbGYsIGNvbnRleHQpO1xuICAgICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwibm9ybWFsXCIpIHtcbiAgICAgICAgICAvLyBJZiBhbiBleGNlcHRpb24gaXMgdGhyb3duIGZyb20gaW5uZXJGbiwgd2UgbGVhdmUgc3RhdGUgPT09XG4gICAgICAgICAgLy8gR2VuU3RhdGVFeGVjdXRpbmcgYW5kIGxvb3AgYmFjayBmb3IgYW5vdGhlciBpbnZvY2F0aW9uLlxuICAgICAgICAgIHN0YXRlID0gY29udGV4dC5kb25lXG4gICAgICAgICAgICA/IEdlblN0YXRlQ29tcGxldGVkXG4gICAgICAgICAgICA6IEdlblN0YXRlU3VzcGVuZGVkWWllbGQ7XG5cbiAgICAgICAgICBpZiAocmVjb3JkLmFyZyA9PT0gQ29udGludWVTZW50aW5lbCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHZhbHVlOiByZWNvcmQuYXJnLFxuICAgICAgICAgICAgZG9uZTogY29udGV4dC5kb25lXG4gICAgICAgICAgfTtcblxuICAgICAgICB9IGVsc2UgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICBzdGF0ZSA9IEdlblN0YXRlQ29tcGxldGVkO1xuICAgICAgICAgIC8vIERpc3BhdGNoIHRoZSBleGNlcHRpb24gYnkgbG9vcGluZyBiYWNrIGFyb3VuZCB0byB0aGVcbiAgICAgICAgICAvLyBjb250ZXh0LmRpc3BhdGNoRXhjZXB0aW9uKGNvbnRleHQuYXJnKSBjYWxsIGFib3ZlLlxuICAgICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiO1xuICAgICAgICAgIGNvbnRleHQuYXJnID0gcmVjb3JkLmFyZztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICAvLyBDYWxsIGRlbGVnYXRlLml0ZXJhdG9yW2NvbnRleHQubWV0aG9kXShjb250ZXh0LmFyZykgYW5kIGhhbmRsZSB0aGVcbiAgLy8gcmVzdWx0LCBlaXRoZXIgYnkgcmV0dXJuaW5nIGEgeyB2YWx1ZSwgZG9uZSB9IHJlc3VsdCBmcm9tIHRoZVxuICAvLyBkZWxlZ2F0ZSBpdGVyYXRvciwgb3IgYnkgbW9kaWZ5aW5nIGNvbnRleHQubWV0aG9kIGFuZCBjb250ZXh0LmFyZyxcbiAgLy8gc2V0dGluZyBjb250ZXh0LmRlbGVnYXRlIHRvIG51bGwsIGFuZCByZXR1cm5pbmcgdGhlIENvbnRpbnVlU2VudGluZWwuXG4gIGZ1bmN0aW9uIG1heWJlSW52b2tlRGVsZWdhdGUoZGVsZWdhdGUsIGNvbnRleHQpIHtcbiAgICB2YXIgbWV0aG9kID0gZGVsZWdhdGUuaXRlcmF0b3JbY29udGV4dC5tZXRob2RdO1xuICAgIGlmIChtZXRob2QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gQSAudGhyb3cgb3IgLnJldHVybiB3aGVuIHRoZSBkZWxlZ2F0ZSBpdGVyYXRvciBoYXMgbm8gLnRocm93XG4gICAgICAvLyBtZXRob2QgYWx3YXlzIHRlcm1pbmF0ZXMgdGhlIHlpZWxkKiBsb29wLlxuICAgICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG5cbiAgICAgIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIGlmIChkZWxlZ2F0ZS5pdGVyYXRvci5yZXR1cm4pIHtcbiAgICAgICAgICAvLyBJZiB0aGUgZGVsZWdhdGUgaXRlcmF0b3IgaGFzIGEgcmV0dXJuIG1ldGhvZCwgZ2l2ZSBpdCBhXG4gICAgICAgICAgLy8gY2hhbmNlIHRvIGNsZWFuIHVwLlxuICAgICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJyZXR1cm5cIjtcbiAgICAgICAgICBjb250ZXh0LmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICBtYXliZUludm9rZURlbGVnYXRlKGRlbGVnYXRlLCBjb250ZXh0KTtcblxuICAgICAgICAgIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgICAvLyBJZiBtYXliZUludm9rZURlbGVnYXRlKGNvbnRleHQpIGNoYW5nZWQgY29udGV4dC5tZXRob2QgZnJvbVxuICAgICAgICAgICAgLy8gXCJyZXR1cm5cIiB0byBcInRocm93XCIsIGxldCB0aGF0IG92ZXJyaWRlIHRoZSBUeXBlRXJyb3IgYmVsb3cuXG4gICAgICAgICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIjtcbiAgICAgICAgY29udGV4dC5hcmcgPSBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgIFwiVGhlIGl0ZXJhdG9yIGRvZXMgbm90IHByb3ZpZGUgYSAndGhyb3cnIG1ldGhvZFwiKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuXG4gICAgdmFyIHJlY29yZCA9IHRyeUNhdGNoKG1ldGhvZCwgZGVsZWdhdGUuaXRlcmF0b3IsIGNvbnRleHQuYXJnKTtcblxuICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICBjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIjtcbiAgICAgIGNvbnRleHQuYXJnID0gcmVjb3JkLmFyZztcbiAgICAgIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsO1xuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuXG4gICAgdmFyIGluZm8gPSByZWNvcmQuYXJnO1xuXG4gICAgaWYgKCEgaW5mbykge1xuICAgICAgY29udGV4dC5tZXRob2QgPSBcInRocm93XCI7XG4gICAgICBjb250ZXh0LmFyZyA9IG5ldyBUeXBlRXJyb3IoXCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdFwiKTtcbiAgICAgIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsO1xuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuXG4gICAgaWYgKGluZm8uZG9uZSkge1xuICAgICAgLy8gQXNzaWduIHRoZSByZXN1bHQgb2YgdGhlIGZpbmlzaGVkIGRlbGVnYXRlIHRvIHRoZSB0ZW1wb3JhcnlcbiAgICAgIC8vIHZhcmlhYmxlIHNwZWNpZmllZCBieSBkZWxlZ2F0ZS5yZXN1bHROYW1lIChzZWUgZGVsZWdhdGVZaWVsZCkuXG4gICAgICBjb250ZXh0W2RlbGVnYXRlLnJlc3VsdE5hbWVdID0gaW5mby52YWx1ZTtcblxuICAgICAgLy8gUmVzdW1lIGV4ZWN1dGlvbiBhdCB0aGUgZGVzaXJlZCBsb2NhdGlvbiAoc2VlIGRlbGVnYXRlWWllbGQpLlxuICAgICAgY29udGV4dC5uZXh0ID0gZGVsZWdhdGUubmV4dExvYztcblxuICAgICAgLy8gSWYgY29udGV4dC5tZXRob2Qgd2FzIFwidGhyb3dcIiBidXQgdGhlIGRlbGVnYXRlIGhhbmRsZWQgdGhlXG4gICAgICAvLyBleGNlcHRpb24sIGxldCB0aGUgb3V0ZXIgZ2VuZXJhdG9yIHByb2NlZWQgbm9ybWFsbHkuIElmXG4gICAgICAvLyBjb250ZXh0Lm1ldGhvZCB3YXMgXCJuZXh0XCIsIGZvcmdldCBjb250ZXh0LmFyZyBzaW5jZSBpdCBoYXMgYmVlblxuICAgICAgLy8gXCJjb25zdW1lZFwiIGJ5IHRoZSBkZWxlZ2F0ZSBpdGVyYXRvci4gSWYgY29udGV4dC5tZXRob2Qgd2FzXG4gICAgICAvLyBcInJldHVyblwiLCBhbGxvdyB0aGUgb3JpZ2luYWwgLnJldHVybiBjYWxsIHRvIGNvbnRpbnVlIGluIHRoZVxuICAgICAgLy8gb3V0ZXIgZ2VuZXJhdG9yLlxuICAgICAgaWYgKGNvbnRleHQubWV0aG9kICE9PSBcInJldHVyblwiKSB7XG4gICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJuZXh0XCI7XG4gICAgICAgIGNvbnRleHQuYXJnID0gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFJlLXlpZWxkIHRoZSByZXN1bHQgcmV0dXJuZWQgYnkgdGhlIGRlbGVnYXRlIG1ldGhvZC5cbiAgICAgIHJldHVybiBpbmZvO1xuICAgIH1cblxuICAgIC8vIFRoZSBkZWxlZ2F0ZSBpdGVyYXRvciBpcyBmaW5pc2hlZCwgc28gZm9yZ2V0IGl0IGFuZCBjb250aW51ZSB3aXRoXG4gICAgLy8gdGhlIG91dGVyIGdlbmVyYXRvci5cbiAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcbiAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgfVxuXG4gIC8vIERlZmluZSBHZW5lcmF0b3IucHJvdG90eXBlLntuZXh0LHRocm93LHJldHVybn0gaW4gdGVybXMgb2YgdGhlXG4gIC8vIHVuaWZpZWQgLl9pbnZva2UgaGVscGVyIG1ldGhvZC5cbiAgZGVmaW5lSXRlcmF0b3JNZXRob2RzKEdwKTtcblxuICBHcFt0b1N0cmluZ1RhZ1N5bWJvbF0gPSBcIkdlbmVyYXRvclwiO1xuXG4gIC8vIEEgR2VuZXJhdG9yIHNob3VsZCBhbHdheXMgcmV0dXJuIGl0c2VsZiBhcyB0aGUgaXRlcmF0b3Igb2JqZWN0IHdoZW4gdGhlXG4gIC8vIEBAaXRlcmF0b3IgZnVuY3Rpb24gaXMgY2FsbGVkIG9uIGl0LiBTb21lIGJyb3dzZXJzJyBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlXG4gIC8vIGl0ZXJhdG9yIHByb3RvdHlwZSBjaGFpbiBpbmNvcnJlY3RseSBpbXBsZW1lbnQgdGhpcywgY2F1c2luZyB0aGUgR2VuZXJhdG9yXG4gIC8vIG9iamVjdCB0byBub3QgYmUgcmV0dXJuZWQgZnJvbSB0aGlzIGNhbGwuIFRoaXMgZW5zdXJlcyB0aGF0IGRvZXNuJ3QgaGFwcGVuLlxuICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlZ2VuZXJhdG9yL2lzc3Vlcy8yNzQgZm9yIG1vcmUgZGV0YWlscy5cbiAgR3BbaXRlcmF0b3JTeW1ib2xdID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgR3AudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gXCJbb2JqZWN0IEdlbmVyYXRvcl1cIjtcbiAgfTtcblxuICBmdW5jdGlvbiBwdXNoVHJ5RW50cnkobG9jcykge1xuICAgIHZhciBlbnRyeSA9IHsgdHJ5TG9jOiBsb2NzWzBdIH07XG5cbiAgICBpZiAoMSBpbiBsb2NzKSB7XG4gICAgICBlbnRyeS5jYXRjaExvYyA9IGxvY3NbMV07XG4gICAgfVxuXG4gICAgaWYgKDIgaW4gbG9jcykge1xuICAgICAgZW50cnkuZmluYWxseUxvYyA9IGxvY3NbMl07XG4gICAgICBlbnRyeS5hZnRlckxvYyA9IGxvY3NbM107XG4gICAgfVxuXG4gICAgdGhpcy50cnlFbnRyaWVzLnB1c2goZW50cnkpO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVzZXRUcnlFbnRyeShlbnRyeSkge1xuICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uIHx8IHt9O1xuICAgIHJlY29yZC50eXBlID0gXCJub3JtYWxcIjtcbiAgICBkZWxldGUgcmVjb3JkLmFyZztcbiAgICBlbnRyeS5jb21wbGV0aW9uID0gcmVjb3JkO1xuICB9XG5cbiAgZnVuY3Rpb24gQ29udGV4dCh0cnlMb2NzTGlzdCkge1xuICAgIC8vIFRoZSByb290IGVudHJ5IG9iamVjdCAoZWZmZWN0aXZlbHkgYSB0cnkgc3RhdGVtZW50IHdpdGhvdXQgYSBjYXRjaFxuICAgIC8vIG9yIGEgZmluYWxseSBibG9jaykgZ2l2ZXMgdXMgYSBwbGFjZSB0byBzdG9yZSB2YWx1ZXMgdGhyb3duIGZyb21cbiAgICAvLyBsb2NhdGlvbnMgd2hlcmUgdGhlcmUgaXMgbm8gZW5jbG9zaW5nIHRyeSBzdGF0ZW1lbnQuXG4gICAgdGhpcy50cnlFbnRyaWVzID0gW3sgdHJ5TG9jOiBcInJvb3RcIiB9XTtcbiAgICB0cnlMb2NzTGlzdC5mb3JFYWNoKHB1c2hUcnlFbnRyeSwgdGhpcyk7XG4gICAgdGhpcy5yZXNldCh0cnVlKTtcbiAgfVxuXG4gIHJ1bnRpbWUua2V5cyA9IGZ1bmN0aW9uKG9iamVjdCkge1xuICAgIHZhciBrZXlzID0gW107XG4gICAgZm9yICh2YXIga2V5IGluIG9iamVjdCkge1xuICAgICAga2V5cy5wdXNoKGtleSk7XG4gICAgfVxuICAgIGtleXMucmV2ZXJzZSgpO1xuXG4gICAgLy8gUmF0aGVyIHRoYW4gcmV0dXJuaW5nIGFuIG9iamVjdCB3aXRoIGEgbmV4dCBtZXRob2QsIHdlIGtlZXBcbiAgICAvLyB0aGluZ3Mgc2ltcGxlIGFuZCByZXR1cm4gdGhlIG5leHQgZnVuY3Rpb24gaXRzZWxmLlxuICAgIHJldHVybiBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgd2hpbGUgKGtleXMubGVuZ3RoKSB7XG4gICAgICAgIHZhciBrZXkgPSBrZXlzLnBvcCgpO1xuICAgICAgICBpZiAoa2V5IGluIG9iamVjdCkge1xuICAgICAgICAgIG5leHQudmFsdWUgPSBrZXk7XG4gICAgICAgICAgbmV4dC5kb25lID0gZmFsc2U7XG4gICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gVG8gYXZvaWQgY3JlYXRpbmcgYW4gYWRkaXRpb25hbCBvYmplY3QsIHdlIGp1c3QgaGFuZyB0aGUgLnZhbHVlXG4gICAgICAvLyBhbmQgLmRvbmUgcHJvcGVydGllcyBvZmYgdGhlIG5leHQgZnVuY3Rpb24gb2JqZWN0IGl0c2VsZi4gVGhpc1xuICAgICAgLy8gYWxzbyBlbnN1cmVzIHRoYXQgdGhlIG1pbmlmaWVyIHdpbGwgbm90IGFub255bWl6ZSB0aGUgZnVuY3Rpb24uXG4gICAgICBuZXh0LmRvbmUgPSB0cnVlO1xuICAgICAgcmV0dXJuIG5leHQ7XG4gICAgfTtcbiAgfTtcblxuICBmdW5jdGlvbiB2YWx1ZXMoaXRlcmFibGUpIHtcbiAgICBpZiAoaXRlcmFibGUpIHtcbiAgICAgIHZhciBpdGVyYXRvck1ldGhvZCA9IGl0ZXJhYmxlW2l0ZXJhdG9yU3ltYm9sXTtcbiAgICAgIGlmIChpdGVyYXRvck1ldGhvZCkge1xuICAgICAgICByZXR1cm4gaXRlcmF0b3JNZXRob2QuY2FsbChpdGVyYWJsZSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgaXRlcmFibGUubmV4dCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHJldHVybiBpdGVyYWJsZTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFpc05hTihpdGVyYWJsZS5sZW5ndGgpKSB7XG4gICAgICAgIHZhciBpID0gLTEsIG5leHQgPSBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgIHdoaWxlICgrK2kgPCBpdGVyYWJsZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmIChoYXNPd24uY2FsbChpdGVyYWJsZSwgaSkpIHtcbiAgICAgICAgICAgICAgbmV4dC52YWx1ZSA9IGl0ZXJhYmxlW2ldO1xuICAgICAgICAgICAgICBuZXh0LmRvbmUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbmV4dC52YWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICBuZXh0LmRvbmUgPSB0cnVlO1xuXG4gICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIG5leHQubmV4dCA9IG5leHQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmV0dXJuIGFuIGl0ZXJhdG9yIHdpdGggbm8gdmFsdWVzLlxuICAgIHJldHVybiB7IG5leHQ6IGRvbmVSZXN1bHQgfTtcbiAgfVxuICBydW50aW1lLnZhbHVlcyA9IHZhbHVlcztcblxuICBmdW5jdGlvbiBkb25lUmVzdWx0KCkge1xuICAgIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfTtcbiAgfVxuXG4gIENvbnRleHQucHJvdG90eXBlID0ge1xuICAgIGNvbnN0cnVjdG9yOiBDb250ZXh0LFxuXG4gICAgcmVzZXQ6IGZ1bmN0aW9uKHNraXBUZW1wUmVzZXQpIHtcbiAgICAgIHRoaXMucHJldiA9IDA7XG4gICAgICB0aGlzLm5leHQgPSAwO1xuICAgICAgLy8gUmVzZXR0aW5nIGNvbnRleHQuX3NlbnQgZm9yIGxlZ2FjeSBzdXBwb3J0IG9mIEJhYmVsJ3NcbiAgICAgIC8vIGZ1bmN0aW9uLnNlbnQgaW1wbGVtZW50YXRpb24uXG4gICAgICB0aGlzLnNlbnQgPSB0aGlzLl9zZW50ID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5kb25lID0gZmFsc2U7XG4gICAgICB0aGlzLmRlbGVnYXRlID0gbnVsbDtcblxuICAgICAgdGhpcy5tZXRob2QgPSBcIm5leHRcIjtcbiAgICAgIHRoaXMuYXJnID0gdW5kZWZpbmVkO1xuXG4gICAgICB0aGlzLnRyeUVudHJpZXMuZm9yRWFjaChyZXNldFRyeUVudHJ5KTtcblxuICAgICAgaWYgKCFza2lwVGVtcFJlc2V0KSB7XG4gICAgICAgIGZvciAodmFyIG5hbWUgaW4gdGhpcykge1xuICAgICAgICAgIC8vIE5vdCBzdXJlIGFib3V0IHRoZSBvcHRpbWFsIG9yZGVyIG9mIHRoZXNlIGNvbmRpdGlvbnM6XG4gICAgICAgICAgaWYgKG5hbWUuY2hhckF0KDApID09PSBcInRcIiAmJlxuICAgICAgICAgICAgICBoYXNPd24uY2FsbCh0aGlzLCBuYW1lKSAmJlxuICAgICAgICAgICAgICAhaXNOYU4oK25hbWUuc2xpY2UoMSkpKSB7XG4gICAgICAgICAgICB0aGlzW25hbWVdID0gdW5kZWZpbmVkO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzdG9wOiBmdW5jdGlvbigpIHtcbiAgICAgIHRoaXMuZG9uZSA9IHRydWU7XG5cbiAgICAgIHZhciByb290RW50cnkgPSB0aGlzLnRyeUVudHJpZXNbMF07XG4gICAgICB2YXIgcm9vdFJlY29yZCA9IHJvb3RFbnRyeS5jb21wbGV0aW9uO1xuICAgICAgaWYgKHJvb3RSZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIHRocm93IHJvb3RSZWNvcmQuYXJnO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5ydmFsO1xuICAgIH0sXG5cbiAgICBkaXNwYXRjaEV4Y2VwdGlvbjogZnVuY3Rpb24oZXhjZXB0aW9uKSB7XG4gICAgICBpZiAodGhpcy5kb25lKSB7XG4gICAgICAgIHRocm93IGV4Y2VwdGlvbjtcbiAgICAgIH1cblxuICAgICAgdmFyIGNvbnRleHQgPSB0aGlzO1xuICAgICAgZnVuY3Rpb24gaGFuZGxlKGxvYywgY2F1Z2h0KSB7XG4gICAgICAgIHJlY29yZC50eXBlID0gXCJ0aHJvd1wiO1xuICAgICAgICByZWNvcmQuYXJnID0gZXhjZXB0aW9uO1xuICAgICAgICBjb250ZXh0Lm5leHQgPSBsb2M7XG5cbiAgICAgICAgaWYgKGNhdWdodCkge1xuICAgICAgICAgIC8vIElmIHRoZSBkaXNwYXRjaGVkIGV4Y2VwdGlvbiB3YXMgY2F1Z2h0IGJ5IGEgY2F0Y2ggYmxvY2ssXG4gICAgICAgICAgLy8gdGhlbiBsZXQgdGhhdCBjYXRjaCBibG9jayBoYW5kbGUgdGhlIGV4Y2VwdGlvbiBub3JtYWxseS5cbiAgICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgICAgIGNvbnRleHQuYXJnID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICEhIGNhdWdodDtcbiAgICAgIH1cblxuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uO1xuXG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPT09IFwicm9vdFwiKSB7XG4gICAgICAgICAgLy8gRXhjZXB0aW9uIHRocm93biBvdXRzaWRlIG9mIGFueSB0cnkgYmxvY2sgdGhhdCBjb3VsZCBoYW5kbGVcbiAgICAgICAgICAvLyBpdCwgc28gc2V0IHRoZSBjb21wbGV0aW9uIHZhbHVlIG9mIHRoZSBlbnRpcmUgZnVuY3Rpb24gdG9cbiAgICAgICAgICAvLyB0aHJvdyB0aGUgZXhjZXB0aW9uLlxuICAgICAgICAgIHJldHVybiBoYW5kbGUoXCJlbmRcIik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZW50cnkudHJ5TG9jIDw9IHRoaXMucHJldikge1xuICAgICAgICAgIHZhciBoYXNDYXRjaCA9IGhhc093bi5jYWxsKGVudHJ5LCBcImNhdGNoTG9jXCIpO1xuICAgICAgICAgIHZhciBoYXNGaW5hbGx5ID0gaGFzT3duLmNhbGwoZW50cnksIFwiZmluYWxseUxvY1wiKTtcblxuICAgICAgICAgIGlmIChoYXNDYXRjaCAmJiBoYXNGaW5hbGx5KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgZW50cnkuY2F0Y2hMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5jYXRjaExvYywgdHJ1ZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5maW5hbGx5TG9jKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0gZWxzZSBpZiAoaGFzQ2F0Y2gpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBlbnRyeS5jYXRjaExvYykge1xuICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlKGVudHJ5LmNhdGNoTG9jLCB0cnVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0gZWxzZSBpZiAoaGFzRmluYWxseSkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5maW5hbGx5TG9jKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ0cnkgc3RhdGVtZW50IHdpdGhvdXQgY2F0Y2ggb3IgZmluYWxseVwiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYWJydXB0OiBmdW5jdGlvbih0eXBlLCBhcmcpIHtcbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICBpZiAoZW50cnkudHJ5TG9jIDw9IHRoaXMucHJldiAmJlxuICAgICAgICAgICAgaGFzT3duLmNhbGwoZW50cnksIFwiZmluYWxseUxvY1wiKSAmJlxuICAgICAgICAgICAgdGhpcy5wcmV2IDwgZW50cnkuZmluYWxseUxvYykge1xuICAgICAgICAgIHZhciBmaW5hbGx5RW50cnkgPSBlbnRyeTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZmluYWxseUVudHJ5ICYmXG4gICAgICAgICAgKHR5cGUgPT09IFwiYnJlYWtcIiB8fFxuICAgICAgICAgICB0eXBlID09PSBcImNvbnRpbnVlXCIpICYmXG4gICAgICAgICAgZmluYWxseUVudHJ5LnRyeUxvYyA8PSBhcmcgJiZcbiAgICAgICAgICBhcmcgPD0gZmluYWxseUVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgLy8gSWdub3JlIHRoZSBmaW5hbGx5IGVudHJ5IGlmIGNvbnRyb2wgaXMgbm90IGp1bXBpbmcgdG8gYVxuICAgICAgICAvLyBsb2NhdGlvbiBvdXRzaWRlIHRoZSB0cnkvY2F0Y2ggYmxvY2suXG4gICAgICAgIGZpbmFsbHlFbnRyeSA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIHZhciByZWNvcmQgPSBmaW5hbGx5RW50cnkgPyBmaW5hbGx5RW50cnkuY29tcGxldGlvbiA6IHt9O1xuICAgICAgcmVjb3JkLnR5cGUgPSB0eXBlO1xuICAgICAgcmVjb3JkLmFyZyA9IGFyZztcblxuICAgICAgaWYgKGZpbmFsbHlFbnRyeSkge1xuICAgICAgICB0aGlzLm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgICB0aGlzLm5leHQgPSBmaW5hbGx5RW50cnkuZmluYWxseUxvYztcbiAgICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLmNvbXBsZXRlKHJlY29yZCk7XG4gICAgfSxcblxuICAgIGNvbXBsZXRlOiBmdW5jdGlvbihyZWNvcmQsIGFmdGVyTG9jKSB7XG4gICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICB0aHJvdyByZWNvcmQuYXJnO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwiYnJlYWtcIiB8fFxuICAgICAgICAgIHJlY29yZC50eXBlID09PSBcImNvbnRpbnVlXCIpIHtcbiAgICAgICAgdGhpcy5uZXh0ID0gcmVjb3JkLmFyZztcbiAgICAgIH0gZWxzZSBpZiAocmVjb3JkLnR5cGUgPT09IFwicmV0dXJuXCIpIHtcbiAgICAgICAgdGhpcy5ydmFsID0gdGhpcy5hcmcgPSByZWNvcmQuYXJnO1xuICAgICAgICB0aGlzLm1ldGhvZCA9IFwicmV0dXJuXCI7XG4gICAgICAgIHRoaXMubmV4dCA9IFwiZW5kXCI7XG4gICAgICB9IGVsc2UgaWYgKHJlY29yZC50eXBlID09PSBcIm5vcm1hbFwiICYmIGFmdGVyTG9jKSB7XG4gICAgICAgIHRoaXMubmV4dCA9IGFmdGVyTG9jO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICB9LFxuXG4gICAgZmluaXNoOiBmdW5jdGlvbihmaW5hbGx5TG9jKSB7XG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcbiAgICAgICAgaWYgKGVudHJ5LmZpbmFsbHlMb2MgPT09IGZpbmFsbHlMb2MpIHtcbiAgICAgICAgICB0aGlzLmNvbXBsZXRlKGVudHJ5LmNvbXBsZXRpb24sIGVudHJ5LmFmdGVyTG9jKTtcbiAgICAgICAgICByZXNldFRyeUVudHJ5KGVudHJ5KTtcbiAgICAgICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBcImNhdGNoXCI6IGZ1bmN0aW9uKHRyeUxvYykge1xuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPT09IHRyeUxvYykge1xuICAgICAgICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uO1xuICAgICAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgICB2YXIgdGhyb3duID0gcmVjb3JkLmFyZztcbiAgICAgICAgICAgIHJlc2V0VHJ5RW50cnkoZW50cnkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdGhyb3duO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFRoZSBjb250ZXh0LmNhdGNoIG1ldGhvZCBtdXN0IG9ubHkgYmUgY2FsbGVkIHdpdGggYSBsb2NhdGlvblxuICAgICAgLy8gYXJndW1lbnQgdGhhdCBjb3JyZXNwb25kcyB0byBhIGtub3duIGNhdGNoIGJsb2NrLlxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaWxsZWdhbCBjYXRjaCBhdHRlbXB0XCIpO1xuICAgIH0sXG5cbiAgICBkZWxlZ2F0ZVlpZWxkOiBmdW5jdGlvbihpdGVyYWJsZSwgcmVzdWx0TmFtZSwgbmV4dExvYykge1xuICAgICAgdGhpcy5kZWxlZ2F0ZSA9IHtcbiAgICAgICAgaXRlcmF0b3I6IHZhbHVlcyhpdGVyYWJsZSksXG4gICAgICAgIHJlc3VsdE5hbWU6IHJlc3VsdE5hbWUsXG4gICAgICAgIG5leHRMb2M6IG5leHRMb2NcbiAgICAgIH07XG5cbiAgICAgIGlmICh0aGlzLm1ldGhvZCA9PT0gXCJuZXh0XCIpIHtcbiAgICAgICAgLy8gRGVsaWJlcmF0ZWx5IGZvcmdldCB0aGUgbGFzdCBzZW50IHZhbHVlIHNvIHRoYXQgd2UgZG9uJ3RcbiAgICAgICAgLy8gYWNjaWRlbnRhbGx5IHBhc3MgaXQgb24gdG8gdGhlIGRlbGVnYXRlLlxuICAgICAgICB0aGlzLmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuICB9O1xufSkoXG4gIC8vIEFtb25nIHRoZSB2YXJpb3VzIHRyaWNrcyBmb3Igb2J0YWluaW5nIGEgcmVmZXJlbmNlIHRvIHRoZSBnbG9iYWxcbiAgLy8gb2JqZWN0LCB0aGlzIHNlZW1zIHRvIGJlIHRoZSBtb3N0IHJlbGlhYmxlIHRlY2huaXF1ZSB0aGF0IGRvZXMgbm90XG4gIC8vIHVzZSBpbmRpcmVjdCBldmFsICh3aGljaCB2aW9sYXRlcyBDb250ZW50IFNlY3VyaXR5IFBvbGljeSkuXG4gIHR5cGVvZiBnbG9iYWwgPT09IFwib2JqZWN0XCIgPyBnbG9iYWwgOlxuICB0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiID8gd2luZG93IDpcbiAgdHlwZW9mIHNlbGYgPT09IFwib2JqZWN0XCIgPyBzZWxmIDogdGhpc1xuKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///329\n')},function(module,exports,__webpack_require__){eval("__webpack_require__(331);\nmodule.exports = __webpack_require__(18).RegExp.escape;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvZm4vcmVnZXhwL2VzY2FwZS5qcz9mZDVhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLG1CQUFPLENBQUMsR0FBa0M7QUFDMUMsaUJBQWlCLG1CQUFPLENBQUMsRUFBcUIiLCJmaWxlIjoiMzMwLmpzIiwic291cmNlc0NvbnRlbnQiOlsicmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9jb3JlLnJlZ2V4cC5lc2NhcGUnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9fY29yZScpLlJlZ0V4cC5lc2NhcGU7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///330\n")},function(module,exports,__webpack_require__){eval("// https://github.com/benjamingr/RexExp.escape\nvar $export = __webpack_require__(0);\nvar $re = __webpack_require__(332)(/[\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n\n$export($export.S, 'RegExp', { escape: function escape(it) { return $re(it); } });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9jb3JlLnJlZ2V4cC5lc2NhcGUuanM/ZDBjYSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLFVBQVUsbUJBQU8sQ0FBQyxHQUFhLG9CQUFvQjs7QUFFbkQsOEJBQThCLDhCQUE4QixnQkFBZ0IsRUFBRSxFQUFFIiwiZmlsZSI6IjMzMS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9iZW5qYW1pbmdyL1JleEV4cC5lc2NhcGVcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHJlID0gcmVxdWlyZSgnLi9fcmVwbGFjZXInKSgvW1xcXFxeJCorPy4oKXxbXFxde31dL2csICdcXFxcJCYnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWdFeHAnLCB7IGVzY2FwZTogZnVuY3Rpb24gZXNjYXBlKGl0KSB7IHJldHVybiAkcmUoaXQpOyB9IH0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///331\n")},function(module,exports){eval("module.exports = function (regExp, replace) {\n var replacer = replace === Object(replace) ? function (part) {\n return replace[part];\n } : replace;\n return function (it) {\n return String(it).replace(regExp, replacer);\n };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcmVwbGFjZXIuanM/YWJkNyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMzMyLmpzIiwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAocmVnRXhwLCByZXBsYWNlKSB7XG4gIHZhciByZXBsYWNlciA9IHJlcGxhY2UgPT09IE9iamVjdChyZXBsYWNlKSA/IGZ1bmN0aW9uIChwYXJ0KSB7XG4gICAgcmV0dXJuIHJlcGxhY2VbcGFydF07XG4gIH0gOiByZXBsYWNlO1xuICByZXR1cm4gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIFN0cmluZyhpdCkucmVwbGFjZShyZWdFeHAsIHJlcGxhY2VyKTtcbiAgfTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///332\n")},function(module,__webpack_exports__,__webpack_require__){"use strict";eval('// ESM COMPAT FLAG\n__webpack_require__.r(__webpack_exports__);\n\n// CONCATENATED MODULE: ./src/core/Deferred.js\nfunction _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }\n\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\n\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."); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction _wrapNativeSuper(Class) { var _cache = typeof Map === "function" ? new Map() : undefined; _wrapNativeSuper = function _wrapNativeSuper(Class) { if (Class === null || !_isNativeFunction(Class)) return Class; if (typeof Class !== "function") { throw new TypeError("Super expression must either be null or a function"); } if (typeof _cache !== "undefined") { if (_cache.has(Class)) return _cache.get(Class); _cache.set(Class, Wrapper); } function Wrapper() { return _construct(Class, arguments, _getPrototypeOf(this).constructor); } Wrapper.prototype = Object.create(Class.prototype, { constructor: { value: Wrapper, enumerable: false, writable: true, configurable: true } }); return _setPrototypeOf(Wrapper, Class); }; return _wrapNativeSuper(Class); }\n\nfunction _construct(Parent, args, Class) { if (_isNativeReflectConstruct()) { _construct = Reflect.construct; } else { _construct = function _construct(Parent, args, Class) { var a = [null]; a.push.apply(a, args); var Constructor = Function.bind.apply(Parent, a); var instance = new Constructor(); if (Class) _setPrototypeOf(instance, Class.prototype); return instance; }; } return _construct.apply(null, arguments); }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _isNativeFunction(fn) { return Function.toString.call(fn).indexOf("[native code]") !== -1; }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/**\r\n * The built-in class for asynchronous Promises.\r\n * @external Promise\r\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise\r\n */\n\n/**\r\n * A Promise object that can be resolved, rejected or canceled at any time by the\r\n * user.\r\n *\r\n * @extends external:Promise\r\n */\nvar Deferred = /*#__PURE__*/function (_Promise) {\n _inherits(Deferred, _Promise);\n\n var _super = _createSuper(Deferred);\n\n /**\r\n * @constructor\r\n *\r\n * @param {Function} [executable=() => {}] - The function to be executed by the\r\n * constructor, during the process of constructing the promise. The signature\r\n * of this is expected to be: executable( resolutionFunc, rejectionFunc, cancellationFunc ).\r\n * @param {Function=} onResolve - Optional function to execute once the promise\r\n * is resolved.\r\n * @param {Function=} onReject - Optional function to execute once the promise\r\n * is rejected.\r\n * @param {Function=} onCancel - Optional function to execute if the user cancels\r\n * the promise. Canceling results in the promise having a status of \'resolved\'.\r\n */\n function Deferred() {\n var _this;\n\n var executable = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : function () {};\n var onResolve = arguments.length > 1 ? arguments[1] : undefined;\n var onReject = arguments.length > 2 ? arguments[2] : undefined;\n var onCancel = arguments.length > 3 ? arguments[3] : undefined;\n\n _classCallCheck(this, Deferred);\n\n if (typeof executable !== \'function\') {\n throw new Error("Cannot create new Deferred. Executable must be a function.");\n }\n\n if (typeof onResolve !== \'undefined\' && typeof onResolve !== \'function\') {\n throw new Error("Cannot create new Deferred. OnResolve must be a function.");\n }\n\n if (typeof onReject !== \'undefined\' && typeof onReject !== \'function\') {\n throw new Error("Cannot create new Deferred. OnReject must be a function.");\n }\n\n if (typeof onCancel !== \'undefined\' && typeof onCancel !== \'function\') {\n throw new Error("Cannot create new Deferred. OnCancel must be a function.");\n }\n\n var res;\n var rej;\n var cancel;\n var status = {\n resolved: false,\n rejected: false,\n canceled: false,\n pending: true\n };\n _this = _super.call(this, function (resolve, reject) {\n // Store the resolver\n res = function res(value) {\n if (status.pending) {\n status.resolved = true;\n status.pending = false;\n\n if (typeof onResolve === \'function\') {\n value = onResolve(value);\n }\n\n return resolve(value);\n }\n }; // Store the rejecter\n\n\n rej = function rej(value) {\n if (status.pending) {\n status.rejected = true;\n status.pending = false;\n\n if (typeof onReject === \'function\') {\n value = onReject(value);\n }\n\n return reject(value);\n }\n }; // Store the canceler\n\n\n cancel = function cancel(value) {\n if (status.pending) {\n status.canceled = true;\n status.pending = false;\n\n if (typeof onCancel === \'function\') {\n value = onCancel(value);\n }\n\n return resolve(value);\n }\n }; // Run the executable with custom resolver and rejecter\n\n\n executable(res, rej, cancel);\n });\n _this._status = status;\n _this._resolve = res;\n _this._reject = rej;\n _this._cancel = cancel;\n _this._executable = executable;\n return _this;\n }\n /**\r\n * Gets the resolved state of the promise.\r\n *\r\n * @readonly\r\n */\n\n\n _createClass(Deferred, [{\n key: "resolved",\n get: function get() {\n return this._status.resolved;\n }\n /**\r\n * Gets the rejected state of the promise.\r\n *\r\n * @readonly\r\n */\n\n }, {\n key: "rejected",\n get: function get() {\n return this._status.rejected;\n }\n /**\r\n * Gets the canceled state of the promise.\r\n *\r\n * @readonly\r\n */\n\n }, {\n key: "canceled",\n get: function get() {\n return this._status.canceled;\n }\n /**\r\n * Gets the pending state of the promise.\r\n *\r\n * @readonly\r\n */\n\n }, {\n key: "pending",\n get: function get() {\n return this._status.pending;\n }\n /**\r\n * Force the promise to resolve.\r\n *\r\n * @param {any=} value - Value to pass to the resolver.\r\n *\r\n * @returns {any} - The return value of the resolver function.\r\n */\n\n }, {\n key: "resolve",\n value: function resolve(value) {\n return this._resolve(value);\n }\n /**\r\n * Force the promise to reject.\r\n *\r\n * @param {any=} value - Value to pass to the rejecter.\r\n *\r\n * @returns {any} - The return value of the rejecter function.\r\n */\n\n }, {\n key: "reject",\n value: function reject(value) {\n return this._reject(value);\n }\n /**\r\n * Force the promise to resolve and set the canceled state to true.\r\n *\r\n * @param {any=} value - Value to pass to the canceller.\r\n *\r\n * @returns {any} - The return value of the canceller function.\r\n */\n\n }, {\n key: "cancel",\n value: function cancel(value) {\n return this._cancel(value);\n }\n /**\r\n * Run the promise function to try to resolve the promise. Promise must be\r\n * pending.\r\n *\r\n * @param {...any} args - Optional arguments to pass after resolve and reject.\r\n */\n\n }, {\n key: "execute",\n value: function execute() {\n if (this.pending) {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n this._executable.apply(this, [this._resolve, this._reject, this._cancel].concat(args));\n }\n }\n /**\r\n * Return a canceled deferred promise.\r\n *\r\n * @param {any=} value - Value to cancel the promise with.\r\n *\r\n * @returns {Deferred}\r\n */\n\n }], [{\n key: "cancel",\n value: function cancel(value) {\n return new Deferred(function (_resolve, _reject, cancel) {\n cancel(value);\n });\n }\n /**\r\n * Return a new Deferred promise that will resolve or reject once all promises\r\n * in the input array have been resolved or one promise is canceled or rejected.\r\n * Promises in the array that are Deferred promises will be manually resolved,\r\n * rejected or canceled when calling resolve, reject or cancel on the return promise.\r\n *\r\n * @param {Array.} iterable - An iterable such as an array.\r\n * @param {Function=} onResolve - Optional function to execute once the promise\r\n * is resolved.\r\n * @param {Function=} onReject - Optional function to execute once the promise\r\n * is rejected.\r\n * @param {Function=} onCancel - Optional function to execute if the user cancels\r\n * the promise. Canceling results in the promise having a status of \'canceled\'.\r\n *\r\n * @returns Deferred\r\n */\n\n }, {\n key: "all",\n value: function all(iterable, onResolve, onReject, onCancel) {\n if (iterable == null || typeof iterable[Symbol.iterator] !== \'function\') {\n var e = "Cannot execute Deferred.all. First argument must be iterable.";\n\n if (typeof onReject === \'function\') {\n e = onReject(e);\n }\n\n return Deferred.reject(e);\n }\n\n var array = _toConsumableArray(iterable);\n\n var deferred = array.filter(function (item) {\n return item instanceof Deferred;\n });\n var result = new Deferred(undefined, function (resolveValue) {\n deferred.forEach(function (item) {\n item.resolve(resolveValue);\n });\n deferred.length = 0;\n\n if (typeof onResolve === \'function\') {\n return onResolve(resolveValue);\n } else {\n return resolveValue;\n }\n }, function (error) {\n deferred.forEach(function (item) {\n item.reject(error);\n });\n deferred.length = 0;\n\n if (typeof onReject === \'function\') {\n return onReject(error);\n } else {\n return error;\n }\n }, function (cancelValue) {\n deferred.forEach(function (item) {\n item.cancel(cancelValue);\n });\n deferred.length = 0;\n\n if (typeof onCancel === \'function\') {\n return onCancel(cancelValue);\n } else {\n return cancelValue;\n }\n });\n var numItems = array.length;\n var itemTracker = {\n failed: false,\n numResolved: 0,\n resolutions: []\n };\n array.forEach(function (item, index) {\n if (itemTracker.failed) {\n return;\n } else if (!(item instanceof Promise)) {\n itemTracker.resolutions[index] = item;\n itemTracker.numResolved += 1;\n\n if (itemTracker.numResolved === numItems) {\n result.resolve(itemTracker.resolutions);\n }\n\n return;\n }\n\n item.then(function (value) {\n if (!itemTracker.failed && !item.canceled) {\n itemTracker.resolutions[index] = value;\n itemTracker.numResolved += 1;\n\n if (itemTracker.numResolved === numItems) {\n result.resolve(itemTracker.resolutions);\n }\n } else if (!itemTracker.failed) {\n itemTracker.failed = true;\n result.cancel(value);\n }\n }, function (error) {\n if (!itemTracker.failed) {\n itemTracker.failed = true;\n result.reject(error);\n }\n });\n });\n return result;\n }\n }]);\n\n return Deferred;\n}( /*#__PURE__*/_wrapNativeSuper(Promise));\n\n/* harmony default export */ var core_Deferred = (Deferred);\n// CONCATENATED MODULE: ./src/core/Utils.js\nfunction Utils_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction Utils_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction Utils_createClass(Constructor, protoProps, staticProps) { if (protoProps) Utils_defineProperties(Constructor.prototype, protoProps); if (staticProps) Utils_defineProperties(Constructor, staticProps); return Constructor; }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/**\r\n * A collection of useful generic functions.\r\n *\r\n * @hideconstructor\r\n */\n\nvar Utils_Utils = /*#__PURE__*/function () {\n function Utils() {\n Utils_classCallCheck(this, Utils);\n }\n\n Utils_createClass(Utils, null, [{\n key: "createId",\n value:\n /**\r\n * @static\r\n *\r\n * Generate a unique id\r\n *\r\n * @returns {String}\r\n */\n function createId() {\n return \'xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx\'.replace(/[xy]/g, function (c) {\n var randomNumber = Math.floor((Date.now() + Math.random() * 16) % 16);\n\n if (c === \'x\') {\n return randomNumber.toString(16);\n } // Set bit 6 and 7 to 0 and 1\n\n\n return (randomNumber & 0x3 | 0x8).toString(16);\n });\n }\n /**\r\n * @static\r\n *\r\n * Check a name string against an array of strings to determine if it is unique.\r\n * If it isn\'t, append incremented trailing integers to the end of the name\r\n * until it is unique.\r\n *\r\n * @param {string} name - String name to make unique.\r\n * @param {Array.=} nameArray - Array of string names to check agains.\r\n *\r\n * @returns {string}\r\n */\n\n }, {\n key: "getUniqueName",\n value: function getUniqueName(name) {\n var nameArray = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n\n // If the name isn\'t in the array return it right away\n if (!nameArray.includes(name)) {\n return name;\n }\n\n var nameSet = new Set(nameArray); // Separate the name into string and trailing numbers\n\n var matchGroup = name.match(/\\d*$/);\n var index = matchGroup.index;\n var baseName = name.slice(0, index);\n var increment = Number(matchGroup[0]); // Find the highest trailing number value for the base of the name\n\n nameSet.forEach(function (setName) {\n var setMatchGroup = setName.match(/\\d*$/);\n\n if (setName.slice(0, setMatchGroup.index) === baseName) {\n var setIncrement = Number(setMatchGroup[0]);\n\n if (setIncrement > increment) {\n increment = setIncrement;\n }\n }\n }); // Increment the highest trailing number and append to the name\n\n return "".concat(baseName).concat(increment + 1);\n }\n /**\r\n * Return a deferred promise that will wait a given number of seconds before\r\n * resolving. Pass delta time in milliseconds to the deferred promise\'s execute\r\n * method in an update loop to progress time.\r\n *\r\n * @param {number} [seconds=0] - Number of seconds to wait before resolving.\r\n * @param {Object=} options - Optional options object\r\n * @param {Function} [options.onFinish] - Callback to execute once the wait time\r\n * is met.\r\n * @param {Function=} options.onProgress - Callback to execute each time the wait\r\n * time progresses towards the target number of seconds. The amount of progress\r\n * as a 0-1 percentage is passed as an argument.\r\n * @param {Function=} options.onCancel - Callback to execute if the user cancels\r\n * the wait before completion.\r\n * @param {Function=} options.onError - Callback to execute if the wait stops\r\n * because an error is encountered. The error message is passed as a parameter.\r\n *\r\n * @returns {Deferred}\r\n */\n\n }, {\n key: "wait",\n value: function wait() {\n var seconds = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n\n var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n onFinish = _ref.onFinish,\n onProgress = _ref.onProgress,\n onCancel = _ref.onCancel,\n onError = _ref.onError;\n\n // Make sure seconds is numeric\n if (typeof seconds !== \'number\') {\n console.warn("Invalid seconds value ".concat(seconds, " for wait. Defaulting to 0."));\n seconds = 0;\n } // Resolve immediately if the wait time is not greater than 0\n\n\n if (seconds <= 0) {\n if (typeof onFinish === \'function\') {\n onFinish();\n }\n\n return core_Deferred.resolve();\n }\n\n var currentTime = 0;\n var totalTime = seconds * 1000; // convert to milliseconds\n // Executable to pass to Deferred, meant to be run in an update loop\n\n var onUpdate = function onUpdate(resolve, reject, _cancel) {\n var deltaTime = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;\n\n if (typeof deltaTime !== \'number\') {\n var e = new Error("Invalid property wait deltaTime. DeltaTime must be a number.");\n reject(e);\n return;\n } // Make sure time has passed\n\n\n if (deltaTime === 0) {\n return;\n } // Signal progress\n\n\n currentTime += deltaTime;\n\n if (currentTime < 0) {\n currentTime = 0;\n }\n\n if (typeof onProgress === \'function\') {\n onProgress(Math.min(currentTime / totalTime, 1));\n } // Signal completion once time is up\n\n\n if (currentTime >= totalTime) {\n resolve();\n }\n };\n\n return new core_Deferred(onUpdate, onFinish, onError, onCancel);\n }\n /**\r\n * Get a random float number between a min (inclusive) and max (exclusive) value\r\n * @param {number} min minimum value\r\n * @param {number} max maximum value\r\n * @returns {float}\r\n */\n\n }, {\n key: "getRandomFloat",\n value: function getRandomFloat(min, max) {\n return Math.random() * (max - min) + min;\n }\n /**\r\n * Get a random integer number between a min (inclusive) and max (exclusive) value\r\n * @param {number} min minimum value\r\n * @param {number} max maximum value\r\n * @returns {integer}\r\n */\n\n }, {\n key: "getRandomInt",\n value: function getRandomInt(min, max) {\n min = Math.ceil(min);\n max = Math.floor(max);\n return Math.floor(Math.random() * (max - min)) + min;\n }\n }]);\n\n return Utils;\n}();\n\n/* harmony default export */ var core_Utils = (Utils_Utils);\n// CONCATENATED MODULE: ./src/core/MathUtils.js\nfunction MathUtils_toConsumableArray(arr) { return MathUtils_arrayWithoutHoles(arr) || MathUtils_iterableToArray(arr) || MathUtils_unsupportedIterableToArray(arr) || MathUtils_nonIterableSpread(); }\n\nfunction MathUtils_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."); }\n\nfunction MathUtils_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return MathUtils_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return MathUtils_arrayLikeToArray(o, minLen); }\n\nfunction MathUtils_iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction MathUtils_arrayWithoutHoles(arr) { if (Array.isArray(arr)) return MathUtils_arrayLikeToArray(arr); }\n\nfunction MathUtils_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction MathUtils_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction MathUtils_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction MathUtils_createClass(Constructor, protoProps, staticProps) { if (protoProps) MathUtils_defineProperties(Constructor.prototype, protoProps); if (staticProps) MathUtils_defineProperties(Constructor, staticProps); return Constructor; }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\nvar RadianToDegree = 180 / Math.PI;\nvar DegreeToRadian = Math.PI / 180;\n/**\n * A collection of useful math functions.\n *\n * @hideconstructor\n */\n\nvar MathUtils = /*#__PURE__*/function () {\n function MathUtils() {\n MathUtils_classCallCheck(this, MathUtils);\n }\n\n MathUtils_createClass(MathUtils, null, [{\n key: "toDegrees",\n value:\n /**\n * Convert the given angle from radians to degrees.\n *\n * @param {number} radians - Angle in radians.\n *\n * @returns {number} - Angle in degrees.\n */\n function toDegrees(radians) {\n return radians * RadianToDegree;\n }\n /**\n * Convert the given angle from degrees to radians.\n *\n * @param {number} degrees - Angle in degrees.\n *\n * @returns {number} - Angle in radians.\n */\n\n }, {\n key: "toRadians",\n value: function toRadians(degrees) {\n return degrees * DegreeToRadian;\n }\n /**\n * Linearly interpolate between two values.\n *\n * @param {number} from - Start value.\n * @param {number} to - Target value.\n * @param {number} factor - 0-1 amount to interpolate between from and to.\n *\n * @returns {number}\n */\n\n }, {\n key: "lerp",\n value: function lerp(from, to, factor) {\n return from + (to - from) * factor;\n }\n /**\n * Clamp a number between 2 values.\n *\n * @param {number} value - Value to clamp.\n * @param {number} [min=0] - Minumum value.\n * @param {number} [max=1] - Maximum value.\n *\n * @returns {number}\n */\n\n }, {\n key: "clamp",\n value: function clamp(value) {\n var min = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var max = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;\n return Math.max(min, Math.min(value, max));\n }\n /**\n * Calculates the closest point on a given 2D line segement\n * from a given 2D point.\n *\n * @param {Array.} a - First point on line segment.\n * @param {Array.} b - Second point on line segment.\n * @param {Array.} p - 2D point.\n *\n * @returns {Array.}\n */\n\n }, {\n key: "closestPointOnLine",\n value: function closestPointOnLine(a, b, p) {\n var distSqr = MathUtils.distanceSquared(a, b); // Line segment is a single point\n\n if (distSqr === 0) {\n return a;\n }\n\n var t = ((p[0] - a[0]) * (b[0] - a[0]) + (p[1] - a[1]) * (b[1] - a[1])) / distSqr;\n\n var point = MathUtils_toConsumableArray(a);\n\n if (t > 1) {\n point = MathUtils_toConsumableArray(b);\n } else if (t > 0) {\n point = [a[0] + t * (b[0] - a[0]), a[1] + t * (b[1] - a[1])];\n }\n\n return point;\n }\n /**\n * Gets the distance squared for two 2D points.\n * @param {Array.} a - 2D point.\n * @param {Array.} b - 2D point.\n *\n * @returns {number}\n */\n\n }, {\n key: "distanceSquared",\n value: function distanceSquared(a, b) {\n return (a[0] - b[0]) * (a[0] - b[0]) + (a[1] - b[1]) * (a[1] - b[1]);\n }\n /**\n * Triangulates a set of 2D points using an implementation\n * of the Bowyer-Watson incremental Delaunay triangulation.\n *\n * @param {Array.>} vertices - Array of 2D points.\n *\n * @returns {Array.>} - Array of triangle indices.\n */\n\n }, {\n key: "getDelaunayTriangulation",\n value: function getDelaunayTriangulation(vertices) {\n if (!vertices || vertices.length < 3) {\n throw new Error("Cannot get delaunay triangulation for points ".concat(vertices, ". Input must contain at least three points."));\n }\n\n var minX = Number.POSITIVE_INFINITY;\n var minY = Number.POSITIVE_INFINITY;\n var maxX = Number.NEGATIVE_INFINITY;\n var maxY = Number.NEGATIVE_INFINITY;\n vertices.forEach(function (v) {\n minX = v[0] < minX ? v[0] : minX;\n minY = v[1] < minY ? v[1] : minY;\n maxX = v[0] > maxX ? v[0] : maxX;\n maxY = v[1] > maxY ? v[1] : maxY;\n });\n var dX = maxX - minX;\n var dY = maxY - minY;\n var midX = (minX + maxX) / 2;\n var midY = (minY + maxY) / 2;\n var dMax = dX > dY ? dX : dY;\n var superIndices = [vertices.length, vertices.length + 1, vertices.length + 2];\n var vertsWithSuper = [].concat(MathUtils_toConsumableArray(vertices), [[midX - 20 * dMax, midY - dMax], [midX, midY + 20 * dMax], [midX + 20 * dMax, midY - dMax]]);\n var superSortedIndices = MathUtils.sortPointsCCW(superIndices, vertsWithSuper);\n var superTriangle = {\n indices: superSortedIndices,\n edges: [[superSortedIndices[0], superSortedIndices[1]], [superSortedIndices[1], superSortedIndices[2]], [superSortedIndices[2], superSortedIndices[0]]]\n };\n var triangles = [superTriangle];\n vertsWithSuper.forEach(function (newVert, newIndex) {\n var invalidTriangles = [];\n triangles.forEach(function (triangle) {\n if (MathUtils.isPointInCircumCircle(vertsWithSuper[triangle.indices[0]], vertsWithSuper[triangle.indices[1]], vertsWithSuper[triangle.indices[2]], newVert)) {\n invalidTriangles.push(triangle);\n }\n });\n var boundingPoly = [];\n invalidTriangles.forEach(function (triangle) {\n triangle.edges.forEach(function (edge) {\n var count = 0;\n invalidTriangles.forEach(function (otherTriangle) {\n if (triangle !== otherTriangle) {\n otherTriangle.edges.forEach(function (otherEdge) {\n if (edge[0] === otherEdge[0] && edge[1] === otherEdge[1] || edge[1] === otherEdge[0] && edge[0] === otherEdge[1]) {\n count += 1;\n }\n });\n }\n });\n if (count === 0) boundingPoly.push(edge);\n });\n });\n invalidTriangles.forEach(function (triangle) {\n triangles.splice(triangles.indexOf(triangle), 1);\n });\n boundingPoly.forEach(function (edge) {\n var sortedIndices = MathUtils.sortPointsCCW([edge[0], edge[1], newIndex], vertsWithSuper);\n triangles.push({\n indices: sortedIndices,\n edges: [[sortedIndices[0], sortedIndices[1]], [sortedIndices[1], sortedIndices[2]], [sortedIndices[2], sortedIndices[0]]]\n });\n });\n });\n var trianglesToRemove = [];\n triangles.forEach(function (triangle) {\n triangle.indices.forEach(function (index) {\n if (superIndices.includes(index)) {\n trianglesToRemove.push(triangle);\n }\n });\n });\n trianglesToRemove.forEach(function (triangle) {\n var index = triangles.indexOf(triangle);\n\n if (index !== -1) {\n triangles.splice(index, 1);\n }\n });\n return triangles.map(function (triangle) {\n return triangle.indices;\n });\n }\n /**\n * Determines if a given 2D point is within the cicrumcircle\n * defined by three 2D points. The triangle points must be in\n * counter-clockwise order a -> b -> c.\n *\n * @param {Array.} a - First triangle point.\n * @param {Array.} b - Second triangle point.\n * @param {Array.} c - Third triangle point.\n * @param {Array.} p - 2D point.\n *\n * @returns {boolean}\n */\n\n }, {\n key: "isPointInCircumCircle",\n value: function isPointInCircumCircle(a, b, c, p) {\n var ax = a[0] - p[0];\n var ay = a[1] - p[1];\n var bx = b[0] - p[0];\n var by = b[1] - p[1];\n var cx = c[0] - p[0];\n var cy = c[1] - p[1];\n return (ax * ax + ay * ay) * (bx * cy - cx * by) - (bx * bx + by * by) * (ax * cy - cx * ay) + (cx * cx + cy * cy) * (ax * by - bx * ay) > 0;\n }\n /**\n * Determines if a given 2D point is within a given triangle.\n *\n * @param {Array.} a - First triangle point.\n * @param {Array.} b - Second triangle point.\n * @param {Array.} c - Third triangle point.\n * @param {Array.} p - 2D point.\n *\n * @returns {boolean}\n */\n\n }, {\n key: "isPointInTriangle",\n value: function isPointInTriangle(a, b, c, p) {\n var denom = (b[1] - c[1]) * (a[0] - c[0]) + (c[0] - b[0]) * (a[1] - c[1]);\n var aVal = ((b[1] - c[1]) * (p[0] - c[0]) + (c[0] - b[0]) * (p[1] - c[1])) / denom;\n var bVal = ((c[1] - a[1]) * (p[0] - c[0]) + (a[0] - c[0]) * (p[1] - c[1])) / denom;\n var cVal = 1 - aVal - bVal;\n return aVal >= 0 && aVal <= 1 && bVal >= 0 && bVal <= 1 && cVal >= 0 && cVal <= 1;\n }\n /**\n * Gets the sorted indices of a given set of 2D points in\n * counter-clockwise order.\n *\n * @param {Array.} indices - List of indices.\n * @param {Array.>} vertices - List of 2D points.\n *\n * @returns {Array.>} - List of sorted indices.\n */\n\n }, {\n key: "sortPointsCCW",\n value: function sortPointsCCW(indices, vertices) {\n var centroid = [0, 0];\n indices.forEach(function (index) {\n centroid[0] += vertices[index][0];\n centroid[1] += vertices[index][1];\n });\n centroid[0] /= indices.length;\n centroid[1] /= indices.length;\n indices.sort(function (a, b) {\n var bVal = Math.atan2(vertices[b][1] - centroid[1], vertices[b][0] - centroid[0]);\n var aVal = Math.atan2(vertices[a][1] - centroid[1], vertices[a][0] - centroid[0]);\n return aVal - bVal;\n });\n return indices;\n }\n /**\n * Cacluates the area of a triangle\n * @param {Array.} a - First triangle point.\n * @param {Array.} b - Second triangle point.\n * @param {Array.} c - Third triangle point.\n *\n * @returns {number}\n */\n\n }, {\n key: "triangleArea",\n value: function triangleArea(a, b, c) {\n return Math.abs((a[0] * (b[1] - c[1]) + b[0] * (c[1] - a[1]) + c[0] * (a[1] - b[1])) * 0.5);\n }\n /**\n * Return the magnitude of a given vector array.\n *\n * @param {Array.} vector - Array consisting of numbers.\n *\n * @returns {number}\n */\n\n }, {\n key: "getVectorMagnitude",\n value: function getVectorMagnitude(vector) {\n if (!(vector instanceof Array)) {\n throw new Error("Cannot get magnitude for vector ".concat(vector, ". Input must be an Array numbers."));\n }\n\n var reducer = function reducer(accumulator, currentValue) {\n if (typeof currentValue !== \'number\') {\n throw new Error("Cannot get magnitude for vector ".concat(vector, ". All items in the input Array must be numbers."));\n }\n\n return accumulator + Math.pow(currentValue, 2);\n };\n\n return Math.sqrt(vector.reduce(reducer, 0));\n }\n /**\n * Return the dot product between two vectors.\n *\n * @param {Array.} vectorA - Array consisting of numbers.\n * @param {Array.} vectorB - Array consisting of numbers.\n *\n * @returns {number}\n */\n\n }, {\n key: "getDotProduct",\n value: function getDotProduct(vectorA, vectorB) {\n if (!(vectorA instanceof Array) || !(vectorB instanceof Array) || vectorA.length !== vectorB.length) {\n throw new Error("Cannot get dot product between ".concat(vectorA, " and ").concat(vectorB, ". Inputs must be vectors of the same length."));\n }\n\n var result = 0;\n vectorA.forEach(function (valueA, index) {\n var valueB = vectorB[index];\n\n if (typeof valueA !== \'number\' || typeof valueB !== \'number\') {\n throw new Error("Cannot get dot product between ".concat(vectorA, " and ").concat(vectorB, ". Vectors must only consist of numeric values."));\n }\n\n result += valueA * valueB;\n });\n return result;\n }\n /**\n * Return the angle in radians between vectorA and vectorB.\n *\n * @param {Array.} vectorA - Array consisting of numbers.\n * @param {Array.} vectorB - Array consisting of numbers.\n *\n * @returns {number}\n */\n\n }, {\n key: "getAngleBetween",\n value: function getAngleBetween(vectorA, vectorB) {\n var normalA = this.normalizeVector(MathUtils_toConsumableArray(vectorA));\n var normalB = this.normalizeVector(MathUtils_toConsumableArray(vectorB));\n var dot = this.getDotProduct(normalA, normalB);\n return Math.acos(this.clamp(dot, -1, 1));\n }\n /**\n * Multiply a 3x3 rotation matrix with a vector3.\n *\n * @param {Array.} vector3 - Array consisting of 3 numbers representing\n * a direction vector.\n * @param {Array.} matrix3 - An array of 9 numbers representing a row\n * major rotation matrix.\n *\n * @returns {Array.} - An array of 3 numbers representing the new direction\n * of the vector.\n */\n\n }, {\n key: "rotateVector",\n value: function rotateVector(vector3, matrix3) {\n if (!(vector3 instanceof Array) || vector3.length !== 3 || !vector3.every(function (v) {\n return typeof v === \'number\';\n })) {\n throw new Error("Cannot rotate vector ".concat(vector3, " by rotation matrix ").concat(matrix3, ". Input vector must be an array of 3 numbers."));\n }\n\n if (!(matrix3 instanceof Array) || matrix3.length !== 9 || !matrix3.every(function (v) {\n return typeof v === \'number\';\n })) {\n throw new Error("Cannot rotate vector ".concat(vector3, " by rotation matrix ").concat(matrix3, ". Input matrix3 must be an array of 9 numbers."));\n }\n\n var x = matrix3[0] * vector3[0] + matrix3[3] * vector3[1] + matrix3[6] * vector3[2];\n var y = matrix3[1] * vector3[0] + matrix3[4] * vector3[1] + matrix3[7] * vector3[2];\n var z = matrix3[2] * vector3[0] + matrix3[5] * vector3[1] + matrix3[8] * vector3[2];\n return [x, y, z];\n }\n /**\n * Normalize a given vector array.\n *\n * @param {Array.} vector - Array consisting of numbers.\n *\n * @returns {Array.} The original vector with normalized values, for chaining.\n */\n\n }, {\n key: "normalizeVector",\n value: function normalizeVector(vector) {\n var magnitude = this.getVectorMagnitude(vector);\n\n if (magnitude === 0) {\n vector.fill(0);\n } else {\n vector.forEach(function (value, index) {\n vector[index] = value / magnitude;\n });\n }\n\n return vector;\n }\n /**\n * Extract the 3x3 rotation matrix from a given 4x4 transformation matrix.\n *\n * @param {Array.} matrix4 - An array of 16 numbers representing a row\n * major transformation matrix.\n *\n * @returns {Array.} - An array of 9 numbers representing a row major\n * rotation matrix.\n */\n\n }, {\n key: "getRotationMatrix",\n value: function getRotationMatrix(matrix4) {\n if (!(matrix4 instanceof Array) || matrix4.length !== 16 || !matrix4.every(function (v) {\n return typeof v === \'number\';\n })) {\n throw new Error("Cannot convert matrix ".concat(matrix4, " to a rotation matrix. Input matrix must be an array of 16 numbers."));\n } // Extract scale\n\n\n var scaleX = 1 / (this.getVectorMagnitude(matrix4.slice(0, 4)) || 1);\n var scaleY = 1 / (this.getVectorMagnitude(matrix4.slice(4, 8)) || 1);\n var scaleZ = 1 / (this.getVectorMagnitude(matrix4.slice(8, 12)) || 1);\n return [matrix4[0] * scaleX, matrix4[1] * scaleX, matrix4[2] * scaleX, matrix4[4] * scaleY, matrix4[5] * scaleY, matrix4[6] * scaleY, matrix4[8] * scaleZ, matrix4[9] * scaleZ, matrix4[10] * scaleZ];\n }\n /**\n * Return an array containing the spherical coordinates of the given cartesian\n * xyz coordinates.\n *\n * @private\n *\n * @param {number} x - Position along the x axis.\n * @param {number} y - Position along the y axis.\n * @param {number} z - Position along the z axis.\n *\n * @returns {Array.} - An array consisting of three numberes where index\n * 0 represents the radius, index 1 represents the vertical/polar angle in radians\n * and index 2 represents the horizontal/azimuthal angle in radians.\n */\n\n }, {\n key: "cartesianToSpherical",\n value: function cartesianToSpherical(x, y, z) {\n var r = this.getVectorMagnitude([x, y, z]); // Return identity if the vector has no length\n\n if (r === 0) {\n return [0, 0, 0];\n }\n\n return [r, Math.acos(this.clamp(y / r, -1, 1)), Math.atan2(x, z)];\n }\n /**\n * Gradually change a value of a numeric property towards a goal over time using\n * a critically damped spring function.\n *\n * @param {number} currentValue - The starting value.\n * @param {number} targetValue- The goal value.\n * @param {Array.} [valueStore = [0, 0]] - An Array consisting of two\n * numbers where the first number holds the result value and the second holds\n * the velocity that resulted in that value. The same array should be provided\n * with each call to this function.\n * @param {number} [deltaTime = 1e-7] - The time since the last call to this function\n * in seconds.\n * @param {number} [smoothTime = 0.3] - The approximate amount of time in seconds\n * it should take to reach the target value.\n * @param {number} [maxSpeed = 1e7] - A clamping value for the maximum speed the\n * value can change.\n *\n * @returns {Array.} - The valueStore array.\n */\n\n }, {\n key: "dampValue",\n value: function dampValue(currentValue, targetValue) {\n var valueStore = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [0, 0];\n var deltaTime = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 1e-7;\n var smoothTime = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0.3;\n var maxSpeed = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 1e7;\n smoothTime = Math.max(0.0001, smoothTime);\n deltaTime = Math.max(1e-7, deltaTime); // Find the delta between values and use it to estimate the previous value\n\n var clampTime = maxSpeed * smoothTime;\n var deltaValue = currentValue - targetValue;\n var clampDeltaValue = this.clamp(deltaValue, -clampTime, clampTime);\n var lastValue = currentValue - clampDeltaValue; // Calculate damping factors\n\n var d1 = 2 / smoothTime;\n var d2 = d1 * deltaTime;\n var d3 = 1 / (1 + d2 + 0.5 * Math.pow(d2, 2) + 0.25 * Math.pow(d2, 3));\n var d4 = (valueStore[1] + d1 * clampDeltaValue) * deltaTime; // Damp the target value and update the velocity\n\n valueStore[0] = lastValue + (clampDeltaValue + d4) * d3;\n valueStore[1] = (valueStore[1] - d1 * d4) * d3; // Prevent overshooting\n\n if (targetValue - currentValue > 0 === valueStore[0] > targetValue) {\n valueStore[0] = targetValue;\n valueStore[1] = (valueStore[0] - targetValue) / deltaTime;\n }\n\n return valueStore;\n }\n }]);\n\n return MathUtils;\n}();\n\n/* harmony default export */ var core_MathUtils = (MathUtils);\n// CONCATENATED MODULE: ./src/core/animpack/Easing.js\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/**\n * @typedef {Object} EasingObject Object containing easing functions\n * @property {Function} In - Easing \'In\' function. Should use the signature (k:number):number.\n * @property {Function} Out - Easing \'Out\' function. Should use the signature (k:number):number.\n * @property {Function} InOut - Easing \'InOut\' function. Should use the signature (k:number):number.\n */\n\n/**\n * Linear Easing\n * @type {EasingObject}\n */\nvar Linear = {\n None: function None(k) {\n return k;\n },\n In: function In(k) {\n return k;\n },\n Out: function Out(k) {\n return k;\n },\n InOut: function InOut(k) {\n return k;\n }\n};\n/**\n * Quadratic Easing\n * @type {EasingObject}\n */\n\nvar Quadratic = {\n In: function In(k) {\n return k * k;\n },\n Out: function Out(k) {\n return k * (2 - k);\n },\n InOut: function InOut(k) {\n k *= 2;\n\n if (k < 1) {\n return 0.5 * k * k;\n }\n\n return -0.5 * (--k * (k - 2) - 1);\n }\n};\n/**\n * Cubic Easing\n * @type {EasingObject}\n */\n\nvar Cubic = {\n In: function In(k) {\n return k * k * k;\n },\n Out: function Out(k) {\n return --k * k * k + 1;\n },\n InOut: function InOut(k) {\n k *= 2;\n\n if (k < 1) {\n return 0.5 * k * k * k;\n }\n\n k -= 2;\n return 0.5 * (k * k * k + 2);\n }\n};\n/**\n * Quartic Easing\n * @type {EasingObject}\n */\n\nvar Quartic = {\n In: function In(k) {\n return k * k * k * k;\n },\n Out: function Out(k) {\n return 1 - --k * k * k * k;\n },\n InOut: function InOut(k) {\n k *= 2;\n\n if (k < 1) {\n return 0.5 * k * k * k * k;\n }\n\n k -= 2;\n return -0.5 * (k * k * k * k - 2);\n }\n};\n/**\n * Quintic Easing\n * @type {EasingObject}\n */\n\nvar Quintic = {\n In: function In(k) {\n return k * k * k * k * k;\n },\n Out: function Out(k) {\n return --k * k * k * k * k + 1;\n },\n InOut: function InOut(k) {\n k *= 2;\n\n if (k < 1) {\n return 0.5 * k * k * k * k * k;\n }\n\n k -= 2;\n return 0.5 * (k * k * k * k * k + 2);\n }\n};\n/**\n * Sinusoidal Easing\n * @type {EasingObject}\n */\n\nvar Sinusoidal = {\n In: function In(k) {\n return 1 - Math.cos(k * Math.PI / 2);\n },\n Out: function Out(k) {\n return Math.sin(k * Math.PI / 2);\n },\n InOut: function InOut(k) {\n return 0.5 * (1 - Math.cos(Math.PI * k));\n }\n};\n/**\n * Exponential Easing\n * @type {EasingObject}\n */\n\nvar Exponential = {\n In: function In(k) {\n return k === 0 ? 0 : Math.pow(1024, k - 1);\n },\n Out: function Out(k) {\n return k === 1 ? 1 : 1 - Math.pow(2, -10 * k);\n },\n InOut: function InOut(k) {\n if (k === 0) {\n return 0;\n }\n\n if (k === 1) {\n return 1;\n }\n\n k *= 2;\n\n if (k < 1) {\n return 0.5 * Math.pow(1024, k - 1);\n }\n\n return 0.5 * (-Math.pow(2, -10 * (k - 1)) + 2);\n }\n};\n/**\n * Circular Easing\n * @type {EasingObject}\n */\n\nvar Circular = {\n In: function In(k) {\n return 1 - Math.sqrt(1 - k * k);\n },\n Out: function Out(k) {\n return Math.sqrt(1 - --k * k);\n },\n InOut: function InOut(k) {\n k *= 2;\n\n if (k < 1) {\n return -0.5 * (Math.sqrt(1 - k * k) - 1);\n }\n\n k -= 2;\n return 0.5 * (Math.sqrt(1 - k * k) + 1);\n }\n};\n/**\n * Elastic Easing\n * @type {EasingObject}\n */\n\nvar Elastic = {\n In: function In(k) {\n var s;\n var a = 0.1;\n var p = 0.4;\n\n if (k === 0) {\n return 0;\n }\n\n if (k === 1) {\n return 1;\n }\n\n if (!a || a < 1) {\n a = 1;\n s = p / 4;\n } else {\n s = p * Math.asin(1 / a) / (2 * Math.PI);\n }\n\n k -= 1;\n return -(a * Math.pow(2, 10 * k) * Math.sin((k - s) * (2 * Math.PI) / p));\n },\n Out: function Out(k) {\n var s;\n var a = 0.1;\n var p = 0.4;\n\n if (k === 0) {\n return 0;\n }\n\n if (k === 1) {\n return 1;\n }\n\n if (!a || a < 1) {\n a = 1;\n s = p / 4;\n } else {\n s = p * Math.asin(1 / a) / (2 * Math.PI);\n }\n\n return a * Math.pow(2, -10 * k) * Math.sin((k - s) * (2 * Math.PI) / p) + 1;\n },\n InOut: function InOut(k) {\n var s;\n var a = 0.1;\n var p = 0.4;\n\n if (k === 0) {\n return 0;\n }\n\n if (k === 1) {\n return 1;\n }\n\n if (!a || a < 1) {\n a = 1;\n s = p / 4;\n } else {\n s = p * Math.asin(1 / a) / (2 * Math.PI);\n }\n\n k *= 2;\n\n if (k < 1) {\n k -= 1;\n return -0.5 * (a * Math.pow(2, 10 * k) * Math.sin((k - s) * (2 * Math.PI) / p));\n }\n\n k -= 1;\n return a * Math.pow(2, -10 * k) * Math.sin((k - s) * (2 * Math.PI) / p) * 0.5 + 1;\n }\n};\n/**\n * Back Easing\n * @type {EasingObject}\n */\n\nvar Back = {\n In: function In(k) {\n var s = 1.70158;\n return k * k * ((s + 1) * k - s);\n },\n Out: function Out(k) {\n var s = 1.70158;\n return --k * k * ((s + 1) * k + s) + 1;\n },\n InOut: function InOut(k) {\n var s = 1.70158 * 1.525;\n k *= 2;\n\n if (k < 1) {\n return 0.5 * (k * k * ((s + 1) * k - s));\n }\n\n k -= 2;\n return 0.5 * (k * k * ((s + 1) * k + s) + 2);\n }\n};\n/**\n * Bounce Easing\n * @type {EasingObject}\n */\n\nvar Bounce = {\n In: function In(k) {\n return 1 - Bounce.Out(1 - k);\n },\n Out: function Out(k) {\n if (k < 1 / 2.75) {\n return 7.5625 * k * k;\n } else if (k < 2 / 2.75) {\n k -= 1.5;\n return 7.5625 * (k / 2.75) * k + 0.75;\n } else if (k < 2.5 / 2.75) {\n k -= 2.25;\n return 7.5625 * (k / 2.75) * k + 0.9375;\n }\n\n k -= 2.625;\n return 7.5625 * (k / 2.75) * k + 0.984375;\n },\n InOut: function InOut(k) {\n if (k < 0.5) {\n return Bounce.In(k * 2) * 0.5;\n }\n\n return Bounce.Out(k * 2 - 1) * 0.5 + 0.5;\n }\n};\n// CONCATENATED MODULE: ./src/core/Messenger.js\nfunction Messenger_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction Messenger_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction Messenger_createClass(Constructor, protoProps, staticProps) { if (protoProps) Messenger_defineProperties(Constructor.prototype, protoProps); if (staticProps) Messenger_defineProperties(Constructor, staticProps); return Constructor; }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/* eslint-disable no-underscore-dangle */\n\n/**\n * Class that can execute functions when local messages are received. Local messages\n * are prefixed with the instance\'s id.\n *\n * @alias core/Messenger\n *\n * @property {core/Messenger} GlobalMessenger - A messenger that can be used for\n * global messaging. When using static listen and emit methods they are executed\n * on this messenger.\n * @property {Object} EVENTS - Built-in events that the Messenger emits.\n */\n\nvar Messenger_Messenger = /*#__PURE__*/function () {\n /**\n * @constructor\n *\n * @param {any=} id - Id for the object. If none is provided a new id will\n * be created. Id should be able to be represented as a string.\n */\n function Messenger(id) {\n Messenger_classCallCheck(this, Messenger);\n\n this._id = id !== undefined ? id : core_Utils.createId();\n this._dispatcher = window;\n this._callbacks = {};\n this._eventListeners = {};\n }\n /**\n * Gets the string id of the object.\n *\n * @readonly\n * @type {string}\n */\n\n\n Messenger_createClass(Messenger, [{\n key: "id",\n get: function get() {\n return this._id;\n }\n /**\n * Prefix a message with the instance id.\n *\n * @private\n *\n * @param {string} message\n *\n * @returns {string}\n */\n\n }, {\n key: "_createLocalMessage",\n value: function _createLocalMessage(message) {\n return "".concat(this.id, ".").concat(message);\n }\n /**\n * Return a function that will call a callback function and supply the event\'s\n * detail property as an argument.\n *\n * @private\n *\n * @param {Function} callback\n *\n * @returns {Function}\n */\n\n }, {\n key: "_createListener",\n value: function _createListener(callback) {\n return function (e) {\n var value;\n\n if (e.detail !== null) {\n value = e.detail;\n }\n\n callback(value);\n };\n }\n /**\n * Create an event object and send it to listeners.\n *\n * @private\n *\n * @param {string} message - Event type name.\n * @param {any=} value - Value to send to listeners.\n *\n * @returns {CustomEvent}\n */\n\n }, {\n key: "_createEvent",\n value: function _createEvent(message, value) {\n return new CustomEvent(message, {\n detail: value\n });\n }\n /**\n * Register an event.\n *\n * @private\n *\n * @param {string} message - Event type name.\n * @param {Function} listener - A listener function generated using _createListener.\n */\n\n }, {\n key: "_addListener",\n value: function _addListener(message, listener) {\n this._dispatcher.addEventListener(this._createLocalMessage(message), listener);\n }\n /**\n * Unregister an event.\n *\n * @private\n *\n * @param {string} message - Event type name.\n * @param {Function} listener - A listener function generated using _createListener.\n */\n\n }, {\n key: "_removeListener",\n value: function _removeListener(message, listener) {\n this._dispatcher.removeEventListener(this._createLocalMessage(message), listener);\n }\n /**\n * Execute a function when a message is received for this object.\n *\n * @param {string} message - The message to listen for.\n * @param {Function} callback - Function to execute once the message is received.\n */\n\n }, {\n key: "listenTo",\n value: function listenTo(message, callback) {\n if (typeof callback !== \'function\') {\n throw new Error("Cannot add listener for ".concat(message, " on ").concat(this.id, ". Callback must be a function."));\n }\n\n if (this._callbacks[message] === undefined) {\n this._callbacks[message] = [];\n this._eventListeners[message] = [];\n }\n\n var listener = this._createListener(callback);\n\n this._callbacks[message].push(callback);\n\n this._eventListeners[message].push(listener);\n\n this._addListener(message, listener);\n }\n /**\n * Prevent a function from being executed when a message is received for this\n * object.\n *\n * @param {string} message - The message to stop listening for.\n * @param {Function=} callback - Optional callback to remove. If none is defined,\n * remove all callbacks for the message.\n */\n\n }, {\n key: "stopListening",\n value: function stopListening(message, callback) {\n if (this._callbacks[message] === undefined) {\n return;\n } else if (callback === undefined) {\n // If no callback was defined, call stopListening on all callbacks for the message\n for (var i = this._callbacks[message].length - 1; i > -1; i--) {\n this.stopListening(message, this._callbacks[message][i]);\n }\n\n return;\n } // If a callback was defined, make sure it\'s a listener\n\n\n var index = this._callbacks[message].indexOf(callback);\n\n if (index === -1) {\n return;\n }\n\n var listener = this._eventListeners[message][index];\n\n this._removeListener(message, listener);\n\n this._callbacks[message].splice(index, 1);\n\n this._eventListeners[message].splice(index, 1);\n\n if (this._callbacks[message].length === 0) {\n delete this._callbacks[message];\n delete this._eventListeners[message];\n }\n }\n /**\n * De-register callback(s) from being executed when messages matching the given\n * regular expression are received.\n *\n * @param {Regexp} regexp - regexp - The regular expression to filter messages with.\n * @param {Function=} callback - Optional callback to remove. If none is defined,\n * remove all callbacks for messages matching the regular expression.\n */\n\n }, {\n key: "stopListeningByRegexp",\n value: function stopListeningByRegexp(regexp, callback) {\n var _this = this;\n\n var messages = Object.keys(this._callbacks).filter(function (message) {\n return regexp.test(message);\n });\n messages.forEach(function (message) {\n _this.stopListening(message, callback);\n });\n }\n /**\n * Prevent any functions from being executed when any message is received for\n * this object.\n */\n\n }, {\n key: "stopListeningToAll",\n value: function stopListeningToAll() {\n var messages = Object.keys(this._callbacks);\n\n for (var i = messages.length - 1; i > -1; i--) {\n this.stopListening(messages[i]);\n }\n }\n /**\n * Send a message, causing listener functions for the message on this object\n * to be executed.\n *\n * @param {string} message - The message to emit.\n * @param {any=} value - Optional argument to pass to listener callbacks.\n */\n\n }, {\n key: "emit",\n value: function emit(message, value) {\n if (this._callbacks[message] === undefined) {\n return;\n }\n\n message = this._createLocalMessage(message);\n\n var event = this._createEvent(message, value);\n\n this._dispatcher.dispatchEvent(event);\n }\n /**\n * Execute a function when a message is received for the global Messenger instance.\n *\n * @static\n *\n * @param {string} message - The message to listen for.\n * @param {Function} callback - Function to execute once the message is received.\n */\n\n }], [{\n key: "listenTo",\n value: function listenTo(message, callback, messenger) {\n this.GlobalMessenger.listenTo(message, callback, messenger);\n }\n /**\n * Prevent a function from being executed when a message is received for the\n * global Messenger instance.\n *\n * @static\n *\n * @param {string} message - The message to stop listening for.\n * @param {Function=} callback - Optional callback to remove. If none is defined,\n * remove all callbacks for the message.\n */\n\n }, {\n key: "stopListening",\n value: function stopListening(message, callback) {\n this.GlobalMessenger.stopListening(message, callback);\n }\n /**\n * De-register callback(s) from being executed on the global messengerr instance\n * when messages matching the given regular expression are received.\n *\n * @param {Regexp} regexp - regexp - The regular expression to filter messages with.\n * @param {Function=} callback - Optional callback to remove. If none is defined,\n * remove all callbacks for messages matching the regular expression.\n */\n\n }, {\n key: "stopListeningByRegexp",\n value: function stopListeningByRegexp(regexp, callback) {\n var _this2 = this;\n\n var messages = Object.keys(this.GlobalMessenger._callbacks).filter(function (message) {\n return regexp.test(message);\n });\n messages.forEach(function (message) {\n _this2.stopListening(message, callback);\n });\n }\n /**\n * Prevent any functions from being executed when any message is received for\n * the global Messenger instance.\n *\n * @static\n */\n\n }, {\n key: "stopListeningToAll",\n value: function stopListeningToAll() {\n this.GlobalMessenger.stopListeningToAll();\n }\n /**\n * Send a message, causing listener functions for the message on the global Messenger\n * instance to be executed.\n *\n * @static\n *\n * @param {string} message - The message to emit.\n * @param {any=} value - Optional argument to pass to listener callbacks.\n */\n\n }, {\n key: "emit",\n value: function emit(message, value) {\n this.GlobalMessenger.emit(message, value);\n }\n }]);\n\n return Messenger;\n}();\n\nObject.defineProperties(Messenger_Messenger, {\n GlobalMessenger: {\n value: new Messenger_Messenger(),\n writable: false\n },\n EVENTS: {\n value: {},\n writable: false\n }\n});\n/* harmony default export */ var core_Messenger = (Messenger_Messenger);\n// CONCATENATED MODULE: ./src/three.js/Messenger.js\nfunction Messenger_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { Messenger_typeof = function _typeof(obj) { return typeof obj; }; } else { Messenger_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return Messenger_typeof(obj); }\n\nfunction three_js_Messenger_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction three_js_Messenger_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction three_js_Messenger_createClass(Constructor, protoProps, staticProps) { if (protoProps) three_js_Messenger_defineProperties(Constructor.prototype, protoProps); if (staticProps) three_js_Messenger_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction Messenger_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) Messenger_setPrototypeOf(subClass, superClass); }\n\nfunction Messenger_setPrototypeOf(o, p) { Messenger_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return Messenger_setPrototypeOf(o, p); }\n\nfunction Messenger_createSuper(Derived) { var hasNativeReflectConstruct = Messenger_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = Messenger_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = Messenger_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return Messenger_possibleConstructorReturn(this, result); }; }\n\nfunction Messenger_possibleConstructorReturn(self, call) { if (call && (Messenger_typeof(call) === "object" || typeof call === "function")) { return call; } return Messenger_assertThisInitialized(self); }\n\nfunction Messenger_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction Messenger_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction Messenger_getPrototypeOf(o) { Messenger_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return Messenger_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/**\r\n * @extends core/Messenger\r\n * @alias three.js/Messenger\r\n */\n\nvar three_js_Messenger_Messenger = /*#__PURE__*/function (_CoreMessenger) {\n Messenger_inherits(Messenger, _CoreMessenger);\n\n var _super = Messenger_createSuper(Messenger);\n\n /**\r\n * @constructor\r\n *\r\n * @param {any=} id - Id for the object. If none is provided a new id will\r\n * be created. Id should be able to be represented as a string.\r\n */\n function Messenger(id) {\n var _this;\n\n three_js_Messenger_classCallCheck(this, Messenger);\n\n _this = _super.call(this, id);\n _this._dispatcher = Messenger_assertThisInitialized(_this);\n return _this;\n }\n\n three_js_Messenger_createClass(Messenger, [{\n key: "_createEvent",\n value: function _createEvent(message, value) {\n return {\n detail: value,\n type: message\n };\n }\n }]);\n\n return Messenger;\n}(core_Messenger); // Assign Three.js EventDispatcher functionality to the Messenger class\n\n\nObject.getOwnPropertyNames(THREE.EventDispatcher.prototype).filter(function (prop) {\n return prop !== \'constructor\';\n}).forEach(function (prop) {\n three_js_Messenger_Messenger.prototype[prop] = THREE.EventDispatcher.prototype[prop];\n});\nObject.defineProperty(three_js_Messenger_Messenger, \'GlobalMessenger\', {\n value: new three_js_Messenger_Messenger(),\n writable: false\n});\n/* harmony default export */ var three_js_Messenger = (three_js_Messenger_Messenger);\n// CONCATENATED MODULE: ./src/core/AbstractHostFeature.js\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || AbstractHostFeature_unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\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."); }\n\nfunction AbstractHostFeature_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return AbstractHostFeature_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return AbstractHostFeature_arrayLikeToArray(o, minLen); }\n\nfunction AbstractHostFeature_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction AbstractHostFeature_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction AbstractHostFeature_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction AbstractHostFeature_createClass(Constructor, protoProps, staticProps) { if (protoProps) AbstractHostFeature_defineProperties(Constructor.prototype, protoProps); if (staticProps) AbstractHostFeature_defineProperties(Constructor, staticProps); return Constructor; }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/**\r\n * Base class for all host features. Keeps a reference to the host object managing\r\n * the feature.\r\n *\r\n * @abstract\r\n *\r\n * @property {Object} EVENTS - Built-in messages that the feature emits. When the\r\n * feature is added to a {@link core/HostObject}, event names will be prefixed by the\r\n * name of the feature class + \'.\'.\r\n * @property {string} [EVENTS.update=onUpdate] - Message that is emitted after\r\n * each call to [update]{@link AbstractHostFeature#update}.\r\n * @property {Object} SERVICES - Any AWS services that are necessary for the\r\n * feature to function.\r\n */\n\nvar AbstractHostFeature_AbstractHostFeature = /*#__PURE__*/function () {\n /**\r\n * @constructor\r\n *\r\n * @param {core/HostObject} host - The HostObject managing the feature.\r\n */\n function AbstractHostFeature(host) {\n AbstractHostFeature_classCallCheck(this, AbstractHostFeature);\n\n this._host = host;\n }\n /**\r\n * Adds a namespace to the host with the name of the feature to contain properties\r\n * and methods from the feature that users of the host need access to.\r\n */\n\n\n AbstractHostFeature_createClass(AbstractHostFeature, [{\n key: "installApi",\n value: function installApi() {\n var _this = this;\n\n var events = {};\n var api = {\n EVENTS: events\n }; // Add the class name to event names\n\n Object.entries(this.constructor.EVENTS).forEach(function (_ref) {\n var _ref2 = _slicedToArray(_ref, 2),\n name = _ref2[0],\n value = _ref2[1];\n\n events[name] = "".concat(_this.constructor.name, ".").concat(value);\n });\n this._host[this.constructor.name] = api;\n return api;\n }\n /**\r\n * Gets the host that manages the feature.\r\n *\r\n * @readonly\r\n */\n\n }, {\n key: "host",\n get: function get() {\n return this._host;\n }\n /**\r\n * Gets the engine owner object of the host.\r\n *\r\n * @readonly\r\n */\n\n }, {\n key: "owner",\n get: function get() {\n return this._host.owner;\n }\n /**\r\n * Listen to a feature message from the host object.\r\n *\r\n * @param {string} message - Message to listen for.\r\n * @param {Function} callback - The callback to execute when the message is received.\r\n */\n\n }, {\n key: "listenTo",\n value: function listenTo(message, callback) {\n this._host.listenTo(message, callback);\n }\n /**\r\n * Listen to a feature message from the global messenger. Feature messages will\r\n * be prefixed with the class name of the feature.\r\n *\r\n * @param {string} message - Message to listen for.\r\n * @param {Function} callback - The callback to execute when the message is received.\r\n */\n\n }, {\n key: "stopListening",\n value:\n /**\r\n * Stop listening to a message from the host object.\r\n *\r\n * @param {string} message - Message to stop listening for.\r\n * @param {Function=} callback - Optional callback to remove. If none is defined,\r\n * remove all callbacks for the message.\r\n */\n function stopListening(message, callback) {\n this._host.stopListening(message, callback);\n }\n /**\r\n * Stop listening to a message from the global messenger.\r\n *\r\n * @param {string} message - Message to stop listening for.\r\n * @param {Function=} callback - Optional callback to remove. If none is defined,\r\n * remove all callbacks for the message.\r\n */\n\n }, {\n key: "stopListeningByRegexp",\n value:\n /**\r\n * Stop listening to a message matching the given regular expression from the\r\n * host object.\r\n *\r\n * @param {Regexp} regexp - The regular expression to stop listening for.\r\n * @param {Function=} callback - Optional callback to remove. If none is defined,\r\n * remove all callbacks for the message.\r\n */\n function stopListeningByRegexp(regexp, callback) {\n this._host.stopListeningByRegexp(regexp, callback);\n }\n /**\r\n * Stop listening to a message matching the given regular expression from the\r\n * global messenger.\r\n *\r\n * @param {Regexp} regexp - The regular expression to stop listening for.\r\n * @param {Function=} callback - Optional callback to remove. If none is defined,\r\n * remove all callbacks for the message.\r\n */\n\n }, {\n key: "stopListeningToAll",\n value:\n /**\r\n * Stop listening to all messages.\r\n */\n function stopListeningToAll() {\n this._host.stopListeningToAll();\n }\n /**\r\n * Stop listening to all feature messages.\r\n */\n\n }, {\n key: "emit",\n value:\n /**\r\n * Emit feature messages from the host. Feature messages will be prefixed with\r\n * the class name of the feature.\r\n *\r\n * @param {string} message - The message to emit.\r\n * @param {any=} value - Optional parameter to pass to listener callbacks.\r\n */\n function emit(message, value) {\n message = "".concat(this.constructor.name, ".").concat(message);\n\n this._host.emit(message, value);\n }\n /**\r\n * Emit feature messages from the global messenger. Feature messages will be prefixed\r\n * with the class name of the feature.\r\n *\r\n * @param {string} message - The message to emit.\r\n * @param {any=} value - Optional parameter to pass to listener callbacks.\r\n */\n\n }, {\n key: "update",\n value:\n /**\r\n * Executes each time the host is updated.\r\n *\r\n * @param {number} deltaTime - Amount of time since the last host update was\r\n * called.\r\n */\n function update(deltaTime) {\n this.emit(this.constructor.EVENTS.update, deltaTime);\n }\n /**\r\n * Clean up once the feature is no longer in use. Remove the feature namespace\r\n * from the host and remove reference to the host.\r\n */\n\n }, {\n key: "discard",\n value: function discard() {\n var _this2 = this;\n\n Object.keys(this._host[this.constructor.name]).forEach(function (name) {\n delete _this2._host[_this2.constructor.name][name];\n });\n delete this._host[this.constructor.name];\n delete this._host;\n }\n /**\r\n * Applies a sequence of mixin class factory functions to this class and\r\n * returns the result. Each function is expected to return a class that\r\n * extends the class it was given. The functions are applied in the order\r\n * that parameters are given, meaning that the first factory will\r\n * extend this base class.\r\n *\r\n * @param {...Function} mixinClassFactories Class factory functions that will\r\n * be applied.\r\n *\r\n * @returns {Class} A class that is the result of applying the factory functions.\r\n * The resulting class will always inherit from AbstractHostFeature.\r\n */\n\n }], [{\n key: "listenTo",\n value: function listenTo(message, callback) {\n message = "".concat(this.name, ".").concat(message);\n three_js_Messenger.listenTo(message, callback);\n }\n }, {\n key: "stopListening",\n value: function stopListening(message, callback) {\n message = "".concat(this.name, ".").concat(message);\n three_js_Messenger.stopListening(message, callback);\n }\n }, {\n key: "stopListeningByRegexp",\n value: function stopListeningByRegexp(regexp, callback) {\n regexp = new RegExp("^".concat(this.name, ".").concat(regexp.source.replace(/\\^/, \'\')));\n three_js_Messenger.stopListeningByRegexp(regexp, callback);\n }\n }, {\n key: "stopListeningToAll",\n value: function stopListeningToAll() {\n three_js_Messenger.stopListeningByRegexp(new RegExp("^".concat(this.name, ".")));\n }\n }, {\n key: "emit",\n value: function emit(message, value) {\n message = "".concat(this.name, ".").concat(message);\n three_js_Messenger.emit(message, value);\n }\n }, {\n key: "mix",\n value: function mix() {\n var ResultClass = this;\n\n for (var _len = arguments.length, mixinClassFactories = new Array(_len), _key = 0; _key < _len; _key++) {\n mixinClassFactories[_key] = arguments[_key];\n }\n\n mixinClassFactories.forEach(function (mixinClassFactory) {\n ResultClass = mixinClassFactory(ResultClass);\n });\n return ResultClass;\n }\n }]);\n\n return AbstractHostFeature;\n}();\n\nObject.defineProperties(AbstractHostFeature_AbstractHostFeature, {\n EVENTS: {\n value: {\n update: \'onUpdate\'\n },\n writable: false\n },\n SERVICES: {\n value: {},\n writable: false\n }\n});\n/* harmony default export */ var core_AbstractHostFeature = (AbstractHostFeature_AbstractHostFeature);\n// CONCATENATED MODULE: ./src/core/HostObject.js\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction HostObject_construct(Parent, args, Class) { if (HostObject_isNativeReflectConstruct()) { HostObject_construct = Reflect.construct; } else { HostObject_construct = function _construct(Parent, args, Class) { var a = [null]; a.push.apply(a, args); var Constructor = Function.bind.apply(Parent, a); var instance = new Constructor(); if (Class) HostObject_setPrototypeOf(instance, Class.prototype); return instance; }; } return HostObject_construct.apply(null, arguments); }\n\nfunction HostObject_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { HostObject_typeof = function _typeof(obj) { return typeof obj; }; } else { HostObject_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return HostObject_typeof(obj); }\n\nfunction HostObject_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction HostObject_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction HostObject_createClass(Constructor, protoProps, staticProps) { if (protoProps) HostObject_defineProperties(Constructor.prototype, protoProps); if (staticProps) HostObject_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction HostObject_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) HostObject_setPrototypeOf(subClass, superClass); }\n\nfunction HostObject_setPrototypeOf(o, p) { HostObject_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return HostObject_setPrototypeOf(o, p); }\n\nfunction HostObject_createSuper(Derived) { var hasNativeReflectConstruct = HostObject_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = HostObject_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = HostObject_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return HostObject_possibleConstructorReturn(this, result); }; }\n\nfunction HostObject_possibleConstructorReturn(self, call) { if (call && (HostObject_typeof(call) === "object" || typeof call === "function")) { return call; } return HostObject_assertThisInitialized(self); }\n\nfunction HostObject_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction HostObject_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction HostObject_getPrototypeOf(o) { HostObject_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return HostObject_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n/**\r\n * Object that manages access to all Host features. Contains a reference to\r\n * engine-specific visuals if applicable.\r\n *\r\n * @extends core/Messenger\r\n * @alias core/HostObject\r\n *\r\n * @property {Object} EVENTS - Built-in messages that the Messenger emits.\r\n * @property {string} [EVENTS.update=\'onUpdate\'] - Message that is emitted after\r\n * each call to [update]{@link core/HostObject#update}.\r\n * @property {string} [EVENTS.addFeature=\'onAddFeature\'] - Message that is emitted\r\n * after each call to [addFeature]{@link core/HostObject#addFeature}.\r\n * @property {string} [EVENTS.removeFeature=\'onRemoveFeature\'] - Message that is emitted\r\n * after each call to [removeFeature]{@link core/HostObject#removeFeature}.\r\n */\n\nvar HostObject_HostObject = /*#__PURE__*/function (_Messenger) {\n HostObject_inherits(HostObject, _Messenger);\n\n var _super = HostObject_createSuper(HostObject);\n\n /**\r\n * @constructor\r\n *\r\n * @param {Object=} options - Options for the host.\r\n * @param {Object=} options.owner - Optional engine-specific owner of the host.\r\n */\n function HostObject() {\n var _this;\n\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n _ref$owner = _ref.owner,\n owner = _ref$owner === void 0 ? {} : _ref$owner;\n\n HostObject_classCallCheck(this, HostObject);\n\n // If an owner is specified, use its id for messaging\n _this = _super.call(this, owner.id);\n _this._owner = owner;\n _this._features = {};\n _this._waits = [];\n _this._lastUpdate = _this.now;\n return _this;\n }\n /**\r\n * Gets the engine owner object of the host.\r\n *\r\n * @readonly\r\n * @type {Object}\r\n */\n\n\n HostObject_createClass(HostObject, [{\n key: "owner",\n get: function get() {\n return this._owner;\n }\n /**\r\n * Gets the current time in milliseconds.\r\n *\r\n * @readonly\r\n * @type {number}\r\n */\n\n }, {\n key: "now",\n get: function get() {\n return Date.now();\n }\n /**\r\n * Gets the amount of time in milliseconds since update was last called.\r\n *\r\n * @readonly\r\n * @type {number}\r\n */\n\n }, {\n key: "deltaTime",\n get: function get() {\n return this.now - this._lastUpdate;\n }\n /**\r\n * This function should be called in the engine\'s render loop. Executes update\r\n * loops for all features.\r\n */\n\n }, {\n key: "update",\n value: function update() {\n var currentTime = this.now;\n var dt = this.deltaTime; // Progress stored waits\n\n this._waits.forEach(function (wait) {\n wait.execute(dt);\n }); // Update all features\n\n\n Object.values(this._features).forEach(function (feature) {\n feature.update(dt);\n }); // Notify listeners an update occured\n\n this.emit(this.constructor.EVENTS.update, dt);\n this._lastUpdate = currentTime;\n }\n /**\r\n * Return a deferred promise that will wait a given number of seconds before\r\n * resolving. The host will continuously update the wait promise during the\r\n * update loop until it resolves.\r\n *\r\n * @param {number} [seconds=0] - Number of seconds to wait before resolving.\r\n * @param {Object=} options - Optional options object\r\n * @param {Function} [options.onFinish] - Callback to execute once the wait time\r\n * is met.\r\n * @param {Function=} options.onProgress - Callback to execute each time the wait\r\n * time progresses towards the target number of seconds. The amount of progress\r\n * as a 0-1 percentage is passed as an argument.\r\n * @param {Function=} options.onCancel - Callback to execute if the user cancels\r\n * the wait before completion.\r\n * @param {Function=} options.onError - Callback to execute if the wait stops\r\n * because an error is encountered. The error message is passed as a parameter.\r\n *\r\n * @returns {Deferred}\r\n */\n\n }, {\n key: "wait",\n value: function wait(seconds) {\n var _this2 = this;\n\n var _ref2 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n onFinish = _ref2.onFinish,\n onProgress = _ref2.onProgress,\n onCancel = _ref2.onCancel,\n onError = _ref2.onError;\n\n var wait = core_Utils.wait(seconds, {\n onFinish: onFinish,\n onProgress: onProgress,\n onCancel: onCancel,\n onError: onError\n });\n\n this._waits.push(wait); // Once the wait promise is no longer pending remove it from the waits array\n\n\n var onComplete = function onComplete() {\n _this2._waits.splice(_this2._waits.indexOf(wait), 1);\n };\n\n wait.then(onComplete, onComplete);\n return wait;\n }\n /**\r\n * Instantiate a new Host feature and store it. Features must inherit from\r\n * AbstractHostFeature.\r\n *\r\n * @param {Class} FeatureClass - Class that will instantiate the feature. Must\r\n * extend {@link AbstractHostFeature}.\r\n * @param {boolean} [force=false] - Whether or not to overwrite an existing\r\n * feature if one of this type already exists on the object.\r\n * @param {...any} args - Additional arguments to pass to the FeatureClass\r\n * constructor. The HostObject will always be passed as the first argument.\r\n *\r\n * @returns {boolean} - Whether or not a feature was successfully added.\r\n */\n\n }, {\n key: "addFeature",\n value: function addFeature(FeatureClass) {\n var force = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n var inputType = HostObject_typeof(FeatureClass); // Make sure the FeatureClass can be executed\n\n\n if (inputType !== \'function\') {\n throw new Error("Cannot add feature to host ".concat(this.id, ". FeatureClass must be a class."));\n } // Make sure the feature is a host feature\n else if (!(FeatureClass.prototype instanceof core_AbstractHostFeature)) {\n throw new Error("Cannot add feature ".concat(FeatureClass.name, " to host ").concat(this.id, ". FeatureClass must extend AbstractHostFeature."));\n } // Check if the FeatureClass already exists on this object\n\n\n if (this._features[FeatureClass.name] !== undefined) {\n if (force) {\n console.warn("Feature ".concat(FeatureClass.name, " already exists on host ").concat(this.id, ". Existing feature will be overwritten."));\n } else {\n throw new Error("Feature ".concat(FeatureClass.name, " already exists on host ").concat(this.id, ". Use \'force\' argument to overwrite the feature."));\n }\n } // Initialize the feature\n\n\n for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n args[_key - 2] = arguments[_key];\n }\n\n var feature = HostObject_construct(FeatureClass, [this].concat(args));\n\n feature.installApi();\n this._features[FeatureClass.name] = feature;\n this.emit(this.constructor.EVENTS.addFeature, FeatureClass.name);\n return true;\n }\n /**\r\n * Remove a feature from the object.\r\n *\r\n * @param {string} typeName - Name of the type of feature to remove.\r\n *\r\n * @returns {boolean} - Whether or not a feature was successfully removed.\r\n */\n\n }, {\n key: "removeFeature",\n value: function removeFeature(typeName) {\n if (this._features[typeName] === undefined) {\n console.warn("Feature of type ".concat(typeName, " does not exist on host ").concat(this.id, ". No feature will be removed."));\n return false;\n } else {\n // Remove the feature\n this.emit(this.constructor.EVENTS.removeFeature, typeName);\n\n this._features[typeName].discard();\n\n delete this._features[typeName];\n return true;\n }\n }\n /**\r\n * Indicate whether a specified feature is installed on the host.\r\n *\r\n * @param {string} typeName - Name of the type of feature to look for.\r\n *\r\n * @returns {boolean}\r\n */\n\n }, {\n key: "hasFeature",\n value: function hasFeature(typeName) {\n return !!this._features[typeName];\n }\n /**\r\n * List the names of the features installed on the host.\r\n *\r\n * @returns {Array.}\r\n */\n\n }, {\n key: "listFeatures",\n value: function listFeatures() {\n return Object.keys(this._features);\n }\n }]);\n\n return HostObject;\n}(three_js_Messenger);\n\nObject.defineProperty(HostObject_HostObject, \'EVENTS\', {\n value: _objectSpread(_objectSpread({}, Object.getPrototypeOf(HostObject_HostObject).EVENTS), {}, {\n update: \'onUpdate\',\n addFeature: \'onAddFeature\',\n removeFeature: \'onRemoveFeature\'\n }),\n writable: false\n});\n/* harmony default export */ var core_HostObject = (HostObject_HostObject);\n// CONCATENATED MODULE: ./src/three.js/HostObject.js\nfunction three_js_HostObject_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { three_js_HostObject_typeof = function _typeof(obj) { return typeof obj; }; } else { three_js_HostObject_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return three_js_HostObject_typeof(obj); }\n\nfunction three_js_HostObject_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction three_js_HostObject_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) three_js_HostObject_setPrototypeOf(subClass, superClass); }\n\nfunction three_js_HostObject_setPrototypeOf(o, p) { three_js_HostObject_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return three_js_HostObject_setPrototypeOf(o, p); }\n\nfunction three_js_HostObject_createSuper(Derived) { var hasNativeReflectConstruct = three_js_HostObject_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = three_js_HostObject_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = three_js_HostObject_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return three_js_HostObject_possibleConstructorReturn(this, result); }; }\n\nfunction three_js_HostObject_possibleConstructorReturn(self, call) { if (call && (three_js_HostObject_typeof(call) === "object" || typeof call === "function")) { return call; } return three_js_HostObject_assertThisInitialized(self); }\n\nfunction three_js_HostObject_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction three_js_HostObject_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction three_js_HostObject_getPrototypeOf(o) { three_js_HostObject_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return three_js_HostObject_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/**\r\n * Threejs Clock object\r\n *\r\n * @external "THREE.Clock"\r\n * @see https://threejs.org/docs/#api/en/core/Clock\r\n */\n\n/**\r\n * @alias three.js/HostObject\r\n * @extends core/HostObject\r\n */\n\nvar three_js_HostObject_HostObject = /*#__PURE__*/function (_CoreHostObject) {\n three_js_HostObject_inherits(HostObject, _CoreHostObject);\n\n var _super = three_js_HostObject_createSuper(HostObject);\n\n /**\r\n * @constructor\r\n *\r\n * @param {Object=} options - Options for the host.\r\n * @param {Object=} options.owner - Optional engine-specific owner of the host.\r\n * @param {external:"THREE.Clock"=} options.clock - Optional clock to manage time.\r\n */\n function HostObject() {\n var _this;\n\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n three_js_HostObject_classCallCheck(this, HostObject);\n\n _this = _super.call(this, options);\n _this._clock = options.clock;\n\n if (_this._clock) {\n Object.defineProperty(three_js_HostObject_assertThisInitialized(_this), \'now\', {\n get: function get() {\n return _this._clock.getElapsedTime() * 1000;\n }\n });\n _this._lastUpdate = _this.now;\n }\n\n return _this;\n }\n\n return HostObject;\n}(core_HostObject);\n\n/* harmony default export */ var three_js_HostObject = (three_js_HostObject_HostObject);\n// CONCATENATED MODULE: ./src/core/FeatureDependentInterface.js\nfunction FeatureDependentInterface_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { FeatureDependentInterface_typeof = function _typeof(obj) { return typeof obj; }; } else { FeatureDependentInterface_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return FeatureDependentInterface_typeof(obj); }\n\nfunction FeatureDependentInterface_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction FeatureDependentInterface_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { FeatureDependentInterface_ownKeys(Object(source), true).forEach(function (key) { FeatureDependentInterface_defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { FeatureDependentInterface_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction FeatureDependentInterface_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction FeatureDependentInterface_slicedToArray(arr, i) { return FeatureDependentInterface_arrayWithHoles(arr) || FeatureDependentInterface_iterableToArrayLimit(arr, i) || FeatureDependentInterface_unsupportedIterableToArray(arr, i) || FeatureDependentInterface_nonIterableRest(); }\n\nfunction FeatureDependentInterface_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."); }\n\nfunction FeatureDependentInterface_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return FeatureDependentInterface_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return FeatureDependentInterface_arrayLikeToArray(o, minLen); }\n\nfunction FeatureDependentInterface_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction FeatureDependentInterface_iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction FeatureDependentInterface_arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction _get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return _get(target, property, receiver || target); }\n\nfunction _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = FeatureDependentInterface_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction FeatureDependentInterface_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) FeatureDependentInterface_setPrototypeOf(subClass, superClass); }\n\nfunction FeatureDependentInterface_setPrototypeOf(o, p) { FeatureDependentInterface_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return FeatureDependentInterface_setPrototypeOf(o, p); }\n\nfunction FeatureDependentInterface_createSuper(Derived) { var hasNativeReflectConstruct = FeatureDependentInterface_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = FeatureDependentInterface_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = FeatureDependentInterface_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return FeatureDependentInterface_possibleConstructorReturn(this, result); }; }\n\nfunction FeatureDependentInterface_possibleConstructorReturn(self, call) { if (call && (FeatureDependentInterface_typeof(call) === "object" || typeof call === "function")) { return call; } return FeatureDependentInterface_assertThisInitialized(self); }\n\nfunction FeatureDependentInterface_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction FeatureDependentInterface_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction FeatureDependentInterface_getPrototypeOf(o) { FeatureDependentInterface_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return FeatureDependentInterface_getPrototypeOf(o); }\n\nfunction FeatureDependentInterface_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction FeatureDependentInterface_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction FeatureDependentInterface_createClass(Constructor, protoProps, staticProps) { if (protoProps) FeatureDependentInterface_defineProperties(Constructor.prototype, protoProps); if (staticProps) FeatureDependentInterface_defineProperties(Constructor, staticProps); return Constructor; }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/* eslint-disable no-unused-vars */\n\n/* eslint-disable max-classes-per-file */\n\n/**\n * Class factory interface for features that are dependent on other features being\n * present on the host. Event dependencies will be listened for when a feature of\n * matching type is added to the host and will stop being listened for when one\n * is removed. If the feature is already present when constructed, events will\n * be listened for right away.\n *\n * @interface\n *\n * @property {Object} EVENT_DEPENDENCIES - Events that the feature should start/stop\n * listening for when a feature of type FeatureName is added/removed from the host.\n * Event dependencies should follow the signature:\n * { FeatureName: { eventName: callbackName, ... }, ... }\n */\n\nvar FeatureDependentInterface_FeatureDependentInterface = /*#__PURE__*/function () {\n function FeatureDependentInterface() {\n FeatureDependentInterface_classCallCheck(this, FeatureDependentInterface);\n }\n\n FeatureDependentInterface_createClass(FeatureDependentInterface, [{\n key: "_onFeatureAdded",\n value:\n /**\n * Start listening for event dependencies that match the given feature type.\n *\n * @private\n *\n * @param {string} typeName - type of feature to listen for.\n */\n function _onFeatureAdded(typeName) {}\n /**\n * Stop listening for event dependencies that match the given feature type.\n *\n * @private\n *\n * @param {string} typeName - type of feature to stop listening for.\n */\n\n }, {\n key: "_onFeatureRemoved",\n value: function _onFeatureRemoved(typeName) {}\n /**\n * @augments {@link AbstractHostFeature#discard}\n */\n\n }, {\n key: "discard",\n value: function discard() {}\n /**\n * Creates a class that implements {@link FeatureDependentInterface} and extends\n * a specified base class.\n *\n * @param {Class} BaseClass - The class to extend.\n *\n * @return {Class} A class that extends `BaseClass` and implements {@link FeatureDependentInterface}.\n */\n\n }], [{\n key: "Mixin",\n value: function Mixin(BaseClass) {\n var FeatureDependentMixin = /*#__PURE__*/function (_BaseClass) {\n FeatureDependentInterface_inherits(FeatureDependentMixin, _BaseClass);\n\n var _super = FeatureDependentInterface_createSuper(FeatureDependentMixin);\n\n function FeatureDependentMixin(host) {\n var _this;\n\n FeatureDependentInterface_classCallCheck(this, FeatureDependentMixin);\n\n _this = _super.call(this, host);\n _this._host = host; // No need to listen for events if the mixin is in the prototype chain multiple times\n\n if (!_this._initialized) {\n _this._initialized = true; // Start listening for feature events\n\n _this._onFeatureAdded = _this._onFeatureAdded.bind(FeatureDependentInterface_assertThisInitialized(_this));\n _this._onFeatureRemoved = _this._onFeatureRemoved.bind(FeatureDependentInterface_assertThisInitialized(_this));\n\n _this._host.listenTo(three_js_HostObject.EVENTS.addFeature, _this._onFeatureAdded);\n\n _this._host.listenTo(three_js_HostObject.EVENTS.removeFeature, _this._onFeatureRemoved); // Register features that already exist\n\n\n Object.keys(_this.constructor.EVENT_DEPENDENCIES).forEach(function (typeName) {\n if (_this._host[typeName] !== undefined) {\n _this._onFeatureAdded(typeName);\n }\n });\n }\n\n return _this;\n }\n\n FeatureDependentInterface_createClass(FeatureDependentMixin, [{\n key: "_onFeatureAdded",\n value: function _onFeatureAdded(typeName) {\n var _this2 = this;\n\n if (this.constructor.EVENT_DEPENDENCIES[typeName] !== undefined) {\n var events = this.constructor.EVENT_DEPENDENCIES[typeName];\n Object.entries(events).forEach(function (_ref) {\n var _ref2 = FeatureDependentInterface_slicedToArray(_ref, 2),\n eventName = _ref2[0],\n callback = _ref2[1];\n\n _this2[callback] = _this2[callback].bind(_this2);\n\n _this2._host.listenTo(_this2._host[typeName].EVENTS[eventName], _this2[callback]);\n });\n }\n }\n }, {\n key: "_onFeatureRemoved",\n value: function _onFeatureRemoved(typeName) {\n var _this3 = this;\n\n if (this.constructor.EVENT_DEPENDENCIES[typeName] !== undefined) {\n var events = this.constructor.EVENT_DEPENDENCIES[typeName];\n Object.entries(events).forEach(function (_ref3) {\n var _ref4 = FeatureDependentInterface_slicedToArray(_ref3, 2),\n eventName = _ref4[0],\n callback = _ref4[1];\n\n _this3._host.stopListening(_this3._host[typeName].EVENTS[eventName], _this3[callback]);\n });\n }\n }\n }, {\n key: "discard",\n value: function discard() {\n var _this4 = this;\n\n // Stop listening for feature events\n this._host.stopListening(three_js_HostObject.EVENTS.addFeature, this._onFeatureAdded);\n\n this._host.stopListening(three_js_HostObject.EVENTS.removeFeature, this._onFeatureRemoved); // Stop listening to feature-specific events\n\n\n Object.keys(this.constructor.EVENT_DEPENDENCIES).forEach(function (typeName) {\n if (_this4._host[typeName] !== undefined) {\n _this4._onFeatureRemoved(typeName);\n }\n });\n\n _get(FeatureDependentInterface_getPrototypeOf(FeatureDependentMixin.prototype), "discard", this).call(this);\n }\n }]);\n\n return FeatureDependentMixin;\n }(BaseClass);\n\n var EVENT_DEPENDENCIES = BaseClass.EVENT_DEPENDENCIES || {};\n Object.defineProperties(FeatureDependentMixin, {\n EVENT_DEPENDENCIES: {\n value: FeatureDependentInterface_objectSpread({}, EVENT_DEPENDENCIES),\n writable: false\n }\n });\n return FeatureDependentMixin;\n }\n }]);\n\n return FeatureDependentInterface;\n}();\n/**\n * Event dependencies should follow the signature:\n * {\n * FeatureName: {\n * // Events that the feature should start/stop listening for when a feature\n * // of type FeatureName is added/removed from the host\n * {\n * eventName: callbackName,\n * ...\n * },\n * }\n * }\n */\n\n\nObject.defineProperties(FeatureDependentInterface_FeatureDependentInterface, {\n EVENT_DEPENDENCIES: {\n value: {},\n writable: false\n }\n});\n/* harmony default export */ var core_FeatureDependentInterface = (FeatureDependentInterface_FeatureDependentInterface);\n// CONCATENATED MODULE: ./src/core/animpack/AnimationFeatureDependentInterface.js\nfunction AnimationFeatureDependentInterface_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { AnimationFeatureDependentInterface_typeof = function _typeof(obj) { return typeof obj; }; } else { AnimationFeatureDependentInterface_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return AnimationFeatureDependentInterface_typeof(obj); }\n\nfunction AnimationFeatureDependentInterface_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction AnimationFeatureDependentInterface_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { AnimationFeatureDependentInterface_ownKeys(Object(source), true).forEach(function (key) { AnimationFeatureDependentInterface_defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { AnimationFeatureDependentInterface_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction AnimationFeatureDependentInterface_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction AnimationFeatureDependentInterface_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction AnimationFeatureDependentInterface_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction AnimationFeatureDependentInterface_createClass(Constructor, protoProps, staticProps) { if (protoProps) AnimationFeatureDependentInterface_defineProperties(Constructor.prototype, protoProps); if (staticProps) AnimationFeatureDependentInterface_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction AnimationFeatureDependentInterface_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) AnimationFeatureDependentInterface_setPrototypeOf(subClass, superClass); }\n\nfunction AnimationFeatureDependentInterface_setPrototypeOf(o, p) { AnimationFeatureDependentInterface_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return AnimationFeatureDependentInterface_setPrototypeOf(o, p); }\n\nfunction AnimationFeatureDependentInterface_createSuper(Derived) { var hasNativeReflectConstruct = AnimationFeatureDependentInterface_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = AnimationFeatureDependentInterface_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = AnimationFeatureDependentInterface_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return AnimationFeatureDependentInterface_possibleConstructorReturn(this, result); }; }\n\nfunction AnimationFeatureDependentInterface_possibleConstructorReturn(self, call) { if (call && (AnimationFeatureDependentInterface_typeof(call) === "object" || typeof call === "function")) { return call; } return AnimationFeatureDependentInterface_assertThisInitialized(self); }\n\nfunction AnimationFeatureDependentInterface_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction AnimationFeatureDependentInterface_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction AnimationFeatureDependentInterface_getPrototypeOf(o) { AnimationFeatureDependentInterface_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return AnimationFeatureDependentInterface_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/* eslint-disable no-unused-vars */\n\n/* eslint-disable max-classes-per-file */\n\n/**\n * Class factory interface for features that are dependent on the AnimationFeature\n * being present on the host. Layer and animation events will automatically be\n * listened for once a AnimationFeature is added to the host and stopped once it\n * is removed.\n *\n * @interface\n * @extends FeatureDependentInterface\n *\n * @property {Object} EVENT_DEPENDENCIES - Events that the feature should start/stop\n * listening for when a feature of type FeatureName is added/removed from the host.\n * @property {Object} EVENT_DEPENDENCIES.AnimationFeature - Events that are\n * specific to the AnimationFeature.\n * @property {string} [EVENT_DEPENDENCIES.AnimationFeature.addLayer=\'_onLayerAdded\'] -\n * The name of the method that will be executed when AnimationFeature addLayer\n * events are emitted.\n * @property {string} [EVENT_DEPENDENCIES.AnimationFeature.removeLayer=\'_onLayerRemoved\'] -\n * The name of the method that will be executed when AnimationFeature removeLayer\n * events are emitted.\n * @property {string} [EVENT_DEPENDENCIES.AnimationFeature.renameLayer=\'_onLayerRenamed\'] -\n * The name of the method that will be executed when AnimationFeature renameLayer\n * events are emitted.\n * @property {string} [EVENT_DEPENDENCIES.AnimationFeature.addAnimation=\'_onAnimationAdded\'] -\n * The name of the method that will be executed when AnimationFeature addAnimation\n * events are emitted.\n * @property {string} [EVENT_DEPENDENCIES.AnimationFeature.removeAnimation=\'_onAnimationRemoved\'] -\n * The name of the method that will be executed when AnimationFeature removeAnimation\n * events are emitted.\n * @property {string} [EVENT_DEPENDENCIES.AnimationFeature.renameAnimation=\'_onAnimationRenamed\'] -\n * The name of the method that will be executed when AnimationFeature renameAnimation\n * events are emitted.\n */\n\nvar AnimationFeatureDependentInterface_AnimationFeatureDependentInterface = /*#__PURE__*/function (_FeatureDependentInte) {\n AnimationFeatureDependentInterface_inherits(AnimationFeatureDependentInterface, _FeatureDependentInte);\n\n var _super = AnimationFeatureDependentInterface_createSuper(AnimationFeatureDependentInterface);\n\n function AnimationFeatureDependentInterface() {\n AnimationFeatureDependentInterface_classCallCheck(this, AnimationFeatureDependentInterface);\n\n return _super.apply(this, arguments);\n }\n\n AnimationFeatureDependentInterface_createClass(AnimationFeatureDependentInterface, [{\n key: "_onLayerAdded",\n value:\n /**\n * Executed when animation layer added events are caught.\n *\n * @private\n *\n * @param {string} name - Name of the layer that was added.\n */\n function _onLayerAdded(_ref) {\n var name = _ref.name;\n }\n /**\n * Executed when animation layer removed events are caught.\n *\n * @private\n *\n * @param {string} name - Name of the layer that was removed.\n */\n\n }, {\n key: "_onLayerRemoved",\n value: function _onLayerRemoved(_ref2) {\n var name = _ref2.name;\n }\n /**\n * Executed when animation layer renamed events are caught.\n *\n * @private\n *\n * @param {string} oldName - Name of the layer that was renamed.\n * @param {string} newName - New name of the layer.\n */\n\n }, {\n key: "_onLayerRenamed",\n value: function _onLayerRenamed(_ref3) {\n var oldName = _ref3.oldName,\n newName = _ref3.newName;\n }\n /**\n * Executed when animation added events are caught.\n *\n * @private\n *\n * @param {string} layerName - Name of the layer that an animation was added to.\n * @param {string} animationName - Name of the animation that was added.\n */\n\n }, {\n key: "_onAnimationAdded",\n value: function _onAnimationAdded(_ref4) {\n var layerName = _ref4.layerName,\n animationName = _ref4.animationName;\n }\n /**\n * Executed when animation removed events are caught.\n *\n * @private\n *\n * @param {string} layerName - Name of the layer that an animation was removed from.\n * @param {string} animationName - Name of the animation that was removed.\n */\n\n }, {\n key: "_onAnimationRemoved",\n value: function _onAnimationRemoved(_ref5) {\n var layerName = _ref5.layerName,\n animationName = _ref5.animationName;\n }\n /**\n * Executed when animation renamed events are caught.\n *\n * @private\n *\n * @param {string} layerName - Name of the layer that an animation belongs to.\n * @param {string} oldName - Name of the animation that was renamed.\n * @param {string} newName - New name of the animation.\n */\n\n }, {\n key: "_onAnimationRenamed",\n value: function _onAnimationRenamed(_ref6) {\n var layerName = _ref6.layerName,\n oldName = _ref6.oldName,\n newName = _ref6.newName;\n }\n /**\n * Creates a class that implements {@link AnimationFeatureDependentInterface}\n * and extends a specified base class.\n *\n * @param {Class} BaseClass - The class to extend.\n *\n * @return {Class} A class that extends `BaseClass` and implements {@link AnimationFeatureDependentInterface}.\n */\n\n }], [{\n key: "Mixin",\n value: function Mixin(BaseClass) {\n var ParentClass = core_FeatureDependentInterface.Mixin(BaseClass);\n\n var AnimationFeatureDependentMixin = /*#__PURE__*/function (_ParentClass) {\n AnimationFeatureDependentInterface_inherits(AnimationFeatureDependentMixin, _ParentClass);\n\n var _super2 = AnimationFeatureDependentInterface_createSuper(AnimationFeatureDependentMixin);\n\n function AnimationFeatureDependentMixin() {\n AnimationFeatureDependentInterface_classCallCheck(this, AnimationFeatureDependentMixin);\n\n return _super2.apply(this, arguments);\n }\n\n AnimationFeatureDependentInterface_createClass(AnimationFeatureDependentMixin, [{\n key: "_onLayerAdded",\n value: function _onLayerAdded(_ref7) {\n var name = _ref7.name;\n }\n }, {\n key: "_onLayerRemoved",\n value: function _onLayerRemoved(_ref8) {\n var name = _ref8.name;\n }\n }, {\n key: "_onLayerRenamed",\n value: function _onLayerRenamed(_ref9) {\n var oldName = _ref9.oldName,\n newName = _ref9.newName;\n }\n }, {\n key: "_onAnimationAdded",\n value: function _onAnimationAdded(_ref10) {\n var layerName = _ref10.layerName,\n animationName = _ref10.animationName;\n }\n }, {\n key: "_onAnimationRemoved",\n value: function _onAnimationRemoved(_ref11) {\n var layerName = _ref11.layerName,\n animationName = _ref11.animationName;\n }\n }, {\n key: "_onAnimationRenamed",\n value: function _onAnimationRenamed(_ref12) {\n var layerName = _ref12.layerName,\n oldName = _ref12.oldName,\n newName = _ref12.newName;\n }\n }]);\n\n return AnimationFeatureDependentMixin;\n }(ParentClass);\n\n Object.defineProperties(AnimationFeatureDependentMixin, {\n EVENT_DEPENDENCIES: {\n value: AnimationFeatureDependentInterface_objectSpread(AnimationFeatureDependentInterface_objectSpread({}, ParentClass.EVENT_DEPENDENCIES), AnimationFeatureDependentInterface.EVENT_DEPENDENCIES),\n writable: false\n }\n });\n return AnimationFeatureDependentMixin;\n }\n }]);\n\n return AnimationFeatureDependentInterface;\n}(core_FeatureDependentInterface);\n\nObject.defineProperties(AnimationFeatureDependentInterface_AnimationFeatureDependentInterface, {\n EVENT_DEPENDENCIES: {\n value: {\n AnimationFeature: {\n addLayer: \'_onLayerAdded\',\n removeLayer: \'_onLayerRemoved\',\n renameLayer: \'_onLayerRenamed\',\n addAnimation: \'_onAnimationAdded\',\n removeAnimation: \'_onAnimationRemoved\',\n renameAnimation: \'_onAnimationRenamed\'\n }\n },\n writable: false\n }\n});\n/* harmony default export */ var animpack_AnimationFeatureDependentInterface = (AnimationFeatureDependentInterface_AnimationFeatureDependentInterface);\n// CONCATENATED MODULE: ./src/core/animpack/ManagedAnimationLayerInterface.js\nfunction ManagedAnimationLayerInterface_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { ManagedAnimationLayerInterface_typeof = function _typeof(obj) { return typeof obj; }; } else { ManagedAnimationLayerInterface_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return ManagedAnimationLayerInterface_typeof(obj); }\n\nfunction ManagedAnimationLayerInterface_slicedToArray(arr, i) { return ManagedAnimationLayerInterface_arrayWithHoles(arr) || ManagedAnimationLayerInterface_iterableToArrayLimit(arr, i) || ManagedAnimationLayerInterface_unsupportedIterableToArray(arr, i) || ManagedAnimationLayerInterface_nonIterableRest(); }\n\nfunction ManagedAnimationLayerInterface_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."); }\n\nfunction ManagedAnimationLayerInterface_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return ManagedAnimationLayerInterface_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return ManagedAnimationLayerInterface_arrayLikeToArray(o, minLen); }\n\nfunction ManagedAnimationLayerInterface_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction ManagedAnimationLayerInterface_iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction ManagedAnimationLayerInterface_arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction ManagedAnimationLayerInterface_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction ManagedAnimationLayerInterface_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ManagedAnimationLayerInterface_ownKeys(Object(source), true).forEach(function (key) { ManagedAnimationLayerInterface_defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ManagedAnimationLayerInterface_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction ManagedAnimationLayerInterface_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction ManagedAnimationLayerInterface_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { ManagedAnimationLayerInterface_get = Reflect.get; } else { ManagedAnimationLayerInterface_get = function _get(target, property, receiver) { var base = ManagedAnimationLayerInterface_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return ManagedAnimationLayerInterface_get(target, property, receiver || target); }\n\nfunction ManagedAnimationLayerInterface_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = ManagedAnimationLayerInterface_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction ManagedAnimationLayerInterface_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction ManagedAnimationLayerInterface_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction ManagedAnimationLayerInterface_createClass(Constructor, protoProps, staticProps) { if (protoProps) ManagedAnimationLayerInterface_defineProperties(Constructor.prototype, protoProps); if (staticProps) ManagedAnimationLayerInterface_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction ManagedAnimationLayerInterface_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) ManagedAnimationLayerInterface_setPrototypeOf(subClass, superClass); }\n\nfunction ManagedAnimationLayerInterface_setPrototypeOf(o, p) { ManagedAnimationLayerInterface_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return ManagedAnimationLayerInterface_setPrototypeOf(o, p); }\n\nfunction ManagedAnimationLayerInterface_createSuper(Derived) { var hasNativeReflectConstruct = ManagedAnimationLayerInterface_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = ManagedAnimationLayerInterface_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = ManagedAnimationLayerInterface_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return ManagedAnimationLayerInterface_possibleConstructorReturn(this, result); }; }\n\nfunction ManagedAnimationLayerInterface_possibleConstructorReturn(self, call) { if (call && (ManagedAnimationLayerInterface_typeof(call) === "object" || typeof call === "function")) { return call; } return ManagedAnimationLayerInterface_assertThisInitialized(self); }\n\nfunction ManagedAnimationLayerInterface_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction ManagedAnimationLayerInterface_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction ManagedAnimationLayerInterface_getPrototypeOf(o) { ManagedAnimationLayerInterface_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return ManagedAnimationLayerInterface_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/* eslint-disable no-unused-vars */\n\n/* eslint-disable max-classes-per-file */\n\n/**\n * Class factory interface for that keeps track of layers and animations on a host.\n * Tracked assets are marked as inactive until layers and animations with matching\n * names are detected as present on the host.\n *\n * @interface\n * @extends AnimationFeatureDependentInterface\n *\n * @property {Object} DEFAULT_LAYER_OPTIONS - Default options to use when executing\n * {@link AnimationLayer} methods.\n * @property {number} [DEFAULT_LAYER_OPTIONS.blendTime=0.5] - Default time in seconds\n * to use when executing {@link AnimationLayer.setBlendWeight}.\n * @property {Object} [DEFAULT_LAYER_OPTIONS.animations={}] - Maps animation names\n * to default options objects to use for managed animations.\n */\n\nvar ManagedAnimationLayerInterface_ManagedAnimationLayerInterface = /*#__PURE__*/function (_AnimationFeatureDepe) {\n ManagedAnimationLayerInterface_inherits(ManagedAnimationLayerInterface, _AnimationFeatureDepe);\n\n var _super = ManagedAnimationLayerInterface_createSuper(ManagedAnimationLayerInterface);\n\n function ManagedAnimationLayerInterface() {\n ManagedAnimationLayerInterface_classCallCheck(this, ManagedAnimationLayerInterface);\n\n return _super.apply(this, arguments);\n }\n\n ManagedAnimationLayerInterface_createClass(ManagedAnimationLayerInterface, [{\n key: "registerLayer",\n value:\n /**\n * Start tracking keeping track of whether a layer with the given name is present\n * on the host.\n *\n * @param {string} name - Name of the layer to keep track of.\n * @param {Object=} options - Options for the layer.\n * @param {number=} options.blendTime - Default amount of time to use when\n * manipulating layer weights on this layer.\n * @param {Function=} options.easingFn - Default easing function to use when\n * manipulating layer weights on this layer.\n * @param {Object=} options.animations - Animations to keep track of on the layer.\n * Animations are represented as key/value pairs of animation names and their\n * options.\n */\n function registerLayer(name) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n }\n /**\n * Start tracking keeping track of whether an animation with the given name is\n * present on the host.\n *\n * @param {string} layerName - Name of the layer that will own the animation.\n * @param {string} animationName - Name of the animation to keep track of.\n * @param {Object=} options - Options for the animation.\n */\n\n }, {\n key: "registerAnimation",\n value: function registerAnimation(layerName, animationName) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n }\n /**\n * Set layer weights on tracked layers.\n *\n * @param {Function=} nameFilter - Predicate function to test each tracked layer\n * with. By default all layers will pass.\n * @param {number} weight - Weight value to set on layers.\n * @param {number=} seconds - Number of seconds it will take to reach the weight\n * on each layer. If undefined, each layers\' blendTime option is used.\n * @param {Function=} easingFn - Easing function to use when setting weight\n * on each layer. If undefined, each layers\' easingFn option is used.\n */\n\n }, {\n key: "setLayerWeights",\n value: function setLayerWeights() {\n var nameFilter = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : function () {\n return true;\n };\n var weight = arguments.length > 1 ? arguments[1] : undefined;\n var seconds = arguments.length > 2 ? arguments[2] : undefined;\n var easingFn = arguments.length > 3 ? arguments[3] : undefined;\n }\n /**\n * Set all tracked layers\' weights to 1.\n *\n * @param {number=} seconds - Number of seconds it will take to reach the weight\n * on each layer. If undefined, each layers\' blendTime option is used.\n * @param {Function=} easingFn - Easing function to use when setting weight\n * on each layer. If undefined, each layers\' easingFn option is used.\n */\n\n }, {\n key: "enable",\n value: function enable(seconds, easingFn) {}\n /**\n * Set all tracked layers\' weights to 0.\n *\n * @param {number=} seconds - Number of seconds it will take to reach the weight\n * on each layer. If undefined, each layers\' blendTime option is used.\n * @param {Function=} easingFn - Easing function to use when setting weight\n * on each layer. If undefined, each layers\' easingFn option is used.\n */\n\n }, {\n key: "disable",\n value: function disable(seconds, easingFn) {}\n /**\n * Creates a class that implements {@link ManagedAnimationLayerInterface}\n * and extends a specified base class.\n *\n * @param {Class} BaseClass - The class to extend.\n *\n * @return {Class} A class that extends `BaseClass` and implements {@link ManagedAnimationLayerInterface}.\n */\n\n }], [{\n key: "Mixin",\n value: function Mixin(BaseClass) {\n var ParentClass = animpack_AnimationFeatureDependentInterface.Mixin(BaseClass);\n\n var ManagedAnimationLayerMixin = /*#__PURE__*/function (_ParentClass) {\n ManagedAnimationLayerInterface_inherits(ManagedAnimationLayerMixin, _ParentClass);\n\n var _super2 = ManagedAnimationLayerInterface_createSuper(ManagedAnimationLayerMixin);\n\n function ManagedAnimationLayerMixin() {\n var _this;\n\n ManagedAnimationLayerInterface_classCallCheck(this, ManagedAnimationLayerMixin);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super2.call.apply(_super2, [this].concat(args));\n _this._managedLayers = {};\n return _this;\n }\n\n ManagedAnimationLayerInterface_createClass(ManagedAnimationLayerMixin, [{\n key: "_onFeatureAdded",\n value: function _onFeatureAdded(typeName) {\n var _this2 = this;\n\n ManagedAnimationLayerInterface_get(ManagedAnimationLayerInterface_getPrototypeOf(ManagedAnimationLayerMixin.prototype), "_onFeatureAdded", this).call(this, typeName);\n\n if (typeName !== \'AnimationFeature\') {\n return;\n }\n\n this._managedLayers = this._managedLayers || {}; // Detect new layers\n\n this._host.AnimationFeature.layers.forEach(function (name) {\n _this2._onLayerAdded({\n name: name\n });\n });\n }\n }, {\n key: "_onFeatureRemoved",\n value: function _onFeatureRemoved(typeName) {\n var _this3 = this;\n\n ManagedAnimationLayerInterface_get(ManagedAnimationLayerInterface_getPrototypeOf(ManagedAnimationLayerMixin.prototype), "_onFeatureRemoved", this).call(this, typeName);\n\n if (typeName !== \'AnimationFeature\') {\n return;\n }\n\n this._managedLayers = this._managedLayers || {}; // Deactivate the layers\n\n Object.keys(this._managedLayers).forEach(function (name) {\n _this3._onLayerRemoved({\n name: name\n });\n });\n }\n }, {\n key: "_onLayerAdded",\n value: function _onLayerAdded(_ref) {\n var _this4 = this;\n\n var name = _ref.name;\n\n // Mark the layer as active if it is managed\n if (this._managedLayers[name] !== undefined) {\n this._managedLayers[name].isActive = true; // Detect new animations\n\n this._host.AnimationFeature.getAnimations(name).forEach(function (animName) {\n _this4._onAnimationAdded({\n layerName: name,\n animationName: animName\n });\n });\n }\n }\n }, {\n key: "_onLayerRemoved",\n value: function _onLayerRemoved(_ref2) {\n var _this5 = this;\n\n var name = _ref2.name;\n\n // Deactivate the layer if it is managed\n if (this._managedLayers[name] !== undefined) {\n this._managedLayers[name].isActive = false; // Deactivate the animations\n\n Object.keys(this._managedLayers[name].animations).forEach(function (animName) {\n _this5._onAnimationRemoved({\n layerName: name,\n animationName: animName\n });\n });\n }\n }\n }, {\n key: "_onLayerRenamed",\n value: function _onLayerRenamed(_ref3) {\n var oldName = _ref3.oldName,\n newName = _ref3.newName;\n var layerOptions = this._managedLayers[oldName]; // Replace the layer key with the new name\n\n if (layerOptions !== undefined) {\n delete this._managedLayers[oldName];\n this._managedLayers[newName] = layerOptions;\n }\n }\n }, {\n key: "_onAnimationAdded",\n value: function _onAnimationAdded(_ref4) {\n var layerName = _ref4.layerName,\n animationName = _ref4.animationName;\n\n // Mark the animation as active if it is managed\n if (this._managedLayers[layerName] !== undefined && this._managedLayers[layerName].animations[animationName] !== undefined) {\n this._managedLayers[layerName].animations[animationName].isActive = true;\n }\n }\n }, {\n key: "_onAnimationRemoved",\n value: function _onAnimationRemoved(_ref5) {\n var layerName = _ref5.layerName,\n animationName = _ref5.animationName;\n\n // Deactivate the animation if it is managed\n if (this._managedLayers[layerName] !== undefined && this._managedLayers[layerName].animations[animationName] !== undefined) {\n this._managedLayers[layerName].animations[animationName].isActive = false;\n }\n }\n }, {\n key: "_onAnimationRenamed",\n value: function _onAnimationRenamed(_ref6) {\n var layerName = _ref6.layerName,\n oldName = _ref6.oldName,\n newName = _ref6.newName;\n\n if (this._managedLayers[layerName] !== undefined && this._managedLayers[layerName].animations[oldName] !== undefined) {\n // Replace the animation key with the new name\n var animOptions = this._managedLayers[layerName].animations[oldName];\n delete this._managedLayers[layerName].animations[oldName];\n this._managedLayers[layerName].animations[newName] = animOptions;\n }\n }\n }, {\n key: "registerLayer",\n value: function registerLayer(name) {\n var _this6 = this;\n\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n // Start with default options for each new layer\n if (this._managedLayers[name] === undefined) {\n this._managedLayers[name] = ManagedAnimationLayerInterface_objectSpread(ManagedAnimationLayerInterface_objectSpread({}, this.constructor.DEFAULT_LAYER_OPTIONS), {}, {\n animations: {}\n });\n } // Update all options except animations\n\n\n var layerOptions = this._managedLayers[name];\n options = ManagedAnimationLayerInterface_objectSpread({}, options);\n var animationOptions = options.animations || {};\n delete options.animations;\n Object.assign(layerOptions, options); // Check whether the layer can be manipulated now\n\n layerOptions.isActive = this._host.AnimationFeature !== undefined && this._host.AnimationFeature.layers.includes(name); // Register the animations\n\n Object.entries(animationOptions).forEach(function (_ref7) {\n var _ref8 = ManagedAnimationLayerInterface_slicedToArray(_ref7, 2),\n animName = _ref8[0],\n animOptions = _ref8[1];\n\n _this6.registerAnimation(name, animName, animOptions);\n });\n }\n }, {\n key: "registerAnimation",\n value: function registerAnimation(layerName, animationName) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n // Register the layer if it hasn\'t been registered yet\n if (this._managedLayers[layerName] === undefined) {\n this.registerLayer(layerName);\n } // Update animation options\n\n\n var animOptions = this._managedLayers[layerName].animations[animationName] || {};\n Object.assign(animOptions, options);\n this._managedLayers[layerName].animations[animationName] = animOptions; // Check whether the animation can be manipulated now\n\n this._managedLayers[layerName].animations[animationName].isActive = this._managedLayers[layerName].isActive && this._host.AnimationFeature.getAnimations(layerName).includes(animationName);\n }\n }, {\n key: "setLayerWeights",\n value: function setLayerWeights() {\n var _this7 = this;\n\n var nameFilter = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : function () {\n return true;\n };\n var weight = arguments.length > 1 ? arguments[1] : undefined;\n var seconds = arguments.length > 2 ? arguments[2] : undefined;\n var easingFn = arguments.length > 3 ? arguments[3] : undefined;\n var layerNames = Object.keys(this._managedLayers).filter(nameFilter);\n layerNames.forEach(function (name) {\n var layerOptions = _this7._managedLayers[name];\n\n if (layerOptions.isActive) {\n _this7._host.AnimationFeature.setLayerWeight(name, weight, seconds !== undefined ? seconds : layerOptions.blendTime, easingFn || layerOptions.easingFn);\n }\n });\n }\n }, {\n key: "enable",\n value: function enable(seconds, easingFn) {\n this.setLayerWeights(undefined, 1, seconds, easingFn);\n }\n }, {\n key: "disable",\n value: function disable(seconds, easingFn) {\n this.setLayerWeights(undefined, 0, seconds, easingFn);\n }\n }, {\n key: "installApi",\n value: function installApi() {\n var api = ManagedAnimationLayerInterface_get(ManagedAnimationLayerInterface_getPrototypeOf(ManagedAnimationLayerMixin.prototype), "installApi", this).call(this);\n\n Object.assign(api, {\n registerLayer: this.registerLayer.bind(this),\n registerAnimation: this.registerAnimation.bind(this),\n setLayerWeights: this.setLayerWeights.bind(this),\n enable: this.enable.bind(this),\n disable: this.disable.bind(this)\n });\n return api;\n }\n }]);\n\n return ManagedAnimationLayerMixin;\n }(ParentClass);\n\n Object.defineProperties(ManagedAnimationLayerMixin, {\n DEFAULT_LAYER_OPTIONS: {\n value: ManagedAnimationLayerInterface.DEFAULT_LAYER_OPTIONS,\n writable: false\n }\n });\n return ManagedAnimationLayerMixin;\n }\n }]);\n\n return ManagedAnimationLayerInterface;\n}(animpack_AnimationFeatureDependentInterface);\n\nObject.defineProperties(ManagedAnimationLayerInterface_ManagedAnimationLayerInterface, {\n DEFAULT_LAYER_OPTIONS: {\n value: {\n blendTime: 0.5,\n animations: {}\n },\n writable: false\n }\n});\n/* harmony default export */ var animpack_ManagedAnimationLayerInterface = (ManagedAnimationLayerInterface_ManagedAnimationLayerInterface);\n// CONCATENATED MODULE: ./src/core/awspack/TextToSpeechFeatureDependentInterface.js\nfunction TextToSpeechFeatureDependentInterface_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { TextToSpeechFeatureDependentInterface_typeof = function _typeof(obj) { return typeof obj; }; } else { TextToSpeechFeatureDependentInterface_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return TextToSpeechFeatureDependentInterface_typeof(obj); }\n\nfunction TextToSpeechFeatureDependentInterface_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction TextToSpeechFeatureDependentInterface_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { TextToSpeechFeatureDependentInterface_ownKeys(Object(source), true).forEach(function (key) { TextToSpeechFeatureDependentInterface_defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { TextToSpeechFeatureDependentInterface_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction TextToSpeechFeatureDependentInterface_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction TextToSpeechFeatureDependentInterface_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction TextToSpeechFeatureDependentInterface_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction TextToSpeechFeatureDependentInterface_createClass(Constructor, protoProps, staticProps) { if (protoProps) TextToSpeechFeatureDependentInterface_defineProperties(Constructor.prototype, protoProps); if (staticProps) TextToSpeechFeatureDependentInterface_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction TextToSpeechFeatureDependentInterface_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) TextToSpeechFeatureDependentInterface_setPrototypeOf(subClass, superClass); }\n\nfunction TextToSpeechFeatureDependentInterface_setPrototypeOf(o, p) { TextToSpeechFeatureDependentInterface_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return TextToSpeechFeatureDependentInterface_setPrototypeOf(o, p); }\n\nfunction TextToSpeechFeatureDependentInterface_createSuper(Derived) { var hasNativeReflectConstruct = TextToSpeechFeatureDependentInterface_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = TextToSpeechFeatureDependentInterface_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = TextToSpeechFeatureDependentInterface_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return TextToSpeechFeatureDependentInterface_possibleConstructorReturn(this, result); }; }\n\nfunction TextToSpeechFeatureDependentInterface_possibleConstructorReturn(self, call) { if (call && (TextToSpeechFeatureDependentInterface_typeof(call) === "object" || typeof call === "function")) { return call; } return TextToSpeechFeatureDependentInterface_assertThisInitialized(self); }\n\nfunction TextToSpeechFeatureDependentInterface_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction TextToSpeechFeatureDependentInterface_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction TextToSpeechFeatureDependentInterface_getPrototypeOf(o) { TextToSpeechFeatureDependentInterface_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return TextToSpeechFeatureDependentInterface_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/* eslint-disable max-classes-per-file */\n\n/**\n * Class factory interface for features that are dependent on the TextToSpeechFeature\n * being present on the host. Speech events will automatically be listened for once a\n * TextToSpeechFeature is added to the host and stopped once it is removed.\n *\n * @interface\n * @extends FeatureDependentInterface\n *\n * @property {Object} EVENT_DEPENDENCIES - Events that the feature should start/stop\n * listening for when a feature of type FeatureName is added/removed from the host.\n * @property {Object} EVENT_DEPENDENCIES.TextToSpeechFeature - Events that are\n * specific to the TextToSpeechFeature.\n * @property {string} [EVENT_DEPENDENCIES.TextToSpeechFeature.play=\'_onPlay\'] -\n * The name of the method that will be executed when TextToSpeechFeature play\n * events are emitted.\n * @property {string} [EVENT_DEPENDENCIES.TextToSpeechFeature.pause=\'_onPause\'] -\n * The name of the method that will be executed when TextToSpeechFeature pause\n * events are emitted.\n * @property {string} [EVENT_DEPENDENCIES.TextToSpeechFeature.resume=\'_onResume\'] -\n * The name of the method that will be executed when TextToSpeechFeature resume\n * events are emitted.\n * @property {string} [EVENT_DEPENDENCIES.TextToSpeechFeature.stop=\'_onStop\'] -\n * The name of the method that will be executed when TextToSpeechFeature stop\n * events are emitted.\n * @property {string} [EVENT_DEPENDENCIES.TextToSpeechFeature.sentence=\'_onSentence\'] -\n * The name of the method that will be executed when TextToSpeechFeature sentence\n * events are emitted.\n * @property {string} [EVENT_DEPENDENCIES.TextToSpeechFeature.word=\'_onWord\'] -\n * The name of the method that will be executed when TextToSpeechFeature word\n * events are emitted.\n * @property {string} [EVENT_DEPENDENCIES.TextToSpeechFeature.viseme=\'_onViseme\'] -\n * The name of the method that will be executed when TextToSpeechFeature viseme\n * events are emitted.\n * @property {string} [EVENT_DEPENDENCIES.TextToSpeechFeature.ssml=\'_onSsml\'] -\n * The name of the method that will be executed when TextToSpeechFeature ssml\n * events are emitted.\n */\n\nvar TextToSpeechFeatureDependentInterface_TextToSpeechFeatureDependentInterface = /*#__PURE__*/function (_FeatureDependentInte) {\n TextToSpeechFeatureDependentInterface_inherits(TextToSpeechFeatureDependentInterface, _FeatureDependentInte);\n\n var _super = TextToSpeechFeatureDependentInterface_createSuper(TextToSpeechFeatureDependentInterface);\n\n function TextToSpeechFeatureDependentInterface() {\n TextToSpeechFeatureDependentInterface_classCallCheck(this, TextToSpeechFeatureDependentInterface);\n\n return _super.apply(this, arguments);\n }\n\n TextToSpeechFeatureDependentInterface_createClass(TextToSpeechFeatureDependentInterface, [{\n key: "_onPlay",\n value:\n /**\n * Executed when speech play events are caught.\n *\n * @private\n */\n function _onPlay() {}\n /**\n * Executed when speech pause events are caught.\n *\n * @private\n */\n\n }, {\n key: "_onPause",\n value: function _onPause() {}\n /**\n * Executed when speech resume events are caught.\n *\n * @private\n */\n\n }, {\n key: "_onResume",\n value: function _onResume() {}\n /**\n * Executed when speech stop events are caught.\n *\n * @private\n */\n\n }, {\n key: "_onStop",\n value: function _onStop() {}\n /**\n * Executed when speech sentence events are caught.\n *\n * @private\n */\n\n }, {\n key: "_onSentence",\n value: function _onSentence() {}\n /**\n * Executed when speech word events are caught.\n *\n * @private\n */\n\n }, {\n key: "_onWord",\n value: function _onWord() {}\n /**\n * Executed when speech viseme events are caught.\n *\n * @private\n */\n\n }, {\n key: "_onViseme",\n value: function _onViseme() {}\n /**\n * Executed when speech ssml events are caught.\n *\n * @private\n */\n\n }, {\n key: "_onSsml",\n value: function _onSsml() {}\n /**\n * Creates a class that implements {@link TextToSpeechFeatureDependentInterface}\n * and extends a specified base class.\n *\n * @param {Class} BaseClass - The class to extend.\n *\n * @return {Class} A class that extends `BaseClass` and implements {@link TextToSpeechFeatureDependentInterface}.\n */\n\n }], [{\n key: "Mixin",\n value: function Mixin(BaseClass) {\n var ParentClass = core_FeatureDependentInterface.Mixin(BaseClass);\n\n var TextToSpeechFeatureDependentMixin = /*#__PURE__*/function (_ParentClass) {\n TextToSpeechFeatureDependentInterface_inherits(TextToSpeechFeatureDependentMixin, _ParentClass);\n\n var _super2 = TextToSpeechFeatureDependentInterface_createSuper(TextToSpeechFeatureDependentMixin);\n\n function TextToSpeechFeatureDependentMixin() {\n TextToSpeechFeatureDependentInterface_classCallCheck(this, TextToSpeechFeatureDependentMixin);\n\n return _super2.apply(this, arguments);\n }\n\n TextToSpeechFeatureDependentInterface_createClass(TextToSpeechFeatureDependentMixin, [{\n key: "_onPlay",\n value: function _onPlay() {}\n }, {\n key: "_onPause",\n value: function _onPause() {}\n }, {\n key: "_onResume",\n value: function _onResume() {}\n }, {\n key: "_onStop",\n value: function _onStop() {}\n }, {\n key: "_onSentence",\n value: function _onSentence() {}\n }, {\n key: "_onWord",\n value: function _onWord() {}\n }, {\n key: "_onViseme",\n value: function _onViseme() {}\n }, {\n key: "_onSsml",\n value: function _onSsml() {}\n }]);\n\n return TextToSpeechFeatureDependentMixin;\n }(ParentClass);\n\n Object.defineProperties(TextToSpeechFeatureDependentMixin, {\n EVENT_DEPENDENCIES: {\n value: TextToSpeechFeatureDependentInterface_objectSpread(TextToSpeechFeatureDependentInterface_objectSpread({}, ParentClass.EVENT_DEPENDENCIES), TextToSpeechFeatureDependentInterface.EVENT_DEPENDENCIES),\n writable: false\n }\n });\n return TextToSpeechFeatureDependentMixin;\n }\n }]);\n\n return TextToSpeechFeatureDependentInterface;\n}(core_FeatureDependentInterface);\n\nObject.defineProperties(TextToSpeechFeatureDependentInterface_TextToSpeechFeatureDependentInterface, {\n EVENT_DEPENDENCIES: {\n value: {\n TextToSpeechFeature: {\n play: \'_onPlay\',\n pause: \'_onPause\',\n resume: \'_onResume\',\n stop: \'_onStop\',\n sentence: \'_onSentence\',\n word: \'_onWord\',\n viseme: \'_onViseme\',\n ssml: \'_onSsml\'\n }\n },\n writable: false\n }\n});\n/* harmony default export */ var awspack_TextToSpeechFeatureDependentInterface = (TextToSpeechFeatureDependentInterface_TextToSpeechFeatureDependentInterface);\n// CONCATENATED MODULE: ./src/core/LipsyncFeature.js\nfunction LipsyncFeature_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { LipsyncFeature_typeof = function _typeof(obj) { return typeof obj; }; } else { LipsyncFeature_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return LipsyncFeature_typeof(obj); }\n\nfunction LipsyncFeature_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction LipsyncFeature_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { LipsyncFeature_ownKeys(Object(source), true).forEach(function (key) { LipsyncFeature_defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { LipsyncFeature_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction LipsyncFeature_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\n\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }\n\nfunction LipsyncFeature_slicedToArray(arr, i) { return LipsyncFeature_arrayWithHoles(arr) || LipsyncFeature_iterableToArrayLimit(arr, i) || LipsyncFeature_unsupportedIterableToArray(arr, i) || LipsyncFeature_nonIterableRest(); }\n\nfunction LipsyncFeature_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."); }\n\nfunction LipsyncFeature_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return LipsyncFeature_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return LipsyncFeature_arrayLikeToArray(o, minLen); }\n\nfunction LipsyncFeature_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction LipsyncFeature_iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction LipsyncFeature_arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction LipsyncFeature_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction LipsyncFeature_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction LipsyncFeature_createClass(Constructor, protoProps, staticProps) { if (protoProps) LipsyncFeature_defineProperties(Constructor.prototype, protoProps); if (staticProps) LipsyncFeature_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction LipsyncFeature_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { LipsyncFeature_get = Reflect.get; } else { LipsyncFeature_get = function _get(target, property, receiver) { var base = LipsyncFeature_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return LipsyncFeature_get(target, property, receiver || target); }\n\nfunction LipsyncFeature_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = LipsyncFeature_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction LipsyncFeature_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) LipsyncFeature_setPrototypeOf(subClass, superClass); }\n\nfunction LipsyncFeature_setPrototypeOf(o, p) { LipsyncFeature_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return LipsyncFeature_setPrototypeOf(o, p); }\n\nfunction LipsyncFeature_createSuper(Derived) { var hasNativeReflectConstruct = LipsyncFeature_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = LipsyncFeature_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = LipsyncFeature_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return LipsyncFeature_possibleConstructorReturn(this, result); }; }\n\nfunction LipsyncFeature_possibleConstructorReturn(self, call) { if (call && (LipsyncFeature_typeof(call) === "object" || typeof call === "function")) { return call; } return LipsyncFeature_assertThisInitialized(self); }\n\nfunction LipsyncFeature_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction LipsyncFeature_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction LipsyncFeature_getPrototypeOf(o) { LipsyncFeature_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return LipsyncFeature_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n\n\n/**\n * Default mapping of Polly viseme names to animation options objects.\n *\n * @property {Object} [sil={name: \'sil\'}]\n * @property {Object} [p={name: \'p\', overrideWeight: 0.9}]\n * @property {Object} [t={name: \'t\', blendTime: 0.2}]\n * @property {Object} [S={name: \'S\'}]\n * @property {Object} [T={name: \'T\'}]\n * @property {Object} [f={name: \'f\', overrideWeight: 0.75}]\n * @property {Object} [k={name: \'k\'}]\n * @property {Object} [i={name: \'i\'}]\n * @property {Object} [r={name: \'r\'}]\n * @property {Object} [s={name: \'s\', blendTime: 0.25}]\n * @property {Object} [u={name: \'u\'}]\n * @property {Object} [@={name: \'@\'}]\n * @property {Object} [a={name: \'a\'}]\n * @property {Object} [e={name: \'e\', blendTime: 0.2}]\n * @property {Object} [E={name: \'E\'}]\n * @property {Object} [o={name: \'o\'}]\n * @property {Object} [O={name: \'O\'}]\n */\n\nvar DefaultVisemeMap = {\n sil: {\n name: \'sil\'\n },\n p: {\n name: \'p\',\n overrideWeight: 0.9\n },\n t: {\n name: \'t\',\n blendTime: 0.2\n },\n S: {\n name: \'S\'\n },\n T: {\n name: \'T\'\n },\n f: {\n name: \'f\',\n overrideWeight: 0.75\n },\n k: {\n name: \'k\'\n },\n i: {\n name: \'i\'\n },\n r: {\n name: \'r\'\n },\n s: {\n name: \'s\',\n blendTime: 0.25\n },\n u: {\n name: \'u\'\n },\n \'@\': {\n name: \'@\'\n },\n a: {\n name: \'a\'\n },\n e: {\n name: \'e\',\n blendTime: 0.2\n },\n E: {\n name: \'E\'\n },\n o: {\n name: \'o\'\n },\n O: {\n name: \'O\'\n }\n};\n/**\n * Lipsync controls two types of movement: idle animation that should play while\n * speech is playing and viseme animations corresponding to Polly visemes whose\n * weights should be turned on and off as they are encountered in the Polly SSML\n * transcript. Layers owned by this feature will be enabled while speech is playing\n * and disabled once it stops.\n *\n * @extends AbstractHostFeature\n * @alias core/LipsyncFeature\n * @implements TextToSpeechFeatureDependentInterface\n * @implements ManagedAnimationLayerInterface\n */\n\nvar LipsyncFeature_LipsyncFeature = /*#__PURE__*/function (_AbstractHostFeature$) {\n LipsyncFeature_inherits(LipsyncFeature, _AbstractHostFeature$);\n\n var _super = LipsyncFeature_createSuper(LipsyncFeature);\n\n /**\n * @constructor\n *\n * @param {core/HostObject} host - Host that owns the feature.\n * @param {Object=} visemeOptions - Options for the viseme layers.\n * @param {number} [visemeOptions.blendTime=0.15] - Default amount of time it\n * will take to manipulate each freeBlend weight on the viseme states.\n * @param {Object} [visemeOptions.decayRate={amount: .5, seconds: .5}] - An object\n * describing the 0-1 factor viseme weight will decay if the viseme duration is\n * longer than the blendTime and the number of seconds it would take to decay\n * by that factor.\n * @param {number} [visemeOptions.easingFn=Quadratic.InOut] - Default easing function\n * to use when manipulating viseme freeBlend weights.\n * @param {Array.} [visemeOptions..layers=[]] - An array of layer options\n * objects to register as viseme layers.\n * @param {Object=} talkingOptions - Options for the talking layers.\n * @param {number} [talkingOptions.blendTime=0.75] - Default amount of time to\n * enable and disable the talking idle layers\n * @param {number} [talkingOptions.easingFn=Quadratic.InOut] - Default easing\n * function to use when manipulating weights on the talking idle layers.\n * @param {Array.} [talkingOptions.layers=[]] - An array of layer options\n * objects to register as talking layers.\n * @param {number} [visemeLeadTime=.067] - The amount of time to instruct the\n * TextToSpeechFeature to emit speechmarks before each one\'s actual timestamp\n * is reached. This will set the \'speechMarkOffset\' variable on the TextToSpeechFeature.\n */\n function LipsyncFeature(host) {\n var _this;\n\n var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n _ref$blendTime = _ref.blendTime,\n visemeBlendTime = _ref$blendTime === void 0 ? 0.15 : _ref$blendTime,\n _ref$decayRate = _ref.decayRate;\n\n _ref$decayRate = _ref$decayRate === void 0 ? {} : _ref$decayRate;\n var _ref$decayRate$amount = _ref$decayRate.amount,\n amount = _ref$decayRate$amount === void 0 ? 0.5 : _ref$decayRate$amount,\n _ref$decayRate$second = _ref$decayRate.seconds,\n seconds = _ref$decayRate$second === void 0 ? 0.5 : _ref$decayRate$second,\n _ref$easingFn = _ref.easingFn,\n visemeEasingFn = _ref$easingFn === void 0 ? Quadratic.InOut : _ref$easingFn,\n _ref$layers = _ref.layers,\n visemeLayers = _ref$layers === void 0 ? [] : _ref$layers;\n\n var _ref2 = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},\n _ref2$blendTime = _ref2.blendTime,\n talkingBlendTime = _ref2$blendTime === void 0 ? 0.75 : _ref2$blendTime,\n _ref2$easingFn = _ref2.easingFn,\n talkingEasingFn = _ref2$easingFn === void 0 ? Quadratic.InOut : _ref2$easingFn,\n _ref2$layers = _ref2.layers,\n talkingLayers = _ref2$layers === void 0 ? [] : _ref2$layers;\n\n var visemeLeadTime = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0.067;\n\n LipsyncFeature_classCallCheck(this, LipsyncFeature);\n\n _this = _super.call(this, host);\n _this._visemeLayers = {};\n _this._talkingLayers = {};\n _this.visemeLeadTime = visemeLeadTime; // Register the viseme layers\n\n visemeLayers.forEach(function (_ref3) {\n var name = _ref3.name,\n animation = _ref3.animation,\n _ref3$visemeMap = _ref3.visemeMap,\n visemeMap = _ref3$visemeMap === void 0 ? DefaultVisemeMap : _ref3$visemeMap;\n\n _this.registerVisemeLayer(name, {\n animation: animation,\n visemeMap: visemeMap,\n decayRate: {\n amount: amount,\n seconds: seconds\n },\n blendTime: visemeBlendTime,\n easingFn: visemeEasingFn\n });\n }); // Register the talking layers\n\n talkingLayers.forEach(function (_ref4) {\n var name = _ref4.name,\n animation = _ref4.animation;\n\n _this.registerTalkingLayer(name, {\n animation: animation,\n blendTime: talkingBlendTime,\n easingFn: talkingEasingFn\n });\n });\n return _this;\n }\n /**\n * Ensure that registered viseme animations are FreeBlendStates.\n *\n * @private\n *\n * @param {string} layerName - Name of the layer that contains the viseme animation.\n * @param {string} animationName - Name of the animation.\n */\n\n\n LipsyncFeature_createClass(LipsyncFeature, [{\n key: "_registerVisemeAnimation",\n value: function _registerVisemeAnimation(layerName, animationName) {\n if (this._managedLayers[layerName].animations[animationName].isActive) {\n if (this._host.AnimationFeature.getAnimationType(layerName, animationName) !== \'freeBlend\') {\n // Warn and deactivate if the registered state is not freeBlend\n console.warn("Cannot register Lipsync viseme animation ".concat(animationName, " on layer ").concat(layerName, " for host ").concat(this._host.id, ". Viseme animations must be of type \'freeBlend\'."));\n this._managedLayers[layerName].animations[animationName].isActive = false;\n } else {\n // Check if the blendWeights can be manipulated now\n var weightNames = this._host.AnimationFeature.getAnimationBlendNames(layerName, animationName);\n\n var visemeMap = this._managedLayers[layerName].animations[animationName].visemeMap;\n Object.values(visemeMap).forEach(function (visemeOptions) {\n visemeOptions.isActive = weightNames.includes(visemeOptions.name);\n });\n }\n }\n }\n /**\n * If the added feature is TextToSpeech, update its speechMarkOffset variable.\n *\n * @private\n *\n * @param {string} typeName - Name of the type of feature that was added.\n */\n\n }, {\n key: "_onFeatureAdded",\n value: function _onFeatureAdded(typeName) {\n this._visemeLayers = this._visemeLayers || {};\n this._talkingLayers = this._talkingLayers || {};\n\n LipsyncFeature_get(LipsyncFeature_getPrototypeOf(LipsyncFeature.prototype), "_onFeatureAdded", this).call(this, typeName);\n\n if (typeName === \'TextToSpeechFeature\') {\n this._host.TextToSpeechFeature.speechmarkOffset = -this._visemeLeadTime || 0;\n }\n }\n }, {\n key: "_onLayerAdded",\n value: function _onLayerAdded(_ref5) {\n var name = _ref5.name;\n\n LipsyncFeature_get(LipsyncFeature_getPrototypeOf(LipsyncFeature.prototype), "_onLayerAdded", this).call(this, {\n name: name\n }); // Validate the viseme animation\n\n\n if (this._visemeLayers[name] !== undefined) {\n this._registerVisemeAnimation(name, this._visemeLayers[name]);\n }\n }\n }, {\n key: "_onAnimationAdded",\n value: function _onAnimationAdded(_ref6) {\n var layerName = _ref6.layerName,\n animationName = _ref6.animationName;\n\n LipsyncFeature_get(LipsyncFeature_getPrototypeOf(LipsyncFeature.prototype), "_onAnimationAdded", this).call(this, {\n layerName: layerName\n }); // Validate the viseme animation\n\n\n if (this._visemeLayers[layerName] === animationName) {\n this._registerVisemeAnimation(layerName, this._visemeLayers[layerName]);\n }\n }\n }, {\n key: "_onPlay",\n value: function _onPlay() {\n var _this2 = this;\n\n // Turn on the layer weights\n this.enable(); // Set the current animations\n\n [this._visemeLayers, this._talkingLayers].forEach(function (layers) {\n Object.entries(layers).forEach(function (_ref7) {\n var _ref8 = LipsyncFeature_slicedToArray(_ref7, 2),\n layerName = _ref8[0],\n animationName = _ref8[1];\n\n if (_this2._managedLayers[layerName].animations[animationName].isActive) {\n _this2._host.AnimationFeature.resumeAnimation(layerName, animationName);\n }\n });\n });\n }\n }, {\n key: "_onPause",\n value: function _onPause() {\n this._onStop();\n }\n }, {\n key: "_onResume",\n value: function _onResume() {\n this._onPlay();\n }\n }, {\n key: "_onStop",\n value: function _onStop() {\n var _this3 = this;\n\n // Turn off the layer weights\n this.disable(); // Pause the current animations\n\n [this._visemeLayers, this._talkingLayers].forEach(function (layers) {\n Object.entries(layers).forEach(function (_ref9) {\n var _ref10 = LipsyncFeature_slicedToArray(_ref9, 2),\n layerName = _ref10[0],\n animationName = _ref10[1];\n\n if (_this3._managedLayers[layerName].animations[animationName].isActive) {\n _this3._host.AnimationFeature.pauseAnimation(layerName, animationName);\n }\n });\n });\n }\n /**\n * When viseme events are caught, turn on weight of the new viseme for the duration\n * of the speech mark, then turn weight back off.\n *\n * @private\n *\n * @param {Object} event - Event data passed from the speech.\n * @param {Object} event.mark - Speechmark object.\n */\n\n }, {\n key: "_onViseme",\n value: function () {\n var _onViseme2 = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee(_ref11) {\n var _this4 = this;\n\n var mark;\n return regeneratorRuntime.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n mark = _ref11.mark;\n Object.entries(this._visemeLayers).forEach(function (_ref12) {\n var _ref13 = LipsyncFeature_slicedToArray(_ref12, 2),\n layerName = _ref13[0],\n animName = _ref13[1];\n\n // Make sure the layer can be manipulated\n var _this4$_managedLayers = _this4._managedLayers[layerName].animations[animName],\n isActive = _this4$_managedLayers.isActive,\n visemeMap = _this4$_managedLayers.visemeMap;\n\n if (!isActive) {\n return;\n } // Take variables from the viseme if they exist and default to the layer\n\n\n var _this4$_managedLayers2 = LipsyncFeature_objectSpread(LipsyncFeature_objectSpread({}, _this4._managedLayers[layerName]), visemeMap[mark.value]),\n viseme = _this4$_managedLayers2.name,\n isVisemeActive = _this4$_managedLayers2.isActive,\n decayRate = _this4$_managedLayers2.decayRate,\n blendTime = _this4$_managedLayers2.blendTime,\n easingFn = _this4$_managedLayers2.easingFn,\n overrideWeight = _this4$_managedLayers2.overrideWeight;\n\n var visemeNames = _this4._host.AnimationFeature.getAnimationBlendNames(layerName, animName); // Make sure the new viseme has an active freeBlend weight\n\n\n if (!isVisemeActive || !visemeNames.includes(viseme)) {\n return;\n } // Find the peak weight for the viseme and the amount of time it should\n // take to reach it\n\n\n var weight = 1;\n var duration = mark.duration / 1000;\n\n if (duration < blendTime) {\n var lerpFactor = blendTime > 0 ? duration / blendTime : 1;\n weight = overrideWeight !== undefined ? overrideWeight : core_MathUtils.lerp(0, 1, lerpFactor);\n }\n\n var blendInTime = Math.min(duration, blendTime); // Find the amount and time viseme will be held for\n\n var holdTime = duration - blendTime;\n\n if (holdTime < 0) {\n // Perform in -> out animation\n _this4._animateSimpleViseme(layerName, animName, viseme, weight, blendInTime, blendTime, easingFn);\n } else {\n var _lerpFactor = decayRate.seconds > 0 ? holdTime / decayRate.seconds : 1; // Perform in -> hold -> out animation\n\n\n var decayWeight = core_MathUtils.lerp(weight, weight * decayRate.amount, Math.min(1, _lerpFactor));\n\n _this4._animateHeldViseme(layerName, animName, viseme, weight, decayWeight, blendInTime, holdTime, blendTime, easingFn);\n }\n });\n\n case 2:\n case "end":\n return _context.stop();\n }\n }\n }, _callee, this);\n }));\n\n function _onViseme(_x) {\n return _onViseme2.apply(this, arguments);\n }\n\n return _onViseme;\n }()\n /**\n * Animate a viseme blend weight towards a value and then back to zero.\n *\n * @private\n *\n * @param {string} layerName - Name of the layer that contains the viseme.\n * @param {string} animName - Name of the freeblend animation that contains\n * the viseme.\n * @param {string} visemeName - Name of the blend weight to manipulate.\n * @param {number} weight - Peak weight to animate towards.\n * @param {number} blendInTime - Amount of time it should take to reach the\n * peak weight.\n * @param {number} blendOutTime - Amount of time it should take to animate back\n * to zero after reaching the peak weight.\n * @param {Function} easingFn - Easing function to use during animation.\n */\n\n }, {\n key: "_animateSimpleViseme",\n value: function _animateSimpleViseme(layerName, animName, visemeName, peakWeight, blendInTime, blendOutTime, easingFn) {\n var _this5 = this;\n\n // Animate towards the peak value\n var weightPromise = this._host.AnimationFeature.setAnimationBlendWeight(layerName, animName, visemeName, peakWeight, blendInTime, easingFn); // Animate back to zero if there was no weight interruption\n\n\n weightPromise.then(function () {\n if (!weightPromise.canceled) {\n _this5._host.AnimationFeature.setAnimationBlendWeight(layerName, animName, visemeName, 0, blendOutTime, easingFn);\n }\n });\n }\n /**\n * Animate a viseme blend weight towards a value and then back to zero.\n *\n * @private\n *\n * @param {string} layerName - Name of the layer that contains the viseme.\n * @param {string} animName - Name of the freeblend animation that contains\n * the viseme.\n * @param {string} visemeName - Name of the blend weight to manipulate.\n * @param {number} peakWeight - Peak weight to animate towards.\n * @param {number} decayWeight - Weight to animate towards after reaching the\n * peak weight.\n * @param {number} blendInTime - Amount of time it should take to reach the\n * peak weight.\n * @param {number} holdTime - Amount of time it should take to reach the decay\n * weight after the peak weight has been reached.\n * @param {number} blendOutTime - Amount of time it should take to animate back\n * to zero after reaching the decay weight.\n * @param {Function} easingFn - Easing function to use during animation.\n */\n\n }, {\n key: "_animateHeldViseme",\n value: function () {\n var _animateHeldViseme2 = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2(layerName, animName, visemeName, peakWeight, decayWeight, blendInTime, holdTime, blendOutTime, easingFn) {\n var startPromise, holdPromise;\n return regeneratorRuntime.wrap(function _callee2$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n // Animate towards the peak value\n startPromise = this._host.AnimationFeature.setAnimationBlendWeight(layerName, animName, visemeName, peakWeight, blendInTime, easingFn);\n _context2.next = 3;\n return startPromise;\n\n case 3:\n if (startPromise.canceled) {\n _context2.next = 8;\n break;\n }\n\n // Animate towards the decay value if there was no weight interruption\n holdPromise = this._host.AnimationFeature.setAnimationBlendWeight(layerName, animName, visemeName, decayWeight, holdTime, easingFn);\n _context2.next = 7;\n return holdPromise;\n\n case 7:\n if (!holdPromise.canceled) {\n // Animate back to zero if there was no weight interruption\n this._host.AnimationFeature.setAnimationBlendWeight(layerName, animName, visemeName, 0, blendOutTime, easingFn);\n }\n\n case 8:\n case "end":\n return _context2.stop();\n }\n }\n }, _callee2, this);\n }));\n\n function _animateHeldViseme(_x2, _x3, _x4, _x5, _x6, _x7, _x8, _x9, _x10) {\n return _animateHeldViseme2.apply(this, arguments);\n }\n\n return _animateHeldViseme;\n }()\n /**\n * Gets and sets the amount of time in seconds to negatively offset speechmark\n * emission by.\n *\n * @type {number}\n */\n\n }, {\n key: "visemeLeadTime",\n get: function get() {\n return this._visemeLeadTime;\n },\n set: function set(seconds) {\n this._visemeLeadTime = seconds;\n\n if (this._host.TextToSpeechFeature) {\n this._host.TextToSpeechFeature.speechmarkOffset = -seconds;\n }\n }\n /**\n * Start keeping track of an animation layer that owns a freeBlend animation\n * with blendWeights corresponding to visemes.\n *\n * @param {string} layerName - Name of the layer to keep track of.\n * @param {Object=} options - Options for the layer.\n * @param {string} [options.animation=\'visemes\'] - Name of the animation on the\n * layer that will be played during speech. This animation must be of type\n * freeBlend.\n * @param {Object=} decayRate\n * @param {number} [decayRate.amount=0.5] - The percentage to decrease the viseme\'s\n * peak value by over time once the peak value has been reached.\n * @param {number} [decayRate.seconds=0.5] - The amount of time in seconds to\n * decrease the viseme\'s weight once it has reached its peak value.\n * @param {number=} [options.blendTime=[LipsyncFeature.DEFAULT_LAYER_OPTIONS.blendTime]{@link LipsyncFeature#DEFAULT_LAYER_OPTIONS#blendTime}] -\n * Default amount of time to use when manipulating animation blendWeights.\n * @param {Function=} options.easingFn - Default easing function to use when\n * manipulating animation blendWeights.\n * @param {Object} [options.visemeMap=DefaultVisemeMap] - Object containing key/value pairs of\n * Polly viseme names mapped to objects containing the name of the corresponding\n * animation blendWeight and any other animation options to use such as viseme\n * specific blend times and easing functions.\n */\n\n }, {\n key: "registerVisemeLayer",\n value: function registerVisemeLayer(layerName) {\n var _ref14 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n _ref14$animation = _ref14.animation,\n animation = _ref14$animation === void 0 ? \'visemes\' : _ref14$animation,\n _ref14$decayRate = _ref14.decayRate,\n decayRate = _ref14$decayRate === void 0 ? {\n amount: 0.5,\n seconds: 0.5\n } : _ref14$decayRate,\n _ref14$blendTime = _ref14.blendTime,\n blendTime = _ref14$blendTime === void 0 ? LipsyncFeature.DEFAULT_LAYER_OPTIONS.blendTime : _ref14$blendTime,\n easingFn = _ref14.easingFn,\n _ref14$visemeMap = _ref14.visemeMap,\n visemeMap = _ref14$visemeMap === void 0 ? DefaultVisemeMap : _ref14$visemeMap;\n\n // Register the layer and animation\n this.registerLayer(layerName, {\n decayRate: decayRate,\n blendTime: blendTime,\n easingFn: easingFn,\n animations: LipsyncFeature_defineProperty({}, animation, {\n visemeMap: visemeMap\n })\n });\n this._visemeLayers[layerName] = animation; // Validate the viseme animation\n\n this._registerVisemeAnimation(layerName, animation);\n }\n /**\n * Start keeping track of an animation layer that contains a looping animation\n * to be played during speech.\n *\n * @param {string} layerName - Name of the layer to keep track of.\n * @param {Object=} options - Options for the layer.\n * @param {string} [options.animation=\'stand_talk\'] - Name of the animation on the\n * layer that will be played during speech.\n * @param {number} [options.blendTime=[LipsyncFeature.DEFAULT_LAYER_OPTIONS.blendTime]{@link LipsyncFeature#DEFAULT_LAYER_OPTIONS#blendTime}] -\n * Default amount of time to use when manipulating the layer\'s weights.\n * @param {Function=} options.easingFn - Default easing function to use when\n * manipulating the layer\'s weights.\n */\n\n }, {\n key: "registerTalkingLayer",\n value: function registerTalkingLayer(layerName) {\n var _ref15 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n _ref15$animation = _ref15.animation,\n animation = _ref15$animation === void 0 ? \'stand_talk\' : _ref15$animation,\n _ref15$blendTime = _ref15.blendTime,\n blendTime = _ref15$blendTime === void 0 ? LipsyncFeature.DEFAULT_LAYER_OPTIONS.blendTime : _ref15$blendTime,\n easingFn = _ref15.easingFn;\n\n // Register the layer and animation\n this.registerLayer(layerName, {\n blendTime: blendTime,\n easingFn: easingFn,\n animations: LipsyncFeature_defineProperty({}, animation, {})\n });\n this._talkingLayers[layerName] = animation;\n }\n /**\n * Adds a namespace to the host with the name of the feature to contain properties\n * and methods from the feature that users of the host need access to.\n *\n * @see LipsyncFeature\n */\n\n }, {\n key: "installApi",\n value: function installApi() {\n var _this6 = this;\n\n /**\n * @inner\n * @namespace LipsyncFeature\n */\n var api = LipsyncFeature_get(LipsyncFeature_getPrototypeOf(LipsyncFeature.prototype), "installApi", this).call(this);\n /**\n * @memberof LipsyncFeature\n * @name registerLayer\n * @instance\n * @method\n * @see ManagedAnimationLayerInterface#registerLayer\n */\n\n /**\n * @memberof LipsyncFeature\n * @name registerAnimation\n * @instance\n * @method\n * @see ManagedAnimationLayerInterface#registerAnimation\n */\n\n /**\n * @memberof LipsyncFeature\n * @name setLayerWeights\n * @instance\n * @method\n * @see ManagedAnimationLayerInterface#setLayerWeights\n */\n\n /**\n * @memberof LipsyncFeature\n * @name enable\n * @instance\n * @method\n * @see ManagedAnimationLayerInterface#enable\n */\n\n /**\n * @memberof LipsyncFeature\n * @name disable\n * @instance\n * @method\n * @see ManagedAnimationLayerInterface#disable\n */\n\n\n Object.assign(api, {\n /**\n * @memberof LipsyncFeature\n * @instance\n * @method\n * @see core/LipsyncFeature#registerVisemeLayer\n */\n registerVisemeLayer: this.registerVisemeLayer.bind(this),\n\n /**\n * @memberof LipsyncFeature\n * @instance\n * @method\n * @see core/LipsyncFeature#registerTalkingLayer\n */\n registerTalkingLayer: this.registerTalkingLayer.bind(this)\n });\n /**\n * @memberof LipsyncFeature\n * @instance\n * @name visemeLeadTime\n * @see core/LipsyncFeature#visemeLeadTime\n */\n\n Object.defineProperty(api, \'visemeLeadTime\', {\n get: function get() {\n return _this6.visemeLeadTime;\n },\n set: function set(seconds) {\n _this6.visemeLeadTime = seconds;\n }\n });\n return api;\n }\n }]);\n\n return LipsyncFeature;\n}(core_AbstractHostFeature.mix(awspack_TextToSpeechFeatureDependentInterface.Mixin, animpack_ManagedAnimationLayerInterface.Mixin));\n\n/* harmony default export */ var core_LipsyncFeature = (LipsyncFeature_LipsyncFeature);\n\n// CONCATENATED MODULE: ./src/core/awspack/SSMLSpeechmarkInterface.js\nfunction SSMLSpeechmarkInterface_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { SSMLSpeechmarkInterface_typeof = function _typeof(obj) { return typeof obj; }; } else { SSMLSpeechmarkInterface_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return SSMLSpeechmarkInterface_typeof(obj); }\n\nfunction SSMLSpeechmarkInterface_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction SSMLSpeechmarkInterface_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction SSMLSpeechmarkInterface_createClass(Constructor, protoProps, staticProps) { if (protoProps) SSMLSpeechmarkInterface_defineProperties(Constructor.prototype, protoProps); if (staticProps) SSMLSpeechmarkInterface_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction SSMLSpeechmarkInterface_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) SSMLSpeechmarkInterface_setPrototypeOf(subClass, superClass); }\n\nfunction SSMLSpeechmarkInterface_setPrototypeOf(o, p) { SSMLSpeechmarkInterface_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return SSMLSpeechmarkInterface_setPrototypeOf(o, p); }\n\nfunction SSMLSpeechmarkInterface_createSuper(Derived) { var hasNativeReflectConstruct = SSMLSpeechmarkInterface_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = SSMLSpeechmarkInterface_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = SSMLSpeechmarkInterface_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return SSMLSpeechmarkInterface_possibleConstructorReturn(this, result); }; }\n\nfunction SSMLSpeechmarkInterface_possibleConstructorReturn(self, call) { if (call && (SSMLSpeechmarkInterface_typeof(call) === "object" || typeof call === "function")) { return call; } return SSMLSpeechmarkInterface_assertThisInitialized(self); }\n\nfunction SSMLSpeechmarkInterface_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction SSMLSpeechmarkInterface_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction SSMLSpeechmarkInterface_getPrototypeOf(o) { SSMLSpeechmarkInterface_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return SSMLSpeechmarkInterface_getPrototypeOf(o); }\n\n/* eslint-disable no-unused-vars */\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/* eslint-disable max-classes-per-file */\n\n/* eslint-disable no-empty */\n\n/**\n * Class factory interface for that registers callback method when a ssml speechmark event is emitted.\n *\n * @interface\n * @extends TextToSpeechFeatureDependentInterface\n */\n\nvar SSMLSpeechmarkInterface_SSMLSpeechmarkInterface = /*#__PURE__*/function (_TextToSpeechFeatureD) {\n SSMLSpeechmarkInterface_inherits(SSMLSpeechmarkInterface, _TextToSpeechFeatureD);\n\n var _super = SSMLSpeechmarkInterface_createSuper(SSMLSpeechmarkInterface);\n\n function SSMLSpeechmarkInterface() {\n SSMLSpeechmarkInterface_classCallCheck(this, SSMLSpeechmarkInterface);\n\n return _super.apply(this, arguments);\n }\n\n SSMLSpeechmarkInterface_createClass(SSMLSpeechmarkInterface, [{\n key: "_onSsml",\n value:\n /**\n * When ssml events are caught, this will try to parse the speech mark value and execute any function which meets criteria defined in the value.\n * Speech mark value will be treated as stringified json format containing required feature name, function name and argument array to pass in.\n * Example speech mark value might look like: \'{"feature":"GestureFeature", "method":"switchToGesture", "args":["genricA", 0.5]}\'\n *\n * @private\n *\n * @param {Object} event - Event data passed from the speech.\n * @param {Object} event.mark - Speechmark object.\n */\n function _onSsml(_ref) {\n var mark = _ref.mark;\n }\n /**\n * Creates a class that implements {@link SSMLSpeechmarkInterface}\n * and extends a specified base class.\n *\n * @param {Class} BaseClass - The class to extend.\n *\n * @return {Class} A class that extends `BaseClass` and implements {@link SSMLSpeechmarkInterface}.\n */\n\n }], [{\n key: "Mixin",\n value: function Mixin(BaseClass) {\n var ParentClass = awspack_TextToSpeechFeatureDependentInterface.Mixin(BaseClass);\n\n var SSMLSpeechMarkMixin = /*#__PURE__*/function (_ParentClass) {\n SSMLSpeechmarkInterface_inherits(SSMLSpeechMarkMixin, _ParentClass);\n\n var _super2 = SSMLSpeechmarkInterface_createSuper(SSMLSpeechMarkMixin);\n\n function SSMLSpeechMarkMixin() {\n SSMLSpeechmarkInterface_classCallCheck(this, SSMLSpeechMarkMixin);\n\n return _super2.apply(this, arguments);\n }\n\n SSMLSpeechmarkInterface_createClass(SSMLSpeechMarkMixin, [{\n key: "_onSsml",\n value: function _onSsml(_ref2) {\n var mark = _ref2.mark;\n\n try {\n var _JSON$parse = JSON.parse(mark.value),\n feature = _JSON$parse.feature,\n method = _JSON$parse.method,\n args = _JSON$parse.args;\n\n if (this.constructor.name === feature) {\n var callback = this[method];\n\n if (callback && typeof callback === \'function\') {\n callback.apply(this, args);\n } else {\n console.warn("Function ".concat(method, " does not exist within feature ").concat(feature));\n }\n }\n } catch (e) {}\n }\n }]);\n\n return SSMLSpeechMarkMixin;\n }(ParentClass);\n\n return SSMLSpeechMarkMixin;\n }\n }]);\n\n return SSMLSpeechmarkInterface;\n}(awspack_TextToSpeechFeatureDependentInterface);\n\n/* harmony default export */ var awspack_SSMLSpeechmarkInterface = (SSMLSpeechmarkInterface_SSMLSpeechmarkInterface);\n// CONCATENATED MODULE: ./src/core/GestureFeature.js\nfunction GestureFeature_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { GestureFeature_typeof = function _typeof(obj) { return typeof obj; }; } else { GestureFeature_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return GestureFeature_typeof(obj); }\n\nfunction GestureFeature_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction GestureFeature_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { GestureFeature_ownKeys(Object(source), true).forEach(function (key) { GestureFeature_defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { GestureFeature_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction GestureFeature_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction GestureFeature_slicedToArray(arr, i) { return GestureFeature_arrayWithHoles(arr) || GestureFeature_iterableToArrayLimit(arr, i) || GestureFeature_unsupportedIterableToArray(arr, i) || GestureFeature_nonIterableRest(); }\n\nfunction GestureFeature_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."); }\n\nfunction GestureFeature_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return GestureFeature_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return GestureFeature_arrayLikeToArray(o, minLen); }\n\nfunction GestureFeature_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction GestureFeature_iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction GestureFeature_arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction GestureFeature_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction GestureFeature_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction GestureFeature_createClass(Constructor, protoProps, staticProps) { if (protoProps) GestureFeature_defineProperties(Constructor.prototype, protoProps); if (staticProps) GestureFeature_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction GestureFeature_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { GestureFeature_get = Reflect.get; } else { GestureFeature_get = function _get(target, property, receiver) { var base = GestureFeature_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return GestureFeature_get(target, property, receiver || target); }\n\nfunction GestureFeature_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = GestureFeature_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction GestureFeature_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) GestureFeature_setPrototypeOf(subClass, superClass); }\n\nfunction GestureFeature_setPrototypeOf(o, p) { GestureFeature_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return GestureFeature_setPrototypeOf(o, p); }\n\nfunction GestureFeature_createSuper(Derived) { var hasNativeReflectConstruct = GestureFeature_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = GestureFeature_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = GestureFeature_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return GestureFeature_possibleConstructorReturn(this, result); }; }\n\nfunction GestureFeature_possibleConstructorReturn(self, call) { if (call && (GestureFeature_typeof(call) === "object" || typeof call === "function")) { return call; } return GestureFeature_assertThisInitialized(self); }\n\nfunction GestureFeature_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction GestureFeature_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction GestureFeature_getPrototypeOf(o) { GestureFeature_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return GestureFeature_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n\n\nvar DefaultGestureWords = {\n big: [\'add\', \'above\', \'authority\', \'big\', \'cover\', \'full\', \'fly\', \'grow\', \'growth\', \'high\', \'huge\', \'increase\', \'major\', \'majority\', \'large\', \'leader\', \'lot\', \'raise\', \'rise\', \'tall\'],\n heart: [\'accept\', \'admit\', \'believe\', \'care\', \'feeling\', \'feel\', \'friend\', \'grateful\', \'happy\', \'heart\', \'human\', \'pain\', \'save\', \'safe\', \'kind\', \'love\'],\n "in": [\'include\', \'including\', \'inside\', \'into\', \'now\', \'near\', \'nearest\', \'closest\', \'therein\', \'within\'],\n many: [\'all\', \'always\', \'any\', \'anyone\', \'among\', \'area\', \'around\', \'beautiful\', \'entire\', \'environment\', \'environments\', \'environmental\', \'everybody\', \'everyone\', \'everything\', \'audience\', \'total\', \'group\', \'groups\', \'million\', \'millions\', \'others\', \'billion\', \'billions\', \'hundred\', \'hundreds\', \'many\', \'thousand\', \'thousands\', \'world\', \'worlds\', \'outside\', \'reveal\'],\n movement: [\'away\', \'across\', \'ahead\', \'along\', \'far\', \'fast\', \'follow\', \'go\', \'leave\', \'move\', \'movement\', \'through\', \'throughout\', \'toward\', \'travel\', \'turned\', \'passed\'],\n one: [\'single\', \'one\', \'once\', \'first\', \'firstly\', \'only\', \'solo\', \'warned\', \'truly\', \'up\', \'alone\'],\n aggressive: [\'power\', \'powers\', \'powerful\', \'assert\', \'assertive\', \'strong\', \'stronger\', \'strongest\', \'strength\', \'flex\', \'dang\', \'damn\', \'damnit\', \'darn\', \'shucks\', \'doh\', \'drat\', \'angry\', \'angrier\', \'angriest\', \'aggressive\', \'annoyed\', \'annoying\', \'attack\', \'attacking\', \'offense\', \'offensive\', \'battle\'],\n you: [\'you\', \'yall\', "y\'all", \'your\', \'yours\', \'thou\', \'thy\'],\n defense: [\'defense\', \'fear\', \'repulsed\', \'scared\', \'scary\', \'scarier\', \'scariest\', \'fearful\', \'afraid\', \'cower\', \'cowers\', \'cowering\', \'hideous\', \'doomed\', \'terrified\', \'terrify\', \'terrifying\', \'terrifies\', \'spooky\', \'spookier\', \'spookiest\'],\n wave: [\'hello\', \'hi\', \'hiya\', \'howdy\', \'welcome\', \'aloha\', \'heya\', \'hey\', \'bye\', \'goodbye\', \'hola\', \'adios\', \'chao\'],\n self: [\'my\', \'I\', \'myself\', \'self\', "I\'ve", \'Ive\', \'me\', \'mine\', \'own\']\n};\n/**\n * Gesture allows you to play animations on demand on one or more layers from script\n * or ssml. If gesture is played that is a QueueState, the queue will automatically\n * be progressed after a given hold time if a looping queued state is reached. Gesture\n * layers can optionally be automatically disabled when no gesture animation is\n * in progress.\n *\n * @extends AbstractHostFeature\n * @implements SSMLSpeechmarkInterface\n * @implements ManagedAnimationLayerInterface\n */\n\nvar GestureFeature_GestureFeature = /*#__PURE__*/function (_AbstractHostFeature$) {\n GestureFeature_inherits(GestureFeature, _AbstractHostFeature$);\n\n var _super = GestureFeature_createSuper(GestureFeature);\n\n /**\n * @constructor\n *\n * @param {core/HostObject} host - Host object that owns the feature.\n * @param {Object=} options - Optional options for the feature.\n * @param {number} [options.holdTime = 3] - Amount of time in seconds that must\n * elapse before advancing a gesture that\'s a {@link QueueState} when the current\n * state in the queue is set to loop infinitely.\n * @param {number} [options.minimumInterval = 0.25] - The minimum amount of time\n * in seconds that must elapse before another gesture can be played.\n * @param {Object} layers - An object that maps layer names to layer options.\n * These are the layers that will be registered as tracked gesture layers. See\n * {@link ManagedAnimationLayerInterface#registerLayer} for more information\n * on expected format for each layer options object.\n */\n function GestureFeature(host) {\n var _this;\n\n var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n _ref$holdTime = _ref.holdTime,\n holdTime = _ref$holdTime === void 0 ? 3 : _ref$holdTime,\n _ref$minimumInterval = _ref.minimumInterval,\n minimumInterval = _ref$minimumInterval === void 0 ? 1 : _ref$minimumInterval,\n _ref$layers = _ref.layers,\n layers = _ref$layers === void 0 ? {} : _ref$layers;\n\n GestureFeature_classCallCheck(this, GestureFeature);\n\n _this = _super.call(this, host);\n _this.holdTime = holdTime;\n _this.minimumInterval = minimumInterval; // Register the gesture layers\n\n Object.entries(layers).forEach(function (_ref2) {\n var _ref3 = GestureFeature_slicedToArray(_ref2, 2),\n name = _ref3[0],\n _ref3$ = _ref3[1],\n options = _ref3$ === void 0 ? {} : _ref3$;\n\n _this.registerLayer(name, options);\n });\n return _this;\n }\n /**\n * Return a valid hold time value. If hold time isn\'t defined for the animation,\n * try to use the hold time for the layer. If that\'s not defined, fall back to\n * the hold time for the feature.\n *\n * @private\n *\n * @param {Object} layer - Managed layer options object.\n * @param {Object} animation - Managed animation options object.\n *\n * @returns {number}\n */\n\n\n GestureFeature_createClass(GestureFeature, [{\n key: "_getHoldTime",\n value: function _getHoldTime(layer, animation) {\n var layerHoldTime = layer.holdTime !== undefined ? layer.holdTime : this.holdTime;\n return animation.holdTime !== undefined ? animation.holdTime : layerHoldTime;\n }\n /**\n * Return a valid minimum interval value. If minimum interval isn\'t defined for\n * the animation, try to use the minimum interval for the layer. If that\'s not\n * defined, fall back to the minimum interval for the feature.\n *\n * @private\n *\n * @param {Object} layer - Managed layer options object.\n * @param {Object} animation - Managed animation options object.\n *\n * @returns {number}\n */\n\n }, {\n key: "_getMinimumInterval",\n value: function _getMinimumInterval(layer, animation) {\n var layerMinimumInterval = layer.minimumInterval !== undefined ? layer.minimumInterval : this.minimumInterval;\n return animation.minimumInterval !== undefined ? animation.minimumInterval : layerMinimumInterval;\n }\n /**\n * Callback for {@link core/AnimationFeature#playNextAnimation} event. If the\n * event is emitted for a managed animation and the new queued state cannot\n * advance on its own, start a new timer promise that will advance the queue\n * once it resolves.\n *\n * @private\n *\n * @param {Object} options - Options object passed from playNextAnimation event.\n * @param {string} layerName - Name of the layer that owns the queue state.\n * @param {string} animationName - Name of the queue state animation.\n * @param {boolean} canAdvance - Whether or not the current state in the queue\n * can advance on its own.\n * @param {boolean} isQueueEnd - Whether the current state in the queue is the last\n * state in the queue.\n */\n\n }, {\n key: "_onNext",\n value: function _onNext(_ref4) {\n var _this2 = this;\n\n var layerName = _ref4.layerName,\n animationName = _ref4.animationName,\n canAdvance = _ref4.canAdvance,\n isQueueEnd = _ref4.isQueueEnd;\n // Exit if this isn\'t a managed layer\n var layer = this._managedLayers[layerName];\n\n if (layer === undefined) {\n return;\n } // Exit if it isn\'t a managed animation\n\n\n var animation = layer.animations[animationName];\n\n if (animation === undefined) {\n return;\n } // Start a new timer for looping states that aren\'t the end of the queue\n\n\n if (!canAdvance && !isQueueEnd && layer.currentGesture === animationName) {\n var holdTime = this._getHoldTime(layer, animation);\n\n layer.holdTimer.cancel(); // Skip to the next animation right away if hold time is zero\n\n if (holdTime <= 0) {\n this._host.AnimationFeature.playNextAnimation(layerName, animationName);\n } // Wait for the given hold time before progressing\n else {\n layer.holdTimer = core_Utils.wait(holdTime, {\n onFinish: function onFinish() {\n // Advance the queue to the next state\n if (layer.currentGesture === animationName) {\n _this2._host.AnimationFeature.playNextAnimation(layerName, animationName);\n }\n }\n });\n }\n }\n }\n /**\n * Callback for {@link core/AnimationFeature#stopAnimation} event. If the\n * event is emitted for a managed animation cancel the layer\'s stored timers.\n * If the layer is set to auto-disable set its weight to 0.\n *\n * @private\n *\n * @param {Object} options - Options object passed from playNextAnimation event.\n * @param {string} layerName - Name of the layer that owns the stopped animation.\n * @param {string} animationName - Name of the animation that was stopped.\n */\n\n }, {\n key: "_onStop",\n value: function _onStop(_ref5) {\n var layerName = _ref5.layerName,\n animationName = _ref5.animationName;\n // Make sure the layer is managed\n var layer = this._managedLayers[layerName];\n\n if (layer === undefined) {\n return;\n } // Make sure the animation is managed\n\n\n var animation = layer.animations[animationName];\n\n if (animation !== undefined && animationName === layer.currentGesture) {\n layer.currentGesture = null;\n layer.playTimer = null;\n layer.holdTimer.cancel(); // Turn off layer weight\n\n if (layer.autoDisable) {\n this.setLayerWeights(function (name) {\n return name === layerName;\n }, 0);\n }\n }\n }\n }, {\n key: "_onAnimationAdded",\n value: function _onAnimationAdded(_ref6) {\n var layerName = _ref6.layerName,\n animationName = _ref6.animationName;\n var layer = this._managedLayers[layerName];\n\n if (layer !== undefined) {\n var animation = layer.animations[animationName]; // Register the animation as active if it is unmanaged\n\n if (animation === undefined) {\n this.registerAnimation(layerName, animationName);\n } // Mark the animation as active if it is managed\n else {\n animation.isActive = true;\n }\n }\n }\n }, {\n key: "registerLayer",\n value: function registerLayer(name) {\n var _this3 = this;\n\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n GestureFeature_get(GestureFeature_getPrototypeOf(GestureFeature.prototype), "registerLayer", this).call(this, name, GestureFeature_objectSpread(GestureFeature_objectSpread({}, options), {}, {\n holdTimer: core_Deferred.resolve(),\n playTimer: null,\n currentGesture: null\n }));\n\n if (this._managedLayers[name].isActive) {\n this._host.AnimationFeature.getAnimations(name).forEach(function (anim) {\n // Automatically register all animations on the layer\n if (_this3._managedLayers[name].animations[anim] === undefined) {\n _this3.registerAnimation(name, anim, _this3._managedLayers[name].animations[anim]);\n }\n });\n }\n }\n }, {\n key: "registerAnimation",\n value: function registerAnimation(layerName, animationName) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n // Try to fall back to a default word array\n if (!(options.words instanceof Array) && !(options.words instanceof Set)) {\n options.words = DefaultGestureWords[animationName] || [];\n }\n\n GestureFeature_get(GestureFeature_getPrototypeOf(GestureFeature.prototype), "registerAnimation", this).call(this, layerName, animationName, options);\n }\n /**\n * Create an object that maps ssml mark syntax required to play each gesture to\n * the words array associated with each gesture. Words arrays are defined at when\n * the gesture animation is registered. Gestures without associated words will\n * be excluded from the result. The resulting object can be used as an input\n * for {@link TextToSpeechUtils.autoGenerateSSMLMarks} to update a speech string\n * with the markup required to play gestures timed with their associated words.\n *\n * @returns {Object}\n */\n\n }, {\n key: "createGestureMap",\n value: function createGestureMap() {\n var _this4 = this;\n\n var gestureMap = {};\n Object.entries(this._managedLayers).forEach(function (_ref7) {\n var _ref8 = GestureFeature_slicedToArray(_ref7, 2),\n layerName = _ref8[0],\n animations = _ref8[1].animations;\n\n Object.entries(animations).forEach(function (_ref9) {\n var _ref10 = GestureFeature_slicedToArray(_ref9, 2),\n animationName = _ref10[0],\n _ref10$ = _ref10[1],\n holdTime = _ref10$.holdTime,\n minimumInterval = _ref10$.minimumInterval,\n words = _ref10$.words,\n transitionTime = _ref10$.transitionTime;\n\n // Only store gestures that have any associated words\n if (words.length) {\n var options = GestureFeature_objectSpread(GestureFeature_objectSpread(GestureFeature_objectSpread({}, holdTime && {\n holdTime: holdTime\n }), minimumInterval && {\n minimumInterval: minimumInterval\n }), transitionTime && {\n transitionTime: transitionTime\n });\n\n var key = {\n feature: _this4.constructor.name,\n method: \'playGesture\',\n args: [layerName, animationName, options]\n };\n gestureMap[JSON.stringify(key)] = words;\n }\n });\n });\n return gestureMap;\n }\n /**\n * Create an array that contains ssml mark syntax required to play each gesture\n * that does not have any associated words. The resulting array can be used as\n * an input for {@link TextToSpeechUtils.autoGenerateSSMLMarks} or\n * {@link TextToSpeechUtils.addMarksToUnmarkedSentences} to update a speech\n * string with the markup required to play random gestures at each unmarked\n * sentence in the string.\n *\n * @param {Array.=} layers - An array of names of managed layers to generate\n * marks for. If undefined, use all managed layers.\n *\n * @returns {Array.}\n */\n\n }, {\n key: "createGenericGestureArray",\n value: function createGenericGestureArray(layers) {\n var _this5 = this;\n\n var genericGestures = [];\n layers = layers || Object.keys(this._managedLayers);\n layers.forEach(function (layerName) {\n var layer = _this5._managedLayers[layerName]; // Make sure the layer is managed\n\n if (!layer) {\n return;\n }\n\n Object.entries(layer.animations).forEach(function (_ref11) {\n var _ref12 = GestureFeature_slicedToArray(_ref11, 2),\n animationName = _ref12[0],\n _ref12$ = _ref12[1],\n holdTime = _ref12$.holdTime,\n minimumInterval = _ref12$.minimumInterval,\n words = _ref12$.words,\n transitionTime = _ref12$.transitionTime;\n\n // Only store gestures that don\'t have any associated words\n if (!words.length) {\n var options = GestureFeature_objectSpread(GestureFeature_objectSpread(GestureFeature_objectSpread({}, holdTime && {\n holdTime: holdTime\n }), minimumInterval && {\n minimumInterval: minimumInterval\n }), transitionTime && {\n transitionTime: transitionTime\n });\n\n var key = JSON.stringify({\n feature: _this5.constructor.name,\n method: \'playGesture\',\n args: [layerName, animationName, options]\n });\n\n if (!genericGestures.includes(key)) {\n genericGestures.push(key);\n }\n }\n });\n });\n return genericGestures;\n }\n /**\n * Play a managed gesture animation.\n *\n * @param {string} layerName - The name of the layer that contains the gesture\n * animation.\n * @param {string} animationName - The name of the gesture animation.\n * @param {Object=} options - Optional gesture options.\n * @param {number=} options.holdTime - This option only applies to {@link QueueState}\n * gestures. When a QueueState gesture progresses to a looping state, this option\n * defines how many seconds should elapse before moving the queue forward. If\n * undefined, it will fall back first to the holdTime defined in the options when\n * the gesture animation was registered and then to the holdTime defined on the\n * feature.\n * @param {number=} options.minimumInterval - The minimum amount of time that\n * must have elapsed since the last time a gesture was played.\n */\n\n }, {\n key: "playGesture",\n value: function playGesture(layerName, animationName) {\n var _ref13 = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},\n holdTime = _ref13.holdTime,\n minimumInterval = _ref13.minimumInterval,\n transitionTime = _ref13.transitionTime,\n _ref13$force = _ref13.force,\n force = _ref13$force === void 0 ? false : _ref13$force;\n\n // Make sure the animation is registered\n if (this._managedLayers[layerName] === undefined || this._managedLayers[layerName].animations[animationName] === undefined) {\n this.registerAnimation(layerName, animationName, {\n holdTime: holdTime,\n minimumInterval: minimumInterval,\n transitionTime: transitionTime\n });\n }\n\n var layer = this._managedLayers[layerName];\n var animation = layer.animations[animationName]; // Make sure the animation is active\n\n if (!animation.isActive) {\n // Create warning message based on which object doesn\'t exist yet\n var typeName = layer.isActive ? \'animation\' : \'layer\';\n var message = "Skipping gesture ".concat(animationName, " on layer ").concat(layerName, " for host ").concat(this._host.id, ". No ").concat(typeName, " exists with this name yet.");\n console.warn(message);\n return core_Deferred.cancel({\n reason: \'inactive\',\n value: typeName\n });\n } // Check if the gesture is already playing\n\n\n var currentGesture = layer.currentGesture;\n\n if (currentGesture === animationName && !force) {\n var _message = "Skipping gesture ".concat(animationName, " on layer ").concat(layerName, " for host ").concat(this._host.id, ". The gesture is already playing. Use options.force to force the gesture replay, which may result in a hard transition.");\n\n console.warn(_message);\n return core_Deferred.cancel({\n reason: \'playing\',\n value: animationName\n });\n } // Update animation options\n\n\n if (holdTime !== undefined) {\n animation.holdTime = holdTime;\n }\n\n if (minimumInterval !== undefined) {\n animation.minimumInterval = minimumInterval;\n } else {\n minimumInterval = this._getMinimumInterval(layer, animation);\n } // Check the interval\n\n\n if (!force && layer.playTimer !== null && layer.playTimer < minimumInterval) {\n console.warn("Skipping gesture ".concat(animationName, " on layer ").concat(layerName, " for host ").concat(this._host.id, ". Minimum interval ").concat(minimumInterval, " has not been met."));\n return core_Deferred.cancel({\n reason: \'minimumInterval\',\n value: minimumInterval - layer.playTimer\n });\n } // Play the animation\n\n\n layer.currentGesture = animationName;\n layer.playTimer = 0;\n layer.holdTimer.cancel();\n\n if (layer.autoDisable) {\n this.setLayerWeights(function (name) {\n return name === layerName;\n }, 1);\n }\n\n return this._host.AnimationFeature.playAnimation(layerName, animationName, transitionTime);\n }\n }, {\n key: "update",\n value: function update(deltaTime) {\n var _this6 = this;\n\n GestureFeature_get(GestureFeature_getPrototypeOf(GestureFeature.prototype), "update", this).call(this, deltaTime); // Increment the timers\n\n\n Object.entries(this._managedLayers).forEach(function (_ref14) {\n var _ref15 = GestureFeature_slicedToArray(_ref14, 2),\n name = _ref15[0],\n options = _ref15[1];\n\n if (options.isActive && !_this6._host.AnimationFeature.getPaused(name)) {\n options.holdTimer.execute(deltaTime);\n\n if (options.playTimer !== null) {\n options.playTimer += deltaTime / 1000;\n }\n }\n });\n }\n }, {\n key: "installApi",\n value: function installApi() {\n /**\n * @inner\n * @namespace GestureFeature\n */\n var api = GestureFeature_get(GestureFeature_getPrototypeOf(GestureFeature.prototype), "installApi", this).call(this);\n\n Object.assign(api, {\n /**\n * @memberof GestureFeature\n * @instance\n * @method\n * @see GestureFeature#createGestureMap\n */\n createGestureMap: this.createGestureMap.bind(this),\n\n /**\n * @memberof GestureFeature\n * @instance\n * @method\n * @see GestureFeature#createGenericGestureArray\n */\n createGenericGestureArray: this.createGenericGestureArray.bind(this),\n\n /**\n * @memberof GestureFeature\n * @instance\n * @method\n * @see GestureFeature#playGesture\n */\n playGesture: this.playGesture.bind(this)\n });\n }\n }]);\n\n return GestureFeature;\n}(core_AbstractHostFeature.mix(awspack_SSMLSpeechmarkInterface.Mixin, animpack_ManagedAnimationLayerInterface.Mixin));\n\nObject.defineProperties(GestureFeature_GestureFeature, {\n DEFAULT_LAYER_OPTIONS: {\n value: GestureFeature_objectSpread(GestureFeature_objectSpread({}, GestureFeature_GestureFeature.DEFAULT_LAYER_OPTIONS), {}, {\n autoDisable: true\n }),\n writable: false\n },\n EVENT_DEPENDENCIES: {\n value: GestureFeature_objectSpread(GestureFeature_objectSpread({}, GestureFeature_GestureFeature.EVENT_DEPENDENCIES), {}, {\n AnimationFeature: GestureFeature_objectSpread(GestureFeature_objectSpread({}, GestureFeature_GestureFeature.EVENT_DEPENDENCIES.AnimationFeature), {}, {\n playNextAnimation: \'_onNext\',\n stopAnimation: \'_onStop\',\n interruptAnimation: \'_onStop\'\n })\n })\n }\n});\n/* harmony default export */ var core_GestureFeature = (GestureFeature_GestureFeature);\n\n// CONCATENATED MODULE: ./src/core/animpack/AnimationUtils.js\nfunction AnimationUtils_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction AnimationUtils_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction AnimationUtils_createClass(Constructor, protoProps, staticProps) { if (protoProps) AnimationUtils_defineProperties(Constructor.prototype, protoProps); if (staticProps) AnimationUtils_defineProperties(Constructor, staticProps); return Constructor; }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n\n/**\r\n * A collection of useful animation functions.\r\n *\r\n * @hideconstructor\r\n */\n\nvar AnimationUtils_AnimationUtils = /*#__PURE__*/function () {\n function AnimationUtils() {\n AnimationUtils_classCallCheck(this, AnimationUtils);\n }\n\n AnimationUtils_createClass(AnimationUtils, null, [{\n key: "lerp",\n value: function lerp(from, to, factor) {\n console.warn("AnimationUtils.lerp is being deprecated. Use MathUtils.lerp instead.");\n return core_MathUtils.lerp(from, to, factor);\n }\n /**\r\n * Clamp a number between 2 values.\r\n *\r\n * @param {number} value - Value to clamp.\r\n * @param {number} [min=0] - Minumum value.\r\n * @param {number} [max=1] - Maximum value.\r\n *\r\n * @returns {number}\r\n */\n\n }, {\n key: "clamp",\n value: function clamp(value) {\n var min = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var max = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;\n console.warn("AnimationUtils.clamp is being deprecated. Use MathUtils.clamp instead.");\n return core_MathUtils.clamp(value, min, max);\n }\n /**\r\n * Return a deferred promise that can be used to update the value of a numeric\r\n * property of this object over time. Pass delta time in milliseconds to the\r\n * deferred promise\'s execute method in an update loop to animate the property\r\n * towards the target value.\r\n *\r\n * @param {Object} propertyOwner - Object that contains the property to animation.\r\n * @param {string} propertyName - Name of the property to animate.\r\n * @param {number} targetValue - Target value to reach.\r\n * @param {Object=} options - Optional options object\r\n * @param {number} [options.seconds=0] - Number of seconds it will take to reach\r\n * the target value.\r\n * @param {Function} [options.easingFn=Linear.InOut] - Easing function to use for animation.\r\n * @param {Function} [options.onFinish] - Callback to execute once the animation completes.\r\n * The target value is passed as a parameter.\r\n * @param {Function=} options.onProgress - Callback to execute each time the animation\r\n * property is updated during the animation. The property\'s value at the time of\r\n * the update is passed as a parameter.\r\n * @param {Function=} options.onCancel - Callback to execute if the user cancels the\r\n * animation before completion. The animation property\'s value at the time of\r\n * cancel is passed as a parameter.\r\n * @param {Function=} options.onError - Callback to execute if the animation stops\r\n * because an error is encountered. The error message is passed as a parameter.\r\n *\r\n * @returns {Deferred} Resolves with the property\'s value once it reaches the\r\n * target value.\r\n */\n\n }, {\n key: "interpolateProperty",\n value: function interpolateProperty(propertyOwner, propertyName, targetValue) {\n var _ref = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {},\n _ref$seconds = _ref.seconds,\n seconds = _ref$seconds === void 0 ? 0 : _ref$seconds,\n easingFn = _ref.easingFn,\n _onFinish = _ref.onFinish,\n _onProgress = _ref.onProgress,\n _onCancel = _ref.onCancel,\n onError = _ref.onError;\n\n // Make sure property is an object\n if (!(propertyOwner instanceof Object)) {\n var e = new Error("Cannot interpolate property ".concat(propertyName, ". Property owner must be an object."));\n\n if (typeof onError === \'function\') {\n onError(e);\n }\n\n return core_Deferred.reject(e);\n } // Make sure property is numeric\n\n\n if (Number.isNaN(Number(propertyOwner[propertyName]))) {\n var _e = new Error("Cannot interpolate property ".concat(propertyName, ". Property must be numeric."));\n\n if (typeof onError === \'function\') {\n onError(_e);\n }\n\n return core_Deferred.reject(_e);\n } // Make sure the target value is numeric\n\n\n if (Number.isNaN(Number(targetValue))) {\n var _e2 = new Error("Cannot interpolate property ".concat(propertyName, " to value ").concat(targetValue, ". Target value must be numeric."));\n\n if (typeof onError === \'function\') {\n onError(_e2);\n }\n\n return core_Deferred.reject(_e2);\n } // Resolve immediately if the target has already been reached\n\n\n var startValue = propertyOwner[propertyName];\n\n if (startValue === targetValue) {\n if (typeof _onFinish === \'function\') {\n _onFinish(targetValue);\n }\n\n return core_Deferred.resolve(targetValue);\n } // Default to linear interpolation\n\n\n if (typeof easingFn !== \'function\') {\n if (easingFn !== undefined) {\n console.warn("Invalid property interpolation easingFn. Defaulting to linear interpolation.");\n }\n\n easingFn = Linear.InOut;\n }\n\n var interpolator = core_Utils.wait(seconds, {\n onFinish: function onFinish() {\n propertyOwner[propertyName] = targetValue;\n\n if (typeof _onFinish === \'function\') {\n _onFinish(targetValue);\n }\n },\n onCancel: function onCancel() {\n if (typeof _onCancel === \'function\') {\n _onCancel(propertyOwner[propertyName]);\n }\n },\n onProgress: function onProgress(progress) {\n if (propertyOwner[propertyName] !== targetValue) {\n // Calculate the lerp factor\n var easeFactor = easingFn(progress);\n\n if (typeof easeFactor !== \'number\') {\n var _e3 = new Error("Invalid property interpolation easingFn. EasingFn must return a number.");\n\n interpolator.reject(_e3);\n return;\n } // Update the value\n\n\n propertyOwner[propertyName] = core_MathUtils.lerp(startValue, targetValue, easeFactor);\n } // Signal progress\n\n\n if (typeof _onProgress === \'function\') {\n _onProgress(propertyOwner[propertyName]);\n } // Signal completion once time is up\n\n\n if (progress === 1) {\n propertyOwner[propertyName] = targetValue;\n interpolator.resolve(targetValue);\n }\n },\n onError: onError\n });\n return interpolator;\n }\n }]);\n\n return AnimationUtils;\n}();\n\n/* harmony default export */ var animpack_AnimationUtils = (AnimationUtils_AnimationUtils);\n// CONCATENATED MODULE: ./src/core/animpack/state/AbstractState.js\nfunction AbstractState_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction AbstractState_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction AbstractState_createClass(Constructor, protoProps, staticProps) { if (protoProps) AbstractState_defineProperties(Constructor.prototype, protoProps); if (staticProps) AbstractState_defineProperties(Constructor, staticProps); return Constructor; }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n/**\n * Base class for a state in our animation system.\n *\n * @abstract\n */\n\nvar AbstractState_AbstractState = /*#__PURE__*/function () {\n /**\n * @constructor\n *\n * @param {Object=} options - Options for the animation state.\n * @param {string=} options.name - Name for the animation state. Names must be\n * unique for the container the state is applied to and should be validated at\n * the container level. If no name is given it will default to the constructor\n * name.\n * @param {weight} [options.weight=0] - The 0-1 amount of influence the state will have.\n */\n function AbstractState() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n AbstractState_classCallCheck(this, AbstractState);\n\n this.name = options.name !== undefined ? options.name : this.constructor.name;\n this._weight = options.weight !== undefined ? core_MathUtils.clamp(options.weight, 0, 1) : 0;\n this._internalWeight = this._weight;\n this._paused = false;\n this._promises = {\n finish: core_Deferred.resolve(),\n weight: core_Deferred.resolve(),\n play: core_Deferred.resolve()\n };\n this._playCallbacks = {\n onFinish: undefined,\n onError: undefined,\n onCancel: undefined\n };\n }\n /**\n * Gets whether or not the state is currently paused.\n *\n * @type {number}\n */\n\n\n AbstractState_createClass(AbstractState, [{\n key: "paused",\n get: function get() {\n return this._paused;\n }\n /**\n * Gets and sets the user defined weight.\n *\n * @type {number}\n */\n\n }, {\n key: "weight",\n get: function get() {\n return this._weight;\n },\n set: function set(weight) {\n this._weight = core_MathUtils.clamp(weight, 0, 1);\n }\n /**\n * Gets whether or not the weight is currently being animated.\n *\n * @readonly\n * @type {boolean}\n */\n\n }, {\n key: "weightPending",\n get: function get() {\n return this._promises.weight && this._promises.weight.pending;\n }\n /**\n * Updates the user defined weight over time.\n *\n * @param {number} weight - The target weight value.\n * @param {number} [seconds=0] - The amount of time it will take to reach the\n * target weight.\n * @param {Function=} easingFn - The easing function to use for interpolation.\n *\n * @returns {Deferred}\n */\n\n }, {\n key: "setWeight",\n value: function setWeight(weight) {\n var seconds = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var easingFn = arguments.length > 2 ? arguments[2] : undefined;\n\n this._promises.weight.cancel();\n\n weight = core_MathUtils.clamp(weight);\n this._promises.weight = animpack_AnimationUtils.interpolateProperty(this, \'weight\', weight, {\n seconds: seconds,\n easingFn: easingFn\n });\n return this._promises.weight;\n }\n /**\n * Gets the internal weight.\n *\n * @readonly\n * @type {number}\n */\n\n }, {\n key: "internalWeight",\n get: function get() {\n return this._internalWeight;\n }\n /**\n * Multiplies the user weight by a factor to determine the internal weight.\n *\n * @param {number} factor - 0-1 multiplier to apply to the user weight.\n */\n\n }, {\n key: "updateInternalWeight",\n value: function updateInternalWeight(factor) {\n this._internalWeight = this._weight * factor;\n }\n /**\n * Update any values that need to be evaluated every frame.\n *\n * @param {number} deltaTime - Time in milliseconds since the last update.\n */\n\n }, {\n key: "update",\n value: function update(deltaTime) {\n if (!this._paused) {\n Object.values(this._promises).forEach(function (promise) {\n promise.execute(deltaTime);\n });\n }\n }\n /**\n * Start playback of the state from the beginning.\n *\n * @param {Function=} onFinish - Function to execute when the state finishes.\n * @param {Function=} onError - Function to execute if the state encounters\n * an error during playback.\n * @param {Function=} onCancel - Function to execute if playback is canceled.\n *\n * @returns {Deferred}\n */\n\n }, {\n key: "play",\n value: function play(onFinish, onError, onCancel) {\n this._paused = false;\n this._playCallbacks.onFinish = onFinish;\n this._playCallbacks.onError = onError;\n this._playCallbacks.onCancel = onCancel;\n this._promises.play = new core_Deferred(undefined, onFinish, onError, onCancel);\n this._promises.finish = core_Deferred.all([this._promises.play, this._promises.weight]);\n return this._promises.finish;\n }\n /**\n * Pause playback of the state. This prevents pending promises from being executed.\n *\n * @returns {boolean}\n */\n\n }, {\n key: "pause",\n value: function pause() {\n this._paused = true;\n return true;\n }\n /**\n * Resume playback of the state.\n *\n * @param {Function=} onFinish - Function to execute when the state finishes.\n * @param {Function=} onError - Function to execute if the state encounters\n * an error during playback.\n * @param {Function=} onCancel - Function to execute if playback is canceled.\n *\n * @returns {Deferred}\n */\n\n }, {\n key: "resume",\n value: function resume(onFinish, onError, onCancel) {\n this._paused = false;\n\n if (!this._promises.play.pending) {\n this._playCallbacks.onFinish = onFinish || this._playCallbacks.onFinish;\n this._playCallbacks.onError = onError || this._playCallbacks.onError;\n this._playCallbacks.onCancel = onCancel || this._playCallbacks.onCancel;\n this._promises.play = new core_Deferred(undefined, this._playCallbacks.onFinish, this._playCallbacks.onError, this._playCallbacks.onCancel);\n this._promises.finish = core_Deferred.all([this._promises.play, this._promises.weight]);\n }\n\n return this._promises.finish;\n }\n /**\n * Cancel playback of the state and cancel any pending promises.\n *\n * @returns {boolean}\n */\n\n }, {\n key: "cancel",\n value: function cancel() {\n this._paused = true;\n Object.values(this._promises).forEach(function (promise) {\n promise.cancel();\n });\n return true;\n }\n /**\n * Stop playback of the state and resolve any pending promises.\n *\n * @returns {boolean}\n */\n\n }, {\n key: "stop",\n value: function stop() {\n this._paused = true;\n Object.values(this._promises).forEach(function (promise) {\n promise.resolve();\n });\n return true;\n }\n /**\n * Cancel any pending promises and remove reference to them.\n */\n\n }, {\n key: "discard",\n value: function discard() {\n this.cancel();\n delete this._promises;\n }\n /**\n * Force the internal weight to 0. Should be called before switching or transitioning\n * to a new state.\n */\n\n }, {\n key: "deactivate",\n value: function deactivate() {\n this.updateInternalWeight(0);\n }\n }]);\n\n return AbstractState;\n}();\n\n/* harmony default export */ var state_AbstractState = (AbstractState_AbstractState);\n// CONCATENATED MODULE: ./src/core/animpack/state/TransitionState.js\nfunction TransitionState_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { TransitionState_typeof = function _typeof(obj) { return typeof obj; }; } else { TransitionState_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return TransitionState_typeof(obj); }\n\nfunction TransitionState_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction TransitionState_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction TransitionState_createClass(Constructor, protoProps, staticProps) { if (protoProps) TransitionState_defineProperties(Constructor.prototype, protoProps); if (staticProps) TransitionState_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction TransitionState_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { TransitionState_get = Reflect.get; } else { TransitionState_get = function _get(target, property, receiver) { var base = TransitionState_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return TransitionState_get(target, property, receiver || target); }\n\nfunction TransitionState_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = TransitionState_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction TransitionState_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) TransitionState_setPrototypeOf(subClass, superClass); }\n\nfunction TransitionState_setPrototypeOf(o, p) { TransitionState_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return TransitionState_setPrototypeOf(o, p); }\n\nfunction TransitionState_createSuper(Derived) { var hasNativeReflectConstruct = TransitionState_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = TransitionState_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = TransitionState_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return TransitionState_possibleConstructorReturn(this, result); }; }\n\nfunction TransitionState_possibleConstructorReturn(self, call) { if (call && (TransitionState_typeof(call) === "object" || typeof call === "function")) { return call; } return TransitionState_assertThisInitialized(self); }\n\nfunction TransitionState_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction TransitionState_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction TransitionState_getPrototypeOf(o) { TransitionState_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return TransitionState_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n/**\r\n * Class for smooth transitioning between states on an animation layer.\r\n *\r\n * @extends AbstractState\r\n */\n\nvar TransitionState_TransitionState = /*#__PURE__*/function (_AbstractState) {\n TransitionState_inherits(TransitionState, _AbstractState);\n\n var _super = TransitionState_createSuper(TransitionState);\n\n function TransitionState() {\n var _this;\n\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n TransitionState_classCallCheck(this, TransitionState);\n\n _this = _super.call(this, options);\n _this._to = null;\n _this._from = [];\n _this._weightPromise = core_Deferred.resolve();\n return _this;\n }\n\n TransitionState_createClass(TransitionState, [{\n key: "internalWeight",\n get: function get() {\n // Find the combined weight of all sub-states\n var totalWeight = 0;\n\n if (this._to) {\n totalWeight += this._to.weight;\n }\n\n this._from.forEach(function (state) {\n totalWeight += state.weight;\n });\n\n return totalWeight * this._internalWeight;\n }\n }, {\n key: "updateInternalWeight",\n value: function updateInternalWeight(factor) {\n var _this2 = this;\n\n TransitionState_get(TransitionState_getPrototypeOf(TransitionState.prototype), "updateInternalWeight", this).call(this, factor);\n\n this._from.forEach(function (state) {\n state.updateInternalWeight(_this2._internalWeight);\n });\n\n if (this._to) {\n this._to.updateInternalWeight(this._internalWeight);\n }\n }\n /**\r\n * Update sub-states the transition is controlling and start new weight\r\n * animations on each one. This should be called each time the current state of\r\n * an animation layer gets updated to a new value and a transition time greater\r\n * that zero is specified.\r\n *\r\n * @param {Array.} [currentStates=[]] - States whose weight values\r\n * will be animated to 0.\r\n * @param {AbstractState=} targetState - State whose weight will be animated\r\n * to 1.\r\n * @param {number} transitionTime - Amount of time it will in seconds take for\r\n * weight animations to complete.\r\n * @param {Function=} easingFn - Easing function to use for weight animations.\r\n * Default is Easing.Linear.InOut.\r\n * @param {Function=} onComplete - Function to execute once all weight animations\r\n * complete.\r\n */\n\n }, {\n key: "configure",\n value: function configure() {\n var currentStates = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n var targetState = arguments.length > 1 ? arguments[1] : undefined;\n var transitionTime = arguments.length > 2 ? arguments[2] : undefined;\n var easingFn = arguments.length > 3 ? arguments[3] : undefined;\n var onComplete = arguments.length > 4 ? arguments[4] : undefined;\n\n // Deactivate any states that aren\'t in the new configuration\n if (this._to === targetState || currentStates.includes(this._to)) {\n this._to = null;\n }\n\n this._from = this._from.filter(function (state) {\n return state !== targetState && !currentStates.includes(state);\n });\n this.deactivate();\n this._from = currentStates;\n this._to = targetState;\n this.reset(transitionTime, easingFn, onComplete);\n }\n /**\r\n * Start new weight animations state the transition controls. This should be called\r\n * if an animation is played with a transition time greater than zero and a transtion\r\n * to that animation was already in progress.\r\n *\r\n * @param {number} transitionTime - Amount of time it will in seconds take for\r\n * weight animations to complete.\r\n * @param {Function=} easingFn - Easing function to use for weight animations.\r\n * Default is Easing.Linear.InOut.\r\n * @param {Function=} onComplete - Function to execute once all weight animations\r\n * complete.\r\n */\n\n }, {\n key: "reset",\n value: function reset(transitionTime, easingFn, onComplete) {\n var _this3 = this;\n\n // Stop any pending promises\n this._weightPromise.cancel(); // Start tweening weight to 0 for the current states\n\n\n var weightPromises = this._from.map(function (state) {\n return state.setWeight(0, transitionTime, easingFn);\n }); // Start tweening weight to 1 for the target state\n\n\n if (this._to) {\n weightPromises.push(this._to.setWeight(1, transitionTime, easingFn));\n this.name = this._to.name;\n } else {\n this.name = null;\n }\n\n this._weightPromise = core_Deferred.all(weightPromises, function () {\n _this3._from.forEach(function (state) {\n state.cancel();\n state.deactivate();\n });\n\n if (typeof onComplete === \'function\') {\n onComplete();\n }\n });\n }\n }, {\n key: "play",\n value: function play(onFinish, onError, onCancel, onNext) {\n this._paused = false;\n this._playCallbacks.onFinish = onFinish;\n this._playCallbacks.onError = onError;\n this._playCallbacks.onCancel = onCancel;\n var promises = [this._weightPromise];\n\n this._from.forEach(function (state) {\n state.resume();\n });\n\n if (this._to) {\n this._promises.play = this._to.play(undefined, undefined, undefined, onNext);\n promises.push(this._promises.play);\n }\n\n this._promises.finish = core_Deferred.all(promises, onFinish, onError, onCancel);\n return this._promises.finish;\n }\n }, {\n key: "pause",\n value: function pause() {\n this._from.forEach(function (state) {\n state.pause();\n });\n\n if (this._to) {\n this._to.pause();\n }\n\n return TransitionState_get(TransitionState_getPrototypeOf(TransitionState.prototype), "pause", this).call(this);\n }\n }, {\n key: "resume",\n value: function resume(onFinish, onError, onCancel, onNext) {\n this._paused = false;\n\n if (!this._promises.play.pending) {\n this._playCallbacks.onFinish = onFinish || this._playCallbacks.onFinish;\n this._playCallbacks.onError = onError || this._playCallbacks.onError;\n this._playCallbacks.onCancel = onCancel || this._playCallbacks.onCancel;\n }\n\n var promises = [this._weightPromise];\n\n this._from.forEach(function (state) {\n state.resume();\n });\n\n if (this._to) {\n this._promises.play = this._to.resume(undefined, undefined, undefined, onNext);\n promises.push(this._promises.play);\n }\n\n this._promises.finish = core_Deferred.all(promises, this._playCallbacks.onFinish, this._playCallbacks.onError, this._playCallbacks.onCancel);\n return this._promises.finish;\n }\n }, {\n key: "cancel",\n value: function cancel() {\n this._from.forEach(function (state) {\n state.pause();\n });\n\n if (this._to) {\n this._to.cancel();\n }\n\n this._weightPromise.cancel();\n\n return TransitionState_get(TransitionState_getPrototypeOf(TransitionState.prototype), "cancel", this).call(this);\n }\n }, {\n key: "stop",\n value: function stop() {\n this._from.forEach(function (state) {\n state.pause();\n });\n\n if (this._to) {\n this._to.stop();\n }\n\n return TransitionState_get(TransitionState_getPrototypeOf(TransitionState.prototype), "stop", this).call(this);\n }\n }, {\n key: "update",\n value: function update(deltaTime) {\n TransitionState_get(TransitionState_getPrototypeOf(TransitionState.prototype), "update", this).call(this, deltaTime);\n\n this._from.forEach(function (state) {\n state.update(deltaTime);\n });\n\n if (this._to) {\n this._to.update(deltaTime);\n }\n }\n }, {\n key: "discard",\n value: function discard() {\n TransitionState_get(TransitionState_getPrototypeOf(TransitionState.prototype), "discard", this).call(this);\n\n this._weightPromise.cancel();\n\n delete this._weightPromise;\n this._to = null;\n this._from.length = 0;\n }\n }, {\n key: "deactivate",\n value: function deactivate() {\n if (this._to) {\n this._to.deactivate();\n }\n\n this._from.forEach(function (state) {\n state.deactivate();\n });\n }\n }]);\n\n return TransitionState;\n}(state_AbstractState);\n\n/* harmony default export */ var state_TransitionState = (TransitionState_TransitionState);\n// CONCATENATED MODULE: ./src/core/animpack/AnimationPlayerInterface.js\nfunction AnimationPlayerInterface_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { AnimationPlayerInterface_typeof = function _typeof(obj) { return typeof obj; }; } else { AnimationPlayerInterface_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return AnimationPlayerInterface_typeof(obj); }\n\nfunction AnimationPlayerInterface_toConsumableArray(arr) { return AnimationPlayerInterface_arrayWithoutHoles(arr) || AnimationPlayerInterface_iterableToArray(arr) || AnimationPlayerInterface_unsupportedIterableToArray(arr) || AnimationPlayerInterface_nonIterableSpread(); }\n\nfunction AnimationPlayerInterface_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."); }\n\nfunction AnimationPlayerInterface_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return AnimationPlayerInterface_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return AnimationPlayerInterface_arrayLikeToArray(o, minLen); }\n\nfunction AnimationPlayerInterface_iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction AnimationPlayerInterface_arrayWithoutHoles(arr) { if (Array.isArray(arr)) return AnimationPlayerInterface_arrayLikeToArray(arr); }\n\nfunction AnimationPlayerInterface_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction AnimationPlayerInterface_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { AnimationPlayerInterface_get = Reflect.get; } else { AnimationPlayerInterface_get = function _get(target, property, receiver) { var base = AnimationPlayerInterface_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return AnimationPlayerInterface_get(target, property, receiver || target); }\n\nfunction AnimationPlayerInterface_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = AnimationPlayerInterface_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction AnimationPlayerInterface_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) AnimationPlayerInterface_setPrototypeOf(subClass, superClass); }\n\nfunction AnimationPlayerInterface_setPrototypeOf(o, p) { AnimationPlayerInterface_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return AnimationPlayerInterface_setPrototypeOf(o, p); }\n\nfunction AnimationPlayerInterface_createSuper(Derived) { var hasNativeReflectConstruct = AnimationPlayerInterface_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = AnimationPlayerInterface_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = AnimationPlayerInterface_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return AnimationPlayerInterface_possibleConstructorReturn(this, result); }; }\n\nfunction AnimationPlayerInterface_possibleConstructorReturn(self, call) { if (call && (AnimationPlayerInterface_typeof(call) === "object" || typeof call === "function")) { return call; } return AnimationPlayerInterface_assertThisInitialized(self); }\n\nfunction AnimationPlayerInterface_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction AnimationPlayerInterface_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction AnimationPlayerInterface_getPrototypeOf(o) { AnimationPlayerInterface_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return AnimationPlayerInterface_getPrototypeOf(o); }\n\nfunction AnimationPlayerInterface_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction AnimationPlayerInterface_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction AnimationPlayerInterface_createClass(Constructor, protoProps, staticProps) { if (protoProps) AnimationPlayerInterface_defineProperties(Constructor.prototype, protoProps); if (staticProps) AnimationPlayerInterface_defineProperties(Constructor, staticProps); return Constructor; }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/* eslint-disable max-classes-per-file */\n\n/* eslint-disable no-unused-vars */\n\n/* eslint-disable no-empty-function */\n\n/* eslint-disable getter-return */\n\n/* eslint-disable no-useless-constructor */\n\n\n/**\n * Class factory interface for controlling playback of a collection of animations.\n * One animation can be played at any given time, crossfading between animations\n * will result in playing a {@link TransitionState}.\n *\n * @interface\n */\n\nvar AnimationPlayerInterface_AnimationPlayerInterface = /*#__PURE__*/function () {\n function AnimationPlayerInterface() {\n AnimationPlayerInterface_classCallCheck(this, AnimationPlayerInterface);\n }\n\n AnimationPlayerInterface_createClass(AnimationPlayerInterface, [{\n key: "paused",\n get:\n /**\n * Gets whether or not the player is updating states.\n *\n * @readonly\n * @type {boolean}\n */\n function get() {\n return this._paused;\n }\n /**\n * Gets and sets the default number of seconds it takes to transition to a new\n * animation.\n *\n * @type {number}\n */\n\n }, {\n key: "transitionTime",\n get: function get() {},\n set: function set(seconds) {}\n /**\n * Gets and sets the default easing function to use when transitioning and\n * setting weights.\n *\n * @type {Function}\n */\n\n }, {\n key: "easingFn",\n get: function get() {},\n set: function set(fn) {}\n /**\n * Gets the state the layer is currently in control of.\n *\n * @readonly\n * @type {AbstractState}\n */\n\n }, {\n key: "currentState",\n get: function get() {}\n /**\n * Gets the name of the state the layer is currently in control of.\n *\n * @readonly\n * @type {string}\n */\n\n }, {\n key: "currentAnimation",\n get: function get() {}\n /**\n * Gets whether or not the layer is currently transitioning to a new animation.\n *\n * @readonly\n * @type {boolean}\n */\n\n }, {\n key: "isTransitioning",\n get: function get() {}\n /**\n * Update the layer\'s current state to a new value. If transitionTime is defined\n * and greater than zero, perform a smooth blend between any states that currently\n * have non-zero weight values and the new state.\n *\n * @private\n *\n * @param {(string|null)} name - Name of the state to transition to.\n * @param {string} playMethod - Name of the operation being prepared for, to be\n * used in error messaging.\n * @param {number=} transitionTime - Amount of time in seconds it will take to\n * switch to the new state.\n * @param {Function=} easingFn - Easing function to use when transitioning to a\n * new state over time.\n * @param {Function=} onError - Function to execute if an error is encountered.\n */\n\n }, {\n key: "_prepareCurrentState",\n value: function _prepareCurrentState(name, playMethod, transitionTime, easingFn, onError) {}\n /**\n * Start playback an animation from the beginning.\n *\n * @param {string} name - Name of the animation to play.\n * @param {number=} transitionTime - Amount of time it will take before the\n * new state has full influence for the layer.\n * @param {Function=} easingFn - Easing function to use for blending if transitionTime\n * is greater than zero.\n * @param {Function=} onFinish - Function to execute when the animation finishes.\n * @param {Function=} onError - Function to execute if the animation encounters\n * an error during playback.\n * @param {Function=} onCancel - Function to execute if playback is canceled.\n * @param {Function=} onNext - Function to execute if an animation queue is\n * played and it advances to the next animation.\n *\n * @returns {Deferred}\n */\n\n }, {\n key: "playAnimation",\n value: function playAnimation(name, transitionTime, easingFn, onFinish, onError, onCancel, onNext) {}\n /**\n * Cancel playback of the current animation.\n *\n * @returns {boolean}\n */\n\n }, {\n key: "cancelAnimation",\n value: function cancelAnimation() {}\n /**\n * Pause playback of the current animation.\n *\n * @returns {boolean}\n */\n\n }, {\n key: "pauseAnimation",\n value: function pauseAnimation() {}\n /**\n * Resume playback of an animation.\n *\n * @param {string=} name - Name of the animation to resume playback for. Default\n * is the layer\'s current animation name.\n * @param {number=} transitionTime - Amount of time it will take before the\n * new state has full influence for the layer.\n * @param {Function=} onFinish - Function to execute when the state finishes.\n * @param {Function=} onError - Function to execute if the state encounters\n * an error during playback.\n * @param {Function=} onCancel - Function to execute if playback is canceled.\n * @param {Function=} onNext - Function to execute if an animation queue is\n * played and it advances to the next animation.\n *\n * @returns {Deferred}\n */\n\n }, {\n key: "resumeAnimation",\n value: function resumeAnimation(name, transitionTime, easingFn, onFinish, onError, onCancel, onNext) {}\n /**\n * Stop playback of the current animation.\n *\n * @returns {boolean}\n */\n\n }, {\n key: "stopAnimation",\n value: function stopAnimation() {}\n /**\n * Update the current animation.\n *\n * @param {number} deltaTime - Time in milliseconds since the last update.\n */\n\n }, {\n key: "update",\n value: function update(deltaTime) {}\n /**\n * Discard the transition state.\n */\n\n }, {\n key: "discard",\n value: function discard() {}\n /**\n * Creates a class that implements {@link AnimationPlayerInterface} and extends\n * a specified base class.\n *\n * @param {Class} [BaseClass = class{}] - The class to extend.\n *\n * @return {Class} A class that extends `BaseClass` and implements {@link AnimationPlayerInterface}.\n */\n\n }], [{\n key: "Mixin",\n value: function Mixin() {\n var BaseClass = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : /*#__PURE__*/function () {\n function _class() {\n AnimationPlayerInterface_classCallCheck(this, _class);\n }\n\n return _class;\n }();\n\n var AnimationPlayerMixin = /*#__PURE__*/function (_BaseClass) {\n AnimationPlayerInterface_inherits(AnimationPlayerMixin, _BaseClass);\n\n var _super = AnimationPlayerInterface_createSuper(AnimationPlayerMixin);\n\n function AnimationPlayerMixin() {\n var _this;\n\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n AnimationPlayerInterface_classCallCheck(this, AnimationPlayerMixin);\n\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\n _this = _super.call.apply(_super, [this, options].concat(args));\n _this._transitionState = new state_TransitionState();\n _this._states = _this._states !== undefined ? _this._states : new Map();\n _this._currentState = null;\n _this._paused = false;\n _this._transitionTime = Number(options.transitionTime) >= 0 ? Number(options.transitionTime) : 0;\n _this._easingFn = typeof options.easingFn === \'function\' ? options.easingFn : undefined;\n return _this;\n }\n\n AnimationPlayerInterface_createClass(AnimationPlayerMixin, [{\n key: "paused",\n get: function get() {\n return this._paused;\n }\n }, {\n key: "transitionTime",\n get: function get() {\n return this._transitionTime;\n },\n set: function set(seconds) {\n seconds = Number(seconds);\n\n if (!(seconds >= 0)) {\n throw new Error("Cannot set transition time for ".concat(this.constructor.name, " to ").concat(seconds, ". Seconds must be a numeric value greather than or equal to zero."));\n }\n\n this._transitionTime = seconds;\n }\n }, {\n key: "easingFn",\n get: function get() {\n return this._easingFn;\n },\n set: function set(fn) {\n this._easingFn = fn;\n }\n }, {\n key: "currentState",\n get: function get() {\n return this._currentState;\n }\n }, {\n key: "currentAnimation",\n get: function get() {\n if (this._currentState) {\n return this._currentState.name;\n }\n\n return null;\n }\n }, {\n key: "isTransitioning",\n get: function get() {\n return this._currentState === this._transitionState;\n }\n }, {\n key: "_prepareCurrentState",\n value: function _prepareCurrentState(name, playMethod, transitionTime, easingFn, onError) {\n var _this2 = this;\n\n if (name !== null && !this._states.has(name)) {\n var e = new Error("Cannot ".concat(playMethod, " animation ").concat(name, ". No animation exists with this name."));\n\n if (typeof onError === \'function\') {\n onError(e);\n }\n\n throw e;\n }\n\n var targetState = name !== null ? this._states.get(name) : null; // Make sure the new state isn\'t already playing\n\n if (this.currentAnimation !== name) {\n // Switch to the new state immediately\n if (transitionTime <= 0) {\n // Cancel the current state and set its weight to 0\n if (this._currentState) {\n this._currentState.cancel();\n\n this._currentState.weight = 0;\n\n this._currentState.deactivate();\n }\n\n this._currentState = targetState;\n } // Blend to the new state over time\n else {\n // Make sure to transition out of any states with non-zero weight\n var currentStates = AnimationPlayerInterface_toConsumableArray(this._states.values()).filter(function (s) {\n return s !== targetState && (s.weight || s.weightPending);\n }); // Update the transition state with new inputs\n\n\n this._transitionState.configure(currentStates, targetState, transitionTime, easingFn, function () {\n _this2._currentState = targetState;\n _this2._transitionState.weight = 0;\n });\n\n this._currentState = this._transitionState;\n }\n } else if (playMethod === \'play\') {\n this._currentState.cancel();\n\n if (this._currentState === this._transitionState) {\n this._transitionState.reset(transitionTime, easingFn, function () {\n _this2._currentState = targetState;\n _this2._transitionState.weight = 0;\n });\n }\n } // Update weight for the new current state so it has full influence for the player\n\n\n this._currentState.weight = 1;\n\n this._currentState.updateInternalWeight(this._internalWeight);\n }\n }, {\n key: "playAnimation",\n value: function playAnimation(name, transitionTime, easingFn, onFinish, onError, onCancel, onNext) {\n var error;\n var reject = false;\n\n try {\n this._prepareCurrentState(name, \'play\', transitionTime !== undefined ? transitionTime : this._transitionTime, easingFn !== undefined ? easingFn : this._easingFn, onError);\n } catch (e) {\n error = e;\n reject = true;\n }\n\n if (reject) {\n return core_Deferred.reject(error);\n }\n\n return this._currentState.play(onFinish, onError, onCancel, onNext);\n }\n }, {\n key: "pauseAnimation",\n value: function pauseAnimation() {\n if (this._currentState) {\n return this._currentState.pause();\n } else {\n return false;\n }\n }\n }, {\n key: "resumeAnimation",\n value: function resumeAnimation(name, transitionTime, easingFn, onFinish, onError, onCancel, onNext) {\n if (name === undefined && this._currentState) {\n name = this._currentState.name;\n }\n\n var error;\n var reject = false;\n\n try {\n this._prepareCurrentState(name, \'resume\', transitionTime !== undefined ? transitionTime : this._transitionTime, easingFn !== undefined ? easingFn : this._easingFn, onError);\n } catch (e) {\n error = e;\n reject = true;\n }\n\n if (reject) {\n return core_Deferred.reject(error);\n }\n\n return this._currentState.resume(onFinish, onError, onCancel, onNext);\n }\n }, {\n key: "cancelAnimation",\n value: function cancelAnimation() {\n if (this._currentState) {\n return this._currentState.cancel();\n } else {\n return false;\n }\n }\n }, {\n key: "stopAnimation",\n value: function stopAnimation() {\n if (this._currentState) {\n return this._currentState.stop();\n } else {\n return false;\n }\n }\n }, {\n key: "update",\n value: function update(deltaTime) {\n if (AnimationPlayerInterface_get(AnimationPlayerInterface_getPrototypeOf(AnimationPlayerMixin.prototype), "update", this)) {\n AnimationPlayerInterface_get(AnimationPlayerInterface_getPrototypeOf(AnimationPlayerMixin.prototype), "update", this).call(this, deltaTime);\n }\n\n if (this._currentState) {\n this._currentState.update(deltaTime);\n }\n }\n }, {\n key: "discard",\n value: function discard() {\n if (AnimationPlayerInterface_get(AnimationPlayerInterface_getPrototypeOf(AnimationPlayerMixin.prototype), "discard", this)) {\n AnimationPlayerInterface_get(AnimationPlayerInterface_getPrototypeOf(AnimationPlayerMixin.prototype), "discard", this).call(this);\n }\n\n this._transitionState.discard();\n\n delete this._transitionState;\n }\n }]);\n\n return AnimationPlayerMixin;\n }(BaseClass);\n\n return AnimationPlayerMixin;\n }\n }]);\n\n return AnimationPlayerInterface;\n}();\n\n/* harmony default export */ var animpack_AnimationPlayerInterface = (AnimationPlayerInterface_AnimationPlayerInterface);\n// CONCATENATED MODULE: ./src/core/animpack/state/StateContainerInterface.js\nfunction StateContainerInterface_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { StateContainerInterface_typeof = function _typeof(obj) { return typeof obj; }; } else { StateContainerInterface_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return StateContainerInterface_typeof(obj); }\n\nfunction StateContainerInterface_toConsumableArray(arr) { return StateContainerInterface_arrayWithoutHoles(arr) || StateContainerInterface_iterableToArray(arr) || StateContainerInterface_unsupportedIterableToArray(arr) || StateContainerInterface_nonIterableSpread(); }\n\nfunction StateContainerInterface_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."); }\n\nfunction StateContainerInterface_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return StateContainerInterface_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return StateContainerInterface_arrayLikeToArray(o, minLen); }\n\nfunction StateContainerInterface_iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction StateContainerInterface_arrayWithoutHoles(arr) { if (Array.isArray(arr)) return StateContainerInterface_arrayLikeToArray(arr); }\n\nfunction StateContainerInterface_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction StateContainerInterface_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) StateContainerInterface_setPrototypeOf(subClass, superClass); }\n\nfunction StateContainerInterface_setPrototypeOf(o, p) { StateContainerInterface_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return StateContainerInterface_setPrototypeOf(o, p); }\n\nfunction StateContainerInterface_createSuper(Derived) { var hasNativeReflectConstruct = StateContainerInterface_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = StateContainerInterface_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = StateContainerInterface_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return StateContainerInterface_possibleConstructorReturn(this, result); }; }\n\nfunction StateContainerInterface_possibleConstructorReturn(self, call) { if (call && (StateContainerInterface_typeof(call) === "object" || typeof call === "function")) { return call; } return StateContainerInterface_assertThisInitialized(self); }\n\nfunction StateContainerInterface_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction StateContainerInterface_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction StateContainerInterface_getPrototypeOf(o) { StateContainerInterface_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return StateContainerInterface_getPrototypeOf(o); }\n\nfunction StateContainerInterface_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction StateContainerInterface_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction StateContainerInterface_createClass(Constructor, protoProps, staticProps) { if (protoProps) StateContainerInterface_defineProperties(Constructor.prototype, protoProps); if (staticProps) StateContainerInterface_defineProperties(Constructor, staticProps); return Constructor; }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/* eslint-disable max-classes-per-file */\n\n/* eslint-disable no-unused-vars */\n\n/* eslint-disable no-empty-function */\n\n/* eslint-disable getter-return */\n\n/**\n * Class factory interface for manipulating a collection of {@link AbstractState}.\n *\n * @interface\n */\n\nvar StateContainerInterface_StateContainerInterface = /*#__PURE__*/function () {\n function StateContainerInterface() {\n StateContainerInterface_classCallCheck(this, StateContainerInterface);\n }\n\n StateContainerInterface_createClass(StateContainerInterface, [{\n key: "getState",\n value:\n /**\n * Return the state with the given name.\n *\n * @param {string} name - Name of the state.\n *\n * @returns {AbstractState}\n */\n function getState(name) {}\n /**\n * Gets an array of the names of all states in the container.\n *\n * @type {Array.}\n */\n\n }, {\n key: "getStateNames",\n value: function getStateNames() {}\n /**\n * Add a new state to be controlled by the container. States are stored keyed\n * by their name property, which must be unique. If it isn\'t, a number will\n * be added or incremented until a unique key is generated.\n *\n * @param {AbstractState} state - State to add to the container.\n *\n * @returns {string} - Unique name of the state.\n */\n\n }, {\n key: "addState",\n value: function addState(state) {}\n /**\n * Removes a state with the given name from the container.\n *\n * @param {string} name - Name of the state to remove.\n *\n * @returns {boolean} - Whether or not a state was removed.\n */\n\n }, {\n key: "removeState",\n value: function removeState(name) {}\n /**\n * Renames a state with the given name in the container. Name must be unique\n * to the container, if it isn\'t the name will be incremented until it is unique.\n *\n * @param {string} currentName - Name of the state to rename.\n * @param {string} newName - Name to update the state with.\n *\n * @returns {string} - Updated name for the state.\n */\n\n }, {\n key: "renameState",\n value: function renameState(currentName, newName) {}\n /**\n * Discards all states.\n */\n\n }, {\n key: "discardStates",\n value: function discardStates() {}\n /**\n * Creates a class that implements {@link StateContainerInterface} and extends\n * a specified base class.\n *\n * @param {Class} [BaseClass = class{}] - The class to extend.\n *\n * @return {Class} A class that extends `BaseClass` and implements {@link StateContainerInterface}.\n */\n\n }], [{\n key: "Mixin",\n value: function Mixin() {\n var BaseClass = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : /*#__PURE__*/function () {\n function _class() {\n StateContainerInterface_classCallCheck(this, _class);\n }\n\n return _class;\n }();\n\n /**\n * This mixin adds functionality for manipulating uniquely-named animation states in\n * a map.\n */\n var StateContainerMixin = /*#__PURE__*/function (_BaseClass) {\n StateContainerInterface_inherits(StateContainerMixin, _BaseClass);\n\n var _super = StateContainerInterface_createSuper(StateContainerMixin);\n\n function StateContainerMixin() {\n var _this;\n\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n StateContainerInterface_classCallCheck(this, StateContainerMixin);\n\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\n _this = _super.call.apply(_super, [this, options].concat(args));\n _this._states = _this._states !== undefined ? _this._states : new Map();\n return _this;\n }\n\n StateContainerInterface_createClass(StateContainerMixin, [{\n key: "getState",\n value: function getState(name) {\n return this._states.get(name);\n }\n }, {\n key: "getStateNames",\n value: function getStateNames() {\n return StateContainerInterface_toConsumableArray(this._states.keys());\n }\n }, {\n key: "addState",\n value: function addState(state) {\n // Make sure the state is not already in this container\n if (StateContainerInterface_toConsumableArray(this._states.values()).includes(state)) {\n console.warn("Cannot add animation to state ".concat(this.name, ". Animation was already added."));\n return state.name;\n } // Make sure the state name is unique\n\n\n var uniqueName = core_Utils.getUniqueName(state.name, StateContainerInterface_toConsumableArray(this._states.keys()));\n\n if (state.name !== uniqueName) {\n console.warn("Animation name ".concat(state.name, " is not unique for state ").concat(this.name, ". New animation will be added with name ").concat(uniqueName, "."));\n state.name = uniqueName;\n }\n\n this._states.set(state.name, state);\n\n return state.name;\n }\n }, {\n key: "removeState",\n value: function removeState(name) {\n // Check if the state is in this container\n if (!this._states || !this._states.has(name)) {\n console.warn("Did not remove animation ".concat(name, " from state ").concat(this.name, ". No animation exists with this name."));\n return false;\n }\n\n this._states.get(name).discard();\n\n this._states["delete"](name);\n\n return true;\n }\n }, {\n key: "renameState",\n value: function renameState(currentName, newName) {\n // Make sure the state is in this container\n if (!this._states || !this._states.has(currentName)) {\n throw new Error("Cannot rename animation ".concat(currentName, " in ").concat(this.name, ". No animation exists with this name."));\n }\n\n var state = this._states.get(currentName); // Exit if the names are the same\n\n\n if (currentName === newName) {\n return currentName;\n } // Make sure the name is unique\n\n\n var uniqueName = core_Utils.getUniqueName(newName, StateContainerInterface_toConsumableArray(this._states.keys()).filter(function (s) {\n return s.name !== currentName;\n }));\n\n if (newName !== uniqueName) {\n console.warn("Animation name ".concat(newName, " is not unique in state ").concat(this.name, ". Animation will be renamed to ").concat(uniqueName, "."));\n newName = uniqueName;\n }\n\n state.name = newName;\n\n this._states["delete"](currentName);\n\n this._states.set(state.name, state);\n\n return state.name;\n }\n }, {\n key: "discardStates",\n value: function discardStates() {\n this._states.forEach(function (state) {\n state.discard();\n });\n\n delete this._states;\n }\n }]);\n\n return StateContainerMixin;\n }(BaseClass);\n\n return StateContainerMixin;\n }\n }]);\n\n return StateContainerInterface;\n}();\n\n/* harmony default export */ var state_StateContainerInterface = (StateContainerInterface_StateContainerInterface);\n// CONCATENATED MODULE: ./src/core/animpack/state/QueueState.js\nfunction QueueState_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { QueueState_typeof = function _typeof(obj) { return typeof obj; }; } else { QueueState_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return QueueState_typeof(obj); }\n\nfunction QueueState_toConsumableArray(arr) { return QueueState_arrayWithoutHoles(arr) || QueueState_iterableToArray(arr) || QueueState_unsupportedIterableToArray(arr) || QueueState_nonIterableSpread(); }\n\nfunction QueueState_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."); }\n\nfunction QueueState_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return QueueState_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return QueueState_arrayLikeToArray(o, minLen); }\n\nfunction QueueState_iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction QueueState_arrayWithoutHoles(arr) { if (Array.isArray(arr)) return QueueState_arrayLikeToArray(arr); }\n\nfunction QueueState_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction QueueState_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction QueueState_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction QueueState_createClass(Constructor, protoProps, staticProps) { if (protoProps) QueueState_defineProperties(Constructor.prototype, protoProps); if (staticProps) QueueState_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction QueueState_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { QueueState_get = Reflect.get; } else { QueueState_get = function _get(target, property, receiver) { var base = QueueState_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return QueueState_get(target, property, receiver || target); }\n\nfunction QueueState_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = QueueState_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction QueueState_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) QueueState_setPrototypeOf(subClass, superClass); }\n\nfunction QueueState_setPrototypeOf(o, p) { QueueState_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return QueueState_setPrototypeOf(o, p); }\n\nfunction QueueState_createSuper(Derived) { var hasNativeReflectConstruct = QueueState_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = QueueState_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = QueueState_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return QueueState_possibleConstructorReturn(this, result); }; }\n\nfunction QueueState_possibleConstructorReturn(self, call) { if (call && (QueueState_typeof(call) === "object" || typeof call === "function")) { return call; } return QueueState_assertThisInitialized(self); }\n\nfunction QueueState_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction QueueState_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction QueueState_getPrototypeOf(o) { QueueState_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return QueueState_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n/**\n * Class for playing an ordered array of animation states in sequence.\n *\n * @extends AbstractState\n * @implements @AnimationPlayerInterface\n */\n\nvar QueueState = /*#__PURE__*/function (_AnimationPlayerInter) {\n QueueState_inherits(QueueState, _AnimationPlayerInter);\n\n var _super = QueueState_createSuper(QueueState);\n\n /**\n * @constructor\n *\n * @param {Object} [options={}] - Options for the state.\n * @param {boolean} [options.autoAdvance=true] - Whether to autmatically advance\n * to the next state in the queue as each state completes.\n * @param {Array.} [queueStates=[]] - Array of states to be played\n * in order.\n */\n function QueueState() {\n var _this;\n\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var queueStates = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n\n QueueState_classCallCheck(this, QueueState);\n\n _this = _super.call(this, options);\n queueStates.forEach(function (state) {\n _this.addState(state);\n });\n _this._queue = _this._states.keys();\n _this._done = true;\n return _this;\n }\n /**\n * Gets whether the animation queue has reached the end.\n */\n\n\n QueueState_createClass(QueueState, [{\n key: "done",\n get: function get() {\n return this._done;\n }\n /**\n * Gets the internal weight.\n *\n * @readonly\n * @type {number}\n */\n\n }, {\n key: "internalWeight",\n get: function get() {\n return this._currentState ? this._currentState.internalWeight * this._internalWeight : 0;\n }\n /**\n * Restart the queue iterator.\n *\n * @private\n */\n\n }, {\n key: "_reset",\n value: function _reset() {\n this._queue = this._states.keys();\n\n var _this$_queue$next = this._queue.next(),\n value = _this$_queue$next.value,\n done = _this$_queue$next.done;\n\n this._done = done;\n return value || null;\n }\n /**\n * Multiplies the user weight by a factor to determine the internal weight.\n *\n * @param {number} factor - 0-1 multiplier to apply to the user weight.\n */\n\n }, {\n key: "updateInternalWeight",\n value: function updateInternalWeight(factor) {\n QueueState_get(QueueState_getPrototypeOf(QueueState.prototype), "updateInternalWeight", this).call(this, factor);\n\n if (this._currentState) {\n this._currentState.updateInternalWeight(this._internalWeight);\n }\n }\n /**\n * Start the next animation in the queue.\n *\n * @param {Function=} onNext - Function to execute each time an animation completes\n * and the queue moves to the next animation.\n * @param {boolean} [wrap=false] - Whether or not to start the queue from the\n * beginning again if the end has been reached.\n *\n * @returns {Deferred}\n */\n\n }, {\n key: "next",\n value: function next(onNext) {\n var _this2 = this;\n\n var wrap = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n // Move the queue forward\n var _this$_queue$next2 = this._queue.next(),\n name = _this$_queue$next2.value,\n done = _this$_queue$next2.done;\n\n this._done = done;\n this._paused = false; // The queue has reached the end\n\n if (done) {\n // Start the queue over\n if (wrap) {\n return this.play(this._playCallbacks.onFinish, this._playCallbacks.onError, this._playCallbacks.onCancel, onNext);\n } // Stop the queue\n else {\n this._promises.finish.resolve();\n\n return this._promises.finish;\n }\n } // Signal the next animation is starting\n\n\n if (typeof onNext === \'function\') {\n var lastName = QueueState_toConsumableArray(this._states.keys())[this._states.size - 1];\n\n var isQueueEnd = name === lastName;\n onNext({\n name: name,\n canAdvance: this.getState(name).loopCount !== Infinity && !isQueueEnd,\n isQueueEnd: isQueueEnd\n });\n } // Start the next animation\n\n\n this.playAnimation(name, this._transitionTime, this._easingFn, function () {\n if (!_this2._paused && !_this2.isTransitioning) {\n _this2.next(onNext);\n }\n }, this._playCallbacks.onError);\n return this._promises.finish;\n }\n }, {\n key: "play",\n value: function play(onFinish, onError, onCancel, onNext) {\n var _this3 = this;\n\n var name = this._reset();\n\n QueueState_get(QueueState_getPrototypeOf(QueueState.prototype), "play", this).call(this, onFinish, onError, onCancel);\n\n if (this._done) {\n this._promises.finish.resolve();\n } else {\n // Signal the next animation is starting\n if (name !== this.currentAnimation && typeof onNext === \'function\') {\n var lastName = QueueState_toConsumableArray(this._states.keys())[this._states.size - 1];\n\n var isQueueEnd = name === lastName;\n onNext({\n name: name,\n canAdvance: name ? this.getState(name).loopCount !== Infinity && !isQueueEnd : true,\n isQueueEnd: !name || isQueueEnd\n });\n } // Start the next animation\n\n\n this.playAnimation(name, this._currentState ? this._transitionTime : 0, this._easingFn, function () {\n if (!_this3._paused && !_this3.isTransitioning) {\n _this3.next(onNext);\n }\n }, onError);\n }\n\n return this._promises.finish;\n }\n }, {\n key: "pause",\n value: function pause() {\n var paused = QueueState_get(QueueState_getPrototypeOf(QueueState.prototype), "pause", this).call(this);\n\n this.pauseAnimation();\n return paused;\n }\n }, {\n key: "resume",\n value: function resume(onFinish, onError, onCancel, onNext) {\n var _this4 = this;\n\n if (this._done) {\n return this.play(onFinish, onError, onCancel, onNext);\n } else {\n QueueState_get(QueueState_getPrototypeOf(QueueState.prototype), "resume", this).call(this, onFinish, onError, onCancel);\n\n this.resumeAnimation(this._currentState.name, this._transitionTime, this._easingFn, function () {\n if (!_this4._paused && !_this4.isTransitioning) {\n _this4.next(onNext);\n }\n }, onError);\n return this._promises.finish;\n }\n }\n }, {\n key: "cancel",\n value: function cancel() {\n var canceled = QueueState_get(QueueState_getPrototypeOf(QueueState.prototype), "cancel", this).call(this);\n\n if (this._currentState) {\n this._currentState.cancel();\n }\n\n return canceled;\n }\n }, {\n key: "stop",\n value: function stop() {\n var stopped = QueueState_get(QueueState_getPrototypeOf(QueueState.prototype), "stop", this).call(this);\n\n this.stopAnimation();\n this._done = true;\n return stopped;\n }\n }, {\n key: "discard",\n value: function discard() {\n QueueState_get(QueueState_getPrototypeOf(QueueState.prototype), "discard", this).call(this);\n\n this.discardStates();\n }\n }]);\n\n return QueueState;\n}(animpack_AnimationPlayerInterface.Mixin(state_StateContainerInterface.Mixin(state_AbstractState)));\n\n/* harmony default export */ var state_QueueState = (QueueState);\n// CONCATENATED MODULE: ./src/core/animpack/state/AbstractBlendState.js\nfunction AbstractBlendState_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { AbstractBlendState_typeof = function _typeof(obj) { return typeof obj; }; } else { AbstractBlendState_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return AbstractBlendState_typeof(obj); }\n\nfunction AbstractBlendState_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction AbstractBlendState_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction AbstractBlendState_createClass(Constructor, protoProps, staticProps) { if (protoProps) AbstractBlendState_defineProperties(Constructor.prototype, protoProps); if (staticProps) AbstractBlendState_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction AbstractBlendState_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { AbstractBlendState_get = Reflect.get; } else { AbstractBlendState_get = function _get(target, property, receiver) { var base = AbstractBlendState_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return AbstractBlendState_get(target, property, receiver || target); }\n\nfunction AbstractBlendState_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = AbstractBlendState_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction AbstractBlendState_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) AbstractBlendState_setPrototypeOf(subClass, superClass); }\n\nfunction AbstractBlendState_setPrototypeOf(o, p) { AbstractBlendState_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return AbstractBlendState_setPrototypeOf(o, p); }\n\nfunction AbstractBlendState_createSuper(Derived) { var hasNativeReflectConstruct = AbstractBlendState_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = AbstractBlendState_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = AbstractBlendState_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return AbstractBlendState_possibleConstructorReturn(this, result); }; }\n\nfunction AbstractBlendState_possibleConstructorReturn(self, call) { if (call && (AbstractBlendState_typeof(call) === "object" || typeof call === "function")) { return call; } return AbstractBlendState_assertThisInitialized(self); }\n\nfunction AbstractBlendState_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction AbstractBlendState_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction AbstractBlendState_getPrototypeOf(o) { AbstractBlendState_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return AbstractBlendState_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n\n/**\n * Base class for a state that blends a collection of {@link AbstractState}.\n *\n * @abstract\n * @implements StateContainerInterface\n */\n\nvar AbstractBlendState_AbstractBlendState = /*#__PURE__*/function (_StateContainerInterf) {\n AbstractBlendState_inherits(AbstractBlendState, _StateContainerInterf);\n\n var _super = AbstractBlendState_createSuper(AbstractBlendState);\n\n function AbstractBlendState() {\n var _this;\n\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var blendStates = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n\n AbstractBlendState_classCallCheck(this, AbstractBlendState);\n\n for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n args[_key - 2] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this, options].concat(args));\n blendStates.forEach(function (state) {\n _this.addState(state);\n });\n return _this;\n }\n /**\n * Gets the sum of internal weights of the sub-states.\n *\n * @readonly\n * @type {number}\n */\n\n\n AbstractBlendState_createClass(AbstractBlendState, [{\n key: "internalWeight",\n get: function get() {\n var blendWeights = 0;\n\n this._states.forEach(function (state) {\n blendWeights += state.internalWeight;\n });\n\n return blendWeights;\n }\n /**\n * Returns the weight of a state controlled by the container.\n *\n * @param {string} name - Name of the state to return the weight from.\n *\n * @returns {number} - Weight of the state.\n */\n\n }, {\n key: "getBlendWeight",\n value: function getBlendWeight(name) {\n // Make sure the name is valid\n var state = this.getState(name);\n\n if (state === undefined) {\n throw new Error("Cannot get weight of state ".concat(name, " from BlendState ").concat(this.name, ". No state exists with this name."));\n }\n\n return state.weight;\n }\n /**\n * Sets the weight of a state controlled by the container.\n *\n * @param {string} name - Name of the state to set the weight of.\n * @param {number} weight - Weight value to set on the state.\n *\n * @returns {Deferred}\n */\n\n }, {\n key: "setBlendWeight",\n value: function setBlendWeight(name, weight) {\n var seconds = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n var easingFn = arguments.length > 3 ? arguments[3] : undefined;\n // Make sure the name is valid\n var state = this.getState(name);\n\n if (state === undefined) {\n throw new Error("Cannot set weight of state ".concat(name, " from BlendState ").concat(this.name, ". No state exists with this name."));\n }\n\n weight = core_MathUtils.clamp(weight);\n return state.setWeight(weight, seconds, easingFn);\n }\n /**\n * Multiplies the weight of each sub-state by a factor to determine the internal weight.\n *\n * @param {number} factor - 0-1 multiplier to apply to the user weight.\n */\n\n }, {\n key: "updateInternalWeight",\n value: function updateInternalWeight(factor) {\n var _this2 = this;\n\n AbstractBlendState_get(AbstractBlendState_getPrototypeOf(AbstractBlendState.prototype), "updateInternalWeight", this).call(this, factor);\n\n this._states.forEach(function (state) {\n state.updateInternalWeight(_this2._internalWeight);\n });\n }\n /**\n * Update any values of the sub-states that need to be evaluated every frame.\n *\n * @param {number} deltaTime - Time in milliseconds since the last update.\n */\n\n }, {\n key: "update",\n value: function update(deltaTime) {\n AbstractBlendState_get(AbstractBlendState_getPrototypeOf(AbstractBlendState.prototype), "update", this).call(this, deltaTime);\n\n this._states.forEach(function (state) {\n state.update(deltaTime);\n });\n }\n /**\n * Start playback of the sub-states from the beginning.\n *\n * @param {Function=} onFinish - Function to execute when the state finishes.\n * @param {Function=} onError - Function to execute if the state encounters\n * an error during playback.\n * @param {Function=} onCancel - Function to execute if playback is canceled.\n *\n * @returns {Deferred}\n */\n\n }, {\n key: "play",\n value: function play(onFinish, onError, onCancel) {\n var promises = [AbstractBlendState_get(AbstractBlendState_getPrototypeOf(AbstractBlendState.prototype), "play", this).call(this)];\n\n this._states.forEach(function (state) {\n promises.push(state.play());\n });\n\n return core_Deferred.all(promises, onFinish, onError, onCancel);\n }\n /**\n * Pause playback of the sub-states. This prevents pending promises from being executed.\n *\n * @returns {boolean}\n */\n\n }, {\n key: "pause",\n value: function pause() {\n this._states.forEach(function (state) {\n state.pause();\n });\n\n return AbstractBlendState_get(AbstractBlendState_getPrototypeOf(AbstractBlendState.prototype), "pause", this).call(this);\n }\n /**\n * Resume playback of the sub-states.\n *\n * @param {Function=} onFinish - Function to execute when the state finishes.\n * @param {Function=} onError - Function to execute if the state encounters\n * an error during playback.\n * @param {Function=} onCancel - Function to execute if playback is canceled.\n *\n * @returns {Deferred}\n */\n\n }, {\n key: "resume",\n value: function resume(onFinish, onError, onCancel) {\n var promises = [AbstractBlendState_get(AbstractBlendState_getPrototypeOf(AbstractBlendState.prototype), "resume", this).call(this)];\n\n this._states.forEach(function (state) {\n promises.push(state.resume());\n });\n\n return core_Deferred.all(promises, onFinish, onError, onCancel);\n }\n /**\n * Cancel playback of the sub-states and cancel any pending promises.\n *\n * @returns {boolean}\n */\n\n }, {\n key: "cancel",\n value: function cancel() {\n this._states.forEach(function (state) {\n state.cancel();\n });\n\n return AbstractBlendState_get(AbstractBlendState_getPrototypeOf(AbstractBlendState.prototype), "cancel", this).call(this);\n }\n /**\n * Stop playback of the sub-states and resolve any pending promises.\n *\n * @returns {boolean}\n */\n\n }, {\n key: "stop",\n value: function stop() {\n this._states.forEach(function (state) {\n state.stop();\n });\n\n return AbstractBlendState_get(AbstractBlendState_getPrototypeOf(AbstractBlendState.prototype), "stop", this).call(this);\n }\n /**\n * Discards all sub-state resources.\n *\n * @returns {boolean}\n */\n\n }, {\n key: "discard",\n value: function discard() {\n AbstractBlendState_get(AbstractBlendState_getPrototypeOf(AbstractBlendState.prototype), "discard", this).call(this);\n\n this.discardStates();\n }\n }]);\n\n return AbstractBlendState;\n}(state_StateContainerInterface.Mixin(state_AbstractState));\n\n/* harmony default export */ var state_AbstractBlendState = (AbstractBlendState_AbstractBlendState);\n// CONCATENATED MODULE: ./src/core/animpack/state/FreeBlendState.js\nfunction FreeBlendState_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { FreeBlendState_typeof = function _typeof(obj) { return typeof obj; }; } else { FreeBlendState_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return FreeBlendState_typeof(obj); }\n\nfunction FreeBlendState_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction FreeBlendState_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction FreeBlendState_createClass(Constructor, protoProps, staticProps) { if (protoProps) FreeBlendState_defineProperties(Constructor.prototype, protoProps); if (staticProps) FreeBlendState_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction FreeBlendState_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { FreeBlendState_get = Reflect.get; } else { FreeBlendState_get = function _get(target, property, receiver) { var base = FreeBlendState_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return FreeBlendState_get(target, property, receiver || target); }\n\nfunction FreeBlendState_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = FreeBlendState_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction FreeBlendState_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) FreeBlendState_setPrototypeOf(subClass, superClass); }\n\nfunction FreeBlendState_setPrototypeOf(o, p) { FreeBlendState_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return FreeBlendState_setPrototypeOf(o, p); }\n\nfunction FreeBlendState_createSuper(Derived) { var hasNativeReflectConstruct = FreeBlendState_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = FreeBlendState_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = FreeBlendState_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return FreeBlendState_possibleConstructorReturn(this, result); }; }\n\nfunction FreeBlendState_possibleConstructorReturn(self, call) { if (call && (FreeBlendState_typeof(call) === "object" || typeof call === "function")) { return call; } return FreeBlendState_assertThisInitialized(self); }\n\nfunction FreeBlendState_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction FreeBlendState_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction FreeBlendState_getPrototypeOf(o) { FreeBlendState_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return FreeBlendState_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/**\n * Class for blending N number of blend states.\n *\n * @extends AbstractBlendState\n */\n\nvar FreeBlendState = /*#__PURE__*/function (_AbstractBlendState) {\n FreeBlendState_inherits(FreeBlendState, _AbstractBlendState);\n\n var _super = FreeBlendState_createSuper(FreeBlendState);\n\n /**\n * @constructor\n *\n * @param {Object} [options={}] - Options for the container state.\n * @param {Array.} [blendStates=[]] - Blend states to be controlled by\n * this container.\n */\n function FreeBlendState() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var blendStates = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n\n FreeBlendState_classCallCheck(this, FreeBlendState);\n\n return _super.call(this, options, blendStates);\n }\n\n FreeBlendState_createClass(FreeBlendState, [{\n key: "updateInternalWeight",\n value: function updateInternalWeight(factor) {\n var _this = this;\n\n FreeBlendState_get(FreeBlendState_getPrototypeOf(FreeBlendState.prototype), "updateInternalWeight", this).call(this, factor); // Determine the total active weight of blend states\n\n\n var sumWeights = 0;\n\n this._states.forEach(function (state) {\n sumWeights += state.weight;\n }); // Ensure the sum of blend state internal weights does not exceed container internal weight\n\n\n factor /= Math.max(sumWeights, 1); // Sum of blend state internal weights should not exceed container internal weight\n\n this._states.forEach(function (state) {\n state.updateInternalWeight(factor * _this._weight);\n });\n }\n }]);\n\n return FreeBlendState;\n}(state_AbstractBlendState);\n\n/* harmony default export */ var state_FreeBlendState = (FreeBlendState);\n// CONCATENATED MODULE: ./src/core/animpack/state/Blend1dState.js\nfunction Blend1dState_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { Blend1dState_typeof = function _typeof(obj) { return typeof obj; }; } else { Blend1dState_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return Blend1dState_typeof(obj); }\n\nfunction Blend1dState_toConsumableArray(arr) { return Blend1dState_arrayWithoutHoles(arr) || Blend1dState_iterableToArray(arr) || Blend1dState_unsupportedIterableToArray(arr) || Blend1dState_nonIterableSpread(); }\n\nfunction Blend1dState_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."); }\n\nfunction Blend1dState_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return Blend1dState_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return Blend1dState_arrayLikeToArray(o, minLen); }\n\nfunction Blend1dState_iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction Blend1dState_arrayWithoutHoles(arr) { if (Array.isArray(arr)) return Blend1dState_arrayLikeToArray(arr); }\n\nfunction Blend1dState_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction Blend1dState_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction Blend1dState_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { Blend1dState_ownKeys(Object(source), true).forEach(function (key) { Blend1dState_defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { Blend1dState_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction Blend1dState_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction Blend1dState_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction Blend1dState_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction Blend1dState_createClass(Constructor, protoProps, staticProps) { if (protoProps) Blend1dState_defineProperties(Constructor.prototype, protoProps); if (staticProps) Blend1dState_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction Blend1dState_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { Blend1dState_get = Reflect.get; } else { Blend1dState_get = function _get(target, property, receiver) { var base = Blend1dState_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return Blend1dState_get(target, property, receiver || target); }\n\nfunction Blend1dState_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = Blend1dState_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction Blend1dState_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) Blend1dState_setPrototypeOf(subClass, superClass); }\n\nfunction Blend1dState_setPrototypeOf(o, p) { Blend1dState_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return Blend1dState_setPrototypeOf(o, p); }\n\nfunction Blend1dState_createSuper(Derived) { var hasNativeReflectConstruct = Blend1dState_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = Blend1dState_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = Blend1dState_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return Blend1dState_possibleConstructorReturn(this, result); }; }\n\nfunction Blend1dState_possibleConstructorReturn(self, call) { if (call && (Blend1dState_typeof(call) === "object" || typeof call === "function")) { return call; } return Blend1dState_assertThisInitialized(self); }\n\nfunction Blend1dState_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction Blend1dState_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction Blend1dState_getPrototypeOf(o) { Blend1dState_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return Blend1dState_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n/**\n * Class for blending N number of blend states based on a single\n * parameter.\n *\n * @extends AbstractBlendState\n */\n\nvar Blend1dState_Blend1dState = /*#__PURE__*/function (_AbstractBlendState) {\n Blend1dState_inherits(Blend1dState, _AbstractBlendState);\n\n var _super = Blend1dState_createSuper(Blend1dState);\n\n /**\n * @constructor\n *\n * @param {Object} [options] - Options for the container state\n * @param {Array.} [blendStates=[]] - Blend states to be\n * controlled by this container.\n * @param {Array.} [blendThresholds=[]] - Threshold values for activating\n * each blend state.\n * @param {Array.} [phaseMatches=[]] - Booleans indicating whether or not\n * each blend state should be phase matched.\n */\n function Blend1dState() {\n var _this;\n\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var blendStates = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n var blendThresholds = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];\n var phaseMatches = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : [];\n\n Blend1dState_classCallCheck(this, Blend1dState);\n\n _this = _super.call(this, options, blendStates);\n _this._blendValue = 0;\n _this._promises = Blend1dState_objectSpread(Blend1dState_objectSpread({}, _this._promises), {}, {\n blendValue: core_Deferred.resolve()\n }); // Validate there are no duplicate thresholds\n\n var nonZeroDifferentSize = blendStates.length !== 0 && blendStates.length !== blendThresholds.length;\n\n if (nonZeroDifferentSize) {\n throw new Error("Cannot create Blend1dState with blendThresholds ".concat(blendThresholds, ". BlendThresholds count does not match blendStates count."));\n }\n\n var containsDuplicates = new Set(blendThresholds).size !== blendThresholds.length;\n\n if (containsDuplicates) {\n throw new Error("Cannot create Blend1dState with blendThresholds ".concat(blendThresholds, ". BlendThresholds contains duplicate values"));\n } // Initialize the thresholds map\n\n\n _this._thresholds = [];\n\n Blend1dState_toConsumableArray(_this._states.values()).forEach(function (state, index) {\n _this._thresholds.push({\n value: blendThresholds[index],\n name: state.name,\n phaseMatch: phaseMatches[index] || false\n });\n });\n\n _this._sortThresholds();\n\n _this._forceNoThresholdDupes = true;\n _this._phaseLeadState = null;\n\n _this._updateBlendWeights();\n\n return _this;\n }\n /**\n * Gets and sets the blend parameter value.\n */\n\n\n Blend1dState_createClass(Blend1dState, [{\n key: "blendValue",\n get: function get() {\n return this._blendValue;\n },\n set: function set(value) {\n this._blendValue = value;\n }\n /**\n * Gets whether or not the blend value is currently being animated.\n */\n\n }, {\n key: "blendValuePending",\n get: function get() {\n return this._promises.blendValue && this._promises.blendValue.pending;\n }\n /**\n * Updates the user defined weight over time.\n *\n * @param {null} name - Unused parameter.\n * @param {number} weight - The target weight value.\n * @param {number} [seconds=0] - The amount of time it will take to reach the\n * target weight.\n * @param {Function=} easingFn - The easing function to use for interpolation.\n *\n * @returns {Deferred}\n */\n\n }, {\n key: "setBlendWeight",\n value: function setBlendWeight(name, value) {\n var _this2 = this;\n\n var seconds = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n var easingFn = arguments.length > 3 ? arguments[3] : undefined;\n\n this._promises.blendValue.cancel();\n\n this._promises.blendValue = animpack_AnimationUtils.interpolateProperty(this, \'blendValue\', value, {\n seconds: seconds,\n easingFn: easingFn,\n onProgress: function onProgress() {\n _this2._updateBlendWeights();\n },\n onFinish: function onFinish() {\n _this2._updateBlendWeights();\n }\n });\n return this._promises.blendValue;\n }\n /**\n * Gets the user defined weight.\n *\n * @returns {number}\n */\n\n }, {\n key: "getBlendWeight",\n value: function getBlendWeight() {\n return this.blendValue;\n }\n }, {\n key: "addState",\n value: function addState(state) {\n var thresholdValue = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var phaseMatch = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n this._thresholds = this._thresholds || []; // Make sure there is not already a state with this threshold\n\n var sameValue = this._thresholds.find(function (threshold) {\n return threshold.value === thresholdValue;\n });\n\n if (this._forceNoThresholdDupes && sameValue !== undefined) {\n throw new Error("Cannot set blend threshold of ".concat(thresholdValue, " for state ").concat(state.name, " on ").concat(this.name, ". A state already exists with that threshold."));\n }\n\n Blend1dState_get(Blend1dState_getPrototypeOf(Blend1dState.prototype), "addState", this).call(this, state);\n\n this._thresholds.push({\n value: thresholdValue,\n name: state.name,\n phaseMatch: phaseMatch || false\n });\n\n this._sortThresholds();\n\n return state.name;\n }\n }, {\n key: "removeState",\n value: function removeState(name) {\n var removed = Blend1dState_get(Blend1dState_getPrototypeOf(Blend1dState.prototype), "removeState", this).call(this, name);\n\n if (removed) {\n var index = this._thresholds.findIndex(function (threshold) {\n return threshold.name === name;\n });\n\n this._thresholds.splice(index, 1);\n }\n\n return removed;\n }\n }, {\n key: "renameState",\n value: function renameState(currentName, newName) {\n newName = Blend1dState_get(Blend1dState_getPrototypeOf(Blend1dState.prototype), "renameState", this).call(this, currentName, newName);\n\n var threshold = this._thresholds.find(function (threshold) {\n return threshold.name === currentName;\n });\n\n threshold.name = newName;\n return newName;\n }\n /**\n * Gets the threshold value of a blend with the corresponding name.\n *\n * @param {string} name - Name of the blend to get the threshold of.\n *\n * @returns {number} Threhold value.\n */\n\n }, {\n key: "getBlendThreshold",\n value: function getBlendThreshold(name) {\n var threshold = this._thresholds.find(function (threshold) {\n return threshold.name === name;\n });\n\n if (threshold === undefined) {\n throw new Error("Cannot get blend threshold of state ".concat(name, " on ").concat(this.name, ". No state exists with that name."));\n }\n\n return threshold.value;\n }\n /**\n * Sets the threshold value of a blend with the corresponding name.\n *\n * @param {string} name - Name of the blend to set the threshold.\n * @param {number} value - Value of the threshold to set.\n *\n * @returns {number} Set threshold value.\n */\n\n }, {\n key: "setBlendThreshold",\n value: function setBlendThreshold(name, value) {\n // Make sure there is not already a state with this threshold\n var sameValue = this._thresholds.find(function (threshold) {\n return threshold.value === value;\n });\n\n if (sameValue !== undefined) {\n throw new Error("Cannot set blend threshold of ".concat(value, " for state ").concat(name, " on ").concat(this.name, ". A state already exists with that threshold."));\n }\n\n var threshold = this._thresholds.find(function (threshold) {\n return threshold.name === name;\n });\n\n if (threshold === undefined) {\n throw new Error("Cannot set blend threshold of state ".concat(name, " on ").concat(this.name, ". No state exists with that name."));\n }\n\n threshold.value = value;\n\n this._sortThresholds();\n\n return threshold.value;\n }\n }, {\n key: "updateInternalWeight",\n value: function updateInternalWeight(factor) {\n var _this3 = this;\n\n Blend1dState_get(Blend1dState_getPrototypeOf(Blend1dState.prototype), "updateInternalWeight", this).call(this, factor);\n\n if (this._phaseLeadState) {\n this._states.forEach(function (state) {\n if (state.weight !== 0) {\n state.normalizedTime = _this3._phaseLeadState.normalizedTime;\n }\n });\n }\n }\n /**\n * Updates the blend weights based on their corresponding threshold values\n * and the current blendValue. Additionally, sets a lead phase state if the\n * conditions for phase-matching have been satisfied.\n *\n * @private\n */\n\n }, {\n key: "_updateBlendWeights",\n value: function _updateBlendWeights() {\n var _this4 = this;\n\n if (this._thresholds.length === 0) return;\n\n if (this._thresholds.length === 1) {\n var state = this._states.get(this._thresholds[0].name);\n\n state.setWeight(1);\n return;\n } // Initially set all sub-state weights to zero\n\n\n this._states.forEach(function (state) {\n state.setWeight(0);\n });\n\n this._phaseLeadState = null; // Find the first threshold that is greater than or equal to the parameter value\n\n var targetIndex = this._thresholds.findIndex(function (threshold) {\n return threshold.value >= _this4._blendValue;\n });\n\n if (targetIndex === 0 || targetIndex === -1) {\n // Give one state full influence\n targetIndex = targetIndex === -1 ? this._thresholds.length - 1 : 0;\n\n var _state = this._states.get(this._thresholds[targetIndex].name);\n\n _state.setWeight(1);\n } else {\n // Linear interpolate influence between two states\n var thresholdA = this._thresholds[targetIndex - 1];\n var thresholdB = this._thresholds[targetIndex];\n var factorB = (this.blendValue - thresholdA.value) / (thresholdB.value - thresholdA.value);\n var factorA = 1 - factorB;\n\n var stateA = this._states.get(thresholdA.name);\n\n var stateB = this._states.get(thresholdB.name);\n\n stateA.setWeight(factorA);\n stateB.setWeight(factorB); // Set phase-matching if needed\n\n if (thresholdA.phaseMatch && thresholdB.phaseMatch) {\n this._phaseLeadState = factorA > factorB ? stateA : stateB;\n }\n }\n }\n /**\n * Sorts the thresholds from low to high based on value.\n *\n * @private\n */\n\n }, {\n key: "_sortThresholds",\n value: function _sortThresholds() {\n this._thresholds.sort(function (a, b) {\n return a.value - b.value;\n });\n }\n }]);\n\n return Blend1dState;\n}(state_AbstractBlendState);\n\n/* harmony default export */ var state_Blend1dState = (Blend1dState_Blend1dState);\n// CONCATENATED MODULE: ./src/core/animpack/state/Blend2dState.js\nfunction Blend2dState_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { Blend2dState_typeof = function _typeof(obj) { return typeof obj; }; } else { Blend2dState_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return Blend2dState_typeof(obj); }\n\nfunction Blend2dState_toConsumableArray(arr) { return Blend2dState_arrayWithoutHoles(arr) || Blend2dState_iterableToArray(arr) || Blend2dState_unsupportedIterableToArray(arr) || Blend2dState_nonIterableSpread(); }\n\nfunction Blend2dState_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."); }\n\nfunction Blend2dState_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return Blend2dState_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return Blend2dState_arrayLikeToArray(o, minLen); }\n\nfunction Blend2dState_iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction Blend2dState_arrayWithoutHoles(arr) { if (Array.isArray(arr)) return Blend2dState_arrayLikeToArray(arr); }\n\nfunction Blend2dState_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction Blend2dState_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction Blend2dState_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { Blend2dState_ownKeys(Object(source), true).forEach(function (key) { Blend2dState_defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { Blend2dState_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction Blend2dState_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction Blend2dState_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction Blend2dState_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction Blend2dState_createClass(Constructor, protoProps, staticProps) { if (protoProps) Blend2dState_defineProperties(Constructor.prototype, protoProps); if (staticProps) Blend2dState_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction Blend2dState_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { Blend2dState_get = Reflect.get; } else { Blend2dState_get = function _get(target, property, receiver) { var base = Blend2dState_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return Blend2dState_get(target, property, receiver || target); }\n\nfunction Blend2dState_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = Blend2dState_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction Blend2dState_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) Blend2dState_setPrototypeOf(subClass, superClass); }\n\nfunction Blend2dState_setPrototypeOf(o, p) { Blend2dState_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return Blend2dState_setPrototypeOf(o, p); }\n\nfunction Blend2dState_createSuper(Derived) { var hasNativeReflectConstruct = Blend2dState_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = Blend2dState_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = Blend2dState_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return Blend2dState_possibleConstructorReturn(this, result); }; }\n\nfunction Blend2dState_possibleConstructorReturn(self, call) { if (call && (Blend2dState_typeof(call) === "object" || typeof call === "function")) { return call; } return Blend2dState_assertThisInitialized(self); }\n\nfunction Blend2dState_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction Blend2dState_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction Blend2dState_getPrototypeOf(o) { Blend2dState_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return Blend2dState_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/* eslint-disable no-underscore-dangle */\n\n\n\n\n/**\n * Class for blending N number of blend states based on two\n * paramters.\n *\n * @extends AbstractBlendState\n */\n\nvar Blend2dState_Blend2dState = /*#__PURE__*/function (_AbstractBlendState) {\n Blend2dState_inherits(Blend2dState, _AbstractBlendState);\n\n var _super = Blend2dState_createSuper(Blend2dState);\n\n /**\n * @constructor\n *\n * @param {Object} [options] - Options for the container state\n * @param {Array.} [blendStates=[]] - Blend states to be\n * controlled by this container.\n * @param {Array.>} [blendThresholds=[]] - Threshold values for activating\n * each blend state.\n * @param {Array.} [phaseMatches=[]] - Booleans indicating whether or not\n * each blend state should be phase matched.\n */\n function Blend2dState() {\n var _this;\n\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var blendStates = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n var blendThresholds = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];\n var phaseMatches = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : [];\n\n Blend2dState_classCallCheck(this, Blend2dState);\n\n _this = _super.call(this, options, blendStates);\n\n if (blendStates.length !== blendThresholds.length) {\n throw new Error("Cannot create Blend2dState with blendStates ".concat(blendStates, " and blendThresholds ").concat(blendThresholds, ". Count of blendStates must match count of blendThresholds."));\n }\n\n blendThresholds.slice(0, blendThresholds.length - 1).forEach(function (threshold, index) {\n blendThresholds.slice(index + 1).forEach(function (otherThreshold) {\n if (threshold[0] === otherThreshold[0] && threshold[1] === otherThreshold[1]) {\n throw new Error("Cannot create Blend2dState with blendThresholds ".concat(blendThresholds, ". No duplicate values allowed in blendThresholds."));\n }\n });\n });\n _this._blendValueX = 0;\n _this._blendValueY = 0;\n _this._promises = Blend2dState_objectSpread(Blend2dState_objectSpread({}, _this._promises), {}, {\n blendValueX: core_Deferred.resolve(),\n blendValueY: core_Deferred.resolve()\n });\n _this._thresholds = [];\n\n Blend2dState_toConsumableArray(_this._states.values()).forEach(function (state, index) {\n _this._thresholds.push({\n name: state.name,\n phaseMatch: phaseMatches[index] || false\n });\n });\n\n _this._vertices = blendThresholds;\n\n if (_this._vertices.length >= 3) {\n _this._triangles = core_MathUtils.getDelaunayTriangulation(_this._vertices);\n }\n\n _this._phaseLeadState = null;\n\n _this._updateBlendWeights();\n\n return _this;\n }\n /**\n * Updates the user defined weight over time.\n *\n * @param {string} name - Name of blend weight to update.\n * @param {number} weight - Target weight value.\n * @param {number} [seconds=0] - The amount of time it will take to reach the\n * target value.\n * @param {Function=} easingFn - The easing function to use for interpolation.\n *\n * @returns {Deferred}\n */\n\n\n Blend2dState_createClass(Blend2dState, [{\n key: "setBlendWeight",\n value: function setBlendWeight(name, value) {\n var _this2 = this;\n\n var seconds = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n var easingFn = arguments.length > 3 ? arguments[3] : undefined;\n var property = "blendValue".concat(name.toUpperCase());\n\n if (property !== \'blendValueX\' && property !== \'blendValueY\') {\n throw new Error("Cannot set blend weight for ".concat(name, " on ").concat(this.name, ". Blend2dState only accepts \'X\' or \'Y\' for setBlendWeight"));\n }\n\n this._promises[property].cancel();\n\n this._promises[property] = animpack_AnimationUtils.interpolateProperty(this, property, value, {\n seconds: seconds,\n easingFn: easingFn,\n onProgress: function onProgress() {\n _this2._updateBlendWeights();\n },\n onFinish: function onFinish() {\n _this2._updateBlendWeights();\n }\n });\n return this._promises[property];\n }\n /**\n * Gets the user defined weight.\n *\n * @param {string} name - Name of blend weight.\n *\n * @returns {number}\n */\n\n }, {\n key: "getBlendWeight",\n value: function getBlendWeight(name) {\n var property = name.toUpperCase();\n\n if (property !== \'X\' && property !== \'Y\') {\n throw new Error("Cannot get blend weight for ".concat(name, " on ").concat(this.name, ". Blend2dState only accepts \'X\' or \'Y\' for getBlendWeight"));\n }\n\n return property === \'X\' ? this._blendValueX : this._blendValueY;\n }\n /**\n * Gets and sets the x blend weight.\n */\n\n }, {\n key: "blendValueX",\n get: function get() {\n return this._blendValueX;\n },\n set: function set(value) {\n this._blendValueX = value;\n }\n /**\n * Gets and sets the y blend weight.\n */\n\n }, {\n key: "blendValueY",\n get: function get() {\n return this._blendValueY;\n },\n set: function set(value) {\n this._blendValueY = value;\n }\n /**\n * Gets whether or not the x blend value is currently being animated.\n */\n\n }, {\n key: "blendValueXPending",\n get: function get() {\n return this._promises.blendValueX && this._promises.blendValueX.pending;\n }\n /**\n * Gets whether or not the y blend value is currently being animated.\n */\n\n }, {\n key: "blendValueYPending",\n get: function get() {\n return this._promises.blendValueY && this._promises.blendValueY.pending;\n }\n }, {\n key: "updateInternalWeight",\n value: function updateInternalWeight(factor) {\n var _this3 = this;\n\n Blend2dState_get(Blend2dState_getPrototypeOf(Blend2dState.prototype), "updateInternalWeight", this).call(this, factor);\n\n if (this._phaseLeadState) {\n Blend2dState_toConsumableArray(this._states.values()).forEach(function (state, index) {\n if (state.weight !== 0 && _this3._thresholds[index].phaseMatch) {\n state.normalizedTime = _this3._phaseLeadState.normalizedTime;\n }\n });\n }\n }\n /**\n * Updates the blend weights based on their corresponding threshold values\n * and the current [x,y] blendValue. Additionally, sets a lead phase state if the\n * conditions for phase-matching have been satisfied.\n *\n * @private\n */\n\n }, {\n key: "_updateBlendWeights",\n value: function _updateBlendWeights() {\n var _this4 = this;\n\n if (!this._vertices || this._vertices.length === 0) return;\n\n if (this._vertices.length === 1) {\n Blend2dState_toConsumableArray(this._states.values())[0].weight = 1;\n return;\n } // Initially set all sub-state weights to zero\n\n\n this._states.forEach(function (state) {\n state.setWeight(0);\n });\n\n this._phaseLeadState = null;\n var p = [this._blendValueX, this._blendValueY];\n\n if (this._vertices.length === 2) {\n this._setInfluenceClosestPointOnLine(p);\n } else {\n var triangle = this._triangles.find(function (triangle) {\n return core_MathUtils.isPointInTriangle(_this4._vertices[triangle[0]], _this4._vertices[triangle[1]], _this4._vertices[triangle[2]], p);\n });\n\n if (triangle) {\n this._setInfluenceTriangle(triangle, p);\n } else {\n this._setInfluenceClosestPointInTriangles(p);\n }\n }\n }\n /**\n * Sets blend weights for states corresponding to a\n * triangle of thresholds and a given [x,y] blendValues.\n *\n * @param {Array.>} triangle - Set of triangluated indices\n * that correspond to blend thresholds.\n * @param {Array.} p - Given [x,y] blendValue.\n *\n * @private\n */\n\n }, {\n key: "_setInfluenceTriangle",\n value: function _setInfluenceTriangle(triangle, p) {\n var areaA = core_MathUtils.triangleArea(this._vertices[triangle[1]], this._vertices[triangle[2]], p);\n var areaB = core_MathUtils.triangleArea(this._vertices[triangle[0]], this._vertices[triangle[2]], p);\n var areaC = core_MathUtils.triangleArea(this._vertices[triangle[0]], this._vertices[triangle[1]], p);\n var totalArea = areaA + areaB + areaC;\n var weightA = areaA / totalArea;\n var weightB = areaB / totalArea;\n var weightC = areaC / totalArea;\n var thresholdA = this._thresholds[triangle[0]];\n var thresholdB = this._thresholds[triangle[1]];\n var thresholdC = this._thresholds[triangle[2]];\n\n var stateA = this._states.get(thresholdA.name);\n\n var stateB = this._states.get(thresholdB.name);\n\n var stateC = this._states.get(thresholdC.name);\n\n stateA.setWeight(weightA);\n stateB.setWeight(weightB);\n stateC.setWeight(weightC);\n\n this._setPhaseLeadState([stateA, stateB, stateC], [thresholdA.phaseMatch, thresholdB.phaseMatch, thresholdC.phaseMatch]);\n }\n /**\n * Determines the closest point within a triangle of\n * thresholds based on the current [x,y] blendValues and\n * then sets blend weights for the corresponding states.\n *\n * @param {Array.} p - Given [x,y] blendValue.\n *\n * @private\n */\n\n }, {\n key: "_setInfluenceClosestPointInTriangles",\n value: function _setInfluenceClosestPointInTriangles(p) {\n var _this5 = this;\n\n var globalClosestPoint = null;\n var globalMinDist = Number.POSITIVE_INFINITY;\n var closestTriangle = -1;\n\n this._triangles.forEach(function (triangle, index) {\n var pointA = core_MathUtils.closestPointOnLine(_this5._vertices[triangle[0]], _this5._vertices[triangle[1]], p);\n var pointB = core_MathUtils.closestPointOnLine(_this5._vertices[triangle[1]], _this5._vertices[triangle[2]], p);\n var pointC = core_MathUtils.closestPointOnLine(_this5._vertices[triangle[2]], _this5._vertices[triangle[0]], p);\n var distA = core_MathUtils.distanceSquared(pointA, p);\n var distB = core_MathUtils.distanceSquared(pointB, p);\n var distC = core_MathUtils.distanceSquared(pointC, p);\n var localClosestPoint = pointC;\n var localMinDist = distC;\n\n if (distA < localMinDist) {\n localClosestPoint = pointA;\n localMinDist = distA;\n }\n\n if (distB < localMinDist) {\n localClosestPoint = pointB;\n localMinDist = distB;\n }\n\n if (localMinDist < globalMinDist) {\n globalMinDist = localMinDist;\n globalClosestPoint = Blend2dState_toConsumableArray(localClosestPoint);\n closestTriangle = index;\n }\n });\n\n this._setInfluenceTriangle(this._triangles[closestTriangle], globalClosestPoint);\n }\n /**\n * Determines the closest point on the line formed between the\n * two blend thresholds based on the current [x,y] blendValues and\n * then sets blend weights for the corresponding states.\n *\n * @param {Array.} p - Given [x,y] blendValue.\n *\n * @private\n */\n\n }, {\n key: "_setInfluenceClosestPointOnLine",\n value: function _setInfluenceClosestPointOnLine(p) {\n var closestPoint = core_MathUtils.closestPointOnLine(this._vertices[[0]], this._vertices[[1]], p);\n var distA = core_MathUtils.distanceSquared(this._vertices[0], closestPoint);\n var distB = core_MathUtils.distanceSquared(this._vertices[1], closestPoint);\n var weightA = distB / (distA + distB);\n var weightB = distA / (distA + distB);\n var thresholdA = this._thresholds[0];\n var thresholdB = this._thresholds[1];\n\n var stateA = this._states.get(thresholdA.name);\n\n var stateB = this._states.get(thresholdB.name);\n\n stateA.setWeight(weightA);\n stateB.setWeight(weightB);\n\n this._setPhaseLeadState([stateA, stateB], [thresholdA.phaseMatch, thresholdB.phaseMatch]);\n }\n /**\n * Sets a lead phase state if the conditions\n * for phase-matching are satisfied.\n *\n * @param {Array.} states - States to\n * check phase-matching criteria.\n * @param {Array.} phaseMatched - List of phase-match booleans.\n *\n * @private\n */\n\n }, {\n key: "_setPhaseLeadState",\n value: function _setPhaseLeadState(states, phaseMatched) {\n var _this6 = this;\n\n var max = 0;\n states.forEach(function (state, index) {\n if (phaseMatched[index] && state.weight > max) {\n _this6._phaseLeadState = state;\n max = state.weight;\n }\n });\n }\n }]);\n\n return Blend2dState;\n}(state_AbstractBlendState);\n\n/* harmony default export */ var state_Blend2dState = (Blend2dState_Blend2dState);\n// CONCATENATED MODULE: ./src/core/animpack/AnimationLayer.js\nfunction AnimationLayer_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { AnimationLayer_typeof = function _typeof(obj) { return typeof obj; }; } else { AnimationLayer_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return AnimationLayer_typeof(obj); }\n\nfunction AnimationLayer_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction AnimationLayer_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction AnimationLayer_createClass(Constructor, protoProps, staticProps) { if (protoProps) AnimationLayer_defineProperties(Constructor.prototype, protoProps); if (staticProps) AnimationLayer_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction AnimationLayer_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { AnimationLayer_get = Reflect.get; } else { AnimationLayer_get = function _get(target, property, receiver) { var base = AnimationLayer_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return AnimationLayer_get(target, property, receiver || target); }\n\nfunction AnimationLayer_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = AnimationLayer_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction AnimationLayer_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) AnimationLayer_setPrototypeOf(subClass, superClass); }\n\nfunction AnimationLayer_setPrototypeOf(o, p) { AnimationLayer_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return AnimationLayer_setPrototypeOf(o, p); }\n\nfunction AnimationLayer_createSuper(Derived) { var hasNativeReflectConstruct = AnimationLayer_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = AnimationLayer_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = AnimationLayer_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return AnimationLayer_possibleConstructorReturn(this, result); }; }\n\nfunction AnimationLayer_possibleConstructorReturn(self, call) { if (call && (AnimationLayer_typeof(call) === "object" || typeof call === "function")) { return call; } return AnimationLayer_assertThisInitialized(self); }\n\nfunction AnimationLayer_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction AnimationLayer_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction AnimationLayer_getPrototypeOf(o) { AnimationLayer_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return AnimationLayer_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n\n\n\n/**\n * Enum for types of {@link AnimationLayer} blending.\n *\n * @readonly\n * @enum {string}\n */\n\nvar LayerBlendModes = {\n Override: \'Override\',\n Additive: \'Additive\'\n};\n/**\n * The default blending mode {@link AnimationLayer}.\n *\n * @readonly\n * @type {string}\n */\n\nvar DefaultLayerBlendMode = \'Override\';\n/**\n * Checks if a given blendMode is present in the values of {@link LayerBlendModes}.\n * If it is, return the original value, otherwise return {@link DefaultLayerBlendMode}.\n *\n * @param {string} blendMode - The name of the type of blending.\n *\n * @returns {(string|DefaultLayerBlendMode)}\n */\n\nfunction validateBlendMode(blendMode) {\n if (Array.from(Object.values(LayerBlendModes)).includes(blendMode)) {\n return blendMode;\n } else {\n return DefaultLayerBlendMode;\n }\n}\n/**\n * Class for managing a set of animations where only one state can be active at\n * any given time.\n *\n * @implements AnimationPlayerInterface\n * @implements StateContainerInterface\n */\n\nvar AnimationLayer_AnimationLayer = /*#__PURE__*/function (_AnimationPlayerInter) {\n AnimationLayer_inherits(AnimationLayer, _AnimationPlayerInter);\n\n var _super = AnimationLayer_createSuper(AnimationLayer);\n\n /**\n * @constructor\n *\n * @param {Object=} options - Options for the animation layer.\n * @param {string} options.name - Name of the layer. Names must be unique to the\n * animation feature that contains the layer.\n * @param {LayerBlendModes} [options.blendMode=DefaultLayerBlendMode] -\n * Type of blending to use for all states controlled by the layer.\n * @param {number} [options.weight=1] - The amount of influence the layer\'s current\n * animation has over the result for the host.\n * @param {number} [options.transitionTime=0] - The default amount of time to use when\n * playing and resuming animations.\n * @param {Function=} options.easingFn - The default easing function to use when\n * transitioning between animations and setting layer weight.\n */\n function AnimationLayer() {\n var _this;\n\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n AnimationLayer_classCallCheck(this, AnimationLayer);\n\n _this = _super.call(this, options);\n _this.name = options.name === undefined ? \'AnimationLayer\' : options.name;\n _this._blendMode = Array.from(Object.values(LayerBlendModes)).includes(options.blendMode) ? options.blendMode : DefaultLayerBlendMode;\n _this._promises = {\n weight: core_Deferred.resolve()\n };\n _this._weightPaused = false;\n _this.weight = typeof options.weight === \'number\' ? options.weight : 1;\n _this._internalWeight = _this._weight;\n return _this;\n }\n /**\n * Gets the type of blending used for states controlled by the layer.\n *\n * @readonly\n * @type {string}\n */\n\n\n AnimationLayer_createClass(AnimationLayer, [{\n key: "blendMode",\n get: function get() {\n return this._blendMode;\n }\n /**\n * Gets and sets the amount of influence the layer\'s current animation has over\n * the result for the host.\n *\n * @type {number}\n */\n\n }, {\n key: "weight",\n get: function get() {\n return this._weight;\n }\n /**\n * Gets whether or not the layer\'s weight value is currently being animated.\n *\n * @readonly\n * @type {boolean}\n */\n ,\n set: function set(weight) {\n this._weight = core_MathUtils.clamp(weight, 0, 1);\n }\n }, {\n key: "weightPending",\n get: function get() {\n return this._promises.weight && this._promises.weight.pending;\n }\n /**\n * Pause the current animation state and any interpolation happening on the layer\'s\n * weight property.\n *\n * @returns {boolean}\n */\n\n }, {\n key: "pause",\n value: function pause() {\n this._paused = true;\n this._weightPaused = true;\n return this.pauseAnimation() || this.weightPending;\n }\n /**\n * Resume the current animation state and any interpolation happening on the layer\'s\n * weight property.\n *\n * @returns {boolean}\n */\n\n }, {\n key: "resume",\n value: function resume() {\n this._paused = false;\n this._weightPaused = false;\n var isWeightActive = this.weightPending;\n\n if (this._currentState) {\n return this.resumeAnimation() || isWeightActive;\n } else {\n return isWeightActive;\n }\n }\n /**\n * Updates the user defined weight over time.\n *\n * @param {number} weight - The target weight value.\n * @param {number} [seconds=0] - The amount of time it will take to reach the\n * target weight.\n * @param {Function=} easingFn - The easing function to use for interpolation.\n *\n * @returns {Deferred}\n */\n\n }, {\n key: "setWeight",\n value: function setWeight(weight) {\n var seconds = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var easingFn = arguments.length > 2 ? arguments[2] : undefined;\n\n if (this.weightPending) {\n this._promises.weight.cancel();\n }\n\n weight = core_MathUtils.clamp(weight);\n this._promises.weight = animpack_AnimationUtils.interpolateProperty(this, \'weight\', weight, {\n seconds: seconds,\n easingFn: easingFn !== undefined ? easingFn : this._easingFn\n });\n return this._promises.weight;\n }\n /**\n * Pause any interpolation happening on the layer\'s weight property.\n *\n * @returns {boolean}\n */\n\n }, {\n key: "pauseWeight",\n value: function pauseWeight() {\n this._weightPaused = true;\n return this.weightPending;\n }\n /**\n * Resume any interpolation happening on the layer\'s weight property.\n *\n * @returns {boolean}\n */\n\n }, {\n key: "resumeWeight",\n value: function resumeWeight() {\n this._weightPaused = false;\n return this.weightPending;\n }\n /**\n * Multiplies the user weight by a factor to determine the internal weight.\n *\n * @param {number} factor - 0-1 multiplier to apply to the user weight.\n */\n\n }, {\n key: "updateInternalWeight",\n value: function updateInternalWeight(factor) {\n this._internalWeight = this._weight * factor;\n\n if (this._currentState) {\n this._currentState.updateInternalWeight(this._internalWeight);\n }\n }\n /**\n * Returns the names of blend states in an animation.\n *\n * @param {string} animationName - Name of the animation.\n *\n * @returns {Array.} - Names of blend states.\n */\n\n }, {\n key: "getAnimationBlendNames",\n value: function getAnimationBlendNames(animationName) {\n var state = this.getState(animationName);\n\n if (state === undefined) {\n throw new Error("Cannot get blend names of animation ".concat(animationName, " on layer ").concat(this.name, ". No animation exists with this name."));\n }\n\n if (state instanceof state_AbstractBlendState) {\n return state.getStateNames();\n }\n\n throw new Error("Cannot get blend names of animation ".concat(animationName, " on layer ").concat(this.name, ". Animation is not an instance of AbstractBlendState."));\n }\n /**\n * Update the weight for a blend state of an animation.\n *\n * @param {string} animationName - Name of the animation containing the blend state\n * to update.\n * @param {string} blendName - Name of the blend state to update.\n * @param {number} weight - Weight value to set on the animation. This number shoudld be\n * in the 0-1 range.\n * @param {number=} seconds - Number of seconds it should take to reach the new weight.\n * Default is zero and will set immediately.\n * @param {Function=} easingFn - Easing function to use while interpolating the new\n * weight. Default is Easing.Linear.InOut.\n *\n * @returns {Deferred} - Promise that will resolve once the animation\'s weight reaches\n * the target value.\n */\n\n }, {\n key: "setAnimationBlendWeight",\n value: function setAnimationBlendWeight(animationName, blendName, weight) {\n var seconds = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;\n var easingFn = arguments.length > 4 ? arguments[4] : undefined;\n var state = this.getState(animationName);\n\n if (state === undefined) {\n throw new Error("Cannot set blend weight of animation ".concat(animationName, " on layer ").concat(this.name, ". No animation exists with this name."));\n }\n\n if (state instanceof state_AbstractBlendState) {\n return state.setBlendWeight(blendName, weight, seconds, easingFn);\n }\n\n throw new Error("Cannot set blend weight of animation ".concat(animationName, " on layer ").concat(this.name, ". Animation is not an instance of AbstractBlendState."));\n }\n /**\n * Returns the weight for a blend state of an animation.\n *\n * @param {string} animationName - Name of the animation containing the blend state\n * to update.\n * @param {string} blendName - Name of the blend state to retrieve the weight of.\n *\n * @returns {number} - Weight of the blend state.\n */\n\n }, {\n key: "getAnimationBlendWeight",\n value: function getAnimationBlendWeight(animationName, blendName) {\n var state = this.getState(animationName);\n\n if (state === undefined) {\n throw new Error("Cannot get blend weight of animation ".concat(animationName, " on layer ").concat(this.name, ". No animation exists with this name."));\n }\n\n if (state instanceof state_AbstractBlendState) {\n return state.getBlendWeight(blendName);\n }\n\n throw new Error("Cannot get blend weight of animation ".concat(animationName, " on layer ").concat(this.name, ". Animation is not an instance of AbstractBlendState."));\n }\n /**\n * Update any weight interpolators and the current animation.\n *\n * @param {number} deltaTime - Time in milliseconds since the last update.\n */\n\n }, {\n key: "update",\n value: function update(deltaTime) {\n AnimationLayer_get(AnimationLayer_getPrototypeOf(AnimationLayer.prototype), "update", this).call(this, deltaTime);\n\n if (!this._paused && !this._weightPaused) {\n this._promises.weight.execute(deltaTime);\n }\n }\n /**\n * Cancel any pending promises and discard states controlled by the layer.\n */\n\n }, {\n key: "discard",\n value: function discard() {\n AnimationLayer_get(AnimationLayer_getPrototypeOf(AnimationLayer.prototype), "discard", this).call(this);\n\n this.discardStates();\n\n this._promises.weight.cancel();\n\n delete this._promises;\n }\n }]);\n\n return AnimationLayer;\n}(animpack_AnimationPlayerInterface.Mixin(state_StateContainerInterface.Mixin()));\n\n/* harmony default export */ var animpack_AnimationLayer = (AnimationLayer_AnimationLayer);\n// CONCATENATED MODULE: ./src/core/animpack/state/SingleState.js\nfunction SingleState_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { SingleState_typeof = function _typeof(obj) { return typeof obj; }; } else { SingleState_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return SingleState_typeof(obj); }\n\nfunction SingleState_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction SingleState_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction SingleState_createClass(Constructor, protoProps, staticProps) { if (protoProps) SingleState_defineProperties(Constructor.prototype, protoProps); if (staticProps) SingleState_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction SingleState_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) SingleState_setPrototypeOf(subClass, superClass); }\n\nfunction SingleState_setPrototypeOf(o, p) { SingleState_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return SingleState_setPrototypeOf(o, p); }\n\nfunction SingleState_createSuper(Derived) { var hasNativeReflectConstruct = SingleState_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = SingleState_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = SingleState_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return SingleState_possibleConstructorReturn(this, result); }; }\n\nfunction SingleState_possibleConstructorReturn(self, call) { if (call && (SingleState_typeof(call) === "object" || typeof call === "function")) { return call; } return SingleState_assertThisInitialized(self); }\n\nfunction SingleState_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction SingleState_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction SingleState_getPrototypeOf(o) { SingleState_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return SingleState_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n\n/**\n * Class for playing a single animation clip.\n *\n * @extends AbstractState\n * @alias core/SingleState\n */\n\nvar SingleState_SingleState = /*#__PURE__*/function (_AbstractState) {\n SingleState_inherits(SingleState, _AbstractState);\n\n var _super = SingleState_createSuper(SingleState);\n\n /**\n * @constructor\n *\n * @param {Object=} options - Options for the animation state.\n * @param {string=} options.name - Name for the animation state. Names must be\n * unique for the layer the state is applied to.\n * @param {weight} [options.weight=0] - The 0-1 amount of influence the state will have.\n * @param {timeScale} [options.timeScale=1] - Factor to scale the playback speed of the\n * animation.\n * @param {number} [options.loopCount=Infinity] - Number of times the animation should\n * repeat before finishing.\n * @param {string} [options.blendMode=DefaultLayerBlendMode] - Type of\n * blending the animation should use.\n */\n function SingleState() {\n var _this;\n\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n SingleState_classCallCheck(this, SingleState);\n\n _this = _super.call(this, options);\n _this._timeScale = options.timeScale !== undefined ? options.timeScale : 1;\n _this._promises.timeScale = core_Deferred.resolve();\n _this._loopCount = options.loopCount !== undefined ? options.loopCount : Infinity;\n _this._blendMode = validateBlendMode(options.blendMode);\n return _this;\n }\n /**\n * Gets and sets the normalized playing time of the current animation\n *\n * @type {number}\n */\n\n\n SingleState_createClass(SingleState, [{\n key: "normalizedTime",\n get: function get() {\n return 0;\n },\n set: function set(time) {}\n /**\n * Gets and sets the a factor to scale animation playback speed with.\n *\n * @type {number}\n */\n\n }, {\n key: "timeScale",\n get: function get() {\n return this._timeScale;\n },\n set: function set(timeScale) {\n this._timeScale = timeScale;\n }\n /**\n * Gets whether or not the timeScale is currently being animated.\n *\n * @readonly\n * @type {boolean}\n */\n\n }, {\n key: "timeScalePending",\n get: function get() {\n return this._promises.timeScale.pending;\n }\n /**\n * Updates the timeScale value over time.\n *\n * @param {number} weight - The target timeScale value.\n * @param {number} [seconds=0] - The amount of time it will take to reach the\n * target timeScale.\n * @param {Function=} easingFn - The easing function to use for interpolation.\n *\n * @returns {Deferred}\n */\n\n }, {\n key: "setTimeScale",\n value: function setTimeScale(timeScale) {\n var seconds = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var easingFn = arguments.length > 2 ? arguments[2] : undefined;\n\n this._promises.timeScale.cancel();\n\n this._promises.timeScale = animpack_AnimationUtils.interpolateProperty(this, \'timeScale\', timeScale, {\n seconds: seconds,\n easingFn: easingFn\n });\n return this._promises.timeScale;\n }\n /**\n * Gets and sets the number of times the animation will repeat before finishing.\n *\n * @type {number}\n */\n\n }, {\n key: "loopCount",\n get: function get() {\n return this._loopCount;\n },\n set: function set(loopCount) {\n this._loopCount = loopCount;\n }\n /**\n * Gets the type of blending used for the animation.\n *\n * @readonly\n * @type {string}\n */\n\n }, {\n key: "blendMode",\n get: function get() {\n return this._blendMode;\n }\n }]);\n\n return SingleState;\n}(state_AbstractState);\n\n/* harmony default export */ var state_SingleState = (SingleState_SingleState);\n// CONCATENATED MODULE: ./src/core/animpack/state/RandomAnimationState.js\nfunction RandomAnimationState_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { RandomAnimationState_typeof = function _typeof(obj) { return typeof obj; }; } else { RandomAnimationState_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return RandomAnimationState_typeof(obj); }\n\nfunction RandomAnimationState_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction RandomAnimationState_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction RandomAnimationState_createClass(Constructor, protoProps, staticProps) { if (protoProps) RandomAnimationState_defineProperties(Constructor.prototype, protoProps); if (staticProps) RandomAnimationState_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction RandomAnimationState_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { RandomAnimationState_get = Reflect.get; } else { RandomAnimationState_get = function _get(target, property, receiver) { var base = RandomAnimationState_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return RandomAnimationState_get(target, property, receiver || target); }\n\nfunction RandomAnimationState_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = RandomAnimationState_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction RandomAnimationState_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) RandomAnimationState_setPrototypeOf(subClass, superClass); }\n\nfunction RandomAnimationState_setPrototypeOf(o, p) { RandomAnimationState_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return RandomAnimationState_setPrototypeOf(o, p); }\n\nfunction RandomAnimationState_createSuper(Derived) { var hasNativeReflectConstruct = RandomAnimationState_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = RandomAnimationState_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = RandomAnimationState_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return RandomAnimationState_possibleConstructorReturn(this, result); }; }\n\nfunction RandomAnimationState_possibleConstructorReturn(self, call) { if (call && (RandomAnimationState_typeof(call) === "object" || typeof call === "function")) { return call; } return RandomAnimationState_assertThisInitialized(self); }\n\nfunction RandomAnimationState_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction RandomAnimationState_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction RandomAnimationState_getPrototypeOf(o) { RandomAnimationState_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return RandomAnimationState_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n\n/**\n * Class for playing random animations at random intervals within this state.\n *\n * @extends AbstractState\n * @implements AnimationPlayerInterface\n * @implements StateContainerInterface\n */\n\nvar RandomAnimationState_RandomAnimationState = /*#__PURE__*/function (_AnimationPlayerInter) {\n RandomAnimationState_inherits(RandomAnimationState, _AnimationPlayerInter);\n\n var _super = RandomAnimationState_createSuper(RandomAnimationState);\n\n /**\n * @constructor\n *\n * @param {Object} [options={}] - Options for the container state.\n * @param {number} [options.playInterval=3] - The base animation playback interval.\n * @param {Array.} [subStates=[]] - states to be randomly picked to play\n */\n function RandomAnimationState() {\n var _this;\n\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var subStates = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n\n RandomAnimationState_classCallCheck(this, RandomAnimationState);\n\n _this = _super.call(this, options);\n _this._playInterval = options.playInterval ? options.playInterval : 3;\n subStates.forEach(function (state) {\n _this.addState(state);\n });\n return _this;\n }\n /**\n * Gets and sets the base animation play interval\n *\n * @type {float}\n */\n\n\n RandomAnimationState_createClass(RandomAnimationState, [{\n key: "playInterval",\n get: function get() {\n return this._playInterval;\n },\n set: function set(playInterval) {\n this._playInterval = playInterval;\n }\n /**\n * Reset the internal timer for animation play interval\n *\n * @private\n */\n\n }, {\n key: "_resetTimer",\n value: function _resetTimer() {\n var _this2 = this;\n\n var playTimer = core_Utils.getRandomFloat(this._playInterval / 4, this._playInterval * 2);\n\n var onFinish = function onFinish() {\n _this2.playRandomAnimation(_this2._playCallbacks.onError);\n };\n\n this._promises.timer = core_Utils.wait(playTimer, {\n onFinish: onFinish\n });\n }\n }, {\n key: "updateInternalWeight",\n value: function updateInternalWeight(factor) {\n RandomAnimationState_get(RandomAnimationState_getPrototypeOf(RandomAnimationState.prototype), "updateInternalWeight", this).call(this, factor);\n\n if (this._currentState) {\n this._currentState.updateInternalWeight(this._internalWeight);\n }\n }\n /**\n * Pick a random animation and utilize AnimationPlayerInterface to play that animation\n *\n * @param {Function=} onError - Function to execute if the state encounters\n * an error during playback.\n */\n\n }, {\n key: "playRandomAnimation",\n value: function playRandomAnimation(onError) {\n this._resetTimer();\n\n var states = this.getStateNames();\n\n if (this._currentState) {\n states.splice(states.indexOf(this._currentState.name), 1);\n }\n\n var randomState = states[core_Utils.getRandomInt(0, states.length)];\n this.playAnimation(randomState, this._transitionTime, this._easingFn, undefined, onError, undefined);\n }\n }, {\n key: "play",\n value: function play(onFinish, onError, onCancel) {\n this.playRandomAnimation(onError);\n return RandomAnimationState_get(RandomAnimationState_getPrototypeOf(RandomAnimationState.prototype), "play", this).call(this, onFinish, onError, onCancel);\n }\n }, {\n key: "pause",\n value: function pause() {\n return RandomAnimationState_get(RandomAnimationState_getPrototypeOf(RandomAnimationState.prototype), "pause", this).call(this) && this.pauseAnimation();\n }\n }, {\n key: "resume",\n value: function resume(onFinish, onError, onCancel) {\n if (this._currentState) {\n this.resumeAnimation(this._currentState.name, this._transitionTime, this._easingFn, undefined, onError, undefined);\n }\n\n return RandomAnimationState_get(RandomAnimationState_getPrototypeOf(RandomAnimationState.prototype), "resume", this).call(this, onFinish, onError, onCancel);\n }\n }, {\n key: "cancel",\n value: function cancel() {\n return RandomAnimationState_get(RandomAnimationState_getPrototypeOf(RandomAnimationState.prototype), "cancel", this).call(this) && this.cancelAnimation();\n }\n }, {\n key: "stop",\n value: function stop() {\n return RandomAnimationState_get(RandomAnimationState_getPrototypeOf(RandomAnimationState.prototype), "stop", this).call(this) && this.stopAnimation();\n }\n }, {\n key: "discard",\n value: function discard() {\n RandomAnimationState_get(RandomAnimationState_getPrototypeOf(RandomAnimationState.prototype), "discard", this).call(this);\n\n this.discardStates();\n }\n }]);\n\n return RandomAnimationState;\n}(animpack_AnimationPlayerInterface.Mixin(state_StateContainerInterface.Mixin(state_AbstractState)));\n\n/* harmony default export */ var state_RandomAnimationState = (RandomAnimationState_RandomAnimationState);\n// CONCATENATED MODULE: ./src/core/animpack/AnimationFeature.js\nfunction AnimationFeature_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { AnimationFeature_typeof = function _typeof(obj) { return typeof obj; }; } else { AnimationFeature_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return AnimationFeature_typeof(obj); }\n\nfunction AnimationFeature_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction AnimationFeature_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { AnimationFeature_ownKeys(Object(source), true).forEach(function (key) { AnimationFeature_defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { AnimationFeature_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction AnimationFeature_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction AnimationFeature_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction AnimationFeature_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction AnimationFeature_createClass(Constructor, protoProps, staticProps) { if (protoProps) AnimationFeature_defineProperties(Constructor.prototype, protoProps); if (staticProps) AnimationFeature_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction AnimationFeature_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { AnimationFeature_get = Reflect.get; } else { AnimationFeature_get = function _get(target, property, receiver) { var base = AnimationFeature_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return AnimationFeature_get(target, property, receiver || target); }\n\nfunction AnimationFeature_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = AnimationFeature_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction AnimationFeature_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) AnimationFeature_setPrototypeOf(subClass, superClass); }\n\nfunction AnimationFeature_setPrototypeOf(o, p) { AnimationFeature_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return AnimationFeature_setPrototypeOf(o, p); }\n\nfunction AnimationFeature_createSuper(Derived) { var hasNativeReflectConstruct = AnimationFeature_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = AnimationFeature_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = AnimationFeature_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return AnimationFeature_possibleConstructorReturn(this, result); }; }\n\nfunction AnimationFeature_possibleConstructorReturn(self, call) { if (call && (AnimationFeature_typeof(call) === "object" || typeof call === "function")) { return call; } return AnimationFeature_assertThisInitialized(self); }\n\nfunction AnimationFeature_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction AnimationFeature_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction AnimationFeature_getPrototypeOf(o) { AnimationFeature_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return AnimationFeature_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n\n\n\n\n\n\n\n/**\r\n * Enum for animation state classes.\r\n *\r\n * @readonly\r\n * @enum {Class}\r\n */\n\nvar AnimationTypes = {\n single: state_SingleState,\n freeBlend: state_FreeBlendState,\n queue: state_QueueState,\n randomAnimation: state_RandomAnimationState,\n blend1d: state_Blend1dState,\n blend2d: state_Blend2dState\n};\n/**\r\n * Feature for managing animations on an object.\r\n *\r\n * @extends AbstractHostFeature\r\n * @alias core/AnimationFeature\r\n *\r\n * @property {Object} EVENTS - Built-in messages that the feature emits. When the\r\n * feature is added to a {@link core/HostObject}, event names will be prefixed by the\r\n * name of the feature class + \'.\'.\r\n * @property {string} [EVENTS.addLayer=onAddLayerEvent] - Message that is emitted after\r\n * [addLayer]{@link core/AnimationFeature#addLayer} has been successfully executed.\r\n * An object representing the name of the layer that was added and its index in\r\n * the layer stack with the signature {name: string, index: number} is supplied\r\n * as an argument to listener functions.\r\n * @property {string} [EVENTS.removeLayer=onRemoveLayerEvent] - Message that is\r\n * emitted after [removeLayer]{@link core/AnimationFeature#removeLayer} has been\r\n * successfully executed. An object representing the name of the layer that was\r\n * removed and its index in the layer stack with the signature {name: string, index: number}\r\n * is supplied as an argument to listener functions.\r\n * @property {string} [EVENTS.renameLayer=onRenameLayerEvent] - Message that is\r\n * emitted after [renameLayer]{@link core/AnimationFeature#renameLayer} has been\r\n * successfully executed. An object representing the original name of the layer\r\n * that was renamed and its updated name with the signature {oldName: string, newName: string}\r\n * is supplied as an argument to listener functions.\r\n * @property {string} [EVENTS.addAnimation=onAddAnimationEvent] - Message that is\r\n * emitted after [addAnimation]{@link core/AnimationFeature#addAnimation} has been\r\n * successfully executed. An object representing the name of the layer that the\r\n * animation was added to and the name of the animation that was added with the\r\n * signature {layerName: string, animationName: string} is supplied as an argument\r\n * to listener functions.\r\n * @property {string} [EVENTS.removeAnimation=onRemovedAnimationEvent] - Message\r\n * that is emitted after [removeAnimation]{@link core/AnimationFeature#removeAnimation}\r\n * has been successfully executed. An object representing the name of the layer\r\n * that the animation was removed from and the name of the animation that was removed\r\n * with the signature {layerName: string, animationName: string} is supplied as\r\n * an argument to listener functions.\r\n * @property {string} [EVENTS.renameAnimation=onRenameAnimationEvent] - Message\r\n * that is emitted after [renameAnimation]{@link core/AnimationFeature#renameAnimation}\r\n * has been successfully executed. An object representing the name of the layer\r\n * that contains the animation that was renamed, the original name of the animation\r\n * that was renamed and its updated name with the signature {layerName: string, oldName: string, newName: string}\r\n * is supplied as an argument to listener functions.\r\n * @property {string} [EVENTS.play=onPlayEvent] - Message that is emitted after\r\n * each call to [play]{@link core/AnimationFeature#playAnimation}. An object representing\r\n * the name of the layer contains the animation that was played and the name of\r\n * the animation that was played with the signature {layerName: string, animationName: string}\r\n * is supplied as an argument to listener functions.\r\n * @property {string} [EVENTS.pause=onPauseEvent] - Message that is emitted after\r\n * each call to [pause]{@link core/AnimationFeature#pauseAnimation}. An object representing\r\n * the name of the layer contains the animation that was paused and the name of\r\n * the animation that was paused with the signature {layerName: string, animationName: string}\r\n * is supplied as an argument to listener functions.\r\n * @property {string} [EVENTS.resume=onResumeEvent] - Message that is emitted after\r\n * each call to [resume]{@link core/AnimationFeature#resumeAnimation}. An object representing\r\n * the name of the layer contains the animation that was resumed and the name of\r\n * the animation that was resumed with the signature {layerName: string, animationName: string}\r\n * is supplied as an argument to listener functions.\r\n * @property {string} [EVENTS.interrupt=onInterruptEvent] - Message that is emitted\r\n * if there is a current speech in progress and [play]{@link core/AnimationFeature#playAnimation}\r\n * or [resume]{@link core/AnimationFeature#resumeAnimation} are executed for a new speech.\r\n * An object representing the name of the layer contains the animation that was\r\n * interrupted and the name of the animation that was interrupted with the signature\r\n * {layerName: string, animationName: string} is supplied as an argument to listener\r\n * functions.\r\n * @property {string} [EVENTS.stop=onStopEvent] - Message that is emitted after\r\n * each call to [stop]{@link core/AnimationFeature#stopAnimation} and when a speech reaches\r\n * the end of playback. An object representing\r\n * the name of the layer contains the animation that was stopped and the name of\r\n * the animation that was stopped with the signature {layerName: string, animationName: string}\r\n * is supplied as an argument to listener functions.\r\n */\n\nvar AnimationFeature_AnimationFeature = /*#__PURE__*/function (_AbstractHostFeature) {\n AnimationFeature_inherits(AnimationFeature, _AbstractHostFeature);\n\n var _super = AnimationFeature_createSuper(AnimationFeature);\n\n /**\r\n * @constructor\r\n *\r\n * @param {core/HostObject} host - Host object that owns the feature.\r\n */\n function AnimationFeature(host) {\n var _this;\n\n AnimationFeature_classCallCheck(this, AnimationFeature);\n\n _this = _super.call(this, host);\n _this._layers = [];\n _this._layerMap = {};\n _this._paused = false;\n return _this;\n }\n /**\r\n * Make sure a supplied layer index is within the range of layers.\r\n *\r\n * @private\r\n *\r\n * @param {number} index\r\n * @param {boolean} [existing=true] - Whether the index represents and existing\r\n * layer or a new layer to be added.\r\n *\r\n * @returns {number=}\r\n */\n\n\n AnimationFeature_createClass(AnimationFeature, [{\n key: "_validateIndex",\n value: function _validateIndex(index) {\n var existing = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\n // Index is invalid if there are no layers and we\'re checking for an existing layer index\n if (this._layers.length === 0 && existing) {\n return undefined;\n }\n\n var lastIndex = existing ? this._layers.length - 1 : this._layers.length; // Count from the end of the array for negative indices\n\n if (index < 0) {\n index = lastIndex + index + 1;\n }\n\n if (index < 0 || index > lastIndex) {\n return undefined;\n } else {\n return index;\n }\n }\n /**\r\n * Re-evaluate internal weight values of layers starting from the top of the\r\n * stack. Override layers\' weights affect the values of all layers lower in the\r\n * stack.\r\n *\r\n * @private\r\n */\n\n }, {\n key: "_updateInternalWeights",\n value: function _updateInternalWeights() {\n var numLayers = this._layers.length;\n var weightMultiplier = 1; // Update internal weight values on layers in reverse order\n\n for (var i = numLayers - 1; i >= 0; i--) {\n var layer = this._layers[i];\n layer.updateInternalWeight(weightMultiplier); // If the layer is override, update the multiplier with the remainder of the full weight\n\n if (layer.blendMode === LayerBlendModes.Override && layer.currentState) {\n weightMultiplier *= 1 - layer.currentState.internalWeight;\n }\n }\n }\n /**\r\n * Return a new instance of a SingleState.\r\n *\r\n * @private\r\n *\r\n * @param {Object} options - Options to pass to the SingleState constructor.\r\n * @param {string=} options.name - Name for the animation state. Names must be\r\n * unique for the layer the state is applied to.\r\n * @param {weight} [options.weight=0] - The 0-1 amount of influence the state will have.\r\n * @param {timeScale} [options.timeScale=1] - Factor to scale the playback speed of the\r\n * animation.\r\n * @param {number} [options.loopCount=Infinity] - Number of times the animation should\r\n * repeat before finishing.\r\n * @param {string} [options.blendMode=LayerBlendModes[DefaultLayerBlendMode]] - Type of\r\n * blending the animation should use.\r\n *\r\n * @returns {core/SingleState}\r\n */\n\n }, {\n key: "_createSingleState",\n value: function _createSingleState(options) {\n return new state_SingleState(options);\n }\n /**\r\n * Return a new instance of a FreeBlendState.\r\n *\r\n * @private\r\n *\r\n * @param {Object} options - Options to pass to the FreeBlendState constructor.\r\n * @param {string=} options.name - Name for the animation state. Names must be\r\n * unique for the layer the state is applied to.\r\n * @param {weight} [options.weight=0] - The 0-1 amount of influence the state will have.\r\n * @param {timeScale} [options.timeScale=1] - Factor to scale the playback speed of the\r\n * animation.\r\n * @param {number} [options.loopCount=Infinity] - Number of times the animation should\r\n * repeat before finishing.\r\n * @param {string} [options.blendMode=LayerBlendModes[DefaultLayerBlendMode]] - Type of\r\n * blending the animation should use.\r\n * @param {Array.} [options.blendStateOptions] - Array of options used to create the\r\n * blend states for this container.\r\n *\r\n * @returns {FreeBlendState}\r\n */\n\n }, {\n key: "_createFreeBlendState",\n value: function _createFreeBlendState(options) {\n var _this2 = this;\n\n var _options$blendStateOp = options.blendStateOptions,\n blendStateOptions = _options$blendStateOp === void 0 ? [] : _options$blendStateOp;\n var blendStates = [];\n blendStateOptions.forEach(function (blendOptions) {\n blendStates.push(_this2._createSingleState(AnimationFeature_objectSpread(AnimationFeature_objectSpread({}, blendOptions), {}, {\n blendMode: options.blendMode\n })));\n });\n return new state_FreeBlendState(options, blendStates);\n }\n /**\r\n * Return a new instance of a QueueState.\r\n *\r\n * @private\r\n *\r\n * @param {Object} options - Options to pass to the QueueState constructor.\r\n * @param {string=} options.name - Name for the animation state. Names must be\r\n * unique for the layer the state is applied to.\r\n * @param {number} [options.weight=0] - The 0-1 amount of influence the state will have.\r\n * @param {number=} options.transitionTime - The amount of time it takes to transition\r\n * between queued states.\r\n * @param {string} [options.blendMode=LayerBlendModes[DefaultLayerBlendMode]] - Type of\r\n * blending the animation should use.\r\n * @param {Array.} [options.queueOptions] - Array of options used to create the\r\n * queue states for this container.\r\n *\r\n * @returns {QueueState}\r\n */\n\n }, {\n key: "_createQueueState",\n value: function _createQueueState(options) {\n var _this3 = this;\n\n var _options$queueOptions = options.queueOptions,\n queueOptions = _options$queueOptions === void 0 ? [] : _options$queueOptions;\n var queueStates = queueOptions.map(function (queueOption) {\n return _this3._createSingleState(AnimationFeature_objectSpread(AnimationFeature_objectSpread({\n transitionTime: options.transitionTime\n }, queueOption), {}, {\n blendMode: options.blendMode\n }));\n });\n return new state_QueueState(options, queueStates);\n }\n /**\r\n * Return a new instance of a Blend1dState.\r\n *\r\n * @private\r\n *\r\n * @param {Object} options - Options to pass to the Blend1dState constructor.\r\n * @param {string=} options.name - Name for the animation state. Names must be\r\n * unique for the layer the state is applied to.\r\n * @param {weight} [options.weight=0] - The 0-1 amount of influence the state will have.\r\n * @param {timeScale} [options.timeScale=1] - Factor to scale the playback speed of the\r\n * animation.\r\n * @param {number} [options.loopCount=Infinity] - Number of times the animation should\r\n * repeat before finishing.\r\n * @param {string} [options.blendMode=LayerBlendModes[DefaultLayerBlendMode]] - Type of\r\n * blending the animation should use.\r\n * @param {Array.} [options.blendStateOptions] - Array of options used to create the\r\n * blend states for this container.\r\n * @param {Array.} [options.blendThresholds] - Array of numbers used to set the\r\n * thresholds for each blend state in this container.\r\n * @param {Array.} [options.blendMatchPhases=[]] - Optional array of booleans used to\r\n * set whether or not each blend state in this container will match phases.\r\n *\r\n * @returns {Blend1dState}\r\n */\n\n }, {\n key: "_createBlend1dState",\n value: function _createBlend1dState(options) {\n var _this4 = this;\n\n var _options$blendStateOp2 = options.blendStateOptions,\n blendStateOptions = _options$blendStateOp2 === void 0 ? [] : _options$blendStateOp2;\n var _options$blendThresho = options.blendThresholds,\n blendThresholds = _options$blendThresho === void 0 ? [] : _options$blendThresho;\n var _options$blendMatchPh = options.blendMatchPhases,\n blendMatchPhases = _options$blendMatchPh === void 0 ? [] : _options$blendMatchPh;\n var blendStates = [];\n blendStateOptions.forEach(function (blendOptions) {\n blendStates.push(_this4._createSingleState(AnimationFeature_objectSpread(AnimationFeature_objectSpread({}, blendOptions), {}, {\n blendMode: options.blendMode\n })));\n });\n return new state_Blend1dState(options, blendStates, blendThresholds, blendMatchPhases);\n }\n /**\r\n * Return a new instance of a Blend2dState.\r\n *\r\n * @private\r\n *\r\n * @param {Object} options - Options to pass to the Blend1dState constructor.\r\n * @param {string=} options.name - Name for the animation state. Names must be\r\n * unique for the layer the state is applied to.\r\n * @param {weight} [options.weight=0] - The 0-1 amount of influence the state will have.\r\n * @param {timeScale} [options.timeScale=1] - Factor to scale the playback speed of the\r\n * animation.\r\n * @param {number} [options.loopCount=Infinity] - Number of times the animation should\r\n * repeat before finishing.\r\n * @param {string} [options.blendMode=LayerBlendModes[DefaultLayerBlendMode]] - Type of\r\n * blending the animation should use.\r\n * @param {Array.} [options.blendStateOptions] - Array of options used to create the\r\n * blend states for this container.\r\n * @param {Array.>} [options.blendThresholds] - Array of Array of numbers used to set the\r\n * thresholds for each blend state in this container.\r\n * @param {Array.} [options.blendMatchPhases=[]] - Optional array of booleans used to\r\n * set whether or not each blend state in this container will match phases.\r\n *\r\n * @returns {Blend1dState}\r\n */\n\n }, {\n key: "_createBlend2dState",\n value: function _createBlend2dState(options) {\n var _this5 = this;\n\n var _options$blendStateOp3 = options.blendStateOptions,\n blendStateOptions = _options$blendStateOp3 === void 0 ? [] : _options$blendStateOp3;\n var _options$blendThresho2 = options.blendThresholds,\n blendThresholds = _options$blendThresho2 === void 0 ? [] : _options$blendThresho2;\n var _options$blendMatchPh2 = options.blendMatchPhases,\n blendMatchPhases = _options$blendMatchPh2 === void 0 ? [] : _options$blendMatchPh2;\n var blendStates = [];\n blendStateOptions.forEach(function (blendOptions) {\n blendStates.push(_this5._createSingleState(AnimationFeature_objectSpread(AnimationFeature_objectSpread({}, blendOptions), {}, {\n blendMode: options.blendMode\n })));\n });\n return new state_Blend2dState(options, blendStates, blendThresholds, blendMatchPhases);\n }\n /**\r\n * Return a new instance of a RandomAnimationState.\r\n *\r\n * @private\r\n *\r\n * @param {Object} options - Options to pass to the RandomAnimationState constructor.\r\n * @param {string=} options.name - Name for the animation state. Names must be\r\n * unique for the layer the state is applied to.\r\n * @param {number} [options.playInterval=3] - The base animation playback interval.\r\n * @param {Array.} [options.subStateOptions] - Array of options used to create the\r\n * sub states for this container.\r\n *\r\n * @returns {RandomAnimationState}\r\n */\n\n }, {\n key: "_createRandomAnimationState",\n value: function _createRandomAnimationState(options) {\n var _this6 = this;\n\n var _options$subStateOpti = options.subStateOptions,\n subStateOptions = _options$subStateOpti === void 0 ? [] : _options$subStateOpti;\n var subStates = [];\n subStateOptions.forEach(function (subStateOptions) {\n subStates.push(_this6._createSingleState(AnimationFeature_objectSpread(AnimationFeature_objectSpread({}, subStateOptions), {}, {\n blendMode: options.blendMode\n })));\n });\n return new state_RandomAnimationState(options, subStates);\n }\n /**\r\n * Make sure the layer with the given name exists and return a unique version\r\n * of the animation name supplied for that layer.\r\n *\r\n * @private\r\n *\r\n * @param {string} layerName - Name of the layer to check against.\r\n * @param {string} animationName - Name of the animation to validate.\r\n *\r\n * @returns {string} Validated animation name.\r\n */\n\n }, {\n key: "_validateNewAnimation",\n value: function _validateNewAnimation(layerName, animationName) {\n // Make sure the layerName is valid\n var layer = this._layerMap[layerName];\n\n if (layer === undefined) {\n throw new Error("Cannot add animation to layer ".concat(layerName, " from host ").concat(this._host.id, ". No layer exists with this name."));\n } // Make sure the animationName is unique\n\n\n var name = core_Utils.getUniqueName(animationName, layer.getStateNames());\n\n if (name !== animationName) {\n console.warn("Animation name ".concat(animationName, " is not unique for layer ").concat(layer.name, ". Animation will be renamed to ").concat(name, "."));\n }\n\n return name;\n }\n /**\r\n * Gets whether or not all animations are paused.\r\n *\r\n * @readonly\r\n * @type {boolean}\r\n */\n\n }, {\n key: "paused",\n get: function get() {\n return this._paused;\n }\n /**\r\n * Gets an array of names of animation layers.\r\n *\r\n * @readonly\r\n * @type {Array.}\r\n */\n\n }, {\n key: "layers",\n get: function get() {\n return this._layers.map(function (layer) {\n return layer.name;\n });\n }\n /**\r\n * Create and store a new animation layer.\r\n *\r\n * @param {string} [name=\'NewLayer\'] - Name for the layer.\r\n * @param {Object} [options={}] - Options to pass to {@link AnimationLayer#constructor}\r\n * @param {index=} index - Index to insert the new layer at. If none is provided\r\n * it will be added to the end of the stack.\r\n *\r\n * @returns {number} Index of the new layer.\r\n */\n\n }, {\n key: "addLayer",\n value: function addLayer() {\n var name = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : \'NewLayer\';\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var index = arguments.length > 2 ? arguments[2] : undefined;\n var numLayers = this._layers.length;\n var layerIndex = index; // Make sure the given index is within the range of layers\n\n if (index === undefined || index === -1) {\n layerIndex = this._layers.length;\n } else {\n layerIndex = this._validateIndex(index, false);\n\n if (layerIndex === undefined) {\n // Insert at the beginning if the user passed in a negative index\n if (index < 0) {\n layerIndex = 0;\n } // Otherwise append to the end\n else {\n layerIndex = this._layers.length;\n }\n\n console.warn("Index ".concat(index, " is invalid for host ").concat(this._host.id, ". New layer will be added at the closest valid index: ").concat(layerIndex, "."));\n }\n } // Make sure the layer name is unique\n\n\n var layerName = core_Utils.getUniqueName(name, Object.keys(this._layerMap));\n\n if (name !== layerName) {\n console.warn("Layer name ".concat(name, " is not unique. New layer will be added with the name ").concat(layerName, "."));\n }\n\n var layer = new animpack_AnimationLayer(AnimationFeature_objectSpread(AnimationFeature_objectSpread({}, options), {}, {\n name: layerName\n }));\n this._layerMap[layerName] = layer;\n\n if (layerIndex === numLayers) {\n this._layers.push(layer);\n } else {\n this._layers.splice(layerIndex, 0, layer);\n } // Notify that a layer has been added to the feature\n\n\n var eventData = {\n name: layerName,\n index: layerIndex\n };\n this.emit(this.constructor.EVENTS.addLayer, eventData);\n return eventData;\n }\n /**\r\n * Remove an animation layer from the stack. Animations on this layer will no\r\n * longer be evaluated.\r\n *\r\n * @param {string} name - Name for the layer to remove.\r\n *\r\n * @returns {boolean} Whether or not removal was successful.\r\n */\n\n }, {\n key: "removeLayer",\n value: function removeLayer(name) {\n var layer = this._layerMap[name];\n\n if (layer === undefined) {\n console.warn("Did not remove layer ".concat(name, " from host ").concat(this._host.id, ". No layer exists with this name."));\n return false;\n }\n\n layer.discard();\n\n var index = this._layers.indexOf(layer);\n\n this._layers.splice(index, 1);\n\n delete this._layerMap[name]; // Notify that a layer has been removed from the feature\n\n this.emit(this.constructor.EVENTS.removeLayer, {\n name: name,\n index: index\n });\n return true;\n }\n /**\r\n * Re-order the layer stack so that the layer with the given name is positioned\r\n * at the given index.\r\n *\r\n * @param {string} name - Name of the layer to move.\r\n * @param {number} index - New index to position the layer at.\r\n *\r\n * @returns {number} The new index of the layer\r\n */\n\n }, {\n key: "moveLayer",\n value: function moveLayer(name, index) {\n // Make sure the name is valid\n var layer = this._layerMap[name];\n\n if (layer === undefined) {\n throw new Error("Cannot move layer ".concat(name, " from host ").concat(this._host.id, ". No layer exists with this name."));\n } // Make sure the index falls in the range of existing layers\n\n\n var layerIndex = this._validateIndex(index, true);\n\n var lastIndex = this._layers.length - 1;\n\n if (layerIndex === undefined) {\n throw new Error("Cannot move layer ".concat(name, " from host ").concat(this._host.id, " to index ").concat(index, ". Index must be in the 0 - ").concat(lastIndex, " range."));\n }\n\n var currentIndex = this._layers.indexOf(layer);\n\n if (currentIndex === layerIndex) {\n return;\n } // Remove from the current position\n\n\n this._layers.splice(currentIndex, 1); // Insert at the new position\n\n\n if (layerIndex === lastIndex) {\n this._layers.push(layer);\n } else {\n this._layers.splice(layerIndex, 0, layer);\n }\n\n return layerIndex;\n }\n /**\r\n * Update the name of a layer. Names must be unique, if the new name is not\r\n * unique it will have trailing numbers appended until it is unique.\r\n *\r\n * @param {string} currentName - Current name of the layer.\r\n * @param {string} newName - New name to set on the layer.\r\n *\r\n * @returns {string} The new name of the layer\r\n */\n\n }, {\n key: "renameLayer",\n value: function renameLayer(currentName, newName) {\n // Make sure the name is valid\n var layer = this._layerMap[currentName];\n\n if (layer === undefined) {\n throw new Error("Cannot rename layer ".concat(currentName, " from host ").concat(this._host.id, ". No layer exists with this name."));\n } // Make sure the layer name is unique\n\n\n var name = core_Utils.getUniqueName(newName, Object.keys(this._layerMap));\n\n if (name !== newName) {\n console.warn("Layer name ".concat(newName, " is not unique. Layer will be renamed to ").concat(name, "."));\n }\n\n delete this._layerMap[currentName];\n this._layerMap[name] = layer;\n layer.name = name; // Notify that a layer has been renamed on the feature\n\n this.emit(this.constructor.EVENTS.renameLayer, {\n oldName: currentName,\n newName: name\n });\n return name;\n }\n /**\r\n * Return the weight of an animation layer.\r\n *\r\n * @param {string} name - Name of the layer to return weight from.\r\n *\r\n * @returns {number}\r\n */\n\n }, {\n key: "getLayerWeight",\n value: function getLayerWeight(name) {\n // Make sure the name is valid\n var layer = this._layerMap[name];\n\n if (layer === undefined) {\n throw new Error("Cannot get weight on layer ".concat(name, " from host ").concat(this._host.id, ". No layer exists with this name."));\n }\n\n return layer.weight;\n }\n /**\r\n * Update the weight of an animation layer.\r\n *\r\n * @param {string} name - The name of the layer to update.\r\n * @param {number} weight - The weight value to set on the layer. This number\r\n * should be in the 0-1 range.\r\n * @param {number=} seconds - The number of seconds it should take to reach the\r\n * new weight. Default is zero and will set immediately.\r\n * @param {Function=} easingFn - The easing function to use while interpolating\r\n * the weight. Default is Easing.Linear.InOut.\r\n *\r\n * @returns {Deferred} A promise that will resolve once the layer\'s weight reaches\r\n * the target value.\r\n */\n\n }, {\n key: "setLayerWeight",\n value: function setLayerWeight(name, weight, seconds, easingFn) {\n // Make sure the name is valid\n var layer = this._layerMap[name];\n\n if (layer === undefined) {\n var e = "Cannot set weight on layer ".concat(name, " from host ").concat(this._host.id, ". No layer exists with this name.");\n return core_Deferred.reject(e);\n }\n\n return layer.setWeight(weight, seconds, easingFn);\n }\n /**\r\n * Returns the names of blend states in an animation in a layer.\r\n *\r\n * @param {string} layerName - Name of the layer containing the animation containing\r\n * the blend state to update.\r\n * @param {string} animationName - Name of the animation containing the blend state\r\n * to update.\r\n *\r\n * @returns {Array.} - Names of blend states.\r\n */\n\n }, {\n key: "getAnimationBlendNames",\n value: function getAnimationBlendNames(layerName, animationName) {\n var layer = this._layerMap[layerName];\n\n if (layer === undefined) {\n throw new Error("Cannot get blend names on layer ".concat(layerName, " from host ").concat(this._host.id, ". No layer exists with this name."));\n }\n\n return layer.getAnimationBlendNames(animationName);\n }\n /**\r\n * Update the weight for a blend state in an animation in a layer.\r\n *\r\n * @param {string} layerName - Name of the layer containing the animation containing\r\n * the blend state to update.\r\n * @param {string} animationName - Name of the animation containing the blend state\r\n * to update.\r\n * @param {string} blendName - Name of the blend state to update.\r\n * @param {number} weight - Weight value to set on the animation. This number shoudld be\r\n * in the 0-1 range.\r\n * @param {number=} seconds - Number of seconds it should take to reach the new weight.\r\n * Default is zero and will set immediately.\r\n * @param {Function=} easingFn - Easing function to use while interpolating the new\r\n * weight. Default is Easing.Linear.InOut.\r\n *\r\n * @returns {Deferred} - Promise that will resolve once the animation\'s weight reaches\r\n * the target value.\r\n */\n\n }, {\n key: "setAnimationBlendWeight",\n value: function setAnimationBlendWeight(layerName, animationName, blendName, weight, seconds, easingFn) {\n var layer = this._layerMap[layerName];\n\n if (layer === undefined) {\n var e = "Cannot set blend weight on layer ".concat(layerName, " from host ").concat(this._host.id, ". No layer exists with this name.");\n return core_Deferred.reject(e);\n }\n\n return layer.setAnimationBlendWeight(animationName, blendName, weight, seconds, easingFn);\n }\n /**\r\n * Returns the weight for a blend state in an animation in a layer.\r\n *\r\n * @param {string} layerName - Name of the layer containing the animation containing\r\n * the blend state to update.\r\n * @param {string} animationName - Name of the animation containing the blend state\r\n * to update.\r\n * @param {string} blendName - Name of the blend state to update.\r\n *\r\n * @returns {number} - Weight of the blend state.\r\n */\n\n }, {\n key: "getAnimationBlendWeight",\n value: function getAnimationBlendWeight(layerName, animationName, blendName) {\n var layer = this._layerMap[layerName];\n\n if (layer === undefined) {\n throw new Error("Cannot get blend weight on layer ".concat(layerName, " from host ").concat(this._host.id, ". No layer exists with this name."));\n }\n\n return layer.getAnimationBlendWeight(animationName, blendName);\n }\n /**\r\n * Pause weight interpolation animation on a layer with the given name.\r\n *\r\n * @param {string} name - Name of the layer to pause.\r\n *\r\n * @returns {boolean} - Whether or not there was an existing interpolation to pause.\r\n */\n\n }, {\n key: "pauseLayerWeight",\n value: function pauseLayerWeight(name) {\n // Make sure the name is valid\n var layer = this._layerMap[name];\n\n if (layer === undefined) {\n throw new Error("Cannot pause weight interpolation on layer ".concat(name, " from host ").concat(this._host.id, ". No layer exists with this name."));\n }\n\n return layer.pauseWeight();\n }\n /**\r\n * Resume weight interpolation animation on a layer with the given name.\r\n *\r\n * @param {string} name - Name of the layer to resume.\r\n *\r\n * @returns {Deferred} - Resolves once the layer\'s weight reaches its target value.\r\n */\n\n }, {\n key: "resumeLayerWeight",\n value: function resumeLayerWeight(name) {\n // Make sure the name is valid\n var layer = this._layerMap[name];\n\n if (layer === undefined) {\n var e = "Cannot resume weight interpolation on layer ".concat(name, " from host ").concat(this._host.id, ". No layer exists with this name.");\n return core_Deferred.reject(e);\n }\n\n return layer.resumeWeight();\n }\n /**\r\n * Pause current animation and weight interpolation animation on a layer with\r\n * the given name.\r\n *\r\n * @param {string} name - Name of the layer to pause.\r\n *\r\n * @returns {boolean} - Whether or not there was an existing interpolation or\r\n * current animation to pause.\r\n */\n\n }, {\n key: "pauseLayer",\n value: function pauseLayer(name) {\n // Make sure the name is valid\n var layer = this._layerMap[name];\n\n if (layer === undefined) {\n throw new Error("Cannot pause layer ".concat(name, " from host ").concat(this._host.id, ". No layer exists with this name."));\n }\n\n return layer.pause();\n }\n /**\r\n * Resume current animation and weight interpolation animation on a layer with\r\n * the given name.\r\n *\r\n * @param {string} name - Name of the layer to resume.\r\n *\r\n * @returns {Deferred} - Resolves once the layer\'s weight reaches its target value\r\n * and it\'s current animation finishes playing.\r\n */\n\n }, {\n key: "resumeLayer",\n value: function resumeLayer(name) {\n // Make sure the name is valid\n var layer = this._layerMap[name];\n\n if (layer === undefined) {\n var e = "Cannot resume layer ".concat(name, " from host ").concat(this._host.id, ". No layer exists with this name.");\n return core_Deferred.reject(e);\n }\n\n return layer.resume();\n }\n /**\r\n * Return whether or not the animation layer with the given name is currently\r\n * transitioning between animations.\r\n *\r\n * @param {string} layerName - Name of the layer to check.\r\n *\r\n * @returns {boolean}\r\n */\n\n }, {\n key: "getTransitioning",\n value: function getTransitioning(layerName) {\n // Make sure the layerName is valid\n var layer = this._layerMap[layerName];\n\n if (layer === undefined) {\n throw new Error("Get transitioning on layer ".concat(layerName, " from host ").concat(this._host.id, ". No layer exists with this name."));\n }\n\n return layer.isTransitioning;\n }\n /**\r\n * Return an array of the names of all states the layer with the given name controls.\r\n *\r\n * @param {string} layerName - Name of the layer to search.\r\n *\r\n * @returns {Array.}\r\n */\n\n }, {\n key: "getAnimations",\n value: function getAnimations(layerName) {\n // Make sure the layerName is valid\n var layer = this._layerMap[layerName];\n\n if (layer === undefined) {\n throw new Error("Get animations on layer ".concat(layerName, " from host ").concat(this._host.id, ". No layer exists with this name."));\n }\n\n return layer.getStateNames();\n }\n /**\r\n * Return the name of the state currently active on the layer with the given name.\r\n * Return null if there is no current animation for the layer.\r\n *\r\n * @param {string} layerName - Name of the layer.\r\n *\r\n * @returns {(string|null)}\r\n */\n\n }, {\n key: "getCurrentAnimation",\n value: function getCurrentAnimation(layerName) {\n // Make sure the layerName is valid\n var layer = this._layerMap[layerName];\n\n if (layer === undefined) {\n throw new Error("Get current animation on layer ".concat(layerName, " from host ").concat(this._host.id, ". No layer exists with this name."));\n }\n\n return layer.currentAnimation;\n }\n /**\r\n * Return whether or not a layer with the given name is currently playing an\r\n * animation and that animation is paused.\r\n *\r\n * @param {string} layerName - Name of the layer.\r\n *\r\n * @returns {boolean}\r\n */\n\n }, {\n key: "getPaused",\n value: function getPaused(layerName) {\n // Make sure the layerName is valid\n var layer = this._layerMap[layerName];\n\n if (layer === undefined) {\n throw new Error("Get paused on layer ".concat(layerName, " from host ").concat(this._host.id, ". No layer exists with this name."));\n }\n\n return layer.currentState && layer.currentState.paused;\n }\n /**\r\n * Return the type name of the given animation. @see AnimationTypes.\r\n *\r\n * @param {string} layerName - Name of the layer that contains the animation.\r\n * @param {string} animationName - Name of the animation to check.\r\n *\r\n * @returns {string}\r\n */\n\n }, {\n key: "getAnimationType",\n value: function getAnimationType(layerName, animationName) {\n // Make sure the layerName is valid\n var layer = this._layerMap[layerName];\n\n if (layer === undefined) {\n throw new Error("Get animation type on layer ".concat(layerName, " from host ").concat(this._host.id, ". No layer exists with this name."));\n }\n\n var state = layer.getState(animationName);\n\n if (state === undefined) {\n throw new Error("Get animation type for animation ".concat(animationName, " on layer ").concat(layerName, " from host ").concat(this._host.id, ". No animation exists with this name."));\n }\n\n var constructor = state.constructor;\n return Object.keys(AnimationTypes).find(function (typeName) {\n return AnimationTypes[typeName] === constructor;\n });\n }\n /**\r\n * Add a new animation to an animation layer.\r\n *\r\n * @param {string} layerName - Name of the layer to add the animation to.\r\n * @param {string} animationName - Name to use when calling the animation.\r\n * @param {Object=} options - Options to pass to the constructor for the new\r\n * SingleState animation.\r\n *\r\n * @returns {string} - The name of the animation that was added\r\n */\n\n }, {\n key: "addAnimation",\n value: function addAnimation(layerName, animationName) {\n var animationType = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : AnimationTypes.single;\n var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n options.name = this._validateNewAnimation(layerName, animationName); // Make sure the animation type is valid\n\n if (!Object.values(AnimationTypes).includes(animationType)) {\n throw new Error("Cannot add animation ".concat(animationName, " to layer ").concat(layerName, " on host ").concat(this._host.id, ". Invalid animation type."));\n }\n\n var layer = this._layerMap[layerName];\n options.blendMode = layer.blendMode;\n options.transitionTime = layer.transitionTime;\n var state = this["_create".concat(animationType.name)](options);\n var name = layer.addState(state); // Notify that an animation has been added to the feature\n\n this.emit(this.constructor.EVENTS.addAnimation, {\n layerName: layerName,\n animationName: name\n });\n return name;\n }\n /**\r\n * Remove an animation from an animation layer.\r\n *\r\n * @param {string} layerName - Name of the layer to remove the animation from.\r\n * @param {string} name - Name of the animation to remove.\r\n *\r\n * @returns {boolean}\r\n */\n\n }, {\n key: "removeAnimation",\n value: function removeAnimation(layerName, animationName) {\n // Make sure the name is valid\n var layer = this._layerMap[layerName];\n\n if (layer === undefined) {\n throw new Error("Cannot remove animation from layer ".concat(layerName, " from host ").concat(this._host.id, ". No layer exists with this name."));\n }\n\n var removed = layer.removeState(animationName); // Notify that an animation has been removed from the feature\n\n if (removed === true) {\n this.emit(this.constructor.EVENTS.removeAnimation, {\n layerName: layerName,\n animationName: animationName\n });\n }\n\n return removed;\n }\n /**\r\n * Update the name of an animation. Names must be unique on each layer, if the new\r\n * name is not unique it will have trailing numbers appended until it is unique.\r\n *\r\n * @param {string} layerName - Name of the layer that contains the animation that\r\n * will be renamed,\r\n * @param {string} currentAnimationName - Current name of the animation.\r\n * @param {string} newAnimationName - New name to set on the animation.\r\n *\r\n * @returns {string} - The new name of the animation\r\n */\n\n }, {\n key: "renameAnimation",\n value: function renameAnimation(layerName, currentAnimationName, newAnimationName) {\n var layer = this._layerMap[layerName];\n\n if (layer === undefined) {\n throw new Error("Cannot rename animation ".concat(currentAnimationName, " on layer ").concat(layerName, " for host ").concat(this._host.id, ". No layer exists with this name."));\n }\n\n var name = layer.renameState(currentAnimationName, newAnimationName); // Notify that an animation has been renamed on the feature\n\n this.emit(this.constructor.EVENTS.renameAnimation, {\n layerName: layerName,\n oldName: currentAnimationName,\n newName: name\n });\n return name;\n }\n /**\r\n * Pause the currently playing animation and play a new animation from the beginning.\r\n *\r\n * @param {string} layerName - Name of the layer that contains the animation.\r\n * @param {string} animationName - Name of the animation state to play.\r\n * @param {number=} seconds - The number of seconds it should take to transition\r\n * to the new animation. Default is zero and will set immediately.\r\n * @param {Function=} easingFn - The easing function to use while transitioning\r\n * between animations. Default is Easing.Linear.InOut.\r\n *\r\n * @returns {Deferred} - Resolves once the animation reaches the end of its\r\n * timeline. Looping animations can only resolve if they are interrupted or\r\n * manually stopped.\r\n */\n\n }, {\n key: "playAnimation",\n value: function playAnimation(layerName, animationName, seconds, easingFn) {\n var _this7 = this;\n\n var layer = this._layerMap[layerName];\n\n if (layer === undefined) {\n var e = "Cannot play animation ".concat(animationName, " on layer ").concat(layerName, " for host ").concat(this._host.id, ". No layer exists with this name.");\n return core_Deferred.reject(e);\n } // Notify that a new animation has begun\n\n\n this.emit(this.constructor.EVENTS.playAnimation, {\n layerName: layerName,\n animationName: animationName\n });\n return layer.playAnimation(animationName, seconds, easingFn, function () {\n // Notify that an animation has stopped\n _this7.emit(_this7.constructor.EVENTS.stopAnimation, {\n layerName: layerName,\n animationName: animationName\n });\n }, undefined, function () {\n // Notify that an animation has been interrupted\n _this7.emit(_this7.constructor.EVENTS.interruptAnimation, {\n layerName: layerName,\n animationName: animationName\n });\n }, function (_ref) {\n var name = _ref.name,\n canAdvance = _ref.canAdvance,\n isQueueEnd = _ref.isQueueEnd;\n\n if (layer.currentAnimation === animationName) {\n // Notify that a new animation has begun\n _this7.emit(_this7.constructor.EVENTS.playNextAnimation, {\n layerName: layerName,\n animationName: animationName,\n nextQueuedAnimation: name,\n canAdvance: canAdvance,\n isQueueEnd: isQueueEnd\n });\n }\n });\n }\n /**\r\n * Play the next animation in the queue of a QueueState animation.\r\n *\r\n * @param {string} layerName - Name of the layer that contains the queue animation.\r\n * @param {string=} animationName - Name of the animation queue animation. Defaults\r\n * to the name of the current animation for the layer.\r\n * @param {number=} seconds - The number of seconds it should take to transition\r\n * to the queue animation if it\'s not already currently playing. Default is zero\r\n * and will set immediately.\r\n * @param {Function=} easingFn - The easing function to use while transitioning\r\n * to the queue animation if it isn\'t already playing. Default is Easing.Linear.InOut.\r\n *\r\n * @returns {Deferred} - Resolves once the last animation in the queue finishes\r\n * playing.\r\n */\n\n }, {\n key: "playNextAnimation",\n value: function playNextAnimation(layerName, animationName, transitionTime, easingFn) {\n var _this8 = this;\n\n var layer = this._layerMap[layerName];\n\n if (layer === undefined) {\n var e = "Cannot play next animation on layer ".concat(layerName, " for host ").concat(this._host.id, ". No layer exists with this name.");\n return core_Deferred.reject(e);\n }\n\n if (animationName === undefined) {\n animationName = layer.currentAnimation;\n }\n\n var animation = layer.getState(layer.currentAnimation);\n\n if (animation === null) {\n var _e = "Cannot play next animation on layer ".concat(layerName, " for host ").concat(this._host.id, ". No animation exists with name ").concat(animationName, ".");\n\n return core_Deferred.reject(_e);\n } else if (this.getAnimationType(layerName, animationName) !== \'queue\') {\n var _e2 = "Cannot play next animation on layer ".concat(layerName, " for host ").concat(this._host.id, ". ").concat(animationName, " is not a queue state.");\n\n return core_Deferred.reject(_e2);\n }\n\n var onNext = function onNext(_ref2) {\n var name = _ref2.name,\n canAdvance = _ref2.canAdvance,\n isQueueEnd = _ref2.isQueueEnd;\n\n if (layer.currentAnimation === animationName) {\n // Notify that a new animation has begun\n _this8.emit(_this8.constructor.EVENTS.playNextAnimation, {\n layerName: layerName,\n animationName: animationName,\n nextQueuedAnimation: name,\n canAdvance: canAdvance,\n isQueueEnd: isQueueEnd\n });\n }\n }; // Make the queue animation current if it wasn\'t already\n\n\n if (layer.currentAnimation === null) {\n layer.resumeAnimation(animation.name, transitionTime, easingFn, undefined, undefined, undefined, onNext);\n }\n\n return animation.next(onNext, true);\n }\n /**\r\n * Pause the current animation on a layer.\r\n *\r\n * @param {string} name - Name of the layer to pause.\r\n *\r\n * @returns {boolean} Whether or not an animation was successfully paused.\r\n */\n\n }, {\n key: "pauseAnimation",\n value: function pauseAnimation(name) {\n var layer = this._layerMap[name];\n\n if (layer === undefined) {\n console.warn("Did not pause animation on layer ".concat(name, " for host ").concat(this._host.id, ". No layer exists with this name."));\n return false;\n }\n\n var paused = layer.pauseAnimation(); // Notify that an animation was paused\n\n if (paused) {\n var animationName = layer.currentAnimation;\n this.emit(this.constructor.EVENTS.pauseAnimation, {\n layerName: name,\n animationName: animationName\n });\n }\n\n return paused;\n }\n /**\r\n * Pause the currently playing animation and play a new animation from where it\r\n * last left off.\r\n *\r\n * @param {string} layerName - Name of the layer that contains the animation.\r\n * @param {string=} animationName - Name of the animation state to resume. Defaults\r\n * to the name of the current animation for the layer.\r\n * @param {number=} seconds - The number of seconds it should take to transition\r\n * to the new animation. Default is zero and will set immediately.\r\n * @param {Function=} easingFn - The easing function to use while transitioning\r\n * between animations. Default is Easing.Linear.InOut.\r\n *\r\n * @returns {Deferred} - Resolves once the animation reaches the end of its\r\n * timeline. Looping animations can only resolve if they are interrupted or\r\n * manually stopped.\r\n */\n\n }, {\n key: "resumeAnimation",\n value: function resumeAnimation(layerName, animationName, seconds, easingFn) {\n var _this9 = this;\n\n var layer = this._layerMap[layerName];\n\n if (layer === undefined) {\n var e = "Cannot resume animation ".concat(animationName, " on layer ").concat(layerName, " for host ").concat(this._host.id, ". No layer exists with this name.");\n return core_Deferred.reject(e);\n } // Notify that an animation was resumed\n\n\n this.emit(this.constructor.EVENTS.resumeAnimation, {\n layerName: layerName,\n animationName: animationName\n });\n return layer.resumeAnimation(animationName, seconds, easingFn, function () {\n // Notify that an animation has stopped\n _this9.emit(_this9.constructor.EVENTS.stopAnimation, {\n layerName: layerName,\n animationName: animationName\n });\n }, undefined, function () {\n // Notify that an animation has been interrupted\n _this9.emit(_this9.constructor.EVENTS.interruptAnimation, {\n layerName: layerName,\n animationName: animationName\n });\n }, function (_ref3) {\n var name = _ref3.name,\n canAdvance = _ref3.canAdvance,\n isQueueEnd = _ref3.isQueueEnd;\n\n if (layer.currentAnimation === animationName) {\n // Notify that a new animation has begun\n _this9.emit(_this9.constructor.EVENTS.playNextAnimation, {\n layerName: layerName,\n animationName: animationName,\n nextQueuedAnimation: name,\n canAdvance: canAdvance,\n isQueueEnd: isQueueEnd\n });\n }\n });\n }\n /**\r\n * Stop the current animation on a layer. Stop rewinds the animation to the\r\n * beginning and prevents it from progressing forward.\r\n *\r\n * @param {string} name - Name of the layer that contains the animation.\r\n *\r\n * @returns {boolean} Whether or not an animation was successfully stopped.\r\n */\n\n }, {\n key: "stopAnimation",\n value: function stopAnimation(name) {\n var layer = this._layerMap[name];\n\n if (layer === undefined) {\n console.warn("Did not stop animation on layer ".concat(name, " for host ").concat(this._host.id, ". No layer exists with this name."));\n return false;\n }\n\n return layer.stopAnimation();\n }\n /**\r\n * Pause current animation and weight interpolation animation on all layers.\r\n * @returns {boolean} - Whether or not there was an existing interpolation or\r\n * current animations to pause.\r\n */\n\n }, {\n key: "pause",\n value: function pause() {\n this._paused = true;\n var paused = false;\n\n this._layers.forEach(function (l) {\n if (l.pause()) {\n paused = true;\n }\n });\n\n return paused;\n }\n /**\r\n * Resume current animation and weight interpolation animation on all layers.\r\n * @returns {boolean} - Whether or not there was an existing interpolation or\r\n * current animations to resume.\r\n */\n\n }, {\n key: "resume",\n value: function resume() {\n this._paused = false;\n var resumed = false;\n\n this._layers.forEach(function (l) {\n if (l.resume()) {\n resumed = true;\n }\n });\n\n return resumed;\n }\n /**\r\n * Adds a namespace to the host with the name of the feature to contain properties\r\n * and methods from the feature that users of the host need access to.\r\n *\r\n * @see AnimationFeature\r\n */\n\n }, {\n key: "installApi",\n value: function installApi() {\n var _this10 = this;\n\n /**\r\n * @inner\r\n * @namespace AnimationFeature\r\n */\n var api = AnimationFeature_get(AnimationFeature_getPrototypeOf(AnimationFeature.prototype), "installApi", this).call(this);\n\n Object.defineProperties(api, {\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @see core/AnimationFeature#paused\r\n */\n paused: {\n get: function get() {\n return _this10.paused;\n }\n },\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @see core/AnimationFeature#layers\r\n */\n layers: {\n get: function get() {\n return _this10.layers;\n }\n }\n });\n Object.assign(api, {\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#addLayer\r\n */\n addLayer: this.addLayer.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#removeLayer\r\n */\n removeLayer: this.removeLayer.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#moveLayer\r\n */\n moveLayer: this.moveLayer.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#renameLayer\r\n */\n renameLayer: this.renameLayer.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#getLayerWeight\r\n */\n getLayerWeight: this.getLayerWeight.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#setLayerWeight\r\n */\n setLayerWeight: this.setLayerWeight.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#pauseLayerWeight\r\n */\n pauseLayerWeight: this.pauseLayerWeight.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#resumeLayerWeight\r\n */\n resumeLayerWeight: this.resumeLayerWeight.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#pauseLayer\r\n */\n pauseLayer: this.pauseLayer.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#resumeLayer\r\n */\n resumeLayer: this.resumeLayer.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#getTransitioning\r\n */\n getTransitioning: this.getTransitioning.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#getAnimations\r\n */\n getAnimations: this.getAnimations.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#getCurrentAnimation\r\n */\n getCurrentAnimation: this.getCurrentAnimation.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#getPaused\r\n */\n getPaused: this.getPaused.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#getAnimationType\r\n */\n getAnimationType: this.getAnimationType.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#addAnimation\r\n */\n addAnimation: this.addAnimation.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#removeAnimation\r\n */\n removeAnimation: this.removeAnimation.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#renameAnimation\r\n */\n renameAnimation: this.renameAnimation.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#getAnimationBlendNames\r\n */\n getAnimationBlendNames: this.getAnimationBlendNames.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#getAnimationBlendWeight\r\n */\n getAnimationBlendWeight: this.getAnimationBlendWeight.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#setAnimationBlendWeight\r\n */\n setAnimationBlendWeight: this.setAnimationBlendWeight.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#playAnimation\r\n */\n playAnimation: this.playAnimation.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#playNextAnimation\r\n */\n playNextAnimation: this.playNextAnimation.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#pauseAnimation\r\n */\n pauseAnimation: this.pauseAnimation.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#resumeAnimation\r\n */\n resumeAnimation: this.resumeAnimation.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#stopAnimation\r\n */\n stopAnimation: this.stopAnimation.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#pause\r\n */\n pause: this.pause.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#resume\r\n */\n resume: this.resume.bind(this)\n });\n }\n /**\r\n * Update each animation layer.\r\n *\r\n * @param {number} deltaTime - Time since the last update.\r\n */\n\n }, {\n key: "update",\n value: function update(deltaTime) {\n if (!this._layers.length) {\n return;\n }\n\n if (this._paused) {\n deltaTime = 0;\n } // Re-evaluate internal weights for layers\n\n\n this._updateInternalWeights(); // Update layers\n\n\n this._layers.forEach(function (layer) {\n layer.update(deltaTime);\n });\n\n AnimationFeature_get(AnimationFeature_getPrototypeOf(AnimationFeature.prototype), "update", this).call(this, deltaTime);\n }\n }, {\n key: "discard",\n value: function discard() {\n this._layers.forEach(function (layer) {\n layer.discard();\n });\n\n delete this._layers;\n delete this._layerMap;\n\n AnimationFeature_get(AnimationFeature_getPrototypeOf(AnimationFeature.prototype), "discard", this).call(this);\n }\n }]);\n\n return AnimationFeature;\n}(core_AbstractHostFeature);\n\nObject.defineProperty(AnimationFeature_AnimationFeature, \'EVENTS\', {\n value: AnimationFeature_objectSpread(AnimationFeature_objectSpread({}, Object.getPrototypeOf(core_AbstractHostFeature).EVENTS), {}, {\n addLayer: \'onAddLayerEvent\',\n removeLayer: \'onRemoveLayerEvent\',\n renameLayer: \'onRenameLayerEvent\',\n addAnimation: \'onAddAnimationEvent\',\n removeAnimation: \'onRemovedAnimationEvent\',\n renameAnimation: \'onRenameAnimationEvent\',\n playAnimation: \'onPlayEvent\',\n playNextAnimation: \'onNextEvent\',\n pauseAnimation: \'onPauseEvent\',\n resumeAnimation: \'onResumeEvent\',\n interruptAnimation: \'onInterruptEvent\',\n stopAnimation: \'onStopEvent\'\n })\n});\n/* harmony default export */ var animpack_AnimationFeature = (AnimationFeature_AnimationFeature);\n// CONCATENATED MODULE: ./src/core/PointOfInterestFeature.js\nfunction PointOfInterestFeature_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { PointOfInterestFeature_typeof = function _typeof(obj) { return typeof obj; }; } else { PointOfInterestFeature_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return PointOfInterestFeature_typeof(obj); }\n\nfunction PointOfInterestFeature_slicedToArray(arr, i) { return PointOfInterestFeature_arrayWithHoles(arr) || PointOfInterestFeature_iterableToArrayLimit(arr, i) || PointOfInterestFeature_unsupportedIterableToArray(arr, i) || PointOfInterestFeature_nonIterableRest(); }\n\nfunction PointOfInterestFeature_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."); }\n\nfunction PointOfInterestFeature_iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction PointOfInterestFeature_arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction PointOfInterestFeature_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction PointOfInterestFeature_toConsumableArray(arr) { return PointOfInterestFeature_arrayWithoutHoles(arr) || PointOfInterestFeature_iterableToArray(arr) || PointOfInterestFeature_unsupportedIterableToArray(arr) || PointOfInterestFeature_nonIterableSpread(); }\n\nfunction PointOfInterestFeature_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."); }\n\nfunction PointOfInterestFeature_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return PointOfInterestFeature_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return PointOfInterestFeature_arrayLikeToArray(o, minLen); }\n\nfunction PointOfInterestFeature_iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction PointOfInterestFeature_arrayWithoutHoles(arr) { if (Array.isArray(arr)) return PointOfInterestFeature_arrayLikeToArray(arr); }\n\nfunction PointOfInterestFeature_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction PointOfInterestFeature_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction PointOfInterestFeature_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction PointOfInterestFeature_createClass(Constructor, protoProps, staticProps) { if (protoProps) PointOfInterestFeature_defineProperties(Constructor.prototype, protoProps); if (staticProps) PointOfInterestFeature_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction PointOfInterestFeature_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { PointOfInterestFeature_get = Reflect.get; } else { PointOfInterestFeature_get = function _get(target, property, receiver) { var base = PointOfInterestFeature_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return PointOfInterestFeature_get(target, property, receiver || target); }\n\nfunction PointOfInterestFeature_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = PointOfInterestFeature_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction PointOfInterestFeature_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) PointOfInterestFeature_setPrototypeOf(subClass, superClass); }\n\nfunction PointOfInterestFeature_setPrototypeOf(o, p) { PointOfInterestFeature_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return PointOfInterestFeature_setPrototypeOf(o, p); }\n\nfunction PointOfInterestFeature_createSuper(Derived) { var hasNativeReflectConstruct = PointOfInterestFeature_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = PointOfInterestFeature_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = PointOfInterestFeature_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return PointOfInterestFeature_possibleConstructorReturn(this, result); }; }\n\nfunction PointOfInterestFeature_possibleConstructorReturn(self, call) { if (call && (PointOfInterestFeature_typeof(call) === "object" || typeof call === "function")) { return call; } return PointOfInterestFeature_assertThisInitialized(self); }\n\nfunction PointOfInterestFeature_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction PointOfInterestFeature_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction PointOfInterestFeature_getPrototypeOf(o) { PointOfInterestFeature_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return PointOfInterestFeature_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/* eslint-disable no-underscore-dangle */\n\n/* eslint-disable no-unused-vars */\n\n\n\n\n\n\n\n/**\n * Enum for axis directions.\n *\n * @readonly\n * @enum {Class}\n */\n\nvar AxisMap = {\n PositiveX: [1, 0, 0],\n NegativeX: [-1, 0, 0],\n PositiveY: [0, 1, 0],\n NegativeY: [0, -1, 0],\n PositiveZ: [0, 0, 1],\n NegativeZ: [0, 0, -1]\n};\nvar FaceTargetTypes = {\n EyeCenter: 0,\n EyeLeft: 1,\n EyeRight: 2,\n Mouth: 3\n}; // Average distance between pupils is .064m, golden ratio says that the distance\n// from center of the pupils to the center of the mouth should be about the same.\n\nvar FaceVectors = [[0, 0, 0], [-.032, 0, 0], [.032, 0, 0], [0, -.064, 0]]; // Time ranges to use when choosing a new random wait time between saccades\n\nvar MicroSaccadeWaitRanges = {\n "default": [0.8, 1.75],\n postMacro: [0.6, 1.3125]\n};\nvar MacroSaccadeWaitRanges = {\n "default": [5.0, 8.0],\n mouthTarget: [0.2, 0.75],\n // Look away from a mouth target the fastest\n eyeTarget: [1.5, 4.0]\n}; // Minimum angle in degrees the eye direction must change to trigger a blink animation\n\nvar BlinkThreshold = 35; // Maximum number of milliseconds to use for calculating look speed\n\nvar MaxDelta = 100 / 3;\n/**\n * PointOfInterest controls the gaze direction of the host. Given one or more\n * animations of type Blend2dState, it calculates the angles between the lookTracker\n * object (generally a joint in the host\'s skeleton) and the lookTarget (the object\n * the host should look at) and drives the managed Blend2dStates\' X and Y blend\n * values using the result. You can optionally add saccadic movement to any managed\n * animation to help make the host\'s eyes appear alive when focused on the same\n * point for exteded periods of time. If blink animations are specified, a blink\n * will be played during large changes in gaze direction.\n *\n * @extends AbstractHostFeature\n * @alias core/PointOfInterestFeature\n * @implements SSMLSpeechmarkInterface\n * @implements ManagedAnimationLayerInterface\n */\n\nvar PointOfInterestFeature_PointOfInterestFeature = /*#__PURE__*/function (_AbstractHostFeature$) {\n PointOfInterestFeature_inherits(PointOfInterestFeature, _AbstractHostFeature$);\n\n var _super = PointOfInterestFeature_createSuper(PointOfInterestFeature);\n\n /**\n * @constructor\n *\n * @param {core/HostObject} host - Host that owns the feature.\n * @param {Object=} options - Options for the feature.\n * @param {Object=} target - 3D transformation node that the host should try to\n * look at.\n * @param {Object} options.lookTracker - 3D transformation node that represents\n * the direction the host is currently looking during animation.\n * @param {Object=} options.scene - Engine-specific scene object that contains\n * the host. This object must be defined if using \'setTargetByName\' or \'SetTargetById\'\n * methods.\n * @param {Object=} lookOptions - Options for the look animation layers.\n * @param {number} [lookOptions.blendTime=0.1] - Default amount of time it will\n * take to manipulate the weights of the look layers.\n * @param {number} [lookOptions.easingFn=Quadratic.InOut] - Default easing function\n * to use when manipulating look layer weights.\n * @param {Array.} [lookOptions.layers=[]] - An array of layer options\n * objects to register as look layers.\n * @param {Object=} blinkOptions - Options for the blink animation layers.\n * @param {number} [blinkOptions.blendTime=0.075] - Default amount of time it\n * will take to manipulate the weights of the blink layers.\n * @param {number} [blinkOptions.easingFn=Quadratic.InOut] - Default easing function\n * to use when manipulating blink layer weights.\n * @param {Array.} [blinkOptions.layers=[]] - An array of layer options\n * objects to register as blink layers.\n */\n function PointOfInterestFeature(host) {\n var _this;\n\n var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n target = _ref.target,\n lookTracker = _ref.lookTracker,\n scene = _ref.scene;\n\n var _ref2 = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},\n _ref2$blendTime = _ref2.blendTime,\n lookBlendTime = _ref2$blendTime === void 0 ? 0.1 : _ref2$blendTime,\n _ref2$easingFn = _ref2.easingFn,\n lookEasingFn = _ref2$easingFn === void 0 ? Quadratic.InOut : _ref2$easingFn,\n _ref2$layers = _ref2.layers,\n lookLayers = _ref2$layers === void 0 ? [] : _ref2$layers;\n\n var _ref3 = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {},\n _ref3$blendTime = _ref3.blendTime,\n blinkBlendTime = _ref3$blendTime === void 0 ? 0.075 : _ref3$blendTime,\n _ref3$easingFn = _ref3.easingFn,\n blinkEasingFn = _ref3$easingFn === void 0 ? Quadratic.InOut : _ref3$easingFn,\n _ref3$layers = _ref3.layers,\n blinkLayers = _ref3$layers === void 0 ? [] : _ref3$layers;\n\n PointOfInterestFeature_classCallCheck(this, PointOfInterestFeature);\n\n _this = _super.call(this, host);\n\n if (!_this.constructor._validateTransformObject(lookTracker)) {\n throw new Error("Cannot initialize PointOfInterestFeature on host ".concat(_this._host.id, ". LookTracker must be defined as a valid transformation object."));\n }\n\n _this._lookTracker = lookTracker;\n _this._scene = scene;\n _this._target = target || null;\n _this._prevTargetPos = [0, 0, 0];\n _this._isTargetMoving = false;\n _this._lookLayers = _this._lookLayers || {};\n _this._trackingConfigs = _this._trackingConfigs || [];\n _this._blinkLayers = _this._blinkLayers || {}; // Register the look layers\n\n lookLayers.forEach(function (_ref4) {\n var name = _ref4.name,\n animation = _ref4.animation,\n maxSpeed = _ref4.maxSpeed,\n reference = _ref4.reference,\n forwardAxis = _ref4.forwardAxis,\n hasSaccade = _ref4.hasSaccade,\n blendTime = _ref4.blendTime,\n easingFn = _ref4.easingFn;\n\n _this.registerLookLayer(name, {\n animation: animation,\n maxSpeed: maxSpeed,\n reference: reference,\n forwardAxis: forwardAxis,\n hasSaccade: hasSaccade,\n blendTime: blendTime !== undefined ? blendTime : lookBlendTime,\n easingFn: easingFn !== undefined ? easingFn : lookEasingFn\n });\n }); // Register the blink layers\n\n blinkLayers.forEach(function (_ref5) {\n var name = _ref5.name,\n animation = _ref5.animation,\n blendTime = _ref5.blendTime,\n easingFn = _ref5.easingFn;\n\n _this.registerBlinkLayer(name, {\n animation: animation,\n blendTime: blendTime !== undefined ? blendTime : blinkBlendTime,\n easingFn: easingFn !== undefined ? easingFn : blinkEasingFn\n });\n });\n return _this;\n }\n /**\n * Gets and sets the target object the host should look at.\n *\n * @type {Object|null}\n */\n\n\n PointOfInterestFeature_createClass(PointOfInterestFeature, [{\n key: "target",\n get: function get() {\n return this._target;\n },\n set: function set(target) {\n this._target = target || null;\n }\n /**\n * Return a vector representing the global position of an object. Should be\n * overloaded for each rendering engine implementation.\n *\n * @private\n *\n * @param {any} _obj - Engine-specific 3D transform object.\n *\n * @returns {Array.} - An array consisting of three numbers representing\n * x, y and z coordinates.\n */\n\n }, {\n key: "_onLayerAdded",\n value: function _onLayerAdded(_ref6) {\n var name = _ref6.name;\n this._lookLayers = this._lookLayers || {};\n this._blinkLayers = this._blinkLayers || {};\n\n PointOfInterestFeature_get(PointOfInterestFeature_getPrototypeOf(PointOfInterestFeature.prototype), "_onLayerAdded", this).call(this, {\n name: name\n }); // Validate the look animation\n\n\n if (this._lookLayers[name] !== undefined) {\n this._registerLookAnimation(name, this._lookLayers[name]);\n }\n }\n }, {\n key: "_onAnimationAdded",\n value: function _onAnimationAdded(_ref7) {\n var layerName = _ref7.layerName,\n animationName = _ref7.animationName;\n this._lookLayers = this._lookLayers || {};\n this._blinkLayers = this._blinkLayers || {};\n\n PointOfInterestFeature_get(PointOfInterestFeature_getPrototypeOf(PointOfInterestFeature.prototype), "_onAnimationAdded", this).call(this, {\n layerName: layerName\n }); // Validate the look animation\n\n\n if (this._lookLayers[layerName] === animationName) {\n this._registerLookAnimation(layerName, animationName);\n }\n }\n /**\n * Ensure that registered look animations are Blend2dStates.\n *\n * @private\n *\n * @param {string} layerName - Name of the layer that contains the look animation.\n * @param {string} animationName - Name of the animation.\n */\n\n }, {\n key: "_registerLookAnimation",\n value: function _registerLookAnimation(layerName, animationName) {\n if (this._managedLayers[layerName].animations[animationName].isActive) {\n if (AnimationTypes[this._host.AnimationFeature.getAnimationType(layerName, animationName)] !== AnimationTypes.blend2d) {\n // Warn and deactivate if the registered state is not blend2d\n console.warn("Cannot register Point of Interest look animation ".concat(animationName, " on layer ").concat(layerName, " for host ").concat(this._host.id, ". Look animations must be of type \'blend2d\'."));\n this._managedLayers[layerName].animations[animationName].isActive = false;\n }\n }\n }\n /**\n * Check if the given object is not of an engine-specific type. Should\n * be overloaded for each rendering engine implementation.\n *\n * @private\n *\n * @param {any} obj - Object to validate.\n *\n * @returns {boolean}\n */\n\n }, {\n key: "_addTrackingConfig",\n value:\n /**\n * Check if the given configuration object has already been stored as a tracking\n * config. If it has, return the stored configuration. Otherwise, store and\n * return it.\n *\n * @private\n *\n * @param {Object} config - Object containing tracker, reference and forwardAxis\n * properties.\n *\n * @returns {Object}\n */\n function _addTrackingConfig(config) {\n var trackingConfig = this._trackingConfigs.find(function (c) {\n return c.reference === config.reference && c.forwardAxis === config.forwardAxis;\n });\n\n if (trackingConfig) {\n return trackingConfig;\n } else {\n config.angles = {\n h: 0,\n v: 0\n };\n config.prevAngles = {\n h: 0,\n v: 0\n };\n\n this._trackingConfigs.push(config);\n\n return config;\n }\n }\n /**\n * Return the distance between the look tracker and the look target.\n *\n * @private\n *\n * @returns {number}\n */\n\n }, {\n key: "_getTargetDistance",\n value: function _getTargetDistance() {\n // Find the vector between the global positions of tracker and target\n var sourcePosition = this.constructor._getWorldPosition(this._lookTracker);\n\n var targetPosition = this.constructor._getWorldPosition(this._target);\n\n var lookVector = [targetPosition[0] - sourcePosition[0], targetPosition[1] - sourcePosition[1], targetPosition[2] - sourcePosition[2]];\n return core_MathUtils.getVectorMagnitude(lookVector);\n }\n /**\n * Reset all stored tracking angles to 0.\n *\n * @private\n */\n\n }, {\n key: "_resetLookAngles",\n value: function _resetLookAngles() {\n this._trackingConfigs.forEach(function (_ref8) {\n var angles = _ref8.angles;\n angles.h = 0;\n angles.v = 0;\n });\n }\n /**\n * Store the difference in horizontal and vertical rotation for the tracker\'s\n * reference rotation and the direction of the target from the tracker.\n *\n * @private\n */\n\n }, {\n key: "_setLookAngles",\n value: function _setLookAngles() {\n var _this2 = this;\n\n // Get the current positions of the tracker and target objects\n var targetPos = this.constructor._getWorldPosition(this._target);\n\n var trackerPos = this.constructor._getWorldPosition(this._lookTracker); // Check if the target has moved\n\n\n this._isTargetMoving = core_MathUtils.getVectorMagnitude([targetPos[0] - this._prevTargetPos[0], targetPos[1] - this._prevTargetPos[1], targetPos[2] - this._prevTargetPos[2]]) > 0;\n Object.assign(this._prevTargetPos, targetPos); // Calculate the horizontal and vertical angles to rotate to the target\n\n var targetSpherical = core_MathUtils.cartesianToSpherical(targetPos[0] - trackerPos[0], targetPos[1] - trackerPos[1], targetPos[2] - trackerPos[2]);\n\n var targetAngles = this.constructor._sphericalToBlendValue(targetSpherical[1], targetSpherical[2]); // Calculate angles relative to the reference objects\n\n\n this._trackingConfigs.forEach(function (_ref9) {\n var reference = _ref9.reference,\n forwardAxis = _ref9.forwardAxis,\n angles = _ref9.angles;\n\n // Calculate the horizontal and vertical angles to rotate to the direction of the tracker\n var refDirection = _this2.constructor._getObjectDirection(reference, forwardAxis);\n\n var refSpherical = core_MathUtils.cartesianToSpherical.apply(core_MathUtils, PointOfInterestFeature_toConsumableArray(refDirection));\n\n var refAngles = _this2.constructor._sphericalToBlendValue(refSpherical[1], refSpherical[2]); // Store the difference\n\n\n angles.h = targetAngles.h - refAngles.h;\n angles.v = targetAngles.v - refAngles.v;\n });\n }\n /**\n * Return the horizontal and vertical angles it would require to simulate looking\n * at the given type of face target\n *\n * @private\n *\n * @param {number} targetType - Integer representing the FaceTargetType.\n *\n * @returns {Object}- An object with signature {r: number, h: number, v: number}\n * where \'r\' represents radius, h represents the horizontal/azimuthal angle and\n * v represents the vertical/polar angle.\n */\n\n }, {\n key: "_getFaceTargetAngles",\n value: function _getFaceTargetAngles(targetType) {\n // No offset when the target is the center of the eyes\n if (targetType === 0) {\n return {\n h: 0,\n v: 0\n };\n } // Build a vector to the face target type using the current distance to the target\n\n\n var distance = this._getTargetDistance(this._lookTracker);\n\n var faceVector = PointOfInterestFeature_toConsumableArray(FaceVectors[targetType]);\n\n faceVector[2] = distance;\n var spherical = core_MathUtils.cartesianToSpherical.apply(core_MathUtils, PointOfInterestFeature_toConsumableArray(faceVector)); // Make sure values are clamped within the range of motion of the human eye, in case the target is very close\n\n var blendValues = this.constructor._sphericalToBlendValue(spherical[1], spherical[2]);\n\n blendValues.h = core_MathUtils.clamp(blendValues.h, -35, 35);\n blendValues.v = core_MathUtils.clamp(blendValues.v, -25, 30);\n return blendValues;\n }\n /**\n * Updated the stored speed and duration variables for a layer based on the\n * change in horizontal and vertical angles of the tracker.\n *\n * @private\n *\n * @param {string} layerName - Name of the layer to store values on.\n * @param {number} h - Change in horizontal angle, in degrees.\n * @param {number} v - Change in vertical angle, in degrees.\n */\n\n }, {\n key: "_updateLayerSpeed",\n value: function _updateLayerSpeed(layerName, h, v) {\n var layer = this._managedLayers[layerName]; // From "Realistic Avatar and head Animation Using a Neurobiological Model of Visual Attention", Itti, Dhavale, Pighin\n\n layer.maxHSpeed = 473 * (1 - Math.exp(-h / 7.8));\n layer.maxVSpeed = 473 * (1 - Math.exp(-v / 7.8)); // From "Eyes Alive", Lee, Badler\n\n var D0 = 0.025;\n var d = 0.00235;\n layer.hDuration = D0 + d * h;\n layer.vDuration = D0 + d * v;\n }\n /**\n * Set the microSaccade object with new randomized values.\n *\n * @private\n *\n * @param {string} layerName - Name of the layer that owns the saccade motion.\n */\n\n }, {\n key: "_setMicroSaccade",\n value: function _setMicroSaccade(layerName) {\n var layer = this._managedLayers[layerName];\n var microSaccade = layer.microSaccade;\n\n if (this._target) {\n // Micro movements should be smaller when focused on a target\n microSaccade.h = core_Utils.getRandomFloat(.01, .15);\n microSaccade.v = core_Utils.getRandomFloat(.01, .15);\n } else {\n // Microsaccades. Encyclopedia of Neuroscience. (2009) Springer, Berlin, Heidelberg. https://doi.org/10.1007/978-3-540-29678-2_3492\n microSaccade.h = core_Utils.getRandomFloat(.01, .3);\n microSaccade.v = core_Utils.getRandomFloat(.01, .3);\n }\n\n this._updateLayerSpeed(layerName, microSaccade.h, microSaccade.v); // Restart the timer\n\n\n this._initializeMicroTimer.apply(this, [layerName].concat(PointOfInterestFeature_toConsumableArray(MicroSaccadeWaitRanges["default"])));\n }\n /**\n * Set the macroSaccade object with new randomized values.\n *\n * @private\n *\n * @param {string} layerName - Name of the layer that owns the saccade motion.\n */\n\n }, {\n key: "_setMacroSaccade",\n value: function _setMacroSaccade(layerName) {\n var layer = this._managedLayers[layerName];\n var macroSaccade = layer.macroSaccade;\n var macroSaccadeWaitRange; // Increase random value range when not focused on a target\n\n if (!this._target) {\n macroSaccadeWaitRange = MacroSaccadeWaitRanges["default"]; // Normal human horizontal eye rotation limit is about 35 degrees\n\n var hLimit = core_Utils.getRandomFloat(.143, .286);\n var hFactor = core_Utils.getRandomFloat(-hLimit, hLimit);\n macroSaccade.h = hFactor * 35; // Normal human vertical eye rotation limit is about 25 degrees upward and 30 degrees downward\n\n var vLimit = core_Utils.getRandomFloat(.093, .186);\n var vFactor = core_Utils.getRandomFloat(-vLimit, vLimit);\n macroSaccade.v = vFactor > 0 ? vFactor * 25 : vFactor * 30;\n } // Pick a new face target\n else {\n // Social triangle - saccade between eyes and mouth, weighted to look at eyes more often\n switch (layer.saccadeTarget) {\n case 1:\n macroSaccadeWaitRange = MacroSaccadeWaitRanges.eyeTarget;\n layer.saccadeTarget = Math.random() < 0.75 ? FaceTargetTypes.EyeRight : FaceTargetTypes.Mouth;\n break;\n\n case 2:\n macroSaccadeWaitRange = MacroSaccadeWaitRanges.eyeTarget;\n layer.saccadeTarget = Math.random() < 0.75 ? FaceTargetTypes.EyeLeft : FaceTargetTypes.Mouth;\n break;\n\n case 3:\n macroSaccadeWaitRange = MacroSaccadeWaitRanges.mouthTarget;\n layer.saccadeTarget = Math.random() < 0.5 ? FaceTargetTypes.EyeLeft : FaceTargetTypes.EyeRight;\n break;\n\n case 0:\n default:\n macroSaccadeWaitRange = MacroSaccadeWaitRanges.eyeTarget;\n layer.saccadeTarget = Math.random() < 0.5 ? FaceTargetTypes.EyeLeft : FaceTargetTypes.EyeRight;\n break;\n }\n\n var _this$_getFaceTargetA = this._getFaceTargetAngles(layer.saccadeTarget),\n h = _this$_getFaceTargetA.h,\n v = _this$_getFaceTargetA.v;\n\n macroSaccade.h = h;\n macroSaccade.v = v;\n }\n\n this._updateLayerSpeed(layerName, macroSaccade.h, macroSaccade.v); // Restart the timers\n\n\n this._initializeMicroTimer.apply(this, [layerName].concat(PointOfInterestFeature_toConsumableArray(MicroSaccadeWaitRanges.postMacro)));\n\n this._initializeMacroTimer.apply(this, [layerName].concat(PointOfInterestFeature_toConsumableArray(macroSaccadeWaitRange)));\n }\n /**\n * Start a new wait timer that will set a new micro saccade movement when it\n * resolves.\n *\n * @private\n *\n * @param {string} layerName - Name of the layer that owns the saccade motion.\n * @param {number} minWaitTime - Minimum number of seconds before a new saccade\n * will be triggered.\n * @param {number} maxWaitTime - Maximum number of seconds before a new saccade\n * will be triggered.\n */\n\n }, {\n key: "_initializeMicroTimer",\n value: function _initializeMicroTimer(layerName, minWaitTime, maxWaitTime) {\n var _this3 = this;\n\n var layer = this._managedLayers[layerName];\n var waitTime = core_Utils.getRandomFloat(minWaitTime, maxWaitTime);\n\n if (layer.microSaccadeTimer) {\n layer.microSaccadeTimer.cancel();\n }\n\n layer.microSaccadeTimer = core_Utils.wait(waitTime, {\n onFinish: function onFinish() {\n _this3._setMicroSaccade(layerName);\n }\n });\n }\n /**\n * Start a new wait timer that will set a new macro saccade movement when it\n * resolves.\n *\n * @private\n *\n * @param {string} layerName - Name of the layer that owns the saccade motion.\n * @param {number} minWaitTime - Minimum number of seconds before a new saccade\n * will be triggered.\n * @param {number} maxWaitTime - Maximum number of seconds before a new saccade\n * will be triggered.\n */\n\n }, {\n key: "_initializeMacroTimer",\n value: function _initializeMacroTimer(layerName, minWaitTime, maxWaitTime) {\n var _this4 = this;\n\n var layer = this._managedLayers[layerName];\n var waitTime = core_Utils.getRandomFloat(minWaitTime, maxWaitTime);\n\n if (layer.macroSaccadeTimer) {\n layer.macroSaccadeTimer.cancel();\n }\n\n layer.macroSaccadeTimer = core_Utils.wait(waitTime, {\n onFinish: function onFinish() {\n _this4._setMacroSaccade(layerName);\n }\n });\n }\n /**\n * Sets a new target to look at.\n *\n * @param {Object|null} target - The new target to look at.\n */\n\n }, {\n key: "setTarget",\n value: function setTarget(target) {\n this.target = target;\n }\n /**\n * Finds an object given its name and sets it as the new target to look at.\n * Should be overloaded for each rendering engine implementation.\n *\n * @param {string} target - Name to search for.\n */\n\n }, {\n key: "setTargetByName",\n value: function setTargetByName(name) {\n if (!name) {\n this._target = null;\n }\n\n if (!this._scene) {\n throw new Error("Cannot set PointOfInterestFeature target using name ".concat(name, " on host ").concat(this._host.id, ". Scene must be defined."));\n }\n }\n /**\n * Finds an object given its id and sets it as the new target to look at.\n * Should be overloaded for each rendering engine implementation.\n *\n * @param {string|number} target - Id to search for.\n */\n\n }, {\n key: "setTargetById",\n value: function setTargetById(id) {\n if (!id) {\n this._target = null;\n }\n\n if (!this._scene) {\n throw new Error("Cannot set PointOfInterestFeature target using id ".concat(id, " on host ").concat(this._host.id, ". Scene must be defined."));\n }\n }\n /**\n * Start keeping track of an animation layer that owns a blend2d animation with\n * blendWeights corresponding to horizontal and vertical look angles.\n *\n * @param {string} layerName - Name of the layer to keep track of.\n * @param {Object=} options - Options for the layer.\n * @param {string} [options.animation = \'look\'] - Name of the animation on the\n * layer whose blendWeights will be driven based on the angle between the lookTracker\n * and the lookTarget. This animation must be of type blend2d.\n * @param {number} [options.maxSpeed = 25] - The maximum speed at which the blend2d\n * blendWeights can be manipulated.\n * @param {string} [options.forwardAxis = \'PositiveZ\'] - Axis pointing from the\n * front of the lookReference object. Valid options are \'PositiveX\', \'NegativeX\',\n * \'PositiveY\', \'NegativeY\', \'PositiveZ\', \'NegativeZ\'.\n * @param {Object=} options.lookReference - 3D transformation node that the lookTracker\n * rotation limits should be calculated relative to. Defaults to the host owner.\n * @param {number} [options.hasSaccade = false] - Whether or not to include\n * saccadic motion onto the blendWeight animation. This should only be set to\n * true for blend2d animations representing eye animation.\n * @param {number=} [options.blendTime=[PointOfInterestFeature.DEFAULT_LAYER_OPTIONS.blendTime]{@link PointOfInterestFeature#DEFAULT_LAYER_OPTIONS#blendTime}] -\n * Default amount of time to use when manipulating layer weight.\n * @param {Function=} options.easingFn - Default easing function to use when\n * manipulating layer weight.\n */\n\n }, {\n key: "registerLookLayer",\n value: function registerLookLayer(layerName) {\n var _ref10 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n _ref10$animation = _ref10.animation,\n animation = _ref10$animation === void 0 ? \'look\' : _ref10$animation,\n _ref10$maxSpeed = _ref10.maxSpeed,\n maxSpeed = _ref10$maxSpeed === void 0 ? 25 : _ref10$maxSpeed,\n reference = _ref10.reference,\n _ref10$forwardAxis = _ref10.forwardAxis,\n forwardAxis = _ref10$forwardAxis === void 0 ? \'PositiveZ\' : _ref10$forwardAxis,\n _ref10$hasSaccade = _ref10.hasSaccade,\n hasSaccade = _ref10$hasSaccade === void 0 ? false : _ref10$hasSaccade,\n _ref10$blendTime = _ref10.blendTime,\n blendTime = _ref10$blendTime === void 0 ? PointOfInterestFeature.DEFAULT_LAYER_OPTIONS.blendTime : _ref10$blendTime,\n easingFn = _ref10.easingFn;\n\n // Validate reference object\n reference = reference || this._host.owner;\n\n if (!this.constructor._validateTransformObject(reference)) {\n throw new Error("Cannot initialize register look layer ".concat(layerName, " for PointOfInterestFeature on host ").concat(this._host.id, ". Reference must be defined as a valid transformation object."));\n } // Find vector associated with axis string\n\n\n forwardAxis = AxisMap[forwardAxis] !== undefined ? AxisMap[forwardAxis] : AxisMap.PositiveZ; // Store tracking configuration\n\n var trackingConfig = this._addTrackingConfig({\n reference: reference,\n forwardAxis: forwardAxis\n }); // Register the layer and animation\n\n\n this.registerLayer(layerName, {\n trackingConfig: trackingConfig,\n maxSpeed: maxSpeed,\n maxHSpeed: undefined,\n maxVSpeed: undefined,\n hDuration: undefined,\n vDuration: undefined,\n hVelocity: [0, 0],\n vVelocity: [0, 0],\n hasSaccade: hasSaccade,\n blendTime: blendTime,\n easingFn: easingFn,\n microSaccade: {\n h: 0,\n v: 0\n },\n macroSaccade: {\n h: 0,\n v: 0\n },\n saccadeTarget: FaceTargetTypes.EyeCenter,\n animations: PointOfInterestFeature_defineProperty({}, animation, {})\n });\n this._lookLayers[layerName] = animation; // Validate the look animation\n\n this._registerLookAnimation(layerName, animation); // Initialize saccade timers\n\n\n if (hasSaccade) {\n var macroSaccadeWaitRange = this._target ? MacroSaccadeWaitRanges.eyeTarget : MacroSaccadeWaitRanges["default"];\n\n this._initializeMicroTimer.apply(this, [layerName].concat(PointOfInterestFeature_toConsumableArray(MicroSaccadeWaitRanges["default"])));\n\n this._initializeMacroTimer.apply(this, [layerName].concat(PointOfInterestFeature_toConsumableArray(macroSaccadeWaitRange)));\n }\n }\n /**\n * Start keeping track of an animation layer that owns a blink animation. Blink\n * animations can be of any type, but if it is of type randomAnimation then a\n * it will be randomized each time a blink is called.\n *\n * @param {string} layerName - Name of the layer to keep track of.\n * @param {Object=} options - Options for the layer.\n * @param {string} [options.animation = \'blink\'] - Name of the blink animation\n * on the layer.\n * @param {number} [options.blendTime=[PointOfInterestFeature.DEFAULT_LAYER_OPTIONS.blendTime]{@link PointOfInterestFeature#DEFAULT_LAYER_OPTIONS#blendTime}] -\n * Default amount of time to use when manipulating the layer\'s weight.\n * @param {Function=} options.easingFn - Default easing function to use when\n * manipulating the layer\'s weight.\n */\n\n }, {\n key: "registerBlinkLayer",\n value: function registerBlinkLayer(layerName) {\n var _ref11 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n _ref11$animation = _ref11.animation,\n animation = _ref11$animation === void 0 ? \'blink\' : _ref11$animation,\n _ref11$blendTime = _ref11.blendTime,\n blendTime = _ref11$blendTime === void 0 ? PointOfInterestFeature.DEFAULT_LAYER_OPTIONS.blendTime : _ref11$blendTime,\n easingFn = _ref11.easingFn;\n\n // Register the layer and animation\n this.registerLayer(layerName, {\n blendTime: blendTime,\n easingFn: easingFn,\n animations: PointOfInterestFeature_defineProperty({}, animation, {})\n });\n this._blinkLayers[layerName] = animation;\n }\n }, {\n key: "update",\n value: function update(deltaTime) {\n var _this5 = this;\n\n PointOfInterestFeature_get(PointOfInterestFeature_getPrototypeOf(PointOfInterestFeature.prototype), "update", this).call(this, deltaTime); // Update the look angles\n\n\n if (this._target) {\n this._setLookAngles();\n } else {\n this._resetLookAngles();\n }\n\n var deltaSeconds = Math.min(deltaTime, MaxDelta) / 1000;\n var triggerBlink = false; // Set look blend values\n\n Object.entries(this._lookLayers).forEach(function (_ref12) {\n var _ref13 = PointOfInterestFeature_slicedToArray(_ref12, 2),\n layerName = _ref13[0],\n animName = _ref13[1];\n\n var options = _this5._managedLayers[layerName]; // Increment the saccade timers\n\n if (options.isActive && options.hasSaccade) {\n options.microSaccadeTimer.execute(deltaTime);\n options.macroSaccadeTimer.execute(deltaTime);\n } // Set the blend values\n\n\n if (options.animations[animName].isActive) {\n var currentH = _this5._host.AnimationFeature.getAnimationBlendWeight(layerName, animName, \'X\');\n\n var currentV = _this5._host.AnimationFeature.getAnimationBlendWeight(layerName, animName, \'Y\');\n\n var targetH = options.trackingConfig.angles.h;\n var targetV = options.trackingConfig.angles.v; // Check if the look angle has changed enough to trigger a blink\n\n if (_this5._isTargetMoving && !triggerBlink) {\n var prevTargetH = options.trackingConfig.prevAngles.h;\n var prevTargetV = options.trackingConfig.prevAngles.v;\n var changeAmount = core_MathUtils.toDegrees(core_MathUtils.getAngleBetween([prevTargetH, prevTargetV], [targetH, targetV]));\n\n if (changeAmount >= BlinkThreshold) {\n triggerBlink = true;\n }\n }\n\n options.trackingConfig.prevAngles.h = targetH;\n options.trackingConfig.prevAngles.v = targetV; // Add in the saccade movement\n\n if (options.hasSaccade) {\n core_MathUtils.dampValue(0, options.macroSaccade.h + options.macroSaccade.h, options.hVelocity, options.hDuration, options.maxHSpeed);\n targetH += options.hVelocity[0];\n core_MathUtils.dampValue(0, options.macroSaccade.v + options.macroSaccade.v, options.vVelocity, options.vDuration, options.maxVSpeed);\n targetV += options.vVelocity[0];\n } // Clamp to max speed\n\n\n var factor = core_MathUtils.clamp(deltaSeconds * options.maxSpeed, 0, 1);\n targetH = core_MathUtils.lerp(currentH, targetH, factor);\n targetV = core_MathUtils.lerp(currentV, targetV, factor); // Update the blend values\n\n _this5._host.AnimationFeature.setAnimationBlendWeight(layerName, animName, \'X\', targetH);\n\n _this5._host.AnimationFeature.setAnimationBlendWeight(layerName, animName, \'Y\', targetV);\n }\n });\n\n if (!triggerBlink || !this._isTargetMoving) {\n return;\n } // Execute blink\n\n\n Object.entries(this._blinkLayers).forEach(function (_ref14) {\n var _ref15 = PointOfInterestFeature_slicedToArray(_ref14, 2),\n layerName = _ref15[0],\n animName = _ref15[1];\n\n var animation = _this5._managedLayers[layerName].animations[animName];\n\n if (animation.isActive) {\n _this5._host.AnimationFeature.playAnimation(layerName, animName);\n }\n });\n }\n }, {\n key: "installApi",\n value: function installApi() {\n var _this6 = this;\n\n /**\n * @inner\n * @namespace PointOfInterestFeature\n */\n var api = PointOfInterestFeature_get(PointOfInterestFeature_getPrototypeOf(PointOfInterestFeature.prototype), "installApi", this).call(this);\n\n Object.defineProperties(api, {\n /**\n * @memberof PointOfInterestFeature\n * @instance\n * @see core/PointOfInterestFeature#target\n */\n target: {\n get: function get() {\n return _this6.target;\n },\n set: function set(target) {\n _this6.target = target;\n }\n }\n });\n Object.assign(api, {\n /**\n * @memberof PointOfInterestFeature\n * @instance\n * @method\n * @see core/PointOfInterestFeature#registerLookLayer\n */\n registerLookLayer: this.registerLookLayer.bind(this),\n\n /**\n * @memberof PointOfInterestFeature\n * @instance\n * @method\n * @see core/PointOfInterestFeature#registerBlinkLayer\n */\n registerBlinkLayer: this.registerBlinkLayer.bind(this),\n\n /**\n * @memberof PointOfInterestFeature\n * @instance\n * @method\n * @see core/PointOfInterestFeature#setTarget\n */\n setTarget: this.setTarget.bind(this),\n\n /**\n * @memberof PointOfInterestFeature\n * @instance\n * @method\n * @see core/PointOfInterestFeature#setTargetByName\n */\n setTargetByName: this.setTargetByName.bind(this),\n\n /**\n * @memberof PointOfInterestFeature\n * @instance\n * @method\n * @see core/PointOfInterestFeature#setTargetById\n */\n setTargetById: this.setTargetById.bind(this)\n });\n return api;\n }\n }], [{\n key: "_getWorldPosition",\n value: function _getWorldPosition(obj) {\n return [0, 0, 0];\n }\n /**\n * Return a matrix representing the global transformation matrix of an object.\n * Should be overloaded for each rendering engine implementation.\n *\n * @private\n *\n * @param {any} obj - Engine-specific 3D transform object.\n *\n * @returns {Array.} - An array consisting of 16 numbers representing\n * the 3d transformation.\n */\n\n }, {\n key: "_getWorldMatrix",\n value: function _getWorldMatrix(obj) {\n return [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1];\n }\n /**\n * Rotate the given local direction vector by the object\'s world rotation matrix.\n *\n * @private\n *\n * @param {any} obj - Engine-specific 3D transform object.\n * @param {Array.} forwardVector - Unit vector representing the local\n * forward direction of the object.\n *\n * @returns {Array.}\n */\n\n }, {\n key: "_getObjectDirection",\n value: function _getObjectDirection(obj) {\n var forwardVector = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : AxisMap.PositiveZ;\n var rotation = core_MathUtils.getRotationMatrix(this._getWorldMatrix(obj));\n return core_MathUtils.rotateVector(forwardVector, rotation);\n }\n /**\n * Calculate horizontal and vertical look angles in degrees given spherical theta\n * and phi angles in radians.\n *\n * @param {number} theta - Vertical/polar angle in radians where 0 points directly\n * along positive Y axis.\n * @param {number} phi - Horizontal/azimuthal angle in radians.\n *\n * @returns {Object} - An object with the signature {h: number, v: number} where\n * h represents horizontal rotation in degrees and v represents vertical rotation\n * in degrees.\n */\n\n }, {\n key: "_sphericalToBlendValue",\n value: function _sphericalToBlendValue(theta, phi) {\n var h = core_MathUtils.toDegrees(phi); // Offset the vertical angle so 0 is pointing forward instead of up\n\n var v = core_MathUtils.toDegrees(theta) - 90; // Convert vertical angle to -180, 180 range\n\n return {\n h: h,\n v: v\n };\n }\n }, {\n key: "_validateTransformObject",\n value: function _validateTransformObject(obj) {\n return obj instanceof Object;\n }\n }]);\n\n return PointOfInterestFeature;\n}(core_AbstractHostFeature.mix(awspack_SSMLSpeechmarkInterface.Mixin, animpack_ManagedAnimationLayerInterface.Mixin));\n\n/* harmony default export */ var core_PointOfInterestFeature = (PointOfInterestFeature_PointOfInterestFeature);\n\n// CONCATENATED MODULE: ./src/three.js/PointOfInterestFeature.js\nfunction three_js_PointOfInterestFeature_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { three_js_PointOfInterestFeature_typeof = function _typeof(obj) { return typeof obj; }; } else { three_js_PointOfInterestFeature_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return three_js_PointOfInterestFeature_typeof(obj); }\n\nfunction three_js_PointOfInterestFeature_toConsumableArray(arr) { return three_js_PointOfInterestFeature_arrayWithoutHoles(arr) || three_js_PointOfInterestFeature_iterableToArray(arr) || three_js_PointOfInterestFeature_unsupportedIterableToArray(arr) || three_js_PointOfInterestFeature_nonIterableSpread(); }\n\nfunction three_js_PointOfInterestFeature_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."); }\n\nfunction three_js_PointOfInterestFeature_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return three_js_PointOfInterestFeature_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return three_js_PointOfInterestFeature_arrayLikeToArray(o, minLen); }\n\nfunction three_js_PointOfInterestFeature_iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction three_js_PointOfInterestFeature_arrayWithoutHoles(arr) { if (Array.isArray(arr)) return three_js_PointOfInterestFeature_arrayLikeToArray(arr); }\n\nfunction three_js_PointOfInterestFeature_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction three_js_PointOfInterestFeature_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction three_js_PointOfInterestFeature_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction three_js_PointOfInterestFeature_createClass(Constructor, protoProps, staticProps) { if (protoProps) three_js_PointOfInterestFeature_defineProperties(Constructor.prototype, protoProps); if (staticProps) three_js_PointOfInterestFeature_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction three_js_PointOfInterestFeature_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { three_js_PointOfInterestFeature_get = Reflect.get; } else { three_js_PointOfInterestFeature_get = function _get(target, property, receiver) { var base = three_js_PointOfInterestFeature_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return three_js_PointOfInterestFeature_get(target, property, receiver || target); }\n\nfunction three_js_PointOfInterestFeature_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = three_js_PointOfInterestFeature_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction three_js_PointOfInterestFeature_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) three_js_PointOfInterestFeature_setPrototypeOf(subClass, superClass); }\n\nfunction three_js_PointOfInterestFeature_setPrototypeOf(o, p) { three_js_PointOfInterestFeature_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return three_js_PointOfInterestFeature_setPrototypeOf(o, p); }\n\nfunction three_js_PointOfInterestFeature_createSuper(Derived) { var hasNativeReflectConstruct = three_js_PointOfInterestFeature_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = three_js_PointOfInterestFeature_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = three_js_PointOfInterestFeature_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return three_js_PointOfInterestFeature_possibleConstructorReturn(this, result); }; }\n\nfunction three_js_PointOfInterestFeature_possibleConstructorReturn(self, call) { if (call && (three_js_PointOfInterestFeature_typeof(call) === "object" || typeof call === "function")) { return call; } return three_js_PointOfInterestFeature_assertThisInitialized(self); }\n\nfunction three_js_PointOfInterestFeature_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction three_js_PointOfInterestFeature_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction three_js_PointOfInterestFeature_getPrototypeOf(o) { three_js_PointOfInterestFeature_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return three_js_PointOfInterestFeature_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/**\n * @extends core/PointOfInterestFeature\n * @alias three.js/PointOfInterestFeature\n */\n\nvar three_js_PointOfInterestFeature_PointOfInterestFeature = /*#__PURE__*/function (_CorePointOfInterestF) {\n three_js_PointOfInterestFeature_inherits(PointOfInterestFeature, _CorePointOfInterestF);\n\n var _super = three_js_PointOfInterestFeature_createSuper(PointOfInterestFeature);\n\n function PointOfInterestFeature() {\n three_js_PointOfInterestFeature_classCallCheck(this, PointOfInterestFeature);\n\n return _super.apply(this, arguments);\n }\n\n three_js_PointOfInterestFeature_createClass(PointOfInterestFeature, [{\n key: "_validateTransformObject",\n value: function _validateTransformObject(obj) {\n return obj instanceof THREE.Object3D;\n }\n }, {\n key: "setTargetByName",\n value: function setTargetByName(name) {\n three_js_PointOfInterestFeature_get(three_js_PointOfInterestFeature_getPrototypeOf(PointOfInterestFeature.prototype), "setTargetByName", this).call(this, name);\n\n if (!name) {\n return;\n }\n\n this.target = this._scene.getObjectByName(name);\n }\n }, {\n key: "setTargetById",\n value: function setTargetById(id) {\n three_js_PointOfInterestFeature_get(three_js_PointOfInterestFeature_getPrototypeOf(PointOfInterestFeature.prototype), "setTargetByName", this).call(this, id);\n\n if (!id) {\n return;\n }\n\n this.target = this._scene.getObjectById(id);\n }\n }], [{\n key: "_getWorldPosition",\n value: function _getWorldPosition(obj) {\n obj.updateWorldMatrix(true, false);\n return obj.matrixWorld.elements.slice(12, 15);\n }\n }, {\n key: "_getWorldMatrix",\n value: function _getWorldMatrix(obj) {\n obj.updateWorldMatrix(true, false);\n return three_js_PointOfInterestFeature_toConsumableArray(obj.matrixWorld.elements);\n }\n }]);\n\n return PointOfInterestFeature;\n}(core_PointOfInterestFeature);\n\n/* harmony default export */ var three_js_PointOfInterestFeature = (three_js_PointOfInterestFeature_PointOfInterestFeature);\n\n// CONCATENATED MODULE: ./src/three.js/HostEnvironment.js\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n// eslint-disable-next-line import/prefer-default-export\nvar env = \'three\';\n// CONCATENATED MODULE: ./src/core/awspack/TextToSpeechUtils.js\nfunction TextToSpeechUtils_toConsumableArray(arr) { return TextToSpeechUtils_arrayWithoutHoles(arr) || TextToSpeechUtils_iterableToArray(arr) || TextToSpeechUtils_unsupportedIterableToArray(arr) || TextToSpeechUtils_nonIterableSpread(); }\n\nfunction TextToSpeechUtils_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."); }\n\nfunction TextToSpeechUtils_iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction TextToSpeechUtils_arrayWithoutHoles(arr) { if (Array.isArray(arr)) return TextToSpeechUtils_arrayLikeToArray(arr); }\n\nfunction TextToSpeechUtils_slicedToArray(arr, i) { return TextToSpeechUtils_arrayWithHoles(arr) || TextToSpeechUtils_iterableToArrayLimit(arr, i) || TextToSpeechUtils_unsupportedIterableToArray(arr, i) || TextToSpeechUtils_nonIterableRest(); }\n\nfunction TextToSpeechUtils_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."); }\n\nfunction TextToSpeechUtils_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return TextToSpeechUtils_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return TextToSpeechUtils_arrayLikeToArray(o, minLen); }\n\nfunction TextToSpeechUtils_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction TextToSpeechUtils_iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction TextToSpeechUtils_arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction TextToSpeechUtils_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { TextToSpeechUtils_typeof = function _typeof(obj) { return typeof obj; }; } else { TextToSpeechUtils_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return TextToSpeechUtils_typeof(obj); }\n\nfunction TextToSpeechUtils_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction TextToSpeechUtils_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction TextToSpeechUtils_createClass(Constructor, protoProps, staticProps) { if (protoProps) TextToSpeechUtils_defineProperties(Constructor.prototype, protoProps); if (staticProps) TextToSpeechUtils_defineProperties(Constructor, staticProps); return Constructor; }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/**\n * A collection of useful text-to-speech functions.\n *\n * @hideconstructor\n */\n\nvar TextToSpeechUtils_TextToSpeechUtils = /*#__PURE__*/function () {\n function TextToSpeechUtils() {\n TextToSpeechUtils_classCallCheck(this, TextToSpeechUtils);\n }\n\n TextToSpeechUtils_createClass(TextToSpeechUtils, null, [{\n key: "autoGenerateSSMLMarks",\n value:\n /**\n * Returns a new string with SSML marks inserted based on\n * matches between the input string and the input map. The\n * word matches are case-insensitive. Words within existing\n * SSML tags will not be affected. Input text will be surrounded\n * by tags if needed.\n *\n * @param {string} text - Input string.\n * @param {object} map - Input object that maps mark keys\n * to arrays of words. Example:\n *\n * {\n * \'mark:sad\' : [\'sad\', \'blue\', \'down\'],\n * \'mark:happy\' : [\'joy\', \'glad\', \'great\'],\n * \'mark:no\' : [\'no\', \'nah\', \'nay\', \'sure\']\n * }\n * @param {Array.} [randomMarks = []] - If there are sentences that don\'t\n * match any words from the map object, marks from this array will be randomly\n * chosen and inserted.\n *\n * @returns {string} - Updated input string.\n */\n function autoGenerateSSMLMarks(text, map) {\n var _this = this;\n\n var randomMarks = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];\n\n if (TextToSpeechUtils_typeof(map) !== \'object\' || map === null) {\n throw new Error("Cannot generate SSML marks for text \\"".concat(text, "\\" because map is not an object."));\n } // process the input map into an internal format\n\n\n var internalMap = this._processInputMap(map);\n\n var speakTags = [\'\', \'\'];\n var ssmlMarkRegex = //;\n var ssmlTagRegex = /<[^>]*>/g; // Identify any existing SSML tags\n\n var existingTags = [];\n var result = ssmlTagRegex.exec(text);\n\n while (result !== null) {\n existingTags.push({\n start: result.index,\n end: result.index + result[0].length,\n text: result[0]\n });\n result = ssmlTagRegex.exec(text);\n }\n\n var chunks = [];\n var index = 0;\n var ssmlMarkResult;\n var duplicateMarkToCheck = [];\n existingTags.forEach(function (existingTag) {\n var substr = text.slice(index, existingTag.start);\n\n if (substr !== \'\') {\n // auto-mark non-tag text\n chunks.push(_this._insertMarks(substr, internalMap, duplicateMarkToCheck));\n duplicateMarkToCheck = [];\n }\n\n ssmlMarkResult = ssmlMarkRegex.exec(existingTag.text);\n\n if (ssmlMarkResult !== null) {\n var markText = ssmlMarkResult[1];\n duplicateMarkToCheck.push(markText);\n } else if (!speakTags.includes(existingTag.text)) {\n chunks.push(existingTag.text);\n } // advance the index\n\n\n index = existingTag.end;\n });\n chunks.push(this._insertMarks(text.slice(index), internalMap, duplicateMarkToCheck));\n var markedText = chunks.join(\'\');\n\n if (randomMarks && randomMarks.length > 0) {\n // add random marks to any unmarked sentences\n markedText = this.addMarksToUnmarkedSentences(markedText, randomMarks);\n }\n\n return TextToSpeechUtils.validateText(markedText);\n }\n /**\n * Returns a new string with a random SSML mark inserted at each sentence that\n * does not already contain an SSML mark.\n *\n * @param {string} text - Input string.\n * @param {Array.} marks - Any array of random SSML marks to choose from\n * when modifying the text.\n *\n * @returns {string}\n */\n\n }, {\n key: "addMarksToUnmarkedSentences",\n value: function addMarksToUnmarkedSentences(text, marks) {\n if (!marks || marks.length === 0) return text;\n var ssmlMarkRegex = //g;\n var ssmlTagRegex = /<[^>]*>/g; // Find the indices of any marks in the text\n\n var markIndices = [];\n var markResult = ssmlMarkRegex.exec(text);\n\n while (markResult !== null) {\n markIndices.push(markResult.index);\n markResult = ssmlMarkRegex.exec(text);\n } // Find all SSML tags in the text\n\n\n var existingTags = [];\n var ssmlResult = ssmlTagRegex.exec(text);\n\n while (ssmlResult !== null) {\n existingTags.push({\n start: ssmlResult.index,\n end: ssmlResult.index + ssmlResult[0].length,\n text: ssmlResult[0]\n });\n ssmlResult = ssmlTagRegex.exec(text);\n } // Create a copy of the text with all SSML marks replaces with whitespace\n\n\n var cleanedText = text.slice();\n existingTags.forEach(function (existingSsml) {\n var whitespace = new Array(existingSsml.text.length + 1).join(\' \');\n cleanedText = [cleanedText.slice(0, existingSsml.start), whitespace, cleanedText.slice(existingSsml.end)].join(\'\');\n });\n\n var sentenceEndIndices = this._getSentenceEnds(cleanedText); // Only insert random marks into sentences that don\'t already have any\n\n\n var prevIndex = 0;\n var targetIndices = sentenceEndIndices.filter(function (index) {\n var containsMark = markIndices.findIndex(function (markIndex) {\n return prevIndex <= markIndex && index > markIndex;\n }) !== -1;\n prevIndex = index;\n return !containsMark;\n });\n\n var randomMarkedText = this._insertRandomMarksAt(text, targetIndices, marks);\n\n return randomMarkedText;\n }\n /**\n * Generate a version of given text that is enclosed by Polly ssml speak tags.\n *\n * @param {string} text - The text to validate.\n *\n * @returns {string} - Updated input string.\n */\n\n }, {\n key: "validateText",\n value: function validateText(text) {\n if (!text) {\n text = \'\';\n } else {\n text = text.replace(/(^\\s*<\\s*speak\\s*)>\\s*|(^\\s*)/, \'\').replace(/(\\s*<\\s*\\/\\s*speak\\s*>\\s*$|\\s*$)/, \'\');\n }\n\n return text;\n }\n /**\n * Parse an input string and insert SSML marks based on\n * word matches in a map.\n *\n * @private\n *\n * @param {string} text - Input string.\n * @param {Array.} [indices = []] - An array of indices in the text input\n * where random marks should be inserted.\n * @param {Array.} [marks = []] - An array of mark strings to choose\n * from when inserting random marks.\n *\n * @returns {string} - Updated input string.\n */\n\n }, {\n key: "_insertRandomMarksAt",\n value: function _insertRandomMarksAt(text) {\n var indices = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n var marks = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];\n\n if (!marks || marks.length === 0 || !indices || indices.length === 0) {\n return text;\n }\n\n var offset = 0;\n indices.forEach(function (index) {\n var randomMark = "");\n text = [text.slice(0, index + offset), randomMark, text.slice(index + offset)].join(\'\');\n offset += randomMark.length;\n });\n return text;\n }\n /**\n * Parses a string of text and returns an array containing the indices\n * of the last character in a sentence that is not in the following list:\n * (\'.\', \'?\', \'!\')\n *\n * @private\n *\n * @param {string} text - Text to process for end of sentence\n * indices.\n *\n * @returns {Array.} - Array of end of sentence indices.\n */\n\n }, {\n key: "_getSentenceEnds",\n value: function _getSentenceEnds(text) {\n var sentenceRegex = /[^.!?]+[.!?]+/g;\n var endSentenceRegex = /[.!?]+/;\n var result = sentenceRegex.exec(text);\n var sentenceEnds = [];\n\n while (result !== null) {\n // find the last non-punctuation character\n var punctResult = endSentenceRegex.exec(result[0]);\n sentenceEnds.push(result.index + result[0].length - punctResult[0].length);\n result = sentenceRegex.exec(text);\n }\n\n return sentenceEnds;\n }\n /**\n * Parse an input string and insert SSML marks based on\n * word matches in a map.\n *\n * @private\n *\n * @param {string} text - Input string.\n * @param {Map} map - Mapping of words to mark values that\n * will be inserted as the value for a mark\'s \'name\' attribute.\n * @param {Array} duplicatesToCheck - A list of mark values to check for duplicate against the first word\n *\n * @returns {string} - Updated input string.\n */\n\n }, {\n key: "_insertMarks",\n value: function _insertMarks(text, map, duplicatesToCheck) {\n if (text === \'\') return text;\n var wordRegex = /\\w+|\\s+|[^\\s\\w]+/g;\n var lowerCaseWord;\n var checkDuplicate = true;\n var markedWords = text.match(wordRegex).map(function (word) {\n lowerCaseWord = word.toLowerCase();\n\n if (map.has(lowerCaseWord)) {\n var marks = map.get(lowerCaseWord).map(function (mark) {\n if (checkDuplicate) {\n checkDuplicate = false;\n return duplicatesToCheck.includes(mark) ? \'\' : "");\n } else {\n return "");\n }\n });\n return "".concat(marks.join(\'\')).concat(word);\n } else {\n checkDuplicate = false;\n return word;\n }\n });\n var existingMarks = duplicatesToCheck.map(function (mark) {\n return "");\n });\n return "".concat(existingMarks.join(\'\')).concat(markedWords.join(\'\'));\n }\n /**\n * Processes an input object for mapping an array\n * of words to specific mark keys. Converts the input\n * map into a Map with a more efficient format for\n * performing mark injection.\n *\n * @private\n *\n * @param {object} map - Input object that maps mark keys\n * to arrays of words.\n *\n * @returns {Map} - Map for internal use.\n */\n\n }, {\n key: "_processInputMap",\n value: function _processInputMap(map) {\n var internalMap = new Map();\n var list = [];\n Object.entries(map).forEach(function (_ref) {\n var _ref2 = TextToSpeechUtils_slicedToArray(_ref, 2),\n key = _ref2[0],\n value = _ref2[1];\n\n if (!Array.isArray(value)) {\n throw new Error("Cannot generate SSML marks from map \\"".concat(map, "\\" because value for key \'").concat(key, "\' is not an array."));\n }\n\n value.forEach(function (word) {\n var lowerCaseWord = word.toLowerCase();\n list = internalMap.get(lowerCaseWord);\n\n if (list !== undefined && !list.includes(key)) {\n internalMap.set(lowerCaseWord, [].concat(TextToSpeechUtils_toConsumableArray(list), [key]));\n } else {\n internalMap.set(lowerCaseWord, [key]);\n }\n });\n });\n return internalMap;\n }\n }]);\n\n return TextToSpeechUtils;\n}();\n\n/* harmony default export */ var awspack_TextToSpeechUtils = (TextToSpeechUtils_TextToSpeechUtils);\n// CONCATENATED MODULE: ./src/core/awspack/AbstractSpeech.js\nfunction AbstractSpeech_toConsumableArray(arr) { return AbstractSpeech_arrayWithoutHoles(arr) || AbstractSpeech_iterableToArray(arr) || AbstractSpeech_unsupportedIterableToArray(arr) || AbstractSpeech_nonIterableSpread(); }\n\nfunction AbstractSpeech_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."); }\n\nfunction AbstractSpeech_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return AbstractSpeech_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return AbstractSpeech_arrayLikeToArray(o, minLen); }\n\nfunction AbstractSpeech_iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction AbstractSpeech_arrayWithoutHoles(arr) { if (Array.isArray(arr)) return AbstractSpeech_arrayLikeToArray(arr); }\n\nfunction AbstractSpeech_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction AbstractSpeech_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction AbstractSpeech_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction AbstractSpeech_createClass(Constructor, protoProps, staticProps) { if (protoProps) AbstractSpeech_defineProperties(Constructor.prototype, protoProps); if (staticProps) AbstractSpeech_defineProperties(Constructor, staticProps); return Constructor; }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/**\r\n * Class that can play back audio generated by AWS Polly and synchronized emit\r\n * speechmark messages.\r\n *\r\n * @abstract\r\n */\n\nvar AbstractSpeech_AbstractSpeech = /*#__PURE__*/function () {\n /**\r\n * @constructor\r\n *\r\n * @param {core/TextToSpeechFeature} speaker - The feature that owns the Speech and\r\n * will emit speechmark messages.\r\n * @param {string} text - The text of the speech.\r\n * @param {Array.} [speechmarks=[]] - An array of speechmark objects representing\r\n * the text and timing of the speech.\r\n */\n function AbstractSpeech(speaker, text) {\n var speechmarks = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];\n\n AbstractSpeech_classCallCheck(this, AbstractSpeech);\n\n this._speaker = speaker;\n this._text = text;\n this._speechmarks = speechmarks;\n this._speechmarkOffset = 0;\n\n this._reset();\n }\n /**\r\n * Reset tracking properties.\r\n *\r\n * @private\r\n *\r\n * @param {number} [currentTime=0] - Time to use for _startTime.\r\n */\n\n\n AbstractSpeech_createClass(AbstractSpeech, [{\n key: "_reset",\n value: function _reset() {\n var currentTime = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n this._startTime = currentTime;\n this._localTime = 0;\n this._pauseTime = 0;\n this._playing = false;\n this._markIter = this._speechmarks.values();\n\n var _this$_markIter$next = this._markIter.next(),\n value = _this$_markIter$next.value,\n done = _this$_markIter$next.done;\n\n this._currentMark = value;\n this._endTime = this._speechmarks.length ? this._speechmarks[this._speechmarks.length - 1].time : 0;\n this._done = done;\n this._promise = null;\n }\n /**\r\n * Create a new promise that will stop playback and emit messages for this speech.\r\n *\r\n * @param {Function=} onFinish - Funciton to execute once the speech stops.\r\n * @param {onError=} onError - Function to execute if the speech encounters an\r\n * error.\r\n * @param {Function=} onInterrupt - Function to execute if the speech is canceled.\r\n *\r\n * @returns {Deferred}\r\n *\r\n * @private\r\n */\n\n }, {\n key: "_createPromise",\n value: function _createPromise(onFinish, onError, onInterrupt) {\n var _this = this;\n\n var onResolve = function onResolve(value) {\n _this._playing = false;\n\n _this._speaker.emit(_this._speaker.constructor.EVENTS.stop, _this);\n\n _this._speaker.constructor.emit(_this._speaker.constructor.EVENTS.stop, _this);\n\n if (typeof onFinish === \'function\') {\n onFinish(value);\n }\n };\n\n var onReject = function onReject(e) {\n _this._playing = false;\n\n _this._speaker.emit(_this._speaker.constructor.EVENTS.stop, _this);\n\n _this._speaker.constructor.emit(_this._speaker.constructor.EVENTS.stop, _this);\n\n console.error("".concat(_this.constructor.name, " encountered an unexpected error: ").concat(e));\n\n if (typeof onError === \'function\') {\n onError(e);\n }\n };\n\n var onCancel = function onCancel(value) {\n _this._playing = false;\n\n _this._speaker.emit(_this._speaker.constructor.EVENTS.interrupt, _this);\n\n _this._speaker.constructor.emit(_this._speaker.constructor.EVENTS.interrupt, _this);\n\n if (typeof onInterrupt === \'function\') {\n onInterrupt(value);\n }\n };\n\n this._promise = new core_Deferred(undefined, onResolve, onReject, onCancel);\n return this._promise;\n }\n /**\r\n * Return whether or not the speech has reached it\'s end.\r\n *\r\n * @private\r\n *\r\n * @returns {boolean}\r\n */\n\n }, {\n key: "_checkFinished",\n value: function _checkFinished() {\n return this._done && this._localTime >= this._endTime;\n }\n /**\r\n * Gets the playback state of the audio.\r\n *\r\n * @readonly\r\n * @type {boolean}\r\n */\n\n }, {\n key: "playing",\n get: function get() {\n return this._playing;\n }\n /**\r\n * Gets the text of the speech.\r\n *\r\n * @readonly\r\n * @type {string}\r\n */\n\n }, {\n key: "text",\n get: function get() {\n return this._text;\n }\n /**\r\n * Gets a shallow copy of the speechmarks array for the speech.\r\n *\r\n * @readonly\r\n * @type {Array.}\r\n */\n\n }, {\n key: "speechmarks",\n get: function get() {\n return AbstractSpeech_toConsumableArray(this._speechmarks);\n }\n /**\r\n * Gets and sets the number of seconds to offset speechmark emission.\r\n * @type {number}\r\n */\n\n }, {\n key: "speechmarkOffset",\n get: function get() {\n return this._speechmarkOffset / 1000;\n },\n set: function set(offset) {\n this._speechmarkOffset = offset * 1000; // Store as milliseconds\n }\n /**\r\n * Emit speechmark messages as they are encountered in sync with audio.\r\n *\r\n * @param {number} currentTime - Current global time when update was called.\r\n */\n\n }, {\n key: "update",\n value: function update(currentTime) {\n if (!this._playing) {\n return;\n } // Update local audio time\n\n\n this._localTime = currentTime - this._startTime;\n\n if (!this._done) {\n // Emit speechmark messages for marks up to the current time\n while (!this._done && this._currentMark.time + this._speechmarkOffset <= this._localTime) {\n this._speaker.emit(this._speaker.constructor.EVENTS[this._currentMark.type], {\n speech: this,\n mark: this._currentMark\n });\n\n var _this$_markIter$next2 = this._markIter.next(),\n value = _this$_markIter$next2.value,\n done = _this$_markIter$next2.done;\n\n this._currentMark = value;\n this._done = done;\n }\n } // End playback\n\n\n if (this._checkFinished()) {\n this.stop();\n\n this._reset();\n }\n }\n /**\r\n * Play the speech from the beginning.\r\n *\r\n * @param {number} currentTime - Current global time when play was called.\r\n * @param {Function=} onFinish - Optional function to execute once the speech\r\n * promise resolves.\r\n * @param {Function=} onError - Optional function to execute if the speech\r\n * encounters and error during playback.\r\n * @param {Function=} onInterrupt - Optional function to execute if the speech\r\n * is canceled.\r\n *\r\n * @returns {Deferred} Resolves once the speech reaches the end of playback.\r\n */\n\n }, {\n key: "play",\n value: function play(currentTime, onFinish, onError, onInterrupt) {\n this._reset(currentTime);\n\n this._playing = true;\n\n this._speaker.emit(this._speaker.constructor.EVENTS.play, this);\n\n this._speaker.constructor.emit(this._speaker.constructor.EVENTS.play, this);\n\n return this._createPromise(onFinish, onError, onInterrupt);\n }\n /**\r\n * Pause the speech at the current time.\r\n *\r\n * @param {number} currentTime - Current global time when pause was called.\r\n */\n\n }, {\n key: "pause",\n value: function pause(currentTime) {\n this._playing = false;\n this._pauseTime = currentTime;\n\n this._speaker.emit(this._speaker.constructor.EVENTS.pause, this);\n\n this._speaker.constructor.emit(this._speaker.constructor.EVENTS.pause, this);\n }\n /**\r\n * Resume the speech at the current time.\r\n *\r\n * @param {number} currentTime - Current global time when resume was called.\r\n * @param {Function=} onFinish - Optional function to execute once the speech\r\n * promise resolves.\r\n * @param {Function=} onError - Optional function to execute if the speech\r\n * encounters and error during playback.\r\n * @param {Function=} onInterrupt - Optional function to execute if the speech\r\n * is canceled.\r\n *\r\n * @returns {Deferred} Resolves once the speech reaches the end of playback.\r\n */\n\n }, {\n key: "resume",\n value: function resume(currentTime, onFinish, onError, onInterrupt) {\n // Play from the beginning if the speech hasn\'t played yet\n if (!this._promise) {\n this._reset(currentTime);\n\n this._createPromise(onFinish, onError, onInterrupt);\n }\n\n this._playing = true;\n this._startTime += currentTime - this._pauseTime;\n\n this._speaker.emit(this._speaker.constructor.EVENTS.resume, this);\n\n this._speaker.constructor.emit(this._speaker.constructor.EVENTS.resume, this);\n\n return this._promise;\n }\n /**\r\n * Cancels playback of the speech at the current time. Cancel the speech promise.\r\n */\n\n }, {\n key: "cancel",\n value: function cancel() {\n if (this._promise) {\n this._promise.cancel();\n\n this._promise = null;\n }\n\n this._playing = false;\n }\n /**\r\n * Stop the speech and reset time to the beginning. Resolve the speech promise.\r\n */\n\n }, {\n key: "stop",\n value: function stop() {\n if (this._promise) {\n this._promise.resolve();\n\n this._promise = null;\n }\n\n this._playing = false;\n }\n }]);\n\n return AbstractSpeech;\n}();\n\n/* harmony default export */ var awspack_AbstractSpeech = (AbstractSpeech_AbstractSpeech);\n// CONCATENATED MODULE: ./src/core/awspack/Speech.js\nfunction Speech_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { Speech_typeof = function _typeof(obj) { return typeof obj; }; } else { Speech_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return Speech_typeof(obj); }\n\nfunction Speech_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction Speech_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction Speech_createClass(Constructor, protoProps, staticProps) { if (protoProps) Speech_defineProperties(Constructor.prototype, protoProps); if (staticProps) Speech_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction Speech_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { Speech_get = Reflect.get; } else { Speech_get = function _get(target, property, receiver) { var base = Speech_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return Speech_get(target, property, receiver || target); }\n\nfunction Speech_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = Speech_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction Speech_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) Speech_setPrototypeOf(subClass, superClass); }\n\nfunction Speech_setPrototypeOf(o, p) { Speech_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return Speech_setPrototypeOf(o, p); }\n\nfunction Speech_createSuper(Derived) { var hasNativeReflectConstruct = Speech_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = Speech_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = Speech_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return Speech_possibleConstructorReturn(this, result); }; }\n\nfunction Speech_possibleConstructorReturn(self, call) { if (call && (Speech_typeof(call) === "object" || typeof call === "function")) { return call; } return Speech_assertThisInitialized(self); }\n\nfunction Speech_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction Speech_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction Speech_getPrototypeOf(o) { Speech_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return Speech_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/**\r\n * The built-in class for asynchronous Promises.\r\n * @external Audio\r\n * @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLAudioElement/Audio\r\n */\n\n/**\r\n * @extends AbstractSpeech\r\n * @alias core/Speech\r\n */\n\nvar Speech = /*#__PURE__*/function (_AbstractSpeech) {\n Speech_inherits(Speech, _AbstractSpeech);\n\n var _super = Speech_createSuper(Speech);\n\n /**\r\n * @constructor\r\n *\r\n * @param {TextToSpeech} speaker - The owner of the Speech that will emit speechmark\r\n * messages.\r\n * @param {string} text - The text of the speech.\r\n * @param {Array.} [speechmarks=[]] - An array of speechmark objects representing\r\n * the text and timing of the speech.\r\n * @param {Object} audioConfig - Object containing audio and url.\r\n * @param {external:Audio} audioConfig.audio - Playable audio object.\r\n */\n function Speech(speaker, text) {\n var _this;\n\n var speechmarks = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];\n var audioConfig = arguments.length > 3 ? arguments[3] : undefined;\n\n Speech_classCallCheck(this, Speech);\n\n _this = _super.call(this, speaker, text, speechmarks);\n _this._audio = audioConfig.audio; // Keep track of whether the audio has finished playing through\n\n _this._audio.onended = function () {\n _this._audioFinished = true;\n };\n\n _this._audioFinished = true;\n return _this;\n }\n\n Speech_createClass(Speech, [{\n key: "_checkFinished",\n value: function _checkFinished() {\n return this._audioFinished && Speech_get(Speech_getPrototypeOf(Speech.prototype), "_checkFinished", this).call(this);\n }\n /**\r\n * Gets the playable audio for the speech.\r\n *\r\n * @readonly\r\n * @type {external:Audio}\r\n */\n\n }, {\n key: "audio",\n get: function get() {\n return this._audio;\n }\n /**\r\n * Gets the audio volume for the speech.\r\n *\r\n * @type {number}\r\n */\n\n }, {\n key: "volume",\n get: function get() {\n return this._audio.volume;\n }\n /**\r\n * Sets the audio volume for the speech.\r\n */\n ,\n set: function set(volume) {\n this._audio.volume = volume;\n }\n /**\r\n * Set the audio\'s current local time and play it.\r\n *\r\n * @private\r\n */\n\n }, {\n key: "_playAudio",\n value: function _playAudio() {\n var _this2 = this;\n\n if (this._speechmarkOffset < 0) {\n this._audio.currentTime = this._speechmarkOffset;\n setTimeout(function () {\n if (_this2._playing) {\n _this2._audio.currentTime = (_this2._localTime + _this2._speechmarkOffset) / 1000;\n\n _this2._audio.play();\n }\n }, -this._speechmarkOffset);\n } else {\n this._audio.currentTime = 0;\n\n this._audio.play();\n }\n }\n /**\r\n * Pause the audio once it is playable.\r\n *\r\n * @private\r\n */\n\n }, {\n key: "_pauseAudio",\n value: function _pauseAudio() {\n var _this3 = this;\n\n this._audio.play().then(function () {\n if (!_this3._playing) {\n _this3._audio.pause();\n }\n });\n }\n }, {\n key: "play",\n value: function play(currentTime, onFinish, onError, onInterrupt) {\n this._audioFinished = false;\n\n this._playAudio();\n\n return Speech_get(Speech_getPrototypeOf(Speech.prototype), "play", this).call(this, currentTime, onFinish, onError, onInterrupt);\n }\n }, {\n key: "pause",\n value: function pause(currentTime) {\n this._pauseAudio();\n\n Speech_get(Speech_getPrototypeOf(Speech.prototype), "pause", this).call(this, currentTime);\n }\n }, {\n key: "resume",\n value: function resume(currentTime, onFinish, onError, onInterrupt) {\n this._audioFinished = false;\n\n this._audio.play();\n\n return Speech_get(Speech_getPrototypeOf(Speech.prototype), "resume", this).call(this, currentTime, onFinish, onError, onInterrupt);\n }\n }, {\n key: "cancel",\n value: function cancel() {\n this._pauseAudio();\n\n Speech_get(Speech_getPrototypeOf(Speech.prototype), "cancel", this).call(this);\n }\n }, {\n key: "stop",\n value: function stop() {\n this._pauseAudio();\n\n this._audio.currentTime = 0;\n\n Speech_get(Speech_getPrototypeOf(Speech.prototype), "stop", this).call(this);\n }\n }]);\n\n return Speech;\n}(awspack_AbstractSpeech);\n\n/* harmony default export */ var awspack_Speech = (Speech);\n// CONCATENATED MODULE: ./src/three.js/awspack/Speech.js\nfunction awspack_Speech_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { awspack_Speech_typeof = function _typeof(obj) { return typeof obj; }; } else { awspack_Speech_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return awspack_Speech_typeof(obj); }\n\nfunction awspack_Speech_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction awspack_Speech_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction awspack_Speech_createClass(Constructor, protoProps, staticProps) { if (protoProps) awspack_Speech_defineProperties(Constructor.prototype, protoProps); if (staticProps) awspack_Speech_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction awspack_Speech_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { awspack_Speech_get = Reflect.get; } else { awspack_Speech_get = function _get(target, property, receiver) { var base = awspack_Speech_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return awspack_Speech_get(target, property, receiver || target); }\n\nfunction awspack_Speech_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = awspack_Speech_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction awspack_Speech_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) awspack_Speech_setPrototypeOf(subClass, superClass); }\n\nfunction awspack_Speech_setPrototypeOf(o, p) { awspack_Speech_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return awspack_Speech_setPrototypeOf(o, p); }\n\nfunction awspack_Speech_createSuper(Derived) { var hasNativeReflectConstruct = awspack_Speech_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = awspack_Speech_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = awspack_Speech_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return awspack_Speech_possibleConstructorReturn(this, result); }; }\n\nfunction awspack_Speech_possibleConstructorReturn(self, call) { if (call && (awspack_Speech_typeof(call) === "object" || typeof call === "function")) { return call; } return awspack_Speech_assertThisInitialized(self); }\n\nfunction awspack_Speech_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction awspack_Speech_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction awspack_Speech_getPrototypeOf(o) { awspack_Speech_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return awspack_Speech_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/**\r\n * Threejs Audio object\r\n * @external "THREE.Audio"\r\n * @see https://threejs.org/docs/#api/en/audio/Audio\r\n */\n\n/**\r\n * Threejs PositionalAudio object\r\n * @external "THREE.PositionalAudio"\r\n * @see https://threejs.org/docs/#api/en/audio/PositionalAudio\r\n */\n\n/**\r\n * @extends core/Speech\r\n * @alias three.js/Speech\r\n */\n\nvar Speech_Speech = /*#__PURE__*/function (_CoreSpeech) {\n awspack_Speech_inherits(Speech, _CoreSpeech);\n\n var _super = awspack_Speech_createSuper(Speech);\n\n /**\r\n * @constructor\r\n *\r\n * @param {three.js/TextToSpeechFeature} speaker - The owner of the Speech that\r\n * will emit speechmark messages.\r\n * @param {string} text - The text of the speech.\r\n * @param {Array.} speechmarks - An array of speechmark objects representing\r\n * the text and timing of the speech.\r\n * @param {Object} audioConfig - Object containing audio and url.\r\n * @param {external:Audio} audioConfig.audio - Playable audio object.\r\n * @param {(external:"THREE.Audio"|external:"THREE.PositionalAudio")} audioConfig.threeAudio -\r\n * Three.js audio object.\r\n */\n function Speech(textToSpeech, text) {\n var _this;\n\n var speechmarks = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];\n var audioConfig = arguments.length > 3 ? arguments[3] : undefined;\n\n awspack_Speech_classCallCheck(this, Speech);\n\n _this = _super.call(this, textToSpeech, text, speechmarks, audioConfig);\n _this._threeAudio = audioConfig.threeAudio;\n return _this;\n }\n /**\r\n * Gets the Three.js audio object for the speech.\r\n *\r\n * @readonly\r\n * @type {(external:"THREE.Audio"|external:"THREE.PositionalAudio")}\r\n */\n\n\n awspack_Speech_createClass(Speech, [{\n key: "audio",\n get: function get() {\n return this._threeAudio;\n }\n }, {\n key: "_pauseAudio",\n value: function _pauseAudio() {\n this._audio.pause();\n }\n }, {\n key: "play",\n value: function play(currentTime, onFinish, onError, onInterrupt) {\n // Re-connect the Audio element to stop playback\n this._threeAudio.disconnect();\n\n this._threeAudio.connect();\n\n return awspack_Speech_get(awspack_Speech_getPrototypeOf(Speech.prototype), "play", this).call(this, currentTime, onFinish, onError, onInterrupt);\n }\n }]);\n\n return Speech;\n}(awspack_Speech);\n\n/* harmony default export */ var three_js_awspack_Speech = (Speech_Speech);\n// CONCATENATED MODULE: ./src/core/awspack/AbstractTextToSpeechFeature.js\nfunction AbstractTextToSpeechFeature_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { AbstractTextToSpeechFeature_typeof = function _typeof(obj) { return typeof obj; }; } else { AbstractTextToSpeechFeature_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return AbstractTextToSpeechFeature_typeof(obj); }\n\nfunction AbstractTextToSpeechFeature_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction AbstractTextToSpeechFeature_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { AbstractTextToSpeechFeature_ownKeys(Object(source), true).forEach(function (key) { AbstractTextToSpeechFeature_defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { AbstractTextToSpeechFeature_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction AbstractTextToSpeechFeature_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction AbstractTextToSpeechFeature_slicedToArray(arr, i) { return AbstractTextToSpeechFeature_arrayWithHoles(arr) || AbstractTextToSpeechFeature_iterableToArrayLimit(arr, i) || AbstractTextToSpeechFeature_unsupportedIterableToArray(arr, i) || AbstractTextToSpeechFeature_nonIterableRest(); }\n\nfunction AbstractTextToSpeechFeature_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."); }\n\nfunction AbstractTextToSpeechFeature_iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction AbstractTextToSpeechFeature_arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction AbstractTextToSpeechFeature_toConsumableArray(arr) { return AbstractTextToSpeechFeature_arrayWithoutHoles(arr) || AbstractTextToSpeechFeature_iterableToArray(arr) || AbstractTextToSpeechFeature_unsupportedIterableToArray(arr) || AbstractTextToSpeechFeature_nonIterableSpread(); }\n\nfunction AbstractTextToSpeechFeature_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."); }\n\nfunction AbstractTextToSpeechFeature_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return AbstractTextToSpeechFeature_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return AbstractTextToSpeechFeature_arrayLikeToArray(o, minLen); }\n\nfunction AbstractTextToSpeechFeature_iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction AbstractTextToSpeechFeature_arrayWithoutHoles(arr) { if (Array.isArray(arr)) return AbstractTextToSpeechFeature_arrayLikeToArray(arr); }\n\nfunction AbstractTextToSpeechFeature_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction AbstractTextToSpeechFeature_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction AbstractTextToSpeechFeature_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction AbstractTextToSpeechFeature_createClass(Constructor, protoProps, staticProps) { if (protoProps) AbstractTextToSpeechFeature_defineProperties(Constructor.prototype, protoProps); if (staticProps) AbstractTextToSpeechFeature_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction AbstractTextToSpeechFeature_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { AbstractTextToSpeechFeature_get = Reflect.get; } else { AbstractTextToSpeechFeature_get = function _get(target, property, receiver) { var base = AbstractTextToSpeechFeature_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return AbstractTextToSpeechFeature_get(target, property, receiver || target); }\n\nfunction AbstractTextToSpeechFeature_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = AbstractTextToSpeechFeature_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction AbstractTextToSpeechFeature_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) AbstractTextToSpeechFeature_setPrototypeOf(subClass, superClass); }\n\nfunction AbstractTextToSpeechFeature_setPrototypeOf(o, p) { AbstractTextToSpeechFeature_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return AbstractTextToSpeechFeature_setPrototypeOf(o, p); }\n\nfunction AbstractTextToSpeechFeature_createSuper(Derived) { var hasNativeReflectConstruct = AbstractTextToSpeechFeature_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = AbstractTextToSpeechFeature_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = AbstractTextToSpeechFeature_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return AbstractTextToSpeechFeature_possibleConstructorReturn(this, result); }; }\n\nfunction AbstractTextToSpeechFeature_possibleConstructorReturn(self, call) { if (call && (AbstractTextToSpeechFeature_typeof(call) === "object" || typeof call === "function")) { return call; } return AbstractTextToSpeechFeature_assertThisInitialized(self); }\n\nfunction AbstractTextToSpeechFeature_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction AbstractTextToSpeechFeature_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction AbstractTextToSpeechFeature_getPrototypeOf(o) { AbstractTextToSpeechFeature_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return AbstractTextToSpeechFeature_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n\n\n\n/**\r\n * The Amazon Polly service object.\r\n * @external Polly\r\n * @see https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Polly.html\r\n */\n\n/**\r\n * The presigner object that can be used to generate presigned urls for the Polly service.\r\n * @external Presigner\r\n * @see https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Polly/Presigner.html\r\n */\n// Available options for Polly\n\nvar engines = [\'standard\', \'neural\'];\nvar audioFormats = [\'mp3\', \'ogg_vorbis\', \'pcm\'];\nvar speechmarkTypes = [\'sentence\', \'ssml\', \'viseme\', \'word\'];\nvar sampleRates = {\n mp3: {\n rates: [\'8000\', \'16000\', \'22050\', \'24000\'],\n defaults: {\n standard: \'2050\',\n neural: \'2400\'\n }\n },\n pcm: {\n rates: [\'8000\', \'16000\'],\n defaults: {\n standard: \'1600\',\n neural: \'1600\'\n }\n }\n};\nsampleRates.ogg_vorbis = sampleRates.mp3;\nvar awsVersion;\n/**\r\n * Base class for turning text input into playable audio. There should be one instance\r\n * per speaker, each instance can play only one piece of text at a time.\r\n *\r\n * @extends AbstractHostFeature\r\n * @abstract\r\n *\r\n * @property {(number|undefined)} AWS_VERSION - Gets the version of AWS SDK being\r\n * used. Will be undefined until [initializeService]{@link AbstractTextToSpeechFeature.initializeService}\r\n * has been successfully executed.\r\n * @property {string} [POLLY_MIN_NEURAL_VERSION=\'2.503\'] - Gets the minimum version\r\n * of the AWS SDK that is necessary to use neural voices with AWS Polly.\r\n * @property {Object} POLLY_DEFAULTS - Default values to use with calls to {@link external:Polly}.\r\n * @property {string} [POLLY_DEFAULTS.Engine=\'standard\']\r\n * @property {Array.} [POLLY_DEFAULTS.LexiconNames=[]]\r\n * @property {string} [POLLY_DEFAULTS.OutputFormat=\'mp3\']\r\n * @property {string} [POLLY_DEFAULTS.SampleRate=\'22050\']\r\n * @property {string} [POLLY_DEFAULTS.Text=\'\']\r\n * @property {string} [POLLY_DEFAULTS.TextType=\'ssml\']\r\n * @property {string} [POLLY_DEFAULTS.VoiceId=\'Amy\']\r\n * @property {string} [POLLY_DEFAULTS.LanguageCode=\'en-GB\']\r\n * @property {string} [POLLY_DEFAULTS.LanguageName=\'British English\']\r\n * @property {Array.} [POLLY_VOICES=[]] - An array of voices available in\r\n * Polly. Will be empty until [initializeService]{@link AbstractTextToSpeechFeature.initializeService}\r\n * has been successfully executed. See [Polly Documentation]{@link https://docs.aws.amazon.com/polly/latest/dg/voicelist.html}\r\n * for a full list of available voices.\r\n * @property {Object} [POLLY_LANGUAGES={}] - An object that maps language names\r\n * to language codes that are available in Polly. Will be empty until\r\n * [initializeService]{@link AbstractTextToSpeechFeature.initializeService}\r\n * has been successfully executed. See [Polly Documentation]{@link https://docs.aws.amazon.com/polly/latest/dg/SupportedLanguage.html}\r\n * for a full list of available languages and corresponding codes.\r\n * @property {Object} [POLLY_LANGUAGE_CODES={}] - An object that maps language codes\r\n * to language names that are available in Polly. Will be empty until\r\n * [initializeService]{@link AbstractTextToSpeechFeature.initializeService}\r\n * has been successfully executed. See [Polly Documentation]{@link https://docs.aws.amazon.com/polly/latest/dg/SupportedLanguage.html}\r\n * for a full list of available languages and corresponding codes.\r\n * @property {Object} EVENTS - Built-in messages that the feature emits. When the\r\n * feature is added to a {@link core/HostObject}, event names will be prefixed by the\r\n * name of the feature class + \'.\'.\r\n * @property {string} [EVENTS.ready=onReadyEvent] - Message that is emitted after\r\n * [initializeService]{@link AbstractTextToSpeechFeature.initializeService} has been\r\n * successfully executed.\r\n * @property {string} [EVENTS.play=onPlayEvent] - Message that is emitted after\r\n * each call to [play]{@link AbstractTextToSpeechFeature#play}. The speech that was played\r\n * is supplied as an argument to listener functions.\r\n * @property {string} [EVENTS.pause=onPauseEvent] - Message that is emitted after\r\n * each call to [pause]{@link AbstractTextToSpeechFeature#pause}. The speech that was paused\r\n * is supplied as an argument to listener functions.\r\n * @property {string} [EVENTS.resume=onResumeEvent] - Message that is emitted after\r\n * each call to [resume]{@link AbstractTextToSpeechFeature#resume}. The speech that was\r\n * resumed is supplied as an argument to listener functions.\r\n * @property {string} [EVENTS.interrupt=onInterruptEvent] - Message that is emitted\r\n * if there is a current speech in progress and [play]{@link AbstractTextToSpeechFeature#play}\r\n * or [resume]{@link AbstractTextToSpeechFeature#resume} are executed for a new speech.\r\n * The speech that was interrupted is supplied as an argument to listener functions.\r\n * @property {string} [EVENTS.stop=onStopEvent] - Message that is emitted after\r\n * each call to [stop]{@link AbstractTextToSpeechFeature#stop} and when a speech reaches\r\n * the end of playback. The speech that was stopped is supplied as an argument\r\n * to listener functions.\r\n * @property {string} [EVENTS.sentence=onSentenceEvent] - Message that is emitted\r\n * each time a sentence speechmark is encountered whose timestamp matches up with\r\n * the speech audio\'s current time. The sentence speechmark object is supplied as\r\n * an argument to listener functions.\r\n * @property {string} [EVENTS.word=onWordEvent] - Message that is emitted\r\n * each time a word speechmark is encountered whose timestamp matches up with\r\n * the speech audio\'s current time. The word speechmark object is supplied as\r\n * an argument to listener functions.\r\n * @property {string} [EVENTS.viseme=onVisemeEvent] - Message that is emitted\r\n * each time a viseme speechmark is encountered whose timestamp matches up with\r\n * the speech audio\'s current time. The viseme speechmark object is supplied as\r\n * an argument to listener functions.\r\n * @property {string} [EVENTS.ssml=onSsmlEvent] - Message that is emitted\r\n * each time a ssml speechmark is encountered whose timestamp matches up with\r\n * the speech audio\'s current time. The ssml speechmark object is supplied as\r\n * an argument to listener functions.\r\n * @property {Object} SERVICES - AWS services that are necessary for the feature\r\n * to function.\r\n * @property {external:Polly} SERVICES.polly - The Polly service that is used\r\n * to synthesize speechmarks. Will be undefined until [initializeService]{@link AbstractTextToSpeechFeature.initializeService}\r\n * has been successfully executed\r\n * @property {external:Presigner} SERVICES.presigner - The Polly Presigner\r\n * object that is used to synthesize speech audio. Will be undefined until\r\n * [initializeService]{@link AbstractTextToSpeechFeature.initializeService}\r\n * has been successfully executed.\r\n */\n\nvar AbstractTextToSpeechFeature_AbstractTextToSpeechFeature = /*#__PURE__*/function (_AbstractHostFeature) {\n AbstractTextToSpeechFeature_inherits(AbstractTextToSpeechFeature, _AbstractHostFeature);\n\n var _super = AbstractTextToSpeechFeature_createSuper(AbstractTextToSpeechFeature);\n\n /**\r\n * @constructor\r\n *\r\n * @param {core/HostObject} host - Host object managing the feature.\r\n * @param {Object=} options - Options that will be sent to Polly for each speech.\r\n * @param {string=} options.voice - The name of the Polly voice to use for all speech.\r\n * @param {string=} options.engine - The name of the Polly engine to use for all speech.\r\n * @param {string=} options.language - The name of the language to use for all speech.\r\n * @param {audioFormat} [options.audioFormat=\'mp3\'] - The format to use for generated\r\n * audio for all speeches.\r\n * @param {string=} options.sampleRate - The sample rate for audio files for all\r\n * speeches.\r\n * @param {number} [options.speechmarkOffset=0] - Amount of time in seconds to\r\n * offset speechmark event emission from the audio.\r\n * @param {number} [options.minEndMarkDuration=.05] - The minimum amount of time\r\n * in seconds that the last speechmark of each type in a speech can have its\r\n * duration property set to.\r\n * @param {number} [options.volume=1] - The default volume to play speech audio\r\n * with.\r\n */\n function AbstractTextToSpeechFeature(host) {\n var _this;\n\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n voice: undefined,\n engine: undefined,\n language: undefined,\n audioFormat: \'mp3\',\n sampleRate: undefined,\n speechmarkOffset: 0,\n minEndMarkDuration: 0.05,\n volume: 1\n };\n\n AbstractTextToSpeechFeature_classCallCheck(this, AbstractTextToSpeechFeature);\n\n _this = _super.call(this, host);\n _this._speechCache = {};\n _this._currentSpeech = null;\n _this._currentPromise = null;\n _this._isValidated = false;\n _this.speechmarkOffset = Number.isNaN(Number(options.speechmarkOffset)) ? 0 : Number(options.speechmarkOffset);\n _this.minEndMarkDuration = Number.isNaN(Number(options.minEndMarkDuration)) ? 0 : Number(options.minEndMarkDuration);\n _this.volume = Number.isNaN(Number(options.volume)) ? 1 : Number(options.volume);\n _this._promises = {\n volume: core_Deferred.resolve()\n };\n _this._volumePaused = false; // Set default options for each speech\n\n _this._voice = options.voice || _this.constructor.POLLY_DEFAULTS.VoiceId;\n _this._language = options.language || _this.constructor.POLLY_DEFAULTS.LanguageName;\n _this._engine = engines.includes(options.engine) ? options.engine : _this.constructor.POLLY_DEFAULTS.Engine;\n _this._audioFormat = audioFormats.includes(options.audioFormat) ? options.audioFormat : _this.constructor.POLLY_DEFAULTS.OutputFormat;\n _this._sampleRate = sampleRates[_this._audioFormat].rates.includes(options.sampleRate) ? options.sampleRate : _this.constructor.POLLY_DEFAULTS.SampleRate;\n return _this;\n }\n /**\r\n * Store Polly, Presigner and AWS SDK Version for use across all instances.\r\n *\r\n * @param {external:Polly} polly - Polly instance to use to generate speechmarks.\r\n * @param {external:Presigner} presigner - Presigner instance to use to generate\r\n * audio URLs.\r\n * @param {string} version - Version of the AWS SDK to use to validate voice options.\r\n */\n\n\n AbstractTextToSpeechFeature_createClass(AbstractTextToSpeechFeature, [{\n key: "currentSpeech",\n get:\n /**\r\n * Gets the text of the currently playing speech.\r\n *\r\n * @readonly\r\n * @type {string}\r\n */\n function get() {\n if (this._currentSpeech) {\n return this._currentSpeech.text;\n } else {\n return null;\n }\n }\n /**\r\n * Gets and sets the number of seconds to offset speechmark emission.\r\n *\r\n * @type {number}\r\n */\n\n }, {\n key: "speechmarkOffset",\n get: function get() {\n return this._speechmarkOffset;\n },\n set: function set(offset) {\n this._speechmarkOffset = offset;\n\n if (this._currentSpeech) {\n this._currentSpeech.speechmarkOffset = offset;\n }\n }\n /**\r\n * Gets and sets the The minimum amount of time in seconds that the last\r\n * speechmark of each type in a speech can have its duration property set to.\r\n *\r\n * @type number\r\n */\n\n }, {\n key: "minEndMarkDuration",\n get: function get() {\n return this._minEndMarkDuration / 1000;\n },\n set: function set(duration) {\n this._minEndMarkDuration = duration * 1000;\n }\n /**\r\n * Appends the Sumerian Hosts custom user-agent to a string if it is not\r\n * already present.\r\n *\r\n * @private\r\n *\r\n * @param {string} currentUserAgent - String to append to if needed.\r\n *\r\n * @returns {string}\r\n */\n\n }, {\n key: "_validateEngine",\n value:\n /**\r\n * Checks if a given engine type is compatible with the AWS SDK version. If it\r\n * is, return the original value. Otherwise return a default.\r\n *\r\n * @private\r\n *\r\n * @param {string} engine - The type of Polly voice engine to validate.\r\n *\r\n * @returns {string}\r\n */\n function _validateEngine(engine) {\n // Default to the standard engine if neural is not available for this version\n if (engine === undefined || this.constructor.AWS_VERSION < this.constructor.POLLY_MIN_NEURAL_VERSION) {\n engine = this.constructor.POLLY_DEFAULTS.Engine;\n }\n\n return engine;\n }\n /**\r\n * Checks if a given audio format type is compatible with Polly. If it is, return\r\n * the original value. Otherwise return a default.\r\n *\r\n * @private\r\n *\r\n * @param {string} engine - The type of Polly voice engine to validate.\r\n *\r\n * @returns {string}\r\n */\n\n }, {\n key: "_validateFormat",\n value: function _validateFormat(format) {\n if (format === undefined || !audioFormats.includes(format)) {\n format = this.constructor.POLLY_DEFAULTS.OutputFormat;\n }\n\n return format;\n }\n /**\r\n * Checks if a given audio sampling rate is compatible with the current audio\r\n * format. If it is, return the original value. Otherwise return a default.\r\n *\r\n * @private\r\n *\r\n * @param {string} engine - The type of Polly voice engine to validate.\r\n *\r\n * @returns {string}\r\n */\n\n }, {\n key: "_validateRate",\n value: function _validateRate(rate) {\n // Use default if specified sample rate is not valid for the audio format\n if (rate === undefined || !sampleRates[this._audioFormat].rates.includes(rate)) {\n rate = sampleRates[this._audioFormat].defaults[this._engine];\n }\n\n return rate;\n }\n /**\r\n * Checks if a given Polly voice id is compatible with the current Polly engine.\r\n * If it is, return the original value. Otherwise return a default.\r\n *\r\n * @private\r\n *\r\n * @param {string} engine - The type of Polly voice engine to validate.\r\n *\r\n * @returns {string}\r\n */\n\n }, {\n key: "_validateVoice",\n value: function _validateVoice(voiceId) {\n var voice = this.constructor.POLLY_VOICES.find(function (v) {\n return v.Id === voiceId;\n }); // Use the default voice if the voice isn\'t supported by the engine\n\n if (voice === undefined || !voice.SupportedEngines.includes(this._engine)) {\n voiceId = this.constructor.POLLY_DEFAULTS.VoiceId;\n }\n\n return voiceId;\n }\n /**\r\n * Checks if a given Polly language is compatible with the current Polly voice.\r\n * If it is, return the original value. Otherwise return a default.\r\n *\r\n * @private\r\n *\r\n * @param {string} engine - The type of Polly voice engine to validate.\r\n *\r\n * @returns {string}\r\n */\n\n }, {\n key: "_validateLanguage",\n value: function _validateLanguage(language) {\n var _this2 = this;\n\n var voice = this.constructor.POLLY_VOICES.find(function (v) {\n return v.Id === _this2._voice;\n });\n var languageCode = this.constructor.POLLY_LANGUAGES[language]; // Find the languages available for the current voice\n\n var availableCodes = [voice.LanguageCode];\n\n if (voice.AdditionalLanguageCodes) {\n availableCodes.push.apply(availableCodes, AbstractTextToSpeechFeature_toConsumableArray(voice.AdditionalLanguageCodes));\n } // If the current voice doesn\'t support the language, use its default\n\n\n if (!availableCodes.includes(languageCode)) {\n language = this.constructor.POLLY_LANGUAGE_CODES[voice.LanguageCode];\n }\n\n return language;\n }\n /**\r\n * Validate the current Polly options to make sure they are compatible with each\r\n * other.\r\n *\r\n * @private\r\n */\n\n }, {\n key: "_validate",\n value: function _validate() {\n // Validate speech parameters\n this._engine = this._validateEngine(this._engine);\n this._audioFormat = this._validateFormat(this._audioFormat);\n this._sampleRate = this._validateRate(this._sampleRate);\n this._voice = this._validateVoice(this._voice);\n this._language = this._validateLanguage(this._language);\n this._isValidated = true;\n }\n /**\r\n * Return an object containing parameters compatible with Polly.synthesizeSpeech.\r\n *\r\n * @private\r\n *\r\n * @returns {Object}\r\n */\n\n }, {\n key: "_getConfig",\n value: function _getConfig() {\n // Make sure parameters have been validated\n if (this.constructor.isReady && !this._isValidated) {\n this._validate();\n } // Create a config object compatible with Polly\n\n\n return {\n Engine: this._engine,\n OutputFormat: this._audioFormat,\n SampleRate: this._sampleRate,\n VoiceId: this._voice,\n LanguageCode: this.constructor.POLLY_LANGUAGES[this._language]\n };\n }\n /**\r\n * Update Polly parameters with options from a given config. All stored speeches\r\n * will be updated to use the new parameters, unless the speech text is contained\r\n * in the \'skipSpeeches\' parameter.\r\n *\r\n * @private\r\n *\r\n * @param {Object} config - Polly parameter options to overwrite.\r\n * @param {Array.} skipSpeeches - Text of any speeches that should not\r\n * have parameters updated.\r\n *\r\n * @returns {Object}\r\n */\n\n }, {\n key: "_updateConfig",\n value: function _updateConfig(config) {\n var _this3 = this;\n\n var skipSpeeches = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n\n var currentConfig = this._getConfig();\n\n if (!config) {\n return currentConfig;\n }\n\n this._isValidated = false;\n var currentConfigStr = JSON.stringify(currentConfig); // Update options\n\n if (config.Engine) {\n this._engine = config.Engine;\n }\n\n if (config.audioFormat) {\n this._audioFormat = config.audioFormat;\n }\n\n if (config.SampleRate) {\n this._sampleRate = config.SampleRate;\n }\n\n if (config.VoiceId) {\n this._voice = config.VoiceId;\n }\n\n if (config.Language) {\n this._language = config.Language;\n } // Validate the config\n\n\n var validConfig = this._getConfig(); // Exit if nothing has changed\n\n\n var configStr = JSON.stringify(validConfig);\n\n if (currentConfigStr === configStr) {\n this._isValidated = true;\n return validConfig;\n } // Update all cached configs\n\n\n Object.entries(this._speechCache).forEach(function (_ref) {\n var _ref2 = AbstractTextToSpeechFeature_slicedToArray(_ref, 2),\n text = _ref2[0],\n speech = _ref2[1];\n\n // Check if this is a skipped speech\n if (skipSpeeches.includes(text)) {\n return;\n }\n\n var speechConfigStr = JSON.stringify(speech.config); // Update the speech with new parameters\n\n if (speechConfigStr !== configStr) {\n _this3._updateSpeech(text, validConfig);\n }\n });\n return validConfig;\n }\n /**\r\n * Update an existing speech, or add a new speech with new Polly parameters with\r\n * options from a given config.\r\n *\r\n * @private\r\n *\r\n * @param {string} text - The text of the speech to update.\r\n * @param {Object} config - Polly parameter options to update.\r\n * @param {boolean} [force=false] - Whether to force the speech to be updated\r\n * if no parameters have changes.\r\n *\r\n * @returns {AbstractSpeech}\r\n */\n\n }, {\n key: "_updateSpeech",\n value: function _updateSpeech(text, config) {\n var _this4 = this;\n\n var force = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n var speech = this._speechCache[text] || {}; // Exit if nothing has changed and force is false\n\n if (!force && config !== undefined && speech.config && JSON.stringify(config) === JSON.stringify(speech.config)) {\n return speech;\n } // Create separate parameters for audio and speechmark generation\n\n\n var audioParams = AbstractTextToSpeechFeature_objectSpread(AbstractTextToSpeechFeature_objectSpread({}, config), {}, {\n Text: text,\n TextType: \'ssml\'\n });\n\n var speechmarkParams = AbstractTextToSpeechFeature_objectSpread(AbstractTextToSpeechFeature_objectSpread({}, audioParams), {}, {\n OutputFormat: \'json\',\n SpeechMarkTypes: speechmarkTypes\n }); // Generate audio and speechmarks\n\n\n speech.config = config;\n speech.promise = Promise.all([this._synthesizeSpeechmarks(speechmarkParams), this._synthesizeAudio(audioParams)]).then(function (results) {\n return _this4._createSpeech.apply(_this4, [text].concat(AbstractTextToSpeechFeature_toConsumableArray(results)));\n });\n this._speechCache[text] = speech;\n return speech;\n }\n /**\r\n * Create a new Speech object for the speaker.\r\n *\r\n * @private\r\n *\r\n * @param {TextToSpeech} speaker - The TextToSpeech instance that will own the speech.\r\n * @param {string} text - Text of the speech.\r\n * @param {Object} speechmarks - Speechmarks for the speech.\r\n * @param {Object} audioConfig - Audio for the speech.\r\n *\r\n * @returns {AbstractSpeech}\r\n */\n\n }, {\n key: "_createSpeech",\n value: function _createSpeech(text, speechmarks, audioConfig) {\n return new awspack_AbstractSpeech(this, text, speechmarks, audioConfig);\n }\n /**\r\n * Create presigned URL of speech audio for the given speech text.\r\n *\r\n * @private\r\n *\r\n * @param {Object} params - Parameters object compatible with Polly.synthesizeSpeech.\r\n *\r\n * @returns {Deferred} Resolves with an object containing the audio URL.\r\n */\n\n }, {\n key: "_synthesizeAudio",\n value: function _synthesizeAudio(params) {\n var _this5 = this;\n\n return new core_Deferred(function (resolve, reject) {\n _this5.constructor.SERVICES.presigner.getSynthesizeSpeechUrl(params, function (error, url) {\n if (!error) {\n resolve({\n url: url\n });\n } else {\n reject(error);\n }\n });\n });\n }\n /**\r\n * Retrieves and parses speechmarks for the given speech text.\r\n *\r\n * @private\r\n *\r\n * @param {Object} params - Parameters object compatible with Polly.synthesizeSpeech.\r\n *\r\n * @returns {Deferred} Resolves with an array of speechmark objects\r\n */\n\n }, {\n key: "_synthesizeSpeechmarks",\n value: function _synthesizeSpeechmarks(params) {\n var _this6 = this;\n\n return this.constructor.SERVICES.polly.synthesizeSpeech(params).promise().then(function (result) {\n // Convert charcodes to string\n var jsonString = JSON.stringify(result.AudioStream);\n var json = JSON.parse(jsonString);\n var dataStr = json.data.map(function (c) {\n return String.fromCharCode(c);\n }).join(\'\');\n var markTypes = {\n sentence: [],\n word: [],\n viseme: [],\n ssml: []\n };\n var endMarkTypes = {\n sentence: null,\n word: null,\n viseme: null,\n ssml: null\n }; // Split by enclosing {} to create speechmark objects\n\n var speechMarks = AbstractTextToSpeechFeature_toConsumableArray(dataStr.matchAll(/\\{.*?\\}(?=\\n|$)/gm)).map(function (match) {\n var mark = JSON.parse(match[0]); // Set the duration of the last speechmark stored matching this one\'s type\n\n var numMarks = markTypes[mark.type].length;\n\n if (numMarks > 0) {\n var lastMark = markTypes[mark.type][numMarks - 1];\n lastMark.duration = mark.time - lastMark.time;\n }\n\n markTypes[mark.type].push(mark);\n endMarkTypes[mark.type] = mark;\n return mark;\n }); // Find the time of the latest speechmark\n\n\n var endTimes = [];\n\n if (endMarkTypes.sentence) {\n endTimes.push(endMarkTypes.sentence.time);\n }\n\n if (endMarkTypes.word) {\n endTimes.push(endMarkTypes.word.time);\n }\n\n if (endMarkTypes.viseme) {\n endTimes.push(endMarkTypes.viseme.time);\n }\n\n if (endMarkTypes.ssml) {\n endTimes.push(endMarkTypes.ssml.time);\n }\n\n var endTime = Math.max.apply(Math, endTimes); // Calculate duration for the ending speechMarks of each type\n\n if (endMarkTypes.sentence) {\n endMarkTypes.sentence.duration = Math.max(_this6._minEndMarkDuration, endTime - endMarkTypes.sentence.time);\n }\n\n if (endMarkTypes.word) {\n endMarkTypes.word.duration = Math.max(_this6._minEndMarkDuration, endTime - endMarkTypes.word.time);\n }\n\n if (endMarkTypes.viseme) {\n endMarkTypes.viseme.duration = Math.max(_this6._minEndMarkDuration, endTime - endMarkTypes.viseme.time);\n }\n\n if (endMarkTypes.ssml) {\n endMarkTypes.ssml.duration = Math.max(_this6._minEndMarkDuration, endTime - endMarkTypes.ssml.time);\n }\n\n return speechMarks;\n });\n }\n /**\r\n * Returns a Speech object that has the given text.\r\n *\r\n * @private\r\n *\r\n * @param {string} text - The text content of the Speech.\r\n * @param {Object=} config - Options to update the Speech with.\r\n *\r\n * @returns {Deferred} Resolves with Speech or null;\r\n */\n\n }, {\n key: "_getSpeech",\n value: function _getSpeech(text, config) {\n // Make sure AWS services exist\n if (!this.constructor.isReady) {\n var e = \'AWS services have not been initialized.\';\n return core_Deferred.reject(e);\n } // Make sure its possible to generate speeches\n\n\n if (!text) {\n var _e2 = \'Cannot play a speech with no text.\';\n return core_Deferred.reject(_e2);\n } // Update the speech with options\n\n\n text = awspack_TextToSpeechUtils.validateText(text);\n config = this._updateConfig(config, text);\n return this._updateSpeech(text, config).promise;\n }\n /**\r\n * Adds a namespace to the host with the name of the feature to contain properties\r\n * and methods from the feature that users of the host need access to.\r\n *\r\n * @see TextToSpeechFeature\r\n */\n\n }, {\n key: "installApi",\n value: function installApi() {\n var _this7 = this;\n\n /**\r\n * @inner\r\n * @namespace TextToSpeechFeature\r\n */\n var api = AbstractTextToSpeechFeature_get(AbstractTextToSpeechFeature_getPrototypeOf(AbstractTextToSpeechFeature.prototype), "installApi", this).call(this);\n\n Object.assign(api, {\n /**\r\n * @memberof TextToSpeechFeature\r\n * @instance\r\n * @method\r\n * @see AbstractTextToSpeechFeature#play\r\n */\n play: this.play.bind(this),\n\n /**\r\n * @memberof TextToSpeechFeature\r\n * @instance\r\n * @method\r\n * @see AbstractTextToSpeechFeature#pause\r\n */\n pause: this.pause.bind(this),\n\n /**\r\n * @memberof TextToSpeechFeature\r\n * @instance\r\n * @method\r\n * @see AbstractTextToSpeechFeature#resume\r\n */\n resume: this.resume.bind(this),\n\n /**\r\n * @memberof TextToSpeechFeature\r\n * @instance\r\n * @method\r\n * @see AbstractTextToSpeechFeature#stop\r\n */\n stop: this.stop.bind(this),\n\n /**\r\n * @memberof TextToSpeechFeature\r\n * @instance\r\n * @method\r\n * @see AbstractTextToSpeechFeature#getVolume\r\n */\n getVolume: this.getVolume.bind(this),\n\n /**\r\n * @memberof TextToSpeechFeature\r\n * @instance\r\n * @method\r\n * @see AbstractTextToSpeechFeature#setVolume\r\n */\n setVolume: this.setVolume.bind(this),\n\n /**\r\n * @memberof TextToSpeechFeature\r\n * @instance\r\n * @method\r\n * @see AbstractTextToSpeechFeature#pauseVolume\r\n */\n pauseVolume: this.pauseVolume.bind(this),\n\n /**\r\n * @memberof TextToSpeechFeature\r\n * @instance\r\n * @method\r\n * @see AbstractTextToSpeechFeature#resumeVolume\r\n */\n resumeVolume: this.resumeVolume.bind(this)\n });\n Object.defineProperties(api, {\n /**\r\n * @memberof TextToSpeechFeature\r\n * @instance\r\n * @see AbstractTextToSpeechFeature#speechmarkOffset\r\n */\n speechmarkOffset: {\n get: function get() {\n return _this7.speechmarkOffset;\n },\n set: function set(offset) {\n _this7.speechmarkOffset = offset;\n }\n }\n });\n return api;\n }\n /**\r\n * Gets and sets the volume used for all audio clips played by the speaker.\r\n *\r\n * @type {number}\r\n */\n\n }, {\n key: "volume",\n get: function get() {\n return this._volume;\n }\n /**\r\n * Gets whether or not the speaker\'s volume value is currently being tweened.\r\n *\r\n * @readonly\r\n * @type {boolean}\r\n */\n ,\n set: function set(volume) {\n this._volume = core_MathUtils.clamp(volume);\n }\n }, {\n key: "volumePending",\n get: function get() {\n return this._promises.volume && this._promises.volume.pending;\n }\n /**\r\n * Gets the volume used for all audio clips played by the speaker.\r\n *\r\n * @returns {number}\r\n */\n\n }, {\n key: "getVolume",\n value: function getVolume() {\n return this.volume;\n }\n /**\r\n * Updates the volume used for all audio clips played by the speaker over time.\r\n *\r\n * @param {number} volume - Target volume value.\r\n * @param {number} [seconds=0] - Amount of time it will take to reach the target\r\n * volume.\r\n * @param {Function=} easingFn - Easing function used for interpolation.\r\n *\r\n * @returns {Deferred}\r\n */\n\n }, {\n key: "setVolume",\n value: function setVolume(volume) {\n var seconds = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var easingFn = arguments.length > 2 ? arguments[2] : undefined;\n\n if (this.volumePending) {\n this._promises.volume.cancel();\n }\n\n volume = core_MathUtils.clamp(volume);\n this._promises.volume = animpack_AnimationUtils.interpolateProperty(this, \'volume\', volume, {\n seconds: seconds,\n easingFn: easingFn\n });\n return this._promises.volume;\n }\n /**\r\n * Pause interpolation happening on the speaker\'s volume property.\r\n *\r\n * @returns {boolean}\r\n */\n\n }, {\n key: "pauseVolume",\n value: function pauseVolume() {\n this._volumePaused = true;\n return this.volumePending;\n }\n /**\r\n * Resume any interpolation happening on the speaker\'s volume property.\r\n *\r\n * @returns {boolean}\r\n */\n\n }, {\n key: "resumeVolume",\n value: function resumeVolume() {\n this._volumePaused = false;\n return this.volumePending;\n }\n /**\r\n * Update the currently playing speech.\r\n *\r\n * @param {number} deltaTime - Time since the last update.\r\n */\n\n }, {\n key: "update",\n value: function update(deltaTime) {\n if (!this._volumePaused) {\n this._promises.volume.execute(deltaTime);\n }\n\n if (this._currentSpeech && this._currentSpeech.playing) {\n this._currentSpeech.volume = this._volume;\n\n this._currentSpeech.update(this._host.now);\n\n AbstractTextToSpeechFeature_get(AbstractTextToSpeechFeature_getPrototypeOf(AbstractTextToSpeechFeature.prototype), "update", this).call(this, deltaTime);\n }\n }\n /**\r\n * Set the current speech to a new asset and update the speech\'s speechmark\r\n * offset value to match that of the feature.\r\n *\r\n * @private\r\n *\r\n * @param {AbstractSpeech} speech - Speech to set as current.\r\n */\n\n }, {\n key: "_setCurrentSpeech",\n value: function _setCurrentSpeech(speech) {\n speech.speechmarkOffset = this._speechmarkOffset;\n this._currentSpeech = speech;\n }\n /**\r\n * Create a promise that will play/resume a speech with the given text after\r\n * the audio context attempts to resume and speech audio is retrieved from Polly.\r\n *\r\n * @private\r\n *\r\n * @param {string} text - The text of the new speech to play.\r\n * @param {Object=} config - Optional parameters for the speech.\r\n * @param {string} [playMethod = \'play\'] - Method to execute on the resulting\r\n * Speech object. Valid options are \'play\' and \'resume\'.\r\n */\n\n }, {\n key: "_startSpeech",\n value: function _startSpeech(text, config) {\n var _this8 = this;\n\n var playMethod = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : \'play\';\n\n // If no text is provided, try to use the current speech\n if (text === undefined && playMethod === \'resume\' && this._currentSpeech) {\n text = this._currentSpeech.text;\n }\n\n var currentPromise = this._currentPromise || {\n play: new core_Deferred(undefined, function () {\n currentPromise.speech.cancel();\n }, function () {\n currentPromise.speech.cancel();\n }, function () {\n currentPromise.speech.cancel();\n }),\n speech: new core_Deferred()\n };\n this._currentPromise = currentPromise;\n\n this._getSpeech(text, config).then(function (speech) {\n // Exit if the promise is no longer pending because of user interaction\n if (!currentPromise.play.pending) {\n return;\n } else if (_this8._currentPromise !== currentPromise) {\n // Cancel if another call to play has already been made\n currentPromise.play.cancel();\n return;\n } // Reset current speech when the speech ends\n\n\n var onFinish = function onFinish() {\n _this8._currentSpeech = null;\n _this8._currentPromise = null;\n }; // Cancel the currently playing speech\n\n\n if (_this8._currentSpeech && _this8._currentSpeech.playing) {\n if (playMethod === \'play\') {\n _this8._currentSpeech.cancel();\n } else if (playMethod === \'resume\' && _this8._currentSpeech.audio !== speech.audio) {\n _this8._currentSpeech.cancel();\n }\n }\n\n _this8._setCurrentSpeech(speech); // Play the speech\n\n\n currentPromise.speech = speech[playMethod](_this8._host.now, onFinish, onFinish, onFinish);\n currentPromise.speech.then(function () {\n if (currentPromise.speech.resolved) {\n currentPromise.play.resolve();\n } else {\n currentPromise.play.cancel();\n }\n })["catch"](function (error) {\n currentPromise.play.reject(error);\n });\n })["catch"](function (e) {\n e = "Cannot ".concat(playMethod, " speech ").concat(text, " on host ").concat(_this8.host.id, ". ").concat(e);\n currentPromise.play.reject(e);\n });\n\n return currentPromise.play;\n }\n /**\r\n * Stop any speeches currently playing and play a new speech from the beginning.\r\n *\r\n * @param {string} text - The text of the new speech to play.\r\n * @param {Object=} config - Optional parameters for the speech.\r\n *\r\n * @returns {Deferred}\r\n */\n\n }, {\n key: "play",\n value: function play(text, config) {\n return this._startSpeech(text, config, \'play\');\n }\n /**\r\n * If a speech is currently playing, pause it at the current time.\r\n */\n\n }, {\n key: "pause",\n value: function pause() {\n if (this._currentSpeech && this._currentSpeech.playing) {\n this._currentSpeech.pause(this._host.now);\n } else {\n console.warn("Cannot pause speech on host ".concat(this.host.id, ". No speech is currently playing"));\n }\n }\n /**\r\n * Stop any speeches currently playing and resume a new speech from the current\r\n * time.\r\n *\r\n * @param {string=} text - The text of the new speech to play. If undefined and\r\n * there is a current speech that is paused, the current speech will be resumed.\r\n * @param {Object=} config - Optional parameters for the speech.\r\n *\r\n * @returns {Deferred}\r\n */\n\n }, {\n key: "resume",\n value: function resume(text, config) {\n return this._startSpeech(text, config, \'resume\');\n }\n /**\r\n * If a speech is currently playing, stop playback and reset time.\r\n */\n\n }, {\n key: "stop",\n value: function stop() {\n if (this._currentSpeech && this._currentSpeech.playing) {\n this._currentSpeech.stop();\n\n this._currentSpeech = null;\n } else {\n console.warn("Cannot stop speech on host ".concat(this.host.id, ". No speech is currently playing."));\n }\n }\n }, {\n key: "discard",\n value: function discard() {\n if (this._currentSpeech && this._currentSpeech.playing) {\n this._currentSpeech.stop();\n }\n\n delete this._speechCache;\n\n AbstractTextToSpeechFeature_get(AbstractTextToSpeechFeature_getPrototypeOf(AbstractTextToSpeechFeature.prototype), "discard", this).call(this);\n }\n }], [{\n key: "initializeService",\n value: function initializeService(polly, presigner, version) {\n var _this9 = this;\n\n // Make sure all were defined\n if (polly === undefined || presigner === undefined || version === undefined) {\n throw new Error(\'Cannot initialize TextToSpeech feature. All arguments must be defined.\');\n } // Add sumerian hosts user-agent\n\n\n if (polly.config) {\n polly.config.customUserAgent = this._withCustomUserAgent(polly.config.customUserAgent);\n }\n\n if (presigner.service && presigner.service.config) {\n presigner.service.config.customUserAgent = this._withCustomUserAgent(presigner.service.config.customUserAgent);\n }\n\n this._isReady = false; // Store parameters\n\n this.SERVICES.polly = polly;\n this.SERVICES.presigner = presigner;\n awsVersion = version; // Clear the current polly objects\n\n var availableVoices = this.POLLY_VOICES;\n availableVoices.length = 0;\n var availableLanguages = this.POLLY_LANGUAGES;\n Object.keys(availableLanguages).forEach(function (name) {\n delete availableLanguages[name];\n });\n var availableLanguageCodes = this.POLLY_LANGUAGE_CODES;\n Object.keys(availableLanguageCodes).forEach(function (name) {\n delete availableLanguageCodes[name];\n }); // Re-populate according to version\n\n var minNeuralSdk = this.POLLY_MIN_NEURAL_VERSION;\n return this.SERVICES.polly.describeVoices().promise().then(function (response) {\n var allCodes = {};\n response.Voices.forEach(function (voice) {\n if (voice.SupportedEngines.includes(\'standard\') || version >= minNeuralSdk) {\n availableVoices.push(voice);\n }\n\n availableVoices.forEach(function (voice) {\n availableLanguages[voice.LanguageName] = voice.LanguageCode;\n allCodes[voice.LanguageCode] = voice.LanguageName;\n });\n });\n Object.entries(availableLanguages).forEach(function (_ref3) {\n var _ref4 = AbstractTextToSpeechFeature_slicedToArray(_ref3, 2),\n name = _ref4[0],\n code = _ref4[1];\n\n availableLanguageCodes[code] = name;\n }); // Notify that we\'re ready to generate speeches\n\n _this9._isReady = true;\n\n _this9.emit(_this9.EVENTS.ready);\n });\n }\n /**\r\n * Indicates whether or not the class is capable of generating speech audio. Polly,\r\n * Presigner and AWS SDK version number must have been defined using\r\n * [initializeService]{@link AbstractTextToSpeechFeature.initializeService}.\r\n *\r\n * @readonly\r\n * @type {boolean}\r\n */\n\n }, {\n key: "isReady",\n get: function get() {\n return this._isReady;\n }\n }, {\n key: "_withCustomUserAgent",\n value: function _withCustomUserAgent(currentUserAgent) {\n var sumerianHostsUserAgent = \'request-source/SumerianHosts\';\n\n if (currentUserAgent == null) {\n return sumerianHostsUserAgent;\n }\n\n if (currentUserAgent.indexOf(sumerianHostsUserAgent) !== -1) {\n return currentUserAgent;\n }\n\n return currentUserAgent.concat(\' \', sumerianHostsUserAgent);\n }\n }]);\n\n return AbstractTextToSpeechFeature;\n}(core_AbstractHostFeature);\n\nObject.defineProperties(AbstractTextToSpeechFeature_AbstractTextToSpeechFeature, {\n AWS_VERSION: {\n get: function get() {\n return awsVersion;\n }\n },\n POLLY_MIN_NEURAL_VERSION: {\n value: \'2.503\',\n writable: false\n },\n POLLY_DEFAULTS: {\n value: {\n Engine: \'standard\',\n LexiconNames: [],\n OutputFormat: \'mp3\',\n SampleRate: \'22050\',\n Text: \'\',\n TextType: \'ssml\',\n VoiceId: \'Amy\',\n LanguageCode: \'en-GB\',\n LanguageName: \'British English\'\n },\n writable: false\n },\n POLLY_VOICES: {\n value: [],\n writable: false\n },\n POLLY_LANGUAGES: {\n value: {},\n writable: false\n },\n POLLY_LANGUAGE_CODES: {\n value: {},\n writable: false\n },\n _isReady: {\n value: false,\n writable: true\n },\n EVENTS: {\n value: AbstractTextToSpeechFeature_objectSpread(AbstractTextToSpeechFeature_objectSpread({}, Object.getPrototypeOf(AbstractTextToSpeechFeature_AbstractTextToSpeechFeature).EVENTS), {}, {\n ready: \'onReadyEvent\',\n play: \'onPlayEvent\',\n pause: \'onPauseEvent\',\n resume: \'onResumeEvent\',\n interrupt: \'onInterruptEvent\',\n stop: \'onStopEvent\',\n sentence: \'onSentenceEvent\',\n word: \'onWordEvent\',\n viseme: \'onVisemeEvent\',\n ssml: \'onSsmlEvent\'\n })\n },\n SERVICES: {\n value: AbstractTextToSpeechFeature_objectSpread(AbstractTextToSpeechFeature_objectSpread({}, Object.getPrototypeOf(AbstractTextToSpeechFeature_AbstractTextToSpeechFeature).SERVICES), {}, {\n polly: undefined,\n presigner: undefined\n })\n }\n});\n/* harmony default export */ var awspack_AbstractTextToSpeechFeature = (AbstractTextToSpeechFeature_AbstractTextToSpeechFeature);\n// CONCATENATED MODULE: ./src/core/awspack/TextToSpeechFeature.js\nfunction TextToSpeechFeature_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { TextToSpeechFeature_typeof = function _typeof(obj) { return typeof obj; }; } else { TextToSpeechFeature_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return TextToSpeechFeature_typeof(obj); }\n\nfunction TextToSpeechFeature_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction TextToSpeechFeature_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction TextToSpeechFeature_createClass(Constructor, protoProps, staticProps) { if (protoProps) TextToSpeechFeature_defineProperties(Constructor.prototype, protoProps); if (staticProps) TextToSpeechFeature_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction TextToSpeechFeature_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { TextToSpeechFeature_get = Reflect.get; } else { TextToSpeechFeature_get = function _get(target, property, receiver) { var base = TextToSpeechFeature_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return TextToSpeechFeature_get(target, property, receiver || target); }\n\nfunction TextToSpeechFeature_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = TextToSpeechFeature_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction TextToSpeechFeature_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) TextToSpeechFeature_setPrototypeOf(subClass, superClass); }\n\nfunction TextToSpeechFeature_setPrototypeOf(o, p) { TextToSpeechFeature_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return TextToSpeechFeature_setPrototypeOf(o, p); }\n\nfunction TextToSpeechFeature_createSuper(Derived) { var hasNativeReflectConstruct = TextToSpeechFeature_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = TextToSpeechFeature_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = TextToSpeechFeature_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return TextToSpeechFeature_possibleConstructorReturn(this, result); }; }\n\nfunction TextToSpeechFeature_possibleConstructorReturn(self, call) { if (call && (TextToSpeechFeature_typeof(call) === "object" || typeof call === "function")) { return call; } return TextToSpeechFeature_assertThisInitialized(self); }\n\nfunction TextToSpeechFeature_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction TextToSpeechFeature_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction TextToSpeechFeature_getPrototypeOf(o) { TextToSpeechFeature_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return TextToSpeechFeature_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n/**\r\n * @extends AbstractTextToSpeechFeature\r\n * @alias core/TextToSpeechFeature\r\n */\n\nvar TextToSpeechFeature_TextToSpeechFeature = /*#__PURE__*/function (_AbstractTextToSpeech) {\n TextToSpeechFeature_inherits(TextToSpeechFeature, _AbstractTextToSpeech);\n\n var _super = TextToSpeechFeature_createSuper(TextToSpeechFeature);\n\n function TextToSpeechFeature() {\n var _this;\n\n TextToSpeechFeature_classCallCheck(this, TextToSpeechFeature);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n _this._enabled = false;\n\n _this._setAudioContext();\n\n _this._observeAudioContext();\n\n return _this;\n }\n /**\r\n * Store the audio context that will be used to ensure audio can be played.\r\n *\r\n * @private\r\n */\n\n\n TextToSpeechFeature_createClass(TextToSpeechFeature, [{\n key: "_setAudioContext",\n value: function _setAudioContext() {\n this._audioContext = new AudioContext();\n }\n /**\r\n * Listen for state changes on the audio context to determine whether the feature\r\n * is enabled.\r\n *\r\n * @private\r\n */\n\n }, {\n key: "_observeAudioContext",\n value: function _observeAudioContext() {\n var _this2 = this;\n\n if (this._audioContext) {\n this._audioContext.onstatechange = function () {\n if (_this2._audioContext.state === \'running\') {\n _this2._enabled = true;\n } else {\n _this2._enabled = false;\n console.warn(\'The audio context is not running. Speech will not be able to be played until it is resumed. Use the "TextToSpeechFeature.resumeAudio" method to try to resume it after a user gesture.\');\n }\n };\n\n this._audioContext.onstatechange();\n }\n }\n /**\r\n * Create an Audio object of speech audio for the given speech text.\r\n *\r\n * @private\r\n *\r\n * @param {Object} params - Parameters object compatible with Polly.synthesizeSpeech.\r\n *\r\n * @returns {Promise} Resolves with an object containing the audio URL and Audio\r\n * object.\r\n */\n\n }, {\n key: "_synthesizeAudio",\n value: function _synthesizeAudio(params) {\n var _this3 = this;\n\n return TextToSpeechFeature_get(TextToSpeechFeature_getPrototypeOf(TextToSpeechFeature.prototype), "_synthesizeAudio", this).call(this, params).then(function (result) {\n var url = result.url; // Create an Audio object that points to the presigned url\n\n var audio = new Audio(url);\n audio.loop = _this3.loop;\n audio.crossOrigin = \'anonymous\';\n audio.preload = \'auto\';\n result.audio = audio;\n return new Promise(function (resolve) {\n // Resolve once the minimum amount is loaded\n audio.addEventListener(\'canplaythrough\', function () {\n resolve(result);\n }); // Start loading the audio\n\n document.body.appendChild(audio);\n audio.load();\n });\n });\n }\n /**\r\n * Create a new Speech object for the speaker.\r\n *\r\n * @private\r\n *\r\n * @param {TextToSpeech} speaker - The TextToSpeech instance that will own the speech.\r\n * @param {string} text - Text of the speech.\r\n * @param {Object} speechmarks - Speechmarks for the speech.\r\n * @param {Object} audioConfig - Audio for the speech.\r\n *\r\n * @returns {AbstractSpeech}\r\n */\n\n }, {\n key: "_createSpeech",\n value: function _createSpeech(text, speechmarks, audioConfig) {\n return new three_js_awspack_Speech(this, text, speechmarks, audioConfig);\n }\n /**\r\n * Gets whether or not the audio context is running and speech can be played.\r\n *\r\n * @readonly\r\n * @type {boolean}\r\n */\n\n }, {\n key: "enabled",\n get: function get() {\n return this._enabled;\n }\n /**\r\n * Try to resume the audio context. This will be automatically executed each time\r\n * speech is played or resumed. If using manually, it should be called after a\r\n * user interaction occurs.\r\n *\r\n * @returns {Deferred} - Resolves once the audio context has resumed.\r\n */\n\n }, {\n key: "resumeAudio",\n value: function resumeAudio() {\n var _this4 = this;\n\n var promise = new core_Deferred(function (resolve, reject) {\n _this4._audioContext.resume().then(function () {\n _this4._enabled = true;\n resolve();\n })["catch"](function (e) {\n _this4._enabled = false;\n reject(e);\n });\n });\n return promise;\n }\n }, {\n key: "_startSpeech",\n value: function _startSpeech(text, config) {\n var _this5 = this;\n\n var playMethod = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : \'play\';\n var currentPromise = {\n play: new core_Deferred(undefined, function () {\n currentPromise.speech.cancel();\n }, function () {\n currentPromise.speech.cancel();\n }, function () {\n currentPromise.speech.cancel();\n }),\n speech: new core_Deferred()\n };\n this._currentPromise = currentPromise; // Try to start the audio context\n\n this.resumeAudio().then(function () {\n // Exit if the promise is no longer pending because of user interaction\n if (!currentPromise.play.pending) {\n return;\n } // Cancel if another call to play has already been made\n else if (_this5._currentPromise !== currentPromise) {\n currentPromise.play.cancel();\n return;\n } // The audio context is running so the speech can be played\n\n\n if (_this5._enabled) {\n TextToSpeechFeature_get(TextToSpeechFeature_getPrototypeOf(TextToSpeechFeature.prototype), "_startSpeech", _this5).call(_this5, text, config, playMethod);\n } // Reject if the audio context is not running\n else {\n currentPromise.reject(new Error("Cannot ".concat(playMethod, " speech on host ").concat(_this5._host.id, ". The audio context is not running. Use the \\"TextToSpeechFeature.resumeAudio\\" method to try to resume it after a user gesture.")));\n }\n });\n return currentPromise.play;\n }\n }, {\n key: "play",\n value: function play(text, config) {\n return this._startSpeech(text, config, \'play\');\n }\n }, {\n key: "resume",\n value: function resume(text, config) {\n return this._startSpeech(text, config, \'resume\');\n }\n }, {\n key: "installApi",\n value: function installApi() {\n var _this6 = this;\n\n var api = TextToSpeechFeature_get(TextToSpeechFeature_getPrototypeOf(TextToSpeechFeature.prototype), "installApi", this).call(this);\n\n Object.defineProperties(api, {\n /**\r\n * @memberof TextToSpeechFeature\r\n * @instance\r\n * @see core/TextToSpeechFeature#enabled\r\n */\n enabled: {\n get: function get() {\n return _this6._enabled;\n }\n }\n });\n return api;\n }\n }]);\n\n return TextToSpeechFeature;\n}(awspack_AbstractTextToSpeechFeature);\n\n/* harmony default export */ var awspack_TextToSpeechFeature = (TextToSpeechFeature_TextToSpeechFeature);\n// CONCATENATED MODULE: ./src/three.js/awspack/TextToSpeechFeature.js\nfunction awspack_TextToSpeechFeature_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { awspack_TextToSpeechFeature_typeof = function _typeof(obj) { return typeof obj; }; } else { awspack_TextToSpeechFeature_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return awspack_TextToSpeechFeature_typeof(obj); }\n\nfunction awspack_TextToSpeechFeature_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction awspack_TextToSpeechFeature_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction awspack_TextToSpeechFeature_createClass(Constructor, protoProps, staticProps) { if (protoProps) awspack_TextToSpeechFeature_defineProperties(Constructor.prototype, protoProps); if (staticProps) awspack_TextToSpeechFeature_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction awspack_TextToSpeechFeature_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { awspack_TextToSpeechFeature_get = Reflect.get; } else { awspack_TextToSpeechFeature_get = function _get(target, property, receiver) { var base = awspack_TextToSpeechFeature_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return awspack_TextToSpeechFeature_get(target, property, receiver || target); }\n\nfunction awspack_TextToSpeechFeature_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = awspack_TextToSpeechFeature_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction awspack_TextToSpeechFeature_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) awspack_TextToSpeechFeature_setPrototypeOf(subClass, superClass); }\n\nfunction awspack_TextToSpeechFeature_setPrototypeOf(o, p) { awspack_TextToSpeechFeature_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return awspack_TextToSpeechFeature_setPrototypeOf(o, p); }\n\nfunction awspack_TextToSpeechFeature_createSuper(Derived) { var hasNativeReflectConstruct = awspack_TextToSpeechFeature_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = awspack_TextToSpeechFeature_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = awspack_TextToSpeechFeature_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return awspack_TextToSpeechFeature_possibleConstructorReturn(this, result); }; }\n\nfunction awspack_TextToSpeechFeature_possibleConstructorReturn(self, call) { if (call && (awspack_TextToSpeechFeature_typeof(call) === "object" || typeof call === "function")) { return call; } return awspack_TextToSpeechFeature_assertThisInitialized(self); }\n\nfunction awspack_TextToSpeechFeature_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction awspack_TextToSpeechFeature_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction awspack_TextToSpeechFeature_getPrototypeOf(o) { awspack_TextToSpeechFeature_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return awspack_TextToSpeechFeature_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/**\r\n * Threejs PositionalAudio object\r\n * @external "THREE.AudioListener"\r\n * @see https://threejs.org/docs/#api/en/audio/AudioListener\r\n */\n\n/**\r\n * Threejs Audio object\r\n * @external "THREE.Object3D"\r\n * @see https://threejs.org/docs/#api/en/core/Object3D\r\n */\n\n/**\r\n * @extends core/TextToSpeechFeature\r\n * @alias three.js/TextToSpeechFeature\r\n */\n\nvar awspack_TextToSpeechFeature_TextToSpeechFeature = /*#__PURE__*/function (_CoreTextToSpeechFeat) {\n awspack_TextToSpeechFeature_inherits(TextToSpeechFeature, _CoreTextToSpeechFeat);\n\n var _super = awspack_TextToSpeechFeature_createSuper(TextToSpeechFeature);\n\n /**\r\n * @constructor\r\n *\r\n * @param {three/HostObject} host - Host object managing the feature.\r\n * @param {Object=} options - Options that will be sent to Polly for each speech.\r\n * @param {external:"THREE.AudioListener"} options.listener - Three audio listener to use with\r\n * audio.\r\n * @param {external:"THREE.Object3D"=} options.attachTo - Optional object to attach the speech\r\n * audio to.\r\n */\n function TextToSpeechFeature(host) {\n var _this;\n\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n voice: undefined,\n engine: undefined,\n language: undefined,\n audioFormat: \'mp3\',\n sampleRate: undefined,\n listener: undefined,\n attachTo: undefined\n };\n\n awspack_TextToSpeechFeature_classCallCheck(this, TextToSpeechFeature);\n\n _this = _super.call(this, host, options);\n _this._listener = options.listener;\n _this._attachTo = options.attachTo || host.owner;\n\n _this._setAudioContext();\n\n _this._observeAudioContext();\n\n return _this;\n }\n\n awspack_TextToSpeechFeature_createClass(TextToSpeechFeature, [{\n key: "_setAudioContext",\n value: function _setAudioContext() {\n if (this._listener) {\n this._audioContext = this._listener.context;\n }\n }\n /**\r\n * Create an Audio object and Three.js audio object of speech audio for the\r\n * given speech text.\r\n *\r\n * @private\r\n *\r\n * @param {Object} params - Parameters object compatible with Polly.synthesizeSpeech.\r\n *\r\n * @returns {Promise} Resolves with an object containing the audio URL and Audio\r\n * objects.\r\n */\n\n }, {\n key: "_synthesizeAudio",\n value: function _synthesizeAudio(params) {\n var _this2 = this;\n\n return awspack_TextToSpeechFeature_get(awspack_TextToSpeechFeature_getPrototypeOf(TextToSpeechFeature.prototype), "_synthesizeAudio", this).call(this, params).then(function (result) {\n if (_this2._attachTo !== undefined) {\n // Create positional audio if there\'s an attach point\n result.threeAudio = new THREE.PositionalAudio(_this2._listener);\n\n _this2._attachTo.add(result.threeAudio);\n } else {\n // Create non-positional audio\n result.threeAudio = new THREE.Audio(_this2._listener);\n } // Set Audio object as the source\n\n\n result.threeAudio.setMediaElementSource(result.audio);\n return result;\n });\n }\n }]);\n\n return TextToSpeechFeature;\n}(awspack_TextToSpeechFeature);\n\n/* harmony default export */ var three_js_awspack_TextToSpeechFeature = (awspack_TextToSpeechFeature_TextToSpeechFeature);\n// CONCATENATED MODULE: ./src/three.js/awspack/index.js\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n/**\r\n * @module three/awspack\r\n */\n\n/* harmony default export */ var awspack = ({\n /**\r\n * @see three.js/TextToSpeechFeature\r\n */\n TextToSpeechFeature: three_js_awspack_TextToSpeechFeature,\n\n /**\r\n * @see core/TextToSpeechUtils\r\n */\n TextToSpeechUtils: awspack_TextToSpeechUtils,\n\n /**\r\n * @see three.js/Speech\r\n */\n Speech: three_js_awspack_Speech\n});\n// CONCATENATED MODULE: ./src/three.js/animpack/state/SingleState.js\nfunction state_SingleState_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { state_SingleState_typeof = function _typeof(obj) { return typeof obj; }; } else { state_SingleState_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return state_SingleState_typeof(obj); }\n\nfunction state_SingleState_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction state_SingleState_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction state_SingleState_createClass(Constructor, protoProps, staticProps) { if (protoProps) state_SingleState_defineProperties(Constructor.prototype, protoProps); if (staticProps) state_SingleState_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction SingleState_set(target, property, value, receiver) { if (typeof Reflect !== "undefined" && Reflect.set) { SingleState_set = Reflect.set; } else { SingleState_set = function set(target, property, value, receiver) { var base = SingleState_superPropBase(target, property); var desc; if (base) { desc = Object.getOwnPropertyDescriptor(base, property); if (desc.set) { desc.set.call(receiver, value); return true; } else if (!desc.writable) { return false; } } desc = Object.getOwnPropertyDescriptor(receiver, property); if (desc) { if (!desc.writable) { return false; } desc.value = value; Object.defineProperty(receiver, property, desc); } else { SingleState_defineProperty(receiver, property, value); } return true; }; } return SingleState_set(target, property, value, receiver); }\n\nfunction _set(target, property, value, receiver, isStrict) { var s = SingleState_set(target, property, value, receiver || target); if (!s && isStrict) { throw new Error(\'failed to set property\'); } return value; }\n\nfunction SingleState_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction SingleState_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { SingleState_get = Reflect.get; } else { SingleState_get = function _get(target, property, receiver) { var base = SingleState_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return SingleState_get(target, property, receiver || target); }\n\nfunction SingleState_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = state_SingleState_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction state_SingleState_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) state_SingleState_setPrototypeOf(subClass, superClass); }\n\nfunction state_SingleState_setPrototypeOf(o, p) { state_SingleState_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return state_SingleState_setPrototypeOf(o, p); }\n\nfunction state_SingleState_createSuper(Derived) { var hasNativeReflectConstruct = state_SingleState_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = state_SingleState_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = state_SingleState_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return state_SingleState_possibleConstructorReturn(this, result); }; }\n\nfunction state_SingleState_possibleConstructorReturn(self, call) { if (call && (state_SingleState_typeof(call) === "object" || typeof call === "function")) { return call; } return state_SingleState_assertThisInitialized(self); }\n\nfunction state_SingleState_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction state_SingleState_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction state_SingleState_getPrototypeOf(o) { state_SingleState_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return state_SingleState_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n/**\n * Threejs AnimationAction object\n * @external "THREE.AnimationAction"\n * @see https://threejs.org/docs/#api/en/animation/AnimationAction\n */\n\nvar threeBlendModes = {\n Override: THREE.NormalAnimationBlendMode,\n Additive: THREE.AdditiveAnimationBlendMode\n};\n/**\n * @extends core/SingleState\n * @alias three.js/SingleState\n */\n\nvar state_SingleState_SingleState = /*#__PURE__*/function (_CoreSingleState) {\n state_SingleState_inherits(SingleState, _CoreSingleState);\n\n var _super = state_SingleState_createSuper(SingleState);\n\n /**\n * @constructor\n *\n * @param {Object=} options - Options for the animation state.\n * @param {external:"THREE.AnimationAction"} threeAction - Animation action that controls\n * playback of the clip.\n */\n function SingleState() {\n var _this;\n\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var threeAction = arguments.length > 1 ? arguments[1] : undefined;\n\n state_SingleState_classCallCheck(this, SingleState);\n\n _this = _super.call(this, options); // Callback to catch THREE animation action completion\n\n _this._onFinishedEvent = function (_ref) {\n var type = _ref.type,\n action = _ref.action;\n\n // Exit if this isn\'t the finish event for this animation\n if (type !== \'finished\' || action !== _this.threeAction) {\n return;\n }\n\n _this._promises.play.resolve(); // Stop evaluating interpolators if they have already completed\n\n\n if (!_this.weightPending && !_this.timeScalePending) {\n _this._paused = true;\n }\n };\n\n _this._threeAction = threeAction;\n _this._threeAction.clampWhenFinished = true; // Hold the last frame on completion\n\n _this._threeAction.enabled = false;\n _this._threeAction.loop = _this._loopCount === 1 ? THREE.LoopOnce : THREE.LoopRepeat;\n _this._threeAction.paused = _this._paused;\n _this._threeAction.repetitions = _this._loopCount;\n _this._threeAction.timeScale = _this._timeScale;\n _this._threeAction.weight = _this._internalWeight;\n _this._threeAction.blendMode = threeBlendModes[_this._blendMode]; // Start listening for animation finished events\n\n _this._threeAction.getMixer().addEventListener(\'finished\', _this._onFinishedEvent);\n\n return _this;\n }\n /**\n * Gets the THREE.AnimationAction object.\n *\n * @readonly\n * @type {external:"THREE.AnimationAction"}\n */\n\n\n state_SingleState_createClass(SingleState, [{\n key: "threeAction",\n get: function get() {\n return this._threeAction;\n }\n }, {\n key: "normalizedTime",\n get: function get() {\n if (this._threeAction.time && this._threeAction.getClip() && this._threeAction.getClip().duration) {\n return this._threeAction.time / this._threeAction.getClip().duration;\n }\n\n return 0;\n },\n set: function set(time) {\n time = core_MathUtils.clamp(time);\n this._threeAction.time = this._threeAction.getClip().duration * time;\n }\n }, {\n key: "weight",\n get: function get() {\n return SingleState_get(state_SingleState_getPrototypeOf(SingleState.prototype), "weight", this);\n },\n set: function set(weight) {\n _set(state_SingleState_getPrototypeOf(SingleState.prototype), "weight", weight, this, true);\n\n this._threeAction.enabled = true;\n }\n }, {\n key: "updateInternalWeight",\n value: function updateInternalWeight(factor) {\n SingleState_get(state_SingleState_getPrototypeOf(SingleState.prototype), "updateInternalWeight", this).call(this, factor);\n\n this._threeAction.setEffectiveWeight(this._internalWeight);\n }\n }, {\n key: "timeScale",\n get: function get() {\n return SingleState_get(state_SingleState_getPrototypeOf(SingleState.prototype), "timeScale", this);\n },\n set: function set(timeScale) {\n _set(state_SingleState_getPrototypeOf(SingleState.prototype), "timeScale", timeScale, this, true);\n\n this._threeAction.timeScale = timeScale;\n }\n }, {\n key: "loopCount",\n get: function get() {\n return SingleState_get(state_SingleState_getPrototypeOf(SingleState.prototype), "loopCount", this);\n },\n set: function set(loopCount) {\n _set(state_SingleState_getPrototypeOf(SingleState.prototype), "loopCount", loopCount, this, true);\n\n this._threeAction.loop = loopCount === 1 ? THREE.LoopOnce : THREE.LoopRepeat;\n this._threeAction.repetitions = loopCount;\n }\n }, {\n key: "play",\n value: function play(onFinish, onError, onCancel) {\n // Restart animation\n this._threeAction.reset();\n\n this._threeAction.play();\n\n return SingleState_get(state_SingleState_getPrototypeOf(SingleState.prototype), "play", this).call(this, onFinish, onError, onCancel);\n }\n }, {\n key: "pause",\n value: function pause() {\n // Make sure animation has influence\n this._threeAction.paused = true;\n\n this._threeAction.play();\n\n return SingleState_get(state_SingleState_getPrototypeOf(SingleState.prototype), "pause", this).call(this);\n }\n }, {\n key: "resume",\n value: function resume(onFinish, onError, onCancel) {\n // Make sure the animation can play and has influence\n this._threeAction.paused = false;\n this._threeAction.enabled = true;\n\n this._threeAction.play();\n\n return SingleState_get(state_SingleState_getPrototypeOf(SingleState.prototype), "resume", this).call(this, onFinish, onError, onCancel);\n }\n }, {\n key: "cancel",\n value: function cancel() {\n // Stop animation playback\n this._threeAction.paused = true;\n return SingleState_get(state_SingleState_getPrototypeOf(SingleState.prototype), "cancel", this).call(this);\n }\n }, {\n key: "stop",\n value: function stop() {\n // Restart and pause the animation\n this._threeAction.reset();\n\n this._threeAction.paused = true;\n\n this._threeAction.play();\n\n return SingleState_get(state_SingleState_getPrototypeOf(SingleState.prototype), "stop", this).call(this);\n }\n }, {\n key: "discard",\n value: function discard() {\n // Stop the animation from having influence\n this._threeAction.enabled = false; // Stop listening for finish events\n\n this._threeAction.getMixer().removeEventListener(\'finished\', this._onFinishedEvent);\n\n SingleState_get(state_SingleState_getPrototypeOf(SingleState.prototype), "discard", this).call(this);\n }\n }]);\n\n return SingleState;\n}(state_SingleState);\n\n/* harmony default export */ var animpack_state_SingleState = (state_SingleState_SingleState);\n// CONCATENATED MODULE: ./src/three.js/animpack/AnimationFeature.js\nfunction animpack_AnimationFeature_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { animpack_AnimationFeature_typeof = function _typeof(obj) { return typeof obj; }; } else { animpack_AnimationFeature_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return animpack_AnimationFeature_typeof(obj); }\n\nfunction animpack_AnimationFeature_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction animpack_AnimationFeature_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction animpack_AnimationFeature_createClass(Constructor, protoProps, staticProps) { if (protoProps) animpack_AnimationFeature_defineProperties(Constructor.prototype, protoProps); if (staticProps) animpack_AnimationFeature_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction animpack_AnimationFeature_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { animpack_AnimationFeature_get = Reflect.get; } else { animpack_AnimationFeature_get = function _get(target, property, receiver) { var base = animpack_AnimationFeature_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return animpack_AnimationFeature_get(target, property, receiver || target); }\n\nfunction animpack_AnimationFeature_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = animpack_AnimationFeature_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction animpack_AnimationFeature_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) animpack_AnimationFeature_setPrototypeOf(subClass, superClass); }\n\nfunction animpack_AnimationFeature_setPrototypeOf(o, p) { animpack_AnimationFeature_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return animpack_AnimationFeature_setPrototypeOf(o, p); }\n\nfunction animpack_AnimationFeature_createSuper(Derived) { var hasNativeReflectConstruct = animpack_AnimationFeature_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = animpack_AnimationFeature_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = animpack_AnimationFeature_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return animpack_AnimationFeature_possibleConstructorReturn(this, result); }; }\n\nfunction animpack_AnimationFeature_possibleConstructorReturn(self, call) { if (call && (animpack_AnimationFeature_typeof(call) === "object" || typeof call === "function")) { return call; } return animpack_AnimationFeature_assertThisInitialized(self); }\n\nfunction animpack_AnimationFeature_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction animpack_AnimationFeature_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction animpack_AnimationFeature_getPrototypeOf(o) { animpack_AnimationFeature_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return animpack_AnimationFeature_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n/**\r\n * Threejs AnimationMixer object\r\n * @external "THREE.AnimationMixer"\r\n * @see https://threejs.org/docs/#api/en/animation/AnimationMixer\r\n */\n\nAnimationTypes.single = animpack_state_SingleState;\n\n/**\r\n * @extends core/AnimationFeature\r\n * @alias three.js/AnimationFeature\r\n */\n\nvar animpack_AnimationFeature_AnimationFeature = /*#__PURE__*/function (_CoreAnimationFeature) {\n animpack_AnimationFeature_inherits(AnimationFeature, _CoreAnimationFeature);\n\n var _super = animpack_AnimationFeature_createSuper(AnimationFeature);\n\n /**\r\n * @constructor\r\n *\r\n * @param {three.js/HostObject} host - Host object that owns the feature.\r\n */\n function AnimationFeature(host) {\n var _this;\n\n animpack_AnimationFeature_classCallCheck(this, AnimationFeature);\n\n _this = _super.call(this, host);\n _this._mixer = new THREE.AnimationMixer(host.owner);\n return _this;\n }\n\n animpack_AnimationFeature_createClass(AnimationFeature, [{\n key: "_createSingleState",\n value: function _createSingleState(options) {\n // Duplicate the clip if it is already in use by another three action\n var clip = options.clip;\n\n if (this._mixer.existingAction(clip)) {\n clip = clip.clone();\n }\n\n var threeAction = this._mixer.clipAction(clip);\n\n return new animpack_state_SingleState(options, threeAction);\n }\n /**\r\n * Gets the THREE.AnimationMixer for the host.\r\n *\r\n * @readonly\r\n * @type {external:"THREE.AnimationMixer"}\r\n */\n\n }, {\n key: "mixer",\n get: function get() {\n return this._mixer;\n }\n }, {\n key: "update",\n value: function update(deltaTime) {\n animpack_AnimationFeature_get(animpack_AnimationFeature_getPrototypeOf(AnimationFeature.prototype), "update", this).call(this, deltaTime);\n\n if (!this._paused) {\n this._mixer.update(deltaTime / 1000); // THREE.AnimationMixer requires delta time in seconds\n\n }\n }\n }, {\n key: "discard",\n value: function discard() {\n // Release THREE animation resources\n this._mixer.uncacheRoot(this._host.owner);\n\n animpack_AnimationFeature_get(animpack_AnimationFeature_getPrototypeOf(AnimationFeature.prototype), "discard", this).call(this);\n }\n }]);\n\n return AnimationFeature;\n}(animpack_AnimationFeature);\n\n/* harmony default export */ var three_js_animpack_AnimationFeature = (animpack_AnimationFeature_AnimationFeature);\n// CONCATENATED MODULE: ./src/three.js/animpack/index.js\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/**\r\n * @module three/animpack\r\n */\n\n\n\n\n\n\n\n\n\n\n\n/**\r\n * @namespace\r\n */\n\nvar Easing = {\n /**\r\n * @see Linear\r\n */\n Linear: Linear,\n\n /**\r\n * @see Quadratic\r\n */\n Quadratic: Quadratic,\n\n /**\r\n * @see Cubic\r\n */\n Cubic: Cubic,\n\n /**\r\n * @see Quartic\r\n */\n Quartic: Quartic,\n\n /**\r\n * @see Quintic\r\n */\n Quintic: Quintic,\n\n /**\r\n * @see Sinusoidal\r\n */\n Sinusoidal: Sinusoidal,\n\n /**\r\n * @see Exponential\r\n */\n Exponential: Exponential,\n\n /**\r\n * @see Circular\r\n */\n Circular: Circular,\n\n /**\r\n * @see Elastic\r\n */\n Elastic: Elastic,\n\n /**\r\n * @see Back\r\n */\n Back: Back,\n\n /**\r\n * @see Bounce\r\n */\n Bounce: Bounce\n};\n/* harmony default export */ var animpack = ({\n /**\r\n * @see three.js/AnimationFeature\r\n */\n AnimationFeature: three_js_animpack_AnimationFeature,\n\n /**\r\n * @see AnimationLayer\r\n */\n AnimationLayer: animpack_AnimationLayer,\n\n /**\r\n * @see three.js/SingleState\r\n */\n SingleState: animpack_state_SingleState,\n\n /**\r\n * @see TransitionState\r\n */\n TransitionState: state_TransitionState,\n\n /**\r\n * @see FreeBlendState\r\n */\n FreeBlendState: state_FreeBlendState,\n\n /**\r\n * @see QueueState\r\n */\n QueueState: state_QueueState,\n\n /**\r\n * @see RandomAnimationState\r\n */\n RandomAnimationState: state_RandomAnimationState,\n\n /**\r\n * @see Blend1dState\r\n */\n Blend1dState: state_Blend1dState,\n\n /**\r\n * @see Blend2dState\r\n */\n Blend2dState: state_Blend2dState,\n\n /**\r\n * @see AnimationUtils\r\n */\n AnimationUtils: animpack_AnimationUtils,\n\n /**\r\n * @see Easing\r\n */\n Easing: Easing,\n\n /**\r\n * @see LayerBlendModes\r\n */\n LayerBlendModes: LayerBlendModes,\n\n /**\r\n * @see DefaultLayerBlendMode\r\n */\n DefaultLayerBlendMode: DefaultLayerBlendMode,\n\n /**\r\n * @see AnimationTypes\r\n */\n AnimationTypes: AnimationTypes\n});\n// CONCATENATED MODULE: ./src/three.js/index.js\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/**\r\n * @module three/HOST\r\n */\n\n\n\n\n\n\n\n\n\n\n\n/* harmony default export */ var three_js = __webpack_exports__["default"] = ({\n /**\r\n * @see env\r\n */\n env: env,\n\n /**\r\n * @see Utils\r\n */\n Utils: core_Utils,\n\n /**\r\n * @see MathUtils\r\n */\n MathUtils: core_MathUtils,\n\n /**\r\n * @see Deferred\r\n */\n Deferred: core_Deferred,\n\n /**\r\n * @see three.js/Messenger\r\n */\n Messenger: three_js_Messenger,\n\n /**\r\n * @see three.js/HostObject\r\n */\n HostObject: three_js_HostObject,\n\n /**\r\n * @see core/LipsyncFeature\r\n */\n LipsyncFeature: core_LipsyncFeature,\n\n /**\r\n * @see GestureFeature\r\n */\n GestureFeature: core_GestureFeature,\n\n /**\r\n * @see three.js/PointOfInterestFeature\r\n */\n PointOfInterestFeature: three_js_PointOfInterestFeature,\n\n /**\r\n * @see DefaultVisemeMap\r\n */\n DefaultVisemeMap: DefaultVisemeMap,\n\n /**\r\n * @see DefaultGestureWords\r\n */\n DefaultGestureWords: DefaultGestureWords,\n\n /**\r\n * @see AxisMap\r\n */\n AxisMap: AxisMap,\n\n /**\r\n * @see module:three/awspack\r\n */\n aws: awspack,\n\n /**\r\n * @see module:three/animpack\r\n */\n anim: animpack\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vc3JjL2NvcmUvRGVmZXJyZWQuanM/Njg4ZSIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL2NvcmUvVXRpbHMuanM/YmYyNCIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL2NvcmUvTWF0aFV0aWxzLmpzPzgxZTciLCJ3ZWJwYWNrOi8vSE9TVC8uL3NyYy9jb3JlL2FuaW1wYWNrL0Vhc2luZy5qcz81ODZjIiwid2VicGFjazovL0hPU1QvLi9zcmMvY29yZS9NZXNzZW5nZXIuanM/ZDAwNiIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL3RocmVlLmpzL01lc3Nlbmdlci5qcz82MDNiIiwid2VicGFjazovL0hPU1QvLi9zcmMvY29yZS9BYnN0cmFjdEhvc3RGZWF0dXJlLmpzPzIzNmUiLCJ3ZWJwYWNrOi8vSE9TVC8uL3NyYy9jb3JlL0hvc3RPYmplY3QuanM/NzVlNyIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL3RocmVlLmpzL0hvc3RPYmplY3QuanM/NTRmMSIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL2NvcmUvRmVhdHVyZURlcGVuZGVudEludGVyZmFjZS5qcz8wNmJiIiwid2VicGFjazovL0hPU1QvLi9zcmMvY29yZS9hbmltcGFjay9BbmltYXRpb25GZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlLmpzPzZlNjMiLCJ3ZWJwYWNrOi8vSE9TVC8uL3NyYy9jb3JlL2FuaW1wYWNrL01hbmFnZWRBbmltYXRpb25MYXllckludGVyZmFjZS5qcz80N2Q1Iiwid2VicGFjazovL0hPU1QvLi9zcmMvY29yZS9hd3NwYWNrL1RleHRUb1NwZWVjaEZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2UuanM/YmNhZCIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL2NvcmUvTGlwc3luY0ZlYXR1cmUuanM/OGQzYSIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL2NvcmUvYXdzcGFjay9TU01MU3BlZWNobWFya0ludGVyZmFjZS5qcz9jYTc0Iiwid2VicGFjazovL0hPU1QvLi9zcmMvY29yZS9HZXN0dXJlRmVhdHVyZS5qcz9kYjM5Iiwid2VicGFjazovL0hPU1QvLi9zcmMvY29yZS9hbmltcGFjay9BbmltYXRpb25VdGlscy5qcz8xMTQ4Iiwid2VicGFjazovL0hPU1QvLi9zcmMvY29yZS9hbmltcGFjay9zdGF0ZS9BYnN0cmFjdFN0YXRlLmpzPzJmODciLCJ3ZWJwYWNrOi8vSE9TVC8uL3NyYy9jb3JlL2FuaW1wYWNrL3N0YXRlL1RyYW5zaXRpb25TdGF0ZS5qcz85ZTc3Iiwid2VicGFjazovL0hPU1QvLi9zcmMvY29yZS9hbmltcGFjay9BbmltYXRpb25QbGF5ZXJJbnRlcmZhY2UuanM/NzMzZSIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL2NvcmUvYW5pbXBhY2svc3RhdGUvU3RhdGVDb250YWluZXJJbnRlcmZhY2UuanM/MjY1OSIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL2NvcmUvYW5pbXBhY2svc3RhdGUvUXVldWVTdGF0ZS5qcz8wYzRhIiwid2VicGFjazovL0hPU1QvLi9zcmMvY29yZS9hbmltcGFjay9zdGF0ZS9BYnN0cmFjdEJsZW5kU3RhdGUuanM/NjY5NyIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL2NvcmUvYW5pbXBhY2svc3RhdGUvRnJlZUJsZW5kU3RhdGUuanM/ZDY3NSIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL2NvcmUvYW5pbXBhY2svc3RhdGUvQmxlbmQxZFN0YXRlLmpzP2E3NDIiLCJ3ZWJwYWNrOi8vSE9TVC8uL3NyYy9jb3JlL2FuaW1wYWNrL3N0YXRlL0JsZW5kMmRTdGF0ZS5qcz84MTYzIiwid2VicGFjazovL0hPU1QvLi9zcmMvY29yZS9hbmltcGFjay9BbmltYXRpb25MYXllci5qcz9iZWVjIiwid2VicGFjazovL0hPU1QvLi9zcmMvY29yZS9hbmltcGFjay9zdGF0ZS9TaW5nbGVTdGF0ZS5qcz80ZjE0Iiwid2VicGFjazovL0hPU1QvLi9zcmMvY29yZS9hbmltcGFjay9zdGF0ZS9SYW5kb21BbmltYXRpb25TdGF0ZS5qcz80NDkzIiwid2VicGFjazovL0hPU1QvLi9zcmMvY29yZS9hbmltcGFjay9BbmltYXRpb25GZWF0dXJlLmpzP2ViZGUiLCJ3ZWJwYWNrOi8vSE9TVC8uL3NyYy9jb3JlL1BvaW50T2ZJbnRlcmVzdEZlYXR1cmUuanM/ZGVlNSIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL3RocmVlLmpzL1BvaW50T2ZJbnRlcmVzdEZlYXR1cmUuanM/MTViZiIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL3RocmVlLmpzL0hvc3RFbnZpcm9ubWVudC5qcz8wMjcyIiwid2VicGFjazovL0hPU1QvLi9zcmMvY29yZS9hd3NwYWNrL1RleHRUb1NwZWVjaFV0aWxzLmpzPzc1NWQiLCJ3ZWJwYWNrOi8vSE9TVC8uL3NyYy9jb3JlL2F3c3BhY2svQWJzdHJhY3RTcGVlY2guanM/N2YxYyIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL2NvcmUvYXdzcGFjay9TcGVlY2guanM/MmE0MSIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL3RocmVlLmpzL2F3c3BhY2svU3BlZWNoLmpzPzcwZDkiLCJ3ZWJwYWNrOi8vSE9TVC8uL3NyYy9jb3JlL2F3c3BhY2svQWJzdHJhY3RUZXh0VG9TcGVlY2hGZWF0dXJlLmpzPzM0MWYiLCJ3ZWJwYWNrOi8vSE9TVC8uL3NyYy9jb3JlL2F3c3BhY2svVGV4dFRvU3BlZWNoRmVhdHVyZS5qcz81YTg1Iiwid2VicGFjazovL0hPU1QvLi9zcmMvdGhyZWUuanMvYXdzcGFjay9UZXh0VG9TcGVlY2hGZWF0dXJlLmpzPzEwOTAiLCJ3ZWJwYWNrOi8vSE9TVC8uL3NyYy90aHJlZS5qcy9hd3NwYWNrL2luZGV4LmpzPzJmMGEiLCJ3ZWJwYWNrOi8vSE9TVC8uL3NyYy90aHJlZS5qcy9hbmltcGFjay9zdGF0ZS9TaW5nbGVTdGF0ZS5qcz82MzU0Iiwid2VicGFjazovL0hPU1QvLi9zcmMvdGhyZWUuanMvYW5pbXBhY2svQW5pbWF0aW9uRmVhdHVyZS5qcz80ZWU3Iiwid2VicGFjazovL0hPU1QvLi9zcmMvdGhyZWUuanMvYW5pbXBhY2svaW5kZXguanM/Zjc0YSIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL3RocmVlLmpzL2luZGV4LmpzP2I0MWQiXSwibmFtZXMiOlsiRGVmZXJyZWQiLCJleGVjdXRhYmxlIiwib25SZXNvbHZlIiwib25SZWplY3QiLCJvbkNhbmNlbCIsIkVycm9yIiwicmVzIiwicmVqIiwiY2FuY2VsIiwic3RhdHVzIiwicmVzb2x2ZWQiLCJyZWplY3RlZCIsImNhbmNlbGVkIiwicGVuZGluZyIsInJlc29sdmUiLCJyZWplY3QiLCJ2YWx1ZSIsIl9zdGF0dXMiLCJfcmVzb2x2ZSIsIl9yZWplY3QiLCJfY2FuY2VsIiwiX2V4ZWN1dGFibGUiLCJhcmdzIiwiaXRlcmFibGUiLCJTeW1ib2wiLCJpdGVyYXRvciIsImUiLCJhcnJheSIsImRlZmVycmVkIiwiZmlsdGVyIiwiaXRlbSIsInJlc3VsdCIsInVuZGVmaW5lZCIsInJlc29sdmVWYWx1ZSIsImZvckVhY2giLCJsZW5ndGgiLCJlcnJvciIsImNhbmNlbFZhbHVlIiwibnVtSXRlbXMiLCJpdGVtVHJhY2tlciIsImZhaWxlZCIsIm51bVJlc29sdmVkIiwicmVzb2x1dGlvbnMiLCJpbmRleCIsIlByb21pc2UiLCJ0aGVuIiwiVXRpbHMiLCJyZXBsYWNlIiwiYyIsInJhbmRvbU51bWJlciIsIk1hdGgiLCJmbG9vciIsIkRhdGUiLCJub3ciLCJyYW5kb20iLCJ0b1N0cmluZyIsIm5hbWUiLCJuYW1lQXJyYXkiLCJpbmNsdWRlcyIsIm5hbWVTZXQiLCJTZXQiLCJtYXRjaEdyb3VwIiwibWF0Y2giLCJiYXNlTmFtZSIsInNsaWNlIiwiaW5jcmVtZW50IiwiTnVtYmVyIiwic2V0TmFtZSIsInNldE1hdGNoR3JvdXAiLCJzZXRJbmNyZW1lbnQiLCJzZWNvbmRzIiwib25GaW5pc2giLCJvblByb2dyZXNzIiwib25FcnJvciIsImNvbnNvbGUiLCJ3YXJuIiwiY3VycmVudFRpbWUiLCJ0b3RhbFRpbWUiLCJvblVwZGF0ZSIsImRlbHRhVGltZSIsIm1pbiIsIm1heCIsImNlaWwiLCJSYWRpYW5Ub0RlZ3JlZSIsIlBJIiwiRGVncmVlVG9SYWRpYW4iLCJNYXRoVXRpbHMiLCJyYWRpYW5zIiwiZGVncmVlcyIsImZyb20iLCJ0byIsImZhY3RvciIsImEiLCJiIiwicCIsImRpc3RTcXIiLCJkaXN0YW5jZVNxdWFyZWQiLCJ0IiwicG9pbnQiLCJ2ZXJ0aWNlcyIsIm1pblgiLCJQT1NJVElWRV9JTkZJTklUWSIsIm1pblkiLCJtYXhYIiwiTkVHQVRJVkVfSU5GSU5JVFkiLCJtYXhZIiwidiIsImRYIiwiZFkiLCJtaWRYIiwibWlkWSIsImRNYXgiLCJzdXBlckluZGljZXMiLCJ2ZXJ0c1dpdGhTdXBlciIsInN1cGVyU29ydGVkSW5kaWNlcyIsInNvcnRQb2ludHNDQ1ciLCJzdXBlclRyaWFuZ2xlIiwiaW5kaWNlcyIsImVkZ2VzIiwidHJpYW5nbGVzIiwibmV3VmVydCIsIm5ld0luZGV4IiwiaW52YWxpZFRyaWFuZ2xlcyIsInRyaWFuZ2xlIiwiaXNQb2ludEluQ2lyY3VtQ2lyY2xlIiwicHVzaCIsImJvdW5kaW5nUG9seSIsImVkZ2UiLCJjb3VudCIsIm90aGVyVHJpYW5nbGUiLCJvdGhlckVkZ2UiLCJzcGxpY2UiLCJpbmRleE9mIiwic29ydGVkSW5kaWNlcyIsInRyaWFuZ2xlc1RvUmVtb3ZlIiwibWFwIiwiYXgiLCJheSIsImJ4IiwiYnkiLCJjeCIsImN5IiwiZGVub20iLCJhVmFsIiwiYlZhbCIsImNWYWwiLCJjZW50cm9pZCIsInNvcnQiLCJhdGFuMiIsImFicyIsInZlY3RvciIsIkFycmF5IiwicmVkdWNlciIsImFjY3VtdWxhdG9yIiwiY3VycmVudFZhbHVlIiwic3FydCIsInJlZHVjZSIsInZlY3RvckEiLCJ2ZWN0b3JCIiwidmFsdWVBIiwidmFsdWVCIiwibm9ybWFsQSIsIm5vcm1hbGl6ZVZlY3RvciIsIm5vcm1hbEIiLCJkb3QiLCJnZXREb3RQcm9kdWN0IiwiYWNvcyIsImNsYW1wIiwidmVjdG9yMyIsIm1hdHJpeDMiLCJldmVyeSIsIngiLCJ5IiwieiIsIm1hZ25pdHVkZSIsImdldFZlY3Rvck1hZ25pdHVkZSIsImZpbGwiLCJtYXRyaXg0Iiwic2NhbGVYIiwic2NhbGVZIiwic2NhbGVaIiwiciIsInRhcmdldFZhbHVlIiwidmFsdWVTdG9yZSIsInNtb290aFRpbWUiLCJtYXhTcGVlZCIsImNsYW1wVGltZSIsImRlbHRhVmFsdWUiLCJjbGFtcERlbHRhVmFsdWUiLCJsYXN0VmFsdWUiLCJkMSIsImQyIiwiZDMiLCJkNCIsIkxpbmVhciIsIk5vbmUiLCJrIiwiSW4iLCJPdXQiLCJJbk91dCIsIlF1YWRyYXRpYyIsIkN1YmljIiwiUXVhcnRpYyIsIlF1aW50aWMiLCJTaW51c29pZGFsIiwiY29zIiwic2luIiwiRXhwb25lbnRpYWwiLCJDaXJjdWxhciIsIkVsYXN0aWMiLCJzIiwiYXNpbiIsIkJhY2siLCJCb3VuY2UiLCJNZXNzZW5nZXIiLCJpZCIsIl9pZCIsImNyZWF0ZUlkIiwiX2Rpc3BhdGNoZXIiLCJ3aW5kb3ciLCJfY2FsbGJhY2tzIiwiX2V2ZW50TGlzdGVuZXJzIiwibWVzc2FnZSIsImNhbGxiYWNrIiwiZGV0YWlsIiwiQ3VzdG9tRXZlbnQiLCJsaXN0ZW5lciIsImFkZEV2ZW50TGlzdGVuZXIiLCJfY3JlYXRlTG9jYWxNZXNzYWdlIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsIl9jcmVhdGVMaXN0ZW5lciIsIl9hZGRMaXN0ZW5lciIsImkiLCJzdG9wTGlzdGVuaW5nIiwiX3JlbW92ZUxpc3RlbmVyIiwicmVnZXhwIiwibWVzc2FnZXMiLCJPYmplY3QiLCJrZXlzIiwidGVzdCIsImV2ZW50IiwiX2NyZWF0ZUV2ZW50IiwiZGlzcGF0Y2hFdmVudCIsIm1lc3NlbmdlciIsIkdsb2JhbE1lc3NlbmdlciIsImxpc3RlblRvIiwic3RvcExpc3RlbmluZ1RvQWxsIiwiZW1pdCIsImRlZmluZVByb3BlcnRpZXMiLCJ3cml0YWJsZSIsIkVWRU5UUyIsInR5cGUiLCJDb3JlTWVzc2VuZ2VyIiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsIlRIUkVFIiwiRXZlbnREaXNwYXRjaGVyIiwicHJvdG90eXBlIiwicHJvcCIsImRlZmluZVByb3BlcnR5IiwiQWJzdHJhY3RIb3N0RmVhdHVyZSIsImhvc3QiLCJfaG9zdCIsImV2ZW50cyIsImFwaSIsImVudHJpZXMiLCJjb25zdHJ1Y3RvciIsIm93bmVyIiwic3RvcExpc3RlbmluZ0J5UmVnZXhwIiwidXBkYXRlIiwiUmVnRXhwIiwic291cmNlIiwiUmVzdWx0Q2xhc3MiLCJtaXhpbkNsYXNzRmFjdG9yaWVzIiwibWl4aW5DbGFzc0ZhY3RvcnkiLCJTRVJWSUNFUyIsIkhvc3RPYmplY3QiLCJfb3duZXIiLCJfZmVhdHVyZXMiLCJfd2FpdHMiLCJfbGFzdFVwZGF0ZSIsImR0Iiwid2FpdCIsImV4ZWN1dGUiLCJ2YWx1ZXMiLCJmZWF0dXJlIiwib25Db21wbGV0ZSIsIkZlYXR1cmVDbGFzcyIsImZvcmNlIiwiaW5wdXRUeXBlIiwiaW5zdGFsbEFwaSIsImFkZEZlYXR1cmUiLCJ0eXBlTmFtZSIsInJlbW92ZUZlYXR1cmUiLCJkaXNjYXJkIiwiZ2V0UHJvdG90eXBlT2YiLCJvcHRpb25zIiwiX2Nsb2NrIiwiY2xvY2siLCJnZXQiLCJnZXRFbGFwc2VkVGltZSIsIkNvcmVIb3N0T2JqZWN0IiwiRmVhdHVyZURlcGVuZGVudEludGVyZmFjZSIsIkJhc2VDbGFzcyIsIkZlYXR1cmVEZXBlbmRlbnRNaXhpbiIsIl9pbml0aWFsaXplZCIsIl9vbkZlYXR1cmVBZGRlZCIsImJpbmQiLCJfb25GZWF0dXJlUmVtb3ZlZCIsIkVWRU5UX0RFUEVOREVOQ0lFUyIsImV2ZW50TmFtZSIsIkFuaW1hdGlvbkZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2UiLCJvbGROYW1lIiwibmV3TmFtZSIsImxheWVyTmFtZSIsImFuaW1hdGlvbk5hbWUiLCJQYXJlbnRDbGFzcyIsIk1peGluIiwiQW5pbWF0aW9uRmVhdHVyZURlcGVuZGVudE1peGluIiwiQW5pbWF0aW9uRmVhdHVyZSIsImFkZExheWVyIiwicmVtb3ZlTGF5ZXIiLCJyZW5hbWVMYXllciIsImFkZEFuaW1hdGlvbiIsInJlbW92ZUFuaW1hdGlvbiIsInJlbmFtZUFuaW1hdGlvbiIsIk1hbmFnZWRBbmltYXRpb25MYXllckludGVyZmFjZSIsIm5hbWVGaWx0ZXIiLCJ3ZWlnaHQiLCJlYXNpbmdGbiIsIk1hbmFnZWRBbmltYXRpb25MYXllck1peGluIiwiX21hbmFnZWRMYXllcnMiLCJsYXllcnMiLCJfb25MYXllckFkZGVkIiwiX29uTGF5ZXJSZW1vdmVkIiwiaXNBY3RpdmUiLCJnZXRBbmltYXRpb25zIiwiYW5pbU5hbWUiLCJfb25BbmltYXRpb25BZGRlZCIsImFuaW1hdGlvbnMiLCJfb25BbmltYXRpb25SZW1vdmVkIiwibGF5ZXJPcHRpb25zIiwiYW5pbU9wdGlvbnMiLCJERUZBVUxUX0xBWUVSX09QVElPTlMiLCJhbmltYXRpb25PcHRpb25zIiwiYXNzaWduIiwicmVnaXN0ZXJBbmltYXRpb24iLCJyZWdpc3RlckxheWVyIiwibGF5ZXJOYW1lcyIsInNldExheWVyV2VpZ2h0IiwiYmxlbmRUaW1lIiwic2V0TGF5ZXJXZWlnaHRzIiwiZW5hYmxlIiwiZGlzYWJsZSIsIlRleHRUb1NwZWVjaEZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2UiLCJUZXh0VG9TcGVlY2hGZWF0dXJlRGVwZW5kZW50TWl4aW4iLCJUZXh0VG9TcGVlY2hGZWF0dXJlIiwicGxheSIsInBhdXNlIiwicmVzdW1lIiwic3RvcCIsInNlbnRlbmNlIiwid29yZCIsInZpc2VtZSIsInNzbWwiLCJEZWZhdWx0VmlzZW1lTWFwIiwic2lsIiwib3ZlcnJpZGVXZWlnaHQiLCJTIiwiVCIsImYiLCJ1IiwiRSIsIm8iLCJPIiwiTGlwc3luY0ZlYXR1cmUiLCJ2aXNlbWVCbGVuZFRpbWUiLCJkZWNheVJhdGUiLCJhbW91bnQiLCJ2aXNlbWVFYXNpbmdGbiIsInZpc2VtZUxheWVycyIsInRhbGtpbmdCbGVuZFRpbWUiLCJ0YWxraW5nRWFzaW5nRm4iLCJ0YWxraW5nTGF5ZXJzIiwidmlzZW1lTGVhZFRpbWUiLCJfdmlzZW1lTGF5ZXJzIiwiX3RhbGtpbmdMYXllcnMiLCJhbmltYXRpb24iLCJ2aXNlbWVNYXAiLCJyZWdpc3RlclZpc2VtZUxheWVyIiwicmVnaXN0ZXJUYWxraW5nTGF5ZXIiLCJnZXRBbmltYXRpb25UeXBlIiwid2VpZ2h0TmFtZXMiLCJnZXRBbmltYXRpb25CbGVuZE5hbWVzIiwidmlzZW1lT3B0aW9ucyIsInNwZWVjaG1hcmtPZmZzZXQiLCJfdmlzZW1lTGVhZFRpbWUiLCJfcmVnaXN0ZXJWaXNlbWVBbmltYXRpb24iLCJyZXN1bWVBbmltYXRpb24iLCJfb25TdG9wIiwiX29uUGxheSIsInBhdXNlQW5pbWF0aW9uIiwibWFyayIsImlzVmlzZW1lQWN0aXZlIiwidmlzZW1lTmFtZXMiLCJkdXJhdGlvbiIsImxlcnBGYWN0b3IiLCJsZXJwIiwiYmxlbmRJblRpbWUiLCJob2xkVGltZSIsIl9hbmltYXRlU2ltcGxlVmlzZW1lIiwiZGVjYXlXZWlnaHQiLCJfYW5pbWF0ZUhlbGRWaXNlbWUiLCJ2aXNlbWVOYW1lIiwicGVha1dlaWdodCIsImJsZW5kT3V0VGltZSIsIndlaWdodFByb21pc2UiLCJzZXRBbmltYXRpb25CbGVuZFdlaWdodCIsInN0YXJ0UHJvbWlzZSIsImhvbGRQcm9taXNlIiwic2V0IiwibWl4IiwiU1NNTFNwZWVjaG1hcmtJbnRlcmZhY2UiLCJTU01MU3BlZWNoTWFya01peGluIiwiSlNPTiIsInBhcnNlIiwibWV0aG9kIiwiYXBwbHkiLCJEZWZhdWx0R2VzdHVyZVdvcmRzIiwiYmlnIiwiaGVhcnQiLCJtYW55IiwibW92ZW1lbnQiLCJvbmUiLCJhZ2dyZXNzaXZlIiwieW91IiwiZGVmZW5zZSIsIndhdmUiLCJzZWxmIiwiR2VzdHVyZUZlYXR1cmUiLCJtaW5pbXVtSW50ZXJ2YWwiLCJsYXllciIsImxheWVySG9sZFRpbWUiLCJsYXllck1pbmltdW1JbnRlcnZhbCIsImNhbkFkdmFuY2UiLCJpc1F1ZXVlRW5kIiwiY3VycmVudEdlc3R1cmUiLCJfZ2V0SG9sZFRpbWUiLCJob2xkVGltZXIiLCJwbGF5TmV4dEFuaW1hdGlvbiIsInBsYXlUaW1lciIsImF1dG9EaXNhYmxlIiwiYW5pbSIsIndvcmRzIiwiZ2VzdHVyZU1hcCIsInRyYW5zaXRpb25UaW1lIiwia2V5Iiwic3RyaW5naWZ5IiwiZ2VuZXJpY0dlc3R1cmVzIiwicmVhc29uIiwiX2dldE1pbmltdW1JbnRlcnZhbCIsInBsYXlBbmltYXRpb24iLCJnZXRQYXVzZWQiLCJjcmVhdGVHZXN0dXJlTWFwIiwiY3JlYXRlR2VuZXJpY0dlc3R1cmVBcnJheSIsInBsYXlHZXN0dXJlIiwic3RvcEFuaW1hdGlvbiIsImludGVycnVwdEFuaW1hdGlvbiIsIkFuaW1hdGlvblV0aWxzIiwicHJvcGVydHlPd25lciIsInByb3BlcnR5TmFtZSIsImlzTmFOIiwic3RhcnRWYWx1ZSIsImludGVycG9sYXRvciIsInByb2dyZXNzIiwiZWFzZUZhY3RvciIsIkFic3RyYWN0U3RhdGUiLCJfd2VpZ2h0IiwiX2ludGVybmFsV2VpZ2h0IiwiX3BhdXNlZCIsIl9wcm9taXNlcyIsImZpbmlzaCIsIl9wbGF5Q2FsbGJhY2tzIiwiaW50ZXJwb2xhdGVQcm9wZXJ0eSIsInByb21pc2UiLCJhbGwiLCJ1cGRhdGVJbnRlcm5hbFdlaWdodCIsIlRyYW5zaXRpb25TdGF0ZSIsIl90byIsIl9mcm9tIiwiX3dlaWdodFByb21pc2UiLCJ0b3RhbFdlaWdodCIsInN0YXRlIiwiY3VycmVudFN0YXRlcyIsInRhcmdldFN0YXRlIiwiZGVhY3RpdmF0ZSIsInJlc2V0Iiwid2VpZ2h0UHJvbWlzZXMiLCJzZXRXZWlnaHQiLCJvbk5leHQiLCJwcm9taXNlcyIsIkFuaW1hdGlvblBsYXllckludGVyZmFjZSIsImZuIiwicGxheU1ldGhvZCIsIkFuaW1hdGlvblBsYXllck1peGluIiwiX3RyYW5zaXRpb25TdGF0ZSIsIl9zdGF0ZXMiLCJNYXAiLCJfY3VycmVudFN0YXRlIiwiX3RyYW5zaXRpb25UaW1lIiwiX2Vhc2luZ0ZuIiwiaGFzIiwiY3VycmVudEFuaW1hdGlvbiIsIndlaWdodFBlbmRpbmciLCJjb25maWd1cmUiLCJfcHJlcGFyZUN1cnJlbnRTdGF0ZSIsIlN0YXRlQ29udGFpbmVySW50ZXJmYWNlIiwiY3VycmVudE5hbWUiLCJTdGF0ZUNvbnRhaW5lck1peGluIiwidW5pcXVlTmFtZSIsImdldFVuaXF1ZU5hbWUiLCJRdWV1ZVN0YXRlIiwicXVldWVTdGF0ZXMiLCJhZGRTdGF0ZSIsIl9xdWV1ZSIsIl9kb25lIiwiaW50ZXJuYWxXZWlnaHQiLCJuZXh0IiwiZG9uZSIsIndyYXAiLCJsYXN0TmFtZSIsInNpemUiLCJnZXRTdGF0ZSIsImxvb3BDb3VudCIsIkluZmluaXR5IiwiaXNUcmFuc2l0aW9uaW5nIiwiX3Jlc2V0IiwicGF1c2VkIiwic3RvcHBlZCIsImRpc2NhcmRTdGF0ZXMiLCJBYnN0cmFjdEJsZW5kU3RhdGUiLCJibGVuZFN0YXRlcyIsImJsZW5kV2VpZ2h0cyIsIkZyZWVCbGVuZFN0YXRlIiwic3VtV2VpZ2h0cyIsIkJsZW5kMWRTdGF0ZSIsImJsZW5kVGhyZXNob2xkcyIsInBoYXNlTWF0Y2hlcyIsIl9ibGVuZFZhbHVlIiwiYmxlbmRWYWx1ZSIsIm5vblplcm9EaWZmZXJlbnRTaXplIiwiY29udGFpbnNEdXBsaWNhdGVzIiwiX3RocmVzaG9sZHMiLCJwaGFzZU1hdGNoIiwiX3NvcnRUaHJlc2hvbGRzIiwiX2ZvcmNlTm9UaHJlc2hvbGREdXBlcyIsIl9waGFzZUxlYWRTdGF0ZSIsIl91cGRhdGVCbGVuZFdlaWdodHMiLCJ0aHJlc2hvbGRWYWx1ZSIsInNhbWVWYWx1ZSIsImZpbmQiLCJ0aHJlc2hvbGQiLCJyZW1vdmVkIiwiZmluZEluZGV4Iiwibm9ybWFsaXplZFRpbWUiLCJ0YXJnZXRJbmRleCIsInRocmVzaG9sZEEiLCJ0aHJlc2hvbGRCIiwiZmFjdG9yQiIsImZhY3RvckEiLCJzdGF0ZUEiLCJzdGF0ZUIiLCJCbGVuZDJkU3RhdGUiLCJvdGhlclRocmVzaG9sZCIsIl9ibGVuZFZhbHVlWCIsIl9ibGVuZFZhbHVlWSIsImJsZW5kVmFsdWVYIiwiYmxlbmRWYWx1ZVkiLCJfdmVydGljZXMiLCJfdHJpYW5nbGVzIiwiZ2V0RGVsYXVuYXlUcmlhbmd1bGF0aW9uIiwicHJvcGVydHkiLCJ0b1VwcGVyQ2FzZSIsIl9zZXRJbmZsdWVuY2VDbG9zZXN0UG9pbnRPbkxpbmUiLCJpc1BvaW50SW5UcmlhbmdsZSIsIl9zZXRJbmZsdWVuY2VUcmlhbmdsZSIsIl9zZXRJbmZsdWVuY2VDbG9zZXN0UG9pbnRJblRyaWFuZ2xlcyIsImFyZWFBIiwidHJpYW5nbGVBcmVhIiwiYXJlYUIiLCJhcmVhQyIsInRvdGFsQXJlYSIsIndlaWdodEEiLCJ3ZWlnaHRCIiwid2VpZ2h0QyIsInRocmVzaG9sZEMiLCJzdGF0ZUMiLCJfc2V0UGhhc2VMZWFkU3RhdGUiLCJnbG9iYWxDbG9zZXN0UG9pbnQiLCJnbG9iYWxNaW5EaXN0IiwiY2xvc2VzdFRyaWFuZ2xlIiwicG9pbnRBIiwiY2xvc2VzdFBvaW50T25MaW5lIiwicG9pbnRCIiwicG9pbnRDIiwiZGlzdEEiLCJkaXN0QiIsImRpc3RDIiwibG9jYWxDbG9zZXN0UG9pbnQiLCJsb2NhbE1pbkRpc3QiLCJjbG9zZXN0UG9pbnQiLCJzdGF0ZXMiLCJwaGFzZU1hdGNoZWQiLCJMYXllckJsZW5kTW9kZXMiLCJPdmVycmlkZSIsIkFkZGl0aXZlIiwiRGVmYXVsdExheWVyQmxlbmRNb2RlIiwidmFsaWRhdGVCbGVuZE1vZGUiLCJibGVuZE1vZGUiLCJBbmltYXRpb25MYXllciIsIl9ibGVuZE1vZGUiLCJfd2VpZ2h0UGF1c2VkIiwiaXNXZWlnaHRBY3RpdmUiLCJnZXRTdGF0ZU5hbWVzIiwiYmxlbmROYW1lIiwic2V0QmxlbmRXZWlnaHQiLCJnZXRCbGVuZFdlaWdodCIsIlNpbmdsZVN0YXRlIiwiX3RpbWVTY2FsZSIsInRpbWVTY2FsZSIsIl9sb29wQ291bnQiLCJ0aW1lIiwiUmFuZG9tQW5pbWF0aW9uU3RhdGUiLCJzdWJTdGF0ZXMiLCJfcGxheUludGVydmFsIiwicGxheUludGVydmFsIiwiZ2V0UmFuZG9tRmxvYXQiLCJwbGF5UmFuZG9tQW5pbWF0aW9uIiwidGltZXIiLCJfcmVzZXRUaW1lciIsInJhbmRvbVN0YXRlIiwiZ2V0UmFuZG9tSW50IiwiY2FuY2VsQW5pbWF0aW9uIiwiQW5pbWF0aW9uVHlwZXMiLCJzaW5nbGUiLCJmcmVlQmxlbmQiLCJxdWV1ZSIsInJhbmRvbUFuaW1hdGlvbiIsImJsZW5kMWQiLCJibGVuZDJkIiwiX2xheWVycyIsIl9sYXllck1hcCIsImV4aXN0aW5nIiwibGFzdEluZGV4IiwibnVtTGF5ZXJzIiwid2VpZ2h0TXVsdGlwbGllciIsImN1cnJlbnRTdGF0ZSIsImJsZW5kU3RhdGVPcHRpb25zIiwiYmxlbmRPcHRpb25zIiwiX2NyZWF0ZVNpbmdsZVN0YXRlIiwicXVldWVPcHRpb25zIiwicXVldWVPcHRpb24iLCJibGVuZE1hdGNoUGhhc2VzIiwic3ViU3RhdGVPcHRpb25zIiwibGF5ZXJJbmRleCIsIl92YWxpZGF0ZUluZGV4IiwiZXZlbnREYXRhIiwiY3VycmVudEluZGV4IiwiZ2V0QW5pbWF0aW9uQmxlbmRXZWlnaHQiLCJwYXVzZVdlaWdodCIsInJlc3VtZVdlaWdodCIsImFuaW1hdGlvblR5cGUiLCJfdmFsaWRhdGVOZXdBbmltYXRpb24iLCJyZW1vdmVTdGF0ZSIsImN1cnJlbnRBbmltYXRpb25OYW1lIiwibmV3QW5pbWF0aW9uTmFtZSIsInJlbmFtZVN0YXRlIiwibmV4dFF1ZXVlZEFuaW1hdGlvbiIsImwiLCJyZXN1bWVkIiwibW92ZUxheWVyIiwiZ2V0TGF5ZXJXZWlnaHQiLCJwYXVzZUxheWVyV2VpZ2h0IiwicmVzdW1lTGF5ZXJXZWlnaHQiLCJwYXVzZUxheWVyIiwicmVzdW1lTGF5ZXIiLCJnZXRUcmFuc2l0aW9uaW5nIiwiZ2V0Q3VycmVudEFuaW1hdGlvbiIsIl91cGRhdGVJbnRlcm5hbFdlaWdodHMiLCJBeGlzTWFwIiwiUG9zaXRpdmVYIiwiTmVnYXRpdmVYIiwiUG9zaXRpdmVZIiwiTmVnYXRpdmVZIiwiUG9zaXRpdmVaIiwiTmVnYXRpdmVaIiwiRmFjZVRhcmdldFR5cGVzIiwiRXllQ2VudGVyIiwiRXllTGVmdCIsIkV5ZVJpZ2h0IiwiTW91dGgiLCJGYWNlVmVjdG9ycyIsIk1pY3JvU2FjY2FkZVdhaXRSYW5nZXMiLCJwb3N0TWFjcm8iLCJNYWNyb1NhY2NhZGVXYWl0UmFuZ2VzIiwibW91dGhUYXJnZXQiLCJleWVUYXJnZXQiLCJCbGlua1RocmVzaG9sZCIsIk1heERlbHRhIiwiUG9pbnRPZkludGVyZXN0RmVhdHVyZSIsInRhcmdldCIsImxvb2tUcmFja2VyIiwic2NlbmUiLCJsb29rQmxlbmRUaW1lIiwibG9va0Vhc2luZ0ZuIiwibG9va0xheWVycyIsImJsaW5rQmxlbmRUaW1lIiwiYmxpbmtFYXNpbmdGbiIsImJsaW5rTGF5ZXJzIiwiX3ZhbGlkYXRlVHJhbnNmb3JtT2JqZWN0IiwiX2xvb2tUcmFja2VyIiwiX3NjZW5lIiwiX3RhcmdldCIsIl9wcmV2VGFyZ2V0UG9zIiwiX2lzVGFyZ2V0TW92aW5nIiwiX2xvb2tMYXllcnMiLCJfdHJhY2tpbmdDb25maWdzIiwiX2JsaW5rTGF5ZXJzIiwicmVmZXJlbmNlIiwiZm9yd2FyZEF4aXMiLCJoYXNTYWNjYWRlIiwicmVnaXN0ZXJMb29rTGF5ZXIiLCJyZWdpc3RlckJsaW5rTGF5ZXIiLCJfcmVnaXN0ZXJMb29rQW5pbWF0aW9uIiwiY29uZmlnIiwidHJhY2tpbmdDb25maWciLCJhbmdsZXMiLCJoIiwicHJldkFuZ2xlcyIsInNvdXJjZVBvc2l0aW9uIiwiX2dldFdvcmxkUG9zaXRpb24iLCJ0YXJnZXRQb3NpdGlvbiIsImxvb2tWZWN0b3IiLCJ0YXJnZXRQb3MiLCJ0cmFja2VyUG9zIiwidGFyZ2V0U3BoZXJpY2FsIiwiY2FydGVzaWFuVG9TcGhlcmljYWwiLCJ0YXJnZXRBbmdsZXMiLCJfc3BoZXJpY2FsVG9CbGVuZFZhbHVlIiwicmVmRGlyZWN0aW9uIiwiX2dldE9iamVjdERpcmVjdGlvbiIsInJlZlNwaGVyaWNhbCIsInJlZkFuZ2xlcyIsInRhcmdldFR5cGUiLCJkaXN0YW5jZSIsIl9nZXRUYXJnZXREaXN0YW5jZSIsImZhY2VWZWN0b3IiLCJzcGhlcmljYWwiLCJibGVuZFZhbHVlcyIsIm1heEhTcGVlZCIsImV4cCIsIm1heFZTcGVlZCIsIkQwIiwiZCIsImhEdXJhdGlvbiIsInZEdXJhdGlvbiIsIm1pY3JvU2FjY2FkZSIsIl91cGRhdGVMYXllclNwZWVkIiwiX2luaXRpYWxpemVNaWNyb1RpbWVyIiwibWFjcm9TYWNjYWRlIiwibWFjcm9TYWNjYWRlV2FpdFJhbmdlIiwiaExpbWl0IiwiaEZhY3RvciIsInZMaW1pdCIsInZGYWN0b3IiLCJzYWNjYWRlVGFyZ2V0IiwiX2dldEZhY2VUYXJnZXRBbmdsZXMiLCJfaW5pdGlhbGl6ZU1hY3JvVGltZXIiLCJtaW5XYWl0VGltZSIsIm1heFdhaXRUaW1lIiwid2FpdFRpbWUiLCJtaWNyb1NhY2NhZGVUaW1lciIsIl9zZXRNaWNyb1NhY2NhZGUiLCJtYWNyb1NhY2NhZGVUaW1lciIsIl9zZXRNYWNyb1NhY2NhZGUiLCJfYWRkVHJhY2tpbmdDb25maWciLCJoVmVsb2NpdHkiLCJ2VmVsb2NpdHkiLCJfc2V0TG9va0FuZ2xlcyIsIl9yZXNldExvb2tBbmdsZXMiLCJkZWx0YVNlY29uZHMiLCJ0cmlnZ2VyQmxpbmsiLCJjdXJyZW50SCIsImN1cnJlbnRWIiwidGFyZ2V0SCIsInRhcmdldFYiLCJwcmV2VGFyZ2V0SCIsInByZXZUYXJnZXRWIiwiY2hhbmdlQW1vdW50IiwidG9EZWdyZWVzIiwiZ2V0QW5nbGVCZXR3ZWVuIiwiZGFtcFZhbHVlIiwic2V0VGFyZ2V0Iiwic2V0VGFyZ2V0QnlOYW1lIiwic2V0VGFyZ2V0QnlJZCIsIm9iaiIsImZvcndhcmRWZWN0b3IiLCJyb3RhdGlvbiIsImdldFJvdGF0aW9uTWF0cml4IiwiX2dldFdvcmxkTWF0cml4Iiwicm90YXRlVmVjdG9yIiwidGhldGEiLCJwaGkiLCJPYmplY3QzRCIsImdldE9iamVjdEJ5TmFtZSIsImdldE9iamVjdEJ5SWQiLCJ1cGRhdGVXb3JsZE1hdHJpeCIsIm1hdHJpeFdvcmxkIiwiZWxlbWVudHMiLCJDb3JlUG9pbnRPZkludGVyZXN0RmVhdHVyZSIsImVudiIsIlRleHRUb1NwZWVjaFV0aWxzIiwidGV4dCIsInJhbmRvbU1hcmtzIiwiaW50ZXJuYWxNYXAiLCJfcHJvY2Vzc0lucHV0TWFwIiwic3BlYWtUYWdzIiwic3NtbE1hcmtSZWdleCIsInNzbWxUYWdSZWdleCIsImV4aXN0aW5nVGFncyIsImV4ZWMiLCJzdGFydCIsImVuZCIsImNodW5rcyIsInNzbWxNYXJrUmVzdWx0IiwiZHVwbGljYXRlTWFya1RvQ2hlY2siLCJleGlzdGluZ1RhZyIsInN1YnN0ciIsIl9pbnNlcnRNYXJrcyIsIm1hcmtUZXh0IiwibWFya2VkVGV4dCIsImpvaW4iLCJhZGRNYXJrc1RvVW5tYXJrZWRTZW50ZW5jZXMiLCJ2YWxpZGF0ZVRleHQiLCJtYXJrcyIsIm1hcmtJbmRpY2VzIiwibWFya1Jlc3VsdCIsInNzbWxSZXN1bHQiLCJjbGVhbmVkVGV4dCIsImV4aXN0aW5nU3NtbCIsIndoaXRlc3BhY2UiLCJzZW50ZW5jZUVuZEluZGljZXMiLCJfZ2V0U2VudGVuY2VFbmRzIiwicHJldkluZGV4IiwidGFyZ2V0SW5kaWNlcyIsImNvbnRhaW5zTWFyayIsIm1hcmtJbmRleCIsInJhbmRvbU1hcmtlZFRleHQiLCJfaW5zZXJ0UmFuZG9tTWFya3NBdCIsIm9mZnNldCIsInJhbmRvbU1hcmsiLCJzZW50ZW5jZVJlZ2V4IiwiZW5kU2VudGVuY2VSZWdleCIsInNlbnRlbmNlRW5kcyIsInB1bmN0UmVzdWx0IiwiZHVwbGljYXRlc1RvQ2hlY2siLCJ3b3JkUmVnZXgiLCJsb3dlckNhc2VXb3JkIiwiY2hlY2tEdXBsaWNhdGUiLCJtYXJrZWRXb3JkcyIsInRvTG93ZXJDYXNlIiwiZXhpc3RpbmdNYXJrcyIsImxpc3QiLCJpc0FycmF5IiwiQWJzdHJhY3RTcGVlY2giLCJzcGVha2VyIiwic3BlZWNobWFya3MiLCJfc3BlYWtlciIsIl90ZXh0IiwiX3NwZWVjaG1hcmtzIiwiX3NwZWVjaG1hcmtPZmZzZXQiLCJfc3RhcnRUaW1lIiwiX2xvY2FsVGltZSIsIl9wYXVzZVRpbWUiLCJfcGxheWluZyIsIl9tYXJrSXRlciIsIl9jdXJyZW50TWFyayIsIl9lbmRUaW1lIiwiX3Byb21pc2UiLCJvbkludGVycnVwdCIsImludGVycnVwdCIsInNwZWVjaCIsIl9jaGVja0ZpbmlzaGVkIiwiX2NyZWF0ZVByb21pc2UiLCJTcGVlY2giLCJhdWRpb0NvbmZpZyIsIl9hdWRpbyIsImF1ZGlvIiwib25lbmRlZCIsIl9hdWRpb0ZpbmlzaGVkIiwidm9sdW1lIiwic2V0VGltZW91dCIsIl9wbGF5QXVkaW8iLCJfcGF1c2VBdWRpbyIsInRleHRUb1NwZWVjaCIsIl90aHJlZUF1ZGlvIiwidGhyZWVBdWRpbyIsImRpc2Nvbm5lY3QiLCJjb25uZWN0IiwiQ29yZVNwZWVjaCIsImVuZ2luZXMiLCJhdWRpb0Zvcm1hdHMiLCJzcGVlY2htYXJrVHlwZXMiLCJzYW1wbGVSYXRlcyIsIm1wMyIsInJhdGVzIiwiZGVmYXVsdHMiLCJzdGFuZGFyZCIsIm5ldXJhbCIsInBjbSIsIm9nZ192b3JiaXMiLCJhd3NWZXJzaW9uIiwiQWJzdHJhY3RUZXh0VG9TcGVlY2hGZWF0dXJlIiwidm9pY2UiLCJlbmdpbmUiLCJsYW5ndWFnZSIsImF1ZGlvRm9ybWF0Iiwic2FtcGxlUmF0ZSIsIm1pbkVuZE1hcmtEdXJhdGlvbiIsIl9zcGVlY2hDYWNoZSIsIl9jdXJyZW50U3BlZWNoIiwiX2N1cnJlbnRQcm9taXNlIiwiX2lzVmFsaWRhdGVkIiwiX3ZvbHVtZVBhdXNlZCIsIl92b2ljZSIsIlBPTExZX0RFRkFVTFRTIiwiVm9pY2VJZCIsIl9sYW5ndWFnZSIsIkxhbmd1YWdlTmFtZSIsIl9lbmdpbmUiLCJFbmdpbmUiLCJfYXVkaW9Gb3JtYXQiLCJPdXRwdXRGb3JtYXQiLCJfc2FtcGxlUmF0ZSIsIlNhbXBsZVJhdGUiLCJfbWluRW5kTWFya0R1cmF0aW9uIiwiQVdTX1ZFUlNJT04iLCJQT0xMWV9NSU5fTkVVUkFMX1ZFUlNJT04iLCJmb3JtYXQiLCJyYXRlIiwidm9pY2VJZCIsIlBPTExZX1ZPSUNFUyIsIklkIiwiU3VwcG9ydGVkRW5naW5lcyIsImxhbmd1YWdlQ29kZSIsIlBPTExZX0xBTkdVQUdFUyIsImF2YWlsYWJsZUNvZGVzIiwiTGFuZ3VhZ2VDb2RlIiwiQWRkaXRpb25hbExhbmd1YWdlQ29kZXMiLCJQT0xMWV9MQU5HVUFHRV9DT0RFUyIsIl92YWxpZGF0ZUVuZ2luZSIsIl92YWxpZGF0ZUZvcm1hdCIsIl92YWxpZGF0ZVJhdGUiLCJfdmFsaWRhdGVWb2ljZSIsIl92YWxpZGF0ZUxhbmd1YWdlIiwiaXNSZWFkeSIsIl92YWxpZGF0ZSIsInNraXBTcGVlY2hlcyIsImN1cnJlbnRDb25maWciLCJfZ2V0Q29uZmlnIiwiY3VycmVudENvbmZpZ1N0ciIsIkxhbmd1YWdlIiwidmFsaWRDb25maWciLCJjb25maWdTdHIiLCJzcGVlY2hDb25maWdTdHIiLCJfdXBkYXRlU3BlZWNoIiwiYXVkaW9QYXJhbXMiLCJUZXh0IiwiVGV4dFR5cGUiLCJzcGVlY2htYXJrUGFyYW1zIiwiU3BlZWNoTWFya1R5cGVzIiwiX3N5bnRoZXNpemVTcGVlY2htYXJrcyIsIl9zeW50aGVzaXplQXVkaW8iLCJyZXN1bHRzIiwiX2NyZWF0ZVNwZWVjaCIsInBhcmFtcyIsInByZXNpZ25lciIsImdldFN5bnRoZXNpemVTcGVlY2hVcmwiLCJ1cmwiLCJwb2xseSIsInN5bnRoZXNpemVTcGVlY2giLCJqc29uU3RyaW5nIiwiQXVkaW9TdHJlYW0iLCJqc29uIiwiZGF0YVN0ciIsImRhdGEiLCJTdHJpbmciLCJmcm9tQ2hhckNvZGUiLCJtYXJrVHlwZXMiLCJlbmRNYXJrVHlwZXMiLCJzcGVlY2hNYXJrcyIsIm1hdGNoQWxsIiwibnVtTWFya3MiLCJsYXN0TWFyayIsImVuZFRpbWVzIiwiZW5kVGltZSIsIl91cGRhdGVDb25maWciLCJnZXRWb2x1bWUiLCJzZXRWb2x1bWUiLCJwYXVzZVZvbHVtZSIsInJlc3VtZVZvbHVtZSIsIl92b2x1bWUiLCJ2b2x1bWVQZW5kaW5nIiwicGxheWluZyIsImN1cnJlbnRQcm9taXNlIiwiX2dldFNwZWVjaCIsIl9zZXRDdXJyZW50U3BlZWNoIiwiX3N0YXJ0U3BlZWNoIiwidmVyc2lvbiIsImN1c3RvbVVzZXJBZ2VudCIsIl93aXRoQ3VzdG9tVXNlckFnZW50Iiwic2VydmljZSIsIl9pc1JlYWR5IiwiYXZhaWxhYmxlVm9pY2VzIiwiYXZhaWxhYmxlTGFuZ3VhZ2VzIiwiYXZhaWxhYmxlTGFuZ3VhZ2VDb2RlcyIsIm1pbk5ldXJhbFNkayIsImRlc2NyaWJlVm9pY2VzIiwicmVzcG9uc2UiLCJhbGxDb2RlcyIsIlZvaWNlcyIsImNvZGUiLCJyZWFkeSIsImN1cnJlbnRVc2VyQWdlbnQiLCJzdW1lcmlhbkhvc3RzVXNlckFnZW50IiwiY29uY2F0IiwiTGV4aWNvbk5hbWVzIiwiX2VuYWJsZWQiLCJfc2V0QXVkaW9Db250ZXh0IiwiX29ic2VydmVBdWRpb0NvbnRleHQiLCJfYXVkaW9Db250ZXh0IiwiQXVkaW9Db250ZXh0Iiwib25zdGF0ZWNoYW5nZSIsIkF1ZGlvIiwibG9vcCIsImNyb3NzT3JpZ2luIiwicHJlbG9hZCIsImRvY3VtZW50IiwiYm9keSIsImFwcGVuZENoaWxkIiwibG9hZCIsInJlc3VtZUF1ZGlvIiwiZW5hYmxlZCIsImF0dGFjaFRvIiwiX2xpc3RlbmVyIiwiX2F0dGFjaFRvIiwiY29udGV4dCIsIlBvc2l0aW9uYWxBdWRpbyIsImFkZCIsInNldE1lZGlhRWxlbWVudFNvdXJjZSIsIkNvcmVUZXh0VG9TcGVlY2hGZWF0dXJlIiwidGhyZWVCbGVuZE1vZGVzIiwiTm9ybWFsQW5pbWF0aW9uQmxlbmRNb2RlIiwiQWRkaXRpdmVBbmltYXRpb25CbGVuZE1vZGUiLCJ0aHJlZUFjdGlvbiIsIl9vbkZpbmlzaGVkRXZlbnQiLCJhY3Rpb24iLCJ0aW1lU2NhbGVQZW5kaW5nIiwiX3RocmVlQWN0aW9uIiwiY2xhbXBXaGVuRmluaXNoZWQiLCJMb29wT25jZSIsIkxvb3BSZXBlYXQiLCJyZXBldGl0aW9ucyIsImdldE1peGVyIiwiZ2V0Q2xpcCIsInNldEVmZmVjdGl2ZVdlaWdodCIsIkNvcmVTaW5nbGVTdGF0ZSIsIl9taXhlciIsIkFuaW1hdGlvbk1peGVyIiwiY2xpcCIsImV4aXN0aW5nQWN0aW9uIiwiY2xvbmUiLCJjbGlwQWN0aW9uIiwidW5jYWNoZVJvb3QiLCJDb3JlQW5pbWF0aW9uRmVhdHVyZSIsIkVhc2luZyIsImF3cyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0lBQ01BLFE7Ozs7O0FBQ0o7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDRSxzQkFBa0U7QUFBQTs7QUFBQSxRQUF0REMsVUFBc0QsdUVBQXpDLFlBQU0sQ0FBRSxDQUFpQztBQUFBLFFBQS9CQyxTQUErQjtBQUFBLFFBQXBCQyxRQUFvQjtBQUFBLFFBQVZDLFFBQVU7O0FBQUE7O0FBQ2hFLFFBQUksT0FBT0gsVUFBUCxLQUFzQixVQUExQixFQUFzQztBQUNwQyxZQUFNLElBQUlJLEtBQUosOERBQU47QUFHRDs7QUFFRCxRQUFJLE9BQU9ILFNBQVAsS0FBcUIsV0FBckIsSUFBb0MsT0FBT0EsU0FBUCxLQUFxQixVQUE3RCxFQUF5RTtBQUN2RSxZQUFNLElBQUlHLEtBQUosNkRBQU47QUFHRDs7QUFFRCxRQUFJLE9BQU9GLFFBQVAsS0FBb0IsV0FBcEIsSUFBbUMsT0FBT0EsUUFBUCxLQUFvQixVQUEzRCxFQUF1RTtBQUNyRSxZQUFNLElBQUlFLEtBQUosNERBQU47QUFHRDs7QUFFRCxRQUFJLE9BQU9ELFFBQVAsS0FBb0IsV0FBcEIsSUFBbUMsT0FBT0EsUUFBUCxLQUFvQixVQUEzRCxFQUF1RTtBQUNyRSxZQUFNLElBQUlDLEtBQUosNERBQU47QUFHRDs7QUFFRCxRQUFJQyxHQUFKO0FBQ0EsUUFBSUMsR0FBSjtBQUNBLFFBQUlDLE1BQUo7QUFDQSxRQUFNQyxNQUFNLEdBQUc7QUFDYkMsY0FBUSxFQUFFLEtBREc7QUFFYkMsY0FBUSxFQUFFLEtBRkc7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aUNiO0FBQ0Y7QUFDQTtBQUNFOFEsd0JBQXNCLEVBQXRCQSwrQkFwQ2E7O0FBcUNiO0FBQ0Y7QUFDQTtBQUNFeFYsa0JBQWdCLEVBQWhCQSxnQkF4Q2E7O0FBeUNiO0FBQ0Y7QUFDQTtBQUNFK0QscUJBQW1CLEVBQW5CQSxtQkE1Q2E7O0FBNkNiO0FBQ0Y7QUFDQTtBQUNFcVEsU0FBTyxFQUFQQSxPQWhEYTs7QUFpRGI7QUFDRjtBQUNBO0FBQ0U2WSxLQUFHLEVBQUhBLE9BcERhOztBQXFEYjtBQUNGO0FBQ0E7QUFDRTFuQixNQUFJLEVBQUpBLFFBQUlBO0FBeERTLENBQWYiLCJmaWxlIjoiMzMzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXHJcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxyXG5cclxuLyoqXHJcbiAqIFRoZSBidWlsdC1pbiBjbGFzcyBmb3IgYXN5bmNocm9ub3VzIFByb21pc2VzLlxyXG4gKiBAZXh0ZXJuYWwgUHJvbWlzZVxyXG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL1Byb21pc2VcclxuICovXHJcblxyXG4vKipcclxuICogQSBQcm9taXNlIG9iamVjdCB0aGF0IGNhbiBiZSByZXNvbHZlZCwgcmVqZWN0ZWQgb3IgY2FuY2VsZWQgYXQgYW55IHRpbWUgYnkgdGhlXHJcbiAqIHVzZXIuXHJcbiAqXHJcbiAqIEBleHRlbmRzIGV4dGVybmFsOlByb21pc2VcclxuICovXHJcbmNsYXNzIERlZmVycmVkIGV4dGVuZHMgUHJvbWlzZSB7XHJcbiAgLyoqXHJcbiAgICogQGNvbnN0cnVjdG9yXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbZXhlY3V0YWJsZT0oKSA9PiB7fV0gLSBUaGUgZnVuY3Rpb24gdG8gYmUgZXhlY3V0ZWQgYnkgdGhlXHJcbiAgICogY29uc3RydWN0b3IsIGR1cmluZyB0aGUgcHJvY2VzcyBvZiBjb25zdHJ1Y3RpbmcgdGhlIHByb21pc2UuIFRoZSBzaWduYXR1cmVcclxuICAgKiBvZiB0aGlzIGlzIGV4cGVjdGVkIHRvIGJlOiBleGVjdXRhYmxlKCAgcmVzb2x1dGlvbkZ1bmMsIHJlamVjdGlvbkZ1bmMsIGNhbmNlbGxhdGlvbkZ1bmMgKS5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb25SZXNvbHZlIC0gT3B0aW9uYWwgZnVuY3Rpb24gdG8gZXhlY3V0ZSBvbmNlIHRoZSBwcm9taXNlXHJcbiAgICogaXMgcmVzb2x2ZWQuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9uUmVqZWN0IC0gT3B0aW9uYWwgZnVuY3Rpb24gdG8gZXhlY3V0ZSBvbmNlIHRoZSBwcm9taXNlXHJcbiAgICogaXMgcmVqZWN0ZWQuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9uQ2FuY2VsIC0gT3B0aW9uYWwgZnVuY3Rpb24gdG8gZXhlY3V0ZSBpZiB0aGUgdXNlciBjYW5jZWxzXHJcbiAgICogdGhlIHByb21pc2UuIENhbmNlbGluZyByZXN1bHRzIGluIHRoZSBwcm9taXNlIGhhdmluZyBhIHN0YXR1cyBvZiAncmVzb2x2ZWQnLlxyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKGV4ZWN1dGFibGUgPSAoKSA9PiB7fSwgb25SZXNvbHZlLCBvblJlamVjdCwgb25DYW5jZWwpIHtcclxuICAgIGlmICh0eXBlb2YgZXhlY3V0YWJsZSAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgYENhbm5vdCBjcmVhdGUgbmV3IERlZmVycmVkLiBFeGVjdXRhYmxlIG11c3QgYmUgYSBmdW5jdGlvbi5gXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHR5cGVvZiBvblJlc29sdmUgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBvblJlc29sdmUgIT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgIGBDYW5ub3QgY3JlYXRlIG5ldyBEZWZlcnJlZC4gT25SZXNvbHZlIG11c3QgYmUgYSBmdW5jdGlvbi5gXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHR5cGVvZiBvblJlamVjdCAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIG9uUmVqZWN0ICE9PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgQ2Fubm90IGNyZWF0ZSBuZXcgRGVmZXJyZWQuIE9uUmVqZWN0IG11c3QgYmUgYSBmdW5jdGlvbi5gXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHR5cGVvZiBvbkNhbmNlbCAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIG9uQ2FuY2VsICE9PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgQ2Fubm90IGNyZWF0ZSBuZXcgRGVmZXJyZWQuIE9uQ2FuY2VsIG11c3QgYmUgYSBmdW5jdGlvbi5gXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHJlcztcclxuICAgIGxldCByZWo7XHJcbiAgICBsZXQgY2FuY2VsO1xyXG4gICAgY29uc3Qgc3RhdHVzID0ge1xyXG4gICAgICByZXNvbHZlZDogZmFsc2UsXHJcbiAgICAgIHJlamVjdGVkOiBmYWxzZSxcclxuICAgICAgY2FuY2VsZWQ6IGZhbHNlLFxyXG4gICAgICBwZW5kaW5nOiB0cnVlLFxyXG4gICAgfTtcclxuXHJcbiAgICBzdXBlcigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgIC8vIFN0b3JlIHRoZSByZXNvbHZlclxyXG4gICAgICByZXMgPSB2YWx1ZSA9PiB7XHJcbiAgICAgICAgaWYgKHN0YXR1cy5wZW5kaW5nKSB7XHJcbiAgICAgICAgICBzdGF0dXMucmVzb2x2ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgc3RhdHVzLnBlbmRpbmcgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICBpZiAodHlwZW9mIG9uUmVzb2x2ZSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IG9uUmVzb2x2ZSh2YWx1ZSk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgcmV0dXJuIHJlc29sdmUodmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfTtcclxuXHJcbiAgICAgIC8vIFN0b3JlIHRoZSByZWplY3RlclxyXG4gICAgICByZWogPSB2YWx1ZSA9PiB7XHJcbiAgICAgICAgaWYgKHN0YXR1cy5wZW5kaW5nKSB7XHJcbiAgICAgICAgICBzdGF0dXMucmVqZWN0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgc3RhdHVzLnBlbmRpbmcgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICBpZiAodHlwZW9mIG9uUmVqZWN0ID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIHZhbHVlID0gb25SZWplY3QodmFsdWUpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHJldHVybiByZWplY3QodmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfTtcclxuXHJcbiAgICAgIC8vIFN0b3JlIHRoZSBjYW5jZWxlclxyXG4gICAgICBjYW5jZWwgPSB2YWx1ZSA9PiB7XHJcbiAgICAgICAgaWYgKHN0YXR1cy5wZW5kaW5nKSB7XHJcbiAgICAgICAgICBzdGF0dXMuY2FuY2VsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgc3RhdHVzLnBlbmRpbmcgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICBpZiAodHlwZW9mIG9uQ2FuY2VsID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIHZhbHVlID0gb25DYW5jZWwodmFsdWUpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHJldHVybiByZXNvbHZlKHZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH07XHJcblxyXG4gICAgICAvLyBSdW4gdGhlIGV4ZWN1dGFibGUgd2l0aCBjdXN0b20gcmVzb2x2ZXIgYW5kIHJlamVjdGVyXHJcbiAgICAgIGV4ZWN1dGFibGUocmVzLCByZWosIGNhbmNlbCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLl9zdGF0dXMgPSBzdGF0dXM7XHJcbiAgICB0aGlzLl9yZXNvbHZlID0gcmVzO1xyXG4gICAgdGhpcy5fcmVqZWN0ID0gcmVqO1xyXG4gICAgdGhpcy5fY2FuY2VsID0gY2FuY2VsO1xyXG4gICAgdGhpcy5fZXhlY3V0YWJsZSA9IGV4ZWN1dGFibGU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSByZXNvbHZlZCBzdGF0ZSBvZiB0aGUgcHJvbWlzZS5cclxuICAgKlxyXG4gICAqIEByZWFkb25seVxyXG4gICAqL1xyXG4gIGdldCByZXNvbHZlZCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9zdGF0dXMucmVzb2x2ZWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSByZWplY3RlZCBzdGF0ZSBvZiB0aGUgcHJvbWlzZS5cclxuICAgKlxyXG4gICAqIEByZWFkb25seVxyXG4gICAqL1xyXG4gIGdldCByZWplY3RlZCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9zdGF0dXMucmVqZWN0ZWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSBjYW5jZWxlZCBzdGF0ZSBvZiB0aGUgcHJvbWlzZS5cclxuICAgKlxyXG4gICAqIEByZWFkb25seVxyXG4gICAqL1xyXG4gIGdldCBjYW5jZWxlZCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9zdGF0dXMuY2FuY2VsZWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSBwZW5kaW5nIHN0YXRlIG9mIHRoZSBwcm9taXNlLlxyXG4gICAqXHJcbiAgICogQHJlYWRvbmx5XHJcbiAgICovXHJcbiAgZ2V0IHBlbmRpbmcoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fc3RhdHVzLnBlbmRpbmc7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGb3JjZSB0aGUgcHJvbWlzZSB0byByZXNvbHZlLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHthbnk9fSB2YWx1ZSAtIFZhbHVlIHRvIHBhc3MgdG8gdGhlIHJlc29sdmVyLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge2FueX0gLSBUaGUgcmV0dXJuIHZhbHVlIG9mIHRoZSByZXNvbHZlciBmdW5jdGlvbi5cclxuICAgKi9cclxuICByZXNvbHZlKHZhbHVlKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fcmVzb2x2ZSh2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGb3JjZSB0aGUgcHJvbWlzZSB0byByZWplY3QuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge2FueT19IHZhbHVlIC0gVmFsdWUgdG8gcGFzcyB0byB0aGUgcmVqZWN0ZXIuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7YW55fSAtIFRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIHJlamVjdGVyIGZ1bmN0aW9uLlxyXG4gICAqL1xyXG4gIHJlamVjdCh2YWx1ZSkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3JlamVjdCh2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGb3JjZSB0aGUgcHJvbWlzZSB0byByZXNvbHZlIGFuZCBzZXQgdGhlIGNhbmNlbGVkIHN0YXRlIHRvIHRydWUuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge2FueT19IHZhbHVlIC0gVmFsdWUgdG8gcGFzcyB0byB0aGUgY2FuY2VsbGVyLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge2FueX0gLSBUaGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBjYW5jZWxsZXIgZnVuY3Rpb24uXHJcbiAgICovXHJcbiAgY2FuY2VsKHZhbHVlKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fY2FuY2VsKHZhbHVlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJ1biB0aGUgcHJvbWlzZSBmdW5jdGlvbiB0byB0cnkgdG8gcmVzb2x2ZSB0aGUgcHJvbWlzZS4gUHJvbWlzZSBtdXN0IGJlXHJcbiAgICogcGVuZGluZy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7Li4uYW55fSBhcmdzIC0gT3B0aW9uYWwgYXJndW1lbnRzIHRvIHBhc3MgYWZ0ZXIgcmVzb2x2ZSBhbmQgcmVqZWN0LlxyXG4gICAqL1xyXG4gIGV4ZWN1dGUoLi4uYXJncykge1xyXG4gICAgaWYgKHRoaXMucGVuZGluZykge1xyXG4gICAgICB0aGlzLl9leGVjdXRhYmxlKHRoaXMuX3Jlc29sdmUsIHRoaXMuX3JlamVjdCwgdGhpcy5fY2FuY2VsLCAuLi5hcmdzKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiBhIGNhbmNlbGVkIGRlZmVycmVkIHByb21pc2UuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge2FueT19IHZhbHVlIC0gVmFsdWUgdG8gY2FuY2VsIHRoZSBwcm9taXNlIHdpdGguXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7RGVmZXJyZWR9XHJcbiAgICovXHJcbiAgc3RhdGljIGNhbmNlbCh2YWx1ZSkge1xyXG4gICAgcmV0dXJuIG5ldyBEZWZlcnJlZCgoX3Jlc29sdmUsIF9yZWplY3QsIGNhbmNlbCkgPT4ge1xyXG4gICAgICBjYW5jZWwodmFsdWUpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVmZXJyZWQgcHJvbWlzZSB0aGF0IHdpbGwgcmVzb2x2ZSBvciByZWplY3Qgb25jZSBhbGwgcHJvbWlzZXNcclxuICAgKiBpbiB0aGUgaW5wdXQgYXJyYXkgaGF2ZSBiZWVuIHJlc29sdmVkIG9yIG9uZSBwcm9taXNlIGlzIGNhbmNlbGVkIG9yIHJlamVjdGVkLlxyXG4gICAqIFByb21pc2VzIGluIHRoZSBhcnJheSB0aGF0IGFyZSBEZWZlcnJlZCBwcm9taXNlcyB3aWxsIGJlIG1hbnVhbGx5IHJlc29sdmVkLFxyXG4gICAqIHJlamVjdGVkIG9yIGNhbmNlbGVkIHdoZW4gY2FsbGluZyByZXNvbHZlLCByZWplY3Qgb3IgY2FuY2VsIG9uIHRoZSByZXR1cm4gcHJvbWlzZS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7QXJyYXkuPGFueT59IGl0ZXJhYmxlIC0gQW4gaXRlcmFibGUgc3VjaCBhcyBhbiBhcnJheS5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb25SZXNvbHZlIC0gT3B0aW9uYWwgZnVuY3Rpb24gdG8gZXhlY3V0ZSBvbmNlIHRoZSBwcm9taXNlXHJcbiAgICogaXMgcmVzb2x2ZWQuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9uUmVqZWN0IC0gT3B0aW9uYWwgZnVuY3Rpb24gdG8gZXhlY3V0ZSBvbmNlIHRoZSBwcm9taXNlXHJcbiAgICogaXMgcmVqZWN0ZWQuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9uQ2FuY2VsIC0gT3B0aW9uYWwgZnVuY3Rpb24gdG8gZXhlY3V0ZSBpZiB0aGUgdXNlciBjYW5jZWxzXHJcbiAgICogdGhlIHByb21pc2UuIENhbmNlbGluZyByZXN1bHRzIGluIHRoZSBwcm9taXNlIGhhdmluZyBhIHN0YXR1cyBvZiAnY2FuY2VsZWQnLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMgRGVmZXJyZWRcclxuICAgKi9cclxuICBzdGF0aWMgYWxsKGl0ZXJhYmxlLCBvblJlc29sdmUsIG9uUmVqZWN0LCBvbkNhbmNlbCkge1xyXG4gICAgaWYgKGl0ZXJhYmxlID09IG51bGwgfHwgdHlwZW9mIGl0ZXJhYmxlW1N5bWJvbC5pdGVyYXRvcl0gIT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgbGV0IGUgPSBgQ2Fubm90IGV4ZWN1dGUgRGVmZXJyZWQuYWxsLiBGaXJzdCBhcmd1bWVudCBtdXN0IGJlIGl0ZXJhYmxlLmA7XHJcblxyXG4gICAgICBpZiAodHlwZW9mIG9uUmVqZWN0ID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgZSA9IG9uUmVqZWN0KGUpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gRGVmZXJyZWQucmVqZWN0KGUpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGFycmF5ID0gWy4uLml0ZXJhYmxlXTtcclxuICAgIGNvbnN0IGRlZmVycmVkID0gYXJyYXkuZmlsdGVyKGl0ZW0gPT4gaXRlbSBpbnN0YW5jZW9mIERlZmVycmVkKTtcclxuXHJcbiAgICBjb25zdCByZXN1bHQgPSBuZXcgRGVmZXJyZWQoXHJcbiAgICAgIHVuZGVmaW5lZCxcclxuICAgICAgcmVzb2x2ZVZhbHVlID0+IHtcclxuICAgICAgICBkZWZlcnJlZC5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgaXRlbS5yZXNvbHZlKHJlc29sdmVWYWx1ZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgZGVmZXJyZWQubGVuZ3RoID0gMDtcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiBvblJlc29sdmUgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgIHJldHVybiBvblJlc29sdmUocmVzb2x2ZVZhbHVlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmV0dXJuIHJlc29sdmVWYWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yID0+IHtcclxuICAgICAgICBkZWZlcnJlZC5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgaXRlbS5yZWplY3QoZXJyb3IpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGRlZmVycmVkLmxlbmd0aCA9IDA7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2Ygb25SZWplY3QgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgIHJldHVybiBvblJlamVjdChlcnJvcik7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJldHVybiBlcnJvcjtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIGNhbmNlbFZhbHVlID0+IHtcclxuICAgICAgICBkZWZlcnJlZC5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgaXRlbS5jYW5jZWwoY2FuY2VsVmFsdWUpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGRlZmVycmVkLmxlbmd0aCA9IDA7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2Ygb25DYW5jZWwgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgIHJldHVybiBvbkNhbmNlbChjYW5jZWxWYWx1ZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJldHVybiBjYW5jZWxWYWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICk7XHJcblxyXG4gICAgY29uc3QgbnVtSXRlbXMgPSBhcnJheS5sZW5ndGg7XHJcbiAgICBjb25zdCBpdGVtVHJhY2tlciA9IHtcclxuICAgICAgZmFpbGVkOiBmYWxzZSxcclxuICAgICAgbnVtUmVzb2x2ZWQ6IDAsXHJcbiAgICAgIHJlc29sdXRpb25zOiBbXVxyXG4gICAgfVxyXG5cclxuICAgIGFycmF5LmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XHJcbiAgICAgIGlmIChpdGVtVHJhY2tlci5mYWlsZWQpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH0gZWxzZSBpZiAoIShpdGVtIGluc3RhbmNlb2YgUHJvbWlzZSkpIHtcclxuICAgICAgICBpdGVtVHJhY2tlci5yZXNvbHV0aW9uc1tpbmRleF0gPSBpdGVtO1xyXG4gICAgICAgIGl0ZW1UcmFja2VyLm51bVJlc29sdmVkICs9IDE7XHJcblxyXG4gICAgICAgIGlmIChpdGVtVHJhY2tlci5udW1SZXNvbHZlZCA9PT0gbnVtSXRlbXMpIHtcclxuICAgICAgICAgIHJlc3VsdC5yZXNvbHZlKGl0ZW1UcmFja2VyLnJlc29sdXRpb25zKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpdGVtLnRoZW4oXHJcbiAgICAgICAgdmFsdWUgPT4ge1xyXG4gICAgICAgICAgaWYgKCFpdGVtVHJhY2tlci5mYWlsZWQgJiYgIWl0ZW0uY2FuY2VsZWQpIHtcclxuICAgICAgICAgICAgaXRlbVRyYWNrZXIucmVzb2x1dGlvbnNbaW5kZXhdID0gdmFsdWU7XHJcbiAgICAgICAgICAgIGl0ZW1UcmFja2VyLm51bVJlc29sdmVkICs9IDE7XHJcblxyXG4gICAgICAgICAgICBpZiAoaXRlbVRyYWNrZXIubnVtUmVzb2x2ZWQgPT09IG51bUl0ZW1zKSB7XHJcbiAgICAgICAgICAgICAgcmVzdWx0LnJlc29sdmUoaXRlbVRyYWNrZXIucmVzb2x1dGlvbnMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKCFpdGVtVHJhY2tlci5mYWlsZWQpIHtcclxuICAgICAgICAgICAgaXRlbVRyYWNrZXIuZmFpbGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgcmVzdWx0LmNhbmNlbCh2YWx1ZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvciA9PiB7XHJcbiAgICAgICAgICBpZiAoIWl0ZW1UcmFja2VyLmZhaWxlZCkge1xyXG4gICAgICAgICAgICBpdGVtVHJhY2tlci5mYWlsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICByZXN1bHQucmVqZWN0KGVycm9yKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgRGVmZXJyZWQ7XHJcbiIsIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxyXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTBcclxuaW1wb3J0IERlZmVycmVkIGZyb20gJ2NvcmUvRGVmZXJyZWQnO1xyXG5cclxuLyoqXHJcbiAqIEEgY29sbGVjdGlvbiBvZiB1c2VmdWwgZ2VuZXJpYyBmdW5jdGlvbnMuXHJcbiAqXHJcbiAqIEBoaWRlY29uc3RydWN0b3JcclxuICovXHJcbmNsYXNzIFV0aWxzIHtcclxuICAvKipcclxuICAgKiBAc3RhdGljXHJcbiAgICpcclxuICAgKiBHZW5lcmF0ZSBhIHVuaXF1ZSBpZFxyXG4gICAqXHJcbiAgICogQHJldHVybnMge1N0cmluZ31cclxuICAgKi9cclxuICBzdGF0aWMgY3JlYXRlSWQoKSB7XHJcbiAgICByZXR1cm4gJ3h4eHh4eHh4eHh4eDR4eHh5eHh4eHh4eHh4eHh4eHh4Jy5yZXBsYWNlKC9beHldL2csIGMgPT4ge1xyXG4gICAgICBjb25zdCByYW5kb21OdW1iZXIgPSBNYXRoLmZsb29yKChEYXRlLm5vdygpICsgTWF0aC5yYW5kb20oKSAqIDE2KSAlIDE2KTtcclxuICAgICAgaWYgKGMgPT09ICd4Jykge1xyXG4gICAgICAgIHJldHVybiByYW5kb21OdW1iZXIudG9TdHJpbmcoMTYpO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIFNldCBiaXQgNiBhbmQgNyB0byAwIGFuZCAxXHJcbiAgICAgIHJldHVybiAoKHJhbmRvbU51bWJlciAmIDB4MykgfCAweDgpLnRvU3RyaW5nKDE2KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQHN0YXRpY1xyXG4gICAqXHJcbiAgICogQ2hlY2sgYSBuYW1lIHN0cmluZyBhZ2FpbnN0IGFuIGFycmF5IG9mIHN0cmluZ3MgdG8gZGV0ZXJtaW5lIGlmIGl0IGlzIHVuaXF1ZS5cclxuICAgKiBJZiBpdCBpc24ndCwgYXBwZW5kIGluY3JlbWVudGVkIHRyYWlsaW5nIGludGVnZXJzIHRvIHRoZSBlbmQgb2YgdGhlIG5hbWVcclxuICAgKiB1bnRpbCBpdCBpcyB1bmlxdWUuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIFN0cmluZyBuYW1lIHRvIG1ha2UgdW5pcXVlLlxyXG4gICAqIEBwYXJhbSB7QXJyYXkuPHN0cmluZz49fSBuYW1lQXJyYXkgLSBBcnJheSBvZiBzdHJpbmcgbmFtZXMgdG8gY2hlY2sgYWdhaW5zLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge3N0cmluZ31cclxuICAgKi9cclxuICBzdGF0aWMgZ2V0VW5pcXVlTmFtZShuYW1lLCBuYW1lQXJyYXkgPSBbXSkge1xyXG4gICAgLy8gSWYgdGhlIG5hbWUgaXNuJ3QgaW4gdGhlIGFycmF5IHJldHVybiBpdCByaWdodCBhd2F5XHJcbiAgICBpZiAoIW5hbWVBcnJheS5pbmNsdWRlcyhuYW1lKSkge1xyXG4gICAgICByZXR1cm4gbmFtZTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBuYW1lU2V0ID0gbmV3IFNldChuYW1lQXJyYXkpO1xyXG5cclxuICAgIC8vIFNlcGFyYXRlIHRoZSBuYW1lIGludG8gc3RyaW5nIGFuZCB0cmFpbGluZyBudW1iZXJzXHJcbiAgICBjb25zdCBtYXRjaEdyb3VwID0gbmFtZS5tYXRjaCgvXFxkKiQvKTtcclxuICAgIGNvbnN0IHtpbmRleH0gPSBtYXRjaEdyb3VwO1xyXG4gICAgY29uc3QgYmFzZU5hbWUgPSBuYW1lLnNsaWNlKDAsIGluZGV4KTtcclxuICAgIGxldCBpbmNyZW1lbnQgPSBOdW1iZXIobWF0Y2hHcm91cFswXSk7XHJcblxyXG4gICAgLy8gRmluZCB0aGUgaGlnaGVzdCB0cmFpbGluZyBudW1iZXIgdmFsdWUgZm9yIHRoZSBiYXNlIG9mIHRoZSBuYW1lXHJcbiAgICBuYW1lU2V0LmZvckVhY2goc2V0TmFtZSA9PiB7XHJcbiAgICAgIGNvbnN0IHNldE1hdGNoR3JvdXAgPSBzZXROYW1lLm1hdGNoKC9cXGQqJC8pO1xyXG5cclxuICAgICAgaWYgKHNldE5hbWUuc2xpY2UoMCwgc2V0TWF0Y2hHcm91cC5pbmRleCkgPT09IGJhc2VOYW1lKSB7XHJcbiAgICAgICAgY29uc3Qgc2V0SW5jcmVtZW50ID0gTnVtYmVyKHNldE1hdGNoR3JvdXBbMF0pO1xyXG5cclxuICAgICAgICBpZiAoc2V0SW5jcmVtZW50ID4gaW5jcmVtZW50KSB7XHJcbiAgICAgICAgICBpbmNyZW1lbnQgPSBzZXRJbmNyZW1lbnQ7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBJbmNyZW1lbnQgdGhlIGhpZ2hlc3QgdHJhaWxpbmcgbnVtYmVyIGFuZCBhcHBlbmQgdG8gdGhlIG5hbWVcclxuICAgIHJldHVybiBgJHtiYXNlTmFtZX0ke2luY3JlbWVudCArIDF9YDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiBhIGRlZmVycmVkIHByb21pc2UgdGhhdCB3aWxsIHdhaXQgYSBnaXZlbiBudW1iZXIgb2Ygc2Vjb25kcyBiZWZvcmVcclxuICAgKiByZXNvbHZpbmcuIFBhc3MgZGVsdGEgdGltZSBpbiBtaWxsaXNlY29uZHMgdG8gdGhlIGRlZmVycmVkIHByb21pc2UncyBleGVjdXRlXHJcbiAgICogbWV0aG9kIGluIGFuIHVwZGF0ZSBsb29wIHRvIHByb2dyZXNzIHRpbWUuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge251bWJlcn0gW3NlY29uZHM9MF0gLSBOdW1iZXIgb2Ygc2Vjb25kcyB0byB3YWl0IGJlZm9yZSByZXNvbHZpbmcuXHJcbiAgICogQHBhcmFtIHtPYmplY3Q9fSBvcHRpb25zIC0gT3B0aW9uYWwgb3B0aW9ucyBvYmplY3RcclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0aW9ucy5vbkZpbmlzaF0gLSBDYWxsYmFjayB0byBleGVjdXRlIG9uY2UgdGhlIHdhaXQgdGltZVxyXG4gICAqIGlzIG1ldC5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb3B0aW9ucy5vblByb2dyZXNzIC0gQ2FsbGJhY2sgdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIHdhaXRcclxuICAgKiB0aW1lIHByb2dyZXNzZXMgdG93YXJkcyB0aGUgdGFyZ2V0IG51bWJlciBvZiBzZWNvbmRzLiBUaGUgYW1vdW50IG9mIHByb2dyZXNzXHJcbiAgICogYXMgYSAwLTEgcGVyY2VudGFnZSBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnQuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9wdGlvbnMub25DYW5jZWwgLSBDYWxsYmFjayB0byBleGVjdXRlIGlmIHRoZSB1c2VyIGNhbmNlbHNcclxuICAgKiB0aGUgd2FpdCBiZWZvcmUgY29tcGxldGlvbi5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb3B0aW9ucy5vbkVycm9yIC0gQ2FsbGJhY2sgdG8gZXhlY3V0ZSBpZiB0aGUgd2FpdCBzdG9wc1xyXG4gICAqIGJlY2F1c2UgYW4gZXJyb3IgaXMgZW5jb3VudGVyZWQuIFRoZSBlcnJvciBtZXNzYWdlIGlzIHBhc3NlZCBhcyBhIHBhcmFtZXRlci5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtEZWZlcnJlZH1cclxuICAgKi9cclxuICBzdGF0aWMgd2FpdChzZWNvbmRzID0gMCwge29uRmluaXNoLCBvblByb2dyZXNzLCBvbkNhbmNlbCwgb25FcnJvcn0gPSB7fSkge1xyXG4gICAgLy8gTWFrZSBzdXJlIHNlY29uZHMgaXMgbnVtZXJpY1xyXG4gICAgaWYgKHR5cGVvZiBzZWNvbmRzICE9PSAnbnVtYmVyJykge1xyXG4gICAgICBjb25zb2xlLndhcm4oXHJcbiAgICAgICAgYEludmFsaWQgc2Vjb25kcyB2YWx1ZSAke3NlY29uZHN9IGZvciB3YWl0LiBEZWZhdWx0aW5nIHRvIDAuYFxyXG4gICAgICApO1xyXG5cclxuICAgICAgc2Vjb25kcyA9IDA7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUmVzb2x2ZSBpbW1lZGlhdGVseSBpZiB0aGUgd2FpdCB0aW1lIGlzIG5vdCBncmVhdGVyIHRoYW4gMFxyXG4gICAgaWYgKHNlY29uZHMgPD0gMCkge1xyXG4gICAgICBpZiAodHlwZW9mIG9uRmluaXNoID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgb25GaW5pc2goKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIERlZmVycmVkLnJlc29sdmUoKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgY3VycmVudFRpbWUgPSAwO1xyXG4gICAgY29uc3QgdG90YWxUaW1lID0gc2Vjb25kcyAqIDEwMDA7IC8vIGNvbnZlcnQgdG8gbWlsbGlzZWNvbmRzXHJcblxyXG4gICAgLy8gRXhlY3V0YWJsZSB0byBwYXNzIHRvIERlZmVycmVkLCBtZWFudCB0byBiZSBydW4gaW4gYW4gdXBkYXRlIGxvb3BcclxuICAgIGNvbnN0IG9uVXBkYXRlID0gKHJlc29sdmUsIHJlamVjdCwgX2NhbmNlbCwgZGVsdGFUaW1lID0gMCkgPT4ge1xyXG4gICAgICBpZiAodHlwZW9mIGRlbHRhVGltZSAhPT0gJ251bWJlcicpIHtcclxuICAgICAgICBjb25zdCBlID0gbmV3IEVycm9yKFxyXG4gICAgICAgICAgYEludmFsaWQgcHJvcGVydHkgd2FpdCBkZWx0YVRpbWUuIERlbHRhVGltZSBtdXN0IGJlIGEgbnVtYmVyLmBcclxuICAgICAgICApO1xyXG4gICAgICAgIHJlamVjdChlKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIE1ha2Ugc3VyZSB0aW1lIGhhcyBwYXNzZWRcclxuICAgICAgaWYgKGRlbHRhVGltZSA9PT0gMCkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gU2lnbmFsIHByb2dyZXNzXHJcbiAgICAgIGN1cnJlbnRUaW1lICs9IGRlbHRhVGltZTtcclxuICAgICAgaWYgKGN1cnJlbnRUaW1lIDwgMCkge1xyXG4gICAgICAgIGN1cnJlbnRUaW1lID0gMDtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHR5cGVvZiBvblByb2dyZXNzID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgb25Qcm9ncmVzcyhNYXRoLm1pbihjdXJyZW50VGltZSAvIHRvdGFsVGltZSwgMSkpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBTaWduYWwgY29tcGxldGlvbiBvbmNlIHRpbWUgaXMgdXBcclxuICAgICAgaWYgKGN1cnJlbnRUaW1lID49IHRvdGFsVGltZSkge1xyXG4gICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gbmV3IERlZmVycmVkKG9uVXBkYXRlLCBvbkZpbmlzaCwgb25FcnJvciwgb25DYW5jZWwpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICAqIEdldCBhIHJhbmRvbSBmbG9hdCBudW1iZXIgYmV0d2VlbiBhIG1pbiAoaW5jbHVzaXZlKSBhbmQgbWF4IChleGNsdXNpdmUpIHZhbHVlXHJcbiAgICAqIEBwYXJhbSB7bnVtYmVyfSBtaW4gbWluaW11bSB2YWx1ZVxyXG4gICAgKiBAcGFyYW0ge251bWJlcn0gbWF4IG1heGltdW0gdmFsdWVcclxuICAgICogQHJldHVybnMge2Zsb2F0fVxyXG4gICAgKi9cclxuICBzdGF0aWMgZ2V0UmFuZG9tRmxvYXQobWluLCBtYXgpIHtcclxuICAgIHJldHVybiBNYXRoLnJhbmRvbSgpICogKG1heCAtIG1pbikgKyBtaW47XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgICogR2V0IGEgcmFuZG9tIGludGVnZXIgbnVtYmVyIGJldHdlZW4gYSBtaW4gKGluY2x1c2l2ZSkgYW5kIG1heCAoZXhjbHVzaXZlKSB2YWx1ZVxyXG4gICAgKiBAcGFyYW0ge251bWJlcn0gbWluIG1pbmltdW0gdmFsdWVcclxuICAgICogQHBhcmFtIHtudW1iZXJ9IG1heCBtYXhpbXVtIHZhbHVlXHJcbiAgICAqIEByZXR1cm5zIHtpbnRlZ2VyfVxyXG4gICAgKi9cclxuICBzdGF0aWMgZ2V0UmFuZG9tSW50KG1pbiwgbWF4KSB7XHJcbiAgICBtaW4gPSBNYXRoLmNlaWwobWluKTtcclxuICAgIG1heCA9IE1hdGguZmxvb3IobWF4KTtcclxuICAgIHJldHVybiBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAobWF4IC0gbWluKSkgKyBtaW47XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBVdGlscztcclxuIiwiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTBcbmNvbnN0IFJhZGlhblRvRGVncmVlID0gMTgwIC8gTWF0aC5QSTtcbmNvbnN0IERlZ3JlZVRvUmFkaWFuID0gTWF0aC5QSSAvIDE4MDtcblxuLyoqXG4gKiBBIGNvbGxlY3Rpb24gb2YgdXNlZnVsIG1hdGggZnVuY3Rpb25zLlxuICpcbiAqIEBoaWRlY29uc3RydWN0b3JcbiAqL1xuY2xhc3MgTWF0aFV0aWxzIHtcbiAgLyoqXG4gICAqIENvbnZlcnQgdGhlIGdpdmVuIGFuZ2xlIGZyb20gcmFkaWFucyB0byBkZWdyZWVzLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gcmFkaWFucyAtIEFuZ2xlIGluIHJhZGlhbnMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IC0gQW5nbGUgaW4gZGVncmVlcy5cbiAgICovXG4gIHN0YXRpYyB0b0RlZ3JlZXMocmFkaWFucykge1xuICAgIHJldHVybiByYWRpYW5zICogUmFkaWFuVG9EZWdyZWU7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydCB0aGUgZ2l2ZW4gYW5nbGUgZnJvbSBkZWdyZWVzIHRvIHJhZGlhbnMuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBkZWdyZWVzIC0gQW5nbGUgaW4gZGVncmVlcy5cbiAgICpcbiAgICogQHJldHVybnMge251bWJlcn0gLSBBbmdsZSBpbiByYWRpYW5zLlxuICAgKi9cbiAgc3RhdGljIHRvUmFkaWFucyhkZWdyZWVzKSB7XG4gICAgcmV0dXJuIGRlZ3JlZXMgKiBEZWdyZWVUb1JhZGlhbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBMaW5lYXJseSBpbnRlcnBvbGF0ZSBiZXR3ZWVuIHR3byB2YWx1ZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBmcm9tIC0gU3RhcnQgdmFsdWUuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB0byAtIFRhcmdldCB2YWx1ZS5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGZhY3RvciAtIDAtMSBhbW91bnQgdG8gaW50ZXJwb2xhdGUgYmV0d2VlbiBmcm9tIGFuZCB0by5cbiAgICpcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIHN0YXRpYyBsZXJwKGZyb20sIHRvLCBmYWN0b3IpIHtcbiAgICByZXR1cm4gZnJvbSArICh0byAtIGZyb20pICogZmFjdG9yO1xuICB9XG5cbiAgLyoqXG4gICAqIENsYW1wIGEgbnVtYmVyIGJldHdlZW4gMiB2YWx1ZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSAtIFZhbHVlIHRvIGNsYW1wLlxuICAgKiBAcGFyYW0ge251bWJlcn0gW21pbj0wXSAtIE1pbnVtdW0gdmFsdWUuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbbWF4PTFdIC0gTWF4aW11bSB2YWx1ZS5cbiAgICpcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIHN0YXRpYyBjbGFtcCh2YWx1ZSwgbWluID0gMCwgbWF4ID0gMSkge1xuICAgIHJldHVybiBNYXRoLm1heChtaW4sIE1hdGgubWluKHZhbHVlLCBtYXgpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGVzIHRoZSBjbG9zZXN0IHBvaW50IG9uIGEgZ2l2ZW4gMkQgbGluZSBzZWdlbWVudFxuICAgKiBmcm9tIGEgZ2l2ZW4gMkQgcG9pbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IGEgLSBGaXJzdCBwb2ludCBvbiBsaW5lIHNlZ21lbnQuXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IGIgLSBTZWNvbmQgcG9pbnQgb24gbGluZSBzZWdtZW50LlxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBwIC0gMkQgcG9pbnQuXG4gICAqXG4gICAqIEByZXR1cm5zIHtBcnJheS48bnVtYmVyPn1cbiAgICovXG4gIHN0YXRpYyBjbG9zZXN0UG9pbnRPbkxpbmUoYSwgYiwgcCkge1xuICAgIGNvbnN0IGRpc3RTcXIgPSBNYXRoVXRpbHMuZGlzdGFuY2VTcXVhcmVkKGEsIGIpO1xuXG4gICAgLy8gTGluZSBzZWdtZW50IGlzIGEgc2luZ2xlIHBvaW50XG4gICAgaWYgKGRpc3RTcXIgPT09IDApIHtcbiAgICAgIHJldHVybiBhO1xuICAgIH1cblxuICAgIGNvbnN0IHQgPVxuICAgICAgKChwWzBdIC0gYVswXSkgKiAoYlswXSAtIGFbMF0pICsgKHBbMV0gLSBhWzFdKSAqIChiWzFdIC0gYVsxXSkpIC8gZGlzdFNxcjtcblxuICAgIGxldCBwb2ludCA9IFsuLi5hXTtcbiAgICBpZiAodCA+IDEpIHtcbiAgICAgIHBvaW50ID0gWy4uLmJdO1xuICAgIH0gZWxzZSBpZiAodCA+IDApIHtcbiAgICAgIHBvaW50ID0gW2FbMF0gKyB0ICogKGJbMF0gLSBhWzBdKSwgYVsxXSArIHQgKiAoYlsxXSAtIGFbMV0pXTtcbiAgICB9XG5cbiAgICByZXR1cm4gcG9pbnQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgZGlzdGFuY2Ugc3F1YXJlZCBmb3IgdHdvIDJEIHBvaW50cy5cbiAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gYSAtIDJEIHBvaW50LlxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBiIC0gMkQgcG9pbnQuXG4gICAqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICBzdGF0aWMgZGlzdGFuY2VTcXVhcmVkKGEsIGIpIHtcbiAgICByZXR1cm4gKGFbMF0gLSBiWzBdKSAqIChhWzBdIC0gYlswXSkgKyAoYVsxXSAtIGJbMV0pICogKGFbMV0gLSBiWzFdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmlhbmd1bGF0ZXMgYSBzZXQgb2YgMkQgcG9pbnRzIHVzaW5nIGFuIGltcGxlbWVudGF0aW9uXG4gICAqIG9mIHRoZSBCb3d5ZXItV2F0c29uIGluY3JlbWVudGFsIERlbGF1bmF5IHRyaWFuZ3VsYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkuPEFycmF5LjxudW1iZXI+Pn0gdmVydGljZXMgLSBBcnJheSBvZiAyRCBwb2ludHMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtBcnJheS48QXJyYXk8bnVtYmVyPj59IC0gQXJyYXkgb2YgdHJpYW5nbGUgaW5kaWNlcy5cbiAgICovXG4gIHN0YXRpYyBnZXREZWxhdW5heVRyaWFuZ3VsYXRpb24odmVydGljZXMpIHtcbiAgICBpZiAoIXZlcnRpY2VzIHx8IHZlcnRpY2VzLmxlbmd0aCA8IDMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYENhbm5vdCBnZXQgZGVsYXVuYXkgdHJpYW5ndWxhdGlvbiBmb3IgcG9pbnRzICR7dmVydGljZXN9LiBJbnB1dCBtdXN0IGNvbnRhaW4gYXQgbGVhc3QgdGhyZWUgcG9pbnRzLmBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgbGV0IG1pblggPSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7XG4gICAgbGV0IG1pblkgPSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7XG4gICAgbGV0IG1heFggPSBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk7XG4gICAgbGV0IG1heFkgPSBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk7XG5cbiAgICB2ZXJ0aWNlcy5mb3JFYWNoKHYgPT4ge1xuICAgICAgbWluWCA9IHZbMF0gPCBtaW5YID8gdlswXSA6IG1pblg7XG4gICAgICBtaW5ZID0gdlsxXSA8IG1pblkgPyB2WzFdIDogbWluWTtcbiAgICAgIG1heFggPSB2WzBdID4gbWF4WCA/IHZbMF0gOiBtYXhYO1xuICAgICAgbWF4WSA9IHZbMV0gPiBtYXhZID8gdlsxXSA6IG1heFk7XG4gICAgfSk7XG5cbiAgICBjb25zdCBkWCA9IG1heFggLSBtaW5YO1xuICAgIGNvbnN0IGRZID0gbWF4WSAtIG1pblk7XG4gICAgY29uc3QgbWlkWCA9IChtaW5YICsgbWF4WCkgLyAyO1xuICAgIGNvbnN0IG1pZFkgPSAobWluWSArIG1heFkpIC8gMjtcbiAgICBjb25zdCBkTWF4ID0gZFggPiBkWSA/IGRYIDogZFk7XG5cbiAgICBjb25zdCBzdXBlckluZGljZXMgPSBbXG4gICAgICB2ZXJ0aWNlcy5sZW5ndGgsXG4gICAgICB2ZXJ0aWNlcy5sZW5ndGggKyAxLFxuICAgICAgdmVydGljZXMubGVuZ3RoICsgMixcbiAgICBdO1xuXG4gICAgY29uc3QgdmVydHNXaXRoU3VwZXIgPSBbXG4gICAgICAuLi52ZXJ0aWNlcyxcbiAgICAgIFttaWRYIC0gMjAgKiBkTWF4LCBtaWRZIC0gZE1heF0sXG4gICAgICBbbWlkWCwgbWlkWSArIDIwICogZE1heF0sXG4gICAgICBbbWlkWCArIDIwICogZE1heCwgbWlkWSAtIGRNYXhdLFxuICAgIF07XG5cbiAgICBjb25zdCBzdXBlclNvcnRlZEluZGljZXMgPSBNYXRoVXRpbHMuc29ydFBvaW50c0NDVyhcbiAgICAgIHN1cGVySW5kaWNlcyxcbiAgICAgIHZlcnRzV2l0aFN1cGVyXG4gICAgKTtcblxuICAgIGNvbnN0IHN1cGVyVHJpYW5nbGUgPSB7XG4gICAgICBpbmRpY2VzOiBzdXBlclNvcnRlZEluZGljZXMsXG4gICAgICBlZGdlczogW1xuICAgICAgICBbc3VwZXJTb3J0ZWRJbmRpY2VzWzBdLCBzdXBlclNvcnRlZEluZGljZXNbMV1dLFxuICAgICAgICBbc3VwZXJTb3J0ZWRJbmRpY2VzWzFdLCBzdXBlclNvcnRlZEluZGljZXNbMl1dLFxuICAgICAgICBbc3VwZXJTb3J0ZWRJbmRpY2VzWzJdLCBzdXBlclNvcnRlZEluZGljZXNbMF1dLFxuICAgICAgXSxcbiAgICB9O1xuXG4gICAgY29uc3QgdHJpYW5nbGVzID0gW3N1cGVyVHJpYW5nbGVdO1xuXG4gICAgdmVydHNXaXRoU3VwZXIuZm9yRWFjaCgobmV3VmVydCwgbmV3SW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IGludmFsaWRUcmlhbmdsZXMgPSBbXTtcbiAgICAgIHRyaWFuZ2xlcy5mb3JFYWNoKHRyaWFuZ2xlID0+IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIE1hdGhVdGlscy5pc1BvaW50SW5DaXJjdW1DaXJjbGUoXG4gICAgICAgICAgICB2ZXJ0c1dpdGhTdXBlclt0cmlhbmdsZS5pbmRpY2VzWzBdXSxcbiAgICAgICAgICAgIHZlcnRzV2l0aFN1cGVyW3RyaWFuZ2xlLmluZGljZXNbMV1dLFxuICAgICAgICAgICAgdmVydHNXaXRoU3VwZXJbdHJpYW5nbGUuaW5kaWNlc1syXV0sXG4gICAgICAgICAgICBuZXdWZXJ0XG4gICAgICAgICAgKVxuICAgICAgICApIHtcbiAgICAgICAgICBpbnZhbGlkVHJpYW5nbGVzLnB1c2godHJpYW5nbGUpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgYm91bmRpbmdQb2x5ID0gW107XG4gICAgICBpbnZhbGlkVHJpYW5nbGVzLmZvckVhY2godHJpYW5nbGUgPT4ge1xuICAgICAgICB0cmlhbmdsZS5lZGdlcy5mb3JFYWNoKGVkZ2UgPT4ge1xuICAgICAgICAgIGxldCBjb3VudCA9IDA7XG4gICAgICAgICAgaW52YWxpZFRyaWFuZ2xlcy5mb3JFYWNoKG90aGVyVHJpYW5nbGUgPT4ge1xuICAgICAgICAgICAgaWYgKHRyaWFuZ2xlICE9PSBvdGhlclRyaWFuZ2xlKSB7XG4gICAgICAgICAgICAgIG90aGVyVHJpYW5nbGUuZWRnZXMuZm9yRWFjaChvdGhlckVkZ2UgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgIChlZGdlWzBdID09PSBvdGhlckVkZ2VbMF0gJiYgZWRnZVsxXSA9PT0gb3RoZXJFZGdlWzFdKSB8fFxuICAgICAgICAgICAgICAgICAgKGVkZ2VbMV0gPT09IG90aGVyRWRnZVswXSAmJiBlZGdlWzBdID09PSBvdGhlckVkZ2VbMV0pXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICBjb3VudCArPSAxO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaWYgKGNvdW50ID09PSAwKSBib3VuZGluZ1BvbHkucHVzaChlZGdlKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgaW52YWxpZFRyaWFuZ2xlcy5mb3JFYWNoKHRyaWFuZ2xlID0+IHtcbiAgICAgICAgdHJpYW5nbGVzLnNwbGljZSh0cmlhbmdsZXMuaW5kZXhPZih0cmlhbmdsZSksIDEpO1xuICAgICAgfSk7XG5cbiAgICAgIGJvdW5kaW5nUG9seS5mb3JFYWNoKGVkZ2UgPT4ge1xuICAgICAgICBjb25zdCBzb3J0ZWRJbmRpY2VzID0gTWF0aFV0aWxzLnNvcnRQb2ludHNDQ1coXG4gICAgICAgICAgW2VkZ2VbMF0sIGVkZ2VbMV0sIG5ld0luZGV4XSxcbiAgICAgICAgICB2ZXJ0c1dpdGhTdXBlclxuICAgICAgICApO1xuXG4gICAgICAgIHRyaWFuZ2xlcy5wdXNoKHtcbiAgICAgICAgICBpbmRpY2VzOiBzb3J0ZWRJbmRpY2VzLFxuICAgICAgICAgIGVkZ2VzOiBbXG4gICAgICAgICAgICBbc29ydGVkSW5kaWNlc1swXSwgc29ydGVkSW5kaWNlc1sxXV0sXG4gICAgICAgICAgICBbc29ydGVkSW5kaWNlc1sxXSwgc29ydGVkSW5kaWNlc1syXV0sXG4gICAgICAgICAgICBbc29ydGVkSW5kaWNlc1syXSwgc29ydGVkSW5kaWNlc1swXV0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGNvbnN0IHRyaWFuZ2xlc1RvUmVtb3ZlID0gW107XG4gICAgdHJpYW5nbGVzLmZvckVhY2godHJpYW5nbGUgPT4ge1xuICAgICAgdHJpYW5nbGUuaW5kaWNlcy5mb3JFYWNoKGluZGV4ID0+IHtcbiAgICAgICAgaWYgKHN1cGVySW5kaWNlcy5pbmNsdWRlcyhpbmRleCkpIHtcbiAgICAgICAgICB0cmlhbmdsZXNUb1JlbW92ZS5wdXNoKHRyaWFuZ2xlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB0cmlhbmdsZXNUb1JlbW92ZS5mb3JFYWNoKHRyaWFuZ2xlID0+IHtcbiAgICAgIGNvbnN0IGluZGV4ID0gdHJpYW5nbGVzLmluZGV4T2YodHJpYW5nbGUpO1xuICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICB0cmlhbmdsZXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiB0cmlhbmdsZXMubWFwKHRyaWFuZ2xlID0+IHRyaWFuZ2xlLmluZGljZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgaWYgYSBnaXZlbiAyRCBwb2ludCBpcyB3aXRoaW4gdGhlIGNpY3J1bWNpcmNsZVxuICAgKiBkZWZpbmVkIGJ5IHRocmVlIDJEIHBvaW50cy4gVGhlIHRyaWFuZ2xlIHBvaW50cyBtdXN0IGJlIGluXG4gICAqIGNvdW50ZXItY2xvY2t3aXNlIG9yZGVyIGEgLT4gYiAtPiBjLlxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBhIC0gRmlyc3QgdHJpYW5nbGUgcG9pbnQuXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IGIgLSBTZWNvbmQgdHJpYW5nbGUgcG9pbnQuXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IGMgLSBUaGlyZCB0cmlhbmdsZSBwb2ludC5cbiAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gcCAtIDJEIHBvaW50LlxuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIHN0YXRpYyBpc1BvaW50SW5DaXJjdW1DaXJjbGUoYSwgYiwgYywgcCkge1xuICAgIGNvbnN0IGF4ID0gYVswXSAtIHBbMF07XG4gICAgY29uc3QgYXkgPSBhWzFdIC0gcFsxXTtcbiAgICBjb25zdCBieCA9IGJbMF0gLSBwWzBdO1xuICAgIGNvbnN0IGJ5ID0gYlsxXSAtIHBbMV07XG4gICAgY29uc3QgY3ggPSBjWzBdIC0gcFswXTtcbiAgICBjb25zdCBjeSA9IGNbMV0gLSBwWzFdO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIChheCAqIGF4ICsgYXkgKiBheSkgKiAoYnggKiBjeSAtIGN4ICogYnkpIC1cbiAgICAgICAgKGJ4ICogYnggKyBieSAqIGJ5KSAqIChheCAqIGN5IC0gY3ggKiBheSkgK1xuICAgICAgICAoY3ggKiBjeCArIGN5ICogY3kpICogKGF4ICogYnkgLSBieCAqIGF5KSA+XG4gICAgICAwXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIGlmIGEgZ2l2ZW4gMkQgcG9pbnQgaXMgd2l0aGluIGEgZ2l2ZW4gdHJpYW5nbGUuXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IGEgLSBGaXJzdCB0cmlhbmdsZSBwb2ludC5cbiAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gYiAtIFNlY29uZCB0cmlhbmdsZSBwb2ludC5cbiAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gYyAtIFRoaXJkIHRyaWFuZ2xlIHBvaW50LlxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBwIC0gMkQgcG9pbnQuXG4gICAqXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgc3RhdGljIGlzUG9pbnRJblRyaWFuZ2xlKGEsIGIsIGMsIHApIHtcbiAgICBjb25zdCBkZW5vbSA9IChiWzFdIC0gY1sxXSkgKiAoYVswXSAtIGNbMF0pICsgKGNbMF0gLSBiWzBdKSAqIChhWzFdIC0gY1sxXSk7XG4gICAgY29uc3QgYVZhbCA9XG4gICAgICAoKGJbMV0gLSBjWzFdKSAqIChwWzBdIC0gY1swXSkgKyAoY1swXSAtIGJbMF0pICogKHBbMV0gLSBjWzFdKSkgLyBkZW5vbTtcbiAgICBjb25zdCBiVmFsID1cbiAgICAgICgoY1sxXSAtIGFbMV0pICogKHBbMF0gLSBjWzBdKSArIChhWzBdIC0gY1swXSkgKiAocFsxXSAtIGNbMV0pKSAvIGRlbm9tO1xuICAgIGNvbnN0IGNWYWwgPSAxIC0gYVZhbCAtIGJWYWw7XG5cbiAgICByZXR1cm4gKFxuICAgICAgYVZhbCA+PSAwICYmIGFWYWwgPD0gMSAmJiBiVmFsID49IDAgJiYgYlZhbCA8PSAxICYmIGNWYWwgPj0gMCAmJiBjVmFsIDw9IDFcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHNvcnRlZCBpbmRpY2VzIG9mIGEgZ2l2ZW4gc2V0IG9mIDJEIHBvaW50cyBpblxuICAgKiBjb3VudGVyLWNsb2Nrd2lzZSBvcmRlci5cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gaW5kaWNlcyAtIExpc3Qgb2YgaW5kaWNlcy5cbiAgICogQHBhcmFtIHtBcnJheS48QXJyYXkuPG51bWJlcj4+fSB2ZXJ0aWNlcyAtIExpc3Qgb2YgMkQgcG9pbnRzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7QXJyYXkuPEFycmF5LjxudW1iZXI+Pn0gLSBMaXN0IG9mIHNvcnRlZCBpbmRpY2VzLlxuICAgKi9cbiAgc3RhdGljIHNvcnRQb2ludHNDQ1coaW5kaWNlcywgdmVydGljZXMpIHtcbiAgICBjb25zdCBjZW50cm9pZCA9IFswLCAwXTtcbiAgICBpbmRpY2VzLmZvckVhY2goaW5kZXggPT4ge1xuICAgICAgY2VudHJvaWRbMF0gKz0gdmVydGljZXNbaW5kZXhdWzBdO1xuICAgICAgY2VudHJvaWRbMV0gKz0gdmVydGljZXNbaW5kZXhdWzFdO1xuICAgIH0pO1xuICAgIGNlbnRyb2lkWzBdIC89IGluZGljZXMubGVuZ3RoO1xuICAgIGNlbnRyb2lkWzFdIC89IGluZGljZXMubGVuZ3RoO1xuXG4gICAgaW5kaWNlcy5zb3J0KChhLCBiKSA9PiB7XG4gICAgICBjb25zdCBiVmFsID0gTWF0aC5hdGFuMihcbiAgICAgICAgdmVydGljZXNbYl1bMV0gLSBjZW50cm9pZFsxXSxcbiAgICAgICAgdmVydGljZXNbYl1bMF0gLSBjZW50cm9pZFswXVxuICAgICAgKTtcbiAgICAgIGNvbnN0IGFWYWwgPSBNYXRoLmF0YW4yKFxuICAgICAgICB2ZXJ0aWNlc1thXVsxXSAtIGNlbnRyb2lkWzFdLFxuICAgICAgICB2ZXJ0aWNlc1thXVswXSAtIGNlbnRyb2lkWzBdXG4gICAgICApO1xuXG4gICAgICByZXR1cm4gYVZhbCAtIGJWYWw7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gaW5kaWNlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWNsdWF0ZXMgdGhlIGFyZWEgb2YgYSB0cmlhbmdsZVxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBhIC0gRmlyc3QgdHJpYW5nbGUgcG9pbnQuXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IGIgLSBTZWNvbmQgdHJpYW5nbGUgcG9pbnQuXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IGMgLSBUaGlyZCB0cmlhbmdsZSBwb2ludC5cbiAgICpcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIHN0YXRpYyB0cmlhbmdsZUFyZWEoYSwgYiwgYykge1xuICAgIHJldHVybiBNYXRoLmFicyhcbiAgICAgIChhWzBdICogKGJbMV0gLSBjWzFdKSArIGJbMF0gKiAoY1sxXSAtIGFbMV0pICsgY1swXSAqIChhWzFdIC0gYlsxXSkpICogMC41XG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIG1hZ25pdHVkZSBvZiBhIGdpdmVuIHZlY3RvciBhcnJheS5cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gdmVjdG9yIC0gQXJyYXkgY29uc2lzdGluZyBvZiBudW1iZXJzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgc3RhdGljIGdldFZlY3Rvck1hZ25pdHVkZSh2ZWN0b3IpIHtcbiAgICBpZiAoISh2ZWN0b3IgaW5zdGFuY2VvZiBBcnJheSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYENhbm5vdCBnZXQgbWFnbml0dWRlIGZvciB2ZWN0b3IgJHt2ZWN0b3J9LiBJbnB1dCBtdXN0IGJlIGFuIEFycmF5IG51bWJlcnMuYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCByZWR1Y2VyID0gKGFjY3VtdWxhdG9yLCBjdXJyZW50VmFsdWUpID0+IHtcbiAgICAgIGlmICh0eXBlb2YgY3VycmVudFZhbHVlICE9PSAnbnVtYmVyJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYENhbm5vdCBnZXQgbWFnbml0dWRlIGZvciB2ZWN0b3IgJHt2ZWN0b3J9LiBBbGwgaXRlbXMgaW4gdGhlIGlucHV0IEFycmF5IG11c3QgYmUgbnVtYmVycy5gXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhY2N1bXVsYXRvciArIChjdXJyZW50VmFsdWUgKiogMik7XG4gICAgfVxuXG4gICAgcmV0dXJuIE1hdGguc3FydCh2ZWN0b3IucmVkdWNlKHJlZHVjZXIsIDApKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIGRvdCBwcm9kdWN0IGJldHdlZW4gdHdvIHZlY3RvcnMuXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IHZlY3RvckEgLSBBcnJheSBjb25zaXN0aW5nIG9mIG51bWJlcnMuXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IHZlY3RvckIgLSBBcnJheSBjb25zaXN0aW5nIG9mIG51bWJlcnMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICBzdGF0aWMgZ2V0RG90UHJvZHVjdCh2ZWN0b3JBLCB2ZWN0b3JCKSB7XG4gICAgaWYgKCEodmVjdG9yQSBpbnN0YW5jZW9mIEFycmF5KSB8fCAhKHZlY3RvckIgaW5zdGFuY2VvZiBBcnJheSkgfHwgdmVjdG9yQS5sZW5ndGggIT09IHZlY3RvckIubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBnZXQgZG90IHByb2R1Y3QgYmV0d2VlbiAke3ZlY3RvckF9IGFuZCAke3ZlY3RvckJ9LiBJbnB1dHMgbXVzdCBiZSB2ZWN0b3JzIG9mIHRoZSBzYW1lIGxlbmd0aC5gKTtcbiAgICB9XG5cbiAgICBsZXQgcmVzdWx0ID0gMDtcbiAgICB2ZWN0b3JBLmZvckVhY2goKHZhbHVlQSwgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlQiA9IHZlY3RvckJbaW5kZXhdO1xuXG4gICAgICBpZiAodHlwZW9mIHZhbHVlQSAhPT0gJ251bWJlcicgfHwgdHlwZW9mIHZhbHVlQiAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZ2V0IGRvdCBwcm9kdWN0IGJldHdlZW4gJHt2ZWN0b3JBfSBhbmQgJHt2ZWN0b3JCfS4gVmVjdG9ycyBtdXN0IG9ubHkgY29uc2lzdCBvZiBudW1lcmljIHZhbHVlcy5gKTtcbiAgICAgIH1cblxuICAgICAgcmVzdWx0ICs9IHZhbHVlQSAqIHZhbHVlQjtcbiAgICB9KTtcblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBhbmdsZSBpbiByYWRpYW5zIGJldHdlZW4gdmVjdG9yQSBhbmQgdmVjdG9yQi5cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gdmVjdG9yQSAtIEFycmF5IGNvbnNpc3Rpbmcgb2YgbnVtYmVycy5cbiAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gdmVjdG9yQiAtIEFycmF5IGNvbnNpc3Rpbmcgb2YgbnVtYmVycy5cbiAgICpcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIHN0YXRpYyBnZXRBbmdsZUJldHdlZW4odmVjdG9yQSwgdmVjdG9yQikge1xuICAgIGNvbnN0IG5vcm1hbEEgPSB0aGlzLm5vcm1hbGl6ZVZlY3RvcihbLi4udmVjdG9yQV0pO1xuICAgIGNvbnN0IG5vcm1hbEIgPSB0aGlzLm5vcm1hbGl6ZVZlY3RvcihbLi4udmVjdG9yQl0pO1xuICAgIGNvbnN0IGRvdCA9IHRoaXMuZ2V0RG90UHJvZHVjdChub3JtYWxBLCBub3JtYWxCKTtcblxuICAgIHJldHVybiBNYXRoLmFjb3ModGhpcy5jbGFtcChkb3QsIC0xLCAxKSk7XG4gIH1cblxuICAvKipcbiAgICogTXVsdGlwbHkgYSAzeDMgcm90YXRpb24gbWF0cml4IHdpdGggYSB2ZWN0b3IzLlxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSB2ZWN0b3IzIC0gQXJyYXkgY29uc2lzdGluZyBvZiAzIG51bWJlcnMgcmVwcmVzZW50aW5nXG4gICAqIGEgZGlyZWN0aW9uIHZlY3Rvci5cbiAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gbWF0cml4MyAtIEFuIGFycmF5IG9mIDkgbnVtYmVycyByZXByZXNlbnRpbmcgYSByb3dcbiAgICogbWFqb3Igcm90YXRpb24gbWF0cml4LlxuICAgKlxuICAgKiBAcmV0dXJucyB7QXJyYXkuPG51bWJlcj59IC0gQW4gYXJyYXkgb2YgMyBudW1iZXJzIHJlcHJlc2VudGluZyB0aGUgbmV3IGRpcmVjdGlvblxuICAgKiBvZiB0aGUgdmVjdG9yLlxuICAgKi9cbiAgc3RhdGljIHJvdGF0ZVZlY3Rvcih2ZWN0b3IzLCBtYXRyaXgzKSB7XG4gICAgaWYgKCEodmVjdG9yMyBpbnN0YW5jZW9mIEFycmF5KVxuICAgICAgfHwgdmVjdG9yMy5sZW5ndGggIT09IDNcbiAgICAgIHx8ICF2ZWN0b3IzLmV2ZXJ5KHYgPT4gdHlwZW9mIHYgPT09ICdudW1iZXInKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQ2Fubm90IHJvdGF0ZSB2ZWN0b3IgJHt2ZWN0b3IzfSBieSByb3RhdGlvbiBtYXRyaXggJHttYXRyaXgzfS4gSW5wdXQgdmVjdG9yIG11c3QgYmUgYW4gYXJyYXkgb2YgMyBudW1iZXJzLmBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKCEobWF0cml4MyBpbnN0YW5jZW9mIEFycmF5KVxuICAgICAgfHwgbWF0cml4My5sZW5ndGggIT09IDlcbiAgICAgIHx8ICFtYXRyaXgzLmV2ZXJ5KHYgPT4gdHlwZW9mIHYgPT09ICdudW1iZXInKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQ2Fubm90IHJvdGF0ZSB2ZWN0b3IgJHt2ZWN0b3IzfSBieSByb3RhdGlvbiBtYXRyaXggJHttYXRyaXgzfS4gSW5wdXQgbWF0cml4MyBtdXN0IGJlIGFuIGFycmF5IG9mIDkgbnVtYmVycy5gXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHggPSBtYXRyaXgzWzBdICogdmVjdG9yM1swXVxuICAgICAgKyBtYXRyaXgzWzNdICogdmVjdG9yM1sxXVxuICAgICAgKyBtYXRyaXgzWzZdICogdmVjdG9yM1syXTtcbiAgICBjb25zdCB5ID0gbWF0cml4M1sxXSAqIHZlY3RvcjNbMF1cbiAgICAgICsgbWF0cml4M1s0XSAqIHZlY3RvcjNbMV1cbiAgICAgICsgbWF0cml4M1s3XSAqIHZlY3RvcjNbMl07XG4gICAgY29uc3QgeiA9IG1hdHJpeDNbMl0gKiB2ZWN0b3IzWzBdXG4gICAgICArIG1hdHJpeDNbNV0gKiB2ZWN0b3IzWzFdXG4gICAgICArIG1hdHJpeDNbOF0gKiB2ZWN0b3IzWzJdO1xuXG4gICAgcmV0dXJuIFt4LCB5LCB6XTtcbiAgfVxuXG4gIC8qKlxuICAgKiBOb3JtYWxpemUgYSBnaXZlbiB2ZWN0b3IgYXJyYXkuXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IHZlY3RvciAtIEFycmF5IGNvbnNpc3Rpbmcgb2YgbnVtYmVycy5cbiAgICpcbiAgICogQHJldHVybnMge0FycmF5LjxudW1iZXI+fSBUaGUgb3JpZ2luYWwgdmVjdG9yIHdpdGggbm9ybWFsaXplZCB2YWx1ZXMsIGZvciBjaGFpbmluZy5cbiAgICovXG4gIHN0YXRpYyBub3JtYWxpemVWZWN0b3IodmVjdG9yKSB7XG4gICAgY29uc3QgbWFnbml0dWRlID0gdGhpcy5nZXRWZWN0b3JNYWduaXR1ZGUodmVjdG9yKTtcblxuICAgIGlmIChtYWduaXR1ZGUgPT09IDApIHtcbiAgICAgIHZlY3Rvci5maWxsKDApXG4gICAgfSBlbHNlIHtcbiAgICAgIHZlY3Rvci5mb3JFYWNoKCh2YWx1ZSwgaW5kZXgpID0+IHtcbiAgICAgICAgdmVjdG9yW2luZGV4XSA9IHZhbHVlIC8gbWFnbml0dWRlO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZlY3RvcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHRyYWN0IHRoZSAzeDMgcm90YXRpb24gbWF0cml4IGZyb20gYSBnaXZlbiA0eDQgdHJhbnNmb3JtYXRpb24gbWF0cml4LlxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBtYXRyaXg0IC0gQW4gYXJyYXkgb2YgMTYgbnVtYmVycyByZXByZXNlbnRpbmcgYSByb3dcbiAgICogbWFqb3IgdHJhbnNmb3JtYXRpb24gbWF0cml4LlxuICAgKlxuICAgKiBAcmV0dXJucyB7QXJyYXkuPG51bWJlcj59IC0gQW4gYXJyYXkgb2YgOSBudW1iZXJzIHJlcHJlc2VudGluZyBhIHJvdyBtYWpvclxuICAgKiByb3RhdGlvbiBtYXRyaXguXG4gICAqL1xuICBzdGF0aWMgZ2V0Um90YXRpb25NYXRyaXgobWF0cml4NCkge1xuICAgIGlmICghKG1hdHJpeDQgaW5zdGFuY2VvZiBBcnJheSlcbiAgICAgIHx8IG1hdHJpeDQubGVuZ3RoICE9PSAxNlxuICAgICAgfHwgIW1hdHJpeDQuZXZlcnkodiA9PiB0eXBlb2YgdiA9PT0gJ251bWJlcicpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBDYW5ub3QgY29udmVydCBtYXRyaXggJHttYXRyaXg0fSB0byBhIHJvdGF0aW9uIG1hdHJpeC4gSW5wdXQgbWF0cml4IG11c3QgYmUgYW4gYXJyYXkgb2YgMTYgbnVtYmVycy5gXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIEV4dHJhY3Qgc2NhbGVcbiAgICBjb25zdCBzY2FsZVggPSAxIC8gKHRoaXMuZ2V0VmVjdG9yTWFnbml0dWRlKG1hdHJpeDQuc2xpY2UoMCwgNCkpIHx8IDEpO1xuICAgIGNvbnN0IHNjYWxlWSA9IDEgLyAodGhpcy5nZXRWZWN0b3JNYWduaXR1ZGUobWF0cml4NC5zbGljZSg0LCA4KSkgfHwgMSk7XG4gICAgY29uc3Qgc2NhbGVaID0gMSAvICh0aGlzLmdldFZlY3Rvck1hZ25pdHVkZShtYXRyaXg0LnNsaWNlKDgsIDEyKSkgfHwgMSk7XG5cbiAgICByZXR1cm4gW1xuICAgICAgbWF0cml4NFswXSAqIHNjYWxlWCwgbWF0cml4NFsxXSAqIHNjYWxlWCwgbWF0cml4NFsyXSAqIHNjYWxlWCxcbiAgICAgIG1hdHJpeDRbNF0gKiBzY2FsZVksIG1hdHJpeDRbNV0gKiBzY2FsZVksIG1hdHJpeDRbNl0gKiBzY2FsZVksXG4gICAgICBtYXRyaXg0WzhdICogc2NhbGVaLCBtYXRyaXg0WzldICogc2NhbGVaLCBtYXRyaXg0WzEwXSAqIHNjYWxlWlxuICAgIF07XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIHNwaGVyaWNhbCBjb29yZGluYXRlcyBvZiB0aGUgZ2l2ZW4gY2FydGVzaWFuXG4gICAqIHh5eiBjb29yZGluYXRlcy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHggLSBQb3NpdGlvbiBhbG9uZyB0aGUgeCBheGlzLlxuICAgKiBAcGFyYW0ge251bWJlcn0geSAtIFBvc2l0aW9uIGFsb25nIHRoZSB5IGF4aXMuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB6IC0gUG9zaXRpb24gYWxvbmcgdGhlIHogYXhpcy5cbiAgICpcbiAgICogQHJldHVybnMge0FycmF5LjxudW1iZXI+fSAtIEFuIGFycmF5IGNvbnNpc3Rpbmcgb2YgdGhyZWUgbnVtYmVyZXMgd2hlcmUgaW5kZXhcbiAgICogMCByZXByZXNlbnRzIHRoZSByYWRpdXMsIGluZGV4IDEgcmVwcmVzZW50cyB0aGUgdmVydGljYWwvcG9sYXIgYW5nbGUgaW4gcmFkaWFuc1xuICAgKiBhbmQgaW5kZXggMiByZXByZXNlbnRzIHRoZSBob3Jpem9udGFsL2F6aW11dGhhbCBhbmdsZSBpbiByYWRpYW5zLlxuICAgKi9cbiAgc3RhdGljIGNhcnRlc2lhblRvU3BoZXJpY2FsKHgsIHksIHopIHtcbiAgICBjb25zdCByID0gdGhpcy5nZXRWZWN0b3JNYWduaXR1ZGUoW3gsIHksIHpdKTtcblxuICAgIC8vIFJldHVybiBpZGVudGl0eSBpZiB0aGUgdmVjdG9yIGhhcyBubyBsZW5ndGhcbiAgICBpZiAociA9PT0gMCkge1xuICAgICAgcmV0dXJuIFswLCAwLCAwXTtcbiAgICB9XG5cbiAgICByZXR1cm4gW1xuICAgICAgcixcbiAgICAgIE1hdGguYWNvcyh0aGlzLmNsYW1wKHkgLyByLCAtIDEsIDEpKSxcbiAgICAgIE1hdGguYXRhbjIoeCwgeiksXG4gICAgXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFkdWFsbHkgY2hhbmdlIGEgdmFsdWUgb2YgYSBudW1lcmljIHByb3BlcnR5IHRvd2FyZHMgYSBnb2FsIG92ZXIgdGltZSB1c2luZ1xuICAgKiBhIGNyaXRpY2FsbHkgZGFtcGVkIHNwcmluZyBmdW5jdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGN1cnJlbnRWYWx1ZSAtIFRoZSBzdGFydGluZyB2YWx1ZS5cbiAgICogQHBhcmFtIHtudW1iZXJ9IHRhcmdldFZhbHVlLSBUaGUgZ29hbCB2YWx1ZS5cbiAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gW3ZhbHVlU3RvcmUgPSBbMCwgMF1dIC0gQW4gQXJyYXkgY29uc2lzdGluZyBvZiB0d29cbiAgICogbnVtYmVycyB3aGVyZSB0aGUgZmlyc3QgbnVtYmVyIGhvbGRzIHRoZSByZXN1bHQgdmFsdWUgYW5kIHRoZSBzZWNvbmQgaG9sZHNcbiAgICogdGhlIHZlbG9jaXR5IHRoYXQgcmVzdWx0ZWQgaW4gdGhhdCB2YWx1ZS4gVGhlIHNhbWUgYXJyYXkgc2hvdWxkIGJlIHByb3ZpZGVkXG4gICAqIHdpdGggZWFjaCBjYWxsIHRvIHRoaXMgZnVuY3Rpb24uXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbZGVsdGFUaW1lID0gMWUtN10gLSBUaGUgdGltZSBzaW5jZSB0aGUgbGFzdCBjYWxsIHRvIHRoaXMgZnVuY3Rpb25cbiAgICogaW4gc2Vjb25kcy5cbiAgICogQHBhcmFtIHtudW1iZXJ9IFtzbW9vdGhUaW1lID0gMC4zXSAtIFRoZSBhcHByb3hpbWF0ZSBhbW91bnQgb2YgdGltZSBpbiBzZWNvbmRzXG4gICAqIGl0IHNob3VsZCB0YWtlIHRvIHJlYWNoIHRoZSB0YXJnZXQgdmFsdWUuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbbWF4U3BlZWQgPSAxZTddIC0gQSBjbGFtcGluZyB2YWx1ZSBmb3IgdGhlIG1heGltdW0gc3BlZWQgdGhlXG4gICAqIHZhbHVlIGNhbiBjaGFuZ2UuXG4gICAqXG4gICAqIEByZXR1cm5zIHtBcnJheS48bnVtYmVyPn0gLSBUaGUgdmFsdWVTdG9yZSBhcnJheS5cbiAgICovXG4gIHN0YXRpYyBkYW1wVmFsdWUoXG4gICAgY3VycmVudFZhbHVlLFxuICAgIHRhcmdldFZhbHVlLFxuICAgIHZhbHVlU3RvcmUgPSBbMCwgMF0sXG4gICAgZGVsdGFUaW1lID0gMWUtNyxcbiAgICBzbW9vdGhUaW1lID0gMC4zLFxuICAgIG1heFNwZWVkID0gMWU3XG4gICkge1xuICAgIHNtb290aFRpbWUgPSBNYXRoLm1heCgwLjAwMDEsIHNtb290aFRpbWUpO1xuICAgIGRlbHRhVGltZSA9IE1hdGgubWF4KDFlLTcsIGRlbHRhVGltZSk7XG5cbiAgICAvLyBGaW5kIHRoZSBkZWx0YSBiZXR3ZWVuIHZhbHVlcyBhbmQgdXNlIGl0IHRvIGVzdGltYXRlIHRoZSBwcmV2aW91cyB2YWx1ZVxuICAgIGNvbnN0IGNsYW1wVGltZSA9IG1heFNwZWVkICogc21vb3RoVGltZTtcbiAgICBjb25zdCBkZWx0YVZhbHVlID0gY3VycmVudFZhbHVlIC0gdGFyZ2V0VmFsdWU7XG4gICAgY29uc3QgY2xhbXBEZWx0YVZhbHVlID0gdGhpcy5jbGFtcChkZWx0YVZhbHVlLCAtY2xhbXBUaW1lLCBjbGFtcFRpbWUpO1xuICAgIGNvbnN0IGxhc3RWYWx1ZSA9IGN1cnJlbnRWYWx1ZSAtIGNsYW1wRGVsdGFWYWx1ZTtcblxuICAgIC8vIENhbGN1bGF0ZSBkYW1waW5nIGZhY3RvcnNcbiAgICBjb25zdCBkMSA9IDIgLyBzbW9vdGhUaW1lO1xuICAgIGNvbnN0IGQyID0gZDEgKiBkZWx0YVRpbWU7XG4gICAgY29uc3QgZDMgPSAxIC8gKDEgKyBkMiArIDAuNSAqIGQyICoqIDIgKyAwLjI1ICogZDIgKiogMyk7XG4gICAgY29uc3QgZDQgPSAodmFsdWVTdG9yZVsxXSArIGQxICogY2xhbXBEZWx0YVZhbHVlKSAqIGRlbHRhVGltZTtcblxuICAgIC8vIERhbXAgdGhlIHRhcmdldCB2YWx1ZSBhbmQgdXBkYXRlIHRoZSB2ZWxvY2l0eVxuICAgIHZhbHVlU3RvcmVbMF0gPSBsYXN0VmFsdWUgKyAoY2xhbXBEZWx0YVZhbHVlICsgZDQpICogZDM7XG4gICAgdmFsdWVTdG9yZVsxXSA9ICh2YWx1ZVN0b3JlWzFdIC0gZDEgKiBkNCkgKiBkMztcblxuICAgIC8vIFByZXZlbnQgb3ZlcnNob290aW5nXG4gICAgaWYgKHRhcmdldFZhbHVlIC0gY3VycmVudFZhbHVlID4gMCA9PT0gdmFsdWVTdG9yZVswXSA+IHRhcmdldFZhbHVlKSB7XG4gICAgICB2YWx1ZVN0b3JlWzBdID0gdGFyZ2V0VmFsdWU7XG4gICAgICB2YWx1ZVN0b3JlWzFdID0gKHZhbHVlU3RvcmVbMF0gLSB0YXJnZXRWYWx1ZSkgLyBkZWx0YVRpbWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlU3RvcmU7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTWF0aFV0aWxzO1xuIiwiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTBcbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gRWFzaW5nT2JqZWN0IE9iamVjdCBjb250YWluaW5nIGVhc2luZyBmdW5jdGlvbnNcbiAqIEBwcm9wZXJ0eSB7RnVuY3Rpb259IEluIC0gRWFzaW5nICdJbicgZnVuY3Rpb24uIFNob3VsZCB1c2UgdGhlIHNpZ25hdHVyZSAoazpudW1iZXIpOm51bWJlci5cbiAqIEBwcm9wZXJ0eSB7RnVuY3Rpb259IE91dCAtIEVhc2luZyAnT3V0JyBmdW5jdGlvbi4gU2hvdWxkIHVzZSB0aGUgc2lnbmF0dXJlIChrOm51bWJlcik6bnVtYmVyLlxuICogQHByb3BlcnR5IHtGdW5jdGlvbn0gSW5PdXQgLSBFYXNpbmcgJ0luT3V0JyBmdW5jdGlvbi4gU2hvdWxkIHVzZSB0aGUgc2lnbmF0dXJlIChrOm51bWJlcik6bnVtYmVyLlxuICovXG5cbi8qKlxuICogTGluZWFyIEVhc2luZ1xuICogQHR5cGUge0Vhc2luZ09iamVjdH1cbiAqL1xuZXhwb3J0IGNvbnN0IExpbmVhciA9IHtcbiAgTm9uZShrKSB7XG4gICAgcmV0dXJuIGs7XG4gIH0sXG4gIEluKGspIHtcbiAgICByZXR1cm4gaztcbiAgfSxcbiAgT3V0KGspIHtcbiAgICByZXR1cm4gaztcbiAgfSxcbiAgSW5PdXQoaykge1xuICAgIHJldHVybiBrO1xuICB9LFxufTtcblxuLyoqXG4gKiBRdWFkcmF0aWMgRWFzaW5nXG4gKiBAdHlwZSB7RWFzaW5nT2JqZWN0fVxuICovXG5leHBvcnQgY29uc3QgUXVhZHJhdGljID0ge1xuICBJbihrKSB7XG4gICAgcmV0dXJuIGsgKiBrO1xuICB9LFxuICBPdXQoaykge1xuICAgIHJldHVybiBrICogKDIgLSBrKTtcbiAgfSxcbiAgSW5PdXQoaykge1xuICAgIGsgKj0gMjtcbiAgICBpZiAoayA8IDEpIHtcbiAgICAgIHJldHVybiAwLjUgKiBrICogaztcbiAgICB9XG4gICAgcmV0dXJuIC0wLjUgKiAoLS1rICogKGsgLSAyKSAtIDEpO1xuICB9LFxufTtcblxuLyoqXG4gKiBDdWJpYyBFYXNpbmdcbiAqIEB0eXBlIHtFYXNpbmdPYmplY3R9XG4gKi9cbmV4cG9ydCBjb25zdCBDdWJpYyA9IHtcbiAgSW4oaykge1xuICAgIHJldHVybiBrICogayAqIGs7XG4gIH0sXG4gIE91dChrKSB7XG4gICAgcmV0dXJuIC0tayAqIGsgKiBrICsgMTtcbiAgfSxcbiAgSW5PdXQoaykge1xuICAgIGsgKj0gMjtcbiAgICBpZiAoayA8IDEpIHtcbiAgICAgIHJldHVybiAwLjUgKiBrICogayAqIGs7XG4gICAgfVxuXG4gICAgayAtPSAyO1xuICAgIHJldHVybiAwLjUgKiAoayAqIGsgKiBrICsgMik7XG4gIH0sXG59O1xuXG4vKipcbiAqIFF1YXJ0aWMgRWFzaW5nXG4gKiBAdHlwZSB7RWFzaW5nT2JqZWN0fVxuICovXG5leHBvcnQgY29uc3QgUXVhcnRpYyA9IHtcbiAgSW4oaykge1xuICAgIHJldHVybiBrICogayAqIGsgKiBrO1xuICB9LFxuICBPdXQoaykge1xuICAgIHJldHVybiAxIC0gLS1rICogayAqIGsgKiBrO1xuICB9LFxuICBJbk91dChrKSB7XG4gICAgayAqPSAyO1xuICAgIGlmIChrIDwgMSkge1xuICAgICAgcmV0dXJuIDAuNSAqIGsgKiBrICogayAqIGs7XG4gICAgfVxuXG4gICAgayAtPSAyO1xuICAgIHJldHVybiAtMC41ICogKGsgKiBrICogayAqIGsgLSAyKTtcbiAgfSxcbn07XG5cbi8qKlxuICogUXVpbnRpYyBFYXNpbmdcbiAqIEB0eXBlIHtFYXNpbmdPYmplY3R9XG4gKi9cbmV4cG9ydCBjb25zdCBRdWludGljID0ge1xuICBJbihrKSB7XG4gICAgcmV0dXJuIGsgKiBrICogayAqIGsgKiBrO1xuICB9LFxuICBPdXQoaykge1xuICAgIHJldHVybiAtLWsgKiBrICogayAqIGsgKiBrICsgMTtcbiAgfSxcbiAgSW5PdXQoaykge1xuICAgIGsgKj0gMjtcbiAgICBpZiAoayA8IDEpIHtcbiAgICAgIHJldHVybiAwLjUgKiBrICogayAqIGsgKiBrICogaztcbiAgICB9XG5cbiAgICBrIC09IDI7XG4gICAgcmV0dXJuIDAuNSAqIChrICogayAqIGsgKiBrICogayArIDIpO1xuICB9LFxufTtcblxuLyoqXG4gKiBTaW51c29pZGFsIEVhc2luZ1xuICogQHR5cGUge0Vhc2luZ09iamVjdH1cbiAqL1xuZXhwb3J0IGNvbnN0IFNpbnVzb2lkYWwgPSB7XG4gIEluKGspIHtcbiAgICByZXR1cm4gMSAtIE1hdGguY29zKChrICogTWF0aC5QSSkgLyAyKTtcbiAgfSxcbiAgT3V0KGspIHtcbiAgICByZXR1cm4gTWF0aC5zaW4oKGsgKiBNYXRoLlBJKSAvIDIpO1xuICB9LFxuICBJbk91dChrKSB7XG4gICAgcmV0dXJuIDAuNSAqICgxIC0gTWF0aC5jb3MoTWF0aC5QSSAqIGspKTtcbiAgfSxcbn07XG5cbi8qKlxuICogRXhwb25lbnRpYWwgRWFzaW5nXG4gKiBAdHlwZSB7RWFzaW5nT2JqZWN0fVxuICovXG5leHBvcnQgY29uc3QgRXhwb25lbnRpYWwgPSB7XG4gIEluKGspIHtcbiAgICByZXR1cm4gayA9PT0gMCA/IDAgOiAxMDI0ICoqIChrIC0gMSk7XG4gIH0sXG4gIE91dChrKSB7XG4gICAgcmV0dXJuIGsgPT09IDEgPyAxIDogMSAtIDIgKiogKC0xMCAqIGspO1xuICB9LFxuICBJbk91dChrKSB7XG4gICAgaWYgKGsgPT09IDApIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgICBpZiAoayA9PT0gMSkge1xuICAgICAgcmV0dXJuIDE7XG4gICAgfVxuXG4gICAgayAqPSAyO1xuICAgIGlmIChrIDwgMSkge1xuICAgICAgcmV0dXJuIDAuNSAqIDEwMjQgKiogKGsgLSAxKTtcbiAgICB9XG4gICAgcmV0dXJuIDAuNSAqICgtKDIgKiogKC0xMCAqIChrIC0gMSkpKSArIDIpO1xuICB9LFxufTtcblxuLyoqXG4gKiBDaXJjdWxhciBFYXNpbmdcbiAqIEB0eXBlIHtFYXNpbmdPYmplY3R9XG4gKi9cbmV4cG9ydCBjb25zdCBDaXJjdWxhciA9IHtcbiAgSW4oaykge1xuICAgIHJldHVybiAxIC0gTWF0aC5zcXJ0KDEgLSBrICogayk7XG4gIH0sXG4gIE91dChrKSB7XG4gICAgcmV0dXJuIE1hdGguc3FydCgxIC0gLS1rICogayk7XG4gIH0sXG4gIEluT3V0KGspIHtcbiAgICBrICo9IDI7XG4gICAgaWYgKGsgPCAxKSB7XG4gICAgICByZXR1cm4gLTAuNSAqIChNYXRoLnNxcnQoMSAtIGsgKiBrKSAtIDEpO1xuICAgIH1cblxuICAgIGsgLT0gMjtcbiAgICByZXR1cm4gMC41ICogKE1hdGguc3FydCgxIC0gayAqIGspICsgMSk7XG4gIH0sXG59O1xuXG4vKipcbiAqIEVsYXN0aWMgRWFzaW5nXG4gKiBAdHlwZSB7RWFzaW5nT2JqZWN0fVxuICovXG5leHBvcnQgY29uc3QgRWxhc3RpYyA9IHtcbiAgSW4oaykge1xuICAgIGxldCBzO1xuICAgIGxldCBhID0gMC4xO1xuICAgIGNvbnN0IHAgPSAwLjQ7XG5cbiAgICBpZiAoayA9PT0gMCkge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgaWYgKGsgPT09IDEpIHtcbiAgICAgIHJldHVybiAxO1xuICAgIH1cblxuICAgIGlmICghYSB8fCBhIDwgMSkge1xuICAgICAgYSA9IDE7XG4gICAgICBzID0gcCAvIDQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHMgPSAocCAqIE1hdGguYXNpbigxIC8gYSkpIC8gKDIgKiBNYXRoLlBJKTtcbiAgICB9XG5cbiAgICBrIC09IDE7XG4gICAgcmV0dXJuIC0oYSAqIDIgKiogKDEwICogaykgKiBNYXRoLnNpbigoKGsgLSBzKSAqICgyICogTWF0aC5QSSkpIC8gcCkpO1xuICB9LFxuICBPdXQoaykge1xuICAgIGxldCBzO1xuICAgIGxldCBhID0gMC4xO1xuICAgIGNvbnN0IHAgPSAwLjQ7XG5cbiAgICBpZiAoayA9PT0gMCkge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgaWYgKGsgPT09IDEpIHtcbiAgICAgIHJldHVybiAxO1xuICAgIH1cblxuICAgIGlmICghYSB8fCBhIDwgMSkge1xuICAgICAgYSA9IDE7XG4gICAgICBzID0gcCAvIDQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHMgPSAocCAqIE1hdGguYXNpbigxIC8gYSkpIC8gKDIgKiBNYXRoLlBJKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYSAqIDIgKiogKC0xMCAqIGspICogTWF0aC5zaW4oKChrIC0gcykgKiAoMiAqIE1hdGguUEkpKSAvIHApICsgMTtcbiAgfSxcbiAgSW5PdXQoaykge1xuICAgIGxldCBzO1xuICAgIGxldCBhID0gMC4xO1xuICAgIGNvbnN0IHAgPSAwLjQ7XG5cbiAgICBpZiAoayA9PT0gMCkge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgaWYgKGsgPT09IDEpIHtcbiAgICAgIHJldHVybiAxO1xuICAgIH1cblxuICAgIGlmICghYSB8fCBhIDwgMSkge1xuICAgICAgYSA9IDE7XG4gICAgICBzID0gcCAvIDQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHMgPSAocCAqIE1hdGguYXNpbigxIC8gYSkpIC8gKDIgKiBNYXRoLlBJKTtcbiAgICB9XG5cbiAgICBrICo9IDI7XG4gICAgaWYgKGsgPCAxKSB7XG4gICAgICBrIC09IDE7XG4gICAgICByZXR1cm4gKFxuICAgICAgICAtMC41ICogKGEgKiAyICoqICgxMCAqIGspICogTWF0aC5zaW4oKChrIC0gcykgKiAoMiAqIE1hdGguUEkpKSAvIHApKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBrIC09IDE7XG4gICAgcmV0dXJuIChcbiAgICAgIGEgKiAyICoqICgtMTAgKiBrKSAqIE1hdGguc2luKCgoayAtIHMpICogKDIgKiBNYXRoLlBJKSkgLyBwKSAqIDAuNSArIDFcbiAgICApO1xuICB9LFxufTtcblxuLyoqXG4gKiBCYWNrIEVhc2luZ1xuICogQHR5cGUge0Vhc2luZ09iamVjdH1cbiAqL1xuZXhwb3J0IGNvbnN0IEJhY2sgPSB7XG4gIEluKGspIHtcbiAgICBjb25zdCBzID0gMS43MDE1ODtcbiAgICByZXR1cm4gayAqIGsgKiAoKHMgKyAxKSAqIGsgLSBzKTtcbiAgfSxcbiAgT3V0KGspIHtcbiAgICBjb25zdCBzID0gMS43MDE1ODtcbiAgICByZXR1cm4gLS1rICogayAqICgocyArIDEpICogayArIHMpICsgMTtcbiAgfSxcbiAgSW5PdXQoaykge1xuICAgIGNvbnN0IHMgPSAxLjcwMTU4ICogMS41MjU7XG4gICAgayAqPSAyO1xuICAgIGlmIChrIDwgMSkge1xuICAgICAgcmV0dXJuIDAuNSAqIChrICogayAqICgocyArIDEpICogayAtIHMpKTtcbiAgICB9XG5cbiAgICBrIC09IDI7XG4gICAgcmV0dXJuIDAuNSAqIChrICogayAqICgocyArIDEpICogayArIHMpICsgMik7XG4gIH0sXG59O1xuXG4vKipcbiAqIEJvdW5jZSBFYXNpbmdcbiAqIEB0eXBlIHtFYXNpbmdPYmplY3R9XG4gKi9cbmV4cG9ydCBjb25zdCBCb3VuY2UgPSB7XG4gIEluKGspIHtcbiAgICByZXR1cm4gMSAtIEJvdW5jZS5PdXQoMSAtIGspO1xuICB9LFxuICBPdXQoaykge1xuICAgIGlmIChrIDwgMSAvIDIuNzUpIHtcbiAgICAgIHJldHVybiA3LjU2MjUgKiBrICogaztcbiAgICB9IGVsc2UgaWYgKGsgPCAyIC8gMi43NSkge1xuICAgICAgayAtPSAxLjU7XG4gICAgICByZXR1cm4gNy41NjI1ICogKGsgLyAyLjc1KSAqIGsgKyAwLjc1O1xuICAgIH0gZWxzZSBpZiAoayA8IDIuNSAvIDIuNzUpIHtcbiAgICAgIGsgLT0gMi4yNTtcbiAgICAgIHJldHVybiA3LjU2MjUgKiAoayAvIDIuNzUpICogayArIDAuOTM3NTtcbiAgICB9XG4gICAgayAtPSAyLjYyNTtcbiAgICByZXR1cm4gNy41NjI1ICogKGsgLyAyLjc1KSAqIGsgKyAwLjk4NDM3NTtcbiAgfSxcbiAgSW5PdXQoaykge1xuICAgIGlmIChrIDwgMC41KSB7XG4gICAgICByZXR1cm4gQm91bmNlLkluKGsgKiAyKSAqIDAuNTtcbiAgICB9XG4gICAgcmV0dXJuIEJvdW5jZS5PdXQoayAqIDIgLSAxKSAqIDAuNSArIDAuNTtcbiAgfSxcbn07XG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxuLyogZXNsaW50LWRpc2FibGUgbm8tdW5kZXJzY29yZS1kYW5nbGUgKi9cbmltcG9ydCBVdGlscyBmcm9tICcuL1V0aWxzJztcblxuLyoqXG4gKiBDbGFzcyB0aGF0IGNhbiBleGVjdXRlIGZ1bmN0aW9ucyB3aGVuIGxvY2FsIG1lc3NhZ2VzIGFyZSByZWNlaXZlZC4gTG9jYWwgbWVzc2FnZXNcbiAqIGFyZSBwcmVmaXhlZCB3aXRoIHRoZSBpbnN0YW5jZSdzIGlkLlxuICpcbiAqIEBhbGlhcyBjb3JlL01lc3NlbmdlclxuICpcbiAqIEBwcm9wZXJ0eSB7Y29yZS9NZXNzZW5nZXJ9IEdsb2JhbE1lc3NlbmdlciAtIEEgbWVzc2VuZ2VyIHRoYXQgY2FuIGJlIHVzZWQgZm9yXG4gKiBnbG9iYWwgbWVzc2FnaW5nLiBXaGVuIHVzaW5nIHN0YXRpYyBsaXN0ZW4gYW5kIGVtaXQgbWV0aG9kcyB0aGV5IGFyZSBleGVjdXRlZFxuICogb24gdGhpcyBtZXNzZW5nZXIuXG4gKiBAcHJvcGVydHkge09iamVjdH0gRVZFTlRTIC0gQnVpbHQtaW4gZXZlbnRzIHRoYXQgdGhlIE1lc3NlbmdlciBlbWl0cy5cbiAqL1xuY2xhc3MgTWVzc2VuZ2VyIHtcbiAgLyoqXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKlxuICAgKiBAcGFyYW0ge2FueT19IGlkIC0gSWQgZm9yIHRoZSBvYmplY3QuIElmIG5vbmUgaXMgcHJvdmlkZWQgYSBuZXcgaWQgd2lsbFxuICAgKiBiZSBjcmVhdGVkLiBJZCBzaG91bGQgYmUgYWJsZSB0byBiZSByZXByZXNlbnRlZCBhcyBhIHN0cmluZy5cbiAgICovXG4gIGNvbnN0cnVjdG9yKGlkKSB7XG4gICAgdGhpcy5faWQgPSBpZCAhPT0gdW5kZWZpbmVkID8gaWQgOiBVdGlscy5jcmVhdGVJZCgpO1xuICAgIHRoaXMuX2Rpc3BhdGNoZXIgPSB3aW5kb3c7XG4gICAgdGhpcy5fY2FsbGJhY2tzID0ge307XG4gICAgdGhpcy5fZXZlbnRMaXN0ZW5lcnMgPSB7fTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBzdHJpbmcgaWQgb2YgdGhlIG9iamVjdC5cbiAgICpcbiAgICogQHJlYWRvbmx5XG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICBnZXQgaWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2lkO1xuICB9XG5cbiAgLyoqXG4gICAqIFByZWZpeCBhIG1lc3NhZ2Ugd2l0aCB0aGUgaW5zdGFuY2UgaWQuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlXG4gICAqXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqL1xuICBfY3JlYXRlTG9jYWxNZXNzYWdlKG1lc3NhZ2UpIHtcbiAgICByZXR1cm4gYCR7dGhpcy5pZH0uJHttZXNzYWdlfWA7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGEgZnVuY3Rpb24gdGhhdCB3aWxsIGNhbGwgYSBjYWxsYmFjayBmdW5jdGlvbiBhbmQgc3VwcGx5IHRoZSBldmVudCdzXG4gICAqIGRldGFpbCBwcm9wZXJ0eSBhcyBhbiBhcmd1bWVudC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAgICpcbiAgICogQHJldHVybnMge0Z1bmN0aW9ufVxuICAgKi9cbiAgX2NyZWF0ZUxpc3RlbmVyKGNhbGxiYWNrKSB7XG4gICAgcmV0dXJuIGUgPT4ge1xuICAgICAgbGV0IHZhbHVlO1xuXG4gICAgICBpZiAoZS5kZXRhaWwgIT09IG51bGwpIHtcbiAgICAgICAgdmFsdWUgPSBlLmRldGFpbDtcbiAgICAgIH1cblxuICAgICAgY2FsbGJhY2sodmFsdWUpO1xuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGFuIGV2ZW50IG9iamVjdCBhbmQgc2VuZCBpdCB0byBsaXN0ZW5lcnMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIC0gRXZlbnQgdHlwZSBuYW1lLlxuICAgKiBAcGFyYW0ge2FueT19IHZhbHVlIC0gVmFsdWUgdG8gc2VuZCB0byBsaXN0ZW5lcnMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtDdXN0b21FdmVudH1cbiAgICovXG4gIF9jcmVhdGVFdmVudChtZXNzYWdlLCB2YWx1ZSkge1xuICAgIHJldHVybiBuZXcgQ3VzdG9tRXZlbnQobWVzc2FnZSwge2RldGFpbDogdmFsdWV9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlciBhbiBldmVudC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgLSBFdmVudCB0eXBlIG5hbWUuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGxpc3RlbmVyIC0gQSBsaXN0ZW5lciBmdW5jdGlvbiBnZW5lcmF0ZWQgdXNpbmcgX2NyZWF0ZUxpc3RlbmVyLlxuICAgKi9cbiAgX2FkZExpc3RlbmVyKG1lc3NhZ2UsIGxpc3RlbmVyKSB7XG4gICAgdGhpcy5fZGlzcGF0Y2hlci5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgdGhpcy5fY3JlYXRlTG9jYWxNZXNzYWdlKG1lc3NhZ2UpLFxuICAgICAgbGlzdGVuZXJcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFVucmVnaXN0ZXIgYW4gZXZlbnQuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIC0gRXZlbnQgdHlwZSBuYW1lLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBsaXN0ZW5lciAtIEEgbGlzdGVuZXIgZnVuY3Rpb24gZ2VuZXJhdGVkIHVzaW5nIF9jcmVhdGVMaXN0ZW5lci5cbiAgICovXG4gIF9yZW1vdmVMaXN0ZW5lcihtZXNzYWdlLCBsaXN0ZW5lcikge1xuICAgIHRoaXMuX2Rpc3BhdGNoZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcihcbiAgICAgIHRoaXMuX2NyZWF0ZUxvY2FsTWVzc2FnZShtZXNzYWdlKSxcbiAgICAgIGxpc3RlbmVyXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlIGEgZnVuY3Rpb24gd2hlbiBhIG1lc3NhZ2UgaXMgcmVjZWl2ZWQgZm9yIHRoaXMgb2JqZWN0LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSAtIFRoZSBtZXNzYWdlIHRvIGxpc3RlbiBmb3IuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIC0gRnVuY3Rpb24gdG8gZXhlY3V0ZSBvbmNlIHRoZSBtZXNzYWdlIGlzIHJlY2VpdmVkLlxuICAgKi9cbiAgbGlzdGVuVG8obWVzc2FnZSwgY2FsbGJhY2spIHtcbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBDYW5ub3QgYWRkIGxpc3RlbmVyIGZvciAke21lc3NhZ2V9IG9uICR7dGhpcy5pZH0uIENhbGxiYWNrIG11c3QgYmUgYSBmdW5jdGlvbi5gXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9jYWxsYmFja3NbbWVzc2FnZV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5fY2FsbGJhY2tzW21lc3NhZ2VdID0gW107XG4gICAgICB0aGlzLl9ldmVudExpc3RlbmVyc1ttZXNzYWdlXSA9IFtdO1xuICAgIH1cblxuICAgIGNvbnN0IGxpc3RlbmVyID0gdGhpcy5fY3JlYXRlTGlzdGVuZXIoY2FsbGJhY2spO1xuICAgIHRoaXMuX2NhbGxiYWNrc1ttZXNzYWdlXS5wdXNoKGNhbGxiYWNrKTtcbiAgICB0aGlzLl9ldmVudExpc3RlbmVyc1ttZXNzYWdlXS5wdXNoKGxpc3RlbmVyKTtcblxuICAgIHRoaXMuX2FkZExpc3RlbmVyKG1lc3NhZ2UsIGxpc3RlbmVyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcmV2ZW50IGEgZnVuY3Rpb24gZnJvbSBiZWluZyBleGVjdXRlZCB3aGVuIGEgbWVzc2FnZSBpcyByZWNlaXZlZCBmb3IgdGhpc1xuICAgKiBvYmplY3QuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIC0gVGhlIG1lc3NhZ2UgdG8gc3RvcCBsaXN0ZW5pbmcgZm9yLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gY2FsbGJhY2sgLSBPcHRpb25hbCBjYWxsYmFjayB0byByZW1vdmUuIElmIG5vbmUgaXMgZGVmaW5lZCxcbiAgICogcmVtb3ZlIGFsbCBjYWxsYmFja3MgZm9yIHRoZSBtZXNzYWdlLlxuICAgKi9cbiAgc3RvcExpc3RlbmluZyhtZXNzYWdlLCBjYWxsYmFjaykge1xuICAgIGlmICh0aGlzLl9jYWxsYmFja3NbbWVzc2FnZV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSBpZiAoY2FsbGJhY2sgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gSWYgbm8gY2FsbGJhY2sgd2FzIGRlZmluZWQsIGNhbGwgc3RvcExpc3RlbmluZyBvbiBhbGwgY2FsbGJhY2tzIGZvciB0aGUgbWVzc2FnZVxuICAgICAgZm9yIChsZXQgaSA9IHRoaXMuX2NhbGxiYWNrc1ttZXNzYWdlXS5sZW5ndGggLSAxOyBpID4gLTE7IGktLSkge1xuICAgICAgICB0aGlzLnN0b3BMaXN0ZW5pbmcobWVzc2FnZSwgdGhpcy5fY2FsbGJhY2tzW21lc3NhZ2VdW2ldKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIElmIGEgY2FsbGJhY2sgd2FzIGRlZmluZWQsIG1ha2Ugc3VyZSBpdCdzIGEgbGlzdGVuZXJcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuX2NhbGxiYWNrc1ttZXNzYWdlXS5pbmRleE9mKGNhbGxiYWNrKTtcbiAgICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbGlzdGVuZXIgPSB0aGlzLl9ldmVudExpc3RlbmVyc1ttZXNzYWdlXVtpbmRleF07XG4gICAgdGhpcy5fcmVtb3ZlTGlzdGVuZXIobWVzc2FnZSwgbGlzdGVuZXIpO1xuXG4gICAgdGhpcy5fY2FsbGJhY2tzW21lc3NhZ2VdLnNwbGljZShpbmRleCwgMSk7XG4gICAgdGhpcy5fZXZlbnRMaXN0ZW5lcnNbbWVzc2FnZV0uc3BsaWNlKGluZGV4LCAxKTtcblxuICAgIGlmICh0aGlzLl9jYWxsYmFja3NbbWVzc2FnZV0ubGVuZ3RoID09PSAwKSB7XG4gICAgICBkZWxldGUgdGhpcy5fY2FsbGJhY2tzW21lc3NhZ2VdO1xuICAgICAgZGVsZXRlIHRoaXMuX2V2ZW50TGlzdGVuZXJzW21lc3NhZ2VdO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEZS1yZWdpc3RlciBjYWxsYmFjayhzKSBmcm9tIGJlaW5nIGV4ZWN1dGVkIHdoZW4gbWVzc2FnZXMgbWF0Y2hpbmcgdGhlIGdpdmVuXG4gICAqIHJlZ3VsYXIgZXhwcmVzc2lvbiBhcmUgcmVjZWl2ZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVnZXhwfSByZWdleHAgLSByZWdleHAgLSBUaGUgcmVndWxhciBleHByZXNzaW9uIHRvIGZpbHRlciBtZXNzYWdlcyB3aXRoLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gY2FsbGJhY2sgLSBPcHRpb25hbCBjYWxsYmFjayB0byByZW1vdmUuIElmIG5vbmUgaXMgZGVmaW5lZCxcbiAgICogcmVtb3ZlIGFsbCBjYWxsYmFja3MgZm9yIG1lc3NhZ2VzIG1hdGNoaW5nIHRoZSByZWd1bGFyIGV4cHJlc3Npb24uXG4gICAqL1xuICBzdG9wTGlzdGVuaW5nQnlSZWdleHAocmVnZXhwLCBjYWxsYmFjaykge1xuICAgIGNvbnN0IG1lc3NhZ2VzID0gT2JqZWN0LmtleXModGhpcy5fY2FsbGJhY2tzKS5maWx0ZXIobWVzc2FnZSA9PiByZWdleHAudGVzdChtZXNzYWdlKSk7XG5cbiAgICBtZXNzYWdlcy5mb3JFYWNoKG1lc3NhZ2UgPT4ge1xuICAgICAgdGhpcy5zdG9wTGlzdGVuaW5nKG1lc3NhZ2UsIGNhbGxiYWNrKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcmV2ZW50IGFueSBmdW5jdGlvbnMgZnJvbSBiZWluZyBleGVjdXRlZCB3aGVuIGFueSBtZXNzYWdlIGlzIHJlY2VpdmVkIGZvclxuICAgKiB0aGlzIG9iamVjdC5cbiAgICovXG4gIHN0b3BMaXN0ZW5pbmdUb0FsbCgpIHtcbiAgICBjb25zdCBtZXNzYWdlcyA9IE9iamVjdC5rZXlzKHRoaXMuX2NhbGxiYWNrcyk7XG5cbiAgICBmb3IgKGxldCBpID0gbWVzc2FnZXMubGVuZ3RoIC0gMTsgaSA+IC0xOyBpLS0pIHtcbiAgICAgIHRoaXMuc3RvcExpc3RlbmluZyhtZXNzYWdlc1tpXSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNlbmQgYSBtZXNzYWdlLCBjYXVzaW5nIGxpc3RlbmVyIGZ1bmN0aW9ucyBmb3IgdGhlIG1lc3NhZ2Ugb24gdGhpcyBvYmplY3RcbiAgICogdG8gYmUgZXhlY3V0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIC0gVGhlIG1lc3NhZ2UgdG8gZW1pdC5cbiAgICogQHBhcmFtIHthbnk9fSB2YWx1ZSAtIE9wdGlvbmFsIGFyZ3VtZW50IHRvIHBhc3MgdG8gbGlzdGVuZXIgY2FsbGJhY2tzLlxuICAgKi9cbiAgZW1pdChtZXNzYWdlLCB2YWx1ZSkge1xuICAgIGlmICh0aGlzLl9jYWxsYmFja3NbbWVzc2FnZV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIG1lc3NhZ2UgPSB0aGlzLl9jcmVhdGVMb2NhbE1lc3NhZ2UobWVzc2FnZSk7XG4gICAgY29uc3QgZXZlbnQgPSB0aGlzLl9jcmVhdGVFdmVudChtZXNzYWdlLCB2YWx1ZSk7XG4gICAgdGhpcy5fZGlzcGF0Y2hlci5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlIGEgZnVuY3Rpb24gd2hlbiBhIG1lc3NhZ2UgaXMgcmVjZWl2ZWQgZm9yIHRoZSBnbG9iYWwgTWVzc2VuZ2VyIGluc3RhbmNlLlxuICAgKlxuICAgKiBAc3RhdGljXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIC0gVGhlIG1lc3NhZ2UgdG8gbGlzdGVuIGZvci5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgLSBGdW5jdGlvbiB0byBleGVjdXRlIG9uY2UgdGhlIG1lc3NhZ2UgaXMgcmVjZWl2ZWQuXG4gICAqL1xuICBzdGF0aWMgbGlzdGVuVG8obWVzc2FnZSwgY2FsbGJhY2ssIG1lc3Nlbmdlcikge1xuICAgIHRoaXMuR2xvYmFsTWVzc2VuZ2VyLmxpc3RlblRvKG1lc3NhZ2UsIGNhbGxiYWNrLCBtZXNzZW5nZXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIFByZXZlbnQgYSBmdW5jdGlvbiBmcm9tIGJlaW5nIGV4ZWN1dGVkIHdoZW4gYSBtZXNzYWdlIGlzIHJlY2VpdmVkIGZvciB0aGVcbiAgICogZ2xvYmFsIE1lc3NlbmdlciBpbnN0YW5jZS5cbiAgICpcbiAgICogQHN0YXRpY1xuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSAtIFRoZSBtZXNzYWdlIHRvIHN0b3AgbGlzdGVuaW5nIGZvci5cbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IGNhbGxiYWNrIC0gT3B0aW9uYWwgY2FsbGJhY2sgdG8gcmVtb3ZlLiBJZiBub25lIGlzIGRlZmluZWQsXG4gICAqIHJlbW92ZSBhbGwgY2FsbGJhY2tzIGZvciB0aGUgbWVzc2FnZS5cbiAgICovXG4gIHN0YXRpYyBzdG9wTGlzdGVuaW5nKG1lc3NhZ2UsIGNhbGxiYWNrKSB7XG4gICAgdGhpcy5HbG9iYWxNZXNzZW5nZXIuc3RvcExpc3RlbmluZyhtZXNzYWdlLCBjYWxsYmFjayk7XG4gIH1cblxuICAvKipcbiAgICogRGUtcmVnaXN0ZXIgY2FsbGJhY2socykgZnJvbSBiZWluZyBleGVjdXRlZCBvbiB0aGUgZ2xvYmFsIG1lc3NlbmdlcnIgaW5zdGFuY2VcbiAgICogd2hlbiBtZXNzYWdlcyBtYXRjaGluZyB0aGUgZ2l2ZW4gcmVndWxhciBleHByZXNzaW9uIGFyZSByZWNlaXZlZC5cbiAgICpcbiAgICogQHBhcmFtIHtSZWdleHB9IHJlZ2V4cCAtIHJlZ2V4cCAtIFRoZSByZWd1bGFyIGV4cHJlc3Npb24gdG8gZmlsdGVyIG1lc3NhZ2VzIHdpdGguXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBjYWxsYmFjayAtIE9wdGlvbmFsIGNhbGxiYWNrIHRvIHJlbW92ZS4gSWYgbm9uZSBpcyBkZWZpbmVkLFxuICAgKiByZW1vdmUgYWxsIGNhbGxiYWNrcyBmb3IgbWVzc2FnZXMgbWF0Y2hpbmcgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbi5cbiAgICovXG4gIHN0YXRpYyBzdG9wTGlzdGVuaW5nQnlSZWdleHAocmVnZXhwLCBjYWxsYmFjaykge1xuICAgIGNvbnN0IG1lc3NhZ2VzID0gT2JqZWN0LmtleXModGhpcy5HbG9iYWxNZXNzZW5nZXIuX2NhbGxiYWNrcykuZmlsdGVyKFxuICAgICAgbWVzc2FnZSA9PiByZWdleHAudGVzdChtZXNzYWdlKVxuICAgICk7XG5cbiAgICBtZXNzYWdlcy5mb3JFYWNoKG1lc3NhZ2UgPT4ge1xuICAgICAgdGhpcy5zdG9wTGlzdGVuaW5nKG1lc3NhZ2UsIGNhbGxiYWNrKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcmV2ZW50IGFueSBmdW5jdGlvbnMgZnJvbSBiZWluZyBleGVjdXRlZCB3aGVuIGFueSBtZXNzYWdlIGlzIHJlY2VpdmVkIGZvclxuICAgKiB0aGUgZ2xvYmFsIE1lc3NlbmdlciBpbnN0YW5jZS5cbiAgICpcbiAgICogQHN0YXRpY1xuICAgKi9cbiAgc3RhdGljIHN0b3BMaXN0ZW5pbmdUb0FsbCgpIHtcbiAgICB0aGlzLkdsb2JhbE1lc3Nlbmdlci5zdG9wTGlzdGVuaW5nVG9BbGwoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZW5kIGEgbWVzc2FnZSwgY2F1c2luZyBsaXN0ZW5lciBmdW5jdGlvbnMgZm9yIHRoZSBtZXNzYWdlIG9uIHRoZSBnbG9iYWwgTWVzc2VuZ2VyXG4gICAqIGluc3RhbmNlIHRvIGJlIGV4ZWN1dGVkLlxuICAgKlxuICAgKiBAc3RhdGljXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIC0gVGhlIG1lc3NhZ2UgdG8gZW1pdC5cbiAgICogQHBhcmFtIHthbnk9fSB2YWx1ZSAtIE9wdGlvbmFsIGFyZ3VtZW50IHRvIHBhc3MgdG8gbGlzdGVuZXIgY2FsbGJhY2tzLlxuICAgKi9cbiAgc3RhdGljIGVtaXQobWVzc2FnZSwgdmFsdWUpIHtcbiAgICB0aGlzLkdsb2JhbE1lc3Nlbmdlci5lbWl0KG1lc3NhZ2UsIHZhbHVlKTtcbiAgfVxufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhNZXNzZW5nZXIsIHtcbiAgR2xvYmFsTWVzc2VuZ2VyOiB7XG4gICAgdmFsdWU6IG5ldyBNZXNzZW5nZXIoKSxcbiAgICB3cml0YWJsZTogZmFsc2UsXG4gIH0sXG4gIEVWRU5UUzoge1xuICAgIHZhbHVlOiB7fSxcbiAgICB3cml0YWJsZTogZmFsc2UsXG4gIH0sXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgTWVzc2VuZ2VyO1xuIiwiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXHJcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxyXG5pbXBvcnQgQ29yZU1lc3NlbmdlciBmcm9tICdjb3JlL01lc3Nlbmdlcic7XHJcblxyXG4vKipcclxuICogQGV4dGVuZHMgY29yZS9NZXNzZW5nZXJcclxuICogQGFsaWFzIHRocmVlLmpzL01lc3NlbmdlclxyXG4gKi9cclxuY2xhc3MgTWVzc2VuZ2VyIGV4dGVuZHMgQ29yZU1lc3NlbmdlciB7XHJcbiAgLyoqXHJcbiAgICogQGNvbnN0cnVjdG9yXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge2FueT19IGlkIC0gSWQgZm9yIHRoZSBvYmplY3QuIElmIG5vbmUgaXMgcHJvdmlkZWQgYSBuZXcgaWQgd2lsbFxyXG4gICAqIGJlIGNyZWF0ZWQuIElkIHNob3VsZCBiZSBhYmxlIHRvIGJlIHJlcHJlc2VudGVkIGFzIGEgc3RyaW5nLlxyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKGlkKSB7XHJcbiAgICBzdXBlcihpZCk7XHJcbiAgICB0aGlzLl9kaXNwYXRjaGVyID0gdGhpcztcclxuICB9XHJcblxyXG4gIF9jcmVhdGVFdmVudChtZXNzYWdlLCB2YWx1ZSkge1xyXG4gICAgcmV0dXJuIHtkZXRhaWw6IHZhbHVlLCB0eXBlOiBtZXNzYWdlfTtcclxuICB9XHJcbn1cclxuXHJcbi8vIEFzc2lnbiBUaHJlZS5qcyBFdmVudERpc3BhdGNoZXIgZnVuY3Rpb25hbGl0eSB0byB0aGUgTWVzc2VuZ2VyIGNsYXNzXHJcbk9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKFRIUkVFLkV2ZW50RGlzcGF0Y2hlci5wcm90b3R5cGUpXHJcbiAgLmZpbHRlcihwcm9wID0+IHByb3AgIT09ICdjb25zdHJ1Y3RvcicpXHJcbiAgLmZvckVhY2gocHJvcCA9PiB7XHJcbiAgICBNZXNzZW5nZXIucHJvdG90eXBlW3Byb3BdID0gVEhSRUUuRXZlbnREaXNwYXRjaGVyLnByb3RvdHlwZVtwcm9wXTtcclxuICB9KTtcclxuXHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShNZXNzZW5nZXIsICdHbG9iYWxNZXNzZW5nZXInLCB7XHJcbiAgdmFsdWU6IG5ldyBNZXNzZW5nZXIoKSxcclxuICB3cml0YWJsZTogZmFsc2UsXHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgTWVzc2VuZ2VyO1xyXG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cclxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVC0wXHJcbmltcG9ydCBNZXNzZW5nZXIgZnJvbSAnYXBwL01lc3Nlbmdlcic7XHJcblxyXG4vKipcclxuICogQmFzZSBjbGFzcyBmb3IgYWxsIGhvc3QgZmVhdHVyZXMuIEtlZXBzIGEgcmVmZXJlbmNlIHRvIHRoZSBob3N0IG9iamVjdCBtYW5hZ2luZ1xyXG4gKiB0aGUgZmVhdHVyZS5cclxuICpcclxuICogQGFic3RyYWN0XHJcbiAqXHJcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBFVkVOVFMgLSBCdWlsdC1pbiBtZXNzYWdlcyB0aGF0IHRoZSBmZWF0dXJlIGVtaXRzLiBXaGVuIHRoZVxyXG4gKiBmZWF0dXJlIGlzIGFkZGVkIHRvIGEge0BsaW5rIGNvcmUvSG9zdE9iamVjdH0sIGV2ZW50IG5hbWVzIHdpbGwgYmUgcHJlZml4ZWQgYnkgdGhlXHJcbiAqIG5hbWUgb2YgdGhlIGZlYXR1cmUgY2xhc3MgKyAnLicuXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbRVZFTlRTLnVwZGF0ZT1vblVwZGF0ZV0gLSBNZXNzYWdlIHRoYXQgaXMgZW1pdHRlZCBhZnRlclxyXG4gKiBlYWNoIGNhbGwgdG8gW3VwZGF0ZV17QGxpbmsgQWJzdHJhY3RIb3N0RmVhdHVyZSN1cGRhdGV9LlxyXG4gKiBAcHJvcGVydHkge09iamVjdH0gU0VSVklDRVMgLSBBbnkgQVdTIHNlcnZpY2VzIHRoYXQgYXJlIG5lY2Vzc2FyeSBmb3IgdGhlXHJcbiAqIGZlYXR1cmUgdG8gZnVuY3Rpb24uXHJcbiAqL1xyXG5jbGFzcyBBYnN0cmFjdEhvc3RGZWF0dXJlIHtcclxuICAvKipcclxuICAgKiBAY29uc3RydWN0b3JcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7Y29yZS9Ib3N0T2JqZWN0fSBob3N0IC0gVGhlIEhvc3RPYmplY3QgbWFuYWdpbmcgdGhlIGZlYXR1cmUuXHJcbiAgICovXHJcbiAgY29uc3RydWN0b3IoaG9zdCkge1xyXG4gICAgdGhpcy5faG9zdCA9IGhvc3Q7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBZGRzIGEgbmFtZXNwYWNlIHRvIHRoZSBob3N0IHdpdGggdGhlIG5hbWUgb2YgdGhlIGZlYXR1cmUgdG8gY29udGFpbiBwcm9wZXJ0aWVzXHJcbiAgICogYW5kIG1ldGhvZHMgZnJvbSB0aGUgZmVhdHVyZSB0aGF0IHVzZXJzIG9mIHRoZSBob3N0IG5lZWQgYWNjZXNzIHRvLlxyXG4gICAqL1xyXG4gIGluc3RhbGxBcGkoKSB7XHJcbiAgICBjb25zdCBldmVudHMgPSB7fTtcclxuICAgIGNvbnN0IGFwaSA9IHtFVkVOVFM6IGV2ZW50c307XHJcblxyXG4gICAgLy8gQWRkIHRoZSBjbGFzcyBuYW1lIHRvIGV2ZW50IG5hbWVzXHJcbiAgICBPYmplY3QuZW50cmllcyh0aGlzLmNvbnN0cnVjdG9yLkVWRU5UUykuZm9yRWFjaCgoW25hbWUsIHZhbHVlXSkgPT4ge1xyXG4gICAgICBldmVudHNbbmFtZV0gPSBgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9LiR7dmFsdWV9YDtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuX2hvc3RbdGhpcy5jb25zdHJ1Y3Rvci5uYW1lXSA9IGFwaTtcclxuXHJcbiAgICByZXR1cm4gYXBpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgaG9zdCB0aGF0IG1hbmFnZXMgdGhlIGZlYXR1cmUuXHJcbiAgICpcclxuICAgKiBAcmVhZG9ubHlcclxuICAgKi9cclxuICBnZXQgaG9zdCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9ob3N0O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgZW5naW5lIG93bmVyIG9iamVjdCBvZiB0aGUgaG9zdC5cclxuICAgKlxyXG4gICAqIEByZWFkb25seVxyXG4gICAqL1xyXG4gIGdldCBvd25lcigpIHtcclxuICAgIHJldHVybiB0aGlzLl9ob3N0Lm93bmVyO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTGlzdGVuIHRvIGEgZmVhdHVyZSBtZXNzYWdlIGZyb20gdGhlIGhvc3Qgb2JqZWN0LlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgLSBNZXNzYWdlIHRvIGxpc3RlbiBmb3IuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgLSBUaGUgY2FsbGJhY2sgdG8gZXhlY3V0ZSB3aGVuIHRoZSBtZXNzYWdlIGlzIHJlY2VpdmVkLlxyXG4gICAqL1xyXG4gIGxpc3RlblRvKG1lc3NhZ2UsIGNhbGxiYWNrKSB7XHJcbiAgICB0aGlzLl9ob3N0Lmxpc3RlblRvKG1lc3NhZ2UsIGNhbGxiYWNrKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIExpc3RlbiB0byBhIGZlYXR1cmUgbWVzc2FnZSBmcm9tIHRoZSBnbG9iYWwgbWVzc2VuZ2VyLiBGZWF0dXJlIG1lc3NhZ2VzIHdpbGxcclxuICAgKiBiZSBwcmVmaXhlZCB3aXRoIHRoZSBjbGFzcyBuYW1lIG9mIHRoZSBmZWF0dXJlLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgLSBNZXNzYWdlIHRvIGxpc3RlbiBmb3IuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgLSBUaGUgY2FsbGJhY2sgdG8gZXhlY3V0ZSB3aGVuIHRoZSBtZXNzYWdlIGlzIHJlY2VpdmVkLlxyXG4gICAqL1xyXG4gIHN0YXRpYyBsaXN0ZW5UbyhtZXNzYWdlLCBjYWxsYmFjaykge1xyXG4gICAgbWVzc2FnZSA9IGAke3RoaXMubmFtZX0uJHttZXNzYWdlfWA7XHJcbiAgICBNZXNzZW5nZXIubGlzdGVuVG8obWVzc2FnZSwgY2FsbGJhY2spO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU3RvcCBsaXN0ZW5pbmcgdG8gYSBtZXNzYWdlIGZyb20gdGhlIGhvc3Qgb2JqZWN0LlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgLSBNZXNzYWdlIHRvIHN0b3AgbGlzdGVuaW5nIGZvci5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gY2FsbGJhY2sgLSBPcHRpb25hbCBjYWxsYmFjayB0byByZW1vdmUuIElmIG5vbmUgaXMgZGVmaW5lZCxcclxuICAgKiByZW1vdmUgYWxsIGNhbGxiYWNrcyBmb3IgdGhlIG1lc3NhZ2UuXHJcbiAgICovXHJcbiAgc3RvcExpc3RlbmluZyhtZXNzYWdlLCBjYWxsYmFjaykge1xyXG4gICAgdGhpcy5faG9zdC5zdG9wTGlzdGVuaW5nKG1lc3NhZ2UsIGNhbGxiYWNrKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFN0b3AgbGlzdGVuaW5nIHRvIGEgbWVzc2FnZSBmcm9tIHRoZSBnbG9iYWwgbWVzc2VuZ2VyLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgLSBNZXNzYWdlIHRvIHN0b3AgbGlzdGVuaW5nIGZvci5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gY2FsbGJhY2sgLSBPcHRpb25hbCBjYWxsYmFjayB0byByZW1vdmUuIElmIG5vbmUgaXMgZGVmaW5lZCxcclxuICAgKiByZW1vdmUgYWxsIGNhbGxiYWNrcyBmb3IgdGhlIG1lc3NhZ2UuXHJcbiAgICovXHJcbiAgc3RhdGljIHN0b3BMaXN0ZW5pbmcobWVzc2FnZSwgY2FsbGJhY2spIHtcclxuICAgIG1lc3NhZ2UgPSBgJHt0aGlzLm5hbWV9LiR7bWVzc2FnZX1gO1xyXG4gICAgTWVzc2VuZ2VyLnN0b3BMaXN0ZW5pbmcobWVzc2FnZSwgY2FsbGJhY2spO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU3RvcCBsaXN0ZW5pbmcgdG8gYSBtZXNzYWdlIG1hdGNoaW5nIHRoZSBnaXZlbiByZWd1bGFyIGV4cHJlc3Npb24gZnJvbSB0aGVcclxuICAgKiBob3N0IG9iamVjdC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7UmVnZXhwfSByZWdleHAgLSBUaGUgcmVndWxhciBleHByZXNzaW9uIHRvIHN0b3AgbGlzdGVuaW5nIGZvci5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gY2FsbGJhY2sgLSBPcHRpb25hbCBjYWxsYmFjayB0byByZW1vdmUuIElmIG5vbmUgaXMgZGVmaW5lZCxcclxuICAgKiByZW1vdmUgYWxsIGNhbGxiYWNrcyBmb3IgdGhlIG1lc3NhZ2UuXHJcbiAgICovXHJcbiAgc3RvcExpc3RlbmluZ0J5UmVnZXhwKHJlZ2V4cCwgY2FsbGJhY2spIHtcclxuICAgIHRoaXMuX2hvc3Quc3RvcExpc3RlbmluZ0J5UmVnZXhwKHJlZ2V4cCwgY2FsbGJhY2spO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU3RvcCBsaXN0ZW5pbmcgdG8gYSBtZXNzYWdlIG1hdGNoaW5nIHRoZSBnaXZlbiByZWd1bGFyIGV4cHJlc3Npb24gZnJvbSB0aGVcclxuICAgKiBnbG9iYWwgbWVzc2VuZ2VyLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtSZWdleHB9IHJlZ2V4cCAtIFRoZSByZWd1bGFyIGV4cHJlc3Npb24gdG8gc3RvcCBsaXN0ZW5pbmcgZm9yLlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBjYWxsYmFjayAtIE9wdGlvbmFsIGNhbGxiYWNrIHRvIHJlbW92ZS4gSWYgbm9uZSBpcyBkZWZpbmVkLFxyXG4gICAqIHJlbW92ZSBhbGwgY2FsbGJhY2tzIGZvciB0aGUgbWVzc2FnZS5cclxuICAgKi9cclxuICBzdGF0aWMgc3RvcExpc3RlbmluZ0J5UmVnZXhwKHJlZ2V4cCwgY2FsbGJhY2spIHtcclxuICAgIHJlZ2V4cCA9IG5ldyBSZWdFeHAoYF4ke3RoaXMubmFtZX0uJHtyZWdleHAuc291cmNlLnJlcGxhY2UoL1xcXi8sICcnKX1gKTtcclxuICAgIE1lc3Nlbmdlci5zdG9wTGlzdGVuaW5nQnlSZWdleHAocmVnZXhwLCBjYWxsYmFjayk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTdG9wIGxpc3RlbmluZyB0byBhbGwgbWVzc2FnZXMuXHJcbiAgICovXHJcbiAgc3RvcExpc3RlbmluZ1RvQWxsKCkge1xyXG4gICAgdGhpcy5faG9zdC5zdG9wTGlzdGVuaW5nVG9BbGwoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFN0b3AgbGlzdGVuaW5nIHRvIGFsbCBmZWF0dXJlIG1lc3NhZ2VzLlxyXG4gICAqL1xyXG4gIHN0YXRpYyBzdG9wTGlzdGVuaW5nVG9BbGwoKSB7XHJcbiAgICBNZXNzZW5nZXIuc3RvcExpc3RlbmluZ0J5UmVnZXhwKG5ldyBSZWdFeHAoYF4ke3RoaXMubmFtZX0uYCkpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRW1pdCBmZWF0dXJlIG1lc3NhZ2VzIGZyb20gdGhlIGhvc3QuIEZlYXR1cmUgbWVzc2FnZXMgd2lsbCBiZSBwcmVmaXhlZCB3aXRoXHJcbiAgICogdGhlIGNsYXNzIG5hbWUgb2YgdGhlIGZlYXR1cmUuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSAtIFRoZSBtZXNzYWdlIHRvIGVtaXQuXHJcbiAgICogQHBhcmFtIHthbnk9fSB2YWx1ZSAtIE9wdGlvbmFsIHBhcmFtZXRlciB0byBwYXNzIHRvIGxpc3RlbmVyIGNhbGxiYWNrcy5cclxuICAgKi9cclxuICBlbWl0KG1lc3NhZ2UsIHZhbHVlKSB7XHJcbiAgICBtZXNzYWdlID0gYCR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfS4ke21lc3NhZ2V9YDtcclxuICAgIHRoaXMuX2hvc3QuZW1pdChtZXNzYWdlLCB2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFbWl0IGZlYXR1cmUgbWVzc2FnZXMgZnJvbSB0aGUgZ2xvYmFsIG1lc3Nlbmdlci4gRmVhdHVyZSBtZXNzYWdlcyB3aWxsIGJlIHByZWZpeGVkXHJcbiAgICogd2l0aCB0aGUgY2xhc3MgbmFtZSBvZiB0aGUgZmVhdHVyZS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIC0gVGhlIG1lc3NhZ2UgdG8gZW1pdC5cclxuICAgKiBAcGFyYW0ge2FueT19IHZhbHVlIC0gT3B0aW9uYWwgcGFyYW1ldGVyIHRvIHBhc3MgdG8gbGlzdGVuZXIgY2FsbGJhY2tzLlxyXG4gICAqL1xyXG4gIHN0YXRpYyBlbWl0KG1lc3NhZ2UsIHZhbHVlKSB7XHJcbiAgICBtZXNzYWdlID0gYCR7dGhpcy5uYW1lfS4ke21lc3NhZ2V9YDtcclxuICAgIE1lc3Nlbmdlci5lbWl0KG1lc3NhZ2UsIHZhbHVlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEV4ZWN1dGVzIGVhY2ggdGltZSB0aGUgaG9zdCBpcyB1cGRhdGVkLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IGRlbHRhVGltZSAtIEFtb3VudCBvZiB0aW1lIHNpbmNlIHRoZSBsYXN0IGhvc3QgdXBkYXRlIHdhc1xyXG4gICAqIGNhbGxlZC5cclxuICAgKi9cclxuICB1cGRhdGUoZGVsdGFUaW1lKSB7XHJcbiAgICB0aGlzLmVtaXQodGhpcy5jb25zdHJ1Y3Rvci5FVkVOVFMudXBkYXRlLCBkZWx0YVRpbWUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2xlYW4gdXAgb25jZSB0aGUgZmVhdHVyZSBpcyBubyBsb25nZXIgaW4gdXNlLiBSZW1vdmUgdGhlIGZlYXR1cmUgbmFtZXNwYWNlXHJcbiAgICogZnJvbSB0aGUgaG9zdCBhbmQgcmVtb3ZlIHJlZmVyZW5jZSB0byB0aGUgaG9zdC5cclxuICAgKi9cclxuICBkaXNjYXJkKCkge1xyXG4gICAgT2JqZWN0LmtleXModGhpcy5faG9zdFt0aGlzLmNvbnN0cnVjdG9yLm5hbWVdKS5mb3JFYWNoKG5hbWUgPT4ge1xyXG4gICAgICBkZWxldGUgdGhpcy5faG9zdFt0aGlzLmNvbnN0cnVjdG9yLm5hbWVdW25hbWVdO1xyXG4gICAgfSk7XHJcblxyXG4gICAgZGVsZXRlIHRoaXMuX2hvc3RbdGhpcy5jb25zdHJ1Y3Rvci5uYW1lXTtcclxuICAgIGRlbGV0ZSB0aGlzLl9ob3N0O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQXBwbGllcyBhIHNlcXVlbmNlIG9mIG1peGluIGNsYXNzIGZhY3RvcnkgZnVuY3Rpb25zIHRvIHRoaXMgY2xhc3MgYW5kXHJcbiAgICogcmV0dXJucyB0aGUgcmVzdWx0LiBFYWNoIGZ1bmN0aW9uIGlzIGV4cGVjdGVkIHRvIHJldHVybiBhIGNsYXNzIHRoYXRcclxuICAgKiBleHRlbmRzIHRoZSBjbGFzcyBpdCB3YXMgZ2l2ZW4uIFRoZSBmdW5jdGlvbnMgYXJlIGFwcGxpZWQgaW4gdGhlIG9yZGVyXHJcbiAgICogdGhhdCBwYXJhbWV0ZXJzIGFyZSBnaXZlbiwgbWVhbmluZyB0aGF0IHRoZSBmaXJzdCBmYWN0b3J5IHdpbGxcclxuICAgKiBleHRlbmQgdGhpcyBiYXNlIGNsYXNzLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHsuLi5GdW5jdGlvbn0gbWl4aW5DbGFzc0ZhY3RvcmllcyBDbGFzcyBmYWN0b3J5IGZ1bmN0aW9ucyB0aGF0IHdpbGxcclxuICAgKiBiZSBhcHBsaWVkLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0NsYXNzfSBBIGNsYXNzIHRoYXQgaXMgdGhlIHJlc3VsdCBvZiBhcHBseWluZyB0aGUgZmFjdG9yeSBmdW5jdGlvbnMuXHJcbiAgICogVGhlIHJlc3VsdGluZyBjbGFzcyB3aWxsIGFsd2F5cyBpbmhlcml0IGZyb20gQWJzdHJhY3RIb3N0RmVhdHVyZS5cclxuICAgKi9cclxuICBzdGF0aWMgbWl4KC4uLm1peGluQ2xhc3NGYWN0b3JpZXMpIHtcclxuICAgIGxldCBSZXN1bHRDbGFzcyA9IHRoaXM7XHJcblxyXG4gICAgbWl4aW5DbGFzc0ZhY3Rvcmllcy5mb3JFYWNoKG1peGluQ2xhc3NGYWN0b3J5ID0+IHtcclxuICAgICAgUmVzdWx0Q2xhc3MgPSBtaXhpbkNsYXNzRmFjdG9yeShSZXN1bHRDbGFzcyk7XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gUmVzdWx0Q2xhc3M7XHJcbiAgfVxyXG59XHJcblxyXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhBYnN0cmFjdEhvc3RGZWF0dXJlLCB7XHJcbiAgRVZFTlRTOiB7XHJcbiAgICB2YWx1ZToge1xyXG4gICAgICB1cGRhdGU6ICdvblVwZGF0ZScsXHJcbiAgICB9LFxyXG4gICAgd3JpdGFibGU6IGZhbHNlLFxyXG4gIH0sXHJcbiAgU0VSVklDRVM6IHtcclxuICAgIHZhbHVlOiB7fSxcclxuICAgIHdyaXRhYmxlOiBmYWxzZSxcclxuICB9LFxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IEFic3RyYWN0SG9zdEZlYXR1cmU7XHJcbiIsIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxyXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTBcclxuaW1wb3J0IE1lc3NlbmdlciBmcm9tICdhcHAvTWVzc2VuZ2VyJztcclxuaW1wb3J0IEFic3RyYWN0SG9zdEZlYXR1cmUgZnJvbSAnLi9BYnN0cmFjdEhvc3RGZWF0dXJlJztcclxuaW1wb3J0IFV0aWxzIGZyb20gJy4vVXRpbHMnO1xyXG5cclxuLyoqXHJcbiAqIE9iamVjdCB0aGF0IG1hbmFnZXMgYWNjZXNzIHRvIGFsbCBIb3N0IGZlYXR1cmVzLiBDb250YWlucyBhIHJlZmVyZW5jZSB0b1xyXG4gKiBlbmdpbmUtc3BlY2lmaWMgdmlzdWFscyBpZiBhcHBsaWNhYmxlLlxyXG4gKlxyXG4gKiBAZXh0ZW5kcyBjb3JlL01lc3NlbmdlclxyXG4gKiBAYWxpYXMgY29yZS9Ib3N0T2JqZWN0XHJcbiAqXHJcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBFVkVOVFMgLSBCdWlsdC1pbiBtZXNzYWdlcyB0aGF0IHRoZSBNZXNzZW5nZXIgZW1pdHMuXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbRVZFTlRTLnVwZGF0ZT0nb25VcGRhdGUnXSAtIE1lc3NhZ2UgdGhhdCBpcyBlbWl0dGVkIGFmdGVyXHJcbiAqIGVhY2ggY2FsbCB0byBbdXBkYXRlXXtAbGluayBjb3JlL0hvc3RPYmplY3QjdXBkYXRlfS5cclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtFVkVOVFMuYWRkRmVhdHVyZT0nb25BZGRGZWF0dXJlJ10gLSBNZXNzYWdlIHRoYXQgaXMgZW1pdHRlZFxyXG4gKiBhZnRlciBlYWNoIGNhbGwgdG8gW2FkZEZlYXR1cmVde0BsaW5rIGNvcmUvSG9zdE9iamVjdCNhZGRGZWF0dXJlfS5cclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtFVkVOVFMucmVtb3ZlRmVhdHVyZT0nb25SZW1vdmVGZWF0dXJlJ10gLSBNZXNzYWdlIHRoYXQgaXMgZW1pdHRlZFxyXG4gKiBhZnRlciBlYWNoIGNhbGwgdG8gW3JlbW92ZUZlYXR1cmVde0BsaW5rIGNvcmUvSG9zdE9iamVjdCNyZW1vdmVGZWF0dXJlfS5cclxuICovXHJcbmNsYXNzIEhvc3RPYmplY3QgZXh0ZW5kcyBNZXNzZW5nZXIge1xyXG4gIC8qKlxyXG4gICAqIEBjb25zdHJ1Y3RvclxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtPYmplY3Q9fSBvcHRpb25zIC0gT3B0aW9ucyBmb3IgdGhlIGhvc3QuXHJcbiAgICogQHBhcmFtIHtPYmplY3Q9fSBvcHRpb25zLm93bmVyIC0gT3B0aW9uYWwgZW5naW5lLXNwZWNpZmljIG93bmVyIG9mIHRoZSBob3N0LlxyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKHtvd25lciA9IHt9fSA9IHt9KSB7XHJcbiAgICAvLyBJZiBhbiBvd25lciBpcyBzcGVjaWZpZWQsIHVzZSBpdHMgaWQgZm9yIG1lc3NhZ2luZ1xyXG4gICAgc3VwZXIob3duZXIuaWQpO1xyXG5cclxuICAgIHRoaXMuX293bmVyID0gb3duZXI7XHJcbiAgICB0aGlzLl9mZWF0dXJlcyA9IHt9O1xyXG4gICAgdGhpcy5fd2FpdHMgPSBbXTtcclxuICAgIHRoaXMuX2xhc3RVcGRhdGUgPSB0aGlzLm5vdztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIGVuZ2luZSBvd25lciBvYmplY3Qgb2YgdGhlIGhvc3QuXHJcbiAgICpcclxuICAgKiBAcmVhZG9ubHlcclxuICAgKiBAdHlwZSB7T2JqZWN0fVxyXG4gICAqL1xyXG4gIGdldCBvd25lcigpIHtcclxuICAgIHJldHVybiB0aGlzLl9vd25lcjtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIGN1cnJlbnQgdGltZSBpbiBtaWxsaXNlY29uZHMuXHJcbiAgICpcclxuICAgKiBAcmVhZG9ubHlcclxuICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAqL1xyXG4gIGdldCBub3coKSB7XHJcbiAgICByZXR1cm4gRGF0ZS5ub3coKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIGFtb3VudCBvZiB0aW1lIGluIG1pbGxpc2Vjb25kcyBzaW5jZSB1cGRhdGUgd2FzIGxhc3QgY2FsbGVkLlxyXG4gICAqXHJcbiAgICogQHJlYWRvbmx5XHJcbiAgICogQHR5cGUge251bWJlcn1cclxuICAgKi9cclxuICBnZXQgZGVsdGFUaW1lKCkge1xyXG4gICAgcmV0dXJuIHRoaXMubm93IC0gdGhpcy5fbGFzdFVwZGF0ZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBpbiB0aGUgZW5naW5lJ3MgcmVuZGVyIGxvb3AuIEV4ZWN1dGVzIHVwZGF0ZVxyXG4gICAqIGxvb3BzIGZvciBhbGwgZmVhdHVyZXMuXHJcbiAgICovXHJcbiAgdXBkYXRlKCkge1xyXG4gICAgY29uc3QgY3VycmVudFRpbWUgPSB0aGlzLm5vdztcclxuICAgIGNvbnN0IGR0ID0gdGhpcy5kZWx0YVRpbWU7XHJcblxyXG4gICAgLy8gUHJvZ3Jlc3Mgc3RvcmVkIHdhaXRzXHJcbiAgICB0aGlzLl93YWl0cy5mb3JFYWNoKHdhaXQgPT4ge1xyXG4gICAgICB3YWl0LmV4ZWN1dGUoZHQpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gVXBkYXRlIGFsbCBmZWF0dXJlc1xyXG4gICAgT2JqZWN0LnZhbHVlcyh0aGlzLl9mZWF0dXJlcykuZm9yRWFjaChmZWF0dXJlID0+IHtcclxuICAgICAgZmVhdHVyZS51cGRhdGUoZHQpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gTm90aWZ5IGxpc3RlbmVycyBhbiB1cGRhdGUgb2NjdXJlZFxyXG4gICAgdGhpcy5lbWl0KHRoaXMuY29uc3RydWN0b3IuRVZFTlRTLnVwZGF0ZSwgZHQpO1xyXG5cclxuICAgIHRoaXMuX2xhc3RVcGRhdGUgPSBjdXJyZW50VGltZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiBhIGRlZmVycmVkIHByb21pc2UgdGhhdCB3aWxsIHdhaXQgYSBnaXZlbiBudW1iZXIgb2Ygc2Vjb25kcyBiZWZvcmVcclxuICAgKiByZXNvbHZpbmcuIFRoZSBob3N0IHdpbGwgY29udGludW91c2x5IHVwZGF0ZSB0aGUgd2FpdCBwcm9taXNlIGR1cmluZyB0aGVcclxuICAgKiB1cGRhdGUgbG9vcCB1bnRpbCBpdCByZXNvbHZlcy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbc2Vjb25kcz0wXSAtIE51bWJlciBvZiBzZWNvbmRzIHRvIHdhaXQgYmVmb3JlIHJlc29sdmluZy5cclxuICAgKiBAcGFyYW0ge09iamVjdD19IG9wdGlvbnMgLSBPcHRpb25hbCBvcHRpb25zIG9iamVjdFxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRpb25zLm9uRmluaXNoXSAtIENhbGxiYWNrIHRvIGV4ZWN1dGUgb25jZSB0aGUgd2FpdCB0aW1lXHJcbiAgICogaXMgbWV0LlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvcHRpb25zLm9uUHJvZ3Jlc3MgLSBDYWxsYmFjayB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgd2FpdFxyXG4gICAqIHRpbWUgcHJvZ3Jlc3NlcyB0b3dhcmRzIHRoZSB0YXJnZXQgbnVtYmVyIG9mIHNlY29uZHMuIFRoZSBhbW91bnQgb2YgcHJvZ3Jlc3NcclxuICAgKiBhcyBhIDAtMSBwZXJjZW50YWdlIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudC5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb3B0aW9ucy5vbkNhbmNlbCAtIENhbGxiYWNrIHRvIGV4ZWN1dGUgaWYgdGhlIHVzZXIgY2FuY2Vsc1xyXG4gICAqIHRoZSB3YWl0IGJlZm9yZSBjb21wbGV0aW9uLlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvcHRpb25zLm9uRXJyb3IgLSBDYWxsYmFjayB0byBleGVjdXRlIGlmIHRoZSB3YWl0IHN0b3BzXHJcbiAgICogYmVjYXVzZSBhbiBlcnJvciBpcyBlbmNvdW50ZXJlZC4gVGhlIGVycm9yIG1lc3NhZ2UgaXMgcGFzc2VkIGFzIGEgcGFyYW1ldGVyLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0RlZmVycmVkfVxyXG4gICAqL1xyXG4gIHdhaXQoc2Vjb25kcywge29uRmluaXNoLCBvblByb2dyZXNzLCBvbkNhbmNlbCwgb25FcnJvcn0gPSB7fSkge1xyXG4gICAgY29uc3Qgd2FpdCA9IFV0aWxzLndhaXQoc2Vjb25kcywge29uRmluaXNoLCBvblByb2dyZXNzLCBvbkNhbmNlbCwgb25FcnJvcn0pO1xyXG4gICAgdGhpcy5fd2FpdHMucHVzaCh3YWl0KTtcclxuXHJcbiAgICAvLyBPbmNlIHRoZSB3YWl0IHByb21pc2UgaXMgbm8gbG9uZ2VyIHBlbmRpbmcgcmVtb3ZlIGl0IGZyb20gdGhlIHdhaXRzIGFycmF5XHJcbiAgICBjb25zdCBvbkNvbXBsZXRlID0gKCkgPT4ge1xyXG4gICAgICB0aGlzLl93YWl0cy5zcGxpY2UodGhpcy5fd2FpdHMuaW5kZXhPZih3YWl0KSwgMSk7XHJcbiAgICB9O1xyXG4gICAgd2FpdC50aGVuKG9uQ29tcGxldGUsIG9uQ29tcGxldGUpO1xyXG5cclxuICAgIHJldHVybiB3YWl0O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSW5zdGFudGlhdGUgYSBuZXcgSG9zdCBmZWF0dXJlIGFuZCBzdG9yZSBpdC4gRmVhdHVyZXMgbXVzdCBpbmhlcml0IGZyb21cclxuICAgKiBBYnN0cmFjdEhvc3RGZWF0dXJlLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtDbGFzc30gRmVhdHVyZUNsYXNzIC0gQ2xhc3MgdGhhdCB3aWxsIGluc3RhbnRpYXRlIHRoZSBmZWF0dXJlLiBNdXN0XHJcbiAgICogZXh0ZW5kIHtAbGluayBBYnN0cmFjdEhvc3RGZWF0dXJlfS5cclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtmb3JjZT1mYWxzZV0gLSBXaGV0aGVyIG9yIG5vdCB0byBvdmVyd3JpdGUgYW4gZXhpc3RpbmdcclxuICAgKiBmZWF0dXJlIGlmIG9uZSBvZiB0aGlzIHR5cGUgYWxyZWFkeSBleGlzdHMgb24gdGhlIG9iamVjdC5cclxuICAgKiBAcGFyYW0gIHsuLi5hbnl9IGFyZ3MgLSBBZGRpdGlvbmFsIGFyZ3VtZW50cyB0byBwYXNzIHRvIHRoZSBGZWF0dXJlQ2xhc3NcclxuICAgKiBjb25zdHJ1Y3Rvci4gVGhlIEhvc3RPYmplY3Qgd2lsbCBhbHdheXMgYmUgcGFzc2VkIGFzIHRoZSBmaXJzdCBhcmd1bWVudC5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtib29sZWFufSAtIFdoZXRoZXIgb3Igbm90IGEgZmVhdHVyZSB3YXMgc3VjY2Vzc2Z1bGx5IGFkZGVkLlxyXG4gICAqL1xyXG4gIGFkZEZlYXR1cmUoRmVhdHVyZUNsYXNzLCBmb3JjZSA9IGZhbHNlLCAuLi5hcmdzKSB7XHJcbiAgICBjb25zdCBpbnB1dFR5cGUgPSB0eXBlb2YgRmVhdHVyZUNsYXNzO1xyXG5cclxuICAgIC8vIE1ha2Ugc3VyZSB0aGUgRmVhdHVyZUNsYXNzIGNhbiBiZSBleGVjdXRlZFxyXG4gICAgaWYgKGlucHV0VHlwZSAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgYENhbm5vdCBhZGQgZmVhdHVyZSB0byBob3N0ICR7dGhpcy5pZH0uIEZlYXR1cmVDbGFzcyBtdXN0IGJlIGEgY2xhc3MuYFxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgLy8gTWFrZSBzdXJlIHRoZSBmZWF0dXJlIGlzIGEgaG9zdCBmZWF0dXJlXHJcbiAgICBlbHNlIGlmICghKEZlYXR1cmVDbGFzcy5wcm90b3R5cGUgaW5zdGFuY2VvZiBBYnN0cmFjdEhvc3RGZWF0dXJlKSkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgYENhbm5vdCBhZGQgZmVhdHVyZSAke0ZlYXR1cmVDbGFzcy5uYW1lfSB0byBob3N0ICR7dGhpcy5pZH0uIEZlYXR1cmVDbGFzcyBtdXN0IGV4dGVuZCBBYnN0cmFjdEhvc3RGZWF0dXJlLmBcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBDaGVjayBpZiB0aGUgRmVhdHVyZUNsYXNzIGFscmVhZHkgZXhpc3RzIG9uIHRoaXMgb2JqZWN0XHJcbiAgICBpZiAodGhpcy5fZmVhdHVyZXNbRmVhdHVyZUNsYXNzLm5hbWVdICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgaWYgKGZvcmNlKSB7XHJcbiAgICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgICAgYEZlYXR1cmUgJHtGZWF0dXJlQ2xhc3MubmFtZX0gYWxyZWFkeSBleGlzdHMgb24gaG9zdCAke3RoaXMuaWR9LiBFeGlzdGluZyBmZWF0dXJlIHdpbGwgYmUgb3ZlcndyaXR0ZW4uYFxyXG4gICAgICAgICk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgICAgYEZlYXR1cmUgJHtGZWF0dXJlQ2xhc3MubmFtZX0gYWxyZWFkeSBleGlzdHMgb24gaG9zdCAke3RoaXMuaWR9LiBVc2UgJ2ZvcmNlJyBhcmd1bWVudCB0byBvdmVyd3JpdGUgdGhlIGZlYXR1cmUuYFxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBJbml0aWFsaXplIHRoZSBmZWF0dXJlXHJcbiAgICBjb25zdCBmZWF0dXJlID0gbmV3IEZlYXR1cmVDbGFzcyh0aGlzLCAuLi5hcmdzKTtcclxuICAgIGZlYXR1cmUuaW5zdGFsbEFwaSgpO1xyXG5cclxuICAgIHRoaXMuX2ZlYXR1cmVzW0ZlYXR1cmVDbGFzcy5uYW1lXSA9IGZlYXR1cmU7XHJcbiAgICB0aGlzLmVtaXQodGhpcy5jb25zdHJ1Y3Rvci5FVkVOVFMuYWRkRmVhdHVyZSwgRmVhdHVyZUNsYXNzLm5hbWUpO1xyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVtb3ZlIGEgZmVhdHVyZSBmcm9tIHRoZSBvYmplY3QuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdHlwZU5hbWUgLSBOYW1lIG9mIHRoZSB0eXBlIG9mIGZlYXR1cmUgdG8gcmVtb3ZlLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge2Jvb2xlYW59IC0gV2hldGhlciBvciBub3QgYSBmZWF0dXJlIHdhcyBzdWNjZXNzZnVsbHkgcmVtb3ZlZC5cclxuICAgKi9cclxuICByZW1vdmVGZWF0dXJlKHR5cGVOYW1lKSB7XHJcbiAgICBpZiAodGhpcy5fZmVhdHVyZXNbdHlwZU5hbWVdID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgIGBGZWF0dXJlIG9mIHR5cGUgJHt0eXBlTmFtZX0gZG9lcyBub3QgZXhpc3Qgb24gaG9zdCAke3RoaXMuaWR9LiBObyBmZWF0dXJlIHdpbGwgYmUgcmVtb3ZlZC5gXHJcbiAgICAgICk7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIFJlbW92ZSB0aGUgZmVhdHVyZVxyXG4gICAgICB0aGlzLmVtaXQodGhpcy5jb25zdHJ1Y3Rvci5FVkVOVFMucmVtb3ZlRmVhdHVyZSwgdHlwZU5hbWUpO1xyXG4gICAgICB0aGlzLl9mZWF0dXJlc1t0eXBlTmFtZV0uZGlzY2FyZCgpO1xyXG4gICAgICBkZWxldGUgdGhpcy5fZmVhdHVyZXNbdHlwZU5hbWVdO1xyXG5cclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJbmRpY2F0ZSB3aGV0aGVyIGEgc3BlY2lmaWVkIGZlYXR1cmUgaXMgaW5zdGFsbGVkIG9uIHRoZSBob3N0LlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHR5cGVOYW1lIC0gTmFtZSBvZiB0aGUgdHlwZSBvZiBmZWF0dXJlIHRvIGxvb2sgZm9yLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAgICovXHJcbiAgaGFzRmVhdHVyZSh0eXBlTmFtZSkge1xyXG4gICAgcmV0dXJuICEhdGhpcy5fZmVhdHVyZXNbdHlwZU5hbWVdO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTGlzdCB0aGUgbmFtZXMgb2YgdGhlIGZlYXR1cmVzIGluc3RhbGxlZCBvbiB0aGUgaG9zdC5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtBcnJheS48c3RyaW5nPn1cclxuICAgKi9cclxuICBsaXN0RmVhdHVyZXMoKSB7XHJcbiAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5fZmVhdHVyZXMpO1xyXG4gIH1cclxufVxyXG5cclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhvc3RPYmplY3QsICdFVkVOVFMnLCB7XHJcbiAgdmFsdWU6IHtcclxuICAgIC4uLk9iamVjdC5nZXRQcm90b3R5cGVPZihIb3N0T2JqZWN0KS5FVkVOVFMsXHJcbiAgICB1cGRhdGU6ICdvblVwZGF0ZScsXHJcbiAgICBhZGRGZWF0dXJlOiAnb25BZGRGZWF0dXJlJyxcclxuICAgIHJlbW92ZUZlYXR1cmU6ICdvblJlbW92ZUZlYXR1cmUnLFxyXG4gIH0sXHJcbiAgd3JpdGFibGU6IGZhbHNlLFxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IEhvc3RPYmplY3Q7XHJcbiIsIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxyXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTBcclxuXHJcbi8qKlxyXG4gKiBUaHJlZWpzIENsb2NrIG9iamVjdFxyXG4gKlxyXG4gKiBAZXh0ZXJuYWwgXCJUSFJFRS5DbG9ja1wiXHJcbiAqIEBzZWUgaHR0cHM6Ly90aHJlZWpzLm9yZy9kb2NzLyNhcGkvZW4vY29yZS9DbG9ja1xyXG4gKi9cclxuXHJcbmltcG9ydCBDb3JlSG9zdE9iamVjdCBmcm9tICdjb3JlL0hvc3RPYmplY3QnO1xyXG5cclxuLyoqXHJcbiAqIEBhbGlhcyB0aHJlZS5qcy9Ib3N0T2JqZWN0XHJcbiAqIEBleHRlbmRzIGNvcmUvSG9zdE9iamVjdFxyXG4gKi9cclxuY2xhc3MgSG9zdE9iamVjdCBleHRlbmRzIENvcmVIb3N0T2JqZWN0IHtcclxuICAvKipcclxuICAgKiBAY29uc3RydWN0b3JcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0PX0gb3B0aW9ucyAtIE9wdGlvbnMgZm9yIHRoZSBob3N0LlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0PX0gb3B0aW9ucy5vd25lciAtIE9wdGlvbmFsIGVuZ2luZS1zcGVjaWZpYyBvd25lciBvZiB0aGUgaG9zdC5cclxuICAgKiBAcGFyYW0ge2V4dGVybmFsOlwiVEhSRUUuQ2xvY2tcIj19IG9wdGlvbnMuY2xvY2sgLSBPcHRpb25hbCBjbG9jayB0byBtYW5hZ2UgdGltZS5cclxuICAgKi9cclxuICBjb25zdHJ1Y3RvcihvcHRpb25zID0ge30pIHtcclxuICAgIHN1cGVyKG9wdGlvbnMpO1xyXG5cclxuICAgIHRoaXMuX2Nsb2NrID0gb3B0aW9ucy5jbG9jaztcclxuXHJcbiAgICBpZiAodGhpcy5fY2xvY2spIHtcclxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdub3cnLCB7XHJcbiAgICAgICAgZ2V0OiAoKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5fY2xvY2suZ2V0RWxhcHNlZFRpbWUoKSAqIDEwMDA7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcblxyXG4gICAgICB0aGlzLl9sYXN0VXBkYXRlID0gdGhpcy5ub3c7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBIb3N0T2JqZWN0O1xyXG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWNsYXNzZXMtcGVyLWZpbGUgKi9cbmltcG9ydCBIb3N0T2JqZWN0IGZyb20gJ2FwcC9Ib3N0T2JqZWN0JztcblxuLyoqXG4gKiBDbGFzcyBmYWN0b3J5IGludGVyZmFjZSBmb3IgZmVhdHVyZXMgdGhhdCBhcmUgZGVwZW5kZW50IG9uIG90aGVyIGZlYXR1cmVzIGJlaW5nXG4gKiBwcmVzZW50IG9uIHRoZSBob3N0LiBFdmVudCBkZXBlbmRlbmNpZXMgd2lsbCBiZSBsaXN0ZW5lZCBmb3Igd2hlbiBhIGZlYXR1cmUgb2ZcbiAqIG1hdGNoaW5nIHR5cGUgaXMgYWRkZWQgdG8gdGhlIGhvc3QgYW5kIHdpbGwgc3RvcCBiZWluZyBsaXN0ZW5lZCBmb3Igd2hlbiBvbmVcbiAqIGlzIHJlbW92ZWQuIElmIHRoZSBmZWF0dXJlIGlzIGFscmVhZHkgcHJlc2VudCB3aGVuIGNvbnN0cnVjdGVkLCBldmVudHMgd2lsbFxuICogYmUgbGlzdGVuZWQgZm9yIHJpZ2h0IGF3YXkuXG4gKlxuICogQGludGVyZmFjZVxuICpcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBFVkVOVF9ERVBFTkRFTkNJRVMgLSBFdmVudHMgdGhhdCB0aGUgZmVhdHVyZSBzaG91bGQgc3RhcnQvc3RvcFxuICogbGlzdGVuaW5nIGZvciB3aGVuIGEgZmVhdHVyZSBvZiB0eXBlIEZlYXR1cmVOYW1lIGlzIGFkZGVkL3JlbW92ZWQgZnJvbSB0aGUgaG9zdC5cbiAqIEV2ZW50IGRlcGVuZGVuY2llcyBzaG91bGQgZm9sbG93IHRoZSBzaWduYXR1cmU6XG4gKiAgeyBGZWF0dXJlTmFtZTogeyBldmVudE5hbWU6IGNhbGxiYWNrTmFtZSwgLi4uIH0sIC4uLiB9XG4gKi9cbmNsYXNzIEZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2Uge1xuICAvKipcbiAgICogU3RhcnQgbGlzdGVuaW5nIGZvciBldmVudCBkZXBlbmRlbmNpZXMgdGhhdCBtYXRjaCB0aGUgZ2l2ZW4gZmVhdHVyZSB0eXBlLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdHlwZU5hbWUgLSB0eXBlIG9mIGZlYXR1cmUgdG8gbGlzdGVuIGZvci5cbiAgICovXG4gIF9vbkZlYXR1cmVBZGRlZCh0eXBlTmFtZSkge31cblxuICAvKipcbiAgICogU3RvcCBsaXN0ZW5pbmcgZm9yIGV2ZW50IGRlcGVuZGVuY2llcyB0aGF0IG1hdGNoIHRoZSBnaXZlbiBmZWF0dXJlIHR5cGUuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlTmFtZSAtIHR5cGUgb2YgZmVhdHVyZSB0byBzdG9wIGxpc3RlbmluZyBmb3IuXG4gICAqL1xuICBfb25GZWF0dXJlUmVtb3ZlZCh0eXBlTmFtZSkge31cblxuICAvKipcbiAgICogQGF1Z21lbnRzIHtAbGluayBBYnN0cmFjdEhvc3RGZWF0dXJlI2Rpc2NhcmR9XG4gICAqL1xuICBkaXNjYXJkKCkge31cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIGNsYXNzIHRoYXQgaW1wbGVtZW50cyB7QGxpbmsgRmVhdHVyZURlcGVuZGVudEludGVyZmFjZX0gYW5kIGV4dGVuZHNcbiAgICogYSBzcGVjaWZpZWQgYmFzZSBjbGFzcy5cbiAgICpcbiAgICogQHBhcmFtIHtDbGFzc30gQmFzZUNsYXNzIC0gVGhlIGNsYXNzIHRvIGV4dGVuZC5cbiAgICpcbiAgICogQHJldHVybiB7Q2xhc3N9IEEgY2xhc3MgdGhhdCBleHRlbmRzIGBCYXNlQ2xhc3NgIGFuZCBpbXBsZW1lbnRzIHtAbGluayBGZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlfS5cbiAgICovXG4gIHN0YXRpYyBNaXhpbihCYXNlQ2xhc3MpIHtcbiAgICBjb25zdCBGZWF0dXJlRGVwZW5kZW50TWl4aW4gPSBjbGFzcyBleHRlbmRzIEJhc2VDbGFzcyB7XG4gICAgICBjb25zdHJ1Y3Rvcihob3N0KSB7XG4gICAgICAgIHN1cGVyKGhvc3QpO1xuICAgICAgICB0aGlzLl9ob3N0ID0gaG9zdDtcblxuICAgICAgICAvLyBObyBuZWVkIHRvIGxpc3RlbiBmb3IgZXZlbnRzIGlmIHRoZSBtaXhpbiBpcyBpbiB0aGUgcHJvdG90eXBlIGNoYWluIG11bHRpcGxlIHRpbWVzXG4gICAgICAgIGlmICghdGhpcy5faW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgICB0aGlzLl9pbml0aWFsaXplZCA9IHRydWU7XG5cbiAgICAgICAgICAvLyBTdGFydCBsaXN0ZW5pbmcgZm9yIGZlYXR1cmUgZXZlbnRzXG4gICAgICAgICAgdGhpcy5fb25GZWF0dXJlQWRkZWQgPSB0aGlzLl9vbkZlYXR1cmVBZGRlZC5iaW5kKHRoaXMpO1xuICAgICAgICAgIHRoaXMuX29uRmVhdHVyZVJlbW92ZWQgPSB0aGlzLl9vbkZlYXR1cmVSZW1vdmVkLmJpbmQodGhpcyk7XG5cbiAgICAgICAgICB0aGlzLl9ob3N0Lmxpc3RlblRvKFxuICAgICAgICAgICAgSG9zdE9iamVjdC5FVkVOVFMuYWRkRmVhdHVyZSxcbiAgICAgICAgICAgIHRoaXMuX29uRmVhdHVyZUFkZGVkXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0aGlzLl9ob3N0Lmxpc3RlblRvKFxuICAgICAgICAgICAgSG9zdE9iamVjdC5FVkVOVFMucmVtb3ZlRmVhdHVyZSxcbiAgICAgICAgICAgIHRoaXMuX29uRmVhdHVyZVJlbW92ZWRcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgLy8gUmVnaXN0ZXIgZmVhdHVyZXMgdGhhdCBhbHJlYWR5IGV4aXN0XG4gICAgICAgICAgT2JqZWN0LmtleXModGhpcy5jb25zdHJ1Y3Rvci5FVkVOVF9ERVBFTkRFTkNJRVMpLmZvckVhY2godHlwZU5hbWUgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2hvc3RbdHlwZU5hbWVdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgdGhpcy5fb25GZWF0dXJlQWRkZWQodHlwZU5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIF9vbkZlYXR1cmVBZGRlZCh0eXBlTmFtZSkge1xuICAgICAgICBpZiAodGhpcy5jb25zdHJ1Y3Rvci5FVkVOVF9ERVBFTkRFTkNJRVNbdHlwZU5hbWVdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBjb25zdCBldmVudHMgPSB0aGlzLmNvbnN0cnVjdG9yLkVWRU5UX0RFUEVOREVOQ0lFU1t0eXBlTmFtZV07XG5cbiAgICAgICAgICBPYmplY3QuZW50cmllcyhldmVudHMpLmZvckVhY2goKFtldmVudE5hbWUsIGNhbGxiYWNrXSkgPT4ge1xuICAgICAgICAgICAgdGhpc1tjYWxsYmFja10gPSB0aGlzW2NhbGxiYWNrXS5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5faG9zdC5saXN0ZW5UbyhcbiAgICAgICAgICAgICAgdGhpcy5faG9zdFt0eXBlTmFtZV0uRVZFTlRTW2V2ZW50TmFtZV0sXG4gICAgICAgICAgICAgIHRoaXNbY2FsbGJhY2tdXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIF9vbkZlYXR1cmVSZW1vdmVkKHR5cGVOYW1lKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbnN0cnVjdG9yLkVWRU5UX0RFUEVOREVOQ0lFU1t0eXBlTmFtZV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGNvbnN0IGV2ZW50cyA9IHRoaXMuY29uc3RydWN0b3IuRVZFTlRfREVQRU5ERU5DSUVTW3R5cGVOYW1lXTtcblxuICAgICAgICAgIE9iamVjdC5lbnRyaWVzKGV2ZW50cykuZm9yRWFjaCgoW2V2ZW50TmFtZSwgY2FsbGJhY2tdKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9ob3N0LnN0b3BMaXN0ZW5pbmcoXG4gICAgICAgICAgICAgIHRoaXMuX2hvc3RbdHlwZU5hbWVdLkVWRU5UU1tldmVudE5hbWVdLFxuICAgICAgICAgICAgICB0aGlzW2NhbGxiYWNrXVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBkaXNjYXJkKCkge1xuICAgICAgICAvLyBTdG9wIGxpc3RlbmluZyBmb3IgZmVhdHVyZSBldmVudHNcbiAgICAgICAgdGhpcy5faG9zdC5zdG9wTGlzdGVuaW5nKFxuICAgICAgICAgIEhvc3RPYmplY3QuRVZFTlRTLmFkZEZlYXR1cmUsXG4gICAgICAgICAgdGhpcy5fb25GZWF0dXJlQWRkZWRcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5faG9zdC5zdG9wTGlzdGVuaW5nKFxuICAgICAgICAgIEhvc3RPYmplY3QuRVZFTlRTLnJlbW92ZUZlYXR1cmUsXG4gICAgICAgICAgdGhpcy5fb25GZWF0dXJlUmVtb3ZlZFxuICAgICAgICApO1xuXG4gICAgICAgIC8vIFN0b3AgbGlzdGVuaW5nIHRvIGZlYXR1cmUtc3BlY2lmaWMgZXZlbnRzXG4gICAgICAgIE9iamVjdC5rZXlzKHRoaXMuY29uc3RydWN0b3IuRVZFTlRfREVQRU5ERU5DSUVTKS5mb3JFYWNoKHR5cGVOYW1lID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5faG9zdFt0eXBlTmFtZV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5fb25GZWF0dXJlUmVtb3ZlZCh0eXBlTmFtZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBzdXBlci5kaXNjYXJkKCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IEVWRU5UX0RFUEVOREVOQ0lFUyA9IEJhc2VDbGFzcy5FVkVOVF9ERVBFTkRFTkNJRVMgfHwge307XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhGZWF0dXJlRGVwZW5kZW50TWl4aW4sIHtcbiAgICAgIEVWRU5UX0RFUEVOREVOQ0lFUzoge1xuICAgICAgICB2YWx1ZToge1xuICAgICAgICAgIC4uLkVWRU5UX0RFUEVOREVOQ0lFUyxcbiAgICAgICAgfSxcbiAgICAgICAgd3JpdGFibGU6IGZhbHNlLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBGZWF0dXJlRGVwZW5kZW50TWl4aW47XG4gIH1cbn1cblxuLyoqXG4gKiBFdmVudCBkZXBlbmRlbmNpZXMgc2hvdWxkIGZvbGxvdyB0aGUgc2lnbmF0dXJlOlxuICoge1xuICogIEZlYXR1cmVOYW1lOiB7XG4gKiAgICAvLyBFdmVudHMgdGhhdCB0aGUgZmVhdHVyZSBzaG91bGQgc3RhcnQvc3RvcCBsaXN0ZW5pbmcgZm9yIHdoZW4gYSBmZWF0dXJlXG4gKiAgICAvLyBvZiB0eXBlIEZlYXR1cmVOYW1lIGlzIGFkZGVkL3JlbW92ZWQgZnJvbSB0aGUgaG9zdFxuICogICAge1xuICogICAgICBldmVudE5hbWU6IGNhbGxiYWNrTmFtZSxcbiAqICAgICAgLi4uXG4gKiAgICB9LFxuICogIH1cbiAqIH1cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRmVhdHVyZURlcGVuZGVudEludGVyZmFjZSwge1xuICBFVkVOVF9ERVBFTkRFTkNJRVM6IHtcbiAgICB2YWx1ZToge30sXG4gICAgd3JpdGFibGU6IGZhbHNlLFxuICB9LFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IEZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2U7XG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWNsYXNzZXMtcGVyLWZpbGUgKi9cbmltcG9ydCBGZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlIGZyb20gJ2NvcmUvRmVhdHVyZURlcGVuZGVudEludGVyZmFjZSc7XG5cbi8qKlxuICogQ2xhc3MgZmFjdG9yeSBpbnRlcmZhY2UgZm9yIGZlYXR1cmVzIHRoYXQgYXJlIGRlcGVuZGVudCBvbiB0aGUgQW5pbWF0aW9uRmVhdHVyZVxuICogYmVpbmcgcHJlc2VudCBvbiB0aGUgaG9zdC4gTGF5ZXIgYW5kIGFuaW1hdGlvbiBldmVudHMgd2lsbCBhdXRvbWF0aWNhbGx5IGJlXG4gKiBsaXN0ZW5lZCBmb3Igb25jZSBhIEFuaW1hdGlvbkZlYXR1cmUgaXMgYWRkZWQgdG8gdGhlIGhvc3QgYW5kIHN0b3BwZWQgb25jZSBpdFxuICogaXMgcmVtb3ZlZC5cbiAqXG4gKiBAaW50ZXJmYWNlXG4gKiBAZXh0ZW5kcyBGZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlXG4gKlxuICogQHByb3BlcnR5IHtPYmplY3R9IEVWRU5UX0RFUEVOREVOQ0lFUyAtIEV2ZW50cyB0aGF0IHRoZSBmZWF0dXJlIHNob3VsZCBzdGFydC9zdG9wXG4gKiBsaXN0ZW5pbmcgZm9yIHdoZW4gYSBmZWF0dXJlIG9mIHR5cGUgRmVhdHVyZU5hbWUgaXMgYWRkZWQvcmVtb3ZlZCBmcm9tIHRoZSBob3N0LlxuICogQHByb3BlcnR5IHtPYmplY3R9IEVWRU5UX0RFUEVOREVOQ0lFUy5BbmltYXRpb25GZWF0dXJlIC0gRXZlbnRzIHRoYXQgYXJlXG4gKiBzcGVjaWZpYyB0byB0aGUgQW5pbWF0aW9uRmVhdHVyZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbRVZFTlRfREVQRU5ERU5DSUVTLkFuaW1hdGlvbkZlYXR1cmUuYWRkTGF5ZXI9J19vbkxheWVyQWRkZWQnXSAtXG4gKiBUaGUgbmFtZSBvZiB0aGUgbWV0aG9kIHRoYXQgd2lsbCBiZSBleGVjdXRlZCB3aGVuIEFuaW1hdGlvbkZlYXR1cmUgYWRkTGF5ZXJcbiAqIGV2ZW50cyBhcmUgZW1pdHRlZC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbRVZFTlRfREVQRU5ERU5DSUVTLkFuaW1hdGlvbkZlYXR1cmUucmVtb3ZlTGF5ZXI9J19vbkxheWVyUmVtb3ZlZCddIC1cbiAqIFRoZSBuYW1lIG9mIHRoZSBtZXRob2QgdGhhdCB3aWxsIGJlIGV4ZWN1dGVkIHdoZW4gQW5pbWF0aW9uRmVhdHVyZSByZW1vdmVMYXllclxuICogZXZlbnRzIGFyZSBlbWl0dGVkLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtFVkVOVF9ERVBFTkRFTkNJRVMuQW5pbWF0aW9uRmVhdHVyZS5yZW5hbWVMYXllcj0nX29uTGF5ZXJSZW5hbWVkJ10gLVxuICogVGhlIG5hbWUgb2YgdGhlIG1ldGhvZCB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQgd2hlbiBBbmltYXRpb25GZWF0dXJlIHJlbmFtZUxheWVyXG4gKiBldmVudHMgYXJlIGVtaXR0ZWQuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW0VWRU5UX0RFUEVOREVOQ0lFUy5BbmltYXRpb25GZWF0dXJlLmFkZEFuaW1hdGlvbj0nX29uQW5pbWF0aW9uQWRkZWQnXSAtXG4gKiBUaGUgbmFtZSBvZiB0aGUgbWV0aG9kIHRoYXQgd2lsbCBiZSBleGVjdXRlZCB3aGVuIEFuaW1hdGlvbkZlYXR1cmUgYWRkQW5pbWF0aW9uXG4gKiBldmVudHMgYXJlIGVtaXR0ZWQuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW0VWRU5UX0RFUEVOREVOQ0lFUy5BbmltYXRpb25GZWF0dXJlLnJlbW92ZUFuaW1hdGlvbj0nX29uQW5pbWF0aW9uUmVtb3ZlZCddIC1cbiAqIFRoZSBuYW1lIG9mIHRoZSBtZXRob2QgdGhhdCB3aWxsIGJlIGV4ZWN1dGVkIHdoZW4gQW5pbWF0aW9uRmVhdHVyZSByZW1vdmVBbmltYXRpb25cbiAqIGV2ZW50cyBhcmUgZW1pdHRlZC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbRVZFTlRfREVQRU5ERU5DSUVTLkFuaW1hdGlvbkZlYXR1cmUucmVuYW1lQW5pbWF0aW9uPSdfb25BbmltYXRpb25SZW5hbWVkJ10gLVxuICogVGhlIG5hbWUgb2YgdGhlIG1ldGhvZCB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQgd2hlbiBBbmltYXRpb25GZWF0dXJlIHJlbmFtZUFuaW1hdGlvblxuICogZXZlbnRzIGFyZSBlbWl0dGVkLlxuICovXG5jbGFzcyBBbmltYXRpb25GZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlIGV4dGVuZHMgRmVhdHVyZURlcGVuZGVudEludGVyZmFjZSB7XG4gIC8qKlxuICAgKiBFeGVjdXRlZCB3aGVuIGFuaW1hdGlvbiBsYXllciBhZGRlZCBldmVudHMgYXJlIGNhdWdodC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBOYW1lIG9mIHRoZSBsYXllciB0aGF0IHdhcyBhZGRlZC5cbiAgICovXG4gIF9vbkxheWVyQWRkZWQoe25hbWV9KSB7fVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlZCB3aGVuIGFuaW1hdGlvbiBsYXllciByZW1vdmVkIGV2ZW50cyBhcmUgY2F1Z2h0LlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRoYXQgd2FzIHJlbW92ZWQuXG4gICAqL1xuICBfb25MYXllclJlbW92ZWQoe25hbWV9KSB7fVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlZCB3aGVuIGFuaW1hdGlvbiBsYXllciByZW5hbWVkIGV2ZW50cyBhcmUgY2F1Z2h0LlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gb2xkTmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRoYXQgd2FzIHJlbmFtZWQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuZXdOYW1lIC0gTmV3IG5hbWUgb2YgdGhlIGxheWVyLlxuICAgKi9cbiAgX29uTGF5ZXJSZW5hbWVkKHtvbGROYW1lLCBuZXdOYW1lfSkge31cblxuICAvKipcbiAgICogRXhlY3V0ZWQgd2hlbiBhbmltYXRpb24gYWRkZWQgZXZlbnRzIGFyZSBjYXVnaHQuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllck5hbWUgLSBOYW1lIG9mIHRoZSBsYXllciB0aGF0IGFuIGFuaW1hdGlvbiB3YXMgYWRkZWQgdG8uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhbmltYXRpb25OYW1lIC0gTmFtZSBvZiB0aGUgYW5pbWF0aW9uIHRoYXQgd2FzIGFkZGVkLlxuICAgKi9cbiAgX29uQW5pbWF0aW9uQWRkZWQoe2xheWVyTmFtZSwgYW5pbWF0aW9uTmFtZX0pIHt9XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGVkIHdoZW4gYW5pbWF0aW9uIHJlbW92ZWQgZXZlbnRzIGFyZSBjYXVnaHQuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllck5hbWUgLSBOYW1lIG9mIHRoZSBsYXllciB0aGF0IGFuIGFuaW1hdGlvbiB3YXMgcmVtb3ZlZCBmcm9tLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYW5pbWF0aW9uTmFtZSAtIE5hbWUgb2YgdGhlIGFuaW1hdGlvbiB0aGF0IHdhcyByZW1vdmVkLlxuICAgKi9cbiAgX29uQW5pbWF0aW9uUmVtb3ZlZCh7bGF5ZXJOYW1lLCBhbmltYXRpb25OYW1lfSkge31cblxuICAvKipcbiAgICogRXhlY3V0ZWQgd2hlbiBhbmltYXRpb24gcmVuYW1lZCBldmVudHMgYXJlIGNhdWdodC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVyTmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRoYXQgYW4gYW5pbWF0aW9uIGJlbG9uZ3MgdG8uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvbGROYW1lIC0gTmFtZSBvZiB0aGUgYW5pbWF0aW9uIHRoYXQgd2FzIHJlbmFtZWQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuZXdOYW1lIC0gTmV3IG5hbWUgb2YgdGhlIGFuaW1hdGlvbi5cbiAgICovXG4gIF9vbkFuaW1hdGlvblJlbmFtZWQoe2xheWVyTmFtZSwgb2xkTmFtZSwgbmV3TmFtZX0pIHt9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBjbGFzcyB0aGF0IGltcGxlbWVudHMge0BsaW5rIEFuaW1hdGlvbkZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2V9XG4gICAqIGFuZCBleHRlbmRzIGEgc3BlY2lmaWVkIGJhc2UgY2xhc3MuXG4gICAqXG4gICAqIEBwYXJhbSB7Q2xhc3N9IEJhc2VDbGFzcyAtIFRoZSBjbGFzcyB0byBleHRlbmQuXG4gICAqXG4gICAqIEByZXR1cm4ge0NsYXNzfSBBIGNsYXNzIHRoYXQgZXh0ZW5kcyBgQmFzZUNsYXNzYCBhbmQgaW1wbGVtZW50cyB7QGxpbmsgQW5pbWF0aW9uRmVhdHVyZURlcGVuZGVudEludGVyZmFjZX0uXG4gICAqL1xuICBzdGF0aWMgTWl4aW4oQmFzZUNsYXNzKSB7XG4gICAgY29uc3QgUGFyZW50Q2xhc3MgPSBGZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlLk1peGluKEJhc2VDbGFzcyk7XG4gICAgY29uc3QgQW5pbWF0aW9uRmVhdHVyZURlcGVuZGVudE1peGluID0gY2xhc3MgZXh0ZW5kcyBQYXJlbnRDbGFzcyB7XG4gICAgICBfb25MYXllckFkZGVkKHtuYW1lfSkge31cblxuICAgICAgX29uTGF5ZXJSZW1vdmVkKHtuYW1lfSkge31cblxuICAgICAgX29uTGF5ZXJSZW5hbWVkKHtvbGROYW1lLCBuZXdOYW1lfSkge31cblxuICAgICAgX29uQW5pbWF0aW9uQWRkZWQoe2xheWVyTmFtZSwgYW5pbWF0aW9uTmFtZX0pIHt9XG5cbiAgICAgIF9vbkFuaW1hdGlvblJlbW92ZWQoe2xheWVyTmFtZSwgYW5pbWF0aW9uTmFtZX0pIHt9XG5cbiAgICAgIF9vbkFuaW1hdGlvblJlbmFtZWQoe2xheWVyTmFtZSwgb2xkTmFtZSwgbmV3TmFtZX0pIHt9XG4gICAgfTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEFuaW1hdGlvbkZlYXR1cmVEZXBlbmRlbnRNaXhpbiwge1xuICAgICAgRVZFTlRfREVQRU5ERU5DSUVTOiB7XG4gICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgLi4uUGFyZW50Q2xhc3MuRVZFTlRfREVQRU5ERU5DSUVTLFxuICAgICAgICAgIC4uLkFuaW1hdGlvbkZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2UuRVZFTlRfREVQRU5ERU5DSUVTLFxuICAgICAgICB9LFxuICAgICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIEFuaW1hdGlvbkZlYXR1cmVEZXBlbmRlbnRNaXhpbjtcbiAgfVxufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhBbmltYXRpb25GZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlLCB7XG4gIEVWRU5UX0RFUEVOREVOQ0lFUzoge1xuICAgIHZhbHVlOiB7XG4gICAgICBBbmltYXRpb25GZWF0dXJlOiB7XG4gICAgICAgIGFkZExheWVyOiAnX29uTGF5ZXJBZGRlZCcsXG4gICAgICAgIHJlbW92ZUxheWVyOiAnX29uTGF5ZXJSZW1vdmVkJyxcbiAgICAgICAgcmVuYW1lTGF5ZXI6ICdfb25MYXllclJlbmFtZWQnLFxuICAgICAgICBhZGRBbmltYXRpb246ICdfb25BbmltYXRpb25BZGRlZCcsXG4gICAgICAgIHJlbW92ZUFuaW1hdGlvbjogJ19vbkFuaW1hdGlvblJlbW92ZWQnLFxuICAgICAgICByZW5hbWVBbmltYXRpb246ICdfb25BbmltYXRpb25SZW5hbWVkJyxcbiAgICAgIH0sXG4gICAgfSxcbiAgICB3cml0YWJsZTogZmFsc2UsXG4gIH0sXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgQW5pbWF0aW9uRmVhdHVyZURlcGVuZGVudEludGVyZmFjZTtcbiIsIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVC0wXG5cbi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtY2xhc3Nlcy1wZXItZmlsZSAqL1xuaW1wb3J0IEFuaW1hdGlvbkZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2UgZnJvbSAnY29yZS9hbmltcGFjay9BbmltYXRpb25GZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlJztcblxuLyoqXG4gKiBDbGFzcyBmYWN0b3J5IGludGVyZmFjZSBmb3IgdGhhdCBrZWVwcyB0cmFjayBvZiBsYXllcnMgYW5kIGFuaW1hdGlvbnMgb24gYSBob3N0LlxuICogVHJhY2tlZCBhc3NldHMgYXJlIG1hcmtlZCBhcyBpbmFjdGl2ZSB1bnRpbCBsYXllcnMgYW5kIGFuaW1hdGlvbnMgd2l0aCBtYXRjaGluZ1xuICogbmFtZXMgYXJlIGRldGVjdGVkIGFzIHByZXNlbnQgb24gdGhlIGhvc3QuXG4gKlxuICogQGludGVyZmFjZVxuICogQGV4dGVuZHMgQW5pbWF0aW9uRmVhdHVyZURlcGVuZGVudEludGVyZmFjZVxuICpcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBERUZBVUxUX0xBWUVSX09QVElPTlMgLSBEZWZhdWx0IG9wdGlvbnMgdG8gdXNlIHdoZW4gZXhlY3V0aW5nXG4gKiB7QGxpbmsgQW5pbWF0aW9uTGF5ZXJ9IG1ldGhvZHMuXG4gKiBAcHJvcGVydHkge251bWJlcn0gW0RFRkFVTFRfTEFZRVJfT1BUSU9OUy5ibGVuZFRpbWU9MC41XSAtIERlZmF1bHQgdGltZSBpbiBzZWNvbmRzXG4gKiB0byB1c2Ugd2hlbiBleGVjdXRpbmcge0BsaW5rIEFuaW1hdGlvbkxheWVyLnNldEJsZW5kV2VpZ2h0fS5cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBbREVGQVVMVF9MQVlFUl9PUFRJT05TLmFuaW1hdGlvbnM9e31dIC0gTWFwcyBhbmltYXRpb24gbmFtZXNcbiAqIHRvIGRlZmF1bHQgb3B0aW9ucyBvYmplY3RzIHRvIHVzZSBmb3IgbWFuYWdlZCBhbmltYXRpb25zLlxuICovXG5jbGFzcyBNYW5hZ2VkQW5pbWF0aW9uTGF5ZXJJbnRlcmZhY2UgZXh0ZW5kcyBBbmltYXRpb25GZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlIHtcbiAgLyoqXG4gICAqIFN0YXJ0IHRyYWNraW5nIGtlZXBpbmcgdHJhY2sgb2Ygd2hldGhlciBhIGxheWVyIHdpdGggdGhlIGdpdmVuIG5hbWUgaXMgcHJlc2VudFxuICAgKiBvbiB0aGUgaG9zdC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBOYW1lIG9mIHRoZSBsYXllciB0byBrZWVwIHRyYWNrIG9mLlxuICAgKiBAcGFyYW0ge09iamVjdD19IG9wdGlvbnMgLSBPcHRpb25zIGZvciB0aGUgbGF5ZXIuXG4gICAqIEBwYXJhbSB7bnVtYmVyPX0gb3B0aW9ucy5ibGVuZFRpbWUgLSBEZWZhdWx0IGFtb3VudCBvZiB0aW1lIHRvIHVzZSB3aGVuXG4gICAqIG1hbmlwdWxhdGluZyBsYXllciB3ZWlnaHRzIG9uIHRoaXMgbGF5ZXIuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvcHRpb25zLmVhc2luZ0ZuIC0gRGVmYXVsdCBlYXNpbmcgZnVuY3Rpb24gdG8gdXNlIHdoZW5cbiAgICogbWFuaXB1bGF0aW5nIGxheWVyIHdlaWdodHMgb24gdGhpcyBsYXllci5cbiAgICogQHBhcmFtIHtPYmplY3Q9fSBvcHRpb25zLmFuaW1hdGlvbnMgLSBBbmltYXRpb25zIHRvIGtlZXAgdHJhY2sgb2Ygb24gdGhlIGxheWVyLlxuICAgKiBBbmltYXRpb25zIGFyZSByZXByZXNlbnRlZCBhcyBrZXkvdmFsdWUgcGFpcnMgb2YgYW5pbWF0aW9uIG5hbWVzIGFuZCB0aGVpclxuICAgKiBvcHRpb25zLlxuICAgKi9cbiAgcmVnaXN0ZXJMYXllcihuYW1lLCBvcHRpb25zID0ge30pIHt9XG5cbiAgLyoqXG4gICAqIFN0YXJ0IHRyYWNraW5nIGtlZXBpbmcgdHJhY2sgb2Ygd2hldGhlciBhbiBhbmltYXRpb24gd2l0aCB0aGUgZ2l2ZW4gbmFtZSBpc1xuICAgKiBwcmVzZW50IG9uIHRoZSBob3N0LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGF5ZXJOYW1lIC0gTmFtZSBvZiB0aGUgbGF5ZXIgdGhhdCB3aWxsIG93biB0aGUgYW5pbWF0aW9uLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYW5pbWF0aW9uTmFtZSAtIE5hbWUgb2YgdGhlIGFuaW1hdGlvbiB0byBrZWVwIHRyYWNrIG9mLlxuICAgKiBAcGFyYW0ge09iamVjdD19IG9wdGlvbnMgLSBPcHRpb25zIGZvciB0aGUgYW5pbWF0aW9uLlxuICAgKi9cbiAgcmVnaXN0ZXJBbmltYXRpb24obGF5ZXJOYW1lLCBhbmltYXRpb25OYW1lLCBvcHRpb25zID0ge30pIHt9XG5cbiAgLyoqXG4gICAqIFNldCBsYXllciB3ZWlnaHRzIG9uIHRyYWNrZWQgbGF5ZXJzLlxuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gbmFtZUZpbHRlciAtIFByZWRpY2F0ZSBmdW5jdGlvbiB0byB0ZXN0IGVhY2ggdHJhY2tlZCBsYXllclxuICAgKiB3aXRoLiBCeSBkZWZhdWx0IGFsbCBsYXllcnMgd2lsbCBwYXNzLlxuICAgKiBAcGFyYW0ge251bWJlcn0gd2VpZ2h0IC0gV2VpZ2h0IHZhbHVlIHRvIHNldCBvbiBsYXllcnMuXG4gICAqIEBwYXJhbSB7bnVtYmVyPX0gc2Vjb25kcyAtIE51bWJlciBvZiBzZWNvbmRzIGl0IHdpbGwgdGFrZSB0byByZWFjaCB0aGUgd2VpZ2h0XG4gICAqIG9uIGVhY2ggbGF5ZXIuIElmIHVuZGVmaW5lZCwgZWFjaCBsYXllcnMnIGJsZW5kVGltZSBvcHRpb24gaXMgdXNlZC5cbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IGVhc2luZ0ZuIC0gRWFzaW5nIGZ1bmN0aW9uIHRvIHVzZSB3aGVuIHNldHRpbmcgd2VpZ2h0XG4gICAqIG9uIGVhY2ggbGF5ZXIuIElmIHVuZGVmaW5lZCwgZWFjaCBsYXllcnMnIGVhc2luZ0ZuIG9wdGlvbiBpcyB1c2VkLlxuICAgKi9cbiAgc2V0TGF5ZXJXZWlnaHRzKG5hbWVGaWx0ZXIgPSAoKSA9PiB0cnVlLCB3ZWlnaHQsIHNlY29uZHMsIGVhc2luZ0ZuKSB7fVxuXG4gIC8qKlxuICAgKiBTZXQgYWxsIHRyYWNrZWQgbGF5ZXJzJyB3ZWlnaHRzIHRvIDEuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyPX0gc2Vjb25kcyAtIE51bWJlciBvZiBzZWNvbmRzIGl0IHdpbGwgdGFrZSB0byByZWFjaCB0aGUgd2VpZ2h0XG4gICAqIG9uIGVhY2ggbGF5ZXIuIElmIHVuZGVmaW5lZCwgZWFjaCBsYXllcnMnIGJsZW5kVGltZSBvcHRpb24gaXMgdXNlZC5cbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IGVhc2luZ0ZuIC0gRWFzaW5nIGZ1bmN0aW9uIHRvIHVzZSB3aGVuIHNldHRpbmcgd2VpZ2h0XG4gICAqIG9uIGVhY2ggbGF5ZXIuIElmIHVuZGVmaW5lZCwgZWFjaCBsYXllcnMnIGVhc2luZ0ZuIG9wdGlvbiBpcyB1c2VkLlxuICAgKi9cbiAgZW5hYmxlKHNlY29uZHMsIGVhc2luZ0ZuKSB7fVxuXG4gIC8qKlxuICAgKiBTZXQgYWxsIHRyYWNrZWQgbGF5ZXJzJyB3ZWlnaHRzIHRvIDAuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyPX0gc2Vjb25kcyAtIE51bWJlciBvZiBzZWNvbmRzIGl0IHdpbGwgdGFrZSB0byByZWFjaCB0aGUgd2VpZ2h0XG4gICAqIG9uIGVhY2ggbGF5ZXIuIElmIHVuZGVmaW5lZCwgZWFjaCBsYXllcnMnIGJsZW5kVGltZSBvcHRpb24gaXMgdXNlZC5cbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IGVhc2luZ0ZuIC0gRWFzaW5nIGZ1bmN0aW9uIHRvIHVzZSB3aGVuIHNldHRpbmcgd2VpZ2h0XG4gICAqIG9uIGVhY2ggbGF5ZXIuIElmIHVuZGVmaW5lZCwgZWFjaCBsYXllcnMnIGVhc2luZ0ZuIG9wdGlvbiBpcyB1c2VkLlxuICAgKi9cbiAgZGlzYWJsZShzZWNvbmRzLCBlYXNpbmdGbikge31cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIGNsYXNzIHRoYXQgaW1wbGVtZW50cyB7QGxpbmsgTWFuYWdlZEFuaW1hdGlvbkxheWVySW50ZXJmYWNlfVxuICAgKiBhbmQgZXh0ZW5kcyBhIHNwZWNpZmllZCBiYXNlIGNsYXNzLlxuICAgKlxuICAgKiBAcGFyYW0ge0NsYXNzfSBCYXNlQ2xhc3MgLSBUaGUgY2xhc3MgdG8gZXh0ZW5kLlxuICAgKlxuICAgKiBAcmV0dXJuIHtDbGFzc30gQSBjbGFzcyB0aGF0IGV4dGVuZHMgYEJhc2VDbGFzc2AgYW5kIGltcGxlbWVudHMge0BsaW5rIE1hbmFnZWRBbmltYXRpb25MYXllckludGVyZmFjZX0uXG4gICAqL1xuICBzdGF0aWMgTWl4aW4oQmFzZUNsYXNzKSB7XG4gICAgY29uc3QgUGFyZW50Q2xhc3MgPSBBbmltYXRpb25GZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlLk1peGluKEJhc2VDbGFzcyk7XG4gICAgY29uc3QgTWFuYWdlZEFuaW1hdGlvbkxheWVyTWl4aW4gPSBjbGFzcyBleHRlbmRzIFBhcmVudENsYXNzIHtcbiAgICAgIGNvbnN0cnVjdG9yKC4uLmFyZ3MpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJncyk7XG5cbiAgICAgICAgdGhpcy5fbWFuYWdlZExheWVycyA9IHt9O1xuICAgICAgfVxuXG4gICAgICBfb25GZWF0dXJlQWRkZWQodHlwZU5hbWUpIHtcbiAgICAgICAgc3VwZXIuX29uRmVhdHVyZUFkZGVkKHR5cGVOYW1lKTtcblxuICAgICAgICBpZiAodHlwZU5hbWUgIT09ICdBbmltYXRpb25GZWF0dXJlJykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX21hbmFnZWRMYXllcnMgPSB0aGlzLl9tYW5hZ2VkTGF5ZXJzIHx8IHt9O1xuXG4gICAgICAgIC8vIERldGVjdCBuZXcgbGF5ZXJzXG4gICAgICAgIHRoaXMuX2hvc3QuQW5pbWF0aW9uRmVhdHVyZS5sYXllcnMuZm9yRWFjaChuYW1lID0+IHtcbiAgICAgICAgICB0aGlzLl9vbkxheWVyQWRkZWQoe25hbWV9KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIF9vbkZlYXR1cmVSZW1vdmVkKHR5cGVOYW1lKSB7XG4gICAgICAgIHN1cGVyLl9vbkZlYXR1cmVSZW1vdmVkKHR5cGVOYW1lKTtcblxuICAgICAgICBpZiAodHlwZU5hbWUgIT09ICdBbmltYXRpb25GZWF0dXJlJykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX21hbmFnZWRMYXllcnMgPSB0aGlzLl9tYW5hZ2VkTGF5ZXJzIHx8IHt9O1xuXG4gICAgICAgIC8vIERlYWN0aXZhdGUgdGhlIGxheWVyc1xuICAgICAgICBPYmplY3Qua2V5cyh0aGlzLl9tYW5hZ2VkTGF5ZXJzKS5mb3JFYWNoKG5hbWUgPT4ge1xuICAgICAgICAgIHRoaXMuX29uTGF5ZXJSZW1vdmVkKHtuYW1lfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBfb25MYXllckFkZGVkKHtuYW1lfSkge1xuICAgICAgICAvLyBNYXJrIHRoZSBsYXllciBhcyBhY3RpdmUgaWYgaXQgaXMgbWFuYWdlZFxuICAgICAgICBpZiAodGhpcy5fbWFuYWdlZExheWVyc1tuYW1lXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhpcy5fbWFuYWdlZExheWVyc1tuYW1lXS5pc0FjdGl2ZSA9IHRydWU7XG5cbiAgICAgICAgICAvLyBEZXRlY3QgbmV3IGFuaW1hdGlvbnNcbiAgICAgICAgICB0aGlzLl9ob3N0LkFuaW1hdGlvbkZlYXR1cmUuZ2V0QW5pbWF0aW9ucyhuYW1lKS5mb3JFYWNoKGFuaW1OYW1lID0+IHtcbiAgICAgICAgICAgIHRoaXMuX29uQW5pbWF0aW9uQWRkZWQoe2xheWVyTmFtZTogbmFtZSwgYW5pbWF0aW9uTmFtZTogYW5pbU5hbWV9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBfb25MYXllclJlbW92ZWQoe25hbWV9KSB7XG4gICAgICAgIC8vIERlYWN0aXZhdGUgdGhlIGxheWVyIGlmIGl0IGlzIG1hbmFnZWRcbiAgICAgICAgaWYgKHRoaXMuX21hbmFnZWRMYXllcnNbbmFtZV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRoaXMuX21hbmFnZWRMYXllcnNbbmFtZV0uaXNBY3RpdmUgPSBmYWxzZTtcblxuICAgICAgICAgIC8vIERlYWN0aXZhdGUgdGhlIGFuaW1hdGlvbnNcbiAgICAgICAgICBPYmplY3Qua2V5cyh0aGlzLl9tYW5hZ2VkTGF5ZXJzW25hbWVdLmFuaW1hdGlvbnMpLmZvckVhY2goXG4gICAgICAgICAgICBhbmltTmFtZSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuX29uQW5pbWF0aW9uUmVtb3ZlZCh7XG4gICAgICAgICAgICAgICAgbGF5ZXJOYW1lOiBuYW1lLFxuICAgICAgICAgICAgICAgIGFuaW1hdGlvbk5hbWU6IGFuaW1OYW1lLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIF9vbkxheWVyUmVuYW1lZCh7b2xkTmFtZSwgbmV3TmFtZX0pIHtcbiAgICAgICAgY29uc3QgbGF5ZXJPcHRpb25zID0gdGhpcy5fbWFuYWdlZExheWVyc1tvbGROYW1lXTtcblxuICAgICAgICAvLyBSZXBsYWNlIHRoZSBsYXllciBrZXkgd2l0aCB0aGUgbmV3IG5hbWVcbiAgICAgICAgaWYgKGxheWVyT3B0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZGVsZXRlIHRoaXMuX21hbmFnZWRMYXllcnNbb2xkTmFtZV07XG4gICAgICAgICAgdGhpcy5fbWFuYWdlZExheWVyc1tuZXdOYW1lXSA9IGxheWVyT3B0aW9ucztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBfb25BbmltYXRpb25BZGRlZCh7bGF5ZXJOYW1lLCBhbmltYXRpb25OYW1lfSkge1xuICAgICAgICAvLyBNYXJrIHRoZSBhbmltYXRpb24gYXMgYWN0aXZlIGlmIGl0IGlzIG1hbmFnZWRcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRoaXMuX21hbmFnZWRMYXllcnNbbGF5ZXJOYW1lXSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgdGhpcy5fbWFuYWdlZExheWVyc1tsYXllck5hbWVdLmFuaW1hdGlvbnNbYW5pbWF0aW9uTmFtZV0gIT09IHVuZGVmaW5lZFxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLl9tYW5hZ2VkTGF5ZXJzW2xheWVyTmFtZV0uYW5pbWF0aW9uc1tcbiAgICAgICAgICAgIGFuaW1hdGlvbk5hbWVcbiAgICAgICAgICBdLmlzQWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBfb25BbmltYXRpb25SZW1vdmVkKHtsYXllck5hbWUsIGFuaW1hdGlvbk5hbWV9KSB7XG4gICAgICAgIC8vIERlYWN0aXZhdGUgdGhlIGFuaW1hdGlvbiBpZiBpdCBpcyBtYW5hZ2VkXG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aGlzLl9tYW5hZ2VkTGF5ZXJzW2xheWVyTmFtZV0gIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgIHRoaXMuX21hbmFnZWRMYXllcnNbbGF5ZXJOYW1lXS5hbmltYXRpb25zW2FuaW1hdGlvbk5hbWVdICE9PSB1bmRlZmluZWRcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5fbWFuYWdlZExheWVyc1tsYXllck5hbWVdLmFuaW1hdGlvbnNbXG4gICAgICAgICAgICBhbmltYXRpb25OYW1lXG4gICAgICAgICAgXS5pc0FjdGl2ZSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIF9vbkFuaW1hdGlvblJlbmFtZWQoe2xheWVyTmFtZSwgb2xkTmFtZSwgbmV3TmFtZX0pIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRoaXMuX21hbmFnZWRMYXllcnNbbGF5ZXJOYW1lXSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgdGhpcy5fbWFuYWdlZExheWVyc1tsYXllck5hbWVdLmFuaW1hdGlvbnNbb2xkTmFtZV0gIT09IHVuZGVmaW5lZFxuICAgICAgICApIHtcbiAgICAgICAgICAvLyBSZXBsYWNlIHRoZSBhbmltYXRpb24ga2V5IHdpdGggdGhlIG5ldyBuYW1lXG4gICAgICAgICAgY29uc3QgYW5pbU9wdGlvbnMgPSB0aGlzLl9tYW5hZ2VkTGF5ZXJzW2xheWVyTmFtZV0uYW5pbWF0aW9uc1tcbiAgICAgICAgICAgIG9sZE5hbWVcbiAgICAgICAgICBdO1xuICAgICAgICAgIGRlbGV0ZSB0aGlzLl9tYW5hZ2VkTGF5ZXJzW2xheWVyTmFtZV0uYW5pbWF0aW9uc1tvbGROYW1lXTtcbiAgICAgICAgICB0aGlzLl9tYW5hZ2VkTGF5ZXJzW2xheWVyTmFtZV0uYW5pbWF0aW9uc1tuZXdOYW1lXSA9IGFuaW1PcHRpb25zO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJlZ2lzdGVyTGF5ZXIobmFtZSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIC8vIFN0YXJ0IHdpdGggZGVmYXVsdCBvcHRpb25zIGZvciBlYWNoIG5ldyBsYXllclxuICAgICAgICBpZiAodGhpcy5fbWFuYWdlZExheWVyc1tuYW1lXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhpcy5fbWFuYWdlZExheWVyc1tuYW1lXSA9IHtcbiAgICAgICAgICAgIC4uLnRoaXMuY29uc3RydWN0b3IuREVGQVVMVF9MQVlFUl9PUFRJT05TLFxuICAgICAgICAgICAgYW5pbWF0aW9uczoge30sXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFVwZGF0ZSBhbGwgb3B0aW9ucyBleGNlcHQgYW5pbWF0aW9uc1xuICAgICAgICBjb25zdCBsYXllck9wdGlvbnMgPSB0aGlzLl9tYW5hZ2VkTGF5ZXJzW25hbWVdO1xuICAgICAgICBvcHRpb25zID0gey4uLm9wdGlvbnN9O1xuICAgICAgICBjb25zdCBhbmltYXRpb25PcHRpb25zID0gb3B0aW9ucy5hbmltYXRpb25zIHx8IHt9O1xuICAgICAgICBkZWxldGUgb3B0aW9ucy5hbmltYXRpb25zO1xuICAgICAgICBPYmplY3QuYXNzaWduKGxheWVyT3B0aW9ucywgb3B0aW9ucyk7XG5cbiAgICAgICAgLy8gQ2hlY2sgd2hldGhlciB0aGUgbGF5ZXIgY2FuIGJlIG1hbmlwdWxhdGVkIG5vd1xuICAgICAgICBsYXllck9wdGlvbnMuaXNBY3RpdmUgPVxuICAgICAgICAgIHRoaXMuX2hvc3QuQW5pbWF0aW9uRmVhdHVyZSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgdGhpcy5faG9zdC5BbmltYXRpb25GZWF0dXJlLmxheWVycy5pbmNsdWRlcyhuYW1lKTtcblxuICAgICAgICAvLyBSZWdpc3RlciB0aGUgYW5pbWF0aW9uc1xuICAgICAgICBPYmplY3QuZW50cmllcyhhbmltYXRpb25PcHRpb25zKS5mb3JFYWNoKChbYW5pbU5hbWUsIGFuaW1PcHRpb25zXSkgPT4ge1xuICAgICAgICAgIHRoaXMucmVnaXN0ZXJBbmltYXRpb24obmFtZSwgYW5pbU5hbWUsIGFuaW1PcHRpb25zKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHJlZ2lzdGVyQW5pbWF0aW9uKGxheWVyTmFtZSwgYW5pbWF0aW9uTmFtZSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIC8vIFJlZ2lzdGVyIHRoZSBsYXllciBpZiBpdCBoYXNuJ3QgYmVlbiByZWdpc3RlcmVkIHlldFxuICAgICAgICBpZiAodGhpcy5fbWFuYWdlZExheWVyc1tsYXllck5hbWVdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLnJlZ2lzdGVyTGF5ZXIobGF5ZXJOYW1lKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFVwZGF0ZSBhbmltYXRpb24gb3B0aW9uc1xuICAgICAgICBjb25zdCBhbmltT3B0aW9ucyA9XG4gICAgICAgICAgdGhpcy5fbWFuYWdlZExheWVyc1tsYXllck5hbWVdLmFuaW1hdGlvbnNbYW5pbWF0aW9uTmFtZV0gfHwge307XG4gICAgICAgIE9iamVjdC5hc3NpZ24oYW5pbU9wdGlvbnMsIG9wdGlvbnMpO1xuICAgICAgICB0aGlzLl9tYW5hZ2VkTGF5ZXJzW2xheWVyTmFtZV0uYW5pbWF0aW9uc1thbmltYXRpb25OYW1lXSA9IGFuaW1PcHRpb25zO1xuXG4gICAgICAgIC8vIENoZWNrIHdoZXRoZXIgdGhlIGFuaW1hdGlvbiBjYW4gYmUgbWFuaXB1bGF0ZWQgbm93XG4gICAgICAgIHRoaXMuX21hbmFnZWRMYXllcnNbbGF5ZXJOYW1lXS5hbmltYXRpb25zW2FuaW1hdGlvbk5hbWVdLmlzQWN0aXZlID1cbiAgICAgICAgICB0aGlzLl9tYW5hZ2VkTGF5ZXJzW2xheWVyTmFtZV0uaXNBY3RpdmUgJiZcbiAgICAgICAgICB0aGlzLl9ob3N0LkFuaW1hdGlvbkZlYXR1cmUuZ2V0QW5pbWF0aW9ucyhsYXllck5hbWUpLmluY2x1ZGVzKFxuICAgICAgICAgICAgYW5pbWF0aW9uTmFtZVxuICAgICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHNldExheWVyV2VpZ2h0cyhuYW1lRmlsdGVyID0gKCkgPT4gdHJ1ZSwgd2VpZ2h0LCBzZWNvbmRzLCBlYXNpbmdGbikge1xuICAgICAgICBjb25zdCBsYXllck5hbWVzID0gT2JqZWN0LmtleXModGhpcy5fbWFuYWdlZExheWVycykuZmlsdGVyKG5hbWVGaWx0ZXIpO1xuXG4gICAgICAgIGxheWVyTmFtZXMuZm9yRWFjaChuYW1lID0+IHtcbiAgICAgICAgICBjb25zdCBsYXllck9wdGlvbnMgPSB0aGlzLl9tYW5hZ2VkTGF5ZXJzW25hbWVdO1xuXG4gICAgICAgICAgaWYgKGxheWVyT3B0aW9ucy5pc0FjdGl2ZSkge1xuICAgICAgICAgICAgdGhpcy5faG9zdC5BbmltYXRpb25GZWF0dXJlLnNldExheWVyV2VpZ2h0KFxuICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICB3ZWlnaHQsXG4gICAgICAgICAgICAgIHNlY29uZHMgIT09IHVuZGVmaW5lZCA/IHNlY29uZHMgOiBsYXllck9wdGlvbnMuYmxlbmRUaW1lLFxuICAgICAgICAgICAgICBlYXNpbmdGbiB8fCBsYXllck9wdGlvbnMuZWFzaW5nRm5cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgZW5hYmxlKHNlY29uZHMsIGVhc2luZ0ZuKSB7XG4gICAgICAgIHRoaXMuc2V0TGF5ZXJXZWlnaHRzKHVuZGVmaW5lZCwgMSwgc2Vjb25kcywgZWFzaW5nRm4pO1xuICAgICAgfVxuXG4gICAgICBkaXNhYmxlKHNlY29uZHMsIGVhc2luZ0ZuKSB7XG4gICAgICAgIHRoaXMuc2V0TGF5ZXJXZWlnaHRzKHVuZGVmaW5lZCwgMCwgc2Vjb25kcywgZWFzaW5nRm4pO1xuICAgICAgfVxuXG4gICAgICBpbnN0YWxsQXBpKCkge1xuICAgICAgICBjb25zdCBhcGkgPSBzdXBlci5pbnN0YWxsQXBpKCk7XG5cbiAgICAgICAgT2JqZWN0LmFzc2lnbihhcGksIHtcbiAgICAgICAgICByZWdpc3RlckxheWVyOiB0aGlzLnJlZ2lzdGVyTGF5ZXIuYmluZCh0aGlzKSxcbiAgICAgICAgICByZWdpc3RlckFuaW1hdGlvbjogdGhpcy5yZWdpc3RlckFuaW1hdGlvbi5iaW5kKHRoaXMpLFxuICAgICAgICAgIHNldExheWVyV2VpZ2h0czogdGhpcy5zZXRMYXllcldlaWdodHMuYmluZCh0aGlzKSxcbiAgICAgICAgICBlbmFibGU6IHRoaXMuZW5hYmxlLmJpbmQodGhpcyksXG4gICAgICAgICAgZGlzYWJsZTogdGhpcy5kaXNhYmxlLmJpbmQodGhpcyksXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBhcGk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE1hbmFnZWRBbmltYXRpb25MYXllck1peGluLCB7XG4gICAgICBERUZBVUxUX0xBWUVSX09QVElPTlM6IHtcbiAgICAgICAgdmFsdWU6IE1hbmFnZWRBbmltYXRpb25MYXllckludGVyZmFjZS5ERUZBVUxUX0xBWUVSX09QVElPTlMsXG4gICAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gTWFuYWdlZEFuaW1hdGlvbkxheWVyTWl4aW47XG4gIH1cbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTWFuYWdlZEFuaW1hdGlvbkxheWVySW50ZXJmYWNlLCB7XG4gIERFRkFVTFRfTEFZRVJfT1BUSU9OUzoge1xuICAgIHZhbHVlOiB7YmxlbmRUaW1lOiAwLjUsIGFuaW1hdGlvbnM6IHt9fSxcbiAgICB3cml0YWJsZTogZmFsc2UsXG4gIH0sXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgTWFuYWdlZEFuaW1hdGlvbkxheWVySW50ZXJmYWNlO1xuIiwiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTBcblxuLyogZXNsaW50LWRpc2FibGUgbWF4LWNsYXNzZXMtcGVyLWZpbGUgKi9cbmltcG9ydCBGZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlIGZyb20gJ2NvcmUvRmVhdHVyZURlcGVuZGVudEludGVyZmFjZSc7XG5cbi8qKlxuICogQ2xhc3MgZmFjdG9yeSBpbnRlcmZhY2UgZm9yIGZlYXR1cmVzIHRoYXQgYXJlIGRlcGVuZGVudCBvbiB0aGUgVGV4dFRvU3BlZWNoRmVhdHVyZVxuICogYmVpbmcgcHJlc2VudCBvbiB0aGUgaG9zdC4gU3BlZWNoIGV2ZW50cyB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgbGlzdGVuZWQgZm9yIG9uY2UgYVxuICogVGV4dFRvU3BlZWNoRmVhdHVyZSBpcyBhZGRlZCB0byB0aGUgaG9zdCBhbmQgc3RvcHBlZCBvbmNlIGl0IGlzIHJlbW92ZWQuXG4gKlxuICogQGludGVyZmFjZVxuICogQGV4dGVuZHMgRmVhdHVyZURlcGVuZGVudEludGVyZmFjZVxuICpcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBFVkVOVF9ERVBFTkRFTkNJRVMgLSBFdmVudHMgdGhhdCB0aGUgZmVhdHVyZSBzaG91bGQgc3RhcnQvc3RvcFxuICogbGlzdGVuaW5nIGZvciB3aGVuIGEgZmVhdHVyZSBvZiB0eXBlIEZlYXR1cmVOYW1lIGlzIGFkZGVkL3JlbW92ZWQgZnJvbSB0aGUgaG9zdC5cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBFVkVOVF9ERVBFTkRFTkNJRVMuVGV4dFRvU3BlZWNoRmVhdHVyZSAtIEV2ZW50cyB0aGF0IGFyZVxuICogc3BlY2lmaWMgdG8gdGhlIFRleHRUb1NwZWVjaEZlYXR1cmUuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW0VWRU5UX0RFUEVOREVOQ0lFUy5UZXh0VG9TcGVlY2hGZWF0dXJlLnBsYXk9J19vblBsYXknXSAtXG4gKiBUaGUgbmFtZSBvZiB0aGUgbWV0aG9kIHRoYXQgd2lsbCBiZSBleGVjdXRlZCB3aGVuIFRleHRUb1NwZWVjaEZlYXR1cmUgcGxheVxuICogZXZlbnRzIGFyZSBlbWl0dGVkLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtFVkVOVF9ERVBFTkRFTkNJRVMuVGV4dFRvU3BlZWNoRmVhdHVyZS5wYXVzZT0nX29uUGF1c2UnXSAtXG4gKiBUaGUgbmFtZSBvZiB0aGUgbWV0aG9kIHRoYXQgd2lsbCBiZSBleGVjdXRlZCB3aGVuIFRleHRUb1NwZWVjaEZlYXR1cmUgcGF1c2VcbiAqIGV2ZW50cyBhcmUgZW1pdHRlZC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbRVZFTlRfREVQRU5ERU5DSUVTLlRleHRUb1NwZWVjaEZlYXR1cmUucmVzdW1lPSdfb25SZXN1bWUnXSAtXG4gKiBUaGUgbmFtZSBvZiB0aGUgbWV0aG9kIHRoYXQgd2lsbCBiZSBleGVjdXRlZCB3aGVuIFRleHRUb1NwZWVjaEZlYXR1cmUgcmVzdW1lXG4gKiBldmVudHMgYXJlIGVtaXR0ZWQuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW0VWRU5UX0RFUEVOREVOQ0lFUy5UZXh0VG9TcGVlY2hGZWF0dXJlLnN0b3A9J19vblN0b3AnXSAtXG4gKiBUaGUgbmFtZSBvZiB0aGUgbWV0aG9kIHRoYXQgd2lsbCBiZSBleGVjdXRlZCB3aGVuIFRleHRUb1NwZWVjaEZlYXR1cmUgc3RvcFxuICogZXZlbnRzIGFyZSBlbWl0dGVkLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtFVkVOVF9ERVBFTkRFTkNJRVMuVGV4dFRvU3BlZWNoRmVhdHVyZS5zZW50ZW5jZT0nX29uU2VudGVuY2UnXSAtXG4gKiBUaGUgbmFtZSBvZiB0aGUgbWV0aG9kIHRoYXQgd2lsbCBiZSBleGVjdXRlZCB3aGVuIFRleHRUb1NwZWVjaEZlYXR1cmUgc2VudGVuY2VcbiAqIGV2ZW50cyBhcmUgZW1pdHRlZC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbRVZFTlRfREVQRU5ERU5DSUVTLlRleHRUb1NwZWVjaEZlYXR1cmUud29yZD0nX29uV29yZCddIC1cbiAqIFRoZSBuYW1lIG9mIHRoZSBtZXRob2QgdGhhdCB3aWxsIGJlIGV4ZWN1dGVkIHdoZW4gVGV4dFRvU3BlZWNoRmVhdHVyZSB3b3JkXG4gKiBldmVudHMgYXJlIGVtaXR0ZWQuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW0VWRU5UX0RFUEVOREVOQ0lFUy5UZXh0VG9TcGVlY2hGZWF0dXJlLnZpc2VtZT0nX29uVmlzZW1lJ10gLVxuICogVGhlIG5hbWUgb2YgdGhlIG1ldGhvZCB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQgd2hlbiBUZXh0VG9TcGVlY2hGZWF0dXJlIHZpc2VtZVxuICogZXZlbnRzIGFyZSBlbWl0dGVkLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtFVkVOVF9ERVBFTkRFTkNJRVMuVGV4dFRvU3BlZWNoRmVhdHVyZS5zc21sPSdfb25Tc21sJ10gLVxuICogVGhlIG5hbWUgb2YgdGhlIG1ldGhvZCB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQgd2hlbiBUZXh0VG9TcGVlY2hGZWF0dXJlIHNzbWxcbiAqIGV2ZW50cyBhcmUgZW1pdHRlZC5cbiAqL1xuY2xhc3MgVGV4dFRvU3BlZWNoRmVhdHVyZURlcGVuZGVudEludGVyZmFjZSBleHRlbmRzIEZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2Uge1xuICAvKipcbiAgICogRXhlY3V0ZWQgd2hlbiBzcGVlY2ggcGxheSBldmVudHMgYXJlIGNhdWdodC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9vblBsYXkoKSB7fVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlZCB3aGVuIHNwZWVjaCBwYXVzZSBldmVudHMgYXJlIGNhdWdodC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9vblBhdXNlKCkge31cblxuICAvKipcbiAgICogRXhlY3V0ZWQgd2hlbiBzcGVlY2ggcmVzdW1lIGV2ZW50cyBhcmUgY2F1Z2h0LlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX29uUmVzdW1lKCkge31cblxuICAvKipcbiAgICogRXhlY3V0ZWQgd2hlbiBzcGVlY2ggc3RvcCBldmVudHMgYXJlIGNhdWdodC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9vblN0b3AoKSB7fVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlZCB3aGVuIHNwZWVjaCBzZW50ZW5jZSBldmVudHMgYXJlIGNhdWdodC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9vblNlbnRlbmNlKCkge31cblxuICAvKipcbiAgICogRXhlY3V0ZWQgd2hlbiBzcGVlY2ggd29yZCBldmVudHMgYXJlIGNhdWdodC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9vbldvcmQoKSB7fVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlZCB3aGVuIHNwZWVjaCB2aXNlbWUgZXZlbnRzIGFyZSBjYXVnaHQuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfb25WaXNlbWUoKSB7fVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlZCB3aGVuIHNwZWVjaCBzc21sIGV2ZW50cyBhcmUgY2F1Z2h0LlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX29uU3NtbCgpIHt9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBjbGFzcyB0aGF0IGltcGxlbWVudHMge0BsaW5rIFRleHRUb1NwZWVjaEZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2V9XG4gICAqIGFuZCBleHRlbmRzIGEgc3BlY2lmaWVkIGJhc2UgY2xhc3MuXG4gICAqXG4gICAqIEBwYXJhbSB7Q2xhc3N9IEJhc2VDbGFzcyAtIFRoZSBjbGFzcyB0byBleHRlbmQuXG4gICAqXG4gICAqIEByZXR1cm4ge0NsYXNzfSBBIGNsYXNzIHRoYXQgZXh0ZW5kcyBgQmFzZUNsYXNzYCBhbmQgaW1wbGVtZW50cyB7QGxpbmsgVGV4dFRvU3BlZWNoRmVhdHVyZURlcGVuZGVudEludGVyZmFjZX0uXG4gICAqL1xuICBzdGF0aWMgTWl4aW4oQmFzZUNsYXNzKSB7XG4gICAgY29uc3QgUGFyZW50Q2xhc3MgPSBGZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlLk1peGluKEJhc2VDbGFzcyk7XG4gICAgY29uc3QgVGV4dFRvU3BlZWNoRmVhdHVyZURlcGVuZGVudE1peGluID0gY2xhc3MgZXh0ZW5kcyBQYXJlbnRDbGFzcyB7XG4gICAgICBfb25QbGF5KCkge31cblxuICAgICAgX29uUGF1c2UoKSB7fVxuXG4gICAgICBfb25SZXN1bWUoKSB7fVxuXG4gICAgICBfb25TdG9wKCkge31cblxuICAgICAgX29uU2VudGVuY2UoKSB7fVxuXG4gICAgICBfb25Xb3JkKCkge31cblxuICAgICAgX29uVmlzZW1lKCkge31cblxuICAgICAgX29uU3NtbCgpIHt9XG4gICAgfTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFRleHRUb1NwZWVjaEZlYXR1cmVEZXBlbmRlbnRNaXhpbiwge1xuICAgICAgRVZFTlRfREVQRU5ERU5DSUVTOiB7XG4gICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgLi4uUGFyZW50Q2xhc3MuRVZFTlRfREVQRU5ERU5DSUVTLFxuICAgICAgICAgIC4uLlRleHRUb1NwZWVjaEZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2UuRVZFTlRfREVQRU5ERU5DSUVTLFxuICAgICAgICB9LFxuICAgICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIFRleHRUb1NwZWVjaEZlYXR1cmVEZXBlbmRlbnRNaXhpbjtcbiAgfVxufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUZXh0VG9TcGVlY2hGZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlLCB7XG4gIEVWRU5UX0RFUEVOREVOQ0lFUzoge1xuICAgIHZhbHVlOiB7XG4gICAgICBUZXh0VG9TcGVlY2hGZWF0dXJlOiB7XG4gICAgICAgIHBsYXk6ICdfb25QbGF5JyxcbiAgICAgICAgcGF1c2U6ICdfb25QYXVzZScsXG4gICAgICAgIHJlc3VtZTogJ19vblJlc3VtZScsXG4gICAgICAgIHN0b3A6ICdfb25TdG9wJyxcbiAgICAgICAgc2VudGVuY2U6ICdfb25TZW50ZW5jZScsXG4gICAgICAgIHdvcmQ6ICdfb25Xb3JkJyxcbiAgICAgICAgdmlzZW1lOiAnX29uVmlzZW1lJyxcbiAgICAgICAgc3NtbDogJ19vblNzbWwnLFxuICAgICAgfSxcbiAgICB9LFxuICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgfSxcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBUZXh0VG9TcGVlY2hGZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlO1xuIiwiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTBcbmltcG9ydCBNYXRoVXRpbHMgZnJvbSAnLi9NYXRoVXRpbHMnO1xuaW1wb3J0IHtRdWFkcmF0aWN9IGZyb20gJy4vYW5pbXBhY2svRWFzaW5nJztcbmltcG9ydCBNYW5hZ2VkQW5pbWF0aW9uTGF5ZXJJbnRlcmZhY2UgZnJvbSAnLi9hbmltcGFjay9NYW5hZ2VkQW5pbWF0aW9uTGF5ZXJJbnRlcmZhY2UnO1xuaW1wb3J0IFRleHRUb1NwZWVjaEZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2UgZnJvbSAnLi9hd3NwYWNrL1RleHRUb1NwZWVjaEZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2UnO1xuaW1wb3J0IEFic3RyYWN0SG9zdEZlYXR1cmUgZnJvbSAnLi9BYnN0cmFjdEhvc3RGZWF0dXJlJztcblxuLyoqXG4gKiBEZWZhdWx0IG1hcHBpbmcgb2YgUG9sbHkgdmlzZW1lIG5hbWVzIHRvIGFuaW1hdGlvbiBvcHRpb25zIG9iamVjdHMuXG4gKlxuICogQHByb3BlcnR5IHtPYmplY3R9IFtzaWw9e25hbWU6ICdzaWwnfV1cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBbcD17bmFtZTogJ3AnLCBvdmVycmlkZVdlaWdodDogMC45fV1cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBbdD17bmFtZTogJ3QnLCBibGVuZFRpbWU6IDAuMn1dXG4gKiBAcHJvcGVydHkge09iamVjdH0gW1M9e25hbWU6ICdTJ31dXG4gKiBAcHJvcGVydHkge09iamVjdH0gW1Q9e25hbWU6ICdUJ31dXG4gKiBAcHJvcGVydHkge09iamVjdH0gW2Y9e25hbWU6ICdmJywgb3ZlcnJpZGVXZWlnaHQ6IDAuNzV9XVxuICogQHByb3BlcnR5IHtPYmplY3R9IFtrPXtuYW1lOiAnayd9XVxuICogQHByb3BlcnR5IHtPYmplY3R9IFtpPXtuYW1lOiAnaSd9XVxuICogQHByb3BlcnR5IHtPYmplY3R9IFtyPXtuYW1lOiAncid9XVxuICogQHByb3BlcnR5IHtPYmplY3R9IFtzPXtuYW1lOiAncycsIGJsZW5kVGltZTogMC4yNX1dXG4gKiBAcHJvcGVydHkge09iamVjdH0gW3U9e25hbWU6ICd1J31dXG4gKiBAcHJvcGVydHkge09iamVjdH0gW0A9e25hbWU6ICdAJ31dXG4gKiBAcHJvcGVydHkge09iamVjdH0gW2E9e25hbWU6ICdhJ31dXG4gKiBAcHJvcGVydHkge09iamVjdH0gW2U9e25hbWU6ICdlJywgYmxlbmRUaW1lOiAwLjJ9XVxuICogQHByb3BlcnR5IHtPYmplY3R9IFtFPXtuYW1lOiAnRSd9XVxuICogQHByb3BlcnR5IHtPYmplY3R9IFtvPXtuYW1lOiAnbyd9XVxuICogQHByb3BlcnR5IHtPYmplY3R9IFtPPXtuYW1lOiAnTyd9XVxuICovXG5jb25zdCBEZWZhdWx0VmlzZW1lTWFwID0ge1xuICBzaWw6IHtuYW1lOiAnc2lsJ30sXG4gIHA6IHtuYW1lOiAncCcsIG92ZXJyaWRlV2VpZ2h0OiAwLjl9LFxuICB0OiB7bmFtZTogJ3QnLCBibGVuZFRpbWU6IDAuMn0sXG4gIFM6IHtuYW1lOiAnUyd9LFxuICBUOiB7bmFtZTogJ1QnfSxcbiAgZjoge25hbWU6ICdmJywgb3ZlcnJpZGVXZWlnaHQ6IDAuNzV9LFxuICBrOiB7bmFtZTogJ2snfSxcbiAgaToge25hbWU6ICdpJ30sXG4gIHI6IHtuYW1lOiAncid9LFxuICBzOiB7bmFtZTogJ3MnLCBibGVuZFRpbWU6IDAuMjV9LFxuICB1OiB7bmFtZTogJ3UnfSxcbiAgJ0AnOiB7bmFtZTogJ0AnfSxcbiAgYToge25hbWU6ICdhJ30sXG4gIGU6IHtuYW1lOiAnZScsIGJsZW5kVGltZTogMC4yfSxcbiAgRToge25hbWU6ICdFJ30sXG4gIG86IHtuYW1lOiAnbyd9LFxuICBPOiB7bmFtZTogJ08nfSxcbn07XG5cbi8qKlxuICogTGlwc3luYyBjb250cm9scyB0d28gdHlwZXMgb2YgbW92ZW1lbnQ6IGlkbGUgYW5pbWF0aW9uIHRoYXQgc2hvdWxkIHBsYXkgd2hpbGVcbiAqIHNwZWVjaCBpcyBwbGF5aW5nIGFuZCB2aXNlbWUgYW5pbWF0aW9ucyBjb3JyZXNwb25kaW5nIHRvIFBvbGx5IHZpc2VtZXMgd2hvc2VcbiAqIHdlaWdodHMgc2hvdWxkIGJlIHR1cm5lZCBvbiBhbmQgb2ZmIGFzIHRoZXkgYXJlIGVuY291bnRlcmVkIGluIHRoZSBQb2xseSBTU01MXG4gKiB0cmFuc2NyaXB0LiBMYXllcnMgb3duZWQgYnkgdGhpcyBmZWF0dXJlIHdpbGwgYmUgZW5hYmxlZCB3aGlsZSBzcGVlY2ggaXMgcGxheWluZ1xuICogYW5kIGRpc2FibGVkIG9uY2UgaXQgc3RvcHMuXG4gKlxuICogQGV4dGVuZHMgQWJzdHJhY3RIb3N0RmVhdHVyZVxuICogQGFsaWFzIGNvcmUvTGlwc3luY0ZlYXR1cmVcbiAqIEBpbXBsZW1lbnRzIFRleHRUb1NwZWVjaEZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2VcbiAqIEBpbXBsZW1lbnRzIE1hbmFnZWRBbmltYXRpb25MYXllckludGVyZmFjZVxuICovXG5jbGFzcyBMaXBzeW5jRmVhdHVyZSBleHRlbmRzIEFic3RyYWN0SG9zdEZlYXR1cmUubWl4KFxuICBUZXh0VG9TcGVlY2hGZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlLk1peGluLFxuICBNYW5hZ2VkQW5pbWF0aW9uTGF5ZXJJbnRlcmZhY2UuTWl4aW5cbikge1xuICAvKipcbiAgICogQGNvbnN0cnVjdG9yXG4gICAqXG4gICAqIEBwYXJhbSB7Y29yZS9Ib3N0T2JqZWN0fSBob3N0IC0gSG9zdCB0aGF0IG93bnMgdGhlIGZlYXR1cmUuXG4gICAqIEBwYXJhbSB7T2JqZWN0PX0gdmlzZW1lT3B0aW9ucyAtIE9wdGlvbnMgZm9yIHRoZSB2aXNlbWUgbGF5ZXJzLlxuICAgKiBAcGFyYW0ge251bWJlcn0gW3Zpc2VtZU9wdGlvbnMuYmxlbmRUaW1lPTAuMTVdIC0gRGVmYXVsdCBhbW91bnQgb2YgdGltZSBpdFxuICAgKiB3aWxsIHRha2UgdG8gbWFuaXB1bGF0ZSBlYWNoIGZyZWVCbGVuZCB3ZWlnaHQgb24gdGhlIHZpc2VtZSBzdGF0ZXMuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbdmlzZW1lT3B0aW9ucy5kZWNheVJhdGU9e2Ftb3VudDogLjUsIHNlY29uZHM6IC41fV0gLSBBbiBvYmplY3RcbiAgICogZGVzY3JpYmluZyB0aGUgMC0xIGZhY3RvciB2aXNlbWUgd2VpZ2h0IHdpbGwgZGVjYXkgaWYgdGhlIHZpc2VtZSBkdXJhdGlvbiBpc1xuICAgKiBsb25nZXIgdGhhbiB0aGUgYmxlbmRUaW1lIGFuZCB0aGUgbnVtYmVyIG9mIHNlY29uZHMgaXQgd291bGQgdGFrZSB0byBkZWNheVxuICAgKiBieSB0aGF0IGZhY3Rvci5cbiAgICogQHBhcmFtIHtudW1iZXJ9IFt2aXNlbWVPcHRpb25zLmVhc2luZ0ZuPVF1YWRyYXRpYy5Jbk91dF0gLSBEZWZhdWx0IGVhc2luZyBmdW5jdGlvblxuICAgKiB0byB1c2Ugd2hlbiBtYW5pcHVsYXRpbmcgdmlzZW1lIGZyZWVCbGVuZCB3ZWlnaHRzLlxuICAgKiBAcGFyYW0ge0FycmF5LjxPYmplY3Q+fSBbdmlzZW1lT3B0aW9ucy4ubGF5ZXJzPVtdXSAtIEFuIGFycmF5IG9mIGxheWVyIG9wdGlvbnNcbiAgICogb2JqZWN0cyB0byByZWdpc3RlciBhcyB2aXNlbWUgbGF5ZXJzLlxuICAgKiBAcGFyYW0ge09iamVjdD19IHRhbGtpbmdPcHRpb25zIC0gT3B0aW9ucyBmb3IgdGhlIHRhbGtpbmcgbGF5ZXJzLlxuICAgKiBAcGFyYW0ge251bWJlcn0gW3RhbGtpbmdPcHRpb25zLmJsZW5kVGltZT0wLjc1XSAtIERlZmF1bHQgYW1vdW50IG9mIHRpbWUgdG9cbiAgICogZW5hYmxlIGFuZCBkaXNhYmxlIHRoZSB0YWxraW5nIGlkbGUgbGF5ZXJzXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbdGFsa2luZ09wdGlvbnMuZWFzaW5nRm49UXVhZHJhdGljLkluT3V0XSAtIERlZmF1bHQgZWFzaW5nXG4gICAqIGZ1bmN0aW9uIHRvIHVzZSB3aGVuIG1hbmlwdWxhdGluZyB3ZWlnaHRzIG9uIHRoZSB0YWxraW5nIGlkbGUgbGF5ZXJzLlxuICAgKiBAcGFyYW0ge0FycmF5LjxPYmplY3Q+fSBbdGFsa2luZ09wdGlvbnMubGF5ZXJzPVtdXSAtIEFuIGFycmF5IG9mIGxheWVyIG9wdGlvbnNcbiAgICogb2JqZWN0cyB0byByZWdpc3RlciBhcyB0YWxraW5nIGxheWVycy5cbiAgICogQHBhcmFtIHtudW1iZXJ9IFt2aXNlbWVMZWFkVGltZT0uMDY3XSAtIFRoZSBhbW91bnQgb2YgdGltZSB0byBpbnN0cnVjdCB0aGVcbiAgICogVGV4dFRvU3BlZWNoRmVhdHVyZSB0byBlbWl0IHNwZWVjaG1hcmtzIGJlZm9yZSBlYWNoIG9uZSdzIGFjdHVhbCB0aW1lc3RhbXBcbiAgICogaXMgcmVhY2hlZC4gVGhpcyB3aWxsIHNldCB0aGUgJ3NwZWVjaE1hcmtPZmZzZXQnIHZhcmlhYmxlIG9uIHRoZSBUZXh0VG9TcGVlY2hGZWF0dXJlLlxuICAgKi9cbiAgY29uc3RydWN0b3IoXG4gICAgaG9zdCxcbiAgICB7XG4gICAgICBibGVuZFRpbWU6IHZpc2VtZUJsZW5kVGltZSA9IDAuMTUsXG4gICAgICBkZWNheVJhdGU6IHthbW91bnQgPSAwLjUsIHNlY29uZHMgPSAwLjV9ID0ge30sXG4gICAgICBlYXNpbmdGbjogdmlzZW1lRWFzaW5nRm4gPSBRdWFkcmF0aWMuSW5PdXQsXG4gICAgICBsYXllcnM6IHZpc2VtZUxheWVycyA9IFtdLFxuICAgIH0gPSB7fSxcbiAgICB7XG4gICAgICBibGVuZFRpbWU6IHRhbGtpbmdCbGVuZFRpbWUgPSAwLjc1LFxuICAgICAgZWFzaW5nRm46IHRhbGtpbmdFYXNpbmdGbiA9IFF1YWRyYXRpYy5Jbk91dCxcbiAgICAgIGxheWVyczogdGFsa2luZ0xheWVycyA9IFtdLFxuICAgIH0gPSB7fSxcbiAgICB2aXNlbWVMZWFkVGltZSA9IDAuMDY3XG4gICkge1xuICAgIHN1cGVyKGhvc3QpO1xuXG4gICAgdGhpcy5fdmlzZW1lTGF5ZXJzID0ge307XG4gICAgdGhpcy5fdGFsa2luZ0xheWVycyA9IHt9O1xuICAgIHRoaXMudmlzZW1lTGVhZFRpbWUgPSB2aXNlbWVMZWFkVGltZTtcblxuICAgIC8vIFJlZ2lzdGVyIHRoZSB2aXNlbWUgbGF5ZXJzXG4gICAgdmlzZW1lTGF5ZXJzLmZvckVhY2goKHtuYW1lLCBhbmltYXRpb24sIHZpc2VtZU1hcCA9IERlZmF1bHRWaXNlbWVNYXB9KSA9PiB7XG4gICAgICB0aGlzLnJlZ2lzdGVyVmlzZW1lTGF5ZXIobmFtZSwge1xuICAgICAgICBhbmltYXRpb24sXG4gICAgICAgIHZpc2VtZU1hcCxcbiAgICAgICAgZGVjYXlSYXRlOiB7YW1vdW50LCBzZWNvbmRzfSxcbiAgICAgICAgYmxlbmRUaW1lOiB2aXNlbWVCbGVuZFRpbWUsXG4gICAgICAgIGVhc2luZ0ZuOiB2aXNlbWVFYXNpbmdGbixcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgLy8gUmVnaXN0ZXIgdGhlIHRhbGtpbmcgbGF5ZXJzXG4gICAgdGFsa2luZ0xheWVycy5mb3JFYWNoKCh7bmFtZSwgYW5pbWF0aW9ufSkgPT4ge1xuICAgICAgdGhpcy5yZWdpc3RlclRhbGtpbmdMYXllcihuYW1lLCB7XG4gICAgICAgIGFuaW1hdGlvbixcbiAgICAgICAgYmxlbmRUaW1lOiB0YWxraW5nQmxlbmRUaW1lLFxuICAgICAgICBlYXNpbmdGbjogdGFsa2luZ0Vhc2luZ0ZuLFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRW5zdXJlIHRoYXQgcmVnaXN0ZXJlZCB2aXNlbWUgYW5pbWF0aW9ucyBhcmUgRnJlZUJsZW5kU3RhdGVzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGF5ZXJOYW1lIC0gTmFtZSBvZiB0aGUgbGF5ZXIgdGhhdCBjb250YWlucyB0aGUgdmlzZW1lIGFuaW1hdGlvbi5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGFuaW1hdGlvbk5hbWUgLSBOYW1lIG9mIHRoZSBhbmltYXRpb24uXG4gICAqL1xuICBfcmVnaXN0ZXJWaXNlbWVBbmltYXRpb24obGF5ZXJOYW1lLCBhbmltYXRpb25OYW1lKSB7XG4gICAgaWYgKHRoaXMuX21hbmFnZWRMYXllcnNbbGF5ZXJOYW1lXS5hbmltYXRpb25zW2FuaW1hdGlvbk5hbWVdLmlzQWN0aXZlKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuX2hvc3QuQW5pbWF0aW9uRmVhdHVyZS5nZXRBbmltYXRpb25UeXBlKFxuICAgICAgICAgIGxheWVyTmFtZSxcbiAgICAgICAgICBhbmltYXRpb25OYW1lXG4gICAgICAgICkgIT09ICdmcmVlQmxlbmQnXG4gICAgICApIHtcbiAgICAgICAgLy8gV2FybiBhbmQgZGVhY3RpdmF0ZSBpZiB0aGUgcmVnaXN0ZXJlZCBzdGF0ZSBpcyBub3QgZnJlZUJsZW5kXG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICBgQ2Fubm90IHJlZ2lzdGVyIExpcHN5bmMgdmlzZW1lIGFuaW1hdGlvbiAke2FuaW1hdGlvbk5hbWV9IG9uIGxheWVyICR7bGF5ZXJOYW1lfSBmb3IgaG9zdCAke3RoaXMuX2hvc3QuaWR9LiBWaXNlbWUgYW5pbWF0aW9ucyBtdXN0IGJlIG9mIHR5cGUgJ2ZyZWVCbGVuZCcuYFxuICAgICAgICApO1xuICAgICAgICB0aGlzLl9tYW5hZ2VkTGF5ZXJzW2xheWVyTmFtZV0uYW5pbWF0aW9uc1tcbiAgICAgICAgICBhbmltYXRpb25OYW1lXG4gICAgICAgIF0uaXNBY3RpdmUgPSBmYWxzZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIENoZWNrIGlmIHRoZSBibGVuZFdlaWdodHMgY2FuIGJlIG1hbmlwdWxhdGVkIG5vd1xuICAgICAgICBjb25zdCB3ZWlnaHROYW1lcyA9IHRoaXMuX2hvc3QuQW5pbWF0aW9uRmVhdHVyZS5nZXRBbmltYXRpb25CbGVuZE5hbWVzKFxuICAgICAgICAgIGxheWVyTmFtZSxcbiAgICAgICAgICBhbmltYXRpb25OYW1lXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IHt2aXNlbWVNYXB9ID0gdGhpcy5fbWFuYWdlZExheWVyc1tsYXllck5hbWVdLmFuaW1hdGlvbnNbXG4gICAgICAgICAgYW5pbWF0aW9uTmFtZVxuICAgICAgICBdO1xuXG4gICAgICAgIE9iamVjdC52YWx1ZXModmlzZW1lTWFwKS5mb3JFYWNoKHZpc2VtZU9wdGlvbnMgPT4ge1xuICAgICAgICAgIHZpc2VtZU9wdGlvbnMuaXNBY3RpdmUgPSB3ZWlnaHROYW1lcy5pbmNsdWRlcyh2aXNlbWVPcHRpb25zLm5hbWUpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSWYgdGhlIGFkZGVkIGZlYXR1cmUgaXMgVGV4dFRvU3BlZWNoLCB1cGRhdGUgaXRzIHNwZWVjaE1hcmtPZmZzZXQgdmFyaWFibGUuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlTmFtZSAtIE5hbWUgb2YgdGhlIHR5cGUgb2YgZmVhdHVyZSB0aGF0IHdhcyBhZGRlZC5cbiAgICovXG4gIF9vbkZlYXR1cmVBZGRlZCh0eXBlTmFtZSkge1xuICAgIHRoaXMuX3Zpc2VtZUxheWVycyA9IHRoaXMuX3Zpc2VtZUxheWVycyB8fCB7fTtcbiAgICB0aGlzLl90YWxraW5nTGF5ZXJzID0gdGhpcy5fdGFsa2luZ0xheWVycyB8fCB7fTtcblxuICAgIHN1cGVyLl9vbkZlYXR1cmVBZGRlZCh0eXBlTmFtZSk7XG5cbiAgICBpZiAodHlwZU5hbWUgPT09ICdUZXh0VG9TcGVlY2hGZWF0dXJlJykge1xuICAgICAgdGhpcy5faG9zdC5UZXh0VG9TcGVlY2hGZWF0dXJlLnNwZWVjaG1hcmtPZmZzZXQgPVxuICAgICAgICAtdGhpcy5fdmlzZW1lTGVhZFRpbWUgfHwgMDtcbiAgICB9XG4gIH1cblxuICBfb25MYXllckFkZGVkKHtuYW1lfSkge1xuICAgIHN1cGVyLl9vbkxheWVyQWRkZWQoe25hbWV9KTtcblxuICAgIC8vIFZhbGlkYXRlIHRoZSB2aXNlbWUgYW5pbWF0aW9uXG4gICAgaWYgKHRoaXMuX3Zpc2VtZUxheWVyc1tuYW1lXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLl9yZWdpc3RlclZpc2VtZUFuaW1hdGlvbihuYW1lLCB0aGlzLl92aXNlbWVMYXllcnNbbmFtZV0pO1xuICAgIH1cbiAgfVxuXG4gIF9vbkFuaW1hdGlvbkFkZGVkKHtsYXllck5hbWUsIGFuaW1hdGlvbk5hbWV9KSB7XG4gICAgc3VwZXIuX29uQW5pbWF0aW9uQWRkZWQoe2xheWVyTmFtZX0pO1xuXG4gICAgLy8gVmFsaWRhdGUgdGhlIHZpc2VtZSBhbmltYXRpb25cbiAgICBpZiAodGhpcy5fdmlzZW1lTGF5ZXJzW2xheWVyTmFtZV0gPT09IGFuaW1hdGlvbk5hbWUpIHtcbiAgICAgIHRoaXMuX3JlZ2lzdGVyVmlzZW1lQW5pbWF0aW9uKGxheWVyTmFtZSwgdGhpcy5fdmlzZW1lTGF5ZXJzW2xheWVyTmFtZV0pO1xuICAgIH1cbiAgfVxuXG4gIF9vblBsYXkoKSB7XG4gICAgLy8gVHVybiBvbiB0aGUgbGF5ZXIgd2VpZ2h0c1xuICAgIHRoaXMuZW5hYmxlKCk7XG5cbiAgICAvLyBTZXQgdGhlIGN1cnJlbnQgYW5pbWF0aW9uc1xuICAgIFt0aGlzLl92aXNlbWVMYXllcnMsIHRoaXMuX3RhbGtpbmdMYXllcnNdLmZvckVhY2gobGF5ZXJzID0+IHtcbiAgICAgIE9iamVjdC5lbnRyaWVzKGxheWVycykuZm9yRWFjaCgoW2xheWVyTmFtZSwgYW5pbWF0aW9uTmFtZV0pID0+IHtcbiAgICAgICAgaWYgKHRoaXMuX21hbmFnZWRMYXllcnNbbGF5ZXJOYW1lXS5hbmltYXRpb25zW2FuaW1hdGlvbk5hbWVdLmlzQWN0aXZlKSB7XG4gICAgICAgICAgdGhpcy5faG9zdC5BbmltYXRpb25GZWF0dXJlLnJlc3VtZUFuaW1hdGlvbihsYXllck5hbWUsIGFuaW1hdGlvbk5hbWUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIF9vblBhdXNlKCkge1xuICAgIHRoaXMuX29uU3RvcCgpO1xuICB9XG5cbiAgX29uUmVzdW1lKCkge1xuICAgIHRoaXMuX29uUGxheSgpO1xuICB9XG5cbiAgX29uU3RvcCgpIHtcbiAgICAvLyBUdXJuIG9mZiB0aGUgbGF5ZXIgd2VpZ2h0c1xuICAgIHRoaXMuZGlzYWJsZSgpO1xuXG4gICAgLy8gUGF1c2UgdGhlIGN1cnJlbnQgYW5pbWF0aW9uc1xuICAgIFt0aGlzLl92aXNlbWVMYXllcnMsIHRoaXMuX3RhbGtpbmdMYXllcnNdLmZvckVhY2gobGF5ZXJzID0+IHtcbiAgICAgIE9iamVjdC5lbnRyaWVzKGxheWVycykuZm9yRWFjaCgoW2xheWVyTmFtZSwgYW5pbWF0aW9uTmFtZV0pID0+IHtcbiAgICAgICAgaWYgKHRoaXMuX21hbmFnZWRMYXllcnNbbGF5ZXJOYW1lXS5hbmltYXRpb25zW2FuaW1hdGlvbk5hbWVdLmlzQWN0aXZlKSB7XG4gICAgICAgICAgdGhpcy5faG9zdC5BbmltYXRpb25GZWF0dXJlLnBhdXNlQW5pbWF0aW9uKGxheWVyTmFtZSwgYW5pbWF0aW9uTmFtZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZW4gdmlzZW1lIGV2ZW50cyBhcmUgY2F1Z2h0LCB0dXJuIG9uIHdlaWdodCBvZiB0aGUgbmV3IHZpc2VtZSBmb3IgdGhlIGR1cmF0aW9uXG4gICAqIG9mIHRoZSBzcGVlY2ggbWFyaywgdGhlbiB0dXJuIHdlaWdodCBiYWNrIG9mZi5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IGV2ZW50IC0gRXZlbnQgZGF0YSBwYXNzZWQgZnJvbSB0aGUgc3BlZWNoLlxuICAgKiBAcGFyYW0ge09iamVjdH0gZXZlbnQubWFyayAtIFNwZWVjaG1hcmsgb2JqZWN0LlxuICAgKi9cbiAgYXN5bmMgX29uVmlzZW1lKHttYXJrfSkge1xuICAgIE9iamVjdC5lbnRyaWVzKHRoaXMuX3Zpc2VtZUxheWVycykuZm9yRWFjaCgoW2xheWVyTmFtZSwgYW5pbU5hbWVdKSA9PiB7XG4gICAgICAvLyBNYWtlIHN1cmUgdGhlIGxheWVyIGNhbiBiZSBtYW5pcHVsYXRlZFxuICAgICAgY29uc3Qge2lzQWN0aXZlLCB2aXNlbWVNYXB9ID0gdGhpcy5fbWFuYWdlZExheWVyc1tsYXllck5hbWVdLmFuaW1hdGlvbnNbXG4gICAgICAgIGFuaW1OYW1lXG4gICAgICBdO1xuXG4gICAgICBpZiAoIWlzQWN0aXZlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gVGFrZSB2YXJpYWJsZXMgZnJvbSB0aGUgdmlzZW1lIGlmIHRoZXkgZXhpc3QgYW5kIGRlZmF1bHQgdG8gdGhlIGxheWVyXG4gICAgICBjb25zdCB7XG4gICAgICAgIG5hbWU6IHZpc2VtZSxcbiAgICAgICAgaXNBY3RpdmU6IGlzVmlzZW1lQWN0aXZlLFxuICAgICAgICBkZWNheVJhdGUsXG4gICAgICAgIGJsZW5kVGltZSxcbiAgICAgICAgZWFzaW5nRm4sXG4gICAgICAgIG92ZXJyaWRlV2VpZ2h0LFxuICAgICAgfSA9IHtcbiAgICAgICAgLi4udGhpcy5fbWFuYWdlZExheWVyc1tsYXllck5hbWVdLFxuICAgICAgICAuLi52aXNlbWVNYXBbbWFyay52YWx1ZV0sXG4gICAgICB9O1xuXG4gICAgICBjb25zdCB2aXNlbWVOYW1lcyA9IHRoaXMuX2hvc3QuQW5pbWF0aW9uRmVhdHVyZS5nZXRBbmltYXRpb25CbGVuZE5hbWVzKFxuICAgICAgICBsYXllck5hbWUsXG4gICAgICAgIGFuaW1OYW1lXG4gICAgICApO1xuXG4gICAgICAvLyBNYWtlIHN1cmUgdGhlIG5ldyB2aXNlbWUgaGFzIGFuIGFjdGl2ZSBmcmVlQmxlbmQgd2VpZ2h0XG4gICAgICBpZiAoIWlzVmlzZW1lQWN0aXZlIHx8ICF2aXNlbWVOYW1lcy5pbmNsdWRlcyh2aXNlbWUpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gRmluZCB0aGUgcGVhayB3ZWlnaHQgZm9yIHRoZSB2aXNlbWUgYW5kIHRoZSBhbW91bnQgb2YgdGltZSBpdCBzaG91bGRcbiAgICAgIC8vIHRha2UgdG8gcmVhY2ggaXRcbiAgICAgIGxldCB3ZWlnaHQgPSAxO1xuICAgICAgY29uc3QgZHVyYXRpb24gPSBtYXJrLmR1cmF0aW9uIC8gMTAwMDtcbiAgICAgIGlmIChkdXJhdGlvbiA8IGJsZW5kVGltZSkge1xuICAgICAgICBjb25zdCBsZXJwRmFjdG9yID0gYmxlbmRUaW1lID4gMCA/IGR1cmF0aW9uIC8gYmxlbmRUaW1lIDogMTtcbiAgICAgICAgd2VpZ2h0ID1cbiAgICAgICAgICBvdmVycmlkZVdlaWdodCAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IG92ZXJyaWRlV2VpZ2h0XG4gICAgICAgICAgICA6IE1hdGhVdGlscy5sZXJwKDAsIDEsIGxlcnBGYWN0b3IpO1xuICAgICAgfVxuICAgICAgY29uc3QgYmxlbmRJblRpbWUgPSBNYXRoLm1pbihkdXJhdGlvbiwgYmxlbmRUaW1lKTtcblxuICAgICAgLy8gRmluZCB0aGUgYW1vdW50IGFuZCB0aW1lIHZpc2VtZSB3aWxsIGJlIGhlbGQgZm9yXG4gICAgICBjb25zdCBob2xkVGltZSA9IGR1cmF0aW9uIC0gYmxlbmRUaW1lO1xuXG4gICAgICBpZiAoaG9sZFRpbWUgPCAwKSB7XG4gICAgICAgIC8vIFBlcmZvcm0gaW4gLT4gb3V0IGFuaW1hdGlvblxuICAgICAgICB0aGlzLl9hbmltYXRlU2ltcGxlVmlzZW1lKFxuICAgICAgICAgIGxheWVyTmFtZSxcbiAgICAgICAgICBhbmltTmFtZSxcbiAgICAgICAgICB2aXNlbWUsXG4gICAgICAgICAgd2VpZ2h0LFxuICAgICAgICAgIGJsZW5kSW5UaW1lLFxuICAgICAgICAgIGJsZW5kVGltZSxcbiAgICAgICAgICBlYXNpbmdGblxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgbGVycEZhY3RvciA9XG4gICAgICAgICAgZGVjYXlSYXRlLnNlY29uZHMgPiAwID8gaG9sZFRpbWUgLyBkZWNheVJhdGUuc2Vjb25kcyA6IDE7XG4gICAgICAgIC8vIFBlcmZvcm0gaW4gLT4gaG9sZCAtPiBvdXQgYW5pbWF0aW9uXG4gICAgICAgIGNvbnN0IGRlY2F5V2VpZ2h0ID0gTWF0aFV0aWxzLmxlcnAoXG4gICAgICAgICAgd2VpZ2h0LFxuICAgICAgICAgIHdlaWdodCAqIGRlY2F5UmF0ZS5hbW91bnQsXG4gICAgICAgICAgTWF0aC5taW4oMSwgbGVycEZhY3RvcilcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5fYW5pbWF0ZUhlbGRWaXNlbWUoXG4gICAgICAgICAgbGF5ZXJOYW1lLFxuICAgICAgICAgIGFuaW1OYW1lLFxuICAgICAgICAgIHZpc2VtZSxcbiAgICAgICAgICB3ZWlnaHQsXG4gICAgICAgICAgZGVjYXlXZWlnaHQsXG4gICAgICAgICAgYmxlbmRJblRpbWUsXG4gICAgICAgICAgaG9sZFRpbWUsXG4gICAgICAgICAgYmxlbmRUaW1lLFxuICAgICAgICAgIGVhc2luZ0ZuXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQW5pbWF0ZSBhIHZpc2VtZSBibGVuZCB3ZWlnaHQgdG93YXJkcyBhIHZhbHVlIGFuZCB0aGVuIGJhY2sgdG8gemVyby5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVyTmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRoYXQgY29udGFpbnMgdGhlIHZpc2VtZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGFuaW1OYW1lIC0gTmFtZSBvZiB0aGUgZnJlZWJsZW5kIGFuaW1hdGlvbiB0aGF0IGNvbnRhaW5zXG4gICAqIHRoZSB2aXNlbWUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB2aXNlbWVOYW1lIC0gTmFtZSBvZiB0aGUgYmxlbmQgd2VpZ2h0IHRvIG1hbmlwdWxhdGUuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB3ZWlnaHQgLSBQZWFrIHdlaWdodCB0byBhbmltYXRlIHRvd2FyZHMuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBibGVuZEluVGltZSAtIEFtb3VudCBvZiB0aW1lIGl0IHNob3VsZCB0YWtlIHRvIHJlYWNoIHRoZVxuICAgKiBwZWFrIHdlaWdodC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGJsZW5kT3V0VGltZSAtIEFtb3VudCBvZiB0aW1lIGl0IHNob3VsZCB0YWtlIHRvIGFuaW1hdGUgYmFja1xuICAgKiB0byB6ZXJvIGFmdGVyIHJlYWNoaW5nIHRoZSBwZWFrIHdlaWdodC5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZWFzaW5nRm4gLSBFYXNpbmcgZnVuY3Rpb24gdG8gdXNlIGR1cmluZyBhbmltYXRpb24uXG4gICAqL1xuICBfYW5pbWF0ZVNpbXBsZVZpc2VtZShcbiAgICBsYXllck5hbWUsXG4gICAgYW5pbU5hbWUsXG4gICAgdmlzZW1lTmFtZSxcbiAgICBwZWFrV2VpZ2h0LFxuICAgIGJsZW5kSW5UaW1lLFxuICAgIGJsZW5kT3V0VGltZSxcbiAgICBlYXNpbmdGblxuICApIHtcbiAgICAvLyBBbmltYXRlIHRvd2FyZHMgdGhlIHBlYWsgdmFsdWVcbiAgICBjb25zdCB3ZWlnaHRQcm9taXNlID0gdGhpcy5faG9zdC5BbmltYXRpb25GZWF0dXJlLnNldEFuaW1hdGlvbkJsZW5kV2VpZ2h0KFxuICAgICAgbGF5ZXJOYW1lLFxuICAgICAgYW5pbU5hbWUsXG4gICAgICB2aXNlbWVOYW1lLFxuICAgICAgcGVha1dlaWdodCxcbiAgICAgIGJsZW5kSW5UaW1lLFxuICAgICAgZWFzaW5nRm5cbiAgICApO1xuXG4gICAgLy8gQW5pbWF0ZSBiYWNrIHRvIHplcm8gaWYgdGhlcmUgd2FzIG5vIHdlaWdodCBpbnRlcnJ1cHRpb25cbiAgICB3ZWlnaHRQcm9taXNlLnRoZW4oKCkgPT4ge1xuICAgICAgaWYgKCF3ZWlnaHRQcm9taXNlLmNhbmNlbGVkKSB7XG4gICAgICAgIHRoaXMuX2hvc3QuQW5pbWF0aW9uRmVhdHVyZS5zZXRBbmltYXRpb25CbGVuZFdlaWdodChcbiAgICAgICAgICBsYXllck5hbWUsXG4gICAgICAgICAgYW5pbU5hbWUsXG4gICAgICAgICAgdmlzZW1lTmFtZSxcbiAgICAgICAgICAwLFxuICAgICAgICAgIGJsZW5kT3V0VGltZSxcbiAgICAgICAgICBlYXNpbmdGblxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFuaW1hdGUgYSB2aXNlbWUgYmxlbmQgd2VpZ2h0IHRvd2FyZHMgYSB2YWx1ZSBhbmQgdGhlbiBiYWNrIHRvIHplcm8uXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllck5hbWUgLSBOYW1lIG9mIHRoZSBsYXllciB0aGF0IGNvbnRhaW5zIHRoZSB2aXNlbWUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhbmltTmFtZSAtIE5hbWUgb2YgdGhlIGZyZWVibGVuZCBhbmltYXRpb24gdGhhdCBjb250YWluc1xuICAgKiB0aGUgdmlzZW1lLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdmlzZW1lTmFtZSAtIE5hbWUgb2YgdGhlIGJsZW5kIHdlaWdodCB0byBtYW5pcHVsYXRlLlxuICAgKiBAcGFyYW0ge251bWJlcn0gcGVha1dlaWdodCAtIFBlYWsgd2VpZ2h0IHRvIGFuaW1hdGUgdG93YXJkcy5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGRlY2F5V2VpZ2h0IC0gV2VpZ2h0IHRvIGFuaW1hdGUgdG93YXJkcyBhZnRlciByZWFjaGluZyB0aGVcbiAgICogcGVhayB3ZWlnaHQuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBibGVuZEluVGltZSAtIEFtb3VudCBvZiB0aW1lIGl0IHNob3VsZCB0YWtlIHRvIHJlYWNoIHRoZVxuICAgKiBwZWFrIHdlaWdodC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGhvbGRUaW1lIC0gQW1vdW50IG9mIHRpbWUgaXQgc2hvdWxkIHRha2UgdG8gcmVhY2ggdGhlIGRlY2F5XG4gICAqIHdlaWdodCBhZnRlciB0aGUgcGVhayB3ZWlnaHQgaGFzIGJlZW4gcmVhY2hlZC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGJsZW5kT3V0VGltZSAtIEFtb3VudCBvZiB0aW1lIGl0IHNob3VsZCB0YWtlIHRvIGFuaW1hdGUgYmFja1xuICAgKiB0byB6ZXJvIGFmdGVyIHJlYWNoaW5nIHRoZSBkZWNheSB3ZWlnaHQuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGVhc2luZ0ZuIC0gRWFzaW5nIGZ1bmN0aW9uIHRvIHVzZSBkdXJpbmcgYW5pbWF0aW9uLlxuICAgKi9cbiAgYXN5bmMgX2FuaW1hdGVIZWxkVmlzZW1lKFxuICAgIGxheWVyTmFtZSxcbiAgICBhbmltTmFtZSxcbiAgICB2aXNlbWVOYW1lLFxuICAgIHBlYWtXZWlnaHQsXG4gICAgZGVjYXlXZWlnaHQsXG4gICAgYmxlbmRJblRpbWUsXG4gICAgaG9sZFRpbWUsXG4gICAgYmxlbmRPdXRUaW1lLFxuICAgIGVhc2luZ0ZuXG4gICkge1xuICAgIC8vIEFuaW1hdGUgdG93YXJkcyB0aGUgcGVhayB2YWx1ZVxuICAgIGNvbnN0IHN0YXJ0UHJvbWlzZSA9IHRoaXMuX2hvc3QuQW5pbWF0aW9uRmVhdHVyZS5zZXRBbmltYXRpb25CbGVuZFdlaWdodChcbiAgICAgIGxheWVyTmFtZSxcbiAgICAgIGFuaW1OYW1lLFxuICAgICAgdmlzZW1lTmFtZSxcbiAgICAgIHBlYWtXZWlnaHQsXG4gICAgICBibGVuZEluVGltZSxcbiAgICAgIGVhc2luZ0ZuXG4gICAgKTtcblxuICAgIGF3YWl0IHN0YXJ0UHJvbWlzZTtcblxuICAgIGlmICghc3RhcnRQcm9taXNlLmNhbmNlbGVkKSB7XG4gICAgICAvLyBBbmltYXRlIHRvd2FyZHMgdGhlIGRlY2F5IHZhbHVlIGlmIHRoZXJlIHdhcyBubyB3ZWlnaHQgaW50ZXJydXB0aW9uXG4gICAgICBjb25zdCBob2xkUHJvbWlzZSA9IHRoaXMuX2hvc3QuQW5pbWF0aW9uRmVhdHVyZS5zZXRBbmltYXRpb25CbGVuZFdlaWdodChcbiAgICAgICAgbGF5ZXJOYW1lLFxuICAgICAgICBhbmltTmFtZSxcbiAgICAgICAgdmlzZW1lTmFtZSxcbiAgICAgICAgZGVjYXlXZWlnaHQsXG4gICAgICAgIGhvbGRUaW1lLFxuICAgICAgICBlYXNpbmdGblxuICAgICAgKTtcblxuICAgICAgYXdhaXQgaG9sZFByb21pc2U7XG5cbiAgICAgIGlmICghaG9sZFByb21pc2UuY2FuY2VsZWQpIHtcbiAgICAgICAgLy8gQW5pbWF0ZSBiYWNrIHRvIHplcm8gaWYgdGhlcmUgd2FzIG5vIHdlaWdodCBpbnRlcnJ1cHRpb25cbiAgICAgICAgdGhpcy5faG9zdC5BbmltYXRpb25GZWF0dXJlLnNldEFuaW1hdGlvbkJsZW5kV2VpZ2h0KFxuICAgICAgICAgIGxheWVyTmFtZSxcbiAgICAgICAgICBhbmltTmFtZSxcbiAgICAgICAgICB2aXNlbWVOYW1lLFxuICAgICAgICAgIDAsXG4gICAgICAgICAgYmxlbmRPdXRUaW1lLFxuICAgICAgICAgIGVhc2luZ0ZuXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgYW5kIHNldHMgdGhlIGFtb3VudCBvZiB0aW1lIGluIHNlY29uZHMgdG8gbmVnYXRpdmVseSBvZmZzZXQgc3BlZWNobWFya1xuICAgKiBlbWlzc2lvbiBieS5cbiAgICpcbiAgICogQHR5cGUge251bWJlcn1cbiAgICovXG4gIGdldCB2aXNlbWVMZWFkVGltZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fdmlzZW1lTGVhZFRpbWU7XG4gIH1cblxuICBzZXQgdmlzZW1lTGVhZFRpbWUoc2Vjb25kcykge1xuICAgIHRoaXMuX3Zpc2VtZUxlYWRUaW1lID0gc2Vjb25kcztcblxuICAgIGlmICh0aGlzLl9ob3N0LlRleHRUb1NwZWVjaEZlYXR1cmUpIHtcbiAgICAgIHRoaXMuX2hvc3QuVGV4dFRvU3BlZWNoRmVhdHVyZS5zcGVlY2htYXJrT2Zmc2V0ID0gLXNlY29uZHM7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFN0YXJ0IGtlZXBpbmcgdHJhY2sgb2YgYW4gYW5pbWF0aW9uIGxheWVyIHRoYXQgb3ducyBhIGZyZWVCbGVuZCBhbmltYXRpb25cbiAgICogd2l0aCBibGVuZFdlaWdodHMgY29ycmVzcG9uZGluZyB0byB2aXNlbWVzLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGF5ZXJOYW1lIC0gTmFtZSBvZiB0aGUgbGF5ZXIgdG8ga2VlcCB0cmFjayBvZi5cbiAgICogQHBhcmFtIHtPYmplY3Q9fSBvcHRpb25zIC0gT3B0aW9ucyBmb3IgdGhlIGxheWVyLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuYW5pbWF0aW9uPSd2aXNlbWVzJ10gLSBOYW1lIG9mIHRoZSBhbmltYXRpb24gb24gdGhlXG4gICAqIGxheWVyIHRoYXQgd2lsbCBiZSBwbGF5ZWQgZHVyaW5nIHNwZWVjaC4gVGhpcyBhbmltYXRpb24gbXVzdCBiZSBvZiB0eXBlXG4gICAqIGZyZWVCbGVuZC5cbiAgICogQHBhcmFtIHtPYmplY3Q9fSBkZWNheVJhdGVcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtkZWNheVJhdGUuYW1vdW50PTAuNV0gLSBUaGUgcGVyY2VudGFnZSB0byBkZWNyZWFzZSB0aGUgdmlzZW1lJ3NcbiAgICogcGVhayB2YWx1ZSBieSBvdmVyIHRpbWUgb25jZSB0aGUgcGVhayB2YWx1ZSBoYXMgYmVlbiByZWFjaGVkLlxuICAgKiBAcGFyYW0ge251bWJlcn0gW2RlY2F5UmF0ZS5zZWNvbmRzPTAuNV0gLSBUaGUgYW1vdW50IG9mIHRpbWUgaW4gc2Vjb25kcyB0b1xuICAgKiBkZWNyZWFzZSB0aGUgdmlzZW1lJ3Mgd2VpZ2h0IG9uY2UgaXQgaGFzIHJlYWNoZWQgaXRzIHBlYWsgdmFsdWUuXG4gICAqIEBwYXJhbSB7bnVtYmVyPX0gW29wdGlvbnMuYmxlbmRUaW1lPVtMaXBzeW5jRmVhdHVyZS5ERUZBVUxUX0xBWUVSX09QVElPTlMuYmxlbmRUaW1lXXtAbGluayBMaXBzeW5jRmVhdHVyZSNERUZBVUxUX0xBWUVSX09QVElPTlMjYmxlbmRUaW1lfV0gLVxuICAgKiBEZWZhdWx0IGFtb3VudCBvZiB0aW1lIHRvIHVzZSB3aGVuIG1hbmlwdWxhdGluZyBhbmltYXRpb24gYmxlbmRXZWlnaHRzLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb3B0aW9ucy5lYXNpbmdGbiAtIERlZmF1bHQgZWFzaW5nIGZ1bmN0aW9uIHRvIHVzZSB3aGVuXG4gICAqIG1hbmlwdWxhdGluZyBhbmltYXRpb24gYmxlbmRXZWlnaHRzLlxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnMudmlzZW1lTWFwPURlZmF1bHRWaXNlbWVNYXBdIC0gT2JqZWN0IGNvbnRhaW5pbmcga2V5L3ZhbHVlIHBhaXJzIG9mXG4gICAqIFBvbGx5IHZpc2VtZSBuYW1lcyBtYXBwZWQgdG8gb2JqZWN0cyBjb250YWluaW5nIHRoZSBuYW1lIG9mIHRoZSBjb3JyZXNwb25kaW5nXG4gICAqIGFuaW1hdGlvbiBibGVuZFdlaWdodCBhbmQgYW55IG90aGVyIGFuaW1hdGlvbiBvcHRpb25zIHRvIHVzZSBzdWNoIGFzIHZpc2VtZVxuICAgKiBzcGVjaWZpYyBibGVuZCB0aW1lcyBhbmQgZWFzaW5nIGZ1bmN0aW9ucy5cbiAgICovXG4gIHJlZ2lzdGVyVmlzZW1lTGF5ZXIoXG4gICAgbGF5ZXJOYW1lLFxuICAgIHtcbiAgICAgIGFuaW1hdGlvbiA9ICd2aXNlbWVzJyxcbiAgICAgIGRlY2F5UmF0ZSA9IHthbW91bnQ6IDAuNSwgc2Vjb25kczogMC41fSxcbiAgICAgIGJsZW5kVGltZSA9IExpcHN5bmNGZWF0dXJlLkRFRkFVTFRfTEFZRVJfT1BUSU9OUy5ibGVuZFRpbWUsXG4gICAgICBlYXNpbmdGbixcbiAgICAgIHZpc2VtZU1hcCA9IERlZmF1bHRWaXNlbWVNYXAsXG4gICAgfSA9IHt9XG4gICkge1xuICAgIC8vIFJlZ2lzdGVyIHRoZSBsYXllciBhbmQgYW5pbWF0aW9uXG4gICAgdGhpcy5yZWdpc3RlckxheWVyKGxheWVyTmFtZSwge1xuICAgICAgZGVjYXlSYXRlLFxuICAgICAgYmxlbmRUaW1lLFxuICAgICAgZWFzaW5nRm4sXG4gICAgICBhbmltYXRpb25zOiB7W2FuaW1hdGlvbl06IHt2aXNlbWVNYXB9fSxcbiAgICB9KTtcbiAgICB0aGlzLl92aXNlbWVMYXllcnNbbGF5ZXJOYW1lXSA9IGFuaW1hdGlvbjtcblxuICAgIC8vIFZhbGlkYXRlIHRoZSB2aXNlbWUgYW5pbWF0aW9uXG4gICAgdGhpcy5fcmVnaXN0ZXJWaXNlbWVBbmltYXRpb24obGF5ZXJOYW1lLCBhbmltYXRpb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0YXJ0IGtlZXBpbmcgdHJhY2sgb2YgYW4gYW5pbWF0aW9uIGxheWVyIHRoYXQgY29udGFpbnMgYSBsb29waW5nIGFuaW1hdGlvblxuICAgKiB0byBiZSBwbGF5ZWQgZHVyaW5nIHNwZWVjaC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVyTmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRvIGtlZXAgdHJhY2sgb2YuXG4gICAqIEBwYXJhbSB7T2JqZWN0PX0gb3B0aW9ucyAtIE9wdGlvbnMgZm9yIHRoZSBsYXllci5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmFuaW1hdGlvbj0nc3RhbmRfdGFsayddIC0gTmFtZSBvZiB0aGUgYW5pbWF0aW9uIG9uIHRoZVxuICAgKiBsYXllciB0aGF0IHdpbGwgYmUgcGxheWVkIGR1cmluZyBzcGVlY2guXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5ibGVuZFRpbWU9W0xpcHN5bmNGZWF0dXJlLkRFRkFVTFRfTEFZRVJfT1BUSU9OUy5ibGVuZFRpbWVde0BsaW5rIExpcHN5bmNGZWF0dXJlI0RFRkFVTFRfTEFZRVJfT1BUSU9OUyNibGVuZFRpbWV9XSAtXG4gICAqIERlZmF1bHQgYW1vdW50IG9mIHRpbWUgdG8gdXNlIHdoZW4gbWFuaXB1bGF0aW5nIHRoZSBsYXllcidzIHdlaWdodHMuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvcHRpb25zLmVhc2luZ0ZuIC0gRGVmYXVsdCBlYXNpbmcgZnVuY3Rpb24gdG8gdXNlIHdoZW5cbiAgICogbWFuaXB1bGF0aW5nIHRoZSBsYXllcidzIHdlaWdodHMuXG4gICAqL1xuICByZWdpc3RlclRhbGtpbmdMYXllcihcbiAgICBsYXllck5hbWUsXG4gICAge1xuICAgICAgYW5pbWF0aW9uID0gJ3N0YW5kX3RhbGsnLFxuICAgICAgYmxlbmRUaW1lID0gTGlwc3luY0ZlYXR1cmUuREVGQVVMVF9MQVlFUl9PUFRJT05TLmJsZW5kVGltZSxcbiAgICAgIGVhc2luZ0ZuLFxuICAgIH0gPSB7fVxuICApIHtcbiAgICAvLyBSZWdpc3RlciB0aGUgbGF5ZXIgYW5kIGFuaW1hdGlvblxuICAgIHRoaXMucmVnaXN0ZXJMYXllcihsYXllck5hbWUsIHtcbiAgICAgIGJsZW5kVGltZSxcbiAgICAgIGVhc2luZ0ZuLFxuICAgICAgYW5pbWF0aW9uczoge1thbmltYXRpb25dOiB7fX0sXG4gICAgfSk7XG4gICAgdGhpcy5fdGFsa2luZ0xheWVyc1tsYXllck5hbWVdID0gYW5pbWF0aW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBuYW1lc3BhY2UgdG8gdGhlIGhvc3Qgd2l0aCB0aGUgbmFtZSBvZiB0aGUgZmVhdHVyZSB0byBjb250YWluIHByb3BlcnRpZXNcbiAgICogYW5kIG1ldGhvZHMgZnJvbSB0aGUgZmVhdHVyZSB0aGF0IHVzZXJzIG9mIHRoZSBob3N0IG5lZWQgYWNjZXNzIHRvLlxuICAgKlxuICAgKiBAc2VlIExpcHN5bmNGZWF0dXJlXG4gICAqL1xuICBpbnN0YWxsQXBpKCkge1xuICAgIC8qKlxuICAgICAqIEBpbm5lclxuICAgICAqIEBuYW1lc3BhY2UgTGlwc3luY0ZlYXR1cmVcbiAgICAgKi9cbiAgICBjb25zdCBhcGkgPSBzdXBlci5pbnN0YWxsQXBpKCk7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyb2YgTGlwc3luY0ZlYXR1cmVcbiAgICAgKiBAbmFtZSByZWdpc3RlckxheWVyXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBzZWUgTWFuYWdlZEFuaW1hdGlvbkxheWVySW50ZXJmYWNlI3JlZ2lzdGVyTGF5ZXJcbiAgICAgKi9cblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXJvZiBMaXBzeW5jRmVhdHVyZVxuICAgICAqIEBuYW1lIHJlZ2lzdGVyQW5pbWF0aW9uXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBzZWUgTWFuYWdlZEFuaW1hdGlvbkxheWVySW50ZXJmYWNlI3JlZ2lzdGVyQW5pbWF0aW9uXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyb2YgTGlwc3luY0ZlYXR1cmVcbiAgICAgKiBAbmFtZSBzZXRMYXllcldlaWdodHNcbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQHNlZSBNYW5hZ2VkQW5pbWF0aW9uTGF5ZXJJbnRlcmZhY2Ujc2V0TGF5ZXJXZWlnaHRzXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyb2YgTGlwc3luY0ZlYXR1cmVcbiAgICAgKiBAbmFtZSBlbmFibGVcbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQHNlZSBNYW5hZ2VkQW5pbWF0aW9uTGF5ZXJJbnRlcmZhY2UjZW5hYmxlXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyb2YgTGlwc3luY0ZlYXR1cmVcbiAgICAgKiBAbmFtZSBkaXNhYmxlXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBzZWUgTWFuYWdlZEFuaW1hdGlvbkxheWVySW50ZXJmYWNlI2Rpc2FibGVcbiAgICAgKi9cblxuICAgIE9iamVjdC5hc3NpZ24oYXBpLCB7XG4gICAgICAvKipcbiAgICAgICAqIEBtZW1iZXJvZiBMaXBzeW5jRmVhdHVyZVxuICAgICAgICogQGluc3RhbmNlXG4gICAgICAgKiBAbWV0aG9kXG4gICAgICAgKiBAc2VlIGNvcmUvTGlwc3luY0ZlYXR1cmUjcmVnaXN0ZXJWaXNlbWVMYXllclxuICAgICAgICovXG4gICAgICByZWdpc3RlclZpc2VtZUxheWVyOiB0aGlzLnJlZ2lzdGVyVmlzZW1lTGF5ZXIuYmluZCh0aGlzKSxcbiAgICAgIC8qKlxuICAgICAgICogQG1lbWJlcm9mIExpcHN5bmNGZWF0dXJlXG4gICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAqIEBtZXRob2RcbiAgICAgICAqIEBzZWUgY29yZS9MaXBzeW5jRmVhdHVyZSNyZWdpc3RlclRhbGtpbmdMYXllclxuICAgICAgICovXG4gICAgICByZWdpc3RlclRhbGtpbmdMYXllcjogdGhpcy5yZWdpc3RlclRhbGtpbmdMYXllci5iaW5kKHRoaXMpLFxuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlcm9mIExpcHN5bmNGZWF0dXJlXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQG5hbWUgdmlzZW1lTGVhZFRpbWVcbiAgICAgKiBAc2VlIGNvcmUvTGlwc3luY0ZlYXR1cmUjdmlzZW1lTGVhZFRpbWVcbiAgICAgKi9cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoYXBpLCAndmlzZW1lTGVhZFRpbWUnLCB7XG4gICAgICBnZXQ6ICgpID0+IHRoaXMudmlzZW1lTGVhZFRpbWUsXG4gICAgICBzZXQ6IHNlY29uZHMgPT4ge1xuICAgICAgICB0aGlzLnZpc2VtZUxlYWRUaW1lID0gc2Vjb25kcztcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gYXBpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IExpcHN5bmNGZWF0dXJlO1xuZXhwb3J0IHtEZWZhdWx0VmlzZW1lTWFwfTtcbiIsIi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXG4vLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxuXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtY2xhc3Nlcy1wZXItZmlsZSAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tZW1wdHkgKi9cbmltcG9ydCBUZXh0VG9TcGVlY2hGZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlIGZyb20gJ2NvcmUvYXdzcGFjay9UZXh0VG9TcGVlY2hGZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlJztcblxuLyoqXG4gKiBDbGFzcyBmYWN0b3J5IGludGVyZmFjZSBmb3IgdGhhdCByZWdpc3RlcnMgY2FsbGJhY2sgbWV0aG9kIHdoZW4gYSBzc21sIHNwZWVjaG1hcmsgZXZlbnQgaXMgZW1pdHRlZC5cbiAqXG4gKiBAaW50ZXJmYWNlXG4gKiBAZXh0ZW5kcyBUZXh0VG9TcGVlY2hGZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlXG4gKi9cbmNsYXNzIFNTTUxTcGVlY2htYXJrSW50ZXJmYWNlIGV4dGVuZHMgVGV4dFRvU3BlZWNoRmVhdHVyZURlcGVuZGVudEludGVyZmFjZSB7XG4gIC8qKlxuICAgKiBXaGVuIHNzbWwgZXZlbnRzIGFyZSBjYXVnaHQsIHRoaXMgd2lsbCB0cnkgdG8gcGFyc2UgdGhlIHNwZWVjaCBtYXJrIHZhbHVlIGFuZCBleGVjdXRlIGFueSBmdW5jdGlvbiB3aGljaCBtZWV0cyBjcml0ZXJpYSBkZWZpbmVkIGluIHRoZSB2YWx1ZS5cbiAgICogU3BlZWNoIG1hcmsgdmFsdWUgd2lsbCBiZSB0cmVhdGVkIGFzIHN0cmluZ2lmaWVkIGpzb24gZm9ybWF0IGNvbnRhaW5pbmcgcmVxdWlyZWQgZmVhdHVyZSBuYW1lLCBmdW5jdGlvbiBuYW1lIGFuZCBhcmd1bWVudCBhcnJheSB0byBwYXNzIGluLlxuICAgKiBFeGFtcGxlIHNwZWVjaCBtYXJrIHZhbHVlIG1pZ2h0IGxvb2sgbGlrZTogJ3tcImZlYXR1cmVcIjpcIkdlc3R1cmVGZWF0dXJlXCIsIFwibWV0aG9kXCI6XCJzd2l0Y2hUb0dlc3R1cmVcIiwgXCJhcmdzXCI6W1wiZ2VucmljQVwiLCAwLjVdfSdcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IGV2ZW50IC0gRXZlbnQgZGF0YSBwYXNzZWQgZnJvbSB0aGUgc3BlZWNoLlxuICAgKiBAcGFyYW0ge09iamVjdH0gZXZlbnQubWFyayAtIFNwZWVjaG1hcmsgb2JqZWN0LlxuICAgKi9cbiAgX29uU3NtbCh7bWFya30pIHt9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBjbGFzcyB0aGF0IGltcGxlbWVudHMge0BsaW5rIFNTTUxTcGVlY2htYXJrSW50ZXJmYWNlfVxuICAgKiBhbmQgZXh0ZW5kcyBhIHNwZWNpZmllZCBiYXNlIGNsYXNzLlxuICAgKlxuICAgKiBAcGFyYW0ge0NsYXNzfSBCYXNlQ2xhc3MgLSBUaGUgY2xhc3MgdG8gZXh0ZW5kLlxuICAgKlxuICAgKiBAcmV0dXJuIHtDbGFzc30gQSBjbGFzcyB0aGF0IGV4dGVuZHMgYEJhc2VDbGFzc2AgYW5kIGltcGxlbWVudHMge0BsaW5rIFNTTUxTcGVlY2htYXJrSW50ZXJmYWNlfS5cbiAgICovXG4gIHN0YXRpYyBNaXhpbihCYXNlQ2xhc3MpIHtcbiAgICBjb25zdCBQYXJlbnRDbGFzcyA9IFRleHRUb1NwZWVjaEZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2UuTWl4aW4oQmFzZUNsYXNzKTtcbiAgICBjb25zdCBTU01MU3BlZWNoTWFya01peGluID0gY2xhc3MgZXh0ZW5kcyBQYXJlbnRDbGFzcyB7XG4gICAgICBfb25Tc21sKHttYXJrfSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHtmZWF0dXJlLCBtZXRob2QsIGFyZ3N9ID0gSlNPTi5wYXJzZShtYXJrLnZhbHVlKTtcbiAgICAgICAgICBpZiAodGhpcy5jb25zdHJ1Y3Rvci5uYW1lID09PSBmZWF0dXJlKSB7XG4gICAgICAgICAgICBjb25zdCBjYWxsYmFjayA9IHRoaXNbbWV0aG9kXTtcbiAgICAgICAgICAgIGlmIChjYWxsYmFjayAmJiB0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkodGhpcywgYXJncylcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUud2FybihgRnVuY3Rpb24gJHttZXRob2R9IGRvZXMgbm90IGV4aXN0IHdpdGhpbiBmZWF0dXJlICR7ZmVhdHVyZX1gKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaChlKSB7fVxuICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gU1NNTFNwZWVjaE1hcmtNaXhpbjtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBTU01MU3BlZWNobWFya0ludGVyZmFjZTtcbiIsIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVC0wXG5pbXBvcnQgTWFuYWdlZEFuaW1hdGlvbkxheWVySW50ZXJmYWNlIGZyb20gJy4vYW5pbXBhY2svTWFuYWdlZEFuaW1hdGlvbkxheWVySW50ZXJmYWNlJztcbmltcG9ydCBTU01MU3BlZWNobWFya0ludGVyZmFjZSBmcm9tICcuL2F3c3BhY2svU1NNTFNwZWVjaG1hcmtJbnRlcmZhY2UnO1xuaW1wb3J0IEFic3RyYWN0SG9zdEZlYXR1cmUgZnJvbSAnLi9BYnN0cmFjdEhvc3RGZWF0dXJlJztcbmltcG9ydCBEZWZlcnJlZCBmcm9tICcuL0RlZmVycmVkJztcbmltcG9ydCBVdGlscyBmcm9tICcuL1V0aWxzJztcblxuY29uc3QgRGVmYXVsdEdlc3R1cmVXb3JkcyA9IHtcbiAgYmlnOiBbXG4gICAgJ2FkZCcsXG4gICAgJ2Fib3ZlJyxcbiAgICAnYXV0aG9yaXR5JyxcbiAgICAnYmlnJyxcbiAgICAnY292ZXInLFxuICAgICdmdWxsJyxcbiAgICAnZmx5JyxcbiAgICAnZ3JvdycsXG4gICAgJ2dyb3d0aCcsXG4gICAgJ2hpZ2gnLFxuICAgICdodWdlJyxcbiAgICAnaW5jcmVhc2UnLFxuICAgICdtYWpvcicsXG4gICAgJ21ham9yaXR5JyxcbiAgICAnbGFyZ2UnLFxuICAgICdsZWFkZXInLFxuICAgICdsb3QnLFxuICAgICdyYWlzZScsXG4gICAgJ3Jpc2UnLFxuICAgICd0YWxsJyxcbiAgXSxcbiAgaGVhcnQ6IFtcbiAgICAnYWNjZXB0JyxcbiAgICAnYWRtaXQnLFxuICAgICdiZWxpZXZlJyxcbiAgICAnY2FyZScsXG4gICAgJ2ZlZWxpbmcnLFxuICAgICdmZWVsJyxcbiAgICAnZnJpZW5kJyxcbiAgICAnZ3JhdGVmdWwnLFxuICAgICdoYXBweScsXG4gICAgJ2hlYXJ0JyxcbiAgICAnaHVtYW4nLFxuICAgICdwYWluJyxcbiAgICAnc2F2ZScsXG4gICAgJ3NhZmUnLFxuICAgICdraW5kJyxcbiAgICAnbG92ZScsXG4gIF0sXG4gIGluOiBbXG4gICAgJ2luY2x1ZGUnLFxuICAgICdpbmNsdWRpbmcnLFxuICAgICdpbnNpZGUnLFxuICAgICdpbnRvJyxcbiAgICAnbm93JyxcbiAgICAnbmVhcicsXG4gICAgJ25lYXJlc3QnLFxuICAgICdjbG9zZXN0JyxcbiAgICAndGhlcmVpbicsXG4gICAgJ3dpdGhpbicsXG4gIF0sXG4gIG1hbnk6IFtcbiAgICAnYWxsJyxcbiAgICAnYWx3YXlzJyxcbiAgICAnYW55JyxcbiAgICAnYW55b25lJyxcbiAgICAnYW1vbmcnLFxuICAgICdhcmVhJyxcbiAgICAnYXJvdW5kJyxcbiAgICAnYmVhdXRpZnVsJyxcbiAgICAnZW50aXJlJyxcbiAgICAnZW52aXJvbm1lbnQnLFxuICAgICdlbnZpcm9ubWVudHMnLFxuICAgICdlbnZpcm9ubWVudGFsJyxcbiAgICAnZXZlcnlib2R5JyxcbiAgICAnZXZlcnlvbmUnLFxuICAgICdldmVyeXRoaW5nJyxcbiAgICAnYXVkaWVuY2UnLFxuICAgICd0b3RhbCcsXG4gICAgJ2dyb3VwJyxcbiAgICAnZ3JvdXBzJyxcbiAgICAnbWlsbGlvbicsXG4gICAgJ21pbGxpb25zJyxcbiAgICAnb3RoZXJzJyxcbiAgICAnYmlsbGlvbicsXG4gICAgJ2JpbGxpb25zJyxcbiAgICAnaHVuZHJlZCcsXG4gICAgJ2h1bmRyZWRzJyxcbiAgICAnbWFueScsXG4gICAgJ3Rob3VzYW5kJyxcbiAgICAndGhvdXNhbmRzJyxcbiAgICAnd29ybGQnLFxuICAgICd3b3JsZHMnLFxuICAgICdvdXRzaWRlJyxcbiAgICAncmV2ZWFsJyxcbiAgXSxcbiAgbW92ZW1lbnQ6IFtcbiAgICAnYXdheScsXG4gICAgJ2Fjcm9zcycsXG4gICAgJ2FoZWFkJyxcbiAgICAnYWxvbmcnLFxuICAgICdmYXInLFxuICAgICdmYXN0JyxcbiAgICAnZm9sbG93JyxcbiAgICAnZ28nLFxuICAgICdsZWF2ZScsXG4gICAgJ21vdmUnLFxuICAgICdtb3ZlbWVudCcsXG4gICAgJ3Rocm91Z2gnLFxuICAgICd0aHJvdWdob3V0JyxcbiAgICAndG93YXJkJyxcbiAgICAndHJhdmVsJyxcbiAgICAndHVybmVkJyxcbiAgICAncGFzc2VkJyxcbiAgXSxcbiAgb25lOiBbXG4gICAgJ3NpbmdsZScsXG4gICAgJ29uZScsXG4gICAgJ29uY2UnLFxuICAgICdmaXJzdCcsXG4gICAgJ2ZpcnN0bHknLFxuICAgICdvbmx5JyxcbiAgICAnc29sbycsXG4gICAgJ3dhcm5lZCcsXG4gICAgJ3RydWx5JyxcbiAgICAndXAnLFxuICAgICdhbG9uZScsXG4gIF0sXG4gIGFnZ3Jlc3NpdmU6IFtcbiAgICAncG93ZXInLFxuICAgICdwb3dlcnMnLFxuICAgICdwb3dlcmZ1bCcsXG4gICAgJ2Fzc2VydCcsXG4gICAgJ2Fzc2VydGl2ZScsXG4gICAgJ3N0cm9uZycsXG4gICAgJ3N0cm9uZ2VyJyxcbiAgICAnc3Ryb25nZXN0JyxcbiAgICAnc3RyZW5ndGgnLFxuICAgICdmbGV4JyxcbiAgICAnZGFuZycsXG4gICAgJ2RhbW4nLFxuICAgICdkYW1uaXQnLFxuICAgICdkYXJuJyxcbiAgICAnc2h1Y2tzJyxcbiAgICAnZG9oJyxcbiAgICAnZHJhdCcsXG4gICAgJ2FuZ3J5JyxcbiAgICAnYW5ncmllcicsXG4gICAgJ2FuZ3JpZXN0JyxcbiAgICAnYWdncmVzc2l2ZScsXG4gICAgJ2Fubm95ZWQnLFxuICAgICdhbm5veWluZycsXG4gICAgJ2F0dGFjaycsXG4gICAgJ2F0dGFja2luZycsXG4gICAgJ29mZmVuc2UnLFxuICAgICdvZmZlbnNpdmUnLFxuICAgICdiYXR0bGUnLFxuICBdLFxuICB5b3U6IFsneW91JywgJ3lhbGwnLCBcInknYWxsXCIsICd5b3VyJywgJ3lvdXJzJywgJ3Rob3UnLCAndGh5J10sXG4gIGRlZmVuc2U6IFtcbiAgICAnZGVmZW5zZScsXG4gICAgJ2ZlYXInLFxuICAgICdyZXB1bHNlZCcsXG4gICAgJ3NjYXJlZCcsXG4gICAgJ3NjYXJ5JyxcbiAgICAnc2NhcmllcicsXG4gICAgJ3NjYXJpZXN0JyxcbiAgICAnZmVhcmZ1bCcsXG4gICAgJ2FmcmFpZCcsXG4gICAgJ2Nvd2VyJyxcbiAgICAnY293ZXJzJyxcbiAgICAnY293ZXJpbmcnLFxuICAgICdoaWRlb3VzJyxcbiAgICAnZG9vbWVkJyxcbiAgICAndGVycmlmaWVkJyxcbiAgICAndGVycmlmeScsXG4gICAgJ3RlcnJpZnlpbmcnLFxuICAgICd0ZXJyaWZpZXMnLFxuICAgICdzcG9va3knLFxuICAgICdzcG9va2llcicsXG4gICAgJ3Nwb29raWVzdCcsXG4gIF0sXG4gIHdhdmU6IFtcbiAgICAnaGVsbG8nLFxuICAgICdoaScsXG4gICAgJ2hpeWEnLFxuICAgICdob3dkeScsXG4gICAgJ3dlbGNvbWUnLFxuICAgICdhbG9oYScsXG4gICAgJ2hleWEnLFxuICAgICdoZXknLFxuICAgICdieWUnLFxuICAgICdnb29kYnllJyxcbiAgICAnaG9sYScsXG4gICAgJ2FkaW9zJyxcbiAgICAnY2hhbycsXG4gIF0sXG4gIHNlbGY6IFsnbXknLCAnSScsICdteXNlbGYnLCAnc2VsZicsIFwiSSd2ZVwiLCAnSXZlJywgJ21lJywgJ21pbmUnLCAnb3duJ10sXG59O1xuXG4vKipcbiAqIEdlc3R1cmUgYWxsb3dzIHlvdSB0byBwbGF5IGFuaW1hdGlvbnMgb24gZGVtYW5kIG9uIG9uZSBvciBtb3JlIGxheWVycyBmcm9tIHNjcmlwdFxuICogb3Igc3NtbC4gSWYgZ2VzdHVyZSBpcyBwbGF5ZWQgdGhhdCBpcyBhIFF1ZXVlU3RhdGUsIHRoZSBxdWV1ZSB3aWxsIGF1dG9tYXRpY2FsbHlcbiAqIGJlIHByb2dyZXNzZWQgYWZ0ZXIgYSBnaXZlbiBob2xkIHRpbWUgaWYgYSBsb29waW5nIHF1ZXVlZCBzdGF0ZSBpcyByZWFjaGVkLiBHZXN0dXJlXG4gKiBsYXllcnMgY2FuIG9wdGlvbmFsbHkgYmUgYXV0b21hdGljYWxseSBkaXNhYmxlZCB3aGVuIG5vIGdlc3R1cmUgYW5pbWF0aW9uIGlzXG4gKiBpbiBwcm9ncmVzcy5cbiAqXG4gKiBAZXh0ZW5kcyBBYnN0cmFjdEhvc3RGZWF0dXJlXG4gKiBAaW1wbGVtZW50cyBTU01MU3BlZWNobWFya0ludGVyZmFjZVxuICogQGltcGxlbWVudHMgTWFuYWdlZEFuaW1hdGlvbkxheWVySW50ZXJmYWNlXG4gKi9cbmNsYXNzIEdlc3R1cmVGZWF0dXJlIGV4dGVuZHMgQWJzdHJhY3RIb3N0RmVhdHVyZS5taXgoXG4gIFNTTUxTcGVlY2htYXJrSW50ZXJmYWNlLk1peGluLFxuICBNYW5hZ2VkQW5pbWF0aW9uTGF5ZXJJbnRlcmZhY2UuTWl4aW5cbikge1xuICAvKipcbiAgICogQGNvbnN0cnVjdG9yXG4gICAqXG4gICAqIEBwYXJhbSB7Y29yZS9Ib3N0T2JqZWN0fSBob3N0IC0gSG9zdCBvYmplY3QgdGhhdCBvd25zIHRoZSBmZWF0dXJlLlxuICAgKiBAcGFyYW0ge09iamVjdD19IG9wdGlvbnMgLSBPcHRpb25hbCBvcHRpb25zIGZvciB0aGUgZmVhdHVyZS5cbiAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLmhvbGRUaW1lID0gM10gLSBBbW91bnQgb2YgdGltZSBpbiBzZWNvbmRzIHRoYXQgbXVzdFxuICAgKiBlbGFwc2UgYmVmb3JlIGFkdmFuY2luZyBhIGdlc3R1cmUgdGhhdCdzIGEge0BsaW5rIFF1ZXVlU3RhdGV9IHdoZW4gdGhlIGN1cnJlbnRcbiAgICogc3RhdGUgaW4gdGhlIHF1ZXVlIGlzIHNldCB0byBsb29wIGluZmluaXRlbHkuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5taW5pbXVtSW50ZXJ2YWwgPSAwLjI1XSAtIFRoZSBtaW5pbXVtIGFtb3VudCBvZiB0aW1lXG4gICAqIGluIHNlY29uZHMgdGhhdCBtdXN0IGVsYXBzZSBiZWZvcmUgYW5vdGhlciBnZXN0dXJlIGNhbiBiZSBwbGF5ZWQuXG4gICAqIEBwYXJhbSAge09iamVjdH0gbGF5ZXJzIC0gQW4gb2JqZWN0IHRoYXQgbWFwcyBsYXllciBuYW1lcyB0byBsYXllciBvcHRpb25zLlxuICAgKiBUaGVzZSBhcmUgdGhlIGxheWVycyB0aGF0IHdpbGwgYmUgcmVnaXN0ZXJlZCBhcyB0cmFja2VkIGdlc3R1cmUgbGF5ZXJzLiBTZWVcbiAgICoge0BsaW5rIE1hbmFnZWRBbmltYXRpb25MYXllckludGVyZmFjZSNyZWdpc3RlckxheWVyfSBmb3IgbW9yZSBpbmZvcm1hdGlvblxuICAgKiBvbiBleHBlY3RlZCBmb3JtYXQgZm9yIGVhY2ggbGF5ZXIgb3B0aW9ucyBvYmplY3QuXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihob3N0LCB7aG9sZFRpbWUgPSAzLCBtaW5pbXVtSW50ZXJ2YWwgPSAxLCBsYXllcnMgPSB7fX0gPSB7fSkge1xuICAgIHN1cGVyKGhvc3QpO1xuXG4gICAgdGhpcy5ob2xkVGltZSA9IGhvbGRUaW1lO1xuICAgIHRoaXMubWluaW11bUludGVydmFsID0gbWluaW11bUludGVydmFsO1xuXG4gICAgLy8gUmVnaXN0ZXIgdGhlIGdlc3R1cmUgbGF5ZXJzXG4gICAgT2JqZWN0LmVudHJpZXMobGF5ZXJzKS5mb3JFYWNoKChbbmFtZSwgb3B0aW9ucyA9IHt9XSkgPT4ge1xuICAgICAgdGhpcy5yZWdpc3RlckxheWVyKG5hbWUsIG9wdGlvbnMpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIHZhbGlkIGhvbGQgdGltZSB2YWx1ZS4gSWYgaG9sZCB0aW1lIGlzbid0IGRlZmluZWQgZm9yIHRoZSBhbmltYXRpb24sXG4gICAqIHRyeSB0byB1c2UgdGhlIGhvbGQgdGltZSBmb3IgdGhlIGxheWVyLiBJZiB0aGF0J3Mgbm90IGRlZmluZWQsIGZhbGwgYmFjayB0b1xuICAgKiB0aGUgaG9sZCB0aW1lIGZvciB0aGUgZmVhdHVyZS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IGxheWVyIC0gTWFuYWdlZCBsYXllciBvcHRpb25zIG9iamVjdC5cbiAgICogQHBhcmFtIHtPYmplY3R9IGFuaW1hdGlvbiAtIE1hbmFnZWQgYW5pbWF0aW9uIG9wdGlvbnMgb2JqZWN0LlxuICAgKlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgX2dldEhvbGRUaW1lKGxheWVyLCBhbmltYXRpb24pIHtcbiAgICBjb25zdCBsYXllckhvbGRUaW1lID1cbiAgICAgIGxheWVyLmhvbGRUaW1lICE9PSB1bmRlZmluZWQgPyBsYXllci5ob2xkVGltZSA6IHRoaXMuaG9sZFRpbWU7XG5cbiAgICByZXR1cm4gYW5pbWF0aW9uLmhvbGRUaW1lICE9PSB1bmRlZmluZWRcbiAgICAgID8gYW5pbWF0aW9uLmhvbGRUaW1lXG4gICAgICA6IGxheWVySG9sZFRpbWU7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGEgdmFsaWQgbWluaW11bSBpbnRlcnZhbCB2YWx1ZS4gSWYgbWluaW11bSBpbnRlcnZhbCBpc24ndCBkZWZpbmVkIGZvclxuICAgKiB0aGUgYW5pbWF0aW9uLCB0cnkgdG8gdXNlIHRoZSBtaW5pbXVtIGludGVydmFsIGZvciB0aGUgbGF5ZXIuIElmIHRoYXQncyBub3RcbiAgICogZGVmaW5lZCwgZmFsbCBiYWNrIHRvIHRoZSBtaW5pbXVtIGludGVydmFsIGZvciB0aGUgZmVhdHVyZS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IGxheWVyIC0gTWFuYWdlZCBsYXllciBvcHRpb25zIG9iamVjdC5cbiAgICogQHBhcmFtIHtPYmplY3R9IGFuaW1hdGlvbiAtIE1hbmFnZWQgYW5pbWF0aW9uIG9wdGlvbnMgb2JqZWN0LlxuICAgKlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgX2dldE1pbmltdW1JbnRlcnZhbChsYXllciwgYW5pbWF0aW9uKSB7XG4gICAgY29uc3QgbGF5ZXJNaW5pbXVtSW50ZXJ2YWwgPVxuICAgICAgbGF5ZXIubWluaW11bUludGVydmFsICE9PSB1bmRlZmluZWRcbiAgICAgICAgPyBsYXllci5taW5pbXVtSW50ZXJ2YWxcbiAgICAgICAgOiB0aGlzLm1pbmltdW1JbnRlcnZhbDtcblxuICAgIHJldHVybiBhbmltYXRpb24ubWluaW11bUludGVydmFsICE9PSB1bmRlZmluZWRcbiAgICAgID8gYW5pbWF0aW9uLm1pbmltdW1JbnRlcnZhbFxuICAgICAgOiBsYXllck1pbmltdW1JbnRlcnZhbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmb3Ige0BsaW5rIGNvcmUvQW5pbWF0aW9uRmVhdHVyZSNwbGF5TmV4dEFuaW1hdGlvbn0gZXZlbnQuIElmIHRoZVxuICAgKiBldmVudCBpcyBlbWl0dGVkIGZvciBhIG1hbmFnZWQgYW5pbWF0aW9uIGFuZCB0aGUgbmV3IHF1ZXVlZCBzdGF0ZSBjYW5ub3RcbiAgICogYWR2YW5jZSBvbiBpdHMgb3duLCBzdGFydCBhIG5ldyB0aW1lciBwcm9taXNlIHRoYXQgd2lsbCBhZHZhbmNlIHRoZSBxdWV1ZVxuICAgKiBvbmNlIGl0IHJlc29sdmVzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIE9wdGlvbnMgb2JqZWN0IHBhc3NlZCBmcm9tIHBsYXlOZXh0QW5pbWF0aW9uIGV2ZW50LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGF5ZXJOYW1lIC0gTmFtZSBvZiB0aGUgbGF5ZXIgdGhhdCBvd25zIHRoZSBxdWV1ZSBzdGF0ZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGFuaW1hdGlvbk5hbWUgLSBOYW1lIG9mIHRoZSBxdWV1ZSBzdGF0ZSBhbmltYXRpb24uXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gY2FuQWR2YW5jZSAtIFdoZXRoZXIgb3Igbm90IHRoZSBjdXJyZW50IHN0YXRlIGluIHRoZSBxdWV1ZVxuICAgKiBjYW4gYWR2YW5jZSBvbiBpdHMgb3duLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGlzUXVldWVFbmQgLSBXaGV0aGVyIHRoZSBjdXJyZW50IHN0YXRlIGluIHRoZSBxdWV1ZSBpcyB0aGUgbGFzdFxuICAgKiBzdGF0ZSBpbiB0aGUgcXVldWUuXG4gICAqL1xuICBfb25OZXh0KHtsYXllck5hbWUsIGFuaW1hdGlvbk5hbWUsIGNhbkFkdmFuY2UsIGlzUXVldWVFbmR9KSB7XG4gICAgLy8gRXhpdCBpZiB0aGlzIGlzbid0IGEgbWFuYWdlZCBsYXllclxuICAgIGNvbnN0IGxheWVyID0gdGhpcy5fbWFuYWdlZExheWVyc1tsYXllck5hbWVdO1xuICAgIGlmIChsYXllciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gRXhpdCBpZiBpdCBpc24ndCBhIG1hbmFnZWQgYW5pbWF0aW9uXG4gICAgY29uc3QgYW5pbWF0aW9uID0gbGF5ZXIuYW5pbWF0aW9uc1thbmltYXRpb25OYW1lXTtcbiAgICBpZiAoYW5pbWF0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBTdGFydCBhIG5ldyB0aW1lciBmb3IgbG9vcGluZyBzdGF0ZXMgdGhhdCBhcmVuJ3QgdGhlIGVuZCBvZiB0aGUgcXVldWVcbiAgICBpZiAoIWNhbkFkdmFuY2UgJiYgIWlzUXVldWVFbmQgJiYgbGF5ZXIuY3VycmVudEdlc3R1cmUgPT09IGFuaW1hdGlvbk5hbWUpIHtcbiAgICAgIGNvbnN0IGhvbGRUaW1lID0gdGhpcy5fZ2V0SG9sZFRpbWUobGF5ZXIsIGFuaW1hdGlvbik7XG4gICAgICBsYXllci5ob2xkVGltZXIuY2FuY2VsKCk7XG5cbiAgICAgIC8vIFNraXAgdG8gdGhlIG5leHQgYW5pbWF0aW9uIHJpZ2h0IGF3YXkgaWYgaG9sZCB0aW1lIGlzIHplcm9cbiAgICAgIGlmIChob2xkVGltZSA8PSAwKSB7XG4gICAgICAgIHRoaXMuX2hvc3QuQW5pbWF0aW9uRmVhdHVyZS5wbGF5TmV4dEFuaW1hdGlvbihsYXllck5hbWUsIGFuaW1hdGlvbk5hbWUpO1xuICAgICAgfVxuXG4gICAgICAvLyBXYWl0IGZvciB0aGUgZ2l2ZW4gaG9sZCB0aW1lIGJlZm9yZSBwcm9ncmVzc2luZ1xuICAgICAgZWxzZSB7XG4gICAgICAgIGxheWVyLmhvbGRUaW1lciA9IFV0aWxzLndhaXQoaG9sZFRpbWUsIHtcbiAgICAgICAgICBvbkZpbmlzaDogKCkgPT4ge1xuICAgICAgICAgICAgLy8gQWR2YW5jZSB0aGUgcXVldWUgdG8gdGhlIG5leHQgc3RhdGVcbiAgICAgICAgICAgIGlmIChsYXllci5jdXJyZW50R2VzdHVyZSA9PT0gYW5pbWF0aW9uTmFtZSkge1xuICAgICAgICAgICAgICB0aGlzLl9ob3N0LkFuaW1hdGlvbkZlYXR1cmUucGxheU5leHRBbmltYXRpb24oXG4gICAgICAgICAgICAgICAgbGF5ZXJOYW1lLFxuICAgICAgICAgICAgICAgIGFuaW1hdGlvbk5hbWVcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2FsbGJhY2sgZm9yIHtAbGluayBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjc3RvcEFuaW1hdGlvbn0gZXZlbnQuIElmIHRoZVxuICAgKiBldmVudCBpcyBlbWl0dGVkIGZvciBhIG1hbmFnZWQgYW5pbWF0aW9uIGNhbmNlbCB0aGUgbGF5ZXIncyBzdG9yZWQgdGltZXJzLlxuICAgKiBJZiB0aGUgbGF5ZXIgaXMgc2V0IHRvIGF1dG8tZGlzYWJsZSBzZXQgaXRzIHdlaWdodCB0byAwLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIE9wdGlvbnMgb2JqZWN0IHBhc3NlZCBmcm9tIHBsYXlOZXh0QW5pbWF0aW9uIGV2ZW50LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGF5ZXJOYW1lIC0gTmFtZSBvZiB0aGUgbGF5ZXIgdGhhdCBvd25zIHRoZSBzdG9wcGVkIGFuaW1hdGlvbi5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGFuaW1hdGlvbk5hbWUgLSBOYW1lIG9mIHRoZSBhbmltYXRpb24gdGhhdCB3YXMgc3RvcHBlZC5cbiAgICovXG4gIF9vblN0b3Aoe2xheWVyTmFtZSwgYW5pbWF0aW9uTmFtZX0pIHtcbiAgICAvLyBNYWtlIHN1cmUgdGhlIGxheWVyIGlzIG1hbmFnZWRcbiAgICBjb25zdCBsYXllciA9IHRoaXMuX21hbmFnZWRMYXllcnNbbGF5ZXJOYW1lXTtcbiAgICBpZiAobGF5ZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIE1ha2Ugc3VyZSB0aGUgYW5pbWF0aW9uIGlzIG1hbmFnZWRcbiAgICBjb25zdCBhbmltYXRpb24gPSBsYXllci5hbmltYXRpb25zW2FuaW1hdGlvbk5hbWVdO1xuICAgIGlmIChhbmltYXRpb24gIT09IHVuZGVmaW5lZCAmJiBhbmltYXRpb25OYW1lID09PSBsYXllci5jdXJyZW50R2VzdHVyZSkge1xuICAgICAgbGF5ZXIuY3VycmVudEdlc3R1cmUgPSBudWxsO1xuICAgICAgbGF5ZXIucGxheVRpbWVyID0gbnVsbDtcbiAgICAgIGxheWVyLmhvbGRUaW1lci5jYW5jZWwoKTtcblxuICAgICAgLy8gVHVybiBvZmYgbGF5ZXIgd2VpZ2h0XG4gICAgICBpZiAobGF5ZXIuYXV0b0Rpc2FibGUpIHtcbiAgICAgICAgdGhpcy5zZXRMYXllcldlaWdodHMobmFtZSA9PiBuYW1lID09PSBsYXllck5hbWUsIDApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIF9vbkFuaW1hdGlvbkFkZGVkKHtsYXllck5hbWUsIGFuaW1hdGlvbk5hbWV9KSB7XG4gICAgY29uc3QgbGF5ZXIgPSB0aGlzLl9tYW5hZ2VkTGF5ZXJzW2xheWVyTmFtZV07XG5cbiAgICBpZiAobGF5ZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgYW5pbWF0aW9uID0gbGF5ZXIuYW5pbWF0aW9uc1thbmltYXRpb25OYW1lXTtcblxuICAgICAgLy8gUmVnaXN0ZXIgdGhlIGFuaW1hdGlvbiBhcyBhY3RpdmUgaWYgaXQgaXMgdW5tYW5hZ2VkXG4gICAgICBpZiAoYW5pbWF0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5yZWdpc3RlckFuaW1hdGlvbihsYXllck5hbWUsIGFuaW1hdGlvbk5hbWUpO1xuICAgICAgfVxuICAgICAgLy8gTWFyayB0aGUgYW5pbWF0aW9uIGFzIGFjdGl2ZSBpZiBpdCBpcyBtYW5hZ2VkXG4gICAgICBlbHNlIHtcbiAgICAgICAgYW5pbWF0aW9uLmlzQWN0aXZlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZWdpc3RlckxheWVyKG5hbWUsIG9wdGlvbnMgPSB7fSkge1xuICAgIHN1cGVyLnJlZ2lzdGVyTGF5ZXIobmFtZSwge1xuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIGhvbGRUaW1lcjogRGVmZXJyZWQucmVzb2x2ZSgpLFxuICAgICAgcGxheVRpbWVyOiBudWxsLFxuICAgICAgY3VycmVudEdlc3R1cmU6IG51bGwsXG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5fbWFuYWdlZExheWVyc1tuYW1lXS5pc0FjdGl2ZSkge1xuICAgICAgdGhpcy5faG9zdC5BbmltYXRpb25GZWF0dXJlLmdldEFuaW1hdGlvbnMobmFtZSkuZm9yRWFjaChhbmltID0+IHtcbiAgICAgICAgLy8gQXV0b21hdGljYWxseSByZWdpc3RlciBhbGwgYW5pbWF0aW9ucyBvbiB0aGUgbGF5ZXJcbiAgICAgICAgaWYgKHRoaXMuX21hbmFnZWRMYXllcnNbbmFtZV0uYW5pbWF0aW9uc1thbmltXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhpcy5yZWdpc3RlckFuaW1hdGlvbihcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICBhbmltLFxuICAgICAgICAgICAgdGhpcy5fbWFuYWdlZExheWVyc1tuYW1lXS5hbmltYXRpb25zW2FuaW1dXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcmVnaXN0ZXJBbmltYXRpb24obGF5ZXJOYW1lLCBhbmltYXRpb25OYW1lLCBvcHRpb25zID0ge30pIHtcbiAgICAvLyBUcnkgdG8gZmFsbCBiYWNrIHRvIGEgZGVmYXVsdCB3b3JkIGFycmF5XG4gICAgaWYgKCEob3B0aW9ucy53b3JkcyBpbnN0YW5jZW9mIEFycmF5KSAmJiAhKG9wdGlvbnMud29yZHMgaW5zdGFuY2VvZiBTZXQpKSB7XG4gICAgICBvcHRpb25zLndvcmRzID0gRGVmYXVsdEdlc3R1cmVXb3Jkc1thbmltYXRpb25OYW1lXSB8fCBbXTtcbiAgICB9XG5cbiAgICBzdXBlci5yZWdpc3RlckFuaW1hdGlvbihsYXllck5hbWUsIGFuaW1hdGlvbk5hbWUsIG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBvYmplY3QgdGhhdCBtYXBzIHNzbWwgbWFyayBzeW50YXggcmVxdWlyZWQgdG8gcGxheSBlYWNoIGdlc3R1cmUgdG9cbiAgICogdGhlIHdvcmRzIGFycmF5IGFzc29jaWF0ZWQgd2l0aCBlYWNoIGdlc3R1cmUuIFdvcmRzIGFycmF5cyBhcmUgZGVmaW5lZCBhdCB3aGVuXG4gICAqIHRoZSBnZXN0dXJlIGFuaW1hdGlvbiBpcyByZWdpc3RlcmVkLiBHZXN0dXJlcyB3aXRob3V0IGFzc29jaWF0ZWQgd29yZHMgd2lsbFxuICAgKiBiZSBleGNsdWRlZCBmcm9tIHRoZSByZXN1bHQuIFRoZSByZXN1bHRpbmcgb2JqZWN0IGNhbiBiZSB1c2VkIGFzIGFuIGlucHV0XG4gICAqIGZvciB7QGxpbmsgVGV4dFRvU3BlZWNoVXRpbHMuYXV0b0dlbmVyYXRlU1NNTE1hcmtzfSB0byB1cGRhdGUgYSBzcGVlY2ggc3RyaW5nXG4gICAqIHdpdGggdGhlIG1hcmt1cCByZXF1aXJlZCB0byBwbGF5IGdlc3R1cmVzIHRpbWVkIHdpdGggdGhlaXIgYXNzb2NpYXRlZCB3b3Jkcy5cbiAgICpcbiAgICogQHJldHVybnMge09iamVjdH1cbiAgICovXG4gIGNyZWF0ZUdlc3R1cmVNYXAoKSB7XG4gICAgY29uc3QgZ2VzdHVyZU1hcCA9IHt9O1xuXG4gICAgT2JqZWN0LmVudHJpZXModGhpcy5fbWFuYWdlZExheWVycykuZm9yRWFjaCgoW2xheWVyTmFtZSwge2FuaW1hdGlvbnN9XSkgPT4ge1xuICAgICAgT2JqZWN0LmVudHJpZXMoYW5pbWF0aW9ucykuZm9yRWFjaChcbiAgICAgICAgKFtcbiAgICAgICAgICBhbmltYXRpb25OYW1lLFxuICAgICAgICAgIHtob2xkVGltZSwgbWluaW11bUludGVydmFsLCB3b3JkcywgdHJhbnNpdGlvblRpbWV9LFxuICAgICAgICBdKSA9PiB7XG4gICAgICAgICAgLy8gT25seSBzdG9yZSBnZXN0dXJlcyB0aGF0IGhhdmUgYW55IGFzc29jaWF0ZWQgd29yZHNcbiAgICAgICAgICBpZiAod29yZHMubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICAgICAgICAuLi4oaG9sZFRpbWUgJiYgeyBob2xkVGltZSB9KSxcbiAgICAgICAgICAgICAgLi4uKG1pbmltdW1JbnRlcnZhbCAmJiB7IG1pbmltdW1JbnRlcnZhbCB9KSxcbiAgICAgICAgICAgICAgLi4uKHRyYW5zaXRpb25UaW1lICYmIHsgdHJhbnNpdGlvblRpbWUgfSksXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3Qga2V5ID0ge1xuICAgICAgICAgICAgICBmZWF0dXJlOiB0aGlzLmNvbnN0cnVjdG9yLm5hbWUsXG4gICAgICAgICAgICAgIG1ldGhvZDogJ3BsYXlHZXN0dXJlJyxcbiAgICAgICAgICAgICAgYXJnczogW2xheWVyTmFtZSwgYW5pbWF0aW9uTmFtZSwgb3B0aW9uc10sXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBnZXN0dXJlTWFwW0pTT04uc3RyaW5naWZ5KGtleSldID0gd29yZHM7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGdlc3R1cmVNYXA7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGFuIGFycmF5IHRoYXQgY29udGFpbnMgc3NtbCBtYXJrIHN5bnRheCByZXF1aXJlZCB0byBwbGF5IGVhY2ggZ2VzdHVyZVxuICAgKiB0aGF0IGRvZXMgbm90IGhhdmUgYW55IGFzc29jaWF0ZWQgd29yZHMuIFRoZSByZXN1bHRpbmcgYXJyYXkgY2FuIGJlIHVzZWQgYXNcbiAgICogYW4gaW5wdXQgZm9yIHtAbGluayBUZXh0VG9TcGVlY2hVdGlscy5hdXRvR2VuZXJhdGVTU01MTWFya3N9IG9yXG4gICAqIHtAbGluayBUZXh0VG9TcGVlY2hVdGlscy5hZGRNYXJrc1RvVW5tYXJrZWRTZW50ZW5jZXN9IHRvIHVwZGF0ZSBhIHNwZWVjaFxuICAgKiBzdHJpbmcgd2l0aCB0aGUgbWFya3VwIHJlcXVpcmVkIHRvIHBsYXkgcmFuZG9tIGdlc3R1cmVzIGF0IGVhY2ggdW5tYXJrZWRcbiAgICogc2VudGVuY2UgaW4gdGhlIHN0cmluZy5cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheS48c3RyaW5nPj19IGxheWVycyAtIEFuIGFycmF5IG9mIG5hbWVzIG9mIG1hbmFnZWQgbGF5ZXJzIHRvIGdlbmVyYXRlXG4gICAqIG1hcmtzIGZvci4gSWYgdW5kZWZpbmVkLCB1c2UgYWxsIG1hbmFnZWQgbGF5ZXJzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7QXJyYXkuPHN0cmluZz59XG4gICAqL1xuICBjcmVhdGVHZW5lcmljR2VzdHVyZUFycmF5KGxheWVycykge1xuICAgIGNvbnN0IGdlbmVyaWNHZXN0dXJlcyA9IFtdO1xuICAgIGxheWVycyA9IGxheWVycyB8fCBPYmplY3Qua2V5cyh0aGlzLl9tYW5hZ2VkTGF5ZXJzKTtcblxuICAgIGxheWVycy5mb3JFYWNoKGxheWVyTmFtZSA9PiB7XG4gICAgICBjb25zdCBsYXllciA9IHRoaXMuX21hbmFnZWRMYXllcnNbbGF5ZXJOYW1lXTtcblxuICAgICAgLy8gTWFrZSBzdXJlIHRoZSBsYXllciBpcyBtYW5hZ2VkXG4gICAgICBpZiAoIWxheWVyKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgT2JqZWN0LmVudHJpZXMobGF5ZXIuYW5pbWF0aW9ucykuZm9yRWFjaChcbiAgICAgICAgKFtcbiAgICAgICAgICBhbmltYXRpb25OYW1lLFxuICAgICAgICAgIHsgaG9sZFRpbWUsIG1pbmltdW1JbnRlcnZhbCwgd29yZHMsIHRyYW5zaXRpb25UaW1lIH0sXG4gICAgICAgIF0pID0+IHtcbiAgICAgICAgICAvLyBPbmx5IHN0b3JlIGdlc3R1cmVzIHRoYXQgZG9uJ3QgaGF2ZSBhbnkgYXNzb2NpYXRlZCB3b3Jkc1xuICAgICAgICAgIGlmICghd29yZHMubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICAgICAgICAuLi4oaG9sZFRpbWUgJiYgeyBob2xkVGltZSB9KSxcbiAgICAgICAgICAgICAgLi4uKG1pbmltdW1JbnRlcnZhbCAmJiB7IG1pbmltdW1JbnRlcnZhbCB9KSxcbiAgICAgICAgICAgICAgLi4uKHRyYW5zaXRpb25UaW1lICYmIHsgdHJhbnNpdGlvblRpbWUgfSksXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgICBmZWF0dXJlOiB0aGlzLmNvbnN0cnVjdG9yLm5hbWUsXG4gICAgICAgICAgICAgIG1ldGhvZDogJ3BsYXlHZXN0dXJlJyxcbiAgICAgICAgICAgICAgYXJnczogW2xheWVyTmFtZSwgYW5pbWF0aW9uTmFtZSwgb3B0aW9uc10sXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKCFnZW5lcmljR2VzdHVyZXMuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICAgICAgICBnZW5lcmljR2VzdHVyZXMucHVzaChrZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBnZW5lcmljR2VzdHVyZXM7XG4gIH1cblxuICAvKipcbiAgICogUGxheSBhIG1hbmFnZWQgZ2VzdHVyZSBhbmltYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllck5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgbGF5ZXIgdGhhdCBjb250YWlucyB0aGUgZ2VzdHVyZVxuICAgKiBhbmltYXRpb24uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhbmltYXRpb25OYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGdlc3R1cmUgYW5pbWF0aW9uLlxuICAgKiBAcGFyYW0ge09iamVjdD19IG9wdGlvbnMgLSBPcHRpb25hbCBnZXN0dXJlIG9wdGlvbnMuXG4gICAqIEBwYXJhbSB7bnVtYmVyPX0gb3B0aW9ucy5ob2xkVGltZSAtIFRoaXMgb3B0aW9uIG9ubHkgYXBwbGllcyB0byB7QGxpbmsgUXVldWVTdGF0ZX1cbiAgICogZ2VzdHVyZXMuIFdoZW4gYSBRdWV1ZVN0YXRlIGdlc3R1cmUgcHJvZ3Jlc3NlcyB0byBhIGxvb3Bpbmcgc3RhdGUsIHRoaXMgb3B0aW9uXG4gICAqIGRlZmluZXMgaG93IG1hbnkgc2Vjb25kcyBzaG91bGQgZWxhcHNlIGJlZm9yZSBtb3ZpbmcgdGhlIHF1ZXVlIGZvcndhcmQuIElmXG4gICAqIHVuZGVmaW5lZCwgaXQgd2lsbCBmYWxsIGJhY2sgZmlyc3QgdG8gdGhlIGhvbGRUaW1lIGRlZmluZWQgaW4gdGhlIG9wdGlvbnMgd2hlblxuICAgKiB0aGUgZ2VzdHVyZSBhbmltYXRpb24gd2FzIHJlZ2lzdGVyZWQgYW5kIHRoZW4gdG8gdGhlIGhvbGRUaW1lIGRlZmluZWQgb24gdGhlXG4gICAqIGZlYXR1cmUuXG4gICAqIEBwYXJhbSB7bnVtYmVyPX0gb3B0aW9ucy5taW5pbXVtSW50ZXJ2YWwgLSBUaGUgbWluaW11bSBhbW91bnQgb2YgdGltZSB0aGF0XG4gICAqIG11c3QgaGF2ZSBlbGFwc2VkIHNpbmNlIHRoZSBsYXN0IHRpbWUgYSBnZXN0dXJlIHdhcyBwbGF5ZWQuXG4gICAqL1xuICBwbGF5R2VzdHVyZShcbiAgICBsYXllck5hbWUsXG4gICAgYW5pbWF0aW9uTmFtZSxcbiAgICB7aG9sZFRpbWUsIG1pbmltdW1JbnRlcnZhbCwgdHJhbnNpdGlvblRpbWUsIGZvcmNlID0gZmFsc2V9ID0ge31cbiAgKSB7XG4gICAgLy8gTWFrZSBzdXJlIHRoZSBhbmltYXRpb24gaXMgcmVnaXN0ZXJlZFxuICAgIGlmIChcbiAgICAgIHRoaXMuX21hbmFnZWRMYXllcnNbbGF5ZXJOYW1lXSA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICB0aGlzLl9tYW5hZ2VkTGF5ZXJzW2xheWVyTmFtZV0uYW5pbWF0aW9uc1thbmltYXRpb25OYW1lXSA9PT0gdW5kZWZpbmVkXG4gICAgKSB7XG4gICAgICB0aGlzLnJlZ2lzdGVyQW5pbWF0aW9uKGxheWVyTmFtZSwgYW5pbWF0aW9uTmFtZSwge1xuICAgICAgICBob2xkVGltZSxcbiAgICAgICAgbWluaW11bUludGVydmFsLFxuICAgICAgICB0cmFuc2l0aW9uVGltZSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IGxheWVyID0gdGhpcy5fbWFuYWdlZExheWVyc1tsYXllck5hbWVdO1xuICAgIGNvbnN0IGFuaW1hdGlvbiA9IGxheWVyLmFuaW1hdGlvbnNbYW5pbWF0aW9uTmFtZV07XG5cbiAgICAvLyBNYWtlIHN1cmUgdGhlIGFuaW1hdGlvbiBpcyBhY3RpdmVcbiAgICBpZiAoIWFuaW1hdGlvbi5pc0FjdGl2ZSkge1xuICAgICAgLy8gQ3JlYXRlIHdhcm5pbmcgbWVzc2FnZSBiYXNlZCBvbiB3aGljaCBvYmplY3QgZG9lc24ndCBleGlzdCB5ZXRcbiAgICAgIGNvbnN0IHR5cGVOYW1lID0gbGF5ZXIuaXNBY3RpdmUgPyAnYW5pbWF0aW9uJyA6ICdsYXllcic7XG4gICAgICBjb25zdCBtZXNzYWdlID0gYFNraXBwaW5nIGdlc3R1cmUgJHthbmltYXRpb25OYW1lfSBvbiBsYXllciAke2xheWVyTmFtZX0gZm9yIGhvc3QgJHt0aGlzLl9ob3N0LmlkfS4gTm8gJHt0eXBlTmFtZX0gZXhpc3RzIHdpdGggdGhpcyBuYW1lIHlldC5gO1xuXG4gICAgICBjb25zb2xlLndhcm4obWVzc2FnZSk7XG4gICAgICByZXR1cm4gRGVmZXJyZWQuY2FuY2VsKHtyZWFzb246ICdpbmFjdGl2ZScsIHZhbHVlOiB0eXBlTmFtZX0pO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGlmIHRoZSBnZXN0dXJlIGlzIGFscmVhZHkgcGxheWluZ1xuICAgIGNvbnN0IHtjdXJyZW50R2VzdHVyZX0gPSBsYXllcjtcbiAgICBpZiAoY3VycmVudEdlc3R1cmUgPT09IGFuaW1hdGlvbk5hbWUgJiYgIWZvcmNlKSB7XG4gICAgICBjb25zdCBtZXNzYWdlID0gYFNraXBwaW5nIGdlc3R1cmUgJHthbmltYXRpb25OYW1lfSBvbiBsYXllciAke2xheWVyTmFtZX0gZm9yIGhvc3QgJHt0aGlzLl9ob3N0LmlkfS4gVGhlIGdlc3R1cmUgaXMgYWxyZWFkeSBwbGF5aW5nLiBVc2Ugb3B0aW9ucy5mb3JjZSB0byBmb3JjZSB0aGUgZ2VzdHVyZSByZXBsYXksIHdoaWNoIG1heSByZXN1bHQgaW4gYSBoYXJkIHRyYW5zaXRpb24uYDtcblxuICAgICAgY29uc29sZS53YXJuKG1lc3NhZ2UpO1xuICAgICAgcmV0dXJuIERlZmVycmVkLmNhbmNlbCh7cmVhc29uOiAncGxheWluZycsIHZhbHVlOiBhbmltYXRpb25OYW1lfSk7XG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIGFuaW1hdGlvbiBvcHRpb25zXG4gICAgaWYgKGhvbGRUaW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGFuaW1hdGlvbi5ob2xkVGltZSA9IGhvbGRUaW1lO1xuICAgIH1cblxuICAgIGlmIChtaW5pbXVtSW50ZXJ2YWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgYW5pbWF0aW9uLm1pbmltdW1JbnRlcnZhbCA9IG1pbmltdW1JbnRlcnZhbDtcbiAgICB9IGVsc2Uge1xuICAgICAgbWluaW11bUludGVydmFsID0gdGhpcy5fZ2V0TWluaW11bUludGVydmFsKGxheWVyLCBhbmltYXRpb24pO1xuICAgIH1cblxuICAgIC8vIENoZWNrIHRoZSBpbnRlcnZhbFxuICAgIGlmICghZm9yY2UgJiYgbGF5ZXIucGxheVRpbWVyICE9PSBudWxsICYmIGxheWVyLnBsYXlUaW1lciA8IG1pbmltdW1JbnRlcnZhbCkge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBgU2tpcHBpbmcgZ2VzdHVyZSAke2FuaW1hdGlvbk5hbWV9IG9uIGxheWVyICR7bGF5ZXJOYW1lfSBmb3IgaG9zdCAke3RoaXMuX2hvc3QuaWR9LiBNaW5pbXVtIGludGVydmFsICR7bWluaW11bUludGVydmFsfSBoYXMgbm90IGJlZW4gbWV0LmBcbiAgICAgICk7XG4gICAgICByZXR1cm4gRGVmZXJyZWQuY2FuY2VsKHtcbiAgICAgICAgcmVhc29uOiAnbWluaW11bUludGVydmFsJyxcbiAgICAgICAgdmFsdWU6IG1pbmltdW1JbnRlcnZhbCAtIGxheWVyLnBsYXlUaW1lcixcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIFBsYXkgdGhlIGFuaW1hdGlvblxuICAgIGxheWVyLmN1cnJlbnRHZXN0dXJlID0gYW5pbWF0aW9uTmFtZTtcbiAgICBsYXllci5wbGF5VGltZXIgPSAwO1xuICAgIGxheWVyLmhvbGRUaW1lci5jYW5jZWwoKTtcbiAgICBpZiAobGF5ZXIuYXV0b0Rpc2FibGUpIHtcbiAgICAgIHRoaXMuc2V0TGF5ZXJXZWlnaHRzKG5hbWUgPT4gbmFtZSA9PT0gbGF5ZXJOYW1lLCAxKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5faG9zdC5BbmltYXRpb25GZWF0dXJlLnBsYXlBbmltYXRpb24oXG4gICAgICBsYXllck5hbWUsXG4gICAgICBhbmltYXRpb25OYW1lLFxuICAgICAgdHJhbnNpdGlvblRpbWVcbiAgICApO1xuICB9XG5cbiAgdXBkYXRlKGRlbHRhVGltZSkge1xuICAgIHN1cGVyLnVwZGF0ZShkZWx0YVRpbWUpO1xuXG4gICAgLy8gSW5jcmVtZW50IHRoZSB0aW1lcnNcbiAgICBPYmplY3QuZW50cmllcyh0aGlzLl9tYW5hZ2VkTGF5ZXJzKS5mb3JFYWNoKChbbmFtZSwgb3B0aW9uc10pID0+IHtcbiAgICAgIGlmIChvcHRpb25zLmlzQWN0aXZlICYmICF0aGlzLl9ob3N0LkFuaW1hdGlvbkZlYXR1cmUuZ2V0UGF1c2VkKG5hbWUpKSB7XG4gICAgICAgIG9wdGlvbnMuaG9sZFRpbWVyLmV4ZWN1dGUoZGVsdGFUaW1lKTtcblxuICAgICAgICBpZiAob3B0aW9ucy5wbGF5VGltZXIgIT09IG51bGwpIHtcbiAgICAgICAgICBvcHRpb25zLnBsYXlUaW1lciArPSBkZWx0YVRpbWUgLyAxMDAwO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBpbnN0YWxsQXBpKCkge1xuICAgIC8qKlxuICAgICAqIEBpbm5lclxuICAgICAqIEBuYW1lc3BhY2UgR2VzdHVyZUZlYXR1cmVcbiAgICAgKi9cbiAgICBjb25zdCBhcGkgPSBzdXBlci5pbnN0YWxsQXBpKCk7XG5cbiAgICBPYmplY3QuYXNzaWduKGFwaSwge1xuICAgICAgLyoqXG4gICAgICAgKiBAbWVtYmVyb2YgR2VzdHVyZUZlYXR1cmVcbiAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICogQG1ldGhvZFxuICAgICAgICogQHNlZSBHZXN0dXJlRmVhdHVyZSNjcmVhdGVHZXN0dXJlTWFwXG4gICAgICAgKi9cbiAgICAgIGNyZWF0ZUdlc3R1cmVNYXA6IHRoaXMuY3JlYXRlR2VzdHVyZU1hcC5iaW5kKHRoaXMpLFxuICAgICAgLyoqXG4gICAgICAgKiBAbWVtYmVyb2YgR2VzdHVyZUZlYXR1cmVcbiAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICogQG1ldGhvZFxuICAgICAgICogQHNlZSBHZXN0dXJlRmVhdHVyZSNjcmVhdGVHZW5lcmljR2VzdHVyZUFycmF5XG4gICAgICAgKi9cbiAgICAgIGNyZWF0ZUdlbmVyaWNHZXN0dXJlQXJyYXk6IHRoaXMuY3JlYXRlR2VuZXJpY0dlc3R1cmVBcnJheS5iaW5kKHRoaXMpLFxuICAgICAgLyoqXG4gICAgICAgKiBAbWVtYmVyb2YgR2VzdHVyZUZlYXR1cmVcbiAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICogQG1ldGhvZFxuICAgICAgICogQHNlZSBHZXN0dXJlRmVhdHVyZSNwbGF5R2VzdHVyZVxuICAgICAgICovXG4gICAgICBwbGF5R2VzdHVyZTogdGhpcy5wbGF5R2VzdHVyZS5iaW5kKHRoaXMpLFxuICAgIH0pO1xuICB9XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEdlc3R1cmVGZWF0dXJlLCB7XG4gIERFRkFVTFRfTEFZRVJfT1BUSU9OUzoge1xuICAgIHZhbHVlOiB7XG4gICAgICAuLi5HZXN0dXJlRmVhdHVyZS5ERUZBVUxUX0xBWUVSX09QVElPTlMsXG4gICAgICBhdXRvRGlzYWJsZTogdHJ1ZSxcbiAgICB9LFxuICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgfSxcbiAgRVZFTlRfREVQRU5ERU5DSUVTOiB7XG4gICAgdmFsdWU6IHtcbiAgICAgIC4uLkdlc3R1cmVGZWF0dXJlLkVWRU5UX0RFUEVOREVOQ0lFUyxcbiAgICAgIEFuaW1hdGlvbkZlYXR1cmU6IHtcbiAgICAgICAgLi4uR2VzdHVyZUZlYXR1cmUuRVZFTlRfREVQRU5ERU5DSUVTLkFuaW1hdGlvbkZlYXR1cmUsXG4gICAgICAgIHBsYXlOZXh0QW5pbWF0aW9uOiAnX29uTmV4dCcsXG4gICAgICAgIHN0b3BBbmltYXRpb246ICdfb25TdG9wJyxcbiAgICAgICAgaW50ZXJydXB0QW5pbWF0aW9uOiAnX29uU3RvcCdcbiAgICAgIH0sXG4gICAgfSxcbiAgfSxcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBHZXN0dXJlRmVhdHVyZTtcbmV4cG9ydCB7RGVmYXVsdEdlc3R1cmVXb3Jkc307XG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cclxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVC0wXHJcbmltcG9ydCBEZWZlcnJlZCBmcm9tICdjb3JlL0RlZmVycmVkJztcclxuaW1wb3J0IFV0aWxzIGZyb20gJ2NvcmUvVXRpbHMnO1xyXG5pbXBvcnQgTWF0aFV0aWxzIGZyb20gJ2NvcmUvTWF0aFV0aWxzJztcclxuaW1wb3J0IHtMaW5lYXJ9IGZyb20gJy4vRWFzaW5nJztcclxuXHJcbi8qKlxyXG4gKiBBIGNvbGxlY3Rpb24gb2YgdXNlZnVsIGFuaW1hdGlvbiBmdW5jdGlvbnMuXHJcbiAqXHJcbiAqIEBoaWRlY29uc3RydWN0b3JcclxuICovXHJcbmNsYXNzIEFuaW1hdGlvblV0aWxzIHtcclxuICBzdGF0aWMgbGVycChmcm9tLCB0bywgZmFjdG9yKSB7XHJcbiAgICBjb25zb2xlLndhcm4oYEFuaW1hdGlvblV0aWxzLmxlcnAgaXMgYmVpbmcgZGVwcmVjYXRlZC4gVXNlIE1hdGhVdGlscy5sZXJwIGluc3RlYWQuYCk7XHJcblxyXG4gICAgcmV0dXJuIE1hdGhVdGlscy5sZXJwKGZyb20sIHRvLCBmYWN0b3IpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2xhbXAgYSBudW1iZXIgYmV0d2VlbiAyIHZhbHVlcy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSAtIFZhbHVlIHRvIGNsYW1wLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbbWluPTBdIC0gTWludW11bSB2YWx1ZS5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gW21heD0xXSAtIE1heGltdW0gdmFsdWUuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxyXG4gICAqL1xyXG4gIHN0YXRpYyBjbGFtcCh2YWx1ZSwgbWluID0gMCwgbWF4ID0gMSkge1xyXG4gICAgY29uc29sZS53YXJuKGBBbmltYXRpb25VdGlscy5jbGFtcCBpcyBiZWluZyBkZXByZWNhdGVkLiBVc2UgTWF0aFV0aWxzLmNsYW1wIGluc3RlYWQuYCk7XHJcblxyXG4gICAgcmV0dXJuIE1hdGhVdGlscy5jbGFtcCh2YWx1ZSwgbWluLCBtYXgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIGEgZGVmZXJyZWQgcHJvbWlzZSB0aGF0IGNhbiBiZSB1c2VkIHRvIHVwZGF0ZSB0aGUgdmFsdWUgb2YgYSBudW1lcmljXHJcbiAgICogcHJvcGVydHkgb2YgdGhpcyBvYmplY3Qgb3ZlciB0aW1lLiBQYXNzIGRlbHRhIHRpbWUgaW4gbWlsbGlzZWNvbmRzIHRvIHRoZVxyXG4gICAqIGRlZmVycmVkIHByb21pc2UncyBleGVjdXRlIG1ldGhvZCBpbiBhbiB1cGRhdGUgbG9vcCB0byBhbmltYXRlIHRoZSBwcm9wZXJ0eVxyXG4gICAqIHRvd2FyZHMgdGhlIHRhcmdldCB2YWx1ZS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wZXJ0eU93bmVyIC0gT2JqZWN0IHRoYXQgY29udGFpbnMgdGhlIHByb3BlcnR5IHRvIGFuaW1hdGlvbi5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHlOYW1lIC0gTmFtZSBvZiB0aGUgcHJvcGVydHkgdG8gYW5pbWF0ZS5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gdGFyZ2V0VmFsdWUgLSBUYXJnZXQgdmFsdWUgdG8gcmVhY2guXHJcbiAgICogQHBhcmFtIHtPYmplY3Q9fSBvcHRpb25zIC0gT3B0aW9uYWwgb3B0aW9ucyBvYmplY3RcclxuICAgKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMuc2Vjb25kcz0wXSAtIE51bWJlciBvZiBzZWNvbmRzIGl0IHdpbGwgdGFrZSB0byByZWFjaFxyXG4gICAqIHRoZSB0YXJnZXQgdmFsdWUuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdGlvbnMuZWFzaW5nRm49TGluZWFyLkluT3V0XSAtIEVhc2luZyBmdW5jdGlvbiB0byB1c2UgZm9yIGFuaW1hdGlvbi5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0aW9ucy5vbkZpbmlzaF0gLSBDYWxsYmFjayB0byBleGVjdXRlIG9uY2UgdGhlIGFuaW1hdGlvbiBjb21wbGV0ZXMuXHJcbiAgICogVGhlIHRhcmdldCB2YWx1ZSBpcyBwYXNzZWQgYXMgYSBwYXJhbWV0ZXIuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9wdGlvbnMub25Qcm9ncmVzcyAtIENhbGxiYWNrIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBhbmltYXRpb25cclxuICAgKiBwcm9wZXJ0eSBpcyB1cGRhdGVkIGR1cmluZyB0aGUgYW5pbWF0aW9uLiBUaGUgcHJvcGVydHkncyB2YWx1ZSBhdCB0aGUgdGltZSBvZlxyXG4gICAqIHRoZSB1cGRhdGUgaXMgcGFzc2VkIGFzIGEgcGFyYW1ldGVyLlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvcHRpb25zLm9uQ2FuY2VsIC0gQ2FsbGJhY2sgdG8gZXhlY3V0ZSBpZiB0aGUgdXNlciBjYW5jZWxzIHRoZVxyXG4gICAqIGFuaW1hdGlvbiBiZWZvcmUgY29tcGxldGlvbi4gVGhlIGFuaW1hdGlvbiBwcm9wZXJ0eSdzIHZhbHVlIGF0IHRoZSB0aW1lIG9mXHJcbiAgICogY2FuY2VsIGlzIHBhc3NlZCBhcyBhIHBhcmFtZXRlci5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb3B0aW9ucy5vbkVycm9yIC0gQ2FsbGJhY2sgdG8gZXhlY3V0ZSBpZiB0aGUgYW5pbWF0aW9uIHN0b3BzXHJcbiAgICogYmVjYXVzZSBhbiBlcnJvciBpcyBlbmNvdW50ZXJlZC4gVGhlIGVycm9yIG1lc3NhZ2UgaXMgcGFzc2VkIGFzIGEgcGFyYW1ldGVyLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0RlZmVycmVkfSBSZXNvbHZlcyB3aXRoIHRoZSBwcm9wZXJ0eSdzIHZhbHVlIG9uY2UgaXQgcmVhY2hlcyB0aGVcclxuICAgKiB0YXJnZXQgdmFsdWUuXHJcbiAgICovXHJcbiAgc3RhdGljIGludGVycG9sYXRlUHJvcGVydHkoXHJcbiAgICBwcm9wZXJ0eU93bmVyLFxyXG4gICAgcHJvcGVydHlOYW1lLFxyXG4gICAgdGFyZ2V0VmFsdWUsXHJcbiAgICB7c2Vjb25kcyA9IDAsIGVhc2luZ0ZuLCBvbkZpbmlzaCwgb25Qcm9ncmVzcywgb25DYW5jZWwsIG9uRXJyb3J9ID0ge31cclxuICApIHtcclxuICAgIC8vIE1ha2Ugc3VyZSBwcm9wZXJ0eSBpcyBhbiBvYmplY3RcclxuICAgIGlmICghKHByb3BlcnR5T3duZXIgaW5zdGFuY2VvZiBPYmplY3QpKSB7XHJcbiAgICAgIGNvbnN0IGUgPSBuZXcgRXJyb3IoXHJcbiAgICAgICAgYENhbm5vdCBpbnRlcnBvbGF0ZSBwcm9wZXJ0eSAke3Byb3BlcnR5TmFtZX0uIFByb3BlcnR5IG93bmVyIG11c3QgYmUgYW4gb2JqZWN0LmBcclxuICAgICAgKTtcclxuXHJcbiAgICAgIGlmICh0eXBlb2Ygb25FcnJvciA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgIG9uRXJyb3IoZSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBEZWZlcnJlZC5yZWplY3QoZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gTWFrZSBzdXJlIHByb3BlcnR5IGlzIG51bWVyaWNcclxuICAgIGlmIChOdW1iZXIuaXNOYU4oTnVtYmVyKHByb3BlcnR5T3duZXJbcHJvcGVydHlOYW1lXSkpKSB7XHJcbiAgICAgIGNvbnN0IGUgPSBuZXcgRXJyb3IoXHJcbiAgICAgICAgYENhbm5vdCBpbnRlcnBvbGF0ZSBwcm9wZXJ0eSAke3Byb3BlcnR5TmFtZX0uIFByb3BlcnR5IG11c3QgYmUgbnVtZXJpYy5gXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBpZiAodHlwZW9mIG9uRXJyb3IgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICBvbkVycm9yKGUpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gRGVmZXJyZWQucmVqZWN0KGUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIE1ha2Ugc3VyZSB0aGUgdGFyZ2V0IHZhbHVlIGlzIG51bWVyaWNcclxuICAgIGlmIChOdW1iZXIuaXNOYU4oTnVtYmVyKHRhcmdldFZhbHVlKSkpIHtcclxuICAgICAgY29uc3QgZSA9IG5ldyBFcnJvcihcclxuICAgICAgICBgQ2Fubm90IGludGVycG9sYXRlIHByb3BlcnR5ICR7cHJvcGVydHlOYW1lfSB0byB2YWx1ZSAke3RhcmdldFZhbHVlfS4gVGFyZ2V0IHZhbHVlIG11c3QgYmUgbnVtZXJpYy5gXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBpZiAodHlwZW9mIG9uRXJyb3IgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICBvbkVycm9yKGUpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gRGVmZXJyZWQucmVqZWN0KGUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFJlc29sdmUgaW1tZWRpYXRlbHkgaWYgdGhlIHRhcmdldCBoYXMgYWxyZWFkeSBiZWVuIHJlYWNoZWRcclxuICAgIGNvbnN0IHN0YXJ0VmFsdWUgPSBwcm9wZXJ0eU93bmVyW3Byb3BlcnR5TmFtZV07XHJcblxyXG4gICAgaWYgKHN0YXJ0VmFsdWUgPT09IHRhcmdldFZhbHVlKSB7XHJcbiAgICAgIGlmICh0eXBlb2Ygb25GaW5pc2ggPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICBvbkZpbmlzaCh0YXJnZXRWYWx1ZSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBEZWZlcnJlZC5yZXNvbHZlKHRhcmdldFZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBEZWZhdWx0IHRvIGxpbmVhciBpbnRlcnBvbGF0aW9uXHJcbiAgICBpZiAodHlwZW9mIGVhc2luZ0ZuICE9PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgIGlmIChlYXNpbmdGbiAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgICAgYEludmFsaWQgcHJvcGVydHkgaW50ZXJwb2xhdGlvbiBlYXNpbmdGbi4gRGVmYXVsdGluZyB0byBsaW5lYXIgaW50ZXJwb2xhdGlvbi5gXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgZWFzaW5nRm4gPSBMaW5lYXIuSW5PdXQ7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgaW50ZXJwb2xhdG9yID0gVXRpbHMud2FpdChzZWNvbmRzLCB7XHJcbiAgICAgIG9uRmluaXNoOiAoKSA9PiB7XHJcbiAgICAgICAgcHJvcGVydHlPd25lcltwcm9wZXJ0eU5hbWVdID0gdGFyZ2V0VmFsdWU7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2Ygb25GaW5pc2ggPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgIG9uRmluaXNoKHRhcmdldFZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIG9uQ2FuY2VsOiAoKSA9PiB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBvbkNhbmNlbCA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgb25DYW5jZWwocHJvcGVydHlPd25lcltwcm9wZXJ0eU5hbWVdKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIG9uUHJvZ3Jlc3M6IHByb2dyZXNzID0+IHtcclxuICAgICAgICBpZiAocHJvcGVydHlPd25lcltwcm9wZXJ0eU5hbWVdICE9PSB0YXJnZXRWYWx1ZSkge1xyXG4gICAgICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBsZXJwIGZhY3RvclxyXG4gICAgICAgICAgY29uc3QgZWFzZUZhY3RvciA9IGVhc2luZ0ZuKHByb2dyZXNzKTtcclxuXHJcbiAgICAgICAgICBpZiAodHlwZW9mIGVhc2VGYWN0b3IgIT09ICdudW1iZXInKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGUgPSBuZXcgRXJyb3IoXHJcbiAgICAgICAgICAgICAgYEludmFsaWQgcHJvcGVydHkgaW50ZXJwb2xhdGlvbiBlYXNpbmdGbi4gRWFzaW5nRm4gbXVzdCByZXR1cm4gYSBudW1iZXIuYFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBpbnRlcnBvbGF0b3IucmVqZWN0KGUpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gVXBkYXRlIHRoZSB2YWx1ZVxyXG4gICAgICAgICAgcHJvcGVydHlPd25lcltwcm9wZXJ0eU5hbWVdID0gTWF0aFV0aWxzLmxlcnAoXHJcbiAgICAgICAgICAgIHN0YXJ0VmFsdWUsXHJcbiAgICAgICAgICAgIHRhcmdldFZhbHVlLFxyXG4gICAgICAgICAgICBlYXNlRmFjdG9yXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gU2lnbmFsIHByb2dyZXNzXHJcbiAgICAgICAgaWYgKHR5cGVvZiBvblByb2dyZXNzID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICBvblByb2dyZXNzKHByb3BlcnR5T3duZXJbcHJvcGVydHlOYW1lXSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBTaWduYWwgY29tcGxldGlvbiBvbmNlIHRpbWUgaXMgdXBcclxuICAgICAgICBpZiAocHJvZ3Jlc3MgPT09IDEpIHtcclxuICAgICAgICAgIHByb3BlcnR5T3duZXJbcHJvcGVydHlOYW1lXSA9IHRhcmdldFZhbHVlO1xyXG4gICAgICAgICAgaW50ZXJwb2xhdG9yLnJlc29sdmUodGFyZ2V0VmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgb25FcnJvcixcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBpbnRlcnBvbGF0b3I7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBBbmltYXRpb25VdGlscztcclxuIiwiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTBcbmltcG9ydCBEZWZlcnJlZCBmcm9tICdjb3JlL0RlZmVycmVkJztcbmltcG9ydCBNYXRoVXRpbHMgZnJvbSAnY29yZS9NYXRoVXRpbHMnO1xuaW1wb3J0IEFuaW1hdGlvblV0aWxzIGZyb20gJy4uL0FuaW1hdGlvblV0aWxzJztcblxuLyoqXG4gKiBCYXNlIGNsYXNzIGZvciBhIHN0YXRlIGluIG91ciBhbmltYXRpb24gc3lzdGVtLlxuICpcbiAqIEBhYnN0cmFjdFxuICovXG5jbGFzcyBBYnN0cmFjdFN0YXRlIHtcbiAgLyoqXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdD19IG9wdGlvbnMgLSBPcHRpb25zIGZvciB0aGUgYW5pbWF0aW9uIHN0YXRlLlxuICAgKiBAcGFyYW0ge3N0cmluZz19IG9wdGlvbnMubmFtZSAtIE5hbWUgZm9yIHRoZSBhbmltYXRpb24gc3RhdGUuIE5hbWVzIG11c3QgYmVcbiAgICogdW5pcXVlIGZvciB0aGUgY29udGFpbmVyIHRoZSBzdGF0ZSBpcyBhcHBsaWVkIHRvIGFuZCBzaG91bGQgYmUgdmFsaWRhdGVkIGF0XG4gICAqIHRoZSBjb250YWluZXIgbGV2ZWwuIElmIG5vIG5hbWUgaXMgZ2l2ZW4gaXQgd2lsbCBkZWZhdWx0IHRvIHRoZSBjb25zdHJ1Y3RvclxuICAgKiBuYW1lLlxuICAgKiBAcGFyYW0ge3dlaWdodH0gW29wdGlvbnMud2VpZ2h0PTBdIC0gVGhlIDAtMSBhbW91bnQgb2YgaW5mbHVlbmNlIHRoZSBzdGF0ZSB3aWxsIGhhdmUuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihvcHRpb25zID0ge30pIHtcbiAgICB0aGlzLm5hbWUgPVxuICAgICAgb3B0aW9ucy5uYW1lICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLm5hbWUgOiB0aGlzLmNvbnN0cnVjdG9yLm5hbWU7XG4gICAgdGhpcy5fd2VpZ2h0ID1cbiAgICAgIG9wdGlvbnMud2VpZ2h0ICE9PSB1bmRlZmluZWRcbiAgICAgICAgPyBNYXRoVXRpbHMuY2xhbXAob3B0aW9ucy53ZWlnaHQsIDAsIDEpXG4gICAgICAgIDogMDtcbiAgICB0aGlzLl9pbnRlcm5hbFdlaWdodCA9IHRoaXMuX3dlaWdodDtcbiAgICB0aGlzLl9wYXVzZWQgPSBmYWxzZTtcblxuICAgIHRoaXMuX3Byb21pc2VzID0ge1xuICAgICAgZmluaXNoOiBEZWZlcnJlZC5yZXNvbHZlKCksXG4gICAgICB3ZWlnaHQ6IERlZmVycmVkLnJlc29sdmUoKSxcbiAgICAgIHBsYXk6IERlZmVycmVkLnJlc29sdmUoKSxcbiAgICB9O1xuXG4gICAgdGhpcy5fcGxheUNhbGxiYWNrcyA9IHtcbiAgICAgIG9uRmluaXNoOiB1bmRlZmluZWQsXG4gICAgICBvbkVycm9yOiB1bmRlZmluZWQsXG4gICAgICBvbkNhbmNlbDogdW5kZWZpbmVkLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB3aGV0aGVyIG9yIG5vdCB0aGUgc3RhdGUgaXMgY3VycmVudGx5IHBhdXNlZC5cbiAgICpcbiAgICogQHR5cGUge251bWJlcn1cbiAgICovXG4gIGdldCBwYXVzZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3BhdXNlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGFuZCBzZXRzIHRoZSB1c2VyIGRlZmluZWQgd2VpZ2h0LlxuICAgKlxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0IHdlaWdodCgpIHtcbiAgICByZXR1cm4gdGhpcy5fd2VpZ2h0O1xuICB9XG5cbiAgc2V0IHdlaWdodCh3ZWlnaHQpIHtcbiAgICB0aGlzLl93ZWlnaHQgPSBNYXRoVXRpbHMuY2xhbXAod2VpZ2h0LCAwLCAxKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHdoZXRoZXIgb3Igbm90IHRoZSB3ZWlnaHQgaXMgY3VycmVudGx5IGJlaW5nIGFuaW1hdGVkLlxuICAgKlxuICAgKiBAcmVhZG9ubHlcbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqL1xuICBnZXQgd2VpZ2h0UGVuZGluZygpIHtcbiAgICByZXR1cm4gdGhpcy5fcHJvbWlzZXMud2VpZ2h0ICYmIHRoaXMuX3Byb21pc2VzLndlaWdodC5wZW5kaW5nO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIHVzZXIgZGVmaW5lZCB3ZWlnaHQgb3ZlciB0aW1lLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gd2VpZ2h0IC0gVGhlIHRhcmdldCB3ZWlnaHQgdmFsdWUuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbc2Vjb25kcz0wXSAtIFRoZSBhbW91bnQgb2YgdGltZSBpdCB3aWxsIHRha2UgdG8gcmVhY2ggdGhlXG4gICAqIHRhcmdldCB3ZWlnaHQuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBlYXNpbmdGbiAtIFRoZSBlYXNpbmcgZnVuY3Rpb24gdG8gdXNlIGZvciBpbnRlcnBvbGF0aW9uLlxuICAgKlxuICAgKiBAcmV0dXJucyB7RGVmZXJyZWR9XG4gICAqL1xuICBzZXRXZWlnaHQod2VpZ2h0LCBzZWNvbmRzID0gMCwgZWFzaW5nRm4pIHtcbiAgICB0aGlzLl9wcm9taXNlcy53ZWlnaHQuY2FuY2VsKCk7XG4gICAgd2VpZ2h0ID0gTWF0aFV0aWxzLmNsYW1wKHdlaWdodCk7XG5cbiAgICB0aGlzLl9wcm9taXNlcy53ZWlnaHQgPSBBbmltYXRpb25VdGlscy5pbnRlcnBvbGF0ZVByb3BlcnR5KFxuICAgICAgdGhpcyxcbiAgICAgICd3ZWlnaHQnLFxuICAgICAgd2VpZ2h0LFxuICAgICAge3NlY29uZHMsIGVhc2luZ0ZufVxuICAgICk7XG5cbiAgICByZXR1cm4gdGhpcy5fcHJvbWlzZXMud2VpZ2h0O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGludGVybmFsIHdlaWdodC5cbiAgICpcbiAgICogQHJlYWRvbmx5XG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqL1xuICBnZXQgaW50ZXJuYWxXZWlnaHQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2ludGVybmFsV2VpZ2h0O1xuICB9XG5cbiAgLyoqXG4gICAqIE11bHRpcGxpZXMgdGhlIHVzZXIgd2VpZ2h0IGJ5IGEgZmFjdG9yIHRvIGRldGVybWluZSB0aGUgaW50ZXJuYWwgd2VpZ2h0LlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gZmFjdG9yIC0gMC0xIG11bHRpcGxpZXIgdG8gYXBwbHkgdG8gdGhlIHVzZXIgd2VpZ2h0LlxuICAgKi9cbiAgdXBkYXRlSW50ZXJuYWxXZWlnaHQoZmFjdG9yKSB7XG4gICAgdGhpcy5faW50ZXJuYWxXZWlnaHQgPSB0aGlzLl93ZWlnaHQgKiBmYWN0b3I7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIGFueSB2YWx1ZXMgdGhhdCBuZWVkIHRvIGJlIGV2YWx1YXRlZCBldmVyeSBmcmFtZS5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGRlbHRhVGltZSAtIFRpbWUgaW4gbWlsbGlzZWNvbmRzIHNpbmNlIHRoZSBsYXN0IHVwZGF0ZS5cbiAgICovXG4gIHVwZGF0ZShkZWx0YVRpbWUpIHtcbiAgICBpZiAoIXRoaXMuX3BhdXNlZCkge1xuICAgICAgT2JqZWN0LnZhbHVlcyh0aGlzLl9wcm9taXNlcykuZm9yRWFjaChwcm9taXNlID0+IHtcbiAgICAgICAgcHJvbWlzZS5leGVjdXRlKGRlbHRhVGltZSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU3RhcnQgcGxheWJhY2sgb2YgdGhlIHN0YXRlIGZyb20gdGhlIGJlZ2lubmluZy5cbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9uRmluaXNoIC0gRnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBzdGF0ZSBmaW5pc2hlcy5cbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9uRXJyb3IgLSBGdW5jdGlvbiB0byBleGVjdXRlIGlmIHRoZSBzdGF0ZSBlbmNvdW50ZXJzXG4gICAqIGFuIGVycm9yIGR1cmluZyBwbGF5YmFjay5cbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9uQ2FuY2VsIC0gRnVuY3Rpb24gdG8gZXhlY3V0ZSBpZiBwbGF5YmFjayBpcyBjYW5jZWxlZC5cbiAgICpcbiAgICogQHJldHVybnMge0RlZmVycmVkfVxuICAgKi9cbiAgcGxheShvbkZpbmlzaCwgb25FcnJvciwgb25DYW5jZWwpIHtcbiAgICB0aGlzLl9wYXVzZWQgPSBmYWxzZTtcbiAgICB0aGlzLl9wbGF5Q2FsbGJhY2tzLm9uRmluaXNoID0gb25GaW5pc2g7XG4gICAgdGhpcy5fcGxheUNhbGxiYWNrcy5vbkVycm9yID0gb25FcnJvcjtcbiAgICB0aGlzLl9wbGF5Q2FsbGJhY2tzLm9uQ2FuY2VsID0gb25DYW5jZWw7XG5cbiAgICB0aGlzLl9wcm9taXNlcy5wbGF5ID0gbmV3IERlZmVycmVkKHVuZGVmaW5lZCwgb25GaW5pc2gsIG9uRXJyb3IsIG9uQ2FuY2VsKTtcbiAgICB0aGlzLl9wcm9taXNlcy5maW5pc2ggPSBEZWZlcnJlZC5hbGwoW1xuICAgICAgdGhpcy5fcHJvbWlzZXMucGxheSxcbiAgICAgIHRoaXMuX3Byb21pc2VzLndlaWdodCxcbiAgICBdKTtcblxuICAgIHJldHVybiB0aGlzLl9wcm9taXNlcy5maW5pc2g7XG4gIH1cblxuICAvKipcbiAgICogUGF1c2UgcGxheWJhY2sgb2YgdGhlIHN0YXRlLiBUaGlzIHByZXZlbnRzIHBlbmRpbmcgcHJvbWlzZXMgZnJvbSBiZWluZyBleGVjdXRlZC5cbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBwYXVzZSgpIHtcbiAgICB0aGlzLl9wYXVzZWQgPSB0cnVlO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc3VtZSBwbGF5YmFjayBvZiB0aGUgc3RhdGUuXG4gICAqXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvbkZpbmlzaCAtIEZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgc3RhdGUgZmluaXNoZXMuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvbkVycm9yIC0gRnVuY3Rpb24gdG8gZXhlY3V0ZSBpZiB0aGUgc3RhdGUgZW5jb3VudGVyc1xuICAgKiBhbiBlcnJvciBkdXJpbmcgcGxheWJhY2suXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvbkNhbmNlbCAtIEZ1bmN0aW9uIHRvIGV4ZWN1dGUgaWYgcGxheWJhY2sgaXMgY2FuY2VsZWQuXG4gICAqXG4gICAqIEByZXR1cm5zIHtEZWZlcnJlZH1cbiAgICovXG4gIHJlc3VtZShvbkZpbmlzaCwgb25FcnJvciwgb25DYW5jZWwpIHtcbiAgICB0aGlzLl9wYXVzZWQgPSBmYWxzZTtcblxuICAgIGlmICghdGhpcy5fcHJvbWlzZXMucGxheS5wZW5kaW5nKSB7XG4gICAgICB0aGlzLl9wbGF5Q2FsbGJhY2tzLm9uRmluaXNoID0gb25GaW5pc2ggfHwgdGhpcy5fcGxheUNhbGxiYWNrcy5vbkZpbmlzaDtcbiAgICAgIHRoaXMuX3BsYXlDYWxsYmFja3Mub25FcnJvciA9IG9uRXJyb3IgfHwgdGhpcy5fcGxheUNhbGxiYWNrcy5vbkVycm9yO1xuICAgICAgdGhpcy5fcGxheUNhbGxiYWNrcy5vbkNhbmNlbCA9IG9uQ2FuY2VsIHx8IHRoaXMuX3BsYXlDYWxsYmFja3Mub25DYW5jZWw7XG5cbiAgICAgIHRoaXMuX3Byb21pc2VzLnBsYXkgPSBuZXcgRGVmZXJyZWQoXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgdGhpcy5fcGxheUNhbGxiYWNrcy5vbkZpbmlzaCxcbiAgICAgICAgdGhpcy5fcGxheUNhbGxiYWNrcy5vbkVycm9yLFxuICAgICAgICB0aGlzLl9wbGF5Q2FsbGJhY2tzLm9uQ2FuY2VsXG4gICAgICApO1xuICAgICAgdGhpcy5fcHJvbWlzZXMuZmluaXNoID0gRGVmZXJyZWQuYWxsKFtcbiAgICAgICAgdGhpcy5fcHJvbWlzZXMucGxheSxcbiAgICAgICAgdGhpcy5fcHJvbWlzZXMud2VpZ2h0LFxuICAgICAgXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3Byb21pc2VzLmZpbmlzaDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYW5jZWwgcGxheWJhY2sgb2YgdGhlIHN0YXRlIGFuZCBjYW5jZWwgYW55IHBlbmRpbmcgcHJvbWlzZXMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgY2FuY2VsKCkge1xuICAgIHRoaXMuX3BhdXNlZCA9IHRydWU7XG5cbiAgICBPYmplY3QudmFsdWVzKHRoaXMuX3Byb21pc2VzKS5mb3JFYWNoKHByb21pc2UgPT4ge1xuICAgICAgcHJvbWlzZS5jYW5jZWwoKTtcbiAgICB9KTtcblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0b3AgcGxheWJhY2sgb2YgdGhlIHN0YXRlIGFuZCByZXNvbHZlIGFueSBwZW5kaW5nIHByb21pc2VzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIHN0b3AoKSB7XG4gICAgdGhpcy5fcGF1c2VkID0gdHJ1ZTtcblxuICAgIE9iamVjdC52YWx1ZXModGhpcy5fcHJvbWlzZXMpLmZvckVhY2gocHJvbWlzZSA9PiB7XG4gICAgICBwcm9taXNlLnJlc29sdmUoKTtcbiAgICB9KTtcblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbmNlbCBhbnkgcGVuZGluZyBwcm9taXNlcyBhbmQgcmVtb3ZlIHJlZmVyZW5jZSB0byB0aGVtLlxuICAgKi9cbiAgZGlzY2FyZCgpIHtcbiAgICB0aGlzLmNhbmNlbCgpO1xuXG4gICAgZGVsZXRlIHRoaXMuX3Byb21pc2VzO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvcmNlIHRoZSBpbnRlcm5hbCB3ZWlnaHQgdG8gMC4gU2hvdWxkIGJlIGNhbGxlZCBiZWZvcmUgc3dpdGNoaW5nIG9yIHRyYW5zaXRpb25pbmdcbiAgICogdG8gYSBuZXcgc3RhdGUuXG4gICAqL1xuICBkZWFjdGl2YXRlKCkge1xuICAgIHRoaXMudXBkYXRlSW50ZXJuYWxXZWlnaHQoMCk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQWJzdHJhY3RTdGF0ZTtcbiIsIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxyXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTBcclxuaW1wb3J0IERlZmVycmVkIGZyb20gJ2NvcmUvRGVmZXJyZWQnO1xyXG5pbXBvcnQgQWJzdHJhY3RTdGF0ZSBmcm9tICcuL0Fic3RyYWN0U3RhdGUnO1xyXG5cclxuLyoqXHJcbiAqIENsYXNzIGZvciBzbW9vdGggdHJhbnNpdGlvbmluZyBiZXR3ZWVuIHN0YXRlcyBvbiBhbiBhbmltYXRpb24gbGF5ZXIuXHJcbiAqXHJcbiAqIEBleHRlbmRzIEFic3RyYWN0U3RhdGVcclxuICovXHJcbmNsYXNzIFRyYW5zaXRpb25TdGF0ZSBleHRlbmRzIEFic3RyYWN0U3RhdGUge1xyXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMgPSB7fSkge1xyXG4gICAgc3VwZXIob3B0aW9ucyk7XHJcblxyXG4gICAgdGhpcy5fdG8gPSBudWxsO1xyXG4gICAgdGhpcy5fZnJvbSA9IFtdO1xyXG4gICAgdGhpcy5fd2VpZ2h0UHJvbWlzZSA9IERlZmVycmVkLnJlc29sdmUoKTtcclxuICB9XHJcblxyXG4gIGdldCBpbnRlcm5hbFdlaWdodCgpIHtcclxuICAgIC8vIEZpbmQgdGhlIGNvbWJpbmVkIHdlaWdodCBvZiBhbGwgc3ViLXN0YXRlc1xyXG4gICAgbGV0IHRvdGFsV2VpZ2h0ID0gMDtcclxuXHJcbiAgICBpZiAodGhpcy5fdG8pIHtcclxuICAgICAgdG90YWxXZWlnaHQgKz0gdGhpcy5fdG8ud2VpZ2h0O1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX2Zyb20uZm9yRWFjaChzdGF0ZSA9PiB7XHJcbiAgICAgIHRvdGFsV2VpZ2h0ICs9IHN0YXRlLndlaWdodDtcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiB0b3RhbFdlaWdodCAqIHRoaXMuX2ludGVybmFsV2VpZ2h0O1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlSW50ZXJuYWxXZWlnaHQoZmFjdG9yKSB7XHJcbiAgICBzdXBlci51cGRhdGVJbnRlcm5hbFdlaWdodChmYWN0b3IpO1xyXG5cclxuICAgIHRoaXMuX2Zyb20uZm9yRWFjaChzdGF0ZSA9PiB7XHJcbiAgICAgIHN0YXRlLnVwZGF0ZUludGVybmFsV2VpZ2h0KHRoaXMuX2ludGVybmFsV2VpZ2h0KTtcclxuICAgIH0pO1xyXG5cclxuICAgIGlmICh0aGlzLl90bykge1xyXG4gICAgICB0aGlzLl90by51cGRhdGVJbnRlcm5hbFdlaWdodCh0aGlzLl9pbnRlcm5hbFdlaWdodCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGUgc3ViLXN0YXRlcyB0aGUgdHJhbnNpdGlvbiBpcyBjb250cm9sbGluZyBhbmQgc3RhcnQgbmV3IHdlaWdodFxyXG4gICAqIGFuaW1hdGlvbnMgb24gZWFjaCBvbmUuIFRoaXMgc2hvdWxkIGJlIGNhbGxlZCBlYWNoIHRpbWUgdGhlIGN1cnJlbnQgc3RhdGUgb2ZcclxuICAgKiBhbiBhbmltYXRpb24gbGF5ZXIgZ2V0cyB1cGRhdGVkIHRvIGEgbmV3IHZhbHVlIGFuZCBhIHRyYW5zaXRpb24gdGltZSBncmVhdGVyXHJcbiAgICogdGhhdCB6ZXJvIGlzIHNwZWNpZmllZC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7QXJyYXkuPEFic3RyYWN0U3RhdGU+fSBbY3VycmVudFN0YXRlcz1bXV0gLSBTdGF0ZXMgd2hvc2Ugd2VpZ2h0IHZhbHVlc1xyXG4gICAqIHdpbGwgYmUgYW5pbWF0ZWQgdG8gMC5cclxuICAgKiBAcGFyYW0ge0Fic3RyYWN0U3RhdGU9fSB0YXJnZXRTdGF0ZSAtIFN0YXRlIHdob3NlIHdlaWdodCB3aWxsIGJlIGFuaW1hdGVkXHJcbiAgICogdG8gMS5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gdHJhbnNpdGlvblRpbWUgLSBBbW91bnQgb2YgdGltZSBpdCB3aWxsIGluIHNlY29uZHMgdGFrZSBmb3JcclxuICAgKiB3ZWlnaHQgYW5pbWF0aW9ucyB0byBjb21wbGV0ZS5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gZWFzaW5nRm4gLSBFYXNpbmcgZnVuY3Rpb24gdG8gdXNlIGZvciB3ZWlnaHQgYW5pbWF0aW9ucy5cclxuICAgKiBEZWZhdWx0IGlzIEVhc2luZy5MaW5lYXIuSW5PdXQuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9uQ29tcGxldGUgLSBGdW5jdGlvbiB0byBleGVjdXRlIG9uY2UgYWxsIHdlaWdodCBhbmltYXRpb25zXHJcbiAgICogY29tcGxldGUuXHJcbiAgICovXHJcbiAgY29uZmlndXJlKFxyXG4gICAgY3VycmVudFN0YXRlcyA9IFtdLFxyXG4gICAgdGFyZ2V0U3RhdGUsXHJcbiAgICB0cmFuc2l0aW9uVGltZSxcclxuICAgIGVhc2luZ0ZuLFxyXG4gICAgb25Db21wbGV0ZVxyXG4gICkge1xyXG4gICAgLy8gRGVhY3RpdmF0ZSBhbnkgc3RhdGVzIHRoYXQgYXJlbid0IGluIHRoZSBuZXcgY29uZmlndXJhdGlvblxyXG4gICAgaWYgKHRoaXMuX3RvID09PSB0YXJnZXRTdGF0ZSB8fCBjdXJyZW50U3RhdGVzLmluY2x1ZGVzKHRoaXMuX3RvKSkge1xyXG4gICAgICB0aGlzLl90byA9IG51bGw7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9mcm9tID0gdGhpcy5fZnJvbS5maWx0ZXIoXHJcbiAgICAgIHN0YXRlID0+IHN0YXRlICE9PSB0YXJnZXRTdGF0ZSAmJiAhY3VycmVudFN0YXRlcy5pbmNsdWRlcyhzdGF0ZSlcclxuICAgICk7XHJcbiAgICB0aGlzLmRlYWN0aXZhdGUoKTtcclxuXHJcbiAgICB0aGlzLl9mcm9tID0gY3VycmVudFN0YXRlcztcclxuICAgIHRoaXMuX3RvID0gdGFyZ2V0U3RhdGU7XHJcbiAgICB0aGlzLnJlc2V0KHRyYW5zaXRpb25UaW1lLCBlYXNpbmdGbiwgb25Db21wbGV0ZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTdGFydCBuZXcgd2VpZ2h0IGFuaW1hdGlvbnMgc3RhdGUgdGhlIHRyYW5zaXRpb24gY29udHJvbHMuIFRoaXMgc2hvdWxkIGJlIGNhbGxlZFxyXG4gICAqIGlmIGFuIGFuaW1hdGlvbiBpcyBwbGF5ZWQgd2l0aCBhIHRyYW5zaXRpb24gdGltZSBncmVhdGVyIHRoYW4gemVybyBhbmQgYSB0cmFuc3Rpb25cclxuICAgKiB0byB0aGF0IGFuaW1hdGlvbiB3YXMgYWxyZWFkeSBpbiBwcm9ncmVzcy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB0cmFuc2l0aW9uVGltZSAtIEFtb3VudCBvZiB0aW1lIGl0IHdpbGwgaW4gc2Vjb25kcyB0YWtlIGZvclxyXG4gICAqIHdlaWdodCBhbmltYXRpb25zIHRvIGNvbXBsZXRlLlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBlYXNpbmdGbiAtIEVhc2luZyBmdW5jdGlvbiB0byB1c2UgZm9yIHdlaWdodCBhbmltYXRpb25zLlxyXG4gICAqIERlZmF1bHQgaXMgRWFzaW5nLkxpbmVhci5Jbk91dC5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb25Db21wbGV0ZSAtIEZ1bmN0aW9uIHRvIGV4ZWN1dGUgb25jZSBhbGwgd2VpZ2h0IGFuaW1hdGlvbnNcclxuICAgKiBjb21wbGV0ZS5cclxuICAgKi9cclxuICByZXNldCh0cmFuc2l0aW9uVGltZSwgZWFzaW5nRm4sIG9uQ29tcGxldGUpIHtcclxuICAgIC8vIFN0b3AgYW55IHBlbmRpbmcgcHJvbWlzZXNcclxuICAgIHRoaXMuX3dlaWdodFByb21pc2UuY2FuY2VsKCk7XHJcblxyXG4gICAgLy8gU3RhcnQgdHdlZW5pbmcgd2VpZ2h0IHRvIDAgZm9yIHRoZSBjdXJyZW50IHN0YXRlc1xyXG4gICAgY29uc3Qgd2VpZ2h0UHJvbWlzZXMgPSB0aGlzLl9mcm9tLm1hcChzdGF0ZSA9PlxyXG4gICAgICBzdGF0ZS5zZXRXZWlnaHQoMCwgdHJhbnNpdGlvblRpbWUsIGVhc2luZ0ZuKVxyXG4gICAgKTtcclxuXHJcbiAgICAvLyBTdGFydCB0d2VlbmluZyB3ZWlnaHQgdG8gMSBmb3IgdGhlIHRhcmdldCBzdGF0ZVxyXG4gICAgaWYgKHRoaXMuX3RvKSB7XHJcbiAgICAgIHdlaWdodFByb21pc2VzLnB1c2godGhpcy5fdG8uc2V0V2VpZ2h0KDEsIHRyYW5zaXRpb25UaW1lLCBlYXNpbmdGbikpO1xyXG4gICAgICB0aGlzLm5hbWUgPSB0aGlzLl90by5uYW1lO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5uYW1lID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl93ZWlnaHRQcm9taXNlID0gRGVmZXJyZWQuYWxsKHdlaWdodFByb21pc2VzLCAoKSA9PiB7XHJcbiAgICAgIHRoaXMuX2Zyb20uZm9yRWFjaChzdGF0ZSA9PiB7XHJcbiAgICAgICAgc3RhdGUuY2FuY2VsKCk7XHJcbiAgICAgICAgc3RhdGUuZGVhY3RpdmF0ZSgpO1xyXG4gICAgICB9KTtcclxuICAgICAgaWYgKHR5cGVvZiBvbkNvbXBsZXRlID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgb25Db21wbGV0ZSgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHBsYXkob25GaW5pc2gsIG9uRXJyb3IsIG9uQ2FuY2VsLCBvbk5leHQpIHtcclxuICAgIHRoaXMuX3BhdXNlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5fcGxheUNhbGxiYWNrcy5vbkZpbmlzaCA9IG9uRmluaXNoO1xyXG4gICAgdGhpcy5fcGxheUNhbGxiYWNrcy5vbkVycm9yID0gb25FcnJvcjtcclxuICAgIHRoaXMuX3BsYXlDYWxsYmFja3Mub25DYW5jZWwgPSBvbkNhbmNlbDtcclxuXHJcbiAgICBjb25zdCBwcm9taXNlcyA9IFt0aGlzLl93ZWlnaHRQcm9taXNlXTtcclxuXHJcbiAgICB0aGlzLl9mcm9tLmZvckVhY2goc3RhdGUgPT4ge1xyXG4gICAgICBzdGF0ZS5yZXN1bWUoKTtcclxuICAgIH0pO1xyXG5cclxuICAgIGlmICh0aGlzLl90bykge1xyXG4gICAgICB0aGlzLl9wcm9taXNlcy5wbGF5ID0gdGhpcy5fdG8ucGxheShcclxuICAgICAgICB1bmRlZmluZWQsXHJcbiAgICAgICAgdW5kZWZpbmVkLFxyXG4gICAgICAgIHVuZGVmaW5lZCxcclxuICAgICAgICBvbk5leHRcclxuICAgICAgKTtcclxuICAgICAgcHJvbWlzZXMucHVzaCh0aGlzLl9wcm9taXNlcy5wbGF5KTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9wcm9taXNlcy5maW5pc2ggPSBEZWZlcnJlZC5hbGwocHJvbWlzZXMsIG9uRmluaXNoLCBvbkVycm9yLCBvbkNhbmNlbCk7XHJcbiAgICByZXR1cm4gdGhpcy5fcHJvbWlzZXMuZmluaXNoO1xyXG4gIH1cclxuXHJcbiAgcGF1c2UoKSB7XHJcbiAgICB0aGlzLl9mcm9tLmZvckVhY2goc3RhdGUgPT4ge1xyXG4gICAgICBzdGF0ZS5wYXVzZSgpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKHRoaXMuX3RvKSB7XHJcbiAgICAgIHRoaXMuX3RvLnBhdXNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHN1cGVyLnBhdXNlKCk7XHJcbiAgfVxyXG5cclxuICByZXN1bWUob25GaW5pc2gsIG9uRXJyb3IsIG9uQ2FuY2VsLCBvbk5leHQpIHtcclxuICAgIHRoaXMuX3BhdXNlZCA9IGZhbHNlO1xyXG5cclxuICAgIGlmICghdGhpcy5fcHJvbWlzZXMucGxheS5wZW5kaW5nKSB7XHJcbiAgICAgIHRoaXMuX3BsYXlDYWxsYmFja3Mub25GaW5pc2ggPSBvbkZpbmlzaCB8fCB0aGlzLl9wbGF5Q2FsbGJhY2tzLm9uRmluaXNoO1xyXG4gICAgICB0aGlzLl9wbGF5Q2FsbGJhY2tzLm9uRXJyb3IgPSBvbkVycm9yIHx8IHRoaXMuX3BsYXlDYWxsYmFja3Mub25FcnJvcjtcclxuICAgICAgdGhpcy5fcGxheUNhbGxiYWNrcy5vbkNhbmNlbCA9IG9uQ2FuY2VsIHx8IHRoaXMuX3BsYXlDYWxsYmFja3Mub25DYW5jZWw7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgcHJvbWlzZXMgPSBbdGhpcy5fd2VpZ2h0UHJvbWlzZV07XHJcblxyXG4gICAgdGhpcy5fZnJvbS5mb3JFYWNoKHN0YXRlID0+IHtcclxuICAgICAgc3RhdGUucmVzdW1lKCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAodGhpcy5fdG8pIHtcclxuICAgICAgdGhpcy5fcHJvbWlzZXMucGxheSA9IHRoaXMuX3RvLnJlc3VtZShcclxuICAgICAgICB1bmRlZmluZWQsXHJcbiAgICAgICAgdW5kZWZpbmVkLFxyXG4gICAgICAgIHVuZGVmaW5lZCxcclxuICAgICAgICBvbk5leHRcclxuICAgICAgKTtcclxuICAgICAgcHJvbWlzZXMucHVzaCh0aGlzLl9wcm9taXNlcy5wbGF5KTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9wcm9taXNlcy5maW5pc2ggPSBEZWZlcnJlZC5hbGwoXHJcbiAgICAgIHByb21pc2VzLFxyXG4gICAgICB0aGlzLl9wbGF5Q2FsbGJhY2tzLm9uRmluaXNoLFxyXG4gICAgICB0aGlzLl9wbGF5Q2FsbGJhY2tzLm9uRXJyb3IsXHJcbiAgICAgIHRoaXMuX3BsYXlDYWxsYmFja3Mub25DYW5jZWxcclxuICAgICk7XHJcbiAgICByZXR1cm4gdGhpcy5fcHJvbWlzZXMuZmluaXNoO1xyXG4gIH1cclxuXHJcbiAgY2FuY2VsKCkge1xyXG4gICAgdGhpcy5fZnJvbS5mb3JFYWNoKHN0YXRlID0+IHtcclxuICAgICAgc3RhdGUucGF1c2UoKTtcclxuICAgIH0pO1xyXG5cclxuICAgIGlmICh0aGlzLl90bykge1xyXG4gICAgICB0aGlzLl90by5jYW5jZWwoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl93ZWlnaHRQcm9taXNlLmNhbmNlbCgpO1xyXG5cclxuICAgIHJldHVybiBzdXBlci5jYW5jZWwoKTtcclxuICB9XHJcblxyXG4gIHN0b3AoKSB7XHJcbiAgICB0aGlzLl9mcm9tLmZvckVhY2goc3RhdGUgPT4ge1xyXG4gICAgICBzdGF0ZS5wYXVzZSgpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKHRoaXMuX3RvKSB7XHJcbiAgICAgIHRoaXMuX3RvLnN0b3AoKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gc3VwZXIuc3RvcCgpO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlKGRlbHRhVGltZSkge1xyXG4gICAgc3VwZXIudXBkYXRlKGRlbHRhVGltZSk7XHJcblxyXG4gICAgdGhpcy5fZnJvbS5mb3JFYWNoKHN0YXRlID0+IHtcclxuICAgICAgc3RhdGUudXBkYXRlKGRlbHRhVGltZSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAodGhpcy5fdG8pIHtcclxuICAgICAgdGhpcy5fdG8udXBkYXRlKGRlbHRhVGltZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBkaXNjYXJkKCkge1xyXG4gICAgc3VwZXIuZGlzY2FyZCgpO1xyXG5cclxuICAgIHRoaXMuX3dlaWdodFByb21pc2UuY2FuY2VsKCk7XHJcbiAgICBkZWxldGUgdGhpcy5fd2VpZ2h0UHJvbWlzZTtcclxuICAgIHRoaXMuX3RvID0gbnVsbDtcclxuICAgIHRoaXMuX2Zyb20ubGVuZ3RoID0gMDtcclxuICB9XHJcblxyXG4gIGRlYWN0aXZhdGUoKSB7XHJcbiAgICBpZiAodGhpcy5fdG8pIHtcclxuICAgICAgdGhpcy5fdG8uZGVhY3RpdmF0ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX2Zyb20uZm9yRWFjaChzdGF0ZSA9PiB7XHJcbiAgICAgIHN0YXRlLmRlYWN0aXZhdGUoKTtcclxuICAgIH0pO1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgVHJhbnNpdGlvblN0YXRlO1xyXG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxuLyogZXNsaW50LWRpc2FibGUgbWF4LWNsYXNzZXMtcGVyLWZpbGUgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1lbXB0eS1mdW5jdGlvbiAqL1xuLyogZXNsaW50LWRpc2FibGUgZ2V0dGVyLXJldHVybiAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tdXNlbGVzcy1jb25zdHJ1Y3RvciAqL1xuaW1wb3J0IFRyYW5zaXRpb25TdGF0ZSBmcm9tICcuL3N0YXRlL1RyYW5zaXRpb25TdGF0ZSc7XG5pbXBvcnQgRGVmZXJyZWQgZnJvbSAnLi4vRGVmZXJyZWQnO1xuXG4vKipcbiAqIENsYXNzIGZhY3RvcnkgaW50ZXJmYWNlIGZvciBjb250cm9sbGluZyBwbGF5YmFjayBvZiBhIGNvbGxlY3Rpb24gb2YgYW5pbWF0aW9ucy5cbiAqIE9uZSBhbmltYXRpb24gY2FuIGJlIHBsYXllZCBhdCBhbnkgZ2l2ZW4gdGltZSwgY3Jvc3NmYWRpbmcgYmV0d2VlbiBhbmltYXRpb25zXG4gKiB3aWxsIHJlc3VsdCBpbiBwbGF5aW5nIGEge0BsaW5rIFRyYW5zaXRpb25TdGF0ZX0uXG4gKlxuICogQGludGVyZmFjZVxuICovXG5jbGFzcyBBbmltYXRpb25QbGF5ZXJJbnRlcmZhY2Uge1xuICAvKipcbiAgICogR2V0cyB3aGV0aGVyIG9yIG5vdCB0aGUgcGxheWVyIGlzIHVwZGF0aW5nIHN0YXRlcy5cbiAgICpcbiAgICogQHJlYWRvbmx5XG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKi9cbiAgZ2V0IHBhdXNlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fcGF1c2VkO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgYW5kIHNldHMgdGhlIGRlZmF1bHQgbnVtYmVyIG9mIHNlY29uZHMgaXQgdGFrZXMgdG8gdHJhbnNpdGlvbiB0byBhIG5ld1xuICAgKiBhbmltYXRpb24uXG4gICAqXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqL1xuICBnZXQgdHJhbnNpdGlvblRpbWUoKSB7fVxuXG4gIHNldCB0cmFuc2l0aW9uVGltZShzZWNvbmRzKSB7fVxuXG4gIC8qKlxuICAgKiBHZXRzIGFuZCBzZXRzIHRoZSBkZWZhdWx0IGVhc2luZyBmdW5jdGlvbiB0byB1c2Ugd2hlbiB0cmFuc2l0aW9uaW5nIGFuZFxuICAgKiBzZXR0aW5nIHdlaWdodHMuXG4gICAqXG4gICAqIEB0eXBlIHtGdW5jdGlvbn1cbiAgICovXG4gIGdldCBlYXNpbmdGbigpIHt9XG5cbiAgc2V0IGVhc2luZ0ZuKGZuKSB7fVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBzdGF0ZSB0aGUgbGF5ZXIgaXMgY3VycmVudGx5IGluIGNvbnRyb2wgb2YuXG4gICAqXG4gICAqIEByZWFkb25seVxuICAgKiBAdHlwZSB7QWJzdHJhY3RTdGF0ZX1cbiAgICovXG4gIGdldCBjdXJyZW50U3RhdGUoKSB7fVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBuYW1lIG9mIHRoZSBzdGF0ZSB0aGUgbGF5ZXIgaXMgY3VycmVudGx5IGluIGNvbnRyb2wgb2YuXG4gICAqXG4gICAqIEByZWFkb25seVxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKi9cbiAgZ2V0IGN1cnJlbnRBbmltYXRpb24oKSB7fVxuXG4gIC8qKlxuICAgKiBHZXRzIHdoZXRoZXIgb3Igbm90IHRoZSBsYXllciBpcyBjdXJyZW50bHkgdHJhbnNpdGlvbmluZyB0byBhIG5ldyBhbmltYXRpb24uXG4gICAqXG4gICAqIEByZWFkb25seVxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICovXG4gIGdldCBpc1RyYW5zaXRpb25pbmcoKSB7fVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgdGhlIGxheWVyJ3MgY3VycmVudCBzdGF0ZSB0byBhIG5ldyB2YWx1ZS4gSWYgdHJhbnNpdGlvblRpbWUgaXMgZGVmaW5lZFxuICAgKiBhbmQgZ3JlYXRlciB0aGFuIHplcm8sIHBlcmZvcm0gYSBzbW9vdGggYmxlbmQgYmV0d2VlbiBhbnkgc3RhdGVzIHRoYXQgY3VycmVudGx5XG4gICAqIGhhdmUgbm9uLXplcm8gd2VpZ2h0IHZhbHVlcyBhbmQgdGhlIG5ldyBzdGF0ZS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICpcbiAgICogQHBhcmFtIHsoc3RyaW5nfG51bGwpfSBuYW1lIC0gTmFtZSBvZiB0aGUgc3RhdGUgdG8gdHJhbnNpdGlvbiB0by5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHBsYXlNZXRob2QgLSBOYW1lIG9mIHRoZSBvcGVyYXRpb24gYmVpbmcgcHJlcGFyZWQgZm9yLCB0byBiZVxuICAgKiB1c2VkIGluIGVycm9yIG1lc3NhZ2luZy5cbiAgICogQHBhcmFtIHtudW1iZXI9fSB0cmFuc2l0aW9uVGltZSAtIEFtb3VudCBvZiB0aW1lIGluIHNlY29uZHMgaXQgd2lsbCB0YWtlIHRvXG4gICAqIHN3aXRjaCB0byB0aGUgbmV3IHN0YXRlLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gZWFzaW5nRm4gLSBFYXNpbmcgZnVuY3Rpb24gdG8gdXNlIHdoZW4gdHJhbnNpdGlvbmluZyB0byBhXG4gICAqIG5ldyBzdGF0ZSBvdmVyIHRpbWUuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvbkVycm9yIC0gRnVuY3Rpb24gdG8gZXhlY3V0ZSBpZiBhbiBlcnJvciBpcyBlbmNvdW50ZXJlZC5cbiAgICovXG4gIF9wcmVwYXJlQ3VycmVudFN0YXRlKG5hbWUsIHBsYXlNZXRob2QsIHRyYW5zaXRpb25UaW1lLCBlYXNpbmdGbiwgb25FcnJvcikge31cblxuICAvKipcbiAgICogU3RhcnQgcGxheWJhY2sgYW4gYW5pbWF0aW9uIGZyb20gdGhlIGJlZ2lubmluZy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBOYW1lIG9mIHRoZSBhbmltYXRpb24gdG8gcGxheS5cbiAgICogQHBhcmFtIHtudW1iZXI9fSB0cmFuc2l0aW9uVGltZSAtIEFtb3VudCBvZiB0aW1lIGl0IHdpbGwgdGFrZSBiZWZvcmUgdGhlXG4gICAqIG5ldyBzdGF0ZSBoYXMgZnVsbCBpbmZsdWVuY2UgZm9yIHRoZSBsYXllci5cbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IGVhc2luZ0ZuIC0gRWFzaW5nIGZ1bmN0aW9uIHRvIHVzZSBmb3IgYmxlbmRpbmcgaWYgdHJhbnNpdGlvblRpbWVcbiAgICogaXMgZ3JlYXRlciB0aGFuIHplcm8uXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvbkZpbmlzaCAtIEZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgYW5pbWF0aW9uIGZpbmlzaGVzLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb25FcnJvciAtIEZ1bmN0aW9uIHRvIGV4ZWN1dGUgaWYgdGhlIGFuaW1hdGlvbiBlbmNvdW50ZXJzXG4gICAqIGFuIGVycm9yIGR1cmluZyBwbGF5YmFjay5cbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9uQ2FuY2VsIC0gRnVuY3Rpb24gdG8gZXhlY3V0ZSBpZiBwbGF5YmFjayBpcyBjYW5jZWxlZC5cbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9uTmV4dCAtIEZ1bmN0aW9uIHRvIGV4ZWN1dGUgaWYgYW4gYW5pbWF0aW9uIHF1ZXVlIGlzXG4gICAqIHBsYXllZCBhbmQgaXQgYWR2YW5jZXMgdG8gdGhlIG5leHQgYW5pbWF0aW9uLlxuICAgKlxuICAgKiBAcmV0dXJucyB7RGVmZXJyZWR9XG4gICAqL1xuICBwbGF5QW5pbWF0aW9uKFxuICAgIG5hbWUsXG4gICAgdHJhbnNpdGlvblRpbWUsXG4gICAgZWFzaW5nRm4sXG4gICAgb25GaW5pc2gsXG4gICAgb25FcnJvcixcbiAgICBvbkNhbmNlbCxcbiAgICBvbk5leHRcbiAgKSB7fVxuXG4gIC8qKlxuICAgKiBDYW5jZWwgcGxheWJhY2sgb2YgdGhlIGN1cnJlbnQgYW5pbWF0aW9uLlxuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGNhbmNlbEFuaW1hdGlvbigpIHt9XG5cbiAgLyoqXG4gICAqIFBhdXNlIHBsYXliYWNrIG9mIHRoZSBjdXJyZW50IGFuaW1hdGlvbi5cbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBwYXVzZUFuaW1hdGlvbigpIHt9XG5cbiAgLyoqXG4gICAqIFJlc3VtZSBwbGF5YmFjayBvZiBhbiBhbmltYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nPX0gbmFtZSAtIE5hbWUgb2YgdGhlIGFuaW1hdGlvbiB0byByZXN1bWUgcGxheWJhY2sgZm9yLiBEZWZhdWx0XG4gICAqIGlzIHRoZSBsYXllcidzIGN1cnJlbnQgYW5pbWF0aW9uIG5hbWUuXG4gICAqIEBwYXJhbSB7bnVtYmVyPX0gdHJhbnNpdGlvblRpbWUgLSBBbW91bnQgb2YgdGltZSBpdCB3aWxsIHRha2UgYmVmb3JlIHRoZVxuICAgKiBuZXcgc3RhdGUgaGFzIGZ1bGwgaW5mbHVlbmNlIGZvciB0aGUgbGF5ZXIuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvbkZpbmlzaCAtIEZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgc3RhdGUgZmluaXNoZXMuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvbkVycm9yIC0gRnVuY3Rpb24gdG8gZXhlY3V0ZSBpZiB0aGUgc3RhdGUgZW5jb3VudGVyc1xuICAgKiBhbiBlcnJvciBkdXJpbmcgcGxheWJhY2suXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvbkNhbmNlbCAtIEZ1bmN0aW9uIHRvIGV4ZWN1dGUgaWYgcGxheWJhY2sgaXMgY2FuY2VsZWQuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvbk5leHQgLSBGdW5jdGlvbiB0byBleGVjdXRlIGlmIGFuIGFuaW1hdGlvbiBxdWV1ZSBpc1xuICAgKiBwbGF5ZWQgYW5kIGl0IGFkdmFuY2VzIHRvIHRoZSBuZXh0IGFuaW1hdGlvbi5cbiAgICpcbiAgICogQHJldHVybnMge0RlZmVycmVkfVxuICAgKi9cbiAgcmVzdW1lQW5pbWF0aW9uKFxuICAgIG5hbWUsXG4gICAgdHJhbnNpdGlvblRpbWUsXG4gICAgZWFzaW5nRm4sXG4gICAgb25GaW5pc2gsXG4gICAgb25FcnJvcixcbiAgICBvbkNhbmNlbCxcbiAgICBvbk5leHRcbiAgKSB7fVxuXG4gIC8qKlxuICAgKiBTdG9wIHBsYXliYWNrIG9mIHRoZSBjdXJyZW50IGFuaW1hdGlvbi5cbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBzdG9wQW5pbWF0aW9uKCkge31cblxuICAvKipcbiAgICogVXBkYXRlIHRoZSBjdXJyZW50IGFuaW1hdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGRlbHRhVGltZSAtIFRpbWUgaW4gbWlsbGlzZWNvbmRzIHNpbmNlIHRoZSBsYXN0IHVwZGF0ZS5cbiAgICovXG4gIHVwZGF0ZShkZWx0YVRpbWUpIHt9XG5cbiAgLyoqXG4gICAqIERpc2NhcmQgdGhlIHRyYW5zaXRpb24gc3RhdGUuXG4gICAqL1xuICBkaXNjYXJkKCkge31cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIGNsYXNzIHRoYXQgaW1wbGVtZW50cyB7QGxpbmsgQW5pbWF0aW9uUGxheWVySW50ZXJmYWNlfSBhbmQgZXh0ZW5kc1xuICAgKiBhIHNwZWNpZmllZCBiYXNlIGNsYXNzLlxuICAgKlxuICAgKiBAcGFyYW0ge0NsYXNzfSBbQmFzZUNsYXNzID0gY2xhc3N7fV0gLSBUaGUgY2xhc3MgdG8gZXh0ZW5kLlxuICAgKlxuICAgKiBAcmV0dXJuIHtDbGFzc30gQSBjbGFzcyB0aGF0IGV4dGVuZHMgYEJhc2VDbGFzc2AgYW5kIGltcGxlbWVudHMge0BsaW5rIEFuaW1hdGlvblBsYXllckludGVyZmFjZX0uXG4gICAqL1xuICBzdGF0aWMgTWl4aW4oQmFzZUNsYXNzID0gY2xhc3Mge30pIHtcbiAgICBjb25zdCBBbmltYXRpb25QbGF5ZXJNaXhpbiA9IGNsYXNzIGV4dGVuZHMgQmFzZUNsYXNzIHtcbiAgICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMgPSB7fSwgLi4uYXJncykge1xuICAgICAgICBzdXBlcihvcHRpb25zLCAuLi5hcmdzKTtcblxuICAgICAgICB0aGlzLl90cmFuc2l0aW9uU3RhdGUgPSBuZXcgVHJhbnNpdGlvblN0YXRlKCk7XG4gICAgICAgIHRoaXMuX3N0YXRlcyA9IHRoaXMuX3N0YXRlcyAhPT0gdW5kZWZpbmVkID8gdGhpcy5fc3RhdGVzIDogbmV3IE1hcCgpO1xuICAgICAgICB0aGlzLl9jdXJyZW50U3RhdGUgPSBudWxsO1xuICAgICAgICB0aGlzLl9wYXVzZWQgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLl90cmFuc2l0aW9uVGltZSA9XG4gICAgICAgICAgTnVtYmVyKG9wdGlvbnMudHJhbnNpdGlvblRpbWUpID49IDBcbiAgICAgICAgICAgID8gTnVtYmVyKG9wdGlvbnMudHJhbnNpdGlvblRpbWUpXG4gICAgICAgICAgICA6IDA7XG5cbiAgICAgICAgdGhpcy5fZWFzaW5nRm4gPVxuICAgICAgICAgIHR5cGVvZiBvcHRpb25zLmVhc2luZ0ZuID09PSAnZnVuY3Rpb24nID8gb3B0aW9ucy5lYXNpbmdGbiA6IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgZ2V0IHBhdXNlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BhdXNlZDtcbiAgICAgIH1cblxuICAgICAgZ2V0IHRyYW5zaXRpb25UaW1lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdHJhbnNpdGlvblRpbWU7XG4gICAgICB9XG5cbiAgICAgIHNldCB0cmFuc2l0aW9uVGltZShzZWNvbmRzKSB7XG4gICAgICAgIHNlY29uZHMgPSBOdW1iZXIoc2Vjb25kcyk7XG5cbiAgICAgICAgaWYgKCEoc2Vjb25kcyA+PSAwKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBDYW5ub3Qgc2V0IHRyYW5zaXRpb24gdGltZSBmb3IgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9IHRvICR7c2Vjb25kc30uIFNlY29uZHMgbXVzdCBiZSBhIG51bWVyaWMgdmFsdWUgZ3JlYXRoZXIgdGhhbiBvciBlcXVhbCB0byB6ZXJvLmBcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fdHJhbnNpdGlvblRpbWUgPSBzZWNvbmRzO1xuICAgICAgfVxuXG4gICAgICBnZXQgZWFzaW5nRm4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lYXNpbmdGbjtcbiAgICAgIH1cblxuICAgICAgc2V0IGVhc2luZ0ZuKGZuKSB7XG4gICAgICAgIHRoaXMuX2Vhc2luZ0ZuID0gZm47XG4gICAgICB9XG5cbiAgICAgIGdldCBjdXJyZW50U3RhdGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jdXJyZW50U3RhdGU7XG4gICAgICB9XG5cbiAgICAgIGdldCBjdXJyZW50QW5pbWF0aW9uKCkge1xuICAgICAgICBpZiAodGhpcy5fY3VycmVudFN0YXRlKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRTdGF0ZS5uYW1lO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIGdldCBpc1RyYW5zaXRpb25pbmcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jdXJyZW50U3RhdGUgPT09IHRoaXMuX3RyYW5zaXRpb25TdGF0ZTtcbiAgICAgIH1cblxuICAgICAgX3ByZXBhcmVDdXJyZW50U3RhdGUoXG4gICAgICAgIG5hbWUsXG4gICAgICAgIHBsYXlNZXRob2QsXG4gICAgICAgIHRyYW5zaXRpb25UaW1lLFxuICAgICAgICBlYXNpbmdGbixcbiAgICAgICAgb25FcnJvclxuICAgICAgKSB7XG4gICAgICAgIGlmIChuYW1lICE9PSBudWxsICYmICF0aGlzLl9zdGF0ZXMuaGFzKG5hbWUpKSB7XG4gICAgICAgICAgY29uc3QgZSA9IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBDYW5ub3QgJHtwbGF5TWV0aG9kfSBhbmltYXRpb24gJHtuYW1lfS4gTm8gYW5pbWF0aW9uIGV4aXN0cyB3aXRoIHRoaXMgbmFtZS5gXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGlmICh0eXBlb2Ygb25FcnJvciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgb25FcnJvcihlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdGFyZ2V0U3RhdGUgPSBuYW1lICE9PSBudWxsID8gdGhpcy5fc3RhdGVzLmdldChuYW1lKSA6IG51bGw7XG5cbiAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBuZXcgc3RhdGUgaXNuJ3QgYWxyZWFkeSBwbGF5aW5nXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRBbmltYXRpb24gIT09IG5hbWUpIHtcbiAgICAgICAgICAvLyBTd2l0Y2ggdG8gdGhlIG5ldyBzdGF0ZSBpbW1lZGlhdGVseVxuICAgICAgICAgIGlmICh0cmFuc2l0aW9uVGltZSA8PSAwKSB7XG4gICAgICAgICAgICAvLyBDYW5jZWwgdGhlIGN1cnJlbnQgc3RhdGUgYW5kIHNldCBpdHMgd2VpZ2h0IHRvIDBcbiAgICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50U3RhdGUpIHtcbiAgICAgICAgICAgICAgdGhpcy5fY3VycmVudFN0YXRlLmNhbmNlbCgpO1xuICAgICAgICAgICAgICB0aGlzLl9jdXJyZW50U3RhdGUud2VpZ2h0ID0gMDtcbiAgICAgICAgICAgICAgdGhpcy5fY3VycmVudFN0YXRlLmRlYWN0aXZhdGUoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fY3VycmVudFN0YXRlID0gdGFyZ2V0U3RhdGU7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIEJsZW5kIHRvIHRoZSBuZXcgc3RhdGUgb3ZlciB0aW1lXG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBNYWtlIHN1cmUgdG8gdHJhbnNpdGlvbiBvdXQgb2YgYW55IHN0YXRlcyB3aXRoIG5vbi16ZXJvIHdlaWdodFxuICAgICAgICAgICAgY29uc3QgY3VycmVudFN0YXRlcyA9IFsuLi50aGlzLl9zdGF0ZXMudmFsdWVzKCldLmZpbHRlcihcbiAgICAgICAgICAgICAgcyA9PiBzICE9PSB0YXJnZXRTdGF0ZSAmJiAocy53ZWlnaHQgfHwgcy53ZWlnaHRQZW5kaW5nKVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSB0cmFuc2l0aW9uIHN0YXRlIHdpdGggbmV3IGlucHV0c1xuICAgICAgICAgICAgdGhpcy5fdHJhbnNpdGlvblN0YXRlLmNvbmZpZ3VyZShcbiAgICAgICAgICAgICAgY3VycmVudFN0YXRlcyxcbiAgICAgICAgICAgICAgdGFyZ2V0U3RhdGUsXG4gICAgICAgICAgICAgIHRyYW5zaXRpb25UaW1lLFxuICAgICAgICAgICAgICBlYXNpbmdGbixcbiAgICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRTdGF0ZSA9IHRhcmdldFN0YXRlO1xuICAgICAgICAgICAgICAgIHRoaXMuX3RyYW5zaXRpb25TdGF0ZS53ZWlnaHQgPSAwO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICB0aGlzLl9jdXJyZW50U3RhdGUgPSB0aGlzLl90cmFuc2l0aW9uU3RhdGU7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHBsYXlNZXRob2QgPT09ICdwbGF5Jykge1xuICAgICAgICAgIHRoaXMuX2N1cnJlbnRTdGF0ZS5jYW5jZWwoKTtcblxuICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50U3RhdGUgPT09IHRoaXMuX3RyYW5zaXRpb25TdGF0ZSkge1xuICAgICAgICAgICAgdGhpcy5fdHJhbnNpdGlvblN0YXRlLnJlc2V0KHRyYW5zaXRpb25UaW1lLCBlYXNpbmdGbiwgKCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLl9jdXJyZW50U3RhdGUgPSB0YXJnZXRTdGF0ZTtcbiAgICAgICAgICAgICAgdGhpcy5fdHJhbnNpdGlvblN0YXRlLndlaWdodCA9IDA7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBVcGRhdGUgd2VpZ2h0IGZvciB0aGUgbmV3IGN1cnJlbnQgc3RhdGUgc28gaXQgaGFzIGZ1bGwgaW5mbHVlbmNlIGZvciB0aGUgcGxheWVyXG4gICAgICAgIHRoaXMuX2N1cnJlbnRTdGF0ZS53ZWlnaHQgPSAxO1xuICAgICAgICB0aGlzLl9jdXJyZW50U3RhdGUudXBkYXRlSW50ZXJuYWxXZWlnaHQodGhpcy5faW50ZXJuYWxXZWlnaHQpO1xuICAgICAgfVxuXG4gICAgICBwbGF5QW5pbWF0aW9uKFxuICAgICAgICBuYW1lLFxuICAgICAgICB0cmFuc2l0aW9uVGltZSxcbiAgICAgICAgZWFzaW5nRm4sXG4gICAgICAgIG9uRmluaXNoLFxuICAgICAgICBvbkVycm9yLFxuICAgICAgICBvbkNhbmNlbCxcbiAgICAgICAgb25OZXh0XG4gICAgICApIHtcbiAgICAgICAgbGV0IGVycm9yO1xuICAgICAgICBsZXQgcmVqZWN0ID0gZmFsc2U7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdGhpcy5fcHJlcGFyZUN1cnJlbnRTdGF0ZShcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAncGxheScsXG4gICAgICAgICAgICB0cmFuc2l0aW9uVGltZSAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgID8gdHJhbnNpdGlvblRpbWVcbiAgICAgICAgICAgICAgOiB0aGlzLl90cmFuc2l0aW9uVGltZSxcbiAgICAgICAgICAgIGVhc2luZ0ZuICE9PSB1bmRlZmluZWQgPyBlYXNpbmdGbiA6IHRoaXMuX2Vhc2luZ0ZuLFxuICAgICAgICAgICAgb25FcnJvclxuICAgICAgICAgICk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBlcnJvciA9IGU7XG4gICAgICAgICAgcmVqZWN0ID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyZWplY3QpIHtcbiAgICAgICAgICByZXR1cm4gRGVmZXJyZWQucmVqZWN0KGVycm9yKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLl9jdXJyZW50U3RhdGUucGxheShvbkZpbmlzaCwgb25FcnJvciwgb25DYW5jZWwsIG9uTmV4dCk7XG4gICAgICB9XG5cbiAgICAgIHBhdXNlQW5pbWF0aW9uKCkge1xuICAgICAgICBpZiAodGhpcy5fY3VycmVudFN0YXRlKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRTdGF0ZS5wYXVzZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXN1bWVBbmltYXRpb24oXG4gICAgICAgIG5hbWUsXG4gICAgICAgIHRyYW5zaXRpb25UaW1lLFxuICAgICAgICBlYXNpbmdGbixcbiAgICAgICAgb25GaW5pc2gsXG4gICAgICAgIG9uRXJyb3IsXG4gICAgICAgIG9uQ2FuY2VsLFxuICAgICAgICBvbk5leHRcbiAgICAgICkge1xuICAgICAgICBpZiAobmFtZSA9PT0gdW5kZWZpbmVkICYmIHRoaXMuX2N1cnJlbnRTdGF0ZSkge1xuICAgICAgICAgIG5hbWUgPSB0aGlzLl9jdXJyZW50U3RhdGUubmFtZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBlcnJvcjtcbiAgICAgICAgbGV0IHJlamVjdCA9IGZhbHNlO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHRoaXMuX3ByZXBhcmVDdXJyZW50U3RhdGUoXG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgJ3Jlc3VtZScsXG4gICAgICAgICAgICB0cmFuc2l0aW9uVGltZSAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgID8gdHJhbnNpdGlvblRpbWVcbiAgICAgICAgICAgICAgOiB0aGlzLl90cmFuc2l0aW9uVGltZSxcbiAgICAgICAgICAgIGVhc2luZ0ZuICE9PSB1bmRlZmluZWQgPyBlYXNpbmdGbiA6IHRoaXMuX2Vhc2luZ0ZuLFxuICAgICAgICAgICAgb25FcnJvclxuICAgICAgICAgICk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBlcnJvciA9IGU7XG4gICAgICAgICAgcmVqZWN0ID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyZWplY3QpIHtcbiAgICAgICAgICByZXR1cm4gRGVmZXJyZWQucmVqZWN0KGVycm9yKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLl9jdXJyZW50U3RhdGUucmVzdW1lKG9uRmluaXNoLCBvbkVycm9yLCBvbkNhbmNlbCwgb25OZXh0KTtcbiAgICAgIH1cblxuICAgICAgY2FuY2VsQW5pbWF0aW9uKCkge1xuICAgICAgICBpZiAodGhpcy5fY3VycmVudFN0YXRlKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRTdGF0ZS5jYW5jZWwoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgc3RvcEFuaW1hdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRTdGF0ZSkge1xuICAgICAgICAgIHJldHVybiB0aGlzLl9jdXJyZW50U3RhdGUuc3RvcCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB1cGRhdGUoZGVsdGFUaW1lKSB7XG4gICAgICAgIGlmIChzdXBlci51cGRhdGUpIHtcbiAgICAgICAgICBzdXBlci51cGRhdGUoZGVsdGFUaW1lKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9jdXJyZW50U3RhdGUpIHtcbiAgICAgICAgICB0aGlzLl9jdXJyZW50U3RhdGUudXBkYXRlKGRlbHRhVGltZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZGlzY2FyZCgpIHtcbiAgICAgICAgaWYgKHN1cGVyLmRpc2NhcmQpIHtcbiAgICAgICAgICBzdXBlci5kaXNjYXJkKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl90cmFuc2l0aW9uU3RhdGUuZGlzY2FyZCgpO1xuICAgICAgICBkZWxldGUgdGhpcy5fdHJhbnNpdGlvblN0YXRlO1xuICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gQW5pbWF0aW9uUGxheWVyTWl4aW47XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQW5pbWF0aW9uUGxheWVySW50ZXJmYWNlO1xuIiwiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTBcbi8qIGVzbGludC1kaXNhYmxlIG1heC1jbGFzc2VzLXBlci1maWxlICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tZW1wdHktZnVuY3Rpb24gKi9cbi8qIGVzbGludC1kaXNhYmxlIGdldHRlci1yZXR1cm4gKi9cblxuaW1wb3J0IFV0aWxzIGZyb20gJy4uLy4uL1V0aWxzJztcblxuLyoqXG4gKiBDbGFzcyBmYWN0b3J5IGludGVyZmFjZSBmb3IgbWFuaXB1bGF0aW5nIGEgY29sbGVjdGlvbiBvZiB7QGxpbmsgQWJzdHJhY3RTdGF0ZX0uXG4gKlxuICogQGludGVyZmFjZVxuICovXG5jbGFzcyBTdGF0ZUNvbnRhaW5lckludGVyZmFjZSB7XG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIHN0YXRlIHdpdGggdGhlIGdpdmVuIG5hbWUuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gTmFtZSBvZiB0aGUgc3RhdGUuXG4gICAqXG4gICAqIEByZXR1cm5zIHtBYnN0cmFjdFN0YXRlfVxuICAgKi9cbiAgZ2V0U3RhdGUobmFtZSkge31cblxuICAvKipcbiAgICogR2V0cyBhbiBhcnJheSBvZiB0aGUgbmFtZXMgb2YgYWxsIHN0YXRlcyBpbiB0aGUgY29udGFpbmVyLlxuICAgKlxuICAgKiBAdHlwZSB7QXJyYXkuPHN0cmluZz59XG4gICAqL1xuICBnZXRTdGF0ZU5hbWVzKCkge31cblxuICAvKipcbiAgICogQWRkIGEgbmV3IHN0YXRlIHRvIGJlIGNvbnRyb2xsZWQgYnkgdGhlIGNvbnRhaW5lci4gU3RhdGVzIGFyZSBzdG9yZWQga2V5ZWRcbiAgICogYnkgdGhlaXIgbmFtZSBwcm9wZXJ0eSwgd2hpY2ggbXVzdCBiZSB1bmlxdWUuIElmIGl0IGlzbid0LCBhIG51bWJlciB3aWxsXG4gICAqIGJlIGFkZGVkIG9yIGluY3JlbWVudGVkIHVudGlsIGEgdW5pcXVlIGtleSBpcyBnZW5lcmF0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7QWJzdHJhY3RTdGF0ZX0gc3RhdGUgLSBTdGF0ZSB0byBhZGQgdG8gdGhlIGNvbnRhaW5lci5cbiAgICpcbiAgICogQHJldHVybnMge3N0cmluZ30gLSBVbmlxdWUgbmFtZSBvZiB0aGUgc3RhdGUuXG4gICAqL1xuICBhZGRTdGF0ZShzdGF0ZSkge31cblxuICAvKipcbiAgICogUmVtb3ZlcyBhIHN0YXRlIHdpdGggdGhlIGdpdmVuIG5hbWUgZnJvbSB0aGUgY29udGFpbmVyLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIE5hbWUgb2YgdGhlIHN0YXRlIHRvIHJlbW92ZS5cbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59IC0gV2hldGhlciBvciBub3QgYSBzdGF0ZSB3YXMgcmVtb3ZlZC5cbiAgICovXG4gIHJlbW92ZVN0YXRlKG5hbWUpIHt9XG5cbiAgLyoqXG4gICAqIFJlbmFtZXMgYSBzdGF0ZSB3aXRoIHRoZSBnaXZlbiBuYW1lIGluIHRoZSBjb250YWluZXIuIE5hbWUgbXVzdCBiZSB1bmlxdWVcbiAgICogdG8gdGhlIGNvbnRhaW5lciwgaWYgaXQgaXNuJ3QgdGhlIG5hbWUgd2lsbCBiZSBpbmNyZW1lbnRlZCB1bnRpbCBpdCBpcyB1bmlxdWUuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjdXJyZW50TmFtZSAtIE5hbWUgb2YgdGhlIHN0YXRlIHRvIHJlbmFtZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG5ld05hbWUgLSBOYW1lIHRvIHVwZGF0ZSB0aGUgc3RhdGUgd2l0aC5cbiAgICpcbiAgICogQHJldHVybnMge3N0cmluZ30gLSBVcGRhdGVkIG5hbWUgZm9yIHRoZSBzdGF0ZS5cbiAgICovXG4gIHJlbmFtZVN0YXRlKGN1cnJlbnROYW1lLCBuZXdOYW1lKSB7fVxuXG4gIC8qKlxuICAgKiBEaXNjYXJkcyBhbGwgc3RhdGVzLlxuICAgKi9cbiAgZGlzY2FyZFN0YXRlcygpIHt9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBjbGFzcyB0aGF0IGltcGxlbWVudHMge0BsaW5rIFN0YXRlQ29udGFpbmVySW50ZXJmYWNlfSBhbmQgZXh0ZW5kc1xuICAgKiBhIHNwZWNpZmllZCBiYXNlIGNsYXNzLlxuICAgKlxuICAgKiBAcGFyYW0ge0NsYXNzfSBbQmFzZUNsYXNzID0gY2xhc3N7fV0gLSBUaGUgY2xhc3MgdG8gZXh0ZW5kLlxuICAgKlxuICAgKiBAcmV0dXJuIHtDbGFzc30gQSBjbGFzcyB0aGF0IGV4dGVuZHMgYEJhc2VDbGFzc2AgYW5kIGltcGxlbWVudHMge0BsaW5rIFN0YXRlQ29udGFpbmVySW50ZXJmYWNlfS5cbiAgICovXG4gIHN0YXRpYyBNaXhpbihCYXNlQ2xhc3MgPSBjbGFzcyB7fSkge1xuICAgIC8qKlxuICAgICAqIFRoaXMgbWl4aW4gYWRkcyBmdW5jdGlvbmFsaXR5IGZvciBtYW5pcHVsYXRpbmcgdW5pcXVlbHktbmFtZWQgYW5pbWF0aW9uIHN0YXRlcyBpblxuICAgICAqIGEgbWFwLlxuICAgICAqL1xuICAgIGNvbnN0IFN0YXRlQ29udGFpbmVyTWl4aW4gPSBjbGFzcyBleHRlbmRzIEJhc2VDbGFzcyB7XG4gICAgICBjb25zdHJ1Y3RvcihvcHRpb25zID0ge30sIC4uLmFyZ3MpIHtcbiAgICAgICAgc3VwZXIob3B0aW9ucywgLi4uYXJncyk7XG5cbiAgICAgICAgdGhpcy5fc3RhdGVzID0gdGhpcy5fc3RhdGVzICE9PSB1bmRlZmluZWQgPyB0aGlzLl9zdGF0ZXMgOiBuZXcgTWFwKCk7XG4gICAgICB9XG5cbiAgICAgIGdldFN0YXRlKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXRlcy5nZXQobmFtZSk7XG4gICAgICB9XG5cbiAgICAgIGdldFN0YXRlTmFtZXMoKSB7XG4gICAgICAgIHJldHVybiBbLi4udGhpcy5fc3RhdGVzLmtleXMoKV07XG4gICAgICB9XG5cbiAgICAgIGFkZFN0YXRlKHN0YXRlKSB7XG4gICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgc3RhdGUgaXMgbm90IGFscmVhZHkgaW4gdGhpcyBjb250YWluZXJcbiAgICAgICAgaWYgKFsuLi50aGlzLl9zdGF0ZXMudmFsdWVzKCldLmluY2x1ZGVzKHN0YXRlKSkge1xuICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgIGBDYW5ub3QgYWRkIGFuaW1hdGlvbiB0byBzdGF0ZSAke3RoaXMubmFtZX0uIEFuaW1hdGlvbiB3YXMgYWxyZWFkeSBhZGRlZC5gXG4gICAgICAgICAgKTtcbiAgICAgICAgICByZXR1cm4gc3RhdGUubmFtZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgc3RhdGUgbmFtZSBpcyB1bmlxdWVcbiAgICAgICAgY29uc3QgdW5pcXVlTmFtZSA9IFV0aWxzLmdldFVuaXF1ZU5hbWUoc3RhdGUubmFtZSwgW1xuICAgICAgICAgIC4uLnRoaXMuX3N0YXRlcy5rZXlzKCksXG4gICAgICAgIF0pO1xuXG4gICAgICAgIGlmIChzdGF0ZS5uYW1lICE9PSB1bmlxdWVOYW1lKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgYEFuaW1hdGlvbiBuYW1lICR7c3RhdGUubmFtZX0gaXMgbm90IHVuaXF1ZSBmb3Igc3RhdGUgJHt0aGlzLm5hbWV9LiBOZXcgYW5pbWF0aW9uIHdpbGwgYmUgYWRkZWQgd2l0aCBuYW1lICR7dW5pcXVlTmFtZX0uYFxuICAgICAgICAgICk7XG4gICAgICAgICAgc3RhdGUubmFtZSA9IHVuaXF1ZU5hbWU7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9zdGF0ZXMuc2V0KHN0YXRlLm5hbWUsIHN0YXRlKTtcblxuICAgICAgICByZXR1cm4gc3RhdGUubmFtZTtcbiAgICAgIH1cblxuICAgICAgcmVtb3ZlU3RhdGUobmFtZSkge1xuICAgICAgICAvLyBDaGVjayBpZiB0aGUgc3RhdGUgaXMgaW4gdGhpcyBjb250YWluZXJcbiAgICAgICAgaWYgKCF0aGlzLl9zdGF0ZXMgfHwgIXRoaXMuX3N0YXRlcy5oYXMobmFtZSkpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICBgRGlkIG5vdCByZW1vdmUgYW5pbWF0aW9uICR7bmFtZX0gZnJvbSBzdGF0ZSAke3RoaXMubmFtZX0uIE5vIGFuaW1hdGlvbiBleGlzdHMgd2l0aCB0aGlzIG5hbWUuYFxuICAgICAgICAgICk7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fc3RhdGVzLmdldChuYW1lKS5kaXNjYXJkKCk7XG4gICAgICAgIHRoaXMuX3N0YXRlcy5kZWxldGUobmFtZSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICByZW5hbWVTdGF0ZShjdXJyZW50TmFtZSwgbmV3TmFtZSkge1xuICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIHN0YXRlIGlzIGluIHRoaXMgY29udGFpbmVyXG4gICAgICAgIGlmICghdGhpcy5fc3RhdGVzIHx8ICF0aGlzLl9zdGF0ZXMuaGFzKGN1cnJlbnROYW1lKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBDYW5ub3QgcmVuYW1lIGFuaW1hdGlvbiAke2N1cnJlbnROYW1lfSBpbiAke3RoaXMubmFtZX0uIE5vIGFuaW1hdGlvbiBleGlzdHMgd2l0aCB0aGlzIG5hbWUuYFxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzdGF0ZSA9IHRoaXMuX3N0YXRlcy5nZXQoY3VycmVudE5hbWUpO1xuXG4gICAgICAgIC8vIEV4aXQgaWYgdGhlIG5hbWVzIGFyZSB0aGUgc2FtZVxuICAgICAgICBpZiAoY3VycmVudE5hbWUgPT09IG5ld05hbWUpIHtcbiAgICAgICAgICByZXR1cm4gY3VycmVudE5hbWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIG5hbWUgaXMgdW5pcXVlXG4gICAgICAgIGNvbnN0IHVuaXF1ZU5hbWUgPSBVdGlscy5nZXRVbmlxdWVOYW1lKFxuICAgICAgICAgIG5ld05hbWUsXG4gICAgICAgICAgWy4uLnRoaXMuX3N0YXRlcy5rZXlzKCldLmZpbHRlcihzID0+IHMubmFtZSAhPT0gY3VycmVudE5hbWUpXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKG5ld05hbWUgIT09IHVuaXF1ZU5hbWUpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICBgQW5pbWF0aW9uIG5hbWUgJHtuZXdOYW1lfSBpcyBub3QgdW5pcXVlIGluIHN0YXRlICR7dGhpcy5uYW1lfS4gQW5pbWF0aW9uIHdpbGwgYmUgcmVuYW1lZCB0byAke3VuaXF1ZU5hbWV9LmBcbiAgICAgICAgICApO1xuICAgICAgICAgIG5ld05hbWUgPSB1bmlxdWVOYW1lO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RhdGUubmFtZSA9IG5ld05hbWU7XG4gICAgICAgIHRoaXMuX3N0YXRlcy5kZWxldGUoY3VycmVudE5hbWUpO1xuICAgICAgICB0aGlzLl9zdGF0ZXMuc2V0KHN0YXRlLm5hbWUsIHN0YXRlKTtcblxuICAgICAgICByZXR1cm4gc3RhdGUubmFtZTtcbiAgICAgIH1cblxuICAgICAgZGlzY2FyZFN0YXRlcygpIHtcbiAgICAgICAgdGhpcy5fc3RhdGVzLmZvckVhY2goc3RhdGUgPT4ge1xuICAgICAgICAgIHN0YXRlLmRpc2NhcmQoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZGVsZXRlIHRoaXMuX3N0YXRlcztcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBTdGF0ZUNvbnRhaW5lck1peGluO1xuICB9XG59XG5leHBvcnQgZGVmYXVsdCBTdGF0ZUNvbnRhaW5lckludGVyZmFjZTtcbiIsIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVC0wXG5pbXBvcnQgQWJzdHJhY3RTdGF0ZSBmcm9tICcuL0Fic3RyYWN0U3RhdGUnO1xuaW1wb3J0IEFuaW1hdGlvblBsYXllckludGVyZmFjZSBmcm9tICcuLi9BbmltYXRpb25QbGF5ZXJJbnRlcmZhY2UnO1xuaW1wb3J0IFN0YXRlQ29udGFpbmVySW50ZXJmYWNlIGZyb20gJy4vU3RhdGVDb250YWluZXJJbnRlcmZhY2UnO1xuXG4vKipcbiAqIENsYXNzIGZvciBwbGF5aW5nIGFuIG9yZGVyZWQgYXJyYXkgb2YgYW5pbWF0aW9uIHN0YXRlcyBpbiBzZXF1ZW5jZS5cbiAqXG4gKiBAZXh0ZW5kcyBBYnN0cmFjdFN0YXRlXG4gKiBAaW1wbGVtZW50cyBAQW5pbWF0aW9uUGxheWVySW50ZXJmYWNlXG4gKi9cbmNsYXNzIFF1ZXVlU3RhdGUgZXh0ZW5kcyBBbmltYXRpb25QbGF5ZXJJbnRlcmZhY2UuTWl4aW4oXG4gIFN0YXRlQ29udGFpbmVySW50ZXJmYWNlLk1peGluKEFic3RyYWN0U3RhdGUpXG4pIHtcbiAgLyoqXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIC0gT3B0aW9ucyBmb3IgdGhlIHN0YXRlLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmF1dG9BZHZhbmNlPXRydWVdIC0gV2hldGhlciB0byBhdXRtYXRpY2FsbHkgYWR2YW5jZVxuICAgKiB0byB0aGUgbmV4dCBzdGF0ZSBpbiB0aGUgcXVldWUgYXMgZWFjaCBzdGF0ZSBjb21wbGV0ZXMuXG4gICAqIEBwYXJhbSB7QXJyYXkuPEFic3RyYWN0U3RhdGU+fSBbcXVldWVTdGF0ZXM9W11dIC0gQXJyYXkgb2Ygc3RhdGVzIHRvIGJlIHBsYXllZFxuICAgKiBpbiBvcmRlci5cbiAgICovXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMgPSB7fSwgcXVldWVTdGF0ZXMgPSBbXSkge1xuICAgIHN1cGVyKG9wdGlvbnMpO1xuXG4gICAgcXVldWVTdGF0ZXMuZm9yRWFjaChzdGF0ZSA9PiB7XG4gICAgICB0aGlzLmFkZFN0YXRlKHN0YXRlKTtcbiAgICB9KTtcblxuICAgIHRoaXMuX3F1ZXVlID0gdGhpcy5fc3RhdGVzLmtleXMoKTtcbiAgICB0aGlzLl9kb25lID0gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHdoZXRoZXIgdGhlIGFuaW1hdGlvbiBxdWV1ZSBoYXMgcmVhY2hlZCB0aGUgZW5kLlxuICAgKi9cbiAgZ2V0IGRvbmUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RvbmU7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgaW50ZXJuYWwgd2VpZ2h0LlxuICAgKlxuICAgKiBAcmVhZG9ubHlcbiAgICogQHR5cGUge251bWJlcn1cbiAgICovXG4gIGdldCBpbnRlcm5hbFdlaWdodCgpIHtcbiAgICByZXR1cm4gdGhpcy5fY3VycmVudFN0YXRlXG4gICAgICA/IHRoaXMuX2N1cnJlbnRTdGF0ZS5pbnRlcm5hbFdlaWdodCAqIHRoaXMuX2ludGVybmFsV2VpZ2h0XG4gICAgICA6IDA7XG4gIH1cblxuICAvKipcbiAgICogUmVzdGFydCB0aGUgcXVldWUgaXRlcmF0b3IuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfcmVzZXQoKSB7XG4gICAgdGhpcy5fcXVldWUgPSB0aGlzLl9zdGF0ZXMua2V5cygpO1xuICAgIGNvbnN0IHt2YWx1ZSwgZG9uZX0gPSB0aGlzLl9xdWV1ZS5uZXh0KCk7XG4gICAgdGhpcy5fZG9uZSA9IGRvbmU7XG5cbiAgICByZXR1cm4gdmFsdWUgfHwgbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBNdWx0aXBsaWVzIHRoZSB1c2VyIHdlaWdodCBieSBhIGZhY3RvciB0byBkZXRlcm1pbmUgdGhlIGludGVybmFsIHdlaWdodC5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGZhY3RvciAtIDAtMSBtdWx0aXBsaWVyIHRvIGFwcGx5IHRvIHRoZSB1c2VyIHdlaWdodC5cbiAgICovXG4gIHVwZGF0ZUludGVybmFsV2VpZ2h0KGZhY3Rvcikge1xuICAgIHN1cGVyLnVwZGF0ZUludGVybmFsV2VpZ2h0KGZhY3Rvcik7XG5cbiAgICBpZiAodGhpcy5fY3VycmVudFN0YXRlKSB7XG4gICAgICB0aGlzLl9jdXJyZW50U3RhdGUudXBkYXRlSW50ZXJuYWxXZWlnaHQodGhpcy5faW50ZXJuYWxXZWlnaHQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFydCB0aGUgbmV4dCBhbmltYXRpb24gaW4gdGhlIHF1ZXVlLlxuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb25OZXh0IC0gRnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgYW4gYW5pbWF0aW9uIGNvbXBsZXRlc1xuICAgKiBhbmQgdGhlIHF1ZXVlIG1vdmVzIHRvIHRoZSBuZXh0IGFuaW1hdGlvbi5cbiAgICogQHBhcmFtIHtib29sZWFufSBbd3JhcD1mYWxzZV0gLSBXaGV0aGVyIG9yIG5vdCB0byBzdGFydCB0aGUgcXVldWUgZnJvbSB0aGVcbiAgICogYmVnaW5uaW5nIGFnYWluIGlmIHRoZSBlbmQgaGFzIGJlZW4gcmVhY2hlZC5cbiAgICpcbiAgICogQHJldHVybnMge0RlZmVycmVkfVxuICAgKi9cbiAgbmV4dChvbk5leHQsIHdyYXAgPSBmYWxzZSkge1xuICAgIC8vIE1vdmUgdGhlIHF1ZXVlIGZvcndhcmRcbiAgICBjb25zdCB7dmFsdWU6IG5hbWUsIGRvbmV9ID0gdGhpcy5fcXVldWUubmV4dCgpO1xuICAgIHRoaXMuX2RvbmUgPSBkb25lO1xuICAgIHRoaXMuX3BhdXNlZCA9IGZhbHNlO1xuXG4gICAgLy8gVGhlIHF1ZXVlIGhhcyByZWFjaGVkIHRoZSBlbmRcbiAgICBpZiAoZG9uZSkge1xuICAgICAgLy8gU3RhcnQgdGhlIHF1ZXVlIG92ZXJcbiAgICAgIGlmICh3cmFwKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBsYXkoXG4gICAgICAgICAgdGhpcy5fcGxheUNhbGxiYWNrcy5vbkZpbmlzaCxcbiAgICAgICAgICB0aGlzLl9wbGF5Q2FsbGJhY2tzLm9uRXJyb3IsXG4gICAgICAgICAgdGhpcy5fcGxheUNhbGxiYWNrcy5vbkNhbmNlbCxcbiAgICAgICAgICBvbk5leHRcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIC8vIFN0b3AgdGhlIHF1ZXVlXG4gICAgICBlbHNlIHtcbiAgICAgICAgdGhpcy5fcHJvbWlzZXMuZmluaXNoLnJlc29sdmUoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Byb21pc2VzLmZpbmlzaDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTaWduYWwgdGhlIG5leHQgYW5pbWF0aW9uIGlzIHN0YXJ0aW5nXG4gICAgaWYgKHR5cGVvZiBvbk5leHQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNvbnN0IGxhc3ROYW1lID0gWy4uLnRoaXMuX3N0YXRlcy5rZXlzKCldW3RoaXMuX3N0YXRlcy5zaXplIC0gMV07XG4gICAgICBjb25zdCBpc1F1ZXVlRW5kID0gbmFtZSA9PT0gbGFzdE5hbWU7XG4gICAgICBvbk5leHQoe1xuICAgICAgICBuYW1lLFxuICAgICAgICBjYW5BZHZhbmNlOiB0aGlzLmdldFN0YXRlKG5hbWUpLmxvb3BDb3VudCAhPT0gSW5maW5pdHkgJiYgIWlzUXVldWVFbmQsXG4gICAgICAgIGlzUXVldWVFbmQsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBTdGFydCB0aGUgbmV4dCBhbmltYXRpb25cbiAgICB0aGlzLnBsYXlBbmltYXRpb24oXG4gICAgICBuYW1lLFxuICAgICAgdGhpcy5fdHJhbnNpdGlvblRpbWUsXG4gICAgICB0aGlzLl9lYXNpbmdGbixcbiAgICAgICgpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLl9wYXVzZWQgJiYgIXRoaXMuaXNUcmFuc2l0aW9uaW5nKSB7XG4gICAgICAgICAgdGhpcy5uZXh0KG9uTmV4dCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB0aGlzLl9wbGF5Q2FsbGJhY2tzLm9uRXJyb3JcbiAgICApO1xuXG4gICAgcmV0dXJuIHRoaXMuX3Byb21pc2VzLmZpbmlzaDtcbiAgfVxuXG4gIHBsYXkob25GaW5pc2gsIG9uRXJyb3IsIG9uQ2FuY2VsLCBvbk5leHQpIHtcbiAgICBjb25zdCBuYW1lID0gdGhpcy5fcmVzZXQoKTtcbiAgICBzdXBlci5wbGF5KG9uRmluaXNoLCBvbkVycm9yLCBvbkNhbmNlbCk7XG5cbiAgICBpZiAodGhpcy5fZG9uZSkge1xuICAgICAgdGhpcy5fcHJvbWlzZXMuZmluaXNoLnJlc29sdmUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gU2lnbmFsIHRoZSBuZXh0IGFuaW1hdGlvbiBpcyBzdGFydGluZ1xuICAgICAgaWYgKG5hbWUgIT09IHRoaXMuY3VycmVudEFuaW1hdGlvbiAmJiB0eXBlb2Ygb25OZXh0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGNvbnN0IGxhc3ROYW1lID0gWy4uLnRoaXMuX3N0YXRlcy5rZXlzKCldW3RoaXMuX3N0YXRlcy5zaXplIC0gMV07XG4gICAgICAgIGNvbnN0IGlzUXVldWVFbmQgPSBuYW1lID09PSBsYXN0TmFtZTtcbiAgICAgICAgb25OZXh0KHtcbiAgICAgICAgICBuYW1lLFxuICAgICAgICAgIGNhbkFkdmFuY2U6IG5hbWVcbiAgICAgICAgICAgID8gdGhpcy5nZXRTdGF0ZShuYW1lKS5sb29wQ291bnQgIT09IEluZmluaXR5ICYmICFpc1F1ZXVlRW5kXG4gICAgICAgICAgICA6IHRydWUsXG4gICAgICAgICAgaXNRdWV1ZUVuZDogIW5hbWUgfHwgaXNRdWV1ZUVuZCxcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIC8vIFN0YXJ0IHRoZSBuZXh0IGFuaW1hdGlvblxuICAgICAgdGhpcy5wbGF5QW5pbWF0aW9uKFxuICAgICAgICBuYW1lLFxuICAgICAgICB0aGlzLl9jdXJyZW50U3RhdGUgPyB0aGlzLl90cmFuc2l0aW9uVGltZSA6IDAsXG4gICAgICAgIHRoaXMuX2Vhc2luZ0ZuLFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgaWYgKCF0aGlzLl9wYXVzZWQgJiYgIXRoaXMuaXNUcmFuc2l0aW9uaW5nKSB7XG4gICAgICAgICAgICB0aGlzLm5leHQob25OZXh0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG9uRXJyb3JcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3Byb21pc2VzLmZpbmlzaDtcbiAgfVxuXG4gIHBhdXNlKCkge1xuICAgIGNvbnN0IHBhdXNlZCA9IHN1cGVyLnBhdXNlKCk7XG4gICAgdGhpcy5wYXVzZUFuaW1hdGlvbigpO1xuXG4gICAgcmV0dXJuIHBhdXNlZDtcbiAgfVxuXG4gIHJlc3VtZShvbkZpbmlzaCwgb25FcnJvciwgb25DYW5jZWwsIG9uTmV4dCkge1xuICAgIGlmICh0aGlzLl9kb25lKSB7XG4gICAgICByZXR1cm4gdGhpcy5wbGF5KG9uRmluaXNoLCBvbkVycm9yLCBvbkNhbmNlbCwgb25OZXh0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3VwZXIucmVzdW1lKG9uRmluaXNoLCBvbkVycm9yLCBvbkNhbmNlbCk7XG5cbiAgICAgIHRoaXMucmVzdW1lQW5pbWF0aW9uKFxuICAgICAgICB0aGlzLl9jdXJyZW50U3RhdGUubmFtZSxcbiAgICAgICAgdGhpcy5fdHJhbnNpdGlvblRpbWUsXG4gICAgICAgIHRoaXMuX2Vhc2luZ0ZuLFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgaWYgKCF0aGlzLl9wYXVzZWQgJiYgIXRoaXMuaXNUcmFuc2l0aW9uaW5nKSB7XG4gICAgICAgICAgICB0aGlzLm5leHQob25OZXh0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG9uRXJyb3JcbiAgICAgICk7XG5cbiAgICAgIHJldHVybiB0aGlzLl9wcm9taXNlcy5maW5pc2g7XG4gICAgfVxuICB9XG5cbiAgY2FuY2VsKCkge1xuICAgIGNvbnN0IGNhbmNlbGVkID0gc3VwZXIuY2FuY2VsKCk7XG5cbiAgICBpZiAodGhpcy5fY3VycmVudFN0YXRlKSB7XG4gICAgICB0aGlzLl9jdXJyZW50U3RhdGUuY2FuY2VsKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNhbmNlbGVkO1xuICB9XG5cbiAgc3RvcCgpIHtcbiAgICBjb25zdCBzdG9wcGVkID0gc3VwZXIuc3RvcCgpO1xuICAgIHRoaXMuc3RvcEFuaW1hdGlvbigpO1xuICAgIHRoaXMuX2RvbmUgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHN0b3BwZWQ7XG4gIH1cblxuICBkaXNjYXJkKCkge1xuICAgIHN1cGVyLmRpc2NhcmQoKTtcblxuICAgIHRoaXMuZGlzY2FyZFN0YXRlcygpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFF1ZXVlU3RhdGU7XG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxuaW1wb3J0IERlZmVycmVkIGZyb20gJ2NvcmUvRGVmZXJyZWQnO1xuaW1wb3J0IE1hdGhVdGlscyBmcm9tICdjb3JlL01hdGhVdGlscyc7XG5pbXBvcnQgQWJzdHJhY3RTdGF0ZSBmcm9tICcuL0Fic3RyYWN0U3RhdGUnO1xuaW1wb3J0IFN0YXRlQ29udGFpbmVySW50ZXJmYWNlIGZyb20gJy4vU3RhdGVDb250YWluZXJJbnRlcmZhY2UnO1xuXG4vKipcbiAqIEJhc2UgY2xhc3MgZm9yIGEgc3RhdGUgdGhhdCBibGVuZHMgYSBjb2xsZWN0aW9uIG9mIHtAbGluayBBYnN0cmFjdFN0YXRlfS5cbiAqXG4gKiBAYWJzdHJhY3RcbiAqIEBpbXBsZW1lbnRzIFN0YXRlQ29udGFpbmVySW50ZXJmYWNlXG4gKi9cbmNsYXNzIEFic3RyYWN0QmxlbmRTdGF0ZSBleHRlbmRzIFN0YXRlQ29udGFpbmVySW50ZXJmYWNlLk1peGluKEFic3RyYWN0U3RhdGUpIHtcbiAgY29uc3RydWN0b3Iob3B0aW9ucyA9IHt9LCBibGVuZFN0YXRlcyA9IFtdLCAuLi5hcmdzKSB7XG4gICAgc3VwZXIob3B0aW9ucywgLi4uYXJncyk7XG4gICAgYmxlbmRTdGF0ZXMuZm9yRWFjaChzdGF0ZSA9PiB7XG4gICAgICB0aGlzLmFkZFN0YXRlKHN0YXRlKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBzdW0gb2YgaW50ZXJuYWwgd2VpZ2h0cyBvZiB0aGUgc3ViLXN0YXRlcy5cbiAgICpcbiAgICogQHJlYWRvbmx5XG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqL1xuICBnZXQgaW50ZXJuYWxXZWlnaHQoKSB7XG4gICAgbGV0IGJsZW5kV2VpZ2h0cyA9IDA7XG4gICAgdGhpcy5fc3RhdGVzLmZvckVhY2goc3RhdGUgPT4ge1xuICAgICAgYmxlbmRXZWlnaHRzICs9IHN0YXRlLmludGVybmFsV2VpZ2h0O1xuICAgIH0pO1xuICAgIHJldHVybiBibGVuZFdlaWdodHM7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgd2VpZ2h0IG9mIGEgc3RhdGUgY29udHJvbGxlZCBieSB0aGUgY29udGFpbmVyLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIE5hbWUgb2YgdGhlIHN0YXRlIHRvIHJldHVybiB0aGUgd2VpZ2h0IGZyb20uXG4gICAqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IC0gV2VpZ2h0IG9mIHRoZSBzdGF0ZS5cbiAgICovXG4gIGdldEJsZW5kV2VpZ2h0KG5hbWUpIHtcbiAgICAvLyBNYWtlIHN1cmUgdGhlIG5hbWUgaXMgdmFsaWRcbiAgICBjb25zdCBzdGF0ZSA9IHRoaXMuZ2V0U3RhdGUobmFtZSk7XG4gICAgaWYgKHN0YXRlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYENhbm5vdCBnZXQgd2VpZ2h0IG9mIHN0YXRlICR7bmFtZX0gZnJvbSBCbGVuZFN0YXRlICR7dGhpcy5uYW1lfS4gTm8gc3RhdGUgZXhpc3RzIHdpdGggdGhpcyBuYW1lLmBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0YXRlLndlaWdodDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSB3ZWlnaHQgb2YgYSBzdGF0ZSBjb250cm9sbGVkIGJ5IHRoZSBjb250YWluZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gTmFtZSBvZiB0aGUgc3RhdGUgdG8gc2V0IHRoZSB3ZWlnaHQgb2YuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB3ZWlnaHQgLSBXZWlnaHQgdmFsdWUgdG8gc2V0IG9uIHRoZSBzdGF0ZS5cbiAgICpcbiAgICogQHJldHVybnMge0RlZmVycmVkfVxuICAgKi9cbiAgc2V0QmxlbmRXZWlnaHQobmFtZSwgd2VpZ2h0LCBzZWNvbmRzID0gMCwgZWFzaW5nRm4pIHtcbiAgICAvLyBNYWtlIHN1cmUgdGhlIG5hbWUgaXMgdmFsaWRcbiAgICBjb25zdCBzdGF0ZSA9IHRoaXMuZ2V0U3RhdGUobmFtZSk7XG5cbiAgICBpZiAoc3RhdGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQ2Fubm90IHNldCB3ZWlnaHQgb2Ygc3RhdGUgJHtuYW1lfSBmcm9tIEJsZW5kU3RhdGUgJHt0aGlzLm5hbWV9LiBObyBzdGF0ZSBleGlzdHMgd2l0aCB0aGlzIG5hbWUuYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICB3ZWlnaHQgPSBNYXRoVXRpbHMuY2xhbXAod2VpZ2h0KTtcbiAgICByZXR1cm4gc3RhdGUuc2V0V2VpZ2h0KHdlaWdodCwgc2Vjb25kcywgZWFzaW5nRm4pO1xuICB9XG5cbiAgLyoqXG4gICAqIE11bHRpcGxpZXMgdGhlIHdlaWdodCBvZiBlYWNoIHN1Yi1zdGF0ZSBieSBhIGZhY3RvciB0byBkZXRlcm1pbmUgdGhlIGludGVybmFsIHdlaWdodC5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGZhY3RvciAtIDAtMSBtdWx0aXBsaWVyIHRvIGFwcGx5IHRvIHRoZSB1c2VyIHdlaWdodC5cbiAgICovXG4gIHVwZGF0ZUludGVybmFsV2VpZ2h0KGZhY3Rvcikge1xuICAgIHN1cGVyLnVwZGF0ZUludGVybmFsV2VpZ2h0KGZhY3Rvcik7XG5cbiAgICB0aGlzLl9zdGF0ZXMuZm9yRWFjaChzdGF0ZSA9PiB7XG4gICAgICBzdGF0ZS51cGRhdGVJbnRlcm5hbFdlaWdodCh0aGlzLl9pbnRlcm5hbFdlaWdodCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIGFueSB2YWx1ZXMgb2YgdGhlIHN1Yi1zdGF0ZXMgdGhhdCBuZWVkIHRvIGJlIGV2YWx1YXRlZCBldmVyeSBmcmFtZS5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGRlbHRhVGltZSAtIFRpbWUgaW4gbWlsbGlzZWNvbmRzIHNpbmNlIHRoZSBsYXN0IHVwZGF0ZS5cbiAgICovXG4gIHVwZGF0ZShkZWx0YVRpbWUpIHtcbiAgICBzdXBlci51cGRhdGUoZGVsdGFUaW1lKTtcblxuICAgIHRoaXMuX3N0YXRlcy5mb3JFYWNoKHN0YXRlID0+IHtcbiAgICAgIHN0YXRlLnVwZGF0ZShkZWx0YVRpbWUpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0YXJ0IHBsYXliYWNrIG9mIHRoZSBzdWItc3RhdGVzIGZyb20gdGhlIGJlZ2lubmluZy5cbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9uRmluaXNoIC0gRnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBzdGF0ZSBmaW5pc2hlcy5cbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9uRXJyb3IgLSBGdW5jdGlvbiB0byBleGVjdXRlIGlmIHRoZSBzdGF0ZSBlbmNvdW50ZXJzXG4gICAqIGFuIGVycm9yIGR1cmluZyBwbGF5YmFjay5cbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9uQ2FuY2VsIC0gRnVuY3Rpb24gdG8gZXhlY3V0ZSBpZiBwbGF5YmFjayBpcyBjYW5jZWxlZC5cbiAgICpcbiAgICogQHJldHVybnMge0RlZmVycmVkfVxuICAgKi9cbiAgcGxheShvbkZpbmlzaCwgb25FcnJvciwgb25DYW5jZWwpIHtcbiAgICBjb25zdCBwcm9taXNlcyA9IFtzdXBlci5wbGF5KCldO1xuXG4gICAgdGhpcy5fc3RhdGVzLmZvckVhY2goc3RhdGUgPT4ge1xuICAgICAgcHJvbWlzZXMucHVzaChzdGF0ZS5wbGF5KCkpO1xuICAgIH0pO1xuICAgIHJldHVybiBEZWZlcnJlZC5hbGwocHJvbWlzZXMsIG9uRmluaXNoLCBvbkVycm9yLCBvbkNhbmNlbCk7XG4gIH1cblxuICAvKipcbiAgICogUGF1c2UgcGxheWJhY2sgb2YgdGhlIHN1Yi1zdGF0ZXMuIFRoaXMgcHJldmVudHMgcGVuZGluZyBwcm9taXNlcyBmcm9tIGJlaW5nIGV4ZWN1dGVkLlxuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIHBhdXNlKCkge1xuICAgIHRoaXMuX3N0YXRlcy5mb3JFYWNoKHN0YXRlID0+IHtcbiAgICAgIHN0YXRlLnBhdXNlKCk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHN1cGVyLnBhdXNlKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVzdW1lIHBsYXliYWNrIG9mIHRoZSBzdWItc3RhdGVzLlxuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb25GaW5pc2ggLSBGdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIHN0YXRlIGZpbmlzaGVzLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb25FcnJvciAtIEZ1bmN0aW9uIHRvIGV4ZWN1dGUgaWYgdGhlIHN0YXRlIGVuY291bnRlcnNcbiAgICogYW4gZXJyb3IgZHVyaW5nIHBsYXliYWNrLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb25DYW5jZWwgLSBGdW5jdGlvbiB0byBleGVjdXRlIGlmIHBsYXliYWNrIGlzIGNhbmNlbGVkLlxuICAgKlxuICAgKiBAcmV0dXJucyB7RGVmZXJyZWR9XG4gICAqL1xuICByZXN1bWUob25GaW5pc2gsIG9uRXJyb3IsIG9uQ2FuY2VsKSB7XG4gICAgY29uc3QgcHJvbWlzZXMgPSBbc3VwZXIucmVzdW1lKCldO1xuXG4gICAgdGhpcy5fc3RhdGVzLmZvckVhY2goc3RhdGUgPT4ge1xuICAgICAgcHJvbWlzZXMucHVzaChzdGF0ZS5yZXN1bWUoKSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIERlZmVycmVkLmFsbChwcm9taXNlcywgb25GaW5pc2gsIG9uRXJyb3IsIG9uQ2FuY2VsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYW5jZWwgcGxheWJhY2sgb2YgdGhlIHN1Yi1zdGF0ZXMgYW5kIGNhbmNlbCBhbnkgcGVuZGluZyBwcm9taXNlcy5cbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBjYW5jZWwoKSB7XG4gICAgdGhpcy5fc3RhdGVzLmZvckVhY2goc3RhdGUgPT4ge1xuICAgICAgc3RhdGUuY2FuY2VsKCk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHN1cGVyLmNhbmNlbCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0b3AgcGxheWJhY2sgb2YgdGhlIHN1Yi1zdGF0ZXMgYW5kIHJlc29sdmUgYW55IHBlbmRpbmcgcHJvbWlzZXMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgc3RvcCgpIHtcbiAgICB0aGlzLl9zdGF0ZXMuZm9yRWFjaChzdGF0ZSA9PiB7XG4gICAgICBzdGF0ZS5zdG9wKCk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHN1cGVyLnN0b3AoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNjYXJkcyBhbGwgc3ViLXN0YXRlIHJlc291cmNlcy5cbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBkaXNjYXJkKCkge1xuICAgIHN1cGVyLmRpc2NhcmQoKTtcblxuICAgIHRoaXMuZGlzY2FyZFN0YXRlcygpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEFic3RyYWN0QmxlbmRTdGF0ZTtcbiIsIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVC0wXG5pbXBvcnQgQWJzdHJhY3RCbGVuZFN0YXRlIGZyb20gJy4vQWJzdHJhY3RCbGVuZFN0YXRlJztcblxuLyoqXG4gKiBDbGFzcyBmb3IgYmxlbmRpbmcgTiBudW1iZXIgb2YgYmxlbmQgc3RhdGVzLlxuICpcbiAqIEBleHRlbmRzIEFic3RyYWN0QmxlbmRTdGF0ZVxuICovXG5jbGFzcyBGcmVlQmxlbmRTdGF0ZSBleHRlbmRzIEFic3RyYWN0QmxlbmRTdGF0ZSB7XG4gIC8qKlxuICAgKiBAY29uc3RydWN0b3JcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XSAtIE9wdGlvbnMgZm9yIHRoZSBjb250YWluZXIgc3RhdGUuXG4gICAqIEBwYXJhbSB7QXJyYXkuPEFic3RyYWN0U3RhdGU+fSBbYmxlbmRTdGF0ZXM9W11dIC0gQmxlbmQgc3RhdGVzIHRvIGJlIGNvbnRyb2xsZWQgYnlcbiAgICogdGhpcyBjb250YWluZXIuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihvcHRpb25zID0ge30sIGJsZW5kU3RhdGVzID0gW10pIHtcbiAgICBzdXBlcihvcHRpb25zLCBibGVuZFN0YXRlcyk7XG4gIH1cblxuICB1cGRhdGVJbnRlcm5hbFdlaWdodChmYWN0b3IpIHtcbiAgICBzdXBlci51cGRhdGVJbnRlcm5hbFdlaWdodChmYWN0b3IpO1xuXG4gICAgLy8gRGV0ZXJtaW5lIHRoZSB0b3RhbCBhY3RpdmUgd2VpZ2h0IG9mIGJsZW5kIHN0YXRlc1xuICAgIGxldCBzdW1XZWlnaHRzID0gMDtcblxuICAgIHRoaXMuX3N0YXRlcy5mb3JFYWNoKHN0YXRlID0+IHtcbiAgICAgIHN1bVdlaWdodHMgKz0gc3RhdGUud2VpZ2h0O1xuICAgIH0pO1xuXG4gICAgLy8gRW5zdXJlIHRoZSBzdW0gb2YgYmxlbmQgc3RhdGUgaW50ZXJuYWwgd2VpZ2h0cyBkb2VzIG5vdCBleGNlZWQgY29udGFpbmVyIGludGVybmFsIHdlaWdodFxuICAgIGZhY3RvciAvPSBNYXRoLm1heChzdW1XZWlnaHRzLCAxKTtcblxuICAgIC8vIFN1bSBvZiBibGVuZCBzdGF0ZSBpbnRlcm5hbCB3ZWlnaHRzIHNob3VsZCBub3QgZXhjZWVkIGNvbnRhaW5lciBpbnRlcm5hbCB3ZWlnaHRcbiAgICB0aGlzLl9zdGF0ZXMuZm9yRWFjaChzdGF0ZSA9PiB7XG4gICAgICBzdGF0ZS51cGRhdGVJbnRlcm5hbFdlaWdodChmYWN0b3IgKiB0aGlzLl93ZWlnaHQpO1xuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEZyZWVCbGVuZFN0YXRlO1xuIiwiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTBcbmltcG9ydCBEZWZlcnJlZCBmcm9tICdjb3JlL0RlZmVycmVkJztcbmltcG9ydCBBYnN0cmFjdEJsZW5kU3RhdGUgZnJvbSAnLi9BYnN0cmFjdEJsZW5kU3RhdGUnO1xuaW1wb3J0IEFuaW1hdGlvblV0aWxzIGZyb20gJy4uL0FuaW1hdGlvblV0aWxzJztcblxuLyoqXG4gKiBDbGFzcyBmb3IgYmxlbmRpbmcgTiBudW1iZXIgb2YgYmxlbmQgc3RhdGVzIGJhc2VkIG9uIGEgc2luZ2xlXG4gKiBwYXJhbWV0ZXIuXG4gKlxuICogQGV4dGVuZHMgQWJzdHJhY3RCbGVuZFN0YXRlXG4gKi9cbmNsYXNzIEJsZW5kMWRTdGF0ZSBleHRlbmRzIEFic3RyYWN0QmxlbmRTdGF0ZSB7XG4gIC8qKlxuICAgKiBAY29uc3RydWN0b3JcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSAtIE9wdGlvbnMgZm9yIHRoZSBjb250YWluZXIgc3RhdGVcbiAgICogQHBhcmFtIHtBcnJheS48QWJzdHJhY3RCbGVuZFN0YXRlPn0gW2JsZW5kU3RhdGVzPVtdXSAtIEJsZW5kIHN0YXRlcyB0byBiZVxuICAgKiBjb250cm9sbGVkIGJ5IHRoaXMgY29udGFpbmVyLlxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBbYmxlbmRUaHJlc2hvbGRzPVtdXSAtIFRocmVzaG9sZCB2YWx1ZXMgZm9yIGFjdGl2YXRpbmdcbiAgICogZWFjaCBibGVuZCBzdGF0ZS5cbiAgICogQHBhcmFtIHtBcnJheS48Ym9vbGVhbj59IFtwaGFzZU1hdGNoZXM9W11dIC0gQm9vbGVhbnMgaW5kaWNhdGluZyB3aGV0aGVyIG9yIG5vdFxuICAgKiBlYWNoIGJsZW5kIHN0YXRlIHNob3VsZCBiZSBwaGFzZSBtYXRjaGVkLlxuICAgKi9cbiAgY29uc3RydWN0b3IoXG4gICAgb3B0aW9ucyA9IHt9LFxuICAgIGJsZW5kU3RhdGVzID0gW10sXG4gICAgYmxlbmRUaHJlc2hvbGRzID0gW10sXG4gICAgcGhhc2VNYXRjaGVzID0gW11cbiAgKSB7XG4gICAgc3VwZXIob3B0aW9ucywgYmxlbmRTdGF0ZXMpO1xuXG4gICAgdGhpcy5fYmxlbmRWYWx1ZSA9IDA7XG4gICAgdGhpcy5fcHJvbWlzZXMgPSB7XG4gICAgICAuLi50aGlzLl9wcm9taXNlcyxcbiAgICAgIGJsZW5kVmFsdWU6IERlZmVycmVkLnJlc29sdmUoKSxcbiAgICB9O1xuXG4gICAgLy8gVmFsaWRhdGUgdGhlcmUgYXJlIG5vIGR1cGxpY2F0ZSB0aHJlc2hvbGRzXG4gICAgY29uc3Qgbm9uWmVyb0RpZmZlcmVudFNpemUgPVxuICAgICAgYmxlbmRTdGF0ZXMubGVuZ3RoICE9PSAwICYmIGJsZW5kU3RhdGVzLmxlbmd0aCAhPT0gYmxlbmRUaHJlc2hvbGRzLmxlbmd0aDtcbiAgICBpZiAobm9uWmVyb0RpZmZlcmVudFNpemUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYENhbm5vdCBjcmVhdGUgQmxlbmQxZFN0YXRlIHdpdGggYmxlbmRUaHJlc2hvbGRzICR7YmxlbmRUaHJlc2hvbGRzfS4gQmxlbmRUaHJlc2hvbGRzIGNvdW50IGRvZXMgbm90IG1hdGNoIGJsZW5kU3RhdGVzIGNvdW50LmBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgY29udGFpbnNEdXBsaWNhdGVzID1cbiAgICAgIG5ldyBTZXQoYmxlbmRUaHJlc2hvbGRzKS5zaXplICE9PSBibGVuZFRocmVzaG9sZHMubGVuZ3RoO1xuICAgIGlmIChjb250YWluc0R1cGxpY2F0ZXMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYENhbm5vdCBjcmVhdGUgQmxlbmQxZFN0YXRlIHdpdGggYmxlbmRUaHJlc2hvbGRzICR7YmxlbmRUaHJlc2hvbGRzfS4gQmxlbmRUaHJlc2hvbGRzIGNvbnRhaW5zIGR1cGxpY2F0ZSB2YWx1ZXNgXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIEluaXRpYWxpemUgdGhlIHRocmVzaG9sZHMgbWFwXG4gICAgdGhpcy5fdGhyZXNob2xkcyA9IFtdO1xuICAgIFsuLi50aGlzLl9zdGF0ZXMudmFsdWVzKCldLmZvckVhY2goKHN0YXRlLCBpbmRleCkgPT4ge1xuICAgICAgdGhpcy5fdGhyZXNob2xkcy5wdXNoKHtcbiAgICAgICAgdmFsdWU6IGJsZW5kVGhyZXNob2xkc1tpbmRleF0sXG4gICAgICAgIG5hbWU6IHN0YXRlLm5hbWUsXG4gICAgICAgIHBoYXNlTWF0Y2g6IHBoYXNlTWF0Y2hlc1tpbmRleF0gfHwgZmFsc2UsXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRoaXMuX3NvcnRUaHJlc2hvbGRzKCk7XG4gICAgdGhpcy5fZm9yY2VOb1RocmVzaG9sZER1cGVzID0gdHJ1ZTtcblxuICAgIHRoaXMuX3BoYXNlTGVhZFN0YXRlID0gbnVsbDtcblxuICAgIHRoaXMuX3VwZGF0ZUJsZW5kV2VpZ2h0cygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgYW5kIHNldHMgdGhlIGJsZW5kIHBhcmFtZXRlciB2YWx1ZS5cbiAgICovXG4gIGdldCBibGVuZFZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLl9ibGVuZFZhbHVlO1xuICB9XG5cbiAgc2V0IGJsZW5kVmFsdWUodmFsdWUpIHtcbiAgICB0aGlzLl9ibGVuZFZhbHVlID0gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB3aGV0aGVyIG9yIG5vdCB0aGUgYmxlbmQgdmFsdWUgaXMgY3VycmVudGx5IGJlaW5nIGFuaW1hdGVkLlxuICAgKi9cbiAgZ2V0IGJsZW5kVmFsdWVQZW5kaW5nKCkge1xuICAgIHJldHVybiB0aGlzLl9wcm9taXNlcy5ibGVuZFZhbHVlICYmIHRoaXMuX3Byb21pc2VzLmJsZW5kVmFsdWUucGVuZGluZztcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSB1c2VyIGRlZmluZWQgd2VpZ2h0IG92ZXIgdGltZS5cbiAgICpcbiAgICogQHBhcmFtIHtudWxsfSBuYW1lIC0gVW51c2VkIHBhcmFtZXRlci5cbiAgICogQHBhcmFtIHtudW1iZXJ9IHdlaWdodCAtIFRoZSB0YXJnZXQgd2VpZ2h0IHZhbHVlLlxuICAgKiBAcGFyYW0ge251bWJlcn0gW3NlY29uZHM9MF0gLSBUaGUgYW1vdW50IG9mIHRpbWUgaXQgd2lsbCB0YWtlIHRvIHJlYWNoIHRoZVxuICAgKiB0YXJnZXQgd2VpZ2h0LlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gZWFzaW5nRm4gLSBUaGUgZWFzaW5nIGZ1bmN0aW9uIHRvIHVzZSBmb3IgaW50ZXJwb2xhdGlvbi5cbiAgICpcbiAgICogQHJldHVybnMge0RlZmVycmVkfVxuICAgKi9cbiAgc2V0QmxlbmRXZWlnaHQobmFtZSwgdmFsdWUsIHNlY29uZHMgPSAwLCBlYXNpbmdGbikge1xuICAgIHRoaXMuX3Byb21pc2VzLmJsZW5kVmFsdWUuY2FuY2VsKCk7XG5cbiAgICB0aGlzLl9wcm9taXNlcy5ibGVuZFZhbHVlID0gQW5pbWF0aW9uVXRpbHMuaW50ZXJwb2xhdGVQcm9wZXJ0eShcbiAgICAgIHRoaXMsXG4gICAgICAnYmxlbmRWYWx1ZScsXG4gICAgICB2YWx1ZSxcbiAgICAgIHtcbiAgICAgICAgc2Vjb25kcyxcbiAgICAgICAgZWFzaW5nRm4sXG4gICAgICAgIG9uUHJvZ3Jlc3M6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLl91cGRhdGVCbGVuZFdlaWdodHMoKTtcbiAgICAgICAgfSxcbiAgICAgICAgb25GaW5pc2g6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLl91cGRhdGVCbGVuZFdlaWdodHMoKTtcbiAgICAgICAgfSxcbiAgICAgIH1cbiAgICApO1xuXG4gICAgcmV0dXJuIHRoaXMuX3Byb21pc2VzLmJsZW5kVmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgdXNlciBkZWZpbmVkIHdlaWdodC5cbiAgICpcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGdldEJsZW5kV2VpZ2h0KCkge1xuICAgIHJldHVybiB0aGlzLmJsZW5kVmFsdWU7XG4gIH1cblxuICBhZGRTdGF0ZShzdGF0ZSwgdGhyZXNob2xkVmFsdWUgPSAwLCBwaGFzZU1hdGNoID0gZmFsc2UpIHtcbiAgICB0aGlzLl90aHJlc2hvbGRzID0gdGhpcy5fdGhyZXNob2xkcyB8fCBbXTtcblxuICAgIC8vIE1ha2Ugc3VyZSB0aGVyZSBpcyBub3QgYWxyZWFkeSBhIHN0YXRlIHdpdGggdGhpcyB0aHJlc2hvbGRcbiAgICBjb25zdCBzYW1lVmFsdWUgPSB0aGlzLl90aHJlc2hvbGRzLmZpbmQoXG4gICAgICB0aHJlc2hvbGQgPT4gdGhyZXNob2xkLnZhbHVlID09PSB0aHJlc2hvbGRWYWx1ZVxuICAgICk7XG4gICAgaWYgKHRoaXMuX2ZvcmNlTm9UaHJlc2hvbGREdXBlcyAmJiBzYW1lVmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQ2Fubm90IHNldCBibGVuZCB0aHJlc2hvbGQgb2YgJHt0aHJlc2hvbGRWYWx1ZX0gZm9yIHN0YXRlICR7c3RhdGUubmFtZX0gb24gJHt0aGlzLm5hbWV9LiBBIHN0YXRlIGFscmVhZHkgZXhpc3RzIHdpdGggdGhhdCB0aHJlc2hvbGQuYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBzdXBlci5hZGRTdGF0ZShzdGF0ZSk7XG4gICAgdGhpcy5fdGhyZXNob2xkcy5wdXNoKHtcbiAgICAgIHZhbHVlOiB0aHJlc2hvbGRWYWx1ZSxcbiAgICAgIG5hbWU6IHN0YXRlLm5hbWUsXG4gICAgICBwaGFzZU1hdGNoOiBwaGFzZU1hdGNoIHx8IGZhbHNlLFxuICAgIH0pO1xuXG4gICAgdGhpcy5fc29ydFRocmVzaG9sZHMoKTtcblxuICAgIHJldHVybiBzdGF0ZS5uYW1lO1xuICB9XG5cbiAgcmVtb3ZlU3RhdGUobmFtZSkge1xuICAgIGNvbnN0IHJlbW92ZWQgPSBzdXBlci5yZW1vdmVTdGF0ZShuYW1lKTtcblxuICAgIGlmIChyZW1vdmVkKSB7XG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMuX3RocmVzaG9sZHMuZmluZEluZGV4KFxuICAgICAgICB0aHJlc2hvbGQgPT4gdGhyZXNob2xkLm5hbWUgPT09IG5hbWVcbiAgICAgICk7XG4gICAgICB0aGlzLl90aHJlc2hvbGRzLnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlbW92ZWQ7XG4gIH1cblxuICByZW5hbWVTdGF0ZShjdXJyZW50TmFtZSwgbmV3TmFtZSkge1xuICAgIG5ld05hbWUgPSBzdXBlci5yZW5hbWVTdGF0ZShjdXJyZW50TmFtZSwgbmV3TmFtZSk7XG5cbiAgICBjb25zdCB0aHJlc2hvbGQgPSB0aGlzLl90aHJlc2hvbGRzLmZpbmQoXG4gICAgICB0aHJlc2hvbGQgPT4gdGhyZXNob2xkLm5hbWUgPT09IGN1cnJlbnROYW1lXG4gICAgKTtcbiAgICB0aHJlc2hvbGQubmFtZSA9IG5ld05hbWU7XG5cbiAgICByZXR1cm4gbmV3TmFtZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSB0aHJlc2hvbGQgdmFsdWUgb2YgYSBibGVuZCB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIG5hbWUuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gTmFtZSBvZiB0aGUgYmxlbmQgdG8gZ2V0IHRoZSB0aHJlc2hvbGQgb2YuXG4gICAqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IFRocmVob2xkIHZhbHVlLlxuICAgKi9cbiAgZ2V0QmxlbmRUaHJlc2hvbGQobmFtZSkge1xuICAgIGNvbnN0IHRocmVzaG9sZCA9IHRoaXMuX3RocmVzaG9sZHMuZmluZChcbiAgICAgIHRocmVzaG9sZCA9PiB0aHJlc2hvbGQubmFtZSA9PT0gbmFtZVxuICAgICk7XG5cbiAgICBpZiAodGhyZXNob2xkID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYENhbm5vdCBnZXQgYmxlbmQgdGhyZXNob2xkIG9mIHN0YXRlICR7bmFtZX0gb24gJHt0aGlzLm5hbWV9LiBObyBzdGF0ZSBleGlzdHMgd2l0aCB0aGF0IG5hbWUuYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhyZXNob2xkLnZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIHRocmVzaG9sZCB2YWx1ZSBvZiBhIGJsZW5kIHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgbmFtZS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBOYW1lIG9mIHRoZSBibGVuZCB0byBzZXQgdGhlIHRocmVzaG9sZC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIC0gVmFsdWUgb2YgdGhlIHRocmVzaG9sZCB0byBzZXQuXG4gICAqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IFNldCB0aHJlc2hvbGQgdmFsdWUuXG4gICAqL1xuICBzZXRCbGVuZFRocmVzaG9sZChuYW1lLCB2YWx1ZSkge1xuICAgIC8vIE1ha2Ugc3VyZSB0aGVyZSBpcyBub3QgYWxyZWFkeSBhIHN0YXRlIHdpdGggdGhpcyB0aHJlc2hvbGRcbiAgICBjb25zdCBzYW1lVmFsdWUgPSB0aGlzLl90aHJlc2hvbGRzLmZpbmQoXG4gICAgICB0aHJlc2hvbGQgPT4gdGhyZXNob2xkLnZhbHVlID09PSB2YWx1ZVxuICAgICk7XG4gICAgaWYgKHNhbWVWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBDYW5ub3Qgc2V0IGJsZW5kIHRocmVzaG9sZCBvZiAke3ZhbHVlfSBmb3Igc3RhdGUgJHtuYW1lfSBvbiAke3RoaXMubmFtZX0uIEEgc3RhdGUgYWxyZWFkeSBleGlzdHMgd2l0aCB0aGF0IHRocmVzaG9sZC5gXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHRocmVzaG9sZCA9IHRoaXMuX3RocmVzaG9sZHMuZmluZChcbiAgICAgIHRocmVzaG9sZCA9PiB0aHJlc2hvbGQubmFtZSA9PT0gbmFtZVxuICAgICk7XG5cbiAgICBpZiAodGhyZXNob2xkID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYENhbm5vdCBzZXQgYmxlbmQgdGhyZXNob2xkIG9mIHN0YXRlICR7bmFtZX0gb24gJHt0aGlzLm5hbWV9LiBObyBzdGF0ZSBleGlzdHMgd2l0aCB0aGF0IG5hbWUuYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aHJlc2hvbGQudmFsdWUgPSB2YWx1ZTtcblxuICAgIHRoaXMuX3NvcnRUaHJlc2hvbGRzKCk7XG5cbiAgICByZXR1cm4gdGhyZXNob2xkLnZhbHVlO1xuICB9XG5cbiAgdXBkYXRlSW50ZXJuYWxXZWlnaHQoZmFjdG9yKSB7XG4gICAgc3VwZXIudXBkYXRlSW50ZXJuYWxXZWlnaHQoZmFjdG9yKTtcblxuICAgIGlmICh0aGlzLl9waGFzZUxlYWRTdGF0ZSkge1xuICAgICAgdGhpcy5fc3RhdGVzLmZvckVhY2goc3RhdGUgPT4ge1xuICAgICAgICBpZiAoc3RhdGUud2VpZ2h0ICE9PSAwKSB7XG4gICAgICAgICAgc3RhdGUubm9ybWFsaXplZFRpbWUgPSB0aGlzLl9waGFzZUxlYWRTdGF0ZS5ub3JtYWxpemVkVGltZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIGJsZW5kIHdlaWdodHMgYmFzZWQgb24gdGhlaXIgY29ycmVzcG9uZGluZyB0aHJlc2hvbGQgdmFsdWVzXG4gICAqIGFuZCB0aGUgY3VycmVudCBibGVuZFZhbHVlLiBBZGRpdGlvbmFsbHksIHNldHMgYSBsZWFkIHBoYXNlIHN0YXRlIGlmIHRoZVxuICAgKiBjb25kaXRpb25zIGZvciBwaGFzZS1tYXRjaGluZyBoYXZlIGJlZW4gc2F0aXNmaWVkLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3VwZGF0ZUJsZW5kV2VpZ2h0cygpIHtcbiAgICBpZiAodGhpcy5fdGhyZXNob2xkcy5sZW5ndGggPT09IDApIHJldHVybjtcblxuICAgIGlmICh0aGlzLl90aHJlc2hvbGRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzLl9zdGF0ZXMuZ2V0KHRoaXMuX3RocmVzaG9sZHNbMF0ubmFtZSk7XG4gICAgICBzdGF0ZS5zZXRXZWlnaHQoMSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gSW5pdGlhbGx5IHNldCBhbGwgc3ViLXN0YXRlIHdlaWdodHMgdG8gemVyb1xuICAgIHRoaXMuX3N0YXRlcy5mb3JFYWNoKHN0YXRlID0+IHtcbiAgICAgIHN0YXRlLnNldFdlaWdodCgwKTtcbiAgICB9KTtcblxuICAgIHRoaXMuX3BoYXNlTGVhZFN0YXRlID0gbnVsbDtcblxuICAgIC8vIEZpbmQgdGhlIGZpcnN0IHRocmVzaG9sZCB0aGF0IGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgcGFyYW1ldGVyIHZhbHVlXG4gICAgbGV0IHRhcmdldEluZGV4ID0gdGhpcy5fdGhyZXNob2xkcy5maW5kSW5kZXgodGhyZXNob2xkID0+IHtcbiAgICAgIHJldHVybiB0aHJlc2hvbGQudmFsdWUgPj0gdGhpcy5fYmxlbmRWYWx1ZTtcbiAgICB9KTtcblxuICAgIGlmICh0YXJnZXRJbmRleCA9PT0gMCB8fCB0YXJnZXRJbmRleCA9PT0gLTEpIHtcbiAgICAgIC8vIEdpdmUgb25lIHN0YXRlIGZ1bGwgaW5mbHVlbmNlXG4gICAgICB0YXJnZXRJbmRleCA9IHRhcmdldEluZGV4ID09PSAtMSA/IHRoaXMuX3RocmVzaG9sZHMubGVuZ3RoIC0gMSA6IDA7XG4gICAgICBjb25zdCBzdGF0ZSA9IHRoaXMuX3N0YXRlcy5nZXQodGhpcy5fdGhyZXNob2xkc1t0YXJnZXRJbmRleF0ubmFtZSk7XG4gICAgICBzdGF0ZS5zZXRXZWlnaHQoMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIExpbmVhciBpbnRlcnBvbGF0ZSBpbmZsdWVuY2UgYmV0d2VlbiB0d28gc3RhdGVzXG4gICAgICBjb25zdCB0aHJlc2hvbGRBID0gdGhpcy5fdGhyZXNob2xkc1t0YXJnZXRJbmRleCAtIDFdO1xuICAgICAgY29uc3QgdGhyZXNob2xkQiA9IHRoaXMuX3RocmVzaG9sZHNbdGFyZ2V0SW5kZXhdO1xuXG4gICAgICBjb25zdCBmYWN0b3JCID1cbiAgICAgICAgKHRoaXMuYmxlbmRWYWx1ZSAtIHRocmVzaG9sZEEudmFsdWUpIC9cbiAgICAgICAgKHRocmVzaG9sZEIudmFsdWUgLSB0aHJlc2hvbGRBLnZhbHVlKTtcbiAgICAgIGNvbnN0IGZhY3RvckEgPSAxIC0gZmFjdG9yQjtcblxuICAgICAgY29uc3Qgc3RhdGVBID0gdGhpcy5fc3RhdGVzLmdldCh0aHJlc2hvbGRBLm5hbWUpO1xuICAgICAgY29uc3Qgc3RhdGVCID0gdGhpcy5fc3RhdGVzLmdldCh0aHJlc2hvbGRCLm5hbWUpO1xuXG4gICAgICBzdGF0ZUEuc2V0V2VpZ2h0KGZhY3RvckEpO1xuICAgICAgc3RhdGVCLnNldFdlaWdodChmYWN0b3JCKTtcblxuICAgICAgLy8gU2V0IHBoYXNlLW1hdGNoaW5nIGlmIG5lZWRlZFxuICAgICAgaWYgKHRocmVzaG9sZEEucGhhc2VNYXRjaCAmJiB0aHJlc2hvbGRCLnBoYXNlTWF0Y2gpIHtcbiAgICAgICAgdGhpcy5fcGhhc2VMZWFkU3RhdGUgPSBmYWN0b3JBID4gZmFjdG9yQiA/IHN0YXRlQSA6IHN0YXRlQjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU29ydHMgdGhlIHRocmVzaG9sZHMgZnJvbSBsb3cgdG8gaGlnaCBiYXNlZCBvbiB2YWx1ZS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9zb3J0VGhyZXNob2xkcygpIHtcbiAgICB0aGlzLl90aHJlc2hvbGRzLnNvcnQoKGEsIGIpID0+IGEudmFsdWUgLSBiLnZhbHVlKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBCbGVuZDFkU3RhdGU7XG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxuLyogZXNsaW50LWRpc2FibGUgbm8tdW5kZXJzY29yZS1kYW5nbGUgKi9cbmltcG9ydCBEZWZlcnJlZCBmcm9tICdjb3JlL0RlZmVycmVkJztcbmltcG9ydCBNYXRoVXRpbHMgZnJvbSAnY29yZS9NYXRoVXRpbHMnO1xuaW1wb3J0IEFic3RyYWN0QmxlbmRTdGF0ZSBmcm9tICcuL0Fic3RyYWN0QmxlbmRTdGF0ZSc7XG5pbXBvcnQgQW5pbWF0aW9uVXRpbHMgZnJvbSAnLi4vQW5pbWF0aW9uVXRpbHMnO1xuXG4vKipcbiAqIENsYXNzIGZvciBibGVuZGluZyBOIG51bWJlciBvZiBibGVuZCBzdGF0ZXMgYmFzZWQgb24gdHdvXG4gKiBwYXJhbXRlcnMuXG4gKlxuICogQGV4dGVuZHMgQWJzdHJhY3RCbGVuZFN0YXRlXG4gKi9cbmNsYXNzIEJsZW5kMmRTdGF0ZSBleHRlbmRzIEFic3RyYWN0QmxlbmRTdGF0ZSB7XG4gIC8qKlxuICAgKiBAY29uc3RydWN0b3JcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSAtIE9wdGlvbnMgZm9yIHRoZSBjb250YWluZXIgc3RhdGVcbiAgICogQHBhcmFtIHtBcnJheS48QWJzdHJhY3RCbGVuZFN0YXRlPn0gW2JsZW5kU3RhdGVzPVtdXSAtIEJsZW5kIHN0YXRlcyB0byBiZVxuICAgKiBjb250cm9sbGVkIGJ5IHRoaXMgY29udGFpbmVyLlxuICAgKiBAcGFyYW0ge0FycmF5LjxBcnJheS48bnVtYmVyPj59IFtibGVuZFRocmVzaG9sZHM9W11dIC0gVGhyZXNob2xkIHZhbHVlcyBmb3IgYWN0aXZhdGluZ1xuICAgKiBlYWNoIGJsZW5kIHN0YXRlLlxuICAgKiBAcGFyYW0ge0FycmF5Ljxib29sZWFuPn0gW3BoYXNlTWF0Y2hlcz1bXV0gLSBCb29sZWFucyBpbmRpY2F0aW5nIHdoZXRoZXIgb3Igbm90XG4gICAqIGVhY2ggYmxlbmQgc3RhdGUgc2hvdWxkIGJlIHBoYXNlIG1hdGNoZWQuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihcbiAgICBvcHRpb25zID0ge30sXG4gICAgYmxlbmRTdGF0ZXMgPSBbXSxcbiAgICBibGVuZFRocmVzaG9sZHMgPSBbXSxcbiAgICBwaGFzZU1hdGNoZXMgPSBbXVxuICApIHtcbiAgICBzdXBlcihvcHRpb25zLCBibGVuZFN0YXRlcyk7XG5cbiAgICBpZiAoYmxlbmRTdGF0ZXMubGVuZ3RoICE9PSBibGVuZFRocmVzaG9sZHMubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBDYW5ub3QgY3JlYXRlIEJsZW5kMmRTdGF0ZSB3aXRoIGJsZW5kU3RhdGVzICR7YmxlbmRTdGF0ZXN9IGFuZCBibGVuZFRocmVzaG9sZHMgJHtibGVuZFRocmVzaG9sZHN9LiBDb3VudCBvZiBibGVuZFN0YXRlcyBtdXN0IG1hdGNoIGNvdW50IG9mIGJsZW5kVGhyZXNob2xkcy5gXG4gICAgICApO1xuICAgIH1cblxuICAgIGJsZW5kVGhyZXNob2xkc1xuICAgICAgLnNsaWNlKDAsIGJsZW5kVGhyZXNob2xkcy5sZW5ndGggLSAxKVxuICAgICAgLmZvckVhY2goKHRocmVzaG9sZCwgaW5kZXgpID0+IHtcbiAgICAgICAgYmxlbmRUaHJlc2hvbGRzLnNsaWNlKGluZGV4ICsgMSkuZm9yRWFjaChvdGhlclRocmVzaG9sZCA9PiB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhyZXNob2xkWzBdID09PSBvdGhlclRocmVzaG9sZFswXSAmJlxuICAgICAgICAgICAgdGhyZXNob2xkWzFdID09PSBvdGhlclRocmVzaG9sZFsxXVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICBgQ2Fubm90IGNyZWF0ZSBCbGVuZDJkU3RhdGUgd2l0aCBibGVuZFRocmVzaG9sZHMgJHtibGVuZFRocmVzaG9sZHN9LiBObyBkdXBsaWNhdGUgdmFsdWVzIGFsbG93ZWQgaW4gYmxlbmRUaHJlc2hvbGRzLmBcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgdGhpcy5fYmxlbmRWYWx1ZVggPSAwO1xuICAgIHRoaXMuX2JsZW5kVmFsdWVZID0gMDtcblxuICAgIHRoaXMuX3Byb21pc2VzID0ge1xuICAgICAgLi4udGhpcy5fcHJvbWlzZXMsXG4gICAgICBibGVuZFZhbHVlWDogRGVmZXJyZWQucmVzb2x2ZSgpLFxuICAgICAgYmxlbmRWYWx1ZVk6IERlZmVycmVkLnJlc29sdmUoKSxcbiAgICB9O1xuXG4gICAgdGhpcy5fdGhyZXNob2xkcyA9IFtdO1xuICAgIFsuLi50aGlzLl9zdGF0ZXMudmFsdWVzKCldLmZvckVhY2goKHN0YXRlLCBpbmRleCkgPT4ge1xuICAgICAgdGhpcy5fdGhyZXNob2xkcy5wdXNoKHtcbiAgICAgICAgbmFtZTogc3RhdGUubmFtZSxcbiAgICAgICAgcGhhc2VNYXRjaDogcGhhc2VNYXRjaGVzW2luZGV4XSB8fCBmYWxzZSxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgdGhpcy5fdmVydGljZXMgPSBibGVuZFRocmVzaG9sZHM7XG5cbiAgICBpZiAodGhpcy5fdmVydGljZXMubGVuZ3RoID49IDMpIHtcbiAgICAgIHRoaXMuX3RyaWFuZ2xlcyA9IE1hdGhVdGlscy5nZXREZWxhdW5heVRyaWFuZ3VsYXRpb24odGhpcy5fdmVydGljZXMpO1xuICAgIH1cblxuICAgIHRoaXMuX3BoYXNlTGVhZFN0YXRlID0gbnVsbDtcblxuICAgIHRoaXMuX3VwZGF0ZUJsZW5kV2VpZ2h0cygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIHVzZXIgZGVmaW5lZCB3ZWlnaHQgb3ZlciB0aW1lLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIE5hbWUgb2YgYmxlbmQgd2VpZ2h0IHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtudW1iZXJ9IHdlaWdodCAtIFRhcmdldCB3ZWlnaHQgdmFsdWUuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbc2Vjb25kcz0wXSAtIFRoZSBhbW91bnQgb2YgdGltZSBpdCB3aWxsIHRha2UgdG8gcmVhY2ggdGhlXG4gICAqIHRhcmdldCB2YWx1ZS5cbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IGVhc2luZ0ZuIC0gVGhlIGVhc2luZyBmdW5jdGlvbiB0byB1c2UgZm9yIGludGVycG9sYXRpb24uXG4gICAqXG4gICAqIEByZXR1cm5zIHtEZWZlcnJlZH1cbiAgICovXG4gIHNldEJsZW5kV2VpZ2h0KG5hbWUsIHZhbHVlLCBzZWNvbmRzID0gMCwgZWFzaW5nRm4pIHtcbiAgICBjb25zdCBwcm9wZXJ0eSA9IGBibGVuZFZhbHVlJHtuYW1lLnRvVXBwZXJDYXNlKCl9YDtcbiAgICBpZiAocHJvcGVydHkgIT09ICdibGVuZFZhbHVlWCcgJiYgcHJvcGVydHkgIT09ICdibGVuZFZhbHVlWScpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYENhbm5vdCBzZXQgYmxlbmQgd2VpZ2h0IGZvciAke25hbWV9IG9uICR7dGhpcy5uYW1lfS4gQmxlbmQyZFN0YXRlIG9ubHkgYWNjZXB0cyAnWCcgb3IgJ1knIGZvciBzZXRCbGVuZFdlaWdodGBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5fcHJvbWlzZXNbcHJvcGVydHldLmNhbmNlbCgpO1xuXG4gICAgdGhpcy5fcHJvbWlzZXNbcHJvcGVydHldID0gQW5pbWF0aW9uVXRpbHMuaW50ZXJwb2xhdGVQcm9wZXJ0eShcbiAgICAgIHRoaXMsXG4gICAgICBwcm9wZXJ0eSxcbiAgICAgIHZhbHVlLFxuICAgICAge1xuICAgICAgICBzZWNvbmRzLFxuICAgICAgICBlYXNpbmdGbixcbiAgICAgICAgb25Qcm9ncmVzczogKCkgPT4ge1xuICAgICAgICAgIHRoaXMuX3VwZGF0ZUJsZW5kV2VpZ2h0cygpO1xuICAgICAgICB9LFxuICAgICAgICBvbkZpbmlzaDogKCkgPT4ge1xuICAgICAgICAgIHRoaXMuX3VwZGF0ZUJsZW5kV2VpZ2h0cygpO1xuICAgICAgICB9LFxuICAgICAgfVxuICAgICk7XG5cbiAgICByZXR1cm4gdGhpcy5fcHJvbWlzZXNbcHJvcGVydHldO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHVzZXIgZGVmaW5lZCB3ZWlnaHQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gTmFtZSBvZiBibGVuZCB3ZWlnaHQuXG4gICAqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICBnZXRCbGVuZFdlaWdodChuYW1lKSB7XG4gICAgY29uc3QgcHJvcGVydHkgPSBuYW1lLnRvVXBwZXJDYXNlKCk7XG4gICAgaWYgKHByb3BlcnR5ICE9PSAnWCcgJiYgcHJvcGVydHkgIT09ICdZJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQ2Fubm90IGdldCBibGVuZCB3ZWlnaHQgZm9yICR7bmFtZX0gb24gJHt0aGlzLm5hbWV9LiBCbGVuZDJkU3RhdGUgb25seSBhY2NlcHRzICdYJyBvciAnWScgZm9yIGdldEJsZW5kV2VpZ2h0YFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvcGVydHkgPT09ICdYJyA/IHRoaXMuX2JsZW5kVmFsdWVYIDogdGhpcy5fYmxlbmRWYWx1ZVk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBhbmQgc2V0cyB0aGUgeCBibGVuZCB3ZWlnaHQuXG4gICAqL1xuICBnZXQgYmxlbmRWYWx1ZVgoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2JsZW5kVmFsdWVYO1xuICB9XG5cbiAgc2V0IGJsZW5kVmFsdWVYKHZhbHVlKSB7XG4gICAgdGhpcy5fYmxlbmRWYWx1ZVggPSB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGFuZCBzZXRzIHRoZSB5IGJsZW5kIHdlaWdodC5cbiAgICovXG4gIGdldCBibGVuZFZhbHVlWSgpIHtcbiAgICByZXR1cm4gdGhpcy5fYmxlbmRWYWx1ZVk7XG4gIH1cblxuICBzZXQgYmxlbmRWYWx1ZVkodmFsdWUpIHtcbiAgICB0aGlzLl9ibGVuZFZhbHVlWSA9IHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgd2hldGhlciBvciBub3QgdGhlIHggYmxlbmQgdmFsdWUgaXMgY3VycmVudGx5IGJlaW5nIGFuaW1hdGVkLlxuICAgKi9cbiAgZ2V0IGJsZW5kVmFsdWVYUGVuZGluZygpIHtcbiAgICByZXR1cm4gdGhpcy5fcHJvbWlzZXMuYmxlbmRWYWx1ZVggJiYgdGhpcy5fcHJvbWlzZXMuYmxlbmRWYWx1ZVgucGVuZGluZztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHdoZXRoZXIgb3Igbm90IHRoZSB5IGJsZW5kIHZhbHVlIGlzIGN1cnJlbnRseSBiZWluZyBhbmltYXRlZC5cbiAgICovXG4gIGdldCBibGVuZFZhbHVlWVBlbmRpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Byb21pc2VzLmJsZW5kVmFsdWVZICYmIHRoaXMuX3Byb21pc2VzLmJsZW5kVmFsdWVZLnBlbmRpbmc7XG4gIH1cblxuICB1cGRhdGVJbnRlcm5hbFdlaWdodChmYWN0b3IpIHtcbiAgICBzdXBlci51cGRhdGVJbnRlcm5hbFdlaWdodChmYWN0b3IpO1xuXG4gICAgaWYgKHRoaXMuX3BoYXNlTGVhZFN0YXRlKSB7XG4gICAgICBbLi4udGhpcy5fc3RhdGVzLnZhbHVlcygpXS5mb3JFYWNoKChzdGF0ZSwgaW5kZXgpID0+IHtcbiAgICAgICAgaWYgKHN0YXRlLndlaWdodCAhPT0gMCAmJiB0aGlzLl90aHJlc2hvbGRzW2luZGV4XS5waGFzZU1hdGNoKSB7XG4gICAgICAgICAgc3RhdGUubm9ybWFsaXplZFRpbWUgPSB0aGlzLl9waGFzZUxlYWRTdGF0ZS5ub3JtYWxpemVkVGltZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIGJsZW5kIHdlaWdodHMgYmFzZWQgb24gdGhlaXIgY29ycmVzcG9uZGluZyB0aHJlc2hvbGQgdmFsdWVzXG4gICAqIGFuZCB0aGUgY3VycmVudCBbeCx5XSBibGVuZFZhbHVlLiBBZGRpdGlvbmFsbHksIHNldHMgYSBsZWFkIHBoYXNlIHN0YXRlIGlmIHRoZVxuICAgKiBjb25kaXRpb25zIGZvciBwaGFzZS1tYXRjaGluZyBoYXZlIGJlZW4gc2F0aXNmaWVkLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3VwZGF0ZUJsZW5kV2VpZ2h0cygpIHtcbiAgICBpZiAoIXRoaXMuX3ZlcnRpY2VzIHx8IHRoaXMuX3ZlcnRpY2VzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuXG4gICAgaWYgKHRoaXMuX3ZlcnRpY2VzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgWy4uLnRoaXMuX3N0YXRlcy52YWx1ZXMoKV1bMF0ud2VpZ2h0ID0gMTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBJbml0aWFsbHkgc2V0IGFsbCBzdWItc3RhdGUgd2VpZ2h0cyB0byB6ZXJvXG4gICAgdGhpcy5fc3RhdGVzLmZvckVhY2goc3RhdGUgPT4ge1xuICAgICAgc3RhdGUuc2V0V2VpZ2h0KDApO1xuICAgIH0pO1xuICAgIHRoaXMuX3BoYXNlTGVhZFN0YXRlID0gbnVsbDtcblxuICAgIGNvbnN0IHAgPSBbdGhpcy5fYmxlbmRWYWx1ZVgsIHRoaXMuX2JsZW5kVmFsdWVZXTtcblxuICAgIGlmICh0aGlzLl92ZXJ0aWNlcy5sZW5ndGggPT09IDIpIHtcbiAgICAgIHRoaXMuX3NldEluZmx1ZW5jZUNsb3Nlc3RQb2ludE9uTGluZShwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgdHJpYW5nbGUgPSB0aGlzLl90cmlhbmdsZXMuZmluZCh0cmlhbmdsZSA9PiB7XG4gICAgICAgIHJldHVybiBNYXRoVXRpbHMuaXNQb2ludEluVHJpYW5nbGUoXG4gICAgICAgICAgdGhpcy5fdmVydGljZXNbdHJpYW5nbGVbMF1dLFxuICAgICAgICAgIHRoaXMuX3ZlcnRpY2VzW3RyaWFuZ2xlWzFdXSxcbiAgICAgICAgICB0aGlzLl92ZXJ0aWNlc1t0cmlhbmdsZVsyXV0sXG4gICAgICAgICAgcFxuICAgICAgICApO1xuICAgICAgfSk7XG5cbiAgICAgIGlmICh0cmlhbmdsZSkge1xuICAgICAgICB0aGlzLl9zZXRJbmZsdWVuY2VUcmlhbmdsZSh0cmlhbmdsZSwgcCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9zZXRJbmZsdWVuY2VDbG9zZXN0UG9pbnRJblRyaWFuZ2xlcyhwKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2V0cyBibGVuZCB3ZWlnaHRzIGZvciBzdGF0ZXMgY29ycmVzcG9uZGluZyB0byBhXG4gICAqIHRyaWFuZ2xlIG9mIHRocmVzaG9sZHMgYW5kIGEgZ2l2ZW4gW3gseV0gYmxlbmRWYWx1ZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkuPEFycmF5LjxudW1iZXI+Pn0gdHJpYW5nbGUgLSBTZXQgb2YgdHJpYW5nbHVhdGVkIGluZGljZXNcbiAgICogdGhhdCBjb3JyZXNwb25kIHRvIGJsZW5kIHRocmVzaG9sZHMuXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IHAgLSBHaXZlbiBbeCx5XSBibGVuZFZhbHVlLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3NldEluZmx1ZW5jZVRyaWFuZ2xlKHRyaWFuZ2xlLCBwKSB7XG4gICAgY29uc3QgYXJlYUEgPSBNYXRoVXRpbHMudHJpYW5nbGVBcmVhKFxuICAgICAgdGhpcy5fdmVydGljZXNbdHJpYW5nbGVbMV1dLFxuICAgICAgdGhpcy5fdmVydGljZXNbdHJpYW5nbGVbMl1dLFxuICAgICAgcFxuICAgICk7XG5cbiAgICBjb25zdCBhcmVhQiA9IE1hdGhVdGlscy50cmlhbmdsZUFyZWEoXG4gICAgICB0aGlzLl92ZXJ0aWNlc1t0cmlhbmdsZVswXV0sXG4gICAgICB0aGlzLl92ZXJ0aWNlc1t0cmlhbmdsZVsyXV0sXG4gICAgICBwXG4gICAgKTtcblxuICAgIGNvbnN0IGFyZWFDID0gTWF0aFV0aWxzLnRyaWFuZ2xlQXJlYShcbiAgICAgIHRoaXMuX3ZlcnRpY2VzW3RyaWFuZ2xlWzBdXSxcbiAgICAgIHRoaXMuX3ZlcnRpY2VzW3RyaWFuZ2xlWzFdXSxcbiAgICAgIHBcbiAgICApO1xuXG4gICAgY29uc3QgdG90YWxBcmVhID0gYXJlYUEgKyBhcmVhQiArIGFyZWFDO1xuXG4gICAgY29uc3Qgd2VpZ2h0QSA9IGFyZWFBIC8gdG90YWxBcmVhO1xuICAgIGNvbnN0IHdlaWdodEIgPSBhcmVhQiAvIHRvdGFsQXJlYTtcbiAgICBjb25zdCB3ZWlnaHRDID0gYXJlYUMgLyB0b3RhbEFyZWE7XG5cbiAgICBjb25zdCB0aHJlc2hvbGRBID0gdGhpcy5fdGhyZXNob2xkc1t0cmlhbmdsZVswXV07XG4gICAgY29uc3QgdGhyZXNob2xkQiA9IHRoaXMuX3RocmVzaG9sZHNbdHJpYW5nbGVbMV1dO1xuICAgIGNvbnN0IHRocmVzaG9sZEMgPSB0aGlzLl90aHJlc2hvbGRzW3RyaWFuZ2xlWzJdXTtcblxuICAgIGNvbnN0IHN0YXRlQSA9IHRoaXMuX3N0YXRlcy5nZXQodGhyZXNob2xkQS5uYW1lKTtcbiAgICBjb25zdCBzdGF0ZUIgPSB0aGlzLl9zdGF0ZXMuZ2V0KHRocmVzaG9sZEIubmFtZSk7XG4gICAgY29uc3Qgc3RhdGVDID0gdGhpcy5fc3RhdGVzLmdldCh0aHJlc2hvbGRDLm5hbWUpO1xuXG4gICAgc3RhdGVBLnNldFdlaWdodCh3ZWlnaHRBKTtcbiAgICBzdGF0ZUIuc2V0V2VpZ2h0KHdlaWdodEIpO1xuICAgIHN0YXRlQy5zZXRXZWlnaHQod2VpZ2h0Qyk7XG5cbiAgICB0aGlzLl9zZXRQaGFzZUxlYWRTdGF0ZShcbiAgICAgIFtzdGF0ZUEsIHN0YXRlQiwgc3RhdGVDXSxcbiAgICAgIFt0aHJlc2hvbGRBLnBoYXNlTWF0Y2gsIHRocmVzaG9sZEIucGhhc2VNYXRjaCwgdGhyZXNob2xkQy5waGFzZU1hdGNoXVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB0aGUgY2xvc2VzdCBwb2ludCB3aXRoaW4gYSB0cmlhbmdsZSBvZlxuICAgKiB0aHJlc2hvbGRzIGJhc2VkIG9uIHRoZSBjdXJyZW50IFt4LHldIGJsZW5kVmFsdWVzIGFuZFxuICAgKiB0aGVuIHNldHMgYmxlbmQgd2VpZ2h0cyBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgc3RhdGVzLlxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBwIC0gR2l2ZW4gW3gseV0gYmxlbmRWYWx1ZS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9zZXRJbmZsdWVuY2VDbG9zZXN0UG9pbnRJblRyaWFuZ2xlcyhwKSB7XG4gICAgbGV0IGdsb2JhbENsb3Nlc3RQb2ludCA9IG51bGw7XG4gICAgbGV0IGdsb2JhbE1pbkRpc3QgPSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7XG4gICAgbGV0IGNsb3Nlc3RUcmlhbmdsZSA9IC0xO1xuXG4gICAgdGhpcy5fdHJpYW5nbGVzLmZvckVhY2goKHRyaWFuZ2xlLCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgcG9pbnRBID0gTWF0aFV0aWxzLmNsb3Nlc3RQb2ludE9uTGluZShcbiAgICAgICAgdGhpcy5fdmVydGljZXNbdHJpYW5nbGVbMF1dLFxuICAgICAgICB0aGlzLl92ZXJ0aWNlc1t0cmlhbmdsZVsxXV0sXG4gICAgICAgIHBcbiAgICAgICk7XG4gICAgICBjb25zdCBwb2ludEIgPSBNYXRoVXRpbHMuY2xvc2VzdFBvaW50T25MaW5lKFxuICAgICAgICB0aGlzLl92ZXJ0aWNlc1t0cmlhbmdsZVsxXV0sXG4gICAgICAgIHRoaXMuX3ZlcnRpY2VzW3RyaWFuZ2xlWzJdXSxcbiAgICAgICAgcFxuICAgICAgKTtcbiAgICAgIGNvbnN0IHBvaW50QyA9IE1hdGhVdGlscy5jbG9zZXN0UG9pbnRPbkxpbmUoXG4gICAgICAgIHRoaXMuX3ZlcnRpY2VzW3RyaWFuZ2xlWzJdXSxcbiAgICAgICAgdGhpcy5fdmVydGljZXNbdHJpYW5nbGVbMF1dLFxuICAgICAgICBwXG4gICAgICApO1xuXG4gICAgICBjb25zdCBkaXN0QSA9IE1hdGhVdGlscy5kaXN0YW5jZVNxdWFyZWQocG9pbnRBLCBwKTtcbiAgICAgIGNvbnN0IGRpc3RCID0gTWF0aFV0aWxzLmRpc3RhbmNlU3F1YXJlZChwb2ludEIsIHApO1xuICAgICAgY29uc3QgZGlzdEMgPSBNYXRoVXRpbHMuZGlzdGFuY2VTcXVhcmVkKHBvaW50QywgcCk7XG5cbiAgICAgIGxldCBsb2NhbENsb3Nlc3RQb2ludCA9IHBvaW50QztcbiAgICAgIGxldCBsb2NhbE1pbkRpc3QgPSBkaXN0QztcblxuICAgICAgaWYgKGRpc3RBIDwgbG9jYWxNaW5EaXN0KSB7XG4gICAgICAgIGxvY2FsQ2xvc2VzdFBvaW50ID0gcG9pbnRBO1xuICAgICAgICBsb2NhbE1pbkRpc3QgPSBkaXN0QTtcbiAgICAgIH1cbiAgICAgIGlmIChkaXN0QiA8IGxvY2FsTWluRGlzdCkge1xuICAgICAgICBsb2NhbENsb3Nlc3RQb2ludCA9IHBvaW50QjtcbiAgICAgICAgbG9jYWxNaW5EaXN0ID0gZGlzdEI7XG4gICAgICB9XG5cbiAgICAgIGlmIChsb2NhbE1pbkRpc3QgPCBnbG9iYWxNaW5EaXN0KSB7XG4gICAgICAgIGdsb2JhbE1pbkRpc3QgPSBsb2NhbE1pbkRpc3Q7XG4gICAgICAgIGdsb2JhbENsb3Nlc3RQb2ludCA9IFsuLi5sb2NhbENsb3Nlc3RQb2ludF07XG4gICAgICAgIGNsb3Nlc3RUcmlhbmdsZSA9IGluZGV4O1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5fc2V0SW5mbHVlbmNlVHJpYW5nbGUoXG4gICAgICB0aGlzLl90cmlhbmdsZXNbY2xvc2VzdFRyaWFuZ2xlXSxcbiAgICAgIGdsb2JhbENsb3Nlc3RQb2ludFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB0aGUgY2xvc2VzdCBwb2ludCBvbiB0aGUgbGluZSBmb3JtZWQgYmV0d2VlbiB0aGVcbiAgICogdHdvIGJsZW5kIHRocmVzaG9sZHMgYmFzZWQgb24gdGhlIGN1cnJlbnQgW3gseV0gYmxlbmRWYWx1ZXMgYW5kXG4gICAqIHRoZW4gc2V0cyBibGVuZCB3ZWlnaHRzIGZvciB0aGUgY29ycmVzcG9uZGluZyBzdGF0ZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IHAgLSBHaXZlbiBbeCx5XSBibGVuZFZhbHVlLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3NldEluZmx1ZW5jZUNsb3Nlc3RQb2ludE9uTGluZShwKSB7XG4gICAgY29uc3QgY2xvc2VzdFBvaW50ID0gTWF0aFV0aWxzLmNsb3Nlc3RQb2ludE9uTGluZShcbiAgICAgIHRoaXMuX3ZlcnRpY2VzW1swXV0sXG4gICAgICB0aGlzLl92ZXJ0aWNlc1tbMV1dLFxuICAgICAgcFxuICAgICk7XG5cbiAgICBjb25zdCBkaXN0QSA9IE1hdGhVdGlscy5kaXN0YW5jZVNxdWFyZWQodGhpcy5fdmVydGljZXNbMF0sIGNsb3Nlc3RQb2ludCk7XG4gICAgY29uc3QgZGlzdEIgPSBNYXRoVXRpbHMuZGlzdGFuY2VTcXVhcmVkKHRoaXMuX3ZlcnRpY2VzWzFdLCBjbG9zZXN0UG9pbnQpO1xuXG4gICAgY29uc3Qgd2VpZ2h0QSA9IGRpc3RCIC8gKGRpc3RBICsgZGlzdEIpO1xuICAgIGNvbnN0IHdlaWdodEIgPSBkaXN0QSAvIChkaXN0QSArIGRpc3RCKTtcblxuICAgIGNvbnN0IHRocmVzaG9sZEEgPSB0aGlzLl90aHJlc2hvbGRzWzBdO1xuICAgIGNvbnN0IHRocmVzaG9sZEIgPSB0aGlzLl90aHJlc2hvbGRzWzFdO1xuXG4gICAgY29uc3Qgc3RhdGVBID0gdGhpcy5fc3RhdGVzLmdldCh0aHJlc2hvbGRBLm5hbWUpO1xuICAgIGNvbnN0IHN0YXRlQiA9IHRoaXMuX3N0YXRlcy5nZXQodGhyZXNob2xkQi5uYW1lKTtcblxuICAgIHN0YXRlQS5zZXRXZWlnaHQod2VpZ2h0QSk7XG4gICAgc3RhdGVCLnNldFdlaWdodCh3ZWlnaHRCKTtcblxuICAgIHRoaXMuX3NldFBoYXNlTGVhZFN0YXRlKFxuICAgICAgW3N0YXRlQSwgc3RhdGVCXSxcbiAgICAgIFt0aHJlc2hvbGRBLnBoYXNlTWF0Y2gsIHRocmVzaG9sZEIucGhhc2VNYXRjaF1cbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgYSBsZWFkIHBoYXNlIHN0YXRlIGlmIHRoZSBjb25kaXRpb25zXG4gICAqIGZvciBwaGFzZS1tYXRjaGluZyBhcmUgc2F0aXNmaWVkLlxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5LjxBYnN0cmFjdEJsZW5kU3RhdGU+fSBzdGF0ZXMgLSBTdGF0ZXMgdG9cbiAgICogY2hlY2sgcGhhc2UtbWF0Y2hpbmcgY3JpdGVyaWEuXG4gICAqIEBwYXJhbSB7QXJyYXkuPGJvb2xlYW4+fSBwaGFzZU1hdGNoZWQgLSBMaXN0IG9mIHBoYXNlLW1hdGNoIGJvb2xlYW5zLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3NldFBoYXNlTGVhZFN0YXRlKHN0YXRlcywgcGhhc2VNYXRjaGVkKSB7XG4gICAgbGV0IG1heCA9IDA7XG4gICAgc3RhdGVzLmZvckVhY2goKHN0YXRlLCBpbmRleCkgPT4ge1xuICAgICAgaWYgKHBoYXNlTWF0Y2hlZFtpbmRleF0gJiYgc3RhdGUud2VpZ2h0ID4gbWF4KSB7XG4gICAgICAgIHRoaXMuX3BoYXNlTGVhZFN0YXRlID0gc3RhdGU7XG4gICAgICAgIG1heCA9IHN0YXRlLndlaWdodDtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBCbGVuZDJkU3RhdGU7XG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxuaW1wb3J0IEFic3RyYWN0QmxlbmRTdGF0ZSBmcm9tICcuL3N0YXRlL0Fic3RyYWN0QmxlbmRTdGF0ZSc7XG5pbXBvcnQgQW5pbWF0aW9uUGxheWVySW50ZXJmYWNlIGZyb20gJy4vQW5pbWF0aW9uUGxheWVySW50ZXJmYWNlJztcbmltcG9ydCBBbmltYXRpb25VdGlscyBmcm9tICcuL0FuaW1hdGlvblV0aWxzJztcbmltcG9ydCBNYXRoVXRpbHMgZnJvbSAnLi4vTWF0aFV0aWxzJztcbmltcG9ydCBEZWZlcnJlZCBmcm9tICcuLi9EZWZlcnJlZCc7XG5pbXBvcnQgU3RhdGVDb250YWluZXJJbnRlcmZhY2UgZnJvbSAnLi9zdGF0ZS9TdGF0ZUNvbnRhaW5lckludGVyZmFjZSc7XG5cbi8qKlxuICogRW51bSBmb3IgdHlwZXMgb2Yge0BsaW5rIEFuaW1hdGlvbkxheWVyfSBibGVuZGluZy5cbiAqXG4gKiBAcmVhZG9ubHlcbiAqIEBlbnVtIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBjb25zdCBMYXllckJsZW5kTW9kZXMgPSB7T3ZlcnJpZGU6ICdPdmVycmlkZScsIEFkZGl0aXZlOiAnQWRkaXRpdmUnfTtcblxuLyoqXG4gKiBUaGUgZGVmYXVsdCBibGVuZGluZyBtb2RlIHtAbGluayBBbmltYXRpb25MYXllcn0uXG4gKlxuICogQHJlYWRvbmx5XG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5leHBvcnQgY29uc3QgRGVmYXVsdExheWVyQmxlbmRNb2RlID0gJ092ZXJyaWRlJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYSBnaXZlbiBibGVuZE1vZGUgaXMgcHJlc2VudCBpbiB0aGUgdmFsdWVzIG9mIHtAbGluayBMYXllckJsZW5kTW9kZXN9LlxuICogSWYgaXQgaXMsIHJldHVybiB0aGUgb3JpZ2luYWwgdmFsdWUsIG90aGVyd2lzZSByZXR1cm4ge0BsaW5rIERlZmF1bHRMYXllckJsZW5kTW9kZX0uXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGJsZW5kTW9kZSAtIFRoZSBuYW1lIG9mIHRoZSB0eXBlIG9mIGJsZW5kaW5nLlxuICpcbiAqIEByZXR1cm5zIHsoc3RyaW5nfERlZmF1bHRMYXllckJsZW5kTW9kZSl9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUJsZW5kTW9kZShibGVuZE1vZGUpIHtcbiAgaWYgKEFycmF5LmZyb20oT2JqZWN0LnZhbHVlcyhMYXllckJsZW5kTW9kZXMpKS5pbmNsdWRlcyhibGVuZE1vZGUpKSB7XG4gICAgcmV0dXJuIGJsZW5kTW9kZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gRGVmYXVsdExheWVyQmxlbmRNb2RlO1xuICB9XG59XG5cbi8qKlxuICogQ2xhc3MgZm9yIG1hbmFnaW5nIGEgc2V0IG9mIGFuaW1hdGlvbnMgd2hlcmUgb25seSBvbmUgc3RhdGUgY2FuIGJlIGFjdGl2ZSBhdFxuICogYW55IGdpdmVuIHRpbWUuXG4gKlxuICogQGltcGxlbWVudHMgQW5pbWF0aW9uUGxheWVySW50ZXJmYWNlXG4gKiBAaW1wbGVtZW50cyBTdGF0ZUNvbnRhaW5lckludGVyZmFjZVxuICovXG5jbGFzcyBBbmltYXRpb25MYXllciBleHRlbmRzIEFuaW1hdGlvblBsYXllckludGVyZmFjZS5NaXhpbihcbiAgU3RhdGVDb250YWluZXJJbnRlcmZhY2UuTWl4aW4oKVxuKSB7XG4gIC8qKlxuICAgKiBAY29uc3RydWN0b3JcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3Q9fSBvcHRpb25zIC0gIE9wdGlvbnMgZm9yIHRoZSBhbmltYXRpb24gbGF5ZXIuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRpb25zLm5hbWUgLSBOYW1lIG9mIHRoZSBsYXllci4gTmFtZXMgbXVzdCBiZSB1bmlxdWUgdG8gdGhlXG4gICAqIGFuaW1hdGlvbiBmZWF0dXJlIHRoYXQgY29udGFpbnMgdGhlIGxheWVyLlxuICAgKiBAcGFyYW0ge0xheWVyQmxlbmRNb2Rlc30gW29wdGlvbnMuYmxlbmRNb2RlPURlZmF1bHRMYXllckJsZW5kTW9kZV0gLVxuICAgKiBUeXBlIG9mIGJsZW5kaW5nIHRvIHVzZSBmb3IgYWxsIHN0YXRlcyBjb250cm9sbGVkIGJ5IHRoZSBsYXllci5cbiAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLndlaWdodD0xXSAtIFRoZSBhbW91bnQgb2YgaW5mbHVlbmNlIHRoZSBsYXllcidzIGN1cnJlbnRcbiAgICogYW5pbWF0aW9uIGhhcyBvdmVyIHRoZSByZXN1bHQgZm9yIHRoZSBob3N0LlxuICAgKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMudHJhbnNpdGlvblRpbWU9MF0gLSBUaGUgZGVmYXVsdCBhbW91bnQgb2YgdGltZSB0byB1c2Ugd2hlblxuICAgKiBwbGF5aW5nIGFuZCByZXN1bWluZyBhbmltYXRpb25zLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb3B0aW9ucy5lYXNpbmdGbiAtIFRoZSBkZWZhdWx0IGVhc2luZyBmdW5jdGlvbiB0byB1c2Ugd2hlblxuICAgKiB0cmFuc2l0aW9uaW5nIGJldHdlZW4gYW5pbWF0aW9ucyBhbmQgc2V0dGluZyBsYXllciB3ZWlnaHQuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihvcHRpb25zID0ge30pIHtcbiAgICBzdXBlcihvcHRpb25zKTtcblxuICAgIHRoaXMubmFtZSA9IG9wdGlvbnMubmFtZSA9PT0gdW5kZWZpbmVkID8gJ0FuaW1hdGlvbkxheWVyJyA6IG9wdGlvbnMubmFtZTtcbiAgICB0aGlzLl9ibGVuZE1vZGUgPSBBcnJheS5mcm9tKE9iamVjdC52YWx1ZXMoTGF5ZXJCbGVuZE1vZGVzKSkuaW5jbHVkZXMoXG4gICAgICBvcHRpb25zLmJsZW5kTW9kZVxuICAgIClcbiAgICAgID8gb3B0aW9ucy5ibGVuZE1vZGVcbiAgICAgIDogRGVmYXVsdExheWVyQmxlbmRNb2RlO1xuICAgIHRoaXMuX3Byb21pc2VzID0ge1xuICAgICAgd2VpZ2h0OiBEZWZlcnJlZC5yZXNvbHZlKCksXG4gICAgfTtcbiAgICB0aGlzLl93ZWlnaHRQYXVzZWQgPSBmYWxzZTtcblxuICAgIHRoaXMud2VpZ2h0ID0gdHlwZW9mIG9wdGlvbnMud2VpZ2h0ID09PSAnbnVtYmVyJyA/IG9wdGlvbnMud2VpZ2h0IDogMTtcbiAgICB0aGlzLl9pbnRlcm5hbFdlaWdodCA9IHRoaXMuX3dlaWdodDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSB0eXBlIG9mIGJsZW5kaW5nIHVzZWQgZm9yIHN0YXRlcyBjb250cm9sbGVkIGJ5IHRoZSBsYXllci5cbiAgICpcbiAgICogQHJlYWRvbmx5XG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICBnZXQgYmxlbmRNb2RlKCkge1xuICAgIHJldHVybiB0aGlzLl9ibGVuZE1vZGU7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBhbmQgc2V0cyB0aGUgYW1vdW50IG9mIGluZmx1ZW5jZSB0aGUgbGF5ZXIncyBjdXJyZW50IGFuaW1hdGlvbiBoYXMgb3ZlclxuICAgKiB0aGUgcmVzdWx0IGZvciB0aGUgaG9zdC5cbiAgICpcbiAgICogQHR5cGUge251bWJlcn1cbiAgICovXG4gIHNldCB3ZWlnaHQod2VpZ2h0KSB7XG4gICAgdGhpcy5fd2VpZ2h0ID0gTWF0aFV0aWxzLmNsYW1wKHdlaWdodCwgMCwgMSk7XG4gIH1cblxuICBnZXQgd2VpZ2h0KCkge1xuICAgIHJldHVybiB0aGlzLl93ZWlnaHQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB3aGV0aGVyIG9yIG5vdCB0aGUgbGF5ZXIncyB3ZWlnaHQgdmFsdWUgaXMgY3VycmVudGx5IGJlaW5nIGFuaW1hdGVkLlxuICAgKlxuICAgKiBAcmVhZG9ubHlcbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqL1xuICBnZXQgd2VpZ2h0UGVuZGluZygpIHtcbiAgICByZXR1cm4gdGhpcy5fcHJvbWlzZXMud2VpZ2h0ICYmIHRoaXMuX3Byb21pc2VzLndlaWdodC5wZW5kaW5nO1xuICB9XG5cbiAgLyoqXG4gICAqIFBhdXNlIHRoZSBjdXJyZW50IGFuaW1hdGlvbiBzdGF0ZSBhbmQgYW55IGludGVycG9sYXRpb24gaGFwcGVuaW5nIG9uIHRoZSBsYXllcidzXG4gICAqIHdlaWdodCBwcm9wZXJ0eS5cbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBwYXVzZSgpIHtcbiAgICB0aGlzLl9wYXVzZWQgPSB0cnVlO1xuICAgIHRoaXMuX3dlaWdodFBhdXNlZCA9IHRydWU7XG5cbiAgICByZXR1cm4gdGhpcy5wYXVzZUFuaW1hdGlvbigpIHx8IHRoaXMud2VpZ2h0UGVuZGluZztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXN1bWUgdGhlIGN1cnJlbnQgYW5pbWF0aW9uIHN0YXRlIGFuZCBhbnkgaW50ZXJwb2xhdGlvbiBoYXBwZW5pbmcgb24gdGhlIGxheWVyJ3NcbiAgICogd2VpZ2h0IHByb3BlcnR5LlxuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIHJlc3VtZSgpIHtcbiAgICB0aGlzLl9wYXVzZWQgPSBmYWxzZTtcbiAgICB0aGlzLl93ZWlnaHRQYXVzZWQgPSBmYWxzZTtcblxuICAgIGNvbnN0IGlzV2VpZ2h0QWN0aXZlID0gdGhpcy53ZWlnaHRQZW5kaW5nO1xuXG4gICAgaWYgKHRoaXMuX2N1cnJlbnRTdGF0ZSkge1xuICAgICAgcmV0dXJuIHRoaXMucmVzdW1lQW5pbWF0aW9uKCkgfHwgaXNXZWlnaHRBY3RpdmU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBpc1dlaWdodEFjdGl2ZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgdXNlciBkZWZpbmVkIHdlaWdodCBvdmVyIHRpbWUuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB3ZWlnaHQgLSBUaGUgdGFyZ2V0IHdlaWdodCB2YWx1ZS5cbiAgICogQHBhcmFtIHtudW1iZXJ9IFtzZWNvbmRzPTBdIC0gVGhlIGFtb3VudCBvZiB0aW1lIGl0IHdpbGwgdGFrZSB0byByZWFjaCB0aGVcbiAgICogdGFyZ2V0IHdlaWdodC5cbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IGVhc2luZ0ZuIC0gVGhlIGVhc2luZyBmdW5jdGlvbiB0byB1c2UgZm9yIGludGVycG9sYXRpb24uXG4gICAqXG4gICAqIEByZXR1cm5zIHtEZWZlcnJlZH1cbiAgICovXG4gIHNldFdlaWdodCh3ZWlnaHQsIHNlY29uZHMgPSAwLCBlYXNpbmdGbikge1xuICAgIGlmICh0aGlzLndlaWdodFBlbmRpbmcpIHtcbiAgICAgIHRoaXMuX3Byb21pc2VzLndlaWdodC5jYW5jZWwoKTtcbiAgICB9XG5cbiAgICB3ZWlnaHQgPSBNYXRoVXRpbHMuY2xhbXAod2VpZ2h0KTtcbiAgICB0aGlzLl9wcm9taXNlcy53ZWlnaHQgPSBBbmltYXRpb25VdGlscy5pbnRlcnBvbGF0ZVByb3BlcnR5KFxuICAgICAgdGhpcyxcbiAgICAgICd3ZWlnaHQnLFxuICAgICAgd2VpZ2h0LFxuICAgICAge1xuICAgICAgICBzZWNvbmRzLFxuICAgICAgICBlYXNpbmdGbjogZWFzaW5nRm4gIT09IHVuZGVmaW5lZCA/IGVhc2luZ0ZuIDogdGhpcy5fZWFzaW5nRm4sXG4gICAgICB9XG4gICAgKTtcblxuICAgIHJldHVybiB0aGlzLl9wcm9taXNlcy53ZWlnaHQ7XG4gIH1cblxuICAvKipcbiAgICogUGF1c2UgYW55IGludGVycG9sYXRpb24gaGFwcGVuaW5nIG9uIHRoZSBsYXllcidzIHdlaWdodCBwcm9wZXJ0eS5cbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBwYXVzZVdlaWdodCgpIHtcbiAgICB0aGlzLl93ZWlnaHRQYXVzZWQgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXMud2VpZ2h0UGVuZGluZztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXN1bWUgYW55IGludGVycG9sYXRpb24gaGFwcGVuaW5nIG9uIHRoZSBsYXllcidzIHdlaWdodCBwcm9wZXJ0eS5cbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICByZXN1bWVXZWlnaHQoKSB7XG4gICAgdGhpcy5fd2VpZ2h0UGF1c2VkID0gZmFsc2U7XG5cbiAgICByZXR1cm4gdGhpcy53ZWlnaHRQZW5kaW5nO1xuICB9XG5cbiAgLyoqXG4gICAqIE11bHRpcGxpZXMgdGhlIHVzZXIgd2VpZ2h0IGJ5IGEgZmFjdG9yIHRvIGRldGVybWluZSB0aGUgaW50ZXJuYWwgd2VpZ2h0LlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gZmFjdG9yIC0gMC0xIG11bHRpcGxpZXIgdG8gYXBwbHkgdG8gdGhlIHVzZXIgd2VpZ2h0LlxuICAgKi9cbiAgdXBkYXRlSW50ZXJuYWxXZWlnaHQoZmFjdG9yKSB7XG4gICAgdGhpcy5faW50ZXJuYWxXZWlnaHQgPSB0aGlzLl93ZWlnaHQgKiBmYWN0b3I7XG5cbiAgICBpZiAodGhpcy5fY3VycmVudFN0YXRlKSB7XG4gICAgICB0aGlzLl9jdXJyZW50U3RhdGUudXBkYXRlSW50ZXJuYWxXZWlnaHQodGhpcy5faW50ZXJuYWxXZWlnaHQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBuYW1lcyBvZiBibGVuZCBzdGF0ZXMgaW4gYW4gYW5pbWF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYW5pbWF0aW9uTmFtZSAtIE5hbWUgb2YgdGhlIGFuaW1hdGlvbi5cbiAgICpcbiAgICogQHJldHVybnMge0FycmF5LjxzdHJpbmc+fSAtIE5hbWVzIG9mIGJsZW5kIHN0YXRlcy5cbiAgICovXG4gIGdldEFuaW1hdGlvbkJsZW5kTmFtZXMoYW5pbWF0aW9uTmFtZSkge1xuICAgIGNvbnN0IHN0YXRlID0gdGhpcy5nZXRTdGF0ZShhbmltYXRpb25OYW1lKTtcblxuICAgIGlmIChzdGF0ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBDYW5ub3QgZ2V0IGJsZW5kIG5hbWVzIG9mIGFuaW1hdGlvbiAke2FuaW1hdGlvbk5hbWV9IG9uIGxheWVyICR7dGhpcy5uYW1lfS4gTm8gYW5pbWF0aW9uIGV4aXN0cyB3aXRoIHRoaXMgbmFtZS5gXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChzdGF0ZSBpbnN0YW5jZW9mIEFic3RyYWN0QmxlbmRTdGF0ZSkge1xuICAgICAgcmV0dXJuIHN0YXRlLmdldFN0YXRlTmFtZXMoKTtcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgQ2Fubm90IGdldCBibGVuZCBuYW1lcyBvZiBhbmltYXRpb24gJHthbmltYXRpb25OYW1lfSBvbiBsYXllciAke3RoaXMubmFtZX0uIEFuaW1hdGlvbiBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgQWJzdHJhY3RCbGVuZFN0YXRlLmBcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSB0aGUgd2VpZ2h0IGZvciBhIGJsZW5kIHN0YXRlIG9mIGFuIGFuaW1hdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFuaW1hdGlvbk5hbWUgLSBOYW1lIG9mIHRoZSBhbmltYXRpb24gY29udGFpbmluZyB0aGUgYmxlbmQgc3RhdGVcbiAgICogdG8gdXBkYXRlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYmxlbmROYW1lIC0gTmFtZSBvZiB0aGUgYmxlbmQgc3RhdGUgdG8gdXBkYXRlLlxuICAgKiBAcGFyYW0ge251bWJlcn0gd2VpZ2h0IC0gV2VpZ2h0IHZhbHVlIHRvIHNldCBvbiB0aGUgYW5pbWF0aW9uLiBUaGlzIG51bWJlciBzaG91ZGxkIGJlXG4gICAqIGluIHRoZSAwLTEgcmFuZ2UuXG4gICAqIEBwYXJhbSB7bnVtYmVyPX0gc2Vjb25kcyAtIE51bWJlciBvZiBzZWNvbmRzIGl0IHNob3VsZCB0YWtlIHRvIHJlYWNoIHRoZSBuZXcgd2VpZ2h0LlxuICAgKiBEZWZhdWx0IGlzIHplcm8gYW5kIHdpbGwgc2V0IGltbWVkaWF0ZWx5LlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gZWFzaW5nRm4gLSBFYXNpbmcgZnVuY3Rpb24gdG8gdXNlIHdoaWxlIGludGVycG9sYXRpbmcgdGhlIG5ld1xuICAgKiB3ZWlnaHQuIERlZmF1bHQgaXMgRWFzaW5nLkxpbmVhci5Jbk91dC5cbiAgICpcbiAgICogQHJldHVybnMge0RlZmVycmVkfSAtIFByb21pc2UgdGhhdCB3aWxsIHJlc29sdmUgb25jZSB0aGUgYW5pbWF0aW9uJ3Mgd2VpZ2h0IHJlYWNoZXNcbiAgICogdGhlIHRhcmdldCB2YWx1ZS5cbiAgICovXG4gIHNldEFuaW1hdGlvbkJsZW5kV2VpZ2h0KFxuICAgIGFuaW1hdGlvbk5hbWUsXG4gICAgYmxlbmROYW1lLFxuICAgIHdlaWdodCxcbiAgICBzZWNvbmRzID0gMCxcbiAgICBlYXNpbmdGblxuICApIHtcbiAgICBjb25zdCBzdGF0ZSA9IHRoaXMuZ2V0U3RhdGUoYW5pbWF0aW9uTmFtZSk7XG5cbiAgICBpZiAoc3RhdGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQ2Fubm90IHNldCBibGVuZCB3ZWlnaHQgb2YgYW5pbWF0aW9uICR7YW5pbWF0aW9uTmFtZX0gb24gbGF5ZXIgJHt0aGlzLm5hbWV9LiBObyBhbmltYXRpb24gZXhpc3RzIHdpdGggdGhpcyBuYW1lLmBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHN0YXRlIGluc3RhbmNlb2YgQWJzdHJhY3RCbGVuZFN0YXRlKSB7XG4gICAgICByZXR1cm4gc3RhdGUuc2V0QmxlbmRXZWlnaHQoYmxlbmROYW1lLCB3ZWlnaHQsIHNlY29uZHMsIGVhc2luZ0ZuKTtcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgQ2Fubm90IHNldCBibGVuZCB3ZWlnaHQgb2YgYW5pbWF0aW9uICR7YW5pbWF0aW9uTmFtZX0gb24gbGF5ZXIgJHt0aGlzLm5hbWV9LiBBbmltYXRpb24gaXMgbm90IGFuIGluc3RhbmNlIG9mIEFic3RyYWN0QmxlbmRTdGF0ZS5gXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSB3ZWlnaHQgZm9yIGEgYmxlbmQgc3RhdGUgb2YgYW4gYW5pbWF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYW5pbWF0aW9uTmFtZSAtIE5hbWUgb2YgdGhlIGFuaW1hdGlvbiBjb250YWluaW5nIHRoZSBibGVuZCBzdGF0ZVxuICAgKiB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBibGVuZE5hbWUgLSBOYW1lIG9mIHRoZSBibGVuZCBzdGF0ZSB0byByZXRyaWV2ZSB0aGUgd2VpZ2h0IG9mLlxuICAgKlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSAtIFdlaWdodCBvZiB0aGUgYmxlbmQgc3RhdGUuXG4gICAqL1xuICBnZXRBbmltYXRpb25CbGVuZFdlaWdodChhbmltYXRpb25OYW1lLCBibGVuZE5hbWUpIHtcbiAgICBjb25zdCBzdGF0ZSA9IHRoaXMuZ2V0U3RhdGUoYW5pbWF0aW9uTmFtZSk7XG5cbiAgICBpZiAoc3RhdGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQ2Fubm90IGdldCBibGVuZCB3ZWlnaHQgb2YgYW5pbWF0aW9uICR7YW5pbWF0aW9uTmFtZX0gb24gbGF5ZXIgJHt0aGlzLm5hbWV9LiBObyBhbmltYXRpb24gZXhpc3RzIHdpdGggdGhpcyBuYW1lLmBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHN0YXRlIGluc3RhbmNlb2YgQWJzdHJhY3RCbGVuZFN0YXRlKSB7XG4gICAgICByZXR1cm4gc3RhdGUuZ2V0QmxlbmRXZWlnaHQoYmxlbmROYW1lKTtcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgQ2Fubm90IGdldCBibGVuZCB3ZWlnaHQgb2YgYW5pbWF0aW9uICR7YW5pbWF0aW9uTmFtZX0gb24gbGF5ZXIgJHt0aGlzLm5hbWV9LiBBbmltYXRpb24gaXMgbm90IGFuIGluc3RhbmNlIG9mIEFic3RyYWN0QmxlbmRTdGF0ZS5gXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgYW55IHdlaWdodCBpbnRlcnBvbGF0b3JzIGFuZCB0aGUgY3VycmVudCBhbmltYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBkZWx0YVRpbWUgLSBUaW1lIGluIG1pbGxpc2Vjb25kcyBzaW5jZSB0aGUgbGFzdCB1cGRhdGUuXG4gICAqL1xuICB1cGRhdGUoZGVsdGFUaW1lKSB7XG4gICAgc3VwZXIudXBkYXRlKGRlbHRhVGltZSk7XG5cbiAgICBpZiAoIXRoaXMuX3BhdXNlZCAmJiAhdGhpcy5fd2VpZ2h0UGF1c2VkKSB7XG4gICAgICB0aGlzLl9wcm9taXNlcy53ZWlnaHQuZXhlY3V0ZShkZWx0YVRpbWUpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDYW5jZWwgYW55IHBlbmRpbmcgcHJvbWlzZXMgYW5kIGRpc2NhcmQgc3RhdGVzIGNvbnRyb2xsZWQgYnkgdGhlIGxheWVyLlxuICAgKi9cbiAgZGlzY2FyZCgpIHtcbiAgICBzdXBlci5kaXNjYXJkKCk7XG5cbiAgICB0aGlzLmRpc2NhcmRTdGF0ZXMoKTtcblxuICAgIHRoaXMuX3Byb21pc2VzLndlaWdodC5jYW5jZWwoKTtcbiAgICBkZWxldGUgdGhpcy5fcHJvbWlzZXM7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQW5pbWF0aW9uTGF5ZXI7XG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxuaW1wb3J0IERlZmVycmVkIGZyb20gJ2NvcmUvRGVmZXJyZWQnO1xuaW1wb3J0IEFic3RyYWN0U3RhdGUgZnJvbSAnLi9BYnN0cmFjdFN0YXRlJztcbmltcG9ydCB7dmFsaWRhdGVCbGVuZE1vZGV9IGZyb20gJy4uL0FuaW1hdGlvbkxheWVyJztcbmltcG9ydCBBbmltYXRpb25VdGlscyBmcm9tICcuLi9BbmltYXRpb25VdGlscyc7XG5cbi8qKlxuICogQ2xhc3MgZm9yIHBsYXlpbmcgYSBzaW5nbGUgYW5pbWF0aW9uIGNsaXAuXG4gKlxuICogQGV4dGVuZHMgQWJzdHJhY3RTdGF0ZVxuICogQGFsaWFzIGNvcmUvU2luZ2xlU3RhdGVcbiAqL1xuY2xhc3MgU2luZ2xlU3RhdGUgZXh0ZW5kcyBBYnN0cmFjdFN0YXRlIHtcbiAgLyoqXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdD19IG9wdGlvbnMgLSBPcHRpb25zIGZvciB0aGUgYW5pbWF0aW9uIHN0YXRlLlxuICAgKiBAcGFyYW0ge3N0cmluZz19IG9wdGlvbnMubmFtZSAtIE5hbWUgZm9yIHRoZSBhbmltYXRpb24gc3RhdGUuIE5hbWVzIG11c3QgYmVcbiAgICogdW5pcXVlIGZvciB0aGUgbGF5ZXIgdGhlIHN0YXRlIGlzIGFwcGxpZWQgdG8uXG4gICAqIEBwYXJhbSB7d2VpZ2h0fSBbb3B0aW9ucy53ZWlnaHQ9MF0gLSBUaGUgMC0xIGFtb3VudCBvZiBpbmZsdWVuY2UgdGhlIHN0YXRlIHdpbGwgaGF2ZS5cbiAgICogQHBhcmFtIHt0aW1lU2NhbGV9IFtvcHRpb25zLnRpbWVTY2FsZT0xXSAtIEZhY3RvciB0byBzY2FsZSB0aGUgcGxheWJhY2sgc3BlZWQgb2YgdGhlXG4gICAqIGFuaW1hdGlvbi5cbiAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLmxvb3BDb3VudD1JbmZpbml0eV0gLSBOdW1iZXIgb2YgdGltZXMgdGhlIGFuaW1hdGlvbiBzaG91bGRcbiAgICogcmVwZWF0IGJlZm9yZSBmaW5pc2hpbmcuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5ibGVuZE1vZGU9RGVmYXVsdExheWVyQmxlbmRNb2RlXSAtIFR5cGUgb2ZcbiAgICogYmxlbmRpbmcgdGhlIGFuaW1hdGlvbiBzaG91bGQgdXNlLlxuICAgKi9cbiAgY29uc3RydWN0b3Iob3B0aW9ucyA9IHt9KSB7XG4gICAgc3VwZXIob3B0aW9ucyk7XG5cbiAgICB0aGlzLl90aW1lU2NhbGUgPSBvcHRpb25zLnRpbWVTY2FsZSAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy50aW1lU2NhbGUgOiAxO1xuICAgIHRoaXMuX3Byb21pc2VzLnRpbWVTY2FsZSA9IERlZmVycmVkLnJlc29sdmUoKTtcbiAgICB0aGlzLl9sb29wQ291bnQgPVxuICAgICAgb3B0aW9ucy5sb29wQ291bnQgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMubG9vcENvdW50IDogSW5maW5pdHk7XG4gICAgdGhpcy5fYmxlbmRNb2RlID0gdmFsaWRhdGVCbGVuZE1vZGUob3B0aW9ucy5ibGVuZE1vZGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgYW5kIHNldHMgdGhlIG5vcm1hbGl6ZWQgcGxheWluZyB0aW1lIG9mIHRoZSBjdXJyZW50IGFuaW1hdGlvblxuICAgKlxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0IG5vcm1hbGl6ZWRUaW1lKCkge1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgc2V0IG5vcm1hbGl6ZWRUaW1lKHRpbWUpIHtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGFuZCBzZXRzIHRoZSBhIGZhY3RvciB0byBzY2FsZSBhbmltYXRpb24gcGxheWJhY2sgc3BlZWQgd2l0aC5cbiAgICpcbiAgICogQHR5cGUge251bWJlcn1cbiAgICovXG4gIGdldCB0aW1lU2NhbGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3RpbWVTY2FsZTtcbiAgfVxuXG4gIHNldCB0aW1lU2NhbGUodGltZVNjYWxlKSB7XG4gICAgdGhpcy5fdGltZVNjYWxlID0gdGltZVNjYWxlO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgd2hldGhlciBvciBub3QgdGhlIHRpbWVTY2FsZSBpcyBjdXJyZW50bHkgYmVpbmcgYW5pbWF0ZWQuXG4gICAqXG4gICAqIEByZWFkb25seVxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICovXG4gIGdldCB0aW1lU2NhbGVQZW5kaW5nKCkge1xuICAgIHJldHVybiB0aGlzLl9wcm9taXNlcy50aW1lU2NhbGUucGVuZGluZztcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSB0aW1lU2NhbGUgdmFsdWUgb3ZlciB0aW1lLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gd2VpZ2h0IC0gVGhlIHRhcmdldCB0aW1lU2NhbGUgdmFsdWUuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbc2Vjb25kcz0wXSAtIFRoZSBhbW91bnQgb2YgdGltZSBpdCB3aWxsIHRha2UgdG8gcmVhY2ggdGhlXG4gICAqIHRhcmdldCB0aW1lU2NhbGUuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBlYXNpbmdGbiAtIFRoZSBlYXNpbmcgZnVuY3Rpb24gdG8gdXNlIGZvciBpbnRlcnBvbGF0aW9uLlxuICAgKlxuICAgKiBAcmV0dXJucyB7RGVmZXJyZWR9XG4gICAqL1xuICBzZXRUaW1lU2NhbGUodGltZVNjYWxlLCBzZWNvbmRzID0gMCwgZWFzaW5nRm4pIHtcbiAgICB0aGlzLl9wcm9taXNlcy50aW1lU2NhbGUuY2FuY2VsKCk7XG5cbiAgICB0aGlzLl9wcm9taXNlcy50aW1lU2NhbGUgPSBBbmltYXRpb25VdGlscy5pbnRlcnBvbGF0ZVByb3BlcnR5KFxuICAgICAgdGhpcyxcbiAgICAgICd0aW1lU2NhbGUnLFxuICAgICAgdGltZVNjYWxlLFxuICAgICAge3NlY29uZHMsIGVhc2luZ0ZufVxuICAgICk7XG5cbiAgICByZXR1cm4gdGhpcy5fcHJvbWlzZXMudGltZVNjYWxlO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgYW5kIHNldHMgdGhlIG51bWJlciBvZiB0aW1lcyB0aGUgYW5pbWF0aW9uIHdpbGwgcmVwZWF0IGJlZm9yZSBmaW5pc2hpbmcuXG4gICAqXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqL1xuICBnZXQgbG9vcENvdW50KCkge1xuICAgIHJldHVybiB0aGlzLl9sb29wQ291bnQ7XG4gIH1cblxuICBzZXQgbG9vcENvdW50KGxvb3BDb3VudCkge1xuICAgIHRoaXMuX2xvb3BDb3VudCA9IGxvb3BDb3VudDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSB0eXBlIG9mIGJsZW5kaW5nIHVzZWQgZm9yIHRoZSBhbmltYXRpb24uXG4gICAqXG4gICAqIEByZWFkb25seVxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKi9cbiAgZ2V0IGJsZW5kTW9kZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fYmxlbmRNb2RlO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFNpbmdsZVN0YXRlO1xuIiwiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTBcbmltcG9ydCBBYnN0cmFjdFN0YXRlIGZyb20gJy4vQWJzdHJhY3RTdGF0ZSc7XG5pbXBvcnQgU3RhdGVDb250YWluZXJJbnRlcmZhY2UgZnJvbSAnLi9TdGF0ZUNvbnRhaW5lckludGVyZmFjZSc7XG5pbXBvcnQgQW5pbWF0aW9uUGxheWVySW50ZXJmYWNlIGZyb20gJy4uL0FuaW1hdGlvblBsYXllckludGVyZmFjZSc7XG5pbXBvcnQgVXRpbHMgZnJvbSAnLi4vLi4vVXRpbHMnO1xuXG4vKipcbiAqIENsYXNzIGZvciBwbGF5aW5nIHJhbmRvbSBhbmltYXRpb25zIGF0IHJhbmRvbSBpbnRlcnZhbHMgd2l0aGluIHRoaXMgc3RhdGUuXG4gKlxuICogQGV4dGVuZHMgQWJzdHJhY3RTdGF0ZVxuICogQGltcGxlbWVudHMgQW5pbWF0aW9uUGxheWVySW50ZXJmYWNlXG4gKiBAaW1wbGVtZW50cyBTdGF0ZUNvbnRhaW5lckludGVyZmFjZVxuICovXG5jbGFzcyBSYW5kb21BbmltYXRpb25TdGF0ZSBleHRlbmRzIEFuaW1hdGlvblBsYXllckludGVyZmFjZS5NaXhpbihTdGF0ZUNvbnRhaW5lckludGVyZmFjZS5NaXhpbihBYnN0cmFjdFN0YXRlKSkge1xuICAvKipcbiAgICogQGNvbnN0cnVjdG9yXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV0gLSBPcHRpb25zIGZvciB0aGUgY29udGFpbmVyIHN0YXRlLlxuICAgKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMucGxheUludGVydmFsPTNdIC0gVGhlIGJhc2UgYW5pbWF0aW9uIHBsYXliYWNrIGludGVydmFsLlxuICAgKiBAcGFyYW0ge0FycmF5LjxBYnN0cmFjdFN0YXRlPn0gW3N1YlN0YXRlcz1bXV0gLSBzdGF0ZXMgdG8gYmUgcmFuZG9tbHkgcGlja2VkIHRvIHBsYXlcbiAgICovXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMgPSB7fSwgc3ViU3RhdGVzID0gW10pIHtcbiAgICBzdXBlcihvcHRpb25zKTtcblxuICAgIHRoaXMuX3BsYXlJbnRlcnZhbCA9IG9wdGlvbnMucGxheUludGVydmFsID8gb3B0aW9ucy5wbGF5SW50ZXJ2YWwgOiAzO1xuXG4gICAgc3ViU3RhdGVzLmZvckVhY2goc3RhdGUgPT4ge1xuICAgICAgdGhpcy5hZGRTdGF0ZShzdGF0ZSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBhbmQgc2V0cyB0aGUgYmFzZSBhbmltYXRpb24gcGxheSBpbnRlcnZhbFxuICAgKlxuICAgKiBAdHlwZSB7ZmxvYXR9XG4gICAqL1xuICBnZXQgcGxheUludGVydmFsKCkge1xuICAgIHJldHVybiB0aGlzLl9wbGF5SW50ZXJ2YWw7XG4gIH1cblxuICBzZXQgcGxheUludGVydmFsKHBsYXlJbnRlcnZhbCkge1xuICAgIHRoaXMuX3BsYXlJbnRlcnZhbCA9IHBsYXlJbnRlcnZhbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldCB0aGUgaW50ZXJuYWwgdGltZXIgZm9yIGFuaW1hdGlvbiBwbGF5IGludGVydmFsXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfcmVzZXRUaW1lcigpIHtcbiAgICBjb25zdCBwbGF5VGltZXIgPSBVdGlscy5nZXRSYW5kb21GbG9hdCh0aGlzLl9wbGF5SW50ZXJ2YWwgLyA0LCB0aGlzLl9wbGF5SW50ZXJ2YWwgKiAyKTtcbiAgICBjb25zdCBvbkZpbmlzaCA9ICgpID0+IHtcbiAgICAgIHRoaXMucGxheVJhbmRvbUFuaW1hdGlvbih0aGlzLl9wbGF5Q2FsbGJhY2tzLm9uRXJyb3IpO1xuICAgIH1cbiAgICB0aGlzLl9wcm9taXNlcy50aW1lciA9IFV0aWxzLndhaXQocGxheVRpbWVyLCB7b25GaW5pc2h9KTtcbiAgfVxuXG4gIHVwZGF0ZUludGVybmFsV2VpZ2h0KGZhY3Rvcikge1xuICAgIHN1cGVyLnVwZGF0ZUludGVybmFsV2VpZ2h0KGZhY3Rvcik7XG5cbiAgICBpZiAodGhpcy5fY3VycmVudFN0YXRlKSB7XG4gICAgICB0aGlzLl9jdXJyZW50U3RhdGUudXBkYXRlSW50ZXJuYWxXZWlnaHQodGhpcy5faW50ZXJuYWxXZWlnaHQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBQaWNrIGEgcmFuZG9tIGFuaW1hdGlvbiBhbmQgdXRpbGl6ZSBBbmltYXRpb25QbGF5ZXJJbnRlcmZhY2UgdG8gcGxheSB0aGF0IGFuaW1hdGlvblxuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb25FcnJvciAtIEZ1bmN0aW9uIHRvIGV4ZWN1dGUgaWYgdGhlIHN0YXRlIGVuY291bnRlcnNcbiAgICogYW4gZXJyb3IgZHVyaW5nIHBsYXliYWNrLlxuICAgKi9cbiAgcGxheVJhbmRvbUFuaW1hdGlvbihvbkVycm9yKSB7XG4gICAgdGhpcy5fcmVzZXRUaW1lcigpO1xuXG4gICAgY29uc3Qgc3RhdGVzID0gdGhpcy5nZXRTdGF0ZU5hbWVzKCk7XG4gICAgaWYgKHRoaXMuX2N1cnJlbnRTdGF0ZSkge1xuICAgICAgc3RhdGVzLnNwbGljZShzdGF0ZXMuaW5kZXhPZih0aGlzLl9jdXJyZW50U3RhdGUubmFtZSksIDEpO1xuICAgIH1cbiAgICBjb25zdCByYW5kb21TdGF0ZSA9ICBzdGF0ZXNbVXRpbHMuZ2V0UmFuZG9tSW50KDAsIHN0YXRlcy5sZW5ndGgpXTtcblxuICAgIHRoaXMucGxheUFuaW1hdGlvbihyYW5kb21TdGF0ZSwgdGhpcy5fdHJhbnNpdGlvblRpbWUsIHRoaXMuX2Vhc2luZ0ZuLCB1bmRlZmluZWQsIG9uRXJyb3IsIHVuZGVmaW5lZCk7XG4gIH1cblxuICBwbGF5KG9uRmluaXNoLCBvbkVycm9yLCBvbkNhbmNlbCkge1xuICAgIHRoaXMucGxheVJhbmRvbUFuaW1hdGlvbihvbkVycm9yKTtcbiAgICByZXR1cm4gc3VwZXIucGxheShvbkZpbmlzaCwgb25FcnJvciwgb25DYW5jZWwpO1xuICB9XG5cbiAgcGF1c2UoKSB7XG4gICAgcmV0dXJuIHN1cGVyLnBhdXNlKCkgJiYgdGhpcy5wYXVzZUFuaW1hdGlvbigpO1xuICB9XG5cbiAgcmVzdW1lKG9uRmluaXNoLCBvbkVycm9yLCBvbkNhbmNlbCkge1xuICAgIGlmICh0aGlzLl9jdXJyZW50U3RhdGUpIHtcbiAgICAgIHRoaXMucmVzdW1lQW5pbWF0aW9uKHRoaXMuX2N1cnJlbnRTdGF0ZS5uYW1lLCB0aGlzLl90cmFuc2l0aW9uVGltZSwgdGhpcy5fZWFzaW5nRm4sIHVuZGVmaW5lZCwgb25FcnJvciwgdW5kZWZpbmVkKTtcbiAgICB9XG4gICAgcmV0dXJuIHN1cGVyLnJlc3VtZShvbkZpbmlzaCwgb25FcnJvciwgb25DYW5jZWwpO1xuICB9XG5cbiAgY2FuY2VsKCkge1xuICAgIHJldHVybiBzdXBlci5jYW5jZWwoKSAmJiB0aGlzLmNhbmNlbEFuaW1hdGlvbigpO1xuICB9XG5cbiAgc3RvcCgpIHtcbiAgICByZXR1cm4gc3VwZXIuc3RvcCgpICYmIHRoaXMuc3RvcEFuaW1hdGlvbigpO1xuICB9XG5cbiAgZGlzY2FyZCgpIHtcbiAgICBzdXBlci5kaXNjYXJkKCk7XG4gICAgdGhpcy5kaXNjYXJkU3RhdGVzKCk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgUmFuZG9tQW5pbWF0aW9uU3RhdGU7XG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cclxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVC0wXHJcbmltcG9ydCBBYnN0cmFjdEhvc3RGZWF0dXJlIGZyb20gJ2NvcmUvQWJzdHJhY3RIb3N0RmVhdHVyZSc7XHJcbmltcG9ydCBVdGlscyBmcm9tICdjb3JlL1V0aWxzJztcclxuaW1wb3J0IFF1ZXVlU3RhdGUgZnJvbSAnLi9zdGF0ZS9RdWV1ZVN0YXRlJztcclxuaW1wb3J0IEZyZWVCbGVuZFN0YXRlIGZyb20gJy4vc3RhdGUvRnJlZUJsZW5kU3RhdGUnO1xyXG5pbXBvcnQgQmxlbmQxZFN0YXRlIGZyb20gJy4vc3RhdGUvQmxlbmQxZFN0YXRlJztcclxuaW1wb3J0IEJsZW5kMmRTdGF0ZSBmcm9tICcuL3N0YXRlL0JsZW5kMmRTdGF0ZSc7XHJcbmltcG9ydCBTaW5nbGVTdGF0ZSBmcm9tICcuL3N0YXRlL1NpbmdsZVN0YXRlJztcclxuaW1wb3J0IFJhbmRvbUFuaW1hdGlvblN0YXRlIGZyb20gJy4vc3RhdGUvUmFuZG9tQW5pbWF0aW9uU3RhdGUnO1xyXG5pbXBvcnQgQW5pbWF0aW9uTGF5ZXIsIHtMYXllckJsZW5kTW9kZXN9IGZyb20gJy4vQW5pbWF0aW9uTGF5ZXInO1xyXG5pbXBvcnQgRGVmZXJyZWQgZnJvbSAnLi4vRGVmZXJyZWQnO1xyXG5cclxuLyoqXHJcbiAqIEVudW0gZm9yIGFuaW1hdGlvbiBzdGF0ZSBjbGFzc2VzLlxyXG4gKlxyXG4gKiBAcmVhZG9ubHlcclxuICogQGVudW0ge0NsYXNzfVxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IEFuaW1hdGlvblR5cGVzID0ge1xyXG4gIHNpbmdsZTogU2luZ2xlU3RhdGUsXHJcbiAgZnJlZUJsZW5kOiBGcmVlQmxlbmRTdGF0ZSxcclxuICBxdWV1ZTogUXVldWVTdGF0ZSxcclxuICByYW5kb21BbmltYXRpb246IFJhbmRvbUFuaW1hdGlvblN0YXRlLFxyXG4gIGJsZW5kMWQ6IEJsZW5kMWRTdGF0ZSxcclxuICBibGVuZDJkOiBCbGVuZDJkU3RhdGUsXHJcbn07XHJcblxyXG4vKipcclxuICogRmVhdHVyZSBmb3IgbWFuYWdpbmcgYW5pbWF0aW9ucyBvbiBhbiBvYmplY3QuXHJcbiAqXHJcbiAqIEBleHRlbmRzIEFic3RyYWN0SG9zdEZlYXR1cmVcclxuICogQGFsaWFzIGNvcmUvQW5pbWF0aW9uRmVhdHVyZVxyXG4gKlxyXG4gKiBAcHJvcGVydHkge09iamVjdH0gRVZFTlRTIC0gQnVpbHQtaW4gbWVzc2FnZXMgdGhhdCB0aGUgZmVhdHVyZSBlbWl0cy4gV2hlbiB0aGVcclxuICogZmVhdHVyZSBpcyBhZGRlZCB0byBhIHtAbGluayBjb3JlL0hvc3RPYmplY3R9LCBldmVudCBuYW1lcyB3aWxsIGJlIHByZWZpeGVkIGJ5IHRoZVxyXG4gKiBuYW1lIG9mIHRoZSBmZWF0dXJlIGNsYXNzICsgJy4nLlxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW0VWRU5UUy5hZGRMYXllcj1vbkFkZExheWVyRXZlbnRdIC0gTWVzc2FnZSB0aGF0IGlzIGVtaXR0ZWQgYWZ0ZXJcclxuICogW2FkZExheWVyXXtAbGluayBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjYWRkTGF5ZXJ9IGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBleGVjdXRlZC5cclxuICogQW4gb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgbmFtZSBvZiB0aGUgbGF5ZXIgdGhhdCB3YXMgYWRkZWQgYW5kIGl0cyBpbmRleCBpblxyXG4gKiB0aGUgbGF5ZXIgc3RhY2sgd2l0aCB0aGUgc2lnbmF0dXJlIHtuYW1lOiBzdHJpbmcsIGluZGV4OiBudW1iZXJ9IGlzIHN1cHBsaWVkXHJcbiAqIGFzIGFuIGFyZ3VtZW50IHRvIGxpc3RlbmVyIGZ1bmN0aW9ucy5cclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtFVkVOVFMucmVtb3ZlTGF5ZXI9b25SZW1vdmVMYXllckV2ZW50XSAtIE1lc3NhZ2UgdGhhdCBpc1xyXG4gKiBlbWl0dGVkIGFmdGVyIFtyZW1vdmVMYXllcl17QGxpbmsgY29yZS9BbmltYXRpb25GZWF0dXJlI3JlbW92ZUxheWVyfSBoYXMgYmVlblxyXG4gKiBzdWNjZXNzZnVsbHkgZXhlY3V0ZWQuIEFuIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIG5hbWUgb2YgdGhlIGxheWVyIHRoYXQgd2FzXHJcbiAqIHJlbW92ZWQgYW5kIGl0cyBpbmRleCBpbiB0aGUgbGF5ZXIgc3RhY2sgd2l0aCB0aGUgc2lnbmF0dXJlIHtuYW1lOiBzdHJpbmcsIGluZGV4OiBudW1iZXJ9XHJcbiAqIGlzIHN1cHBsaWVkIGFzIGFuIGFyZ3VtZW50IHRvIGxpc3RlbmVyIGZ1bmN0aW9ucy5cclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtFVkVOVFMucmVuYW1lTGF5ZXI9b25SZW5hbWVMYXllckV2ZW50XSAtIE1lc3NhZ2UgdGhhdCBpc1xyXG4gKiBlbWl0dGVkIGFmdGVyIFtyZW5hbWVMYXllcl17QGxpbmsgY29yZS9BbmltYXRpb25GZWF0dXJlI3JlbmFtZUxheWVyfSBoYXMgYmVlblxyXG4gKiBzdWNjZXNzZnVsbHkgZXhlY3V0ZWQuIEFuIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIG9yaWdpbmFsIG5hbWUgb2YgdGhlIGxheWVyXHJcbiAqIHRoYXQgd2FzIHJlbmFtZWQgYW5kIGl0cyB1cGRhdGVkIG5hbWUgd2l0aCB0aGUgc2lnbmF0dXJlIHtvbGROYW1lOiBzdHJpbmcsIG5ld05hbWU6IHN0cmluZ31cclxuICogaXMgc3VwcGxpZWQgYXMgYW4gYXJndW1lbnQgdG8gbGlzdGVuZXIgZnVuY3Rpb25zLlxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW0VWRU5UUy5hZGRBbmltYXRpb249b25BZGRBbmltYXRpb25FdmVudF0gLSBNZXNzYWdlIHRoYXQgaXNcclxuICogZW1pdHRlZCBhZnRlciBbYWRkQW5pbWF0aW9uXXtAbGluayBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjYWRkQW5pbWF0aW9ufSBoYXMgYmVlblxyXG4gKiBzdWNjZXNzZnVsbHkgZXhlY3V0ZWQuIEFuIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIG5hbWUgb2YgdGhlIGxheWVyIHRoYXQgdGhlXHJcbiAqIGFuaW1hdGlvbiB3YXMgYWRkZWQgdG8gYW5kIHRoZSBuYW1lIG9mIHRoZSBhbmltYXRpb24gdGhhdCB3YXMgYWRkZWQgd2l0aCB0aGVcclxuICogc2lnbmF0dXJlIHtsYXllck5hbWU6IHN0cmluZywgYW5pbWF0aW9uTmFtZTogc3RyaW5nfSBpcyBzdXBwbGllZCBhcyBhbiBhcmd1bWVudFxyXG4gKiB0byBsaXN0ZW5lciBmdW5jdGlvbnMuXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbRVZFTlRTLnJlbW92ZUFuaW1hdGlvbj1vblJlbW92ZWRBbmltYXRpb25FdmVudF0gLSBNZXNzYWdlXHJcbiAqIHRoYXQgaXMgZW1pdHRlZCBhZnRlciBbcmVtb3ZlQW5pbWF0aW9uXXtAbGluayBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjcmVtb3ZlQW5pbWF0aW9ufVxyXG4gKiBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgZXhlY3V0ZWQuIEFuIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIG5hbWUgb2YgdGhlIGxheWVyXHJcbiAqIHRoYXQgdGhlIGFuaW1hdGlvbiB3YXMgcmVtb3ZlZCBmcm9tIGFuZCB0aGUgbmFtZSBvZiB0aGUgYW5pbWF0aW9uIHRoYXQgd2FzIHJlbW92ZWRcclxuICogd2l0aCB0aGUgc2lnbmF0dXJlIHtsYXllck5hbWU6IHN0cmluZywgYW5pbWF0aW9uTmFtZTogc3RyaW5nfSBpcyBzdXBwbGllZCBhc1xyXG4gKiBhbiBhcmd1bWVudCB0byBsaXN0ZW5lciBmdW5jdGlvbnMuXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbRVZFTlRTLnJlbmFtZUFuaW1hdGlvbj1vblJlbmFtZUFuaW1hdGlvbkV2ZW50XSAtIE1lc3NhZ2VcclxuICogdGhhdCBpcyBlbWl0dGVkIGFmdGVyIFtyZW5hbWVBbmltYXRpb25de0BsaW5rIGNvcmUvQW5pbWF0aW9uRmVhdHVyZSNyZW5hbWVBbmltYXRpb259XHJcbiAqIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBleGVjdXRlZC4gQW4gb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgbmFtZSBvZiB0aGUgbGF5ZXJcclxuICogdGhhdCBjb250YWlucyB0aGUgYW5pbWF0aW9uIHRoYXQgd2FzIHJlbmFtZWQsIHRoZSBvcmlnaW5hbCBuYW1lIG9mIHRoZSBhbmltYXRpb25cclxuICogdGhhdCB3YXMgcmVuYW1lZCBhbmQgaXRzIHVwZGF0ZWQgbmFtZSB3aXRoIHRoZSBzaWduYXR1cmUge2xheWVyTmFtZTogc3RyaW5nLCBvbGROYW1lOiBzdHJpbmcsIG5ld05hbWU6IHN0cmluZ31cclxuICogaXMgc3VwcGxpZWQgYXMgYW4gYXJndW1lbnQgdG8gbGlzdGVuZXIgZnVuY3Rpb25zLlxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW0VWRU5UUy5wbGF5PW9uUGxheUV2ZW50XSAtIE1lc3NhZ2UgdGhhdCBpcyBlbWl0dGVkIGFmdGVyXHJcbiAqIGVhY2ggY2FsbCB0byBbcGxheV17QGxpbmsgY29yZS9BbmltYXRpb25GZWF0dXJlI3BsYXlBbmltYXRpb259LiBBbiBvYmplY3QgcmVwcmVzZW50aW5nXHJcbiAqIHRoZSBuYW1lIG9mIHRoZSBsYXllciBjb250YWlucyB0aGUgYW5pbWF0aW9uIHRoYXQgd2FzIHBsYXllZCBhbmQgdGhlIG5hbWUgb2ZcclxuICogdGhlIGFuaW1hdGlvbiB0aGF0IHdhcyBwbGF5ZWQgd2l0aCB0aGUgc2lnbmF0dXJlIHtsYXllck5hbWU6IHN0cmluZywgYW5pbWF0aW9uTmFtZTogc3RyaW5nfVxyXG4gKiBpcyBzdXBwbGllZCBhcyBhbiBhcmd1bWVudCB0byBsaXN0ZW5lciBmdW5jdGlvbnMuXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbRVZFTlRTLnBhdXNlPW9uUGF1c2VFdmVudF0gLSBNZXNzYWdlIHRoYXQgaXMgZW1pdHRlZCBhZnRlclxyXG4gKiBlYWNoIGNhbGwgdG8gW3BhdXNlXXtAbGluayBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjcGF1c2VBbmltYXRpb259LiBBbiBvYmplY3QgcmVwcmVzZW50aW5nXHJcbiAqIHRoZSBuYW1lIG9mIHRoZSBsYXllciBjb250YWlucyB0aGUgYW5pbWF0aW9uIHRoYXQgd2FzIHBhdXNlZCBhbmQgdGhlIG5hbWUgb2ZcclxuICogdGhlIGFuaW1hdGlvbiB0aGF0IHdhcyBwYXVzZWQgd2l0aCB0aGUgc2lnbmF0dXJlIHtsYXllck5hbWU6IHN0cmluZywgYW5pbWF0aW9uTmFtZTogc3RyaW5nfVxyXG4gKiBpcyBzdXBwbGllZCBhcyBhbiBhcmd1bWVudCB0byBsaXN0ZW5lciBmdW5jdGlvbnMuXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbRVZFTlRTLnJlc3VtZT1vblJlc3VtZUV2ZW50XSAtIE1lc3NhZ2UgdGhhdCBpcyBlbWl0dGVkIGFmdGVyXHJcbiAqIGVhY2ggY2FsbCB0byBbcmVzdW1lXXtAbGluayBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjcmVzdW1lQW5pbWF0aW9ufS4gQW4gb2JqZWN0IHJlcHJlc2VudGluZ1xyXG4gKiB0aGUgbmFtZSBvZiB0aGUgbGF5ZXIgY29udGFpbnMgdGhlIGFuaW1hdGlvbiB0aGF0IHdhcyByZXN1bWVkIGFuZCB0aGUgbmFtZSBvZlxyXG4gKiB0aGUgYW5pbWF0aW9uIHRoYXQgd2FzIHJlc3VtZWQgd2l0aCB0aGUgc2lnbmF0dXJlIHtsYXllck5hbWU6IHN0cmluZywgYW5pbWF0aW9uTmFtZTogc3RyaW5nfVxyXG4gKiBpcyBzdXBwbGllZCBhcyBhbiBhcmd1bWVudCB0byBsaXN0ZW5lciBmdW5jdGlvbnMuXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbRVZFTlRTLmludGVycnVwdD1vbkludGVycnVwdEV2ZW50XSAtIE1lc3NhZ2UgdGhhdCBpcyBlbWl0dGVkXHJcbiAqIGlmIHRoZXJlIGlzIGEgY3VycmVudCBzcGVlY2ggaW4gcHJvZ3Jlc3MgYW5kIFtwbGF5XXtAbGluayBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjcGxheUFuaW1hdGlvbn1cclxuICogb3IgW3Jlc3VtZV17QGxpbmsgY29yZS9BbmltYXRpb25GZWF0dXJlI3Jlc3VtZUFuaW1hdGlvbn0gYXJlIGV4ZWN1dGVkIGZvciBhIG5ldyBzcGVlY2guXHJcbiAqIEFuIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIG5hbWUgb2YgdGhlIGxheWVyIGNvbnRhaW5zIHRoZSBhbmltYXRpb24gdGhhdCB3YXNcclxuICogaW50ZXJydXB0ZWQgYW5kIHRoZSBuYW1lIG9mIHRoZSBhbmltYXRpb24gdGhhdCB3YXMgaW50ZXJydXB0ZWQgd2l0aCB0aGUgc2lnbmF0dXJlXHJcbiAqIHtsYXllck5hbWU6IHN0cmluZywgYW5pbWF0aW9uTmFtZTogc3RyaW5nfSBpcyBzdXBwbGllZCBhcyBhbiBhcmd1bWVudCB0byBsaXN0ZW5lclxyXG4gKiBmdW5jdGlvbnMuXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbRVZFTlRTLnN0b3A9b25TdG9wRXZlbnRdIC0gTWVzc2FnZSB0aGF0IGlzIGVtaXR0ZWQgYWZ0ZXJcclxuICogZWFjaCBjYWxsIHRvIFtzdG9wXXtAbGluayBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjc3RvcEFuaW1hdGlvbn0gYW5kIHdoZW4gYSBzcGVlY2ggcmVhY2hlc1xyXG4gKiB0aGUgZW5kIG9mIHBsYXliYWNrLiBBbiBvYmplY3QgcmVwcmVzZW50aW5nXHJcbiAqIHRoZSBuYW1lIG9mIHRoZSBsYXllciBjb250YWlucyB0aGUgYW5pbWF0aW9uIHRoYXQgd2FzIHN0b3BwZWQgYW5kIHRoZSBuYW1lIG9mXHJcbiAqIHRoZSBhbmltYXRpb24gdGhhdCB3YXMgc3RvcHBlZCB3aXRoIHRoZSBzaWduYXR1cmUge2xheWVyTmFtZTogc3RyaW5nLCBhbmltYXRpb25OYW1lOiBzdHJpbmd9XHJcbiAqIGlzIHN1cHBsaWVkIGFzIGFuIGFyZ3VtZW50IHRvIGxpc3RlbmVyIGZ1bmN0aW9ucy5cclxuICovXHJcbmNsYXNzIEFuaW1hdGlvbkZlYXR1cmUgZXh0ZW5kcyBBYnN0cmFjdEhvc3RGZWF0dXJlIHtcclxuICAvKipcclxuICAgKiBAY29uc3RydWN0b3JcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7Y29yZS9Ib3N0T2JqZWN0fSBob3N0IC0gSG9zdCBvYmplY3QgdGhhdCBvd25zIHRoZSBmZWF0dXJlLlxyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKGhvc3QpIHtcclxuICAgIHN1cGVyKGhvc3QpO1xyXG5cclxuICAgIHRoaXMuX2xheWVycyA9IFtdO1xyXG4gICAgdGhpcy5fbGF5ZXJNYXAgPSB7fTtcclxuICAgIHRoaXMuX3BhdXNlZCA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWFrZSBzdXJlIGEgc3VwcGxpZWQgbGF5ZXIgaW5kZXggaXMgd2l0aGluIHRoZSByYW5nZSBvZiBsYXllcnMuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XHJcbiAgICogQHBhcmFtIHtib29sZWFufSBbZXhpc3Rpbmc9dHJ1ZV0gLSBXaGV0aGVyIHRoZSBpbmRleCByZXByZXNlbnRzIGFuZCBleGlzdGluZ1xyXG4gICAqIGxheWVyIG9yIGEgbmV3IGxheWVyIHRvIGJlIGFkZGVkLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge251bWJlcj19XHJcbiAgICovXHJcbiAgX3ZhbGlkYXRlSW5kZXgoaW5kZXgsIGV4aXN0aW5nID0gdHJ1ZSkge1xyXG4gICAgLy8gSW5kZXggaXMgaW52YWxpZCBpZiB0aGVyZSBhcmUgbm8gbGF5ZXJzIGFuZCB3ZSdyZSBjaGVja2luZyBmb3IgYW4gZXhpc3RpbmcgbGF5ZXIgaW5kZXhcclxuICAgIGlmICh0aGlzLl9sYXllcnMubGVuZ3RoID09PSAwICYmIGV4aXN0aW5nKSB7XHJcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgbGFzdEluZGV4ID0gZXhpc3RpbmcgPyB0aGlzLl9sYXllcnMubGVuZ3RoIC0gMSA6IHRoaXMuX2xheWVycy5sZW5ndGg7XHJcblxyXG4gICAgLy8gQ291bnQgZnJvbSB0aGUgZW5kIG9mIHRoZSBhcnJheSBmb3IgbmVnYXRpdmUgaW5kaWNlc1xyXG4gICAgaWYgKGluZGV4IDwgMCkge1xyXG4gICAgICBpbmRleCA9IGxhc3RJbmRleCArIGluZGV4ICsgMTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID4gbGFzdEluZGV4KSB7XHJcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gaW5kZXg7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZS1ldmFsdWF0ZSBpbnRlcm5hbCB3ZWlnaHQgdmFsdWVzIG9mIGxheWVycyBzdGFydGluZyBmcm9tIHRoZSB0b3Agb2YgdGhlXHJcbiAgICogc3RhY2suIE92ZXJyaWRlIGxheWVycycgd2VpZ2h0cyBhZmZlY3QgdGhlIHZhbHVlcyBvZiBhbGwgbGF5ZXJzIGxvd2VyIGluIHRoZVxyXG4gICAqIHN0YWNrLlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBfdXBkYXRlSW50ZXJuYWxXZWlnaHRzKCkge1xyXG4gICAgY29uc3QgbnVtTGF5ZXJzID0gdGhpcy5fbGF5ZXJzLmxlbmd0aDtcclxuICAgIGxldCB3ZWlnaHRNdWx0aXBsaWVyID0gMTtcclxuXHJcbiAgICAvLyBVcGRhdGUgaW50ZXJuYWwgd2VpZ2h0IHZhbHVlcyBvbiBsYXllcnMgaW4gcmV2ZXJzZSBvcmRlclxyXG4gICAgZm9yIChsZXQgaSA9IG51bUxheWVycyAtIDE7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgIGNvbnN0IGxheWVyID0gdGhpcy5fbGF5ZXJzW2ldO1xyXG4gICAgICBsYXllci51cGRhdGVJbnRlcm5hbFdlaWdodCh3ZWlnaHRNdWx0aXBsaWVyKTtcclxuXHJcbiAgICAgIC8vIElmIHRoZSBsYXllciBpcyBvdmVycmlkZSwgdXBkYXRlIHRoZSBtdWx0aXBsaWVyIHdpdGggdGhlIHJlbWFpbmRlciBvZiB0aGUgZnVsbCB3ZWlnaHRcclxuICAgICAgaWYgKGxheWVyLmJsZW5kTW9kZSA9PT0gTGF5ZXJCbGVuZE1vZGVzLk92ZXJyaWRlICYmIGxheWVyLmN1cnJlbnRTdGF0ZSkge1xyXG4gICAgICAgIHdlaWdodE11bHRpcGxpZXIgKj0gMSAtIGxheWVyLmN1cnJlbnRTdGF0ZS5pbnRlcm5hbFdlaWdodDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIGEgbmV3IGluc3RhbmNlIG9mIGEgU2luZ2xlU3RhdGUuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBPcHRpb25zIHRvIHBhc3MgdG8gdGhlIFNpbmdsZVN0YXRlIGNvbnN0cnVjdG9yLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nPX0gb3B0aW9ucy5uYW1lIC0gTmFtZSBmb3IgdGhlIGFuaW1hdGlvbiBzdGF0ZS4gTmFtZXMgbXVzdCBiZVxyXG4gICAqIHVuaXF1ZSBmb3IgdGhlIGxheWVyIHRoZSBzdGF0ZSBpcyBhcHBsaWVkIHRvLlxyXG4gICAqIEBwYXJhbSB7d2VpZ2h0fSBbb3B0aW9ucy53ZWlnaHQ9MF0gLSBUaGUgMC0xIGFtb3VudCBvZiBpbmZsdWVuY2UgdGhlIHN0YXRlIHdpbGwgaGF2ZS5cclxuICAgKiBAcGFyYW0ge3RpbWVTY2FsZX0gW29wdGlvbnMudGltZVNjYWxlPTFdIC0gRmFjdG9yIHRvIHNjYWxlIHRoZSBwbGF5YmFjayBzcGVlZCBvZiB0aGVcclxuICAgKiBhbmltYXRpb24uXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLmxvb3BDb3VudD1JbmZpbml0eV0gLSBOdW1iZXIgb2YgdGltZXMgdGhlIGFuaW1hdGlvbiBzaG91bGRcclxuICAgKiByZXBlYXQgYmVmb3JlIGZpbmlzaGluZy5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuYmxlbmRNb2RlPUxheWVyQmxlbmRNb2Rlc1tEZWZhdWx0TGF5ZXJCbGVuZE1vZGVdXSAtIFR5cGUgb2ZcclxuICAgKiBibGVuZGluZyB0aGUgYW5pbWF0aW9uIHNob3VsZCB1c2UuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7Y29yZS9TaW5nbGVTdGF0ZX1cclxuICAgKi9cclxuICBfY3JlYXRlU2luZ2xlU3RhdGUob3B0aW9ucykge1xyXG4gICAgcmV0dXJuIG5ldyBTaW5nbGVTdGF0ZShvcHRpb25zKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiBhIG5ldyBpbnN0YW5jZSBvZiBhIEZyZWVCbGVuZFN0YXRlLlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gT3B0aW9ucyB0byBwYXNzIHRvIHRoZSBGcmVlQmxlbmRTdGF0ZSBjb25zdHJ1Y3Rvci5cclxuICAgKiBAcGFyYW0ge3N0cmluZz19IG9wdGlvbnMubmFtZSAtIE5hbWUgZm9yIHRoZSBhbmltYXRpb24gc3RhdGUuIE5hbWVzIG11c3QgYmVcclxuICAgKiB1bmlxdWUgZm9yIHRoZSBsYXllciB0aGUgc3RhdGUgaXMgYXBwbGllZCB0by5cclxuICAgKiBAcGFyYW0ge3dlaWdodH0gW29wdGlvbnMud2VpZ2h0PTBdIC0gVGhlIDAtMSBhbW91bnQgb2YgaW5mbHVlbmNlIHRoZSBzdGF0ZSB3aWxsIGhhdmUuXHJcbiAgICogQHBhcmFtIHt0aW1lU2NhbGV9IFtvcHRpb25zLnRpbWVTY2FsZT0xXSAtIEZhY3RvciB0byBzY2FsZSB0aGUgcGxheWJhY2sgc3BlZWQgb2YgdGhlXHJcbiAgICogYW5pbWF0aW9uLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5sb29wQ291bnQ9SW5maW5pdHldIC0gTnVtYmVyIG9mIHRpbWVzIHRoZSBhbmltYXRpb24gc2hvdWxkXHJcbiAgICogcmVwZWF0IGJlZm9yZSBmaW5pc2hpbmcuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmJsZW5kTW9kZT1MYXllckJsZW5kTW9kZXNbRGVmYXVsdExheWVyQmxlbmRNb2RlXV0gLSBUeXBlIG9mXHJcbiAgICogYmxlbmRpbmcgdGhlIGFuaW1hdGlvbiBzaG91bGQgdXNlLlxyXG4gICAqIEBwYXJhbSB7QXJyYXkuPE9iamVjdD59IFtvcHRpb25zLmJsZW5kU3RhdGVPcHRpb25zXSAtIEFycmF5IG9mIG9wdGlvbnMgdXNlZCB0byBjcmVhdGUgdGhlXHJcbiAgICogYmxlbmQgc3RhdGVzIGZvciB0aGlzIGNvbnRhaW5lci5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtGcmVlQmxlbmRTdGF0ZX1cclxuICAgKi9cclxuICBfY3JlYXRlRnJlZUJsZW5kU3RhdGUob3B0aW9ucykge1xyXG4gICAgY29uc3Qge2JsZW5kU3RhdGVPcHRpb25zID0gW119ID0gb3B0aW9ucztcclxuXHJcbiAgICBjb25zdCBibGVuZFN0YXRlcyA9IFtdO1xyXG4gICAgYmxlbmRTdGF0ZU9wdGlvbnMuZm9yRWFjaChibGVuZE9wdGlvbnMgPT4ge1xyXG4gICAgICBibGVuZFN0YXRlcy5wdXNoKFxyXG4gICAgICAgIHRoaXMuX2NyZWF0ZVNpbmdsZVN0YXRlKHsuLi5ibGVuZE9wdGlvbnMsIGJsZW5kTW9kZTogb3B0aW9ucy5ibGVuZE1vZGV9KVxyXG4gICAgICApO1xyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIG5ldyBGcmVlQmxlbmRTdGF0ZShvcHRpb25zLCBibGVuZFN0YXRlcyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gYSBuZXcgaW5zdGFuY2Ugb2YgYSBRdWV1ZVN0YXRlLlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gT3B0aW9ucyB0byBwYXNzIHRvIHRoZSBRdWV1ZVN0YXRlIGNvbnN0cnVjdG9yLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nPX0gb3B0aW9ucy5uYW1lIC0gTmFtZSBmb3IgdGhlIGFuaW1hdGlvbiBzdGF0ZS4gTmFtZXMgbXVzdCBiZVxyXG4gICAqIHVuaXF1ZSBmb3IgdGhlIGxheWVyIHRoZSBzdGF0ZSBpcyBhcHBsaWVkIHRvLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy53ZWlnaHQ9MF0gLSBUaGUgMC0xIGFtb3VudCBvZiBpbmZsdWVuY2UgdGhlIHN0YXRlIHdpbGwgaGF2ZS5cclxuICAgKiBAcGFyYW0ge251bWJlcj19IG9wdGlvbnMudHJhbnNpdGlvblRpbWUgLSBUaGUgYW1vdW50IG9mIHRpbWUgaXQgdGFrZXMgdG8gdHJhbnNpdGlvblxyXG4gICAqIGJldHdlZW4gcXVldWVkIHN0YXRlcy5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuYmxlbmRNb2RlPUxheWVyQmxlbmRNb2Rlc1tEZWZhdWx0TGF5ZXJCbGVuZE1vZGVdXSAtIFR5cGUgb2ZcclxuICAgKiBibGVuZGluZyB0aGUgYW5pbWF0aW9uIHNob3VsZCB1c2UuXHJcbiAgICogQHBhcmFtIHtBcnJheS48T2JqZWN0Pn0gW29wdGlvbnMucXVldWVPcHRpb25zXSAtIEFycmF5IG9mIG9wdGlvbnMgdXNlZCB0byBjcmVhdGUgdGhlXHJcbiAgICogcXVldWUgc3RhdGVzIGZvciB0aGlzIGNvbnRhaW5lci5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtRdWV1ZVN0YXRlfVxyXG4gICAqL1xyXG4gIF9jcmVhdGVRdWV1ZVN0YXRlKG9wdGlvbnMpIHtcclxuICAgIGNvbnN0IHtxdWV1ZU9wdGlvbnMgPSBbXX0gPSBvcHRpb25zO1xyXG5cclxuICAgIGNvbnN0IHF1ZXVlU3RhdGVzID0gcXVldWVPcHRpb25zLm1hcChxdWV1ZU9wdGlvbiA9PlxyXG4gICAgICB0aGlzLl9jcmVhdGVTaW5nbGVTdGF0ZSh7XHJcbiAgICAgICAgdHJhbnNpdGlvblRpbWU6IG9wdGlvbnMudHJhbnNpdGlvblRpbWUsXHJcbiAgICAgICAgLi4ucXVldWVPcHRpb24sXHJcbiAgICAgICAgYmxlbmRNb2RlOiBvcHRpb25zLmJsZW5kTW9kZSxcclxuICAgICAgfSlcclxuICAgICk7XHJcblxyXG4gICAgcmV0dXJuIG5ldyBRdWV1ZVN0YXRlKG9wdGlvbnMsIHF1ZXVlU3RhdGVzKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiBhIG5ldyBpbnN0YW5jZSBvZiBhIEJsZW5kMWRTdGF0ZS5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gcGFzcyB0byB0aGUgQmxlbmQxZFN0YXRlIGNvbnN0cnVjdG9yLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nPX0gb3B0aW9ucy5uYW1lIC0gTmFtZSBmb3IgdGhlIGFuaW1hdGlvbiBzdGF0ZS4gTmFtZXMgbXVzdCBiZVxyXG4gICAqIHVuaXF1ZSBmb3IgdGhlIGxheWVyIHRoZSBzdGF0ZSBpcyBhcHBsaWVkIHRvLlxyXG4gICAqIEBwYXJhbSB7d2VpZ2h0fSBbb3B0aW9ucy53ZWlnaHQ9MF0gLSBUaGUgMC0xIGFtb3VudCBvZiBpbmZsdWVuY2UgdGhlIHN0YXRlIHdpbGwgaGF2ZS5cclxuICAgKiBAcGFyYW0ge3RpbWVTY2FsZX0gW29wdGlvbnMudGltZVNjYWxlPTFdIC0gRmFjdG9yIHRvIHNjYWxlIHRoZSBwbGF5YmFjayBzcGVlZCBvZiB0aGVcclxuICAgKiBhbmltYXRpb24uXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLmxvb3BDb3VudD1JbmZpbml0eV0gLSBOdW1iZXIgb2YgdGltZXMgdGhlIGFuaW1hdGlvbiBzaG91bGRcclxuICAgKiByZXBlYXQgYmVmb3JlIGZpbmlzaGluZy5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuYmxlbmRNb2RlPUxheWVyQmxlbmRNb2Rlc1tEZWZhdWx0TGF5ZXJCbGVuZE1vZGVdXSAtIFR5cGUgb2ZcclxuICAgKiBibGVuZGluZyB0aGUgYW5pbWF0aW9uIHNob3VsZCB1c2UuXHJcbiAgICogQHBhcmFtIHtBcnJheS48T2JqZWN0Pn0gW29wdGlvbnMuYmxlbmRTdGF0ZU9wdGlvbnNdIC0gQXJyYXkgb2Ygb3B0aW9ucyB1c2VkIHRvIGNyZWF0ZSB0aGVcclxuICAgKiBibGVuZCBzdGF0ZXMgZm9yIHRoaXMgY29udGFpbmVyLlxyXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IFtvcHRpb25zLmJsZW5kVGhyZXNob2xkc10gLSBBcnJheSBvZiBudW1iZXJzIHVzZWQgdG8gc2V0IHRoZVxyXG4gICAqIHRocmVzaG9sZHMgZm9yIGVhY2ggYmxlbmQgc3RhdGUgaW4gdGhpcyBjb250YWluZXIuXHJcbiAgICogQHBhcmFtIHtBcnJheS48Ym9vbGVhbj59IFtvcHRpb25zLmJsZW5kTWF0Y2hQaGFzZXM9W11dIC0gT3B0aW9uYWwgYXJyYXkgb2YgYm9vbGVhbnMgdXNlZCB0b1xyXG4gICAqIHNldCB3aGV0aGVyIG9yIG5vdCBlYWNoIGJsZW5kIHN0YXRlIGluIHRoaXMgY29udGFpbmVyIHdpbGwgbWF0Y2ggcGhhc2VzLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0JsZW5kMWRTdGF0ZX1cclxuICAgKi9cclxuICBfY3JlYXRlQmxlbmQxZFN0YXRlKG9wdGlvbnMpIHtcclxuICAgIGNvbnN0IHtibGVuZFN0YXRlT3B0aW9ucyA9IFtdfSA9IG9wdGlvbnM7XHJcbiAgICBjb25zdCB7YmxlbmRUaHJlc2hvbGRzID0gW119ID0gb3B0aW9ucztcclxuICAgIGNvbnN0IHtibGVuZE1hdGNoUGhhc2VzID0gW119ID0gb3B0aW9ucztcclxuXHJcbiAgICBjb25zdCBibGVuZFN0YXRlcyA9IFtdO1xyXG4gICAgYmxlbmRTdGF0ZU9wdGlvbnMuZm9yRWFjaChibGVuZE9wdGlvbnMgPT4ge1xyXG4gICAgICBibGVuZFN0YXRlcy5wdXNoKFxyXG4gICAgICAgIHRoaXMuX2NyZWF0ZVNpbmdsZVN0YXRlKHsuLi5ibGVuZE9wdGlvbnMsIGJsZW5kTW9kZTogb3B0aW9ucy5ibGVuZE1vZGV9KVxyXG4gICAgICApO1xyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIG5ldyBCbGVuZDFkU3RhdGUoXHJcbiAgICAgIG9wdGlvbnMsXHJcbiAgICAgIGJsZW5kU3RhdGVzLFxyXG4gICAgICBibGVuZFRocmVzaG9sZHMsXHJcbiAgICAgIGJsZW5kTWF0Y2hQaGFzZXNcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gYSBuZXcgaW5zdGFuY2Ugb2YgYSBCbGVuZDJkU3RhdGUuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBPcHRpb25zIHRvIHBhc3MgdG8gdGhlIEJsZW5kMWRTdGF0ZSBjb25zdHJ1Y3Rvci5cclxuICAgKiBAcGFyYW0ge3N0cmluZz19IG9wdGlvbnMubmFtZSAtIE5hbWUgZm9yIHRoZSBhbmltYXRpb24gc3RhdGUuIE5hbWVzIG11c3QgYmVcclxuICAgKiB1bmlxdWUgZm9yIHRoZSBsYXllciB0aGUgc3RhdGUgaXMgYXBwbGllZCB0by5cclxuICAgKiBAcGFyYW0ge3dlaWdodH0gW29wdGlvbnMud2VpZ2h0PTBdIC0gVGhlIDAtMSBhbW91bnQgb2YgaW5mbHVlbmNlIHRoZSBzdGF0ZSB3aWxsIGhhdmUuXHJcbiAgICogQHBhcmFtIHt0aW1lU2NhbGV9IFtvcHRpb25zLnRpbWVTY2FsZT0xXSAtIEZhY3RvciB0byBzY2FsZSB0aGUgcGxheWJhY2sgc3BlZWQgb2YgdGhlXHJcbiAgICogYW5pbWF0aW9uLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5sb29wQ291bnQ9SW5maW5pdHldIC0gTnVtYmVyIG9mIHRpbWVzIHRoZSBhbmltYXRpb24gc2hvdWxkXHJcbiAgICogcmVwZWF0IGJlZm9yZSBmaW5pc2hpbmcuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmJsZW5kTW9kZT1MYXllckJsZW5kTW9kZXNbRGVmYXVsdExheWVyQmxlbmRNb2RlXV0gLSBUeXBlIG9mXHJcbiAgICogYmxlbmRpbmcgdGhlIGFuaW1hdGlvbiBzaG91bGQgdXNlLlxyXG4gICAqIEBwYXJhbSB7QXJyYXkuPE9iamVjdD59IFtvcHRpb25zLmJsZW5kU3RhdGVPcHRpb25zXSAtIEFycmF5IG9mIG9wdGlvbnMgdXNlZCB0byBjcmVhdGUgdGhlXHJcbiAgICogYmxlbmQgc3RhdGVzIGZvciB0aGlzIGNvbnRhaW5lci5cclxuICAgKiBAcGFyYW0ge0FycmF5LjxBcnJheS48bnVtYmVyPj59IFtvcHRpb25zLmJsZW5kVGhyZXNob2xkc10gLSBBcnJheSBvZiBBcnJheSBvZiBudW1iZXJzIHVzZWQgdG8gc2V0IHRoZVxyXG4gICAqIHRocmVzaG9sZHMgZm9yIGVhY2ggYmxlbmQgc3RhdGUgaW4gdGhpcyBjb250YWluZXIuXHJcbiAgICogQHBhcmFtIHtBcnJheS48Ym9vbGVhbj59IFtvcHRpb25zLmJsZW5kTWF0Y2hQaGFzZXM9W11dIC0gT3B0aW9uYWwgYXJyYXkgb2YgYm9vbGVhbnMgdXNlZCB0b1xyXG4gICAqIHNldCB3aGV0aGVyIG9yIG5vdCBlYWNoIGJsZW5kIHN0YXRlIGluIHRoaXMgY29udGFpbmVyIHdpbGwgbWF0Y2ggcGhhc2VzLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0JsZW5kMWRTdGF0ZX1cclxuICAgKi9cclxuICBfY3JlYXRlQmxlbmQyZFN0YXRlKG9wdGlvbnMpIHtcclxuICAgIGNvbnN0IHtibGVuZFN0YXRlT3B0aW9ucyA9IFtdfSA9IG9wdGlvbnM7XHJcbiAgICBjb25zdCB7YmxlbmRUaHJlc2hvbGRzID0gW119ID0gb3B0aW9ucztcclxuICAgIGNvbnN0IHtibGVuZE1hdGNoUGhhc2VzID0gW119ID0gb3B0aW9ucztcclxuXHJcbiAgICBjb25zdCBibGVuZFN0YXRlcyA9IFtdO1xyXG4gICAgYmxlbmRTdGF0ZU9wdGlvbnMuZm9yRWFjaChibGVuZE9wdGlvbnMgPT4ge1xyXG4gICAgICBibGVuZFN0YXRlcy5wdXNoKFxyXG4gICAgICAgIHRoaXMuX2NyZWF0ZVNpbmdsZVN0YXRlKHsuLi5ibGVuZE9wdGlvbnMsIGJsZW5kTW9kZTogb3B0aW9ucy5ibGVuZE1vZGV9KVxyXG4gICAgICApO1xyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIG5ldyBCbGVuZDJkU3RhdGUoXHJcbiAgICAgIG9wdGlvbnMsXHJcbiAgICAgIGJsZW5kU3RhdGVzLFxyXG4gICAgICBibGVuZFRocmVzaG9sZHMsXHJcbiAgICAgIGJsZW5kTWF0Y2hQaGFzZXNcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gYSBuZXcgaW5zdGFuY2Ugb2YgYSBSYW5kb21BbmltYXRpb25TdGF0ZS5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gcGFzcyB0byB0aGUgUmFuZG9tQW5pbWF0aW9uU3RhdGUgY29uc3RydWN0b3IuXHJcbiAgICogQHBhcmFtIHtzdHJpbmc9fSBvcHRpb25zLm5hbWUgLSBOYW1lIGZvciB0aGUgYW5pbWF0aW9uIHN0YXRlLiBOYW1lcyBtdXN0IGJlXHJcbiAgICogdW5pcXVlIGZvciB0aGUgbGF5ZXIgdGhlIHN0YXRlIGlzIGFwcGxpZWQgdG8uXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLnBsYXlJbnRlcnZhbD0zXSAtIFRoZSBiYXNlIGFuaW1hdGlvbiBwbGF5YmFjayBpbnRlcnZhbC5cclxuICAgKiBAcGFyYW0ge0FycmF5LjxPYmplY3Q+fSBbb3B0aW9ucy5zdWJTdGF0ZU9wdGlvbnNdIC0gQXJyYXkgb2Ygb3B0aW9ucyB1c2VkIHRvIGNyZWF0ZSB0aGVcclxuICAgKiBzdWIgc3RhdGVzIGZvciB0aGlzIGNvbnRhaW5lci5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtSYW5kb21BbmltYXRpb25TdGF0ZX1cclxuICAgKi9cclxuICBfY3JlYXRlUmFuZG9tQW5pbWF0aW9uU3RhdGUob3B0aW9ucykge1xyXG4gICAgY29uc3Qge3N1YlN0YXRlT3B0aW9ucyA9IFtdfSA9IG9wdGlvbnM7XHJcblxyXG4gICAgY29uc3Qgc3ViU3RhdGVzID0gW107XHJcbiAgICBzdWJTdGF0ZU9wdGlvbnMuZm9yRWFjaChzdWJTdGF0ZU9wdGlvbnMgPT4ge1xyXG4gICAgICBzdWJTdGF0ZXMucHVzaChcclxuICAgICAgICB0aGlzLl9jcmVhdGVTaW5nbGVTdGF0ZSh7XHJcbiAgICAgICAgICAuLi5zdWJTdGF0ZU9wdGlvbnMsXHJcbiAgICAgICAgICBibGVuZE1vZGU6IG9wdGlvbnMuYmxlbmRNb2RlLFxyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gbmV3IFJhbmRvbUFuaW1hdGlvblN0YXRlKG9wdGlvbnMsIHN1YlN0YXRlcyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNYWtlIHN1cmUgdGhlIGxheWVyIHdpdGggdGhlIGdpdmVuIG5hbWUgZXhpc3RzIGFuZCByZXR1cm4gYSB1bmlxdWUgdmVyc2lvblxyXG4gICAqIG9mIHRoZSBhbmltYXRpb24gbmFtZSBzdXBwbGllZCBmb3IgdGhhdCBsYXllci5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGF5ZXJOYW1lIC0gTmFtZSBvZiB0aGUgbGF5ZXIgdG8gY2hlY2sgYWdhaW5zdC5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gYW5pbWF0aW9uTmFtZSAtIE5hbWUgb2YgdGhlIGFuaW1hdGlvbiB0byB2YWxpZGF0ZS5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IFZhbGlkYXRlZCBhbmltYXRpb24gbmFtZS5cclxuICAgKi9cclxuICBfdmFsaWRhdGVOZXdBbmltYXRpb24obGF5ZXJOYW1lLCBhbmltYXRpb25OYW1lKSB7XHJcbiAgICAvLyBNYWtlIHN1cmUgdGhlIGxheWVyTmFtZSBpcyB2YWxpZFxyXG4gICAgY29uc3QgbGF5ZXIgPSB0aGlzLl9sYXllck1hcFtsYXllck5hbWVdO1xyXG5cclxuICAgIGlmIChsYXllciA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgQ2Fubm90IGFkZCBhbmltYXRpb24gdG8gbGF5ZXIgJHtsYXllck5hbWV9IGZyb20gaG9zdCAke3RoaXMuX2hvc3QuaWR9LiBObyBsYXllciBleGlzdHMgd2l0aCB0aGlzIG5hbWUuYFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIE1ha2Ugc3VyZSB0aGUgYW5pbWF0aW9uTmFtZSBpcyB1bmlxdWVcclxuICAgIGNvbnN0IG5hbWUgPSBVdGlscy5nZXRVbmlxdWVOYW1lKGFuaW1hdGlvbk5hbWUsIGxheWVyLmdldFN0YXRlTmFtZXMoKSk7XHJcblxyXG4gICAgaWYgKG5hbWUgIT09IGFuaW1hdGlvbk5hbWUpIHtcclxuICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgIGBBbmltYXRpb24gbmFtZSAke2FuaW1hdGlvbk5hbWV9IGlzIG5vdCB1bmlxdWUgZm9yIGxheWVyICR7bGF5ZXIubmFtZX0uIEFuaW1hdGlvbiB3aWxsIGJlIHJlbmFtZWQgdG8gJHtuYW1lfS5gXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG5hbWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHdoZXRoZXIgb3Igbm90IGFsbCBhbmltYXRpb25zIGFyZSBwYXVzZWQuXHJcbiAgICpcclxuICAgKiBAcmVhZG9ubHlcclxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgKi9cclxuICBnZXQgcGF1c2VkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3BhdXNlZDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgYW4gYXJyYXkgb2YgbmFtZXMgb2YgYW5pbWF0aW9uIGxheWVycy5cclxuICAgKlxyXG4gICAqIEByZWFkb25seVxyXG4gICAqIEB0eXBlIHtBcnJheS48c3RyaW5nPn1cclxuICAgKi9cclxuICBnZXQgbGF5ZXJzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2xheWVycy5tYXAobGF5ZXIgPT4gbGF5ZXIubmFtZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGUgYW5kIHN0b3JlIGEgbmV3IGFuaW1hdGlvbiBsYXllci5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbbmFtZT0nTmV3TGF5ZXInXSAtIE5hbWUgZm9yIHRoZSBsYXllci5cclxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIC0gT3B0aW9ucyB0byBwYXNzIHRvIHtAbGluayBBbmltYXRpb25MYXllciNjb25zdHJ1Y3Rvcn1cclxuICAgKiBAcGFyYW0ge2luZGV4PX0gaW5kZXggLSBJbmRleCB0byBpbnNlcnQgdGhlIG5ldyBsYXllciBhdC4gSWYgbm9uZSBpcyBwcm92aWRlZFxyXG4gICAqIGl0IHdpbGwgYmUgYWRkZWQgdG8gdGhlIGVuZCBvZiB0aGUgc3RhY2suXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBJbmRleCBvZiB0aGUgbmV3IGxheWVyLlxyXG4gICAqL1xyXG4gIGFkZExheWVyKG5hbWUgPSAnTmV3TGF5ZXInLCBvcHRpb25zID0ge30sIGluZGV4KSB7XHJcbiAgICBjb25zdCBudW1MYXllcnMgPSB0aGlzLl9sYXllcnMubGVuZ3RoO1xyXG4gICAgbGV0IGxheWVySW5kZXggPSBpbmRleDtcclxuXHJcbiAgICAvLyBNYWtlIHN1cmUgdGhlIGdpdmVuIGluZGV4IGlzIHdpdGhpbiB0aGUgcmFuZ2Ugb2YgbGF5ZXJzXHJcbiAgICBpZiAoaW5kZXggPT09IHVuZGVmaW5lZCB8fCBpbmRleCA9PT0gLTEpIHtcclxuICAgICAgbGF5ZXJJbmRleCA9IHRoaXMuX2xheWVycy5sZW5ndGg7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBsYXllckluZGV4ID0gdGhpcy5fdmFsaWRhdGVJbmRleChpbmRleCwgZmFsc2UpO1xyXG5cclxuICAgICAgaWYgKGxheWVySW5kZXggPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIC8vIEluc2VydCBhdCB0aGUgYmVnaW5uaW5nIGlmIHRoZSB1c2VyIHBhc3NlZCBpbiBhIG5lZ2F0aXZlIGluZGV4XHJcbiAgICAgICAgaWYgKGluZGV4IDwgMCkge1xyXG4gICAgICAgICAgbGF5ZXJJbmRleCA9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIE90aGVyd2lzZSBhcHBlbmQgdG8gdGhlIGVuZFxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgbGF5ZXJJbmRleCA9IHRoaXMuX2xheWVycy5sZW5ndGg7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zb2xlLndhcm4oXHJcbiAgICAgICAgICBgSW5kZXggJHtpbmRleH0gaXMgaW52YWxpZCBmb3IgaG9zdCAke3RoaXMuX2hvc3QuaWR9LiBOZXcgbGF5ZXIgd2lsbCBiZSBhZGRlZCBhdCB0aGUgY2xvc2VzdCB2YWxpZCBpbmRleDogJHtsYXllckluZGV4fS5gXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIE1ha2Ugc3VyZSB0aGUgbGF5ZXIgbmFtZSBpcyB1bmlxdWVcclxuICAgIGNvbnN0IGxheWVyTmFtZSA9IFV0aWxzLmdldFVuaXF1ZU5hbWUobmFtZSwgT2JqZWN0LmtleXModGhpcy5fbGF5ZXJNYXApKTtcclxuXHJcbiAgICBpZiAobmFtZSAhPT0gbGF5ZXJOYW1lKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICBgTGF5ZXIgbmFtZSAke25hbWV9IGlzIG5vdCB1bmlxdWUuIE5ldyBsYXllciB3aWxsIGJlIGFkZGVkIHdpdGggdGhlIG5hbWUgJHtsYXllck5hbWV9LmBcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBsYXllciA9IG5ldyBBbmltYXRpb25MYXllcih7Li4ub3B0aW9ucywgbmFtZTogbGF5ZXJOYW1lfSk7XHJcbiAgICB0aGlzLl9sYXllck1hcFtsYXllck5hbWVdID0gbGF5ZXI7XHJcblxyXG4gICAgaWYgKGxheWVySW5kZXggPT09IG51bUxheWVycykge1xyXG4gICAgICB0aGlzLl9sYXllcnMucHVzaChsYXllcik7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9sYXllcnMuc3BsaWNlKGxheWVySW5kZXgsIDAsIGxheWVyKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBOb3RpZnkgdGhhdCBhIGxheWVyIGhhcyBiZWVuIGFkZGVkIHRvIHRoZSBmZWF0dXJlXHJcbiAgICBjb25zdCBldmVudERhdGEgPSB7bmFtZTogbGF5ZXJOYW1lLCBpbmRleDogbGF5ZXJJbmRleH07XHJcbiAgICB0aGlzLmVtaXQodGhpcy5jb25zdHJ1Y3Rvci5FVkVOVFMuYWRkTGF5ZXIsIGV2ZW50RGF0YSk7XHJcblxyXG4gICAgcmV0dXJuIGV2ZW50RGF0YTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlbW92ZSBhbiBhbmltYXRpb24gbGF5ZXIgZnJvbSB0aGUgc3RhY2suIEFuaW1hdGlvbnMgb24gdGhpcyBsYXllciB3aWxsIG5vXHJcbiAgICogbG9uZ2VyIGJlIGV2YWx1YXRlZC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gTmFtZSBmb3IgdGhlIGxheWVyIHRvIHJlbW92ZS5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBXaGV0aGVyIG9yIG5vdCByZW1vdmFsIHdhcyBzdWNjZXNzZnVsLlxyXG4gICAqL1xyXG4gIHJlbW92ZUxheWVyKG5hbWUpIHtcclxuICAgIGNvbnN0IGxheWVyID0gdGhpcy5fbGF5ZXJNYXBbbmFtZV07XHJcblxyXG4gICAgaWYgKGxheWVyID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgIGBEaWQgbm90IHJlbW92ZSBsYXllciAke25hbWV9IGZyb20gaG9zdCAke3RoaXMuX2hvc3QuaWR9LiBObyBsYXllciBleGlzdHMgd2l0aCB0aGlzIG5hbWUuYFxyXG4gICAgICApO1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgbGF5ZXIuZGlzY2FyZCgpO1xyXG5cclxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fbGF5ZXJzLmluZGV4T2YobGF5ZXIpO1xyXG4gICAgdGhpcy5fbGF5ZXJzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICBkZWxldGUgdGhpcy5fbGF5ZXJNYXBbbmFtZV07XHJcblxyXG4gICAgLy8gTm90aWZ5IHRoYXQgYSBsYXllciBoYXMgYmVlbiByZW1vdmVkIGZyb20gdGhlIGZlYXR1cmVcclxuICAgIHRoaXMuZW1pdCh0aGlzLmNvbnN0cnVjdG9yLkVWRU5UUy5yZW1vdmVMYXllciwge25hbWUsIGluZGV4fSk7XHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZS1vcmRlciB0aGUgbGF5ZXIgc3RhY2sgc28gdGhhdCB0aGUgbGF5ZXIgd2l0aCB0aGUgZ2l2ZW4gbmFtZSBpcyBwb3NpdGlvbmVkXHJcbiAgICogYXQgdGhlIGdpdmVuIGluZGV4LlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBOYW1lIG9mIHRoZSBsYXllciB0byBtb3ZlLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleCAtIE5ldyBpbmRleCB0byBwb3NpdGlvbiB0aGUgbGF5ZXIgYXQuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBUaGUgbmV3IGluZGV4IG9mIHRoZSBsYXllclxyXG4gICAqL1xyXG4gIG1vdmVMYXllcihuYW1lLCBpbmRleCkge1xyXG4gICAgLy8gTWFrZSBzdXJlIHRoZSBuYW1lIGlzIHZhbGlkXHJcbiAgICBjb25zdCBsYXllciA9IHRoaXMuX2xheWVyTWFwW25hbWVdO1xyXG5cclxuICAgIGlmIChsYXllciA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgQ2Fubm90IG1vdmUgbGF5ZXIgJHtuYW1lfSBmcm9tIGhvc3QgJHt0aGlzLl9ob3N0LmlkfS4gTm8gbGF5ZXIgZXhpc3RzIHdpdGggdGhpcyBuYW1lLmBcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBNYWtlIHN1cmUgdGhlIGluZGV4IGZhbGxzIGluIHRoZSByYW5nZSBvZiBleGlzdGluZyBsYXllcnNcclxuICAgIGNvbnN0IGxheWVySW5kZXggPSB0aGlzLl92YWxpZGF0ZUluZGV4KGluZGV4LCB0cnVlKTtcclxuICAgIGNvbnN0IGxhc3RJbmRleCA9IHRoaXMuX2xheWVycy5sZW5ndGggLSAxO1xyXG5cclxuICAgIGlmIChsYXllckluZGV4ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgIGBDYW5ub3QgbW92ZSBsYXllciAke25hbWV9IGZyb20gaG9zdCAke3RoaXMuX2hvc3QuaWR9IHRvIGluZGV4ICR7aW5kZXh9LiBJbmRleCBtdXN0IGJlIGluIHRoZSAwIC0gJHtsYXN0SW5kZXh9IHJhbmdlLmBcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBjdXJyZW50SW5kZXggPSB0aGlzLl9sYXllcnMuaW5kZXhPZihsYXllcik7XHJcbiAgICBpZiAoY3VycmVudEluZGV4ID09PSBsYXllckluZGV4KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBSZW1vdmUgZnJvbSB0aGUgY3VycmVudCBwb3NpdGlvblxyXG4gICAgdGhpcy5fbGF5ZXJzLnNwbGljZShjdXJyZW50SW5kZXgsIDEpO1xyXG5cclxuICAgIC8vIEluc2VydCBhdCB0aGUgbmV3IHBvc2l0aW9uXHJcbiAgICBpZiAobGF5ZXJJbmRleCA9PT0gbGFzdEluZGV4KSB7XHJcbiAgICAgIHRoaXMuX2xheWVycy5wdXNoKGxheWVyKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2xheWVycy5zcGxpY2UobGF5ZXJJbmRleCwgMCwgbGF5ZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBsYXllckluZGV4O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlIHRoZSBuYW1lIG9mIGEgbGF5ZXIuIE5hbWVzIG11c3QgYmUgdW5pcXVlLCBpZiB0aGUgbmV3IG5hbWUgaXMgbm90XHJcbiAgICogdW5pcXVlIGl0IHdpbGwgaGF2ZSB0cmFpbGluZyBudW1iZXJzIGFwcGVuZGVkIHVudGlsIGl0IGlzIHVuaXF1ZS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjdXJyZW50TmFtZSAtIEN1cnJlbnQgbmFtZSBvZiB0aGUgbGF5ZXIuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5ld05hbWUgLSBOZXcgbmFtZSB0byBzZXQgb24gdGhlIGxheWVyLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge3N0cmluZ30gVGhlIG5ldyBuYW1lIG9mIHRoZSBsYXllclxyXG4gICAqL1xyXG4gIHJlbmFtZUxheWVyKGN1cnJlbnROYW1lLCBuZXdOYW1lKSB7XHJcbiAgICAvLyBNYWtlIHN1cmUgdGhlIG5hbWUgaXMgdmFsaWRcclxuICAgIGNvbnN0IGxheWVyID0gdGhpcy5fbGF5ZXJNYXBbY3VycmVudE5hbWVdO1xyXG5cclxuICAgIGlmIChsYXllciA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgQ2Fubm90IHJlbmFtZSBsYXllciAke2N1cnJlbnROYW1lfSBmcm9tIGhvc3QgJHt0aGlzLl9ob3N0LmlkfS4gTm8gbGF5ZXIgZXhpc3RzIHdpdGggdGhpcyBuYW1lLmBcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBNYWtlIHN1cmUgdGhlIGxheWVyIG5hbWUgaXMgdW5pcXVlXHJcbiAgICBjb25zdCBuYW1lID0gVXRpbHMuZ2V0VW5pcXVlTmFtZShuZXdOYW1lLCBPYmplY3Qua2V5cyh0aGlzLl9sYXllck1hcCkpO1xyXG5cclxuICAgIGlmIChuYW1lICE9PSBuZXdOYW1lKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICBgTGF5ZXIgbmFtZSAke25ld05hbWV9IGlzIG5vdCB1bmlxdWUuIExheWVyIHdpbGwgYmUgcmVuYW1lZCB0byAke25hbWV9LmBcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBkZWxldGUgdGhpcy5fbGF5ZXJNYXBbY3VycmVudE5hbWVdO1xyXG4gICAgdGhpcy5fbGF5ZXJNYXBbbmFtZV0gPSBsYXllcjtcclxuICAgIGxheWVyLm5hbWUgPSBuYW1lO1xyXG5cclxuICAgIC8vIE5vdGlmeSB0aGF0IGEgbGF5ZXIgaGFzIGJlZW4gcmVuYW1lZCBvbiB0aGUgZmVhdHVyZVxyXG4gICAgdGhpcy5lbWl0KHRoaXMuY29uc3RydWN0b3IuRVZFTlRTLnJlbmFtZUxheWVyLCB7XHJcbiAgICAgIG9sZE5hbWU6IGN1cnJlbnROYW1lLFxyXG4gICAgICBuZXdOYW1lOiBuYW1lLFxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIG5hbWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gdGhlIHdlaWdodCBvZiBhbiBhbmltYXRpb24gbGF5ZXIuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRvIHJldHVybiB3ZWlnaHQgZnJvbS5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XHJcbiAgICovXHJcbiAgZ2V0TGF5ZXJXZWlnaHQobmFtZSkge1xyXG4gICAgLy8gTWFrZSBzdXJlIHRoZSBuYW1lIGlzIHZhbGlkXHJcbiAgICBjb25zdCBsYXllciA9IHRoaXMuX2xheWVyTWFwW25hbWVdO1xyXG5cclxuICAgIGlmIChsYXllciA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgQ2Fubm90IGdldCB3ZWlnaHQgb24gbGF5ZXIgJHtuYW1lfSBmcm9tIGhvc3QgJHt0aGlzLl9ob3N0LmlkfS4gTm8gbGF5ZXIgZXhpc3RzIHdpdGggdGhpcyBuYW1lLmBcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbGF5ZXIud2VpZ2h0O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlIHRoZSB3ZWlnaHQgb2YgYW4gYW5pbWF0aW9uIGxheWVyLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgbGF5ZXIgdG8gdXBkYXRlLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB3ZWlnaHQgLSBUaGUgd2VpZ2h0IHZhbHVlIHRvIHNldCBvbiB0aGUgbGF5ZXIuIFRoaXMgbnVtYmVyXHJcbiAgICogc2hvdWxkIGJlIGluIHRoZSAwLTEgcmFuZ2UuXHJcbiAgICogQHBhcmFtIHtudW1iZXI9fSBzZWNvbmRzIC0gVGhlIG51bWJlciBvZiBzZWNvbmRzIGl0IHNob3VsZCB0YWtlIHRvIHJlYWNoIHRoZVxyXG4gICAqIG5ldyB3ZWlnaHQuIERlZmF1bHQgaXMgemVybyBhbmQgd2lsbCBzZXQgaW1tZWRpYXRlbHkuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IGVhc2luZ0ZuIC0gVGhlIGVhc2luZyBmdW5jdGlvbiB0byB1c2Ugd2hpbGUgaW50ZXJwb2xhdGluZ1xyXG4gICAqIHRoZSB3ZWlnaHQuIERlZmF1bHQgaXMgRWFzaW5nLkxpbmVhci5Jbk91dC5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtEZWZlcnJlZH0gQSBwcm9taXNlIHRoYXQgd2lsbCByZXNvbHZlIG9uY2UgdGhlIGxheWVyJ3Mgd2VpZ2h0IHJlYWNoZXNcclxuICAgKiB0aGUgdGFyZ2V0IHZhbHVlLlxyXG4gICAqL1xyXG4gIHNldExheWVyV2VpZ2h0KG5hbWUsIHdlaWdodCwgc2Vjb25kcywgZWFzaW5nRm4pIHtcclxuICAgIC8vIE1ha2Ugc3VyZSB0aGUgbmFtZSBpcyB2YWxpZFxyXG4gICAgY29uc3QgbGF5ZXIgPSB0aGlzLl9sYXllck1hcFtuYW1lXTtcclxuXHJcbiAgICBpZiAobGF5ZXIgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBjb25zdCBlID0gYENhbm5vdCBzZXQgd2VpZ2h0IG9uIGxheWVyICR7bmFtZX0gZnJvbSBob3N0ICR7dGhpcy5faG9zdC5pZH0uIE5vIGxheWVyIGV4aXN0cyB3aXRoIHRoaXMgbmFtZS5gO1xyXG4gICAgICByZXR1cm4gRGVmZXJyZWQucmVqZWN0KGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBsYXllci5zZXRXZWlnaHQod2VpZ2h0LCBzZWNvbmRzLCBlYXNpbmdGbik7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSBuYW1lcyBvZiBibGVuZCBzdGF0ZXMgaW4gYW4gYW5pbWF0aW9uIGluIGEgbGF5ZXIuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGF5ZXJOYW1lIC0gTmFtZSBvZiB0aGUgbGF5ZXIgY29udGFpbmluZyB0aGUgYW5pbWF0aW9uIGNvbnRhaW5pbmdcclxuICAgKiB0aGUgYmxlbmQgc3RhdGUgdG8gdXBkYXRlLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhbmltYXRpb25OYW1lIC0gTmFtZSBvZiB0aGUgYW5pbWF0aW9uIGNvbnRhaW5pbmcgdGhlIGJsZW5kIHN0YXRlXHJcbiAgICogdG8gdXBkYXRlLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0FycmF5LjxzdHJpbmc+fSAtIE5hbWVzIG9mIGJsZW5kIHN0YXRlcy5cclxuICAgKi9cclxuICBnZXRBbmltYXRpb25CbGVuZE5hbWVzKGxheWVyTmFtZSwgYW5pbWF0aW9uTmFtZSkge1xyXG4gICAgY29uc3QgbGF5ZXIgPSB0aGlzLl9sYXllck1hcFtsYXllck5hbWVdO1xyXG5cclxuICAgIGlmIChsYXllciA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgQ2Fubm90IGdldCBibGVuZCBuYW1lcyBvbiBsYXllciAke2xheWVyTmFtZX0gZnJvbSBob3N0ICR7dGhpcy5faG9zdC5pZH0uIE5vIGxheWVyIGV4aXN0cyB3aXRoIHRoaXMgbmFtZS5gXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGxheWVyLmdldEFuaW1hdGlvbkJsZW5kTmFtZXMoYW5pbWF0aW9uTmFtZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGUgdGhlIHdlaWdodCBmb3IgYSBibGVuZCBzdGF0ZSBpbiBhbiBhbmltYXRpb24gaW4gYSBsYXllci5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllck5hbWUgLSBOYW1lIG9mIHRoZSBsYXllciBjb250YWluaW5nIHRoZSBhbmltYXRpb24gY29udGFpbmluZ1xyXG4gICAqIHRoZSBibGVuZCBzdGF0ZSB0byB1cGRhdGUuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFuaW1hdGlvbk5hbWUgLSBOYW1lIG9mIHRoZSBhbmltYXRpb24gY29udGFpbmluZyB0aGUgYmxlbmQgc3RhdGVcclxuICAgKiB0byB1cGRhdGUuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGJsZW5kTmFtZSAtIE5hbWUgb2YgdGhlIGJsZW5kIHN0YXRlIHRvIHVwZGF0ZS5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gd2VpZ2h0IC0gV2VpZ2h0IHZhbHVlIHRvIHNldCBvbiB0aGUgYW5pbWF0aW9uLiBUaGlzIG51bWJlciBzaG91ZGxkIGJlXHJcbiAgICogaW4gdGhlIDAtMSByYW5nZS5cclxuICAgKiBAcGFyYW0ge251bWJlcj19IHNlY29uZHMgLSBOdW1iZXIgb2Ygc2Vjb25kcyBpdCBzaG91bGQgdGFrZSB0byByZWFjaCB0aGUgbmV3IHdlaWdodC5cclxuICAgKiBEZWZhdWx0IGlzIHplcm8gYW5kIHdpbGwgc2V0IGltbWVkaWF0ZWx5LlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBlYXNpbmdGbiAtIEVhc2luZyBmdW5jdGlvbiB0byB1c2Ugd2hpbGUgaW50ZXJwb2xhdGluZyB0aGUgbmV3XHJcbiAgICogd2VpZ2h0LiBEZWZhdWx0IGlzIEVhc2luZy5MaW5lYXIuSW5PdXQuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7RGVmZXJyZWR9IC0gUHJvbWlzZSB0aGF0IHdpbGwgcmVzb2x2ZSBvbmNlIHRoZSBhbmltYXRpb24ncyB3ZWlnaHQgcmVhY2hlc1xyXG4gICAqIHRoZSB0YXJnZXQgdmFsdWUuXHJcbiAgICovXHJcbiAgc2V0QW5pbWF0aW9uQmxlbmRXZWlnaHQoXHJcbiAgICBsYXllck5hbWUsXHJcbiAgICBhbmltYXRpb25OYW1lLFxyXG4gICAgYmxlbmROYW1lLFxyXG4gICAgd2VpZ2h0LFxyXG4gICAgc2Vjb25kcyxcclxuICAgIGVhc2luZ0ZuXHJcbiAgKSB7XHJcbiAgICBjb25zdCBsYXllciA9IHRoaXMuX2xheWVyTWFwW2xheWVyTmFtZV07XHJcblxyXG4gICAgaWYgKGxheWVyID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgY29uc3QgZSA9IGBDYW5ub3Qgc2V0IGJsZW5kIHdlaWdodCBvbiBsYXllciAke2xheWVyTmFtZX0gZnJvbSBob3N0ICR7dGhpcy5faG9zdC5pZH0uIE5vIGxheWVyIGV4aXN0cyB3aXRoIHRoaXMgbmFtZS5gO1xyXG4gICAgICByZXR1cm4gRGVmZXJyZWQucmVqZWN0KGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBsYXllci5zZXRBbmltYXRpb25CbGVuZFdlaWdodChcclxuICAgICAgYW5pbWF0aW9uTmFtZSxcclxuICAgICAgYmxlbmROYW1lLFxyXG4gICAgICB3ZWlnaHQsXHJcbiAgICAgIHNlY29uZHMsXHJcbiAgICAgIGVhc2luZ0ZuXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgd2VpZ2h0IGZvciBhIGJsZW5kIHN0YXRlIGluIGFuIGFuaW1hdGlvbiBpbiBhIGxheWVyLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVyTmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIGNvbnRhaW5pbmcgdGhlIGFuaW1hdGlvbiBjb250YWluaW5nXHJcbiAgICogdGhlIGJsZW5kIHN0YXRlIHRvIHVwZGF0ZS5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gYW5pbWF0aW9uTmFtZSAtIE5hbWUgb2YgdGhlIGFuaW1hdGlvbiBjb250YWluaW5nIHRoZSBibGVuZCBzdGF0ZVxyXG4gICAqIHRvIHVwZGF0ZS5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gYmxlbmROYW1lIC0gTmFtZSBvZiB0aGUgYmxlbmQgc3RhdGUgdG8gdXBkYXRlLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge251bWJlcn0gLSBXZWlnaHQgb2YgdGhlIGJsZW5kIHN0YXRlLlxyXG4gICAqL1xyXG4gIGdldEFuaW1hdGlvbkJsZW5kV2VpZ2h0KGxheWVyTmFtZSwgYW5pbWF0aW9uTmFtZSwgYmxlbmROYW1lKSB7XHJcbiAgICBjb25zdCBsYXllciA9IHRoaXMuX2xheWVyTWFwW2xheWVyTmFtZV07XHJcblxyXG4gICAgaWYgKGxheWVyID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgIGBDYW5ub3QgZ2V0IGJsZW5kIHdlaWdodCBvbiBsYXllciAke2xheWVyTmFtZX0gZnJvbSBob3N0ICR7dGhpcy5faG9zdC5pZH0uIE5vIGxheWVyIGV4aXN0cyB3aXRoIHRoaXMgbmFtZS5gXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGxheWVyLmdldEFuaW1hdGlvbkJsZW5kV2VpZ2h0KGFuaW1hdGlvbk5hbWUsIGJsZW5kTmFtZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQYXVzZSB3ZWlnaHQgaW50ZXJwb2xhdGlvbiBhbmltYXRpb24gb24gYSBsYXllciB3aXRoIHRoZSBnaXZlbiBuYW1lLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBOYW1lIG9mIHRoZSBsYXllciB0byBwYXVzZS5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtib29sZWFufSAtIFdoZXRoZXIgb3Igbm90IHRoZXJlIHdhcyBhbiBleGlzdGluZyBpbnRlcnBvbGF0aW9uIHRvIHBhdXNlLlxyXG4gICAqL1xyXG4gIHBhdXNlTGF5ZXJXZWlnaHQobmFtZSkge1xyXG4gICAgLy8gTWFrZSBzdXJlIHRoZSBuYW1lIGlzIHZhbGlkXHJcbiAgICBjb25zdCBsYXllciA9IHRoaXMuX2xheWVyTWFwW25hbWVdO1xyXG5cclxuICAgIGlmIChsYXllciA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgQ2Fubm90IHBhdXNlIHdlaWdodCBpbnRlcnBvbGF0aW9uIG9uIGxheWVyICR7bmFtZX0gZnJvbSBob3N0ICR7dGhpcy5faG9zdC5pZH0uIE5vIGxheWVyIGV4aXN0cyB3aXRoIHRoaXMgbmFtZS5gXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGxheWVyLnBhdXNlV2VpZ2h0KCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXN1bWUgd2VpZ2h0IGludGVycG9sYXRpb24gYW5pbWF0aW9uIG9uIGEgbGF5ZXIgd2l0aCB0aGUgZ2l2ZW4gbmFtZS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gTmFtZSBvZiB0aGUgbGF5ZXIgdG8gcmVzdW1lLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0RlZmVycmVkfSAtIFJlc29sdmVzIG9uY2UgdGhlIGxheWVyJ3Mgd2VpZ2h0IHJlYWNoZXMgaXRzIHRhcmdldCB2YWx1ZS5cclxuICAgKi9cclxuICByZXN1bWVMYXllcldlaWdodChuYW1lKSB7XHJcbiAgICAvLyBNYWtlIHN1cmUgdGhlIG5hbWUgaXMgdmFsaWRcclxuICAgIGNvbnN0IGxheWVyID0gdGhpcy5fbGF5ZXJNYXBbbmFtZV07XHJcblxyXG4gICAgaWYgKGxheWVyID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgY29uc3QgZSA9IGBDYW5ub3QgcmVzdW1lIHdlaWdodCBpbnRlcnBvbGF0aW9uIG9uIGxheWVyICR7bmFtZX0gZnJvbSBob3N0ICR7dGhpcy5faG9zdC5pZH0uIE5vIGxheWVyIGV4aXN0cyB3aXRoIHRoaXMgbmFtZS5gO1xyXG4gICAgICByZXR1cm4gRGVmZXJyZWQucmVqZWN0KGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBsYXllci5yZXN1bWVXZWlnaHQoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFBhdXNlIGN1cnJlbnQgYW5pbWF0aW9uIGFuZCB3ZWlnaHQgaW50ZXJwb2xhdGlvbiBhbmltYXRpb24gb24gYSBsYXllciB3aXRoXHJcbiAgICogdGhlIGdpdmVuIG5hbWUuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRvIHBhdXNlLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge2Jvb2xlYW59IC0gV2hldGhlciBvciBub3QgdGhlcmUgd2FzIGFuIGV4aXN0aW5nIGludGVycG9sYXRpb24gb3JcclxuICAgKiBjdXJyZW50IGFuaW1hdGlvbiB0byBwYXVzZS5cclxuICAgKi9cclxuICBwYXVzZUxheWVyKG5hbWUpIHtcclxuICAgIC8vIE1ha2Ugc3VyZSB0aGUgbmFtZSBpcyB2YWxpZFxyXG4gICAgY29uc3QgbGF5ZXIgPSB0aGlzLl9sYXllck1hcFtuYW1lXTtcclxuXHJcbiAgICBpZiAobGF5ZXIgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgYENhbm5vdCBwYXVzZSBsYXllciAke25hbWV9IGZyb20gaG9zdCAke3RoaXMuX2hvc3QuaWR9LiBObyBsYXllciBleGlzdHMgd2l0aCB0aGlzIG5hbWUuYFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBsYXllci5wYXVzZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVzdW1lIGN1cnJlbnQgYW5pbWF0aW9uIGFuZCB3ZWlnaHQgaW50ZXJwb2xhdGlvbiBhbmltYXRpb24gb24gYSBsYXllciB3aXRoXHJcbiAgICogdGhlIGdpdmVuIG5hbWUuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRvIHJlc3VtZS5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtEZWZlcnJlZH0gLSBSZXNvbHZlcyBvbmNlIHRoZSBsYXllcidzIHdlaWdodCByZWFjaGVzIGl0cyB0YXJnZXQgdmFsdWVcclxuICAgKiBhbmQgaXQncyBjdXJyZW50IGFuaW1hdGlvbiBmaW5pc2hlcyBwbGF5aW5nLlxyXG4gICAqL1xyXG4gIHJlc3VtZUxheWVyKG5hbWUpIHtcclxuICAgIC8vIE1ha2Ugc3VyZSB0aGUgbmFtZSBpcyB2YWxpZFxyXG4gICAgY29uc3QgbGF5ZXIgPSB0aGlzLl9sYXllck1hcFtuYW1lXTtcclxuXHJcbiAgICBpZiAobGF5ZXIgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBjb25zdCBlID0gYENhbm5vdCByZXN1bWUgbGF5ZXIgJHtuYW1lfSBmcm9tIGhvc3QgJHt0aGlzLl9ob3N0LmlkfS4gTm8gbGF5ZXIgZXhpc3RzIHdpdGggdGhpcyBuYW1lLmA7XHJcbiAgICAgIHJldHVybiBEZWZlcnJlZC5yZWplY3QoZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGxheWVyLnJlc3VtZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIHdoZXRoZXIgb3Igbm90IHRoZSBhbmltYXRpb24gbGF5ZXIgd2l0aCB0aGUgZ2l2ZW4gbmFtZSBpcyBjdXJyZW50bHlcclxuICAgKiB0cmFuc2l0aW9uaW5nIGJldHdlZW4gYW5pbWF0aW9ucy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllck5hbWUgLSBOYW1lIG9mIHRoZSBsYXllciB0byBjaGVjay5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gICAqL1xyXG4gIGdldFRyYW5zaXRpb25pbmcobGF5ZXJOYW1lKSB7XHJcbiAgICAvLyBNYWtlIHN1cmUgdGhlIGxheWVyTmFtZSBpcyB2YWxpZFxyXG4gICAgY29uc3QgbGF5ZXIgPSB0aGlzLl9sYXllck1hcFtsYXllck5hbWVdO1xyXG5cclxuICAgIGlmIChsYXllciA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgR2V0IHRyYW5zaXRpb25pbmcgb24gbGF5ZXIgJHtsYXllck5hbWV9IGZyb20gaG9zdCAke3RoaXMuX2hvc3QuaWR9LiBObyBsYXllciBleGlzdHMgd2l0aCB0aGlzIG5hbWUuYFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBsYXllci5pc1RyYW5zaXRpb25pbmc7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gYW4gYXJyYXkgb2YgdGhlIG5hbWVzIG9mIGFsbCBzdGF0ZXMgdGhlIGxheWVyIHdpdGggdGhlIGdpdmVuIG5hbWUgY29udHJvbHMuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGF5ZXJOYW1lIC0gTmFtZSBvZiB0aGUgbGF5ZXIgdG8gc2VhcmNoLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0FycmF5LjxzdHJpbmc+fVxyXG4gICAqL1xyXG4gIGdldEFuaW1hdGlvbnMobGF5ZXJOYW1lKSB7XHJcbiAgICAvLyBNYWtlIHN1cmUgdGhlIGxheWVyTmFtZSBpcyB2YWxpZFxyXG4gICAgY29uc3QgbGF5ZXIgPSB0aGlzLl9sYXllck1hcFtsYXllck5hbWVdO1xyXG5cclxuICAgIGlmIChsYXllciA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgR2V0IGFuaW1hdGlvbnMgb24gbGF5ZXIgJHtsYXllck5hbWV9IGZyb20gaG9zdCAke3RoaXMuX2hvc3QuaWR9LiBObyBsYXllciBleGlzdHMgd2l0aCB0aGlzIG5hbWUuYFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBsYXllci5nZXRTdGF0ZU5hbWVzKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gdGhlIG5hbWUgb2YgdGhlIHN0YXRlIGN1cnJlbnRseSBhY3RpdmUgb24gdGhlIGxheWVyIHdpdGggdGhlIGdpdmVuIG5hbWUuXHJcbiAgICogUmV0dXJuIG51bGwgaWYgdGhlcmUgaXMgbm8gY3VycmVudCBhbmltYXRpb24gZm9yIHRoZSBsYXllci5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllck5hbWUgLSBOYW1lIG9mIHRoZSBsYXllci5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHsoc3RyaW5nfG51bGwpfVxyXG4gICAqL1xyXG4gIGdldEN1cnJlbnRBbmltYXRpb24obGF5ZXJOYW1lKSB7XHJcbiAgICAvLyBNYWtlIHN1cmUgdGhlIGxheWVyTmFtZSBpcyB2YWxpZFxyXG4gICAgY29uc3QgbGF5ZXIgPSB0aGlzLl9sYXllck1hcFtsYXllck5hbWVdO1xyXG5cclxuICAgIGlmIChsYXllciA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgR2V0IGN1cnJlbnQgYW5pbWF0aW9uIG9uIGxheWVyICR7bGF5ZXJOYW1lfSBmcm9tIGhvc3QgJHt0aGlzLl9ob3N0LmlkfS4gTm8gbGF5ZXIgZXhpc3RzIHdpdGggdGhpcyBuYW1lLmBcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbGF5ZXIuY3VycmVudEFuaW1hdGlvbjtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiB3aGV0aGVyIG9yIG5vdCBhIGxheWVyIHdpdGggdGhlIGdpdmVuIG5hbWUgaXMgY3VycmVudGx5IHBsYXlpbmcgYW5cclxuICAgKiBhbmltYXRpb24gYW5kIHRoYXQgYW5pbWF0aW9uIGlzIHBhdXNlZC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllck5hbWUgLSBOYW1lIG9mIHRoZSBsYXllci5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gICAqL1xyXG4gIGdldFBhdXNlZChsYXllck5hbWUpIHtcclxuICAgIC8vIE1ha2Ugc3VyZSB0aGUgbGF5ZXJOYW1lIGlzIHZhbGlkXHJcbiAgICBjb25zdCBsYXllciA9IHRoaXMuX2xheWVyTWFwW2xheWVyTmFtZV07XHJcblxyXG4gICAgaWYgKGxheWVyID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgIGBHZXQgcGF1c2VkIG9uIGxheWVyICR7bGF5ZXJOYW1lfSBmcm9tIGhvc3QgJHt0aGlzLl9ob3N0LmlkfS4gTm8gbGF5ZXIgZXhpc3RzIHdpdGggdGhpcyBuYW1lLmBcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbGF5ZXIuY3VycmVudFN0YXRlICYmIGxheWVyLmN1cnJlbnRTdGF0ZS5wYXVzZWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gdGhlIHR5cGUgbmFtZSBvZiB0aGUgZ2l2ZW4gYW5pbWF0aW9uLiBAc2VlIEFuaW1hdGlvblR5cGVzLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVyTmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRoYXQgY29udGFpbnMgdGhlIGFuaW1hdGlvbi5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gYW5pbWF0aW9uTmFtZSAtIE5hbWUgb2YgdGhlIGFuaW1hdGlvbiB0byBjaGVjay5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XHJcbiAgICovXHJcbiAgZ2V0QW5pbWF0aW9uVHlwZShsYXllck5hbWUsIGFuaW1hdGlvbk5hbWUpIHtcclxuICAgIC8vIE1ha2Ugc3VyZSB0aGUgbGF5ZXJOYW1lIGlzIHZhbGlkXHJcbiAgICBjb25zdCBsYXllciA9IHRoaXMuX2xheWVyTWFwW2xheWVyTmFtZV07XHJcblxyXG4gICAgaWYgKGxheWVyID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgIGBHZXQgYW5pbWF0aW9uIHR5cGUgb24gbGF5ZXIgJHtsYXllck5hbWV9IGZyb20gaG9zdCAke3RoaXMuX2hvc3QuaWR9LiBObyBsYXllciBleGlzdHMgd2l0aCB0aGlzIG5hbWUuYFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHN0YXRlID0gbGF5ZXIuZ2V0U3RhdGUoYW5pbWF0aW9uTmFtZSk7XHJcblxyXG4gICAgaWYgKHN0YXRlID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgIGBHZXQgYW5pbWF0aW9uIHR5cGUgZm9yIGFuaW1hdGlvbiAke2FuaW1hdGlvbk5hbWV9IG9uIGxheWVyICR7bGF5ZXJOYW1lfSBmcm9tIGhvc3QgJHt0aGlzLl9ob3N0LmlkfS4gTm8gYW5pbWF0aW9uIGV4aXN0cyB3aXRoIHRoaXMgbmFtZS5gXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qge2NvbnN0cnVjdG9yfSA9IHN0YXRlO1xyXG5cclxuICAgIHJldHVybiBPYmplY3Qua2V5cyhBbmltYXRpb25UeXBlcykuZmluZChcclxuICAgICAgdHlwZU5hbWUgPT4gQW5pbWF0aW9uVHlwZXNbdHlwZU5hbWVdID09PSBjb25zdHJ1Y3RvclxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFkZCBhIG5ldyBhbmltYXRpb24gdG8gYW4gYW5pbWF0aW9uIGxheWVyLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVyTmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRvIGFkZCB0aGUgYW5pbWF0aW9uIHRvLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhbmltYXRpb25OYW1lIC0gTmFtZSB0byB1c2Ugd2hlbiBjYWxsaW5nIHRoZSBhbmltYXRpb24uXHJcbiAgICogQHBhcmFtIHtPYmplY3Q9fSBvcHRpb25zIC0gT3B0aW9ucyB0byBwYXNzIHRvIHRoZSBjb25zdHJ1Y3RvciBmb3IgdGhlIG5ld1xyXG4gICAqIFNpbmdsZVN0YXRlIGFuaW1hdGlvbi5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IC0gVGhlIG5hbWUgb2YgdGhlIGFuaW1hdGlvbiB0aGF0IHdhcyBhZGRlZFxyXG4gICAqL1xyXG4gIGFkZEFuaW1hdGlvbihcclxuICAgIGxheWVyTmFtZSxcclxuICAgIGFuaW1hdGlvbk5hbWUsXHJcbiAgICBhbmltYXRpb25UeXBlID0gQW5pbWF0aW9uVHlwZXMuc2luZ2xlLFxyXG4gICAgb3B0aW9ucyA9IHt9XHJcbiAgKSB7XHJcbiAgICBvcHRpb25zLm5hbWUgPSB0aGlzLl92YWxpZGF0ZU5ld0FuaW1hdGlvbihsYXllck5hbWUsIGFuaW1hdGlvbk5hbWUpO1xyXG5cclxuICAgIC8vIE1ha2Ugc3VyZSB0aGUgYW5pbWF0aW9uIHR5cGUgaXMgdmFsaWRcclxuICAgIGlmICghT2JqZWN0LnZhbHVlcyhBbmltYXRpb25UeXBlcykuaW5jbHVkZXMoYW5pbWF0aW9uVHlwZSkpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgIGBDYW5ub3QgYWRkIGFuaW1hdGlvbiAke2FuaW1hdGlvbk5hbWV9IHRvIGxheWVyICR7bGF5ZXJOYW1lfSBvbiBob3N0ICR7dGhpcy5faG9zdC5pZH0uIEludmFsaWQgYW5pbWF0aW9uIHR5cGUuYFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGxheWVyID0gdGhpcy5fbGF5ZXJNYXBbbGF5ZXJOYW1lXTtcclxuICAgIG9wdGlvbnMuYmxlbmRNb2RlID0gbGF5ZXIuYmxlbmRNb2RlO1xyXG4gICAgb3B0aW9ucy50cmFuc2l0aW9uVGltZSA9IGxheWVyLnRyYW5zaXRpb25UaW1lO1xyXG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzW2BfY3JlYXRlJHthbmltYXRpb25UeXBlLm5hbWV9YF0ob3B0aW9ucyk7XHJcblxyXG4gICAgY29uc3QgbmFtZSA9IGxheWVyLmFkZFN0YXRlKHN0YXRlKTtcclxuXHJcbiAgICAvLyBOb3RpZnkgdGhhdCBhbiBhbmltYXRpb24gaGFzIGJlZW4gYWRkZWQgdG8gdGhlIGZlYXR1cmVcclxuICAgIHRoaXMuZW1pdCh0aGlzLmNvbnN0cnVjdG9yLkVWRU5UUy5hZGRBbmltYXRpb24sIHtcclxuICAgICAgbGF5ZXJOYW1lLFxyXG4gICAgICBhbmltYXRpb25OYW1lOiBuYW1lLFxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIG5hbWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZW1vdmUgYW4gYW5pbWF0aW9uIGZyb20gYW4gYW5pbWF0aW9uIGxheWVyLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVyTmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRvIHJlbW92ZSB0aGUgYW5pbWF0aW9uIGZyb20uXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBOYW1lIG9mIHRoZSBhbmltYXRpb24gdG8gcmVtb3ZlLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAgICovXHJcbiAgcmVtb3ZlQW5pbWF0aW9uKGxheWVyTmFtZSwgYW5pbWF0aW9uTmFtZSkge1xyXG4gICAgLy8gTWFrZSBzdXJlIHRoZSBuYW1lIGlzIHZhbGlkXHJcbiAgICBjb25zdCBsYXllciA9IHRoaXMuX2xheWVyTWFwW2xheWVyTmFtZV07XHJcblxyXG4gICAgaWYgKGxheWVyID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgIGBDYW5ub3QgcmVtb3ZlIGFuaW1hdGlvbiBmcm9tIGxheWVyICR7bGF5ZXJOYW1lfSBmcm9tIGhvc3QgJHt0aGlzLl9ob3N0LmlkfS4gTm8gbGF5ZXIgZXhpc3RzIHdpdGggdGhpcyBuYW1lLmBcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCByZW1vdmVkID0gbGF5ZXIucmVtb3ZlU3RhdGUoYW5pbWF0aW9uTmFtZSk7XHJcblxyXG4gICAgLy8gTm90aWZ5IHRoYXQgYW4gYW5pbWF0aW9uIGhhcyBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgZmVhdHVyZVxyXG4gICAgaWYgKHJlbW92ZWQgPT09IHRydWUpIHtcclxuICAgICAgdGhpcy5lbWl0KHRoaXMuY29uc3RydWN0b3IuRVZFTlRTLnJlbW92ZUFuaW1hdGlvbiwge1xyXG4gICAgICAgIGxheWVyTmFtZSxcclxuICAgICAgICBhbmltYXRpb25OYW1lLFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcmVtb3ZlZDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZSB0aGUgbmFtZSBvZiBhbiBhbmltYXRpb24uIE5hbWVzIG11c3QgYmUgdW5pcXVlIG9uIGVhY2ggbGF5ZXIsIGlmIHRoZSBuZXdcclxuICAgKiBuYW1lIGlzIG5vdCB1bmlxdWUgaXQgd2lsbCBoYXZlIHRyYWlsaW5nIG51bWJlcnMgYXBwZW5kZWQgdW50aWwgaXQgaXMgdW5pcXVlLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVyTmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRoYXQgY29udGFpbnMgdGhlIGFuaW1hdGlvbiB0aGF0XHJcbiAgICogd2lsbCBiZSByZW5hbWVkLFxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjdXJyZW50QW5pbWF0aW9uTmFtZSAtIEN1cnJlbnQgbmFtZSBvZiB0aGUgYW5pbWF0aW9uLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuZXdBbmltYXRpb25OYW1lIC0gTmV3IG5hbWUgdG8gc2V0IG9uIHRoZSBhbmltYXRpb24uXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSAtIFRoZSBuZXcgbmFtZSBvZiB0aGUgYW5pbWF0aW9uXHJcbiAgICovXHJcbiAgcmVuYW1lQW5pbWF0aW9uKGxheWVyTmFtZSwgY3VycmVudEFuaW1hdGlvbk5hbWUsIG5ld0FuaW1hdGlvbk5hbWUpIHtcclxuICAgIGNvbnN0IGxheWVyID0gdGhpcy5fbGF5ZXJNYXBbbGF5ZXJOYW1lXTtcclxuXHJcbiAgICBpZiAobGF5ZXIgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgYENhbm5vdCByZW5hbWUgYW5pbWF0aW9uICR7Y3VycmVudEFuaW1hdGlvbk5hbWV9IG9uIGxheWVyICR7bGF5ZXJOYW1lfSBmb3IgaG9zdCAke3RoaXMuX2hvc3QuaWR9LiBObyBsYXllciBleGlzdHMgd2l0aCB0aGlzIG5hbWUuYFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IG5hbWUgPSBsYXllci5yZW5hbWVTdGF0ZShjdXJyZW50QW5pbWF0aW9uTmFtZSwgbmV3QW5pbWF0aW9uTmFtZSk7XHJcblxyXG4gICAgLy8gTm90aWZ5IHRoYXQgYW4gYW5pbWF0aW9uIGhhcyBiZWVuIHJlbmFtZWQgb24gdGhlIGZlYXR1cmVcclxuICAgIHRoaXMuZW1pdCh0aGlzLmNvbnN0cnVjdG9yLkVWRU5UUy5yZW5hbWVBbmltYXRpb24sIHtcclxuICAgICAgbGF5ZXJOYW1lLFxyXG4gICAgICBvbGROYW1lOiBjdXJyZW50QW5pbWF0aW9uTmFtZSxcclxuICAgICAgbmV3TmFtZTogbmFtZSxcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBuYW1lO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUGF1c2UgdGhlIGN1cnJlbnRseSBwbGF5aW5nIGFuaW1hdGlvbiBhbmQgcGxheSBhIG5ldyBhbmltYXRpb24gZnJvbSB0aGUgYmVnaW5uaW5nLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVyTmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRoYXQgY29udGFpbnMgdGhlIGFuaW1hdGlvbi5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gYW5pbWF0aW9uTmFtZSAtIE5hbWUgb2YgdGhlIGFuaW1hdGlvbiBzdGF0ZSB0byBwbGF5LlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyPX0gc2Vjb25kcyAtIFRoZSBudW1iZXIgb2Ygc2Vjb25kcyBpdCBzaG91bGQgdGFrZSB0byB0cmFuc2l0aW9uXHJcbiAgICogdG8gdGhlIG5ldyBhbmltYXRpb24uIERlZmF1bHQgaXMgemVybyBhbmQgd2lsbCBzZXQgaW1tZWRpYXRlbHkuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IGVhc2luZ0ZuIC0gVGhlIGVhc2luZyBmdW5jdGlvbiB0byB1c2Ugd2hpbGUgdHJhbnNpdGlvbmluZ1xyXG4gICAqIGJldHdlZW4gYW5pbWF0aW9ucy4gRGVmYXVsdCBpcyBFYXNpbmcuTGluZWFyLkluT3V0LlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0RlZmVycmVkfSAtIFJlc29sdmVzIG9uY2UgdGhlIGFuaW1hdGlvbiByZWFjaGVzIHRoZSBlbmQgb2YgaXRzXHJcbiAgICogdGltZWxpbmUuIExvb3BpbmcgYW5pbWF0aW9ucyBjYW4gb25seSByZXNvbHZlIGlmIHRoZXkgYXJlIGludGVycnVwdGVkIG9yXHJcbiAgICogbWFudWFsbHkgc3RvcHBlZC5cclxuICAgKi9cclxuICBwbGF5QW5pbWF0aW9uKGxheWVyTmFtZSwgYW5pbWF0aW9uTmFtZSwgc2Vjb25kcywgZWFzaW5nRm4pIHtcclxuICAgIGNvbnN0IGxheWVyID0gdGhpcy5fbGF5ZXJNYXBbbGF5ZXJOYW1lXTtcclxuXHJcbiAgICBpZiAobGF5ZXIgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBjb25zdCBlID0gYENhbm5vdCBwbGF5IGFuaW1hdGlvbiAke2FuaW1hdGlvbk5hbWV9IG9uIGxheWVyICR7bGF5ZXJOYW1lfSBmb3IgaG9zdCAke3RoaXMuX2hvc3QuaWR9LiBObyBsYXllciBleGlzdHMgd2l0aCB0aGlzIG5hbWUuYDtcclxuICAgICAgcmV0dXJuIERlZmVycmVkLnJlamVjdChlKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBOb3RpZnkgdGhhdCBhIG5ldyBhbmltYXRpb24gaGFzIGJlZ3VuXHJcbiAgICB0aGlzLmVtaXQodGhpcy5jb25zdHJ1Y3Rvci5FVkVOVFMucGxheUFuaW1hdGlvbiwge1xyXG4gICAgICBsYXllck5hbWUsXHJcbiAgICAgIGFuaW1hdGlvbk5hbWUsXHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gbGF5ZXIucGxheUFuaW1hdGlvbihcclxuICAgICAgYW5pbWF0aW9uTmFtZSxcclxuICAgICAgc2Vjb25kcyxcclxuICAgICAgZWFzaW5nRm4sXHJcbiAgICAgICgpID0+IHtcclxuICAgICAgICAvLyBOb3RpZnkgdGhhdCBhbiBhbmltYXRpb24gaGFzIHN0b3BwZWRcclxuICAgICAgICB0aGlzLmVtaXQodGhpcy5jb25zdHJ1Y3Rvci5FVkVOVFMuc3RvcEFuaW1hdGlvbiwge1xyXG4gICAgICAgICAgbGF5ZXJOYW1lLFxyXG4gICAgICAgICAgYW5pbWF0aW9uTmFtZSxcclxuICAgICAgICB9KTtcclxuICAgICAgfSxcclxuICAgICAgdW5kZWZpbmVkLFxyXG4gICAgICAoKSA9PiB7XHJcbiAgICAgICAgLy8gTm90aWZ5IHRoYXQgYW4gYW5pbWF0aW9uIGhhcyBiZWVuIGludGVycnVwdGVkXHJcbiAgICAgICAgdGhpcy5lbWl0KHRoaXMuY29uc3RydWN0b3IuRVZFTlRTLmludGVycnVwdEFuaW1hdGlvbiwge1xyXG4gICAgICAgICAgbGF5ZXJOYW1lLFxyXG4gICAgICAgICAgYW5pbWF0aW9uTmFtZSxcclxuICAgICAgICB9KTtcclxuICAgICAgfSxcclxuICAgICAgKHtuYW1lLCBjYW5BZHZhbmNlLCBpc1F1ZXVlRW5kfSkgPT4ge1xyXG4gICAgICAgIGlmIChsYXllci5jdXJyZW50QW5pbWF0aW9uID09PSBhbmltYXRpb25OYW1lKSB7XHJcbiAgICAgICAgICAvLyBOb3RpZnkgdGhhdCBhIG5ldyBhbmltYXRpb24gaGFzIGJlZ3VuXHJcbiAgICAgICAgICB0aGlzLmVtaXQodGhpcy5jb25zdHJ1Y3Rvci5FVkVOVFMucGxheU5leHRBbmltYXRpb24sIHtcclxuICAgICAgICAgICAgbGF5ZXJOYW1lLFxyXG4gICAgICAgICAgICBhbmltYXRpb25OYW1lLFxyXG4gICAgICAgICAgICBuZXh0UXVldWVkQW5pbWF0aW9uOiBuYW1lLFxyXG4gICAgICAgICAgICBjYW5BZHZhbmNlLFxyXG4gICAgICAgICAgICBpc1F1ZXVlRW5kLFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUGxheSB0aGUgbmV4dCBhbmltYXRpb24gaW4gdGhlIHF1ZXVlIG9mIGEgUXVldWVTdGF0ZSBhbmltYXRpb24uXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGF5ZXJOYW1lIC0gTmFtZSBvZiB0aGUgbGF5ZXIgdGhhdCBjb250YWlucyB0aGUgcXVldWUgYW5pbWF0aW9uLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nPX0gYW5pbWF0aW9uTmFtZSAtIE5hbWUgb2YgdGhlIGFuaW1hdGlvbiBxdWV1ZSBhbmltYXRpb24uIERlZmF1bHRzXHJcbiAgICogdG8gdGhlIG5hbWUgb2YgdGhlIGN1cnJlbnQgYW5pbWF0aW9uIGZvciB0aGUgbGF5ZXIuXHJcbiAgICogQHBhcmFtIHtudW1iZXI9fSBzZWNvbmRzIC0gVGhlIG51bWJlciBvZiBzZWNvbmRzIGl0IHNob3VsZCB0YWtlIHRvIHRyYW5zaXRpb25cclxuICAgKiB0byB0aGUgcXVldWUgYW5pbWF0aW9uIGlmIGl0J3Mgbm90IGFscmVhZHkgY3VycmVudGx5IHBsYXlpbmcuIERlZmF1bHQgaXMgemVyb1xyXG4gICAqIGFuZCB3aWxsIHNldCBpbW1lZGlhdGVseS5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gZWFzaW5nRm4gLSBUaGUgZWFzaW5nIGZ1bmN0aW9uIHRvIHVzZSB3aGlsZSB0cmFuc2l0aW9uaW5nXHJcbiAgICogdG8gdGhlIHF1ZXVlIGFuaW1hdGlvbiBpZiBpdCBpc24ndCBhbHJlYWR5IHBsYXlpbmcuIERlZmF1bHQgaXMgRWFzaW5nLkxpbmVhci5Jbk91dC5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtEZWZlcnJlZH0gLSBSZXNvbHZlcyBvbmNlIHRoZSBsYXN0IGFuaW1hdGlvbiBpbiB0aGUgcXVldWUgZmluaXNoZXNcclxuICAgKiBwbGF5aW5nLlxyXG4gICAqL1xyXG4gIHBsYXlOZXh0QW5pbWF0aW9uKGxheWVyTmFtZSwgYW5pbWF0aW9uTmFtZSwgdHJhbnNpdGlvblRpbWUsIGVhc2luZ0ZuKSB7XHJcbiAgICBjb25zdCBsYXllciA9IHRoaXMuX2xheWVyTWFwW2xheWVyTmFtZV07XHJcblxyXG4gICAgaWYgKGxheWVyID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgY29uc3QgZSA9IGBDYW5ub3QgcGxheSBuZXh0IGFuaW1hdGlvbiBvbiBsYXllciAke2xheWVyTmFtZX0gZm9yIGhvc3QgJHt0aGlzLl9ob3N0LmlkfS4gTm8gbGF5ZXIgZXhpc3RzIHdpdGggdGhpcyBuYW1lLmA7XHJcbiAgICAgIHJldHVybiBEZWZlcnJlZC5yZWplY3QoZSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGFuaW1hdGlvbk5hbWUgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBhbmltYXRpb25OYW1lID0gbGF5ZXIuY3VycmVudEFuaW1hdGlvbjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBhbmltYXRpb24gPSBsYXllci5nZXRTdGF0ZShsYXllci5jdXJyZW50QW5pbWF0aW9uKTtcclxuXHJcbiAgICBpZiAoYW5pbWF0aW9uID09PSBudWxsKSB7XHJcbiAgICAgIGNvbnN0IGUgPSBgQ2Fubm90IHBsYXkgbmV4dCBhbmltYXRpb24gb24gbGF5ZXIgJHtsYXllck5hbWV9IGZvciBob3N0ICR7dGhpcy5faG9zdC5pZH0uIE5vIGFuaW1hdGlvbiBleGlzdHMgd2l0aCBuYW1lICR7YW5pbWF0aW9uTmFtZX0uYDtcclxuICAgICAgcmV0dXJuIERlZmVycmVkLnJlamVjdChlKTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5nZXRBbmltYXRpb25UeXBlKGxheWVyTmFtZSwgYW5pbWF0aW9uTmFtZSkgIT09ICdxdWV1ZScpIHtcclxuICAgICAgY29uc3QgZSA9IGBDYW5ub3QgcGxheSBuZXh0IGFuaW1hdGlvbiBvbiBsYXllciAke2xheWVyTmFtZX0gZm9yIGhvc3QgJHt0aGlzLl9ob3N0LmlkfS4gJHthbmltYXRpb25OYW1lfSBpcyBub3QgYSBxdWV1ZSBzdGF0ZS5gO1xyXG4gICAgICByZXR1cm4gRGVmZXJyZWQucmVqZWN0KGUpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IG9uTmV4dCA9ICh7bmFtZSwgY2FuQWR2YW5jZSwgaXNRdWV1ZUVuZH0pID0+IHtcclxuICAgICAgaWYgKGxheWVyLmN1cnJlbnRBbmltYXRpb24gPT09IGFuaW1hdGlvbk5hbWUpIHtcclxuICAgICAgICAvLyBOb3RpZnkgdGhhdCBhIG5ldyBhbmltYXRpb24gaGFzIGJlZ3VuXHJcbiAgICAgICAgdGhpcy5lbWl0KHRoaXMuY29uc3RydWN0b3IuRVZFTlRTLnBsYXlOZXh0QW5pbWF0aW9uLCB7XHJcbiAgICAgICAgICBsYXllck5hbWUsXHJcbiAgICAgICAgICBhbmltYXRpb25OYW1lLFxyXG4gICAgICAgICAgbmV4dFF1ZXVlZEFuaW1hdGlvbjogbmFtZSxcclxuICAgICAgICAgIGNhbkFkdmFuY2UsXHJcbiAgICAgICAgICBpc1F1ZXVlRW5kLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIC8vIE1ha2UgdGhlIHF1ZXVlIGFuaW1hdGlvbiBjdXJyZW50IGlmIGl0IHdhc24ndCBhbHJlYWR5XHJcbiAgICBpZiAobGF5ZXIuY3VycmVudEFuaW1hdGlvbiA9PT0gbnVsbCkge1xyXG4gICAgICBsYXllci5yZXN1bWVBbmltYXRpb24oXHJcbiAgICAgICAgYW5pbWF0aW9uLm5hbWUsXHJcbiAgICAgICAgdHJhbnNpdGlvblRpbWUsXHJcbiAgICAgICAgZWFzaW5nRm4sXHJcbiAgICAgICAgdW5kZWZpbmVkLFxyXG4gICAgICAgIHVuZGVmaW5lZCxcclxuICAgICAgICB1bmRlZmluZWQsXHJcbiAgICAgICAgb25OZXh0XHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGFuaW1hdGlvbi5uZXh0KG9uTmV4dCwgdHJ1ZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQYXVzZSB0aGUgY3VycmVudCBhbmltYXRpb24gb24gYSBsYXllci5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gTmFtZSBvZiB0aGUgbGF5ZXIgdG8gcGF1c2UuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciBvciBub3QgYW4gYW5pbWF0aW9uIHdhcyBzdWNjZXNzZnVsbHkgcGF1c2VkLlxyXG4gICAqL1xyXG4gIHBhdXNlQW5pbWF0aW9uKG5hbWUpIHtcclxuICAgIGNvbnN0IGxheWVyID0gdGhpcy5fbGF5ZXJNYXBbbmFtZV07XHJcblxyXG4gICAgaWYgKGxheWVyID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgIGBEaWQgbm90IHBhdXNlIGFuaW1hdGlvbiBvbiBsYXllciAke25hbWV9IGZvciBob3N0ICR7dGhpcy5faG9zdC5pZH0uIE5vIGxheWVyIGV4aXN0cyB3aXRoIHRoaXMgbmFtZS5gXHJcbiAgICAgICk7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBwYXVzZWQgPSBsYXllci5wYXVzZUFuaW1hdGlvbigpO1xyXG5cclxuICAgIC8vIE5vdGlmeSB0aGF0IGFuIGFuaW1hdGlvbiB3YXMgcGF1c2VkXHJcbiAgICBpZiAocGF1c2VkKSB7XHJcbiAgICAgIGNvbnN0IGFuaW1hdGlvbk5hbWUgPSBsYXllci5jdXJyZW50QW5pbWF0aW9uO1xyXG4gICAgICB0aGlzLmVtaXQodGhpcy5jb25zdHJ1Y3Rvci5FVkVOVFMucGF1c2VBbmltYXRpb24sIHtcclxuICAgICAgICBsYXllck5hbWU6IG5hbWUsXHJcbiAgICAgICAgYW5pbWF0aW9uTmFtZSxcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHBhdXNlZDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFBhdXNlIHRoZSBjdXJyZW50bHkgcGxheWluZyBhbmltYXRpb24gYW5kIHBsYXkgYSBuZXcgYW5pbWF0aW9uIGZyb20gd2hlcmUgaXRcclxuICAgKiBsYXN0IGxlZnQgb2ZmLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVyTmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRoYXQgY29udGFpbnMgdGhlIGFuaW1hdGlvbi5cclxuICAgKiBAcGFyYW0ge3N0cmluZz19IGFuaW1hdGlvbk5hbWUgLSBOYW1lIG9mIHRoZSBhbmltYXRpb24gc3RhdGUgdG8gcmVzdW1lLiBEZWZhdWx0c1xyXG4gICAqIHRvIHRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IGFuaW1hdGlvbiBmb3IgdGhlIGxheWVyLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyPX0gc2Vjb25kcyAtIFRoZSBudW1iZXIgb2Ygc2Vjb25kcyBpdCBzaG91bGQgdGFrZSB0byB0cmFuc2l0aW9uXHJcbiAgICogdG8gdGhlIG5ldyBhbmltYXRpb24uIERlZmF1bHQgaXMgemVybyBhbmQgd2lsbCBzZXQgaW1tZWRpYXRlbHkuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IGVhc2luZ0ZuIC0gVGhlIGVhc2luZyBmdW5jdGlvbiB0byB1c2Ugd2hpbGUgdHJhbnNpdGlvbmluZ1xyXG4gICAqIGJldHdlZW4gYW5pbWF0aW9ucy4gRGVmYXVsdCBpcyBFYXNpbmcuTGluZWFyLkluT3V0LlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0RlZmVycmVkfSAtIFJlc29sdmVzIG9uY2UgdGhlIGFuaW1hdGlvbiByZWFjaGVzIHRoZSBlbmQgb2YgaXRzXHJcbiAgICogdGltZWxpbmUuIExvb3BpbmcgYW5pbWF0aW9ucyBjYW4gb25seSByZXNvbHZlIGlmIHRoZXkgYXJlIGludGVycnVwdGVkIG9yXHJcbiAgICogbWFudWFsbHkgc3RvcHBlZC5cclxuICAgKi9cclxuICByZXN1bWVBbmltYXRpb24obGF5ZXJOYW1lLCBhbmltYXRpb25OYW1lLCBzZWNvbmRzLCBlYXNpbmdGbikge1xyXG4gICAgY29uc3QgbGF5ZXIgPSB0aGlzLl9sYXllck1hcFtsYXllck5hbWVdO1xyXG5cclxuICAgIGlmIChsYXllciA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGNvbnN0IGUgPSBgQ2Fubm90IHJlc3VtZSBhbmltYXRpb24gJHthbmltYXRpb25OYW1lfSBvbiBsYXllciAke2xheWVyTmFtZX0gZm9yIGhvc3QgJHt0aGlzLl9ob3N0LmlkfS4gTm8gbGF5ZXIgZXhpc3RzIHdpdGggdGhpcyBuYW1lLmA7XHJcbiAgICAgIHJldHVybiBEZWZlcnJlZC5yZWplY3QoZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gTm90aWZ5IHRoYXQgYW4gYW5pbWF0aW9uIHdhcyByZXN1bWVkXHJcbiAgICB0aGlzLmVtaXQodGhpcy5jb25zdHJ1Y3Rvci5FVkVOVFMucmVzdW1lQW5pbWF0aW9uLCB7XHJcbiAgICAgIGxheWVyTmFtZSxcclxuICAgICAgYW5pbWF0aW9uTmFtZSxcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBsYXllci5yZXN1bWVBbmltYXRpb24oXHJcbiAgICAgIGFuaW1hdGlvbk5hbWUsXHJcbiAgICAgIHNlY29uZHMsXHJcbiAgICAgIGVhc2luZ0ZuLFxyXG4gICAgICAoKSA9PiB7XHJcbiAgICAgICAgLy8gTm90aWZ5IHRoYXQgYW4gYW5pbWF0aW9uIGhhcyBzdG9wcGVkXHJcbiAgICAgICAgdGhpcy5lbWl0KHRoaXMuY29uc3RydWN0b3IuRVZFTlRTLnN0b3BBbmltYXRpb24sIHtcclxuICAgICAgICAgIGxheWVyTmFtZSxcclxuICAgICAgICAgIGFuaW1hdGlvbk5hbWUsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0sXHJcbiAgICAgIHVuZGVmaW5lZCxcclxuICAgICAgKCkgPT4ge1xyXG4gICAgICAgIC8vIE5vdGlmeSB0aGF0IGFuIGFuaW1hdGlvbiBoYXMgYmVlbiBpbnRlcnJ1cHRlZFxyXG4gICAgICAgIHRoaXMuZW1pdCh0aGlzLmNvbnN0cnVjdG9yLkVWRU5UUy5pbnRlcnJ1cHRBbmltYXRpb24sIHtcclxuICAgICAgICAgIGxheWVyTmFtZSxcclxuICAgICAgICAgIGFuaW1hdGlvbk5hbWUsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0sXHJcbiAgICAgICh7bmFtZSwgY2FuQWR2YW5jZSwgaXNRdWV1ZUVuZH0pID0+IHtcclxuICAgICAgICBpZiAobGF5ZXIuY3VycmVudEFuaW1hdGlvbiA9PT0gYW5pbWF0aW9uTmFtZSkge1xyXG4gICAgICAgICAgLy8gTm90aWZ5IHRoYXQgYSBuZXcgYW5pbWF0aW9uIGhhcyBiZWd1blxyXG4gICAgICAgICAgdGhpcy5lbWl0KHRoaXMuY29uc3RydWN0b3IuRVZFTlRTLnBsYXlOZXh0QW5pbWF0aW9uLCB7XHJcbiAgICAgICAgICAgIGxheWVyTmFtZSxcclxuICAgICAgICAgICAgYW5pbWF0aW9uTmFtZSxcclxuICAgICAgICAgICAgbmV4dFF1ZXVlZEFuaW1hdGlvbjogbmFtZSxcclxuICAgICAgICAgICAgY2FuQWR2YW5jZSxcclxuICAgICAgICAgICAgaXNRdWV1ZUVuZCxcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFN0b3AgdGhlIGN1cnJlbnQgYW5pbWF0aW9uIG9uIGEgbGF5ZXIuIFN0b3AgcmV3aW5kcyB0aGUgYW5pbWF0aW9uIHRvIHRoZVxyXG4gICAqIGJlZ2lubmluZyBhbmQgcHJldmVudHMgaXQgZnJvbSBwcm9ncmVzc2luZyBmb3J3YXJkLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBOYW1lIG9mIHRoZSBsYXllciB0aGF0IGNvbnRhaW5zIHRoZSBhbmltYXRpb24uXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciBvciBub3QgYW4gYW5pbWF0aW9uIHdhcyBzdWNjZXNzZnVsbHkgc3RvcHBlZC5cclxuICAgKi9cclxuICBzdG9wQW5pbWF0aW9uKG5hbWUpIHtcclxuICAgIGNvbnN0IGxheWVyID0gdGhpcy5fbGF5ZXJNYXBbbmFtZV07XHJcblxyXG4gICAgaWYgKGxheWVyID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgIGBEaWQgbm90IHN0b3AgYW5pbWF0aW9uIG9uIGxheWVyICR7bmFtZX0gZm9yIGhvc3QgJHt0aGlzLl9ob3N0LmlkfS4gTm8gbGF5ZXIgZXhpc3RzIHdpdGggdGhpcyBuYW1lLmBcclxuICAgICAgKTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBsYXllci5zdG9wQW5pbWF0aW9uKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQYXVzZSBjdXJyZW50IGFuaW1hdGlvbiBhbmQgd2VpZ2h0IGludGVycG9sYXRpb24gYW5pbWF0aW9uIG9uIGFsbCBsYXllcnMuXHJcblxyXG4gICAqIEByZXR1cm5zIHtib29sZWFufSAtIFdoZXRoZXIgb3Igbm90IHRoZXJlIHdhcyBhbiBleGlzdGluZyBpbnRlcnBvbGF0aW9uIG9yXHJcbiAgICogY3VycmVudCBhbmltYXRpb25zIHRvIHBhdXNlLlxyXG4gICAqL1xyXG4gIHBhdXNlKCkge1xyXG4gICAgdGhpcy5fcGF1c2VkID0gdHJ1ZTtcclxuXHJcbiAgICBsZXQgcGF1c2VkID0gZmFsc2U7XHJcbiAgICB0aGlzLl9sYXllcnMuZm9yRWFjaChsID0+IHtcclxuICAgICAgaWYgKGwucGF1c2UoKSkge1xyXG4gICAgICAgIHBhdXNlZCA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBwYXVzZWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXN1bWUgY3VycmVudCBhbmltYXRpb24gYW5kIHdlaWdodCBpbnRlcnBvbGF0aW9uIGFuaW1hdGlvbiBvbiBhbGwgbGF5ZXJzLlxyXG5cclxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSBXaGV0aGVyIG9yIG5vdCB0aGVyZSB3YXMgYW4gZXhpc3RpbmcgaW50ZXJwb2xhdGlvbiBvclxyXG4gICAqIGN1cnJlbnQgYW5pbWF0aW9ucyB0byByZXN1bWUuXHJcbiAgICovXHJcbiAgcmVzdW1lKCkge1xyXG4gICAgdGhpcy5fcGF1c2VkID0gZmFsc2U7XHJcblxyXG4gICAgbGV0IHJlc3VtZWQgPSBmYWxzZTtcclxuICAgIHRoaXMuX2xheWVycy5mb3JFYWNoKGwgPT4ge1xyXG4gICAgICBpZiAobC5yZXN1bWUoKSkge1xyXG4gICAgICAgIHJlc3VtZWQgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gcmVzdW1lZDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFkZHMgYSBuYW1lc3BhY2UgdG8gdGhlIGhvc3Qgd2l0aCB0aGUgbmFtZSBvZiB0aGUgZmVhdHVyZSB0byBjb250YWluIHByb3BlcnRpZXNcclxuICAgKiBhbmQgbWV0aG9kcyBmcm9tIHRoZSBmZWF0dXJlIHRoYXQgdXNlcnMgb2YgdGhlIGhvc3QgbmVlZCBhY2Nlc3MgdG8uXHJcbiAgICpcclxuICAgKiBAc2VlIEFuaW1hdGlvbkZlYXR1cmVcclxuICAgKi9cclxuICBpbnN0YWxsQXBpKCkge1xyXG4gICAgLyoqXHJcbiAgICAgKiBAaW5uZXJcclxuICAgICAqIEBuYW1lc3BhY2UgQW5pbWF0aW9uRmVhdHVyZVxyXG4gICAgICovXHJcbiAgICBjb25zdCBhcGkgPSBzdXBlci5pbnN0YWxsQXBpKCk7XHJcblxyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoYXBpLCB7XHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbWVtYmVyb2YgQW5pbWF0aW9uRmVhdHVyZVxyXG4gICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICogQHNlZSBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjcGF1c2VkXHJcbiAgICAgICAqL1xyXG4gICAgICBwYXVzZWQ6IHtcclxuICAgICAgICBnZXQ6ICgpID0+IHRoaXMucGF1c2VkLFxyXG4gICAgICB9LFxyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIEFuaW1hdGlvbkZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBzZWUgY29yZS9BbmltYXRpb25GZWF0dXJlI2xheWVyc1xyXG4gICAgICAgKi9cclxuICAgICAgbGF5ZXJzOiB7XHJcbiAgICAgICAgZ2V0OiAoKSA9PiB0aGlzLmxheWVycyxcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG5cclxuICAgIE9iamVjdC5hc3NpZ24oYXBpLCB7XHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbWVtYmVyb2YgQW5pbWF0aW9uRmVhdHVyZVxyXG4gICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICogQG1ldGhvZFxyXG4gICAgICAgKiBAc2VlIGNvcmUvQW5pbWF0aW9uRmVhdHVyZSNhZGRMYXllclxyXG4gICAgICAgKi9cclxuICAgICAgYWRkTGF5ZXI6IHRoaXMuYWRkTGF5ZXIuYmluZCh0aGlzKSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBtZW1iZXJvZiBBbmltYXRpb25GZWF0dXJlXHJcbiAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgKiBAbWV0aG9kXHJcbiAgICAgICAqIEBzZWUgY29yZS9BbmltYXRpb25GZWF0dXJlI3JlbW92ZUxheWVyXHJcbiAgICAgICAqL1xyXG4gICAgICByZW1vdmVMYXllcjogdGhpcy5yZW1vdmVMYXllci5iaW5kKHRoaXMpLFxyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIEFuaW1hdGlvbkZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBtZXRob2RcclxuICAgICAgICogQHNlZSBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjbW92ZUxheWVyXHJcbiAgICAgICAqL1xyXG4gICAgICBtb3ZlTGF5ZXI6IHRoaXMubW92ZUxheWVyLmJpbmQodGhpcyksXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbWVtYmVyb2YgQW5pbWF0aW9uRmVhdHVyZVxyXG4gICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICogQG1ldGhvZFxyXG4gICAgICAgKiBAc2VlIGNvcmUvQW5pbWF0aW9uRmVhdHVyZSNyZW5hbWVMYXllclxyXG4gICAgICAgKi9cclxuICAgICAgcmVuYW1lTGF5ZXI6IHRoaXMucmVuYW1lTGF5ZXIuYmluZCh0aGlzKSxcclxuXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbWVtYmVyb2YgQW5pbWF0aW9uRmVhdHVyZVxyXG4gICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICogQG1ldGhvZFxyXG4gICAgICAgKiBAc2VlIGNvcmUvQW5pbWF0aW9uRmVhdHVyZSNnZXRMYXllcldlaWdodFxyXG4gICAgICAgKi9cclxuICAgICAgZ2V0TGF5ZXJXZWlnaHQ6IHRoaXMuZ2V0TGF5ZXJXZWlnaHQuYmluZCh0aGlzKSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBtZW1iZXJvZiBBbmltYXRpb25GZWF0dXJlXHJcbiAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgKiBAbWV0aG9kXHJcbiAgICAgICAqIEBzZWUgY29yZS9BbmltYXRpb25GZWF0dXJlI3NldExheWVyV2VpZ2h0XHJcbiAgICAgICAqL1xyXG4gICAgICBzZXRMYXllcldlaWdodDogdGhpcy5zZXRMYXllcldlaWdodC5iaW5kKHRoaXMpLFxyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIEFuaW1hdGlvbkZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBtZXRob2RcclxuICAgICAgICogQHNlZSBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjcGF1c2VMYXllcldlaWdodFxyXG4gICAgICAgKi9cclxuICAgICAgcGF1c2VMYXllcldlaWdodDogdGhpcy5wYXVzZUxheWVyV2VpZ2h0LmJpbmQodGhpcyksXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbWVtYmVyb2YgQW5pbWF0aW9uRmVhdHVyZVxyXG4gICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICogQG1ldGhvZFxyXG4gICAgICAgKiBAc2VlIGNvcmUvQW5pbWF0aW9uRmVhdHVyZSNyZXN1bWVMYXllcldlaWdodFxyXG4gICAgICAgKi9cclxuICAgICAgcmVzdW1lTGF5ZXJXZWlnaHQ6IHRoaXMucmVzdW1lTGF5ZXJXZWlnaHQuYmluZCh0aGlzKSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBtZW1iZXJvZiBBbmltYXRpb25GZWF0dXJlXHJcbiAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgKiBAbWV0aG9kXHJcbiAgICAgICAqIEBzZWUgY29yZS9BbmltYXRpb25GZWF0dXJlI3BhdXNlTGF5ZXJcclxuICAgICAgICovXHJcbiAgICAgIHBhdXNlTGF5ZXI6IHRoaXMucGF1c2VMYXllci5iaW5kKHRoaXMpLFxyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIEFuaW1hdGlvbkZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBtZXRob2RcclxuICAgICAgICogQHNlZSBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjcmVzdW1lTGF5ZXJcclxuICAgICAgICovXHJcbiAgICAgIHJlc3VtZUxheWVyOiB0aGlzLnJlc3VtZUxheWVyLmJpbmQodGhpcyksXHJcblxyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIEFuaW1hdGlvbkZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBtZXRob2RcclxuICAgICAgICogQHNlZSBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjZ2V0VHJhbnNpdGlvbmluZ1xyXG4gICAgICAgKi9cclxuICAgICAgZ2V0VHJhbnNpdGlvbmluZzogdGhpcy5nZXRUcmFuc2l0aW9uaW5nLmJpbmQodGhpcyksXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbWVtYmVyb2YgQW5pbWF0aW9uRmVhdHVyZVxyXG4gICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICogQG1ldGhvZFxyXG4gICAgICAgKiBAc2VlIGNvcmUvQW5pbWF0aW9uRmVhdHVyZSNnZXRBbmltYXRpb25zXHJcbiAgICAgICAqL1xyXG4gICAgICBnZXRBbmltYXRpb25zOiB0aGlzLmdldEFuaW1hdGlvbnMuYmluZCh0aGlzKSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBtZW1iZXJvZiBBbmltYXRpb25GZWF0dXJlXHJcbiAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgKiBAbWV0aG9kXHJcbiAgICAgICAqIEBzZWUgY29yZS9BbmltYXRpb25GZWF0dXJlI2dldEN1cnJlbnRBbmltYXRpb25cclxuICAgICAgICovXHJcbiAgICAgIGdldEN1cnJlbnRBbmltYXRpb246IHRoaXMuZ2V0Q3VycmVudEFuaW1hdGlvbi5iaW5kKHRoaXMpLFxyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIEFuaW1hdGlvbkZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBtZXRob2RcclxuICAgICAgICogQHNlZSBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjZ2V0UGF1c2VkXHJcbiAgICAgICAqL1xyXG4gICAgICBnZXRQYXVzZWQ6IHRoaXMuZ2V0UGF1c2VkLmJpbmQodGhpcyksXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbWVtYmVyb2YgQW5pbWF0aW9uRmVhdHVyZVxyXG4gICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICogQG1ldGhvZFxyXG4gICAgICAgKiBAc2VlIGNvcmUvQW5pbWF0aW9uRmVhdHVyZSNnZXRBbmltYXRpb25UeXBlXHJcbiAgICAgICAqL1xyXG4gICAgICBnZXRBbmltYXRpb25UeXBlOiB0aGlzLmdldEFuaW1hdGlvblR5cGUuYmluZCh0aGlzKSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBtZW1iZXJvZiBBbmltYXRpb25GZWF0dXJlXHJcbiAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgKiBAbWV0aG9kXHJcbiAgICAgICAqIEBzZWUgY29yZS9BbmltYXRpb25GZWF0dXJlI2FkZEFuaW1hdGlvblxyXG4gICAgICAgKi9cclxuICAgICAgYWRkQW5pbWF0aW9uOiB0aGlzLmFkZEFuaW1hdGlvbi5iaW5kKHRoaXMpLFxyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIEFuaW1hdGlvbkZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBtZXRob2RcclxuICAgICAgICogQHNlZSBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjcmVtb3ZlQW5pbWF0aW9uXHJcbiAgICAgICAqL1xyXG4gICAgICByZW1vdmVBbmltYXRpb246IHRoaXMucmVtb3ZlQW5pbWF0aW9uLmJpbmQodGhpcyksXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbWVtYmVyb2YgQW5pbWF0aW9uRmVhdHVyZVxyXG4gICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICogQG1ldGhvZFxyXG4gICAgICAgKiBAc2VlIGNvcmUvQW5pbWF0aW9uRmVhdHVyZSNyZW5hbWVBbmltYXRpb25cclxuICAgICAgICovXHJcbiAgICAgIHJlbmFtZUFuaW1hdGlvbjogdGhpcy5yZW5hbWVBbmltYXRpb24uYmluZCh0aGlzKSxcclxuXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbWVtYmVyb2YgQW5pbWF0aW9uRmVhdHVyZVxyXG4gICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICogQG1ldGhvZFxyXG4gICAgICAgKiBAc2VlIGNvcmUvQW5pbWF0aW9uRmVhdHVyZSNnZXRBbmltYXRpb25CbGVuZE5hbWVzXHJcbiAgICAgICAqL1xyXG4gICAgICBnZXRBbmltYXRpb25CbGVuZE5hbWVzOiB0aGlzLmdldEFuaW1hdGlvbkJsZW5kTmFtZXMuYmluZCh0aGlzKSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBtZW1iZXJvZiBBbmltYXRpb25GZWF0dXJlXHJcbiAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgKiBAbWV0aG9kXHJcbiAgICAgICAqIEBzZWUgY29yZS9BbmltYXRpb25GZWF0dXJlI2dldEFuaW1hdGlvbkJsZW5kV2VpZ2h0XHJcbiAgICAgICAqL1xyXG4gICAgICBnZXRBbmltYXRpb25CbGVuZFdlaWdodDogdGhpcy5nZXRBbmltYXRpb25CbGVuZFdlaWdodC5iaW5kKHRoaXMpLFxyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIEFuaW1hdGlvbkZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBtZXRob2RcclxuICAgICAgICogQHNlZSBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjc2V0QW5pbWF0aW9uQmxlbmRXZWlnaHRcclxuICAgICAgICovXHJcbiAgICAgIHNldEFuaW1hdGlvbkJsZW5kV2VpZ2h0OiB0aGlzLnNldEFuaW1hdGlvbkJsZW5kV2VpZ2h0LmJpbmQodGhpcyksXHJcblxyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIEFuaW1hdGlvbkZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBtZXRob2RcclxuICAgICAgICogQHNlZSBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjcGxheUFuaW1hdGlvblxyXG4gICAgICAgKi9cclxuICAgICAgcGxheUFuaW1hdGlvbjogdGhpcy5wbGF5QW5pbWF0aW9uLmJpbmQodGhpcyksXHJcblxyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIEFuaW1hdGlvbkZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBtZXRob2RcclxuICAgICAgICogQHNlZSBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjcGxheU5leHRBbmltYXRpb25cclxuICAgICAgICovXHJcbiAgICAgIHBsYXlOZXh0QW5pbWF0aW9uOiB0aGlzLnBsYXlOZXh0QW5pbWF0aW9uLmJpbmQodGhpcyksXHJcblxyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIEFuaW1hdGlvbkZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBtZXRob2RcclxuICAgICAgICogQHNlZSBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjcGF1c2VBbmltYXRpb25cclxuICAgICAgICovXHJcbiAgICAgIHBhdXNlQW5pbWF0aW9uOiB0aGlzLnBhdXNlQW5pbWF0aW9uLmJpbmQodGhpcyksXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbWVtYmVyb2YgQW5pbWF0aW9uRmVhdHVyZVxyXG4gICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICogQG1ldGhvZFxyXG4gICAgICAgKiBAc2VlIGNvcmUvQW5pbWF0aW9uRmVhdHVyZSNyZXN1bWVBbmltYXRpb25cclxuICAgICAgICovXHJcbiAgICAgIHJlc3VtZUFuaW1hdGlvbjogdGhpcy5yZXN1bWVBbmltYXRpb24uYmluZCh0aGlzKSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBtZW1iZXJvZiBBbmltYXRpb25GZWF0dXJlXHJcbiAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgKiBAbWV0aG9kXHJcbiAgICAgICAqIEBzZWUgY29yZS9BbmltYXRpb25GZWF0dXJlI3N0b3BBbmltYXRpb25cclxuICAgICAgICovXHJcbiAgICAgIHN0b3BBbmltYXRpb246IHRoaXMuc3RvcEFuaW1hdGlvbi5iaW5kKHRoaXMpLFxyXG5cclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBtZW1iZXJvZiBBbmltYXRpb25GZWF0dXJlXHJcbiAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgKiBAbWV0aG9kXHJcbiAgICAgICAqIEBzZWUgY29yZS9BbmltYXRpb25GZWF0dXJlI3BhdXNlXHJcbiAgICAgICAqL1xyXG4gICAgICBwYXVzZTogdGhpcy5wYXVzZS5iaW5kKHRoaXMpLFxyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIEFuaW1hdGlvbkZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBtZXRob2RcclxuICAgICAgICogQHNlZSBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjcmVzdW1lXHJcbiAgICAgICAqL1xyXG4gICAgICByZXN1bWU6IHRoaXMucmVzdW1lLmJpbmQodGhpcyksXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZSBlYWNoIGFuaW1hdGlvbiBsYXllci5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBkZWx0YVRpbWUgLSBUaW1lIHNpbmNlIHRoZSBsYXN0IHVwZGF0ZS5cclxuICAgKi9cclxuICB1cGRhdGUoZGVsdGFUaW1lKSB7XHJcbiAgICBpZiAoIXRoaXMuX2xheWVycy5sZW5ndGgpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLl9wYXVzZWQpIHtcclxuICAgICAgZGVsdGFUaW1lID0gMDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBSZS1ldmFsdWF0ZSBpbnRlcm5hbCB3ZWlnaHRzIGZvciBsYXllcnNcclxuICAgIHRoaXMuX3VwZGF0ZUludGVybmFsV2VpZ2h0cygpO1xyXG5cclxuICAgIC8vIFVwZGF0ZSBsYXllcnNcclxuICAgIHRoaXMuX2xheWVycy5mb3JFYWNoKGxheWVyID0+IHtcclxuICAgICAgbGF5ZXIudXBkYXRlKGRlbHRhVGltZSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBzdXBlci51cGRhdGUoZGVsdGFUaW1lKTtcclxuICB9XHJcblxyXG4gIGRpc2NhcmQoKSB7XHJcbiAgICB0aGlzLl9sYXllcnMuZm9yRWFjaChsYXllciA9PiB7XHJcbiAgICAgIGxheWVyLmRpc2NhcmQoKTtcclxuICAgIH0pO1xyXG5cclxuICAgIGRlbGV0ZSB0aGlzLl9sYXllcnM7XHJcbiAgICBkZWxldGUgdGhpcy5fbGF5ZXJNYXA7XHJcblxyXG4gICAgc3VwZXIuZGlzY2FyZCgpO1xyXG4gIH1cclxufVxyXG5cclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEFuaW1hdGlvbkZlYXR1cmUsICdFVkVOVFMnLCB7XHJcbiAgdmFsdWU6IHtcclxuICAgIC4uLk9iamVjdC5nZXRQcm90b3R5cGVPZihBYnN0cmFjdEhvc3RGZWF0dXJlKS5FVkVOVFMsXHJcbiAgICBhZGRMYXllcjogJ29uQWRkTGF5ZXJFdmVudCcsXHJcbiAgICByZW1vdmVMYXllcjogJ29uUmVtb3ZlTGF5ZXJFdmVudCcsXHJcbiAgICByZW5hbWVMYXllcjogJ29uUmVuYW1lTGF5ZXJFdmVudCcsXHJcbiAgICBhZGRBbmltYXRpb246ICdvbkFkZEFuaW1hdGlvbkV2ZW50JyxcclxuICAgIHJlbW92ZUFuaW1hdGlvbjogJ29uUmVtb3ZlZEFuaW1hdGlvbkV2ZW50JyxcclxuICAgIHJlbmFtZUFuaW1hdGlvbjogJ29uUmVuYW1lQW5pbWF0aW9uRXZlbnQnLFxyXG4gICAgcGxheUFuaW1hdGlvbjogJ29uUGxheUV2ZW50JyxcclxuICAgIHBsYXlOZXh0QW5pbWF0aW9uOiAnb25OZXh0RXZlbnQnLFxyXG4gICAgcGF1c2VBbmltYXRpb246ICdvblBhdXNlRXZlbnQnLFxyXG4gICAgcmVzdW1lQW5pbWF0aW9uOiAnb25SZXN1bWVFdmVudCcsXHJcbiAgICBpbnRlcnJ1cHRBbmltYXRpb246ICdvbkludGVycnVwdEV2ZW50JyxcclxuICAgIHN0b3BBbmltYXRpb246ICdvblN0b3BFdmVudCcsXHJcbiAgfSxcclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBBbmltYXRpb25GZWF0dXJlO1xyXG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxuLyogZXNsaW50LWRpc2FibGUgbm8tdW5kZXJzY29yZS1kYW5nbGUgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXG5pbXBvcnQgTWFuYWdlZEFuaW1hdGlvbkxheWVySW50ZXJmYWNlIGZyb20gJy4vYW5pbXBhY2svTWFuYWdlZEFuaW1hdGlvbkxheWVySW50ZXJmYWNlJztcbmltcG9ydCB7IEFuaW1hdGlvblR5cGVzIH0gZnJvbSAnLi9hbmltcGFjay9BbmltYXRpb25GZWF0dXJlJztcbmltcG9ydCBTU01MU3BlZWNobWFya0ludGVyZmFjZSBmcm9tICcuL2F3c3BhY2svU1NNTFNwZWVjaG1hcmtJbnRlcmZhY2UnO1xuaW1wb3J0IEFic3RyYWN0SG9zdEZlYXR1cmUgZnJvbSAnLi9BYnN0cmFjdEhvc3RGZWF0dXJlJztcbmltcG9ydCB7IFF1YWRyYXRpYyB9IGZyb20gJy4vYW5pbXBhY2svRWFzaW5nJztcbmltcG9ydCBNYXRoVXRpbHMgZnJvbSAnLi9NYXRoVXRpbHMnO1xuaW1wb3J0IFV0aWxzIGZyb20gJy4vVXRpbHMnO1xuXG4vKipcbiAqIEVudW0gZm9yIGF4aXMgZGlyZWN0aW9ucy5cbiAqXG4gKiBAcmVhZG9ubHlcbiAqIEBlbnVtIHtDbGFzc31cbiAqL1xuY29uc3QgQXhpc01hcCA9IHtcbiAgUG9zaXRpdmVYOiBbMSwgMCwgMF0sXG4gIE5lZ2F0aXZlWDogWy0xLCAwLCAwXSxcbiAgUG9zaXRpdmVZOiBbMCwgMSwgMF0sXG4gIE5lZ2F0aXZlWTogWzAsIC0xLCAwXSxcbiAgUG9zaXRpdmVaOiBbMCwgMCwgMV0sXG4gIE5lZ2F0aXZlWjogWzAsIDAsIC0xXSxcbn07XG5cbmNvbnN0IEZhY2VUYXJnZXRUeXBlcyA9IHtcbiAgRXllQ2VudGVyOiAwLFxuICBFeWVMZWZ0OiAxLFxuICBFeWVSaWdodDogMixcbiAgTW91dGg6IDMsXG59XG5cbi8vIEF2ZXJhZ2UgZGlzdGFuY2UgYmV0d2VlbiBwdXBpbHMgaXMgLjA2NG0sIGdvbGRlbiByYXRpbyBzYXlzIHRoYXQgdGhlIGRpc3RhbmNlXG4vLyBmcm9tIGNlbnRlciBvZiB0aGUgcHVwaWxzIHRvIHRoZSBjZW50ZXIgb2YgdGhlIG1vdXRoIHNob3VsZCBiZSBhYm91dCB0aGUgc2FtZS5cbmNvbnN0IEZhY2VWZWN0b3JzID0gW1xuICBbMCwgMCwgMF0sXG4gIFstLjAzMiwgMCwgMF0sXG4gIFsuMDMyLCAwLCAwXSxcbiAgWzAsIC0uMDY0LCAwXVxuXTtcblxuLy8gVGltZSByYW5nZXMgdG8gdXNlIHdoZW4gY2hvb3NpbmcgYSBuZXcgcmFuZG9tIHdhaXQgdGltZSBiZXR3ZWVuIHNhY2NhZGVzXG5jb25zdCBNaWNyb1NhY2NhZGVXYWl0UmFuZ2VzID0ge1xuICBkZWZhdWx0OiBbMC44LCAxLjc1XSxcbiAgcG9zdE1hY3JvOiBbMC42LCAxLjMxMjVdLFxufTtcblxuY29uc3QgTWFjcm9TYWNjYWRlV2FpdFJhbmdlcyA9IHtcbiAgZGVmYXVsdDogWzUuMCwgOC4wXSxcbiAgbW91dGhUYXJnZXQ6IFswLjIsIDAuNzVdLCAvLyBMb29rIGF3YXkgZnJvbSBhIG1vdXRoIHRhcmdldCB0aGUgZmFzdGVzdFxuICBleWVUYXJnZXQ6IFsxLjUsIDQuMF1cbn07XG5cbi8vIE1pbmltdW0gYW5nbGUgaW4gZGVncmVlcyB0aGUgZXllIGRpcmVjdGlvbiBtdXN0IGNoYW5nZSB0byB0cmlnZ2VyIGEgYmxpbmsgYW5pbWF0aW9uXG5jb25zdCBCbGlua1RocmVzaG9sZCA9IDM1O1xuXG4vLyBNYXhpbXVtIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gdXNlIGZvciBjYWxjdWxhdGluZyBsb29rIHNwZWVkXG5jb25zdCBNYXhEZWx0YSA9IDEwMCAvIDM7XG5cbi8qKlxuICogUG9pbnRPZkludGVyZXN0IGNvbnRyb2xzIHRoZSBnYXplIGRpcmVjdGlvbiBvZiB0aGUgaG9zdC4gR2l2ZW4gb25lIG9yIG1vcmVcbiAqIGFuaW1hdGlvbnMgb2YgdHlwZSBCbGVuZDJkU3RhdGUsIGl0IGNhbGN1bGF0ZXMgdGhlIGFuZ2xlcyBiZXR3ZWVuIHRoZSBsb29rVHJhY2tlclxuICogb2JqZWN0IChnZW5lcmFsbHkgYSBqb2ludCBpbiB0aGUgaG9zdCdzIHNrZWxldG9uKSBhbmQgdGhlIGxvb2tUYXJnZXQgKHRoZSBvYmplY3RcbiAqIHRoZSBob3N0IHNob3VsZCBsb29rIGF0KSBhbmQgZHJpdmVzIHRoZSBtYW5hZ2VkIEJsZW5kMmRTdGF0ZXMnIFggYW5kIFkgYmxlbmRcbiAqIHZhbHVlcyB1c2luZyB0aGUgcmVzdWx0LiBZb3UgY2FuIG9wdGlvbmFsbHkgYWRkIHNhY2NhZGljIG1vdmVtZW50IHRvIGFueSBtYW5hZ2VkXG4gKiBhbmltYXRpb24gdG8gaGVscCBtYWtlIHRoZSBob3N0J3MgZXllcyBhcHBlYXIgYWxpdmUgd2hlbiBmb2N1c2VkIG9uIHRoZSBzYW1lXG4gKiBwb2ludCBmb3IgZXh0ZWRlZCBwZXJpb2RzIG9mIHRpbWUuIElmIGJsaW5rIGFuaW1hdGlvbnMgYXJlIHNwZWNpZmllZCwgYSBibGlua1xuICogd2lsbCBiZSBwbGF5ZWQgZHVyaW5nIGxhcmdlIGNoYW5nZXMgaW4gZ2F6ZSBkaXJlY3Rpb24uXG4gKlxuICogQGV4dGVuZHMgQWJzdHJhY3RIb3N0RmVhdHVyZVxuICogQGFsaWFzIGNvcmUvUG9pbnRPZkludGVyZXN0RmVhdHVyZVxuICogQGltcGxlbWVudHMgU1NNTFNwZWVjaG1hcmtJbnRlcmZhY2VcbiAqIEBpbXBsZW1lbnRzIE1hbmFnZWRBbmltYXRpb25MYXllckludGVyZmFjZVxuICovXG5jbGFzcyBQb2ludE9mSW50ZXJlc3RGZWF0dXJlIGV4dGVuZHMgQWJzdHJhY3RIb3N0RmVhdHVyZS5taXgoXG4gIFNTTUxTcGVlY2htYXJrSW50ZXJmYWNlLk1peGluLFxuICBNYW5hZ2VkQW5pbWF0aW9uTGF5ZXJJbnRlcmZhY2UuTWl4aW5cbikge1xuICAvKipcbiAgICogQGNvbnN0cnVjdG9yXG4gICAqXG4gICAqIEBwYXJhbSB7Y29yZS9Ib3N0T2JqZWN0fSBob3N0IC0gSG9zdCB0aGF0IG93bnMgdGhlIGZlYXR1cmUuXG4gICAqIEBwYXJhbSB7T2JqZWN0PX0gb3B0aW9ucyAtIE9wdGlvbnMgZm9yIHRoZSBmZWF0dXJlLlxuICAgKiBAcGFyYW0ge09iamVjdD19IHRhcmdldCAtIDNEIHRyYW5zZm9ybWF0aW9uIG5vZGUgdGhhdCB0aGUgaG9zdCBzaG91bGQgdHJ5IHRvXG4gICAqIGxvb2sgYXQuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zLmxvb2tUcmFja2VyIC0gM0QgdHJhbnNmb3JtYXRpb24gbm9kZSB0aGF0IHJlcHJlc2VudHNcbiAgICogdGhlIGRpcmVjdGlvbiB0aGUgaG9zdCBpcyBjdXJyZW50bHkgbG9va2luZyBkdXJpbmcgYW5pbWF0aW9uLlxuICAgKiBAcGFyYW0ge09iamVjdD19IG9wdGlvbnMuc2NlbmUgLSBFbmdpbmUtc3BlY2lmaWMgc2NlbmUgb2JqZWN0IHRoYXQgY29udGFpbnNcbiAgICogdGhlIGhvc3QuIFRoaXMgb2JqZWN0IG11c3QgYmUgZGVmaW5lZCBpZiB1c2luZyAnc2V0VGFyZ2V0QnlOYW1lJyBvciAnU2V0VGFyZ2V0QnlJZCdcbiAgICogbWV0aG9kcy5cbiAgICogQHBhcmFtIHtPYmplY3Q9fSBsb29rT3B0aW9ucyAtIE9wdGlvbnMgZm9yIHRoZSBsb29rIGFuaW1hdGlvbiBsYXllcnMuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbbG9va09wdGlvbnMuYmxlbmRUaW1lPTAuMV0gLSBEZWZhdWx0IGFtb3VudCBvZiB0aW1lIGl0IHdpbGxcbiAgICogdGFrZSB0byBtYW5pcHVsYXRlIHRoZSB3ZWlnaHRzIG9mIHRoZSBsb29rIGxheWVycy5cbiAgICogQHBhcmFtIHtudW1iZXJ9IFtsb29rT3B0aW9ucy5lYXNpbmdGbj1RdWFkcmF0aWMuSW5PdXRdIC0gRGVmYXVsdCBlYXNpbmcgZnVuY3Rpb25cbiAgICogdG8gdXNlIHdoZW4gbWFuaXB1bGF0aW5nIGxvb2sgbGF5ZXIgd2VpZ2h0cy5cbiAgICogQHBhcmFtIHtBcnJheS48T2JqZWN0Pn0gW2xvb2tPcHRpb25zLmxheWVycz1bXV0gLSBBbiBhcnJheSBvZiBsYXllciBvcHRpb25zXG4gICAqIG9iamVjdHMgdG8gcmVnaXN0ZXIgYXMgbG9vayBsYXllcnMuXG4gICAqIEBwYXJhbSB7T2JqZWN0PX0gYmxpbmtPcHRpb25zIC0gT3B0aW9ucyBmb3IgdGhlIGJsaW5rIGFuaW1hdGlvbiBsYXllcnMuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbYmxpbmtPcHRpb25zLmJsZW5kVGltZT0wLjA3NV0gLSBEZWZhdWx0IGFtb3VudCBvZiB0aW1lIGl0XG4gICAqIHdpbGwgdGFrZSB0byBtYW5pcHVsYXRlIHRoZSB3ZWlnaHRzIG9mIHRoZSBibGluayBsYXllcnMuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbYmxpbmtPcHRpb25zLmVhc2luZ0ZuPVF1YWRyYXRpYy5Jbk91dF0gLSBEZWZhdWx0IGVhc2luZyBmdW5jdGlvblxuICAgKiB0byB1c2Ugd2hlbiBtYW5pcHVsYXRpbmcgYmxpbmsgbGF5ZXIgd2VpZ2h0cy5cbiAgICogQHBhcmFtIHtBcnJheS48T2JqZWN0Pn0gW2JsaW5rT3B0aW9ucy5sYXllcnM9W11dIC0gQW4gYXJyYXkgb2YgbGF5ZXIgb3B0aW9uc1xuICAgKiBvYmplY3RzIHRvIHJlZ2lzdGVyIGFzIGJsaW5rIGxheWVycy5cbiAgICovXG4gIGNvbnN0cnVjdG9yKFxuICAgIGhvc3QsXG4gICAge1xuICAgICAgdGFyZ2V0LFxuICAgICAgbG9va1RyYWNrZXIsXG4gICAgICBzY2VuZVxuICAgIH0gPSB7fSxcbiAgICB7XG4gICAgICBibGVuZFRpbWU6IGxvb2tCbGVuZFRpbWUgPSAwLjEsXG4gICAgICBlYXNpbmdGbjogbG9va0Vhc2luZ0ZuID0gUXVhZHJhdGljLkluT3V0LFxuICAgICAgbGF5ZXJzOiBsb29rTGF5ZXJzID0gW10sXG4gICAgfSA9IHt9LFxuICAgIHtcbiAgICAgIGJsZW5kVGltZTogYmxpbmtCbGVuZFRpbWUgPSAwLjA3NSxcbiAgICAgIGVhc2luZ0ZuOiBibGlua0Vhc2luZ0ZuID0gUXVhZHJhdGljLkluT3V0LFxuICAgICAgbGF5ZXJzOiBibGlua0xheWVycyA9IFtdLFxuICAgIH0gPSB7fVxuICApIHtcbiAgICBzdXBlcihob3N0KTtcblxuICAgIGlmICghdGhpcy5jb25zdHJ1Y3Rvci5fdmFsaWRhdGVUcmFuc2Zvcm1PYmplY3QobG9va1RyYWNrZXIpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBpbml0aWFsaXplIFBvaW50T2ZJbnRlcmVzdEZlYXR1cmUgb24gaG9zdCAke3RoaXMuX2hvc3QuaWR9LiBMb29rVHJhY2tlciBtdXN0IGJlIGRlZmluZWQgYXMgYSB2YWxpZCB0cmFuc2Zvcm1hdGlvbiBvYmplY3QuYCk7XG4gICAgfVxuICAgIHRoaXMuX2xvb2tUcmFja2VyID0gbG9va1RyYWNrZXI7XG5cbiAgICB0aGlzLl9zY2VuZSA9IHNjZW5lO1xuICAgIHRoaXMuX3RhcmdldCA9IHRhcmdldCB8fCBudWxsO1xuICAgIHRoaXMuX3ByZXZUYXJnZXRQb3MgPSBbMCwgMCwgMF07XG4gICAgdGhpcy5faXNUYXJnZXRNb3ZpbmcgPSBmYWxzZTtcbiAgICB0aGlzLl9sb29rTGF5ZXJzID0gdGhpcy5fbG9va0xheWVycyB8fCB7fTtcbiAgICB0aGlzLl90cmFja2luZ0NvbmZpZ3MgPSB0aGlzLl90cmFja2luZ0NvbmZpZ3MgfHwgW107XG4gICAgdGhpcy5fYmxpbmtMYXllcnMgPSB0aGlzLl9ibGlua0xheWVycyB8fCB7fTtcblxuICAgIC8vIFJlZ2lzdGVyIHRoZSBsb29rIGxheWVyc1xuICAgIGxvb2tMYXllcnMuZm9yRWFjaCgoe1xuICAgICAgbmFtZSxcbiAgICAgIGFuaW1hdGlvbixcbiAgICAgIG1heFNwZWVkLFxuICAgICAgcmVmZXJlbmNlLFxuICAgICAgZm9yd2FyZEF4aXMsXG4gICAgICBoYXNTYWNjYWRlLFxuICAgICAgYmxlbmRUaW1lLFxuICAgICAgZWFzaW5nRm5cbiAgICB9KSA9PiB7XG4gICAgICB0aGlzLnJlZ2lzdGVyTG9va0xheWVyKG5hbWUsIHtcbiAgICAgICAgYW5pbWF0aW9uLFxuICAgICAgICBtYXhTcGVlZCxcbiAgICAgICAgcmVmZXJlbmNlLFxuICAgICAgICBmb3J3YXJkQXhpcyxcbiAgICAgICAgaGFzU2FjY2FkZSxcbiAgICAgICAgYmxlbmRUaW1lOiBibGVuZFRpbWUgIT09IHVuZGVmaW5lZCA/IGJsZW5kVGltZSA6IGxvb2tCbGVuZFRpbWUsXG4gICAgICAgIGVhc2luZ0ZuOiBlYXNpbmdGbiAhPT0gdW5kZWZpbmVkID8gZWFzaW5nRm4gOiBsb29rRWFzaW5nRm4sXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIC8vIFJlZ2lzdGVyIHRoZSBibGluayBsYXllcnNcbiAgICBibGlua0xheWVycy5mb3JFYWNoKCh7IG5hbWUsIGFuaW1hdGlvbiwgYmxlbmRUaW1lLCBlYXNpbmdGbiB9KSA9PiB7XG4gICAgICB0aGlzLnJlZ2lzdGVyQmxpbmtMYXllcihuYW1lLCB7XG4gICAgICAgIGFuaW1hdGlvbixcbiAgICAgICAgYmxlbmRUaW1lOiBibGVuZFRpbWUgIT09IHVuZGVmaW5lZCA/IGJsZW5kVGltZSA6IGJsaW5rQmxlbmRUaW1lLFxuICAgICAgICBlYXNpbmdGbjogZWFzaW5nRm4gIT09IHVuZGVmaW5lZCA/IGVhc2luZ0ZuIDogYmxpbmtFYXNpbmdGbixcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgYW5kIHNldHMgdGhlIHRhcmdldCBvYmplY3QgdGhlIGhvc3Qgc2hvdWxkIGxvb2sgYXQuXG4gICAqXG4gICAqIEB0eXBlIHtPYmplY3R8bnVsbH1cbiAgICovXG4gIGdldCB0YXJnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3RhcmdldDtcbiAgfVxuXG4gIHNldCB0YXJnZXQodGFyZ2V0KSB7XG4gICAgdGhpcy5fdGFyZ2V0ID0gdGFyZ2V0IHx8IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGEgdmVjdG9yIHJlcHJlc2VudGluZyB0aGUgZ2xvYmFsIHBvc2l0aW9uIG9mIGFuIG9iamVjdC4gU2hvdWxkIGJlXG4gICAqIG92ZXJsb2FkZWQgZm9yIGVhY2ggcmVuZGVyaW5nIGVuZ2luZSBpbXBsZW1lbnRhdGlvbi5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICpcbiAgICogQHBhcmFtIHthbnl9IF9vYmogLSBFbmdpbmUtc3BlY2lmaWMgM0QgdHJhbnNmb3JtIG9iamVjdC5cbiAgICpcbiAgICogQHJldHVybnMge0FycmF5LjxudW1iZXI+fSAtIEFuIGFycmF5IGNvbnNpc3Rpbmcgb2YgdGhyZWUgbnVtYmVycyByZXByZXNlbnRpbmdcbiAgICogeCwgeSBhbmQgeiBjb29yZGluYXRlcy5cbiAgICovXG4gIHN0YXRpYyBfZ2V0V29ybGRQb3NpdGlvbihvYmopIHtcbiAgICByZXR1cm4gWzAsIDAsIDBdO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIG1hdHJpeCByZXByZXNlbnRpbmcgdGhlIGdsb2JhbCB0cmFuc2Zvcm1hdGlvbiBtYXRyaXggb2YgYW4gb2JqZWN0LlxuICAgKiBTaG91bGQgYmUgb3ZlcmxvYWRlZCBmb3IgZWFjaCByZW5kZXJpbmcgZW5naW5lIGltcGxlbWVudGF0aW9uLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKlxuICAgKiBAcGFyYW0ge2FueX0gb2JqIC0gRW5naW5lLXNwZWNpZmljIDNEIHRyYW5zZm9ybSBvYmplY3QuXG4gICAqXG4gICAqIEByZXR1cm5zIHtBcnJheS48bnVtYmVyPn0gLSBBbiBhcnJheSBjb25zaXN0aW5nIG9mIDE2IG51bWJlcnMgcmVwcmVzZW50aW5nXG4gICAqIHRoZSAzZCB0cmFuc2Zvcm1hdGlvbi5cbiAgICovXG4gIHN0YXRpYyBfZ2V0V29ybGRNYXRyaXgob2JqKSB7XG4gICAgcmV0dXJuIFsxLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAxXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSb3RhdGUgdGhlIGdpdmVuIGxvY2FsIGRpcmVjdGlvbiB2ZWN0b3IgYnkgdGhlIG9iamVjdCdzIHdvcmxkIHJvdGF0aW9uIG1hdHJpeC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICpcbiAgICogQHBhcmFtIHthbnl9IG9iaiAtIEVuZ2luZS1zcGVjaWZpYyAzRCB0cmFuc2Zvcm0gb2JqZWN0LlxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBmb3J3YXJkVmVjdG9yIC0gVW5pdCB2ZWN0b3IgcmVwcmVzZW50aW5nIHRoZSBsb2NhbFxuICAgKiBmb3J3YXJkIGRpcmVjdGlvbiBvZiB0aGUgb2JqZWN0LlxuICAgKlxuICAgKiBAcmV0dXJucyB7QXJyYXkuPG51bWJlcj59XG4gICAqL1xuICBzdGF0aWMgX2dldE9iamVjdERpcmVjdGlvbihvYmosIGZvcndhcmRWZWN0b3IgPSBBeGlzTWFwLlBvc2l0aXZlWikge1xuICAgIGNvbnN0IHJvdGF0aW9uID0gTWF0aFV0aWxzLmdldFJvdGF0aW9uTWF0cml4KHRoaXMuX2dldFdvcmxkTWF0cml4KG9iaikpO1xuXG4gICAgcmV0dXJuIE1hdGhVdGlscy5yb3RhdGVWZWN0b3IoZm9yd2FyZFZlY3Rvciwgcm90YXRpb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSBob3Jpem9udGFsIGFuZCB2ZXJ0aWNhbCBsb29rIGFuZ2xlcyBpbiBkZWdyZWVzIGdpdmVuIHNwaGVyaWNhbCB0aGV0YVxuICAgKiBhbmQgcGhpIGFuZ2xlcyBpbiByYWRpYW5zLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gdGhldGEgLSBWZXJ0aWNhbC9wb2xhciBhbmdsZSBpbiByYWRpYW5zIHdoZXJlIDAgcG9pbnRzIGRpcmVjdGx5XG4gICAqIGFsb25nIHBvc2l0aXZlIFkgYXhpcy5cbiAgICogQHBhcmFtIHtudW1iZXJ9IHBoaSAtIEhvcml6b250YWwvYXppbXV0aGFsIGFuZ2xlIGluIHJhZGlhbnMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtPYmplY3R9IC0gQW4gb2JqZWN0IHdpdGggdGhlIHNpZ25hdHVyZSB7aDogbnVtYmVyLCB2OiBudW1iZXJ9IHdoZXJlXG4gICAqIGggcmVwcmVzZW50cyBob3Jpem9udGFsIHJvdGF0aW9uIGluIGRlZ3JlZXMgYW5kIHYgcmVwcmVzZW50cyB2ZXJ0aWNhbCByb3RhdGlvblxuICAgKiBpbiBkZWdyZWVzLlxuICAgKi9cbiAgc3RhdGljIF9zcGhlcmljYWxUb0JsZW5kVmFsdWUodGhldGEsIHBoaSkge1xuICAgIGNvbnN0IGggPSBNYXRoVXRpbHMudG9EZWdyZWVzKHBoaSk7XG5cbiAgICAvLyBPZmZzZXQgdGhlIHZlcnRpY2FsIGFuZ2xlIHNvIDAgaXMgcG9pbnRpbmcgZm9yd2FyZCBpbnN0ZWFkIG9mIHVwXG4gICAgY29uc3QgdiA9IE1hdGhVdGlscy50b0RlZ3JlZXModGhldGEpIC0gOTA7XG5cbiAgICAvLyBDb252ZXJ0IHZlcnRpY2FsIGFuZ2xlIHRvIC0xODAsIDE4MCByYW5nZVxuICAgIHJldHVybiB7IGgsIHYgfVxuICB9XG5cbiAgX29uTGF5ZXJBZGRlZCh7IG5hbWUgfSkge1xuICAgIHRoaXMuX2xvb2tMYXllcnMgPSB0aGlzLl9sb29rTGF5ZXJzIHx8IHt9O1xuICAgIHRoaXMuX2JsaW5rTGF5ZXJzID0gdGhpcy5fYmxpbmtMYXllcnMgfHwge307XG5cbiAgICBzdXBlci5fb25MYXllckFkZGVkKHsgbmFtZSB9KTtcblxuICAgIC8vIFZhbGlkYXRlIHRoZSBsb29rIGFuaW1hdGlvblxuICAgIGlmICh0aGlzLl9sb29rTGF5ZXJzW25hbWVdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuX3JlZ2lzdGVyTG9va0FuaW1hdGlvbihuYW1lLCB0aGlzLl9sb29rTGF5ZXJzW25hbWVdKTtcbiAgICB9XG4gIH1cblxuICBfb25BbmltYXRpb25BZGRlZCh7IGxheWVyTmFtZSwgYW5pbWF0aW9uTmFtZSB9KSB7XG4gICAgdGhpcy5fbG9va0xheWVycyA9IHRoaXMuX2xvb2tMYXllcnMgfHwge307XG4gICAgdGhpcy5fYmxpbmtMYXllcnMgPSB0aGlzLl9ibGlua0xheWVycyB8fCB7fTtcblxuICAgIHN1cGVyLl9vbkFuaW1hdGlvbkFkZGVkKHsgbGF5ZXJOYW1lIH0pO1xuXG4gICAgLy8gVmFsaWRhdGUgdGhlIGxvb2sgYW5pbWF0aW9uXG4gICAgaWYgKHRoaXMuX2xvb2tMYXllcnNbbGF5ZXJOYW1lXSA9PT0gYW5pbWF0aW9uTmFtZSkge1xuICAgICAgdGhpcy5fcmVnaXN0ZXJMb29rQW5pbWF0aW9uKGxheWVyTmFtZSwgYW5pbWF0aW9uTmFtZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEVuc3VyZSB0aGF0IHJlZ2lzdGVyZWQgbG9vayBhbmltYXRpb25zIGFyZSBCbGVuZDJkU3RhdGVzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGF5ZXJOYW1lIC0gTmFtZSBvZiB0aGUgbGF5ZXIgdGhhdCBjb250YWlucyB0aGUgbG9vayBhbmltYXRpb24uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhbmltYXRpb25OYW1lIC0gTmFtZSBvZiB0aGUgYW5pbWF0aW9uLlxuICAgKi9cbiAgX3JlZ2lzdGVyTG9va0FuaW1hdGlvbihsYXllck5hbWUsIGFuaW1hdGlvbk5hbWUpIHtcbiAgICBpZiAodGhpcy5fbWFuYWdlZExheWVyc1tsYXllck5hbWVdLmFuaW1hdGlvbnNbYW5pbWF0aW9uTmFtZV0uaXNBY3RpdmUpIHtcbiAgICAgIGlmIChcbiAgICAgICAgQW5pbWF0aW9uVHlwZXNbdGhpcy5faG9zdC5BbmltYXRpb25GZWF0dXJlLmdldEFuaW1hdGlvblR5cGUoXG4gICAgICAgICAgbGF5ZXJOYW1lLFxuICAgICAgICAgIGFuaW1hdGlvbk5hbWVcbiAgICAgICAgKV0gIT09IEFuaW1hdGlvblR5cGVzLmJsZW5kMmRcbiAgICAgICkge1xuICAgICAgICAvLyBXYXJuIGFuZCBkZWFjdGl2YXRlIGlmIHRoZSByZWdpc3RlcmVkIHN0YXRlIGlzIG5vdCBibGVuZDJkXG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICBgQ2Fubm90IHJlZ2lzdGVyIFBvaW50IG9mIEludGVyZXN0IGxvb2sgYW5pbWF0aW9uICR7YW5pbWF0aW9uTmFtZX0gb24gbGF5ZXIgJHtsYXllck5hbWV9IGZvciBob3N0ICR7dGhpcy5faG9zdC5pZH0uIExvb2sgYW5pbWF0aW9ucyBtdXN0IGJlIG9mIHR5cGUgJ2JsZW5kMmQnLmBcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5fbWFuYWdlZExheWVyc1tsYXllck5hbWVdLmFuaW1hdGlvbnNbXG4gICAgICAgICAgYW5pbWF0aW9uTmFtZVxuICAgICAgICBdLmlzQWN0aXZlID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIHRoZSBnaXZlbiBvYmplY3QgaXMgbm90IG9mIGFuIGVuZ2luZS1zcGVjaWZpYyB0eXBlLiBTaG91bGRcbiAgICogYmUgb3ZlcmxvYWRlZCBmb3IgZWFjaCByZW5kZXJpbmcgZW5naW5lIGltcGxlbWVudGF0aW9uLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKlxuICAgKiBAcGFyYW0ge2FueX0gb2JqIC0gT2JqZWN0IHRvIHZhbGlkYXRlLlxuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIHN0YXRpYyBfdmFsaWRhdGVUcmFuc2Zvcm1PYmplY3Qob2JqKSB7XG4gICAgcmV0dXJuIG9iaiBpbnN0YW5jZW9mIE9iamVjdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiB0aGUgZ2l2ZW4gY29uZmlndXJhdGlvbiBvYmplY3QgaGFzIGFscmVhZHkgYmVlbiBzdG9yZWQgYXMgYSB0cmFja2luZ1xuICAgKiBjb25maWcuIElmIGl0IGhhcywgcmV0dXJuIHRoZSBzdG9yZWQgY29uZmlndXJhdGlvbi4gT3RoZXJ3aXNlLCBzdG9yZSBhbmRcbiAgICogcmV0dXJuIGl0LlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gY29uZmlnIC0gT2JqZWN0IGNvbnRhaW5pbmcgdHJhY2tlciwgcmVmZXJlbmNlIGFuZCBmb3J3YXJkQXhpc1xuICAgKiBwcm9wZXJ0aWVzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7T2JqZWN0fVxuICAgKi9cbiAgX2FkZFRyYWNraW5nQ29uZmlnKGNvbmZpZykge1xuICAgIGNvbnN0IHRyYWNraW5nQ29uZmlnID0gdGhpcy5fdHJhY2tpbmdDb25maWdzLmZpbmQoYyA9PlxuICAgICAgYy5yZWZlcmVuY2UgPT09IGNvbmZpZy5yZWZlcmVuY2UgJiYgYy5mb3J3YXJkQXhpcyA9PT0gY29uZmlnLmZvcndhcmRBeGlzXG4gICAgKTtcblxuICAgIGlmICh0cmFja2luZ0NvbmZpZykge1xuICAgICAgcmV0dXJuIHRyYWNraW5nQ29uZmlnO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25maWcuYW5nbGVzID0geyBoOiAwLCB2OiAwIH07XG4gICAgICBjb25maWcucHJldkFuZ2xlcyA9IHsgaDogMCwgdjogMCB9O1xuICAgICAgdGhpcy5fdHJhY2tpbmdDb25maWdzLnB1c2goY29uZmlnKTtcbiAgICAgIHJldHVybiBjb25maWc7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgZGlzdGFuY2UgYmV0d2VlbiB0aGUgbG9vayB0cmFja2VyIGFuZCB0aGUgbG9vayB0YXJnZXQuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICBfZ2V0VGFyZ2V0RGlzdGFuY2UoKSB7XG4gICAgLy8gRmluZCB0aGUgdmVjdG9yIGJldHdlZW4gdGhlIGdsb2JhbCBwb3NpdGlvbnMgb2YgdHJhY2tlciBhbmQgdGFyZ2V0XG4gICAgY29uc3Qgc291cmNlUG9zaXRpb24gPSB0aGlzLmNvbnN0cnVjdG9yLl9nZXRXb3JsZFBvc2l0aW9uKHRoaXMuX2xvb2tUcmFja2VyKTtcbiAgICBjb25zdCB0YXJnZXRQb3NpdGlvbiA9IHRoaXMuY29uc3RydWN0b3IuX2dldFdvcmxkUG9zaXRpb24odGhpcy5fdGFyZ2V0KTtcbiAgICBjb25zdCBsb29rVmVjdG9yID0gW1xuICAgICAgdGFyZ2V0UG9zaXRpb25bMF0gLSBzb3VyY2VQb3NpdGlvblswXSxcbiAgICAgIHRhcmdldFBvc2l0aW9uWzFdIC0gc291cmNlUG9zaXRpb25bMV0sXG4gICAgICB0YXJnZXRQb3NpdGlvblsyXSAtIHNvdXJjZVBvc2l0aW9uWzJdXG4gICAgXTtcblxuICAgIHJldHVybiBNYXRoVXRpbHMuZ2V0VmVjdG9yTWFnbml0dWRlKGxvb2tWZWN0b3IpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0IGFsbCBzdG9yZWQgdHJhY2tpbmcgYW5nbGVzIHRvIDAuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfcmVzZXRMb29rQW5nbGVzKCkge1xuICAgIHRoaXMuX3RyYWNraW5nQ29uZmlncy5mb3JFYWNoKCh7IGFuZ2xlcyB9KSA9PiB7XG4gICAgICBhbmdsZXMuaCA9IDA7XG4gICAgICBhbmdsZXMudiA9IDA7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogU3RvcmUgdGhlIGRpZmZlcmVuY2UgaW4gaG9yaXpvbnRhbCBhbmQgdmVydGljYWwgcm90YXRpb24gZm9yIHRoZSB0cmFja2VyJ3NcbiAgICogcmVmZXJlbmNlIHJvdGF0aW9uIGFuZCB0aGUgZGlyZWN0aW9uIG9mIHRoZSB0YXJnZXQgZnJvbSB0aGUgdHJhY2tlci5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9zZXRMb29rQW5nbGVzKCkge1xuICAgIC8vIEdldCB0aGUgY3VycmVudCBwb3NpdGlvbnMgb2YgdGhlIHRyYWNrZXIgYW5kIHRhcmdldCBvYmplY3RzXG4gICAgY29uc3QgdGFyZ2V0UG9zID0gdGhpcy5jb25zdHJ1Y3Rvci5fZ2V0V29ybGRQb3NpdGlvbih0aGlzLl90YXJnZXQpO1xuICAgIGNvbnN0IHRyYWNrZXJQb3MgPSB0aGlzLmNvbnN0cnVjdG9yLl9nZXRXb3JsZFBvc2l0aW9uKHRoaXMuX2xvb2tUcmFja2VyKTtcblxuICAgIC8vIENoZWNrIGlmIHRoZSB0YXJnZXQgaGFzIG1vdmVkXG4gICAgdGhpcy5faXNUYXJnZXRNb3ZpbmcgPSBNYXRoVXRpbHMuZ2V0VmVjdG9yTWFnbml0dWRlKFtcbiAgICAgIHRhcmdldFBvc1swXSAtIHRoaXMuX3ByZXZUYXJnZXRQb3NbMF0sXG4gICAgICB0YXJnZXRQb3NbMV0gLSB0aGlzLl9wcmV2VGFyZ2V0UG9zWzFdLFxuICAgICAgdGFyZ2V0UG9zWzJdIC0gdGhpcy5fcHJldlRhcmdldFBvc1syXV1cbiAgICApID4gMDtcbiAgICBPYmplY3QuYXNzaWduKHRoaXMuX3ByZXZUYXJnZXRQb3MsIHRhcmdldFBvcyk7XG5cblxuICAgIC8vIENhbGN1bGF0ZSB0aGUgaG9yaXpvbnRhbCBhbmQgdmVydGljYWwgYW5nbGVzIHRvIHJvdGF0ZSB0byB0aGUgdGFyZ2V0XG4gICAgY29uc3QgdGFyZ2V0U3BoZXJpY2FsID0gTWF0aFV0aWxzLmNhcnRlc2lhblRvU3BoZXJpY2FsKFxuICAgICAgdGFyZ2V0UG9zWzBdIC0gdHJhY2tlclBvc1swXSxcbiAgICAgIHRhcmdldFBvc1sxXSAtIHRyYWNrZXJQb3NbMV0sXG4gICAgICB0YXJnZXRQb3NbMl0gLSB0cmFja2VyUG9zWzJdXG4gICAgKTtcbiAgICBjb25zdCB0YXJnZXRBbmdsZXMgPSB0aGlzLmNvbnN0cnVjdG9yLl9zcGhlcmljYWxUb0JsZW5kVmFsdWUoXG4gICAgICB0YXJnZXRTcGhlcmljYWxbMV0sXG4gICAgICB0YXJnZXRTcGhlcmljYWxbMl1cbiAgICApO1xuXG4gICAgLy8gQ2FsY3VsYXRlIGFuZ2xlcyByZWxhdGl2ZSB0byB0aGUgcmVmZXJlbmNlIG9iamVjdHNcbiAgICB0aGlzLl90cmFja2luZ0NvbmZpZ3MuZm9yRWFjaCgoe1xuICAgICAgcmVmZXJlbmNlLFxuICAgICAgZm9yd2FyZEF4aXMsXG4gICAgICBhbmdsZXNcbiAgICB9KSA9PiB7XG4gICAgICAvLyBDYWxjdWxhdGUgdGhlIGhvcml6b250YWwgYW5kIHZlcnRpY2FsIGFuZ2xlcyB0byByb3RhdGUgdG8gdGhlIGRpcmVjdGlvbiBvZiB0aGUgdHJhY2tlclxuICAgICAgY29uc3QgcmVmRGlyZWN0aW9uID0gdGhpcy5jb25zdHJ1Y3Rvci5fZ2V0T2JqZWN0RGlyZWN0aW9uKFxuICAgICAgICByZWZlcmVuY2UsXG4gICAgICAgIGZvcndhcmRBeGlzLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IHJlZlNwaGVyaWNhbCA9IE1hdGhVdGlscy5jYXJ0ZXNpYW5Ub1NwaGVyaWNhbCguLi5yZWZEaXJlY3Rpb24pO1xuICAgICAgY29uc3QgcmVmQW5nbGVzID0gdGhpcy5jb25zdHJ1Y3Rvci5fc3BoZXJpY2FsVG9CbGVuZFZhbHVlKFxuICAgICAgICByZWZTcGhlcmljYWxbMV0sXG4gICAgICAgIHJlZlNwaGVyaWNhbFsyXVxuICAgICAgKTtcblxuICAgICAgLy8gU3RvcmUgdGhlIGRpZmZlcmVuY2VcbiAgICAgIGFuZ2xlcy5oID0gdGFyZ2V0QW5nbGVzLmggLSByZWZBbmdsZXMuaDtcbiAgICAgIGFuZ2xlcy52ID0gdGFyZ2V0QW5nbGVzLnYgLSByZWZBbmdsZXMudjtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIGhvcml6b250YWwgYW5kIHZlcnRpY2FsIGFuZ2xlcyBpdCB3b3VsZCByZXF1aXJlIHRvIHNpbXVsYXRlIGxvb2tpbmdcbiAgICogYXQgdGhlIGdpdmVuIHR5cGUgb2YgZmFjZSB0YXJnZXRcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHRhcmdldFR5cGUgLSBJbnRlZ2VyIHJlcHJlc2VudGluZyB0aGUgRmFjZVRhcmdldFR5cGUuXG4gICAqXG4gICAqIEByZXR1cm5zIHtPYmplY3R9LSBBbiBvYmplY3Qgd2l0aCBzaWduYXR1cmUge3I6IG51bWJlciwgaDogbnVtYmVyLCB2OiBudW1iZXJ9XG4gICAqIHdoZXJlICdyJyByZXByZXNlbnRzIHJhZGl1cywgaCByZXByZXNlbnRzIHRoZSBob3Jpem9udGFsL2F6aW11dGhhbCBhbmdsZSBhbmRcbiAgICogdiByZXByZXNlbnRzIHRoZSB2ZXJ0aWNhbC9wb2xhciBhbmdsZS5cbiAgICovXG4gIF9nZXRGYWNlVGFyZ2V0QW5nbGVzKHRhcmdldFR5cGUpIHtcbiAgICAvLyBObyBvZmZzZXQgd2hlbiB0aGUgdGFyZ2V0IGlzIHRoZSBjZW50ZXIgb2YgdGhlIGV5ZXNcbiAgICBpZiAodGFyZ2V0VHlwZSA9PT0gMCkge1xuICAgICAgcmV0dXJuIHsgaDogMCwgdjogMCB9O1xuICAgIH1cblxuICAgIC8vIEJ1aWxkIGEgdmVjdG9yIHRvIHRoZSBmYWNlIHRhcmdldCB0eXBlIHVzaW5nIHRoZSBjdXJyZW50IGRpc3RhbmNlIHRvIHRoZSB0YXJnZXRcbiAgICBjb25zdCBkaXN0YW5jZSA9IHRoaXMuX2dldFRhcmdldERpc3RhbmNlKHRoaXMuX2xvb2tUcmFja2VyKTtcbiAgICBjb25zdCBmYWNlVmVjdG9yID0gWy4uLkZhY2VWZWN0b3JzW3RhcmdldFR5cGVdXTtcbiAgICBmYWNlVmVjdG9yWzJdID0gZGlzdGFuY2U7XG4gICAgY29uc3Qgc3BoZXJpY2FsID0gTWF0aFV0aWxzLmNhcnRlc2lhblRvU3BoZXJpY2FsKC4uLmZhY2VWZWN0b3IpO1xuXG4gICAgLy8gTWFrZSBzdXJlIHZhbHVlcyBhcmUgY2xhbXBlZCB3aXRoaW4gdGhlIHJhbmdlIG9mIG1vdGlvbiBvZiB0aGUgaHVtYW4gZXllLCBpbiBjYXNlIHRoZSB0YXJnZXQgaXMgdmVyeSBjbG9zZVxuICAgIGNvbnN0IGJsZW5kVmFsdWVzID0gdGhpcy5jb25zdHJ1Y3Rvci5fc3BoZXJpY2FsVG9CbGVuZFZhbHVlKHNwaGVyaWNhbFsxXSwgc3BoZXJpY2FsWzJdKTtcbiAgICBibGVuZFZhbHVlcy5oID0gTWF0aFV0aWxzLmNsYW1wKGJsZW5kVmFsdWVzLmgsIC0zNSwgMzUpO1xuICAgIGJsZW5kVmFsdWVzLnYgPSBNYXRoVXRpbHMuY2xhbXAoYmxlbmRWYWx1ZXMudiwgLTI1LCAzMCk7XG5cbiAgICByZXR1cm4gYmxlbmRWYWx1ZXM7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlZCB0aGUgc3RvcmVkIHNwZWVkIGFuZCBkdXJhdGlvbiB2YXJpYWJsZXMgZm9yIGEgbGF5ZXIgYmFzZWQgb24gdGhlXG4gICAqIGNoYW5nZSBpbiBob3Jpem9udGFsIGFuZCB2ZXJ0aWNhbCBhbmdsZXMgb2YgdGhlIHRyYWNrZXIuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllck5hbWUgLSBOYW1lIG9mIHRoZSBsYXllciB0byBzdG9yZSB2YWx1ZXMgb24uXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBoIC0gQ2hhbmdlIGluIGhvcml6b250YWwgYW5nbGUsIGluIGRlZ3JlZXMuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB2IC0gQ2hhbmdlIGluIHZlcnRpY2FsIGFuZ2xlLCBpbiBkZWdyZWVzLlxuICAgKi9cbiAgX3VwZGF0ZUxheWVyU3BlZWQobGF5ZXJOYW1lLCBoLCB2KSB7XG4gICAgY29uc3QgbGF5ZXIgPSB0aGlzLl9tYW5hZ2VkTGF5ZXJzW2xheWVyTmFtZV07XG5cbiAgICAvLyBGcm9tIFwiUmVhbGlzdGljIEF2YXRhciBhbmQgaGVhZCBBbmltYXRpb24gVXNpbmcgYSBOZXVyb2Jpb2xvZ2ljYWwgTW9kZWwgb2YgVmlzdWFsIEF0dGVudGlvblwiLCBJdHRpLCBEaGF2YWxlLCBQaWdoaW5cbiAgICBsYXllci5tYXhIU3BlZWQgPSA0NzMgKiAoMSAtIE1hdGguZXhwKC1oIC8gNy44KSk7XG4gICAgbGF5ZXIubWF4VlNwZWVkID0gNDczICogKDEgLSBNYXRoLmV4cCgtdiAvIDcuOCkpO1xuXG4gICAgLy8gRnJvbSBcIkV5ZXMgQWxpdmVcIiwgTGVlLCBCYWRsZXJcbiAgICBjb25zdCBEMCA9IDAuMDI1O1xuICAgIGNvbnN0IGQgPSAwLjAwMjM1O1xuICAgIGxheWVyLmhEdXJhdGlvbiA9IEQwICsgZCAqIGg7XG4gICAgbGF5ZXIudkR1cmF0aW9uID0gRDAgKyBkICogdjtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIG1pY3JvU2FjY2FkZSBvYmplY3Qgd2l0aCBuZXcgcmFuZG9taXplZCB2YWx1ZXMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllck5hbWUgLSBOYW1lIG9mIHRoZSBsYXllciB0aGF0IG93bnMgdGhlIHNhY2NhZGUgbW90aW9uLlxuICAgKi9cbiAgX3NldE1pY3JvU2FjY2FkZShsYXllck5hbWUpIHtcbiAgICBjb25zdCBsYXllciA9IHRoaXMuX21hbmFnZWRMYXllcnNbbGF5ZXJOYW1lXTtcbiAgICBjb25zdCB7IG1pY3JvU2FjY2FkZSB9ID0gbGF5ZXI7XG5cbiAgICBpZiAodGhpcy5fdGFyZ2V0KSB7XG4gICAgICAvLyBNaWNybyBtb3ZlbWVudHMgc2hvdWxkIGJlIHNtYWxsZXIgd2hlbiBmb2N1c2VkIG9uIGEgdGFyZ2V0XG4gICAgICBtaWNyb1NhY2NhZGUuaCA9IFV0aWxzLmdldFJhbmRvbUZsb2F0KC4wMSwgLjE1KTtcbiAgICAgIG1pY3JvU2FjY2FkZS52ID0gVXRpbHMuZ2V0UmFuZG9tRmxvYXQoLjAxLCAuMTUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBNaWNyb3NhY2NhZGVzLiBFbmN5Y2xvcGVkaWEgb2YgTmV1cm9zY2llbmNlLiAoMjAwOSkgU3ByaW5nZXIsIEJlcmxpbiwgSGVpZGVsYmVyZy4gaHR0cHM6Ly9kb2kub3JnLzEwLjEwMDcvOTc4LTMtNTQwLTI5Njc4LTJfMzQ5MlxuICAgICAgbWljcm9TYWNjYWRlLmggPSBVdGlscy5nZXRSYW5kb21GbG9hdCguMDEsIC4zKTtcbiAgICAgIG1pY3JvU2FjY2FkZS52ID0gVXRpbHMuZ2V0UmFuZG9tRmxvYXQoLjAxLCAuMyk7XG4gICAgfVxuXG4gICAgdGhpcy5fdXBkYXRlTGF5ZXJTcGVlZChsYXllck5hbWUsIG1pY3JvU2FjY2FkZS5oLCBtaWNyb1NhY2NhZGUudik7XG5cbiAgICAvLyBSZXN0YXJ0IHRoZSB0aW1lclxuICAgIHRoaXMuX2luaXRpYWxpemVNaWNyb1RpbWVyKGxheWVyTmFtZSwgLi4uTWljcm9TYWNjYWRlV2FpdFJhbmdlcy5kZWZhdWx0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIG1hY3JvU2FjY2FkZSBvYmplY3Qgd2l0aCBuZXcgcmFuZG9taXplZCB2YWx1ZXMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllck5hbWUgLSBOYW1lIG9mIHRoZSBsYXllciB0aGF0IG93bnMgdGhlIHNhY2NhZGUgbW90aW9uLlxuICAgKi9cbiAgX3NldE1hY3JvU2FjY2FkZShsYXllck5hbWUpIHtcbiAgICBjb25zdCBsYXllciA9IHRoaXMuX21hbmFnZWRMYXllcnNbbGF5ZXJOYW1lXTtcbiAgICBjb25zdCB7IG1hY3JvU2FjY2FkZSB9ID0gbGF5ZXI7XG4gICAgbGV0IG1hY3JvU2FjY2FkZVdhaXRSYW5nZTtcblxuICAgIC8vIEluY3JlYXNlIHJhbmRvbSB2YWx1ZSByYW5nZSB3aGVuIG5vdCBmb2N1c2VkIG9uIGEgdGFyZ2V0XG4gICAgaWYgKCF0aGlzLl90YXJnZXQpIHtcbiAgICAgIG1hY3JvU2FjY2FkZVdhaXRSYW5nZSA9IE1hY3JvU2FjY2FkZVdhaXRSYW5nZXMuZGVmYXVsdDtcblxuICAgICAgLy8gTm9ybWFsIGh1bWFuIGhvcml6b250YWwgZXllIHJvdGF0aW9uIGxpbWl0IGlzIGFib3V0IDM1IGRlZ3JlZXNcbiAgICAgIGNvbnN0IGhMaW1pdCA9IFV0aWxzLmdldFJhbmRvbUZsb2F0KC4xNDMsIC4yODYpO1xuICAgICAgY29uc3QgaEZhY3RvciA9IFV0aWxzLmdldFJhbmRvbUZsb2F0KC1oTGltaXQsIGhMaW1pdCk7XG4gICAgICBtYWNyb1NhY2NhZGUuaCA9IGhGYWN0b3IgKiAzNTtcblxuICAgICAgLy8gTm9ybWFsIGh1bWFuIHZlcnRpY2FsIGV5ZSByb3RhdGlvbiBsaW1pdCBpcyBhYm91dCAyNSBkZWdyZWVzIHVwd2FyZCBhbmQgMzAgZGVncmVlcyBkb3dud2FyZFxuICAgICAgY29uc3QgdkxpbWl0ID0gVXRpbHMuZ2V0UmFuZG9tRmxvYXQoLjA5MywgLjE4Nik7XG4gICAgICBjb25zdCB2RmFjdG9yID0gVXRpbHMuZ2V0UmFuZG9tRmxvYXQoLXZMaW1pdCwgdkxpbWl0KTtcbiAgICAgIG1hY3JvU2FjY2FkZS52ID0gdkZhY3RvciA+IDAgPyB2RmFjdG9yICogMjUgOiB2RmFjdG9yICogMzA7XG4gICAgfVxuXG4gICAgLy8gUGljayBhIG5ldyBmYWNlIHRhcmdldFxuICAgIGVsc2Uge1xuICAgICAgLy8gU29jaWFsIHRyaWFuZ2xlIC0gc2FjY2FkZSBiZXR3ZWVuIGV5ZXMgYW5kIG1vdXRoLCB3ZWlnaHRlZCB0byBsb29rIGF0IGV5ZXMgbW9yZSBvZnRlblxuICAgICAgc3dpdGNoIChsYXllci5zYWNjYWRlVGFyZ2V0KSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBtYWNyb1NhY2NhZGVXYWl0UmFuZ2UgPSBNYWNyb1NhY2NhZGVXYWl0UmFuZ2VzLmV5ZVRhcmdldDtcbiAgICAgICAgICBsYXllci5zYWNjYWRlVGFyZ2V0ID0gTWF0aC5yYW5kb20oKSA8IDAuNzUgPyBGYWNlVGFyZ2V0VHlwZXMuRXllUmlnaHRcbiAgICAgICAgICAgIDogRmFjZVRhcmdldFR5cGVzLk1vdXRoO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgbWFjcm9TYWNjYWRlV2FpdFJhbmdlID0gTWFjcm9TYWNjYWRlV2FpdFJhbmdlcy5leWVUYXJnZXQ7XG4gICAgICAgICAgbGF5ZXIuc2FjY2FkZVRhcmdldCA9IE1hdGgucmFuZG9tKCkgPCAwLjc1ID8gRmFjZVRhcmdldFR5cGVzLkV5ZUxlZnRcbiAgICAgICAgICAgIDogRmFjZVRhcmdldFR5cGVzLk1vdXRoO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgbWFjcm9TYWNjYWRlV2FpdFJhbmdlID0gTWFjcm9TYWNjYWRlV2FpdFJhbmdlcy5tb3V0aFRhcmdldDtcbiAgICAgICAgICBsYXllci5zYWNjYWRlVGFyZ2V0ID0gTWF0aC5yYW5kb20oKSA8IDAuNSA/IEZhY2VUYXJnZXRUeXBlcy5FeWVMZWZ0XG4gICAgICAgICAgICA6IEZhY2VUYXJnZXRUeXBlcy5FeWVSaWdodDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIG1hY3JvU2FjY2FkZVdhaXRSYW5nZSA9IE1hY3JvU2FjY2FkZVdhaXRSYW5nZXMuZXllVGFyZ2V0O1xuICAgICAgICAgIGxheWVyLnNhY2NhZGVUYXJnZXQgPSBNYXRoLnJhbmRvbSgpIDwgMC41ID8gRmFjZVRhcmdldFR5cGVzLkV5ZUxlZnRcbiAgICAgICAgICAgIDogRmFjZVRhcmdldFR5cGVzLkV5ZVJpZ2h0O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB7IGgsIHYgfSA9IHRoaXMuX2dldEZhY2VUYXJnZXRBbmdsZXMobGF5ZXIuc2FjY2FkZVRhcmdldCk7XG4gICAgICBtYWNyb1NhY2NhZGUuaCA9IGg7XG4gICAgICBtYWNyb1NhY2NhZGUudiA9IHY7XG4gICAgfVxuXG4gICAgdGhpcy5fdXBkYXRlTGF5ZXJTcGVlZChsYXllck5hbWUsIG1hY3JvU2FjY2FkZS5oLCBtYWNyb1NhY2NhZGUudik7XG5cbiAgICAvLyBSZXN0YXJ0IHRoZSB0aW1lcnNcbiAgICB0aGlzLl9pbml0aWFsaXplTWljcm9UaW1lcihsYXllck5hbWUsIC4uLk1pY3JvU2FjY2FkZVdhaXRSYW5nZXMucG9zdE1hY3JvKTtcbiAgICB0aGlzLl9pbml0aWFsaXplTWFjcm9UaW1lcihsYXllck5hbWUsIC4uLm1hY3JvU2FjY2FkZVdhaXRSYW5nZSk7XG4gIH1cblxuICAvKipcbiAgICogU3RhcnQgYSBuZXcgd2FpdCB0aW1lciB0aGF0IHdpbGwgc2V0IGEgbmV3IG1pY3JvIHNhY2NhZGUgbW92ZW1lbnQgd2hlbiBpdFxuICAgKiByZXNvbHZlcy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVyTmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRoYXQgb3ducyB0aGUgc2FjY2FkZSBtb3Rpb24uXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBtaW5XYWl0VGltZSAtIE1pbmltdW0gbnVtYmVyIG9mIHNlY29uZHMgYmVmb3JlIGEgbmV3IHNhY2NhZGVcbiAgICogd2lsbCBiZSB0cmlnZ2VyZWQuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBtYXhXYWl0VGltZSAtIE1heGltdW0gbnVtYmVyIG9mIHNlY29uZHMgYmVmb3JlIGEgbmV3IHNhY2NhZGVcbiAgICogd2lsbCBiZSB0cmlnZ2VyZWQuXG4gICAqL1xuICBfaW5pdGlhbGl6ZU1pY3JvVGltZXIobGF5ZXJOYW1lLCBtaW5XYWl0VGltZSwgbWF4V2FpdFRpbWUpIHtcbiAgICBjb25zdCBsYXllciA9IHRoaXMuX21hbmFnZWRMYXllcnNbbGF5ZXJOYW1lXTtcbiAgICBjb25zdCB3YWl0VGltZSA9IFV0aWxzLmdldFJhbmRvbUZsb2F0KG1pbldhaXRUaW1lLCBtYXhXYWl0VGltZSk7XG5cbiAgICBpZiAobGF5ZXIubWljcm9TYWNjYWRlVGltZXIpIHtcbiAgICAgIGxheWVyLm1pY3JvU2FjY2FkZVRpbWVyLmNhbmNlbCgpO1xuICAgIH1cbiAgICBsYXllci5taWNyb1NhY2NhZGVUaW1lciA9IFV0aWxzLndhaXQod2FpdFRpbWUsIHtcbiAgICAgIG9uRmluaXNoOiAoKSA9PiB7IHRoaXMuX3NldE1pY3JvU2FjY2FkZShsYXllck5hbWUpIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFydCBhIG5ldyB3YWl0IHRpbWVyIHRoYXQgd2lsbCBzZXQgYSBuZXcgbWFjcm8gc2FjY2FkZSBtb3ZlbWVudCB3aGVuIGl0XG4gICAqIHJlc29sdmVzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGF5ZXJOYW1lIC0gTmFtZSBvZiB0aGUgbGF5ZXIgdGhhdCBvd25zIHRoZSBzYWNjYWRlIG1vdGlvbi5cbiAgICogQHBhcmFtIHtudW1iZXJ9IG1pbldhaXRUaW1lIC0gTWluaW11bSBudW1iZXIgb2Ygc2Vjb25kcyBiZWZvcmUgYSBuZXcgc2FjY2FkZVxuICAgKiB3aWxsIGJlIHRyaWdnZXJlZC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IG1heFdhaXRUaW1lIC0gTWF4aW11bSBudW1iZXIgb2Ygc2Vjb25kcyBiZWZvcmUgYSBuZXcgc2FjY2FkZVxuICAgKiB3aWxsIGJlIHRyaWdnZXJlZC5cbiAgICovXG4gIF9pbml0aWFsaXplTWFjcm9UaW1lcihsYXllck5hbWUsIG1pbldhaXRUaW1lLCBtYXhXYWl0VGltZSkge1xuICAgIGNvbnN0IGxheWVyID0gdGhpcy5fbWFuYWdlZExheWVyc1tsYXllck5hbWVdO1xuICAgIGNvbnN0IHdhaXRUaW1lID0gVXRpbHMuZ2V0UmFuZG9tRmxvYXQobWluV2FpdFRpbWUsIG1heFdhaXRUaW1lKTtcblxuICAgIGlmIChsYXllci5tYWNyb1NhY2NhZGVUaW1lcikge1xuICAgICAgbGF5ZXIubWFjcm9TYWNjYWRlVGltZXIuY2FuY2VsKCk7XG4gICAgfVxuICAgIGxheWVyLm1hY3JvU2FjY2FkZVRpbWVyID0gVXRpbHMud2FpdCh3YWl0VGltZSwge1xuICAgICAgb25GaW5pc2g6ICgpID0+IHsgdGhpcy5fc2V0TWFjcm9TYWNjYWRlKGxheWVyTmFtZSkgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgYSBuZXcgdGFyZ2V0IHRvIGxvb2sgYXQuXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fG51bGx9IHRhcmdldCAtIFRoZSBuZXcgdGFyZ2V0IHRvIGxvb2sgYXQuXG4gICAqL1xuICBzZXRUYXJnZXQodGFyZ2V0KSB7XG4gICAgdGhpcy50YXJnZXQgPSB0YXJnZXQ7XG4gIH1cblxuICAvKipcbiAgICogRmluZHMgYW4gb2JqZWN0IGdpdmVuIGl0cyBuYW1lIGFuZCBzZXRzIGl0IGFzIHRoZSBuZXcgdGFyZ2V0IHRvIGxvb2sgYXQuXG4gICAqIFNob3VsZCBiZSBvdmVybG9hZGVkIGZvciBlYWNoIHJlbmRlcmluZyBlbmdpbmUgaW1wbGVtZW50YXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0YXJnZXQgLSBOYW1lIHRvIHNlYXJjaCBmb3IuXG4gICAqL1xuICBzZXRUYXJnZXRCeU5hbWUobmFtZSkge1xuICAgIGlmICghbmFtZSkge1xuICAgICAgdGhpcy5fdGFyZ2V0ID0gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuX3NjZW5lKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBzZXQgUG9pbnRPZkludGVyZXN0RmVhdHVyZSB0YXJnZXQgdXNpbmcgbmFtZSAke25hbWV9IG9uIGhvc3QgJHt0aGlzLl9ob3N0LmlkfS4gU2NlbmUgbXVzdCBiZSBkZWZpbmVkLmApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kcyBhbiBvYmplY3QgZ2l2ZW4gaXRzIGlkIGFuZCBzZXRzIGl0IGFzIHRoZSBuZXcgdGFyZ2V0IHRvIGxvb2sgYXQuXG4gICAqIFNob3VsZCBiZSBvdmVybG9hZGVkIGZvciBlYWNoIHJlbmRlcmluZyBlbmdpbmUgaW1wbGVtZW50YXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gdGFyZ2V0IC0gSWQgdG8gc2VhcmNoIGZvci5cbiAgICovXG4gIHNldFRhcmdldEJ5SWQoaWQpIHtcbiAgICBpZiAoIWlkKSB7XG4gICAgICB0aGlzLl90YXJnZXQgPSBudWxsO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5fc2NlbmUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IHNldCBQb2ludE9mSW50ZXJlc3RGZWF0dXJlIHRhcmdldCB1c2luZyBpZCAke2lkfSBvbiBob3N0ICR7dGhpcy5faG9zdC5pZH0uIFNjZW5lIG11c3QgYmUgZGVmaW5lZC5gKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU3RhcnQga2VlcGluZyB0cmFjayBvZiBhbiBhbmltYXRpb24gbGF5ZXIgdGhhdCBvd25zIGEgYmxlbmQyZCBhbmltYXRpb24gd2l0aFxuICAgKiBibGVuZFdlaWdodHMgY29ycmVzcG9uZGluZyB0byBob3Jpem9udGFsIGFuZCB2ZXJ0aWNhbCBsb29rIGFuZ2xlcy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVyTmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRvIGtlZXAgdHJhY2sgb2YuXG4gICAqIEBwYXJhbSB7T2JqZWN0PX0gb3B0aW9ucyAtIE9wdGlvbnMgZm9yIHRoZSBsYXllci5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmFuaW1hdGlvbiA9ICdsb29rJ10gLSBOYW1lIG9mIHRoZSBhbmltYXRpb24gb24gdGhlXG4gICAqIGxheWVyIHdob3NlIGJsZW5kV2VpZ2h0cyB3aWxsIGJlIGRyaXZlbiBiYXNlZCBvbiB0aGUgYW5nbGUgYmV0d2VlbiB0aGUgbG9va1RyYWNrZXJcbiAgICogYW5kIHRoZSBsb29rVGFyZ2V0LiBUaGlzIGFuaW1hdGlvbiBtdXN0IGJlIG9mIHR5cGUgYmxlbmQyZC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLm1heFNwZWVkID0gMjVdIC0gVGhlIG1heGltdW0gc3BlZWQgYXQgd2hpY2ggdGhlIGJsZW5kMmRcbiAgICogYmxlbmRXZWlnaHRzIGNhbiBiZSBtYW5pcHVsYXRlZC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmZvcndhcmRBeGlzID0gJ1Bvc2l0aXZlWiddIC0gQXhpcyBwb2ludGluZyBmcm9tIHRoZVxuICAgKiBmcm9udCBvZiB0aGUgbG9va1JlZmVyZW5jZSBvYmplY3QuIFZhbGlkIG9wdGlvbnMgYXJlICdQb3NpdGl2ZVgnLCAnTmVnYXRpdmVYJyxcbiAgICogJ1Bvc2l0aXZlWScsICdOZWdhdGl2ZVknLCAnUG9zaXRpdmVaJywgJ05lZ2F0aXZlWicuXG4gICAqIEBwYXJhbSB7T2JqZWN0PX0gb3B0aW9ucy5sb29rUmVmZXJlbmNlIC0gM0QgdHJhbnNmb3JtYXRpb24gbm9kZSB0aGF0IHRoZSBsb29rVHJhY2tlclxuICAgKiByb3RhdGlvbiBsaW1pdHMgc2hvdWxkIGJlIGNhbGN1bGF0ZWQgcmVsYXRpdmUgdG8uIERlZmF1bHRzIHRvIHRoZSBob3N0IG93bmVyLlxuICAgKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMuaGFzU2FjY2FkZSA9IGZhbHNlXSAtIFdoZXRoZXIgb3Igbm90IHRvIGluY2x1ZGVcbiAgICogc2FjY2FkaWMgbW90aW9uIG9udG8gdGhlIGJsZW5kV2VpZ2h0IGFuaW1hdGlvbi4gVGhpcyBzaG91bGQgb25seSBiZSBzZXQgdG9cbiAgICogdHJ1ZSBmb3IgYmxlbmQyZCBhbmltYXRpb25zIHJlcHJlc2VudGluZyBleWUgYW5pbWF0aW9uLlxuICAgKiBAcGFyYW0ge251bWJlcj19IFtvcHRpb25zLmJsZW5kVGltZT1bUG9pbnRPZkludGVyZXN0RmVhdHVyZS5ERUZBVUxUX0xBWUVSX09QVElPTlMuYmxlbmRUaW1lXXtAbGluayBQb2ludE9mSW50ZXJlc3RGZWF0dXJlI0RFRkFVTFRfTEFZRVJfT1BUSU9OUyNibGVuZFRpbWV9XSAtXG4gICAqIERlZmF1bHQgYW1vdW50IG9mIHRpbWUgdG8gdXNlIHdoZW4gbWFuaXB1bGF0aW5nIGxheWVyIHdlaWdodC5cbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9wdGlvbnMuZWFzaW5nRm4gLSBEZWZhdWx0IGVhc2luZyBmdW5jdGlvbiB0byB1c2Ugd2hlblxuICAgKiBtYW5pcHVsYXRpbmcgbGF5ZXIgd2VpZ2h0LlxuICAgKi9cbiAgcmVnaXN0ZXJMb29rTGF5ZXIoXG4gICAgbGF5ZXJOYW1lLFxuICAgIHtcbiAgICAgIGFuaW1hdGlvbiA9ICdsb29rJyxcbiAgICAgIG1heFNwZWVkID0gMjUsXG4gICAgICByZWZlcmVuY2UsXG4gICAgICBmb3J3YXJkQXhpcyA9ICdQb3NpdGl2ZVonLFxuICAgICAgaGFzU2FjY2FkZSA9IGZhbHNlLFxuICAgICAgYmxlbmRUaW1lID0gUG9pbnRPZkludGVyZXN0RmVhdHVyZS5ERUZBVUxUX0xBWUVSX09QVElPTlMuYmxlbmRUaW1lLFxuICAgICAgZWFzaW5nRm5cbiAgICB9ID0ge31cbiAgKSB7XG4gICAgLy8gVmFsaWRhdGUgcmVmZXJlbmNlIG9iamVjdFxuICAgIHJlZmVyZW5jZSA9IHJlZmVyZW5jZSB8fCB0aGlzLl9ob3N0Lm93bmVyO1xuXG4gICAgaWYgKCF0aGlzLmNvbnN0cnVjdG9yLl92YWxpZGF0ZVRyYW5zZm9ybU9iamVjdChyZWZlcmVuY2UpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBpbml0aWFsaXplIHJlZ2lzdGVyIGxvb2sgbGF5ZXIgJHtsYXllck5hbWV9IGZvciBQb2ludE9mSW50ZXJlc3RGZWF0dXJlIG9uIGhvc3QgJHt0aGlzLl9ob3N0LmlkfS4gUmVmZXJlbmNlIG11c3QgYmUgZGVmaW5lZCBhcyBhIHZhbGlkIHRyYW5zZm9ybWF0aW9uIG9iamVjdC5gKTtcbiAgICB9XG5cbiAgICAvLyBGaW5kIHZlY3RvciBhc3NvY2lhdGVkIHdpdGggYXhpcyBzdHJpbmdcbiAgICBmb3J3YXJkQXhpcyA9IEF4aXNNYXBbZm9yd2FyZEF4aXNdICE9PSB1bmRlZmluZWRcbiAgICAgID8gQXhpc01hcFtmb3J3YXJkQXhpc11cbiAgICAgIDogQXhpc01hcC5Qb3NpdGl2ZVo7XG5cbiAgICAvLyBTdG9yZSB0cmFja2luZyBjb25maWd1cmF0aW9uXG4gICAgY29uc3QgdHJhY2tpbmdDb25maWcgPSB0aGlzLl9hZGRUcmFja2luZ0NvbmZpZyh7XG4gICAgICByZWZlcmVuY2UsXG4gICAgICBmb3J3YXJkQXhpc1xuICAgIH0pO1xuXG4gICAgLy8gUmVnaXN0ZXIgdGhlIGxheWVyIGFuZCBhbmltYXRpb25cbiAgICB0aGlzLnJlZ2lzdGVyTGF5ZXIobGF5ZXJOYW1lLCB7XG4gICAgICB0cmFja2luZ0NvbmZpZyxcbiAgICAgIG1heFNwZWVkLFxuICAgICAgbWF4SFNwZWVkOiB1bmRlZmluZWQsXG4gICAgICBtYXhWU3BlZWQ6IHVuZGVmaW5lZCxcbiAgICAgIGhEdXJhdGlvbjogdW5kZWZpbmVkLFxuICAgICAgdkR1cmF0aW9uOiB1bmRlZmluZWQsXG4gICAgICBoVmVsb2NpdHk6IFswLCAwXSxcbiAgICAgIHZWZWxvY2l0eTogWzAsIDBdLFxuICAgICAgaGFzU2FjY2FkZSxcbiAgICAgIGJsZW5kVGltZSxcbiAgICAgIGVhc2luZ0ZuLFxuICAgICAgbWljcm9TYWNjYWRlOiB7IGg6IDAsIHY6IDAgfSxcbiAgICAgIG1hY3JvU2FjY2FkZTogeyBoOiAwLCB2OiAwIH0sXG4gICAgICBzYWNjYWRlVGFyZ2V0OiBGYWNlVGFyZ2V0VHlwZXMuRXllQ2VudGVyLFxuICAgICAgYW5pbWF0aW9uczogeyBbYW5pbWF0aW9uXToge30gfSxcbiAgICB9KTtcbiAgICB0aGlzLl9sb29rTGF5ZXJzW2xheWVyTmFtZV0gPSBhbmltYXRpb247XG5cbiAgICAvLyBWYWxpZGF0ZSB0aGUgbG9vayBhbmltYXRpb25cbiAgICB0aGlzLl9yZWdpc3Rlckxvb2tBbmltYXRpb24obGF5ZXJOYW1lLCBhbmltYXRpb24pO1xuXG4gICAgLy8gSW5pdGlhbGl6ZSBzYWNjYWRlIHRpbWVyc1xuICAgIGlmIChoYXNTYWNjYWRlKSB7XG4gICAgICBjb25zdCBtYWNyb1NhY2NhZGVXYWl0UmFuZ2UgPSB0aGlzLl90YXJnZXRcbiAgICAgICAgPyBNYWNyb1NhY2NhZGVXYWl0UmFuZ2VzLmV5ZVRhcmdldFxuICAgICAgICA6IE1hY3JvU2FjY2FkZVdhaXRSYW5nZXMuZGVmYXVsdDtcbiAgICAgIHRoaXMuX2luaXRpYWxpemVNaWNyb1RpbWVyKGxheWVyTmFtZSwgLi4uTWljcm9TYWNjYWRlV2FpdFJhbmdlcy5kZWZhdWx0KTtcbiAgICAgIHRoaXMuX2luaXRpYWxpemVNYWNyb1RpbWVyKGxheWVyTmFtZSwgLi4ubWFjcm9TYWNjYWRlV2FpdFJhbmdlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU3RhcnQga2VlcGluZyB0cmFjayBvZiBhbiBhbmltYXRpb24gbGF5ZXIgdGhhdCBvd25zIGEgYmxpbmsgYW5pbWF0aW9uLiBCbGlua1xuICAgKiBhbmltYXRpb25zIGNhbiBiZSBvZiBhbnkgdHlwZSwgYnV0IGlmIGl0IGlzIG9mIHR5cGUgcmFuZG9tQW5pbWF0aW9uIHRoZW4gYVxuICAgKiBpdCB3aWxsIGJlIHJhbmRvbWl6ZWQgZWFjaCB0aW1lIGEgYmxpbmsgaXMgY2FsbGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGF5ZXJOYW1lIC0gTmFtZSBvZiB0aGUgbGF5ZXIgdG8ga2VlcCB0cmFjayBvZi5cbiAgICogQHBhcmFtIHtPYmplY3Q9fSBvcHRpb25zIC0gT3B0aW9ucyBmb3IgdGhlIGxheWVyLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuYW5pbWF0aW9uID0gJ2JsaW5rJ10gLSBOYW1lIG9mIHRoZSBibGluayBhbmltYXRpb25cbiAgICogb24gdGhlIGxheWVyLlxuICAgKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMuYmxlbmRUaW1lPVtQb2ludE9mSW50ZXJlc3RGZWF0dXJlLkRFRkFVTFRfTEFZRVJfT1BUSU9OUy5ibGVuZFRpbWVde0BsaW5rIFBvaW50T2ZJbnRlcmVzdEZlYXR1cmUjREVGQVVMVF9MQVlFUl9PUFRJT05TI2JsZW5kVGltZX1dIC1cbiAgICogRGVmYXVsdCBhbW91bnQgb2YgdGltZSB0byB1c2Ugd2hlbiBtYW5pcHVsYXRpbmcgdGhlIGxheWVyJ3Mgd2VpZ2h0LlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb3B0aW9ucy5lYXNpbmdGbiAtIERlZmF1bHQgZWFzaW5nIGZ1bmN0aW9uIHRvIHVzZSB3aGVuXG4gICAqIG1hbmlwdWxhdGluZyB0aGUgbGF5ZXIncyB3ZWlnaHQuXG4gICAqL1xuICByZWdpc3RlckJsaW5rTGF5ZXIoXG4gICAgbGF5ZXJOYW1lLFxuICAgIHtcbiAgICAgIGFuaW1hdGlvbiA9ICdibGluaycsXG4gICAgICBibGVuZFRpbWUgPSBQb2ludE9mSW50ZXJlc3RGZWF0dXJlLkRFRkFVTFRfTEFZRVJfT1BUSU9OUy5ibGVuZFRpbWUsXG4gICAgICBlYXNpbmdGblxuICAgIH0gPSB7fVxuICApIHtcbiAgICAvLyBSZWdpc3RlciB0aGUgbGF5ZXIgYW5kIGFuaW1hdGlvblxuICAgIHRoaXMucmVnaXN0ZXJMYXllcihsYXllck5hbWUsIHtcbiAgICAgIGJsZW5kVGltZSxcbiAgICAgIGVhc2luZ0ZuLFxuICAgICAgYW5pbWF0aW9uczogeyBbYW5pbWF0aW9uXToge30gfSxcbiAgICB9KTtcbiAgICB0aGlzLl9ibGlua0xheWVyc1tsYXllck5hbWVdID0gYW5pbWF0aW9uO1xuICB9XG5cbiAgdXBkYXRlKGRlbHRhVGltZSkge1xuICAgIHN1cGVyLnVwZGF0ZShkZWx0YVRpbWUpO1xuXG4gICAgLy8gVXBkYXRlIHRoZSBsb29rIGFuZ2xlc1xuICAgIGlmICh0aGlzLl90YXJnZXQpIHtcbiAgICAgIHRoaXMuX3NldExvb2tBbmdsZXMoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fcmVzZXRMb29rQW5nbGVzKCk7XG4gICAgfVxuXG4gICAgY29uc3QgZGVsdGFTZWNvbmRzID0gTWF0aC5taW4oZGVsdGFUaW1lLCBNYXhEZWx0YSkgLyAxMDAwO1xuICAgIGxldCB0cmlnZ2VyQmxpbmsgPSBmYWxzZTtcblxuICAgIC8vIFNldCBsb29rIGJsZW5kIHZhbHVlc1xuICAgIE9iamVjdC5lbnRyaWVzKHRoaXMuX2xvb2tMYXllcnMpLmZvckVhY2goKFtsYXllck5hbWUsIGFuaW1OYW1lXSkgPT4ge1xuICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuX21hbmFnZWRMYXllcnNbbGF5ZXJOYW1lXTtcblxuICAgICAgLy8gSW5jcmVtZW50IHRoZSBzYWNjYWRlIHRpbWVyc1xuICAgICAgaWYgKG9wdGlvbnMuaXNBY3RpdmUgJiYgb3B0aW9ucy5oYXNTYWNjYWRlKSB7XG4gICAgICAgIG9wdGlvbnMubWljcm9TYWNjYWRlVGltZXIuZXhlY3V0ZShkZWx0YVRpbWUpO1xuICAgICAgICBvcHRpb25zLm1hY3JvU2FjY2FkZVRpbWVyLmV4ZWN1dGUoZGVsdGFUaW1lKTtcbiAgICAgIH1cblxuICAgICAgLy8gU2V0IHRoZSBibGVuZCB2YWx1ZXNcbiAgICAgIGlmIChvcHRpb25zLmFuaW1hdGlvbnNbYW5pbU5hbWVdLmlzQWN0aXZlKSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRIID0gdGhpcy5faG9zdC5BbmltYXRpb25GZWF0dXJlLmdldEFuaW1hdGlvbkJsZW5kV2VpZ2h0KFxuICAgICAgICAgIGxheWVyTmFtZSwgYW5pbU5hbWUsICdYJ1xuICAgICAgICApO1xuICAgICAgICBjb25zdCBjdXJyZW50ViA9IHRoaXMuX2hvc3QuQW5pbWF0aW9uRmVhdHVyZS5nZXRBbmltYXRpb25CbGVuZFdlaWdodChcbiAgICAgICAgICBsYXllck5hbWUsIGFuaW1OYW1lLCAnWSdcbiAgICAgICAgKTtcblxuICAgICAgICBsZXQgdGFyZ2V0SCA9IG9wdGlvbnMudHJhY2tpbmdDb25maWcuYW5nbGVzLmg7XG4gICAgICAgIGxldCB0YXJnZXRWID0gb3B0aW9ucy50cmFja2luZ0NvbmZpZy5hbmdsZXMudjtcblxuICAgICAgICAvLyBDaGVjayBpZiB0aGUgbG9vayBhbmdsZSBoYXMgY2hhbmdlZCBlbm91Z2ggdG8gdHJpZ2dlciBhIGJsaW5rXG4gICAgICAgIGlmICh0aGlzLl9pc1RhcmdldE1vdmluZyAmJiAhdHJpZ2dlckJsaW5rKSB7XG4gICAgICAgICAgY29uc3QgcHJldlRhcmdldEggPSBvcHRpb25zLnRyYWNraW5nQ29uZmlnLnByZXZBbmdsZXMuaDtcbiAgICAgICAgICBjb25zdCBwcmV2VGFyZ2V0ViA9IG9wdGlvbnMudHJhY2tpbmdDb25maWcucHJldkFuZ2xlcy52O1xuICAgICAgICAgIGNvbnN0IGNoYW5nZUFtb3VudCA9IE1hdGhVdGlscy50b0RlZ3JlZXMoXG4gICAgICAgICAgICBNYXRoVXRpbHMuZ2V0QW5nbGVCZXR3ZWVuKFxuICAgICAgICAgICAgICBbcHJldlRhcmdldEgsIHByZXZUYXJnZXRWXSxcbiAgICAgICAgICAgICAgW3RhcmdldEgsIHRhcmdldFZdXG4gICAgICAgICAgICApXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGlmIChjaGFuZ2VBbW91bnQgPj0gQmxpbmtUaHJlc2hvbGQpIHtcbiAgICAgICAgICAgIHRyaWdnZXJCbGluayA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgb3B0aW9ucy50cmFja2luZ0NvbmZpZy5wcmV2QW5nbGVzLmggPSB0YXJnZXRIO1xuICAgICAgICBvcHRpb25zLnRyYWNraW5nQ29uZmlnLnByZXZBbmdsZXMudiA9IHRhcmdldFY7XG5cbiAgICAgICAgLy8gQWRkIGluIHRoZSBzYWNjYWRlIG1vdmVtZW50XG4gICAgICAgIGlmIChvcHRpb25zLmhhc1NhY2NhZGUpIHtcbiAgICAgICAgICBNYXRoVXRpbHMuZGFtcFZhbHVlKFxuICAgICAgICAgICAgMCxcbiAgICAgICAgICAgIG9wdGlvbnMubWFjcm9TYWNjYWRlLmggKyBvcHRpb25zLm1hY3JvU2FjY2FkZS5oLFxuICAgICAgICAgICAgb3B0aW9ucy5oVmVsb2NpdHksXG4gICAgICAgICAgICBvcHRpb25zLmhEdXJhdGlvbixcbiAgICAgICAgICAgIG9wdGlvbnMubWF4SFNwZWVkXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0YXJnZXRIICs9IG9wdGlvbnMuaFZlbG9jaXR5WzBdO1xuICAgICAgICAgIE1hdGhVdGlscy5kYW1wVmFsdWUoXG4gICAgICAgICAgICAwLFxuICAgICAgICAgICAgb3B0aW9ucy5tYWNyb1NhY2NhZGUudiArIG9wdGlvbnMubWFjcm9TYWNjYWRlLnYsXG4gICAgICAgICAgICBvcHRpb25zLnZWZWxvY2l0eSxcbiAgICAgICAgICAgIG9wdGlvbnMudkR1cmF0aW9uLFxuICAgICAgICAgICAgb3B0aW9ucy5tYXhWU3BlZWRcbiAgICAgICAgICApO1xuICAgICAgICAgIHRhcmdldFYgKz0gb3B0aW9ucy52VmVsb2NpdHlbMF07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDbGFtcCB0byBtYXggc3BlZWRcbiAgICAgICAgY29uc3QgZmFjdG9yID0gTWF0aFV0aWxzLmNsYW1wKGRlbHRhU2Vjb25kcyAqIG9wdGlvbnMubWF4U3BlZWQsIDAsIDEpO1xuICAgICAgICB0YXJnZXRIID0gTWF0aFV0aWxzLmxlcnAoY3VycmVudEgsIHRhcmdldEgsIGZhY3Rvcik7XG4gICAgICAgIHRhcmdldFYgPSBNYXRoVXRpbHMubGVycChjdXJyZW50ViwgdGFyZ2V0ViwgZmFjdG9yKTtcblxuICAgICAgICAvLyBVcGRhdGUgdGhlIGJsZW5kIHZhbHVlc1xuICAgICAgICB0aGlzLl9ob3N0LkFuaW1hdGlvbkZlYXR1cmUuc2V0QW5pbWF0aW9uQmxlbmRXZWlnaHQoXG4gICAgICAgICAgbGF5ZXJOYW1lLFxuICAgICAgICAgIGFuaW1OYW1lLFxuICAgICAgICAgICdYJyxcbiAgICAgICAgICB0YXJnZXRIXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuX2hvc3QuQW5pbWF0aW9uRmVhdHVyZS5zZXRBbmltYXRpb25CbGVuZFdlaWdodChcbiAgICAgICAgICBsYXllck5hbWUsXG4gICAgICAgICAgYW5pbU5hbWUsXG4gICAgICAgICAgJ1knLFxuICAgICAgICAgIHRhcmdldFZcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmICghdHJpZ2dlckJsaW5rIHx8ICF0aGlzLl9pc1RhcmdldE1vdmluZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEV4ZWN1dGUgYmxpbmtcbiAgICBPYmplY3QuZW50cmllcyh0aGlzLl9ibGlua0xheWVycykuZm9yRWFjaCgoW2xheWVyTmFtZSwgYW5pbU5hbWVdKSA9PiB7XG4gICAgICBjb25zdCBhbmltYXRpb24gPSB0aGlzLl9tYW5hZ2VkTGF5ZXJzW2xheWVyTmFtZV0uYW5pbWF0aW9uc1thbmltTmFtZV07XG5cbiAgICAgIGlmIChhbmltYXRpb24uaXNBY3RpdmUpIHtcbiAgICAgICAgdGhpcy5faG9zdC5BbmltYXRpb25GZWF0dXJlLnBsYXlBbmltYXRpb24obGF5ZXJOYW1lLCBhbmltTmFtZSk7XG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGluc3RhbGxBcGkoKSB7XG4gICAgLyoqXG4gICAgICogQGlubmVyXG4gICAgICogQG5hbWVzcGFjZSBQb2ludE9mSW50ZXJlc3RGZWF0dXJlXG4gICAgICovXG4gICAgY29uc3QgYXBpID0gc3VwZXIuaW5zdGFsbEFwaSgpO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoYXBpLCB7XG4gICAgICAvKipcbiAgICAgICAqIEBtZW1iZXJvZiBQb2ludE9mSW50ZXJlc3RGZWF0dXJlXG4gICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAqIEBzZWUgY29yZS9Qb2ludE9mSW50ZXJlc3RGZWF0dXJlI3RhcmdldFxuICAgICAgICovXG4gICAgICB0YXJnZXQ6IHtcbiAgICAgICAgZ2V0OiAoKSA9PiB0aGlzLnRhcmdldCxcbiAgICAgICAgc2V0OiB0YXJnZXQgPT4geyB0aGlzLnRhcmdldCA9IHRhcmdldCB9LFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIE9iamVjdC5hc3NpZ24oYXBpLCB7XG4gICAgICAvKipcbiAgICAgICAqIEBtZW1iZXJvZiBQb2ludE9mSW50ZXJlc3RGZWF0dXJlXG4gICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAqIEBtZXRob2RcbiAgICAgICAqIEBzZWUgY29yZS9Qb2ludE9mSW50ZXJlc3RGZWF0dXJlI3JlZ2lzdGVyTG9va0xheWVyXG4gICAgICAgKi9cbiAgICAgIHJlZ2lzdGVyTG9va0xheWVyOiB0aGlzLnJlZ2lzdGVyTG9va0xheWVyLmJpbmQodGhpcyksXG4gICAgICAvKipcbiAgICAgICAqIEBtZW1iZXJvZiBQb2ludE9mSW50ZXJlc3RGZWF0dXJlXG4gICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAqIEBtZXRob2RcbiAgICAgICAqIEBzZWUgY29yZS9Qb2ludE9mSW50ZXJlc3RGZWF0dXJlI3JlZ2lzdGVyQmxpbmtMYXllclxuICAgICAgICovXG4gICAgICByZWdpc3RlckJsaW5rTGF5ZXI6IHRoaXMucmVnaXN0ZXJCbGlua0xheWVyLmJpbmQodGhpcyksXG4gICAgICAvKipcbiAgICAgICAqIEBtZW1iZXJvZiBQb2ludE9mSW50ZXJlc3RGZWF0dXJlXG4gICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAqIEBtZXRob2RcbiAgICAgICAqIEBzZWUgY29yZS9Qb2ludE9mSW50ZXJlc3RGZWF0dXJlI3NldFRhcmdldFxuICAgICAgICovXG4gICAgICBzZXRUYXJnZXQ6IHRoaXMuc2V0VGFyZ2V0LmJpbmQodGhpcyksXG4gICAgICAvKipcbiAgICAgICAqIEBtZW1iZXJvZiBQb2ludE9mSW50ZXJlc3RGZWF0dXJlXG4gICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAqIEBtZXRob2RcbiAgICAgICAqIEBzZWUgY29yZS9Qb2ludE9mSW50ZXJlc3RGZWF0dXJlI3NldFRhcmdldEJ5TmFtZVxuICAgICAgICovXG4gICAgICBzZXRUYXJnZXRCeU5hbWU6IHRoaXMuc2V0VGFyZ2V0QnlOYW1lLmJpbmQodGhpcyksXG4gICAgICAvKipcbiAgICAgICAqIEBtZW1iZXJvZiBQb2ludE9mSW50ZXJlc3RGZWF0dXJlXG4gICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAqIEBtZXRob2RcbiAgICAgICAqIEBzZWUgY29yZS9Qb2ludE9mSW50ZXJlc3RGZWF0dXJlI3NldFRhcmdldEJ5SWRcbiAgICAgICAqL1xuICAgICAgc2V0VGFyZ2V0QnlJZDogdGhpcy5zZXRUYXJnZXRCeUlkLmJpbmQodGhpcyksXG4gICAgfSk7XG5cbiAgICByZXR1cm4gYXBpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFBvaW50T2ZJbnRlcmVzdEZlYXR1cmU7XG5leHBvcnQgeyBBeGlzTWFwIH07IiwiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTBcbmltcG9ydCBDb3JlUG9pbnRPZkludGVyZXN0RmVhdHVyZSwge0F4aXNNYXB9IGZyb20gJ2NvcmUvUG9pbnRPZkludGVyZXN0RmVhdHVyZSc7XG5cbi8qKlxuICogQGV4dGVuZHMgY29yZS9Qb2ludE9mSW50ZXJlc3RGZWF0dXJlXG4gKiBAYWxpYXMgdGhyZWUuanMvUG9pbnRPZkludGVyZXN0RmVhdHVyZVxuICovXG5jbGFzcyBQb2ludE9mSW50ZXJlc3RGZWF0dXJlIGV4dGVuZHMgQ29yZVBvaW50T2ZJbnRlcmVzdEZlYXR1cmUge1xuICBzdGF0aWMgX2dldFdvcmxkUG9zaXRpb24ob2JqKSB7XG4gICAgb2JqLnVwZGF0ZVdvcmxkTWF0cml4KHRydWUsIGZhbHNlKTtcbiAgICByZXR1cm4gb2JqLm1hdHJpeFdvcmxkLmVsZW1lbnRzLnNsaWNlKDEyLCAxNSk7XG4gIH1cblxuICBzdGF0aWMgX2dldFdvcmxkTWF0cml4KG9iaikge1xuICAgIG9iai51cGRhdGVXb3JsZE1hdHJpeCh0cnVlLCBmYWxzZSk7XG4gICAgcmV0dXJuIFsuLi5vYmoubWF0cml4V29ybGQuZWxlbWVudHNdO1xuICB9XG5cbiAgX3ZhbGlkYXRlVHJhbnNmb3JtT2JqZWN0KG9iaikge1xuICAgIHJldHVybiBvYmogaW5zdGFuY2VvZiBUSFJFRS5PYmplY3QzRDtcbiAgfVxuXG4gIHNldFRhcmdldEJ5TmFtZShuYW1lKSB7XG4gICAgc3VwZXIuc2V0VGFyZ2V0QnlOYW1lKG5hbWUpO1xuICAgIGlmICghbmFtZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudGFyZ2V0ID0gdGhpcy5fc2NlbmUuZ2V0T2JqZWN0QnlOYW1lKG5hbWUpO1xuICB9XG5cbiAgc2V0VGFyZ2V0QnlJZChpZCkge1xuICAgIHN1cGVyLnNldFRhcmdldEJ5TmFtZShpZCk7XG4gICAgaWYgKCFpZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudGFyZ2V0ID0gdGhpcy5fc2NlbmUuZ2V0T2JqZWN0QnlJZChpZCk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgUG9pbnRPZkludGVyZXN0RmVhdHVyZTtcbmV4cG9ydCB7QXhpc01hcH07XG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cclxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVC0wXHJcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvcHJlZmVyLWRlZmF1bHQtZXhwb3J0XHJcbmV4cG9ydCBjb25zdCBlbnYgPSAndGhyZWUnO1xyXG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxuXG5pbXBvcnQgVXRpbHMgZnJvbSAnY29yZS9VdGlscyc7XG5cbi8qKlxuICogQSBjb2xsZWN0aW9uIG9mIHVzZWZ1bCB0ZXh0LXRvLXNwZWVjaCBmdW5jdGlvbnMuXG4gKlxuICogQGhpZGVjb25zdHJ1Y3RvclxuICovXG5jbGFzcyBUZXh0VG9TcGVlY2hVdGlscyB7XG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgbmV3IHN0cmluZyB3aXRoIFNTTUwgbWFya3MgaW5zZXJ0ZWQgYmFzZWQgb25cbiAgICogbWF0Y2hlcyBiZXR3ZWVuIHRoZSBpbnB1dCBzdHJpbmcgYW5kIHRoZSBpbnB1dCBtYXAuIFRoZVxuICAgKiB3b3JkIG1hdGNoZXMgYXJlIGNhc2UtaW5zZW5zaXRpdmUuIFdvcmRzIHdpdGhpbiBleGlzdGluZ1xuICAgKiBTU01MIHRhZ3Mgd2lsbCBub3QgYmUgYWZmZWN0ZWQuIElucHV0IHRleHQgd2lsbCBiZSBzdXJyb3VuZGVkXG4gICAqIGJ5IDxzcGVhaz48L3NwZWFrPiB0YWdzIGlmIG5lZWRlZC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSBJbnB1dCBzdHJpbmcuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBtYXAgLSBJbnB1dCBvYmplY3QgdGhhdCBtYXBzIG1hcmsga2V5c1xuICAgKiB0byBhcnJheXMgb2Ygd29yZHMuIEV4YW1wbGU6XG4gICAqXG4gICAqICB7XG4gICAqICAgICdtYXJrOnNhZCcgOiBbJ3NhZCcsICdibHVlJywgJ2Rvd24nXSxcbiAgICogICAgJ21hcms6aGFwcHknIDogWydqb3knLCAnZ2xhZCcsICdncmVhdCddLFxuICAgKiAgICAnbWFyazpubycgOiBbJ25vJywgJ25haCcsICduYXknLCAnc3VyZSddXG4gICAqICB9XG4gICAqIEBwYXJhbSB7QXJyYXkuPHN0cmluZz59IFtyYW5kb21NYXJrcyA9IFtdXSAtIElmIHRoZXJlIGFyZSBzZW50ZW5jZXMgdGhhdCBkb24ndFxuICAgKiBtYXRjaCBhbnkgd29yZHMgZnJvbSB0aGUgbWFwIG9iamVjdCwgbWFya3MgZnJvbSB0aGlzIGFycmF5IHdpbGwgYmUgcmFuZG9tbHlcbiAgICogY2hvc2VuIGFuZCBpbnNlcnRlZC5cbiAgICpcbiAgICogQHJldHVybnMge3N0cmluZ30gLSBVcGRhdGVkIGlucHV0IHN0cmluZy5cbiAgICovXG4gIHN0YXRpYyBhdXRvR2VuZXJhdGVTU01MTWFya3ModGV4dCwgbWFwLCByYW5kb21NYXJrcyA9IFtdKSB7XG4gICAgaWYgKHR5cGVvZiBtYXAgIT09ICdvYmplY3QnIHx8IG1hcCA9PT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQ2Fubm90IGdlbmVyYXRlIFNTTUwgbWFya3MgZm9yIHRleHQgXCIke3RleHR9XCIgYmVjYXVzZSBtYXAgaXMgbm90IGFuIG9iamVjdC5gXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIHByb2Nlc3MgdGhlIGlucHV0IG1hcCBpbnRvIGFuIGludGVybmFsIGZvcm1hdFxuICAgIGNvbnN0IGludGVybmFsTWFwID0gdGhpcy5fcHJvY2Vzc0lucHV0TWFwKG1hcCk7XG5cbiAgICBjb25zdCBzcGVha1RhZ3MgPSBbJzxzcGVhaz4nLCAnPC9zcGVhaz4nXTtcbiAgICBjb25zdCBzc21sTWFya1JlZ2V4ID0gLzxtYXJrIG5hbWU9KD86XCJ8JykoLio/KSg/OlwifCcpXFwvPi87XG4gICAgY29uc3Qgc3NtbFRhZ1JlZ2V4ID0gLzxbXj5dKj4vZztcblxuICAgIC8vIElkZW50aWZ5IGFueSBleGlzdGluZyBTU01MIHRhZ3NcbiAgICBjb25zdCBleGlzdGluZ1RhZ3MgPSBbXTtcbiAgICBsZXQgcmVzdWx0ID0gc3NtbFRhZ1JlZ2V4LmV4ZWModGV4dCk7XG5cbiAgICB3aGlsZSAocmVzdWx0ICE9PSBudWxsKSB7XG4gICAgICBleGlzdGluZ1RhZ3MucHVzaCh7XG4gICAgICAgIHN0YXJ0OiByZXN1bHQuaW5kZXgsXG4gICAgICAgIGVuZDogcmVzdWx0LmluZGV4ICsgcmVzdWx0WzBdLmxlbmd0aCxcbiAgICAgICAgdGV4dDogcmVzdWx0WzBdLFxuICAgICAgfSk7XG5cbiAgICAgIHJlc3VsdCA9IHNzbWxUYWdSZWdleC5leGVjKHRleHQpO1xuICAgIH1cblxuICAgIGNvbnN0IGNodW5rcyA9IFtdO1xuICAgIGxldCBpbmRleCA9IDA7XG4gICAgbGV0IHNzbWxNYXJrUmVzdWx0O1xuICAgIGxldCBkdXBsaWNhdGVNYXJrVG9DaGVjayA9IFtdO1xuICAgIGV4aXN0aW5nVGFncy5mb3JFYWNoKGV4aXN0aW5nVGFnID0+IHtcbiAgICAgIGNvbnN0IHN1YnN0ciA9IHRleHQuc2xpY2UoaW5kZXgsIGV4aXN0aW5nVGFnLnN0YXJ0KTtcblxuICAgICAgaWYgKHN1YnN0ciAhPT0gJycpIHtcbiAgICAgICAgLy8gYXV0by1tYXJrIG5vbi10YWcgdGV4dFxuICAgICAgICBjaHVua3MucHVzaChcbiAgICAgICAgICB0aGlzLl9pbnNlcnRNYXJrcyhzdWJzdHIsIGludGVybmFsTWFwLCBkdXBsaWNhdGVNYXJrVG9DaGVjaylcbiAgICAgICAgKTtcblxuICAgICAgICBkdXBsaWNhdGVNYXJrVG9DaGVjayA9IFtdO1xuICAgICAgfVxuXG4gICAgICBzc21sTWFya1Jlc3VsdCA9IHNzbWxNYXJrUmVnZXguZXhlYyhleGlzdGluZ1RhZy50ZXh0KTtcblxuICAgICAgaWYgKHNzbWxNYXJrUmVzdWx0ICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IG1hcmtUZXh0ID0gc3NtbE1hcmtSZXN1bHRbMV07XG4gICAgICAgIGR1cGxpY2F0ZU1hcmtUb0NoZWNrLnB1c2gobWFya1RleHQpO1xuICAgICAgfSBlbHNlIGlmICghc3BlYWtUYWdzLmluY2x1ZGVzKGV4aXN0aW5nVGFnLnRleHQpKSB7XG4gICAgICAgIGNodW5rcy5wdXNoKGV4aXN0aW5nVGFnLnRleHQpO1xuICAgICAgfVxuXG4gICAgICAvLyBhZHZhbmNlIHRoZSBpbmRleFxuICAgICAgaW5kZXggPSBleGlzdGluZ1RhZy5lbmQ7XG4gICAgfSk7XG5cbiAgICBjaHVua3MucHVzaChcbiAgICAgIHRoaXMuX2luc2VydE1hcmtzKHRleHQuc2xpY2UoaW5kZXgpLCBpbnRlcm5hbE1hcCwgZHVwbGljYXRlTWFya1RvQ2hlY2spXG4gICAgKTtcblxuICAgIGxldCBtYXJrZWRUZXh0ID0gY2h1bmtzLmpvaW4oJycpO1xuXG4gICAgaWYgKHJhbmRvbU1hcmtzICYmIHJhbmRvbU1hcmtzLmxlbmd0aCA+IDApIHtcbiAgICAgIC8vIGFkZCByYW5kb20gbWFya3MgdG8gYW55IHVubWFya2VkIHNlbnRlbmNlc1xuICAgICAgbWFya2VkVGV4dCA9IHRoaXMuYWRkTWFya3NUb1VubWFya2VkU2VudGVuY2VzKFxuICAgICAgICBtYXJrZWRUZXh0LFxuICAgICAgICByYW5kb21NYXJrc1xuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gVGV4dFRvU3BlZWNoVXRpbHMudmFsaWRhdGVUZXh0KG1hcmtlZFRleHQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBuZXcgc3RyaW5nIHdpdGggYSByYW5kb20gU1NNTCBtYXJrIGluc2VydGVkIGF0IGVhY2ggc2VudGVuY2UgdGhhdFxuICAgKiBkb2VzIG5vdCBhbHJlYWR5IGNvbnRhaW4gYW4gU1NNTCBtYXJrLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIElucHV0IHN0cmluZy5cbiAgICogQHBhcmFtIHtBcnJheS48c3RyaW5nPn0gbWFya3MgLSBBbnkgYXJyYXkgb2YgcmFuZG9tIFNTTUwgbWFya3MgdG8gY2hvb3NlIGZyb21cbiAgICogd2hlbiBtb2RpZnlpbmcgdGhlIHRleHQuXG4gICAqXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqL1xuICBzdGF0aWMgYWRkTWFya3NUb1VubWFya2VkU2VudGVuY2VzKHRleHQsIG1hcmtzKSB7XG4gICAgaWYgKCFtYXJrcyB8fCBtYXJrcy5sZW5ndGggPT09IDApIHJldHVybiB0ZXh0O1xuXG4gICAgY29uc3Qgc3NtbE1hcmtSZWdleCA9IC88bWFyayBuYW1lPSg/OlwifCcpKC4qPykoPzpcInwnKVxcLz4vZztcbiAgICBjb25zdCBzc21sVGFnUmVnZXggPSAvPFtePl0qPi9nO1xuXG4gICAgLy8gRmluZCB0aGUgaW5kaWNlcyBvZiBhbnkgbWFya3MgaW4gdGhlIHRleHRcbiAgICBjb25zdCBtYXJrSW5kaWNlcyA9IFtdO1xuICAgIGxldCBtYXJrUmVzdWx0ID0gc3NtbE1hcmtSZWdleC5leGVjKHRleHQpO1xuXG4gICAgd2hpbGUgKG1hcmtSZXN1bHQgIT09IG51bGwpIHtcbiAgICAgIG1hcmtJbmRpY2VzLnB1c2gobWFya1Jlc3VsdC5pbmRleCk7XG4gICAgICBtYXJrUmVzdWx0ID0gc3NtbE1hcmtSZWdleC5leGVjKHRleHQpO1xuICAgIH1cblxuICAgIC8vIEZpbmQgYWxsIFNTTUwgdGFncyBpbiB0aGUgdGV4dFxuICAgIGNvbnN0IGV4aXN0aW5nVGFncyA9IFtdO1xuICAgIGxldCBzc21sUmVzdWx0ID0gc3NtbFRhZ1JlZ2V4LmV4ZWModGV4dCk7XG4gICAgd2hpbGUgKHNzbWxSZXN1bHQgIT09IG51bGwpIHtcbiAgICAgIGV4aXN0aW5nVGFncy5wdXNoKHtcbiAgICAgICAgc3RhcnQ6IHNzbWxSZXN1bHQuaW5kZXgsXG4gICAgICAgIGVuZDogc3NtbFJlc3VsdC5pbmRleCArIHNzbWxSZXN1bHRbMF0ubGVuZ3RoLFxuICAgICAgICB0ZXh0OiBzc21sUmVzdWx0WzBdLFxuICAgICAgfSk7XG4gICAgICBzc21sUmVzdWx0ID0gc3NtbFRhZ1JlZ2V4LmV4ZWModGV4dCk7XG4gICAgfVxuXG4gICAgLy8gQ3JlYXRlIGEgY29weSBvZiB0aGUgdGV4dCB3aXRoIGFsbCBTU01MIG1hcmtzIHJlcGxhY2VzIHdpdGggd2hpdGVzcGFjZVxuICAgIGxldCBjbGVhbmVkVGV4dCA9IHRleHQuc2xpY2UoKTtcbiAgICBleGlzdGluZ1RhZ3MuZm9yRWFjaChleGlzdGluZ1NzbWwgPT4ge1xuICAgICAgY29uc3Qgd2hpdGVzcGFjZSA9IG5ldyBBcnJheShleGlzdGluZ1NzbWwudGV4dC5sZW5ndGggKyAxKS5qb2luKCcgJyk7XG4gICAgICBjbGVhbmVkVGV4dCA9IFtcbiAgICAgICAgY2xlYW5lZFRleHQuc2xpY2UoMCwgZXhpc3RpbmdTc21sLnN0YXJ0KSxcbiAgICAgICAgd2hpdGVzcGFjZSxcbiAgICAgICAgY2xlYW5lZFRleHQuc2xpY2UoZXhpc3RpbmdTc21sLmVuZCksXG4gICAgICBdLmpvaW4oJycpO1xuICAgIH0pO1xuXG4gICAgY29uc3Qgc2VudGVuY2VFbmRJbmRpY2VzID0gdGhpcy5fZ2V0U2VudGVuY2VFbmRzKGNsZWFuZWRUZXh0KTtcblxuICAgIC8vIE9ubHkgaW5zZXJ0IHJhbmRvbSBtYXJrcyBpbnRvIHNlbnRlbmNlcyB0aGF0IGRvbid0IGFscmVhZHkgaGF2ZSBhbnlcbiAgICBsZXQgcHJldkluZGV4ID0gMDtcbiAgICBjb25zdCB0YXJnZXRJbmRpY2VzID0gc2VudGVuY2VFbmRJbmRpY2VzLmZpbHRlcihpbmRleCA9PiB7XG4gICAgICBjb25zdCBjb250YWluc01hcmsgPVxuICAgICAgICBtYXJrSW5kaWNlcy5maW5kSW5kZXgobWFya0luZGV4ID0+IHtcbiAgICAgICAgICByZXR1cm4gcHJldkluZGV4IDw9IG1hcmtJbmRleCAmJiBpbmRleCA+IG1hcmtJbmRleDtcbiAgICAgICAgfSkgIT09IC0xO1xuICAgICAgcHJldkluZGV4ID0gaW5kZXg7XG4gICAgICByZXR1cm4gIWNvbnRhaW5zTWFyaztcbiAgICB9KTtcblxuICAgIGNvbnN0IHJhbmRvbU1hcmtlZFRleHQgPSB0aGlzLl9pbnNlcnRSYW5kb21NYXJrc0F0KFxuICAgICAgdGV4dCxcbiAgICAgIHRhcmdldEluZGljZXMsXG4gICAgICBtYXJrc1xuICAgICk7XG5cbiAgICByZXR1cm4gcmFuZG9tTWFya2VkVGV4dDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSBhIHZlcnNpb24gb2YgZ2l2ZW4gdGV4dCB0aGF0IGlzIGVuY2xvc2VkIGJ5IFBvbGx5IHNzbWwgc3BlYWsgdGFncy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSBUaGUgdGV4dCB0byB2YWxpZGF0ZS5cbiAgICpcbiAgICogQHJldHVybnMge3N0cmluZ30gLSBVcGRhdGVkIGlucHV0IHN0cmluZy5cbiAgICovXG4gIHN0YXRpYyB2YWxpZGF0ZVRleHQodGV4dCkge1xuICAgIGlmICghdGV4dCkge1xuICAgICAgdGV4dCA9ICc8c3BlYWs+PC9zcGVhaz4nO1xuICAgIH0gZWxzZSB7XG4gICAgICB0ZXh0ID0gdGV4dFxuICAgICAgICAucmVwbGFjZSgvKF5cXHMqPFxccypzcGVha1xccyopPlxccyp8KF5cXHMqKS8sICc8c3BlYWs+JylcbiAgICAgICAgLnJlcGxhY2UoLyhcXHMqPFxccypcXC9cXHMqc3BlYWtcXHMqPlxccyokfFxccyokKS8sICc8L3NwZWFrPicpO1xuICAgIH1cblxuICAgIHJldHVybiB0ZXh0O1xuICB9XG5cbiAgLyoqXG4gICAqIFBhcnNlIGFuIGlucHV0IHN0cmluZyBhbmQgaW5zZXJ0IFNTTUwgbWFya3MgYmFzZWQgb25cbiAgICogd29yZCBtYXRjaGVzIGluIGEgbWFwLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIElucHV0IHN0cmluZy5cbiAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gW2luZGljZXMgPSBbXV0gLSBBbiBhcnJheSBvZiBpbmRpY2VzIGluIHRoZSB0ZXh0IGlucHV0XG4gICAqIHdoZXJlIHJhbmRvbSBtYXJrcyBzaG91bGQgYmUgaW5zZXJ0ZWQuXG4gICAqIEBwYXJhbSB7QXJyYXkuPHN0cmluZz59IFttYXJrcyA9IFtdXSAtIEFuIGFycmF5IG9mIG1hcmsgc3RyaW5ncyB0byBjaG9vc2VcbiAgICogZnJvbSB3aGVuIGluc2VydGluZyByYW5kb20gbWFya3MuXG4gICAqXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IC0gVXBkYXRlZCBpbnB1dCBzdHJpbmcuXG4gICAqL1xuICBzdGF0aWMgX2luc2VydFJhbmRvbU1hcmtzQXQodGV4dCwgaW5kaWNlcyA9IFtdLCBtYXJrcyA9IFtdKSB7XG4gICAgaWYgKCFtYXJrcyB8fCBtYXJrcy5sZW5ndGggPT09IDAgfHwgIWluZGljZXMgfHwgaW5kaWNlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB0ZXh0O1xuICAgIH1cblxuICAgIGxldCBvZmZzZXQgPSAwO1xuICAgIGluZGljZXMuZm9yRWFjaChpbmRleCA9PiB7XG4gICAgICBjb25zdCByYW5kb21NYXJrID0gYDxtYXJrIG5hbWU9JyR7XG4gICAgICAgIG1hcmtzW1V0aWxzLmdldFJhbmRvbUludCgwLCBtYXJrcy5sZW5ndGgpXVxuICAgICAgfScvPmA7XG4gICAgICB0ZXh0ID0gW1xuICAgICAgICB0ZXh0LnNsaWNlKDAsIGluZGV4ICsgb2Zmc2V0KSxcbiAgICAgICAgcmFuZG9tTWFyayxcbiAgICAgICAgdGV4dC5zbGljZShpbmRleCArIG9mZnNldCksXG4gICAgICBdLmpvaW4oJycpO1xuICAgICAgb2Zmc2V0ICs9IHJhbmRvbU1hcmsubGVuZ3RoO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRleHQ7XG4gIH1cblxuICAvKipcbiAgICogUGFyc2VzIGEgc3RyaW5nIG9mIHRleHQgYW5kIHJldHVybnMgYW4gYXJyYXkgY29udGFpbmluZyB0aGUgaW5kaWNlc1xuICAgKiBvZiB0aGUgbGFzdCBjaGFyYWN0ZXIgaW4gYSBzZW50ZW5jZSB0aGF0IGlzIG5vdCBpbiB0aGUgZm9sbG93aW5nIGxpc3Q6XG4gICAqICAoJy4nLCAnPycsICchJylcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSBUZXh0IHRvIHByb2Nlc3MgZm9yIGVuZCBvZiBzZW50ZW5jZVxuICAgKiBpbmRpY2VzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7QXJyYXkuPG51bWJlcj59IC0gQXJyYXkgb2YgZW5kIG9mIHNlbnRlbmNlIGluZGljZXMuXG4gICAqL1xuICBzdGF0aWMgX2dldFNlbnRlbmNlRW5kcyh0ZXh0KSB7XG4gICAgY29uc3Qgc2VudGVuY2VSZWdleCA9IC9bXi4hP10rWy4hP10rL2c7XG4gICAgY29uc3QgZW5kU2VudGVuY2VSZWdleCA9IC9bLiE/XSsvO1xuXG4gICAgbGV0IHJlc3VsdCA9IHNlbnRlbmNlUmVnZXguZXhlYyh0ZXh0KTtcbiAgICBjb25zdCBzZW50ZW5jZUVuZHMgPSBbXTtcbiAgICB3aGlsZSAocmVzdWx0ICE9PSBudWxsKSB7XG4gICAgICAvLyBmaW5kIHRoZSBsYXN0IG5vbi1wdW5jdHVhdGlvbiBjaGFyYWN0ZXJcbiAgICAgIGNvbnN0IHB1bmN0UmVzdWx0ID0gZW5kU2VudGVuY2VSZWdleC5leGVjKHJlc3VsdFswXSk7XG4gICAgICBzZW50ZW5jZUVuZHMucHVzaChcbiAgICAgICAgcmVzdWx0LmluZGV4ICsgcmVzdWx0WzBdLmxlbmd0aCAtIHB1bmN0UmVzdWx0WzBdLmxlbmd0aFxuICAgICAgKTtcbiAgICAgIHJlc3VsdCA9IHNlbnRlbmNlUmVnZXguZXhlYyh0ZXh0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2VudGVuY2VFbmRzO1xuICB9XG5cbiAgLyoqXG4gICAqIFBhcnNlIGFuIGlucHV0IHN0cmluZyBhbmQgaW5zZXJ0IFNTTUwgbWFya3MgYmFzZWQgb25cbiAgICogd29yZCBtYXRjaGVzIGluIGEgbWFwLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIElucHV0IHN0cmluZy5cbiAgICogQHBhcmFtIHtNYXB9IG1hcCAtIE1hcHBpbmcgb2Ygd29yZHMgdG8gbWFyayB2YWx1ZXMgdGhhdFxuICAgKiB3aWxsIGJlIGluc2VydGVkIGFzIHRoZSB2YWx1ZSBmb3IgYSBtYXJrJ3MgJ25hbWUnIGF0dHJpYnV0ZS5cbiAgICogQHBhcmFtIHtBcnJheX0gZHVwbGljYXRlc1RvQ2hlY2sgLSBBIGxpc3Qgb2YgbWFyayB2YWx1ZXMgdG8gY2hlY2sgZm9yIGR1cGxpY2F0ZSBhZ2FpbnN0IHRoZSBmaXJzdCB3b3JkXG4gICAqXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IC0gVXBkYXRlZCBpbnB1dCBzdHJpbmcuXG4gICAqL1xuICBzdGF0aWMgX2luc2VydE1hcmtzKHRleHQsIG1hcCwgZHVwbGljYXRlc1RvQ2hlY2spIHtcbiAgICBpZiAodGV4dCA9PT0gJycpIHJldHVybiB0ZXh0O1xuXG4gICAgY29uc3Qgd29yZFJlZ2V4ID0gL1xcdyt8XFxzK3xbXlxcc1xcd10rL2c7XG5cbiAgICBsZXQgbG93ZXJDYXNlV29yZDtcbiAgICBsZXQgY2hlY2tEdXBsaWNhdGUgPSB0cnVlO1xuICAgIGNvbnN0IG1hcmtlZFdvcmRzID0gdGV4dC5tYXRjaCh3b3JkUmVnZXgpLm1hcCh3b3JkID0+IHtcbiAgICAgIGxvd2VyQ2FzZVdvcmQgPSB3b3JkLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAgIGlmIChtYXAuaGFzKGxvd2VyQ2FzZVdvcmQpKSB7XG4gICAgICAgIGNvbnN0IG1hcmtzID0gbWFwLmdldChsb3dlckNhc2VXb3JkKS5tYXAobWFyayA9PiB7XG4gICAgICAgICAgaWYgKGNoZWNrRHVwbGljYXRlKSB7XG4gICAgICAgICAgICBjaGVja0R1cGxpY2F0ZSA9IGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuIGR1cGxpY2F0ZXNUb0NoZWNrLmluY2x1ZGVzKG1hcmspXG4gICAgICAgICAgICAgID8gJydcbiAgICAgICAgICAgICAgOiBgPG1hcmsgbmFtZT0nJHttYXJrfScvPmA7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBgPG1hcmsgbmFtZT0nJHttYXJrfScvPmA7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGAke21hcmtzLmpvaW4oJycpfSR7d29yZH1gO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2hlY2tEdXBsaWNhdGUgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIHdvcmQ7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCBleGlzdGluZ01hcmtzID0gZHVwbGljYXRlc1RvQ2hlY2subWFwKG1hcmsgPT4ge1xuICAgICAgcmV0dXJuIGA8bWFyayBuYW1lPScke21hcmt9Jy8+YDtcbiAgICB9KTtcblxuICAgIHJldHVybiBgJHtleGlzdGluZ01hcmtzLmpvaW4oJycpfSR7bWFya2VkV29yZHMuam9pbignJyl9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm9jZXNzZXMgYW4gaW5wdXQgb2JqZWN0IGZvciBtYXBwaW5nIGFuIGFycmF5XG4gICAqIG9mIHdvcmRzIHRvIHNwZWNpZmljIG1hcmsga2V5cy4gQ29udmVydHMgdGhlIGlucHV0XG4gICAqIG1hcCBpbnRvIGEgTWFwIHdpdGggYSBtb3JlIGVmZmljaWVudCBmb3JtYXQgZm9yXG4gICAqIHBlcmZvcm1pbmcgbWFyayBpbmplY3Rpb24uXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBtYXAgLSBJbnB1dCBvYmplY3QgdGhhdCBtYXBzIG1hcmsga2V5c1xuICAgKiB0byBhcnJheXMgb2Ygd29yZHMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtNYXB9IC0gTWFwIGZvciBpbnRlcm5hbCB1c2UuXG4gICAqL1xuICBzdGF0aWMgX3Byb2Nlc3NJbnB1dE1hcChtYXApIHtcbiAgICBjb25zdCBpbnRlcm5hbE1hcCA9IG5ldyBNYXAoKTtcblxuICAgIGxldCBsaXN0ID0gW107XG4gICAgT2JqZWN0LmVudHJpZXMobWFwKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBDYW5ub3QgZ2VuZXJhdGUgU1NNTCBtYXJrcyBmcm9tIG1hcCBcIiR7bWFwfVwiIGJlY2F1c2UgdmFsdWUgZm9yIGtleSAnJHtrZXl9JyBpcyBub3QgYW4gYXJyYXkuYFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICB2YWx1ZS5mb3JFYWNoKHdvcmQgPT4ge1xuICAgICAgICBjb25zdCBsb3dlckNhc2VXb3JkID0gd29yZC50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBsaXN0ID0gaW50ZXJuYWxNYXAuZ2V0KGxvd2VyQ2FzZVdvcmQpO1xuXG4gICAgICAgIGlmIChsaXN0ICE9PSB1bmRlZmluZWQgJiYgIWxpc3QuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICAgIGludGVybmFsTWFwLnNldChsb3dlckNhc2VXb3JkLCBbLi4ubGlzdCwga2V5XSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaW50ZXJuYWxNYXAuc2V0KGxvd2VyQ2FzZVdvcmQsIFtrZXldKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gaW50ZXJuYWxNYXA7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgVGV4dFRvU3BlZWNoVXRpbHM7XG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cclxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVC0wXHJcbmltcG9ydCBEZWZlcnJlZCBmcm9tICdjb3JlL0RlZmVycmVkJztcclxuXHJcbi8qKlxyXG4gKiBDbGFzcyB0aGF0IGNhbiBwbGF5IGJhY2sgYXVkaW8gZ2VuZXJhdGVkIGJ5IEFXUyBQb2xseSBhbmQgc3luY2hyb25pemVkIGVtaXRcclxuICogc3BlZWNobWFyayBtZXNzYWdlcy5cclxuICpcclxuICogQGFic3RyYWN0XHJcbiAqL1xyXG5jbGFzcyBBYnN0cmFjdFNwZWVjaCB7XHJcbiAgLyoqXHJcbiAgICogQGNvbnN0cnVjdG9yXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge2NvcmUvVGV4dFRvU3BlZWNoRmVhdHVyZX0gc3BlYWtlciAtIFRoZSBmZWF0dXJlIHRoYXQgb3ducyB0aGUgU3BlZWNoIGFuZFxyXG4gICAqIHdpbGwgZW1pdCBzcGVlY2htYXJrIG1lc3NhZ2VzLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gVGhlIHRleHQgb2YgdGhlIHNwZWVjaC5cclxuICAgKiBAcGFyYW0ge0FycmF5LjxPYmplY3Q+fSBbc3BlZWNobWFya3M9W11dIC0gQW4gYXJyYXkgb2Ygc3BlZWNobWFyayBvYmplY3RzIHJlcHJlc2VudGluZ1xyXG4gICAqIHRoZSB0ZXh0IGFuZCB0aW1pbmcgb2YgdGhlIHNwZWVjaC5cclxuICAgKi9cclxuICBjb25zdHJ1Y3RvcihzcGVha2VyLCB0ZXh0LCBzcGVlY2htYXJrcyA9IFtdKSB7XHJcbiAgICB0aGlzLl9zcGVha2VyID0gc3BlYWtlcjtcclxuICAgIHRoaXMuX3RleHQgPSB0ZXh0O1xyXG4gICAgdGhpcy5fc3BlZWNobWFya3MgPSBzcGVlY2htYXJrcztcclxuICAgIHRoaXMuX3NwZWVjaG1hcmtPZmZzZXQgPSAwO1xyXG4gICAgdGhpcy5fcmVzZXQoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlc2V0IHRyYWNraW5nIHByb3BlcnRpZXMuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtjdXJyZW50VGltZT0wXSAtIFRpbWUgdG8gdXNlIGZvciBfc3RhcnRUaW1lLlxyXG4gICAqL1xyXG4gIF9yZXNldChjdXJyZW50VGltZSA9IDApIHtcclxuICAgIHRoaXMuX3N0YXJ0VGltZSA9IGN1cnJlbnRUaW1lO1xyXG4gICAgdGhpcy5fbG9jYWxUaW1lID0gMDtcclxuICAgIHRoaXMuX3BhdXNlVGltZSA9IDA7XHJcbiAgICB0aGlzLl9wbGF5aW5nID0gZmFsc2U7XHJcbiAgICB0aGlzLl9tYXJrSXRlciA9IHRoaXMuX3NwZWVjaG1hcmtzLnZhbHVlcygpO1xyXG4gICAgY29uc3Qge3ZhbHVlLCBkb25lfSA9IHRoaXMuX21hcmtJdGVyLm5leHQoKTtcclxuICAgIHRoaXMuX2N1cnJlbnRNYXJrID0gdmFsdWU7XHJcbiAgICB0aGlzLl9lbmRUaW1lID0gdGhpcy5fc3BlZWNobWFya3MubGVuZ3RoXHJcbiAgICAgID8gdGhpcy5fc3BlZWNobWFya3NbdGhpcy5fc3BlZWNobWFya3MubGVuZ3RoIC0gMV0udGltZVxyXG4gICAgICA6IDA7XHJcbiAgICB0aGlzLl9kb25lID0gZG9uZTtcclxuICAgIHRoaXMuX3Byb21pc2UgPSBudWxsO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlIGEgbmV3IHByb21pc2UgdGhhdCB3aWxsIHN0b3AgcGxheWJhY2sgYW5kIGVtaXQgbWVzc2FnZXMgZm9yIHRoaXMgc3BlZWNoLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9uRmluaXNoIC0gRnVuY2l0b24gdG8gZXhlY3V0ZSBvbmNlIHRoZSBzcGVlY2ggc3RvcHMuXHJcbiAgICogQHBhcmFtIHtvbkVycm9yPX0gb25FcnJvciAtIEZ1bmN0aW9uIHRvIGV4ZWN1dGUgaWYgdGhlIHNwZWVjaCBlbmNvdW50ZXJzIGFuXHJcbiAgICogZXJyb3IuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9uSW50ZXJydXB0IC0gRnVuY3Rpb24gdG8gZXhlY3V0ZSBpZiB0aGUgc3BlZWNoIGlzIGNhbmNlbGVkLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0RlZmVycmVkfVxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBfY3JlYXRlUHJvbWlzZShvbkZpbmlzaCwgb25FcnJvciwgb25JbnRlcnJ1cHQpIHtcclxuICAgIGNvbnN0IG9uUmVzb2x2ZSA9IHZhbHVlID0+IHtcclxuICAgICAgdGhpcy5fcGxheWluZyA9IGZhbHNlO1xyXG5cclxuICAgICAgdGhpcy5fc3BlYWtlci5lbWl0KHRoaXMuX3NwZWFrZXIuY29uc3RydWN0b3IuRVZFTlRTLnN0b3AsIHRoaXMpO1xyXG4gICAgICB0aGlzLl9zcGVha2VyLmNvbnN0cnVjdG9yLmVtaXQoXHJcbiAgICAgICAgdGhpcy5fc3BlYWtlci5jb25zdHJ1Y3Rvci5FVkVOVFMuc3RvcCxcclxuICAgICAgICB0aGlzXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBpZiAodHlwZW9mIG9uRmluaXNoID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgb25GaW5pc2godmFsdWUpO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IG9uUmVqZWN0ID0gZSA9PiB7XHJcbiAgICAgIHRoaXMuX3BsYXlpbmcgPSBmYWxzZTtcclxuXHJcbiAgICAgIHRoaXMuX3NwZWFrZXIuZW1pdCh0aGlzLl9zcGVha2VyLmNvbnN0cnVjdG9yLkVWRU5UUy5zdG9wLCB0aGlzKTtcclxuICAgICAgdGhpcy5fc3BlYWtlci5jb25zdHJ1Y3Rvci5lbWl0KFxyXG4gICAgICAgIHRoaXMuX3NwZWFrZXIuY29uc3RydWN0b3IuRVZFTlRTLnN0b3AsXHJcbiAgICAgICAgdGhpc1xyXG4gICAgICApO1xyXG5cclxuICAgICAgY29uc29sZS5lcnJvcihcclxuICAgICAgICBgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9IGVuY291bnRlcmVkIGFuIHVuZXhwZWN0ZWQgZXJyb3I6ICR7ZX1gXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBpZiAodHlwZW9mIG9uRXJyb3IgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICBvbkVycm9yKGUpO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IG9uQ2FuY2VsID0gdmFsdWUgPT4ge1xyXG4gICAgICB0aGlzLl9wbGF5aW5nID0gZmFsc2U7XHJcblxyXG4gICAgICB0aGlzLl9zcGVha2VyLmVtaXQodGhpcy5fc3BlYWtlci5jb25zdHJ1Y3Rvci5FVkVOVFMuaW50ZXJydXB0LCB0aGlzKTtcclxuICAgICAgdGhpcy5fc3BlYWtlci5jb25zdHJ1Y3Rvci5lbWl0KFxyXG4gICAgICAgIHRoaXMuX3NwZWFrZXIuY29uc3RydWN0b3IuRVZFTlRTLmludGVycnVwdCxcclxuICAgICAgICB0aGlzXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBpZiAodHlwZW9mIG9uSW50ZXJydXB0ID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgb25JbnRlcnJ1cHQodmFsdWUpO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMuX3Byb21pc2UgPSBuZXcgRGVmZXJyZWQodW5kZWZpbmVkLCBvblJlc29sdmUsIG9uUmVqZWN0LCBvbkNhbmNlbCk7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuX3Byb21pc2U7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gd2hldGhlciBvciBub3QgdGhlIHNwZWVjaCBoYXMgcmVhY2hlZCBpdCdzIGVuZC5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuICAgKi9cclxuICBfY2hlY2tGaW5pc2hlZCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9kb25lICYmIHRoaXMuX2xvY2FsVGltZSA+PSB0aGlzLl9lbmRUaW1lO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgcGxheWJhY2sgc3RhdGUgb2YgdGhlIGF1ZGlvLlxyXG4gICAqXHJcbiAgICogQHJlYWRvbmx5XHJcbiAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICovXHJcbiAgZ2V0IHBsYXlpbmcoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fcGxheWluZztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIHRleHQgb2YgdGhlIHNwZWVjaC5cclxuICAgKlxyXG4gICAqIEByZWFkb25seVxyXG4gICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICovXHJcbiAgZ2V0IHRleHQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fdGV4dDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgYSBzaGFsbG93IGNvcHkgb2YgdGhlIHNwZWVjaG1hcmtzIGFycmF5IGZvciB0aGUgc3BlZWNoLlxyXG4gICAqXHJcbiAgICogQHJlYWRvbmx5XHJcbiAgICogQHR5cGUge0FycmF5LjxPYmplY3Q+fVxyXG4gICAqL1xyXG4gIGdldCBzcGVlY2htYXJrcygpIHtcclxuICAgIHJldHVybiBbLi4udGhpcy5fc3BlZWNobWFya3NdO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyBhbmQgc2V0cyB0aGUgbnVtYmVyIG9mIHNlY29uZHMgdG8gb2Zmc2V0IHNwZWVjaG1hcmsgZW1pc3Npb24uXHJcbiAgICogQHR5cGUge251bWJlcn1cclxuICAgKi9cclxuICBnZXQgc3BlZWNobWFya09mZnNldCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9zcGVlY2htYXJrT2Zmc2V0IC8gMTAwMDtcclxuICB9XHJcblxyXG4gIHNldCBzcGVlY2htYXJrT2Zmc2V0KG9mZnNldCkge1xyXG4gICAgdGhpcy5fc3BlZWNobWFya09mZnNldCA9IG9mZnNldCAqIDEwMDA7IC8vIFN0b3JlIGFzIG1pbGxpc2Vjb25kc1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRW1pdCBzcGVlY2htYXJrIG1lc3NhZ2VzIGFzIHRoZXkgYXJlIGVuY291bnRlcmVkIGluIHN5bmMgd2l0aCBhdWRpby5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBjdXJyZW50VGltZSAtIEN1cnJlbnQgZ2xvYmFsIHRpbWUgd2hlbiB1cGRhdGUgd2FzIGNhbGxlZC5cclxuICAgKi9cclxuICB1cGRhdGUoY3VycmVudFRpbWUpIHtcclxuICAgIGlmICghdGhpcy5fcGxheWluZykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gVXBkYXRlIGxvY2FsIGF1ZGlvIHRpbWVcclxuICAgIHRoaXMuX2xvY2FsVGltZSA9IGN1cnJlbnRUaW1lIC0gdGhpcy5fc3RhcnRUaW1lO1xyXG5cclxuICAgIGlmICghdGhpcy5fZG9uZSkge1xyXG4gICAgICAvLyBFbWl0IHNwZWVjaG1hcmsgbWVzc2FnZXMgZm9yIG1hcmtzIHVwIHRvIHRoZSBjdXJyZW50IHRpbWVcclxuICAgICAgd2hpbGUgKFxyXG4gICAgICAgICF0aGlzLl9kb25lICYmXHJcbiAgICAgICAgdGhpcy5fY3VycmVudE1hcmsudGltZSArIHRoaXMuX3NwZWVjaG1hcmtPZmZzZXQgPD0gdGhpcy5fbG9jYWxUaW1lXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRoaXMuX3NwZWFrZXIuZW1pdChcclxuICAgICAgICAgIHRoaXMuX3NwZWFrZXIuY29uc3RydWN0b3IuRVZFTlRTW3RoaXMuX2N1cnJlbnRNYXJrLnR5cGVdLFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBzcGVlY2g6IHRoaXMsXHJcbiAgICAgICAgICAgIG1hcms6IHRoaXMuX2N1cnJlbnRNYXJrLFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3Qge3ZhbHVlLCBkb25lfSA9IHRoaXMuX21hcmtJdGVyLm5leHQoKTtcclxuXHJcbiAgICAgICAgdGhpcy5fY3VycmVudE1hcmsgPSB2YWx1ZTtcclxuICAgICAgICB0aGlzLl9kb25lID0gZG9uZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIEVuZCBwbGF5YmFja1xyXG4gICAgaWYgKHRoaXMuX2NoZWNrRmluaXNoZWQoKSkge1xyXG4gICAgICB0aGlzLnN0b3AoKTtcclxuICAgICAgdGhpcy5fcmVzZXQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFBsYXkgdGhlIHNwZWVjaCBmcm9tIHRoZSBiZWdpbm5pbmcuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge251bWJlcn0gY3VycmVudFRpbWUgLSBDdXJyZW50IGdsb2JhbCB0aW1lIHdoZW4gcGxheSB3YXMgY2FsbGVkLlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvbkZpbmlzaCAtIE9wdGlvbmFsIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgb25jZSB0aGUgc3BlZWNoXHJcbiAgICogcHJvbWlzZSByZXNvbHZlcy5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb25FcnJvciAtIE9wdGlvbmFsIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgaWYgdGhlIHNwZWVjaFxyXG4gICAqIGVuY291bnRlcnMgYW5kIGVycm9yIGR1cmluZyBwbGF5YmFjay5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb25JbnRlcnJ1cHQgLSBPcHRpb25hbCBmdW5jdGlvbiB0byBleGVjdXRlIGlmIHRoZSBzcGVlY2hcclxuICAgKiBpcyBjYW5jZWxlZC5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtEZWZlcnJlZH0gUmVzb2x2ZXMgb25jZSB0aGUgc3BlZWNoIHJlYWNoZXMgdGhlIGVuZCBvZiBwbGF5YmFjay5cclxuICAgKi9cclxuICBwbGF5KGN1cnJlbnRUaW1lLCBvbkZpbmlzaCwgb25FcnJvciwgb25JbnRlcnJ1cHQpIHtcclxuICAgIHRoaXMuX3Jlc2V0KGN1cnJlbnRUaW1lKTtcclxuICAgIHRoaXMuX3BsYXlpbmcgPSB0cnVlO1xyXG5cclxuICAgIHRoaXMuX3NwZWFrZXIuZW1pdCh0aGlzLl9zcGVha2VyLmNvbnN0cnVjdG9yLkVWRU5UUy5wbGF5LCB0aGlzKTtcclxuICAgIHRoaXMuX3NwZWFrZXIuY29uc3RydWN0b3IuZW1pdCh0aGlzLl9zcGVha2VyLmNvbnN0cnVjdG9yLkVWRU5UUy5wbGF5LCB0aGlzKTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5fY3JlYXRlUHJvbWlzZShvbkZpbmlzaCwgb25FcnJvciwgb25JbnRlcnJ1cHQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUGF1c2UgdGhlIHNwZWVjaCBhdCB0aGUgY3VycmVudCB0aW1lLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IGN1cnJlbnRUaW1lIC0gQ3VycmVudCBnbG9iYWwgdGltZSB3aGVuIHBhdXNlIHdhcyBjYWxsZWQuXHJcbiAgICovXHJcbiAgcGF1c2UoY3VycmVudFRpbWUpIHtcclxuICAgIHRoaXMuX3BsYXlpbmcgPSBmYWxzZTtcclxuICAgIHRoaXMuX3BhdXNlVGltZSA9IGN1cnJlbnRUaW1lO1xyXG5cclxuICAgIHRoaXMuX3NwZWFrZXIuZW1pdCh0aGlzLl9zcGVha2VyLmNvbnN0cnVjdG9yLkVWRU5UUy5wYXVzZSwgdGhpcyk7XHJcbiAgICB0aGlzLl9zcGVha2VyLmNvbnN0cnVjdG9yLmVtaXQoXHJcbiAgICAgIHRoaXMuX3NwZWFrZXIuY29uc3RydWN0b3IuRVZFTlRTLnBhdXNlLFxyXG4gICAgICB0aGlzXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVzdW1lIHRoZSBzcGVlY2ggYXQgdGhlIGN1cnJlbnQgdGltZS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBjdXJyZW50VGltZSAtIEN1cnJlbnQgZ2xvYmFsIHRpbWUgd2hlbiByZXN1bWUgd2FzIGNhbGxlZC5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb25GaW5pc2ggLSBPcHRpb25hbCBmdW5jdGlvbiB0byBleGVjdXRlIG9uY2UgdGhlIHNwZWVjaFxyXG4gICAqIHByb21pc2UgcmVzb2x2ZXMuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9uRXJyb3IgLSBPcHRpb25hbCBmdW5jdGlvbiB0byBleGVjdXRlIGlmIHRoZSBzcGVlY2hcclxuICAgKiBlbmNvdW50ZXJzIGFuZCBlcnJvciBkdXJpbmcgcGxheWJhY2suXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9uSW50ZXJydXB0IC0gT3B0aW9uYWwgZnVuY3Rpb24gdG8gZXhlY3V0ZSBpZiB0aGUgc3BlZWNoXHJcbiAgICogaXMgY2FuY2VsZWQuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7RGVmZXJyZWR9IFJlc29sdmVzIG9uY2UgdGhlIHNwZWVjaCByZWFjaGVzIHRoZSBlbmQgb2YgcGxheWJhY2suXHJcbiAgICovXHJcbiAgcmVzdW1lKGN1cnJlbnRUaW1lLCBvbkZpbmlzaCwgb25FcnJvciwgb25JbnRlcnJ1cHQpIHtcclxuICAgIC8vIFBsYXkgZnJvbSB0aGUgYmVnaW5uaW5nIGlmIHRoZSBzcGVlY2ggaGFzbid0IHBsYXllZCB5ZXRcclxuICAgIGlmICghdGhpcy5fcHJvbWlzZSkge1xyXG4gICAgICB0aGlzLl9yZXNldChjdXJyZW50VGltZSk7XHJcbiAgICAgIHRoaXMuX2NyZWF0ZVByb21pc2Uob25GaW5pc2gsIG9uRXJyb3IsIG9uSW50ZXJydXB0KTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9wbGF5aW5nID0gdHJ1ZTtcclxuICAgIHRoaXMuX3N0YXJ0VGltZSArPSBjdXJyZW50VGltZSAtIHRoaXMuX3BhdXNlVGltZTtcclxuXHJcbiAgICB0aGlzLl9zcGVha2VyLmVtaXQodGhpcy5fc3BlYWtlci5jb25zdHJ1Y3Rvci5FVkVOVFMucmVzdW1lLCB0aGlzKTtcclxuICAgIHRoaXMuX3NwZWFrZXIuY29uc3RydWN0b3IuZW1pdChcclxuICAgICAgdGhpcy5fc3BlYWtlci5jb25zdHJ1Y3Rvci5FVkVOVFMucmVzdW1lLFxyXG4gICAgICB0aGlzXHJcbiAgICApO1xyXG5cclxuICAgIHJldHVybiB0aGlzLl9wcm9taXNlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2FuY2VscyBwbGF5YmFjayBvZiB0aGUgc3BlZWNoIGF0IHRoZSBjdXJyZW50IHRpbWUuIENhbmNlbCB0aGUgc3BlZWNoIHByb21pc2UuXHJcbiAgICovXHJcbiAgY2FuY2VsKCkge1xyXG4gICAgaWYgKHRoaXMuX3Byb21pc2UpIHtcclxuICAgICAgdGhpcy5fcHJvbWlzZS5jYW5jZWwoKTtcclxuICAgICAgdGhpcy5fcHJvbWlzZSA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fcGxheWluZyA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU3RvcCB0aGUgc3BlZWNoIGFuZCByZXNldCB0aW1lIHRvIHRoZSBiZWdpbm5pbmcuIFJlc29sdmUgdGhlIHNwZWVjaCBwcm9taXNlLlxyXG4gICAqL1xyXG4gIHN0b3AoKSB7XHJcbiAgICBpZiAodGhpcy5fcHJvbWlzZSkge1xyXG4gICAgICB0aGlzLl9wcm9taXNlLnJlc29sdmUoKTtcclxuICAgICAgdGhpcy5fcHJvbWlzZSA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fcGxheWluZyA9IGZhbHNlO1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgQWJzdHJhY3RTcGVlY2g7XHJcbiIsIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxyXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTBcclxuaW1wb3J0IEFic3RyYWN0U3BlZWNoIGZyb20gJy4vQWJzdHJhY3RTcGVlY2gnO1xyXG5cclxuLyoqXHJcbiAqIFRoZSBidWlsdC1pbiBjbGFzcyBmb3IgYXN5bmNocm9ub3VzIFByb21pc2VzLlxyXG4gKiBAZXh0ZXJuYWwgQXVkaW9cclxuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvSFRNTEF1ZGlvRWxlbWVudC9BdWRpb1xyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBAZXh0ZW5kcyBBYnN0cmFjdFNwZWVjaFxyXG4gKiBAYWxpYXMgY29yZS9TcGVlY2hcclxuICovXHJcbmNsYXNzIFNwZWVjaCBleHRlbmRzIEFic3RyYWN0U3BlZWNoIHtcclxuICAvKipcclxuICAgKiBAY29uc3RydWN0b3JcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7VGV4dFRvU3BlZWNofSBzcGVha2VyIC0gVGhlIG93bmVyIG9mIHRoZSBTcGVlY2ggdGhhdCB3aWxsIGVtaXQgc3BlZWNobWFya1xyXG4gICAqIG1lc3NhZ2VzLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gVGhlIHRleHQgb2YgdGhlIHNwZWVjaC5cclxuICAgKiBAcGFyYW0ge0FycmF5LjxPYmplY3Q+fSBbc3BlZWNobWFya3M9W11dIC0gQW4gYXJyYXkgb2Ygc3BlZWNobWFyayBvYmplY3RzIHJlcHJlc2VudGluZ1xyXG4gICAqIHRoZSB0ZXh0IGFuZCB0aW1pbmcgb2YgdGhlIHNwZWVjaC5cclxuICAgKiBAcGFyYW0ge09iamVjdH0gYXVkaW9Db25maWcgLSBPYmplY3QgY29udGFpbmluZyBhdWRpbyBhbmQgdXJsLlxyXG4gICAqIEBwYXJhbSB7ZXh0ZXJuYWw6QXVkaW99IGF1ZGlvQ29uZmlnLmF1ZGlvIC0gUGxheWFibGUgYXVkaW8gb2JqZWN0LlxyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKHNwZWFrZXIsIHRleHQsIHNwZWVjaG1hcmtzID0gW10sIGF1ZGlvQ29uZmlnKSB7XHJcbiAgICBzdXBlcihzcGVha2VyLCB0ZXh0LCBzcGVlY2htYXJrcyk7XHJcbiAgICB0aGlzLl9hdWRpbyA9IGF1ZGlvQ29uZmlnLmF1ZGlvO1xyXG5cclxuICAgIC8vIEtlZXAgdHJhY2sgb2Ygd2hldGhlciB0aGUgYXVkaW8gaGFzIGZpbmlzaGVkIHBsYXlpbmcgdGhyb3VnaFxyXG4gICAgdGhpcy5fYXVkaW8ub25lbmRlZCA9ICgpID0+IHtcclxuICAgICAgdGhpcy5fYXVkaW9GaW5pc2hlZCA9IHRydWU7XHJcbiAgICB9O1xyXG4gICAgdGhpcy5fYXVkaW9GaW5pc2hlZCA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBfY2hlY2tGaW5pc2hlZCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9hdWRpb0ZpbmlzaGVkICYmIHN1cGVyLl9jaGVja0ZpbmlzaGVkKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSBwbGF5YWJsZSBhdWRpbyBmb3IgdGhlIHNwZWVjaC5cclxuICAgKlxyXG4gICAqIEByZWFkb25seVxyXG4gICAqIEB0eXBlIHtleHRlcm5hbDpBdWRpb31cclxuICAgKi9cclxuICBnZXQgYXVkaW8oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fYXVkaW87XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSBhdWRpbyB2b2x1bWUgZm9yIHRoZSBzcGVlY2guXHJcbiAgICpcclxuICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAqL1xyXG4gIGdldCB2b2x1bWUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fYXVkaW8udm9sdW1lO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0cyB0aGUgYXVkaW8gdm9sdW1lIGZvciB0aGUgc3BlZWNoLlxyXG4gICAqL1xyXG4gIHNldCB2b2x1bWUodm9sdW1lKSB7XHJcbiAgICB0aGlzLl9hdWRpby52b2x1bWUgPSB2b2x1bWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXQgdGhlIGF1ZGlvJ3MgY3VycmVudCBsb2NhbCB0aW1lIGFuZCBwbGF5IGl0LlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBfcGxheUF1ZGlvKCkge1xyXG4gICAgaWYgKHRoaXMuX3NwZWVjaG1hcmtPZmZzZXQgPCAwKSB7XHJcbiAgICAgIHRoaXMuX2F1ZGlvLmN1cnJlbnRUaW1lID0gdGhpcy5fc3BlZWNobWFya09mZnNldDtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3BsYXlpbmcpIHtcclxuICAgICAgICAgIHRoaXMuX2F1ZGlvLmN1cnJlbnRUaW1lID1cclxuICAgICAgICAgICAgKHRoaXMuX2xvY2FsVGltZSArIHRoaXMuX3NwZWVjaG1hcmtPZmZzZXQpIC8gMTAwMDtcclxuICAgICAgICAgIHRoaXMuX2F1ZGlvLnBsYXkoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sIC10aGlzLl9zcGVlY2htYXJrT2Zmc2V0KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2F1ZGlvLmN1cnJlbnRUaW1lID0gMDtcclxuICAgICAgdGhpcy5fYXVkaW8ucGxheSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUGF1c2UgdGhlIGF1ZGlvIG9uY2UgaXQgaXMgcGxheWFibGUuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIF9wYXVzZUF1ZGlvKCkge1xyXG4gICAgdGhpcy5fYXVkaW8ucGxheSgpLnRoZW4oKCkgPT4ge1xyXG4gICAgICBpZiAoIXRoaXMuX3BsYXlpbmcpIHtcclxuICAgICAgICB0aGlzLl9hdWRpby5wYXVzZSgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHBsYXkoY3VycmVudFRpbWUsIG9uRmluaXNoLCBvbkVycm9yLCBvbkludGVycnVwdCkge1xyXG4gICAgdGhpcy5fYXVkaW9GaW5pc2hlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5fcGxheUF1ZGlvKCk7XHJcblxyXG4gICAgcmV0dXJuIHN1cGVyLnBsYXkoY3VycmVudFRpbWUsIG9uRmluaXNoLCBvbkVycm9yLCBvbkludGVycnVwdCk7XHJcbiAgfVxyXG5cclxuICBwYXVzZShjdXJyZW50VGltZSkge1xyXG4gICAgdGhpcy5fcGF1c2VBdWRpbygpO1xyXG4gICAgc3VwZXIucGF1c2UoY3VycmVudFRpbWUpO1xyXG4gIH1cclxuXHJcbiAgcmVzdW1lKGN1cnJlbnRUaW1lLCBvbkZpbmlzaCwgb25FcnJvciwgb25JbnRlcnJ1cHQpIHtcclxuICAgIHRoaXMuX2F1ZGlvRmluaXNoZWQgPSBmYWxzZTtcclxuICAgIHRoaXMuX2F1ZGlvLnBsYXkoKTtcclxuXHJcbiAgICByZXR1cm4gc3VwZXIucmVzdW1lKGN1cnJlbnRUaW1lLCBvbkZpbmlzaCwgb25FcnJvciwgb25JbnRlcnJ1cHQpO1xyXG4gIH1cclxuXHJcbiAgY2FuY2VsKCkge1xyXG4gICAgdGhpcy5fcGF1c2VBdWRpbygpO1xyXG4gICAgc3VwZXIuY2FuY2VsKCk7XHJcbiAgfVxyXG5cclxuICBzdG9wKCkge1xyXG4gICAgdGhpcy5fcGF1c2VBdWRpbygpO1xyXG4gICAgdGhpcy5fYXVkaW8uY3VycmVudFRpbWUgPSAwO1xyXG4gICAgc3VwZXIuc3RvcCgpO1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgU3BlZWNoO1xyXG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cclxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVC0wXHJcbmltcG9ydCBDb3JlU3BlZWNoIGZyb20gJ2NvcmUvYXdzcGFjay9TcGVlY2gnO1xyXG5cclxuLyoqXHJcbiAqIFRocmVlanMgQXVkaW8gb2JqZWN0XHJcbiAqIEBleHRlcm5hbCBcIlRIUkVFLkF1ZGlvXCJcclxuICogQHNlZSBodHRwczovL3RocmVlanMub3JnL2RvY3MvI2FwaS9lbi9hdWRpby9BdWRpb1xyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaHJlZWpzIFBvc2l0aW9uYWxBdWRpbyBvYmplY3RcclxuICogQGV4dGVybmFsIFwiVEhSRUUuUG9zaXRpb25hbEF1ZGlvXCJcclxuICogQHNlZSBodHRwczovL3RocmVlanMub3JnL2RvY3MvI2FwaS9lbi9hdWRpby9Qb3NpdGlvbmFsQXVkaW9cclxuICovXHJcblxyXG4vKipcclxuICogQGV4dGVuZHMgY29yZS9TcGVlY2hcclxuICogQGFsaWFzIHRocmVlLmpzL1NwZWVjaFxyXG4gKi9cclxuY2xhc3MgU3BlZWNoIGV4dGVuZHMgQ29yZVNwZWVjaCB7XHJcbiAgLyoqXHJcbiAgICogQGNvbnN0cnVjdG9yXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3RocmVlLmpzL1RleHRUb1NwZWVjaEZlYXR1cmV9IHNwZWFrZXIgLSBUaGUgb3duZXIgb2YgdGhlIFNwZWVjaCB0aGF0XHJcbiAgICogd2lsbCBlbWl0IHNwZWVjaG1hcmsgbWVzc2FnZXMuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSBUaGUgdGV4dCBvZiB0aGUgc3BlZWNoLlxyXG4gICAqIEBwYXJhbSB7QXJyYXkuPE9iamVjdD59IHNwZWVjaG1hcmtzIC0gQW4gYXJyYXkgb2Ygc3BlZWNobWFyayBvYmplY3RzIHJlcHJlc2VudGluZ1xyXG4gICAqIHRoZSB0ZXh0IGFuZCB0aW1pbmcgb2YgdGhlIHNwZWVjaC5cclxuICAgKiBAcGFyYW0ge09iamVjdH0gYXVkaW9Db25maWcgLSBPYmplY3QgY29udGFpbmluZyBhdWRpbyBhbmQgdXJsLlxyXG4gICAqIEBwYXJhbSB7ZXh0ZXJuYWw6QXVkaW99IGF1ZGlvQ29uZmlnLmF1ZGlvIC0gUGxheWFibGUgYXVkaW8gb2JqZWN0LlxyXG4gICAqIEBwYXJhbSB7KGV4dGVybmFsOlwiVEhSRUUuQXVkaW9cInxleHRlcm5hbDpcIlRIUkVFLlBvc2l0aW9uYWxBdWRpb1wiKX0gYXVkaW9Db25maWcudGhyZWVBdWRpbyAtXHJcbiAgICogVGhyZWUuanMgYXVkaW8gb2JqZWN0LlxyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKHRleHRUb1NwZWVjaCwgdGV4dCwgc3BlZWNobWFya3MgPSBbXSwgYXVkaW9Db25maWcpIHtcclxuICAgIHN1cGVyKHRleHRUb1NwZWVjaCwgdGV4dCwgc3BlZWNobWFya3MsIGF1ZGlvQ29uZmlnKTtcclxuICAgIHRoaXMuX3RocmVlQXVkaW8gPSBhdWRpb0NvbmZpZy50aHJlZUF1ZGlvO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgVGhyZWUuanMgYXVkaW8gb2JqZWN0IGZvciB0aGUgc3BlZWNoLlxyXG4gICAqXHJcbiAgICogQHJlYWRvbmx5XHJcbiAgICogQHR5cGUgeyhleHRlcm5hbDpcIlRIUkVFLkF1ZGlvXCJ8ZXh0ZXJuYWw6XCJUSFJFRS5Qb3NpdGlvbmFsQXVkaW9cIil9XHJcbiAgICovXHJcbiAgZ2V0IGF1ZGlvKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3RocmVlQXVkaW87XHJcbiAgfVxyXG5cclxuICBfcGF1c2VBdWRpbygpIHtcclxuICAgIHRoaXMuX2F1ZGlvLnBhdXNlKCk7XHJcbiAgfVxyXG5cclxuICBwbGF5KGN1cnJlbnRUaW1lLCBvbkZpbmlzaCwgb25FcnJvciwgb25JbnRlcnJ1cHQpIHtcclxuICAgIC8vIFJlLWNvbm5lY3QgdGhlIEF1ZGlvIGVsZW1lbnQgdG8gc3RvcCBwbGF5YmFja1xyXG4gICAgdGhpcy5fdGhyZWVBdWRpby5kaXNjb25uZWN0KCk7XHJcbiAgICB0aGlzLl90aHJlZUF1ZGlvLmNvbm5lY3QoKTtcclxuXHJcbiAgICByZXR1cm4gc3VwZXIucGxheShjdXJyZW50VGltZSwgb25GaW5pc2gsIG9uRXJyb3IsIG9uSW50ZXJydXB0KTtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IFNwZWVjaDtcclxuIiwiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXHJcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxyXG5pbXBvcnQgQWJzdHJhY3RIb3N0RmVhdHVyZSBmcm9tICdjb3JlL0Fic3RyYWN0SG9zdEZlYXR1cmUnO1xyXG5pbXBvcnQgQW5pbWF0aW9uVXRpbHMgZnJvbSAnY29yZS9hbmltcGFjay9BbmltYXRpb25VdGlscyc7XHJcbmltcG9ydCBNYXRoVXRpbHMgZnJvbSAnY29yZS9NYXRoVXRpbHMnO1xyXG5pbXBvcnQgRGVmZXJyZWQgZnJvbSAnY29yZS9EZWZlcnJlZCc7XHJcbmltcG9ydCBTcGVlY2ggZnJvbSAnLi9BYnN0cmFjdFNwZWVjaCc7XHJcbmltcG9ydCBUZXh0VG9TcGVlY2hVdGlscyBmcm9tICcuL1RleHRUb1NwZWVjaFV0aWxzJztcclxuXHJcbi8qKlxyXG4gKiBUaGUgQW1hem9uIFBvbGx5IHNlcnZpY2Ugb2JqZWN0LlxyXG4gKiBAZXh0ZXJuYWwgUG9sbHlcclxuICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTSmF2YVNjcmlwdFNESy9sYXRlc3QvQVdTL1BvbGx5Lmh0bWxcclxuICovXHJcblxyXG4vKipcclxuICogVGhlIHByZXNpZ25lciBvYmplY3QgdGhhdCBjYW4gYmUgdXNlZCB0byBnZW5lcmF0ZSBwcmVzaWduZWQgdXJscyBmb3IgdGhlIFBvbGx5IHNlcnZpY2UuXHJcbiAqIEBleHRlcm5hbCBQcmVzaWduZXJcclxuICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTSmF2YVNjcmlwdFNESy9sYXRlc3QvQVdTL1BvbGx5L1ByZXNpZ25lci5odG1sXHJcbiAqL1xyXG5cclxuLy8gQXZhaWxhYmxlIG9wdGlvbnMgZm9yIFBvbGx5XHJcbmNvbnN0IGVuZ2luZXMgPSBbJ3N0YW5kYXJkJywgJ25ldXJhbCddO1xyXG5jb25zdCBhdWRpb0Zvcm1hdHMgPSBbJ21wMycsICdvZ2dfdm9yYmlzJywgJ3BjbSddO1xyXG5jb25zdCBzcGVlY2htYXJrVHlwZXMgPSBbJ3NlbnRlbmNlJywgJ3NzbWwnLCAndmlzZW1lJywgJ3dvcmQnXTtcclxuY29uc3Qgc2FtcGxlUmF0ZXMgPSB7XHJcbiAgbXAzOiB7XHJcbiAgICByYXRlczogWyc4MDAwJywgJzE2MDAwJywgJzIyMDUwJywgJzI0MDAwJ10sXHJcbiAgICBkZWZhdWx0czoge1xyXG4gICAgICBzdGFuZGFyZDogJzIwNTAnLFxyXG4gICAgICBuZXVyYWw6ICcyNDAwJyxcclxuICAgIH0sXHJcbiAgfSxcclxuICBwY206IHtcclxuICAgIHJhdGVzOiBbJzgwMDAnLCAnMTYwMDAnXSxcclxuICAgIGRlZmF1bHRzOiB7XHJcbiAgICAgIHN0YW5kYXJkOiAnMTYwMCcsXHJcbiAgICAgIG5ldXJhbDogJzE2MDAnLFxyXG4gICAgfSxcclxuICB9LFxyXG59O1xyXG5zYW1wbGVSYXRlcy5vZ2dfdm9yYmlzID0gc2FtcGxlUmF0ZXMubXAzO1xyXG5sZXQgYXdzVmVyc2lvbjtcclxuXHJcbi8qKlxyXG4gKiBCYXNlIGNsYXNzIGZvciB0dXJuaW5nIHRleHQgaW5wdXQgaW50byBwbGF5YWJsZSBhdWRpby4gVGhlcmUgc2hvdWxkIGJlIG9uZSBpbnN0YW5jZVxyXG4gKiBwZXIgc3BlYWtlciwgZWFjaCBpbnN0YW5jZSBjYW4gcGxheSBvbmx5IG9uZSBwaWVjZSBvZiB0ZXh0IGF0IGEgdGltZS5cclxuICpcclxuICogQGV4dGVuZHMgQWJzdHJhY3RIb3N0RmVhdHVyZVxyXG4gKiBAYWJzdHJhY3RcclxuICpcclxuICogQHByb3BlcnR5IHsobnVtYmVyfHVuZGVmaW5lZCl9IEFXU19WRVJTSU9OIC0gR2V0cyB0aGUgdmVyc2lvbiBvZiBBV1MgU0RLIGJlaW5nXHJcbiAqIHVzZWQuIFdpbGwgYmUgdW5kZWZpbmVkIHVudGlsIFtpbml0aWFsaXplU2VydmljZV17QGxpbmsgQWJzdHJhY3RUZXh0VG9TcGVlY2hGZWF0dXJlLmluaXRpYWxpemVTZXJ2aWNlfVxyXG4gKiBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgZXhlY3V0ZWQuXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbUE9MTFlfTUlOX05FVVJBTF9WRVJTSU9OPScyLjUwMyddIC0gR2V0cyB0aGUgbWluaW11bSB2ZXJzaW9uXHJcbiAqIG9mIHRoZSBBV1MgU0RLIHRoYXQgaXMgbmVjZXNzYXJ5IHRvIHVzZSBuZXVyYWwgdm9pY2VzIHdpdGggQVdTIFBvbGx5LlxyXG4gKiBAcHJvcGVydHkge09iamVjdH0gUE9MTFlfREVGQVVMVFMgLSBEZWZhdWx0IHZhbHVlcyB0byB1c2Ugd2l0aCBjYWxscyB0byB7QGxpbmsgZXh0ZXJuYWw6UG9sbHl9LlxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW1BPTExZX0RFRkFVTFRTLkVuZ2luZT0nc3RhbmRhcmQnXVxyXG4gKiBAcHJvcGVydHkge0FycmF5LjxzdHJpbmc+fSBbUE9MTFlfREVGQVVMVFMuTGV4aWNvbk5hbWVzPVtdXVxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW1BPTExZX0RFRkFVTFRTLk91dHB1dEZvcm1hdD0nbXAzJ11cclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtQT0xMWV9ERUZBVUxUUy5TYW1wbGVSYXRlPScyMjA1MCddXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbUE9MTFlfREVGQVVMVFMuVGV4dD0nJ11cclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtQT0xMWV9ERUZBVUxUUy5UZXh0VHlwZT0nc3NtbCddXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbUE9MTFlfREVGQVVMVFMuVm9pY2VJZD0nQW15J11cclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtQT0xMWV9ERUZBVUxUUy5MYW5ndWFnZUNvZGU9J2VuLUdCJ11cclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtQT0xMWV9ERUZBVUxUUy5MYW5ndWFnZU5hbWU9J0JyaXRpc2ggRW5nbGlzaCddXHJcbiAqIEBwcm9wZXJ0eSB7QXJyYXkuPHN0cmluZz59IFtQT0xMWV9WT0lDRVM9W11dIC0gQW4gYXJyYXkgb2Ygdm9pY2VzIGF2YWlsYWJsZSBpblxyXG4gKiBQb2xseS4gV2lsbCBiZSBlbXB0eSB1bnRpbCBbaW5pdGlhbGl6ZVNlcnZpY2Vde0BsaW5rIEFic3RyYWN0VGV4dFRvU3BlZWNoRmVhdHVyZS5pbml0aWFsaXplU2VydmljZX1cclxuICogaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IGV4ZWN1dGVkLiBTZWUgW1BvbGx5IERvY3VtZW50YXRpb25de0BsaW5rIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9wb2xseS9sYXRlc3QvZGcvdm9pY2VsaXN0Lmh0bWx9XHJcbiAqIGZvciBhIGZ1bGwgbGlzdCBvZiBhdmFpbGFibGUgdm9pY2VzLlxyXG4gKiBAcHJvcGVydHkge09iamVjdH0gW1BPTExZX0xBTkdVQUdFUz17fV0gLSBBbiBvYmplY3QgdGhhdCBtYXBzIGxhbmd1YWdlIG5hbWVzXHJcbiAqIHRvIGxhbmd1YWdlIGNvZGVzIHRoYXQgYXJlIGF2YWlsYWJsZSBpbiBQb2xseS4gV2lsbCBiZSBlbXB0eSB1bnRpbFxyXG4gKiBbaW5pdGlhbGl6ZVNlcnZpY2Vde0BsaW5rIEFic3RyYWN0VGV4dFRvU3BlZWNoRmVhdHVyZS5pbml0aWFsaXplU2VydmljZX1cclxuICogaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IGV4ZWN1dGVkLiBTZWUgW1BvbGx5IERvY3VtZW50YXRpb25de0BsaW5rIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9wb2xseS9sYXRlc3QvZGcvU3VwcG9ydGVkTGFuZ3VhZ2UuaHRtbH1cclxuICogZm9yIGEgZnVsbCBsaXN0IG9mIGF2YWlsYWJsZSBsYW5ndWFnZXMgYW5kIGNvcnJlc3BvbmRpbmcgY29kZXMuXHJcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBbUE9MTFlfTEFOR1VBR0VfQ09ERVM9e31dIC0gQW4gb2JqZWN0IHRoYXQgbWFwcyBsYW5ndWFnZSBjb2Rlc1xyXG4gKiB0byBsYW5ndWFnZSBuYW1lcyB0aGF0IGFyZSBhdmFpbGFibGUgaW4gUG9sbHkuIFdpbGwgYmUgZW1wdHkgdW50aWxcclxuICogW2luaXRpYWxpemVTZXJ2aWNlXXtAbGluayBBYnN0cmFjdFRleHRUb1NwZWVjaEZlYXR1cmUuaW5pdGlhbGl6ZVNlcnZpY2V9XHJcbiAqIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBleGVjdXRlZC4gU2VlIFtQb2xseSBEb2N1bWVudGF0aW9uXXtAbGluayBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vcG9sbHkvbGF0ZXN0L2RnL1N1cHBvcnRlZExhbmd1YWdlLmh0bWx9XHJcbiAqIGZvciBhIGZ1bGwgbGlzdCBvZiBhdmFpbGFibGUgbGFuZ3VhZ2VzIGFuZCBjb3JyZXNwb25kaW5nIGNvZGVzLlxyXG4gKiBAcHJvcGVydHkge09iamVjdH0gRVZFTlRTIC0gQnVpbHQtaW4gbWVzc2FnZXMgdGhhdCB0aGUgZmVhdHVyZSBlbWl0cy4gV2hlbiB0aGVcclxuICogZmVhdHVyZSBpcyBhZGRlZCB0byBhIHtAbGluayBjb3JlL0hvc3RPYmplY3R9LCBldmVudCBuYW1lcyB3aWxsIGJlIHByZWZpeGVkIGJ5IHRoZVxyXG4gKiBuYW1lIG9mIHRoZSBmZWF0dXJlIGNsYXNzICsgJy4nLlxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW0VWRU5UUy5yZWFkeT1vblJlYWR5RXZlbnRdIC0gTWVzc2FnZSB0aGF0IGlzIGVtaXR0ZWQgYWZ0ZXJcclxuICogW2luaXRpYWxpemVTZXJ2aWNlXXtAbGluayBBYnN0cmFjdFRleHRUb1NwZWVjaEZlYXR1cmUuaW5pdGlhbGl6ZVNlcnZpY2V9IGhhcyBiZWVuXHJcbiAqIHN1Y2Nlc3NmdWxseSBleGVjdXRlZC5cclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtFVkVOVFMucGxheT1vblBsYXlFdmVudF0gLSBNZXNzYWdlIHRoYXQgaXMgZW1pdHRlZCBhZnRlclxyXG4gKiBlYWNoIGNhbGwgdG8gW3BsYXlde0BsaW5rIEFic3RyYWN0VGV4dFRvU3BlZWNoRmVhdHVyZSNwbGF5fS4gVGhlIHNwZWVjaCB0aGF0IHdhcyBwbGF5ZWRcclxuICogaXMgc3VwcGxpZWQgYXMgYW4gYXJndW1lbnQgdG8gbGlzdGVuZXIgZnVuY3Rpb25zLlxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW0VWRU5UUy5wYXVzZT1vblBhdXNlRXZlbnRdIC0gTWVzc2FnZSB0aGF0IGlzIGVtaXR0ZWQgYWZ0ZXJcclxuICogZWFjaCBjYWxsIHRvIFtwYXVzZV17QGxpbmsgQWJzdHJhY3RUZXh0VG9TcGVlY2hGZWF0dXJlI3BhdXNlfS4gVGhlIHNwZWVjaCB0aGF0IHdhcyBwYXVzZWRcclxuICogaXMgc3VwcGxpZWQgYXMgYW4gYXJndW1lbnQgdG8gbGlzdGVuZXIgZnVuY3Rpb25zLlxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW0VWRU5UUy5yZXN1bWU9b25SZXN1bWVFdmVudF0gLSBNZXNzYWdlIHRoYXQgaXMgZW1pdHRlZCBhZnRlclxyXG4gKiBlYWNoIGNhbGwgdG8gW3Jlc3VtZV17QGxpbmsgQWJzdHJhY3RUZXh0VG9TcGVlY2hGZWF0dXJlI3Jlc3VtZX0uIFRoZSBzcGVlY2ggdGhhdCB3YXNcclxuICogcmVzdW1lZCBpcyBzdXBwbGllZCBhcyBhbiBhcmd1bWVudCB0byBsaXN0ZW5lciBmdW5jdGlvbnMuXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbRVZFTlRTLmludGVycnVwdD1vbkludGVycnVwdEV2ZW50XSAtIE1lc3NhZ2UgdGhhdCBpcyBlbWl0dGVkXHJcbiAqIGlmIHRoZXJlIGlzIGEgY3VycmVudCBzcGVlY2ggaW4gcHJvZ3Jlc3MgYW5kIFtwbGF5XXtAbGluayBBYnN0cmFjdFRleHRUb1NwZWVjaEZlYXR1cmUjcGxheX1cclxuICogb3IgW3Jlc3VtZV17QGxpbmsgQWJzdHJhY3RUZXh0VG9TcGVlY2hGZWF0dXJlI3Jlc3VtZX0gYXJlIGV4ZWN1dGVkIGZvciBhIG5ldyBzcGVlY2guXHJcbiAqIFRoZSBzcGVlY2ggdGhhdCB3YXMgaW50ZXJydXB0ZWQgaXMgc3VwcGxpZWQgYXMgYW4gYXJndW1lbnQgdG8gbGlzdGVuZXIgZnVuY3Rpb25zLlxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW0VWRU5UUy5zdG9wPW9uU3RvcEV2ZW50XSAtIE1lc3NhZ2UgdGhhdCBpcyBlbWl0dGVkIGFmdGVyXHJcbiAqIGVhY2ggY2FsbCB0byBbc3RvcF17QGxpbmsgQWJzdHJhY3RUZXh0VG9TcGVlY2hGZWF0dXJlI3N0b3B9IGFuZCB3aGVuIGEgc3BlZWNoIHJlYWNoZXNcclxuICogdGhlIGVuZCBvZiBwbGF5YmFjay4gVGhlIHNwZWVjaCB0aGF0IHdhcyBzdG9wcGVkIGlzIHN1cHBsaWVkIGFzIGFuIGFyZ3VtZW50XHJcbiAqIHRvIGxpc3RlbmVyIGZ1bmN0aW9ucy5cclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtFVkVOVFMuc2VudGVuY2U9b25TZW50ZW5jZUV2ZW50XSAtIE1lc3NhZ2UgdGhhdCBpcyBlbWl0dGVkXHJcbiAqIGVhY2ggdGltZSBhIHNlbnRlbmNlIHNwZWVjaG1hcmsgaXMgZW5jb3VudGVyZWQgd2hvc2UgdGltZXN0YW1wIG1hdGNoZXMgdXAgd2l0aFxyXG4gKiB0aGUgc3BlZWNoIGF1ZGlvJ3MgY3VycmVudCB0aW1lLiBUaGUgc2VudGVuY2Ugc3BlZWNobWFyayBvYmplY3QgaXMgc3VwcGxpZWQgYXNcclxuICogYW4gYXJndW1lbnQgdG8gbGlzdGVuZXIgZnVuY3Rpb25zLlxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW0VWRU5UUy53b3JkPW9uV29yZEV2ZW50XSAtIE1lc3NhZ2UgdGhhdCBpcyBlbWl0dGVkXHJcbiAqIGVhY2ggdGltZSBhIHdvcmQgc3BlZWNobWFyayBpcyBlbmNvdW50ZXJlZCB3aG9zZSB0aW1lc3RhbXAgbWF0Y2hlcyB1cCB3aXRoXHJcbiAqIHRoZSBzcGVlY2ggYXVkaW8ncyBjdXJyZW50IHRpbWUuIFRoZSB3b3JkIHNwZWVjaG1hcmsgb2JqZWN0IGlzIHN1cHBsaWVkIGFzXHJcbiAqIGFuIGFyZ3VtZW50IHRvIGxpc3RlbmVyIGZ1bmN0aW9ucy5cclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtFVkVOVFMudmlzZW1lPW9uVmlzZW1lRXZlbnRdIC0gTWVzc2FnZSB0aGF0IGlzIGVtaXR0ZWRcclxuICogZWFjaCB0aW1lIGEgdmlzZW1lIHNwZWVjaG1hcmsgaXMgZW5jb3VudGVyZWQgd2hvc2UgdGltZXN0YW1wIG1hdGNoZXMgdXAgd2l0aFxyXG4gKiB0aGUgc3BlZWNoIGF1ZGlvJ3MgY3VycmVudCB0aW1lLiBUaGUgdmlzZW1lIHNwZWVjaG1hcmsgb2JqZWN0IGlzIHN1cHBsaWVkIGFzXHJcbiAqIGFuIGFyZ3VtZW50IHRvIGxpc3RlbmVyIGZ1bmN0aW9ucy5cclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtFVkVOVFMuc3NtbD1vblNzbWxFdmVudF0gLSBNZXNzYWdlIHRoYXQgaXMgZW1pdHRlZFxyXG4gKiBlYWNoIHRpbWUgYSBzc21sIHNwZWVjaG1hcmsgaXMgZW5jb3VudGVyZWQgd2hvc2UgdGltZXN0YW1wIG1hdGNoZXMgdXAgd2l0aFxyXG4gKiB0aGUgc3BlZWNoIGF1ZGlvJ3MgY3VycmVudCB0aW1lLiBUaGUgc3NtbCBzcGVlY2htYXJrIG9iamVjdCBpcyBzdXBwbGllZCBhc1xyXG4gKiBhbiBhcmd1bWVudCB0byBsaXN0ZW5lciBmdW5jdGlvbnMuXHJcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBTRVJWSUNFUyAtIEFXUyBzZXJ2aWNlcyB0aGF0IGFyZSBuZWNlc3NhcnkgZm9yIHRoZSBmZWF0dXJlXHJcbiAqIHRvIGZ1bmN0aW9uLlxyXG4gKiBAcHJvcGVydHkge2V4dGVybmFsOlBvbGx5fSBTRVJWSUNFUy5wb2xseSAtIFRoZSBQb2xseSBzZXJ2aWNlIHRoYXQgaXMgdXNlZFxyXG4gKiB0byBzeW50aGVzaXplIHNwZWVjaG1hcmtzLiBXaWxsIGJlIHVuZGVmaW5lZCB1bnRpbCBbaW5pdGlhbGl6ZVNlcnZpY2Vde0BsaW5rIEFic3RyYWN0VGV4dFRvU3BlZWNoRmVhdHVyZS5pbml0aWFsaXplU2VydmljZX1cclxuICogaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IGV4ZWN1dGVkXHJcbiAqIEBwcm9wZXJ0eSB7ZXh0ZXJuYWw6UHJlc2lnbmVyfSBTRVJWSUNFUy5wcmVzaWduZXIgLSBUaGUgUG9sbHkgUHJlc2lnbmVyXHJcbiAqIG9iamVjdCB0aGF0IGlzIHVzZWQgdG8gc3ludGhlc2l6ZSBzcGVlY2ggYXVkaW8uIFdpbGwgYmUgdW5kZWZpbmVkIHVudGlsXHJcbiAqIFtpbml0aWFsaXplU2VydmljZV17QGxpbmsgQWJzdHJhY3RUZXh0VG9TcGVlY2hGZWF0dXJlLmluaXRpYWxpemVTZXJ2aWNlfVxyXG4gKiBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgZXhlY3V0ZWQuXHJcbiAqL1xyXG5jbGFzcyBBYnN0cmFjdFRleHRUb1NwZWVjaEZlYXR1cmUgZXh0ZW5kcyBBYnN0cmFjdEhvc3RGZWF0dXJlIHtcclxuICAvKipcclxuICAgKiBAY29uc3RydWN0b3JcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7Y29yZS9Ib3N0T2JqZWN0fSBob3N0IC0gSG9zdCBvYmplY3QgbWFuYWdpbmcgdGhlIGZlYXR1cmUuXHJcbiAgICogQHBhcmFtIHtPYmplY3Q9fSBvcHRpb25zIC0gT3B0aW9ucyB0aGF0IHdpbGwgYmUgc2VudCB0byBQb2xseSBmb3IgZWFjaCBzcGVlY2guXHJcbiAgICogQHBhcmFtIHtzdHJpbmc9fSBvcHRpb25zLnZvaWNlIC0gVGhlIG5hbWUgb2YgdGhlIFBvbGx5IHZvaWNlIHRvIHVzZSBmb3IgYWxsIHNwZWVjaC5cclxuICAgKiBAcGFyYW0ge3N0cmluZz19IG9wdGlvbnMuZW5naW5lIC0gVGhlIG5hbWUgb2YgdGhlIFBvbGx5IGVuZ2luZSB0byB1c2UgZm9yIGFsbCBzcGVlY2guXHJcbiAgICogQHBhcmFtIHtzdHJpbmc9fSBvcHRpb25zLmxhbmd1YWdlIC0gVGhlIG5hbWUgb2YgdGhlIGxhbmd1YWdlIHRvIHVzZSBmb3IgYWxsIHNwZWVjaC5cclxuICAgKiBAcGFyYW0ge2F1ZGlvRm9ybWF0fSBbb3B0aW9ucy5hdWRpb0Zvcm1hdD0nbXAzJ10gLSBUaGUgZm9ybWF0IHRvIHVzZSBmb3IgZ2VuZXJhdGVkXHJcbiAgICogYXVkaW8gZm9yIGFsbCBzcGVlY2hlcy5cclxuICAgKiBAcGFyYW0ge3N0cmluZz19IG9wdGlvbnMuc2FtcGxlUmF0ZSAtIFRoZSBzYW1wbGUgcmF0ZSBmb3IgYXVkaW8gZmlsZXMgZm9yIGFsbFxyXG4gICAqIHNwZWVjaGVzLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5zcGVlY2htYXJrT2Zmc2V0PTBdIC0gQW1vdW50IG9mIHRpbWUgaW4gc2Vjb25kcyB0b1xyXG4gICAqIG9mZnNldCBzcGVlY2htYXJrIGV2ZW50IGVtaXNzaW9uIGZyb20gdGhlIGF1ZGlvLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5taW5FbmRNYXJrRHVyYXRpb249LjA1XSAtIFRoZSBtaW5pbXVtIGFtb3VudCBvZiB0aW1lXHJcbiAgICogaW4gc2Vjb25kcyB0aGF0IHRoZSBsYXN0IHNwZWVjaG1hcmsgb2YgZWFjaCB0eXBlIGluIGEgc3BlZWNoIGNhbiBoYXZlIGl0c1xyXG4gICAqIGR1cmF0aW9uIHByb3BlcnR5IHNldCB0by5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMudm9sdW1lPTFdIC0gVGhlIGRlZmF1bHQgdm9sdW1lIHRvIHBsYXkgc3BlZWNoIGF1ZGlvXHJcbiAgICogd2l0aC5cclxuICAgKi9cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIGhvc3QsXHJcbiAgICBvcHRpb25zID0ge1xyXG4gICAgICB2b2ljZTogdW5kZWZpbmVkLFxyXG4gICAgICBlbmdpbmU6IHVuZGVmaW5lZCxcclxuICAgICAgbGFuZ3VhZ2U6IHVuZGVmaW5lZCxcclxuICAgICAgYXVkaW9Gb3JtYXQ6ICdtcDMnLFxyXG4gICAgICBzYW1wbGVSYXRlOiB1bmRlZmluZWQsXHJcbiAgICAgIHNwZWVjaG1hcmtPZmZzZXQ6IDAsXHJcbiAgICAgIG1pbkVuZE1hcmtEdXJhdGlvbjogMC4wNSxcclxuICAgICAgdm9sdW1lOiAxLFxyXG4gICAgfVxyXG4gICkge1xyXG4gICAgc3VwZXIoaG9zdCk7XHJcblxyXG4gICAgdGhpcy5fc3BlZWNoQ2FjaGUgPSB7fTtcclxuICAgIHRoaXMuX2N1cnJlbnRTcGVlY2ggPSBudWxsO1xyXG4gICAgdGhpcy5fY3VycmVudFByb21pc2UgPSBudWxsO1xyXG4gICAgdGhpcy5faXNWYWxpZGF0ZWQgPSBmYWxzZTtcclxuICAgIHRoaXMuc3BlZWNobWFya09mZnNldCA9IE51bWJlci5pc05hTihOdW1iZXIob3B0aW9ucy5zcGVlY2htYXJrT2Zmc2V0KSlcclxuICAgICAgPyAwXHJcbiAgICAgIDogTnVtYmVyKG9wdGlvbnMuc3BlZWNobWFya09mZnNldCk7XHJcbiAgICB0aGlzLm1pbkVuZE1hcmtEdXJhdGlvbiA9IE51bWJlci5pc05hTihOdW1iZXIob3B0aW9ucy5taW5FbmRNYXJrRHVyYXRpb24pKVxyXG4gICAgICA/IDBcclxuICAgICAgOiBOdW1iZXIob3B0aW9ucy5taW5FbmRNYXJrRHVyYXRpb24pO1xyXG4gICAgdGhpcy52b2x1bWUgPSBOdW1iZXIuaXNOYU4oTnVtYmVyKG9wdGlvbnMudm9sdW1lKSlcclxuICAgICAgPyAxXHJcbiAgICAgIDogTnVtYmVyKG9wdGlvbnMudm9sdW1lKTtcclxuICAgIHRoaXMuX3Byb21pc2VzID0ge1xyXG4gICAgICB2b2x1bWU6IERlZmVycmVkLnJlc29sdmUoKSxcclxuICAgIH07XHJcbiAgICB0aGlzLl92b2x1bWVQYXVzZWQgPSBmYWxzZTtcclxuXHJcbiAgICAvLyBTZXQgZGVmYXVsdCBvcHRpb25zIGZvciBlYWNoIHNwZWVjaFxyXG4gICAgdGhpcy5fdm9pY2UgPSBvcHRpb25zLnZvaWNlIHx8IHRoaXMuY29uc3RydWN0b3IuUE9MTFlfREVGQVVMVFMuVm9pY2VJZDtcclxuICAgIHRoaXMuX2xhbmd1YWdlID0gb3B0aW9ucy5sYW5ndWFnZSB8fCB0aGlzLmNvbnN0cnVjdG9yLlBPTExZX0RFRkFVTFRTLkxhbmd1YWdlTmFtZTtcclxuICAgIHRoaXMuX2VuZ2luZSA9IGVuZ2luZXMuaW5jbHVkZXMob3B0aW9ucy5lbmdpbmUpXHJcbiAgICAgID8gb3B0aW9ucy5lbmdpbmVcclxuICAgICAgOiB0aGlzLmNvbnN0cnVjdG9yLlBPTExZX0RFRkFVTFRTLkVuZ2luZTtcclxuICAgIHRoaXMuX2F1ZGlvRm9ybWF0ID0gYXVkaW9Gb3JtYXRzLmluY2x1ZGVzKG9wdGlvbnMuYXVkaW9Gb3JtYXQpXHJcbiAgICAgID8gb3B0aW9ucy5hdWRpb0Zvcm1hdFxyXG4gICAgICA6IHRoaXMuY29uc3RydWN0b3IuUE9MTFlfREVGQVVMVFMuT3V0cHV0Rm9ybWF0O1xyXG4gICAgdGhpcy5fc2FtcGxlUmF0ZSA9IHNhbXBsZVJhdGVzW3RoaXMuX2F1ZGlvRm9ybWF0XS5yYXRlcy5pbmNsdWRlcyhcclxuICAgICAgb3B0aW9ucy5zYW1wbGVSYXRlXHJcbiAgICApXHJcbiAgICAgID8gb3B0aW9ucy5zYW1wbGVSYXRlXHJcbiAgICAgIDogdGhpcy5jb25zdHJ1Y3Rvci5QT0xMWV9ERUZBVUxUUy5TYW1wbGVSYXRlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU3RvcmUgUG9sbHksIFByZXNpZ25lciBhbmQgQVdTIFNESyBWZXJzaW9uIGZvciB1c2UgYWNyb3NzIGFsbCBpbnN0YW5jZXMuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge2V4dGVybmFsOlBvbGx5fSBwb2xseSAtIFBvbGx5IGluc3RhbmNlIHRvIHVzZSB0byBnZW5lcmF0ZSBzcGVlY2htYXJrcy5cclxuICAgKiBAcGFyYW0ge2V4dGVybmFsOlByZXNpZ25lcn0gcHJlc2lnbmVyIC0gUHJlc2lnbmVyIGluc3RhbmNlIHRvIHVzZSB0byBnZW5lcmF0ZVxyXG4gICAqIGF1ZGlvIFVSTHMuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHZlcnNpb24gLSBWZXJzaW9uIG9mIHRoZSBBV1MgU0RLIHRvIHVzZSB0byB2YWxpZGF0ZSB2b2ljZSBvcHRpb25zLlxyXG4gICAqL1xyXG4gIHN0YXRpYyBpbml0aWFsaXplU2VydmljZShwb2xseSwgcHJlc2lnbmVyLCB2ZXJzaW9uKSB7XHJcbiAgICAvLyBNYWtlIHN1cmUgYWxsIHdlcmUgZGVmaW5lZFxyXG4gICAgaWYgKFxyXG4gICAgICBwb2xseSA9PT0gdW5kZWZpbmVkXHJcbiAgICAgIHx8IHByZXNpZ25lciA9PT0gdW5kZWZpbmVkXHJcbiAgICAgIHx8IHZlcnNpb24gPT09IHVuZGVmaW5lZFxyXG4gICAgKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICAnQ2Fubm90IGluaXRpYWxpemUgVGV4dFRvU3BlZWNoIGZlYXR1cmUuIEFsbCBhcmd1bWVudHMgbXVzdCBiZSBkZWZpbmVkLidcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBBZGQgc3VtZXJpYW4gaG9zdHMgdXNlci1hZ2VudFxyXG4gICAgaWYgKHBvbGx5LmNvbmZpZykge1xyXG4gICAgICBwb2xseS5jb25maWcuY3VzdG9tVXNlckFnZW50ID0gdGhpcy5fd2l0aEN1c3RvbVVzZXJBZ2VudChcclxuICAgICAgICBwb2xseS5jb25maWcuY3VzdG9tVXNlckFnZW50XHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICBpZiAocHJlc2lnbmVyLnNlcnZpY2UgJiYgcHJlc2lnbmVyLnNlcnZpY2UuY29uZmlnKSB7XHJcbiAgICAgIHByZXNpZ25lci5zZXJ2aWNlLmNvbmZpZy5jdXN0b21Vc2VyQWdlbnQgPSB0aGlzLl93aXRoQ3VzdG9tVXNlckFnZW50KFxyXG4gICAgICAgIHByZXNpZ25lci5zZXJ2aWNlLmNvbmZpZy5jdXN0b21Vc2VyQWdlbnRcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9pc1JlYWR5ID0gZmFsc2U7XHJcblxyXG4gICAgLy8gU3RvcmUgcGFyYW1ldGVyc1xyXG4gICAgdGhpcy5TRVJWSUNFUy5wb2xseSA9IHBvbGx5O1xyXG4gICAgdGhpcy5TRVJWSUNFUy5wcmVzaWduZXIgPSBwcmVzaWduZXI7XHJcbiAgICBhd3NWZXJzaW9uID0gdmVyc2lvbjtcclxuXHJcbiAgICAvLyBDbGVhciB0aGUgY3VycmVudCBwb2xseSBvYmplY3RzXHJcbiAgICBjb25zdCBhdmFpbGFibGVWb2ljZXMgPSB0aGlzLlBPTExZX1ZPSUNFUztcclxuICAgIGF2YWlsYWJsZVZvaWNlcy5sZW5ndGggPSAwO1xyXG5cclxuICAgIGNvbnN0IGF2YWlsYWJsZUxhbmd1YWdlcyA9IHRoaXMuUE9MTFlfTEFOR1VBR0VTO1xyXG4gICAgT2JqZWN0LmtleXMoYXZhaWxhYmxlTGFuZ3VhZ2VzKS5mb3JFYWNoKG5hbWUgPT4ge1xyXG4gICAgICBkZWxldGUgYXZhaWxhYmxlTGFuZ3VhZ2VzW25hbWVdO1xyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgYXZhaWxhYmxlTGFuZ3VhZ2VDb2RlcyA9IHRoaXMuUE9MTFlfTEFOR1VBR0VfQ09ERVM7XHJcbiAgICBPYmplY3Qua2V5cyhhdmFpbGFibGVMYW5ndWFnZUNvZGVzKS5mb3JFYWNoKG5hbWUgPT4ge1xyXG4gICAgICBkZWxldGUgYXZhaWxhYmxlTGFuZ3VhZ2VDb2Rlc1tuYW1lXTtcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIFJlLXBvcHVsYXRlIGFjY29yZGluZyB0byB2ZXJzaW9uXHJcbiAgICBjb25zdCBtaW5OZXVyYWxTZGsgPSB0aGlzLlBPTExZX01JTl9ORVVSQUxfVkVSU0lPTjtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5TRVJWSUNFUy5wb2xseVxyXG4gICAgICAuZGVzY3JpYmVWb2ljZXMoKVxyXG4gICAgICAucHJvbWlzZSgpXHJcbiAgICAgIC50aGVuKHJlc3BvbnNlID0+IHtcclxuICAgICAgICBjb25zdCBhbGxDb2RlcyA9IHt9O1xyXG5cclxuICAgICAgICByZXNwb25zZS5Wb2ljZXMuZm9yRWFjaCh2b2ljZSA9PiB7XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIHZvaWNlLlN1cHBvcnRlZEVuZ2luZXMuaW5jbHVkZXMoJ3N0YW5kYXJkJylcclxuICAgICAgICAgICAgfHwgdmVyc2lvbiA+PSBtaW5OZXVyYWxTZGtcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBhdmFpbGFibGVWb2ljZXMucHVzaCh2b2ljZSk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgYXZhaWxhYmxlVm9pY2VzLmZvckVhY2godm9pY2UgPT4ge1xyXG4gICAgICAgICAgICBhdmFpbGFibGVMYW5ndWFnZXNbdm9pY2UuTGFuZ3VhZ2VOYW1lXSA9IHZvaWNlLkxhbmd1YWdlQ29kZTtcclxuICAgICAgICAgICAgYWxsQ29kZXNbdm9pY2UuTGFuZ3VhZ2VDb2RlXSA9IHZvaWNlLkxhbmd1YWdlTmFtZTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBPYmplY3QuZW50cmllcyhhdmFpbGFibGVMYW5ndWFnZXMpLmZvckVhY2goKFtuYW1lLCBjb2RlXSkgPT4ge1xyXG4gICAgICAgICAgYXZhaWxhYmxlTGFuZ3VhZ2VDb2Rlc1tjb2RlXSA9IG5hbWU7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIC8vIE5vdGlmeSB0aGF0IHdlJ3JlIHJlYWR5IHRvIGdlbmVyYXRlIHNwZWVjaGVzXHJcbiAgICAgICAgdGhpcy5faXNSZWFkeSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5lbWl0KHRoaXMuRVZFTlRTLnJlYWR5KTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIGNsYXNzIGlzIGNhcGFibGUgb2YgZ2VuZXJhdGluZyBzcGVlY2ggYXVkaW8uIFBvbGx5LFxyXG4gICAqIFByZXNpZ25lciBhbmQgQVdTIFNESyB2ZXJzaW9uIG51bWJlciBtdXN0IGhhdmUgYmVlbiBkZWZpbmVkIHVzaW5nXHJcbiAgICogW2luaXRpYWxpemVTZXJ2aWNlXXtAbGluayBBYnN0cmFjdFRleHRUb1NwZWVjaEZlYXR1cmUuaW5pdGlhbGl6ZVNlcnZpY2V9LlxyXG4gICAqXHJcbiAgICogQHJlYWRvbmx5XHJcbiAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICovXHJcbiAgc3RhdGljIGdldCBpc1JlYWR5KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2lzUmVhZHk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSB0ZXh0IG9mIHRoZSBjdXJyZW50bHkgcGxheWluZyBzcGVlY2guXHJcbiAgICpcclxuICAgKiBAcmVhZG9ubHlcclxuICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAqL1xyXG4gIGdldCBjdXJyZW50U3BlZWNoKCkge1xyXG4gICAgaWYgKHRoaXMuX2N1cnJlbnRTcGVlY2gpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRTcGVlY2gudGV4dDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyBhbmQgc2V0cyB0aGUgbnVtYmVyIG9mIHNlY29uZHMgdG8gb2Zmc2V0IHNwZWVjaG1hcmsgZW1pc3Npb24uXHJcbiAgICpcclxuICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAqL1xyXG4gIGdldCBzcGVlY2htYXJrT2Zmc2V0KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NwZWVjaG1hcmtPZmZzZXQ7XHJcbiAgfVxyXG5cclxuICBzZXQgc3BlZWNobWFya09mZnNldChvZmZzZXQpIHtcclxuICAgIHRoaXMuX3NwZWVjaG1hcmtPZmZzZXQgPSBvZmZzZXQ7XHJcblxyXG4gICAgaWYgKHRoaXMuX2N1cnJlbnRTcGVlY2gpIHtcclxuICAgICAgdGhpcy5fY3VycmVudFNwZWVjaC5zcGVlY2htYXJrT2Zmc2V0ID0gb2Zmc2V0O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyBhbmQgc2V0cyB0aGUgVGhlIG1pbmltdW0gYW1vdW50IG9mIHRpbWUgaW4gc2Vjb25kcyB0aGF0IHRoZSBsYXN0XHJcbiAgICogc3BlZWNobWFyayBvZiBlYWNoIHR5cGUgaW4gYSBzcGVlY2ggY2FuIGhhdmUgaXRzIGR1cmF0aW9uIHByb3BlcnR5IHNldCB0by5cclxuICAgKlxyXG4gICAqIEB0eXBlIG51bWJlclxyXG4gICAqL1xyXG4gIGdldCBtaW5FbmRNYXJrRHVyYXRpb24oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fbWluRW5kTWFya0R1cmF0aW9uIC8gMTAwMDtcclxuICB9XHJcblxyXG4gIHNldCBtaW5FbmRNYXJrRHVyYXRpb24oZHVyYXRpb24pIHtcclxuICAgIHRoaXMuX21pbkVuZE1hcmtEdXJhdGlvbiA9IGR1cmF0aW9uICogMTAwMDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFwcGVuZHMgdGhlIFN1bWVyaWFuIEhvc3RzIGN1c3RvbSB1c2VyLWFnZW50IHRvIGEgc3RyaW5nIGlmIGl0IGlzIG5vdFxyXG4gICAqIGFscmVhZHkgcHJlc2VudC5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gY3VycmVudFVzZXJBZ2VudCAtIFN0cmluZyB0byBhcHBlbmQgdG8gaWYgbmVlZGVkLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge3N0cmluZ31cclxuICAgKi9cclxuICBzdGF0aWMgX3dpdGhDdXN0b21Vc2VyQWdlbnQoY3VycmVudFVzZXJBZ2VudCkge1xyXG4gICAgY29uc3Qgc3VtZXJpYW5Ib3N0c1VzZXJBZ2VudCA9ICdyZXF1ZXN0LXNvdXJjZS9TdW1lcmlhbkhvc3RzJztcclxuXHJcbiAgICBpZiAoY3VycmVudFVzZXJBZ2VudCA9PSBudWxsKSB7XHJcbiAgICAgIHJldHVybiBzdW1lcmlhbkhvc3RzVXNlckFnZW50O1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjdXJyZW50VXNlckFnZW50LmluZGV4T2Yoc3VtZXJpYW5Ib3N0c1VzZXJBZ2VudCkgIT09IC0xKSB7XHJcbiAgICAgIHJldHVybiBjdXJyZW50VXNlckFnZW50O1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBjdXJyZW50VXNlckFnZW50LmNvbmNhdCgnICcsIHN1bWVyaWFuSG9zdHNVc2VyQWdlbnQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2hlY2tzIGlmIGEgZ2l2ZW4gZW5naW5lIHR5cGUgaXMgY29tcGF0aWJsZSB3aXRoIHRoZSBBV1MgU0RLIHZlcnNpb24uIElmIGl0XHJcbiAgICogaXMsIHJldHVybiB0aGUgb3JpZ2luYWwgdmFsdWUuIE90aGVyd2lzZSByZXR1cm4gYSBkZWZhdWx0LlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBlbmdpbmUgLSBUaGUgdHlwZSBvZiBQb2xseSB2b2ljZSBlbmdpbmUgdG8gdmFsaWRhdGUuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxyXG4gICAqL1xyXG4gIF92YWxpZGF0ZUVuZ2luZShlbmdpbmUpIHtcclxuICAgIC8vIERlZmF1bHQgdG8gdGhlIHN0YW5kYXJkIGVuZ2luZSBpZiBuZXVyYWwgaXMgbm90IGF2YWlsYWJsZSBmb3IgdGhpcyB2ZXJzaW9uXHJcbiAgICBpZiAoXHJcbiAgICAgIGVuZ2luZSA9PT0gdW5kZWZpbmVkXHJcbiAgICAgIHx8IHRoaXMuY29uc3RydWN0b3IuQVdTX1ZFUlNJT04gPCB0aGlzLmNvbnN0cnVjdG9yLlBPTExZX01JTl9ORVVSQUxfVkVSU0lPTlxyXG4gICAgKSB7XHJcbiAgICAgIGVuZ2luZSA9IHRoaXMuY29uc3RydWN0b3IuUE9MTFlfREVGQVVMVFMuRW5naW5lO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBlbmdpbmU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDaGVja3MgaWYgYSBnaXZlbiBhdWRpbyBmb3JtYXQgdHlwZSBpcyBjb21wYXRpYmxlIHdpdGggUG9sbHkuIElmIGl0IGlzLCByZXR1cm5cclxuICAgKiB0aGUgb3JpZ2luYWwgdmFsdWUuIE90aGVyd2lzZSByZXR1cm4gYSBkZWZhdWx0LlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBlbmdpbmUgLSBUaGUgdHlwZSBvZiBQb2xseSB2b2ljZSBlbmdpbmUgdG8gdmFsaWRhdGUuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxyXG4gICAqL1xyXG4gIF92YWxpZGF0ZUZvcm1hdChmb3JtYXQpIHtcclxuICAgIGlmIChmb3JtYXQgPT09IHVuZGVmaW5lZCB8fCAhYXVkaW9Gb3JtYXRzLmluY2x1ZGVzKGZvcm1hdCkpIHtcclxuICAgICAgZm9ybWF0ID0gdGhpcy5jb25zdHJ1Y3Rvci5QT0xMWV9ERUZBVUxUUy5PdXRwdXRGb3JtYXQ7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZvcm1hdDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENoZWNrcyBpZiBhIGdpdmVuIGF1ZGlvIHNhbXBsaW5nIHJhdGUgaXMgY29tcGF0aWJsZSB3aXRoIHRoZSBjdXJyZW50IGF1ZGlvXHJcbiAgICogZm9ybWF0LiBJZiBpdCBpcywgcmV0dXJuIHRoZSBvcmlnaW5hbCB2YWx1ZS4gT3RoZXJ3aXNlIHJldHVybiBhIGRlZmF1bHQuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGVuZ2luZSAtIFRoZSB0eXBlIG9mIFBvbGx5IHZvaWNlIGVuZ2luZSB0byB2YWxpZGF0ZS5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XHJcbiAgICovXHJcbiAgX3ZhbGlkYXRlUmF0ZShyYXRlKSB7XHJcbiAgICAvLyBVc2UgZGVmYXVsdCBpZiBzcGVjaWZpZWQgc2FtcGxlIHJhdGUgaXMgbm90IHZhbGlkIGZvciB0aGUgYXVkaW8gZm9ybWF0XHJcbiAgICBpZiAoXHJcbiAgICAgIHJhdGUgPT09IHVuZGVmaW5lZFxyXG4gICAgICB8fCAhc2FtcGxlUmF0ZXNbdGhpcy5fYXVkaW9Gb3JtYXRdLnJhdGVzLmluY2x1ZGVzKHJhdGUpXHJcbiAgICApIHtcclxuICAgICAgcmF0ZSA9IHNhbXBsZVJhdGVzW3RoaXMuX2F1ZGlvRm9ybWF0XS5kZWZhdWx0c1t0aGlzLl9lbmdpbmVdO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiByYXRlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2hlY2tzIGlmIGEgZ2l2ZW4gUG9sbHkgdm9pY2UgaWQgaXMgY29tcGF0aWJsZSB3aXRoIHRoZSBjdXJyZW50IFBvbGx5IGVuZ2luZS5cclxuICAgKiBJZiBpdCBpcywgcmV0dXJuIHRoZSBvcmlnaW5hbCB2YWx1ZS4gT3RoZXJ3aXNlIHJldHVybiBhIGRlZmF1bHQuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGVuZ2luZSAtIFRoZSB0eXBlIG9mIFBvbGx5IHZvaWNlIGVuZ2luZSB0byB2YWxpZGF0ZS5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XHJcbiAgICovXHJcbiAgX3ZhbGlkYXRlVm9pY2Uodm9pY2VJZCkge1xyXG4gICAgY29uc3Qgdm9pY2UgPSB0aGlzLmNvbnN0cnVjdG9yLlBPTExZX1ZPSUNFUy5maW5kKHYgPT4gdi5JZCA9PT0gdm9pY2VJZCk7XHJcblxyXG4gICAgLy8gVXNlIHRoZSBkZWZhdWx0IHZvaWNlIGlmIHRoZSB2b2ljZSBpc24ndCBzdXBwb3J0ZWQgYnkgdGhlIGVuZ2luZVxyXG4gICAgaWYgKHZvaWNlID09PSB1bmRlZmluZWQgfHwgIXZvaWNlLlN1cHBvcnRlZEVuZ2luZXMuaW5jbHVkZXModGhpcy5fZW5naW5lKSkge1xyXG4gICAgICB2b2ljZUlkID0gdGhpcy5jb25zdHJ1Y3Rvci5QT0xMWV9ERUZBVUxUUy5Wb2ljZUlkO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB2b2ljZUlkO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2hlY2tzIGlmIGEgZ2l2ZW4gUG9sbHkgbGFuZ3VhZ2UgaXMgY29tcGF0aWJsZSB3aXRoIHRoZSBjdXJyZW50IFBvbGx5IHZvaWNlLlxyXG4gICAqIElmIGl0IGlzLCByZXR1cm4gdGhlIG9yaWdpbmFsIHZhbHVlLiBPdGhlcndpc2UgcmV0dXJuIGEgZGVmYXVsdC5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gZW5naW5lIC0gVGhlIHR5cGUgb2YgUG9sbHkgdm9pY2UgZW5naW5lIHRvIHZhbGlkYXRlLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge3N0cmluZ31cclxuICAgKi9cclxuICBfdmFsaWRhdGVMYW5ndWFnZShsYW5ndWFnZSkge1xyXG4gICAgY29uc3Qgdm9pY2UgPSB0aGlzLmNvbnN0cnVjdG9yLlBPTExZX1ZPSUNFUy5maW5kKHYgPT4gdi5JZCA9PT0gdGhpcy5fdm9pY2UpO1xyXG4gICAgY29uc3QgbGFuZ3VhZ2VDb2RlID0gdGhpcy5jb25zdHJ1Y3Rvci5QT0xMWV9MQU5HVUFHRVNbbGFuZ3VhZ2VdO1xyXG5cclxuICAgIC8vIEZpbmQgdGhlIGxhbmd1YWdlcyBhdmFpbGFibGUgZm9yIHRoZSBjdXJyZW50IHZvaWNlXHJcbiAgICBjb25zdCBhdmFpbGFibGVDb2RlcyA9IFt2b2ljZS5MYW5ndWFnZUNvZGVdO1xyXG4gICAgaWYgKHZvaWNlLkFkZGl0aW9uYWxMYW5ndWFnZUNvZGVzKSB7XHJcbiAgICAgIGF2YWlsYWJsZUNvZGVzLnB1c2goLi4udm9pY2UuQWRkaXRpb25hbExhbmd1YWdlQ29kZXMpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIElmIHRoZSBjdXJyZW50IHZvaWNlIGRvZXNuJ3Qgc3VwcG9ydCB0aGUgbGFuZ3VhZ2UsIHVzZSBpdHMgZGVmYXVsdFxyXG4gICAgaWYgKCFhdmFpbGFibGVDb2Rlcy5pbmNsdWRlcyhsYW5ndWFnZUNvZGUpKSB7XHJcbiAgICAgIGxhbmd1YWdlID0gdGhpcy5jb25zdHJ1Y3Rvci5QT0xMWV9MQU5HVUFHRV9DT0RFU1t2b2ljZS5MYW5ndWFnZUNvZGVdO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBsYW5ndWFnZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFZhbGlkYXRlIHRoZSBjdXJyZW50IFBvbGx5IG9wdGlvbnMgdG8gbWFrZSBzdXJlIHRoZXkgYXJlIGNvbXBhdGlibGUgd2l0aCBlYWNoXHJcbiAgICogb3RoZXIuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIF92YWxpZGF0ZSgpIHtcclxuICAgIC8vIFZhbGlkYXRlIHNwZWVjaCBwYXJhbWV0ZXJzXHJcbiAgICB0aGlzLl9lbmdpbmUgPSB0aGlzLl92YWxpZGF0ZUVuZ2luZSh0aGlzLl9lbmdpbmUpO1xyXG4gICAgdGhpcy5fYXVkaW9Gb3JtYXQgPSB0aGlzLl92YWxpZGF0ZUZvcm1hdCh0aGlzLl9hdWRpb0Zvcm1hdCk7XHJcbiAgICB0aGlzLl9zYW1wbGVSYXRlID0gdGhpcy5fdmFsaWRhdGVSYXRlKHRoaXMuX3NhbXBsZVJhdGUpO1xyXG4gICAgdGhpcy5fdm9pY2UgPSB0aGlzLl92YWxpZGF0ZVZvaWNlKHRoaXMuX3ZvaWNlKTtcclxuICAgIHRoaXMuX2xhbmd1YWdlID0gdGhpcy5fdmFsaWRhdGVMYW5ndWFnZSh0aGlzLl9sYW5ndWFnZSk7XHJcbiAgICB0aGlzLl9pc1ZhbGlkYXRlZCA9IHRydWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gYW4gb2JqZWN0IGNvbnRhaW5pbmcgcGFyYW1ldGVycyBjb21wYXRpYmxlIHdpdGggUG9sbHkuc3ludGhlc2l6ZVNwZWVjaC5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7T2JqZWN0fVxyXG4gICAqL1xyXG4gIF9nZXRDb25maWcoKSB7XHJcbiAgICAvLyBNYWtlIHN1cmUgcGFyYW1ldGVycyBoYXZlIGJlZW4gdmFsaWRhdGVkXHJcbiAgICBpZiAodGhpcy5jb25zdHJ1Y3Rvci5pc1JlYWR5ICYmICF0aGlzLl9pc1ZhbGlkYXRlZCkge1xyXG4gICAgICB0aGlzLl92YWxpZGF0ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIENyZWF0ZSBhIGNvbmZpZyBvYmplY3QgY29tcGF0aWJsZSB3aXRoIFBvbGx5XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBFbmdpbmU6IHRoaXMuX2VuZ2luZSxcclxuICAgICAgT3V0cHV0Rm9ybWF0OiB0aGlzLl9hdWRpb0Zvcm1hdCxcclxuICAgICAgU2FtcGxlUmF0ZTogdGhpcy5fc2FtcGxlUmF0ZSxcclxuICAgICAgVm9pY2VJZDogdGhpcy5fdm9pY2UsXHJcbiAgICAgIExhbmd1YWdlQ29kZTogdGhpcy5jb25zdHJ1Y3Rvci5QT0xMWV9MQU5HVUFHRVNbdGhpcy5fbGFuZ3VhZ2VdLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZSBQb2xseSBwYXJhbWV0ZXJzIHdpdGggb3B0aW9ucyBmcm9tIGEgZ2l2ZW4gY29uZmlnLiBBbGwgc3RvcmVkIHNwZWVjaGVzXHJcbiAgICogd2lsbCBiZSB1cGRhdGVkIHRvIHVzZSB0aGUgbmV3IHBhcmFtZXRlcnMsIHVubGVzcyB0aGUgc3BlZWNoIHRleHQgaXMgY29udGFpbmVkXHJcbiAgICogaW4gdGhlICdza2lwU3BlZWNoZXMnIHBhcmFtZXRlci5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge09iamVjdH0gY29uZmlnIC0gUG9sbHkgcGFyYW1ldGVyIG9wdGlvbnMgdG8gb3ZlcndyaXRlLlxyXG4gICAqIEBwYXJhbSB7QXJyYXkuPHN0cmluZz59IHNraXBTcGVlY2hlcyAtIFRleHQgb2YgYW55IHNwZWVjaGVzIHRoYXQgc2hvdWxkIG5vdFxyXG4gICAqIGhhdmUgcGFyYW1ldGVycyB1cGRhdGVkLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge09iamVjdH1cclxuICAgKi9cclxuICBfdXBkYXRlQ29uZmlnKGNvbmZpZywgc2tpcFNwZWVjaGVzID0gW10pIHtcclxuICAgIGNvbnN0IGN1cnJlbnRDb25maWcgPSB0aGlzLl9nZXRDb25maWcoKTtcclxuICAgIGlmICghY29uZmlnKSB7XHJcbiAgICAgIHJldHVybiBjdXJyZW50Q29uZmlnO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX2lzVmFsaWRhdGVkID0gZmFsc2U7XHJcbiAgICBjb25zdCBjdXJyZW50Q29uZmlnU3RyID0gSlNPTi5zdHJpbmdpZnkoY3VycmVudENvbmZpZyk7XHJcblxyXG4gICAgLy8gVXBkYXRlIG9wdGlvbnNcclxuICAgIGlmIChjb25maWcuRW5naW5lKSB7XHJcbiAgICAgIHRoaXMuX2VuZ2luZSA9IGNvbmZpZy5FbmdpbmU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNvbmZpZy5hdWRpb0Zvcm1hdCkge1xyXG4gICAgICB0aGlzLl9hdWRpb0Zvcm1hdCA9IGNvbmZpZy5hdWRpb0Zvcm1hdDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoY29uZmlnLlNhbXBsZVJhdGUpIHtcclxuICAgICAgdGhpcy5fc2FtcGxlUmF0ZSA9IGNvbmZpZy5TYW1wbGVSYXRlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjb25maWcuVm9pY2VJZCkge1xyXG4gICAgICB0aGlzLl92b2ljZSA9IGNvbmZpZy5Wb2ljZUlkO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjb25maWcuTGFuZ3VhZ2UpIHtcclxuICAgICAgdGhpcy5fbGFuZ3VhZ2UgPSBjb25maWcuTGFuZ3VhZ2U7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gVmFsaWRhdGUgdGhlIGNvbmZpZ1xyXG4gICAgY29uc3QgdmFsaWRDb25maWcgPSB0aGlzLl9nZXRDb25maWcoKTtcclxuXHJcbiAgICAvLyBFeGl0IGlmIG5vdGhpbmcgaGFzIGNoYW5nZWRcclxuICAgIGNvbnN0IGNvbmZpZ1N0ciA9IEpTT04uc3RyaW5naWZ5KHZhbGlkQ29uZmlnKTtcclxuICAgIGlmIChjdXJyZW50Q29uZmlnU3RyID09PSBjb25maWdTdHIpIHtcclxuICAgICAgdGhpcy5faXNWYWxpZGF0ZWQgPSB0cnVlO1xyXG4gICAgICByZXR1cm4gdmFsaWRDb25maWc7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gVXBkYXRlIGFsbCBjYWNoZWQgY29uZmlnc1xyXG4gICAgT2JqZWN0LmVudHJpZXModGhpcy5fc3BlZWNoQ2FjaGUpLmZvckVhY2goKFt0ZXh0LCBzcGVlY2hdKSA9PiB7XHJcbiAgICAgIC8vIENoZWNrIGlmIHRoaXMgaXMgYSBza2lwcGVkIHNwZWVjaFxyXG4gICAgICBpZiAoc2tpcFNwZWVjaGVzLmluY2x1ZGVzKHRleHQpKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBzcGVlY2hDb25maWdTdHIgPSBKU09OLnN0cmluZ2lmeShzcGVlY2guY29uZmlnKTtcclxuXHJcbiAgICAgIC8vIFVwZGF0ZSB0aGUgc3BlZWNoIHdpdGggbmV3IHBhcmFtZXRlcnNcclxuICAgICAgaWYgKHNwZWVjaENvbmZpZ1N0ciAhPT0gY29uZmlnU3RyKSB7XHJcbiAgICAgICAgdGhpcy5fdXBkYXRlU3BlZWNoKHRleHQsIHZhbGlkQ29uZmlnKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIHZhbGlkQ29uZmlnO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlIGFuIGV4aXN0aW5nIHNwZWVjaCwgb3IgYWRkIGEgbmV3IHNwZWVjaCB3aXRoIG5ldyBQb2xseSBwYXJhbWV0ZXJzIHdpdGhcclxuICAgKiBvcHRpb25zIGZyb20gYSBnaXZlbiBjb25maWcuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSBUaGUgdGV4dCBvZiB0aGUgc3BlZWNoIHRvIHVwZGF0ZS5cclxuICAgKiBAcGFyYW0ge09iamVjdH0gY29uZmlnIC0gUG9sbHkgcGFyYW1ldGVyIG9wdGlvbnMgdG8gdXBkYXRlLlxyXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2ZvcmNlPWZhbHNlXSAtIFdoZXRoZXIgdG8gZm9yY2UgdGhlIHNwZWVjaCB0byBiZSB1cGRhdGVkXHJcbiAgICogaWYgbm8gcGFyYW1ldGVycyBoYXZlIGNoYW5nZXMuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7QWJzdHJhY3RTcGVlY2h9XHJcbiAgICovXHJcbiAgX3VwZGF0ZVNwZWVjaCh0ZXh0LCBjb25maWcsIGZvcmNlID0gZmFsc2UpIHtcclxuICAgIGNvbnN0IHNwZWVjaCA9IHRoaXMuX3NwZWVjaENhY2hlW3RleHRdIHx8IHt9O1xyXG4gICAgLy8gRXhpdCBpZiBub3RoaW5nIGhhcyBjaGFuZ2VkIGFuZCBmb3JjZSBpcyBmYWxzZVxyXG4gICAgaWYgKFxyXG4gICAgICAhZm9yY2VcclxuICAgICAgJiYgY29uZmlnICE9PSB1bmRlZmluZWRcclxuICAgICAgJiYgc3BlZWNoLmNvbmZpZ1xyXG4gICAgICAmJiBKU09OLnN0cmluZ2lmeShjb25maWcpID09PSBKU09OLnN0cmluZ2lmeShzcGVlY2guY29uZmlnKVxyXG4gICAgKSB7XHJcbiAgICAgIHJldHVybiBzcGVlY2g7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ3JlYXRlIHNlcGFyYXRlIHBhcmFtZXRlcnMgZm9yIGF1ZGlvIGFuZCBzcGVlY2htYXJrIGdlbmVyYXRpb25cclxuICAgIGNvbnN0IGF1ZGlvUGFyYW1zID0ge1xyXG4gICAgICAuLi5jb25maWcsXHJcbiAgICAgIFRleHQ6IHRleHQsXHJcbiAgICAgIFRleHRUeXBlOiAnc3NtbCcsXHJcbiAgICB9O1xyXG4gICAgY29uc3Qgc3BlZWNobWFya1BhcmFtcyA9IHtcclxuICAgICAgLi4uYXVkaW9QYXJhbXMsXHJcbiAgICAgIE91dHB1dEZvcm1hdDogJ2pzb24nLFxyXG4gICAgICBTcGVlY2hNYXJrVHlwZXM6IHNwZWVjaG1hcmtUeXBlcyxcclxuICAgIH07XHJcblxyXG4gICAgLy8gR2VuZXJhdGUgYXVkaW8gYW5kIHNwZWVjaG1hcmtzXHJcbiAgICBzcGVlY2guY29uZmlnID0gY29uZmlnO1xyXG4gICAgc3BlZWNoLnByb21pc2UgPSBQcm9taXNlLmFsbChbXHJcbiAgICAgIHRoaXMuX3N5bnRoZXNpemVTcGVlY2htYXJrcyhzcGVlY2htYXJrUGFyYW1zKSxcclxuICAgICAgdGhpcy5fc3ludGhlc2l6ZUF1ZGlvKGF1ZGlvUGFyYW1zKSxcclxuICAgIF0pLnRoZW4ocmVzdWx0cyA9PiB7XHJcbiAgICAgIHJldHVybiB0aGlzLl9jcmVhdGVTcGVlY2godGV4dCwgLi4ucmVzdWx0cyk7XHJcbiAgICB9KTtcclxuICAgIHRoaXMuX3NwZWVjaENhY2hlW3RleHRdID0gc3BlZWNoO1xyXG5cclxuICAgIHJldHVybiBzcGVlY2g7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGUgYSBuZXcgU3BlZWNoIG9iamVjdCBmb3IgdGhlIHNwZWFrZXIuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtUZXh0VG9TcGVlY2h9IHNwZWFrZXIgLSBUaGUgVGV4dFRvU3BlZWNoIGluc3RhbmNlIHRoYXQgd2lsbCBvd24gdGhlIHNwZWVjaC5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIFRleHQgb2YgdGhlIHNwZWVjaC5cclxuICAgKiBAcGFyYW0ge09iamVjdH0gc3BlZWNobWFya3MgLSBTcGVlY2htYXJrcyBmb3IgdGhlIHNwZWVjaC5cclxuICAgKiBAcGFyYW0ge09iamVjdH0gYXVkaW9Db25maWcgLSBBdWRpbyBmb3IgdGhlIHNwZWVjaC5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtBYnN0cmFjdFNwZWVjaH1cclxuICAgKi9cclxuICBfY3JlYXRlU3BlZWNoKHRleHQsIHNwZWVjaG1hcmtzLCBhdWRpb0NvbmZpZykge1xyXG4gICAgcmV0dXJuIG5ldyBTcGVlY2godGhpcywgdGV4dCwgc3BlZWNobWFya3MsIGF1ZGlvQ29uZmlnKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZSBwcmVzaWduZWQgVVJMIG9mIHNwZWVjaCBhdWRpbyBmb3IgdGhlIGdpdmVuIHNwZWVjaCB0ZXh0LlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXMgLSBQYXJhbWV0ZXJzIG9iamVjdCBjb21wYXRpYmxlIHdpdGggUG9sbHkuc3ludGhlc2l6ZVNwZWVjaC5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtEZWZlcnJlZH0gUmVzb2x2ZXMgd2l0aCBhbiBvYmplY3QgY29udGFpbmluZyB0aGUgYXVkaW8gVVJMLlxyXG4gICAqL1xyXG4gIF9zeW50aGVzaXplQXVkaW8ocGFyYW1zKSB7XHJcbiAgICByZXR1cm4gbmV3IERlZmVycmVkKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgdGhpcy5jb25zdHJ1Y3Rvci5TRVJWSUNFUy5wcmVzaWduZXIuZ2V0U3ludGhlc2l6ZVNwZWVjaFVybChcclxuICAgICAgICBwYXJhbXMsXHJcbiAgICAgICAgZnVuY3Rpb24gKGVycm9yLCB1cmwpIHtcclxuICAgICAgICAgIGlmICghZXJyb3IpIHtcclxuICAgICAgICAgICAgcmVzb2x2ZSh7IHVybCB9KTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJlamVjdChlcnJvcik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXRyaWV2ZXMgYW5kIHBhcnNlcyBzcGVlY2htYXJrcyBmb3IgdGhlIGdpdmVuIHNwZWVjaCB0ZXh0LlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXMgLSBQYXJhbWV0ZXJzIG9iamVjdCBjb21wYXRpYmxlIHdpdGggUG9sbHkuc3ludGhlc2l6ZVNwZWVjaC5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtEZWZlcnJlZH0gUmVzb2x2ZXMgd2l0aCBhbiBhcnJheSBvZiBzcGVlY2htYXJrIG9iamVjdHNcclxuICAgKi9cclxuICBfc3ludGhlc2l6ZVNwZWVjaG1hcmtzKHBhcmFtcykge1xyXG4gICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IuU0VSVklDRVMucG9sbHlcclxuICAgICAgLnN5bnRoZXNpemVTcGVlY2gocGFyYW1zKVxyXG4gICAgICAucHJvbWlzZSgpXHJcbiAgICAgIC50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgLy8gQ29udmVydCBjaGFyY29kZXMgdG8gc3RyaW5nXHJcbiAgICAgICAgY29uc3QganNvblN0cmluZyA9IEpTT04uc3RyaW5naWZ5KHJlc3VsdC5BdWRpb1N0cmVhbSk7XHJcbiAgICAgICAgY29uc3QganNvbiA9IEpTT04ucGFyc2UoanNvblN0cmluZyk7XHJcbiAgICAgICAgY29uc3QgZGF0YVN0ciA9IGpzb24uZGF0YS5tYXAoYyA9PiBTdHJpbmcuZnJvbUNoYXJDb2RlKGMpKS5qb2luKCcnKTtcclxuXHJcbiAgICAgICAgY29uc3QgbWFya1R5cGVzID0ge1xyXG4gICAgICAgICAgc2VudGVuY2U6IFtdLFxyXG4gICAgICAgICAgd29yZDogW10sXHJcbiAgICAgICAgICB2aXNlbWU6IFtdLFxyXG4gICAgICAgICAgc3NtbDogW10sXHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb25zdCBlbmRNYXJrVHlwZXMgPSB7XHJcbiAgICAgICAgICBzZW50ZW5jZTogbnVsbCxcclxuICAgICAgICAgIHdvcmQ6IG51bGwsXHJcbiAgICAgICAgICB2aXNlbWU6IG51bGwsXHJcbiAgICAgICAgICBzc21sOiBudWxsLFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIC8vIFNwbGl0IGJ5IGVuY2xvc2luZyB7fSB0byBjcmVhdGUgc3BlZWNobWFyayBvYmplY3RzXHJcbiAgICAgICAgY29uc3Qgc3BlZWNoTWFya3MgPSBbLi4uZGF0YVN0ci5tYXRjaEFsbCgvXFx7Lio/XFx9KD89XFxufCQpL2dtKV0ubWFwKFxyXG4gICAgICAgICAgbWF0Y2ggPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBtYXJrID0gSlNPTi5wYXJzZShtYXRjaFswXSk7XHJcblxyXG4gICAgICAgICAgICAvLyBTZXQgdGhlIGR1cmF0aW9uIG9mIHRoZSBsYXN0IHNwZWVjaG1hcmsgc3RvcmVkIG1hdGNoaW5nIHRoaXMgb25lJ3MgdHlwZVxyXG4gICAgICAgICAgICBjb25zdCBudW1NYXJrcyA9IG1hcmtUeXBlc1ttYXJrLnR5cGVdLmxlbmd0aDtcclxuICAgICAgICAgICAgaWYgKG51bU1hcmtzID4gMCkge1xyXG4gICAgICAgICAgICAgIGNvbnN0IGxhc3RNYXJrID0gbWFya1R5cGVzW21hcmsudHlwZV1bbnVtTWFya3MgLSAxXTtcclxuICAgICAgICAgICAgICBsYXN0TWFyay5kdXJhdGlvbiA9IG1hcmsudGltZSAtIGxhc3RNYXJrLnRpbWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIG1hcmtUeXBlc1ttYXJrLnR5cGVdLnB1c2gobWFyayk7XHJcbiAgICAgICAgICAgIGVuZE1hcmtUeXBlc1ttYXJrLnR5cGVdID0gbWFyaztcclxuICAgICAgICAgICAgcmV0dXJuIG1hcms7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgLy8gRmluZCB0aGUgdGltZSBvZiB0aGUgbGF0ZXN0IHNwZWVjaG1hcmtcclxuICAgICAgICBjb25zdCBlbmRUaW1lcyA9IFtdO1xyXG4gICAgICAgIGlmIChlbmRNYXJrVHlwZXMuc2VudGVuY2UpIHtcclxuICAgICAgICAgIGVuZFRpbWVzLnB1c2goZW5kTWFya1R5cGVzLnNlbnRlbmNlLnRpbWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZW5kTWFya1R5cGVzLndvcmQpIHtcclxuICAgICAgICAgIGVuZFRpbWVzLnB1c2goZW5kTWFya1R5cGVzLndvcmQudGltZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChlbmRNYXJrVHlwZXMudmlzZW1lKSB7XHJcbiAgICAgICAgICBlbmRUaW1lcy5wdXNoKGVuZE1hcmtUeXBlcy52aXNlbWUudGltZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChlbmRNYXJrVHlwZXMuc3NtbCkge1xyXG4gICAgICAgICAgZW5kVGltZXMucHVzaChlbmRNYXJrVHlwZXMuc3NtbC50aW1lKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgZW5kVGltZSA9IE1hdGgubWF4KC4uLmVuZFRpbWVzKTtcclxuXHJcbiAgICAgICAgLy8gQ2FsY3VsYXRlIGR1cmF0aW9uIGZvciB0aGUgZW5kaW5nIHNwZWVjaE1hcmtzIG9mIGVhY2ggdHlwZVxyXG4gICAgICAgIGlmIChlbmRNYXJrVHlwZXMuc2VudGVuY2UpIHtcclxuICAgICAgICAgIGVuZE1hcmtUeXBlcy5zZW50ZW5jZS5kdXJhdGlvbiA9IE1hdGgubWF4KFxyXG4gICAgICAgICAgICB0aGlzLl9taW5FbmRNYXJrRHVyYXRpb24sXHJcbiAgICAgICAgICAgIGVuZFRpbWUgLSBlbmRNYXJrVHlwZXMuc2VudGVuY2UudGltZVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGVuZE1hcmtUeXBlcy53b3JkKSB7XHJcbiAgICAgICAgICBlbmRNYXJrVHlwZXMud29yZC5kdXJhdGlvbiA9IE1hdGgubWF4KFxyXG4gICAgICAgICAgICB0aGlzLl9taW5FbmRNYXJrRHVyYXRpb24sXHJcbiAgICAgICAgICAgIGVuZFRpbWUgLSBlbmRNYXJrVHlwZXMud29yZC50aW1lXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZW5kTWFya1R5cGVzLnZpc2VtZSkge1xyXG4gICAgICAgICAgZW5kTWFya1R5cGVzLnZpc2VtZS5kdXJhdGlvbiA9IE1hdGgubWF4KFxyXG4gICAgICAgICAgICB0aGlzLl9taW5FbmRNYXJrRHVyYXRpb24sXHJcbiAgICAgICAgICAgIGVuZFRpbWUgLSBlbmRNYXJrVHlwZXMudmlzZW1lLnRpbWVcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChlbmRNYXJrVHlwZXMuc3NtbCkge1xyXG4gICAgICAgICAgZW5kTWFya1R5cGVzLnNzbWwuZHVyYXRpb24gPSBNYXRoLm1heChcclxuICAgICAgICAgICAgdGhpcy5fbWluRW5kTWFya0R1cmF0aW9uLFxyXG4gICAgICAgICAgICBlbmRUaW1lIC0gZW5kTWFya1R5cGVzLnNzbWwudGltZVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBzcGVlY2hNYXJrcztcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIGEgU3BlZWNoIG9iamVjdCB0aGF0IGhhcyB0aGUgZ2l2ZW4gdGV4dC5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIFRoZSB0ZXh0IGNvbnRlbnQgb2YgdGhlIFNwZWVjaC5cclxuICAgKiBAcGFyYW0ge09iamVjdD19IGNvbmZpZyAtIE9wdGlvbnMgdG8gdXBkYXRlIHRoZSBTcGVlY2ggd2l0aC5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtEZWZlcnJlZH0gUmVzb2x2ZXMgd2l0aCBTcGVlY2ggb3IgbnVsbDtcclxuICAgKi9cclxuICBfZ2V0U3BlZWNoKHRleHQsIGNvbmZpZykge1xyXG4gICAgLy8gTWFrZSBzdXJlIEFXUyBzZXJ2aWNlcyBleGlzdFxyXG4gICAgaWYgKCF0aGlzLmNvbnN0cnVjdG9yLmlzUmVhZHkpIHtcclxuICAgICAgY29uc3QgZSA9ICdBV1Mgc2VydmljZXMgaGF2ZSBub3QgYmVlbiBpbml0aWFsaXplZC4nO1xyXG4gICAgICByZXR1cm4gRGVmZXJyZWQucmVqZWN0KGUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIE1ha2Ugc3VyZSBpdHMgcG9zc2libGUgdG8gZ2VuZXJhdGUgc3BlZWNoZXNcclxuICAgIGlmICghdGV4dCkge1xyXG4gICAgICBjb25zdCBlID0gJ0Nhbm5vdCBwbGF5IGEgc3BlZWNoIHdpdGggbm8gdGV4dC4nO1xyXG4gICAgICByZXR1cm4gRGVmZXJyZWQucmVqZWN0KGUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFVwZGF0ZSB0aGUgc3BlZWNoIHdpdGggb3B0aW9uc1xyXG4gICAgdGV4dCA9IFRleHRUb1NwZWVjaFV0aWxzLnZhbGlkYXRlVGV4dCh0ZXh0KTtcclxuICAgIGNvbmZpZyA9IHRoaXMuX3VwZGF0ZUNvbmZpZyhjb25maWcsIHRleHQpO1xyXG5cclxuICAgIHJldHVybiB0aGlzLl91cGRhdGVTcGVlY2godGV4dCwgY29uZmlnKS5wcm9taXNlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWRkcyBhIG5hbWVzcGFjZSB0byB0aGUgaG9zdCB3aXRoIHRoZSBuYW1lIG9mIHRoZSBmZWF0dXJlIHRvIGNvbnRhaW4gcHJvcGVydGllc1xyXG4gICAqIGFuZCBtZXRob2RzIGZyb20gdGhlIGZlYXR1cmUgdGhhdCB1c2VycyBvZiB0aGUgaG9zdCBuZWVkIGFjY2VzcyB0by5cclxuICAgKlxyXG4gICAqIEBzZWUgVGV4dFRvU3BlZWNoRmVhdHVyZVxyXG4gICAqL1xyXG4gIGluc3RhbGxBcGkoKSB7XHJcbiAgICAvKipcclxuICAgICAqIEBpbm5lclxyXG4gICAgICogQG5hbWVzcGFjZSBUZXh0VG9TcGVlY2hGZWF0dXJlXHJcbiAgICAgKi9cclxuICAgIGNvbnN0IGFwaSA9IHN1cGVyLmluc3RhbGxBcGkoKTtcclxuXHJcbiAgICBPYmplY3QuYXNzaWduKGFwaSwge1xyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIFRleHRUb1NwZWVjaEZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBtZXRob2RcclxuICAgICAgICogQHNlZSBBYnN0cmFjdFRleHRUb1NwZWVjaEZlYXR1cmUjcGxheVxyXG4gICAgICAgKi9cclxuICAgICAgcGxheTogdGhpcy5wbGF5LmJpbmQodGhpcyksXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbWVtYmVyb2YgVGV4dFRvU3BlZWNoRmVhdHVyZVxyXG4gICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICogQG1ldGhvZFxyXG4gICAgICAgKiBAc2VlIEFic3RyYWN0VGV4dFRvU3BlZWNoRmVhdHVyZSNwYXVzZVxyXG4gICAgICAgKi9cclxuICAgICAgcGF1c2U6IHRoaXMucGF1c2UuYmluZCh0aGlzKSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBtZW1iZXJvZiBUZXh0VG9TcGVlY2hGZWF0dXJlXHJcbiAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgKiBAbWV0aG9kXHJcbiAgICAgICAqIEBzZWUgQWJzdHJhY3RUZXh0VG9TcGVlY2hGZWF0dXJlI3Jlc3VtZVxyXG4gICAgICAgKi9cclxuICAgICAgcmVzdW1lOiB0aGlzLnJlc3VtZS5iaW5kKHRoaXMpLFxyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIFRleHRUb1NwZWVjaEZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBtZXRob2RcclxuICAgICAgICogQHNlZSBBYnN0cmFjdFRleHRUb1NwZWVjaEZlYXR1cmUjc3RvcFxyXG4gICAgICAgKi9cclxuICAgICAgc3RvcDogdGhpcy5zdG9wLmJpbmQodGhpcyksXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbWVtYmVyb2YgVGV4dFRvU3BlZWNoRmVhdHVyZVxyXG4gICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICogQG1ldGhvZFxyXG4gICAgICAgKiBAc2VlIEFic3RyYWN0VGV4dFRvU3BlZWNoRmVhdHVyZSNnZXRWb2x1bWVcclxuICAgICAgICovXHJcbiAgICAgIGdldFZvbHVtZTogdGhpcy5nZXRWb2x1bWUuYmluZCh0aGlzKSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBtZW1iZXJvZiBUZXh0VG9TcGVlY2hGZWF0dXJlXHJcbiAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgKiBAbWV0aG9kXHJcbiAgICAgICAqIEBzZWUgQWJzdHJhY3RUZXh0VG9TcGVlY2hGZWF0dXJlI3NldFZvbHVtZVxyXG4gICAgICAgKi9cclxuICAgICAgc2V0Vm9sdW1lOiB0aGlzLnNldFZvbHVtZS5iaW5kKHRoaXMpLFxyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIFRleHRUb1NwZWVjaEZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBtZXRob2RcclxuICAgICAgICogQHNlZSBBYnN0cmFjdFRleHRUb1NwZWVjaEZlYXR1cmUjcGF1c2VWb2x1bWVcclxuICAgICAgICovXHJcbiAgICAgIHBhdXNlVm9sdW1lOiB0aGlzLnBhdXNlVm9sdW1lLmJpbmQodGhpcyksXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbWVtYmVyb2YgVGV4dFRvU3BlZWNoRmVhdHVyZVxyXG4gICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICogQG1ldGhvZFxyXG4gICAgICAgKiBAc2VlIEFic3RyYWN0VGV4dFRvU3BlZWNoRmVhdHVyZSNyZXN1bWVWb2x1bWVcclxuICAgICAgICovXHJcbiAgICAgIHJlc3VtZVZvbHVtZTogdGhpcy5yZXN1bWVWb2x1bWUuYmluZCh0aGlzKSxcclxuICAgIH0pO1xyXG5cclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGFwaSwge1xyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIFRleHRUb1NwZWVjaEZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBzZWUgQWJzdHJhY3RUZXh0VG9TcGVlY2hGZWF0dXJlI3NwZWVjaG1hcmtPZmZzZXRcclxuICAgICAgICovXHJcbiAgICAgIHNwZWVjaG1hcmtPZmZzZXQ6IHtcclxuICAgICAgICBnZXQ6ICgpID0+IHRoaXMuc3BlZWNobWFya09mZnNldCxcclxuICAgICAgICBzZXQ6IG9mZnNldCA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNwZWVjaG1hcmtPZmZzZXQgPSBvZmZzZXQ7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBhcGk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIGFuZCBzZXRzIHRoZSB2b2x1bWUgdXNlZCBmb3IgYWxsIGF1ZGlvIGNsaXBzIHBsYXllZCBieSB0aGUgc3BlYWtlci5cclxuICAgKlxyXG4gICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICovXHJcbiAgc2V0IHZvbHVtZSh2b2x1bWUpIHtcclxuICAgIHRoaXMuX3ZvbHVtZSA9IE1hdGhVdGlscy5jbGFtcCh2b2x1bWUpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHZvbHVtZSgpIHtcclxuICAgIHJldHVybiB0aGlzLl92b2x1bWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHdoZXRoZXIgb3Igbm90IHRoZSBzcGVha2VyJ3Mgdm9sdW1lIHZhbHVlIGlzIGN1cnJlbnRseSBiZWluZyB0d2VlbmVkLlxyXG4gICAqXHJcbiAgICogQHJlYWRvbmx5XHJcbiAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICovXHJcbiAgZ2V0IHZvbHVtZVBlbmRpbmcoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fcHJvbWlzZXMudm9sdW1lICYmIHRoaXMuX3Byb21pc2VzLnZvbHVtZS5wZW5kaW5nO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgdm9sdW1lIHVzZWQgZm9yIGFsbCBhdWRpbyBjbGlwcyBwbGF5ZWQgYnkgdGhlIHNwZWFrZXIuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxyXG4gICAqL1xyXG4gIGdldFZvbHVtZSgpIHtcclxuICAgIHJldHVybiB0aGlzLnZvbHVtZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZXMgdGhlIHZvbHVtZSB1c2VkIGZvciBhbGwgYXVkaW8gY2xpcHMgcGxheWVkIGJ5IHRoZSBzcGVha2VyIG92ZXIgdGltZS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB2b2x1bWUgLSBUYXJnZXQgdm9sdW1lIHZhbHVlLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbc2Vjb25kcz0wXSAtIEFtb3VudCBvZiB0aW1lIGl0IHdpbGwgdGFrZSB0byByZWFjaCB0aGUgdGFyZ2V0XHJcbiAgICogdm9sdW1lLlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBlYXNpbmdGbiAtIEVhc2luZyBmdW5jdGlvbiB1c2VkIGZvciBpbnRlcnBvbGF0aW9uLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0RlZmVycmVkfVxyXG4gICAqL1xyXG4gIHNldFZvbHVtZSh2b2x1bWUsIHNlY29uZHMgPSAwLCBlYXNpbmdGbikge1xyXG4gICAgaWYgKHRoaXMudm9sdW1lUGVuZGluZykge1xyXG4gICAgICB0aGlzLl9wcm9taXNlcy52b2x1bWUuY2FuY2VsKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdm9sdW1lID0gTWF0aFV0aWxzLmNsYW1wKHZvbHVtZSk7XHJcbiAgICB0aGlzLl9wcm9taXNlcy52b2x1bWUgPSBBbmltYXRpb25VdGlscy5pbnRlcnBvbGF0ZVByb3BlcnR5KFxyXG4gICAgICB0aGlzLFxyXG4gICAgICAndm9sdW1lJyxcclxuICAgICAgdm9sdW1lLFxyXG4gICAgICB7IHNlY29uZHMsIGVhc2luZ0ZuIH1cclxuICAgICk7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuX3Byb21pc2VzLnZvbHVtZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFBhdXNlIGludGVycG9sYXRpb24gaGFwcGVuaW5nIG9uIHRoZSBzcGVha2VyJ3Mgdm9sdW1lIHByb3BlcnR5LlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAgICovXHJcbiAgcGF1c2VWb2x1bWUoKSB7XHJcbiAgICB0aGlzLl92b2x1bWVQYXVzZWQgPSB0cnVlO1xyXG5cclxuICAgIHJldHVybiB0aGlzLnZvbHVtZVBlbmRpbmc7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXN1bWUgYW55IGludGVycG9sYXRpb24gaGFwcGVuaW5nIG9uIHRoZSBzcGVha2VyJ3Mgdm9sdW1lIHByb3BlcnR5LlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAgICovXHJcbiAgcmVzdW1lVm9sdW1lKCkge1xyXG4gICAgdGhpcy5fdm9sdW1lUGF1c2VkID0gZmFsc2U7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMudm9sdW1lUGVuZGluZztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZSB0aGUgY3VycmVudGx5IHBsYXlpbmcgc3BlZWNoLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IGRlbHRhVGltZSAtIFRpbWUgc2luY2UgdGhlIGxhc3QgdXBkYXRlLlxyXG4gICAqL1xyXG4gIHVwZGF0ZShkZWx0YVRpbWUpIHtcclxuICAgIGlmICghdGhpcy5fdm9sdW1lUGF1c2VkKSB7XHJcbiAgICAgIHRoaXMuX3Byb21pc2VzLnZvbHVtZS5leGVjdXRlKGRlbHRhVGltZSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuX2N1cnJlbnRTcGVlY2ggJiYgdGhpcy5fY3VycmVudFNwZWVjaC5wbGF5aW5nKSB7XHJcbiAgICAgIHRoaXMuX2N1cnJlbnRTcGVlY2gudm9sdW1lID0gdGhpcy5fdm9sdW1lO1xyXG4gICAgICB0aGlzLl9jdXJyZW50U3BlZWNoLnVwZGF0ZSh0aGlzLl9ob3N0Lm5vdyk7XHJcbiAgICAgIHN1cGVyLnVwZGF0ZShkZWx0YVRpbWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0IHRoZSBjdXJyZW50IHNwZWVjaCB0byBhIG5ldyBhc3NldCBhbmQgdXBkYXRlIHRoZSBzcGVlY2gncyBzcGVlY2htYXJrXHJcbiAgICogb2Zmc2V0IHZhbHVlIHRvIG1hdGNoIHRoYXQgb2YgdGhlIGZlYXR1cmUuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtBYnN0cmFjdFNwZWVjaH0gc3BlZWNoIC0gU3BlZWNoIHRvIHNldCBhcyBjdXJyZW50LlxyXG4gICAqL1xyXG4gIF9zZXRDdXJyZW50U3BlZWNoKHNwZWVjaCkge1xyXG4gICAgc3BlZWNoLnNwZWVjaG1hcmtPZmZzZXQgPSB0aGlzLl9zcGVlY2htYXJrT2Zmc2V0O1xyXG4gICAgdGhpcy5fY3VycmVudFNwZWVjaCA9IHNwZWVjaDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZSBhIHByb21pc2UgdGhhdCB3aWxsIHBsYXkvcmVzdW1lIGEgc3BlZWNoIHdpdGggdGhlIGdpdmVuIHRleHQgYWZ0ZXJcclxuICAgKiB0aGUgYXVkaW8gY29udGV4dCBhdHRlbXB0cyB0byByZXN1bWUgYW5kIHNwZWVjaCBhdWRpbyBpcyByZXRyaWV2ZWQgZnJvbSBQb2xseS5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIFRoZSB0ZXh0IG9mIHRoZSBuZXcgc3BlZWNoIHRvIHBsYXkuXHJcbiAgICogQHBhcmFtIHtPYmplY3Q9fSBjb25maWcgLSBPcHRpb25hbCBwYXJhbWV0ZXJzIGZvciB0aGUgc3BlZWNoLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcGxheU1ldGhvZCA9ICdwbGF5J10gLSBNZXRob2QgdG8gZXhlY3V0ZSBvbiB0aGUgcmVzdWx0aW5nXHJcbiAgICogU3BlZWNoIG9iamVjdC4gVmFsaWQgb3B0aW9ucyBhcmUgJ3BsYXknIGFuZCAncmVzdW1lJy5cclxuICAgKi9cclxuICBfc3RhcnRTcGVlY2godGV4dCwgY29uZmlnLCBwbGF5TWV0aG9kID0gJ3BsYXknKSB7XHJcbiAgICAvLyBJZiBubyB0ZXh0IGlzIHByb3ZpZGVkLCB0cnkgdG8gdXNlIHRoZSBjdXJyZW50IHNwZWVjaFxyXG4gICAgaWYgKHRleHQgPT09IHVuZGVmaW5lZCAmJiBwbGF5TWV0aG9kID09PSAncmVzdW1lJyAmJiB0aGlzLl9jdXJyZW50U3BlZWNoKSB7XHJcbiAgICAgIHRleHQgPSB0aGlzLl9jdXJyZW50U3BlZWNoLnRleHQ7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgY3VycmVudFByb21pc2UgPSB0aGlzLl9jdXJyZW50UHJvbWlzZSB8fCB7XHJcbiAgICAgIHBsYXk6IG5ldyBEZWZlcnJlZChcclxuICAgICAgICB1bmRlZmluZWQsXHJcbiAgICAgICAgKCkgPT4geyBjdXJyZW50UHJvbWlzZS5zcGVlY2guY2FuY2VsKCk7IH0sXHJcbiAgICAgICAgKCkgPT4geyBjdXJyZW50UHJvbWlzZS5zcGVlY2guY2FuY2VsKCk7IH0sXHJcbiAgICAgICAgKCkgPT4geyBjdXJyZW50UHJvbWlzZS5zcGVlY2guY2FuY2VsKCk7IH1cclxuICAgICAgKSxcclxuICAgICAgc3BlZWNoOiBuZXcgRGVmZXJyZWQoKSxcclxuICAgIH07XHJcbiAgICB0aGlzLl9jdXJyZW50UHJvbWlzZSA9IGN1cnJlbnRQcm9taXNlO1xyXG5cclxuICAgIHRoaXMuX2dldFNwZWVjaCh0ZXh0LCBjb25maWcpXHJcbiAgICAgIC50aGVuKHNwZWVjaCA9PiB7XHJcbiAgICAgICAgLy8gRXhpdCBpZiB0aGUgcHJvbWlzZSBpcyBubyBsb25nZXIgcGVuZGluZyBiZWNhdXNlIG9mIHVzZXIgaW50ZXJhY3Rpb25cclxuICAgICAgICBpZiAoIWN1cnJlbnRQcm9taXNlLnBsYXkucGVuZGluZykge1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5fY3VycmVudFByb21pc2UgIT09IGN1cnJlbnRQcm9taXNlKSB7XHJcbiAgICAgICAgICAvLyBDYW5jZWwgaWYgYW5vdGhlciBjYWxsIHRvIHBsYXkgaGFzIGFscmVhZHkgYmVlbiBtYWRlXHJcbiAgICAgICAgICBjdXJyZW50UHJvbWlzZS5wbGF5LmNhbmNlbCgpO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gUmVzZXQgY3VycmVudCBzcGVlY2ggd2hlbiB0aGUgc3BlZWNoIGVuZHNcclxuICAgICAgICBjb25zdCBvbkZpbmlzaCA9ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuX2N1cnJlbnRTcGVlY2ggPSBudWxsO1xyXG4gICAgICAgICAgdGhpcy5fY3VycmVudFByb21pc2UgPSBudWxsO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIC8vIENhbmNlbCB0aGUgY3VycmVudGx5IHBsYXlpbmcgc3BlZWNoXHJcbiAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRTcGVlY2ggJiYgdGhpcy5fY3VycmVudFNwZWVjaC5wbGF5aW5nKSB7XHJcbiAgICAgICAgICBpZiAocGxheU1ldGhvZCA9PT0gJ3BsYXknKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRTcGVlY2guY2FuY2VsKCk7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKHBsYXlNZXRob2QgPT09ICdyZXN1bWUnXHJcbiAgICAgICAgICAgICYmIHRoaXMuX2N1cnJlbnRTcGVlY2guYXVkaW8gIT09IHNwZWVjaC5hdWRpbykge1xyXG4gICAgICAgICAgICB0aGlzLl9jdXJyZW50U3BlZWNoLmNhbmNlbCgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fc2V0Q3VycmVudFNwZWVjaChzcGVlY2gpO1xyXG5cclxuICAgICAgICAvLyBQbGF5IHRoZSBzcGVlY2hcclxuICAgICAgICBjdXJyZW50UHJvbWlzZS5zcGVlY2ggPSBzcGVlY2hbcGxheU1ldGhvZF0odGhpcy5faG9zdC5ub3csIG9uRmluaXNoLCBvbkZpbmlzaCwgb25GaW5pc2gpO1xyXG4gICAgICAgIGN1cnJlbnRQcm9taXNlLnNwZWVjaC50aGVuKCgpID0+IHtcclxuICAgICAgICAgIGlmIChjdXJyZW50UHJvbWlzZS5zcGVlY2gucmVzb2x2ZWQpIHtcclxuICAgICAgICAgICAgY3VycmVudFByb21pc2UucGxheS5yZXNvbHZlKCk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjdXJyZW50UHJvbWlzZS5wbGF5LmNhbmNlbCgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pLmNhdGNoKGVycm9yID0+IHtcclxuICAgICAgICAgIGN1cnJlbnRQcm9taXNlLnBsYXkucmVqZWN0KGVycm9yKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfSlcclxuICAgICAgLmNhdGNoKGUgPT4ge1xyXG4gICAgICAgIGUgPSBgQ2Fubm90ICR7cGxheU1ldGhvZH0gc3BlZWNoICR7dGV4dH0gb24gaG9zdCAke3RoaXMuaG9zdC5pZH0uICR7ZX1gO1xyXG4gICAgICAgIGN1cnJlbnRQcm9taXNlLnBsYXkucmVqZWN0KGUpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gY3VycmVudFByb21pc2UucGxheTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFN0b3AgYW55IHNwZWVjaGVzIGN1cnJlbnRseSBwbGF5aW5nIGFuZCBwbGF5IGEgbmV3IHNwZWVjaCBmcm9tIHRoZSBiZWdpbm5pbmcuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIFRoZSB0ZXh0IG9mIHRoZSBuZXcgc3BlZWNoIHRvIHBsYXkuXHJcbiAgICogQHBhcmFtIHtPYmplY3Q9fSBjb25maWcgLSBPcHRpb25hbCBwYXJhbWV0ZXJzIGZvciB0aGUgc3BlZWNoLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0RlZmVycmVkfVxyXG4gICAqL1xyXG4gIHBsYXkodGV4dCwgY29uZmlnKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fc3RhcnRTcGVlY2godGV4dCwgY29uZmlnLCAncGxheScpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSWYgYSBzcGVlY2ggaXMgY3VycmVudGx5IHBsYXlpbmcsIHBhdXNlIGl0IGF0IHRoZSBjdXJyZW50IHRpbWUuXHJcbiAgICovXHJcbiAgcGF1c2UoKSB7XHJcbiAgICBpZiAodGhpcy5fY3VycmVudFNwZWVjaCAmJiB0aGlzLl9jdXJyZW50U3BlZWNoLnBsYXlpbmcpIHtcclxuICAgICAgdGhpcy5fY3VycmVudFNwZWVjaC5wYXVzZSh0aGlzLl9ob3N0Lm5vdyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLndhcm4oXHJcbiAgICAgICAgYENhbm5vdCBwYXVzZSBzcGVlY2ggb24gaG9zdCAke3RoaXMuaG9zdC5pZH0uIE5vIHNwZWVjaCBpcyBjdXJyZW50bHkgcGxheWluZ2BcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFN0b3AgYW55IHNwZWVjaGVzIGN1cnJlbnRseSBwbGF5aW5nIGFuZCByZXN1bWUgYSBuZXcgc3BlZWNoIGZyb20gdGhlIGN1cnJlbnRcclxuICAgKiB0aW1lLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmc9fSB0ZXh0IC0gVGhlIHRleHQgb2YgdGhlIG5ldyBzcGVlY2ggdG8gcGxheS4gSWYgdW5kZWZpbmVkIGFuZFxyXG4gICAqIHRoZXJlIGlzIGEgY3VycmVudCBzcGVlY2ggdGhhdCBpcyBwYXVzZWQsIHRoZSBjdXJyZW50IHNwZWVjaCB3aWxsIGJlIHJlc3VtZWQuXHJcbiAgICogQHBhcmFtIHtPYmplY3Q9fSBjb25maWcgLSBPcHRpb25hbCBwYXJhbWV0ZXJzIGZvciB0aGUgc3BlZWNoLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0RlZmVycmVkfVxyXG4gICAqL1xyXG4gIHJlc3VtZSh0ZXh0LCBjb25maWcpIHtcclxuICAgIHJldHVybiB0aGlzLl9zdGFydFNwZWVjaCh0ZXh0LCBjb25maWcsICdyZXN1bWUnKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIElmIGEgc3BlZWNoIGlzIGN1cnJlbnRseSBwbGF5aW5nLCBzdG9wIHBsYXliYWNrIGFuZCByZXNldCB0aW1lLlxyXG4gICAqL1xyXG4gIHN0b3AoKSB7XHJcbiAgICBpZiAodGhpcy5fY3VycmVudFNwZWVjaCAmJiB0aGlzLl9jdXJyZW50U3BlZWNoLnBsYXlpbmcpIHtcclxuICAgICAgdGhpcy5fY3VycmVudFNwZWVjaC5zdG9wKCk7XHJcbiAgICAgIHRoaXMuX2N1cnJlbnRTcGVlY2ggPSBudWxsO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgIGBDYW5ub3Qgc3RvcCBzcGVlY2ggb24gaG9zdCAke3RoaXMuaG9zdC5pZH0uIE5vIHNwZWVjaCBpcyBjdXJyZW50bHkgcGxheWluZy5gXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBkaXNjYXJkKCkge1xyXG4gICAgaWYgKHRoaXMuX2N1cnJlbnRTcGVlY2ggJiYgdGhpcy5fY3VycmVudFNwZWVjaC5wbGF5aW5nKSB7XHJcbiAgICAgIHRoaXMuX2N1cnJlbnRTcGVlY2guc3RvcCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGRlbGV0ZSB0aGlzLl9zcGVlY2hDYWNoZTtcclxuXHJcbiAgICBzdXBlci5kaXNjYXJkKCk7XHJcbiAgfVxyXG59XHJcblxyXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhBYnN0cmFjdFRleHRUb1NwZWVjaEZlYXR1cmUsIHtcclxuICBBV1NfVkVSU0lPTjoge1xyXG4gICAgZ2V0OiAoKSA9PiBhd3NWZXJzaW9uLFxyXG4gIH0sXHJcbiAgUE9MTFlfTUlOX05FVVJBTF9WRVJTSU9OOiB7XHJcbiAgICB2YWx1ZTogJzIuNTAzJyxcclxuICAgIHdyaXRhYmxlOiBmYWxzZSxcclxuICB9LFxyXG4gIFBPTExZX0RFRkFVTFRTOiB7XHJcbiAgICB2YWx1ZToge1xyXG4gICAgICBFbmdpbmU6ICdzdGFuZGFyZCcsXHJcbiAgICAgIExleGljb25OYW1lczogW10sXHJcbiAgICAgIE91dHB1dEZvcm1hdDogJ21wMycsXHJcbiAgICAgIFNhbXBsZVJhdGU6ICcyMjA1MCcsXHJcbiAgICAgIFRleHQ6ICcnLFxyXG4gICAgICBUZXh0VHlwZTogJ3NzbWwnLFxyXG4gICAgICBWb2ljZUlkOiAnQW15JyxcclxuICAgICAgTGFuZ3VhZ2VDb2RlOiAnZW4tR0InLFxyXG4gICAgICBMYW5ndWFnZU5hbWU6ICdCcml0aXNoIEVuZ2xpc2gnLFxyXG4gICAgfSxcclxuICAgIHdyaXRhYmxlOiBmYWxzZSxcclxuICB9LFxyXG4gIFBPTExZX1ZPSUNFUzoge1xyXG4gICAgdmFsdWU6IFtdLFxyXG4gICAgd3JpdGFibGU6IGZhbHNlLFxyXG4gIH0sXHJcbiAgUE9MTFlfTEFOR1VBR0VTOiB7XHJcbiAgICB2YWx1ZToge30sXHJcbiAgICB3cml0YWJsZTogZmFsc2UsXHJcbiAgfSxcclxuICBQT0xMWV9MQU5HVUFHRV9DT0RFUzoge1xyXG4gICAgdmFsdWU6IHt9LFxyXG4gICAgd3JpdGFibGU6IGZhbHNlLFxyXG4gIH0sXHJcbiAgX2lzUmVhZHk6IHtcclxuICAgIHZhbHVlOiBmYWxzZSxcclxuICAgIHdyaXRhYmxlOiB0cnVlLFxyXG4gIH0sXHJcbiAgRVZFTlRTOiB7XHJcbiAgICB2YWx1ZToge1xyXG4gICAgICAuLi5PYmplY3QuZ2V0UHJvdG90eXBlT2YoQWJzdHJhY3RUZXh0VG9TcGVlY2hGZWF0dXJlKS5FVkVOVFMsXHJcbiAgICAgIHJlYWR5OiAnb25SZWFkeUV2ZW50JyxcclxuICAgICAgcGxheTogJ29uUGxheUV2ZW50JyxcclxuICAgICAgcGF1c2U6ICdvblBhdXNlRXZlbnQnLFxyXG4gICAgICByZXN1bWU6ICdvblJlc3VtZUV2ZW50JyxcclxuICAgICAgaW50ZXJydXB0OiAnb25JbnRlcnJ1cHRFdmVudCcsXHJcbiAgICAgIHN0b3A6ICdvblN0b3BFdmVudCcsXHJcbiAgICAgIHNlbnRlbmNlOiAnb25TZW50ZW5jZUV2ZW50JyxcclxuICAgICAgd29yZDogJ29uV29yZEV2ZW50JyxcclxuICAgICAgdmlzZW1lOiAnb25WaXNlbWVFdmVudCcsXHJcbiAgICAgIHNzbWw6ICdvblNzbWxFdmVudCcsXHJcbiAgICB9LFxyXG4gIH0sXHJcbiAgU0VSVklDRVM6IHtcclxuICAgIHZhbHVlOiB7XHJcbiAgICAgIC4uLk9iamVjdC5nZXRQcm90b3R5cGVPZihBYnN0cmFjdFRleHRUb1NwZWVjaEZlYXR1cmUpLlNFUlZJQ0VTLFxyXG4gICAgICBwb2xseTogdW5kZWZpbmVkLFxyXG4gICAgICBwcmVzaWduZXI6IHVuZGVmaW5lZCxcclxuICAgIH0sXHJcbiAgfSxcclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBBYnN0cmFjdFRleHRUb1NwZWVjaEZlYXR1cmU7XHJcbiIsIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxyXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTBcclxuaW1wb3J0IFNwZWVjaCBmcm9tICdhcHAvYXdzcGFjay9TcGVlY2gnO1xyXG5pbXBvcnQgRGVmZXJyZWQgZnJvbSAnY29yZS9EZWZlcnJlZCc7XHJcbmltcG9ydCBBYnN0cmFjdFRleHRUb1NwZWVjaEZlYXR1cmUgZnJvbSAnLi9BYnN0cmFjdFRleHRUb1NwZWVjaEZlYXR1cmUnO1xyXG5cclxuLyoqXHJcbiAqIEBleHRlbmRzIEFic3RyYWN0VGV4dFRvU3BlZWNoRmVhdHVyZVxyXG4gKiBAYWxpYXMgY29yZS9UZXh0VG9TcGVlY2hGZWF0dXJlXHJcbiAqL1xyXG5jbGFzcyBUZXh0VG9TcGVlY2hGZWF0dXJlIGV4dGVuZHMgQWJzdHJhY3RUZXh0VG9TcGVlY2hGZWF0dXJlIHtcclxuICBjb25zdHJ1Y3RvciguLi5hcmdzKSB7XHJcbiAgICBzdXBlciguLi5hcmdzKTtcclxuXHJcbiAgICB0aGlzLl9lbmFibGVkID0gZmFsc2U7XHJcbiAgICB0aGlzLl9zZXRBdWRpb0NvbnRleHQoKTtcclxuICAgIHRoaXMuX29ic2VydmVBdWRpb0NvbnRleHQoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFN0b3JlIHRoZSBhdWRpbyBjb250ZXh0IHRoYXQgd2lsbCBiZSB1c2VkIHRvIGVuc3VyZSBhdWRpbyBjYW4gYmUgcGxheWVkLlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBfc2V0QXVkaW9Db250ZXh0KCkge1xyXG4gICAgdGhpcy5fYXVkaW9Db250ZXh0ID0gbmV3IEF1ZGlvQ29udGV4dCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTGlzdGVuIGZvciBzdGF0ZSBjaGFuZ2VzIG9uIHRoZSBhdWRpbyBjb250ZXh0IHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSBmZWF0dXJlXHJcbiAgICogaXMgZW5hYmxlZC5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICovXHJcbiAgX29ic2VydmVBdWRpb0NvbnRleHQoKSB7XHJcbiAgICBpZiAodGhpcy5fYXVkaW9Db250ZXh0KSB7XHJcbiAgICAgIHRoaXMuX2F1ZGlvQ29udGV4dC5vbnN0YXRlY2hhbmdlID0gKCkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLl9hdWRpb0NvbnRleHQuc3RhdGUgPT09ICdydW5uaW5nJykge1xyXG4gICAgICAgICAgdGhpcy5fZW5hYmxlZCA9IHRydWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuX2VuYWJsZWQgPSBmYWxzZTtcclxuICAgICAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICAgICAgJ1RoZSBhdWRpbyBjb250ZXh0IGlzIG5vdCBydW5uaW5nLiBTcGVlY2ggd2lsbCBub3QgYmUgYWJsZSB0byBiZSBwbGF5ZWQgdW50aWwgaXQgaXMgcmVzdW1lZC4gVXNlIHRoZSBcIlRleHRUb1NwZWVjaEZlYXR1cmUucmVzdW1lQXVkaW9cIiBtZXRob2QgdG8gdHJ5IHRvIHJlc3VtZSBpdCBhZnRlciBhIHVzZXIgZ2VzdHVyZS4nXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgfTtcclxuXHJcbiAgICAgIHRoaXMuX2F1ZGlvQ29udGV4dC5vbnN0YXRlY2hhbmdlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGUgYW4gQXVkaW8gb2JqZWN0IG9mIHNwZWVjaCBhdWRpbyBmb3IgdGhlIGdpdmVuIHNwZWVjaCB0ZXh0LlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXMgLSBQYXJhbWV0ZXJzIG9iamVjdCBjb21wYXRpYmxlIHdpdGggUG9sbHkuc3ludGhlc2l6ZVNwZWVjaC5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfSBSZXNvbHZlcyB3aXRoIGFuIG9iamVjdCBjb250YWluaW5nIHRoZSBhdWRpbyBVUkwgYW5kIEF1ZGlvXHJcbiAgICogb2JqZWN0LlxyXG4gICAqL1xyXG4gIF9zeW50aGVzaXplQXVkaW8ocGFyYW1zKSB7XHJcbiAgICByZXR1cm4gc3VwZXIuX3N5bnRoZXNpemVBdWRpbyhwYXJhbXMpLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgY29uc3Qge3VybH0gPSByZXN1bHQ7XHJcblxyXG4gICAgICAvLyBDcmVhdGUgYW4gQXVkaW8gb2JqZWN0IHRoYXQgcG9pbnRzIHRvIHRoZSBwcmVzaWduZWQgdXJsXHJcbiAgICAgIGNvbnN0IGF1ZGlvID0gbmV3IEF1ZGlvKHVybCk7XHJcbiAgICAgIGF1ZGlvLmxvb3AgPSB0aGlzLmxvb3A7XHJcbiAgICAgIGF1ZGlvLmNyb3NzT3JpZ2luID0gJ2Fub255bW91cyc7XHJcbiAgICAgIGF1ZGlvLnByZWxvYWQgPSAnYXV0byc7XHJcbiAgICAgIHJlc3VsdC5hdWRpbyA9IGF1ZGlvO1xyXG5cclxuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xyXG4gICAgICAgIC8vIFJlc29sdmUgb25jZSB0aGUgbWluaW11bSBhbW91bnQgaXMgbG9hZGVkXHJcbiAgICAgICAgYXVkaW8uYWRkRXZlbnRMaXN0ZW5lcignY2FucGxheXRocm91Z2gnLCAoKSA9PiB7XHJcbiAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIC8vIFN0YXJ0IGxvYWRpbmcgdGhlIGF1ZGlvXHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChhdWRpbyk7XHJcbiAgICAgICAgYXVkaW8ubG9hZCgpO1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlIGEgbmV3IFNwZWVjaCBvYmplY3QgZm9yIHRoZSBzcGVha2VyLlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7VGV4dFRvU3BlZWNofSBzcGVha2VyIC0gVGhlIFRleHRUb1NwZWVjaCBpbnN0YW5jZSB0aGF0IHdpbGwgb3duIHRoZSBzcGVlY2guXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSBUZXh0IG9mIHRoZSBzcGVlY2guXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IHNwZWVjaG1hcmtzIC0gU3BlZWNobWFya3MgZm9yIHRoZSBzcGVlY2guXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IGF1ZGlvQ29uZmlnIC0gQXVkaW8gZm9yIHRoZSBzcGVlY2guXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7QWJzdHJhY3RTcGVlY2h9XHJcbiAgICovXHJcbiAgX2NyZWF0ZVNwZWVjaCh0ZXh0LCBzcGVlY2htYXJrcywgYXVkaW9Db25maWcpIHtcclxuICAgIHJldHVybiBuZXcgU3BlZWNoKHRoaXMsIHRleHQsIHNwZWVjaG1hcmtzLCBhdWRpb0NvbmZpZyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHdoZXRoZXIgb3Igbm90IHRoZSBhdWRpbyBjb250ZXh0IGlzIHJ1bm5pbmcgYW5kIHNwZWVjaCBjYW4gYmUgcGxheWVkLlxyXG4gICAqXHJcbiAgICogQHJlYWRvbmx5XHJcbiAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICovXHJcbiAgZ2V0IGVuYWJsZWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fZW5hYmxlZDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRyeSB0byByZXN1bWUgdGhlIGF1ZGlvIGNvbnRleHQuIFRoaXMgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGV4ZWN1dGVkIGVhY2ggdGltZVxyXG4gICAqIHNwZWVjaCBpcyBwbGF5ZWQgb3IgcmVzdW1lZC4gSWYgdXNpbmcgbWFudWFsbHksIGl0IHNob3VsZCBiZSBjYWxsZWQgYWZ0ZXIgYVxyXG4gICAqIHVzZXIgaW50ZXJhY3Rpb24gb2NjdXJzLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0RlZmVycmVkfSAtIFJlc29sdmVzIG9uY2UgdGhlIGF1ZGlvIGNvbnRleHQgaGFzIHJlc3VtZWQuXHJcbiAgICovXHJcbiAgcmVzdW1lQXVkaW8oKSB7XHJcbiAgICBjb25zdCBwcm9taXNlID0gbmV3IERlZmVycmVkKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgdGhpcy5fYXVkaW9Db250ZXh0XHJcbiAgICAgICAgLnJlc3VtZSgpXHJcbiAgICAgICAgLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5fZW5hYmxlZCA9IHRydWU7XHJcbiAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuY2F0Y2goZSA9PiB7XHJcbiAgICAgICAgICB0aGlzLl9lbmFibGVkID0gZmFsc2U7XHJcbiAgICAgICAgICByZWplY3QoZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBwcm9taXNlO1xyXG4gIH1cclxuXHJcbiAgX3N0YXJ0U3BlZWNoKHRleHQsIGNvbmZpZywgcGxheU1ldGhvZCA9ICdwbGF5Jykge1xyXG4gICAgY29uc3QgY3VycmVudFByb21pc2UgPSB7XHJcbiAgICAgIHBsYXk6IG5ldyBEZWZlcnJlZChcclxuICAgICAgICB1bmRlZmluZWQsXHJcbiAgICAgICAgKCkgPT4geyBjdXJyZW50UHJvbWlzZS5zcGVlY2guY2FuY2VsKCk7IH0sXHJcbiAgICAgICAgKCkgPT4geyBjdXJyZW50UHJvbWlzZS5zcGVlY2guY2FuY2VsKCk7IH0sXHJcbiAgICAgICAgKCkgPT4geyBjdXJyZW50UHJvbWlzZS5zcGVlY2guY2FuY2VsKCk7IH1cclxuICAgICAgKSxcclxuICAgICAgc3BlZWNoOiBuZXcgRGVmZXJyZWQoKSxcclxuICAgIH07XHJcbiAgICB0aGlzLl9jdXJyZW50UHJvbWlzZSA9IGN1cnJlbnRQcm9taXNlO1xyXG5cclxuICAgIC8vIFRyeSB0byBzdGFydCB0aGUgYXVkaW8gY29udGV4dFxyXG4gICAgdGhpcy5yZXN1bWVBdWRpbygpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAvLyBFeGl0IGlmIHRoZSBwcm9taXNlIGlzIG5vIGxvbmdlciBwZW5kaW5nIGJlY2F1c2Ugb2YgdXNlciBpbnRlcmFjdGlvblxyXG4gICAgICBpZiAoIWN1cnJlbnRQcm9taXNlLnBsYXkucGVuZGluZykge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICAvLyBDYW5jZWwgaWYgYW5vdGhlciBjYWxsIHRvIHBsYXkgaGFzIGFscmVhZHkgYmVlbiBtYWRlXHJcbiAgICAgIGVsc2UgaWYgKHRoaXMuX2N1cnJlbnRQcm9taXNlICE9PSBjdXJyZW50UHJvbWlzZSkge1xyXG4gICAgICAgIGN1cnJlbnRQcm9taXNlLnBsYXkuY2FuY2VsKCk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBUaGUgYXVkaW8gY29udGV4dCBpcyBydW5uaW5nIHNvIHRoZSBzcGVlY2ggY2FuIGJlIHBsYXllZFxyXG4gICAgICBpZiAodGhpcy5fZW5hYmxlZCkge1xyXG4gICAgICAgIHN1cGVyLl9zdGFydFNwZWVjaCh0ZXh0LCBjb25maWcsIHBsYXlNZXRob2QpO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIFJlamVjdCBpZiB0aGUgYXVkaW8gY29udGV4dCBpcyBub3QgcnVubmluZ1xyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBjdXJyZW50UHJvbWlzZS5yZWplY3QoXHJcbiAgICAgICAgICBuZXcgRXJyb3IoXHJcbiAgICAgICAgICAgIGBDYW5ub3QgJHtwbGF5TWV0aG9kfSBzcGVlY2ggb24gaG9zdCAke3RoaXMuX2hvc3QuaWR9LiBUaGUgYXVkaW8gY29udGV4dCBpcyBub3QgcnVubmluZy4gVXNlIHRoZSBcIlRleHRUb1NwZWVjaEZlYXR1cmUucmVzdW1lQXVkaW9cIiBtZXRob2QgdG8gdHJ5IHRvIHJlc3VtZSBpdCBhZnRlciBhIHVzZXIgZ2VzdHVyZS5gXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIGN1cnJlbnRQcm9taXNlLnBsYXk7XHJcbiAgfVxyXG5cclxuICBwbGF5KHRleHQsIGNvbmZpZykge1xyXG4gICAgcmV0dXJuIHRoaXMuX3N0YXJ0U3BlZWNoKHRleHQsIGNvbmZpZywgJ3BsYXknKTtcclxuICB9XHJcblxyXG4gIHJlc3VtZSh0ZXh0LCBjb25maWcpIHtcclxuICAgIHJldHVybiB0aGlzLl9zdGFydFNwZWVjaCh0ZXh0LCBjb25maWcsICdyZXN1bWUnKTtcclxuICB9XHJcblxyXG4gIGluc3RhbGxBcGkoKSB7XHJcbiAgICBjb25zdCBhcGkgPSBzdXBlci5pbnN0YWxsQXBpKCk7XHJcblxyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoYXBpLCB7XHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbWVtYmVyb2YgVGV4dFRvU3BlZWNoRmVhdHVyZVxyXG4gICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICogQHNlZSBjb3JlL1RleHRUb1NwZWVjaEZlYXR1cmUjZW5hYmxlZFxyXG4gICAgICAgKi9cclxuICAgICAgZW5hYmxlZDoge1xyXG4gICAgICAgIGdldDogKCkgPT4gdGhpcy5fZW5hYmxlZCxcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBhcGk7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBUZXh0VG9TcGVlY2hGZWF0dXJlO1xyXG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cclxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVC0wXHJcbmltcG9ydCBDb3JlVGV4dFRvU3BlZWNoRmVhdHVyZSBmcm9tICdjb3JlL2F3c3BhY2svVGV4dFRvU3BlZWNoRmVhdHVyZSc7XHJcblxyXG4vKipcclxuICogVGhyZWVqcyBQb3NpdGlvbmFsQXVkaW8gb2JqZWN0XHJcbiAqIEBleHRlcm5hbCBcIlRIUkVFLkF1ZGlvTGlzdGVuZXJcIlxyXG4gKiBAc2VlIGh0dHBzOi8vdGhyZWVqcy5vcmcvZG9jcy8jYXBpL2VuL2F1ZGlvL0F1ZGlvTGlzdGVuZXJcclxuICovXHJcblxyXG4vKipcclxuICogVGhyZWVqcyBBdWRpbyBvYmplY3RcclxuICogQGV4dGVybmFsIFwiVEhSRUUuT2JqZWN0M0RcIlxyXG4gKiBAc2VlIGh0dHBzOi8vdGhyZWVqcy5vcmcvZG9jcy8jYXBpL2VuL2NvcmUvT2JqZWN0M0RcclxuICovXHJcblxyXG4vKipcclxuICogQGV4dGVuZHMgY29yZS9UZXh0VG9TcGVlY2hGZWF0dXJlXHJcbiAqIEBhbGlhcyB0aHJlZS5qcy9UZXh0VG9TcGVlY2hGZWF0dXJlXHJcbiAqL1xyXG5jbGFzcyBUZXh0VG9TcGVlY2hGZWF0dXJlIGV4dGVuZHMgQ29yZVRleHRUb1NwZWVjaEZlYXR1cmUge1xyXG4gIC8qKlxyXG4gICAqIEBjb25zdHJ1Y3RvclxyXG4gICAqXHJcbiAgICogQHBhcmFtIHt0aHJlZS9Ib3N0T2JqZWN0fSBob3N0IC0gSG9zdCBvYmplY3QgbWFuYWdpbmcgdGhlIGZlYXR1cmUuXHJcbiAgICogQHBhcmFtIHtPYmplY3Q9fSBvcHRpb25zIC0gT3B0aW9ucyB0aGF0IHdpbGwgYmUgc2VudCB0byBQb2xseSBmb3IgZWFjaCBzcGVlY2guXHJcbiAgICogQHBhcmFtIHtleHRlcm5hbDpcIlRIUkVFLkF1ZGlvTGlzdGVuZXJcIn0gb3B0aW9ucy5saXN0ZW5lciAtIFRocmVlIGF1ZGlvIGxpc3RlbmVyIHRvIHVzZSB3aXRoXHJcbiAgICogYXVkaW8uXHJcbiAgICogQHBhcmFtIHtleHRlcm5hbDpcIlRIUkVFLk9iamVjdDNEXCI9fSBvcHRpb25zLmF0dGFjaFRvIC0gT3B0aW9uYWwgb2JqZWN0IHRvIGF0dGFjaCB0aGUgc3BlZWNoXHJcbiAgICogYXVkaW8gdG8uXHJcbiAgICovXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBob3N0LFxyXG4gICAgb3B0aW9ucyA9IHtcclxuICAgICAgdm9pY2U6IHVuZGVmaW5lZCxcclxuICAgICAgZW5naW5lOiB1bmRlZmluZWQsXHJcbiAgICAgIGxhbmd1YWdlOiB1bmRlZmluZWQsXHJcbiAgICAgIGF1ZGlvRm9ybWF0OiAnbXAzJyxcclxuICAgICAgc2FtcGxlUmF0ZTogdW5kZWZpbmVkLFxyXG4gICAgICBsaXN0ZW5lcjogdW5kZWZpbmVkLFxyXG4gICAgICBhdHRhY2hUbzogdW5kZWZpbmVkLFxyXG4gICAgfVxyXG4gICkge1xyXG4gICAgc3VwZXIoaG9zdCwgb3B0aW9ucyk7XHJcbiAgICB0aGlzLl9saXN0ZW5lciA9IG9wdGlvbnMubGlzdGVuZXI7XHJcbiAgICB0aGlzLl9hdHRhY2hUbyA9IG9wdGlvbnMuYXR0YWNoVG8gfHwgaG9zdC5vd25lcjtcclxuICAgIHRoaXMuX3NldEF1ZGlvQ29udGV4dCgpO1xyXG4gICAgdGhpcy5fb2JzZXJ2ZUF1ZGlvQ29udGV4dCgpO1xyXG4gIH1cclxuXHJcbiAgX3NldEF1ZGlvQ29udGV4dCgpIHtcclxuICAgIGlmICh0aGlzLl9saXN0ZW5lcikge1xyXG4gICAgICB0aGlzLl9hdWRpb0NvbnRleHQgPSB0aGlzLl9saXN0ZW5lci5jb250ZXh0O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlIGFuIEF1ZGlvIG9iamVjdCBhbmQgVGhyZWUuanMgYXVkaW8gb2JqZWN0IG9mIHNwZWVjaCBhdWRpbyBmb3IgdGhlXHJcbiAgICogZ2l2ZW4gc3BlZWNoIHRleHQuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IHBhcmFtcyAtIFBhcmFtZXRlcnMgb2JqZWN0IGNvbXBhdGlibGUgd2l0aCBQb2xseS5zeW50aGVzaXplU3BlZWNoLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge1Byb21pc2V9IFJlc29sdmVzIHdpdGggYW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGF1ZGlvIFVSTCBhbmQgQXVkaW9cclxuICAgKiBvYmplY3RzLlxyXG4gICAqL1xyXG4gIF9zeW50aGVzaXplQXVkaW8ocGFyYW1zKSB7XHJcbiAgICByZXR1cm4gc3VwZXIuX3N5bnRoZXNpemVBdWRpbyhwYXJhbXMpLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgaWYgKHRoaXMuX2F0dGFjaFRvICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAvLyBDcmVhdGUgcG9zaXRpb25hbCBhdWRpbyBpZiB0aGVyZSdzIGFuIGF0dGFjaCBwb2ludFxyXG4gICAgICAgIHJlc3VsdC50aHJlZUF1ZGlvID0gbmV3IFRIUkVFLlBvc2l0aW9uYWxBdWRpbyh0aGlzLl9saXN0ZW5lcik7XHJcbiAgICAgICAgdGhpcy5fYXR0YWNoVG8uYWRkKHJlc3VsdC50aHJlZUF1ZGlvKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyBDcmVhdGUgbm9uLXBvc2l0aW9uYWwgYXVkaW9cclxuICAgICAgICByZXN1bHQudGhyZWVBdWRpbyA9IG5ldyBUSFJFRS5BdWRpbyh0aGlzLl9saXN0ZW5lcik7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIFNldCBBdWRpbyBvYmplY3QgYXMgdGhlIHNvdXJjZVxyXG4gICAgICByZXN1bHQudGhyZWVBdWRpby5zZXRNZWRpYUVsZW1lbnRTb3VyY2UocmVzdWx0LmF1ZGlvKTtcclxuXHJcbiAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9KTtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IFRleHRUb1NwZWVjaEZlYXR1cmU7XHJcbiIsIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxyXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTBcclxuaW1wb3J0IFRleHRUb1NwZWVjaFV0aWxzIGZyb20gJ2NvcmUvYXdzcGFjay9UZXh0VG9TcGVlY2hVdGlscyc7XHJcbmltcG9ydCBUZXh0VG9TcGVlY2hGZWF0dXJlIGZyb20gJy4vVGV4dFRvU3BlZWNoRmVhdHVyZSc7XHJcbmltcG9ydCBTcGVlY2ggZnJvbSAnLi9TcGVlY2gnO1xyXG5cclxuLyoqXHJcbiAqIEBtb2R1bGUgdGhyZWUvYXdzcGFja1xyXG4gKi9cclxuXHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICAvKipcclxuICAgKiBAc2VlIHRocmVlLmpzL1RleHRUb1NwZWVjaEZlYXR1cmVcclxuICAgKi9cclxuICBUZXh0VG9TcGVlY2hGZWF0dXJlLFxyXG4gIC8qKlxyXG4gICAqIEBzZWUgY29yZS9UZXh0VG9TcGVlY2hVdGlsc1xyXG4gICAqL1xyXG4gIFRleHRUb1NwZWVjaFV0aWxzLFxyXG4gIC8qKlxyXG4gICAqIEBzZWUgdGhyZWUuanMvU3BlZWNoXHJcbiAgICovXHJcbiAgU3BlZWNoLFxyXG59O1xyXG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxuaW1wb3J0IENvcmVTaW5nbGVTdGF0ZSBmcm9tICdjb3JlL2FuaW1wYWNrL3N0YXRlL1NpbmdsZVN0YXRlJztcbmltcG9ydCBNYXRoVXRpbHMgZnJvbSAnY29yZS9NYXRoVXRpbHMnO1xuXG4vKipcbiAqIFRocmVlanMgQW5pbWF0aW9uQWN0aW9uIG9iamVjdFxuICogQGV4dGVybmFsIFwiVEhSRUUuQW5pbWF0aW9uQWN0aW9uXCJcbiAqIEBzZWUgaHR0cHM6Ly90aHJlZWpzLm9yZy9kb2NzLyNhcGkvZW4vYW5pbWF0aW9uL0FuaW1hdGlvbkFjdGlvblxuICovXG5cbmNvbnN0IHRocmVlQmxlbmRNb2RlcyA9IHtcbiAgT3ZlcnJpZGU6IFRIUkVFLk5vcm1hbEFuaW1hdGlvbkJsZW5kTW9kZSxcbiAgQWRkaXRpdmU6IFRIUkVFLkFkZGl0aXZlQW5pbWF0aW9uQmxlbmRNb2RlLFxufTtcblxuLyoqXG4gKiBAZXh0ZW5kcyBjb3JlL1NpbmdsZVN0YXRlXG4gKiBAYWxpYXMgdGhyZWUuanMvU2luZ2xlU3RhdGVcbiAqL1xuY2xhc3MgU2luZ2xlU3RhdGUgZXh0ZW5kcyBDb3JlU2luZ2xlU3RhdGUge1xuICAvKipcbiAgICogQGNvbnN0cnVjdG9yXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0PX0gb3B0aW9ucyAtIE9wdGlvbnMgZm9yIHRoZSBhbmltYXRpb24gc3RhdGUuXG4gICAqIEBwYXJhbSB7ZXh0ZXJuYWw6XCJUSFJFRS5BbmltYXRpb25BY3Rpb25cIn0gdGhyZWVBY3Rpb24gLSBBbmltYXRpb24gYWN0aW9uIHRoYXQgY29udHJvbHNcbiAgICogcGxheWJhY2sgb2YgdGhlIGNsaXAuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihvcHRpb25zID0ge30sIHRocmVlQWN0aW9uKSB7XG4gICAgc3VwZXIob3B0aW9ucyk7XG5cbiAgICAvLyBDYWxsYmFjayB0byBjYXRjaCBUSFJFRSBhbmltYXRpb24gYWN0aW9uIGNvbXBsZXRpb25cbiAgICB0aGlzLl9vbkZpbmlzaGVkRXZlbnQgPSAoe3R5cGUsIGFjdGlvbn0pID0+IHtcbiAgICAgIC8vIEV4aXQgaWYgdGhpcyBpc24ndCB0aGUgZmluaXNoIGV2ZW50IGZvciB0aGlzIGFuaW1hdGlvblxuICAgICAgaWYgKHR5cGUgIT09ICdmaW5pc2hlZCcgfHwgYWN0aW9uICE9PSB0aGlzLnRocmVlQWN0aW9uKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fcHJvbWlzZXMucGxheS5yZXNvbHZlKCk7XG5cbiAgICAgIC8vIFN0b3AgZXZhbHVhdGluZyBpbnRlcnBvbGF0b3JzIGlmIHRoZXkgaGF2ZSBhbHJlYWR5IGNvbXBsZXRlZFxuICAgICAgaWYgKCF0aGlzLndlaWdodFBlbmRpbmcgJiYgIXRoaXMudGltZVNjYWxlUGVuZGluZykge1xuICAgICAgICB0aGlzLl9wYXVzZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB0aGlzLl90aHJlZUFjdGlvbiA9IHRocmVlQWN0aW9uO1xuICAgIHRoaXMuX3RocmVlQWN0aW9uLmNsYW1wV2hlbkZpbmlzaGVkID0gdHJ1ZTsgLy8gSG9sZCB0aGUgbGFzdCBmcmFtZSBvbiBjb21wbGV0aW9uXG4gICAgdGhpcy5fdGhyZWVBY3Rpb24uZW5hYmxlZCA9IGZhbHNlO1xuICAgIHRoaXMuX3RocmVlQWN0aW9uLmxvb3AgPVxuICAgICAgdGhpcy5fbG9vcENvdW50ID09PSAxID8gVEhSRUUuTG9vcE9uY2UgOiBUSFJFRS5Mb29wUmVwZWF0O1xuICAgIHRoaXMuX3RocmVlQWN0aW9uLnBhdXNlZCA9IHRoaXMuX3BhdXNlZDtcbiAgICB0aGlzLl90aHJlZUFjdGlvbi5yZXBldGl0aW9ucyA9IHRoaXMuX2xvb3BDb3VudDtcbiAgICB0aGlzLl90aHJlZUFjdGlvbi50aW1lU2NhbGUgPSB0aGlzLl90aW1lU2NhbGU7XG4gICAgdGhpcy5fdGhyZWVBY3Rpb24ud2VpZ2h0ID0gdGhpcy5faW50ZXJuYWxXZWlnaHQ7XG4gICAgdGhpcy5fdGhyZWVBY3Rpb24uYmxlbmRNb2RlID0gdGhyZWVCbGVuZE1vZGVzW3RoaXMuX2JsZW5kTW9kZV07XG5cbiAgICAvLyBTdGFydCBsaXN0ZW5pbmcgZm9yIGFuaW1hdGlvbiBmaW5pc2hlZCBldmVudHNcbiAgICB0aGlzLl90aHJlZUFjdGlvblxuICAgICAgLmdldE1peGVyKClcbiAgICAgIC5hZGRFdmVudExpc3RlbmVyKCdmaW5pc2hlZCcsIHRoaXMuX29uRmluaXNoZWRFdmVudCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgVEhSRUUuQW5pbWF0aW9uQWN0aW9uIG9iamVjdC5cbiAgICpcbiAgICogQHJlYWRvbmx5XG4gICAqIEB0eXBlIHtleHRlcm5hbDpcIlRIUkVFLkFuaW1hdGlvbkFjdGlvblwifVxuICAgKi9cbiAgZ2V0IHRocmVlQWN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLl90aHJlZUFjdGlvbjtcbiAgfVxuXG4gIGdldCBub3JtYWxpemVkVGltZSgpIHtcbiAgICBpZiAodGhpcy5fdGhyZWVBY3Rpb24udGltZSAmJiB0aGlzLl90aHJlZUFjdGlvbi5nZXRDbGlwKCkgJiYgdGhpcy5fdGhyZWVBY3Rpb24uZ2V0Q2xpcCgpLmR1cmF0aW9uKSB7XG4gICAgICByZXR1cm4gdGhpcy5fdGhyZWVBY3Rpb24udGltZS90aGlzLl90aHJlZUFjdGlvbi5nZXRDbGlwKCkuZHVyYXRpb247XG4gICAgfVxuICAgIHJldHVybiAwO1xuICB9XG5cbiAgc2V0IG5vcm1hbGl6ZWRUaW1lKHRpbWUpIHtcbiAgICB0aW1lID0gTWF0aFV0aWxzLmNsYW1wKHRpbWUpO1xuICAgIHRoaXMuX3RocmVlQWN0aW9uLnRpbWUgPSB0aGlzLl90aHJlZUFjdGlvbi5nZXRDbGlwKCkuZHVyYXRpb24gKiB0aW1lO1xuICB9XG5cbiAgZ2V0IHdlaWdodCgpIHtcbiAgICByZXR1cm4gc3VwZXIud2VpZ2h0O1xuICB9XG5cbiAgc2V0IHdlaWdodCh3ZWlnaHQpIHtcbiAgICBzdXBlci53ZWlnaHQgPSB3ZWlnaHQ7XG5cbiAgICB0aGlzLl90aHJlZUFjdGlvbi5lbmFibGVkID0gdHJ1ZTtcbiAgfVxuXG4gIHVwZGF0ZUludGVybmFsV2VpZ2h0KGZhY3Rvcikge1xuICAgIHN1cGVyLnVwZGF0ZUludGVybmFsV2VpZ2h0KGZhY3Rvcik7XG5cbiAgICB0aGlzLl90aHJlZUFjdGlvbi5zZXRFZmZlY3RpdmVXZWlnaHQodGhpcy5faW50ZXJuYWxXZWlnaHQpO1xuICB9XG5cbiAgZ2V0IHRpbWVTY2FsZSgpIHtcbiAgICByZXR1cm4gc3VwZXIudGltZVNjYWxlO1xuICB9XG5cbiAgc2V0IHRpbWVTY2FsZSh0aW1lU2NhbGUpIHtcbiAgICBzdXBlci50aW1lU2NhbGUgPSB0aW1lU2NhbGU7XG5cbiAgICB0aGlzLl90aHJlZUFjdGlvbi50aW1lU2NhbGUgPSB0aW1lU2NhbGU7XG4gIH1cblxuICBnZXQgbG9vcENvdW50KCkge1xuICAgIHJldHVybiBzdXBlci5sb29wQ291bnQ7XG4gIH1cblxuICBzZXQgbG9vcENvdW50KGxvb3BDb3VudCkge1xuICAgIHN1cGVyLmxvb3BDb3VudCA9IGxvb3BDb3VudDtcblxuICAgIHRoaXMuX3RocmVlQWN0aW9uLmxvb3AgPVxuICAgICAgbG9vcENvdW50ID09PSAxID8gVEhSRUUuTG9vcE9uY2UgOiBUSFJFRS5Mb29wUmVwZWF0O1xuICAgIHRoaXMuX3RocmVlQWN0aW9uLnJlcGV0aXRpb25zID0gbG9vcENvdW50O1xuICB9XG5cbiAgcGxheShvbkZpbmlzaCwgb25FcnJvciwgb25DYW5jZWwpIHtcbiAgICAvLyBSZXN0YXJ0IGFuaW1hdGlvblxuICAgIHRoaXMuX3RocmVlQWN0aW9uLnJlc2V0KCk7XG4gICAgdGhpcy5fdGhyZWVBY3Rpb24ucGxheSgpO1xuXG4gICAgcmV0dXJuIHN1cGVyLnBsYXkob25GaW5pc2gsIG9uRXJyb3IsIG9uQ2FuY2VsKTtcbiAgfVxuXG4gIHBhdXNlKCkge1xuICAgIC8vIE1ha2Ugc3VyZSBhbmltYXRpb24gaGFzIGluZmx1ZW5jZVxuICAgIHRoaXMuX3RocmVlQWN0aW9uLnBhdXNlZCA9IHRydWU7XG4gICAgdGhpcy5fdGhyZWVBY3Rpb24ucGxheSgpO1xuXG4gICAgcmV0dXJuIHN1cGVyLnBhdXNlKCk7XG4gIH1cblxuICByZXN1bWUob25GaW5pc2gsIG9uRXJyb3IsIG9uQ2FuY2VsKSB7XG4gICAgLy8gTWFrZSBzdXJlIHRoZSBhbmltYXRpb24gY2FuIHBsYXkgYW5kIGhhcyBpbmZsdWVuY2VcbiAgICB0aGlzLl90aHJlZUFjdGlvbi5wYXVzZWQgPSBmYWxzZTtcbiAgICB0aGlzLl90aHJlZUFjdGlvbi5lbmFibGVkID0gdHJ1ZTtcbiAgICB0aGlzLl90aHJlZUFjdGlvbi5wbGF5KCk7XG5cbiAgICByZXR1cm4gc3VwZXIucmVzdW1lKG9uRmluaXNoLCBvbkVycm9yLCBvbkNhbmNlbCk7XG4gIH1cblxuICBjYW5jZWwoKSB7XG4gICAgLy8gU3RvcCBhbmltYXRpb24gcGxheWJhY2tcbiAgICB0aGlzLl90aHJlZUFjdGlvbi5wYXVzZWQgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHN1cGVyLmNhbmNlbCgpO1xuICB9XG5cbiAgc3RvcCgpIHtcbiAgICAvLyBSZXN0YXJ0IGFuZCBwYXVzZSB0aGUgYW5pbWF0aW9uXG4gICAgdGhpcy5fdGhyZWVBY3Rpb24ucmVzZXQoKTtcbiAgICB0aGlzLl90aHJlZUFjdGlvbi5wYXVzZWQgPSB0cnVlO1xuICAgIHRoaXMuX3RocmVlQWN0aW9uLnBsYXkoKTtcblxuICAgIHJldHVybiBzdXBlci5zdG9wKCk7XG4gIH1cblxuICBkaXNjYXJkKCkge1xuICAgIC8vIFN0b3AgdGhlIGFuaW1hdGlvbiBmcm9tIGhhdmluZyBpbmZsdWVuY2VcbiAgICB0aGlzLl90aHJlZUFjdGlvbi5lbmFibGVkID0gZmFsc2U7XG5cbiAgICAvLyBTdG9wIGxpc3RlbmluZyBmb3IgZmluaXNoIGV2ZW50c1xuICAgIHRoaXMuX3RocmVlQWN0aW9uXG4gICAgICAuZ2V0TWl4ZXIoKVxuICAgICAgLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2ZpbmlzaGVkJywgdGhpcy5fb25GaW5pc2hlZEV2ZW50KTtcblxuICAgIHN1cGVyLmRpc2NhcmQoKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBTaW5nbGVTdGF0ZTtcbiIsIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxyXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTBcclxuaW1wb3J0IENvcmVBbmltYXRpb25GZWF0dXJlLCB7XHJcbiAgQW5pbWF0aW9uVHlwZXMsXHJcbn0gZnJvbSAnY29yZS9hbmltcGFjay9BbmltYXRpb25GZWF0dXJlJztcclxuaW1wb3J0IFNpbmdsZVN0YXRlIGZyb20gJy4vc3RhdGUvU2luZ2xlU3RhdGUnO1xyXG5cclxuLyoqXHJcbiAqIFRocmVlanMgQW5pbWF0aW9uTWl4ZXIgb2JqZWN0XHJcbiAqIEBleHRlcm5hbCBcIlRIUkVFLkFuaW1hdGlvbk1peGVyXCJcclxuICogQHNlZSBodHRwczovL3RocmVlanMub3JnL2RvY3MvI2FwaS9lbi9hbmltYXRpb24vQW5pbWF0aW9uTWl4ZXJcclxuICovXHJcbkFuaW1hdGlvblR5cGVzLnNpbmdsZSA9IFNpbmdsZVN0YXRlO1xyXG5leHBvcnQge0FuaW1hdGlvblR5cGVzfTtcclxuXHJcbi8qKlxyXG4gKiBAZXh0ZW5kcyBjb3JlL0FuaW1hdGlvbkZlYXR1cmVcclxuICogQGFsaWFzIHRocmVlLmpzL0FuaW1hdGlvbkZlYXR1cmVcclxuICovXHJcbmNsYXNzIEFuaW1hdGlvbkZlYXR1cmUgZXh0ZW5kcyBDb3JlQW5pbWF0aW9uRmVhdHVyZSB7XHJcbiAgLyoqXHJcbiAgICogQGNvbnN0cnVjdG9yXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3RocmVlLmpzL0hvc3RPYmplY3R9IGhvc3QgLSBIb3N0IG9iamVjdCB0aGF0IG93bnMgdGhlIGZlYXR1cmUuXHJcbiAgICovXHJcbiAgY29uc3RydWN0b3IoaG9zdCkge1xyXG4gICAgc3VwZXIoaG9zdCk7XHJcblxyXG4gICAgdGhpcy5fbWl4ZXIgPSBuZXcgVEhSRUUuQW5pbWF0aW9uTWl4ZXIoaG9zdC5vd25lcik7XHJcbiAgfVxyXG5cclxuICBfY3JlYXRlU2luZ2xlU3RhdGUob3B0aW9ucykge1xyXG4gICAgLy8gRHVwbGljYXRlIHRoZSBjbGlwIGlmIGl0IGlzIGFscmVhZHkgaW4gdXNlIGJ5IGFub3RoZXIgdGhyZWUgYWN0aW9uXHJcbiAgICBsZXQge2NsaXB9ID0gb3B0aW9ucztcclxuICAgIGlmICh0aGlzLl9taXhlci5leGlzdGluZ0FjdGlvbihjbGlwKSkge1xyXG4gICAgICBjbGlwID0gY2xpcC5jbG9uZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRocmVlQWN0aW9uID0gdGhpcy5fbWl4ZXIuY2xpcEFjdGlvbihjbGlwKTtcclxuICAgIHJldHVybiBuZXcgU2luZ2xlU3RhdGUob3B0aW9ucywgdGhyZWVBY3Rpb24pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgVEhSRUUuQW5pbWF0aW9uTWl4ZXIgZm9yIHRoZSBob3N0LlxyXG4gICAqXHJcbiAgICogQHJlYWRvbmx5XHJcbiAgICogQHR5cGUge2V4dGVybmFsOlwiVEhSRUUuQW5pbWF0aW9uTWl4ZXJcIn1cclxuICAgKi9cclxuICBnZXQgbWl4ZXIoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fbWl4ZXI7XHJcbiAgfVxyXG5cclxuICB1cGRhdGUoZGVsdGFUaW1lKSB7XHJcbiAgICBzdXBlci51cGRhdGUoZGVsdGFUaW1lKTtcclxuXHJcbiAgICBpZiAoIXRoaXMuX3BhdXNlZCkge1xyXG4gICAgICB0aGlzLl9taXhlci51cGRhdGUoZGVsdGFUaW1lIC8gMTAwMCk7IC8vIFRIUkVFLkFuaW1hdGlvbk1peGVyIHJlcXVpcmVzIGRlbHRhIHRpbWUgaW4gc2Vjb25kc1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZGlzY2FyZCgpIHtcclxuICAgIC8vIFJlbGVhc2UgVEhSRUUgYW5pbWF0aW9uIHJlc291cmNlc1xyXG4gICAgdGhpcy5fbWl4ZXIudW5jYWNoZVJvb3QodGhpcy5faG9zdC5vd25lcik7XHJcblxyXG4gICAgc3VwZXIuZGlzY2FyZCgpO1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgQW5pbWF0aW9uRmVhdHVyZTtcclxuIiwiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXHJcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxyXG5cclxuLyoqXHJcbiAqIEBtb2R1bGUgdGhyZWUvYW5pbXBhY2tcclxuICovXHJcblxyXG5pbXBvcnQge1xyXG4gIExpbmVhcixcclxuICBRdWFkcmF0aWMsXHJcbiAgQ3ViaWMsXHJcbiAgUXVhcnRpYyxcclxuICBRdWludGljLFxyXG4gIFNpbnVzb2lkYWwsXHJcbiAgRXhwb25lbnRpYWwsXHJcbiAgQ2lyY3VsYXIsXHJcbiAgRWxhc3RpYyxcclxuICBCYWNrLFxyXG4gIEJvdW5jZSxcclxufSBmcm9tICdjb3JlL2FuaW1wYWNrL0Vhc2luZyc7XHJcbmltcG9ydCBBbmltYXRpb25VdGlscyBmcm9tICdjb3JlL2FuaW1wYWNrL0FuaW1hdGlvblV0aWxzJztcclxuaW1wb3J0IFRyYW5zaXRpb25TdGF0ZSBmcm9tICdjb3JlL2FuaW1wYWNrL3N0YXRlL1RyYW5zaXRpb25TdGF0ZSc7XHJcbmltcG9ydCBSYW5kb21BbmltYXRpb25TdGF0ZSBmcm9tICdjb3JlL2FuaW1wYWNrL3N0YXRlL1JhbmRvbUFuaW1hdGlvblN0YXRlJztcclxuaW1wb3J0IEFuaW1hdGlvbkxheWVyLCB7XHJcbiAgTGF5ZXJCbGVuZE1vZGVzLFxyXG4gIERlZmF1bHRMYXllckJsZW5kTW9kZSxcclxufSBmcm9tICdjb3JlL2FuaW1wYWNrL0FuaW1hdGlvbkxheWVyJztcclxuaW1wb3J0IEZyZWVCbGVuZFN0YXRlIGZyb20gJ2NvcmUvYW5pbXBhY2svc3RhdGUvRnJlZUJsZW5kU3RhdGUnO1xyXG5pbXBvcnQgUXVldWVTdGF0ZSBmcm9tICdjb3JlL2FuaW1wYWNrL3N0YXRlL1F1ZXVlU3RhdGUnO1xyXG5pbXBvcnQgQmxlbmQxZFN0YXRlIGZyb20gJ2NvcmUvYW5pbXBhY2svc3RhdGUvQmxlbmQxZFN0YXRlJztcclxuaW1wb3J0IEJsZW5kMmRTdGF0ZSBmcm9tICdjb3JlL2FuaW1wYWNrL3N0YXRlL0JsZW5kMmRTdGF0ZSc7XHJcbmltcG9ydCBBbmltYXRpb25GZWF0dXJlLCB7QW5pbWF0aW9uVHlwZXN9IGZyb20gJy4vQW5pbWF0aW9uRmVhdHVyZSc7XHJcbmltcG9ydCBTaW5nbGVTdGF0ZSBmcm9tICcuL3N0YXRlL1NpbmdsZVN0YXRlJztcclxuXHJcbi8qKlxyXG4gKiBAbmFtZXNwYWNlXHJcbiAqL1xyXG5jb25zdCBFYXNpbmcgPSB7XHJcbiAgLyoqXHJcbiAgICogQHNlZSBMaW5lYXJcclxuICAgKi9cclxuICBMaW5lYXIsXHJcbiAgLyoqXHJcbiAgICogQHNlZSBRdWFkcmF0aWNcclxuICAgKi9cclxuICBRdWFkcmF0aWMsXHJcbiAgLyoqXHJcbiAgICogQHNlZSBDdWJpY1xyXG4gICAqL1xyXG4gIEN1YmljLFxyXG4gIC8qKlxyXG4gICAqIEBzZWUgUXVhcnRpY1xyXG4gICAqL1xyXG4gIFF1YXJ0aWMsXHJcbiAgLyoqXHJcbiAgICogQHNlZSBRdWludGljXHJcbiAgICovXHJcbiAgUXVpbnRpYyxcclxuICAvKipcclxuICAgKiBAc2VlIFNpbnVzb2lkYWxcclxuICAgKi9cclxuICBTaW51c29pZGFsLFxyXG4gIC8qKlxyXG4gICAqIEBzZWUgRXhwb25lbnRpYWxcclxuICAgKi9cclxuICBFeHBvbmVudGlhbCxcclxuICAvKipcclxuICAgKiBAc2VlIENpcmN1bGFyXHJcbiAgICovXHJcbiAgQ2lyY3VsYXIsXHJcbiAgLyoqXHJcbiAgICogQHNlZSBFbGFzdGljXHJcbiAgICovXHJcbiAgRWxhc3RpYyxcclxuICAvKipcclxuICAgKiBAc2VlIEJhY2tcclxuICAgKi9cclxuICBCYWNrLFxyXG4gIC8qKlxyXG4gICAqIEBzZWUgQm91bmNlXHJcbiAgICovXHJcbiAgQm91bmNlLFxyXG59O1xyXG5leHBvcnQgZGVmYXVsdCB7XHJcbiAgLyoqXHJcbiAgICogQHNlZSB0aHJlZS5qcy9BbmltYXRpb25GZWF0dXJlXHJcbiAgICovXHJcbiAgQW5pbWF0aW9uRmVhdHVyZSxcclxuICAvKipcclxuICAgKiBAc2VlIEFuaW1hdGlvbkxheWVyXHJcbiAgICovXHJcbiAgQW5pbWF0aW9uTGF5ZXIsXHJcbiAgLyoqXHJcbiAgICogQHNlZSB0aHJlZS5qcy9TaW5nbGVTdGF0ZVxyXG4gICAqL1xyXG4gIFNpbmdsZVN0YXRlLFxyXG4gIC8qKlxyXG4gICAqIEBzZWUgVHJhbnNpdGlvblN0YXRlXHJcbiAgICovXHJcbiAgVHJhbnNpdGlvblN0YXRlLFxyXG4gIC8qKlxyXG4gICAqIEBzZWUgRnJlZUJsZW5kU3RhdGVcclxuICAgKi9cclxuICBGcmVlQmxlbmRTdGF0ZSxcclxuICAvKipcclxuICAgKiBAc2VlIFF1ZXVlU3RhdGVcclxuICAgKi9cclxuICBRdWV1ZVN0YXRlLFxyXG4gIC8qKlxyXG4gICAqIEBzZWUgUmFuZG9tQW5pbWF0aW9uU3RhdGVcclxuICAgKi9cclxuICBSYW5kb21BbmltYXRpb25TdGF0ZSxcclxuICAvKipcclxuICAgKiBAc2VlIEJsZW5kMWRTdGF0ZVxyXG4gICAqL1xyXG4gIEJsZW5kMWRTdGF0ZSxcclxuICAvKipcclxuICAgKiBAc2VlIEJsZW5kMmRTdGF0ZVxyXG4gICAqL1xyXG4gIEJsZW5kMmRTdGF0ZSxcclxuICAvKipcclxuICAgKiBAc2VlIEFuaW1hdGlvblV0aWxzXHJcbiAgICovXHJcbiAgQW5pbWF0aW9uVXRpbHMsXHJcbiAgLyoqXHJcbiAgICogQHNlZSBFYXNpbmdcclxuICAgKi9cclxuICBFYXNpbmcsXHJcbiAgLyoqXHJcbiAgICogQHNlZSBMYXllckJsZW5kTW9kZXNcclxuICAgKi9cclxuICBMYXllckJsZW5kTW9kZXMsXHJcbiAgLyoqXHJcbiAgICogQHNlZSBEZWZhdWx0TGF5ZXJCbGVuZE1vZGVcclxuICAgKi9cclxuICBEZWZhdWx0TGF5ZXJCbGVuZE1vZGUsXHJcbiAgLyoqXHJcbiAgICogQHNlZSBBbmltYXRpb25UeXBlc1xyXG4gICAqL1xyXG4gIEFuaW1hdGlvblR5cGVzLFxyXG59O1xyXG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cclxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVC0wXHJcblxyXG4vKipcclxuICogQG1vZHVsZSB0aHJlZS9IT1NUXHJcbiAqL1xyXG5cclxuaW1wb3J0IFV0aWxzIGZyb20gJ2NvcmUvVXRpbHMnO1xyXG5pbXBvcnQgTWF0aFV0aWxzIGZyb20gJ2NvcmUvTWF0aFV0aWxzJztcclxuaW1wb3J0IERlZmVycmVkIGZyb20gJ2NvcmUvRGVmZXJyZWQnO1xyXG5pbXBvcnQgTGlwc3luY0ZlYXR1cmUsIHtEZWZhdWx0VmlzZW1lTWFwfSBmcm9tICdjb3JlL0xpcHN5bmNGZWF0dXJlJztcclxuaW1wb3J0IEdlc3R1cmVGZWF0dXJlLCB7RGVmYXVsdEdlc3R1cmVXb3Jkc30gZnJvbSAnY29yZS9HZXN0dXJlRmVhdHVyZSc7XHJcbmltcG9ydCBQb2ludE9mSW50ZXJlc3RGZWF0dXJlLCB7QXhpc01hcH0gZnJvbSAnLi9Qb2ludE9mSW50ZXJlc3RGZWF0dXJlJztcclxuaW1wb3J0IHtlbnZ9IGZyb20gJy4vSG9zdEVudmlyb25tZW50JztcclxuaW1wb3J0IE1lc3NlbmdlciBmcm9tICcuL01lc3Nlbmdlcic7XHJcbmltcG9ydCBIb3N0T2JqZWN0IGZyb20gJy4vSG9zdE9iamVjdCc7XHJcblxyXG5pbXBvcnQgYXdzIGZyb20gJy4vYXdzcGFjayc7XHJcbmltcG9ydCBhbmltIGZyb20gJy4vYW5pbXBhY2snO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gIC8qKlxyXG4gICAqIEBzZWUgZW52XHJcbiAgICovXHJcbiAgZW52LFxyXG4gIC8qKlxyXG4gICAqIEBzZWUgVXRpbHNcclxuICAgKi9cclxuICBVdGlscyxcclxuICAvKipcclxuICAgKiBAc2VlIE1hdGhVdGlsc1xyXG4gICAqL1xyXG4gIE1hdGhVdGlscyxcclxuICAvKipcclxuICAgKiBAc2VlIERlZmVycmVkXHJcbiAgICovXHJcbiAgRGVmZXJyZWQsXHJcbiAgLyoqXHJcbiAgICogQHNlZSB0aHJlZS5qcy9NZXNzZW5nZXJcclxuICAgKi9cclxuICBNZXNzZW5nZXIsXHJcbiAgLyoqXHJcbiAgICogQHNlZSB0aHJlZS5qcy9Ib3N0T2JqZWN0XHJcbiAgICovXHJcbiAgSG9zdE9iamVjdCxcclxuICAvKipcclxuICAgKiBAc2VlIGNvcmUvTGlwc3luY0ZlYXR1cmVcclxuICAgKi9cclxuICBMaXBzeW5jRmVhdHVyZSxcclxuICAvKipcclxuICAgKiBAc2VlIEdlc3R1cmVGZWF0dXJlXHJcbiAgICovXHJcbiAgR2VzdHVyZUZlYXR1cmUsXHJcbiAgLyoqXHJcbiAgICogQHNlZSB0aHJlZS5qcy9Qb2ludE9mSW50ZXJlc3RGZWF0dXJlXHJcbiAgICovXHJcbiAgUG9pbnRPZkludGVyZXN0RmVhdHVyZSxcclxuICAvKipcclxuICAgKiBAc2VlIERlZmF1bHRWaXNlbWVNYXBcclxuICAgKi9cclxuICBEZWZhdWx0VmlzZW1lTWFwLFxyXG4gIC8qKlxyXG4gICAqIEBzZWUgRGVmYXVsdEdlc3R1cmVXb3Jkc1xyXG4gICAqL1xyXG4gIERlZmF1bHRHZXN0dXJlV29yZHMsXHJcbiAgLyoqXHJcbiAgICogQHNlZSBBeGlzTWFwXHJcbiAgICovXHJcbiAgQXhpc01hcCxcclxuICAvKipcclxuICAgKiBAc2VlIG1vZHVsZTp0aHJlZS9hd3NwYWNrXHJcbiAgICovXHJcbiAgYXdzLFxyXG4gIC8qKlxyXG4gICAqIEBzZWUgbW9kdWxlOnRocmVlL2FuaW1wYWNrXHJcbiAgICovXHJcbiAgYW5pbSxcclxufTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///333\n')}]).default})); \ No newline at end of file +!function(e,n){"object"==typeof exports&&"object"==typeof module?module.exports=n():"function"==typeof define&&define.amd?define("HOST",[],n):"object"==typeof exports?exports.HOST=n():e.HOST=n()}("undefined"!=typeof self?self:"undefined"!=typeof global?global:this,(function(){return function(e){var n={};function t(c){if(n[c])return n[c].exports;var a=n[c]={i:c,l:!1,exports:{}};return e[c].call(a.exports,a,a.exports,t),a.l=!0,a.exports}return t.m=e,t.c=n,t.d=function(e,n,c){t.o(e,n)||Object.defineProperty(e,n,{enumerable:!0,get:c})},t.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},t.t=function(e,n){if(1&n&&(e=t(e)),8&n)return e;if(4&n&&"object"==typeof e&&e&&e.__esModule)return e;var c=Object.create(null);if(t.r(c),Object.defineProperty(c,"default",{enumerable:!0,value:e}),2&n&&"string"!=typeof e)for(var a in e)t.d(c,a,function(n){return e[n]}.bind(null,a));return c},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},t.p="",t(t.s=130)}([function(module,exports,__webpack_require__){eval("var global = __webpack_require__(2);\nvar core = __webpack_require__(18);\nvar hide = __webpack_require__(11);\nvar redefine = __webpack_require__(12);\nvar ctx = __webpack_require__(19);\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n var IS_FORCED = type & $export.F;\n var IS_GLOBAL = type & $export.G;\n var IS_STATIC = type & $export.S;\n var IS_PROTO = type & $export.P;\n var IS_BIND = type & $export.B;\n var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE];\n var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});\n var key, own, out, exp;\n if (IS_GLOBAL) source = name;\n for (key in source) {\n // contains in native\n own = !IS_FORCED && target && target[key] !== undefined;\n // export native or passed\n out = (own ? target : source)[key];\n // bind timers to global for call from export context\n exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n // extend global\n if (target) redefine(target, key, out, type & $export.U);\n // export\n if (exports[key] != out) hide(exports, key, exp);\n if (IS_PROTO && expProto[key] != out) expProto[key] = out;\n }\n};\nglobal.core = core;\n// type bitmap\n$export.F = 1; // forced\n$export.G = 2; // global\n$export.S = 4; // static\n$export.P = 8; // proto\n$export.B = 16; // bind\n$export.W = 32; // wrap\n$export.U = 64; // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZXhwb3J0LmpzPzVjYTEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsYUFBYSxtQkFBTyxDQUFDLENBQVc7QUFDaEMsV0FBVyxtQkFBTyxDQUFDLEVBQVM7QUFDNUIsV0FBVyxtQkFBTyxDQUFDLEVBQVM7QUFDNUIsZUFBZSxtQkFBTyxDQUFDLEVBQWE7QUFDcEMsVUFBVSxtQkFBTyxDQUFDLEVBQVE7QUFDMUI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0ZBQWtGLHVCQUF1QjtBQUN6RyxpRUFBaUU7QUFDakUsK0RBQStEO0FBQy9EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZCxjQUFjO0FBQ2QsY0FBYztBQUNkLGNBQWM7QUFDZCxlQUFlO0FBQ2YsZUFBZTtBQUNmLGVBQWU7QUFDZixnQkFBZ0I7QUFDaEIiLCJmaWxlIjoiMC5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xuXG52YXIgJGV4cG9ydCA9IGZ1bmN0aW9uICh0eXBlLCBuYW1lLCBzb3VyY2UpIHtcbiAgdmFyIElTX0ZPUkNFRCA9IHR5cGUgJiAkZXhwb3J0LkY7XG4gIHZhciBJU19HTE9CQUwgPSB0eXBlICYgJGV4cG9ydC5HO1xuICB2YXIgSVNfU1RBVElDID0gdHlwZSAmICRleHBvcnQuUztcbiAgdmFyIElTX1BST1RPID0gdHlwZSAmICRleHBvcnQuUDtcbiAgdmFyIElTX0JJTkQgPSB0eXBlICYgJGV4cG9ydC5CO1xuICB2YXIgdGFyZ2V0ID0gSVNfR0xPQkFMID8gZ2xvYmFsIDogSVNfU1RBVElDID8gZ2xvYmFsW25hbWVdIHx8IChnbG9iYWxbbmFtZV0gPSB7fSkgOiAoZ2xvYmFsW25hbWVdIHx8IHt9KVtQUk9UT1RZUEVdO1xuICB2YXIgZXhwb3J0cyA9IElTX0dMT0JBTCA/IGNvcmUgOiBjb3JlW25hbWVdIHx8IChjb3JlW25hbWVdID0ge30pO1xuICB2YXIgZXhwUHJvdG8gPSBleHBvcnRzW1BST1RPVFlQRV0gfHwgKGV4cG9ydHNbUFJPVE9UWVBFXSA9IHt9KTtcbiAgdmFyIGtleSwgb3duLCBvdXQsIGV4cDtcbiAgaWYgKElTX0dMT0JBTCkgc291cmNlID0gbmFtZTtcbiAgZm9yIChrZXkgaW4gc291cmNlKSB7XG4gICAgLy8gY29udGFpbnMgaW4gbmF0aXZlXG4gICAgb3duID0gIUlTX0ZPUkNFRCAmJiB0YXJnZXQgJiYgdGFyZ2V0W2tleV0gIT09IHVuZGVmaW5lZDtcbiAgICAvLyBleHBvcnQgbmF0aXZlIG9yIHBhc3NlZFxuICAgIG91dCA9IChvd24gPyB0YXJnZXQgOiBzb3VyY2UpW2tleV07XG4gICAgLy8gYmluZCB0aW1lcnMgdG8gZ2xvYmFsIGZvciBjYWxsIGZyb20gZXhwb3J0IGNvbnRleHRcbiAgICBleHAgPSBJU19CSU5EICYmIG93biA/IGN0eChvdXQsIGdsb2JhbCkgOiBJU19QUk9UTyAmJiB0eXBlb2Ygb3V0ID09ICdmdW5jdGlvbicgPyBjdHgoRnVuY3Rpb24uY2FsbCwgb3V0KSA6IG91dDtcbiAgICAvLyBleHRlbmQgZ2xvYmFsXG4gICAgaWYgKHRhcmdldCkgcmVkZWZpbmUodGFyZ2V0LCBrZXksIG91dCwgdHlwZSAmICRleHBvcnQuVSk7XG4gICAgLy8gZXhwb3J0XG4gICAgaWYgKGV4cG9ydHNba2V5XSAhPSBvdXQpIGhpZGUoZXhwb3J0cywga2V5LCBleHApO1xuICAgIGlmIChJU19QUk9UTyAmJiBleHBQcm90b1trZXldICE9IG91dCkgZXhwUHJvdG9ba2V5XSA9IG91dDtcbiAgfVxufTtcbmdsb2JhbC5jb3JlID0gY29yZTtcbi8vIHR5cGUgYml0bWFwXG4kZXhwb3J0LkYgPSAxOyAgIC8vIGZvcmNlZFxuJGV4cG9ydC5HID0gMjsgICAvLyBnbG9iYWxcbiRleHBvcnQuUyA9IDQ7ICAgLy8gc3RhdGljXG4kZXhwb3J0LlAgPSA4OyAgIC8vIHByb3RvXG4kZXhwb3J0LkIgPSAxNjsgIC8vIGJpbmRcbiRleHBvcnQuVyA9IDMyOyAgLy8gd3JhcFxuJGV4cG9ydC5VID0gNjQ7ICAvLyBzYWZlXG4kZXhwb3J0LlIgPSAxMjg7IC8vIHJlYWwgcHJvdG8gbWV0aG9kIGZvciBgbGlicmFyeWBcbm1vZHVsZS5leHBvcnRzID0gJGV4cG9ydDtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///0\n")},function(module,exports,__webpack_require__){eval("var isObject = __webpack_require__(4);\nmodule.exports = function (it) {\n if (!isObject(it)) throw TypeError(it + ' is not an object!');\n return it;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYW4tb2JqZWN0LmpzP2NiN2MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckM7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMS5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKCFpc09iamVjdChpdCkpIHRocm93IFR5cGVFcnJvcihpdCArICcgaXMgbm90IGFuIG9iamVjdCEnKTtcbiAgcmV0dXJuIGl0O1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///1\n")},function(module,exports){eval("// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n ? window : typeof self != 'undefined' && self.Math == Math ? self\n // eslint-disable-next-line no-new-func\n : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZ2xvYmFsLmpzPzc3MjYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlDQUF5QyIsImZpbGUiOiIyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzg2I2lzc3VlY29tbWVudC0xMTU3NTkwMjhcbnZhciBnbG9iYWwgPSBtb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiB3aW5kb3cgIT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93Lk1hdGggPT0gTWF0aFxuICA/IHdpbmRvdyA6IHR5cGVvZiBzZWxmICE9ICd1bmRlZmluZWQnICYmIHNlbGYuTWF0aCA9PSBNYXRoID8gc2VsZlxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmNcbiAgOiBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuaWYgKHR5cGVvZiBfX2cgPT0gJ251bWJlcicpIF9fZyA9IGdsb2JhbDsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bmRlZlxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2\n")},function(module,exports){eval("module.exports = function (exec) {\n try {\n return !!exec();\n } catch (e) {\n return true;\n }\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZmFpbHMuanM/NzllNSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBIiwiZmlsZSI6IjMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICEhZXhlYygpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///3\n")},function(module,exports){eval("module.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtb2JqZWN0LmpzP2QzZjQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBIiwiZmlsZSI6IjQuanMiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09PSAnb2JqZWN0JyA/IGl0ICE9PSBudWxsIDogdHlwZW9mIGl0ID09PSAnZnVuY3Rpb24nO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4\n")},function(module,exports,__webpack_require__){eval("var store = __webpack_require__(47)('wks');\nvar uid = __webpack_require__(33);\nvar Symbol = __webpack_require__(2).Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n return store[name] || (store[name] =\n USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fd2tzLmpzPzJiNGMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSxtQkFBTyxDQUFDLEVBQVc7QUFDL0IsVUFBVSxtQkFBTyxDQUFDLEVBQVE7QUFDMUIsYUFBYSxtQkFBTyxDQUFDLENBQVc7QUFDaEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiNS5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBzdG9yZSA9IHJlcXVpcmUoJy4vX3NoYXJlZCcpKCd3a3MnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuL191aWQnKTtcbnZhciBTeW1ib2wgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5TeW1ib2w7XG52YXIgVVNFX1NZTUJPTCA9IHR5cGVvZiBTeW1ib2wgPT0gJ2Z1bmN0aW9uJztcblxudmFyICRleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZSkge1xuICByZXR1cm4gc3RvcmVbbmFtZV0gfHwgKHN0b3JlW25hbWVdID1cbiAgICBVU0VfU1lNQk9MICYmIFN5bWJvbFtuYW1lXSB8fCAoVVNFX1NZTUJPTCA/IFN5bWJvbCA6IHVpZCkoJ1N5bWJvbC4nICsgbmFtZSkpO1xufTtcblxuJGV4cG9ydHMuc3RvcmUgPSBzdG9yZTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///5\n")},function(module,exports,__webpack_require__){eval("// 7.1.15 ToLength\nvar toInteger = __webpack_require__(21);\nvar min = Math.min;\nmodule.exports = function (it) {\n return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8tbGVuZ3RoLmpzPzlkZWYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDO0FBQ0E7QUFDQSwyREFBMkQ7QUFDM0QiLCJmaWxlIjoiNi5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDcuMS4xNSBUb0xlbmd0aFxudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciBtaW4gPSBNYXRoLm1pbjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCA+IDAgPyBtaW4odG9JbnRlZ2VyKGl0KSwgMHgxZmZmZmZmZmZmZmZmZikgOiAwOyAvLyBwb3coMiwgNTMpIC0gMSA9PSA5MDA3MTk5MjU0NzQwOTkxXG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///6\n")},function(module,exports,__webpack_require__){eval("// Thank's IE8 for his funny defineProperty\nmodule.exports = !__webpack_require__(3)(function () {\n return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZGVzY3JpcHRvcnMuanM/OWUxZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGtCQUFrQixtQkFBTyxDQUFDLENBQVU7QUFDcEMsaUNBQWlDLFFBQVEsbUJBQW1CLFVBQVUsRUFBRSxFQUFFO0FBQzFFLENBQUMiLCJmaWxlIjoiNy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIFRoYW5rJ3MgSUU4IGZvciBoaXMgZnVubnkgZGVmaW5lUHJvcGVydHlcbm1vZHVsZS5leHBvcnRzID0gIXJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAnYScsIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9IH0pLmEgIT0gNztcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7\n")},function(module,exports,__webpack_require__){eval("var anObject = __webpack_require__(1);\nvar IE8_DOM_DEFINE = __webpack_require__(94);\nvar toPrimitive = __webpack_require__(23);\nvar dP = Object.defineProperty;\n\nexports.f = __webpack_require__(7) ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return dP(O, P, Attributes);\n } catch (e) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWRwLmpzPzg2Y2MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMscUJBQXFCLG1CQUFPLENBQUMsRUFBbUI7QUFDaEQsa0JBQWtCLG1CQUFPLENBQUMsRUFBaUI7QUFDM0M7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLENBQWdCO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHLFlBQVk7QUFDZjtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiI4LmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuL19pZTgtZG9tLWRlZmluZScpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG52YXIgZFAgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG5cbmV4cG9ydHMuZiA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICBQID0gdG9QcmltaXRpdmUoUCwgdHJ1ZSk7XG4gIGFuT2JqZWN0KEF0dHJpYnV0ZXMpO1xuICBpZiAoSUU4X0RPTV9ERUZJTkUpIHRyeSB7XG4gICAgcmV0dXJuIGRQKE8sIFAsIEF0dHJpYnV0ZXMpO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKCdnZXQnIGluIEF0dHJpYnV0ZXMgfHwgJ3NldCcgaW4gQXR0cmlidXRlcykgdGhyb3cgVHlwZUVycm9yKCdBY2Nlc3NvcnMgbm90IHN1cHBvcnRlZCEnKTtcbiAgaWYgKCd2YWx1ZScgaW4gQXR0cmlidXRlcykgT1tQXSA9IEF0dHJpYnV0ZXMudmFsdWU7XG4gIHJldHVybiBPO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///8\n")},function(module,exports,__webpack_require__){eval("// 7.1.13 ToObject(argument)\nvar defined = __webpack_require__(24);\nmodule.exports = function (it) {\n return Object(defined(it));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8tb2JqZWN0LmpzPzRiZjgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsRUFBWTtBQUNsQztBQUNBO0FBQ0EiLCJmaWxlIjoiOS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDcuMS4xMyBUb09iamVjdChhcmd1bWVudClcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIE9iamVjdChkZWZpbmVkKGl0KSk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9\n")},function(module,exports){eval("module.exports = function (it) {\n if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n return it;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYS1mdW5jdGlvbi5qcz9kOGU4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjEwLmpzIiwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKHR5cGVvZiBpdCAhPSAnZnVuY3Rpb24nKSB0aHJvdyBUeXBlRXJyb3IoaXQgKyAnIGlzIG5vdCBhIGZ1bmN0aW9uIScpO1xuICByZXR1cm4gaXQ7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///10\n")},function(module,exports,__webpack_require__){eval("var dP = __webpack_require__(8);\nvar createDesc = __webpack_require__(32);\nmodule.exports = __webpack_require__(7) ? function (object, key, value) {\n return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faGlkZS5qcz8zMmU5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFNBQVMsbUJBQU8sQ0FBQyxDQUFjO0FBQy9CLGlCQUFpQixtQkFBTyxDQUFDLEVBQWtCO0FBQzNDLGlCQUFpQixtQkFBTyxDQUFDLENBQWdCO0FBQ3pDO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSIsImZpbGUiOiIxMS5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xudmFyIGNyZWF0ZURlc2MgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIHJldHVybiBkUC5mKG9iamVjdCwga2V5LCBjcmVhdGVEZXNjKDEsIHZhbHVlKSk7XG59IDogZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICBvYmplY3Rba2V5XSA9IHZhbHVlO1xuICByZXR1cm4gb2JqZWN0O1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///11\n")},function(module,exports,__webpack_require__){eval("var global = __webpack_require__(2);\nvar hide = __webpack_require__(11);\nvar has = __webpack_require__(14);\nvar SRC = __webpack_require__(33)('src');\nvar $toString = __webpack_require__(134);\nvar TO_STRING = 'toString';\nvar TPL = ('' + $toString).split(TO_STRING);\n\n__webpack_require__(18).inspectSource = function (it) {\n return $toString.call(it);\n};\n\n(module.exports = function (O, key, val, safe) {\n var isFunction = typeof val == 'function';\n if (isFunction) has(val, 'name') || hide(val, 'name', key);\n if (O[key] === val) return;\n if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));\n if (O === global) {\n O[key] = val;\n } else if (!safe) {\n delete O[key];\n hide(O, key, val);\n } else if (O[key]) {\n O[key] = val;\n } else {\n hide(O, key, val);\n }\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, TO_STRING, function toString() {\n return typeof this == 'function' && this[SRC] || $toString.call(this);\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcmVkZWZpbmUuanM/MmFiYSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxhQUFhLG1CQUFPLENBQUMsQ0FBVztBQUNoQyxXQUFXLG1CQUFPLENBQUMsRUFBUztBQUM1QixVQUFVLG1CQUFPLENBQUMsRUFBUTtBQUMxQixVQUFVLG1CQUFPLENBQUMsRUFBUTtBQUMxQixnQkFBZ0IsbUJBQU8sQ0FBQyxHQUF1QjtBQUMvQztBQUNBOztBQUVBLG1CQUFPLENBQUMsRUFBUztBQUNqQjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0EsQ0FBQyIsImZpbGUiOiIxMi5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIFNSQyA9IHJlcXVpcmUoJy4vX3VpZCcpKCdzcmMnKTtcbnZhciAkdG9TdHJpbmcgPSByZXF1aXJlKCcuL19mdW5jdGlvbi10by1zdHJpbmcnKTtcbnZhciBUT19TVFJJTkcgPSAndG9TdHJpbmcnO1xudmFyIFRQTCA9ICgnJyArICR0b1N0cmluZykuc3BsaXQoVE9fU1RSSU5HKTtcblxucmVxdWlyZSgnLi9fY29yZScpLmluc3BlY3RTb3VyY2UgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuICR0b1N0cmluZy5jYWxsKGl0KTtcbn07XG5cbihtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBrZXksIHZhbCwgc2FmZSkge1xuICB2YXIgaXNGdW5jdGlvbiA9IHR5cGVvZiB2YWwgPT0gJ2Z1bmN0aW9uJztcbiAgaWYgKGlzRnVuY3Rpb24pIGhhcyh2YWwsICduYW1lJykgfHwgaGlkZSh2YWwsICduYW1lJywga2V5KTtcbiAgaWYgKE9ba2V5XSA9PT0gdmFsKSByZXR1cm47XG4gIGlmIChpc0Z1bmN0aW9uKSBoYXModmFsLCBTUkMpIHx8IGhpZGUodmFsLCBTUkMsIE9ba2V5XSA/ICcnICsgT1trZXldIDogVFBMLmpvaW4oU3RyaW5nKGtleSkpKTtcbiAgaWYgKE8gPT09IGdsb2JhbCkge1xuICAgIE9ba2V5XSA9IHZhbDtcbiAgfSBlbHNlIGlmICghc2FmZSkge1xuICAgIGRlbGV0ZSBPW2tleV07XG4gICAgaGlkZShPLCBrZXksIHZhbCk7XG4gIH0gZWxzZSBpZiAoT1trZXldKSB7XG4gICAgT1trZXldID0gdmFsO1xuICB9IGVsc2Uge1xuICAgIGhpZGUoTywga2V5LCB2YWwpO1xuICB9XG4vLyBhZGQgZmFrZSBGdW5jdGlvbiN0b1N0cmluZyBmb3IgY29ycmVjdCB3b3JrIHdyYXBwZWQgbWV0aG9kcyAvIGNvbnN0cnVjdG9ycyB3aXRoIG1ldGhvZHMgbGlrZSBMb0Rhc2ggaXNOYXRpdmVcbn0pKEZ1bmN0aW9uLnByb3RvdHlwZSwgVE9fU1RSSU5HLCBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgcmV0dXJuIHR5cGVvZiB0aGlzID09ICdmdW5jdGlvbicgJiYgdGhpc1tTUkNdIHx8ICR0b1N0cmluZy5jYWxsKHRoaXMpO1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///12\n")},function(module,exports,__webpack_require__){eval("var $export = __webpack_require__(0);\nvar fails = __webpack_require__(3);\nvar defined = __webpack_require__(24);\nvar quot = /\"/g;\n// B.2.3.2.1 CreateHTML(string, tag, attribute, value)\nvar createHTML = function (string, tag, attribute, value) {\n var S = String(defined(string));\n var p1 = '<' + tag;\n if (attribute !== '') p1 += ' ' + attribute + '=\"' + String(value).replace(quot, '"') + '\"';\n return p1 + '>' + S + '';\n};\nmodule.exports = function (NAME, exec) {\n var O = {};\n O[NAME] = exec(createHTML);\n $export($export.P + $export.F * fails(function () {\n var test = ''[NAME]('\"');\n return test !== test.toLowerCase() || test.split('\"').length > 3;\n }), 'String', O);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLWh0bWwuanM/Mzg2YiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxZQUFZLG1CQUFPLENBQUMsQ0FBVTtBQUM5QixjQUFjLG1CQUFPLENBQUMsRUFBWTtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEZBQTBGO0FBQzFGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0giLCJmaWxlIjoiMTMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xudmFyIHF1b3QgPSAvXCIvZztcbi8vIEIuMi4zLjIuMSBDcmVhdGVIVE1MKHN0cmluZywgdGFnLCBhdHRyaWJ1dGUsIHZhbHVlKVxudmFyIGNyZWF0ZUhUTUwgPSBmdW5jdGlvbiAoc3RyaW5nLCB0YWcsIGF0dHJpYnV0ZSwgdmFsdWUpIHtcbiAgdmFyIFMgPSBTdHJpbmcoZGVmaW5lZChzdHJpbmcpKTtcbiAgdmFyIHAxID0gJzwnICsgdGFnO1xuICBpZiAoYXR0cmlidXRlICE9PSAnJykgcDEgKz0gJyAnICsgYXR0cmlidXRlICsgJz1cIicgKyBTdHJpbmcodmFsdWUpLnJlcGxhY2UocXVvdCwgJyZxdW90OycpICsgJ1wiJztcbiAgcmV0dXJuIHAxICsgJz4nICsgUyArICc8LycgKyB0YWcgKyAnPic7XG59O1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTkFNRSwgZXhlYykge1xuICB2YXIgTyA9IHt9O1xuICBPW05BTUVdID0gZXhlYyhjcmVhdGVIVE1MKTtcbiAgJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHRlc3QgPSAnJ1tOQU1FXSgnXCInKTtcbiAgICByZXR1cm4gdGVzdCAhPT0gdGVzdC50b0xvd2VyQ2FzZSgpIHx8IHRlc3Quc3BsaXQoJ1wiJykubGVuZ3RoID4gMztcbiAgfSksICdTdHJpbmcnLCBPKTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///13\n")},function(module,exports){eval("var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faGFzLmpzPzY5YTgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdUJBQXVCO0FBQ3ZCO0FBQ0E7QUFDQSIsImZpbGUiOiIxNC5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBoYXNPd25Qcm9wZXJ0eSA9IHt9Lmhhc093blByb3BlcnR5O1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIGtleSkge1xuICByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbChpdCwga2V5KTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///14\n")},function(module,exports,__webpack_require__){eval("// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = __webpack_require__(48);\nvar defined = __webpack_require__(24);\nmodule.exports = function (it) {\n return IObject(defined(it));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8taW9iamVjdC5qcz82ODIxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLEVBQVk7QUFDbEMsY0FBYyxtQkFBTyxDQUFDLEVBQVk7QUFDbEM7QUFDQTtBQUNBIiwiZmlsZSI6IjE1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gdG8gaW5kZXhlZCBvYmplY3QsIHRvT2JqZWN0IHdpdGggZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBzdHJpbmdzXG52YXIgSU9iamVjdCA9IHJlcXVpcmUoJy4vX2lvYmplY3QnKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIElPYmplY3QoZGVmaW5lZChpdCkpO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///15\n")},function(module,exports,__webpack_require__){eval("var pIE = __webpack_require__(49);\nvar createDesc = __webpack_require__(32);\nvar toIObject = __webpack_require__(15);\nvar toPrimitive = __webpack_require__(23);\nvar has = __webpack_require__(14);\nvar IE8_DOM_DEFINE = __webpack_require__(94);\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nexports.f = __webpack_require__(7) ? gOPD : function getOwnPropertyDescriptor(O, P) {\n O = toIObject(O);\n P = toPrimitive(P, true);\n if (IE8_DOM_DEFINE) try {\n return gOPD(O, P);\n } catch (e) { /* empty */ }\n if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdvcGQuanM/MTFlOSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxVQUFVLG1CQUFPLENBQUMsRUFBZTtBQUNqQyxpQkFBaUIsbUJBQU8sQ0FBQyxFQUFrQjtBQUMzQyxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDLGtCQUFrQixtQkFBTyxDQUFDLEVBQWlCO0FBQzNDLFVBQVUsbUJBQU8sQ0FBQyxFQUFRO0FBQzFCLHFCQUFxQixtQkFBTyxDQUFDLEVBQW1CO0FBQ2hEOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxDQUFnQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUcsWUFBWTtBQUNmO0FBQ0EiLCJmaWxlIjoiMTYuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgcElFID0gcmVxdWlyZSgnLi9fb2JqZWN0LXBpZScpO1xudmFyIGNyZWF0ZURlc2MgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuL19pZTgtZG9tLWRlZmluZScpO1xudmFyIGdPUEQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG5leHBvcnRzLmYgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gZ09QRCA6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKSB7XG4gIE8gPSB0b0lPYmplY3QoTyk7XG4gIFAgPSB0b1ByaW1pdGl2ZShQLCB0cnVlKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiBnT1BEKE8sIFApO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKGhhcyhPLCBQKSkgcmV0dXJuIGNyZWF0ZURlc2MoIXBJRS5mLmNhbGwoTywgUCksIE9bUF0pO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///16\n")},function(module,exports,__webpack_require__){eval("// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = __webpack_require__(14);\nvar toObject = __webpack_require__(9);\nvar IE_PROTO = __webpack_require__(68)('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n O = toObject(O);\n if (has(O, IE_PROTO)) return O[IE_PROTO];\n if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n return O.constructor.prototype;\n } return O instanceof Object ? ObjectProto : null;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdwby5qcz8zOGZkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsVUFBVSxtQkFBTyxDQUFDLEVBQVE7QUFDMUIsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZUFBZSxtQkFBTyxDQUFDLEVBQWU7QUFDdEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCIsImZpbGUiOiIxNy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDE5LjEuMi45IC8gMTUuMi4zLjIgT2JqZWN0LmdldFByb3RvdHlwZU9mKE8pXG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciBJRV9QUk9UTyA9IHJlcXVpcmUoJy4vX3NoYXJlZC1rZXknKSgnSUVfUFJPVE8nKTtcbnZhciBPYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmdldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIChPKSB7XG4gIE8gPSB0b09iamVjdChPKTtcbiAgaWYgKGhhcyhPLCBJRV9QUk9UTykpIHJldHVybiBPW0lFX1BST1RPXTtcbiAgaWYgKHR5cGVvZiBPLmNvbnN0cnVjdG9yID09ICdmdW5jdGlvbicgJiYgTyBpbnN0YW5jZW9mIE8uY29uc3RydWN0b3IpIHtcbiAgICByZXR1cm4gTy5jb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG4gIH0gcmV0dXJuIE8gaW5zdGFuY2VvZiBPYmplY3QgPyBPYmplY3RQcm90byA6IG51bGw7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///17\n")},function(module,exports){eval("var core = module.exports = { version: '2.6.12' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY29yZS5qcz84Mzc4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDZCQUE2QjtBQUM3Qix1Q0FBdUMiLCJmaWxlIjoiMTguanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgY29yZSA9IG1vZHVsZS5leHBvcnRzID0geyB2ZXJzaW9uOiAnMi42LjEyJyB9O1xuaWYgKHR5cGVvZiBfX2UgPT0gJ251bWJlcicpIF9fZSA9IGNvcmU7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///18\n")},function(module,exports,__webpack_require__){eval("// optional / simple context binding\nvar aFunction = __webpack_require__(10);\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY3R4LmpzPzliNDMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIxOS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIG9wdGlvbmFsIC8gc2ltcGxlIGNvbnRleHQgYmluZGluZ1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGZuLCB0aGF0LCBsZW5ndGgpIHtcbiAgYUZ1bmN0aW9uKGZuKTtcbiAgaWYgKHRoYXQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGZuO1xuICBzd2l0Y2ggKGxlbmd0aCkge1xuICAgIGNhc2UgMTogcmV0dXJuIGZ1bmN0aW9uIChhKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhKTtcbiAgICB9O1xuICAgIGNhc2UgMjogcmV0dXJuIGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhLCBiKTtcbiAgICB9O1xuICAgIGNhc2UgMzogcmV0dXJuIGZ1bmN0aW9uIChhLCBiLCBjKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhLCBiLCBjKTtcbiAgICB9O1xuICB9XG4gIHJldHVybiBmdW5jdGlvbiAoLyogLi4uYXJncyAqLykge1xuICAgIHJldHVybiBmbi5hcHBseSh0aGF0LCBhcmd1bWVudHMpO1xuICB9O1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///19\n")},function(module,exports){eval("var toString = {}.toString;\n\nmodule.exports = function (it) {\n return toString.call(it).slice(8, -1);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY29mLmpzPzJkOTUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsaUJBQWlCOztBQUVqQjtBQUNBO0FBQ0EiLCJmaWxlIjoiMjAuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgdG9TdHJpbmcgPSB7fS50b1N0cmluZztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwoaXQpLnNsaWNlKDgsIC0xKTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///20\n")},function(module,exports){eval("// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8taW50ZWdlci5qcz80NTg4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIyMS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDcuMS40IFRvSW50ZWdlclxudmFyIGNlaWwgPSBNYXRoLmNlaWw7XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGlzTmFOKGl0ID0gK2l0KSA/IDAgOiAoaXQgPiAwID8gZmxvb3IgOiBjZWlsKShpdCk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///21\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar fails = __webpack_require__(3);\n\nmodule.exports = function (method, arg) {\n return !!method && fails(function () {\n // eslint-disable-next-line no-useless-call\n arg ? method.call(null, function () { /* empty */ }, 1) : method.call(null);\n });\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaWN0LW1ldGhvZC5qcz8yZjIxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsWUFBWSxtQkFBTyxDQUFDLENBQVU7O0FBRTlCO0FBQ0E7QUFDQTtBQUNBLHlDQUF5QyxjQUFjO0FBQ3ZELEdBQUc7QUFDSCIsImZpbGUiOiIyMi5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG1ldGhvZCwgYXJnKSB7XG4gIHJldHVybiAhIW1ldGhvZCAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZWxlc3MtY2FsbFxuICAgIGFyZyA/IG1ldGhvZC5jYWxsKG51bGwsIGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSwgMSkgOiBtZXRob2QuY2FsbChudWxsKTtcbiAgfSk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///22\n")},function(module,exports,__webpack_require__){eval("// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = __webpack_require__(4);\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n if (!isObject(it)) return it;\n var fn, val;\n if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8tcHJpbWl0aXZlLmpzPzZhOTkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIyMy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDcuMS4xIFRvUHJpbWl0aXZlKGlucHV0IFssIFByZWZlcnJlZFR5cGVdKVxudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG4vLyBpbnN0ZWFkIG9mIHRoZSBFUzYgc3BlYyB2ZXJzaW9uLCB3ZSBkaWRuJ3QgaW1wbGVtZW50IEBAdG9QcmltaXRpdmUgY2FzZVxuLy8gYW5kIHRoZSBzZWNvbmQgYXJndW1lbnQgLSBmbGFnIC0gcHJlZmVycmVkIHR5cGUgaXMgYSBzdHJpbmdcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBTKSB7XG4gIGlmICghaXNPYmplY3QoaXQpKSByZXR1cm4gaXQ7XG4gIHZhciBmbiwgdmFsO1xuICBpZiAoUyAmJiB0eXBlb2YgKGZuID0gaXQudG9TdHJpbmcpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaXQpKSkgcmV0dXJuIHZhbDtcbiAgaWYgKHR5cGVvZiAoZm4gPSBpdC52YWx1ZU9mKSA9PSAnZnVuY3Rpb24nICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGl0KSkpIHJldHVybiB2YWw7XG4gIGlmICghUyAmJiB0eXBlb2YgKGZuID0gaXQudG9TdHJpbmcpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaXQpKSkgcmV0dXJuIHZhbDtcbiAgdGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///23\n")},function(module,exports){eval('// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError("Can\'t call method on " + it);\n return it;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZGVmaW5lZC5qcz9iZTEzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMjQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyA3LjIuMSBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGFyZ3VtZW50KVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGl0ID09IHVuZGVmaW5lZCkgdGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gIFwiICsgaXQpO1xuICByZXR1cm4gaXQ7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///24\n')},function(module,exports,__webpack_require__){eval("// most Object methods by ES6 should accept primitives\nvar $export = __webpack_require__(0);\nvar core = __webpack_require__(18);\nvar fails = __webpack_require__(3);\nmodule.exports = function (KEY, exec) {\n var fn = (core.Object || {})[KEY] || Object[KEY];\n var exp = {};\n exp[KEY] = exec(fn);\n $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LXNhcC5qcz81ZWRhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsV0FBVyxtQkFBTyxDQUFDLEVBQVM7QUFDNUIsWUFBWSxtQkFBTyxDQUFDLENBQVU7QUFDOUI7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBLHFEQUFxRCxPQUFPLEVBQUU7QUFDOUQiLCJmaWxlIjoiMjUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBtb3N0IE9iamVjdCBtZXRob2RzIGJ5IEVTNiBzaG91bGQgYWNjZXB0IHByaW1pdGl2ZXNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgY29yZSA9IHJlcXVpcmUoJy4vX2NvcmUnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChLRVksIGV4ZWMpIHtcbiAgdmFyIGZuID0gKGNvcmUuT2JqZWN0IHx8IHt9KVtLRVldIHx8IE9iamVjdFtLRVldO1xuICB2YXIgZXhwID0ge307XG4gIGV4cFtLRVldID0gZXhlYyhmbik7XG4gICRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogZmFpbHMoZnVuY3Rpb24gKCkgeyBmbigxKTsgfSksICdPYmplY3QnLCBleHApO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///25\n")},function(module,exports,__webpack_require__){eval("// 0 -> Array#forEach\n// 1 -> Array#map\n// 2 -> Array#filter\n// 3 -> Array#some\n// 4 -> Array#every\n// 5 -> Array#find\n// 6 -> Array#findIndex\nvar ctx = __webpack_require__(19);\nvar IObject = __webpack_require__(48);\nvar toObject = __webpack_require__(9);\nvar toLength = __webpack_require__(6);\nvar asc = __webpack_require__(84);\nmodule.exports = function (TYPE, $create) {\n var IS_MAP = TYPE == 1;\n var IS_FILTER = TYPE == 2;\n var IS_SOME = TYPE == 3;\n var IS_EVERY = TYPE == 4;\n var IS_FIND_INDEX = TYPE == 6;\n var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n var create = $create || asc;\n return function ($this, callbackfn, that) {\n var O = toObject($this);\n var self = IObject(O);\n var f = ctx(callbackfn, that, 3);\n var length = toLength(self.length);\n var index = 0;\n var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;\n var val, res;\n for (;length > index; index++) if (NO_HOLES || index in self) {\n val = self[index];\n res = f(val, index, O);\n if (TYPE) {\n if (IS_MAP) result[index] = res; // map\n else if (res) switch (TYPE) {\n case 3: return true; // some\n case 5: return val; // find\n case 6: return index; // findIndex\n case 2: result.push(val); // filter\n } else if (IS_EVERY) return false; // every\n }\n }\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;\n };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktbWV0aG9kcy5qcz8wYTQ5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVSxtQkFBTyxDQUFDLEVBQVE7QUFDMUIsY0FBYyxtQkFBTyxDQUFDLEVBQVk7QUFDbEMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsVUFBVSxtQkFBTyxDQUFDLEVBQXlCO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVSxlQUFlO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBLHdDQUF3QztBQUN4QztBQUNBLDhCQUE4QjtBQUM5Qiw2QkFBNkI7QUFDN0IsK0JBQStCO0FBQy9CLG1DQUFtQztBQUNuQyxTQUFTLGlDQUFpQztBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjI2LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMCAtPiBBcnJheSNmb3JFYWNoXG4vLyAxIC0+IEFycmF5I21hcFxuLy8gMiAtPiBBcnJheSNmaWx0ZXJcbi8vIDMgLT4gQXJyYXkjc29tZVxuLy8gNCAtPiBBcnJheSNldmVyeVxuLy8gNSAtPiBBcnJheSNmaW5kXG4vLyA2IC0+IEFycmF5I2ZpbmRJbmRleFxudmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIElPYmplY3QgPSByZXF1aXJlKCcuL19pb2JqZWN0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGFzYyA9IHJlcXVpcmUoJy4vX2FycmF5LXNwZWNpZXMtY3JlYXRlJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChUWVBFLCAkY3JlYXRlKSB7XG4gIHZhciBJU19NQVAgPSBUWVBFID09IDE7XG4gIHZhciBJU19GSUxURVIgPSBUWVBFID09IDI7XG4gIHZhciBJU19TT01FID0gVFlQRSA9PSAzO1xuICB2YXIgSVNfRVZFUlkgPSBUWVBFID09IDQ7XG4gIHZhciBJU19GSU5EX0lOREVYID0gVFlQRSA9PSA2O1xuICB2YXIgTk9fSE9MRVMgPSBUWVBFID09IDUgfHwgSVNfRklORF9JTkRFWDtcbiAgdmFyIGNyZWF0ZSA9ICRjcmVhdGUgfHwgYXNjO1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBjYWxsYmFja2ZuLCB0aGF0KSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCgkdGhpcyk7XG4gICAgdmFyIHNlbGYgPSBJT2JqZWN0KE8pO1xuICAgIHZhciBmID0gY3R4KGNhbGxiYWNrZm4sIHRoYXQsIDMpO1xuICAgIHZhciBsZW5ndGggPSB0b0xlbmd0aChzZWxmLmxlbmd0aCk7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgcmVzdWx0ID0gSVNfTUFQID8gY3JlYXRlKCR0aGlzLCBsZW5ndGgpIDogSVNfRklMVEVSID8gY3JlYXRlKCR0aGlzLCAwKSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgdmFsLCByZXM7XG4gICAgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIGlmIChOT19IT0xFUyB8fCBpbmRleCBpbiBzZWxmKSB7XG4gICAgICB2YWwgPSBzZWxmW2luZGV4XTtcbiAgICAgIHJlcyA9IGYodmFsLCBpbmRleCwgTyk7XG4gICAgICBpZiAoVFlQRSkge1xuICAgICAgICBpZiAoSVNfTUFQKSByZXN1bHRbaW5kZXhdID0gcmVzOyAgIC8vIG1hcFxuICAgICAgICBlbHNlIGlmIChyZXMpIHN3aXRjaCAoVFlQRSkge1xuICAgICAgICAgIGNhc2UgMzogcmV0dXJuIHRydWU7ICAgICAgICAgICAgIC8vIHNvbWVcbiAgICAgICAgICBjYXNlIDU6IHJldHVybiB2YWw7ICAgICAgICAgICAgICAvLyBmaW5kXG4gICAgICAgICAgY2FzZSA2OiByZXR1cm4gaW5kZXg7ICAgICAgICAgICAgLy8gZmluZEluZGV4XG4gICAgICAgICAgY2FzZSAyOiByZXN1bHQucHVzaCh2YWwpOyAgICAgICAgLy8gZmlsdGVyXG4gICAgICAgIH0gZWxzZSBpZiAoSVNfRVZFUlkpIHJldHVybiBmYWxzZTsgLy8gZXZlcnlcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIElTX0ZJTkRfSU5ERVggPyAtMSA6IElTX1NPTUUgfHwgSVNfRVZFUlkgPyBJU19FVkVSWSA6IHJlc3VsdDtcbiAgfTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///26\n")},function(module,exports,__webpack_require__){"use strict";eval("\nif (__webpack_require__(7)) {\n var LIBRARY = __webpack_require__(29);\n var global = __webpack_require__(2);\n var fails = __webpack_require__(3);\n var $export = __webpack_require__(0);\n var $typed = __webpack_require__(62);\n var $buffer = __webpack_require__(92);\n var ctx = __webpack_require__(19);\n var anInstance = __webpack_require__(39);\n var propertyDesc = __webpack_require__(32);\n var hide = __webpack_require__(11);\n var redefineAll = __webpack_require__(41);\n var toInteger = __webpack_require__(21);\n var toLength = __webpack_require__(6);\n var toIndex = __webpack_require__(122);\n var toAbsoluteIndex = __webpack_require__(35);\n var toPrimitive = __webpack_require__(23);\n var has = __webpack_require__(14);\n var classof = __webpack_require__(44);\n var isObject = __webpack_require__(4);\n var toObject = __webpack_require__(9);\n var isArrayIter = __webpack_require__(81);\n var create = __webpack_require__(36);\n var getPrototypeOf = __webpack_require__(17);\n var gOPN = __webpack_require__(37).f;\n var getIterFn = __webpack_require__(83);\n var uid = __webpack_require__(33);\n var wks = __webpack_require__(5);\n var createArrayMethod = __webpack_require__(26);\n var createArrayIncludes = __webpack_require__(52);\n var speciesConstructor = __webpack_require__(51);\n var ArrayIterators = __webpack_require__(86);\n var Iterators = __webpack_require__(46);\n var $iterDetect = __webpack_require__(57);\n var setSpecies = __webpack_require__(38);\n var arrayFill = __webpack_require__(85);\n var arrayCopyWithin = __webpack_require__(111);\n var $DP = __webpack_require__(8);\n var $GOPD = __webpack_require__(16);\n var dP = $DP.f;\n var gOPD = $GOPD.f;\n var RangeError = global.RangeError;\n var TypeError = global.TypeError;\n var Uint8Array = global.Uint8Array;\n var ARRAY_BUFFER = 'ArrayBuffer';\n var SHARED_BUFFER = 'Shared' + ARRAY_BUFFER;\n var BYTES_PER_ELEMENT = 'BYTES_PER_ELEMENT';\n var PROTOTYPE = 'prototype';\n var ArrayProto = Array[PROTOTYPE];\n var $ArrayBuffer = $buffer.ArrayBuffer;\n var $DataView = $buffer.DataView;\n var arrayForEach = createArrayMethod(0);\n var arrayFilter = createArrayMethod(2);\n var arraySome = createArrayMethod(3);\n var arrayEvery = createArrayMethod(4);\n var arrayFind = createArrayMethod(5);\n var arrayFindIndex = createArrayMethod(6);\n var arrayIncludes = createArrayIncludes(true);\n var arrayIndexOf = createArrayIncludes(false);\n var arrayValues = ArrayIterators.values;\n var arrayKeys = ArrayIterators.keys;\n var arrayEntries = ArrayIterators.entries;\n var arrayLastIndexOf = ArrayProto.lastIndexOf;\n var arrayReduce = ArrayProto.reduce;\n var arrayReduceRight = ArrayProto.reduceRight;\n var arrayJoin = ArrayProto.join;\n var arraySort = ArrayProto.sort;\n var arraySlice = ArrayProto.slice;\n var arrayToString = ArrayProto.toString;\n var arrayToLocaleString = ArrayProto.toLocaleString;\n var ITERATOR = wks('iterator');\n var TAG = wks('toStringTag');\n var TYPED_CONSTRUCTOR = uid('typed_constructor');\n var DEF_CONSTRUCTOR = uid('def_constructor');\n var ALL_CONSTRUCTORS = $typed.CONSTR;\n var TYPED_ARRAY = $typed.TYPED;\n var VIEW = $typed.VIEW;\n var WRONG_LENGTH = 'Wrong length!';\n\n var $map = createArrayMethod(1, function (O, length) {\n return allocate(speciesConstructor(O, O[DEF_CONSTRUCTOR]), length);\n });\n\n var LITTLE_ENDIAN = fails(function () {\n // eslint-disable-next-line no-undef\n return new Uint8Array(new Uint16Array([1]).buffer)[0] === 1;\n });\n\n var FORCED_SET = !!Uint8Array && !!Uint8Array[PROTOTYPE].set && fails(function () {\n new Uint8Array(1).set({});\n });\n\n var toOffset = function (it, BYTES) {\n var offset = toInteger(it);\n if (offset < 0 || offset % BYTES) throw RangeError('Wrong offset!');\n return offset;\n };\n\n var validate = function (it) {\n if (isObject(it) && TYPED_ARRAY in it) return it;\n throw TypeError(it + ' is not a typed array!');\n };\n\n var allocate = function (C, length) {\n if (!(isObject(C) && TYPED_CONSTRUCTOR in C)) {\n throw TypeError('It is not a typed array constructor!');\n } return new C(length);\n };\n\n var speciesFromList = function (O, list) {\n return fromList(speciesConstructor(O, O[DEF_CONSTRUCTOR]), list);\n };\n\n var fromList = function (C, list) {\n var index = 0;\n var length = list.length;\n var result = allocate(C, length);\n while (length > index) result[index] = list[index++];\n return result;\n };\n\n var addGetter = function (it, key, internal) {\n dP(it, key, { get: function () { return this._d[internal]; } });\n };\n\n var $from = function from(source /* , mapfn, thisArg */) {\n var O = toObject(source);\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var iterFn = getIterFn(O);\n var i, length, values, result, step, iterator;\n if (iterFn != undefined && !isArrayIter(iterFn)) {\n for (iterator = iterFn.call(O), values = [], i = 0; !(step = iterator.next()).done; i++) {\n values.push(step.value);\n } O = values;\n }\n if (mapping && aLen > 2) mapfn = ctx(mapfn, arguments[2], 2);\n for (i = 0, length = toLength(O.length), result = allocate(this, length); length > i; i++) {\n result[i] = mapping ? mapfn(O[i], i) : O[i];\n }\n return result;\n };\n\n var $of = function of(/* ...items */) {\n var index = 0;\n var length = arguments.length;\n var result = allocate(this, length);\n while (length > index) result[index] = arguments[index++];\n return result;\n };\n\n // iOS Safari 6.x fails here\n var TO_LOCALE_BUG = !!Uint8Array && fails(function () { arrayToLocaleString.call(new Uint8Array(1)); });\n\n var $toLocaleString = function toLocaleString() {\n return arrayToLocaleString.apply(TO_LOCALE_BUG ? arraySlice.call(validate(this)) : validate(this), arguments);\n };\n\n var proto = {\n copyWithin: function copyWithin(target, start /* , end */) {\n return arrayCopyWithin.call(validate(this), target, start, arguments.length > 2 ? arguments[2] : undefined);\n },\n every: function every(callbackfn /* , thisArg */) {\n return arrayEvery(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n fill: function fill(value /* , start, end */) { // eslint-disable-line no-unused-vars\n return arrayFill.apply(validate(this), arguments);\n },\n filter: function filter(callbackfn /* , thisArg */) {\n return speciesFromList(this, arrayFilter(validate(this), callbackfn,\n arguments.length > 1 ? arguments[1] : undefined));\n },\n find: function find(predicate /* , thisArg */) {\n return arrayFind(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n findIndex: function findIndex(predicate /* , thisArg */) {\n return arrayFindIndex(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n forEach: function forEach(callbackfn /* , thisArg */) {\n arrayForEach(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n indexOf: function indexOf(searchElement /* , fromIndex */) {\n return arrayIndexOf(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n includes: function includes(searchElement /* , fromIndex */) {\n return arrayIncludes(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n join: function join(separator) { // eslint-disable-line no-unused-vars\n return arrayJoin.apply(validate(this), arguments);\n },\n lastIndexOf: function lastIndexOf(searchElement /* , fromIndex */) { // eslint-disable-line no-unused-vars\n return arrayLastIndexOf.apply(validate(this), arguments);\n },\n map: function map(mapfn /* , thisArg */) {\n return $map(validate(this), mapfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n reduce: function reduce(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduce.apply(validate(this), arguments);\n },\n reduceRight: function reduceRight(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduceRight.apply(validate(this), arguments);\n },\n reverse: function reverse() {\n var that = this;\n var length = validate(that).length;\n var middle = Math.floor(length / 2);\n var index = 0;\n var value;\n while (index < middle) {\n value = that[index];\n that[index++] = that[--length];\n that[length] = value;\n } return that;\n },\n some: function some(callbackfn /* , thisArg */) {\n return arraySome(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n sort: function sort(comparefn) {\n return arraySort.call(validate(this), comparefn);\n },\n subarray: function subarray(begin, end) {\n var O = validate(this);\n var length = O.length;\n var $begin = toAbsoluteIndex(begin, length);\n return new (speciesConstructor(O, O[DEF_CONSTRUCTOR]))(\n O.buffer,\n O.byteOffset + $begin * O.BYTES_PER_ELEMENT,\n toLength((end === undefined ? length : toAbsoluteIndex(end, length)) - $begin)\n );\n }\n };\n\n var $slice = function slice(start, end) {\n return speciesFromList(this, arraySlice.call(validate(this), start, end));\n };\n\n var $set = function set(arrayLike /* , offset */) {\n validate(this);\n var offset = toOffset(arguments[1], 1);\n var length = this.length;\n var src = toObject(arrayLike);\n var len = toLength(src.length);\n var index = 0;\n if (len + offset > length) throw RangeError(WRONG_LENGTH);\n while (index < len) this[offset + index] = src[index++];\n };\n\n var $iterators = {\n entries: function entries() {\n return arrayEntries.call(validate(this));\n },\n keys: function keys() {\n return arrayKeys.call(validate(this));\n },\n values: function values() {\n return arrayValues.call(validate(this));\n }\n };\n\n var isTAIndex = function (target, key) {\n return isObject(target)\n && target[TYPED_ARRAY]\n && typeof key != 'symbol'\n && key in target\n && String(+key) == String(key);\n };\n var $getDesc = function getOwnPropertyDescriptor(target, key) {\n return isTAIndex(target, key = toPrimitive(key, true))\n ? propertyDesc(2, target[key])\n : gOPD(target, key);\n };\n var $setDesc = function defineProperty(target, key, desc) {\n if (isTAIndex(target, key = toPrimitive(key, true))\n && isObject(desc)\n && has(desc, 'value')\n && !has(desc, 'get')\n && !has(desc, 'set')\n // TODO: add validation descriptor w/o calling accessors\n && !desc.configurable\n && (!has(desc, 'writable') || desc.writable)\n && (!has(desc, 'enumerable') || desc.enumerable)\n ) {\n target[key] = desc.value;\n return target;\n } return dP(target, key, desc);\n };\n\n if (!ALL_CONSTRUCTORS) {\n $GOPD.f = $getDesc;\n $DP.f = $setDesc;\n }\n\n $export($export.S + $export.F * !ALL_CONSTRUCTORS, 'Object', {\n getOwnPropertyDescriptor: $getDesc,\n defineProperty: $setDesc\n });\n\n if (fails(function () { arrayToString.call({}); })) {\n arrayToString = arrayToLocaleString = function toString() {\n return arrayJoin.call(this);\n };\n }\n\n var $TypedArrayPrototype$ = redefineAll({}, proto);\n redefineAll($TypedArrayPrototype$, $iterators);\n hide($TypedArrayPrototype$, ITERATOR, $iterators.values);\n redefineAll($TypedArrayPrototype$, {\n slice: $slice,\n set: $set,\n constructor: function () { /* noop */ },\n toString: arrayToString,\n toLocaleString: $toLocaleString\n });\n addGetter($TypedArrayPrototype$, 'buffer', 'b');\n addGetter($TypedArrayPrototype$, 'byteOffset', 'o');\n addGetter($TypedArrayPrototype$, 'byteLength', 'l');\n addGetter($TypedArrayPrototype$, 'length', 'e');\n dP($TypedArrayPrototype$, TAG, {\n get: function () { return this[TYPED_ARRAY]; }\n });\n\n // eslint-disable-next-line max-statements\n module.exports = function (KEY, BYTES, wrapper, CLAMPED) {\n CLAMPED = !!CLAMPED;\n var NAME = KEY + (CLAMPED ? 'Clamped' : '') + 'Array';\n var GETTER = 'get' + KEY;\n var SETTER = 'set' + KEY;\n var TypedArray = global[NAME];\n var Base = TypedArray || {};\n var TAC = TypedArray && getPrototypeOf(TypedArray);\n var FORCED = !TypedArray || !$typed.ABV;\n var O = {};\n var TypedArrayPrototype = TypedArray && TypedArray[PROTOTYPE];\n var getter = function (that, index) {\n var data = that._d;\n return data.v[GETTER](index * BYTES + data.o, LITTLE_ENDIAN);\n };\n var setter = function (that, index, value) {\n var data = that._d;\n if (CLAMPED) value = (value = Math.round(value)) < 0 ? 0 : value > 0xff ? 0xff : value & 0xff;\n data.v[SETTER](index * BYTES + data.o, value, LITTLE_ENDIAN);\n };\n var addElement = function (that, index) {\n dP(that, index, {\n get: function () {\n return getter(this, index);\n },\n set: function (value) {\n return setter(this, index, value);\n },\n enumerable: true\n });\n };\n if (FORCED) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME, '_d');\n var index = 0;\n var offset = 0;\n var buffer, byteLength, length, klass;\n if (!isObject(data)) {\n length = toIndex(data);\n byteLength = length * BYTES;\n buffer = new $ArrayBuffer(byteLength);\n } else if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n buffer = data;\n offset = toOffset($offset, BYTES);\n var $len = data.byteLength;\n if ($length === undefined) {\n if ($len % BYTES) throw RangeError(WRONG_LENGTH);\n byteLength = $len - offset;\n if (byteLength < 0) throw RangeError(WRONG_LENGTH);\n } else {\n byteLength = toLength($length) * BYTES;\n if (byteLength + offset > $len) throw RangeError(WRONG_LENGTH);\n }\n length = byteLength / BYTES;\n } else if (TYPED_ARRAY in data) {\n return fromList(TypedArray, data);\n } else {\n return $from.call(TypedArray, data);\n }\n hide(that, '_d', {\n b: buffer,\n o: offset,\n l: byteLength,\n e: length,\n v: new $DataView(buffer)\n });\n while (index < length) addElement(that, index++);\n });\n TypedArrayPrototype = TypedArray[PROTOTYPE] = create($TypedArrayPrototype$);\n hide(TypedArrayPrototype, 'constructor', TypedArray);\n } else if (!fails(function () {\n TypedArray(1);\n }) || !fails(function () {\n new TypedArray(-1); // eslint-disable-line no-new\n }) || !$iterDetect(function (iter) {\n new TypedArray(); // eslint-disable-line no-new\n new TypedArray(null); // eslint-disable-line no-new\n new TypedArray(1.5); // eslint-disable-line no-new\n new TypedArray(iter); // eslint-disable-line no-new\n }, true)) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME);\n var klass;\n // `ws` module bug, temporarily remove validation length for Uint8Array\n // https://github.com/websockets/ws/pull/645\n if (!isObject(data)) return new Base(toIndex(data));\n if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n return $length !== undefined\n ? new Base(data, toOffset($offset, BYTES), $length)\n : $offset !== undefined\n ? new Base(data, toOffset($offset, BYTES))\n : new Base(data);\n }\n if (TYPED_ARRAY in data) return fromList(TypedArray, data);\n return $from.call(TypedArray, data);\n });\n arrayForEach(TAC !== Function.prototype ? gOPN(Base).concat(gOPN(TAC)) : gOPN(Base), function (key) {\n if (!(key in TypedArray)) hide(TypedArray, key, Base[key]);\n });\n TypedArray[PROTOTYPE] = TypedArrayPrototype;\n if (!LIBRARY) TypedArrayPrototype.constructor = TypedArray;\n }\n var $nativeIterator = TypedArrayPrototype[ITERATOR];\n var CORRECT_ITER_NAME = !!$nativeIterator\n && ($nativeIterator.name == 'values' || $nativeIterator.name == undefined);\n var $iterator = $iterators.values;\n hide(TypedArray, TYPED_CONSTRUCTOR, true);\n hide(TypedArrayPrototype, TYPED_ARRAY, NAME);\n hide(TypedArrayPrototype, VIEW, true);\n hide(TypedArrayPrototype, DEF_CONSTRUCTOR, TypedArray);\n\n if (CLAMPED ? new TypedArray(1)[TAG] != NAME : !(TAG in TypedArrayPrototype)) {\n dP(TypedArrayPrototype, TAG, {\n get: function () { return NAME; }\n });\n }\n\n O[NAME] = TypedArray;\n\n $export($export.G + $export.W + $export.F * (TypedArray != Base), O);\n\n $export($export.S, NAME, {\n BYTES_PER_ELEMENT: BYTES\n });\n\n $export($export.S + $export.F * fails(function () { Base.of.call(TypedArray, 1); }), NAME, {\n from: $from,\n of: $of\n });\n\n if (!(BYTES_PER_ELEMENT in TypedArrayPrototype)) hide(TypedArrayPrototype, BYTES_PER_ELEMENT, BYTES);\n\n $export($export.P, NAME, proto);\n\n setSpecies(NAME);\n\n $export($export.P + $export.F * FORCED_SET, NAME, { set: $set });\n\n $export($export.P + $export.F * !CORRECT_ITER_NAME, NAME, $iterators);\n\n if (!LIBRARY && TypedArrayPrototype.toString != arrayToString) TypedArrayPrototype.toString = arrayToString;\n\n $export($export.P + $export.F * fails(function () {\n new TypedArray(1).slice();\n }), NAME, { slice: $slice });\n\n $export($export.P + $export.F * (fails(function () {\n return [1, 2].toLocaleString() != new TypedArray([1, 2]).toLocaleString();\n }) || !fails(function () {\n TypedArrayPrototype.toLocaleString.call([1, 2]);\n })), NAME, { toLocaleString: $toLocaleString });\n\n Iterators[NAME] = CORRECT_ITER_NAME ? $nativeIterator : $iterator;\n if (!LIBRARY && !CORRECT_ITER_NAME) hide(TypedArrayPrototype, ITERATOR, $iterator);\n };\n} else module.exports = function () { /* empty */ };\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdHlwZWQtYXJyYXkuanM/ZWMzMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLElBQUksbUJBQU8sQ0FBQyxDQUFnQjtBQUM1QixnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFZO0FBQ3BDLGVBQWUsbUJBQU8sQ0FBQyxDQUFXO0FBQ2xDLGNBQWMsbUJBQU8sQ0FBQyxDQUFVO0FBQ2hDLGdCQUFnQixtQkFBTyxDQUFDLENBQVc7QUFDbkMsZUFBZSxtQkFBTyxDQUFDLEVBQVU7QUFDakMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBaUI7QUFDekMsWUFBWSxtQkFBTyxDQUFDLEVBQVE7QUFDNUIsbUJBQW1CLG1CQUFPLENBQUMsRUFBZ0I7QUFDM0MscUJBQXFCLG1CQUFPLENBQUMsRUFBa0I7QUFDL0MsYUFBYSxtQkFBTyxDQUFDLEVBQVM7QUFDOUIsb0JBQW9CLG1CQUFPLENBQUMsRUFBaUI7QUFDN0Msa0JBQWtCLG1CQUFPLENBQUMsRUFBZTtBQUN6QyxpQkFBaUIsbUJBQU8sQ0FBQyxDQUFjO0FBQ3ZDLGdCQUFnQixtQkFBTyxDQUFDLEdBQWE7QUFDckMsd0JBQXdCLG1CQUFPLENBQUMsRUFBc0I7QUFDdEQsb0JBQW9CLG1CQUFPLENBQUMsRUFBaUI7QUFDN0MsWUFBWSxtQkFBTyxDQUFDLEVBQVE7QUFDNUIsZ0JBQWdCLG1CQUFPLENBQUMsRUFBWTtBQUNwQyxpQkFBaUIsbUJBQU8sQ0FBQyxDQUFjO0FBQ3ZDLGlCQUFpQixtQkFBTyxDQUFDLENBQWM7QUFDdkMsb0JBQW9CLG1CQUFPLENBQUMsRUFBa0I7QUFDOUMsZUFBZSxtQkFBTyxDQUFDLEVBQWtCO0FBQ3pDLHVCQUF1QixtQkFBTyxDQUFDLEVBQWU7QUFDOUMsYUFBYSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3JDLGtCQUFrQixtQkFBTyxDQUFDLEVBQTRCO0FBQ3RELFlBQVksbUJBQU8sQ0FBQyxFQUFRO0FBQzVCLFlBQVksbUJBQU8sQ0FBQyxDQUFRO0FBQzVCLDBCQUEwQixtQkFBTyxDQUFDLEVBQWtCO0FBQ3BELDRCQUE0QixtQkFBTyxDQUFDLEVBQW1CO0FBQ3ZELDJCQUEyQixtQkFBTyxDQUFDLEVBQXdCO0FBQzNELHVCQUF1QixtQkFBTyxDQUFDLEVBQXNCO0FBQ3JELGtCQUFrQixtQkFBTyxDQUFDLEVBQWM7QUFDeEMsb0JBQW9CLG1CQUFPLENBQUMsRUFBZ0I7QUFDNUMsbUJBQW1CLG1CQUFPLENBQUMsRUFBZ0I7QUFDM0Msa0JBQWtCLG1CQUFPLENBQUMsRUFBZTtBQUN6Qyx3QkFBd0IsbUJBQU8sQ0FBQyxHQUFzQjtBQUN0RCxZQUFZLG1CQUFPLENBQUMsQ0FBYztBQUNsQyxjQUFjLG1CQUFPLENBQUMsRUFBZ0I7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQSw0QkFBNEI7QUFDNUIsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxpQkFBaUIsbUJBQW1CLDBCQUEwQixFQUFFLEVBQUU7QUFDbEU7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlEQUF5RCxnQ0FBZ0M7QUFDekY7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLDZFQUE2RSxZQUFZO0FBQ3pGO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EseURBQXlELDZDQUE2QyxFQUFFOztBQUV4RztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsbURBQW1EO0FBQ25EO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsb0NBQW9DO0FBQ3BDO0FBQ0EsS0FBSztBQUNMLHdFQUF3RTtBQUN4RTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMLDhEQUE4RDtBQUM5RDtBQUNBLEtBQUs7QUFDTCx3RUFBd0U7QUFDeEU7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVILHlCQUF5QixzQkFBc0IsRUFBRSxFQUFFO0FBQ25EO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDRDQUE0QztBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOEJBQThCLGFBQWE7QUFDM0M7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLDBCQUEwQjtBQUNoRCxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0wseUJBQXlCO0FBQ3pCLEtBQUs7QUFDTCx1QkFBdUI7QUFDdkIsMkJBQTJCO0FBQzNCLDBCQUEwQjtBQUMxQiwyQkFBMkI7QUFDM0IsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDBCQUEwQixhQUFhO0FBQ3ZDLE9BQU87QUFDUDs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTCx1REFBdUQsNkJBQTZCLEVBQUU7QUFDdEY7QUFDQTtBQUNBLEtBQUs7O0FBRUw7O0FBRUE7O0FBRUE7O0FBRUEsdURBQXVELFlBQVk7O0FBRW5FOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxLQUFLLFVBQVUsZ0JBQWdCOztBQUUvQjtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSyxXQUFXLGtDQUFrQzs7QUFFbEQ7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxvQ0FBb0MiLCJmaWxlIjoiMjcuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5pZiAocmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSkge1xuICB2YXIgTElCUkFSWSA9IHJlcXVpcmUoJy4vX2xpYnJhcnknKTtcbiAgdmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xuICB2YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xuICB2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuICB2YXIgJHR5cGVkID0gcmVxdWlyZSgnLi9fdHlwZWQnKTtcbiAgdmFyICRidWZmZXIgPSByZXF1aXJlKCcuL190eXBlZC1idWZmZXInKTtcbiAgdmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xuICB2YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG4gIHZhciBwcm9wZXJ0eURlc2MgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG4gIHZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xuICB2YXIgcmVkZWZpbmVBbGwgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKTtcbiAgdmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbiAgdmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG4gIHZhciB0b0luZGV4ID0gcmVxdWlyZSgnLi9fdG8taW5kZXgnKTtcbiAgdmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4vX3RvLWFic29sdXRlLWluZGV4Jyk7XG4gIHZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xuICB2YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG4gIHZhciBjbGFzc29mID0gcmVxdWlyZSgnLi9fY2xhc3NvZicpO1xuICB2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbiAgdmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG4gIHZhciBpc0FycmF5SXRlciA9IHJlcXVpcmUoJy4vX2lzLWFycmF5LWl0ZXInKTtcbiAgdmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKTtcbiAgdmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xuICB2YXIgZ09QTiA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJykuZjtcbiAgdmFyIGdldEl0ZXJGbiA9IHJlcXVpcmUoJy4vY29yZS5nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG4gIHZhciB1aWQgPSByZXF1aXJlKCcuL191aWQnKTtcbiAgdmFyIHdrcyA9IHJlcXVpcmUoJy4vX3drcycpO1xuICB2YXIgY3JlYXRlQXJyYXlNZXRob2QgPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJyk7XG4gIHZhciBjcmVhdGVBcnJheUluY2x1ZGVzID0gcmVxdWlyZSgnLi9fYXJyYXktaW5jbHVkZXMnKTtcbiAgdmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4vX3NwZWNpZXMtY29uc3RydWN0b3InKTtcbiAgdmFyIEFycmF5SXRlcmF0b3JzID0gcmVxdWlyZSgnLi9lczYuYXJyYXkuaXRlcmF0b3InKTtcbiAgdmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xuICB2YXIgJGl0ZXJEZXRlY3QgPSByZXF1aXJlKCcuL19pdGVyLWRldGVjdCcpO1xuICB2YXIgc2V0U3BlY2llcyA9IHJlcXVpcmUoJy4vX3NldC1zcGVjaWVzJyk7XG4gIHZhciBhcnJheUZpbGwgPSByZXF1aXJlKCcuL19hcnJheS1maWxsJyk7XG4gIHZhciBhcnJheUNvcHlXaXRoaW4gPSByZXF1aXJlKCcuL19hcnJheS1jb3B5LXdpdGhpbicpO1xuICB2YXIgJERQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG4gIHZhciAkR09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJyk7XG4gIHZhciBkUCA9ICREUC5mO1xuICB2YXIgZ09QRCA9ICRHT1BELmY7XG4gIHZhciBSYW5nZUVycm9yID0gZ2xvYmFsLlJhbmdlRXJyb3I7XG4gIHZhciBUeXBlRXJyb3IgPSBnbG9iYWwuVHlwZUVycm9yO1xuICB2YXIgVWludDhBcnJheSA9IGdsb2JhbC5VaW50OEFycmF5O1xuICB2YXIgQVJSQVlfQlVGRkVSID0gJ0FycmF5QnVmZmVyJztcbiAgdmFyIFNIQVJFRF9CVUZGRVIgPSAnU2hhcmVkJyArIEFSUkFZX0JVRkZFUjtcbiAgdmFyIEJZVEVTX1BFUl9FTEVNRU5UID0gJ0JZVEVTX1BFUl9FTEVNRU5UJztcbiAgdmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xuICB2YXIgQXJyYXlQcm90byA9IEFycmF5W1BST1RPVFlQRV07XG4gIHZhciAkQXJyYXlCdWZmZXIgPSAkYnVmZmVyLkFycmF5QnVmZmVyO1xuICB2YXIgJERhdGFWaWV3ID0gJGJ1ZmZlci5EYXRhVmlldztcbiAgdmFyIGFycmF5Rm9yRWFjaCA9IGNyZWF0ZUFycmF5TWV0aG9kKDApO1xuICB2YXIgYXJyYXlGaWx0ZXIgPSBjcmVhdGVBcnJheU1ldGhvZCgyKTtcbiAgdmFyIGFycmF5U29tZSA9IGNyZWF0ZUFycmF5TWV0aG9kKDMpO1xuICB2YXIgYXJyYXlFdmVyeSA9IGNyZWF0ZUFycmF5TWV0aG9kKDQpO1xuICB2YXIgYXJyYXlGaW5kID0gY3JlYXRlQXJyYXlNZXRob2QoNSk7XG4gIHZhciBhcnJheUZpbmRJbmRleCA9IGNyZWF0ZUFycmF5TWV0aG9kKDYpO1xuICB2YXIgYXJyYXlJbmNsdWRlcyA9IGNyZWF0ZUFycmF5SW5jbHVkZXModHJ1ZSk7XG4gIHZhciBhcnJheUluZGV4T2YgPSBjcmVhdGVBcnJheUluY2x1ZGVzKGZhbHNlKTtcbiAgdmFyIGFycmF5VmFsdWVzID0gQXJyYXlJdGVyYXRvcnMudmFsdWVzO1xuICB2YXIgYXJyYXlLZXlzID0gQXJyYXlJdGVyYXRvcnMua2V5cztcbiAgdmFyIGFycmF5RW50cmllcyA9IEFycmF5SXRlcmF0b3JzLmVudHJpZXM7XG4gIHZhciBhcnJheUxhc3RJbmRleE9mID0gQXJyYXlQcm90by5sYXN0SW5kZXhPZjtcbiAgdmFyIGFycmF5UmVkdWNlID0gQXJyYXlQcm90by5yZWR1Y2U7XG4gIHZhciBhcnJheVJlZHVjZVJpZ2h0ID0gQXJyYXlQcm90by5yZWR1Y2VSaWdodDtcbiAgdmFyIGFycmF5Sm9pbiA9IEFycmF5UHJvdG8uam9pbjtcbiAgdmFyIGFycmF5U29ydCA9IEFycmF5UHJvdG8uc29ydDtcbiAgdmFyIGFycmF5U2xpY2UgPSBBcnJheVByb3RvLnNsaWNlO1xuICB2YXIgYXJyYXlUb1N0cmluZyA9IEFycmF5UHJvdG8udG9TdHJpbmc7XG4gIHZhciBhcnJheVRvTG9jYWxlU3RyaW5nID0gQXJyYXlQcm90by50b0xvY2FsZVN0cmluZztcbiAgdmFyIElURVJBVE9SID0gd2tzKCdpdGVyYXRvcicpO1xuICB2YXIgVEFHID0gd2tzKCd0b1N0cmluZ1RhZycpO1xuICB2YXIgVFlQRURfQ09OU1RSVUNUT1IgPSB1aWQoJ3R5cGVkX2NvbnN0cnVjdG9yJyk7XG4gIHZhciBERUZfQ09OU1RSVUNUT1IgPSB1aWQoJ2RlZl9jb25zdHJ1Y3RvcicpO1xuICB2YXIgQUxMX0NPTlNUUlVDVE9SUyA9ICR0eXBlZC5DT05TVFI7XG4gIHZhciBUWVBFRF9BUlJBWSA9ICR0eXBlZC5UWVBFRDtcbiAgdmFyIFZJRVcgPSAkdHlwZWQuVklFVztcbiAgdmFyIFdST05HX0xFTkdUSCA9ICdXcm9uZyBsZW5ndGghJztcblxuICB2YXIgJG1hcCA9IGNyZWF0ZUFycmF5TWV0aG9kKDEsIGZ1bmN0aW9uIChPLCBsZW5ndGgpIHtcbiAgICByZXR1cm4gYWxsb2NhdGUoc3BlY2llc0NvbnN0cnVjdG9yKE8sIE9bREVGX0NPTlNUUlVDVE9SXSksIGxlbmd0aCk7XG4gIH0pO1xuXG4gIHZhciBMSVRUTEVfRU5ESUFOID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICAgIHJldHVybiBuZXcgVWludDhBcnJheShuZXcgVWludDE2QXJyYXkoWzFdKS5idWZmZXIpWzBdID09PSAxO1xuICB9KTtcblxuICB2YXIgRk9SQ0VEX1NFVCA9ICEhVWludDhBcnJheSAmJiAhIVVpbnQ4QXJyYXlbUFJPVE9UWVBFXS5zZXQgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIG5ldyBVaW50OEFycmF5KDEpLnNldCh7fSk7XG4gIH0pO1xuXG4gIHZhciB0b09mZnNldCA9IGZ1bmN0aW9uIChpdCwgQllURVMpIHtcbiAgICB2YXIgb2Zmc2V0ID0gdG9JbnRlZ2VyKGl0KTtcbiAgICBpZiAob2Zmc2V0IDwgMCB8fCBvZmZzZXQgJSBCWVRFUykgdGhyb3cgUmFuZ2VFcnJvcignV3Jvbmcgb2Zmc2V0IScpO1xuICAgIHJldHVybiBvZmZzZXQ7XG4gIH07XG5cbiAgdmFyIHZhbGlkYXRlID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgaWYgKGlzT2JqZWN0KGl0KSAmJiBUWVBFRF9BUlJBWSBpbiBpdCkgcmV0dXJuIGl0O1xuICAgIHRocm93IFR5cGVFcnJvcihpdCArICcgaXMgbm90IGEgdHlwZWQgYXJyYXkhJyk7XG4gIH07XG5cbiAgdmFyIGFsbG9jYXRlID0gZnVuY3Rpb24gKEMsIGxlbmd0aCkge1xuICAgIGlmICghKGlzT2JqZWN0KEMpICYmIFRZUEVEX0NPTlNUUlVDVE9SIGluIEMpKSB7XG4gICAgICB0aHJvdyBUeXBlRXJyb3IoJ0l0IGlzIG5vdCBhIHR5cGVkIGFycmF5IGNvbnN0cnVjdG9yIScpO1xuICAgIH0gcmV0dXJuIG5ldyBDKGxlbmd0aCk7XG4gIH07XG5cbiAgdmFyIHNwZWNpZXNGcm9tTGlzdCA9IGZ1bmN0aW9uIChPLCBsaXN0KSB7XG4gICAgcmV0dXJuIGZyb21MaXN0KHNwZWNpZXNDb25zdHJ1Y3RvcihPLCBPW0RFRl9DT05TVFJVQ1RPUl0pLCBsaXN0KTtcbiAgfTtcblxuICB2YXIgZnJvbUxpc3QgPSBmdW5jdGlvbiAoQywgbGlzdCkge1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGxlbmd0aCA9IGxpc3QubGVuZ3RoO1xuICAgIHZhciByZXN1bHQgPSBhbGxvY2F0ZShDLCBsZW5ndGgpO1xuICAgIHdoaWxlIChsZW5ndGggPiBpbmRleCkgcmVzdWx0W2luZGV4XSA9IGxpc3RbaW5kZXgrK107XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICB2YXIgYWRkR2V0dGVyID0gZnVuY3Rpb24gKGl0LCBrZXksIGludGVybmFsKSB7XG4gICAgZFAoaXQsIGtleSwgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMuX2RbaW50ZXJuYWxdOyB9IH0pO1xuICB9O1xuXG4gIHZhciAkZnJvbSA9IGZ1bmN0aW9uIGZyb20oc291cmNlIC8qICwgbWFwZm4sIHRoaXNBcmcgKi8pIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHNvdXJjZSk7XG4gICAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBtYXBmbiA9IGFMZW4gPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkO1xuICAgIHZhciBtYXBwaW5nID0gbWFwZm4gIT09IHVuZGVmaW5lZDtcbiAgICB2YXIgaXRlckZuID0gZ2V0SXRlckZuKE8pO1xuICAgIHZhciBpLCBsZW5ndGgsIHZhbHVlcywgcmVzdWx0LCBzdGVwLCBpdGVyYXRvcjtcbiAgICBpZiAoaXRlckZuICE9IHVuZGVmaW5lZCAmJiAhaXNBcnJheUl0ZXIoaXRlckZuKSkge1xuICAgICAgZm9yIChpdGVyYXRvciA9IGl0ZXJGbi5jYWxsKE8pLCB2YWx1ZXMgPSBbXSwgaSA9IDA7ICEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZTsgaSsrKSB7XG4gICAgICAgIHZhbHVlcy5wdXNoKHN0ZXAudmFsdWUpO1xuICAgICAgfSBPID0gdmFsdWVzO1xuICAgIH1cbiAgICBpZiAobWFwcGluZyAmJiBhTGVuID4gMikgbWFwZm4gPSBjdHgobWFwZm4sIGFyZ3VtZW50c1syXSwgMik7XG4gICAgZm9yIChpID0gMCwgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpLCByZXN1bHQgPSBhbGxvY2F0ZSh0aGlzLCBsZW5ndGgpOyBsZW5ndGggPiBpOyBpKyspIHtcbiAgICAgIHJlc3VsdFtpXSA9IG1hcHBpbmcgPyBtYXBmbihPW2ldLCBpKSA6IE9baV07XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgdmFyICRvZiA9IGZ1bmN0aW9uIG9mKC8qIC4uLml0ZW1zICovKSB7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgcmVzdWx0ID0gYWxsb2NhdGUodGhpcywgbGVuZ3RoKTtcbiAgICB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIHJlc3VsdFtpbmRleF0gPSBhcmd1bWVudHNbaW5kZXgrK107XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvLyBpT1MgU2FmYXJpIDYueCBmYWlscyBoZXJlXG4gIHZhciBUT19MT0NBTEVfQlVHID0gISFVaW50OEFycmF5ICYmIGZhaWxzKGZ1bmN0aW9uICgpIHsgYXJyYXlUb0xvY2FsZVN0cmluZy5jYWxsKG5ldyBVaW50OEFycmF5KDEpKTsgfSk7XG5cbiAgdmFyICR0b0xvY2FsZVN0cmluZyA9IGZ1bmN0aW9uIHRvTG9jYWxlU3RyaW5nKCkge1xuICAgIHJldHVybiBhcnJheVRvTG9jYWxlU3RyaW5nLmFwcGx5KFRPX0xPQ0FMRV9CVUcgPyBhcnJheVNsaWNlLmNhbGwodmFsaWRhdGUodGhpcykpIDogdmFsaWRhdGUodGhpcyksIGFyZ3VtZW50cyk7XG4gIH07XG5cbiAgdmFyIHByb3RvID0ge1xuICAgIGNvcHlXaXRoaW46IGZ1bmN0aW9uIGNvcHlXaXRoaW4odGFyZ2V0LCBzdGFydCAvKiAsIGVuZCAqLykge1xuICAgICAgcmV0dXJuIGFycmF5Q29weVdpdGhpbi5jYWxsKHZhbGlkYXRlKHRoaXMpLCB0YXJnZXQsIHN0YXJ0LCBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBldmVyeTogZnVuY3Rpb24gZXZlcnkoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICAgIHJldHVybiBhcnJheUV2ZXJ5KHZhbGlkYXRlKHRoaXMpLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBmaWxsOiBmdW5jdGlvbiBmaWxsKHZhbHVlIC8qICwgc3RhcnQsIGVuZCAqLykgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgICByZXR1cm4gYXJyYXlGaWxsLmFwcGx5KHZhbGlkYXRlKHRoaXMpLCBhcmd1bWVudHMpO1xuICAgIH0sXG4gICAgZmlsdGVyOiBmdW5jdGlvbiBmaWx0ZXIoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICAgIHJldHVybiBzcGVjaWVzRnJvbUxpc3QodGhpcywgYXJyYXlGaWx0ZXIodmFsaWRhdGUodGhpcyksIGNhbGxiYWNrZm4sXG4gICAgICAgIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKSk7XG4gICAgfSxcbiAgICBmaW5kOiBmdW5jdGlvbiBmaW5kKHByZWRpY2F0ZSAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICAgIHJldHVybiBhcnJheUZpbmQodmFsaWRhdGUodGhpcyksIHByZWRpY2F0ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgZmluZEluZGV4OiBmdW5jdGlvbiBmaW5kSW5kZXgocHJlZGljYXRlIC8qICwgdGhpc0FyZyAqLykge1xuICAgICAgcmV0dXJuIGFycmF5RmluZEluZGV4KHZhbGlkYXRlKHRoaXMpLCBwcmVkaWNhdGUsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgIGZvckVhY2g6IGZ1bmN0aW9uIGZvckVhY2goY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICAgIGFycmF5Rm9yRWFjaCh2YWxpZGF0ZSh0aGlzKSwgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgaW5kZXhPZjogZnVuY3Rpb24gaW5kZXhPZihzZWFyY2hFbGVtZW50IC8qICwgZnJvbUluZGV4ICovKSB7XG4gICAgICByZXR1cm4gYXJyYXlJbmRleE9mKHZhbGlkYXRlKHRoaXMpLCBzZWFyY2hFbGVtZW50LCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBpbmNsdWRlczogZnVuY3Rpb24gaW5jbHVkZXMoc2VhcmNoRWxlbWVudCAvKiAsIGZyb21JbmRleCAqLykge1xuICAgICAgcmV0dXJuIGFycmF5SW5jbHVkZXModmFsaWRhdGUodGhpcyksIHNlYXJjaEVsZW1lbnQsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgIGpvaW46IGZ1bmN0aW9uIGpvaW4oc2VwYXJhdG9yKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICAgIHJldHVybiBhcnJheUpvaW4uYXBwbHkodmFsaWRhdGUodGhpcyksIGFyZ3VtZW50cyk7XG4gICAgfSxcbiAgICBsYXN0SW5kZXhPZjogZnVuY3Rpb24gbGFzdEluZGV4T2Yoc2VhcmNoRWxlbWVudCAvKiAsIGZyb21JbmRleCAqLykgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgICByZXR1cm4gYXJyYXlMYXN0SW5kZXhPZi5hcHBseSh2YWxpZGF0ZSh0aGlzKSwgYXJndW1lbnRzKTtcbiAgICB9LFxuICAgIG1hcDogZnVuY3Rpb24gbWFwKG1hcGZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgICAgcmV0dXJuICRtYXAodmFsaWRhdGUodGhpcyksIG1hcGZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICByZWR1Y2U6IGZ1bmN0aW9uIHJlZHVjZShjYWxsYmFja2ZuIC8qICwgaW5pdGlhbFZhbHVlICovKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICAgIHJldHVybiBhcnJheVJlZHVjZS5hcHBseSh2YWxpZGF0ZSh0aGlzKSwgYXJndW1lbnRzKTtcbiAgICB9LFxuICAgIHJlZHVjZVJpZ2h0OiBmdW5jdGlvbiByZWR1Y2VSaWdodChjYWxsYmFja2ZuIC8qICwgaW5pdGlhbFZhbHVlICovKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICAgIHJldHVybiBhcnJheVJlZHVjZVJpZ2h0LmFwcGx5KHZhbGlkYXRlKHRoaXMpLCBhcmd1bWVudHMpO1xuICAgIH0sXG4gICAgcmV2ZXJzZTogZnVuY3Rpb24gcmV2ZXJzZSgpIHtcbiAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgIHZhciBsZW5ndGggPSB2YWxpZGF0ZSh0aGF0KS5sZW5ndGg7XG4gICAgICB2YXIgbWlkZGxlID0gTWF0aC5mbG9vcihsZW5ndGggLyAyKTtcbiAgICAgIHZhciBpbmRleCA9IDA7XG4gICAgICB2YXIgdmFsdWU7XG4gICAgICB3aGlsZSAoaW5kZXggPCBtaWRkbGUpIHtcbiAgICAgICAgdmFsdWUgPSB0aGF0W2luZGV4XTtcbiAgICAgICAgdGhhdFtpbmRleCsrXSA9IHRoYXRbLS1sZW5ndGhdO1xuICAgICAgICB0aGF0W2xlbmd0aF0gPSB2YWx1ZTtcbiAgICAgIH0gcmV0dXJuIHRoYXQ7XG4gICAgfSxcbiAgICBzb21lOiBmdW5jdGlvbiBzb21lKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgICByZXR1cm4gYXJyYXlTb21lKHZhbGlkYXRlKHRoaXMpLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBzb3J0OiBmdW5jdGlvbiBzb3J0KGNvbXBhcmVmbikge1xuICAgICAgcmV0dXJuIGFycmF5U29ydC5jYWxsKHZhbGlkYXRlKHRoaXMpLCBjb21wYXJlZm4pO1xuICAgIH0sXG4gICAgc3ViYXJyYXk6IGZ1bmN0aW9uIHN1YmFycmF5KGJlZ2luLCBlbmQpIHtcbiAgICAgIHZhciBPID0gdmFsaWRhdGUodGhpcyk7XG4gICAgICB2YXIgbGVuZ3RoID0gTy5sZW5ndGg7XG4gICAgICB2YXIgJGJlZ2luID0gdG9BYnNvbHV0ZUluZGV4KGJlZ2luLCBsZW5ndGgpO1xuICAgICAgcmV0dXJuIG5ldyAoc3BlY2llc0NvbnN0cnVjdG9yKE8sIE9bREVGX0NPTlNUUlVDVE9SXSkpKFxuICAgICAgICBPLmJ1ZmZlcixcbiAgICAgICAgTy5ieXRlT2Zmc2V0ICsgJGJlZ2luICogTy5CWVRFU19QRVJfRUxFTUVOVCxcbiAgICAgICAgdG9MZW5ndGgoKGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuZ3RoIDogdG9BYnNvbHV0ZUluZGV4KGVuZCwgbGVuZ3RoKSkgLSAkYmVnaW4pXG4gICAgICApO1xuICAgIH1cbiAgfTtcblxuICB2YXIgJHNsaWNlID0gZnVuY3Rpb24gc2xpY2Uoc3RhcnQsIGVuZCkge1xuICAgIHJldHVybiBzcGVjaWVzRnJvbUxpc3QodGhpcywgYXJyYXlTbGljZS5jYWxsKHZhbGlkYXRlKHRoaXMpLCBzdGFydCwgZW5kKSk7XG4gIH07XG5cbiAgdmFyICRzZXQgPSBmdW5jdGlvbiBzZXQoYXJyYXlMaWtlIC8qICwgb2Zmc2V0ICovKSB7XG4gICAgdmFsaWRhdGUodGhpcyk7XG4gICAgdmFyIG9mZnNldCA9IHRvT2Zmc2V0KGFyZ3VtZW50c1sxXSwgMSk7XG4gICAgdmFyIGxlbmd0aCA9IHRoaXMubGVuZ3RoO1xuICAgIHZhciBzcmMgPSB0b09iamVjdChhcnJheUxpa2UpO1xuICAgIHZhciBsZW4gPSB0b0xlbmd0aChzcmMubGVuZ3RoKTtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIGlmIChsZW4gKyBvZmZzZXQgPiBsZW5ndGgpIHRocm93IFJhbmdlRXJyb3IoV1JPTkdfTEVOR1RIKTtcbiAgICB3aGlsZSAoaW5kZXggPCBsZW4pIHRoaXNbb2Zmc2V0ICsgaW5kZXhdID0gc3JjW2luZGV4KytdO1xuICB9O1xuXG4gIHZhciAkaXRlcmF0b3JzID0ge1xuICAgIGVudHJpZXM6IGZ1bmN0aW9uIGVudHJpZXMoKSB7XG4gICAgICByZXR1cm4gYXJyYXlFbnRyaWVzLmNhbGwodmFsaWRhdGUodGhpcykpO1xuICAgIH0sXG4gICAga2V5czogZnVuY3Rpb24ga2V5cygpIHtcbiAgICAgIHJldHVybiBhcnJheUtleXMuY2FsbCh2YWxpZGF0ZSh0aGlzKSk7XG4gICAgfSxcbiAgICB2YWx1ZXM6IGZ1bmN0aW9uIHZhbHVlcygpIHtcbiAgICAgIHJldHVybiBhcnJheVZhbHVlcy5jYWxsKHZhbGlkYXRlKHRoaXMpKTtcbiAgICB9XG4gIH07XG5cbiAgdmFyIGlzVEFJbmRleCA9IGZ1bmN0aW9uICh0YXJnZXQsIGtleSkge1xuICAgIHJldHVybiBpc09iamVjdCh0YXJnZXQpXG4gICAgICAmJiB0YXJnZXRbVFlQRURfQVJSQVldXG4gICAgICAmJiB0eXBlb2Yga2V5ICE9ICdzeW1ib2wnXG4gICAgICAmJiBrZXkgaW4gdGFyZ2V0XG4gICAgICAmJiBTdHJpbmcoK2tleSkgPT0gU3RyaW5nKGtleSk7XG4gIH07XG4gIHZhciAkZ2V0RGVzYyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkge1xuICAgIHJldHVybiBpc1RBSW5kZXgodGFyZ2V0LCBrZXkgPSB0b1ByaW1pdGl2ZShrZXksIHRydWUpKVxuICAgICAgPyBwcm9wZXJ0eURlc2MoMiwgdGFyZ2V0W2tleV0pXG4gICAgICA6IGdPUEQodGFyZ2V0LCBrZXkpO1xuICB9O1xuICB2YXIgJHNldERlc2MgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgZGVzYykge1xuICAgIGlmIChpc1RBSW5kZXgodGFyZ2V0LCBrZXkgPSB0b1ByaW1pdGl2ZShrZXksIHRydWUpKVxuICAgICAgJiYgaXNPYmplY3QoZGVzYylcbiAgICAgICYmIGhhcyhkZXNjLCAndmFsdWUnKVxuICAgICAgJiYgIWhhcyhkZXNjLCAnZ2V0JylcbiAgICAgICYmICFoYXMoZGVzYywgJ3NldCcpXG4gICAgICAvLyBUT0RPOiBhZGQgdmFsaWRhdGlvbiBkZXNjcmlwdG9yIHcvbyBjYWxsaW5nIGFjY2Vzc29yc1xuICAgICAgJiYgIWRlc2MuY29uZmlndXJhYmxlXG4gICAgICAmJiAoIWhhcyhkZXNjLCAnd3JpdGFibGUnKSB8fCBkZXNjLndyaXRhYmxlKVxuICAgICAgJiYgKCFoYXMoZGVzYywgJ2VudW1lcmFibGUnKSB8fCBkZXNjLmVudW1lcmFibGUpXG4gICAgKSB7XG4gICAgICB0YXJnZXRba2V5XSA9IGRlc2MudmFsdWU7XG4gICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH0gcmV0dXJuIGRQKHRhcmdldCwga2V5LCBkZXNjKTtcbiAgfTtcblxuICBpZiAoIUFMTF9DT05TVFJVQ1RPUlMpIHtcbiAgICAkR09QRC5mID0gJGdldERlc2M7XG4gICAgJERQLmYgPSAkc2V0RGVzYztcbiAgfVxuXG4gICRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIUFMTF9DT05TVFJVQ1RPUlMsICdPYmplY3QnLCB7XG4gICAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiAkZ2V0RGVzYyxcbiAgICBkZWZpbmVQcm9wZXJ0eTogJHNldERlc2NcbiAgfSk7XG5cbiAgaWYgKGZhaWxzKGZ1bmN0aW9uICgpIHsgYXJyYXlUb1N0cmluZy5jYWxsKHt9KTsgfSkpIHtcbiAgICBhcnJheVRvU3RyaW5nID0gYXJyYXlUb0xvY2FsZVN0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgICAgcmV0dXJuIGFycmF5Sm9pbi5jYWxsKHRoaXMpO1xuICAgIH07XG4gIH1cblxuICB2YXIgJFR5cGVkQXJyYXlQcm90b3R5cGUkID0gcmVkZWZpbmVBbGwoe30sIHByb3RvKTtcbiAgcmVkZWZpbmVBbGwoJFR5cGVkQXJyYXlQcm90b3R5cGUkLCAkaXRlcmF0b3JzKTtcbiAgaGlkZSgkVHlwZWRBcnJheVByb3RvdHlwZSQsIElURVJBVE9SLCAkaXRlcmF0b3JzLnZhbHVlcyk7XG4gIHJlZGVmaW5lQWxsKCRUeXBlZEFycmF5UHJvdG90eXBlJCwge1xuICAgIHNsaWNlOiAkc2xpY2UsXG4gICAgc2V0OiAkc2V0LFxuICAgIGNvbnN0cnVjdG9yOiBmdW5jdGlvbiAoKSB7IC8qIG5vb3AgKi8gfSxcbiAgICB0b1N0cmluZzogYXJyYXlUb1N0cmluZyxcbiAgICB0b0xvY2FsZVN0cmluZzogJHRvTG9jYWxlU3RyaW5nXG4gIH0pO1xuICBhZGRHZXR0ZXIoJFR5cGVkQXJyYXlQcm90b3R5cGUkLCAnYnVmZmVyJywgJ2InKTtcbiAgYWRkR2V0dGVyKCRUeXBlZEFycmF5UHJvdG90eXBlJCwgJ2J5dGVPZmZzZXQnLCAnbycpO1xuICBhZGRHZXR0ZXIoJFR5cGVkQXJyYXlQcm90b3R5cGUkLCAnYnl0ZUxlbmd0aCcsICdsJyk7XG4gIGFkZEdldHRlcigkVHlwZWRBcnJheVByb3RvdHlwZSQsICdsZW5ndGgnLCAnZScpO1xuICBkUCgkVHlwZWRBcnJheVByb3RvdHlwZSQsIFRBRywge1xuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpc1tUWVBFRF9BUlJBWV07IH1cbiAgfSk7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1zdGF0ZW1lbnRzXG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEtFWSwgQllURVMsIHdyYXBwZXIsIENMQU1QRUQpIHtcbiAgICBDTEFNUEVEID0gISFDTEFNUEVEO1xuICAgIHZhciBOQU1FID0gS0VZICsgKENMQU1QRUQgPyAnQ2xhbXBlZCcgOiAnJykgKyAnQXJyYXknO1xuICAgIHZhciBHRVRURVIgPSAnZ2V0JyArIEtFWTtcbiAgICB2YXIgU0VUVEVSID0gJ3NldCcgKyBLRVk7XG4gICAgdmFyIFR5cGVkQXJyYXkgPSBnbG9iYWxbTkFNRV07XG4gICAgdmFyIEJhc2UgPSBUeXBlZEFycmF5IHx8IHt9O1xuICAgIHZhciBUQUMgPSBUeXBlZEFycmF5ICYmIGdldFByb3RvdHlwZU9mKFR5cGVkQXJyYXkpO1xuICAgIHZhciBGT1JDRUQgPSAhVHlwZWRBcnJheSB8fCAhJHR5cGVkLkFCVjtcbiAgICB2YXIgTyA9IHt9O1xuICAgIHZhciBUeXBlZEFycmF5UHJvdG90eXBlID0gVHlwZWRBcnJheSAmJiBUeXBlZEFycmF5W1BST1RPVFlQRV07XG4gICAgdmFyIGdldHRlciA9IGZ1bmN0aW9uICh0aGF0LCBpbmRleCkge1xuICAgICAgdmFyIGRhdGEgPSB0aGF0Ll9kO1xuICAgICAgcmV0dXJuIGRhdGEudltHRVRURVJdKGluZGV4ICogQllURVMgKyBkYXRhLm8sIExJVFRMRV9FTkRJQU4pO1xuICAgIH07XG4gICAgdmFyIHNldHRlciA9IGZ1bmN0aW9uICh0aGF0LCBpbmRleCwgdmFsdWUpIHtcbiAgICAgIHZhciBkYXRhID0gdGhhdC5fZDtcbiAgICAgIGlmIChDTEFNUEVEKSB2YWx1ZSA9ICh2YWx1ZSA9IE1hdGgucm91bmQodmFsdWUpKSA8IDAgPyAwIDogdmFsdWUgPiAweGZmID8gMHhmZiA6IHZhbHVlICYgMHhmZjtcbiAgICAgIGRhdGEudltTRVRURVJdKGluZGV4ICogQllURVMgKyBkYXRhLm8sIHZhbHVlLCBMSVRUTEVfRU5ESUFOKTtcbiAgICB9O1xuICAgIHZhciBhZGRFbGVtZW50ID0gZnVuY3Rpb24gKHRoYXQsIGluZGV4KSB7XG4gICAgICBkUCh0aGF0LCBpbmRleCwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gZ2V0dGVyKHRoaXMsIGluZGV4KTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICByZXR1cm4gc2V0dGVyKHRoaXMsIGluZGV4LCB2YWx1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IHRydWVcbiAgICAgIH0pO1xuICAgIH07XG4gICAgaWYgKEZPUkNFRCkge1xuICAgICAgVHlwZWRBcnJheSA9IHdyYXBwZXIoZnVuY3Rpb24gKHRoYXQsIGRhdGEsICRvZmZzZXQsICRsZW5ndGgpIHtcbiAgICAgICAgYW5JbnN0YW5jZSh0aGF0LCBUeXBlZEFycmF5LCBOQU1FLCAnX2QnKTtcbiAgICAgICAgdmFyIGluZGV4ID0gMDtcbiAgICAgICAgdmFyIG9mZnNldCA9IDA7XG4gICAgICAgIHZhciBidWZmZXIsIGJ5dGVMZW5ndGgsIGxlbmd0aCwga2xhc3M7XG4gICAgICAgIGlmICghaXNPYmplY3QoZGF0YSkpIHtcbiAgICAgICAgICBsZW5ndGggPSB0b0luZGV4KGRhdGEpO1xuICAgICAgICAgIGJ5dGVMZW5ndGggPSBsZW5ndGggKiBCWVRFUztcbiAgICAgICAgICBidWZmZXIgPSBuZXcgJEFycmF5QnVmZmVyKGJ5dGVMZW5ndGgpO1xuICAgICAgICB9IGVsc2UgaWYgKGRhdGEgaW5zdGFuY2VvZiAkQXJyYXlCdWZmZXIgfHwgKGtsYXNzID0gY2xhc3NvZihkYXRhKSkgPT0gQVJSQVlfQlVGRkVSIHx8IGtsYXNzID09IFNIQVJFRF9CVUZGRVIpIHtcbiAgICAgICAgICBidWZmZXIgPSBkYXRhO1xuICAgICAgICAgIG9mZnNldCA9IHRvT2Zmc2V0KCRvZmZzZXQsIEJZVEVTKTtcbiAgICAgICAgICB2YXIgJGxlbiA9IGRhdGEuYnl0ZUxlbmd0aDtcbiAgICAgICAgICBpZiAoJGxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBpZiAoJGxlbiAlIEJZVEVTKSB0aHJvdyBSYW5nZUVycm9yKFdST05HX0xFTkdUSCk7XG4gICAgICAgICAgICBieXRlTGVuZ3RoID0gJGxlbiAtIG9mZnNldDtcbiAgICAgICAgICAgIGlmIChieXRlTGVuZ3RoIDwgMCkgdGhyb3cgUmFuZ2VFcnJvcihXUk9OR19MRU5HVEgpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBieXRlTGVuZ3RoID0gdG9MZW5ndGgoJGxlbmd0aCkgKiBCWVRFUztcbiAgICAgICAgICAgIGlmIChieXRlTGVuZ3RoICsgb2Zmc2V0ID4gJGxlbikgdGhyb3cgUmFuZ2VFcnJvcihXUk9OR19MRU5HVEgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBsZW5ndGggPSBieXRlTGVuZ3RoIC8gQllURVM7XG4gICAgICAgIH0gZWxzZSBpZiAoVFlQRURfQVJSQVkgaW4gZGF0YSkge1xuICAgICAgICAgIHJldHVybiBmcm9tTGlzdChUeXBlZEFycmF5LCBkYXRhKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gJGZyb20uY2FsbChUeXBlZEFycmF5LCBkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBoaWRlKHRoYXQsICdfZCcsIHtcbiAgICAgICAgICBiOiBidWZmZXIsXG4gICAgICAgICAgbzogb2Zmc2V0LFxuICAgICAgICAgIGw6IGJ5dGVMZW5ndGgsXG4gICAgICAgICAgZTogbGVuZ3RoLFxuICAgICAgICAgIHY6IG5ldyAkRGF0YVZpZXcoYnVmZmVyKVxuICAgICAgICB9KTtcbiAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSBhZGRFbGVtZW50KHRoYXQsIGluZGV4KyspO1xuICAgICAgfSk7XG4gICAgICBUeXBlZEFycmF5UHJvdG90eXBlID0gVHlwZWRBcnJheVtQUk9UT1RZUEVdID0gY3JlYXRlKCRUeXBlZEFycmF5UHJvdG90eXBlJCk7XG4gICAgICBoaWRlKFR5cGVkQXJyYXlQcm90b3R5cGUsICdjb25zdHJ1Y3RvcicsIFR5cGVkQXJyYXkpO1xuICAgIH0gZWxzZSBpZiAoIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAgIFR5cGVkQXJyYXkoMSk7XG4gICAgfSkgfHwgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAgIG5ldyBUeXBlZEFycmF5KC0xKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICB9KSB8fCAhJGl0ZXJEZXRlY3QoZnVuY3Rpb24gKGl0ZXIpIHtcbiAgICAgIG5ldyBUeXBlZEFycmF5KCk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgICBuZXcgVHlwZWRBcnJheShudWxsKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICAgIG5ldyBUeXBlZEFycmF5KDEuNSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgICBuZXcgVHlwZWRBcnJheShpdGVyKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICB9LCB0cnVlKSkge1xuICAgICAgVHlwZWRBcnJheSA9IHdyYXBwZXIoZnVuY3Rpb24gKHRoYXQsIGRhdGEsICRvZmZzZXQsICRsZW5ndGgpIHtcbiAgICAgICAgYW5JbnN0YW5jZSh0aGF0LCBUeXBlZEFycmF5LCBOQU1FKTtcbiAgICAgICAgdmFyIGtsYXNzO1xuICAgICAgICAvLyBgd3NgIG1vZHVsZSBidWcsIHRlbXBvcmFyaWx5IHJlbW92ZSB2YWxpZGF0aW9uIGxlbmd0aCBmb3IgVWludDhBcnJheVxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vd2Vic29ja2V0cy93cy9wdWxsLzY0NVxuICAgICAgICBpZiAoIWlzT2JqZWN0KGRhdGEpKSByZXR1cm4gbmV3IEJhc2UodG9JbmRleChkYXRhKSk7XG4gICAgICAgIGlmIChkYXRhIGluc3RhbmNlb2YgJEFycmF5QnVmZmVyIHx8IChrbGFzcyA9IGNsYXNzb2YoZGF0YSkpID09IEFSUkFZX0JVRkZFUiB8fCBrbGFzcyA9PSBTSEFSRURfQlVGRkVSKSB7XG4gICAgICAgICAgcmV0dXJuICRsZW5ndGggIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyBuZXcgQmFzZShkYXRhLCB0b09mZnNldCgkb2Zmc2V0LCBCWVRFUyksICRsZW5ndGgpXG4gICAgICAgICAgICA6ICRvZmZzZXQgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICA/IG5ldyBCYXNlKGRhdGEsIHRvT2Zmc2V0KCRvZmZzZXQsIEJZVEVTKSlcbiAgICAgICAgICAgICAgOiBuZXcgQmFzZShkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoVFlQRURfQVJSQVkgaW4gZGF0YSkgcmV0dXJuIGZyb21MaXN0KFR5cGVkQXJyYXksIGRhdGEpO1xuICAgICAgICByZXR1cm4gJGZyb20uY2FsbChUeXBlZEFycmF5LCBkYXRhKTtcbiAgICAgIH0pO1xuICAgICAgYXJyYXlGb3JFYWNoKFRBQyAhPT0gRnVuY3Rpb24ucHJvdG90eXBlID8gZ09QTihCYXNlKS5jb25jYXQoZ09QTihUQUMpKSA6IGdPUE4oQmFzZSksIGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgaWYgKCEoa2V5IGluIFR5cGVkQXJyYXkpKSBoaWRlKFR5cGVkQXJyYXksIGtleSwgQmFzZVtrZXldKTtcbiAgICAgIH0pO1xuICAgICAgVHlwZWRBcnJheVtQUk9UT1RZUEVdID0gVHlwZWRBcnJheVByb3RvdHlwZTtcbiAgICAgIGlmICghTElCUkFSWSkgVHlwZWRBcnJheVByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFR5cGVkQXJyYXk7XG4gICAgfVxuICAgIHZhciAkbmF0aXZlSXRlcmF0b3IgPSBUeXBlZEFycmF5UHJvdG90eXBlW0lURVJBVE9SXTtcbiAgICB2YXIgQ09SUkVDVF9JVEVSX05BTUUgPSAhISRuYXRpdmVJdGVyYXRvclxuICAgICAgJiYgKCRuYXRpdmVJdGVyYXRvci5uYW1lID09ICd2YWx1ZXMnIHx8ICRuYXRpdmVJdGVyYXRvci5uYW1lID09IHVuZGVmaW5lZCk7XG4gICAgdmFyICRpdGVyYXRvciA9ICRpdGVyYXRvcnMudmFsdWVzO1xuICAgIGhpZGUoVHlwZWRBcnJheSwgVFlQRURfQ09OU1RSVUNUT1IsIHRydWUpO1xuICAgIGhpZGUoVHlwZWRBcnJheVByb3RvdHlwZSwgVFlQRURfQVJSQVksIE5BTUUpO1xuICAgIGhpZGUoVHlwZWRBcnJheVByb3RvdHlwZSwgVklFVywgdHJ1ZSk7XG4gICAgaGlkZShUeXBlZEFycmF5UHJvdG90eXBlLCBERUZfQ09OU1RSVUNUT1IsIFR5cGVkQXJyYXkpO1xuXG4gICAgaWYgKENMQU1QRUQgPyBuZXcgVHlwZWRBcnJheSgxKVtUQUddICE9IE5BTUUgOiAhKFRBRyBpbiBUeXBlZEFycmF5UHJvdG90eXBlKSkge1xuICAgICAgZFAoVHlwZWRBcnJheVByb3RvdHlwZSwgVEFHLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gTkFNRTsgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgT1tOQU1FXSA9IFR5cGVkQXJyYXk7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuVyArICRleHBvcnQuRiAqIChUeXBlZEFycmF5ICE9IEJhc2UpLCBPKTtcblxuICAgICRleHBvcnQoJGV4cG9ydC5TLCBOQU1FLCB7XG4gICAgICBCWVRFU19QRVJfRUxFTUVOVDogQllURVNcbiAgICB9KTtcblxuICAgICRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogZmFpbHMoZnVuY3Rpb24gKCkgeyBCYXNlLm9mLmNhbGwoVHlwZWRBcnJheSwgMSk7IH0pLCBOQU1FLCB7XG4gICAgICBmcm9tOiAkZnJvbSxcbiAgICAgIG9mOiAkb2ZcbiAgICB9KTtcblxuICAgIGlmICghKEJZVEVTX1BFUl9FTEVNRU5UIGluIFR5cGVkQXJyYXlQcm90b3R5cGUpKSBoaWRlKFR5cGVkQXJyYXlQcm90b3R5cGUsIEJZVEVTX1BFUl9FTEVNRU5ULCBCWVRFUyk7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuUCwgTkFNRSwgcHJvdG8pO1xuXG4gICAgc2V0U3BlY2llcyhOQU1FKTtcblxuICAgICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogRk9SQ0VEX1NFVCwgTkFNRSwgeyBzZXQ6ICRzZXQgfSk7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFDT1JSRUNUX0lURVJfTkFNRSwgTkFNRSwgJGl0ZXJhdG9ycyk7XG5cbiAgICBpZiAoIUxJQlJBUlkgJiYgVHlwZWRBcnJheVByb3RvdHlwZS50b1N0cmluZyAhPSBhcnJheVRvU3RyaW5nKSBUeXBlZEFycmF5UHJvdG90eXBlLnRvU3RyaW5nID0gYXJyYXlUb1N0cmluZztcblxuICAgICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgICAgbmV3IFR5cGVkQXJyYXkoMSkuc2xpY2UoKTtcbiAgICB9KSwgTkFNRSwgeyBzbGljZTogJHNsaWNlIH0pO1xuXG4gICAgJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIFsxLCAyXS50b0xvY2FsZVN0cmluZygpICE9IG5ldyBUeXBlZEFycmF5KFsxLCAyXSkudG9Mb2NhbGVTdHJpbmcoKTtcbiAgICB9KSB8fCAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgICAgVHlwZWRBcnJheVByb3RvdHlwZS50b0xvY2FsZVN0cmluZy5jYWxsKFsxLCAyXSk7XG4gICAgfSkpLCBOQU1FLCB7IHRvTG9jYWxlU3RyaW5nOiAkdG9Mb2NhbGVTdHJpbmcgfSk7XG5cbiAgICBJdGVyYXRvcnNbTkFNRV0gPSBDT1JSRUNUX0lURVJfTkFNRSA/ICRuYXRpdmVJdGVyYXRvciA6ICRpdGVyYXRvcjtcbiAgICBpZiAoIUxJQlJBUlkgJiYgIUNPUlJFQ1RfSVRFUl9OQU1FKSBoaWRlKFR5cGVkQXJyYXlQcm90b3R5cGUsIElURVJBVE9SLCAkaXRlcmF0b3IpO1xuICB9O1xufSBlbHNlIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///27\n")},function(module,exports,__webpack_require__){eval("var Map = __webpack_require__(117);\nvar $export = __webpack_require__(0);\nvar shared = __webpack_require__(47)('metadata');\nvar store = shared.store || (shared.store = new (__webpack_require__(120))());\n\nvar getOrCreateMetadataMap = function (target, targetKey, create) {\n var targetMetadata = store.get(target);\n if (!targetMetadata) {\n if (!create) return undefined;\n store.set(target, targetMetadata = new Map());\n }\n var keyMetadata = targetMetadata.get(targetKey);\n if (!keyMetadata) {\n if (!create) return undefined;\n targetMetadata.set(targetKey, keyMetadata = new Map());\n } return keyMetadata;\n};\nvar ordinaryHasOwnMetadata = function (MetadataKey, O, P) {\n var metadataMap = getOrCreateMetadataMap(O, P, false);\n return metadataMap === undefined ? false : metadataMap.has(MetadataKey);\n};\nvar ordinaryGetOwnMetadata = function (MetadataKey, O, P) {\n var metadataMap = getOrCreateMetadataMap(O, P, false);\n return metadataMap === undefined ? undefined : metadataMap.get(MetadataKey);\n};\nvar ordinaryDefineOwnMetadata = function (MetadataKey, MetadataValue, O, P) {\n getOrCreateMetadataMap(O, P, true).set(MetadataKey, MetadataValue);\n};\nvar ordinaryOwnMetadataKeys = function (target, targetKey) {\n var metadataMap = getOrCreateMetadataMap(target, targetKey, false);\n var keys = [];\n if (metadataMap) metadataMap.forEach(function (_, key) { keys.push(key); });\n return keys;\n};\nvar toMetaKey = function (it) {\n return it === undefined || typeof it == 'symbol' ? it : String(it);\n};\nvar exp = function (O) {\n $export($export.S, 'Reflect', O);\n};\n\nmodule.exports = {\n store: store,\n map: getOrCreateMetadataMap,\n has: ordinaryHasOwnMetadata,\n get: ordinaryGetOwnMetadata,\n set: ordinaryDefineOwnMetadata,\n keys: ordinaryOwnMetadataKeys,\n key: toMetaKey,\n exp: exp\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWV0YWRhdGEuanM/MzdhNyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxVQUFVLG1CQUFPLENBQUMsR0FBVztBQUM3QixjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxhQUFhLG1CQUFPLENBQUMsRUFBVztBQUNoQyxpREFBaUQsbUJBQU8sQ0FBQyxHQUFnQjs7QUFFekU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMERBQTBELGdCQUFnQixFQUFFO0FBQzVFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMjguanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgTWFwID0gcmVxdWlyZSgnLi9lczYubWFwJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4vX3NoYXJlZCcpKCdtZXRhZGF0YScpO1xudmFyIHN0b3JlID0gc2hhcmVkLnN0b3JlIHx8IChzaGFyZWQuc3RvcmUgPSBuZXcgKHJlcXVpcmUoJy4vZXM2LndlYWstbWFwJykpKCkpO1xuXG52YXIgZ2V0T3JDcmVhdGVNZXRhZGF0YU1hcCA9IGZ1bmN0aW9uICh0YXJnZXQsIHRhcmdldEtleSwgY3JlYXRlKSB7XG4gIHZhciB0YXJnZXRNZXRhZGF0YSA9IHN0b3JlLmdldCh0YXJnZXQpO1xuICBpZiAoIXRhcmdldE1ldGFkYXRhKSB7XG4gICAgaWYgKCFjcmVhdGUpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgc3RvcmUuc2V0KHRhcmdldCwgdGFyZ2V0TWV0YWRhdGEgPSBuZXcgTWFwKCkpO1xuICB9XG4gIHZhciBrZXlNZXRhZGF0YSA9IHRhcmdldE1ldGFkYXRhLmdldCh0YXJnZXRLZXkpO1xuICBpZiAoIWtleU1ldGFkYXRhKSB7XG4gICAgaWYgKCFjcmVhdGUpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgdGFyZ2V0TWV0YWRhdGEuc2V0KHRhcmdldEtleSwga2V5TWV0YWRhdGEgPSBuZXcgTWFwKCkpO1xuICB9IHJldHVybiBrZXlNZXRhZGF0YTtcbn07XG52YXIgb3JkaW5hcnlIYXNPd25NZXRhZGF0YSA9IGZ1bmN0aW9uIChNZXRhZGF0YUtleSwgTywgUCkge1xuICB2YXIgbWV0YWRhdGFNYXAgPSBnZXRPckNyZWF0ZU1ldGFkYXRhTWFwKE8sIFAsIGZhbHNlKTtcbiAgcmV0dXJuIG1ldGFkYXRhTWFwID09PSB1bmRlZmluZWQgPyBmYWxzZSA6IG1ldGFkYXRhTWFwLmhhcyhNZXRhZGF0YUtleSk7XG59O1xudmFyIG9yZGluYXJ5R2V0T3duTWV0YWRhdGEgPSBmdW5jdGlvbiAoTWV0YWRhdGFLZXksIE8sIFApIHtcbiAgdmFyIG1ldGFkYXRhTWFwID0gZ2V0T3JDcmVhdGVNZXRhZGF0YU1hcChPLCBQLCBmYWxzZSk7XG4gIHJldHVybiBtZXRhZGF0YU1hcCA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogbWV0YWRhdGFNYXAuZ2V0KE1ldGFkYXRhS2V5KTtcbn07XG52YXIgb3JkaW5hcnlEZWZpbmVPd25NZXRhZGF0YSA9IGZ1bmN0aW9uIChNZXRhZGF0YUtleSwgTWV0YWRhdGFWYWx1ZSwgTywgUCkge1xuICBnZXRPckNyZWF0ZU1ldGFkYXRhTWFwKE8sIFAsIHRydWUpLnNldChNZXRhZGF0YUtleSwgTWV0YWRhdGFWYWx1ZSk7XG59O1xudmFyIG9yZGluYXJ5T3duTWV0YWRhdGFLZXlzID0gZnVuY3Rpb24gKHRhcmdldCwgdGFyZ2V0S2V5KSB7XG4gIHZhciBtZXRhZGF0YU1hcCA9IGdldE9yQ3JlYXRlTWV0YWRhdGFNYXAodGFyZ2V0LCB0YXJnZXRLZXksIGZhbHNlKTtcbiAgdmFyIGtleXMgPSBbXTtcbiAgaWYgKG1ldGFkYXRhTWFwKSBtZXRhZGF0YU1hcC5mb3JFYWNoKGZ1bmN0aW9uIChfLCBrZXkpIHsga2V5cy5wdXNoKGtleSk7IH0pO1xuICByZXR1cm4ga2V5cztcbn07XG52YXIgdG9NZXRhS2V5ID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiBpdCA9PSAnc3ltYm9sJyA/IGl0IDogU3RyaW5nKGl0KTtcbn07XG52YXIgZXhwID0gZnVuY3Rpb24gKE8pIHtcbiAgJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0JywgTyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc3RvcmU6IHN0b3JlLFxuICBtYXA6IGdldE9yQ3JlYXRlTWV0YWRhdGFNYXAsXG4gIGhhczogb3JkaW5hcnlIYXNPd25NZXRhZGF0YSxcbiAgZ2V0OiBvcmRpbmFyeUdldE93bk1ldGFkYXRhLFxuICBzZXQ6IG9yZGluYXJ5RGVmaW5lT3duTWV0YWRhdGEsXG4gIGtleXM6IG9yZGluYXJ5T3duTWV0YWRhdGFLZXlzLFxuICBrZXk6IHRvTWV0YUtleSxcbiAgZXhwOiBleHBcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///28\n")},function(module,exports){eval("module.exports = false;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbGlicmFyeS5qcz8yZDAwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBIiwiZmlsZSI6IjI5LmpzIiwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBmYWxzZTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///29\n")},function(module,exports,__webpack_require__){eval("var META = __webpack_require__(33)('meta');\nvar isObject = __webpack_require__(4);\nvar has = __webpack_require__(14);\nvar setDesc = __webpack_require__(8).f;\nvar id = 0;\nvar isExtensible = Object.isExtensible || function () {\n return true;\n};\nvar FREEZE = !__webpack_require__(3)(function () {\n return isExtensible(Object.preventExtensions({}));\n});\nvar setMeta = function (it) {\n setDesc(it, META, { value: {\n i: 'O' + ++id, // object ID\n w: {} // weak collections IDs\n } });\n};\nvar fastKey = function (it, create) {\n // return primitive with prefix\n if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return 'F';\n // not necessary to add metadata\n if (!create) return 'E';\n // add missing metadata\n setMeta(it);\n // return object ID\n } return it[META].i;\n};\nvar getWeak = function (it, create) {\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return true;\n // not necessary to add metadata\n if (!create) return false;\n // add missing metadata\n setMeta(it);\n // return hash weak collections IDs\n } return it[META].w;\n};\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);\n return it;\n};\nvar meta = module.exports = {\n KEY: META,\n NEED: false,\n fastKey: fastKey,\n getWeak: getWeak,\n onFreeze: onFreeze\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWV0YS5qcz82N2FiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFdBQVcsbUJBQU8sQ0FBQyxFQUFRO0FBQzNCLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLFVBQVUsbUJBQU8sQ0FBQyxFQUFRO0FBQzFCLGNBQWMsbUJBQU8sQ0FBQyxDQUFjO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVU7QUFDaEMsaURBQWlEO0FBQ2pELENBQUM7QUFDRDtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBLFNBQVM7QUFDVCxHQUFHLEVBQUU7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMzAuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgTUVUQSA9IHJlcXVpcmUoJy4vX3VpZCcpKCdtZXRhJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciBzZXREZXNjID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbnZhciBpZCA9IDA7XG52YXIgaXNFeHRlbnNpYmxlID0gT2JqZWN0LmlzRXh0ZW5zaWJsZSB8fCBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0cnVlO1xufTtcbnZhciBGUkVFWkUgPSAhcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBpc0V4dGVuc2libGUoT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKHt9KSk7XG59KTtcbnZhciBzZXRNZXRhID0gZnVuY3Rpb24gKGl0KSB7XG4gIHNldERlc2MoaXQsIE1FVEEsIHsgdmFsdWU6IHtcbiAgICBpOiAnTycgKyArK2lkLCAvLyBvYmplY3QgSURcbiAgICB3OiB7fSAgICAgICAgICAvLyB3ZWFrIGNvbGxlY3Rpb25zIElEc1xuICB9IH0pO1xufTtcbnZhciBmYXN0S2V5ID0gZnVuY3Rpb24gKGl0LCBjcmVhdGUpIHtcbiAgLy8gcmV0dXJuIHByaW1pdGl2ZSB3aXRoIHByZWZpeFxuICBpZiAoIWlzT2JqZWN0KGl0KSkgcmV0dXJuIHR5cGVvZiBpdCA9PSAnc3ltYm9sJyA/IGl0IDogKHR5cGVvZiBpdCA9PSAnc3RyaW5nJyA/ICdTJyA6ICdQJykgKyBpdDtcbiAgaWYgKCFoYXMoaXQsIE1FVEEpKSB7XG4gICAgLy8gY2FuJ3Qgc2V0IG1ldGFkYXRhIHRvIHVuY2F1Z2h0IGZyb3plbiBvYmplY3RcbiAgICBpZiAoIWlzRXh0ZW5zaWJsZShpdCkpIHJldHVybiAnRic7XG4gICAgLy8gbm90IG5lY2Vzc2FyeSB0byBhZGQgbWV0YWRhdGFcbiAgICBpZiAoIWNyZWF0ZSkgcmV0dXJuICdFJztcbiAgICAvLyBhZGQgbWlzc2luZyBtZXRhZGF0YVxuICAgIHNldE1ldGEoaXQpO1xuICAvLyByZXR1cm4gb2JqZWN0IElEXG4gIH0gcmV0dXJuIGl0W01FVEFdLmk7XG59O1xudmFyIGdldFdlYWsgPSBmdW5jdGlvbiAoaXQsIGNyZWF0ZSkge1xuICBpZiAoIWhhcyhpdCwgTUVUQSkpIHtcbiAgICAvLyBjYW4ndCBzZXQgbWV0YWRhdGEgdG8gdW5jYXVnaHQgZnJvemVuIG9iamVjdFxuICAgIGlmICghaXNFeHRlbnNpYmxlKGl0KSkgcmV0dXJuIHRydWU7XG4gICAgLy8gbm90IG5lY2Vzc2FyeSB0byBhZGQgbWV0YWRhdGFcbiAgICBpZiAoIWNyZWF0ZSkgcmV0dXJuIGZhbHNlO1xuICAgIC8vIGFkZCBtaXNzaW5nIG1ldGFkYXRhXG4gICAgc2V0TWV0YShpdCk7XG4gIC8vIHJldHVybiBoYXNoIHdlYWsgY29sbGVjdGlvbnMgSURzXG4gIH0gcmV0dXJuIGl0W01FVEFdLnc7XG59O1xuLy8gYWRkIG1ldGFkYXRhIG9uIGZyZWV6ZS1mYW1pbHkgbWV0aG9kcyBjYWxsaW5nXG52YXIgb25GcmVlemUgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKEZSRUVaRSAmJiBtZXRhLk5FRUQgJiYgaXNFeHRlbnNpYmxlKGl0KSAmJiAhaGFzKGl0LCBNRVRBKSkgc2V0TWV0YShpdCk7XG4gIHJldHVybiBpdDtcbn07XG52YXIgbWV0YSA9IG1vZHVsZS5leHBvcnRzID0ge1xuICBLRVk6IE1FVEEsXG4gIE5FRUQ6IGZhbHNlLFxuICBmYXN0S2V5OiBmYXN0S2V5LFxuICBnZXRXZWFrOiBnZXRXZWFrLFxuICBvbkZyZWV6ZTogb25GcmVlemVcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///30\n")},function(module,exports,__webpack_require__){eval("// 22.1.3.31 Array.prototype[@@unscopables]\nvar UNSCOPABLES = __webpack_require__(5)('unscopables');\nvar ArrayProto = Array.prototype;\nif (ArrayProto[UNSCOPABLES] == undefined) __webpack_require__(11)(ArrayProto, UNSCOPABLES, {});\nmodule.exports = function (key) {\n ArrayProto[UNSCOPABLES][key] = true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYWRkLXRvLXVuc2NvcGFibGVzLmpzPzljNmMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxrQkFBa0IsbUJBQU8sQ0FBQyxDQUFRO0FBQ2xDO0FBQ0EsMENBQTBDLG1CQUFPLENBQUMsRUFBUyw2QkFBNkI7QUFDeEY7QUFDQTtBQUNBIiwiZmlsZSI6IjMxLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjIuMS4zLjMxIEFycmF5LnByb3RvdHlwZVtAQHVuc2NvcGFibGVzXVxudmFyIFVOU0NPUEFCTEVTID0gcmVxdWlyZSgnLi9fd2tzJykoJ3Vuc2NvcGFibGVzJyk7XG52YXIgQXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZTtcbmlmIChBcnJheVByb3RvW1VOU0NPUEFCTEVTXSA9PSB1bmRlZmluZWQpIHJlcXVpcmUoJy4vX2hpZGUnKShBcnJheVByb3RvLCBVTlNDT1BBQkxFUywge30pO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIEFycmF5UHJvdG9bVU5TQ09QQUJMRVNdW2tleV0gPSB0cnVlO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///31\n")},function(module,exports){eval("module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcHJvcGVydHktZGVzYy5qcz80NjMwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMzIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChiaXRtYXAsIHZhbHVlKSB7XG4gIHJldHVybiB7XG4gICAgZW51bWVyYWJsZTogIShiaXRtYXAgJiAxKSxcbiAgICBjb25maWd1cmFibGU6ICEoYml0bWFwICYgMiksXG4gICAgd3JpdGFibGU6ICEoYml0bWFwICYgNCksXG4gICAgdmFsdWU6IHZhbHVlXG4gIH07XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///32\n")},function(module,exports){eval("var id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdWlkLmpzP2NhNWEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIzMy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBpZCA9IDA7XG52YXIgcHggPSBNYXRoLnJhbmRvbSgpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiAnU3ltYm9sKCcuY29uY2F0KGtleSA9PT0gdW5kZWZpbmVkID8gJycgOiBrZXksICcpXycsICgrK2lkICsgcHgpLnRvU3RyaW5nKDM2KSk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///33\n")},function(module,exports,__webpack_require__){eval("// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = __webpack_require__(96);\nvar enumBugKeys = __webpack_require__(69);\n\nmodule.exports = Object.keys || function keys(O) {\n return $keys(O, enumBugKeys);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWtleXMuanM/MGQ1OCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLFlBQVksbUJBQU8sQ0FBQyxFQUF5QjtBQUM3QyxrQkFBa0IsbUJBQU8sQ0FBQyxFQUFrQjs7QUFFNUM7QUFDQTtBQUNBIiwiZmlsZSI6IjM0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMTkuMS4yLjE0IC8gMTUuMi4zLjE0IE9iamVjdC5rZXlzKE8pXG52YXIgJGtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cy1pbnRlcm5hbCcpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi9fZW51bS1idWcta2V5cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIGtleXMoTykge1xuICByZXR1cm4gJGtleXMoTywgZW51bUJ1Z0tleXMpO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///34\n")},function(module,exports,__webpack_require__){eval("var toInteger = __webpack_require__(21);\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n index = toInteger(index);\n return index < 0 ? max(index + length, 0) : min(index, length);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8tYWJzb2x1dGUtaW5kZXguanM/NzdmMSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIzNS5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgbWluID0gTWF0aC5taW47XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbmRleCwgbGVuZ3RoKSB7XG4gIGluZGV4ID0gdG9JbnRlZ2VyKGluZGV4KTtcbiAgcmV0dXJuIGluZGV4IDwgMCA/IG1heChpbmRleCArIGxlbmd0aCwgMCkgOiBtaW4oaW5kZXgsIGxlbmd0aCk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///35\n")},function(module,exports,__webpack_require__){eval("// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = __webpack_require__(1);\nvar dPs = __webpack_require__(97);\nvar enumBugKeys = __webpack_require__(69);\nvar IE_PROTO = __webpack_require__(68)('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = __webpack_require__(66)('iframe');\n var i = enumBugKeys.length;\n var lt = '<';\n var gt = '>';\n var iframeDocument;\n iframe.style.display = 'none';\n __webpack_require__(70).appendChild(iframe);\n iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n // createDict = iframe.contentWindow.Object;\n // html.removeChild(iframe);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n iframeDocument.close();\n createDict = iframeDocument.F;\n while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n Empty[PROTOTYPE] = anObject(O);\n result = new Empty();\n Empty[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = createDict();\n return Properties === undefined ? result : dPs(result, Properties);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWNyZWF0ZS5qcz8yYWViIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsVUFBVSxtQkFBTyxDQUFDLEVBQWU7QUFDakMsa0JBQWtCLG1CQUFPLENBQUMsRUFBa0I7QUFDNUMsZUFBZSxtQkFBTyxDQUFDLEVBQWU7QUFDdEMseUJBQXlCO0FBQ3pCOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsbUJBQU8sQ0FBQyxFQUFlO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLG1CQUFPLENBQUMsRUFBUztBQUNuQiw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBIiwiZmlsZSI6IjM2LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMTkuMS4yLjIgLyAxNS4yLjMuNSBPYmplY3QuY3JlYXRlKE8gWywgUHJvcGVydGllc10pXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBkUHMgPSByZXF1aXJlKCcuL19vYmplY3QtZHBzJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuL19lbnVtLWJ1Zy1rZXlzJyk7XG52YXIgSUVfUFJPVE8gPSByZXF1aXJlKCcuL19zaGFyZWQta2V5JykoJ0lFX1BST1RPJyk7XG52YXIgRW1wdHkgPSBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH07XG52YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG5cbi8vIENyZWF0ZSBvYmplY3Qgd2l0aCBmYWtlIGBudWxsYCBwcm90b3R5cGU6IHVzZSBpZnJhbWUgT2JqZWN0IHdpdGggY2xlYXJlZCBwcm90b3R5cGVcbnZhciBjcmVhdGVEaWN0ID0gZnVuY3Rpb24gKCkge1xuICAvLyBUaHJhc2gsIHdhc3RlIGFuZCBzb2RvbXk6IElFIEdDIGJ1Z1xuICB2YXIgaWZyYW1lID0gcmVxdWlyZSgnLi9fZG9tLWNyZWF0ZScpKCdpZnJhbWUnKTtcbiAgdmFyIGkgPSBlbnVtQnVnS2V5cy5sZW5ndGg7XG4gIHZhciBsdCA9ICc8JztcbiAgdmFyIGd0ID0gJz4nO1xuICB2YXIgaWZyYW1lRG9jdW1lbnQ7XG4gIGlmcmFtZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICByZXF1aXJlKCcuL19odG1sJykuYXBwZW5kQ2hpbGQoaWZyYW1lKTtcbiAgaWZyYW1lLnNyYyA9ICdqYXZhc2NyaXB0Oic7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tc2NyaXB0LXVybFxuICAvLyBjcmVhdGVEaWN0ID0gaWZyYW1lLmNvbnRlbnRXaW5kb3cuT2JqZWN0O1xuICAvLyBodG1sLnJlbW92ZUNoaWxkKGlmcmFtZSk7XG4gIGlmcmFtZURvY3VtZW50ID0gaWZyYW1lLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQ7XG4gIGlmcmFtZURvY3VtZW50Lm9wZW4oKTtcbiAgaWZyYW1lRG9jdW1lbnQud3JpdGUobHQgKyAnc2NyaXB0JyArIGd0ICsgJ2RvY3VtZW50LkY9T2JqZWN0JyArIGx0ICsgJy9zY3JpcHQnICsgZ3QpO1xuICBpZnJhbWVEb2N1bWVudC5jbG9zZSgpO1xuICBjcmVhdGVEaWN0ID0gaWZyYW1lRG9jdW1lbnQuRjtcbiAgd2hpbGUgKGktLSkgZGVsZXRlIGNyZWF0ZURpY3RbUFJPVE9UWVBFXVtlbnVtQnVnS2V5c1tpXV07XG4gIHJldHVybiBjcmVhdGVEaWN0KCk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5jcmVhdGUgfHwgZnVuY3Rpb24gY3JlYXRlKE8sIFByb3BlcnRpZXMpIHtcbiAgdmFyIHJlc3VsdDtcbiAgaWYgKE8gIT09IG51bGwpIHtcbiAgICBFbXB0eVtQUk9UT1RZUEVdID0gYW5PYmplY3QoTyk7XG4gICAgcmVzdWx0ID0gbmV3IEVtcHR5KCk7XG4gICAgRW1wdHlbUFJPVE9UWVBFXSA9IG51bGw7XG4gICAgLy8gYWRkIFwiX19wcm90b19fXCIgZm9yIE9iamVjdC5nZXRQcm90b3R5cGVPZiBwb2x5ZmlsbFxuICAgIHJlc3VsdFtJRV9QUk9UT10gPSBPO1xuICB9IGVsc2UgcmVzdWx0ID0gY3JlYXRlRGljdCgpO1xuICByZXR1cm4gUHJvcGVydGllcyA9PT0gdW5kZWZpbmVkID8gcmVzdWx0IDogZFBzKHJlc3VsdCwgUHJvcGVydGllcyk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///36\n")},function(module,exports,__webpack_require__){eval("// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\nvar $keys = __webpack_require__(96);\nvar hiddenKeys = __webpack_require__(69).concat('length', 'prototype');\n\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return $keys(O, hiddenKeys);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdvcG4uanM/OTA5MyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLFlBQVksbUJBQU8sQ0FBQyxFQUF5QjtBQUM3QyxpQkFBaUIsbUJBQU8sQ0FBQyxFQUFrQjs7QUFFM0M7QUFDQTtBQUNBIiwiZmlsZSI6IjM3LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMTkuMS4yLjcgLyAxNS4yLjMuNCBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhPKVxudmFyICRrZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMtaW50ZXJuYWwnKTtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi9fZW51bS1idWcta2V5cycpLmNvbmNhdCgnbGVuZ3RoJywgJ3Byb3RvdHlwZScpO1xuXG5leHBvcnRzLmYgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB8fCBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKE8pIHtcbiAgcmV0dXJuICRrZXlzKE8sIGhpZGRlbktleXMpO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///37\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar global = __webpack_require__(2);\nvar dP = __webpack_require__(8);\nvar DESCRIPTORS = __webpack_require__(7);\nvar SPECIES = __webpack_require__(5)('species');\n\nmodule.exports = function (KEY) {\n var C = global[KEY];\n if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2V0LXNwZWNpZXMuanM/N2E1NiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGFBQWEsbUJBQU8sQ0FBQyxDQUFXO0FBQ2hDLFNBQVMsbUJBQU8sQ0FBQyxDQUFjO0FBQy9CLGtCQUFrQixtQkFBTyxDQUFDLENBQWdCO0FBQzFDLGNBQWMsbUJBQU8sQ0FBQyxDQUFROztBQUU5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQixhQUFhO0FBQ25DLEdBQUc7QUFDSCIsImZpbGUiOiIzOC5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKTtcbnZhciBTUEVDSUVTID0gcmVxdWlyZSgnLi9fd2tzJykoJ3NwZWNpZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoS0VZKSB7XG4gIHZhciBDID0gZ2xvYmFsW0tFWV07XG4gIGlmIChERVNDUklQVE9SUyAmJiBDICYmICFDW1NQRUNJRVNdKSBkUC5mKEMsIFNQRUNJRVMsIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9XG4gIH0pO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///38\n")},function(module,exports){eval("module.exports = function (it, Constructor, name, forbiddenField) {\n if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) {\n throw TypeError(name + ': incorrect invocation!');\n } return it;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYW4taW5zdGFuY2UuanM/ZjYwNSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0giLCJmaWxlIjoiMzkuanMiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgQ29uc3RydWN0b3IsIG5hbWUsIGZvcmJpZGRlbkZpZWxkKSB7XG4gIGlmICghKGl0IGluc3RhbmNlb2YgQ29uc3RydWN0b3IpIHx8IChmb3JiaWRkZW5GaWVsZCAhPT0gdW5kZWZpbmVkICYmIGZvcmJpZGRlbkZpZWxkIGluIGl0KSkge1xuICAgIHRocm93IFR5cGVFcnJvcihuYW1lICsgJzogaW5jb3JyZWN0IGludm9jYXRpb24hJyk7XG4gIH0gcmV0dXJuIGl0O1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///39\n")},function(module,exports,__webpack_require__){eval("var ctx = __webpack_require__(19);\nvar call = __webpack_require__(109);\nvar isArrayIter = __webpack_require__(81);\nvar anObject = __webpack_require__(1);\nvar toLength = __webpack_require__(6);\nvar getIterFn = __webpack_require__(83);\nvar BREAK = {};\nvar RETURN = {};\nvar exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {\n var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable);\n var f = ctx(fn, that, entries ? 2 : 1);\n var index = 0;\n var length, step, iterator, result;\n if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');\n // fast case for arrays with default iterator\n if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {\n result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);\n if (result === BREAK || result === RETURN) return result;\n } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {\n result = call(iterator, f, step.value, entries);\n if (result === BREAK || result === RETURN) return result;\n }\n};\nexports.BREAK = BREAK;\nexports.RETURN = RETURN;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZm9yLW9mLmpzPzRhNTkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsVUFBVSxtQkFBTyxDQUFDLEVBQVE7QUFDMUIsV0FBVyxtQkFBTyxDQUFDLEdBQWM7QUFDakMsa0JBQWtCLG1CQUFPLENBQUMsRUFBa0I7QUFDNUMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBNEI7QUFDcEQ7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDLGlCQUFpQixFQUFFO0FBQzFEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtRUFBbUUsZ0JBQWdCO0FBQ25GO0FBQ0E7QUFDQSxHQUFHLDRDQUE0QyxnQ0FBZ0M7QUFDL0U7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjQwLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuL19pdGVyLWNhbGwnKTtcbnZhciBpc0FycmF5SXRlciA9IHJlcXVpcmUoJy4vX2lzLWFycmF5LWl0ZXInKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgZ2V0SXRlckZuID0gcmVxdWlyZSgnLi9jb3JlLmdldC1pdGVyYXRvci1tZXRob2QnKTtcbnZhciBCUkVBSyA9IHt9O1xudmFyIFJFVFVSTiA9IHt9O1xudmFyIGV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVyYWJsZSwgZW50cmllcywgZm4sIHRoYXQsIElURVJBVE9SKSB7XG4gIHZhciBpdGVyRm4gPSBJVEVSQVRPUiA/IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGl0ZXJhYmxlOyB9IDogZ2V0SXRlckZuKGl0ZXJhYmxlKTtcbiAgdmFyIGYgPSBjdHgoZm4sIHRoYXQsIGVudHJpZXMgPyAyIDogMSk7XG4gIHZhciBpbmRleCA9IDA7XG4gIHZhciBsZW5ndGgsIHN0ZXAsIGl0ZXJhdG9yLCByZXN1bHQ7XG4gIGlmICh0eXBlb2YgaXRlckZuICE9ICdmdW5jdGlvbicpIHRocm93IFR5cGVFcnJvcihpdGVyYWJsZSArICcgaXMgbm90IGl0ZXJhYmxlIScpO1xuICAvLyBmYXN0IGNhc2UgZm9yIGFycmF5cyB3aXRoIGRlZmF1bHQgaXRlcmF0b3JcbiAgaWYgKGlzQXJyYXlJdGVyKGl0ZXJGbikpIGZvciAobGVuZ3RoID0gdG9MZW5ndGgoaXRlcmFibGUubGVuZ3RoKTsgbGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIHtcbiAgICByZXN1bHQgPSBlbnRyaWVzID8gZihhbk9iamVjdChzdGVwID0gaXRlcmFibGVbaW5kZXhdKVswXSwgc3RlcFsxXSkgOiBmKGl0ZXJhYmxlW2luZGV4XSk7XG4gICAgaWYgKHJlc3VsdCA9PT0gQlJFQUsgfHwgcmVzdWx0ID09PSBSRVRVUk4pIHJldHVybiByZXN1bHQ7XG4gIH0gZWxzZSBmb3IgKGl0ZXJhdG9yID0gaXRlckZuLmNhbGwoaXRlcmFibGUpOyAhKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmU7KSB7XG4gICAgcmVzdWx0ID0gY2FsbChpdGVyYXRvciwgZiwgc3RlcC52YWx1ZSwgZW50cmllcyk7XG4gICAgaWYgKHJlc3VsdCA9PT0gQlJFQUsgfHwgcmVzdWx0ID09PSBSRVRVUk4pIHJldHVybiByZXN1bHQ7XG4gIH1cbn07XG5leHBvcnRzLkJSRUFLID0gQlJFQUs7XG5leHBvcnRzLlJFVFVSTiA9IFJFVFVSTjtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///40\n")},function(module,exports,__webpack_require__){eval("var redefine = __webpack_require__(12);\nmodule.exports = function (target, src, safe) {\n for (var key in src) redefine(target, key, src[key], safe);\n return target;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcmVkZWZpbmUtYWxsLmpzP2RjYmMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxtQkFBTyxDQUFDLEVBQWE7QUFDcEM7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiNDEuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGFyZ2V0LCBzcmMsIHNhZmUpIHtcbiAgZm9yICh2YXIga2V5IGluIHNyYykgcmVkZWZpbmUodGFyZ2V0LCBrZXksIHNyY1trZXldLCBzYWZlKTtcbiAgcmV0dXJuIHRhcmdldDtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///41\n")},function(module,exports,__webpack_require__){eval("var isObject = __webpack_require__(4);\nmodule.exports = function (it, TYPE) {\n if (!isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!');\n return it;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdmFsaWRhdGUtY29sbGVjdGlvbi5qcz9iMzlhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjQyLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgVFlQRSkge1xuICBpZiAoIWlzT2JqZWN0KGl0KSB8fCBpdC5fdCAhPT0gVFlQRSkgdGhyb3cgVHlwZUVycm9yKCdJbmNvbXBhdGlibGUgcmVjZWl2ZXIsICcgKyBUWVBFICsgJyByZXF1aXJlZCEnKTtcbiAgcmV0dXJuIGl0O1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///42\n")},function(module,exports,__webpack_require__){eval("var def = __webpack_require__(8).f;\nvar has = __webpack_require__(14);\nvar TAG = __webpack_require__(5)('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2V0LXRvLXN0cmluZy10YWcuanM/N2YyMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxVQUFVLG1CQUFPLENBQUMsQ0FBYztBQUNoQyxVQUFVLG1CQUFPLENBQUMsRUFBUTtBQUMxQixVQUFVLG1CQUFPLENBQUMsQ0FBUTs7QUFFMUI7QUFDQSxvRUFBb0UsaUNBQWlDO0FBQ3JHIiwiZmlsZSI6IjQzLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGRlZiA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgVEFHID0gcmVxdWlyZSgnLi9fd2tzJykoJ3RvU3RyaW5nVGFnJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCB0YWcsIHN0YXQpIHtcbiAgaWYgKGl0ICYmICFoYXMoaXQgPSBzdGF0ID8gaXQgOiBpdC5wcm90b3R5cGUsIFRBRykpIGRlZihpdCwgVEFHLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgdmFsdWU6IHRhZyB9KTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///43\n")},function(module,exports,__webpack_require__){eval("// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = __webpack_require__(20);\nvar TAG = __webpack_require__(5)('toStringTag');\n// ES3 wrong here\nvar ARG = cof(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (e) { /* empty */ }\n};\n\nmodule.exports = function (it) {\n var O, T, B;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n // builtinTag case\n : ARG ? cof(O)\n // ES3 arguments fallback\n : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY2xhc3NvZi5qcz8yM2M2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsVUFBVSxtQkFBTyxDQUFDLEVBQVE7QUFDMUIsVUFBVSxtQkFBTyxDQUFDLENBQVE7QUFDMUI7QUFDQSwyQkFBMkIsa0JBQWtCLEVBQUU7O0FBRS9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRyxZQUFZO0FBQ2Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiNDQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBnZXR0aW5nIHRhZyBmcm9tIDE5LjEuMy42IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcoKVxudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xudmFyIFRBRyA9IHJlcXVpcmUoJy4vX3drcycpKCd0b1N0cmluZ1RhZycpO1xuLy8gRVMzIHdyb25nIGhlcmVcbnZhciBBUkcgPSBjb2YoZnVuY3Rpb24gKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpID09ICdBcmd1bWVudHMnO1xuXG4vLyBmYWxsYmFjayBmb3IgSUUxMSBTY3JpcHQgQWNjZXNzIERlbmllZCBlcnJvclxudmFyIHRyeUdldCA9IGZ1bmN0aW9uIChpdCwga2V5KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGl0W2tleV07XG4gIH0gY2F0Y2ggKGUpIHsgLyogZW1wdHkgKi8gfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIE8sIFQsIEI7XG4gIHJldHVybiBpdCA9PT0gdW5kZWZpbmVkID8gJ1VuZGVmaW5lZCcgOiBpdCA9PT0gbnVsbCA/ICdOdWxsJ1xuICAgIC8vIEBAdG9TdHJpbmdUYWcgY2FzZVxuICAgIDogdHlwZW9mIChUID0gdHJ5R2V0KE8gPSBPYmplY3QoaXQpLCBUQUcpKSA9PSAnc3RyaW5nJyA/IFRcbiAgICAvLyBidWlsdGluVGFnIGNhc2VcbiAgICA6IEFSRyA/IGNvZihPKVxuICAgIC8vIEVTMyBhcmd1bWVudHMgZmFsbGJhY2tcbiAgICA6IChCID0gY29mKE8pKSA9PSAnT2JqZWN0JyAmJiB0eXBlb2YgTy5jYWxsZWUgPT0gJ2Z1bmN0aW9uJyA/ICdBcmd1bWVudHMnIDogQjtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///44\n")},function(module,exports,__webpack_require__){eval("var $export = __webpack_require__(0);\nvar defined = __webpack_require__(24);\nvar fails = __webpack_require__(3);\nvar spaces = __webpack_require__(72);\nvar space = '[' + spaces + ']';\nvar non = '\\u200b\\u0085';\nvar ltrim = RegExp('^' + space + space + '*');\nvar rtrim = RegExp(space + space + '*$');\n\nvar exporter = function (KEY, exec, ALIAS) {\n var exp = {};\n var FORCE = fails(function () {\n return !!spaces[KEY]() || non[KEY]() != non;\n });\n var fn = exp[KEY] = FORCE ? exec(trim) : spaces[KEY];\n if (ALIAS) exp[ALIAS] = fn;\n $export($export.P + $export.F * FORCE, 'String', exp);\n};\n\n// 1 -> String#trimLeft\n// 2 -> String#trimRight\n// 3 -> String#trim\nvar trim = exporter.trim = function (string, TYPE) {\n string = String(defined(string));\n if (TYPE & 1) string = string.replace(ltrim, '');\n if (TYPE & 2) string = string.replace(rtrim, '');\n return string;\n};\n\nmodule.exports = exporter;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLXRyaW0uanM/YWE3NyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxjQUFjLG1CQUFPLENBQUMsRUFBWTtBQUNsQyxZQUFZLG1CQUFPLENBQUMsQ0FBVTtBQUM5QixhQUFhLG1CQUFPLENBQUMsRUFBYztBQUNuQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiNDUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIHNwYWNlcyA9IHJlcXVpcmUoJy4vX3N0cmluZy13cycpO1xudmFyIHNwYWNlID0gJ1snICsgc3BhY2VzICsgJ10nO1xudmFyIG5vbiA9ICdcXHUyMDBiXFx1MDA4NSc7XG52YXIgbHRyaW0gPSBSZWdFeHAoJ14nICsgc3BhY2UgKyBzcGFjZSArICcqJyk7XG52YXIgcnRyaW0gPSBSZWdFeHAoc3BhY2UgKyBzcGFjZSArICcqJCcpO1xuXG52YXIgZXhwb3J0ZXIgPSBmdW5jdGlvbiAoS0VZLCBleGVjLCBBTElBUykge1xuICB2YXIgZXhwID0ge307XG4gIHZhciBGT1JDRSA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gISFzcGFjZXNbS0VZXSgpIHx8IG5vbltLRVldKCkgIT0gbm9uO1xuICB9KTtcbiAgdmFyIGZuID0gZXhwW0tFWV0gPSBGT1JDRSA/IGV4ZWModHJpbSkgOiBzcGFjZXNbS0VZXTtcbiAgaWYgKEFMSUFTKSBleHBbQUxJQVNdID0gZm47XG4gICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogRk9SQ0UsICdTdHJpbmcnLCBleHApO1xufTtcblxuLy8gMSAtPiBTdHJpbmcjdHJpbUxlZnRcbi8vIDIgLT4gU3RyaW5nI3RyaW1SaWdodFxuLy8gMyAtPiBTdHJpbmcjdHJpbVxudmFyIHRyaW0gPSBleHBvcnRlci50cmltID0gZnVuY3Rpb24gKHN0cmluZywgVFlQRSkge1xuICBzdHJpbmcgPSBTdHJpbmcoZGVmaW5lZChzdHJpbmcpKTtcbiAgaWYgKFRZUEUgJiAxKSBzdHJpbmcgPSBzdHJpbmcucmVwbGFjZShsdHJpbSwgJycpO1xuICBpZiAoVFlQRSAmIDIpIHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKHJ0cmltLCAnJyk7XG4gIHJldHVybiBzdHJpbmc7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydGVyO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///45\n")},function(module,exports){eval("module.exports = {};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlcmF0b3JzLmpzPzg0ZjIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEiLCJmaWxlIjoiNDYuanMiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IHt9O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///46\n")},function(module,exports,__webpack_require__){eval("var core = __webpack_require__(18);\nvar global = __webpack_require__(2);\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\n\n(module.exports = function (key, value) {\n return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n version: core.version,\n mode: __webpack_require__(29) ? 'pure' : 'global',\n copyright: '© 2020 Denis Pushkarev (zloirock.ru)'\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2hhcmVkLmpzPzU1MzciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsV0FBVyxtQkFBTyxDQUFDLEVBQVM7QUFDNUIsYUFBYSxtQkFBTyxDQUFDLENBQVc7QUFDaEM7QUFDQSxrREFBa0Q7O0FBRWxEO0FBQ0EscUVBQXFFO0FBQ3JFLENBQUM7QUFDRDtBQUNBLFFBQVEsbUJBQU8sQ0FBQyxFQUFZO0FBQzVCO0FBQ0EsQ0FBQyIsImZpbGUiOiI0Ny5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIFNIQVJFRCA9ICdfX2NvcmUtanNfc2hhcmVkX18nO1xudmFyIHN0b3JlID0gZ2xvYmFsW1NIQVJFRF0gfHwgKGdsb2JhbFtTSEFSRURdID0ge30pO1xuXG4obW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICByZXR1cm4gc3RvcmVba2V5XSB8fCAoc3RvcmVba2V5XSA9IHZhbHVlICE9PSB1bmRlZmluZWQgPyB2YWx1ZSA6IHt9KTtcbn0pKCd2ZXJzaW9ucycsIFtdKS5wdXNoKHtcbiAgdmVyc2lvbjogY29yZS52ZXJzaW9uLFxuICBtb2RlOiByZXF1aXJlKCcuL19saWJyYXJ5JykgPyAncHVyZScgOiAnZ2xvYmFsJyxcbiAgY29weXJpZ2h0OiAnwqkgMjAyMCBEZW5pcyBQdXNoa2FyZXYgKHpsb2lyb2NrLnJ1KSdcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///47\n")},function(module,exports,__webpack_require__){eval("// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = __webpack_require__(20);\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n return cof(it) == 'String' ? it.split('') : Object(it);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faW9iamVjdC5qcz82MjZhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsVUFBVSxtQkFBTyxDQUFDLEVBQVE7QUFDMUI7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiNDguanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIGFuZCBub24tZW51bWVyYWJsZSBvbGQgVjggc3RyaW5nc1xudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QoJ3onKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKSA/IE9iamVjdCA6IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gY29mKGl0KSA9PSAnU3RyaW5nJyA/IGl0LnNwbGl0KCcnKSA6IE9iamVjdChpdCk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///48\n")},function(module,exports){eval("exports.f = {}.propertyIsEnumerable;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LXBpZS5qcz81MmE3Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMiLCJmaWxlIjoiNDkuanMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnRzLmYgPSB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///49\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// 21.2.5.3 get RegExp.prototype.flags\nvar anObject = __webpack_require__(1);\nmodule.exports = function () {\n var that = anObject(this);\n var result = '';\n if (that.global) result += 'g';\n if (that.ignoreCase) result += 'i';\n if (that.multiline) result += 'm';\n if (that.unicode) result += 'u';\n if (that.sticky) result += 'y';\n return result;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZmxhZ3MuanM/MGJmYiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiNTAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG4vLyAyMS4yLjUuMyBnZXQgUmVnRXhwLnByb3RvdHlwZS5mbGFnc1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHRoYXQgPSBhbk9iamVjdCh0aGlzKTtcbiAgdmFyIHJlc3VsdCA9ICcnO1xuICBpZiAodGhhdC5nbG9iYWwpIHJlc3VsdCArPSAnZyc7XG4gIGlmICh0aGF0Lmlnbm9yZUNhc2UpIHJlc3VsdCArPSAnaSc7XG4gIGlmICh0aGF0Lm11bHRpbGluZSkgcmVzdWx0ICs9ICdtJztcbiAgaWYgKHRoYXQudW5pY29kZSkgcmVzdWx0ICs9ICd1JztcbiAgaWYgKHRoYXQuc3RpY2t5KSByZXN1bHQgKz0gJ3knO1xuICByZXR1cm4gcmVzdWx0O1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///50\n")},function(module,exports,__webpack_require__){eval("// 7.3.20 SpeciesConstructor(O, defaultConstructor)\nvar anObject = __webpack_require__(1);\nvar aFunction = __webpack_require__(10);\nvar SPECIES = __webpack_require__(5)('species');\nmodule.exports = function (O, D) {\n var C = anObject(O).constructor;\n var S;\n return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3BlY2llcy1jb25zdHJ1Y3Rvci5qcz9lYmQ2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2QyxjQUFjLG1CQUFPLENBQUMsQ0FBUTtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjUxLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gNy4zLjIwIFNwZWNpZXNDb25zdHJ1Y3RvcihPLCBkZWZhdWx0Q29uc3RydWN0b3IpXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgU1BFQ0lFUyA9IHJlcXVpcmUoJy4vX3drcycpKCdzcGVjaWVzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBEKSB7XG4gIHZhciBDID0gYW5PYmplY3QoTykuY29uc3RydWN0b3I7XG4gIHZhciBTO1xuICByZXR1cm4gQyA9PT0gdW5kZWZpbmVkIHx8IChTID0gYW5PYmplY3QoQylbU1BFQ0lFU10pID09IHVuZGVmaW5lZCA/IEQgOiBhRnVuY3Rpb24oUyk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///51\n")},function(module,exports,__webpack_require__){eval("// false -> Array#indexOf\n// true -> Array#includes\nvar toIObject = __webpack_require__(15);\nvar toLength = __webpack_require__(6);\nvar toAbsoluteIndex = __webpack_require__(35);\nmodule.exports = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIObject($this);\n var length = toLength(O.length);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n if (O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktaW5jbHVkZXMuanM/YzM2NiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0EsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2QyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxzQkFBc0IsbUJBQU8sQ0FBQyxFQUFzQjtBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUssWUFBWSxlQUFlO0FBQ2hDO0FBQ0EsS0FBSztBQUNMO0FBQ0EiLCJmaWxlIjoiNTIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBmYWxzZSAtPiBBcnJheSNpbmRleE9mXG4vLyB0cnVlICAtPiBBcnJheSNpbmNsdWRlc1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4vX3RvLWFic29sdXRlLWluZGV4Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChJU19JTkNMVURFUykge1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBlbCwgZnJvbUluZGV4KSB7XG4gICAgdmFyIE8gPSB0b0lPYmplY3QoJHRoaXMpO1xuICAgIHZhciBsZW5ndGggPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gICAgdmFyIGluZGV4ID0gdG9BYnNvbHV0ZUluZGV4KGZyb21JbmRleCwgbGVuZ3RoKTtcbiAgICB2YXIgdmFsdWU7XG4gICAgLy8gQXJyYXkjaW5jbHVkZXMgdXNlcyBTYW1lVmFsdWVaZXJvIGVxdWFsaXR5IGFsZ29yaXRobVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICBpZiAoSVNfSU5DTFVERVMgJiYgZWwgIT0gZWwpIHdoaWxlIChsZW5ndGggPiBpbmRleCkge1xuICAgICAgdmFsdWUgPSBPW2luZGV4KytdO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgICAgaWYgKHZhbHVlICE9IHZhbHVlKSByZXR1cm4gdHJ1ZTtcbiAgICAvLyBBcnJheSNpbmRleE9mIGlnbm9yZXMgaG9sZXMsIEFycmF5I2luY2x1ZGVzIC0gbm90XG4gICAgfSBlbHNlIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSBpZiAoSVNfSU5DTFVERVMgfHwgaW5kZXggaW4gTykge1xuICAgICAgaWYgKE9baW5kZXhdID09PSBlbCkgcmV0dXJuIElTX0lOQ0xVREVTIHx8IGluZGV4IHx8IDA7XG4gICAgfSByZXR1cm4gIUlTX0lOQ0xVREVTICYmIC0xO1xuICB9O1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///52\n")},function(module,exports){eval("exports.f = Object.getOwnPropertySymbols;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdvcHMuanM/MjYyMSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSIsImZpbGUiOiI1My5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///53\n")},function(module,exports,__webpack_require__){eval("// 7.2.2 IsArray(argument)\nvar cof = __webpack_require__(20);\nmodule.exports = Array.isArray || function isArray(arg) {\n return cof(arg) == 'Array';\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtYXJyYXkuanM/MTE2OSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLFVBQVUsbUJBQU8sQ0FBQyxFQUFRO0FBQzFCO0FBQ0E7QUFDQSIsImZpbGUiOiI1NC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDcuMi4yIElzQXJyYXkoYXJndW1lbnQpXG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG5tb2R1bGUuZXhwb3J0cyA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gaXNBcnJheShhcmcpIHtcbiAgcmV0dXJuIGNvZihhcmcpID09ICdBcnJheSc7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///54\n")},function(module,exports,__webpack_require__){eval("var toInteger = __webpack_require__(21);\nvar defined = __webpack_require__(24);\n// true -> String#at\n// false -> String#codePointAt\nmodule.exports = function (TO_STRING) {\n return function (that, pos) {\n var s = String(defined(that));\n var i = toInteger(pos);\n var l = s.length;\n var a, b;\n if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n a = s.charCodeAt(i);\n return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n ? TO_STRING ? s.charAt(i) : a\n : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLWF0LmpzPzAyZjQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2QyxjQUFjLG1CQUFPLENBQUMsRUFBWTtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiNTUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG4vLyB0cnVlICAtPiBTdHJpbmcjYXRcbi8vIGZhbHNlIC0+IFN0cmluZyNjb2RlUG9pbnRBdFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoVE9fU1RSSU5HKSB7XG4gIHJldHVybiBmdW5jdGlvbiAodGhhdCwgcG9zKSB7XG4gICAgdmFyIHMgPSBTdHJpbmcoZGVmaW5lZCh0aGF0KSk7XG4gICAgdmFyIGkgPSB0b0ludGVnZXIocG9zKTtcbiAgICB2YXIgbCA9IHMubGVuZ3RoO1xuICAgIHZhciBhLCBiO1xuICAgIGlmIChpIDwgMCB8fCBpID49IGwpIHJldHVybiBUT19TVFJJTkcgPyAnJyA6IHVuZGVmaW5lZDtcbiAgICBhID0gcy5jaGFyQ29kZUF0KGkpO1xuICAgIHJldHVybiBhIDwgMHhkODAwIHx8IGEgPiAweGRiZmYgfHwgaSArIDEgPT09IGwgfHwgKGIgPSBzLmNoYXJDb2RlQXQoaSArIDEpKSA8IDB4ZGMwMCB8fCBiID4gMHhkZmZmXG4gICAgICA/IFRPX1NUUklORyA/IHMuY2hhckF0KGkpIDogYVxuICAgICAgOiBUT19TVFJJTkcgPyBzLnNsaWNlKGksIGkgKyAyKSA6IChhIC0gMHhkODAwIDw8IDEwKSArIChiIC0gMHhkYzAwKSArIDB4MTAwMDA7XG4gIH07XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///55\n")},function(module,exports,__webpack_require__){eval("// 7.2.8 IsRegExp(argument)\nvar isObject = __webpack_require__(4);\nvar cof = __webpack_require__(20);\nvar MATCH = __webpack_require__(5)('match');\nmodule.exports = function (it) {\n var isRegExp;\n return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtcmVnZXhwLmpzP2FhZTMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxVQUFVLG1CQUFPLENBQUMsRUFBUTtBQUMxQixZQUFZLG1CQUFPLENBQUMsQ0FBUTtBQUM1QjtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiI1Ni5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDcuMi44IElzUmVnRXhwKGFyZ3VtZW50KVxudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG52YXIgTUFUQ0ggPSByZXF1aXJlKCcuL193a3MnKSgnbWF0Y2gnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBpc1JlZ0V4cDtcbiAgcmV0dXJuIGlzT2JqZWN0KGl0KSAmJiAoKGlzUmVnRXhwID0gaXRbTUFUQ0hdKSAhPT0gdW5kZWZpbmVkID8gISFpc1JlZ0V4cCA6IGNvZihpdCkgPT0gJ1JlZ0V4cCcpO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///56\n")},function(module,exports,__webpack_require__){eval("var ITERATOR = __webpack_require__(5)('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var riter = [7][ITERATOR]();\n riter['return'] = function () { SAFE_CLOSING = true; };\n // eslint-disable-next-line no-throw-literal\n Array.from(riter, function () { throw 2; });\n} catch (e) { /* empty */ }\n\nmodule.exports = function (exec, skipClosing) {\n if (!skipClosing && !SAFE_CLOSING) return false;\n var safe = false;\n try {\n var arr = [7];\n var iter = arr[ITERATOR]();\n iter.next = function () { return { done: safe = true }; };\n arr[ITERATOR] = function () { return iter; };\n exec(arr);\n } catch (e) { /* empty */ }\n return safe;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlci1kZXRlY3QuanM/NWNjNSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxlQUFlLG1CQUFPLENBQUMsQ0FBUTtBQUMvQjs7QUFFQTtBQUNBO0FBQ0EsaUNBQWlDLHFCQUFxQjtBQUN0RDtBQUNBLGlDQUFpQyxTQUFTLEVBQUU7QUFDNUMsQ0FBQyxZQUFZOztBQUViO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QixTQUFTLHFCQUFxQjtBQUMzRCxpQ0FBaUMsYUFBYTtBQUM5QztBQUNBLEdBQUcsWUFBWTtBQUNmO0FBQ0EiLCJmaWxlIjoiNTcuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgSVRFUkFUT1IgPSByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKTtcbnZhciBTQUZFX0NMT1NJTkcgPSBmYWxzZTtcblxudHJ5IHtcbiAgdmFyIHJpdGVyID0gWzddW0lURVJBVE9SXSgpO1xuICByaXRlclsncmV0dXJuJ10gPSBmdW5jdGlvbiAoKSB7IFNBRkVfQ0xPU0lORyA9IHRydWU7IH07XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby10aHJvdy1saXRlcmFsXG4gIEFycmF5LmZyb20ocml0ZXIsIGZ1bmN0aW9uICgpIHsgdGhyb3cgMjsgfSk7XG59IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYywgc2tpcENsb3NpbmcpIHtcbiAgaWYgKCFza2lwQ2xvc2luZyAmJiAhU0FGRV9DTE9TSU5HKSByZXR1cm4gZmFsc2U7XG4gIHZhciBzYWZlID0gZmFsc2U7XG4gIHRyeSB7XG4gICAgdmFyIGFyciA9IFs3XTtcbiAgICB2YXIgaXRlciA9IGFycltJVEVSQVRPUl0oKTtcbiAgICBpdGVyLm5leHQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB7IGRvbmU6IHNhZmUgPSB0cnVlIH07IH07XG4gICAgYXJyW0lURVJBVE9SXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGl0ZXI7IH07XG4gICAgZXhlYyhhcnIpO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbiAgcmV0dXJuIHNhZmU7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///57\n")},function(module,exports,__webpack_require__){"use strict";eval("\n\nvar classof = __webpack_require__(44);\nvar builtinExec = RegExp.prototype.exec;\n\n // `RegExpExec` abstract operation\n// https://tc39.github.io/ecma262/#sec-regexpexec\nmodule.exports = function (R, S) {\n var exec = R.exec;\n if (typeof exec === 'function') {\n var result = exec.call(R, S);\n if (typeof result !== 'object') {\n throw new TypeError('RegExp exec method returned something other than an Object or null');\n }\n return result;\n }\n if (classof(R) !== 'RegExp') {\n throw new TypeError('RegExp#exec called on incompatible receiver');\n }\n return builtinExec.call(R, S);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcmVnZXhwLWV4ZWMtYWJzdHJhY3QuanM/NWYxYiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixjQUFjLG1CQUFPLENBQUMsRUFBWTtBQUNsQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiI1OC5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuL19jbGFzc29mJyk7XG52YXIgYnVpbHRpbkV4ZWMgPSBSZWdFeHAucHJvdG90eXBlLmV4ZWM7XG5cbiAvLyBgUmVnRXhwRXhlY2AgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1yZWdleHBleGVjXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChSLCBTKSB7XG4gIHZhciBleGVjID0gUi5leGVjO1xuICBpZiAodHlwZW9mIGV4ZWMgPT09ICdmdW5jdGlvbicpIHtcbiAgICB2YXIgcmVzdWx0ID0gZXhlYy5jYWxsKFIsIFMpO1xuICAgIGlmICh0eXBlb2YgcmVzdWx0ICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUmVnRXhwIGV4ZWMgbWV0aG9kIHJldHVybmVkIHNvbWV0aGluZyBvdGhlciB0aGFuIGFuIE9iamVjdCBvciBudWxsJyk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgaWYgKGNsYXNzb2YoUikgIT09ICdSZWdFeHAnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUmVnRXhwI2V4ZWMgY2FsbGVkIG9uIGluY29tcGF0aWJsZSByZWNlaXZlcicpO1xuICB9XG4gIHJldHVybiBidWlsdGluRXhlYy5jYWxsKFIsIFMpO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///58\n")},function(module,exports,__webpack_require__){"use strict";eval("\n__webpack_require__(113);\nvar redefine = __webpack_require__(12);\nvar hide = __webpack_require__(11);\nvar fails = __webpack_require__(3);\nvar defined = __webpack_require__(24);\nvar wks = __webpack_require__(5);\nvar regexpExec = __webpack_require__(87);\n\nvar SPECIES = wks('species');\n\nvar REPLACE_SUPPORTS_NAMED_GROUPS = !fails(function () {\n // #replace needs built-in support for named groups.\n // #match works fine because it just return the exec results, even if it has\n // a \"grops\" property.\n var re = /./;\n re.exec = function () {\n var result = [];\n result.groups = { a: '7' };\n return result;\n };\n return ''.replace(re, '$') !== '7';\n});\n\nvar SPLIT_WORKS_WITH_OVERWRITTEN_EXEC = (function () {\n // Chrome 51 has a buggy \"split\" implementation when RegExp#exec !== nativeExec\n var re = /(?:)/;\n var originalExec = re.exec;\n re.exec = function () { return originalExec.apply(this, arguments); };\n var result = 'ab'.split(re);\n return result.length === 2 && result[0] === 'a' && result[1] === 'b';\n})();\n\nmodule.exports = function (KEY, length, exec) {\n var SYMBOL = wks(KEY);\n\n var DELEGATES_TO_SYMBOL = !fails(function () {\n // String methods call symbol-named RegEp methods\n var O = {};\n O[SYMBOL] = function () { return 7; };\n return ''[KEY](O) != 7;\n });\n\n var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL ? !fails(function () {\n // Symbol-named RegExp methods call .exec\n var execCalled = false;\n var re = /a/;\n re.exec = function () { execCalled = true; return null; };\n if (KEY === 'split') {\n // RegExp[@@split] doesn't call the regex's exec method, but first creates\n // a new one. We need to return the patched regex when creating the new one.\n re.constructor = {};\n re.constructor[SPECIES] = function () { return re; };\n }\n re[SYMBOL]('');\n return !execCalled;\n }) : undefined;\n\n if (\n !DELEGATES_TO_SYMBOL ||\n !DELEGATES_TO_EXEC ||\n (KEY === 'replace' && !REPLACE_SUPPORTS_NAMED_GROUPS) ||\n (KEY === 'split' && !SPLIT_WORKS_WITH_OVERWRITTEN_EXEC)\n ) {\n var nativeRegExpMethod = /./[SYMBOL];\n var fns = exec(\n defined,\n SYMBOL,\n ''[KEY],\n function maybeCallNative(nativeMethod, regexp, str, arg2, forceStringMethod) {\n if (regexp.exec === regexpExec) {\n if (DELEGATES_TO_SYMBOL && !forceStringMethod) {\n // The native String method already delegates to @@method (this\n // polyfilled function), leasing to infinite recursion.\n // We avoid it by directly calling the native @@method method.\n return { done: true, value: nativeRegExpMethod.call(regexp, str, arg2) };\n }\n return { done: true, value: nativeMethod.call(str, regexp, arg2) };\n }\n return { done: false };\n }\n );\n var strfn = fns[0];\n var rxfn = fns[1];\n\n redefine(String.prototype, KEY, strfn);\n hide(RegExp.prototype, SYMBOL, length == 2\n // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)\n // 21.2.5.11 RegExp.prototype[@@split](string, limit)\n ? function (string, arg) { return rxfn.call(string, this, arg); }\n // 21.2.5.6 RegExp.prototype[@@match](string)\n // 21.2.5.9 RegExp.prototype[@@search](string)\n : function (string) { return rxfn.call(string, this); }\n );\n }\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZml4LXJlLXdrcy5qcz8yMTRmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsbUJBQU8sQ0FBQyxHQUFtQjtBQUMzQixlQUFlLG1CQUFPLENBQUMsRUFBYTtBQUNwQyxXQUFXLG1CQUFPLENBQUMsRUFBUztBQUM1QixZQUFZLG1CQUFPLENBQUMsQ0FBVTtBQUM5QixjQUFjLG1CQUFPLENBQUMsRUFBWTtBQUNsQyxVQUFVLG1CQUFPLENBQUMsQ0FBUTtBQUMxQixpQkFBaUIsbUJBQU8sQ0FBQyxFQUFnQjs7QUFFekM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5Qiw0Q0FBNEM7QUFDckU7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkIsVUFBVTtBQUN2QztBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkIsbUJBQW1CLGFBQWE7QUFDM0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkMsV0FBVztBQUN4RDtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0I7QUFDcEI7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0MscUNBQXFDO0FBQ3JFO0FBQ0E7QUFDQSwyQkFBMkIsZ0NBQWdDO0FBQzNEO0FBQ0E7QUFDQSIsImZpbGUiOiI1OS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4vZXM2LnJlZ2V4cC5leGVjJyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG52YXIgd2tzID0gcmVxdWlyZSgnLi9fd2tzJyk7XG52YXIgcmVnZXhwRXhlYyA9IHJlcXVpcmUoJy4vX3JlZ2V4cC1leGVjJyk7XG5cbnZhciBTUEVDSUVTID0gd2tzKCdzcGVjaWVzJyk7XG5cbnZhciBSRVBMQUNFX1NVUFBPUlRTX05BTUVEX0dST1VQUyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vICNyZXBsYWNlIG5lZWRzIGJ1aWx0LWluIHN1cHBvcnQgZm9yIG5hbWVkIGdyb3Vwcy5cbiAgLy8gI21hdGNoIHdvcmtzIGZpbmUgYmVjYXVzZSBpdCBqdXN0IHJldHVybiB0aGUgZXhlYyByZXN1bHRzLCBldmVuIGlmIGl0IGhhc1xuICAvLyBhIFwiZ3JvcHNcIiBwcm9wZXJ0eS5cbiAgdmFyIHJlID0gLy4vO1xuICByZS5leGVjID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICByZXN1bHQuZ3JvdXBzID0geyBhOiAnNycgfTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuICByZXR1cm4gJycucmVwbGFjZShyZSwgJyQ8YT4nKSAhPT0gJzcnO1xufSk7XG5cbnZhciBTUExJVF9XT1JLU19XSVRIX09WRVJXUklUVEVOX0VYRUMgPSAoZnVuY3Rpb24gKCkge1xuICAvLyBDaHJvbWUgNTEgaGFzIGEgYnVnZ3kgXCJzcGxpdFwiIGltcGxlbWVudGF0aW9uIHdoZW4gUmVnRXhwI2V4ZWMgIT09IG5hdGl2ZUV4ZWNcbiAgdmFyIHJlID0gLyg/OikvO1xuICB2YXIgb3JpZ2luYWxFeGVjID0gcmUuZXhlYztcbiAgcmUuZXhlYyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG9yaWdpbmFsRXhlYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9O1xuICB2YXIgcmVzdWx0ID0gJ2FiJy5zcGxpdChyZSk7XG4gIHJldHVybiByZXN1bHQubGVuZ3RoID09PSAyICYmIHJlc3VsdFswXSA9PT0gJ2EnICYmIHJlc3VsdFsxXSA9PT0gJ2InO1xufSkoKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoS0VZLCBsZW5ndGgsIGV4ZWMpIHtcbiAgdmFyIFNZTUJPTCA9IHdrcyhLRVkpO1xuXG4gIHZhciBERUxFR0FURVNfVE9fU1lNQk9MID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAvLyBTdHJpbmcgbWV0aG9kcyBjYWxsIHN5bWJvbC1uYW1lZCBSZWdFcCBtZXRob2RzXG4gICAgdmFyIE8gPSB7fTtcbiAgICBPW1NZTUJPTF0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9O1xuICAgIHJldHVybiAnJ1tLRVldKE8pICE9IDc7XG4gIH0pO1xuXG4gIHZhciBERUxFR0FURVNfVE9fRVhFQyA9IERFTEVHQVRFU19UT19TWU1CT0wgPyAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIFN5bWJvbC1uYW1lZCBSZWdFeHAgbWV0aG9kcyBjYWxsIC5leGVjXG4gICAgdmFyIGV4ZWNDYWxsZWQgPSBmYWxzZTtcbiAgICB2YXIgcmUgPSAvYS87XG4gICAgcmUuZXhlYyA9IGZ1bmN0aW9uICgpIHsgZXhlY0NhbGxlZCA9IHRydWU7IHJldHVybiBudWxsOyB9O1xuICAgIGlmIChLRVkgPT09ICdzcGxpdCcpIHtcbiAgICAgIC8vIFJlZ0V4cFtAQHNwbGl0XSBkb2Vzbid0IGNhbGwgdGhlIHJlZ2V4J3MgZXhlYyBtZXRob2QsIGJ1dCBmaXJzdCBjcmVhdGVzXG4gICAgICAvLyBhIG5ldyBvbmUuIFdlIG5lZWQgdG8gcmV0dXJuIHRoZSBwYXRjaGVkIHJlZ2V4IHdoZW4gY3JlYXRpbmcgdGhlIG5ldyBvbmUuXG4gICAgICByZS5jb25zdHJ1Y3RvciA9IHt9O1xuICAgICAgcmUuY29uc3RydWN0b3JbU1BFQ0lFU10gPSBmdW5jdGlvbiAoKSB7IHJldHVybiByZTsgfTtcbiAgICB9XG4gICAgcmVbU1lNQk9MXSgnJyk7XG4gICAgcmV0dXJuICFleGVjQ2FsbGVkO1xuICB9KSA6IHVuZGVmaW5lZDtcblxuICBpZiAoXG4gICAgIURFTEVHQVRFU19UT19TWU1CT0wgfHxcbiAgICAhREVMRUdBVEVTX1RPX0VYRUMgfHxcbiAgICAoS0VZID09PSAncmVwbGFjZScgJiYgIVJFUExBQ0VfU1VQUE9SVFNfTkFNRURfR1JPVVBTKSB8fFxuICAgIChLRVkgPT09ICdzcGxpdCcgJiYgIVNQTElUX1dPUktTX1dJVEhfT1ZFUldSSVRURU5fRVhFQylcbiAgKSB7XG4gICAgdmFyIG5hdGl2ZVJlZ0V4cE1ldGhvZCA9IC8uL1tTWU1CT0xdO1xuICAgIHZhciBmbnMgPSBleGVjKFxuICAgICAgZGVmaW5lZCxcbiAgICAgIFNZTUJPTCxcbiAgICAgICcnW0tFWV0sXG4gICAgICBmdW5jdGlvbiBtYXliZUNhbGxOYXRpdmUobmF0aXZlTWV0aG9kLCByZWdleHAsIHN0ciwgYXJnMiwgZm9yY2VTdHJpbmdNZXRob2QpIHtcbiAgICAgICAgaWYgKHJlZ2V4cC5leGVjID09PSByZWdleHBFeGVjKSB7XG4gICAgICAgICAgaWYgKERFTEVHQVRFU19UT19TWU1CT0wgJiYgIWZvcmNlU3RyaW5nTWV0aG9kKSB7XG4gICAgICAgICAgICAvLyBUaGUgbmF0aXZlIFN0cmluZyBtZXRob2QgYWxyZWFkeSBkZWxlZ2F0ZXMgdG8gQEBtZXRob2QgKHRoaXNcbiAgICAgICAgICAgIC8vIHBvbHlmaWxsZWQgZnVuY3Rpb24pLCBsZWFzaW5nIHRvIGluZmluaXRlIHJlY3Vyc2lvbi5cbiAgICAgICAgICAgIC8vIFdlIGF2b2lkIGl0IGJ5IGRpcmVjdGx5IGNhbGxpbmcgdGhlIG5hdGl2ZSBAQG1ldGhvZCBtZXRob2QuXG4gICAgICAgICAgICByZXR1cm4geyBkb25lOiB0cnVlLCB2YWx1ZTogbmF0aXZlUmVnRXhwTWV0aG9kLmNhbGwocmVnZXhwLCBzdHIsIGFyZzIpIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB7IGRvbmU6IHRydWUsIHZhbHVlOiBuYXRpdmVNZXRob2QuY2FsbChzdHIsIHJlZ2V4cCwgYXJnMikgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBkb25lOiBmYWxzZSB9O1xuICAgICAgfVxuICAgICk7XG4gICAgdmFyIHN0cmZuID0gZm5zWzBdO1xuICAgIHZhciByeGZuID0gZm5zWzFdO1xuXG4gICAgcmVkZWZpbmUoU3RyaW5nLnByb3RvdHlwZSwgS0VZLCBzdHJmbik7XG4gICAgaGlkZShSZWdFeHAucHJvdG90eXBlLCBTWU1CT0wsIGxlbmd0aCA9PSAyXG4gICAgICAvLyAyMS4yLjUuOCBSZWdFeHAucHJvdG90eXBlW0BAcmVwbGFjZV0oc3RyaW5nLCByZXBsYWNlVmFsdWUpXG4gICAgICAvLyAyMS4yLjUuMTEgUmVnRXhwLnByb3RvdHlwZVtAQHNwbGl0XShzdHJpbmcsIGxpbWl0KVxuICAgICAgPyBmdW5jdGlvbiAoc3RyaW5nLCBhcmcpIHsgcmV0dXJuIHJ4Zm4uY2FsbChzdHJpbmcsIHRoaXMsIGFyZyk7IH1cbiAgICAgIC8vIDIxLjIuNS42IFJlZ0V4cC5wcm90b3R5cGVbQEBtYXRjaF0oc3RyaW5nKVxuICAgICAgLy8gMjEuMi41LjkgUmVnRXhwLnByb3RvdHlwZVtAQHNlYXJjaF0oc3RyaW5nKVxuICAgICAgOiBmdW5jdGlvbiAoc3RyaW5nKSB7IHJldHVybiByeGZuLmNhbGwoc3RyaW5nLCB0aGlzKTsgfVxuICAgICk7XG4gIH1cbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///59\n")},function(module,exports,__webpack_require__){eval("var global = __webpack_require__(2);\nvar navigator = global.navigator;\n\nmodule.exports = navigator && navigator.userAgent || '';\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdXNlci1hZ2VudC5qcz9hMjVmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGFBQWEsbUJBQU8sQ0FBQyxDQUFXO0FBQ2hDOztBQUVBIiwiZmlsZSI6IjYwLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIG5hdmlnYXRvciA9IGdsb2JhbC5uYXZpZ2F0b3I7XG5cbm1vZHVsZS5leHBvcnRzID0gbmF2aWdhdG9yICYmIG5hdmlnYXRvci51c2VyQWdlbnQgfHwgJyc7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///60\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar global = __webpack_require__(2);\nvar $export = __webpack_require__(0);\nvar redefine = __webpack_require__(12);\nvar redefineAll = __webpack_require__(41);\nvar meta = __webpack_require__(30);\nvar forOf = __webpack_require__(40);\nvar anInstance = __webpack_require__(39);\nvar isObject = __webpack_require__(4);\nvar fails = __webpack_require__(3);\nvar $iterDetect = __webpack_require__(57);\nvar setToStringTag = __webpack_require__(43);\nvar inheritIfRequired = __webpack_require__(73);\n\nmodule.exports = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) {\n var Base = global[NAME];\n var C = Base;\n var ADDER = IS_MAP ? 'set' : 'add';\n var proto = C && C.prototype;\n var O = {};\n var fixMethod = function (KEY) {\n var fn = proto[KEY];\n redefine(proto, KEY,\n KEY == 'delete' ? function (a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'has' ? function has(a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'get' ? function get(a) {\n return IS_WEAK && !isObject(a) ? undefined : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'add' ? function add(a) { fn.call(this, a === 0 ? 0 : a); return this; }\n : function set(a, b) { fn.call(this, a === 0 ? 0 : a, b); return this; }\n );\n };\n if (typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function () {\n new C().entries().next();\n }))) {\n // create collection constructor\n C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);\n redefineAll(C.prototype, methods);\n meta.NEED = true;\n } else {\n var instance = new C();\n // early implementations not supports chaining\n var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;\n // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false\n var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); });\n // most early implementations doesn't supports iterables, most modern - not close it correctly\n var ACCEPT_ITERABLES = $iterDetect(function (iter) { new C(iter); }); // eslint-disable-line no-new\n // for early implementations -0 and +0 not the same\n var BUGGY_ZERO = !IS_WEAK && fails(function () {\n // V8 ~ Chromium 42- fails only with 5+ elements\n var $instance = new C();\n var index = 5;\n while (index--) $instance[ADDER](index, index);\n return !$instance.has(-0);\n });\n if (!ACCEPT_ITERABLES) {\n C = wrapper(function (target, iterable) {\n anInstance(target, C, NAME);\n var that = inheritIfRequired(new Base(), target, C);\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n return that;\n });\n C.prototype = proto;\n proto.constructor = C;\n }\n if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {\n fixMethod('delete');\n fixMethod('has');\n IS_MAP && fixMethod('get');\n }\n if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);\n // weak collections should not contains .clear method\n if (IS_WEAK && proto.clear) delete proto.clear;\n }\n\n setToStringTag(C, NAME);\n\n O[NAME] = C;\n $export($export.G + $export.W + $export.F * (C != Base), O);\n\n if (!IS_WEAK) common.setStrong(C, NAME, IS_MAP);\n\n return C;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY29sbGVjdGlvbi5qcz9lMGI4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsYUFBYSxtQkFBTyxDQUFDLENBQVc7QUFDaEMsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsZUFBZSxtQkFBTyxDQUFDLEVBQWE7QUFDcEMsa0JBQWtCLG1CQUFPLENBQUMsRUFBaUI7QUFDM0MsV0FBVyxtQkFBTyxDQUFDLEVBQVM7QUFDNUIsWUFBWSxtQkFBTyxDQUFDLEVBQVc7QUFDL0IsaUJBQWlCLG1CQUFPLENBQUMsRUFBZ0I7QUFDekMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsWUFBWSxtQkFBTyxDQUFDLENBQVU7QUFDOUIsa0JBQWtCLG1CQUFPLENBQUMsRUFBZ0I7QUFDMUMscUJBQXFCLG1CQUFPLENBQUMsRUFBc0I7QUFDbkQsd0JBQXdCLG1CQUFPLENBQUMsRUFBd0I7O0FBRXhEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxPQUFPO0FBQ1A7QUFDQSxPQUFPLG1DQUFtQyxnQ0FBZ0MsYUFBYTtBQUN2Riw4QkFBOEIsbUNBQW1DLGFBQWE7QUFDOUU7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLHFEQUFxRDtBQUNyRDtBQUNBLGtEQUFrRCxpQkFBaUIsRUFBRTtBQUNyRTtBQUNBLHdEQUF3RCxhQUFhLEVBQUUsRUFBRTtBQUN6RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSIsImZpbGUiOiI2MS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIHJlZGVmaW5lQWxsID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUtYWxsJyk7XG52YXIgbWV0YSA9IHJlcXVpcmUoJy4vX21ldGEnKTtcbnZhciBmb3JPZiA9IHJlcXVpcmUoJy4vX2Zvci1vZicpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuL19hbi1pbnN0YW5jZScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyICRpdGVyRGV0ZWN0ID0gcmVxdWlyZSgnLi9faXRlci1kZXRlY3QnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgaW5oZXJpdElmUmVxdWlyZWQgPSByZXF1aXJlKCcuL19pbmhlcml0LWlmLXJlcXVpcmVkJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE5BTUUsIHdyYXBwZXIsIG1ldGhvZHMsIGNvbW1vbiwgSVNfTUFQLCBJU19XRUFLKSB7XG4gIHZhciBCYXNlID0gZ2xvYmFsW05BTUVdO1xuICB2YXIgQyA9IEJhc2U7XG4gIHZhciBBRERFUiA9IElTX01BUCA/ICdzZXQnIDogJ2FkZCc7XG4gIHZhciBwcm90byA9IEMgJiYgQy5wcm90b3R5cGU7XG4gIHZhciBPID0ge307XG4gIHZhciBmaXhNZXRob2QgPSBmdW5jdGlvbiAoS0VZKSB7XG4gICAgdmFyIGZuID0gcHJvdG9bS0VZXTtcbiAgICByZWRlZmluZShwcm90bywgS0VZLFxuICAgICAgS0VZID09ICdkZWxldGUnID8gZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgcmV0dXJuIElTX1dFQUsgJiYgIWlzT2JqZWN0KGEpID8gZmFsc2UgOiBmbi5jYWxsKHRoaXMsIGEgPT09IDAgPyAwIDogYSk7XG4gICAgICB9IDogS0VZID09ICdoYXMnID8gZnVuY3Rpb24gaGFzKGEpIHtcbiAgICAgICAgcmV0dXJuIElTX1dFQUsgJiYgIWlzT2JqZWN0KGEpID8gZmFsc2UgOiBmbi5jYWxsKHRoaXMsIGEgPT09IDAgPyAwIDogYSk7XG4gICAgICB9IDogS0VZID09ICdnZXQnID8gZnVuY3Rpb24gZ2V0KGEpIHtcbiAgICAgICAgcmV0dXJuIElTX1dFQUsgJiYgIWlzT2JqZWN0KGEpID8gdW5kZWZpbmVkIDogZm4uY2FsbCh0aGlzLCBhID09PSAwID8gMCA6IGEpO1xuICAgICAgfSA6IEtFWSA9PSAnYWRkJyA/IGZ1bmN0aW9uIGFkZChhKSB7IGZuLmNhbGwodGhpcywgYSA9PT0gMCA/IDAgOiBhKTsgcmV0dXJuIHRoaXM7IH1cbiAgICAgICAgOiBmdW5jdGlvbiBzZXQoYSwgYikgeyBmbi5jYWxsKHRoaXMsIGEgPT09IDAgPyAwIDogYSwgYik7IHJldHVybiB0aGlzOyB9XG4gICAgKTtcbiAgfTtcbiAgaWYgKHR5cGVvZiBDICE9ICdmdW5jdGlvbicgfHwgIShJU19XRUFLIHx8IHByb3RvLmZvckVhY2ggJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICBuZXcgQygpLmVudHJpZXMoKS5uZXh0KCk7XG4gIH0pKSkge1xuICAgIC8vIGNyZWF0ZSBjb2xsZWN0aW9uIGNvbnN0cnVjdG9yXG4gICAgQyA9IGNvbW1vbi5nZXRDb25zdHJ1Y3Rvcih3cmFwcGVyLCBOQU1FLCBJU19NQVAsIEFEREVSKTtcbiAgICByZWRlZmluZUFsbChDLnByb3RvdHlwZSwgbWV0aG9kcyk7XG4gICAgbWV0YS5ORUVEID0gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgaW5zdGFuY2UgPSBuZXcgQygpO1xuICAgIC8vIGVhcmx5IGltcGxlbWVudGF0aW9ucyBub3Qgc3VwcG9ydHMgY2hhaW5pbmdcbiAgICB2YXIgSEFTTlRfQ0hBSU5JTkcgPSBpbnN0YW5jZVtBRERFUl0oSVNfV0VBSyA/IHt9IDogLTAsIDEpICE9IGluc3RhbmNlO1xuICAgIC8vIFY4IH4gIENocm9taXVtIDQwLSB3ZWFrLWNvbGxlY3Rpb25zIHRocm93cyBvbiBwcmltaXRpdmVzLCBidXQgc2hvdWxkIHJldHVybiBmYWxzZVxuICAgIHZhciBUSFJPV1NfT05fUFJJTUlUSVZFUyA9IGZhaWxzKGZ1bmN0aW9uICgpIHsgaW5zdGFuY2UuaGFzKDEpOyB9KTtcbiAgICAvLyBtb3N0IGVhcmx5IGltcGxlbWVudGF0aW9ucyBkb2Vzbid0IHN1cHBvcnRzIGl0ZXJhYmxlcywgbW9zdCBtb2Rlcm4gLSBub3QgY2xvc2UgaXQgY29ycmVjdGx5XG4gICAgdmFyIEFDQ0VQVF9JVEVSQUJMRVMgPSAkaXRlckRldGVjdChmdW5jdGlvbiAoaXRlcikgeyBuZXcgQyhpdGVyKTsgfSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgLy8gZm9yIGVhcmx5IGltcGxlbWVudGF0aW9ucyAtMCBhbmQgKzAgbm90IHRoZSBzYW1lXG4gICAgdmFyIEJVR0dZX1pFUk8gPSAhSVNfV0VBSyAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBWOCB+IENocm9taXVtIDQyLSBmYWlscyBvbmx5IHdpdGggNSsgZWxlbWVudHNcbiAgICAgIHZhciAkaW5zdGFuY2UgPSBuZXcgQygpO1xuICAgICAgdmFyIGluZGV4ID0gNTtcbiAgICAgIHdoaWxlIChpbmRleC0tKSAkaW5zdGFuY2VbQURERVJdKGluZGV4LCBpbmRleCk7XG4gICAgICByZXR1cm4gISRpbnN0YW5jZS5oYXMoLTApO1xuICAgIH0pO1xuICAgIGlmICghQUNDRVBUX0lURVJBQkxFUykge1xuICAgICAgQyA9IHdyYXBwZXIoZnVuY3Rpb24gKHRhcmdldCwgaXRlcmFibGUpIHtcbiAgICAgICAgYW5JbnN0YW5jZSh0YXJnZXQsIEMsIE5BTUUpO1xuICAgICAgICB2YXIgdGhhdCA9IGluaGVyaXRJZlJlcXVpcmVkKG5ldyBCYXNlKCksIHRhcmdldCwgQyk7XG4gICAgICAgIGlmIChpdGVyYWJsZSAhPSB1bmRlZmluZWQpIGZvck9mKGl0ZXJhYmxlLCBJU19NQVAsIHRoYXRbQURERVJdLCB0aGF0KTtcbiAgICAgICAgcmV0dXJuIHRoYXQ7XG4gICAgICB9KTtcbiAgICAgIEMucHJvdG90eXBlID0gcHJvdG87XG4gICAgICBwcm90by5jb25zdHJ1Y3RvciA9IEM7XG4gICAgfVxuICAgIGlmIChUSFJPV1NfT05fUFJJTUlUSVZFUyB8fCBCVUdHWV9aRVJPKSB7XG4gICAgICBmaXhNZXRob2QoJ2RlbGV0ZScpO1xuICAgICAgZml4TWV0aG9kKCdoYXMnKTtcbiAgICAgIElTX01BUCAmJiBmaXhNZXRob2QoJ2dldCcpO1xuICAgIH1cbiAgICBpZiAoQlVHR1lfWkVSTyB8fCBIQVNOVF9DSEFJTklORykgZml4TWV0aG9kKEFEREVSKTtcbiAgICAvLyB3ZWFrIGNvbGxlY3Rpb25zIHNob3VsZCBub3QgY29udGFpbnMgLmNsZWFyIG1ldGhvZFxuICAgIGlmIChJU19XRUFLICYmIHByb3RvLmNsZWFyKSBkZWxldGUgcHJvdG8uY2xlYXI7XG4gIH1cblxuICBzZXRUb1N0cmluZ1RhZyhDLCBOQU1FKTtcblxuICBPW05BTUVdID0gQztcbiAgJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LlcgKyAkZXhwb3J0LkYgKiAoQyAhPSBCYXNlKSwgTyk7XG5cbiAgaWYgKCFJU19XRUFLKSBjb21tb24uc2V0U3Ryb25nKEMsIE5BTUUsIElTX01BUCk7XG5cbiAgcmV0dXJuIEM7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///61\n")},function(module,exports,__webpack_require__){eval("var global = __webpack_require__(2);\nvar hide = __webpack_require__(11);\nvar uid = __webpack_require__(33);\nvar TYPED = uid('typed_array');\nvar VIEW = uid('view');\nvar ABV = !!(global.ArrayBuffer && global.DataView);\nvar CONSTR = ABV;\nvar i = 0;\nvar l = 9;\nvar Typed;\n\nvar TypedArrayConstructors = (\n 'Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array'\n).split(',');\n\nwhile (i < l) {\n if (Typed = global[TypedArrayConstructors[i++]]) {\n hide(Typed.prototype, TYPED, true);\n hide(Typed.prototype, VIEW, true);\n } else CONSTR = false;\n}\n\nmodule.exports = {\n ABV: ABV,\n CONSTR: CONSTR,\n TYPED: TYPED,\n VIEW: VIEW\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdHlwZWQuanM/MGY4OCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxhQUFhLG1CQUFPLENBQUMsQ0FBVztBQUNoQyxXQUFXLG1CQUFPLENBQUMsRUFBUztBQUM1QixVQUFVLG1CQUFPLENBQUMsRUFBUTtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjYyLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi9fdWlkJyk7XG52YXIgVFlQRUQgPSB1aWQoJ3R5cGVkX2FycmF5Jyk7XG52YXIgVklFVyA9IHVpZCgndmlldycpO1xudmFyIEFCViA9ICEhKGdsb2JhbC5BcnJheUJ1ZmZlciAmJiBnbG9iYWwuRGF0YVZpZXcpO1xudmFyIENPTlNUUiA9IEFCVjtcbnZhciBpID0gMDtcbnZhciBsID0gOTtcbnZhciBUeXBlZDtcblxudmFyIFR5cGVkQXJyYXlDb25zdHJ1Y3RvcnMgPSAoXG4gICdJbnQ4QXJyYXksVWludDhBcnJheSxVaW50OENsYW1wZWRBcnJheSxJbnQxNkFycmF5LFVpbnQxNkFycmF5LEludDMyQXJyYXksVWludDMyQXJyYXksRmxvYXQzMkFycmF5LEZsb2F0NjRBcnJheSdcbikuc3BsaXQoJywnKTtcblxud2hpbGUgKGkgPCBsKSB7XG4gIGlmIChUeXBlZCA9IGdsb2JhbFtUeXBlZEFycmF5Q29uc3RydWN0b3JzW2krK11dKSB7XG4gICAgaGlkZShUeXBlZC5wcm90b3R5cGUsIFRZUEVELCB0cnVlKTtcbiAgICBoaWRlKFR5cGVkLnByb3RvdHlwZSwgVklFVywgdHJ1ZSk7XG4gIH0gZWxzZSBDT05TVFIgPSBmYWxzZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEFCVjogQUJWLFxuICBDT05TVFI6IENPTlNUUixcbiAgVFlQRUQ6IFRZUEVELFxuICBWSUVXOiBWSUVXXG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///62\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// Forced replacement prototype accessors methods\nmodule.exports = __webpack_require__(29) || !__webpack_require__(3)(function () {\n var K = Math.random();\n // In FF throws only define methods\n // eslint-disable-next-line no-undef, no-useless-call\n __defineSetter__.call(null, K, function () { /* empty */ });\n delete __webpack_require__(2)[K];\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWZvcmNlZC1wYW0uanM/YzViNCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsaUJBQWlCLG1CQUFPLENBQUMsRUFBWSxNQUFNLG1CQUFPLENBQUMsQ0FBVTtBQUM3RDtBQUNBO0FBQ0E7QUFDQSw4Q0FBOEMsY0FBYztBQUM1RCxTQUFTLG1CQUFPLENBQUMsQ0FBVztBQUM1QixDQUFDIiwiZmlsZSI6IjYzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gRm9yY2VkIHJlcGxhY2VtZW50IHByb3RvdHlwZSBhY2Nlc3NvcnMgbWV0aG9kc1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19saWJyYXJ5JykgfHwgIXJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICB2YXIgSyA9IE1hdGgucmFuZG9tKCk7XG4gIC8vIEluIEZGIHRocm93cyBvbmx5IGRlZmluZSBtZXRob2RzXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZiwgbm8tdXNlbGVzcy1jYWxsXG4gIF9fZGVmaW5lU2V0dGVyX18uY2FsbChudWxsLCBLLCBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pO1xuICBkZWxldGUgcmVxdWlyZSgnLi9fZ2xvYmFsJylbS107XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///63\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// https://tc39.github.io/proposal-setmap-offrom/\nvar $export = __webpack_require__(0);\n\nmodule.exports = function (COLLECTION) {\n $export($export.S, COLLECTION, { of: function of() {\n var length = arguments.length;\n var A = new Array(length);\n while (length--) A[length] = arguments[length];\n return new this(A);\n } });\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2V0LWNvbGxlY3Rpb24tb2YuanM/YzZhMSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDO0FBQ0Esa0NBQWtDO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRyxFQUFFO0FBQ0wiLCJmaWxlIjoiNjQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChDT0xMRUNUSU9OKSB7XG4gICRleHBvcnQoJGV4cG9ydC5TLCBDT0xMRUNUSU9OLCB7IG9mOiBmdW5jdGlvbiBvZigpIHtcbiAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgQSA9IG5ldyBBcnJheShsZW5ndGgpO1xuICAgIHdoaWxlIChsZW5ndGgtLSkgQVtsZW5ndGhdID0gYXJndW1lbnRzW2xlbmd0aF07XG4gICAgcmV0dXJuIG5ldyB0aGlzKEEpO1xuICB9IH0pO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///64\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// https://tc39.github.io/proposal-setmap-offrom/\nvar $export = __webpack_require__(0);\nvar aFunction = __webpack_require__(10);\nvar ctx = __webpack_require__(19);\nvar forOf = __webpack_require__(40);\n\nmodule.exports = function (COLLECTION) {\n $export($export.S, COLLECTION, { from: function from(source /* , mapFn, thisArg */) {\n var mapFn = arguments[1];\n var mapping, A, n, cb;\n aFunction(this);\n mapping = mapFn !== undefined;\n if (mapping) aFunction(mapFn);\n if (source == undefined) return new this();\n A = [];\n if (mapping) {\n n = 0;\n cb = ctx(mapFn, arguments[2], 2);\n forOf(source, false, function (nextItem) {\n A.push(cb(nextItem, n++));\n });\n } else {\n forOf(source, false, A.push, A);\n }\n return new this(A);\n } });\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2V0LWNvbGxlY3Rpb24tZnJvbS5qcz8yOGU0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDLFVBQVUsbUJBQU8sQ0FBQyxFQUFRO0FBQzFCLFlBQVksbUJBQU8sQ0FBQyxFQUFXOztBQUUvQjtBQUNBLGtDQUFrQztBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEdBQUcsRUFBRTtBQUNMIiwiZmlsZSI6IjY1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgZm9yT2YgPSByZXF1aXJlKCcuL19mb3Itb2YnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQ09MTEVDVElPTikge1xuICAkZXhwb3J0KCRleHBvcnQuUywgQ09MTEVDVElPTiwgeyBmcm9tOiBmdW5jdGlvbiBmcm9tKHNvdXJjZSAvKiAsIG1hcEZuLCB0aGlzQXJnICovKSB7XG4gICAgdmFyIG1hcEZuID0gYXJndW1lbnRzWzFdO1xuICAgIHZhciBtYXBwaW5nLCBBLCBuLCBjYjtcbiAgICBhRnVuY3Rpb24odGhpcyk7XG4gICAgbWFwcGluZyA9IG1hcEZuICE9PSB1bmRlZmluZWQ7XG4gICAgaWYgKG1hcHBpbmcpIGFGdW5jdGlvbihtYXBGbik7XG4gICAgaWYgKHNvdXJjZSA9PSB1bmRlZmluZWQpIHJldHVybiBuZXcgdGhpcygpO1xuICAgIEEgPSBbXTtcbiAgICBpZiAobWFwcGluZykge1xuICAgICAgbiA9IDA7XG4gICAgICBjYiA9IGN0eChtYXBGbiwgYXJndW1lbnRzWzJdLCAyKTtcbiAgICAgIGZvck9mKHNvdXJjZSwgZmFsc2UsIGZ1bmN0aW9uIChuZXh0SXRlbSkge1xuICAgICAgICBBLnB1c2goY2IobmV4dEl0ZW0sIG4rKykpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvck9mKHNvdXJjZSwgZmFsc2UsIEEucHVzaCwgQSk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgdGhpcyhBKTtcbiAgfSB9KTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///65\n")},function(module,exports,__webpack_require__){eval("var isObject = __webpack_require__(4);\nvar document = __webpack_require__(2).document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n return is ? document.createElement(it) : {};\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZG9tLWNyZWF0ZS5qcz8yMzBlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGVBQWUsbUJBQU8sQ0FBQyxDQUFXO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiNjYuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBkb2N1bWVudCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLmRvY3VtZW50O1xuLy8gdHlwZW9mIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQgaXMgJ29iamVjdCcgaW4gb2xkIElFXG52YXIgaXMgPSBpc09iamVjdChkb2N1bWVudCkgJiYgaXNPYmplY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXMgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGl0KSA6IHt9O1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///66\n")},function(module,exports,__webpack_require__){eval("var global = __webpack_require__(2);\nvar core = __webpack_require__(18);\nvar LIBRARY = __webpack_require__(29);\nvar wksExt = __webpack_require__(95);\nvar defineProperty = __webpack_require__(8).f;\nmodule.exports = function (name) {\n var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});\n if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) });\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fd2tzLWRlZmluZS5qcz8zYTcyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGFBQWEsbUJBQU8sQ0FBQyxDQUFXO0FBQ2hDLFdBQVcsbUJBQU8sQ0FBQyxFQUFTO0FBQzVCLGNBQWMsbUJBQU8sQ0FBQyxFQUFZO0FBQ2xDLGFBQWEsbUJBQU8sQ0FBQyxFQUFZO0FBQ2pDLHFCQUFxQixtQkFBTyxDQUFDLENBQWM7QUFDM0M7QUFDQSwwREFBMEQsc0JBQXNCO0FBQ2hGLGtGQUFrRix3QkFBd0I7QUFDMUciLCJmaWxlIjoiNjcuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgY29yZSA9IHJlcXVpcmUoJy4vX2NvcmUnKTtcbnZhciBMSUJSQVJZID0gcmVxdWlyZSgnLi9fbGlicmFyeScpO1xudmFyIHdrc0V4dCA9IHJlcXVpcmUoJy4vX3drcy1leHQnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIHZhciAkU3ltYm9sID0gY29yZS5TeW1ib2wgfHwgKGNvcmUuU3ltYm9sID0gTElCUkFSWSA/IHt9IDogZ2xvYmFsLlN5bWJvbCB8fCB7fSk7XG4gIGlmIChuYW1lLmNoYXJBdCgwKSAhPSAnXycgJiYgIShuYW1lIGluICRTeW1ib2wpKSBkZWZpbmVQcm9wZXJ0eSgkU3ltYm9sLCBuYW1lLCB7IHZhbHVlOiB3a3NFeHQuZihuYW1lKSB9KTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///67\n")},function(module,exports,__webpack_require__){eval("var shared = __webpack_require__(47)('keys');\nvar uid = __webpack_require__(33);\nmodule.exports = function (key) {\n return shared[key] || (shared[key] = uid(key));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2hhcmVkLWtleS5qcz82MTNiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGFBQWEsbUJBQU8sQ0FBQyxFQUFXO0FBQ2hDLFVBQVUsbUJBQU8sQ0FBQyxFQUFRO0FBQzFCO0FBQ0E7QUFDQSIsImZpbGUiOiI2OC5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBzaGFyZWQgPSByZXF1aXJlKCcuL19zaGFyZWQnKSgna2V5cycpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4vX3VpZCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiBzaGFyZWRba2V5XSB8fCAoc2hhcmVkW2tleV0gPSB1aWQoa2V5KSk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///68\n")},function(module,exports){eval("// IE 8- don't enum bug keys\nmodule.exports = (\n 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZW51bS1idWcta2V5cy5qcz9lMTFlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjY5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gSUUgOC0gZG9uJ3QgZW51bSBidWcga2V5c1xubW9kdWxlLmV4cG9ydHMgPSAoXG4gICdjb25zdHJ1Y3RvcixoYXNPd25Qcm9wZXJ0eSxpc1Byb3RvdHlwZU9mLHByb3BlcnR5SXNFbnVtZXJhYmxlLHRvTG9jYWxlU3RyaW5nLHRvU3RyaW5nLHZhbHVlT2YnXG4pLnNwbGl0KCcsJyk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///69\n")},function(module,exports,__webpack_require__){eval("var document = __webpack_require__(2).document;\nmodule.exports = document && document.documentElement;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faHRtbC5qcz9mYWIyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGVBQWUsbUJBQU8sQ0FBQyxDQUFXO0FBQ2xDIiwiZmlsZSI6IjcwLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGRvY3VtZW50ID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuZG9jdW1lbnQ7XG5tb2R1bGUuZXhwb3J0cyA9IGRvY3VtZW50ICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///70\n")},function(module,exports,__webpack_require__){eval("// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nvar isObject = __webpack_require__(4);\nvar anObject = __webpack_require__(1);\nvar check = function (O, proto) {\n anObject(O);\n if (!isObject(proto) && proto !== null) throw TypeError(proto + \": can't set as prototype!\");\n};\nmodule.exports = {\n set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line\n function (test, buggy, set) {\n try {\n set = __webpack_require__(19)(Function.call, __webpack_require__(16).f(Object.prototype, '__proto__').set, 2);\n set(test, []);\n buggy = !(test instanceof Array);\n } catch (e) { buggy = true; }\n return function setPrototypeOf(O, proto) {\n check(O, proto);\n if (buggy) O.__proto__ = proto;\n else set(O, proto);\n return O;\n };\n }({}, false) : undefined),\n check: check\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2V0LXByb3RvLmpzPzhiOTciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrREFBa0Q7QUFDbEQ7QUFDQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxFQUFRLGlCQUFpQixtQkFBTyxDQUFDLEVBQWdCO0FBQ3ZFO0FBQ0E7QUFDQSxPQUFPLFlBQVksY0FBYztBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLLEdBQUc7QUFDUjtBQUNBIiwiZmlsZSI6IjcxLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gV29ya3Mgd2l0aCBfX3Byb3RvX18gb25seS4gT2xkIHY4IGNhbid0IHdvcmsgd2l0aCBudWxsIHByb3RvIG9iamVjdHMuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90byAqL1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBjaGVjayA9IGZ1bmN0aW9uIChPLCBwcm90bykge1xuICBhbk9iamVjdChPKTtcbiAgaWYgKCFpc09iamVjdChwcm90bykgJiYgcHJvdG8gIT09IG51bGwpIHRocm93IFR5cGVFcnJvcihwcm90byArIFwiOiBjYW4ndCBzZXQgYXMgcHJvdG90eXBlIVwiKTtcbn07XG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc2V0OiBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgKCdfX3Byb3RvX18nIGluIHt9ID8gLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICAgIGZ1bmN0aW9uICh0ZXN0LCBidWdneSwgc2V0KSB7XG4gICAgICB0cnkge1xuICAgICAgICBzZXQgPSByZXF1aXJlKCcuL19jdHgnKShGdW5jdGlvbi5jYWxsLCByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpLmYoT2JqZWN0LnByb3RvdHlwZSwgJ19fcHJvdG9fXycpLnNldCwgMik7XG4gICAgICAgIHNldCh0ZXN0LCBbXSk7XG4gICAgICAgIGJ1Z2d5ID0gISh0ZXN0IGluc3RhbmNlb2YgQXJyYXkpO1xuICAgICAgfSBjYXRjaCAoZSkgeyBidWdneSA9IHRydWU7IH1cbiAgICAgIHJldHVybiBmdW5jdGlvbiBzZXRQcm90b3R5cGVPZihPLCBwcm90bykge1xuICAgICAgICBjaGVjayhPLCBwcm90byk7XG4gICAgICAgIGlmIChidWdneSkgTy5fX3Byb3RvX18gPSBwcm90bztcbiAgICAgICAgZWxzZSBzZXQoTywgcHJvdG8pO1xuICAgICAgICByZXR1cm4gTztcbiAgICAgIH07XG4gICAgfSh7fSwgZmFsc2UpIDogdW5kZWZpbmVkKSxcbiAgY2hlY2s6IGNoZWNrXG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///71\n")},function(module,exports){eval("module.exports = '\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003' +\n '\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF';\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLXdzLmpzP2ZkZWYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSIsImZpbGUiOiI3Mi5qcyIsInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gJ1xceDA5XFx4MEFcXHgwQlxceDBDXFx4MERcXHgyMFxceEEwXFx1MTY4MFxcdTE4MEVcXHUyMDAwXFx1MjAwMVxcdTIwMDJcXHUyMDAzJyArXG4gICdcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBBXFx1MjAyRlxcdTIwNUZcXHUzMDAwXFx1MjAyOFxcdTIwMjlcXHVGRUZGJztcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///72\n")},function(module,exports,__webpack_require__){eval("var isObject = __webpack_require__(4);\nvar setPrototypeOf = __webpack_require__(71).set;\nmodule.exports = function (that, target, C) {\n var S = target.constructor;\n var P;\n if (S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && isObject(P) && setPrototypeOf) {\n setPrototypeOf(that, P);\n } return that;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faW5oZXJpdC1pZi1yZXF1aXJlZC5qcz81ZGJjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLHFCQUFxQixtQkFBTyxDQUFDLEVBQWM7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCIsImZpbGUiOiI3My5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIHNldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fc2V0LXByb3RvJykuc2V0O1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGhhdCwgdGFyZ2V0LCBDKSB7XG4gIHZhciBTID0gdGFyZ2V0LmNvbnN0cnVjdG9yO1xuICB2YXIgUDtcbiAgaWYgKFMgIT09IEMgJiYgdHlwZW9mIFMgPT0gJ2Z1bmN0aW9uJyAmJiAoUCA9IFMucHJvdG90eXBlKSAhPT0gQy5wcm90b3R5cGUgJiYgaXNPYmplY3QoUCkgJiYgc2V0UHJvdG90eXBlT2YpIHtcbiAgICBzZXRQcm90b3R5cGVPZih0aGF0LCBQKTtcbiAgfSByZXR1cm4gdGhhdDtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///73\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar toInteger = __webpack_require__(21);\nvar defined = __webpack_require__(24);\n\nmodule.exports = function repeat(count) {\n var str = String(defined(this));\n var res = '';\n var n = toInteger(count);\n if (n < 0 || n == Infinity) throw RangeError(\"Count can't be negative\");\n for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) res += str;\n return res;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLXJlcGVhdC5qcz85NzQ0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2QyxjQUFjLG1CQUFPLENBQUMsRUFBWTs7QUFFbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsTUFBTTtBQUNkO0FBQ0EiLCJmaWxlIjoiNzQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gcmVwZWF0KGNvdW50KSB7XG4gIHZhciBzdHIgPSBTdHJpbmcoZGVmaW5lZCh0aGlzKSk7XG4gIHZhciByZXMgPSAnJztcbiAgdmFyIG4gPSB0b0ludGVnZXIoY291bnQpO1xuICBpZiAobiA8IDAgfHwgbiA9PSBJbmZpbml0eSkgdGhyb3cgUmFuZ2VFcnJvcihcIkNvdW50IGNhbid0IGJlIG5lZ2F0aXZlXCIpO1xuICBmb3IgKDtuID4gMDsgKG4gPj4+PSAxKSAmJiAoc3RyICs9IHN0cikpIGlmIChuICYgMSkgcmVzICs9IHN0cjtcbiAgcmV0dXJuIHJlcztcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///74\n")},function(module,exports){eval("// 20.2.2.28 Math.sign(x)\nmodule.exports = Math.sign || function sign(x) {\n // eslint-disable-next-line no-self-compare\n return (x = +x) == 0 || x != x ? x : x < 0 ? -1 : 1;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWF0aC1zaWduLmpzPzk2ZmIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiI3NS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDIwLjIuMi4yOCBNYXRoLnNpZ24oeClcbm1vZHVsZS5leHBvcnRzID0gTWF0aC5zaWduIHx8IGZ1bmN0aW9uIHNpZ24oeCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gIHJldHVybiAoeCA9ICt4KSA9PSAwIHx8IHggIT0geCA/IHggOiB4IDwgMCA/IC0xIDogMTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///75\n")},function(module,exports){eval("// 20.2.2.14 Math.expm1(x)\nvar $expm1 = Math.expm1;\nmodule.exports = (!$expm1\n // Old FF bug\n || $expm1(10) > 22025.465794806719 || $expm1(10) < 22025.4657948067165168\n // Tor Browser bug\n || $expm1(-2e-17) != -2e-17\n) ? function expm1(x) {\n return (x = +x) == 0 ? x : x > -1e-6 && x < 1e-6 ? x + x * x / 2 : Math.exp(x) - 1;\n} : $expm1;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWF0aC1leHBtMS5qcz8yZDVjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiNzYuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyMC4yLjIuMTQgTWF0aC5leHBtMSh4KVxudmFyICRleHBtMSA9IE1hdGguZXhwbTE7XG5tb2R1bGUuZXhwb3J0cyA9ICghJGV4cG0xXG4gIC8vIE9sZCBGRiBidWdcbiAgfHwgJGV4cG0xKDEwKSA+IDIyMDI1LjQ2NTc5NDgwNjcxOSB8fCAkZXhwbTEoMTApIDwgMjIwMjUuNDY1Nzk0ODA2NzE2NTE2OFxuICAvLyBUb3IgQnJvd3NlciBidWdcbiAgfHwgJGV4cG0xKC0yZS0xNykgIT0gLTJlLTE3XG4pID8gZnVuY3Rpb24gZXhwbTEoeCkge1xuICByZXR1cm4gKHggPSAreCkgPT0gMCA/IHggOiB4ID4gLTFlLTYgJiYgeCA8IDFlLTYgPyB4ICsgeCAqIHggLyAyIDogTWF0aC5leHAoeCkgLSAxO1xufSA6ICRleHBtMTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///76\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar LIBRARY = __webpack_require__(29);\nvar $export = __webpack_require__(0);\nvar redefine = __webpack_require__(12);\nvar hide = __webpack_require__(11);\nvar Iterators = __webpack_require__(46);\nvar $iterCreate = __webpack_require__(78);\nvar setToStringTag = __webpack_require__(43);\nvar getPrototypeOf = __webpack_require__(17);\nvar ITERATOR = __webpack_require__(5)('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n $iterCreate(Constructor, NAME, next);\n var getMethod = function (kind) {\n if (!BUGGY && kind in proto) return proto[kind];\n switch (kind) {\n case KEYS: return function keys() { return new Constructor(this, kind); };\n case VALUES: return function values() { return new Constructor(this, kind); };\n } return function entries() { return new Constructor(this, kind); };\n };\n var TAG = NAME + ' Iterator';\n var DEF_VALUES = DEFAULT == VALUES;\n var VALUES_BUG = false;\n var proto = Base.prototype;\n var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n var $default = $native || getMethod(DEFAULT);\n var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n var methods, key, IteratorPrototype;\n // Fix native\n if ($anyNative) {\n IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n // Set @@toStringTag to native iterators\n setToStringTag(IteratorPrototype, TAG, true);\n // fix for some old engines\n if (!LIBRARY && typeof IteratorPrototype[ITERATOR] != 'function') hide(IteratorPrototype, ITERATOR, returnThis);\n }\n }\n // fix Array#{values, @@iterator}.name in V8 / FF\n if (DEF_VALUES && $native && $native.name !== VALUES) {\n VALUES_BUG = true;\n $default = function values() { return $native.call(this); };\n }\n // Define iterator\n if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n hide(proto, ITERATOR, $default);\n }\n // Plug for library\n Iterators[NAME] = $default;\n Iterators[TAG] = returnThis;\n if (DEFAULT) {\n methods = {\n values: DEF_VALUES ? $default : getMethod(VALUES),\n keys: IS_SET ? $default : getMethod(KEYS),\n entries: $entries\n };\n if (FORCED) for (key in methods) {\n if (!(key in proto)) redefine(proto, key, methods[key]);\n } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n }\n return methods;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlci1kZWZpbmUuanM/MDFmOSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGNBQWMsbUJBQU8sQ0FBQyxFQUFZO0FBQ2xDLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyxFQUFhO0FBQ3BDLFdBQVcsbUJBQU8sQ0FBQyxFQUFTO0FBQzVCLGdCQUFnQixtQkFBTyxDQUFDLEVBQWM7QUFDdEMsa0JBQWtCLG1CQUFPLENBQUMsRUFBZ0I7QUFDMUMscUJBQXFCLG1CQUFPLENBQUMsRUFBc0I7QUFDbkQscUJBQXFCLG1CQUFPLENBQUMsRUFBZTtBQUM1QyxlQUFlLG1CQUFPLENBQUMsQ0FBUTtBQUMvQiw4Q0FBOEM7QUFDOUM7QUFDQTtBQUNBOztBQUVBLDhCQUE4QixhQUFhOztBQUUzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUNBQXlDLG9DQUFvQztBQUM3RSw2Q0FBNkMsb0NBQW9DO0FBQ2pGLEtBQUssNEJBQTRCLG9DQUFvQztBQUNyRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLG1CQUFtQjtBQUNuQztBQUNBO0FBQ0Esa0NBQWtDLDJCQUEyQjtBQUM3RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EiLCJmaWxlIjoiNzcuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgTElCUkFSWSA9IHJlcXVpcmUoJy4vX2xpYnJhcnknKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJyk7XG52YXIgJGl0ZXJDcmVhdGUgPSByZXF1aXJlKCcuL19pdGVyLWNyZWF0ZScpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBJVEVSQVRPUiA9IHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpO1xudmFyIEJVR0dZID0gIShbXS5rZXlzICYmICduZXh0JyBpbiBbXS5rZXlzKCkpOyAvLyBTYWZhcmkgaGFzIGJ1Z2d5IGl0ZXJhdG9ycyB3L28gYG5leHRgXG52YXIgRkZfSVRFUkFUT1IgPSAnQEBpdGVyYXRvcic7XG52YXIgS0VZUyA9ICdrZXlzJztcbnZhciBWQUxVRVMgPSAndmFsdWVzJztcblxudmFyIHJldHVyblRoaXMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChCYXNlLCBOQU1FLCBDb25zdHJ1Y3RvciwgbmV4dCwgREVGQVVMVCwgSVNfU0VULCBGT1JDRUQpIHtcbiAgJGl0ZXJDcmVhdGUoQ29uc3RydWN0b3IsIE5BTUUsIG5leHQpO1xuICB2YXIgZ2V0TWV0aG9kID0gZnVuY3Rpb24gKGtpbmQpIHtcbiAgICBpZiAoIUJVR0dZICYmIGtpbmQgaW4gcHJvdG8pIHJldHVybiBwcm90b1traW5kXTtcbiAgICBzd2l0Y2ggKGtpbmQpIHtcbiAgICAgIGNhc2UgS0VZUzogcmV0dXJuIGZ1bmN0aW9uIGtleXMoKSB7IHJldHVybiBuZXcgQ29uc3RydWN0b3IodGhpcywga2luZCk7IH07XG4gICAgICBjYXNlIFZBTFVFUzogcmV0dXJuIGZ1bmN0aW9uIHZhbHVlcygpIHsgcmV0dXJuIG5ldyBDb25zdHJ1Y3Rvcih0aGlzLCBraW5kKTsgfTtcbiAgICB9IHJldHVybiBmdW5jdGlvbiBlbnRyaWVzKCkgeyByZXR1cm4gbmV3IENvbnN0cnVjdG9yKHRoaXMsIGtpbmQpOyB9O1xuICB9O1xuICB2YXIgVEFHID0gTkFNRSArICcgSXRlcmF0b3InO1xuICB2YXIgREVGX1ZBTFVFUyA9IERFRkFVTFQgPT0gVkFMVUVTO1xuICB2YXIgVkFMVUVTX0JVRyA9IGZhbHNlO1xuICB2YXIgcHJvdG8gPSBCYXNlLnByb3RvdHlwZTtcbiAgdmFyICRuYXRpdmUgPSBwcm90b1tJVEVSQVRPUl0gfHwgcHJvdG9bRkZfSVRFUkFUT1JdIHx8IERFRkFVTFQgJiYgcHJvdG9bREVGQVVMVF07XG4gIHZhciAkZGVmYXVsdCA9ICRuYXRpdmUgfHwgZ2V0TWV0aG9kKERFRkFVTFQpO1xuICB2YXIgJGVudHJpZXMgPSBERUZBVUxUID8gIURFRl9WQUxVRVMgPyAkZGVmYXVsdCA6IGdldE1ldGhvZCgnZW50cmllcycpIDogdW5kZWZpbmVkO1xuICB2YXIgJGFueU5hdGl2ZSA9IE5BTUUgPT0gJ0FycmF5JyA/IHByb3RvLmVudHJpZXMgfHwgJG5hdGl2ZSA6ICRuYXRpdmU7XG4gIHZhciBtZXRob2RzLCBrZXksIEl0ZXJhdG9yUHJvdG90eXBlO1xuICAvLyBGaXggbmF0aXZlXG4gIGlmICgkYW55TmF0aXZlKSB7XG4gICAgSXRlcmF0b3JQcm90b3R5cGUgPSBnZXRQcm90b3R5cGVPZigkYW55TmF0aXZlLmNhbGwobmV3IEJhc2UoKSkpO1xuICAgIGlmIChJdGVyYXRvclByb3RvdHlwZSAhPT0gT2JqZWN0LnByb3RvdHlwZSAmJiBJdGVyYXRvclByb3RvdHlwZS5uZXh0KSB7XG4gICAgICAvLyBTZXQgQEB0b1N0cmluZ1RhZyB0byBuYXRpdmUgaXRlcmF0b3JzXG4gICAgICBzZXRUb1N0cmluZ1RhZyhJdGVyYXRvclByb3RvdHlwZSwgVEFHLCB0cnVlKTtcbiAgICAgIC8vIGZpeCBmb3Igc29tZSBvbGQgZW5naW5lc1xuICAgICAgaWYgKCFMSUJSQVJZICYmIHR5cGVvZiBJdGVyYXRvclByb3RvdHlwZVtJVEVSQVRPUl0gIT0gJ2Z1bmN0aW9uJykgaGlkZShJdGVyYXRvclByb3RvdHlwZSwgSVRFUkFUT1IsIHJldHVyblRoaXMpO1xuICAgIH1cbiAgfVxuICAvLyBmaXggQXJyYXkje3ZhbHVlcywgQEBpdGVyYXRvcn0ubmFtZSBpbiBWOCAvIEZGXG4gIGlmIChERUZfVkFMVUVTICYmICRuYXRpdmUgJiYgJG5hdGl2ZS5uYW1lICE9PSBWQUxVRVMpIHtcbiAgICBWQUxVRVNfQlVHID0gdHJ1ZTtcbiAgICAkZGVmYXVsdCA9IGZ1bmN0aW9uIHZhbHVlcygpIHsgcmV0dXJuICRuYXRpdmUuY2FsbCh0aGlzKTsgfTtcbiAgfVxuICAvLyBEZWZpbmUgaXRlcmF0b3JcbiAgaWYgKCghTElCUkFSWSB8fCBGT1JDRUQpICYmIChCVUdHWSB8fCBWQUxVRVNfQlVHIHx8ICFwcm90b1tJVEVSQVRPUl0pKSB7XG4gICAgaGlkZShwcm90bywgSVRFUkFUT1IsICRkZWZhdWx0KTtcbiAgfVxuICAvLyBQbHVnIGZvciBsaWJyYXJ5XG4gIEl0ZXJhdG9yc1tOQU1FXSA9ICRkZWZhdWx0O1xuICBJdGVyYXRvcnNbVEFHXSA9IHJldHVyblRoaXM7XG4gIGlmIChERUZBVUxUKSB7XG4gICAgbWV0aG9kcyA9IHtcbiAgICAgIHZhbHVlczogREVGX1ZBTFVFUyA/ICRkZWZhdWx0IDogZ2V0TWV0aG9kKFZBTFVFUyksXG4gICAgICBrZXlzOiBJU19TRVQgPyAkZGVmYXVsdCA6IGdldE1ldGhvZChLRVlTKSxcbiAgICAgIGVudHJpZXM6ICRlbnRyaWVzXG4gICAgfTtcbiAgICBpZiAoRk9SQ0VEKSBmb3IgKGtleSBpbiBtZXRob2RzKSB7XG4gICAgICBpZiAoIShrZXkgaW4gcHJvdG8pKSByZWRlZmluZShwcm90bywga2V5LCBtZXRob2RzW2tleV0pO1xuICAgIH0gZWxzZSAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIChCVUdHWSB8fCBWQUxVRVNfQlVHKSwgTkFNRSwgbWV0aG9kcyk7XG4gIH1cbiAgcmV0dXJuIG1ldGhvZHM7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///77\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar create = __webpack_require__(36);\nvar descriptor = __webpack_require__(32);\nvar setToStringTag = __webpack_require__(43);\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\n__webpack_require__(11)(IteratorPrototype, __webpack_require__(5)('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n setToStringTag(Constructor, NAME + ' Iterator');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlci1jcmVhdGUuanM/NDFhMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGFBQWEsbUJBQU8sQ0FBQyxFQUFrQjtBQUN2QyxpQkFBaUIsbUJBQU8sQ0FBQyxFQUFrQjtBQUMzQyxxQkFBcUIsbUJBQU8sQ0FBQyxFQUFzQjtBQUNuRDs7QUFFQTtBQUNBLG1CQUFPLENBQUMsRUFBUyxxQkFBcUIsbUJBQU8sQ0FBQyxDQUFRLDRCQUE0QixhQUFhLEVBQUU7O0FBRWpHO0FBQ0EscURBQXFELDRCQUE0QjtBQUNqRjtBQUNBIiwiZmlsZSI6Ijc4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKTtcbnZhciBkZXNjcmlwdG9yID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBJdGVyYXRvclByb3RvdHlwZSA9IHt9O1xuXG4vLyAyNS4xLjIuMS4xICVJdGVyYXRvclByb3RvdHlwZSVbQEBpdGVyYXRvcl0oKVxucmVxdWlyZSgnLi9faGlkZScpKEl0ZXJhdG9yUHJvdG90eXBlLCByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBOQU1FLCBuZXh0KSB7XG4gIENvbnN0cnVjdG9yLnByb3RvdHlwZSA9IGNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSwgeyBuZXh0OiBkZXNjcmlwdG9yKDEsIG5leHQpIH0pO1xuICBzZXRUb1N0cmluZ1RhZyhDb25zdHJ1Y3RvciwgTkFNRSArICcgSXRlcmF0b3InKTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///78\n")},function(module,exports,__webpack_require__){eval("// helper for String#{startsWith, endsWith, includes}\nvar isRegExp = __webpack_require__(56);\nvar defined = __webpack_require__(24);\n\nmodule.exports = function (that, searchString, NAME) {\n if (isRegExp(searchString)) throw TypeError('String#' + NAME + \" doesn't accept regex!\");\n return String(defined(that));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLWNvbnRleHQuanM/ZDJjOCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxzQkFBc0I7QUFDdEIsZUFBZSxtQkFBTyxDQUFDLEVBQWM7QUFDckMsY0FBYyxtQkFBTyxDQUFDLEVBQVk7O0FBRWxDO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6Ijc5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaGVscGVyIGZvciBTdHJpbmcje3N0YXJ0c1dpdGgsIGVuZHNXaXRoLCBpbmNsdWRlc31cbnZhciBpc1JlZ0V4cCA9IHJlcXVpcmUoJy4vX2lzLXJlZ2V4cCcpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRoYXQsIHNlYXJjaFN0cmluZywgTkFNRSkge1xuICBpZiAoaXNSZWdFeHAoc2VhcmNoU3RyaW5nKSkgdGhyb3cgVHlwZUVycm9yKCdTdHJpbmcjJyArIE5BTUUgKyBcIiBkb2Vzbid0IGFjY2VwdCByZWdleCFcIik7XG4gIHJldHVybiBTdHJpbmcoZGVmaW5lZCh0aGF0KSk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///79\n")},function(module,exports,__webpack_require__){eval("var MATCH = __webpack_require__(5)('match');\nmodule.exports = function (KEY) {\n var re = /./;\n try {\n '/./'[KEY](re);\n } catch (e) {\n try {\n re[MATCH] = false;\n return !'/./'[KEY](re);\n } catch (f) { /* empty */ }\n } return true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZmFpbHMtaXMtcmVnZXhwLmpzPzUxNDciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSxtQkFBTyxDQUFDLENBQVE7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsS0FBSyxZQUFZO0FBQ2pCLEdBQUc7QUFDSCIsImZpbGUiOiI4MC5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBNQVRDSCA9IHJlcXVpcmUoJy4vX3drcycpKCdtYXRjaCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoS0VZKSB7XG4gIHZhciByZSA9IC8uLztcbiAgdHJ5IHtcbiAgICAnLy4vJ1tLRVldKHJlKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHRyeSB7XG4gICAgICByZVtNQVRDSF0gPSBmYWxzZTtcbiAgICAgIHJldHVybiAhJy8uLydbS0VZXShyZSk7XG4gICAgfSBjYXRjaCAoZikgeyAvKiBlbXB0eSAqLyB9XG4gIH0gcmV0dXJuIHRydWU7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///80\n")},function(module,exports,__webpack_require__){eval("// check on default Array iterator\nvar Iterators = __webpack_require__(46);\nvar ITERATOR = __webpack_require__(5)('iterator');\nvar ArrayProto = Array.prototype;\n\nmodule.exports = function (it) {\n return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtYXJyYXktaXRlci5qcz8zM2E0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsZ0JBQWdCLG1CQUFPLENBQUMsRUFBYztBQUN0QyxlQUFlLG1CQUFPLENBQUMsQ0FBUTtBQUMvQjs7QUFFQTtBQUNBO0FBQ0EiLCJmaWxlIjoiODEuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBjaGVjayBvbiBkZWZhdWx0IEFycmF5IGl0ZXJhdG9yXG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJyk7XG52YXIgSVRFUkFUT1IgPSByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKTtcbnZhciBBcnJheVByb3RvID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgIT09IHVuZGVmaW5lZCAmJiAoSXRlcmF0b3JzLkFycmF5ID09PSBpdCB8fCBBcnJheVByb3RvW0lURVJBVE9SXSA9PT0gaXQpO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///81\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $defineProperty = __webpack_require__(8);\nvar createDesc = __webpack_require__(32);\n\nmodule.exports = function (object, index, value) {\n if (index in object) $defineProperty.f(object, index, createDesc(0, value));\n else object[index] = value;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY3JlYXRlLXByb3BlcnR5LmpzP2YxYWUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixzQkFBc0IsbUJBQU8sQ0FBQyxDQUFjO0FBQzVDLGlCQUFpQixtQkFBTyxDQUFDLEVBQWtCOztBQUUzQztBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiI4Mi5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciAkZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciBjcmVhdGVEZXNjID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIGluZGV4LCB2YWx1ZSkge1xuICBpZiAoaW5kZXggaW4gb2JqZWN0KSAkZGVmaW5lUHJvcGVydHkuZihvYmplY3QsIGluZGV4LCBjcmVhdGVEZXNjKDAsIHZhbHVlKSk7XG4gIGVsc2Ugb2JqZWN0W2luZGV4XSA9IHZhbHVlO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///82\n")},function(module,exports,__webpack_require__){eval("var classof = __webpack_require__(44);\nvar ITERATOR = __webpack_require__(5)('iterator');\nvar Iterators = __webpack_require__(46);\nmodule.exports = __webpack_require__(18).getIteratorMethod = function (it) {\n if (it != undefined) return it[ITERATOR]\n || it['@@iterator']\n || Iterators[classof(it)];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9jb3JlLmdldC1pdGVyYXRvci1tZXRob2QuanM/MjdlZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLG1CQUFPLENBQUMsRUFBWTtBQUNsQyxlQUFlLG1CQUFPLENBQUMsQ0FBUTtBQUMvQixnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFjO0FBQ3RDLGlCQUFpQixtQkFBTyxDQUFDLEVBQVM7QUFDbEM7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiODMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4vX2NsYXNzb2YnKTtcbnZhciBJVEVSQVRPUiA9IHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19jb3JlJykuZ2V0SXRlcmF0b3JNZXRob2QgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGl0ICE9IHVuZGVmaW5lZCkgcmV0dXJuIGl0W0lURVJBVE9SXVxuICAgIHx8IGl0WydAQGl0ZXJhdG9yJ11cbiAgICB8fCBJdGVyYXRvcnNbY2xhc3NvZihpdCldO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///83\n")},function(module,exports,__webpack_require__){eval("// 9.4.2.3 ArraySpeciesCreate(originalArray, length)\nvar speciesConstructor = __webpack_require__(223);\n\nmodule.exports = function (original, length) {\n return new (speciesConstructor(original))(length);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktc3BlY2llcy1jcmVhdGUuanM/Y2QxYyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLHlCQUF5QixtQkFBTyxDQUFDLEdBQThCOztBQUUvRDtBQUNBO0FBQ0EiLCJmaWxlIjoiODQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyA5LjQuMi4zIEFycmF5U3BlY2llc0NyZWF0ZShvcmlnaW5hbEFycmF5LCBsZW5ndGgpXG52YXIgc3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi9fYXJyYXktc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcmlnaW5hbCwgbGVuZ3RoKSB7XG4gIHJldHVybiBuZXcgKHNwZWNpZXNDb25zdHJ1Y3RvcihvcmlnaW5hbCkpKGxlbmd0aCk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///84\n")},function(module,exports,__webpack_require__){"use strict";eval("// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\n\nvar toObject = __webpack_require__(9);\nvar toAbsoluteIndex = __webpack_require__(35);\nvar toLength = __webpack_require__(6);\nmodule.exports = function fill(value /* , start = 0, end = @length */) {\n var O = toObject(this);\n var length = toLength(O.length);\n var aLen = arguments.length;\n var index = toAbsoluteIndex(aLen > 1 ? arguments[1] : undefined, length);\n var end = aLen > 2 ? arguments[2] : undefined;\n var endPos = end === undefined ? length : toAbsoluteIndex(end, length);\n while (endPos > index) O[index++] = value;\n return O;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktZmlsbC5qcz8zNmJkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ2E7QUFDYixlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxzQkFBc0IsbUJBQU8sQ0FBQyxFQUFzQjtBQUNwRCxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiI4NS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDIyLjEuMy42IEFycmF5LnByb3RvdHlwZS5maWxsKHZhbHVlLCBzdGFydCA9IDAsIGVuZCA9IHRoaXMubGVuZ3RoKVxuJ3VzZSBzdHJpY3QnO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi9fdG8tYWJzb2x1dGUtaW5kZXgnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBmaWxsKHZhbHVlIC8qICwgc3RhcnQgPSAwLCBlbmQgPSBAbGVuZ3RoICovKSB7XG4gIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gIHZhciBsZW5ndGggPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgdmFyIGluZGV4ID0gdG9BYnNvbHV0ZUluZGV4KGFMZW4gPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkLCBsZW5ndGgpO1xuICB2YXIgZW5kID0gYUxlbiA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQ7XG4gIHZhciBlbmRQb3MgPSBlbmQgPT09IHVuZGVmaW5lZCA/IGxlbmd0aCA6IHRvQWJzb2x1dGVJbmRleChlbmQsIGxlbmd0aCk7XG4gIHdoaWxlIChlbmRQb3MgPiBpbmRleCkgT1tpbmRleCsrXSA9IHZhbHVlO1xuICByZXR1cm4gTztcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///85\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar addToUnscopables = __webpack_require__(31);\nvar step = __webpack_require__(112);\nvar Iterators = __webpack_require__(46);\nvar toIObject = __webpack_require__(15);\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = __webpack_require__(77)(Array, 'Array', function (iterated, kind) {\n this._t = toIObject(iterated); // target\n this._i = 0; // next index\n this._k = kind; // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var kind = this._k;\n var index = this._i++;\n if (!O || index >= O.length) {\n this._t = undefined;\n return step(1);\n }\n if (kind == 'keys') return step(0, index);\n if (kind == 'values') return step(0, O[index]);\n return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuaXRlcmF0b3IuanM/Y2FkZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLHVCQUF1QixtQkFBTyxDQUFDLEVBQXVCO0FBQ3RELFdBQVcsbUJBQU8sQ0FBQyxHQUFjO0FBQ2pDLGdCQUFnQixtQkFBTyxDQUFDLEVBQWM7QUFDdEMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTs7QUFFdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsbUJBQU8sQ0FBQyxFQUFnQjtBQUN6QyxnQ0FBZ0M7QUFDaEMsY0FBYztBQUNkLGlCQUFpQjtBQUNqQjtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0EiLCJmaWxlIjoiODYuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgYWRkVG9VbnNjb3BhYmxlcyA9IHJlcXVpcmUoJy4vX2FkZC10by11bnNjb3BhYmxlcycpO1xudmFyIHN0ZXAgPSByZXF1aXJlKCcuL19pdGVyLXN0ZXAnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG5cbi8vIDIyLjEuMy40IEFycmF5LnByb3RvdHlwZS5lbnRyaWVzKClcbi8vIDIyLjEuMy4xMyBBcnJheS5wcm90b3R5cGUua2V5cygpXG4vLyAyMi4xLjMuMjkgQXJyYXkucHJvdG90eXBlLnZhbHVlcygpXG4vLyAyMi4xLjMuMzAgQXJyYXkucHJvdG90eXBlW0BAaXRlcmF0b3JdKClcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9faXRlci1kZWZpbmUnKShBcnJheSwgJ0FycmF5JywgZnVuY3Rpb24gKGl0ZXJhdGVkLCBraW5kKSB7XG4gIHRoaXMuX3QgPSB0b0lPYmplY3QoaXRlcmF0ZWQpOyAvLyB0YXJnZXRcbiAgdGhpcy5faSA9IDA7ICAgICAgICAgICAgICAgICAgIC8vIG5leHQgaW5kZXhcbiAgdGhpcy5fayA9IGtpbmQ7ICAgICAgICAgICAgICAgIC8vIGtpbmRcbi8vIDIyLjEuNS4yLjEgJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlLm5leHQoKVxufSwgZnVuY3Rpb24gKCkge1xuICB2YXIgTyA9IHRoaXMuX3Q7XG4gIHZhciBraW5kID0gdGhpcy5faztcbiAgdmFyIGluZGV4ID0gdGhpcy5faSsrO1xuICBpZiAoIU8gfHwgaW5kZXggPj0gTy5sZW5ndGgpIHtcbiAgICB0aGlzLl90ID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiBzdGVwKDEpO1xuICB9XG4gIGlmIChraW5kID09ICdrZXlzJykgcmV0dXJuIHN0ZXAoMCwgaW5kZXgpO1xuICBpZiAoa2luZCA9PSAndmFsdWVzJykgcmV0dXJuIHN0ZXAoMCwgT1tpbmRleF0pO1xuICByZXR1cm4gc3RlcCgwLCBbaW5kZXgsIE9baW5kZXhdXSk7XG59LCAndmFsdWVzJyk7XG5cbi8vIGFyZ3VtZW50c0xpc3RbQEBpdGVyYXRvcl0gaXMgJUFycmF5UHJvdG9fdmFsdWVzJSAoOS40LjQuNiwgOS40LjQuNylcbkl0ZXJhdG9ycy5Bcmd1bWVudHMgPSBJdGVyYXRvcnMuQXJyYXk7XG5cbmFkZFRvVW5zY29wYWJsZXMoJ2tleXMnKTtcbmFkZFRvVW5zY29wYWJsZXMoJ3ZhbHVlcycpO1xuYWRkVG9VbnNjb3BhYmxlcygnZW50cmllcycpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///86\n")},function(module,exports,__webpack_require__){"use strict";eval("\n\nvar regexpFlags = __webpack_require__(50);\n\nvar nativeExec = RegExp.prototype.exec;\n// This always refers to the native implementation, because the\n// String#replace polyfill uses ./fix-regexp-well-known-symbol-logic.js,\n// which loads this file before patching the method.\nvar nativeReplace = String.prototype.replace;\n\nvar patchedExec = nativeExec;\n\nvar LAST_INDEX = 'lastIndex';\n\nvar UPDATES_LAST_INDEX_WRONG = (function () {\n var re1 = /a/,\n re2 = /b*/g;\n nativeExec.call(re1, 'a');\n nativeExec.call(re2, 'a');\n return re1[LAST_INDEX] !== 0 || re2[LAST_INDEX] !== 0;\n})();\n\n// nonparticipating capturing group, copied from es5-shim's String#split patch.\nvar NPCG_INCLUDED = /()??/.exec('')[1] !== undefined;\n\nvar PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED;\n\nif (PATCH) {\n patchedExec = function exec(str) {\n var re = this;\n var lastIndex, reCopy, match, i;\n\n if (NPCG_INCLUDED) {\n reCopy = new RegExp('^' + re.source + '$(?!\\\\s)', regexpFlags.call(re));\n }\n if (UPDATES_LAST_INDEX_WRONG) lastIndex = re[LAST_INDEX];\n\n match = nativeExec.call(re, str);\n\n if (UPDATES_LAST_INDEX_WRONG && match) {\n re[LAST_INDEX] = re.global ? match.index + match[0].length : lastIndex;\n }\n if (NPCG_INCLUDED && match && match.length > 1) {\n // Fix browsers whose `exec` methods don't consistently return `undefined`\n // for NPCG, like IE8. NOTE: This doesn' work for /(.?)?/\n // eslint-disable-next-line no-loop-func\n nativeReplace.call(match[0], reCopy, function () {\n for (i = 1; i < arguments.length - 2; i++) {\n if (arguments[i] === undefined) match[i] = undefined;\n }\n });\n }\n\n return match;\n };\n}\n\nmodule.exports = patchedExec;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcmVnZXhwLWV4ZWMuanM/NTIwYSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixrQkFBa0IsbUJBQU8sQ0FBQyxFQUFVOztBQUVwQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLDBCQUEwQjtBQUM3QztBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiI4Ny5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHJlZ2V4cEZsYWdzID0gcmVxdWlyZSgnLi9fZmxhZ3MnKTtcblxudmFyIG5hdGl2ZUV4ZWMgPSBSZWdFeHAucHJvdG90eXBlLmV4ZWM7XG4vLyBUaGlzIGFsd2F5cyByZWZlcnMgdG8gdGhlIG5hdGl2ZSBpbXBsZW1lbnRhdGlvbiwgYmVjYXVzZSB0aGVcbi8vIFN0cmluZyNyZXBsYWNlIHBvbHlmaWxsIHVzZXMgLi9maXgtcmVnZXhwLXdlbGwta25vd24tc3ltYm9sLWxvZ2ljLmpzLFxuLy8gd2hpY2ggbG9hZHMgdGhpcyBmaWxlIGJlZm9yZSBwYXRjaGluZyB0aGUgbWV0aG9kLlxudmFyIG5hdGl2ZVJlcGxhY2UgPSBTdHJpbmcucHJvdG90eXBlLnJlcGxhY2U7XG5cbnZhciBwYXRjaGVkRXhlYyA9IG5hdGl2ZUV4ZWM7XG5cbnZhciBMQVNUX0lOREVYID0gJ2xhc3RJbmRleCc7XG5cbnZhciBVUERBVEVTX0xBU1RfSU5ERVhfV1JPTkcgPSAoZnVuY3Rpb24gKCkge1xuICB2YXIgcmUxID0gL2EvLFxuICAgICAgcmUyID0gL2IqL2c7XG4gIG5hdGl2ZUV4ZWMuY2FsbChyZTEsICdhJyk7XG4gIG5hdGl2ZUV4ZWMuY2FsbChyZTIsICdhJyk7XG4gIHJldHVybiByZTFbTEFTVF9JTkRFWF0gIT09IDAgfHwgcmUyW0xBU1RfSU5ERVhdICE9PSAwO1xufSkoKTtcblxuLy8gbm9ucGFydGljaXBhdGluZyBjYXB0dXJpbmcgZ3JvdXAsIGNvcGllZCBmcm9tIGVzNS1zaGltJ3MgU3RyaW5nI3NwbGl0IHBhdGNoLlxudmFyIE5QQ0dfSU5DTFVERUQgPSAvKCk/Py8uZXhlYygnJylbMV0gIT09IHVuZGVmaW5lZDtcblxudmFyIFBBVENIID0gVVBEQVRFU19MQVNUX0lOREVYX1dST05HIHx8IE5QQ0dfSU5DTFVERUQ7XG5cbmlmIChQQVRDSCkge1xuICBwYXRjaGVkRXhlYyA9IGZ1bmN0aW9uIGV4ZWMoc3RyKSB7XG4gICAgdmFyIHJlID0gdGhpcztcbiAgICB2YXIgbGFzdEluZGV4LCByZUNvcHksIG1hdGNoLCBpO1xuXG4gICAgaWYgKE5QQ0dfSU5DTFVERUQpIHtcbiAgICAgIHJlQ29weSA9IG5ldyBSZWdFeHAoJ14nICsgcmUuc291cmNlICsgJyQoPyFcXFxccyknLCByZWdleHBGbGFncy5jYWxsKHJlKSk7XG4gICAgfVxuICAgIGlmIChVUERBVEVTX0xBU1RfSU5ERVhfV1JPTkcpIGxhc3RJbmRleCA9IHJlW0xBU1RfSU5ERVhdO1xuXG4gICAgbWF0Y2ggPSBuYXRpdmVFeGVjLmNhbGwocmUsIHN0cik7XG5cbiAgICBpZiAoVVBEQVRFU19MQVNUX0lOREVYX1dST05HICYmIG1hdGNoKSB7XG4gICAgICByZVtMQVNUX0lOREVYXSA9IHJlLmdsb2JhbCA/IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoIDogbGFzdEluZGV4O1xuICAgIH1cbiAgICBpZiAoTlBDR19JTkNMVURFRCAmJiBtYXRjaCAmJiBtYXRjaC5sZW5ndGggPiAxKSB7XG4gICAgICAvLyBGaXggYnJvd3NlcnMgd2hvc2UgYGV4ZWNgIG1ldGhvZHMgZG9uJ3QgY29uc2lzdGVudGx5IHJldHVybiBgdW5kZWZpbmVkYFxuICAgICAgLy8gZm9yIE5QQ0csIGxpa2UgSUU4LiBOT1RFOiBUaGlzIGRvZXNuJyB3b3JrIGZvciAvKC4/KT8vXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbG9vcC1mdW5jXG4gICAgICBuYXRpdmVSZXBsYWNlLmNhbGwobWF0Y2hbMF0sIHJlQ29weSwgZnVuY3Rpb24gKCkge1xuICAgICAgICBmb3IgKGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aCAtIDI7IGkrKykge1xuICAgICAgICAgIGlmIChhcmd1bWVudHNbaV0gPT09IHVuZGVmaW5lZCkgbWF0Y2hbaV0gPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBtYXRjaDtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBwYXRjaGVkRXhlYztcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///87\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar at = __webpack_require__(55)(true);\n\n // `AdvanceStringIndex` abstract operation\n// https://tc39.github.io/ecma262/#sec-advancestringindex\nmodule.exports = function (S, index, unicode) {\n return index + (unicode ? at(S, index).length : 1);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYWR2YW5jZS1zdHJpbmctaW5kZXguanM/MDM5MCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLFNBQVMsbUJBQU8sQ0FBQyxFQUFjOztBQUUvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6Ijg4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIGF0ID0gcmVxdWlyZSgnLi9fc3RyaW5nLWF0JykodHJ1ZSk7XG5cbiAvLyBgQWR2YW5jZVN0cmluZ0luZGV4YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFkdmFuY2VzdHJpbmdpbmRleFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoUywgaW5kZXgsIHVuaWNvZGUpIHtcbiAgcmV0dXJuIGluZGV4ICsgKHVuaWNvZGUgPyBhdChTLCBpbmRleCkubGVuZ3RoIDogMSk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///88\n")},function(module,exports,__webpack_require__){eval("var ctx = __webpack_require__(19);\nvar invoke = __webpack_require__(102);\nvar html = __webpack_require__(70);\nvar cel = __webpack_require__(66);\nvar global = __webpack_require__(2);\nvar process = global.process;\nvar setTask = global.setImmediate;\nvar clearTask = global.clearImmediate;\nvar MessageChannel = global.MessageChannel;\nvar Dispatch = global.Dispatch;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar defer, channel, port;\nvar run = function () {\n var id = +this;\n // eslint-disable-next-line no-prototype-builtins\n if (queue.hasOwnProperty(id)) {\n var fn = queue[id];\n delete queue[id];\n fn();\n }\n};\nvar listener = function (event) {\n run.call(event.data);\n};\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!setTask || !clearTask) {\n setTask = function setImmediate(fn) {\n var args = [];\n var i = 1;\n while (arguments.length > i) args.push(arguments[i++]);\n queue[++counter] = function () {\n // eslint-disable-next-line no-new-func\n invoke(typeof fn == 'function' ? fn : Function(fn), args);\n };\n defer(counter);\n return counter;\n };\n clearTask = function clearImmediate(id) {\n delete queue[id];\n };\n // Node.js 0.8-\n if (__webpack_require__(20)(process) == 'process') {\n defer = function (id) {\n process.nextTick(ctx(run, id, 1));\n };\n // Sphere (JS game engine) Dispatch API\n } else if (Dispatch && Dispatch.now) {\n defer = function (id) {\n Dispatch.now(ctx(run, id, 1));\n };\n // Browsers with MessageChannel, includes WebWorkers\n } else if (MessageChannel) {\n channel = new MessageChannel();\n port = channel.port2;\n channel.port1.onmessage = listener;\n defer = ctx(port.postMessage, port, 1);\n // Browsers with postMessage, skip WebWorkers\n // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts) {\n defer = function (id) {\n global.postMessage(id + '', '*');\n };\n global.addEventListener('message', listener, false);\n // IE8-\n } else if (ONREADYSTATECHANGE in cel('script')) {\n defer = function (id) {\n html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () {\n html.removeChild(this);\n run.call(id);\n };\n };\n // Rest old browsers\n } else {\n defer = function (id) {\n setTimeout(ctx(run, id, 1), 0);\n };\n }\n}\nmodule.exports = {\n set: setTask,\n clear: clearTask\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdGFzay5qcz8xOTkxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFVBQVUsbUJBQU8sQ0FBQyxFQUFRO0FBQzFCLGFBQWEsbUJBQU8sQ0FBQyxHQUFXO0FBQ2hDLFdBQVcsbUJBQU8sQ0FBQyxFQUFTO0FBQzVCLFVBQVUsbUJBQU8sQ0FBQyxFQUFlO0FBQ2pDLGFBQWEsbUJBQU8sQ0FBQyxDQUFXO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNLG1CQUFPLENBQUMsRUFBUTtBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiODkuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgaW52b2tlID0gcmVxdWlyZSgnLi9faW52b2tlJyk7XG52YXIgaHRtbCA9IHJlcXVpcmUoJy4vX2h0bWwnKTtcbnZhciBjZWwgPSByZXF1aXJlKCcuL19kb20tY3JlYXRlJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgcHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzO1xudmFyIHNldFRhc2sgPSBnbG9iYWwuc2V0SW1tZWRpYXRlO1xudmFyIGNsZWFyVGFzayA9IGdsb2JhbC5jbGVhckltbWVkaWF0ZTtcbnZhciBNZXNzYWdlQ2hhbm5lbCA9IGdsb2JhbC5NZXNzYWdlQ2hhbm5lbDtcbnZhciBEaXNwYXRjaCA9IGdsb2JhbC5EaXNwYXRjaDtcbnZhciBjb3VudGVyID0gMDtcbnZhciBxdWV1ZSA9IHt9O1xudmFyIE9OUkVBRFlTVEFURUNIQU5HRSA9ICdvbnJlYWR5c3RhdGVjaGFuZ2UnO1xudmFyIGRlZmVyLCBjaGFubmVsLCBwb3J0O1xudmFyIHJ1biA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGlkID0gK3RoaXM7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgaWYgKHF1ZXVlLmhhc093blByb3BlcnR5KGlkKSkge1xuICAgIHZhciBmbiA9IHF1ZXVlW2lkXTtcbiAgICBkZWxldGUgcXVldWVbaWRdO1xuICAgIGZuKCk7XG4gIH1cbn07XG52YXIgbGlzdGVuZXIgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgcnVuLmNhbGwoZXZlbnQuZGF0YSk7XG59O1xuLy8gTm9kZS5qcyAwLjkrICYgSUUxMCsgaGFzIHNldEltbWVkaWF0ZSwgb3RoZXJ3aXNlOlxuaWYgKCFzZXRUYXNrIHx8ICFjbGVhclRhc2spIHtcbiAgc2V0VGFzayA9IGZ1bmN0aW9uIHNldEltbWVkaWF0ZShmbikge1xuICAgIHZhciBhcmdzID0gW107XG4gICAgdmFyIGkgPSAxO1xuICAgIHdoaWxlIChhcmd1bWVudHMubGVuZ3RoID4gaSkgYXJncy5wdXNoKGFyZ3VtZW50c1tpKytdKTtcbiAgICBxdWV1ZVsrK2NvdW50ZXJdID0gZnVuY3Rpb24gKCkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jXG4gICAgICBpbnZva2UodHlwZW9mIGZuID09ICdmdW5jdGlvbicgPyBmbiA6IEZ1bmN0aW9uKGZuKSwgYXJncyk7XG4gICAgfTtcbiAgICBkZWZlcihjb3VudGVyKTtcbiAgICByZXR1cm4gY291bnRlcjtcbiAgfTtcbiAgY2xlYXJUYXNrID0gZnVuY3Rpb24gY2xlYXJJbW1lZGlhdGUoaWQpIHtcbiAgICBkZWxldGUgcXVldWVbaWRdO1xuICB9O1xuICAvLyBOb2RlLmpzIDAuOC1cbiAgaWYgKHJlcXVpcmUoJy4vX2NvZicpKHByb2Nlc3MpID09ICdwcm9jZXNzJykge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGN0eChydW4sIGlkLCAxKSk7XG4gICAgfTtcbiAgLy8gU3BoZXJlIChKUyBnYW1lIGVuZ2luZSkgRGlzcGF0Y2ggQVBJXG4gIH0gZWxzZSBpZiAoRGlzcGF0Y2ggJiYgRGlzcGF0Y2gubm93KSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIERpc3BhdGNoLm5vdyhjdHgocnVuLCBpZCwgMSkpO1xuICAgIH07XG4gIC8vIEJyb3dzZXJzIHdpdGggTWVzc2FnZUNoYW5uZWwsIGluY2x1ZGVzIFdlYldvcmtlcnNcbiAgfSBlbHNlIGlmIChNZXNzYWdlQ2hhbm5lbCkge1xuICAgIGNoYW5uZWwgPSBuZXcgTWVzc2FnZUNoYW5uZWwoKTtcbiAgICBwb3J0ID0gY2hhbm5lbC5wb3J0MjtcbiAgICBjaGFubmVsLnBvcnQxLm9ubWVzc2FnZSA9IGxpc3RlbmVyO1xuICAgIGRlZmVyID0gY3R4KHBvcnQucG9zdE1lc3NhZ2UsIHBvcnQsIDEpO1xuICAvLyBCcm93c2VycyB3aXRoIHBvc3RNZXNzYWdlLCBza2lwIFdlYldvcmtlcnNcbiAgLy8gSUU4IGhhcyBwb3N0TWVzc2FnZSwgYnV0IGl0J3Mgc3luYyAmIHR5cGVvZiBpdHMgcG9zdE1lc3NhZ2UgaXMgJ29iamVjdCdcbiAgfSBlbHNlIGlmIChnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lciAmJiB0eXBlb2YgcG9zdE1lc3NhZ2UgPT0gJ2Z1bmN0aW9uJyAmJiAhZ2xvYmFsLmltcG9ydFNjcmlwdHMpIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgZ2xvYmFsLnBvc3RNZXNzYWdlKGlkICsgJycsICcqJyk7XG4gICAgfTtcbiAgICBnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGxpc3RlbmVyLCBmYWxzZSk7XG4gIC8vIElFOC1cbiAgfSBlbHNlIGlmIChPTlJFQURZU1RBVEVDSEFOR0UgaW4gY2VsKCdzY3JpcHQnKSkge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBodG1sLmFwcGVuZENoaWxkKGNlbCgnc2NyaXB0JykpW09OUkVBRFlTVEFURUNIQU5HRV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGh0bWwucmVtb3ZlQ2hpbGQodGhpcyk7XG4gICAgICAgIHJ1bi5jYWxsKGlkKTtcbiAgICAgIH07XG4gICAgfTtcbiAgLy8gUmVzdCBvbGQgYnJvd3NlcnNcbiAgfSBlbHNlIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgc2V0VGltZW91dChjdHgocnVuLCBpZCwgMSksIDApO1xuICAgIH07XG4gIH1cbn1cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZXQ6IHNldFRhc2ssXG4gIGNsZWFyOiBjbGVhclRhc2tcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///89\n")},function(module,exports,__webpack_require__){eval("var global = __webpack_require__(2);\nvar macrotask = __webpack_require__(89).set;\nvar Observer = global.MutationObserver || global.WebKitMutationObserver;\nvar process = global.process;\nvar Promise = global.Promise;\nvar isNode = __webpack_require__(20)(process) == 'process';\n\nmodule.exports = function () {\n var head, last, notify;\n\n var flush = function () {\n var parent, fn;\n if (isNode && (parent = process.domain)) parent.exit();\n while (head) {\n fn = head.fn;\n head = head.next;\n try {\n fn();\n } catch (e) {\n if (head) notify();\n else last = undefined;\n throw e;\n }\n } last = undefined;\n if (parent) parent.enter();\n };\n\n // Node.js\n if (isNode) {\n notify = function () {\n process.nextTick(flush);\n };\n // browsers with MutationObserver, except iOS Safari - https://github.com/zloirock/core-js/issues/339\n } else if (Observer && !(global.navigator && global.navigator.standalone)) {\n var toggle = true;\n var node = document.createTextNode('');\n new Observer(flush).observe(node, { characterData: true }); // eslint-disable-line no-new\n notify = function () {\n node.data = toggle = !toggle;\n };\n // environments with maybe non-completely correct, but existent Promise\n } else if (Promise && Promise.resolve) {\n // Promise.resolve without an argument throws an error in LG WebOS 2\n var promise = Promise.resolve(undefined);\n notify = function () {\n promise.then(flush);\n };\n // for other environments - macrotask based on:\n // - setImmediate\n // - MessageChannel\n // - window.postMessag\n // - onreadystatechange\n // - setTimeout\n } else {\n notify = function () {\n // strange IE + webpack dev server bug - use .call(global)\n macrotask.call(global, flush);\n };\n }\n\n return function (fn) {\n var task = { fn: fn, next: undefined };\n if (last) last.next = task;\n if (!head) {\n head = task;\n notify();\n } last = task;\n };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWljcm90YXNrLmpzPzgwNzkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsYUFBYSxtQkFBTyxDQUFDLENBQVc7QUFDaEMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBUztBQUNqQztBQUNBO0FBQ0E7QUFDQSxhQUFhLG1CQUFPLENBQUMsRUFBUTs7QUFFN0I7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSx1Q0FBdUMsc0JBQXNCLEVBQUU7QUFDL0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EiLCJmaWxlIjoiOTAuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgbWFjcm90YXNrID0gcmVxdWlyZSgnLi9fdGFzaycpLnNldDtcbnZhciBPYnNlcnZlciA9IGdsb2JhbC5NdXRhdGlvbk9ic2VydmVyIHx8IGdsb2JhbC5XZWJLaXRNdXRhdGlvbk9ic2VydmVyO1xudmFyIHByb2Nlc3MgPSBnbG9iYWwucHJvY2VzcztcbnZhciBQcm9taXNlID0gZ2xvYmFsLlByb21pc2U7XG52YXIgaXNOb2RlID0gcmVxdWlyZSgnLi9fY29mJykocHJvY2VzcykgPT0gJ3Byb2Nlc3MnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGhlYWQsIGxhc3QsIG5vdGlmeTtcblxuICB2YXIgZmx1c2ggPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHBhcmVudCwgZm47XG4gICAgaWYgKGlzTm9kZSAmJiAocGFyZW50ID0gcHJvY2Vzcy5kb21haW4pKSBwYXJlbnQuZXhpdCgpO1xuICAgIHdoaWxlIChoZWFkKSB7XG4gICAgICBmbiA9IGhlYWQuZm47XG4gICAgICBoZWFkID0gaGVhZC5uZXh0O1xuICAgICAgdHJ5IHtcbiAgICAgICAgZm4oKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKGhlYWQpIG5vdGlmeSgpO1xuICAgICAgICBlbHNlIGxhc3QgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgfSBsYXN0ID0gdW5kZWZpbmVkO1xuICAgIGlmIChwYXJlbnQpIHBhcmVudC5lbnRlcigpO1xuICB9O1xuXG4gIC8vIE5vZGUuanNcbiAgaWYgKGlzTm9kZSkge1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soZmx1c2gpO1xuICAgIH07XG4gIC8vIGJyb3dzZXJzIHdpdGggTXV0YXRpb25PYnNlcnZlciwgZXhjZXB0IGlPUyBTYWZhcmkgLSBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvMzM5XG4gIH0gZWxzZSBpZiAoT2JzZXJ2ZXIgJiYgIShnbG9iYWwubmF2aWdhdG9yICYmIGdsb2JhbC5uYXZpZ2F0b3Iuc3RhbmRhbG9uZSkpIHtcbiAgICB2YXIgdG9nZ2xlID0gdHJ1ZTtcbiAgICB2YXIgbm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcnKTtcbiAgICBuZXcgT2JzZXJ2ZXIoZmx1c2gpLm9ic2VydmUobm9kZSwgeyBjaGFyYWN0ZXJEYXRhOiB0cnVlIH0pOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIG5vZGUuZGF0YSA9IHRvZ2dsZSA9ICF0b2dnbGU7XG4gICAgfTtcbiAgLy8gZW52aXJvbm1lbnRzIHdpdGggbWF5YmUgbm9uLWNvbXBsZXRlbHkgY29ycmVjdCwgYnV0IGV4aXN0ZW50IFByb21pc2VcbiAgfSBlbHNlIGlmIChQcm9taXNlICYmIFByb21pc2UucmVzb2x2ZSkge1xuICAgIC8vIFByb21pc2UucmVzb2x2ZSB3aXRob3V0IGFuIGFyZ3VtZW50IHRocm93cyBhbiBlcnJvciBpbiBMRyBXZWJPUyAyXG4gICAgdmFyIHByb21pc2UgPSBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBwcm9taXNlLnRoZW4oZmx1c2gpO1xuICAgIH07XG4gIC8vIGZvciBvdGhlciBlbnZpcm9ubWVudHMgLSBtYWNyb3Rhc2sgYmFzZWQgb246XG4gIC8vIC0gc2V0SW1tZWRpYXRlXG4gIC8vIC0gTWVzc2FnZUNoYW5uZWxcbiAgLy8gLSB3aW5kb3cucG9zdE1lc3NhZ1xuICAvLyAtIG9ucmVhZHlzdGF0ZWNoYW5nZVxuICAvLyAtIHNldFRpbWVvdXRcbiAgfSBlbHNlIHtcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBzdHJhbmdlIElFICsgd2VicGFjayBkZXYgc2VydmVyIGJ1ZyAtIHVzZSAuY2FsbChnbG9iYWwpXG4gICAgICBtYWNyb3Rhc2suY2FsbChnbG9iYWwsIGZsdXNoKTtcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChmbikge1xuICAgIHZhciB0YXNrID0geyBmbjogZm4sIG5leHQ6IHVuZGVmaW5lZCB9O1xuICAgIGlmIChsYXN0KSBsYXN0Lm5leHQgPSB0YXNrO1xuICAgIGlmICghaGVhZCkge1xuICAgICAgaGVhZCA9IHRhc2s7XG4gICAgICBub3RpZnkoKTtcbiAgICB9IGxhc3QgPSB0YXNrO1xuICB9O1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///90\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// 25.4.1.5 NewPromiseCapability(C)\nvar aFunction = __webpack_require__(10);\n\nfunction PromiseCapability(C) {\n var resolve, reject;\n this.promise = new C(function ($$resolve, $$reject) {\n if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n resolve = $$resolve;\n reject = $$reject;\n });\n this.resolve = aFunction(resolve);\n this.reject = aFunction(reject);\n}\n\nmodule.exports.f = function (C) {\n return new PromiseCapability(C);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbmV3LXByb21pc2UtY2FwYWJpbGl0eS5qcz9hNWI4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlOztBQUV2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSIsImZpbGUiOiI5MS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIDI1LjQuMS41IE5ld1Byb21pc2VDYXBhYmlsaXR5KEMpXG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xuXG5mdW5jdGlvbiBQcm9taXNlQ2FwYWJpbGl0eShDKSB7XG4gIHZhciByZXNvbHZlLCByZWplY3Q7XG4gIHRoaXMucHJvbWlzZSA9IG5ldyBDKGZ1bmN0aW9uICgkJHJlc29sdmUsICQkcmVqZWN0KSB7XG4gICAgaWYgKHJlc29sdmUgIT09IHVuZGVmaW5lZCB8fCByZWplY3QgIT09IHVuZGVmaW5lZCkgdGhyb3cgVHlwZUVycm9yKCdCYWQgUHJvbWlzZSBjb25zdHJ1Y3RvcicpO1xuICAgIHJlc29sdmUgPSAkJHJlc29sdmU7XG4gICAgcmVqZWN0ID0gJCRyZWplY3Q7XG4gIH0pO1xuICB0aGlzLnJlc29sdmUgPSBhRnVuY3Rpb24ocmVzb2x2ZSk7XG4gIHRoaXMucmVqZWN0ID0gYUZ1bmN0aW9uKHJlamVjdCk7XG59XG5cbm1vZHVsZS5leHBvcnRzLmYgPSBmdW5jdGlvbiAoQykge1xuICByZXR1cm4gbmV3IFByb21pc2VDYXBhYmlsaXR5KEMpO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///91\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar global = __webpack_require__(2);\nvar DESCRIPTORS = __webpack_require__(7);\nvar LIBRARY = __webpack_require__(29);\nvar $typed = __webpack_require__(62);\nvar hide = __webpack_require__(11);\nvar redefineAll = __webpack_require__(41);\nvar fails = __webpack_require__(3);\nvar anInstance = __webpack_require__(39);\nvar toInteger = __webpack_require__(21);\nvar toLength = __webpack_require__(6);\nvar toIndex = __webpack_require__(122);\nvar gOPN = __webpack_require__(37).f;\nvar dP = __webpack_require__(8).f;\nvar arrayFill = __webpack_require__(85);\nvar setToStringTag = __webpack_require__(43);\nvar ARRAY_BUFFER = 'ArrayBuffer';\nvar DATA_VIEW = 'DataView';\nvar PROTOTYPE = 'prototype';\nvar WRONG_LENGTH = 'Wrong length!';\nvar WRONG_INDEX = 'Wrong index!';\nvar $ArrayBuffer = global[ARRAY_BUFFER];\nvar $DataView = global[DATA_VIEW];\nvar Math = global.Math;\nvar RangeError = global.RangeError;\n// eslint-disable-next-line no-shadow-restricted-names\nvar Infinity = global.Infinity;\nvar BaseBuffer = $ArrayBuffer;\nvar abs = Math.abs;\nvar pow = Math.pow;\nvar floor = Math.floor;\nvar log = Math.log;\nvar LN2 = Math.LN2;\nvar BUFFER = 'buffer';\nvar BYTE_LENGTH = 'byteLength';\nvar BYTE_OFFSET = 'byteOffset';\nvar $BUFFER = DESCRIPTORS ? '_b' : BUFFER;\nvar $LENGTH = DESCRIPTORS ? '_l' : BYTE_LENGTH;\nvar $OFFSET = DESCRIPTORS ? '_o' : BYTE_OFFSET;\n\n// IEEE754 conversions based on https://github.com/feross/ieee754\nfunction packIEEE754(value, mLen, nBytes) {\n var buffer = new Array(nBytes);\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var rt = mLen === 23 ? pow(2, -24) - pow(2, -77) : 0;\n var i = 0;\n var s = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0;\n var e, m, c;\n value = abs(value);\n // eslint-disable-next-line no-self-compare\n if (value != value || value === Infinity) {\n // eslint-disable-next-line no-self-compare\n m = value != value ? 1 : 0;\n e = eMax;\n } else {\n e = floor(log(value) / LN2);\n if (value * (c = pow(2, -e)) < 1) {\n e--;\n c *= 2;\n }\n if (e + eBias >= 1) {\n value += rt / c;\n } else {\n value += rt * pow(2, 1 - eBias);\n }\n if (value * c >= 2) {\n e++;\n c /= 2;\n }\n if (e + eBias >= eMax) {\n m = 0;\n e = eMax;\n } else if (e + eBias >= 1) {\n m = (value * c - 1) * pow(2, mLen);\n e = e + eBias;\n } else {\n m = value * pow(2, eBias - 1) * pow(2, mLen);\n e = 0;\n }\n }\n for (; mLen >= 8; buffer[i++] = m & 255, m /= 256, mLen -= 8);\n e = e << mLen | m;\n eLen += mLen;\n for (; eLen > 0; buffer[i++] = e & 255, e /= 256, eLen -= 8);\n buffer[--i] |= s * 128;\n return buffer;\n}\nfunction unpackIEEE754(buffer, mLen, nBytes) {\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var nBits = eLen - 7;\n var i = nBytes - 1;\n var s = buffer[i--];\n var e = s & 127;\n var m;\n s >>= 7;\n for (; nBits > 0; e = e * 256 + buffer[i], i--, nBits -= 8);\n m = e & (1 << -nBits) - 1;\n e >>= -nBits;\n nBits += mLen;\n for (; nBits > 0; m = m * 256 + buffer[i], i--, nBits -= 8);\n if (e === 0) {\n e = 1 - eBias;\n } else if (e === eMax) {\n return m ? NaN : s ? -Infinity : Infinity;\n } else {\n m = m + pow(2, mLen);\n e = e - eBias;\n } return (s ? -1 : 1) * m * pow(2, e - mLen);\n}\n\nfunction unpackI32(bytes) {\n return bytes[3] << 24 | bytes[2] << 16 | bytes[1] << 8 | bytes[0];\n}\nfunction packI8(it) {\n return [it & 0xff];\n}\nfunction packI16(it) {\n return [it & 0xff, it >> 8 & 0xff];\n}\nfunction packI32(it) {\n return [it & 0xff, it >> 8 & 0xff, it >> 16 & 0xff, it >> 24 & 0xff];\n}\nfunction packF64(it) {\n return packIEEE754(it, 52, 8);\n}\nfunction packF32(it) {\n return packIEEE754(it, 23, 4);\n}\n\nfunction addGetter(C, key, internal) {\n dP(C[PROTOTYPE], key, { get: function () { return this[internal]; } });\n}\n\nfunction get(view, bytes, index, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = store.slice(start, start + bytes);\n return isLittleEndian ? pack : pack.reverse();\n}\nfunction set(view, bytes, index, conversion, value, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = conversion(+value);\n for (var i = 0; i < bytes; i++) store[start + i] = pack[isLittleEndian ? i : bytes - i - 1];\n}\n\nif (!$typed.ABV) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer, ARRAY_BUFFER);\n var byteLength = toIndex(length);\n this._b = arrayFill.call(new Array(byteLength), 0);\n this[$LENGTH] = byteLength;\n };\n\n $DataView = function DataView(buffer, byteOffset, byteLength) {\n anInstance(this, $DataView, DATA_VIEW);\n anInstance(buffer, $ArrayBuffer, DATA_VIEW);\n var bufferLength = buffer[$LENGTH];\n var offset = toInteger(byteOffset);\n if (offset < 0 || offset > bufferLength) throw RangeError('Wrong offset!');\n byteLength = byteLength === undefined ? bufferLength - offset : toLength(byteLength);\n if (offset + byteLength > bufferLength) throw RangeError(WRONG_LENGTH);\n this[$BUFFER] = buffer;\n this[$OFFSET] = offset;\n this[$LENGTH] = byteLength;\n };\n\n if (DESCRIPTORS) {\n addGetter($ArrayBuffer, BYTE_LENGTH, '_l');\n addGetter($DataView, BUFFER, '_b');\n addGetter($DataView, BYTE_LENGTH, '_l');\n addGetter($DataView, BYTE_OFFSET, '_o');\n }\n\n redefineAll($DataView[PROTOTYPE], {\n getInt8: function getInt8(byteOffset) {\n return get(this, 1, byteOffset)[0] << 24 >> 24;\n },\n getUint8: function getUint8(byteOffset) {\n return get(this, 1, byteOffset)[0];\n },\n getInt16: function getInt16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return (bytes[1] << 8 | bytes[0]) << 16 >> 16;\n },\n getUint16: function getUint16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return bytes[1] << 8 | bytes[0];\n },\n getInt32: function getInt32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1]));\n },\n getUint32: function getUint32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1])) >>> 0;\n },\n getFloat32: function getFloat32(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 4, byteOffset, arguments[1]), 23, 4);\n },\n getFloat64: function getFloat64(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 8, byteOffset, arguments[1]), 52, 8);\n },\n setInt8: function setInt8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setUint8: function setUint8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setInt16: function setInt16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setUint16: function setUint16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setInt32: function setInt32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setUint32: function setUint32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setFloat32: function setFloat32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packF32, value, arguments[2]);\n },\n setFloat64: function setFloat64(byteOffset, value /* , littleEndian */) {\n set(this, 8, byteOffset, packF64, value, arguments[2]);\n }\n });\n} else {\n if (!fails(function () {\n $ArrayBuffer(1);\n }) || !fails(function () {\n new $ArrayBuffer(-1); // eslint-disable-line no-new\n }) || fails(function () {\n new $ArrayBuffer(); // eslint-disable-line no-new\n new $ArrayBuffer(1.5); // eslint-disable-line no-new\n new $ArrayBuffer(NaN); // eslint-disable-line no-new\n return $ArrayBuffer.name != ARRAY_BUFFER;\n })) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer);\n return new BaseBuffer(toIndex(length));\n };\n var ArrayBufferProto = $ArrayBuffer[PROTOTYPE] = BaseBuffer[PROTOTYPE];\n for (var keys = gOPN(BaseBuffer), j = 0, key; keys.length > j;) {\n if (!((key = keys[j++]) in $ArrayBuffer)) hide($ArrayBuffer, key, BaseBuffer[key]);\n }\n if (!LIBRARY) ArrayBufferProto.constructor = $ArrayBuffer;\n }\n // iOS Safari 7.x bug\n var view = new $DataView(new $ArrayBuffer(2));\n var $setInt8 = $DataView[PROTOTYPE].setInt8;\n view.setInt8(0, 2147483648);\n view.setInt8(1, 2147483649);\n if (view.getInt8(0) || !view.getInt8(1)) redefineAll($DataView[PROTOTYPE], {\n setInt8: function setInt8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n },\n setUint8: function setUint8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n }\n }, true);\n}\nsetToStringTag($ArrayBuffer, ARRAY_BUFFER);\nsetToStringTag($DataView, DATA_VIEW);\nhide($DataView[PROTOTYPE], $typed.VIEW, true);\nexports[ARRAY_BUFFER] = $ArrayBuffer;\nexports[DATA_VIEW] = $DataView;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdHlwZWQtYnVmZmVyLmpzP2VkMGIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixhQUFhLG1CQUFPLENBQUMsQ0FBVztBQUNoQyxrQkFBa0IsbUJBQU8sQ0FBQyxDQUFnQjtBQUMxQyxjQUFjLG1CQUFPLENBQUMsRUFBWTtBQUNsQyxhQUFhLG1CQUFPLENBQUMsRUFBVTtBQUMvQixXQUFXLG1CQUFPLENBQUMsRUFBUztBQUM1QixrQkFBa0IsbUJBQU8sQ0FBQyxFQUFpQjtBQUMzQyxZQUFZLG1CQUFPLENBQUMsQ0FBVTtBQUM5QixpQkFBaUIsbUJBQU8sQ0FBQyxFQUFnQjtBQUN6QyxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGNBQWMsbUJBQU8sQ0FBQyxHQUFhO0FBQ25DLFdBQVcsbUJBQU8sQ0FBQyxFQUFnQjtBQUNuQyxTQUFTLG1CQUFPLENBQUMsQ0FBYztBQUMvQixnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDLHFCQUFxQixtQkFBTyxDQUFDLEVBQXNCO0FBQ25EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLFdBQVc7QUFDbkI7QUFDQTtBQUNBLFFBQVEsVUFBVTtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsV0FBVztBQUNuQjtBQUNBO0FBQ0E7QUFDQSxRQUFRLFdBQVc7QUFDbkI7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHlCQUF5QixtQkFBbUIsdUJBQXVCLEVBQUUsRUFBRTtBQUN2RTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixXQUFXO0FBQzVCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBO0FBQ0EsR0FBRztBQUNILHlCQUF5QjtBQUN6QixHQUFHO0FBQ0gsdUJBQXVCO0FBQ3ZCLDBCQUEwQjtBQUMxQiwwQkFBMEI7QUFDMUI7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlEQUFpRCxpQkFBaUI7QUFDbEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiOTIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpO1xudmFyIExJQlJBUlkgPSByZXF1aXJlKCcuL19saWJyYXJ5Jyk7XG52YXIgJHR5cGVkID0gcmVxdWlyZSgnLi9fdHlwZWQnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIHJlZGVmaW5lQWxsID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUtYWxsJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuL19hbi1pbnN0YW5jZScpO1xudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIHRvSW5kZXggPSByZXF1aXJlKCcuL190by1pbmRleCcpO1xudmFyIGdPUE4gPSByZXF1aXJlKCcuL19vYmplY3QtZ29wbicpLmY7XG52YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mO1xudmFyIGFycmF5RmlsbCA9IHJlcXVpcmUoJy4vX2FycmF5LWZpbGwnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgQVJSQVlfQlVGRkVSID0gJ0FycmF5QnVmZmVyJztcbnZhciBEQVRBX1ZJRVcgPSAnRGF0YVZpZXcnO1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xudmFyIFdST05HX0xFTkdUSCA9ICdXcm9uZyBsZW5ndGghJztcbnZhciBXUk9OR19JTkRFWCA9ICdXcm9uZyBpbmRleCEnO1xudmFyICRBcnJheUJ1ZmZlciA9IGdsb2JhbFtBUlJBWV9CVUZGRVJdO1xudmFyICREYXRhVmlldyA9IGdsb2JhbFtEQVRBX1ZJRVddO1xudmFyIE1hdGggPSBnbG9iYWwuTWF0aDtcbnZhciBSYW5nZUVycm9yID0gZ2xvYmFsLlJhbmdlRXJyb3I7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2hhZG93LXJlc3RyaWN0ZWQtbmFtZXNcbnZhciBJbmZpbml0eSA9IGdsb2JhbC5JbmZpbml0eTtcbnZhciBCYXNlQnVmZmVyID0gJEFycmF5QnVmZmVyO1xudmFyIGFicyA9IE1hdGguYWJzO1xudmFyIHBvdyA9IE1hdGgucG93O1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcbnZhciBsb2cgPSBNYXRoLmxvZztcbnZhciBMTjIgPSBNYXRoLkxOMjtcbnZhciBCVUZGRVIgPSAnYnVmZmVyJztcbnZhciBCWVRFX0xFTkdUSCA9ICdieXRlTGVuZ3RoJztcbnZhciBCWVRFX09GRlNFVCA9ICdieXRlT2Zmc2V0JztcbnZhciAkQlVGRkVSID0gREVTQ1JJUFRPUlMgPyAnX2InIDogQlVGRkVSO1xudmFyICRMRU5HVEggPSBERVNDUklQVE9SUyA/ICdfbCcgOiBCWVRFX0xFTkdUSDtcbnZhciAkT0ZGU0VUID0gREVTQ1JJUFRPUlMgPyAnX28nIDogQllURV9PRkZTRVQ7XG5cbi8vIElFRUU3NTQgY29udmVyc2lvbnMgYmFzZWQgb24gaHR0cHM6Ly9naXRodWIuY29tL2Zlcm9zcy9pZWVlNzU0XG5mdW5jdGlvbiBwYWNrSUVFRTc1NCh2YWx1ZSwgbUxlbiwgbkJ5dGVzKSB7XG4gIHZhciBidWZmZXIgPSBuZXcgQXJyYXkobkJ5dGVzKTtcbiAgdmFyIGVMZW4gPSBuQnl0ZXMgKiA4IC0gbUxlbiAtIDE7XG4gIHZhciBlTWF4ID0gKDEgPDwgZUxlbikgLSAxO1xuICB2YXIgZUJpYXMgPSBlTWF4ID4+IDE7XG4gIHZhciBydCA9IG1MZW4gPT09IDIzID8gcG93KDIsIC0yNCkgLSBwb3coMiwgLTc3KSA6IDA7XG4gIHZhciBpID0gMDtcbiAgdmFyIHMgPSB2YWx1ZSA8IDAgfHwgdmFsdWUgPT09IDAgJiYgMSAvIHZhbHVlIDwgMCA/IDEgOiAwO1xuICB2YXIgZSwgbSwgYztcbiAgdmFsdWUgPSBhYnModmFsdWUpO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gIGlmICh2YWx1ZSAhPSB2YWx1ZSB8fCB2YWx1ZSA9PT0gSW5maW5pdHkpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgbSA9IHZhbHVlICE9IHZhbHVlID8gMSA6IDA7XG4gICAgZSA9IGVNYXg7XG4gIH0gZWxzZSB7XG4gICAgZSA9IGZsb29yKGxvZyh2YWx1ZSkgLyBMTjIpO1xuICAgIGlmICh2YWx1ZSAqIChjID0gcG93KDIsIC1lKSkgPCAxKSB7XG4gICAgICBlLS07XG4gICAgICBjICo9IDI7XG4gICAgfVxuICAgIGlmIChlICsgZUJpYXMgPj0gMSkge1xuICAgICAgdmFsdWUgKz0gcnQgLyBjO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YWx1ZSArPSBydCAqIHBvdygyLCAxIC0gZUJpYXMpO1xuICAgIH1cbiAgICBpZiAodmFsdWUgKiBjID49IDIpIHtcbiAgICAgIGUrKztcbiAgICAgIGMgLz0gMjtcbiAgICB9XG4gICAgaWYgKGUgKyBlQmlhcyA+PSBlTWF4KSB7XG4gICAgICBtID0gMDtcbiAgICAgIGUgPSBlTWF4O1xuICAgIH0gZWxzZSBpZiAoZSArIGVCaWFzID49IDEpIHtcbiAgICAgIG0gPSAodmFsdWUgKiBjIC0gMSkgKiBwb3coMiwgbUxlbik7XG4gICAgICBlID0gZSArIGVCaWFzO1xuICAgIH0gZWxzZSB7XG4gICAgICBtID0gdmFsdWUgKiBwb3coMiwgZUJpYXMgLSAxKSAqIHBvdygyLCBtTGVuKTtcbiAgICAgIGUgPSAwO1xuICAgIH1cbiAgfVxuICBmb3IgKDsgbUxlbiA+PSA4OyBidWZmZXJbaSsrXSA9IG0gJiAyNTUsIG0gLz0gMjU2LCBtTGVuIC09IDgpO1xuICBlID0gZSA8PCBtTGVuIHwgbTtcbiAgZUxlbiArPSBtTGVuO1xuICBmb3IgKDsgZUxlbiA+IDA7IGJ1ZmZlcltpKytdID0gZSAmIDI1NSwgZSAvPSAyNTYsIGVMZW4gLT0gOCk7XG4gIGJ1ZmZlclstLWldIHw9IHMgKiAxMjg7XG4gIHJldHVybiBidWZmZXI7XG59XG5mdW5jdGlvbiB1bnBhY2tJRUVFNzU0KGJ1ZmZlciwgbUxlbiwgbkJ5dGVzKSB7XG4gIHZhciBlTGVuID0gbkJ5dGVzICogOCAtIG1MZW4gLSAxO1xuICB2YXIgZU1heCA9ICgxIDw8IGVMZW4pIC0gMTtcbiAgdmFyIGVCaWFzID0gZU1heCA+PiAxO1xuICB2YXIgbkJpdHMgPSBlTGVuIC0gNztcbiAgdmFyIGkgPSBuQnl0ZXMgLSAxO1xuICB2YXIgcyA9IGJ1ZmZlcltpLS1dO1xuICB2YXIgZSA9IHMgJiAxMjc7XG4gIHZhciBtO1xuICBzID4+PSA3O1xuICBmb3IgKDsgbkJpdHMgPiAwOyBlID0gZSAqIDI1NiArIGJ1ZmZlcltpXSwgaS0tLCBuQml0cyAtPSA4KTtcbiAgbSA9IGUgJiAoMSA8PCAtbkJpdHMpIC0gMTtcbiAgZSA+Pj0gLW5CaXRzO1xuICBuQml0cyArPSBtTGVuO1xuICBmb3IgKDsgbkJpdHMgPiAwOyBtID0gbSAqIDI1NiArIGJ1ZmZlcltpXSwgaS0tLCBuQml0cyAtPSA4KTtcbiAgaWYgKGUgPT09IDApIHtcbiAgICBlID0gMSAtIGVCaWFzO1xuICB9IGVsc2UgaWYgKGUgPT09IGVNYXgpIHtcbiAgICByZXR1cm4gbSA/IE5hTiA6IHMgPyAtSW5maW5pdHkgOiBJbmZpbml0eTtcbiAgfSBlbHNlIHtcbiAgICBtID0gbSArIHBvdygyLCBtTGVuKTtcbiAgICBlID0gZSAtIGVCaWFzO1xuICB9IHJldHVybiAocyA/IC0xIDogMSkgKiBtICogcG93KDIsIGUgLSBtTGVuKTtcbn1cblxuZnVuY3Rpb24gdW5wYWNrSTMyKGJ5dGVzKSB7XG4gIHJldHVybiBieXRlc1szXSA8PCAyNCB8IGJ5dGVzWzJdIDw8IDE2IHwgYnl0ZXNbMV0gPDwgOCB8IGJ5dGVzWzBdO1xufVxuZnVuY3Rpb24gcGFja0k4KGl0KSB7XG4gIHJldHVybiBbaXQgJiAweGZmXTtcbn1cbmZ1bmN0aW9uIHBhY2tJMTYoaXQpIHtcbiAgcmV0dXJuIFtpdCAmIDB4ZmYsIGl0ID4+IDggJiAweGZmXTtcbn1cbmZ1bmN0aW9uIHBhY2tJMzIoaXQpIHtcbiAgcmV0dXJuIFtpdCAmIDB4ZmYsIGl0ID4+IDggJiAweGZmLCBpdCA+PiAxNiAmIDB4ZmYsIGl0ID4+IDI0ICYgMHhmZl07XG59XG5mdW5jdGlvbiBwYWNrRjY0KGl0KSB7XG4gIHJldHVybiBwYWNrSUVFRTc1NChpdCwgNTIsIDgpO1xufVxuZnVuY3Rpb24gcGFja0YzMihpdCkge1xuICByZXR1cm4gcGFja0lFRUU3NTQoaXQsIDIzLCA0KTtcbn1cblxuZnVuY3Rpb24gYWRkR2V0dGVyKEMsIGtleSwgaW50ZXJuYWwpIHtcbiAgZFAoQ1tQUk9UT1RZUEVdLCBrZXksIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzW2ludGVybmFsXTsgfSB9KTtcbn1cblxuZnVuY3Rpb24gZ2V0KHZpZXcsIGJ5dGVzLCBpbmRleCwgaXNMaXR0bGVFbmRpYW4pIHtcbiAgdmFyIG51bUluZGV4ID0gK2luZGV4O1xuICB2YXIgaW50SW5kZXggPSB0b0luZGV4KG51bUluZGV4KTtcbiAgaWYgKGludEluZGV4ICsgYnl0ZXMgPiB2aWV3WyRMRU5HVEhdKSB0aHJvdyBSYW5nZUVycm9yKFdST05HX0lOREVYKTtcbiAgdmFyIHN0b3JlID0gdmlld1skQlVGRkVSXS5fYjtcbiAgdmFyIHN0YXJ0ID0gaW50SW5kZXggKyB2aWV3WyRPRkZTRVRdO1xuICB2YXIgcGFjayA9IHN0b3JlLnNsaWNlKHN0YXJ0LCBzdGFydCArIGJ5dGVzKTtcbiAgcmV0dXJuIGlzTGl0dGxlRW5kaWFuID8gcGFjayA6IHBhY2sucmV2ZXJzZSgpO1xufVxuZnVuY3Rpb24gc2V0KHZpZXcsIGJ5dGVzLCBpbmRleCwgY29udmVyc2lvbiwgdmFsdWUsIGlzTGl0dGxlRW5kaWFuKSB7XG4gIHZhciBudW1JbmRleCA9ICtpbmRleDtcbiAgdmFyIGludEluZGV4ID0gdG9JbmRleChudW1JbmRleCk7XG4gIGlmIChpbnRJbmRleCArIGJ5dGVzID4gdmlld1skTEVOR1RIXSkgdGhyb3cgUmFuZ2VFcnJvcihXUk9OR19JTkRFWCk7XG4gIHZhciBzdG9yZSA9IHZpZXdbJEJVRkZFUl0uX2I7XG4gIHZhciBzdGFydCA9IGludEluZGV4ICsgdmlld1skT0ZGU0VUXTtcbiAgdmFyIHBhY2sgPSBjb252ZXJzaW9uKCt2YWx1ZSk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYnl0ZXM7IGkrKykgc3RvcmVbc3RhcnQgKyBpXSA9IHBhY2tbaXNMaXR0bGVFbmRpYW4gPyBpIDogYnl0ZXMgLSBpIC0gMV07XG59XG5cbmlmICghJHR5cGVkLkFCVikge1xuICAkQXJyYXlCdWZmZXIgPSBmdW5jdGlvbiBBcnJheUJ1ZmZlcihsZW5ndGgpIHtcbiAgICBhbkluc3RhbmNlKHRoaXMsICRBcnJheUJ1ZmZlciwgQVJSQVlfQlVGRkVSKTtcbiAgICB2YXIgYnl0ZUxlbmd0aCA9IHRvSW5kZXgobGVuZ3RoKTtcbiAgICB0aGlzLl9iID0gYXJyYXlGaWxsLmNhbGwobmV3IEFycmF5KGJ5dGVMZW5ndGgpLCAwKTtcbiAgICB0aGlzWyRMRU5HVEhdID0gYnl0ZUxlbmd0aDtcbiAgfTtcblxuICAkRGF0YVZpZXcgPSBmdW5jdGlvbiBEYXRhVmlldyhidWZmZXIsIGJ5dGVPZmZzZXQsIGJ5dGVMZW5ndGgpIHtcbiAgICBhbkluc3RhbmNlKHRoaXMsICREYXRhVmlldywgREFUQV9WSUVXKTtcbiAgICBhbkluc3RhbmNlKGJ1ZmZlciwgJEFycmF5QnVmZmVyLCBEQVRBX1ZJRVcpO1xuICAgIHZhciBidWZmZXJMZW5ndGggPSBidWZmZXJbJExFTkdUSF07XG4gICAgdmFyIG9mZnNldCA9IHRvSW50ZWdlcihieXRlT2Zmc2V0KTtcbiAgICBpZiAob2Zmc2V0IDwgMCB8fCBvZmZzZXQgPiBidWZmZXJMZW5ndGgpIHRocm93IFJhbmdlRXJyb3IoJ1dyb25nIG9mZnNldCEnKTtcbiAgICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCA9PT0gdW5kZWZpbmVkID8gYnVmZmVyTGVuZ3RoIC0gb2Zmc2V0IDogdG9MZW5ndGgoYnl0ZUxlbmd0aCk7XG4gICAgaWYgKG9mZnNldCArIGJ5dGVMZW5ndGggPiBidWZmZXJMZW5ndGgpIHRocm93IFJhbmdlRXJyb3IoV1JPTkdfTEVOR1RIKTtcbiAgICB0aGlzWyRCVUZGRVJdID0gYnVmZmVyO1xuICAgIHRoaXNbJE9GRlNFVF0gPSBvZmZzZXQ7XG4gICAgdGhpc1skTEVOR1RIXSA9IGJ5dGVMZW5ndGg7XG4gIH07XG5cbiAgaWYgKERFU0NSSVBUT1JTKSB7XG4gICAgYWRkR2V0dGVyKCRBcnJheUJ1ZmZlciwgQllURV9MRU5HVEgsICdfbCcpO1xuICAgIGFkZEdldHRlcigkRGF0YVZpZXcsIEJVRkZFUiwgJ19iJyk7XG4gICAgYWRkR2V0dGVyKCREYXRhVmlldywgQllURV9MRU5HVEgsICdfbCcpO1xuICAgIGFkZEdldHRlcigkRGF0YVZpZXcsIEJZVEVfT0ZGU0VULCAnX28nKTtcbiAgfVxuXG4gIHJlZGVmaW5lQWxsKCREYXRhVmlld1tQUk9UT1RZUEVdLCB7XG4gICAgZ2V0SW50ODogZnVuY3Rpb24gZ2V0SW50OChieXRlT2Zmc2V0KSB7XG4gICAgICByZXR1cm4gZ2V0KHRoaXMsIDEsIGJ5dGVPZmZzZXQpWzBdIDw8IDI0ID4+IDI0O1xuICAgIH0sXG4gICAgZ2V0VWludDg6IGZ1bmN0aW9uIGdldFVpbnQ4KGJ5dGVPZmZzZXQpIHtcbiAgICAgIHJldHVybiBnZXQodGhpcywgMSwgYnl0ZU9mZnNldClbMF07XG4gICAgfSxcbiAgICBnZXRJbnQxNjogZnVuY3Rpb24gZ2V0SW50MTYoYnl0ZU9mZnNldCAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgdmFyIGJ5dGVzID0gZ2V0KHRoaXMsIDIsIGJ5dGVPZmZzZXQsIGFyZ3VtZW50c1sxXSk7XG4gICAgICByZXR1cm4gKGJ5dGVzWzFdIDw8IDggfCBieXRlc1swXSkgPDwgMTYgPj4gMTY7XG4gICAgfSxcbiAgICBnZXRVaW50MTY6IGZ1bmN0aW9uIGdldFVpbnQxNihieXRlT2Zmc2V0IC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICB2YXIgYnl0ZXMgPSBnZXQodGhpcywgMiwgYnl0ZU9mZnNldCwgYXJndW1lbnRzWzFdKTtcbiAgICAgIHJldHVybiBieXRlc1sxXSA8PCA4IHwgYnl0ZXNbMF07XG4gICAgfSxcbiAgICBnZXRJbnQzMjogZnVuY3Rpb24gZ2V0SW50MzIoYnl0ZU9mZnNldCAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgcmV0dXJuIHVucGFja0kzMihnZXQodGhpcywgNCwgYnl0ZU9mZnNldCwgYXJndW1lbnRzWzFdKSk7XG4gICAgfSxcbiAgICBnZXRVaW50MzI6IGZ1bmN0aW9uIGdldFVpbnQzMihieXRlT2Zmc2V0IC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICByZXR1cm4gdW5wYWNrSTMyKGdldCh0aGlzLCA0LCBieXRlT2Zmc2V0LCBhcmd1bWVudHNbMV0pKSA+Pj4gMDtcbiAgICB9LFxuICAgIGdldEZsb2F0MzI6IGZ1bmN0aW9uIGdldEZsb2F0MzIoYnl0ZU9mZnNldCAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgcmV0dXJuIHVucGFja0lFRUU3NTQoZ2V0KHRoaXMsIDQsIGJ5dGVPZmZzZXQsIGFyZ3VtZW50c1sxXSksIDIzLCA0KTtcbiAgICB9LFxuICAgIGdldEZsb2F0NjQ6IGZ1bmN0aW9uIGdldEZsb2F0NjQoYnl0ZU9mZnNldCAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgcmV0dXJuIHVucGFja0lFRUU3NTQoZ2V0KHRoaXMsIDgsIGJ5dGVPZmZzZXQsIGFyZ3VtZW50c1sxXSksIDUyLCA4KTtcbiAgICB9LFxuICAgIHNldEludDg6IGZ1bmN0aW9uIHNldEludDgoYnl0ZU9mZnNldCwgdmFsdWUpIHtcbiAgICAgIHNldCh0aGlzLCAxLCBieXRlT2Zmc2V0LCBwYWNrSTgsIHZhbHVlKTtcbiAgICB9LFxuICAgIHNldFVpbnQ4OiBmdW5jdGlvbiBzZXRVaW50OChieXRlT2Zmc2V0LCB2YWx1ZSkge1xuICAgICAgc2V0KHRoaXMsIDEsIGJ5dGVPZmZzZXQsIHBhY2tJOCwgdmFsdWUpO1xuICAgIH0sXG4gICAgc2V0SW50MTY6IGZ1bmN0aW9uIHNldEludDE2KGJ5dGVPZmZzZXQsIHZhbHVlIC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICBzZXQodGhpcywgMiwgYnl0ZU9mZnNldCwgcGFja0kxNiwgdmFsdWUsIGFyZ3VtZW50c1syXSk7XG4gICAgfSxcbiAgICBzZXRVaW50MTY6IGZ1bmN0aW9uIHNldFVpbnQxNihieXRlT2Zmc2V0LCB2YWx1ZSAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgc2V0KHRoaXMsIDIsIGJ5dGVPZmZzZXQsIHBhY2tJMTYsIHZhbHVlLCBhcmd1bWVudHNbMl0pO1xuICAgIH0sXG4gICAgc2V0SW50MzI6IGZ1bmN0aW9uIHNldEludDMyKGJ5dGVPZmZzZXQsIHZhbHVlIC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICBzZXQodGhpcywgNCwgYnl0ZU9mZnNldCwgcGFja0kzMiwgdmFsdWUsIGFyZ3VtZW50c1syXSk7XG4gICAgfSxcbiAgICBzZXRVaW50MzI6IGZ1bmN0aW9uIHNldFVpbnQzMihieXRlT2Zmc2V0LCB2YWx1ZSAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgc2V0KHRoaXMsIDQsIGJ5dGVPZmZzZXQsIHBhY2tJMzIsIHZhbHVlLCBhcmd1bWVudHNbMl0pO1xuICAgIH0sXG4gICAgc2V0RmxvYXQzMjogZnVuY3Rpb24gc2V0RmxvYXQzMihieXRlT2Zmc2V0LCB2YWx1ZSAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgc2V0KHRoaXMsIDQsIGJ5dGVPZmZzZXQsIHBhY2tGMzIsIHZhbHVlLCBhcmd1bWVudHNbMl0pO1xuICAgIH0sXG4gICAgc2V0RmxvYXQ2NDogZnVuY3Rpb24gc2V0RmxvYXQ2NChieXRlT2Zmc2V0LCB2YWx1ZSAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgc2V0KHRoaXMsIDgsIGJ5dGVPZmZzZXQsIHBhY2tGNjQsIHZhbHVlLCBhcmd1bWVudHNbMl0pO1xuICAgIH1cbiAgfSk7XG59IGVsc2Uge1xuICBpZiAoIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAkQXJyYXlCdWZmZXIoMSk7XG4gIH0pIHx8ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgbmV3ICRBcnJheUJ1ZmZlcigtMSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gIH0pIHx8IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICBuZXcgJEFycmF5QnVmZmVyKCk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgbmV3ICRBcnJheUJ1ZmZlcigxLjUpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgIG5ldyAkQXJyYXlCdWZmZXIoTmFOKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICByZXR1cm4gJEFycmF5QnVmZmVyLm5hbWUgIT0gQVJSQVlfQlVGRkVSO1xuICB9KSkge1xuICAgICRBcnJheUJ1ZmZlciA9IGZ1bmN0aW9uIEFycmF5QnVmZmVyKGxlbmd0aCkge1xuICAgICAgYW5JbnN0YW5jZSh0aGlzLCAkQXJyYXlCdWZmZXIpO1xuICAgICAgcmV0dXJuIG5ldyBCYXNlQnVmZmVyKHRvSW5kZXgobGVuZ3RoKSk7XG4gICAgfTtcbiAgICB2YXIgQXJyYXlCdWZmZXJQcm90byA9ICRBcnJheUJ1ZmZlcltQUk9UT1RZUEVdID0gQmFzZUJ1ZmZlcltQUk9UT1RZUEVdO1xuICAgIGZvciAodmFyIGtleXMgPSBnT1BOKEJhc2VCdWZmZXIpLCBqID0gMCwga2V5OyBrZXlzLmxlbmd0aCA+IGo7KSB7XG4gICAgICBpZiAoISgoa2V5ID0ga2V5c1tqKytdKSBpbiAkQXJyYXlCdWZmZXIpKSBoaWRlKCRBcnJheUJ1ZmZlciwga2V5LCBCYXNlQnVmZmVyW2tleV0pO1xuICAgIH1cbiAgICBpZiAoIUxJQlJBUlkpIEFycmF5QnVmZmVyUHJvdG8uY29uc3RydWN0b3IgPSAkQXJyYXlCdWZmZXI7XG4gIH1cbiAgLy8gaU9TIFNhZmFyaSA3LnggYnVnXG4gIHZhciB2aWV3ID0gbmV3ICREYXRhVmlldyhuZXcgJEFycmF5QnVmZmVyKDIpKTtcbiAgdmFyICRzZXRJbnQ4ID0gJERhdGFWaWV3W1BST1RPVFlQRV0uc2V0SW50ODtcbiAgdmlldy5zZXRJbnQ4KDAsIDIxNDc0ODM2NDgpO1xuICB2aWV3LnNldEludDgoMSwgMjE0NzQ4MzY0OSk7XG4gIGlmICh2aWV3LmdldEludDgoMCkgfHwgIXZpZXcuZ2V0SW50OCgxKSkgcmVkZWZpbmVBbGwoJERhdGFWaWV3W1BST1RPVFlQRV0sIHtcbiAgICBzZXRJbnQ4OiBmdW5jdGlvbiBzZXRJbnQ4KGJ5dGVPZmZzZXQsIHZhbHVlKSB7XG4gICAgICAkc2V0SW50OC5jYWxsKHRoaXMsIGJ5dGVPZmZzZXQsIHZhbHVlIDw8IDI0ID4+IDI0KTtcbiAgICB9LFxuICAgIHNldFVpbnQ4OiBmdW5jdGlvbiBzZXRVaW50OChieXRlT2Zmc2V0LCB2YWx1ZSkge1xuICAgICAgJHNldEludDguY2FsbCh0aGlzLCBieXRlT2Zmc2V0LCB2YWx1ZSA8PCAyNCA+PiAyNCk7XG4gICAgfVxuICB9LCB0cnVlKTtcbn1cbnNldFRvU3RyaW5nVGFnKCRBcnJheUJ1ZmZlciwgQVJSQVlfQlVGRkVSKTtcbnNldFRvU3RyaW5nVGFnKCREYXRhVmlldywgREFUQV9WSUVXKTtcbmhpZGUoJERhdGFWaWV3W1BST1RPVFlQRV0sICR0eXBlZC5WSUVXLCB0cnVlKTtcbmV4cG9ydHNbQVJSQVlfQlVGRkVSXSA9ICRBcnJheUJ1ZmZlcjtcbmV4cG9ydHNbREFUQV9WSUVXXSA9ICREYXRhVmlldztcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///92\n")},function(module,exports){eval('var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function("return this")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === "object") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it\'s\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULyh3ZWJwYWNrKS9idWlsZGluL2dsb2JhbC5qcz9jZDAwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsNENBQTRDOztBQUU1QyIsImZpbGUiOiI5My5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBnO1xuXG4vLyBUaGlzIHdvcmtzIGluIG5vbi1zdHJpY3QgbW9kZVxuZyA9IChmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXM7XG59KSgpO1xuXG50cnkge1xuXHQvLyBUaGlzIHdvcmtzIGlmIGV2YWwgaXMgYWxsb3dlZCAoc2VlIENTUClcblx0ZyA9IGcgfHwgbmV3IEZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKTtcbn0gY2F0Y2ggKGUpIHtcblx0Ly8gVGhpcyB3b3JrcyBpZiB0aGUgd2luZG93IHJlZmVyZW5jZSBpcyBhdmFpbGFibGVcblx0aWYgKHR5cGVvZiB3aW5kb3cgPT09IFwib2JqZWN0XCIpIGcgPSB3aW5kb3c7XG59XG5cbi8vIGcgY2FuIHN0aWxsIGJlIHVuZGVmaW5lZCwgYnV0IG5vdGhpbmcgdG8gZG8gYWJvdXQgaXQuLi5cbi8vIFdlIHJldHVybiB1bmRlZmluZWQsIGluc3RlYWQgb2Ygbm90aGluZyBoZXJlLCBzbyBpdCdzXG4vLyBlYXNpZXIgdG8gaGFuZGxlIHRoaXMgY2FzZS4gaWYoIWdsb2JhbCkgeyAuLi59XG5cbm1vZHVsZS5leHBvcnRzID0gZztcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///93\n')},function(module,exports,__webpack_require__){eval("module.exports = !__webpack_require__(7) && !__webpack_require__(3)(function () {\n return Object.defineProperty(__webpack_require__(66)('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faWU4LWRvbS1kZWZpbmUuanM/YzY5YSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxrQkFBa0IsbUJBQU8sQ0FBQyxDQUFnQixNQUFNLG1CQUFPLENBQUMsQ0FBVTtBQUNsRSwrQkFBK0IsbUJBQU8sQ0FBQyxFQUFlLGdCQUFnQixtQkFBbUIsVUFBVSxFQUFFLEVBQUU7QUFDdkcsQ0FBQyIsImZpbGUiOiI5NC5qcyIsInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gIXJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgIXJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHJlcXVpcmUoJy4vX2RvbS1jcmVhdGUnKSgnZGl2JyksICdhJywgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH0gfSkuYSAhPSA3O1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///94\n")},function(module,exports,__webpack_require__){eval("exports.f = __webpack_require__(5);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fd2tzLWV4dC5qcz8zN2M4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVksbUJBQU8sQ0FBQyxDQUFRIiwiZmlsZSI6Ijk1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0cy5mID0gcmVxdWlyZSgnLi9fd2tzJyk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///95\n")},function(module,exports,__webpack_require__){eval("var has = __webpack_require__(14);\nvar toIObject = __webpack_require__(15);\nvar arrayIndexOf = __webpack_require__(52)(false);\nvar IE_PROTO = __webpack_require__(68)('IE_PROTO');\n\nmodule.exports = function (object, names) {\n var O = toIObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (has(O, key = names[i++])) {\n ~arrayIndexOf(result, key) || result.push(key);\n }\n return result;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWtleXMtaW50ZXJuYWwuanM/Y2UxMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxVQUFVLG1CQUFPLENBQUMsRUFBUTtBQUMxQixnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDLG1CQUFtQixtQkFBTyxDQUFDLEVBQW1CO0FBQzlDLGVBQWUsbUJBQU8sQ0FBQyxFQUFlOztBQUV0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiOTYuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIGFycmF5SW5kZXhPZiA9IHJlcXVpcmUoJy4vX2FycmF5LWluY2x1ZGVzJykoZmFsc2UpO1xudmFyIElFX1BST1RPID0gcmVxdWlyZSgnLi9fc2hhcmVkLWtleScpKCdJRV9QUk9UTycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIG5hbWVzKSB7XG4gIHZhciBPID0gdG9JT2JqZWN0KG9iamVjdCk7XG4gIHZhciBpID0gMDtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIga2V5O1xuICBmb3IgKGtleSBpbiBPKSBpZiAoa2V5ICE9IElFX1BST1RPKSBoYXMoTywga2V5KSAmJiByZXN1bHQucHVzaChrZXkpO1xuICAvLyBEb24ndCBlbnVtIGJ1ZyAmIGhpZGRlbiBrZXlzXG4gIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSBpZiAoaGFzKE8sIGtleSA9IG5hbWVzW2krK10pKSB7XG4gICAgfmFycmF5SW5kZXhPZihyZXN1bHQsIGtleSkgfHwgcmVzdWx0LnB1c2goa2V5KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///96\n")},function(module,exports,__webpack_require__){eval("var dP = __webpack_require__(8);\nvar anObject = __webpack_require__(1);\nvar getKeys = __webpack_require__(34);\n\nmodule.exports = __webpack_require__(7) ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var keys = getKeys(Properties);\n var length = keys.length;\n var i = 0;\n var P;\n while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n return O;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWRwcy5qcz8xNDk1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFNBQVMsbUJBQU8sQ0FBQyxDQUFjO0FBQy9CLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGNBQWMsbUJBQU8sQ0FBQyxFQUFnQjs7QUFFdEMsaUJBQWlCLG1CQUFPLENBQUMsQ0FBZ0I7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiI5Ny5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgZ2V0S2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzIDogZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhPLCBQcm9wZXJ0aWVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICB2YXIga2V5cyA9IGdldEtleXMoUHJvcGVydGllcyk7XG4gIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgdmFyIGkgPSAwO1xuICB2YXIgUDtcbiAgd2hpbGUgKGxlbmd0aCA+IGkpIGRQLmYoTywgUCA9IGtleXNbaSsrXSwgUHJvcGVydGllc1tQXSk7XG4gIHJldHVybiBPO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///97\n")},function(module,exports,__webpack_require__){eval("// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nvar toIObject = __webpack_require__(15);\nvar gOPN = __webpack_require__(37).f;\nvar toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return gOPN(it);\n } catch (e) {\n return windowNames.slice();\n }\n};\n\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdvcG4tZXh0LmpzPzdiYmMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDLFdBQVcsbUJBQU8sQ0FBQyxFQUFnQjtBQUNuQyxpQkFBaUI7O0FBRWpCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EiLCJmaWxlIjoiOTguanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBmYWxsYmFjayBmb3IgSUUxMSBidWdneSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB3aXRoIGlmcmFtZSBhbmQgd2luZG93XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIGdPUE4gPSByZXF1aXJlKCcuL19vYmplY3QtZ29wbicpLmY7XG52YXIgdG9TdHJpbmcgPSB7fS50b1N0cmluZztcblxudmFyIHdpbmRvd05hbWVzID0gdHlwZW9mIHdpbmRvdyA9PSAnb2JqZWN0JyAmJiB3aW5kb3cgJiYgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXNcbiAgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh3aW5kb3cpIDogW107XG5cbnZhciBnZXRXaW5kb3dOYW1lcyA9IGZ1bmN0aW9uIChpdCkge1xuICB0cnkge1xuICAgIHJldHVybiBnT1BOKGl0KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiB3aW5kb3dOYW1lcy5zbGljZSgpO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cy5mID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhpdCkge1xuICByZXR1cm4gd2luZG93TmFtZXMgJiYgdG9TdHJpbmcuY2FsbChpdCkgPT0gJ1tvYmplY3QgV2luZG93XScgPyBnZXRXaW5kb3dOYW1lcyhpdCkgOiBnT1BOKHRvSU9iamVjdChpdCkpO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///98\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// 19.1.2.1 Object.assign(target, source, ...)\nvar DESCRIPTORS = __webpack_require__(7);\nvar getKeys = __webpack_require__(34);\nvar gOPS = __webpack_require__(53);\nvar pIE = __webpack_require__(49);\nvar toObject = __webpack_require__(9);\nvar IObject = __webpack_require__(48);\nvar $assign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || __webpack_require__(3)(function () {\n var A = {};\n var B = {};\n // eslint-disable-next-line no-undef\n var S = Symbol();\n var K = 'abcdefghijklmnopqrst';\n A[S] = 7;\n K.split('').forEach(function (k) { B[k] = k; });\n return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n var T = toObject(target);\n var aLen = arguments.length;\n var index = 1;\n var getSymbols = gOPS.f;\n var isEnum = pIE.f;\n while (aLen > index) {\n var S = IObject(arguments[index++]);\n var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);\n var length = keys.length;\n var j = 0;\n var key;\n while (length > j) {\n key = keys[j++];\n if (!DESCRIPTORS || isEnum.call(S, key)) T[key] = S[key];\n }\n } return T;\n} : $assign;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWFzc2lnbi5qcz83MzMzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxrQkFBa0IsbUJBQU8sQ0FBQyxDQUFnQjtBQUMxQyxjQUFjLG1CQUFPLENBQUMsRUFBZ0I7QUFDdEMsV0FBVyxtQkFBTyxDQUFDLEVBQWdCO0FBQ25DLFVBQVUsbUJBQU8sQ0FBQyxFQUFlO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGNBQWMsbUJBQU8sQ0FBQyxFQUFZO0FBQ2xDOztBQUVBO0FBQ0EsNkJBQTZCLG1CQUFPLENBQUMsQ0FBVTtBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0MsVUFBVSxFQUFFO0FBQ2hELG1CQUFtQixzQ0FBc0M7QUFDekQsQ0FBQyxxQ0FBcUM7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUMiLCJmaWxlIjoiOTkuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG4vLyAxOS4xLjIuMSBPYmplY3QuYXNzaWduKHRhcmdldCwgc291cmNlLCAuLi4pXG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpO1xudmFyIGdldEtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xudmFyIGdPUFMgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wcycpO1xudmFyIHBJRSA9IHJlcXVpcmUoJy4vX29iamVjdC1waWUnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIElPYmplY3QgPSByZXF1aXJlKCcuL19pb2JqZWN0Jyk7XG52YXIgJGFzc2lnbiA9IE9iamVjdC5hc3NpZ247XG5cbi8vIHNob3VsZCB3b3JrIHdpdGggc3ltYm9scyBhbmQgc2hvdWxkIGhhdmUgZGV0ZXJtaW5pc3RpYyBwcm9wZXJ0eSBvcmRlciAoVjggYnVnKVxubW9kdWxlLmV4cG9ydHMgPSAhJGFzc2lnbiB8fCByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgdmFyIEEgPSB7fTtcbiAgdmFyIEIgPSB7fTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gIHZhciBTID0gU3ltYm9sKCk7XG4gIHZhciBLID0gJ2FiY2RlZmdoaWprbG1ub3BxcnN0JztcbiAgQVtTXSA9IDc7XG4gIEsuc3BsaXQoJycpLmZvckVhY2goZnVuY3Rpb24gKGspIHsgQltrXSA9IGs7IH0pO1xuICByZXR1cm4gJGFzc2lnbih7fSwgQSlbU10gIT0gNyB8fCBPYmplY3Qua2V5cygkYXNzaWduKHt9LCBCKSkuam9pbignJykgIT0gSztcbn0pID8gZnVuY3Rpb24gYXNzaWduKHRhcmdldCwgc291cmNlKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgdmFyIFQgPSB0b09iamVjdCh0YXJnZXQpO1xuICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gIHZhciBpbmRleCA9IDE7XG4gIHZhciBnZXRTeW1ib2xzID0gZ09QUy5mO1xuICB2YXIgaXNFbnVtID0gcElFLmY7XG4gIHdoaWxlIChhTGVuID4gaW5kZXgpIHtcbiAgICB2YXIgUyA9IElPYmplY3QoYXJndW1lbnRzW2luZGV4KytdKTtcbiAgICB2YXIga2V5cyA9IGdldFN5bWJvbHMgPyBnZXRLZXlzKFMpLmNvbmNhdChnZXRTeW1ib2xzKFMpKSA6IGdldEtleXMoUyk7XG4gICAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICAgIHZhciBqID0gMDtcbiAgICB2YXIga2V5O1xuICAgIHdoaWxlIChsZW5ndGggPiBqKSB7XG4gICAgICBrZXkgPSBrZXlzW2orK107XG4gICAgICBpZiAoIURFU0NSSVBUT1JTIHx8IGlzRW51bS5jYWxsKFMsIGtleSkpIFRba2V5XSA9IFNba2V5XTtcbiAgICB9XG4gIH0gcmV0dXJuIFQ7XG59IDogJGFzc2lnbjtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///99\n")},function(module,exports){eval("// 7.2.9 SameValue(x, y)\nmodule.exports = Object.is || function is(x, y) {\n // eslint-disable-next-line no-self-compare\n return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2FtZS12YWx1ZS5qcz84M2ExIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMTAwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gNy4yLjkgU2FtZVZhbHVlKHgsIHkpXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5pcyB8fCBmdW5jdGlvbiBpcyh4LCB5KSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgcmV0dXJuIHggPT09IHkgPyB4ICE9PSAwIHx8IDEgLyB4ID09PSAxIC8geSA6IHggIT0geCAmJiB5ICE9IHk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///100\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar aFunction = __webpack_require__(10);\nvar isObject = __webpack_require__(4);\nvar invoke = __webpack_require__(102);\nvar arraySlice = [].slice;\nvar factories = {};\n\nvar construct = function (F, len, args) {\n if (!(len in factories)) {\n for (var n = [], i = 0; i < len; i++) n[i] = 'a[' + i + ']';\n // eslint-disable-next-line no-new-func\n factories[len] = Function('F,a', 'return new F(' + n.join(',') + ')');\n } return factories[len](F, args);\n};\n\nmodule.exports = Function.bind || function bind(that /* , ...args */) {\n var fn = aFunction(this);\n var partArgs = arraySlice.call(arguments, 1);\n var bound = function (/* args... */) {\n var args = partArgs.concat(arraySlice.call(arguments));\n return this instanceof bound ? construct(fn, args.length, args) : invoke(fn, args, that);\n };\n if (isObject(fn.prototype)) bound.prototype = fn.prototype;\n return bound;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYmluZC5qcz9mMGMxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2QyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxhQUFhLG1CQUFPLENBQUMsR0FBVztBQUNoQztBQUNBOztBQUVBO0FBQ0E7QUFDQSwyQkFBMkIsU0FBUztBQUNwQztBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjEwMS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBpbnZva2UgPSByZXF1aXJlKCcuL19pbnZva2UnKTtcbnZhciBhcnJheVNsaWNlID0gW10uc2xpY2U7XG52YXIgZmFjdG9yaWVzID0ge307XG5cbnZhciBjb25zdHJ1Y3QgPSBmdW5jdGlvbiAoRiwgbGVuLCBhcmdzKSB7XG4gIGlmICghKGxlbiBpbiBmYWN0b3JpZXMpKSB7XG4gICAgZm9yICh2YXIgbiA9IFtdLCBpID0gMDsgaSA8IGxlbjsgaSsrKSBuW2ldID0gJ2FbJyArIGkgKyAnXSc7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jXG4gICAgZmFjdG9yaWVzW2xlbl0gPSBGdW5jdGlvbignRixhJywgJ3JldHVybiBuZXcgRignICsgbi5qb2luKCcsJykgKyAnKScpO1xuICB9IHJldHVybiBmYWN0b3JpZXNbbGVuXShGLCBhcmdzKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gRnVuY3Rpb24uYmluZCB8fCBmdW5jdGlvbiBiaW5kKHRoYXQgLyogLCAuLi5hcmdzICovKSB7XG4gIHZhciBmbiA9IGFGdW5jdGlvbih0aGlzKTtcbiAgdmFyIHBhcnRBcmdzID0gYXJyYXlTbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gIHZhciBib3VuZCA9IGZ1bmN0aW9uICgvKiBhcmdzLi4uICovKSB7XG4gICAgdmFyIGFyZ3MgPSBwYXJ0QXJncy5jb25jYXQoYXJyYXlTbGljZS5jYWxsKGFyZ3VtZW50cykpO1xuICAgIHJldHVybiB0aGlzIGluc3RhbmNlb2YgYm91bmQgPyBjb25zdHJ1Y3QoZm4sIGFyZ3MubGVuZ3RoLCBhcmdzKSA6IGludm9rZShmbiwgYXJncywgdGhhdCk7XG4gIH07XG4gIGlmIChpc09iamVjdChmbi5wcm90b3R5cGUpKSBib3VuZC5wcm90b3R5cGUgPSBmbi5wcm90b3R5cGU7XG4gIHJldHVybiBib3VuZDtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///101\n")},function(module,exports){eval("// fast apply, http://jsperf.lnkit.com/fast-apply/5\nmodule.exports = function (fn, args, that) {\n var un = that === undefined;\n switch (args.length) {\n case 0: return un ? fn()\n : fn.call(that);\n case 1: return un ? fn(args[0])\n : fn.call(that, args[0]);\n case 2: return un ? fn(args[0], args[1])\n : fn.call(that, args[0], args[1]);\n case 3: return un ? fn(args[0], args[1], args[2])\n : fn.call(that, args[0], args[1], args[2]);\n case 4: return un ? fn(args[0], args[1], args[2], args[3])\n : fn.call(that, args[0], args[1], args[2], args[3]);\n } return fn.apply(that, args);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faW52b2tlLmpzPzMxZjQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCIsImZpbGUiOiIxMDIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBmYXN0IGFwcGx5LCBodHRwOi8vanNwZXJmLmxua2l0LmNvbS9mYXN0LWFwcGx5LzVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGZuLCBhcmdzLCB0aGF0KSB7XG4gIHZhciB1biA9IHRoYXQgPT09IHVuZGVmaW5lZDtcbiAgc3dpdGNoIChhcmdzLmxlbmd0aCkge1xuICAgIGNhc2UgMDogcmV0dXJuIHVuID8gZm4oKVxuICAgICAgICAgICAgICAgICAgICAgIDogZm4uY2FsbCh0aGF0KTtcbiAgICBjYXNlIDE6IHJldHVybiB1biA/IGZuKGFyZ3NbMF0pXG4gICAgICAgICAgICAgICAgICAgICAgOiBmbi5jYWxsKHRoYXQsIGFyZ3NbMF0pO1xuICAgIGNhc2UgMjogcmV0dXJuIHVuID8gZm4oYXJnc1swXSwgYXJnc1sxXSlcbiAgICAgICAgICAgICAgICAgICAgICA6IGZuLmNhbGwodGhhdCwgYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgY2FzZSAzOiByZXR1cm4gdW4gPyBmbihhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKVxuICAgICAgICAgICAgICAgICAgICAgIDogZm4uY2FsbCh0aGF0LCBhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcbiAgICBjYXNlIDQ6IHJldHVybiB1biA/IGZuKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10pXG4gICAgICAgICAgICAgICAgICAgICAgOiBmbi5jYWxsKHRoYXQsIGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10pO1xuICB9IHJldHVybiBmbi5hcHBseSh0aGF0LCBhcmdzKTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///102\n")},function(module,exports,__webpack_require__){eval("var $parseInt = __webpack_require__(2).parseInt;\nvar $trim = __webpack_require__(45).trim;\nvar ws = __webpack_require__(72);\nvar hex = /^[-+]?0[xX]/;\n\nmodule.exports = $parseInt(ws + '08') !== 8 || $parseInt(ws + '0x16') !== 22 ? function parseInt(str, radix) {\n var string = $trim(String(str), 3);\n return $parseInt(string, (radix >>> 0) || (hex.test(string) ? 16 : 10));\n} : $parseInt;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcGFyc2UtaW50LmpzPzNjYTUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZ0JBQWdCLG1CQUFPLENBQUMsQ0FBVztBQUNuQyxZQUFZLG1CQUFPLENBQUMsRUFBZ0I7QUFDcEMsU0FBUyxtQkFBTyxDQUFDLEVBQWM7QUFDL0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIxMDMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgJHBhcnNlSW50ID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykucGFyc2VJbnQ7XG52YXIgJHRyaW0gPSByZXF1aXJlKCcuL19zdHJpbmctdHJpbScpLnRyaW07XG52YXIgd3MgPSByZXF1aXJlKCcuL19zdHJpbmctd3MnKTtcbnZhciBoZXggPSAvXlstK10/MFt4WF0vO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICRwYXJzZUludCh3cyArICcwOCcpICE9PSA4IHx8ICRwYXJzZUludCh3cyArICcweDE2JykgIT09IDIyID8gZnVuY3Rpb24gcGFyc2VJbnQoc3RyLCByYWRpeCkge1xuICB2YXIgc3RyaW5nID0gJHRyaW0oU3RyaW5nKHN0ciksIDMpO1xuICByZXR1cm4gJHBhcnNlSW50KHN0cmluZywgKHJhZGl4ID4+PiAwKSB8fCAoaGV4LnRlc3Qoc3RyaW5nKSA/IDE2IDogMTApKTtcbn0gOiAkcGFyc2VJbnQ7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///103\n")},function(module,exports,__webpack_require__){eval("var $parseFloat = __webpack_require__(2).parseFloat;\nvar $trim = __webpack_require__(45).trim;\n\nmodule.exports = 1 / $parseFloat(__webpack_require__(72) + '-0') !== -Infinity ? function parseFloat(str) {\n var string = $trim(String(str), 3);\n var result = $parseFloat(string);\n return result === 0 && string.charAt(0) == '-' ? -0 : result;\n} : $parseFloat;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcGFyc2UtZmxvYXQuanM/ZDc1MiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxrQkFBa0IsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JDLFlBQVksbUJBQU8sQ0FBQyxFQUFnQjs7QUFFcEMsaUNBQWlDLG1CQUFPLENBQUMsRUFBYztBQUN2RDtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjEwNC5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciAkcGFyc2VGbG9hdCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLnBhcnNlRmxvYXQ7XG52YXIgJHRyaW0gPSByZXF1aXJlKCcuL19zdHJpbmctdHJpbScpLnRyaW07XG5cbm1vZHVsZS5leHBvcnRzID0gMSAvICRwYXJzZUZsb2F0KHJlcXVpcmUoJy4vX3N0cmluZy13cycpICsgJy0wJykgIT09IC1JbmZpbml0eSA/IGZ1bmN0aW9uIHBhcnNlRmxvYXQoc3RyKSB7XG4gIHZhciBzdHJpbmcgPSAkdHJpbShTdHJpbmcoc3RyKSwgMyk7XG4gIHZhciByZXN1bHQgPSAkcGFyc2VGbG9hdChzdHJpbmcpO1xuICByZXR1cm4gcmVzdWx0ID09PSAwICYmIHN0cmluZy5jaGFyQXQoMCkgPT0gJy0nID8gLTAgOiByZXN1bHQ7XG59IDogJHBhcnNlRmxvYXQ7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///104\n")},function(module,exports,__webpack_require__){eval("var cof = __webpack_require__(20);\nmodule.exports = function (it, msg) {\n if (typeof it != 'number' && cof(it) != 'Number') throw TypeError(msg);\n return +it;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYS1udW1iZXItdmFsdWUuanM/YmVmOSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxVQUFVLG1CQUFPLENBQUMsRUFBUTtBQUMxQjtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIxMDUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgbXNnKSB7XG4gIGlmICh0eXBlb2YgaXQgIT0gJ251bWJlcicgJiYgY29mKGl0KSAhPSAnTnVtYmVyJykgdGhyb3cgVHlwZUVycm9yKG1zZyk7XG4gIHJldHVybiAraXQ7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///105\n")},function(module,exports,__webpack_require__){eval("// 20.1.2.3 Number.isInteger(number)\nvar isObject = __webpack_require__(4);\nvar floor = Math.floor;\nmodule.exports = function isInteger(it) {\n return !isObject(it) && isFinite(it) && floor(it) === it;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtaW50ZWdlci5qcz85YzEyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckM7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMTA2LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMS4yLjMgTnVtYmVyLmlzSW50ZWdlcihudW1iZXIpXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzSW50ZWdlcihpdCkge1xuICByZXR1cm4gIWlzT2JqZWN0KGl0KSAmJiBpc0Zpbml0ZShpdCkgJiYgZmxvb3IoaXQpID09PSBpdDtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///106\n")},function(module,exports){eval("// 20.2.2.20 Math.log1p(x)\nmodule.exports = Math.log1p || function log1p(x) {\n return (x = +x) > -1e-8 && x < 1e-8 ? x - x * x / 2 : Math.log(1 + x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWF0aC1sb2cxcC5qcz9kNmM2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjEwNy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDIwLjIuMi4yMCBNYXRoLmxvZzFwKHgpXG5tb2R1bGUuZXhwb3J0cyA9IE1hdGgubG9nMXAgfHwgZnVuY3Rpb24gbG9nMXAoeCkge1xuICByZXR1cm4gKHggPSAreCkgPiAtMWUtOCAmJiB4IDwgMWUtOCA/IHggLSB4ICogeCAvIDIgOiBNYXRoLmxvZygxICsgeCk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///107\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.16 Math.fround(x)\nvar sign = __webpack_require__(75);\nvar pow = Math.pow;\nvar EPSILON = pow(2, -52);\nvar EPSILON32 = pow(2, -23);\nvar MAX32 = pow(2, 127) * (2 - EPSILON32);\nvar MIN32 = pow(2, -126);\n\nvar roundTiesToEven = function (n) {\n return n + 1 / EPSILON - 1 / EPSILON;\n};\n\nmodule.exports = Math.fround || function fround(x) {\n var $abs = Math.abs(x);\n var $sign = sign(x);\n var a, result;\n if ($abs < MIN32) return $sign * roundTiesToEven($abs / MIN32 / EPSILON32) * MIN32 * EPSILON32;\n a = (1 + EPSILON32 / EPSILON) * $abs;\n result = a - (a - $abs);\n // eslint-disable-next-line no-self-compare\n if (result > MAX32 || result != result) return $sign * Infinity;\n return $sign * result;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWF0aC1mcm91bmQuanM/OTFjYSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLFdBQVcsbUJBQU8sQ0FBQyxFQUFjO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMTA4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMi4yLjE2IE1hdGguZnJvdW5kKHgpXG52YXIgc2lnbiA9IHJlcXVpcmUoJy4vX21hdGgtc2lnbicpO1xudmFyIHBvdyA9IE1hdGgucG93O1xudmFyIEVQU0lMT04gPSBwb3coMiwgLTUyKTtcbnZhciBFUFNJTE9OMzIgPSBwb3coMiwgLTIzKTtcbnZhciBNQVgzMiA9IHBvdygyLCAxMjcpICogKDIgLSBFUFNJTE9OMzIpO1xudmFyIE1JTjMyID0gcG93KDIsIC0xMjYpO1xuXG52YXIgcm91bmRUaWVzVG9FdmVuID0gZnVuY3Rpb24gKG4pIHtcbiAgcmV0dXJuIG4gKyAxIC8gRVBTSUxPTiAtIDEgLyBFUFNJTE9OO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBNYXRoLmZyb3VuZCB8fCBmdW5jdGlvbiBmcm91bmQoeCkge1xuICB2YXIgJGFicyA9IE1hdGguYWJzKHgpO1xuICB2YXIgJHNpZ24gPSBzaWduKHgpO1xuICB2YXIgYSwgcmVzdWx0O1xuICBpZiAoJGFicyA8IE1JTjMyKSByZXR1cm4gJHNpZ24gKiByb3VuZFRpZXNUb0V2ZW4oJGFicyAvIE1JTjMyIC8gRVBTSUxPTjMyKSAqIE1JTjMyICogRVBTSUxPTjMyO1xuICBhID0gKDEgKyBFUFNJTE9OMzIgLyBFUFNJTE9OKSAqICRhYnM7XG4gIHJlc3VsdCA9IGEgLSAoYSAtICRhYnMpO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gIGlmIChyZXN1bHQgPiBNQVgzMiB8fCByZXN1bHQgIT0gcmVzdWx0KSByZXR1cm4gJHNpZ24gKiBJbmZpbml0eTtcbiAgcmV0dXJuICRzaWduICogcmVzdWx0O1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///108\n")},function(module,exports,__webpack_require__){eval("// call something on iterator step with safe closing on error\nvar anObject = __webpack_require__(1);\nmodule.exports = function (iterator, fn, value, entries) {\n try {\n return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n // 7.4.6 IteratorClose(iterator, completion)\n } catch (e) {\n var ret = iterator['return'];\n if (ret !== undefined) anObject(ret.call(iterator));\n throw e;\n }\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlci1jYWxsLmpzPzFmYTgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjEwOS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGNhbGwgc29tZXRoaW5nIG9uIGl0ZXJhdG9yIHN0ZXAgd2l0aCBzYWZlIGNsb3Npbmcgb24gZXJyb3JcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIGZuLCB2YWx1ZSwgZW50cmllcykge1xuICB0cnkge1xuICAgIHJldHVybiBlbnRyaWVzID8gZm4oYW5PYmplY3QodmFsdWUpWzBdLCB2YWx1ZVsxXSkgOiBmbih2YWx1ZSk7XG4gIC8vIDcuNC42IEl0ZXJhdG9yQ2xvc2UoaXRlcmF0b3IsIGNvbXBsZXRpb24pXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB2YXIgcmV0ID0gaXRlcmF0b3JbJ3JldHVybiddO1xuICAgIGlmIChyZXQgIT09IHVuZGVmaW5lZCkgYW5PYmplY3QocmV0LmNhbGwoaXRlcmF0b3IpKTtcbiAgICB0aHJvdyBlO1xuICB9XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///109\n")},function(module,exports,__webpack_require__){eval("var aFunction = __webpack_require__(10);\nvar toObject = __webpack_require__(9);\nvar IObject = __webpack_require__(48);\nvar toLength = __webpack_require__(6);\n\nmodule.exports = function (that, callbackfn, aLen, memo, isRight) {\n aFunction(callbackfn);\n var O = toObject(that);\n var self = IObject(O);\n var length = toLength(O.length);\n var index = isRight ? length - 1 : 0;\n var i = isRight ? -1 : 1;\n if (aLen < 2) for (;;) {\n if (index in self) {\n memo = self[index];\n index += i;\n break;\n }\n index += i;\n if (isRight ? index < 0 : length <= index) {\n throw TypeError('Reduce of empty array with no initial value');\n }\n }\n for (;isRight ? index >= 0 : length > index; index += i) if (index in self) {\n memo = callbackfn(memo, self[index], index, O);\n }\n return memo;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktcmVkdWNlLmpzPzdiMjMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2QyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxjQUFjLG1CQUFPLENBQUMsRUFBWTtBQUNsQyxlQUFlLG1CQUFPLENBQUMsQ0FBYzs7QUFFckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLHNDQUFzQztBQUM5QztBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIxMTAuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgSU9iamVjdCA9IHJlcXVpcmUoJy4vX2lvYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0aGF0LCBjYWxsYmFja2ZuLCBhTGVuLCBtZW1vLCBpc1JpZ2h0KSB7XG4gIGFGdW5jdGlvbihjYWxsYmFja2ZuKTtcbiAgdmFyIE8gPSB0b09iamVjdCh0aGF0KTtcbiAgdmFyIHNlbGYgPSBJT2JqZWN0KE8pO1xuICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICB2YXIgaW5kZXggPSBpc1JpZ2h0ID8gbGVuZ3RoIC0gMSA6IDA7XG4gIHZhciBpID0gaXNSaWdodCA/IC0xIDogMTtcbiAgaWYgKGFMZW4gPCAyKSBmb3IgKDs7KSB7XG4gICAgaWYgKGluZGV4IGluIHNlbGYpIHtcbiAgICAgIG1lbW8gPSBzZWxmW2luZGV4XTtcbiAgICAgIGluZGV4ICs9IGk7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgaW5kZXggKz0gaTtcbiAgICBpZiAoaXNSaWdodCA/IGluZGV4IDwgMCA6IGxlbmd0aCA8PSBpbmRleCkge1xuICAgICAgdGhyb3cgVHlwZUVycm9yKCdSZWR1Y2Ugb2YgZW1wdHkgYXJyYXkgd2l0aCBubyBpbml0aWFsIHZhbHVlJyk7XG4gICAgfVxuICB9XG4gIGZvciAoO2lzUmlnaHQgPyBpbmRleCA+PSAwIDogbGVuZ3RoID4gaW5kZXg7IGluZGV4ICs9IGkpIGlmIChpbmRleCBpbiBzZWxmKSB7XG4gICAgbWVtbyA9IGNhbGxiYWNrZm4obWVtbywgc2VsZltpbmRleF0sIGluZGV4LCBPKTtcbiAgfVxuICByZXR1cm4gbWVtbztcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///110\n")},function(module,exports,__webpack_require__){"use strict";eval("// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\n\nvar toObject = __webpack_require__(9);\nvar toAbsoluteIndex = __webpack_require__(35);\nvar toLength = __webpack_require__(6);\n\nmodule.exports = [].copyWithin || function copyWithin(target /* = 0 */, start /* = 0, end = @length */) {\n var O = toObject(this);\n var len = toLength(O.length);\n var to = toAbsoluteIndex(target, len);\n var from = toAbsoluteIndex(start, len);\n var end = arguments.length > 2 ? arguments[2] : undefined;\n var count = Math.min((end === undefined ? len : toAbsoluteIndex(end, len)) - from, len - to);\n var inc = 1;\n if (from < to && to < from + count) {\n inc = -1;\n from += count - 1;\n to += count - 1;\n }\n while (count-- > 0) {\n if (from in O) O[to] = O[from];\n else delete O[to];\n to += inc;\n from += inc;\n } return O;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktY29weS13aXRoaW4uanM/YmE5MiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNhO0FBQ2IsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsc0JBQXNCLG1CQUFPLENBQUMsRUFBc0I7QUFDcEQsZUFBZSxtQkFBTyxDQUFDLENBQWM7O0FBRXJDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCIsImZpbGUiOiIxMTEuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyMi4xLjMuMyBBcnJheS5wcm90b3R5cGUuY29weVdpdGhpbih0YXJnZXQsIHN0YXJ0LCBlbmQgPSB0aGlzLmxlbmd0aClcbid1c2Ugc3RyaWN0JztcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4vX3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBbXS5jb3B5V2l0aGluIHx8IGZ1bmN0aW9uIGNvcHlXaXRoaW4odGFyZ2V0IC8qID0gMCAqLywgc3RhcnQgLyogPSAwLCBlbmQgPSBAbGVuZ3RoICovKSB7XG4gIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gIHZhciBsZW4gPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gIHZhciB0byA9IHRvQWJzb2x1dGVJbmRleCh0YXJnZXQsIGxlbik7XG4gIHZhciBmcm9tID0gdG9BYnNvbHV0ZUluZGV4KHN0YXJ0LCBsZW4pO1xuICB2YXIgZW5kID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQ7XG4gIHZhciBjb3VudCA9IE1hdGgubWluKChlbmQgPT09IHVuZGVmaW5lZCA/IGxlbiA6IHRvQWJzb2x1dGVJbmRleChlbmQsIGxlbikpIC0gZnJvbSwgbGVuIC0gdG8pO1xuICB2YXIgaW5jID0gMTtcbiAgaWYgKGZyb20gPCB0byAmJiB0byA8IGZyb20gKyBjb3VudCkge1xuICAgIGluYyA9IC0xO1xuICAgIGZyb20gKz0gY291bnQgLSAxO1xuICAgIHRvICs9IGNvdW50IC0gMTtcbiAgfVxuICB3aGlsZSAoY291bnQtLSA+IDApIHtcbiAgICBpZiAoZnJvbSBpbiBPKSBPW3RvXSA9IE9bZnJvbV07XG4gICAgZWxzZSBkZWxldGUgT1t0b107XG4gICAgdG8gKz0gaW5jO1xuICAgIGZyb20gKz0gaW5jO1xuICB9IHJldHVybiBPO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///111\n")},function(module,exports){eval("module.exports = function (done, value) {\n return { value: value, done: !!done };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlci1zdGVwLmpzP2Q1M2IiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxVQUFVO0FBQ1YiLCJmaWxlIjoiMTEyLmpzIiwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZG9uZSwgdmFsdWUpIHtcbiAgcmV0dXJuIHsgdmFsdWU6IHZhbHVlLCBkb25lOiAhIWRvbmUgfTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///112\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar regexpExec = __webpack_require__(87);\n__webpack_require__(0)({\n target: 'RegExp',\n proto: true,\n forced: regexpExec !== /./.exec\n}, {\n exec: regexpExec\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLmV4ZWMuanM/YjBjNSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGlCQUFpQixtQkFBTyxDQUFDLEVBQWdCO0FBQ3pDLG1CQUFPLENBQUMsQ0FBVztBQUNuQjtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQSxDQUFDIiwiZmlsZSI6IjExMy5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciByZWdleHBFeGVjID0gcmVxdWlyZSgnLi9fcmVnZXhwLWV4ZWMnKTtcbnJlcXVpcmUoJy4vX2V4cG9ydCcpKHtcbiAgdGFyZ2V0OiAnUmVnRXhwJyxcbiAgcHJvdG86IHRydWUsXG4gIGZvcmNlZDogcmVnZXhwRXhlYyAhPT0gLy4vLmV4ZWNcbn0sIHtcbiAgZXhlYzogcmVnZXhwRXhlY1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///113\n")},function(module,exports,__webpack_require__){eval("// 21.2.5.3 get RegExp.prototype.flags()\nif (__webpack_require__(7) && /./g.flags != 'g') __webpack_require__(8).f(RegExp.prototype, 'flags', {\n configurable: true,\n get: __webpack_require__(50)\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLmZsYWdzLmpzPzM4NDYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxJQUFJLG1CQUFPLENBQUMsQ0FBZ0Isd0JBQXdCLG1CQUFPLENBQUMsQ0FBYztBQUMxRTtBQUNBLE9BQU8sbUJBQU8sQ0FBQyxFQUFVO0FBQ3pCLENBQUMiLCJmaWxlIjoiMTE0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjEuMi41LjMgZ2V0IFJlZ0V4cC5wcm90b3R5cGUuZmxhZ3MoKVxuaWYgKHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgLy4vZy5mbGFncyAhPSAnZycpIHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmYoUmVnRXhwLnByb3RvdHlwZSwgJ2ZsYWdzJywge1xuICBjb25maWd1cmFibGU6IHRydWUsXG4gIGdldDogcmVxdWlyZSgnLi9fZmxhZ3MnKVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///114\n")},function(module,exports){eval("module.exports = function (exec) {\n try {\n return { e: false, v: exec() };\n } catch (e) {\n return { e: true, v: e };\n }\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcGVyZm9ybS5qcz85YzgwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQSxZQUFZO0FBQ1osR0FBRztBQUNILFlBQVk7QUFDWjtBQUNBIiwiZmlsZSI6IjExNS5qcyIsInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4geyBlOiBmYWxzZSwgdjogZXhlYygpIH07XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4geyBlOiB0cnVlLCB2OiBlIH07XG4gIH1cbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///115\n")},function(module,exports,__webpack_require__){eval("var anObject = __webpack_require__(1);\nvar isObject = __webpack_require__(4);\nvar newPromiseCapability = __webpack_require__(91);\n\nmodule.exports = function (C, x) {\n anObject(C);\n if (isObject(x) && x.constructor === C) return x;\n var promiseCapability = newPromiseCapability.f(C);\n var resolve = promiseCapability.resolve;\n resolve(x);\n return promiseCapability.promise;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcHJvbWlzZS1yZXNvbHZlLmpzP2JjYWEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsMkJBQTJCLG1CQUFPLENBQUMsRUFBMkI7O0FBRTlEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMTE2LmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IHJlcXVpcmUoJy4vX25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQywgeCkge1xuICBhbk9iamVjdChDKTtcbiAgaWYgKGlzT2JqZWN0KHgpICYmIHguY29uc3RydWN0b3IgPT09IEMpIHJldHVybiB4O1xuICB2YXIgcHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eS5mKEMpO1xuICB2YXIgcmVzb2x2ZSA9IHByb21pc2VDYXBhYmlsaXR5LnJlc29sdmU7XG4gIHJlc29sdmUoeCk7XG4gIHJldHVybiBwcm9taXNlQ2FwYWJpbGl0eS5wcm9taXNlO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///116\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar strong = __webpack_require__(118);\nvar validate = __webpack_require__(42);\nvar MAP = 'Map';\n\n// 23.1 Map Objects\nmodule.exports = __webpack_require__(61)(MAP, function (get) {\n return function Map() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.1.3.6 Map.prototype.get(key)\n get: function get(key) {\n var entry = strong.getEntry(validate(this, MAP), key);\n return entry && entry.v;\n },\n // 23.1.3.9 Map.prototype.set(key, value)\n set: function set(key, value) {\n return strong.def(validate(this, MAP), key === 0 ? 0 : key, value);\n }\n}, strong, true);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWFwLmpzP2Y0MDAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixhQUFhLG1CQUFPLENBQUMsR0FBc0I7QUFDM0MsZUFBZSxtQkFBTyxDQUFDLEVBQXdCO0FBQy9DOztBQUVBO0FBQ0EsaUJBQWlCLG1CQUFPLENBQUMsRUFBZTtBQUN4Qyx5QkFBeUIsbUVBQW1FO0FBQzVGLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTE3LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIHN0cm9uZyA9IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24tc3Ryb25nJyk7XG52YXIgdmFsaWRhdGUgPSByZXF1aXJlKCcuL192YWxpZGF0ZS1jb2xsZWN0aW9uJyk7XG52YXIgTUFQID0gJ01hcCc7XG5cbi8vIDIzLjEgTWFwIE9iamVjdHNcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fY29sbGVjdGlvbicpKE1BUCwgZnVuY3Rpb24gKGdldCkge1xuICByZXR1cm4gZnVuY3Rpb24gTWFwKCkgeyByZXR1cm4gZ2V0KHRoaXMsIGFyZ3VtZW50cy5sZW5ndGggPiAwID8gYXJndW1lbnRzWzBdIDogdW5kZWZpbmVkKTsgfTtcbn0sIHtcbiAgLy8gMjMuMS4zLjYgTWFwLnByb3RvdHlwZS5nZXQoa2V5KVxuICBnZXQ6IGZ1bmN0aW9uIGdldChrZXkpIHtcbiAgICB2YXIgZW50cnkgPSBzdHJvbmcuZ2V0RW50cnkodmFsaWRhdGUodGhpcywgTUFQKSwga2V5KTtcbiAgICByZXR1cm4gZW50cnkgJiYgZW50cnkudjtcbiAgfSxcbiAgLy8gMjMuMS4zLjkgTWFwLnByb3RvdHlwZS5zZXQoa2V5LCB2YWx1ZSlcbiAgc2V0OiBmdW5jdGlvbiBzZXQoa2V5LCB2YWx1ZSkge1xuICAgIHJldHVybiBzdHJvbmcuZGVmKHZhbGlkYXRlKHRoaXMsIE1BUCksIGtleSA9PT0gMCA/IDAgOiBrZXksIHZhbHVlKTtcbiAgfVxufSwgc3Ryb25nLCB0cnVlKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///117\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar dP = __webpack_require__(8).f;\nvar create = __webpack_require__(36);\nvar redefineAll = __webpack_require__(41);\nvar ctx = __webpack_require__(19);\nvar anInstance = __webpack_require__(39);\nvar forOf = __webpack_require__(40);\nvar $iterDefine = __webpack_require__(77);\nvar step = __webpack_require__(112);\nvar setSpecies = __webpack_require__(38);\nvar DESCRIPTORS = __webpack_require__(7);\nvar fastKey = __webpack_require__(30).fastKey;\nvar validate = __webpack_require__(42);\nvar SIZE = DESCRIPTORS ? '_s' : 'size';\n\nvar getEntry = function (that, key) {\n // fast case\n var index = fastKey(key);\n var entry;\n if (index !== 'F') return that._i[index];\n // frozen object case\n for (entry = that._f; entry; entry = entry.n) {\n if (entry.k == key) return entry;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = create(null); // index\n that._f = undefined; // first entry\n that._l = undefined; // last entry\n that[SIZE] = 0; // size\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.1.3.1 Map.prototype.clear()\n // 23.2.3.2 Set.prototype.clear()\n clear: function clear() {\n for (var that = validate(this, NAME), data = that._i, entry = that._f; entry; entry = entry.n) {\n entry.r = true;\n if (entry.p) entry.p = entry.p.n = undefined;\n delete data[entry.i];\n }\n that._f = that._l = undefined;\n that[SIZE] = 0;\n },\n // 23.1.3.3 Map.prototype.delete(key)\n // 23.2.3.4 Set.prototype.delete(value)\n 'delete': function (key) {\n var that = validate(this, NAME);\n var entry = getEntry(that, key);\n if (entry) {\n var next = entry.n;\n var prev = entry.p;\n delete that._i[entry.i];\n entry.r = true;\n if (prev) prev.n = next;\n if (next) next.p = prev;\n if (that._f == entry) that._f = next;\n if (that._l == entry) that._l = prev;\n that[SIZE]--;\n } return !!entry;\n },\n // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined)\n // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined)\n forEach: function forEach(callbackfn /* , that = undefined */) {\n validate(this, NAME);\n var f = ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3);\n var entry;\n while (entry = entry ? entry.n : this._f) {\n f(entry.v, entry.k, this);\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n }\n },\n // 23.1.3.7 Map.prototype.has(key)\n // 23.2.3.7 Set.prototype.has(value)\n has: function has(key) {\n return !!getEntry(validate(this, NAME), key);\n }\n });\n if (DESCRIPTORS) dP(C.prototype, 'size', {\n get: function () {\n return validate(this, NAME)[SIZE];\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var entry = getEntry(that, key);\n var prev, index;\n // change existing entry\n if (entry) {\n entry.v = value;\n // create new entry\n } else {\n that._l = entry = {\n i: index = fastKey(key, true), // <- index\n k: key, // <- key\n v: value, // <- value\n p: prev = that._l, // <- previous entry\n n: undefined, // <- next entry\n r: false // <- removed\n };\n if (!that._f) that._f = entry;\n if (prev) prev.n = entry;\n that[SIZE]++;\n // add to index\n if (index !== 'F') that._i[index] = entry;\n } return that;\n },\n getEntry: getEntry,\n setStrong: function (C, NAME, IS_MAP) {\n // add .keys, .values, .entries, [@@iterator]\n // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11\n $iterDefine(C, NAME, function (iterated, kind) {\n this._t = validate(iterated, NAME); // target\n this._k = kind; // kind\n this._l = undefined; // previous\n }, function () {\n var that = this;\n var kind = that._k;\n var entry = that._l;\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n // get next entry\n if (!that._t || !(that._l = entry = entry ? entry.n : that._t._f)) {\n // or finish the iteration\n that._t = undefined;\n return step(1);\n }\n // return step by kind\n if (kind == 'keys') return step(0, entry.k);\n if (kind == 'values') return step(0, entry.v);\n return step(0, [entry.k, entry.v]);\n }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);\n\n // add [@@species], 23.1.2.2, 23.2.2.2\n setSpecies(NAME);\n }\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY29sbGVjdGlvbi1zdHJvbmcuanM/YzI2YiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLFNBQVMsbUJBQU8sQ0FBQyxDQUFjO0FBQy9CLGFBQWEsbUJBQU8sQ0FBQyxFQUFrQjtBQUN2QyxrQkFBa0IsbUJBQU8sQ0FBQyxFQUFpQjtBQUMzQyxVQUFVLG1CQUFPLENBQUMsRUFBUTtBQUMxQixpQkFBaUIsbUJBQU8sQ0FBQyxFQUFnQjtBQUN6QyxZQUFZLG1CQUFPLENBQUMsRUFBVztBQUMvQixrQkFBa0IsbUJBQU8sQ0FBQyxFQUFnQjtBQUMxQyxXQUFXLG1CQUFPLENBQUMsR0FBYztBQUNqQyxpQkFBaUIsbUJBQU8sQ0FBQyxFQUFnQjtBQUN6QyxrQkFBa0IsbUJBQU8sQ0FBQyxDQUFnQjtBQUMxQyxjQUFjLG1CQUFPLENBQUMsRUFBUztBQUMvQixlQUFlLG1CQUFPLENBQUMsRUFBd0I7QUFDL0M7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLE9BQU87QUFDOUI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCLDZCQUE2QjtBQUM3QiwwQkFBMEI7QUFDMUIsMEJBQTBCO0FBQzFCLHFCQUFxQjtBQUNyQjtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhFQUE4RSxPQUFPO0FBQ3JGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlDQUF5QztBQUN6QyxxQkFBcUI7QUFDckIsMEJBQTBCO0FBQzFCLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjExOC5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpO1xudmFyIHJlZGVmaW5lQWxsID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUtYWxsJyk7XG52YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG52YXIgZm9yT2YgPSByZXF1aXJlKCcuL19mb3Itb2YnKTtcbnZhciAkaXRlckRlZmluZSA9IHJlcXVpcmUoJy4vX2l0ZXItZGVmaW5lJyk7XG52YXIgc3RlcCA9IHJlcXVpcmUoJy4vX2l0ZXItc3RlcCcpO1xudmFyIHNldFNwZWNpZXMgPSByZXF1aXJlKCcuL19zZXQtc3BlY2llcycpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKTtcbnZhciBmYXN0S2V5ID0gcmVxdWlyZSgnLi9fbWV0YScpLmZhc3RLZXk7XG52YXIgdmFsaWRhdGUgPSByZXF1aXJlKCcuL192YWxpZGF0ZS1jb2xsZWN0aW9uJyk7XG52YXIgU0laRSA9IERFU0NSSVBUT1JTID8gJ19zJyA6ICdzaXplJztcblxudmFyIGdldEVudHJ5ID0gZnVuY3Rpb24gKHRoYXQsIGtleSkge1xuICAvLyBmYXN0IGNhc2VcbiAgdmFyIGluZGV4ID0gZmFzdEtleShrZXkpO1xuICB2YXIgZW50cnk7XG4gIGlmIChpbmRleCAhPT0gJ0YnKSByZXR1cm4gdGhhdC5faVtpbmRleF07XG4gIC8vIGZyb3plbiBvYmplY3QgY2FzZVxuICBmb3IgKGVudHJ5ID0gdGhhdC5fZjsgZW50cnk7IGVudHJ5ID0gZW50cnkubikge1xuICAgIGlmIChlbnRyeS5rID09IGtleSkgcmV0dXJuIGVudHJ5O1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZ2V0Q29uc3RydWN0b3I6IGZ1bmN0aW9uICh3cmFwcGVyLCBOQU1FLCBJU19NQVAsIEFEREVSKSB7XG4gICAgdmFyIEMgPSB3cmFwcGVyKGZ1bmN0aW9uICh0aGF0LCBpdGVyYWJsZSkge1xuICAgICAgYW5JbnN0YW5jZSh0aGF0LCBDLCBOQU1FLCAnX2knKTtcbiAgICAgIHRoYXQuX3QgPSBOQU1FOyAgICAgICAgIC8vIGNvbGxlY3Rpb24gdHlwZVxuICAgICAgdGhhdC5faSA9IGNyZWF0ZShudWxsKTsgLy8gaW5kZXhcbiAgICAgIHRoYXQuX2YgPSB1bmRlZmluZWQ7ICAgIC8vIGZpcnN0IGVudHJ5XG4gICAgICB0aGF0Ll9sID0gdW5kZWZpbmVkOyAgICAvLyBsYXN0IGVudHJ5XG4gICAgICB0aGF0W1NJWkVdID0gMDsgICAgICAgICAvLyBzaXplXG4gICAgICBpZiAoaXRlcmFibGUgIT0gdW5kZWZpbmVkKSBmb3JPZihpdGVyYWJsZSwgSVNfTUFQLCB0aGF0W0FEREVSXSwgdGhhdCk7XG4gICAgfSk7XG4gICAgcmVkZWZpbmVBbGwoQy5wcm90b3R5cGUsIHtcbiAgICAgIC8vIDIzLjEuMy4xIE1hcC5wcm90b3R5cGUuY2xlYXIoKVxuICAgICAgLy8gMjMuMi4zLjIgU2V0LnByb3RvdHlwZS5jbGVhcigpXG4gICAgICBjbGVhcjogZnVuY3Rpb24gY2xlYXIoKSB7XG4gICAgICAgIGZvciAodmFyIHRoYXQgPSB2YWxpZGF0ZSh0aGlzLCBOQU1FKSwgZGF0YSA9IHRoYXQuX2ksIGVudHJ5ID0gdGhhdC5fZjsgZW50cnk7IGVudHJ5ID0gZW50cnkubikge1xuICAgICAgICAgIGVudHJ5LnIgPSB0cnVlO1xuICAgICAgICAgIGlmIChlbnRyeS5wKSBlbnRyeS5wID0gZW50cnkucC5uID0gdW5kZWZpbmVkO1xuICAgICAgICAgIGRlbGV0ZSBkYXRhW2VudHJ5LmldO1xuICAgICAgICB9XG4gICAgICAgIHRoYXQuX2YgPSB0aGF0Ll9sID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGF0W1NJWkVdID0gMDtcbiAgICAgIH0sXG4gICAgICAvLyAyMy4xLjMuMyBNYXAucHJvdG90eXBlLmRlbGV0ZShrZXkpXG4gICAgICAvLyAyMy4yLjMuNCBTZXQucHJvdG90eXBlLmRlbGV0ZSh2YWx1ZSlcbiAgICAgICdkZWxldGUnOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHZhciB0aGF0ID0gdmFsaWRhdGUodGhpcywgTkFNRSk7XG4gICAgICAgIHZhciBlbnRyeSA9IGdldEVudHJ5KHRoYXQsIGtleSk7XG4gICAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICAgIHZhciBuZXh0ID0gZW50cnkubjtcbiAgICAgICAgICB2YXIgcHJldiA9IGVudHJ5LnA7XG4gICAgICAgICAgZGVsZXRlIHRoYXQuX2lbZW50cnkuaV07XG4gICAgICAgICAgZW50cnkuciA9IHRydWU7XG4gICAgICAgICAgaWYgKHByZXYpIHByZXYubiA9IG5leHQ7XG4gICAgICAgICAgaWYgKG5leHQpIG5leHQucCA9IHByZXY7XG4gICAgICAgICAgaWYgKHRoYXQuX2YgPT0gZW50cnkpIHRoYXQuX2YgPSBuZXh0O1xuICAgICAgICAgIGlmICh0aGF0Ll9sID09IGVudHJ5KSB0aGF0Ll9sID0gcHJldjtcbiAgICAgICAgICB0aGF0W1NJWkVdLS07XG4gICAgICAgIH0gcmV0dXJuICEhZW50cnk7XG4gICAgICB9LFxuICAgICAgLy8gMjMuMi4zLjYgU2V0LnByb3RvdHlwZS5mb3JFYWNoKGNhbGxiYWNrZm4sIHRoaXNBcmcgPSB1bmRlZmluZWQpXG4gICAgICAvLyAyMy4xLjMuNSBNYXAucHJvdG90eXBlLmZvckVhY2goY2FsbGJhY2tmbiwgdGhpc0FyZyA9IHVuZGVmaW5lZClcbiAgICAgIGZvckVhY2g6IGZ1bmN0aW9uIGZvckVhY2goY2FsbGJhY2tmbiAvKiAsIHRoYXQgPSB1bmRlZmluZWQgKi8pIHtcbiAgICAgICAgdmFsaWRhdGUodGhpcywgTkFNRSk7XG4gICAgICAgIHZhciBmID0gY3R4KGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkLCAzKTtcbiAgICAgICAgdmFyIGVudHJ5O1xuICAgICAgICB3aGlsZSAoZW50cnkgPSBlbnRyeSA/IGVudHJ5Lm4gOiB0aGlzLl9mKSB7XG4gICAgICAgICAgZihlbnRyeS52LCBlbnRyeS5rLCB0aGlzKTtcbiAgICAgICAgICAvLyByZXZlcnQgdG8gdGhlIGxhc3QgZXhpc3RpbmcgZW50cnlcbiAgICAgICAgICB3aGlsZSAoZW50cnkgJiYgZW50cnkucikgZW50cnkgPSBlbnRyeS5wO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgLy8gMjMuMS4zLjcgTWFwLnByb3RvdHlwZS5oYXMoa2V5KVxuICAgICAgLy8gMjMuMi4zLjcgU2V0LnByb3RvdHlwZS5oYXModmFsdWUpXG4gICAgICBoYXM6IGZ1bmN0aW9uIGhhcyhrZXkpIHtcbiAgICAgICAgcmV0dXJuICEhZ2V0RW50cnkodmFsaWRhdGUodGhpcywgTkFNRSksIGtleSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKERFU0NSSVBUT1JTKSBkUChDLnByb3RvdHlwZSwgJ3NpemUnLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHZhbGlkYXRlKHRoaXMsIE5BTUUpW1NJWkVdO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBDO1xuICB9LFxuICBkZWY6IGZ1bmN0aW9uICh0aGF0LCBrZXksIHZhbHVlKSB7XG4gICAgdmFyIGVudHJ5ID0gZ2V0RW50cnkodGhhdCwga2V5KTtcbiAgICB2YXIgcHJldiwgaW5kZXg7XG4gICAgLy8gY2hhbmdlIGV4aXN0aW5nIGVudHJ5XG4gICAgaWYgKGVudHJ5KSB7XG4gICAgICBlbnRyeS52ID0gdmFsdWU7XG4gICAgLy8gY3JlYXRlIG5ldyBlbnRyeVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGF0Ll9sID0gZW50cnkgPSB7XG4gICAgICAgIGk6IGluZGV4ID0gZmFzdEtleShrZXksIHRydWUpLCAvLyA8LSBpbmRleFxuICAgICAgICBrOiBrZXksICAgICAgICAgICAgICAgICAgICAgICAgLy8gPC0ga2V5XG4gICAgICAgIHY6IHZhbHVlLCAgICAgICAgICAgICAgICAgICAgICAvLyA8LSB2YWx1ZVxuICAgICAgICBwOiBwcmV2ID0gdGhhdC5fbCwgICAgICAgICAgICAgLy8gPC0gcHJldmlvdXMgZW50cnlcbiAgICAgICAgbjogdW5kZWZpbmVkLCAgICAgICAgICAgICAgICAgIC8vIDwtIG5leHQgZW50cnlcbiAgICAgICAgcjogZmFsc2UgICAgICAgICAgICAgICAgICAgICAgIC8vIDwtIHJlbW92ZWRcbiAgICAgIH07XG4gICAgICBpZiAoIXRoYXQuX2YpIHRoYXQuX2YgPSBlbnRyeTtcbiAgICAgIGlmIChwcmV2KSBwcmV2Lm4gPSBlbnRyeTtcbiAgICAgIHRoYXRbU0laRV0rKztcbiAgICAgIC8vIGFkZCB0byBpbmRleFxuICAgICAgaWYgKGluZGV4ICE9PSAnRicpIHRoYXQuX2lbaW5kZXhdID0gZW50cnk7XG4gICAgfSByZXR1cm4gdGhhdDtcbiAgfSxcbiAgZ2V0RW50cnk6IGdldEVudHJ5LFxuICBzZXRTdHJvbmc6IGZ1bmN0aW9uIChDLCBOQU1FLCBJU19NQVApIHtcbiAgICAvLyBhZGQgLmtleXMsIC52YWx1ZXMsIC5lbnRyaWVzLCBbQEBpdGVyYXRvcl1cbiAgICAvLyAyMy4xLjMuNCwgMjMuMS4zLjgsIDIzLjEuMy4xMSwgMjMuMS4zLjEyLCAyMy4yLjMuNSwgMjMuMi4zLjgsIDIzLjIuMy4xMCwgMjMuMi4zLjExXG4gICAgJGl0ZXJEZWZpbmUoQywgTkFNRSwgZnVuY3Rpb24gKGl0ZXJhdGVkLCBraW5kKSB7XG4gICAgICB0aGlzLl90ID0gdmFsaWRhdGUoaXRlcmF0ZWQsIE5BTUUpOyAvLyB0YXJnZXRcbiAgICAgIHRoaXMuX2sgPSBraW5kOyAgICAgICAgICAgICAgICAgICAgIC8vIGtpbmRcbiAgICAgIHRoaXMuX2wgPSB1bmRlZmluZWQ7ICAgICAgICAgICAgICAgIC8vIHByZXZpb3VzXG4gICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgdmFyIGtpbmQgPSB0aGF0Ll9rO1xuICAgICAgdmFyIGVudHJ5ID0gdGhhdC5fbDtcbiAgICAgIC8vIHJldmVydCB0byB0aGUgbGFzdCBleGlzdGluZyBlbnRyeVxuICAgICAgd2hpbGUgKGVudHJ5ICYmIGVudHJ5LnIpIGVudHJ5ID0gZW50cnkucDtcbiAgICAgIC8vIGdldCBuZXh0IGVudHJ5XG4gICAgICBpZiAoIXRoYXQuX3QgfHwgISh0aGF0Ll9sID0gZW50cnkgPSBlbnRyeSA/IGVudHJ5Lm4gOiB0aGF0Ll90Ll9mKSkge1xuICAgICAgICAvLyBvciBmaW5pc2ggdGhlIGl0ZXJhdGlvblxuICAgICAgICB0aGF0Ll90ID0gdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gc3RlcCgxKTtcbiAgICAgIH1cbiAgICAgIC8vIHJldHVybiBzdGVwIGJ5IGtpbmRcbiAgICAgIGlmIChraW5kID09ICdrZXlzJykgcmV0dXJuIHN0ZXAoMCwgZW50cnkuayk7XG4gICAgICBpZiAoa2luZCA9PSAndmFsdWVzJykgcmV0dXJuIHN0ZXAoMCwgZW50cnkudik7XG4gICAgICByZXR1cm4gc3RlcCgwLCBbZW50cnkuaywgZW50cnkudl0pO1xuICAgIH0sIElTX01BUCA/ICdlbnRyaWVzJyA6ICd2YWx1ZXMnLCAhSVNfTUFQLCB0cnVlKTtcblxuICAgIC8vIGFkZCBbQEBzcGVjaWVzXSwgMjMuMS4yLjIsIDIzLjIuMi4yXG4gICAgc2V0U3BlY2llcyhOQU1FKTtcbiAgfVxufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///118\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar strong = __webpack_require__(118);\nvar validate = __webpack_require__(42);\nvar SET = 'Set';\n\n// 23.2 Set Objects\nmodule.exports = __webpack_require__(61)(SET, function (get) {\n return function Set() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.2.3.1 Set.prototype.add(value)\n add: function add(value) {\n return strong.def(validate(this, SET), value = value === 0 ? 0 : value, value);\n }\n}, strong);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc2V0LmpzPzRmN2YiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixhQUFhLG1CQUFPLENBQUMsR0FBc0I7QUFDM0MsZUFBZSxtQkFBTyxDQUFDLEVBQXdCO0FBQy9DOztBQUVBO0FBQ0EsaUJBQWlCLG1CQUFPLENBQUMsRUFBZTtBQUN4Qyx5QkFBeUIsbUVBQW1FO0FBQzVGLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTE5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIHN0cm9uZyA9IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24tc3Ryb25nJyk7XG52YXIgdmFsaWRhdGUgPSByZXF1aXJlKCcuL192YWxpZGF0ZS1jb2xsZWN0aW9uJyk7XG52YXIgU0VUID0gJ1NldCc7XG5cbi8vIDIzLjIgU2V0IE9iamVjdHNcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fY29sbGVjdGlvbicpKFNFVCwgZnVuY3Rpb24gKGdldCkge1xuICByZXR1cm4gZnVuY3Rpb24gU2V0KCkgeyByZXR1cm4gZ2V0KHRoaXMsIGFyZ3VtZW50cy5sZW5ndGggPiAwID8gYXJndW1lbnRzWzBdIDogdW5kZWZpbmVkKTsgfTtcbn0sIHtcbiAgLy8gMjMuMi4zLjEgU2V0LnByb3RvdHlwZS5hZGQodmFsdWUpXG4gIGFkZDogZnVuY3Rpb24gYWRkKHZhbHVlKSB7XG4gICAgcmV0dXJuIHN0cm9uZy5kZWYodmFsaWRhdGUodGhpcywgU0VUKSwgdmFsdWUgPSB2YWx1ZSA9PT0gMCA/IDAgOiB2YWx1ZSwgdmFsdWUpO1xuICB9XG59LCBzdHJvbmcpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///119\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar global = __webpack_require__(2);\nvar each = __webpack_require__(26)(0);\nvar redefine = __webpack_require__(12);\nvar meta = __webpack_require__(30);\nvar assign = __webpack_require__(99);\nvar weak = __webpack_require__(121);\nvar isObject = __webpack_require__(4);\nvar validate = __webpack_require__(42);\nvar NATIVE_WEAK_MAP = __webpack_require__(42);\nvar IS_IE11 = !global.ActiveXObject && 'ActiveXObject' in global;\nvar WEAK_MAP = 'WeakMap';\nvar getWeak = meta.getWeak;\nvar isExtensible = Object.isExtensible;\nvar uncaughtFrozenStore = weak.ufstore;\nvar InternalMap;\n\nvar wrapper = function (get) {\n return function WeakMap() {\n return get(this, arguments.length > 0 ? arguments[0] : undefined);\n };\n};\n\nvar methods = {\n // 23.3.3.3 WeakMap.prototype.get(key)\n get: function get(key) {\n if (isObject(key)) {\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, WEAK_MAP)).get(key);\n return data ? data[this._i] : undefined;\n }\n },\n // 23.3.3.5 WeakMap.prototype.set(key, value)\n set: function set(key, value) {\n return weak.def(validate(this, WEAK_MAP), key, value);\n }\n};\n\n// 23.3 WeakMap Objects\nvar $WeakMap = module.exports = __webpack_require__(61)(WEAK_MAP, wrapper, methods, weak, true, true);\n\n// IE11 WeakMap frozen keys fix\nif (NATIVE_WEAK_MAP && IS_IE11) {\n InternalMap = weak.getConstructor(wrapper, WEAK_MAP);\n assign(InternalMap.prototype, methods);\n meta.NEED = true;\n each(['delete', 'has', 'get', 'set'], function (key) {\n var proto = $WeakMap.prototype;\n var method = proto[key];\n redefine(proto, key, function (a, b) {\n // store frozen objects on internal weakmap shim\n if (isObject(a) && !isExtensible(a)) {\n if (!this._f) this._f = new InternalMap();\n var result = this._f[key](a, b);\n return key == 'set' ? this : result;\n // store all the rest on native weakmap\n } return method.call(this, a, b);\n });\n });\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYud2Vhay1tYXAuanM/MTBhZCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGFBQWEsbUJBQU8sQ0FBQyxDQUFXO0FBQ2hDLFdBQVcsbUJBQU8sQ0FBQyxFQUFrQjtBQUNyQyxlQUFlLG1CQUFPLENBQUMsRUFBYTtBQUNwQyxXQUFXLG1CQUFPLENBQUMsRUFBUztBQUM1QixhQUFhLG1CQUFPLENBQUMsRUFBa0I7QUFDdkMsV0FBVyxtQkFBTyxDQUFDLEdBQW9CO0FBQ3ZDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGVBQWUsbUJBQU8sQ0FBQyxFQUF3QjtBQUMvQyxzQkFBc0IsbUJBQU8sQ0FBQyxFQUF3QjtBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxnQ0FBZ0MsbUJBQU8sQ0FBQyxFQUFlOztBQUV2RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMLEdBQUc7QUFDSCIsImZpbGUiOiIxMjAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgZWFjaCA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKSgwKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG52YXIgbWV0YSA9IHJlcXVpcmUoJy4vX21ldGEnKTtcbnZhciBhc3NpZ24gPSByZXF1aXJlKCcuL19vYmplY3QtYXNzaWduJyk7XG52YXIgd2VhayA9IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24td2VhaycpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgdmFsaWRhdGUgPSByZXF1aXJlKCcuL192YWxpZGF0ZS1jb2xsZWN0aW9uJyk7XG52YXIgTkFUSVZFX1dFQUtfTUFQID0gcmVxdWlyZSgnLi9fdmFsaWRhdGUtY29sbGVjdGlvbicpO1xudmFyIElTX0lFMTEgPSAhZ2xvYmFsLkFjdGl2ZVhPYmplY3QgJiYgJ0FjdGl2ZVhPYmplY3QnIGluIGdsb2JhbDtcbnZhciBXRUFLX01BUCA9ICdXZWFrTWFwJztcbnZhciBnZXRXZWFrID0gbWV0YS5nZXRXZWFrO1xudmFyIGlzRXh0ZW5zaWJsZSA9IE9iamVjdC5pc0V4dGVuc2libGU7XG52YXIgdW5jYXVnaHRGcm96ZW5TdG9yZSA9IHdlYWsudWZzdG9yZTtcbnZhciBJbnRlcm5hbE1hcDtcblxudmFyIHdyYXBwZXIgPSBmdW5jdGlvbiAoZ2V0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBXZWFrTWFwKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgYXJndW1lbnRzLmxlbmd0aCA+IDAgPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQpO1xuICB9O1xufTtcblxudmFyIG1ldGhvZHMgPSB7XG4gIC8vIDIzLjMuMy4zIFdlYWtNYXAucHJvdG90eXBlLmdldChrZXkpXG4gIGdldDogZnVuY3Rpb24gZ2V0KGtleSkge1xuICAgIGlmIChpc09iamVjdChrZXkpKSB7XG4gICAgICB2YXIgZGF0YSA9IGdldFdlYWsoa2V5KTtcbiAgICAgIGlmIChkYXRhID09PSB0cnVlKSByZXR1cm4gdW5jYXVnaHRGcm96ZW5TdG9yZSh2YWxpZGF0ZSh0aGlzLCBXRUFLX01BUCkpLmdldChrZXkpO1xuICAgICAgcmV0dXJuIGRhdGEgPyBkYXRhW3RoaXMuX2ldIDogdW5kZWZpbmVkO1xuICAgIH1cbiAgfSxcbiAgLy8gMjMuMy4zLjUgV2Vha01hcC5wcm90b3R5cGUuc2V0KGtleSwgdmFsdWUpXG4gIHNldDogZnVuY3Rpb24gc2V0KGtleSwgdmFsdWUpIHtcbiAgICByZXR1cm4gd2Vhay5kZWYodmFsaWRhdGUodGhpcywgV0VBS19NQVApLCBrZXksIHZhbHVlKTtcbiAgfVxufTtcblxuLy8gMjMuMyBXZWFrTWFwIE9iamVjdHNcbnZhciAkV2Vha01hcCA9IG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fY29sbGVjdGlvbicpKFdFQUtfTUFQLCB3cmFwcGVyLCBtZXRob2RzLCB3ZWFrLCB0cnVlLCB0cnVlKTtcblxuLy8gSUUxMSBXZWFrTWFwIGZyb3plbiBrZXlzIGZpeFxuaWYgKE5BVElWRV9XRUFLX01BUCAmJiBJU19JRTExKSB7XG4gIEludGVybmFsTWFwID0gd2Vhay5nZXRDb25zdHJ1Y3Rvcih3cmFwcGVyLCBXRUFLX01BUCk7XG4gIGFzc2lnbihJbnRlcm5hbE1hcC5wcm90b3R5cGUsIG1ldGhvZHMpO1xuICBtZXRhLk5FRUQgPSB0cnVlO1xuICBlYWNoKFsnZGVsZXRlJywgJ2hhcycsICdnZXQnLCAnc2V0J10sIGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgcHJvdG8gPSAkV2Vha01hcC5wcm90b3R5cGU7XG4gICAgdmFyIG1ldGhvZCA9IHByb3RvW2tleV07XG4gICAgcmVkZWZpbmUocHJvdG8sIGtleSwgZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgIC8vIHN0b3JlIGZyb3plbiBvYmplY3RzIG9uIGludGVybmFsIHdlYWttYXAgc2hpbVxuICAgICAgaWYgKGlzT2JqZWN0KGEpICYmICFpc0V4dGVuc2libGUoYSkpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9mKSB0aGlzLl9mID0gbmV3IEludGVybmFsTWFwKCk7XG4gICAgICAgIHZhciByZXN1bHQgPSB0aGlzLl9mW2tleV0oYSwgYik7XG4gICAgICAgIHJldHVybiBrZXkgPT0gJ3NldCcgPyB0aGlzIDogcmVzdWx0O1xuICAgICAgLy8gc3RvcmUgYWxsIHRoZSByZXN0IG9uIG5hdGl2ZSB3ZWFrbWFwXG4gICAgICB9IHJldHVybiBtZXRob2QuY2FsbCh0aGlzLCBhLCBiKTtcbiAgICB9KTtcbiAgfSk7XG59XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///120\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar redefineAll = __webpack_require__(41);\nvar getWeak = __webpack_require__(30).getWeak;\nvar anObject = __webpack_require__(1);\nvar isObject = __webpack_require__(4);\nvar anInstance = __webpack_require__(39);\nvar forOf = __webpack_require__(40);\nvar createArrayMethod = __webpack_require__(26);\nvar $has = __webpack_require__(14);\nvar validate = __webpack_require__(42);\nvar arrayFind = createArrayMethod(5);\nvar arrayFindIndex = createArrayMethod(6);\nvar id = 0;\n\n// fallback for uncaught frozen keys\nvar uncaughtFrozenStore = function (that) {\n return that._l || (that._l = new UncaughtFrozenStore());\n};\nvar UncaughtFrozenStore = function () {\n this.a = [];\n};\nvar findUncaughtFrozen = function (store, key) {\n return arrayFind(store.a, function (it) {\n return it[0] === key;\n });\n};\nUncaughtFrozenStore.prototype = {\n get: function (key) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) return entry[1];\n },\n has: function (key) {\n return !!findUncaughtFrozen(this, key);\n },\n set: function (key, value) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) entry[1] = value;\n else this.a.push([key, value]);\n },\n 'delete': function (key) {\n var index = arrayFindIndex(this.a, function (it) {\n return it[0] === key;\n });\n if (~index) this.a.splice(index, 1);\n return !!~index;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = id++; // collection id\n that._l = undefined; // leak store for uncaught frozen objects\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.3.3.2 WeakMap.prototype.delete(key)\n // 23.4.3.3 WeakSet.prototype.delete(value)\n 'delete': function (key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME))['delete'](key);\n return data && $has(data, this._i) && delete data[this._i];\n },\n // 23.3.3.4 WeakMap.prototype.has(key)\n // 23.4.3.4 WeakSet.prototype.has(value)\n has: function has(key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME)).has(key);\n return data && $has(data, this._i);\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var data = getWeak(anObject(key), true);\n if (data === true) uncaughtFrozenStore(that).set(key, value);\n else data[that._i] = value;\n return that;\n },\n ufstore: uncaughtFrozenStore\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY29sbGVjdGlvbi13ZWFrLmpzPzY0M2UiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixrQkFBa0IsbUJBQU8sQ0FBQyxFQUFpQjtBQUMzQyxjQUFjLG1CQUFPLENBQUMsRUFBUztBQUMvQixlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxpQkFBaUIsbUJBQU8sQ0FBQyxFQUFnQjtBQUN6QyxZQUFZLG1CQUFPLENBQUMsRUFBVztBQUMvQix3QkFBd0IsbUJBQU8sQ0FBQyxFQUFrQjtBQUNsRCxXQUFXLG1CQUFPLENBQUMsRUFBUTtBQUMzQixlQUFlLG1CQUFPLENBQUMsRUFBd0I7QUFDL0M7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckIscUJBQXFCO0FBQ3JCLDBCQUEwQjtBQUMxQjtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBIiwiZmlsZSI6IjEyMS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciByZWRlZmluZUFsbCA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lLWFsbCcpO1xudmFyIGdldFdlYWsgPSByZXF1aXJlKCcuL19tZXRhJykuZ2V0V2VhaztcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG52YXIgZm9yT2YgPSByZXF1aXJlKCcuL19mb3Itb2YnKTtcbnZhciBjcmVhdGVBcnJheU1ldGhvZCA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKTtcbnZhciAkaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgdmFsaWRhdGUgPSByZXF1aXJlKCcuL192YWxpZGF0ZS1jb2xsZWN0aW9uJyk7XG52YXIgYXJyYXlGaW5kID0gY3JlYXRlQXJyYXlNZXRob2QoNSk7XG52YXIgYXJyYXlGaW5kSW5kZXggPSBjcmVhdGVBcnJheU1ldGhvZCg2KTtcbnZhciBpZCA9IDA7XG5cbi8vIGZhbGxiYWNrIGZvciB1bmNhdWdodCBmcm96ZW4ga2V5c1xudmFyIHVuY2F1Z2h0RnJvemVuU3RvcmUgPSBmdW5jdGlvbiAodGhhdCkge1xuICByZXR1cm4gdGhhdC5fbCB8fCAodGhhdC5fbCA9IG5ldyBVbmNhdWdodEZyb3plblN0b3JlKCkpO1xufTtcbnZhciBVbmNhdWdodEZyb3plblN0b3JlID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmEgPSBbXTtcbn07XG52YXIgZmluZFVuY2F1Z2h0RnJvemVuID0gZnVuY3Rpb24gKHN0b3JlLCBrZXkpIHtcbiAgcmV0dXJuIGFycmF5RmluZChzdG9yZS5hLCBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gaXRbMF0gPT09IGtleTtcbiAgfSk7XG59O1xuVW5jYXVnaHRGcm96ZW5TdG9yZS5wcm90b3R5cGUgPSB7XG4gIGdldDogZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciBlbnRyeSA9IGZpbmRVbmNhdWdodEZyb3plbih0aGlzLCBrZXkpO1xuICAgIGlmIChlbnRyeSkgcmV0dXJuIGVudHJ5WzFdO1xuICB9LFxuICBoYXM6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICByZXR1cm4gISFmaW5kVW5jYXVnaHRGcm96ZW4odGhpcywga2V5KTtcbiAgfSxcbiAgc2V0OiBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgIHZhciBlbnRyeSA9IGZpbmRVbmNhdWdodEZyb3plbih0aGlzLCBrZXkpO1xuICAgIGlmIChlbnRyeSkgZW50cnlbMV0gPSB2YWx1ZTtcbiAgICBlbHNlIHRoaXMuYS5wdXNoKFtrZXksIHZhbHVlXSk7XG4gIH0sXG4gICdkZWxldGUnOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIGluZGV4ID0gYXJyYXlGaW5kSW5kZXgodGhpcy5hLCBmdW5jdGlvbiAoaXQpIHtcbiAgICAgIHJldHVybiBpdFswXSA9PT0ga2V5O1xuICAgIH0pO1xuICAgIGlmICh+aW5kZXgpIHRoaXMuYS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIHJldHVybiAhIX5pbmRleDtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGdldENvbnN0cnVjdG9yOiBmdW5jdGlvbiAod3JhcHBlciwgTkFNRSwgSVNfTUFQLCBBRERFUikge1xuICAgIHZhciBDID0gd3JhcHBlcihmdW5jdGlvbiAodGhhdCwgaXRlcmFibGUpIHtcbiAgICAgIGFuSW5zdGFuY2UodGhhdCwgQywgTkFNRSwgJ19pJyk7XG4gICAgICB0aGF0Ll90ID0gTkFNRTsgICAgICAvLyBjb2xsZWN0aW9uIHR5cGVcbiAgICAgIHRoYXQuX2kgPSBpZCsrOyAgICAgIC8vIGNvbGxlY3Rpb24gaWRcbiAgICAgIHRoYXQuX2wgPSB1bmRlZmluZWQ7IC8vIGxlYWsgc3RvcmUgZm9yIHVuY2F1Z2h0IGZyb3plbiBvYmplY3RzXG4gICAgICBpZiAoaXRlcmFibGUgIT0gdW5kZWZpbmVkKSBmb3JPZihpdGVyYWJsZSwgSVNfTUFQLCB0aGF0W0FEREVSXSwgdGhhdCk7XG4gICAgfSk7XG4gICAgcmVkZWZpbmVBbGwoQy5wcm90b3R5cGUsIHtcbiAgICAgIC8vIDIzLjMuMy4yIFdlYWtNYXAucHJvdG90eXBlLmRlbGV0ZShrZXkpXG4gICAgICAvLyAyMy40LjMuMyBXZWFrU2V0LnByb3RvdHlwZS5kZWxldGUodmFsdWUpXG4gICAgICAnZGVsZXRlJzogZnVuY3Rpb24gKGtleSkge1xuICAgICAgICBpZiAoIWlzT2JqZWN0KGtleSkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgdmFyIGRhdGEgPSBnZXRXZWFrKGtleSk7XG4gICAgICAgIGlmIChkYXRhID09PSB0cnVlKSByZXR1cm4gdW5jYXVnaHRGcm96ZW5TdG9yZSh2YWxpZGF0ZSh0aGlzLCBOQU1FKSlbJ2RlbGV0ZSddKGtleSk7XG4gICAgICAgIHJldHVybiBkYXRhICYmICRoYXMoZGF0YSwgdGhpcy5faSkgJiYgZGVsZXRlIGRhdGFbdGhpcy5faV07XG4gICAgICB9LFxuICAgICAgLy8gMjMuMy4zLjQgV2Vha01hcC5wcm90b3R5cGUuaGFzKGtleSlcbiAgICAgIC8vIDIzLjQuMy40IFdlYWtTZXQucHJvdG90eXBlLmhhcyh2YWx1ZSlcbiAgICAgIGhhczogZnVuY3Rpb24gaGFzKGtleSkge1xuICAgICAgICBpZiAoIWlzT2JqZWN0KGtleSkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgdmFyIGRhdGEgPSBnZXRXZWFrKGtleSk7XG4gICAgICAgIGlmIChkYXRhID09PSB0cnVlKSByZXR1cm4gdW5jYXVnaHRGcm96ZW5TdG9yZSh2YWxpZGF0ZSh0aGlzLCBOQU1FKSkuaGFzKGtleSk7XG4gICAgICAgIHJldHVybiBkYXRhICYmICRoYXMoZGF0YSwgdGhpcy5faSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIEM7XG4gIH0sXG4gIGRlZjogZnVuY3Rpb24gKHRoYXQsIGtleSwgdmFsdWUpIHtcbiAgICB2YXIgZGF0YSA9IGdldFdlYWsoYW5PYmplY3Qoa2V5KSwgdHJ1ZSk7XG4gICAgaWYgKGRhdGEgPT09IHRydWUpIHVuY2F1Z2h0RnJvemVuU3RvcmUodGhhdCkuc2V0KGtleSwgdmFsdWUpO1xuICAgIGVsc2UgZGF0YVt0aGF0Ll9pXSA9IHZhbHVlO1xuICAgIHJldHVybiB0aGF0O1xuICB9LFxuICB1ZnN0b3JlOiB1bmNhdWdodEZyb3plblN0b3JlXG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///121\n")},function(module,exports,__webpack_require__){eval("// https://tc39.github.io/ecma262/#sec-toindex\nvar toInteger = __webpack_require__(21);\nvar toLength = __webpack_require__(6);\nmodule.exports = function (it) {\n if (it === undefined) return 0;\n var number = toInteger(it);\n var length = toLength(number);\n if (number !== length) throw RangeError('Wrong length!');\n return length;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8taW5kZXguanM/MDlmYSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGdCQUFnQixtQkFBTyxDQUFDLEVBQWU7QUFDdkMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMTIyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtdG9pbmRleFxudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGl0ID09PSB1bmRlZmluZWQpIHJldHVybiAwO1xuICB2YXIgbnVtYmVyID0gdG9JbnRlZ2VyKGl0KTtcbiAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKG51bWJlcik7XG4gIGlmIChudW1iZXIgIT09IGxlbmd0aCkgdGhyb3cgUmFuZ2VFcnJvcignV3JvbmcgbGVuZ3RoIScpO1xuICByZXR1cm4gbGVuZ3RoO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///122\n")},function(module,exports,__webpack_require__){eval("// all object keys, includes non-enumerable and symbols\nvar gOPN = __webpack_require__(37);\nvar gOPS = __webpack_require__(53);\nvar anObject = __webpack_require__(1);\nvar Reflect = __webpack_require__(2).Reflect;\nmodule.exports = Reflect && Reflect.ownKeys || function ownKeys(it) {\n var keys = gOPN.f(anObject(it));\n var getSymbols = gOPS.f;\n return getSymbols ? keys.concat(getSymbols(it)) : keys;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb3duLWtleXMuanM/OTkwYiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLFdBQVcsbUJBQU8sQ0FBQyxFQUFnQjtBQUNuQyxXQUFXLG1CQUFPLENBQUMsRUFBZ0I7QUFDbkMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIxMjMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBhbGwgb2JqZWN0IGtleXMsIGluY2x1ZGVzIG5vbi1lbnVtZXJhYmxlIGFuZCBzeW1ib2xzXG52YXIgZ09QTiA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJyk7XG52YXIgZ09QUyA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BzJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBSZWZsZWN0ID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuUmVmbGVjdDtcbm1vZHVsZS5leHBvcnRzID0gUmVmbGVjdCAmJiBSZWZsZWN0Lm93bktleXMgfHwgZnVuY3Rpb24gb3duS2V5cyhpdCkge1xuICB2YXIga2V5cyA9IGdPUE4uZihhbk9iamVjdChpdCkpO1xuICB2YXIgZ2V0U3ltYm9scyA9IGdPUFMuZjtcbiAgcmV0dXJuIGdldFN5bWJvbHMgPyBrZXlzLmNvbmNhdChnZXRTeW1ib2xzKGl0KSkgOiBrZXlzO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///123\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// https://tc39.github.io/proposal-flatMap/#sec-FlattenIntoArray\nvar isArray = __webpack_require__(54);\nvar isObject = __webpack_require__(4);\nvar toLength = __webpack_require__(6);\nvar ctx = __webpack_require__(19);\nvar IS_CONCAT_SPREADABLE = __webpack_require__(5)('isConcatSpreadable');\n\nfunction flattenIntoArray(target, original, source, sourceLen, start, depth, mapper, thisArg) {\n var targetIndex = start;\n var sourceIndex = 0;\n var mapFn = mapper ? ctx(mapper, thisArg, 3) : false;\n var element, spreadable;\n\n while (sourceIndex < sourceLen) {\n if (sourceIndex in source) {\n element = mapFn ? mapFn(source[sourceIndex], sourceIndex, original) : source[sourceIndex];\n\n spreadable = false;\n if (isObject(element)) {\n spreadable = element[IS_CONCAT_SPREADABLE];\n spreadable = spreadable !== undefined ? !!spreadable : isArray(element);\n }\n\n if (spreadable && depth > 0) {\n targetIndex = flattenIntoArray(target, original, element, toLength(element.length), targetIndex, depth - 1) - 1;\n } else {\n if (targetIndex >= 0x1fffffffffffff) throw TypeError();\n target[targetIndex] = element;\n }\n\n targetIndex++;\n }\n sourceIndex++;\n }\n return targetIndex;\n}\n\nmodule.exports = flattenIntoArray;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZmxhdHRlbi1pbnRvLWFycmF5LmpzP2M0NWYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxFQUFhO0FBQ25DLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLFVBQVUsbUJBQU8sQ0FBQyxFQUFRO0FBQzFCLDJCQUEyQixtQkFBTyxDQUFDLENBQVE7O0FBRTNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6IjEyNC5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtZmxhdE1hcC8jc2VjLUZsYXR0ZW5JbnRvQXJyYXlcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi9faXMtYXJyYXknKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgSVNfQ09OQ0FUX1NQUkVBREFCTEUgPSByZXF1aXJlKCcuL193a3MnKSgnaXNDb25jYXRTcHJlYWRhYmxlJyk7XG5cbmZ1bmN0aW9uIGZsYXR0ZW5JbnRvQXJyYXkodGFyZ2V0LCBvcmlnaW5hbCwgc291cmNlLCBzb3VyY2VMZW4sIHN0YXJ0LCBkZXB0aCwgbWFwcGVyLCB0aGlzQXJnKSB7XG4gIHZhciB0YXJnZXRJbmRleCA9IHN0YXJ0O1xuICB2YXIgc291cmNlSW5kZXggPSAwO1xuICB2YXIgbWFwRm4gPSBtYXBwZXIgPyBjdHgobWFwcGVyLCB0aGlzQXJnLCAzKSA6IGZhbHNlO1xuICB2YXIgZWxlbWVudCwgc3ByZWFkYWJsZTtcblxuICB3aGlsZSAoc291cmNlSW5kZXggPCBzb3VyY2VMZW4pIHtcbiAgICBpZiAoc291cmNlSW5kZXggaW4gc291cmNlKSB7XG4gICAgICBlbGVtZW50ID0gbWFwRm4gPyBtYXBGbihzb3VyY2Vbc291cmNlSW5kZXhdLCBzb3VyY2VJbmRleCwgb3JpZ2luYWwpIDogc291cmNlW3NvdXJjZUluZGV4XTtcblxuICAgICAgc3ByZWFkYWJsZSA9IGZhbHNlO1xuICAgICAgaWYgKGlzT2JqZWN0KGVsZW1lbnQpKSB7XG4gICAgICAgIHNwcmVhZGFibGUgPSBlbGVtZW50W0lTX0NPTkNBVF9TUFJFQURBQkxFXTtcbiAgICAgICAgc3ByZWFkYWJsZSA9IHNwcmVhZGFibGUgIT09IHVuZGVmaW5lZCA/ICEhc3ByZWFkYWJsZSA6IGlzQXJyYXkoZWxlbWVudCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChzcHJlYWRhYmxlICYmIGRlcHRoID4gMCkge1xuICAgICAgICB0YXJnZXRJbmRleCA9IGZsYXR0ZW5JbnRvQXJyYXkodGFyZ2V0LCBvcmlnaW5hbCwgZWxlbWVudCwgdG9MZW5ndGgoZWxlbWVudC5sZW5ndGgpLCB0YXJnZXRJbmRleCwgZGVwdGggLSAxKSAtIDE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodGFyZ2V0SW5kZXggPj0gMHgxZmZmZmZmZmZmZmZmZikgdGhyb3cgVHlwZUVycm9yKCk7XG4gICAgICAgIHRhcmdldFt0YXJnZXRJbmRleF0gPSBlbGVtZW50O1xuICAgICAgfVxuXG4gICAgICB0YXJnZXRJbmRleCsrO1xuICAgIH1cbiAgICBzb3VyY2VJbmRleCsrO1xuICB9XG4gIHJldHVybiB0YXJnZXRJbmRleDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmbGF0dGVuSW50b0FycmF5O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///124\n")},function(module,exports,__webpack_require__){eval("// https://github.com/tc39/proposal-string-pad-start-end\nvar toLength = __webpack_require__(6);\nvar repeat = __webpack_require__(74);\nvar defined = __webpack_require__(24);\n\nmodule.exports = function (that, maxLength, fillString, left) {\n var S = String(defined(that));\n var stringLength = S.length;\n var fillStr = fillString === undefined ? ' ' : String(fillString);\n var intMaxLength = toLength(maxLength);\n if (intMaxLength <= stringLength || fillStr == '') return S;\n var fillLen = intMaxLength - stringLength;\n var stringFiller = repeat.call(fillStr, Math.ceil(fillLen / fillStr.length));\n if (stringFiller.length > fillLen) stringFiller = stringFiller.slice(0, fillLen);\n return left ? stringFiller + S : S + stringFiller;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLXBhZC5qcz8yZTA4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsYUFBYSxtQkFBTyxDQUFDLEVBQWtCO0FBQ3ZDLGNBQWMsbUJBQU8sQ0FBQyxFQUFZOztBQUVsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjEyNS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXN0cmluZy1wYWQtc3RhcnQtZW5kXG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciByZXBlYXQgPSByZXF1aXJlKCcuL19zdHJpbmctcmVwZWF0Jyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGhhdCwgbWF4TGVuZ3RoLCBmaWxsU3RyaW5nLCBsZWZ0KSB7XG4gIHZhciBTID0gU3RyaW5nKGRlZmluZWQodGhhdCkpO1xuICB2YXIgc3RyaW5nTGVuZ3RoID0gUy5sZW5ndGg7XG4gIHZhciBmaWxsU3RyID0gZmlsbFN0cmluZyA9PT0gdW5kZWZpbmVkID8gJyAnIDogU3RyaW5nKGZpbGxTdHJpbmcpO1xuICB2YXIgaW50TWF4TGVuZ3RoID0gdG9MZW5ndGgobWF4TGVuZ3RoKTtcbiAgaWYgKGludE1heExlbmd0aCA8PSBzdHJpbmdMZW5ndGggfHwgZmlsbFN0ciA9PSAnJykgcmV0dXJuIFM7XG4gIHZhciBmaWxsTGVuID0gaW50TWF4TGVuZ3RoIC0gc3RyaW5nTGVuZ3RoO1xuICB2YXIgc3RyaW5nRmlsbGVyID0gcmVwZWF0LmNhbGwoZmlsbFN0ciwgTWF0aC5jZWlsKGZpbGxMZW4gLyBmaWxsU3RyLmxlbmd0aCkpO1xuICBpZiAoc3RyaW5nRmlsbGVyLmxlbmd0aCA+IGZpbGxMZW4pIHN0cmluZ0ZpbGxlciA9IHN0cmluZ0ZpbGxlci5zbGljZSgwLCBmaWxsTGVuKTtcbiAgcmV0dXJuIGxlZnQgPyBzdHJpbmdGaWxsZXIgKyBTIDogUyArIHN0cmluZ0ZpbGxlcjtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///125\n")},function(module,exports,__webpack_require__){eval("var DESCRIPTORS = __webpack_require__(7);\nvar getKeys = __webpack_require__(34);\nvar toIObject = __webpack_require__(15);\nvar isEnum = __webpack_require__(49).f;\nmodule.exports = function (isEntries) {\n return function (it) {\n var O = toIObject(it);\n var keys = getKeys(O);\n var length = keys.length;\n var i = 0;\n var result = [];\n var key;\n while (length > i) {\n key = keys[i++];\n if (!DESCRIPTORS || isEnum.call(O, key)) {\n result.push(isEntries ? [key, O[key]] : O[key]);\n }\n }\n return result;\n };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LXRvLWFycmF5LmpzPzUwNGMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsa0JBQWtCLG1CQUFPLENBQUMsQ0FBZ0I7QUFDMUMsY0FBYyxtQkFBTyxDQUFDLEVBQWdCO0FBQ3RDLGdCQUFnQixtQkFBTyxDQUFDLEVBQWU7QUFDdkMsYUFBYSxtQkFBTyxDQUFDLEVBQWU7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIxMjYuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpO1xudmFyIGdldEtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciBpc0VudW0gPSByZXF1aXJlKCcuL19vYmplY3QtcGllJykuZjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGlzRW50cmllcykge1xuICByZXR1cm4gZnVuY3Rpb24gKGl0KSB7XG4gICAgdmFyIE8gPSB0b0lPYmplY3QoaXQpO1xuICAgIHZhciBrZXlzID0gZ2V0S2V5cyhPKTtcbiAgICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICB2YXIga2V5O1xuICAgIHdoaWxlIChsZW5ndGggPiBpKSB7XG4gICAgICBrZXkgPSBrZXlzW2krK107XG4gICAgICBpZiAoIURFU0NSSVBUT1JTIHx8IGlzRW51bS5jYWxsKE8sIGtleSkpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goaXNFbnRyaWVzID8gW2tleSwgT1trZXldXSA6IE9ba2V5XSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///126\n")},function(module,exports,__webpack_require__){eval('// https://github.com/DavidBruant/Map-Set.prototype.toJSON\nvar classof = __webpack_require__(44);\nvar from = __webpack_require__(128);\nmodule.exports = function (NAME) {\n return function toJSON() {\n if (classof(this) != NAME) throw TypeError(NAME + "#toJSON isn\'t generic");\n return from(this);\n };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY29sbGVjdGlvbi10by1qc29uLmpzPzQ0YjgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsRUFBWTtBQUNsQyxXQUFXLG1CQUFPLENBQUMsR0FBd0I7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjEyNy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9EYXZpZEJydWFudC9NYXAtU2V0LnByb3RvdHlwZS50b0pTT05cbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi9fY2xhc3NvZicpO1xudmFyIGZyb20gPSByZXF1aXJlKCcuL19hcnJheS1mcm9tLWl0ZXJhYmxlJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChOQU1FKSB7XG4gIHJldHVybiBmdW5jdGlvbiB0b0pTT04oKSB7XG4gICAgaWYgKGNsYXNzb2YodGhpcykgIT0gTkFNRSkgdGhyb3cgVHlwZUVycm9yKE5BTUUgKyBcIiN0b0pTT04gaXNuJ3QgZ2VuZXJpY1wiKTtcbiAgICByZXR1cm4gZnJvbSh0aGlzKTtcbiAgfTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///127\n')},function(module,exports,__webpack_require__){eval("var forOf = __webpack_require__(40);\n\nmodule.exports = function (iter, ITERATOR) {\n var result = [];\n forOf(iter, false, result.push, result, ITERATOR);\n return result;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktZnJvbS1pdGVyYWJsZS5qcz80Mzc5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVksbUJBQU8sQ0FBQyxFQUFXOztBQUUvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjEyOC5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBmb3JPZiA9IHJlcXVpcmUoJy4vX2Zvci1vZicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVyLCBJVEVSQVRPUikge1xuICB2YXIgcmVzdWx0ID0gW107XG4gIGZvck9mKGl0ZXIsIGZhbHNlLCByZXN1bHQucHVzaCwgcmVzdWx0LCBJVEVSQVRPUik7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///128\n")},function(module,exports){eval("// https://rwaldron.github.io/proposal-math-extensions/\nmodule.exports = Math.scale || function scale(x, inLow, inHigh, outLow, outHigh) {\n if (\n arguments.length === 0\n // eslint-disable-next-line no-self-compare\n || x != x\n // eslint-disable-next-line no-self-compare\n || inLow != inLow\n // eslint-disable-next-line no-self-compare\n || inHigh != inHigh\n // eslint-disable-next-line no-self-compare\n || outLow != outLow\n // eslint-disable-next-line no-self-compare\n || outHigh != outHigh\n ) return NaN;\n if (x === Infinity || x === -Infinity) return x;\n return (x - inLow) * (outHigh - outLow) / (inHigh - inLow) + outLow;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWF0aC1zY2FsZS5qcz9lOWQyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIxMjkuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBodHRwczovL3J3YWxkcm9uLmdpdGh1Yi5pby9wcm9wb3NhbC1tYXRoLWV4dGVuc2lvbnMvXG5tb2R1bGUuZXhwb3J0cyA9IE1hdGguc2NhbGUgfHwgZnVuY3Rpb24gc2NhbGUoeCwgaW5Mb3csIGluSGlnaCwgb3V0TG93LCBvdXRIaWdoKSB7XG4gIGlmIChcbiAgICBhcmd1bWVudHMubGVuZ3RoID09PSAwXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICB8fCB4ICE9IHhcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICAgIHx8IGluTG93ICE9IGluTG93XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICB8fCBpbkhpZ2ggIT0gaW5IaWdoXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICB8fCBvdXRMb3cgIT0gb3V0TG93XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICB8fCBvdXRIaWdoICE9IG91dEhpZ2hcbiAgKSByZXR1cm4gTmFOO1xuICBpZiAoeCA9PT0gSW5maW5pdHkgfHwgeCA9PT0gLUluZmluaXR5KSByZXR1cm4geDtcbiAgcmV0dXJuICh4IC0gaW5Mb3cpICogKG91dEhpZ2ggLSBvdXRMb3cpIC8gKGluSGlnaCAtIGluTG93KSArIG91dExvdztcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///129\n")},function(e,n,t){t(131),e.exports=t(333)},function(module,exports,__webpack_require__){"use strict";eval('/* WEBPACK VAR INJECTION */(function(global) {\n\n__webpack_require__(132);\n\n__webpack_require__(329);\n\n__webpack_require__(330);\n\nif (global._babelPolyfill) {\n throw new Error("only one instance of babel-polyfill is allowed");\n}\nglobal._babelPolyfill = true;\n\nvar DEFINE_PROPERTY = "defineProperty";\nfunction define(O, key, value) {\n O[key] || Object[DEFINE_PROPERTY](O, key, {\n writable: true,\n configurable: true,\n value: value\n });\n}\n\ndefine(String.prototype, "padLeft", "".padStart);\ndefine(String.prototype, "padRight", "".padEnd);\n\n"pop,reverse,shift,keys,values,entries,indexOf,every,some,forEach,map,filter,find,findIndex,includes,join,slice,concat,push,splice,unshift,sort,lastIndexOf,reduce,reduceRight,copyWithin,fill".split(",").forEach(function (key) {\n [][key] && define(Array, key, Function.call.bind([][key]));\n});\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(93)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL2xpYi9pbmRleC5qcz9kYjRkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDhDQUFhOztBQUViLG1CQUFPLENBQUMsR0FBYzs7QUFFdEIsbUJBQU8sQ0FBQyxHQUE2Qjs7QUFFckMsbUJBQU8sQ0FBQyxHQUEwQjs7QUFFbEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLENBQUMsRSIsImZpbGUiOiIxMzEuanMiLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxucmVxdWlyZShcImNvcmUtanMvc2hpbVwiKTtcblxucmVxdWlyZShcInJlZ2VuZXJhdG9yLXJ1bnRpbWUvcnVudGltZVwiKTtcblxucmVxdWlyZShcImNvcmUtanMvZm4vcmVnZXhwL2VzY2FwZVwiKTtcblxuaWYgKGdsb2JhbC5fYmFiZWxQb2x5ZmlsbCkge1xuICB0aHJvdyBuZXcgRXJyb3IoXCJvbmx5IG9uZSBpbnN0YW5jZSBvZiBiYWJlbC1wb2x5ZmlsbCBpcyBhbGxvd2VkXCIpO1xufVxuZ2xvYmFsLl9iYWJlbFBvbHlmaWxsID0gdHJ1ZTtcblxudmFyIERFRklORV9QUk9QRVJUWSA9IFwiZGVmaW5lUHJvcGVydHlcIjtcbmZ1bmN0aW9uIGRlZmluZShPLCBrZXksIHZhbHVlKSB7XG4gIE9ba2V5XSB8fCBPYmplY3RbREVGSU5FX1BST1BFUlRZXShPLCBrZXksIHtcbiAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgdmFsdWU6IHZhbHVlXG4gIH0pO1xufVxuXG5kZWZpbmUoU3RyaW5nLnByb3RvdHlwZSwgXCJwYWRMZWZ0XCIsIFwiXCIucGFkU3RhcnQpO1xuZGVmaW5lKFN0cmluZy5wcm90b3R5cGUsIFwicGFkUmlnaHRcIiwgXCJcIi5wYWRFbmQpO1xuXG5cInBvcCxyZXZlcnNlLHNoaWZ0LGtleXMsdmFsdWVzLGVudHJpZXMsaW5kZXhPZixldmVyeSxzb21lLGZvckVhY2gsbWFwLGZpbHRlcixmaW5kLGZpbmRJbmRleCxpbmNsdWRlcyxqb2luLHNsaWNlLGNvbmNhdCxwdXNoLHNwbGljZSx1bnNoaWZ0LHNvcnQsbGFzdEluZGV4T2YscmVkdWNlLHJlZHVjZVJpZ2h0LGNvcHlXaXRoaW4sZmlsbFwiLnNwbGl0KFwiLFwiKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgW11ba2V5XSAmJiBkZWZpbmUoQXJyYXksIGtleSwgRnVuY3Rpb24uY2FsbC5iaW5kKFtdW2tleV0pKTtcbn0pOyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///131\n')},function(module,exports,__webpack_require__){eval("__webpack_require__(133);\n__webpack_require__(136);\n__webpack_require__(137);\n__webpack_require__(138);\n__webpack_require__(139);\n__webpack_require__(140);\n__webpack_require__(141);\n__webpack_require__(142);\n__webpack_require__(143);\n__webpack_require__(144);\n__webpack_require__(145);\n__webpack_require__(146);\n__webpack_require__(147);\n__webpack_require__(148);\n__webpack_require__(149);\n__webpack_require__(150);\n__webpack_require__(151);\n__webpack_require__(152);\n__webpack_require__(153);\n__webpack_require__(154);\n__webpack_require__(155);\n__webpack_require__(156);\n__webpack_require__(157);\n__webpack_require__(158);\n__webpack_require__(159);\n__webpack_require__(160);\n__webpack_require__(161);\n__webpack_require__(162);\n__webpack_require__(163);\n__webpack_require__(164);\n__webpack_require__(165);\n__webpack_require__(166);\n__webpack_require__(167);\n__webpack_require__(168);\n__webpack_require__(169);\n__webpack_require__(170);\n__webpack_require__(171);\n__webpack_require__(172);\n__webpack_require__(173);\n__webpack_require__(174);\n__webpack_require__(175);\n__webpack_require__(176);\n__webpack_require__(177);\n__webpack_require__(178);\n__webpack_require__(179);\n__webpack_require__(180);\n__webpack_require__(181);\n__webpack_require__(182);\n__webpack_require__(183);\n__webpack_require__(184);\n__webpack_require__(185);\n__webpack_require__(186);\n__webpack_require__(187);\n__webpack_require__(188);\n__webpack_require__(189);\n__webpack_require__(190);\n__webpack_require__(191);\n__webpack_require__(192);\n__webpack_require__(193);\n__webpack_require__(194);\n__webpack_require__(195);\n__webpack_require__(196);\n__webpack_require__(197);\n__webpack_require__(198);\n__webpack_require__(199);\n__webpack_require__(200);\n__webpack_require__(201);\n__webpack_require__(202);\n__webpack_require__(203);\n__webpack_require__(204);\n__webpack_require__(205);\n__webpack_require__(206);\n__webpack_require__(207);\n__webpack_require__(208);\n__webpack_require__(209);\n__webpack_require__(210);\n__webpack_require__(211);\n__webpack_require__(213);\n__webpack_require__(214);\n__webpack_require__(216);\n__webpack_require__(217);\n__webpack_require__(218);\n__webpack_require__(219);\n__webpack_require__(220);\n__webpack_require__(221);\n__webpack_require__(222);\n__webpack_require__(224);\n__webpack_require__(225);\n__webpack_require__(226);\n__webpack_require__(227);\n__webpack_require__(228);\n__webpack_require__(229);\n__webpack_require__(230);\n__webpack_require__(231);\n__webpack_require__(232);\n__webpack_require__(233);\n__webpack_require__(234);\n__webpack_require__(235);\n__webpack_require__(236);\n__webpack_require__(86);\n__webpack_require__(237);\n__webpack_require__(113);\n__webpack_require__(238);\n__webpack_require__(114);\n__webpack_require__(239);\n__webpack_require__(240);\n__webpack_require__(241);\n__webpack_require__(242);\n__webpack_require__(243);\n__webpack_require__(117);\n__webpack_require__(119);\n__webpack_require__(120);\n__webpack_require__(244);\n__webpack_require__(245);\n__webpack_require__(246);\n__webpack_require__(247);\n__webpack_require__(248);\n__webpack_require__(249);\n__webpack_require__(250);\n__webpack_require__(251);\n__webpack_require__(252);\n__webpack_require__(253);\n__webpack_require__(254);\n__webpack_require__(255);\n__webpack_require__(256);\n__webpack_require__(257);\n__webpack_require__(258);\n__webpack_require__(259);\n__webpack_require__(260);\n__webpack_require__(261);\n__webpack_require__(262);\n__webpack_require__(263);\n__webpack_require__(264);\n__webpack_require__(265);\n__webpack_require__(266);\n__webpack_require__(267);\n__webpack_require__(268);\n__webpack_require__(269);\n__webpack_require__(270);\n__webpack_require__(271);\n__webpack_require__(272);\n__webpack_require__(273);\n__webpack_require__(274);\n__webpack_require__(275);\n__webpack_require__(276);\n__webpack_require__(277);\n__webpack_require__(278);\n__webpack_require__(279);\n__webpack_require__(280);\n__webpack_require__(281);\n__webpack_require__(282);\n__webpack_require__(283);\n__webpack_require__(284);\n__webpack_require__(285);\n__webpack_require__(286);\n__webpack_require__(287);\n__webpack_require__(288);\n__webpack_require__(289);\n__webpack_require__(290);\n__webpack_require__(291);\n__webpack_require__(292);\n__webpack_require__(293);\n__webpack_require__(294);\n__webpack_require__(295);\n__webpack_require__(296);\n__webpack_require__(297);\n__webpack_require__(298);\n__webpack_require__(299);\n__webpack_require__(300);\n__webpack_require__(301);\n__webpack_require__(302);\n__webpack_require__(303);\n__webpack_require__(304);\n__webpack_require__(305);\n__webpack_require__(306);\n__webpack_require__(307);\n__webpack_require__(308);\n__webpack_require__(309);\n__webpack_require__(310);\n__webpack_require__(311);\n__webpack_require__(312);\n__webpack_require__(313);\n__webpack_require__(314);\n__webpack_require__(315);\n__webpack_require__(316);\n__webpack_require__(317);\n__webpack_require__(318);\n__webpack_require__(319);\n__webpack_require__(320);\n__webpack_require__(321);\n__webpack_require__(322);\n__webpack_require__(323);\n__webpack_require__(324);\n__webpack_require__(325);\n__webpack_require__(326);\n__webpack_require__(327);\n__webpack_require__(328);\nmodule.exports = __webpack_require__(18);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvc2hpbS5qcz82NmY5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLG1CQUFPLENBQUMsR0FBc0I7QUFDOUIsbUJBQU8sQ0FBQyxHQUE2QjtBQUNyQyxtQkFBTyxDQUFDLEdBQXNDO0FBQzlDLG1CQUFPLENBQUMsR0FBd0M7QUFDaEQsbUJBQU8sQ0FBQyxHQUFrRDtBQUMxRCxtQkFBTyxDQUFDLEdBQXVDO0FBQy9DLG1CQUFPLENBQUMsR0FBMkI7QUFDbkMsbUJBQU8sQ0FBQyxHQUE2QztBQUNyRCxtQkFBTyxDQUFDLEdBQTZCO0FBQ3JDLG1CQUFPLENBQUMsR0FBMkI7QUFDbkMsbUJBQU8sQ0FBQyxHQUF5QztBQUNqRCxtQkFBTyxDQUFDLEdBQWdDO0FBQ3hDLG1CQUFPLENBQUMsR0FBZ0M7QUFDeEMsbUJBQU8sQ0FBQyxHQUFvQztBQUM1QyxtQkFBTyxDQUFDLEdBQTZCO0FBQ3JDLG1CQUFPLENBQUMsR0FBeUI7QUFDakMsbUJBQU8sQ0FBQyxHQUF1QztBQUMvQyxtQkFBTyxDQUFDLEdBQWdDO0FBQ3hDLG1CQUFPLENBQUMsR0FBNkI7QUFDckMsbUJBQU8sQ0FBQyxHQUE2QjtBQUNyQyxtQkFBTyxDQUFDLEdBQXFDO0FBQzdDLG1CQUFPLENBQUMsR0FBeUI7QUFDakMsbUJBQU8sQ0FBQyxHQUEyQjtBQUNuQyxtQkFBTyxDQUFDLEdBQWtDO0FBQzFDLG1CQUFPLENBQUMsR0FBK0I7QUFDdkMsbUJBQU8sQ0FBQyxHQUFtQztBQUMzQyxtQkFBTyxDQUFDLEdBQThCO0FBQ3RDLG1CQUFPLENBQUMsR0FBZ0M7QUFDeEMsbUJBQU8sQ0FBQyxHQUFpQztBQUN6QyxtQkFBTyxDQUFDLEdBQTZCO0FBQ3JDLG1CQUFPLENBQUMsR0FBc0M7QUFDOUMsbUJBQU8sQ0FBQyxHQUF1QztBQUMvQyxtQkFBTyxDQUFDLEdBQXVDO0FBQy9DLG1CQUFPLENBQUMsR0FBa0M7QUFDMUMsbUJBQU8sQ0FBQyxH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QkFBTyxDQUFDLEdBQWdDO0FBQ3hDLG1CQUFPLENBQUMsR0FBb0I7QUFDNUIsbUJBQU8sQ0FBQyxHQUEwQjtBQUNsQyxtQkFBTyxDQUFDLEdBQXNCO0FBQzlCLG1CQUFPLENBQUMsR0FBeUI7QUFDakMsbUJBQU8sQ0FBQyxHQUE0QjtBQUNwQyxpQkFBaUIsbUJBQU8sQ0FBQyxFQUFpQiIsImZpbGUiOiIxMzIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJyZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN5bWJvbCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuY3JlYXRlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5kZWZpbmUtcHJvcGVydHknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmRlZmluZS1wcm9wZXJ0aWVzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmdldC1wcm90b3R5cGUtb2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmtleXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmdldC1vd24tcHJvcGVydHktbmFtZXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmZyZWV6ZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3Quc2VhbCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QucHJldmVudC1leHRlbnNpb25zJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5pcy1mcm96ZW4nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmlzLXNlYWxlZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuaXMtZXh0ZW5zaWJsZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuYXNzaWduJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5pcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3Quc2V0LXByb3RvdHlwZS1vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QudG8tc3RyaW5nJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmZ1bmN0aW9uLmJpbmQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuZnVuY3Rpb24ubmFtZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5mdW5jdGlvbi5oYXMtaW5zdGFuY2UnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucGFyc2UtaW50Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnBhcnNlLWZsb2F0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5jb25zdHJ1Y3RvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIudG8tZml4ZWQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLnRvLXByZWNpc2lvbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIuZXBzaWxvbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIuaXMtZmluaXRlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5pcy1pbnRlZ2VyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5pcy1uYW4nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLmlzLXNhZmUtaW50ZWdlcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIubWF4LXNhZmUtaW50ZWdlcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIubWluLXNhZmUtaW50ZWdlcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIucGFyc2UtZmxvYXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLnBhcnNlLWludCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmFjb3NoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguYXNpbmgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5hdGFuaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmNicnQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5jbHozMicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmNvc2gnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5leHBtMScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmZyb3VuZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmh5cG90Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguaW11bCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmxvZzEwJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGgubG9nMXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5sb2cyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguc2lnbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLnNpbmgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC50YW5oJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGgudHJ1bmMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLmZyb20tY29kZS1wb2ludCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcucmF3Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy50cmltJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuY29kZS1wb2ludC1hdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuZW5kcy13aXRoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5pbmNsdWRlcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcucmVwZWF0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5zdGFydHMtd2l0aCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuYW5jaG9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5iaWcnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLmJsaW5rJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5ib2xkJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5maXhlZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuZm9udGNvbG9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5mb250c2l6ZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuaXRhbGljcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcubGluaycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuc21hbGwnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLnN0cmlrZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuc3ViJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5zdXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuZGF0ZS5ub3cnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuZGF0ZS50by1qc29uJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmRhdGUudG8taXNvLXN0cmluZycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5kYXRlLnRvLXN0cmluZycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5kYXRlLnRvLXByaW1pdGl2ZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5pcy1hcnJheScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5mcm9tJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5Lm9mJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmpvaW4nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuc2xpY2UnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuc29ydCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5mb3ItZWFjaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5tYXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuZmlsdGVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LnNvbWUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuZXZlcnknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkucmVkdWNlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LnJlZHVjZS1yaWdodCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5pbmRleC1vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5sYXN0LWluZGV4LW9mJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmNvcHktd2l0aGluJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmZpbGwnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuZmluZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5maW5kLWluZGV4Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LnNwZWNpZXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVnZXhwLmNvbnN0cnVjdG9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZ2V4cC5leGVjJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZ2V4cC50by1zdHJpbmcnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVnZXhwLmZsYWdzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZ2V4cC5tYXRjaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWdleHAucmVwbGFjZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWdleHAuc2VhcmNoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZ2V4cC5zcGxpdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5wcm9taXNlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hcCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zZXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYud2Vhay1tYXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYud2Vhay1zZXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQuYXJyYXktYnVmZmVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLmRhdGEtdmlldycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi50eXBlZC5pbnQ4LWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLnVpbnQ4LWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLnVpbnQ4LWNsYW1wZWQtYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQuaW50MTYtYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQudWludDE2LWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLmludDMyLWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLnVpbnQzMi1hcnJheScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi50eXBlZC5mbG9hdDMyLWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLmZsb2F0NjQtYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5hcHBseScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmNvbnN0cnVjdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmRlZmluZS1wcm9wZXJ0eScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmRlbGV0ZS1wcm9wZXJ0eScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmVudW1lcmF0ZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmdldCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmdldC1wcm90b3R5cGUtb2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5oYXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5pcy1leHRlbnNpYmxlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3Qub3duLWtleXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5wcmV2ZW50LWV4dGVuc2lvbnMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5zZXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5zZXQtcHJvdG90eXBlLW9mJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LmFycmF5LmluY2x1ZGVzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LmFycmF5LmZsYXQtbWFwJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LmFycmF5LmZsYXR0ZW4nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc3RyaW5nLmF0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnN0cmluZy5wYWQtc3RhcnQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc3RyaW5nLnBhZC1lbmQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc3RyaW5nLnRyaW0tbGVmdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zdHJpbmcudHJpbS1yaWdodCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zdHJpbmcubWF0Y2gtYWxsJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnN5bWJvbC5hc3luYy1pdGVyYXRvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zeW1ib2wub2JzZXJ2YWJsZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9ycycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5vYmplY3QudmFsdWVzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC5lbnRyaWVzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC5kZWZpbmUtZ2V0dGVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC5kZWZpbmUtc2V0dGVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC5sb29rdXAtZ2V0dGVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC5sb29rdXAtc2V0dGVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hcC50by1qc29uJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnNldC50by1qc29uJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hcC5vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zZXQub2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcud2Vhay1tYXAub2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcud2Vhay1zZXQub2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWFwLmZyb20nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc2V0LmZyb20nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcud2Vhay1tYXAuZnJvbScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy53ZWFrLXNldC5mcm9tJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lmdsb2JhbCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zeXN0ZW0uZ2xvYmFsJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LmVycm9yLmlzLWVycm9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGguY2xhbXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5kZWctcGVyLXJhZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLmRlZ3JlZXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5mc2NhbGUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5pYWRkaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLmlzdWJoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGguaW11bGgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5yYWQtcGVyLWRlZycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLnJhZGlhbnMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5zY2FsZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLnVtdWxoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGguc2lnbmJpdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5wcm9taXNlLmZpbmFsbHknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucHJvbWlzZS50cnknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5kZWZpbmUtbWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5kZWxldGUtbWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtbWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtbWV0YWRhdGEta2V5cycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5yZWZsZWN0LmdldC1vd24tbWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtb3duLW1ldGFkYXRhLWtleXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5oYXMtbWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5oYXMtb3duLW1ldGFkYXRhJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnJlZmxlY3QubWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuYXNhcCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5vYnNlcnZhYmxlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvd2ViLnRpbWVycycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL3dlYi5pbW1lZGlhdGUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy93ZWIuZG9tLml0ZXJhYmxlJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vbW9kdWxlcy9fY29yZScpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///132\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// ECMAScript 6 symbols shim\nvar global = __webpack_require__(2);\nvar has = __webpack_require__(14);\nvar DESCRIPTORS = __webpack_require__(7);\nvar $export = __webpack_require__(0);\nvar redefine = __webpack_require__(12);\nvar META = __webpack_require__(30).KEY;\nvar $fails = __webpack_require__(3);\nvar shared = __webpack_require__(47);\nvar setToStringTag = __webpack_require__(43);\nvar uid = __webpack_require__(33);\nvar wks = __webpack_require__(5);\nvar wksExt = __webpack_require__(95);\nvar wksDefine = __webpack_require__(67);\nvar enumKeys = __webpack_require__(135);\nvar isArray = __webpack_require__(54);\nvar anObject = __webpack_require__(1);\nvar isObject = __webpack_require__(4);\nvar toObject = __webpack_require__(9);\nvar toIObject = __webpack_require__(15);\nvar toPrimitive = __webpack_require__(23);\nvar createDesc = __webpack_require__(32);\nvar _create = __webpack_require__(36);\nvar gOPNExt = __webpack_require__(98);\nvar $GOPD = __webpack_require__(16);\nvar $GOPS = __webpack_require__(53);\nvar $DP = __webpack_require__(8);\nvar $keys = __webpack_require__(34);\nvar gOPD = $GOPD.f;\nvar dP = $DP.f;\nvar gOPN = gOPNExt.f;\nvar $Symbol = global.Symbol;\nvar $JSON = global.JSON;\nvar _stringify = $JSON && $JSON.stringify;\nvar PROTOTYPE = 'prototype';\nvar HIDDEN = wks('_hidden');\nvar TO_PRIMITIVE = wks('toPrimitive');\nvar isEnum = {}.propertyIsEnumerable;\nvar SymbolRegistry = shared('symbol-registry');\nvar AllSymbols = shared('symbols');\nvar OPSymbols = shared('op-symbols');\nvar ObjectProto = Object[PROTOTYPE];\nvar USE_NATIVE = typeof $Symbol == 'function' && !!$GOPS.f;\nvar QObject = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDesc = DESCRIPTORS && $fails(function () {\n return _create(dP({}, 'a', {\n get: function () { return dP(this, 'a', { value: 7 }).a; }\n })).a != 7;\n}) ? function (it, key, D) {\n var protoDesc = gOPD(ObjectProto, key);\n if (protoDesc) delete ObjectProto[key];\n dP(it, key, D);\n if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc);\n} : dP;\n\nvar wrap = function (tag) {\n var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);\n sym._k = tag;\n return sym;\n};\n\nvar isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n return it instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(it, key, D) {\n if (it === ObjectProto) $defineProperty(OPSymbols, key, D);\n anObject(it);\n key = toPrimitive(key, true);\n anObject(D);\n if (has(AllSymbols, key)) {\n if (!D.enumerable) {\n if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {}));\n it[HIDDEN][key] = true;\n } else {\n if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;\n D = _create(D, { enumerable: createDesc(0, false) });\n } return setSymbolDesc(it, key, D);\n } return dP(it, key, D);\n};\nvar $defineProperties = function defineProperties(it, P) {\n anObject(it);\n var keys = enumKeys(P = toIObject(P));\n var i = 0;\n var l = keys.length;\n var key;\n while (l > i) $defineProperty(it, key = keys[i++], P[key]);\n return it;\n};\nvar $create = function create(it, P) {\n return P === undefined ? _create(it) : $defineProperties(_create(it), P);\n};\nvar $propertyIsEnumerable = function propertyIsEnumerable(key) {\n var E = isEnum.call(this, key = toPrimitive(key, true));\n if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false;\n return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;\n};\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {\n it = toIObject(it);\n key = toPrimitive(key, true);\n if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return;\n var D = gOPD(it, key);\n if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;\n return D;\n};\nvar $getOwnPropertyNames = function getOwnPropertyNames(it) {\n var names = gOPN(toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);\n } return result;\n};\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(it) {\n var IS_OP = it === ObjectProto;\n var names = gOPN(IS_OP ? OPSymbols : toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]);\n } return result;\n};\n\n// 19.4.1.1 Symbol([description])\nif (!USE_NATIVE) {\n $Symbol = function Symbol() {\n if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');\n var tag = uid(arguments.length > 0 ? arguments[0] : undefined);\n var $set = function (value) {\n if (this === ObjectProto) $set.call(OPSymbols, value);\n if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n setSymbolDesc(this, tag, createDesc(1, value));\n };\n if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set });\n return wrap(tag);\n };\n redefine($Symbol[PROTOTYPE], 'toString', function toString() {\n return this._k;\n });\n\n $GOPD.f = $getOwnPropertyDescriptor;\n $DP.f = $defineProperty;\n __webpack_require__(37).f = gOPNExt.f = $getOwnPropertyNames;\n __webpack_require__(49).f = $propertyIsEnumerable;\n $GOPS.f = $getOwnPropertySymbols;\n\n if (DESCRIPTORS && !__webpack_require__(29)) {\n redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);\n }\n\n wksExt.f = function (name) {\n return wrap(wks(name));\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol });\n\nfor (var es6Symbols = (\n // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14\n 'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'\n).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]);\n\nfor (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]);\n\n$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {\n // 19.4.2.1 Symbol.for(key)\n 'for': function (key) {\n return has(SymbolRegistry, key += '')\n ? SymbolRegistry[key]\n : SymbolRegistry[key] = $Symbol(key);\n },\n // 19.4.2.5 Symbol.keyFor(sym)\n keyFor: function keyFor(sym) {\n if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');\n for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key;\n },\n useSetter: function () { setter = true; },\n useSimple: function () { setter = false; }\n});\n\n$export($export.S + $export.F * !USE_NATIVE, 'Object', {\n // 19.1.2.2 Object.create(O [, Properties])\n create: $create,\n // 19.1.2.4 Object.defineProperty(O, P, Attributes)\n defineProperty: $defineProperty,\n // 19.1.2.3 Object.defineProperties(O, Properties)\n defineProperties: $defineProperties,\n // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n // 19.1.2.7 Object.getOwnPropertyNames(O)\n getOwnPropertyNames: $getOwnPropertyNames,\n // 19.1.2.8 Object.getOwnPropertySymbols(O)\n getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// Chrome 38 and 39 `Object.getOwnPropertySymbols` fails on primitives\n// https://bugs.chromium.org/p/v8/issues/detail?id=3443\nvar FAILS_ON_PRIMITIVES = $fails(function () { $GOPS.f(1); });\n\n$export($export.S + $export.F * FAILS_ON_PRIMITIVES, 'Object', {\n getOwnPropertySymbols: function getOwnPropertySymbols(it) {\n return $GOPS.f(toObject(it));\n }\n});\n\n// 24.3.2 JSON.stringify(value [, replacer [, space]])\n$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () {\n var S = $Symbol();\n // MS Edge converts symbol values to JSON as {}\n // WebKit converts symbol values to JSON as null\n // V8 throws on boxed symbols\n return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}';\n})), 'JSON', {\n stringify: function stringify(it) {\n var args = [it];\n var i = 1;\n var replacer, $replacer;\n while (arguments.length > i) args.push(arguments[i++]);\n $replacer = replacer = args[1];\n if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n if (!isArray(replacer)) replacer = function (key, value) {\n if (typeof $replacer == 'function') value = $replacer.call(this, key, value);\n if (!isSymbol(value)) return value;\n };\n args[1] = replacer;\n return _stringify.apply($JSON, args);\n }\n});\n\n// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)\n$Symbol[PROTOTYPE][TO_PRIMITIVE] || __webpack_require__(11)($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n// 19.4.3.5 Symbol.prototype[@@toStringTag]\nsetToStringTag($Symbol, 'Symbol');\n// 20.2.1.9 Math[@@toStringTag]\nsetToStringTag(Math, 'Math', true);\n// 24.3.3 JSON[@@toStringTag]\nsetToStringTag(global.JSON, 'JSON', true);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3ltYm9sLmpzPzhhODEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBLGFBQWEsbUJBQU8sQ0FBQyxDQUFXO0FBQ2hDLFVBQVUsbUJBQU8sQ0FBQyxFQUFRO0FBQzFCLGtCQUFrQixtQkFBTyxDQUFDLENBQWdCO0FBQzFDLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyxFQUFhO0FBQ3BDLFdBQVcsbUJBQU8sQ0FBQyxFQUFTO0FBQzVCLGFBQWEsbUJBQU8sQ0FBQyxDQUFVO0FBQy9CLGFBQWEsbUJBQU8sQ0FBQyxFQUFXO0FBQ2hDLHFCQUFxQixtQkFBTyxDQUFDLEVBQXNCO0FBQ25ELFVBQVUsbUJBQU8sQ0FBQyxFQUFRO0FBQzFCLFVBQVUsbUJBQU8sQ0FBQyxDQUFRO0FBQzFCLGFBQWEsbUJBQU8sQ0FBQyxFQUFZO0FBQ2pDLGdCQUFnQixtQkFBTyxDQUFDLEVBQWU7QUFDdkMsZUFBZSxtQkFBTyxDQUFDLEdBQWM7QUFDckMsY0FBYyxtQkFBTyxDQUFDLEVBQWE7QUFDbkMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2QyxrQkFBa0IsbUJBQU8sQ0FBQyxFQUFpQjtBQUMzQyxpQkFBaUIsbUJBQU8sQ0FBQyxFQUFrQjtBQUMzQyxjQUFjLG1CQUFPLENBQUMsRUFBa0I7QUFDeEMsY0FBYyxtQkFBTyxDQUFDLEVBQW9CO0FBQzFDLFlBQVksbUJBQU8sQ0FBQyxFQUFnQjtBQUNwQyxZQUFZLG1CQUFPLENBQUMsRUFBZ0I7QUFDcEMsVUFBVSxtQkFBTyxDQUFDLENBQWM7QUFDaEMsWUFBWSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxzQkFBc0I7QUFDdEIsc0JBQXNCLHVCQUF1QixXQUFXLElBQUk7QUFDNUQsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyREFBMkQ7QUFDM0Q7QUFDQSxLQUFLO0FBQ0w7QUFDQSxzQkFBc0IsbUNBQW1DO0FBQ3pELEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdFQUFnRSxnQ0FBZ0M7QUFDaEc7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxFQUFFLG1CQUFPLENBQUMsRUFBZ0I7QUFDMUIsRUFBRSxtQkFBTyxDQUFDLEVBQWU7QUFDekI7O0FBRUEsc0JBQXNCLG1CQUFPLENBQUMsRUFBWTtBQUMxQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDBEQUEwRCxrQkFBa0I7O0FBRTVFO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQix1QkFBdUI7O0FBRTNDLG9EQUFvRCw2QkFBNkI7O0FBRWpGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCwwQkFBMEIsZUFBZSxFQUFFO0FBQzNDLDBCQUEwQixnQkFBZ0I7QUFDMUMsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBLDhDQUE4QyxZQUFZLEVBQUU7O0FBRTVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvREFBb0QsT0FBTyxRQUFRLGlDQUFpQztBQUNwRyxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0VBQXdFO0FBQ3hFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBLG9DQUFvQyxtQkFBTyxDQUFDLEVBQVM7QUFDckQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjEzMy5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIEVDTUFTY3JpcHQgNiBzeW1ib2xzIHNoaW1cbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUnKTtcbnZhciBNRVRBID0gcmVxdWlyZSgnLi9fbWV0YScpLktFWTtcbnZhciAkZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4vX3NoYXJlZCcpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuL191aWQnKTtcbnZhciB3a3MgPSByZXF1aXJlKCcuL193a3MnKTtcbnZhciB3a3NFeHQgPSByZXF1aXJlKCcuL193a3MtZXh0Jyk7XG52YXIgd2tzRGVmaW5lID0gcmVxdWlyZSgnLi9fd2tzLWRlZmluZScpO1xudmFyIGVudW1LZXlzID0gcmVxdWlyZSgnLi9fZW51bS1rZXlzJyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4vX2lzLWFycmF5Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG52YXIgY3JlYXRlRGVzYyA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKTtcbnZhciBfY3JlYXRlID0gcmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpO1xudmFyIGdPUE5FeHQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wbi1leHQnKTtcbnZhciAkR09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJyk7XG52YXIgJEdPUFMgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wcycpO1xudmFyICREUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xudmFyICRrZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcbnZhciBnT1BEID0gJEdPUEQuZjtcbnZhciBkUCA9ICREUC5mO1xudmFyIGdPUE4gPSBnT1BORXh0LmY7XG52YXIgJFN5bWJvbCA9IGdsb2JhbC5TeW1ib2w7XG52YXIgJEpTT04gPSBnbG9iYWwuSlNPTjtcbnZhciBfc3RyaW5naWZ5ID0gJEpTT04gJiYgJEpTT04uc3RyaW5naWZ5O1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xudmFyIEhJRERFTiA9IHdrcygnX2hpZGRlbicpO1xudmFyIFRPX1BSSU1JVElWRSA9IHdrcygndG9QcmltaXRpdmUnKTtcbnZhciBpc0VudW0gPSB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbnZhciBTeW1ib2xSZWdpc3RyeSA9IHNoYXJlZCgnc3ltYm9sLXJlZ2lzdHJ5Jyk7XG52YXIgQWxsU3ltYm9scyA9IHNoYXJlZCgnc3ltYm9scycpO1xudmFyIE9QU3ltYm9scyA9IHNoYXJlZCgnb3Atc3ltYm9scycpO1xudmFyIE9iamVjdFByb3RvID0gT2JqZWN0W1BST1RPVFlQRV07XG52YXIgVVNFX05BVElWRSA9IHR5cGVvZiAkU3ltYm9sID09ICdmdW5jdGlvbicgJiYgISEkR09QUy5mO1xudmFyIFFPYmplY3QgPSBnbG9iYWwuUU9iamVjdDtcbi8vIERvbid0IHVzZSBzZXR0ZXJzIGluIFF0IFNjcmlwdCwgaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzE3M1xudmFyIHNldHRlciA9ICFRT2JqZWN0IHx8ICFRT2JqZWN0W1BST1RPVFlQRV0gfHwgIVFPYmplY3RbUFJPVE9UWVBFXS5maW5kQ2hpbGQ7XG5cbi8vIGZhbGxiYWNrIGZvciBvbGQgQW5kcm9pZCwgaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTY4N1xudmFyIHNldFN5bWJvbERlc2MgPSBERVNDUklQVE9SUyAmJiAkZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gX2NyZWF0ZShkUCh7fSwgJ2EnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBkUCh0aGlzLCAnYScsIHsgdmFsdWU6IDcgfSkuYTsgfVxuICB9KSkuYSAhPSA3O1xufSkgPyBmdW5jdGlvbiAoaXQsIGtleSwgRCkge1xuICB2YXIgcHJvdG9EZXNjID0gZ09QRChPYmplY3RQcm90bywga2V5KTtcbiAgaWYgKHByb3RvRGVzYykgZGVsZXRlIE9iamVjdFByb3RvW2tleV07XG4gIGRQKGl0LCBrZXksIEQpO1xuICBpZiAocHJvdG9EZXNjICYmIGl0ICE9PSBPYmplY3RQcm90bykgZFAoT2JqZWN0UHJvdG8sIGtleSwgcHJvdG9EZXNjKTtcbn0gOiBkUDtcblxudmFyIHdyYXAgPSBmdW5jdGlvbiAodGFnKSB7XG4gIHZhciBzeW0gPSBBbGxTeW1ib2xzW3RhZ10gPSBfY3JlYXRlKCRTeW1ib2xbUFJPVE9UWVBFXSk7XG4gIHN5bS5fayA9IHRhZztcbiAgcmV0dXJuIHN5bTtcbn07XG5cbnZhciBpc1N5bWJvbCA9IFVTRV9OQVRJVkUgJiYgdHlwZW9mICRTeW1ib2wuaXRlcmF0b3IgPT0gJ3N5bWJvbCcgPyBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnc3ltYm9sJztcbn0gOiBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0IGluc3RhbmNlb2YgJFN5bWJvbDtcbn07XG5cbnZhciAkZGVmaW5lUHJvcGVydHkgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShpdCwga2V5LCBEKSB7XG4gIGlmIChpdCA9PT0gT2JqZWN0UHJvdG8pICRkZWZpbmVQcm9wZXJ0eShPUFN5bWJvbHMsIGtleSwgRCk7XG4gIGFuT2JqZWN0KGl0KTtcbiAga2V5ID0gdG9QcmltaXRpdmUoa2V5LCB0cnVlKTtcbiAgYW5PYmplY3QoRCk7XG4gIGlmIChoYXMoQWxsU3ltYm9scywga2V5KSkge1xuICAgIGlmICghRC5lbnVtZXJhYmxlKSB7XG4gICAgICBpZiAoIWhhcyhpdCwgSElEREVOKSkgZFAoaXQsIEhJRERFTiwgY3JlYXRlRGVzYygxLCB7fSkpO1xuICAgICAgaXRbSElEREVOXVtrZXldID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGhhcyhpdCwgSElEREVOKSAmJiBpdFtISURERU5dW2tleV0pIGl0W0hJRERFTl1ba2V5XSA9IGZhbHNlO1xuICAgICAgRCA9IF9jcmVhdGUoRCwgeyBlbnVtZXJhYmxlOiBjcmVhdGVEZXNjKDAsIGZhbHNlKSB9KTtcbiAgICB9IHJldHVybiBzZXRTeW1ib2xEZXNjKGl0LCBrZXksIEQpO1xuICB9IHJldHVybiBkUChpdCwga2V5LCBEKTtcbn07XG52YXIgJGRlZmluZVByb3BlcnRpZXMgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKGl0LCBQKSB7XG4gIGFuT2JqZWN0KGl0KTtcbiAgdmFyIGtleXMgPSBlbnVtS2V5cyhQID0gdG9JT2JqZWN0KFApKTtcbiAgdmFyIGkgPSAwO1xuICB2YXIgbCA9IGtleXMubGVuZ3RoO1xuICB2YXIga2V5O1xuICB3aGlsZSAobCA+IGkpICRkZWZpbmVQcm9wZXJ0eShpdCwga2V5ID0ga2V5c1tpKytdLCBQW2tleV0pO1xuICByZXR1cm4gaXQ7XG59O1xudmFyICRjcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUoaXQsIFApIHtcbiAgcmV0dXJuIFAgPT09IHVuZGVmaW5lZCA/IF9jcmVhdGUoaXQpIDogJGRlZmluZVByb3BlcnRpZXMoX2NyZWF0ZShpdCksIFApO1xufTtcbnZhciAkcHJvcGVydHlJc0VudW1lcmFibGUgPSBmdW5jdGlvbiBwcm9wZXJ0eUlzRW51bWVyYWJsZShrZXkpIHtcbiAgdmFyIEUgPSBpc0VudW0uY2FsbCh0aGlzLCBrZXkgPSB0b1ByaW1pdGl2ZShrZXksIHRydWUpKTtcbiAgaWYgKHRoaXMgPT09IE9iamVjdFByb3RvICYmIGhhcyhBbGxTeW1ib2xzLCBrZXkpICYmICFoYXMoT1BTeW1ib2xzLCBrZXkpKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiBFIHx8ICFoYXModGhpcywga2V5KSB8fCAhaGFzKEFsbFN5bWJvbHMsIGtleSkgfHwgaGFzKHRoaXMsIEhJRERFTikgJiYgdGhpc1tISURERU5dW2tleV0gPyBFIDogdHJ1ZTtcbn07XG52YXIgJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihpdCwga2V5KSB7XG4gIGl0ID0gdG9JT2JqZWN0KGl0KTtcbiAga2V5ID0gdG9QcmltaXRpdmUoa2V5LCB0cnVlKTtcbiAgaWYgKGl0ID09PSBPYmplY3RQcm90byAmJiBoYXMoQWxsU3ltYm9scywga2V5KSAmJiAhaGFzKE9QU3ltYm9scywga2V5KSkgcmV0dXJuO1xuICB2YXIgRCA9IGdPUEQoaXQsIGtleSk7XG4gIGlmIChEICYmIGhhcyhBbGxTeW1ib2xzLCBrZXkpICYmICEoaGFzKGl0LCBISURERU4pICYmIGl0W0hJRERFTl1ba2V5XSkpIEQuZW51bWVyYWJsZSA9IHRydWU7XG4gIHJldHVybiBEO1xufTtcbnZhciAkZ2V0T3duUHJvcGVydHlOYW1lcyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoaXQpIHtcbiAgdmFyIG5hbWVzID0gZ09QTih0b0lPYmplY3QoaXQpKTtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIgaSA9IDA7XG4gIHZhciBrZXk7XG4gIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSB7XG4gICAgaWYgKCFoYXMoQWxsU3ltYm9scywga2V5ID0gbmFtZXNbaSsrXSkgJiYga2V5ICE9IEhJRERFTiAmJiBrZXkgIT0gTUVUQSkgcmVzdWx0LnB1c2goa2V5KTtcbiAgfSByZXR1cm4gcmVzdWx0O1xufTtcbnZhciAkZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlTeW1ib2xzKGl0KSB7XG4gIHZhciBJU19PUCA9IGl0ID09PSBPYmplY3RQcm90bztcbiAgdmFyIG5hbWVzID0gZ09QTihJU19PUCA/IE9QU3ltYm9scyA6IHRvSU9iamVjdChpdCkpO1xuICB2YXIgcmVzdWx0ID0gW107XG4gIHZhciBpID0gMDtcbiAgdmFyIGtleTtcbiAgd2hpbGUgKG5hbWVzLmxlbmd0aCA+IGkpIHtcbiAgICBpZiAoaGFzKEFsbFN5bWJvbHMsIGtleSA9IG5hbWVzW2krK10pICYmIChJU19PUCA/IGhhcyhPYmplY3RQcm90bywga2V5KSA6IHRydWUpKSByZXN1bHQucHVzaChBbGxTeW1ib2xzW2tleV0pO1xuICB9IHJldHVybiByZXN1bHQ7XG59O1xuXG4vLyAxOS40LjEuMSBTeW1ib2woW2Rlc2NyaXB0aW9uXSlcbmlmICghVVNFX05BVElWRSkge1xuICAkU3ltYm9sID0gZnVuY3Rpb24gU3ltYm9sKCkge1xuICAgIGlmICh0aGlzIGluc3RhbmNlb2YgJFN5bWJvbCkgdGhyb3cgVHlwZUVycm9yKCdTeW1ib2wgaXMgbm90IGEgY29uc3RydWN0b3IhJyk7XG4gICAgdmFyIHRhZyA9IHVpZChhcmd1bWVudHMubGVuZ3RoID4gMCA/IGFyZ3VtZW50c1swXSA6IHVuZGVmaW5lZCk7XG4gICAgdmFyICRzZXQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIGlmICh0aGlzID09PSBPYmplY3RQcm90bykgJHNldC5jYWxsKE9QU3ltYm9scywgdmFsdWUpO1xuICAgICAgaWYgKGhhcyh0aGlzLCBISURERU4pICYmIGhhcyh0aGlzW0hJRERFTl0sIHRhZykpIHRoaXNbSElEREVOXVt0YWddID0gZmFsc2U7XG4gICAgICBzZXRTeW1ib2xEZXNjKHRoaXMsIHRhZywgY3JlYXRlRGVzYygxLCB2YWx1ZSkpO1xuICAgIH07XG4gICAgaWYgKERFU0NSSVBUT1JTICYmIHNldHRlcikgc2V0U3ltYm9sRGVzYyhPYmplY3RQcm90bywgdGFnLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgc2V0OiAkc2V0IH0pO1xuICAgIHJldHVybiB3cmFwKHRhZyk7XG4gIH07XG4gIHJlZGVmaW5lKCRTeW1ib2xbUFJPVE9UWVBFXSwgJ3RvU3RyaW5nJywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2s7XG4gIH0pO1xuXG4gICRHT1BELmYgPSAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuICAkRFAuZiA9ICRkZWZpbmVQcm9wZXJ0eTtcbiAgcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4nKS5mID0gZ09QTkV4dC5mID0gJGdldE93blByb3BlcnR5TmFtZXM7XG4gIHJlcXVpcmUoJy4vX29iamVjdC1waWUnKS5mID0gJHByb3BlcnR5SXNFbnVtZXJhYmxlO1xuICAkR09QUy5mID0gJGdldE93blByb3BlcnR5U3ltYm9scztcblxuICBpZiAoREVTQ1JJUFRPUlMgJiYgIXJlcXVpcmUoJy4vX2xpYnJhcnknKSkge1xuICAgIHJlZGVmaW5lKE9iamVjdFByb3RvLCAncHJvcGVydHlJc0VudW1lcmFibGUnLCAkcHJvcGVydHlJc0VudW1lcmFibGUsIHRydWUpO1xuICB9XG5cbiAgd2tzRXh0LmYgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHJldHVybiB3cmFwKHdrcyhuYW1lKSk7XG4gIH07XG59XG5cbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5XICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsIHsgU3ltYm9sOiAkU3ltYm9sIH0pO1xuXG5mb3IgKHZhciBlczZTeW1ib2xzID0gKFxuICAvLyAxOS40LjIuMiwgMTkuNC4yLjMsIDE5LjQuMi40LCAxOS40LjIuNiwgMTkuNC4yLjgsIDE5LjQuMi45LCAxOS40LjIuMTAsIDE5LjQuMi4xMSwgMTkuNC4yLjEyLCAxOS40LjIuMTMsIDE5LjQuMi4xNFxuICAnaGFzSW5zdGFuY2UsaXNDb25jYXRTcHJlYWRhYmxlLGl0ZXJhdG9yLG1hdGNoLHJlcGxhY2Usc2VhcmNoLHNwZWNpZXMsc3BsaXQsdG9QcmltaXRpdmUsdG9TdHJpbmdUYWcsdW5zY29wYWJsZXMnXG4pLnNwbGl0KCcsJyksIGogPSAwOyBlczZTeW1ib2xzLmxlbmd0aCA+IGo7KXdrcyhlczZTeW1ib2xzW2orK10pO1xuXG5mb3IgKHZhciB3ZWxsS25vd25TeW1ib2xzID0gJGtleXMod2tzLnN0b3JlKSwgayA9IDA7IHdlbGxLbm93blN5bWJvbHMubGVuZ3RoID4gazspIHdrc0RlZmluZSh3ZWxsS25vd25TeW1ib2xzW2srK10pO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFVU0VfTkFUSVZFLCAnU3ltYm9sJywge1xuICAvLyAxOS40LjIuMSBTeW1ib2wuZm9yKGtleSlcbiAgJ2Zvcic6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICByZXR1cm4gaGFzKFN5bWJvbFJlZ2lzdHJ5LCBrZXkgKz0gJycpXG4gICAgICA/IFN5bWJvbFJlZ2lzdHJ5W2tleV1cbiAgICAgIDogU3ltYm9sUmVnaXN0cnlba2V5XSA9ICRTeW1ib2woa2V5KTtcbiAgfSxcbiAgLy8gMTkuNC4yLjUgU3ltYm9sLmtleUZvcihzeW0pXG4gIGtleUZvcjogZnVuY3Rpb24ga2V5Rm9yKHN5bSkge1xuICAgIGlmICghaXNTeW1ib2woc3ltKSkgdGhyb3cgVHlwZUVycm9yKHN5bSArICcgaXMgbm90IGEgc3ltYm9sIScpO1xuICAgIGZvciAodmFyIGtleSBpbiBTeW1ib2xSZWdpc3RyeSkgaWYgKFN5bWJvbFJlZ2lzdHJ5W2tleV0gPT09IHN5bSkgcmV0dXJuIGtleTtcbiAgfSxcbiAgdXNlU2V0dGVyOiBmdW5jdGlvbiAoKSB7IHNldHRlciA9IHRydWU7IH0sXG4gIHVzZVNpbXBsZTogZnVuY3Rpb24gKCkgeyBzZXR0ZXIgPSBmYWxzZTsgfVxufSk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsICdPYmplY3QnLCB7XG4gIC8vIDE5LjEuMi4yIE9iamVjdC5jcmVhdGUoTyBbLCBQcm9wZXJ0aWVzXSlcbiAgY3JlYXRlOiAkY3JlYXRlLFxuICAvLyAxOS4xLjIuNCBPYmplY3QuZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcylcbiAgZGVmaW5lUHJvcGVydHk6ICRkZWZpbmVQcm9wZXJ0eSxcbiAgLy8gMTkuMS4yLjMgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTywgUHJvcGVydGllcylcbiAgZGVmaW5lUHJvcGVydGllczogJGRlZmluZVByb3BlcnRpZXMsXG4gIC8vIDE5LjEuMi42IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUClcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLFxuICAvLyAxOS4xLjIuNyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhPKVxuICBnZXRPd25Qcm9wZXJ0eU5hbWVzOiAkZ2V0T3duUHJvcGVydHlOYW1lcyxcbiAgLy8gMTkuMS4yLjggT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhPKVxuICBnZXRPd25Qcm9wZXJ0eVN5bWJvbHM6ICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHNcbn0pO1xuXG4vLyBDaHJvbWUgMzggYW5kIDM5IGBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzYCBmYWlscyBvbiBwcmltaXRpdmVzXG4vLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zNDQzXG52YXIgRkFJTFNfT05fUFJJTUlUSVZFUyA9ICRmYWlscyhmdW5jdGlvbiAoKSB7ICRHT1BTLmYoMSk7IH0pO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIEZBSUxTX09OX1BSSU1JVElWRVMsICdPYmplY3QnLCB7XG4gIGdldE93blByb3BlcnR5U3ltYm9sczogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlTeW1ib2xzKGl0KSB7XG4gICAgcmV0dXJuICRHT1BTLmYodG9PYmplY3QoaXQpKTtcbiAgfVxufSk7XG5cbi8vIDI0LjMuMiBKU09OLnN0cmluZ2lmeSh2YWx1ZSBbLCByZXBsYWNlciBbLCBzcGFjZV1dKVxuJEpTT04gJiYgJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAoIVVTRV9OQVRJVkUgfHwgJGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIFMgPSAkU3ltYm9sKCk7XG4gIC8vIE1TIEVkZ2UgY29udmVydHMgc3ltYm9sIHZhbHVlcyB0byBKU09OIGFzIHt9XG4gIC8vIFdlYktpdCBjb252ZXJ0cyBzeW1ib2wgdmFsdWVzIHRvIEpTT04gYXMgbnVsbFxuICAvLyBWOCB0aHJvd3Mgb24gYm94ZWQgc3ltYm9sc1xuICByZXR1cm4gX3N0cmluZ2lmeShbU10pICE9ICdbbnVsbF0nIHx8IF9zdHJpbmdpZnkoeyBhOiBTIH0pICE9ICd7fScgfHwgX3N0cmluZ2lmeShPYmplY3QoUykpICE9ICd7fSc7XG59KSksICdKU09OJywge1xuICBzdHJpbmdpZnk6IGZ1bmN0aW9uIHN0cmluZ2lmeShpdCkge1xuICAgIHZhciBhcmdzID0gW2l0XTtcbiAgICB2YXIgaSA9IDE7XG4gICAgdmFyIHJlcGxhY2VyLCAkcmVwbGFjZXI7XG4gICAgd2hpbGUgKGFyZ3VtZW50cy5sZW5ndGggPiBpKSBhcmdzLnB1c2goYXJndW1lbnRzW2krK10pO1xuICAgICRyZXBsYWNlciA9IHJlcGxhY2VyID0gYXJnc1sxXTtcbiAgICBpZiAoIWlzT2JqZWN0KHJlcGxhY2VyKSAmJiBpdCA9PT0gdW5kZWZpbmVkIHx8IGlzU3ltYm9sKGl0KSkgcmV0dXJuOyAvLyBJRTggcmV0dXJucyBzdHJpbmcgb24gdW5kZWZpbmVkXG4gICAgaWYgKCFpc0FycmF5KHJlcGxhY2VyKSkgcmVwbGFjZXIgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgICAgaWYgKHR5cGVvZiAkcmVwbGFjZXIgPT0gJ2Z1bmN0aW9uJykgdmFsdWUgPSAkcmVwbGFjZXIuY2FsbCh0aGlzLCBrZXksIHZhbHVlKTtcbiAgICAgIGlmICghaXNTeW1ib2wodmFsdWUpKSByZXR1cm4gdmFsdWU7XG4gICAgfTtcbiAgICBhcmdzWzFdID0gcmVwbGFjZXI7XG4gICAgcmV0dXJuIF9zdHJpbmdpZnkuYXBwbHkoJEpTT04sIGFyZ3MpO1xuICB9XG59KTtcblxuLy8gMTkuNC4zLjQgU3ltYm9sLnByb3RvdHlwZVtAQHRvUHJpbWl0aXZlXShoaW50KVxuJFN5bWJvbFtQUk9UT1RZUEVdW1RPX1BSSU1JVElWRV0gfHwgcmVxdWlyZSgnLi9faGlkZScpKCRTeW1ib2xbUFJPVE9UWVBFXSwgVE9fUFJJTUlUSVZFLCAkU3ltYm9sW1BST1RPVFlQRV0udmFsdWVPZik7XG4vLyAxOS40LjMuNSBTeW1ib2wucHJvdG90eXBlW0BAdG9TdHJpbmdUYWddXG5zZXRUb1N0cmluZ1RhZygkU3ltYm9sLCAnU3ltYm9sJyk7XG4vLyAyMC4yLjEuOSBNYXRoW0BAdG9TdHJpbmdUYWddXG5zZXRUb1N0cmluZ1RhZyhNYXRoLCAnTWF0aCcsIHRydWUpO1xuLy8gMjQuMy4zIEpTT05bQEB0b1N0cmluZ1RhZ11cbnNldFRvU3RyaW5nVGFnKGdsb2JhbC5KU09OLCAnSlNPTicsIHRydWUpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///133\n")},function(module,exports,__webpack_require__){eval("module.exports = __webpack_require__(47)('native-function-to-string', Function.toString);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZnVuY3Rpb24tdG8tc3RyaW5nLmpzP2ZhNWIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsaUJBQWlCLG1CQUFPLENBQUMsRUFBVyIsImZpbGUiOiIxMzQuanMiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX3NoYXJlZCcpKCduYXRpdmUtZnVuY3Rpb24tdG8tc3RyaW5nJywgRnVuY3Rpb24udG9TdHJpbmcpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///134\n")},function(module,exports,__webpack_require__){eval("// all enumerable object keys, includes symbols\nvar getKeys = __webpack_require__(34);\nvar gOPS = __webpack_require__(53);\nvar pIE = __webpack_require__(49);\nmodule.exports = function (it) {\n var result = getKeys(it);\n var getSymbols = gOPS.f;\n if (getSymbols) {\n var symbols = getSymbols(it);\n var isEnum = pIE.f;\n var i = 0;\n var key;\n while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);\n } return result;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZW51bS1rZXlzLmpzP2Q0YzAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsRUFBZ0I7QUFDdEMsV0FBVyxtQkFBTyxDQUFDLEVBQWdCO0FBQ25DLFVBQVUsbUJBQU8sQ0FBQyxFQUFlO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCIsImZpbGUiOiIxMzUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBhbGwgZW51bWVyYWJsZSBvYmplY3Qga2V5cywgaW5jbHVkZXMgc3ltYm9sc1xudmFyIGdldEtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xudmFyIGdPUFMgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wcycpO1xudmFyIHBJRSA9IHJlcXVpcmUoJy4vX29iamVjdC1waWUnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciByZXN1bHQgPSBnZXRLZXlzKGl0KTtcbiAgdmFyIGdldFN5bWJvbHMgPSBnT1BTLmY7XG4gIGlmIChnZXRTeW1ib2xzKSB7XG4gICAgdmFyIHN5bWJvbHMgPSBnZXRTeW1ib2xzKGl0KTtcbiAgICB2YXIgaXNFbnVtID0gcElFLmY7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBrZXk7XG4gICAgd2hpbGUgKHN5bWJvbHMubGVuZ3RoID4gaSkgaWYgKGlzRW51bS5jYWxsKGl0LCBrZXkgPSBzeW1ib2xzW2krK10pKSByZXN1bHQucHVzaChrZXkpO1xuICB9IHJldHVybiByZXN1bHQ7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///135\n")},function(module,exports,__webpack_require__){eval("var $export = __webpack_require__(0);\n// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\n$export($export.S, 'Object', { create: __webpack_require__(36) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmNyZWF0ZS5qcz84NDc4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDO0FBQ0EsOEJBQThCLFNBQVMsbUJBQU8sQ0FBQyxFQUFrQixHQUFHIiwiZmlsZSI6IjEzNi5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG4vLyAxOS4xLjIuMiAvIDE1LjIuMy41IE9iamVjdC5jcmVhdGUoTyBbLCBQcm9wZXJ0aWVzXSlcbiRleHBvcnQoJGV4cG9ydC5TLCAnT2JqZWN0JywgeyBjcmVhdGU6IHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKSB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///136\n")},function(module,exports,__webpack_require__){eval("var $export = __webpack_require__(0);\n// 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes)\n$export($export.S + $export.F * !__webpack_require__(7), 'Object', { defineProperty: __webpack_require__(8).f });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmRlZmluZS1wcm9wZXJ0eS5qcz8xYzAxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDO0FBQ0EsaUNBQWlDLG1CQUFPLENBQUMsQ0FBZ0IsY0FBYyxpQkFBaUIsbUJBQU8sQ0FBQyxDQUFjLEtBQUsiLCJmaWxlIjoiMTM3LmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbi8vIDE5LjEuMi40IC8gMTUuMi4zLjYgT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpLCAnT2JqZWN0JywgeyBkZWZpbmVQcm9wZXJ0eTogcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZiB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///137\n")},function(module,exports,__webpack_require__){eval("var $export = __webpack_require__(0);\n// 19.1.2.3 / 15.2.3.7 Object.defineProperties(O, Properties)\n$export($export.S + $export.F * !__webpack_require__(7), 'Object', { defineProperties: __webpack_require__(97) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmRlZmluZS1wcm9wZXJ0aWVzLmpzPzU4YjIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakM7QUFDQSxpQ0FBaUMsbUJBQU8sQ0FBQyxDQUFnQixjQUFjLG1CQUFtQixtQkFBTyxDQUFDLEVBQWUsR0FBRyIsImZpbGUiOiIxMzguanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuLy8gMTkuMS4yLjMgLyAxNS4yLjMuNyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhPLCBQcm9wZXJ0aWVzKVxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSwgJ09iamVjdCcsIHsgZGVmaW5lUHJvcGVydGllczogcmVxdWlyZSgnLi9fb2JqZWN0LWRwcycpIH0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///138\n")},function(module,exports,__webpack_require__){eval("// 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\nvar toIObject = __webpack_require__(15);\nvar $getOwnPropertyDescriptor = __webpack_require__(16).f;\n\n__webpack_require__(25)('getOwnPropertyDescriptor', function () {\n return function getOwnPropertyDescriptor(it, key) {\n return $getOwnPropertyDescriptor(toIObject(it), key);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvci5qcz85OTg2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2QyxnQ0FBZ0MsbUJBQU8sQ0FBQyxFQUFnQjs7QUFFeEQsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTM5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMTkuMS4yLjYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKVxudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKS5mO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2dldE93blByb3BlcnR5RGVzY3JpcHRvcicsIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihpdCwga2V5KSB7XG4gICAgcmV0dXJuICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodG9JT2JqZWN0KGl0KSwga2V5KTtcbiAgfTtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///139\n")},function(module,exports,__webpack_require__){eval("// 19.1.2.9 Object.getPrototypeOf(O)\nvar toObject = __webpack_require__(9);\nvar $getPrototypeOf = __webpack_require__(17);\n\n__webpack_require__(25)('getPrototypeOf', function () {\n return function getPrototypeOf(it) {\n return $getPrototypeOf(toObject(it));\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmdldC1wcm90b3R5cGUtb2YuanM/ZTRmNyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLHNCQUFzQixtQkFBTyxDQUFDLEVBQWU7O0FBRTdDLG1CQUFPLENBQUMsRUFBZTtBQUN2QjtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjE0MC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDE5LjEuMi45IE9iamVjdC5nZXRQcm90b3R5cGVPZihPKVxudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgJGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2dldFByb3RvdHlwZU9mJywgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gZnVuY3Rpb24gZ2V0UHJvdG90eXBlT2YoaXQpIHtcbiAgICByZXR1cm4gJGdldFByb3RvdHlwZU9mKHRvT2JqZWN0KGl0KSk7XG4gIH07XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///140\n")},function(module,exports,__webpack_require__){eval("// 19.1.2.14 Object.keys(O)\nvar toObject = __webpack_require__(9);\nvar $keys = __webpack_require__(34);\n\n__webpack_require__(25)('keys', function () {\n return function keys(it) {\n return $keys(toObject(it));\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmtleXMuanM/NDU2ZCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLFlBQVksbUJBQU8sQ0FBQyxFQUFnQjs7QUFFcEMsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTQxLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMTkuMS4yLjE0IE9iamVjdC5rZXlzKE8pXG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciAka2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgna2V5cycsIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGtleXMoaXQpIHtcbiAgICByZXR1cm4gJGtleXModG9PYmplY3QoaXQpKTtcbiAgfTtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///141\n")},function(module,exports,__webpack_require__){eval("// 19.1.2.7 Object.getOwnPropertyNames(O)\n__webpack_require__(25)('getOwnPropertyNames', function () {\n return __webpack_require__(98).f;\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmdldC1vd24tcHJvcGVydHktbmFtZXMuanM/MjVkYiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLG1CQUFPLENBQUMsRUFBZTtBQUN2QixTQUFTLG1CQUFPLENBQUMsRUFBb0I7QUFDckMsQ0FBQyIsImZpbGUiOiIxNDIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAxOS4xLjIuNyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhPKVxucmVxdWlyZSgnLi9fb2JqZWN0LXNhcCcpKCdnZXRPd25Qcm9wZXJ0eU5hbWVzJywgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4tZXh0JykuZjtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///142\n")},function(module,exports,__webpack_require__){eval("// 19.1.2.5 Object.freeze(O)\nvar isObject = __webpack_require__(4);\nvar meta = __webpack_require__(30).onFreeze;\n\n__webpack_require__(25)('freeze', function ($freeze) {\n return function freeze(it) {\n return $freeze && isObject(it) ? $freeze(meta(it)) : it;\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmZyZWV6ZS5qcz8wZDZkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsV0FBVyxtQkFBTyxDQUFDLEVBQVM7O0FBRTVCLG1CQUFPLENBQUMsRUFBZTtBQUN2QjtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjE0My5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDE5LjEuMi41IE9iamVjdC5mcmVlemUoTylcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIG1ldGEgPSByZXF1aXJlKCcuL19tZXRhJykub25GcmVlemU7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgnZnJlZXplJywgZnVuY3Rpb24gKCRmcmVlemUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGZyZWV6ZShpdCkge1xuICAgIHJldHVybiAkZnJlZXplICYmIGlzT2JqZWN0KGl0KSA/ICRmcmVlemUobWV0YShpdCkpIDogaXQ7XG4gIH07XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///143\n")},function(module,exports,__webpack_require__){eval("// 19.1.2.17 Object.seal(O)\nvar isObject = __webpack_require__(4);\nvar meta = __webpack_require__(30).onFreeze;\n\n__webpack_require__(25)('seal', function ($seal) {\n return function seal(it) {\n return $seal && isObject(it) ? $seal(meta(it)) : it;\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LnNlYWwuanM/Y2Y2YSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLFdBQVcsbUJBQU8sQ0FBQyxFQUFTOztBQUU1QixtQkFBTyxDQUFDLEVBQWU7QUFDdkI7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIxNDQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAxOS4xLjIuMTcgT2JqZWN0LnNlYWwoTylcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIG1ldGEgPSByZXF1aXJlKCcuL19tZXRhJykub25GcmVlemU7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgnc2VhbCcsIGZ1bmN0aW9uICgkc2VhbCkge1xuICByZXR1cm4gZnVuY3Rpb24gc2VhbChpdCkge1xuICAgIHJldHVybiAkc2VhbCAmJiBpc09iamVjdChpdCkgPyAkc2VhbChtZXRhKGl0KSkgOiBpdDtcbiAgfTtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///144\n")},function(module,exports,__webpack_require__){eval("// 19.1.2.15 Object.preventExtensions(O)\nvar isObject = __webpack_require__(4);\nvar meta = __webpack_require__(30).onFreeze;\n\n__webpack_require__(25)('preventExtensions', function ($preventExtensions) {\n return function preventExtensions(it) {\n return $preventExtensions && isObject(it) ? $preventExtensions(meta(it)) : it;\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LnByZXZlbnQtZXh0ZW5zaW9ucy5qcz85YWVhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsV0FBVyxtQkFBTyxDQUFDLEVBQVM7O0FBRTVCLG1CQUFPLENBQUMsRUFBZTtBQUN2QjtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjE0NS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDE5LjEuMi4xNSBPYmplY3QucHJldmVudEV4dGVuc2lvbnMoTylcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIG1ldGEgPSByZXF1aXJlKCcuL19tZXRhJykub25GcmVlemU7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgncHJldmVudEV4dGVuc2lvbnMnLCBmdW5jdGlvbiAoJHByZXZlbnRFeHRlbnNpb25zKSB7XG4gIHJldHVybiBmdW5jdGlvbiBwcmV2ZW50RXh0ZW5zaW9ucyhpdCkge1xuICAgIHJldHVybiAkcHJldmVudEV4dGVuc2lvbnMgJiYgaXNPYmplY3QoaXQpID8gJHByZXZlbnRFeHRlbnNpb25zKG1ldGEoaXQpKSA6IGl0O1xuICB9O1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///145\n")},function(module,exports,__webpack_require__){eval("// 19.1.2.12 Object.isFrozen(O)\nvar isObject = __webpack_require__(4);\n\n__webpack_require__(25)('isFrozen', function ($isFrozen) {\n return function isFrozen(it) {\n return isObject(it) ? $isFrozen ? $isFrozen(it) : false : true;\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmlzLWZyb3plbi5qcz82NmM4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsZUFBZSxtQkFBTyxDQUFDLENBQWM7O0FBRXJDLG1CQUFPLENBQUMsRUFBZTtBQUN2QjtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjE0Ni5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDE5LjEuMi4xMiBPYmplY3QuaXNGcm96ZW4oTylcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2lzRnJvemVuJywgZnVuY3Rpb24gKCRpc0Zyb3plbikge1xuICByZXR1cm4gZnVuY3Rpb24gaXNGcm96ZW4oaXQpIHtcbiAgICByZXR1cm4gaXNPYmplY3QoaXQpID8gJGlzRnJvemVuID8gJGlzRnJvemVuKGl0KSA6IGZhbHNlIDogdHJ1ZTtcbiAgfTtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///146\n")},function(module,exports,__webpack_require__){eval("// 19.1.2.13 Object.isSealed(O)\nvar isObject = __webpack_require__(4);\n\n__webpack_require__(25)('isSealed', function ($isSealed) {\n return function isSealed(it) {\n return isObject(it) ? $isSealed ? $isSealed(it) : false : true;\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmlzLXNlYWxlZC5qcz81N2YwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsZUFBZSxtQkFBTyxDQUFDLENBQWM7O0FBRXJDLG1CQUFPLENBQUMsRUFBZTtBQUN2QjtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjE0Ny5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDE5LjEuMi4xMyBPYmplY3QuaXNTZWFsZWQoTylcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2lzU2VhbGVkJywgZnVuY3Rpb24gKCRpc1NlYWxlZCkge1xuICByZXR1cm4gZnVuY3Rpb24gaXNTZWFsZWQoaXQpIHtcbiAgICByZXR1cm4gaXNPYmplY3QoaXQpID8gJGlzU2VhbGVkID8gJGlzU2VhbGVkKGl0KSA6IGZhbHNlIDogdHJ1ZTtcbiAgfTtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///147\n")},function(module,exports,__webpack_require__){eval("// 19.1.2.11 Object.isExtensible(O)\nvar isObject = __webpack_require__(4);\n\n__webpack_require__(25)('isExtensible', function ($isExtensible) {\n return function isExtensible(it) {\n return isObject(it) ? $isExtensible ? $isExtensible(it) : true : false;\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmlzLWV4dGVuc2libGUuanM/MTY1YiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGVBQWUsbUJBQU8sQ0FBQyxDQUFjOztBQUVyQyxtQkFBTyxDQUFDLEVBQWU7QUFDdkI7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIxNDguanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAxOS4xLjIuMTEgT2JqZWN0LmlzRXh0ZW5zaWJsZShPKVxudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgnaXNFeHRlbnNpYmxlJywgZnVuY3Rpb24gKCRpc0V4dGVuc2libGUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGlzRXh0ZW5zaWJsZShpdCkge1xuICAgIHJldHVybiBpc09iamVjdChpdCkgPyAkaXNFeHRlbnNpYmxlID8gJGlzRXh0ZW5zaWJsZShpdCkgOiB0cnVlIDogZmFsc2U7XG4gIH07XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///148\n")},function(module,exports,__webpack_require__){eval("// 19.1.3.1 Object.assign(target, source)\nvar $export = __webpack_require__(0);\n\n$export($export.S + $export.F, 'Object', { assign: __webpack_require__(99) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmFzc2lnbi5qcz9mNzUxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDLDBDQUEwQyxTQUFTLG1CQUFPLENBQUMsRUFBa0IsR0FBRyIsImZpbGUiOiIxNDkuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAxOS4xLjMuMSBPYmplY3QuYXNzaWduKHRhcmdldCwgc291cmNlKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYsICdPYmplY3QnLCB7IGFzc2lnbjogcmVxdWlyZSgnLi9fb2JqZWN0LWFzc2lnbicpIH0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///149\n")},function(module,exports,__webpack_require__){eval("// 19.1.3.10 Object.is(value1, value2)\nvar $export = __webpack_require__(0);\n$export($export.S, 'Object', { is: __webpack_require__(100) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmlzLmpzP2RiOTciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyw4QkFBOEIsS0FBSyxtQkFBTyxDQUFDLEdBQWUsR0FBRyIsImZpbGUiOiIxNTAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAxOS4xLjMuMTAgT2JqZWN0LmlzKHZhbHVlMSwgdmFsdWUyKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbiRleHBvcnQoJGV4cG9ydC5TLCAnT2JqZWN0JywgeyBpczogcmVxdWlyZSgnLi9fc2FtZS12YWx1ZScpIH0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///150\n")},function(module,exports,__webpack_require__){eval("// 19.1.3.19 Object.setPrototypeOf(O, proto)\nvar $export = __webpack_require__(0);\n$export($export.S, 'Object', { setPrototypeOf: __webpack_require__(71).set });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LnNldC1wcm90b3R5cGUtb2YuanM/ZmQyNCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLDhCQUE4QixpQkFBaUIsbUJBQU8sQ0FBQyxFQUFjLE9BQU8iLCJmaWxlIjoiMTUxLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMTkuMS4zLjE5IE9iamVjdC5zZXRQcm90b3R5cGVPZihPLCBwcm90bylcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG4kZXhwb3J0KCRleHBvcnQuUywgJ09iamVjdCcsIHsgc2V0UHJvdG90eXBlT2Y6IHJlcXVpcmUoJy4vX3NldC1wcm90bycpLnNldCB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///151\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// 19.1.3.6 Object.prototype.toString()\nvar classof = __webpack_require__(44);\nvar test = {};\ntest[__webpack_require__(5)('toStringTag')] = 'z';\nif (test + '' != '[object z]') {\n __webpack_require__(12)(Object.prototype, 'toString', function toString() {\n return '[object ' + classof(this) + ']';\n }, true);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LnRvLXN0cmluZy5qcz8wNmRiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxjQUFjLG1CQUFPLENBQUMsRUFBWTtBQUNsQztBQUNBLEtBQUssbUJBQU8sQ0FBQyxDQUFRO0FBQ3JCO0FBQ0EsRUFBRSxtQkFBTyxDQUFDLEVBQWE7QUFDdkI7QUFDQSxHQUFHO0FBQ0giLCJmaWxlIjoiMTUyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gMTkuMS4zLjYgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZygpXG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4vX2NsYXNzb2YnKTtcbnZhciB0ZXN0ID0ge307XG50ZXN0W3JlcXVpcmUoJy4vX3drcycpKCd0b1N0cmluZ1RhZycpXSA9ICd6JztcbmlmICh0ZXN0ICsgJycgIT0gJ1tvYmplY3Qgel0nKSB7XG4gIHJlcXVpcmUoJy4vX3JlZGVmaW5lJykoT2JqZWN0LnByb3RvdHlwZSwgJ3RvU3RyaW5nJywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuICdbb2JqZWN0ICcgKyBjbGFzc29mKHRoaXMpICsgJ10nO1xuICB9LCB0cnVlKTtcbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///152\n")},function(module,exports,__webpack_require__){eval("// 19.2.3.2 / 15.3.4.5 Function.prototype.bind(thisArg, args...)\nvar $export = __webpack_require__(0);\n\n$export($export.P, 'Function', { bind: __webpack_require__(101) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZnVuY3Rpb24uYmluZC5qcz9kOTJhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDLGdDQUFnQyxPQUFPLG1CQUFPLENBQUMsR0FBUyxHQUFHIiwiZmlsZSI6IjE1My5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDE5LjIuMy4yIC8gMTUuMy40LjUgRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQodGhpc0FyZywgYXJncy4uLilcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QLCAnRnVuY3Rpb24nLCB7IGJpbmQ6IHJlcXVpcmUoJy4vX2JpbmQnKSB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///153\n")},function(module,exports,__webpack_require__){eval("var dP = __webpack_require__(8).f;\nvar FProto = Function.prototype;\nvar nameRE = /^\\s*function ([^ (]*)/;\nvar NAME = 'name';\n\n// 19.2.4.2 name\nNAME in FProto || __webpack_require__(7) && dP(FProto, NAME, {\n configurable: true,\n get: function () {\n try {\n return ('' + this).match(nameRE)[1];\n } catch (e) {\n return '';\n }\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZnVuY3Rpb24ubmFtZS5qcz83ZjdmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFNBQVMsbUJBQU8sQ0FBQyxDQUFjO0FBQy9CO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGtCQUFrQixtQkFBTyxDQUFDLENBQWdCO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTU0LmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbnZhciBGUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGU7XG52YXIgbmFtZVJFID0gL15cXHMqZnVuY3Rpb24gKFteIChdKikvO1xudmFyIE5BTUUgPSAnbmFtZSc7XG5cbi8vIDE5LjIuNC4yIG5hbWVcbk5BTUUgaW4gRlByb3RvIHx8IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgZFAoRlByb3RvLCBOQU1FLCB7XG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiAoJycgKyB0aGlzKS5tYXRjaChuYW1lUkUpWzFdO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///154\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar isObject = __webpack_require__(4);\nvar getPrototypeOf = __webpack_require__(17);\nvar HAS_INSTANCE = __webpack_require__(5)('hasInstance');\nvar FunctionProto = Function.prototype;\n// 19.2.3.6 Function.prototype[@@hasInstance](V)\nif (!(HAS_INSTANCE in FunctionProto)) __webpack_require__(8).f(FunctionProto, HAS_INSTANCE, { value: function (O) {\n if (typeof this != 'function' || !isObject(O)) return false;\n if (!isObject(this.prototype)) return O instanceof this;\n // for environment w/o native `@@hasInstance` logic enough `instanceof`, but add this:\n while (O = getPrototypeOf(O)) if (this.prototype === O) return true;\n return false;\n} });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZnVuY3Rpb24uaGFzLWluc3RhbmNlLmpzPzIxN2IiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxxQkFBcUIsbUJBQU8sQ0FBQyxFQUFlO0FBQzVDLG1CQUFtQixtQkFBTyxDQUFDLENBQVE7QUFDbkM7QUFDQTtBQUNBLHNDQUFzQyxtQkFBTyxDQUFDLENBQWMsa0NBQWtDO0FBQzlGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLEVBQUUiLCJmaWxlIjoiMTU1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgSEFTX0lOU1RBTkNFID0gcmVxdWlyZSgnLi9fd2tzJykoJ2hhc0luc3RhbmNlJyk7XG52YXIgRnVuY3Rpb25Qcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbi8vIDE5LjIuMy42IEZ1bmN0aW9uLnByb3RvdHlwZVtAQGhhc0luc3RhbmNlXShWKVxuaWYgKCEoSEFTX0lOU1RBTkNFIGluIEZ1bmN0aW9uUHJvdG8pKSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mKEZ1bmN0aW9uUHJvdG8sIEhBU19JTlNUQU5DRSwgeyB2YWx1ZTogZnVuY3Rpb24gKE8pIHtcbiAgaWYgKHR5cGVvZiB0aGlzICE9ICdmdW5jdGlvbicgfHwgIWlzT2JqZWN0KE8pKSByZXR1cm4gZmFsc2U7XG4gIGlmICghaXNPYmplY3QodGhpcy5wcm90b3R5cGUpKSByZXR1cm4gTyBpbnN0YW5jZW9mIHRoaXM7XG4gIC8vIGZvciBlbnZpcm9ubWVudCB3L28gbmF0aXZlIGBAQGhhc0luc3RhbmNlYCBsb2dpYyBlbm91Z2ggYGluc3RhbmNlb2ZgLCBidXQgYWRkIHRoaXM6XG4gIHdoaWxlIChPID0gZ2V0UHJvdG90eXBlT2YoTykpIGlmICh0aGlzLnByb3RvdHlwZSA9PT0gTykgcmV0dXJuIHRydWU7XG4gIHJldHVybiBmYWxzZTtcbn0gfSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///155\n")},function(module,exports,__webpack_require__){eval("var $export = __webpack_require__(0);\nvar $parseInt = __webpack_require__(103);\n// 18.2.5 parseInt(string, radix)\n$export($export.G + $export.F * (parseInt != $parseInt), { parseInt: $parseInt });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucGFyc2UtaW50LmpzPzE4ZDAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsZ0JBQWdCLG1CQUFPLENBQUMsR0FBYztBQUN0QztBQUNBLDBEQUEwRCxzQkFBc0IiLCJmaWxlIjoiMTU2LmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkcGFyc2VJbnQgPSByZXF1aXJlKCcuL19wYXJzZS1pbnQnKTtcbi8vIDE4LjIuNSBwYXJzZUludChzdHJpbmcsIHJhZGl4KVxuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LkYgKiAocGFyc2VJbnQgIT0gJHBhcnNlSW50KSwgeyBwYXJzZUludDogJHBhcnNlSW50IH0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///156\n")},function(module,exports,__webpack_require__){eval("var $export = __webpack_require__(0);\nvar $parseFloat = __webpack_require__(104);\n// 18.2.4 parseFloat(string)\n$export($export.G + $export.F * (parseFloat != $parseFloat), { parseFloat: $parseFloat });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucGFyc2UtZmxvYXQuanM/YjcyYyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxrQkFBa0IsbUJBQU8sQ0FBQyxHQUFnQjtBQUMxQztBQUNBLDhEQUE4RCwwQkFBMEIiLCJmaWxlIjoiMTU3LmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkcGFyc2VGbG9hdCA9IHJlcXVpcmUoJy4vX3BhcnNlLWZsb2F0Jyk7XG4vLyAxOC4yLjQgcGFyc2VGbG9hdChzdHJpbmcpXG4kZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuRiAqIChwYXJzZUZsb2F0ICE9ICRwYXJzZUZsb2F0KSwgeyBwYXJzZUZsb2F0OiAkcGFyc2VGbG9hdCB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///157\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar global = __webpack_require__(2);\nvar has = __webpack_require__(14);\nvar cof = __webpack_require__(20);\nvar inheritIfRequired = __webpack_require__(73);\nvar toPrimitive = __webpack_require__(23);\nvar fails = __webpack_require__(3);\nvar gOPN = __webpack_require__(37).f;\nvar gOPD = __webpack_require__(16).f;\nvar dP = __webpack_require__(8).f;\nvar $trim = __webpack_require__(45).trim;\nvar NUMBER = 'Number';\nvar $Number = global[NUMBER];\nvar Base = $Number;\nvar proto = $Number.prototype;\n// Opera ~12 has broken Object#toString\nvar BROKEN_COF = cof(__webpack_require__(36)(proto)) == NUMBER;\nvar TRIM = 'trim' in String.prototype;\n\n// 7.1.3 ToNumber(argument)\nvar toNumber = function (argument) {\n var it = toPrimitive(argument, false);\n if (typeof it == 'string' && it.length > 2) {\n it = TRIM ? it.trim() : $trim(it, 3);\n var first = it.charCodeAt(0);\n var third, radix, maxCode;\n if (first === 43 || first === 45) {\n third = it.charCodeAt(2);\n if (third === 88 || third === 120) return NaN; // Number('+0x1') should be NaN, old V8 fix\n } else if (first === 48) {\n switch (it.charCodeAt(1)) {\n case 66: case 98: radix = 2; maxCode = 49; break; // fast equal /^0b[01]+$/i\n case 79: case 111: radix = 8; maxCode = 55; break; // fast equal /^0o[0-7]+$/i\n default: return +it;\n }\n for (var digits = it.slice(2), i = 0, l = digits.length, code; i < l; i++) {\n code = digits.charCodeAt(i);\n // parseInt parses a string to a first unavailable symbol\n // but ToNumber should return NaN if a string contains unavailable symbols\n if (code < 48 || code > maxCode) return NaN;\n } return parseInt(digits, radix);\n }\n } return +it;\n};\n\nif (!$Number(' 0o1') || !$Number('0b1') || $Number('+0x1')) {\n $Number = function Number(value) {\n var it = arguments.length < 1 ? 0 : value;\n var that = this;\n return that instanceof $Number\n // check on 1..constructor(foo) case\n && (BROKEN_COF ? fails(function () { proto.valueOf.call(that); }) : cof(that) != NUMBER)\n ? inheritIfRequired(new Base(toNumber(it)), that, $Number) : toNumber(it);\n };\n for (var keys = __webpack_require__(7) ? gOPN(Base) : (\n // ES3:\n 'MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,' +\n // ES6 (in case, if modules with ES6 Number statics required before):\n 'EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,' +\n 'MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger'\n ).split(','), j = 0, key; keys.length > j; j++) {\n if (has(Base, key = keys[j]) && !has($Number, key)) {\n dP($Number, key, gOPD(Base, key));\n }\n }\n $Number.prototype = proto;\n proto.constructor = $Number;\n __webpack_require__(12)(global, NUMBER, $Number);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLmNvbnN0cnVjdG9yLmpzP2M1ZjYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixhQUFhLG1CQUFPLENBQUMsQ0FBVztBQUNoQyxVQUFVLG1CQUFPLENBQUMsRUFBUTtBQUMxQixVQUFVLG1CQUFPLENBQUMsRUFBUTtBQUMxQix3QkFBd0IsbUJBQU8sQ0FBQyxFQUF3QjtBQUN4RCxrQkFBa0IsbUJBQU8sQ0FBQyxFQUFpQjtBQUMzQyxZQUFZLG1CQUFPLENBQUMsQ0FBVTtBQUM5QixXQUFXLG1CQUFPLENBQUMsRUFBZ0I7QUFDbkMsV0FBVyxtQkFBTyxDQUFDLEVBQWdCO0FBQ25DLFNBQVMsbUJBQU8sQ0FBQyxDQUFjO0FBQy9CLFlBQVksbUJBQU8sQ0FBQyxFQUFnQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLG1CQUFPLENBQUMsRUFBa0I7QUFDL0M7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0RBQW9EO0FBQ3BELEtBQUs7QUFDTDtBQUNBLG9DQUFvQyxjQUFjLE9BQU87QUFDekQscUNBQXFDLGNBQWMsT0FBTztBQUMxRDtBQUNBO0FBQ0Esb0VBQW9FLE9BQU87QUFDM0U7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMENBQTBDLDBCQUEwQixFQUFFO0FBQ3RFO0FBQ0E7QUFDQSxrQkFBa0IsbUJBQU8sQ0FBQyxDQUFnQjtBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCLGlCQUFpQjtBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLG1CQUFPLENBQUMsRUFBYTtBQUN2QiIsImZpbGUiOiIxNTguanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG52YXIgaW5oZXJpdElmUmVxdWlyZWQgPSByZXF1aXJlKCcuL19pbmhlcml0LWlmLXJlcXVpcmVkJyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgZ09QTiA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJykuZjtcbnZhciBnT1BEID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKS5mO1xudmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbnZhciAkdHJpbSA9IHJlcXVpcmUoJy4vX3N0cmluZy10cmltJykudHJpbTtcbnZhciBOVU1CRVIgPSAnTnVtYmVyJztcbnZhciAkTnVtYmVyID0gZ2xvYmFsW05VTUJFUl07XG52YXIgQmFzZSA9ICROdW1iZXI7XG52YXIgcHJvdG8gPSAkTnVtYmVyLnByb3RvdHlwZTtcbi8vIE9wZXJhIH4xMiBoYXMgYnJva2VuIE9iamVjdCN0b1N0cmluZ1xudmFyIEJST0tFTl9DT0YgPSBjb2YocmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpKHByb3RvKSkgPT0gTlVNQkVSO1xudmFyIFRSSU0gPSAndHJpbScgaW4gU3RyaW5nLnByb3RvdHlwZTtcblxuLy8gNy4xLjMgVG9OdW1iZXIoYXJndW1lbnQpXG52YXIgdG9OdW1iZXIgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdmFyIGl0ID0gdG9QcmltaXRpdmUoYXJndW1lbnQsIGZhbHNlKTtcbiAgaWYgKHR5cGVvZiBpdCA9PSAnc3RyaW5nJyAmJiBpdC5sZW5ndGggPiAyKSB7XG4gICAgaXQgPSBUUklNID8gaXQudHJpbSgpIDogJHRyaW0oaXQsIDMpO1xuICAgIHZhciBmaXJzdCA9IGl0LmNoYXJDb2RlQXQoMCk7XG4gICAgdmFyIHRoaXJkLCByYWRpeCwgbWF4Q29kZTtcbiAgICBpZiAoZmlyc3QgPT09IDQzIHx8IGZpcnN0ID09PSA0NSkge1xuICAgICAgdGhpcmQgPSBpdC5jaGFyQ29kZUF0KDIpO1xuICAgICAgaWYgKHRoaXJkID09PSA4OCB8fCB0aGlyZCA9PT0gMTIwKSByZXR1cm4gTmFOOyAvLyBOdW1iZXIoJysweDEnKSBzaG91bGQgYmUgTmFOLCBvbGQgVjggZml4XG4gICAgfSBlbHNlIGlmIChmaXJzdCA9PT0gNDgpIHtcbiAgICAgIHN3aXRjaCAoaXQuY2hhckNvZGVBdCgxKSkge1xuICAgICAgICBjYXNlIDY2OiBjYXNlIDk4OiByYWRpeCA9IDI7IG1heENvZGUgPSA0OTsgYnJlYWs7IC8vIGZhc3QgZXF1YWwgL14wYlswMV0rJC9pXG4gICAgICAgIGNhc2UgNzk6IGNhc2UgMTExOiByYWRpeCA9IDg7IG1heENvZGUgPSA1NTsgYnJlYWs7IC8vIGZhc3QgZXF1YWwgL14wb1swLTddKyQvaVxuICAgICAgICBkZWZhdWx0OiByZXR1cm4gK2l0O1xuICAgICAgfVxuICAgICAgZm9yICh2YXIgZGlnaXRzID0gaXQuc2xpY2UoMiksIGkgPSAwLCBsID0gZGlnaXRzLmxlbmd0aCwgY29kZTsgaSA8IGw7IGkrKykge1xuICAgICAgICBjb2RlID0gZGlnaXRzLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIC8vIHBhcnNlSW50IHBhcnNlcyBhIHN0cmluZyB0byBhIGZpcnN0IHVuYXZhaWxhYmxlIHN5bWJvbFxuICAgICAgICAvLyBidXQgVG9OdW1iZXIgc2hvdWxkIHJldHVybiBOYU4gaWYgYSBzdHJpbmcgY29udGFpbnMgdW5hdmFpbGFibGUgc3ltYm9sc1xuICAgICAgICBpZiAoY29kZSA8IDQ4IHx8IGNvZGUgPiBtYXhDb2RlKSByZXR1cm4gTmFOO1xuICAgICAgfSByZXR1cm4gcGFyc2VJbnQoZGlnaXRzLCByYWRpeCk7XG4gICAgfVxuICB9IHJldHVybiAraXQ7XG59O1xuXG5pZiAoISROdW1iZXIoJyAwbzEnKSB8fCAhJE51bWJlcignMGIxJykgfHwgJE51bWJlcignKzB4MScpKSB7XG4gICROdW1iZXIgPSBmdW5jdGlvbiBOdW1iZXIodmFsdWUpIHtcbiAgICB2YXIgaXQgPSBhcmd1bWVudHMubGVuZ3RoIDwgMSA/IDAgOiB2YWx1ZTtcbiAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgcmV0dXJuIHRoYXQgaW5zdGFuY2VvZiAkTnVtYmVyXG4gICAgICAvLyBjaGVjayBvbiAxLi5jb25zdHJ1Y3Rvcihmb28pIGNhc2VcbiAgICAgICYmIChCUk9LRU5fQ09GID8gZmFpbHMoZnVuY3Rpb24gKCkgeyBwcm90by52YWx1ZU9mLmNhbGwodGhhdCk7IH0pIDogY29mKHRoYXQpICE9IE5VTUJFUilcbiAgICAgICAgPyBpbmhlcml0SWZSZXF1aXJlZChuZXcgQmFzZSh0b051bWJlcihpdCkpLCB0aGF0LCAkTnVtYmVyKSA6IHRvTnVtYmVyKGl0KTtcbiAgfTtcbiAgZm9yICh2YXIga2V5cyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBnT1BOKEJhc2UpIDogKFxuICAgIC8vIEVTMzpcbiAgICAnTUFYX1ZBTFVFLE1JTl9WQUxVRSxOYU4sTkVHQVRJVkVfSU5GSU5JVFksUE9TSVRJVkVfSU5GSU5JVFksJyArXG4gICAgLy8gRVM2IChpbiBjYXNlLCBpZiBtb2R1bGVzIHdpdGggRVM2IE51bWJlciBzdGF0aWNzIHJlcXVpcmVkIGJlZm9yZSk6XG4gICAgJ0VQU0lMT04saXNGaW5pdGUsaXNJbnRlZ2VyLGlzTmFOLGlzU2FmZUludGVnZXIsTUFYX1NBRkVfSU5URUdFUiwnICtcbiAgICAnTUlOX1NBRkVfSU5URUdFUixwYXJzZUZsb2F0LHBhcnNlSW50LGlzSW50ZWdlcidcbiAgKS5zcGxpdCgnLCcpLCBqID0gMCwga2V5OyBrZXlzLmxlbmd0aCA+IGo7IGorKykge1xuICAgIGlmIChoYXMoQmFzZSwga2V5ID0ga2V5c1tqXSkgJiYgIWhhcygkTnVtYmVyLCBrZXkpKSB7XG4gICAgICBkUCgkTnVtYmVyLCBrZXksIGdPUEQoQmFzZSwga2V5KSk7XG4gICAgfVxuICB9XG4gICROdW1iZXIucHJvdG90eXBlID0gcHJvdG87XG4gIHByb3RvLmNvbnN0cnVjdG9yID0gJE51bWJlcjtcbiAgcmVxdWlyZSgnLi9fcmVkZWZpbmUnKShnbG9iYWwsIE5VTUJFUiwgJE51bWJlcik7XG59XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///158\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar toInteger = __webpack_require__(21);\nvar aNumberValue = __webpack_require__(105);\nvar repeat = __webpack_require__(74);\nvar $toFixed = 1.0.toFixed;\nvar floor = Math.floor;\nvar data = [0, 0, 0, 0, 0, 0];\nvar ERROR = 'Number.toFixed: incorrect invocation!';\nvar ZERO = '0';\n\nvar multiply = function (n, c) {\n var i = -1;\n var c2 = c;\n while (++i < 6) {\n c2 += n * data[i];\n data[i] = c2 % 1e7;\n c2 = floor(c2 / 1e7);\n }\n};\nvar divide = function (n) {\n var i = 6;\n var c = 0;\n while (--i >= 0) {\n c += data[i];\n data[i] = floor(c / n);\n c = (c % n) * 1e7;\n }\n};\nvar numToString = function () {\n var i = 6;\n var s = '';\n while (--i >= 0) {\n if (s !== '' || i === 0 || data[i] !== 0) {\n var t = String(data[i]);\n s = s === '' ? t : s + repeat.call(ZERO, 7 - t.length) + t;\n }\n } return s;\n};\nvar pow = function (x, n, acc) {\n return n === 0 ? acc : n % 2 === 1 ? pow(x, n - 1, acc * x) : pow(x * x, n / 2, acc);\n};\nvar log = function (x) {\n var n = 0;\n var x2 = x;\n while (x2 >= 4096) {\n n += 12;\n x2 /= 4096;\n }\n while (x2 >= 2) {\n n += 1;\n x2 /= 2;\n } return n;\n};\n\n$export($export.P + $export.F * (!!$toFixed && (\n 0.00008.toFixed(3) !== '0.000' ||\n 0.9.toFixed(0) !== '1' ||\n 1.255.toFixed(2) !== '1.25' ||\n 1000000000000000128.0.toFixed(0) !== '1000000000000000128'\n) || !__webpack_require__(3)(function () {\n // V8 ~ Android 4.3-\n $toFixed.call({});\n})), 'Number', {\n toFixed: function toFixed(fractionDigits) {\n var x = aNumberValue(this, ERROR);\n var f = toInteger(fractionDigits);\n var s = '';\n var m = ZERO;\n var e, z, j, k;\n if (f < 0 || f > 20) throw RangeError(ERROR);\n // eslint-disable-next-line no-self-compare\n if (x != x) return 'NaN';\n if (x <= -1e21 || x >= 1e21) return String(x);\n if (x < 0) {\n s = '-';\n x = -x;\n }\n if (x > 1e-21) {\n e = log(x * pow(2, 69, 1)) - 69;\n z = e < 0 ? x * pow(2, -e, 1) : x / pow(2, e, 1);\n z *= 0x10000000000000;\n e = 52 - e;\n if (e > 0) {\n multiply(0, z);\n j = f;\n while (j >= 7) {\n multiply(1e7, 0);\n j -= 7;\n }\n multiply(pow(10, j, 1), 0);\n j = e - 1;\n while (j >= 23) {\n divide(1 << 23);\n j -= 23;\n }\n divide(1 << j);\n multiply(1, 1);\n divide(2);\n m = numToString();\n } else {\n multiply(0, z);\n multiply(1 << -e, 0);\n m = numToString() + repeat.call(ZERO, f);\n }\n }\n if (f > 0) {\n k = m.length;\n m = s + (k <= f ? '0.' + repeat.call(ZERO, f - k) + m : m.slice(0, k - f) + '.' + m.slice(k - f));\n } else {\n m = s + m;\n } return m;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLnRvLWZpeGVkLmpzPzAzNmMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDLG1CQUFtQixtQkFBTyxDQUFDLEdBQW1CO0FBQzlDLGFBQWEsbUJBQU8sQ0FBQyxFQUFrQjtBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTSxtQkFBTyxDQUFDLENBQVU7QUFDeEI7QUFDQSxrQkFBa0I7QUFDbEIsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMO0FBQ0EsQ0FBQyIsImZpbGUiOiIxNTkuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciBhTnVtYmVyVmFsdWUgPSByZXF1aXJlKCcuL19hLW51bWJlci12YWx1ZScpO1xudmFyIHJlcGVhdCA9IHJlcXVpcmUoJy4vX3N0cmluZy1yZXBlYXQnKTtcbnZhciAkdG9GaXhlZCA9IDEuMC50b0ZpeGVkO1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcbnZhciBkYXRhID0gWzAsIDAsIDAsIDAsIDAsIDBdO1xudmFyIEVSUk9SID0gJ051bWJlci50b0ZpeGVkOiBpbmNvcnJlY3QgaW52b2NhdGlvbiEnO1xudmFyIFpFUk8gPSAnMCc7XG5cbnZhciBtdWx0aXBseSA9IGZ1bmN0aW9uIChuLCBjKSB7XG4gIHZhciBpID0gLTE7XG4gIHZhciBjMiA9IGM7XG4gIHdoaWxlICgrK2kgPCA2KSB7XG4gICAgYzIgKz0gbiAqIGRhdGFbaV07XG4gICAgZGF0YVtpXSA9IGMyICUgMWU3O1xuICAgIGMyID0gZmxvb3IoYzIgLyAxZTcpO1xuICB9XG59O1xudmFyIGRpdmlkZSA9IGZ1bmN0aW9uIChuKSB7XG4gIHZhciBpID0gNjtcbiAgdmFyIGMgPSAwO1xuICB3aGlsZSAoLS1pID49IDApIHtcbiAgICBjICs9IGRhdGFbaV07XG4gICAgZGF0YVtpXSA9IGZsb29yKGMgLyBuKTtcbiAgICBjID0gKGMgJSBuKSAqIDFlNztcbiAgfVxufTtcbnZhciBudW1Ub1N0cmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGkgPSA2O1xuICB2YXIgcyA9ICcnO1xuICB3aGlsZSAoLS1pID49IDApIHtcbiAgICBpZiAocyAhPT0gJycgfHwgaSA9PT0gMCB8fCBkYXRhW2ldICE9PSAwKSB7XG4gICAgICB2YXIgdCA9IFN0cmluZyhkYXRhW2ldKTtcbiAgICAgIHMgPSBzID09PSAnJyA/IHQgOiBzICsgcmVwZWF0LmNhbGwoWkVSTywgNyAtIHQubGVuZ3RoKSArIHQ7XG4gICAgfVxuICB9IHJldHVybiBzO1xufTtcbnZhciBwb3cgPSBmdW5jdGlvbiAoeCwgbiwgYWNjKSB7XG4gIHJldHVybiBuID09PSAwID8gYWNjIDogbiAlIDIgPT09IDEgPyBwb3coeCwgbiAtIDEsIGFjYyAqIHgpIDogcG93KHggKiB4LCBuIC8gMiwgYWNjKTtcbn07XG52YXIgbG9nID0gZnVuY3Rpb24gKHgpIHtcbiAgdmFyIG4gPSAwO1xuICB2YXIgeDIgPSB4O1xuICB3aGlsZSAoeDIgPj0gNDA5Nikge1xuICAgIG4gKz0gMTI7XG4gICAgeDIgLz0gNDA5NjtcbiAgfVxuICB3aGlsZSAoeDIgPj0gMikge1xuICAgIG4gKz0gMTtcbiAgICB4MiAvPSAyO1xuICB9IHJldHVybiBuO1xufTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoISEkdG9GaXhlZCAmJiAoXG4gIDAuMDAwMDgudG9GaXhlZCgzKSAhPT0gJzAuMDAwJyB8fFxuICAwLjkudG9GaXhlZCgwKSAhPT0gJzEnIHx8XG4gIDEuMjU1LnRvRml4ZWQoMikgIT09ICcxLjI1JyB8fFxuICAxMDAwMDAwMDAwMDAwMDAwMTI4LjAudG9GaXhlZCgwKSAhPT0gJzEwMDAwMDAwMDAwMDAwMDAxMjgnXG4pIHx8ICFyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgLy8gVjggfiBBbmRyb2lkIDQuMy1cbiAgJHRvRml4ZWQuY2FsbCh7fSk7XG59KSksICdOdW1iZXInLCB7XG4gIHRvRml4ZWQ6IGZ1bmN0aW9uIHRvRml4ZWQoZnJhY3Rpb25EaWdpdHMpIHtcbiAgICB2YXIgeCA9IGFOdW1iZXJWYWx1ZSh0aGlzLCBFUlJPUik7XG4gICAgdmFyIGYgPSB0b0ludGVnZXIoZnJhY3Rpb25EaWdpdHMpO1xuICAgIHZhciBzID0gJyc7XG4gICAgdmFyIG0gPSBaRVJPO1xuICAgIHZhciBlLCB6LCBqLCBrO1xuICAgIGlmIChmIDwgMCB8fCBmID4gMjApIHRocm93IFJhbmdlRXJyb3IoRVJST1IpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICBpZiAoeCAhPSB4KSByZXR1cm4gJ05hTic7XG4gICAgaWYgKHggPD0gLTFlMjEgfHwgeCA+PSAxZTIxKSByZXR1cm4gU3RyaW5nKHgpO1xuICAgIGlmICh4IDwgMCkge1xuICAgICAgcyA9ICctJztcbiAgICAgIHggPSAteDtcbiAgICB9XG4gICAgaWYgKHggPiAxZS0yMSkge1xuICAgICAgZSA9IGxvZyh4ICogcG93KDIsIDY5LCAxKSkgLSA2OTtcbiAgICAgIHogPSBlIDwgMCA/IHggKiBwb3coMiwgLWUsIDEpIDogeCAvIHBvdygyLCBlLCAxKTtcbiAgICAgIHogKj0gMHgxMDAwMDAwMDAwMDAwMDtcbiAgICAgIGUgPSA1MiAtIGU7XG4gICAgICBpZiAoZSA+IDApIHtcbiAgICAgICAgbXVsdGlwbHkoMCwgeik7XG4gICAgICAgIGogPSBmO1xuICAgICAgICB3aGlsZSAoaiA+PSA3KSB7XG4gICAgICAgICAgbXVsdGlwbHkoMWU3LCAwKTtcbiAgICAgICAgICBqIC09IDc7XG4gICAgICAgIH1cbiAgICAgICAgbXVsdGlwbHkocG93KDEwLCBqLCAxKSwgMCk7XG4gICAgICAgIGogPSBlIC0gMTtcbiAgICAgICAgd2hpbGUgKGogPj0gMjMpIHtcbiAgICAgICAgICBkaXZpZGUoMSA8PCAyMyk7XG4gICAgICAgICAgaiAtPSAyMztcbiAgICAgICAgfVxuICAgICAgICBkaXZpZGUoMSA8PCBqKTtcbiAgICAgICAgbXVsdGlwbHkoMSwgMSk7XG4gICAgICAgIGRpdmlkZSgyKTtcbiAgICAgICAgbSA9IG51bVRvU3RyaW5nKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBtdWx0aXBseSgwLCB6KTtcbiAgICAgICAgbXVsdGlwbHkoMSA8PCAtZSwgMCk7XG4gICAgICAgIG0gPSBudW1Ub1N0cmluZygpICsgcmVwZWF0LmNhbGwoWkVSTywgZik7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChmID4gMCkge1xuICAgICAgayA9IG0ubGVuZ3RoO1xuICAgICAgbSA9IHMgKyAoayA8PSBmID8gJzAuJyArIHJlcGVhdC5jYWxsKFpFUk8sIGYgLSBrKSArIG0gOiBtLnNsaWNlKDAsIGsgLSBmKSArICcuJyArIG0uc2xpY2UoayAtIGYpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbSA9IHMgKyBtO1xuICAgIH0gcmV0dXJuIG07XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///159\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar $fails = __webpack_require__(3);\nvar aNumberValue = __webpack_require__(105);\nvar $toPrecision = 1.0.toPrecision;\n\n$export($export.P + $export.F * ($fails(function () {\n // IE7-\n return $toPrecision.call(1, undefined) !== '1';\n}) || !$fails(function () {\n // V8 ~ Android 4.3-\n $toPrecision.call({});\n})), 'Number', {\n toPrecision: function toPrecision(precision) {\n var that = aNumberValue(this, 'Number#toPrecision: incorrect invocation!');\n return precision === undefined ? $toPrecision.call(that) : $toPrecision.call(that, precision);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLnRvLXByZWNpc2lvbi5qcz81NGE4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsYUFBYSxtQkFBTyxDQUFDLENBQVU7QUFDL0IsbUJBQW1CLG1CQUFPLENBQUMsR0FBbUI7QUFDOUM7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0Esc0JBQXNCO0FBQ3RCLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTYwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIGFOdW1iZXJWYWx1ZSA9IHJlcXVpcmUoJy4vX2EtbnVtYmVyLXZhbHVlJyk7XG52YXIgJHRvUHJlY2lzaW9uID0gMS4wLnRvUHJlY2lzaW9uO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICgkZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBJRTctXG4gIHJldHVybiAkdG9QcmVjaXNpb24uY2FsbCgxLCB1bmRlZmluZWQpICE9PSAnMSc7XG59KSB8fCAhJGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gVjggfiBBbmRyb2lkIDQuMy1cbiAgJHRvUHJlY2lzaW9uLmNhbGwoe30pO1xufSkpLCAnTnVtYmVyJywge1xuICB0b1ByZWNpc2lvbjogZnVuY3Rpb24gdG9QcmVjaXNpb24ocHJlY2lzaW9uKSB7XG4gICAgdmFyIHRoYXQgPSBhTnVtYmVyVmFsdWUodGhpcywgJ051bWJlciN0b1ByZWNpc2lvbjogaW5jb3JyZWN0IGludm9jYXRpb24hJyk7XG4gICAgcmV0dXJuIHByZWNpc2lvbiA9PT0gdW5kZWZpbmVkID8gJHRvUHJlY2lzaW9uLmNhbGwodGhhdCkgOiAkdG9QcmVjaXNpb24uY2FsbCh0aGF0LCBwcmVjaXNpb24pO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///160\n")},function(module,exports,__webpack_require__){eval("// 20.1.2.1 Number.EPSILON\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Number', { EPSILON: Math.pow(2, -52) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLmVwc2lsb24uanM/MmUzNyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXOztBQUVqQyw4QkFBOEIsNEJBQTRCIiwiZmlsZSI6IjE2MS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDIwLjEuMi4xIE51bWJlci5FUFNJTE9OXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ051bWJlcicsIHsgRVBTSUxPTjogTWF0aC5wb3coMiwgLTUyKSB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///161\n")},function(module,exports,__webpack_require__){eval("// 20.1.2.2 Number.isFinite(number)\nvar $export = __webpack_require__(0);\nvar _isFinite = __webpack_require__(2).isFinite;\n\n$export($export.S, 'Number', {\n isFinite: function isFinite(it) {\n return typeof it == 'number' && _isFinite(it);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLmlzLWZpbml0ZS5qcz9mY2EwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsZ0JBQWdCLG1CQUFPLENBQUMsQ0FBVzs7QUFFbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjE2Mi5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDIwLjEuMi4yIE51bWJlci5pc0Zpbml0ZShudW1iZXIpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIF9pc0Zpbml0ZSA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLmlzRmluaXRlO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ051bWJlcicsIHtcbiAgaXNGaW5pdGU6IGZ1bmN0aW9uIGlzRmluaXRlKGl0KSB7XG4gICAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnbnVtYmVyJyAmJiBfaXNGaW5pdGUoaXQpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///162\n")},function(module,exports,__webpack_require__){eval("// 20.1.2.3 Number.isInteger(number)\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Number', { isInteger: __webpack_require__(106) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLmlzLWludGVnZXIuanM/N2NkZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXOztBQUVqQyw4QkFBOEIsWUFBWSxtQkFBTyxDQUFDLEdBQWUsR0FBRyIsImZpbGUiOiIxNjMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyMC4xLjIuMyBOdW1iZXIuaXNJbnRlZ2VyKG51bWJlcilcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTnVtYmVyJywgeyBpc0ludGVnZXI6IHJlcXVpcmUoJy4vX2lzLWludGVnZXInKSB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///163\n")},function(module,exports,__webpack_require__){eval("// 20.1.2.4 Number.isNaN(number)\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Number', {\n isNaN: function isNaN(number) {\n // eslint-disable-next-line no-self-compare\n return number != number;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLmlzLW5hbi5qcz9lZTFkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjE2NC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDIwLjEuMi40IE51bWJlci5pc05hTihudW1iZXIpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ051bWJlcicsIHtcbiAgaXNOYU46IGZ1bmN0aW9uIGlzTmFOKG51bWJlcikge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICByZXR1cm4gbnVtYmVyICE9IG51bWJlcjtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///164\n")},function(module,exports,__webpack_require__){eval("// 20.1.2.5 Number.isSafeInteger(number)\nvar $export = __webpack_require__(0);\nvar isInteger = __webpack_require__(106);\nvar abs = Math.abs;\n\n$export($export.S, 'Number', {\n isSafeInteger: function isSafeInteger(number) {\n return isInteger(number) && abs(number) <= 0x1fffffffffffff;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLmlzLXNhZmUtaW50ZWdlci5qcz9iMWIxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsZ0JBQWdCLG1CQUFPLENBQUMsR0FBZTtBQUN2Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTY1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMS4yLjUgTnVtYmVyLmlzU2FmZUludGVnZXIobnVtYmVyKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBpc0ludGVnZXIgPSByZXF1aXJlKCcuL19pcy1pbnRlZ2VyJyk7XG52YXIgYWJzID0gTWF0aC5hYnM7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTnVtYmVyJywge1xuICBpc1NhZmVJbnRlZ2VyOiBmdW5jdGlvbiBpc1NhZmVJbnRlZ2VyKG51bWJlcikge1xuICAgIHJldHVybiBpc0ludGVnZXIobnVtYmVyKSAmJiBhYnMobnVtYmVyKSA8PSAweDFmZmZmZmZmZmZmZmZmO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///165\n")},function(module,exports,__webpack_require__){eval("// 20.1.2.6 Number.MAX_SAFE_INTEGER\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Number', { MAX_SAFE_INTEGER: 0x1fffffffffffff });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLm1heC1zYWZlLWludGVnZXIuanM/ODdmMyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXOztBQUVqQyw4QkFBOEIscUNBQXFDIiwiZmlsZSI6IjE2Ni5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDIwLjEuMi42IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ051bWJlcicsIHsgTUFYX1NBRkVfSU5URUdFUjogMHgxZmZmZmZmZmZmZmZmZiB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///166\n")},function(module,exports,__webpack_require__){eval("// 20.1.2.10 Number.MIN_SAFE_INTEGER\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Number', { MIN_SAFE_INTEGER: -0x1fffffffffffff });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLm1pbi1zYWZlLWludGVnZXIuanM/OTI3OCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXOztBQUVqQyw4QkFBOEIsc0NBQXNDIiwiZmlsZSI6IjE2Ny5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDIwLjEuMi4xMCBOdW1iZXIuTUlOX1NBRkVfSU5URUdFUlxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdOdW1iZXInLCB7IE1JTl9TQUZFX0lOVEVHRVI6IC0weDFmZmZmZmZmZmZmZmZmIH0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///167\n")},function(module,exports,__webpack_require__){eval("var $export = __webpack_require__(0);\nvar $parseFloat = __webpack_require__(104);\n// 20.1.2.12 Number.parseFloat(string)\n$export($export.S + $export.F * (Number.parseFloat != $parseFloat), 'Number', { parseFloat: $parseFloat });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLnBhcnNlLWZsb2F0LmpzPzVkZjIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsa0JBQWtCLG1CQUFPLENBQUMsR0FBZ0I7QUFDMUM7QUFDQSwrRUFBK0UsMEJBQTBCIiwiZmlsZSI6IjE2OC5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHBhcnNlRmxvYXQgPSByZXF1aXJlKCcuL19wYXJzZS1mbG9hdCcpO1xuLy8gMjAuMS4yLjEyIE51bWJlci5wYXJzZUZsb2F0KHN0cmluZylcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogKE51bWJlci5wYXJzZUZsb2F0ICE9ICRwYXJzZUZsb2F0KSwgJ051bWJlcicsIHsgcGFyc2VGbG9hdDogJHBhcnNlRmxvYXQgfSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///168\n")},function(module,exports,__webpack_require__){eval("var $export = __webpack_require__(0);\nvar $parseInt = __webpack_require__(103);\n// 20.1.2.13 Number.parseInt(string, radix)\n$export($export.S + $export.F * (Number.parseInt != $parseInt), 'Number', { parseInt: $parseInt });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLnBhcnNlLWludC5qcz8wNGZmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGdCQUFnQixtQkFBTyxDQUFDLEdBQWM7QUFDdEM7QUFDQSwyRUFBMkUsc0JBQXNCIiwiZmlsZSI6IjE2OS5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHBhcnNlSW50ID0gcmVxdWlyZSgnLi9fcGFyc2UtaW50Jyk7XG4vLyAyMC4xLjIuMTMgTnVtYmVyLnBhcnNlSW50KHN0cmluZywgcmFkaXgpXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIChOdW1iZXIucGFyc2VJbnQgIT0gJHBhcnNlSW50KSwgJ051bWJlcicsIHsgcGFyc2VJbnQ6ICRwYXJzZUludCB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///169\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.3 Math.acosh(x)\nvar $export = __webpack_require__(0);\nvar log1p = __webpack_require__(107);\nvar sqrt = Math.sqrt;\nvar $acosh = Math.acosh;\n\n$export($export.S + $export.F * !($acosh\n // V8 bug: https://code.google.com/p/v8/issues/detail?id=3509\n && Math.floor($acosh(Number.MAX_VALUE)) == 710\n // Tor Browser bug: Math.acosh(Infinity) -> NaN\n && $acosh(Infinity) == Infinity\n), 'Math', {\n acosh: function acosh(x) {\n return (x = +x) < 1 ? NaN : x > 94906265.62425156\n ? Math.log(x) + Math.LN2\n : log1p(x - 1 + sqrt(x - 1) * sqrt(x + 1));\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5hY29zaC5qcz83ZjI1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsWUFBWSxtQkFBTyxDQUFDLEdBQWU7QUFDbkM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIxNzAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyMC4yLjIuMyBNYXRoLmFjb3NoKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGxvZzFwID0gcmVxdWlyZSgnLi9fbWF0aC1sb2cxcCcpO1xudmFyIHNxcnQgPSBNYXRoLnNxcnQ7XG52YXIgJGFjb3NoID0gTWF0aC5hY29zaDtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhKCRhY29zaFxuICAvLyBWOCBidWc6IGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zNTA5XG4gICYmIE1hdGguZmxvb3IoJGFjb3NoKE51bWJlci5NQVhfVkFMVUUpKSA9PSA3MTBcbiAgLy8gVG9yIEJyb3dzZXIgYnVnOiBNYXRoLmFjb3NoKEluZmluaXR5KSAtPiBOYU5cbiAgJiYgJGFjb3NoKEluZmluaXR5KSA9PSBJbmZpbml0eVxuKSwgJ01hdGgnLCB7XG4gIGFjb3NoOiBmdW5jdGlvbiBhY29zaCh4KSB7XG4gICAgcmV0dXJuICh4ID0gK3gpIDwgMSA/IE5hTiA6IHggPiA5NDkwNjI2NS42MjQyNTE1NlxuICAgICAgPyBNYXRoLmxvZyh4KSArIE1hdGguTE4yXG4gICAgICA6IGxvZzFwKHggLSAxICsgc3FydCh4IC0gMSkgKiBzcXJ0KHggKyAxKSk7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///170\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.5 Math.asinh(x)\nvar $export = __webpack_require__(0);\nvar $asinh = Math.asinh;\n\nfunction asinh(x) {\n return !isFinite(x = +x) || x == 0 ? x : x < 0 ? -asinh(-x) : Math.log(x + Math.sqrt(x * x + 1));\n}\n\n// Tor Browser bug: Math.asinh(0) -> -0\n$export($export.S + $export.F * !($asinh && 1 / $asinh(0) > 0), 'Math', { asinh: asinh });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5hc2luaC5qcz81MzZiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakM7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EseUVBQXlFLGVBQWUiLCJmaWxlIjoiMTcxLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMi4yLjUgTWF0aC5hc2luaCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkYXNpbmggPSBNYXRoLmFzaW5oO1xuXG5mdW5jdGlvbiBhc2luaCh4KSB7XG4gIHJldHVybiAhaXNGaW5pdGUoeCA9ICt4KSB8fCB4ID09IDAgPyB4IDogeCA8IDAgPyAtYXNpbmgoLXgpIDogTWF0aC5sb2coeCArIE1hdGguc3FydCh4ICogeCArIDEpKTtcbn1cblxuLy8gVG9yIEJyb3dzZXIgYnVnOiBNYXRoLmFzaW5oKDApIC0+IC0wXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICEoJGFzaW5oICYmIDEgLyAkYXNpbmgoMCkgPiAwKSwgJ01hdGgnLCB7IGFzaW5oOiBhc2luaCB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///171\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.7 Math.atanh(x)\nvar $export = __webpack_require__(0);\nvar $atanh = Math.atanh;\n\n// Tor Browser bug: Math.atanh(-0) -> 0\n$export($export.S + $export.F * !($atanh && 1 / $atanh(-0) < 0), 'Math', {\n atanh: function atanh(x) {\n return (x = +x) == 0 ? x : Math.log((1 + x) / (1 - x)) / 2;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5hdGFuaC5qcz9kOWFiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTcyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMi4yLjcgTWF0aC5hdGFuaCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkYXRhbmggPSBNYXRoLmF0YW5oO1xuXG4vLyBUb3IgQnJvd3NlciBidWc6IE1hdGguYXRhbmgoLTApIC0+IDBcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogISgkYXRhbmggJiYgMSAvICRhdGFuaCgtMCkgPCAwKSwgJ01hdGgnLCB7XG4gIGF0YW5oOiBmdW5jdGlvbiBhdGFuaCh4KSB7XG4gICAgcmV0dXJuICh4ID0gK3gpID09IDAgPyB4IDogTWF0aC5sb2coKDEgKyB4KSAvICgxIC0geCkpIC8gMjtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///172\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.9 Math.cbrt(x)\nvar $export = __webpack_require__(0);\nvar sign = __webpack_require__(75);\n\n$export($export.S, 'Math', {\n cbrt: function cbrt(x) {\n return sign(x = +x) * Math.pow(Math.abs(x), 1 / 3);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5jYnJ0LmpzP2Y5YWIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxXQUFXLG1CQUFPLENBQUMsRUFBYzs7QUFFakM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjE3My5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDIwLjIuMi45IE1hdGguY2JydCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBzaWduID0gcmVxdWlyZSgnLi9fbWF0aC1zaWduJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgY2JydDogZnVuY3Rpb24gY2JydCh4KSB7XG4gICAgcmV0dXJuIHNpZ24oeCA9ICt4KSAqIE1hdGgucG93KE1hdGguYWJzKHgpLCAxIC8gMyk7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///173\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.11 Math.clz32(x)\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', {\n clz32: function clz32(x) {\n return (x >>>= 0) ? 31 - Math.floor(Math.log(x + 0.5) * Math.LOG2E) : 32;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5jbHozMi5qcz8zMmQ3Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIxNzQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyMC4yLjIuMTEgTWF0aC5jbHozMih4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBjbHozMjogZnVuY3Rpb24gY2x6MzIoeCkge1xuICAgIHJldHVybiAoeCA+Pj49IDApID8gMzEgLSBNYXRoLmZsb29yKE1hdGgubG9nKHggKyAwLjUpICogTWF0aC5MT0cyRSkgOiAzMjtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///174\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.12 Math.cosh(x)\nvar $export = __webpack_require__(0);\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n cosh: function cosh(x) {\n return (exp(x = +x) + exp(-x)) / 2;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5jb3NoLmpzPzI1YzkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTc1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMi4yLjEyIE1hdGguY29zaCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBleHAgPSBNYXRoLmV4cDtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBjb3NoOiBmdW5jdGlvbiBjb3NoKHgpIHtcbiAgICByZXR1cm4gKGV4cCh4ID0gK3gpICsgZXhwKC14KSkgLyAyO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///175\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.14 Math.expm1(x)\nvar $export = __webpack_require__(0);\nvar $expm1 = __webpack_require__(76);\n\n$export($export.S + $export.F * ($expm1 != Math.expm1), 'Math', { expm1: $expm1 });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5leHBtMS5qcz85ZjNjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsYUFBYSxtQkFBTyxDQUFDLEVBQWU7O0FBRXBDLGlFQUFpRSxnQkFBZ0IiLCJmaWxlIjoiMTc2LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMi4yLjE0IE1hdGguZXhwbTEoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGV4cG0xID0gcmVxdWlyZSgnLi9fbWF0aC1leHBtMScpO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICgkZXhwbTEgIT0gTWF0aC5leHBtMSksICdNYXRoJywgeyBleHBtMTogJGV4cG0xIH0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///176\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.16 Math.fround(x)\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', { fround: __webpack_require__(108) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5mcm91bmQuanM/MDQyZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXOztBQUVqQyw0QkFBNEIsU0FBUyxtQkFBTyxDQUFDLEdBQWdCLEdBQUciLCJmaWxlIjoiMTc3LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMi4yLjE2IE1hdGguZnJvdW5kKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7IGZyb3VuZDogcmVxdWlyZSgnLi9fbWF0aC1mcm91bmQnKSB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///177\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.17 Math.hypot([value1[, value2[, … ]]])\nvar $export = __webpack_require__(0);\nvar abs = Math.abs;\n\n$export($export.S, 'Math', {\n hypot: function hypot(value1, value2) { // eslint-disable-line no-unused-vars\n var sum = 0;\n var i = 0;\n var aLen = arguments.length;\n var larg = 0;\n var arg, div;\n while (i < aLen) {\n arg = abs(arguments[i++]);\n if (larg < arg) {\n div = larg / arg;\n sum = sum * div * div + 1;\n larg = arg;\n } else if (arg > 0) {\n div = arg / larg;\n sum += div * div;\n } else sum += arg;\n }\n return larg === Infinity ? Infinity : larg * Math.sqrt(sum);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5oeXBvdC5qcz9jN2M2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakM7O0FBRUE7QUFDQSx5Q0FBeUM7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTc4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMi4yLjE3IE1hdGguaHlwb3QoW3ZhbHVlMVssIHZhbHVlMlssIOKApiBdXV0pXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGFicyA9IE1hdGguYWJzO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGh5cG90OiBmdW5jdGlvbiBoeXBvdCh2YWx1ZTEsIHZhbHVlMikgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgdmFyIHN1bSA9IDA7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgbGFyZyA9IDA7XG4gICAgdmFyIGFyZywgZGl2O1xuICAgIHdoaWxlIChpIDwgYUxlbikge1xuICAgICAgYXJnID0gYWJzKGFyZ3VtZW50c1tpKytdKTtcbiAgICAgIGlmIChsYXJnIDwgYXJnKSB7XG4gICAgICAgIGRpdiA9IGxhcmcgLyBhcmc7XG4gICAgICAgIHN1bSA9IHN1bSAqIGRpdiAqIGRpdiArIDE7XG4gICAgICAgIGxhcmcgPSBhcmc7XG4gICAgICB9IGVsc2UgaWYgKGFyZyA+IDApIHtcbiAgICAgICAgZGl2ID0gYXJnIC8gbGFyZztcbiAgICAgICAgc3VtICs9IGRpdiAqIGRpdjtcbiAgICAgIH0gZWxzZSBzdW0gKz0gYXJnO1xuICAgIH1cbiAgICByZXR1cm4gbGFyZyA9PT0gSW5maW5pdHkgPyBJbmZpbml0eSA6IGxhcmcgKiBNYXRoLnNxcnQoc3VtKTtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///178\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.18 Math.imul(x, y)\nvar $export = __webpack_require__(0);\nvar $imul = Math.imul;\n\n// some WebKit versions fails with big numbers, some has wrong arity\n$export($export.S + $export.F * __webpack_require__(3)(function () {\n return $imul(0xffffffff, 5) != -5 || $imul.length != 2;\n}), 'Math', {\n imul: function imul(x, y) {\n var UINT16 = 0xffff;\n var xn = +x;\n var yn = +y;\n var xl = UINT16 & xn;\n var yl = UINT16 & yn;\n return 0 | xl * yl + ((UINT16 & xn >>> 16) * yl + xl * (UINT16 & yn >>> 16) << 16 >>> 0);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5pbXVsLmpzP2Y0ZmYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQzs7QUFFQTtBQUNBLGdDQUFnQyxtQkFBTyxDQUFDLENBQVU7QUFDbEQ7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTc5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMi4yLjE4IE1hdGguaW11bCh4LCB5KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkaW11bCA9IE1hdGguaW11bDtcblxuLy8gc29tZSBXZWJLaXQgdmVyc2lvbnMgZmFpbHMgd2l0aCBiaWcgbnVtYmVycywgc29tZSBoYXMgd3JvbmcgYXJpdHlcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAkaW11bCgweGZmZmZmZmZmLCA1KSAhPSAtNSB8fCAkaW11bC5sZW5ndGggIT0gMjtcbn0pLCAnTWF0aCcsIHtcbiAgaW11bDogZnVuY3Rpb24gaW11bCh4LCB5KSB7XG4gICAgdmFyIFVJTlQxNiA9IDB4ZmZmZjtcbiAgICB2YXIgeG4gPSAreDtcbiAgICB2YXIgeW4gPSAreTtcbiAgICB2YXIgeGwgPSBVSU5UMTYgJiB4bjtcbiAgICB2YXIgeWwgPSBVSU5UMTYgJiB5bjtcbiAgICByZXR1cm4gMCB8IHhsICogeWwgKyAoKFVJTlQxNiAmIHhuID4+PiAxNikgKiB5bCArIHhsICogKFVJTlQxNiAmIHluID4+PiAxNikgPDwgMTYgPj4+IDApO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///179\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.21 Math.log10(x)\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', {\n log10: function log10(x) {\n return Math.log(x) * Math.LOG10E;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5sb2cxMC5qcz83ODcyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIxODAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyMC4yLjIuMjEgTWF0aC5sb2cxMCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBsb2cxMDogZnVuY3Rpb24gbG9nMTAoeCkge1xuICAgIHJldHVybiBNYXRoLmxvZyh4KSAqIE1hdGguTE9HMTBFO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///180\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.20 Math.log1p(x)\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', { log1p: __webpack_require__(107) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5sb2cxcC5qcz8wNDlmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDLDRCQUE0QixRQUFRLG1CQUFPLENBQUMsR0FBZSxHQUFHIiwiZmlsZSI6IjE4MS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDIwLjIuMi4yMCBNYXRoLmxvZzFwKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7IGxvZzFwOiByZXF1aXJlKCcuL19tYXRoLWxvZzFwJykgfSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///181\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.22 Math.log2(x)\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', {\n log2: function log2(x) {\n return Math.log(x) / Math.LN2;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5sb2cyLmpzP2E2OWYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVzs7QUFFakM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjE4Mi5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDIwLjIuMi4yMiBNYXRoLmxvZzIoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgbG9nMjogZnVuY3Rpb24gbG9nMih4KSB7XG4gICAgcmV0dXJuIE1hdGgubG9nKHgpIC8gTWF0aC5MTjI7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///182\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.28 Math.sign(x)\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', { sign: __webpack_require__(75) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5zaWduLmpzPzBiMjEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVzs7QUFFakMsNEJBQTRCLE9BQU8sbUJBQU8sQ0FBQyxFQUFjLEdBQUciLCJmaWxlIjoiMTgzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMi4yLjI4IE1hdGguc2lnbih4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywgeyBzaWduOiByZXF1aXJlKCcuL19tYXRoLXNpZ24nKSB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///183\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.30 Math.sinh(x)\nvar $export = __webpack_require__(0);\nvar expm1 = __webpack_require__(76);\nvar exp = Math.exp;\n\n// V8 near Chromium 38 has a problem with very small numbers\n$export($export.S + $export.F * __webpack_require__(3)(function () {\n return !Math.sinh(-2e-17) != -2e-17;\n}), 'Math', {\n sinh: function sinh(x) {\n return Math.abs(x = +x) < 1\n ? (expm1(x) - expm1(-x)) / 2\n : (exp(x - 1) - exp(-x - 1)) * (Math.E / 2);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5zaW5oLmpzPzZjMWEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxZQUFZLG1CQUFPLENBQUMsRUFBZTtBQUNuQzs7QUFFQTtBQUNBLGdDQUFnQyxtQkFBTyxDQUFDLENBQVU7QUFDbEQ7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTg0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMi4yLjMwIE1hdGguc2luaCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBleHBtMSA9IHJlcXVpcmUoJy4vX21hdGgtZXhwbTEnKTtcbnZhciBleHAgPSBNYXRoLmV4cDtcblxuLy8gVjggbmVhciBDaHJvbWl1bSAzOCBoYXMgYSBwcm9ibGVtIHdpdGggdmVyeSBzbWFsbCBudW1iZXJzXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gIU1hdGguc2luaCgtMmUtMTcpICE9IC0yZS0xNztcbn0pLCAnTWF0aCcsIHtcbiAgc2luaDogZnVuY3Rpb24gc2luaCh4KSB7XG4gICAgcmV0dXJuIE1hdGguYWJzKHggPSAreCkgPCAxXG4gICAgICA/IChleHBtMSh4KSAtIGV4cG0xKC14KSkgLyAyXG4gICAgICA6IChleHAoeCAtIDEpIC0gZXhwKC14IC0gMSkpICogKE1hdGguRSAvIDIpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///184\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.33 Math.tanh(x)\nvar $export = __webpack_require__(0);\nvar expm1 = __webpack_require__(76);\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n tanh: function tanh(x) {\n var a = expm1(x = +x);\n var b = expm1(-x);\n return a == Infinity ? 1 : b == Infinity ? -1 : (a - b) / (exp(x) + exp(-x));\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC50YW5oLmpzP2M3YzYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxZQUFZLG1CQUFPLENBQUMsRUFBZTtBQUNuQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjE4NS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDIwLjIuMi4zMyBNYXRoLnRhbmgoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZXhwbTEgPSByZXF1aXJlKCcuL19tYXRoLWV4cG0xJyk7XG52YXIgZXhwID0gTWF0aC5leHA7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgdGFuaDogZnVuY3Rpb24gdGFuaCh4KSB7XG4gICAgdmFyIGEgPSBleHBtMSh4ID0gK3gpO1xuICAgIHZhciBiID0gZXhwbTEoLXgpO1xuICAgIHJldHVybiBhID09IEluZmluaXR5ID8gMSA6IGIgPT0gSW5maW5pdHkgPyAtMSA6IChhIC0gYikgLyAoZXhwKHgpICsgZXhwKC14KSk7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///185\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.34 Math.trunc(x)\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', {\n trunc: function trunc(it) {\n return (it > 0 ? Math.floor : Math.ceil)(it);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC50cnVuYy5qcz84NGI0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIxODYuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyMC4yLjIuMzQgTWF0aC50cnVuYyh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICB0cnVuYzogZnVuY3Rpb24gdHJ1bmMoaXQpIHtcbiAgICByZXR1cm4gKGl0ID4gMCA/IE1hdGguZmxvb3IgOiBNYXRoLmNlaWwpKGl0KTtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///186\n")},function(module,exports,__webpack_require__){eval("var $export = __webpack_require__(0);\nvar toAbsoluteIndex = __webpack_require__(35);\nvar fromCharCode = String.fromCharCode;\nvar $fromCodePoint = String.fromCodePoint;\n\n// length should be 1, old FF problem\n$export($export.S + $export.F * (!!$fromCodePoint && $fromCodePoint.length != 1), 'String', {\n // 21.1.2.2 String.fromCodePoint(...codePoints)\n fromCodePoint: function fromCodePoint(x) { // eslint-disable-line no-unused-vars\n var res = [];\n var aLen = arguments.length;\n var i = 0;\n var code;\n while (aLen > i) {\n code = +arguments[i++];\n if (toAbsoluteIndex(code, 0x10ffff) !== code) throw RangeError(code + ' is not a valid code point');\n res.push(code < 0x10000\n ? fromCharCode(code)\n : fromCharCode(((code -= 0x10000) >> 10) + 0xd800, code % 0x400 + 0xdc00)\n );\n } return res.join('');\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmZyb20tY29kZS1wb2ludC5qcz81Njk1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLHNCQUFzQixtQkFBTyxDQUFDLEVBQXNCO0FBQ3BEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsNENBQTRDO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxDQUFDIiwiZmlsZSI6IjE4Ny5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi9fdG8tYWJzb2x1dGUtaW5kZXgnKTtcbnZhciBmcm9tQ2hhckNvZGUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlO1xudmFyICRmcm9tQ29kZVBvaW50ID0gU3RyaW5nLmZyb21Db2RlUG9pbnQ7XG5cbi8vIGxlbmd0aCBzaG91bGQgYmUgMSwgb2xkIEZGIHByb2JsZW1cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogKCEhJGZyb21Db2RlUG9pbnQgJiYgJGZyb21Db2RlUG9pbnQubGVuZ3RoICE9IDEpLCAnU3RyaW5nJywge1xuICAvLyAyMS4xLjIuMiBTdHJpbmcuZnJvbUNvZGVQb2ludCguLi5jb2RlUG9pbnRzKVxuICBmcm9tQ29kZVBvaW50OiBmdW5jdGlvbiBmcm9tQ29kZVBvaW50KHgpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgIHZhciByZXMgPSBbXTtcbiAgICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBjb2RlO1xuICAgIHdoaWxlIChhTGVuID4gaSkge1xuICAgICAgY29kZSA9ICthcmd1bWVudHNbaSsrXTtcbiAgICAgIGlmICh0b0Fic29sdXRlSW5kZXgoY29kZSwgMHgxMGZmZmYpICE9PSBjb2RlKSB0aHJvdyBSYW5nZUVycm9yKGNvZGUgKyAnIGlzIG5vdCBhIHZhbGlkIGNvZGUgcG9pbnQnKTtcbiAgICAgIHJlcy5wdXNoKGNvZGUgPCAweDEwMDAwXG4gICAgICAgID8gZnJvbUNoYXJDb2RlKGNvZGUpXG4gICAgICAgIDogZnJvbUNoYXJDb2RlKCgoY29kZSAtPSAweDEwMDAwKSA+PiAxMCkgKyAweGQ4MDAsIGNvZGUgJSAweDQwMCArIDB4ZGMwMClcbiAgICAgICk7XG4gICAgfSByZXR1cm4gcmVzLmpvaW4oJycpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///187\n")},function(module,exports,__webpack_require__){eval("var $export = __webpack_require__(0);\nvar toIObject = __webpack_require__(15);\nvar toLength = __webpack_require__(6);\n\n$export($export.S, 'String', {\n // 21.1.2.4 String.raw(callSite, ...substitutions)\n raw: function raw(callSite) {\n var tpl = toIObject(callSite.raw);\n var len = toLength(tpl.length);\n var aLen = arguments.length;\n var res = [];\n var i = 0;\n while (len > i) {\n res.push(String(tpl[i++]));\n if (i < aLen) res.push(String(arguments[i]));\n } return res.join('');\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnJhdy5qcz83ODhkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGdCQUFnQixtQkFBTyxDQUFDLEVBQWU7QUFDdkMsZUFBZSxtQkFBTyxDQUFDLENBQWM7O0FBRXJDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxDQUFDIiwiZmlsZSI6IjE4OC5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnU3RyaW5nJywge1xuICAvLyAyMS4xLjIuNCBTdHJpbmcucmF3KGNhbGxTaXRlLCAuLi5zdWJzdGl0dXRpb25zKVxuICByYXc6IGZ1bmN0aW9uIHJhdyhjYWxsU2l0ZSkge1xuICAgIHZhciB0cGwgPSB0b0lPYmplY3QoY2FsbFNpdGUucmF3KTtcbiAgICB2YXIgbGVuID0gdG9MZW5ndGgodHBsLmxlbmd0aCk7XG4gICAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciByZXMgPSBbXTtcbiAgICB2YXIgaSA9IDA7XG4gICAgd2hpbGUgKGxlbiA+IGkpIHtcbiAgICAgIHJlcy5wdXNoKFN0cmluZyh0cGxbaSsrXSkpO1xuICAgICAgaWYgKGkgPCBhTGVuKSByZXMucHVzaChTdHJpbmcoYXJndW1lbnRzW2ldKSk7XG4gICAgfSByZXR1cm4gcmVzLmpvaW4oJycpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///188\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// 21.1.3.25 String.prototype.trim()\n__webpack_require__(45)('trim', function ($trim) {\n return function trim() {\n return $trim(this, 3);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnRyaW0uanM/NGYzNyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsbUJBQU8sQ0FBQyxFQUFnQjtBQUN4QjtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjE4OS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIDIxLjEuMy4yNSBTdHJpbmcucHJvdG90eXBlLnRyaW0oKVxucmVxdWlyZSgnLi9fc3RyaW5nLXRyaW0nKSgndHJpbScsIGZ1bmN0aW9uICgkdHJpbSkge1xuICByZXR1cm4gZnVuY3Rpb24gdHJpbSgpIHtcbiAgICByZXR1cm4gJHRyaW0odGhpcywgMyk7XG4gIH07XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///189\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $at = __webpack_require__(55)(true);\n\n// 21.1.3.27 String.prototype[@@iterator]()\n__webpack_require__(77)(String, 'String', function (iterated) {\n this._t = String(iterated); // target\n this._i = 0; // next index\n// 21.1.5.2.1 %StringIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var index = this._i;\n var point;\n if (index >= O.length) return { value: undefined, done: true };\n point = $at(O, index);\n this._i += point.length;\n return { value: point, done: false };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLml0ZXJhdG9yLmpzPzVkZjMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixVQUFVLG1CQUFPLENBQUMsRUFBYzs7QUFFaEM7QUFDQSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3hCLDZCQUE2QjtBQUM3QixjQUFjO0FBQ2Q7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDO0FBQ2pDO0FBQ0E7QUFDQSxVQUFVO0FBQ1YsQ0FBQyIsImZpbGUiOiIxOTAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgJGF0ID0gcmVxdWlyZSgnLi9fc3RyaW5nLWF0JykodHJ1ZSk7XG5cbi8vIDIxLjEuMy4yNyBTdHJpbmcucHJvdG90eXBlW0BAaXRlcmF0b3JdKClcbnJlcXVpcmUoJy4vX2l0ZXItZGVmaW5lJykoU3RyaW5nLCAnU3RyaW5nJywgZnVuY3Rpb24gKGl0ZXJhdGVkKSB7XG4gIHRoaXMuX3QgPSBTdHJpbmcoaXRlcmF0ZWQpOyAvLyB0YXJnZXRcbiAgdGhpcy5faSA9IDA7ICAgICAgICAgICAgICAgIC8vIG5leHQgaW5kZXhcbi8vIDIxLjEuNS4yLjEgJVN0cmluZ0l0ZXJhdG9yUHJvdG90eXBlJS5uZXh0KClcbn0sIGZ1bmN0aW9uICgpIHtcbiAgdmFyIE8gPSB0aGlzLl90O1xuICB2YXIgaW5kZXggPSB0aGlzLl9pO1xuICB2YXIgcG9pbnQ7XG4gIGlmIChpbmRleCA+PSBPLmxlbmd0aCkgcmV0dXJuIHsgdmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1ZSB9O1xuICBwb2ludCA9ICRhdChPLCBpbmRleCk7XG4gIHRoaXMuX2kgKz0gcG9pbnQubGVuZ3RoO1xuICByZXR1cm4geyB2YWx1ZTogcG9pbnQsIGRvbmU6IGZhbHNlIH07XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///190\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar $at = __webpack_require__(55)(false);\n$export($export.P, 'String', {\n // 21.1.3.3 String.prototype.codePointAt(pos)\n codePointAt: function codePointAt(pos) {\n return $at(this, pos);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmNvZGUtcG9pbnQtYXQuanM/YTAzMiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLFVBQVUsbUJBQU8sQ0FBQyxFQUFjO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjE5MS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGF0ID0gcmVxdWlyZSgnLi9fc3RyaW5nLWF0JykoZmFsc2UpO1xuJGV4cG9ydCgkZXhwb3J0LlAsICdTdHJpbmcnLCB7XG4gIC8vIDIxLjEuMy4zIFN0cmluZy5wcm90b3R5cGUuY29kZVBvaW50QXQocG9zKVxuICBjb2RlUG9pbnRBdDogZnVuY3Rpb24gY29kZVBvaW50QXQocG9zKSB7XG4gICAgcmV0dXJuICRhdCh0aGlzLCBwb3MpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///191\n")},function(module,exports,__webpack_require__){"use strict";eval("// 21.1.3.6 String.prototype.endsWith(searchString [, endPosition])\n\nvar $export = __webpack_require__(0);\nvar toLength = __webpack_require__(6);\nvar context = __webpack_require__(79);\nvar ENDS_WITH = 'endsWith';\nvar $endsWith = ''[ENDS_WITH];\n\n$export($export.P + $export.F * __webpack_require__(80)(ENDS_WITH), 'String', {\n endsWith: function endsWith(searchString /* , endPosition = @length */) {\n var that = context(this, searchString, ENDS_WITH);\n var endPosition = arguments.length > 1 ? arguments[1] : undefined;\n var len = toLength(that.length);\n var end = endPosition === undefined ? len : Math.min(toLength(endPosition), len);\n var search = String(searchString);\n return $endsWith\n ? $endsWith.call(that, search, end)\n : that.slice(end - search.length, end) === search;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmVuZHMtd2l0aC5qcz9hZWY2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ2E7QUFDYixjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxjQUFjLG1CQUFPLENBQUMsRUFBbUI7QUFDekM7QUFDQTs7QUFFQSxnQ0FBZ0MsbUJBQU8sQ0FBQyxFQUFvQjtBQUM1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTkyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjEuMS4zLjYgU3RyaW5nLnByb3RvdHlwZS5lbmRzV2l0aChzZWFyY2hTdHJpbmcgWywgZW5kUG9zaXRpb25dKVxuJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGNvbnRleHQgPSByZXF1aXJlKCcuL19zdHJpbmctY29udGV4dCcpO1xudmFyIEVORFNfV0lUSCA9ICdlbmRzV2l0aCc7XG52YXIgJGVuZHNXaXRoID0gJydbRU5EU19XSVRIXTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscy1pcy1yZWdleHAnKShFTkRTX1dJVEgpLCAnU3RyaW5nJywge1xuICBlbmRzV2l0aDogZnVuY3Rpb24gZW5kc1dpdGgoc2VhcmNoU3RyaW5nIC8qICwgZW5kUG9zaXRpb24gPSBAbGVuZ3RoICovKSB7XG4gICAgdmFyIHRoYXQgPSBjb250ZXh0KHRoaXMsIHNlYXJjaFN0cmluZywgRU5EU19XSVRIKTtcbiAgICB2YXIgZW5kUG9zaXRpb24gPSBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgbGVuID0gdG9MZW5ndGgodGhhdC5sZW5ndGgpO1xuICAgIHZhciBlbmQgPSBlbmRQb3NpdGlvbiA9PT0gdW5kZWZpbmVkID8gbGVuIDogTWF0aC5taW4odG9MZW5ndGgoZW5kUG9zaXRpb24pLCBsZW4pO1xuICAgIHZhciBzZWFyY2ggPSBTdHJpbmcoc2VhcmNoU3RyaW5nKTtcbiAgICByZXR1cm4gJGVuZHNXaXRoXG4gICAgICA/ICRlbmRzV2l0aC5jYWxsKHRoYXQsIHNlYXJjaCwgZW5kKVxuICAgICAgOiB0aGF0LnNsaWNlKGVuZCAtIHNlYXJjaC5sZW5ndGgsIGVuZCkgPT09IHNlYXJjaDtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///192\n")},function(module,exports,__webpack_require__){"use strict";eval("// 21.1.3.7 String.prototype.includes(searchString, position = 0)\n\nvar $export = __webpack_require__(0);\nvar context = __webpack_require__(79);\nvar INCLUDES = 'includes';\n\n$export($export.P + $export.F * __webpack_require__(80)(INCLUDES), 'String', {\n includes: function includes(searchString /* , position = 0 */) {\n return !!~context(this, searchString, INCLUDES)\n .indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmluY2x1ZGVzLmpzPzJmZGIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDYTtBQUNiLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGNBQWMsbUJBQU8sQ0FBQyxFQUFtQjtBQUN6Qzs7QUFFQSxnQ0FBZ0MsbUJBQU8sQ0FBQyxFQUFvQjtBQUM1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTkzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjEuMS4zLjcgU3RyaW5nLnByb3RvdHlwZS5pbmNsdWRlcyhzZWFyY2hTdHJpbmcsIHBvc2l0aW9uID0gMClcbid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgY29udGV4dCA9IHJlcXVpcmUoJy4vX3N0cmluZy1jb250ZXh0Jyk7XG52YXIgSU5DTFVERVMgPSAnaW5jbHVkZXMnO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzLWlzLXJlZ2V4cCcpKElOQ0xVREVTKSwgJ1N0cmluZycsIHtcbiAgaW5jbHVkZXM6IGZ1bmN0aW9uIGluY2x1ZGVzKHNlYXJjaFN0cmluZyAvKiAsIHBvc2l0aW9uID0gMCAqLykge1xuICAgIHJldHVybiAhIX5jb250ZXh0KHRoaXMsIHNlYXJjaFN0cmluZywgSU5DTFVERVMpXG4gICAgICAuaW5kZXhPZihzZWFyY2hTdHJpbmcsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///193\n")},function(module,exports,__webpack_require__){eval("var $export = __webpack_require__(0);\n\n$export($export.P, 'String', {\n // 21.1.3.13 String.prototype.repeat(count)\n repeat: __webpack_require__(74)\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnJlcGVhdC5qcz8xNGI5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXOztBQUVqQztBQUNBO0FBQ0EsVUFBVSxtQkFBTyxDQUFDLEVBQWtCO0FBQ3BDLENBQUMiLCJmaWxlIjoiMTk0LmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdTdHJpbmcnLCB7XG4gIC8vIDIxLjEuMy4xMyBTdHJpbmcucHJvdG90eXBlLnJlcGVhdChjb3VudClcbiAgcmVwZWF0OiByZXF1aXJlKCcuL19zdHJpbmctcmVwZWF0Jylcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///194\n")},function(module,exports,__webpack_require__){"use strict";eval("// 21.1.3.18 String.prototype.startsWith(searchString [, position ])\n\nvar $export = __webpack_require__(0);\nvar toLength = __webpack_require__(6);\nvar context = __webpack_require__(79);\nvar STARTS_WITH = 'startsWith';\nvar $startsWith = ''[STARTS_WITH];\n\n$export($export.P + $export.F * __webpack_require__(80)(STARTS_WITH), 'String', {\n startsWith: function startsWith(searchString /* , position = 0 */) {\n var that = context(this, searchString, STARTS_WITH);\n var index = toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length));\n var search = String(searchString);\n return $startsWith\n ? $startsWith.call(that, search, index)\n : that.slice(index, index + search.length) === search;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnN0YXJ0cy13aXRoLmpzP2Y1NTkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDYTtBQUNiLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGNBQWMsbUJBQU8sQ0FBQyxFQUFtQjtBQUN6QztBQUNBOztBQUVBLGdDQUFnQyxtQkFBTyxDQUFDLEVBQW9CO0FBQzVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjE5NS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDIxLjEuMy4xOCBTdHJpbmcucHJvdG90eXBlLnN0YXJ0c1dpdGgoc2VhcmNoU3RyaW5nIFssIHBvc2l0aW9uIF0pXG4ndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgY29udGV4dCA9IHJlcXVpcmUoJy4vX3N0cmluZy1jb250ZXh0Jyk7XG52YXIgU1RBUlRTX1dJVEggPSAnc3RhcnRzV2l0aCc7XG52YXIgJHN0YXJ0c1dpdGggPSAnJ1tTVEFSVFNfV0lUSF07XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMtaXMtcmVnZXhwJykoU1RBUlRTX1dJVEgpLCAnU3RyaW5nJywge1xuICBzdGFydHNXaXRoOiBmdW5jdGlvbiBzdGFydHNXaXRoKHNlYXJjaFN0cmluZyAvKiAsIHBvc2l0aW9uID0gMCAqLykge1xuICAgIHZhciB0aGF0ID0gY29udGV4dCh0aGlzLCBzZWFyY2hTdHJpbmcsIFNUQVJUU19XSVRIKTtcbiAgICB2YXIgaW5kZXggPSB0b0xlbmd0aChNYXRoLm1pbihhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCwgdGhhdC5sZW5ndGgpKTtcbiAgICB2YXIgc2VhcmNoID0gU3RyaW5nKHNlYXJjaFN0cmluZyk7XG4gICAgcmV0dXJuICRzdGFydHNXaXRoXG4gICAgICA/ICRzdGFydHNXaXRoLmNhbGwodGhhdCwgc2VhcmNoLCBpbmRleClcbiAgICAgIDogdGhhdC5zbGljZShpbmRleCwgaW5kZXggKyBzZWFyY2gubGVuZ3RoKSA9PT0gc2VhcmNoO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///195\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// B.2.3.2 String.prototype.anchor(name)\n__webpack_require__(13)('anchor', function (createHTML) {\n return function anchor(name) {\n return createHTML(this, 'a', 'name', name);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmFuY2hvci5qcz84NDQ5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTk2LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuMiBTdHJpbmcucHJvdG90eXBlLmFuY2hvcihuYW1lKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnYW5jaG9yJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGFuY2hvcihuYW1lKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ2EnLCAnbmFtZScsIG5hbWUpO1xuICB9O1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///196\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// B.2.3.3 String.prototype.big()\n__webpack_require__(13)('big', function (createHTML) {\n return function big() {\n return createHTML(this, 'big', '', '');\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmJpZy5qcz85Yzg2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTk3LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuMyBTdHJpbmcucHJvdG90eXBlLmJpZygpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdiaWcnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gYmlnKCkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdiaWcnLCAnJywgJycpO1xuICB9O1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///197\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// B.2.3.4 String.prototype.blink()\n__webpack_require__(13)('blink', function (createHTML) {\n return function blink() {\n return createHTML(this, 'blink', '', '');\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmJsaW5rLmpzP2ZhODMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBLG1CQUFPLENBQUMsRUFBZ0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIxOTguanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy40IFN0cmluZy5wcm90b3R5cGUuYmxpbmsoKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnYmxpbmsnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gYmxpbmsoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ2JsaW5rJywgJycsICcnKTtcbiAgfTtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///198\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// B.2.3.5 String.prototype.bold()\n__webpack_require__(13)('bold', function (createHTML) {\n return function bold() {\n return createHTML(this, 'b', '', '');\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmJvbGQuanM/NDhjMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsbUJBQU8sQ0FBQyxFQUFnQjtBQUN4QjtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjE5OS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjUgU3RyaW5nLnByb3RvdHlwZS5ib2xkKClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ2JvbGQnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gYm9sZCgpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnYicsICcnLCAnJyk7XG4gIH07XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///199\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// B.2.3.6 String.prototype.fixed()\n__webpack_require__(13)('fixed', function (createHTML) {\n return function fixed() {\n return createHTML(this, 'tt', '', '');\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmZpeGVkLmpzP2QyNjMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBLG1CQUFPLENBQUMsRUFBZ0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyMDAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy42IFN0cmluZy5wcm90b3R5cGUuZml4ZWQoKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnZml4ZWQnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gZml4ZWQoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ3R0JywgJycsICcnKTtcbiAgfTtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///200\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// B.2.3.7 String.prototype.fontcolor(color)\n__webpack_require__(13)('fontcolor', function (createHTML) {\n return function fontcolor(color) {\n return createHTML(this, 'font', 'color', color);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmZvbnRjb2xvci5qcz82YzM3Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjAxLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuNyBTdHJpbmcucHJvdG90eXBlLmZvbnRjb2xvcihjb2xvcilcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ2ZvbnRjb2xvcicsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBmb250Y29sb3IoY29sb3IpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnZm9udCcsICdjb2xvcicsIGNvbG9yKTtcbiAgfTtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///201\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// B.2.3.8 String.prototype.fontsize(size)\n__webpack_require__(13)('fontsize', function (createHTML) {\n return function fontsize(size) {\n return createHTML(this, 'font', 'size', size);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmZvbnRzaXplLmpzPzllYzgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBLG1CQUFPLENBQUMsRUFBZ0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyMDIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy44IFN0cmluZy5wcm90b3R5cGUuZm9udHNpemUoc2l6ZSlcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ2ZvbnRzaXplJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGZvbnRzaXplKHNpemUpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnZm9udCcsICdzaXplJywgc2l6ZSk7XG4gIH07XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///202\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// B.2.3.9 String.prototype.italics()\n__webpack_require__(13)('italics', function (createHTML) {\n return function italics() {\n return createHTML(this, 'i', '', '');\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLml0YWxpY3MuanM/ZDBiMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsbUJBQU8sQ0FBQyxFQUFnQjtBQUN4QjtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjIwMy5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjkgU3RyaW5nLnByb3RvdHlwZS5pdGFsaWNzKClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ2l0YWxpY3MnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gaXRhbGljcygpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnaScsICcnLCAnJyk7XG4gIH07XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///203\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// B.2.3.10 String.prototype.link(url)\n__webpack_require__(13)('link', function (createHTML) {\n return function link(url) {\n return createHTML(this, 'a', 'href', url);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmxpbmsuanM/YjU0YSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsbUJBQU8sQ0FBQyxFQUFnQjtBQUN4QjtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjIwNC5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjEwIFN0cmluZy5wcm90b3R5cGUubGluayh1cmwpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdsaW5rJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGxpbmsodXJsKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ2EnLCAnaHJlZicsIHVybCk7XG4gIH07XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///204\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// B.2.3.11 String.prototype.small()\n__webpack_require__(13)('small', function (createHTML) {\n return function small() {\n return createHTML(this, 'small', '', '');\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnNtYWxsLmpzP2YzODYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBLG1CQUFPLENBQUMsRUFBZ0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyMDUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy4xMSBTdHJpbmcucHJvdG90eXBlLnNtYWxsKClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ3NtYWxsJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHNtYWxsKCkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdzbWFsbCcsICcnLCAnJyk7XG4gIH07XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///205\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// B.2.3.12 String.prototype.strike()\n__webpack_require__(13)('strike', function (createHTML) {\n return function strike() {\n return createHTML(this, 'strike', '', '');\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnN0cmlrZS5qcz8xNDQ4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjA2LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuMTIgU3RyaW5nLnByb3RvdHlwZS5zdHJpa2UoKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnc3RyaWtlJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHN0cmlrZSgpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnc3RyaWtlJywgJycsICcnKTtcbiAgfTtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///206\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// B.2.3.13 String.prototype.sub()\n__webpack_require__(13)('sub', function (createHTML) {\n return function sub() {\n return createHTML(this, 'sub', '', '');\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnN1Yi5qcz82NzNlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjA3LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuMTMgU3RyaW5nLnByb3RvdHlwZS5zdWIoKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnc3ViJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHN1YigpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnc3ViJywgJycsICcnKTtcbiAgfTtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///207\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// B.2.3.14 String.prototype.sup()\n__webpack_require__(13)('sup', function (createHTML) {\n return function sup() {\n return createHTML(this, 'sup', '', '');\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnN1cC5qcz8yNDJhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjA4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuMTQgU3RyaW5nLnByb3RvdHlwZS5zdXAoKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnc3VwJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHN1cCgpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnc3VwJywgJycsICcnKTtcbiAgfTtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///208\n")},function(module,exports,__webpack_require__){eval("// 20.3.3.1 / 15.9.4.4 Date.now()\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Date', { now: function () { return new Date().getTime(); } });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZGF0ZS5ub3cuanM/NzhjZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXOztBQUVqQyw0QkFBNEIsbUJBQW1CLDZCQUE2QixFQUFFLEVBQUUiLCJmaWxlIjoiMjA5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMy4zLjEgLyAxNS45LjQuNCBEYXRlLm5vdygpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ0RhdGUnLCB7IG5vdzogZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IERhdGUoKS5nZXRUaW1lKCk7IH0gfSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///209\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar toObject = __webpack_require__(9);\nvar toPrimitive = __webpack_require__(23);\n\n$export($export.P + $export.F * __webpack_require__(3)(function () {\n return new Date(NaN).toJSON() !== null\n || Date.prototype.toJSON.call({ toISOString: function () { return 1; } }) !== 1;\n}), 'Date', {\n // eslint-disable-next-line no-unused-vars\n toJSON: function toJSON(key) {\n var O = toObject(this);\n var pv = toPrimitive(O);\n return typeof pv == 'number' && !isFinite(pv) ? null : O.toISOString();\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZGF0ZS50by1qc29uLmpzPzAyOTgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxrQkFBa0IsbUJBQU8sQ0FBQyxFQUFpQjs7QUFFM0MsZ0NBQWdDLG1CQUFPLENBQUMsQ0FBVTtBQUNsRDtBQUNBLG1DQUFtQywyQkFBMkIsVUFBVSxFQUFFLEVBQUU7QUFDNUUsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjEwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBuZXcgRGF0ZShOYU4pLnRvSlNPTigpICE9PSBudWxsXG4gICAgfHwgRGF0ZS5wcm90b3R5cGUudG9KU09OLmNhbGwoeyB0b0lTT1N0cmluZzogZnVuY3Rpb24gKCkgeyByZXR1cm4gMTsgfSB9KSAhPT0gMTtcbn0pLCAnRGF0ZScsIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gIHRvSlNPTjogZnVuY3Rpb24gdG9KU09OKGtleSkge1xuICAgIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gICAgdmFyIHB2ID0gdG9QcmltaXRpdmUoTyk7XG4gICAgcmV0dXJuIHR5cGVvZiBwdiA9PSAnbnVtYmVyJyAmJiAhaXNGaW5pdGUocHYpID8gbnVsbCA6IE8udG9JU09TdHJpbmcoKTtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///210\n")},function(module,exports,__webpack_require__){eval("// 20.3.4.36 / 15.9.5.43 Date.prototype.toISOString()\nvar $export = __webpack_require__(0);\nvar toISOString = __webpack_require__(212);\n\n// PhantomJS / old WebKit has a broken implementations\n$export($export.P + $export.F * (Date.prototype.toISOString !== toISOString), 'Date', {\n toISOString: toISOString\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZGF0ZS50by1pc28tc3RyaW5nLmpzPzhlYTUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxrQkFBa0IsbUJBQU8sQ0FBQyxHQUF1Qjs7QUFFakQ7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyMTEuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyMC4zLjQuMzYgLyAxNS45LjUuNDMgRGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmcoKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b0lTT1N0cmluZyA9IHJlcXVpcmUoJy4vX2RhdGUtdG8taXNvLXN0cmluZycpO1xuXG4vLyBQaGFudG9tSlMgLyBvbGQgV2ViS2l0IGhhcyBhIGJyb2tlbiBpbXBsZW1lbnRhdGlvbnNcbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKERhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nICE9PSB0b0lTT1N0cmluZyksICdEYXRlJywge1xuICB0b0lTT1N0cmluZzogdG9JU09TdHJpbmdcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///211\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// 20.3.4.36 / 15.9.5.43 Date.prototype.toISOString()\nvar fails = __webpack_require__(3);\nvar getTime = Date.prototype.getTime;\nvar $toISOString = Date.prototype.toISOString;\n\nvar lz = function (num) {\n return num > 9 ? num : '0' + num;\n};\n\n// PhantomJS / old WebKit has a broken implementations\nmodule.exports = (fails(function () {\n return $toISOString.call(new Date(-5e13 - 1)) != '0385-07-25T07:06:39.999Z';\n}) || !fails(function () {\n $toISOString.call(new Date(NaN));\n})) ? function toISOString() {\n if (!isFinite(getTime.call(this))) throw RangeError('Invalid time value');\n var d = this;\n var y = d.getUTCFullYear();\n var m = d.getUTCMilliseconds();\n var s = y < 0 ? '-' : y > 9999 ? '+' : '';\n return s + ('00000' + Math.abs(y)).slice(s ? -6 : -4) +\n '-' + lz(d.getUTCMonth() + 1) + '-' + lz(d.getUTCDate()) +\n 'T' + lz(d.getUTCHours()) + ':' + lz(d.getUTCMinutes()) +\n ':' + lz(d.getUTCSeconds()) + '.' + (m > 99 ? m : '0' + lz(m)) + 'Z';\n} : $toISOString;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZGF0ZS10by1pc28tc3RyaW5nLmpzPzhlZDAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBLFlBQVksbUJBQU8sQ0FBQyxDQUFVO0FBQzlCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjIxMi5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIDIwLjMuNC4zNiAvIDE1LjkuNS40MyBEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZygpXG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIGdldFRpbWUgPSBEYXRlLnByb3RvdHlwZS5nZXRUaW1lO1xudmFyICR0b0lTT1N0cmluZyA9IERhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nO1xuXG52YXIgbHogPSBmdW5jdGlvbiAobnVtKSB7XG4gIHJldHVybiBudW0gPiA5ID8gbnVtIDogJzAnICsgbnVtO1xufTtcblxuLy8gUGhhbnRvbUpTIC8gb2xkIFdlYktpdCBoYXMgYSBicm9rZW4gaW1wbGVtZW50YXRpb25zXG5tb2R1bGUuZXhwb3J0cyA9IChmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAkdG9JU09TdHJpbmcuY2FsbChuZXcgRGF0ZSgtNWUxMyAtIDEpKSAhPSAnMDM4NS0wNy0yNVQwNzowNjozOS45OTlaJztcbn0pIHx8ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICR0b0lTT1N0cmluZy5jYWxsKG5ldyBEYXRlKE5hTikpO1xufSkpID8gZnVuY3Rpb24gdG9JU09TdHJpbmcoKSB7XG4gIGlmICghaXNGaW5pdGUoZ2V0VGltZS5jYWxsKHRoaXMpKSkgdGhyb3cgUmFuZ2VFcnJvcignSW52YWxpZCB0aW1lIHZhbHVlJyk7XG4gIHZhciBkID0gdGhpcztcbiAgdmFyIHkgPSBkLmdldFVUQ0Z1bGxZZWFyKCk7XG4gIHZhciBtID0gZC5nZXRVVENNaWxsaXNlY29uZHMoKTtcbiAgdmFyIHMgPSB5IDwgMCA/ICctJyA6IHkgPiA5OTk5ID8gJysnIDogJyc7XG4gIHJldHVybiBzICsgKCcwMDAwMCcgKyBNYXRoLmFicyh5KSkuc2xpY2UocyA/IC02IDogLTQpICtcbiAgICAnLScgKyBseihkLmdldFVUQ01vbnRoKCkgKyAxKSArICctJyArIGx6KGQuZ2V0VVRDRGF0ZSgpKSArXG4gICAgJ1QnICsgbHooZC5nZXRVVENIb3VycygpKSArICc6JyArIGx6KGQuZ2V0VVRDTWludXRlcygpKSArXG4gICAgJzonICsgbHooZC5nZXRVVENTZWNvbmRzKCkpICsgJy4nICsgKG0gPiA5OSA/IG0gOiAnMCcgKyBseihtKSkgKyAnWic7XG59IDogJHRvSVNPU3RyaW5nO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///212\n")},function(module,exports,__webpack_require__){eval("var DateProto = Date.prototype;\nvar INVALID_DATE = 'Invalid Date';\nvar TO_STRING = 'toString';\nvar $toString = DateProto[TO_STRING];\nvar getTime = DateProto.getTime;\nif (new Date(NaN) + '' != INVALID_DATE) {\n __webpack_require__(12)(DateProto, TO_STRING, function toString() {\n var value = getTime.call(this);\n // eslint-disable-next-line no-self-compare\n return value === value ? $toString.call(this) : INVALID_DATE;\n });\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZGF0ZS50by1zdHJpbmcuanM/ODdiMyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLG1CQUFPLENBQUMsRUFBYTtBQUN2QjtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0giLCJmaWxlIjoiMjEzLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIERhdGVQcm90byA9IERhdGUucHJvdG90eXBlO1xudmFyIElOVkFMSURfREFURSA9ICdJbnZhbGlkIERhdGUnO1xudmFyIFRPX1NUUklORyA9ICd0b1N0cmluZyc7XG52YXIgJHRvU3RyaW5nID0gRGF0ZVByb3RvW1RPX1NUUklOR107XG52YXIgZ2V0VGltZSA9IERhdGVQcm90by5nZXRUaW1lO1xuaWYgKG5ldyBEYXRlKE5hTikgKyAnJyAhPSBJTlZBTElEX0RBVEUpIHtcbiAgcmVxdWlyZSgnLi9fcmVkZWZpbmUnKShEYXRlUHJvdG8sIFRPX1NUUklORywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgdmFyIHZhbHVlID0gZ2V0VGltZS5jYWxsKHRoaXMpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICByZXR1cm4gdmFsdWUgPT09IHZhbHVlID8gJHRvU3RyaW5nLmNhbGwodGhpcykgOiBJTlZBTElEX0RBVEU7XG4gIH0pO1xufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///213\n")},function(module,exports,__webpack_require__){eval("var TO_PRIMITIVE = __webpack_require__(5)('toPrimitive');\nvar proto = Date.prototype;\n\nif (!(TO_PRIMITIVE in proto)) __webpack_require__(11)(proto, TO_PRIMITIVE, __webpack_require__(215));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZGF0ZS50by1wcmltaXRpdmUuanM/YzhjZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxtQkFBbUIsbUJBQU8sQ0FBQyxDQUFRO0FBQ25DOztBQUVBLDhCQUE4QixtQkFBTyxDQUFDLEVBQVMsdUJBQXVCLG1CQUFPLENBQUMsR0FBc0IiLCJmaWxlIjoiMjE0LmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIFRPX1BSSU1JVElWRSA9IHJlcXVpcmUoJy4vX3drcycpKCd0b1ByaW1pdGl2ZScpO1xudmFyIHByb3RvID0gRGF0ZS5wcm90b3R5cGU7XG5cbmlmICghKFRPX1BSSU1JVElWRSBpbiBwcm90bykpIHJlcXVpcmUoJy4vX2hpZGUnKShwcm90bywgVE9fUFJJTUlUSVZFLCByZXF1aXJlKCcuL19kYXRlLXRvLXByaW1pdGl2ZScpKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///214\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar anObject = __webpack_require__(1);\nvar toPrimitive = __webpack_require__(23);\nvar NUMBER = 'number';\n\nmodule.exports = function (hint) {\n if (hint !== 'string' && hint !== NUMBER && hint !== 'default') throw TypeError('Incorrect hint');\n return toPrimitive(anObject(this), hint != NUMBER);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZGF0ZS10by1wcmltaXRpdmUuanM/ODM4MSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGtCQUFrQixtQkFBTyxDQUFDLEVBQWlCO0FBQzNDOztBQUVBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjIxNS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG52YXIgTlVNQkVSID0gJ251bWJlcic7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGhpbnQpIHtcbiAgaWYgKGhpbnQgIT09ICdzdHJpbmcnICYmIGhpbnQgIT09IE5VTUJFUiAmJiBoaW50ICE9PSAnZGVmYXVsdCcpIHRocm93IFR5cGVFcnJvcignSW5jb3JyZWN0IGhpbnQnKTtcbiAgcmV0dXJuIHRvUHJpbWl0aXZlKGFuT2JqZWN0KHRoaXMpLCBoaW50ICE9IE5VTUJFUik7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///215\n")},function(module,exports,__webpack_require__){eval("// 22.1.2.2 / 15.4.3.2 Array.isArray(arg)\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Array', { isArray: __webpack_require__(54) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuaXMtYXJyYXkuanM/MmNhZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXOztBQUVqQyw2QkFBNkIsVUFBVSxtQkFBTyxDQUFDLEVBQWEsR0FBRyIsImZpbGUiOiIyMTYuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyMi4xLjIuMiAvIDE1LjQuMy4yIEFycmF5LmlzQXJyYXkoYXJnKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdBcnJheScsIHsgaXNBcnJheTogcmVxdWlyZSgnLi9faXMtYXJyYXknKSB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///216\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar ctx = __webpack_require__(19);\nvar $export = __webpack_require__(0);\nvar toObject = __webpack_require__(9);\nvar call = __webpack_require__(109);\nvar isArrayIter = __webpack_require__(81);\nvar toLength = __webpack_require__(6);\nvar createProperty = __webpack_require__(82);\nvar getIterFn = __webpack_require__(83);\n\n$export($export.S + $export.F * !__webpack_require__(57)(function (iter) { Array.from(iter); }), 'Array', {\n // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)\n from: function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n var O = toObject(arrayLike);\n var C = typeof this == 'function' ? this : Array;\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var index = 0;\n var iterFn = getIterFn(O);\n var length, result, step, iterator;\n if (mapping) mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);\n // if object isn't iterable or it's array with default iterator - use simple case\n if (iterFn != undefined && !(C == Array && isArrayIter(iterFn))) {\n for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) {\n createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);\n }\n } else {\n length = toLength(O.length);\n for (result = new C(length); length > index; index++) {\n createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);\n }\n }\n result.length = index;\n return result;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZnJvbS5qcz8xYzRjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsVUFBVSxtQkFBTyxDQUFDLEVBQVE7QUFDMUIsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsV0FBVyxtQkFBTyxDQUFDLEdBQWM7QUFDakMsa0JBQWtCLG1CQUFPLENBQUMsRUFBa0I7QUFDNUMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMscUJBQXFCLG1CQUFPLENBQUMsRUFBb0I7QUFDakQsZ0JBQWdCLG1CQUFPLENBQUMsRUFBNEI7O0FBRXBELGlDQUFpQyxtQkFBTyxDQUFDLEVBQWdCLG1CQUFtQixrQkFBa0IsRUFBRTtBQUNoRztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVEQUF1RCxnQ0FBZ0M7QUFDdkY7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLGtDQUFrQyxnQkFBZ0I7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyMTcuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4vX2l0ZXItY2FsbCcpO1xudmFyIGlzQXJyYXlJdGVyID0gcmVxdWlyZSgnLi9faXMtYXJyYXktaXRlcicpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSByZXF1aXJlKCcuL19jcmVhdGUtcHJvcGVydHknKTtcbnZhciBnZXRJdGVyRm4gPSByZXF1aXJlKCcuL2NvcmUuZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19pdGVyLWRldGVjdCcpKGZ1bmN0aW9uIChpdGVyKSB7IEFycmF5LmZyb20oaXRlcik7IH0pLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMi4xIEFycmF5LmZyb20oYXJyYXlMaWtlLCBtYXBmbiA9IHVuZGVmaW5lZCwgdGhpc0FyZyA9IHVuZGVmaW5lZClcbiAgZnJvbTogZnVuY3Rpb24gZnJvbShhcnJheUxpa2UgLyogLCBtYXBmbiA9IHVuZGVmaW5lZCwgdGhpc0FyZyA9IHVuZGVmaW5lZCAqLykge1xuICAgIHZhciBPID0gdG9PYmplY3QoYXJyYXlMaWtlKTtcbiAgICB2YXIgQyA9IHR5cGVvZiB0aGlzID09ICdmdW5jdGlvbicgPyB0aGlzIDogQXJyYXk7XG4gICAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBtYXBmbiA9IGFMZW4gPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkO1xuICAgIHZhciBtYXBwaW5nID0gbWFwZm4gIT09IHVuZGVmaW5lZDtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciBpdGVyRm4gPSBnZXRJdGVyRm4oTyk7XG4gICAgdmFyIGxlbmd0aCwgcmVzdWx0LCBzdGVwLCBpdGVyYXRvcjtcbiAgICBpZiAobWFwcGluZykgbWFwZm4gPSBjdHgobWFwZm4sIGFMZW4gPiAyID8gYXJndW1lbnRzWzJdIDogdW5kZWZpbmVkLCAyKTtcbiAgICAvLyBpZiBvYmplY3QgaXNuJ3QgaXRlcmFibGUgb3IgaXQncyBhcnJheSB3aXRoIGRlZmF1bHQgaXRlcmF0b3IgLSB1c2Ugc2ltcGxlIGNhc2VcbiAgICBpZiAoaXRlckZuICE9IHVuZGVmaW5lZCAmJiAhKEMgPT0gQXJyYXkgJiYgaXNBcnJheUl0ZXIoaXRlckZuKSkpIHtcbiAgICAgIGZvciAoaXRlcmF0b3IgPSBpdGVyRm4uY2FsbChPKSwgcmVzdWx0ID0gbmV3IEMoKTsgIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lOyBpbmRleCsrKSB7XG4gICAgICAgIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwgaW5kZXgsIG1hcHBpbmcgPyBjYWxsKGl0ZXJhdG9yLCBtYXBmbiwgW3N0ZXAudmFsdWUsIGluZGV4XSwgdHJ1ZSkgOiBzdGVwLnZhbHVlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICAgICAgZm9yIChyZXN1bHQgPSBuZXcgQyhsZW5ndGgpOyBsZW5ndGggPiBpbmRleDsgaW5kZXgrKykge1xuICAgICAgICBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIGluZGV4LCBtYXBwaW5nID8gbWFwZm4oT1tpbmRleF0sIGluZGV4KSA6IE9baW5kZXhdKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmVzdWx0Lmxlbmd0aCA9IGluZGV4O1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///217\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar createProperty = __webpack_require__(82);\n\n// WebKit Array.of isn't generic\n$export($export.S + $export.F * __webpack_require__(3)(function () {\n function F() { /* empty */ }\n return !(Array.of.call(F) instanceof F);\n}), 'Array', {\n // 22.1.2.3 Array.of( ...items)\n of: function of(/* ...args */) {\n var index = 0;\n var aLen = arguments.length;\n var result = new (typeof this == 'function' ? this : Array)(aLen);\n while (aLen > index) createProperty(result, index, arguments[index++]);\n result.length = aLen;\n return result;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkub2YuanM/ZTgwNCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLHFCQUFxQixtQkFBTyxDQUFDLEVBQW9COztBQUVqRDtBQUNBLGdDQUFnQyxtQkFBTyxDQUFDLENBQVU7QUFDbEQsZ0JBQWdCO0FBQ2hCO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjE4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX2NyZWF0ZS1wcm9wZXJ0eScpO1xuXG4vLyBXZWJLaXQgQXJyYXkub2YgaXNuJ3QgZ2VuZXJpY1xuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gRigpIHsgLyogZW1wdHkgKi8gfVxuICByZXR1cm4gIShBcnJheS5vZi5jYWxsKEYpIGluc3RhbmNlb2YgRik7XG59KSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjIuMyBBcnJheS5vZiggLi4uaXRlbXMpXG4gIG9mOiBmdW5jdGlvbiBvZigvKiAuLi5hcmdzICovKSB7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIHJlc3VsdCA9IG5ldyAodHlwZW9mIHRoaXMgPT0gJ2Z1bmN0aW9uJyA/IHRoaXMgOiBBcnJheSkoYUxlbik7XG4gICAgd2hpbGUgKGFMZW4gPiBpbmRleCkgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBpbmRleCwgYXJndW1lbnRzW2luZGV4KytdKTtcbiAgICByZXN1bHQubGVuZ3RoID0gYUxlbjtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///218\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// 22.1.3.13 Array.prototype.join(separator)\nvar $export = __webpack_require__(0);\nvar toIObject = __webpack_require__(15);\nvar arrayJoin = [].join;\n\n// fallback for not array-like strings\n$export($export.P + $export.F * (__webpack_require__(48) != Object || !__webpack_require__(22)(arrayJoin)), 'Array', {\n join: function join(separator) {\n return arrayJoin.call(toIObject(this), separator === undefined ? ',' : separator);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuam9pbi5qcz8zNzNmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDOztBQUVBO0FBQ0EsaUNBQWlDLG1CQUFPLENBQUMsRUFBWSxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFrQjtBQUMvRjtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjIxOS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIDIyLjEuMy4xMyBBcnJheS5wcm90b3R5cGUuam9pbihzZXBhcmF0b3IpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciBhcnJheUpvaW4gPSBbXS5qb2luO1xuXG4vLyBmYWxsYmFjayBmb3Igbm90IGFycmF5LWxpa2Ugc3RyaW5nc1xuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAocmVxdWlyZSgnLi9faW9iamVjdCcpICE9IE9iamVjdCB8fCAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKGFycmF5Sm9pbikpLCAnQXJyYXknLCB7XG4gIGpvaW46IGZ1bmN0aW9uIGpvaW4oc2VwYXJhdG9yKSB7XG4gICAgcmV0dXJuIGFycmF5Sm9pbi5jYWxsKHRvSU9iamVjdCh0aGlzKSwgc2VwYXJhdG9yID09PSB1bmRlZmluZWQgPyAnLCcgOiBzZXBhcmF0b3IpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///219\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar html = __webpack_require__(70);\nvar cof = __webpack_require__(20);\nvar toAbsoluteIndex = __webpack_require__(35);\nvar toLength = __webpack_require__(6);\nvar arraySlice = [].slice;\n\n// fallback for not array-like ES3 strings and DOM objects\n$export($export.P + $export.F * __webpack_require__(3)(function () {\n if (html) arraySlice.call(html);\n}), 'Array', {\n slice: function slice(begin, end) {\n var len = toLength(this.length);\n var klass = cof(this);\n end = end === undefined ? len : end;\n if (klass == 'Array') return arraySlice.call(this, begin, end);\n var start = toAbsoluteIndex(begin, len);\n var upTo = toAbsoluteIndex(end, len);\n var size = toLength(upTo - start);\n var cloned = new Array(size);\n var i = 0;\n for (; i < size; i++) cloned[i] = klass == 'String'\n ? this.charAt(start + i)\n : this[start + i];\n return cloned;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuc2xpY2UuanM/MjNiZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLFdBQVcsbUJBQU8sQ0FBQyxFQUFTO0FBQzVCLFVBQVUsbUJBQU8sQ0FBQyxFQUFRO0FBQzFCLHNCQUFzQixtQkFBTyxDQUFDLEVBQXNCO0FBQ3BELGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDOztBQUVBO0FBQ0EsZ0NBQWdDLG1CQUFPLENBQUMsQ0FBVTtBQUNsRDtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsVUFBVTtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjIwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBodG1sID0gcmVxdWlyZSgnLi9faHRtbCcpO1xudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4vX3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBhcnJheVNsaWNlID0gW10uc2xpY2U7XG5cbi8vIGZhbGxiYWNrIGZvciBub3QgYXJyYXktbGlrZSBFUzMgc3RyaW5ncyBhbmQgRE9NIG9iamVjdHNcbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIGlmIChodG1sKSBhcnJheVNsaWNlLmNhbGwoaHRtbCk7XG59KSwgJ0FycmF5Jywge1xuICBzbGljZTogZnVuY3Rpb24gc2xpY2UoYmVnaW4sIGVuZCkge1xuICAgIHZhciBsZW4gPSB0b0xlbmd0aCh0aGlzLmxlbmd0aCk7XG4gICAgdmFyIGtsYXNzID0gY29mKHRoaXMpO1xuICAgIGVuZCA9IGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuIDogZW5kO1xuICAgIGlmIChrbGFzcyA9PSAnQXJyYXknKSByZXR1cm4gYXJyYXlTbGljZS5jYWxsKHRoaXMsIGJlZ2luLCBlbmQpO1xuICAgIHZhciBzdGFydCA9IHRvQWJzb2x1dGVJbmRleChiZWdpbiwgbGVuKTtcbiAgICB2YXIgdXBUbyA9IHRvQWJzb2x1dGVJbmRleChlbmQsIGxlbik7XG4gICAgdmFyIHNpemUgPSB0b0xlbmd0aCh1cFRvIC0gc3RhcnQpO1xuICAgIHZhciBjbG9uZWQgPSBuZXcgQXJyYXkoc2l6ZSk7XG4gICAgdmFyIGkgPSAwO1xuICAgIGZvciAoOyBpIDwgc2l6ZTsgaSsrKSBjbG9uZWRbaV0gPSBrbGFzcyA9PSAnU3RyaW5nJ1xuICAgICAgPyB0aGlzLmNoYXJBdChzdGFydCArIGkpXG4gICAgICA6IHRoaXNbc3RhcnQgKyBpXTtcbiAgICByZXR1cm4gY2xvbmVkO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///220\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar aFunction = __webpack_require__(10);\nvar toObject = __webpack_require__(9);\nvar fails = __webpack_require__(3);\nvar $sort = [].sort;\nvar test = [1, 2, 3];\n\n$export($export.P + $export.F * (fails(function () {\n // IE8-\n test.sort(undefined);\n}) || !fails(function () {\n // V8 bug\n test.sort(null);\n // Old WebKit\n}) || !__webpack_require__(22)($sort)), 'Array', {\n // 22.1.3.25 Array.prototype.sort(comparefn)\n sort: function sort(comparefn) {\n return comparefn === undefined\n ? $sort.call(toObject(this))\n : $sort.call(toObject(this), aFunction(comparefn));\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuc29ydC5qcz81NWRkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2QyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxZQUFZLG1CQUFPLENBQUMsQ0FBVTtBQUM5QjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQSxDQUFDLE1BQU0sbUJBQU8sQ0FBQyxFQUFrQjtBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjIyMS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyICRzb3J0ID0gW10uc29ydDtcbnZhciB0ZXN0ID0gWzEsIDIsIDNdO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIChmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIElFOC1cbiAgdGVzdC5zb3J0KHVuZGVmaW5lZCk7XG59KSB8fCAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBWOCBidWdcbiAgdGVzdC5zb3J0KG51bGwpO1xuICAvLyBPbGQgV2ViS2l0XG59KSB8fCAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKCRzb3J0KSksICdBcnJheScsIHtcbiAgLy8gMjIuMS4zLjI1IEFycmF5LnByb3RvdHlwZS5zb3J0KGNvbXBhcmVmbilcbiAgc29ydDogZnVuY3Rpb24gc29ydChjb21wYXJlZm4pIHtcbiAgICByZXR1cm4gY29tcGFyZWZuID09PSB1bmRlZmluZWRcbiAgICAgID8gJHNvcnQuY2FsbCh0b09iamVjdCh0aGlzKSlcbiAgICAgIDogJHNvcnQuY2FsbCh0b09iamVjdCh0aGlzKSwgYUZ1bmN0aW9uKGNvbXBhcmVmbikpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///221\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar $forEach = __webpack_require__(26)(0);\nvar STRICT = __webpack_require__(22)([].forEach, true);\n\n$export($export.P + $export.F * !STRICT, 'Array', {\n // 22.1.3.10 / 15.4.4.18 Array.prototype.forEach(callbackfn [, thisArg])\n forEach: function forEach(callbackfn /* , thisArg */) {\n return $forEach(this, callbackfn, arguments[1]);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZm9yLWVhY2guanM/ZjNlMiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyxFQUFrQjtBQUN6QyxhQUFhLG1CQUFPLENBQUMsRUFBa0I7O0FBRXZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjIyMi5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGZvckVhY2ggPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJykoMCk7XG52YXIgU1RSSUNUID0gcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKFtdLmZvckVhY2gsIHRydWUpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFTVFJJQ1QsICdBcnJheScsIHtcbiAgLy8gMjIuMS4zLjEwIC8gMTUuNC40LjE4IEFycmF5LnByb3RvdHlwZS5mb3JFYWNoKGNhbGxiYWNrZm4gWywgdGhpc0FyZ10pXG4gIGZvckVhY2g6IGZ1bmN0aW9uIGZvckVhY2goY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJGZvckVhY2godGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzWzFdKTtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///222\n")},function(module,exports,__webpack_require__){eval("var isObject = __webpack_require__(4);\nvar isArray = __webpack_require__(54);\nvar SPECIES = __webpack_require__(5)('species');\n\nmodule.exports = function (original) {\n var C;\n if (isArray(original)) {\n C = original.constructor;\n // cross-realm fallback\n if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;\n if (isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n } return C === undefined ? Array : C;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktc3BlY2llcy1jb25zdHJ1Y3Rvci5qcz9lODUzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGNBQWMsbUJBQU8sQ0FBQyxFQUFhO0FBQ25DLGNBQWMsbUJBQU8sQ0FBQyxDQUFROztBQUU5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCIsImZpbGUiOiIyMjMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi9faXMtYXJyYXknKTtcbnZhciBTUEVDSUVTID0gcmVxdWlyZSgnLi9fd2tzJykoJ3NwZWNpZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3JpZ2luYWwpIHtcbiAgdmFyIEM7XG4gIGlmIChpc0FycmF5KG9yaWdpbmFsKSkge1xuICAgIEMgPSBvcmlnaW5hbC5jb25zdHJ1Y3RvcjtcbiAgICAvLyBjcm9zcy1yZWFsbSBmYWxsYmFja1xuICAgIGlmICh0eXBlb2YgQyA9PSAnZnVuY3Rpb24nICYmIChDID09PSBBcnJheSB8fCBpc0FycmF5KEMucHJvdG90eXBlKSkpIEMgPSB1bmRlZmluZWQ7XG4gICAgaWYgKGlzT2JqZWN0KEMpKSB7XG4gICAgICBDID0gQ1tTUEVDSUVTXTtcbiAgICAgIGlmIChDID09PSBudWxsKSBDID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfSByZXR1cm4gQyA9PT0gdW5kZWZpbmVkID8gQXJyYXkgOiBDO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///223\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar $map = __webpack_require__(26)(1);\n\n$export($export.P + $export.F * !__webpack_require__(22)([].map, true), 'Array', {\n // 22.1.3.15 / 15.4.4.19 Array.prototype.map(callbackfn [, thisArg])\n map: function map(callbackfn /* , thisArg */) {\n return $map(this, callbackfn, arguments[1]);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkubWFwLmpzPzZkNjciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxXQUFXLG1CQUFPLENBQUMsRUFBa0I7O0FBRXJDLGlDQUFpQyxtQkFBTyxDQUFDLEVBQWtCO0FBQzNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyMjQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRtYXAgPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJykoMSk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogIXJlcXVpcmUoJy4vX3N0cmljdC1tZXRob2QnKShbXS5tYXAsIHRydWUpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy4xNSAvIDE1LjQuNC4xOSBBcnJheS5wcm90b3R5cGUubWFwKGNhbGxiYWNrZm4gWywgdGhpc0FyZ10pXG4gIG1hcDogZnVuY3Rpb24gbWFwKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgcmV0dXJuICRtYXAodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzWzFdKTtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///224\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar $filter = __webpack_require__(26)(2);\n\n$export($export.P + $export.F * !__webpack_require__(22)([].filter, true), 'Array', {\n // 22.1.3.7 / 15.4.4.20 Array.prototype.filter(callbackfn [, thisArg])\n filter: function filter(callbackfn /* , thisArg */) {\n return $filter(this, callbackfn, arguments[1]);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZmlsdGVyLmpzP2QyNWYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxjQUFjLG1CQUFPLENBQUMsRUFBa0I7O0FBRXhDLGlDQUFpQyxtQkFBTyxDQUFDLEVBQWtCO0FBQzNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyMjUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRmaWx0ZXIgPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJykoMik7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogIXJlcXVpcmUoJy4vX3N0cmljdC1tZXRob2QnKShbXS5maWx0ZXIsIHRydWUpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy43IC8gMTUuNC40LjIwIEFycmF5LnByb3RvdHlwZS5maWx0ZXIoY2FsbGJhY2tmbiBbLCB0aGlzQXJnXSlcbiAgZmlsdGVyOiBmdW5jdGlvbiBmaWx0ZXIoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJGZpbHRlcih0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHNbMV0pO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///225\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar $some = __webpack_require__(26)(3);\n\n$export($export.P + $export.F * !__webpack_require__(22)([].some, true), 'Array', {\n // 22.1.3.23 / 15.4.4.17 Array.prototype.some(callbackfn [, thisArg])\n some: function some(callbackfn /* , thisArg */) {\n return $some(this, callbackfn, arguments[1]);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuc29tZS5qcz83NTlmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsWUFBWSxtQkFBTyxDQUFDLEVBQWtCOztBQUV0QyxpQ0FBaUMsbUJBQU8sQ0FBQyxFQUFrQjtBQUMzRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjI2LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkc29tZSA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKSgzKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKFtdLnNvbWUsIHRydWUpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy4yMyAvIDE1LjQuNC4xNyBBcnJheS5wcm90b3R5cGUuc29tZShjYWxsYmFja2ZuIFssIHRoaXNBcmddKVxuICBzb21lOiBmdW5jdGlvbiBzb21lKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgcmV0dXJuICRzb21lKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50c1sxXSk7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///226\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar $every = __webpack_require__(26)(4);\n\n$export($export.P + $export.F * !__webpack_require__(22)([].every, true), 'Array', {\n // 22.1.3.5 / 15.4.4.16 Array.prototype.every(callbackfn [, thisArg])\n every: function every(callbackfn /* , thisArg */) {\n return $every(this, callbackfn, arguments[1]);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZXZlcnkuanM/NjA5NSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGFBQWEsbUJBQU8sQ0FBQyxFQUFrQjs7QUFFdkMsaUNBQWlDLG1CQUFPLENBQUMsRUFBa0I7QUFDM0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjIyNy5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGV2ZXJ5ID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpKDQpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoW10uZXZlcnksIHRydWUpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy41IC8gMTUuNC40LjE2IEFycmF5LnByb3RvdHlwZS5ldmVyeShjYWxsYmFja2ZuIFssIHRoaXNBcmddKVxuICBldmVyeTogZnVuY3Rpb24gZXZlcnkoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJGV2ZXJ5KHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50c1sxXSk7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///227\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar $reduce = __webpack_require__(110);\n\n$export($export.P + $export.F * !__webpack_require__(22)([].reduce, true), 'Array', {\n // 22.1.3.18 / 15.4.4.21 Array.prototype.reduce(callbackfn [, initialValue])\n reduce: function reduce(callbackfn /* , initialValue */) {\n return $reduce(this, callbackfn, arguments.length, arguments[1], false);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkucmVkdWNlLmpzPzBjZDgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxjQUFjLG1CQUFPLENBQUMsR0FBaUI7O0FBRXZDLGlDQUFpQyxtQkFBTyxDQUFDLEVBQWtCO0FBQzNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyMjguanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRyZWR1Y2UgPSByZXF1aXJlKCcuL19hcnJheS1yZWR1Y2UnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKFtdLnJlZHVjZSwgdHJ1ZSksICdBcnJheScsIHtcbiAgLy8gMjIuMS4zLjE4IC8gMTUuNC40LjIxIEFycmF5LnByb3RvdHlwZS5yZWR1Y2UoY2FsbGJhY2tmbiBbLCBpbml0aWFsVmFsdWVdKVxuICByZWR1Y2U6IGZ1bmN0aW9uIHJlZHVjZShjYWxsYmFja2ZuIC8qICwgaW5pdGlhbFZhbHVlICovKSB7XG4gICAgcmV0dXJuICRyZWR1Y2UodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCwgYXJndW1lbnRzWzFdLCBmYWxzZSk7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///228\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar $reduce = __webpack_require__(110);\n\n$export($export.P + $export.F * !__webpack_require__(22)([].reduceRight, true), 'Array', {\n // 22.1.3.19 / 15.4.4.22 Array.prototype.reduceRight(callbackfn [, initialValue])\n reduceRight: function reduceRight(callbackfn /* , initialValue */) {\n return $reduce(this, callbackfn, arguments.length, arguments[1], true);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkucmVkdWNlLXJpZ2h0LmpzPzQ4ZjgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxjQUFjLG1CQUFPLENBQUMsR0FBaUI7O0FBRXZDLGlDQUFpQyxtQkFBTyxDQUFDLEVBQWtCO0FBQzNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyMjkuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRyZWR1Y2UgPSByZXF1aXJlKCcuL19hcnJheS1yZWR1Y2UnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKFtdLnJlZHVjZVJpZ2h0LCB0cnVlKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMTkgLyAxNS40LjQuMjIgQXJyYXkucHJvdG90eXBlLnJlZHVjZVJpZ2h0KGNhbGxiYWNrZm4gWywgaW5pdGlhbFZhbHVlXSlcbiAgcmVkdWNlUmlnaHQ6IGZ1bmN0aW9uIHJlZHVjZVJpZ2h0KGNhbGxiYWNrZm4gLyogLCBpbml0aWFsVmFsdWUgKi8pIHtcbiAgICByZXR1cm4gJHJlZHVjZSh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoLCBhcmd1bWVudHNbMV0sIHRydWUpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///229\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar $indexOf = __webpack_require__(52)(false);\nvar $native = [].indexOf;\nvar NEGATIVE_ZERO = !!$native && 1 / [1].indexOf(1, -0) < 0;\n\n$export($export.P + $export.F * (NEGATIVE_ZERO || !__webpack_require__(22)($native)), 'Array', {\n // 22.1.3.11 / 15.4.4.14 Array.prototype.indexOf(searchElement [, fromIndex])\n indexOf: function indexOf(searchElement /* , fromIndex = 0 */) {\n return NEGATIVE_ZERO\n // convert -0 to +0\n ? $native.apply(this, arguments) || 0\n : $indexOf(this, searchElement, arguments[1]);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuaW5kZXgtb2YuanM/NTdlNyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyxFQUFtQjtBQUMxQztBQUNBOztBQUVBLG1EQUFtRCxtQkFBTyxDQUFDLEVBQWtCO0FBQzdFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyMzAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRpbmRleE9mID0gcmVxdWlyZSgnLi9fYXJyYXktaW5jbHVkZXMnKShmYWxzZSk7XG52YXIgJG5hdGl2ZSA9IFtdLmluZGV4T2Y7XG52YXIgTkVHQVRJVkVfWkVSTyA9ICEhJG5hdGl2ZSAmJiAxIC8gWzFdLmluZGV4T2YoMSwgLTApIDwgMDtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoTkVHQVRJVkVfWkVSTyB8fCAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKCRuYXRpdmUpKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMTEgLyAxNS40LjQuMTQgQXJyYXkucHJvdG90eXBlLmluZGV4T2Yoc2VhcmNoRWxlbWVudCBbLCBmcm9tSW5kZXhdKVxuICBpbmRleE9mOiBmdW5jdGlvbiBpbmRleE9mKHNlYXJjaEVsZW1lbnQgLyogLCBmcm9tSW5kZXggPSAwICovKSB7XG4gICAgcmV0dXJuIE5FR0FUSVZFX1pFUk9cbiAgICAgIC8vIGNvbnZlcnQgLTAgdG8gKzBcbiAgICAgID8gJG5hdGl2ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IDBcbiAgICAgIDogJGluZGV4T2YodGhpcywgc2VhcmNoRWxlbWVudCwgYXJndW1lbnRzWzFdKTtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///230\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar toIObject = __webpack_require__(15);\nvar toInteger = __webpack_require__(21);\nvar toLength = __webpack_require__(6);\nvar $native = [].lastIndexOf;\nvar NEGATIVE_ZERO = !!$native && 1 / [1].lastIndexOf(1, -0) < 0;\n\n$export($export.P + $export.F * (NEGATIVE_ZERO || !__webpack_require__(22)($native)), 'Array', {\n // 22.1.3.14 / 15.4.4.15 Array.prototype.lastIndexOf(searchElement [, fromIndex])\n lastIndexOf: function lastIndexOf(searchElement /* , fromIndex = @[*-1] */) {\n // convert -0 to +0\n if (NEGATIVE_ZERO) return $native.apply(this, arguments) || 0;\n var O = toIObject(this);\n var length = toLength(O.length);\n var index = length - 1;\n if (arguments.length > 1) index = Math.min(index, toInteger(arguments[1]));\n if (index < 0) index = length + index;\n for (;index >= 0; index--) if (index in O) if (O[index] === searchElement) return index || 0;\n return -1;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkubGFzdC1pbmRleC1vZi5qcz85ODY1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2QyxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDO0FBQ0E7O0FBRUEsbURBQW1ELG1CQUFPLENBQUMsRUFBa0I7QUFDN0U7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVSxXQUFXO0FBQ3JCO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjIzMS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyICRuYXRpdmUgPSBbXS5sYXN0SW5kZXhPZjtcbnZhciBORUdBVElWRV9aRVJPID0gISEkbmF0aXZlICYmIDEgLyBbMV0ubGFzdEluZGV4T2YoMSwgLTApIDwgMDtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoTkVHQVRJVkVfWkVSTyB8fCAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKCRuYXRpdmUpKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMTQgLyAxNS40LjQuMTUgQXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mKHNlYXJjaEVsZW1lbnQgWywgZnJvbUluZGV4XSlcbiAgbGFzdEluZGV4T2Y6IGZ1bmN0aW9uIGxhc3RJbmRleE9mKHNlYXJjaEVsZW1lbnQgLyogLCBmcm9tSW5kZXggPSBAWyotMV0gKi8pIHtcbiAgICAvLyBjb252ZXJ0IC0wIHRvICswXG4gICAgaWYgKE5FR0FUSVZFX1pFUk8pIHJldHVybiAkbmF0aXZlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgMDtcbiAgICB2YXIgTyA9IHRvSU9iamVjdCh0aGlzKTtcbiAgICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICAgIHZhciBpbmRleCA9IGxlbmd0aCAtIDE7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSBpbmRleCA9IE1hdGgubWluKGluZGV4LCB0b0ludGVnZXIoYXJndW1lbnRzWzFdKSk7XG4gICAgaWYgKGluZGV4IDwgMCkgaW5kZXggPSBsZW5ndGggKyBpbmRleDtcbiAgICBmb3IgKDtpbmRleCA+PSAwOyBpbmRleC0tKSBpZiAoaW5kZXggaW4gTykgaWYgKE9baW5kZXhdID09PSBzZWFyY2hFbGVtZW50KSByZXR1cm4gaW5kZXggfHwgMDtcbiAgICByZXR1cm4gLTE7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///231\n")},function(module,exports,__webpack_require__){eval("// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\nvar $export = __webpack_require__(0);\n\n$export($export.P, 'Array', { copyWithin: __webpack_require__(111) });\n\n__webpack_require__(31)('copyWithin');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuY29weS13aXRoaW4uanM/NzQ0ZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXOztBQUVqQyw2QkFBNkIsYUFBYSxtQkFBTyxDQUFDLEdBQXNCLEdBQUc7O0FBRTNFLG1CQUFPLENBQUMsRUFBdUIiLCJmaWxlIjoiMjMyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjIuMS4zLjMgQXJyYXkucHJvdG90eXBlLmNvcHlXaXRoaW4odGFyZ2V0LCBzdGFydCwgZW5kID0gdGhpcy5sZW5ndGgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCwgJ0FycmF5JywgeyBjb3B5V2l0aGluOiByZXF1aXJlKCcuL19hcnJheS1jb3B5LXdpdGhpbicpIH0pO1xuXG5yZXF1aXJlKCcuL19hZGQtdG8tdW5zY29wYWJsZXMnKSgnY29weVdpdGhpbicpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///232\n")},function(module,exports,__webpack_require__){eval("// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\nvar $export = __webpack_require__(0);\n\n$export($export.P, 'Array', { fill: __webpack_require__(85) });\n\n__webpack_require__(31)('fill');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZmlsbC5qcz82YzdiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDLDZCQUE2QixPQUFPLG1CQUFPLENBQUMsRUFBZSxHQUFHOztBQUU5RCxtQkFBTyxDQUFDLEVBQXVCIiwiZmlsZSI6IjIzMy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDIyLjEuMy42IEFycmF5LnByb3RvdHlwZS5maWxsKHZhbHVlLCBzdGFydCA9IDAsIGVuZCA9IHRoaXMubGVuZ3RoKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdBcnJheScsIHsgZmlsbDogcmVxdWlyZSgnLi9fYXJyYXktZmlsbCcpIH0pO1xuXG5yZXF1aXJlKCcuL19hZGQtdG8tdW5zY29wYWJsZXMnKSgnZmlsbCcpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///233\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// 22.1.3.8 Array.prototype.find(predicate, thisArg = undefined)\nvar $export = __webpack_require__(0);\nvar $find = __webpack_require__(26)(5);\nvar KEY = 'find';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n find: function find(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n__webpack_require__(31)(KEY);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZmluZC5qcz83NTE0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxZQUFZLG1CQUFPLENBQUMsRUFBa0I7QUFDdEM7QUFDQTtBQUNBO0FBQ0EsMENBQTBDLGdCQUFnQixFQUFFO0FBQzVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELG1CQUFPLENBQUMsRUFBdUIiLCJmaWxlIjoiMjM0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gMjIuMS4zLjggQXJyYXkucHJvdG90eXBlLmZpbmQocHJlZGljYXRlLCB0aGlzQXJnID0gdW5kZWZpbmVkKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkZmluZCA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKSg1KTtcbnZhciBLRVkgPSAnZmluZCc7XG52YXIgZm9yY2VkID0gdHJ1ZTtcbi8vIFNob3VsZG4ndCBza2lwIGhvbGVzXG5pZiAoS0VZIGluIFtdKSBBcnJheSgxKVtLRVldKGZ1bmN0aW9uICgpIHsgZm9yY2VkID0gZmFsc2U7IH0pO1xuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiBmb3JjZWQsICdBcnJheScsIHtcbiAgZmluZDogZnVuY3Rpb24gZmluZChjYWxsYmFja2ZuIC8qICwgdGhhdCA9IHVuZGVmaW5lZCAqLykge1xuICAgIHJldHVybiAkZmluZCh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xucmVxdWlyZSgnLi9fYWRkLXRvLXVuc2NvcGFibGVzJykoS0VZKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///234\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// 22.1.3.9 Array.prototype.findIndex(predicate, thisArg = undefined)\nvar $export = __webpack_require__(0);\nvar $find = __webpack_require__(26)(6);\nvar KEY = 'findIndex';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n findIndex: function findIndex(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n__webpack_require__(31)(KEY);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZmluZC1pbmRleC5qcz8yMGQ2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxZQUFZLG1CQUFPLENBQUMsRUFBa0I7QUFDdEM7QUFDQTtBQUNBO0FBQ0EsMENBQTBDLGdCQUFnQixFQUFFO0FBQzVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELG1CQUFPLENBQUMsRUFBdUIiLCJmaWxlIjoiMjM1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gMjIuMS4zLjkgQXJyYXkucHJvdG90eXBlLmZpbmRJbmRleChwcmVkaWNhdGUsIHRoaXNBcmcgPSB1bmRlZmluZWQpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRmaW5kID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpKDYpO1xudmFyIEtFWSA9ICdmaW5kSW5kZXgnO1xudmFyIGZvcmNlZCA9IHRydWU7XG4vLyBTaG91bGRuJ3Qgc2tpcCBob2xlc1xuaWYgKEtFWSBpbiBbXSkgQXJyYXkoMSlbS0VZXShmdW5jdGlvbiAoKSB7IGZvcmNlZCA9IGZhbHNlOyB9KTtcbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogZm9yY2VkLCAnQXJyYXknLCB7XG4gIGZpbmRJbmRleDogZnVuY3Rpb24gZmluZEluZGV4KGNhbGxiYWNrZm4gLyogLCB0aGF0ID0gdW5kZWZpbmVkICovKSB7XG4gICAgcmV0dXJuICRmaW5kKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG5yZXF1aXJlKCcuL19hZGQtdG8tdW5zY29wYWJsZXMnKShLRVkpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///235\n")},function(module,exports,__webpack_require__){eval("__webpack_require__(38)('Array');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuc3BlY2llcy5qcz9kMDRmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLG1CQUFPLENBQUMsRUFBZ0IiLCJmaWxlIjoiMjM2LmpzIiwic291cmNlc0NvbnRlbnQiOlsicmVxdWlyZSgnLi9fc2V0LXNwZWNpZXMnKSgnQXJyYXknKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///236\n")},function(module,exports,__webpack_require__){eval("var global = __webpack_require__(2);\nvar inheritIfRequired = __webpack_require__(73);\nvar dP = __webpack_require__(8).f;\nvar gOPN = __webpack_require__(37).f;\nvar isRegExp = __webpack_require__(56);\nvar $flags = __webpack_require__(50);\nvar $RegExp = global.RegExp;\nvar Base = $RegExp;\nvar proto = $RegExp.prototype;\nvar re1 = /a/g;\nvar re2 = /a/g;\n// \"new\" creates a new object, old webkit buggy here\nvar CORRECT_NEW = new $RegExp(re1) !== re1;\n\nif (__webpack_require__(7) && (!CORRECT_NEW || __webpack_require__(3)(function () {\n re2[__webpack_require__(5)('match')] = false;\n // RegExp constructor can alter flags and IsRegExp works correct with @@match\n return $RegExp(re1) != re1 || $RegExp(re2) == re2 || $RegExp(re1, 'i') != '/a/i';\n}))) {\n $RegExp = function RegExp(p, f) {\n var tiRE = this instanceof $RegExp;\n var piRE = isRegExp(p);\n var fiU = f === undefined;\n return !tiRE && piRE && p.constructor === $RegExp && fiU ? p\n : inheritIfRequired(CORRECT_NEW\n ? new Base(piRE && !fiU ? p.source : p, f)\n : Base((piRE = p instanceof $RegExp) ? p.source : p, piRE && fiU ? $flags.call(p) : f)\n , tiRE ? this : proto, $RegExp);\n };\n var proxy = function (key) {\n key in $RegExp || dP($RegExp, key, {\n configurable: true,\n get: function () { return Base[key]; },\n set: function (it) { Base[key] = it; }\n });\n };\n for (var keys = gOPN(Base), i = 0; keys.length > i;) proxy(keys[i++]);\n proto.constructor = $RegExp;\n $RegExp.prototype = proto;\n __webpack_require__(12)(global, 'RegExp', $RegExp);\n}\n\n__webpack_require__(38)('RegExp');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLmNvbnN0cnVjdG9yLmpzPzNiMmIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsYUFBYSxtQkFBTyxDQUFDLENBQVc7QUFDaEMsd0JBQXdCLG1CQUFPLENBQUMsRUFBd0I7QUFDeEQsU0FBUyxtQkFBTyxDQUFDLENBQWM7QUFDL0IsV0FBVyxtQkFBTyxDQUFDLEVBQWdCO0FBQ25DLGVBQWUsbUJBQU8sQ0FBQyxFQUFjO0FBQ3JDLGFBQWEsbUJBQU8sQ0FBQyxFQUFVO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLElBQUksbUJBQU8sQ0FBQyxDQUFnQixzQkFBc0IsbUJBQU8sQ0FBQyxDQUFVO0FBQ3BFLE1BQU0sbUJBQU8sQ0FBQyxDQUFRO0FBQ3RCO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0Isa0JBQWtCLEVBQUU7QUFDNUMsMEJBQTBCLGdCQUFnQjtBQUMxQyxLQUFLO0FBQ0w7QUFDQSxvQ0FBb0MsaUJBQWlCO0FBQ3JEO0FBQ0E7QUFDQSxFQUFFLG1CQUFPLENBQUMsRUFBYTtBQUN2Qjs7QUFFQSxtQkFBTyxDQUFDLEVBQWdCIiwiZmlsZSI6IjIzNy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBpbmhlcml0SWZSZXF1aXJlZCA9IHJlcXVpcmUoJy4vX2luaGVyaXQtaWYtcmVxdWlyZWQnKTtcbnZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgZ09QTiA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJykuZjtcbnZhciBpc1JlZ0V4cCA9IHJlcXVpcmUoJy4vX2lzLXJlZ2V4cCcpO1xudmFyICRmbGFncyA9IHJlcXVpcmUoJy4vX2ZsYWdzJyk7XG52YXIgJFJlZ0V4cCA9IGdsb2JhbC5SZWdFeHA7XG52YXIgQmFzZSA9ICRSZWdFeHA7XG52YXIgcHJvdG8gPSAkUmVnRXhwLnByb3RvdHlwZTtcbnZhciByZTEgPSAvYS9nO1xudmFyIHJlMiA9IC9hL2c7XG4vLyBcIm5ld1wiIGNyZWF0ZXMgYSBuZXcgb2JqZWN0LCBvbGQgd2Via2l0IGJ1Z2d5IGhlcmVcbnZhciBDT1JSRUNUX05FVyA9IG5ldyAkUmVnRXhwKHJlMSkgIT09IHJlMTtcblxuaWYgKHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgKCFDT1JSRUNUX05FVyB8fCByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgcmUyW3JlcXVpcmUoJy4vX3drcycpKCdtYXRjaCcpXSA9IGZhbHNlO1xuICAvLyBSZWdFeHAgY29uc3RydWN0b3IgY2FuIGFsdGVyIGZsYWdzIGFuZCBJc1JlZ0V4cCB3b3JrcyBjb3JyZWN0IHdpdGggQEBtYXRjaFxuICByZXR1cm4gJFJlZ0V4cChyZTEpICE9IHJlMSB8fCAkUmVnRXhwKHJlMikgPT0gcmUyIHx8ICRSZWdFeHAocmUxLCAnaScpICE9ICcvYS9pJztcbn0pKSkge1xuICAkUmVnRXhwID0gZnVuY3Rpb24gUmVnRXhwKHAsIGYpIHtcbiAgICB2YXIgdGlSRSA9IHRoaXMgaW5zdGFuY2VvZiAkUmVnRXhwO1xuICAgIHZhciBwaVJFID0gaXNSZWdFeHAocCk7XG4gICAgdmFyIGZpVSA9IGYgPT09IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gIXRpUkUgJiYgcGlSRSAmJiBwLmNvbnN0cnVjdG9yID09PSAkUmVnRXhwICYmIGZpVSA/IHBcbiAgICAgIDogaW5oZXJpdElmUmVxdWlyZWQoQ09SUkVDVF9ORVdcbiAgICAgICAgPyBuZXcgQmFzZShwaVJFICYmICFmaVUgPyBwLnNvdXJjZSA6IHAsIGYpXG4gICAgICAgIDogQmFzZSgocGlSRSA9IHAgaW5zdGFuY2VvZiAkUmVnRXhwKSA/IHAuc291cmNlIDogcCwgcGlSRSAmJiBmaVUgPyAkZmxhZ3MuY2FsbChwKSA6IGYpXG4gICAgICAsIHRpUkUgPyB0aGlzIDogcHJvdG8sICRSZWdFeHApO1xuICB9O1xuICB2YXIgcHJveHkgPSBmdW5jdGlvbiAoa2V5KSB7XG4gICAga2V5IGluICRSZWdFeHAgfHwgZFAoJFJlZ0V4cCwga2V5LCB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIEJhc2Vba2V5XTsgfSxcbiAgICAgIHNldDogZnVuY3Rpb24gKGl0KSB7IEJhc2Vba2V5XSA9IGl0OyB9XG4gICAgfSk7XG4gIH07XG4gIGZvciAodmFyIGtleXMgPSBnT1BOKEJhc2UpLCBpID0gMDsga2V5cy5sZW5ndGggPiBpOykgcHJveHkoa2V5c1tpKytdKTtcbiAgcHJvdG8uY29uc3RydWN0b3IgPSAkUmVnRXhwO1xuICAkUmVnRXhwLnByb3RvdHlwZSA9IHByb3RvO1xuICByZXF1aXJlKCcuL19yZWRlZmluZScpKGdsb2JhbCwgJ1JlZ0V4cCcsICRSZWdFeHApO1xufVxuXG5yZXF1aXJlKCcuL19zZXQtc3BlY2llcycpKCdSZWdFeHAnKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///237\n")},function(module,exports,__webpack_require__){"use strict";eval("\n__webpack_require__(114);\nvar anObject = __webpack_require__(1);\nvar $flags = __webpack_require__(50);\nvar DESCRIPTORS = __webpack_require__(7);\nvar TO_STRING = 'toString';\nvar $toString = /./[TO_STRING];\n\nvar define = function (fn) {\n __webpack_require__(12)(RegExp.prototype, TO_STRING, fn, true);\n};\n\n// 21.2.5.14 RegExp.prototype.toString()\nif (__webpack_require__(3)(function () { return $toString.call({ source: 'a', flags: 'b' }) != '/a/b'; })) {\n define(function toString() {\n var R = anObject(this);\n return '/'.concat(R.source, '/',\n 'flags' in R ? R.flags : !DESCRIPTORS && R instanceof RegExp ? $flags.call(R) : undefined);\n });\n// FF44- RegExp#toString has a wrong name\n} else if ($toString.name != TO_STRING) {\n define(function toString() {\n return $toString.call(this);\n });\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLnRvLXN0cmluZy5qcz82YjU0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsbUJBQU8sQ0FBQyxHQUFvQjtBQUM1QixlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxhQUFhLG1CQUFPLENBQUMsRUFBVTtBQUMvQixrQkFBa0IsbUJBQU8sQ0FBQyxDQUFnQjtBQUMxQztBQUNBOztBQUVBO0FBQ0EsRUFBRSxtQkFBTyxDQUFDLEVBQWE7QUFDdkI7O0FBRUE7QUFDQSxJQUFJLG1CQUFPLENBQUMsQ0FBVSxlQUFlLHdCQUF3QiwwQkFBMEIsWUFBWSxFQUFFO0FBQ3JHO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxHQUFHO0FBQ0giLCJmaWxlIjoiMjM4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi9lczYucmVnZXhwLmZsYWdzJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciAkZmxhZ3MgPSByZXF1aXJlKCcuL19mbGFncycpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKTtcbnZhciBUT19TVFJJTkcgPSAndG9TdHJpbmcnO1xudmFyICR0b1N0cmluZyA9IC8uL1tUT19TVFJJTkddO1xuXG52YXIgZGVmaW5lID0gZnVuY3Rpb24gKGZuKSB7XG4gIHJlcXVpcmUoJy4vX3JlZGVmaW5lJykoUmVnRXhwLnByb3RvdHlwZSwgVE9fU1RSSU5HLCBmbiwgdHJ1ZSk7XG59O1xuXG4vLyAyMS4yLjUuMTQgUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZygpXG5pZiAocmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7IHJldHVybiAkdG9TdHJpbmcuY2FsbCh7IHNvdXJjZTogJ2EnLCBmbGFnczogJ2InIH0pICE9ICcvYS9iJzsgfSkpIHtcbiAgZGVmaW5lKGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHZhciBSID0gYW5PYmplY3QodGhpcyk7XG4gICAgcmV0dXJuICcvJy5jb25jYXQoUi5zb3VyY2UsICcvJyxcbiAgICAgICdmbGFncycgaW4gUiA/IFIuZmxhZ3MgOiAhREVTQ1JJUFRPUlMgJiYgUiBpbnN0YW5jZW9mIFJlZ0V4cCA/ICRmbGFncy5jYWxsKFIpIDogdW5kZWZpbmVkKTtcbiAgfSk7XG4vLyBGRjQ0LSBSZWdFeHAjdG9TdHJpbmcgaGFzIGEgd3JvbmcgbmFtZVxufSBlbHNlIGlmICgkdG9TdHJpbmcubmFtZSAhPSBUT19TVFJJTkcpIHtcbiAgZGVmaW5lKGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiAkdG9TdHJpbmcuY2FsbCh0aGlzKTtcbiAgfSk7XG59XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///238\n")},function(module,exports,__webpack_require__){"use strict";eval("\n\nvar anObject = __webpack_require__(1);\nvar toLength = __webpack_require__(6);\nvar advanceStringIndex = __webpack_require__(88);\nvar regExpExec = __webpack_require__(58);\n\n// @@match logic\n__webpack_require__(59)('match', 1, function (defined, MATCH, $match, maybeCallNative) {\n return [\n // `String.prototype.match` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.match\n function match(regexp) {\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[MATCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[MATCH](String(O));\n },\n // `RegExp.prototype[@@match]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@match\n function (regexp) {\n var res = maybeCallNative($match, regexp, this);\n if (res.done) return res.value;\n var rx = anObject(regexp);\n var S = String(this);\n if (!rx.global) return regExpExec(rx, S);\n var fullUnicode = rx.unicode;\n rx.lastIndex = 0;\n var A = [];\n var n = 0;\n var result;\n while ((result = regExpExec(rx, S)) !== null) {\n var matchStr = String(result[0]);\n A[n] = matchStr;\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n n++;\n }\n return n === 0 ? null : A;\n }\n ];\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLm1hdGNoLmpzPzQ5MTciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWIsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMseUJBQXlCLG1CQUFPLENBQUMsRUFBeUI7QUFDMUQsaUJBQWlCLG1CQUFPLENBQUMsRUFBeUI7O0FBRWxEO0FBQ0EsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyMzkuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgYWR2YW5jZVN0cmluZ0luZGV4ID0gcmVxdWlyZSgnLi9fYWR2YW5jZS1zdHJpbmctaW5kZXgnKTtcbnZhciByZWdFeHBFeGVjID0gcmVxdWlyZSgnLi9fcmVnZXhwLWV4ZWMtYWJzdHJhY3QnKTtcblxuLy8gQEBtYXRjaCBsb2dpY1xucmVxdWlyZSgnLi9fZml4LXJlLXdrcycpKCdtYXRjaCcsIDEsIGZ1bmN0aW9uIChkZWZpbmVkLCBNQVRDSCwgJG1hdGNoLCBtYXliZUNhbGxOYXRpdmUpIHtcbiAgcmV0dXJuIFtcbiAgICAvLyBgU3RyaW5nLnByb3RvdHlwZS5tYXRjaGAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5tYXRjaFxuICAgIGZ1bmN0aW9uIG1hdGNoKHJlZ2V4cCkge1xuICAgICAgdmFyIE8gPSBkZWZpbmVkKHRoaXMpO1xuICAgICAgdmFyIGZuID0gcmVnZXhwID09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHJlZ2V4cFtNQVRDSF07XG4gICAgICByZXR1cm4gZm4gIT09IHVuZGVmaW5lZCA/IGZuLmNhbGwocmVnZXhwLCBPKSA6IG5ldyBSZWdFeHAocmVnZXhwKVtNQVRDSF0oU3RyaW5nKE8pKTtcbiAgICB9LFxuICAgIC8vIGBSZWdFeHAucHJvdG90eXBlW0BAbWF0Y2hdYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1yZWdleHAucHJvdG90eXBlLUBAbWF0Y2hcbiAgICBmdW5jdGlvbiAocmVnZXhwKSB7XG4gICAgICB2YXIgcmVzID0gbWF5YmVDYWxsTmF0aXZlKCRtYXRjaCwgcmVnZXhwLCB0aGlzKTtcbiAgICAgIGlmIChyZXMuZG9uZSkgcmV0dXJuIHJlcy52YWx1ZTtcbiAgICAgIHZhciByeCA9IGFuT2JqZWN0KHJlZ2V4cCk7XG4gICAgICB2YXIgUyA9IFN0cmluZyh0aGlzKTtcbiAgICAgIGlmICghcnguZ2xvYmFsKSByZXR1cm4gcmVnRXhwRXhlYyhyeCwgUyk7XG4gICAgICB2YXIgZnVsbFVuaWNvZGUgPSByeC51bmljb2RlO1xuICAgICAgcngubGFzdEluZGV4ID0gMDtcbiAgICAgIHZhciBBID0gW107XG4gICAgICB2YXIgbiA9IDA7XG4gICAgICB2YXIgcmVzdWx0O1xuICAgICAgd2hpbGUgKChyZXN1bHQgPSByZWdFeHBFeGVjKHJ4LCBTKSkgIT09IG51bGwpIHtcbiAgICAgICAgdmFyIG1hdGNoU3RyID0gU3RyaW5nKHJlc3VsdFswXSk7XG4gICAgICAgIEFbbl0gPSBtYXRjaFN0cjtcbiAgICAgICAgaWYgKG1hdGNoU3RyID09PSAnJykgcngubGFzdEluZGV4ID0gYWR2YW5jZVN0cmluZ0luZGV4KFMsIHRvTGVuZ3RoKHJ4Lmxhc3RJbmRleCksIGZ1bGxVbmljb2RlKTtcbiAgICAgICAgbisrO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG4gPT09IDAgPyBudWxsIDogQTtcbiAgICB9XG4gIF07XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///239\n")},function(module,exports,__webpack_require__){"use strict";eval("\n\nvar anObject = __webpack_require__(1);\nvar toObject = __webpack_require__(9);\nvar toLength = __webpack_require__(6);\nvar toInteger = __webpack_require__(21);\nvar advanceStringIndex = __webpack_require__(88);\nvar regExpExec = __webpack_require__(58);\nvar max = Math.max;\nvar min = Math.min;\nvar floor = Math.floor;\nvar SUBSTITUTION_SYMBOLS = /\\$([$&`']|\\d\\d?|<[^>]*>)/g;\nvar SUBSTITUTION_SYMBOLS_NO_NAMED = /\\$([$&`']|\\d\\d?)/g;\n\nvar maybeToString = function (it) {\n return it === undefined ? it : String(it);\n};\n\n// @@replace logic\n__webpack_require__(59)('replace', 2, function (defined, REPLACE, $replace, maybeCallNative) {\n return [\n // `String.prototype.replace` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.replace\n function replace(searchValue, replaceValue) {\n var O = defined(this);\n var fn = searchValue == undefined ? undefined : searchValue[REPLACE];\n return fn !== undefined\n ? fn.call(searchValue, O, replaceValue)\n : $replace.call(String(O), searchValue, replaceValue);\n },\n // `RegExp.prototype[@@replace]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@replace\n function (regexp, replaceValue) {\n var res = maybeCallNative($replace, regexp, this, replaceValue);\n if (res.done) return res.value;\n\n var rx = anObject(regexp);\n var S = String(this);\n var functionalReplace = typeof replaceValue === 'function';\n if (!functionalReplace) replaceValue = String(replaceValue);\n var global = rx.global;\n if (global) {\n var fullUnicode = rx.unicode;\n rx.lastIndex = 0;\n }\n var results = [];\n while (true) {\n var result = regExpExec(rx, S);\n if (result === null) break;\n results.push(result);\n if (!global) break;\n var matchStr = String(result[0]);\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n }\n var accumulatedResult = '';\n var nextSourcePosition = 0;\n for (var i = 0; i < results.length; i++) {\n result = results[i];\n var matched = String(result[0]);\n var position = max(min(toInteger(result.index), S.length), 0);\n var captures = [];\n // NOTE: This is equivalent to\n // captures = result.slice(1).map(maybeToString)\n // but for some reason `nativeSlice.call(result, 1, result.length)` (called in\n // the slice polyfill when slicing native arrays) \"doesn't work\" in safari 9 and\n // causes a crash (https://pastebin.com/N21QzeQA) when trying to debug it.\n for (var j = 1; j < result.length; j++) captures.push(maybeToString(result[j]));\n var namedCaptures = result.groups;\n if (functionalReplace) {\n var replacerArgs = [matched].concat(captures, position, S);\n if (namedCaptures !== undefined) replacerArgs.push(namedCaptures);\n var replacement = String(replaceValue.apply(undefined, replacerArgs));\n } else {\n replacement = getSubstitution(matched, S, position, captures, namedCaptures, replaceValue);\n }\n if (position >= nextSourcePosition) {\n accumulatedResult += S.slice(nextSourcePosition, position) + replacement;\n nextSourcePosition = position + matched.length;\n }\n }\n return accumulatedResult + S.slice(nextSourcePosition);\n }\n ];\n\n // https://tc39.github.io/ecma262/#sec-getsubstitution\n function getSubstitution(matched, str, position, captures, namedCaptures, replacement) {\n var tailPos = position + matched.length;\n var m = captures.length;\n var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED;\n if (namedCaptures !== undefined) {\n namedCaptures = toObject(namedCaptures);\n symbols = SUBSTITUTION_SYMBOLS;\n }\n return $replace.call(replacement, symbols, function (match, ch) {\n var capture;\n switch (ch.charAt(0)) {\n case '$': return '$';\n case '&': return matched;\n case '`': return str.slice(0, position);\n case \"'\": return str.slice(tailPos);\n case '<':\n capture = namedCaptures[ch.slice(1, -1)];\n break;\n default: // \\d\\d?\n var n = +ch;\n if (n === 0) return match;\n if (n > m) {\n var f = floor(n / 10);\n if (f === 0) return match;\n if (f <= m) return captures[f - 1] === undefined ? ch.charAt(1) : captures[f - 1] + ch.charAt(1);\n return match;\n }\n capture = captures[n - 1];\n }\n return capture === undefined ? '' : capture;\n });\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLnJlcGxhY2UuanM/YTQ4MSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDLHlCQUF5QixtQkFBTyxDQUFDLEVBQXlCO0FBQzFELGlCQUFpQixtQkFBTyxDQUFDLEVBQXlCO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIsb0JBQW9CO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixtQkFBbUI7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLENBQUMiLCJmaWxlIjoiMjQwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIGFkdmFuY2VTdHJpbmdJbmRleCA9IHJlcXVpcmUoJy4vX2FkdmFuY2Utc3RyaW5nLWluZGV4Jyk7XG52YXIgcmVnRXhwRXhlYyA9IHJlcXVpcmUoJy4vX3JlZ2V4cC1leGVjLWFic3RyYWN0Jyk7XG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgbWluID0gTWF0aC5taW47XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xudmFyIFNVQlNUSVRVVElPTl9TWU1CT0xTID0gL1xcJChbJCZgJ118XFxkXFxkP3w8W14+XSo+KS9nO1xudmFyIFNVQlNUSVRVVElPTl9TWU1CT0xTX05PX05BTUVEID0gL1xcJChbJCZgJ118XFxkXFxkPykvZztcblxudmFyIG1heWJlVG9TdHJpbmcgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ID09PSB1bmRlZmluZWQgPyBpdCA6IFN0cmluZyhpdCk7XG59O1xuXG4vLyBAQHJlcGxhY2UgbG9naWNcbnJlcXVpcmUoJy4vX2ZpeC1yZS13a3MnKSgncmVwbGFjZScsIDIsIGZ1bmN0aW9uIChkZWZpbmVkLCBSRVBMQUNFLCAkcmVwbGFjZSwgbWF5YmVDYWxsTmF0aXZlKSB7XG4gIHJldHVybiBbXG4gICAgLy8gYFN0cmluZy5wcm90b3R5cGUucmVwbGFjZWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlXG4gICAgZnVuY3Rpb24gcmVwbGFjZShzZWFyY2hWYWx1ZSwgcmVwbGFjZVZhbHVlKSB7XG4gICAgICB2YXIgTyA9IGRlZmluZWQodGhpcyk7XG4gICAgICB2YXIgZm4gPSBzZWFyY2hWYWx1ZSA9PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBzZWFyY2hWYWx1ZVtSRVBMQUNFXTtcbiAgICAgIHJldHVybiBmbiAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8gZm4uY2FsbChzZWFyY2hWYWx1ZSwgTywgcmVwbGFjZVZhbHVlKVxuICAgICAgICA6ICRyZXBsYWNlLmNhbGwoU3RyaW5nKE8pLCBzZWFyY2hWYWx1ZSwgcmVwbGFjZVZhbHVlKTtcbiAgICB9LFxuICAgIC8vIGBSZWdFeHAucHJvdG90eXBlW0BAcmVwbGFjZV1gIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXJlZ2V4cC5wcm90b3R5cGUtQEByZXBsYWNlXG4gICAgZnVuY3Rpb24gKHJlZ2V4cCwgcmVwbGFjZVZhbHVlKSB7XG4gICAgICB2YXIgcmVzID0gbWF5YmVDYWxsTmF0aXZlKCRyZXBsYWNlLCByZWdleHAsIHRoaXMsIHJlcGxhY2VWYWx1ZSk7XG4gICAgICBpZiAocmVzLmRvbmUpIHJldHVybiByZXMudmFsdWU7XG5cbiAgICAgIHZhciByeCA9IGFuT2JqZWN0KHJlZ2V4cCk7XG4gICAgICB2YXIgUyA9IFN0cmluZyh0aGlzKTtcbiAgICAgIHZhciBmdW5jdGlvbmFsUmVwbGFjZSA9IHR5cGVvZiByZXBsYWNlVmFsdWUgPT09ICdmdW5jdGlvbic7XG4gICAgICBpZiAoIWZ1bmN0aW9uYWxSZXBsYWNlKSByZXBsYWNlVmFsdWUgPSBTdHJpbmcocmVwbGFjZVZhbHVlKTtcbiAgICAgIHZhciBnbG9iYWwgPSByeC5nbG9iYWw7XG4gICAgICBpZiAoZ2xvYmFsKSB7XG4gICAgICAgIHZhciBmdWxsVW5pY29kZSA9IHJ4LnVuaWNvZGU7XG4gICAgICAgIHJ4Lmxhc3RJbmRleCA9IDA7XG4gICAgICB9XG4gICAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHJlZ0V4cEV4ZWMocngsIFMpO1xuICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsKSBicmVhaztcbiAgICAgICAgcmVzdWx0cy5wdXNoKHJlc3VsdCk7XG4gICAgICAgIGlmICghZ2xvYmFsKSBicmVhaztcbiAgICAgICAgdmFyIG1hdGNoU3RyID0gU3RyaW5nKHJlc3VsdFswXSk7XG4gICAgICAgIGlmIChtYXRjaFN0ciA9PT0gJycpIHJ4Lmxhc3RJbmRleCA9IGFkdmFuY2VTdHJpbmdJbmRleChTLCB0b0xlbmd0aChyeC5sYXN0SW5kZXgpLCBmdWxsVW5pY29kZSk7XG4gICAgICB9XG4gICAgICB2YXIgYWNjdW11bGF0ZWRSZXN1bHQgPSAnJztcbiAgICAgIHZhciBuZXh0U291cmNlUG9zaXRpb24gPSAwO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXN1bHRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdHNbaV07XG4gICAgICAgIHZhciBtYXRjaGVkID0gU3RyaW5nKHJlc3VsdFswXSk7XG4gICAgICAgIHZhciBwb3NpdGlvbiA9IG1heChtaW4odG9JbnRlZ2VyKHJlc3VsdC5pbmRleCksIFMubGVuZ3RoKSwgMCk7XG4gICAgICAgIHZhciBjYXB0dXJlcyA9IFtdO1xuICAgICAgICAvLyBOT1RFOiBUaGlzIGlzIGVxdWl2YWxlbnQgdG9cbiAgICAgICAgLy8gICBjYXB0dXJlcyA9IHJlc3VsdC5zbGljZSgxKS5tYXAobWF5YmVUb1N0cmluZylcbiAgICAgICAgLy8gYnV0IGZvciBzb21lIHJlYXNvbiBgbmF0aXZlU2xpY2UuY2FsbChyZXN1bHQsIDEsIHJlc3VsdC5sZW5ndGgpYCAoY2FsbGVkIGluXG4gICAgICAgIC8vIHRoZSBzbGljZSBwb2x5ZmlsbCB3aGVuIHNsaWNpbmcgbmF0aXZlIGFycmF5cykgXCJkb2Vzbid0IHdvcmtcIiBpbiBzYWZhcmkgOSBhbmRcbiAgICAgICAgLy8gY2F1c2VzIGEgY3Jhc2ggKGh0dHBzOi8vcGFzdGViaW4uY29tL04yMVF6ZVFBKSB3aGVuIHRyeWluZyB0byBkZWJ1ZyBpdC5cbiAgICAgICAgZm9yICh2YXIgaiA9IDE7IGogPCByZXN1bHQubGVuZ3RoOyBqKyspIGNhcHR1cmVzLnB1c2gobWF5YmVUb1N0cmluZyhyZXN1bHRbal0pKTtcbiAgICAgICAgdmFyIG5hbWVkQ2FwdHVyZXMgPSByZXN1bHQuZ3JvdXBzO1xuICAgICAgICBpZiAoZnVuY3Rpb25hbFJlcGxhY2UpIHtcbiAgICAgICAgICB2YXIgcmVwbGFjZXJBcmdzID0gW21hdGNoZWRdLmNvbmNhdChjYXB0dXJlcywgcG9zaXRpb24sIFMpO1xuICAgICAgICAgIGlmIChuYW1lZENhcHR1cmVzICE9PSB1bmRlZmluZWQpIHJlcGxhY2VyQXJncy5wdXNoKG5hbWVkQ2FwdHVyZXMpO1xuICAgICAgICAgIHZhciByZXBsYWNlbWVudCA9IFN0cmluZyhyZXBsYWNlVmFsdWUuYXBwbHkodW5kZWZpbmVkLCByZXBsYWNlckFyZ3MpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXBsYWNlbWVudCA9IGdldFN1YnN0aXR1dGlvbihtYXRjaGVkLCBTLCBwb3NpdGlvbiwgY2FwdHVyZXMsIG5hbWVkQ2FwdHVyZXMsIHJlcGxhY2VWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBvc2l0aW9uID49IG5leHRTb3VyY2VQb3NpdGlvbikge1xuICAgICAgICAgIGFjY3VtdWxhdGVkUmVzdWx0ICs9IFMuc2xpY2UobmV4dFNvdXJjZVBvc2l0aW9uLCBwb3NpdGlvbikgKyByZXBsYWNlbWVudDtcbiAgICAgICAgICBuZXh0U291cmNlUG9zaXRpb24gPSBwb3NpdGlvbiArIG1hdGNoZWQubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gYWNjdW11bGF0ZWRSZXN1bHQgKyBTLnNsaWNlKG5leHRTb3VyY2VQb3NpdGlvbik7XG4gICAgfVxuICBdO1xuXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtZ2V0c3Vic3RpdHV0aW9uXG4gIGZ1bmN0aW9uIGdldFN1YnN0aXR1dGlvbihtYXRjaGVkLCBzdHIsIHBvc2l0aW9uLCBjYXB0dXJlcywgbmFtZWRDYXB0dXJlcywgcmVwbGFjZW1lbnQpIHtcbiAgICB2YXIgdGFpbFBvcyA9IHBvc2l0aW9uICsgbWF0Y2hlZC5sZW5ndGg7XG4gICAgdmFyIG0gPSBjYXB0dXJlcy5sZW5ndGg7XG4gICAgdmFyIHN5bWJvbHMgPSBTVUJTVElUVVRJT05fU1lNQk9MU19OT19OQU1FRDtcbiAgICBpZiAobmFtZWRDYXB0dXJlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBuYW1lZENhcHR1cmVzID0gdG9PYmplY3QobmFtZWRDYXB0dXJlcyk7XG4gICAgICBzeW1ib2xzID0gU1VCU1RJVFVUSU9OX1NZTUJPTFM7XG4gICAgfVxuICAgIHJldHVybiAkcmVwbGFjZS5jYWxsKHJlcGxhY2VtZW50LCBzeW1ib2xzLCBmdW5jdGlvbiAobWF0Y2gsIGNoKSB7XG4gICAgICB2YXIgY2FwdHVyZTtcbiAgICAgIHN3aXRjaCAoY2guY2hhckF0KDApKSB7XG4gICAgICAgIGNhc2UgJyQnOiByZXR1cm4gJyQnO1xuICAgICAgICBjYXNlICcmJzogcmV0dXJuIG1hdGNoZWQ7XG4gICAgICAgIGNhc2UgJ2AnOiByZXR1cm4gc3RyLnNsaWNlKDAsIHBvc2l0aW9uKTtcbiAgICAgICAgY2FzZSBcIidcIjogcmV0dXJuIHN0ci5zbGljZSh0YWlsUG9zKTtcbiAgICAgICAgY2FzZSAnPCc6XG4gICAgICAgICAgY2FwdHVyZSA9IG5hbWVkQ2FwdHVyZXNbY2guc2xpY2UoMSwgLTEpXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDogLy8gXFxkXFxkP1xuICAgICAgICAgIHZhciBuID0gK2NoO1xuICAgICAgICAgIGlmIChuID09PSAwKSByZXR1cm4gbWF0Y2g7XG4gICAgICAgICAgaWYgKG4gPiBtKSB7XG4gICAgICAgICAgICB2YXIgZiA9IGZsb29yKG4gLyAxMCk7XG4gICAgICAgICAgICBpZiAoZiA9PT0gMCkgcmV0dXJuIG1hdGNoO1xuICAgICAgICAgICAgaWYgKGYgPD0gbSkgcmV0dXJuIGNhcHR1cmVzW2YgLSAxXSA9PT0gdW5kZWZpbmVkID8gY2guY2hhckF0KDEpIDogY2FwdHVyZXNbZiAtIDFdICsgY2guY2hhckF0KDEpO1xuICAgICAgICAgICAgcmV0dXJuIG1hdGNoO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXB0dXJlID0gY2FwdHVyZXNbbiAtIDFdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNhcHR1cmUgPT09IHVuZGVmaW5lZCA/ICcnIDogY2FwdHVyZTtcbiAgICB9KTtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///240\n")},function(module,exports,__webpack_require__){"use strict";eval("\n\nvar anObject = __webpack_require__(1);\nvar sameValue = __webpack_require__(100);\nvar regExpExec = __webpack_require__(58);\n\n// @@search logic\n__webpack_require__(59)('search', 1, function (defined, SEARCH, $search, maybeCallNative) {\n return [\n // `String.prototype.search` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.search\n function search(regexp) {\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[SEARCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[SEARCH](String(O));\n },\n // `RegExp.prototype[@@search]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@search\n function (regexp) {\n var res = maybeCallNative($search, regexp, this);\n if (res.done) return res.value;\n var rx = anObject(regexp);\n var S = String(this);\n var previousLastIndex = rx.lastIndex;\n if (!sameValue(previousLastIndex, 0)) rx.lastIndex = 0;\n var result = regExpExec(rx, S);\n if (!sameValue(rx.lastIndex, previousLastIndex)) rx.lastIndex = previousLastIndex;\n return result === null ? -1 : result.index;\n }\n ];\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLnNlYXJjaC5qcz8zODZkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhOztBQUViLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGdCQUFnQixtQkFBTyxDQUFDLEdBQWU7QUFDdkMsaUJBQWlCLG1CQUFPLENBQUMsRUFBeUI7O0FBRWxEO0FBQ0EsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjI0MS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgc2FtZVZhbHVlID0gcmVxdWlyZSgnLi9fc2FtZS12YWx1ZScpO1xudmFyIHJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuL19yZWdleHAtZXhlYy1hYnN0cmFjdCcpO1xuXG4vLyBAQHNlYXJjaCBsb2dpY1xucmVxdWlyZSgnLi9fZml4LXJlLXdrcycpKCdzZWFyY2gnLCAxLCBmdW5jdGlvbiAoZGVmaW5lZCwgU0VBUkNILCAkc2VhcmNoLCBtYXliZUNhbGxOYXRpdmUpIHtcbiAgcmV0dXJuIFtcbiAgICAvLyBgU3RyaW5nLnByb3RvdHlwZS5zZWFyY2hgIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUuc2VhcmNoXG4gICAgZnVuY3Rpb24gc2VhcmNoKHJlZ2V4cCkge1xuICAgICAgdmFyIE8gPSBkZWZpbmVkKHRoaXMpO1xuICAgICAgdmFyIGZuID0gcmVnZXhwID09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHJlZ2V4cFtTRUFSQ0hdO1xuICAgICAgcmV0dXJuIGZuICE9PSB1bmRlZmluZWQgPyBmbi5jYWxsKHJlZ2V4cCwgTykgOiBuZXcgUmVnRXhwKHJlZ2V4cClbU0VBUkNIXShTdHJpbmcoTykpO1xuICAgIH0sXG4gICAgLy8gYFJlZ0V4cC5wcm90b3R5cGVbQEBzZWFyY2hdYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1yZWdleHAucHJvdG90eXBlLUBAc2VhcmNoXG4gICAgZnVuY3Rpb24gKHJlZ2V4cCkge1xuICAgICAgdmFyIHJlcyA9IG1heWJlQ2FsbE5hdGl2ZSgkc2VhcmNoLCByZWdleHAsIHRoaXMpO1xuICAgICAgaWYgKHJlcy5kb25lKSByZXR1cm4gcmVzLnZhbHVlO1xuICAgICAgdmFyIHJ4ID0gYW5PYmplY3QocmVnZXhwKTtcbiAgICAgIHZhciBTID0gU3RyaW5nKHRoaXMpO1xuICAgICAgdmFyIHByZXZpb3VzTGFzdEluZGV4ID0gcngubGFzdEluZGV4O1xuICAgICAgaWYgKCFzYW1lVmFsdWUocHJldmlvdXNMYXN0SW5kZXgsIDApKSByeC5sYXN0SW5kZXggPSAwO1xuICAgICAgdmFyIHJlc3VsdCA9IHJlZ0V4cEV4ZWMocngsIFMpO1xuICAgICAgaWYgKCFzYW1lVmFsdWUocngubGFzdEluZGV4LCBwcmV2aW91c0xhc3RJbmRleCkpIHJ4Lmxhc3RJbmRleCA9IHByZXZpb3VzTGFzdEluZGV4O1xuICAgICAgcmV0dXJuIHJlc3VsdCA9PT0gbnVsbCA/IC0xIDogcmVzdWx0LmluZGV4O1xuICAgIH1cbiAgXTtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///241\n")},function(module,exports,__webpack_require__){"use strict";eval("\n\nvar isRegExp = __webpack_require__(56);\nvar anObject = __webpack_require__(1);\nvar speciesConstructor = __webpack_require__(51);\nvar advanceStringIndex = __webpack_require__(88);\nvar toLength = __webpack_require__(6);\nvar callRegExpExec = __webpack_require__(58);\nvar regexpExec = __webpack_require__(87);\nvar fails = __webpack_require__(3);\nvar $min = Math.min;\nvar $push = [].push;\nvar $SPLIT = 'split';\nvar LENGTH = 'length';\nvar LAST_INDEX = 'lastIndex';\nvar MAX_UINT32 = 0xffffffff;\n\n// babel-minify transpiles RegExp('x', 'y') -> /x/y and it causes SyntaxError\nvar SUPPORTS_Y = !fails(function () { RegExp(MAX_UINT32, 'y'); });\n\n// @@split logic\n__webpack_require__(59)('split', 2, function (defined, SPLIT, $split, maybeCallNative) {\n var internalSplit;\n if (\n 'abbc'[$SPLIT](/(b)*/)[1] == 'c' ||\n 'test'[$SPLIT](/(?:)/, -1)[LENGTH] != 4 ||\n 'ab'[$SPLIT](/(?:ab)*/)[LENGTH] != 2 ||\n '.'[$SPLIT](/(.?)(.?)/)[LENGTH] != 4 ||\n '.'[$SPLIT](/()()/)[LENGTH] > 1 ||\n ''[$SPLIT](/.?/)[LENGTH]\n ) {\n // based on es5-shim implementation, need to rework it\n internalSplit = function (separator, limit) {\n var string = String(this);\n if (separator === undefined && limit === 0) return [];\n // If `separator` is not a regex, use native split\n if (!isRegExp(separator)) return $split.call(string, separator, limit);\n var output = [];\n var flags = (separator.ignoreCase ? 'i' : '') +\n (separator.multiline ? 'm' : '') +\n (separator.unicode ? 'u' : '') +\n (separator.sticky ? 'y' : '');\n var lastLastIndex = 0;\n var splitLimit = limit === undefined ? MAX_UINT32 : limit >>> 0;\n // Make `global` and avoid `lastIndex` issues by working with a copy\n var separatorCopy = new RegExp(separator.source, flags + 'g');\n var match, lastIndex, lastLength;\n while (match = regexpExec.call(separatorCopy, string)) {\n lastIndex = separatorCopy[LAST_INDEX];\n if (lastIndex > lastLastIndex) {\n output.push(string.slice(lastLastIndex, match.index));\n if (match[LENGTH] > 1 && match.index < string[LENGTH]) $push.apply(output, match.slice(1));\n lastLength = match[0][LENGTH];\n lastLastIndex = lastIndex;\n if (output[LENGTH] >= splitLimit) break;\n }\n if (separatorCopy[LAST_INDEX] === match.index) separatorCopy[LAST_INDEX]++; // Avoid an infinite loop\n }\n if (lastLastIndex === string[LENGTH]) {\n if (lastLength || !separatorCopy.test('')) output.push('');\n } else output.push(string.slice(lastLastIndex));\n return output[LENGTH] > splitLimit ? output.slice(0, splitLimit) : output;\n };\n // Chakra, V8\n } else if ('0'[$SPLIT](undefined, 0)[LENGTH]) {\n internalSplit = function (separator, limit) {\n return separator === undefined && limit === 0 ? [] : $split.call(this, separator, limit);\n };\n } else {\n internalSplit = $split;\n }\n\n return [\n // `String.prototype.split` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.split\n function split(separator, limit) {\n var O = defined(this);\n var splitter = separator == undefined ? undefined : separator[SPLIT];\n return splitter !== undefined\n ? splitter.call(separator, O, limit)\n : internalSplit.call(String(O), separator, limit);\n },\n // `RegExp.prototype[@@split]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@split\n //\n // NOTE: This cannot be properly polyfilled in engines that don't support\n // the 'y' flag.\n function (regexp, limit) {\n var res = maybeCallNative(internalSplit, regexp, this, limit, internalSplit !== $split);\n if (res.done) return res.value;\n\n var rx = anObject(regexp);\n var S = String(this);\n var C = speciesConstructor(rx, RegExp);\n\n var unicodeMatching = rx.unicode;\n var flags = (rx.ignoreCase ? 'i' : '') +\n (rx.multiline ? 'm' : '') +\n (rx.unicode ? 'u' : '') +\n (SUPPORTS_Y ? 'y' : 'g');\n\n // ^(? + rx + ) is needed, in combination with some S slicing, to\n // simulate the 'y' flag.\n var splitter = new C(SUPPORTS_Y ? rx : '^(?:' + rx.source + ')', flags);\n var lim = limit === undefined ? MAX_UINT32 : limit >>> 0;\n if (lim === 0) return [];\n if (S.length === 0) return callRegExpExec(splitter, S) === null ? [S] : [];\n var p = 0;\n var q = 0;\n var A = [];\n while (q < S.length) {\n splitter.lastIndex = SUPPORTS_Y ? q : 0;\n var z = callRegExpExec(splitter, SUPPORTS_Y ? S : S.slice(q));\n var e;\n if (\n z === null ||\n (e = $min(toLength(splitter.lastIndex + (SUPPORTS_Y ? 0 : q)), S.length)) === p\n ) {\n q = advanceStringIndex(S, q, unicodeMatching);\n } else {\n A.push(S.slice(p, q));\n if (A.length === lim) return A;\n for (var i = 1; i <= z.length - 1; i++) {\n A.push(z[i]);\n if (A.length === lim) return A;\n }\n q = p = e;\n }\n }\n A.push(S.slice(p));\n return A;\n }\n ];\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLnNwbGl0LmpzPzI4YTUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWIsZUFBZSxtQkFBTyxDQUFDLEVBQWM7QUFDckMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMseUJBQXlCLG1CQUFPLENBQUMsRUFBd0I7QUFDekQseUJBQXlCLG1CQUFPLENBQUMsRUFBeUI7QUFDMUQsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMscUJBQXFCLG1CQUFPLENBQUMsRUFBeUI7QUFDdEQsaUJBQWlCLG1CQUFPLENBQUMsRUFBZ0I7QUFDekMsWUFBWSxtQkFBTyxDQUFDLENBQVU7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EscUNBQXFDLHlCQUF5QixFQUFFOztBQUVoRTtBQUNBLG1CQUFPLENBQUMsRUFBZTtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1GQUFtRjtBQUNuRjtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EseUJBQXlCLG1CQUFtQjtBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjQyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaXNSZWdFeHAgPSByZXF1aXJlKCcuL19pcy1yZWdleHAnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4vX3NwZWNpZXMtY29uc3RydWN0b3InKTtcbnZhciBhZHZhbmNlU3RyaW5nSW5kZXggPSByZXF1aXJlKCcuL19hZHZhbmNlLXN0cmluZy1pbmRleCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgY2FsbFJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuL19yZWdleHAtZXhlYy1hYnN0cmFjdCcpO1xudmFyIHJlZ2V4cEV4ZWMgPSByZXF1aXJlKCcuL19yZWdleHAtZXhlYycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciAkbWluID0gTWF0aC5taW47XG52YXIgJHB1c2ggPSBbXS5wdXNoO1xudmFyICRTUExJVCA9ICdzcGxpdCc7XG52YXIgTEVOR1RIID0gJ2xlbmd0aCc7XG52YXIgTEFTVF9JTkRFWCA9ICdsYXN0SW5kZXgnO1xudmFyIE1BWF9VSU5UMzIgPSAweGZmZmZmZmZmO1xuXG4vLyBiYWJlbC1taW5pZnkgdHJhbnNwaWxlcyBSZWdFeHAoJ3gnLCAneScpIC0+IC94L3kgYW5kIGl0IGNhdXNlcyBTeW50YXhFcnJvclxudmFyIFNVUFBPUlRTX1kgPSAhZmFpbHMoZnVuY3Rpb24gKCkgeyBSZWdFeHAoTUFYX1VJTlQzMiwgJ3knKTsgfSk7XG5cbi8vIEBAc3BsaXQgbG9naWNcbnJlcXVpcmUoJy4vX2ZpeC1yZS13a3MnKSgnc3BsaXQnLCAyLCBmdW5jdGlvbiAoZGVmaW5lZCwgU1BMSVQsICRzcGxpdCwgbWF5YmVDYWxsTmF0aXZlKSB7XG4gIHZhciBpbnRlcm5hbFNwbGl0O1xuICBpZiAoXG4gICAgJ2FiYmMnWyRTUExJVF0oLyhiKSovKVsxXSA9PSAnYycgfHxcbiAgICAndGVzdCdbJFNQTElUXSgvKD86KS8sIC0xKVtMRU5HVEhdICE9IDQgfHxcbiAgICAnYWInWyRTUExJVF0oLyg/OmFiKSovKVtMRU5HVEhdICE9IDIgfHxcbiAgICAnLidbJFNQTElUXSgvKC4/KSguPykvKVtMRU5HVEhdICE9IDQgfHxcbiAgICAnLidbJFNQTElUXSgvKCkoKS8pW0xFTkdUSF0gPiAxIHx8XG4gICAgJydbJFNQTElUXSgvLj8vKVtMRU5HVEhdXG4gICkge1xuICAgIC8vIGJhc2VkIG9uIGVzNS1zaGltIGltcGxlbWVudGF0aW9uLCBuZWVkIHRvIHJld29yayBpdFxuICAgIGludGVybmFsU3BsaXQgPSBmdW5jdGlvbiAoc2VwYXJhdG9yLCBsaW1pdCkge1xuICAgICAgdmFyIHN0cmluZyA9IFN0cmluZyh0aGlzKTtcbiAgICAgIGlmIChzZXBhcmF0b3IgPT09IHVuZGVmaW5lZCAmJiBsaW1pdCA9PT0gMCkgcmV0dXJuIFtdO1xuICAgICAgLy8gSWYgYHNlcGFyYXRvcmAgaXMgbm90IGEgcmVnZXgsIHVzZSBuYXRpdmUgc3BsaXRcbiAgICAgIGlmICghaXNSZWdFeHAoc2VwYXJhdG9yKSkgcmV0dXJuICRzcGxpdC5jYWxsKHN0cmluZywgc2VwYXJhdG9yLCBsaW1pdCk7XG4gICAgICB2YXIgb3V0cHV0ID0gW107XG4gICAgICB2YXIgZmxhZ3MgPSAoc2VwYXJhdG9yLmlnbm9yZUNhc2UgPyAnaScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHNlcGFyYXRvci5tdWx0aWxpbmUgPyAnbScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHNlcGFyYXRvci51bmljb2RlID8gJ3UnIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChzZXBhcmF0b3Iuc3RpY2t5ID8gJ3knIDogJycpO1xuICAgICAgdmFyIGxhc3RMYXN0SW5kZXggPSAwO1xuICAgICAgdmFyIHNwbGl0TGltaXQgPSBsaW1pdCA9PT0gdW5kZWZpbmVkID8gTUFYX1VJTlQzMiA6IGxpbWl0ID4+PiAwO1xuICAgICAgLy8gTWFrZSBgZ2xvYmFsYCBhbmQgYXZvaWQgYGxhc3RJbmRleGAgaXNzdWVzIGJ5IHdvcmtpbmcgd2l0aCBhIGNvcHlcbiAgICAgIHZhciBzZXBhcmF0b3JDb3B5ID0gbmV3IFJlZ0V4cChzZXBhcmF0b3Iuc291cmNlLCBmbGFncyArICdnJyk7XG4gICAgICB2YXIgbWF0Y2gsIGxhc3RJbmRleCwgbGFzdExlbmd0aDtcbiAgICAgIHdoaWxlIChtYXRjaCA9IHJlZ2V4cEV4ZWMuY2FsbChzZXBhcmF0b3JDb3B5LCBzdHJpbmcpKSB7XG4gICAgICAgIGxhc3RJbmRleCA9IHNlcGFyYXRvckNvcHlbTEFTVF9JTkRFWF07XG4gICAgICAgIGlmIChsYXN0SW5kZXggPiBsYXN0TGFzdEluZGV4KSB7XG4gICAgICAgICAgb3V0cHV0LnB1c2goc3RyaW5nLnNsaWNlKGxhc3RMYXN0SW5kZXgsIG1hdGNoLmluZGV4KSk7XG4gICAgICAgICAgaWYgKG1hdGNoW0xFTkdUSF0gPiAxICYmIG1hdGNoLmluZGV4IDwgc3RyaW5nW0xFTkdUSF0pICRwdXNoLmFwcGx5KG91dHB1dCwgbWF0Y2guc2xpY2UoMSkpO1xuICAgICAgICAgIGxhc3RMZW5ndGggPSBtYXRjaFswXVtMRU5HVEhdO1xuICAgICAgICAgIGxhc3RMYXN0SW5kZXggPSBsYXN0SW5kZXg7XG4gICAgICAgICAgaWYgKG91dHB1dFtMRU5HVEhdID49IHNwbGl0TGltaXQpIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzZXBhcmF0b3JDb3B5W0xBU1RfSU5ERVhdID09PSBtYXRjaC5pbmRleCkgc2VwYXJhdG9yQ29weVtMQVNUX0lOREVYXSsrOyAvLyBBdm9pZCBhbiBpbmZpbml0ZSBsb29wXG4gICAgICB9XG4gICAgICBpZiAobGFzdExhc3RJbmRleCA9PT0gc3RyaW5nW0xFTkdUSF0pIHtcbiAgICAgICAgaWYgKGxhc3RMZW5ndGggfHwgIXNlcGFyYXRvckNvcHkudGVzdCgnJykpIG91dHB1dC5wdXNoKCcnKTtcbiAgICAgIH0gZWxzZSBvdXRwdXQucHVzaChzdHJpbmcuc2xpY2UobGFzdExhc3RJbmRleCkpO1xuICAgICAgcmV0dXJuIG91dHB1dFtMRU5HVEhdID4gc3BsaXRMaW1pdCA/IG91dHB1dC5zbGljZSgwLCBzcGxpdExpbWl0KSA6IG91dHB1dDtcbiAgICB9O1xuICAvLyBDaGFrcmEsIFY4XG4gIH0gZWxzZSBpZiAoJzAnWyRTUExJVF0odW5kZWZpbmVkLCAwKVtMRU5HVEhdKSB7XG4gICAgaW50ZXJuYWxTcGxpdCA9IGZ1bmN0aW9uIChzZXBhcmF0b3IsIGxpbWl0KSB7XG4gICAgICByZXR1cm4gc2VwYXJhdG9yID09PSB1bmRlZmluZWQgJiYgbGltaXQgPT09IDAgPyBbXSA6ICRzcGxpdC5jYWxsKHRoaXMsIHNlcGFyYXRvciwgbGltaXQpO1xuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgaW50ZXJuYWxTcGxpdCA9ICRzcGxpdDtcbiAgfVxuXG4gIHJldHVybiBbXG4gICAgLy8gYFN0cmluZy5wcm90b3R5cGUuc3BsaXRgIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUuc3BsaXRcbiAgICBmdW5jdGlvbiBzcGxpdChzZXBhcmF0b3IsIGxpbWl0KSB7XG4gICAgICB2YXIgTyA9IGRlZmluZWQodGhpcyk7XG4gICAgICB2YXIgc3BsaXR0ZXIgPSBzZXBhcmF0b3IgPT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogc2VwYXJhdG9yW1NQTElUXTtcbiAgICAgIHJldHVybiBzcGxpdHRlciAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8gc3BsaXR0ZXIuY2FsbChzZXBhcmF0b3IsIE8sIGxpbWl0KVxuICAgICAgICA6IGludGVybmFsU3BsaXQuY2FsbChTdHJpbmcoTyksIHNlcGFyYXRvciwgbGltaXQpO1xuICAgIH0sXG4gICAgLy8gYFJlZ0V4cC5wcm90b3R5cGVbQEBzcGxpdF1gIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXJlZ2V4cC5wcm90b3R5cGUtQEBzcGxpdFxuICAgIC8vXG4gICAgLy8gTk9URTogVGhpcyBjYW5ub3QgYmUgcHJvcGVybHkgcG9seWZpbGxlZCBpbiBlbmdpbmVzIHRoYXQgZG9uJ3Qgc3VwcG9ydFxuICAgIC8vIHRoZSAneScgZmxhZy5cbiAgICBmdW5jdGlvbiAocmVnZXhwLCBsaW1pdCkge1xuICAgICAgdmFyIHJlcyA9IG1heWJlQ2FsbE5hdGl2ZShpbnRlcm5hbFNwbGl0LCByZWdleHAsIHRoaXMsIGxpbWl0LCBpbnRlcm5hbFNwbGl0ICE9PSAkc3BsaXQpO1xuICAgICAgaWYgKHJlcy5kb25lKSByZXR1cm4gcmVzLnZhbHVlO1xuXG4gICAgICB2YXIgcnggPSBhbk9iamVjdChyZWdleHApO1xuICAgICAgdmFyIFMgPSBTdHJpbmcodGhpcyk7XG4gICAgICB2YXIgQyA9IHNwZWNpZXNDb25zdHJ1Y3RvcihyeCwgUmVnRXhwKTtcblxuICAgICAgdmFyIHVuaWNvZGVNYXRjaGluZyA9IHJ4LnVuaWNvZGU7XG4gICAgICB2YXIgZmxhZ3MgPSAocnguaWdub3JlQ2FzZSA/ICdpJyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAocngubXVsdGlsaW5lID8gJ20nIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChyeC51bmljb2RlID8gJ3UnIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChTVVBQT1JUU19ZID8gJ3knIDogJ2cnKTtcblxuICAgICAgLy8gXig/ICsgcnggKyApIGlzIG5lZWRlZCwgaW4gY29tYmluYXRpb24gd2l0aCBzb21lIFMgc2xpY2luZywgdG9cbiAgICAgIC8vIHNpbXVsYXRlIHRoZSAneScgZmxhZy5cbiAgICAgIHZhciBzcGxpdHRlciA9IG5ldyBDKFNVUFBPUlRTX1kgPyByeCA6ICdeKD86JyArIHJ4LnNvdXJjZSArICcpJywgZmxhZ3MpO1xuICAgICAgdmFyIGxpbSA9IGxpbWl0ID09PSB1bmRlZmluZWQgPyBNQVhfVUlOVDMyIDogbGltaXQgPj4+IDA7XG4gICAgICBpZiAobGltID09PSAwKSByZXR1cm4gW107XG4gICAgICBpZiAoUy5sZW5ndGggPT09IDApIHJldHVybiBjYWxsUmVnRXhwRXhlYyhzcGxpdHRlciwgUykgPT09IG51bGwgPyBbU10gOiBbXTtcbiAgICAgIHZhciBwID0gMDtcbiAgICAgIHZhciBxID0gMDtcbiAgICAgIHZhciBBID0gW107XG4gICAgICB3aGlsZSAocSA8IFMubGVuZ3RoKSB7XG4gICAgICAgIHNwbGl0dGVyLmxhc3RJbmRleCA9IFNVUFBPUlRTX1kgPyBxIDogMDtcbiAgICAgICAgdmFyIHogPSBjYWxsUmVnRXhwRXhlYyhzcGxpdHRlciwgU1VQUE9SVFNfWSA/IFMgOiBTLnNsaWNlKHEpKTtcbiAgICAgICAgdmFyIGU7XG4gICAgICAgIGlmIChcbiAgICAgICAgICB6ID09PSBudWxsIHx8XG4gICAgICAgICAgKGUgPSAkbWluKHRvTGVuZ3RoKHNwbGl0dGVyLmxhc3RJbmRleCArIChTVVBQT1JUU19ZID8gMCA6IHEpKSwgUy5sZW5ndGgpKSA9PT0gcFxuICAgICAgICApIHtcbiAgICAgICAgICBxID0gYWR2YW5jZVN0cmluZ0luZGV4KFMsIHEsIHVuaWNvZGVNYXRjaGluZyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgQS5wdXNoKFMuc2xpY2UocCwgcSkpO1xuICAgICAgICAgIGlmIChBLmxlbmd0aCA9PT0gbGltKSByZXR1cm4gQTtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8PSB6Lmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICAgICAgQS5wdXNoKHpbaV0pO1xuICAgICAgICAgICAgaWYgKEEubGVuZ3RoID09PSBsaW0pIHJldHVybiBBO1xuICAgICAgICAgIH1cbiAgICAgICAgICBxID0gcCA9IGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIEEucHVzaChTLnNsaWNlKHApKTtcbiAgICAgIHJldHVybiBBO1xuICAgIH1cbiAgXTtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///242\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar LIBRARY = __webpack_require__(29);\nvar global = __webpack_require__(2);\nvar ctx = __webpack_require__(19);\nvar classof = __webpack_require__(44);\nvar $export = __webpack_require__(0);\nvar isObject = __webpack_require__(4);\nvar aFunction = __webpack_require__(10);\nvar anInstance = __webpack_require__(39);\nvar forOf = __webpack_require__(40);\nvar speciesConstructor = __webpack_require__(51);\nvar task = __webpack_require__(89).set;\nvar microtask = __webpack_require__(90)();\nvar newPromiseCapabilityModule = __webpack_require__(91);\nvar perform = __webpack_require__(115);\nvar userAgent = __webpack_require__(60);\nvar promiseResolve = __webpack_require__(116);\nvar PROMISE = 'Promise';\nvar TypeError = global.TypeError;\nvar process = global.process;\nvar versions = process && process.versions;\nvar v8 = versions && versions.v8 || '';\nvar $Promise = global[PROMISE];\nvar isNode = classof(process) == 'process';\nvar empty = function () { /* empty */ };\nvar Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper;\nvar newPromiseCapability = newGenericPromiseCapability = newPromiseCapabilityModule.f;\n\nvar USE_NATIVE = !!function () {\n try {\n // correct subclassing with @@species support\n var promise = $Promise.resolve(1);\n var FakePromise = (promise.constructor = {})[__webpack_require__(5)('species')] = function (exec) {\n exec(empty, empty);\n };\n // unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n return (isNode || typeof PromiseRejectionEvent == 'function')\n && promise.then(empty) instanceof FakePromise\n // v8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables\n // https://bugs.chromium.org/p/chromium/issues/detail?id=830565\n // we can't detect it synchronously, so just check versions\n && v8.indexOf('6.6') !== 0\n && userAgent.indexOf('Chrome/66') === -1;\n } catch (e) { /* empty */ }\n}();\n\n// helpers\nvar isThenable = function (it) {\n var then;\n return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\nvar notify = function (promise, isReject) {\n if (promise._n) return;\n promise._n = true;\n var chain = promise._c;\n microtask(function () {\n var value = promise._v;\n var ok = promise._s == 1;\n var i = 0;\n var run = function (reaction) {\n var handler = ok ? reaction.ok : reaction.fail;\n var resolve = reaction.resolve;\n var reject = reaction.reject;\n var domain = reaction.domain;\n var result, then, exited;\n try {\n if (handler) {\n if (!ok) {\n if (promise._h == 2) onHandleUnhandled(promise);\n promise._h = 1;\n }\n if (handler === true) result = value;\n else {\n if (domain) domain.enter();\n result = handler(value); // may throw\n if (domain) {\n domain.exit();\n exited = true;\n }\n }\n if (result === reaction.promise) {\n reject(TypeError('Promise-chain cycle'));\n } else if (then = isThenable(result)) {\n then.call(result, resolve, reject);\n } else resolve(result);\n } else reject(value);\n } catch (e) {\n if (domain && !exited) domain.exit();\n reject(e);\n }\n };\n while (chain.length > i) run(chain[i++]); // variable length - can't use forEach\n promise._c = [];\n promise._n = false;\n if (isReject && !promise._h) onUnhandled(promise);\n });\n};\nvar onUnhandled = function (promise) {\n task.call(global, function () {\n var value = promise._v;\n var unhandled = isUnhandled(promise);\n var result, handler, console;\n if (unhandled) {\n result = perform(function () {\n if (isNode) {\n process.emit('unhandledRejection', value, promise);\n } else if (handler = global.onunhandledrejection) {\n handler({ promise: promise, reason: value });\n } else if ((console = global.console) && console.error) {\n console.error('Unhandled promise rejection', value);\n }\n });\n // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n promise._h = isNode || isUnhandled(promise) ? 2 : 1;\n } promise._a = undefined;\n if (unhandled && result.e) throw result.v;\n });\n};\nvar isUnhandled = function (promise) {\n return promise._h !== 1 && (promise._a || promise._c).length === 0;\n};\nvar onHandleUnhandled = function (promise) {\n task.call(global, function () {\n var handler;\n if (isNode) {\n process.emit('rejectionHandled', promise);\n } else if (handler = global.onrejectionhandled) {\n handler({ promise: promise, reason: promise._v });\n }\n });\n};\nvar $reject = function (value) {\n var promise = this;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n promise._v = value;\n promise._s = 2;\n if (!promise._a) promise._a = promise._c.slice();\n notify(promise, true);\n};\nvar $resolve = function (value) {\n var promise = this;\n var then;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n try {\n if (promise === value) throw TypeError(\"Promise can't be resolved itself\");\n if (then = isThenable(value)) {\n microtask(function () {\n var wrapper = { _w: promise, _d: false }; // wrap\n try {\n then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));\n } catch (e) {\n $reject.call(wrapper, e);\n }\n });\n } else {\n promise._v = value;\n promise._s = 1;\n notify(promise, false);\n }\n } catch (e) {\n $reject.call({ _w: promise, _d: false }, e); // wrap\n }\n};\n\n// constructor polyfill\nif (!USE_NATIVE) {\n // 25.4.3.1 Promise(executor)\n $Promise = function Promise(executor) {\n anInstance(this, $Promise, PROMISE, '_h');\n aFunction(executor);\n Internal.call(this);\n try {\n executor(ctx($resolve, this, 1), ctx($reject, this, 1));\n } catch (err) {\n $reject.call(this, err);\n }\n };\n // eslint-disable-next-line no-unused-vars\n Internal = function Promise(executor) {\n this._c = []; // <- awaiting reactions\n this._a = undefined; // <- checked in isUnhandled reactions\n this._s = 0; // <- state\n this._d = false; // <- done\n this._v = undefined; // <- value\n this._h = 0; // <- rejection state, 0 - default, 1 - handled, 2 - unhandled\n this._n = false; // <- notify\n };\n Internal.prototype = __webpack_require__(41)($Promise.prototype, {\n // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)\n then: function then(onFulfilled, onRejected) {\n var reaction = newPromiseCapability(speciesConstructor(this, $Promise));\n reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\n reaction.fail = typeof onRejected == 'function' && onRejected;\n reaction.domain = isNode ? process.domain : undefined;\n this._c.push(reaction);\n if (this._a) this._a.push(reaction);\n if (this._s) notify(this, false);\n return reaction.promise;\n },\n // 25.4.5.1 Promise.prototype.catch(onRejected)\n 'catch': function (onRejected) {\n return this.then(undefined, onRejected);\n }\n });\n OwnPromiseCapability = function () {\n var promise = new Internal();\n this.promise = promise;\n this.resolve = ctx($resolve, promise, 1);\n this.reject = ctx($reject, promise, 1);\n };\n newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n return C === $Promise || C === Wrapper\n ? new OwnPromiseCapability(C)\n : newGenericPromiseCapability(C);\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Promise: $Promise });\n__webpack_require__(43)($Promise, PROMISE);\n__webpack_require__(38)(PROMISE);\nWrapper = __webpack_require__(18)[PROMISE];\n\n// statics\n$export($export.S + $export.F * !USE_NATIVE, PROMISE, {\n // 25.4.4.5 Promise.reject(r)\n reject: function reject(r) {\n var capability = newPromiseCapability(this);\n var $$reject = capability.reject;\n $$reject(r);\n return capability.promise;\n }\n});\n$export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {\n // 25.4.4.6 Promise.resolve(x)\n resolve: function resolve(x) {\n return promiseResolve(LIBRARY && this === Wrapper ? $Promise : this, x);\n }\n});\n$export($export.S + $export.F * !(USE_NATIVE && __webpack_require__(57)(function (iter) {\n $Promise.all(iter)['catch'](empty);\n})), PROMISE, {\n // 25.4.4.1 Promise.all(iterable)\n all: function all(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var values = [];\n var index = 0;\n var remaining = 1;\n forOf(iterable, false, function (promise) {\n var $index = index++;\n var alreadyCalled = false;\n values.push(undefined);\n remaining++;\n C.resolve(promise).then(function (value) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[$index] = value;\n --remaining || resolve(values);\n }, reject);\n });\n --remaining || resolve(values);\n });\n if (result.e) reject(result.v);\n return capability.promise;\n },\n // 25.4.4.4 Promise.race(iterable)\n race: function race(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var reject = capability.reject;\n var result = perform(function () {\n forOf(iterable, false, function (promise) {\n C.resolve(promise).then(capability.resolve, reject);\n });\n });\n if (result.e) reject(result.v);\n return capability.promise;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucHJvbWlzZS5qcz81NTFjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsY0FBYyxtQkFBTyxDQUFDLEVBQVk7QUFDbEMsYUFBYSxtQkFBTyxDQUFDLENBQVc7QUFDaEMsVUFBVSxtQkFBTyxDQUFDLEVBQVE7QUFDMUIsY0FBYyxtQkFBTyxDQUFDLEVBQVk7QUFDbEMsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2QyxpQkFBaUIsbUJBQU8sQ0FBQyxFQUFnQjtBQUN6QyxZQUFZLG1CQUFPLENBQUMsRUFBVztBQUMvQix5QkFBeUIsbUJBQU8sQ0FBQyxFQUF3QjtBQUN6RCxXQUFXLG1CQUFPLENBQUMsRUFBUztBQUM1QixnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFjO0FBQ3RDLGlDQUFpQyxtQkFBTyxDQUFDLEVBQTJCO0FBQ3BFLGNBQWMsbUJBQU8sQ0FBQyxHQUFZO0FBQ2xDLGdCQUFnQixtQkFBTyxDQUFDLEVBQWU7QUFDdkMscUJBQXFCLG1CQUFPLENBQUMsR0FBb0I7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtDQUErQyxFQUFFLG1CQUFPLENBQUMsQ0FBUTtBQUNqRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUcsWUFBWTtBQUNmLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0M7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQSxXQUFXO0FBQ1gsU0FBUztBQUNULE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZDQUE2QztBQUM3QztBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsbUJBQW1CLGtDQUFrQztBQUNyRCxTQUFTO0FBQ1Q7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxlQUFlLHVDQUF1QztBQUN0RDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLDBCQUEwQjtBQUNqRDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILGtCQUFrQix5QkFBeUIsS0FBSztBQUNoRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCLHdCQUF3QjtBQUN4QixnQkFBZ0I7QUFDaEIsb0JBQW9CO0FBQ3BCLHdCQUF3QjtBQUN4QixnQkFBZ0I7QUFDaEIsb0JBQW9CO0FBQ3BCO0FBQ0EsdUJBQXVCLG1CQUFPLENBQUMsRUFBaUI7QUFDaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDBEQUEwRCxvQkFBb0I7QUFDOUUsbUJBQU8sQ0FBQyxFQUFzQjtBQUM5QixtQkFBTyxDQUFDLEVBQWdCO0FBQ3hCLFVBQVUsbUJBQU8sQ0FBQyxFQUFTOztBQUUzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCxnREFBZ0QsbUJBQU8sQ0FBQyxFQUFnQjtBQUN4RTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULE9BQU87QUFDUDtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjQzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIExJQlJBUlkgPSByZXF1aXJlKCcuL19saWJyYXJ5Jyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4vX2NsYXNzb2YnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG52YXIgZm9yT2YgPSByZXF1aXJlKCcuL19mb3Itb2YnKTtcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuL19zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG52YXIgdGFzayA9IHJlcXVpcmUoJy4vX3Rhc2snKS5zZXQ7XG52YXIgbWljcm90YXNrID0gcmVxdWlyZSgnLi9fbWljcm90YXNrJykoKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZSA9IHJlcXVpcmUoJy4vX25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcbnZhciBwZXJmb3JtID0gcmVxdWlyZSgnLi9fcGVyZm9ybScpO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4vX3VzZXItYWdlbnQnKTtcbnZhciBwcm9taXNlUmVzb2x2ZSA9IHJlcXVpcmUoJy4vX3Byb21pc2UtcmVzb2x2ZScpO1xudmFyIFBST01JU0UgPSAnUHJvbWlzZSc7XG52YXIgVHlwZUVycm9yID0gZ2xvYmFsLlR5cGVFcnJvcjtcbnZhciBwcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3M7XG52YXIgdmVyc2lvbnMgPSBwcm9jZXNzICYmIHByb2Nlc3MudmVyc2lvbnM7XG52YXIgdjggPSB2ZXJzaW9ucyAmJiB2ZXJzaW9ucy52OCB8fCAnJztcbnZhciAkUHJvbWlzZSA9IGdsb2JhbFtQUk9NSVNFXTtcbnZhciBpc05vZGUgPSBjbGFzc29mKHByb2Nlc3MpID09ICdwcm9jZXNzJztcbnZhciBlbXB0eSA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcbnZhciBJbnRlcm5hbCwgbmV3R2VuZXJpY1Byb21pc2VDYXBhYmlsaXR5LCBPd25Qcm9taXNlQ2FwYWJpbGl0eSwgV3JhcHBlcjtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IG5ld0dlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmY7XG5cbnZhciBVU0VfTkFUSVZFID0gISFmdW5jdGlvbiAoKSB7XG4gIHRyeSB7XG4gICAgLy8gY29ycmVjdCBzdWJjbGFzc2luZyB3aXRoIEBAc3BlY2llcyBzdXBwb3J0XG4gICAgdmFyIHByb21pc2UgPSAkUHJvbWlzZS5yZXNvbHZlKDEpO1xuICAgIHZhciBGYWtlUHJvbWlzZSA9IChwcm9taXNlLmNvbnN0cnVjdG9yID0ge30pW3JlcXVpcmUoJy4vX3drcycpKCdzcGVjaWVzJyldID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgICAgIGV4ZWMoZW1wdHksIGVtcHR5KTtcbiAgICB9O1xuICAgIC8vIHVuaGFuZGxlZCByZWplY3Rpb25zIHRyYWNraW5nIHN1cHBvcnQsIE5vZGVKUyBQcm9taXNlIHdpdGhvdXQgaXQgZmFpbHMgQEBzcGVjaWVzIHRlc3RcbiAgICByZXR1cm4gKGlzTm9kZSB8fCB0eXBlb2YgUHJvbWlzZVJlamVjdGlvbkV2ZW50ID09ICdmdW5jdGlvbicpXG4gICAgICAmJiBwcm9taXNlLnRoZW4oZW1wdHkpIGluc3RhbmNlb2YgRmFrZVByb21pc2VcbiAgICAgIC8vIHY4IDYuNiAoTm9kZSAxMCBhbmQgQ2hyb21lIDY2KSBoYXZlIGEgYnVnIHdpdGggcmVzb2x2aW5nIGN1c3RvbSB0aGVuYWJsZXNcbiAgICAgIC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTgzMDU2NVxuICAgICAgLy8gd2UgY2FuJ3QgZGV0ZWN0IGl0IHN5bmNocm9ub3VzbHksIHNvIGp1c3QgY2hlY2sgdmVyc2lvbnNcbiAgICAgICYmIHY4LmluZGV4T2YoJzYuNicpICE9PSAwXG4gICAgICAmJiB1c2VyQWdlbnQuaW5kZXhPZignQ2hyb21lLzY2JykgPT09IC0xO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbn0oKTtcblxuLy8gaGVscGVyc1xudmFyIGlzVGhlbmFibGUgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIHRoZW47XG4gIHJldHVybiBpc09iamVjdChpdCkgJiYgdHlwZW9mICh0aGVuID0gaXQudGhlbikgPT0gJ2Z1bmN0aW9uJyA/IHRoZW4gOiBmYWxzZTtcbn07XG52YXIgbm90aWZ5ID0gZnVuY3Rpb24gKHByb21pc2UsIGlzUmVqZWN0KSB7XG4gIGlmIChwcm9taXNlLl9uKSByZXR1cm47XG4gIHByb21pc2UuX24gPSB0cnVlO1xuICB2YXIgY2hhaW4gPSBwcm9taXNlLl9jO1xuICBtaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgIHZhciB2YWx1ZSA9IHByb21pc2UuX3Y7XG4gICAgdmFyIG9rID0gcHJvbWlzZS5fcyA9PSAxO1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIgcnVuID0gZnVuY3Rpb24gKHJlYWN0aW9uKSB7XG4gICAgICB2YXIgaGFuZGxlciA9IG9rID8gcmVhY3Rpb24ub2sgOiByZWFjdGlvbi5mYWlsO1xuICAgICAgdmFyIHJlc29sdmUgPSByZWFjdGlvbi5yZXNvbHZlO1xuICAgICAgdmFyIHJlamVjdCA9IHJlYWN0aW9uLnJlamVjdDtcbiAgICAgIHZhciBkb21haW4gPSByZWFjdGlvbi5kb21haW47XG4gICAgICB2YXIgcmVzdWx0LCB0aGVuLCBleGl0ZWQ7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoaGFuZGxlcikge1xuICAgICAgICAgIGlmICghb2spIHtcbiAgICAgICAgICAgIGlmIChwcm9taXNlLl9oID09IDIpIG9uSGFuZGxlVW5oYW5kbGVkKHByb21pc2UpO1xuICAgICAgICAgICAgcHJvbWlzZS5faCA9IDE7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChoYW5kbGVyID09PSB0cnVlKSByZXN1bHQgPSB2YWx1ZTtcbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChkb21haW4pIGRvbWFpbi5lbnRlcigpO1xuICAgICAgICAgICAgcmVzdWx0ID0gaGFuZGxlcih2YWx1ZSk7IC8vIG1heSB0aHJvd1xuICAgICAgICAgICAgaWYgKGRvbWFpbikge1xuICAgICAgICAgICAgICBkb21haW4uZXhpdCgpO1xuICAgICAgICAgICAgICBleGl0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocmVzdWx0ID09PSByZWFjdGlvbi5wcm9taXNlKSB7XG4gICAgICAgICAgICByZWplY3QoVHlwZUVycm9yKCdQcm9taXNlLWNoYWluIGN5Y2xlJykpO1xuICAgICAgICAgIH0gZWxzZSBpZiAodGhlbiA9IGlzVGhlbmFibGUocmVzdWx0KSkge1xuICAgICAgICAgICAgdGhlbi5jYWxsKHJlc3VsdCwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICB9IGVsc2UgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICB9IGVsc2UgcmVqZWN0KHZhbHVlKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKGRvbWFpbiAmJiAhZXhpdGVkKSBkb21haW4uZXhpdCgpO1xuICAgICAgICByZWplY3QoZSk7XG4gICAgICB9XG4gICAgfTtcbiAgICB3aGlsZSAoY2hhaW4ubGVuZ3RoID4gaSkgcnVuKGNoYWluW2krK10pOyAvLyB2YXJpYWJsZSBsZW5ndGggLSBjYW4ndCB1c2UgZm9yRWFjaFxuICAgIHByb21pc2UuX2MgPSBbXTtcbiAgICBwcm9taXNlLl9uID0gZmFsc2U7XG4gICAgaWYgKGlzUmVqZWN0ICYmICFwcm9taXNlLl9oKSBvblVuaGFuZGxlZChwcm9taXNlKTtcbiAgfSk7XG59O1xudmFyIG9uVW5oYW5kbGVkID0gZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgdGFzay5jYWxsKGdsb2JhbCwgZnVuY3Rpb24gKCkge1xuICAgIHZhciB2YWx1ZSA9IHByb21pc2UuX3Y7XG4gICAgdmFyIHVuaGFuZGxlZCA9IGlzVW5oYW5kbGVkKHByb21pc2UpO1xuICAgIHZhciByZXN1bHQsIGhhbmRsZXIsIGNvbnNvbGU7XG4gICAgaWYgKHVuaGFuZGxlZCkge1xuICAgICAgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChpc05vZGUpIHtcbiAgICAgICAgICBwcm9jZXNzLmVtaXQoJ3VuaGFuZGxlZFJlamVjdGlvbicsIHZhbHVlLCBwcm9taXNlKTtcbiAgICAgICAgfSBlbHNlIGlmIChoYW5kbGVyID0gZ2xvYmFsLm9udW5oYW5kbGVkcmVqZWN0aW9uKSB7XG4gICAgICAgICAgaGFuZGxlcih7IHByb21pc2U6IHByb21pc2UsIHJlYXNvbjogdmFsdWUgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoKGNvbnNvbGUgPSBnbG9iYWwuY29uc29sZSkgJiYgY29uc29sZS5lcnJvcikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1VuaGFuZGxlZCBwcm9taXNlIHJlamVjdGlvbicsIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICAvLyBCcm93c2VycyBzaG91bGQgbm90IHRyaWdnZXIgYHJlamVjdGlvbkhhbmRsZWRgIGV2ZW50IGlmIGl0IHdhcyBoYW5kbGVkIGhlcmUsIE5vZGVKUyAtIHNob3VsZFxuICAgICAgcHJvbWlzZS5faCA9IGlzTm9kZSB8fCBpc1VuaGFuZGxlZChwcm9taXNlKSA/IDIgOiAxO1xuICAgIH0gcHJvbWlzZS5fYSA9IHVuZGVmaW5lZDtcbiAgICBpZiAodW5oYW5kbGVkICYmIHJlc3VsdC5lKSB0aHJvdyByZXN1bHQudjtcbiAgfSk7XG59O1xudmFyIGlzVW5oYW5kbGVkID0gZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgcmV0dXJuIHByb21pc2UuX2ggIT09IDEgJiYgKHByb21pc2UuX2EgfHwgcHJvbWlzZS5fYykubGVuZ3RoID09PSAwO1xufTtcbnZhciBvbkhhbmRsZVVuaGFuZGxlZCA9IGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gIHRhc2suY2FsbChnbG9iYWwsIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgaGFuZGxlcjtcbiAgICBpZiAoaXNOb2RlKSB7XG4gICAgICBwcm9jZXNzLmVtaXQoJ3JlamVjdGlvbkhhbmRsZWQnLCBwcm9taXNlKTtcbiAgICB9IGVsc2UgaWYgKGhhbmRsZXIgPSBnbG9iYWwub25yZWplY3Rpb25oYW5kbGVkKSB7XG4gICAgICBoYW5kbGVyKHsgcHJvbWlzZTogcHJvbWlzZSwgcmVhc29uOiBwcm9taXNlLl92IH0pO1xuICAgIH1cbiAgfSk7XG59O1xudmFyICRyZWplY3QgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgdmFyIHByb21pc2UgPSB0aGlzO1xuICBpZiAocHJvbWlzZS5fZCkgcmV0dXJuO1xuICBwcm9taXNlLl9kID0gdHJ1ZTtcbiAgcHJvbWlzZSA9IHByb21pc2UuX3cgfHwgcHJvbWlzZTsgLy8gdW53cmFwXG4gIHByb21pc2UuX3YgPSB2YWx1ZTtcbiAgcHJvbWlzZS5fcyA9IDI7XG4gIGlmICghcHJvbWlzZS5fYSkgcHJvbWlzZS5fYSA9IHByb21pc2UuX2Muc2xpY2UoKTtcbiAgbm90aWZ5KHByb21pc2UsIHRydWUpO1xufTtcbnZhciAkcmVzb2x2ZSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICB2YXIgcHJvbWlzZSA9IHRoaXM7XG4gIHZhciB0aGVuO1xuICBpZiAocHJvbWlzZS5fZCkgcmV0dXJuO1xuICBwcm9taXNlLl9kID0gdHJ1ZTtcbiAgcHJvbWlzZSA9IHByb21pc2UuX3cgfHwgcHJvbWlzZTsgLy8gdW53cmFwXG4gIHRyeSB7XG4gICAgaWYgKHByb21pc2UgPT09IHZhbHVlKSB0aHJvdyBUeXBlRXJyb3IoXCJQcm9taXNlIGNhbid0IGJlIHJlc29sdmVkIGl0c2VsZlwiKTtcbiAgICBpZiAodGhlbiA9IGlzVGhlbmFibGUodmFsdWUpKSB7XG4gICAgICBtaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgd3JhcHBlciA9IHsgX3c6IHByb21pc2UsIF9kOiBmYWxzZSB9OyAvLyB3cmFwXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdGhlbi5jYWxsKHZhbHVlLCBjdHgoJHJlc29sdmUsIHdyYXBwZXIsIDEpLCBjdHgoJHJlamVjdCwgd3JhcHBlciwgMSkpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgJHJlamVjdC5jYWxsKHdyYXBwZXIsIGUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJvbWlzZS5fdiA9IHZhbHVlO1xuICAgICAgcHJvbWlzZS5fcyA9IDE7XG4gICAgICBub3RpZnkocHJvbWlzZSwgZmFsc2UpO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgICRyZWplY3QuY2FsbCh7IF93OiBwcm9taXNlLCBfZDogZmFsc2UgfSwgZSk7IC8vIHdyYXBcbiAgfVxufTtcblxuLy8gY29uc3RydWN0b3IgcG9seWZpbGxcbmlmICghVVNFX05BVElWRSkge1xuICAvLyAyNS40LjMuMSBQcm9taXNlKGV4ZWN1dG9yKVxuICAkUHJvbWlzZSA9IGZ1bmN0aW9uIFByb21pc2UoZXhlY3V0b3IpIHtcbiAgICBhbkluc3RhbmNlKHRoaXMsICRQcm9taXNlLCBQUk9NSVNFLCAnX2gnKTtcbiAgICBhRnVuY3Rpb24oZXhlY3V0b3IpO1xuICAgIEludGVybmFsLmNhbGwodGhpcyk7XG4gICAgdHJ5IHtcbiAgICAgIGV4ZWN1dG9yKGN0eCgkcmVzb2x2ZSwgdGhpcywgMSksIGN0eCgkcmVqZWN0LCB0aGlzLCAxKSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAkcmVqZWN0LmNhbGwodGhpcywgZXJyKTtcbiAgICB9XG4gIH07XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuICBJbnRlcm5hbCA9IGZ1bmN0aW9uIFByb21pc2UoZXhlY3V0b3IpIHtcbiAgICB0aGlzLl9jID0gW107ICAgICAgICAgICAgIC8vIDwtIGF3YWl0aW5nIHJlYWN0aW9uc1xuICAgIHRoaXMuX2EgPSB1bmRlZmluZWQ7ICAgICAgLy8gPC0gY2hlY2tlZCBpbiBpc1VuaGFuZGxlZCByZWFjdGlvbnNcbiAgICB0aGlzLl9zID0gMDsgICAgICAgICAgICAgIC8vIDwtIHN0YXRlXG4gICAgdGhpcy5fZCA9IGZhbHNlOyAgICAgICAgICAvLyA8LSBkb25lXG4gICAgdGhpcy5fdiA9IHVuZGVmaW5lZDsgICAgICAvLyA8LSB2YWx1ZVxuICAgIHRoaXMuX2ggPSAwOyAgICAgICAgICAgICAgLy8gPC0gcmVqZWN0aW9uIHN0YXRlLCAwIC0gZGVmYXVsdCwgMSAtIGhhbmRsZWQsIDIgLSB1bmhhbmRsZWRcbiAgICB0aGlzLl9uID0gZmFsc2U7ICAgICAgICAgIC8vIDwtIG5vdGlmeVxuICB9O1xuICBJbnRlcm5hbC5wcm90b3R5cGUgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKSgkUHJvbWlzZS5wcm90b3R5cGUsIHtcbiAgICAvLyAyNS40LjUuMyBQcm9taXNlLnByb3RvdHlwZS50aGVuKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKVxuICAgIHRoZW46IGZ1bmN0aW9uIHRoZW4ob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpIHtcbiAgICAgIHZhciByZWFjdGlvbiA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KHNwZWNpZXNDb25zdHJ1Y3Rvcih0aGlzLCAkUHJvbWlzZSkpO1xuICAgICAgcmVhY3Rpb24ub2sgPSB0eXBlb2Ygb25GdWxmaWxsZWQgPT0gJ2Z1bmN0aW9uJyA/IG9uRnVsZmlsbGVkIDogdHJ1ZTtcbiAgICAgIHJlYWN0aW9uLmZhaWwgPSB0eXBlb2Ygb25SZWplY3RlZCA9PSAnZnVuY3Rpb24nICYmIG9uUmVqZWN0ZWQ7XG4gICAgICByZWFjdGlvbi5kb21haW4gPSBpc05vZGUgPyBwcm9jZXNzLmRvbWFpbiA6IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX2MucHVzaChyZWFjdGlvbik7XG4gICAgICBpZiAodGhpcy5fYSkgdGhpcy5fYS5wdXNoKHJlYWN0aW9uKTtcbiAgICAgIGlmICh0aGlzLl9zKSBub3RpZnkodGhpcywgZmFsc2UpO1xuICAgICAgcmV0dXJuIHJlYWN0aW9uLnByb21pc2U7XG4gICAgfSxcbiAgICAvLyAyNS40LjUuMSBQcm9taXNlLnByb3RvdHlwZS5jYXRjaChvblJlamVjdGVkKVxuICAgICdjYXRjaCc6IGZ1bmN0aW9uIChvblJlamVjdGVkKSB7XG4gICAgICByZXR1cm4gdGhpcy50aGVuKHVuZGVmaW5lZCwgb25SZWplY3RlZCk7XG4gICAgfVxuICB9KTtcbiAgT3duUHJvbWlzZUNhcGFiaWxpdHkgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHByb21pc2UgPSBuZXcgSW50ZXJuYWwoKTtcbiAgICB0aGlzLnByb21pc2UgPSBwcm9taXNlO1xuICAgIHRoaXMucmVzb2x2ZSA9IGN0eCgkcmVzb2x2ZSwgcHJvbWlzZSwgMSk7XG4gICAgdGhpcy5yZWplY3QgPSBjdHgoJHJlamVjdCwgcHJvbWlzZSwgMSk7XG4gIH07XG4gIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmYgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IGZ1bmN0aW9uIChDKSB7XG4gICAgcmV0dXJuIEMgPT09ICRQcm9taXNlIHx8IEMgPT09IFdyYXBwZXJcbiAgICAgID8gbmV3IE93blByb21pc2VDYXBhYmlsaXR5KEMpXG4gICAgICA6IG5ld0dlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eShDKTtcbiAgfTtcbn1cblxuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LlcgKyAkZXhwb3J0LkYgKiAhVVNFX05BVElWRSwgeyBQcm9taXNlOiAkUHJvbWlzZSB9KTtcbnJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJykoJFByb21pc2UsIFBST01JU0UpO1xucmVxdWlyZSgnLi9fc2V0LXNwZWNpZXMnKShQUk9NSVNFKTtcbldyYXBwZXIgPSByZXF1aXJlKCcuL19jb3JlJylbUFJPTUlTRV07XG5cbi8vIHN0YXRpY3NcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsIFBST01JU0UsIHtcbiAgLy8gMjUuNC40LjUgUHJvbWlzZS5yZWplY3QocilcbiAgcmVqZWN0OiBmdW5jdGlvbiByZWplY3Qocikge1xuICAgIHZhciBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkodGhpcyk7XG4gICAgdmFyICQkcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgJCRyZWplY3Qocik7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIChMSUJSQVJZIHx8ICFVU0VfTkFUSVZFKSwgUFJPTUlTRSwge1xuICAvLyAyNS40LjQuNiBQcm9taXNlLnJlc29sdmUoeClcbiAgcmVzb2x2ZTogZnVuY3Rpb24gcmVzb2x2ZSh4KSB7XG4gICAgcmV0dXJuIHByb21pc2VSZXNvbHZlKExJQlJBUlkgJiYgdGhpcyA9PT0gV3JhcHBlciA/ICRQcm9taXNlIDogdGhpcywgeCk7XG4gIH1cbn0pO1xuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhKFVTRV9OQVRJVkUgJiYgcmVxdWlyZSgnLi9faXRlci1kZXRlY3QnKShmdW5jdGlvbiAoaXRlcikge1xuICAkUHJvbWlzZS5hbGwoaXRlcilbJ2NhdGNoJ10oZW1wdHkpO1xufSkpLCBQUk9NSVNFLCB7XG4gIC8vIDI1LjQuNC4xIFByb21pc2UuYWxsKGl0ZXJhYmxlKVxuICBhbGw6IGZ1bmN0aW9uIGFsbChpdGVyYWJsZSkge1xuICAgIHZhciBDID0gdGhpcztcbiAgICB2YXIgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KEMpO1xuICAgIHZhciByZXNvbHZlID0gY2FwYWJpbGl0eS5yZXNvbHZlO1xuICAgIHZhciByZWplY3QgPSBjYXBhYmlsaXR5LnJlamVjdDtcbiAgICB2YXIgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgdmFsdWVzID0gW107XG4gICAgICB2YXIgaW5kZXggPSAwO1xuICAgICAgdmFyIHJlbWFpbmluZyA9IDE7XG4gICAgICBmb3JPZihpdGVyYWJsZSwgZmFsc2UsIGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gICAgICAgIHZhciAkaW5kZXggPSBpbmRleCsrO1xuICAgICAgICB2YXIgYWxyZWFkeUNhbGxlZCA9IGZhbHNlO1xuICAgICAgICB2YWx1ZXMucHVzaCh1bmRlZmluZWQpO1xuICAgICAgICByZW1haW5pbmcrKztcbiAgICAgICAgQy5yZXNvbHZlKHByb21pc2UpLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgaWYgKGFscmVhZHlDYWxsZWQpIHJldHVybjtcbiAgICAgICAgICBhbHJlYWR5Q2FsbGVkID0gdHJ1ZTtcbiAgICAgICAgICB2YWx1ZXNbJGluZGV4XSA9IHZhbHVlO1xuICAgICAgICAgIC0tcmVtYWluaW5nIHx8IHJlc29sdmUodmFsdWVzKTtcbiAgICAgICAgfSwgcmVqZWN0KTtcbiAgICAgIH0pO1xuICAgICAgLS1yZW1haW5pbmcgfHwgcmVzb2x2ZSh2YWx1ZXMpO1xuICAgIH0pO1xuICAgIGlmIChyZXN1bHQuZSkgcmVqZWN0KHJlc3VsdC52KTtcbiAgICByZXR1cm4gY2FwYWJpbGl0eS5wcm9taXNlO1xuICB9LFxuICAvLyAyNS40LjQuNCBQcm9taXNlLnJhY2UoaXRlcmFibGUpXG4gIHJhY2U6IGZ1bmN0aW9uIHJhY2UoaXRlcmFibGUpIHtcbiAgICB2YXIgQyA9IHRoaXM7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eShDKTtcbiAgICB2YXIgcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgdmFyIHJlc3VsdCA9IHBlcmZvcm0oZnVuY3Rpb24gKCkge1xuICAgICAgZm9yT2YoaXRlcmFibGUsIGZhbHNlLCBmdW5jdGlvbiAocHJvbWlzZSkge1xuICAgICAgICBDLnJlc29sdmUocHJvbWlzZSkudGhlbihjYXBhYmlsaXR5LnJlc29sdmUsIHJlamVjdCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBpZiAocmVzdWx0LmUpIHJlamVjdChyZXN1bHQudik7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///243\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar weak = __webpack_require__(121);\nvar validate = __webpack_require__(42);\nvar WEAK_SET = 'WeakSet';\n\n// 23.4 WeakSet Objects\n__webpack_require__(61)(WEAK_SET, function (get) {\n return function WeakSet() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.4.3.1 WeakSet.prototype.add(value)\n add: function add(value) {\n return weak.def(validate(this, WEAK_SET), value, true);\n }\n}, weak, false, true);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYud2Vhay1zZXQuanM/YzAyYiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLFdBQVcsbUJBQU8sQ0FBQyxHQUFvQjtBQUN2QyxlQUFlLG1CQUFPLENBQUMsRUFBd0I7QUFDL0M7O0FBRUE7QUFDQSxtQkFBTyxDQUFDLEVBQWU7QUFDdkIsNkJBQTZCLG1FQUFtRTtBQUNoRyxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjI0NC5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciB3ZWFrID0gcmVxdWlyZSgnLi9fY29sbGVjdGlvbi13ZWFrJyk7XG52YXIgdmFsaWRhdGUgPSByZXF1aXJlKCcuL192YWxpZGF0ZS1jb2xsZWN0aW9uJyk7XG52YXIgV0VBS19TRVQgPSAnV2Vha1NldCc7XG5cbi8vIDIzLjQgV2Vha1NldCBPYmplY3RzXG5yZXF1aXJlKCcuL19jb2xsZWN0aW9uJykoV0VBS19TRVQsIGZ1bmN0aW9uIChnZXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIFdlYWtTZXQoKSB7IHJldHVybiBnZXQodGhpcywgYXJndW1lbnRzLmxlbmd0aCA+IDAgPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQpOyB9O1xufSwge1xuICAvLyAyMy40LjMuMSBXZWFrU2V0LnByb3RvdHlwZS5hZGQodmFsdWUpXG4gIGFkZDogZnVuY3Rpb24gYWRkKHZhbHVlKSB7XG4gICAgcmV0dXJuIHdlYWsuZGVmKHZhbGlkYXRlKHRoaXMsIFdFQUtfU0VUKSwgdmFsdWUsIHRydWUpO1xuICB9XG59LCB3ZWFrLCBmYWxzZSwgdHJ1ZSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///244\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar $typed = __webpack_require__(62);\nvar buffer = __webpack_require__(92);\nvar anObject = __webpack_require__(1);\nvar toAbsoluteIndex = __webpack_require__(35);\nvar toLength = __webpack_require__(6);\nvar isObject = __webpack_require__(4);\nvar ArrayBuffer = __webpack_require__(2).ArrayBuffer;\nvar speciesConstructor = __webpack_require__(51);\nvar $ArrayBuffer = buffer.ArrayBuffer;\nvar $DataView = buffer.DataView;\nvar $isView = $typed.ABV && ArrayBuffer.isView;\nvar $slice = $ArrayBuffer.prototype.slice;\nvar VIEW = $typed.VIEW;\nvar ARRAY_BUFFER = 'ArrayBuffer';\n\n$export($export.G + $export.W + $export.F * (ArrayBuffer !== $ArrayBuffer), { ArrayBuffer: $ArrayBuffer });\n\n$export($export.S + $export.F * !$typed.CONSTR, ARRAY_BUFFER, {\n // 24.1.3.1 ArrayBuffer.isView(arg)\n isView: function isView(it) {\n return $isView && $isView(it) || isObject(it) && VIEW in it;\n }\n});\n\n$export($export.P + $export.U + $export.F * __webpack_require__(3)(function () {\n return !new $ArrayBuffer(2).slice(1, undefined).byteLength;\n}), ARRAY_BUFFER, {\n // 24.1.4.3 ArrayBuffer.prototype.slice(start, end)\n slice: function slice(start, end) {\n if ($slice !== undefined && end === undefined) return $slice.call(anObject(this), start); // FF fix\n var len = anObject(this).byteLength;\n var first = toAbsoluteIndex(start, len);\n var fin = toAbsoluteIndex(end === undefined ? len : end, len);\n var result = new (speciesConstructor(this, $ArrayBuffer))(toLength(fin - first));\n var viewS = new $DataView(this);\n var viewT = new $DataView(result);\n var index = 0;\n while (first < fin) {\n viewT.setUint8(index++, viewS.getUint8(first++));\n } return result;\n }\n});\n\n__webpack_require__(38)(ARRAY_BUFFER);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuYXJyYXktYnVmZmVyLmpzP2M2NmYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxhQUFhLG1CQUFPLENBQUMsRUFBVTtBQUMvQixhQUFhLG1CQUFPLENBQUMsRUFBaUI7QUFDdEMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsc0JBQXNCLG1CQUFPLENBQUMsRUFBc0I7QUFDcEQsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsa0JBQWtCLG1CQUFPLENBQUMsQ0FBVztBQUNyQyx5QkFBeUIsbUJBQU8sQ0FBQyxFQUF3QjtBQUN6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsNkVBQTZFLDRCQUE0Qjs7QUFFekc7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQsNENBQTRDLG1CQUFPLENBQUMsQ0FBVTtBQUM5RDtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsNkZBQTZGO0FBQzdGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLENBQUM7O0FBRUQsbUJBQU8sQ0FBQyxFQUFnQiIsImZpbGUiOiIyNDUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICR0eXBlZCA9IHJlcXVpcmUoJy4vX3R5cGVkJyk7XG52YXIgYnVmZmVyID0gcmVxdWlyZSgnLi9fdHlwZWQtYnVmZmVyJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuL190by1hYnNvbHV0ZS1pbmRleCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBBcnJheUJ1ZmZlciA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLkFycmF5QnVmZmVyO1xudmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4vX3NwZWNpZXMtY29uc3RydWN0b3InKTtcbnZhciAkQXJyYXlCdWZmZXIgPSBidWZmZXIuQXJyYXlCdWZmZXI7XG52YXIgJERhdGFWaWV3ID0gYnVmZmVyLkRhdGFWaWV3O1xudmFyICRpc1ZpZXcgPSAkdHlwZWQuQUJWICYmIEFycmF5QnVmZmVyLmlzVmlldztcbnZhciAkc2xpY2UgPSAkQXJyYXlCdWZmZXIucHJvdG90eXBlLnNsaWNlO1xudmFyIFZJRVcgPSAkdHlwZWQuVklFVztcbnZhciBBUlJBWV9CVUZGRVIgPSAnQXJyYXlCdWZmZXInO1xuXG4kZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuVyArICRleHBvcnQuRiAqIChBcnJheUJ1ZmZlciAhPT0gJEFycmF5QnVmZmVyKSwgeyBBcnJheUJ1ZmZlcjogJEFycmF5QnVmZmVyIH0pO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICEkdHlwZWQuQ09OU1RSLCBBUlJBWV9CVUZGRVIsIHtcbiAgLy8gMjQuMS4zLjEgQXJyYXlCdWZmZXIuaXNWaWV3KGFyZylcbiAgaXNWaWV3OiBmdW5jdGlvbiBpc1ZpZXcoaXQpIHtcbiAgICByZXR1cm4gJGlzVmlldyAmJiAkaXNWaWV3KGl0KSB8fCBpc09iamVjdChpdCkgJiYgVklFVyBpbiBpdDtcbiAgfVxufSk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5VICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAhbmV3ICRBcnJheUJ1ZmZlcigyKS5zbGljZSgxLCB1bmRlZmluZWQpLmJ5dGVMZW5ndGg7XG59KSwgQVJSQVlfQlVGRkVSLCB7XG4gIC8vIDI0LjEuNC4zIEFycmF5QnVmZmVyLnByb3RvdHlwZS5zbGljZShzdGFydCwgZW5kKVxuICBzbGljZTogZnVuY3Rpb24gc2xpY2Uoc3RhcnQsIGVuZCkge1xuICAgIGlmICgkc2xpY2UgIT09IHVuZGVmaW5lZCAmJiBlbmQgPT09IHVuZGVmaW5lZCkgcmV0dXJuICRzbGljZS5jYWxsKGFuT2JqZWN0KHRoaXMpLCBzdGFydCk7IC8vIEZGIGZpeFxuICAgIHZhciBsZW4gPSBhbk9iamVjdCh0aGlzKS5ieXRlTGVuZ3RoO1xuICAgIHZhciBmaXJzdCA9IHRvQWJzb2x1dGVJbmRleChzdGFydCwgbGVuKTtcbiAgICB2YXIgZmluID0gdG9BYnNvbHV0ZUluZGV4KGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuIDogZW5kLCBsZW4pO1xuICAgIHZhciByZXN1bHQgPSBuZXcgKHNwZWNpZXNDb25zdHJ1Y3Rvcih0aGlzLCAkQXJyYXlCdWZmZXIpKSh0b0xlbmd0aChmaW4gLSBmaXJzdCkpO1xuICAgIHZhciB2aWV3UyA9IG5ldyAkRGF0YVZpZXcodGhpcyk7XG4gICAgdmFyIHZpZXdUID0gbmV3ICREYXRhVmlldyhyZXN1bHQpO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgd2hpbGUgKGZpcnN0IDwgZmluKSB7XG4gICAgICB2aWV3VC5zZXRVaW50OChpbmRleCsrLCB2aWV3Uy5nZXRVaW50OChmaXJzdCsrKSk7XG4gICAgfSByZXR1cm4gcmVzdWx0O1xuICB9XG59KTtcblxucmVxdWlyZSgnLi9fc2V0LXNwZWNpZXMnKShBUlJBWV9CVUZGRVIpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///245\n")},function(module,exports,__webpack_require__){eval("var $export = __webpack_require__(0);\n$export($export.G + $export.W + $export.F * !__webpack_require__(62).ABV, {\n DataView: __webpack_require__(92).DataView\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuZGF0YS12aWV3LmpzPzI2MmYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsNkNBQTZDLG1CQUFPLENBQUMsRUFBVTtBQUMvRCxZQUFZLG1CQUFPLENBQUMsRUFBaUI7QUFDckMsQ0FBQyIsImZpbGUiOiIyNDYuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LlcgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fdHlwZWQnKS5BQlYsIHtcbiAgRGF0YVZpZXc6IHJlcXVpcmUoJy4vX3R5cGVkLWJ1ZmZlcicpLkRhdGFWaWV3XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///246\n")},function(module,exports,__webpack_require__){eval("__webpack_require__(27)('Int8', 1, function (init) {\n return function Int8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuaW50OC1hcnJheS5qcz9iMDVjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLG1CQUFPLENBQUMsRUFBZ0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyNDcuanMiLCJzb3VyY2VzQ29udGVudCI6WyJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdJbnQ4JywgMSwgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIEludDhBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///247\n")},function(module,exports,__webpack_require__){eval("__webpack_require__(27)('Uint8', 1, function (init) {\n return function Uint8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQudWludDgtYXJyYXkuanM/MzRlZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjQ4LmpzIiwic291cmNlc0NvbnRlbnQiOlsicmVxdWlyZSgnLi9fdHlwZWQtYXJyYXknKSgnVWludDgnLCAxLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gVWludDhBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///248\n")},function(module,exports,__webpack_require__){eval("__webpack_require__(27)('Uint8', 1, function (init) {\n return function Uint8ClampedArray(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n}, true);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQudWludDgtY2xhbXBlZC1hcnJheS5qcz82YWEyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLG1CQUFPLENBQUMsRUFBZ0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyNDkuanMiLCJzb3VyY2VzQ29udGVudCI6WyJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdVaW50OCcsIDEsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBVaW50OENsYW1wZWRBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSwgdHJ1ZSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///249\n")},function(module,exports,__webpack_require__){eval("__webpack_require__(27)('Int16', 2, function (init) {\n return function Int16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuaW50MTYtYXJyYXkuanM/MTVhYyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjUwLmpzIiwic291cmNlc0NvbnRlbnQiOlsicmVxdWlyZSgnLi9fdHlwZWQtYXJyYXknKSgnSW50MTYnLCAyLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gSW50MTZBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///250\n")},function(module,exports,__webpack_require__){eval("__webpack_require__(27)('Uint16', 2, function (init) {\n return function Uint16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQudWludDE2LWFycmF5LmpzP2FmNTYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsbUJBQU8sQ0FBQyxFQUFnQjtBQUN4QjtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjI1MS5qcyIsInNvdXJjZXNDb250ZW50IjpbInJlcXVpcmUoJy4vX3R5cGVkLWFycmF5JykoJ1VpbnQxNicsIDIsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBVaW50MTZBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///251\n")},function(module,exports,__webpack_require__){eval("__webpack_require__(27)('Int32', 4, function (init) {\n return function Int32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuaW50MzItYXJyYXkuanM/YjZlNCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjUyLmpzIiwic291cmNlc0NvbnRlbnQiOlsicmVxdWlyZSgnLi9fdHlwZWQtYXJyYXknKSgnSW50MzInLCA0LCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gSW50MzJBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///252\n")},function(module,exports,__webpack_require__){eval("__webpack_require__(27)('Uint32', 4, function (init) {\n return function Uint32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQudWludDMyLWFycmF5LmpzPzljMjkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsbUJBQU8sQ0FBQyxFQUFnQjtBQUN4QjtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjI1My5qcyIsInNvdXJjZXNDb250ZW50IjpbInJlcXVpcmUoJy4vX3R5cGVkLWFycmF5JykoJ1VpbnQzMicsIDQsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBVaW50MzJBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///253\n")},function(module,exports,__webpack_require__){eval("__webpack_require__(27)('Float32', 4, function (init) {\n return function Float32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuZmxvYXQzMi1hcnJheS5qcz82M2Q5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLG1CQUFPLENBQUMsRUFBZ0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyNTQuanMiLCJzb3VyY2VzQ29udGVudCI6WyJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdGbG9hdDMyJywgNCwgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIEZsb2F0MzJBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///254\n")},function(module,exports,__webpack_require__){eval("__webpack_require__(27)('Float64', 8, function (init) {\n return function Float64Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuZmxvYXQ2NC1hcnJheS5qcz80ZGRhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLG1CQUFPLENBQUMsRUFBZ0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyNTUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdGbG9hdDY0JywgOCwgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIEZsb2F0NjRBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///255\n")},function(module,exports,__webpack_require__){eval("// 26.1.1 Reflect.apply(target, thisArgument, argumentsList)\nvar $export = __webpack_require__(0);\nvar aFunction = __webpack_require__(10);\nvar anObject = __webpack_require__(1);\nvar rApply = (__webpack_require__(2).Reflect || {}).apply;\nvar fApply = Function.apply;\n// MS Edge argumentsList argument is optional\n$export($export.S + $export.F * !__webpack_require__(3)(function () {\n rApply(function () { /* empty */ });\n}), 'Reflect', {\n apply: function apply(target, thisArgument, argumentsList) {\n var T = aFunction(target);\n var L = anObject(argumentsList);\n return rApply ? rApply(T, thisArgument, L) : fApply.call(T, thisArgument, L);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5hcHBseS5qcz9kZjFiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2QyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxjQUFjLG1CQUFPLENBQUMsQ0FBVyxlQUFlO0FBQ2hEO0FBQ0E7QUFDQSxpQ0FBaUMsbUJBQU8sQ0FBQyxDQUFVO0FBQ25ELHNCQUFzQixjQUFjO0FBQ3BDLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyNTYuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyNi4xLjEgUmVmbGVjdC5hcHBseSh0YXJnZXQsIHRoaXNBcmd1bWVudCwgYXJndW1lbnRzTGlzdClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgckFwcGx5ID0gKHJlcXVpcmUoJy4vX2dsb2JhbCcpLlJlZmxlY3QgfHwge30pLmFwcGx5O1xudmFyIGZBcHBseSA9IEZ1bmN0aW9uLmFwcGx5O1xuLy8gTVMgRWRnZSBhcmd1bWVudHNMaXN0IGFyZ3VtZW50IGlzIG9wdGlvbmFsXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgckFwcGx5KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSk7XG59KSwgJ1JlZmxlY3QnLCB7XG4gIGFwcGx5OiBmdW5jdGlvbiBhcHBseSh0YXJnZXQsIHRoaXNBcmd1bWVudCwgYXJndW1lbnRzTGlzdCkge1xuICAgIHZhciBUID0gYUZ1bmN0aW9uKHRhcmdldCk7XG4gICAgdmFyIEwgPSBhbk9iamVjdChhcmd1bWVudHNMaXN0KTtcbiAgICByZXR1cm4gckFwcGx5ID8gckFwcGx5KFQsIHRoaXNBcmd1bWVudCwgTCkgOiBmQXBwbHkuY2FsbChULCB0aGlzQXJndW1lbnQsIEwpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///256\n")},function(module,exports,__webpack_require__){eval("// 26.1.2 Reflect.construct(target, argumentsList [, newTarget])\nvar $export = __webpack_require__(0);\nvar create = __webpack_require__(36);\nvar aFunction = __webpack_require__(10);\nvar anObject = __webpack_require__(1);\nvar isObject = __webpack_require__(4);\nvar fails = __webpack_require__(3);\nvar bind = __webpack_require__(101);\nvar rConstruct = (__webpack_require__(2).Reflect || {}).construct;\n\n// MS Edge supports only 2 arguments and argumentsList argument is optional\n// FF Nightly sets third argument as `new.target`, but does not create `this` from it\nvar NEW_TARGET_BUG = fails(function () {\n function F() { /* empty */ }\n return !(rConstruct(function () { /* empty */ }, [], F) instanceof F);\n});\nvar ARGS_BUG = !fails(function () {\n rConstruct(function () { /* empty */ });\n});\n\n$export($export.S + $export.F * (NEW_TARGET_BUG || ARGS_BUG), 'Reflect', {\n construct: function construct(Target, args /* , newTarget */) {\n aFunction(Target);\n anObject(args);\n var newTarget = arguments.length < 3 ? Target : aFunction(arguments[2]);\n if (ARGS_BUG && !NEW_TARGET_BUG) return rConstruct(Target, args, newTarget);\n if (Target == newTarget) {\n // w/o altered newTarget, optimization for 0-4 arguments\n switch (args.length) {\n case 0: return new Target();\n case 1: return new Target(args[0]);\n case 2: return new Target(args[0], args[1]);\n case 3: return new Target(args[0], args[1], args[2]);\n case 4: return new Target(args[0], args[1], args[2], args[3]);\n }\n // w/o altered newTarget, lot of arguments case\n var $args = [null];\n $args.push.apply($args, args);\n return new (bind.apply(Target, $args))();\n }\n // with altered newTarget, not support built-in constructors\n var proto = newTarget.prototype;\n var instance = create(isObject(proto) ? proto : Object.prototype);\n var result = Function.apply.call(Target, instance, args);\n return isObject(result) ? result : instance;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5jb25zdHJ1Y3QuanM/MjM5NyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGFBQWEsbUJBQU8sQ0FBQyxFQUFrQjtBQUN2QyxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLFlBQVksbUJBQU8sQ0FBQyxDQUFVO0FBQzlCLFdBQVcsbUJBQU8sQ0FBQyxHQUFTO0FBQzVCLGtCQUFrQixtQkFBTyxDQUFDLENBQVcsZUFBZTs7QUFFcEQ7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCLG1DQUFtQyxjQUFjO0FBQ2pELENBQUM7QUFDRDtBQUNBLDBCQUEwQixjQUFjO0FBQ3hDLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjU3LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjYuMS4yIFJlZmxlY3QuY29uc3RydWN0KHRhcmdldCwgYXJndW1lbnRzTGlzdCBbLCBuZXdUYXJnZXRdKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuL19vYmplY3QtY3JlYXRlJyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4vX2JpbmQnKTtcbnZhciByQ29uc3RydWN0ID0gKHJlcXVpcmUoJy4vX2dsb2JhbCcpLlJlZmxlY3QgfHwge30pLmNvbnN0cnVjdDtcblxuLy8gTVMgRWRnZSBzdXBwb3J0cyBvbmx5IDIgYXJndW1lbnRzIGFuZCBhcmd1bWVudHNMaXN0IGFyZ3VtZW50IGlzIG9wdGlvbmFsXG4vLyBGRiBOaWdodGx5IHNldHMgdGhpcmQgYXJndW1lbnQgYXMgYG5ldy50YXJnZXRgLCBidXQgZG9lcyBub3QgY3JlYXRlIGB0aGlzYCBmcm9tIGl0XG52YXIgTkVXX1RBUkdFVF9CVUcgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEYoKSB7IC8qIGVtcHR5ICovIH1cbiAgcmV0dXJuICEockNvbnN0cnVjdChmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0sIFtdLCBGKSBpbnN0YW5jZW9mIEYpO1xufSk7XG52YXIgQVJHU19CVUcgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICByQ29uc3RydWN0KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSk7XG59KTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAoTkVXX1RBUkdFVF9CVUcgfHwgQVJHU19CVUcpLCAnUmVmbGVjdCcsIHtcbiAgY29uc3RydWN0OiBmdW5jdGlvbiBjb25zdHJ1Y3QoVGFyZ2V0LCBhcmdzIC8qICwgbmV3VGFyZ2V0ICovKSB7XG4gICAgYUZ1bmN0aW9uKFRhcmdldCk7XG4gICAgYW5PYmplY3QoYXJncyk7XG4gICAgdmFyIG5ld1RhcmdldCA9IGFyZ3VtZW50cy5sZW5ndGggPCAzID8gVGFyZ2V0IDogYUZ1bmN0aW9uKGFyZ3VtZW50c1syXSk7XG4gICAgaWYgKEFSR1NfQlVHICYmICFORVdfVEFSR0VUX0JVRykgcmV0dXJuIHJDb25zdHJ1Y3QoVGFyZ2V0LCBhcmdzLCBuZXdUYXJnZXQpO1xuICAgIGlmIChUYXJnZXQgPT0gbmV3VGFyZ2V0KSB7XG4gICAgICAvLyB3L28gYWx0ZXJlZCBuZXdUYXJnZXQsIG9wdGltaXphdGlvbiBmb3IgMC00IGFyZ3VtZW50c1xuICAgICAgc3dpdGNoIChhcmdzLmxlbmd0aCkge1xuICAgICAgICBjYXNlIDA6IHJldHVybiBuZXcgVGFyZ2V0KCk7XG4gICAgICAgIGNhc2UgMTogcmV0dXJuIG5ldyBUYXJnZXQoYXJnc1swXSk7XG4gICAgICAgIGNhc2UgMjogcmV0dXJuIG5ldyBUYXJnZXQoYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgICAgIGNhc2UgMzogcmV0dXJuIG5ldyBUYXJnZXQoYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7XG4gICAgICAgIGNhc2UgNDogcmV0dXJuIG5ldyBUYXJnZXQoYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSk7XG4gICAgICB9XG4gICAgICAvLyB3L28gYWx0ZXJlZCBuZXdUYXJnZXQsIGxvdCBvZiBhcmd1bWVudHMgY2FzZVxuICAgICAgdmFyICRhcmdzID0gW251bGxdO1xuICAgICAgJGFyZ3MucHVzaC5hcHBseSgkYXJncywgYXJncyk7XG4gICAgICByZXR1cm4gbmV3IChiaW5kLmFwcGx5KFRhcmdldCwgJGFyZ3MpKSgpO1xuICAgIH1cbiAgICAvLyB3aXRoIGFsdGVyZWQgbmV3VGFyZ2V0LCBub3Qgc3VwcG9ydCBidWlsdC1pbiBjb25zdHJ1Y3RvcnNcbiAgICB2YXIgcHJvdG8gPSBuZXdUYXJnZXQucHJvdG90eXBlO1xuICAgIHZhciBpbnN0YW5jZSA9IGNyZWF0ZShpc09iamVjdChwcm90bykgPyBwcm90byA6IE9iamVjdC5wcm90b3R5cGUpO1xuICAgIHZhciByZXN1bHQgPSBGdW5jdGlvbi5hcHBseS5jYWxsKFRhcmdldCwgaW5zdGFuY2UsIGFyZ3MpO1xuICAgIHJldHVybiBpc09iamVjdChyZXN1bHQpID8gcmVzdWx0IDogaW5zdGFuY2U7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///257\n")},function(module,exports,__webpack_require__){eval("// 26.1.3 Reflect.defineProperty(target, propertyKey, attributes)\nvar dP = __webpack_require__(8);\nvar $export = __webpack_require__(0);\nvar anObject = __webpack_require__(1);\nvar toPrimitive = __webpack_require__(23);\n\n// MS Edge has broken Reflect.defineProperty - throwing instead of returning false\n$export($export.S + $export.F * __webpack_require__(3)(function () {\n // eslint-disable-next-line no-undef\n Reflect.defineProperty(dP.f({}, 1, { value: 1 }), 1, { value: 2 });\n}), 'Reflect', {\n defineProperty: function defineProperty(target, propertyKey, attributes) {\n anObject(target);\n propertyKey = toPrimitive(propertyKey, true);\n anObject(attributes);\n try {\n dP.f(target, propertyKey, attributes);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5kZWZpbmUtcHJvcGVydHkuanM/ODhjYSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLFNBQVMsbUJBQU8sQ0FBQyxDQUFjO0FBQy9CLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGtCQUFrQixtQkFBTyxDQUFDLEVBQWlCOztBQUUzQztBQUNBLGdDQUFnQyxtQkFBTyxDQUFDLENBQVU7QUFDbEQ7QUFDQSxnQ0FBZ0MsTUFBTSxXQUFXLE9BQU8sV0FBVztBQUNuRSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyNTguanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyNi4xLjMgUmVmbGVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5S2V5LCBhdHRyaWJ1dGVzKVxudmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcblxuLy8gTVMgRWRnZSBoYXMgYnJva2VuIFJlZmxlY3QuZGVmaW5lUHJvcGVydHkgLSB0aHJvd2luZyBpbnN0ZWFkIG9mIHJldHVybmluZyBmYWxzZVxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gIFJlZmxlY3QuZGVmaW5lUHJvcGVydHkoZFAuZih7fSwgMSwgeyB2YWx1ZTogMSB9KSwgMSwgeyB2YWx1ZTogMiB9KTtcbn0pLCAnUmVmbGVjdCcsIHtcbiAgZGVmaW5lUHJvcGVydHk6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHlLZXksIGF0dHJpYnV0ZXMpIHtcbiAgICBhbk9iamVjdCh0YXJnZXQpO1xuICAgIHByb3BlcnR5S2V5ID0gdG9QcmltaXRpdmUocHJvcGVydHlLZXksIHRydWUpO1xuICAgIGFuT2JqZWN0KGF0dHJpYnV0ZXMpO1xuICAgIHRyeSB7XG4gICAgICBkUC5mKHRhcmdldCwgcHJvcGVydHlLZXksIGF0dHJpYnV0ZXMpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///258\n")},function(module,exports,__webpack_require__){eval("// 26.1.4 Reflect.deleteProperty(target, propertyKey)\nvar $export = __webpack_require__(0);\nvar gOPD = __webpack_require__(16).f;\nvar anObject = __webpack_require__(1);\n\n$export($export.S, 'Reflect', {\n deleteProperty: function deleteProperty(target, propertyKey) {\n var desc = gOPD(anObject(target), propertyKey);\n return desc && !desc.configurable ? false : delete target[propertyKey];\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5kZWxldGUtcHJvcGVydHkuanM/YmExNiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLFdBQVcsbUJBQU8sQ0FBQyxFQUFnQjtBQUNuQyxlQUFlLG1CQUFPLENBQUMsQ0FBYzs7QUFFckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjU5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjYuMS40IFJlZmxlY3QuZGVsZXRlUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eUtleSlcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZ09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJykuZjtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7XG4gIGRlbGV0ZVByb3BlcnR5OiBmdW5jdGlvbiBkZWxldGVQcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5S2V5KSB7XG4gICAgdmFyIGRlc2MgPSBnT1BEKGFuT2JqZWN0KHRhcmdldCksIHByb3BlcnR5S2V5KTtcbiAgICByZXR1cm4gZGVzYyAmJiAhZGVzYy5jb25maWd1cmFibGUgPyBmYWxzZSA6IGRlbGV0ZSB0YXJnZXRbcHJvcGVydHlLZXldO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///259\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// 26.1.5 Reflect.enumerate(target)\nvar $export = __webpack_require__(0);\nvar anObject = __webpack_require__(1);\nvar Enumerate = function (iterated) {\n this._t = anObject(iterated); // target\n this._i = 0; // next index\n var keys = this._k = []; // keys\n var key;\n for (key in iterated) keys.push(key);\n};\n__webpack_require__(78)(Enumerate, 'Object', function () {\n var that = this;\n var keys = that._k;\n var key;\n do {\n if (that._i >= keys.length) return { value: undefined, done: true };\n } while (!((key = keys[that._i++]) in that._t));\n return { value: key, done: false };\n});\n\n$export($export.S, 'Reflect', {\n enumerate: function enumerate(target) {\n return new Enumerate(target);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5lbnVtZXJhdGUuanM/N2ZmNiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckM7QUFDQSwrQkFBK0I7QUFDL0IsY0FBYztBQUNkLDBCQUEwQjtBQUMxQjtBQUNBO0FBQ0E7QUFDQSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0NBQXdDO0FBQ3hDLEdBQUc7QUFDSCxVQUFVO0FBQ1YsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjYwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gMjYuMS41IFJlZmxlY3QuZW51bWVyYXRlKHRhcmdldClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBFbnVtZXJhdGUgPSBmdW5jdGlvbiAoaXRlcmF0ZWQpIHtcbiAgdGhpcy5fdCA9IGFuT2JqZWN0KGl0ZXJhdGVkKTsgLy8gdGFyZ2V0XG4gIHRoaXMuX2kgPSAwOyAgICAgICAgICAgICAgICAgIC8vIG5leHQgaW5kZXhcbiAgdmFyIGtleXMgPSB0aGlzLl9rID0gW107ICAgICAgLy8ga2V5c1xuICB2YXIga2V5O1xuICBmb3IgKGtleSBpbiBpdGVyYXRlZCkga2V5cy5wdXNoKGtleSk7XG59O1xucmVxdWlyZSgnLi9faXRlci1jcmVhdGUnKShFbnVtZXJhdGUsICdPYmplY3QnLCBmdW5jdGlvbiAoKSB7XG4gIHZhciB0aGF0ID0gdGhpcztcbiAgdmFyIGtleXMgPSB0aGF0Ll9rO1xuICB2YXIga2V5O1xuICBkbyB7XG4gICAgaWYgKHRoYXQuX2kgPj0ga2V5cy5sZW5ndGgpIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfTtcbiAgfSB3aGlsZSAoISgoa2V5ID0ga2V5c1t0aGF0Ll9pKytdKSBpbiB0aGF0Ll90KSk7XG4gIHJldHVybiB7IHZhbHVlOiBrZXksIGRvbmU6IGZhbHNlIH07XG59KTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0Jywge1xuICBlbnVtZXJhdGU6IGZ1bmN0aW9uIGVudW1lcmF0ZSh0YXJnZXQpIHtcbiAgICByZXR1cm4gbmV3IEVudW1lcmF0ZSh0YXJnZXQpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///260\n")},function(module,exports,__webpack_require__){eval("// 26.1.6 Reflect.get(target, propertyKey [, receiver])\nvar gOPD = __webpack_require__(16);\nvar getPrototypeOf = __webpack_require__(17);\nvar has = __webpack_require__(14);\nvar $export = __webpack_require__(0);\nvar isObject = __webpack_require__(4);\nvar anObject = __webpack_require__(1);\n\nfunction get(target, propertyKey /* , receiver */) {\n var receiver = arguments.length < 3 ? target : arguments[2];\n var desc, proto;\n if (anObject(target) === receiver) return target[propertyKey];\n if (desc = gOPD.f(target, propertyKey)) return has(desc, 'value')\n ? desc.value\n : desc.get !== undefined\n ? desc.get.call(receiver)\n : undefined;\n if (isObject(proto = getPrototypeOf(target))) return get(proto, propertyKey, receiver);\n}\n\n$export($export.S, 'Reflect', { get: get });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5nZXQuanM/ZDE4NSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLFdBQVcsbUJBQU8sQ0FBQyxFQUFnQjtBQUNuQyxxQkFBcUIsbUJBQU8sQ0FBQyxFQUFlO0FBQzVDLFVBQVUsbUJBQU8sQ0FBQyxFQUFRO0FBQzFCLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjOztBQUVyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLCtCQUErQixXQUFXIiwiZmlsZSI6IjI2MS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDI2LjEuNiBSZWZsZWN0LmdldCh0YXJnZXQsIHByb3BlcnR5S2V5IFssIHJlY2VpdmVyXSlcbnZhciBnT1BEID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xuXG5mdW5jdGlvbiBnZXQodGFyZ2V0LCBwcm9wZXJ0eUtleSAvKiAsIHJlY2VpdmVyICovKSB7XG4gIHZhciByZWNlaXZlciA9IGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdGFyZ2V0IDogYXJndW1lbnRzWzJdO1xuICB2YXIgZGVzYywgcHJvdG87XG4gIGlmIChhbk9iamVjdCh0YXJnZXQpID09PSByZWNlaXZlcikgcmV0dXJuIHRhcmdldFtwcm9wZXJ0eUtleV07XG4gIGlmIChkZXNjID0gZ09QRC5mKHRhcmdldCwgcHJvcGVydHlLZXkpKSByZXR1cm4gaGFzKGRlc2MsICd2YWx1ZScpXG4gICAgPyBkZXNjLnZhbHVlXG4gICAgOiBkZXNjLmdldCAhPT0gdW5kZWZpbmVkXG4gICAgICA/IGRlc2MuZ2V0LmNhbGwocmVjZWl2ZXIpXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgaWYgKGlzT2JqZWN0KHByb3RvID0gZ2V0UHJvdG90eXBlT2YodGFyZ2V0KSkpIHJldHVybiBnZXQocHJvdG8sIHByb3BlcnR5S2V5LCByZWNlaXZlcik7XG59XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHsgZ2V0OiBnZXQgfSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///261\n")},function(module,exports,__webpack_require__){eval("// 26.1.7 Reflect.getOwnPropertyDescriptor(target, propertyKey)\nvar gOPD = __webpack_require__(16);\nvar $export = __webpack_require__(0);\nvar anObject = __webpack_require__(1);\n\n$export($export.S, 'Reflect', {\n getOwnPropertyDescriptor: function getOwnPropertyDescriptor(target, propertyKey) {\n return gOPD.f(anObject(target), propertyKey);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanM/ZWJkZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLFdBQVcsbUJBQU8sQ0FBQyxFQUFnQjtBQUNuQyxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxlQUFlLG1CQUFPLENBQUMsQ0FBYzs7QUFFckM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjI2Mi5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDI2LjEuNyBSZWZsZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIHByb3BlcnR5S2V5KVxudmFyIGdPUEQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7XG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgcHJvcGVydHlLZXkpIHtcbiAgICByZXR1cm4gZ09QRC5mKGFuT2JqZWN0KHRhcmdldCksIHByb3BlcnR5S2V5KTtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///262\n")},function(module,exports,__webpack_require__){eval("// 26.1.8 Reflect.getPrototypeOf(target)\nvar $export = __webpack_require__(0);\nvar getProto = __webpack_require__(17);\nvar anObject = __webpack_require__(1);\n\n$export($export.S, 'Reflect', {\n getPrototypeOf: function getPrototypeOf(target) {\n return getProto(anObject(target));\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5nZXQtcHJvdG90eXBlLW9mLmpzPzJkMzQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxlQUFlLG1CQUFPLENBQUMsRUFBZTtBQUN0QyxlQUFlLG1CQUFPLENBQUMsQ0FBYzs7QUFFckM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjI2My5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDI2LjEuOCBSZWZsZWN0LmdldFByb3RvdHlwZU9mKHRhcmdldClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZ2V0UHJvdG8gPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0Jywge1xuICBnZXRQcm90b3R5cGVPZjogZnVuY3Rpb24gZ2V0UHJvdG90eXBlT2YodGFyZ2V0KSB7XG4gICAgcmV0dXJuIGdldFByb3RvKGFuT2JqZWN0KHRhcmdldCkpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///263\n")},function(module,exports,__webpack_require__){eval("// 26.1.9 Reflect.has(target, propertyKey)\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Reflect', {\n has: function has(target, propertyKey) {\n return propertyKey in target;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5oYXMuanM/ZjZiMyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXOztBQUVqQztBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjY0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjYuMS45IFJlZmxlY3QuaGFzKHRhcmdldCwgcHJvcGVydHlLZXkpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7XG4gIGhhczogZnVuY3Rpb24gaGFzKHRhcmdldCwgcHJvcGVydHlLZXkpIHtcbiAgICByZXR1cm4gcHJvcGVydHlLZXkgaW4gdGFyZ2V0O1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///264\n")},function(module,exports,__webpack_require__){eval("// 26.1.10 Reflect.isExtensible(target)\nvar $export = __webpack_require__(0);\nvar anObject = __webpack_require__(1);\nvar $isExtensible = Object.isExtensible;\n\n$export($export.S, 'Reflect', {\n isExtensible: function isExtensible(target) {\n anObject(target);\n return $isExtensible ? $isExtensible(target) : true;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5pcy1leHRlbnNpYmxlLmpzPzIyNTEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyNjUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyNi4xLjEwIFJlZmxlY3QuaXNFeHRlbnNpYmxlKHRhcmdldClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciAkaXNFeHRlbnNpYmxlID0gT2JqZWN0LmlzRXh0ZW5zaWJsZTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0Jywge1xuICBpc0V4dGVuc2libGU6IGZ1bmN0aW9uIGlzRXh0ZW5zaWJsZSh0YXJnZXQpIHtcbiAgICBhbk9iamVjdCh0YXJnZXQpO1xuICAgIHJldHVybiAkaXNFeHRlbnNpYmxlID8gJGlzRXh0ZW5zaWJsZSh0YXJnZXQpIDogdHJ1ZTtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///265\n")},function(module,exports,__webpack_require__){eval("// 26.1.11 Reflect.ownKeys(target)\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Reflect', { ownKeys: __webpack_require__(123) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5vd24ta2V5cy5qcz9jNjk4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDLCtCQUErQixVQUFVLG1CQUFPLENBQUMsR0FBYSxHQUFHIiwiZmlsZSI6IjI2Ni5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDI2LjEuMTEgUmVmbGVjdC5vd25LZXlzKHRhcmdldClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHsgb3duS2V5czogcmVxdWlyZSgnLi9fb3duLWtleXMnKSB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///266\n")},function(module,exports,__webpack_require__){eval("// 26.1.12 Reflect.preventExtensions(target)\nvar $export = __webpack_require__(0);\nvar anObject = __webpack_require__(1);\nvar $preventExtensions = Object.preventExtensions;\n\n$export($export.S, 'Reflect', {\n preventExtensions: function preventExtensions(target) {\n anObject(target);\n try {\n if ($preventExtensions) $preventExtensions(target);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5wcmV2ZW50LWV4dGVuc2lvbnMuanM/YTE5ZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjI2Ny5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDI2LjEuMTIgUmVmbGVjdC5wcmV2ZW50RXh0ZW5zaW9ucyh0YXJnZXQpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgJHByZXZlbnRFeHRlbnNpb25zID0gT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7XG4gIHByZXZlbnRFeHRlbnNpb25zOiBmdW5jdGlvbiBwcmV2ZW50RXh0ZW5zaW9ucyh0YXJnZXQpIHtcbiAgICBhbk9iamVjdCh0YXJnZXQpO1xuICAgIHRyeSB7XG4gICAgICBpZiAoJHByZXZlbnRFeHRlbnNpb25zKSAkcHJldmVudEV4dGVuc2lvbnModGFyZ2V0KTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///267\n")},function(module,exports,__webpack_require__){eval("// 26.1.13 Reflect.set(target, propertyKey, V [, receiver])\nvar dP = __webpack_require__(8);\nvar gOPD = __webpack_require__(16);\nvar getPrototypeOf = __webpack_require__(17);\nvar has = __webpack_require__(14);\nvar $export = __webpack_require__(0);\nvar createDesc = __webpack_require__(32);\nvar anObject = __webpack_require__(1);\nvar isObject = __webpack_require__(4);\n\nfunction set(target, propertyKey, V /* , receiver */) {\n var receiver = arguments.length < 4 ? target : arguments[3];\n var ownDesc = gOPD.f(anObject(target), propertyKey);\n var existingDescriptor, proto;\n if (!ownDesc) {\n if (isObject(proto = getPrototypeOf(target))) {\n return set(proto, propertyKey, V, receiver);\n }\n ownDesc = createDesc(0);\n }\n if (has(ownDesc, 'value')) {\n if (ownDesc.writable === false || !isObject(receiver)) return false;\n if (existingDescriptor = gOPD.f(receiver, propertyKey)) {\n if (existingDescriptor.get || existingDescriptor.set || existingDescriptor.writable === false) return false;\n existingDescriptor.value = V;\n dP.f(receiver, propertyKey, existingDescriptor);\n } else dP.f(receiver, propertyKey, createDesc(0, V));\n return true;\n }\n return ownDesc.set === undefined ? false : (ownDesc.set.call(receiver, V), true);\n}\n\n$export($export.S, 'Reflect', { set: set });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5zZXQuanM/OTI1MyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLFNBQVMsbUJBQU8sQ0FBQyxDQUFjO0FBQy9CLFdBQVcsbUJBQU8sQ0FBQyxFQUFnQjtBQUNuQyxxQkFBcUIsbUJBQU8sQ0FBQyxFQUFlO0FBQzVDLFVBQVUsbUJBQU8sQ0FBQyxFQUFRO0FBQzFCLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGlCQUFpQixtQkFBTyxDQUFDLEVBQWtCO0FBQzNDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjOztBQUVyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSwrQkFBK0IsV0FBVyIsImZpbGUiOiIyNjguanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyNi4xLjEzIFJlZmxlY3Quc2V0KHRhcmdldCwgcHJvcGVydHlLZXksIFYgWywgcmVjZWl2ZXJdKVxudmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG52YXIgZ09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGNyZWF0ZURlc2MgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xuXG5mdW5jdGlvbiBzZXQodGFyZ2V0LCBwcm9wZXJ0eUtleSwgViAvKiAsIHJlY2VpdmVyICovKSB7XG4gIHZhciByZWNlaXZlciA9IGFyZ3VtZW50cy5sZW5ndGggPCA0ID8gdGFyZ2V0IDogYXJndW1lbnRzWzNdO1xuICB2YXIgb3duRGVzYyA9IGdPUEQuZihhbk9iamVjdCh0YXJnZXQpLCBwcm9wZXJ0eUtleSk7XG4gIHZhciBleGlzdGluZ0Rlc2NyaXB0b3IsIHByb3RvO1xuICBpZiAoIW93bkRlc2MpIHtcbiAgICBpZiAoaXNPYmplY3QocHJvdG8gPSBnZXRQcm90b3R5cGVPZih0YXJnZXQpKSkge1xuICAgICAgcmV0dXJuIHNldChwcm90bywgcHJvcGVydHlLZXksIFYsIHJlY2VpdmVyKTtcbiAgICB9XG4gICAgb3duRGVzYyA9IGNyZWF0ZURlc2MoMCk7XG4gIH1cbiAgaWYgKGhhcyhvd25EZXNjLCAndmFsdWUnKSkge1xuICAgIGlmIChvd25EZXNjLndyaXRhYmxlID09PSBmYWxzZSB8fCAhaXNPYmplY3QocmVjZWl2ZXIpKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKGV4aXN0aW5nRGVzY3JpcHRvciA9IGdPUEQuZihyZWNlaXZlciwgcHJvcGVydHlLZXkpKSB7XG4gICAgICBpZiAoZXhpc3RpbmdEZXNjcmlwdG9yLmdldCB8fCBleGlzdGluZ0Rlc2NyaXB0b3Iuc2V0IHx8IGV4aXN0aW5nRGVzY3JpcHRvci53cml0YWJsZSA9PT0gZmFsc2UpIHJldHVybiBmYWxzZTtcbiAgICAgIGV4aXN0aW5nRGVzY3JpcHRvci52YWx1ZSA9IFY7XG4gICAgICBkUC5mKHJlY2VpdmVyLCBwcm9wZXJ0eUtleSwgZXhpc3RpbmdEZXNjcmlwdG9yKTtcbiAgICB9IGVsc2UgZFAuZihyZWNlaXZlciwgcHJvcGVydHlLZXksIGNyZWF0ZURlc2MoMCwgVikpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBvd25EZXNjLnNldCA9PT0gdW5kZWZpbmVkID8gZmFsc2UgOiAob3duRGVzYy5zZXQuY2FsbChyZWNlaXZlciwgViksIHRydWUpO1xufVxuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7IHNldDogc2V0IH0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///268\n")},function(module,exports,__webpack_require__){eval("// 26.1.14 Reflect.setPrototypeOf(target, proto)\nvar $export = __webpack_require__(0);\nvar setProto = __webpack_require__(71);\n\nif (setProto) $export($export.S, 'Reflect', {\n setPrototypeOf: function setPrototypeOf(target, proto) {\n setProto.check(target, proto);\n try {\n setProto.set(target, proto);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5zZXQtcHJvdG90eXBlLW9mLmpzPzkyNzUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxlQUFlLG1CQUFPLENBQUMsRUFBYzs7QUFFckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjY5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjYuMS4xNCBSZWZsZWN0LnNldFByb3RvdHlwZU9mKHRhcmdldCwgcHJvdG8pXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHNldFByb3RvID0gcmVxdWlyZSgnLi9fc2V0LXByb3RvJyk7XG5cbmlmIChzZXRQcm90bykgJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0Jywge1xuICBzZXRQcm90b3R5cGVPZjogZnVuY3Rpb24gc2V0UHJvdG90eXBlT2YodGFyZ2V0LCBwcm90bykge1xuICAgIHNldFByb3RvLmNoZWNrKHRhcmdldCwgcHJvdG8pO1xuICAgIHRyeSB7XG4gICAgICBzZXRQcm90by5zZXQodGFyZ2V0LCBwcm90byk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///269\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// https://github.com/tc39/Array.prototype.includes\nvar $export = __webpack_require__(0);\nvar $includes = __webpack_require__(52)(true);\n\n$export($export.P, 'Array', {\n includes: function includes(el /* , fromIndex = 0 */) {\n return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\n__webpack_require__(31)('includes');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuYXJyYXkuaW5jbHVkZXMuanM/Njc2MiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBbUI7O0FBRTNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRCxtQkFBTyxDQUFDLEVBQXVCIiwiZmlsZSI6IjI3MC5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L0FycmF5LnByb3RvdHlwZS5pbmNsdWRlc1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkaW5jbHVkZXMgPSByZXF1aXJlKCcuL19hcnJheS1pbmNsdWRlcycpKHRydWUpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCwgJ0FycmF5Jywge1xuICBpbmNsdWRlczogZnVuY3Rpb24gaW5jbHVkZXMoZWwgLyogLCBmcm9tSW5kZXggPSAwICovKSB7XG4gICAgcmV0dXJuICRpbmNsdWRlcyh0aGlzLCBlbCwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcblxucmVxdWlyZSgnLi9fYWRkLXRvLXVuc2NvcGFibGVzJykoJ2luY2x1ZGVzJyk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///270\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// https://tc39.github.io/proposal-flatMap/#sec-Array.prototype.flatMap\nvar $export = __webpack_require__(0);\nvar flattenIntoArray = __webpack_require__(124);\nvar toObject = __webpack_require__(9);\nvar toLength = __webpack_require__(6);\nvar aFunction = __webpack_require__(10);\nvar arraySpeciesCreate = __webpack_require__(84);\n\n$export($export.P, 'Array', {\n flatMap: function flatMap(callbackfn /* , thisArg */) {\n var O = toObject(this);\n var sourceLen, A;\n aFunction(callbackfn);\n sourceLen = toLength(O.length);\n A = arraySpeciesCreate(O, 0);\n flattenIntoArray(A, O, O, sourceLen, 0, 1, callbackfn, arguments[1]);\n return A;\n }\n});\n\n__webpack_require__(31)('flatMap');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuYXJyYXkuZmxhdC1tYXAuanM/ZTk1NiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsdUJBQXVCLG1CQUFPLENBQUMsR0FBdUI7QUFDdEQsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2Qyx5QkFBeUIsbUJBQU8sQ0FBQyxFQUF5Qjs7QUFFMUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVELG1CQUFPLENBQUMsRUFBdUIiLCJmaWxlIjoiMjcxLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1mbGF0TWFwLyNzZWMtQXJyYXkucHJvdG90eXBlLmZsYXRNYXBcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZmxhdHRlbkludG9BcnJheSA9IHJlcXVpcmUoJy4vX2ZsYXR0ZW4taW50by1hcnJheScpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgYXJyYXlTcGVjaWVzQ3JlYXRlID0gcmVxdWlyZSgnLi9fYXJyYXktc3BlY2llcy1jcmVhdGUnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdBcnJheScsIHtcbiAgZmxhdE1hcDogZnVuY3Rpb24gZmxhdE1hcChjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gICAgdmFyIHNvdXJjZUxlbiwgQTtcbiAgICBhRnVuY3Rpb24oY2FsbGJhY2tmbik7XG4gICAgc291cmNlTGVuID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICAgIEEgPSBhcnJheVNwZWNpZXNDcmVhdGUoTywgMCk7XG4gICAgZmxhdHRlbkludG9BcnJheShBLCBPLCBPLCBzb3VyY2VMZW4sIDAsIDEsIGNhbGxiYWNrZm4sIGFyZ3VtZW50c1sxXSk7XG4gICAgcmV0dXJuIEE7XG4gIH1cbn0pO1xuXG5yZXF1aXJlKCcuL19hZGQtdG8tdW5zY29wYWJsZXMnKSgnZmxhdE1hcCcpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///271\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// https://tc39.github.io/proposal-flatMap/#sec-Array.prototype.flatten\nvar $export = __webpack_require__(0);\nvar flattenIntoArray = __webpack_require__(124);\nvar toObject = __webpack_require__(9);\nvar toLength = __webpack_require__(6);\nvar toInteger = __webpack_require__(21);\nvar arraySpeciesCreate = __webpack_require__(84);\n\n$export($export.P, 'Array', {\n flatten: function flatten(/* depthArg = 1 */) {\n var depthArg = arguments[0];\n var O = toObject(this);\n var sourceLen = toLength(O.length);\n var A = arraySpeciesCreate(O, 0);\n flattenIntoArray(A, O, O, sourceLen, 0, depthArg === undefined ? 1 : toInteger(depthArg));\n return A;\n }\n});\n\n__webpack_require__(31)('flatten');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuYXJyYXkuZmxhdHRlbi5qcz83MWYxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyx1QkFBdUIsbUJBQU8sQ0FBQyxHQUF1QjtBQUN0RCxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDLHlCQUF5QixtQkFBTyxDQUFDLEVBQXlCOztBQUUxRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVELG1CQUFPLENBQUMsRUFBdUIiLCJmaWxlIjoiMjcyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1mbGF0TWFwLyNzZWMtQXJyYXkucHJvdG90eXBlLmZsYXR0ZW5cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZmxhdHRlbkludG9BcnJheSA9IHJlcXVpcmUoJy4vX2ZsYXR0ZW4taW50by1hcnJheScpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgYXJyYXlTcGVjaWVzQ3JlYXRlID0gcmVxdWlyZSgnLi9fYXJyYXktc3BlY2llcy1jcmVhdGUnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdBcnJheScsIHtcbiAgZmxhdHRlbjogZnVuY3Rpb24gZmxhdHRlbigvKiBkZXB0aEFyZyA9IDEgKi8pIHtcbiAgICB2YXIgZGVwdGhBcmcgPSBhcmd1bWVudHNbMF07XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgc291cmNlTGVuID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICAgIHZhciBBID0gYXJyYXlTcGVjaWVzQ3JlYXRlKE8sIDApO1xuICAgIGZsYXR0ZW5JbnRvQXJyYXkoQSwgTywgTywgc291cmNlTGVuLCAwLCBkZXB0aEFyZyA9PT0gdW5kZWZpbmVkID8gMSA6IHRvSW50ZWdlcihkZXB0aEFyZykpO1xuICAgIHJldHVybiBBO1xuICB9XG59KTtcblxucmVxdWlyZSgnLi9fYWRkLXRvLXVuc2NvcGFibGVzJykoJ2ZsYXR0ZW4nKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///272\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// https://github.com/mathiasbynens/String.prototype.at\nvar $export = __webpack_require__(0);\nvar $at = __webpack_require__(55)(true);\nvar $fails = __webpack_require__(3);\n\nvar FORCED = $fails(function () {\n return '𠮷'.at(0) !== '𠮷';\n});\n\n$export($export.P + $export.F * FORCED, 'String', {\n at: function at(pos) {\n return $at(this, pos);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLmF0LmpzPzM1MzUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLFVBQVUsbUJBQU8sQ0FBQyxFQUFjO0FBQ2hDLGFBQWEsbUJBQU8sQ0FBQyxDQUFVOztBQUUvQjtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjczLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL21hdGhpYXNieW5lbnMvU3RyaW5nLnByb3RvdHlwZS5hdFxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkYXQgPSByZXF1aXJlKCcuL19zdHJpbmctYXQnKSh0cnVlKTtcbnZhciAkZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xuXG52YXIgRk9SQ0VEID0gJGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICfwoK63Jy5hdCgwKSAhPT0gJ/CgrrcnO1xufSk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogRk9SQ0VELCAnU3RyaW5nJywge1xuICBhdDogZnVuY3Rpb24gYXQocG9zKSB7XG4gICAgcmV0dXJuICRhdCh0aGlzLCBwb3MpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///273\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = __webpack_require__(0);\nvar $pad = __webpack_require__(125);\nvar userAgent = __webpack_require__(60);\n\n// https://github.com/zloirock/core-js/issues/280\nvar WEBKIT_BUG = /Version\\/10\\.\\d+(\\.\\d+)?( Mobile\\/\\w+)? Safari\\//.test(userAgent);\n\n$export($export.P + $export.F * WEBKIT_BUG, 'String', {\n padStart: function padStart(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, true);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLnBhZC1zdGFydC5qcz9mNTc2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxXQUFXLG1CQUFPLENBQUMsR0FBZTtBQUNsQyxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlOztBQUV2QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyNzQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zdHJpbmctcGFkLXN0YXJ0LWVuZFxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkcGFkID0gcmVxdWlyZSgnLi9fc3RyaW5nLXBhZCcpO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4vX3VzZXItYWdlbnQnKTtcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzI4MFxudmFyIFdFQktJVF9CVUcgPSAvVmVyc2lvblxcLzEwXFwuXFxkKyhcXC5cXGQrKT8oIE1vYmlsZVxcL1xcdyspPyBTYWZhcmlcXC8vLnRlc3QodXNlckFnZW50KTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiBXRUJLSVRfQlVHLCAnU3RyaW5nJywge1xuICBwYWRTdGFydDogZnVuY3Rpb24gcGFkU3RhcnQobWF4TGVuZ3RoIC8qICwgZmlsbFN0cmluZyA9ICcgJyAqLykge1xuICAgIHJldHVybiAkcGFkKHRoaXMsIG1heExlbmd0aCwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQsIHRydWUpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///274\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = __webpack_require__(0);\nvar $pad = __webpack_require__(125);\nvar userAgent = __webpack_require__(60);\n\n// https://github.com/zloirock/core-js/issues/280\nvar WEBKIT_BUG = /Version\\/10\\.\\d+(\\.\\d+)?( Mobile\\/\\w+)? Safari\\//.test(userAgent);\n\n$export($export.P + $export.F * WEBKIT_BUG, 'String', {\n padEnd: function padEnd(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, false);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLnBhZC1lbmQuanM/ZWQ1MCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsV0FBVyxtQkFBTyxDQUFDLEdBQWU7QUFDbEMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTs7QUFFdkM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjc1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc3RyaW5nLXBhZC1zdGFydC1lbmRcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHBhZCA9IHJlcXVpcmUoJy4vX3N0cmluZy1wYWQnKTtcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuL191c2VyLWFnZW50Jyk7XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8yODBcbnZhciBXRUJLSVRfQlVHID0gL1ZlcnNpb25cXC8xMFxcLlxcZCsoXFwuXFxkKyk/KCBNb2JpbGVcXC9cXHcrKT8gU2FmYXJpXFwvLy50ZXN0KHVzZXJBZ2VudCk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogV0VCS0lUX0JVRywgJ1N0cmluZycsIHtcbiAgcGFkRW5kOiBmdW5jdGlvbiBwYWRFbmQobWF4TGVuZ3RoIC8qICwgZmlsbFN0cmluZyA9ICcgJyAqLykge1xuICAgIHJldHVybiAkcGFkKHRoaXMsIG1heExlbmd0aCwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQsIGZhbHNlKTtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///275\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// https://github.com/sebmarkbage/ecmascript-string-left-right-trim\n__webpack_require__(45)('trimLeft', function ($trim) {\n return function trimLeft() {\n return $trim(this, 1);\n };\n}, 'trimStart');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLnRyaW0tbGVmdC5qcz8yM2JlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjc2LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3NlYm1hcmtiYWdlL2VjbWFzY3JpcHQtc3RyaW5nLWxlZnQtcmlnaHQtdHJpbVxucmVxdWlyZSgnLi9fc3RyaW5nLXRyaW0nKSgndHJpbUxlZnQnLCBmdW5jdGlvbiAoJHRyaW0pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHRyaW1MZWZ0KCkge1xuICAgIHJldHVybiAkdHJpbSh0aGlzLCAxKTtcbiAgfTtcbn0sICd0cmltU3RhcnQnKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///276\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// https://github.com/sebmarkbage/ecmascript-string-left-right-trim\n__webpack_require__(45)('trimRight', function ($trim) {\n return function trimRight() {\n return $trim(this, 2);\n };\n}, 'trimEnd');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLnRyaW0tcmlnaHQuanM/N2MwZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsbUJBQU8sQ0FBQyxFQUFnQjtBQUN4QjtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjI3Ny5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9zZWJtYXJrYmFnZS9lY21hc2NyaXB0LXN0cmluZy1sZWZ0LXJpZ2h0LXRyaW1cbnJlcXVpcmUoJy4vX3N0cmluZy10cmltJykoJ3RyaW1SaWdodCcsIGZ1bmN0aW9uICgkdHJpbSkge1xuICByZXR1cm4gZnVuY3Rpb24gdHJpbVJpZ2h0KCkge1xuICAgIHJldHVybiAkdHJpbSh0aGlzLCAyKTtcbiAgfTtcbn0sICd0cmltRW5kJyk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///277\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// https://tc39.github.io/String.prototype.matchAll/\nvar $export = __webpack_require__(0);\nvar defined = __webpack_require__(24);\nvar toLength = __webpack_require__(6);\nvar isRegExp = __webpack_require__(56);\nvar getFlags = __webpack_require__(50);\nvar RegExpProto = RegExp.prototype;\n\nvar $RegExpStringIterator = function (regexp, string) {\n this._r = regexp;\n this._s = string;\n};\n\n__webpack_require__(78)($RegExpStringIterator, 'RegExp String', function next() {\n var match = this._r.exec(this._s);\n return { value: match, done: match === null };\n});\n\n$export($export.P, 'String', {\n matchAll: function matchAll(regexp) {\n defined(this);\n if (!isRegExp(regexp)) throw TypeError(regexp + ' is not a regexp!');\n var S = String(this);\n var flags = 'flags' in RegExpProto ? String(regexp.flags) : getFlags.call(regexp);\n var rx = new RegExp(regexp.source, ~flags.indexOf('g') ? flags : 'g' + flags);\n rx.lastIndex = toLength(regexp.lastIndex);\n return new $RegExpStringIterator(rx, S);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLm1hdGNoLWFsbC5qcz85ODhkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxjQUFjLG1CQUFPLENBQUMsRUFBWTtBQUNsQyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxlQUFlLG1CQUFPLENBQUMsRUFBYztBQUNyQyxlQUFlLG1CQUFPLENBQUMsRUFBVTtBQUNqQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3hCO0FBQ0EsVUFBVTtBQUNWLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjI3OC5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vU3RyaW5nLnByb3RvdHlwZS5tYXRjaEFsbC9cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGlzUmVnRXhwID0gcmVxdWlyZSgnLi9faXMtcmVnZXhwJyk7XG52YXIgZ2V0RmxhZ3MgPSByZXF1aXJlKCcuL19mbGFncycpO1xudmFyIFJlZ0V4cFByb3RvID0gUmVnRXhwLnByb3RvdHlwZTtcblxudmFyICRSZWdFeHBTdHJpbmdJdGVyYXRvciA9IGZ1bmN0aW9uIChyZWdleHAsIHN0cmluZykge1xuICB0aGlzLl9yID0gcmVnZXhwO1xuICB0aGlzLl9zID0gc3RyaW5nO1xufTtcblxucmVxdWlyZSgnLi9faXRlci1jcmVhdGUnKSgkUmVnRXhwU3RyaW5nSXRlcmF0b3IsICdSZWdFeHAgU3RyaW5nJywgZnVuY3Rpb24gbmV4dCgpIHtcbiAgdmFyIG1hdGNoID0gdGhpcy5fci5leGVjKHRoaXMuX3MpO1xuICByZXR1cm4geyB2YWx1ZTogbWF0Y2gsIGRvbmU6IG1hdGNoID09PSBudWxsIH07XG59KTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdTdHJpbmcnLCB7XG4gIG1hdGNoQWxsOiBmdW5jdGlvbiBtYXRjaEFsbChyZWdleHApIHtcbiAgICBkZWZpbmVkKHRoaXMpO1xuICAgIGlmICghaXNSZWdFeHAocmVnZXhwKSkgdGhyb3cgVHlwZUVycm9yKHJlZ2V4cCArICcgaXMgbm90IGEgcmVnZXhwIScpO1xuICAgIHZhciBTID0gU3RyaW5nKHRoaXMpO1xuICAgIHZhciBmbGFncyA9ICdmbGFncycgaW4gUmVnRXhwUHJvdG8gPyBTdHJpbmcocmVnZXhwLmZsYWdzKSA6IGdldEZsYWdzLmNhbGwocmVnZXhwKTtcbiAgICB2YXIgcnggPSBuZXcgUmVnRXhwKHJlZ2V4cC5zb3VyY2UsIH5mbGFncy5pbmRleE9mKCdnJykgPyBmbGFncyA6ICdnJyArIGZsYWdzKTtcbiAgICByeC5sYXN0SW5kZXggPSB0b0xlbmd0aChyZWdleHAubGFzdEluZGV4KTtcbiAgICByZXR1cm4gbmV3ICRSZWdFeHBTdHJpbmdJdGVyYXRvcihyeCwgUyk7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///278\n")},function(module,exports,__webpack_require__){eval("__webpack_require__(67)('asyncIterator');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3ltYm9sLmFzeW5jLWl0ZXJhdG9yLmpzP2FjNGQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsbUJBQU8sQ0FBQyxFQUFlIiwiZmlsZSI6IjI3OS5qcyIsInNvdXJjZXNDb250ZW50IjpbInJlcXVpcmUoJy4vX3drcy1kZWZpbmUnKSgnYXN5bmNJdGVyYXRvcicpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///279\n")},function(module,exports,__webpack_require__){eval("__webpack_require__(67)('observable');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3ltYm9sLm9ic2VydmFibGUuanM/YzdjYSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxtQkFBTyxDQUFDLEVBQWUiLCJmaWxlIjoiMjgwLmpzIiwic291cmNlc0NvbnRlbnQiOlsicmVxdWlyZSgnLi9fd2tzLWRlZmluZScpKCdvYnNlcnZhYmxlJyk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///280\n")},function(module,exports,__webpack_require__){eval("// https://github.com/tc39/proposal-object-getownpropertydescriptors\nvar $export = __webpack_require__(0);\nvar ownKeys = __webpack_require__(123);\nvar toIObject = __webpack_require__(15);\nvar gOPD = __webpack_require__(16);\nvar createProperty = __webpack_require__(82);\n\n$export($export.S, 'Object', {\n getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {\n var O = toIObject(object);\n var getDesc = gOPD.f;\n var keys = ownKeys(O);\n var result = {};\n var i = 0;\n var key, desc;\n while (keys.length > i) {\n desc = getDesc(O, key = keys[i++]);\n if (desc !== undefined) createProperty(result, key, desc);\n }\n return result;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JqZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcnMuanM/OGU2ZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGNBQWMsbUJBQU8sQ0FBQyxHQUFhO0FBQ25DLGdCQUFnQixtQkFBTyxDQUFDLEVBQWU7QUFDdkMsV0FBVyxtQkFBTyxDQUFDLEVBQWdCO0FBQ25DLHFCQUFxQixtQkFBTyxDQUFDLEVBQW9COztBQUVqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyODEuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yc1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBvd25LZXlzID0gcmVxdWlyZSgnLi9fb3duLWtleXMnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgZ09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJyk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSByZXF1aXJlKCcuL19jcmVhdGUtcHJvcGVydHknKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdPYmplY3QnLCB7XG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvcnM6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KSB7XG4gICAgdmFyIE8gPSB0b0lPYmplY3Qob2JqZWN0KTtcbiAgICB2YXIgZ2V0RGVzYyA9IGdPUEQuZjtcbiAgICB2YXIga2V5cyA9IG93bktleXMoTyk7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIga2V5LCBkZXNjO1xuICAgIHdoaWxlIChrZXlzLmxlbmd0aCA+IGkpIHtcbiAgICAgIGRlc2MgPSBnZXREZXNjKE8sIGtleSA9IGtleXNbaSsrXSk7XG4gICAgICBpZiAoZGVzYyAhPT0gdW5kZWZpbmVkKSBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIGtleSwgZGVzYyk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///281\n")},function(module,exports,__webpack_require__){eval("// https://github.com/tc39/proposal-object-values-entries\nvar $export = __webpack_require__(0);\nvar $values = __webpack_require__(126)(false);\n\n$export($export.S, 'Object', {\n values: function values(it) {\n return $values(it);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JqZWN0LnZhbHVlcy5qcz84NjE1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsY0FBYyxtQkFBTyxDQUFDLEdBQW9COztBQUUxQztBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjgyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtb2JqZWN0LXZhbHVlcy1lbnRyaWVzXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICR2YWx1ZXMgPSByZXF1aXJlKCcuL19vYmplY3QtdG8tYXJyYXknKShmYWxzZSk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnT2JqZWN0Jywge1xuICB2YWx1ZXM6IGZ1bmN0aW9uIHZhbHVlcyhpdCkge1xuICAgIHJldHVybiAkdmFsdWVzKGl0KTtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///282\n")},function(module,exports,__webpack_require__){eval("// https://github.com/tc39/proposal-object-values-entries\nvar $export = __webpack_require__(0);\nvar $entries = __webpack_require__(126)(true);\n\n$export($export.S, 'Object', {\n entries: function entries(it) {\n return $entries(it);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JqZWN0LmVudHJpZXMuanM/ZmZjMSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyxHQUFvQjs7QUFFM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjI4My5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLW9iamVjdC12YWx1ZXMtZW50cmllc1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkZW50cmllcyA9IHJlcXVpcmUoJy4vX29iamVjdC10by1hcnJheScpKHRydWUpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ09iamVjdCcsIHtcbiAgZW50cmllczogZnVuY3Rpb24gZW50cmllcyhpdCkge1xuICAgIHJldHVybiAkZW50cmllcyhpdCk7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///283\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar toObject = __webpack_require__(9);\nvar aFunction = __webpack_require__(10);\nvar $defineProperty = __webpack_require__(8);\n\n// B.2.2.2 Object.prototype.__defineGetter__(P, getter)\n__webpack_require__(7) && $export($export.P + __webpack_require__(63), 'Object', {\n __defineGetter__: function __defineGetter__(P, getter) {\n $defineProperty.f(toObject(this), P, { get: aFunction(getter), enumerable: true, configurable: true });\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JqZWN0LmRlZmluZS1nZXR0ZXIuanM/NDUwNCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGdCQUFnQixtQkFBTyxDQUFDLEVBQWU7QUFDdkMsc0JBQXNCLG1CQUFPLENBQUMsQ0FBYzs7QUFFNUM7QUFDQSxtQkFBTyxDQUFDLENBQWdCLHlCQUF5QixtQkFBTyxDQUFDLEVBQXNCO0FBQy9FO0FBQ0EsMENBQTBDLCtEQUErRDtBQUN6RztBQUNBLENBQUMiLCJmaWxlIjoiMjg0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciAkZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcblxuLy8gQi4yLjIuMiBPYmplY3QucHJvdG90eXBlLl9fZGVmaW5lR2V0dGVyX18oUCwgZ2V0dGVyKVxucmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSAmJiAkZXhwb3J0KCRleHBvcnQuUCArIHJlcXVpcmUoJy4vX29iamVjdC1mb3JjZWQtcGFtJyksICdPYmplY3QnLCB7XG4gIF9fZGVmaW5lR2V0dGVyX186IGZ1bmN0aW9uIF9fZGVmaW5lR2V0dGVyX18oUCwgZ2V0dGVyKSB7XG4gICAgJGRlZmluZVByb3BlcnR5LmYodG9PYmplY3QodGhpcyksIFAsIHsgZ2V0OiBhRnVuY3Rpb24oZ2V0dGVyKSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0pO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///284\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar toObject = __webpack_require__(9);\nvar aFunction = __webpack_require__(10);\nvar $defineProperty = __webpack_require__(8);\n\n// B.2.2.3 Object.prototype.__defineSetter__(P, setter)\n__webpack_require__(7) && $export($export.P + __webpack_require__(63), 'Object', {\n __defineSetter__: function __defineSetter__(P, setter) {\n $defineProperty.f(toObject(this), P, { set: aFunction(setter), enumerable: true, configurable: true });\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JqZWN0LmRlZmluZS1zZXR0ZXIuanM/ZmVlNyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGdCQUFnQixtQkFBTyxDQUFDLEVBQWU7QUFDdkMsc0JBQXNCLG1CQUFPLENBQUMsQ0FBYzs7QUFFNUM7QUFDQSxtQkFBTyxDQUFDLENBQWdCLHlCQUF5QixtQkFBTyxDQUFDLEVBQXNCO0FBQy9FO0FBQ0EsMENBQTBDLCtEQUErRDtBQUN6RztBQUNBLENBQUMiLCJmaWxlIjoiMjg1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciAkZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcblxuLy8gQi4yLjIuMyBPYmplY3QucHJvdG90eXBlLl9fZGVmaW5lU2V0dGVyX18oUCwgc2V0dGVyKVxucmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSAmJiAkZXhwb3J0KCRleHBvcnQuUCArIHJlcXVpcmUoJy4vX29iamVjdC1mb3JjZWQtcGFtJyksICdPYmplY3QnLCB7XG4gIF9fZGVmaW5lU2V0dGVyX186IGZ1bmN0aW9uIF9fZGVmaW5lU2V0dGVyX18oUCwgc2V0dGVyKSB7XG4gICAgJGRlZmluZVByb3BlcnR5LmYodG9PYmplY3QodGhpcyksIFAsIHsgc2V0OiBhRnVuY3Rpb24oc2V0dGVyKSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0pO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///285\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar toObject = __webpack_require__(9);\nvar toPrimitive = __webpack_require__(23);\nvar getPrototypeOf = __webpack_require__(17);\nvar getOwnPropertyDescriptor = __webpack_require__(16).f;\n\n// B.2.2.4 Object.prototype.__lookupGetter__(P)\n__webpack_require__(7) && $export($export.P + __webpack_require__(63), 'Object', {\n __lookupGetter__: function __lookupGetter__(P) {\n var O = toObject(this);\n var K = toPrimitive(P, true);\n var D;\n do {\n if (D = getOwnPropertyDescriptor(O, K)) return D.get;\n } while (O = getPrototypeOf(O));\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JqZWN0Lmxvb2t1cC1nZXR0ZXIuanM/YjlhMSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGtCQUFrQixtQkFBTyxDQUFDLEVBQWlCO0FBQzNDLHFCQUFxQixtQkFBTyxDQUFDLEVBQWU7QUFDNUMsK0JBQStCLG1CQUFPLENBQUMsRUFBZ0I7O0FBRXZEO0FBQ0EsbUJBQU8sQ0FBQyxDQUFnQix5QkFBeUIsbUJBQU8sQ0FBQyxFQUFzQjtBQUMvRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxDQUFDIiwiZmlsZSI6IjI4Ni5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJykuZjtcblxuLy8gQi4yLjIuNCBPYmplY3QucHJvdG90eXBlLl9fbG9va3VwR2V0dGVyX18oUClcbnJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgJGV4cG9ydCgkZXhwb3J0LlAgKyByZXF1aXJlKCcuL19vYmplY3QtZm9yY2VkLXBhbScpLCAnT2JqZWN0Jywge1xuICBfX2xvb2t1cEdldHRlcl9fOiBmdW5jdGlvbiBfX2xvb2t1cEdldHRlcl9fKFApIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBLID0gdG9QcmltaXRpdmUoUCwgdHJ1ZSk7XG4gICAgdmFyIEQ7XG4gICAgZG8ge1xuICAgICAgaWYgKEQgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgSykpIHJldHVybiBELmdldDtcbiAgICB9IHdoaWxlIChPID0gZ2V0UHJvdG90eXBlT2YoTykpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///286\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar toObject = __webpack_require__(9);\nvar toPrimitive = __webpack_require__(23);\nvar getPrototypeOf = __webpack_require__(17);\nvar getOwnPropertyDescriptor = __webpack_require__(16).f;\n\n// B.2.2.5 Object.prototype.__lookupSetter__(P)\n__webpack_require__(7) && $export($export.P + __webpack_require__(63), 'Object', {\n __lookupSetter__: function __lookupSetter__(P) {\n var O = toObject(this);\n var K = toPrimitive(P, true);\n var D;\n do {\n if (D = getOwnPropertyDescriptor(O, K)) return D.set;\n } while (O = getPrototypeOf(O));\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JqZWN0Lmxvb2t1cC1zZXR0ZXIuanM/NjRkNSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGtCQUFrQixtQkFBTyxDQUFDLEVBQWlCO0FBQzNDLHFCQUFxQixtQkFBTyxDQUFDLEVBQWU7QUFDNUMsK0JBQStCLG1CQUFPLENBQUMsRUFBZ0I7O0FBRXZEO0FBQ0EsbUJBQU8sQ0FBQyxDQUFnQix5QkFBeUIsbUJBQU8sQ0FBQyxFQUFzQjtBQUMvRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxDQUFDIiwiZmlsZSI6IjI4Ny5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJykuZjtcblxuLy8gQi4yLjIuNSBPYmplY3QucHJvdG90eXBlLl9fbG9va3VwU2V0dGVyX18oUClcbnJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgJGV4cG9ydCgkZXhwb3J0LlAgKyByZXF1aXJlKCcuL19vYmplY3QtZm9yY2VkLXBhbScpLCAnT2JqZWN0Jywge1xuICBfX2xvb2t1cFNldHRlcl9fOiBmdW5jdGlvbiBfX2xvb2t1cFNldHRlcl9fKFApIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBLID0gdG9QcmltaXRpdmUoUCwgdHJ1ZSk7XG4gICAgdmFyIEQ7XG4gICAgZG8ge1xuICAgICAgaWYgKEQgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgSykpIHJldHVybiBELnNldDtcbiAgICB9IHdoaWxlIChPID0gZ2V0UHJvdG90eXBlT2YoTykpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///287\n")},function(module,exports,__webpack_require__){eval("// https://github.com/DavidBruant/Map-Set.prototype.toJSON\nvar $export = __webpack_require__(0);\n\n$export($export.P + $export.R, 'Map', { toJSON: __webpack_require__(127)('Map') });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWFwLnRvLWpzb24uanM/NDcwNCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXOztBQUVqQyx1Q0FBdUMsU0FBUyxtQkFBTyxDQUFDLEdBQXVCLFVBQVUiLCJmaWxlIjoiMjg4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXRodWIuY29tL0RhdmlkQnJ1YW50L01hcC1TZXQucHJvdG90eXBlLnRvSlNPTlxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LlIsICdNYXAnLCB7IHRvSlNPTjogcmVxdWlyZSgnLi9fY29sbGVjdGlvbi10by1qc29uJykoJ01hcCcpIH0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///288\n")},function(module,exports,__webpack_require__){eval("// https://github.com/DavidBruant/Map-Set.prototype.toJSON\nvar $export = __webpack_require__(0);\n\n$export($export.P + $export.R, 'Set', { toJSON: __webpack_require__(127)('Set') });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc2V0LnRvLWpzb24uanM/ZGI5YSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXOztBQUVqQyx1Q0FBdUMsU0FBUyxtQkFBTyxDQUFDLEdBQXVCLFVBQVUiLCJmaWxlIjoiMjg5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXRodWIuY29tL0RhdmlkQnJ1YW50L01hcC1TZXQucHJvdG90eXBlLnRvSlNPTlxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LlIsICdTZXQnLCB7IHRvSlNPTjogcmVxdWlyZSgnLi9fY29sbGVjdGlvbi10by1qc29uJykoJ1NldCcpIH0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///289\n")},function(module,exports,__webpack_require__){eval("// https://tc39.github.io/proposal-setmap-offrom/#sec-map.of\n__webpack_require__(64)('Map');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWFwLm9mLmpzPzcyOWIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxtQkFBTyxDQUFDLEVBQXNCIiwiZmlsZSI6IjI5MC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS8jc2VjLW1hcC5vZlxucmVxdWlyZSgnLi9fc2V0LWNvbGxlY3Rpb24tb2YnKSgnTWFwJyk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///290\n")},function(module,exports,__webpack_require__){eval("// https://tc39.github.io/proposal-setmap-offrom/#sec-set.of\n__webpack_require__(64)('Set');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc2V0Lm9mLmpzPzk5YzUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxtQkFBTyxDQUFDLEVBQXNCIiwiZmlsZSI6IjI5MS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS8jc2VjLXNldC5vZlxucmVxdWlyZSgnLi9fc2V0LWNvbGxlY3Rpb24tb2YnKSgnU2V0Jyk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///291\n")},function(module,exports,__webpack_require__){eval("// https://tc39.github.io/proposal-setmap-offrom/#sec-weakmap.of\n__webpack_require__(64)('WeakMap');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcud2Vhay1tYXAub2YuanM/NzY0ZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLG1CQUFPLENBQUMsRUFBc0IiLCJmaWxlIjoiMjkyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tLyNzZWMtd2Vha21hcC5vZlxucmVxdWlyZSgnLi9fc2V0LWNvbGxlY3Rpb24tb2YnKSgnV2Vha01hcCcpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///292\n")},function(module,exports,__webpack_require__){eval("// https://tc39.github.io/proposal-setmap-offrom/#sec-weakset.of\n__webpack_require__(64)('WeakSet');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcud2Vhay1zZXQub2YuanM/YmRkMSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLG1CQUFPLENBQUMsRUFBc0IiLCJmaWxlIjoiMjkzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tLyNzZWMtd2Vha3NldC5vZlxucmVxdWlyZSgnLi9fc2V0LWNvbGxlY3Rpb24tb2YnKSgnV2Vha1NldCcpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///293\n")},function(module,exports,__webpack_require__){eval("// https://tc39.github.io/proposal-setmap-offrom/#sec-map.from\n__webpack_require__(65)('Map');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWFwLmZyb20uanM/NDE2YyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLG1CQUFPLENBQUMsRUFBd0IiLCJmaWxlIjoiMjk0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tLyNzZWMtbWFwLmZyb21cbnJlcXVpcmUoJy4vX3NldC1jb2xsZWN0aW9uLWZyb20nKSgnTWFwJyk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///294\n")},function(module,exports,__webpack_require__){eval("// https://tc39.github.io/proposal-setmap-offrom/#sec-set.from\n__webpack_require__(65)('Set');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc2V0LmZyb20uanM/ZGQ4YSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLG1CQUFPLENBQUMsRUFBd0IiLCJmaWxlIjoiMjk1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tLyNzZWMtc2V0LmZyb21cbnJlcXVpcmUoJy4vX3NldC1jb2xsZWN0aW9uLWZyb20nKSgnU2V0Jyk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///295\n")},function(module,exports,__webpack_require__){eval("// https://tc39.github.io/proposal-setmap-offrom/#sec-weakmap.from\n__webpack_require__(65)('WeakMap');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcud2Vhay1tYXAuZnJvbS5qcz81ZDQwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsbUJBQU8sQ0FBQyxFQUF3QiIsImZpbGUiOiIyOTYuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vI3NlYy13ZWFrbWFwLmZyb21cbnJlcXVpcmUoJy4vX3NldC1jb2xsZWN0aW9uLWZyb20nKSgnV2Vha01hcCcpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///296\n")},function(module,exports,__webpack_require__){eval("// https://tc39.github.io/proposal-setmap-offrom/#sec-weakset.from\n__webpack_require__(65)('WeakSet');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcud2Vhay1zZXQuZnJvbS5qcz81ZDkwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsbUJBQU8sQ0FBQyxFQUF3QiIsImZpbGUiOiIyOTcuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vI3NlYy13ZWFrc2V0LmZyb21cbnJlcXVpcmUoJy4vX3NldC1jb2xsZWN0aW9uLWZyb20nKSgnV2Vha1NldCcpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///297\n")},function(module,exports,__webpack_require__){eval("// https://github.com/tc39/proposal-global\nvar $export = __webpack_require__(0);\n\n$export($export.G, { global: __webpack_require__(2) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuZ2xvYmFsLmpzPzBjMzYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVzs7QUFFakMsb0JBQW9CLFNBQVMsbUJBQU8sQ0FBQyxDQUFXLEdBQUciLCJmaWxlIjoiMjk4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtZ2xvYmFsXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuRywgeyBnbG9iYWw6IHJlcXVpcmUoJy4vX2dsb2JhbCcpIH0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///298\n")},function(module,exports,__webpack_require__){eval("// https://github.com/tc39/proposal-global\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'System', { global: __webpack_require__(2) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3lzdGVtLmdsb2JhbC5qcz9hMjM0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDLDhCQUE4QixTQUFTLG1CQUFPLENBQUMsQ0FBVyxHQUFHIiwiZmlsZSI6IjI5OS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWdsb2JhbFxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdTeXN0ZW0nLCB7IGdsb2JhbDogcmVxdWlyZSgnLi9fZ2xvYmFsJykgfSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///299\n")},function(module,exports,__webpack_require__){eval("// https://github.com/ljharb/proposal-is-error\nvar $export = __webpack_require__(0);\nvar cof = __webpack_require__(20);\n\n$export($export.S, 'Error', {\n isError: function isError(it) {\n return cof(it) === 'Error';\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuZXJyb3IuaXMtZXJyb3IuanM/NDI3NiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLFVBQVUsbUJBQU8sQ0FBQyxFQUFROztBQUUxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMzAwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXRodWIuY29tL2xqaGFyYi9wcm9wb3NhbC1pcy1lcnJvclxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdFcnJvcicsIHtcbiAgaXNFcnJvcjogZnVuY3Rpb24gaXNFcnJvcihpdCkge1xuICAgIHJldHVybiBjb2YoaXQpID09PSAnRXJyb3InO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///300\n")},function(module,exports,__webpack_require__){eval("// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', {\n clamp: function clamp(x, lower, upper) {\n return Math.min(upper, Math.max(lower, x));\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5jbGFtcC5qcz8wOWUwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIzMDEuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBodHRwczovL3J3YWxkcm9uLmdpdGh1Yi5pby9wcm9wb3NhbC1tYXRoLWV4dGVuc2lvbnMvXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGNsYW1wOiBmdW5jdGlvbiBjbGFtcCh4LCBsb3dlciwgdXBwZXIpIHtcbiAgICByZXR1cm4gTWF0aC5taW4odXBwZXIsIE1hdGgubWF4KGxvd2VyLCB4KSk7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///301\n")},function(module,exports,__webpack_require__){eval("// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', { DEG_PER_RAD: Math.PI / 180 });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5kZWctcGVyLXJhZC5qcz8wYzAwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDLDRCQUE0Qiw2QkFBNkIiLCJmaWxlIjoiMzAyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9yd2FsZHJvbi5naXRodWIuaW8vcHJvcG9zYWwtbWF0aC1leHRlbnNpb25zL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywgeyBERUdfUEVSX1JBRDogTWF0aC5QSSAvIDE4MCB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///302\n")},function(module,exports,__webpack_require__){eval("// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = __webpack_require__(0);\nvar RAD_PER_DEG = 180 / Math.PI;\n\n$export($export.S, 'Math', {\n degrees: function degrees(radians) {\n return radians * RAD_PER_DEG;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5kZWdyZWVzLmpzPzI3NDgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMzAzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9yd2FsZHJvbi5naXRodWIuaW8vcHJvcG9zYWwtbWF0aC1leHRlbnNpb25zL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBSQURfUEVSX0RFRyA9IDE4MCAvIE1hdGguUEk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgZGVncmVlczogZnVuY3Rpb24gZGVncmVlcyhyYWRpYW5zKSB7XG4gICAgcmV0dXJuIHJhZGlhbnMgKiBSQURfUEVSX0RFRztcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///303\n")},function(module,exports,__webpack_require__){eval("// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = __webpack_require__(0);\nvar scale = __webpack_require__(129);\nvar fround = __webpack_require__(108);\n\n$export($export.S, 'Math', {\n fscale: function fscale(x, inLow, inHigh, outLow, outHigh) {\n return fround(scale(x, inLow, inHigh, outLow, outHigh));\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5mc2NhbGUuanM/MWY5MSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLFlBQVksbUJBQU8sQ0FBQyxHQUFlO0FBQ25DLGFBQWEsbUJBQU8sQ0FBQyxHQUFnQjs7QUFFckM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjMwNC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vcndhbGRyb24uZ2l0aHViLmlvL3Byb3Bvc2FsLW1hdGgtZXh0ZW5zaW9ucy9cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgc2NhbGUgPSByZXF1aXJlKCcuL19tYXRoLXNjYWxlJyk7XG52YXIgZnJvdW5kID0gcmVxdWlyZSgnLi9fbWF0aC1mcm91bmQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBmc2NhbGU6IGZ1bmN0aW9uIGZzY2FsZSh4LCBpbkxvdywgaW5IaWdoLCBvdXRMb3csIG91dEhpZ2gpIHtcbiAgICByZXR1cm4gZnJvdW5kKHNjYWxlKHgsIGluTG93LCBpbkhpZ2gsIG91dExvdywgb3V0SGlnaCkpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///304\n")},function(module,exports,__webpack_require__){eval("// https://gist.github.com/BrendanEich/4294d5c212a6d2254703\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', {\n iaddh: function iaddh(x0, x1, y0, y1) {\n var $x0 = x0 >>> 0;\n var $x1 = x1 >>> 0;\n var $y0 = y0 >>> 0;\n return $x1 + (y1 >>> 0) + (($x0 & $y0 | ($x0 | $y0) & ~($x0 + $y0 >>> 0)) >>> 31) | 0;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5pYWRkaC5qcz85YzAwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIzMDUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9CcmVuZGFuRWljaC80Mjk0ZDVjMjEyYTZkMjI1NDcwM1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBpYWRkaDogZnVuY3Rpb24gaWFkZGgoeDAsIHgxLCB5MCwgeTEpIHtcbiAgICB2YXIgJHgwID0geDAgPj4+IDA7XG4gICAgdmFyICR4MSA9IHgxID4+PiAwO1xuICAgIHZhciAkeTAgPSB5MCA+Pj4gMDtcbiAgICByZXR1cm4gJHgxICsgKHkxID4+PiAwKSArICgoJHgwICYgJHkwIHwgKCR4MCB8ICR5MCkgJiB+KCR4MCArICR5MCA+Pj4gMCkpID4+PiAzMSkgfCAwO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///305\n")},function(module,exports,__webpack_require__){eval("// https://gist.github.com/BrendanEich/4294d5c212a6d2254703\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', {\n isubh: function isubh(x0, x1, y0, y1) {\n var $x0 = x0 >>> 0;\n var $x1 = x1 >>> 0;\n var $y0 = y0 >>> 0;\n return $x1 - (y1 >>> 0) - ((~$x0 & $y0 | ~($x0 ^ $y0) & $x0 - $y0 >>> 0) >>> 31) | 0;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5pc3ViaC5qcz8yZjc4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIzMDYuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9CcmVuZGFuRWljaC80Mjk0ZDVjMjEyYTZkMjI1NDcwM1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBpc3ViaDogZnVuY3Rpb24gaXN1YmgoeDAsIHgxLCB5MCwgeTEpIHtcbiAgICB2YXIgJHgwID0geDAgPj4+IDA7XG4gICAgdmFyICR4MSA9IHgxID4+PiAwO1xuICAgIHZhciAkeTAgPSB5MCA+Pj4gMDtcbiAgICByZXR1cm4gJHgxIC0gKHkxID4+PiAwKSAtICgofiR4MCAmICR5MCB8IH4oJHgwIF4gJHkwKSAmICR4MCAtICR5MCA+Pj4gMCkgPj4+IDMxKSB8IDA7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///306\n")},function(module,exports,__webpack_require__){eval("// https://gist.github.com/BrendanEich/4294d5c212a6d2254703\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', {\n imulh: function imulh(u, v) {\n var UINT16 = 0xffff;\n var $u = +u;\n var $v = +v;\n var u0 = $u & UINT16;\n var v0 = $v & UINT16;\n var u1 = $u >> 16;\n var v1 = $v >> 16;\n var t = (u1 * v0 >>> 0) + (u0 * v0 >>> 16);\n return u1 * v1 + (t >> 16) + ((u0 * v1 >>> 0) + (t & UINT16) >> 16);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5pbXVsaC5qcz9iNGMyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMzA3LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vQnJlbmRhbkVpY2gvNDI5NGQ1YzIxMmE2ZDIyNTQ3MDNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgaW11bGg6IGZ1bmN0aW9uIGltdWxoKHUsIHYpIHtcbiAgICB2YXIgVUlOVDE2ID0gMHhmZmZmO1xuICAgIHZhciAkdSA9ICt1O1xuICAgIHZhciAkdiA9ICt2O1xuICAgIHZhciB1MCA9ICR1ICYgVUlOVDE2O1xuICAgIHZhciB2MCA9ICR2ICYgVUlOVDE2O1xuICAgIHZhciB1MSA9ICR1ID4+IDE2O1xuICAgIHZhciB2MSA9ICR2ID4+IDE2O1xuICAgIHZhciB0ID0gKHUxICogdjAgPj4+IDApICsgKHUwICogdjAgPj4+IDE2KTtcbiAgICByZXR1cm4gdTEgKiB2MSArICh0ID4+IDE2KSArICgodTAgKiB2MSA+Pj4gMCkgKyAodCAmIFVJTlQxNikgPj4gMTYpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///307\n")},function(module,exports,__webpack_require__){eval("// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', { RAD_PER_DEG: 180 / Math.PI });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5yYWQtcGVyLWRlZy5qcz8xZjE4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDLDRCQUE0Qiw2QkFBNkIiLCJmaWxlIjoiMzA4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9yd2FsZHJvbi5naXRodWIuaW8vcHJvcG9zYWwtbWF0aC1leHRlbnNpb25zL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywgeyBSQURfUEVSX0RFRzogMTgwIC8gTWF0aC5QSSB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///308\n")},function(module,exports,__webpack_require__){eval("// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = __webpack_require__(0);\nvar DEG_PER_RAD = Math.PI / 180;\n\n$export($export.S, 'Math', {\n radians: function radians(degrees) {\n return degrees * DEG_PER_RAD;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5yYWRpYW5zLmpzPzY5MmIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMzA5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9yd2FsZHJvbi5naXRodWIuaW8vcHJvcG9zYWwtbWF0aC1leHRlbnNpb25zL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBERUdfUEVSX1JBRCA9IE1hdGguUEkgLyAxODA7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgcmFkaWFuczogZnVuY3Rpb24gcmFkaWFucyhkZWdyZWVzKSB7XG4gICAgcmV0dXJuIGRlZ3JlZXMgKiBERUdfUEVSX1JBRDtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///309\n")},function(module,exports,__webpack_require__){eval("// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', { scale: __webpack_require__(129) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5zY2FsZS5qcz9jNzc1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDLDRCQUE0QixRQUFRLG1CQUFPLENBQUMsR0FBZSxHQUFHIiwiZmlsZSI6IjMxMC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vcndhbGRyb24uZ2l0aHViLmlvL3Byb3Bvc2FsLW1hdGgtZXh0ZW5zaW9ucy9cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHsgc2NhbGU6IHJlcXVpcmUoJy4vX21hdGgtc2NhbGUnKSB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///310\n")},function(module,exports,__webpack_require__){eval("// https://gist.github.com/BrendanEich/4294d5c212a6d2254703\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', {\n umulh: function umulh(u, v) {\n var UINT16 = 0xffff;\n var $u = +u;\n var $v = +v;\n var u0 = $u & UINT16;\n var v0 = $v & UINT16;\n var u1 = $u >>> 16;\n var v1 = $v >>> 16;\n var t = (u1 * v0 >>> 0) + (u0 * v0 >>> 16);\n return u1 * v1 + (t >>> 16) + ((u0 * v1 >>> 0) + (t & UINT16) >>> 16);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC51bXVsaC5qcz84YTVjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMzExLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vQnJlbmRhbkVpY2gvNDI5NGQ1YzIxMmE2ZDIyNTQ3MDNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgdW11bGg6IGZ1bmN0aW9uIHVtdWxoKHUsIHYpIHtcbiAgICB2YXIgVUlOVDE2ID0gMHhmZmZmO1xuICAgIHZhciAkdSA9ICt1O1xuICAgIHZhciAkdiA9ICt2O1xuICAgIHZhciB1MCA9ICR1ICYgVUlOVDE2O1xuICAgIHZhciB2MCA9ICR2ICYgVUlOVDE2O1xuICAgIHZhciB1MSA9ICR1ID4+PiAxNjtcbiAgICB2YXIgdjEgPSAkdiA+Pj4gMTY7XG4gICAgdmFyIHQgPSAodTEgKiB2MCA+Pj4gMCkgKyAodTAgKiB2MCA+Pj4gMTYpO1xuICAgIHJldHVybiB1MSAqIHYxICsgKHQgPj4+IDE2KSArICgodTAgKiB2MSA+Pj4gMCkgKyAodCAmIFVJTlQxNikgPj4+IDE2KTtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///311\n")},function(module,exports,__webpack_require__){eval("// http://jfbastien.github.io/papers/Math.signbit.html\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', { signbit: function signbit(x) {\n // eslint-disable-next-line no-self-compare\n return (x = +x) != x ? x : x == 0 ? 1 / x == Infinity : x > 0;\n} });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5zaWduYml0LmpzP2VkN2UiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVzs7QUFFakMsNEJBQTRCO0FBQzVCO0FBQ0E7QUFDQSxDQUFDLEVBQUUiLCJmaWxlIjoiMzEyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cDovL2pmYmFzdGllbi5naXRodWIuaW8vcGFwZXJzL01hdGguc2lnbmJpdC5odG1sXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7IHNpZ25iaXQ6IGZ1bmN0aW9uIHNpZ25iaXQoeCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gIHJldHVybiAoeCA9ICt4KSAhPSB4ID8geCA6IHggPT0gMCA/IDEgLyB4ID09IEluZmluaXR5IDogeCA+IDA7XG59IH0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///312\n")},function(module,exports,__webpack_require__){"use strict";eval("// https://github.com/tc39/proposal-promise-finally\n\nvar $export = __webpack_require__(0);\nvar core = __webpack_require__(18);\nvar global = __webpack_require__(2);\nvar speciesConstructor = __webpack_require__(51);\nvar promiseResolve = __webpack_require__(116);\n\n$export($export.P + $export.R, 'Promise', { 'finally': function (onFinally) {\n var C = speciesConstructor(this, core.Promise || global.Promise);\n var isFunction = typeof onFinally == 'function';\n return this.then(\n isFunction ? function (x) {\n return promiseResolve(C, onFinally()).then(function () { return x; });\n } : onFinally,\n isFunction ? function (e) {\n return promiseResolve(C, onFinally()).then(function () { throw e; });\n } : onFinally\n );\n} });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucHJvbWlzZS5maW5hbGx5LmpzPzA5N2QiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDYTtBQUNiLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLFdBQVcsbUJBQU8sQ0FBQyxFQUFTO0FBQzVCLGFBQWEsbUJBQU8sQ0FBQyxDQUFXO0FBQ2hDLHlCQUF5QixtQkFBTyxDQUFDLEVBQXdCO0FBQ3pELHFCQUFxQixtQkFBTyxDQUFDLEdBQW9COztBQUVqRCwyQ0FBMkM7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4REFBOEQsVUFBVSxFQUFFO0FBQzFFLEtBQUs7QUFDTDtBQUNBLDhEQUE4RCxTQUFTLEVBQUU7QUFDekUsS0FBSztBQUNMO0FBQ0EsQ0FBQyxFQUFFIiwiZmlsZSI6IjMxMy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXByb21pc2UtZmluYWxseVxuJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4vX3NwZWNpZXMtY29uc3RydWN0b3InKTtcbnZhciBwcm9taXNlUmVzb2x2ZSA9IHJlcXVpcmUoJy4vX3Byb21pc2UtcmVzb2x2ZScpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuUiwgJ1Byb21pc2UnLCB7ICdmaW5hbGx5JzogZnVuY3Rpb24gKG9uRmluYWxseSkge1xuICB2YXIgQyA9IHNwZWNpZXNDb25zdHJ1Y3Rvcih0aGlzLCBjb3JlLlByb21pc2UgfHwgZ2xvYmFsLlByb21pc2UpO1xuICB2YXIgaXNGdW5jdGlvbiA9IHR5cGVvZiBvbkZpbmFsbHkgPT0gJ2Z1bmN0aW9uJztcbiAgcmV0dXJuIHRoaXMudGhlbihcbiAgICBpc0Z1bmN0aW9uID8gZnVuY3Rpb24gKHgpIHtcbiAgICAgIHJldHVybiBwcm9taXNlUmVzb2x2ZShDLCBvbkZpbmFsbHkoKSkudGhlbihmdW5jdGlvbiAoKSB7IHJldHVybiB4OyB9KTtcbiAgICB9IDogb25GaW5hbGx5LFxuICAgIGlzRnVuY3Rpb24gPyBmdW5jdGlvbiAoZSkge1xuICAgICAgcmV0dXJuIHByb21pc2VSZXNvbHZlKEMsIG9uRmluYWxseSgpKS50aGVuKGZ1bmN0aW9uICgpIHsgdGhyb3cgZTsgfSk7XG4gICAgfSA6IG9uRmluYWxseVxuICApO1xufSB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///313\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// https://github.com/tc39/proposal-promise-try\nvar $export = __webpack_require__(0);\nvar newPromiseCapability = __webpack_require__(91);\nvar perform = __webpack_require__(115);\n\n$export($export.S, 'Promise', { 'try': function (callbackfn) {\n var promiseCapability = newPromiseCapability.f(this);\n var result = perform(callbackfn);\n (result.e ? promiseCapability.reject : promiseCapability.resolve)(result.v);\n return promiseCapability.promise;\n} });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucHJvbWlzZS50cnkuanM/YTljYyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsMkJBQTJCLG1CQUFPLENBQUMsRUFBMkI7QUFDOUQsY0FBYyxtQkFBTyxDQUFDLEdBQVk7O0FBRWxDLCtCQUErQjtBQUMvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsRUFBRSIsImZpbGUiOiIzMTQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1wcm9taXNlLXRyeVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IHJlcXVpcmUoJy4vX25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcbnZhciBwZXJmb3JtID0gcmVxdWlyZSgnLi9fcGVyZm9ybScpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1Byb21pc2UnLCB7ICd0cnknOiBmdW5jdGlvbiAoY2FsbGJhY2tmbikge1xuICB2YXIgcHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eS5mKHRoaXMpO1xuICB2YXIgcmVzdWx0ID0gcGVyZm9ybShjYWxsYmFja2ZuKTtcbiAgKHJlc3VsdC5lID8gcHJvbWlzZUNhcGFiaWxpdHkucmVqZWN0IDogcHJvbWlzZUNhcGFiaWxpdHkucmVzb2x2ZSkocmVzdWx0LnYpO1xuICByZXR1cm4gcHJvbWlzZUNhcGFiaWxpdHkucHJvbWlzZTtcbn0gfSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///314\n")},function(module,exports,__webpack_require__){eval("var metadata = __webpack_require__(28);\nvar anObject = __webpack_require__(1);\nvar toMetaKey = metadata.key;\nvar ordinaryDefineOwnMetadata = metadata.set;\n\nmetadata.exp({ defineMetadata: function defineMetadata(metadataKey, metadataValue, target, targetKey) {\n ordinaryDefineOwnMetadata(metadataKey, metadataValue, anObject(target), toMetaKey(targetKey));\n} });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5kZWZpbmUtbWV0YWRhdGEuanM/ZTNkMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxlQUFlLG1CQUFPLENBQUMsRUFBYTtBQUNwQyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQztBQUNBOztBQUVBLGNBQWM7QUFDZDtBQUNBLENBQUMsRUFBRSIsImZpbGUiOiIzMTUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgbWV0YWRhdGEgPSByZXF1aXJlKCcuL19tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgdG9NZXRhS2V5ID0gbWV0YWRhdGEua2V5O1xudmFyIG9yZGluYXJ5RGVmaW5lT3duTWV0YWRhdGEgPSBtZXRhZGF0YS5zZXQ7XG5cbm1ldGFkYXRhLmV4cCh7IGRlZmluZU1ldGFkYXRhOiBmdW5jdGlvbiBkZWZpbmVNZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSwgdGFyZ2V0LCB0YXJnZXRLZXkpIHtcbiAgb3JkaW5hcnlEZWZpbmVPd25NZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSwgYW5PYmplY3QodGFyZ2V0KSwgdG9NZXRhS2V5KHRhcmdldEtleSkpO1xufSB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///315\n")},function(module,exports,__webpack_require__){eval("var metadata = __webpack_require__(28);\nvar anObject = __webpack_require__(1);\nvar toMetaKey = metadata.key;\nvar getOrCreateMetadataMap = metadata.map;\nvar store = metadata.store;\n\nmetadata.exp({ deleteMetadata: function deleteMetadata(metadataKey, target /* , targetKey */) {\n var targetKey = arguments.length < 3 ? undefined : toMetaKey(arguments[2]);\n var metadataMap = getOrCreateMetadataMap(anObject(target), targetKey, false);\n if (metadataMap === undefined || !metadataMap['delete'](metadataKey)) return false;\n if (metadataMap.size) return true;\n var targetMetadata = store.get(target);\n targetMetadata['delete'](targetKey);\n return !!targetMetadata.size || store['delete'](target);\n} });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5kZWxldGUtbWV0YWRhdGEuanM/Y2VhZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxlQUFlLG1CQUFPLENBQUMsRUFBYTtBQUNwQyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQztBQUNBO0FBQ0E7O0FBRUEsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxFQUFFIiwiZmlsZSI6IjMxNi5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBtZXRhZGF0YSA9IHJlcXVpcmUoJy4vX21ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciB0b01ldGFLZXkgPSBtZXRhZGF0YS5rZXk7XG52YXIgZ2V0T3JDcmVhdGVNZXRhZGF0YU1hcCA9IG1ldGFkYXRhLm1hcDtcbnZhciBzdG9yZSA9IG1ldGFkYXRhLnN0b3JlO1xuXG5tZXRhZGF0YS5leHAoeyBkZWxldGVNZXRhZGF0YTogZnVuY3Rpb24gZGVsZXRlTWV0YWRhdGEobWV0YWRhdGFLZXksIHRhcmdldCAvKiAsIHRhcmdldEtleSAqLykge1xuICB2YXIgdGFyZ2V0S2V5ID0gYXJndW1lbnRzLmxlbmd0aCA8IDMgPyB1bmRlZmluZWQgOiB0b01ldGFLZXkoYXJndW1lbnRzWzJdKTtcbiAgdmFyIG1ldGFkYXRhTWFwID0gZ2V0T3JDcmVhdGVNZXRhZGF0YU1hcChhbk9iamVjdCh0YXJnZXQpLCB0YXJnZXRLZXksIGZhbHNlKTtcbiAgaWYgKG1ldGFkYXRhTWFwID09PSB1bmRlZmluZWQgfHwgIW1ldGFkYXRhTWFwWydkZWxldGUnXShtZXRhZGF0YUtleSkpIHJldHVybiBmYWxzZTtcbiAgaWYgKG1ldGFkYXRhTWFwLnNpemUpIHJldHVybiB0cnVlO1xuICB2YXIgdGFyZ2V0TWV0YWRhdGEgPSBzdG9yZS5nZXQodGFyZ2V0KTtcbiAgdGFyZ2V0TWV0YWRhdGFbJ2RlbGV0ZSddKHRhcmdldEtleSk7XG4gIHJldHVybiAhIXRhcmdldE1ldGFkYXRhLnNpemUgfHwgc3RvcmVbJ2RlbGV0ZSddKHRhcmdldCk7XG59IH0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///316\n")},function(module,exports,__webpack_require__){eval("var metadata = __webpack_require__(28);\nvar anObject = __webpack_require__(1);\nvar getPrototypeOf = __webpack_require__(17);\nvar ordinaryHasOwnMetadata = metadata.has;\nvar ordinaryGetOwnMetadata = metadata.get;\nvar toMetaKey = metadata.key;\n\nvar ordinaryGetMetadata = function (MetadataKey, O, P) {\n var hasOwn = ordinaryHasOwnMetadata(MetadataKey, O, P);\n if (hasOwn) return ordinaryGetOwnMetadata(MetadataKey, O, P);\n var parent = getPrototypeOf(O);\n return parent !== null ? ordinaryGetMetadata(MetadataKey, parent, P) : undefined;\n};\n\nmetadata.exp({ getMetadata: function getMetadata(metadataKey, target /* , targetKey */) {\n return ordinaryGetMetadata(metadataKey, anObject(target), arguments.length < 3 ? undefined : toMetaKey(arguments[2]));\n} });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtbWV0YWRhdGEuanM/ZTM5NCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxlQUFlLG1CQUFPLENBQUMsRUFBYTtBQUNwQyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxxQkFBcUIsbUJBQU8sQ0FBQyxFQUFlO0FBQzVDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsY0FBYztBQUNkO0FBQ0EsQ0FBQyxFQUFFIiwiZmlsZSI6IjMxNy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBtZXRhZGF0YSA9IHJlcXVpcmUoJy4vX21ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBvcmRpbmFyeUhhc093bk1ldGFkYXRhID0gbWV0YWRhdGEuaGFzO1xudmFyIG9yZGluYXJ5R2V0T3duTWV0YWRhdGEgPSBtZXRhZGF0YS5nZXQ7XG52YXIgdG9NZXRhS2V5ID0gbWV0YWRhdGEua2V5O1xuXG52YXIgb3JkaW5hcnlHZXRNZXRhZGF0YSA9IGZ1bmN0aW9uIChNZXRhZGF0YUtleSwgTywgUCkge1xuICB2YXIgaGFzT3duID0gb3JkaW5hcnlIYXNPd25NZXRhZGF0YShNZXRhZGF0YUtleSwgTywgUCk7XG4gIGlmIChoYXNPd24pIHJldHVybiBvcmRpbmFyeUdldE93bk1ldGFkYXRhKE1ldGFkYXRhS2V5LCBPLCBQKTtcbiAgdmFyIHBhcmVudCA9IGdldFByb3RvdHlwZU9mKE8pO1xuICByZXR1cm4gcGFyZW50ICE9PSBudWxsID8gb3JkaW5hcnlHZXRNZXRhZGF0YShNZXRhZGF0YUtleSwgcGFyZW50LCBQKSA6IHVuZGVmaW5lZDtcbn07XG5cbm1ldGFkYXRhLmV4cCh7IGdldE1ldGFkYXRhOiBmdW5jdGlvbiBnZXRNZXRhZGF0YShtZXRhZGF0YUtleSwgdGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gIHJldHVybiBvcmRpbmFyeUdldE1ldGFkYXRhKG1ldGFkYXRhS2V5LCBhbk9iamVjdCh0YXJnZXQpLCBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHVuZGVmaW5lZCA6IHRvTWV0YUtleShhcmd1bWVudHNbMl0pKTtcbn0gfSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///317\n")},function(module,exports,__webpack_require__){eval("var Set = __webpack_require__(119);\nvar from = __webpack_require__(128);\nvar metadata = __webpack_require__(28);\nvar anObject = __webpack_require__(1);\nvar getPrototypeOf = __webpack_require__(17);\nvar ordinaryOwnMetadataKeys = metadata.keys;\nvar toMetaKey = metadata.key;\n\nvar ordinaryMetadataKeys = function (O, P) {\n var oKeys = ordinaryOwnMetadataKeys(O, P);\n var parent = getPrototypeOf(O);\n if (parent === null) return oKeys;\n var pKeys = ordinaryMetadataKeys(parent, P);\n return pKeys.length ? oKeys.length ? from(new Set(oKeys.concat(pKeys))) : pKeys : oKeys;\n};\n\nmetadata.exp({ getMetadataKeys: function getMetadataKeys(target /* , targetKey */) {\n return ordinaryMetadataKeys(anObject(target), arguments.length < 2 ? undefined : toMetaKey(arguments[1]));\n} });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtbWV0YWRhdGEta2V5cy5qcz9iODBiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFVBQVUsbUJBQU8sQ0FBQyxHQUFXO0FBQzdCLFdBQVcsbUJBQU8sQ0FBQyxHQUF3QjtBQUMzQyxlQUFlLG1CQUFPLENBQUMsRUFBYTtBQUNwQyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxxQkFBcUIsbUJBQU8sQ0FBQyxFQUFlO0FBQzVDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsY0FBYztBQUNkO0FBQ0EsQ0FBQyxFQUFFIiwiZmlsZSI6IjMxOC5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBTZXQgPSByZXF1aXJlKCcuL2VzNi5zZXQnKTtcbnZhciBmcm9tID0gcmVxdWlyZSgnLi9fYXJyYXktZnJvbS1pdGVyYWJsZScpO1xudmFyIG1ldGFkYXRhID0gcmVxdWlyZSgnLi9fbWV0YWRhdGEnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIG9yZGluYXJ5T3duTWV0YWRhdGFLZXlzID0gbWV0YWRhdGEua2V5cztcbnZhciB0b01ldGFLZXkgPSBtZXRhZGF0YS5rZXk7XG5cbnZhciBvcmRpbmFyeU1ldGFkYXRhS2V5cyA9IGZ1bmN0aW9uIChPLCBQKSB7XG4gIHZhciBvS2V5cyA9IG9yZGluYXJ5T3duTWV0YWRhdGFLZXlzKE8sIFApO1xuICB2YXIgcGFyZW50ID0gZ2V0UHJvdG90eXBlT2YoTyk7XG4gIGlmIChwYXJlbnQgPT09IG51bGwpIHJldHVybiBvS2V5cztcbiAgdmFyIHBLZXlzID0gb3JkaW5hcnlNZXRhZGF0YUtleXMocGFyZW50LCBQKTtcbiAgcmV0dXJuIHBLZXlzLmxlbmd0aCA/IG9LZXlzLmxlbmd0aCA/IGZyb20obmV3IFNldChvS2V5cy5jb25jYXQocEtleXMpKSkgOiBwS2V5cyA6IG9LZXlzO1xufTtcblxubWV0YWRhdGEuZXhwKHsgZ2V0TWV0YWRhdGFLZXlzOiBmdW5jdGlvbiBnZXRNZXRhZGF0YUtleXModGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gIHJldHVybiBvcmRpbmFyeU1ldGFkYXRhS2V5cyhhbk9iamVjdCh0YXJnZXQpLCBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IHVuZGVmaW5lZCA6IHRvTWV0YUtleShhcmd1bWVudHNbMV0pKTtcbn0gfSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///318\n")},function(module,exports,__webpack_require__){eval("var metadata = __webpack_require__(28);\nvar anObject = __webpack_require__(1);\nvar ordinaryGetOwnMetadata = metadata.get;\nvar toMetaKey = metadata.key;\n\nmetadata.exp({ getOwnMetadata: function getOwnMetadata(metadataKey, target /* , targetKey */) {\n return ordinaryGetOwnMetadata(metadataKey, anObject(target)\n , arguments.length < 3 ? undefined : toMetaKey(arguments[2]));\n} });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtb3duLW1ldGFkYXRhLmpzPzA2YTciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxtQkFBTyxDQUFDLEVBQWE7QUFDcEMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckM7QUFDQTs7QUFFQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBLENBQUMsRUFBRSIsImZpbGUiOiIzMTkuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgbWV0YWRhdGEgPSByZXF1aXJlKCcuL19tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgb3JkaW5hcnlHZXRPd25NZXRhZGF0YSA9IG1ldGFkYXRhLmdldDtcbnZhciB0b01ldGFLZXkgPSBtZXRhZGF0YS5rZXk7XG5cbm1ldGFkYXRhLmV4cCh7IGdldE93bk1ldGFkYXRhOiBmdW5jdGlvbiBnZXRPd25NZXRhZGF0YShtZXRhZGF0YUtleSwgdGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gIHJldHVybiBvcmRpbmFyeUdldE93bk1ldGFkYXRhKG1ldGFkYXRhS2V5LCBhbk9iamVjdCh0YXJnZXQpXG4gICAgLCBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHVuZGVmaW5lZCA6IHRvTWV0YUtleShhcmd1bWVudHNbMl0pKTtcbn0gfSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///319\n")},function(module,exports,__webpack_require__){eval("var metadata = __webpack_require__(28);\nvar anObject = __webpack_require__(1);\nvar ordinaryOwnMetadataKeys = metadata.keys;\nvar toMetaKey = metadata.key;\n\nmetadata.exp({ getOwnMetadataKeys: function getOwnMetadataKeys(target /* , targetKey */) {\n return ordinaryOwnMetadataKeys(anObject(target), arguments.length < 2 ? undefined : toMetaKey(arguments[1]));\n} });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtb3duLW1ldGFkYXRhLWtleXMuanM/N2NkZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxlQUFlLG1CQUFPLENBQUMsRUFBYTtBQUNwQyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQztBQUNBOztBQUVBLGNBQWM7QUFDZDtBQUNBLENBQUMsRUFBRSIsImZpbGUiOiIzMjAuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgbWV0YWRhdGEgPSByZXF1aXJlKCcuL19tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgb3JkaW5hcnlPd25NZXRhZGF0YUtleXMgPSBtZXRhZGF0YS5rZXlzO1xudmFyIHRvTWV0YUtleSA9IG1ldGFkYXRhLmtleTtcblxubWV0YWRhdGEuZXhwKHsgZ2V0T3duTWV0YWRhdGFLZXlzOiBmdW5jdGlvbiBnZXRPd25NZXRhZGF0YUtleXModGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gIHJldHVybiBvcmRpbmFyeU93bk1ldGFkYXRhS2V5cyhhbk9iamVjdCh0YXJnZXQpLCBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IHVuZGVmaW5lZCA6IHRvTWV0YUtleShhcmd1bWVudHNbMV0pKTtcbn0gfSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///320\n")},function(module,exports,__webpack_require__){eval("var metadata = __webpack_require__(28);\nvar anObject = __webpack_require__(1);\nvar getPrototypeOf = __webpack_require__(17);\nvar ordinaryHasOwnMetadata = metadata.has;\nvar toMetaKey = metadata.key;\n\nvar ordinaryHasMetadata = function (MetadataKey, O, P) {\n var hasOwn = ordinaryHasOwnMetadata(MetadataKey, O, P);\n if (hasOwn) return true;\n var parent = getPrototypeOf(O);\n return parent !== null ? ordinaryHasMetadata(MetadataKey, parent, P) : false;\n};\n\nmetadata.exp({ hasMetadata: function hasMetadata(metadataKey, target /* , targetKey */) {\n return ordinaryHasMetadata(metadataKey, anObject(target), arguments.length < 3 ? undefined : toMetaKey(arguments[2]));\n} });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5oYXMtbWV0YWRhdGEuanM/ODk2ZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxlQUFlLG1CQUFPLENBQUMsRUFBYTtBQUNwQyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxxQkFBcUIsbUJBQU8sQ0FBQyxFQUFlO0FBQzVDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGNBQWM7QUFDZDtBQUNBLENBQUMsRUFBRSIsImZpbGUiOiIzMjEuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgbWV0YWRhdGEgPSByZXF1aXJlKCcuL19tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgb3JkaW5hcnlIYXNPd25NZXRhZGF0YSA9IG1ldGFkYXRhLmhhcztcbnZhciB0b01ldGFLZXkgPSBtZXRhZGF0YS5rZXk7XG5cbnZhciBvcmRpbmFyeUhhc01ldGFkYXRhID0gZnVuY3Rpb24gKE1ldGFkYXRhS2V5LCBPLCBQKSB7XG4gIHZhciBoYXNPd24gPSBvcmRpbmFyeUhhc093bk1ldGFkYXRhKE1ldGFkYXRhS2V5LCBPLCBQKTtcbiAgaWYgKGhhc093bikgcmV0dXJuIHRydWU7XG4gIHZhciBwYXJlbnQgPSBnZXRQcm90b3R5cGVPZihPKTtcbiAgcmV0dXJuIHBhcmVudCAhPT0gbnVsbCA/IG9yZGluYXJ5SGFzTWV0YWRhdGEoTWV0YWRhdGFLZXksIHBhcmVudCwgUCkgOiBmYWxzZTtcbn07XG5cbm1ldGFkYXRhLmV4cCh7IGhhc01ldGFkYXRhOiBmdW5jdGlvbiBoYXNNZXRhZGF0YShtZXRhZGF0YUtleSwgdGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gIHJldHVybiBvcmRpbmFyeUhhc01ldGFkYXRhKG1ldGFkYXRhS2V5LCBhbk9iamVjdCh0YXJnZXQpLCBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHVuZGVmaW5lZCA6IHRvTWV0YUtleShhcmd1bWVudHNbMl0pKTtcbn0gfSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///321\n")},function(module,exports,__webpack_require__){eval("var metadata = __webpack_require__(28);\nvar anObject = __webpack_require__(1);\nvar ordinaryHasOwnMetadata = metadata.has;\nvar toMetaKey = metadata.key;\n\nmetadata.exp({ hasOwnMetadata: function hasOwnMetadata(metadataKey, target /* , targetKey */) {\n return ordinaryHasOwnMetadata(metadataKey, anObject(target)\n , arguments.length < 3 ? undefined : toMetaKey(arguments[2]));\n} });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5oYXMtb3duLW1ldGFkYXRhLmpzP2VjMzkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxtQkFBTyxDQUFDLEVBQWE7QUFDcEMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckM7QUFDQTs7QUFFQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBLENBQUMsRUFBRSIsImZpbGUiOiIzMjIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgbWV0YWRhdGEgPSByZXF1aXJlKCcuL19tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgb3JkaW5hcnlIYXNPd25NZXRhZGF0YSA9IG1ldGFkYXRhLmhhcztcbnZhciB0b01ldGFLZXkgPSBtZXRhZGF0YS5rZXk7XG5cbm1ldGFkYXRhLmV4cCh7IGhhc093bk1ldGFkYXRhOiBmdW5jdGlvbiBoYXNPd25NZXRhZGF0YShtZXRhZGF0YUtleSwgdGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gIHJldHVybiBvcmRpbmFyeUhhc093bk1ldGFkYXRhKG1ldGFkYXRhS2V5LCBhbk9iamVjdCh0YXJnZXQpXG4gICAgLCBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHVuZGVmaW5lZCA6IHRvTWV0YUtleShhcmd1bWVudHNbMl0pKTtcbn0gfSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///322\n")},function(module,exports,__webpack_require__){eval("var $metadata = __webpack_require__(28);\nvar anObject = __webpack_require__(1);\nvar aFunction = __webpack_require__(10);\nvar toMetaKey = $metadata.key;\nvar ordinaryDefineOwnMetadata = $metadata.set;\n\n$metadata.exp({ metadata: function metadata(metadataKey, metadataValue) {\n return function decorator(target, targetKey) {\n ordinaryDefineOwnMetadata(\n metadataKey, metadataValue,\n (targetKey !== undefined ? anObject : aFunction)(target),\n toMetaKey(targetKey)\n );\n };\n} });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5tZXRhZGF0YS5qcz8zYTljIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGdCQUFnQixtQkFBTyxDQUFDLEVBQWE7QUFDckMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2QztBQUNBOztBQUVBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsRUFBRSIsImZpbGUiOiIzMjMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgJG1ldGFkYXRhID0gcmVxdWlyZSgnLi9fbWV0YWRhdGEnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciB0b01ldGFLZXkgPSAkbWV0YWRhdGEua2V5O1xudmFyIG9yZGluYXJ5RGVmaW5lT3duTWV0YWRhdGEgPSAkbWV0YWRhdGEuc2V0O1xuXG4kbWV0YWRhdGEuZXhwKHsgbWV0YWRhdGE6IGZ1bmN0aW9uIG1ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbiBkZWNvcmF0b3IodGFyZ2V0LCB0YXJnZXRLZXkpIHtcbiAgICBvcmRpbmFyeURlZmluZU93bk1ldGFkYXRhKFxuICAgICAgbWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUsXG4gICAgICAodGFyZ2V0S2V5ICE9PSB1bmRlZmluZWQgPyBhbk9iamVjdCA6IGFGdW5jdGlvbikodGFyZ2V0KSxcbiAgICAgIHRvTWV0YUtleSh0YXJnZXRLZXkpXG4gICAgKTtcbiAgfTtcbn0gfSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///323\n")},function(module,exports,__webpack_require__){eval("// https://github.com/rwaldron/tc39-notes/blob/master/es6/2014-09/sept-25.md#510-globalasap-for-enqueuing-a-microtask\nvar $export = __webpack_require__(0);\nvar microtask = __webpack_require__(90)();\nvar process = __webpack_require__(2).process;\nvar isNode = __webpack_require__(20)(process) == 'process';\n\n$export($export.G, {\n asap: function asap(fn) {\n var domain = isNode && process.domain;\n microtask(domain ? domain.bind(fn) : fn);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuYXNhcC5qcz8wZDI1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBYztBQUN0QyxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxhQUFhLG1CQUFPLENBQUMsRUFBUTs7QUFFN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMzI0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXRodWIuY29tL3J3YWxkcm9uL3RjMzktbm90ZXMvYmxvYi9tYXN0ZXIvZXM2LzIwMTQtMDkvc2VwdC0yNS5tZCM1MTAtZ2xvYmFsYXNhcC1mb3ItZW5xdWV1aW5nLWEtbWljcm90YXNrXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIG1pY3JvdGFzayA9IHJlcXVpcmUoJy4vX21pY3JvdGFzaycpKCk7XG52YXIgcHJvY2VzcyA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLnByb2Nlc3M7XG52YXIgaXNOb2RlID0gcmVxdWlyZSgnLi9fY29mJykocHJvY2VzcykgPT0gJ3Byb2Nlc3MnO1xuXG4kZXhwb3J0KCRleHBvcnQuRywge1xuICBhc2FwOiBmdW5jdGlvbiBhc2FwKGZuKSB7XG4gICAgdmFyIGRvbWFpbiA9IGlzTm9kZSAmJiBwcm9jZXNzLmRvbWFpbjtcbiAgICBtaWNyb3Rhc2soZG9tYWluID8gZG9tYWluLmJpbmQoZm4pIDogZm4pO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///324\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// https://github.com/zenparsing/es-observable\nvar $export = __webpack_require__(0);\nvar global = __webpack_require__(2);\nvar core = __webpack_require__(18);\nvar microtask = __webpack_require__(90)();\nvar OBSERVABLE = __webpack_require__(5)('observable');\nvar aFunction = __webpack_require__(10);\nvar anObject = __webpack_require__(1);\nvar anInstance = __webpack_require__(39);\nvar redefineAll = __webpack_require__(41);\nvar hide = __webpack_require__(11);\nvar forOf = __webpack_require__(40);\nvar RETURN = forOf.RETURN;\n\nvar getMethod = function (fn) {\n return fn == null ? undefined : aFunction(fn);\n};\n\nvar cleanupSubscription = function (subscription) {\n var cleanup = subscription._c;\n if (cleanup) {\n subscription._c = undefined;\n cleanup();\n }\n};\n\nvar subscriptionClosed = function (subscription) {\n return subscription._o === undefined;\n};\n\nvar closeSubscription = function (subscription) {\n if (!subscriptionClosed(subscription)) {\n subscription._o = undefined;\n cleanupSubscription(subscription);\n }\n};\n\nvar Subscription = function (observer, subscriber) {\n anObject(observer);\n this._c = undefined;\n this._o = observer;\n observer = new SubscriptionObserver(this);\n try {\n var cleanup = subscriber(observer);\n var subscription = cleanup;\n if (cleanup != null) {\n if (typeof cleanup.unsubscribe === 'function') cleanup = function () { subscription.unsubscribe(); };\n else aFunction(cleanup);\n this._c = cleanup;\n }\n } catch (e) {\n observer.error(e);\n return;\n } if (subscriptionClosed(this)) cleanupSubscription(this);\n};\n\nSubscription.prototype = redefineAll({}, {\n unsubscribe: function unsubscribe() { closeSubscription(this); }\n});\n\nvar SubscriptionObserver = function (subscription) {\n this._s = subscription;\n};\n\nSubscriptionObserver.prototype = redefineAll({}, {\n next: function next(value) {\n var subscription = this._s;\n if (!subscriptionClosed(subscription)) {\n var observer = subscription._o;\n try {\n var m = getMethod(observer.next);\n if (m) return m.call(observer, value);\n } catch (e) {\n try {\n closeSubscription(subscription);\n } finally {\n throw e;\n }\n }\n }\n },\n error: function error(value) {\n var subscription = this._s;\n if (subscriptionClosed(subscription)) throw value;\n var observer = subscription._o;\n subscription._o = undefined;\n try {\n var m = getMethod(observer.error);\n if (!m) throw value;\n value = m.call(observer, value);\n } catch (e) {\n try {\n cleanupSubscription(subscription);\n } finally {\n throw e;\n }\n } cleanupSubscription(subscription);\n return value;\n },\n complete: function complete(value) {\n var subscription = this._s;\n if (!subscriptionClosed(subscription)) {\n var observer = subscription._o;\n subscription._o = undefined;\n try {\n var m = getMethod(observer.complete);\n value = m ? m.call(observer, value) : undefined;\n } catch (e) {\n try {\n cleanupSubscription(subscription);\n } finally {\n throw e;\n }\n } cleanupSubscription(subscription);\n return value;\n }\n }\n});\n\nvar $Observable = function Observable(subscriber) {\n anInstance(this, $Observable, 'Observable', '_f')._f = aFunction(subscriber);\n};\n\nredefineAll($Observable.prototype, {\n subscribe: function subscribe(observer) {\n return new Subscription(observer, this._f);\n },\n forEach: function forEach(fn) {\n var that = this;\n return new (core.Promise || global.Promise)(function (resolve, reject) {\n aFunction(fn);\n var subscription = that.subscribe({\n next: function (value) {\n try {\n return fn(value);\n } catch (e) {\n reject(e);\n subscription.unsubscribe();\n }\n },\n error: reject,\n complete: resolve\n });\n });\n }\n});\n\nredefineAll($Observable, {\n from: function from(x) {\n var C = typeof this === 'function' ? this : $Observable;\n var method = getMethod(anObject(x)[OBSERVABLE]);\n if (method) {\n var observable = anObject(method.call(x));\n return observable.constructor === C ? observable : new C(function (observer) {\n return observable.subscribe(observer);\n });\n }\n return new C(function (observer) {\n var done = false;\n microtask(function () {\n if (!done) {\n try {\n if (forOf(x, false, function (it) {\n observer.next(it);\n if (done) return RETURN;\n }) === RETURN) return;\n } catch (e) {\n if (done) throw e;\n observer.error(e);\n return;\n } observer.complete();\n }\n });\n return function () { done = true; };\n });\n },\n of: function of() {\n for (var i = 0, l = arguments.length, items = new Array(l); i < l;) items[i] = arguments[i++];\n return new (typeof this === 'function' ? this : $Observable)(function (observer) {\n var done = false;\n microtask(function () {\n if (!done) {\n for (var j = 0; j < items.length; ++j) {\n observer.next(items[j]);\n if (done) return;\n } observer.complete();\n }\n });\n return function () { done = true; };\n });\n }\n});\n\nhide($Observable.prototype, OBSERVABLE, function () { return this; });\n\n$export($export.G, { Observable: $Observable });\n\n__webpack_require__(38)('Observable');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JzZXJ2YWJsZS5qcz8zN2I1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxhQUFhLG1CQUFPLENBQUMsQ0FBVztBQUNoQyxXQUFXLG1CQUFPLENBQUMsRUFBUztBQUM1QixnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFjO0FBQ3RDLGlCQUFpQixtQkFBTyxDQUFDLENBQVE7QUFDakMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2QyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxpQkFBaUIsbUJBQU8sQ0FBQyxFQUFnQjtBQUN6QyxrQkFBa0IsbUJBQU8sQ0FBQyxFQUFpQjtBQUMzQyxXQUFXLG1CQUFPLENBQUMsRUFBUztBQUM1QixZQUFZLG1CQUFPLENBQUMsRUFBVztBQUMvQjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0RUFBNEUsNEJBQTRCO0FBQ3hHO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBLHVDQUF1QztBQUN2Qyx1Q0FBdUMseUJBQXlCO0FBQ2hFLENBQUM7O0FBRUQ7QUFDQTtBQUNBOztBQUVBLCtDQUErQztBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYixXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0EsT0FBTztBQUNQLDBCQUEwQixhQUFhO0FBQ3ZDLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQSwrREFBK0QsT0FBTztBQUN0RTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QixrQkFBa0I7QUFDM0M7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBLE9BQU87QUFDUCwwQkFBMEIsYUFBYTtBQUN2QyxLQUFLO0FBQ0w7QUFDQSxDQUFDOztBQUVELHFEQUFxRCxhQUFhLEVBQUU7O0FBRXBFLG9CQUFvQiwwQkFBMEI7O0FBRTlDLG1CQUFPLENBQUMsRUFBZ0IiLCJmaWxlIjoiMzI1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3plbnBhcnNpbmcvZXMtb2JzZXJ2YWJsZVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIG1pY3JvdGFzayA9IHJlcXVpcmUoJy4vX21pY3JvdGFzaycpKCk7XG52YXIgT0JTRVJWQUJMRSA9IHJlcXVpcmUoJy4vX3drcycpKCdvYnNlcnZhYmxlJyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG52YXIgcmVkZWZpbmVBbGwgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIGZvck9mID0gcmVxdWlyZSgnLi9fZm9yLW9mJyk7XG52YXIgUkVUVVJOID0gZm9yT2YuUkVUVVJOO1xuXG52YXIgZ2V0TWV0aG9kID0gZnVuY3Rpb24gKGZuKSB7XG4gIHJldHVybiBmbiA9PSBudWxsID8gdW5kZWZpbmVkIDogYUZ1bmN0aW9uKGZuKTtcbn07XG5cbnZhciBjbGVhbnVwU3Vic2NyaXB0aW9uID0gZnVuY3Rpb24gKHN1YnNjcmlwdGlvbikge1xuICB2YXIgY2xlYW51cCA9IHN1YnNjcmlwdGlvbi5fYztcbiAgaWYgKGNsZWFudXApIHtcbiAgICBzdWJzY3JpcHRpb24uX2MgPSB1bmRlZmluZWQ7XG4gICAgY2xlYW51cCgpO1xuICB9XG59O1xuXG52YXIgc3Vic2NyaXB0aW9uQ2xvc2VkID0gZnVuY3Rpb24gKHN1YnNjcmlwdGlvbikge1xuICByZXR1cm4gc3Vic2NyaXB0aW9uLl9vID09PSB1bmRlZmluZWQ7XG59O1xuXG52YXIgY2xvc2VTdWJzY3JpcHRpb24gPSBmdW5jdGlvbiAoc3Vic2NyaXB0aW9uKSB7XG4gIGlmICghc3Vic2NyaXB0aW9uQ2xvc2VkKHN1YnNjcmlwdGlvbikpIHtcbiAgICBzdWJzY3JpcHRpb24uX28gPSB1bmRlZmluZWQ7XG4gICAgY2xlYW51cFN1YnNjcmlwdGlvbihzdWJzY3JpcHRpb24pO1xuICB9XG59O1xuXG52YXIgU3Vic2NyaXB0aW9uID0gZnVuY3Rpb24gKG9ic2VydmVyLCBzdWJzY3JpYmVyKSB7XG4gIGFuT2JqZWN0KG9ic2VydmVyKTtcbiAgdGhpcy5fYyA9IHVuZGVmaW5lZDtcbiAgdGhpcy5fbyA9IG9ic2VydmVyO1xuICBvYnNlcnZlciA9IG5ldyBTdWJzY3JpcHRpb25PYnNlcnZlcih0aGlzKTtcbiAgdHJ5IHtcbiAgICB2YXIgY2xlYW51cCA9IHN1YnNjcmliZXIob2JzZXJ2ZXIpO1xuICAgIHZhciBzdWJzY3JpcHRpb24gPSBjbGVhbnVwO1xuICAgIGlmIChjbGVhbnVwICE9IG51bGwpIHtcbiAgICAgIGlmICh0eXBlb2YgY2xlYW51cC51bnN1YnNjcmliZSA9PT0gJ2Z1bmN0aW9uJykgY2xlYW51cCA9IGZ1bmN0aW9uICgpIHsgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7IH07XG4gICAgICBlbHNlIGFGdW5jdGlvbihjbGVhbnVwKTtcbiAgICAgIHRoaXMuX2MgPSBjbGVhbnVwO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIG9ic2VydmVyLmVycm9yKGUpO1xuICAgIHJldHVybjtcbiAgfSBpZiAoc3Vic2NyaXB0aW9uQ2xvc2VkKHRoaXMpKSBjbGVhbnVwU3Vic2NyaXB0aW9uKHRoaXMpO1xufTtcblxuU3Vic2NyaXB0aW9uLnByb3RvdHlwZSA9IHJlZGVmaW5lQWxsKHt9LCB7XG4gIHVuc3Vic2NyaWJlOiBmdW5jdGlvbiB1bnN1YnNjcmliZSgpIHsgY2xvc2VTdWJzY3JpcHRpb24odGhpcyk7IH1cbn0pO1xuXG52YXIgU3Vic2NyaXB0aW9uT2JzZXJ2ZXIgPSBmdW5jdGlvbiAoc3Vic2NyaXB0aW9uKSB7XG4gIHRoaXMuX3MgPSBzdWJzY3JpcHRpb247XG59O1xuXG5TdWJzY3JpcHRpb25PYnNlcnZlci5wcm90b3R5cGUgPSByZWRlZmluZUFsbCh7fSwge1xuICBuZXh0OiBmdW5jdGlvbiBuZXh0KHZhbHVlKSB7XG4gICAgdmFyIHN1YnNjcmlwdGlvbiA9IHRoaXMuX3M7XG4gICAgaWYgKCFzdWJzY3JpcHRpb25DbG9zZWQoc3Vic2NyaXB0aW9uKSkge1xuICAgICAgdmFyIG9ic2VydmVyID0gc3Vic2NyaXB0aW9uLl9vO1xuICAgICAgdHJ5IHtcbiAgICAgICAgdmFyIG0gPSBnZXRNZXRob2Qob2JzZXJ2ZXIubmV4dCk7XG4gICAgICAgIGlmIChtKSByZXR1cm4gbS5jYWxsKG9ic2VydmVyLCB2YWx1ZSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY2xvc2VTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LFxuICBlcnJvcjogZnVuY3Rpb24gZXJyb3IodmFsdWUpIHtcbiAgICB2YXIgc3Vic2NyaXB0aW9uID0gdGhpcy5fcztcbiAgICBpZiAoc3Vic2NyaXB0aW9uQ2xvc2VkKHN1YnNjcmlwdGlvbikpIHRocm93IHZhbHVlO1xuICAgIHZhciBvYnNlcnZlciA9IHN1YnNjcmlwdGlvbi5fbztcbiAgICBzdWJzY3JpcHRpb24uX28gPSB1bmRlZmluZWQ7XG4gICAgdHJ5IHtcbiAgICAgIHZhciBtID0gZ2V0TWV0aG9kKG9ic2VydmVyLmVycm9yKTtcbiAgICAgIGlmICghbSkgdGhyb3cgdmFsdWU7XG4gICAgICB2YWx1ZSA9IG0uY2FsbChvYnNlcnZlciwgdmFsdWUpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNsZWFudXBTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgfSBjbGVhbnVwU3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvbik7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9LFxuICBjb21wbGV0ZTogZnVuY3Rpb24gY29tcGxldGUodmFsdWUpIHtcbiAgICB2YXIgc3Vic2NyaXB0aW9uID0gdGhpcy5fcztcbiAgICBpZiAoIXN1YnNjcmlwdGlvbkNsb3NlZChzdWJzY3JpcHRpb24pKSB7XG4gICAgICB2YXIgb2JzZXJ2ZXIgPSBzdWJzY3JpcHRpb24uX287XG4gICAgICBzdWJzY3JpcHRpb24uX28gPSB1bmRlZmluZWQ7XG4gICAgICB0cnkge1xuICAgICAgICB2YXIgbSA9IGdldE1ldGhvZChvYnNlcnZlci5jb21wbGV0ZSk7XG4gICAgICAgIHZhbHVlID0gbSA/IG0uY2FsbChvYnNlcnZlciwgdmFsdWUpIDogdW5kZWZpbmVkO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNsZWFudXBTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICB9IGNsZWFudXBTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKTtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gIH1cbn0pO1xuXG52YXIgJE9ic2VydmFibGUgPSBmdW5jdGlvbiBPYnNlcnZhYmxlKHN1YnNjcmliZXIpIHtcbiAgYW5JbnN0YW5jZSh0aGlzLCAkT2JzZXJ2YWJsZSwgJ09ic2VydmFibGUnLCAnX2YnKS5fZiA9IGFGdW5jdGlvbihzdWJzY3JpYmVyKTtcbn07XG5cbnJlZGVmaW5lQWxsKCRPYnNlcnZhYmxlLnByb3RvdHlwZSwge1xuICBzdWJzY3JpYmU6IGZ1bmN0aW9uIHN1YnNjcmliZShvYnNlcnZlcikge1xuICAgIHJldHVybiBuZXcgU3Vic2NyaXB0aW9uKG9ic2VydmVyLCB0aGlzLl9mKTtcbiAgfSxcbiAgZm9yRWFjaDogZnVuY3Rpb24gZm9yRWFjaChmbikge1xuICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICByZXR1cm4gbmV3IChjb3JlLlByb21pc2UgfHwgZ2xvYmFsLlByb21pc2UpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIGFGdW5jdGlvbihmbik7XG4gICAgICB2YXIgc3Vic2NyaXB0aW9uID0gdGhhdC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIGZuKHZhbHVlKTtcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgICBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiByZWplY3QsXG4gICAgICAgIGNvbXBsZXRlOiByZXNvbHZlXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxufSk7XG5cbnJlZGVmaW5lQWxsKCRPYnNlcnZhYmxlLCB7XG4gIGZyb206IGZ1bmN0aW9uIGZyb20oeCkge1xuICAgIHZhciBDID0gdHlwZW9mIHRoaXMgPT09ICdmdW5jdGlvbicgPyB0aGlzIDogJE9ic2VydmFibGU7XG4gICAgdmFyIG1ldGhvZCA9IGdldE1ldGhvZChhbk9iamVjdCh4KVtPQlNFUlZBQkxFXSk7XG4gICAgaWYgKG1ldGhvZCkge1xuICAgICAgdmFyIG9ic2VydmFibGUgPSBhbk9iamVjdChtZXRob2QuY2FsbCh4KSk7XG4gICAgICByZXR1cm4gb2JzZXJ2YWJsZS5jb25zdHJ1Y3RvciA9PT0gQyA/IG9ic2VydmFibGUgOiBuZXcgQyhmdW5jdGlvbiAob2JzZXJ2ZXIpIHtcbiAgICAgICAgcmV0dXJuIG9ic2VydmFibGUuc3Vic2NyaWJlKG9ic2VydmVyKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IEMoZnVuY3Rpb24gKG9ic2VydmVyKSB7XG4gICAgICB2YXIgZG9uZSA9IGZhbHNlO1xuICAgICAgbWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCFkb25lKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChmb3JPZih4LCBmYWxzZSwgZnVuY3Rpb24gKGl0KSB7XG4gICAgICAgICAgICAgIG9ic2VydmVyLm5leHQoaXQpO1xuICAgICAgICAgICAgICBpZiAoZG9uZSkgcmV0dXJuIFJFVFVSTjtcbiAgICAgICAgICAgIH0pID09PSBSRVRVUk4pIHJldHVybjtcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBpZiAoZG9uZSkgdGhyb3cgZTtcbiAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKGUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH0gb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyBkb25lID0gdHJ1ZTsgfTtcbiAgICB9KTtcbiAgfSxcbiAgb2Y6IGZ1bmN0aW9uIG9mKCkge1xuICAgIGZvciAodmFyIGkgPSAwLCBsID0gYXJndW1lbnRzLmxlbmd0aCwgaXRlbXMgPSBuZXcgQXJyYXkobCk7IGkgPCBsOykgaXRlbXNbaV0gPSBhcmd1bWVudHNbaSsrXTtcbiAgICByZXR1cm4gbmV3ICh0eXBlb2YgdGhpcyA9PT0gJ2Z1bmN0aW9uJyA/IHRoaXMgOiAkT2JzZXJ2YWJsZSkoZnVuY3Rpb24gKG9ic2VydmVyKSB7XG4gICAgICB2YXIgZG9uZSA9IGZhbHNlO1xuICAgICAgbWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCFkb25lKSB7XG4gICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBpdGVtcy5sZW5ndGg7ICsraikge1xuICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChpdGVtc1tqXSk7XG4gICAgICAgICAgICBpZiAoZG9uZSkgcmV0dXJuO1xuICAgICAgICAgIH0gb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyBkb25lID0gdHJ1ZTsgfTtcbiAgICB9KTtcbiAgfVxufSk7XG5cbmhpZGUoJE9ic2VydmFibGUucHJvdG90eXBlLCBPQlNFUlZBQkxFLCBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9KTtcblxuJGV4cG9ydCgkZXhwb3J0LkcsIHsgT2JzZXJ2YWJsZTogJE9ic2VydmFibGUgfSk7XG5cbnJlcXVpcmUoJy4vX3NldC1zcGVjaWVzJykoJ09ic2VydmFibGUnKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///325\n")},function(module,exports,__webpack_require__){eval("// ie9- setTimeout & setInterval additional parameters fix\nvar global = __webpack_require__(2);\nvar $export = __webpack_require__(0);\nvar userAgent = __webpack_require__(60);\nvar slice = [].slice;\nvar MSIE = /MSIE .\\./.test(userAgent); // <- dirty ie9- check\nvar wrap = function (set) {\n return function (fn, time /* , ...args */) {\n var boundArgs = arguments.length > 2;\n var args = boundArgs ? slice.call(arguments, 2) : false;\n return set(boundArgs ? function () {\n // eslint-disable-next-line no-new-func\n (typeof fn == 'function' ? fn : Function(fn)).apply(this, args);\n } : fn, time);\n };\n};\n$export($export.G + $export.B + $export.F * MSIE, {\n setTimeout: wrap(global.setTimeout),\n setInterval: wrap(global.setInterval)\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy93ZWIudGltZXJzLmpzPzQ3OTUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxhQUFhLG1CQUFPLENBQUMsQ0FBVztBQUNoQyxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDO0FBQ0Esc0NBQXNDO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjMyNi5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGllOS0gc2V0VGltZW91dCAmIHNldEludGVydmFsIGFkZGl0aW9uYWwgcGFyYW1ldGVycyBmaXhcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi9fdXNlci1hZ2VudCcpO1xudmFyIHNsaWNlID0gW10uc2xpY2U7XG52YXIgTVNJRSA9IC9NU0lFIC5cXC4vLnRlc3QodXNlckFnZW50KTsgLy8gPC0gZGlydHkgaWU5LSBjaGVja1xudmFyIHdyYXAgPSBmdW5jdGlvbiAoc2V0KSB7XG4gIHJldHVybiBmdW5jdGlvbiAoZm4sIHRpbWUgLyogLCAuLi5hcmdzICovKSB7XG4gICAgdmFyIGJvdW5kQXJncyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyO1xuICAgIHZhciBhcmdzID0gYm91bmRBcmdzID8gc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpIDogZmFsc2U7XG4gICAgcmV0dXJuIHNldChib3VuZEFyZ3MgPyBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmNcbiAgICAgICh0eXBlb2YgZm4gPT0gJ2Z1bmN0aW9uJyA/IGZuIDogRnVuY3Rpb24oZm4pKS5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9IDogZm4sIHRpbWUpO1xuICB9O1xufTtcbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5CICsgJGV4cG9ydC5GICogTVNJRSwge1xuICBzZXRUaW1lb3V0OiB3cmFwKGdsb2JhbC5zZXRUaW1lb3V0KSxcbiAgc2V0SW50ZXJ2YWw6IHdyYXAoZ2xvYmFsLnNldEludGVydmFsKVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///326\n")},function(module,exports,__webpack_require__){eval("var $export = __webpack_require__(0);\nvar $task = __webpack_require__(89);\n$export($export.G + $export.B, {\n setImmediate: $task.set,\n clearImmediate: $task.clear\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy93ZWIuaW1tZWRpYXRlLmpzPzEzMGYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsWUFBWSxtQkFBTyxDQUFDLEVBQVM7QUFDN0I7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIzMjcuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICR0YXNrID0gcmVxdWlyZSgnLi9fdGFzaycpO1xuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LkIsIHtcbiAgc2V0SW1tZWRpYXRlOiAkdGFzay5zZXQsXG4gIGNsZWFySW1tZWRpYXRlOiAkdGFzay5jbGVhclxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///327\n")},function(module,exports,__webpack_require__){eval("var $iterators = __webpack_require__(86);\nvar getKeys = __webpack_require__(34);\nvar redefine = __webpack_require__(12);\nvar global = __webpack_require__(2);\nvar hide = __webpack_require__(11);\nvar Iterators = __webpack_require__(46);\nvar wks = __webpack_require__(5);\nvar ITERATOR = wks('iterator');\nvar TO_STRING_TAG = wks('toStringTag');\nvar ArrayValues = Iterators.Array;\n\nvar DOMIterables = {\n CSSRuleList: true, // TODO: Not spec compliant, should be false.\n CSSStyleDeclaration: false,\n CSSValueList: false,\n ClientRectList: false,\n DOMRectList: false,\n DOMStringList: false,\n DOMTokenList: true,\n DataTransferItemList: false,\n FileList: false,\n HTMLAllCollection: false,\n HTMLCollection: false,\n HTMLFormElement: false,\n HTMLSelectElement: false,\n MediaList: true, // TODO: Not spec compliant, should be false.\n MimeTypeArray: false,\n NamedNodeMap: false,\n NodeList: true,\n PaintRequestList: false,\n Plugin: false,\n PluginArray: false,\n SVGLengthList: false,\n SVGNumberList: false,\n SVGPathSegList: false,\n SVGPointList: false,\n SVGStringList: false,\n SVGTransformList: false,\n SourceBufferList: false,\n StyleSheetList: true, // TODO: Not spec compliant, should be false.\n TextTrackCueList: false,\n TextTrackList: false,\n TouchList: false\n};\n\nfor (var collections = getKeys(DOMIterables), i = 0; i < collections.length; i++) {\n var NAME = collections[i];\n var explicit = DOMIterables[NAME];\n var Collection = global[NAME];\n var proto = Collection && Collection.prototype;\n var key;\n if (proto) {\n if (!proto[ITERATOR]) hide(proto, ITERATOR, ArrayValues);\n if (!proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n Iterators[NAME] = ArrayValues;\n if (explicit) for (key in $iterators) if (!proto[key]) redefine(proto, key, $iterators[key], true);\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy93ZWIuZG9tLml0ZXJhYmxlLmpzP2FjNmEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsaUJBQWlCLG1CQUFPLENBQUMsRUFBc0I7QUFDL0MsY0FBYyxtQkFBTyxDQUFDLEVBQWdCO0FBQ3RDLGVBQWUsbUJBQU8sQ0FBQyxFQUFhO0FBQ3BDLGFBQWEsbUJBQU8sQ0FBQyxDQUFXO0FBQ2hDLFdBQVcsbUJBQU8sQ0FBQyxFQUFTO0FBQzVCLGdCQUFnQixtQkFBTyxDQUFDLEVBQWM7QUFDdEMsVUFBVSxtQkFBTyxDQUFDLENBQVE7QUFDMUI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxvREFBb0Qsd0JBQXdCO0FBQzVFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIzMjguanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgJGl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vZXM2LmFycmF5Lml0ZXJhdG9yJyk7XG52YXIgZ2V0S2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJyk7XG52YXIgd2tzID0gcmVxdWlyZSgnLi9fd2tzJyk7XG52YXIgSVRFUkFUT1IgPSB3a3MoJ2l0ZXJhdG9yJyk7XG52YXIgVE9fU1RSSU5HX1RBRyA9IHdrcygndG9TdHJpbmdUYWcnKTtcbnZhciBBcnJheVZhbHVlcyA9IEl0ZXJhdG9ycy5BcnJheTtcblxudmFyIERPTUl0ZXJhYmxlcyA9IHtcbiAgQ1NTUnVsZUxpc3Q6IHRydWUsIC8vIFRPRE86IE5vdCBzcGVjIGNvbXBsaWFudCwgc2hvdWxkIGJlIGZhbHNlLlxuICBDU1NTdHlsZURlY2xhcmF0aW9uOiBmYWxzZSxcbiAgQ1NTVmFsdWVMaXN0OiBmYWxzZSxcbiAgQ2xpZW50UmVjdExpc3Q6IGZhbHNlLFxuICBET01SZWN0TGlzdDogZmFsc2UsXG4gIERPTVN0cmluZ0xpc3Q6IGZhbHNlLFxuICBET01Ub2tlbkxpc3Q6IHRydWUsXG4gIERhdGFUcmFuc2Zlckl0ZW1MaXN0OiBmYWxzZSxcbiAgRmlsZUxpc3Q6IGZhbHNlLFxuICBIVE1MQWxsQ29sbGVjdGlvbjogZmFsc2UsXG4gIEhUTUxDb2xsZWN0aW9uOiBmYWxzZSxcbiAgSFRNTEZvcm1FbGVtZW50OiBmYWxzZSxcbiAgSFRNTFNlbGVjdEVsZW1lbnQ6IGZhbHNlLFxuICBNZWRpYUxpc3Q6IHRydWUsIC8vIFRPRE86IE5vdCBzcGVjIGNvbXBsaWFudCwgc2hvdWxkIGJlIGZhbHNlLlxuICBNaW1lVHlwZUFycmF5OiBmYWxzZSxcbiAgTmFtZWROb2RlTWFwOiBmYWxzZSxcbiAgTm9kZUxpc3Q6IHRydWUsXG4gIFBhaW50UmVxdWVzdExpc3Q6IGZhbHNlLFxuICBQbHVnaW46IGZhbHNlLFxuICBQbHVnaW5BcnJheTogZmFsc2UsXG4gIFNWR0xlbmd0aExpc3Q6IGZhbHNlLFxuICBTVkdOdW1iZXJMaXN0OiBmYWxzZSxcbiAgU1ZHUGF0aFNlZ0xpc3Q6IGZhbHNlLFxuICBTVkdQb2ludExpc3Q6IGZhbHNlLFxuICBTVkdTdHJpbmdMaXN0OiBmYWxzZSxcbiAgU1ZHVHJhbnNmb3JtTGlzdDogZmFsc2UsXG4gIFNvdXJjZUJ1ZmZlckxpc3Q6IGZhbHNlLFxuICBTdHlsZVNoZWV0TGlzdDogdHJ1ZSwgLy8gVE9ETzogTm90IHNwZWMgY29tcGxpYW50LCBzaG91bGQgYmUgZmFsc2UuXG4gIFRleHRUcmFja0N1ZUxpc3Q6IGZhbHNlLFxuICBUZXh0VHJhY2tMaXN0OiBmYWxzZSxcbiAgVG91Y2hMaXN0OiBmYWxzZVxufTtcblxuZm9yICh2YXIgY29sbGVjdGlvbnMgPSBnZXRLZXlzKERPTUl0ZXJhYmxlcyksIGkgPSAwOyBpIDwgY29sbGVjdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgdmFyIE5BTUUgPSBjb2xsZWN0aW9uc1tpXTtcbiAgdmFyIGV4cGxpY2l0ID0gRE9NSXRlcmFibGVzW05BTUVdO1xuICB2YXIgQ29sbGVjdGlvbiA9IGdsb2JhbFtOQU1FXTtcbiAgdmFyIHByb3RvID0gQ29sbGVjdGlvbiAmJiBDb2xsZWN0aW9uLnByb3RvdHlwZTtcbiAgdmFyIGtleTtcbiAgaWYgKHByb3RvKSB7XG4gICAgaWYgKCFwcm90b1tJVEVSQVRPUl0pIGhpZGUocHJvdG8sIElURVJBVE9SLCBBcnJheVZhbHVlcyk7XG4gICAgaWYgKCFwcm90b1tUT19TVFJJTkdfVEFHXSkgaGlkZShwcm90bywgVE9fU1RSSU5HX1RBRywgTkFNRSk7XG4gICAgSXRlcmF0b3JzW05BTUVdID0gQXJyYXlWYWx1ZXM7XG4gICAgaWYgKGV4cGxpY2l0KSBmb3IgKGtleSBpbiAkaXRlcmF0b3JzKSBpZiAoIXByb3RvW2tleV0pIHJlZGVmaW5lKHByb3RvLCBrZXksICRpdGVyYXRvcnNba2V5XSwgdHJ1ZSk7XG4gIH1cbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///328\n")},function(module,exports,__webpack_require__){eval('/* WEBPACK VAR INJECTION */(function(global) {/**\n * Copyright (c) 2014, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * https://raw.github.com/facebook/regenerator/master/LICENSE file. An\n * additional grant of patent rights can be found in the PATENTS file in\n * the same directory.\n */\n\n!(function(global) {\n "use strict";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === "function" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || "@@iterator";\n var asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator";\n var toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag";\n\n var inModule = typeof module === "object";\n var runtime = global.regeneratorRuntime;\n if (runtime) {\n if (inModule) {\n // If regeneratorRuntime is defined globally and we\'re in a module,\n // make the exports object identical to regeneratorRuntime.\n module.exports = runtime;\n }\n // Don\'t bother evaluating the rest of this file if the runtime was\n // already defined globally.\n return;\n }\n\n // Define the runtime globally (as expected by generated code) as either\n // module.exports (if we\'re in a module) or a new, empty object.\n runtime = global.regeneratorRuntime = inModule ? module.exports : {};\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n runtime.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there\'s no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don\'t have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: "normal", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: "throw", arg: err };\n }\n }\n\n var GenStateSuspendedStart = "suspendedStart";\n var GenStateSuspendedYield = "suspendedYield";\n var GenStateExecuting = "executing";\n var GenStateCompleted = "completed";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don\'t natively support it.\n var IteratorPrototype = {};\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunctionPrototype[toStringTagSymbol] =\n GeneratorFunction.displayName = "GeneratorFunction";\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n ["next", "throw", "return"].forEach(function(method) {\n prototype[method] = function(arg) {\n return this._invoke(method, arg);\n };\n });\n }\n\n runtime.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === "function" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === "GeneratorFunction"\n : false;\n };\n\n runtime.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n if (!(toStringTagSymbol in genFun)) {\n genFun[toStringTagSymbol] = "GeneratorFunction";\n }\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, "__await")` to determine if the yielded value is\n // meant to be awaited.\n runtime.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === "throw") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === "object" &&\n hasOwn.call(value, "__await")) {\n return Promise.resolve(value.__await).then(function(value) {\n invoke("next", value, resolve, reject);\n }, function(err) {\n invoke("throw", err, resolve, reject);\n });\n }\n\n return Promise.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration. If the Promise is rejected, however, the\n // result for this iteration will be rejected with the same\n // reason. Note that rejections of yielded Promises are not\n // thrown back into the generator function, as is the case\n // when an awaited Promise is rejected. This difference in\n // behavior between yield and await is important, because it\n // allows the consumer to decide what to do with the yielded\n // rejection (swallow it and continue, manually .throw it back\n // into the generator, abandon iteration, whatever). With\n // await, by contrast, there is no opportunity to examine the\n // rejection reason outside the generator function, so the\n // only option is to throw it from the await expression, and\n // let the generator function handle the exception.\n result.value = unwrapped;\n resolve(result);\n }, reject);\n }\n }\n\n if (typeof global.process === "object" && global.process.domain) {\n invoke = global.process.domain.bind(invoke);\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new Promise(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n runtime.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n runtime.async = function(innerFn, outerFn, self, tryLocsList) {\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList)\n );\n\n return runtime.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error("Generator is already running");\n }\n\n if (state === GenStateCompleted) {\n if (method === "throw") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === "next") {\n // Setting context._sent for legacy support of Babel\'s\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === "throw") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === "return") {\n context.abrupt("return", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === "normal") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === "throw") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = "throw";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === "throw") {\n if (delegate.iterator.return) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = "return";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === "throw") {\n // If maybeInvokeDelegate(context) changed context.method from\n // "return" to "throw", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = "throw";\n context.arg = new TypeError(\n "The iterator does not provide a \'throw\' method");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === "throw") {\n context.method = "throw";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = "throw";\n context.arg = new TypeError("iterator result is not an object");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was "throw" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was "next", forget context.arg since it has been\n // "consumed" by the delegate iterator. If context.method was\n // "return", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== "return") {\n context.method = "next";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n Gp[toStringTagSymbol] = "Generator";\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers\' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn\'t happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return "[object Generator]";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = "normal";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: "root" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n runtime.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === "function") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n runtime.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel\'s\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = "next";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === "t" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === "throw") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = "throw";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = "next";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === "root") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle("end");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, "catchLoc");\n var hasFinally = hasOwn.call(entry, "finallyLoc");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error("try statement without catch or finally");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, "finallyLoc") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === "break" ||\n type === "continue") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = "next";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === "throw") {\n throw record.arg;\n }\n\n if (record.type === "break" ||\n record.type === "continue") {\n this.next = record.arg;\n } else if (record.type === "return") {\n this.rval = this.arg = record.arg;\n this.method = "return";\n this.next = "end";\n } else if (record.type === "normal" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n "catch": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === "throw") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error("illegal catch attempt");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === "next") {\n // Deliberately forget the last sent value so that we don\'t\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n})(\n // Among the various tricks for obtaining a reference to the global\n // object, this seems to be the most reliable technique that does not\n // use indirect eval (which violates Content Security Policy).\n typeof global === "object" ? global :\n typeof window === "object" ? window :\n typeof self === "object" ? self : this\n);\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(93)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9yZWdlbmVyYXRvci1ydW50aW1lL3J1bnRpbWUuanM/ZjNhMiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZCxLQUFLO0FBQ0wsY0FBYztBQUNkO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseURBQXlEO0FBQ3pEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBLFdBQVc7QUFDWDs7QUFFQTtBQUNBO0FBQ0Esd0NBQXdDLFdBQVc7QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDJCQUEyQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLFNBQVM7QUFDVDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esb0NBQW9DLGNBQWM7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlDQUFpQyxrQkFBa0I7QUFDbkQ7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGlCQUFpQjs7QUFFakI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLGlCQUFpQjtBQUN6QztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFlBQVk7QUFDWjtBQUNBOztBQUVBO0FBQ0EsWUFBWTtBQUNaOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsOENBQThDLFFBQVE7QUFDdEQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBOztBQUVBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7O0FBRUEsV0FBVztBQUNYO0FBQ0E7QUFDQTs7QUFFQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0EsOENBQThDLFFBQVE7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQSw4Q0FBOEMsUUFBUTtBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQSw4Q0FBOEMsUUFBUTtBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIzMjkuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxNCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBodHRwczovL3Jhdy5naXRodWIuY29tL2ZhY2Vib29rL3JlZ2VuZXJhdG9yL21hc3Rlci9MSUNFTlNFIGZpbGUuIEFuXG4gKiBhZGRpdGlvbmFsIGdyYW50IG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW5cbiAqIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqL1xuXG4hKGZ1bmN0aW9uKGdsb2JhbCkge1xuICBcInVzZSBzdHJpY3RcIjtcblxuICB2YXIgT3AgPSBPYmplY3QucHJvdG90eXBlO1xuICB2YXIgaGFzT3duID0gT3AuaGFzT3duUHJvcGVydHk7XG4gIHZhciB1bmRlZmluZWQ7IC8vIE1vcmUgY29tcHJlc3NpYmxlIHRoYW4gdm9pZCAwLlxuICB2YXIgJFN5bWJvbCA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiA/IFN5bWJvbCA6IHt9O1xuICB2YXIgaXRlcmF0b3JTeW1ib2wgPSAkU3ltYm9sLml0ZXJhdG9yIHx8IFwiQEBpdGVyYXRvclwiO1xuICB2YXIgYXN5bmNJdGVyYXRvclN5bWJvbCA9ICRTeW1ib2wuYXN5bmNJdGVyYXRvciB8fCBcIkBAYXN5bmNJdGVyYXRvclwiO1xuICB2YXIgdG9TdHJpbmdUYWdTeW1ib2wgPSAkU3ltYm9sLnRvU3RyaW5nVGFnIHx8IFwiQEB0b1N0cmluZ1RhZ1wiO1xuXG4gIHZhciBpbk1vZHVsZSA9IHR5cGVvZiBtb2R1bGUgPT09IFwib2JqZWN0XCI7XG4gIHZhciBydW50aW1lID0gZ2xvYmFsLnJlZ2VuZXJhdG9yUnVudGltZTtcbiAgaWYgKHJ1bnRpbWUpIHtcbiAgICBpZiAoaW5Nb2R1bGUpIHtcbiAgICAgIC8vIElmIHJlZ2VuZXJhdG9yUnVudGltZSBpcyBkZWZpbmVkIGdsb2JhbGx5IGFuZCB3ZSdyZSBpbiBhIG1vZHVsZSxcbiAgICAgIC8vIG1ha2UgdGhlIGV4cG9ydHMgb2JqZWN0IGlkZW50aWNhbCB0byByZWdlbmVyYXRvclJ1bnRpbWUuXG4gICAgICBtb2R1bGUuZXhwb3J0cyA9IHJ1bnRpbWU7XG4gICAgfVxuICAgIC8vIERvbid0IGJvdGhlciBldmFsdWF0aW5nIHRoZSByZXN0IG9mIHRoaXMgZmlsZSBpZiB0aGUgcnVudGltZSB3YXNcbiAgICAvLyBhbHJlYWR5IGRlZmluZWQgZ2xvYmFsbHkuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gRGVmaW5lIHRoZSBydW50aW1lIGdsb2JhbGx5IChhcyBleHBlY3RlZCBieSBnZW5lcmF0ZWQgY29kZSkgYXMgZWl0aGVyXG4gIC8vIG1vZHVsZS5leHBvcnRzIChpZiB3ZSdyZSBpbiBhIG1vZHVsZSkgb3IgYSBuZXcsIGVtcHR5IG9iamVjdC5cbiAgcnVudGltZSA9IGdsb2JhbC5yZWdlbmVyYXRvclJ1bnRpbWUgPSBpbk1vZHVsZSA/IG1vZHVsZS5leHBvcnRzIDoge307XG5cbiAgZnVuY3Rpb24gd3JhcChpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdCkge1xuICAgIC8vIElmIG91dGVyRm4gcHJvdmlkZWQgYW5kIG91dGVyRm4ucHJvdG90eXBlIGlzIGEgR2VuZXJhdG9yLCB0aGVuIG91dGVyRm4ucHJvdG90eXBlIGluc3RhbmNlb2YgR2VuZXJhdG9yLlxuICAgIHZhciBwcm90b0dlbmVyYXRvciA9IG91dGVyRm4gJiYgb3V0ZXJGbi5wcm90b3R5cGUgaW5zdGFuY2VvZiBHZW5lcmF0b3IgPyBvdXRlckZuIDogR2VuZXJhdG9yO1xuICAgIHZhciBnZW5lcmF0b3IgPSBPYmplY3QuY3JlYXRlKHByb3RvR2VuZXJhdG9yLnByb3RvdHlwZSk7XG4gICAgdmFyIGNvbnRleHQgPSBuZXcgQ29udGV4dCh0cnlMb2NzTGlzdCB8fCBbXSk7XG5cbiAgICAvLyBUaGUgLl9pbnZva2UgbWV0aG9kIHVuaWZpZXMgdGhlIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgLm5leHQsXG4gICAgLy8gLnRocm93LCBhbmQgLnJldHVybiBtZXRob2RzLlxuICAgIGdlbmVyYXRvci5faW52b2tlID0gbWFrZUludm9rZU1ldGhvZChpbm5lckZuLCBzZWxmLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBnZW5lcmF0b3I7XG4gIH1cbiAgcnVudGltZS53cmFwID0gd3JhcDtcblxuICAvLyBUcnkvY2F0Y2ggaGVscGVyIHRvIG1pbmltaXplIGRlb3B0aW1pemF0aW9ucy4gUmV0dXJucyBhIGNvbXBsZXRpb25cbiAgLy8gcmVjb3JkIGxpa2UgY29udGV4dC50cnlFbnRyaWVzW2ldLmNvbXBsZXRpb24uIFRoaXMgaW50ZXJmYWNlIGNvdWxkXG4gIC8vIGhhdmUgYmVlbiAoYW5kIHdhcyBwcmV2aW91c2x5KSBkZXNpZ25lZCB0byB0YWtlIGEgY2xvc3VyZSB0byBiZVxuICAvLyBpbnZva2VkIHdpdGhvdXQgYXJndW1lbnRzLCBidXQgaW4gYWxsIHRoZSBjYXNlcyB3ZSBjYXJlIGFib3V0IHdlXG4gIC8vIGFscmVhZHkgaGF2ZSBhbiBleGlzdGluZyBtZXRob2Qgd2Ugd2FudCB0byBjYWxsLCBzbyB0aGVyZSdzIG5vIG5lZWRcbiAgLy8gdG8gY3JlYXRlIGEgbmV3IGZ1bmN0aW9uIG9iamVjdC4gV2UgY2FuIGV2ZW4gZ2V0IGF3YXkgd2l0aCBhc3N1bWluZ1xuICAvLyB0aGUgbWV0aG9kIHRha2VzIGV4YWN0bHkgb25lIGFyZ3VtZW50LCBzaW5jZSB0aGF0IGhhcHBlbnMgdG8gYmUgdHJ1ZVxuICAvLyBpbiBldmVyeSBjYXNlLCBzbyB3ZSBkb24ndCBoYXZlIHRvIHRvdWNoIHRoZSBhcmd1bWVudHMgb2JqZWN0LiBUaGVcbiAgLy8gb25seSBhZGRpdGlvbmFsIGFsbG9jYXRpb24gcmVxdWlyZWQgaXMgdGhlIGNvbXBsZXRpb24gcmVjb3JkLCB3aGljaFxuICAvLyBoYXMgYSBzdGFibGUgc2hhcGUgYW5kIHNvIGhvcGVmdWxseSBzaG91bGQgYmUgY2hlYXAgdG8gYWxsb2NhdGUuXG4gIGZ1bmN0aW9uIHRyeUNhdGNoKGZuLCBvYmosIGFyZykge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4geyB0eXBlOiBcIm5vcm1hbFwiLCBhcmc6IGZuLmNhbGwob2JqLCBhcmcpIH07XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICByZXR1cm4geyB0eXBlOiBcInRocm93XCIsIGFyZzogZXJyIH07XG4gICAgfVxuICB9XG5cbiAgdmFyIEdlblN0YXRlU3VzcGVuZGVkU3RhcnQgPSBcInN1c3BlbmRlZFN0YXJ0XCI7XG4gIHZhciBHZW5TdGF0ZVN1c3BlbmRlZFlpZWxkID0gXCJzdXNwZW5kZWRZaWVsZFwiO1xuICB2YXIgR2VuU3RhdGVFeGVjdXRpbmcgPSBcImV4ZWN1dGluZ1wiO1xuICB2YXIgR2VuU3RhdGVDb21wbGV0ZWQgPSBcImNvbXBsZXRlZFwiO1xuXG4gIC8vIFJldHVybmluZyB0aGlzIG9iamVjdCBmcm9tIHRoZSBpbm5lckZuIGhhcyB0aGUgc2FtZSBlZmZlY3QgYXNcbiAgLy8gYnJlYWtpbmcgb3V0IG9mIHRoZSBkaXNwYXRjaCBzd2l0Y2ggc3RhdGVtZW50LlxuICB2YXIgQ29udGludWVTZW50aW5lbCA9IHt9O1xuXG4gIC8vIER1bW15IGNvbnN0cnVjdG9yIGZ1bmN0aW9ucyB0aGF0IHdlIHVzZSBhcyB0aGUgLmNvbnN0cnVjdG9yIGFuZFxuICAvLyAuY29uc3RydWN0b3IucHJvdG90eXBlIHByb3BlcnRpZXMgZm9yIGZ1bmN0aW9ucyB0aGF0IHJldHVybiBHZW5lcmF0b3JcbiAgLy8gb2JqZWN0cy4gRm9yIGZ1bGwgc3BlYyBjb21wbGlhbmNlLCB5b3UgbWF5IHdpc2ggdG8gY29uZmlndXJlIHlvdXJcbiAgLy8gbWluaWZpZXIgbm90IHRvIG1hbmdsZSB0aGUgbmFtZXMgb2YgdGhlc2UgdHdvIGZ1bmN0aW9ucy5cbiAgZnVuY3Rpb24gR2VuZXJhdG9yKCkge31cbiAgZnVuY3Rpb24gR2VuZXJhdG9yRnVuY3Rpb24oKSB7fVxuICBmdW5jdGlvbiBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSgpIHt9XG5cbiAgLy8gVGhpcyBpcyBhIHBvbHlmaWxsIGZvciAlSXRlcmF0b3JQcm90b3R5cGUlIGZvciBlbnZpcm9ubWVudHMgdGhhdFxuICAvLyBkb24ndCBuYXRpdmVseSBzdXBwb3J0IGl0LlxuICB2YXIgSXRlcmF0b3JQcm90b3R5cGUgPSB7fTtcbiAgSXRlcmF0b3JQcm90b3R5cGVbaXRlcmF0b3JTeW1ib2xdID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIHZhciBnZXRQcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZjtcbiAgdmFyIE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlID0gZ2V0UHJvdG8gJiYgZ2V0UHJvdG8oZ2V0UHJvdG8odmFsdWVzKFtdKSkpO1xuICBpZiAoTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUgJiZcbiAgICAgIE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlICE9PSBPcCAmJlxuICAgICAgaGFzT3duLmNhbGwoTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUsIGl0ZXJhdG9yU3ltYm9sKSkge1xuICAgIC8vIFRoaXMgZW52aXJvbm1lbnQgaGFzIGEgbmF0aXZlICVJdGVyYXRvclByb3RvdHlwZSU7IHVzZSBpdCBpbnN0ZWFkXG4gICAgLy8gb2YgdGhlIHBvbHlmaWxsLlxuICAgIEl0ZXJhdG9yUHJvdG90eXBlID0gTmF0aXZlSXRlcmF0b3JQcm90b3R5cGU7XG4gIH1cblxuICB2YXIgR3AgPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZS5wcm90b3R5cGUgPVxuICAgIEdlbmVyYXRvci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEl0ZXJhdG9yUHJvdG90eXBlKTtcbiAgR2VuZXJhdG9yRnVuY3Rpb24ucHJvdG90eXBlID0gR3AuY29uc3RydWN0b3IgPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZTtcbiAgR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUuY29uc3RydWN0b3IgPSBHZW5lcmF0b3JGdW5jdGlvbjtcbiAgR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGVbdG9TdHJpbmdUYWdTeW1ib2xdID1cbiAgICBHZW5lcmF0b3JGdW5jdGlvbi5kaXNwbGF5TmFtZSA9IFwiR2VuZXJhdG9yRnVuY3Rpb25cIjtcblxuICAvLyBIZWxwZXIgZm9yIGRlZmluaW5nIHRoZSAubmV4dCwgLnRocm93LCBhbmQgLnJldHVybiBtZXRob2RzIG9mIHRoZVxuICAvLyBJdGVyYXRvciBpbnRlcmZhY2UgaW4gdGVybXMgb2YgYSBzaW5nbGUgLl9pbnZva2UgbWV0aG9kLlxuICBmdW5jdGlvbiBkZWZpbmVJdGVyYXRvck1ldGhvZHMocHJvdG90eXBlKSB7XG4gICAgW1wibmV4dFwiLCBcInRocm93XCIsIFwicmV0dXJuXCJdLmZvckVhY2goZnVuY3Rpb24obWV0aG9kKSB7XG4gICAgICBwcm90b3R5cGVbbWV0aG9kXSA9IGZ1bmN0aW9uKGFyZykge1xuICAgICAgICByZXR1cm4gdGhpcy5faW52b2tlKG1ldGhvZCwgYXJnKTtcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBydW50aW1lLmlzR2VuZXJhdG9yRnVuY3Rpb24gPSBmdW5jdGlvbihnZW5GdW4pIHtcbiAgICB2YXIgY3RvciA9IHR5cGVvZiBnZW5GdW4gPT09IFwiZnVuY3Rpb25cIiAmJiBnZW5GdW4uY29uc3RydWN0b3I7XG4gICAgcmV0dXJuIGN0b3JcbiAgICAgID8gY3RvciA9PT0gR2VuZXJhdG9yRnVuY3Rpb24gfHxcbiAgICAgICAgLy8gRm9yIHRoZSBuYXRpdmUgR2VuZXJhdG9yRnVuY3Rpb24gY29uc3RydWN0b3IsIHRoZSBiZXN0IHdlIGNhblxuICAgICAgICAvLyBkbyBpcyB0byBjaGVjayBpdHMgLm5hbWUgcHJvcGVydHkuXG4gICAgICAgIChjdG9yLmRpc3BsYXlOYW1lIHx8IGN0b3IubmFtZSkgPT09IFwiR2VuZXJhdG9yRnVuY3Rpb25cIlxuICAgICAgOiBmYWxzZTtcbiAgfTtcblxuICBydW50aW1lLm1hcmsgPSBmdW5jdGlvbihnZW5GdW4pIHtcbiAgICBpZiAoT2JqZWN0LnNldFByb3RvdHlwZU9mKSB7XG4gICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YoZ2VuRnVuLCBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGdlbkZ1bi5fX3Byb3RvX18gPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZTtcbiAgICAgIGlmICghKHRvU3RyaW5nVGFnU3ltYm9sIGluIGdlbkZ1bikpIHtcbiAgICAgICAgZ2VuRnVuW3RvU3RyaW5nVGFnU3ltYm9sXSA9IFwiR2VuZXJhdG9yRnVuY3Rpb25cIjtcbiAgICAgIH1cbiAgICB9XG4gICAgZ2VuRnVuLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoR3ApO1xuICAgIHJldHVybiBnZW5GdW47XG4gIH07XG5cbiAgLy8gV2l0aGluIHRoZSBib2R5IG9mIGFueSBhc3luYyBmdW5jdGlvbiwgYGF3YWl0IHhgIGlzIHRyYW5zZm9ybWVkIHRvXG4gIC8vIGB5aWVsZCByZWdlbmVyYXRvclJ1bnRpbWUuYXdyYXAoeClgLCBzbyB0aGF0IHRoZSBydW50aW1lIGNhbiB0ZXN0XG4gIC8vIGBoYXNPd24uY2FsbCh2YWx1ZSwgXCJfX2F3YWl0XCIpYCB0byBkZXRlcm1pbmUgaWYgdGhlIHlpZWxkZWQgdmFsdWUgaXNcbiAgLy8gbWVhbnQgdG8gYmUgYXdhaXRlZC5cbiAgcnVudGltZS5hd3JhcCA9IGZ1bmN0aW9uKGFyZykge1xuICAgIHJldHVybiB7IF9fYXdhaXQ6IGFyZyB9O1xuICB9O1xuXG4gIGZ1bmN0aW9uIEFzeW5jSXRlcmF0b3IoZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gaW52b2tlKG1ldGhvZCwgYXJnLCByZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChnZW5lcmF0b3JbbWV0aG9kXSwgZ2VuZXJhdG9yLCBhcmcpO1xuICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgcmVqZWN0KHJlY29yZC5hcmcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHJlY29yZC5hcmc7XG4gICAgICAgIHZhciB2YWx1ZSA9IHJlc3VsdC52YWx1ZTtcbiAgICAgICAgaWYgKHZhbHVlICYmXG4gICAgICAgICAgICB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgICAgIGhhc093bi5jYWxsKHZhbHVlLCBcIl9fYXdhaXRcIikpIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHZhbHVlLl9fYXdhaXQpLnRoZW4oZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgICAgIGludm9rZShcIm5leHRcIiwgdmFsdWUsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgfSwgZnVuY3Rpb24oZXJyKSB7XG4gICAgICAgICAgICBpbnZva2UoXCJ0aHJvd1wiLCBlcnIsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHZhbHVlKS50aGVuKGZ1bmN0aW9uKHVud3JhcHBlZCkge1xuICAgICAgICAgIC8vIFdoZW4gYSB5aWVsZGVkIFByb21pc2UgaXMgcmVzb2x2ZWQsIGl0cyBmaW5hbCB2YWx1ZSBiZWNvbWVzXG4gICAgICAgICAgLy8gdGhlIC52YWx1ZSBvZiB0aGUgUHJvbWlzZTx7dmFsdWUsZG9uZX0+IHJlc3VsdCBmb3IgdGhlXG4gICAgICAgICAgLy8gY3VycmVudCBpdGVyYXRpb24uIElmIHRoZSBQcm9taXNlIGlzIHJlamVjdGVkLCBob3dldmVyLCB0aGVcbiAgICAgICAgICAvLyByZXN1bHQgZm9yIHRoaXMgaXRlcmF0aW9uIHdpbGwgYmUgcmVqZWN0ZWQgd2l0aCB0aGUgc2FtZVxuICAgICAgICAgIC8vIHJlYXNvbi4gTm90ZSB0aGF0IHJlamVjdGlvbnMgb2YgeWllbGRlZCBQcm9taXNlcyBhcmUgbm90XG4gICAgICAgICAgLy8gdGhyb3duIGJhY2sgaW50byB0aGUgZ2VuZXJhdG9yIGZ1bmN0aW9uLCBhcyBpcyB0aGUgY2FzZVxuICAgICAgICAgIC8vIHdoZW4gYW4gYXdhaXRlZCBQcm9taXNlIGlzIHJlamVjdGVkLiBUaGlzIGRpZmZlcmVuY2UgaW5cbiAgICAgICAgICAvLyBiZWhhdmlvciBiZXR3ZWVuIHlpZWxkIGFuZCBhd2FpdCBpcyBpbXBvcnRhbnQsIGJlY2F1c2UgaXRcbiAgICAgICAgICAvLyBhbGxvd3MgdGhlIGNvbnN1bWVyIHRvIGRlY2lkZSB3aGF0IHRvIGRvIHdpdGggdGhlIHlpZWxkZWRcbiAgICAgICAgICAvLyByZWplY3Rpb24gKHN3YWxsb3cgaXQgYW5kIGNvbnRpbnVlLCBtYW51YWxseSAudGhyb3cgaXQgYmFja1xuICAgICAgICAgIC8vIGludG8gdGhlIGdlbmVyYXRvciwgYWJhbmRvbiBpdGVyYXRpb24sIHdoYXRldmVyKS4gV2l0aFxuICAgICAgICAgIC8vIGF3YWl0LCBieSBjb250cmFzdCwgdGhlcmUgaXMgbm8gb3Bwb3J0dW5pdHkgdG8gZXhhbWluZSB0aGVcbiAgICAgICAgICAvLyByZWplY3Rpb24gcmVhc29uIG91dHNpZGUgdGhlIGdlbmVyYXRvciBmdW5jdGlvbiwgc28gdGhlXG4gICAgICAgICAgLy8gb25seSBvcHRpb24gaXMgdG8gdGhyb3cgaXQgZnJvbSB0aGUgYXdhaXQgZXhwcmVzc2lvbiwgYW5kXG4gICAgICAgICAgLy8gbGV0IHRoZSBnZW5lcmF0b3IgZnVuY3Rpb24gaGFuZGxlIHRoZSBleGNlcHRpb24uXG4gICAgICAgICAgcmVzdWx0LnZhbHVlID0gdW53cmFwcGVkO1xuICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgfSwgcmVqZWN0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGdsb2JhbC5wcm9jZXNzID09PSBcIm9iamVjdFwiICYmIGdsb2JhbC5wcm9jZXNzLmRvbWFpbikge1xuICAgICAgaW52b2tlID0gZ2xvYmFsLnByb2Nlc3MuZG9tYWluLmJpbmQoaW52b2tlKTtcbiAgICB9XG5cbiAgICB2YXIgcHJldmlvdXNQcm9taXNlO1xuXG4gICAgZnVuY3Rpb24gZW5xdWV1ZShtZXRob2QsIGFyZykge1xuICAgICAgZnVuY3Rpb24gY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICBpbnZva2UobWV0aG9kLCBhcmcsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcHJldmlvdXNQcm9taXNlID1cbiAgICAgICAgLy8gSWYgZW5xdWV1ZSBoYXMgYmVlbiBjYWxsZWQgYmVmb3JlLCB0aGVuIHdlIHdhbnQgdG8gd2FpdCB1bnRpbFxuICAgICAgICAvLyBhbGwgcHJldmlvdXMgUHJvbWlzZXMgaGF2ZSBiZWVuIHJlc29sdmVkIGJlZm9yZSBjYWxsaW5nIGludm9rZSxcbiAgICAgICAgLy8gc28gdGhhdCByZXN1bHRzIGFyZSBhbHdheXMgZGVsaXZlcmVkIGluIHRoZSBjb3JyZWN0IG9yZGVyLiBJZlxuICAgICAgICAvLyBlbnF1ZXVlIGhhcyBub3QgYmVlbiBjYWxsZWQgYmVmb3JlLCB0aGVuIGl0IGlzIGltcG9ydGFudCB0b1xuICAgICAgICAvLyBjYWxsIGludm9rZSBpbW1lZGlhdGVseSwgd2l0aG91dCB3YWl0aW5nIG9uIGEgY2FsbGJhY2sgdG8gZmlyZSxcbiAgICAgICAgLy8gc28gdGhhdCB0aGUgYXN5bmMgZ2VuZXJhdG9yIGZ1bmN0aW9uIGhhcyB0aGUgb3Bwb3J0dW5pdHkgdG8gZG9cbiAgICAgICAgLy8gYW55IG5lY2Vzc2FyeSBzZXR1cCBpbiBhIHByZWRpY3RhYmxlIHdheS4gVGhpcyBwcmVkaWN0YWJpbGl0eVxuICAgICAgICAvLyBpcyB3aHkgdGhlIFByb21pc2UgY29uc3RydWN0b3Igc3luY2hyb25vdXNseSBpbnZva2VzIGl0c1xuICAgICAgICAvLyBleGVjdXRvciBjYWxsYmFjaywgYW5kIHdoeSBhc3luYyBmdW5jdGlvbnMgc3luY2hyb25vdXNseVxuICAgICAgICAvLyBleGVjdXRlIGNvZGUgYmVmb3JlIHRoZSBmaXJzdCBhd2FpdC4gU2luY2Ugd2UgaW1wbGVtZW50IHNpbXBsZVxuICAgICAgICAvLyBhc3luYyBmdW5jdGlvbnMgaW4gdGVybXMgb2YgYXN5bmMgZ2VuZXJhdG9ycywgaXQgaXMgZXNwZWNpYWxseVxuICAgICAgICAvLyBpbXBvcnRhbnQgdG8gZ2V0IHRoaXMgcmlnaHQsIGV2ZW4gdGhvdWdoIGl0IHJlcXVpcmVzIGNhcmUuXG4gICAgICAgIHByZXZpb3VzUHJvbWlzZSA/IHByZXZpb3VzUHJvbWlzZS50aGVuKFxuICAgICAgICAgIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnLFxuICAgICAgICAgIC8vIEF2b2lkIHByb3BhZ2F0aW5nIGZhaWx1cmVzIHRvIFByb21pc2VzIHJldHVybmVkIGJ5IGxhdGVyXG4gICAgICAgICAgLy8gaW52b2NhdGlvbnMgb2YgdGhlIGl0ZXJhdG9yLlxuICAgICAgICAgIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnXG4gICAgICAgICkgOiBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZygpO1xuICAgIH1cblxuICAgIC8vIERlZmluZSB0aGUgdW5pZmllZCBoZWxwZXIgbWV0aG9kIHRoYXQgaXMgdXNlZCB0byBpbXBsZW1lbnQgLm5leHQsXG4gICAgLy8gLnRocm93LCBhbmQgLnJldHVybiAoc2VlIGRlZmluZUl0ZXJhdG9yTWV0aG9kcykuXG4gICAgdGhpcy5faW52b2tlID0gZW5xdWV1ZTtcbiAgfVxuXG4gIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhBc3luY0l0ZXJhdG9yLnByb3RvdHlwZSk7XG4gIEFzeW5jSXRlcmF0b3IucHJvdG90eXBlW2FzeW5jSXRlcmF0b3JTeW1ib2xdID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICBydW50aW1lLkFzeW5jSXRlcmF0b3IgPSBBc3luY0l0ZXJhdG9yO1xuXG4gIC8vIE5vdGUgdGhhdCBzaW1wbGUgYXN5bmMgZnVuY3Rpb25zIGFyZSBpbXBsZW1lbnRlZCBvbiB0b3Agb2ZcbiAgLy8gQXN5bmNJdGVyYXRvciBvYmplY3RzOyB0aGV5IGp1c3QgcmV0dXJuIGEgUHJvbWlzZSBmb3IgdGhlIHZhbHVlIG9mXG4gIC8vIHRoZSBmaW5hbCByZXN1bHQgcHJvZHVjZWQgYnkgdGhlIGl0ZXJhdG9yLlxuICBydW50aW1lLmFzeW5jID0gZnVuY3Rpb24oaW5uZXJGbiwgb3V0ZXJGbiwgc2VsZiwgdHJ5TG9jc0xpc3QpIHtcbiAgICB2YXIgaXRlciA9IG5ldyBBc3luY0l0ZXJhdG9yKFxuICAgICAgd3JhcChpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdClcbiAgICApO1xuXG4gICAgcmV0dXJuIHJ1bnRpbWUuaXNHZW5lcmF0b3JGdW5jdGlvbihvdXRlckZuKVxuICAgICAgPyBpdGVyIC8vIElmIG91dGVyRm4gaXMgYSBnZW5lcmF0b3IsIHJldHVybiB0aGUgZnVsbCBpdGVyYXRvci5cbiAgICAgIDogaXRlci5uZXh0KCkudGhlbihmdW5jdGlvbihyZXN1bHQpIHtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0LmRvbmUgPyByZXN1bHQudmFsdWUgOiBpdGVyLm5leHQoKTtcbiAgICAgICAgfSk7XG4gIH07XG5cbiAgZnVuY3Rpb24gbWFrZUludm9rZU1ldGhvZChpbm5lckZuLCBzZWxmLCBjb250ZXh0KSB7XG4gICAgdmFyIHN0YXRlID0gR2VuU3RhdGVTdXNwZW5kZWRTdGFydDtcblxuICAgIHJldHVybiBmdW5jdGlvbiBpbnZva2UobWV0aG9kLCBhcmcpIHtcbiAgICAgIGlmIChzdGF0ZSA9PT0gR2VuU3RhdGVFeGVjdXRpbmcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgcnVubmluZ1wiKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHN0YXRlID09PSBHZW5TdGF0ZUNvbXBsZXRlZCkge1xuICAgICAgICBpZiAobWV0aG9kID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICB0aHJvdyBhcmc7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBCZSBmb3JnaXZpbmcsIHBlciAyNS4zLjMuMy4zIG9mIHRoZSBzcGVjOlxuICAgICAgICAvLyBodHRwczovL3Blb3BsZS5tb3ppbGxhLm9yZy9+am9yZW5kb3JmZi9lczYtZHJhZnQuaHRtbCNzZWMtZ2VuZXJhdG9ycmVzdW1lXG4gICAgICAgIHJldHVybiBkb25lUmVzdWx0KCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnRleHQubWV0aG9kID0gbWV0aG9kO1xuICAgICAgY29udGV4dC5hcmcgPSBhcmc7XG5cbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIHZhciBkZWxlZ2F0ZSA9IGNvbnRleHQuZGVsZWdhdGU7XG4gICAgICAgIGlmIChkZWxlZ2F0ZSkge1xuICAgICAgICAgIHZhciBkZWxlZ2F0ZVJlc3VsdCA9IG1heWJlSW52b2tlRGVsZWdhdGUoZGVsZWdhdGUsIGNvbnRleHQpO1xuICAgICAgICAgIGlmIChkZWxlZ2F0ZVJlc3VsdCkge1xuICAgICAgICAgICAgaWYgKGRlbGVnYXRlUmVzdWx0ID09PSBDb250aW51ZVNlbnRpbmVsKSBjb250aW51ZTtcbiAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZVJlc3VsdDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29udGV4dC5tZXRob2QgPT09IFwibmV4dFwiKSB7XG4gICAgICAgICAgLy8gU2V0dGluZyBjb250ZXh0Ll9zZW50IGZvciBsZWdhY3kgc3VwcG9ydCBvZiBCYWJlbCdzXG4gICAgICAgICAgLy8gZnVuY3Rpb24uc2VudCBpbXBsZW1lbnRhdGlvbi5cbiAgICAgICAgICBjb250ZXh0LnNlbnQgPSBjb250ZXh0Ll9zZW50ID0gY29udGV4dC5hcmc7XG5cbiAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgaWYgKHN0YXRlID09PSBHZW5TdGF0ZVN1c3BlbmRlZFN0YXJ0KSB7XG4gICAgICAgICAgICBzdGF0ZSA9IEdlblN0YXRlQ29tcGxldGVkO1xuICAgICAgICAgICAgdGhyb3cgY29udGV4dC5hcmc7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29udGV4dC5kaXNwYXRjaEV4Y2VwdGlvbihjb250ZXh0LmFyZyk7XG5cbiAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJyZXR1cm5cIikge1xuICAgICAgICAgIGNvbnRleHQuYWJydXB0KFwicmV0dXJuXCIsIGNvbnRleHQuYXJnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN0YXRlID0gR2VuU3RhdGVFeGVjdXRpbmc7XG5cbiAgICAgICAgdmFyIHJlY29yZCA9IHRyeUNhdGNoKGlubmVyRm4sIHNlbGYsIGNvbnRleHQpO1xuICAgICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwibm9ybWFsXCIpIHtcbiAgICAgICAgICAvLyBJZiBhbiBleGNlcHRpb24gaXMgdGhyb3duIGZyb20gaW5uZXJGbiwgd2UgbGVhdmUgc3RhdGUgPT09XG4gICAgICAgICAgLy8gR2VuU3RhdGVFeGVjdXRpbmcgYW5kIGxvb3AgYmFjayBmb3IgYW5vdGhlciBpbnZvY2F0aW9uLlxuICAgICAgICAgIHN0YXRlID0gY29udGV4dC5kb25lXG4gICAgICAgICAgICA/IEdlblN0YXRlQ29tcGxldGVkXG4gICAgICAgICAgICA6IEdlblN0YXRlU3VzcGVuZGVkWWllbGQ7XG5cbiAgICAgICAgICBpZiAocmVjb3JkLmFyZyA9PT0gQ29udGludWVTZW50aW5lbCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHZhbHVlOiByZWNvcmQuYXJnLFxuICAgICAgICAgICAgZG9uZTogY29udGV4dC5kb25lXG4gICAgICAgICAgfTtcblxuICAgICAgICB9IGVsc2UgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICBzdGF0ZSA9IEdlblN0YXRlQ29tcGxldGVkO1xuICAgICAgICAgIC8vIERpc3BhdGNoIHRoZSBleGNlcHRpb24gYnkgbG9vcGluZyBiYWNrIGFyb3VuZCB0byB0aGVcbiAgICAgICAgICAvLyBjb250ZXh0LmRpc3BhdGNoRXhjZXB0aW9uKGNvbnRleHQuYXJnKSBjYWxsIGFib3ZlLlxuICAgICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiO1xuICAgICAgICAgIGNvbnRleHQuYXJnID0gcmVjb3JkLmFyZztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICAvLyBDYWxsIGRlbGVnYXRlLml0ZXJhdG9yW2NvbnRleHQubWV0aG9kXShjb250ZXh0LmFyZykgYW5kIGhhbmRsZSB0aGVcbiAgLy8gcmVzdWx0LCBlaXRoZXIgYnkgcmV0dXJuaW5nIGEgeyB2YWx1ZSwgZG9uZSB9IHJlc3VsdCBmcm9tIHRoZVxuICAvLyBkZWxlZ2F0ZSBpdGVyYXRvciwgb3IgYnkgbW9kaWZ5aW5nIGNvbnRleHQubWV0aG9kIGFuZCBjb250ZXh0LmFyZyxcbiAgLy8gc2V0dGluZyBjb250ZXh0LmRlbGVnYXRlIHRvIG51bGwsIGFuZCByZXR1cm5pbmcgdGhlIENvbnRpbnVlU2VudGluZWwuXG4gIGZ1bmN0aW9uIG1heWJlSW52b2tlRGVsZWdhdGUoZGVsZWdhdGUsIGNvbnRleHQpIHtcbiAgICB2YXIgbWV0aG9kID0gZGVsZWdhdGUuaXRlcmF0b3JbY29udGV4dC5tZXRob2RdO1xuICAgIGlmIChtZXRob2QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gQSAudGhyb3cgb3IgLnJldHVybiB3aGVuIHRoZSBkZWxlZ2F0ZSBpdGVyYXRvciBoYXMgbm8gLnRocm93XG4gICAgICAvLyBtZXRob2QgYWx3YXlzIHRlcm1pbmF0ZXMgdGhlIHlpZWxkKiBsb29wLlxuICAgICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG5cbiAgICAgIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIGlmIChkZWxlZ2F0ZS5pdGVyYXRvci5yZXR1cm4pIHtcbiAgICAgICAgICAvLyBJZiB0aGUgZGVsZWdhdGUgaXRlcmF0b3IgaGFzIGEgcmV0dXJuIG1ldGhvZCwgZ2l2ZSBpdCBhXG4gICAgICAgICAgLy8gY2hhbmNlIHRvIGNsZWFuIHVwLlxuICAgICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJyZXR1cm5cIjtcbiAgICAgICAgICBjb250ZXh0LmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICBtYXliZUludm9rZURlbGVnYXRlKGRlbGVnYXRlLCBjb250ZXh0KTtcblxuICAgICAgICAgIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgICAvLyBJZiBtYXliZUludm9rZURlbGVnYXRlKGNvbnRleHQpIGNoYW5nZWQgY29udGV4dC5tZXRob2QgZnJvbVxuICAgICAgICAgICAgLy8gXCJyZXR1cm5cIiB0byBcInRocm93XCIsIGxldCB0aGF0IG92ZXJyaWRlIHRoZSBUeXBlRXJyb3IgYmVsb3cuXG4gICAgICAgICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIjtcbiAgICAgICAgY29udGV4dC5hcmcgPSBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgIFwiVGhlIGl0ZXJhdG9yIGRvZXMgbm90IHByb3ZpZGUgYSAndGhyb3cnIG1ldGhvZFwiKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuXG4gICAgdmFyIHJlY29yZCA9IHRyeUNhdGNoKG1ldGhvZCwgZGVsZWdhdGUuaXRlcmF0b3IsIGNvbnRleHQuYXJnKTtcblxuICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICBjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIjtcbiAgICAgIGNvbnRleHQuYXJnID0gcmVjb3JkLmFyZztcbiAgICAgIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsO1xuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuXG4gICAgdmFyIGluZm8gPSByZWNvcmQuYXJnO1xuXG4gICAgaWYgKCEgaW5mbykge1xuICAgICAgY29udGV4dC5tZXRob2QgPSBcInRocm93XCI7XG4gICAgICBjb250ZXh0LmFyZyA9IG5ldyBUeXBlRXJyb3IoXCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdFwiKTtcbiAgICAgIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsO1xuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuXG4gICAgaWYgKGluZm8uZG9uZSkge1xuICAgICAgLy8gQXNzaWduIHRoZSByZXN1bHQgb2YgdGhlIGZpbmlzaGVkIGRlbGVnYXRlIHRvIHRoZSB0ZW1wb3JhcnlcbiAgICAgIC8vIHZhcmlhYmxlIHNwZWNpZmllZCBieSBkZWxlZ2F0ZS5yZXN1bHROYW1lIChzZWUgZGVsZWdhdGVZaWVsZCkuXG4gICAgICBjb250ZXh0W2RlbGVnYXRlLnJlc3VsdE5hbWVdID0gaW5mby52YWx1ZTtcblxuICAgICAgLy8gUmVzdW1lIGV4ZWN1dGlvbiBhdCB0aGUgZGVzaXJlZCBsb2NhdGlvbiAoc2VlIGRlbGVnYXRlWWllbGQpLlxuICAgICAgY29udGV4dC5uZXh0ID0gZGVsZWdhdGUubmV4dExvYztcblxuICAgICAgLy8gSWYgY29udGV4dC5tZXRob2Qgd2FzIFwidGhyb3dcIiBidXQgdGhlIGRlbGVnYXRlIGhhbmRsZWQgdGhlXG4gICAgICAvLyBleGNlcHRpb24sIGxldCB0aGUgb3V0ZXIgZ2VuZXJhdG9yIHByb2NlZWQgbm9ybWFsbHkuIElmXG4gICAgICAvLyBjb250ZXh0Lm1ldGhvZCB3YXMgXCJuZXh0XCIsIGZvcmdldCBjb250ZXh0LmFyZyBzaW5jZSBpdCBoYXMgYmVlblxuICAgICAgLy8gXCJjb25zdW1lZFwiIGJ5IHRoZSBkZWxlZ2F0ZSBpdGVyYXRvci4gSWYgY29udGV4dC5tZXRob2Qgd2FzXG4gICAgICAvLyBcInJldHVyblwiLCBhbGxvdyB0aGUgb3JpZ2luYWwgLnJldHVybiBjYWxsIHRvIGNvbnRpbnVlIGluIHRoZVxuICAgICAgLy8gb3V0ZXIgZ2VuZXJhdG9yLlxuICAgICAgaWYgKGNvbnRleHQubWV0aG9kICE9PSBcInJldHVyblwiKSB7XG4gICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJuZXh0XCI7XG4gICAgICAgIGNvbnRleHQuYXJnID0gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFJlLXlpZWxkIHRoZSByZXN1bHQgcmV0dXJuZWQgYnkgdGhlIGRlbGVnYXRlIG1ldGhvZC5cbiAgICAgIHJldHVybiBpbmZvO1xuICAgIH1cblxuICAgIC8vIFRoZSBkZWxlZ2F0ZSBpdGVyYXRvciBpcyBmaW5pc2hlZCwgc28gZm9yZ2V0IGl0IGFuZCBjb250aW51ZSB3aXRoXG4gICAgLy8gdGhlIG91dGVyIGdlbmVyYXRvci5cbiAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcbiAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgfVxuXG4gIC8vIERlZmluZSBHZW5lcmF0b3IucHJvdG90eXBlLntuZXh0LHRocm93LHJldHVybn0gaW4gdGVybXMgb2YgdGhlXG4gIC8vIHVuaWZpZWQgLl9pbnZva2UgaGVscGVyIG1ldGhvZC5cbiAgZGVmaW5lSXRlcmF0b3JNZXRob2RzKEdwKTtcblxuICBHcFt0b1N0cmluZ1RhZ1N5bWJvbF0gPSBcIkdlbmVyYXRvclwiO1xuXG4gIC8vIEEgR2VuZXJhdG9yIHNob3VsZCBhbHdheXMgcmV0dXJuIGl0c2VsZiBhcyB0aGUgaXRlcmF0b3Igb2JqZWN0IHdoZW4gdGhlXG4gIC8vIEBAaXRlcmF0b3IgZnVuY3Rpb24gaXMgY2FsbGVkIG9uIGl0LiBTb21lIGJyb3dzZXJzJyBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlXG4gIC8vIGl0ZXJhdG9yIHByb3RvdHlwZSBjaGFpbiBpbmNvcnJlY3RseSBpbXBsZW1lbnQgdGhpcywgY2F1c2luZyB0aGUgR2VuZXJhdG9yXG4gIC8vIG9iamVjdCB0byBub3QgYmUgcmV0dXJuZWQgZnJvbSB0aGlzIGNhbGwuIFRoaXMgZW5zdXJlcyB0aGF0IGRvZXNuJ3QgaGFwcGVuLlxuICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlZ2VuZXJhdG9yL2lzc3Vlcy8yNzQgZm9yIG1vcmUgZGV0YWlscy5cbiAgR3BbaXRlcmF0b3JTeW1ib2xdID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgR3AudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gXCJbb2JqZWN0IEdlbmVyYXRvcl1cIjtcbiAgfTtcblxuICBmdW5jdGlvbiBwdXNoVHJ5RW50cnkobG9jcykge1xuICAgIHZhciBlbnRyeSA9IHsgdHJ5TG9jOiBsb2NzWzBdIH07XG5cbiAgICBpZiAoMSBpbiBsb2NzKSB7XG4gICAgICBlbnRyeS5jYXRjaExvYyA9IGxvY3NbMV07XG4gICAgfVxuXG4gICAgaWYgKDIgaW4gbG9jcykge1xuICAgICAgZW50cnkuZmluYWxseUxvYyA9IGxvY3NbMl07XG4gICAgICBlbnRyeS5hZnRlckxvYyA9IGxvY3NbM107XG4gICAgfVxuXG4gICAgdGhpcy50cnlFbnRyaWVzLnB1c2goZW50cnkpO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVzZXRUcnlFbnRyeShlbnRyeSkge1xuICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uIHx8IHt9O1xuICAgIHJlY29yZC50eXBlID0gXCJub3JtYWxcIjtcbiAgICBkZWxldGUgcmVjb3JkLmFyZztcbiAgICBlbnRyeS5jb21wbGV0aW9uID0gcmVjb3JkO1xuICB9XG5cbiAgZnVuY3Rpb24gQ29udGV4dCh0cnlMb2NzTGlzdCkge1xuICAgIC8vIFRoZSByb290IGVudHJ5IG9iamVjdCAoZWZmZWN0aXZlbHkgYSB0cnkgc3RhdGVtZW50IHdpdGhvdXQgYSBjYXRjaFxuICAgIC8vIG9yIGEgZmluYWxseSBibG9jaykgZ2l2ZXMgdXMgYSBwbGFjZSB0byBzdG9yZSB2YWx1ZXMgdGhyb3duIGZyb21cbiAgICAvLyBsb2NhdGlvbnMgd2hlcmUgdGhlcmUgaXMgbm8gZW5jbG9zaW5nIHRyeSBzdGF0ZW1lbnQuXG4gICAgdGhpcy50cnlFbnRyaWVzID0gW3sgdHJ5TG9jOiBcInJvb3RcIiB9XTtcbiAgICB0cnlMb2NzTGlzdC5mb3JFYWNoKHB1c2hUcnlFbnRyeSwgdGhpcyk7XG4gICAgdGhpcy5yZXNldCh0cnVlKTtcbiAgfVxuXG4gIHJ1bnRpbWUua2V5cyA9IGZ1bmN0aW9uKG9iamVjdCkge1xuICAgIHZhciBrZXlzID0gW107XG4gICAgZm9yICh2YXIga2V5IGluIG9iamVjdCkge1xuICAgICAga2V5cy5wdXNoKGtleSk7XG4gICAgfVxuICAgIGtleXMucmV2ZXJzZSgpO1xuXG4gICAgLy8gUmF0aGVyIHRoYW4gcmV0dXJuaW5nIGFuIG9iamVjdCB3aXRoIGEgbmV4dCBtZXRob2QsIHdlIGtlZXBcbiAgICAvLyB0aGluZ3Mgc2ltcGxlIGFuZCByZXR1cm4gdGhlIG5leHQgZnVuY3Rpb24gaXRzZWxmLlxuICAgIHJldHVybiBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgd2hpbGUgKGtleXMubGVuZ3RoKSB7XG4gICAgICAgIHZhciBrZXkgPSBrZXlzLnBvcCgpO1xuICAgICAgICBpZiAoa2V5IGluIG9iamVjdCkge1xuICAgICAgICAgIG5leHQudmFsdWUgPSBrZXk7XG4gICAgICAgICAgbmV4dC5kb25lID0gZmFsc2U7XG4gICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gVG8gYXZvaWQgY3JlYXRpbmcgYW4gYWRkaXRpb25hbCBvYmplY3QsIHdlIGp1c3QgaGFuZyB0aGUgLnZhbHVlXG4gICAgICAvLyBhbmQgLmRvbmUgcHJvcGVydGllcyBvZmYgdGhlIG5leHQgZnVuY3Rpb24gb2JqZWN0IGl0c2VsZi4gVGhpc1xuICAgICAgLy8gYWxzbyBlbnN1cmVzIHRoYXQgdGhlIG1pbmlmaWVyIHdpbGwgbm90IGFub255bWl6ZSB0aGUgZnVuY3Rpb24uXG4gICAgICBuZXh0LmRvbmUgPSB0cnVlO1xuICAgICAgcmV0dXJuIG5leHQ7XG4gICAgfTtcbiAgfTtcblxuICBmdW5jdGlvbiB2YWx1ZXMoaXRlcmFibGUpIHtcbiAgICBpZiAoaXRlcmFibGUpIHtcbiAgICAgIHZhciBpdGVyYXRvck1ldGhvZCA9IGl0ZXJhYmxlW2l0ZXJhdG9yU3ltYm9sXTtcbiAgICAgIGlmIChpdGVyYXRvck1ldGhvZCkge1xuICAgICAgICByZXR1cm4gaXRlcmF0b3JNZXRob2QuY2FsbChpdGVyYWJsZSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgaXRlcmFibGUubmV4dCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHJldHVybiBpdGVyYWJsZTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFpc05hTihpdGVyYWJsZS5sZW5ndGgpKSB7XG4gICAgICAgIHZhciBpID0gLTEsIG5leHQgPSBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgIHdoaWxlICgrK2kgPCBpdGVyYWJsZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmIChoYXNPd24uY2FsbChpdGVyYWJsZSwgaSkpIHtcbiAgICAgICAgICAgICAgbmV4dC52YWx1ZSA9IGl0ZXJhYmxlW2ldO1xuICAgICAgICAgICAgICBuZXh0LmRvbmUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbmV4dC52YWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICBuZXh0LmRvbmUgPSB0cnVlO1xuXG4gICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIG5leHQubmV4dCA9IG5leHQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmV0dXJuIGFuIGl0ZXJhdG9yIHdpdGggbm8gdmFsdWVzLlxuICAgIHJldHVybiB7IG5leHQ6IGRvbmVSZXN1bHQgfTtcbiAgfVxuICBydW50aW1lLnZhbHVlcyA9IHZhbHVlcztcblxuICBmdW5jdGlvbiBkb25lUmVzdWx0KCkge1xuICAgIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfTtcbiAgfVxuXG4gIENvbnRleHQucHJvdG90eXBlID0ge1xuICAgIGNvbnN0cnVjdG9yOiBDb250ZXh0LFxuXG4gICAgcmVzZXQ6IGZ1bmN0aW9uKHNraXBUZW1wUmVzZXQpIHtcbiAgICAgIHRoaXMucHJldiA9IDA7XG4gICAgICB0aGlzLm5leHQgPSAwO1xuICAgICAgLy8gUmVzZXR0aW5nIGNvbnRleHQuX3NlbnQgZm9yIGxlZ2FjeSBzdXBwb3J0IG9mIEJhYmVsJ3NcbiAgICAgIC8vIGZ1bmN0aW9uLnNlbnQgaW1wbGVtZW50YXRpb24uXG4gICAgICB0aGlzLnNlbnQgPSB0aGlzLl9zZW50ID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5kb25lID0gZmFsc2U7XG4gICAgICB0aGlzLmRlbGVnYXRlID0gbnVsbDtcblxuICAgICAgdGhpcy5tZXRob2QgPSBcIm5leHRcIjtcbiAgICAgIHRoaXMuYXJnID0gdW5kZWZpbmVkO1xuXG4gICAgICB0aGlzLnRyeUVudHJpZXMuZm9yRWFjaChyZXNldFRyeUVudHJ5KTtcblxuICAgICAgaWYgKCFza2lwVGVtcFJlc2V0KSB7XG4gICAgICAgIGZvciAodmFyIG5hbWUgaW4gdGhpcykge1xuICAgICAgICAgIC8vIE5vdCBzdXJlIGFib3V0IHRoZSBvcHRpbWFsIG9yZGVyIG9mIHRoZXNlIGNvbmRpdGlvbnM6XG4gICAgICAgICAgaWYgKG5hbWUuY2hhckF0KDApID09PSBcInRcIiAmJlxuICAgICAgICAgICAgICBoYXNPd24uY2FsbCh0aGlzLCBuYW1lKSAmJlxuICAgICAgICAgICAgICAhaXNOYU4oK25hbWUuc2xpY2UoMSkpKSB7XG4gICAgICAgICAgICB0aGlzW25hbWVdID0gdW5kZWZpbmVkO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzdG9wOiBmdW5jdGlvbigpIHtcbiAgICAgIHRoaXMuZG9uZSA9IHRydWU7XG5cbiAgICAgIHZhciByb290RW50cnkgPSB0aGlzLnRyeUVudHJpZXNbMF07XG4gICAgICB2YXIgcm9vdFJlY29yZCA9IHJvb3RFbnRyeS5jb21wbGV0aW9uO1xuICAgICAgaWYgKHJvb3RSZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIHRocm93IHJvb3RSZWNvcmQuYXJnO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5ydmFsO1xuICAgIH0sXG5cbiAgICBkaXNwYXRjaEV4Y2VwdGlvbjogZnVuY3Rpb24oZXhjZXB0aW9uKSB7XG4gICAgICBpZiAodGhpcy5kb25lKSB7XG4gICAgICAgIHRocm93IGV4Y2VwdGlvbjtcbiAgICAgIH1cblxuICAgICAgdmFyIGNvbnRleHQgPSB0aGlzO1xuICAgICAgZnVuY3Rpb24gaGFuZGxlKGxvYywgY2F1Z2h0KSB7XG4gICAgICAgIHJlY29yZC50eXBlID0gXCJ0aHJvd1wiO1xuICAgICAgICByZWNvcmQuYXJnID0gZXhjZXB0aW9uO1xuICAgICAgICBjb250ZXh0Lm5leHQgPSBsb2M7XG5cbiAgICAgICAgaWYgKGNhdWdodCkge1xuICAgICAgICAgIC8vIElmIHRoZSBkaXNwYXRjaGVkIGV4Y2VwdGlvbiB3YXMgY2F1Z2h0IGJ5IGEgY2F0Y2ggYmxvY2ssXG4gICAgICAgICAgLy8gdGhlbiBsZXQgdGhhdCBjYXRjaCBibG9jayBoYW5kbGUgdGhlIGV4Y2VwdGlvbiBub3JtYWxseS5cbiAgICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgICAgIGNvbnRleHQuYXJnID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICEhIGNhdWdodDtcbiAgICAgIH1cblxuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uO1xuXG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPT09IFwicm9vdFwiKSB7XG4gICAgICAgICAgLy8gRXhjZXB0aW9uIHRocm93biBvdXRzaWRlIG9mIGFueSB0cnkgYmxvY2sgdGhhdCBjb3VsZCBoYW5kbGVcbiAgICAgICAgICAvLyBpdCwgc28gc2V0IHRoZSBjb21wbGV0aW9uIHZhbHVlIG9mIHRoZSBlbnRpcmUgZnVuY3Rpb24gdG9cbiAgICAgICAgICAvLyB0aHJvdyB0aGUgZXhjZXB0aW9uLlxuICAgICAgICAgIHJldHVybiBoYW5kbGUoXCJlbmRcIik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZW50cnkudHJ5TG9jIDw9IHRoaXMucHJldikge1xuICAgICAgICAgIHZhciBoYXNDYXRjaCA9IGhhc093bi5jYWxsKGVudHJ5LCBcImNhdGNoTG9jXCIpO1xuICAgICAgICAgIHZhciBoYXNGaW5hbGx5ID0gaGFzT3duLmNhbGwoZW50cnksIFwiZmluYWxseUxvY1wiKTtcblxuICAgICAgICAgIGlmIChoYXNDYXRjaCAmJiBoYXNGaW5hbGx5KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgZW50cnkuY2F0Y2hMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5jYXRjaExvYywgdHJ1ZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5maW5hbGx5TG9jKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0gZWxzZSBpZiAoaGFzQ2F0Y2gpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBlbnRyeS5jYXRjaExvYykge1xuICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlKGVudHJ5LmNhdGNoTG9jLCB0cnVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0gZWxzZSBpZiAoaGFzRmluYWxseSkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5maW5hbGx5TG9jKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ0cnkgc3RhdGVtZW50IHdpdGhvdXQgY2F0Y2ggb3IgZmluYWxseVwiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYWJydXB0OiBmdW5jdGlvbih0eXBlLCBhcmcpIHtcbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICBpZiAoZW50cnkudHJ5TG9jIDw9IHRoaXMucHJldiAmJlxuICAgICAgICAgICAgaGFzT3duLmNhbGwoZW50cnksIFwiZmluYWxseUxvY1wiKSAmJlxuICAgICAgICAgICAgdGhpcy5wcmV2IDwgZW50cnkuZmluYWxseUxvYykge1xuICAgICAgICAgIHZhciBmaW5hbGx5RW50cnkgPSBlbnRyeTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZmluYWxseUVudHJ5ICYmXG4gICAgICAgICAgKHR5cGUgPT09IFwiYnJlYWtcIiB8fFxuICAgICAgICAgICB0eXBlID09PSBcImNvbnRpbnVlXCIpICYmXG4gICAgICAgICAgZmluYWxseUVudHJ5LnRyeUxvYyA8PSBhcmcgJiZcbiAgICAgICAgICBhcmcgPD0gZmluYWxseUVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgLy8gSWdub3JlIHRoZSBmaW5hbGx5IGVudHJ5IGlmIGNvbnRyb2wgaXMgbm90IGp1bXBpbmcgdG8gYVxuICAgICAgICAvLyBsb2NhdGlvbiBvdXRzaWRlIHRoZSB0cnkvY2F0Y2ggYmxvY2suXG4gICAgICAgIGZpbmFsbHlFbnRyeSA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIHZhciByZWNvcmQgPSBmaW5hbGx5RW50cnkgPyBmaW5hbGx5RW50cnkuY29tcGxldGlvbiA6IHt9O1xuICAgICAgcmVjb3JkLnR5cGUgPSB0eXBlO1xuICAgICAgcmVjb3JkLmFyZyA9IGFyZztcblxuICAgICAgaWYgKGZpbmFsbHlFbnRyeSkge1xuICAgICAgICB0aGlzLm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgICB0aGlzLm5leHQgPSBmaW5hbGx5RW50cnkuZmluYWxseUxvYztcbiAgICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLmNvbXBsZXRlKHJlY29yZCk7XG4gICAgfSxcblxuICAgIGNvbXBsZXRlOiBmdW5jdGlvbihyZWNvcmQsIGFmdGVyTG9jKSB7XG4gICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICB0aHJvdyByZWNvcmQuYXJnO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwiYnJlYWtcIiB8fFxuICAgICAgICAgIHJlY29yZC50eXBlID09PSBcImNvbnRpbnVlXCIpIHtcbiAgICAgICAgdGhpcy5uZXh0ID0gcmVjb3JkLmFyZztcbiAgICAgIH0gZWxzZSBpZiAocmVjb3JkLnR5cGUgPT09IFwicmV0dXJuXCIpIHtcbiAgICAgICAgdGhpcy5ydmFsID0gdGhpcy5hcmcgPSByZWNvcmQuYXJnO1xuICAgICAgICB0aGlzLm1ldGhvZCA9IFwicmV0dXJuXCI7XG4gICAgICAgIHRoaXMubmV4dCA9IFwiZW5kXCI7XG4gICAgICB9IGVsc2UgaWYgKHJlY29yZC50eXBlID09PSBcIm5vcm1hbFwiICYmIGFmdGVyTG9jKSB7XG4gICAgICAgIHRoaXMubmV4dCA9IGFmdGVyTG9jO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICB9LFxuXG4gICAgZmluaXNoOiBmdW5jdGlvbihmaW5hbGx5TG9jKSB7XG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcbiAgICAgICAgaWYgKGVudHJ5LmZpbmFsbHlMb2MgPT09IGZpbmFsbHlMb2MpIHtcbiAgICAgICAgICB0aGlzLmNvbXBsZXRlKGVudHJ5LmNvbXBsZXRpb24sIGVudHJ5LmFmdGVyTG9jKTtcbiAgICAgICAgICByZXNldFRyeUVudHJ5KGVudHJ5KTtcbiAgICAgICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBcImNhdGNoXCI6IGZ1bmN0aW9uKHRyeUxvYykge1xuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPT09IHRyeUxvYykge1xuICAgICAgICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uO1xuICAgICAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgICB2YXIgdGhyb3duID0gcmVjb3JkLmFyZztcbiAgICAgICAgICAgIHJlc2V0VHJ5RW50cnkoZW50cnkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdGhyb3duO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFRoZSBjb250ZXh0LmNhdGNoIG1ldGhvZCBtdXN0IG9ubHkgYmUgY2FsbGVkIHdpdGggYSBsb2NhdGlvblxuICAgICAgLy8gYXJndW1lbnQgdGhhdCBjb3JyZXNwb25kcyB0byBhIGtub3duIGNhdGNoIGJsb2NrLlxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaWxsZWdhbCBjYXRjaCBhdHRlbXB0XCIpO1xuICAgIH0sXG5cbiAgICBkZWxlZ2F0ZVlpZWxkOiBmdW5jdGlvbihpdGVyYWJsZSwgcmVzdWx0TmFtZSwgbmV4dExvYykge1xuICAgICAgdGhpcy5kZWxlZ2F0ZSA9IHtcbiAgICAgICAgaXRlcmF0b3I6IHZhbHVlcyhpdGVyYWJsZSksXG4gICAgICAgIHJlc3VsdE5hbWU6IHJlc3VsdE5hbWUsXG4gICAgICAgIG5leHRMb2M6IG5leHRMb2NcbiAgICAgIH07XG5cbiAgICAgIGlmICh0aGlzLm1ldGhvZCA9PT0gXCJuZXh0XCIpIHtcbiAgICAgICAgLy8gRGVsaWJlcmF0ZWx5IGZvcmdldCB0aGUgbGFzdCBzZW50IHZhbHVlIHNvIHRoYXQgd2UgZG9uJ3RcbiAgICAgICAgLy8gYWNjaWRlbnRhbGx5IHBhc3MgaXQgb24gdG8gdGhlIGRlbGVnYXRlLlxuICAgICAgICB0aGlzLmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuICB9O1xufSkoXG4gIC8vIEFtb25nIHRoZSB2YXJpb3VzIHRyaWNrcyBmb3Igb2J0YWluaW5nIGEgcmVmZXJlbmNlIHRvIHRoZSBnbG9iYWxcbiAgLy8gb2JqZWN0LCB0aGlzIHNlZW1zIHRvIGJlIHRoZSBtb3N0IHJlbGlhYmxlIHRlY2huaXF1ZSB0aGF0IGRvZXMgbm90XG4gIC8vIHVzZSBpbmRpcmVjdCBldmFsICh3aGljaCB2aW9sYXRlcyBDb250ZW50IFNlY3VyaXR5IFBvbGljeSkuXG4gIHR5cGVvZiBnbG9iYWwgPT09IFwib2JqZWN0XCIgPyBnbG9iYWwgOlxuICB0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiID8gd2luZG93IDpcbiAgdHlwZW9mIHNlbGYgPT09IFwib2JqZWN0XCIgPyBzZWxmIDogdGhpc1xuKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///329\n')},function(module,exports,__webpack_require__){eval("__webpack_require__(331);\nmodule.exports = __webpack_require__(18).RegExp.escape;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvZm4vcmVnZXhwL2VzY2FwZS5qcz9mZDVhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLG1CQUFPLENBQUMsR0FBa0M7QUFDMUMsaUJBQWlCLG1CQUFPLENBQUMsRUFBcUIiLCJmaWxlIjoiMzMwLmpzIiwic291cmNlc0NvbnRlbnQiOlsicmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9jb3JlLnJlZ2V4cC5lc2NhcGUnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9fY29yZScpLlJlZ0V4cC5lc2NhcGU7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///330\n")},function(module,exports,__webpack_require__){eval("// https://github.com/benjamingr/RexExp.escape\nvar $export = __webpack_require__(0);\nvar $re = __webpack_require__(332)(/[\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n\n$export($export.S, 'RegExp', { escape: function escape(it) { return $re(it); } });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9jb3JlLnJlZ2V4cC5lc2NhcGUuanM/ZDBjYSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLFVBQVUsbUJBQU8sQ0FBQyxHQUFhLG9CQUFvQjs7QUFFbkQsOEJBQThCLDhCQUE4QixnQkFBZ0IsRUFBRSxFQUFFIiwiZmlsZSI6IjMzMS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9iZW5qYW1pbmdyL1JleEV4cC5lc2NhcGVcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHJlID0gcmVxdWlyZSgnLi9fcmVwbGFjZXInKSgvW1xcXFxeJCorPy4oKXxbXFxde31dL2csICdcXFxcJCYnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWdFeHAnLCB7IGVzY2FwZTogZnVuY3Rpb24gZXNjYXBlKGl0KSB7IHJldHVybiAkcmUoaXQpOyB9IH0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///331\n")},function(module,exports){eval("module.exports = function (regExp, replace) {\n var replacer = replace === Object(replace) ? function (part) {\n return replace[part];\n } : replace;\n return function (it) {\n return String(it).replace(regExp, replacer);\n };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcmVwbGFjZXIuanM/YWJkNyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMzMyLmpzIiwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAocmVnRXhwLCByZXBsYWNlKSB7XG4gIHZhciByZXBsYWNlciA9IHJlcGxhY2UgPT09IE9iamVjdChyZXBsYWNlKSA/IGZ1bmN0aW9uIChwYXJ0KSB7XG4gICAgcmV0dXJuIHJlcGxhY2VbcGFydF07XG4gIH0gOiByZXBsYWNlO1xuICByZXR1cm4gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIFN0cmluZyhpdCkucmVwbGFjZShyZWdFeHAsIHJlcGxhY2VyKTtcbiAgfTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///332\n")},function(module,__webpack_exports__,__webpack_require__){"use strict";eval('// ESM COMPAT FLAG\n__webpack_require__.r(__webpack_exports__);\n\n// CONCATENATED MODULE: ./src/core/Deferred.js\nfunction _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }\n\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\n\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."); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction _wrapNativeSuper(Class) { var _cache = typeof Map === "function" ? new Map() : undefined; _wrapNativeSuper = function _wrapNativeSuper(Class) { if (Class === null || !_isNativeFunction(Class)) return Class; if (typeof Class !== "function") { throw new TypeError("Super expression must either be null or a function"); } if (typeof _cache !== "undefined") { if (_cache.has(Class)) return _cache.get(Class); _cache.set(Class, Wrapper); } function Wrapper() { return _construct(Class, arguments, _getPrototypeOf(this).constructor); } Wrapper.prototype = Object.create(Class.prototype, { constructor: { value: Wrapper, enumerable: false, writable: true, configurable: true } }); return _setPrototypeOf(Wrapper, Class); }; return _wrapNativeSuper(Class); }\n\nfunction _construct(Parent, args, Class) { if (_isNativeReflectConstruct()) { _construct = Reflect.construct; } else { _construct = function _construct(Parent, args, Class) { var a = [null]; a.push.apply(a, args); var Constructor = Function.bind.apply(Parent, a); var instance = new Constructor(); if (Class) _setPrototypeOf(instance, Class.prototype); return instance; }; } return _construct.apply(null, arguments); }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _isNativeFunction(fn) { return Function.toString.call(fn).indexOf("[native code]") !== -1; }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/**\r\n * The built-in class for asynchronous Promises.\r\n * @external Promise\r\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise\r\n */\n\n/**\r\n * A Promise object that can be resolved, rejected or canceled at any time by the\r\n * user.\r\n *\r\n * @extends external:Promise\r\n */\nvar Deferred = /*#__PURE__*/function (_Promise) {\n _inherits(Deferred, _Promise);\n\n var _super = _createSuper(Deferred);\n\n /**\r\n * @constructor\r\n *\r\n * @param {Function} [executable=() => {}] - The function to be executed by the\r\n * constructor, during the process of constructing the promise. The signature\r\n * of this is expected to be: executable( resolutionFunc, rejectionFunc, cancellationFunc ).\r\n * @param {Function=} onResolve - Optional function to execute once the promise\r\n * is resolved.\r\n * @param {Function=} onReject - Optional function to execute once the promise\r\n * is rejected.\r\n * @param {Function=} onCancel - Optional function to execute if the user cancels\r\n * the promise. Canceling results in the promise having a status of \'resolved\'.\r\n */\n function Deferred() {\n var _this;\n\n var executable = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : function () {};\n var onResolve = arguments.length > 1 ? arguments[1] : undefined;\n var onReject = arguments.length > 2 ? arguments[2] : undefined;\n var onCancel = arguments.length > 3 ? arguments[3] : undefined;\n\n _classCallCheck(this, Deferred);\n\n if (typeof executable !== \'function\') {\n throw new Error("Cannot create new Deferred. Executable must be a function.");\n }\n\n if (typeof onResolve !== \'undefined\' && typeof onResolve !== \'function\') {\n throw new Error("Cannot create new Deferred. OnResolve must be a function.");\n }\n\n if (typeof onReject !== \'undefined\' && typeof onReject !== \'function\') {\n throw new Error("Cannot create new Deferred. OnReject must be a function.");\n }\n\n if (typeof onCancel !== \'undefined\' && typeof onCancel !== \'function\') {\n throw new Error("Cannot create new Deferred. OnCancel must be a function.");\n }\n\n var res;\n var rej;\n var cancel;\n var status = {\n resolved: false,\n rejected: false,\n canceled: false,\n pending: true\n };\n _this = _super.call(this, function (resolve, reject) {\n // Store the resolver\n res = function res(value) {\n if (status.pending) {\n status.resolved = true;\n status.pending = false;\n\n if (typeof onResolve === \'function\') {\n value = onResolve(value);\n }\n\n return resolve(value);\n }\n }; // Store the rejecter\n\n\n rej = function rej(value) {\n if (status.pending) {\n status.rejected = true;\n status.pending = false;\n\n if (typeof onReject === \'function\') {\n value = onReject(value);\n }\n\n return reject(value);\n }\n }; // Store the canceler\n\n\n cancel = function cancel(value) {\n if (status.pending) {\n status.canceled = true;\n status.pending = false;\n\n if (typeof onCancel === \'function\') {\n value = onCancel(value);\n }\n\n return resolve(value);\n }\n }; // Run the executable with custom resolver and rejecter\n\n\n executable(res, rej, cancel);\n });\n _this._status = status;\n _this._resolve = res;\n _this._reject = rej;\n _this._cancel = cancel;\n _this._executable = executable;\n return _this;\n }\n /**\r\n * Gets the resolved state of the promise.\r\n *\r\n * @readonly\r\n */\n\n\n _createClass(Deferred, [{\n key: "resolved",\n get: function get() {\n return this._status.resolved;\n }\n /**\r\n * Gets the rejected state of the promise.\r\n *\r\n * @readonly\r\n */\n\n }, {\n key: "rejected",\n get: function get() {\n return this._status.rejected;\n }\n /**\r\n * Gets the canceled state of the promise.\r\n *\r\n * @readonly\r\n */\n\n }, {\n key: "canceled",\n get: function get() {\n return this._status.canceled;\n }\n /**\r\n * Gets the pending state of the promise.\r\n *\r\n * @readonly\r\n */\n\n }, {\n key: "pending",\n get: function get() {\n return this._status.pending;\n }\n /**\r\n * Force the promise to resolve.\r\n *\r\n * @param {any=} value - Value to pass to the resolver.\r\n *\r\n * @returns {any} - The return value of the resolver function.\r\n */\n\n }, {\n key: "resolve",\n value: function resolve(value) {\n return this._resolve(value);\n }\n /**\r\n * Force the promise to reject.\r\n *\r\n * @param {any=} value - Value to pass to the rejecter.\r\n *\r\n * @returns {any} - The return value of the rejecter function.\r\n */\n\n }, {\n key: "reject",\n value: function reject(value) {\n return this._reject(value);\n }\n /**\r\n * Force the promise to resolve and set the canceled state to true.\r\n *\r\n * @param {any=} value - Value to pass to the canceller.\r\n *\r\n * @returns {any} - The return value of the canceller function.\r\n */\n\n }, {\n key: "cancel",\n value: function cancel(value) {\n return this._cancel(value);\n }\n /**\r\n * Run the promise function to try to resolve the promise. Promise must be\r\n * pending.\r\n *\r\n * @param {...any} args - Optional arguments to pass after resolve and reject.\r\n */\n\n }, {\n key: "execute",\n value: function execute() {\n if (this.pending) {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n this._executable.apply(this, [this._resolve, this._reject, this._cancel].concat(args));\n }\n }\n /**\r\n * Return a canceled deferred promise.\r\n *\r\n * @param {any=} value - Value to cancel the promise with.\r\n *\r\n * @returns {Deferred}\r\n */\n\n }], [{\n key: "cancel",\n value: function cancel(value) {\n return new Deferred(function (_resolve, _reject, cancel) {\n cancel(value);\n });\n }\n /**\r\n * Return a new Deferred promise that will resolve or reject once all promises\r\n * in the input array have been resolved or one promise is canceled or rejected.\r\n * Promises in the array that are Deferred promises will be manually resolved,\r\n * rejected or canceled when calling resolve, reject or cancel on the return promise.\r\n *\r\n * @param {Array.} iterable - An iterable such as an array.\r\n * @param {Function=} onResolve - Optional function to execute once the promise\r\n * is resolved.\r\n * @param {Function=} onReject - Optional function to execute once the promise\r\n * is rejected.\r\n * @param {Function=} onCancel - Optional function to execute if the user cancels\r\n * the promise. Canceling results in the promise having a status of \'canceled\'.\r\n *\r\n * @returns Deferred\r\n */\n\n }, {\n key: "all",\n value: function all(iterable, onResolve, onReject, onCancel) {\n if (iterable == null || typeof iterable[Symbol.iterator] !== \'function\') {\n var e = "Cannot execute Deferred.all. First argument must be iterable.";\n\n if (typeof onReject === \'function\') {\n e = onReject(e);\n }\n\n return Deferred.reject(e);\n }\n\n var array = _toConsumableArray(iterable);\n\n var deferred = array.filter(function (item) {\n return item instanceof Deferred;\n });\n var result = new Deferred(undefined, function (resolveValue) {\n deferred.forEach(function (item) {\n item.resolve(resolveValue);\n });\n deferred.length = 0;\n\n if (typeof onResolve === \'function\') {\n return onResolve(resolveValue);\n } else {\n return resolveValue;\n }\n }, function (error) {\n deferred.forEach(function (item) {\n item.reject(error);\n });\n deferred.length = 0;\n\n if (typeof onReject === \'function\') {\n return onReject(error);\n } else {\n return error;\n }\n }, function (cancelValue) {\n deferred.forEach(function (item) {\n item.cancel(cancelValue);\n });\n deferred.length = 0;\n\n if (typeof onCancel === \'function\') {\n return onCancel(cancelValue);\n } else {\n return cancelValue;\n }\n });\n var numItems = array.length;\n var itemTracker = {\n failed: false,\n numResolved: 0,\n resolutions: []\n };\n array.forEach(function (item, index) {\n if (itemTracker.failed) {\n return;\n } else if (!(item instanceof Promise)) {\n itemTracker.resolutions[index] = item;\n itemTracker.numResolved += 1;\n\n if (itemTracker.numResolved === numItems) {\n result.resolve(itemTracker.resolutions);\n }\n\n return;\n }\n\n item.then(function (value) {\n if (!itemTracker.failed && !item.canceled) {\n itemTracker.resolutions[index] = value;\n itemTracker.numResolved += 1;\n\n if (itemTracker.numResolved === numItems) {\n result.resolve(itemTracker.resolutions);\n }\n } else if (!itemTracker.failed) {\n itemTracker.failed = true;\n result.cancel(value);\n }\n }, function (error) {\n if (!itemTracker.failed) {\n itemTracker.failed = true;\n result.reject(error);\n }\n });\n });\n return result;\n }\n }]);\n\n return Deferred;\n}( /*#__PURE__*/_wrapNativeSuper(Promise));\n\n/* harmony default export */ var core_Deferred = (Deferred);\n// CONCATENATED MODULE: ./src/core/Utils.js\nfunction Utils_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction Utils_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction Utils_createClass(Constructor, protoProps, staticProps) { if (protoProps) Utils_defineProperties(Constructor.prototype, protoProps); if (staticProps) Utils_defineProperties(Constructor, staticProps); return Constructor; }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/**\r\n * A collection of useful generic functions.\r\n *\r\n * @hideconstructor\r\n */\n\nvar Utils_Utils = /*#__PURE__*/function () {\n function Utils() {\n Utils_classCallCheck(this, Utils);\n }\n\n Utils_createClass(Utils, null, [{\n key: "createId",\n value:\n /**\r\n * @static\r\n *\r\n * Generate a unique id\r\n *\r\n * @returns {String}\r\n */\n function createId() {\n return \'xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx\'.replace(/[xy]/g, function (c) {\n var randomNumber = Math.floor((Date.now() + Math.random() * 16) % 16);\n\n if (c === \'x\') {\n return randomNumber.toString(16);\n } // Set bit 6 and 7 to 0 and 1\n\n\n return (randomNumber & 0x3 | 0x8).toString(16);\n });\n }\n /**\r\n * @static\r\n *\r\n * Check a name string against an array of strings to determine if it is unique.\r\n * If it isn\'t, append incremented trailing integers to the end of the name\r\n * until it is unique.\r\n *\r\n * @param {string} name - String name to make unique.\r\n * @param {Array.=} nameArray - Array of string names to check agains.\r\n *\r\n * @returns {string}\r\n */\n\n }, {\n key: "getUniqueName",\n value: function getUniqueName(name) {\n var nameArray = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n\n // If the name isn\'t in the array return it right away\n if (!nameArray.includes(name)) {\n return name;\n }\n\n var nameSet = new Set(nameArray); // Separate the name into string and trailing numbers\n\n var matchGroup = name.match(/\\d*$/);\n var index = matchGroup.index;\n var baseName = name.slice(0, index);\n var increment = Number(matchGroup[0]); // Find the highest trailing number value for the base of the name\n\n nameSet.forEach(function (setName) {\n var setMatchGroup = setName.match(/\\d*$/);\n\n if (setName.slice(0, setMatchGroup.index) === baseName) {\n var setIncrement = Number(setMatchGroup[0]);\n\n if (setIncrement > increment) {\n increment = setIncrement;\n }\n }\n }); // Increment the highest trailing number and append to the name\n\n return "".concat(baseName).concat(increment + 1);\n }\n /**\r\n * Return a deferred promise that will wait a given number of seconds before\r\n * resolving. Pass delta time in milliseconds to the deferred promise\'s execute\r\n * method in an update loop to progress time.\r\n *\r\n * @param {number} [seconds=0] - Number of seconds to wait before resolving.\r\n * @param {Object=} options - Optional options object\r\n * @param {Function} [options.onFinish] - Callback to execute once the wait time\r\n * is met.\r\n * @param {Function=} options.onProgress - Callback to execute each time the wait\r\n * time progresses towards the target number of seconds. The amount of progress\r\n * as a 0-1 percentage is passed as an argument.\r\n * @param {Function=} options.onCancel - Callback to execute if the user cancels\r\n * the wait before completion.\r\n * @param {Function=} options.onError - Callback to execute if the wait stops\r\n * because an error is encountered. The error message is passed as a parameter.\r\n *\r\n * @returns {Deferred}\r\n */\n\n }, {\n key: "wait",\n value: function wait() {\n var seconds = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n\n var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n onFinish = _ref.onFinish,\n onProgress = _ref.onProgress,\n onCancel = _ref.onCancel,\n onError = _ref.onError;\n\n // Make sure seconds is numeric\n if (typeof seconds !== \'number\') {\n console.warn("Invalid seconds value ".concat(seconds, " for wait. Defaulting to 0."));\n seconds = 0;\n } // Resolve immediately if the wait time is not greater than 0\n\n\n if (seconds <= 0) {\n if (typeof onFinish === \'function\') {\n onFinish();\n }\n\n return core_Deferred.resolve();\n }\n\n var currentTime = 0;\n var totalTime = seconds * 1000; // convert to milliseconds\n // Executable to pass to Deferred, meant to be run in an update loop\n\n var onUpdate = function onUpdate(resolve, reject, _cancel) {\n var deltaTime = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;\n\n if (typeof deltaTime !== \'number\') {\n var e = new Error("Invalid property wait deltaTime. DeltaTime must be a number.");\n reject(e);\n return;\n } // Make sure time has passed\n\n\n if (deltaTime === 0) {\n return;\n } // Signal progress\n\n\n currentTime += deltaTime;\n\n if (currentTime < 0) {\n currentTime = 0;\n }\n\n if (typeof onProgress === \'function\') {\n onProgress(Math.min(currentTime / totalTime, 1));\n } // Signal completion once time is up\n\n\n if (currentTime >= totalTime) {\n resolve();\n }\n };\n\n return new core_Deferred(onUpdate, onFinish, onError, onCancel);\n }\n /**\r\n * Get a random float number between a min (inclusive) and max (exclusive) value\r\n * @param {number} min minimum value\r\n * @param {number} max maximum value\r\n * @returns {float}\r\n */\n\n }, {\n key: "getRandomFloat",\n value: function getRandomFloat(min, max) {\n return Math.random() * (max - min) + min;\n }\n /**\r\n * Get a random integer number between a min (inclusive) and max (exclusive) value\r\n * @param {number} min minimum value\r\n * @param {number} max maximum value\r\n * @returns {integer}\r\n */\n\n }, {\n key: "getRandomInt",\n value: function getRandomInt(min, max) {\n min = Math.ceil(min);\n max = Math.floor(max);\n return Math.floor(Math.random() * (max - min)) + min;\n }\n }]);\n\n return Utils;\n}();\n\n/* harmony default export */ var core_Utils = (Utils_Utils);\n// CONCATENATED MODULE: ./src/core/MathUtils.js\nfunction MathUtils_toConsumableArray(arr) { return MathUtils_arrayWithoutHoles(arr) || MathUtils_iterableToArray(arr) || MathUtils_unsupportedIterableToArray(arr) || MathUtils_nonIterableSpread(); }\n\nfunction MathUtils_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."); }\n\nfunction MathUtils_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return MathUtils_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return MathUtils_arrayLikeToArray(o, minLen); }\n\nfunction MathUtils_iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction MathUtils_arrayWithoutHoles(arr) { if (Array.isArray(arr)) return MathUtils_arrayLikeToArray(arr); }\n\nfunction MathUtils_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction MathUtils_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction MathUtils_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction MathUtils_createClass(Constructor, protoProps, staticProps) { if (protoProps) MathUtils_defineProperties(Constructor.prototype, protoProps); if (staticProps) MathUtils_defineProperties(Constructor, staticProps); return Constructor; }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\nvar RadianToDegree = 180 / Math.PI;\nvar DegreeToRadian = Math.PI / 180;\n/**\r\n * A collection of useful math functions.\r\n *\r\n * @hideconstructor\r\n */\n\nvar MathUtils = /*#__PURE__*/function () {\n function MathUtils() {\n MathUtils_classCallCheck(this, MathUtils);\n }\n\n MathUtils_createClass(MathUtils, null, [{\n key: "toDegrees",\n value:\n /**\r\n * Convert the given angle from radians to degrees.\r\n *\r\n * @param {number} radians - Angle in radians.\r\n *\r\n * @returns {number} - Angle in degrees.\r\n */\n function toDegrees(radians) {\n return radians * RadianToDegree;\n }\n /**\r\n * Convert the given angle from degrees to radians.\r\n *\r\n * @param {number} degrees - Angle in degrees.\r\n *\r\n * @returns {number} - Angle in radians.\r\n */\n\n }, {\n key: "toRadians",\n value: function toRadians(degrees) {\n return degrees * DegreeToRadian;\n }\n /**\r\n * Linearly interpolate between two values.\r\n *\r\n * @param {number} from - Start value.\r\n * @param {number} to - Target value.\r\n * @param {number} factor - 0-1 amount to interpolate between from and to.\r\n *\r\n * @returns {number}\r\n */\n\n }, {\n key: "lerp",\n value: function lerp(from, to, factor) {\n return from + (to - from) * factor;\n }\n /**\r\n * Clamp a number between 2 values.\r\n *\r\n * @param {number} value - Value to clamp.\r\n * @param {number} [min=0] - Minumum value.\r\n * @param {number} [max=1] - Maximum value.\r\n *\r\n * @returns {number}\r\n */\n\n }, {\n key: "clamp",\n value: function clamp(value) {\n var min = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var max = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;\n return Math.max(min, Math.min(value, max));\n }\n /**\r\n * Calculates the closest point on a given 2D line segement\r\n * from a given 2D point.\r\n *\r\n * @param {Array.} a - First point on line segment.\r\n * @param {Array.} b - Second point on line segment.\r\n * @param {Array.} p - 2D point.\r\n *\r\n * @returns {Array.}\r\n */\n\n }, {\n key: "closestPointOnLine",\n value: function closestPointOnLine(a, b, p) {\n var distSqr = MathUtils.distanceSquared(a, b); // Line segment is a single point\n\n if (distSqr === 0) {\n return a;\n }\n\n var t = ((p[0] - a[0]) * (b[0] - a[0]) + (p[1] - a[1]) * (b[1] - a[1])) / distSqr;\n\n var point = MathUtils_toConsumableArray(a);\n\n if (t > 1) {\n point = MathUtils_toConsumableArray(b);\n } else if (t > 0) {\n point = [a[0] + t * (b[0] - a[0]), a[1] + t * (b[1] - a[1])];\n }\n\n return point;\n }\n /**\r\n * Gets the distance squared for two 2D points.\r\n * @param {Array.} a - 2D point.\r\n * @param {Array.} b - 2D point.\r\n *\r\n * @returns {number}\r\n */\n\n }, {\n key: "distanceSquared",\n value: function distanceSquared(a, b) {\n return (a[0] - b[0]) * (a[0] - b[0]) + (a[1] - b[1]) * (a[1] - b[1]);\n }\n /**\r\n * Triangulates a set of 2D points using an implementation\r\n * of the Bowyer-Watson incremental Delaunay triangulation.\r\n *\r\n * @param {Array.>} vertices - Array of 2D points.\r\n *\r\n * @returns {Array.>} - Array of triangle indices.\r\n */\n\n }, {\n key: "getDelaunayTriangulation",\n value: function getDelaunayTriangulation(vertices) {\n if (!vertices || vertices.length < 3) {\n throw new Error("Cannot get delaunay triangulation for points ".concat(vertices, ". Input must contain at least three points."));\n }\n\n var minX = Number.POSITIVE_INFINITY;\n var minY = Number.POSITIVE_INFINITY;\n var maxX = Number.NEGATIVE_INFINITY;\n var maxY = Number.NEGATIVE_INFINITY;\n vertices.forEach(function (v) {\n minX = v[0] < minX ? v[0] : minX;\n minY = v[1] < minY ? v[1] : minY;\n maxX = v[0] > maxX ? v[0] : maxX;\n maxY = v[1] > maxY ? v[1] : maxY;\n });\n var dX = maxX - minX;\n var dY = maxY - minY;\n var midX = (minX + maxX) / 2;\n var midY = (minY + maxY) / 2;\n var dMax = dX > dY ? dX : dY;\n var superIndices = [vertices.length, vertices.length + 1, vertices.length + 2];\n var vertsWithSuper = [].concat(MathUtils_toConsumableArray(vertices), [[midX - 20 * dMax, midY - dMax], [midX, midY + 20 * dMax], [midX + 20 * dMax, midY - dMax]]);\n var superSortedIndices = MathUtils.sortPointsCCW(superIndices, vertsWithSuper);\n var superTriangle = {\n indices: superSortedIndices,\n edges: [[superSortedIndices[0], superSortedIndices[1]], [superSortedIndices[1], superSortedIndices[2]], [superSortedIndices[2], superSortedIndices[0]]]\n };\n var triangles = [superTriangle];\n vertsWithSuper.forEach(function (newVert, newIndex) {\n var invalidTriangles = [];\n triangles.forEach(function (triangle) {\n if (MathUtils.isPointInCircumCircle(vertsWithSuper[triangle.indices[0]], vertsWithSuper[triangle.indices[1]], vertsWithSuper[triangle.indices[2]], newVert)) {\n invalidTriangles.push(triangle);\n }\n });\n var boundingPoly = [];\n invalidTriangles.forEach(function (triangle) {\n triangle.edges.forEach(function (edge) {\n var count = 0;\n invalidTriangles.forEach(function (otherTriangle) {\n if (triangle !== otherTriangle) {\n otherTriangle.edges.forEach(function (otherEdge) {\n if (edge[0] === otherEdge[0] && edge[1] === otherEdge[1] || edge[1] === otherEdge[0] && edge[0] === otherEdge[1]) {\n count += 1;\n }\n });\n }\n });\n if (count === 0) boundingPoly.push(edge);\n });\n });\n invalidTriangles.forEach(function (triangle) {\n triangles.splice(triangles.indexOf(triangle), 1);\n });\n boundingPoly.forEach(function (edge) {\n var sortedIndices = MathUtils.sortPointsCCW([edge[0], edge[1], newIndex], vertsWithSuper);\n triangles.push({\n indices: sortedIndices,\n edges: [[sortedIndices[0], sortedIndices[1]], [sortedIndices[1], sortedIndices[2]], [sortedIndices[2], sortedIndices[0]]]\n });\n });\n });\n var trianglesToRemove = [];\n triangles.forEach(function (triangle) {\n triangle.indices.forEach(function (index) {\n if (superIndices.includes(index)) {\n trianglesToRemove.push(triangle);\n }\n });\n });\n trianglesToRemove.forEach(function (triangle) {\n var index = triangles.indexOf(triangle);\n\n if (index !== -1) {\n triangles.splice(index, 1);\n }\n });\n return triangles.map(function (triangle) {\n return triangle.indices;\n });\n }\n /**\r\n * Determines if a given 2D point is within the cicrumcircle\r\n * defined by three 2D points. The triangle points must be in\r\n * counter-clockwise order a -> b -> c.\r\n *\r\n * @param {Array.} a - First triangle point.\r\n * @param {Array.} b - Second triangle point.\r\n * @param {Array.} c - Third triangle point.\r\n * @param {Array.} p - 2D point.\r\n *\r\n * @returns {boolean}\r\n */\n\n }, {\n key: "isPointInCircumCircle",\n value: function isPointInCircumCircle(a, b, c, p) {\n var ax = a[0] - p[0];\n var ay = a[1] - p[1];\n var bx = b[0] - p[0];\n var by = b[1] - p[1];\n var cx = c[0] - p[0];\n var cy = c[1] - p[1];\n return (ax * ax + ay * ay) * (bx * cy - cx * by) - (bx * bx + by * by) * (ax * cy - cx * ay) + (cx * cx + cy * cy) * (ax * by - bx * ay) > 0;\n }\n /**\r\n * Determines if a given 2D point is within a given triangle.\r\n *\r\n * @param {Array.} a - First triangle point.\r\n * @param {Array.} b - Second triangle point.\r\n * @param {Array.} c - Third triangle point.\r\n * @param {Array.} p - 2D point.\r\n *\r\n * @returns {boolean}\r\n */\n\n }, {\n key: "isPointInTriangle",\n value: function isPointInTriangle(a, b, c, p) {\n var denom = (b[1] - c[1]) * (a[0] - c[0]) + (c[0] - b[0]) * (a[1] - c[1]);\n var aVal = ((b[1] - c[1]) * (p[0] - c[0]) + (c[0] - b[0]) * (p[1] - c[1])) / denom;\n var bVal = ((c[1] - a[1]) * (p[0] - c[0]) + (a[0] - c[0]) * (p[1] - c[1])) / denom;\n var cVal = 1 - aVal - bVal;\n return aVal >= 0 && aVal <= 1 && bVal >= 0 && bVal <= 1 && cVal >= 0 && cVal <= 1;\n }\n /**\r\n * Gets the sorted indices of a given set of 2D points in\r\n * counter-clockwise order.\r\n *\r\n * @param {Array.} indices - List of indices.\r\n * @param {Array.>} vertices - List of 2D points.\r\n *\r\n * @returns {Array.>} - List of sorted indices.\r\n */\n\n }, {\n key: "sortPointsCCW",\n value: function sortPointsCCW(indices, vertices) {\n var centroid = [0, 0];\n indices.forEach(function (index) {\n centroid[0] += vertices[index][0];\n centroid[1] += vertices[index][1];\n });\n centroid[0] /= indices.length;\n centroid[1] /= indices.length;\n indices.sort(function (a, b) {\n var bVal = Math.atan2(vertices[b][1] - centroid[1], vertices[b][0] - centroid[0]);\n var aVal = Math.atan2(vertices[a][1] - centroid[1], vertices[a][0] - centroid[0]);\n return aVal - bVal;\n });\n return indices;\n }\n /**\r\n * Cacluates the area of a triangle\r\n * @param {Array.} a - First triangle point.\r\n * @param {Array.} b - Second triangle point.\r\n * @param {Array.} c - Third triangle point.\r\n *\r\n * @returns {number}\r\n */\n\n }, {\n key: "triangleArea",\n value: function triangleArea(a, b, c) {\n return Math.abs((a[0] * (b[1] - c[1]) + b[0] * (c[1] - a[1]) + c[0] * (a[1] - b[1])) * 0.5);\n }\n /**\r\n * Return the magnitude of a given vector array.\r\n *\r\n * @param {Array.} vector - Array consisting of numbers.\r\n *\r\n * @returns {number}\r\n */\n\n }, {\n key: "getVectorMagnitude",\n value: function getVectorMagnitude(vector) {\n if (!(vector instanceof Array)) {\n throw new Error("Cannot get magnitude for vector ".concat(vector, ". Input must be an Array numbers."));\n }\n\n var reducer = function reducer(accumulator, currentValue) {\n if (typeof currentValue !== \'number\') {\n throw new Error("Cannot get magnitude for vector ".concat(vector, ". All items in the input Array must be numbers."));\n }\n\n return accumulator + Math.pow(currentValue, 2);\n };\n\n return Math.sqrt(vector.reduce(reducer, 0));\n }\n /**\r\n * Return the dot product between two vectors.\r\n *\r\n * @param {Array.} vectorA - Array consisting of numbers.\r\n * @param {Array.} vectorB - Array consisting of numbers.\r\n *\r\n * @returns {number}\r\n */\n\n }, {\n key: "getDotProduct",\n value: function getDotProduct(vectorA, vectorB) {\n if (!(vectorA instanceof Array) || !(vectorB instanceof Array) || vectorA.length !== vectorB.length) {\n throw new Error("Cannot get dot product between ".concat(vectorA, " and ").concat(vectorB, ". Inputs must be vectors of the same length."));\n }\n\n var result = 0;\n vectorA.forEach(function (valueA, index) {\n var valueB = vectorB[index];\n\n if (typeof valueA !== \'number\' || typeof valueB !== \'number\') {\n throw new Error("Cannot get dot product between ".concat(vectorA, " and ").concat(vectorB, ". Vectors must only consist of numeric values."));\n }\n\n result += valueA * valueB;\n });\n return result;\n }\n /**\r\n * Return the angle in radians between vectorA and vectorB.\r\n *\r\n * @param {Array.} vectorA - Array consisting of numbers.\r\n * @param {Array.} vectorB - Array consisting of numbers.\r\n *\r\n * @returns {number}\r\n */\n\n }, {\n key: "getAngleBetween",\n value: function getAngleBetween(vectorA, vectorB) {\n var normalA = this.normalizeVector(MathUtils_toConsumableArray(vectorA));\n var normalB = this.normalizeVector(MathUtils_toConsumableArray(vectorB));\n var dot = this.getDotProduct(normalA, normalB);\n return Math.acos(this.clamp(dot, -1, 1));\n }\n /**\r\n * Multiply a 3x3 rotation matrix with a vector3.\r\n *\r\n * @param {Array.} vector3 - Array consisting of 3 numbers representing\r\n * a direction vector.\r\n * @param {Array.} matrix3 - An array of 9 numbers representing a row\r\n * major rotation matrix.\r\n *\r\n * @returns {Array.} - An array of 3 numbers representing the new direction\r\n * of the vector.\r\n */\n\n }, {\n key: "rotateVector",\n value: function rotateVector(vector3, matrix3) {\n if (!(vector3 instanceof Array) || vector3.length !== 3 || !vector3.every(function (v) {\n return typeof v === \'number\';\n })) {\n throw new Error("Cannot rotate vector ".concat(vector3, " by rotation matrix ").concat(matrix3, ". Input vector must be an array of 3 numbers."));\n }\n\n if (!(matrix3 instanceof Array) || matrix3.length !== 9 || !matrix3.every(function (v) {\n return typeof v === \'number\';\n })) {\n throw new Error("Cannot rotate vector ".concat(vector3, " by rotation matrix ").concat(matrix3, ". Input matrix3 must be an array of 9 numbers."));\n }\n\n var x = matrix3[0] * vector3[0] + matrix3[3] * vector3[1] + matrix3[6] * vector3[2];\n var y = matrix3[1] * vector3[0] + matrix3[4] * vector3[1] + matrix3[7] * vector3[2];\n var z = matrix3[2] * vector3[0] + matrix3[5] * vector3[1] + matrix3[8] * vector3[2];\n return [x, y, z];\n }\n /**\r\n * Normalize a given vector array.\r\n *\r\n * @param {Array.} vector - Array consisting of numbers.\r\n *\r\n * @returns {Array.} The original vector with normalized values, for chaining.\r\n */\n\n }, {\n key: "normalizeVector",\n value: function normalizeVector(vector) {\n var magnitude = this.getVectorMagnitude(vector);\n\n if (magnitude === 0) {\n vector.fill(0);\n } else {\n vector.forEach(function (value, index) {\n vector[index] = value / magnitude;\n });\n }\n\n return vector;\n }\n /**\r\n * Extract the 3x3 rotation matrix from a given 4x4 transformation matrix.\r\n *\r\n * @param {Array.} matrix4 - An array of 16 numbers representing a row\r\n * major transformation matrix.\r\n *\r\n * @returns {Array.} - An array of 9 numbers representing a row major\r\n * rotation matrix.\r\n */\n\n }, {\n key: "getRotationMatrix",\n value: function getRotationMatrix(matrix4) {\n if (!(matrix4 instanceof Array) || matrix4.length !== 16 || !matrix4.every(function (v) {\n return typeof v === \'number\';\n })) {\n throw new Error("Cannot convert matrix ".concat(matrix4, " to a rotation matrix. Input matrix must be an array of 16 numbers."));\n } // Extract scale\n\n\n var scaleX = 1 / (this.getVectorMagnitude(matrix4.slice(0, 4)) || 1);\n var scaleY = 1 / (this.getVectorMagnitude(matrix4.slice(4, 8)) || 1);\n var scaleZ = 1 / (this.getVectorMagnitude(matrix4.slice(8, 12)) || 1);\n return [matrix4[0] * scaleX, matrix4[1] * scaleX, matrix4[2] * scaleX, matrix4[4] * scaleY, matrix4[5] * scaleY, matrix4[6] * scaleY, matrix4[8] * scaleZ, matrix4[9] * scaleZ, matrix4[10] * scaleZ];\n }\n /**\r\n * Return an array containing the spherical coordinates of the given cartesian\r\n * xyz coordinates.\r\n *\r\n * @private\r\n *\r\n * @param {number} x - Position along the x axis.\r\n * @param {number} y - Position along the y axis.\r\n * @param {number} z - Position along the z axis.\r\n *\r\n * @returns {Array.} - An array consisting of three numberes where index\r\n * 0 represents the radius, index 1 represents the vertical/polar angle in radians\r\n * and index 2 represents the horizontal/azimuthal angle in radians.\r\n */\n\n }, {\n key: "cartesianToSpherical",\n value: function cartesianToSpherical(x, y, z) {\n var r = this.getVectorMagnitude([x, y, z]); // Return identity if the vector has no length\n\n if (r === 0) {\n return [0, 0, 0];\n }\n\n return [r, Math.acos(this.clamp(y / r, -1, 1)), Math.atan2(x, z)];\n }\n /**\r\n * Gradually change a value of a numeric property towards a goal over time using\r\n * a critically damped spring function.\r\n *\r\n * @param {number} currentValue - The starting value.\r\n * @param {number} targetValue- The goal value.\r\n * @param {Array.} [valueStore = [0, 0]] - An Array consisting of two\r\n * numbers where the first number holds the result value and the second holds\r\n * the velocity that resulted in that value. The same array should be provided\r\n * with each call to this function.\r\n * @param {number} [deltaTime = 1e-7] - The time since the last call to this function\r\n * in seconds.\r\n * @param {number} [smoothTime = 0.3] - The approximate amount of time in seconds\r\n * it should take to reach the target value.\r\n * @param {number} [maxSpeed = 1e7] - A clamping value for the maximum speed the\r\n * value can change.\r\n *\r\n * @returns {Array.} - The valueStore array.\r\n */\n\n }, {\n key: "dampValue",\n value: function dampValue(currentValue, targetValue) {\n var valueStore = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [0, 0];\n var deltaTime = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 1e-7;\n var smoothTime = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0.3;\n var maxSpeed = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 1e7;\n smoothTime = Math.max(0.0001, smoothTime);\n deltaTime = Math.max(1e-7, deltaTime); // Find the delta between values and use it to estimate the previous value\n\n var clampTime = maxSpeed * smoothTime;\n var deltaValue = currentValue - targetValue;\n var clampDeltaValue = this.clamp(deltaValue, -clampTime, clampTime);\n var lastValue = currentValue - clampDeltaValue; // Calculate damping factors\n\n var d1 = 2 / smoothTime;\n var d2 = d1 * deltaTime;\n var d3 = 1 / (1 + d2 + 0.5 * Math.pow(d2, 2) + 0.25 * Math.pow(d2, 3));\n var d4 = (valueStore[1] + d1 * clampDeltaValue) * deltaTime; // Damp the target value and update the velocity\n\n valueStore[0] = lastValue + (clampDeltaValue + d4) * d3;\n valueStore[1] = (valueStore[1] - d1 * d4) * d3; // Prevent overshooting\n\n if (targetValue - currentValue > 0 === valueStore[0] > targetValue) {\n valueStore[0] = targetValue;\n valueStore[1] = (valueStore[0] - targetValue) / deltaTime;\n }\n\n return valueStore;\n }\n }]);\n\n return MathUtils;\n}();\n\n/* harmony default export */ var core_MathUtils = (MathUtils);\n// CONCATENATED MODULE: ./src/core/animpack/Easing.js\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/**\r\n * @typedef {Object} EasingObject Object containing easing functions\r\n * @property {Function} In - Easing \'In\' function. Should use the signature (k:number):number.\r\n * @property {Function} Out - Easing \'Out\' function. Should use the signature (k:number):number.\r\n * @property {Function} InOut - Easing \'InOut\' function. Should use the signature (k:number):number.\r\n */\n\n/**\r\n * Linear Easing\r\n * @type {EasingObject}\r\n */\nvar Linear = {\n None: function None(k) {\n return k;\n },\n In: function In(k) {\n return k;\n },\n Out: function Out(k) {\n return k;\n },\n InOut: function InOut(k) {\n return k;\n }\n};\n/**\r\n * Quadratic Easing\r\n * @type {EasingObject}\r\n */\n\nvar Quadratic = {\n In: function In(k) {\n return k * k;\n },\n Out: function Out(k) {\n return k * (2 - k);\n },\n InOut: function InOut(k) {\n k *= 2;\n\n if (k < 1) {\n return 0.5 * k * k;\n }\n\n return -0.5 * (--k * (k - 2) - 1);\n }\n};\n/**\r\n * Cubic Easing\r\n * @type {EasingObject}\r\n */\n\nvar Cubic = {\n In: function In(k) {\n return k * k * k;\n },\n Out: function Out(k) {\n return --k * k * k + 1;\n },\n InOut: function InOut(k) {\n k *= 2;\n\n if (k < 1) {\n return 0.5 * k * k * k;\n }\n\n k -= 2;\n return 0.5 * (k * k * k + 2);\n }\n};\n/**\r\n * Quartic Easing\r\n * @type {EasingObject}\r\n */\n\nvar Quartic = {\n In: function In(k) {\n return k * k * k * k;\n },\n Out: function Out(k) {\n return 1 - --k * k * k * k;\n },\n InOut: function InOut(k) {\n k *= 2;\n\n if (k < 1) {\n return 0.5 * k * k * k * k;\n }\n\n k -= 2;\n return -0.5 * (k * k * k * k - 2);\n }\n};\n/**\r\n * Quintic Easing\r\n * @type {EasingObject}\r\n */\n\nvar Quintic = {\n In: function In(k) {\n return k * k * k * k * k;\n },\n Out: function Out(k) {\n return --k * k * k * k * k + 1;\n },\n InOut: function InOut(k) {\n k *= 2;\n\n if (k < 1) {\n return 0.5 * k * k * k * k * k;\n }\n\n k -= 2;\n return 0.5 * (k * k * k * k * k + 2);\n }\n};\n/**\r\n * Sinusoidal Easing\r\n * @type {EasingObject}\r\n */\n\nvar Sinusoidal = {\n In: function In(k) {\n return 1 - Math.cos(k * Math.PI / 2);\n },\n Out: function Out(k) {\n return Math.sin(k * Math.PI / 2);\n },\n InOut: function InOut(k) {\n return 0.5 * (1 - Math.cos(Math.PI * k));\n }\n};\n/**\r\n * Exponential Easing\r\n * @type {EasingObject}\r\n */\n\nvar Exponential = {\n In: function In(k) {\n return k === 0 ? 0 : Math.pow(1024, k - 1);\n },\n Out: function Out(k) {\n return k === 1 ? 1 : 1 - Math.pow(2, -10 * k);\n },\n InOut: function InOut(k) {\n if (k === 0) {\n return 0;\n }\n\n if (k === 1) {\n return 1;\n }\n\n k *= 2;\n\n if (k < 1) {\n return 0.5 * Math.pow(1024, k - 1);\n }\n\n return 0.5 * (-Math.pow(2, -10 * (k - 1)) + 2);\n }\n};\n/**\r\n * Circular Easing\r\n * @type {EasingObject}\r\n */\n\nvar Circular = {\n In: function In(k) {\n return 1 - Math.sqrt(1 - k * k);\n },\n Out: function Out(k) {\n return Math.sqrt(1 - --k * k);\n },\n InOut: function InOut(k) {\n k *= 2;\n\n if (k < 1) {\n return -0.5 * (Math.sqrt(1 - k * k) - 1);\n }\n\n k -= 2;\n return 0.5 * (Math.sqrt(1 - k * k) + 1);\n }\n};\n/**\r\n * Elastic Easing\r\n * @type {EasingObject}\r\n */\n\nvar Elastic = {\n In: function In(k) {\n var s;\n var a = 0.1;\n var p = 0.4;\n\n if (k === 0) {\n return 0;\n }\n\n if (k === 1) {\n return 1;\n }\n\n if (!a || a < 1) {\n a = 1;\n s = p / 4;\n } else {\n s = p * Math.asin(1 / a) / (2 * Math.PI);\n }\n\n k -= 1;\n return -(a * Math.pow(2, 10 * k) * Math.sin((k - s) * (2 * Math.PI) / p));\n },\n Out: function Out(k) {\n var s;\n var a = 0.1;\n var p = 0.4;\n\n if (k === 0) {\n return 0;\n }\n\n if (k === 1) {\n return 1;\n }\n\n if (!a || a < 1) {\n a = 1;\n s = p / 4;\n } else {\n s = p * Math.asin(1 / a) / (2 * Math.PI);\n }\n\n return a * Math.pow(2, -10 * k) * Math.sin((k - s) * (2 * Math.PI) / p) + 1;\n },\n InOut: function InOut(k) {\n var s;\n var a = 0.1;\n var p = 0.4;\n\n if (k === 0) {\n return 0;\n }\n\n if (k === 1) {\n return 1;\n }\n\n if (!a || a < 1) {\n a = 1;\n s = p / 4;\n } else {\n s = p * Math.asin(1 / a) / (2 * Math.PI);\n }\n\n k *= 2;\n\n if (k < 1) {\n k -= 1;\n return -0.5 * (a * Math.pow(2, 10 * k) * Math.sin((k - s) * (2 * Math.PI) / p));\n }\n\n k -= 1;\n return a * Math.pow(2, -10 * k) * Math.sin((k - s) * (2 * Math.PI) / p) * 0.5 + 1;\n }\n};\n/**\r\n * Back Easing\r\n * @type {EasingObject}\r\n */\n\nvar Back = {\n In: function In(k) {\n var s = 1.70158;\n return k * k * ((s + 1) * k - s);\n },\n Out: function Out(k) {\n var s = 1.70158;\n return --k * k * ((s + 1) * k + s) + 1;\n },\n InOut: function InOut(k) {\n var s = 1.70158 * 1.525;\n k *= 2;\n\n if (k < 1) {\n return 0.5 * (k * k * ((s + 1) * k - s));\n }\n\n k -= 2;\n return 0.5 * (k * k * ((s + 1) * k + s) + 2);\n }\n};\n/**\r\n * Bounce Easing\r\n * @type {EasingObject}\r\n */\n\nvar Bounce = {\n In: function In(k) {\n return 1 - Bounce.Out(1 - k);\n },\n Out: function Out(k) {\n if (k < 1 / 2.75) {\n return 7.5625 * k * k;\n } else if (k < 2 / 2.75) {\n k -= 1.5;\n return 7.5625 * (k / 2.75) * k + 0.75;\n } else if (k < 2.5 / 2.75) {\n k -= 2.25;\n return 7.5625 * (k / 2.75) * k + 0.9375;\n }\n\n k -= 2.625;\n return 7.5625 * (k / 2.75) * k + 0.984375;\n },\n InOut: function InOut(k) {\n if (k < 0.5) {\n return Bounce.In(k * 2) * 0.5;\n }\n\n return Bounce.Out(k * 2 - 1) * 0.5 + 0.5;\n }\n};\n// CONCATENATED MODULE: ./src/core/Messenger.js\nfunction Messenger_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction Messenger_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction Messenger_createClass(Constructor, protoProps, staticProps) { if (protoProps) Messenger_defineProperties(Constructor.prototype, protoProps); if (staticProps) Messenger_defineProperties(Constructor, staticProps); return Constructor; }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/* eslint-disable no-underscore-dangle */\n\n/**\r\n * Class that can execute functions when local messages are received. Local messages\r\n * are prefixed with the instance\'s id.\r\n *\r\n * @alias core/Messenger\r\n *\r\n * @property {core/Messenger} GlobalMessenger - A messenger that can be used for\r\n * global messaging. When using static listen and emit methods they are executed\r\n * on this messenger.\r\n * @property {Object} EVENTS - Built-in events that the Messenger emits.\r\n */\n\nvar Messenger_Messenger = /*#__PURE__*/function () {\n /**\r\n * @constructor\r\n *\r\n * @param {any=} id - Id for the object. If none is provided a new id will\r\n * be created. Id should be able to be represented as a string.\r\n */\n function Messenger(id) {\n Messenger_classCallCheck(this, Messenger);\n\n this._id = id !== undefined ? id : core_Utils.createId();\n this._dispatcher = window;\n this._callbacks = {};\n this._eventListeners = {};\n }\n /**\r\n * Gets the string id of the object.\r\n *\r\n * @readonly\r\n * @type {string}\r\n */\n\n\n Messenger_createClass(Messenger, [{\n key: "id",\n get: function get() {\n return this._id;\n }\n /**\r\n * Prefix a message with the instance id.\r\n *\r\n * @private\r\n *\r\n * @param {string} message\r\n *\r\n * @returns {string}\r\n */\n\n }, {\n key: "_createLocalMessage",\n value: function _createLocalMessage(message) {\n return "".concat(this.id, ".").concat(message);\n }\n /**\r\n * Return a function that will call a callback function and supply the event\'s\r\n * detail property as an argument.\r\n *\r\n * @private\r\n *\r\n * @param {Function} callback\r\n *\r\n * @returns {Function}\r\n */\n\n }, {\n key: "_createListener",\n value: function _createListener(callback) {\n return function (e) {\n var value;\n\n if (e.detail !== null) {\n value = e.detail;\n }\n\n callback(value);\n };\n }\n /**\r\n * Create an event object and send it to listeners.\r\n *\r\n * @private\r\n *\r\n * @param {string} message - Event type name.\r\n * @param {any=} value - Value to send to listeners.\r\n *\r\n * @returns {CustomEvent}\r\n */\n\n }, {\n key: "_createEvent",\n value: function _createEvent(message, value) {\n return new CustomEvent(message, {\n detail: value\n });\n }\n /**\r\n * Register an event.\r\n *\r\n * @private\r\n *\r\n * @param {string} message - Event type name.\r\n * @param {Function} listener - A listener function generated using _createListener.\r\n */\n\n }, {\n key: "_addListener",\n value: function _addListener(message, listener) {\n this._dispatcher.addEventListener(this._createLocalMessage(message), listener);\n }\n /**\r\n * Unregister an event.\r\n *\r\n * @private\r\n *\r\n * @param {string} message - Event type name.\r\n * @param {Function} listener - A listener function generated using _createListener.\r\n */\n\n }, {\n key: "_removeListener",\n value: function _removeListener(message, listener) {\n this._dispatcher.removeEventListener(this._createLocalMessage(message), listener);\n }\n /**\r\n * Execute a function when a message is received for this object.\r\n *\r\n * @param {string} message - The message to listen for.\r\n * @param {Function} callback - Function to execute once the message is received.\r\n */\n\n }, {\n key: "listenTo",\n value: function listenTo(message, callback) {\n if (typeof callback !== \'function\') {\n throw new Error("Cannot add listener for ".concat(message, " on ").concat(this.id, ". Callback must be a function."));\n }\n\n if (this._callbacks[message] === undefined) {\n this._callbacks[message] = [];\n this._eventListeners[message] = [];\n }\n\n var listener = this._createListener(callback);\n\n this._callbacks[message].push(callback);\n\n this._eventListeners[message].push(listener);\n\n this._addListener(message, listener);\n }\n /**\r\n * Prevent a function from being executed when a message is received for this\r\n * object.\r\n *\r\n * @param {string} message - The message to stop listening for.\r\n * @param {Function=} callback - Optional callback to remove. If none is defined,\r\n * remove all callbacks for the message.\r\n */\n\n }, {\n key: "stopListening",\n value: function stopListening(message, callback) {\n if (this._callbacks[message] === undefined) {\n return;\n } else if (callback === undefined) {\n // If no callback was defined, call stopListening on all callbacks for the message\n for (var i = this._callbacks[message].length - 1; i > -1; i--) {\n this.stopListening(message, this._callbacks[message][i]);\n }\n\n return;\n } // If a callback was defined, make sure it\'s a listener\n\n\n var index = this._callbacks[message].indexOf(callback);\n\n if (index === -1) {\n return;\n }\n\n var listener = this._eventListeners[message][index];\n\n this._removeListener(message, listener);\n\n this._callbacks[message].splice(index, 1);\n\n this._eventListeners[message].splice(index, 1);\n\n if (this._callbacks[message].length === 0) {\n delete this._callbacks[message];\n delete this._eventListeners[message];\n }\n }\n /**\r\n * De-register callback(s) from being executed when messages matching the given\r\n * regular expression are received.\r\n *\r\n * @param {Regexp} regexp - regexp - The regular expression to filter messages with.\r\n * @param {Function=} callback - Optional callback to remove. If none is defined,\r\n * remove all callbacks for messages matching the regular expression.\r\n */\n\n }, {\n key: "stopListeningByRegexp",\n value: function stopListeningByRegexp(regexp, callback) {\n var _this = this;\n\n var messages = Object.keys(this._callbacks).filter(function (message) {\n return regexp.test(message);\n });\n messages.forEach(function (message) {\n _this.stopListening(message, callback);\n });\n }\n /**\r\n * Prevent any functions from being executed when any message is received for\r\n * this object.\r\n */\n\n }, {\n key: "stopListeningToAll",\n value: function stopListeningToAll() {\n var messages = Object.keys(this._callbacks);\n\n for (var i = messages.length - 1; i > -1; i--) {\n this.stopListening(messages[i]);\n }\n }\n /**\r\n * Send a message, causing listener functions for the message on this object\r\n * to be executed.\r\n *\r\n * @param {string} message - The message to emit.\r\n * @param {any=} value - Optional argument to pass to listener callbacks.\r\n */\n\n }, {\n key: "emit",\n value: function emit(message, value) {\n if (this._callbacks[message] === undefined) {\n return;\n }\n\n message = this._createLocalMessage(message);\n\n var event = this._createEvent(message, value);\n\n this._dispatcher.dispatchEvent(event);\n }\n /**\r\n * Execute a function when a message is received for the global Messenger instance.\r\n *\r\n * @static\r\n *\r\n * @param {string} message - The message to listen for.\r\n * @param {Function} callback - Function to execute once the message is received.\r\n */\n\n }], [{\n key: "listenTo",\n value: function listenTo(message, callback, messenger) {\n this.GlobalMessenger.listenTo(message, callback, messenger);\n }\n /**\r\n * Prevent a function from being executed when a message is received for the\r\n * global Messenger instance.\r\n *\r\n * @static\r\n *\r\n * @param {string} message - The message to stop listening for.\r\n * @param {Function=} callback - Optional callback to remove. If none is defined,\r\n * remove all callbacks for the message.\r\n */\n\n }, {\n key: "stopListening",\n value: function stopListening(message, callback) {\n this.GlobalMessenger.stopListening(message, callback);\n }\n /**\r\n * De-register callback(s) from being executed on the global messengerr instance\r\n * when messages matching the given regular expression are received.\r\n *\r\n * @param {Regexp} regexp - regexp - The regular expression to filter messages with.\r\n * @param {Function=} callback - Optional callback to remove. If none is defined,\r\n * remove all callbacks for messages matching the regular expression.\r\n */\n\n }, {\n key: "stopListeningByRegexp",\n value: function stopListeningByRegexp(regexp, callback) {\n var _this2 = this;\n\n var messages = Object.keys(this.GlobalMessenger._callbacks).filter(function (message) {\n return regexp.test(message);\n });\n messages.forEach(function (message) {\n _this2.stopListening(message, callback);\n });\n }\n /**\r\n * Prevent any functions from being executed when any message is received for\r\n * the global Messenger instance.\r\n *\r\n * @static\r\n */\n\n }, {\n key: "stopListeningToAll",\n value: function stopListeningToAll() {\n this.GlobalMessenger.stopListeningToAll();\n }\n /**\r\n * Send a message, causing listener functions for the message on the global Messenger\r\n * instance to be executed.\r\n *\r\n * @static\r\n *\r\n * @param {string} message - The message to emit.\r\n * @param {any=} value - Optional argument to pass to listener callbacks.\r\n */\n\n }, {\n key: "emit",\n value: function emit(message, value) {\n this.GlobalMessenger.emit(message, value);\n }\n }]);\n\n return Messenger;\n}();\n\nObject.defineProperties(Messenger_Messenger, {\n GlobalMessenger: {\n value: new Messenger_Messenger(),\n writable: false\n },\n EVENTS: {\n value: {},\n writable: false\n }\n});\n/* harmony default export */ var core_Messenger = (Messenger_Messenger);\n// CONCATENATED MODULE: ./src/three.js/Messenger.js\nfunction Messenger_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { Messenger_typeof = function _typeof(obj) { return typeof obj; }; } else { Messenger_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return Messenger_typeof(obj); }\n\nfunction three_js_Messenger_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction three_js_Messenger_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction three_js_Messenger_createClass(Constructor, protoProps, staticProps) { if (protoProps) three_js_Messenger_defineProperties(Constructor.prototype, protoProps); if (staticProps) three_js_Messenger_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction Messenger_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) Messenger_setPrototypeOf(subClass, superClass); }\n\nfunction Messenger_setPrototypeOf(o, p) { Messenger_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return Messenger_setPrototypeOf(o, p); }\n\nfunction Messenger_createSuper(Derived) { var hasNativeReflectConstruct = Messenger_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = Messenger_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = Messenger_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return Messenger_possibleConstructorReturn(this, result); }; }\n\nfunction Messenger_possibleConstructorReturn(self, call) { if (call && (Messenger_typeof(call) === "object" || typeof call === "function")) { return call; } return Messenger_assertThisInitialized(self); }\n\nfunction Messenger_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction Messenger_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction Messenger_getPrototypeOf(o) { Messenger_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return Messenger_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/**\r\n * @extends core/Messenger\r\n * @alias three.js/Messenger\r\n */\n\nvar three_js_Messenger_Messenger = /*#__PURE__*/function (_CoreMessenger) {\n Messenger_inherits(Messenger, _CoreMessenger);\n\n var _super = Messenger_createSuper(Messenger);\n\n /**\r\n * @constructor\r\n *\r\n * @param {any=} id - Id for the object. If none is provided a new id will\r\n * be created. Id should be able to be represented as a string.\r\n */\n function Messenger(id) {\n var _this;\n\n three_js_Messenger_classCallCheck(this, Messenger);\n\n _this = _super.call(this, id);\n _this._dispatcher = Messenger_assertThisInitialized(_this);\n return _this;\n }\n\n three_js_Messenger_createClass(Messenger, [{\n key: "_createEvent",\n value: function _createEvent(message, value) {\n return {\n detail: value,\n type: message\n };\n }\n }]);\n\n return Messenger;\n}(core_Messenger); // Assign Three.js EventDispatcher functionality to the Messenger class\n\n\nObject.getOwnPropertyNames(THREE.EventDispatcher.prototype).filter(function (prop) {\n return prop !== \'constructor\';\n}).forEach(function (prop) {\n three_js_Messenger_Messenger.prototype[prop] = THREE.EventDispatcher.prototype[prop];\n});\nObject.defineProperty(three_js_Messenger_Messenger, \'GlobalMessenger\', {\n value: new three_js_Messenger_Messenger(),\n writable: false\n});\n/* harmony default export */ var three_js_Messenger = (three_js_Messenger_Messenger);\n// CONCATENATED MODULE: ./src/core/AbstractHostFeature.js\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || AbstractHostFeature_unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\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."); }\n\nfunction AbstractHostFeature_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return AbstractHostFeature_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return AbstractHostFeature_arrayLikeToArray(o, minLen); }\n\nfunction AbstractHostFeature_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction AbstractHostFeature_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction AbstractHostFeature_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction AbstractHostFeature_createClass(Constructor, protoProps, staticProps) { if (protoProps) AbstractHostFeature_defineProperties(Constructor.prototype, protoProps); if (staticProps) AbstractHostFeature_defineProperties(Constructor, staticProps); return Constructor; }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/**\r\n * Base class for all host features. Keeps a reference to the host object managing\r\n * the feature.\r\n *\r\n * @abstract\r\n *\r\n * @property {Object} EVENTS - Built-in messages that the feature emits. When the\r\n * feature is added to a {@link core/HostObject}, event names will be prefixed by the\r\n * name of the feature class + \'.\'.\r\n * @property {string} [EVENTS.update=onUpdate] - Message that is emitted after\r\n * each call to [update]{@link AbstractHostFeature#update}.\r\n * @property {Object} SERVICES - Any AWS services that are necessary for the\r\n * feature to function.\r\n */\n\nvar AbstractHostFeature_AbstractHostFeature = /*#__PURE__*/function () {\n /**\r\n * @constructor\r\n *\r\n * @param {core/HostObject} host - The HostObject managing the feature.\r\n */\n function AbstractHostFeature(host) {\n AbstractHostFeature_classCallCheck(this, AbstractHostFeature);\n\n this._host = host;\n }\n /**\r\n * Adds a namespace to the host with the name of the feature to contain properties\r\n * and methods from the feature that users of the host need access to.\r\n */\n\n\n AbstractHostFeature_createClass(AbstractHostFeature, [{\n key: "installApi",\n value: function installApi() {\n var _this = this;\n\n var events = {};\n var api = {\n EVENTS: events\n }; // Add the class name to event names\n\n Object.entries(this.constructor.EVENTS).forEach(function (_ref) {\n var _ref2 = _slicedToArray(_ref, 2),\n name = _ref2[0],\n value = _ref2[1];\n\n events[name] = "".concat(_this.constructor.name, ".").concat(value);\n });\n this._host[this.constructor.name] = api;\n return api;\n }\n /**\r\n * Gets the host that manages the feature.\r\n *\r\n * @readonly\r\n */\n\n }, {\n key: "host",\n get: function get() {\n return this._host;\n }\n /**\r\n * Gets the engine owner object of the host.\r\n *\r\n * @readonly\r\n */\n\n }, {\n key: "owner",\n get: function get() {\n return this._host.owner;\n }\n /**\r\n * Listen to a feature message from the host object.\r\n *\r\n * @param {string} message - Message to listen for.\r\n * @param {Function} callback - The callback to execute when the message is received.\r\n */\n\n }, {\n key: "listenTo",\n value: function listenTo(message, callback) {\n this._host.listenTo(message, callback);\n }\n /**\r\n * Listen to a feature message from the global messenger. Feature messages will\r\n * be prefixed with the class name of the feature.\r\n *\r\n * @param {string} message - Message to listen for.\r\n * @param {Function} callback - The callback to execute when the message is received.\r\n */\n\n }, {\n key: "stopListening",\n value:\n /**\r\n * Stop listening to a message from the host object.\r\n *\r\n * @param {string} message - Message to stop listening for.\r\n * @param {Function=} callback - Optional callback to remove. If none is defined,\r\n * remove all callbacks for the message.\r\n */\n function stopListening(message, callback) {\n this._host.stopListening(message, callback);\n }\n /**\r\n * Stop listening to a message from the global messenger.\r\n *\r\n * @param {string} message - Message to stop listening for.\r\n * @param {Function=} callback - Optional callback to remove. If none is defined,\r\n * remove all callbacks for the message.\r\n */\n\n }, {\n key: "stopListeningByRegexp",\n value:\n /**\r\n * Stop listening to a message matching the given regular expression from the\r\n * host object.\r\n *\r\n * @param {Regexp} regexp - The regular expression to stop listening for.\r\n * @param {Function=} callback - Optional callback to remove. If none is defined,\r\n * remove all callbacks for the message.\r\n */\n function stopListeningByRegexp(regexp, callback) {\n this._host.stopListeningByRegexp(regexp, callback);\n }\n /**\r\n * Stop listening to a message matching the given regular expression from the\r\n * global messenger.\r\n *\r\n * @param {Regexp} regexp - The regular expression to stop listening for.\r\n * @param {Function=} callback - Optional callback to remove. If none is defined,\r\n * remove all callbacks for the message.\r\n */\n\n }, {\n key: "stopListeningToAll",\n value:\n /**\r\n * Stop listening to all messages.\r\n */\n function stopListeningToAll() {\n this._host.stopListeningToAll();\n }\n /**\r\n * Stop listening to all feature messages.\r\n */\n\n }, {\n key: "emit",\n value:\n /**\r\n * Emit feature messages from the host. Feature messages will be prefixed with\r\n * the class name of the feature.\r\n *\r\n * @param {string} message - The message to emit.\r\n * @param {any=} value - Optional parameter to pass to listener callbacks.\r\n */\n function emit(message, value) {\n message = "".concat(this.constructor.name, ".").concat(message);\n\n this._host.emit(message, value);\n }\n /**\r\n * Emit feature messages from the global messenger. Feature messages will be prefixed\r\n * with the class name of the feature.\r\n *\r\n * @param {string} message - The message to emit.\r\n * @param {any=} value - Optional parameter to pass to listener callbacks.\r\n */\n\n }, {\n key: "update",\n value:\n /**\r\n * Executes each time the host is updated.\r\n *\r\n * @param {number} deltaTime - Amount of time since the last host update was\r\n * called.\r\n */\n function update(deltaTime) {\n this.emit(this.constructor.EVENTS.update, deltaTime);\n }\n /**\r\n * Clean up once the feature is no longer in use. Remove the feature namespace\r\n * from the host and remove reference to the host.\r\n */\n\n }, {\n key: "discard",\n value: function discard() {\n var _this2 = this;\n\n Object.keys(this._host[this.constructor.name]).forEach(function (name) {\n delete _this2._host[_this2.constructor.name][name];\n });\n delete this._host[this.constructor.name];\n delete this._host;\n }\n /**\r\n * Applies a sequence of mixin class factory functions to this class and\r\n * returns the result. Each function is expected to return a class that\r\n * extends the class it was given. The functions are applied in the order\r\n * that parameters are given, meaning that the first factory will\r\n * extend this base class.\r\n *\r\n * @param {...Function} mixinClassFactories Class factory functions that will\r\n * be applied.\r\n *\r\n * @returns {Class} A class that is the result of applying the factory functions.\r\n * The resulting class will always inherit from AbstractHostFeature.\r\n */\n\n }], [{\n key: "listenTo",\n value: function listenTo(message, callback) {\n message = "".concat(this.name, ".").concat(message);\n three_js_Messenger.listenTo(message, callback);\n }\n }, {\n key: "stopListening",\n value: function stopListening(message, callback) {\n message = "".concat(this.name, ".").concat(message);\n three_js_Messenger.stopListening(message, callback);\n }\n }, {\n key: "stopListeningByRegexp",\n value: function stopListeningByRegexp(regexp, callback) {\n regexp = new RegExp("^".concat(this.name, ".").concat(regexp.source.replace(/\\^/, \'\')));\n three_js_Messenger.stopListeningByRegexp(regexp, callback);\n }\n }, {\n key: "stopListeningToAll",\n value: function stopListeningToAll() {\n three_js_Messenger.stopListeningByRegexp(new RegExp("^".concat(this.name, ".")));\n }\n }, {\n key: "emit",\n value: function emit(message, value) {\n message = "".concat(this.name, ".").concat(message);\n three_js_Messenger.emit(message, value);\n }\n }, {\n key: "mix",\n value: function mix() {\n var ResultClass = this;\n\n for (var _len = arguments.length, mixinClassFactories = new Array(_len), _key = 0; _key < _len; _key++) {\n mixinClassFactories[_key] = arguments[_key];\n }\n\n mixinClassFactories.forEach(function (mixinClassFactory) {\n ResultClass = mixinClassFactory(ResultClass);\n });\n return ResultClass;\n }\n }]);\n\n return AbstractHostFeature;\n}();\n\nObject.defineProperties(AbstractHostFeature_AbstractHostFeature, {\n EVENTS: {\n value: {\n update: \'onUpdate\'\n },\n writable: false\n },\n SERVICES: {\n value: {},\n writable: false\n }\n});\n/* harmony default export */ var core_AbstractHostFeature = (AbstractHostFeature_AbstractHostFeature);\n// CONCATENATED MODULE: ./src/core/HostObject.js\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction HostObject_construct(Parent, args, Class) { if (HostObject_isNativeReflectConstruct()) { HostObject_construct = Reflect.construct; } else { HostObject_construct = function _construct(Parent, args, Class) { var a = [null]; a.push.apply(a, args); var Constructor = Function.bind.apply(Parent, a); var instance = new Constructor(); if (Class) HostObject_setPrototypeOf(instance, Class.prototype); return instance; }; } return HostObject_construct.apply(null, arguments); }\n\nfunction HostObject_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { HostObject_typeof = function _typeof(obj) { return typeof obj; }; } else { HostObject_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return HostObject_typeof(obj); }\n\nfunction HostObject_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction HostObject_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction HostObject_createClass(Constructor, protoProps, staticProps) { if (protoProps) HostObject_defineProperties(Constructor.prototype, protoProps); if (staticProps) HostObject_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction HostObject_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) HostObject_setPrototypeOf(subClass, superClass); }\n\nfunction HostObject_setPrototypeOf(o, p) { HostObject_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return HostObject_setPrototypeOf(o, p); }\n\nfunction HostObject_createSuper(Derived) { var hasNativeReflectConstruct = HostObject_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = HostObject_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = HostObject_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return HostObject_possibleConstructorReturn(this, result); }; }\n\nfunction HostObject_possibleConstructorReturn(self, call) { if (call && (HostObject_typeof(call) === "object" || typeof call === "function")) { return call; } return HostObject_assertThisInitialized(self); }\n\nfunction HostObject_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction HostObject_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction HostObject_getPrototypeOf(o) { HostObject_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return HostObject_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n/**\r\n * Object that manages access to all Host features. Contains a reference to\r\n * engine-specific visuals if applicable.\r\n *\r\n * @extends core/Messenger\r\n * @alias core/HostObject\r\n *\r\n * @property {Object} EVENTS - Built-in messages that the Messenger emits.\r\n * @property {string} [EVENTS.update=\'onUpdate\'] - Message that is emitted after\r\n * each call to [update]{@link core/HostObject#update}.\r\n * @property {string} [EVENTS.addFeature=\'onAddFeature\'] - Message that is emitted\r\n * after each call to [addFeature]{@link core/HostObject#addFeature}.\r\n * @property {string} [EVENTS.removeFeature=\'onRemoveFeature\'] - Message that is emitted\r\n * after each call to [removeFeature]{@link core/HostObject#removeFeature}.\r\n */\n\nvar HostObject_HostObject = /*#__PURE__*/function (_Messenger) {\n HostObject_inherits(HostObject, _Messenger);\n\n var _super = HostObject_createSuper(HostObject);\n\n /**\r\n * @constructor\r\n *\r\n * @param {Object=} options - Options for the host.\r\n * @param {Object=} options.owner - Optional engine-specific owner of the host.\r\n */\n function HostObject() {\n var _this;\n\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n _ref$owner = _ref.owner,\n owner = _ref$owner === void 0 ? {} : _ref$owner;\n\n HostObject_classCallCheck(this, HostObject);\n\n // If an owner is specified, use its id for messaging\n _this = _super.call(this, owner.id);\n _this._owner = owner;\n _this._features = {};\n _this._waits = [];\n _this._lastUpdate = _this.now;\n return _this;\n }\n /**\r\n * Gets the engine owner object of the host.\r\n *\r\n * @readonly\r\n * @type {Object}\r\n */\n\n\n HostObject_createClass(HostObject, [{\n key: "owner",\n get: function get() {\n return this._owner;\n }\n /**\r\n * Gets the current time in milliseconds.\r\n *\r\n * @readonly\r\n * @type {number}\r\n */\n\n }, {\n key: "now",\n get: function get() {\n return Date.now();\n }\n /**\r\n * Gets the amount of time in milliseconds since update was last called.\r\n *\r\n * @readonly\r\n * @type {number}\r\n */\n\n }, {\n key: "deltaTime",\n get: function get() {\n return this.now - this._lastUpdate;\n }\n /**\r\n * This function should be called in the engine\'s render loop. Executes update\r\n * loops for all features.\r\n */\n\n }, {\n key: "update",\n value: function update() {\n var currentTime = this.now;\n var dt = this.deltaTime; // Progress stored waits\n\n this._waits.forEach(function (wait) {\n wait.execute(dt);\n }); // Update all features\n\n\n Object.values(this._features).forEach(function (feature) {\n feature.update(dt);\n }); // Notify listeners an update occured\n\n this.emit(this.constructor.EVENTS.update, dt);\n this._lastUpdate = currentTime;\n }\n /**\r\n * Return a deferred promise that will wait a given number of seconds before\r\n * resolving. The host will continuously update the wait promise during the\r\n * update loop until it resolves.\r\n *\r\n * @param {number} [seconds=0] - Number of seconds to wait before resolving.\r\n * @param {Object=} options - Optional options object\r\n * @param {Function} [options.onFinish] - Callback to execute once the wait time\r\n * is met.\r\n * @param {Function=} options.onProgress - Callback to execute each time the wait\r\n * time progresses towards the target number of seconds. The amount of progress\r\n * as a 0-1 percentage is passed as an argument.\r\n * @param {Function=} options.onCancel - Callback to execute if the user cancels\r\n * the wait before completion.\r\n * @param {Function=} options.onError - Callback to execute if the wait stops\r\n * because an error is encountered. The error message is passed as a parameter.\r\n *\r\n * @returns {Deferred}\r\n */\n\n }, {\n key: "wait",\n value: function wait(seconds) {\n var _this2 = this;\n\n var _ref2 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n onFinish = _ref2.onFinish,\n onProgress = _ref2.onProgress,\n onCancel = _ref2.onCancel,\n onError = _ref2.onError;\n\n var wait = core_Utils.wait(seconds, {\n onFinish: onFinish,\n onProgress: onProgress,\n onCancel: onCancel,\n onError: onError\n });\n\n this._waits.push(wait); // Once the wait promise is no longer pending remove it from the waits array\n\n\n var onComplete = function onComplete() {\n _this2._waits.splice(_this2._waits.indexOf(wait), 1);\n };\n\n wait.then(onComplete, onComplete);\n return wait;\n }\n /**\r\n * Instantiate a new Host feature and store it. Features must inherit from\r\n * AbstractHostFeature.\r\n *\r\n * @param {Class} FeatureClass - Class that will instantiate the feature. Must\r\n * extend {@link AbstractHostFeature}.\r\n * @param {boolean} [force=false] - Whether or not to overwrite an existing\r\n * feature if one of this type already exists on the object.\r\n * @param {...any} args - Additional arguments to pass to the FeatureClass\r\n * constructor. The HostObject will always be passed as the first argument.\r\n *\r\n * @returns {boolean} - Whether or not a feature was successfully added.\r\n */\n\n }, {\n key: "addFeature",\n value: function addFeature(FeatureClass) {\n var force = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n var inputType = HostObject_typeof(FeatureClass); // Make sure the FeatureClass can be executed\n\n\n if (inputType !== \'function\') {\n throw new Error("Cannot add feature to host ".concat(this.id, ". FeatureClass must be a class."));\n } // Make sure the feature is a host feature\n else if (!(FeatureClass.prototype instanceof core_AbstractHostFeature)) {\n throw new Error("Cannot add feature ".concat(FeatureClass.name, " to host ").concat(this.id, ". FeatureClass must extend AbstractHostFeature."));\n } // Check if the FeatureClass already exists on this object\n\n\n if (this._features[FeatureClass.name] !== undefined) {\n if (force) {\n console.warn("Feature ".concat(FeatureClass.name, " already exists on host ").concat(this.id, ". Existing feature will be overwritten."));\n } else {\n throw new Error("Feature ".concat(FeatureClass.name, " already exists on host ").concat(this.id, ". Use \'force\' argument to overwrite the feature."));\n }\n } // Initialize the feature\n\n\n for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n args[_key - 2] = arguments[_key];\n }\n\n var feature = HostObject_construct(FeatureClass, [this].concat(args));\n\n feature.installApi();\n this._features[FeatureClass.name] = feature;\n this.emit(this.constructor.EVENTS.addFeature, FeatureClass.name);\n return true;\n }\n /**\r\n * Remove a feature from the object.\r\n *\r\n * @param {string} typeName - Name of the type of feature to remove.\r\n *\r\n * @returns {boolean} - Whether or not a feature was successfully removed.\r\n */\n\n }, {\n key: "removeFeature",\n value: function removeFeature(typeName) {\n if (this._features[typeName] === undefined) {\n console.warn("Feature of type ".concat(typeName, " does not exist on host ").concat(this.id, ". No feature will be removed."));\n return false;\n } else {\n // Remove the feature\n this.emit(this.constructor.EVENTS.removeFeature, typeName);\n\n this._features[typeName].discard();\n\n delete this._features[typeName];\n return true;\n }\n }\n /**\r\n * Indicate whether a specified feature is installed on the host.\r\n *\r\n * @param {string} typeName - Name of the type of feature to look for.\r\n *\r\n * @returns {boolean}\r\n */\n\n }, {\n key: "hasFeature",\n value: function hasFeature(typeName) {\n return !!this._features[typeName];\n }\n /**\r\n * List the names of the features installed on the host.\r\n *\r\n * @returns {Array.}\r\n */\n\n }, {\n key: "listFeatures",\n value: function listFeatures() {\n return Object.keys(this._features);\n }\n }]);\n\n return HostObject;\n}(three_js_Messenger);\n\nObject.defineProperty(HostObject_HostObject, \'EVENTS\', {\n value: _objectSpread(_objectSpread({}, Object.getPrototypeOf(HostObject_HostObject).EVENTS), {}, {\n update: \'onUpdate\',\n addFeature: \'onAddFeature\',\n removeFeature: \'onRemoveFeature\'\n }),\n writable: false\n});\n/* harmony default export */ var core_HostObject = (HostObject_HostObject);\n// CONCATENATED MODULE: ./src/three.js/HostObject.js\nfunction three_js_HostObject_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { three_js_HostObject_typeof = function _typeof(obj) { return typeof obj; }; } else { three_js_HostObject_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return three_js_HostObject_typeof(obj); }\n\nfunction three_js_HostObject_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction three_js_HostObject_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) three_js_HostObject_setPrototypeOf(subClass, superClass); }\n\nfunction three_js_HostObject_setPrototypeOf(o, p) { three_js_HostObject_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return three_js_HostObject_setPrototypeOf(o, p); }\n\nfunction three_js_HostObject_createSuper(Derived) { var hasNativeReflectConstruct = three_js_HostObject_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = three_js_HostObject_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = three_js_HostObject_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return three_js_HostObject_possibleConstructorReturn(this, result); }; }\n\nfunction three_js_HostObject_possibleConstructorReturn(self, call) { if (call && (three_js_HostObject_typeof(call) === "object" || typeof call === "function")) { return call; } return three_js_HostObject_assertThisInitialized(self); }\n\nfunction three_js_HostObject_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction three_js_HostObject_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction three_js_HostObject_getPrototypeOf(o) { three_js_HostObject_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return three_js_HostObject_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/**\r\n * Threejs Clock object\r\n *\r\n * @external "THREE.Clock"\r\n * @see https://threejs.org/docs/#api/en/core/Clock\r\n */\n\n/**\r\n * @alias three.js/HostObject\r\n * @extends core/HostObject\r\n */\n\nvar three_js_HostObject_HostObject = /*#__PURE__*/function (_CoreHostObject) {\n three_js_HostObject_inherits(HostObject, _CoreHostObject);\n\n var _super = three_js_HostObject_createSuper(HostObject);\n\n /**\r\n * @constructor\r\n *\r\n * @param {Object=} options - Options for the host.\r\n * @param {Object=} options.owner - Optional engine-specific owner of the host.\r\n * @param {external:"THREE.Clock"=} options.clock - Optional clock to manage time.\r\n */\n function HostObject() {\n var _this;\n\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n three_js_HostObject_classCallCheck(this, HostObject);\n\n _this = _super.call(this, options);\n _this._clock = options.clock;\n\n if (_this._clock) {\n Object.defineProperty(three_js_HostObject_assertThisInitialized(_this), \'now\', {\n get: function get() {\n return _this._clock.getElapsedTime() * 1000;\n }\n });\n _this._lastUpdate = _this.now;\n }\n\n return _this;\n }\n\n return HostObject;\n}(core_HostObject);\n\n/* harmony default export */ var three_js_HostObject = (three_js_HostObject_HostObject);\n// CONCATENATED MODULE: ./src/core/FeatureDependentInterface.js\nfunction FeatureDependentInterface_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { FeatureDependentInterface_typeof = function _typeof(obj) { return typeof obj; }; } else { FeatureDependentInterface_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return FeatureDependentInterface_typeof(obj); }\n\nfunction FeatureDependentInterface_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction FeatureDependentInterface_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { FeatureDependentInterface_ownKeys(Object(source), true).forEach(function (key) { FeatureDependentInterface_defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { FeatureDependentInterface_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction FeatureDependentInterface_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction FeatureDependentInterface_slicedToArray(arr, i) { return FeatureDependentInterface_arrayWithHoles(arr) || FeatureDependentInterface_iterableToArrayLimit(arr, i) || FeatureDependentInterface_unsupportedIterableToArray(arr, i) || FeatureDependentInterface_nonIterableRest(); }\n\nfunction FeatureDependentInterface_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."); }\n\nfunction FeatureDependentInterface_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return FeatureDependentInterface_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return FeatureDependentInterface_arrayLikeToArray(o, minLen); }\n\nfunction FeatureDependentInterface_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction FeatureDependentInterface_iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction FeatureDependentInterface_arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction _get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return _get(target, property, receiver || target); }\n\nfunction _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = FeatureDependentInterface_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction FeatureDependentInterface_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) FeatureDependentInterface_setPrototypeOf(subClass, superClass); }\n\nfunction FeatureDependentInterface_setPrototypeOf(o, p) { FeatureDependentInterface_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return FeatureDependentInterface_setPrototypeOf(o, p); }\n\nfunction FeatureDependentInterface_createSuper(Derived) { var hasNativeReflectConstruct = FeatureDependentInterface_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = FeatureDependentInterface_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = FeatureDependentInterface_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return FeatureDependentInterface_possibleConstructorReturn(this, result); }; }\n\nfunction FeatureDependentInterface_possibleConstructorReturn(self, call) { if (call && (FeatureDependentInterface_typeof(call) === "object" || typeof call === "function")) { return call; } return FeatureDependentInterface_assertThisInitialized(self); }\n\nfunction FeatureDependentInterface_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction FeatureDependentInterface_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction FeatureDependentInterface_getPrototypeOf(o) { FeatureDependentInterface_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return FeatureDependentInterface_getPrototypeOf(o); }\n\nfunction FeatureDependentInterface_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction FeatureDependentInterface_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction FeatureDependentInterface_createClass(Constructor, protoProps, staticProps) { if (protoProps) FeatureDependentInterface_defineProperties(Constructor.prototype, protoProps); if (staticProps) FeatureDependentInterface_defineProperties(Constructor, staticProps); return Constructor; }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/* eslint-disable no-unused-vars */\n\n/* eslint-disable max-classes-per-file */\n\n/**\r\n * Class factory interface for features that are dependent on other features being\r\n * present on the host. Event dependencies will be listened for when a feature of\r\n * matching type is added to the host and will stop being listened for when one\r\n * is removed. If the feature is already present when constructed, events will\r\n * be listened for right away.\r\n *\r\n * @interface\r\n *\r\n * @property {Object} EVENT_DEPENDENCIES - Events that the feature should start/stop\r\n * listening for when a feature of type FeatureName is added/removed from the host.\r\n * Event dependencies should follow the signature:\r\n * { FeatureName: { eventName: callbackName, ... }, ... }\r\n */\n\nvar FeatureDependentInterface_FeatureDependentInterface = /*#__PURE__*/function () {\n function FeatureDependentInterface() {\n FeatureDependentInterface_classCallCheck(this, FeatureDependentInterface);\n }\n\n FeatureDependentInterface_createClass(FeatureDependentInterface, [{\n key: "_onFeatureAdded",\n value:\n /**\r\n * Start listening for event dependencies that match the given feature type.\r\n *\r\n * @private\r\n *\r\n * @param {string} typeName - type of feature to listen for.\r\n */\n function _onFeatureAdded(typeName) {}\n /**\r\n * Stop listening for event dependencies that match the given feature type.\r\n *\r\n * @private\r\n *\r\n * @param {string} typeName - type of feature to stop listening for.\r\n */\n\n }, {\n key: "_onFeatureRemoved",\n value: function _onFeatureRemoved(typeName) {}\n /**\r\n * @augments {@link AbstractHostFeature#discard}\r\n */\n\n }, {\n key: "discard",\n value: function discard() {}\n /**\r\n * Creates a class that implements {@link FeatureDependentInterface} and extends\r\n * a specified base class.\r\n *\r\n * @param {Class} BaseClass - The class to extend.\r\n *\r\n * @return {Class} A class that extends `BaseClass` and implements {@link FeatureDependentInterface}.\r\n */\n\n }], [{\n key: "Mixin",\n value: function Mixin(BaseClass) {\n var FeatureDependentMixin = /*#__PURE__*/function (_BaseClass) {\n FeatureDependentInterface_inherits(FeatureDependentMixin, _BaseClass);\n\n var _super = FeatureDependentInterface_createSuper(FeatureDependentMixin);\n\n function FeatureDependentMixin(host) {\n var _this;\n\n FeatureDependentInterface_classCallCheck(this, FeatureDependentMixin);\n\n _this = _super.call(this, host);\n _this._host = host; // No need to listen for events if the mixin is in the prototype chain multiple times\n\n if (!_this._initialized) {\n _this._initialized = true; // Start listening for feature events\n\n _this._onFeatureAdded = _this._onFeatureAdded.bind(FeatureDependentInterface_assertThisInitialized(_this));\n _this._onFeatureRemoved = _this._onFeatureRemoved.bind(FeatureDependentInterface_assertThisInitialized(_this));\n\n _this._host.listenTo(three_js_HostObject.EVENTS.addFeature, _this._onFeatureAdded);\n\n _this._host.listenTo(three_js_HostObject.EVENTS.removeFeature, _this._onFeatureRemoved); // Register features that already exist\n\n\n Object.keys(_this.constructor.EVENT_DEPENDENCIES).forEach(function (typeName) {\n if (_this._host[typeName] !== undefined) {\n _this._onFeatureAdded(typeName);\n }\n });\n }\n\n return _this;\n }\n\n FeatureDependentInterface_createClass(FeatureDependentMixin, [{\n key: "_onFeatureAdded",\n value: function _onFeatureAdded(typeName) {\n var _this2 = this;\n\n if (this.constructor.EVENT_DEPENDENCIES[typeName] !== undefined) {\n var events = this.constructor.EVENT_DEPENDENCIES[typeName];\n Object.entries(events).forEach(function (_ref) {\n var _ref2 = FeatureDependentInterface_slicedToArray(_ref, 2),\n eventName = _ref2[0],\n callback = _ref2[1];\n\n _this2[callback] = _this2[callback].bind(_this2);\n\n _this2._host.listenTo(_this2._host[typeName].EVENTS[eventName], _this2[callback]);\n });\n }\n }\n }, {\n key: "_onFeatureRemoved",\n value: function _onFeatureRemoved(typeName) {\n var _this3 = this;\n\n if (this.constructor.EVENT_DEPENDENCIES[typeName] !== undefined) {\n var events = this.constructor.EVENT_DEPENDENCIES[typeName];\n Object.entries(events).forEach(function (_ref3) {\n var _ref4 = FeatureDependentInterface_slicedToArray(_ref3, 2),\n eventName = _ref4[0],\n callback = _ref4[1];\n\n _this3._host.stopListening(_this3._host[typeName].EVENTS[eventName], _this3[callback]);\n });\n }\n }\n }, {\n key: "discard",\n value: function discard() {\n var _this4 = this;\n\n // Stop listening for feature events\n this._host.stopListening(three_js_HostObject.EVENTS.addFeature, this._onFeatureAdded);\n\n this._host.stopListening(three_js_HostObject.EVENTS.removeFeature, this._onFeatureRemoved); // Stop listening to feature-specific events\n\n\n Object.keys(this.constructor.EVENT_DEPENDENCIES).forEach(function (typeName) {\n if (_this4._host[typeName] !== undefined) {\n _this4._onFeatureRemoved(typeName);\n }\n });\n\n _get(FeatureDependentInterface_getPrototypeOf(FeatureDependentMixin.prototype), "discard", this).call(this);\n }\n }]);\n\n return FeatureDependentMixin;\n }(BaseClass);\n\n var EVENT_DEPENDENCIES = BaseClass.EVENT_DEPENDENCIES || {};\n Object.defineProperties(FeatureDependentMixin, {\n EVENT_DEPENDENCIES: {\n value: FeatureDependentInterface_objectSpread({}, EVENT_DEPENDENCIES),\n writable: false\n }\n });\n return FeatureDependentMixin;\n }\n }]);\n\n return FeatureDependentInterface;\n}();\n/**\r\n * Event dependencies should follow the signature:\r\n * {\r\n * FeatureName: {\r\n * // Events that the feature should start/stop listening for when a feature\r\n * // of type FeatureName is added/removed from the host\r\n * {\r\n * eventName: callbackName,\r\n * ...\r\n * },\r\n * }\r\n * }\r\n */\n\n\nObject.defineProperties(FeatureDependentInterface_FeatureDependentInterface, {\n EVENT_DEPENDENCIES: {\n value: {},\n writable: false\n }\n});\n/* harmony default export */ var core_FeatureDependentInterface = (FeatureDependentInterface_FeatureDependentInterface);\n// CONCATENATED MODULE: ./src/core/animpack/AnimationFeatureDependentInterface.js\nfunction AnimationFeatureDependentInterface_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { AnimationFeatureDependentInterface_typeof = function _typeof(obj) { return typeof obj; }; } else { AnimationFeatureDependentInterface_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return AnimationFeatureDependentInterface_typeof(obj); }\n\nfunction AnimationFeatureDependentInterface_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction AnimationFeatureDependentInterface_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { AnimationFeatureDependentInterface_ownKeys(Object(source), true).forEach(function (key) { AnimationFeatureDependentInterface_defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { AnimationFeatureDependentInterface_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction AnimationFeatureDependentInterface_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction AnimationFeatureDependentInterface_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction AnimationFeatureDependentInterface_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction AnimationFeatureDependentInterface_createClass(Constructor, protoProps, staticProps) { if (protoProps) AnimationFeatureDependentInterface_defineProperties(Constructor.prototype, protoProps); if (staticProps) AnimationFeatureDependentInterface_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction AnimationFeatureDependentInterface_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) AnimationFeatureDependentInterface_setPrototypeOf(subClass, superClass); }\n\nfunction AnimationFeatureDependentInterface_setPrototypeOf(o, p) { AnimationFeatureDependentInterface_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return AnimationFeatureDependentInterface_setPrototypeOf(o, p); }\n\nfunction AnimationFeatureDependentInterface_createSuper(Derived) { var hasNativeReflectConstruct = AnimationFeatureDependentInterface_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = AnimationFeatureDependentInterface_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = AnimationFeatureDependentInterface_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return AnimationFeatureDependentInterface_possibleConstructorReturn(this, result); }; }\n\nfunction AnimationFeatureDependentInterface_possibleConstructorReturn(self, call) { if (call && (AnimationFeatureDependentInterface_typeof(call) === "object" || typeof call === "function")) { return call; } return AnimationFeatureDependentInterface_assertThisInitialized(self); }\n\nfunction AnimationFeatureDependentInterface_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction AnimationFeatureDependentInterface_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction AnimationFeatureDependentInterface_getPrototypeOf(o) { AnimationFeatureDependentInterface_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return AnimationFeatureDependentInterface_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/* eslint-disable no-unused-vars */\n\n/* eslint-disable max-classes-per-file */\n\n/**\r\n * Class factory interface for features that are dependent on the AnimationFeature\r\n * being present on the host. Layer and animation events will automatically be\r\n * listened for once a AnimationFeature is added to the host and stopped once it\r\n * is removed.\r\n *\r\n * @interface\r\n * @extends FeatureDependentInterface\r\n *\r\n * @property {Object} EVENT_DEPENDENCIES - Events that the feature should start/stop\r\n * listening for when a feature of type FeatureName is added/removed from the host.\r\n * @property {Object} EVENT_DEPENDENCIES.AnimationFeature - Events that are\r\n * specific to the AnimationFeature.\r\n * @property {string} [EVENT_DEPENDENCIES.AnimationFeature.addLayer=\'_onLayerAdded\'] -\r\n * The name of the method that will be executed when AnimationFeature addLayer\r\n * events are emitted.\r\n * @property {string} [EVENT_DEPENDENCIES.AnimationFeature.removeLayer=\'_onLayerRemoved\'] -\r\n * The name of the method that will be executed when AnimationFeature removeLayer\r\n * events are emitted.\r\n * @property {string} [EVENT_DEPENDENCIES.AnimationFeature.renameLayer=\'_onLayerRenamed\'] -\r\n * The name of the method that will be executed when AnimationFeature renameLayer\r\n * events are emitted.\r\n * @property {string} [EVENT_DEPENDENCIES.AnimationFeature.addAnimation=\'_onAnimationAdded\'] -\r\n * The name of the method that will be executed when AnimationFeature addAnimation\r\n * events are emitted.\r\n * @property {string} [EVENT_DEPENDENCIES.AnimationFeature.removeAnimation=\'_onAnimationRemoved\'] -\r\n * The name of the method that will be executed when AnimationFeature removeAnimation\r\n * events are emitted.\r\n * @property {string} [EVENT_DEPENDENCIES.AnimationFeature.renameAnimation=\'_onAnimationRenamed\'] -\r\n * The name of the method that will be executed when AnimationFeature renameAnimation\r\n * events are emitted.\r\n */\n\nvar AnimationFeatureDependentInterface_AnimationFeatureDependentInterface = /*#__PURE__*/function (_FeatureDependentInte) {\n AnimationFeatureDependentInterface_inherits(AnimationFeatureDependentInterface, _FeatureDependentInte);\n\n var _super = AnimationFeatureDependentInterface_createSuper(AnimationFeatureDependentInterface);\n\n function AnimationFeatureDependentInterface() {\n AnimationFeatureDependentInterface_classCallCheck(this, AnimationFeatureDependentInterface);\n\n return _super.apply(this, arguments);\n }\n\n AnimationFeatureDependentInterface_createClass(AnimationFeatureDependentInterface, [{\n key: "_onLayerAdded",\n value:\n /**\r\n * Executed when animation layer added events are caught.\r\n *\r\n * @private\r\n *\r\n * @param {string} name - Name of the layer that was added.\r\n */\n function _onLayerAdded(_ref) {\n var name = _ref.name;\n }\n /**\r\n * Executed when animation layer removed events are caught.\r\n *\r\n * @private\r\n *\r\n * @param {string} name - Name of the layer that was removed.\r\n */\n\n }, {\n key: "_onLayerRemoved",\n value: function _onLayerRemoved(_ref2) {\n var name = _ref2.name;\n }\n /**\r\n * Executed when animation layer renamed events are caught.\r\n *\r\n * @private\r\n *\r\n * @param {string} oldName - Name of the layer that was renamed.\r\n * @param {string} newName - New name of the layer.\r\n */\n\n }, {\n key: "_onLayerRenamed",\n value: function _onLayerRenamed(_ref3) {\n var oldName = _ref3.oldName,\n newName = _ref3.newName;\n }\n /**\r\n * Executed when animation added events are caught.\r\n *\r\n * @private\r\n *\r\n * @param {string} layerName - Name of the layer that an animation was added to.\r\n * @param {string} animationName - Name of the animation that was added.\r\n */\n\n }, {\n key: "_onAnimationAdded",\n value: function _onAnimationAdded(_ref4) {\n var layerName = _ref4.layerName,\n animationName = _ref4.animationName;\n }\n /**\r\n * Executed when animation removed events are caught.\r\n *\r\n * @private\r\n *\r\n * @param {string} layerName - Name of the layer that an animation was removed from.\r\n * @param {string} animationName - Name of the animation that was removed.\r\n */\n\n }, {\n key: "_onAnimationRemoved",\n value: function _onAnimationRemoved(_ref5) {\n var layerName = _ref5.layerName,\n animationName = _ref5.animationName;\n }\n /**\r\n * Executed when animation renamed events are caught.\r\n *\r\n * @private\r\n *\r\n * @param {string} layerName - Name of the layer that an animation belongs to.\r\n * @param {string} oldName - Name of the animation that was renamed.\r\n * @param {string} newName - New name of the animation.\r\n */\n\n }, {\n key: "_onAnimationRenamed",\n value: function _onAnimationRenamed(_ref6) {\n var layerName = _ref6.layerName,\n oldName = _ref6.oldName,\n newName = _ref6.newName;\n }\n /**\r\n * Creates a class that implements {@link AnimationFeatureDependentInterface}\r\n * and extends a specified base class.\r\n *\r\n * @param {Class} BaseClass - The class to extend.\r\n *\r\n * @return {Class} A class that extends `BaseClass` and implements {@link AnimationFeatureDependentInterface}.\r\n */\n\n }], [{\n key: "Mixin",\n value: function Mixin(BaseClass) {\n var ParentClass = core_FeatureDependentInterface.Mixin(BaseClass);\n\n var AnimationFeatureDependentMixin = /*#__PURE__*/function (_ParentClass) {\n AnimationFeatureDependentInterface_inherits(AnimationFeatureDependentMixin, _ParentClass);\n\n var _super2 = AnimationFeatureDependentInterface_createSuper(AnimationFeatureDependentMixin);\n\n function AnimationFeatureDependentMixin() {\n AnimationFeatureDependentInterface_classCallCheck(this, AnimationFeatureDependentMixin);\n\n return _super2.apply(this, arguments);\n }\n\n AnimationFeatureDependentInterface_createClass(AnimationFeatureDependentMixin, [{\n key: "_onLayerAdded",\n value: function _onLayerAdded(_ref7) {\n var name = _ref7.name;\n }\n }, {\n key: "_onLayerRemoved",\n value: function _onLayerRemoved(_ref8) {\n var name = _ref8.name;\n }\n }, {\n key: "_onLayerRenamed",\n value: function _onLayerRenamed(_ref9) {\n var oldName = _ref9.oldName,\n newName = _ref9.newName;\n }\n }, {\n key: "_onAnimationAdded",\n value: function _onAnimationAdded(_ref10) {\n var layerName = _ref10.layerName,\n animationName = _ref10.animationName;\n }\n }, {\n key: "_onAnimationRemoved",\n value: function _onAnimationRemoved(_ref11) {\n var layerName = _ref11.layerName,\n animationName = _ref11.animationName;\n }\n }, {\n key: "_onAnimationRenamed",\n value: function _onAnimationRenamed(_ref12) {\n var layerName = _ref12.layerName,\n oldName = _ref12.oldName,\n newName = _ref12.newName;\n }\n }]);\n\n return AnimationFeatureDependentMixin;\n }(ParentClass);\n\n Object.defineProperties(AnimationFeatureDependentMixin, {\n EVENT_DEPENDENCIES: {\n value: AnimationFeatureDependentInterface_objectSpread(AnimationFeatureDependentInterface_objectSpread({}, ParentClass.EVENT_DEPENDENCIES), AnimationFeatureDependentInterface.EVENT_DEPENDENCIES),\n writable: false\n }\n });\n return AnimationFeatureDependentMixin;\n }\n }]);\n\n return AnimationFeatureDependentInterface;\n}(core_FeatureDependentInterface);\n\nObject.defineProperties(AnimationFeatureDependentInterface_AnimationFeatureDependentInterface, {\n EVENT_DEPENDENCIES: {\n value: {\n AnimationFeature: {\n addLayer: \'_onLayerAdded\',\n removeLayer: \'_onLayerRemoved\',\n renameLayer: \'_onLayerRenamed\',\n addAnimation: \'_onAnimationAdded\',\n removeAnimation: \'_onAnimationRemoved\',\n renameAnimation: \'_onAnimationRenamed\'\n }\n },\n writable: false\n }\n});\n/* harmony default export */ var animpack_AnimationFeatureDependentInterface = (AnimationFeatureDependentInterface_AnimationFeatureDependentInterface);\n// CONCATENATED MODULE: ./src/core/animpack/ManagedAnimationLayerInterface.js\nfunction ManagedAnimationLayerInterface_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { ManagedAnimationLayerInterface_typeof = function _typeof(obj) { return typeof obj; }; } else { ManagedAnimationLayerInterface_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return ManagedAnimationLayerInterface_typeof(obj); }\n\nfunction ManagedAnimationLayerInterface_slicedToArray(arr, i) { return ManagedAnimationLayerInterface_arrayWithHoles(arr) || ManagedAnimationLayerInterface_iterableToArrayLimit(arr, i) || ManagedAnimationLayerInterface_unsupportedIterableToArray(arr, i) || ManagedAnimationLayerInterface_nonIterableRest(); }\n\nfunction ManagedAnimationLayerInterface_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."); }\n\nfunction ManagedAnimationLayerInterface_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return ManagedAnimationLayerInterface_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return ManagedAnimationLayerInterface_arrayLikeToArray(o, minLen); }\n\nfunction ManagedAnimationLayerInterface_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction ManagedAnimationLayerInterface_iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction ManagedAnimationLayerInterface_arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction ManagedAnimationLayerInterface_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction ManagedAnimationLayerInterface_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ManagedAnimationLayerInterface_ownKeys(Object(source), true).forEach(function (key) { ManagedAnimationLayerInterface_defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ManagedAnimationLayerInterface_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction ManagedAnimationLayerInterface_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction ManagedAnimationLayerInterface_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { ManagedAnimationLayerInterface_get = Reflect.get; } else { ManagedAnimationLayerInterface_get = function _get(target, property, receiver) { var base = ManagedAnimationLayerInterface_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return ManagedAnimationLayerInterface_get(target, property, receiver || target); }\n\nfunction ManagedAnimationLayerInterface_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = ManagedAnimationLayerInterface_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction ManagedAnimationLayerInterface_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction ManagedAnimationLayerInterface_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction ManagedAnimationLayerInterface_createClass(Constructor, protoProps, staticProps) { if (protoProps) ManagedAnimationLayerInterface_defineProperties(Constructor.prototype, protoProps); if (staticProps) ManagedAnimationLayerInterface_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction ManagedAnimationLayerInterface_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) ManagedAnimationLayerInterface_setPrototypeOf(subClass, superClass); }\n\nfunction ManagedAnimationLayerInterface_setPrototypeOf(o, p) { ManagedAnimationLayerInterface_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return ManagedAnimationLayerInterface_setPrototypeOf(o, p); }\n\nfunction ManagedAnimationLayerInterface_createSuper(Derived) { var hasNativeReflectConstruct = ManagedAnimationLayerInterface_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = ManagedAnimationLayerInterface_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = ManagedAnimationLayerInterface_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return ManagedAnimationLayerInterface_possibleConstructorReturn(this, result); }; }\n\nfunction ManagedAnimationLayerInterface_possibleConstructorReturn(self, call) { if (call && (ManagedAnimationLayerInterface_typeof(call) === "object" || typeof call === "function")) { return call; } return ManagedAnimationLayerInterface_assertThisInitialized(self); }\n\nfunction ManagedAnimationLayerInterface_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction ManagedAnimationLayerInterface_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction ManagedAnimationLayerInterface_getPrototypeOf(o) { ManagedAnimationLayerInterface_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return ManagedAnimationLayerInterface_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/* eslint-disable no-unused-vars */\n\n/* eslint-disable max-classes-per-file */\n\n/**\r\n * Class factory interface for that keeps track of layers and animations on a host.\r\n * Tracked assets are marked as inactive until layers and animations with matching\r\n * names are detected as present on the host.\r\n *\r\n * @interface\r\n * @extends AnimationFeatureDependentInterface\r\n *\r\n * @property {Object} DEFAULT_LAYER_OPTIONS - Default options to use when executing\r\n * {@link AnimationLayer} methods.\r\n * @property {number} [DEFAULT_LAYER_OPTIONS.blendTime=0.5] - Default time in seconds\r\n * to use when executing {@link AnimationLayer.setBlendWeight}.\r\n * @property {Object} [DEFAULT_LAYER_OPTIONS.animations={}] - Maps animation names\r\n * to default options objects to use for managed animations.\r\n */\n\nvar ManagedAnimationLayerInterface_ManagedAnimationLayerInterface = /*#__PURE__*/function (_AnimationFeatureDepe) {\n ManagedAnimationLayerInterface_inherits(ManagedAnimationLayerInterface, _AnimationFeatureDepe);\n\n var _super = ManagedAnimationLayerInterface_createSuper(ManagedAnimationLayerInterface);\n\n function ManagedAnimationLayerInterface() {\n ManagedAnimationLayerInterface_classCallCheck(this, ManagedAnimationLayerInterface);\n\n return _super.apply(this, arguments);\n }\n\n ManagedAnimationLayerInterface_createClass(ManagedAnimationLayerInterface, [{\n key: "registerLayer",\n value:\n /**\r\n * Start tracking keeping track of whether a layer with the given name is present\r\n * on the host.\r\n *\r\n * @param {string} name - Name of the layer to keep track of.\r\n * @param {Object=} options - Options for the layer.\r\n * @param {number=} options.blendTime - Default amount of time to use when\r\n * manipulating layer weights on this layer.\r\n * @param {Function=} options.easingFn - Default easing function to use when\r\n * manipulating layer weights on this layer.\r\n * @param {Object=} options.animations - Animations to keep track of on the layer.\r\n * Animations are represented as key/value pairs of animation names and their\r\n * options.\r\n */\n function registerLayer(name) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n }\n /**\r\n * Start tracking keeping track of whether an animation with the given name is\r\n * present on the host.\r\n *\r\n * @param {string} layerName - Name of the layer that will own the animation.\r\n * @param {string} animationName - Name of the animation to keep track of.\r\n * @param {Object=} options - Options for the animation.\r\n */\n\n }, {\n key: "registerAnimation",\n value: function registerAnimation(layerName, animationName) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n }\n /**\r\n * Set layer weights on tracked layers.\r\n *\r\n * @param {Function=} nameFilter - Predicate function to test each tracked layer\r\n * with. By default all layers will pass.\r\n * @param {number} weight - Weight value to set on layers.\r\n * @param {number=} seconds - Number of seconds it will take to reach the weight\r\n * on each layer. If undefined, each layers\' blendTime option is used.\r\n * @param {Function=} easingFn - Easing function to use when setting weight\r\n * on each layer. If undefined, each layers\' easingFn option is used.\r\n */\n\n }, {\n key: "setLayerWeights",\n value: function setLayerWeights() {\n var nameFilter = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : function () {\n return true;\n };\n var weight = arguments.length > 1 ? arguments[1] : undefined;\n var seconds = arguments.length > 2 ? arguments[2] : undefined;\n var easingFn = arguments.length > 3 ? arguments[3] : undefined;\n }\n /**\r\n * Set all tracked layers\' weights to 1.\r\n *\r\n * @param {number=} seconds - Number of seconds it will take to reach the weight\r\n * on each layer. If undefined, each layers\' blendTime option is used.\r\n * @param {Function=} easingFn - Easing function to use when setting weight\r\n * on each layer. If undefined, each layers\' easingFn option is used.\r\n */\n\n }, {\n key: "enable",\n value: function enable(seconds, easingFn) {}\n /**\r\n * Set all tracked layers\' weights to 0.\r\n *\r\n * @param {number=} seconds - Number of seconds it will take to reach the weight\r\n * on each layer. If undefined, each layers\' blendTime option is used.\r\n * @param {Function=} easingFn - Easing function to use when setting weight\r\n * on each layer. If undefined, each layers\' easingFn option is used.\r\n */\n\n }, {\n key: "disable",\n value: function disable(seconds, easingFn) {}\n /**\r\n * Creates a class that implements {@link ManagedAnimationLayerInterface}\r\n * and extends a specified base class.\r\n *\r\n * @param {Class} BaseClass - The class to extend.\r\n *\r\n * @return {Class} A class that extends `BaseClass` and implements {@link ManagedAnimationLayerInterface}.\r\n */\n\n }], [{\n key: "Mixin",\n value: function Mixin(BaseClass) {\n var ParentClass = animpack_AnimationFeatureDependentInterface.Mixin(BaseClass);\n\n var ManagedAnimationLayerMixin = /*#__PURE__*/function (_ParentClass) {\n ManagedAnimationLayerInterface_inherits(ManagedAnimationLayerMixin, _ParentClass);\n\n var _super2 = ManagedAnimationLayerInterface_createSuper(ManagedAnimationLayerMixin);\n\n function ManagedAnimationLayerMixin() {\n var _this;\n\n ManagedAnimationLayerInterface_classCallCheck(this, ManagedAnimationLayerMixin);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super2.call.apply(_super2, [this].concat(args));\n _this._managedLayers = {};\n return _this;\n }\n\n ManagedAnimationLayerInterface_createClass(ManagedAnimationLayerMixin, [{\n key: "_onFeatureAdded",\n value: function _onFeatureAdded(typeName) {\n var _this2 = this;\n\n ManagedAnimationLayerInterface_get(ManagedAnimationLayerInterface_getPrototypeOf(ManagedAnimationLayerMixin.prototype), "_onFeatureAdded", this).call(this, typeName);\n\n if (typeName !== \'AnimationFeature\') {\n return;\n }\n\n this._managedLayers = this._managedLayers || {}; // Detect new layers\n\n this._host.AnimationFeature.layers.forEach(function (name) {\n _this2._onLayerAdded({\n name: name\n });\n });\n }\n }, {\n key: "_onFeatureRemoved",\n value: function _onFeatureRemoved(typeName) {\n var _this3 = this;\n\n ManagedAnimationLayerInterface_get(ManagedAnimationLayerInterface_getPrototypeOf(ManagedAnimationLayerMixin.prototype), "_onFeatureRemoved", this).call(this, typeName);\n\n if (typeName !== \'AnimationFeature\') {\n return;\n }\n\n this._managedLayers = this._managedLayers || {}; // Deactivate the layers\n\n Object.keys(this._managedLayers).forEach(function (name) {\n _this3._onLayerRemoved({\n name: name\n });\n });\n }\n }, {\n key: "_onLayerAdded",\n value: function _onLayerAdded(_ref) {\n var _this4 = this;\n\n var name = _ref.name;\n\n // Mark the layer as active if it is managed\n if (this._managedLayers[name] !== undefined) {\n this._managedLayers[name].isActive = true; // Detect new animations\n\n this._host.AnimationFeature.getAnimations(name).forEach(function (animName) {\n _this4._onAnimationAdded({\n layerName: name,\n animationName: animName\n });\n });\n }\n }\n }, {\n key: "_onLayerRemoved",\n value: function _onLayerRemoved(_ref2) {\n var _this5 = this;\n\n var name = _ref2.name;\n\n // Deactivate the layer if it is managed\n if (this._managedLayers[name] !== undefined) {\n this._managedLayers[name].isActive = false; // Deactivate the animations\n\n Object.keys(this._managedLayers[name].animations).forEach(function (animName) {\n _this5._onAnimationRemoved({\n layerName: name,\n animationName: animName\n });\n });\n }\n }\n }, {\n key: "_onLayerRenamed",\n value: function _onLayerRenamed(_ref3) {\n var oldName = _ref3.oldName,\n newName = _ref3.newName;\n var layerOptions = this._managedLayers[oldName]; // Replace the layer key with the new name\n\n if (layerOptions !== undefined) {\n delete this._managedLayers[oldName];\n this._managedLayers[newName] = layerOptions;\n }\n }\n }, {\n key: "_onAnimationAdded",\n value: function _onAnimationAdded(_ref4) {\n var layerName = _ref4.layerName,\n animationName = _ref4.animationName;\n\n // Mark the animation as active if it is managed\n if (this._managedLayers[layerName] !== undefined && this._managedLayers[layerName].animations[animationName] !== undefined) {\n this._managedLayers[layerName].animations[animationName].isActive = true;\n }\n }\n }, {\n key: "_onAnimationRemoved",\n value: function _onAnimationRemoved(_ref5) {\n var layerName = _ref5.layerName,\n animationName = _ref5.animationName;\n\n // Deactivate the animation if it is managed\n if (this._managedLayers[layerName] !== undefined && this._managedLayers[layerName].animations[animationName] !== undefined) {\n this._managedLayers[layerName].animations[animationName].isActive = false;\n }\n }\n }, {\n key: "_onAnimationRenamed",\n value: function _onAnimationRenamed(_ref6) {\n var layerName = _ref6.layerName,\n oldName = _ref6.oldName,\n newName = _ref6.newName;\n\n if (this._managedLayers[layerName] !== undefined && this._managedLayers[layerName].animations[oldName] !== undefined) {\n // Replace the animation key with the new name\n var animOptions = this._managedLayers[layerName].animations[oldName];\n delete this._managedLayers[layerName].animations[oldName];\n this._managedLayers[layerName].animations[newName] = animOptions;\n }\n }\n }, {\n key: "registerLayer",\n value: function registerLayer(name) {\n var _this6 = this;\n\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n // Start with default options for each new layer\n if (this._managedLayers[name] === undefined) {\n this._managedLayers[name] = ManagedAnimationLayerInterface_objectSpread(ManagedAnimationLayerInterface_objectSpread({}, this.constructor.DEFAULT_LAYER_OPTIONS), {}, {\n animations: {}\n });\n } // Update all options except animations\n\n\n var layerOptions = this._managedLayers[name];\n options = ManagedAnimationLayerInterface_objectSpread({}, options);\n var animationOptions = options.animations || {};\n delete options.animations;\n Object.assign(layerOptions, options); // Check whether the layer can be manipulated now\n\n layerOptions.isActive = this._host.AnimationFeature !== undefined && this._host.AnimationFeature.layers.includes(name); // Register the animations\n\n Object.entries(animationOptions).forEach(function (_ref7) {\n var _ref8 = ManagedAnimationLayerInterface_slicedToArray(_ref7, 2),\n animName = _ref8[0],\n animOptions = _ref8[1];\n\n _this6.registerAnimation(name, animName, animOptions);\n });\n }\n }, {\n key: "registerAnimation",\n value: function registerAnimation(layerName, animationName) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n // Register the layer if it hasn\'t been registered yet\n if (this._managedLayers[layerName] === undefined) {\n this.registerLayer(layerName);\n } // Update animation options\n\n\n var animOptions = this._managedLayers[layerName].animations[animationName] || {};\n Object.assign(animOptions, options);\n this._managedLayers[layerName].animations[animationName] = animOptions; // Check whether the animation can be manipulated now\n\n this._managedLayers[layerName].animations[animationName].isActive = this._managedLayers[layerName].isActive && this._host.AnimationFeature.getAnimations(layerName).includes(animationName);\n }\n }, {\n key: "setLayerWeights",\n value: function setLayerWeights() {\n var _this7 = this;\n\n var nameFilter = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : function () {\n return true;\n };\n var weight = arguments.length > 1 ? arguments[1] : undefined;\n var seconds = arguments.length > 2 ? arguments[2] : undefined;\n var easingFn = arguments.length > 3 ? arguments[3] : undefined;\n var layerNames = Object.keys(this._managedLayers).filter(nameFilter);\n layerNames.forEach(function (name) {\n var layerOptions = _this7._managedLayers[name];\n\n if (layerOptions.isActive) {\n _this7._host.AnimationFeature.setLayerWeight(name, weight, seconds !== undefined ? seconds : layerOptions.blendTime, easingFn || layerOptions.easingFn);\n }\n });\n }\n }, {\n key: "enable",\n value: function enable(seconds, easingFn) {\n this.setLayerWeights(undefined, 1, seconds, easingFn);\n }\n }, {\n key: "disable",\n value: function disable(seconds, easingFn) {\n this.setLayerWeights(undefined, 0, seconds, easingFn);\n }\n }, {\n key: "installApi",\n value: function installApi() {\n var api = ManagedAnimationLayerInterface_get(ManagedAnimationLayerInterface_getPrototypeOf(ManagedAnimationLayerMixin.prototype), "installApi", this).call(this);\n\n Object.assign(api, {\n registerLayer: this.registerLayer.bind(this),\n registerAnimation: this.registerAnimation.bind(this),\n setLayerWeights: this.setLayerWeights.bind(this),\n enable: this.enable.bind(this),\n disable: this.disable.bind(this)\n });\n return api;\n }\n }]);\n\n return ManagedAnimationLayerMixin;\n }(ParentClass);\n\n Object.defineProperties(ManagedAnimationLayerMixin, {\n DEFAULT_LAYER_OPTIONS: {\n value: ManagedAnimationLayerInterface.DEFAULT_LAYER_OPTIONS,\n writable: false\n }\n });\n return ManagedAnimationLayerMixin;\n }\n }]);\n\n return ManagedAnimationLayerInterface;\n}(animpack_AnimationFeatureDependentInterface);\n\nObject.defineProperties(ManagedAnimationLayerInterface_ManagedAnimationLayerInterface, {\n DEFAULT_LAYER_OPTIONS: {\n value: {\n blendTime: 0.5,\n animations: {}\n },\n writable: false\n }\n});\n/* harmony default export */ var animpack_ManagedAnimationLayerInterface = (ManagedAnimationLayerInterface_ManagedAnimationLayerInterface);\n// CONCATENATED MODULE: ./src/core/awspack/TextToSpeechFeatureDependentInterface.js\nfunction TextToSpeechFeatureDependentInterface_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { TextToSpeechFeatureDependentInterface_typeof = function _typeof(obj) { return typeof obj; }; } else { TextToSpeechFeatureDependentInterface_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return TextToSpeechFeatureDependentInterface_typeof(obj); }\n\nfunction TextToSpeechFeatureDependentInterface_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction TextToSpeechFeatureDependentInterface_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { TextToSpeechFeatureDependentInterface_ownKeys(Object(source), true).forEach(function (key) { TextToSpeechFeatureDependentInterface_defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { TextToSpeechFeatureDependentInterface_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction TextToSpeechFeatureDependentInterface_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction TextToSpeechFeatureDependentInterface_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction TextToSpeechFeatureDependentInterface_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction TextToSpeechFeatureDependentInterface_createClass(Constructor, protoProps, staticProps) { if (protoProps) TextToSpeechFeatureDependentInterface_defineProperties(Constructor.prototype, protoProps); if (staticProps) TextToSpeechFeatureDependentInterface_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction TextToSpeechFeatureDependentInterface_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) TextToSpeechFeatureDependentInterface_setPrototypeOf(subClass, superClass); }\n\nfunction TextToSpeechFeatureDependentInterface_setPrototypeOf(o, p) { TextToSpeechFeatureDependentInterface_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return TextToSpeechFeatureDependentInterface_setPrototypeOf(o, p); }\n\nfunction TextToSpeechFeatureDependentInterface_createSuper(Derived) { var hasNativeReflectConstruct = TextToSpeechFeatureDependentInterface_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = TextToSpeechFeatureDependentInterface_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = TextToSpeechFeatureDependentInterface_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return TextToSpeechFeatureDependentInterface_possibleConstructorReturn(this, result); }; }\n\nfunction TextToSpeechFeatureDependentInterface_possibleConstructorReturn(self, call) { if (call && (TextToSpeechFeatureDependentInterface_typeof(call) === "object" || typeof call === "function")) { return call; } return TextToSpeechFeatureDependentInterface_assertThisInitialized(self); }\n\nfunction TextToSpeechFeatureDependentInterface_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction TextToSpeechFeatureDependentInterface_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction TextToSpeechFeatureDependentInterface_getPrototypeOf(o) { TextToSpeechFeatureDependentInterface_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return TextToSpeechFeatureDependentInterface_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/* eslint-disable max-classes-per-file */\n\n/**\r\n * Class factory interface for features that are dependent on the TextToSpeechFeature\r\n * being present on the host. Speech events will automatically be listened for once a\r\n * TextToSpeechFeature is added to the host and stopped once it is removed.\r\n *\r\n * @interface\r\n * @extends FeatureDependentInterface\r\n *\r\n * @property {Object} EVENT_DEPENDENCIES - Events that the feature should start/stop\r\n * listening for when a feature of type FeatureName is added/removed from the host.\r\n * @property {Object} EVENT_DEPENDENCIES.TextToSpeechFeature - Events that are\r\n * specific to the TextToSpeechFeature.\r\n * @property {string} [EVENT_DEPENDENCIES.TextToSpeechFeature.play=\'_onPlay\'] -\r\n * The name of the method that will be executed when TextToSpeechFeature play\r\n * events are emitted.\r\n * @property {string} [EVENT_DEPENDENCIES.TextToSpeechFeature.pause=\'_onPause\'] -\r\n * The name of the method that will be executed when TextToSpeechFeature pause\r\n * events are emitted.\r\n * @property {string} [EVENT_DEPENDENCIES.TextToSpeechFeature.resume=\'_onResume\'] -\r\n * The name of the method that will be executed when TextToSpeechFeature resume\r\n * events are emitted.\r\n * @property {string} [EVENT_DEPENDENCIES.TextToSpeechFeature.stop=\'_onStop\'] -\r\n * The name of the method that will be executed when TextToSpeechFeature stop\r\n * events are emitted.\r\n * @property {string} [EVENT_DEPENDENCIES.TextToSpeechFeature.sentence=\'_onSentence\'] -\r\n * The name of the method that will be executed when TextToSpeechFeature sentence\r\n * events are emitted.\r\n * @property {string} [EVENT_DEPENDENCIES.TextToSpeechFeature.word=\'_onWord\'] -\r\n * The name of the method that will be executed when TextToSpeechFeature word\r\n * events are emitted.\r\n * @property {string} [EVENT_DEPENDENCIES.TextToSpeechFeature.viseme=\'_onViseme\'] -\r\n * The name of the method that will be executed when TextToSpeechFeature viseme\r\n * events are emitted.\r\n * @property {string} [EVENT_DEPENDENCIES.TextToSpeechFeature.ssml=\'_onSsml\'] -\r\n * The name of the method that will be executed when TextToSpeechFeature ssml\r\n * events are emitted.\r\n */\n\nvar TextToSpeechFeatureDependentInterface_TextToSpeechFeatureDependentInterface = /*#__PURE__*/function (_FeatureDependentInte) {\n TextToSpeechFeatureDependentInterface_inherits(TextToSpeechFeatureDependentInterface, _FeatureDependentInte);\n\n var _super = TextToSpeechFeatureDependentInterface_createSuper(TextToSpeechFeatureDependentInterface);\n\n function TextToSpeechFeatureDependentInterface() {\n TextToSpeechFeatureDependentInterface_classCallCheck(this, TextToSpeechFeatureDependentInterface);\n\n return _super.apply(this, arguments);\n }\n\n TextToSpeechFeatureDependentInterface_createClass(TextToSpeechFeatureDependentInterface, [{\n key: "_onPlay",\n value:\n /**\r\n * Executed when speech play events are caught.\r\n *\r\n * @private\r\n */\n function _onPlay() {}\n /**\r\n * Executed when speech pause events are caught.\r\n *\r\n * @private\r\n */\n\n }, {\n key: "_onPause",\n value: function _onPause() {}\n /**\r\n * Executed when speech resume events are caught.\r\n *\r\n * @private\r\n */\n\n }, {\n key: "_onResume",\n value: function _onResume() {}\n /**\r\n * Executed when speech stop events are caught.\r\n *\r\n * @private\r\n */\n\n }, {\n key: "_onStop",\n value: function _onStop() {}\n /**\r\n * Executed when speech sentence events are caught.\r\n *\r\n * @private\r\n */\n\n }, {\n key: "_onSentence",\n value: function _onSentence() {}\n /**\r\n * Executed when speech word events are caught.\r\n *\r\n * @private\r\n */\n\n }, {\n key: "_onWord",\n value: function _onWord() {}\n /**\r\n * Executed when speech viseme events are caught.\r\n *\r\n * @private\r\n */\n\n }, {\n key: "_onViseme",\n value: function _onViseme() {}\n /**\r\n * Executed when speech ssml events are caught.\r\n *\r\n * @private\r\n */\n\n }, {\n key: "_onSsml",\n value: function _onSsml() {}\n /**\r\n * Creates a class that implements {@link TextToSpeechFeatureDependentInterface}\r\n * and extends a specified base class.\r\n *\r\n * @param {Class} BaseClass - The class to extend.\r\n *\r\n * @return {Class} A class that extends `BaseClass` and implements {@link TextToSpeechFeatureDependentInterface}.\r\n */\n\n }], [{\n key: "Mixin",\n value: function Mixin(BaseClass) {\n var ParentClass = core_FeatureDependentInterface.Mixin(BaseClass);\n\n var TextToSpeechFeatureDependentMixin = /*#__PURE__*/function (_ParentClass) {\n TextToSpeechFeatureDependentInterface_inherits(TextToSpeechFeatureDependentMixin, _ParentClass);\n\n var _super2 = TextToSpeechFeatureDependentInterface_createSuper(TextToSpeechFeatureDependentMixin);\n\n function TextToSpeechFeatureDependentMixin() {\n TextToSpeechFeatureDependentInterface_classCallCheck(this, TextToSpeechFeatureDependentMixin);\n\n return _super2.apply(this, arguments);\n }\n\n TextToSpeechFeatureDependentInterface_createClass(TextToSpeechFeatureDependentMixin, [{\n key: "_onPlay",\n value: function _onPlay() {}\n }, {\n key: "_onPause",\n value: function _onPause() {}\n }, {\n key: "_onResume",\n value: function _onResume() {}\n }, {\n key: "_onStop",\n value: function _onStop() {}\n }, {\n key: "_onSentence",\n value: function _onSentence() {}\n }, {\n key: "_onWord",\n value: function _onWord() {}\n }, {\n key: "_onViseme",\n value: function _onViseme() {}\n }, {\n key: "_onSsml",\n value: function _onSsml() {}\n }]);\n\n return TextToSpeechFeatureDependentMixin;\n }(ParentClass);\n\n Object.defineProperties(TextToSpeechFeatureDependentMixin, {\n EVENT_DEPENDENCIES: {\n value: TextToSpeechFeatureDependentInterface_objectSpread(TextToSpeechFeatureDependentInterface_objectSpread({}, ParentClass.EVENT_DEPENDENCIES), TextToSpeechFeatureDependentInterface.EVENT_DEPENDENCIES),\n writable: false\n }\n });\n return TextToSpeechFeatureDependentMixin;\n }\n }]);\n\n return TextToSpeechFeatureDependentInterface;\n}(core_FeatureDependentInterface);\n\nObject.defineProperties(TextToSpeechFeatureDependentInterface_TextToSpeechFeatureDependentInterface, {\n EVENT_DEPENDENCIES: {\n value: {\n TextToSpeechFeature: {\n play: \'_onPlay\',\n pause: \'_onPause\',\n resume: \'_onResume\',\n stop: \'_onStop\',\n sentence: \'_onSentence\',\n word: \'_onWord\',\n viseme: \'_onViseme\',\n ssml: \'_onSsml\'\n }\n },\n writable: false\n }\n});\n/* harmony default export */ var awspack_TextToSpeechFeatureDependentInterface = (TextToSpeechFeatureDependentInterface_TextToSpeechFeatureDependentInterface);\n// CONCATENATED MODULE: ./src/core/LipsyncFeature.js\nfunction LipsyncFeature_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { LipsyncFeature_typeof = function _typeof(obj) { return typeof obj; }; } else { LipsyncFeature_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return LipsyncFeature_typeof(obj); }\n\nfunction LipsyncFeature_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction LipsyncFeature_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { LipsyncFeature_ownKeys(Object(source), true).forEach(function (key) { LipsyncFeature_defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { LipsyncFeature_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction LipsyncFeature_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\n\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }\n\nfunction LipsyncFeature_slicedToArray(arr, i) { return LipsyncFeature_arrayWithHoles(arr) || LipsyncFeature_iterableToArrayLimit(arr, i) || LipsyncFeature_unsupportedIterableToArray(arr, i) || LipsyncFeature_nonIterableRest(); }\n\nfunction LipsyncFeature_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."); }\n\nfunction LipsyncFeature_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return LipsyncFeature_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return LipsyncFeature_arrayLikeToArray(o, minLen); }\n\nfunction LipsyncFeature_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction LipsyncFeature_iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction LipsyncFeature_arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction LipsyncFeature_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction LipsyncFeature_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction LipsyncFeature_createClass(Constructor, protoProps, staticProps) { if (protoProps) LipsyncFeature_defineProperties(Constructor.prototype, protoProps); if (staticProps) LipsyncFeature_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction LipsyncFeature_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { LipsyncFeature_get = Reflect.get; } else { LipsyncFeature_get = function _get(target, property, receiver) { var base = LipsyncFeature_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return LipsyncFeature_get(target, property, receiver || target); }\n\nfunction LipsyncFeature_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = LipsyncFeature_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction LipsyncFeature_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) LipsyncFeature_setPrototypeOf(subClass, superClass); }\n\nfunction LipsyncFeature_setPrototypeOf(o, p) { LipsyncFeature_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return LipsyncFeature_setPrototypeOf(o, p); }\n\nfunction LipsyncFeature_createSuper(Derived) { var hasNativeReflectConstruct = LipsyncFeature_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = LipsyncFeature_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = LipsyncFeature_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return LipsyncFeature_possibleConstructorReturn(this, result); }; }\n\nfunction LipsyncFeature_possibleConstructorReturn(self, call) { if (call && (LipsyncFeature_typeof(call) === "object" || typeof call === "function")) { return call; } return LipsyncFeature_assertThisInitialized(self); }\n\nfunction LipsyncFeature_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction LipsyncFeature_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction LipsyncFeature_getPrototypeOf(o) { LipsyncFeature_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return LipsyncFeature_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n\n\n/**\r\n * Default mapping of Polly viseme names to animation options objects.\r\n *\r\n * @property {Object} [sil={name: \'sil\'}]\r\n * @property {Object} [p={name: \'p\', overrideWeight: 0.9}]\r\n * @property {Object} [t={name: \'t\', blendTime: 0.2}]\r\n * @property {Object} [S={name: \'S\'}]\r\n * @property {Object} [T={name: \'T\'}]\r\n * @property {Object} [f={name: \'f\', overrideWeight: 0.75}]\r\n * @property {Object} [k={name: \'k\'}]\r\n * @property {Object} [i={name: \'i\'}]\r\n * @property {Object} [r={name: \'r\'}]\r\n * @property {Object} [s={name: \'s\', blendTime: 0.25}]\r\n * @property {Object} [u={name: \'u\'}]\r\n * @property {Object} [@={name: \'@\'}]\r\n * @property {Object} [a={name: \'a\'}]\r\n * @property {Object} [e={name: \'e\', blendTime: 0.2}]\r\n * @property {Object} [E={name: \'E\'}]\r\n * @property {Object} [o={name: \'o\'}]\r\n * @property {Object} [O={name: \'O\'}]\r\n */\n\nvar DefaultVisemeMap = {\n sil: {\n name: \'sil\'\n },\n p: {\n name: \'p\',\n overrideWeight: 0.9\n },\n t: {\n name: \'t\',\n blendTime: 0.2\n },\n S: {\n name: \'S\'\n },\n T: {\n name: \'T\'\n },\n f: {\n name: \'f\',\n overrideWeight: 0.75\n },\n k: {\n name: \'k\'\n },\n i: {\n name: \'i\'\n },\n r: {\n name: \'r\'\n },\n s: {\n name: \'s\',\n blendTime: 0.25\n },\n u: {\n name: \'u\'\n },\n \'@\': {\n name: \'@\'\n },\n a: {\n name: \'a\'\n },\n e: {\n name: \'e\',\n blendTime: 0.2\n },\n E: {\n name: \'E\'\n },\n o: {\n name: \'o\'\n },\n O: {\n name: \'O\'\n }\n};\n/**\r\n * Lipsync controls two types of movement: idle animation that should play while\r\n * speech is playing and viseme animations corresponding to Polly visemes whose\r\n * weights should be turned on and off as they are encountered in the Polly SSML\r\n * transcript. Layers owned by this feature will be enabled while speech is playing\r\n * and disabled once it stops.\r\n *\r\n * @extends AbstractHostFeature\r\n * @alias core/LipsyncFeature\r\n * @implements TextToSpeechFeatureDependentInterface\r\n * @implements ManagedAnimationLayerInterface\r\n */\n\nvar LipsyncFeature_LipsyncFeature = /*#__PURE__*/function (_AbstractHostFeature$) {\n LipsyncFeature_inherits(LipsyncFeature, _AbstractHostFeature$);\n\n var _super = LipsyncFeature_createSuper(LipsyncFeature);\n\n /**\r\n * @constructor\r\n *\r\n * @param {core/HostObject} host - Host that owns the feature.\r\n * @param {Object=} visemeOptions - Options for the viseme layers.\r\n * @param {number} [visemeOptions.blendTime=0.15] - Default amount of time it\r\n * will take to manipulate each freeBlend weight on the viseme states.\r\n * @param {Object} [visemeOptions.decayRate={amount: .5, seconds: .5}] - An object\r\n * describing the 0-1 factor viseme weight will decay if the viseme duration is\r\n * longer than the blendTime and the number of seconds it would take to decay\r\n * by that factor.\r\n * @param {number} [visemeOptions.easingFn=Quadratic.InOut] - Default easing function\r\n * to use when manipulating viseme freeBlend weights.\r\n * @param {Array.} [visemeOptions..layers=[]] - An array of layer options\r\n * objects to register as viseme layers.\r\n * @param {Object=} talkingOptions - Options for the talking layers.\r\n * @param {number} [talkingOptions.blendTime=0.75] - Default amount of time to\r\n * enable and disable the talking idle layers\r\n * @param {number} [talkingOptions.easingFn=Quadratic.InOut] - Default easing\r\n * function to use when manipulating weights on the talking idle layers.\r\n * @param {Array.} [talkingOptions.layers=[]] - An array of layer options\r\n * objects to register as talking layers.\r\n * @param {number} [visemeLeadTime=.067] - The amount of time to instruct the\r\n * TextToSpeechFeature to emit speechmarks before each one\'s actual timestamp\r\n * is reached. This will set the \'speechMarkOffset\' variable on the TextToSpeechFeature.\r\n */\n function LipsyncFeature(host) {\n var _this;\n\n var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n _ref$blendTime = _ref.blendTime,\n visemeBlendTime = _ref$blendTime === void 0 ? 0.15 : _ref$blendTime,\n _ref$decayRate = _ref.decayRate;\n\n _ref$decayRate = _ref$decayRate === void 0 ? {} : _ref$decayRate;\n var _ref$decayRate$amount = _ref$decayRate.amount,\n amount = _ref$decayRate$amount === void 0 ? 0.5 : _ref$decayRate$amount,\n _ref$decayRate$second = _ref$decayRate.seconds,\n seconds = _ref$decayRate$second === void 0 ? 0.5 : _ref$decayRate$second,\n _ref$easingFn = _ref.easingFn,\n visemeEasingFn = _ref$easingFn === void 0 ? Quadratic.InOut : _ref$easingFn,\n _ref$layers = _ref.layers,\n visemeLayers = _ref$layers === void 0 ? [] : _ref$layers;\n\n var _ref2 = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},\n _ref2$blendTime = _ref2.blendTime,\n talkingBlendTime = _ref2$blendTime === void 0 ? 0.75 : _ref2$blendTime,\n _ref2$easingFn = _ref2.easingFn,\n talkingEasingFn = _ref2$easingFn === void 0 ? Quadratic.InOut : _ref2$easingFn,\n _ref2$layers = _ref2.layers,\n talkingLayers = _ref2$layers === void 0 ? [] : _ref2$layers;\n\n var visemeLeadTime = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0.067;\n\n LipsyncFeature_classCallCheck(this, LipsyncFeature);\n\n _this = _super.call(this, host);\n _this._visemeLayers = {};\n _this._talkingLayers = {};\n _this.visemeLeadTime = visemeLeadTime; // Register the viseme layers\n\n visemeLayers.forEach(function (_ref3) {\n var name = _ref3.name,\n animation = _ref3.animation,\n _ref3$visemeMap = _ref3.visemeMap,\n visemeMap = _ref3$visemeMap === void 0 ? DefaultVisemeMap : _ref3$visemeMap;\n\n _this.registerVisemeLayer(name, {\n animation: animation,\n visemeMap: visemeMap,\n decayRate: {\n amount: amount,\n seconds: seconds\n },\n blendTime: visemeBlendTime,\n easingFn: visemeEasingFn\n });\n }); // Register the talking layers\n\n talkingLayers.forEach(function (_ref4) {\n var name = _ref4.name,\n animation = _ref4.animation;\n\n _this.registerTalkingLayer(name, {\n animation: animation,\n blendTime: talkingBlendTime,\n easingFn: talkingEasingFn\n });\n });\n return _this;\n }\n /**\r\n * Ensure that registered viseme animations are FreeBlendStates.\r\n *\r\n * @private\r\n *\r\n * @param {string} layerName - Name of the layer that contains the viseme animation.\r\n * @param {string} animationName - Name of the animation.\r\n */\n\n\n LipsyncFeature_createClass(LipsyncFeature, [{\n key: "_registerVisemeAnimation",\n value: function _registerVisemeAnimation(layerName, animationName) {\n if (this._managedLayers[layerName].animations[animationName].isActive) {\n if (this._host.AnimationFeature.getAnimationType(layerName, animationName) !== \'freeBlend\') {\n // Warn and deactivate if the registered state is not freeBlend\n console.warn("Cannot register Lipsync viseme animation ".concat(animationName, " on layer ").concat(layerName, " for host ").concat(this._host.id, ". Viseme animations must be of type \'freeBlend\'."));\n this._managedLayers[layerName].animations[animationName].isActive = false;\n } else {\n // Check if the blendWeights can be manipulated now\n var weightNames = this._host.AnimationFeature.getAnimationBlendNames(layerName, animationName);\n\n var visemeMap = this._managedLayers[layerName].animations[animationName].visemeMap;\n Object.values(visemeMap).forEach(function (visemeOptions) {\n visemeOptions.isActive = weightNames.includes(visemeOptions.name);\n });\n }\n }\n }\n /**\r\n * If the added feature is TextToSpeech, update its speechMarkOffset variable.\r\n *\r\n * @private\r\n *\r\n * @param {string} typeName - Name of the type of feature that was added.\r\n */\n\n }, {\n key: "_onFeatureAdded",\n value: function _onFeatureAdded(typeName) {\n this._visemeLayers = this._visemeLayers || {};\n this._talkingLayers = this._talkingLayers || {};\n\n LipsyncFeature_get(LipsyncFeature_getPrototypeOf(LipsyncFeature.prototype), "_onFeatureAdded", this).call(this, typeName);\n\n if (typeName === \'TextToSpeechFeature\') {\n this._host.TextToSpeechFeature.speechmarkOffset = -this._visemeLeadTime || 0;\n }\n }\n }, {\n key: "_onLayerAdded",\n value: function _onLayerAdded(_ref5) {\n var name = _ref5.name;\n\n LipsyncFeature_get(LipsyncFeature_getPrototypeOf(LipsyncFeature.prototype), "_onLayerAdded", this).call(this, {\n name: name\n }); // Validate the viseme animation\n\n\n if (this._visemeLayers[name] !== undefined) {\n this._registerVisemeAnimation(name, this._visemeLayers[name]);\n }\n }\n }, {\n key: "_onAnimationAdded",\n value: function _onAnimationAdded(_ref6) {\n var layerName = _ref6.layerName,\n animationName = _ref6.animationName;\n\n LipsyncFeature_get(LipsyncFeature_getPrototypeOf(LipsyncFeature.prototype), "_onAnimationAdded", this).call(this, {\n layerName: layerName\n }); // Validate the viseme animation\n\n\n if (this._visemeLayers[layerName] === animationName) {\n this._registerVisemeAnimation(layerName, this._visemeLayers[layerName]);\n }\n }\n }, {\n key: "_onPlay",\n value: function _onPlay() {\n var _this2 = this;\n\n // Turn on the layer weights\n this.enable(); // Set the current animations\n\n [this._visemeLayers, this._talkingLayers].forEach(function (layers) {\n Object.entries(layers).forEach(function (_ref7) {\n var _ref8 = LipsyncFeature_slicedToArray(_ref7, 2),\n layerName = _ref8[0],\n animationName = _ref8[1];\n\n if (_this2._managedLayers[layerName].animations[animationName].isActive) {\n _this2._host.AnimationFeature.resumeAnimation(layerName, animationName);\n }\n });\n });\n }\n }, {\n key: "_onPause",\n value: function _onPause() {\n this._onStop();\n }\n }, {\n key: "_onResume",\n value: function _onResume() {\n this._onPlay();\n }\n }, {\n key: "_onStop",\n value: function _onStop() {\n var _this3 = this;\n\n // Turn off the layer weights\n this.disable(); // Pause the current animations\n\n [this._visemeLayers, this._talkingLayers].forEach(function (layers) {\n Object.entries(layers).forEach(function (_ref9) {\n var _ref10 = LipsyncFeature_slicedToArray(_ref9, 2),\n layerName = _ref10[0],\n animationName = _ref10[1];\n\n if (_this3._managedLayers[layerName].animations[animationName].isActive) {\n _this3._host.AnimationFeature.pauseAnimation(layerName, animationName);\n }\n });\n });\n }\n /**\r\n * When viseme events are caught, turn on weight of the new viseme for the duration\r\n * of the speech mark, then turn weight back off.\r\n *\r\n * @private\r\n *\r\n * @param {Object} event - Event data passed from the speech.\r\n * @param {Object} event.mark - Speechmark object.\r\n */\n\n }, {\n key: "_onViseme",\n value: function () {\n var _onViseme2 = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee(_ref11) {\n var _this4 = this;\n\n var mark;\n return regeneratorRuntime.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n mark = _ref11.mark;\n Object.entries(this._visemeLayers).forEach(function (_ref12) {\n var _ref13 = LipsyncFeature_slicedToArray(_ref12, 2),\n layerName = _ref13[0],\n animName = _ref13[1];\n\n // Make sure the layer can be manipulated\n var _this4$_managedLayers = _this4._managedLayers[layerName].animations[animName],\n isActive = _this4$_managedLayers.isActive,\n visemeMap = _this4$_managedLayers.visemeMap;\n\n if (!isActive) {\n return;\n } // Take variables from the viseme if they exist and default to the layer\n\n\n var _this4$_managedLayers2 = LipsyncFeature_objectSpread(LipsyncFeature_objectSpread({}, _this4._managedLayers[layerName]), visemeMap[mark.value]),\n viseme = _this4$_managedLayers2.name,\n isVisemeActive = _this4$_managedLayers2.isActive,\n decayRate = _this4$_managedLayers2.decayRate,\n blendTime = _this4$_managedLayers2.blendTime,\n easingFn = _this4$_managedLayers2.easingFn,\n overrideWeight = _this4$_managedLayers2.overrideWeight;\n\n var visemeNames = _this4._host.AnimationFeature.getAnimationBlendNames(layerName, animName); // Make sure the new viseme has an active freeBlend weight\n\n\n if (!isVisemeActive || !visemeNames.includes(viseme)) {\n return;\n } // Find the peak weight for the viseme and the amount of time it should\n // take to reach it\n\n\n var weight = 1;\n var duration = mark.duration / 1000;\n\n if (duration < blendTime) {\n var lerpFactor = blendTime > 0 ? duration / blendTime : 1;\n weight = overrideWeight !== undefined ? overrideWeight : core_MathUtils.lerp(0, 1, lerpFactor);\n }\n\n var blendInTime = Math.min(duration, blendTime); // Find the amount and time viseme will be held for\n\n var holdTime = duration - blendTime;\n\n if (holdTime < 0) {\n // Perform in -> out animation\n _this4._animateSimpleViseme(layerName, animName, viseme, weight, blendInTime, blendTime, easingFn);\n } else {\n var _lerpFactor = decayRate.seconds > 0 ? holdTime / decayRate.seconds : 1; // Perform in -> hold -> out animation\n\n\n var decayWeight = core_MathUtils.lerp(weight, weight * decayRate.amount, Math.min(1, _lerpFactor));\n\n _this4._animateHeldViseme(layerName, animName, viseme, weight, decayWeight, blendInTime, holdTime, blendTime, easingFn);\n }\n });\n\n case 2:\n case "end":\n return _context.stop();\n }\n }\n }, _callee, this);\n }));\n\n function _onViseme(_x) {\n return _onViseme2.apply(this, arguments);\n }\n\n return _onViseme;\n }()\n /**\r\n * Animate a viseme blend weight towards a value and then back to zero.\r\n *\r\n * @private\r\n *\r\n * @param {string} layerName - Name of the layer that contains the viseme.\r\n * @param {string} animName - Name of the freeblend animation that contains\r\n * the viseme.\r\n * @param {string} visemeName - Name of the blend weight to manipulate.\r\n * @param {number} weight - Peak weight to animate towards.\r\n * @param {number} blendInTime - Amount of time it should take to reach the\r\n * peak weight.\r\n * @param {number} blendOutTime - Amount of time it should take to animate back\r\n * to zero after reaching the peak weight.\r\n * @param {Function} easingFn - Easing function to use during animation.\r\n */\n\n }, {\n key: "_animateSimpleViseme",\n value: function _animateSimpleViseme(layerName, animName, visemeName, peakWeight, blendInTime, blendOutTime, easingFn) {\n var _this5 = this;\n\n // Animate towards the peak value\n var weightPromise = this._host.AnimationFeature.setAnimationBlendWeight(layerName, animName, visemeName, peakWeight, blendInTime, easingFn); // Animate back to zero if there was no weight interruption\n\n\n weightPromise.then(function () {\n if (!weightPromise.canceled) {\n _this5._host.AnimationFeature.setAnimationBlendWeight(layerName, animName, visemeName, 0, blendOutTime, easingFn);\n }\n });\n }\n /**\r\n * Animate a viseme blend weight towards a value and then back to zero.\r\n *\r\n * @private\r\n *\r\n * @param {string} layerName - Name of the layer that contains the viseme.\r\n * @param {string} animName - Name of the freeblend animation that contains\r\n * the viseme.\r\n * @param {string} visemeName - Name of the blend weight to manipulate.\r\n * @param {number} peakWeight - Peak weight to animate towards.\r\n * @param {number} decayWeight - Weight to animate towards after reaching the\r\n * peak weight.\r\n * @param {number} blendInTime - Amount of time it should take to reach the\r\n * peak weight.\r\n * @param {number} holdTime - Amount of time it should take to reach the decay\r\n * weight after the peak weight has been reached.\r\n * @param {number} blendOutTime - Amount of time it should take to animate back\r\n * to zero after reaching the decay weight.\r\n * @param {Function} easingFn - Easing function to use during animation.\r\n */\n\n }, {\n key: "_animateHeldViseme",\n value: function () {\n var _animateHeldViseme2 = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2(layerName, animName, visemeName, peakWeight, decayWeight, blendInTime, holdTime, blendOutTime, easingFn) {\n var startPromise, holdPromise;\n return regeneratorRuntime.wrap(function _callee2$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n // Animate towards the peak value\n startPromise = this._host.AnimationFeature.setAnimationBlendWeight(layerName, animName, visemeName, peakWeight, blendInTime, easingFn);\n _context2.next = 3;\n return startPromise;\n\n case 3:\n if (startPromise.canceled) {\n _context2.next = 8;\n break;\n }\n\n // Animate towards the decay value if there was no weight interruption\n holdPromise = this._host.AnimationFeature.setAnimationBlendWeight(layerName, animName, visemeName, decayWeight, holdTime, easingFn);\n _context2.next = 7;\n return holdPromise;\n\n case 7:\n if (!holdPromise.canceled) {\n // Animate back to zero if there was no weight interruption\n this._host.AnimationFeature.setAnimationBlendWeight(layerName, animName, visemeName, 0, blendOutTime, easingFn);\n }\n\n case 8:\n case "end":\n return _context2.stop();\n }\n }\n }, _callee2, this);\n }));\n\n function _animateHeldViseme(_x2, _x3, _x4, _x5, _x6, _x7, _x8, _x9, _x10) {\n return _animateHeldViseme2.apply(this, arguments);\n }\n\n return _animateHeldViseme;\n }()\n /**\r\n * Gets and sets the amount of time in seconds to negatively offset speechmark\r\n * emission by.\r\n *\r\n * @type {number}\r\n */\n\n }, {\n key: "visemeLeadTime",\n get: function get() {\n return this._visemeLeadTime;\n },\n set: function set(seconds) {\n this._visemeLeadTime = seconds;\n\n if (this._host.TextToSpeechFeature) {\n this._host.TextToSpeechFeature.speechmarkOffset = -seconds;\n }\n }\n /**\r\n * Start keeping track of an animation layer that owns a freeBlend animation\r\n * with blendWeights corresponding to visemes.\r\n *\r\n * @param {string} layerName - Name of the layer to keep track of.\r\n * @param {Object=} options - Options for the layer.\r\n * @param {string} [options.animation=\'visemes\'] - Name of the animation on the\r\n * layer that will be played during speech. This animation must be of type\r\n * freeBlend.\r\n * @param {Object=} decayRate\r\n * @param {number} [decayRate.amount=0.5] - The percentage to decrease the viseme\'s\r\n * peak value by over time once the peak value has been reached.\r\n * @param {number} [decayRate.seconds=0.5] - The amount of time in seconds to\r\n * decrease the viseme\'s weight once it has reached its peak value.\r\n * @param {number=} [options.blendTime=[LipsyncFeature.DEFAULT_LAYER_OPTIONS.blendTime]{@link LipsyncFeature#DEFAULT_LAYER_OPTIONS#blendTime}] -\r\n * Default amount of time to use when manipulating animation blendWeights.\r\n * @param {Function=} options.easingFn - Default easing function to use when\r\n * manipulating animation blendWeights.\r\n * @param {Object} [options.visemeMap=DefaultVisemeMap] - Object containing key/value pairs of\r\n * Polly viseme names mapped to objects containing the name of the corresponding\r\n * animation blendWeight and any other animation options to use such as viseme\r\n * specific blend times and easing functions.\r\n */\n\n }, {\n key: "registerVisemeLayer",\n value: function registerVisemeLayer(layerName) {\n var _ref14 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n _ref14$animation = _ref14.animation,\n animation = _ref14$animation === void 0 ? \'visemes\' : _ref14$animation,\n _ref14$decayRate = _ref14.decayRate,\n decayRate = _ref14$decayRate === void 0 ? {\n amount: 0.5,\n seconds: 0.5\n } : _ref14$decayRate,\n _ref14$blendTime = _ref14.blendTime,\n blendTime = _ref14$blendTime === void 0 ? LipsyncFeature.DEFAULT_LAYER_OPTIONS.blendTime : _ref14$blendTime,\n easingFn = _ref14.easingFn,\n _ref14$visemeMap = _ref14.visemeMap,\n visemeMap = _ref14$visemeMap === void 0 ? DefaultVisemeMap : _ref14$visemeMap;\n\n // Register the layer and animation\n this.registerLayer(layerName, {\n decayRate: decayRate,\n blendTime: blendTime,\n easingFn: easingFn,\n animations: LipsyncFeature_defineProperty({}, animation, {\n visemeMap: visemeMap\n })\n });\n this._visemeLayers[layerName] = animation; // Validate the viseme animation\n\n this._registerVisemeAnimation(layerName, animation);\n }\n /**\r\n * Start keeping track of an animation layer that contains a looping animation\r\n * to be played during speech.\r\n *\r\n * @param {string} layerName - Name of the layer to keep track of.\r\n * @param {Object=} options - Options for the layer.\r\n * @param {string} [options.animation=\'stand_talk\'] - Name of the animation on the\r\n * layer that will be played during speech.\r\n * @param {number} [options.blendTime=[LipsyncFeature.DEFAULT_LAYER_OPTIONS.blendTime]{@link LipsyncFeature#DEFAULT_LAYER_OPTIONS#blendTime}] -\r\n * Default amount of time to use when manipulating the layer\'s weights.\r\n * @param {Function=} options.easingFn - Default easing function to use when\r\n * manipulating the layer\'s weights.\r\n */\n\n }, {\n key: "registerTalkingLayer",\n value: function registerTalkingLayer(layerName) {\n var _ref15 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n _ref15$animation = _ref15.animation,\n animation = _ref15$animation === void 0 ? \'stand_talk\' : _ref15$animation,\n _ref15$blendTime = _ref15.blendTime,\n blendTime = _ref15$blendTime === void 0 ? LipsyncFeature.DEFAULT_LAYER_OPTIONS.blendTime : _ref15$blendTime,\n easingFn = _ref15.easingFn;\n\n // Register the layer and animation\n this.registerLayer(layerName, {\n blendTime: blendTime,\n easingFn: easingFn,\n animations: LipsyncFeature_defineProperty({}, animation, {})\n });\n this._talkingLayers[layerName] = animation;\n }\n /**\r\n * Adds a namespace to the host with the name of the feature to contain properties\r\n * and methods from the feature that users of the host need access to.\r\n *\r\n * @see LipsyncFeature\r\n */\n\n }, {\n key: "installApi",\n value: function installApi() {\n var _this6 = this;\n\n /**\r\n * @inner\r\n * @namespace LipsyncFeature\r\n */\n var api = LipsyncFeature_get(LipsyncFeature_getPrototypeOf(LipsyncFeature.prototype), "installApi", this).call(this);\n /**\r\n * @memberof LipsyncFeature\r\n * @name registerLayer\r\n * @instance\r\n * @method\r\n * @see ManagedAnimationLayerInterface#registerLayer\r\n */\n\n /**\r\n * @memberof LipsyncFeature\r\n * @name registerAnimation\r\n * @instance\r\n * @method\r\n * @see ManagedAnimationLayerInterface#registerAnimation\r\n */\n\n /**\r\n * @memberof LipsyncFeature\r\n * @name setLayerWeights\r\n * @instance\r\n * @method\r\n * @see ManagedAnimationLayerInterface#setLayerWeights\r\n */\n\n /**\r\n * @memberof LipsyncFeature\r\n * @name enable\r\n * @instance\r\n * @method\r\n * @see ManagedAnimationLayerInterface#enable\r\n */\n\n /**\r\n * @memberof LipsyncFeature\r\n * @name disable\r\n * @instance\r\n * @method\r\n * @see ManagedAnimationLayerInterface#disable\r\n */\n\n\n Object.assign(api, {\n /**\r\n * @memberof LipsyncFeature\r\n * @instance\r\n * @method\r\n * @see core/LipsyncFeature#registerVisemeLayer\r\n */\n registerVisemeLayer: this.registerVisemeLayer.bind(this),\n\n /**\r\n * @memberof LipsyncFeature\r\n * @instance\r\n * @method\r\n * @see core/LipsyncFeature#registerTalkingLayer\r\n */\n registerTalkingLayer: this.registerTalkingLayer.bind(this)\n });\n /**\r\n * @memberof LipsyncFeature\r\n * @instance\r\n * @name visemeLeadTime\r\n * @see core/LipsyncFeature#visemeLeadTime\r\n */\n\n Object.defineProperty(api, \'visemeLeadTime\', {\n get: function get() {\n return _this6.visemeLeadTime;\n },\n set: function set(seconds) {\n _this6.visemeLeadTime = seconds;\n }\n });\n return api;\n }\n }]);\n\n return LipsyncFeature;\n}(core_AbstractHostFeature.mix(awspack_TextToSpeechFeatureDependentInterface.Mixin, animpack_ManagedAnimationLayerInterface.Mixin));\n\n/* harmony default export */ var core_LipsyncFeature = (LipsyncFeature_LipsyncFeature);\n\n// CONCATENATED MODULE: ./src/core/awspack/SSMLSpeechmarkInterface.js\nfunction SSMLSpeechmarkInterface_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { SSMLSpeechmarkInterface_typeof = function _typeof(obj) { return typeof obj; }; } else { SSMLSpeechmarkInterface_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return SSMLSpeechmarkInterface_typeof(obj); }\n\nfunction SSMLSpeechmarkInterface_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction SSMLSpeechmarkInterface_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction SSMLSpeechmarkInterface_createClass(Constructor, protoProps, staticProps) { if (protoProps) SSMLSpeechmarkInterface_defineProperties(Constructor.prototype, protoProps); if (staticProps) SSMLSpeechmarkInterface_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction SSMLSpeechmarkInterface_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) SSMLSpeechmarkInterface_setPrototypeOf(subClass, superClass); }\n\nfunction SSMLSpeechmarkInterface_setPrototypeOf(o, p) { SSMLSpeechmarkInterface_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return SSMLSpeechmarkInterface_setPrototypeOf(o, p); }\n\nfunction SSMLSpeechmarkInterface_createSuper(Derived) { var hasNativeReflectConstruct = SSMLSpeechmarkInterface_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = SSMLSpeechmarkInterface_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = SSMLSpeechmarkInterface_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return SSMLSpeechmarkInterface_possibleConstructorReturn(this, result); }; }\n\nfunction SSMLSpeechmarkInterface_possibleConstructorReturn(self, call) { if (call && (SSMLSpeechmarkInterface_typeof(call) === "object" || typeof call === "function")) { return call; } return SSMLSpeechmarkInterface_assertThisInitialized(self); }\n\nfunction SSMLSpeechmarkInterface_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction SSMLSpeechmarkInterface_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction SSMLSpeechmarkInterface_getPrototypeOf(o) { SSMLSpeechmarkInterface_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return SSMLSpeechmarkInterface_getPrototypeOf(o); }\n\n/* eslint-disable no-unused-vars */\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/* eslint-disable max-classes-per-file */\n\n/* eslint-disable no-empty */\n\n/**\r\n * Class factory interface for that registers callback method when a ssml speechmark event is emitted.\r\n *\r\n * @interface\r\n * @extends TextToSpeechFeatureDependentInterface\r\n */\n\nvar SSMLSpeechmarkInterface_SSMLSpeechmarkInterface = /*#__PURE__*/function (_TextToSpeechFeatureD) {\n SSMLSpeechmarkInterface_inherits(SSMLSpeechmarkInterface, _TextToSpeechFeatureD);\n\n var _super = SSMLSpeechmarkInterface_createSuper(SSMLSpeechmarkInterface);\n\n function SSMLSpeechmarkInterface() {\n SSMLSpeechmarkInterface_classCallCheck(this, SSMLSpeechmarkInterface);\n\n return _super.apply(this, arguments);\n }\n\n SSMLSpeechmarkInterface_createClass(SSMLSpeechmarkInterface, [{\n key: "_onSsml",\n value:\n /**\r\n * When ssml events are caught, this will try to parse the speech mark value and execute any function which meets criteria defined in the value.\r\n * Speech mark value will be treated as stringified json format containing required feature name, function name and argument array to pass in.\r\n * Example speech mark value might look like: \'{"feature":"GestureFeature", "method":"switchToGesture", "args":["genricA", 0.5]}\'\r\n *\r\n * @private\r\n *\r\n * @param {Object} event - Event data passed from the speech.\r\n * @param {Object} event.mark - Speechmark object.\r\n */\n function _onSsml(_ref) {\n var mark = _ref.mark;\n }\n /**\r\n * Creates a class that implements {@link SSMLSpeechmarkInterface}\r\n * and extends a specified base class.\r\n *\r\n * @param {Class} BaseClass - The class to extend.\r\n *\r\n * @return {Class} A class that extends `BaseClass` and implements {@link SSMLSpeechmarkInterface}.\r\n */\n\n }], [{\n key: "Mixin",\n value: function Mixin(BaseClass) {\n var ParentClass = awspack_TextToSpeechFeatureDependentInterface.Mixin(BaseClass);\n\n var SSMLSpeechMarkMixin = /*#__PURE__*/function (_ParentClass) {\n SSMLSpeechmarkInterface_inherits(SSMLSpeechMarkMixin, _ParentClass);\n\n var _super2 = SSMLSpeechmarkInterface_createSuper(SSMLSpeechMarkMixin);\n\n function SSMLSpeechMarkMixin() {\n SSMLSpeechmarkInterface_classCallCheck(this, SSMLSpeechMarkMixin);\n\n return _super2.apply(this, arguments);\n }\n\n SSMLSpeechmarkInterface_createClass(SSMLSpeechMarkMixin, [{\n key: "_onSsml",\n value: function _onSsml(_ref2) {\n var mark = _ref2.mark;\n\n try {\n var _JSON$parse = JSON.parse(mark.value),\n feature = _JSON$parse.feature,\n method = _JSON$parse.method,\n args = _JSON$parse.args;\n\n if (this.constructor.name === feature) {\n var callback = this[method];\n\n if (callback && typeof callback === \'function\') {\n callback.apply(this, args);\n } else {\n console.warn("Function ".concat(method, " does not exist within feature ").concat(feature));\n }\n }\n } catch (e) {}\n }\n }]);\n\n return SSMLSpeechMarkMixin;\n }(ParentClass);\n\n return SSMLSpeechMarkMixin;\n }\n }]);\n\n return SSMLSpeechmarkInterface;\n}(awspack_TextToSpeechFeatureDependentInterface);\n\n/* harmony default export */ var awspack_SSMLSpeechmarkInterface = (SSMLSpeechmarkInterface_SSMLSpeechmarkInterface);\n// CONCATENATED MODULE: ./src/core/GestureFeature.js\nfunction GestureFeature_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { GestureFeature_typeof = function _typeof(obj) { return typeof obj; }; } else { GestureFeature_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return GestureFeature_typeof(obj); }\n\nfunction GestureFeature_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction GestureFeature_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { GestureFeature_ownKeys(Object(source), true).forEach(function (key) { GestureFeature_defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { GestureFeature_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction GestureFeature_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction GestureFeature_slicedToArray(arr, i) { return GestureFeature_arrayWithHoles(arr) || GestureFeature_iterableToArrayLimit(arr, i) || GestureFeature_unsupportedIterableToArray(arr, i) || GestureFeature_nonIterableRest(); }\n\nfunction GestureFeature_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."); }\n\nfunction GestureFeature_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return GestureFeature_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return GestureFeature_arrayLikeToArray(o, minLen); }\n\nfunction GestureFeature_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction GestureFeature_iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction GestureFeature_arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction GestureFeature_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction GestureFeature_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction GestureFeature_createClass(Constructor, protoProps, staticProps) { if (protoProps) GestureFeature_defineProperties(Constructor.prototype, protoProps); if (staticProps) GestureFeature_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction GestureFeature_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { GestureFeature_get = Reflect.get; } else { GestureFeature_get = function _get(target, property, receiver) { var base = GestureFeature_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return GestureFeature_get(target, property, receiver || target); }\n\nfunction GestureFeature_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = GestureFeature_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction GestureFeature_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) GestureFeature_setPrototypeOf(subClass, superClass); }\n\nfunction GestureFeature_setPrototypeOf(o, p) { GestureFeature_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return GestureFeature_setPrototypeOf(o, p); }\n\nfunction GestureFeature_createSuper(Derived) { var hasNativeReflectConstruct = GestureFeature_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = GestureFeature_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = GestureFeature_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return GestureFeature_possibleConstructorReturn(this, result); }; }\n\nfunction GestureFeature_possibleConstructorReturn(self, call) { if (call && (GestureFeature_typeof(call) === "object" || typeof call === "function")) { return call; } return GestureFeature_assertThisInitialized(self); }\n\nfunction GestureFeature_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction GestureFeature_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction GestureFeature_getPrototypeOf(o) { GestureFeature_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return GestureFeature_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n\n\nvar DefaultGestureWords = {\n big: [\'add\', \'above\', \'authority\', \'big\', \'cover\', \'full\', \'fly\', \'grow\', \'growth\', \'high\', \'huge\', \'increase\', \'major\', \'majority\', \'large\', \'leader\', \'lot\', \'raise\', \'rise\', \'tall\'],\n heart: [\'accept\', \'admit\', \'believe\', \'care\', \'feeling\', \'feel\', \'friend\', \'grateful\', \'happy\', \'heart\', \'human\', \'pain\', \'save\', \'safe\', \'kind\', \'love\'],\n "in": [\'include\', \'including\', \'inside\', \'into\', \'now\', \'near\', \'nearest\', \'closest\', \'therein\', \'within\'],\n many: [\'all\', \'always\', \'any\', \'anyone\', \'among\', \'area\', \'around\', \'beautiful\', \'entire\', \'environment\', \'environments\', \'environmental\', \'everybody\', \'everyone\', \'everything\', \'audience\', \'total\', \'group\', \'groups\', \'million\', \'millions\', \'others\', \'billion\', \'billions\', \'hundred\', \'hundreds\', \'many\', \'thousand\', \'thousands\', \'world\', \'worlds\', \'outside\', \'reveal\'],\n movement: [\'away\', \'across\', \'ahead\', \'along\', \'far\', \'fast\', \'follow\', \'go\', \'leave\', \'move\', \'movement\', \'through\', \'throughout\', \'toward\', \'travel\', \'turned\', \'passed\'],\n one: [\'single\', \'one\', \'once\', \'first\', \'firstly\', \'only\', \'solo\', \'warned\', \'truly\', \'up\', \'alone\'],\n aggressive: [\'power\', \'powers\', \'powerful\', \'assert\', \'assertive\', \'strong\', \'stronger\', \'strongest\', \'strength\', \'flex\', \'dang\', \'damn\', \'damnit\', \'darn\', \'shucks\', \'doh\', \'drat\', \'angry\', \'angrier\', \'angriest\', \'aggressive\', \'annoyed\', \'annoying\', \'attack\', \'attacking\', \'offense\', \'offensive\', \'battle\'],\n you: [\'you\', \'yall\', "y\'all", \'your\', \'yours\', \'thou\', \'thy\'],\n defense: [\'defense\', \'fear\', \'repulsed\', \'scared\', \'scary\', \'scarier\', \'scariest\', \'fearful\', \'afraid\', \'cower\', \'cowers\', \'cowering\', \'hideous\', \'doomed\', \'terrified\', \'terrify\', \'terrifying\', \'terrifies\', \'spooky\', \'spookier\', \'spookiest\'],\n wave: [\'hello\', \'hi\', \'hiya\', \'howdy\', \'welcome\', \'aloha\', \'heya\', \'hey\', \'bye\', \'goodbye\', \'hola\', \'adios\', \'chao\'],\n self: [\'my\', \'I\', \'myself\', \'self\', "I\'ve", \'Ive\', \'me\', \'mine\', \'own\']\n};\n/**\r\n * Gesture allows you to play animations on demand on one or more layers from script\r\n * or ssml. If gesture is played that is a QueueState, the queue will automatically\r\n * be progressed after a given hold time if a looping queued state is reached. Gesture\r\n * layers can optionally be automatically disabled when no gesture animation is\r\n * in progress.\r\n *\r\n * @extends AbstractHostFeature\r\n * @implements SSMLSpeechmarkInterface\r\n * @implements ManagedAnimationLayerInterface\r\n */\n\nvar GestureFeature_GestureFeature = /*#__PURE__*/function (_AbstractHostFeature$) {\n GestureFeature_inherits(GestureFeature, _AbstractHostFeature$);\n\n var _super = GestureFeature_createSuper(GestureFeature);\n\n /**\r\n * @constructor\r\n *\r\n * @param {core/HostObject} host - Host object that owns the feature.\r\n * @param {Object=} options - Optional options for the feature.\r\n * @param {number} [options.holdTime = 3] - Amount of time in seconds that must\r\n * elapse before advancing a gesture that\'s a {@link QueueState} when the current\r\n * state in the queue is set to loop infinitely.\r\n * @param {number} [options.minimumInterval = 0.25] - The minimum amount of time\r\n * in seconds that must elapse before another gesture can be played.\r\n * @param {Object} layers - An object that maps layer names to layer options.\r\n * These are the layers that will be registered as tracked gesture layers. See\r\n * {@link ManagedAnimationLayerInterface#registerLayer} for more information\r\n * on expected format for each layer options object.\r\n */\n function GestureFeature(host) {\n var _this;\n\n var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n _ref$holdTime = _ref.holdTime,\n holdTime = _ref$holdTime === void 0 ? 3 : _ref$holdTime,\n _ref$minimumInterval = _ref.minimumInterval,\n minimumInterval = _ref$minimumInterval === void 0 ? 1 : _ref$minimumInterval,\n _ref$layers = _ref.layers,\n layers = _ref$layers === void 0 ? {} : _ref$layers;\n\n GestureFeature_classCallCheck(this, GestureFeature);\n\n _this = _super.call(this, host);\n _this.holdTime = holdTime;\n _this.minimumInterval = minimumInterval; // Register the gesture layers\n\n Object.entries(layers).forEach(function (_ref2) {\n var _ref3 = GestureFeature_slicedToArray(_ref2, 2),\n name = _ref3[0],\n _ref3$ = _ref3[1],\n options = _ref3$ === void 0 ? {} : _ref3$;\n\n _this.registerLayer(name, options);\n });\n return _this;\n }\n /**\r\n * Return a valid hold time value. If hold time isn\'t defined for the animation,\r\n * try to use the hold time for the layer. If that\'s not defined, fall back to\r\n * the hold time for the feature.\r\n *\r\n * @private\r\n *\r\n * @param {Object} layer - Managed layer options object.\r\n * @param {Object} animation - Managed animation options object.\r\n *\r\n * @returns {number}\r\n */\n\n\n GestureFeature_createClass(GestureFeature, [{\n key: "_getHoldTime",\n value: function _getHoldTime(layer, animation) {\n var layerHoldTime = layer.holdTime !== undefined ? layer.holdTime : this.holdTime;\n return animation.holdTime !== undefined ? animation.holdTime : layerHoldTime;\n }\n /**\r\n * Return a valid minimum interval value. If minimum interval isn\'t defined for\r\n * the animation, try to use the minimum interval for the layer. If that\'s not\r\n * defined, fall back to the minimum interval for the feature.\r\n *\r\n * @private\r\n *\r\n * @param {Object} layer - Managed layer options object.\r\n * @param {Object} animation - Managed animation options object.\r\n *\r\n * @returns {number}\r\n */\n\n }, {\n key: "_getMinimumInterval",\n value: function _getMinimumInterval(layer, animation) {\n var layerMinimumInterval = layer.minimumInterval !== undefined ? layer.minimumInterval : this.minimumInterval;\n return animation.minimumInterval !== undefined ? animation.minimumInterval : layerMinimumInterval;\n }\n /**\r\n * Callback for {@link core/AnimationFeature#playNextAnimation} event. If the\r\n * event is emitted for a managed animation and the new queued state cannot\r\n * advance on its own, start a new timer promise that will advance the queue\r\n * once it resolves.\r\n *\r\n * @private\r\n *\r\n * @param {Object} options - Options object passed from playNextAnimation event.\r\n * @param {string} layerName - Name of the layer that owns the queue state.\r\n * @param {string} animationName - Name of the queue state animation.\r\n * @param {boolean} canAdvance - Whether or not the current state in the queue\r\n * can advance on its own.\r\n * @param {boolean} isQueueEnd - Whether the current state in the queue is the last\r\n * state in the queue.\r\n */\n\n }, {\n key: "_onNext",\n value: function _onNext(_ref4) {\n var _this2 = this;\n\n var layerName = _ref4.layerName,\n animationName = _ref4.animationName,\n canAdvance = _ref4.canAdvance,\n isQueueEnd = _ref4.isQueueEnd;\n // Exit if this isn\'t a managed layer\n var layer = this._managedLayers[layerName];\n\n if (layer === undefined) {\n return;\n } // Exit if it isn\'t a managed animation\n\n\n var animation = layer.animations[animationName];\n\n if (animation === undefined) {\n return;\n } // Start a new timer for looping states that aren\'t the end of the queue\n\n\n if (!canAdvance && !isQueueEnd && layer.currentGesture === animationName) {\n var holdTime = this._getHoldTime(layer, animation);\n\n layer.holdTimer.cancel(); // Skip to the next animation right away if hold time is zero\n\n if (holdTime <= 0) {\n this._host.AnimationFeature.playNextAnimation(layerName, animationName);\n } // Wait for the given hold time before progressing\n else {\n layer.holdTimer = core_Utils.wait(holdTime, {\n onFinish: function onFinish() {\n // Advance the queue to the next state\n if (layer.currentGesture === animationName) {\n _this2._host.AnimationFeature.playNextAnimation(layerName, animationName);\n }\n }\n });\n }\n }\n }\n /**\r\n * Callback for {@link core/AnimationFeature#stopAnimation} event. If the\r\n * event is emitted for a managed animation cancel the layer\'s stored timers.\r\n * If the layer is set to auto-disable set its weight to 0.\r\n *\r\n * @private\r\n *\r\n * @param {Object} options - Options object passed from playNextAnimation event.\r\n * @param {string} layerName - Name of the layer that owns the stopped animation.\r\n * @param {string} animationName - Name of the animation that was stopped.\r\n */\n\n }, {\n key: "_onStop",\n value: function _onStop(_ref5) {\n var layerName = _ref5.layerName,\n animationName = _ref5.animationName;\n // Make sure the layer is managed\n var layer = this._managedLayers[layerName];\n\n if (layer === undefined) {\n return;\n } // Make sure the animation is managed\n\n\n var animation = layer.animations[animationName];\n\n if (animation !== undefined && animationName === layer.currentGesture) {\n layer.currentGesture = null;\n layer.playTimer = null;\n layer.holdTimer.cancel(); // Turn off layer weight\n\n if (layer.autoDisable) {\n this.setLayerWeights(function (name) {\n return name === layerName;\n }, 0);\n }\n }\n }\n }, {\n key: "_onAnimationAdded",\n value: function _onAnimationAdded(_ref6) {\n var layerName = _ref6.layerName,\n animationName = _ref6.animationName;\n var layer = this._managedLayers[layerName];\n\n if (layer !== undefined) {\n var animation = layer.animations[animationName]; // Register the animation as active if it is unmanaged\n\n if (animation === undefined) {\n this.registerAnimation(layerName, animationName);\n } // Mark the animation as active if it is managed\n else {\n animation.isActive = true;\n }\n }\n }\n }, {\n key: "registerLayer",\n value: function registerLayer(name) {\n var _this3 = this;\n\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n GestureFeature_get(GestureFeature_getPrototypeOf(GestureFeature.prototype), "registerLayer", this).call(this, name, GestureFeature_objectSpread(GestureFeature_objectSpread({}, options), {}, {\n holdTimer: core_Deferred.resolve(),\n playTimer: null,\n currentGesture: null\n }));\n\n if (this._managedLayers[name].isActive) {\n this._host.AnimationFeature.getAnimations(name).forEach(function (anim) {\n // Automatically register all animations on the layer\n if (_this3._managedLayers[name].animations[anim] === undefined) {\n _this3.registerAnimation(name, anim, _this3._managedLayers[name].animations[anim]);\n }\n });\n }\n }\n }, {\n key: "registerAnimation",\n value: function registerAnimation(layerName, animationName) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n // Try to fall back to a default word array\n if (!(options.words instanceof Array) && !(options.words instanceof Set)) {\n options.words = DefaultGestureWords[animationName] || [];\n }\n\n GestureFeature_get(GestureFeature_getPrototypeOf(GestureFeature.prototype), "registerAnimation", this).call(this, layerName, animationName, options);\n }\n /**\r\n * Create an object that maps ssml mark syntax required to play each gesture to\r\n * the words array associated with each gesture. Words arrays are defined at when\r\n * the gesture animation is registered. Gestures without associated words will\r\n * be excluded from the result. The resulting object can be used as an input\r\n * for {@link TextToSpeechUtils.autoGenerateSSMLMarks} to update a speech string\r\n * with the markup required to play gestures timed with their associated words.\r\n *\r\n * @returns {Object}\r\n */\n\n }, {\n key: "createGestureMap",\n value: function createGestureMap() {\n var _this4 = this;\n\n var gestureMap = {};\n Object.entries(this._managedLayers).forEach(function (_ref7) {\n var _ref8 = GestureFeature_slicedToArray(_ref7, 2),\n layerName = _ref8[0],\n animations = _ref8[1].animations;\n\n Object.entries(animations).forEach(function (_ref9) {\n var _ref10 = GestureFeature_slicedToArray(_ref9, 2),\n animationName = _ref10[0],\n _ref10$ = _ref10[1],\n holdTime = _ref10$.holdTime,\n minimumInterval = _ref10$.minimumInterval,\n words = _ref10$.words,\n transitionTime = _ref10$.transitionTime;\n\n // Only store gestures that have any associated words\n if (words.length) {\n var options = GestureFeature_objectSpread(GestureFeature_objectSpread(GestureFeature_objectSpread({}, holdTime && {\n holdTime: holdTime\n }), minimumInterval && {\n minimumInterval: minimumInterval\n }), transitionTime && {\n transitionTime: transitionTime\n });\n\n var key = {\n feature: _this4.constructor.name,\n method: \'playGesture\',\n args: [layerName, animationName, options]\n };\n gestureMap[JSON.stringify(key)] = words;\n }\n });\n });\n return gestureMap;\n }\n /**\r\n * Create an array that contains ssml mark syntax required to play each gesture\r\n * that does not have any associated words. The resulting array can be used as\r\n * an input for {@link TextToSpeechUtils.autoGenerateSSMLMarks} or\r\n * {@link TextToSpeechUtils.addMarksToUnmarkedSentences} to update a speech\r\n * string with the markup required to play random gestures at each unmarked\r\n * sentence in the string.\r\n *\r\n * @param {Array.=} layers - An array of names of managed layers to generate\r\n * marks for. If undefined, use all managed layers.\r\n *\r\n * @returns {Array.}\r\n */\n\n }, {\n key: "createGenericGestureArray",\n value: function createGenericGestureArray(layers) {\n var _this5 = this;\n\n var genericGestures = [];\n layers = layers || Object.keys(this._managedLayers);\n layers.forEach(function (layerName) {\n var layer = _this5._managedLayers[layerName]; // Make sure the layer is managed\n\n if (!layer) {\n return;\n }\n\n Object.entries(layer.animations).forEach(function (_ref11) {\n var _ref12 = GestureFeature_slicedToArray(_ref11, 2),\n animationName = _ref12[0],\n _ref12$ = _ref12[1],\n holdTime = _ref12$.holdTime,\n minimumInterval = _ref12$.minimumInterval,\n words = _ref12$.words,\n transitionTime = _ref12$.transitionTime;\n\n // Only store gestures that don\'t have any associated words\n if (!words.length) {\n var options = GestureFeature_objectSpread(GestureFeature_objectSpread(GestureFeature_objectSpread({}, holdTime && {\n holdTime: holdTime\n }), minimumInterval && {\n minimumInterval: minimumInterval\n }), transitionTime && {\n transitionTime: transitionTime\n });\n\n var key = JSON.stringify({\n feature: _this5.constructor.name,\n method: \'playGesture\',\n args: [layerName, animationName, options]\n });\n\n if (!genericGestures.includes(key)) {\n genericGestures.push(key);\n }\n }\n });\n });\n return genericGestures;\n }\n /**\r\n * Play a managed gesture animation.\r\n *\r\n * @param {string} layerName - The name of the layer that contains the gesture\r\n * animation.\r\n * @param {string} animationName - The name of the gesture animation.\r\n * @param {Object=} options - Optional gesture options.\r\n * @param {number=} options.holdTime - This option only applies to {@link QueueState}\r\n * gestures. When a QueueState gesture progresses to a looping state, this option\r\n * defines how many seconds should elapse before moving the queue forward. If\r\n * undefined, it will fall back first to the holdTime defined in the options when\r\n * the gesture animation was registered and then to the holdTime defined on the\r\n * feature.\r\n * @param {number=} options.minimumInterval - The minimum amount of time that\r\n * must have elapsed since the last time a gesture was played.\r\n */\n\n }, {\n key: "playGesture",\n value: function playGesture(layerName, animationName) {\n var _ref13 = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},\n holdTime = _ref13.holdTime,\n minimumInterval = _ref13.minimumInterval,\n transitionTime = _ref13.transitionTime,\n _ref13$force = _ref13.force,\n force = _ref13$force === void 0 ? false : _ref13$force;\n\n // Make sure the animation is registered\n if (this._managedLayers[layerName] === undefined || this._managedLayers[layerName].animations[animationName] === undefined) {\n this.registerAnimation(layerName, animationName, {\n holdTime: holdTime,\n minimumInterval: minimumInterval,\n transitionTime: transitionTime\n });\n }\n\n var layer = this._managedLayers[layerName];\n var animation = layer.animations[animationName]; // Make sure the animation is active\n\n if (!animation.isActive) {\n // Create warning message based on which object doesn\'t exist yet\n var typeName = layer.isActive ? \'animation\' : \'layer\';\n var message = "Skipping gesture ".concat(animationName, " on layer ").concat(layerName, " for host ").concat(this._host.id, ". No ").concat(typeName, " exists with this name yet.");\n console.warn(message);\n return core_Deferred.cancel({\n reason: \'inactive\',\n value: typeName\n });\n } // Check if the gesture is already playing\n\n\n var currentGesture = layer.currentGesture;\n\n if (currentGesture === animationName && !force) {\n var _message = "Skipping gesture ".concat(animationName, " on layer ").concat(layerName, " for host ").concat(this._host.id, ". The gesture is already playing. Use options.force to force the gesture replay, which may result in a hard transition.");\n\n console.warn(_message);\n return core_Deferred.cancel({\n reason: \'playing\',\n value: animationName\n });\n } // Update animation options\n\n\n if (holdTime !== undefined) {\n animation.holdTime = holdTime;\n }\n\n if (minimumInterval !== undefined) {\n animation.minimumInterval = minimumInterval;\n } else {\n minimumInterval = this._getMinimumInterval(layer, animation);\n } // Check the interval\n\n\n if (!force && layer.playTimer !== null && layer.playTimer < minimumInterval) {\n console.warn("Skipping gesture ".concat(animationName, " on layer ").concat(layerName, " for host ").concat(this._host.id, ". Minimum interval ").concat(minimumInterval, " has not been met."));\n return core_Deferred.cancel({\n reason: \'minimumInterval\',\n value: minimumInterval - layer.playTimer\n });\n } // Play the animation\n\n\n layer.currentGesture = animationName;\n layer.playTimer = 0;\n layer.holdTimer.cancel();\n\n if (layer.autoDisable) {\n this.setLayerWeights(function (name) {\n return name === layerName;\n }, 1);\n }\n\n return this._host.AnimationFeature.playAnimation(layerName, animationName, transitionTime);\n }\n }, {\n key: "update",\n value: function update(deltaTime) {\n var _this6 = this;\n\n GestureFeature_get(GestureFeature_getPrototypeOf(GestureFeature.prototype), "update", this).call(this, deltaTime); // Increment the timers\n\n\n Object.entries(this._managedLayers).forEach(function (_ref14) {\n var _ref15 = GestureFeature_slicedToArray(_ref14, 2),\n name = _ref15[0],\n options = _ref15[1];\n\n if (options.isActive && !_this6._host.AnimationFeature.getPaused(name)) {\n options.holdTimer.execute(deltaTime);\n\n if (options.playTimer !== null) {\n options.playTimer += deltaTime / 1000;\n }\n }\n });\n }\n }, {\n key: "installApi",\n value: function installApi() {\n /**\r\n * @inner\r\n * @namespace GestureFeature\r\n */\n var api = GestureFeature_get(GestureFeature_getPrototypeOf(GestureFeature.prototype), "installApi", this).call(this);\n\n Object.assign(api, {\n /**\r\n * @memberof GestureFeature\r\n * @instance\r\n * @method\r\n * @see GestureFeature#createGestureMap\r\n */\n createGestureMap: this.createGestureMap.bind(this),\n\n /**\r\n * @memberof GestureFeature\r\n * @instance\r\n * @method\r\n * @see GestureFeature#createGenericGestureArray\r\n */\n createGenericGestureArray: this.createGenericGestureArray.bind(this),\n\n /**\r\n * @memberof GestureFeature\r\n * @instance\r\n * @method\r\n * @see GestureFeature#playGesture\r\n */\n playGesture: this.playGesture.bind(this)\n });\n }\n }]);\n\n return GestureFeature;\n}(core_AbstractHostFeature.mix(awspack_SSMLSpeechmarkInterface.Mixin, animpack_ManagedAnimationLayerInterface.Mixin));\n\nObject.defineProperties(GestureFeature_GestureFeature, {\n DEFAULT_LAYER_OPTIONS: {\n value: GestureFeature_objectSpread(GestureFeature_objectSpread({}, GestureFeature_GestureFeature.DEFAULT_LAYER_OPTIONS), {}, {\n autoDisable: true\n }),\n writable: false\n },\n EVENT_DEPENDENCIES: {\n value: GestureFeature_objectSpread(GestureFeature_objectSpread({}, GestureFeature_GestureFeature.EVENT_DEPENDENCIES), {}, {\n AnimationFeature: GestureFeature_objectSpread(GestureFeature_objectSpread({}, GestureFeature_GestureFeature.EVENT_DEPENDENCIES.AnimationFeature), {}, {\n playNextAnimation: \'_onNext\',\n stopAnimation: \'_onStop\',\n interruptAnimation: \'_onStop\'\n })\n })\n }\n});\n/* harmony default export */ var core_GestureFeature = (GestureFeature_GestureFeature);\n\n// CONCATENATED MODULE: ./src/core/animpack/AnimationUtils.js\nfunction AnimationUtils_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction AnimationUtils_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction AnimationUtils_createClass(Constructor, protoProps, staticProps) { if (protoProps) AnimationUtils_defineProperties(Constructor.prototype, protoProps); if (staticProps) AnimationUtils_defineProperties(Constructor, staticProps); return Constructor; }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n\n/**\r\n * A collection of useful animation functions.\r\n *\r\n * @hideconstructor\r\n */\n\nvar AnimationUtils_AnimationUtils = /*#__PURE__*/function () {\n function AnimationUtils() {\n AnimationUtils_classCallCheck(this, AnimationUtils);\n }\n\n AnimationUtils_createClass(AnimationUtils, null, [{\n key: "lerp",\n value: function lerp(from, to, factor) {\n console.warn("AnimationUtils.lerp is being deprecated. Use MathUtils.lerp instead.");\n return core_MathUtils.lerp(from, to, factor);\n }\n /**\r\n * Clamp a number between 2 values.\r\n *\r\n * @param {number} value - Value to clamp.\r\n * @param {number} [min=0] - Minumum value.\r\n * @param {number} [max=1] - Maximum value.\r\n *\r\n * @returns {number}\r\n */\n\n }, {\n key: "clamp",\n value: function clamp(value) {\n var min = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var max = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;\n console.warn("AnimationUtils.clamp is being deprecated. Use MathUtils.clamp instead.");\n return core_MathUtils.clamp(value, min, max);\n }\n /**\r\n * Return a deferred promise that can be used to update the value of a numeric\r\n * property of this object over time. Pass delta time in milliseconds to the\r\n * deferred promise\'s execute method in an update loop to animate the property\r\n * towards the target value.\r\n *\r\n * @param {Object} propertyOwner - Object that contains the property to animation.\r\n * @param {string} propertyName - Name of the property to animate.\r\n * @param {number} targetValue - Target value to reach.\r\n * @param {Object=} options - Optional options object\r\n * @param {number} [options.seconds=0] - Number of seconds it will take to reach\r\n * the target value.\r\n * @param {Function} [options.easingFn=Linear.InOut] - Easing function to use for animation.\r\n * @param {Function} [options.onFinish] - Callback to execute once the animation completes.\r\n * The target value is passed as a parameter.\r\n * @param {Function=} options.onProgress - Callback to execute each time the animation\r\n * property is updated during the animation. The property\'s value at the time of\r\n * the update is passed as a parameter.\r\n * @param {Function=} options.onCancel - Callback to execute if the user cancels the\r\n * animation before completion. The animation property\'s value at the time of\r\n * cancel is passed as a parameter.\r\n * @param {Function=} options.onError - Callback to execute if the animation stops\r\n * because an error is encountered. The error message is passed as a parameter.\r\n *\r\n * @returns {Deferred} Resolves with the property\'s value once it reaches the\r\n * target value.\r\n */\n\n }, {\n key: "interpolateProperty",\n value: function interpolateProperty(propertyOwner, propertyName, targetValue) {\n var _ref = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {},\n _ref$seconds = _ref.seconds,\n seconds = _ref$seconds === void 0 ? 0 : _ref$seconds,\n easingFn = _ref.easingFn,\n _onFinish = _ref.onFinish,\n _onProgress = _ref.onProgress,\n _onCancel = _ref.onCancel,\n onError = _ref.onError;\n\n // Make sure property is an object\n if (!(propertyOwner instanceof Object)) {\n var e = new Error("Cannot interpolate property ".concat(propertyName, ". Property owner must be an object."));\n\n if (typeof onError === \'function\') {\n onError(e);\n }\n\n return core_Deferred.reject(e);\n } // Make sure property is numeric\n\n\n if (Number.isNaN(Number(propertyOwner[propertyName]))) {\n var _e = new Error("Cannot interpolate property ".concat(propertyName, ". Property must be numeric."));\n\n if (typeof onError === \'function\') {\n onError(_e);\n }\n\n return core_Deferred.reject(_e);\n } // Make sure the target value is numeric\n\n\n if (Number.isNaN(Number(targetValue))) {\n var _e2 = new Error("Cannot interpolate property ".concat(propertyName, " to value ").concat(targetValue, ". Target value must be numeric."));\n\n if (typeof onError === \'function\') {\n onError(_e2);\n }\n\n return core_Deferred.reject(_e2);\n } // Resolve immediately if the target has already been reached\n\n\n var startValue = propertyOwner[propertyName];\n\n if (startValue === targetValue) {\n if (typeof _onFinish === \'function\') {\n _onFinish(targetValue);\n }\n\n return core_Deferred.resolve(targetValue);\n } // Default to linear interpolation\n\n\n if (typeof easingFn !== \'function\') {\n if (easingFn !== undefined) {\n console.warn("Invalid property interpolation easingFn. Defaulting to linear interpolation.");\n }\n\n easingFn = Linear.InOut;\n }\n\n var interpolator = core_Utils.wait(seconds, {\n onFinish: function onFinish() {\n propertyOwner[propertyName] = targetValue;\n\n if (typeof _onFinish === \'function\') {\n _onFinish(targetValue);\n }\n },\n onCancel: function onCancel() {\n if (typeof _onCancel === \'function\') {\n _onCancel(propertyOwner[propertyName]);\n }\n },\n onProgress: function onProgress(progress) {\n if (propertyOwner[propertyName] !== targetValue) {\n // Calculate the lerp factor\n var easeFactor = easingFn(progress);\n\n if (typeof easeFactor !== \'number\') {\n var _e3 = new Error("Invalid property interpolation easingFn. EasingFn must return a number.");\n\n interpolator.reject(_e3);\n return;\n } // Update the value\n\n\n propertyOwner[propertyName] = core_MathUtils.lerp(startValue, targetValue, easeFactor);\n } // Signal progress\n\n\n if (typeof _onProgress === \'function\') {\n _onProgress(propertyOwner[propertyName]);\n } // Signal completion once time is up\n\n\n if (progress === 1) {\n propertyOwner[propertyName] = targetValue;\n interpolator.resolve(targetValue);\n }\n },\n onError: onError\n });\n return interpolator;\n }\n }]);\n\n return AnimationUtils;\n}();\n\n/* harmony default export */ var animpack_AnimationUtils = (AnimationUtils_AnimationUtils);\n// CONCATENATED MODULE: ./src/core/animpack/state/AbstractState.js\nfunction AbstractState_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction AbstractState_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction AbstractState_createClass(Constructor, protoProps, staticProps) { if (protoProps) AbstractState_defineProperties(Constructor.prototype, protoProps); if (staticProps) AbstractState_defineProperties(Constructor, staticProps); return Constructor; }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n/**\r\n * Base class for a state in our animation system.\r\n *\r\n * @abstract\r\n */\n\nvar AbstractState_AbstractState = /*#__PURE__*/function () {\n /**\r\n * @constructor\r\n *\r\n * @param {Object=} options - Options for the animation state.\r\n * @param {string=} options.name - Name for the animation state. Names must be\r\n * unique for the container the state is applied to and should be validated at\r\n * the container level. If no name is given it will default to the constructor\r\n * name.\r\n * @param {weight} [options.weight=0] - The 0-1 amount of influence the state will have.\r\n */\n function AbstractState() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n AbstractState_classCallCheck(this, AbstractState);\n\n this.name = options.name !== undefined ? options.name : this.constructor.name;\n this._weight = options.weight !== undefined ? core_MathUtils.clamp(options.weight, 0, 1) : 0;\n this._internalWeight = this._weight;\n this._paused = false;\n this._promises = {\n finish: core_Deferred.resolve(),\n weight: core_Deferred.resolve(),\n play: core_Deferred.resolve()\n };\n this._playCallbacks = {\n onFinish: undefined,\n onError: undefined,\n onCancel: undefined\n };\n }\n /**\r\n * Gets whether or not the state is currently paused.\r\n *\r\n * @type {number}\r\n */\n\n\n AbstractState_createClass(AbstractState, [{\n key: "paused",\n get: function get() {\n return this._paused;\n }\n /**\r\n * Gets and sets the user defined weight.\r\n *\r\n * @type {number}\r\n */\n\n }, {\n key: "weight",\n get: function get() {\n return this._weight;\n },\n set: function set(weight) {\n this._weight = core_MathUtils.clamp(weight, 0, 1);\n }\n /**\r\n * Gets whether or not the weight is currently being animated.\r\n *\r\n * @readonly\r\n * @type {boolean}\r\n */\n\n }, {\n key: "weightPending",\n get: function get() {\n return this._promises.weight && this._promises.weight.pending;\n }\n /**\r\n * Updates the user defined weight over time.\r\n *\r\n * @param {number} weight - The target weight value.\r\n * @param {number} [seconds=0] - The amount of time it will take to reach the\r\n * target weight.\r\n * @param {Function=} easingFn - The easing function to use for interpolation.\r\n *\r\n * @returns {Deferred}\r\n */\n\n }, {\n key: "setWeight",\n value: function setWeight(weight) {\n var seconds = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var easingFn = arguments.length > 2 ? arguments[2] : undefined;\n\n this._promises.weight.cancel();\n\n weight = core_MathUtils.clamp(weight);\n this._promises.weight = animpack_AnimationUtils.interpolateProperty(this, \'weight\', weight, {\n seconds: seconds,\n easingFn: easingFn\n });\n return this._promises.weight;\n }\n /**\r\n * Gets the internal weight.\r\n *\r\n * @readonly\r\n * @type {number}\r\n */\n\n }, {\n key: "internalWeight",\n get: function get() {\n return this._internalWeight;\n }\n /**\r\n * Multiplies the user weight by a factor to determine the internal weight.\r\n *\r\n * @param {number} factor - 0-1 multiplier to apply to the user weight.\r\n */\n\n }, {\n key: "updateInternalWeight",\n value: function updateInternalWeight(factor) {\n this._internalWeight = this._weight * factor;\n }\n /**\r\n * Update any values that need to be evaluated every frame.\r\n *\r\n * @param {number} deltaTime - Time in milliseconds since the last update.\r\n */\n\n }, {\n key: "update",\n value: function update(deltaTime) {\n if (!this._paused) {\n Object.values(this._promises).forEach(function (promise) {\n promise.execute(deltaTime);\n });\n }\n }\n /**\r\n * Start playback of the state from the beginning.\r\n *\r\n * @param {Function=} onFinish - Function to execute when the state finishes.\r\n * @param {Function=} onError - Function to execute if the state encounters\r\n * an error during playback.\r\n * @param {Function=} onCancel - Function to execute if playback is canceled.\r\n *\r\n * @returns {Deferred}\r\n */\n\n }, {\n key: "play",\n value: function play(onFinish, onError, onCancel) {\n this._paused = false;\n this._playCallbacks.onFinish = onFinish;\n this._playCallbacks.onError = onError;\n this._playCallbacks.onCancel = onCancel;\n this._promises.play = new core_Deferred(undefined, onFinish, onError, onCancel);\n this._promises.finish = core_Deferred.all([this._promises.play, this._promises.weight]);\n return this._promises.finish;\n }\n /**\r\n * Pause playback of the state. This prevents pending promises from being executed.\r\n *\r\n * @returns {boolean}\r\n */\n\n }, {\n key: "pause",\n value: function pause() {\n this._paused = true;\n return true;\n }\n /**\r\n * Resume playback of the state.\r\n *\r\n * @param {Function=} onFinish - Function to execute when the state finishes.\r\n * @param {Function=} onError - Function to execute if the state encounters\r\n * an error during playback.\r\n * @param {Function=} onCancel - Function to execute if playback is canceled.\r\n *\r\n * @returns {Deferred}\r\n */\n\n }, {\n key: "resume",\n value: function resume(onFinish, onError, onCancel) {\n this._paused = false;\n\n if (!this._promises.play.pending) {\n this._playCallbacks.onFinish = onFinish || this._playCallbacks.onFinish;\n this._playCallbacks.onError = onError || this._playCallbacks.onError;\n this._playCallbacks.onCancel = onCancel || this._playCallbacks.onCancel;\n this._promises.play = new core_Deferred(undefined, this._playCallbacks.onFinish, this._playCallbacks.onError, this._playCallbacks.onCancel);\n this._promises.finish = core_Deferred.all([this._promises.play, this._promises.weight]);\n }\n\n return this._promises.finish;\n }\n /**\r\n * Cancel playback of the state and cancel any pending promises.\r\n *\r\n * @returns {boolean}\r\n */\n\n }, {\n key: "cancel",\n value: function cancel() {\n this._paused = true;\n Object.values(this._promises).forEach(function (promise) {\n promise.cancel();\n });\n return true;\n }\n /**\r\n * Stop playback of the state and resolve any pending promises.\r\n *\r\n * @returns {boolean}\r\n */\n\n }, {\n key: "stop",\n value: function stop() {\n this._paused = true;\n Object.values(this._promises).forEach(function (promise) {\n promise.resolve();\n });\n return true;\n }\n /**\r\n * Cancel any pending promises and remove reference to them.\r\n */\n\n }, {\n key: "discard",\n value: function discard() {\n this.cancel();\n delete this._promises;\n }\n /**\r\n * Force the internal weight to 0. Should be called before switching or transitioning\r\n * to a new state.\r\n */\n\n }, {\n key: "deactivate",\n value: function deactivate() {\n this.updateInternalWeight(0);\n }\n }]);\n\n return AbstractState;\n}();\n\n/* harmony default export */ var state_AbstractState = (AbstractState_AbstractState);\n// CONCATENATED MODULE: ./src/core/animpack/state/TransitionState.js\nfunction TransitionState_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { TransitionState_typeof = function _typeof(obj) { return typeof obj; }; } else { TransitionState_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return TransitionState_typeof(obj); }\n\nfunction TransitionState_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction TransitionState_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction TransitionState_createClass(Constructor, protoProps, staticProps) { if (protoProps) TransitionState_defineProperties(Constructor.prototype, protoProps); if (staticProps) TransitionState_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction TransitionState_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { TransitionState_get = Reflect.get; } else { TransitionState_get = function _get(target, property, receiver) { var base = TransitionState_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return TransitionState_get(target, property, receiver || target); }\n\nfunction TransitionState_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = TransitionState_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction TransitionState_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) TransitionState_setPrototypeOf(subClass, superClass); }\n\nfunction TransitionState_setPrototypeOf(o, p) { TransitionState_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return TransitionState_setPrototypeOf(o, p); }\n\nfunction TransitionState_createSuper(Derived) { var hasNativeReflectConstruct = TransitionState_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = TransitionState_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = TransitionState_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return TransitionState_possibleConstructorReturn(this, result); }; }\n\nfunction TransitionState_possibleConstructorReturn(self, call) { if (call && (TransitionState_typeof(call) === "object" || typeof call === "function")) { return call; } return TransitionState_assertThisInitialized(self); }\n\nfunction TransitionState_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction TransitionState_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction TransitionState_getPrototypeOf(o) { TransitionState_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return TransitionState_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n/**\r\n * Class for smooth transitioning between states on an animation layer.\r\n *\r\n * @extends AbstractState\r\n */\n\nvar TransitionState_TransitionState = /*#__PURE__*/function (_AbstractState) {\n TransitionState_inherits(TransitionState, _AbstractState);\n\n var _super = TransitionState_createSuper(TransitionState);\n\n function TransitionState() {\n var _this;\n\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n TransitionState_classCallCheck(this, TransitionState);\n\n _this = _super.call(this, options);\n _this._to = null;\n _this._from = [];\n _this._weightPromise = core_Deferred.resolve();\n return _this;\n }\n\n TransitionState_createClass(TransitionState, [{\n key: "internalWeight",\n get: function get() {\n // Find the combined weight of all sub-states\n var totalWeight = 0;\n\n if (this._to) {\n totalWeight += this._to.weight;\n }\n\n this._from.forEach(function (state) {\n totalWeight += state.weight;\n });\n\n return totalWeight * this._internalWeight;\n }\n }, {\n key: "updateInternalWeight",\n value: function updateInternalWeight(factor) {\n var _this2 = this;\n\n TransitionState_get(TransitionState_getPrototypeOf(TransitionState.prototype), "updateInternalWeight", this).call(this, factor);\n\n this._from.forEach(function (state) {\n state.updateInternalWeight(_this2._internalWeight);\n });\n\n if (this._to) {\n this._to.updateInternalWeight(this._internalWeight);\n }\n }\n /**\r\n * Update sub-states the transition is controlling and start new weight\r\n * animations on each one. This should be called each time the current state of\r\n * an animation layer gets updated to a new value and a transition time greater\r\n * that zero is specified.\r\n *\r\n * @param {Array.} [currentStates=[]] - States whose weight values\r\n * will be animated to 0.\r\n * @param {AbstractState=} targetState - State whose weight will be animated\r\n * to 1.\r\n * @param {number} transitionTime - Amount of time it will in seconds take for\r\n * weight animations to complete.\r\n * @param {Function=} easingFn - Easing function to use for weight animations.\r\n * Default is Easing.Linear.InOut.\r\n * @param {Function=} onComplete - Function to execute once all weight animations\r\n * complete.\r\n */\n\n }, {\n key: "configure",\n value: function configure() {\n var currentStates = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n var targetState = arguments.length > 1 ? arguments[1] : undefined;\n var transitionTime = arguments.length > 2 ? arguments[2] : undefined;\n var easingFn = arguments.length > 3 ? arguments[3] : undefined;\n var onComplete = arguments.length > 4 ? arguments[4] : undefined;\n\n // Deactivate any states that aren\'t in the new configuration\n if (this._to === targetState || currentStates.includes(this._to)) {\n this._to = null;\n }\n\n this._from = this._from.filter(function (state) {\n return state !== targetState && !currentStates.includes(state);\n });\n this.deactivate();\n this._from = currentStates;\n this._to = targetState;\n this.reset(transitionTime, easingFn, onComplete);\n }\n /**\r\n * Start new weight animations state the transition controls. This should be called\r\n * if an animation is played with a transition time greater than zero and a transtion\r\n * to that animation was already in progress.\r\n *\r\n * @param {number} transitionTime - Amount of time it will in seconds take for\r\n * weight animations to complete.\r\n * @param {Function=} easingFn - Easing function to use for weight animations.\r\n * Default is Easing.Linear.InOut.\r\n * @param {Function=} onComplete - Function to execute once all weight animations\r\n * complete.\r\n */\n\n }, {\n key: "reset",\n value: function reset(transitionTime, easingFn, onComplete) {\n var _this3 = this;\n\n // Stop any pending promises\n this._weightPromise.cancel(); // Start tweening weight to 0 for the current states\n\n\n var weightPromises = this._from.map(function (state) {\n return state.setWeight(0, transitionTime, easingFn);\n }); // Start tweening weight to 1 for the target state\n\n\n if (this._to) {\n weightPromises.push(this._to.setWeight(1, transitionTime, easingFn));\n this.name = this._to.name;\n } else {\n this.name = null;\n }\n\n this._weightPromise = core_Deferred.all(weightPromises, function () {\n _this3._from.forEach(function (state) {\n state.cancel();\n state.deactivate();\n });\n\n if (typeof onComplete === \'function\') {\n onComplete();\n }\n });\n }\n }, {\n key: "play",\n value: function play(onFinish, onError, onCancel, onNext) {\n this._paused = false;\n this._playCallbacks.onFinish = onFinish;\n this._playCallbacks.onError = onError;\n this._playCallbacks.onCancel = onCancel;\n var promises = [this._weightPromise];\n\n this._from.forEach(function (state) {\n state.resume();\n });\n\n if (this._to) {\n this._promises.play = this._to.play(undefined, undefined, undefined, onNext);\n promises.push(this._promises.play);\n }\n\n this._promises.finish = core_Deferred.all(promises, onFinish, onError, onCancel);\n return this._promises.finish;\n }\n }, {\n key: "pause",\n value: function pause() {\n this._from.forEach(function (state) {\n state.pause();\n });\n\n if (this._to) {\n this._to.pause();\n }\n\n return TransitionState_get(TransitionState_getPrototypeOf(TransitionState.prototype), "pause", this).call(this);\n }\n }, {\n key: "resume",\n value: function resume(onFinish, onError, onCancel, onNext) {\n this._paused = false;\n\n if (!this._promises.play.pending) {\n this._playCallbacks.onFinish = onFinish || this._playCallbacks.onFinish;\n this._playCallbacks.onError = onError || this._playCallbacks.onError;\n this._playCallbacks.onCancel = onCancel || this._playCallbacks.onCancel;\n }\n\n var promises = [this._weightPromise];\n\n this._from.forEach(function (state) {\n state.resume();\n });\n\n if (this._to) {\n this._promises.play = this._to.resume(undefined, undefined, undefined, onNext);\n promises.push(this._promises.play);\n }\n\n this._promises.finish = core_Deferred.all(promises, this._playCallbacks.onFinish, this._playCallbacks.onError, this._playCallbacks.onCancel);\n return this._promises.finish;\n }\n }, {\n key: "cancel",\n value: function cancel() {\n this._from.forEach(function (state) {\n state.pause();\n });\n\n if (this._to) {\n this._to.cancel();\n }\n\n this._weightPromise.cancel();\n\n return TransitionState_get(TransitionState_getPrototypeOf(TransitionState.prototype), "cancel", this).call(this);\n }\n }, {\n key: "stop",\n value: function stop() {\n this._from.forEach(function (state) {\n state.pause();\n });\n\n if (this._to) {\n this._to.stop();\n }\n\n return TransitionState_get(TransitionState_getPrototypeOf(TransitionState.prototype), "stop", this).call(this);\n }\n }, {\n key: "update",\n value: function update(deltaTime) {\n TransitionState_get(TransitionState_getPrototypeOf(TransitionState.prototype), "update", this).call(this, deltaTime);\n\n this._from.forEach(function (state) {\n state.update(deltaTime);\n });\n\n if (this._to) {\n this._to.update(deltaTime);\n }\n }\n }, {\n key: "discard",\n value: function discard() {\n TransitionState_get(TransitionState_getPrototypeOf(TransitionState.prototype), "discard", this).call(this);\n\n this._weightPromise.cancel();\n\n delete this._weightPromise;\n this._to = null;\n this._from.length = 0;\n }\n }, {\n key: "deactivate",\n value: function deactivate() {\n if (this._to) {\n this._to.deactivate();\n }\n\n this._from.forEach(function (state) {\n state.deactivate();\n });\n }\n }]);\n\n return TransitionState;\n}(state_AbstractState);\n\n/* harmony default export */ var state_TransitionState = (TransitionState_TransitionState);\n// CONCATENATED MODULE: ./src/core/animpack/AnimationPlayerInterface.js\nfunction AnimationPlayerInterface_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { AnimationPlayerInterface_typeof = function _typeof(obj) { return typeof obj; }; } else { AnimationPlayerInterface_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return AnimationPlayerInterface_typeof(obj); }\n\nfunction AnimationPlayerInterface_toConsumableArray(arr) { return AnimationPlayerInterface_arrayWithoutHoles(arr) || AnimationPlayerInterface_iterableToArray(arr) || AnimationPlayerInterface_unsupportedIterableToArray(arr) || AnimationPlayerInterface_nonIterableSpread(); }\n\nfunction AnimationPlayerInterface_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."); }\n\nfunction AnimationPlayerInterface_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return AnimationPlayerInterface_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return AnimationPlayerInterface_arrayLikeToArray(o, minLen); }\n\nfunction AnimationPlayerInterface_iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction AnimationPlayerInterface_arrayWithoutHoles(arr) { if (Array.isArray(arr)) return AnimationPlayerInterface_arrayLikeToArray(arr); }\n\nfunction AnimationPlayerInterface_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction AnimationPlayerInterface_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { AnimationPlayerInterface_get = Reflect.get; } else { AnimationPlayerInterface_get = function _get(target, property, receiver) { var base = AnimationPlayerInterface_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return AnimationPlayerInterface_get(target, property, receiver || target); }\n\nfunction AnimationPlayerInterface_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = AnimationPlayerInterface_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction AnimationPlayerInterface_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) AnimationPlayerInterface_setPrototypeOf(subClass, superClass); }\n\nfunction AnimationPlayerInterface_setPrototypeOf(o, p) { AnimationPlayerInterface_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return AnimationPlayerInterface_setPrototypeOf(o, p); }\n\nfunction AnimationPlayerInterface_createSuper(Derived) { var hasNativeReflectConstruct = AnimationPlayerInterface_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = AnimationPlayerInterface_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = AnimationPlayerInterface_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return AnimationPlayerInterface_possibleConstructorReturn(this, result); }; }\n\nfunction AnimationPlayerInterface_possibleConstructorReturn(self, call) { if (call && (AnimationPlayerInterface_typeof(call) === "object" || typeof call === "function")) { return call; } return AnimationPlayerInterface_assertThisInitialized(self); }\n\nfunction AnimationPlayerInterface_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction AnimationPlayerInterface_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction AnimationPlayerInterface_getPrototypeOf(o) { AnimationPlayerInterface_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return AnimationPlayerInterface_getPrototypeOf(o); }\n\nfunction AnimationPlayerInterface_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction AnimationPlayerInterface_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction AnimationPlayerInterface_createClass(Constructor, protoProps, staticProps) { if (protoProps) AnimationPlayerInterface_defineProperties(Constructor.prototype, protoProps); if (staticProps) AnimationPlayerInterface_defineProperties(Constructor, staticProps); return Constructor; }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/* eslint-disable max-classes-per-file */\n\n/* eslint-disable no-unused-vars */\n\n/* eslint-disable no-empty-function */\n\n/* eslint-disable getter-return */\n\n/* eslint-disable no-useless-constructor */\n\n\n/**\r\n * Class factory interface for controlling playback of a collection of animations.\r\n * One animation can be played at any given time, crossfading between animations\r\n * will result in playing a {@link TransitionState}.\r\n *\r\n * @interface\r\n */\n\nvar AnimationPlayerInterface_AnimationPlayerInterface = /*#__PURE__*/function () {\n function AnimationPlayerInterface() {\n AnimationPlayerInterface_classCallCheck(this, AnimationPlayerInterface);\n }\n\n AnimationPlayerInterface_createClass(AnimationPlayerInterface, [{\n key: "paused",\n get:\n /**\r\n * Gets whether or not the player is updating states.\r\n *\r\n * @readonly\r\n * @type {boolean}\r\n */\n function get() {\n return this._paused;\n }\n /**\r\n * Gets and sets the default number of seconds it takes to transition to a new\r\n * animation.\r\n *\r\n * @type {number}\r\n */\n\n }, {\n key: "transitionTime",\n get: function get() {},\n set: function set(seconds) {}\n /**\r\n * Gets and sets the default easing function to use when transitioning and\r\n * setting weights.\r\n *\r\n * @type {Function}\r\n */\n\n }, {\n key: "easingFn",\n get: function get() {},\n set: function set(fn) {}\n /**\r\n * Gets the state the layer is currently in control of.\r\n *\r\n * @readonly\r\n * @type {AbstractState}\r\n */\n\n }, {\n key: "currentState",\n get: function get() {}\n /**\r\n * Gets the name of the state the layer is currently in control of.\r\n *\r\n * @readonly\r\n * @type {string}\r\n */\n\n }, {\n key: "currentAnimation",\n get: function get() {}\n /**\r\n * Gets whether or not the layer is currently transitioning to a new animation.\r\n *\r\n * @readonly\r\n * @type {boolean}\r\n */\n\n }, {\n key: "isTransitioning",\n get: function get() {}\n /**\r\n * Update the layer\'s current state to a new value. If transitionTime is defined\r\n * and greater than zero, perform a smooth blend between any states that currently\r\n * have non-zero weight values and the new state.\r\n *\r\n * @private\r\n *\r\n * @param {(string|null)} name - Name of the state to transition to.\r\n * @param {string} playMethod - Name of the operation being prepared for, to be\r\n * used in error messaging.\r\n * @param {number=} transitionTime - Amount of time in seconds it will take to\r\n * switch to the new state.\r\n * @param {Function=} easingFn - Easing function to use when transitioning to a\r\n * new state over time.\r\n * @param {Function=} onError - Function to execute if an error is encountered.\r\n */\n\n }, {\n key: "_prepareCurrentState",\n value: function _prepareCurrentState(name, playMethod, transitionTime, easingFn, onError) {}\n /**\r\n * Start playback an animation from the beginning.\r\n *\r\n * @param {string} name - Name of the animation to play.\r\n * @param {number=} transitionTime - Amount of time it will take before the\r\n * new state has full influence for the layer.\r\n * @param {Function=} easingFn - Easing function to use for blending if transitionTime\r\n * is greater than zero.\r\n * @param {Function=} onFinish - Function to execute when the animation finishes.\r\n * @param {Function=} onError - Function to execute if the animation encounters\r\n * an error during playback.\r\n * @param {Function=} onCancel - Function to execute if playback is canceled.\r\n * @param {Function=} onNext - Function to execute if an animation queue is\r\n * played and it advances to the next animation.\r\n *\r\n * @returns {Deferred}\r\n */\n\n }, {\n key: "playAnimation",\n value: function playAnimation(name, transitionTime, easingFn, onFinish, onError, onCancel, onNext) {}\n /**\r\n * Cancel playback of the current animation.\r\n *\r\n * @returns {boolean}\r\n */\n\n }, {\n key: "cancelAnimation",\n value: function cancelAnimation() {}\n /**\r\n * Pause playback of the current animation.\r\n *\r\n * @returns {boolean}\r\n */\n\n }, {\n key: "pauseAnimation",\n value: function pauseAnimation() {}\n /**\r\n * Resume playback of an animation.\r\n *\r\n * @param {string=} name - Name of the animation to resume playback for. Default\r\n * is the layer\'s current animation name.\r\n * @param {number=} transitionTime - Amount of time it will take before the\r\n * new state has full influence for the layer.\r\n * @param {Function=} onFinish - Function to execute when the state finishes.\r\n * @param {Function=} onError - Function to execute if the state encounters\r\n * an error during playback.\r\n * @param {Function=} onCancel - Function to execute if playback is canceled.\r\n * @param {Function=} onNext - Function to execute if an animation queue is\r\n * played and it advances to the next animation.\r\n *\r\n * @returns {Deferred}\r\n */\n\n }, {\n key: "resumeAnimation",\n value: function resumeAnimation(name, transitionTime, easingFn, onFinish, onError, onCancel, onNext) {}\n /**\r\n * Stop playback of the current animation.\r\n *\r\n * @returns {boolean}\r\n */\n\n }, {\n key: "stopAnimation",\n value: function stopAnimation() {}\n /**\r\n * Update the current animation.\r\n *\r\n * @param {number} deltaTime - Time in milliseconds since the last update.\r\n */\n\n }, {\n key: "update",\n value: function update(deltaTime) {}\n /**\r\n * Discard the transition state.\r\n */\n\n }, {\n key: "discard",\n value: function discard() {}\n /**\r\n * Creates a class that implements {@link AnimationPlayerInterface} and extends\r\n * a specified base class.\r\n *\r\n * @param {Class} [BaseClass = class{}] - The class to extend.\r\n *\r\n * @return {Class} A class that extends `BaseClass` and implements {@link AnimationPlayerInterface}.\r\n */\n\n }], [{\n key: "Mixin",\n value: function Mixin() {\n var BaseClass = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : /*#__PURE__*/function () {\n function _class() {\n AnimationPlayerInterface_classCallCheck(this, _class);\n }\n\n return _class;\n }();\n\n var AnimationPlayerMixin = /*#__PURE__*/function (_BaseClass) {\n AnimationPlayerInterface_inherits(AnimationPlayerMixin, _BaseClass);\n\n var _super = AnimationPlayerInterface_createSuper(AnimationPlayerMixin);\n\n function AnimationPlayerMixin() {\n var _this;\n\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n AnimationPlayerInterface_classCallCheck(this, AnimationPlayerMixin);\n\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\n _this = _super.call.apply(_super, [this, options].concat(args));\n _this._transitionState = new state_TransitionState();\n _this._states = _this._states !== undefined ? _this._states : new Map();\n _this._currentState = null;\n _this._paused = false;\n _this._transitionTime = Number(options.transitionTime) >= 0 ? Number(options.transitionTime) : 0;\n _this._easingFn = typeof options.easingFn === \'function\' ? options.easingFn : undefined;\n return _this;\n }\n\n AnimationPlayerInterface_createClass(AnimationPlayerMixin, [{\n key: "paused",\n get: function get() {\n return this._paused;\n }\n }, {\n key: "transitionTime",\n get: function get() {\n return this._transitionTime;\n },\n set: function set(seconds) {\n seconds = Number(seconds);\n\n if (!(seconds >= 0)) {\n throw new Error("Cannot set transition time for ".concat(this.constructor.name, " to ").concat(seconds, ". Seconds must be a numeric value greather than or equal to zero."));\n }\n\n this._transitionTime = seconds;\n }\n }, {\n key: "easingFn",\n get: function get() {\n return this._easingFn;\n },\n set: function set(fn) {\n this._easingFn = fn;\n }\n }, {\n key: "currentState",\n get: function get() {\n return this._currentState;\n }\n }, {\n key: "currentAnimation",\n get: function get() {\n if (this._currentState) {\n return this._currentState.name;\n }\n\n return null;\n }\n }, {\n key: "isTransitioning",\n get: function get() {\n return this._currentState === this._transitionState;\n }\n }, {\n key: "_prepareCurrentState",\n value: function _prepareCurrentState(name, playMethod, transitionTime, easingFn, onError) {\n var _this2 = this;\n\n if (name !== null && !this._states.has(name)) {\n var e = new Error("Cannot ".concat(playMethod, " animation ").concat(name, ". No animation exists with this name."));\n\n if (typeof onError === \'function\') {\n onError(e);\n }\n\n throw e;\n }\n\n var targetState = name !== null ? this._states.get(name) : null; // Make sure the new state isn\'t already playing\n\n if (this.currentAnimation !== name) {\n // Switch to the new state immediately\n if (transitionTime <= 0) {\n // Cancel the current state and set its weight to 0\n if (this._currentState) {\n this._currentState.cancel();\n\n this._currentState.weight = 0;\n\n this._currentState.deactivate();\n }\n\n this._currentState = targetState;\n } // Blend to the new state over time\n else {\n // Make sure to transition out of any states with non-zero weight\n var currentStates = AnimationPlayerInterface_toConsumableArray(this._states.values()).filter(function (s) {\n return s !== targetState && (s.weight || s.weightPending);\n }); // Update the transition state with new inputs\n\n\n this._transitionState.configure(currentStates, targetState, transitionTime, easingFn, function () {\n _this2._currentState = targetState;\n _this2._transitionState.weight = 0;\n });\n\n this._currentState = this._transitionState;\n }\n } else if (playMethod === \'play\') {\n this._currentState.cancel();\n\n if (this._currentState === this._transitionState) {\n this._transitionState.reset(transitionTime, easingFn, function () {\n _this2._currentState = targetState;\n _this2._transitionState.weight = 0;\n });\n }\n } // Update weight for the new current state so it has full influence for the player\n\n\n this._currentState.weight = 1;\n\n this._currentState.updateInternalWeight(this._internalWeight);\n }\n }, {\n key: "playAnimation",\n value: function playAnimation(name, transitionTime, easingFn, onFinish, onError, onCancel, onNext) {\n var error;\n var reject = false;\n\n try {\n this._prepareCurrentState(name, \'play\', transitionTime !== undefined ? transitionTime : this._transitionTime, easingFn !== undefined ? easingFn : this._easingFn, onError);\n } catch (e) {\n error = e;\n reject = true;\n }\n\n if (reject) {\n return core_Deferred.reject(error);\n }\n\n return this._currentState.play(onFinish, onError, onCancel, onNext);\n }\n }, {\n key: "pauseAnimation",\n value: function pauseAnimation() {\n if (this._currentState) {\n return this._currentState.pause();\n } else {\n return false;\n }\n }\n }, {\n key: "resumeAnimation",\n value: function resumeAnimation(name, transitionTime, easingFn, onFinish, onError, onCancel, onNext) {\n if (name === undefined && this._currentState) {\n name = this._currentState.name;\n }\n\n var error;\n var reject = false;\n\n try {\n this._prepareCurrentState(name, \'resume\', transitionTime !== undefined ? transitionTime : this._transitionTime, easingFn !== undefined ? easingFn : this._easingFn, onError);\n } catch (e) {\n error = e;\n reject = true;\n }\n\n if (reject) {\n return core_Deferred.reject(error);\n }\n\n return this._currentState.resume(onFinish, onError, onCancel, onNext);\n }\n }, {\n key: "cancelAnimation",\n value: function cancelAnimation() {\n if (this._currentState) {\n return this._currentState.cancel();\n } else {\n return false;\n }\n }\n }, {\n key: "stopAnimation",\n value: function stopAnimation() {\n if (this._currentState) {\n return this._currentState.stop();\n } else {\n return false;\n }\n }\n }, {\n key: "update",\n value: function update(deltaTime) {\n if (AnimationPlayerInterface_get(AnimationPlayerInterface_getPrototypeOf(AnimationPlayerMixin.prototype), "update", this)) {\n AnimationPlayerInterface_get(AnimationPlayerInterface_getPrototypeOf(AnimationPlayerMixin.prototype), "update", this).call(this, deltaTime);\n }\n\n if (this._currentState) {\n this._currentState.update(deltaTime);\n }\n }\n }, {\n key: "discard",\n value: function discard() {\n if (AnimationPlayerInterface_get(AnimationPlayerInterface_getPrototypeOf(AnimationPlayerMixin.prototype), "discard", this)) {\n AnimationPlayerInterface_get(AnimationPlayerInterface_getPrototypeOf(AnimationPlayerMixin.prototype), "discard", this).call(this);\n }\n\n this._transitionState.discard();\n\n delete this._transitionState;\n }\n }]);\n\n return AnimationPlayerMixin;\n }(BaseClass);\n\n return AnimationPlayerMixin;\n }\n }]);\n\n return AnimationPlayerInterface;\n}();\n\n/* harmony default export */ var animpack_AnimationPlayerInterface = (AnimationPlayerInterface_AnimationPlayerInterface);\n// CONCATENATED MODULE: ./src/core/animpack/state/StateContainerInterface.js\nfunction StateContainerInterface_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { StateContainerInterface_typeof = function _typeof(obj) { return typeof obj; }; } else { StateContainerInterface_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return StateContainerInterface_typeof(obj); }\n\nfunction StateContainerInterface_toConsumableArray(arr) { return StateContainerInterface_arrayWithoutHoles(arr) || StateContainerInterface_iterableToArray(arr) || StateContainerInterface_unsupportedIterableToArray(arr) || StateContainerInterface_nonIterableSpread(); }\n\nfunction StateContainerInterface_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."); }\n\nfunction StateContainerInterface_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return StateContainerInterface_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return StateContainerInterface_arrayLikeToArray(o, minLen); }\n\nfunction StateContainerInterface_iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction StateContainerInterface_arrayWithoutHoles(arr) { if (Array.isArray(arr)) return StateContainerInterface_arrayLikeToArray(arr); }\n\nfunction StateContainerInterface_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction StateContainerInterface_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) StateContainerInterface_setPrototypeOf(subClass, superClass); }\n\nfunction StateContainerInterface_setPrototypeOf(o, p) { StateContainerInterface_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return StateContainerInterface_setPrototypeOf(o, p); }\n\nfunction StateContainerInterface_createSuper(Derived) { var hasNativeReflectConstruct = StateContainerInterface_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = StateContainerInterface_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = StateContainerInterface_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return StateContainerInterface_possibleConstructorReturn(this, result); }; }\n\nfunction StateContainerInterface_possibleConstructorReturn(self, call) { if (call && (StateContainerInterface_typeof(call) === "object" || typeof call === "function")) { return call; } return StateContainerInterface_assertThisInitialized(self); }\n\nfunction StateContainerInterface_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction StateContainerInterface_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction StateContainerInterface_getPrototypeOf(o) { StateContainerInterface_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return StateContainerInterface_getPrototypeOf(o); }\n\nfunction StateContainerInterface_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction StateContainerInterface_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction StateContainerInterface_createClass(Constructor, protoProps, staticProps) { if (protoProps) StateContainerInterface_defineProperties(Constructor.prototype, protoProps); if (staticProps) StateContainerInterface_defineProperties(Constructor, staticProps); return Constructor; }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/* eslint-disable max-classes-per-file */\n\n/* eslint-disable no-unused-vars */\n\n/* eslint-disable no-empty-function */\n\n/* eslint-disable getter-return */\n\n/**\r\n * Class factory interface for manipulating a collection of {@link AbstractState}.\r\n *\r\n * @interface\r\n */\n\nvar StateContainerInterface_StateContainerInterface = /*#__PURE__*/function () {\n function StateContainerInterface() {\n StateContainerInterface_classCallCheck(this, StateContainerInterface);\n }\n\n StateContainerInterface_createClass(StateContainerInterface, [{\n key: "getState",\n value:\n /**\r\n * Return the state with the given name.\r\n *\r\n * @param {string} name - Name of the state.\r\n *\r\n * @returns {AbstractState}\r\n */\n function getState(name) {}\n /**\r\n * Gets an array of the names of all states in the container.\r\n *\r\n * @type {Array.}\r\n */\n\n }, {\n key: "getStateNames",\n value: function getStateNames() {}\n /**\r\n * Add a new state to be controlled by the container. States are stored keyed\r\n * by their name property, which must be unique. If it isn\'t, a number will\r\n * be added or incremented until a unique key is generated.\r\n *\r\n * @param {AbstractState} state - State to add to the container.\r\n *\r\n * @returns {string} - Unique name of the state.\r\n */\n\n }, {\n key: "addState",\n value: function addState(state) {}\n /**\r\n * Removes a state with the given name from the container.\r\n *\r\n * @param {string} name - Name of the state to remove.\r\n *\r\n * @returns {boolean} - Whether or not a state was removed.\r\n */\n\n }, {\n key: "removeState",\n value: function removeState(name) {}\n /**\r\n * Renames a state with the given name in the container. Name must be unique\r\n * to the container, if it isn\'t the name will be incremented until it is unique.\r\n *\r\n * @param {string} currentName - Name of the state to rename.\r\n * @param {string} newName - Name to update the state with.\r\n *\r\n * @returns {string} - Updated name for the state.\r\n */\n\n }, {\n key: "renameState",\n value: function renameState(currentName, newName) {}\n /**\r\n * Discards all states.\r\n */\n\n }, {\n key: "discardStates",\n value: function discardStates() {}\n /**\r\n * Creates a class that implements {@link StateContainerInterface} and extends\r\n * a specified base class.\r\n *\r\n * @param {Class} [BaseClass = class{}] - The class to extend.\r\n *\r\n * @return {Class} A class that extends `BaseClass` and implements {@link StateContainerInterface}.\r\n */\n\n }], [{\n key: "Mixin",\n value: function Mixin() {\n var BaseClass = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : /*#__PURE__*/function () {\n function _class() {\n StateContainerInterface_classCallCheck(this, _class);\n }\n\n return _class;\n }();\n\n /**\r\n * This mixin adds functionality for manipulating uniquely-named animation states in\r\n * a map.\r\n */\n var StateContainerMixin = /*#__PURE__*/function (_BaseClass) {\n StateContainerInterface_inherits(StateContainerMixin, _BaseClass);\n\n var _super = StateContainerInterface_createSuper(StateContainerMixin);\n\n function StateContainerMixin() {\n var _this;\n\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n StateContainerInterface_classCallCheck(this, StateContainerMixin);\n\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\n _this = _super.call.apply(_super, [this, options].concat(args));\n _this._states = _this._states !== undefined ? _this._states : new Map();\n return _this;\n }\n\n StateContainerInterface_createClass(StateContainerMixin, [{\n key: "getState",\n value: function getState(name) {\n return this._states.get(name);\n }\n }, {\n key: "getStateNames",\n value: function getStateNames() {\n return StateContainerInterface_toConsumableArray(this._states.keys());\n }\n }, {\n key: "addState",\n value: function addState(state) {\n // Make sure the state is not already in this container\n if (StateContainerInterface_toConsumableArray(this._states.values()).includes(state)) {\n console.warn("Cannot add animation to state ".concat(this.name, ". Animation was already added."));\n return state.name;\n } // Make sure the state name is unique\n\n\n var uniqueName = core_Utils.getUniqueName(state.name, StateContainerInterface_toConsumableArray(this._states.keys()));\n\n if (state.name !== uniqueName) {\n console.warn("Animation name ".concat(state.name, " is not unique for state ").concat(this.name, ". New animation will be added with name ").concat(uniqueName, "."));\n state.name = uniqueName;\n }\n\n this._states.set(state.name, state);\n\n return state.name;\n }\n }, {\n key: "removeState",\n value: function removeState(name) {\n // Check if the state is in this container\n if (!this._states || !this._states.has(name)) {\n console.warn("Did not remove animation ".concat(name, " from state ").concat(this.name, ". No animation exists with this name."));\n return false;\n }\n\n this._states.get(name).discard();\n\n this._states["delete"](name);\n\n return true;\n }\n }, {\n key: "renameState",\n value: function renameState(currentName, newName) {\n // Make sure the state is in this container\n if (!this._states || !this._states.has(currentName)) {\n throw new Error("Cannot rename animation ".concat(currentName, " in ").concat(this.name, ". No animation exists with this name."));\n }\n\n var state = this._states.get(currentName); // Exit if the names are the same\n\n\n if (currentName === newName) {\n return currentName;\n } // Make sure the name is unique\n\n\n var uniqueName = core_Utils.getUniqueName(newName, StateContainerInterface_toConsumableArray(this._states.keys()).filter(function (s) {\n return s.name !== currentName;\n }));\n\n if (newName !== uniqueName) {\n console.warn("Animation name ".concat(newName, " is not unique in state ").concat(this.name, ". Animation will be renamed to ").concat(uniqueName, "."));\n newName = uniqueName;\n }\n\n state.name = newName;\n\n this._states["delete"](currentName);\n\n this._states.set(state.name, state);\n\n return state.name;\n }\n }, {\n key: "discardStates",\n value: function discardStates() {\n this._states.forEach(function (state) {\n state.discard();\n });\n\n delete this._states;\n }\n }]);\n\n return StateContainerMixin;\n }(BaseClass);\n\n return StateContainerMixin;\n }\n }]);\n\n return StateContainerInterface;\n}();\n\n/* harmony default export */ var state_StateContainerInterface = (StateContainerInterface_StateContainerInterface);\n// CONCATENATED MODULE: ./src/core/animpack/state/QueueState.js\nfunction QueueState_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { QueueState_typeof = function _typeof(obj) { return typeof obj; }; } else { QueueState_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return QueueState_typeof(obj); }\n\nfunction QueueState_toConsumableArray(arr) { return QueueState_arrayWithoutHoles(arr) || QueueState_iterableToArray(arr) || QueueState_unsupportedIterableToArray(arr) || QueueState_nonIterableSpread(); }\n\nfunction QueueState_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."); }\n\nfunction QueueState_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return QueueState_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return QueueState_arrayLikeToArray(o, minLen); }\n\nfunction QueueState_iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction QueueState_arrayWithoutHoles(arr) { if (Array.isArray(arr)) return QueueState_arrayLikeToArray(arr); }\n\nfunction QueueState_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction QueueState_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction QueueState_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction QueueState_createClass(Constructor, protoProps, staticProps) { if (protoProps) QueueState_defineProperties(Constructor.prototype, protoProps); if (staticProps) QueueState_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction QueueState_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { QueueState_get = Reflect.get; } else { QueueState_get = function _get(target, property, receiver) { var base = QueueState_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return QueueState_get(target, property, receiver || target); }\n\nfunction QueueState_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = QueueState_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction QueueState_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) QueueState_setPrototypeOf(subClass, superClass); }\n\nfunction QueueState_setPrototypeOf(o, p) { QueueState_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return QueueState_setPrototypeOf(o, p); }\n\nfunction QueueState_createSuper(Derived) { var hasNativeReflectConstruct = QueueState_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = QueueState_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = QueueState_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return QueueState_possibleConstructorReturn(this, result); }; }\n\nfunction QueueState_possibleConstructorReturn(self, call) { if (call && (QueueState_typeof(call) === "object" || typeof call === "function")) { return call; } return QueueState_assertThisInitialized(self); }\n\nfunction QueueState_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction QueueState_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction QueueState_getPrototypeOf(o) { QueueState_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return QueueState_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n/**\r\n * Class for playing an ordered array of animation states in sequence.\r\n *\r\n * @extends AbstractState\r\n * @implements @AnimationPlayerInterface\r\n */\n\nvar QueueState = /*#__PURE__*/function (_AnimationPlayerInter) {\n QueueState_inherits(QueueState, _AnimationPlayerInter);\n\n var _super = QueueState_createSuper(QueueState);\n\n /**\r\n * @constructor\r\n *\r\n * @param {Object} [options={}] - Options for the state.\r\n * @param {boolean} [options.autoAdvance=true] - Whether to autmatically advance\r\n * to the next state in the queue as each state completes.\r\n * @param {Array.} [queueStates=[]] - Array of states to be played\r\n * in order.\r\n */\n function QueueState() {\n var _this;\n\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var queueStates = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n\n QueueState_classCallCheck(this, QueueState);\n\n _this = _super.call(this, options);\n queueStates.forEach(function (state) {\n _this.addState(state);\n });\n _this._queue = _this._states.keys();\n _this._done = true;\n return _this;\n }\n /**\r\n * Gets whether the animation queue has reached the end.\r\n */\n\n\n QueueState_createClass(QueueState, [{\n key: "done",\n get: function get() {\n return this._done;\n }\n /**\r\n * Gets the internal weight.\r\n *\r\n * @readonly\r\n * @type {number}\r\n */\n\n }, {\n key: "internalWeight",\n get: function get() {\n return this._currentState ? this._currentState.internalWeight * this._internalWeight : 0;\n }\n /**\r\n * Restart the queue iterator.\r\n *\r\n * @private\r\n */\n\n }, {\n key: "_reset",\n value: function _reset() {\n this._queue = this._states.keys();\n\n var _this$_queue$next = this._queue.next(),\n value = _this$_queue$next.value,\n done = _this$_queue$next.done;\n\n this._done = done;\n return value || null;\n }\n /**\r\n * Multiplies the user weight by a factor to determine the internal weight.\r\n *\r\n * @param {number} factor - 0-1 multiplier to apply to the user weight.\r\n */\n\n }, {\n key: "updateInternalWeight",\n value: function updateInternalWeight(factor) {\n QueueState_get(QueueState_getPrototypeOf(QueueState.prototype), "updateInternalWeight", this).call(this, factor);\n\n if (this._currentState) {\n this._currentState.updateInternalWeight(this._internalWeight);\n }\n }\n /**\r\n * Start the next animation in the queue.\r\n *\r\n * @param {Function=} onNext - Function to execute each time an animation completes\r\n * and the queue moves to the next animation.\r\n * @param {boolean} [wrap=false] - Whether or not to start the queue from the\r\n * beginning again if the end has been reached.\r\n *\r\n * @returns {Deferred}\r\n */\n\n }, {\n key: "next",\n value: function next(onNext) {\n var _this2 = this;\n\n var wrap = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n // Move the queue forward\n var _this$_queue$next2 = this._queue.next(),\n name = _this$_queue$next2.value,\n done = _this$_queue$next2.done;\n\n this._done = done;\n this._paused = false; // The queue has reached the end\n\n if (done) {\n // Start the queue over\n if (wrap) {\n return this.play(this._playCallbacks.onFinish, this._playCallbacks.onError, this._playCallbacks.onCancel, onNext);\n } // Stop the queue\n else {\n this._promises.finish.resolve();\n\n return this._promises.finish;\n }\n } // Signal the next animation is starting\n\n\n if (typeof onNext === \'function\') {\n var lastName = QueueState_toConsumableArray(this._states.keys())[this._states.size - 1];\n\n var isQueueEnd = name === lastName;\n onNext({\n name: name,\n canAdvance: this.getState(name).loopCount !== Infinity && !isQueueEnd,\n isQueueEnd: isQueueEnd\n });\n } // Start the next animation\n\n\n this.playAnimation(name, this._transitionTime, this._easingFn, function () {\n if (!_this2._paused && !_this2.isTransitioning) {\n _this2.next(onNext);\n }\n }, this._playCallbacks.onError);\n return this._promises.finish;\n }\n }, {\n key: "play",\n value: function play(onFinish, onError, onCancel, onNext) {\n var _this3 = this;\n\n var name = this._reset();\n\n QueueState_get(QueueState_getPrototypeOf(QueueState.prototype), "play", this).call(this, onFinish, onError, onCancel);\n\n if (this._done) {\n this._promises.finish.resolve();\n } else {\n // Signal the next animation is starting\n if (name !== this.currentAnimation && typeof onNext === \'function\') {\n var lastName = QueueState_toConsumableArray(this._states.keys())[this._states.size - 1];\n\n var isQueueEnd = name === lastName;\n onNext({\n name: name,\n canAdvance: name ? this.getState(name).loopCount !== Infinity && !isQueueEnd : true,\n isQueueEnd: !name || isQueueEnd\n });\n } // Start the next animation\n\n\n this.playAnimation(name, this._currentState ? this._transitionTime : 0, this._easingFn, function () {\n if (!_this3._paused && !_this3.isTransitioning) {\n _this3.next(onNext);\n }\n }, onError);\n }\n\n return this._promises.finish;\n }\n }, {\n key: "pause",\n value: function pause() {\n var paused = QueueState_get(QueueState_getPrototypeOf(QueueState.prototype), "pause", this).call(this);\n\n this.pauseAnimation();\n return paused;\n }\n }, {\n key: "resume",\n value: function resume(onFinish, onError, onCancel, onNext) {\n var _this4 = this;\n\n if (this._done) {\n return this.play(onFinish, onError, onCancel, onNext);\n } else {\n QueueState_get(QueueState_getPrototypeOf(QueueState.prototype), "resume", this).call(this, onFinish, onError, onCancel);\n\n this.resumeAnimation(this._currentState.name, this._transitionTime, this._easingFn, function () {\n if (!_this4._paused && !_this4.isTransitioning) {\n _this4.next(onNext);\n }\n }, onError);\n return this._promises.finish;\n }\n }\n }, {\n key: "cancel",\n value: function cancel() {\n var canceled = QueueState_get(QueueState_getPrototypeOf(QueueState.prototype), "cancel", this).call(this);\n\n if (this._currentState) {\n this._currentState.cancel();\n }\n\n return canceled;\n }\n }, {\n key: "stop",\n value: function stop() {\n var stopped = QueueState_get(QueueState_getPrototypeOf(QueueState.prototype), "stop", this).call(this);\n\n this.stopAnimation();\n this._done = true;\n return stopped;\n }\n }, {\n key: "discard",\n value: function discard() {\n QueueState_get(QueueState_getPrototypeOf(QueueState.prototype), "discard", this).call(this);\n\n this.discardStates();\n }\n }]);\n\n return QueueState;\n}(animpack_AnimationPlayerInterface.Mixin(state_StateContainerInterface.Mixin(state_AbstractState)));\n\n/* harmony default export */ var state_QueueState = (QueueState);\n// CONCATENATED MODULE: ./src/core/animpack/state/AbstractBlendState.js\nfunction AbstractBlendState_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { AbstractBlendState_typeof = function _typeof(obj) { return typeof obj; }; } else { AbstractBlendState_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return AbstractBlendState_typeof(obj); }\n\nfunction AbstractBlendState_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction AbstractBlendState_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction AbstractBlendState_createClass(Constructor, protoProps, staticProps) { if (protoProps) AbstractBlendState_defineProperties(Constructor.prototype, protoProps); if (staticProps) AbstractBlendState_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction AbstractBlendState_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { AbstractBlendState_get = Reflect.get; } else { AbstractBlendState_get = function _get(target, property, receiver) { var base = AbstractBlendState_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return AbstractBlendState_get(target, property, receiver || target); }\n\nfunction AbstractBlendState_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = AbstractBlendState_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction AbstractBlendState_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) AbstractBlendState_setPrototypeOf(subClass, superClass); }\n\nfunction AbstractBlendState_setPrototypeOf(o, p) { AbstractBlendState_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return AbstractBlendState_setPrototypeOf(o, p); }\n\nfunction AbstractBlendState_createSuper(Derived) { var hasNativeReflectConstruct = AbstractBlendState_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = AbstractBlendState_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = AbstractBlendState_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return AbstractBlendState_possibleConstructorReturn(this, result); }; }\n\nfunction AbstractBlendState_possibleConstructorReturn(self, call) { if (call && (AbstractBlendState_typeof(call) === "object" || typeof call === "function")) { return call; } return AbstractBlendState_assertThisInitialized(self); }\n\nfunction AbstractBlendState_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction AbstractBlendState_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction AbstractBlendState_getPrototypeOf(o) { AbstractBlendState_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return AbstractBlendState_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n\n/**\r\n * Base class for a state that blends a collection of {@link AbstractState}.\r\n *\r\n * @abstract\r\n * @implements StateContainerInterface\r\n */\n\nvar AbstractBlendState_AbstractBlendState = /*#__PURE__*/function (_StateContainerInterf) {\n AbstractBlendState_inherits(AbstractBlendState, _StateContainerInterf);\n\n var _super = AbstractBlendState_createSuper(AbstractBlendState);\n\n function AbstractBlendState() {\n var _this;\n\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var blendStates = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n\n AbstractBlendState_classCallCheck(this, AbstractBlendState);\n\n for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n args[_key - 2] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this, options].concat(args));\n blendStates.forEach(function (state) {\n _this.addState(state);\n });\n return _this;\n }\n /**\r\n * Gets the sum of internal weights of the sub-states.\r\n *\r\n * @readonly\r\n * @type {number}\r\n */\n\n\n AbstractBlendState_createClass(AbstractBlendState, [{\n key: "internalWeight",\n get: function get() {\n var blendWeights = 0;\n\n this._states.forEach(function (state) {\n blendWeights += state.internalWeight;\n });\n\n return blendWeights;\n }\n /**\r\n * Returns the weight of a state controlled by the container.\r\n *\r\n * @param {string} name - Name of the state to return the weight from.\r\n *\r\n * @returns {number} - Weight of the state.\r\n */\n\n }, {\n key: "getBlendWeight",\n value: function getBlendWeight(name) {\n // Make sure the name is valid\n var state = this.getState(name);\n\n if (state === undefined) {\n throw new Error("Cannot get weight of state ".concat(name, " from BlendState ").concat(this.name, ". No state exists with this name."));\n }\n\n return state.weight;\n }\n /**\r\n * Sets the weight of a state controlled by the container.\r\n *\r\n * @param {string} name - Name of the state to set the weight of.\r\n * @param {number} weight - Weight value to set on the state.\r\n *\r\n * @returns {Deferred}\r\n */\n\n }, {\n key: "setBlendWeight",\n value: function setBlendWeight(name, weight) {\n var seconds = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n var easingFn = arguments.length > 3 ? arguments[3] : undefined;\n // Make sure the name is valid\n var state = this.getState(name);\n\n if (state === undefined) {\n throw new Error("Cannot set weight of state ".concat(name, " from BlendState ").concat(this.name, ". No state exists with this name."));\n }\n\n weight = core_MathUtils.clamp(weight);\n return state.setWeight(weight, seconds, easingFn);\n }\n /**\r\n * Multiplies the weight of each sub-state by a factor to determine the internal weight.\r\n *\r\n * @param {number} factor - 0-1 multiplier to apply to the user weight.\r\n */\n\n }, {\n key: "updateInternalWeight",\n value: function updateInternalWeight(factor) {\n var _this2 = this;\n\n AbstractBlendState_get(AbstractBlendState_getPrototypeOf(AbstractBlendState.prototype), "updateInternalWeight", this).call(this, factor);\n\n this._states.forEach(function (state) {\n state.updateInternalWeight(_this2._internalWeight);\n });\n }\n /**\r\n * Update any values of the sub-states that need to be evaluated every frame.\r\n *\r\n * @param {number} deltaTime - Time in milliseconds since the last update.\r\n */\n\n }, {\n key: "update",\n value: function update(deltaTime) {\n AbstractBlendState_get(AbstractBlendState_getPrototypeOf(AbstractBlendState.prototype), "update", this).call(this, deltaTime);\n\n this._states.forEach(function (state) {\n state.update(deltaTime);\n });\n }\n /**\r\n * Start playback of the sub-states from the beginning.\r\n *\r\n * @param {Function=} onFinish - Function to execute when the state finishes.\r\n * @param {Function=} onError - Function to execute if the state encounters\r\n * an error during playback.\r\n * @param {Function=} onCancel - Function to execute if playback is canceled.\r\n *\r\n * @returns {Deferred}\r\n */\n\n }, {\n key: "play",\n value: function play(onFinish, onError, onCancel) {\n var promises = [AbstractBlendState_get(AbstractBlendState_getPrototypeOf(AbstractBlendState.prototype), "play", this).call(this)];\n\n this._states.forEach(function (state) {\n promises.push(state.play());\n });\n\n return core_Deferred.all(promises, onFinish, onError, onCancel);\n }\n /**\r\n * Pause playback of the sub-states. This prevents pending promises from being executed.\r\n *\r\n * @returns {boolean}\r\n */\n\n }, {\n key: "pause",\n value: function pause() {\n this._states.forEach(function (state) {\n state.pause();\n });\n\n return AbstractBlendState_get(AbstractBlendState_getPrototypeOf(AbstractBlendState.prototype), "pause", this).call(this);\n }\n /**\r\n * Resume playback of the sub-states.\r\n *\r\n * @param {Function=} onFinish - Function to execute when the state finishes.\r\n * @param {Function=} onError - Function to execute if the state encounters\r\n * an error during playback.\r\n * @param {Function=} onCancel - Function to execute if playback is canceled.\r\n *\r\n * @returns {Deferred}\r\n */\n\n }, {\n key: "resume",\n value: function resume(onFinish, onError, onCancel) {\n var promises = [AbstractBlendState_get(AbstractBlendState_getPrototypeOf(AbstractBlendState.prototype), "resume", this).call(this)];\n\n this._states.forEach(function (state) {\n promises.push(state.resume());\n });\n\n return core_Deferred.all(promises, onFinish, onError, onCancel);\n }\n /**\r\n * Cancel playback of the sub-states and cancel any pending promises.\r\n *\r\n * @returns {boolean}\r\n */\n\n }, {\n key: "cancel",\n value: function cancel() {\n this._states.forEach(function (state) {\n state.cancel();\n });\n\n return AbstractBlendState_get(AbstractBlendState_getPrototypeOf(AbstractBlendState.prototype), "cancel", this).call(this);\n }\n /**\r\n * Stop playback of the sub-states and resolve any pending promises.\r\n *\r\n * @returns {boolean}\r\n */\n\n }, {\n key: "stop",\n value: function stop() {\n this._states.forEach(function (state) {\n state.stop();\n });\n\n return AbstractBlendState_get(AbstractBlendState_getPrototypeOf(AbstractBlendState.prototype), "stop", this).call(this);\n }\n /**\r\n * Discards all sub-state resources.\r\n *\r\n * @returns {boolean}\r\n */\n\n }, {\n key: "discard",\n value: function discard() {\n AbstractBlendState_get(AbstractBlendState_getPrototypeOf(AbstractBlendState.prototype), "discard", this).call(this);\n\n this.discardStates();\n }\n }]);\n\n return AbstractBlendState;\n}(state_StateContainerInterface.Mixin(state_AbstractState));\n\n/* harmony default export */ var state_AbstractBlendState = (AbstractBlendState_AbstractBlendState);\n// CONCATENATED MODULE: ./src/core/animpack/state/FreeBlendState.js\nfunction FreeBlendState_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { FreeBlendState_typeof = function _typeof(obj) { return typeof obj; }; } else { FreeBlendState_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return FreeBlendState_typeof(obj); }\n\nfunction FreeBlendState_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction FreeBlendState_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction FreeBlendState_createClass(Constructor, protoProps, staticProps) { if (protoProps) FreeBlendState_defineProperties(Constructor.prototype, protoProps); if (staticProps) FreeBlendState_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction FreeBlendState_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { FreeBlendState_get = Reflect.get; } else { FreeBlendState_get = function _get(target, property, receiver) { var base = FreeBlendState_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return FreeBlendState_get(target, property, receiver || target); }\n\nfunction FreeBlendState_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = FreeBlendState_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction FreeBlendState_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) FreeBlendState_setPrototypeOf(subClass, superClass); }\n\nfunction FreeBlendState_setPrototypeOf(o, p) { FreeBlendState_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return FreeBlendState_setPrototypeOf(o, p); }\n\nfunction FreeBlendState_createSuper(Derived) { var hasNativeReflectConstruct = FreeBlendState_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = FreeBlendState_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = FreeBlendState_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return FreeBlendState_possibleConstructorReturn(this, result); }; }\n\nfunction FreeBlendState_possibleConstructorReturn(self, call) { if (call && (FreeBlendState_typeof(call) === "object" || typeof call === "function")) { return call; } return FreeBlendState_assertThisInitialized(self); }\n\nfunction FreeBlendState_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction FreeBlendState_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction FreeBlendState_getPrototypeOf(o) { FreeBlendState_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return FreeBlendState_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/**\r\n * Class for blending N number of blend states.\r\n *\r\n * @extends AbstractBlendState\r\n */\n\nvar FreeBlendState = /*#__PURE__*/function (_AbstractBlendState) {\n FreeBlendState_inherits(FreeBlendState, _AbstractBlendState);\n\n var _super = FreeBlendState_createSuper(FreeBlendState);\n\n /**\r\n * @constructor\r\n *\r\n * @param {Object} [options={}] - Options for the container state.\r\n * @param {Array.} [blendStates=[]] - Blend states to be controlled by\r\n * this container.\r\n */\n function FreeBlendState() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var blendStates = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n\n FreeBlendState_classCallCheck(this, FreeBlendState);\n\n return _super.call(this, options, blendStates);\n }\n\n FreeBlendState_createClass(FreeBlendState, [{\n key: "updateInternalWeight",\n value: function updateInternalWeight(factor) {\n var _this = this;\n\n FreeBlendState_get(FreeBlendState_getPrototypeOf(FreeBlendState.prototype), "updateInternalWeight", this).call(this, factor); // Determine the total active weight of blend states\n\n\n var sumWeights = 0;\n\n this._states.forEach(function (state) {\n sumWeights += state.weight;\n }); // Ensure the sum of blend state internal weights does not exceed container internal weight\n\n\n factor /= Math.max(sumWeights, 1); // Sum of blend state internal weights should not exceed container internal weight\n\n this._states.forEach(function (state) {\n state.updateInternalWeight(factor * _this._weight);\n });\n }\n }]);\n\n return FreeBlendState;\n}(state_AbstractBlendState);\n\n/* harmony default export */ var state_FreeBlendState = (FreeBlendState);\n// CONCATENATED MODULE: ./src/core/animpack/state/Blend1dState.js\nfunction Blend1dState_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { Blend1dState_typeof = function _typeof(obj) { return typeof obj; }; } else { Blend1dState_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return Blend1dState_typeof(obj); }\n\nfunction Blend1dState_toConsumableArray(arr) { return Blend1dState_arrayWithoutHoles(arr) || Blend1dState_iterableToArray(arr) || Blend1dState_unsupportedIterableToArray(arr) || Blend1dState_nonIterableSpread(); }\n\nfunction Blend1dState_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."); }\n\nfunction Blend1dState_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return Blend1dState_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return Blend1dState_arrayLikeToArray(o, minLen); }\n\nfunction Blend1dState_iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction Blend1dState_arrayWithoutHoles(arr) { if (Array.isArray(arr)) return Blend1dState_arrayLikeToArray(arr); }\n\nfunction Blend1dState_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction Blend1dState_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction Blend1dState_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { Blend1dState_ownKeys(Object(source), true).forEach(function (key) { Blend1dState_defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { Blend1dState_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction Blend1dState_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction Blend1dState_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction Blend1dState_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction Blend1dState_createClass(Constructor, protoProps, staticProps) { if (protoProps) Blend1dState_defineProperties(Constructor.prototype, protoProps); if (staticProps) Blend1dState_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction Blend1dState_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { Blend1dState_get = Reflect.get; } else { Blend1dState_get = function _get(target, property, receiver) { var base = Blend1dState_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return Blend1dState_get(target, property, receiver || target); }\n\nfunction Blend1dState_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = Blend1dState_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction Blend1dState_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) Blend1dState_setPrototypeOf(subClass, superClass); }\n\nfunction Blend1dState_setPrototypeOf(o, p) { Blend1dState_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return Blend1dState_setPrototypeOf(o, p); }\n\nfunction Blend1dState_createSuper(Derived) { var hasNativeReflectConstruct = Blend1dState_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = Blend1dState_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = Blend1dState_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return Blend1dState_possibleConstructorReturn(this, result); }; }\n\nfunction Blend1dState_possibleConstructorReturn(self, call) { if (call && (Blend1dState_typeof(call) === "object" || typeof call === "function")) { return call; } return Blend1dState_assertThisInitialized(self); }\n\nfunction Blend1dState_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction Blend1dState_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction Blend1dState_getPrototypeOf(o) { Blend1dState_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return Blend1dState_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n/**\r\n * Class for blending N number of blend states based on a single\r\n * parameter.\r\n *\r\n * @extends AbstractBlendState\r\n */\n\nvar Blend1dState_Blend1dState = /*#__PURE__*/function (_AbstractBlendState) {\n Blend1dState_inherits(Blend1dState, _AbstractBlendState);\n\n var _super = Blend1dState_createSuper(Blend1dState);\n\n /**\r\n * @constructor\r\n *\r\n * @param {Object} [options] - Options for the container state\r\n * @param {Array.} [blendStates=[]] - Blend states to be\r\n * controlled by this container.\r\n * @param {Array.} [blendThresholds=[]] - Threshold values for activating\r\n * each blend state.\r\n * @param {Array.} [phaseMatches=[]] - Booleans indicating whether or not\r\n * each blend state should be phase matched.\r\n */\n function Blend1dState() {\n var _this;\n\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var blendStates = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n var blendThresholds = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];\n var phaseMatches = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : [];\n\n Blend1dState_classCallCheck(this, Blend1dState);\n\n _this = _super.call(this, options, blendStates);\n _this._blendValue = 0;\n _this._promises = Blend1dState_objectSpread(Blend1dState_objectSpread({}, _this._promises), {}, {\n blendValue: core_Deferred.resolve()\n }); // Validate there are no duplicate thresholds\n\n var nonZeroDifferentSize = blendStates.length !== 0 && blendStates.length !== blendThresholds.length;\n\n if (nonZeroDifferentSize) {\n throw new Error("Cannot create Blend1dState with blendThresholds ".concat(blendThresholds, ". BlendThresholds count does not match blendStates count."));\n }\n\n var containsDuplicates = new Set(blendThresholds).size !== blendThresholds.length;\n\n if (containsDuplicates) {\n throw new Error("Cannot create Blend1dState with blendThresholds ".concat(blendThresholds, ". BlendThresholds contains duplicate values"));\n } // Initialize the thresholds map\n\n\n _this._thresholds = [];\n\n Blend1dState_toConsumableArray(_this._states.values()).forEach(function (state, index) {\n _this._thresholds.push({\n value: blendThresholds[index],\n name: state.name,\n phaseMatch: phaseMatches[index] || false\n });\n });\n\n _this._sortThresholds();\n\n _this._forceNoThresholdDupes = true;\n _this._phaseLeadState = null;\n\n _this._updateBlendWeights();\n\n return _this;\n }\n /**\r\n * Gets and sets the blend parameter value.\r\n */\n\n\n Blend1dState_createClass(Blend1dState, [{\n key: "blendValue",\n get: function get() {\n return this._blendValue;\n },\n set: function set(value) {\n this._blendValue = value;\n }\n /**\r\n * Gets whether or not the blend value is currently being animated.\r\n */\n\n }, {\n key: "blendValuePending",\n get: function get() {\n return this._promises.blendValue && this._promises.blendValue.pending;\n }\n /**\r\n * Updates the user defined weight over time.\r\n *\r\n * @param {null} name - Unused parameter.\r\n * @param {number} weight - The target weight value.\r\n * @param {number} [seconds=0] - The amount of time it will take to reach the\r\n * target weight.\r\n * @param {Function=} easingFn - The easing function to use for interpolation.\r\n *\r\n * @returns {Deferred}\r\n */\n\n }, {\n key: "setBlendWeight",\n value: function setBlendWeight(name, value) {\n var _this2 = this;\n\n var seconds = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n var easingFn = arguments.length > 3 ? arguments[3] : undefined;\n\n this._promises.blendValue.cancel();\n\n this._promises.blendValue = animpack_AnimationUtils.interpolateProperty(this, \'blendValue\', value, {\n seconds: seconds,\n easingFn: easingFn,\n onProgress: function onProgress() {\n _this2._updateBlendWeights();\n },\n onFinish: function onFinish() {\n _this2._updateBlendWeights();\n }\n });\n return this._promises.blendValue;\n }\n /**\r\n * Gets the user defined weight.\r\n *\r\n * @returns {number}\r\n */\n\n }, {\n key: "getBlendWeight",\n value: function getBlendWeight() {\n return this.blendValue;\n }\n }, {\n key: "addState",\n value: function addState(state) {\n var thresholdValue = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var phaseMatch = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n this._thresholds = this._thresholds || []; // Make sure there is not already a state with this threshold\n\n var sameValue = this._thresholds.find(function (threshold) {\n return threshold.value === thresholdValue;\n });\n\n if (this._forceNoThresholdDupes && sameValue !== undefined) {\n throw new Error("Cannot set blend threshold of ".concat(thresholdValue, " for state ").concat(state.name, " on ").concat(this.name, ". A state already exists with that threshold."));\n }\n\n Blend1dState_get(Blend1dState_getPrototypeOf(Blend1dState.prototype), "addState", this).call(this, state);\n\n this._thresholds.push({\n value: thresholdValue,\n name: state.name,\n phaseMatch: phaseMatch || false\n });\n\n this._sortThresholds();\n\n return state.name;\n }\n }, {\n key: "removeState",\n value: function removeState(name) {\n var removed = Blend1dState_get(Blend1dState_getPrototypeOf(Blend1dState.prototype), "removeState", this).call(this, name);\n\n if (removed) {\n var index = this._thresholds.findIndex(function (threshold) {\n return threshold.name === name;\n });\n\n this._thresholds.splice(index, 1);\n }\n\n return removed;\n }\n }, {\n key: "renameState",\n value: function renameState(currentName, newName) {\n newName = Blend1dState_get(Blend1dState_getPrototypeOf(Blend1dState.prototype), "renameState", this).call(this, currentName, newName);\n\n var threshold = this._thresholds.find(function (threshold) {\n return threshold.name === currentName;\n });\n\n threshold.name = newName;\n return newName;\n }\n /**\r\n * Gets the threshold value of a blend with the corresponding name.\r\n *\r\n * @param {string} name - Name of the blend to get the threshold of.\r\n *\r\n * @returns {number} Threhold value.\r\n */\n\n }, {\n key: "getBlendThreshold",\n value: function getBlendThreshold(name) {\n var threshold = this._thresholds.find(function (threshold) {\n return threshold.name === name;\n });\n\n if (threshold === undefined) {\n throw new Error("Cannot get blend threshold of state ".concat(name, " on ").concat(this.name, ". No state exists with that name."));\n }\n\n return threshold.value;\n }\n /**\r\n * Sets the threshold value of a blend with the corresponding name.\r\n *\r\n * @param {string} name - Name of the blend to set the threshold.\r\n * @param {number} value - Value of the threshold to set.\r\n *\r\n * @returns {number} Set threshold value.\r\n */\n\n }, {\n key: "setBlendThreshold",\n value: function setBlendThreshold(name, value) {\n // Make sure there is not already a state with this threshold\n var sameValue = this._thresholds.find(function (threshold) {\n return threshold.value === value;\n });\n\n if (sameValue !== undefined) {\n throw new Error("Cannot set blend threshold of ".concat(value, " for state ").concat(name, " on ").concat(this.name, ". A state already exists with that threshold."));\n }\n\n var threshold = this._thresholds.find(function (threshold) {\n return threshold.name === name;\n });\n\n if (threshold === undefined) {\n throw new Error("Cannot set blend threshold of state ".concat(name, " on ").concat(this.name, ". No state exists with that name."));\n }\n\n threshold.value = value;\n\n this._sortThresholds();\n\n return threshold.value;\n }\n }, {\n key: "updateInternalWeight",\n value: function updateInternalWeight(factor) {\n var _this3 = this;\n\n Blend1dState_get(Blend1dState_getPrototypeOf(Blend1dState.prototype), "updateInternalWeight", this).call(this, factor);\n\n if (this._phaseLeadState) {\n this._states.forEach(function (state) {\n if (state.weight !== 0) {\n state.normalizedTime = _this3._phaseLeadState.normalizedTime;\n }\n });\n }\n }\n /**\r\n * Updates the blend weights based on their corresponding threshold values\r\n * and the current blendValue. Additionally, sets a lead phase state if the\r\n * conditions for phase-matching have been satisfied.\r\n *\r\n * @private\r\n */\n\n }, {\n key: "_updateBlendWeights",\n value: function _updateBlendWeights() {\n var _this4 = this;\n\n if (this._thresholds.length === 0) return;\n\n if (this._thresholds.length === 1) {\n var state = this._states.get(this._thresholds[0].name);\n\n state.setWeight(1);\n return;\n } // Initially set all sub-state weights to zero\n\n\n this._states.forEach(function (state) {\n state.setWeight(0);\n });\n\n this._phaseLeadState = null; // Find the first threshold that is greater than or equal to the parameter value\n\n var targetIndex = this._thresholds.findIndex(function (threshold) {\n return threshold.value >= _this4._blendValue;\n });\n\n if (targetIndex === 0 || targetIndex === -1) {\n // Give one state full influence\n targetIndex = targetIndex === -1 ? this._thresholds.length - 1 : 0;\n\n var _state = this._states.get(this._thresholds[targetIndex].name);\n\n _state.setWeight(1);\n } else {\n // Linear interpolate influence between two states\n var thresholdA = this._thresholds[targetIndex - 1];\n var thresholdB = this._thresholds[targetIndex];\n var factorB = (this.blendValue - thresholdA.value) / (thresholdB.value - thresholdA.value);\n var factorA = 1 - factorB;\n\n var stateA = this._states.get(thresholdA.name);\n\n var stateB = this._states.get(thresholdB.name);\n\n stateA.setWeight(factorA);\n stateB.setWeight(factorB); // Set phase-matching if needed\n\n if (thresholdA.phaseMatch && thresholdB.phaseMatch) {\n this._phaseLeadState = factorA > factorB ? stateA : stateB;\n }\n }\n }\n /**\r\n * Sorts the thresholds from low to high based on value.\r\n *\r\n * @private\r\n */\n\n }, {\n key: "_sortThresholds",\n value: function _sortThresholds() {\n this._thresholds.sort(function (a, b) {\n return a.value - b.value;\n });\n }\n }]);\n\n return Blend1dState;\n}(state_AbstractBlendState);\n\n/* harmony default export */ var state_Blend1dState = (Blend1dState_Blend1dState);\n// CONCATENATED MODULE: ./src/core/animpack/state/Blend2dState.js\nfunction Blend2dState_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { Blend2dState_typeof = function _typeof(obj) { return typeof obj; }; } else { Blend2dState_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return Blend2dState_typeof(obj); }\n\nfunction Blend2dState_toConsumableArray(arr) { return Blend2dState_arrayWithoutHoles(arr) || Blend2dState_iterableToArray(arr) || Blend2dState_unsupportedIterableToArray(arr) || Blend2dState_nonIterableSpread(); }\n\nfunction Blend2dState_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."); }\n\nfunction Blend2dState_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return Blend2dState_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return Blend2dState_arrayLikeToArray(o, minLen); }\n\nfunction Blend2dState_iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction Blend2dState_arrayWithoutHoles(arr) { if (Array.isArray(arr)) return Blend2dState_arrayLikeToArray(arr); }\n\nfunction Blend2dState_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction Blend2dState_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction Blend2dState_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { Blend2dState_ownKeys(Object(source), true).forEach(function (key) { Blend2dState_defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { Blend2dState_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction Blend2dState_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction Blend2dState_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction Blend2dState_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction Blend2dState_createClass(Constructor, protoProps, staticProps) { if (protoProps) Blend2dState_defineProperties(Constructor.prototype, protoProps); if (staticProps) Blend2dState_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction Blend2dState_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { Blend2dState_get = Reflect.get; } else { Blend2dState_get = function _get(target, property, receiver) { var base = Blend2dState_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return Blend2dState_get(target, property, receiver || target); }\n\nfunction Blend2dState_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = Blend2dState_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction Blend2dState_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) Blend2dState_setPrototypeOf(subClass, superClass); }\n\nfunction Blend2dState_setPrototypeOf(o, p) { Blend2dState_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return Blend2dState_setPrototypeOf(o, p); }\n\nfunction Blend2dState_createSuper(Derived) { var hasNativeReflectConstruct = Blend2dState_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = Blend2dState_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = Blend2dState_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return Blend2dState_possibleConstructorReturn(this, result); }; }\n\nfunction Blend2dState_possibleConstructorReturn(self, call) { if (call && (Blend2dState_typeof(call) === "object" || typeof call === "function")) { return call; } return Blend2dState_assertThisInitialized(self); }\n\nfunction Blend2dState_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction Blend2dState_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction Blend2dState_getPrototypeOf(o) { Blend2dState_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return Blend2dState_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/* eslint-disable no-underscore-dangle */\n\n\n\n\n/**\r\n * Class for blending N number of blend states based on two\r\n * paramters.\r\n *\r\n * @extends AbstractBlendState\r\n */\n\nvar Blend2dState_Blend2dState = /*#__PURE__*/function (_AbstractBlendState) {\n Blend2dState_inherits(Blend2dState, _AbstractBlendState);\n\n var _super = Blend2dState_createSuper(Blend2dState);\n\n /**\r\n * @constructor\r\n *\r\n * @param {Object} [options] - Options for the container state\r\n * @param {Array.} [blendStates=[]] - Blend states to be\r\n * controlled by this container.\r\n * @param {Array.>} [blendThresholds=[]] - Threshold values for activating\r\n * each blend state.\r\n * @param {Array.} [phaseMatches=[]] - Booleans indicating whether or not\r\n * each blend state should be phase matched.\r\n */\n function Blend2dState() {\n var _this;\n\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var blendStates = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n var blendThresholds = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];\n var phaseMatches = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : [];\n\n Blend2dState_classCallCheck(this, Blend2dState);\n\n _this = _super.call(this, options, blendStates);\n\n if (blendStates.length !== blendThresholds.length) {\n throw new Error("Cannot create Blend2dState with blendStates ".concat(blendStates, " and blendThresholds ").concat(blendThresholds, ". Count of blendStates must match count of blendThresholds."));\n }\n\n blendThresholds.slice(0, blendThresholds.length - 1).forEach(function (threshold, index) {\n blendThresholds.slice(index + 1).forEach(function (otherThreshold) {\n if (threshold[0] === otherThreshold[0] && threshold[1] === otherThreshold[1]) {\n throw new Error("Cannot create Blend2dState with blendThresholds ".concat(blendThresholds, ". No duplicate values allowed in blendThresholds."));\n }\n });\n });\n _this._blendValueX = 0;\n _this._blendValueY = 0;\n _this._promises = Blend2dState_objectSpread(Blend2dState_objectSpread({}, _this._promises), {}, {\n blendValueX: core_Deferred.resolve(),\n blendValueY: core_Deferred.resolve()\n });\n _this._thresholds = [];\n\n Blend2dState_toConsumableArray(_this._states.values()).forEach(function (state, index) {\n _this._thresholds.push({\n name: state.name,\n phaseMatch: phaseMatches[index] || false\n });\n });\n\n _this._vertices = blendThresholds;\n\n if (_this._vertices.length >= 3) {\n _this._triangles = core_MathUtils.getDelaunayTriangulation(_this._vertices);\n }\n\n _this._phaseLeadState = null;\n\n _this._updateBlendWeights();\n\n return _this;\n }\n /**\r\n * Updates the user defined weight over time.\r\n *\r\n * @param {string} name - Name of blend weight to update.\r\n * @param {number} weight - Target weight value.\r\n * @param {number} [seconds=0] - The amount of time it will take to reach the\r\n * target value.\r\n * @param {Function=} easingFn - The easing function to use for interpolation.\r\n *\r\n * @returns {Deferred}\r\n */\n\n\n Blend2dState_createClass(Blend2dState, [{\n key: "setBlendWeight",\n value: function setBlendWeight(name, value) {\n var _this2 = this;\n\n var seconds = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n var easingFn = arguments.length > 3 ? arguments[3] : undefined;\n var property = "blendValue".concat(name.toUpperCase());\n\n if (property !== \'blendValueX\' && property !== \'blendValueY\') {\n throw new Error("Cannot set blend weight for ".concat(name, " on ").concat(this.name, ". Blend2dState only accepts \'X\' or \'Y\' for setBlendWeight"));\n }\n\n this._promises[property].cancel();\n\n this._promises[property] = animpack_AnimationUtils.interpolateProperty(this, property, value, {\n seconds: seconds,\n easingFn: easingFn,\n onProgress: function onProgress() {\n _this2._updateBlendWeights();\n },\n onFinish: function onFinish() {\n _this2._updateBlendWeights();\n }\n });\n return this._promises[property];\n }\n /**\r\n * Gets the user defined weight.\r\n *\r\n * @param {string} name - Name of blend weight.\r\n *\r\n * @returns {number}\r\n */\n\n }, {\n key: "getBlendWeight",\n value: function getBlendWeight(name) {\n var property = name.toUpperCase();\n\n if (property !== \'X\' && property !== \'Y\') {\n throw new Error("Cannot get blend weight for ".concat(name, " on ").concat(this.name, ". Blend2dState only accepts \'X\' or \'Y\' for getBlendWeight"));\n }\n\n return property === \'X\' ? this._blendValueX : this._blendValueY;\n }\n /**\r\n * Gets and sets the x blend weight.\r\n */\n\n }, {\n key: "blendValueX",\n get: function get() {\n return this._blendValueX;\n },\n set: function set(value) {\n this._blendValueX = value;\n }\n /**\r\n * Gets and sets the y blend weight.\r\n */\n\n }, {\n key: "blendValueY",\n get: function get() {\n return this._blendValueY;\n },\n set: function set(value) {\n this._blendValueY = value;\n }\n /**\r\n * Gets whether or not the x blend value is currently being animated.\r\n */\n\n }, {\n key: "blendValueXPending",\n get: function get() {\n return this._promises.blendValueX && this._promises.blendValueX.pending;\n }\n /**\r\n * Gets whether or not the y blend value is currently being animated.\r\n */\n\n }, {\n key: "blendValueYPending",\n get: function get() {\n return this._promises.blendValueY && this._promises.blendValueY.pending;\n }\n }, {\n key: "updateInternalWeight",\n value: function updateInternalWeight(factor) {\n var _this3 = this;\n\n Blend2dState_get(Blend2dState_getPrototypeOf(Blend2dState.prototype), "updateInternalWeight", this).call(this, factor);\n\n if (this._phaseLeadState) {\n Blend2dState_toConsumableArray(this._states.values()).forEach(function (state, index) {\n if (state.weight !== 0 && _this3._thresholds[index].phaseMatch) {\n state.normalizedTime = _this3._phaseLeadState.normalizedTime;\n }\n });\n }\n }\n /**\r\n * Updates the blend weights based on their corresponding threshold values\r\n * and the current [x,y] blendValue. Additionally, sets a lead phase state if the\r\n * conditions for phase-matching have been satisfied.\r\n *\r\n * @private\r\n */\n\n }, {\n key: "_updateBlendWeights",\n value: function _updateBlendWeights() {\n var _this4 = this;\n\n if (!this._vertices || this._vertices.length === 0) return;\n\n if (this._vertices.length === 1) {\n Blend2dState_toConsumableArray(this._states.values())[0].weight = 1;\n return;\n } // Initially set all sub-state weights to zero\n\n\n this._states.forEach(function (state) {\n state.setWeight(0);\n });\n\n this._phaseLeadState = null;\n var p = [this._blendValueX, this._blendValueY];\n\n if (this._vertices.length === 2) {\n this._setInfluenceClosestPointOnLine(p);\n } else {\n var triangle = this._triangles.find(function (triangle) {\n return core_MathUtils.isPointInTriangle(_this4._vertices[triangle[0]], _this4._vertices[triangle[1]], _this4._vertices[triangle[2]], p);\n });\n\n if (triangle) {\n this._setInfluenceTriangle(triangle, p);\n } else {\n this._setInfluenceClosestPointInTriangles(p);\n }\n }\n }\n /**\r\n * Sets blend weights for states corresponding to a\r\n * triangle of thresholds and a given [x,y] blendValues.\r\n *\r\n * @param {Array.>} triangle - Set of triangluated indices\r\n * that correspond to blend thresholds.\r\n * @param {Array.} p - Given [x,y] blendValue.\r\n *\r\n * @private\r\n */\n\n }, {\n key: "_setInfluenceTriangle",\n value: function _setInfluenceTriangle(triangle, p) {\n var areaA = core_MathUtils.triangleArea(this._vertices[triangle[1]], this._vertices[triangle[2]], p);\n var areaB = core_MathUtils.triangleArea(this._vertices[triangle[0]], this._vertices[triangle[2]], p);\n var areaC = core_MathUtils.triangleArea(this._vertices[triangle[0]], this._vertices[triangle[1]], p);\n var totalArea = areaA + areaB + areaC;\n var weightA = areaA / totalArea;\n var weightB = areaB / totalArea;\n var weightC = areaC / totalArea;\n var thresholdA = this._thresholds[triangle[0]];\n var thresholdB = this._thresholds[triangle[1]];\n var thresholdC = this._thresholds[triangle[2]];\n\n var stateA = this._states.get(thresholdA.name);\n\n var stateB = this._states.get(thresholdB.name);\n\n var stateC = this._states.get(thresholdC.name);\n\n stateA.setWeight(weightA);\n stateB.setWeight(weightB);\n stateC.setWeight(weightC);\n\n this._setPhaseLeadState([stateA, stateB, stateC], [thresholdA.phaseMatch, thresholdB.phaseMatch, thresholdC.phaseMatch]);\n }\n /**\r\n * Determines the closest point within a triangle of\r\n * thresholds based on the current [x,y] blendValues and\r\n * then sets blend weights for the corresponding states.\r\n *\r\n * @param {Array.} p - Given [x,y] blendValue.\r\n *\r\n * @private\r\n */\n\n }, {\n key: "_setInfluenceClosestPointInTriangles",\n value: function _setInfluenceClosestPointInTriangles(p) {\n var _this5 = this;\n\n var globalClosestPoint = null;\n var globalMinDist = Number.POSITIVE_INFINITY;\n var closestTriangle = -1;\n\n this._triangles.forEach(function (triangle, index) {\n var pointA = core_MathUtils.closestPointOnLine(_this5._vertices[triangle[0]], _this5._vertices[triangle[1]], p);\n var pointB = core_MathUtils.closestPointOnLine(_this5._vertices[triangle[1]], _this5._vertices[triangle[2]], p);\n var pointC = core_MathUtils.closestPointOnLine(_this5._vertices[triangle[2]], _this5._vertices[triangle[0]], p);\n var distA = core_MathUtils.distanceSquared(pointA, p);\n var distB = core_MathUtils.distanceSquared(pointB, p);\n var distC = core_MathUtils.distanceSquared(pointC, p);\n var localClosestPoint = pointC;\n var localMinDist = distC;\n\n if (distA < localMinDist) {\n localClosestPoint = pointA;\n localMinDist = distA;\n }\n\n if (distB < localMinDist) {\n localClosestPoint = pointB;\n localMinDist = distB;\n }\n\n if (localMinDist < globalMinDist) {\n globalMinDist = localMinDist;\n globalClosestPoint = Blend2dState_toConsumableArray(localClosestPoint);\n closestTriangle = index;\n }\n });\n\n this._setInfluenceTriangle(this._triangles[closestTriangle], globalClosestPoint);\n }\n /**\r\n * Determines the closest point on the line formed between the\r\n * two blend thresholds based on the current [x,y] blendValues and\r\n * then sets blend weights for the corresponding states.\r\n *\r\n * @param {Array.} p - Given [x,y] blendValue.\r\n *\r\n * @private\r\n */\n\n }, {\n key: "_setInfluenceClosestPointOnLine",\n value: function _setInfluenceClosestPointOnLine(p) {\n var closestPoint = core_MathUtils.closestPointOnLine(this._vertices[[0]], this._vertices[[1]], p);\n var distA = core_MathUtils.distanceSquared(this._vertices[0], closestPoint);\n var distB = core_MathUtils.distanceSquared(this._vertices[1], closestPoint);\n var weightA = distB / (distA + distB);\n var weightB = distA / (distA + distB);\n var thresholdA = this._thresholds[0];\n var thresholdB = this._thresholds[1];\n\n var stateA = this._states.get(thresholdA.name);\n\n var stateB = this._states.get(thresholdB.name);\n\n stateA.setWeight(weightA);\n stateB.setWeight(weightB);\n\n this._setPhaseLeadState([stateA, stateB], [thresholdA.phaseMatch, thresholdB.phaseMatch]);\n }\n /**\r\n * Sets a lead phase state if the conditions\r\n * for phase-matching are satisfied.\r\n *\r\n * @param {Array.} states - States to\r\n * check phase-matching criteria.\r\n * @param {Array.} phaseMatched - List of phase-match booleans.\r\n *\r\n * @private\r\n */\n\n }, {\n key: "_setPhaseLeadState",\n value: function _setPhaseLeadState(states, phaseMatched) {\n var _this6 = this;\n\n var max = 0;\n states.forEach(function (state, index) {\n if (phaseMatched[index] && state.weight > max) {\n _this6._phaseLeadState = state;\n max = state.weight;\n }\n });\n }\n }]);\n\n return Blend2dState;\n}(state_AbstractBlendState);\n\n/* harmony default export */ var state_Blend2dState = (Blend2dState_Blend2dState);\n// CONCATENATED MODULE: ./src/core/animpack/AnimationLayer.js\nfunction AnimationLayer_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { AnimationLayer_typeof = function _typeof(obj) { return typeof obj; }; } else { AnimationLayer_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return AnimationLayer_typeof(obj); }\n\nfunction AnimationLayer_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction AnimationLayer_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction AnimationLayer_createClass(Constructor, protoProps, staticProps) { if (protoProps) AnimationLayer_defineProperties(Constructor.prototype, protoProps); if (staticProps) AnimationLayer_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction AnimationLayer_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { AnimationLayer_get = Reflect.get; } else { AnimationLayer_get = function _get(target, property, receiver) { var base = AnimationLayer_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return AnimationLayer_get(target, property, receiver || target); }\n\nfunction AnimationLayer_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = AnimationLayer_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction AnimationLayer_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) AnimationLayer_setPrototypeOf(subClass, superClass); }\n\nfunction AnimationLayer_setPrototypeOf(o, p) { AnimationLayer_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return AnimationLayer_setPrototypeOf(o, p); }\n\nfunction AnimationLayer_createSuper(Derived) { var hasNativeReflectConstruct = AnimationLayer_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = AnimationLayer_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = AnimationLayer_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return AnimationLayer_possibleConstructorReturn(this, result); }; }\n\nfunction AnimationLayer_possibleConstructorReturn(self, call) { if (call && (AnimationLayer_typeof(call) === "object" || typeof call === "function")) { return call; } return AnimationLayer_assertThisInitialized(self); }\n\nfunction AnimationLayer_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction AnimationLayer_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction AnimationLayer_getPrototypeOf(o) { AnimationLayer_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return AnimationLayer_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n\n\n\n/**\r\n * Enum for types of {@link AnimationLayer} blending.\r\n *\r\n * @readonly\r\n * @enum {string}\r\n */\n\nvar LayerBlendModes = {\n Override: \'Override\',\n Additive: \'Additive\'\n};\n/**\r\n * The default blending mode {@link AnimationLayer}.\r\n *\r\n * @readonly\r\n * @type {string}\r\n */\n\nvar DefaultLayerBlendMode = \'Override\';\n/**\r\n * Checks if a given blendMode is present in the values of {@link LayerBlendModes}.\r\n * If it is, return the original value, otherwise return {@link DefaultLayerBlendMode}.\r\n *\r\n * @param {string} blendMode - The name of the type of blending.\r\n *\r\n * @returns {(string|DefaultLayerBlendMode)}\r\n */\n\nfunction validateBlendMode(blendMode) {\n if (Array.from(Object.values(LayerBlendModes)).includes(blendMode)) {\n return blendMode;\n } else {\n return DefaultLayerBlendMode;\n }\n}\n/**\r\n * Class for managing a set of animations where only one state can be active at\r\n * any given time.\r\n *\r\n * @implements AnimationPlayerInterface\r\n * @implements StateContainerInterface\r\n */\n\nvar AnimationLayer_AnimationLayer = /*#__PURE__*/function (_AnimationPlayerInter) {\n AnimationLayer_inherits(AnimationLayer, _AnimationPlayerInter);\n\n var _super = AnimationLayer_createSuper(AnimationLayer);\n\n /**\r\n * @constructor\r\n *\r\n * @param {Object=} options - Options for the animation layer.\r\n * @param {string} options.name - Name of the layer. Names must be unique to the\r\n * animation feature that contains the layer.\r\n * @param {LayerBlendModes} [options.blendMode=DefaultLayerBlendMode] -\r\n * Type of blending to use for all states controlled by the layer.\r\n * @param {number} [options.weight=1] - The amount of influence the layer\'s current\r\n * animation has over the result for the host.\r\n * @param {number} [options.transitionTime=0] - The default amount of time to use when\r\n * playing and resuming animations.\r\n * @param {Function=} options.easingFn - The default easing function to use when\r\n * transitioning between animations and setting layer weight.\r\n */\n function AnimationLayer() {\n var _this;\n\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n AnimationLayer_classCallCheck(this, AnimationLayer);\n\n _this = _super.call(this, options);\n _this.name = options.name === undefined ? \'AnimationLayer\' : options.name;\n _this._blendMode = Array.from(Object.values(LayerBlendModes)).includes(options.blendMode) ? options.blendMode : DefaultLayerBlendMode;\n _this._promises = {\n weight: core_Deferred.resolve()\n };\n _this._weightPaused = false;\n _this.weight = typeof options.weight === \'number\' ? options.weight : 1;\n _this._internalWeight = _this._weight;\n return _this;\n }\n /**\r\n * Gets the type of blending used for states controlled by the layer.\r\n *\r\n * @readonly\r\n * @type {string}\r\n */\n\n\n AnimationLayer_createClass(AnimationLayer, [{\n key: "blendMode",\n get: function get() {\n return this._blendMode;\n }\n /**\r\n * Gets and sets the amount of influence the layer\'s current animation has over\r\n * the result for the host.\r\n *\r\n * @type {number}\r\n */\n\n }, {\n key: "weight",\n get: function get() {\n return this._weight;\n }\n /**\r\n * Gets whether or not the layer\'s weight value is currently being animated.\r\n *\r\n * @readonly\r\n * @type {boolean}\r\n */\n ,\n set: function set(weight) {\n this._weight = core_MathUtils.clamp(weight, 0, 1);\n }\n }, {\n key: "weightPending",\n get: function get() {\n return this._promises.weight && this._promises.weight.pending;\n }\n /**\r\n * Pause the current animation state and any interpolation happening on the layer\'s\r\n * weight property.\r\n *\r\n * @returns {boolean}\r\n */\n\n }, {\n key: "pause",\n value: function pause() {\n this._paused = true;\n this._weightPaused = true;\n return this.pauseAnimation() || this.weightPending;\n }\n /**\r\n * Resume the current animation state and any interpolation happening on the layer\'s\r\n * weight property.\r\n *\r\n * @returns {boolean}\r\n */\n\n }, {\n key: "resume",\n value: function resume() {\n this._paused = false;\n this._weightPaused = false;\n var isWeightActive = this.weightPending;\n\n if (this._currentState) {\n return this.resumeAnimation() || isWeightActive;\n } else {\n return isWeightActive;\n }\n }\n /**\r\n * Updates the user defined weight over time.\r\n *\r\n * @param {number} weight - The target weight value.\r\n * @param {number} [seconds=0] - The amount of time it will take to reach the\r\n * target weight.\r\n * @param {Function=} easingFn - The easing function to use for interpolation.\r\n *\r\n * @returns {Deferred}\r\n */\n\n }, {\n key: "setWeight",\n value: function setWeight(weight) {\n var seconds = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var easingFn = arguments.length > 2 ? arguments[2] : undefined;\n\n if (this.weightPending) {\n this._promises.weight.cancel();\n }\n\n weight = core_MathUtils.clamp(weight);\n this._promises.weight = animpack_AnimationUtils.interpolateProperty(this, \'weight\', weight, {\n seconds: seconds,\n easingFn: easingFn !== undefined ? easingFn : this._easingFn\n });\n return this._promises.weight;\n }\n /**\r\n * Pause any interpolation happening on the layer\'s weight property.\r\n *\r\n * @returns {boolean}\r\n */\n\n }, {\n key: "pauseWeight",\n value: function pauseWeight() {\n this._weightPaused = true;\n return this.weightPending;\n }\n /**\r\n * Resume any interpolation happening on the layer\'s weight property.\r\n *\r\n * @returns {boolean}\r\n */\n\n }, {\n key: "resumeWeight",\n value: function resumeWeight() {\n this._weightPaused = false;\n return this.weightPending;\n }\n /**\r\n * Multiplies the user weight by a factor to determine the internal weight.\r\n *\r\n * @param {number} factor - 0-1 multiplier to apply to the user weight.\r\n */\n\n }, {\n key: "updateInternalWeight",\n value: function updateInternalWeight(factor) {\n this._internalWeight = this._weight * factor;\n\n if (this._currentState) {\n this._currentState.updateInternalWeight(this._internalWeight);\n }\n }\n /**\r\n * Returns the names of blend states in an animation.\r\n *\r\n * @param {string} animationName - Name of the animation.\r\n *\r\n * @returns {Array.} - Names of blend states.\r\n */\n\n }, {\n key: "getAnimationBlendNames",\n value: function getAnimationBlendNames(animationName) {\n var state = this.getState(animationName);\n\n if (state === undefined) {\n throw new Error("Cannot get blend names of animation ".concat(animationName, " on layer ").concat(this.name, ". No animation exists with this name."));\n }\n\n if (state instanceof state_AbstractBlendState) {\n return state.getStateNames();\n }\n\n throw new Error("Cannot get blend names of animation ".concat(animationName, " on layer ").concat(this.name, ". Animation is not an instance of AbstractBlendState."));\n }\n /**\r\n * Update the weight for a blend state of an animation.\r\n *\r\n * @param {string} animationName - Name of the animation containing the blend state\r\n * to update.\r\n * @param {string} blendName - Name of the blend state to update.\r\n * @param {number} weight - Weight value to set on the animation. This number shoudld be\r\n * in the 0-1 range.\r\n * @param {number=} seconds - Number of seconds it should take to reach the new weight.\r\n * Default is zero and will set immediately.\r\n * @param {Function=} easingFn - Easing function to use while interpolating the new\r\n * weight. Default is Easing.Linear.InOut.\r\n *\r\n * @returns {Deferred} - Promise that will resolve once the animation\'s weight reaches\r\n * the target value.\r\n */\n\n }, {\n key: "setAnimationBlendWeight",\n value: function setAnimationBlendWeight(animationName, blendName, weight) {\n var seconds = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;\n var easingFn = arguments.length > 4 ? arguments[4] : undefined;\n var state = this.getState(animationName);\n\n if (state === undefined) {\n throw new Error("Cannot set blend weight of animation ".concat(animationName, " on layer ").concat(this.name, ". No animation exists with this name."));\n }\n\n if (state instanceof state_AbstractBlendState) {\n return state.setBlendWeight(blendName, weight, seconds, easingFn);\n }\n\n throw new Error("Cannot set blend weight of animation ".concat(animationName, " on layer ").concat(this.name, ". Animation is not an instance of AbstractBlendState."));\n }\n /**\r\n * Returns the weight for a blend state of an animation.\r\n *\r\n * @param {string} animationName - Name of the animation containing the blend state\r\n * to update.\r\n * @param {string} blendName - Name of the blend state to retrieve the weight of.\r\n *\r\n * @returns {number} - Weight of the blend state.\r\n */\n\n }, {\n key: "getAnimationBlendWeight",\n value: function getAnimationBlendWeight(animationName, blendName) {\n var state = this.getState(animationName);\n\n if (state === undefined) {\n throw new Error("Cannot get blend weight of animation ".concat(animationName, " on layer ").concat(this.name, ". No animation exists with this name."));\n }\n\n if (state instanceof state_AbstractBlendState) {\n return state.getBlendWeight(blendName);\n }\n\n throw new Error("Cannot get blend weight of animation ".concat(animationName, " on layer ").concat(this.name, ". Animation is not an instance of AbstractBlendState."));\n }\n /**\r\n * Update any weight interpolators and the current animation.\r\n *\r\n * @param {number} deltaTime - Time in milliseconds since the last update.\r\n */\n\n }, {\n key: "update",\n value: function update(deltaTime) {\n AnimationLayer_get(AnimationLayer_getPrototypeOf(AnimationLayer.prototype), "update", this).call(this, deltaTime);\n\n if (!this._paused && !this._weightPaused) {\n this._promises.weight.execute(deltaTime);\n }\n }\n /**\r\n * Cancel any pending promises and discard states controlled by the layer.\r\n */\n\n }, {\n key: "discard",\n value: function discard() {\n AnimationLayer_get(AnimationLayer_getPrototypeOf(AnimationLayer.prototype), "discard", this).call(this);\n\n this.discardStates();\n\n this._promises.weight.cancel();\n\n delete this._promises;\n }\n }]);\n\n return AnimationLayer;\n}(animpack_AnimationPlayerInterface.Mixin(state_StateContainerInterface.Mixin()));\n\n/* harmony default export */ var animpack_AnimationLayer = (AnimationLayer_AnimationLayer);\n// CONCATENATED MODULE: ./src/core/animpack/state/SingleState.js\nfunction SingleState_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { SingleState_typeof = function _typeof(obj) { return typeof obj; }; } else { SingleState_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return SingleState_typeof(obj); }\n\nfunction SingleState_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction SingleState_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction SingleState_createClass(Constructor, protoProps, staticProps) { if (protoProps) SingleState_defineProperties(Constructor.prototype, protoProps); if (staticProps) SingleState_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction SingleState_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) SingleState_setPrototypeOf(subClass, superClass); }\n\nfunction SingleState_setPrototypeOf(o, p) { SingleState_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return SingleState_setPrototypeOf(o, p); }\n\nfunction SingleState_createSuper(Derived) { var hasNativeReflectConstruct = SingleState_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = SingleState_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = SingleState_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return SingleState_possibleConstructorReturn(this, result); }; }\n\nfunction SingleState_possibleConstructorReturn(self, call) { if (call && (SingleState_typeof(call) === "object" || typeof call === "function")) { return call; } return SingleState_assertThisInitialized(self); }\n\nfunction SingleState_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction SingleState_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction SingleState_getPrototypeOf(o) { SingleState_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return SingleState_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n\n/**\r\n * Class for playing a single animation clip.\r\n *\r\n * @extends AbstractState\r\n * @alias core/SingleState\r\n */\n\nvar SingleState_SingleState = /*#__PURE__*/function (_AbstractState) {\n SingleState_inherits(SingleState, _AbstractState);\n\n var _super = SingleState_createSuper(SingleState);\n\n /**\r\n * @constructor\r\n *\r\n * @param {Object=} options - Options for the animation state.\r\n * @param {string=} options.name - Name for the animation state. Names must be\r\n * unique for the layer the state is applied to.\r\n * @param {weight} [options.weight=0] - The 0-1 amount of influence the state will have.\r\n * @param {timeScale} [options.timeScale=1] - Factor to scale the playback speed of the\r\n * animation.\r\n * @param {number} [options.loopCount=Infinity] - Number of times the animation should\r\n * repeat before finishing.\r\n * @param {string} [options.blendMode=DefaultLayerBlendMode] - Type of\r\n * blending the animation should use.\r\n */\n function SingleState() {\n var _this;\n\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n SingleState_classCallCheck(this, SingleState);\n\n _this = _super.call(this, options);\n _this._timeScale = options.timeScale !== undefined ? options.timeScale : 1;\n _this._promises.timeScale = core_Deferred.resolve();\n _this._loopCount = options.loopCount !== undefined ? options.loopCount : Infinity;\n _this._blendMode = validateBlendMode(options.blendMode);\n return _this;\n }\n /**\r\n * Gets and sets the normalized playing time of the current animation\r\n *\r\n * @type {number}\r\n */\n\n\n SingleState_createClass(SingleState, [{\n key: "normalizedTime",\n get: function get() {\n return 0;\n },\n set: function set(time) {}\n /**\r\n * Gets and sets the a factor to scale animation playback speed with.\r\n *\r\n * @type {number}\r\n */\n\n }, {\n key: "timeScale",\n get: function get() {\n return this._timeScale;\n },\n set: function set(timeScale) {\n this._timeScale = timeScale;\n }\n /**\r\n * Gets whether or not the timeScale is currently being animated.\r\n *\r\n * @readonly\r\n * @type {boolean}\r\n */\n\n }, {\n key: "timeScalePending",\n get: function get() {\n return this._promises.timeScale.pending;\n }\n /**\r\n * Updates the timeScale value over time.\r\n *\r\n * @param {number} weight - The target timeScale value.\r\n * @param {number} [seconds=0] - The amount of time it will take to reach the\r\n * target timeScale.\r\n * @param {Function=} easingFn - The easing function to use for interpolation.\r\n *\r\n * @returns {Deferred}\r\n */\n\n }, {\n key: "setTimeScale",\n value: function setTimeScale(timeScale) {\n var seconds = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var easingFn = arguments.length > 2 ? arguments[2] : undefined;\n\n this._promises.timeScale.cancel();\n\n this._promises.timeScale = animpack_AnimationUtils.interpolateProperty(this, \'timeScale\', timeScale, {\n seconds: seconds,\n easingFn: easingFn\n });\n return this._promises.timeScale;\n }\n /**\r\n * Gets and sets the number of times the animation will repeat before finishing.\r\n *\r\n * @type {number}\r\n */\n\n }, {\n key: "loopCount",\n get: function get() {\n return this._loopCount;\n },\n set: function set(loopCount) {\n this._loopCount = loopCount;\n }\n /**\r\n * Gets the type of blending used for the animation.\r\n *\r\n * @readonly\r\n * @type {string}\r\n */\n\n }, {\n key: "blendMode",\n get: function get() {\n return this._blendMode;\n }\n }]);\n\n return SingleState;\n}(state_AbstractState);\n\n/* harmony default export */ var state_SingleState = (SingleState_SingleState);\n// CONCATENATED MODULE: ./src/core/animpack/state/RandomAnimationState.js\nfunction RandomAnimationState_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { RandomAnimationState_typeof = function _typeof(obj) { return typeof obj; }; } else { RandomAnimationState_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return RandomAnimationState_typeof(obj); }\n\nfunction RandomAnimationState_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction RandomAnimationState_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction RandomAnimationState_createClass(Constructor, protoProps, staticProps) { if (protoProps) RandomAnimationState_defineProperties(Constructor.prototype, protoProps); if (staticProps) RandomAnimationState_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction RandomAnimationState_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { RandomAnimationState_get = Reflect.get; } else { RandomAnimationState_get = function _get(target, property, receiver) { var base = RandomAnimationState_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return RandomAnimationState_get(target, property, receiver || target); }\n\nfunction RandomAnimationState_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = RandomAnimationState_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction RandomAnimationState_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) RandomAnimationState_setPrototypeOf(subClass, superClass); }\n\nfunction RandomAnimationState_setPrototypeOf(o, p) { RandomAnimationState_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return RandomAnimationState_setPrototypeOf(o, p); }\n\nfunction RandomAnimationState_createSuper(Derived) { var hasNativeReflectConstruct = RandomAnimationState_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = RandomAnimationState_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = RandomAnimationState_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return RandomAnimationState_possibleConstructorReturn(this, result); }; }\n\nfunction RandomAnimationState_possibleConstructorReturn(self, call) { if (call && (RandomAnimationState_typeof(call) === "object" || typeof call === "function")) { return call; } return RandomAnimationState_assertThisInitialized(self); }\n\nfunction RandomAnimationState_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction RandomAnimationState_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction RandomAnimationState_getPrototypeOf(o) { RandomAnimationState_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return RandomAnimationState_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n\n/**\r\n * Class for playing random animations at random intervals within this state.\r\n *\r\n * @extends AbstractState\r\n * @implements AnimationPlayerInterface\r\n * @implements StateContainerInterface\r\n */\n\nvar RandomAnimationState_RandomAnimationState = /*#__PURE__*/function (_AnimationPlayerInter) {\n RandomAnimationState_inherits(RandomAnimationState, _AnimationPlayerInter);\n\n var _super = RandomAnimationState_createSuper(RandomAnimationState);\n\n /**\r\n * @constructor\r\n *\r\n * @param {Object} [options={}] - Options for the container state.\r\n * @param {number} [options.playInterval=3] - The base animation playback interval.\r\n * @param {Array.} [subStates=[]] - states to be randomly picked to play\r\n */\n function RandomAnimationState() {\n var _this;\n\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var subStates = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n\n RandomAnimationState_classCallCheck(this, RandomAnimationState);\n\n _this = _super.call(this, options);\n _this._playInterval = options.playInterval ? options.playInterval : 3;\n subStates.forEach(function (state) {\n _this.addState(state);\n });\n return _this;\n }\n /**\r\n * Gets and sets the base animation play interval\r\n *\r\n * @type {float}\r\n */\n\n\n RandomAnimationState_createClass(RandomAnimationState, [{\n key: "playInterval",\n get: function get() {\n return this._playInterval;\n },\n set: function set(playInterval) {\n this._playInterval = playInterval;\n }\n /**\r\n * Reset the internal timer for animation play interval\r\n *\r\n * @private\r\n */\n\n }, {\n key: "_resetTimer",\n value: function _resetTimer() {\n var _this2 = this;\n\n var playTimer = core_Utils.getRandomFloat(this._playInterval / 4, this._playInterval * 2);\n\n var onFinish = function onFinish() {\n _this2.playRandomAnimation(_this2._playCallbacks.onError);\n };\n\n this._promises.timer = core_Utils.wait(playTimer, {\n onFinish: onFinish\n });\n }\n }, {\n key: "updateInternalWeight",\n value: function updateInternalWeight(factor) {\n RandomAnimationState_get(RandomAnimationState_getPrototypeOf(RandomAnimationState.prototype), "updateInternalWeight", this).call(this, factor);\n\n if (this._currentState) {\n this._currentState.updateInternalWeight(this._internalWeight);\n }\n }\n /**\r\n * Pick a random animation and utilize AnimationPlayerInterface to play that animation\r\n *\r\n * @param {Function=} onError - Function to execute if the state encounters\r\n * an error during playback.\r\n */\n\n }, {\n key: "playRandomAnimation",\n value: function playRandomAnimation(onError) {\n this._resetTimer();\n\n var states = this.getStateNames();\n\n if (this._currentState) {\n states.splice(states.indexOf(this._currentState.name), 1);\n }\n\n var randomState = states[core_Utils.getRandomInt(0, states.length)];\n this.playAnimation(randomState, this._transitionTime, this._easingFn, undefined, onError, undefined);\n }\n }, {\n key: "play",\n value: function play(onFinish, onError, onCancel) {\n this.playRandomAnimation(onError);\n return RandomAnimationState_get(RandomAnimationState_getPrototypeOf(RandomAnimationState.prototype), "play", this).call(this, onFinish, onError, onCancel);\n }\n }, {\n key: "pause",\n value: function pause() {\n return RandomAnimationState_get(RandomAnimationState_getPrototypeOf(RandomAnimationState.prototype), "pause", this).call(this) && this.pauseAnimation();\n }\n }, {\n key: "resume",\n value: function resume(onFinish, onError, onCancel) {\n if (this._currentState) {\n this.resumeAnimation(this._currentState.name, this._transitionTime, this._easingFn, undefined, onError, undefined);\n }\n\n return RandomAnimationState_get(RandomAnimationState_getPrototypeOf(RandomAnimationState.prototype), "resume", this).call(this, onFinish, onError, onCancel);\n }\n }, {\n key: "cancel",\n value: function cancel() {\n return RandomAnimationState_get(RandomAnimationState_getPrototypeOf(RandomAnimationState.prototype), "cancel", this).call(this) && this.cancelAnimation();\n }\n }, {\n key: "stop",\n value: function stop() {\n return RandomAnimationState_get(RandomAnimationState_getPrototypeOf(RandomAnimationState.prototype), "stop", this).call(this) && this.stopAnimation();\n }\n }, {\n key: "discard",\n value: function discard() {\n RandomAnimationState_get(RandomAnimationState_getPrototypeOf(RandomAnimationState.prototype), "discard", this).call(this);\n\n this.discardStates();\n }\n }]);\n\n return RandomAnimationState;\n}(animpack_AnimationPlayerInterface.Mixin(state_StateContainerInterface.Mixin(state_AbstractState)));\n\n/* harmony default export */ var state_RandomAnimationState = (RandomAnimationState_RandomAnimationState);\n// CONCATENATED MODULE: ./src/core/animpack/AnimationFeature.js\nfunction AnimationFeature_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { AnimationFeature_typeof = function _typeof(obj) { return typeof obj; }; } else { AnimationFeature_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return AnimationFeature_typeof(obj); }\n\nfunction AnimationFeature_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction AnimationFeature_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { AnimationFeature_ownKeys(Object(source), true).forEach(function (key) { AnimationFeature_defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { AnimationFeature_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction AnimationFeature_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction AnimationFeature_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction AnimationFeature_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction AnimationFeature_createClass(Constructor, protoProps, staticProps) { if (protoProps) AnimationFeature_defineProperties(Constructor.prototype, protoProps); if (staticProps) AnimationFeature_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction AnimationFeature_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { AnimationFeature_get = Reflect.get; } else { AnimationFeature_get = function _get(target, property, receiver) { var base = AnimationFeature_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return AnimationFeature_get(target, property, receiver || target); }\n\nfunction AnimationFeature_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = AnimationFeature_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction AnimationFeature_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) AnimationFeature_setPrototypeOf(subClass, superClass); }\n\nfunction AnimationFeature_setPrototypeOf(o, p) { AnimationFeature_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return AnimationFeature_setPrototypeOf(o, p); }\n\nfunction AnimationFeature_createSuper(Derived) { var hasNativeReflectConstruct = AnimationFeature_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = AnimationFeature_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = AnimationFeature_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return AnimationFeature_possibleConstructorReturn(this, result); }; }\n\nfunction AnimationFeature_possibleConstructorReturn(self, call) { if (call && (AnimationFeature_typeof(call) === "object" || typeof call === "function")) { return call; } return AnimationFeature_assertThisInitialized(self); }\n\nfunction AnimationFeature_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction AnimationFeature_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction AnimationFeature_getPrototypeOf(o) { AnimationFeature_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return AnimationFeature_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n\n\n\n\n\n\n\n/**\r\n * Enum for animation state classes.\r\n *\r\n * @readonly\r\n * @enum {Class}\r\n */\n\nvar AnimationTypes = {\n single: state_SingleState,\n freeBlend: state_FreeBlendState,\n queue: state_QueueState,\n randomAnimation: state_RandomAnimationState,\n blend1d: state_Blend1dState,\n blend2d: state_Blend2dState\n};\n/**\r\n * Feature for managing animations on an object.\r\n *\r\n * @extends AbstractHostFeature\r\n * @alias core/AnimationFeature\r\n *\r\n * @property {Object} EVENTS - Built-in messages that the feature emits. When the\r\n * feature is added to a {@link core/HostObject}, event names will be prefixed by the\r\n * name of the feature class + \'.\'.\r\n * @property {string} [EVENTS.addLayer=onAddLayerEvent] - Message that is emitted after\r\n * [addLayer]{@link core/AnimationFeature#addLayer} has been successfully executed.\r\n * An object representing the name of the layer that was added and its index in\r\n * the layer stack with the signature {name: string, index: number} is supplied\r\n * as an argument to listener functions.\r\n * @property {string} [EVENTS.removeLayer=onRemoveLayerEvent] - Message that is\r\n * emitted after [removeLayer]{@link core/AnimationFeature#removeLayer} has been\r\n * successfully executed. An object representing the name of the layer that was\r\n * removed and its index in the layer stack with the signature {name: string, index: number}\r\n * is supplied as an argument to listener functions.\r\n * @property {string} [EVENTS.renameLayer=onRenameLayerEvent] - Message that is\r\n * emitted after [renameLayer]{@link core/AnimationFeature#renameLayer} has been\r\n * successfully executed. An object representing the original name of the layer\r\n * that was renamed and its updated name with the signature {oldName: string, newName: string}\r\n * is supplied as an argument to listener functions.\r\n * @property {string} [EVENTS.addAnimation=onAddAnimationEvent] - Message that is\r\n * emitted after [addAnimation]{@link core/AnimationFeature#addAnimation} has been\r\n * successfully executed. An object representing the name of the layer that the\r\n * animation was added to and the name of the animation that was added with the\r\n * signature {layerName: string, animationName: string} is supplied as an argument\r\n * to listener functions.\r\n * @property {string} [EVENTS.removeAnimation=onRemovedAnimationEvent] - Message\r\n * that is emitted after [removeAnimation]{@link core/AnimationFeature#removeAnimation}\r\n * has been successfully executed. An object representing the name of the layer\r\n * that the animation was removed from and the name of the animation that was removed\r\n * with the signature {layerName: string, animationName: string} is supplied as\r\n * an argument to listener functions.\r\n * @property {string} [EVENTS.renameAnimation=onRenameAnimationEvent] - Message\r\n * that is emitted after [renameAnimation]{@link core/AnimationFeature#renameAnimation}\r\n * has been successfully executed. An object representing the name of the layer\r\n * that contains the animation that was renamed, the original name of the animation\r\n * that was renamed and its updated name with the signature {layerName: string, oldName: string, newName: string}\r\n * is supplied as an argument to listener functions.\r\n * @property {string} [EVENTS.play=onPlayEvent] - Message that is emitted after\r\n * each call to [play]{@link core/AnimationFeature#playAnimation}. An object representing\r\n * the name of the layer contains the animation that was played and the name of\r\n * the animation that was played with the signature {layerName: string, animationName: string}\r\n * is supplied as an argument to listener functions.\r\n * @property {string} [EVENTS.pause=onPauseEvent] - Message that is emitted after\r\n * each call to [pause]{@link core/AnimationFeature#pauseAnimation}. An object representing\r\n * the name of the layer contains the animation that was paused and the name of\r\n * the animation that was paused with the signature {layerName: string, animationName: string}\r\n * is supplied as an argument to listener functions.\r\n * @property {string} [EVENTS.resume=onResumeEvent] - Message that is emitted after\r\n * each call to [resume]{@link core/AnimationFeature#resumeAnimation}. An object representing\r\n * the name of the layer contains the animation that was resumed and the name of\r\n * the animation that was resumed with the signature {layerName: string, animationName: string}\r\n * is supplied as an argument to listener functions.\r\n * @property {string} [EVENTS.interrupt=onInterruptEvent] - Message that is emitted\r\n * if there is a current speech in progress and [play]{@link core/AnimationFeature#playAnimation}\r\n * or [resume]{@link core/AnimationFeature#resumeAnimation} are executed for a new speech.\r\n * An object representing the name of the layer contains the animation that was\r\n * interrupted and the name of the animation that was interrupted with the signature\r\n * {layerName: string, animationName: string} is supplied as an argument to listener\r\n * functions.\r\n * @property {string} [EVENTS.stop=onStopEvent] - Message that is emitted after\r\n * each call to [stop]{@link core/AnimationFeature#stopAnimation} and when a speech reaches\r\n * the end of playback. An object representing\r\n * the name of the layer contains the animation that was stopped and the name of\r\n * the animation that was stopped with the signature {layerName: string, animationName: string}\r\n * is supplied as an argument to listener functions.\r\n */\n\nvar AnimationFeature_AnimationFeature = /*#__PURE__*/function (_AbstractHostFeature) {\n AnimationFeature_inherits(AnimationFeature, _AbstractHostFeature);\n\n var _super = AnimationFeature_createSuper(AnimationFeature);\n\n /**\r\n * @constructor\r\n *\r\n * @param {core/HostObject} host - Host object that owns the feature.\r\n */\n function AnimationFeature(host) {\n var _this;\n\n AnimationFeature_classCallCheck(this, AnimationFeature);\n\n _this = _super.call(this, host);\n _this._layers = [];\n _this._layerMap = {};\n _this._paused = false;\n return _this;\n }\n /**\r\n * Make sure a supplied layer index is within the range of layers.\r\n *\r\n * @private\r\n *\r\n * @param {number} index\r\n * @param {boolean} [existing=true] - Whether the index represents and existing\r\n * layer or a new layer to be added.\r\n *\r\n * @returns {number=}\r\n */\n\n\n AnimationFeature_createClass(AnimationFeature, [{\n key: "_validateIndex",\n value: function _validateIndex(index) {\n var existing = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\n // Index is invalid if there are no layers and we\'re checking for an existing layer index\n if (this._layers.length === 0 && existing) {\n return undefined;\n }\n\n var lastIndex = existing ? this._layers.length - 1 : this._layers.length; // Count from the end of the array for negative indices\n\n if (index < 0) {\n index = lastIndex + index + 1;\n }\n\n if (index < 0 || index > lastIndex) {\n return undefined;\n } else {\n return index;\n }\n }\n /**\r\n * Re-evaluate internal weight values of layers starting from the top of the\r\n * stack. Override layers\' weights affect the values of all layers lower in the\r\n * stack.\r\n *\r\n * @private\r\n */\n\n }, {\n key: "_updateInternalWeights",\n value: function _updateInternalWeights() {\n var numLayers = this._layers.length;\n var weightMultiplier = 1; // Update internal weight values on layers in reverse order\n\n for (var i = numLayers - 1; i >= 0; i--) {\n var layer = this._layers[i];\n layer.updateInternalWeight(weightMultiplier); // If the layer is override, update the multiplier with the remainder of the full weight\n\n if (layer.blendMode === LayerBlendModes.Override && layer.currentState) {\n weightMultiplier *= 1 - layer.currentState.internalWeight;\n }\n }\n }\n /**\r\n * Return a new instance of a SingleState.\r\n *\r\n * @private\r\n *\r\n * @param {Object} options - Options to pass to the SingleState constructor.\r\n * @param {string=} options.name - Name for the animation state. Names must be\r\n * unique for the layer the state is applied to.\r\n * @param {weight} [options.weight=0] - The 0-1 amount of influence the state will have.\r\n * @param {timeScale} [options.timeScale=1] - Factor to scale the playback speed of the\r\n * animation.\r\n * @param {number} [options.loopCount=Infinity] - Number of times the animation should\r\n * repeat before finishing.\r\n * @param {string} [options.blendMode=LayerBlendModes[DefaultLayerBlendMode]] - Type of\r\n * blending the animation should use.\r\n *\r\n * @returns {core/SingleState}\r\n */\n\n }, {\n key: "_createSingleState",\n value: function _createSingleState(options) {\n return new state_SingleState(options);\n }\n /**\r\n * Return a new instance of a FreeBlendState.\r\n *\r\n * @private\r\n *\r\n * @param {Object} options - Options to pass to the FreeBlendState constructor.\r\n * @param {string=} options.name - Name for the animation state. Names must be\r\n * unique for the layer the state is applied to.\r\n * @param {weight} [options.weight=0] - The 0-1 amount of influence the state will have.\r\n * @param {timeScale} [options.timeScale=1] - Factor to scale the playback speed of the\r\n * animation.\r\n * @param {number} [options.loopCount=Infinity] - Number of times the animation should\r\n * repeat before finishing.\r\n * @param {string} [options.blendMode=LayerBlendModes[DefaultLayerBlendMode]] - Type of\r\n * blending the animation should use.\r\n * @param {Array.} [options.blendStateOptions] - Array of options used to create the\r\n * blend states for this container.\r\n *\r\n * @returns {FreeBlendState}\r\n */\n\n }, {\n key: "_createFreeBlendState",\n value: function _createFreeBlendState(options) {\n var _this2 = this;\n\n var _options$blendStateOp = options.blendStateOptions,\n blendStateOptions = _options$blendStateOp === void 0 ? [] : _options$blendStateOp;\n var blendStates = [];\n blendStateOptions.forEach(function (blendOptions) {\n blendStates.push(_this2._createSingleState(AnimationFeature_objectSpread(AnimationFeature_objectSpread({}, blendOptions), {}, {\n blendMode: options.blendMode\n })));\n });\n return new state_FreeBlendState(options, blendStates);\n }\n /**\r\n * Return a new instance of a QueueState.\r\n *\r\n * @private\r\n *\r\n * @param {Object} options - Options to pass to the QueueState constructor.\r\n * @param {string=} options.name - Name for the animation state. Names must be\r\n * unique for the layer the state is applied to.\r\n * @param {number} [options.weight=0] - The 0-1 amount of influence the state will have.\r\n * @param {number=} options.transitionTime - The amount of time it takes to transition\r\n * between queued states.\r\n * @param {string} [options.blendMode=LayerBlendModes[DefaultLayerBlendMode]] - Type of\r\n * blending the animation should use.\r\n * @param {Array.} [options.queueOptions] - Array of options used to create the\r\n * queue states for this container.\r\n *\r\n * @returns {QueueState}\r\n */\n\n }, {\n key: "_createQueueState",\n value: function _createQueueState(options) {\n var _this3 = this;\n\n var _options$queueOptions = options.queueOptions,\n queueOptions = _options$queueOptions === void 0 ? [] : _options$queueOptions;\n var queueStates = queueOptions.map(function (queueOption) {\n return _this3._createSingleState(AnimationFeature_objectSpread(AnimationFeature_objectSpread({\n transitionTime: options.transitionTime\n }, queueOption), {}, {\n blendMode: options.blendMode\n }));\n });\n return new state_QueueState(options, queueStates);\n }\n /**\r\n * Return a new instance of a Blend1dState.\r\n *\r\n * @private\r\n *\r\n * @param {Object} options - Options to pass to the Blend1dState constructor.\r\n * @param {string=} options.name - Name for the animation state. Names must be\r\n * unique for the layer the state is applied to.\r\n * @param {weight} [options.weight=0] - The 0-1 amount of influence the state will have.\r\n * @param {timeScale} [options.timeScale=1] - Factor to scale the playback speed of the\r\n * animation.\r\n * @param {number} [options.loopCount=Infinity] - Number of times the animation should\r\n * repeat before finishing.\r\n * @param {string} [options.blendMode=LayerBlendModes[DefaultLayerBlendMode]] - Type of\r\n * blending the animation should use.\r\n * @param {Array.} [options.blendStateOptions] - Array of options used to create the\r\n * blend states for this container.\r\n * @param {Array.} [options.blendThresholds] - Array of numbers used to set the\r\n * thresholds for each blend state in this container.\r\n * @param {Array.} [options.blendMatchPhases=[]] - Optional array of booleans used to\r\n * set whether or not each blend state in this container will match phases.\r\n *\r\n * @returns {Blend1dState}\r\n */\n\n }, {\n key: "_createBlend1dState",\n value: function _createBlend1dState(options) {\n var _this4 = this;\n\n var _options$blendStateOp2 = options.blendStateOptions,\n blendStateOptions = _options$blendStateOp2 === void 0 ? [] : _options$blendStateOp2;\n var _options$blendThresho = options.blendThresholds,\n blendThresholds = _options$blendThresho === void 0 ? [] : _options$blendThresho;\n var _options$blendMatchPh = options.blendMatchPhases,\n blendMatchPhases = _options$blendMatchPh === void 0 ? [] : _options$blendMatchPh;\n var blendStates = [];\n blendStateOptions.forEach(function (blendOptions) {\n blendStates.push(_this4._createSingleState(AnimationFeature_objectSpread(AnimationFeature_objectSpread({}, blendOptions), {}, {\n blendMode: options.blendMode\n })));\n });\n return new state_Blend1dState(options, blendStates, blendThresholds, blendMatchPhases);\n }\n /**\r\n * Return a new instance of a Blend2dState.\r\n *\r\n * @private\r\n *\r\n * @param {Object} options - Options to pass to the Blend1dState constructor.\r\n * @param {string=} options.name - Name for the animation state. Names must be\r\n * unique for the layer the state is applied to.\r\n * @param {weight} [options.weight=0] - The 0-1 amount of influence the state will have.\r\n * @param {timeScale} [options.timeScale=1] - Factor to scale the playback speed of the\r\n * animation.\r\n * @param {number} [options.loopCount=Infinity] - Number of times the animation should\r\n * repeat before finishing.\r\n * @param {string} [options.blendMode=LayerBlendModes[DefaultLayerBlendMode]] - Type of\r\n * blending the animation should use.\r\n * @param {Array.} [options.blendStateOptions] - Array of options used to create the\r\n * blend states for this container.\r\n * @param {Array.>} [options.blendThresholds] - Array of Array of numbers used to set the\r\n * thresholds for each blend state in this container.\r\n * @param {Array.} [options.blendMatchPhases=[]] - Optional array of booleans used to\r\n * set whether or not each blend state in this container will match phases.\r\n *\r\n * @returns {Blend1dState}\r\n */\n\n }, {\n key: "_createBlend2dState",\n value: function _createBlend2dState(options) {\n var _this5 = this;\n\n var _options$blendStateOp3 = options.blendStateOptions,\n blendStateOptions = _options$blendStateOp3 === void 0 ? [] : _options$blendStateOp3;\n var _options$blendThresho2 = options.blendThresholds,\n blendThresholds = _options$blendThresho2 === void 0 ? [] : _options$blendThresho2;\n var _options$blendMatchPh2 = options.blendMatchPhases,\n blendMatchPhases = _options$blendMatchPh2 === void 0 ? [] : _options$blendMatchPh2;\n var blendStates = [];\n blendStateOptions.forEach(function (blendOptions) {\n blendStates.push(_this5._createSingleState(AnimationFeature_objectSpread(AnimationFeature_objectSpread({}, blendOptions), {}, {\n blendMode: options.blendMode\n })));\n });\n return new state_Blend2dState(options, blendStates, blendThresholds, blendMatchPhases);\n }\n /**\r\n * Return a new instance of a RandomAnimationState.\r\n *\r\n * @private\r\n *\r\n * @param {Object} options - Options to pass to the RandomAnimationState constructor.\r\n * @param {string=} options.name - Name for the animation state. Names must be\r\n * unique for the layer the state is applied to.\r\n * @param {number} [options.playInterval=3] - The base animation playback interval.\r\n * @param {Array.} [options.subStateOptions] - Array of options used to create the\r\n * sub states for this container.\r\n *\r\n * @returns {RandomAnimationState}\r\n */\n\n }, {\n key: "_createRandomAnimationState",\n value: function _createRandomAnimationState(options) {\n var _this6 = this;\n\n var _options$subStateOpti = options.subStateOptions,\n subStateOptions = _options$subStateOpti === void 0 ? [] : _options$subStateOpti;\n var subStates = [];\n subStateOptions.forEach(function (subStateOptions) {\n subStates.push(_this6._createSingleState(AnimationFeature_objectSpread(AnimationFeature_objectSpread({}, subStateOptions), {}, {\n blendMode: options.blendMode\n })));\n });\n return new state_RandomAnimationState(options, subStates);\n }\n /**\r\n * Make sure the layer with the given name exists and return a unique version\r\n * of the animation name supplied for that layer.\r\n *\r\n * @private\r\n *\r\n * @param {string} layerName - Name of the layer to check against.\r\n * @param {string} animationName - Name of the animation to validate.\r\n *\r\n * @returns {string} Validated animation name.\r\n */\n\n }, {\n key: "_validateNewAnimation",\n value: function _validateNewAnimation(layerName, animationName) {\n // Make sure the layerName is valid\n var layer = this._layerMap[layerName];\n\n if (layer === undefined) {\n throw new Error("Cannot add animation to layer ".concat(layerName, " from host ").concat(this._host.id, ". No layer exists with this name."));\n } // Make sure the animationName is unique\n\n\n var name = core_Utils.getUniqueName(animationName, layer.getStateNames());\n\n if (name !== animationName) {\n console.warn("Animation name ".concat(animationName, " is not unique for layer ").concat(layer.name, ". Animation will be renamed to ").concat(name, "."));\n }\n\n return name;\n }\n /**\r\n * Gets whether or not all animations are paused.\r\n *\r\n * @readonly\r\n * @type {boolean}\r\n */\n\n }, {\n key: "paused",\n get: function get() {\n return this._paused;\n }\n /**\r\n * Gets an array of names of animation layers.\r\n *\r\n * @readonly\r\n * @type {Array.}\r\n */\n\n }, {\n key: "layers",\n get: function get() {\n return this._layers.map(function (layer) {\n return layer.name;\n });\n }\n /**\r\n * Create and store a new animation layer.\r\n *\r\n * @param {string} [name=\'NewLayer\'] - Name for the layer.\r\n * @param {Object} [options={}] - Options to pass to {@link AnimationLayer#constructor}\r\n * @param {index=} index - Index to insert the new layer at. If none is provided\r\n * it will be added to the end of the stack.\r\n *\r\n * @returns {number} Index of the new layer.\r\n */\n\n }, {\n key: "addLayer",\n value: function addLayer() {\n var name = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : \'NewLayer\';\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var index = arguments.length > 2 ? arguments[2] : undefined;\n var numLayers = this._layers.length;\n var layerIndex = index; // Make sure the given index is within the range of layers\n\n if (index === undefined || index === -1) {\n layerIndex = this._layers.length;\n } else {\n layerIndex = this._validateIndex(index, false);\n\n if (layerIndex === undefined) {\n // Insert at the beginning if the user passed in a negative index\n if (index < 0) {\n layerIndex = 0;\n } // Otherwise append to the end\n else {\n layerIndex = this._layers.length;\n }\n\n console.warn("Index ".concat(index, " is invalid for host ").concat(this._host.id, ". New layer will be added at the closest valid index: ").concat(layerIndex, "."));\n }\n } // Make sure the layer name is unique\n\n\n var layerName = core_Utils.getUniqueName(name, Object.keys(this._layerMap));\n\n if (name !== layerName) {\n console.warn("Layer name ".concat(name, " is not unique. New layer will be added with the name ").concat(layerName, "."));\n }\n\n var layer = new animpack_AnimationLayer(AnimationFeature_objectSpread(AnimationFeature_objectSpread({}, options), {}, {\n name: layerName\n }));\n this._layerMap[layerName] = layer;\n\n if (layerIndex === numLayers) {\n this._layers.push(layer);\n } else {\n this._layers.splice(layerIndex, 0, layer);\n } // Notify that a layer has been added to the feature\n\n\n var eventData = {\n name: layerName,\n index: layerIndex\n };\n this.emit(this.constructor.EVENTS.addLayer, eventData);\n return eventData;\n }\n /**\r\n * Remove an animation layer from the stack. Animations on this layer will no\r\n * longer be evaluated.\r\n *\r\n * @param {string} name - Name for the layer to remove.\r\n *\r\n * @returns {boolean} Whether or not removal was successful.\r\n */\n\n }, {\n key: "removeLayer",\n value: function removeLayer(name) {\n var layer = this._layerMap[name];\n\n if (layer === undefined) {\n console.warn("Did not remove layer ".concat(name, " from host ").concat(this._host.id, ". No layer exists with this name."));\n return false;\n }\n\n layer.discard();\n\n var index = this._layers.indexOf(layer);\n\n this._layers.splice(index, 1);\n\n delete this._layerMap[name]; // Notify that a layer has been removed from the feature\n\n this.emit(this.constructor.EVENTS.removeLayer, {\n name: name,\n index: index\n });\n return true;\n }\n /**\r\n * Re-order the layer stack so that the layer with the given name is positioned\r\n * at the given index.\r\n *\r\n * @param {string} name - Name of the layer to move.\r\n * @param {number} index - New index to position the layer at.\r\n *\r\n * @returns {number} The new index of the layer\r\n */\n\n }, {\n key: "moveLayer",\n value: function moveLayer(name, index) {\n // Make sure the name is valid\n var layer = this._layerMap[name];\n\n if (layer === undefined) {\n throw new Error("Cannot move layer ".concat(name, " from host ").concat(this._host.id, ". No layer exists with this name."));\n } // Make sure the index falls in the range of existing layers\n\n\n var layerIndex = this._validateIndex(index, true);\n\n var lastIndex = this._layers.length - 1;\n\n if (layerIndex === undefined) {\n throw new Error("Cannot move layer ".concat(name, " from host ").concat(this._host.id, " to index ").concat(index, ". Index must be in the 0 - ").concat(lastIndex, " range."));\n }\n\n var currentIndex = this._layers.indexOf(layer);\n\n if (currentIndex === layerIndex) {\n return;\n } // Remove from the current position\n\n\n this._layers.splice(currentIndex, 1); // Insert at the new position\n\n\n if (layerIndex === lastIndex) {\n this._layers.push(layer);\n } else {\n this._layers.splice(layerIndex, 0, layer);\n }\n\n return layerIndex;\n }\n /**\r\n * Update the name of a layer. Names must be unique, if the new name is not\r\n * unique it will have trailing numbers appended until it is unique.\r\n *\r\n * @param {string} currentName - Current name of the layer.\r\n * @param {string} newName - New name to set on the layer.\r\n *\r\n * @returns {string} The new name of the layer\r\n */\n\n }, {\n key: "renameLayer",\n value: function renameLayer(currentName, newName) {\n // Make sure the name is valid\n var layer = this._layerMap[currentName];\n\n if (layer === undefined) {\n throw new Error("Cannot rename layer ".concat(currentName, " from host ").concat(this._host.id, ". No layer exists with this name."));\n } // Make sure the layer name is unique\n\n\n var name = core_Utils.getUniqueName(newName, Object.keys(this._layerMap));\n\n if (name !== newName) {\n console.warn("Layer name ".concat(newName, " is not unique. Layer will be renamed to ").concat(name, "."));\n }\n\n delete this._layerMap[currentName];\n this._layerMap[name] = layer;\n layer.name = name; // Notify that a layer has been renamed on the feature\n\n this.emit(this.constructor.EVENTS.renameLayer, {\n oldName: currentName,\n newName: name\n });\n return name;\n }\n /**\r\n * Return the weight of an animation layer.\r\n *\r\n * @param {string} name - Name of the layer to return weight from.\r\n *\r\n * @returns {number}\r\n */\n\n }, {\n key: "getLayerWeight",\n value: function getLayerWeight(name) {\n // Make sure the name is valid\n var layer = this._layerMap[name];\n\n if (layer === undefined) {\n throw new Error("Cannot get weight on layer ".concat(name, " from host ").concat(this._host.id, ". No layer exists with this name."));\n }\n\n return layer.weight;\n }\n /**\r\n * Update the weight of an animation layer.\r\n *\r\n * @param {string} name - The name of the layer to update.\r\n * @param {number} weight - The weight value to set on the layer. This number\r\n * should be in the 0-1 range.\r\n * @param {number=} seconds - The number of seconds it should take to reach the\r\n * new weight. Default is zero and will set immediately.\r\n * @param {Function=} easingFn - The easing function to use while interpolating\r\n * the weight. Default is Easing.Linear.InOut.\r\n *\r\n * @returns {Deferred} A promise that will resolve once the layer\'s weight reaches\r\n * the target value.\r\n */\n\n }, {\n key: "setLayerWeight",\n value: function setLayerWeight(name, weight, seconds, easingFn) {\n // Make sure the name is valid\n var layer = this._layerMap[name];\n\n if (layer === undefined) {\n var e = "Cannot set weight on layer ".concat(name, " from host ").concat(this._host.id, ". No layer exists with this name.");\n return core_Deferred.reject(e);\n }\n\n return layer.setWeight(weight, seconds, easingFn);\n }\n /**\r\n * Returns the names of blend states in an animation in a layer.\r\n *\r\n * @param {string} layerName - Name of the layer containing the animation containing\r\n * the blend state to update.\r\n * @param {string} animationName - Name of the animation containing the blend state\r\n * to update.\r\n *\r\n * @returns {Array.} - Names of blend states.\r\n */\n\n }, {\n key: "getAnimationBlendNames",\n value: function getAnimationBlendNames(layerName, animationName) {\n var layer = this._layerMap[layerName];\n\n if (layer === undefined) {\n throw new Error("Cannot get blend names on layer ".concat(layerName, " from host ").concat(this._host.id, ". No layer exists with this name."));\n }\n\n return layer.getAnimationBlendNames(animationName);\n }\n /**\r\n * Update the weight for a blend state in an animation in a layer.\r\n *\r\n * @param {string} layerName - Name of the layer containing the animation containing\r\n * the blend state to update.\r\n * @param {string} animationName - Name of the animation containing the blend state\r\n * to update.\r\n * @param {string} blendName - Name of the blend state to update.\r\n * @param {number} weight - Weight value to set on the animation. This number shoudld be\r\n * in the 0-1 range.\r\n * @param {number=} seconds - Number of seconds it should take to reach the new weight.\r\n * Default is zero and will set immediately.\r\n * @param {Function=} easingFn - Easing function to use while interpolating the new\r\n * weight. Default is Easing.Linear.InOut.\r\n *\r\n * @returns {Deferred} - Promise that will resolve once the animation\'s weight reaches\r\n * the target value.\r\n */\n\n }, {\n key: "setAnimationBlendWeight",\n value: function setAnimationBlendWeight(layerName, animationName, blendName, weight, seconds, easingFn) {\n var layer = this._layerMap[layerName];\n\n if (layer === undefined) {\n var e = "Cannot set blend weight on layer ".concat(layerName, " from host ").concat(this._host.id, ". No layer exists with this name.");\n return core_Deferred.reject(e);\n }\n\n return layer.setAnimationBlendWeight(animationName, blendName, weight, seconds, easingFn);\n }\n /**\r\n * Returns the weight for a blend state in an animation in a layer.\r\n *\r\n * @param {string} layerName - Name of the layer containing the animation containing\r\n * the blend state to update.\r\n * @param {string} animationName - Name of the animation containing the blend state\r\n * to update.\r\n * @param {string} blendName - Name of the blend state to update.\r\n *\r\n * @returns {number} - Weight of the blend state.\r\n */\n\n }, {\n key: "getAnimationBlendWeight",\n value: function getAnimationBlendWeight(layerName, animationName, blendName) {\n var layer = this._layerMap[layerName];\n\n if (layer === undefined) {\n throw new Error("Cannot get blend weight on layer ".concat(layerName, " from host ").concat(this._host.id, ". No layer exists with this name."));\n }\n\n return layer.getAnimationBlendWeight(animationName, blendName);\n }\n /**\r\n * Pause weight interpolation animation on a layer with the given name.\r\n *\r\n * @param {string} name - Name of the layer to pause.\r\n *\r\n * @returns {boolean} - Whether or not there was an existing interpolation to pause.\r\n */\n\n }, {\n key: "pauseLayerWeight",\n value: function pauseLayerWeight(name) {\n // Make sure the name is valid\n var layer = this._layerMap[name];\n\n if (layer === undefined) {\n throw new Error("Cannot pause weight interpolation on layer ".concat(name, " from host ").concat(this._host.id, ". No layer exists with this name."));\n }\n\n return layer.pauseWeight();\n }\n /**\r\n * Resume weight interpolation animation on a layer with the given name.\r\n *\r\n * @param {string} name - Name of the layer to resume.\r\n *\r\n * @returns {Deferred} - Resolves once the layer\'s weight reaches its target value.\r\n */\n\n }, {\n key: "resumeLayerWeight",\n value: function resumeLayerWeight(name) {\n // Make sure the name is valid\n var layer = this._layerMap[name];\n\n if (layer === undefined) {\n var e = "Cannot resume weight interpolation on layer ".concat(name, " from host ").concat(this._host.id, ". No layer exists with this name.");\n return core_Deferred.reject(e);\n }\n\n return layer.resumeWeight();\n }\n /**\r\n * Pause current animation and weight interpolation animation on a layer with\r\n * the given name.\r\n *\r\n * @param {string} name - Name of the layer to pause.\r\n *\r\n * @returns {boolean} - Whether or not there was an existing interpolation or\r\n * current animation to pause.\r\n */\n\n }, {\n key: "pauseLayer",\n value: function pauseLayer(name) {\n // Make sure the name is valid\n var layer = this._layerMap[name];\n\n if (layer === undefined) {\n throw new Error("Cannot pause layer ".concat(name, " from host ").concat(this._host.id, ". No layer exists with this name."));\n }\n\n return layer.pause();\n }\n /**\r\n * Resume current animation and weight interpolation animation on a layer with\r\n * the given name.\r\n *\r\n * @param {string} name - Name of the layer to resume.\r\n *\r\n * @returns {Deferred} - Resolves once the layer\'s weight reaches its target value\r\n * and it\'s current animation finishes playing.\r\n */\n\n }, {\n key: "resumeLayer",\n value: function resumeLayer(name) {\n // Make sure the name is valid\n var layer = this._layerMap[name];\n\n if (layer === undefined) {\n var e = "Cannot resume layer ".concat(name, " from host ").concat(this._host.id, ". No layer exists with this name.");\n return core_Deferred.reject(e);\n }\n\n return layer.resume();\n }\n /**\r\n * Return whether or not the animation layer with the given name is currently\r\n * transitioning between animations.\r\n *\r\n * @param {string} layerName - Name of the layer to check.\r\n *\r\n * @returns {boolean}\r\n */\n\n }, {\n key: "getTransitioning",\n value: function getTransitioning(layerName) {\n // Make sure the layerName is valid\n var layer = this._layerMap[layerName];\n\n if (layer === undefined) {\n throw new Error("Get transitioning on layer ".concat(layerName, " from host ").concat(this._host.id, ". No layer exists with this name."));\n }\n\n return layer.isTransitioning;\n }\n /**\r\n * Return an array of the names of all states the layer with the given name controls.\r\n *\r\n * @param {string} layerName - Name of the layer to search.\r\n *\r\n * @returns {Array.}\r\n */\n\n }, {\n key: "getAnimations",\n value: function getAnimations(layerName) {\n // Make sure the layerName is valid\n var layer = this._layerMap[layerName];\n\n if (layer === undefined) {\n throw new Error("Get animations on layer ".concat(layerName, " from host ").concat(this._host.id, ". No layer exists with this name."));\n }\n\n return layer.getStateNames();\n }\n /**\r\n * Return the name of the state currently active on the layer with the given name.\r\n * Return null if there is no current animation for the layer.\r\n *\r\n * @param {string} layerName - Name of the layer.\r\n *\r\n * @returns {(string|null)}\r\n */\n\n }, {\n key: "getCurrentAnimation",\n value: function getCurrentAnimation(layerName) {\n // Make sure the layerName is valid\n var layer = this._layerMap[layerName];\n\n if (layer === undefined) {\n throw new Error("Get current animation on layer ".concat(layerName, " from host ").concat(this._host.id, ". No layer exists with this name."));\n }\n\n return layer.currentAnimation;\n }\n /**\r\n * Return whether or not a layer with the given name is currently playing an\r\n * animation and that animation is paused.\r\n *\r\n * @param {string} layerName - Name of the layer.\r\n *\r\n * @returns {boolean}\r\n */\n\n }, {\n key: "getPaused",\n value: function getPaused(layerName) {\n // Make sure the layerName is valid\n var layer = this._layerMap[layerName];\n\n if (layer === undefined) {\n throw new Error("Get paused on layer ".concat(layerName, " from host ").concat(this._host.id, ". No layer exists with this name."));\n }\n\n return layer.currentState && layer.currentState.paused;\n }\n /**\r\n * Return the type name of the given animation. @see AnimationTypes.\r\n *\r\n * @param {string} layerName - Name of the layer that contains the animation.\r\n * @param {string} animationName - Name of the animation to check.\r\n *\r\n * @returns {string}\r\n */\n\n }, {\n key: "getAnimationType",\n value: function getAnimationType(layerName, animationName) {\n // Make sure the layerName is valid\n var layer = this._layerMap[layerName];\n\n if (layer === undefined) {\n throw new Error("Get animation type on layer ".concat(layerName, " from host ").concat(this._host.id, ". No layer exists with this name."));\n }\n\n var state = layer.getState(animationName);\n\n if (state === undefined) {\n throw new Error("Get animation type for animation ".concat(animationName, " on layer ").concat(layerName, " from host ").concat(this._host.id, ". No animation exists with this name."));\n }\n\n var constructor = state.constructor;\n return Object.keys(AnimationTypes).find(function (typeName) {\n return AnimationTypes[typeName] === constructor;\n });\n }\n /**\r\n * Add a new animation to an animation layer.\r\n *\r\n * @param {string} layerName - Name of the layer to add the animation to.\r\n * @param {string} animationName - Name to use when calling the animation.\r\n * @param {Object=} options - Options to pass to the constructor for the new\r\n * SingleState animation.\r\n *\r\n * @returns {string} - The name of the animation that was added\r\n */\n\n }, {\n key: "addAnimation",\n value: function addAnimation(layerName, animationName) {\n var animationType = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : AnimationTypes.single;\n var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n options.name = this._validateNewAnimation(layerName, animationName); // Make sure the animation type is valid\n\n if (!Object.values(AnimationTypes).includes(animationType)) {\n throw new Error("Cannot add animation ".concat(animationName, " to layer ").concat(layerName, " on host ").concat(this._host.id, ". Invalid animation type."));\n }\n\n var layer = this._layerMap[layerName];\n options.blendMode = layer.blendMode;\n options.transitionTime = layer.transitionTime;\n var state = this["_create".concat(animationType.name)](options);\n var name = layer.addState(state); // Notify that an animation has been added to the feature\n\n this.emit(this.constructor.EVENTS.addAnimation, {\n layerName: layerName,\n animationName: name\n });\n return name;\n }\n /**\r\n * Remove an animation from an animation layer.\r\n *\r\n * @param {string} layerName - Name of the layer to remove the animation from.\r\n * @param {string} name - Name of the animation to remove.\r\n *\r\n * @returns {boolean}\r\n */\n\n }, {\n key: "removeAnimation",\n value: function removeAnimation(layerName, animationName) {\n // Make sure the name is valid\n var layer = this._layerMap[layerName];\n\n if (layer === undefined) {\n throw new Error("Cannot remove animation from layer ".concat(layerName, " from host ").concat(this._host.id, ". No layer exists with this name."));\n }\n\n var removed = layer.removeState(animationName); // Notify that an animation has been removed from the feature\n\n if (removed === true) {\n this.emit(this.constructor.EVENTS.removeAnimation, {\n layerName: layerName,\n animationName: animationName\n });\n }\n\n return removed;\n }\n /**\r\n * Update the name of an animation. Names must be unique on each layer, if the new\r\n * name is not unique it will have trailing numbers appended until it is unique.\r\n *\r\n * @param {string} layerName - Name of the layer that contains the animation that\r\n * will be renamed,\r\n * @param {string} currentAnimationName - Current name of the animation.\r\n * @param {string} newAnimationName - New name to set on the animation.\r\n *\r\n * @returns {string} - The new name of the animation\r\n */\n\n }, {\n key: "renameAnimation",\n value: function renameAnimation(layerName, currentAnimationName, newAnimationName) {\n var layer = this._layerMap[layerName];\n\n if (layer === undefined) {\n throw new Error("Cannot rename animation ".concat(currentAnimationName, " on layer ").concat(layerName, " for host ").concat(this._host.id, ". No layer exists with this name."));\n }\n\n var name = layer.renameState(currentAnimationName, newAnimationName); // Notify that an animation has been renamed on the feature\n\n this.emit(this.constructor.EVENTS.renameAnimation, {\n layerName: layerName,\n oldName: currentAnimationName,\n newName: name\n });\n return name;\n }\n /**\r\n * Pause the currently playing animation and play a new animation from the beginning.\r\n *\r\n * @param {string} layerName - Name of the layer that contains the animation.\r\n * @param {string} animationName - Name of the animation state to play.\r\n * @param {number=} seconds - The number of seconds it should take to transition\r\n * to the new animation. Default is zero and will set immediately.\r\n * @param {Function=} easingFn - The easing function to use while transitioning\r\n * between animations. Default is Easing.Linear.InOut.\r\n *\r\n * @returns {Deferred} - Resolves once the animation reaches the end of its\r\n * timeline. Looping animations can only resolve if they are interrupted or\r\n * manually stopped.\r\n */\n\n }, {\n key: "playAnimation",\n value: function playAnimation(layerName, animationName, seconds, easingFn) {\n var _this7 = this;\n\n var layer = this._layerMap[layerName];\n\n if (layer === undefined) {\n var e = "Cannot play animation ".concat(animationName, " on layer ").concat(layerName, " for host ").concat(this._host.id, ". No layer exists with this name.");\n return core_Deferred.reject(e);\n } // Notify that a new animation has begun\n\n\n this.emit(this.constructor.EVENTS.playAnimation, {\n layerName: layerName,\n animationName: animationName\n });\n return layer.playAnimation(animationName, seconds, easingFn, function () {\n // Notify that an animation has stopped\n _this7.emit(_this7.constructor.EVENTS.stopAnimation, {\n layerName: layerName,\n animationName: animationName\n });\n }, undefined, function () {\n // Notify that an animation has been interrupted\n _this7.emit(_this7.constructor.EVENTS.interruptAnimation, {\n layerName: layerName,\n animationName: animationName\n });\n }, function (_ref) {\n var name = _ref.name,\n canAdvance = _ref.canAdvance,\n isQueueEnd = _ref.isQueueEnd;\n\n if (layer.currentAnimation === animationName) {\n // Notify that a new animation has begun\n _this7.emit(_this7.constructor.EVENTS.playNextAnimation, {\n layerName: layerName,\n animationName: animationName,\n nextQueuedAnimation: name,\n canAdvance: canAdvance,\n isQueueEnd: isQueueEnd\n });\n }\n });\n }\n /**\r\n * Play the next animation in the queue of a QueueState animation.\r\n *\r\n * @param {string} layerName - Name of the layer that contains the queue animation.\r\n * @param {string=} animationName - Name of the animation queue animation. Defaults\r\n * to the name of the current animation for the layer.\r\n * @param {number=} seconds - The number of seconds it should take to transition\r\n * to the queue animation if it\'s not already currently playing. Default is zero\r\n * and will set immediately.\r\n * @param {Function=} easingFn - The easing function to use while transitioning\r\n * to the queue animation if it isn\'t already playing. Default is Easing.Linear.InOut.\r\n *\r\n * @returns {Deferred} - Resolves once the last animation in the queue finishes\r\n * playing.\r\n */\n\n }, {\n key: "playNextAnimation",\n value: function playNextAnimation(layerName, animationName, transitionTime, easingFn) {\n var _this8 = this;\n\n var layer = this._layerMap[layerName];\n\n if (layer === undefined) {\n var e = "Cannot play next animation on layer ".concat(layerName, " for host ").concat(this._host.id, ". No layer exists with this name.");\n return core_Deferred.reject(e);\n }\n\n if (animationName === undefined) {\n animationName = layer.currentAnimation;\n }\n\n var animation = layer.getState(layer.currentAnimation);\n\n if (animation === null) {\n var _e = "Cannot play next animation on layer ".concat(layerName, " for host ").concat(this._host.id, ". No animation exists with name ").concat(animationName, ".");\n\n return core_Deferred.reject(_e);\n } else if (this.getAnimationType(layerName, animationName) !== \'queue\') {\n var _e2 = "Cannot play next animation on layer ".concat(layerName, " for host ").concat(this._host.id, ". ").concat(animationName, " is not a queue state.");\n\n return core_Deferred.reject(_e2);\n }\n\n var onNext = function onNext(_ref2) {\n var name = _ref2.name,\n canAdvance = _ref2.canAdvance,\n isQueueEnd = _ref2.isQueueEnd;\n\n if (layer.currentAnimation === animationName) {\n // Notify that a new animation has begun\n _this8.emit(_this8.constructor.EVENTS.playNextAnimation, {\n layerName: layerName,\n animationName: animationName,\n nextQueuedAnimation: name,\n canAdvance: canAdvance,\n isQueueEnd: isQueueEnd\n });\n }\n }; // Make the queue animation current if it wasn\'t already\n\n\n if (layer.currentAnimation === null) {\n layer.resumeAnimation(animation.name, transitionTime, easingFn, undefined, undefined, undefined, onNext);\n }\n\n return animation.next(onNext, true);\n }\n /**\r\n * Pause the current animation on a layer.\r\n *\r\n * @param {string} name - Name of the layer to pause.\r\n *\r\n * @returns {boolean} Whether or not an animation was successfully paused.\r\n */\n\n }, {\n key: "pauseAnimation",\n value: function pauseAnimation(name) {\n var layer = this._layerMap[name];\n\n if (layer === undefined) {\n console.warn("Did not pause animation on layer ".concat(name, " for host ").concat(this._host.id, ". No layer exists with this name."));\n return false;\n }\n\n var paused = layer.pauseAnimation(); // Notify that an animation was paused\n\n if (paused) {\n var animationName = layer.currentAnimation;\n this.emit(this.constructor.EVENTS.pauseAnimation, {\n layerName: name,\n animationName: animationName\n });\n }\n\n return paused;\n }\n /**\r\n * Pause the currently playing animation and play a new animation from where it\r\n * last left off.\r\n *\r\n * @param {string} layerName - Name of the layer that contains the animation.\r\n * @param {string=} animationName - Name of the animation state to resume. Defaults\r\n * to the name of the current animation for the layer.\r\n * @param {number=} seconds - The number of seconds it should take to transition\r\n * to the new animation. Default is zero and will set immediately.\r\n * @param {Function=} easingFn - The easing function to use while transitioning\r\n * between animations. Default is Easing.Linear.InOut.\r\n *\r\n * @returns {Deferred} - Resolves once the animation reaches the end of its\r\n * timeline. Looping animations can only resolve if they are interrupted or\r\n * manually stopped.\r\n */\n\n }, {\n key: "resumeAnimation",\n value: function resumeAnimation(layerName, animationName, seconds, easingFn) {\n var _this9 = this;\n\n var layer = this._layerMap[layerName];\n\n if (layer === undefined) {\n var e = "Cannot resume animation ".concat(animationName, " on layer ").concat(layerName, " for host ").concat(this._host.id, ". No layer exists with this name.");\n return core_Deferred.reject(e);\n } // Notify that an animation was resumed\n\n\n this.emit(this.constructor.EVENTS.resumeAnimation, {\n layerName: layerName,\n animationName: animationName\n });\n return layer.resumeAnimation(animationName, seconds, easingFn, function () {\n // Notify that an animation has stopped\n _this9.emit(_this9.constructor.EVENTS.stopAnimation, {\n layerName: layerName,\n animationName: animationName\n });\n }, undefined, function () {\n // Notify that an animation has been interrupted\n _this9.emit(_this9.constructor.EVENTS.interruptAnimation, {\n layerName: layerName,\n animationName: animationName\n });\n }, function (_ref3) {\n var name = _ref3.name,\n canAdvance = _ref3.canAdvance,\n isQueueEnd = _ref3.isQueueEnd;\n\n if (layer.currentAnimation === animationName) {\n // Notify that a new animation has begun\n _this9.emit(_this9.constructor.EVENTS.playNextAnimation, {\n layerName: layerName,\n animationName: animationName,\n nextQueuedAnimation: name,\n canAdvance: canAdvance,\n isQueueEnd: isQueueEnd\n });\n }\n });\n }\n /**\r\n * Stop the current animation on a layer. Stop rewinds the animation to the\r\n * beginning and prevents it from progressing forward.\r\n *\r\n * @param {string} name - Name of the layer that contains the animation.\r\n *\r\n * @returns {boolean} Whether or not an animation was successfully stopped.\r\n */\n\n }, {\n key: "stopAnimation",\n value: function stopAnimation(name) {\n var layer = this._layerMap[name];\n\n if (layer === undefined) {\n console.warn("Did not stop animation on layer ".concat(name, " for host ").concat(this._host.id, ". No layer exists with this name."));\n return false;\n }\n\n return layer.stopAnimation();\n }\n /**\r\n * Pause current animation and weight interpolation animation on all layers.\r\n * @returns {boolean} - Whether or not there was an existing interpolation or\r\n * current animations to pause.\r\n */\n\n }, {\n key: "pause",\n value: function pause() {\n this._paused = true;\n var paused = false;\n\n this._layers.forEach(function (l) {\n if (l.pause()) {\n paused = true;\n }\n });\n\n return paused;\n }\n /**\r\n * Resume current animation and weight interpolation animation on all layers.\r\n * @returns {boolean} - Whether or not there was an existing interpolation or\r\n * current animations to resume.\r\n */\n\n }, {\n key: "resume",\n value: function resume() {\n this._paused = false;\n var resumed = false;\n\n this._layers.forEach(function (l) {\n if (l.resume()) {\n resumed = true;\n }\n });\n\n return resumed;\n }\n /**\r\n * Adds a namespace to the host with the name of the feature to contain properties\r\n * and methods from the feature that users of the host need access to.\r\n *\r\n * @see AnimationFeature\r\n */\n\n }, {\n key: "installApi",\n value: function installApi() {\n var _this10 = this;\n\n /**\r\n * @inner\r\n * @namespace AnimationFeature\r\n */\n var api = AnimationFeature_get(AnimationFeature_getPrototypeOf(AnimationFeature.prototype), "installApi", this).call(this);\n\n Object.defineProperties(api, {\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @see core/AnimationFeature#paused\r\n */\n paused: {\n get: function get() {\n return _this10.paused;\n }\n },\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @see core/AnimationFeature#layers\r\n */\n layers: {\n get: function get() {\n return _this10.layers;\n }\n }\n });\n Object.assign(api, {\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#addLayer\r\n */\n addLayer: this.addLayer.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#removeLayer\r\n */\n removeLayer: this.removeLayer.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#moveLayer\r\n */\n moveLayer: this.moveLayer.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#renameLayer\r\n */\n renameLayer: this.renameLayer.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#getLayerWeight\r\n */\n getLayerWeight: this.getLayerWeight.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#setLayerWeight\r\n */\n setLayerWeight: this.setLayerWeight.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#pauseLayerWeight\r\n */\n pauseLayerWeight: this.pauseLayerWeight.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#resumeLayerWeight\r\n */\n resumeLayerWeight: this.resumeLayerWeight.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#pauseLayer\r\n */\n pauseLayer: this.pauseLayer.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#resumeLayer\r\n */\n resumeLayer: this.resumeLayer.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#getTransitioning\r\n */\n getTransitioning: this.getTransitioning.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#getAnimations\r\n */\n getAnimations: this.getAnimations.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#getCurrentAnimation\r\n */\n getCurrentAnimation: this.getCurrentAnimation.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#getPaused\r\n */\n getPaused: this.getPaused.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#getAnimationType\r\n */\n getAnimationType: this.getAnimationType.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#addAnimation\r\n */\n addAnimation: this.addAnimation.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#removeAnimation\r\n */\n removeAnimation: this.removeAnimation.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#renameAnimation\r\n */\n renameAnimation: this.renameAnimation.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#getAnimationBlendNames\r\n */\n getAnimationBlendNames: this.getAnimationBlendNames.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#getAnimationBlendWeight\r\n */\n getAnimationBlendWeight: this.getAnimationBlendWeight.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#setAnimationBlendWeight\r\n */\n setAnimationBlendWeight: this.setAnimationBlendWeight.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#playAnimation\r\n */\n playAnimation: this.playAnimation.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#playNextAnimation\r\n */\n playNextAnimation: this.playNextAnimation.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#pauseAnimation\r\n */\n pauseAnimation: this.pauseAnimation.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#resumeAnimation\r\n */\n resumeAnimation: this.resumeAnimation.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#stopAnimation\r\n */\n stopAnimation: this.stopAnimation.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#pause\r\n */\n pause: this.pause.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#resume\r\n */\n resume: this.resume.bind(this)\n });\n }\n /**\r\n * Update each animation layer.\r\n *\r\n * @param {number} deltaTime - Time since the last update.\r\n */\n\n }, {\n key: "update",\n value: function update(deltaTime) {\n if (!this._layers.length) {\n return;\n }\n\n if (this._paused) {\n deltaTime = 0;\n } // Re-evaluate internal weights for layers\n\n\n this._updateInternalWeights(); // Update layers\n\n\n this._layers.forEach(function (layer) {\n layer.update(deltaTime);\n });\n\n AnimationFeature_get(AnimationFeature_getPrototypeOf(AnimationFeature.prototype), "update", this).call(this, deltaTime);\n }\n }, {\n key: "discard",\n value: function discard() {\n this._layers.forEach(function (layer) {\n layer.discard();\n });\n\n delete this._layers;\n delete this._layerMap;\n\n AnimationFeature_get(AnimationFeature_getPrototypeOf(AnimationFeature.prototype), "discard", this).call(this);\n }\n }]);\n\n return AnimationFeature;\n}(core_AbstractHostFeature);\n\nObject.defineProperty(AnimationFeature_AnimationFeature, \'EVENTS\', {\n value: AnimationFeature_objectSpread(AnimationFeature_objectSpread({}, Object.getPrototypeOf(core_AbstractHostFeature).EVENTS), {}, {\n addLayer: \'onAddLayerEvent\',\n removeLayer: \'onRemoveLayerEvent\',\n renameLayer: \'onRenameLayerEvent\',\n addAnimation: \'onAddAnimationEvent\',\n removeAnimation: \'onRemovedAnimationEvent\',\n renameAnimation: \'onRenameAnimationEvent\',\n playAnimation: \'onPlayEvent\',\n playNextAnimation: \'onNextEvent\',\n pauseAnimation: \'onPauseEvent\',\n resumeAnimation: \'onResumeEvent\',\n interruptAnimation: \'onInterruptEvent\',\n stopAnimation: \'onStopEvent\'\n })\n});\n/* harmony default export */ var animpack_AnimationFeature = (AnimationFeature_AnimationFeature);\n// CONCATENATED MODULE: ./src/core/PointOfInterestFeature.js\nfunction PointOfInterestFeature_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { PointOfInterestFeature_typeof = function _typeof(obj) { return typeof obj; }; } else { PointOfInterestFeature_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return PointOfInterestFeature_typeof(obj); }\n\nfunction PointOfInterestFeature_slicedToArray(arr, i) { return PointOfInterestFeature_arrayWithHoles(arr) || PointOfInterestFeature_iterableToArrayLimit(arr, i) || PointOfInterestFeature_unsupportedIterableToArray(arr, i) || PointOfInterestFeature_nonIterableRest(); }\n\nfunction PointOfInterestFeature_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."); }\n\nfunction PointOfInterestFeature_iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction PointOfInterestFeature_arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction PointOfInterestFeature_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction PointOfInterestFeature_toConsumableArray(arr) { return PointOfInterestFeature_arrayWithoutHoles(arr) || PointOfInterestFeature_iterableToArray(arr) || PointOfInterestFeature_unsupportedIterableToArray(arr) || PointOfInterestFeature_nonIterableSpread(); }\n\nfunction PointOfInterestFeature_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."); }\n\nfunction PointOfInterestFeature_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return PointOfInterestFeature_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return PointOfInterestFeature_arrayLikeToArray(o, minLen); }\n\nfunction PointOfInterestFeature_iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction PointOfInterestFeature_arrayWithoutHoles(arr) { if (Array.isArray(arr)) return PointOfInterestFeature_arrayLikeToArray(arr); }\n\nfunction PointOfInterestFeature_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction PointOfInterestFeature_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction PointOfInterestFeature_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction PointOfInterestFeature_createClass(Constructor, protoProps, staticProps) { if (protoProps) PointOfInterestFeature_defineProperties(Constructor.prototype, protoProps); if (staticProps) PointOfInterestFeature_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction PointOfInterestFeature_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { PointOfInterestFeature_get = Reflect.get; } else { PointOfInterestFeature_get = function _get(target, property, receiver) { var base = PointOfInterestFeature_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return PointOfInterestFeature_get(target, property, receiver || target); }\n\nfunction PointOfInterestFeature_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = PointOfInterestFeature_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction PointOfInterestFeature_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) PointOfInterestFeature_setPrototypeOf(subClass, superClass); }\n\nfunction PointOfInterestFeature_setPrototypeOf(o, p) { PointOfInterestFeature_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return PointOfInterestFeature_setPrototypeOf(o, p); }\n\nfunction PointOfInterestFeature_createSuper(Derived) { var hasNativeReflectConstruct = PointOfInterestFeature_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = PointOfInterestFeature_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = PointOfInterestFeature_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return PointOfInterestFeature_possibleConstructorReturn(this, result); }; }\n\nfunction PointOfInterestFeature_possibleConstructorReturn(self, call) { if (call && (PointOfInterestFeature_typeof(call) === "object" || typeof call === "function")) { return call; } return PointOfInterestFeature_assertThisInitialized(self); }\n\nfunction PointOfInterestFeature_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction PointOfInterestFeature_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction PointOfInterestFeature_getPrototypeOf(o) { PointOfInterestFeature_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return PointOfInterestFeature_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/* eslint-disable no-underscore-dangle */\n\n/* eslint-disable no-unused-vars */\n\n\n\n\n\n\n\n/**\r\n * Enum for axis directions.\r\n *\r\n * @readonly\r\n * @enum {Class}\r\n */\n\nvar AxisMap = {\n PositiveX: [1, 0, 0],\n NegativeX: [-1, 0, 0],\n PositiveY: [0, 1, 0],\n NegativeY: [0, -1, 0],\n PositiveZ: [0, 0, 1],\n NegativeZ: [0, 0, -1]\n};\nvar FaceTargetTypes = {\n EyeCenter: 0,\n EyeLeft: 1,\n EyeRight: 2,\n Mouth: 3\n}; // Average distance between pupils is .064m, golden ratio says that the distance\n// from center of the pupils to the center of the mouth should be about the same.\n\nvar FaceVectors = [[0, 0, 0], [-.032, 0, 0], [.032, 0, 0], [0, -.064, 0]]; // Time ranges to use when choosing a new random wait time between saccades\n\nvar MicroSaccadeWaitRanges = {\n "default": [0.8, 1.75],\n postMacro: [0.6, 1.3125]\n};\nvar MacroSaccadeWaitRanges = {\n "default": [5.0, 8.0],\n mouthTarget: [0.2, 0.75],\n // Look away from a mouth target the fastest\n eyeTarget: [1.5, 4.0]\n}; // Minimum angle in degrees the eye direction must change to trigger a blink animation\n\nvar BlinkThreshold = 35; // Maximum number of milliseconds to use for calculating look speed\n\nvar MaxDelta = 100 / 3;\n/**\r\n * PointOfInterest controls the gaze direction of the host. Given one or more\r\n * animations of type Blend2dState, it calculates the angles between the lookTracker\r\n * object (generally a joint in the host\'s skeleton) and the lookTarget (the object\r\n * the host should look at) and drives the managed Blend2dStates\' X and Y blend\r\n * values using the result. You can optionally add saccadic movement to any managed\r\n * animation to help make the host\'s eyes appear alive when focused on the same\r\n * point for exteded periods of time. If blink animations are specified, a blink\r\n * will be played during large changes in gaze direction.\r\n *\r\n * @extends AbstractHostFeature\r\n * @alias core/PointOfInterestFeature\r\n * @implements SSMLSpeechmarkInterface\r\n * @implements ManagedAnimationLayerInterface\r\n */\n\nvar PointOfInterestFeature_PointOfInterestFeature = /*#__PURE__*/function (_AbstractHostFeature$) {\n PointOfInterestFeature_inherits(PointOfInterestFeature, _AbstractHostFeature$);\n\n var _super = PointOfInterestFeature_createSuper(PointOfInterestFeature);\n\n /**\r\n * @constructor\r\n *\r\n * @param {core/HostObject} host - Host that owns the feature.\r\n * @param {Object=} options - Options for the feature.\r\n * @param {Object=} target - 3D transformation node that the host should try to\r\n * look at.\r\n * @param {Object} options.lookTracker - 3D transformation node that represents\r\n * the direction the host is currently looking during animation.\r\n * @param {Object=} options.scene - Engine-specific scene object that contains\r\n * the host. This object must be defined if using \'setTargetByName\' or \'SetTargetById\'\r\n * methods.\r\n * @param {Object=} lookOptions - Options for the look animation layers.\r\n * @param {number} [lookOptions.blendTime=0.1] - Default amount of time it will\r\n * take to manipulate the weights of the look layers.\r\n * @param {number} [lookOptions.easingFn=Quadratic.InOut] - Default easing function\r\n * to use when manipulating look layer weights.\r\n * @param {Array.} [lookOptions.layers=[]] - An array of layer options\r\n * objects to register as look layers.\r\n * @param {Object=} blinkOptions - Options for the blink animation layers.\r\n * @param {number} [blinkOptions.blendTime=0.075] - Default amount of time it\r\n * will take to manipulate the weights of the blink layers.\r\n * @param {number} [blinkOptions.easingFn=Quadratic.InOut] - Default easing function\r\n * to use when manipulating blink layer weights.\r\n * @param {Array.} [blinkOptions.layers=[]] - An array of layer options\r\n * objects to register as blink layers.\r\n */\n function PointOfInterestFeature(host) {\n var _this;\n\n var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n target = _ref.target,\n lookTracker = _ref.lookTracker,\n scene = _ref.scene;\n\n var _ref2 = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},\n _ref2$blendTime = _ref2.blendTime,\n lookBlendTime = _ref2$blendTime === void 0 ? 0.1 : _ref2$blendTime,\n _ref2$easingFn = _ref2.easingFn,\n lookEasingFn = _ref2$easingFn === void 0 ? Quadratic.InOut : _ref2$easingFn,\n _ref2$layers = _ref2.layers,\n lookLayers = _ref2$layers === void 0 ? [] : _ref2$layers;\n\n var _ref3 = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {},\n _ref3$blendTime = _ref3.blendTime,\n blinkBlendTime = _ref3$blendTime === void 0 ? 0.075 : _ref3$blendTime,\n _ref3$easingFn = _ref3.easingFn,\n blinkEasingFn = _ref3$easingFn === void 0 ? Quadratic.InOut : _ref3$easingFn,\n _ref3$layers = _ref3.layers,\n blinkLayers = _ref3$layers === void 0 ? [] : _ref3$layers;\n\n PointOfInterestFeature_classCallCheck(this, PointOfInterestFeature);\n\n _this = _super.call(this, host);\n\n if (!_this.constructor._validateTransformObject(lookTracker)) {\n throw new Error("Cannot initialize PointOfInterestFeature on host ".concat(_this._host.id, ". LookTracker must be defined as a valid transformation object."));\n }\n\n _this._lookTracker = lookTracker;\n _this._scene = scene;\n _this._target = target || null;\n _this._prevTargetPos = [0, 0, 0];\n _this._isTargetMoving = false;\n _this._lookLayers = _this._lookLayers || {};\n _this._trackingConfigs = _this._trackingConfigs || [];\n _this._blinkLayers = _this._blinkLayers || {}; // Register the look layers\n\n lookLayers.forEach(function (_ref4) {\n var name = _ref4.name,\n animation = _ref4.animation,\n maxSpeed = _ref4.maxSpeed,\n reference = _ref4.reference,\n forwardAxis = _ref4.forwardAxis,\n hasSaccade = _ref4.hasSaccade,\n blendTime = _ref4.blendTime,\n easingFn = _ref4.easingFn;\n\n _this.registerLookLayer(name, {\n animation: animation,\n maxSpeed: maxSpeed,\n reference: reference,\n forwardAxis: forwardAxis,\n hasSaccade: hasSaccade,\n blendTime: blendTime !== undefined ? blendTime : lookBlendTime,\n easingFn: easingFn !== undefined ? easingFn : lookEasingFn\n });\n }); // Register the blink layers\n\n blinkLayers.forEach(function (_ref5) {\n var name = _ref5.name,\n animation = _ref5.animation,\n blendTime = _ref5.blendTime,\n easingFn = _ref5.easingFn;\n\n _this.registerBlinkLayer(name, {\n animation: animation,\n blendTime: blendTime !== undefined ? blendTime : blinkBlendTime,\n easingFn: easingFn !== undefined ? easingFn : blinkEasingFn\n });\n });\n return _this;\n }\n /**\r\n * Gets and sets the target object the host should look at.\r\n *\r\n * @type {Object|null}\r\n */\n\n\n PointOfInterestFeature_createClass(PointOfInterestFeature, [{\n key: "target",\n get: function get() {\n return this._target;\n },\n set: function set(target) {\n this._target = target || null;\n }\n /**\r\n * Return a vector representing the global position of an object. Should be\r\n * overloaded for each rendering engine implementation.\r\n *\r\n * @private\r\n *\r\n * @param {any} _obj - Engine-specific 3D transform object.\r\n *\r\n * @returns {Array.} - An array consisting of three numbers representing\r\n * x, y and z coordinates.\r\n */\n\n }, {\n key: "_onLayerAdded",\n value: function _onLayerAdded(_ref6) {\n var name = _ref6.name;\n this._lookLayers = this._lookLayers || {};\n this._blinkLayers = this._blinkLayers || {};\n\n PointOfInterestFeature_get(PointOfInterestFeature_getPrototypeOf(PointOfInterestFeature.prototype), "_onLayerAdded", this).call(this, {\n name: name\n }); // Validate the look animation\n\n\n if (this._lookLayers[name] !== undefined) {\n this._registerLookAnimation(name, this._lookLayers[name]);\n }\n }\n }, {\n key: "_onAnimationAdded",\n value: function _onAnimationAdded(_ref7) {\n var layerName = _ref7.layerName,\n animationName = _ref7.animationName;\n this._lookLayers = this._lookLayers || {};\n this._blinkLayers = this._blinkLayers || {};\n\n PointOfInterestFeature_get(PointOfInterestFeature_getPrototypeOf(PointOfInterestFeature.prototype), "_onAnimationAdded", this).call(this, {\n layerName: layerName\n }); // Validate the look animation\n\n\n if (this._lookLayers[layerName] === animationName) {\n this._registerLookAnimation(layerName, animationName);\n }\n }\n /**\r\n * Ensure that registered look animations are Blend2dStates.\r\n *\r\n * @private\r\n *\r\n * @param {string} layerName - Name of the layer that contains the look animation.\r\n * @param {string} animationName - Name of the animation.\r\n */\n\n }, {\n key: "_registerLookAnimation",\n value: function _registerLookAnimation(layerName, animationName) {\n if (this._managedLayers[layerName].animations[animationName].isActive) {\n if (AnimationTypes[this._host.AnimationFeature.getAnimationType(layerName, animationName)] !== AnimationTypes.blend2d) {\n // Warn and deactivate if the registered state is not blend2d\n console.warn("Cannot register Point of Interest look animation ".concat(animationName, " on layer ").concat(layerName, " for host ").concat(this._host.id, ". Look animations must be of type \'blend2d\'."));\n this._managedLayers[layerName].animations[animationName].isActive = false;\n }\n }\n }\n /**\r\n * Check if the given object is not of an engine-specific type. Should\r\n * be overloaded for each rendering engine implementation.\r\n *\r\n * @private\r\n *\r\n * @param {any} obj - Object to validate.\r\n *\r\n * @returns {boolean}\r\n */\n\n }, {\n key: "_addTrackingConfig",\n value:\n /**\r\n * Check if the given configuration object has already been stored as a tracking\r\n * config. If it has, return the stored configuration. Otherwise, store and\r\n * return it.\r\n *\r\n * @private\r\n *\r\n * @param {Object} config - Object containing tracker, reference and forwardAxis\r\n * properties.\r\n *\r\n * @returns {Object}\r\n */\n function _addTrackingConfig(config) {\n var trackingConfig = this._trackingConfigs.find(function (c) {\n return c.reference === config.reference && c.forwardAxis === config.forwardAxis;\n });\n\n if (trackingConfig) {\n return trackingConfig;\n } else {\n config.angles = {\n h: 0,\n v: 0\n };\n config.prevAngles = {\n h: 0,\n v: 0\n };\n\n this._trackingConfigs.push(config);\n\n return config;\n }\n }\n /**\r\n * Return the distance between the look tracker and the look target.\r\n *\r\n * @private\r\n *\r\n * @returns {number}\r\n */\n\n }, {\n key: "_getTargetDistance",\n value: function _getTargetDistance() {\n // Find the vector between the global positions of tracker and target\n var sourcePosition = this.constructor._getWorldPosition(this._lookTracker);\n\n var targetPosition = this.constructor._getWorldPosition(this._target);\n\n var lookVector = [targetPosition[0] - sourcePosition[0], targetPosition[1] - sourcePosition[1], targetPosition[2] - sourcePosition[2]];\n return core_MathUtils.getVectorMagnitude(lookVector);\n }\n /**\r\n * Reset all stored tracking angles to 0.\r\n *\r\n * @private\r\n */\n\n }, {\n key: "_resetLookAngles",\n value: function _resetLookAngles() {\n this._trackingConfigs.forEach(function (_ref8) {\n var angles = _ref8.angles;\n angles.h = 0;\n angles.v = 0;\n });\n }\n /**\r\n * Store the difference in horizontal and vertical rotation for the tracker\'s\r\n * reference rotation and the direction of the target from the tracker.\r\n *\r\n * @private\r\n */\n\n }, {\n key: "_setLookAngles",\n value: function _setLookAngles() {\n var _this2 = this;\n\n // Get the current positions of the tracker and target objects\n var targetPos = this.constructor._getWorldPosition(this._target);\n\n var trackerPos = this.constructor._getWorldPosition(this._lookTracker); // Check if the target has moved\n\n\n this._isTargetMoving = core_MathUtils.getVectorMagnitude([targetPos[0] - this._prevTargetPos[0], targetPos[1] - this._prevTargetPos[1], targetPos[2] - this._prevTargetPos[2]]) > 0;\n Object.assign(this._prevTargetPos, targetPos); // Calculate the horizontal and vertical angles to rotate to the target\n\n var targetSpherical = core_MathUtils.cartesianToSpherical(targetPos[0] - trackerPos[0], targetPos[1] - trackerPos[1], targetPos[2] - trackerPos[2]);\n\n var targetAngles = this.constructor._sphericalToBlendValue(targetSpherical[1], targetSpherical[2]); // Calculate angles relative to the reference objects\n\n\n this._trackingConfigs.forEach(function (_ref9) {\n var reference = _ref9.reference,\n forwardAxis = _ref9.forwardAxis,\n angles = _ref9.angles;\n\n // Calculate the horizontal and vertical angles to rotate to the direction of the tracker\n var refDirection = _this2.constructor._getObjectDirection(reference, forwardAxis);\n\n var refSpherical = core_MathUtils.cartesianToSpherical.apply(core_MathUtils, PointOfInterestFeature_toConsumableArray(refDirection));\n\n var refAngles = _this2.constructor._sphericalToBlendValue(refSpherical[1], refSpherical[2]); // Store the difference\n\n\n angles.h = targetAngles.h - refAngles.h;\n angles.v = targetAngles.v - refAngles.v;\n });\n }\n /**\r\n * Return the horizontal and vertical angles it would require to simulate looking\r\n * at the given type of face target\r\n *\r\n * @private\r\n *\r\n * @param {number} targetType - Integer representing the FaceTargetType.\r\n *\r\n * @returns {Object}- An object with signature {r: number, h: number, v: number}\r\n * where \'r\' represents radius, h represents the horizontal/azimuthal angle and\r\n * v represents the vertical/polar angle.\r\n */\n\n }, {\n key: "_getFaceTargetAngles",\n value: function _getFaceTargetAngles(targetType) {\n // No offset when the target is the center of the eyes\n if (targetType === 0) {\n return {\n h: 0,\n v: 0\n };\n } // Build a vector to the face target type using the current distance to the target\n\n\n var distance = this._getTargetDistance(this._lookTracker);\n\n var faceVector = PointOfInterestFeature_toConsumableArray(FaceVectors[targetType]);\n\n faceVector[2] = distance;\n var spherical = core_MathUtils.cartesianToSpherical.apply(core_MathUtils, PointOfInterestFeature_toConsumableArray(faceVector)); // Make sure values are clamped within the range of motion of the human eye, in case the target is very close\n\n var blendValues = this.constructor._sphericalToBlendValue(spherical[1], spherical[2]);\n\n blendValues.h = core_MathUtils.clamp(blendValues.h, -35, 35);\n blendValues.v = core_MathUtils.clamp(blendValues.v, -25, 30);\n return blendValues;\n }\n /**\r\n * Updated the stored speed and duration variables for a layer based on the\r\n * change in horizontal and vertical angles of the tracker.\r\n *\r\n * @private\r\n *\r\n * @param {string} layerName - Name of the layer to store values on.\r\n * @param {number} h - Change in horizontal angle, in degrees.\r\n * @param {number} v - Change in vertical angle, in degrees.\r\n */\n\n }, {\n key: "_updateLayerSpeed",\n value: function _updateLayerSpeed(layerName, h, v) {\n var layer = this._managedLayers[layerName]; // From "Realistic Avatar and head Animation Using a Neurobiological Model of Visual Attention", Itti, Dhavale, Pighin\n\n layer.maxHSpeed = 473 * (1 - Math.exp(-h / 7.8));\n layer.maxVSpeed = 473 * (1 - Math.exp(-v / 7.8)); // From "Eyes Alive", Lee, Badler\n\n var D0 = 0.025;\n var d = 0.00235;\n layer.hDuration = D0 + d * h;\n layer.vDuration = D0 + d * v;\n }\n /**\r\n * Set the microSaccade object with new randomized values.\r\n *\r\n * @private\r\n *\r\n * @param {string} layerName - Name of the layer that owns the saccade motion.\r\n */\n\n }, {\n key: "_setMicroSaccade",\n value: function _setMicroSaccade(layerName) {\n var layer = this._managedLayers[layerName];\n var microSaccade = layer.microSaccade;\n\n if (this._target) {\n // Micro movements should be smaller when focused on a target\n microSaccade.h = core_Utils.getRandomFloat(.01, .15);\n microSaccade.v = core_Utils.getRandomFloat(.01, .15);\n } else {\n // Microsaccades. Encyclopedia of Neuroscience. (2009) Springer, Berlin, Heidelberg. https://doi.org/10.1007/978-3-540-29678-2_3492\n microSaccade.h = core_Utils.getRandomFloat(.01, .3);\n microSaccade.v = core_Utils.getRandomFloat(.01, .3);\n }\n\n this._updateLayerSpeed(layerName, microSaccade.h, microSaccade.v); // Restart the timer\n\n\n this._initializeMicroTimer.apply(this, [layerName].concat(PointOfInterestFeature_toConsumableArray(MicroSaccadeWaitRanges["default"])));\n }\n /**\r\n * Set the macroSaccade object with new randomized values.\r\n *\r\n * @private\r\n *\r\n * @param {string} layerName - Name of the layer that owns the saccade motion.\r\n */\n\n }, {\n key: "_setMacroSaccade",\n value: function _setMacroSaccade(layerName) {\n var layer = this._managedLayers[layerName];\n var macroSaccade = layer.macroSaccade;\n var macroSaccadeWaitRange; // Increase random value range when not focused on a target\n\n if (!this._target) {\n macroSaccadeWaitRange = MacroSaccadeWaitRanges["default"]; // Normal human horizontal eye rotation limit is about 35 degrees\n\n var hLimit = core_Utils.getRandomFloat(.143, .286);\n var hFactor = core_Utils.getRandomFloat(-hLimit, hLimit);\n macroSaccade.h = hFactor * 35; // Normal human vertical eye rotation limit is about 25 degrees upward and 30 degrees downward\n\n var vLimit = core_Utils.getRandomFloat(.093, .186);\n var vFactor = core_Utils.getRandomFloat(-vLimit, vLimit);\n macroSaccade.v = vFactor > 0 ? vFactor * 25 : vFactor * 30;\n } // Pick a new face target\n else {\n // Social triangle - saccade between eyes and mouth, weighted to look at eyes more often\n switch (layer.saccadeTarget) {\n case 1:\n macroSaccadeWaitRange = MacroSaccadeWaitRanges.eyeTarget;\n layer.saccadeTarget = Math.random() < 0.75 ? FaceTargetTypes.EyeRight : FaceTargetTypes.Mouth;\n break;\n\n case 2:\n macroSaccadeWaitRange = MacroSaccadeWaitRanges.eyeTarget;\n layer.saccadeTarget = Math.random() < 0.75 ? FaceTargetTypes.EyeLeft : FaceTargetTypes.Mouth;\n break;\n\n case 3:\n macroSaccadeWaitRange = MacroSaccadeWaitRanges.mouthTarget;\n layer.saccadeTarget = Math.random() < 0.5 ? FaceTargetTypes.EyeLeft : FaceTargetTypes.EyeRight;\n break;\n\n case 0:\n default:\n macroSaccadeWaitRange = MacroSaccadeWaitRanges.eyeTarget;\n layer.saccadeTarget = Math.random() < 0.5 ? FaceTargetTypes.EyeLeft : FaceTargetTypes.EyeRight;\n break;\n }\n\n var _this$_getFaceTargetA = this._getFaceTargetAngles(layer.saccadeTarget),\n h = _this$_getFaceTargetA.h,\n v = _this$_getFaceTargetA.v;\n\n macroSaccade.h = h;\n macroSaccade.v = v;\n }\n\n this._updateLayerSpeed(layerName, macroSaccade.h, macroSaccade.v); // Restart the timers\n\n\n this._initializeMicroTimer.apply(this, [layerName].concat(PointOfInterestFeature_toConsumableArray(MicroSaccadeWaitRanges.postMacro)));\n\n this._initializeMacroTimer.apply(this, [layerName].concat(PointOfInterestFeature_toConsumableArray(macroSaccadeWaitRange)));\n }\n /**\r\n * Start a new wait timer that will set a new micro saccade movement when it\r\n * resolves.\r\n *\r\n * @private\r\n *\r\n * @param {string} layerName - Name of the layer that owns the saccade motion.\r\n * @param {number} minWaitTime - Minimum number of seconds before a new saccade\r\n * will be triggered.\r\n * @param {number} maxWaitTime - Maximum number of seconds before a new saccade\r\n * will be triggered.\r\n */\n\n }, {\n key: "_initializeMicroTimer",\n value: function _initializeMicroTimer(layerName, minWaitTime, maxWaitTime) {\n var _this3 = this;\n\n var layer = this._managedLayers[layerName];\n var waitTime = core_Utils.getRandomFloat(minWaitTime, maxWaitTime);\n\n if (layer.microSaccadeTimer) {\n layer.microSaccadeTimer.cancel();\n }\n\n layer.microSaccadeTimer = core_Utils.wait(waitTime, {\n onFinish: function onFinish() {\n _this3._setMicroSaccade(layerName);\n }\n });\n }\n /**\r\n * Start a new wait timer that will set a new macro saccade movement when it\r\n * resolves.\r\n *\r\n * @private\r\n *\r\n * @param {string} layerName - Name of the layer that owns the saccade motion.\r\n * @param {number} minWaitTime - Minimum number of seconds before a new saccade\r\n * will be triggered.\r\n * @param {number} maxWaitTime - Maximum number of seconds before a new saccade\r\n * will be triggered.\r\n */\n\n }, {\n key: "_initializeMacroTimer",\n value: function _initializeMacroTimer(layerName, minWaitTime, maxWaitTime) {\n var _this4 = this;\n\n var layer = this._managedLayers[layerName];\n var waitTime = core_Utils.getRandomFloat(minWaitTime, maxWaitTime);\n\n if (layer.macroSaccadeTimer) {\n layer.macroSaccadeTimer.cancel();\n }\n\n layer.macroSaccadeTimer = core_Utils.wait(waitTime, {\n onFinish: function onFinish() {\n _this4._setMacroSaccade(layerName);\n }\n });\n }\n /**\r\n * Sets a new target to look at.\r\n *\r\n * @param {Object|null} target - The new target to look at.\r\n */\n\n }, {\n key: "setTarget",\n value: function setTarget(target) {\n this.target = target;\n }\n /**\r\n * Finds an object given its name and sets it as the new target to look at.\r\n * Should be overloaded for each rendering engine implementation.\r\n *\r\n * @param {string} target - Name to search for.\r\n */\n\n }, {\n key: "setTargetByName",\n value: function setTargetByName(name) {\n if (!name) {\n this._target = null;\n }\n\n if (!this._scene) {\n throw new Error("Cannot set PointOfInterestFeature target using name ".concat(name, " on host ").concat(this._host.id, ". Scene must be defined."));\n }\n }\n /**\r\n * Finds an object given its id and sets it as the new target to look at.\r\n * Should be overloaded for each rendering engine implementation.\r\n *\r\n * @param {string|number} target - Id to search for.\r\n */\n\n }, {\n key: "setTargetById",\n value: function setTargetById(id) {\n if (!id) {\n this._target = null;\n }\n\n if (!this._scene) {\n throw new Error("Cannot set PointOfInterestFeature target using id ".concat(id, " on host ").concat(this._host.id, ". Scene must be defined."));\n }\n }\n /**\r\n * Start keeping track of an animation layer that owns a blend2d animation with\r\n * blendWeights corresponding to horizontal and vertical look angles.\r\n *\r\n * @param {string} layerName - Name of the layer to keep track of.\r\n * @param {Object=} options - Options for the layer.\r\n * @param {string} [options.animation = \'look\'] - Name of the animation on the\r\n * layer whose blendWeights will be driven based on the angle between the lookTracker\r\n * and the lookTarget. This animation must be of type blend2d.\r\n * @param {number} [options.maxSpeed = 25] - The maximum speed at which the blend2d\r\n * blendWeights can be manipulated.\r\n * @param {string} [options.forwardAxis = \'PositiveZ\'] - Axis pointing from the\r\n * front of the lookReference object. Valid options are \'PositiveX\', \'NegativeX\',\r\n * \'PositiveY\', \'NegativeY\', \'PositiveZ\', \'NegativeZ\'.\r\n * @param {Object=} options.lookReference - 3D transformation node that the lookTracker\r\n * rotation limits should be calculated relative to. Defaults to the host owner.\r\n * @param {number} [options.hasSaccade = false] - Whether or not to include\r\n * saccadic motion onto the blendWeight animation. This should only be set to\r\n * true for blend2d animations representing eye animation.\r\n * @param {number=} [options.blendTime=[PointOfInterestFeature.DEFAULT_LAYER_OPTIONS.blendTime]{@link PointOfInterestFeature#DEFAULT_LAYER_OPTIONS#blendTime}] -\r\n * Default amount of time to use when manipulating layer weight.\r\n * @param {Function=} options.easingFn - Default easing function to use when\r\n * manipulating layer weight.\r\n */\n\n }, {\n key: "registerLookLayer",\n value: function registerLookLayer(layerName) {\n var _ref10 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n _ref10$animation = _ref10.animation,\n animation = _ref10$animation === void 0 ? \'look\' : _ref10$animation,\n _ref10$maxSpeed = _ref10.maxSpeed,\n maxSpeed = _ref10$maxSpeed === void 0 ? 25 : _ref10$maxSpeed,\n reference = _ref10.reference,\n _ref10$forwardAxis = _ref10.forwardAxis,\n forwardAxis = _ref10$forwardAxis === void 0 ? \'PositiveZ\' : _ref10$forwardAxis,\n _ref10$hasSaccade = _ref10.hasSaccade,\n hasSaccade = _ref10$hasSaccade === void 0 ? false : _ref10$hasSaccade,\n _ref10$blendTime = _ref10.blendTime,\n blendTime = _ref10$blendTime === void 0 ? PointOfInterestFeature.DEFAULT_LAYER_OPTIONS.blendTime : _ref10$blendTime,\n easingFn = _ref10.easingFn;\n\n // Validate reference object\n reference = reference || this._host.owner;\n\n if (!this.constructor._validateTransformObject(reference)) {\n throw new Error("Cannot initialize register look layer ".concat(layerName, " for PointOfInterestFeature on host ").concat(this._host.id, ". Reference must be defined as a valid transformation object."));\n } // Find vector associated with axis string\n\n\n forwardAxis = AxisMap[forwardAxis] !== undefined ? AxisMap[forwardAxis] : AxisMap.PositiveZ; // Store tracking configuration\n\n var trackingConfig = this._addTrackingConfig({\n reference: reference,\n forwardAxis: forwardAxis\n }); // Register the layer and animation\n\n\n this.registerLayer(layerName, {\n trackingConfig: trackingConfig,\n maxSpeed: maxSpeed,\n maxHSpeed: undefined,\n maxVSpeed: undefined,\n hDuration: undefined,\n vDuration: undefined,\n hVelocity: [0, 0],\n vVelocity: [0, 0],\n hasSaccade: hasSaccade,\n blendTime: blendTime,\n easingFn: easingFn,\n microSaccade: {\n h: 0,\n v: 0\n },\n macroSaccade: {\n h: 0,\n v: 0\n },\n saccadeTarget: FaceTargetTypes.EyeCenter,\n animations: PointOfInterestFeature_defineProperty({}, animation, {})\n });\n this._lookLayers[layerName] = animation; // Validate the look animation\n\n this._registerLookAnimation(layerName, animation); // Initialize saccade timers\n\n\n if (hasSaccade) {\n var macroSaccadeWaitRange = this._target ? MacroSaccadeWaitRanges.eyeTarget : MacroSaccadeWaitRanges["default"];\n\n this._initializeMicroTimer.apply(this, [layerName].concat(PointOfInterestFeature_toConsumableArray(MicroSaccadeWaitRanges["default"])));\n\n this._initializeMacroTimer.apply(this, [layerName].concat(PointOfInterestFeature_toConsumableArray(macroSaccadeWaitRange)));\n }\n }\n /**\r\n * Start keeping track of an animation layer that owns a blink animation. Blink\r\n * animations can be of any type, but if it is of type randomAnimation then a\r\n * it will be randomized each time a blink is called.\r\n *\r\n * @param {string} layerName - Name of the layer to keep track of.\r\n * @param {Object=} options - Options for the layer.\r\n * @param {string} [options.animation = \'blink\'] - Name of the blink animation\r\n * on the layer.\r\n * @param {number} [options.blendTime=[PointOfInterestFeature.DEFAULT_LAYER_OPTIONS.blendTime]{@link PointOfInterestFeature#DEFAULT_LAYER_OPTIONS#blendTime}] -\r\n * Default amount of time to use when manipulating the layer\'s weight.\r\n * @param {Function=} options.easingFn - Default easing function to use when\r\n * manipulating the layer\'s weight.\r\n */\n\n }, {\n key: "registerBlinkLayer",\n value: function registerBlinkLayer(layerName) {\n var _ref11 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n _ref11$animation = _ref11.animation,\n animation = _ref11$animation === void 0 ? \'blink\' : _ref11$animation,\n _ref11$blendTime = _ref11.blendTime,\n blendTime = _ref11$blendTime === void 0 ? PointOfInterestFeature.DEFAULT_LAYER_OPTIONS.blendTime : _ref11$blendTime,\n easingFn = _ref11.easingFn;\n\n // Register the layer and animation\n this.registerLayer(layerName, {\n blendTime: blendTime,\n easingFn: easingFn,\n animations: PointOfInterestFeature_defineProperty({}, animation, {})\n });\n this._blinkLayers[layerName] = animation;\n }\n }, {\n key: "update",\n value: function update(deltaTime) {\n var _this5 = this;\n\n PointOfInterestFeature_get(PointOfInterestFeature_getPrototypeOf(PointOfInterestFeature.prototype), "update", this).call(this, deltaTime); // Update the look angles\n\n\n if (this._target) {\n this._setLookAngles();\n } else {\n this._resetLookAngles();\n }\n\n var deltaSeconds = Math.min(deltaTime, MaxDelta) / 1000;\n var triggerBlink = false; // Set look blend values\n\n Object.entries(this._lookLayers).forEach(function (_ref12) {\n var _ref13 = PointOfInterestFeature_slicedToArray(_ref12, 2),\n layerName = _ref13[0],\n animName = _ref13[1];\n\n var options = _this5._managedLayers[layerName]; // Increment the saccade timers\n\n if (options.isActive && options.hasSaccade) {\n options.microSaccadeTimer.execute(deltaTime);\n options.macroSaccadeTimer.execute(deltaTime);\n } // Set the blend values\n\n\n if (options.animations[animName].isActive) {\n var currentH = _this5._host.AnimationFeature.getAnimationBlendWeight(layerName, animName, \'X\');\n\n var currentV = _this5._host.AnimationFeature.getAnimationBlendWeight(layerName, animName, \'Y\');\n\n var targetH = options.trackingConfig.angles.h;\n var targetV = options.trackingConfig.angles.v; // Check if the look angle has changed enough to trigger a blink\n\n if (_this5._isTargetMoving && !triggerBlink) {\n var prevTargetH = options.trackingConfig.prevAngles.h;\n var prevTargetV = options.trackingConfig.prevAngles.v;\n var changeAmount = core_MathUtils.toDegrees(core_MathUtils.getAngleBetween([prevTargetH, prevTargetV], [targetH, targetV]));\n\n if (changeAmount >= BlinkThreshold) {\n triggerBlink = true;\n }\n }\n\n options.trackingConfig.prevAngles.h = targetH;\n options.trackingConfig.prevAngles.v = targetV; // Add in the saccade movement\n\n if (options.hasSaccade) {\n core_MathUtils.dampValue(0, options.macroSaccade.h + options.macroSaccade.h, options.hVelocity, options.hDuration, options.maxHSpeed);\n targetH += options.hVelocity[0];\n core_MathUtils.dampValue(0, options.macroSaccade.v + options.macroSaccade.v, options.vVelocity, options.vDuration, options.maxVSpeed);\n targetV += options.vVelocity[0];\n } // Clamp to max speed\n\n\n var factor = core_MathUtils.clamp(deltaSeconds * options.maxSpeed, 0, 1);\n targetH = core_MathUtils.lerp(currentH, targetH, factor);\n targetV = core_MathUtils.lerp(currentV, targetV, factor); // Update the blend values\n\n _this5._host.AnimationFeature.setAnimationBlendWeight(layerName, animName, \'X\', targetH);\n\n _this5._host.AnimationFeature.setAnimationBlendWeight(layerName, animName, \'Y\', targetV);\n }\n });\n\n if (!triggerBlink || !this._isTargetMoving) {\n return;\n } // Execute blink\n\n\n Object.entries(this._blinkLayers).forEach(function (_ref14) {\n var _ref15 = PointOfInterestFeature_slicedToArray(_ref14, 2),\n layerName = _ref15[0],\n animName = _ref15[1];\n\n var animation = _this5._managedLayers[layerName].animations[animName];\n\n if (animation.isActive) {\n _this5._host.AnimationFeature.playAnimation(layerName, animName);\n }\n });\n }\n }, {\n key: "installApi",\n value: function installApi() {\n var _this6 = this;\n\n /**\r\n * @inner\r\n * @namespace PointOfInterestFeature\r\n */\n var api = PointOfInterestFeature_get(PointOfInterestFeature_getPrototypeOf(PointOfInterestFeature.prototype), "installApi", this).call(this);\n\n Object.defineProperties(api, {\n /**\r\n * @memberof PointOfInterestFeature\r\n * @instance\r\n * @see core/PointOfInterestFeature#target\r\n */\n target: {\n get: function get() {\n return _this6.target;\n },\n set: function set(target) {\n _this6.target = target;\n }\n }\n });\n Object.assign(api, {\n /**\r\n * @memberof PointOfInterestFeature\r\n * @instance\r\n * @method\r\n * @see core/PointOfInterestFeature#registerLookLayer\r\n */\n registerLookLayer: this.registerLookLayer.bind(this),\n\n /**\r\n * @memberof PointOfInterestFeature\r\n * @instance\r\n * @method\r\n * @see core/PointOfInterestFeature#registerBlinkLayer\r\n */\n registerBlinkLayer: this.registerBlinkLayer.bind(this),\n\n /**\r\n * @memberof PointOfInterestFeature\r\n * @instance\r\n * @method\r\n * @see core/PointOfInterestFeature#setTarget\r\n */\n setTarget: this.setTarget.bind(this),\n\n /**\r\n * @memberof PointOfInterestFeature\r\n * @instance\r\n * @method\r\n * @see core/PointOfInterestFeature#setTargetByName\r\n */\n setTargetByName: this.setTargetByName.bind(this),\n\n /**\r\n * @memberof PointOfInterestFeature\r\n * @instance\r\n * @method\r\n * @see core/PointOfInterestFeature#setTargetById\r\n */\n setTargetById: this.setTargetById.bind(this)\n });\n return api;\n }\n }], [{\n key: "_getWorldPosition",\n value: function _getWorldPosition(obj) {\n return [0, 0, 0];\n }\n /**\r\n * Return a matrix representing the global transformation matrix of an object.\r\n * Should be overloaded for each rendering engine implementation.\r\n *\r\n * @private\r\n *\r\n * @param {any} obj - Engine-specific 3D transform object.\r\n *\r\n * @returns {Array.} - An array consisting of 16 numbers representing\r\n * the 3d transformation.\r\n */\n\n }, {\n key: "_getWorldMatrix",\n value: function _getWorldMatrix(obj) {\n return [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1];\n }\n /**\r\n * Rotate the given local direction vector by the object\'s world rotation matrix.\r\n *\r\n * @private\r\n *\r\n * @param {any} obj - Engine-specific 3D transform object.\r\n * @param {Array.} forwardVector - Unit vector representing the local\r\n * forward direction of the object.\r\n *\r\n * @returns {Array.}\r\n */\n\n }, {\n key: "_getObjectDirection",\n value: function _getObjectDirection(obj) {\n var forwardVector = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : AxisMap.PositiveZ;\n var rotation = core_MathUtils.getRotationMatrix(this._getWorldMatrix(obj));\n return core_MathUtils.rotateVector(forwardVector, rotation);\n }\n /**\r\n * Calculate horizontal and vertical look angles in degrees given spherical theta\r\n * and phi angles in radians.\r\n *\r\n * @param {number} theta - Vertical/polar angle in radians where 0 points directly\r\n * along positive Y axis.\r\n * @param {number} phi - Horizontal/azimuthal angle in radians.\r\n *\r\n * @returns {Object} - An object with the signature {h: number, v: number} where\r\n * h represents horizontal rotation in degrees and v represents vertical rotation\r\n * in degrees.\r\n */\n\n }, {\n key: "_sphericalToBlendValue",\n value: function _sphericalToBlendValue(theta, phi) {\n var h = core_MathUtils.toDegrees(phi); // Offset the vertical angle so 0 is pointing forward instead of up\n\n var v = core_MathUtils.toDegrees(theta) - 90; // Convert vertical angle to -180, 180 range\n\n return {\n h: h,\n v: v\n };\n }\n }, {\n key: "_validateTransformObject",\n value: function _validateTransformObject(obj) {\n return obj instanceof Object;\n }\n }]);\n\n return PointOfInterestFeature;\n}(core_AbstractHostFeature.mix(awspack_SSMLSpeechmarkInterface.Mixin, animpack_ManagedAnimationLayerInterface.Mixin));\n\n/* harmony default export */ var core_PointOfInterestFeature = (PointOfInterestFeature_PointOfInterestFeature);\n\n// CONCATENATED MODULE: ./src/three.js/PointOfInterestFeature.js\nfunction three_js_PointOfInterestFeature_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { three_js_PointOfInterestFeature_typeof = function _typeof(obj) { return typeof obj; }; } else { three_js_PointOfInterestFeature_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return three_js_PointOfInterestFeature_typeof(obj); }\n\nfunction three_js_PointOfInterestFeature_toConsumableArray(arr) { return three_js_PointOfInterestFeature_arrayWithoutHoles(arr) || three_js_PointOfInterestFeature_iterableToArray(arr) || three_js_PointOfInterestFeature_unsupportedIterableToArray(arr) || three_js_PointOfInterestFeature_nonIterableSpread(); }\n\nfunction three_js_PointOfInterestFeature_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."); }\n\nfunction three_js_PointOfInterestFeature_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return three_js_PointOfInterestFeature_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return three_js_PointOfInterestFeature_arrayLikeToArray(o, minLen); }\n\nfunction three_js_PointOfInterestFeature_iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction three_js_PointOfInterestFeature_arrayWithoutHoles(arr) { if (Array.isArray(arr)) return three_js_PointOfInterestFeature_arrayLikeToArray(arr); }\n\nfunction three_js_PointOfInterestFeature_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction three_js_PointOfInterestFeature_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction three_js_PointOfInterestFeature_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction three_js_PointOfInterestFeature_createClass(Constructor, protoProps, staticProps) { if (protoProps) three_js_PointOfInterestFeature_defineProperties(Constructor.prototype, protoProps); if (staticProps) three_js_PointOfInterestFeature_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction three_js_PointOfInterestFeature_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { three_js_PointOfInterestFeature_get = Reflect.get; } else { three_js_PointOfInterestFeature_get = function _get(target, property, receiver) { var base = three_js_PointOfInterestFeature_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return three_js_PointOfInterestFeature_get(target, property, receiver || target); }\n\nfunction three_js_PointOfInterestFeature_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = three_js_PointOfInterestFeature_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction three_js_PointOfInterestFeature_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) three_js_PointOfInterestFeature_setPrototypeOf(subClass, superClass); }\n\nfunction three_js_PointOfInterestFeature_setPrototypeOf(o, p) { three_js_PointOfInterestFeature_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return three_js_PointOfInterestFeature_setPrototypeOf(o, p); }\n\nfunction three_js_PointOfInterestFeature_createSuper(Derived) { var hasNativeReflectConstruct = three_js_PointOfInterestFeature_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = three_js_PointOfInterestFeature_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = three_js_PointOfInterestFeature_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return three_js_PointOfInterestFeature_possibleConstructorReturn(this, result); }; }\n\nfunction three_js_PointOfInterestFeature_possibleConstructorReturn(self, call) { if (call && (three_js_PointOfInterestFeature_typeof(call) === "object" || typeof call === "function")) { return call; } return three_js_PointOfInterestFeature_assertThisInitialized(self); }\n\nfunction three_js_PointOfInterestFeature_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction three_js_PointOfInterestFeature_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction three_js_PointOfInterestFeature_getPrototypeOf(o) { three_js_PointOfInterestFeature_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return three_js_PointOfInterestFeature_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/**\r\n * @extends core/PointOfInterestFeature\r\n * @alias three.js/PointOfInterestFeature\r\n */\n\nvar three_js_PointOfInterestFeature_PointOfInterestFeature = /*#__PURE__*/function (_CorePointOfInterestF) {\n three_js_PointOfInterestFeature_inherits(PointOfInterestFeature, _CorePointOfInterestF);\n\n var _super = three_js_PointOfInterestFeature_createSuper(PointOfInterestFeature);\n\n function PointOfInterestFeature() {\n three_js_PointOfInterestFeature_classCallCheck(this, PointOfInterestFeature);\n\n return _super.apply(this, arguments);\n }\n\n three_js_PointOfInterestFeature_createClass(PointOfInterestFeature, [{\n key: "_validateTransformObject",\n value: function _validateTransformObject(obj) {\n return obj instanceof THREE.Object3D;\n }\n }, {\n key: "setTargetByName",\n value: function setTargetByName(name) {\n three_js_PointOfInterestFeature_get(three_js_PointOfInterestFeature_getPrototypeOf(PointOfInterestFeature.prototype), "setTargetByName", this).call(this, name);\n\n if (!name) {\n return;\n }\n\n this.target = this._scene.getObjectByName(name);\n }\n }, {\n key: "setTargetById",\n value: function setTargetById(id) {\n three_js_PointOfInterestFeature_get(three_js_PointOfInterestFeature_getPrototypeOf(PointOfInterestFeature.prototype), "setTargetByName", this).call(this, id);\n\n if (!id) {\n return;\n }\n\n this.target = this._scene.getObjectById(id);\n }\n }], [{\n key: "_getWorldPosition",\n value: function _getWorldPosition(obj) {\n obj.updateWorldMatrix(true, false);\n return obj.matrixWorld.elements.slice(12, 15);\n }\n }, {\n key: "_getWorldMatrix",\n value: function _getWorldMatrix(obj) {\n obj.updateWorldMatrix(true, false);\n return three_js_PointOfInterestFeature_toConsumableArray(obj.matrixWorld.elements);\n }\n }]);\n\n return PointOfInterestFeature;\n}(core_PointOfInterestFeature);\n\n/* harmony default export */ var three_js_PointOfInterestFeature = (three_js_PointOfInterestFeature_PointOfInterestFeature);\n\n// CONCATENATED MODULE: ./src/three.js/HostEnvironment.js\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n// eslint-disable-next-line import/prefer-default-export\nvar env = \'three\';\n// CONCATENATED MODULE: ./src/core/awspack/TextToSpeechUtils.js\nfunction TextToSpeechUtils_toConsumableArray(arr) { return TextToSpeechUtils_arrayWithoutHoles(arr) || TextToSpeechUtils_iterableToArray(arr) || TextToSpeechUtils_unsupportedIterableToArray(arr) || TextToSpeechUtils_nonIterableSpread(); }\n\nfunction TextToSpeechUtils_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."); }\n\nfunction TextToSpeechUtils_iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction TextToSpeechUtils_arrayWithoutHoles(arr) { if (Array.isArray(arr)) return TextToSpeechUtils_arrayLikeToArray(arr); }\n\nfunction TextToSpeechUtils_slicedToArray(arr, i) { return TextToSpeechUtils_arrayWithHoles(arr) || TextToSpeechUtils_iterableToArrayLimit(arr, i) || TextToSpeechUtils_unsupportedIterableToArray(arr, i) || TextToSpeechUtils_nonIterableRest(); }\n\nfunction TextToSpeechUtils_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."); }\n\nfunction TextToSpeechUtils_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return TextToSpeechUtils_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return TextToSpeechUtils_arrayLikeToArray(o, minLen); }\n\nfunction TextToSpeechUtils_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction TextToSpeechUtils_iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction TextToSpeechUtils_arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction TextToSpeechUtils_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { TextToSpeechUtils_typeof = function _typeof(obj) { return typeof obj; }; } else { TextToSpeechUtils_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return TextToSpeechUtils_typeof(obj); }\n\nfunction TextToSpeechUtils_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction TextToSpeechUtils_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction TextToSpeechUtils_createClass(Constructor, protoProps, staticProps) { if (protoProps) TextToSpeechUtils_defineProperties(Constructor.prototype, protoProps); if (staticProps) TextToSpeechUtils_defineProperties(Constructor, staticProps); return Constructor; }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/**\r\n * A collection of useful text-to-speech functions.\r\n *\r\n * @hideconstructor\r\n */\n\nvar TextToSpeechUtils_TextToSpeechUtils = /*#__PURE__*/function () {\n function TextToSpeechUtils() {\n TextToSpeechUtils_classCallCheck(this, TextToSpeechUtils);\n }\n\n TextToSpeechUtils_createClass(TextToSpeechUtils, null, [{\n key: "autoGenerateSSMLMarks",\n value:\n /**\r\n * Returns a new string with SSML marks inserted based on\r\n * matches between the input string and the input map. The\r\n * word matches are case-insensitive. Words within existing\r\n * SSML tags will not be affected. Input text will be surrounded\r\n * by tags if needed.\r\n *\r\n * @param {string} text - Input string.\r\n * @param {object} map - Input object that maps mark keys\r\n * to arrays of words. Example:\r\n *\r\n * {\r\n * \'mark:sad\' : [\'sad\', \'blue\', \'down\'],\r\n * \'mark:happy\' : [\'joy\', \'glad\', \'great\'],\r\n * \'mark:no\' : [\'no\', \'nah\', \'nay\', \'sure\']\r\n * }\r\n * @param {Array.} [randomMarks = []] - If there are sentences that don\'t\r\n * match any words from the map object, marks from this array will be randomly\r\n * chosen and inserted.\r\n *\r\n * @returns {string} - Updated input string.\r\n */\n function autoGenerateSSMLMarks(text, map) {\n var _this = this;\n\n var randomMarks = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];\n\n if (TextToSpeechUtils_typeof(map) !== \'object\' || map === null) {\n throw new Error("Cannot generate SSML marks for text \\"".concat(text, "\\" because map is not an object."));\n } // process the input map into an internal format\n\n\n var internalMap = this._processInputMap(map);\n\n var speakTags = [\'\', \'\'];\n var ssmlMarkRegex = //;\n var ssmlTagRegex = /<[^>]*>/g; // Identify any existing SSML tags\n\n var existingTags = [];\n var result = ssmlTagRegex.exec(text);\n\n while (result !== null) {\n existingTags.push({\n start: result.index,\n end: result.index + result[0].length,\n text: result[0]\n });\n result = ssmlTagRegex.exec(text);\n }\n\n var chunks = [];\n var index = 0;\n var ssmlMarkResult;\n var duplicateMarkToCheck = [];\n existingTags.forEach(function (existingTag) {\n var substr = text.slice(index, existingTag.start);\n\n if (substr !== \'\') {\n // auto-mark non-tag text\n chunks.push(_this._insertMarks(substr, internalMap, duplicateMarkToCheck));\n duplicateMarkToCheck = [];\n }\n\n ssmlMarkResult = ssmlMarkRegex.exec(existingTag.text);\n\n if (ssmlMarkResult !== null) {\n var markText = ssmlMarkResult[1];\n duplicateMarkToCheck.push(markText);\n } else if (!speakTags.includes(existingTag.text)) {\n chunks.push(existingTag.text);\n } // advance the index\n\n\n index = existingTag.end;\n });\n chunks.push(this._insertMarks(text.slice(index), internalMap, duplicateMarkToCheck));\n var markedText = chunks.join(\'\');\n\n if (randomMarks && randomMarks.length > 0) {\n // add random marks to any unmarked sentences\n markedText = this.addMarksToUnmarkedSentences(markedText, randomMarks);\n }\n\n return TextToSpeechUtils.validateText(markedText);\n }\n /**\r\n * Returns a new string with a random SSML mark inserted at each sentence that\r\n * does not already contain an SSML mark.\r\n *\r\n * @param {string} text - Input string.\r\n * @param {Array.} marks - Any array of random SSML marks to choose from\r\n * when modifying the text.\r\n *\r\n * @returns {string}\r\n */\n\n }, {\n key: "addMarksToUnmarkedSentences",\n value: function addMarksToUnmarkedSentences(text, marks) {\n if (!marks || marks.length === 0) return text;\n var ssmlMarkRegex = //g;\n var ssmlTagRegex = /<[^>]*>/g; // Find the indices of any marks in the text\n\n var markIndices = [];\n var markResult = ssmlMarkRegex.exec(text);\n\n while (markResult !== null) {\n markIndices.push(markResult.index);\n markResult = ssmlMarkRegex.exec(text);\n } // Find all SSML tags in the text\n\n\n var existingTags = [];\n var ssmlResult = ssmlTagRegex.exec(text);\n\n while (ssmlResult !== null) {\n existingTags.push({\n start: ssmlResult.index,\n end: ssmlResult.index + ssmlResult[0].length,\n text: ssmlResult[0]\n });\n ssmlResult = ssmlTagRegex.exec(text);\n } // Create a copy of the text with all SSML marks replaces with whitespace\n\n\n var cleanedText = text.slice();\n existingTags.forEach(function (existingSsml) {\n var whitespace = new Array(existingSsml.text.length + 1).join(\' \');\n cleanedText = [cleanedText.slice(0, existingSsml.start), whitespace, cleanedText.slice(existingSsml.end)].join(\'\');\n });\n\n var sentenceEndIndices = this._getSentenceEnds(cleanedText); // Only insert random marks into sentences that don\'t already have any\n\n\n var prevIndex = 0;\n var targetIndices = sentenceEndIndices.filter(function (index) {\n var containsMark = markIndices.findIndex(function (markIndex) {\n return prevIndex <= markIndex && index > markIndex;\n }) !== -1;\n prevIndex = index;\n return !containsMark;\n });\n\n var randomMarkedText = this._insertRandomMarksAt(text, targetIndices, marks);\n\n return randomMarkedText;\n }\n /**\r\n * Generate a version of given text that is enclosed by Polly ssml speak tags.\r\n *\r\n * @param {string} text - The text to validate.\r\n *\r\n * @returns {string} - Updated input string.\r\n */\n\n }, {\n key: "validateText",\n value: function validateText(text) {\n if (!text) {\n text = \'\';\n } else {\n text = text.replace(/(^\\s*<\\s*speak\\s*)>\\s*|(^\\s*)/, \'\').replace(/(\\s*<\\s*\\/\\s*speak\\s*>\\s*$|\\s*$)/, \'\');\n }\n\n return text;\n }\n /**\r\n * Parse an input string and insert SSML marks based on\r\n * word matches in a map.\r\n *\r\n * @private\r\n *\r\n * @param {string} text - Input string.\r\n * @param {Array.} [indices = []] - An array of indices in the text input\r\n * where random marks should be inserted.\r\n * @param {Array.} [marks = []] - An array of mark strings to choose\r\n * from when inserting random marks.\r\n *\r\n * @returns {string} - Updated input string.\r\n */\n\n }, {\n key: "_insertRandomMarksAt",\n value: function _insertRandomMarksAt(text) {\n var indices = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n var marks = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];\n\n if (!marks || marks.length === 0 || !indices || indices.length === 0) {\n return text;\n }\n\n var offset = 0;\n indices.forEach(function (index) {\n var randomMark = "");\n text = [text.slice(0, index + offset), randomMark, text.slice(index + offset)].join(\'\');\n offset += randomMark.length;\n });\n return text;\n }\n /**\r\n * Parses a string of text and returns an array containing the indices\r\n * of the last character in a sentence that is not in the following list:\r\n * (\'.\', \'?\', \'!\')\r\n *\r\n * @private\r\n *\r\n * @param {string} text - Text to process for end of sentence\r\n * indices.\r\n *\r\n * @returns {Array.} - Array of end of sentence indices.\r\n */\n\n }, {\n key: "_getSentenceEnds",\n value: function _getSentenceEnds(text) {\n var sentenceRegex = /[^.!?]+[.!?]+/g;\n var endSentenceRegex = /[.!?]+/;\n var result = sentenceRegex.exec(text);\n var sentenceEnds = [];\n\n while (result !== null) {\n // find the last non-punctuation character\n var punctResult = endSentenceRegex.exec(result[0]);\n sentenceEnds.push(result.index + result[0].length - punctResult[0].length);\n result = sentenceRegex.exec(text);\n }\n\n return sentenceEnds;\n }\n /**\r\n * Parse an input string and insert SSML marks based on\r\n * word matches in a map.\r\n *\r\n * @private\r\n *\r\n * @param {string} text - Input string.\r\n * @param {Map} map - Mapping of words to mark values that\r\n * will be inserted as the value for a mark\'s \'name\' attribute.\r\n * @param {Array} duplicatesToCheck - A list of mark values to check for duplicate against the first word\r\n *\r\n * @returns {string} - Updated input string.\r\n */\n\n }, {\n key: "_insertMarks",\n value: function _insertMarks(text, map, duplicatesToCheck) {\n if (text === \'\') return text;\n var wordRegex = /\\w+|\\s+|[^\\s\\w]+/g;\n var lowerCaseWord;\n var checkDuplicate = true;\n var markedWords = text.match(wordRegex).map(function (word) {\n lowerCaseWord = word.toLowerCase();\n\n if (map.has(lowerCaseWord)) {\n var marks = map.get(lowerCaseWord).map(function (mark) {\n if (checkDuplicate) {\n checkDuplicate = false;\n return duplicatesToCheck.includes(mark) ? \'\' : "");\n } else {\n return "");\n }\n });\n return "".concat(marks.join(\'\')).concat(word);\n } else {\n checkDuplicate = false;\n return word;\n }\n });\n var existingMarks = duplicatesToCheck.map(function (mark) {\n return "");\n });\n return "".concat(existingMarks.join(\'\')).concat(markedWords.join(\'\'));\n }\n /**\r\n * Processes an input object for mapping an array\r\n * of words to specific mark keys. Converts the input\r\n * map into a Map with a more efficient format for\r\n * performing mark injection.\r\n *\r\n * @private\r\n *\r\n * @param {object} map - Input object that maps mark keys\r\n * to arrays of words.\r\n *\r\n * @returns {Map} - Map for internal use.\r\n */\n\n }, {\n key: "_processInputMap",\n value: function _processInputMap(map) {\n var internalMap = new Map();\n var list = [];\n Object.entries(map).forEach(function (_ref) {\n var _ref2 = TextToSpeechUtils_slicedToArray(_ref, 2),\n key = _ref2[0],\n value = _ref2[1];\n\n if (!Array.isArray(value)) {\n throw new Error("Cannot generate SSML marks from map \\"".concat(map, "\\" because value for key \'").concat(key, "\' is not an array."));\n }\n\n value.forEach(function (word) {\n var lowerCaseWord = word.toLowerCase();\n list = internalMap.get(lowerCaseWord);\n\n if (list !== undefined && !list.includes(key)) {\n internalMap.set(lowerCaseWord, [].concat(TextToSpeechUtils_toConsumableArray(list), [key]));\n } else {\n internalMap.set(lowerCaseWord, [key]);\n }\n });\n });\n return internalMap;\n }\n }]);\n\n return TextToSpeechUtils;\n}();\n\n/* harmony default export */ var awspack_TextToSpeechUtils = (TextToSpeechUtils_TextToSpeechUtils);\n// CONCATENATED MODULE: ./src/core/awspack/AbstractSpeech.js\nfunction AbstractSpeech_toConsumableArray(arr) { return AbstractSpeech_arrayWithoutHoles(arr) || AbstractSpeech_iterableToArray(arr) || AbstractSpeech_unsupportedIterableToArray(arr) || AbstractSpeech_nonIterableSpread(); }\n\nfunction AbstractSpeech_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."); }\n\nfunction AbstractSpeech_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return AbstractSpeech_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return AbstractSpeech_arrayLikeToArray(o, minLen); }\n\nfunction AbstractSpeech_iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction AbstractSpeech_arrayWithoutHoles(arr) { if (Array.isArray(arr)) return AbstractSpeech_arrayLikeToArray(arr); }\n\nfunction AbstractSpeech_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction AbstractSpeech_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction AbstractSpeech_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction AbstractSpeech_createClass(Constructor, protoProps, staticProps) { if (protoProps) AbstractSpeech_defineProperties(Constructor.prototype, protoProps); if (staticProps) AbstractSpeech_defineProperties(Constructor, staticProps); return Constructor; }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/**\r\n * Class that can play back audio generated by AWS Polly and synchronized emit\r\n * speechmark messages.\r\n *\r\n * @abstract\r\n */\n\nvar AbstractSpeech_AbstractSpeech = /*#__PURE__*/function () {\n /**\r\n * @constructor\r\n *\r\n * @param {core/TextToSpeechFeature} speaker - The feature that owns the Speech and\r\n * will emit speechmark messages.\r\n * @param {string} text - The text of the speech.\r\n * @param {Array.} [speechmarks=[]] - An array of speechmark objects representing\r\n * the text and timing of the speech.\r\n */\n function AbstractSpeech(speaker, text) {\n var speechmarks = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];\n\n AbstractSpeech_classCallCheck(this, AbstractSpeech);\n\n this._speaker = speaker;\n this._text = text;\n this._speechmarks = speechmarks;\n this._speechmarkOffset = 0;\n\n this._reset();\n }\n /**\r\n * Reset tracking properties.\r\n *\r\n * @private\r\n *\r\n * @param {number} [currentTime=0] - Time to use for _startTime.\r\n */\n\n\n AbstractSpeech_createClass(AbstractSpeech, [{\n key: "_reset",\n value: function _reset() {\n var currentTime = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n this._startTime = currentTime;\n this._localTime = 0;\n this._pauseTime = 0;\n this._playing = false;\n this._markIter = this._speechmarks.values();\n\n var _this$_markIter$next = this._markIter.next(),\n value = _this$_markIter$next.value,\n done = _this$_markIter$next.done;\n\n this._currentMark = value;\n this._endTime = this._speechmarks.length ? this._speechmarks[this._speechmarks.length - 1].time : 0;\n this._done = done;\n this._promise = null;\n }\n /**\r\n * Create a new promise that will stop playback and emit messages for this speech.\r\n *\r\n * @param {Function=} onFinish - Funciton to execute once the speech stops.\r\n * @param {onError=} onError - Function to execute if the speech encounters an\r\n * error.\r\n * @param {Function=} onInterrupt - Function to execute if the speech is canceled.\r\n *\r\n * @returns {Deferred}\r\n *\r\n * @private\r\n */\n\n }, {\n key: "_createPromise",\n value: function _createPromise(onFinish, onError, onInterrupt) {\n var _this = this;\n\n var onResolve = function onResolve(value) {\n _this._playing = false;\n\n _this._speaker.emit(_this._speaker.constructor.EVENTS.stop, _this);\n\n _this._speaker.constructor.emit(_this._speaker.constructor.EVENTS.stop, _this);\n\n if (typeof onFinish === \'function\') {\n onFinish(value);\n }\n };\n\n var onReject = function onReject(e) {\n _this._playing = false;\n\n _this._speaker.emit(_this._speaker.constructor.EVENTS.stop, _this);\n\n _this._speaker.constructor.emit(_this._speaker.constructor.EVENTS.stop, _this);\n\n console.error("".concat(_this.constructor.name, " encountered an unexpected error: ").concat(e));\n\n if (typeof onError === \'function\') {\n onError(e);\n }\n };\n\n var onCancel = function onCancel(value) {\n _this._playing = false;\n\n _this._speaker.emit(_this._speaker.constructor.EVENTS.interrupt, _this);\n\n _this._speaker.constructor.emit(_this._speaker.constructor.EVENTS.interrupt, _this);\n\n if (typeof onInterrupt === \'function\') {\n onInterrupt(value);\n }\n };\n\n this._promise = new core_Deferred(undefined, onResolve, onReject, onCancel);\n return this._promise;\n }\n /**\r\n * Return whether or not the speech has reached it\'s end.\r\n *\r\n * @private\r\n *\r\n * @returns {boolean}\r\n */\n\n }, {\n key: "_checkFinished",\n value: function _checkFinished() {\n return this._done && this._localTime >= this._endTime;\n }\n /**\r\n * Gets the playback state of the audio.\r\n *\r\n * @readonly\r\n * @type {boolean}\r\n */\n\n }, {\n key: "playing",\n get: function get() {\n return this._playing;\n }\n /**\r\n * Gets the text of the speech.\r\n *\r\n * @readonly\r\n * @type {string}\r\n */\n\n }, {\n key: "text",\n get: function get() {\n return this._text;\n }\n /**\r\n * Gets a shallow copy of the speechmarks array for the speech.\r\n *\r\n * @readonly\r\n * @type {Array.}\r\n */\n\n }, {\n key: "speechmarks",\n get: function get() {\n return AbstractSpeech_toConsumableArray(this._speechmarks);\n }\n /**\r\n * Gets and sets the number of seconds to offset speechmark emission.\r\n * @type {number}\r\n */\n\n }, {\n key: "speechmarkOffset",\n get: function get() {\n return this._speechmarkOffset / 1000;\n },\n set: function set(offset) {\n this._speechmarkOffset = offset * 1000; // Store as milliseconds\n }\n /**\r\n * Emit speechmark messages as they are encountered in sync with audio.\r\n *\r\n * @param {number} currentTime - Current global time when update was called.\r\n */\n\n }, {\n key: "update",\n value: function update(currentTime) {\n if (!this._playing) {\n return;\n } // Update local audio time\n\n\n this._localTime = currentTime - this._startTime;\n\n if (!this._done) {\n // Emit speechmark messages for marks up to the current time\n while (!this._done && this._currentMark.time + this._speechmarkOffset <= this._localTime) {\n this._speaker.emit(this._speaker.constructor.EVENTS[this._currentMark.type], {\n speech: this,\n mark: this._currentMark\n });\n\n var _this$_markIter$next2 = this._markIter.next(),\n value = _this$_markIter$next2.value,\n done = _this$_markIter$next2.done;\n\n this._currentMark = value;\n this._done = done;\n }\n } // End playback\n\n\n if (this._checkFinished()) {\n this.stop();\n\n this._reset();\n }\n }\n /**\r\n * Play the speech from the beginning.\r\n *\r\n * @param {number} currentTime - Current global time when play was called.\r\n * @param {Function=} onFinish - Optional function to execute once the speech\r\n * promise resolves.\r\n * @param {Function=} onError - Optional function to execute if the speech\r\n * encounters and error during playback.\r\n * @param {Function=} onInterrupt - Optional function to execute if the speech\r\n * is canceled.\r\n *\r\n * @returns {Deferred} Resolves once the speech reaches the end of playback.\r\n */\n\n }, {\n key: "play",\n value: function play(currentTime, onFinish, onError, onInterrupt) {\n this._reset(currentTime);\n\n this._playing = true;\n\n this._speaker.emit(this._speaker.constructor.EVENTS.play, this);\n\n this._speaker.constructor.emit(this._speaker.constructor.EVENTS.play, this);\n\n return this._createPromise(onFinish, onError, onInterrupt);\n }\n /**\r\n * Pause the speech at the current time.\r\n *\r\n * @param {number} currentTime - Current global time when pause was called.\r\n */\n\n }, {\n key: "pause",\n value: function pause(currentTime) {\n this._playing = false;\n this._pauseTime = currentTime;\n\n this._speaker.emit(this._speaker.constructor.EVENTS.pause, this);\n\n this._speaker.constructor.emit(this._speaker.constructor.EVENTS.pause, this);\n }\n /**\r\n * Resume the speech at the current time.\r\n *\r\n * @param {number} currentTime - Current global time when resume was called.\r\n * @param {Function=} onFinish - Optional function to execute once the speech\r\n * promise resolves.\r\n * @param {Function=} onError - Optional function to execute if the speech\r\n * encounters and error during playback.\r\n * @param {Function=} onInterrupt - Optional function to execute if the speech\r\n * is canceled.\r\n *\r\n * @returns {Deferred} Resolves once the speech reaches the end of playback.\r\n */\n\n }, {\n key: "resume",\n value: function resume(currentTime, onFinish, onError, onInterrupt) {\n // Play from the beginning if the speech hasn\'t played yet\n if (!this._promise) {\n this._reset(currentTime);\n\n this._createPromise(onFinish, onError, onInterrupt);\n }\n\n this._playing = true;\n this._startTime += currentTime - this._pauseTime;\n\n this._speaker.emit(this._speaker.constructor.EVENTS.resume, this);\n\n this._speaker.constructor.emit(this._speaker.constructor.EVENTS.resume, this);\n\n return this._promise;\n }\n /**\r\n * Cancels playback of the speech at the current time. Cancel the speech promise.\r\n */\n\n }, {\n key: "cancel",\n value: function cancel() {\n if (this._promise) {\n this._promise.cancel();\n\n this._promise = null;\n }\n\n this._playing = false;\n }\n /**\r\n * Stop the speech and reset time to the beginning. Resolve the speech promise.\r\n */\n\n }, {\n key: "stop",\n value: function stop() {\n if (this._promise) {\n this._promise.resolve();\n\n this._promise = null;\n }\n\n this._playing = false;\n }\n }]);\n\n return AbstractSpeech;\n}();\n\n/* harmony default export */ var awspack_AbstractSpeech = (AbstractSpeech_AbstractSpeech);\n// CONCATENATED MODULE: ./src/core/awspack/Speech.js\nfunction Speech_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { Speech_typeof = function _typeof(obj) { return typeof obj; }; } else { Speech_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return Speech_typeof(obj); }\n\nfunction Speech_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction Speech_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction Speech_createClass(Constructor, protoProps, staticProps) { if (protoProps) Speech_defineProperties(Constructor.prototype, protoProps); if (staticProps) Speech_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction Speech_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { Speech_get = Reflect.get; } else { Speech_get = function _get(target, property, receiver) { var base = Speech_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return Speech_get(target, property, receiver || target); }\n\nfunction Speech_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = Speech_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction Speech_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) Speech_setPrototypeOf(subClass, superClass); }\n\nfunction Speech_setPrototypeOf(o, p) { Speech_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return Speech_setPrototypeOf(o, p); }\n\nfunction Speech_createSuper(Derived) { var hasNativeReflectConstruct = Speech_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = Speech_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = Speech_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return Speech_possibleConstructorReturn(this, result); }; }\n\nfunction Speech_possibleConstructorReturn(self, call) { if (call && (Speech_typeof(call) === "object" || typeof call === "function")) { return call; } return Speech_assertThisInitialized(self); }\n\nfunction Speech_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction Speech_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction Speech_getPrototypeOf(o) { Speech_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return Speech_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/**\r\n * The built-in class for asynchronous Promises.\r\n * @external Audio\r\n * @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLAudioElement/Audio\r\n */\n\n/**\r\n * @extends AbstractSpeech\r\n * @alias core/Speech\r\n */\n\nvar Speech = /*#__PURE__*/function (_AbstractSpeech) {\n Speech_inherits(Speech, _AbstractSpeech);\n\n var _super = Speech_createSuper(Speech);\n\n /**\r\n * @constructor\r\n *\r\n * @param {TextToSpeech} speaker - The owner of the Speech that will emit speechmark\r\n * messages.\r\n * @param {string} text - The text of the speech.\r\n * @param {Array.} [speechmarks=[]] - An array of speechmark objects representing\r\n * the text and timing of the speech.\r\n * @param {Object} audioConfig - Object containing audio and url.\r\n * @param {external:Audio} audioConfig.audio - Playable audio object.\r\n */\n function Speech(speaker, text) {\n var _this;\n\n var speechmarks = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];\n var audioConfig = arguments.length > 3 ? arguments[3] : undefined;\n\n Speech_classCallCheck(this, Speech);\n\n _this = _super.call(this, speaker, text, speechmarks);\n _this._audio = audioConfig.audio; // Keep track of whether the audio has finished playing through\n\n _this._audio.onended = function () {\n _this._audioFinished = true;\n };\n\n _this._audioFinished = true;\n return _this;\n }\n\n Speech_createClass(Speech, [{\n key: "_checkFinished",\n value: function _checkFinished() {\n return this._audioFinished && Speech_get(Speech_getPrototypeOf(Speech.prototype), "_checkFinished", this).call(this);\n }\n /**\r\n * Gets the playable audio for the speech.\r\n *\r\n * @readonly\r\n * @type {external:Audio}\r\n */\n\n }, {\n key: "audio",\n get: function get() {\n return this._audio;\n }\n /**\r\n * Gets the audio volume for the speech.\r\n *\r\n * @type {number}\r\n */\n\n }, {\n key: "volume",\n get: function get() {\n return this._audio.volume;\n }\n /**\r\n * Sets the audio volume for the speech.\r\n */\n ,\n set: function set(volume) {\n this._audio.volume = volume;\n }\n /**\r\n * Set the audio\'s current local time and play it.\r\n *\r\n * @private\r\n */\n\n }, {\n key: "_playAudio",\n value: function _playAudio() {\n var _this2 = this;\n\n if (this._speechmarkOffset < 0) {\n this._audio.currentTime = this._speechmarkOffset;\n setTimeout(function () {\n if (_this2._playing) {\n _this2._audio.currentTime = (_this2._localTime + _this2._speechmarkOffset) / 1000;\n\n _this2._audio.play();\n }\n }, -this._speechmarkOffset);\n } else {\n this._audio.currentTime = 0;\n\n this._audio.play();\n }\n }\n /**\r\n * Pause the audio once it is playable.\r\n *\r\n * @private\r\n */\n\n }, {\n key: "_pauseAudio",\n value: function _pauseAudio() {\n var _this3 = this;\n\n this._audio.play().then(function () {\n if (!_this3._playing) {\n _this3._audio.pause();\n }\n });\n }\n }, {\n key: "play",\n value: function play(currentTime, onFinish, onError, onInterrupt) {\n this._audioFinished = false;\n\n this._playAudio();\n\n return Speech_get(Speech_getPrototypeOf(Speech.prototype), "play", this).call(this, currentTime, onFinish, onError, onInterrupt);\n }\n }, {\n key: "pause",\n value: function pause(currentTime) {\n this._pauseAudio();\n\n Speech_get(Speech_getPrototypeOf(Speech.prototype), "pause", this).call(this, currentTime);\n }\n }, {\n key: "resume",\n value: function resume(currentTime, onFinish, onError, onInterrupt) {\n this._audioFinished = false;\n\n this._audio.play();\n\n return Speech_get(Speech_getPrototypeOf(Speech.prototype), "resume", this).call(this, currentTime, onFinish, onError, onInterrupt);\n }\n }, {\n key: "cancel",\n value: function cancel() {\n this._pauseAudio();\n\n Speech_get(Speech_getPrototypeOf(Speech.prototype), "cancel", this).call(this);\n }\n }, {\n key: "stop",\n value: function stop() {\n this._pauseAudio();\n\n this._audio.currentTime = 0;\n\n Speech_get(Speech_getPrototypeOf(Speech.prototype), "stop", this).call(this);\n }\n }]);\n\n return Speech;\n}(awspack_AbstractSpeech);\n\n/* harmony default export */ var awspack_Speech = (Speech);\n// CONCATENATED MODULE: ./src/three.js/awspack/Speech.js\nfunction awspack_Speech_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { awspack_Speech_typeof = function _typeof(obj) { return typeof obj; }; } else { awspack_Speech_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return awspack_Speech_typeof(obj); }\n\nfunction awspack_Speech_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction awspack_Speech_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction awspack_Speech_createClass(Constructor, protoProps, staticProps) { if (protoProps) awspack_Speech_defineProperties(Constructor.prototype, protoProps); if (staticProps) awspack_Speech_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction awspack_Speech_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { awspack_Speech_get = Reflect.get; } else { awspack_Speech_get = function _get(target, property, receiver) { var base = awspack_Speech_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return awspack_Speech_get(target, property, receiver || target); }\n\nfunction awspack_Speech_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = awspack_Speech_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction awspack_Speech_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) awspack_Speech_setPrototypeOf(subClass, superClass); }\n\nfunction awspack_Speech_setPrototypeOf(o, p) { awspack_Speech_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return awspack_Speech_setPrototypeOf(o, p); }\n\nfunction awspack_Speech_createSuper(Derived) { var hasNativeReflectConstruct = awspack_Speech_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = awspack_Speech_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = awspack_Speech_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return awspack_Speech_possibleConstructorReturn(this, result); }; }\n\nfunction awspack_Speech_possibleConstructorReturn(self, call) { if (call && (awspack_Speech_typeof(call) === "object" || typeof call === "function")) { return call; } return awspack_Speech_assertThisInitialized(self); }\n\nfunction awspack_Speech_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction awspack_Speech_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction awspack_Speech_getPrototypeOf(o) { awspack_Speech_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return awspack_Speech_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/**\r\n * Threejs Audio object\r\n * @external "THREE.Audio"\r\n * @see https://threejs.org/docs/#api/en/audio/Audio\r\n */\n\n/**\r\n * Threejs PositionalAudio object\r\n * @external "THREE.PositionalAudio"\r\n * @see https://threejs.org/docs/#api/en/audio/PositionalAudio\r\n */\n\n/**\r\n * @extends core/Speech\r\n * @alias three.js/Speech\r\n */\n\nvar Speech_Speech = /*#__PURE__*/function (_CoreSpeech) {\n awspack_Speech_inherits(Speech, _CoreSpeech);\n\n var _super = awspack_Speech_createSuper(Speech);\n\n /**\r\n * @constructor\r\n *\r\n * @param {three.js/TextToSpeechFeature} speaker - The owner of the Speech that\r\n * will emit speechmark messages.\r\n * @param {string} text - The text of the speech.\r\n * @param {Array.} speechmarks - An array of speechmark objects representing\r\n * the text and timing of the speech.\r\n * @param {Object} audioConfig - Object containing audio and url.\r\n * @param {external:Audio} audioConfig.audio - Playable audio object.\r\n * @param {(external:"THREE.Audio"|external:"THREE.PositionalAudio")} audioConfig.threeAudio -\r\n * Three.js audio object.\r\n */\n function Speech(textToSpeech, text) {\n var _this;\n\n var speechmarks = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];\n var audioConfig = arguments.length > 3 ? arguments[3] : undefined;\n\n awspack_Speech_classCallCheck(this, Speech);\n\n _this = _super.call(this, textToSpeech, text, speechmarks, audioConfig);\n _this._threeAudio = audioConfig.threeAudio;\n return _this;\n }\n /**\r\n * Gets the Three.js audio object for the speech.\r\n *\r\n * @readonly\r\n * @type {(external:"THREE.Audio"|external:"THREE.PositionalAudio")}\r\n */\n\n\n awspack_Speech_createClass(Speech, [{\n key: "audio",\n get: function get() {\n return this._threeAudio;\n }\n }, {\n key: "_pauseAudio",\n value: function _pauseAudio() {\n this._audio.pause();\n }\n }, {\n key: "play",\n value: function play(currentTime, onFinish, onError, onInterrupt) {\n // Re-connect the Audio element to stop playback\n this._threeAudio.disconnect();\n\n this._threeAudio.connect();\n\n return awspack_Speech_get(awspack_Speech_getPrototypeOf(Speech.prototype), "play", this).call(this, currentTime, onFinish, onError, onInterrupt);\n }\n }]);\n\n return Speech;\n}(awspack_Speech);\n\n/* harmony default export */ var three_js_awspack_Speech = (Speech_Speech);\n// CONCATENATED MODULE: ./src/core/awspack/AbstractTextToSpeechFeature.js\nfunction AbstractTextToSpeechFeature_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { AbstractTextToSpeechFeature_typeof = function _typeof(obj) { return typeof obj; }; } else { AbstractTextToSpeechFeature_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return AbstractTextToSpeechFeature_typeof(obj); }\n\nfunction AbstractTextToSpeechFeature_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction AbstractTextToSpeechFeature_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { AbstractTextToSpeechFeature_ownKeys(Object(source), true).forEach(function (key) { AbstractTextToSpeechFeature_defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { AbstractTextToSpeechFeature_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction AbstractTextToSpeechFeature_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction AbstractTextToSpeechFeature_slicedToArray(arr, i) { return AbstractTextToSpeechFeature_arrayWithHoles(arr) || AbstractTextToSpeechFeature_iterableToArrayLimit(arr, i) || AbstractTextToSpeechFeature_unsupportedIterableToArray(arr, i) || AbstractTextToSpeechFeature_nonIterableRest(); }\n\nfunction AbstractTextToSpeechFeature_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."); }\n\nfunction AbstractTextToSpeechFeature_iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction AbstractTextToSpeechFeature_arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction AbstractTextToSpeechFeature_toConsumableArray(arr) { return AbstractTextToSpeechFeature_arrayWithoutHoles(arr) || AbstractTextToSpeechFeature_iterableToArray(arr) || AbstractTextToSpeechFeature_unsupportedIterableToArray(arr) || AbstractTextToSpeechFeature_nonIterableSpread(); }\n\nfunction AbstractTextToSpeechFeature_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."); }\n\nfunction AbstractTextToSpeechFeature_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return AbstractTextToSpeechFeature_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return AbstractTextToSpeechFeature_arrayLikeToArray(o, minLen); }\n\nfunction AbstractTextToSpeechFeature_iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction AbstractTextToSpeechFeature_arrayWithoutHoles(arr) { if (Array.isArray(arr)) return AbstractTextToSpeechFeature_arrayLikeToArray(arr); }\n\nfunction AbstractTextToSpeechFeature_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction AbstractTextToSpeechFeature_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction AbstractTextToSpeechFeature_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction AbstractTextToSpeechFeature_createClass(Constructor, protoProps, staticProps) { if (protoProps) AbstractTextToSpeechFeature_defineProperties(Constructor.prototype, protoProps); if (staticProps) AbstractTextToSpeechFeature_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction AbstractTextToSpeechFeature_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { AbstractTextToSpeechFeature_get = Reflect.get; } else { AbstractTextToSpeechFeature_get = function _get(target, property, receiver) { var base = AbstractTextToSpeechFeature_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return AbstractTextToSpeechFeature_get(target, property, receiver || target); }\n\nfunction AbstractTextToSpeechFeature_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = AbstractTextToSpeechFeature_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction AbstractTextToSpeechFeature_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) AbstractTextToSpeechFeature_setPrototypeOf(subClass, superClass); }\n\nfunction AbstractTextToSpeechFeature_setPrototypeOf(o, p) { AbstractTextToSpeechFeature_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return AbstractTextToSpeechFeature_setPrototypeOf(o, p); }\n\nfunction AbstractTextToSpeechFeature_createSuper(Derived) { var hasNativeReflectConstruct = AbstractTextToSpeechFeature_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = AbstractTextToSpeechFeature_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = AbstractTextToSpeechFeature_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return AbstractTextToSpeechFeature_possibleConstructorReturn(this, result); }; }\n\nfunction AbstractTextToSpeechFeature_possibleConstructorReturn(self, call) { if (call && (AbstractTextToSpeechFeature_typeof(call) === "object" || typeof call === "function")) { return call; } return AbstractTextToSpeechFeature_assertThisInitialized(self); }\n\nfunction AbstractTextToSpeechFeature_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction AbstractTextToSpeechFeature_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction AbstractTextToSpeechFeature_getPrototypeOf(o) { AbstractTextToSpeechFeature_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return AbstractTextToSpeechFeature_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n\n\n\n/**\r\n * The Amazon Polly service object.\r\n * @external Polly\r\n * @see https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Polly.html\r\n */\n\n/**\r\n * The presigner object that can be used to generate presigned urls for the Polly service.\r\n * @external Presigner\r\n * @see https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Polly/Presigner.html\r\n */\n// Available options for Polly\n\nvar engines = [\'standard\', \'neural\'];\nvar audioFormats = [\'mp3\', \'ogg_vorbis\', \'pcm\'];\nvar speechmarkTypes = [\'sentence\', \'ssml\', \'viseme\', \'word\'];\nvar sampleRates = {\n mp3: {\n rates: [\'8000\', \'16000\', \'22050\', \'24000\'],\n defaults: {\n standard: \'2050\',\n neural: \'2400\'\n }\n },\n pcm: {\n rates: [\'8000\', \'16000\'],\n defaults: {\n standard: \'1600\',\n neural: \'1600\'\n }\n }\n};\nsampleRates.ogg_vorbis = sampleRates.mp3;\nvar awsVersion;\n/**\r\n * Base class for turning text input into playable audio. There should be one instance\r\n * per speaker, each instance can play only one piece of text at a time.\r\n *\r\n * @extends AbstractHostFeature\r\n * @abstract\r\n *\r\n * @property {(number|undefined)} AWS_VERSION - Gets the version of AWS SDK being\r\n * used. Will be undefined until [initializeService]{@link AbstractTextToSpeechFeature.initializeService}\r\n * has been successfully executed.\r\n * @property {string} [POLLY_MIN_NEURAL_VERSION=\'2.503\'] - Gets the minimum version\r\n * of the AWS SDK that is necessary to use neural voices with AWS Polly.\r\n * @property {Object} POLLY_DEFAULTS - Default values to use with calls to {@link external:Polly}.\r\n * @property {string} [POLLY_DEFAULTS.Engine=\'standard\']\r\n * @property {Array.} [POLLY_DEFAULTS.LexiconNames=[]]\r\n * @property {string} [POLLY_DEFAULTS.OutputFormat=\'mp3\']\r\n * @property {string} [POLLY_DEFAULTS.SampleRate=\'22050\']\r\n * @property {string} [POLLY_DEFAULTS.Text=\'\']\r\n * @property {string} [POLLY_DEFAULTS.TextType=\'ssml\']\r\n * @property {string} [POLLY_DEFAULTS.VoiceId=\'Amy\']\r\n * @property {string} [POLLY_DEFAULTS.LanguageCode=\'en-GB\']\r\n * @property {string} [POLLY_DEFAULTS.LanguageName=\'British English\']\r\n * @property {Array.} [POLLY_VOICES=[]] - An array of voices available in\r\n * Polly. Will be empty until [initializeService]{@link AbstractTextToSpeechFeature.initializeService}\r\n * has been successfully executed. See [Polly Documentation]{@link https://docs.aws.amazon.com/polly/latest/dg/voicelist.html}\r\n * for a full list of available voices.\r\n * @property {Object} [POLLY_LANGUAGES={}] - An object that maps language names\r\n * to language codes that are available in Polly. Will be empty until\r\n * [initializeService]{@link AbstractTextToSpeechFeature.initializeService}\r\n * has been successfully executed. See [Polly Documentation]{@link https://docs.aws.amazon.com/polly/latest/dg/SupportedLanguage.html}\r\n * for a full list of available languages and corresponding codes.\r\n * @property {Object} [POLLY_LANGUAGE_CODES={}] - An object that maps language codes\r\n * to language names that are available in Polly. Will be empty until\r\n * [initializeService]{@link AbstractTextToSpeechFeature.initializeService}\r\n * has been successfully executed. See [Polly Documentation]{@link https://docs.aws.amazon.com/polly/latest/dg/SupportedLanguage.html}\r\n * for a full list of available languages and corresponding codes.\r\n * @property {Object} EVENTS - Built-in messages that the feature emits. When the\r\n * feature is added to a {@link core/HostObject}, event names will be prefixed by the\r\n * name of the feature class + \'.\'.\r\n * @property {string} [EVENTS.ready=onReadyEvent] - Message that is emitted after\r\n * [initializeService]{@link AbstractTextToSpeechFeature.initializeService} has been\r\n * successfully executed.\r\n * @property {string} [EVENTS.play=onPlayEvent] - Message that is emitted after\r\n * each call to [play]{@link AbstractTextToSpeechFeature#play}. The speech that was played\r\n * is supplied as an argument to listener functions.\r\n * @property {string} [EVENTS.pause=onPauseEvent] - Message that is emitted after\r\n * each call to [pause]{@link AbstractTextToSpeechFeature#pause}. The speech that was paused\r\n * is supplied as an argument to listener functions.\r\n * @property {string} [EVENTS.resume=onResumeEvent] - Message that is emitted after\r\n * each call to [resume]{@link AbstractTextToSpeechFeature#resume}. The speech that was\r\n * resumed is supplied as an argument to listener functions.\r\n * @property {string} [EVENTS.interrupt=onInterruptEvent] - Message that is emitted\r\n * if there is a current speech in progress and [play]{@link AbstractTextToSpeechFeature#play}\r\n * or [resume]{@link AbstractTextToSpeechFeature#resume} are executed for a new speech.\r\n * The speech that was interrupted is supplied as an argument to listener functions.\r\n * @property {string} [EVENTS.stop=onStopEvent] - Message that is emitted after\r\n * each call to [stop]{@link AbstractTextToSpeechFeature#stop} and when a speech reaches\r\n * the end of playback. The speech that was stopped is supplied as an argument\r\n * to listener functions.\r\n * @property {string} [EVENTS.sentence=onSentenceEvent] - Message that is emitted\r\n * each time a sentence speechmark is encountered whose timestamp matches up with\r\n * the speech audio\'s current time. The sentence speechmark object is supplied as\r\n * an argument to listener functions.\r\n * @property {string} [EVENTS.word=onWordEvent] - Message that is emitted\r\n * each time a word speechmark is encountered whose timestamp matches up with\r\n * the speech audio\'s current time. The word speechmark object is supplied as\r\n * an argument to listener functions.\r\n * @property {string} [EVENTS.viseme=onVisemeEvent] - Message that is emitted\r\n * each time a viseme speechmark is encountered whose timestamp matches up with\r\n * the speech audio\'s current time. The viseme speechmark object is supplied as\r\n * an argument to listener functions.\r\n * @property {string} [EVENTS.ssml=onSsmlEvent] - Message that is emitted\r\n * each time a ssml speechmark is encountered whose timestamp matches up with\r\n * the speech audio\'s current time. The ssml speechmark object is supplied as\r\n * an argument to listener functions.\r\n * @property {Object} SERVICES - AWS services that are necessary for the feature\r\n * to function.\r\n * @property {external:Polly} SERVICES.polly - The Polly service that is used\r\n * to synthesize speechmarks. Will be undefined until [initializeService]{@link AbstractTextToSpeechFeature.initializeService}\r\n * has been successfully executed\r\n * @property {external:Presigner} SERVICES.presigner - The Polly Presigner\r\n * object that is used to synthesize speech audio. Will be undefined until\r\n * [initializeService]{@link AbstractTextToSpeechFeature.initializeService}\r\n * has been successfully executed.\r\n */\n\nvar AbstractTextToSpeechFeature_AbstractTextToSpeechFeature = /*#__PURE__*/function (_AbstractHostFeature) {\n AbstractTextToSpeechFeature_inherits(AbstractTextToSpeechFeature, _AbstractHostFeature);\n\n var _super = AbstractTextToSpeechFeature_createSuper(AbstractTextToSpeechFeature);\n\n /**\r\n * @constructor\r\n *\r\n * @param {core/HostObject} host - Host object managing the feature.\r\n * @param {Object=} options - Options that will be sent to Polly for each speech.\r\n * @param {string=} options.voice - The name of the Polly voice to use for all speech.\r\n * @param {string=} options.engine - The name of the Polly engine to use for all speech.\r\n * @param {string=} options.language - The name of the language to use for all speech.\r\n * @param {audioFormat} [options.audioFormat=\'mp3\'] - The format to use for generated\r\n * audio for all speeches.\r\n * @param {string=} options.sampleRate - The sample rate for audio files for all\r\n * speeches.\r\n * @param {number} [options.speechmarkOffset=0] - Amount of time in seconds to\r\n * offset speechmark event emission from the audio.\r\n * @param {number} [options.minEndMarkDuration=.05] - The minimum amount of time\r\n * in seconds that the last speechmark of each type in a speech can have its\r\n * duration property set to.\r\n * @param {number} [options.volume=1] - The default volume to play speech audio\r\n * with.\r\n * @param {boolean} [options.isGlobal=false] - Whether the audio source should default\r\n * to global regardless of whether or not it is attached to an object.\r\n */\n function AbstractTextToSpeechFeature(host) {\n var _this;\n\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n voice: undefined,\n engine: undefined,\n language: undefined,\n audioFormat: \'mp3\',\n sampleRate: undefined,\n speechmarkOffset: 0,\n minEndMarkDuration: 0.05,\n volume: 1,\n isGlobal: false\n };\n\n AbstractTextToSpeechFeature_classCallCheck(this, AbstractTextToSpeechFeature);\n\n _this = _super.call(this, host);\n _this._speechCache = {};\n _this._currentSpeech = null;\n _this._currentPromise = null;\n _this._isValidated = false;\n _this.speechmarkOffset = Number.isNaN(Number(options.speechmarkOffset)) ? 0 : Number(options.speechmarkOffset);\n _this.minEndMarkDuration = Number.isNaN(Number(options.minEndMarkDuration)) ? 0 : Number(options.minEndMarkDuration);\n _this.volume = Number.isNaN(Number(options.volume)) ? 1 : Number(options.volume);\n _this._isGlobal = options.isGlobal || false;\n _this._promises = {\n volume: core_Deferred.resolve()\n };\n _this._volumePaused = false; // Set default options for each speech\n\n _this._voice = options.voice || _this.constructor.POLLY_DEFAULTS.VoiceId;\n _this._language = options.language || _this.constructor.POLLY_DEFAULTS.LanguageName;\n _this._engine = engines.includes(options.engine) ? options.engine : _this.constructor.POLLY_DEFAULTS.Engine;\n _this._audioFormat = audioFormats.includes(options.audioFormat) ? options.audioFormat : _this.constructor.POLLY_DEFAULTS.OutputFormat;\n _this._sampleRate = sampleRates[_this._audioFormat].rates.includes(options.sampleRate) ? options.sampleRate : _this.constructor.POLLY_DEFAULTS.SampleRate;\n return _this;\n }\n /**\r\n * Store Polly, Presigner and AWS SDK Version for use across all instances.\r\n *\r\n * @param {external:Polly} polly - Polly instance to use to generate speechmarks.\r\n * @param {external:Presigner} presigner - Presigner instance to use to generate\r\n * audio URLs.\r\n * @param {string} version - Version of the AWS SDK to use to validate voice options.\r\n */\n\n\n AbstractTextToSpeechFeature_createClass(AbstractTextToSpeechFeature, [{\n key: "currentSpeech",\n get:\n /**\r\n * Gets the text of the currently playing speech.\r\n *\r\n * @readonly\r\n * @type {string}\r\n */\n function get() {\n if (this._currentSpeech) {\n return this._currentSpeech.text;\n } else {\n return null;\n }\n }\n /**\r\n * Gets and sets the number of seconds to offset speechmark emission.\r\n *\r\n * @type {number}\r\n */\n\n }, {\n key: "speechmarkOffset",\n get: function get() {\n return this._speechmarkOffset;\n },\n set: function set(offset) {\n this._speechmarkOffset = offset;\n\n if (this._currentSpeech) {\n this._currentSpeech.speechmarkOffset = offset;\n }\n }\n /**\r\n * Gets and sets the The minimum amount of time in seconds that the last\r\n * speechmark of each type in a speech can have its duration property set to.\r\n *\r\n * @type number\r\n */\n\n }, {\n key: "minEndMarkDuration",\n get: function get() {\n return this._minEndMarkDuration / 1000;\n },\n set: function set(duration) {\n this._minEndMarkDuration = duration * 1000;\n }\n /**\r\n * Appends the Sumerian Hosts custom user-agent to a string if it is not\r\n * already present.\r\n *\r\n * @private\r\n *\r\n * @param {string} currentUserAgent - String to append to if needed.\r\n *\r\n * @returns {string}\r\n */\n\n }, {\n key: "_validateEngine",\n value:\n /**\r\n * Checks if a given engine type is compatible with the AWS SDK version. If it\r\n * is, return the original value. Otherwise return a default.\r\n *\r\n * @private\r\n *\r\n * @param {string} engine - The type of Polly voice engine to validate.\r\n *\r\n * @returns {string}\r\n */\n function _validateEngine(engine) {\n // Default to the standard engine if neural is not available for this version\n if (engine === undefined || this.constructor.AWS_VERSION < this.constructor.POLLY_MIN_NEURAL_VERSION) {\n engine = this.constructor.POLLY_DEFAULTS.Engine;\n }\n\n return engine;\n }\n /**\r\n * Checks if a given audio format type is compatible with Polly. If it is, return\r\n * the original value. Otherwise return a default.\r\n *\r\n * @private\r\n *\r\n * @param {string} engine - The type of Polly voice engine to validate.\r\n *\r\n * @returns {string}\r\n */\n\n }, {\n key: "_validateFormat",\n value: function _validateFormat(format) {\n if (format === undefined || !audioFormats.includes(format)) {\n format = this.constructor.POLLY_DEFAULTS.OutputFormat;\n }\n\n return format;\n }\n /**\r\n * Checks if a given audio sampling rate is compatible with the current audio\r\n * format. If it is, return the original value. Otherwise return a default.\r\n *\r\n * @private\r\n *\r\n * @param {string} engine - The type of Polly voice engine to validate.\r\n *\r\n * @returns {string}\r\n */\n\n }, {\n key: "_validateRate",\n value: function _validateRate(rate) {\n // Use default if specified sample rate is not valid for the audio format\n if (rate === undefined || !sampleRates[this._audioFormat].rates.includes(rate)) {\n rate = sampleRates[this._audioFormat].defaults[this._engine];\n }\n\n return rate;\n }\n /**\r\n * Checks if a given Polly voice id is compatible with the current Polly engine.\r\n * If it is, return the original value. Otherwise return a default.\r\n *\r\n * @private\r\n *\r\n * @param {string} engine - The type of Polly voice engine to validate.\r\n *\r\n * @returns {string}\r\n */\n\n }, {\n key: "_validateVoice",\n value: function _validateVoice(voiceId) {\n var voice = this.constructor.POLLY_VOICES.find(function (v) {\n return v.Id === voiceId;\n }); // Use the default voice if the voice isn\'t supported by the engine\n\n if (voice === undefined || !voice.SupportedEngines.includes(this._engine)) {\n voiceId = this.constructor.POLLY_DEFAULTS.VoiceId;\n }\n\n return voiceId;\n }\n /**\r\n * Checks if a given Polly language is compatible with the current Polly voice.\r\n * If it is, return the original value. Otherwise return a default.\r\n *\r\n * @private\r\n *\r\n * @param {string} engine - The type of Polly voice engine to validate.\r\n *\r\n * @returns {string}\r\n */\n\n }, {\n key: "_validateLanguage",\n value: function _validateLanguage(language) {\n var _this2 = this;\n\n var voice = this.constructor.POLLY_VOICES.find(function (v) {\n return v.Id === _this2._voice;\n });\n var languageCode = this.constructor.POLLY_LANGUAGES[language]; // Find the languages available for the current voice\n\n var availableCodes = [voice.LanguageCode];\n\n if (voice.AdditionalLanguageCodes) {\n availableCodes.push.apply(availableCodes, AbstractTextToSpeechFeature_toConsumableArray(voice.AdditionalLanguageCodes));\n } // If the current voice doesn\'t support the language, use its default\n\n\n if (!availableCodes.includes(languageCode)) {\n language = this.constructor.POLLY_LANGUAGE_CODES[voice.LanguageCode];\n }\n\n return language;\n }\n /**\r\n * Validate the current Polly options to make sure they are compatible with each\r\n * other.\r\n *\r\n * @private\r\n */\n\n }, {\n key: "_validate",\n value: function _validate() {\n // Validate speech parameters\n this._engine = this._validateEngine(this._engine);\n this._audioFormat = this._validateFormat(this._audioFormat);\n this._sampleRate = this._validateRate(this._sampleRate);\n this._voice = this._validateVoice(this._voice);\n this._language = this._validateLanguage(this._language);\n this._isValidated = true;\n }\n /**\r\n * Return an object containing parameters compatible with Polly.synthesizeSpeech.\r\n *\r\n * @private\r\n *\r\n * @returns {Object}\r\n */\n\n }, {\n key: "_getConfig",\n value: function _getConfig() {\n // Make sure parameters have been validated\n if (this.constructor.isReady && !this._isValidated) {\n this._validate();\n } // Create a config object compatible with Polly\n\n\n return {\n Engine: this._engine,\n OutputFormat: this._audioFormat,\n SampleRate: this._sampleRate,\n VoiceId: this._voice,\n LanguageCode: this.constructor.POLLY_LANGUAGES[this._language]\n };\n }\n /**\r\n * Update Polly parameters with options from a given config. All stored speeches\r\n * will be updated to use the new parameters, unless the speech text is contained\r\n * in the \'skipSpeeches\' parameter.\r\n *\r\n * @private\r\n *\r\n * @param {Object} config - Polly parameter options to overwrite.\r\n * @param {Array.} skipSpeeches - Text of any speeches that should not\r\n * have parameters updated.\r\n *\r\n * @returns {Object}\r\n */\n\n }, {\n key: "_updateConfig",\n value: function _updateConfig(config) {\n var _this3 = this;\n\n var skipSpeeches = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n\n var currentConfig = this._getConfig();\n\n if (!config) {\n return currentConfig;\n }\n\n this._isValidated = false;\n var currentConfigStr = JSON.stringify(currentConfig); // Update options\n\n if (config.Engine) {\n this._engine = config.Engine;\n }\n\n if (config.audioFormat) {\n this._audioFormat = config.audioFormat;\n }\n\n if (config.SampleRate) {\n this._sampleRate = config.SampleRate;\n }\n\n if (config.VoiceId) {\n this._voice = config.VoiceId;\n }\n\n if (config.Language) {\n this._language = config.Language;\n } // Validate the config\n\n\n var validConfig = this._getConfig(); // Exit if nothing has changed\n\n\n var configStr = JSON.stringify(validConfig);\n\n if (currentConfigStr === configStr) {\n this._isValidated = true;\n return validConfig;\n } // Update all cached configs\n\n\n Object.entries(this._speechCache).forEach(function (_ref) {\n var _ref2 = AbstractTextToSpeechFeature_slicedToArray(_ref, 2),\n text = _ref2[0],\n speech = _ref2[1];\n\n // Check if this is a skipped speech\n if (skipSpeeches.includes(text)) {\n return;\n }\n\n var speechConfigStr = JSON.stringify(speech.config); // Update the speech with new parameters\n\n if (speechConfigStr !== configStr) {\n _this3._updateSpeech(text, validConfig);\n }\n });\n return validConfig;\n }\n /**\r\n * Update an existing speech, or add a new speech with new Polly parameters with\r\n * options from a given config.\r\n *\r\n * @private\r\n *\r\n * @param {string} text - The text of the speech to update.\r\n * @param {Object} config - Polly parameter options to update.\r\n * @param {boolean} [force=false] - Whether to force the speech to be updated\r\n * if no parameters have changes.\r\n *\r\n * @returns {AbstractSpeech}\r\n */\n\n }, {\n key: "_updateSpeech",\n value: function _updateSpeech(text, config) {\n var _this4 = this;\n\n var force = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n var speech = this._speechCache[text] || {}; // Exit if nothing has changed and force is false\n\n if (!force && config !== undefined && speech.config && JSON.stringify(config) === JSON.stringify(speech.config)) {\n return speech;\n } // Create separate parameters for audio and speechmark generation\n\n\n var audioParams = AbstractTextToSpeechFeature_objectSpread(AbstractTextToSpeechFeature_objectSpread({}, config), {}, {\n Text: text,\n TextType: \'ssml\'\n });\n\n var speechmarkParams = AbstractTextToSpeechFeature_objectSpread(AbstractTextToSpeechFeature_objectSpread({}, audioParams), {}, {\n OutputFormat: \'json\',\n SpeechMarkTypes: speechmarkTypes\n }); // Generate audio and speechmarks\n\n\n speech.config = config;\n speech.promise = Promise.all([this._synthesizeSpeechmarks(speechmarkParams), this._synthesizeAudio(audioParams)]).then(function (results) {\n return _this4._createSpeech.apply(_this4, [text].concat(AbstractTextToSpeechFeature_toConsumableArray(results)));\n });\n this._speechCache[text] = speech;\n return speech;\n }\n /**\r\n * Create a new Speech object for the speaker.\r\n *\r\n * @private\r\n *\r\n * @param {TextToSpeech} speaker - The TextToSpeech instance that will own the speech.\r\n * @param {string} text - Text of the speech.\r\n * @param {Object} speechmarks - Speechmarks for the speech.\r\n * @param {Object} audioConfig - Audio for the speech.\r\n *\r\n * @returns {AbstractSpeech}\r\n */\n\n }, {\n key: "_createSpeech",\n value: function _createSpeech(text, speechmarks, audioConfig) {\n return new awspack_AbstractSpeech(this, text, speechmarks, audioConfig);\n }\n /**\r\n * Create presigned URL of speech audio for the given speech text.\r\n *\r\n * @private\r\n *\r\n * @param {Object} params - Parameters object compatible with Polly.synthesizeSpeech.\r\n *\r\n * @returns {Deferred} Resolves with an object containing the audio URL.\r\n */\n\n }, {\n key: "_synthesizeAudio",\n value: function _synthesizeAudio(params) {\n var _this5 = this;\n\n return new core_Deferred(function (resolve, reject) {\n _this5.constructor.SERVICES.presigner.getSynthesizeSpeechUrl(params, function (error, url) {\n if (!error) {\n resolve({\n url: url\n });\n } else {\n reject(error);\n }\n });\n });\n }\n /**\r\n * Retrieves and parses speechmarks for the given speech text.\r\n *\r\n * @private\r\n *\r\n * @param {Object} params - Parameters object compatible with Polly.synthesizeSpeech.\r\n *\r\n * @returns {Deferred} Resolves with an array of speechmark objects\r\n */\n\n }, {\n key: "_synthesizeSpeechmarks",\n value: function _synthesizeSpeechmarks(params) {\n var _this6 = this;\n\n return this.constructor.SERVICES.polly.synthesizeSpeech(params).promise().then(function (result) {\n // Convert charcodes to string\n var jsonString = JSON.stringify(result.AudioStream);\n var json = JSON.parse(jsonString);\n var dataStr = json.data.map(function (c) {\n return String.fromCharCode(c);\n }).join(\'\');\n var markTypes = {\n sentence: [],\n word: [],\n viseme: [],\n ssml: []\n };\n var endMarkTypes = {\n sentence: null,\n word: null,\n viseme: null,\n ssml: null\n }; // Split by enclosing {} to create speechmark objects\n\n var speechMarks = AbstractTextToSpeechFeature_toConsumableArray(dataStr.matchAll(/\\{.*?\\}(?=\\n|$)/gm)).map(function (match) {\n var mark = JSON.parse(match[0]); // Set the duration of the last speechmark stored matching this one\'s type\n\n var numMarks = markTypes[mark.type].length;\n\n if (numMarks > 0) {\n var lastMark = markTypes[mark.type][numMarks - 1];\n lastMark.duration = mark.time - lastMark.time;\n }\n\n markTypes[mark.type].push(mark);\n endMarkTypes[mark.type] = mark;\n return mark;\n }); // Find the time of the latest speechmark\n\n\n var endTimes = [];\n\n if (endMarkTypes.sentence) {\n endTimes.push(endMarkTypes.sentence.time);\n }\n\n if (endMarkTypes.word) {\n endTimes.push(endMarkTypes.word.time);\n }\n\n if (endMarkTypes.viseme) {\n endTimes.push(endMarkTypes.viseme.time);\n }\n\n if (endMarkTypes.ssml) {\n endTimes.push(endMarkTypes.ssml.time);\n }\n\n var endTime = Math.max.apply(Math, endTimes); // Calculate duration for the ending speechMarks of each type\n\n if (endMarkTypes.sentence) {\n endMarkTypes.sentence.duration = Math.max(_this6._minEndMarkDuration, endTime - endMarkTypes.sentence.time);\n }\n\n if (endMarkTypes.word) {\n endMarkTypes.word.duration = Math.max(_this6._minEndMarkDuration, endTime - endMarkTypes.word.time);\n }\n\n if (endMarkTypes.viseme) {\n endMarkTypes.viseme.duration = Math.max(_this6._minEndMarkDuration, endTime - endMarkTypes.viseme.time);\n }\n\n if (endMarkTypes.ssml) {\n endMarkTypes.ssml.duration = Math.max(_this6._minEndMarkDuration, endTime - endMarkTypes.ssml.time);\n }\n\n return speechMarks;\n });\n }\n /**\r\n * Returns a Speech object that has the given text.\r\n *\r\n * @private\r\n *\r\n * @param {string} text - The text content of the Speech.\r\n * @param {Object=} config - Options to update the Speech with.\r\n *\r\n * @returns {Deferred} Resolves with Speech or null;\r\n */\n\n }, {\n key: "_getSpeech",\n value: function _getSpeech(text, config) {\n // Make sure AWS services exist\n if (!this.constructor.isReady) {\n var e = \'AWS services have not been initialized.\';\n return core_Deferred.reject(e);\n } // Make sure its possible to generate speeches\n\n\n if (!text) {\n var _e2 = \'Cannot play a speech with no text.\';\n return core_Deferred.reject(_e2);\n } // Update the speech with options\n\n\n text = awspack_TextToSpeechUtils.validateText(text);\n config = this._updateConfig(config, text);\n return this._updateSpeech(text, config).promise;\n }\n /**\r\n * Adds a namespace to the host with the name of the feature to contain properties\r\n * and methods from the feature that users of the host need access to.\r\n *\r\n * @see TextToSpeechFeature\r\n */\n\n }, {\n key: "installApi",\n value: function installApi() {\n var _this7 = this;\n\n /**\r\n * @inner\r\n * @namespace TextToSpeechFeature\r\n */\n var api = AbstractTextToSpeechFeature_get(AbstractTextToSpeechFeature_getPrototypeOf(AbstractTextToSpeechFeature.prototype), "installApi", this).call(this);\n\n Object.assign(api, {\n /**\r\n * @memberof TextToSpeechFeature\r\n * @instance\r\n * @method\r\n * @see AbstractTextToSpeechFeature#play\r\n */\n play: this.play.bind(this),\n\n /**\r\n * @memberof TextToSpeechFeature\r\n * @instance\r\n * @method\r\n * @see AbstractTextToSpeechFeature#pause\r\n */\n pause: this.pause.bind(this),\n\n /**\r\n * @memberof TextToSpeechFeature\r\n * @instance\r\n * @method\r\n * @see AbstractTextToSpeechFeature#resume\r\n */\n resume: this.resume.bind(this),\n\n /**\r\n * @memberof TextToSpeechFeature\r\n * @instance\r\n * @method\r\n * @see AbstractTextToSpeechFeature#stop\r\n */\n stop: this.stop.bind(this),\n\n /**\r\n * @memberof TextToSpeechFeature\r\n * @instance\r\n * @method\r\n * @see AbstractTextToSpeechFeature#getVolume\r\n */\n getVolume: this.getVolume.bind(this),\n\n /**\r\n * @memberof TextToSpeechFeature\r\n * @instance\r\n * @method\r\n * @see AbstractTextToSpeechFeature#setVolume\r\n */\n setVolume: this.setVolume.bind(this),\n\n /**\r\n * @memberof TextToSpeechFeature\r\n * @instance\r\n * @method\r\n * @see AbstractTextToSpeechFeature#pauseVolume\r\n */\n pauseVolume: this.pauseVolume.bind(this),\n\n /**\r\n * @memberof TextToSpeechFeature\r\n * @instance\r\n * @method\r\n * @see AbstractTextToSpeechFeature#resumeVolume\r\n */\n resumeVolume: this.resumeVolume.bind(this)\n });\n Object.defineProperties(api, {\n /**\r\n * @memberof TextToSpeechFeature\r\n * @instance\r\n * @see AbstractTextToSpeechFeature#speechmarkOffset\r\n */\n speechmarkOffset: {\n get: function get() {\n return _this7.speechmarkOffset;\n },\n set: function set(offset) {\n _this7.speechmarkOffset = offset;\n }\n }\n });\n return api;\n }\n /**\r\n * Gets and sets the volume used for all audio clips played by the speaker.\r\n *\r\n * @type {number}\r\n */\n\n }, {\n key: "volume",\n get: function get() {\n return this._volume;\n }\n /**\r\n * Gets whether or not the speaker\'s volume value is currently being tweened.\r\n *\r\n * @readonly\r\n * @type {boolean}\r\n */\n ,\n set: function set(volume) {\n this._volume = core_MathUtils.clamp(volume);\n }\n }, {\n key: "volumePending",\n get: function get() {\n return this._promises.volume && this._promises.volume.pending;\n }\n /**\r\n * Gets the volume used for all audio clips played by the speaker.\r\n *\r\n * @returns {number}\r\n */\n\n }, {\n key: "getVolume",\n value: function getVolume() {\n return this.volume;\n }\n /**\r\n * Updates the volume used for all audio clips played by the speaker over time.\r\n *\r\n * @param {number} volume - Target volume value.\r\n * @param {number} [seconds=0] - Amount of time it will take to reach the target\r\n * volume.\r\n * @param {Function=} easingFn - Easing function used for interpolation.\r\n *\r\n * @returns {Deferred}\r\n */\n\n }, {\n key: "setVolume",\n value: function setVolume(volume) {\n var seconds = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var easingFn = arguments.length > 2 ? arguments[2] : undefined;\n\n if (this.volumePending) {\n this._promises.volume.cancel();\n }\n\n volume = core_MathUtils.clamp(volume);\n this._promises.volume = animpack_AnimationUtils.interpolateProperty(this, \'volume\', volume, {\n seconds: seconds,\n easingFn: easingFn\n });\n return this._promises.volume;\n }\n /**\r\n * Pause interpolation happening on the speaker\'s volume property.\r\n *\r\n * @returns {boolean}\r\n */\n\n }, {\n key: "pauseVolume",\n value: function pauseVolume() {\n this._volumePaused = true;\n return this.volumePending;\n }\n /**\r\n * Resume any interpolation happening on the speaker\'s volume property.\r\n *\r\n * @returns {boolean}\r\n */\n\n }, {\n key: "resumeVolume",\n value: function resumeVolume() {\n this._volumePaused = false;\n return this.volumePending;\n }\n /**\r\n * Update the currently playing speech.\r\n *\r\n * @param {number} deltaTime - Time since the last update.\r\n */\n\n }, {\n key: "update",\n value: function update(deltaTime) {\n if (!this._volumePaused) {\n this._promises.volume.execute(deltaTime);\n }\n\n if (this._currentSpeech && this._currentSpeech.playing) {\n this._currentSpeech.volume = this._volume;\n\n this._currentSpeech.update(this._host.now);\n\n AbstractTextToSpeechFeature_get(AbstractTextToSpeechFeature_getPrototypeOf(AbstractTextToSpeechFeature.prototype), "update", this).call(this, deltaTime);\n }\n }\n /**\r\n * Set the current speech to a new asset and update the speech\'s speechmark\r\n * offset value to match that of the feature.\r\n *\r\n * @private\r\n *\r\n * @param {AbstractSpeech} speech - Speech to set as current.\r\n */\n\n }, {\n key: "_setCurrentSpeech",\n value: function _setCurrentSpeech(speech) {\n speech.speechmarkOffset = this._speechmarkOffset;\n this._currentSpeech = speech;\n }\n /**\r\n * Create a promise that will play/resume a speech with the given text after\r\n * the audio context attempts to resume and speech audio is retrieved from Polly.\r\n *\r\n * @private\r\n *\r\n * @param {string} text - The text of the new speech to play.\r\n * @param {Object=} config - Optional parameters for the speech.\r\n * @param {string} [playMethod = \'play\'] - Method to execute on the resulting\r\n * Speech object. Valid options are \'play\' and \'resume\'.\r\n */\n\n }, {\n key: "_startSpeech",\n value: function _startSpeech(text, config) {\n var _this8 = this;\n\n var playMethod = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : \'play\';\n\n // If no text is provided, try to use the current speech\n if (text === undefined && playMethod === \'resume\' && this._currentSpeech) {\n text = this._currentSpeech.text;\n }\n\n var currentPromise = this._currentPromise || {\n play: new core_Deferred(undefined, function () {\n currentPromise.speech.cancel();\n }, function () {\n currentPromise.speech.cancel();\n }, function () {\n currentPromise.speech.cancel();\n }),\n speech: new core_Deferred()\n };\n this._currentPromise = currentPromise;\n\n this._getSpeech(text, config).then(function (speech) {\n // Exit if the promise is no longer pending because of user interaction\n if (!currentPromise.play.pending) {\n return;\n } else if (_this8._currentPromise !== currentPromise) {\n // Cancel if another call to play has already been made\n currentPromise.play.cancel();\n return;\n } // Reset current speech when the speech ends\n\n\n var onFinish = function onFinish() {\n _this8._currentSpeech = null;\n _this8._currentPromise = null;\n }; // Cancel the currently playing speech\n\n\n if (_this8._currentSpeech && _this8._currentSpeech.playing) {\n if (playMethod === \'play\') {\n _this8._currentSpeech.cancel();\n } else if (playMethod === \'resume\' && _this8._currentSpeech.audio !== speech.audio) {\n _this8._currentSpeech.cancel();\n }\n }\n\n _this8._setCurrentSpeech(speech); // Play the speech\n\n\n currentPromise.speech = speech[playMethod](_this8._host.now, onFinish, onFinish, onFinish);\n currentPromise.speech.then(function () {\n if (currentPromise.speech.resolved) {\n currentPromise.play.resolve();\n } else {\n currentPromise.play.cancel();\n }\n })["catch"](function (error) {\n currentPromise.play.reject(error);\n });\n })["catch"](function (e) {\n e = "Cannot ".concat(playMethod, " speech ").concat(text, " on host ").concat(_this8.host.id, ". ").concat(e);\n currentPromise.play.reject(e);\n });\n\n return currentPromise.play;\n }\n /**\r\n * Stop any speeches currently playing and play a new speech from the beginning.\r\n *\r\n * @param {string} text - The text of the new speech to play.\r\n * @param {Object=} config - Optional parameters for the speech.\r\n *\r\n * @returns {Deferred}\r\n */\n\n }, {\n key: "play",\n value: function play(text, config) {\n return this._startSpeech(text, config, \'play\');\n }\n /**\r\n * If a speech is currently playing, pause it at the current time.\r\n */\n\n }, {\n key: "pause",\n value: function pause() {\n if (this._currentSpeech && this._currentSpeech.playing) {\n this._currentSpeech.pause(this._host.now);\n } else {\n console.warn("Cannot pause speech on host ".concat(this.host.id, ". No speech is currently playing"));\n }\n }\n /**\r\n * Stop any speeches currently playing and resume a new speech from the current\r\n * time.\r\n *\r\n * @param {string=} text - The text of the new speech to play. If undefined and\r\n * there is a current speech that is paused, the current speech will be resumed.\r\n * @param {Object=} config - Optional parameters for the speech.\r\n *\r\n * @returns {Deferred}\r\n */\n\n }, {\n key: "resume",\n value: function resume(text, config) {\n return this._startSpeech(text, config, \'resume\');\n }\n /**\r\n * If a speech is currently playing, stop playback and reset time.\r\n */\n\n }, {\n key: "stop",\n value: function stop() {\n if (this._currentSpeech && this._currentSpeech.playing) {\n this._currentSpeech.stop();\n\n this._currentSpeech = null;\n } else {\n console.warn("Cannot stop speech on host ".concat(this.host.id, ". No speech is currently playing."));\n }\n }\n }, {\n key: "discard",\n value: function discard() {\n if (this._currentSpeech && this._currentSpeech.playing) {\n this._currentSpeech.stop();\n }\n\n delete this._speechCache;\n\n AbstractTextToSpeechFeature_get(AbstractTextToSpeechFeature_getPrototypeOf(AbstractTextToSpeechFeature.prototype), "discard", this).call(this);\n }\n }], [{\n key: "initializeService",\n value: function initializeService(polly, presigner, version) {\n var _this9 = this;\n\n // Make sure all were defined\n if (polly === undefined || presigner === undefined || version === undefined) {\n throw new Error(\'Cannot initialize TextToSpeech feature. All arguments must be defined.\');\n } // Add sumerian hosts user-agent\n\n\n if (polly.config) {\n polly.config.customUserAgent = this._withCustomUserAgent(polly.config.customUserAgent);\n }\n\n if (presigner.service && presigner.service.config) {\n presigner.service.config.customUserAgent = this._withCustomUserAgent(presigner.service.config.customUserAgent);\n }\n\n this._isReady = false; // Store parameters\n\n this.SERVICES.polly = polly;\n this.SERVICES.presigner = presigner;\n awsVersion = version; // Clear the current polly objects\n\n var availableVoices = this.POLLY_VOICES;\n availableVoices.length = 0;\n var availableLanguages = this.POLLY_LANGUAGES;\n Object.keys(availableLanguages).forEach(function (name) {\n delete availableLanguages[name];\n });\n var availableLanguageCodes = this.POLLY_LANGUAGE_CODES;\n Object.keys(availableLanguageCodes).forEach(function (name) {\n delete availableLanguageCodes[name];\n }); // Re-populate according to version\n\n var minNeuralSdk = this.POLLY_MIN_NEURAL_VERSION;\n return this.SERVICES.polly.describeVoices().promise().then(function (response) {\n var allCodes = {};\n response.Voices.forEach(function (voice) {\n if (voice.SupportedEngines.includes(\'standard\') || version >= minNeuralSdk) {\n availableVoices.push(voice);\n }\n\n availableVoices.forEach(function (voice) {\n availableLanguages[voice.LanguageName] = voice.LanguageCode;\n allCodes[voice.LanguageCode] = voice.LanguageName;\n });\n });\n Object.entries(availableLanguages).forEach(function (_ref3) {\n var _ref4 = AbstractTextToSpeechFeature_slicedToArray(_ref3, 2),\n name = _ref4[0],\n code = _ref4[1];\n\n availableLanguageCodes[code] = name;\n }); // Notify that we\'re ready to generate speeches\n\n _this9._isReady = true;\n\n _this9.emit(_this9.EVENTS.ready);\n });\n }\n /**\r\n * Indicates whether or not the class is capable of generating speech audio. Polly,\r\n * Presigner and AWS SDK version number must have been defined using\r\n * [initializeService]{@link AbstractTextToSpeechFeature.initializeService}.\r\n *\r\n * @readonly\r\n * @type {boolean}\r\n */\n\n }, {\n key: "isReady",\n get: function get() {\n return this._isReady;\n }\n }, {\n key: "_withCustomUserAgent",\n value: function _withCustomUserAgent(currentUserAgent) {\n var sumerianHostsUserAgent = \'request-source/SumerianHosts\';\n\n if (currentUserAgent == null) {\n return sumerianHostsUserAgent;\n }\n\n if (currentUserAgent.indexOf(sumerianHostsUserAgent) !== -1) {\n return currentUserAgent;\n }\n\n return currentUserAgent.concat(\' \', sumerianHostsUserAgent);\n }\n }]);\n\n return AbstractTextToSpeechFeature;\n}(core_AbstractHostFeature);\n\nObject.defineProperties(AbstractTextToSpeechFeature_AbstractTextToSpeechFeature, {\n AWS_VERSION: {\n get: function get() {\n return awsVersion;\n }\n },\n POLLY_MIN_NEURAL_VERSION: {\n value: \'2.503\',\n writable: false\n },\n POLLY_DEFAULTS: {\n value: {\n Engine: \'standard\',\n LexiconNames: [],\n OutputFormat: \'mp3\',\n SampleRate: \'22050\',\n Text: \'\',\n TextType: \'ssml\',\n VoiceId: \'Amy\',\n LanguageCode: \'en-GB\',\n LanguageName: \'British English\'\n },\n writable: false\n },\n POLLY_VOICES: {\n value: [],\n writable: false\n },\n POLLY_LANGUAGES: {\n value: {},\n writable: false\n },\n POLLY_LANGUAGE_CODES: {\n value: {},\n writable: false\n },\n _isReady: {\n value: false,\n writable: true\n },\n EVENTS: {\n value: AbstractTextToSpeechFeature_objectSpread(AbstractTextToSpeechFeature_objectSpread({}, Object.getPrototypeOf(AbstractTextToSpeechFeature_AbstractTextToSpeechFeature).EVENTS), {}, {\n ready: \'onReadyEvent\',\n play: \'onPlayEvent\',\n pause: \'onPauseEvent\',\n resume: \'onResumeEvent\',\n interrupt: \'onInterruptEvent\',\n stop: \'onStopEvent\',\n sentence: \'onSentenceEvent\',\n word: \'onWordEvent\',\n viseme: \'onVisemeEvent\',\n ssml: \'onSsmlEvent\'\n })\n },\n SERVICES: {\n value: AbstractTextToSpeechFeature_objectSpread(AbstractTextToSpeechFeature_objectSpread({}, Object.getPrototypeOf(AbstractTextToSpeechFeature_AbstractTextToSpeechFeature).SERVICES), {}, {\n polly: undefined,\n presigner: undefined\n })\n }\n});\n/* harmony default export */ var awspack_AbstractTextToSpeechFeature = (AbstractTextToSpeechFeature_AbstractTextToSpeechFeature);\n// CONCATENATED MODULE: ./src/core/awspack/TextToSpeechFeature.js\nfunction TextToSpeechFeature_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { TextToSpeechFeature_typeof = function _typeof(obj) { return typeof obj; }; } else { TextToSpeechFeature_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return TextToSpeechFeature_typeof(obj); }\n\nfunction TextToSpeechFeature_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction TextToSpeechFeature_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction TextToSpeechFeature_createClass(Constructor, protoProps, staticProps) { if (protoProps) TextToSpeechFeature_defineProperties(Constructor.prototype, protoProps); if (staticProps) TextToSpeechFeature_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction TextToSpeechFeature_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { TextToSpeechFeature_get = Reflect.get; } else { TextToSpeechFeature_get = function _get(target, property, receiver) { var base = TextToSpeechFeature_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return TextToSpeechFeature_get(target, property, receiver || target); }\n\nfunction TextToSpeechFeature_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = TextToSpeechFeature_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction TextToSpeechFeature_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) TextToSpeechFeature_setPrototypeOf(subClass, superClass); }\n\nfunction TextToSpeechFeature_setPrototypeOf(o, p) { TextToSpeechFeature_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return TextToSpeechFeature_setPrototypeOf(o, p); }\n\nfunction TextToSpeechFeature_createSuper(Derived) { var hasNativeReflectConstruct = TextToSpeechFeature_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = TextToSpeechFeature_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = TextToSpeechFeature_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return TextToSpeechFeature_possibleConstructorReturn(this, result); }; }\n\nfunction TextToSpeechFeature_possibleConstructorReturn(self, call) { if (call && (TextToSpeechFeature_typeof(call) === "object" || typeof call === "function")) { return call; } return TextToSpeechFeature_assertThisInitialized(self); }\n\nfunction TextToSpeechFeature_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction TextToSpeechFeature_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction TextToSpeechFeature_getPrototypeOf(o) { TextToSpeechFeature_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return TextToSpeechFeature_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n/**\r\n * @extends AbstractTextToSpeechFeature\r\n * @alias core/TextToSpeechFeature\r\n */\n\nvar TextToSpeechFeature_TextToSpeechFeature = /*#__PURE__*/function (_AbstractTextToSpeech) {\n TextToSpeechFeature_inherits(TextToSpeechFeature, _AbstractTextToSpeech);\n\n var _super = TextToSpeechFeature_createSuper(TextToSpeechFeature);\n\n function TextToSpeechFeature() {\n var _this;\n\n TextToSpeechFeature_classCallCheck(this, TextToSpeechFeature);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n _this._enabled = false;\n\n _this._setAudioContext();\n\n _this._observeAudioContext();\n\n return _this;\n }\n /**\r\n * Store the audio context that will be used to ensure audio can be played.\r\n *\r\n * @private\r\n */\n\n\n TextToSpeechFeature_createClass(TextToSpeechFeature, [{\n key: "_setAudioContext",\n value: function _setAudioContext() {\n this._audioContext = new AudioContext();\n }\n /**\r\n * Listen for state changes on the audio context to determine whether the feature\r\n * is enabled.\r\n *\r\n * @private\r\n */\n\n }, {\n key: "_observeAudioContext",\n value: function _observeAudioContext() {\n var _this2 = this;\n\n if (this._audioContext) {\n this._audioContext.onstatechange = function () {\n if (_this2._audioContext.state === \'running\') {\n _this2._enabled = true;\n } else {\n _this2._enabled = false;\n console.warn(\'The audio context is not running. Speech will not be able to be played until it is resumed. Use the "TextToSpeechFeature.resumeAudio" method to try to resume it after a user gesture.\');\n }\n };\n\n this._audioContext.onstatechange();\n }\n }\n /**\r\n * Create an Audio object of speech audio for the given speech text.\r\n *\r\n * @private\r\n *\r\n * @param {Object} params - Parameters object compatible with Polly.synthesizeSpeech.\r\n *\r\n * @returns {Promise} Resolves with an object containing the audio URL and Audio\r\n * object.\r\n */\n\n }, {\n key: "_synthesizeAudio",\n value: function _synthesizeAudio(params) {\n var _this3 = this;\n\n return TextToSpeechFeature_get(TextToSpeechFeature_getPrototypeOf(TextToSpeechFeature.prototype), "_synthesizeAudio", this).call(this, params).then(function (result) {\n var url = result.url; // Create an Audio object that points to the presigned url\n\n var audio = new Audio(url);\n audio.loop = _this3.loop;\n audio.crossOrigin = \'anonymous\';\n audio.preload = \'auto\';\n result.audio = audio;\n return new Promise(function (resolve) {\n // Resolve once the minimum amount is loaded\n audio.addEventListener(\'canplaythrough\', function () {\n resolve(result);\n }); // Start loading the audio\n\n document.body.appendChild(audio);\n audio.load();\n });\n });\n }\n /**\r\n * Create a new Speech object for the speaker.\r\n *\r\n * @private\r\n *\r\n * @param {TextToSpeech} speaker - The TextToSpeech instance that will own the speech.\r\n * @param {string} text - Text of the speech.\r\n * @param {Object} speechmarks - Speechmarks for the speech.\r\n * @param {Object} audioConfig - Audio for the speech.\r\n *\r\n * @returns {AbstractSpeech}\r\n */\n\n }, {\n key: "_createSpeech",\n value: function _createSpeech(text, speechmarks, audioConfig) {\n return new three_js_awspack_Speech(this, text, speechmarks, audioConfig);\n }\n /**\r\n * Gets whether or not the audio context is running and speech can be played.\r\n *\r\n * @readonly\r\n * @type {boolean}\r\n */\n\n }, {\n key: "enabled",\n get: function get() {\n return this._enabled;\n }\n /**\r\n * Try to resume the audio context. This will be automatically executed each time\r\n * speech is played or resumed. If using manually, it should be called after a\r\n * user interaction occurs.\r\n *\r\n * @returns {Deferred} - Resolves once the audio context has resumed.\r\n */\n\n }, {\n key: "resumeAudio",\n value: function resumeAudio() {\n var _this4 = this;\n\n var promise = new core_Deferred(function (resolve, reject) {\n _this4._audioContext.resume().then(function () {\n _this4._enabled = true;\n resolve();\n })["catch"](function (e) {\n _this4._enabled = false;\n reject(e);\n });\n });\n return promise;\n }\n }, {\n key: "_startSpeech",\n value: function _startSpeech(text, config) {\n var _this5 = this;\n\n var playMethod = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : \'play\';\n var currentPromise = {\n play: new core_Deferred(undefined, function () {\n currentPromise.speech.cancel();\n }, function () {\n currentPromise.speech.cancel();\n }, function () {\n currentPromise.speech.cancel();\n }),\n speech: new core_Deferred()\n };\n this._currentPromise = currentPromise; // Try to start the audio context\n\n this.resumeAudio().then(function () {\n // Exit if the promise is no longer pending because of user interaction\n if (!currentPromise.play.pending) {\n return;\n } // Cancel if another call to play has already been made\n else if (_this5._currentPromise !== currentPromise) {\n currentPromise.play.cancel();\n return;\n } // The audio context is running so the speech can be played\n\n\n if (_this5._enabled) {\n TextToSpeechFeature_get(TextToSpeechFeature_getPrototypeOf(TextToSpeechFeature.prototype), "_startSpeech", _this5).call(_this5, text, config, playMethod);\n } // Reject if the audio context is not running\n else {\n currentPromise.reject(new Error("Cannot ".concat(playMethod, " speech on host ").concat(_this5._host.id, ". The audio context is not running. Use the \\"TextToSpeechFeature.resumeAudio\\" method to try to resume it after a user gesture.")));\n }\n });\n return currentPromise.play;\n }\n }, {\n key: "play",\n value: function play(text, config) {\n return this._startSpeech(text, config, \'play\');\n }\n }, {\n key: "resume",\n value: function resume(text, config) {\n return this._startSpeech(text, config, \'resume\');\n }\n }, {\n key: "installApi",\n value: function installApi() {\n var _this6 = this;\n\n var api = TextToSpeechFeature_get(TextToSpeechFeature_getPrototypeOf(TextToSpeechFeature.prototype), "installApi", this).call(this);\n\n Object.defineProperties(api, {\n /**\r\n * @memberof TextToSpeechFeature\r\n * @instance\r\n * @see core/TextToSpeechFeature#enabled\r\n */\n enabled: {\n get: function get() {\n return _this6._enabled;\n }\n }\n });\n return api;\n }\n }]);\n\n return TextToSpeechFeature;\n}(awspack_AbstractTextToSpeechFeature);\n\n/* harmony default export */ var awspack_TextToSpeechFeature = (TextToSpeechFeature_TextToSpeechFeature);\n// CONCATENATED MODULE: ./src/three.js/awspack/TextToSpeechFeature.js\nfunction awspack_TextToSpeechFeature_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { awspack_TextToSpeechFeature_typeof = function _typeof(obj) { return typeof obj; }; } else { awspack_TextToSpeechFeature_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return awspack_TextToSpeechFeature_typeof(obj); }\n\nfunction awspack_TextToSpeechFeature_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction awspack_TextToSpeechFeature_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction awspack_TextToSpeechFeature_createClass(Constructor, protoProps, staticProps) { if (protoProps) awspack_TextToSpeechFeature_defineProperties(Constructor.prototype, protoProps); if (staticProps) awspack_TextToSpeechFeature_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction awspack_TextToSpeechFeature_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { awspack_TextToSpeechFeature_get = Reflect.get; } else { awspack_TextToSpeechFeature_get = function _get(target, property, receiver) { var base = awspack_TextToSpeechFeature_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return awspack_TextToSpeechFeature_get(target, property, receiver || target); }\n\nfunction awspack_TextToSpeechFeature_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = awspack_TextToSpeechFeature_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction awspack_TextToSpeechFeature_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) awspack_TextToSpeechFeature_setPrototypeOf(subClass, superClass); }\n\nfunction awspack_TextToSpeechFeature_setPrototypeOf(o, p) { awspack_TextToSpeechFeature_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return awspack_TextToSpeechFeature_setPrototypeOf(o, p); }\n\nfunction awspack_TextToSpeechFeature_createSuper(Derived) { var hasNativeReflectConstruct = awspack_TextToSpeechFeature_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = awspack_TextToSpeechFeature_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = awspack_TextToSpeechFeature_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return awspack_TextToSpeechFeature_possibleConstructorReturn(this, result); }; }\n\nfunction awspack_TextToSpeechFeature_possibleConstructorReturn(self, call) { if (call && (awspack_TextToSpeechFeature_typeof(call) === "object" || typeof call === "function")) { return call; } return awspack_TextToSpeechFeature_assertThisInitialized(self); }\n\nfunction awspack_TextToSpeechFeature_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction awspack_TextToSpeechFeature_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction awspack_TextToSpeechFeature_getPrototypeOf(o) { awspack_TextToSpeechFeature_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return awspack_TextToSpeechFeature_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/**\r\n * Threejs PositionalAudio object\r\n * @external "THREE.AudioListener"\r\n * @see https://threejs.org/docs/#api/en/audio/AudioListener\r\n */\n\n/**\r\n * Threejs Audio object\r\n * @external "THREE.Object3D"\r\n * @see https://threejs.org/docs/#api/en/core/Object3D\r\n */\n\n/**\r\n * @extends core/TextToSpeechFeature\r\n * @alias three.js/TextToSpeechFeature\r\n */\n\nvar awspack_TextToSpeechFeature_TextToSpeechFeature = /*#__PURE__*/function (_CoreTextToSpeechFeat) {\n awspack_TextToSpeechFeature_inherits(TextToSpeechFeature, _CoreTextToSpeechFeat);\n\n var _super = awspack_TextToSpeechFeature_createSuper(TextToSpeechFeature);\n\n /**\r\n * @constructor\r\n *\r\n * @param {three/HostObject} host - Host object managing the feature.\r\n * @param {Object=} options - Options that will be sent to Polly for each speech.\r\n * @param {external:"THREE.AudioListener"} options.listener - Three audio listener to use with\r\n * audio.\r\n * @param {external:"THREE.Object3D"=} options.attachTo - Optional object to attach the speech\r\n * audio to.\r\n */\n function TextToSpeechFeature(host) {\n var _this;\n\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n voice: undefined,\n engine: undefined,\n language: undefined,\n audioFormat: \'mp3\',\n sampleRate: undefined,\n listener: undefined,\n attachTo: undefined\n };\n\n awspack_TextToSpeechFeature_classCallCheck(this, TextToSpeechFeature);\n\n _this = _super.call(this, host, options);\n _this._listener = options.listener;\n _this._attachTo = options.attachTo || host.owner;\n\n _this._setAudioContext();\n\n _this._observeAudioContext();\n\n return _this;\n }\n\n awspack_TextToSpeechFeature_createClass(TextToSpeechFeature, [{\n key: "_setAudioContext",\n value: function _setAudioContext() {\n if (this._listener) {\n this._audioContext = this._listener.context;\n }\n }\n /**\r\n * Create an Audio object and Three.js audio object of speech audio for the\r\n * given speech text.\r\n *\r\n * @private\r\n *\r\n * @param {Object} params - Parameters object compatible with Polly.synthesizeSpeech.\r\n *\r\n * @returns {Promise} Resolves with an object containing the audio URL and Audio\r\n * objects.\r\n */\n\n }, {\n key: "_synthesizeAudio",\n value: function _synthesizeAudio(params) {\n var _this2 = this;\n\n return awspack_TextToSpeechFeature_get(awspack_TextToSpeechFeature_getPrototypeOf(TextToSpeechFeature.prototype), "_synthesizeAudio", this).call(this, params).then(function (result) {\n if (_this2._attachTo !== undefined && !_this2._isGlobal) {\n // Create positional audio if there\'s an attach point\n result.threeAudio = new THREE.PositionalAudio(_this2._listener);\n\n _this2._attachTo.add(result.threeAudio);\n } else {\n // Create non-positional audio\n result.threeAudio = new THREE.Audio(_this2._listener);\n } // Set Audio object as the source\n\n\n result.threeAudio.setMediaElementSource(result.audio);\n return result;\n });\n }\n }]);\n\n return TextToSpeechFeature;\n}(awspack_TextToSpeechFeature);\n\n/* harmony default export */ var three_js_awspack_TextToSpeechFeature = (awspack_TextToSpeechFeature_TextToSpeechFeature);\n// CONCATENATED MODULE: ./src/three.js/awspack/index.js\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n/**\r\n * @module three/awspack\r\n */\n\n/* harmony default export */ var awspack = ({\n /**\r\n * @see three.js/TextToSpeechFeature\r\n */\n TextToSpeechFeature: three_js_awspack_TextToSpeechFeature,\n\n /**\r\n * @see core/TextToSpeechUtils\r\n */\n TextToSpeechUtils: awspack_TextToSpeechUtils,\n\n /**\r\n * @see three.js/Speech\r\n */\n Speech: three_js_awspack_Speech\n});\n// CONCATENATED MODULE: ./src/three.js/animpack/state/SingleState.js\nfunction state_SingleState_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { state_SingleState_typeof = function _typeof(obj) { return typeof obj; }; } else { state_SingleState_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return state_SingleState_typeof(obj); }\n\nfunction state_SingleState_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction state_SingleState_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction state_SingleState_createClass(Constructor, protoProps, staticProps) { if (protoProps) state_SingleState_defineProperties(Constructor.prototype, protoProps); if (staticProps) state_SingleState_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction SingleState_set(target, property, value, receiver) { if (typeof Reflect !== "undefined" && Reflect.set) { SingleState_set = Reflect.set; } else { SingleState_set = function set(target, property, value, receiver) { var base = SingleState_superPropBase(target, property); var desc; if (base) { desc = Object.getOwnPropertyDescriptor(base, property); if (desc.set) { desc.set.call(receiver, value); return true; } else if (!desc.writable) { return false; } } desc = Object.getOwnPropertyDescriptor(receiver, property); if (desc) { if (!desc.writable) { return false; } desc.value = value; Object.defineProperty(receiver, property, desc); } else { SingleState_defineProperty(receiver, property, value); } return true; }; } return SingleState_set(target, property, value, receiver); }\n\nfunction _set(target, property, value, receiver, isStrict) { var s = SingleState_set(target, property, value, receiver || target); if (!s && isStrict) { throw new Error(\'failed to set property\'); } return value; }\n\nfunction SingleState_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction SingleState_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { SingleState_get = Reflect.get; } else { SingleState_get = function _get(target, property, receiver) { var base = SingleState_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return SingleState_get(target, property, receiver || target); }\n\nfunction SingleState_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = state_SingleState_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction state_SingleState_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) state_SingleState_setPrototypeOf(subClass, superClass); }\n\nfunction state_SingleState_setPrototypeOf(o, p) { state_SingleState_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return state_SingleState_setPrototypeOf(o, p); }\n\nfunction state_SingleState_createSuper(Derived) { var hasNativeReflectConstruct = state_SingleState_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = state_SingleState_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = state_SingleState_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return state_SingleState_possibleConstructorReturn(this, result); }; }\n\nfunction state_SingleState_possibleConstructorReturn(self, call) { if (call && (state_SingleState_typeof(call) === "object" || typeof call === "function")) { return call; } return state_SingleState_assertThisInitialized(self); }\n\nfunction state_SingleState_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction state_SingleState_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction state_SingleState_getPrototypeOf(o) { state_SingleState_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return state_SingleState_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n/**\r\n * Threejs AnimationAction object\r\n * @external "THREE.AnimationAction"\r\n * @see https://threejs.org/docs/#api/en/animation/AnimationAction\r\n */\n\nvar threeBlendModes = {\n Override: THREE.NormalAnimationBlendMode,\n Additive: THREE.AdditiveAnimationBlendMode\n};\n/**\r\n * @extends core/SingleState\r\n * @alias three.js/SingleState\r\n */\n\nvar state_SingleState_SingleState = /*#__PURE__*/function (_CoreSingleState) {\n state_SingleState_inherits(SingleState, _CoreSingleState);\n\n var _super = state_SingleState_createSuper(SingleState);\n\n /**\r\n * @constructor\r\n *\r\n * @param {Object=} options - Options for the animation state.\r\n * @param {external:"THREE.AnimationAction"} threeAction - Animation action that controls\r\n * playback of the clip.\r\n */\n function SingleState() {\n var _this;\n\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var threeAction = arguments.length > 1 ? arguments[1] : undefined;\n\n state_SingleState_classCallCheck(this, SingleState);\n\n _this = _super.call(this, options); // Callback to catch THREE animation action completion\n\n _this._onFinishedEvent = function (_ref) {\n var type = _ref.type,\n action = _ref.action;\n\n // Exit if this isn\'t the finish event for this animation\n if (type !== \'finished\' || action !== _this.threeAction) {\n return;\n }\n\n _this._promises.play.resolve(); // Stop evaluating interpolators if they have already completed\n\n\n if (!_this.weightPending && !_this.timeScalePending) {\n _this._paused = true;\n }\n };\n\n _this._threeAction = threeAction;\n _this._threeAction.clampWhenFinished = true; // Hold the last frame on completion\n\n _this._threeAction.enabled = false;\n _this._threeAction.loop = _this._loopCount === 1 ? THREE.LoopOnce : THREE.LoopRepeat;\n _this._threeAction.paused = _this._paused;\n _this._threeAction.repetitions = _this._loopCount;\n _this._threeAction.timeScale = _this._timeScale;\n _this._threeAction.weight = _this._internalWeight;\n _this._threeAction.blendMode = threeBlendModes[_this._blendMode]; // Start listening for animation finished events\n\n _this._threeAction.getMixer().addEventListener(\'finished\', _this._onFinishedEvent);\n\n return _this;\n }\n /**\r\n * Gets the THREE.AnimationAction object.\r\n *\r\n * @readonly\r\n * @type {external:"THREE.AnimationAction"}\r\n */\n\n\n state_SingleState_createClass(SingleState, [{\n key: "threeAction",\n get: function get() {\n return this._threeAction;\n }\n }, {\n key: "normalizedTime",\n get: function get() {\n if (this._threeAction.time && this._threeAction.getClip() && this._threeAction.getClip().duration) {\n return this._threeAction.time / this._threeAction.getClip().duration;\n }\n\n return 0;\n },\n set: function set(time) {\n time = core_MathUtils.clamp(time);\n this._threeAction.time = this._threeAction.getClip().duration * time;\n }\n }, {\n key: "weight",\n get: function get() {\n return SingleState_get(state_SingleState_getPrototypeOf(SingleState.prototype), "weight", this);\n },\n set: function set(weight) {\n _set(state_SingleState_getPrototypeOf(SingleState.prototype), "weight", weight, this, true);\n\n this._threeAction.enabled = true;\n }\n }, {\n key: "updateInternalWeight",\n value: function updateInternalWeight(factor) {\n SingleState_get(state_SingleState_getPrototypeOf(SingleState.prototype), "updateInternalWeight", this).call(this, factor);\n\n this._threeAction.setEffectiveWeight(this._internalWeight);\n }\n }, {\n key: "timeScale",\n get: function get() {\n return SingleState_get(state_SingleState_getPrototypeOf(SingleState.prototype), "timeScale", this);\n },\n set: function set(timeScale) {\n _set(state_SingleState_getPrototypeOf(SingleState.prototype), "timeScale", timeScale, this, true);\n\n this._threeAction.timeScale = timeScale;\n }\n }, {\n key: "loopCount",\n get: function get() {\n return SingleState_get(state_SingleState_getPrototypeOf(SingleState.prototype), "loopCount", this);\n },\n set: function set(loopCount) {\n _set(state_SingleState_getPrototypeOf(SingleState.prototype), "loopCount", loopCount, this, true);\n\n this._threeAction.loop = loopCount === 1 ? THREE.LoopOnce : THREE.LoopRepeat;\n this._threeAction.repetitions = loopCount;\n }\n }, {\n key: "play",\n value: function play(onFinish, onError, onCancel) {\n // Restart animation\n this._threeAction.reset();\n\n this._threeAction.play();\n\n return SingleState_get(state_SingleState_getPrototypeOf(SingleState.prototype), "play", this).call(this, onFinish, onError, onCancel);\n }\n }, {\n key: "pause",\n value: function pause() {\n // Make sure animation has influence\n this._threeAction.paused = true;\n\n this._threeAction.play();\n\n return SingleState_get(state_SingleState_getPrototypeOf(SingleState.prototype), "pause", this).call(this);\n }\n }, {\n key: "resume",\n value: function resume(onFinish, onError, onCancel) {\n // Make sure the animation can play and has influence\n this._threeAction.paused = false;\n this._threeAction.enabled = true;\n\n this._threeAction.play();\n\n return SingleState_get(state_SingleState_getPrototypeOf(SingleState.prototype), "resume", this).call(this, onFinish, onError, onCancel);\n }\n }, {\n key: "cancel",\n value: function cancel() {\n // Stop animation playback\n this._threeAction.paused = true;\n return SingleState_get(state_SingleState_getPrototypeOf(SingleState.prototype), "cancel", this).call(this);\n }\n }, {\n key: "stop",\n value: function stop() {\n // Restart and pause the animation\n this._threeAction.reset();\n\n this._threeAction.paused = true;\n\n this._threeAction.play();\n\n return SingleState_get(state_SingleState_getPrototypeOf(SingleState.prototype), "stop", this).call(this);\n }\n }, {\n key: "discard",\n value: function discard() {\n // Stop the animation from having influence\n this._threeAction.enabled = false; // Stop listening for finish events\n\n this._threeAction.getMixer().removeEventListener(\'finished\', this._onFinishedEvent);\n\n SingleState_get(state_SingleState_getPrototypeOf(SingleState.prototype), "discard", this).call(this);\n }\n }]);\n\n return SingleState;\n}(state_SingleState);\n\n/* harmony default export */ var animpack_state_SingleState = (state_SingleState_SingleState);\n// CONCATENATED MODULE: ./src/three.js/animpack/AnimationFeature.js\nfunction animpack_AnimationFeature_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { animpack_AnimationFeature_typeof = function _typeof(obj) { return typeof obj; }; } else { animpack_AnimationFeature_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return animpack_AnimationFeature_typeof(obj); }\n\nfunction animpack_AnimationFeature_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction animpack_AnimationFeature_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction animpack_AnimationFeature_createClass(Constructor, protoProps, staticProps) { if (protoProps) animpack_AnimationFeature_defineProperties(Constructor.prototype, protoProps); if (staticProps) animpack_AnimationFeature_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction animpack_AnimationFeature_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { animpack_AnimationFeature_get = Reflect.get; } else { animpack_AnimationFeature_get = function _get(target, property, receiver) { var base = animpack_AnimationFeature_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return animpack_AnimationFeature_get(target, property, receiver || target); }\n\nfunction animpack_AnimationFeature_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = animpack_AnimationFeature_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction animpack_AnimationFeature_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) animpack_AnimationFeature_setPrototypeOf(subClass, superClass); }\n\nfunction animpack_AnimationFeature_setPrototypeOf(o, p) { animpack_AnimationFeature_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return animpack_AnimationFeature_setPrototypeOf(o, p); }\n\nfunction animpack_AnimationFeature_createSuper(Derived) { var hasNativeReflectConstruct = animpack_AnimationFeature_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = animpack_AnimationFeature_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = animpack_AnimationFeature_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return animpack_AnimationFeature_possibleConstructorReturn(this, result); }; }\n\nfunction animpack_AnimationFeature_possibleConstructorReturn(self, call) { if (call && (animpack_AnimationFeature_typeof(call) === "object" || typeof call === "function")) { return call; } return animpack_AnimationFeature_assertThisInitialized(self); }\n\nfunction animpack_AnimationFeature_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction animpack_AnimationFeature_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction animpack_AnimationFeature_getPrototypeOf(o) { animpack_AnimationFeature_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return animpack_AnimationFeature_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n/**\r\n * Threejs AnimationMixer object\r\n * @external "THREE.AnimationMixer"\r\n * @see https://threejs.org/docs/#api/en/animation/AnimationMixer\r\n */\n\nAnimationTypes.single = animpack_state_SingleState;\n\n/**\r\n * @extends core/AnimationFeature\r\n * @alias three.js/AnimationFeature\r\n */\n\nvar animpack_AnimationFeature_AnimationFeature = /*#__PURE__*/function (_CoreAnimationFeature) {\n animpack_AnimationFeature_inherits(AnimationFeature, _CoreAnimationFeature);\n\n var _super = animpack_AnimationFeature_createSuper(AnimationFeature);\n\n /**\r\n * @constructor\r\n *\r\n * @param {three.js/HostObject} host - Host object that owns the feature.\r\n */\n function AnimationFeature(host) {\n var _this;\n\n animpack_AnimationFeature_classCallCheck(this, AnimationFeature);\n\n _this = _super.call(this, host);\n _this._mixer = new THREE.AnimationMixer(host.owner);\n return _this;\n }\n\n animpack_AnimationFeature_createClass(AnimationFeature, [{\n key: "_createSingleState",\n value: function _createSingleState(options) {\n // Duplicate the clip if it is already in use by another three action\n var clip = options.clip;\n\n if (this._mixer.existingAction(clip)) {\n clip = clip.clone();\n }\n\n var threeAction = this._mixer.clipAction(clip);\n\n return new animpack_state_SingleState(options, threeAction);\n }\n /**\r\n * Gets the THREE.AnimationMixer for the host.\r\n *\r\n * @readonly\r\n * @type {external:"THREE.AnimationMixer"}\r\n */\n\n }, {\n key: "mixer",\n get: function get() {\n return this._mixer;\n }\n }, {\n key: "update",\n value: function update(deltaTime) {\n animpack_AnimationFeature_get(animpack_AnimationFeature_getPrototypeOf(AnimationFeature.prototype), "update", this).call(this, deltaTime);\n\n if (!this._paused) {\n this._mixer.update(deltaTime / 1000); // THREE.AnimationMixer requires delta time in seconds\n\n }\n }\n }, {\n key: "discard",\n value: function discard() {\n // Release THREE animation resources\n this._mixer.uncacheRoot(this._host.owner);\n\n animpack_AnimationFeature_get(animpack_AnimationFeature_getPrototypeOf(AnimationFeature.prototype), "discard", this).call(this);\n }\n }]);\n\n return AnimationFeature;\n}(animpack_AnimationFeature);\n\n/* harmony default export */ var three_js_animpack_AnimationFeature = (animpack_AnimationFeature_AnimationFeature);\n// CONCATENATED MODULE: ./src/three.js/animpack/index.js\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/**\r\n * @module three/animpack\r\n */\n\n\n\n\n\n\n\n\n\n\n\n/**\r\n * @namespace\r\n */\n\nvar Easing = {\n /**\r\n * @see Linear\r\n */\n Linear: Linear,\n\n /**\r\n * @see Quadratic\r\n */\n Quadratic: Quadratic,\n\n /**\r\n * @see Cubic\r\n */\n Cubic: Cubic,\n\n /**\r\n * @see Quartic\r\n */\n Quartic: Quartic,\n\n /**\r\n * @see Quintic\r\n */\n Quintic: Quintic,\n\n /**\r\n * @see Sinusoidal\r\n */\n Sinusoidal: Sinusoidal,\n\n /**\r\n * @see Exponential\r\n */\n Exponential: Exponential,\n\n /**\r\n * @see Circular\r\n */\n Circular: Circular,\n\n /**\r\n * @see Elastic\r\n */\n Elastic: Elastic,\n\n /**\r\n * @see Back\r\n */\n Back: Back,\n\n /**\r\n * @see Bounce\r\n */\n Bounce: Bounce\n};\n/* harmony default export */ var animpack = ({\n /**\r\n * @see three.js/AnimationFeature\r\n */\n AnimationFeature: three_js_animpack_AnimationFeature,\n\n /**\r\n * @see AnimationLayer\r\n */\n AnimationLayer: animpack_AnimationLayer,\n\n /**\r\n * @see three.js/SingleState\r\n */\n SingleState: animpack_state_SingleState,\n\n /**\r\n * @see TransitionState\r\n */\n TransitionState: state_TransitionState,\n\n /**\r\n * @see FreeBlendState\r\n */\n FreeBlendState: state_FreeBlendState,\n\n /**\r\n * @see QueueState\r\n */\n QueueState: state_QueueState,\n\n /**\r\n * @see RandomAnimationState\r\n */\n RandomAnimationState: state_RandomAnimationState,\n\n /**\r\n * @see Blend1dState\r\n */\n Blend1dState: state_Blend1dState,\n\n /**\r\n * @see Blend2dState\r\n */\n Blend2dState: state_Blend2dState,\n\n /**\r\n * @see AnimationUtils\r\n */\n AnimationUtils: animpack_AnimationUtils,\n\n /**\r\n * @see Easing\r\n */\n Easing: Easing,\n\n /**\r\n * @see LayerBlendModes\r\n */\n LayerBlendModes: LayerBlendModes,\n\n /**\r\n * @see DefaultLayerBlendMode\r\n */\n DefaultLayerBlendMode: DefaultLayerBlendMode,\n\n /**\r\n * @see AnimationTypes\r\n */\n AnimationTypes: AnimationTypes\n});\n// CONCATENATED MODULE: ./src/three.js/index.js\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/**\r\n * @module three/HOST\r\n */\n\n\n\n\n\n\n\n\n\n\n\n/* harmony default export */ var three_js = __webpack_exports__["default"] = ({\n /**\r\n * @see env\r\n */\n env: env,\n\n /**\r\n * @see Utils\r\n */\n Utils: core_Utils,\n\n /**\r\n * @see MathUtils\r\n */\n MathUtils: core_MathUtils,\n\n /**\r\n * @see Deferred\r\n */\n Deferred: core_Deferred,\n\n /**\r\n * @see three.js/Messenger\r\n */\n Messenger: three_js_Messenger,\n\n /**\r\n * @see three.js/HostObject\r\n */\n HostObject: three_js_HostObject,\n\n /**\r\n * @see core/LipsyncFeature\r\n */\n LipsyncFeature: core_LipsyncFeature,\n\n /**\r\n * @see GestureFeature\r\n */\n GestureFeature: core_GestureFeature,\n\n /**\r\n * @see three.js/PointOfInterestFeature\r\n */\n PointOfInterestFeature: three_js_PointOfInterestFeature,\n\n /**\r\n * @see DefaultVisemeMap\r\n */\n DefaultVisemeMap: DefaultVisemeMap,\n\n /**\r\n * @see DefaultGestureWords\r\n */\n DefaultGestureWords: DefaultGestureWords,\n\n /**\r\n * @see AxisMap\r\n */\n AxisMap: AxisMap,\n\n /**\r\n * @see module:three/awspack\r\n */\n aws: awspack,\n\n /**\r\n * @see module:three/animpack\r\n */\n anim: animpack\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vc3JjL2NvcmUvRGVmZXJyZWQuanM/Njg4ZSIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL2NvcmUvVXRpbHMuanM/YmYyNCIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL2NvcmUvTWF0aFV0aWxzLmpzPzgxZTciLCJ3ZWJwYWNrOi8vSE9TVC8uL3NyYy9jb3JlL2FuaW1wYWNrL0Vhc2luZy5qcz81ODZjIiwid2VicGFjazovL0hPU1QvLi9zcmMvY29yZS9NZXNzZW5nZXIuanM/ZDAwNiIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL3RocmVlLmpzL01lc3Nlbmdlci5qcz82MDNiIiwid2VicGFjazovL0hPU1QvLi9zcmMvY29yZS9BYnN0cmFjdEhvc3RGZWF0dXJlLmpzPzIzNmUiLCJ3ZWJwYWNrOi8vSE9TVC8uL3NyYy9jb3JlL0hvc3RPYmplY3QuanM/NzVlNyIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL3RocmVlLmpzL0hvc3RPYmplY3QuanM/NTRmMSIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL2NvcmUvRmVhdHVyZURlcGVuZGVudEludGVyZmFjZS5qcz8wNmJiIiwid2VicGFjazovL0hPU1QvLi9zcmMvY29yZS9hbmltcGFjay9BbmltYXRpb25GZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlLmpzPzZlNjMiLCJ3ZWJwYWNrOi8vSE9TVC8uL3NyYy9jb3JlL2FuaW1wYWNrL01hbmFnZWRBbmltYXRpb25MYXllckludGVyZmFjZS5qcz80N2Q1Iiwid2VicGFjazovL0hPU1QvLi9zcmMvY29yZS9hd3NwYWNrL1RleHRUb1NwZWVjaEZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2UuanM/YmNhZCIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL2NvcmUvTGlwc3luY0ZlYXR1cmUuanM/OGQzYSIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL2NvcmUvYXdzcGFjay9TU01MU3BlZWNobWFya0ludGVyZmFjZS5qcz9jYTc0Iiwid2VicGFjazovL0hPU1QvLi9zcmMvY29yZS9HZXN0dXJlRmVhdHVyZS5qcz9kYjM5Iiwid2VicGFjazovL0hPU1QvLi9zcmMvY29yZS9hbmltcGFjay9BbmltYXRpb25VdGlscy5qcz8xMTQ4Iiwid2VicGFjazovL0hPU1QvLi9zcmMvY29yZS9hbmltcGFjay9zdGF0ZS9BYnN0cmFjdFN0YXRlLmpzPzJmODciLCJ3ZWJwYWNrOi8vSE9TVC8uL3NyYy9jb3JlL2FuaW1wYWNrL3N0YXRlL1RyYW5zaXRpb25TdGF0ZS5qcz85ZTc3Iiwid2VicGFjazovL0hPU1QvLi9zcmMvY29yZS9hbmltcGFjay9BbmltYXRpb25QbGF5ZXJJbnRlcmZhY2UuanM/NzMzZSIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL2NvcmUvYW5pbXBhY2svc3RhdGUvU3RhdGVDb250YWluZXJJbnRlcmZhY2UuanM/MjY1OSIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL2NvcmUvYW5pbXBhY2svc3RhdGUvUXVldWVTdGF0ZS5qcz8wYzRhIiwid2VicGFjazovL0hPU1QvLi9zcmMvY29yZS9hbmltcGFjay9zdGF0ZS9BYnN0cmFjdEJsZW5kU3RhdGUuanM/NjY5NyIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL2NvcmUvYW5pbXBhY2svc3RhdGUvRnJlZUJsZW5kU3RhdGUuanM/ZDY3NSIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL2NvcmUvYW5pbXBhY2svc3RhdGUvQmxlbmQxZFN0YXRlLmpzP2E3NDIiLCJ3ZWJwYWNrOi8vSE9TVC8uL3NyYy9jb3JlL2FuaW1wYWNrL3N0YXRlL0JsZW5kMmRTdGF0ZS5qcz84MTYzIiwid2VicGFjazovL0hPU1QvLi9zcmMvY29yZS9hbmltcGFjay9BbmltYXRpb25MYXllci5qcz9iZWVjIiwid2VicGFjazovL0hPU1QvLi9zcmMvY29yZS9hbmltcGFjay9zdGF0ZS9TaW5nbGVTdGF0ZS5qcz80ZjE0Iiwid2VicGFjazovL0hPU1QvLi9zcmMvY29yZS9hbmltcGFjay9zdGF0ZS9SYW5kb21BbmltYXRpb25TdGF0ZS5qcz80NDkzIiwid2VicGFjazovL0hPU1QvLi9zcmMvY29yZS9hbmltcGFjay9BbmltYXRpb25GZWF0dXJlLmpzP2ViZGUiLCJ3ZWJwYWNrOi8vSE9TVC8uL3NyYy9jb3JlL1BvaW50T2ZJbnRlcmVzdEZlYXR1cmUuanM/ZGVlNSIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL3RocmVlLmpzL1BvaW50T2ZJbnRlcmVzdEZlYXR1cmUuanM/MTViZiIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL3RocmVlLmpzL0hvc3RFbnZpcm9ubWVudC5qcz8wMjcyIiwid2VicGFjazovL0hPU1QvLi9zcmMvY29yZS9hd3NwYWNrL1RleHRUb1NwZWVjaFV0aWxzLmpzPzc1NWQiLCJ3ZWJwYWNrOi8vSE9TVC8uL3NyYy9jb3JlL2F3c3BhY2svQWJzdHJhY3RTcGVlY2guanM/N2YxYyIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL2NvcmUvYXdzcGFjay9TcGVlY2guanM/MmE0MSIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL3RocmVlLmpzL2F3c3BhY2svU3BlZWNoLmpzPzcwZDkiLCJ3ZWJwYWNrOi8vSE9TVC8uL3NyYy9jb3JlL2F3c3BhY2svQWJzdHJhY3RUZXh0VG9TcGVlY2hGZWF0dXJlLmpzPzM0MWYiLCJ3ZWJwYWNrOi8vSE9TVC8uL3NyYy9jb3JlL2F3c3BhY2svVGV4dFRvU3BlZWNoRmVhdHVyZS5qcz81YTg1Iiwid2VicGFjazovL0hPU1QvLi9zcmMvdGhyZWUuanMvYXdzcGFjay9UZXh0VG9TcGVlY2hGZWF0dXJlLmpzPzEwOTAiLCJ3ZWJwYWNrOi8vSE9TVC8uL3NyYy90aHJlZS5qcy9hd3NwYWNrL2luZGV4LmpzPzJmMGEiLCJ3ZWJwYWNrOi8vSE9TVC8uL3NyYy90aHJlZS5qcy9hbmltcGFjay9zdGF0ZS9TaW5nbGVTdGF0ZS5qcz82MzU0Iiwid2VicGFjazovL0hPU1QvLi9zcmMvdGhyZWUuanMvYW5pbXBhY2svQW5pbWF0aW9uRmVhdHVyZS5qcz80ZWU3Iiwid2VicGFjazovL0hPU1QvLi9zcmMvdGhyZWUuanMvYW5pbXBhY2svaW5kZXguanM/Zjc0YSIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL3RocmVlLmpzL2luZGV4LmpzP2I0MWQiXSwibmFtZXMiOlsiRGVmZXJyZWQiLCJleGVjdXRhYmxlIiwib25SZXNvbHZlIiwib25SZWplY3QiLCJvbkNhbmNlbCIsIkVycm9yIiwicmVzIiwicmVqIiwiY2FuY2VsIiwic3RhdHVzIiwicmVzb2x2ZWQiLCJyZWplY3RlZCIsImNhbmNlbGVkIiwicGVuZGluZyIsInJlc29sdmUiLCJyZWplY3QiLCJ2YWx1ZSIsIl9zdGF0dXMiLCJfcmVzb2x2ZSIsIl9yZWplY3QiLCJfY2FuY2VsIiwiX2V4ZWN1dGFibGUiLCJhcmdzIiwiaXRlcmFibGUiLCJTeW1ib2wiLCJpdGVyYXRvciIsImUiLCJhcnJheSIsImRlZmVycmVkIiwiZmlsdGVyIiwiaXRlbSIsInJlc3VsdCIsInVuZGVmaW5lZCIsInJlc29sdmVWYWx1ZSIsImZvckVhY2giLCJsZW5ndGgiLCJlcnJvciIsImNhbmNlbFZhbHVlIiwibnVtSXRlbXMiLCJpdGVtVHJhY2tlciIsImZhaWxlZCIsIm51bVJlc29sdmVkIiwicmVzb2x1dGlvbnMiLCJpbmRleCIsIlByb21pc2UiLCJ0aGVuIiwiVXRpbHMiLCJyZXBsYWNlIiwiYyIsInJhbmRvbU51bWJlciIsIk1hdGgiLCJmbG9vciIsIkRhdGUiLCJub3ciLCJyYW5kb20iLCJ0b1N0cmluZyIsIm5hbWUiLCJuYW1lQXJyYXkiLCJpbmNsdWRlcyIsIm5hbWVTZXQiLCJTZXQiLCJtYXRjaEdyb3VwIiwibWF0Y2giLCJiYXNlTmFtZSIsInNsaWNlIiwiaW5jcmVtZW50IiwiTnVtYmVyIiwic2V0TmFtZSIsInNldE1hdGNoR3JvdXAiLCJzZXRJbmNyZW1lbnQiLCJzZWNvbmRzIiwib25GaW5pc2giLCJvblByb2dyZXNzIiwib25FcnJvciIsImNvbnNvbGUiLCJ3YXJuIiwiY3VycmVudFRpbWUiLCJ0b3RhbFRpbWUiLCJvblVwZGF0ZSIsImRlbHRhVGltZSIsIm1pbiIsIm1heCIsImNlaWwiLCJSYWRpYW5Ub0RlZ3JlZSIsIlBJIiwiRGVncmVlVG9SYWRpYW4iLCJNYXRoVXRpbHMiLCJyYWRpYW5zIiwiZGVncmVlcyIsImZyb20iLCJ0byIsImZhY3RvciIsImEiLCJiIiwicCIsImRpc3RTcXIiLCJkaXN0YW5jZVNxdWFyZWQiLCJ0IiwicG9pbnQiLCJ2ZXJ0aWNlcyIsIm1pblgiLCJQT1NJVElWRV9JTkZJTklUWSIsIm1pblkiLCJtYXhYIiwiTkVHQVRJVkVfSU5GSU5JVFkiLCJtYXhZIiwidiIsImRYIiwiZFkiLCJtaWRYIiwibWlkWSIsImRNYXgiLCJzdXBlckluZGljZXMiLCJ2ZXJ0c1dpdGhTdXBlciIsInN1cGVyU29ydGVkSW5kaWNlcyIsInNvcnRQb2ludHNDQ1ciLCJzdXBlclRyaWFuZ2xlIiwiaW5kaWNlcyIsImVkZ2VzIiwidHJpYW5nbGVzIiwibmV3VmVydCIsIm5ld0luZGV4IiwiaW52YWxpZFRyaWFuZ2xlcyIsInRyaWFuZ2xlIiwiaXNQb2ludEluQ2lyY3VtQ2lyY2xlIiwicHVzaCIsImJvdW5kaW5nUG9seSIsImVkZ2UiLCJjb3VudCIsIm90aGVyVHJpYW5nbGUiLCJvdGhlckVkZ2UiLCJzcGxpY2UiLCJpbmRleE9mIiwic29ydGVkSW5kaWNlcyIsInRyaWFuZ2xlc1RvUmVtb3ZlIiwibWFwIiwiYXgiLCJheSIsImJ4IiwiYnkiLCJjeCIsImN5IiwiZGVub20iLCJhVmFsIiwiYlZhbCIsImNWYWwiLCJjZW50cm9pZCIsInNvcnQiLCJhdGFuMiIsImFicyIsInZlY3RvciIsIkFycmF5IiwicmVkdWNlciIsImFjY3VtdWxhdG9yIiwiY3VycmVudFZhbHVlIiwic3FydCIsInJlZHVjZSIsInZlY3RvckEiLCJ2ZWN0b3JCIiwidmFsdWVBIiwidmFsdWVCIiwibm9ybWFsQSIsIm5vcm1hbGl6ZVZlY3RvciIsIm5vcm1hbEIiLCJkb3QiLCJnZXREb3RQcm9kdWN0IiwiYWNvcyIsImNsYW1wIiwidmVjdG9yMyIsIm1hdHJpeDMiLCJldmVyeSIsIngiLCJ5IiwieiIsIm1hZ25pdHVkZSIsImdldFZlY3Rvck1hZ25pdHVkZSIsImZpbGwiLCJtYXRyaXg0Iiwic2NhbGVYIiwic2NhbGVZIiwic2NhbGVaIiwiciIsInRhcmdldFZhbHVlIiwidmFsdWVTdG9yZSIsInNtb290aFRpbWUiLCJtYXhTcGVlZCIsImNsYW1wVGltZSIsImRlbHRhVmFsdWUiLCJjbGFtcERlbHRhVmFsdWUiLCJsYXN0VmFsdWUiLCJkMSIsImQyIiwiZDMiLCJkNCIsIkxpbmVhciIsIk5vbmUiLCJrIiwiSW4iLCJPdXQiLCJJbk91dCIsIlF1YWRyYXRpYyIsIkN1YmljIiwiUXVhcnRpYyIsIlF1aW50aWMiLCJTaW51c29pZGFsIiwiY29zIiwic2luIiwiRXhwb25lbnRpYWwiLCJDaXJjdWxhciIsIkVsYXN0aWMiLCJzIiwiYXNpbiIsIkJhY2siLCJCb3VuY2UiLCJNZXNzZW5nZXIiLCJpZCIsIl9pZCIsImNyZWF0ZUlkIiwiX2Rpc3BhdGNoZXIiLCJ3aW5kb3ciLCJfY2FsbGJhY2tzIiwiX2V2ZW50TGlzdGVuZXJzIiwibWVzc2FnZSIsImNhbGxiYWNrIiwiZGV0YWlsIiwiQ3VzdG9tRXZlbnQiLCJsaXN0ZW5lciIsImFkZEV2ZW50TGlzdGVuZXIiLCJfY3JlYXRlTG9jYWxNZXNzYWdlIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsIl9jcmVhdGVMaXN0ZW5lciIsIl9hZGRMaXN0ZW5lciIsImkiLCJzdG9wTGlzdGVuaW5nIiwiX3JlbW92ZUxpc3RlbmVyIiwicmVnZXhwIiwibWVzc2FnZXMiLCJPYmplY3QiLCJrZXlzIiwidGVzdCIsImV2ZW50IiwiX2NyZWF0ZUV2ZW50IiwiZGlzcGF0Y2hFdmVudCIsIm1lc3NlbmdlciIsIkdsb2JhbE1lc3NlbmdlciIsImxpc3RlblRvIiwic3RvcExpc3RlbmluZ1RvQWxsIiwiZW1pdCIsImRlZmluZVByb3BlcnRpZXMiLCJ3cml0YWJsZSIsIkVWRU5UUyIsInR5cGUiLCJDb3JlTWVzc2VuZ2VyIiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsIlRIUkVFIiwiRXZlbnREaXNwYXRjaGVyIiwicHJvdG90eXBlIiwicHJvcCIsImRlZmluZVByb3BlcnR5IiwiQWJzdHJhY3RIb3N0RmVhdHVyZSIsImhvc3QiLCJfaG9zdCIsImV2ZW50cyIsImFwaSIsImVudHJpZXMiLCJjb25zdHJ1Y3RvciIsIm93bmVyIiwic3RvcExpc3RlbmluZ0J5UmVnZXhwIiwidXBkYXRlIiwiUmVnRXhwIiwic291cmNlIiwiUmVzdWx0Q2xhc3MiLCJtaXhpbkNsYXNzRmFjdG9yaWVzIiwibWl4aW5DbGFzc0ZhY3RvcnkiLCJTRVJWSUNFUyIsIkhvc3RPYmplY3QiLCJfb3duZXIiLCJfZmVhdHVyZXMiLCJfd2FpdHMiLCJfbGFzdFVwZGF0ZSIsImR0Iiwid2FpdCIsImV4ZWN1dGUiLCJ2YWx1ZXMiLCJmZWF0dXJlIiwib25Db21wbGV0ZSIsIkZlYXR1cmVDbGFzcyIsImZvcmNlIiwiaW5wdXRUeXBlIiwiaW5zdGFsbEFwaSIsImFkZEZlYXR1cmUiLCJ0eXBlTmFtZSIsInJlbW92ZUZlYXR1cmUiLCJkaXNjYXJkIiwiZ2V0UHJvdG90eXBlT2YiLCJvcHRpb25zIiwiX2Nsb2NrIiwiY2xvY2siLCJnZXQiLCJnZXRFbGFwc2VkVGltZSIsIkNvcmVIb3N0T2JqZWN0IiwiRmVhdHVyZURlcGVuZGVudEludGVyZmFjZSIsIkJhc2VDbGFzcyIsIkZlYXR1cmVEZXBlbmRlbnRNaXhpbiIsIl9pbml0aWFsaXplZCIsIl9vbkZlYXR1cmVBZGRlZCIsImJpbmQiLCJfb25GZWF0dXJlUmVtb3ZlZCIsIkVWRU5UX0RFUEVOREVOQ0lFUyIsImV2ZW50TmFtZSIsIkFuaW1hdGlvbkZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2UiLCJvbGROYW1lIiwibmV3TmFtZSIsImxheWVyTmFtZSIsImFuaW1hdGlvbk5hbWUiLCJQYXJlbnRDbGFzcyIsIk1peGluIiwiQW5pbWF0aW9uRmVhdHVyZURlcGVuZGVudE1peGluIiwiQW5pbWF0aW9uRmVhdHVyZSIsImFkZExheWVyIiwicmVtb3ZlTGF5ZXIiLCJyZW5hbWVMYXllciIsImFkZEFuaW1hdGlvbiIsInJlbW92ZUFuaW1hdGlvbiIsInJlbmFtZUFuaW1hdGlvbiIsIk1hbmFnZWRBbmltYXRpb25MYXllckludGVyZmFjZSIsIm5hbWVGaWx0ZXIiLCJ3ZWlnaHQiLCJlYXNpbmdGbiIsIk1hbmFnZWRBbmltYXRpb25MYXllck1peGluIiwiX21hbmFnZWRMYXllcnMiLCJsYXllcnMiLCJfb25MYXllckFkZGVkIiwiX29uTGF5ZXJSZW1vdmVkIiwiaXNBY3RpdmUiLCJnZXRBbmltYXRpb25zIiwiYW5pbU5hbWUiLCJfb25BbmltYXRpb25BZGRlZCIsImFuaW1hdGlvbnMiLCJfb25BbmltYXRpb25SZW1vdmVkIiwibGF5ZXJPcHRpb25zIiwiYW5pbU9wdGlvbnMiLCJERUZBVUxUX0xBWUVSX09QVElPTlMiLCJhbmltYXRpb25PcHRpb25zIiwiYXNzaWduIiwicmVnaXN0ZXJBbmltYXRpb24iLCJyZWdpc3RlckxheWVyIiwibGF5ZXJOYW1lcyIsInNldExheWVyV2VpZ2h0IiwiYmxlbmRUaW1lIiwic2V0TGF5ZXJXZWlnaHRzIiwiZW5hYmxlIiwiZGlzYWJsZSIsIlRleHRUb1NwZWVjaEZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2UiLCJUZXh0VG9TcGVlY2hGZWF0dXJlRGVwZW5kZW50TWl4aW4iLCJUZXh0VG9TcGVlY2hGZWF0dXJlIiwicGxheSIsInBhdXNlIiwicmVzdW1lIiwic3RvcCIsInNlbnRlbmNlIiwid29yZCIsInZpc2VtZSIsInNzbWwiLCJEZWZhdWx0VmlzZW1lTWFwIiwic2lsIiwib3ZlcnJpZGVXZWlnaHQiLCJTIiwiVCIsImYiLCJ1IiwiRSIsIm8iLCJPIiwiTGlwc3luY0ZlYXR1cmUiLCJ2aXNlbWVCbGVuZFRpbWUiLCJkZWNheVJhdGUiLCJhbW91bnQiLCJ2aXNlbWVFYXNpbmdGbiIsInZpc2VtZUxheWVycyIsInRhbGtpbmdCbGVuZFRpbWUiLCJ0YWxraW5nRWFzaW5nRm4iLCJ0YWxraW5nTGF5ZXJzIiwidmlzZW1lTGVhZFRpbWUiLCJfdmlzZW1lTGF5ZXJzIiwiX3RhbGtpbmdMYXllcnMiLCJhbmltYXRpb24iLCJ2aXNlbWVNYXAiLCJyZWdpc3RlclZpc2VtZUxheWVyIiwicmVnaXN0ZXJUYWxraW5nTGF5ZXIiLCJnZXRBbmltYXRpb25UeXBlIiwid2VpZ2h0TmFtZXMiLCJnZXRBbmltYXRpb25CbGVuZE5hbWVzIiwidmlzZW1lT3B0aW9ucyIsInNwZWVjaG1hcmtPZmZzZXQiLCJfdmlzZW1lTGVhZFRpbWUiLCJfcmVnaXN0ZXJWaXNlbWVBbmltYXRpb24iLCJyZXN1bWVBbmltYXRpb24iLCJfb25TdG9wIiwiX29uUGxheSIsInBhdXNlQW5pbWF0aW9uIiwibWFyayIsImlzVmlzZW1lQWN0aXZlIiwidmlzZW1lTmFtZXMiLCJkdXJhdGlvbiIsImxlcnBGYWN0b3IiLCJsZXJwIiwiYmxlbmRJblRpbWUiLCJob2xkVGltZSIsIl9hbmltYXRlU2ltcGxlVmlzZW1lIiwiZGVjYXlXZWlnaHQiLCJfYW5pbWF0ZUhlbGRWaXNlbWUiLCJ2aXNlbWVOYW1lIiwicGVha1dlaWdodCIsImJsZW5kT3V0VGltZSIsIndlaWdodFByb21pc2UiLCJzZXRBbmltYXRpb25CbGVuZFdlaWdodCIsInN0YXJ0UHJvbWlzZSIsImhvbGRQcm9taXNlIiwic2V0IiwibWl4IiwiU1NNTFNwZWVjaG1hcmtJbnRlcmZhY2UiLCJTU01MU3BlZWNoTWFya01peGluIiwiSlNPTiIsInBhcnNlIiwibWV0aG9kIiwiYXBwbHkiLCJEZWZhdWx0R2VzdHVyZVdvcmRzIiwiYmlnIiwiaGVhcnQiLCJtYW55IiwibW92ZW1lbnQiLCJvbmUiLCJhZ2dyZXNzaXZlIiwieW91IiwiZGVmZW5zZSIsIndhdmUiLCJzZWxmIiwiR2VzdHVyZUZlYXR1cmUiLCJtaW5pbXVtSW50ZXJ2YWwiLCJsYXllciIsImxheWVySG9sZFRpbWUiLCJsYXllck1pbmltdW1JbnRlcnZhbCIsImNhbkFkdmFuY2UiLCJpc1F1ZXVlRW5kIiwiY3VycmVudEdlc3R1cmUiLCJfZ2V0SG9sZFRpbWUiLCJob2xkVGltZXIiLCJwbGF5TmV4dEFuaW1hdGlvbiIsInBsYXlUaW1lciIsImF1dG9EaXNhYmxlIiwiYW5pbSIsIndvcmRzIiwiZ2VzdHVyZU1hcCIsInRyYW5zaXRpb25UaW1lIiwia2V5Iiwic3RyaW5naWZ5IiwiZ2VuZXJpY0dlc3R1cmVzIiwicmVhc29uIiwiX2dldE1pbmltdW1JbnRlcnZhbCIsInBsYXlBbmltYXRpb24iLCJnZXRQYXVzZWQiLCJjcmVhdGVHZXN0dXJlTWFwIiwiY3JlYXRlR2VuZXJpY0dlc3R1cmVBcnJheSIsInBsYXlHZXN0dXJlIiwic3RvcEFuaW1hdGlvbiIsImludGVycnVwdEFuaW1hdGlvbiIsIkFuaW1hdGlvblV0aWxzIiwicHJvcGVydHlPd25lciIsInByb3BlcnR5TmFtZSIsImlzTmFOIiwic3RhcnRWYWx1ZSIsImludGVycG9sYXRvciIsInByb2dyZXNzIiwiZWFzZUZhY3RvciIsIkFic3RyYWN0U3RhdGUiLCJfd2VpZ2h0IiwiX2ludGVybmFsV2VpZ2h0IiwiX3BhdXNlZCIsIl9wcm9taXNlcyIsImZpbmlzaCIsIl9wbGF5Q2FsbGJhY2tzIiwiaW50ZXJwb2xhdGVQcm9wZXJ0eSIsInByb21pc2UiLCJhbGwiLCJ1cGRhdGVJbnRlcm5hbFdlaWdodCIsIlRyYW5zaXRpb25TdGF0ZSIsIl90byIsIl9mcm9tIiwiX3dlaWdodFByb21pc2UiLCJ0b3RhbFdlaWdodCIsInN0YXRlIiwiY3VycmVudFN0YXRlcyIsInRhcmdldFN0YXRlIiwiZGVhY3RpdmF0ZSIsInJlc2V0Iiwid2VpZ2h0UHJvbWlzZXMiLCJzZXRXZWlnaHQiLCJvbk5leHQiLCJwcm9taXNlcyIsIkFuaW1hdGlvblBsYXllckludGVyZmFjZSIsImZuIiwicGxheU1ldGhvZCIsIkFuaW1hdGlvblBsYXllck1peGluIiwiX3RyYW5zaXRpb25TdGF0ZSIsIl9zdGF0ZXMiLCJNYXAiLCJfY3VycmVudFN0YXRlIiwiX3RyYW5zaXRpb25UaW1lIiwiX2Vhc2luZ0ZuIiwiaGFzIiwiY3VycmVudEFuaW1hdGlvbiIsIndlaWdodFBlbmRpbmciLCJjb25maWd1cmUiLCJfcHJlcGFyZUN1cnJlbnRTdGF0ZSIsIlN0YXRlQ29udGFpbmVySW50ZXJmYWNlIiwiY3VycmVudE5hbWUiLCJTdGF0ZUNvbnRhaW5lck1peGluIiwidW5pcXVlTmFtZSIsImdldFVuaXF1ZU5hbWUiLCJRdWV1ZVN0YXRlIiwicXVldWVTdGF0ZXMiLCJhZGRTdGF0ZSIsIl9xdWV1ZSIsIl9kb25lIiwiaW50ZXJuYWxXZWlnaHQiLCJuZXh0IiwiZG9uZSIsIndyYXAiLCJsYXN0TmFtZSIsInNpemUiLCJnZXRTdGF0ZSIsImxvb3BDb3VudCIsIkluZmluaXR5IiwiaXNUcmFuc2l0aW9uaW5nIiwiX3Jlc2V0IiwicGF1c2VkIiwic3RvcHBlZCIsImRpc2NhcmRTdGF0ZXMiLCJBYnN0cmFjdEJsZW5kU3RhdGUiLCJibGVuZFN0YXRlcyIsImJsZW5kV2VpZ2h0cyIsIkZyZWVCbGVuZFN0YXRlIiwic3VtV2VpZ2h0cyIsIkJsZW5kMWRTdGF0ZSIsImJsZW5kVGhyZXNob2xkcyIsInBoYXNlTWF0Y2hlcyIsIl9ibGVuZFZhbHVlIiwiYmxlbmRWYWx1ZSIsIm5vblplcm9EaWZmZXJlbnRTaXplIiwiY29udGFpbnNEdXBsaWNhdGVzIiwiX3RocmVzaG9sZHMiLCJwaGFzZU1hdGNoIiwiX3NvcnRUaHJlc2hvbGRzIiwiX2ZvcmNlTm9UaHJlc2hvbGREdXBlcyIsIl9waGFzZUxlYWRTdGF0ZSIsIl91cGRhdGVCbGVuZFdlaWdodHMiLCJ0aHJlc2hvbGRWYWx1ZSIsInNhbWVWYWx1ZSIsImZpbmQiLCJ0aHJlc2hvbGQiLCJyZW1vdmVkIiwiZmluZEluZGV4Iiwibm9ybWFsaXplZFRpbWUiLCJ0YXJnZXRJbmRleCIsInRocmVzaG9sZEEiLCJ0aHJlc2hvbGRCIiwiZmFjdG9yQiIsImZhY3RvckEiLCJzdGF0ZUEiLCJzdGF0ZUIiLCJCbGVuZDJkU3RhdGUiLCJvdGhlclRocmVzaG9sZCIsIl9ibGVuZFZhbHVlWCIsIl9ibGVuZFZhbHVlWSIsImJsZW5kVmFsdWVYIiwiYmxlbmRWYWx1ZVkiLCJfdmVydGljZXMiLCJfdHJpYW5nbGVzIiwiZ2V0RGVsYXVuYXlUcmlhbmd1bGF0aW9uIiwicHJvcGVydHkiLCJ0b1VwcGVyQ2FzZSIsIl9zZXRJbmZsdWVuY2VDbG9zZXN0UG9pbnRPbkxpbmUiLCJpc1BvaW50SW5UcmlhbmdsZSIsIl9zZXRJbmZsdWVuY2VUcmlhbmdsZSIsIl9zZXRJbmZsdWVuY2VDbG9zZXN0UG9pbnRJblRyaWFuZ2xlcyIsImFyZWFBIiwidHJpYW5nbGVBcmVhIiwiYXJlYUIiLCJhcmVhQyIsInRvdGFsQXJlYSIsIndlaWdodEEiLCJ3ZWlnaHRCIiwid2VpZ2h0QyIsInRocmVzaG9sZEMiLCJzdGF0ZUMiLCJfc2V0UGhhc2VMZWFkU3RhdGUiLCJnbG9iYWxDbG9zZXN0UG9pbnQiLCJnbG9iYWxNaW5EaXN0IiwiY2xvc2VzdFRyaWFuZ2xlIiwicG9pbnRBIiwiY2xvc2VzdFBvaW50T25MaW5lIiwicG9pbnRCIiwicG9pbnRDIiwiZGlzdEEiLCJkaXN0QiIsImRpc3RDIiwibG9jYWxDbG9zZXN0UG9pbnQiLCJsb2NhbE1pbkRpc3QiLCJjbG9zZXN0UG9pbnQiLCJzdGF0ZXMiLCJwaGFzZU1hdGNoZWQiLCJMYXllckJsZW5kTW9kZXMiLCJPdmVycmlkZSIsIkFkZGl0aXZlIiwiRGVmYXVsdExheWVyQmxlbmRNb2RlIiwidmFsaWRhdGVCbGVuZE1vZGUiLCJibGVuZE1vZGUiLCJBbmltYXRpb25MYXllciIsIl9ibGVuZE1vZGUiLCJfd2VpZ2h0UGF1c2VkIiwiaXNXZWlnaHRBY3RpdmUiLCJnZXRTdGF0ZU5hbWVzIiwiYmxlbmROYW1lIiwic2V0QmxlbmRXZWlnaHQiLCJnZXRCbGVuZFdlaWdodCIsIlNpbmdsZVN0YXRlIiwiX3RpbWVTY2FsZSIsInRpbWVTY2FsZSIsIl9sb29wQ291bnQiLCJ0aW1lIiwiUmFuZG9tQW5pbWF0aW9uU3RhdGUiLCJzdWJTdGF0ZXMiLCJfcGxheUludGVydmFsIiwicGxheUludGVydmFsIiwiZ2V0UmFuZG9tRmxvYXQiLCJwbGF5UmFuZG9tQW5pbWF0aW9uIiwidGltZXIiLCJfcmVzZXRUaW1lciIsInJhbmRvbVN0YXRlIiwiZ2V0UmFuZG9tSW50IiwiY2FuY2VsQW5pbWF0aW9uIiwiQW5pbWF0aW9uVHlwZXMiLCJzaW5nbGUiLCJmcmVlQmxlbmQiLCJxdWV1ZSIsInJhbmRvbUFuaW1hdGlvbiIsImJsZW5kMWQiLCJibGVuZDJkIiwiX2xheWVycyIsIl9sYXllck1hcCIsImV4aXN0aW5nIiwibGFzdEluZGV4IiwibnVtTGF5ZXJzIiwid2VpZ2h0TXVsdGlwbGllciIsImN1cnJlbnRTdGF0ZSIsImJsZW5kU3RhdGVPcHRpb25zIiwiYmxlbmRPcHRpb25zIiwiX2NyZWF0ZVNpbmdsZVN0YXRlIiwicXVldWVPcHRpb25zIiwicXVldWVPcHRpb24iLCJibGVuZE1hdGNoUGhhc2VzIiwic3ViU3RhdGVPcHRpb25zIiwibGF5ZXJJbmRleCIsIl92YWxpZGF0ZUluZGV4IiwiZXZlbnREYXRhIiwiY3VycmVudEluZGV4IiwiZ2V0QW5pbWF0aW9uQmxlbmRXZWlnaHQiLCJwYXVzZVdlaWdodCIsInJlc3VtZVdlaWdodCIsImFuaW1hdGlvblR5cGUiLCJfdmFsaWRhdGVOZXdBbmltYXRpb24iLCJyZW1vdmVTdGF0ZSIsImN1cnJlbnRBbmltYXRpb25OYW1lIiwibmV3QW5pbWF0aW9uTmFtZSIsInJlbmFtZVN0YXRlIiwibmV4dFF1ZXVlZEFuaW1hdGlvbiIsImwiLCJyZXN1bWVkIiwibW92ZUxheWVyIiwiZ2V0TGF5ZXJXZWlnaHQiLCJwYXVzZUxheWVyV2VpZ2h0IiwicmVzdW1lTGF5ZXJXZWlnaHQiLCJwYXVzZUxheWVyIiwicmVzdW1lTGF5ZXIiLCJnZXRUcmFuc2l0aW9uaW5nIiwiZ2V0Q3VycmVudEFuaW1hdGlvbiIsIl91cGRhdGVJbnRlcm5hbFdlaWdodHMiLCJBeGlzTWFwIiwiUG9zaXRpdmVYIiwiTmVnYXRpdmVYIiwiUG9zaXRpdmVZIiwiTmVnYXRpdmVZIiwiUG9zaXRpdmVaIiwiTmVnYXRpdmVaIiwiRmFjZVRhcmdldFR5cGVzIiwiRXllQ2VudGVyIiwiRXllTGVmdCIsIkV5ZVJpZ2h0IiwiTW91dGgiLCJGYWNlVmVjdG9ycyIsIk1pY3JvU2FjY2FkZVdhaXRSYW5nZXMiLCJwb3N0TWFjcm8iLCJNYWNyb1NhY2NhZGVXYWl0UmFuZ2VzIiwibW91dGhUYXJnZXQiLCJleWVUYXJnZXQiLCJCbGlua1RocmVzaG9sZCIsIk1heERlbHRhIiwiUG9pbnRPZkludGVyZXN0RmVhdHVyZSIsInRhcmdldCIsImxvb2tUcmFja2VyIiwic2NlbmUiLCJsb29rQmxlbmRUaW1lIiwibG9va0Vhc2luZ0ZuIiwibG9va0xheWVycyIsImJsaW5rQmxlbmRUaW1lIiwiYmxpbmtFYXNpbmdGbiIsImJsaW5rTGF5ZXJzIiwiX3ZhbGlkYXRlVHJhbnNmb3JtT2JqZWN0IiwiX2xvb2tUcmFja2VyIiwiX3NjZW5lIiwiX3RhcmdldCIsIl9wcmV2VGFyZ2V0UG9zIiwiX2lzVGFyZ2V0TW92aW5nIiwiX2xvb2tMYXllcnMiLCJfdHJhY2tpbmdDb25maWdzIiwiX2JsaW5rTGF5ZXJzIiwicmVmZXJlbmNlIiwiZm9yd2FyZEF4aXMiLCJoYXNTYWNjYWRlIiwicmVnaXN0ZXJMb29rTGF5ZXIiLCJyZWdpc3RlckJsaW5rTGF5ZXIiLCJfcmVnaXN0ZXJMb29rQW5pbWF0aW9uIiwiY29uZmlnIiwidHJhY2tpbmdDb25maWciLCJhbmdsZXMiLCJoIiwicHJldkFuZ2xlcyIsInNvdXJjZVBvc2l0aW9uIiwiX2dldFdvcmxkUG9zaXRpb24iLCJ0YXJnZXRQb3NpdGlvbiIsImxvb2tWZWN0b3IiLCJ0YXJnZXRQb3MiLCJ0cmFja2VyUG9zIiwidGFyZ2V0U3BoZXJpY2FsIiwiY2FydGVzaWFuVG9TcGhlcmljYWwiLCJ0YXJnZXRBbmdsZXMiLCJfc3BoZXJpY2FsVG9CbGVuZFZhbHVlIiwicmVmRGlyZWN0aW9uIiwiX2dldE9iamVjdERpcmVjdGlvbiIsInJlZlNwaGVyaWNhbCIsInJlZkFuZ2xlcyIsInRhcmdldFR5cGUiLCJkaXN0YW5jZSIsIl9nZXRUYXJnZXREaXN0YW5jZSIsImZhY2VWZWN0b3IiLCJzcGhlcmljYWwiLCJibGVuZFZhbHVlcyIsIm1heEhTcGVlZCIsImV4cCIsIm1heFZTcGVlZCIsIkQwIiwiZCIsImhEdXJhdGlvbiIsInZEdXJhdGlvbiIsIm1pY3JvU2FjY2FkZSIsIl91cGRhdGVMYXllclNwZWVkIiwiX2luaXRpYWxpemVNaWNyb1RpbWVyIiwibWFjcm9TYWNjYWRlIiwibWFjcm9TYWNjYWRlV2FpdFJhbmdlIiwiaExpbWl0IiwiaEZhY3RvciIsInZMaW1pdCIsInZGYWN0b3IiLCJzYWNjYWRlVGFyZ2V0IiwiX2dldEZhY2VUYXJnZXRBbmdsZXMiLCJfaW5pdGlhbGl6ZU1hY3JvVGltZXIiLCJtaW5XYWl0VGltZSIsIm1heFdhaXRUaW1lIiwid2FpdFRpbWUiLCJtaWNyb1NhY2NhZGVUaW1lciIsIl9zZXRNaWNyb1NhY2NhZGUiLCJtYWNyb1NhY2NhZGVUaW1lciIsIl9zZXRNYWNyb1NhY2NhZGUiLCJfYWRkVHJhY2tpbmdDb25maWciLCJoVmVsb2NpdHkiLCJ2VmVsb2NpdHkiLCJfc2V0TG9va0FuZ2xlcyIsIl9yZXNldExvb2tBbmdsZXMiLCJkZWx0YVNlY29uZHMiLCJ0cmlnZ2VyQmxpbmsiLCJjdXJyZW50SCIsImN1cnJlbnRWIiwidGFyZ2V0SCIsInRhcmdldFYiLCJwcmV2VGFyZ2V0SCIsInByZXZUYXJnZXRWIiwiY2hhbmdlQW1vdW50IiwidG9EZWdyZWVzIiwiZ2V0QW5nbGVCZXR3ZWVuIiwiZGFtcFZhbHVlIiwic2V0VGFyZ2V0Iiwic2V0VGFyZ2V0QnlOYW1lIiwic2V0VGFyZ2V0QnlJZCIsIm9iaiIsImZvcndhcmRWZWN0b3IiLCJyb3RhdGlvbiIsImdldFJvdGF0aW9uTWF0cml4IiwiX2dldFdvcmxkTWF0cml4Iiwicm90YXRlVmVjdG9yIiwidGhldGEiLCJwaGkiLCJPYmplY3QzRCIsImdldE9iamVjdEJ5TmFtZSIsImdldE9iamVjdEJ5SWQiLCJ1cGRhdGVXb3JsZE1hdHJpeCIsIm1hdHJpeFdvcmxkIiwiZWxlbWVudHMiLCJDb3JlUG9pbnRPZkludGVyZXN0RmVhdHVyZSIsImVudiIsIlRleHRUb1NwZWVjaFV0aWxzIiwidGV4dCIsInJhbmRvbU1hcmtzIiwiaW50ZXJuYWxNYXAiLCJfcHJvY2Vzc0lucHV0TWFwIiwic3BlYWtUYWdzIiwic3NtbE1hcmtSZWdleCIsInNzbWxUYWdSZWdleCIsImV4aXN0aW5nVGFncyIsImV4ZWMiLCJzdGFydCIsImVuZCIsImNodW5rcyIsInNzbWxNYXJrUmVzdWx0IiwiZHVwbGljYXRlTWFya1RvQ2hlY2siLCJleGlzdGluZ1RhZyIsInN1YnN0ciIsIl9pbnNlcnRNYXJrcyIsIm1hcmtUZXh0IiwibWFya2VkVGV4dCIsImpvaW4iLCJhZGRNYXJrc1RvVW5tYXJrZWRTZW50ZW5jZXMiLCJ2YWxpZGF0ZVRleHQiLCJtYXJrcyIsIm1hcmtJbmRpY2VzIiwibWFya1Jlc3VsdCIsInNzbWxSZXN1bHQiLCJjbGVhbmVkVGV4dCIsImV4aXN0aW5nU3NtbCIsIndoaXRlc3BhY2UiLCJzZW50ZW5jZUVuZEluZGljZXMiLCJfZ2V0U2VudGVuY2VFbmRzIiwicHJldkluZGV4IiwidGFyZ2V0SW5kaWNlcyIsImNvbnRhaW5zTWFyayIsIm1hcmtJbmRleCIsInJhbmRvbU1hcmtlZFRleHQiLCJfaW5zZXJ0UmFuZG9tTWFya3NBdCIsIm9mZnNldCIsInJhbmRvbU1hcmsiLCJzZW50ZW5jZVJlZ2V4IiwiZW5kU2VudGVuY2VSZWdleCIsInNlbnRlbmNlRW5kcyIsInB1bmN0UmVzdWx0IiwiZHVwbGljYXRlc1RvQ2hlY2siLCJ3b3JkUmVnZXgiLCJsb3dlckNhc2VXb3JkIiwiY2hlY2tEdXBsaWNhdGUiLCJtYXJrZWRXb3JkcyIsInRvTG93ZXJDYXNlIiwiZXhpc3RpbmdNYXJrcyIsImxpc3QiLCJpc0FycmF5IiwiQWJzdHJhY3RTcGVlY2giLCJzcGVha2VyIiwic3BlZWNobWFya3MiLCJfc3BlYWtlciIsIl90ZXh0IiwiX3NwZWVjaG1hcmtzIiwiX3NwZWVjaG1hcmtPZmZzZXQiLCJfc3RhcnRUaW1lIiwiX2xvY2FsVGltZSIsIl9wYXVzZVRpbWUiLCJfcGxheWluZyIsIl9tYXJrSXRlciIsIl9jdXJyZW50TWFyayIsIl9lbmRUaW1lIiwiX3Byb21pc2UiLCJvbkludGVycnVwdCIsImludGVycnVwdCIsInNwZWVjaCIsIl9jaGVja0ZpbmlzaGVkIiwiX2NyZWF0ZVByb21pc2UiLCJTcGVlY2giLCJhdWRpb0NvbmZpZyIsIl9hdWRpbyIsImF1ZGlvIiwib25lbmRlZCIsIl9hdWRpb0ZpbmlzaGVkIiwidm9sdW1lIiwic2V0VGltZW91dCIsIl9wbGF5QXVkaW8iLCJfcGF1c2VBdWRpbyIsInRleHRUb1NwZWVjaCIsIl90aHJlZUF1ZGlvIiwidGhyZWVBdWRpbyIsImRpc2Nvbm5lY3QiLCJjb25uZWN0IiwiQ29yZVNwZWVjaCIsImVuZ2luZXMiLCJhdWRpb0Zvcm1hdHMiLCJzcGVlY2htYXJrVHlwZXMiLCJzYW1wbGVSYXRlcyIsIm1wMyIsInJhdGVzIiwiZGVmYXVsdHMiLCJzdGFuZGFyZCIsIm5ldXJhbCIsInBjbSIsIm9nZ192b3JiaXMiLCJhd3NWZXJzaW9uIiwiQWJzdHJhY3RUZXh0VG9TcGVlY2hGZWF0dXJlIiwidm9pY2UiLCJlbmdpbmUiLCJsYW5ndWFnZSIsImF1ZGlvRm9ybWF0Iiwic2FtcGxlUmF0ZSIsIm1pbkVuZE1hcmtEdXJhdGlvbiIsImlzR2xvYmFsIiwiX3NwZWVjaENhY2hlIiwiX2N1cnJlbnRTcGVlY2giLCJfY3VycmVudFByb21pc2UiLCJfaXNWYWxpZGF0ZWQiLCJfaXNHbG9iYWwiLCJfdm9sdW1lUGF1c2VkIiwiX3ZvaWNlIiwiUE9MTFlfREVGQVVMVFMiLCJWb2ljZUlkIiwiX2xhbmd1YWdlIiwiTGFuZ3VhZ2VOYW1lIiwiX2VuZ2luZSIsIkVuZ2luZSIsIl9hdWRpb0Zvcm1hdCIsIk91dHB1dEZvcm1hdCIsIl9zYW1wbGVSYXRlIiwiU2FtcGxlUmF0ZSIsIl9taW5FbmRNYXJrRHVyYXRpb24iLCJBV1NfVkVSU0lPTiIsIlBPTExZX01JTl9ORVVSQUxfVkVSU0lPTiIsImZvcm1hdCIsInJhdGUiLCJ2b2ljZUlkIiwiUE9MTFlfVk9JQ0VTIiwiSWQiLCJTdXBwb3J0ZWRFbmdpbmVzIiwibGFuZ3VhZ2VDb2RlIiwiUE9MTFlfTEFOR1VBR0VTIiwiYXZhaWxhYmxlQ29kZXMiLCJMYW5ndWFnZUNvZGUiLCJBZGRpdGlvbmFsTGFuZ3VhZ2VDb2RlcyIsIlBPTExZX0xBTkdVQUdFX0NPREVTIiwiX3ZhbGlkYXRlRW5naW5lIiwiX3ZhbGlkYXRlRm9ybWF0IiwiX3ZhbGlkYXRlUmF0ZSIsIl92YWxpZGF0ZVZvaWNlIiwiX3ZhbGlkYXRlTGFuZ3VhZ2UiLCJpc1JlYWR5IiwiX3ZhbGlkYXRlIiwic2tpcFNwZWVjaGVzIiwiY3VycmVudENvbmZpZyIsIl9nZXRDb25maWciLCJjdXJyZW50Q29uZmlnU3RyIiwiTGFuZ3VhZ2UiLCJ2YWxpZENvbmZpZyIsImNvbmZpZ1N0ciIsInNwZWVjaENvbmZpZ1N0ciIsIl91cGRhdGVTcGVlY2giLCJhdWRpb1BhcmFtcyIsIlRleHQiLCJUZXh0VHlwZSIsInNwZWVjaG1hcmtQYXJhbXMiLCJTcGVlY2hNYXJrVHlwZXMiLCJfc3ludGhlc2l6ZVNwZWVjaG1hcmtzIiwiX3N5bnRoZXNpemVBdWRpbyIsInJlc3VsdHMiLCJfY3JlYXRlU3BlZWNoIiwicGFyYW1zIiwicHJlc2lnbmVyIiwiZ2V0U3ludGhlc2l6ZVNwZWVjaFVybCIsInVybCIsInBvbGx5Iiwic3ludGhlc2l6ZVNwZWVjaCIsImpzb25TdHJpbmciLCJBdWRpb1N0cmVhbSIsImpzb24iLCJkYXRhU3RyIiwiZGF0YSIsIlN0cmluZyIsImZyb21DaGFyQ29kZSIsIm1hcmtUeXBlcyIsImVuZE1hcmtUeXBlcyIsInNwZWVjaE1hcmtzIiwibWF0Y2hBbGwiLCJudW1NYXJrcyIsImxhc3RNYXJrIiwiZW5kVGltZXMiLCJlbmRUaW1lIiwiX3VwZGF0ZUNvbmZpZyIsImdldFZvbHVtZSIsInNldFZvbHVtZSIsInBhdXNlVm9sdW1lIiwicmVzdW1lVm9sdW1lIiwiX3ZvbHVtZSIsInZvbHVtZVBlbmRpbmciLCJwbGF5aW5nIiwiY3VycmVudFByb21pc2UiLCJfZ2V0U3BlZWNoIiwiX3NldEN1cnJlbnRTcGVlY2giLCJfc3RhcnRTcGVlY2giLCJ2ZXJzaW9uIiwiY3VzdG9tVXNlckFnZW50IiwiX3dpdGhDdXN0b21Vc2VyQWdlbnQiLCJzZXJ2aWNlIiwiX2lzUmVhZHkiLCJhdmFpbGFibGVWb2ljZXMiLCJhdmFpbGFibGVMYW5ndWFnZXMiLCJhdmFpbGFibGVMYW5ndWFnZUNvZGVzIiwibWluTmV1cmFsU2RrIiwiZGVzY3JpYmVWb2ljZXMiLCJyZXNwb25zZSIsImFsbENvZGVzIiwiVm9pY2VzIiwiY29kZSIsInJlYWR5IiwiY3VycmVudFVzZXJBZ2VudCIsInN1bWVyaWFuSG9zdHNVc2VyQWdlbnQiLCJjb25jYXQiLCJMZXhpY29uTmFtZXMiLCJfZW5hYmxlZCIsIl9zZXRBdWRpb0NvbnRleHQiLCJfb2JzZXJ2ZUF1ZGlvQ29udGV4dCIsIl9hdWRpb0NvbnRleHQiLCJBdWRpb0NvbnRleHQiLCJvbnN0YXRlY2hhbmdlIiwiQXVkaW8iLCJsb29wIiwiY3Jvc3NPcmlnaW4iLCJwcmVsb2FkIiwiZG9jdW1lbnQiLCJib2R5IiwiYXBwZW5kQ2hpbGQiLCJsb2FkIiwicmVzdW1lQXVkaW8iLCJlbmFibGVkIiwiYXR0YWNoVG8iLCJfbGlzdGVuZXIiLCJfYXR0YWNoVG8iLCJjb250ZXh0IiwiUG9zaXRpb25hbEF1ZGlvIiwiYWRkIiwic2V0TWVkaWFFbGVtZW50U291cmNlIiwiQ29yZVRleHRUb1NwZWVjaEZlYXR1cmUiLCJ0aHJlZUJsZW5kTW9kZXMiLCJOb3JtYWxBbmltYXRpb25CbGVuZE1vZGUiLCJBZGRpdGl2ZUFuaW1hdGlvbkJsZW5kTW9kZSIsInRocmVlQWN0aW9uIiwiX29uRmluaXNoZWRFdmVudCIsImFjdGlvbiIsInRpbWVTY2FsZVBlbmRpbmciLCJfdGhyZWVBY3Rpb24iLCJjbGFtcFdoZW5GaW5pc2hlZCIsIkxvb3BPbmNlIiwiTG9vcFJlcGVhdCIsInJlcGV0aXRpb25zIiwiZ2V0TWl4ZXIiLCJnZXRDbGlwIiwic2V0RWZmZWN0aXZlV2VpZ2h0IiwiQ29yZVNpbmdsZVN0YXRlIiwiX21peGVyIiwiQW5pbWF0aW9uTWl4ZXIiLCJjbGlwIiwiZXhpc3RpbmdBY3Rpb24iLCJjbG9uZSIsImNsaXBBY3Rpb24iLCJ1bmNhY2hlUm9vdCIsIkNvcmVBbmltYXRpb25GZWF0dXJlIiwiRWFzaW5nIiwiYXdzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7SUFDTUEsUTs7Ozs7QUFDSjtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNFLHNCQUFrRTtBQUFBOztBQUFBLFFBQXREQyxVQUFzRCx1RUFBekMsWUFBTSxDQUFFLENBQWlDO0FBQUEsUUFBL0JDLFNBQStCO0FBQUEsUUFBcEJDLFFBQW9CO0FBQUEsUUFBVkMsUUFBVTs7QUFBQTs7QUFDaEUsUUFBSSxPQUFPSCxVQUFQLEtBQXNCLFVBQTFCLEVBQXNDO0FBQ3BDLFlBQU0sSUFBSUksS0FBSiw4REFBTjtBQUdEOztBQUVELFFBQUksT0FBT0gsU0FBUCxLQUFxQixXQUFyQixJQUFvQyxPQUFPQSxTQUFQLEtBQXFCLFVBQTdELEVBQXlFO0FBQ3ZFLFlBQU0sSUFBSUcsS0FBSiw2REFBTjtBQUdEOztBQUVELFFBQUksT0FBT0YsUUFBUCxLQUFvQixXQUFwQixJQUFtQyxPQUFPQSxRQUFQLEtBQW9CLFVBQTNELEVBQXVFO0FBQ3JFLFlBQU0sSUFBSUUsS0FBSiw0REFBTjtBQUdEOztBQUVELFFBQUksT0FBT0QsUUFBUCxLQUFvQixXQUFwQixJQUFtQyxPQUFPQSxRQUFQLEtBQW9CLFVBQTNELEVBQXVFO0FBQ3JFLFlBQU0sSUFBSUMsS0FBSiw0REFBTjtBQUdEOztBQUVELFFBQUlDLEdBQUo7QUFDQSxRQUFJQyxHQUFKO0FBQ0EsUUFBSUMsTUFBSjtBQUNBLFFBQU1DLE1BQU0sR0FBRztBQUNiQyxjQUFRLEVBQUUsS0FE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cEJhOztBQXFCYjtBQUNGO0FBQ0E7QUFDRTZELFlBQVUsRUFBVkEsbUJBeEJhOztBQXlCYjtBQUNGO0FBQ0E7QUFDRW1HLGdCQUFjLEVBQWRBLG1CQTVCYTs7QUE2QmI7QUFDRjtBQUNBO0FBQ0VnRSxnQkFBYyxFQUFkQSxtQkFoQ2E7O0FBaUNiO0FBQ0Y7QUFDQTtBQUNFOFEsd0JBQXNCLEVBQXRCQSwrQkFwQ2E7O0FBcUNiO0FBQ0Y7QUFDQTtBQUNFeFYsa0JBQWdCLEVBQWhCQSxnQkF4Q2E7O0FBeUNiO0FBQ0Y7QUFDQTtBQUNFK0QscUJBQW1CLEVBQW5CQSxtQkE1Q2E7O0FBNkNiO0FBQ0Y7QUFDQTtBQUNFcVEsU0FBTyxFQUFQQSxPQWhEYTs7QUFpRGI7QUFDRjtBQUNBO0FBQ0UrWSxLQUFHLEVBQUhBLE9BcERhOztBQXFEYjtBQUNGO0FBQ0E7QUFDRTVuQixNQUFJLEVBQUpBLFFBQUlBO0FBeERTLENBQWYiLCJmaWxlIjoiMzMzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXHJcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxyXG5cclxuLyoqXHJcbiAqIFRoZSBidWlsdC1pbiBjbGFzcyBmb3IgYXN5bmNocm9ub3VzIFByb21pc2VzLlxyXG4gKiBAZXh0ZXJuYWwgUHJvbWlzZVxyXG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL1Byb21pc2VcclxuICovXHJcblxyXG4vKipcclxuICogQSBQcm9taXNlIG9iamVjdCB0aGF0IGNhbiBiZSByZXNvbHZlZCwgcmVqZWN0ZWQgb3IgY2FuY2VsZWQgYXQgYW55IHRpbWUgYnkgdGhlXHJcbiAqIHVzZXIuXHJcbiAqXHJcbiAqIEBleHRlbmRzIGV4dGVybmFsOlByb21pc2VcclxuICovXHJcbmNsYXNzIERlZmVycmVkIGV4dGVuZHMgUHJvbWlzZSB7XHJcbiAgLyoqXHJcbiAgICogQGNvbnN0cnVjdG9yXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbZXhlY3V0YWJsZT0oKSA9PiB7fV0gLSBUaGUgZnVuY3Rpb24gdG8gYmUgZXhlY3V0ZWQgYnkgdGhlXHJcbiAgICogY29uc3RydWN0b3IsIGR1cmluZyB0aGUgcHJvY2VzcyBvZiBjb25zdHJ1Y3RpbmcgdGhlIHByb21pc2UuIFRoZSBzaWduYXR1cmVcclxuICAgKiBvZiB0aGlzIGlzIGV4cGVjdGVkIHRvIGJlOiBleGVjdXRhYmxlKCAgcmVzb2x1dGlvbkZ1bmMsIHJlamVjdGlvbkZ1bmMsIGNhbmNlbGxhdGlvbkZ1bmMgKS5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb25SZXNvbHZlIC0gT3B0aW9uYWwgZnVuY3Rpb24gdG8gZXhlY3V0ZSBvbmNlIHRoZSBwcm9taXNlXHJcbiAgICogaXMgcmVzb2x2ZWQuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9uUmVqZWN0IC0gT3B0aW9uYWwgZnVuY3Rpb24gdG8gZXhlY3V0ZSBvbmNlIHRoZSBwcm9taXNlXHJcbiAgICogaXMgcmVqZWN0ZWQuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9uQ2FuY2VsIC0gT3B0aW9uYWwgZnVuY3Rpb24gdG8gZXhlY3V0ZSBpZiB0aGUgdXNlciBjYW5jZWxzXHJcbiAgICogdGhlIHByb21pc2UuIENhbmNlbGluZyByZXN1bHRzIGluIHRoZSBwcm9taXNlIGhhdmluZyBhIHN0YXR1cyBvZiAncmVzb2x2ZWQnLlxyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKGV4ZWN1dGFibGUgPSAoKSA9PiB7fSwgb25SZXNvbHZlLCBvblJlamVjdCwgb25DYW5jZWwpIHtcclxuICAgIGlmICh0eXBlb2YgZXhlY3V0YWJsZSAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgYENhbm5vdCBjcmVhdGUgbmV3IERlZmVycmVkLiBFeGVjdXRhYmxlIG11c3QgYmUgYSBmdW5jdGlvbi5gXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHR5cGVvZiBvblJlc29sdmUgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBvblJlc29sdmUgIT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgIGBDYW5ub3QgY3JlYXRlIG5ldyBEZWZlcnJlZC4gT25SZXNvbHZlIG11c3QgYmUgYSBmdW5jdGlvbi5gXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHR5cGVvZiBvblJlamVjdCAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIG9uUmVqZWN0ICE9PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgQ2Fubm90IGNyZWF0ZSBuZXcgRGVmZXJyZWQuIE9uUmVqZWN0IG11c3QgYmUgYSBmdW5jdGlvbi5gXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHR5cGVvZiBvbkNhbmNlbCAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIG9uQ2FuY2VsICE9PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgQ2Fubm90IGNyZWF0ZSBuZXcgRGVmZXJyZWQuIE9uQ2FuY2VsIG11c3QgYmUgYSBmdW5jdGlvbi5gXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHJlcztcclxuICAgIGxldCByZWo7XHJcbiAgICBsZXQgY2FuY2VsO1xyXG4gICAgY29uc3Qgc3RhdHVzID0ge1xyXG4gICAgICByZXNvbHZlZDogZmFsc2UsXHJcbiAgICAgIHJlamVjdGVkOiBmYWxzZSxcclxuICAgICAgY2FuY2VsZWQ6IGZhbHNlLFxyXG4gICAgICBwZW5kaW5nOiB0cnVlLFxyXG4gICAgfTtcclxuXHJcbiAgICBzdXBlcigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgIC8vIFN0b3JlIHRoZSByZXNvbHZlclxyXG4gICAgICByZXMgPSB2YWx1ZSA9PiB7XHJcbiAgICAgICAgaWYgKHN0YXR1cy5wZW5kaW5nKSB7XHJcbiAgICAgICAgICBzdGF0dXMucmVzb2x2ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgc3RhdHVzLnBlbmRpbmcgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICBpZiAodHlwZW9mIG9uUmVzb2x2ZSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IG9uUmVzb2x2ZSh2YWx1ZSk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgcmV0dXJuIHJlc29sdmUodmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfTtcclxuXHJcbiAgICAgIC8vIFN0b3JlIHRoZSByZWplY3RlclxyXG4gICAgICByZWogPSB2YWx1ZSA9PiB7XHJcbiAgICAgICAgaWYgKHN0YXR1cy5wZW5kaW5nKSB7XHJcbiAgICAgICAgICBzdGF0dXMucmVqZWN0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgc3RhdHVzLnBlbmRpbmcgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICBpZiAodHlwZW9mIG9uUmVqZWN0ID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIHZhbHVlID0gb25SZWplY3QodmFsdWUpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHJldHVybiByZWplY3QodmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfTtcclxuXHJcbiAgICAgIC8vIFN0b3JlIHRoZSBjYW5jZWxlclxyXG4gICAgICBjYW5jZWwgPSB2YWx1ZSA9PiB7XHJcbiAgICAgICAgaWYgKHN0YXR1cy5wZW5kaW5nKSB7XHJcbiAgICAgICAgICBzdGF0dXMuY2FuY2VsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgc3RhdHVzLnBlbmRpbmcgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICBpZiAodHlwZW9mIG9uQ2FuY2VsID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIHZhbHVlID0gb25DYW5jZWwodmFsdWUpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHJldHVybiByZXNvbHZlKHZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH07XHJcblxyXG4gICAgICAvLyBSdW4gdGhlIGV4ZWN1dGFibGUgd2l0aCBjdXN0b20gcmVzb2x2ZXIgYW5kIHJlamVjdGVyXHJcbiAgICAgIGV4ZWN1dGFibGUocmVzLCByZWosIGNhbmNlbCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLl9zdGF0dXMgPSBzdGF0dXM7XHJcbiAgICB0aGlzLl9yZXNvbHZlID0gcmVzO1xyXG4gICAgdGhpcy5fcmVqZWN0ID0gcmVqO1xyXG4gICAgdGhpcy5fY2FuY2VsID0gY2FuY2VsO1xyXG4gICAgdGhpcy5fZXhlY3V0YWJsZSA9IGV4ZWN1dGFibGU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSByZXNvbHZlZCBzdGF0ZSBvZiB0aGUgcHJvbWlzZS5cclxuICAgKlxyXG4gICAqIEByZWFkb25seVxyXG4gICAqL1xyXG4gIGdldCByZXNvbHZlZCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9zdGF0dXMucmVzb2x2ZWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSByZWplY3RlZCBzdGF0ZSBvZiB0aGUgcHJvbWlzZS5cclxuICAgKlxyXG4gICAqIEByZWFkb25seVxyXG4gICAqL1xyXG4gIGdldCByZWplY3RlZCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9zdGF0dXMucmVqZWN0ZWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSBjYW5jZWxlZCBzdGF0ZSBvZiB0aGUgcHJvbWlzZS5cclxuICAgKlxyXG4gICAqIEByZWFkb25seVxyXG4gICAqL1xyXG4gIGdldCBjYW5jZWxlZCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9zdGF0dXMuY2FuY2VsZWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSBwZW5kaW5nIHN0YXRlIG9mIHRoZSBwcm9taXNlLlxyXG4gICAqXHJcbiAgICogQHJlYWRvbmx5XHJcbiAgICovXHJcbiAgZ2V0IHBlbmRpbmcoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fc3RhdHVzLnBlbmRpbmc7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGb3JjZSB0aGUgcHJvbWlzZSB0byByZXNvbHZlLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHthbnk9fSB2YWx1ZSAtIFZhbHVlIHRvIHBhc3MgdG8gdGhlIHJlc29sdmVyLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge2FueX0gLSBUaGUgcmV0dXJuIHZhbHVlIG9mIHRoZSByZXNvbHZlciBmdW5jdGlvbi5cclxuICAgKi9cclxuICByZXNvbHZlKHZhbHVlKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fcmVzb2x2ZSh2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGb3JjZSB0aGUgcHJvbWlzZSB0byByZWplY3QuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge2FueT19IHZhbHVlIC0gVmFsdWUgdG8gcGFzcyB0byB0aGUgcmVqZWN0ZXIuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7YW55fSAtIFRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIHJlamVjdGVyIGZ1bmN0aW9uLlxyXG4gICAqL1xyXG4gIHJlamVjdCh2YWx1ZSkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3JlamVjdCh2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGb3JjZSB0aGUgcHJvbWlzZSB0byByZXNvbHZlIGFuZCBzZXQgdGhlIGNhbmNlbGVkIHN0YXRlIHRvIHRydWUuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge2FueT19IHZhbHVlIC0gVmFsdWUgdG8gcGFzcyB0byB0aGUgY2FuY2VsbGVyLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge2FueX0gLSBUaGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBjYW5jZWxsZXIgZnVuY3Rpb24uXHJcbiAgICovXHJcbiAgY2FuY2VsKHZhbHVlKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fY2FuY2VsKHZhbHVlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJ1biB0aGUgcHJvbWlzZSBmdW5jdGlvbiB0byB0cnkgdG8gcmVzb2x2ZSB0aGUgcHJvbWlzZS4gUHJvbWlzZSBtdXN0IGJlXHJcbiAgICogcGVuZGluZy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7Li4uYW55fSBhcmdzIC0gT3B0aW9uYWwgYXJndW1lbnRzIHRvIHBhc3MgYWZ0ZXIgcmVzb2x2ZSBhbmQgcmVqZWN0LlxyXG4gICAqL1xyXG4gIGV4ZWN1dGUoLi4uYXJncykge1xyXG4gICAgaWYgKHRoaXMucGVuZGluZykge1xyXG4gICAgICB0aGlzLl9leGVjdXRhYmxlKHRoaXMuX3Jlc29sdmUsIHRoaXMuX3JlamVjdCwgdGhpcy5fY2FuY2VsLCAuLi5hcmdzKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiBhIGNhbmNlbGVkIGRlZmVycmVkIHByb21pc2UuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge2FueT19IHZhbHVlIC0gVmFsdWUgdG8gY2FuY2VsIHRoZSBwcm9taXNlIHdpdGguXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7RGVmZXJyZWR9XHJcbiAgICovXHJcbiAgc3RhdGljIGNhbmNlbCh2YWx1ZSkge1xyXG4gICAgcmV0dXJuIG5ldyBEZWZlcnJlZCgoX3Jlc29sdmUsIF9yZWplY3QsIGNhbmNlbCkgPT4ge1xyXG4gICAgICBjYW5jZWwodmFsdWUpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVmZXJyZWQgcHJvbWlzZSB0aGF0IHdpbGwgcmVzb2x2ZSBvciByZWplY3Qgb25jZSBhbGwgcHJvbWlzZXNcclxuICAgKiBpbiB0aGUgaW5wdXQgYXJyYXkgaGF2ZSBiZWVuIHJlc29sdmVkIG9yIG9uZSBwcm9taXNlIGlzIGNhbmNlbGVkIG9yIHJlamVjdGVkLlxyXG4gICAqIFByb21pc2VzIGluIHRoZSBhcnJheSB0aGF0IGFyZSBEZWZlcnJlZCBwcm9taXNlcyB3aWxsIGJlIG1hbnVhbGx5IHJlc29sdmVkLFxyXG4gICAqIHJlamVjdGVkIG9yIGNhbmNlbGVkIHdoZW4gY2FsbGluZyByZXNvbHZlLCByZWplY3Qgb3IgY2FuY2VsIG9uIHRoZSByZXR1cm4gcHJvbWlzZS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7QXJyYXkuPGFueT59IGl0ZXJhYmxlIC0gQW4gaXRlcmFibGUgc3VjaCBhcyBhbiBhcnJheS5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb25SZXNvbHZlIC0gT3B0aW9uYWwgZnVuY3Rpb24gdG8gZXhlY3V0ZSBvbmNlIHRoZSBwcm9taXNlXHJcbiAgICogaXMgcmVzb2x2ZWQuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9uUmVqZWN0IC0gT3B0aW9uYWwgZnVuY3Rpb24gdG8gZXhlY3V0ZSBvbmNlIHRoZSBwcm9taXNlXHJcbiAgICogaXMgcmVqZWN0ZWQuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9uQ2FuY2VsIC0gT3B0aW9uYWwgZnVuY3Rpb24gdG8gZXhlY3V0ZSBpZiB0aGUgdXNlciBjYW5jZWxzXHJcbiAgICogdGhlIHByb21pc2UuIENhbmNlbGluZyByZXN1bHRzIGluIHRoZSBwcm9taXNlIGhhdmluZyBhIHN0YXR1cyBvZiAnY2FuY2VsZWQnLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMgRGVmZXJyZWRcclxuICAgKi9cclxuICBzdGF0aWMgYWxsKGl0ZXJhYmxlLCBvblJlc29sdmUsIG9uUmVqZWN0LCBvbkNhbmNlbCkge1xyXG4gICAgaWYgKGl0ZXJhYmxlID09IG51bGwgfHwgdHlwZW9mIGl0ZXJhYmxlW1N5bWJvbC5pdGVyYXRvcl0gIT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgbGV0IGUgPSBgQ2Fubm90IGV4ZWN1dGUgRGVmZXJyZWQuYWxsLiBGaXJzdCBhcmd1bWVudCBtdXN0IGJlIGl0ZXJhYmxlLmA7XHJcblxyXG4gICAgICBpZiAodHlwZW9mIG9uUmVqZWN0ID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgZSA9IG9uUmVqZWN0KGUpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gRGVmZXJyZWQucmVqZWN0KGUpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGFycmF5ID0gWy4uLml0ZXJhYmxlXTtcclxuICAgIGNvbnN0IGRlZmVycmVkID0gYXJyYXkuZmlsdGVyKGl0ZW0gPT4gaXRlbSBpbnN0YW5jZW9mIERlZmVycmVkKTtcclxuXHJcbiAgICBjb25zdCByZXN1bHQgPSBuZXcgRGVmZXJyZWQoXHJcbiAgICAgIHVuZGVmaW5lZCxcclxuICAgICAgcmVzb2x2ZVZhbHVlID0+IHtcclxuICAgICAgICBkZWZlcnJlZC5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgaXRlbS5yZXNvbHZlKHJlc29sdmVWYWx1ZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgZGVmZXJyZWQubGVuZ3RoID0gMDtcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiBvblJlc29sdmUgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgIHJldHVybiBvblJlc29sdmUocmVzb2x2ZVZhbHVlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmV0dXJuIHJlc29sdmVWYWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yID0+IHtcclxuICAgICAgICBkZWZlcnJlZC5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgaXRlbS5yZWplY3QoZXJyb3IpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGRlZmVycmVkLmxlbmd0aCA9IDA7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2Ygb25SZWplY3QgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgIHJldHVybiBvblJlamVjdChlcnJvcik7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJldHVybiBlcnJvcjtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIGNhbmNlbFZhbHVlID0+IHtcclxuICAgICAgICBkZWZlcnJlZC5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgaXRlbS5jYW5jZWwoY2FuY2VsVmFsdWUpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGRlZmVycmVkLmxlbmd0aCA9IDA7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2Ygb25DYW5jZWwgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgIHJldHVybiBvbkNhbmNlbChjYW5jZWxWYWx1ZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJldHVybiBjYW5jZWxWYWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICk7XHJcblxyXG4gICAgY29uc3QgbnVtSXRlbXMgPSBhcnJheS5sZW5ndGg7XHJcbiAgICBjb25zdCBpdGVtVHJhY2tlciA9IHtcclxuICAgICAgZmFpbGVkOiBmYWxzZSxcclxuICAgICAgbnVtUmVzb2x2ZWQ6IDAsXHJcbiAgICAgIHJlc29sdXRpb25zOiBbXVxyXG4gICAgfVxyXG5cclxuICAgIGFycmF5LmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XHJcbiAgICAgIGlmIChpdGVtVHJhY2tlci5mYWlsZWQpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH0gZWxzZSBpZiAoIShpdGVtIGluc3RhbmNlb2YgUHJvbWlzZSkpIHtcclxuICAgICAgICBpdGVtVHJhY2tlci5yZXNvbHV0aW9uc1tpbmRleF0gPSBpdGVtO1xyXG4gICAgICAgIGl0ZW1UcmFja2VyLm51bVJlc29sdmVkICs9IDE7XHJcblxyXG4gICAgICAgIGlmIChpdGVtVHJhY2tlci5udW1SZXNvbHZlZCA9PT0gbnVtSXRlbXMpIHtcclxuICAgICAgICAgIHJlc3VsdC5yZXNvbHZlKGl0ZW1UcmFja2VyLnJlc29sdXRpb25zKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpdGVtLnRoZW4oXHJcbiAgICAgICAgdmFsdWUgPT4ge1xyXG4gICAgICAgICAgaWYgKCFpdGVtVHJhY2tlci5mYWlsZWQgJiYgIWl0ZW0uY2FuY2VsZWQpIHtcclxuICAgICAgICAgICAgaXRlbVRyYWNrZXIucmVzb2x1dGlvbnNbaW5kZXhdID0gdmFsdWU7XHJcbiAgICAgICAgICAgIGl0ZW1UcmFja2VyLm51bVJlc29sdmVkICs9IDE7XHJcblxyXG4gICAgICAgICAgICBpZiAoaXRlbVRyYWNrZXIubnVtUmVzb2x2ZWQgPT09IG51bUl0ZW1zKSB7XHJcbiAgICAgICAgICAgICAgcmVzdWx0LnJlc29sdmUoaXRlbVRyYWNrZXIucmVzb2x1dGlvbnMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKCFpdGVtVHJhY2tlci5mYWlsZWQpIHtcclxuICAgICAgICAgICAgaXRlbVRyYWNrZXIuZmFpbGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgcmVzdWx0LmNhbmNlbCh2YWx1ZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvciA9PiB7XHJcbiAgICAgICAgICBpZiAoIWl0ZW1UcmFja2VyLmZhaWxlZCkge1xyXG4gICAgICAgICAgICBpdGVtVHJhY2tlci5mYWlsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICByZXN1bHQucmVqZWN0KGVycm9yKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgRGVmZXJyZWQ7XHJcbiIsIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxyXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTBcclxuaW1wb3J0IERlZmVycmVkIGZyb20gJ2NvcmUvRGVmZXJyZWQnO1xyXG5cclxuLyoqXHJcbiAqIEEgY29sbGVjdGlvbiBvZiB1c2VmdWwgZ2VuZXJpYyBmdW5jdGlvbnMuXHJcbiAqXHJcbiAqIEBoaWRlY29uc3RydWN0b3JcclxuICovXHJcbmNsYXNzIFV0aWxzIHtcclxuICAvKipcclxuICAgKiBAc3RhdGljXHJcbiAgICpcclxuICAgKiBHZW5lcmF0ZSBhIHVuaXF1ZSBpZFxyXG4gICAqXHJcbiAgICogQHJldHVybnMge1N0cmluZ31cclxuICAgKi9cclxuICBzdGF0aWMgY3JlYXRlSWQoKSB7XHJcbiAgICByZXR1cm4gJ3h4eHh4eHh4eHh4eDR4eHh5eHh4eHh4eHh4eHh4eHh4Jy5yZXBsYWNlKC9beHldL2csIGMgPT4ge1xyXG4gICAgICBjb25zdCByYW5kb21OdW1iZXIgPSBNYXRoLmZsb29yKChEYXRlLm5vdygpICsgTWF0aC5yYW5kb20oKSAqIDE2KSAlIDE2KTtcclxuICAgICAgaWYgKGMgPT09ICd4Jykge1xyXG4gICAgICAgIHJldHVybiByYW5kb21OdW1iZXIudG9TdHJpbmcoMTYpO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIFNldCBiaXQgNiBhbmQgNyB0byAwIGFuZCAxXHJcbiAgICAgIHJldHVybiAoKHJhbmRvbU51bWJlciAmIDB4MykgfCAweDgpLnRvU3RyaW5nKDE2KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQHN0YXRpY1xyXG4gICAqXHJcbiAgICogQ2hlY2sgYSBuYW1lIHN0cmluZyBhZ2FpbnN0IGFuIGFycmF5IG9mIHN0cmluZ3MgdG8gZGV0ZXJtaW5lIGlmIGl0IGlzIHVuaXF1ZS5cclxuICAgKiBJZiBpdCBpc24ndCwgYXBwZW5kIGluY3JlbWVudGVkIHRyYWlsaW5nIGludGVnZXJzIHRvIHRoZSBlbmQgb2YgdGhlIG5hbWVcclxuICAgKiB1bnRpbCBpdCBpcyB1bmlxdWUuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIFN0cmluZyBuYW1lIHRvIG1ha2UgdW5pcXVlLlxyXG4gICAqIEBwYXJhbSB7QXJyYXkuPHN0cmluZz49fSBuYW1lQXJyYXkgLSBBcnJheSBvZiBzdHJpbmcgbmFtZXMgdG8gY2hlY2sgYWdhaW5zLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge3N0cmluZ31cclxuICAgKi9cclxuICBzdGF0aWMgZ2V0VW5pcXVlTmFtZShuYW1lLCBuYW1lQXJyYXkgPSBbXSkge1xyXG4gICAgLy8gSWYgdGhlIG5hbWUgaXNuJ3QgaW4gdGhlIGFycmF5IHJldHVybiBpdCByaWdodCBhd2F5XHJcbiAgICBpZiAoIW5hbWVBcnJheS5pbmNsdWRlcyhuYW1lKSkge1xyXG4gICAgICByZXR1cm4gbmFtZTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBuYW1lU2V0ID0gbmV3IFNldChuYW1lQXJyYXkpO1xyXG5cclxuICAgIC8vIFNlcGFyYXRlIHRoZSBuYW1lIGludG8gc3RyaW5nIGFuZCB0cmFpbGluZyBudW1iZXJzXHJcbiAgICBjb25zdCBtYXRjaEdyb3VwID0gbmFtZS5tYXRjaCgvXFxkKiQvKTtcclxuICAgIGNvbnN0IHtpbmRleH0gPSBtYXRjaEdyb3VwO1xyXG4gICAgY29uc3QgYmFzZU5hbWUgPSBuYW1lLnNsaWNlKDAsIGluZGV4KTtcclxuICAgIGxldCBpbmNyZW1lbnQgPSBOdW1iZXIobWF0Y2hHcm91cFswXSk7XHJcblxyXG4gICAgLy8gRmluZCB0aGUgaGlnaGVzdCB0cmFpbGluZyBudW1iZXIgdmFsdWUgZm9yIHRoZSBiYXNlIG9mIHRoZSBuYW1lXHJcbiAgICBuYW1lU2V0LmZvckVhY2goc2V0TmFtZSA9PiB7XHJcbiAgICAgIGNvbnN0IHNldE1hdGNoR3JvdXAgPSBzZXROYW1lLm1hdGNoKC9cXGQqJC8pO1xyXG5cclxuICAgICAgaWYgKHNldE5hbWUuc2xpY2UoMCwgc2V0TWF0Y2hHcm91cC5pbmRleCkgPT09IGJhc2VOYW1lKSB7XHJcbiAgICAgICAgY29uc3Qgc2V0SW5jcmVtZW50ID0gTnVtYmVyKHNldE1hdGNoR3JvdXBbMF0pO1xyXG5cclxuICAgICAgICBpZiAoc2V0SW5jcmVtZW50ID4gaW5jcmVtZW50KSB7XHJcbiAgICAgICAgICBpbmNyZW1lbnQgPSBzZXRJbmNyZW1lbnQ7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBJbmNyZW1lbnQgdGhlIGhpZ2hlc3QgdHJhaWxpbmcgbnVtYmVyIGFuZCBhcHBlbmQgdG8gdGhlIG5hbWVcclxuICAgIHJldHVybiBgJHtiYXNlTmFtZX0ke2luY3JlbWVudCArIDF9YDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiBhIGRlZmVycmVkIHByb21pc2UgdGhhdCB3aWxsIHdhaXQgYSBnaXZlbiBudW1iZXIgb2Ygc2Vjb25kcyBiZWZvcmVcclxuICAgKiByZXNvbHZpbmcuIFBhc3MgZGVsdGEgdGltZSBpbiBtaWxsaXNlY29uZHMgdG8gdGhlIGRlZmVycmVkIHByb21pc2UncyBleGVjdXRlXHJcbiAgICogbWV0aG9kIGluIGFuIHVwZGF0ZSBsb29wIHRvIHByb2dyZXNzIHRpbWUuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge251bWJlcn0gW3NlY29uZHM9MF0gLSBOdW1iZXIgb2Ygc2Vjb25kcyB0byB3YWl0IGJlZm9yZSByZXNvbHZpbmcuXHJcbiAgICogQHBhcmFtIHtPYmplY3Q9fSBvcHRpb25zIC0gT3B0aW9uYWwgb3B0aW9ucyBvYmplY3RcclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0aW9ucy5vbkZpbmlzaF0gLSBDYWxsYmFjayB0byBleGVjdXRlIG9uY2UgdGhlIHdhaXQgdGltZVxyXG4gICAqIGlzIG1ldC5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb3B0aW9ucy5vblByb2dyZXNzIC0gQ2FsbGJhY2sgdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIHdhaXRcclxuICAgKiB0aW1lIHByb2dyZXNzZXMgdG93YXJkcyB0aGUgdGFyZ2V0IG51bWJlciBvZiBzZWNvbmRzLiBUaGUgYW1vdW50IG9mIHByb2dyZXNzXHJcbiAgICogYXMgYSAwLTEgcGVyY2VudGFnZSBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnQuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9wdGlvbnMub25DYW5jZWwgLSBDYWxsYmFjayB0byBleGVjdXRlIGlmIHRoZSB1c2VyIGNhbmNlbHNcclxuICAgKiB0aGUgd2FpdCBiZWZvcmUgY29tcGxldGlvbi5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb3B0aW9ucy5vbkVycm9yIC0gQ2FsbGJhY2sgdG8gZXhlY3V0ZSBpZiB0aGUgd2FpdCBzdG9wc1xyXG4gICAqIGJlY2F1c2UgYW4gZXJyb3IgaXMgZW5jb3VudGVyZWQuIFRoZSBlcnJvciBtZXNzYWdlIGlzIHBhc3NlZCBhcyBhIHBhcmFtZXRlci5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtEZWZlcnJlZH1cclxuICAgKi9cclxuICBzdGF0aWMgd2FpdChzZWNvbmRzID0gMCwge29uRmluaXNoLCBvblByb2dyZXNzLCBvbkNhbmNlbCwgb25FcnJvcn0gPSB7fSkge1xyXG4gICAgLy8gTWFrZSBzdXJlIHNlY29uZHMgaXMgbnVtZXJpY1xyXG4gICAgaWYgKHR5cGVvZiBzZWNvbmRzICE9PSAnbnVtYmVyJykge1xyXG4gICAgICBjb25zb2xlLndhcm4oXHJcbiAgICAgICAgYEludmFsaWQgc2Vjb25kcyB2YWx1ZSAke3NlY29uZHN9IGZvciB3YWl0LiBEZWZhdWx0aW5nIHRvIDAuYFxyXG4gICAgICApO1xyXG5cclxuICAgICAgc2Vjb25kcyA9IDA7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUmVzb2x2ZSBpbW1lZGlhdGVseSBpZiB0aGUgd2FpdCB0aW1lIGlzIG5vdCBncmVhdGVyIHRoYW4gMFxyXG4gICAgaWYgKHNlY29uZHMgPD0gMCkge1xyXG4gICAgICBpZiAodHlwZW9mIG9uRmluaXNoID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgb25GaW5pc2goKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIERlZmVycmVkLnJlc29sdmUoKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgY3VycmVudFRpbWUgPSAwO1xyXG4gICAgY29uc3QgdG90YWxUaW1lID0gc2Vjb25kcyAqIDEwMDA7IC8vIGNvbnZlcnQgdG8gbWlsbGlzZWNvbmRzXHJcblxyXG4gICAgLy8gRXhlY3V0YWJsZSB0byBwYXNzIHRvIERlZmVycmVkLCBtZWFudCB0byBiZSBydW4gaW4gYW4gdXBkYXRlIGxvb3BcclxuICAgIGNvbnN0IG9uVXBkYXRlID0gKHJlc29sdmUsIHJlamVjdCwgX2NhbmNlbCwgZGVsdGFUaW1lID0gMCkgPT4ge1xyXG4gICAgICBpZiAodHlwZW9mIGRlbHRhVGltZSAhPT0gJ251bWJlcicpIHtcclxuICAgICAgICBjb25zdCBlID0gbmV3IEVycm9yKFxyXG4gICAgICAgICAgYEludmFsaWQgcHJvcGVydHkgd2FpdCBkZWx0YVRpbWUuIERlbHRhVGltZSBtdXN0IGJlIGEgbnVtYmVyLmBcclxuICAgICAgICApO1xyXG4gICAgICAgIHJlamVjdChlKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIE1ha2Ugc3VyZSB0aW1lIGhhcyBwYXNzZWRcclxuICAgICAgaWYgKGRlbHRhVGltZSA9PT0gMCkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gU2lnbmFsIHByb2dyZXNzXHJcbiAgICAgIGN1cnJlbnRUaW1lICs9IGRlbHRhVGltZTtcclxuICAgICAgaWYgKGN1cnJlbnRUaW1lIDwgMCkge1xyXG4gICAgICAgIGN1cnJlbnRUaW1lID0gMDtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHR5cGVvZiBvblByb2dyZXNzID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgb25Qcm9ncmVzcyhNYXRoLm1pbihjdXJyZW50VGltZSAvIHRvdGFsVGltZSwgMSkpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBTaWduYWwgY29tcGxldGlvbiBvbmNlIHRpbWUgaXMgdXBcclxuICAgICAgaWYgKGN1cnJlbnRUaW1lID49IHRvdGFsVGltZSkge1xyXG4gICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gbmV3IERlZmVycmVkKG9uVXBkYXRlLCBvbkZpbmlzaCwgb25FcnJvciwgb25DYW5jZWwpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICAqIEdldCBhIHJhbmRvbSBmbG9hdCBudW1iZXIgYmV0d2VlbiBhIG1pbiAoaW5jbHVzaXZlKSBhbmQgbWF4IChleGNsdXNpdmUpIHZhbHVlXHJcbiAgICAqIEBwYXJhbSB7bnVtYmVyfSBtaW4gbWluaW11bSB2YWx1ZVxyXG4gICAgKiBAcGFyYW0ge251bWJlcn0gbWF4IG1heGltdW0gdmFsdWVcclxuICAgICogQHJldHVybnMge2Zsb2F0fVxyXG4gICAgKi9cclxuICBzdGF0aWMgZ2V0UmFuZG9tRmxvYXQobWluLCBtYXgpIHtcclxuICAgIHJldHVybiBNYXRoLnJhbmRvbSgpICogKG1heCAtIG1pbikgKyBtaW47XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgICogR2V0IGEgcmFuZG9tIGludGVnZXIgbnVtYmVyIGJldHdlZW4gYSBtaW4gKGluY2x1c2l2ZSkgYW5kIG1heCAoZXhjbHVzaXZlKSB2YWx1ZVxyXG4gICAgKiBAcGFyYW0ge251bWJlcn0gbWluIG1pbmltdW0gdmFsdWVcclxuICAgICogQHBhcmFtIHtudW1iZXJ9IG1heCBtYXhpbXVtIHZhbHVlXHJcbiAgICAqIEByZXR1cm5zIHtpbnRlZ2VyfVxyXG4gICAgKi9cclxuICBzdGF0aWMgZ2V0UmFuZG9tSW50KG1pbiwgbWF4KSB7XHJcbiAgICBtaW4gPSBNYXRoLmNlaWwobWluKTtcclxuICAgIG1heCA9IE1hdGguZmxvb3IobWF4KTtcclxuICAgIHJldHVybiBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAobWF4IC0gbWluKSkgKyBtaW47XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBVdGlscztcclxuIiwiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXHJcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxyXG5jb25zdCBSYWRpYW5Ub0RlZ3JlZSA9IDE4MCAvIE1hdGguUEk7XHJcbmNvbnN0IERlZ3JlZVRvUmFkaWFuID0gTWF0aC5QSSAvIDE4MDtcclxuXHJcbi8qKlxyXG4gKiBBIGNvbGxlY3Rpb24gb2YgdXNlZnVsIG1hdGggZnVuY3Rpb25zLlxyXG4gKlxyXG4gKiBAaGlkZWNvbnN0cnVjdG9yXHJcbiAqL1xyXG5jbGFzcyBNYXRoVXRpbHMge1xyXG4gIC8qKlxyXG4gICAqIENvbnZlcnQgdGhlIGdpdmVuIGFuZ2xlIGZyb20gcmFkaWFucyB0byBkZWdyZWVzLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IHJhZGlhbnMgLSBBbmdsZSBpbiByYWRpYW5zLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge251bWJlcn0gLSBBbmdsZSBpbiBkZWdyZWVzLlxyXG4gICAqL1xyXG4gIHN0YXRpYyB0b0RlZ3JlZXMocmFkaWFucykge1xyXG4gICAgcmV0dXJuIHJhZGlhbnMgKiBSYWRpYW5Ub0RlZ3JlZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENvbnZlcnQgdGhlIGdpdmVuIGFuZ2xlIGZyb20gZGVncmVlcyB0byByYWRpYW5zLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IGRlZ3JlZXMgLSBBbmdsZSBpbiBkZWdyZWVzLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge251bWJlcn0gLSBBbmdsZSBpbiByYWRpYW5zLlxyXG4gICAqL1xyXG4gIHN0YXRpYyB0b1JhZGlhbnMoZGVncmVlcykge1xyXG4gICAgcmV0dXJuIGRlZ3JlZXMgKiBEZWdyZWVUb1JhZGlhbjtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIExpbmVhcmx5IGludGVycG9sYXRlIGJldHdlZW4gdHdvIHZhbHVlcy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBmcm9tIC0gU3RhcnQgdmFsdWUuXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IHRvIC0gVGFyZ2V0IHZhbHVlLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBmYWN0b3IgLSAwLTEgYW1vdW50IHRvIGludGVycG9sYXRlIGJldHdlZW4gZnJvbSBhbmQgdG8uXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxyXG4gICAqL1xyXG4gIHN0YXRpYyBsZXJwKGZyb20sIHRvLCBmYWN0b3IpIHtcclxuICAgIHJldHVybiBmcm9tICsgKHRvIC0gZnJvbSkgKiBmYWN0b3I7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDbGFtcCBhIG51bWJlciBiZXR3ZWVuIDIgdmFsdWVzLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIC0gVmFsdWUgdG8gY2xhbXAuXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IFttaW49MF0gLSBNaW51bXVtIHZhbHVlLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbbWF4PTFdIC0gTWF4aW11bSB2YWx1ZS5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XHJcbiAgICovXHJcbiAgc3RhdGljIGNsYW1wKHZhbHVlLCBtaW4gPSAwLCBtYXggPSAxKSB7XHJcbiAgICByZXR1cm4gTWF0aC5tYXgobWluLCBNYXRoLm1pbih2YWx1ZSwgbWF4KSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDYWxjdWxhdGVzIHRoZSBjbG9zZXN0IHBvaW50IG9uIGEgZ2l2ZW4gMkQgbGluZSBzZWdlbWVudFxyXG4gICAqIGZyb20gYSBnaXZlbiAyRCBwb2ludC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IGEgLSBGaXJzdCBwb2ludCBvbiBsaW5lIHNlZ21lbnQuXHJcbiAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gYiAtIFNlY29uZCBwb2ludCBvbiBsaW5lIHNlZ21lbnQuXHJcbiAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gcCAtIDJEIHBvaW50LlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0FycmF5LjxudW1iZXI+fVxyXG4gICAqL1xyXG4gIHN0YXRpYyBjbG9zZXN0UG9pbnRPbkxpbmUoYSwgYiwgcCkge1xyXG4gICAgY29uc3QgZGlzdFNxciA9IE1hdGhVdGlscy5kaXN0YW5jZVNxdWFyZWQoYSwgYik7XHJcblxyXG4gICAgLy8gTGluZSBzZWdtZW50IGlzIGEgc2luZ2xlIHBvaW50XHJcbiAgICBpZiAoZGlzdFNxciA9PT0gMCkge1xyXG4gICAgICByZXR1cm4gYTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0ID1cclxuICAgICAgKChwWzBdIC0gYVswXSkgKiAoYlswXSAtIGFbMF0pICsgKHBbMV0gLSBhWzFdKSAqIChiWzFdIC0gYVsxXSkpIC8gZGlzdFNxcjtcclxuXHJcbiAgICBsZXQgcG9pbnQgPSBbLi4uYV07XHJcbiAgICBpZiAodCA+IDEpIHtcclxuICAgICAgcG9pbnQgPSBbLi4uYl07XHJcbiAgICB9IGVsc2UgaWYgKHQgPiAwKSB7XHJcbiAgICAgIHBvaW50ID0gW2FbMF0gKyB0ICogKGJbMF0gLSBhWzBdKSwgYVsxXSArIHQgKiAoYlsxXSAtIGFbMV0pXTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcG9pbnQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSBkaXN0YW5jZSBzcXVhcmVkIGZvciB0d28gMkQgcG9pbnRzLlxyXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IGEgLSAyRCBwb2ludC5cclxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBiIC0gMkQgcG9pbnQuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxyXG4gICAqL1xyXG4gIHN0YXRpYyBkaXN0YW5jZVNxdWFyZWQoYSwgYikge1xyXG4gICAgcmV0dXJuIChhWzBdIC0gYlswXSkgKiAoYVswXSAtIGJbMF0pICsgKGFbMV0gLSBiWzFdKSAqIChhWzFdIC0gYlsxXSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUcmlhbmd1bGF0ZXMgYSBzZXQgb2YgMkQgcG9pbnRzIHVzaW5nIGFuIGltcGxlbWVudGF0aW9uXHJcbiAgICogb2YgdGhlIEJvd3llci1XYXRzb24gaW5jcmVtZW50YWwgRGVsYXVuYXkgdHJpYW5ndWxhdGlvbi5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7QXJyYXkuPEFycmF5LjxudW1iZXI+Pn0gdmVydGljZXMgLSBBcnJheSBvZiAyRCBwb2ludHMuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7QXJyYXkuPEFycmF5PG51bWJlcj4+fSAtIEFycmF5IG9mIHRyaWFuZ2xlIGluZGljZXMuXHJcbiAgICovXHJcbiAgc3RhdGljIGdldERlbGF1bmF5VHJpYW5ndWxhdGlvbih2ZXJ0aWNlcykge1xyXG4gICAgaWYgKCF2ZXJ0aWNlcyB8fCB2ZXJ0aWNlcy5sZW5ndGggPCAzKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgQ2Fubm90IGdldCBkZWxhdW5heSB0cmlhbmd1bGF0aW9uIGZvciBwb2ludHMgJHt2ZXJ0aWNlc30uIElucHV0IG11c3QgY29udGFpbiBhdCBsZWFzdCB0aHJlZSBwb2ludHMuYFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBtaW5YID0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO1xyXG4gICAgbGV0IG1pblkgPSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7XHJcbiAgICBsZXQgbWF4WCA9IE51bWJlci5ORUdBVElWRV9JTkZJTklUWTtcclxuICAgIGxldCBtYXhZID0gTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZO1xyXG5cclxuICAgIHZlcnRpY2VzLmZvckVhY2godiA9PiB7XHJcbiAgICAgIG1pblggPSB2WzBdIDwgbWluWCA/IHZbMF0gOiBtaW5YO1xyXG4gICAgICBtaW5ZID0gdlsxXSA8IG1pblkgPyB2WzFdIDogbWluWTtcclxuICAgICAgbWF4WCA9IHZbMF0gPiBtYXhYID8gdlswXSA6IG1heFg7XHJcbiAgICAgIG1heFkgPSB2WzFdID4gbWF4WSA/IHZbMV0gOiBtYXhZO1xyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgZFggPSBtYXhYIC0gbWluWDtcclxuICAgIGNvbnN0IGRZID0gbWF4WSAtIG1pblk7XHJcbiAgICBjb25zdCBtaWRYID0gKG1pblggKyBtYXhYKSAvIDI7XHJcbiAgICBjb25zdCBtaWRZID0gKG1pblkgKyBtYXhZKSAvIDI7XHJcbiAgICBjb25zdCBkTWF4ID0gZFggPiBkWSA/IGRYIDogZFk7XHJcblxyXG4gICAgY29uc3Qgc3VwZXJJbmRpY2VzID0gW1xyXG4gICAgICB2ZXJ0aWNlcy5sZW5ndGgsXHJcbiAgICAgIHZlcnRpY2VzLmxlbmd0aCArIDEsXHJcbiAgICAgIHZlcnRpY2VzLmxlbmd0aCArIDIsXHJcbiAgICBdO1xyXG5cclxuICAgIGNvbnN0IHZlcnRzV2l0aFN1cGVyID0gW1xyXG4gICAgICAuLi52ZXJ0aWNlcyxcclxuICAgICAgW21pZFggLSAyMCAqIGRNYXgsIG1pZFkgLSBkTWF4XSxcclxuICAgICAgW21pZFgsIG1pZFkgKyAyMCAqIGRNYXhdLFxyXG4gICAgICBbbWlkWCArIDIwICogZE1heCwgbWlkWSAtIGRNYXhdLFxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdCBzdXBlclNvcnRlZEluZGljZXMgPSBNYXRoVXRpbHMuc29ydFBvaW50c0NDVyhcclxuICAgICAgc3VwZXJJbmRpY2VzLFxyXG4gICAgICB2ZXJ0c1dpdGhTdXBlclxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCBzdXBlclRyaWFuZ2xlID0ge1xyXG4gICAgICBpbmRpY2VzOiBzdXBlclNvcnRlZEluZGljZXMsXHJcbiAgICAgIGVkZ2VzOiBbXHJcbiAgICAgICAgW3N1cGVyU29ydGVkSW5kaWNlc1swXSwgc3VwZXJTb3J0ZWRJbmRpY2VzWzFdXSxcclxuICAgICAgICBbc3VwZXJTb3J0ZWRJbmRpY2VzWzFdLCBzdXBlclNvcnRlZEluZGljZXNbMl1dLFxyXG4gICAgICAgIFtzdXBlclNvcnRlZEluZGljZXNbMl0sIHN1cGVyU29ydGVkSW5kaWNlc1swXV0sXHJcbiAgICAgIF0sXHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IHRyaWFuZ2xlcyA9IFtzdXBlclRyaWFuZ2xlXTtcclxuXHJcbiAgICB2ZXJ0c1dpdGhTdXBlci5mb3JFYWNoKChuZXdWZXJ0LCBuZXdJbmRleCkgPT4ge1xyXG4gICAgICBjb25zdCBpbnZhbGlkVHJpYW5nbGVzID0gW107XHJcbiAgICAgIHRyaWFuZ2xlcy5mb3JFYWNoKHRyaWFuZ2xlID0+IHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBNYXRoVXRpbHMuaXNQb2ludEluQ2lyY3VtQ2lyY2xlKFxyXG4gICAgICAgICAgICB2ZXJ0c1dpdGhTdXBlclt0cmlhbmdsZS5pbmRpY2VzWzBdXSxcclxuICAgICAgICAgICAgdmVydHNXaXRoU3VwZXJbdHJpYW5nbGUuaW5kaWNlc1sxXV0sXHJcbiAgICAgICAgICAgIHZlcnRzV2l0aFN1cGVyW3RyaWFuZ2xlLmluZGljZXNbMl1dLFxyXG4gICAgICAgICAgICBuZXdWZXJ0XHJcbiAgICAgICAgICApXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBpbnZhbGlkVHJpYW5nbGVzLnB1c2godHJpYW5nbGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgICBjb25zdCBib3VuZGluZ1BvbHkgPSBbXTtcclxuICAgICAgaW52YWxpZFRyaWFuZ2xlcy5mb3JFYWNoKHRyaWFuZ2xlID0+IHtcclxuICAgICAgICB0cmlhbmdsZS5lZGdlcy5mb3JFYWNoKGVkZ2UgPT4ge1xyXG4gICAgICAgICAgbGV0IGNvdW50ID0gMDtcclxuICAgICAgICAgIGludmFsaWRUcmlhbmdsZXMuZm9yRWFjaChvdGhlclRyaWFuZ2xlID0+IHtcclxuICAgICAgICAgICAgaWYgKHRyaWFuZ2xlICE9PSBvdGhlclRyaWFuZ2xlKSB7XHJcbiAgICAgICAgICAgICAgb3RoZXJUcmlhbmdsZS5lZGdlcy5mb3JFYWNoKG90aGVyRWRnZSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgIChlZGdlWzBdID09PSBvdGhlckVkZ2VbMF0gJiYgZWRnZVsxXSA9PT0gb3RoZXJFZGdlWzFdKSB8fFxyXG4gICAgICAgICAgICAgICAgICAoZWRnZVsxXSA9PT0gb3RoZXJFZGdlWzBdICYmIGVkZ2VbMF0gPT09IG90aGVyRWRnZVsxXSlcclxuICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICBjb3VudCArPSAxO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIGlmIChjb3VudCA9PT0gMCkgYm91bmRpbmdQb2x5LnB1c2goZWRnZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgaW52YWxpZFRyaWFuZ2xlcy5mb3JFYWNoKHRyaWFuZ2xlID0+IHtcclxuICAgICAgICB0cmlhbmdsZXMuc3BsaWNlKHRyaWFuZ2xlcy5pbmRleE9mKHRyaWFuZ2xlKSwgMSk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgYm91bmRpbmdQb2x5LmZvckVhY2goZWRnZSA9PiB7XHJcbiAgICAgICAgY29uc3Qgc29ydGVkSW5kaWNlcyA9IE1hdGhVdGlscy5zb3J0UG9pbnRzQ0NXKFxyXG4gICAgICAgICAgW2VkZ2VbMF0sIGVkZ2VbMV0sIG5ld0luZGV4XSxcclxuICAgICAgICAgIHZlcnRzV2l0aFN1cGVyXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgdHJpYW5nbGVzLnB1c2goe1xyXG4gICAgICAgICAgaW5kaWNlczogc29ydGVkSW5kaWNlcyxcclxuICAgICAgICAgIGVkZ2VzOiBbXHJcbiAgICAgICAgICAgIFtzb3J0ZWRJbmRpY2VzWzBdLCBzb3J0ZWRJbmRpY2VzWzFdXSxcclxuICAgICAgICAgICAgW3NvcnRlZEluZGljZXNbMV0sIHNvcnRlZEluZGljZXNbMl1dLFxyXG4gICAgICAgICAgICBbc29ydGVkSW5kaWNlc1syXSwgc29ydGVkSW5kaWNlc1swXV0sXHJcbiAgICAgICAgICBdLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IHRyaWFuZ2xlc1RvUmVtb3ZlID0gW107XHJcbiAgICB0cmlhbmdsZXMuZm9yRWFjaCh0cmlhbmdsZSA9PiB7XHJcbiAgICAgIHRyaWFuZ2xlLmluZGljZXMuZm9yRWFjaChpbmRleCA9PiB7XHJcbiAgICAgICAgaWYgKHN1cGVySW5kaWNlcy5pbmNsdWRlcyhpbmRleCkpIHtcclxuICAgICAgICAgIHRyaWFuZ2xlc1RvUmVtb3ZlLnB1c2godHJpYW5nbGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0cmlhbmdsZXNUb1JlbW92ZS5mb3JFYWNoKHRyaWFuZ2xlID0+IHtcclxuICAgICAgY29uc3QgaW5kZXggPSB0cmlhbmdsZXMuaW5kZXhPZih0cmlhbmdsZSk7XHJcbiAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcclxuICAgICAgICB0cmlhbmdsZXMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIHRyaWFuZ2xlcy5tYXAodHJpYW5nbGUgPT4gdHJpYW5nbGUuaW5kaWNlcyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEZXRlcm1pbmVzIGlmIGEgZ2l2ZW4gMkQgcG9pbnQgaXMgd2l0aGluIHRoZSBjaWNydW1jaXJjbGVcclxuICAgKiBkZWZpbmVkIGJ5IHRocmVlIDJEIHBvaW50cy4gVGhlIHRyaWFuZ2xlIHBvaW50cyBtdXN0IGJlIGluXHJcbiAgICogY291bnRlci1jbG9ja3dpc2Ugb3JkZXIgYSAtPiBiIC0+IGMuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBhIC0gRmlyc3QgdHJpYW5nbGUgcG9pbnQuXHJcbiAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gYiAtIFNlY29uZCB0cmlhbmdsZSBwb2ludC5cclxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBjIC0gVGhpcmQgdHJpYW5nbGUgcG9pbnQuXHJcbiAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gcCAtIDJEIHBvaW50LlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAgICovXHJcbiAgc3RhdGljIGlzUG9pbnRJbkNpcmN1bUNpcmNsZShhLCBiLCBjLCBwKSB7XHJcbiAgICBjb25zdCBheCA9IGFbMF0gLSBwWzBdO1xyXG4gICAgY29uc3QgYXkgPSBhWzFdIC0gcFsxXTtcclxuICAgIGNvbnN0IGJ4ID0gYlswXSAtIHBbMF07XHJcbiAgICBjb25zdCBieSA9IGJbMV0gLSBwWzFdO1xyXG4gICAgY29uc3QgY3ggPSBjWzBdIC0gcFswXTtcclxuICAgIGNvbnN0IGN5ID0gY1sxXSAtIHBbMV07XHJcblxyXG4gICAgcmV0dXJuIChcclxuICAgICAgKGF4ICogYXggKyBheSAqIGF5KSAqIChieCAqIGN5IC0gY3ggKiBieSkgLVxyXG4gICAgICAgIChieCAqIGJ4ICsgYnkgKiBieSkgKiAoYXggKiBjeSAtIGN4ICogYXkpICtcclxuICAgICAgICAoY3ggKiBjeCArIGN5ICogY3kpICogKGF4ICogYnkgLSBieCAqIGF5KSA+XHJcbiAgICAgIDBcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEZXRlcm1pbmVzIGlmIGEgZ2l2ZW4gMkQgcG9pbnQgaXMgd2l0aGluIGEgZ2l2ZW4gdHJpYW5nbGUuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBhIC0gRmlyc3QgdHJpYW5nbGUgcG9pbnQuXHJcbiAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gYiAtIFNlY29uZCB0cmlhbmdsZSBwb2ludC5cclxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBjIC0gVGhpcmQgdHJpYW5nbGUgcG9pbnQuXHJcbiAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gcCAtIDJEIHBvaW50LlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAgICovXHJcbiAgc3RhdGljIGlzUG9pbnRJblRyaWFuZ2xlKGEsIGIsIGMsIHApIHtcclxuICAgIGNvbnN0IGRlbm9tID0gKGJbMV0gLSBjWzFdKSAqIChhWzBdIC0gY1swXSkgKyAoY1swXSAtIGJbMF0pICogKGFbMV0gLSBjWzFdKTtcclxuICAgIGNvbnN0IGFWYWwgPVxyXG4gICAgICAoKGJbMV0gLSBjWzFdKSAqIChwWzBdIC0gY1swXSkgKyAoY1swXSAtIGJbMF0pICogKHBbMV0gLSBjWzFdKSkgLyBkZW5vbTtcclxuICAgIGNvbnN0IGJWYWwgPVxyXG4gICAgICAoKGNbMV0gLSBhWzFdKSAqIChwWzBdIC0gY1swXSkgKyAoYVswXSAtIGNbMF0pICogKHBbMV0gLSBjWzFdKSkgLyBkZW5vbTtcclxuICAgIGNvbnN0IGNWYWwgPSAxIC0gYVZhbCAtIGJWYWw7XHJcblxyXG4gICAgcmV0dXJuIChcclxuICAgICAgYVZhbCA+PSAwICYmIGFWYWwgPD0gMSAmJiBiVmFsID49IDAgJiYgYlZhbCA8PSAxICYmIGNWYWwgPj0gMCAmJiBjVmFsIDw9IDFcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSBzb3J0ZWQgaW5kaWNlcyBvZiBhIGdpdmVuIHNldCBvZiAyRCBwb2ludHMgaW5cclxuICAgKiBjb3VudGVyLWNsb2Nrd2lzZSBvcmRlci5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IGluZGljZXMgLSBMaXN0IG9mIGluZGljZXMuXHJcbiAgICogQHBhcmFtIHtBcnJheS48QXJyYXkuPG51bWJlcj4+fSB2ZXJ0aWNlcyAtIExpc3Qgb2YgMkQgcG9pbnRzLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0FycmF5LjxBcnJheS48bnVtYmVyPj59IC0gTGlzdCBvZiBzb3J0ZWQgaW5kaWNlcy5cclxuICAgKi9cclxuICBzdGF0aWMgc29ydFBvaW50c0NDVyhpbmRpY2VzLCB2ZXJ0aWNlcykge1xyXG4gICAgY29uc3QgY2VudHJvaWQgPSBbMCwgMF07XHJcbiAgICBpbmRpY2VzLmZvckVhY2goaW5kZXggPT4ge1xyXG4gICAgICBjZW50cm9pZFswXSArPSB2ZXJ0aWNlc1tpbmRleF1bMF07XHJcbiAgICAgIGNlbnRyb2lkWzFdICs9IHZlcnRpY2VzW2luZGV4XVsxXTtcclxuICAgIH0pO1xyXG4gICAgY2VudHJvaWRbMF0gLz0gaW5kaWNlcy5sZW5ndGg7XHJcbiAgICBjZW50cm9pZFsxXSAvPSBpbmRpY2VzLmxlbmd0aDtcclxuXHJcbiAgICBpbmRpY2VzLnNvcnQoKGEsIGIpID0+IHtcclxuICAgICAgY29uc3QgYlZhbCA9IE1hdGguYXRhbjIoXHJcbiAgICAgICAgdmVydGljZXNbYl1bMV0gLSBjZW50cm9pZFsxXSxcclxuICAgICAgICB2ZXJ0aWNlc1tiXVswXSAtIGNlbnRyb2lkWzBdXHJcbiAgICAgICk7XHJcbiAgICAgIGNvbnN0IGFWYWwgPSBNYXRoLmF0YW4yKFxyXG4gICAgICAgIHZlcnRpY2VzW2FdWzFdIC0gY2VudHJvaWRbMV0sXHJcbiAgICAgICAgdmVydGljZXNbYV1bMF0gLSBjZW50cm9pZFswXVxyXG4gICAgICApO1xyXG5cclxuICAgICAgcmV0dXJuIGFWYWwgLSBiVmFsO1xyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIGluZGljZXM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDYWNsdWF0ZXMgdGhlIGFyZWEgb2YgYSB0cmlhbmdsZVxyXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IGEgLSBGaXJzdCB0cmlhbmdsZSBwb2ludC5cclxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBiIC0gU2Vjb25kIHRyaWFuZ2xlIHBvaW50LlxyXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IGMgLSBUaGlyZCB0cmlhbmdsZSBwb2ludC5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XHJcbiAgICovXHJcbiAgc3RhdGljIHRyaWFuZ2xlQXJlYShhLCBiLCBjKSB7XHJcbiAgICByZXR1cm4gTWF0aC5hYnMoXHJcbiAgICAgIChhWzBdICogKGJbMV0gLSBjWzFdKSArIGJbMF0gKiAoY1sxXSAtIGFbMV0pICsgY1swXSAqIChhWzFdIC0gYlsxXSkpICogMC41XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIHRoZSBtYWduaXR1ZGUgb2YgYSBnaXZlbiB2ZWN0b3IgYXJyYXkuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSB2ZWN0b3IgLSBBcnJheSBjb25zaXN0aW5nIG9mIG51bWJlcnMuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxyXG4gICAqL1xyXG4gIHN0YXRpYyBnZXRWZWN0b3JNYWduaXR1ZGUodmVjdG9yKSB7XHJcbiAgICBpZiAoISh2ZWN0b3IgaW5zdGFuY2VvZiBBcnJheSkpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgIGBDYW5ub3QgZ2V0IG1hZ25pdHVkZSBmb3IgdmVjdG9yICR7dmVjdG9yfS4gSW5wdXQgbXVzdCBiZSBhbiBBcnJheSBudW1iZXJzLmBcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCByZWR1Y2VyID0gKGFjY3VtdWxhdG9yLCBjdXJyZW50VmFsdWUpID0+IHtcclxuICAgICAgaWYgKHR5cGVvZiBjdXJyZW50VmFsdWUgIT09ICdudW1iZXInKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgICAgYENhbm5vdCBnZXQgbWFnbml0dWRlIGZvciB2ZWN0b3IgJHt2ZWN0b3J9LiBBbGwgaXRlbXMgaW4gdGhlIGlucHV0IEFycmF5IG11c3QgYmUgbnVtYmVycy5gXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIGFjY3VtdWxhdG9yICsgKGN1cnJlbnRWYWx1ZSAqKiAyKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gTWF0aC5zcXJ0KHZlY3Rvci5yZWR1Y2UocmVkdWNlciwgMCkpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIHRoZSBkb3QgcHJvZHVjdCBiZXR3ZWVuIHR3byB2ZWN0b3JzLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gdmVjdG9yQSAtIEFycmF5IGNvbnNpc3Rpbmcgb2YgbnVtYmVycy5cclxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSB2ZWN0b3JCIC0gQXJyYXkgY29uc2lzdGluZyBvZiBudW1iZXJzLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge251bWJlcn1cclxuICAgKi9cclxuICBzdGF0aWMgZ2V0RG90UHJvZHVjdCh2ZWN0b3JBLCB2ZWN0b3JCKSB7XHJcbiAgICBpZiAoISh2ZWN0b3JBIGluc3RhbmNlb2YgQXJyYXkpIHx8ICEodmVjdG9yQiBpbnN0YW5jZW9mIEFycmF5KSB8fCB2ZWN0b3JBLmxlbmd0aCAhPT0gdmVjdG9yQi5sZW5ndGgpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZ2V0IGRvdCBwcm9kdWN0IGJldHdlZW4gJHt2ZWN0b3JBfSBhbmQgJHt2ZWN0b3JCfS4gSW5wdXRzIG11c3QgYmUgdmVjdG9ycyBvZiB0aGUgc2FtZSBsZW5ndGguYCk7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHJlc3VsdCA9IDA7XHJcbiAgICB2ZWN0b3JBLmZvckVhY2goKHZhbHVlQSwgaW5kZXgpID0+IHtcclxuICAgICAgY29uc3QgdmFsdWVCID0gdmVjdG9yQltpbmRleF07XHJcblxyXG4gICAgICBpZiAodHlwZW9mIHZhbHVlQSAhPT0gJ251bWJlcicgfHwgdHlwZW9mIHZhbHVlQiAhPT0gJ251bWJlcicpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBnZXQgZG90IHByb2R1Y3QgYmV0d2VlbiAke3ZlY3RvckF9IGFuZCAke3ZlY3RvckJ9LiBWZWN0b3JzIG11c3Qgb25seSBjb25zaXN0IG9mIG51bWVyaWMgdmFsdWVzLmApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXN1bHQgKz0gdmFsdWVBICogdmFsdWVCO1xyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiB0aGUgYW5nbGUgaW4gcmFkaWFucyBiZXR3ZWVuIHZlY3RvckEgYW5kIHZlY3RvckIuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSB2ZWN0b3JBIC0gQXJyYXkgY29uc2lzdGluZyBvZiBudW1iZXJzLlxyXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IHZlY3RvckIgLSBBcnJheSBjb25zaXN0aW5nIG9mIG51bWJlcnMuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxyXG4gICAqL1xyXG4gIHN0YXRpYyBnZXRBbmdsZUJldHdlZW4odmVjdG9yQSwgdmVjdG9yQikge1xyXG4gICAgY29uc3Qgbm9ybWFsQSA9IHRoaXMubm9ybWFsaXplVmVjdG9yKFsuLi52ZWN0b3JBXSk7XHJcbiAgICBjb25zdCBub3JtYWxCID0gdGhpcy5ub3JtYWxpemVWZWN0b3IoWy4uLnZlY3RvckJdKTtcclxuICAgIGNvbnN0IGRvdCA9IHRoaXMuZ2V0RG90UHJvZHVjdChub3JtYWxBLCBub3JtYWxCKTtcclxuXHJcbiAgICByZXR1cm4gTWF0aC5hY29zKHRoaXMuY2xhbXAoZG90LCAtMSwgMSkpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTXVsdGlwbHkgYSAzeDMgcm90YXRpb24gbWF0cml4IHdpdGggYSB2ZWN0b3IzLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gdmVjdG9yMyAtIEFycmF5IGNvbnNpc3Rpbmcgb2YgMyBudW1iZXJzIHJlcHJlc2VudGluZ1xyXG4gICAqIGEgZGlyZWN0aW9uIHZlY3Rvci5cclxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBtYXRyaXgzIC0gQW4gYXJyYXkgb2YgOSBudW1iZXJzIHJlcHJlc2VudGluZyBhIHJvd1xyXG4gICAqIG1ham9yIHJvdGF0aW9uIG1hdHJpeC5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtBcnJheS48bnVtYmVyPn0gLSBBbiBhcnJheSBvZiAzIG51bWJlcnMgcmVwcmVzZW50aW5nIHRoZSBuZXcgZGlyZWN0aW9uXHJcbiAgICogb2YgdGhlIHZlY3Rvci5cclxuICAgKi9cclxuICBzdGF0aWMgcm90YXRlVmVjdG9yKHZlY3RvcjMsIG1hdHJpeDMpIHtcclxuICAgIGlmICghKHZlY3RvcjMgaW5zdGFuY2VvZiBBcnJheSlcclxuICAgICAgfHwgdmVjdG9yMy5sZW5ndGggIT09IDNcclxuICAgICAgfHwgIXZlY3RvcjMuZXZlcnkodiA9PiB0eXBlb2YgdiA9PT0gJ251bWJlcicpKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgQ2Fubm90IHJvdGF0ZSB2ZWN0b3IgJHt2ZWN0b3IzfSBieSByb3RhdGlvbiBtYXRyaXggJHttYXRyaXgzfS4gSW5wdXQgdmVjdG9yIG11c3QgYmUgYW4gYXJyYXkgb2YgMyBudW1iZXJzLmBcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIShtYXRyaXgzIGluc3RhbmNlb2YgQXJyYXkpXHJcbiAgICAgIHx8IG1hdHJpeDMubGVuZ3RoICE9PSA5XHJcbiAgICAgIHx8ICFtYXRyaXgzLmV2ZXJ5KHYgPT4gdHlwZW9mIHYgPT09ICdudW1iZXInKSkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgYENhbm5vdCByb3RhdGUgdmVjdG9yICR7dmVjdG9yM30gYnkgcm90YXRpb24gbWF0cml4ICR7bWF0cml4M30uIElucHV0IG1hdHJpeDMgbXVzdCBiZSBhbiBhcnJheSBvZiA5IG51bWJlcnMuYFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHggPSBtYXRyaXgzWzBdICogdmVjdG9yM1swXVxyXG4gICAgICArIG1hdHJpeDNbM10gKiB2ZWN0b3IzWzFdXHJcbiAgICAgICsgbWF0cml4M1s2XSAqIHZlY3RvcjNbMl07XHJcbiAgICBjb25zdCB5ID0gbWF0cml4M1sxXSAqIHZlY3RvcjNbMF1cclxuICAgICAgKyBtYXRyaXgzWzRdICogdmVjdG9yM1sxXVxyXG4gICAgICArIG1hdHJpeDNbN10gKiB2ZWN0b3IzWzJdO1xyXG4gICAgY29uc3QgeiA9IG1hdHJpeDNbMl0gKiB2ZWN0b3IzWzBdXHJcbiAgICAgICsgbWF0cml4M1s1XSAqIHZlY3RvcjNbMV1cclxuICAgICAgKyBtYXRyaXgzWzhdICogdmVjdG9yM1syXTtcclxuXHJcbiAgICByZXR1cm4gW3gsIHksIHpdO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTm9ybWFsaXplIGEgZ2l2ZW4gdmVjdG9yIGFycmF5LlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gdmVjdG9yIC0gQXJyYXkgY29uc2lzdGluZyBvZiBudW1iZXJzLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0FycmF5LjxudW1iZXI+fSBUaGUgb3JpZ2luYWwgdmVjdG9yIHdpdGggbm9ybWFsaXplZCB2YWx1ZXMsIGZvciBjaGFpbmluZy5cclxuICAgKi9cclxuICBzdGF0aWMgbm9ybWFsaXplVmVjdG9yKHZlY3Rvcikge1xyXG4gICAgY29uc3QgbWFnbml0dWRlID0gdGhpcy5nZXRWZWN0b3JNYWduaXR1ZGUodmVjdG9yKTtcclxuXHJcbiAgICBpZiAobWFnbml0dWRlID09PSAwKSB7XHJcbiAgICAgIHZlY3Rvci5maWxsKDApXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB2ZWN0b3IuZm9yRWFjaCgodmFsdWUsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgdmVjdG9yW2luZGV4XSA9IHZhbHVlIC8gbWFnbml0dWRlO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdmVjdG9yO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRXh0cmFjdCB0aGUgM3gzIHJvdGF0aW9uIG1hdHJpeCBmcm9tIGEgZ2l2ZW4gNHg0IHRyYW5zZm9ybWF0aW9uIG1hdHJpeC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IG1hdHJpeDQgLSBBbiBhcnJheSBvZiAxNiBudW1iZXJzIHJlcHJlc2VudGluZyBhIHJvd1xyXG4gICAqIG1ham9yIHRyYW5zZm9ybWF0aW9uIG1hdHJpeC5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtBcnJheS48bnVtYmVyPn0gLSBBbiBhcnJheSBvZiA5IG51bWJlcnMgcmVwcmVzZW50aW5nIGEgcm93IG1ham9yXHJcbiAgICogcm90YXRpb24gbWF0cml4LlxyXG4gICAqL1xyXG4gIHN0YXRpYyBnZXRSb3RhdGlvbk1hdHJpeChtYXRyaXg0KSB7XHJcbiAgICBpZiAoIShtYXRyaXg0IGluc3RhbmNlb2YgQXJyYXkpXHJcbiAgICAgIHx8IG1hdHJpeDQubGVuZ3RoICE9PSAxNlxyXG4gICAgICB8fCAhbWF0cml4NC5ldmVyeSh2ID0+IHR5cGVvZiB2ID09PSAnbnVtYmVyJykpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgIGBDYW5ub3QgY29udmVydCBtYXRyaXggJHttYXRyaXg0fSB0byBhIHJvdGF0aW9uIG1hdHJpeC4gSW5wdXQgbWF0cml4IG11c3QgYmUgYW4gYXJyYXkgb2YgMTYgbnVtYmVycy5gXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gRXh0cmFjdCBzY2FsZVxyXG4gICAgY29uc3Qgc2NhbGVYID0gMSAvICh0aGlzLmdldFZlY3Rvck1hZ25pdHVkZShtYXRyaXg0LnNsaWNlKDAsIDQpKSB8fCAxKTtcclxuICAgIGNvbnN0IHNjYWxlWSA9IDEgLyAodGhpcy5nZXRWZWN0b3JNYWduaXR1ZGUobWF0cml4NC5zbGljZSg0LCA4KSkgfHwgMSk7XHJcbiAgICBjb25zdCBzY2FsZVogPSAxIC8gKHRoaXMuZ2V0VmVjdG9yTWFnbml0dWRlKG1hdHJpeDQuc2xpY2UoOCwgMTIpKSB8fCAxKTtcclxuXHJcbiAgICByZXR1cm4gW1xyXG4gICAgICBtYXRyaXg0WzBdICogc2NhbGVYLCBtYXRyaXg0WzFdICogc2NhbGVYLCBtYXRyaXg0WzJdICogc2NhbGVYLFxyXG4gICAgICBtYXRyaXg0WzRdICogc2NhbGVZLCBtYXRyaXg0WzVdICogc2NhbGVZLCBtYXRyaXg0WzZdICogc2NhbGVZLFxyXG4gICAgICBtYXRyaXg0WzhdICogc2NhbGVaLCBtYXRyaXg0WzldICogc2NhbGVaLCBtYXRyaXg0WzEwXSAqIHNjYWxlWlxyXG4gICAgXTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiBhbiBhcnJheSBjb250YWluaW5nIHRoZSBzcGhlcmljYWwgY29vcmRpbmF0ZXMgb2YgdGhlIGdpdmVuIGNhcnRlc2lhblxyXG4gICAqIHh5eiBjb29yZGluYXRlcy5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge251bWJlcn0geCAtIFBvc2l0aW9uIGFsb25nIHRoZSB4IGF4aXMuXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IHkgLSBQb3NpdGlvbiBhbG9uZyB0aGUgeSBheGlzLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB6IC0gUG9zaXRpb24gYWxvbmcgdGhlIHogYXhpcy5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtBcnJheS48bnVtYmVyPn0gLSBBbiBhcnJheSBjb25zaXN0aW5nIG9mIHRocmVlIG51bWJlcmVzIHdoZXJlIGluZGV4XHJcbiAgICogMCByZXByZXNlbnRzIHRoZSByYWRpdXMsIGluZGV4IDEgcmVwcmVzZW50cyB0aGUgdmVydGljYWwvcG9sYXIgYW5nbGUgaW4gcmFkaWFuc1xyXG4gICAqIGFuZCBpbmRleCAyIHJlcHJlc2VudHMgdGhlIGhvcml6b250YWwvYXppbXV0aGFsIGFuZ2xlIGluIHJhZGlhbnMuXHJcbiAgICovXHJcbiAgc3RhdGljIGNhcnRlc2lhblRvU3BoZXJpY2FsKHgsIHksIHopIHtcclxuICAgIGNvbnN0IHIgPSB0aGlzLmdldFZlY3Rvck1hZ25pdHVkZShbeCwgeSwgel0pO1xyXG5cclxuICAgIC8vIFJldHVybiBpZGVudGl0eSBpZiB0aGUgdmVjdG9yIGhhcyBubyBsZW5ndGhcclxuICAgIGlmIChyID09PSAwKSB7XHJcbiAgICAgIHJldHVybiBbMCwgMCwgMF07XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIFtcclxuICAgICAgcixcclxuICAgICAgTWF0aC5hY29zKHRoaXMuY2xhbXAoeSAvIHIsIC0gMSwgMSkpLFxyXG4gICAgICBNYXRoLmF0YW4yKHgsIHopLFxyXG4gICAgXTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdyYWR1YWxseSBjaGFuZ2UgYSB2YWx1ZSBvZiBhIG51bWVyaWMgcHJvcGVydHkgdG93YXJkcyBhIGdvYWwgb3ZlciB0aW1lIHVzaW5nXHJcbiAgICogYSBjcml0aWNhbGx5IGRhbXBlZCBzcHJpbmcgZnVuY3Rpb24uXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge251bWJlcn0gY3VycmVudFZhbHVlIC0gVGhlIHN0YXJ0aW5nIHZhbHVlLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB0YXJnZXRWYWx1ZS0gVGhlIGdvYWwgdmFsdWUuXHJcbiAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gW3ZhbHVlU3RvcmUgPSBbMCwgMF1dIC0gQW4gQXJyYXkgY29uc2lzdGluZyBvZiB0d29cclxuICAgKiBudW1iZXJzIHdoZXJlIHRoZSBmaXJzdCBudW1iZXIgaG9sZHMgdGhlIHJlc3VsdCB2YWx1ZSBhbmQgdGhlIHNlY29uZCBob2xkc1xyXG4gICAqIHRoZSB2ZWxvY2l0eSB0aGF0IHJlc3VsdGVkIGluIHRoYXQgdmFsdWUuIFRoZSBzYW1lIGFycmF5IHNob3VsZCBiZSBwcm92aWRlZFxyXG4gICAqIHdpdGggZWFjaCBjYWxsIHRvIHRoaXMgZnVuY3Rpb24uXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtkZWx0YVRpbWUgPSAxZS03XSAtIFRoZSB0aW1lIHNpbmNlIHRoZSBsYXN0IGNhbGwgdG8gdGhpcyBmdW5jdGlvblxyXG4gICAqIGluIHNlY29uZHMuXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtzbW9vdGhUaW1lID0gMC4zXSAtIFRoZSBhcHByb3hpbWF0ZSBhbW91bnQgb2YgdGltZSBpbiBzZWNvbmRzXHJcbiAgICogaXQgc2hvdWxkIHRha2UgdG8gcmVhY2ggdGhlIHRhcmdldCB2YWx1ZS5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gW21heFNwZWVkID0gMWU3XSAtIEEgY2xhbXBpbmcgdmFsdWUgZm9yIHRoZSBtYXhpbXVtIHNwZWVkIHRoZVxyXG4gICAqIHZhbHVlIGNhbiBjaGFuZ2UuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7QXJyYXkuPG51bWJlcj59IC0gVGhlIHZhbHVlU3RvcmUgYXJyYXkuXHJcbiAgICovXHJcbiAgc3RhdGljIGRhbXBWYWx1ZShcclxuICAgIGN1cnJlbnRWYWx1ZSxcclxuICAgIHRhcmdldFZhbHVlLFxyXG4gICAgdmFsdWVTdG9yZSA9IFswLCAwXSxcclxuICAgIGRlbHRhVGltZSA9IDFlLTcsXHJcbiAgICBzbW9vdGhUaW1lID0gMC4zLFxyXG4gICAgbWF4U3BlZWQgPSAxZTdcclxuICApIHtcclxuICAgIHNtb290aFRpbWUgPSBNYXRoLm1heCgwLjAwMDEsIHNtb290aFRpbWUpO1xyXG4gICAgZGVsdGFUaW1lID0gTWF0aC5tYXgoMWUtNywgZGVsdGFUaW1lKTtcclxuXHJcbiAgICAvLyBGaW5kIHRoZSBkZWx0YSBiZXR3ZWVuIHZhbHVlcyBhbmQgdXNlIGl0IHRvIGVzdGltYXRlIHRoZSBwcmV2aW91cyB2YWx1ZVxyXG4gICAgY29uc3QgY2xhbXBUaW1lID0gbWF4U3BlZWQgKiBzbW9vdGhUaW1lO1xyXG4gICAgY29uc3QgZGVsdGFWYWx1ZSA9IGN1cnJlbnRWYWx1ZSAtIHRhcmdldFZhbHVlO1xyXG4gICAgY29uc3QgY2xhbXBEZWx0YVZhbHVlID0gdGhpcy5jbGFtcChkZWx0YVZhbHVlLCAtY2xhbXBUaW1lLCBjbGFtcFRpbWUpO1xyXG4gICAgY29uc3QgbGFzdFZhbHVlID0gY3VycmVudFZhbHVlIC0gY2xhbXBEZWx0YVZhbHVlO1xyXG5cclxuICAgIC8vIENhbGN1bGF0ZSBkYW1waW5nIGZhY3RvcnNcclxuICAgIGNvbnN0IGQxID0gMiAvIHNtb290aFRpbWU7XHJcbiAgICBjb25zdCBkMiA9IGQxICogZGVsdGFUaW1lO1xyXG4gICAgY29uc3QgZDMgPSAxIC8gKDEgKyBkMiArIDAuNSAqIGQyICoqIDIgKyAwLjI1ICogZDIgKiogMyk7XHJcbiAgICBjb25zdCBkNCA9ICh2YWx1ZVN0b3JlWzFdICsgZDEgKiBjbGFtcERlbHRhVmFsdWUpICogZGVsdGFUaW1lO1xyXG5cclxuICAgIC8vIERhbXAgdGhlIHRhcmdldCB2YWx1ZSBhbmQgdXBkYXRlIHRoZSB2ZWxvY2l0eVxyXG4gICAgdmFsdWVTdG9yZVswXSA9IGxhc3RWYWx1ZSArIChjbGFtcERlbHRhVmFsdWUgKyBkNCkgKiBkMztcclxuICAgIHZhbHVlU3RvcmVbMV0gPSAodmFsdWVTdG9yZVsxXSAtIGQxICogZDQpICogZDM7XHJcblxyXG4gICAgLy8gUHJldmVudCBvdmVyc2hvb3RpbmdcclxuICAgIGlmICh0YXJnZXRWYWx1ZSAtIGN1cnJlbnRWYWx1ZSA+IDAgPT09IHZhbHVlU3RvcmVbMF0gPiB0YXJnZXRWYWx1ZSkge1xyXG4gICAgICB2YWx1ZVN0b3JlWzBdID0gdGFyZ2V0VmFsdWU7XHJcbiAgICAgIHZhbHVlU3RvcmVbMV0gPSAodmFsdWVTdG9yZVswXSAtIHRhcmdldFZhbHVlKSAvIGRlbHRhVGltZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdmFsdWVTdG9yZTtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IE1hdGhVdGlscztcclxuIiwiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXHJcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxyXG4vKipcclxuICogQHR5cGVkZWYge09iamVjdH0gRWFzaW5nT2JqZWN0IE9iamVjdCBjb250YWluaW5nIGVhc2luZyBmdW5jdGlvbnNcclxuICogQHByb3BlcnR5IHtGdW5jdGlvbn0gSW4gLSBFYXNpbmcgJ0luJyBmdW5jdGlvbi4gU2hvdWxkIHVzZSB0aGUgc2lnbmF0dXJlIChrOm51bWJlcik6bnVtYmVyLlxyXG4gKiBAcHJvcGVydHkge0Z1bmN0aW9ufSBPdXQgLSBFYXNpbmcgJ091dCcgZnVuY3Rpb24uIFNob3VsZCB1c2UgdGhlIHNpZ25hdHVyZSAoazpudW1iZXIpOm51bWJlci5cclxuICogQHByb3BlcnR5IHtGdW5jdGlvbn0gSW5PdXQgLSBFYXNpbmcgJ0luT3V0JyBmdW5jdGlvbi4gU2hvdWxkIHVzZSB0aGUgc2lnbmF0dXJlIChrOm51bWJlcik6bnVtYmVyLlxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBMaW5lYXIgRWFzaW5nXHJcbiAqIEB0eXBlIHtFYXNpbmdPYmplY3R9XHJcbiAqL1xyXG5leHBvcnQgY29uc3QgTGluZWFyID0ge1xyXG4gIE5vbmUoaykge1xyXG4gICAgcmV0dXJuIGs7XHJcbiAgfSxcclxuICBJbihrKSB7XHJcbiAgICByZXR1cm4gaztcclxuICB9LFxyXG4gIE91dChrKSB7XHJcbiAgICByZXR1cm4gaztcclxuICB9LFxyXG4gIEluT3V0KGspIHtcclxuICAgIHJldHVybiBrO1xyXG4gIH0sXHJcbn07XHJcblxyXG4vKipcclxuICogUXVhZHJhdGljIEVhc2luZ1xyXG4gKiBAdHlwZSB7RWFzaW5nT2JqZWN0fVxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IFF1YWRyYXRpYyA9IHtcclxuICBJbihrKSB7XHJcbiAgICByZXR1cm4gayAqIGs7XHJcbiAgfSxcclxuICBPdXQoaykge1xyXG4gICAgcmV0dXJuIGsgKiAoMiAtIGspO1xyXG4gIH0sXHJcbiAgSW5PdXQoaykge1xyXG4gICAgayAqPSAyO1xyXG4gICAgaWYgKGsgPCAxKSB7XHJcbiAgICAgIHJldHVybiAwLjUgKiBrICogaztcclxuICAgIH1cclxuICAgIHJldHVybiAtMC41ICogKC0tayAqIChrIC0gMikgLSAxKTtcclxuICB9LFxyXG59O1xyXG5cclxuLyoqXHJcbiAqIEN1YmljIEVhc2luZ1xyXG4gKiBAdHlwZSB7RWFzaW5nT2JqZWN0fVxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IEN1YmljID0ge1xyXG4gIEluKGspIHtcclxuICAgIHJldHVybiBrICogayAqIGs7XHJcbiAgfSxcclxuICBPdXQoaykge1xyXG4gICAgcmV0dXJuIC0tayAqIGsgKiBrICsgMTtcclxuICB9LFxyXG4gIEluT3V0KGspIHtcclxuICAgIGsgKj0gMjtcclxuICAgIGlmIChrIDwgMSkge1xyXG4gICAgICByZXR1cm4gMC41ICogayAqIGsgKiBrO1xyXG4gICAgfVxyXG5cclxuICAgIGsgLT0gMjtcclxuICAgIHJldHVybiAwLjUgKiAoayAqIGsgKiBrICsgMik7XHJcbiAgfSxcclxufTtcclxuXHJcbi8qKlxyXG4gKiBRdWFydGljIEVhc2luZ1xyXG4gKiBAdHlwZSB7RWFzaW5nT2JqZWN0fVxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IFF1YXJ0aWMgPSB7XHJcbiAgSW4oaykge1xyXG4gICAgcmV0dXJuIGsgKiBrICogayAqIGs7XHJcbiAgfSxcclxuICBPdXQoaykge1xyXG4gICAgcmV0dXJuIDEgLSAtLWsgKiBrICogayAqIGs7XHJcbiAgfSxcclxuICBJbk91dChrKSB7XHJcbiAgICBrICo9IDI7XHJcbiAgICBpZiAoayA8IDEpIHtcclxuICAgICAgcmV0dXJuIDAuNSAqIGsgKiBrICogayAqIGs7XHJcbiAgICB9XHJcblxyXG4gICAgayAtPSAyO1xyXG4gICAgcmV0dXJuIC0wLjUgKiAoayAqIGsgKiBrICogayAtIDIpO1xyXG4gIH0sXHJcbn07XHJcblxyXG4vKipcclxuICogUXVpbnRpYyBFYXNpbmdcclxuICogQHR5cGUge0Vhc2luZ09iamVjdH1cclxuICovXHJcbmV4cG9ydCBjb25zdCBRdWludGljID0ge1xyXG4gIEluKGspIHtcclxuICAgIHJldHVybiBrICogayAqIGsgKiBrICogaztcclxuICB9LFxyXG4gIE91dChrKSB7XHJcbiAgICByZXR1cm4gLS1rICogayAqIGsgKiBrICogayArIDE7XHJcbiAgfSxcclxuICBJbk91dChrKSB7XHJcbiAgICBrICo9IDI7XHJcbiAgICBpZiAoayA8IDEpIHtcclxuICAgICAgcmV0dXJuIDAuNSAqIGsgKiBrICogayAqIGsgKiBrO1xyXG4gICAgfVxyXG5cclxuICAgIGsgLT0gMjtcclxuICAgIHJldHVybiAwLjUgKiAoayAqIGsgKiBrICogayAqIGsgKyAyKTtcclxuICB9LFxyXG59O1xyXG5cclxuLyoqXHJcbiAqIFNpbnVzb2lkYWwgRWFzaW5nXHJcbiAqIEB0eXBlIHtFYXNpbmdPYmplY3R9XHJcbiAqL1xyXG5leHBvcnQgY29uc3QgU2ludXNvaWRhbCA9IHtcclxuICBJbihrKSB7XHJcbiAgICByZXR1cm4gMSAtIE1hdGguY29zKChrICogTWF0aC5QSSkgLyAyKTtcclxuICB9LFxyXG4gIE91dChrKSB7XHJcbiAgICByZXR1cm4gTWF0aC5zaW4oKGsgKiBNYXRoLlBJKSAvIDIpO1xyXG4gIH0sXHJcbiAgSW5PdXQoaykge1xyXG4gICAgcmV0dXJuIDAuNSAqICgxIC0gTWF0aC5jb3MoTWF0aC5QSSAqIGspKTtcclxuICB9LFxyXG59O1xyXG5cclxuLyoqXHJcbiAqIEV4cG9uZW50aWFsIEVhc2luZ1xyXG4gKiBAdHlwZSB7RWFzaW5nT2JqZWN0fVxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IEV4cG9uZW50aWFsID0ge1xyXG4gIEluKGspIHtcclxuICAgIHJldHVybiBrID09PSAwID8gMCA6IDEwMjQgKiogKGsgLSAxKTtcclxuICB9LFxyXG4gIE91dChrKSB7XHJcbiAgICByZXR1cm4gayA9PT0gMSA/IDEgOiAxIC0gMiAqKiAoLTEwICogayk7XHJcbiAgfSxcclxuICBJbk91dChrKSB7XHJcbiAgICBpZiAoayA9PT0gMCkge1xyXG4gICAgICByZXR1cm4gMDtcclxuICAgIH1cclxuICAgIGlmIChrID09PSAxKSB7XHJcbiAgICAgIHJldHVybiAxO1xyXG4gICAgfVxyXG5cclxuICAgIGsgKj0gMjtcclxuICAgIGlmIChrIDwgMSkge1xyXG4gICAgICByZXR1cm4gMC41ICogMTAyNCAqKiAoayAtIDEpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIDAuNSAqICgtKDIgKiogKC0xMCAqIChrIC0gMSkpKSArIDIpO1xyXG4gIH0sXHJcbn07XHJcblxyXG4vKipcclxuICogQ2lyY3VsYXIgRWFzaW5nXHJcbiAqIEB0eXBlIHtFYXNpbmdPYmplY3R9XHJcbiAqL1xyXG5leHBvcnQgY29uc3QgQ2lyY3VsYXIgPSB7XHJcbiAgSW4oaykge1xyXG4gICAgcmV0dXJuIDEgLSBNYXRoLnNxcnQoMSAtIGsgKiBrKTtcclxuICB9LFxyXG4gIE91dChrKSB7XHJcbiAgICByZXR1cm4gTWF0aC5zcXJ0KDEgLSAtLWsgKiBrKTtcclxuICB9LFxyXG4gIEluT3V0KGspIHtcclxuICAgIGsgKj0gMjtcclxuICAgIGlmIChrIDwgMSkge1xyXG4gICAgICByZXR1cm4gLTAuNSAqIChNYXRoLnNxcnQoMSAtIGsgKiBrKSAtIDEpO1xyXG4gICAgfVxyXG5cclxuICAgIGsgLT0gMjtcclxuICAgIHJldHVybiAwLjUgKiAoTWF0aC5zcXJ0KDEgLSBrICogaykgKyAxKTtcclxuICB9LFxyXG59O1xyXG5cclxuLyoqXHJcbiAqIEVsYXN0aWMgRWFzaW5nXHJcbiAqIEB0eXBlIHtFYXNpbmdPYmplY3R9XHJcbiAqL1xyXG5leHBvcnQgY29uc3QgRWxhc3RpYyA9IHtcclxuICBJbihrKSB7XHJcbiAgICBsZXQgcztcclxuICAgIGxldCBhID0gMC4xO1xyXG4gICAgY29uc3QgcCA9IDAuNDtcclxuXHJcbiAgICBpZiAoayA9PT0gMCkge1xyXG4gICAgICByZXR1cm4gMDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoayA9PT0gMSkge1xyXG4gICAgICByZXR1cm4gMTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIWEgfHwgYSA8IDEpIHtcclxuICAgICAgYSA9IDE7XHJcbiAgICAgIHMgPSBwIC8gNDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHMgPSAocCAqIE1hdGguYXNpbigxIC8gYSkpIC8gKDIgKiBNYXRoLlBJKTtcclxuICAgIH1cclxuXHJcbiAgICBrIC09IDE7XHJcbiAgICByZXR1cm4gLShhICogMiAqKiAoMTAgKiBrKSAqIE1hdGguc2luKCgoayAtIHMpICogKDIgKiBNYXRoLlBJKSkgLyBwKSk7XHJcbiAgfSxcclxuICBPdXQoaykge1xyXG4gICAgbGV0IHM7XHJcbiAgICBsZXQgYSA9IDAuMTtcclxuICAgIGNvbnN0IHAgPSAwLjQ7XHJcblxyXG4gICAgaWYgKGsgPT09IDApIHtcclxuICAgICAgcmV0dXJuIDA7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGsgPT09IDEpIHtcclxuICAgICAgcmV0dXJuIDE7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFhIHx8IGEgPCAxKSB7XHJcbiAgICAgIGEgPSAxO1xyXG4gICAgICBzID0gcCAvIDQ7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBzID0gKHAgKiBNYXRoLmFzaW4oMSAvIGEpKSAvICgyICogTWF0aC5QSSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGEgKiAyICoqICgtMTAgKiBrKSAqIE1hdGguc2luKCgoayAtIHMpICogKDIgKiBNYXRoLlBJKSkgLyBwKSArIDE7XHJcbiAgfSxcclxuICBJbk91dChrKSB7XHJcbiAgICBsZXQgcztcclxuICAgIGxldCBhID0gMC4xO1xyXG4gICAgY29uc3QgcCA9IDAuNDtcclxuXHJcbiAgICBpZiAoayA9PT0gMCkge1xyXG4gICAgICByZXR1cm4gMDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoayA9PT0gMSkge1xyXG4gICAgICByZXR1cm4gMTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIWEgfHwgYSA8IDEpIHtcclxuICAgICAgYSA9IDE7XHJcbiAgICAgIHMgPSBwIC8gNDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHMgPSAocCAqIE1hdGguYXNpbigxIC8gYSkpIC8gKDIgKiBNYXRoLlBJKTtcclxuICAgIH1cclxuXHJcbiAgICBrICo9IDI7XHJcbiAgICBpZiAoayA8IDEpIHtcclxuICAgICAgayAtPSAxO1xyXG4gICAgICByZXR1cm4gKFxyXG4gICAgICAgIC0wLjUgKiAoYSAqIDIgKiogKDEwICogaykgKiBNYXRoLnNpbigoKGsgLSBzKSAqICgyICogTWF0aC5QSSkpIC8gcCkpXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgayAtPSAxO1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgYSAqIDIgKiogKC0xMCAqIGspICogTWF0aC5zaW4oKChrIC0gcykgKiAoMiAqIE1hdGguUEkpKSAvIHApICogMC41ICsgMVxyXG4gICAgKTtcclxuICB9LFxyXG59O1xyXG5cclxuLyoqXHJcbiAqIEJhY2sgRWFzaW5nXHJcbiAqIEB0eXBlIHtFYXNpbmdPYmplY3R9XHJcbiAqL1xyXG5leHBvcnQgY29uc3QgQmFjayA9IHtcclxuICBJbihrKSB7XHJcbiAgICBjb25zdCBzID0gMS43MDE1ODtcclxuICAgIHJldHVybiBrICogayAqICgocyArIDEpICogayAtIHMpO1xyXG4gIH0sXHJcbiAgT3V0KGspIHtcclxuICAgIGNvbnN0IHMgPSAxLjcwMTU4O1xyXG4gICAgcmV0dXJuIC0tayAqIGsgKiAoKHMgKyAxKSAqIGsgKyBzKSArIDE7XHJcbiAgfSxcclxuICBJbk91dChrKSB7XHJcbiAgICBjb25zdCBzID0gMS43MDE1OCAqIDEuNTI1O1xyXG4gICAgayAqPSAyO1xyXG4gICAgaWYgKGsgPCAxKSB7XHJcbiAgICAgIHJldHVybiAwLjUgKiAoayAqIGsgKiAoKHMgKyAxKSAqIGsgLSBzKSk7XHJcbiAgICB9XHJcblxyXG4gICAgayAtPSAyO1xyXG4gICAgcmV0dXJuIDAuNSAqIChrICogayAqICgocyArIDEpICogayArIHMpICsgMik7XHJcbiAgfSxcclxufTtcclxuXHJcbi8qKlxyXG4gKiBCb3VuY2UgRWFzaW5nXHJcbiAqIEB0eXBlIHtFYXNpbmdPYmplY3R9XHJcbiAqL1xyXG5leHBvcnQgY29uc3QgQm91bmNlID0ge1xyXG4gIEluKGspIHtcclxuICAgIHJldHVybiAxIC0gQm91bmNlLk91dCgxIC0gayk7XHJcbiAgfSxcclxuICBPdXQoaykge1xyXG4gICAgaWYgKGsgPCAxIC8gMi43NSkge1xyXG4gICAgICByZXR1cm4gNy41NjI1ICogayAqIGs7XHJcbiAgICB9IGVsc2UgaWYgKGsgPCAyIC8gMi43NSkge1xyXG4gICAgICBrIC09IDEuNTtcclxuICAgICAgcmV0dXJuIDcuNTYyNSAqIChrIC8gMi43NSkgKiBrICsgMC43NTtcclxuICAgIH0gZWxzZSBpZiAoayA8IDIuNSAvIDIuNzUpIHtcclxuICAgICAgayAtPSAyLjI1O1xyXG4gICAgICByZXR1cm4gNy41NjI1ICogKGsgLyAyLjc1KSAqIGsgKyAwLjkzNzU7XHJcbiAgICB9XHJcbiAgICBrIC09IDIuNjI1O1xyXG4gICAgcmV0dXJuIDcuNTYyNSAqIChrIC8gMi43NSkgKiBrICsgMC45ODQzNzU7XHJcbiAgfSxcclxuICBJbk91dChrKSB7XHJcbiAgICBpZiAoayA8IDAuNSkge1xyXG4gICAgICByZXR1cm4gQm91bmNlLkluKGsgKiAyKSAqIDAuNTtcclxuICAgIH1cclxuICAgIHJldHVybiBCb3VuY2UuT3V0KGsgKiAyIC0gMSkgKiAwLjUgKyAwLjU7XHJcbiAgfSxcclxufTtcclxuIiwiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXHJcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxyXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bmRlcnNjb3JlLWRhbmdsZSAqL1xyXG5pbXBvcnQgVXRpbHMgZnJvbSAnLi9VdGlscyc7XHJcblxyXG4vKipcclxuICogQ2xhc3MgdGhhdCBjYW4gZXhlY3V0ZSBmdW5jdGlvbnMgd2hlbiBsb2NhbCBtZXNzYWdlcyBhcmUgcmVjZWl2ZWQuIExvY2FsIG1lc3NhZ2VzXHJcbiAqIGFyZSBwcmVmaXhlZCB3aXRoIHRoZSBpbnN0YW5jZSdzIGlkLlxyXG4gKlxyXG4gKiBAYWxpYXMgY29yZS9NZXNzZW5nZXJcclxuICpcclxuICogQHByb3BlcnR5IHtjb3JlL01lc3Nlbmdlcn0gR2xvYmFsTWVzc2VuZ2VyIC0gQSBtZXNzZW5nZXIgdGhhdCBjYW4gYmUgdXNlZCBmb3JcclxuICogZ2xvYmFsIG1lc3NhZ2luZy4gV2hlbiB1c2luZyBzdGF0aWMgbGlzdGVuIGFuZCBlbWl0IG1ldGhvZHMgdGhleSBhcmUgZXhlY3V0ZWRcclxuICogb24gdGhpcyBtZXNzZW5nZXIuXHJcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBFVkVOVFMgLSBCdWlsdC1pbiBldmVudHMgdGhhdCB0aGUgTWVzc2VuZ2VyIGVtaXRzLlxyXG4gKi9cclxuY2xhc3MgTWVzc2VuZ2VyIHtcclxuICAvKipcclxuICAgKiBAY29uc3RydWN0b3JcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7YW55PX0gaWQgLSBJZCBmb3IgdGhlIG9iamVjdC4gSWYgbm9uZSBpcyBwcm92aWRlZCBhIG5ldyBpZCB3aWxsXHJcbiAgICogYmUgY3JlYXRlZC4gSWQgc2hvdWxkIGJlIGFibGUgdG8gYmUgcmVwcmVzZW50ZWQgYXMgYSBzdHJpbmcuXHJcbiAgICovXHJcbiAgY29uc3RydWN0b3IoaWQpIHtcclxuICAgIHRoaXMuX2lkID0gaWQgIT09IHVuZGVmaW5lZCA/IGlkIDogVXRpbHMuY3JlYXRlSWQoKTtcclxuICAgIHRoaXMuX2Rpc3BhdGNoZXIgPSB3aW5kb3c7XHJcbiAgICB0aGlzLl9jYWxsYmFja3MgPSB7fTtcclxuICAgIHRoaXMuX2V2ZW50TGlzdGVuZXJzID0ge307XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSBzdHJpbmcgaWQgb2YgdGhlIG9iamVjdC5cclxuICAgKlxyXG4gICAqIEByZWFkb25seVxyXG4gICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICovXHJcbiAgZ2V0IGlkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2lkO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUHJlZml4IGEgbWVzc2FnZSB3aXRoIHRoZSBpbnN0YW5jZSBpZC5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZVxyXG4gICAqXHJcbiAgICogQHJldHVybnMge3N0cmluZ31cclxuICAgKi9cclxuICBfY3JlYXRlTG9jYWxNZXNzYWdlKG1lc3NhZ2UpIHtcclxuICAgIHJldHVybiBgJHt0aGlzLmlkfS4ke21lc3NhZ2V9YDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBjYWxsIGEgY2FsbGJhY2sgZnVuY3Rpb24gYW5kIHN1cHBseSB0aGUgZXZlbnQnc1xyXG4gICAqIGRldGFpbCBwcm9wZXJ0eSBhcyBhbiBhcmd1bWVudC5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xyXG4gICAqXHJcbiAgICogQHJldHVybnMge0Z1bmN0aW9ufVxyXG4gICAqL1xyXG4gIF9jcmVhdGVMaXN0ZW5lcihjYWxsYmFjaykge1xyXG4gICAgcmV0dXJuIGUgPT4ge1xyXG4gICAgICBsZXQgdmFsdWU7XHJcblxyXG4gICAgICBpZiAoZS5kZXRhaWwgIT09IG51bGwpIHtcclxuICAgICAgICB2YWx1ZSA9IGUuZGV0YWlsO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjYWxsYmFjayh2YWx1ZSk7XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlIGFuIGV2ZW50IG9iamVjdCBhbmQgc2VuZCBpdCB0byBsaXN0ZW5lcnMuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgLSBFdmVudCB0eXBlIG5hbWUuXHJcbiAgICogQHBhcmFtIHthbnk9fSB2YWx1ZSAtIFZhbHVlIHRvIHNlbmQgdG8gbGlzdGVuZXJzLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0N1c3RvbUV2ZW50fVxyXG4gICAqL1xyXG4gIF9jcmVhdGVFdmVudChtZXNzYWdlLCB2YWx1ZSkge1xyXG4gICAgcmV0dXJuIG5ldyBDdXN0b21FdmVudChtZXNzYWdlLCB7ZGV0YWlsOiB2YWx1ZX0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVnaXN0ZXIgYW4gZXZlbnQuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgLSBFdmVudCB0eXBlIG5hbWUuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gbGlzdGVuZXIgLSBBIGxpc3RlbmVyIGZ1bmN0aW9uIGdlbmVyYXRlZCB1c2luZyBfY3JlYXRlTGlzdGVuZXIuXHJcbiAgICovXHJcbiAgX2FkZExpc3RlbmVyKG1lc3NhZ2UsIGxpc3RlbmVyKSB7XHJcbiAgICB0aGlzLl9kaXNwYXRjaGVyLmFkZEV2ZW50TGlzdGVuZXIoXHJcbiAgICAgIHRoaXMuX2NyZWF0ZUxvY2FsTWVzc2FnZShtZXNzYWdlKSxcclxuICAgICAgbGlzdGVuZXJcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVbnJlZ2lzdGVyIGFuIGV2ZW50LlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIC0gRXZlbnQgdHlwZSBuYW1lLlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGxpc3RlbmVyIC0gQSBsaXN0ZW5lciBmdW5jdGlvbiBnZW5lcmF0ZWQgdXNpbmcgX2NyZWF0ZUxpc3RlbmVyLlxyXG4gICAqL1xyXG4gIF9yZW1vdmVMaXN0ZW5lcihtZXNzYWdlLCBsaXN0ZW5lcikge1xyXG4gICAgdGhpcy5fZGlzcGF0Y2hlci5yZW1vdmVFdmVudExpc3RlbmVyKFxyXG4gICAgICB0aGlzLl9jcmVhdGVMb2NhbE1lc3NhZ2UobWVzc2FnZSksXHJcbiAgICAgIGxpc3RlbmVyXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRXhlY3V0ZSBhIGZ1bmN0aW9uIHdoZW4gYSBtZXNzYWdlIGlzIHJlY2VpdmVkIGZvciB0aGlzIG9iamVjdC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIC0gVGhlIG1lc3NhZ2UgdG8gbGlzdGVuIGZvci5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayAtIEZ1bmN0aW9uIHRvIGV4ZWN1dGUgb25jZSB0aGUgbWVzc2FnZSBpcyByZWNlaXZlZC5cclxuICAgKi9cclxuICBsaXN0ZW5UbyhtZXNzYWdlLCBjYWxsYmFjaykge1xyXG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgYENhbm5vdCBhZGQgbGlzdGVuZXIgZm9yICR7bWVzc2FnZX0gb24gJHt0aGlzLmlkfS4gQ2FsbGJhY2sgbXVzdCBiZSBhIGZ1bmN0aW9uLmBcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5fY2FsbGJhY2tzW21lc3NhZ2VdID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhpcy5fY2FsbGJhY2tzW21lc3NhZ2VdID0gW107XHJcbiAgICAgIHRoaXMuX2V2ZW50TGlzdGVuZXJzW21lc3NhZ2VdID0gW107XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgbGlzdGVuZXIgPSB0aGlzLl9jcmVhdGVMaXN0ZW5lcihjYWxsYmFjayk7XHJcbiAgICB0aGlzLl9jYWxsYmFja3NbbWVzc2FnZV0ucHVzaChjYWxsYmFjayk7XHJcbiAgICB0aGlzLl9ldmVudExpc3RlbmVyc1ttZXNzYWdlXS5wdXNoKGxpc3RlbmVyKTtcclxuXHJcbiAgICB0aGlzLl9hZGRMaXN0ZW5lcihtZXNzYWdlLCBsaXN0ZW5lcik7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQcmV2ZW50IGEgZnVuY3Rpb24gZnJvbSBiZWluZyBleGVjdXRlZCB3aGVuIGEgbWVzc2FnZSBpcyByZWNlaXZlZCBmb3IgdGhpc1xyXG4gICAqIG9iamVjdC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIC0gVGhlIG1lc3NhZ2UgdG8gc3RvcCBsaXN0ZW5pbmcgZm9yLlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBjYWxsYmFjayAtIE9wdGlvbmFsIGNhbGxiYWNrIHRvIHJlbW92ZS4gSWYgbm9uZSBpcyBkZWZpbmVkLFxyXG4gICAqIHJlbW92ZSBhbGwgY2FsbGJhY2tzIGZvciB0aGUgbWVzc2FnZS5cclxuICAgKi9cclxuICBzdG9wTGlzdGVuaW5nKG1lc3NhZ2UsIGNhbGxiYWNrKSB7XHJcbiAgICBpZiAodGhpcy5fY2FsbGJhY2tzW21lc3NhZ2VdID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfSBlbHNlIGlmIChjYWxsYmFjayA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIC8vIElmIG5vIGNhbGxiYWNrIHdhcyBkZWZpbmVkLCBjYWxsIHN0b3BMaXN0ZW5pbmcgb24gYWxsIGNhbGxiYWNrcyBmb3IgdGhlIG1lc3NhZ2VcclxuICAgICAgZm9yIChsZXQgaSA9IHRoaXMuX2NhbGxiYWNrc1ttZXNzYWdlXS5sZW5ndGggLSAxOyBpID4gLTE7IGktLSkge1xyXG4gICAgICAgIHRoaXMuc3RvcExpc3RlbmluZyhtZXNzYWdlLCB0aGlzLl9jYWxsYmFja3NbbWVzc2FnZV1baV0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gSWYgYSBjYWxsYmFjayB3YXMgZGVmaW5lZCwgbWFrZSBzdXJlIGl0J3MgYSBsaXN0ZW5lclxyXG4gICAgY29uc3QgaW5kZXggPSB0aGlzLl9jYWxsYmFja3NbbWVzc2FnZV0uaW5kZXhPZihjYWxsYmFjayk7XHJcbiAgICBpZiAoaW5kZXggPT09IC0xKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBsaXN0ZW5lciA9IHRoaXMuX2V2ZW50TGlzdGVuZXJzW21lc3NhZ2VdW2luZGV4XTtcclxuICAgIHRoaXMuX3JlbW92ZUxpc3RlbmVyKG1lc3NhZ2UsIGxpc3RlbmVyKTtcclxuXHJcbiAgICB0aGlzLl9jYWxsYmFja3NbbWVzc2FnZV0uc3BsaWNlKGluZGV4LCAxKTtcclxuICAgIHRoaXMuX2V2ZW50TGlzdGVuZXJzW21lc3NhZ2VdLnNwbGljZShpbmRleCwgMSk7XHJcblxyXG4gICAgaWYgKHRoaXMuX2NhbGxiYWNrc1ttZXNzYWdlXS5sZW5ndGggPT09IDApIHtcclxuICAgICAgZGVsZXRlIHRoaXMuX2NhbGxiYWNrc1ttZXNzYWdlXTtcclxuICAgICAgZGVsZXRlIHRoaXMuX2V2ZW50TGlzdGVuZXJzW21lc3NhZ2VdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRGUtcmVnaXN0ZXIgY2FsbGJhY2socykgZnJvbSBiZWluZyBleGVjdXRlZCB3aGVuIG1lc3NhZ2VzIG1hdGNoaW5nIHRoZSBnaXZlblxyXG4gICAqIHJlZ3VsYXIgZXhwcmVzc2lvbiBhcmUgcmVjZWl2ZWQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge1JlZ2V4cH0gcmVnZXhwIC0gcmVnZXhwIC0gVGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiB0byBmaWx0ZXIgbWVzc2FnZXMgd2l0aC5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gY2FsbGJhY2sgLSBPcHRpb25hbCBjYWxsYmFjayB0byByZW1vdmUuIElmIG5vbmUgaXMgZGVmaW5lZCxcclxuICAgKiByZW1vdmUgYWxsIGNhbGxiYWNrcyBmb3IgbWVzc2FnZXMgbWF0Y2hpbmcgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbi5cclxuICAgKi9cclxuICBzdG9wTGlzdGVuaW5nQnlSZWdleHAocmVnZXhwLCBjYWxsYmFjaykge1xyXG4gICAgY29uc3QgbWVzc2FnZXMgPSBPYmplY3Qua2V5cyh0aGlzLl9jYWxsYmFja3MpLmZpbHRlcihtZXNzYWdlID0+IHJlZ2V4cC50ZXN0KG1lc3NhZ2UpKTtcclxuXHJcbiAgICBtZXNzYWdlcy5mb3JFYWNoKG1lc3NhZ2UgPT4ge1xyXG4gICAgICB0aGlzLnN0b3BMaXN0ZW5pbmcobWVzc2FnZSwgY2FsbGJhY2spO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQcmV2ZW50IGFueSBmdW5jdGlvbnMgZnJvbSBiZWluZyBleGVjdXRlZCB3aGVuIGFueSBtZXNzYWdlIGlzIHJlY2VpdmVkIGZvclxyXG4gICAqIHRoaXMgb2JqZWN0LlxyXG4gICAqL1xyXG4gIHN0b3BMaXN0ZW5pbmdUb0FsbCgpIHtcclxuICAgIGNvbnN0IG1lc3NhZ2VzID0gT2JqZWN0LmtleXModGhpcy5fY2FsbGJhY2tzKTtcclxuXHJcbiAgICBmb3IgKGxldCBpID0gbWVzc2FnZXMubGVuZ3RoIC0gMTsgaSA+IC0xOyBpLS0pIHtcclxuICAgICAgdGhpcy5zdG9wTGlzdGVuaW5nKG1lc3NhZ2VzW2ldKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNlbmQgYSBtZXNzYWdlLCBjYXVzaW5nIGxpc3RlbmVyIGZ1bmN0aW9ucyBmb3IgdGhlIG1lc3NhZ2Ugb24gdGhpcyBvYmplY3RcclxuICAgKiB0byBiZSBleGVjdXRlZC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIC0gVGhlIG1lc3NhZ2UgdG8gZW1pdC5cclxuICAgKiBAcGFyYW0ge2FueT19IHZhbHVlIC0gT3B0aW9uYWwgYXJndW1lbnQgdG8gcGFzcyB0byBsaXN0ZW5lciBjYWxsYmFja3MuXHJcbiAgICovXHJcbiAgZW1pdChtZXNzYWdlLCB2YWx1ZSkge1xyXG4gICAgaWYgKHRoaXMuX2NhbGxiYWNrc1ttZXNzYWdlXSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBtZXNzYWdlID0gdGhpcy5fY3JlYXRlTG9jYWxNZXNzYWdlKG1lc3NhZ2UpO1xyXG4gICAgY29uc3QgZXZlbnQgPSB0aGlzLl9jcmVhdGVFdmVudChtZXNzYWdlLCB2YWx1ZSk7XHJcbiAgICB0aGlzLl9kaXNwYXRjaGVyLmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRXhlY3V0ZSBhIGZ1bmN0aW9uIHdoZW4gYSBtZXNzYWdlIGlzIHJlY2VpdmVkIGZvciB0aGUgZ2xvYmFsIE1lc3NlbmdlciBpbnN0YW5jZS5cclxuICAgKlxyXG4gICAqIEBzdGF0aWNcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIC0gVGhlIG1lc3NhZ2UgdG8gbGlzdGVuIGZvci5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayAtIEZ1bmN0aW9uIHRvIGV4ZWN1dGUgb25jZSB0aGUgbWVzc2FnZSBpcyByZWNlaXZlZC5cclxuICAgKi9cclxuICBzdGF0aWMgbGlzdGVuVG8obWVzc2FnZSwgY2FsbGJhY2ssIG1lc3Nlbmdlcikge1xyXG4gICAgdGhpcy5HbG9iYWxNZXNzZW5nZXIubGlzdGVuVG8obWVzc2FnZSwgY2FsbGJhY2ssIG1lc3Nlbmdlcik7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQcmV2ZW50IGEgZnVuY3Rpb24gZnJvbSBiZWluZyBleGVjdXRlZCB3aGVuIGEgbWVzc2FnZSBpcyByZWNlaXZlZCBmb3IgdGhlXHJcbiAgICogZ2xvYmFsIE1lc3NlbmdlciBpbnN0YW5jZS5cclxuICAgKlxyXG4gICAqIEBzdGF0aWNcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIC0gVGhlIG1lc3NhZ2UgdG8gc3RvcCBsaXN0ZW5pbmcgZm9yLlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBjYWxsYmFjayAtIE9wdGlvbmFsIGNhbGxiYWNrIHRvIHJlbW92ZS4gSWYgbm9uZSBpcyBkZWZpbmVkLFxyXG4gICAqIHJlbW92ZSBhbGwgY2FsbGJhY2tzIGZvciB0aGUgbWVzc2FnZS5cclxuICAgKi9cclxuICBzdGF0aWMgc3RvcExpc3RlbmluZyhtZXNzYWdlLCBjYWxsYmFjaykge1xyXG4gICAgdGhpcy5HbG9iYWxNZXNzZW5nZXIuc3RvcExpc3RlbmluZyhtZXNzYWdlLCBjYWxsYmFjayk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEZS1yZWdpc3RlciBjYWxsYmFjayhzKSBmcm9tIGJlaW5nIGV4ZWN1dGVkIG9uIHRoZSBnbG9iYWwgbWVzc2VuZ2VyciBpbnN0YW5jZVxyXG4gICAqIHdoZW4gbWVzc2FnZXMgbWF0Y2hpbmcgdGhlIGdpdmVuIHJlZ3VsYXIgZXhwcmVzc2lvbiBhcmUgcmVjZWl2ZWQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge1JlZ2V4cH0gcmVnZXhwIC0gcmVnZXhwIC0gVGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiB0byBmaWx0ZXIgbWVzc2FnZXMgd2l0aC5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gY2FsbGJhY2sgLSBPcHRpb25hbCBjYWxsYmFjayB0byByZW1vdmUuIElmIG5vbmUgaXMgZGVmaW5lZCxcclxuICAgKiByZW1vdmUgYWxsIGNhbGxiYWNrcyBmb3IgbWVzc2FnZXMgbWF0Y2hpbmcgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbi5cclxuICAgKi9cclxuICBzdGF0aWMgc3RvcExpc3RlbmluZ0J5UmVnZXhwKHJlZ2V4cCwgY2FsbGJhY2spIHtcclxuICAgIGNvbnN0IG1lc3NhZ2VzID0gT2JqZWN0LmtleXModGhpcy5HbG9iYWxNZXNzZW5nZXIuX2NhbGxiYWNrcykuZmlsdGVyKFxyXG4gICAgICBtZXNzYWdlID0+IHJlZ2V4cC50ZXN0KG1lc3NhZ2UpXHJcbiAgICApO1xyXG5cclxuICAgIG1lc3NhZ2VzLmZvckVhY2gobWVzc2FnZSA9PiB7XHJcbiAgICAgIHRoaXMuc3RvcExpc3RlbmluZyhtZXNzYWdlLCBjYWxsYmFjayk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFByZXZlbnQgYW55IGZ1bmN0aW9ucyBmcm9tIGJlaW5nIGV4ZWN1dGVkIHdoZW4gYW55IG1lc3NhZ2UgaXMgcmVjZWl2ZWQgZm9yXHJcbiAgICogdGhlIGdsb2JhbCBNZXNzZW5nZXIgaW5zdGFuY2UuXHJcbiAgICpcclxuICAgKiBAc3RhdGljXHJcbiAgICovXHJcbiAgc3RhdGljIHN0b3BMaXN0ZW5pbmdUb0FsbCgpIHtcclxuICAgIHRoaXMuR2xvYmFsTWVzc2VuZ2VyLnN0b3BMaXN0ZW5pbmdUb0FsbCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2VuZCBhIG1lc3NhZ2UsIGNhdXNpbmcgbGlzdGVuZXIgZnVuY3Rpb25zIGZvciB0aGUgbWVzc2FnZSBvbiB0aGUgZ2xvYmFsIE1lc3NlbmdlclxyXG4gICAqIGluc3RhbmNlIHRvIGJlIGV4ZWN1dGVkLlxyXG4gICAqXHJcbiAgICogQHN0YXRpY1xyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgLSBUaGUgbWVzc2FnZSB0byBlbWl0LlxyXG4gICAqIEBwYXJhbSB7YW55PX0gdmFsdWUgLSBPcHRpb25hbCBhcmd1bWVudCB0byBwYXNzIHRvIGxpc3RlbmVyIGNhbGxiYWNrcy5cclxuICAgKi9cclxuICBzdGF0aWMgZW1pdChtZXNzYWdlLCB2YWx1ZSkge1xyXG4gICAgdGhpcy5HbG9iYWxNZXNzZW5nZXIuZW1pdChtZXNzYWdlLCB2YWx1ZSk7XHJcbiAgfVxyXG59XHJcblxyXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhNZXNzZW5nZXIsIHtcclxuICBHbG9iYWxNZXNzZW5nZXI6IHtcclxuICAgIHZhbHVlOiBuZXcgTWVzc2VuZ2VyKCksXHJcbiAgICB3cml0YWJsZTogZmFsc2UsXHJcbiAgfSxcclxuICBFVkVOVFM6IHtcclxuICAgIHZhbHVlOiB7fSxcclxuICAgIHdyaXRhYmxlOiBmYWxzZSxcclxuICB9LFxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IE1lc3NlbmdlcjtcclxuIiwiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXHJcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxyXG5pbXBvcnQgQ29yZU1lc3NlbmdlciBmcm9tICdjb3JlL01lc3Nlbmdlcic7XHJcblxyXG4vKipcclxuICogQGV4dGVuZHMgY29yZS9NZXNzZW5nZXJcclxuICogQGFsaWFzIHRocmVlLmpzL01lc3NlbmdlclxyXG4gKi9cclxuY2xhc3MgTWVzc2VuZ2VyIGV4dGVuZHMgQ29yZU1lc3NlbmdlciB7XHJcbiAgLyoqXHJcbiAgICogQGNvbnN0cnVjdG9yXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge2FueT19IGlkIC0gSWQgZm9yIHRoZSBvYmplY3QuIElmIG5vbmUgaXMgcHJvdmlkZWQgYSBuZXcgaWQgd2lsbFxyXG4gICAqIGJlIGNyZWF0ZWQuIElkIHNob3VsZCBiZSBhYmxlIHRvIGJlIHJlcHJlc2VudGVkIGFzIGEgc3RyaW5nLlxyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKGlkKSB7XHJcbiAgICBzdXBlcihpZCk7XHJcbiAgICB0aGlzLl9kaXNwYXRjaGVyID0gdGhpcztcclxuICB9XHJcblxyXG4gIF9jcmVhdGVFdmVudChtZXNzYWdlLCB2YWx1ZSkge1xyXG4gICAgcmV0dXJuIHtkZXRhaWw6IHZhbHVlLCB0eXBlOiBtZXNzYWdlfTtcclxuICB9XHJcbn1cclxuXHJcbi8vIEFzc2lnbiBUaHJlZS5qcyBFdmVudERpc3BhdGNoZXIgZnVuY3Rpb25hbGl0eSB0byB0aGUgTWVzc2VuZ2VyIGNsYXNzXHJcbk9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKFRIUkVFLkV2ZW50RGlzcGF0Y2hlci5wcm90b3R5cGUpXHJcbiAgLmZpbHRlcihwcm9wID0+IHByb3AgIT09ICdjb25zdHJ1Y3RvcicpXHJcbiAgLmZvckVhY2gocHJvcCA9PiB7XHJcbiAgICBNZXNzZW5nZXIucHJvdG90eXBlW3Byb3BdID0gVEhSRUUuRXZlbnREaXNwYXRjaGVyLnByb3RvdHlwZVtwcm9wXTtcclxuICB9KTtcclxuXHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShNZXNzZW5nZXIsICdHbG9iYWxNZXNzZW5nZXInLCB7XHJcbiAgdmFsdWU6IG5ldyBNZXNzZW5nZXIoKSxcclxuICB3cml0YWJsZTogZmFsc2UsXHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgTWVzc2VuZ2VyO1xyXG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cclxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVC0wXHJcbmltcG9ydCBNZXNzZW5nZXIgZnJvbSAnYXBwL01lc3Nlbmdlcic7XHJcblxyXG4vKipcclxuICogQmFzZSBjbGFzcyBmb3IgYWxsIGhvc3QgZmVhdHVyZXMuIEtlZXBzIGEgcmVmZXJlbmNlIHRvIHRoZSBob3N0IG9iamVjdCBtYW5hZ2luZ1xyXG4gKiB0aGUgZmVhdHVyZS5cclxuICpcclxuICogQGFic3RyYWN0XHJcbiAqXHJcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBFVkVOVFMgLSBCdWlsdC1pbiBtZXNzYWdlcyB0aGF0IHRoZSBmZWF0dXJlIGVtaXRzLiBXaGVuIHRoZVxyXG4gKiBmZWF0dXJlIGlzIGFkZGVkIHRvIGEge0BsaW5rIGNvcmUvSG9zdE9iamVjdH0sIGV2ZW50IG5hbWVzIHdpbGwgYmUgcHJlZml4ZWQgYnkgdGhlXHJcbiAqIG5hbWUgb2YgdGhlIGZlYXR1cmUgY2xhc3MgKyAnLicuXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbRVZFTlRTLnVwZGF0ZT1vblVwZGF0ZV0gLSBNZXNzYWdlIHRoYXQgaXMgZW1pdHRlZCBhZnRlclxyXG4gKiBlYWNoIGNhbGwgdG8gW3VwZGF0ZV17QGxpbmsgQWJzdHJhY3RIb3N0RmVhdHVyZSN1cGRhdGV9LlxyXG4gKiBAcHJvcGVydHkge09iamVjdH0gU0VSVklDRVMgLSBBbnkgQVdTIHNlcnZpY2VzIHRoYXQgYXJlIG5lY2Vzc2FyeSBmb3IgdGhlXHJcbiAqIGZlYXR1cmUgdG8gZnVuY3Rpb24uXHJcbiAqL1xyXG5jbGFzcyBBYnN0cmFjdEhvc3RGZWF0dXJlIHtcclxuICAvKipcclxuICAgKiBAY29uc3RydWN0b3JcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7Y29yZS9Ib3N0T2JqZWN0fSBob3N0IC0gVGhlIEhvc3RPYmplY3QgbWFuYWdpbmcgdGhlIGZlYXR1cmUuXHJcbiAgICovXHJcbiAgY29uc3RydWN0b3IoaG9zdCkge1xyXG4gICAgdGhpcy5faG9zdCA9IGhvc3Q7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBZGRzIGEgbmFtZXNwYWNlIHRvIHRoZSBob3N0IHdpdGggdGhlIG5hbWUgb2YgdGhlIGZlYXR1cmUgdG8gY29udGFpbiBwcm9wZXJ0aWVzXHJcbiAgICogYW5kIG1ldGhvZHMgZnJvbSB0aGUgZmVhdHVyZSB0aGF0IHVzZXJzIG9mIHRoZSBob3N0IG5lZWQgYWNjZXNzIHRvLlxyXG4gICAqL1xyXG4gIGluc3RhbGxBcGkoKSB7XHJcbiAgICBjb25zdCBldmVudHMgPSB7fTtcclxuICAgIGNvbnN0IGFwaSA9IHtFVkVOVFM6IGV2ZW50c307XHJcblxyXG4gICAgLy8gQWRkIHRoZSBjbGFzcyBuYW1lIHRvIGV2ZW50IG5hbWVzXHJcbiAgICBPYmplY3QuZW50cmllcyh0aGlzLmNvbnN0cnVjdG9yLkVWRU5UUykuZm9yRWFjaCgoW25hbWUsIHZhbHVlXSkgPT4ge1xyXG4gICAgICBldmVudHNbbmFtZV0gPSBgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9LiR7dmFsdWV9YDtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuX2hvc3RbdGhpcy5jb25zdHJ1Y3Rvci5uYW1lXSA9IGFwaTtcclxuXHJcbiAgICByZXR1cm4gYXBpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgaG9zdCB0aGF0IG1hbmFnZXMgdGhlIGZlYXR1cmUuXHJcbiAgICpcclxuICAgKiBAcmVhZG9ubHlcclxuICAgKi9cclxuICBnZXQgaG9zdCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9ob3N0O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgZW5naW5lIG93bmVyIG9iamVjdCBvZiB0aGUgaG9zdC5cclxuICAgKlxyXG4gICAqIEByZWFkb25seVxyXG4gICAqL1xyXG4gIGdldCBvd25lcigpIHtcclxuICAgIHJldHVybiB0aGlzLl9ob3N0Lm93bmVyO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTGlzdGVuIHRvIGEgZmVhdHVyZSBtZXNzYWdlIGZyb20gdGhlIGhvc3Qgb2JqZWN0LlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgLSBNZXNzYWdlIHRvIGxpc3RlbiBmb3IuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgLSBUaGUgY2FsbGJhY2sgdG8gZXhlY3V0ZSB3aGVuIHRoZSBtZXNzYWdlIGlzIHJlY2VpdmVkLlxyXG4gICAqL1xyXG4gIGxpc3RlblRvKG1lc3NhZ2UsIGNhbGxiYWNrKSB7XHJcbiAgICB0aGlzLl9ob3N0Lmxpc3RlblRvKG1lc3NhZ2UsIGNhbGxiYWNrKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIExpc3RlbiB0byBhIGZlYXR1cmUgbWVzc2FnZSBmcm9tIHRoZSBnbG9iYWwgbWVzc2VuZ2VyLiBGZWF0dXJlIG1lc3NhZ2VzIHdpbGxcclxuICAgKiBiZSBwcmVmaXhlZCB3aXRoIHRoZSBjbGFzcyBuYW1lIG9mIHRoZSBmZWF0dXJlLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgLSBNZXNzYWdlIHRvIGxpc3RlbiBmb3IuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgLSBUaGUgY2FsbGJhY2sgdG8gZXhlY3V0ZSB3aGVuIHRoZSBtZXNzYWdlIGlzIHJlY2VpdmVkLlxyXG4gICAqL1xyXG4gIHN0YXRpYyBsaXN0ZW5UbyhtZXNzYWdlLCBjYWxsYmFjaykge1xyXG4gICAgbWVzc2FnZSA9IGAke3RoaXMubmFtZX0uJHttZXNzYWdlfWA7XHJcbiAgICBNZXNzZW5nZXIubGlzdGVuVG8obWVzc2FnZSwgY2FsbGJhY2spO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU3RvcCBsaXN0ZW5pbmcgdG8gYSBtZXNzYWdlIGZyb20gdGhlIGhvc3Qgb2JqZWN0LlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgLSBNZXNzYWdlIHRvIHN0b3AgbGlzdGVuaW5nIGZvci5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gY2FsbGJhY2sgLSBPcHRpb25hbCBjYWxsYmFjayB0byByZW1vdmUuIElmIG5vbmUgaXMgZGVmaW5lZCxcclxuICAgKiByZW1vdmUgYWxsIGNhbGxiYWNrcyBmb3IgdGhlIG1lc3NhZ2UuXHJcbiAgICovXHJcbiAgc3RvcExpc3RlbmluZyhtZXNzYWdlLCBjYWxsYmFjaykge1xyXG4gICAgdGhpcy5faG9zdC5zdG9wTGlzdGVuaW5nKG1lc3NhZ2UsIGNhbGxiYWNrKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFN0b3AgbGlzdGVuaW5nIHRvIGEgbWVzc2FnZSBmcm9tIHRoZSBnbG9iYWwgbWVzc2VuZ2VyLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgLSBNZXNzYWdlIHRvIHN0b3AgbGlzdGVuaW5nIGZvci5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gY2FsbGJhY2sgLSBPcHRpb25hbCBjYWxsYmFjayB0byByZW1vdmUuIElmIG5vbmUgaXMgZGVmaW5lZCxcclxuICAgKiByZW1vdmUgYWxsIGNhbGxiYWNrcyBmb3IgdGhlIG1lc3NhZ2UuXHJcbiAgICovXHJcbiAgc3RhdGljIHN0b3BMaXN0ZW5pbmcobWVzc2FnZSwgY2FsbGJhY2spIHtcclxuICAgIG1lc3NhZ2UgPSBgJHt0aGlzLm5hbWV9LiR7bWVzc2FnZX1gO1xyXG4gICAgTWVzc2VuZ2VyLnN0b3BMaXN0ZW5pbmcobWVzc2FnZSwgY2FsbGJhY2spO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU3RvcCBsaXN0ZW5pbmcgdG8gYSBtZXNzYWdlIG1hdGNoaW5nIHRoZSBnaXZlbiByZWd1bGFyIGV4cHJlc3Npb24gZnJvbSB0aGVcclxuICAgKiBob3N0IG9iamVjdC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7UmVnZXhwfSByZWdleHAgLSBUaGUgcmVndWxhciBleHByZXNzaW9uIHRvIHN0b3AgbGlzdGVuaW5nIGZvci5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gY2FsbGJhY2sgLSBPcHRpb25hbCBjYWxsYmFjayB0byByZW1vdmUuIElmIG5vbmUgaXMgZGVmaW5lZCxcclxuICAgKiByZW1vdmUgYWxsIGNhbGxiYWNrcyBmb3IgdGhlIG1lc3NhZ2UuXHJcbiAgICovXHJcbiAgc3RvcExpc3RlbmluZ0J5UmVnZXhwKHJlZ2V4cCwgY2FsbGJhY2spIHtcclxuICAgIHRoaXMuX2hvc3Quc3RvcExpc3RlbmluZ0J5UmVnZXhwKHJlZ2V4cCwgY2FsbGJhY2spO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU3RvcCBsaXN0ZW5pbmcgdG8gYSBtZXNzYWdlIG1hdGNoaW5nIHRoZSBnaXZlbiByZWd1bGFyIGV4cHJlc3Npb24gZnJvbSB0aGVcclxuICAgKiBnbG9iYWwgbWVzc2VuZ2VyLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtSZWdleHB9IHJlZ2V4cCAtIFRoZSByZWd1bGFyIGV4cHJlc3Npb24gdG8gc3RvcCBsaXN0ZW5pbmcgZm9yLlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBjYWxsYmFjayAtIE9wdGlvbmFsIGNhbGxiYWNrIHRvIHJlbW92ZS4gSWYgbm9uZSBpcyBkZWZpbmVkLFxyXG4gICAqIHJlbW92ZSBhbGwgY2FsbGJhY2tzIGZvciB0aGUgbWVzc2FnZS5cclxuICAgKi9cclxuICBzdGF0aWMgc3RvcExpc3RlbmluZ0J5UmVnZXhwKHJlZ2V4cCwgY2FsbGJhY2spIHtcclxuICAgIHJlZ2V4cCA9IG5ldyBSZWdFeHAoYF4ke3RoaXMubmFtZX0uJHtyZWdleHAuc291cmNlLnJlcGxhY2UoL1xcXi8sICcnKX1gKTtcclxuICAgIE1lc3Nlbmdlci5zdG9wTGlzdGVuaW5nQnlSZWdleHAocmVnZXhwLCBjYWxsYmFjayk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTdG9wIGxpc3RlbmluZyB0byBhbGwgbWVzc2FnZXMuXHJcbiAgICovXHJcbiAgc3RvcExpc3RlbmluZ1RvQWxsKCkge1xyXG4gICAgdGhpcy5faG9zdC5zdG9wTGlzdGVuaW5nVG9BbGwoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFN0b3AgbGlzdGVuaW5nIHRvIGFsbCBmZWF0dXJlIG1lc3NhZ2VzLlxyXG4gICAqL1xyXG4gIHN0YXRpYyBzdG9wTGlzdGVuaW5nVG9BbGwoKSB7XHJcbiAgICBNZXNzZW5nZXIuc3RvcExpc3RlbmluZ0J5UmVnZXhwKG5ldyBSZWdFeHAoYF4ke3RoaXMubmFtZX0uYCkpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRW1pdCBmZWF0dXJlIG1lc3NhZ2VzIGZyb20gdGhlIGhvc3QuIEZlYXR1cmUgbWVzc2FnZXMgd2lsbCBiZSBwcmVmaXhlZCB3aXRoXHJcbiAgICogdGhlIGNsYXNzIG5hbWUgb2YgdGhlIGZlYXR1cmUuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSAtIFRoZSBtZXNzYWdlIHRvIGVtaXQuXHJcbiAgICogQHBhcmFtIHthbnk9fSB2YWx1ZSAtIE9wdGlvbmFsIHBhcmFtZXRlciB0byBwYXNzIHRvIGxpc3RlbmVyIGNhbGxiYWNrcy5cclxuICAgKi9cclxuICBlbWl0KG1lc3NhZ2UsIHZhbHVlKSB7XHJcbiAgICBtZXNzYWdlID0gYCR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfS4ke21lc3NhZ2V9YDtcclxuICAgIHRoaXMuX2hvc3QuZW1pdChtZXNzYWdlLCB2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFbWl0IGZlYXR1cmUgbWVzc2FnZXMgZnJvbSB0aGUgZ2xvYmFsIG1lc3Nlbmdlci4gRmVhdHVyZSBtZXNzYWdlcyB3aWxsIGJlIHByZWZpeGVkXHJcbiAgICogd2l0aCB0aGUgY2xhc3MgbmFtZSBvZiB0aGUgZmVhdHVyZS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIC0gVGhlIG1lc3NhZ2UgdG8gZW1pdC5cclxuICAgKiBAcGFyYW0ge2FueT19IHZhbHVlIC0gT3B0aW9uYWwgcGFyYW1ldGVyIHRvIHBhc3MgdG8gbGlzdGVuZXIgY2FsbGJhY2tzLlxyXG4gICAqL1xyXG4gIHN0YXRpYyBlbWl0KG1lc3NhZ2UsIHZhbHVlKSB7XHJcbiAgICBtZXNzYWdlID0gYCR7dGhpcy5uYW1lfS4ke21lc3NhZ2V9YDtcclxuICAgIE1lc3Nlbmdlci5lbWl0KG1lc3NhZ2UsIHZhbHVlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEV4ZWN1dGVzIGVhY2ggdGltZSB0aGUgaG9zdCBpcyB1cGRhdGVkLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IGRlbHRhVGltZSAtIEFtb3VudCBvZiB0aW1lIHNpbmNlIHRoZSBsYXN0IGhvc3QgdXBkYXRlIHdhc1xyXG4gICAqIGNhbGxlZC5cclxuICAgKi9cclxuICB1cGRhdGUoZGVsdGFUaW1lKSB7XHJcbiAgICB0aGlzLmVtaXQodGhpcy5jb25zdHJ1Y3Rvci5FVkVOVFMudXBkYXRlLCBkZWx0YVRpbWUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2xlYW4gdXAgb25jZSB0aGUgZmVhdHVyZSBpcyBubyBsb25nZXIgaW4gdXNlLiBSZW1vdmUgdGhlIGZlYXR1cmUgbmFtZXNwYWNlXHJcbiAgICogZnJvbSB0aGUgaG9zdCBhbmQgcmVtb3ZlIHJlZmVyZW5jZSB0byB0aGUgaG9zdC5cclxuICAgKi9cclxuICBkaXNjYXJkKCkge1xyXG4gICAgT2JqZWN0LmtleXModGhpcy5faG9zdFt0aGlzLmNvbnN0cnVjdG9yLm5hbWVdKS5mb3JFYWNoKG5hbWUgPT4ge1xyXG4gICAgICBkZWxldGUgdGhpcy5faG9zdFt0aGlzLmNvbnN0cnVjdG9yLm5hbWVdW25hbWVdO1xyXG4gICAgfSk7XHJcblxyXG4gICAgZGVsZXRlIHRoaXMuX2hvc3RbdGhpcy5jb25zdHJ1Y3Rvci5uYW1lXTtcclxuICAgIGRlbGV0ZSB0aGlzLl9ob3N0O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQXBwbGllcyBhIHNlcXVlbmNlIG9mIG1peGluIGNsYXNzIGZhY3RvcnkgZnVuY3Rpb25zIHRvIHRoaXMgY2xhc3MgYW5kXHJcbiAgICogcmV0dXJucyB0aGUgcmVzdWx0LiBFYWNoIGZ1bmN0aW9uIGlzIGV4cGVjdGVkIHRvIHJldHVybiBhIGNsYXNzIHRoYXRcclxuICAgKiBleHRlbmRzIHRoZSBjbGFzcyBpdCB3YXMgZ2l2ZW4uIFRoZSBmdW5jdGlvbnMgYXJlIGFwcGxpZWQgaW4gdGhlIG9yZGVyXHJcbiAgICogdGhhdCBwYXJhbWV0ZXJzIGFyZSBnaXZlbiwgbWVhbmluZyB0aGF0IHRoZSBmaXJzdCBmYWN0b3J5IHdpbGxcclxuICAgKiBleHRlbmQgdGhpcyBiYXNlIGNsYXNzLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHsuLi5GdW5jdGlvbn0gbWl4aW5DbGFzc0ZhY3RvcmllcyBDbGFzcyBmYWN0b3J5IGZ1bmN0aW9ucyB0aGF0IHdpbGxcclxuICAgKiBiZSBhcHBsaWVkLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0NsYXNzfSBBIGNsYXNzIHRoYXQgaXMgdGhlIHJlc3VsdCBvZiBhcHBseWluZyB0aGUgZmFjdG9yeSBmdW5jdGlvbnMuXHJcbiAgICogVGhlIHJlc3VsdGluZyBjbGFzcyB3aWxsIGFsd2F5cyBpbmhlcml0IGZyb20gQWJzdHJhY3RIb3N0RmVhdHVyZS5cclxuICAgKi9cclxuICBzdGF0aWMgbWl4KC4uLm1peGluQ2xhc3NGYWN0b3JpZXMpIHtcclxuICAgIGxldCBSZXN1bHRDbGFzcyA9IHRoaXM7XHJcblxyXG4gICAgbWl4aW5DbGFzc0ZhY3Rvcmllcy5mb3JFYWNoKG1peGluQ2xhc3NGYWN0b3J5ID0+IHtcclxuICAgICAgUmVzdWx0Q2xhc3MgPSBtaXhpbkNsYXNzRmFjdG9yeShSZXN1bHRDbGFzcyk7XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gUmVzdWx0Q2xhc3M7XHJcbiAgfVxyXG59XHJcblxyXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhBYnN0cmFjdEhvc3RGZWF0dXJlLCB7XHJcbiAgRVZFTlRTOiB7XHJcbiAgICB2YWx1ZToge1xyXG4gICAgICB1cGRhdGU6ICdvblVwZGF0ZScsXHJcbiAgICB9LFxyXG4gICAgd3JpdGFibGU6IGZhbHNlLFxyXG4gIH0sXHJcbiAgU0VSVklDRVM6IHtcclxuICAgIHZhbHVlOiB7fSxcclxuICAgIHdyaXRhYmxlOiBmYWxzZSxcclxuICB9LFxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IEFic3RyYWN0SG9zdEZlYXR1cmU7XHJcbiIsIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxyXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTBcclxuaW1wb3J0IE1lc3NlbmdlciBmcm9tICdhcHAvTWVzc2VuZ2VyJztcclxuaW1wb3J0IEFic3RyYWN0SG9zdEZlYXR1cmUgZnJvbSAnLi9BYnN0cmFjdEhvc3RGZWF0dXJlJztcclxuaW1wb3J0IFV0aWxzIGZyb20gJy4vVXRpbHMnO1xyXG5cclxuLyoqXHJcbiAqIE9iamVjdCB0aGF0IG1hbmFnZXMgYWNjZXNzIHRvIGFsbCBIb3N0IGZlYXR1cmVzLiBDb250YWlucyBhIHJlZmVyZW5jZSB0b1xyXG4gKiBlbmdpbmUtc3BlY2lmaWMgdmlzdWFscyBpZiBhcHBsaWNhYmxlLlxyXG4gKlxyXG4gKiBAZXh0ZW5kcyBjb3JlL01lc3NlbmdlclxyXG4gKiBAYWxpYXMgY29yZS9Ib3N0T2JqZWN0XHJcbiAqXHJcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBFVkVOVFMgLSBCdWlsdC1pbiBtZXNzYWdlcyB0aGF0IHRoZSBNZXNzZW5nZXIgZW1pdHMuXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbRVZFTlRTLnVwZGF0ZT0nb25VcGRhdGUnXSAtIE1lc3NhZ2UgdGhhdCBpcyBlbWl0dGVkIGFmdGVyXHJcbiAqIGVhY2ggY2FsbCB0byBbdXBkYXRlXXtAbGluayBjb3JlL0hvc3RPYmplY3QjdXBkYXRlfS5cclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtFVkVOVFMuYWRkRmVhdHVyZT0nb25BZGRGZWF0dXJlJ10gLSBNZXNzYWdlIHRoYXQgaXMgZW1pdHRlZFxyXG4gKiBhZnRlciBlYWNoIGNhbGwgdG8gW2FkZEZlYXR1cmVde0BsaW5rIGNvcmUvSG9zdE9iamVjdCNhZGRGZWF0dXJlfS5cclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtFVkVOVFMucmVtb3ZlRmVhdHVyZT0nb25SZW1vdmVGZWF0dXJlJ10gLSBNZXNzYWdlIHRoYXQgaXMgZW1pdHRlZFxyXG4gKiBhZnRlciBlYWNoIGNhbGwgdG8gW3JlbW92ZUZlYXR1cmVde0BsaW5rIGNvcmUvSG9zdE9iamVjdCNyZW1vdmVGZWF0dXJlfS5cclxuICovXHJcbmNsYXNzIEhvc3RPYmplY3QgZXh0ZW5kcyBNZXNzZW5nZXIge1xyXG4gIC8qKlxyXG4gICAqIEBjb25zdHJ1Y3RvclxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtPYmplY3Q9fSBvcHRpb25zIC0gT3B0aW9ucyBmb3IgdGhlIGhvc3QuXHJcbiAgICogQHBhcmFtIHtPYmplY3Q9fSBvcHRpb25zLm93bmVyIC0gT3B0aW9uYWwgZW5naW5lLXNwZWNpZmljIG93bmVyIG9mIHRoZSBob3N0LlxyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKHtvd25lciA9IHt9fSA9IHt9KSB7XHJcbiAgICAvLyBJZiBhbiBvd25lciBpcyBzcGVjaWZpZWQsIHVzZSBpdHMgaWQgZm9yIG1lc3NhZ2luZ1xyXG4gICAgc3VwZXIob3duZXIuaWQpO1xyXG5cclxuICAgIHRoaXMuX293bmVyID0gb3duZXI7XHJcbiAgICB0aGlzLl9mZWF0dXJlcyA9IHt9O1xyXG4gICAgdGhpcy5fd2FpdHMgPSBbXTtcclxuICAgIHRoaXMuX2xhc3RVcGRhdGUgPSB0aGlzLm5vdztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIGVuZ2luZSBvd25lciBvYmplY3Qgb2YgdGhlIGhvc3QuXHJcbiAgICpcclxuICAgKiBAcmVhZG9ubHlcclxuICAgKiBAdHlwZSB7T2JqZWN0fVxyXG4gICAqL1xyXG4gIGdldCBvd25lcigpIHtcclxuICAgIHJldHVybiB0aGlzLl9vd25lcjtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIGN1cnJlbnQgdGltZSBpbiBtaWxsaXNlY29uZHMuXHJcbiAgICpcclxuICAgKiBAcmVhZG9ubHlcclxuICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAqL1xyXG4gIGdldCBub3coKSB7XHJcbiAgICByZXR1cm4gRGF0ZS5ub3coKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIGFtb3VudCBvZiB0aW1lIGluIG1pbGxpc2Vjb25kcyBzaW5jZSB1cGRhdGUgd2FzIGxhc3QgY2FsbGVkLlxyXG4gICAqXHJcbiAgICogQHJlYWRvbmx5XHJcbiAgICogQHR5cGUge251bWJlcn1cclxuICAgKi9cclxuICBnZXQgZGVsdGFUaW1lKCkge1xyXG4gICAgcmV0dXJuIHRoaXMubm93IC0gdGhpcy5fbGFzdFVwZGF0ZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBpbiB0aGUgZW5naW5lJ3MgcmVuZGVyIGxvb3AuIEV4ZWN1dGVzIHVwZGF0ZVxyXG4gICAqIGxvb3BzIGZvciBhbGwgZmVhdHVyZXMuXHJcbiAgICovXHJcbiAgdXBkYXRlKCkge1xyXG4gICAgY29uc3QgY3VycmVudFRpbWUgPSB0aGlzLm5vdztcclxuICAgIGNvbnN0IGR0ID0gdGhpcy5kZWx0YVRpbWU7XHJcblxyXG4gICAgLy8gUHJvZ3Jlc3Mgc3RvcmVkIHdhaXRzXHJcbiAgICB0aGlzLl93YWl0cy5mb3JFYWNoKHdhaXQgPT4ge1xyXG4gICAgICB3YWl0LmV4ZWN1dGUoZHQpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gVXBkYXRlIGFsbCBmZWF0dXJlc1xyXG4gICAgT2JqZWN0LnZhbHVlcyh0aGlzLl9mZWF0dXJlcykuZm9yRWFjaChmZWF0dXJlID0+IHtcclxuICAgICAgZmVhdHVyZS51cGRhdGUoZHQpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gTm90aWZ5IGxpc3RlbmVycyBhbiB1cGRhdGUgb2NjdXJlZFxyXG4gICAgdGhpcy5lbWl0KHRoaXMuY29uc3RydWN0b3IuRVZFTlRTLnVwZGF0ZSwgZHQpO1xyXG5cclxuICAgIHRoaXMuX2xhc3RVcGRhdGUgPSBjdXJyZW50VGltZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiBhIGRlZmVycmVkIHByb21pc2UgdGhhdCB3aWxsIHdhaXQgYSBnaXZlbiBudW1iZXIgb2Ygc2Vjb25kcyBiZWZvcmVcclxuICAgKiByZXNvbHZpbmcuIFRoZSBob3N0IHdpbGwgY29udGludW91c2x5IHVwZGF0ZSB0aGUgd2FpdCBwcm9taXNlIGR1cmluZyB0aGVcclxuICAgKiB1cGRhdGUgbG9vcCB1bnRpbCBpdCByZXNvbHZlcy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbc2Vjb25kcz0wXSAtIE51bWJlciBvZiBzZWNvbmRzIHRvIHdhaXQgYmVmb3JlIHJlc29sdmluZy5cclxuICAgKiBAcGFyYW0ge09iamVjdD19IG9wdGlvbnMgLSBPcHRpb25hbCBvcHRpb25zIG9iamVjdFxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRpb25zLm9uRmluaXNoXSAtIENhbGxiYWNrIHRvIGV4ZWN1dGUgb25jZSB0aGUgd2FpdCB0aW1lXHJcbiAgICogaXMgbWV0LlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvcHRpb25zLm9uUHJvZ3Jlc3MgLSBDYWxsYmFjayB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgd2FpdFxyXG4gICAqIHRpbWUgcHJvZ3Jlc3NlcyB0b3dhcmRzIHRoZSB0YXJnZXQgbnVtYmVyIG9mIHNlY29uZHMuIFRoZSBhbW91bnQgb2YgcHJvZ3Jlc3NcclxuICAgKiBhcyBhIDAtMSBwZXJjZW50YWdlIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudC5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb3B0aW9ucy5vbkNhbmNlbCAtIENhbGxiYWNrIHRvIGV4ZWN1dGUgaWYgdGhlIHVzZXIgY2FuY2Vsc1xyXG4gICAqIHRoZSB3YWl0IGJlZm9yZSBjb21wbGV0aW9uLlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvcHRpb25zLm9uRXJyb3IgLSBDYWxsYmFjayB0byBleGVjdXRlIGlmIHRoZSB3YWl0IHN0b3BzXHJcbiAgICogYmVjYXVzZSBhbiBlcnJvciBpcyBlbmNvdW50ZXJlZC4gVGhlIGVycm9yIG1lc3NhZ2UgaXMgcGFzc2VkIGFzIGEgcGFyYW1ldGVyLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0RlZmVycmVkfVxyXG4gICAqL1xyXG4gIHdhaXQoc2Vjb25kcywge29uRmluaXNoLCBvblByb2dyZXNzLCBvbkNhbmNlbCwgb25FcnJvcn0gPSB7fSkge1xyXG4gICAgY29uc3Qgd2FpdCA9IFV0aWxzLndhaXQoc2Vjb25kcywge29uRmluaXNoLCBvblByb2dyZXNzLCBvbkNhbmNlbCwgb25FcnJvcn0pO1xyXG4gICAgdGhpcy5fd2FpdHMucHVzaCh3YWl0KTtcclxuXHJcbiAgICAvLyBPbmNlIHRoZSB3YWl0IHByb21pc2UgaXMgbm8gbG9uZ2VyIHBlbmRpbmcgcmVtb3ZlIGl0IGZyb20gdGhlIHdhaXRzIGFycmF5XHJcbiAgICBjb25zdCBvbkNvbXBsZXRlID0gKCkgPT4ge1xyXG4gICAgICB0aGlzLl93YWl0cy5zcGxpY2UodGhpcy5fd2FpdHMuaW5kZXhPZih3YWl0KSwgMSk7XHJcbiAgICB9O1xyXG4gICAgd2FpdC50aGVuKG9uQ29tcGxldGUsIG9uQ29tcGxldGUpO1xyXG5cclxuICAgIHJldHVybiB3YWl0O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSW5zdGFudGlhdGUgYSBuZXcgSG9zdCBmZWF0dXJlIGFuZCBzdG9yZSBpdC4gRmVhdHVyZXMgbXVzdCBpbmhlcml0IGZyb21cclxuICAgKiBBYnN0cmFjdEhvc3RGZWF0dXJlLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtDbGFzc30gRmVhdHVyZUNsYXNzIC0gQ2xhc3MgdGhhdCB3aWxsIGluc3RhbnRpYXRlIHRoZSBmZWF0dXJlLiBNdXN0XHJcbiAgICogZXh0ZW5kIHtAbGluayBBYnN0cmFjdEhvc3RGZWF0dXJlfS5cclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtmb3JjZT1mYWxzZV0gLSBXaGV0aGVyIG9yIG5vdCB0byBvdmVyd3JpdGUgYW4gZXhpc3RpbmdcclxuICAgKiBmZWF0dXJlIGlmIG9uZSBvZiB0aGlzIHR5cGUgYWxyZWFkeSBleGlzdHMgb24gdGhlIG9iamVjdC5cclxuICAgKiBAcGFyYW0gIHsuLi5hbnl9IGFyZ3MgLSBBZGRpdGlvbmFsIGFyZ3VtZW50cyB0byBwYXNzIHRvIHRoZSBGZWF0dXJlQ2xhc3NcclxuICAgKiBjb25zdHJ1Y3Rvci4gVGhlIEhvc3RPYmplY3Qgd2lsbCBhbHdheXMgYmUgcGFzc2VkIGFzIHRoZSBmaXJzdCBhcmd1bWVudC5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtib29sZWFufSAtIFdoZXRoZXIgb3Igbm90IGEgZmVhdHVyZSB3YXMgc3VjY2Vzc2Z1bGx5IGFkZGVkLlxyXG4gICAqL1xyXG4gIGFkZEZlYXR1cmUoRmVhdHVyZUNsYXNzLCBmb3JjZSA9IGZhbHNlLCAuLi5hcmdzKSB7XHJcbiAgICBjb25zdCBpbnB1dFR5cGUgPSB0eXBlb2YgRmVhdHVyZUNsYXNzO1xyXG5cclxuICAgIC8vIE1ha2Ugc3VyZSB0aGUgRmVhdHVyZUNsYXNzIGNhbiBiZSBleGVjdXRlZFxyXG4gICAgaWYgKGlucHV0VHlwZSAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgYENhbm5vdCBhZGQgZmVhdHVyZSB0byBob3N0ICR7dGhpcy5pZH0uIEZlYXR1cmVDbGFzcyBtdXN0IGJlIGEgY2xhc3MuYFxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgLy8gTWFrZSBzdXJlIHRoZSBmZWF0dXJlIGlzIGEgaG9zdCBmZWF0dXJlXHJcbiAgICBlbHNlIGlmICghKEZlYXR1cmVDbGFzcy5wcm90b3R5cGUgaW5zdGFuY2VvZiBBYnN0cmFjdEhvc3RGZWF0dXJlKSkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgYENhbm5vdCBhZGQgZmVhdHVyZSAke0ZlYXR1cmVDbGFzcy5uYW1lfSB0byBob3N0ICR7dGhpcy5pZH0uIEZlYXR1cmVDbGFzcyBtdXN0IGV4dGVuZCBBYnN0cmFjdEhvc3RGZWF0dXJlLmBcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBDaGVjayBpZiB0aGUgRmVhdHVyZUNsYXNzIGFscmVhZHkgZXhpc3RzIG9uIHRoaXMgb2JqZWN0XHJcbiAgICBpZiAodGhpcy5fZmVhdHVyZXNbRmVhdHVyZUNsYXNzLm5hbWVdICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgaWYgKGZvcmNlKSB7XHJcbiAgICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgICAgYEZlYXR1cmUgJHtGZWF0dXJlQ2xhc3MubmFtZX0gYWxyZWFkeSBleGlzdHMgb24gaG9zdCAke3RoaXMuaWR9LiBFeGlzdGluZyBmZWF0dXJlIHdpbGwgYmUgb3ZlcndyaXR0ZW4uYFxyXG4gICAgICAgICk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgICAgYEZlYXR1cmUgJHtGZWF0dXJlQ2xhc3MubmFtZX0gYWxyZWFkeSBleGlzdHMgb24gaG9zdCAke3RoaXMuaWR9LiBVc2UgJ2ZvcmNlJyBhcmd1bWVudCB0byBvdmVyd3JpdGUgdGhlIGZlYXR1cmUuYFxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBJbml0aWFsaXplIHRoZSBmZWF0dXJlXHJcbiAgICBjb25zdCBmZWF0dXJlID0gbmV3IEZlYXR1cmVDbGFzcyh0aGlzLCAuLi5hcmdzKTtcclxuICAgIGZlYXR1cmUuaW5zdGFsbEFwaSgpO1xyXG5cclxuICAgIHRoaXMuX2ZlYXR1cmVzW0ZlYXR1cmVDbGFzcy5uYW1lXSA9IGZlYXR1cmU7XHJcbiAgICB0aGlzLmVtaXQodGhpcy5jb25zdHJ1Y3Rvci5FVkVOVFMuYWRkRmVhdHVyZSwgRmVhdHVyZUNsYXNzLm5hbWUpO1xyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVtb3ZlIGEgZmVhdHVyZSBmcm9tIHRoZSBvYmplY3QuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdHlwZU5hbWUgLSBOYW1lIG9mIHRoZSB0eXBlIG9mIGZlYXR1cmUgdG8gcmVtb3ZlLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge2Jvb2xlYW59IC0gV2hldGhlciBvciBub3QgYSBmZWF0dXJlIHdhcyBzdWNjZXNzZnVsbHkgcmVtb3ZlZC5cclxuICAgKi9cclxuICByZW1vdmVGZWF0dXJlKHR5cGVOYW1lKSB7XHJcbiAgICBpZiAodGhpcy5fZmVhdHVyZXNbdHlwZU5hbWVdID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgIGBGZWF0dXJlIG9mIHR5cGUgJHt0eXBlTmFtZX0gZG9lcyBub3QgZXhpc3Qgb24gaG9zdCAke3RoaXMuaWR9LiBObyBmZWF0dXJlIHdpbGwgYmUgcmVtb3ZlZC5gXHJcbiAgICAgICk7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIFJlbW92ZSB0aGUgZmVhdHVyZVxyXG4gICAgICB0aGlzLmVtaXQodGhpcy5jb25zdHJ1Y3Rvci5FVkVOVFMucmVtb3ZlRmVhdHVyZSwgdHlwZU5hbWUpO1xyXG4gICAgICB0aGlzLl9mZWF0dXJlc1t0eXBlTmFtZV0uZGlzY2FyZCgpO1xyXG4gICAgICBkZWxldGUgdGhpcy5fZmVhdHVyZXNbdHlwZU5hbWVdO1xyXG5cclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJbmRpY2F0ZSB3aGV0aGVyIGEgc3BlY2lmaWVkIGZlYXR1cmUgaXMgaW5zdGFsbGVkIG9uIHRoZSBob3N0LlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHR5cGVOYW1lIC0gTmFtZSBvZiB0aGUgdHlwZSBvZiBmZWF0dXJlIHRvIGxvb2sgZm9yLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAgICovXHJcbiAgaGFzRmVhdHVyZSh0eXBlTmFtZSkge1xyXG4gICAgcmV0dXJuICEhdGhpcy5fZmVhdHVyZXNbdHlwZU5hbWVdO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTGlzdCB0aGUgbmFtZXMgb2YgdGhlIGZlYXR1cmVzIGluc3RhbGxlZCBvbiB0aGUgaG9zdC5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtBcnJheS48c3RyaW5nPn1cclxuICAgKi9cclxuICBsaXN0RmVhdHVyZXMoKSB7XHJcbiAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5fZmVhdHVyZXMpO1xyXG4gIH1cclxufVxyXG5cclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhvc3RPYmplY3QsICdFVkVOVFMnLCB7XHJcbiAgdmFsdWU6IHtcclxuICAgIC4uLk9iamVjdC5nZXRQcm90b3R5cGVPZihIb3N0T2JqZWN0KS5FVkVOVFMsXHJcbiAgICB1cGRhdGU6ICdvblVwZGF0ZScsXHJcbiAgICBhZGRGZWF0dXJlOiAnb25BZGRGZWF0dXJlJyxcclxuICAgIHJlbW92ZUZlYXR1cmU6ICdvblJlbW92ZUZlYXR1cmUnLFxyXG4gIH0sXHJcbiAgd3JpdGFibGU6IGZhbHNlLFxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IEhvc3RPYmplY3Q7XHJcbiIsIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxyXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTBcclxuXHJcbi8qKlxyXG4gKiBUaHJlZWpzIENsb2NrIG9iamVjdFxyXG4gKlxyXG4gKiBAZXh0ZXJuYWwgXCJUSFJFRS5DbG9ja1wiXHJcbiAqIEBzZWUgaHR0cHM6Ly90aHJlZWpzLm9yZy9kb2NzLyNhcGkvZW4vY29yZS9DbG9ja1xyXG4gKi9cclxuXHJcbmltcG9ydCBDb3JlSG9zdE9iamVjdCBmcm9tICdjb3JlL0hvc3RPYmplY3QnO1xyXG5cclxuLyoqXHJcbiAqIEBhbGlhcyB0aHJlZS5qcy9Ib3N0T2JqZWN0XHJcbiAqIEBleHRlbmRzIGNvcmUvSG9zdE9iamVjdFxyXG4gKi9cclxuY2xhc3MgSG9zdE9iamVjdCBleHRlbmRzIENvcmVIb3N0T2JqZWN0IHtcclxuICAvKipcclxuICAgKiBAY29uc3RydWN0b3JcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0PX0gb3B0aW9ucyAtIE9wdGlvbnMgZm9yIHRoZSBob3N0LlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0PX0gb3B0aW9ucy5vd25lciAtIE9wdGlvbmFsIGVuZ2luZS1zcGVjaWZpYyBvd25lciBvZiB0aGUgaG9zdC5cclxuICAgKiBAcGFyYW0ge2V4dGVybmFsOlwiVEhSRUUuQ2xvY2tcIj19IG9wdGlvbnMuY2xvY2sgLSBPcHRpb25hbCBjbG9jayB0byBtYW5hZ2UgdGltZS5cclxuICAgKi9cclxuICBjb25zdHJ1Y3RvcihvcHRpb25zID0ge30pIHtcclxuICAgIHN1cGVyKG9wdGlvbnMpO1xyXG5cclxuICAgIHRoaXMuX2Nsb2NrID0gb3B0aW9ucy5jbG9jaztcclxuXHJcbiAgICBpZiAodGhpcy5fY2xvY2spIHtcclxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdub3cnLCB7XHJcbiAgICAgICAgZ2V0OiAoKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5fY2xvY2suZ2V0RWxhcHNlZFRpbWUoKSAqIDEwMDA7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcblxyXG4gICAgICB0aGlzLl9sYXN0VXBkYXRlID0gdGhpcy5ub3c7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBIb3N0T2JqZWN0O1xyXG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cclxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVC0wXHJcblxyXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xyXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtY2xhc3Nlcy1wZXItZmlsZSAqL1xyXG5pbXBvcnQgSG9zdE9iamVjdCBmcm9tICdhcHAvSG9zdE9iamVjdCc7XHJcblxyXG4vKipcclxuICogQ2xhc3MgZmFjdG9yeSBpbnRlcmZhY2UgZm9yIGZlYXR1cmVzIHRoYXQgYXJlIGRlcGVuZGVudCBvbiBvdGhlciBmZWF0dXJlcyBiZWluZ1xyXG4gKiBwcmVzZW50IG9uIHRoZSBob3N0LiBFdmVudCBkZXBlbmRlbmNpZXMgd2lsbCBiZSBsaXN0ZW5lZCBmb3Igd2hlbiBhIGZlYXR1cmUgb2ZcclxuICogbWF0Y2hpbmcgdHlwZSBpcyBhZGRlZCB0byB0aGUgaG9zdCBhbmQgd2lsbCBzdG9wIGJlaW5nIGxpc3RlbmVkIGZvciB3aGVuIG9uZVxyXG4gKiBpcyByZW1vdmVkLiBJZiB0aGUgZmVhdHVyZSBpcyBhbHJlYWR5IHByZXNlbnQgd2hlbiBjb25zdHJ1Y3RlZCwgZXZlbnRzIHdpbGxcclxuICogYmUgbGlzdGVuZWQgZm9yIHJpZ2h0IGF3YXkuXHJcbiAqXHJcbiAqIEBpbnRlcmZhY2VcclxuICpcclxuICogQHByb3BlcnR5IHtPYmplY3R9IEVWRU5UX0RFUEVOREVOQ0lFUyAtIEV2ZW50cyB0aGF0IHRoZSBmZWF0dXJlIHNob3VsZCBzdGFydC9zdG9wXHJcbiAqIGxpc3RlbmluZyBmb3Igd2hlbiBhIGZlYXR1cmUgb2YgdHlwZSBGZWF0dXJlTmFtZSBpcyBhZGRlZC9yZW1vdmVkIGZyb20gdGhlIGhvc3QuXHJcbiAqIEV2ZW50IGRlcGVuZGVuY2llcyBzaG91bGQgZm9sbG93IHRoZSBzaWduYXR1cmU6XHJcbiAqICB7IEZlYXR1cmVOYW1lOiB7IGV2ZW50TmFtZTogY2FsbGJhY2tOYW1lLCAuLi4gfSwgLi4uIH1cclxuICovXHJcbmNsYXNzIEZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2Uge1xyXG4gIC8qKlxyXG4gICAqIFN0YXJ0IGxpc3RlbmluZyBmb3IgZXZlbnQgZGVwZW5kZW5jaWVzIHRoYXQgbWF0Y2ggdGhlIGdpdmVuIGZlYXR1cmUgdHlwZS5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdHlwZU5hbWUgLSB0eXBlIG9mIGZlYXR1cmUgdG8gbGlzdGVuIGZvci5cclxuICAgKi9cclxuICBfb25GZWF0dXJlQWRkZWQodHlwZU5hbWUpIHt9XHJcblxyXG4gIC8qKlxyXG4gICAqIFN0b3AgbGlzdGVuaW5nIGZvciBldmVudCBkZXBlbmRlbmNpZXMgdGhhdCBtYXRjaCB0aGUgZ2l2ZW4gZmVhdHVyZSB0eXBlLlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlTmFtZSAtIHR5cGUgb2YgZmVhdHVyZSB0byBzdG9wIGxpc3RlbmluZyBmb3IuXHJcbiAgICovXHJcbiAgX29uRmVhdHVyZVJlbW92ZWQodHlwZU5hbWUpIHt9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBhdWdtZW50cyB7QGxpbmsgQWJzdHJhY3RIb3N0RmVhdHVyZSNkaXNjYXJkfVxyXG4gICAqL1xyXG4gIGRpc2NhcmQoKSB7fVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGVzIGEgY2xhc3MgdGhhdCBpbXBsZW1lbnRzIHtAbGluayBGZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlfSBhbmQgZXh0ZW5kc1xyXG4gICAqIGEgc3BlY2lmaWVkIGJhc2UgY2xhc3MuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge0NsYXNzfSBCYXNlQ2xhc3MgLSBUaGUgY2xhc3MgdG8gZXh0ZW5kLlxyXG4gICAqXHJcbiAgICogQHJldHVybiB7Q2xhc3N9IEEgY2xhc3MgdGhhdCBleHRlbmRzIGBCYXNlQ2xhc3NgIGFuZCBpbXBsZW1lbnRzIHtAbGluayBGZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlfS5cclxuICAgKi9cclxuICBzdGF0aWMgTWl4aW4oQmFzZUNsYXNzKSB7XHJcbiAgICBjb25zdCBGZWF0dXJlRGVwZW5kZW50TWl4aW4gPSBjbGFzcyBleHRlbmRzIEJhc2VDbGFzcyB7XHJcbiAgICAgIGNvbnN0cnVjdG9yKGhvc3QpIHtcclxuICAgICAgICBzdXBlcihob3N0KTtcclxuICAgICAgICB0aGlzLl9ob3N0ID0gaG9zdDtcclxuXHJcbiAgICAgICAgLy8gTm8gbmVlZCB0byBsaXN0ZW4gZm9yIGV2ZW50cyBpZiB0aGUgbWl4aW4gaXMgaW4gdGhlIHByb3RvdHlwZSBjaGFpbiBtdWx0aXBsZSB0aW1lc1xyXG4gICAgICAgIGlmICghdGhpcy5faW5pdGlhbGl6ZWQpIHtcclxuICAgICAgICAgIHRoaXMuX2luaXRpYWxpemVkID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAvLyBTdGFydCBsaXN0ZW5pbmcgZm9yIGZlYXR1cmUgZXZlbnRzXHJcbiAgICAgICAgICB0aGlzLl9vbkZlYXR1cmVBZGRlZCA9IHRoaXMuX29uRmVhdHVyZUFkZGVkLmJpbmQodGhpcyk7XHJcbiAgICAgICAgICB0aGlzLl9vbkZlYXR1cmVSZW1vdmVkID0gdGhpcy5fb25GZWF0dXJlUmVtb3ZlZC5iaW5kKHRoaXMpO1xyXG5cclxuICAgICAgICAgIHRoaXMuX2hvc3QubGlzdGVuVG8oXHJcbiAgICAgICAgICAgIEhvc3RPYmplY3QuRVZFTlRTLmFkZEZlYXR1cmUsXHJcbiAgICAgICAgICAgIHRoaXMuX29uRmVhdHVyZUFkZGVkXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgdGhpcy5faG9zdC5saXN0ZW5UbyhcclxuICAgICAgICAgICAgSG9zdE9iamVjdC5FVkVOVFMucmVtb3ZlRmVhdHVyZSxcclxuICAgICAgICAgICAgdGhpcy5fb25GZWF0dXJlUmVtb3ZlZFxyXG4gICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAvLyBSZWdpc3RlciBmZWF0dXJlcyB0aGF0IGFscmVhZHkgZXhpc3RcclxuICAgICAgICAgIE9iamVjdC5rZXlzKHRoaXMuY29uc3RydWN0b3IuRVZFTlRfREVQRU5ERU5DSUVTKS5mb3JFYWNoKHR5cGVOYW1lID0+IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX2hvc3RbdHlwZU5hbWVdICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICB0aGlzLl9vbkZlYXR1cmVBZGRlZCh0eXBlTmFtZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgX29uRmVhdHVyZUFkZGVkKHR5cGVOYW1lKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY29uc3RydWN0b3IuRVZFTlRfREVQRU5ERU5DSUVTW3R5cGVOYW1lXSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICBjb25zdCBldmVudHMgPSB0aGlzLmNvbnN0cnVjdG9yLkVWRU5UX0RFUEVOREVOQ0lFU1t0eXBlTmFtZV07XHJcblxyXG4gICAgICAgICAgT2JqZWN0LmVudHJpZXMoZXZlbnRzKS5mb3JFYWNoKChbZXZlbnROYW1lLCBjYWxsYmFja10pID0+IHtcclxuICAgICAgICAgICAgdGhpc1tjYWxsYmFja10gPSB0aGlzW2NhbGxiYWNrXS5iaW5kKHRoaXMpO1xyXG4gICAgICAgICAgICB0aGlzLl9ob3N0Lmxpc3RlblRvKFxyXG4gICAgICAgICAgICAgIHRoaXMuX2hvc3RbdHlwZU5hbWVdLkVWRU5UU1tldmVudE5hbWVdLFxyXG4gICAgICAgICAgICAgIHRoaXNbY2FsbGJhY2tdXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIF9vbkZlYXR1cmVSZW1vdmVkKHR5cGVOYW1lKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY29uc3RydWN0b3IuRVZFTlRfREVQRU5ERU5DSUVTW3R5cGVOYW1lXSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICBjb25zdCBldmVudHMgPSB0aGlzLmNvbnN0cnVjdG9yLkVWRU5UX0RFUEVOREVOQ0lFU1t0eXBlTmFtZV07XHJcblxyXG4gICAgICAgICAgT2JqZWN0LmVudHJpZXMoZXZlbnRzKS5mb3JFYWNoKChbZXZlbnROYW1lLCBjYWxsYmFja10pID0+IHtcclxuICAgICAgICAgICAgdGhpcy5faG9zdC5zdG9wTGlzdGVuaW5nKFxyXG4gICAgICAgICAgICAgIHRoaXMuX2hvc3RbdHlwZU5hbWVdLkVWRU5UU1tldmVudE5hbWVdLFxyXG4gICAgICAgICAgICAgIHRoaXNbY2FsbGJhY2tdXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGRpc2NhcmQoKSB7XHJcbiAgICAgICAgLy8gU3RvcCBsaXN0ZW5pbmcgZm9yIGZlYXR1cmUgZXZlbnRzXHJcbiAgICAgICAgdGhpcy5faG9zdC5zdG9wTGlzdGVuaW5nKFxyXG4gICAgICAgICAgSG9zdE9iamVjdC5FVkVOVFMuYWRkRmVhdHVyZSxcclxuICAgICAgICAgIHRoaXMuX29uRmVhdHVyZUFkZGVkXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLl9ob3N0LnN0b3BMaXN0ZW5pbmcoXHJcbiAgICAgICAgICBIb3N0T2JqZWN0LkVWRU5UUy5yZW1vdmVGZWF0dXJlLFxyXG4gICAgICAgICAgdGhpcy5fb25GZWF0dXJlUmVtb3ZlZFxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIC8vIFN0b3AgbGlzdGVuaW5nIHRvIGZlYXR1cmUtc3BlY2lmaWMgZXZlbnRzXHJcbiAgICAgICAgT2JqZWN0LmtleXModGhpcy5jb25zdHJ1Y3Rvci5FVkVOVF9ERVBFTkRFTkNJRVMpLmZvckVhY2godHlwZU5hbWUgPT4ge1xyXG4gICAgICAgICAgaWYgKHRoaXMuX2hvc3RbdHlwZU5hbWVdICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5fb25GZWF0dXJlUmVtb3ZlZCh0eXBlTmFtZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHN1cGVyLmRpc2NhcmQoKTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBFVkVOVF9ERVBFTkRFTkNJRVMgPSBCYXNlQ2xhc3MuRVZFTlRfREVQRU5ERU5DSUVTIHx8IHt9O1xyXG5cclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEZlYXR1cmVEZXBlbmRlbnRNaXhpbiwge1xyXG4gICAgICBFVkVOVF9ERVBFTkRFTkNJRVM6IHtcclxuICAgICAgICB2YWx1ZToge1xyXG4gICAgICAgICAgLi4uRVZFTlRfREVQRU5ERU5DSUVTLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgd3JpdGFibGU6IGZhbHNlLFxyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIEZlYXR1cmVEZXBlbmRlbnRNaXhpbjtcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBFdmVudCBkZXBlbmRlbmNpZXMgc2hvdWxkIGZvbGxvdyB0aGUgc2lnbmF0dXJlOlxyXG4gKiB7XHJcbiAqICBGZWF0dXJlTmFtZToge1xyXG4gKiAgICAvLyBFdmVudHMgdGhhdCB0aGUgZmVhdHVyZSBzaG91bGQgc3RhcnQvc3RvcCBsaXN0ZW5pbmcgZm9yIHdoZW4gYSBmZWF0dXJlXHJcbiAqICAgIC8vIG9mIHR5cGUgRmVhdHVyZU5hbWUgaXMgYWRkZWQvcmVtb3ZlZCBmcm9tIHRoZSBob3N0XHJcbiAqICAgIHtcclxuICogICAgICBldmVudE5hbWU6IGNhbGxiYWNrTmFtZSxcclxuICogICAgICAuLi5cclxuICogICAgfSxcclxuICogIH1cclxuICogfVxyXG4gKi9cclxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRmVhdHVyZURlcGVuZGVudEludGVyZmFjZSwge1xyXG4gIEVWRU5UX0RFUEVOREVOQ0lFUzoge1xyXG4gICAgdmFsdWU6IHt9LFxyXG4gICAgd3JpdGFibGU6IGZhbHNlLFxyXG4gIH0sXHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgRmVhdHVyZURlcGVuZGVudEludGVyZmFjZTtcclxuIiwiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXHJcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxyXG5cclxuLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cclxuLyogZXNsaW50LWRpc2FibGUgbWF4LWNsYXNzZXMtcGVyLWZpbGUgKi9cclxuaW1wb3J0IEZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2UgZnJvbSAnY29yZS9GZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlJztcclxuXHJcbi8qKlxyXG4gKiBDbGFzcyBmYWN0b3J5IGludGVyZmFjZSBmb3IgZmVhdHVyZXMgdGhhdCBhcmUgZGVwZW5kZW50IG9uIHRoZSBBbmltYXRpb25GZWF0dXJlXHJcbiAqIGJlaW5nIHByZXNlbnQgb24gdGhlIGhvc3QuIExheWVyIGFuZCBhbmltYXRpb24gZXZlbnRzIHdpbGwgYXV0b21hdGljYWxseSBiZVxyXG4gKiBsaXN0ZW5lZCBmb3Igb25jZSBhIEFuaW1hdGlvbkZlYXR1cmUgaXMgYWRkZWQgdG8gdGhlIGhvc3QgYW5kIHN0b3BwZWQgb25jZSBpdFxyXG4gKiBpcyByZW1vdmVkLlxyXG4gKlxyXG4gKiBAaW50ZXJmYWNlXHJcbiAqIEBleHRlbmRzIEZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2VcclxuICpcclxuICogQHByb3BlcnR5IHtPYmplY3R9IEVWRU5UX0RFUEVOREVOQ0lFUyAtIEV2ZW50cyB0aGF0IHRoZSBmZWF0dXJlIHNob3VsZCBzdGFydC9zdG9wXHJcbiAqIGxpc3RlbmluZyBmb3Igd2hlbiBhIGZlYXR1cmUgb2YgdHlwZSBGZWF0dXJlTmFtZSBpcyBhZGRlZC9yZW1vdmVkIGZyb20gdGhlIGhvc3QuXHJcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBFVkVOVF9ERVBFTkRFTkNJRVMuQW5pbWF0aW9uRmVhdHVyZSAtIEV2ZW50cyB0aGF0IGFyZVxyXG4gKiBzcGVjaWZpYyB0byB0aGUgQW5pbWF0aW9uRmVhdHVyZS5cclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtFVkVOVF9ERVBFTkRFTkNJRVMuQW5pbWF0aW9uRmVhdHVyZS5hZGRMYXllcj0nX29uTGF5ZXJBZGRlZCddIC1cclxuICogVGhlIG5hbWUgb2YgdGhlIG1ldGhvZCB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQgd2hlbiBBbmltYXRpb25GZWF0dXJlIGFkZExheWVyXHJcbiAqIGV2ZW50cyBhcmUgZW1pdHRlZC5cclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtFVkVOVF9ERVBFTkRFTkNJRVMuQW5pbWF0aW9uRmVhdHVyZS5yZW1vdmVMYXllcj0nX29uTGF5ZXJSZW1vdmVkJ10gLVxyXG4gKiBUaGUgbmFtZSBvZiB0aGUgbWV0aG9kIHRoYXQgd2lsbCBiZSBleGVjdXRlZCB3aGVuIEFuaW1hdGlvbkZlYXR1cmUgcmVtb3ZlTGF5ZXJcclxuICogZXZlbnRzIGFyZSBlbWl0dGVkLlxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW0VWRU5UX0RFUEVOREVOQ0lFUy5BbmltYXRpb25GZWF0dXJlLnJlbmFtZUxheWVyPSdfb25MYXllclJlbmFtZWQnXSAtXHJcbiAqIFRoZSBuYW1lIG9mIHRoZSBtZXRob2QgdGhhdCB3aWxsIGJlIGV4ZWN1dGVkIHdoZW4gQW5pbWF0aW9uRmVhdHVyZSByZW5hbWVMYXllclxyXG4gKiBldmVudHMgYXJlIGVtaXR0ZWQuXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbRVZFTlRfREVQRU5ERU5DSUVTLkFuaW1hdGlvbkZlYXR1cmUuYWRkQW5pbWF0aW9uPSdfb25BbmltYXRpb25BZGRlZCddIC1cclxuICogVGhlIG5hbWUgb2YgdGhlIG1ldGhvZCB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQgd2hlbiBBbmltYXRpb25GZWF0dXJlIGFkZEFuaW1hdGlvblxyXG4gKiBldmVudHMgYXJlIGVtaXR0ZWQuXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbRVZFTlRfREVQRU5ERU5DSUVTLkFuaW1hdGlvbkZlYXR1cmUucmVtb3ZlQW5pbWF0aW9uPSdfb25BbmltYXRpb25SZW1vdmVkJ10gLVxyXG4gKiBUaGUgbmFtZSBvZiB0aGUgbWV0aG9kIHRoYXQgd2lsbCBiZSBleGVjdXRlZCB3aGVuIEFuaW1hdGlvbkZlYXR1cmUgcmVtb3ZlQW5pbWF0aW9uXHJcbiAqIGV2ZW50cyBhcmUgZW1pdHRlZC5cclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtFVkVOVF9ERVBFTkRFTkNJRVMuQW5pbWF0aW9uRmVhdHVyZS5yZW5hbWVBbmltYXRpb249J19vbkFuaW1hdGlvblJlbmFtZWQnXSAtXHJcbiAqIFRoZSBuYW1lIG9mIHRoZSBtZXRob2QgdGhhdCB3aWxsIGJlIGV4ZWN1dGVkIHdoZW4gQW5pbWF0aW9uRmVhdHVyZSByZW5hbWVBbmltYXRpb25cclxuICogZXZlbnRzIGFyZSBlbWl0dGVkLlxyXG4gKi9cclxuY2xhc3MgQW5pbWF0aW9uRmVhdHVyZURlcGVuZGVudEludGVyZmFjZSBleHRlbmRzIEZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2Uge1xyXG4gIC8qKlxyXG4gICAqIEV4ZWN1dGVkIHdoZW4gYW5pbWF0aW9uIGxheWVyIGFkZGVkIGV2ZW50cyBhcmUgY2F1Z2h0LlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gTmFtZSBvZiB0aGUgbGF5ZXIgdGhhdCB3YXMgYWRkZWQuXHJcbiAgICovXHJcbiAgX29uTGF5ZXJBZGRlZCh7bmFtZX0pIHt9XHJcblxyXG4gIC8qKlxyXG4gICAqIEV4ZWN1dGVkIHdoZW4gYW5pbWF0aW9uIGxheWVyIHJlbW92ZWQgZXZlbnRzIGFyZSBjYXVnaHQuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBOYW1lIG9mIHRoZSBsYXllciB0aGF0IHdhcyByZW1vdmVkLlxyXG4gICAqL1xyXG4gIF9vbkxheWVyUmVtb3ZlZCh7bmFtZX0pIHt9XHJcblxyXG4gIC8qKlxyXG4gICAqIEV4ZWN1dGVkIHdoZW4gYW5pbWF0aW9uIGxheWVyIHJlbmFtZWQgZXZlbnRzIGFyZSBjYXVnaHQuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9sZE5hbWUgLSBOYW1lIG9mIHRoZSBsYXllciB0aGF0IHdhcyByZW5hbWVkLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuZXdOYW1lIC0gTmV3IG5hbWUgb2YgdGhlIGxheWVyLlxyXG4gICAqL1xyXG4gIF9vbkxheWVyUmVuYW1lZCh7b2xkTmFtZSwgbmV3TmFtZX0pIHt9XHJcblxyXG4gIC8qKlxyXG4gICAqIEV4ZWN1dGVkIHdoZW4gYW5pbWF0aW9uIGFkZGVkIGV2ZW50cyBhcmUgY2F1Z2h0LlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllck5hbWUgLSBOYW1lIG9mIHRoZSBsYXllciB0aGF0IGFuIGFuaW1hdGlvbiB3YXMgYWRkZWQgdG8uXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFuaW1hdGlvbk5hbWUgLSBOYW1lIG9mIHRoZSBhbmltYXRpb24gdGhhdCB3YXMgYWRkZWQuXHJcbiAgICovXHJcbiAgX29uQW5pbWF0aW9uQWRkZWQoe2xheWVyTmFtZSwgYW5pbWF0aW9uTmFtZX0pIHt9XHJcblxyXG4gIC8qKlxyXG4gICAqIEV4ZWN1dGVkIHdoZW4gYW5pbWF0aW9uIHJlbW92ZWQgZXZlbnRzIGFyZSBjYXVnaHQuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVyTmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRoYXQgYW4gYW5pbWF0aW9uIHdhcyByZW1vdmVkIGZyb20uXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFuaW1hdGlvbk5hbWUgLSBOYW1lIG9mIHRoZSBhbmltYXRpb24gdGhhdCB3YXMgcmVtb3ZlZC5cclxuICAgKi9cclxuICBfb25BbmltYXRpb25SZW1vdmVkKHtsYXllck5hbWUsIGFuaW1hdGlvbk5hbWV9KSB7fVxyXG5cclxuICAvKipcclxuICAgKiBFeGVjdXRlZCB3aGVuIGFuaW1hdGlvbiByZW5hbWVkIGV2ZW50cyBhcmUgY2F1Z2h0LlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllck5hbWUgLSBOYW1lIG9mIHRoZSBsYXllciB0aGF0IGFuIGFuaW1hdGlvbiBiZWxvbmdzIHRvLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvbGROYW1lIC0gTmFtZSBvZiB0aGUgYW5pbWF0aW9uIHRoYXQgd2FzIHJlbmFtZWQuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5ld05hbWUgLSBOZXcgbmFtZSBvZiB0aGUgYW5pbWF0aW9uLlxyXG4gICAqL1xyXG4gIF9vbkFuaW1hdGlvblJlbmFtZWQoe2xheWVyTmFtZSwgb2xkTmFtZSwgbmV3TmFtZX0pIHt9XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZXMgYSBjbGFzcyB0aGF0IGltcGxlbWVudHMge0BsaW5rIEFuaW1hdGlvbkZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2V9XHJcbiAgICogYW5kIGV4dGVuZHMgYSBzcGVjaWZpZWQgYmFzZSBjbGFzcy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7Q2xhc3N9IEJhc2VDbGFzcyAtIFRoZSBjbGFzcyB0byBleHRlbmQuXHJcbiAgICpcclxuICAgKiBAcmV0dXJuIHtDbGFzc30gQSBjbGFzcyB0aGF0IGV4dGVuZHMgYEJhc2VDbGFzc2AgYW5kIGltcGxlbWVudHMge0BsaW5rIEFuaW1hdGlvbkZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2V9LlxyXG4gICAqL1xyXG4gIHN0YXRpYyBNaXhpbihCYXNlQ2xhc3MpIHtcclxuICAgIGNvbnN0IFBhcmVudENsYXNzID0gRmVhdHVyZURlcGVuZGVudEludGVyZmFjZS5NaXhpbihCYXNlQ2xhc3MpO1xyXG4gICAgY29uc3QgQW5pbWF0aW9uRmVhdHVyZURlcGVuZGVudE1peGluID0gY2xhc3MgZXh0ZW5kcyBQYXJlbnRDbGFzcyB7XHJcbiAgICAgIF9vbkxheWVyQWRkZWQoe25hbWV9KSB7fVxyXG5cclxuICAgICAgX29uTGF5ZXJSZW1vdmVkKHtuYW1lfSkge31cclxuXHJcbiAgICAgIF9vbkxheWVyUmVuYW1lZCh7b2xkTmFtZSwgbmV3TmFtZX0pIHt9XHJcblxyXG4gICAgICBfb25BbmltYXRpb25BZGRlZCh7bGF5ZXJOYW1lLCBhbmltYXRpb25OYW1lfSkge31cclxuXHJcbiAgICAgIF9vbkFuaW1hdGlvblJlbW92ZWQoe2xheWVyTmFtZSwgYW5pbWF0aW9uTmFtZX0pIHt9XHJcblxyXG4gICAgICBfb25BbmltYXRpb25SZW5hbWVkKHtsYXllck5hbWUsIG9sZE5hbWUsIG5ld05hbWV9KSB7fVxyXG4gICAgfTtcclxuXHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhBbmltYXRpb25GZWF0dXJlRGVwZW5kZW50TWl4aW4sIHtcclxuICAgICAgRVZFTlRfREVQRU5ERU5DSUVTOiB7XHJcbiAgICAgICAgdmFsdWU6IHtcclxuICAgICAgICAgIC4uLlBhcmVudENsYXNzLkVWRU5UX0RFUEVOREVOQ0lFUyxcclxuICAgICAgICAgIC4uLkFuaW1hdGlvbkZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2UuRVZFTlRfREVQRU5ERU5DSUVTLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgd3JpdGFibGU6IGZhbHNlLFxyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIEFuaW1hdGlvbkZlYXR1cmVEZXBlbmRlbnRNaXhpbjtcclxuICB9XHJcbn1cclxuXHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEFuaW1hdGlvbkZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2UsIHtcclxuICBFVkVOVF9ERVBFTkRFTkNJRVM6IHtcclxuICAgIHZhbHVlOiB7XHJcbiAgICAgIEFuaW1hdGlvbkZlYXR1cmU6IHtcclxuICAgICAgICBhZGRMYXllcjogJ19vbkxheWVyQWRkZWQnLFxyXG4gICAgICAgIHJlbW92ZUxheWVyOiAnX29uTGF5ZXJSZW1vdmVkJyxcclxuICAgICAgICByZW5hbWVMYXllcjogJ19vbkxheWVyUmVuYW1lZCcsXHJcbiAgICAgICAgYWRkQW5pbWF0aW9uOiAnX29uQW5pbWF0aW9uQWRkZWQnLFxyXG4gICAgICAgIHJlbW92ZUFuaW1hdGlvbjogJ19vbkFuaW1hdGlvblJlbW92ZWQnLFxyXG4gICAgICAgIHJlbmFtZUFuaW1hdGlvbjogJ19vbkFuaW1hdGlvblJlbmFtZWQnLFxyXG4gICAgICB9LFxyXG4gICAgfSxcclxuICAgIHdyaXRhYmxlOiBmYWxzZSxcclxuICB9LFxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IEFuaW1hdGlvbkZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2U7XHJcbiIsIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxyXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTBcclxuXHJcbi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXHJcbi8qIGVzbGludC1kaXNhYmxlIG1heC1jbGFzc2VzLXBlci1maWxlICovXHJcbmltcG9ydCBBbmltYXRpb25GZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlIGZyb20gJ2NvcmUvYW5pbXBhY2svQW5pbWF0aW9uRmVhdHVyZURlcGVuZGVudEludGVyZmFjZSc7XHJcblxyXG4vKipcclxuICogQ2xhc3MgZmFjdG9yeSBpbnRlcmZhY2UgZm9yIHRoYXQga2VlcHMgdHJhY2sgb2YgbGF5ZXJzIGFuZCBhbmltYXRpb25zIG9uIGEgaG9zdC5cclxuICogVHJhY2tlZCBhc3NldHMgYXJlIG1hcmtlZCBhcyBpbmFjdGl2ZSB1bnRpbCBsYXllcnMgYW5kIGFuaW1hdGlvbnMgd2l0aCBtYXRjaGluZ1xyXG4gKiBuYW1lcyBhcmUgZGV0ZWN0ZWQgYXMgcHJlc2VudCBvbiB0aGUgaG9zdC5cclxuICpcclxuICogQGludGVyZmFjZVxyXG4gKiBAZXh0ZW5kcyBBbmltYXRpb25GZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlXHJcbiAqXHJcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBERUZBVUxUX0xBWUVSX09QVElPTlMgLSBEZWZhdWx0IG9wdGlvbnMgdG8gdXNlIHdoZW4gZXhlY3V0aW5nXHJcbiAqIHtAbGluayBBbmltYXRpb25MYXllcn0gbWV0aG9kcy5cclxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtERUZBVUxUX0xBWUVSX09QVElPTlMuYmxlbmRUaW1lPTAuNV0gLSBEZWZhdWx0IHRpbWUgaW4gc2Vjb25kc1xyXG4gKiB0byB1c2Ugd2hlbiBleGVjdXRpbmcge0BsaW5rIEFuaW1hdGlvbkxheWVyLnNldEJsZW5kV2VpZ2h0fS5cclxuICogQHByb3BlcnR5IHtPYmplY3R9IFtERUZBVUxUX0xBWUVSX09QVElPTlMuYW5pbWF0aW9ucz17fV0gLSBNYXBzIGFuaW1hdGlvbiBuYW1lc1xyXG4gKiB0byBkZWZhdWx0IG9wdGlvbnMgb2JqZWN0cyB0byB1c2UgZm9yIG1hbmFnZWQgYW5pbWF0aW9ucy5cclxuICovXHJcbmNsYXNzIE1hbmFnZWRBbmltYXRpb25MYXllckludGVyZmFjZSBleHRlbmRzIEFuaW1hdGlvbkZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2Uge1xyXG4gIC8qKlxyXG4gICAqIFN0YXJ0IHRyYWNraW5nIGtlZXBpbmcgdHJhY2sgb2Ygd2hldGhlciBhIGxheWVyIHdpdGggdGhlIGdpdmVuIG5hbWUgaXMgcHJlc2VudFxyXG4gICAqIG9uIHRoZSBob3N0LlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBOYW1lIG9mIHRoZSBsYXllciB0byBrZWVwIHRyYWNrIG9mLlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0PX0gb3B0aW9ucyAtIE9wdGlvbnMgZm9yIHRoZSBsYXllci5cclxuICAgKiBAcGFyYW0ge251bWJlcj19IG9wdGlvbnMuYmxlbmRUaW1lIC0gRGVmYXVsdCBhbW91bnQgb2YgdGltZSB0byB1c2Ugd2hlblxyXG4gICAqIG1hbmlwdWxhdGluZyBsYXllciB3ZWlnaHRzIG9uIHRoaXMgbGF5ZXIuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9wdGlvbnMuZWFzaW5nRm4gLSBEZWZhdWx0IGVhc2luZyBmdW5jdGlvbiB0byB1c2Ugd2hlblxyXG4gICAqIG1hbmlwdWxhdGluZyBsYXllciB3ZWlnaHRzIG9uIHRoaXMgbGF5ZXIuXHJcbiAgICogQHBhcmFtIHtPYmplY3Q9fSBvcHRpb25zLmFuaW1hdGlvbnMgLSBBbmltYXRpb25zIHRvIGtlZXAgdHJhY2sgb2Ygb24gdGhlIGxheWVyLlxyXG4gICAqIEFuaW1hdGlvbnMgYXJlIHJlcHJlc2VudGVkIGFzIGtleS92YWx1ZSBwYWlycyBvZiBhbmltYXRpb24gbmFtZXMgYW5kIHRoZWlyXHJcbiAgICogb3B0aW9ucy5cclxuICAgKi9cclxuICByZWdpc3RlckxheWVyKG5hbWUsIG9wdGlvbnMgPSB7fSkge31cclxuXHJcbiAgLyoqXHJcbiAgICogU3RhcnQgdHJhY2tpbmcga2VlcGluZyB0cmFjayBvZiB3aGV0aGVyIGFuIGFuaW1hdGlvbiB3aXRoIHRoZSBnaXZlbiBuYW1lIGlzXHJcbiAgICogcHJlc2VudCBvbiB0aGUgaG9zdC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllck5hbWUgLSBOYW1lIG9mIHRoZSBsYXllciB0aGF0IHdpbGwgb3duIHRoZSBhbmltYXRpb24uXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFuaW1hdGlvbk5hbWUgLSBOYW1lIG9mIHRoZSBhbmltYXRpb24gdG8ga2VlcCB0cmFjayBvZi5cclxuICAgKiBAcGFyYW0ge09iamVjdD19IG9wdGlvbnMgLSBPcHRpb25zIGZvciB0aGUgYW5pbWF0aW9uLlxyXG4gICAqL1xyXG4gIHJlZ2lzdGVyQW5pbWF0aW9uKGxheWVyTmFtZSwgYW5pbWF0aW9uTmFtZSwgb3B0aW9ucyA9IHt9KSB7fVxyXG5cclxuICAvKipcclxuICAgKiBTZXQgbGF5ZXIgd2VpZ2h0cyBvbiB0cmFja2VkIGxheWVycy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBuYW1lRmlsdGVyIC0gUHJlZGljYXRlIGZ1bmN0aW9uIHRvIHRlc3QgZWFjaCB0cmFja2VkIGxheWVyXHJcbiAgICogd2l0aC4gQnkgZGVmYXVsdCBhbGwgbGF5ZXJzIHdpbGwgcGFzcy5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gd2VpZ2h0IC0gV2VpZ2h0IHZhbHVlIHRvIHNldCBvbiBsYXllcnMuXHJcbiAgICogQHBhcmFtIHtudW1iZXI9fSBzZWNvbmRzIC0gTnVtYmVyIG9mIHNlY29uZHMgaXQgd2lsbCB0YWtlIHRvIHJlYWNoIHRoZSB3ZWlnaHRcclxuICAgKiBvbiBlYWNoIGxheWVyLiBJZiB1bmRlZmluZWQsIGVhY2ggbGF5ZXJzJyBibGVuZFRpbWUgb3B0aW9uIGlzIHVzZWQuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IGVhc2luZ0ZuIC0gRWFzaW5nIGZ1bmN0aW9uIHRvIHVzZSB3aGVuIHNldHRpbmcgd2VpZ2h0XHJcbiAgICogb24gZWFjaCBsYXllci4gSWYgdW5kZWZpbmVkLCBlYWNoIGxheWVycycgZWFzaW5nRm4gb3B0aW9uIGlzIHVzZWQuXHJcbiAgICovXHJcbiAgc2V0TGF5ZXJXZWlnaHRzKG5hbWVGaWx0ZXIgPSAoKSA9PiB0cnVlLCB3ZWlnaHQsIHNlY29uZHMsIGVhc2luZ0ZuKSB7fVxyXG5cclxuICAvKipcclxuICAgKiBTZXQgYWxsIHRyYWNrZWQgbGF5ZXJzJyB3ZWlnaHRzIHRvIDEuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge251bWJlcj19IHNlY29uZHMgLSBOdW1iZXIgb2Ygc2Vjb25kcyBpdCB3aWxsIHRha2UgdG8gcmVhY2ggdGhlIHdlaWdodFxyXG4gICAqIG9uIGVhY2ggbGF5ZXIuIElmIHVuZGVmaW5lZCwgZWFjaCBsYXllcnMnIGJsZW5kVGltZSBvcHRpb24gaXMgdXNlZC5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gZWFzaW5nRm4gLSBFYXNpbmcgZnVuY3Rpb24gdG8gdXNlIHdoZW4gc2V0dGluZyB3ZWlnaHRcclxuICAgKiBvbiBlYWNoIGxheWVyLiBJZiB1bmRlZmluZWQsIGVhY2ggbGF5ZXJzJyBlYXNpbmdGbiBvcHRpb24gaXMgdXNlZC5cclxuICAgKi9cclxuICBlbmFibGUoc2Vjb25kcywgZWFzaW5nRm4pIHt9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldCBhbGwgdHJhY2tlZCBsYXllcnMnIHdlaWdodHMgdG8gMC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyPX0gc2Vjb25kcyAtIE51bWJlciBvZiBzZWNvbmRzIGl0IHdpbGwgdGFrZSB0byByZWFjaCB0aGUgd2VpZ2h0XHJcbiAgICogb24gZWFjaCBsYXllci4gSWYgdW5kZWZpbmVkLCBlYWNoIGxheWVycycgYmxlbmRUaW1lIG9wdGlvbiBpcyB1c2VkLlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBlYXNpbmdGbiAtIEVhc2luZyBmdW5jdGlvbiB0byB1c2Ugd2hlbiBzZXR0aW5nIHdlaWdodFxyXG4gICAqIG9uIGVhY2ggbGF5ZXIuIElmIHVuZGVmaW5lZCwgZWFjaCBsYXllcnMnIGVhc2luZ0ZuIG9wdGlvbiBpcyB1c2VkLlxyXG4gICAqL1xyXG4gIGRpc2FibGUoc2Vjb25kcywgZWFzaW5nRm4pIHt9XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZXMgYSBjbGFzcyB0aGF0IGltcGxlbWVudHMge0BsaW5rIE1hbmFnZWRBbmltYXRpb25MYXllckludGVyZmFjZX1cclxuICAgKiBhbmQgZXh0ZW5kcyBhIHNwZWNpZmllZCBiYXNlIGNsYXNzLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtDbGFzc30gQmFzZUNsYXNzIC0gVGhlIGNsYXNzIHRvIGV4dGVuZC5cclxuICAgKlxyXG4gICAqIEByZXR1cm4ge0NsYXNzfSBBIGNsYXNzIHRoYXQgZXh0ZW5kcyBgQmFzZUNsYXNzYCBhbmQgaW1wbGVtZW50cyB7QGxpbmsgTWFuYWdlZEFuaW1hdGlvbkxheWVySW50ZXJmYWNlfS5cclxuICAgKi9cclxuICBzdGF0aWMgTWl4aW4oQmFzZUNsYXNzKSB7XHJcbiAgICBjb25zdCBQYXJlbnRDbGFzcyA9IEFuaW1hdGlvbkZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2UuTWl4aW4oQmFzZUNsYXNzKTtcclxuICAgIGNvbnN0IE1hbmFnZWRBbmltYXRpb25MYXllck1peGluID0gY2xhc3MgZXh0ZW5kcyBQYXJlbnRDbGFzcyB7XHJcbiAgICAgIGNvbnN0cnVjdG9yKC4uLmFyZ3MpIHtcclxuICAgICAgICBzdXBlciguLi5hcmdzKTtcclxuXHJcbiAgICAgICAgdGhpcy5fbWFuYWdlZExheWVycyA9IHt9O1xyXG4gICAgICB9XHJcblxyXG4gICAgICBfb25GZWF0dXJlQWRkZWQodHlwZU5hbWUpIHtcclxuICAgICAgICBzdXBlci5fb25GZWF0dXJlQWRkZWQodHlwZU5hbWUpO1xyXG5cclxuICAgICAgICBpZiAodHlwZU5hbWUgIT09ICdBbmltYXRpb25GZWF0dXJlJykge1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fbWFuYWdlZExheWVycyA9IHRoaXMuX21hbmFnZWRMYXllcnMgfHwge307XHJcblxyXG4gICAgICAgIC8vIERldGVjdCBuZXcgbGF5ZXJzXHJcbiAgICAgICAgdGhpcy5faG9zdC5BbmltYXRpb25GZWF0dXJlLmxheWVycy5mb3JFYWNoKG5hbWUgPT4ge1xyXG4gICAgICAgICAgdGhpcy5fb25MYXllckFkZGVkKHtuYW1lfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIF9vbkZlYXR1cmVSZW1vdmVkKHR5cGVOYW1lKSB7XHJcbiAgICAgICAgc3VwZXIuX29uRmVhdHVyZVJlbW92ZWQodHlwZU5hbWUpO1xyXG5cclxuICAgICAgICBpZiAodHlwZU5hbWUgIT09ICdBbmltYXRpb25GZWF0dXJlJykge1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fbWFuYWdlZExheWVycyA9IHRoaXMuX21hbmFnZWRMYXllcnMgfHwge307XHJcblxyXG4gICAgICAgIC8vIERlYWN0aXZhdGUgdGhlIGxheWVyc1xyXG4gICAgICAgIE9iamVjdC5rZXlzKHRoaXMuX21hbmFnZWRMYXllcnMpLmZvckVhY2gobmFtZSA9PiB7XHJcbiAgICAgICAgICB0aGlzLl9vbkxheWVyUmVtb3ZlZCh7bmFtZX0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBfb25MYXllckFkZGVkKHtuYW1lfSkge1xyXG4gICAgICAgIC8vIE1hcmsgdGhlIGxheWVyIGFzIGFjdGl2ZSBpZiBpdCBpcyBtYW5hZ2VkXHJcbiAgICAgICAgaWYgKHRoaXMuX21hbmFnZWRMYXllcnNbbmFtZV0gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgdGhpcy5fbWFuYWdlZExheWVyc1tuYW1lXS5pc0FjdGl2ZSA9IHRydWU7XHJcblxyXG4gICAgICAgICAgLy8gRGV0ZWN0IG5ldyBhbmltYXRpb25zXHJcbiAgICAgICAgICB0aGlzLl9ob3N0LkFuaW1hdGlvbkZlYXR1cmUuZ2V0QW5pbWF0aW9ucyhuYW1lKS5mb3JFYWNoKGFuaW1OYW1lID0+IHtcclxuICAgICAgICAgICAgdGhpcy5fb25BbmltYXRpb25BZGRlZCh7bGF5ZXJOYW1lOiBuYW1lLCBhbmltYXRpb25OYW1lOiBhbmltTmFtZX0pO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBfb25MYXllclJlbW92ZWQoe25hbWV9KSB7XHJcbiAgICAgICAgLy8gRGVhY3RpdmF0ZSB0aGUgbGF5ZXIgaWYgaXQgaXMgbWFuYWdlZFxyXG4gICAgICAgIGlmICh0aGlzLl9tYW5hZ2VkTGF5ZXJzW25hbWVdICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgIHRoaXMuX21hbmFnZWRMYXllcnNbbmFtZV0uaXNBY3RpdmUgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICAvLyBEZWFjdGl2YXRlIHRoZSBhbmltYXRpb25zXHJcbiAgICAgICAgICBPYmplY3Qua2V5cyh0aGlzLl9tYW5hZ2VkTGF5ZXJzW25hbWVdLmFuaW1hdGlvbnMpLmZvckVhY2goXHJcbiAgICAgICAgICAgIGFuaW1OYW1lID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLl9vbkFuaW1hdGlvblJlbW92ZWQoe1xyXG4gICAgICAgICAgICAgICAgbGF5ZXJOYW1lOiBuYW1lLFxyXG4gICAgICAgICAgICAgICAgYW5pbWF0aW9uTmFtZTogYW5pbU5hbWUsXHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBfb25MYXllclJlbmFtZWQoe29sZE5hbWUsIG5ld05hbWV9KSB7XHJcbiAgICAgICAgY29uc3QgbGF5ZXJPcHRpb25zID0gdGhpcy5fbWFuYWdlZExheWVyc1tvbGROYW1lXTtcclxuXHJcbiAgICAgICAgLy8gUmVwbGFjZSB0aGUgbGF5ZXIga2V5IHdpdGggdGhlIG5ldyBuYW1lXHJcbiAgICAgICAgaWYgKGxheWVyT3B0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICBkZWxldGUgdGhpcy5fbWFuYWdlZExheWVyc1tvbGROYW1lXTtcclxuICAgICAgICAgIHRoaXMuX21hbmFnZWRMYXllcnNbbmV3TmFtZV0gPSBsYXllck9wdGlvbnM7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBfb25BbmltYXRpb25BZGRlZCh7bGF5ZXJOYW1lLCBhbmltYXRpb25OYW1lfSkge1xyXG4gICAgICAgIC8vIE1hcmsgdGhlIGFuaW1hdGlvbiBhcyBhY3RpdmUgaWYgaXQgaXMgbWFuYWdlZFxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIHRoaXMuX21hbmFnZWRMYXllcnNbbGF5ZXJOYW1lXSAhPT0gdW5kZWZpbmVkICYmXHJcbiAgICAgICAgICB0aGlzLl9tYW5hZ2VkTGF5ZXJzW2xheWVyTmFtZV0uYW5pbWF0aW9uc1thbmltYXRpb25OYW1lXSAhPT0gdW5kZWZpbmVkXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICB0aGlzLl9tYW5hZ2VkTGF5ZXJzW2xheWVyTmFtZV0uYW5pbWF0aW9uc1tcclxuICAgICAgICAgICAgYW5pbWF0aW9uTmFtZVxyXG4gICAgICAgICAgXS5pc0FjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBfb25BbmltYXRpb25SZW1vdmVkKHtsYXllck5hbWUsIGFuaW1hdGlvbk5hbWV9KSB7XHJcbiAgICAgICAgLy8gRGVhY3RpdmF0ZSB0aGUgYW5pbWF0aW9uIGlmIGl0IGlzIG1hbmFnZWRcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICB0aGlzLl9tYW5hZ2VkTGF5ZXJzW2xheWVyTmFtZV0gIT09IHVuZGVmaW5lZCAmJlxyXG4gICAgICAgICAgdGhpcy5fbWFuYWdlZExheWVyc1tsYXllck5hbWVdLmFuaW1hdGlvbnNbYW5pbWF0aW9uTmFtZV0gIT09IHVuZGVmaW5lZFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgdGhpcy5fbWFuYWdlZExheWVyc1tsYXllck5hbWVdLmFuaW1hdGlvbnNbXHJcbiAgICAgICAgICAgIGFuaW1hdGlvbk5hbWVcclxuICAgICAgICAgIF0uaXNBY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIF9vbkFuaW1hdGlvblJlbmFtZWQoe2xheWVyTmFtZSwgb2xkTmFtZSwgbmV3TmFtZX0pIHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICB0aGlzLl9tYW5hZ2VkTGF5ZXJzW2xheWVyTmFtZV0gIT09IHVuZGVmaW5lZCAmJlxyXG4gICAgICAgICAgdGhpcy5fbWFuYWdlZExheWVyc1tsYXllck5hbWVdLmFuaW1hdGlvbnNbb2xkTmFtZV0gIT09IHVuZGVmaW5lZFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgLy8gUmVwbGFjZSB0aGUgYW5pbWF0aW9uIGtleSB3aXRoIHRoZSBuZXcgbmFtZVxyXG4gICAgICAgICAgY29uc3QgYW5pbU9wdGlvbnMgPSB0aGlzLl9tYW5hZ2VkTGF5ZXJzW2xheWVyTmFtZV0uYW5pbWF0aW9uc1tcclxuICAgICAgICAgICAgb2xkTmFtZVxyXG4gICAgICAgICAgXTtcclxuICAgICAgICAgIGRlbGV0ZSB0aGlzLl9tYW5hZ2VkTGF5ZXJzW2xheWVyTmFtZV0uYW5pbWF0aW9uc1tvbGROYW1lXTtcclxuICAgICAgICAgIHRoaXMuX21hbmFnZWRMYXllcnNbbGF5ZXJOYW1lXS5hbmltYXRpb25zW25ld05hbWVdID0gYW5pbU9wdGlvbnM7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICByZWdpc3RlckxheWVyKG5hbWUsIG9wdGlvbnMgPSB7fSkge1xyXG4gICAgICAgIC8vIFN0YXJ0IHdpdGggZGVmYXVsdCBvcHRpb25zIGZvciBlYWNoIG5ldyBsYXllclxyXG4gICAgICAgIGlmICh0aGlzLl9tYW5hZ2VkTGF5ZXJzW25hbWVdID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgIHRoaXMuX21hbmFnZWRMYXllcnNbbmFtZV0gPSB7XHJcbiAgICAgICAgICAgIC4uLnRoaXMuY29uc3RydWN0b3IuREVGQVVMVF9MQVlFUl9PUFRJT05TLFxyXG4gICAgICAgICAgICBhbmltYXRpb25zOiB7fSxcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBVcGRhdGUgYWxsIG9wdGlvbnMgZXhjZXB0IGFuaW1hdGlvbnNcclxuICAgICAgICBjb25zdCBsYXllck9wdGlvbnMgPSB0aGlzLl9tYW5hZ2VkTGF5ZXJzW25hbWVdO1xyXG4gICAgICAgIG9wdGlvbnMgPSB7Li4ub3B0aW9uc307XHJcbiAgICAgICAgY29uc3QgYW5pbWF0aW9uT3B0aW9ucyA9IG9wdGlvbnMuYW5pbWF0aW9ucyB8fCB7fTtcclxuICAgICAgICBkZWxldGUgb3B0aW9ucy5hbmltYXRpb25zO1xyXG4gICAgICAgIE9iamVjdC5hc3NpZ24obGF5ZXJPcHRpb25zLCBvcHRpb25zKTtcclxuXHJcbiAgICAgICAgLy8gQ2hlY2sgd2hldGhlciB0aGUgbGF5ZXIgY2FuIGJlIG1hbmlwdWxhdGVkIG5vd1xyXG4gICAgICAgIGxheWVyT3B0aW9ucy5pc0FjdGl2ZSA9XHJcbiAgICAgICAgICB0aGlzLl9ob3N0LkFuaW1hdGlvbkZlYXR1cmUgIT09IHVuZGVmaW5lZCAmJlxyXG4gICAgICAgICAgdGhpcy5faG9zdC5BbmltYXRpb25GZWF0dXJlLmxheWVycy5pbmNsdWRlcyhuYW1lKTtcclxuXHJcbiAgICAgICAgLy8gUmVnaXN0ZXIgdGhlIGFuaW1hdGlvbnNcclxuICAgICAgICBPYmplY3QuZW50cmllcyhhbmltYXRpb25PcHRpb25zKS5mb3JFYWNoKChbYW5pbU5hbWUsIGFuaW1PcHRpb25zXSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5yZWdpc3RlckFuaW1hdGlvbihuYW1lLCBhbmltTmFtZSwgYW5pbU9wdGlvbnMpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZWdpc3RlckFuaW1hdGlvbihsYXllck5hbWUsIGFuaW1hdGlvbk5hbWUsIG9wdGlvbnMgPSB7fSkge1xyXG4gICAgICAgIC8vIFJlZ2lzdGVyIHRoZSBsYXllciBpZiBpdCBoYXNuJ3QgYmVlbiByZWdpc3RlcmVkIHlldFxyXG4gICAgICAgIGlmICh0aGlzLl9tYW5hZ2VkTGF5ZXJzW2xheWVyTmFtZV0gPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgdGhpcy5yZWdpc3RlckxheWVyKGxheWVyTmFtZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBVcGRhdGUgYW5pbWF0aW9uIG9wdGlvbnNcclxuICAgICAgICBjb25zdCBhbmltT3B0aW9ucyA9XHJcbiAgICAgICAgICB0aGlzLl9tYW5hZ2VkTGF5ZXJzW2xheWVyTmFtZV0uYW5pbWF0aW9uc1thbmltYXRpb25OYW1lXSB8fCB7fTtcclxuICAgICAgICBPYmplY3QuYXNzaWduKGFuaW1PcHRpb25zLCBvcHRpb25zKTtcclxuICAgICAgICB0aGlzLl9tYW5hZ2VkTGF5ZXJzW2xheWVyTmFtZV0uYW5pbWF0aW9uc1thbmltYXRpb25OYW1lXSA9IGFuaW1PcHRpb25zO1xyXG5cclxuICAgICAgICAvLyBDaGVjayB3aGV0aGVyIHRoZSBhbmltYXRpb24gY2FuIGJlIG1hbmlwdWxhdGVkIG5vd1xyXG4gICAgICAgIHRoaXMuX21hbmFnZWRMYXllcnNbbGF5ZXJOYW1lXS5hbmltYXRpb25zW2FuaW1hdGlvbk5hbWVdLmlzQWN0aXZlID1cclxuICAgICAgICAgIHRoaXMuX21hbmFnZWRMYXllcnNbbGF5ZXJOYW1lXS5pc0FjdGl2ZSAmJlxyXG4gICAgICAgICAgdGhpcy5faG9zdC5BbmltYXRpb25GZWF0dXJlLmdldEFuaW1hdGlvbnMobGF5ZXJOYW1lKS5pbmNsdWRlcyhcclxuICAgICAgICAgICAgYW5pbWF0aW9uTmFtZVxyXG4gICAgICAgICAgKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgc2V0TGF5ZXJXZWlnaHRzKG5hbWVGaWx0ZXIgPSAoKSA9PiB0cnVlLCB3ZWlnaHQsIHNlY29uZHMsIGVhc2luZ0ZuKSB7XHJcbiAgICAgICAgY29uc3QgbGF5ZXJOYW1lcyA9IE9iamVjdC5rZXlzKHRoaXMuX21hbmFnZWRMYXllcnMpLmZpbHRlcihuYW1lRmlsdGVyKTtcclxuXHJcbiAgICAgICAgbGF5ZXJOYW1lcy5mb3JFYWNoKG5hbWUgPT4ge1xyXG4gICAgICAgICAgY29uc3QgbGF5ZXJPcHRpb25zID0gdGhpcy5fbWFuYWdlZExheWVyc1tuYW1lXTtcclxuXHJcbiAgICAgICAgICBpZiAobGF5ZXJPcHRpb25zLmlzQWN0aXZlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2hvc3QuQW5pbWF0aW9uRmVhdHVyZS5zZXRMYXllcldlaWdodChcclxuICAgICAgICAgICAgICBuYW1lLFxyXG4gICAgICAgICAgICAgIHdlaWdodCxcclxuICAgICAgICAgICAgICBzZWNvbmRzICE9PSB1bmRlZmluZWQgPyBzZWNvbmRzIDogbGF5ZXJPcHRpb25zLmJsZW5kVGltZSxcclxuICAgICAgICAgICAgICBlYXNpbmdGbiB8fCBsYXllck9wdGlvbnMuZWFzaW5nRm5cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgZW5hYmxlKHNlY29uZHMsIGVhc2luZ0ZuKSB7XHJcbiAgICAgICAgdGhpcy5zZXRMYXllcldlaWdodHModW5kZWZpbmVkLCAxLCBzZWNvbmRzLCBlYXNpbmdGbik7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGRpc2FibGUoc2Vjb25kcywgZWFzaW5nRm4pIHtcclxuICAgICAgICB0aGlzLnNldExheWVyV2VpZ2h0cyh1bmRlZmluZWQsIDAsIHNlY29uZHMsIGVhc2luZ0ZuKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaW5zdGFsbEFwaSgpIHtcclxuICAgICAgICBjb25zdCBhcGkgPSBzdXBlci5pbnN0YWxsQXBpKCk7XHJcblxyXG4gICAgICAgIE9iamVjdC5hc3NpZ24oYXBpLCB7XHJcbiAgICAgICAgICByZWdpc3RlckxheWVyOiB0aGlzLnJlZ2lzdGVyTGF5ZXIuYmluZCh0aGlzKSxcclxuICAgICAgICAgIHJlZ2lzdGVyQW5pbWF0aW9uOiB0aGlzLnJlZ2lzdGVyQW5pbWF0aW9uLmJpbmQodGhpcyksXHJcbiAgICAgICAgICBzZXRMYXllcldlaWdodHM6IHRoaXMuc2V0TGF5ZXJXZWlnaHRzLmJpbmQodGhpcyksXHJcbiAgICAgICAgICBlbmFibGU6IHRoaXMuZW5hYmxlLmJpbmQodGhpcyksXHJcbiAgICAgICAgICBkaXNhYmxlOiB0aGlzLmRpc2FibGUuYmluZCh0aGlzKSxcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGFwaTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhNYW5hZ2VkQW5pbWF0aW9uTGF5ZXJNaXhpbiwge1xyXG4gICAgICBERUZBVUxUX0xBWUVSX09QVElPTlM6IHtcclxuICAgICAgICB2YWx1ZTogTWFuYWdlZEFuaW1hdGlvbkxheWVySW50ZXJmYWNlLkRFRkFVTFRfTEFZRVJfT1BUSU9OUyxcclxuICAgICAgICB3cml0YWJsZTogZmFsc2UsXHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gTWFuYWdlZEFuaW1hdGlvbkxheWVyTWl4aW47XHJcbiAgfVxyXG59XHJcblxyXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhNYW5hZ2VkQW5pbWF0aW9uTGF5ZXJJbnRlcmZhY2UsIHtcclxuICBERUZBVUxUX0xBWUVSX09QVElPTlM6IHtcclxuICAgIHZhbHVlOiB7YmxlbmRUaW1lOiAwLjUsIGFuaW1hdGlvbnM6IHt9fSxcclxuICAgIHdyaXRhYmxlOiBmYWxzZSxcclxuICB9LFxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IE1hbmFnZWRBbmltYXRpb25MYXllckludGVyZmFjZTtcclxuIiwiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXHJcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxyXG5cclxuLyogZXNsaW50LWRpc2FibGUgbWF4LWNsYXNzZXMtcGVyLWZpbGUgKi9cclxuaW1wb3J0IEZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2UgZnJvbSAnY29yZS9GZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlJztcclxuXHJcbi8qKlxyXG4gKiBDbGFzcyBmYWN0b3J5IGludGVyZmFjZSBmb3IgZmVhdHVyZXMgdGhhdCBhcmUgZGVwZW5kZW50IG9uIHRoZSBUZXh0VG9TcGVlY2hGZWF0dXJlXHJcbiAqIGJlaW5nIHByZXNlbnQgb24gdGhlIGhvc3QuIFNwZWVjaCBldmVudHMgd2lsbCBhdXRvbWF0aWNhbGx5IGJlIGxpc3RlbmVkIGZvciBvbmNlIGFcclxuICogVGV4dFRvU3BlZWNoRmVhdHVyZSBpcyBhZGRlZCB0byB0aGUgaG9zdCBhbmQgc3RvcHBlZCBvbmNlIGl0IGlzIHJlbW92ZWQuXHJcbiAqXHJcbiAqIEBpbnRlcmZhY2VcclxuICogQGV4dGVuZHMgRmVhdHVyZURlcGVuZGVudEludGVyZmFjZVxyXG4gKlxyXG4gKiBAcHJvcGVydHkge09iamVjdH0gRVZFTlRfREVQRU5ERU5DSUVTIC0gRXZlbnRzIHRoYXQgdGhlIGZlYXR1cmUgc2hvdWxkIHN0YXJ0L3N0b3BcclxuICogbGlzdGVuaW5nIGZvciB3aGVuIGEgZmVhdHVyZSBvZiB0eXBlIEZlYXR1cmVOYW1lIGlzIGFkZGVkL3JlbW92ZWQgZnJvbSB0aGUgaG9zdC5cclxuICogQHByb3BlcnR5IHtPYmplY3R9IEVWRU5UX0RFUEVOREVOQ0lFUy5UZXh0VG9TcGVlY2hGZWF0dXJlIC0gRXZlbnRzIHRoYXQgYXJlXHJcbiAqIHNwZWNpZmljIHRvIHRoZSBUZXh0VG9TcGVlY2hGZWF0dXJlLlxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW0VWRU5UX0RFUEVOREVOQ0lFUy5UZXh0VG9TcGVlY2hGZWF0dXJlLnBsYXk9J19vblBsYXknXSAtXHJcbiAqIFRoZSBuYW1lIG9mIHRoZSBtZXRob2QgdGhhdCB3aWxsIGJlIGV4ZWN1dGVkIHdoZW4gVGV4dFRvU3BlZWNoRmVhdHVyZSBwbGF5XHJcbiAqIGV2ZW50cyBhcmUgZW1pdHRlZC5cclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtFVkVOVF9ERVBFTkRFTkNJRVMuVGV4dFRvU3BlZWNoRmVhdHVyZS5wYXVzZT0nX29uUGF1c2UnXSAtXHJcbiAqIFRoZSBuYW1lIG9mIHRoZSBtZXRob2QgdGhhdCB3aWxsIGJlIGV4ZWN1dGVkIHdoZW4gVGV4dFRvU3BlZWNoRmVhdHVyZSBwYXVzZVxyXG4gKiBldmVudHMgYXJlIGVtaXR0ZWQuXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbRVZFTlRfREVQRU5ERU5DSUVTLlRleHRUb1NwZWVjaEZlYXR1cmUucmVzdW1lPSdfb25SZXN1bWUnXSAtXHJcbiAqIFRoZSBuYW1lIG9mIHRoZSBtZXRob2QgdGhhdCB3aWxsIGJlIGV4ZWN1dGVkIHdoZW4gVGV4dFRvU3BlZWNoRmVhdHVyZSByZXN1bWVcclxuICogZXZlbnRzIGFyZSBlbWl0dGVkLlxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW0VWRU5UX0RFUEVOREVOQ0lFUy5UZXh0VG9TcGVlY2hGZWF0dXJlLnN0b3A9J19vblN0b3AnXSAtXHJcbiAqIFRoZSBuYW1lIG9mIHRoZSBtZXRob2QgdGhhdCB3aWxsIGJlIGV4ZWN1dGVkIHdoZW4gVGV4dFRvU3BlZWNoRmVhdHVyZSBzdG9wXHJcbiAqIGV2ZW50cyBhcmUgZW1pdHRlZC5cclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtFVkVOVF9ERVBFTkRFTkNJRVMuVGV4dFRvU3BlZWNoRmVhdHVyZS5zZW50ZW5jZT0nX29uU2VudGVuY2UnXSAtXHJcbiAqIFRoZSBuYW1lIG9mIHRoZSBtZXRob2QgdGhhdCB3aWxsIGJlIGV4ZWN1dGVkIHdoZW4gVGV4dFRvU3BlZWNoRmVhdHVyZSBzZW50ZW5jZVxyXG4gKiBldmVudHMgYXJlIGVtaXR0ZWQuXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbRVZFTlRfREVQRU5ERU5DSUVTLlRleHRUb1NwZWVjaEZlYXR1cmUud29yZD0nX29uV29yZCddIC1cclxuICogVGhlIG5hbWUgb2YgdGhlIG1ldGhvZCB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQgd2hlbiBUZXh0VG9TcGVlY2hGZWF0dXJlIHdvcmRcclxuICogZXZlbnRzIGFyZSBlbWl0dGVkLlxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW0VWRU5UX0RFUEVOREVOQ0lFUy5UZXh0VG9TcGVlY2hGZWF0dXJlLnZpc2VtZT0nX29uVmlzZW1lJ10gLVxyXG4gKiBUaGUgbmFtZSBvZiB0aGUgbWV0aG9kIHRoYXQgd2lsbCBiZSBleGVjdXRlZCB3aGVuIFRleHRUb1NwZWVjaEZlYXR1cmUgdmlzZW1lXHJcbiAqIGV2ZW50cyBhcmUgZW1pdHRlZC5cclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtFVkVOVF9ERVBFTkRFTkNJRVMuVGV4dFRvU3BlZWNoRmVhdHVyZS5zc21sPSdfb25Tc21sJ10gLVxyXG4gKiBUaGUgbmFtZSBvZiB0aGUgbWV0aG9kIHRoYXQgd2lsbCBiZSBleGVjdXRlZCB3aGVuIFRleHRUb1NwZWVjaEZlYXR1cmUgc3NtbFxyXG4gKiBldmVudHMgYXJlIGVtaXR0ZWQuXHJcbiAqL1xyXG5jbGFzcyBUZXh0VG9TcGVlY2hGZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlIGV4dGVuZHMgRmVhdHVyZURlcGVuZGVudEludGVyZmFjZSB7XHJcbiAgLyoqXHJcbiAgICogRXhlY3V0ZWQgd2hlbiBzcGVlY2ggcGxheSBldmVudHMgYXJlIGNhdWdodC5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICovXHJcbiAgX29uUGxheSgpIHt9XHJcblxyXG4gIC8qKlxyXG4gICAqIEV4ZWN1dGVkIHdoZW4gc3BlZWNoIHBhdXNlIGV2ZW50cyBhcmUgY2F1Z2h0LlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBfb25QYXVzZSgpIHt9XHJcblxyXG4gIC8qKlxyXG4gICAqIEV4ZWN1dGVkIHdoZW4gc3BlZWNoIHJlc3VtZSBldmVudHMgYXJlIGNhdWdodC5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICovXHJcbiAgX29uUmVzdW1lKCkge31cclxuXHJcbiAgLyoqXHJcbiAgICogRXhlY3V0ZWQgd2hlbiBzcGVlY2ggc3RvcCBldmVudHMgYXJlIGNhdWdodC5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICovXHJcbiAgX29uU3RvcCgpIHt9XHJcblxyXG4gIC8qKlxyXG4gICAqIEV4ZWN1dGVkIHdoZW4gc3BlZWNoIHNlbnRlbmNlIGV2ZW50cyBhcmUgY2F1Z2h0LlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBfb25TZW50ZW5jZSgpIHt9XHJcblxyXG4gIC8qKlxyXG4gICAqIEV4ZWN1dGVkIHdoZW4gc3BlZWNoIHdvcmQgZXZlbnRzIGFyZSBjYXVnaHQuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIF9vbldvcmQoKSB7fVxyXG5cclxuICAvKipcclxuICAgKiBFeGVjdXRlZCB3aGVuIHNwZWVjaCB2aXNlbWUgZXZlbnRzIGFyZSBjYXVnaHQuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIF9vblZpc2VtZSgpIHt9XHJcblxyXG4gIC8qKlxyXG4gICAqIEV4ZWN1dGVkIHdoZW4gc3BlZWNoIHNzbWwgZXZlbnRzIGFyZSBjYXVnaHQuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIF9vblNzbWwoKSB7fVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGVzIGEgY2xhc3MgdGhhdCBpbXBsZW1lbnRzIHtAbGluayBUZXh0VG9TcGVlY2hGZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlfVxyXG4gICAqIGFuZCBleHRlbmRzIGEgc3BlY2lmaWVkIGJhc2UgY2xhc3MuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge0NsYXNzfSBCYXNlQ2xhc3MgLSBUaGUgY2xhc3MgdG8gZXh0ZW5kLlxyXG4gICAqXHJcbiAgICogQHJldHVybiB7Q2xhc3N9IEEgY2xhc3MgdGhhdCBleHRlbmRzIGBCYXNlQ2xhc3NgIGFuZCBpbXBsZW1lbnRzIHtAbGluayBUZXh0VG9TcGVlY2hGZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlfS5cclxuICAgKi9cclxuICBzdGF0aWMgTWl4aW4oQmFzZUNsYXNzKSB7XHJcbiAgICBjb25zdCBQYXJlbnRDbGFzcyA9IEZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2UuTWl4aW4oQmFzZUNsYXNzKTtcclxuICAgIGNvbnN0IFRleHRUb1NwZWVjaEZlYXR1cmVEZXBlbmRlbnRNaXhpbiA9IGNsYXNzIGV4dGVuZHMgUGFyZW50Q2xhc3Mge1xyXG4gICAgICBfb25QbGF5KCkge31cclxuXHJcbiAgICAgIF9vblBhdXNlKCkge31cclxuXHJcbiAgICAgIF9vblJlc3VtZSgpIHt9XHJcblxyXG4gICAgICBfb25TdG9wKCkge31cclxuXHJcbiAgICAgIF9vblNlbnRlbmNlKCkge31cclxuXHJcbiAgICAgIF9vbldvcmQoKSB7fVxyXG5cclxuICAgICAgX29uVmlzZW1lKCkge31cclxuXHJcbiAgICAgIF9vblNzbWwoKSB7fVxyXG4gICAgfTtcclxuXHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhUZXh0VG9TcGVlY2hGZWF0dXJlRGVwZW5kZW50TWl4aW4sIHtcclxuICAgICAgRVZFTlRfREVQRU5ERU5DSUVTOiB7XHJcbiAgICAgICAgdmFsdWU6IHtcclxuICAgICAgICAgIC4uLlBhcmVudENsYXNzLkVWRU5UX0RFUEVOREVOQ0lFUyxcclxuICAgICAgICAgIC4uLlRleHRUb1NwZWVjaEZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2UuRVZFTlRfREVQRU5ERU5DSUVTLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgd3JpdGFibGU6IGZhbHNlLFxyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIFRleHRUb1NwZWVjaEZlYXR1cmVEZXBlbmRlbnRNaXhpbjtcclxuICB9XHJcbn1cclxuXHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFRleHRUb1NwZWVjaEZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2UsIHtcclxuICBFVkVOVF9ERVBFTkRFTkNJRVM6IHtcclxuICAgIHZhbHVlOiB7XHJcbiAgICAgIFRleHRUb1NwZWVjaEZlYXR1cmU6IHtcclxuICAgICAgICBwbGF5OiAnX29uUGxheScsXHJcbiAgICAgICAgcGF1c2U6ICdfb25QYXVzZScsXHJcbiAgICAgICAgcmVzdW1lOiAnX29uUmVzdW1lJyxcclxuICAgICAgICBzdG9wOiAnX29uU3RvcCcsXHJcbiAgICAgICAgc2VudGVuY2U6ICdfb25TZW50ZW5jZScsXHJcbiAgICAgICAgd29yZDogJ19vbldvcmQnLFxyXG4gICAgICAgIHZpc2VtZTogJ19vblZpc2VtZScsXHJcbiAgICAgICAgc3NtbDogJ19vblNzbWwnLFxyXG4gICAgICB9LFxyXG4gICAgfSxcclxuICAgIHdyaXRhYmxlOiBmYWxzZSxcclxuICB9LFxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IFRleHRUb1NwZWVjaEZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2U7XHJcbiIsIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxyXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTBcclxuaW1wb3J0IE1hdGhVdGlscyBmcm9tICcuL01hdGhVdGlscyc7XHJcbmltcG9ydCB7UXVhZHJhdGljfSBmcm9tICcuL2FuaW1wYWNrL0Vhc2luZyc7XHJcbmltcG9ydCBNYW5hZ2VkQW5pbWF0aW9uTGF5ZXJJbnRlcmZhY2UgZnJvbSAnLi9hbmltcGFjay9NYW5hZ2VkQW5pbWF0aW9uTGF5ZXJJbnRlcmZhY2UnO1xyXG5pbXBvcnQgVGV4dFRvU3BlZWNoRmVhdHVyZURlcGVuZGVudEludGVyZmFjZSBmcm9tICcuL2F3c3BhY2svVGV4dFRvU3BlZWNoRmVhdHVyZURlcGVuZGVudEludGVyZmFjZSc7XHJcbmltcG9ydCBBYnN0cmFjdEhvc3RGZWF0dXJlIGZyb20gJy4vQWJzdHJhY3RIb3N0RmVhdHVyZSc7XHJcblxyXG4vKipcclxuICogRGVmYXVsdCBtYXBwaW5nIG9mIFBvbGx5IHZpc2VtZSBuYW1lcyB0byBhbmltYXRpb24gb3B0aW9ucyBvYmplY3RzLlxyXG4gKlxyXG4gKiBAcHJvcGVydHkge09iamVjdH0gW3NpbD17bmFtZTogJ3NpbCd9XVxyXG4gKiBAcHJvcGVydHkge09iamVjdH0gW3A9e25hbWU6ICdwJywgb3ZlcnJpZGVXZWlnaHQ6IDAuOX1dXHJcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBbdD17bmFtZTogJ3QnLCBibGVuZFRpbWU6IDAuMn1dXHJcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBbUz17bmFtZTogJ1MnfV1cclxuICogQHByb3BlcnR5IHtPYmplY3R9IFtUPXtuYW1lOiAnVCd9XVxyXG4gKiBAcHJvcGVydHkge09iamVjdH0gW2Y9e25hbWU6ICdmJywgb3ZlcnJpZGVXZWlnaHQ6IDAuNzV9XVxyXG4gKiBAcHJvcGVydHkge09iamVjdH0gW2s9e25hbWU6ICdrJ31dXHJcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBbaT17bmFtZTogJ2knfV1cclxuICogQHByb3BlcnR5IHtPYmplY3R9IFtyPXtuYW1lOiAncid9XVxyXG4gKiBAcHJvcGVydHkge09iamVjdH0gW3M9e25hbWU6ICdzJywgYmxlbmRUaW1lOiAwLjI1fV1cclxuICogQHByb3BlcnR5IHtPYmplY3R9IFt1PXtuYW1lOiAndSd9XVxyXG4gKiBAcHJvcGVydHkge09iamVjdH0gW0A9e25hbWU6ICdAJ31dXHJcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBbYT17bmFtZTogJ2EnfV1cclxuICogQHByb3BlcnR5IHtPYmplY3R9IFtlPXtuYW1lOiAnZScsIGJsZW5kVGltZTogMC4yfV1cclxuICogQHByb3BlcnR5IHtPYmplY3R9IFtFPXtuYW1lOiAnRSd9XVxyXG4gKiBAcHJvcGVydHkge09iamVjdH0gW289e25hbWU6ICdvJ31dXHJcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBbTz17bmFtZTogJ08nfV1cclxuICovXHJcbmNvbnN0IERlZmF1bHRWaXNlbWVNYXAgPSB7XHJcbiAgc2lsOiB7bmFtZTogJ3NpbCd9LFxyXG4gIHA6IHtuYW1lOiAncCcsIG92ZXJyaWRlV2VpZ2h0OiAwLjl9LFxyXG4gIHQ6IHtuYW1lOiAndCcsIGJsZW5kVGltZTogMC4yfSxcclxuICBTOiB7bmFtZTogJ1MnfSxcclxuICBUOiB7bmFtZTogJ1QnfSxcclxuICBmOiB7bmFtZTogJ2YnLCBvdmVycmlkZVdlaWdodDogMC43NX0sXHJcbiAgazoge25hbWU6ICdrJ30sXHJcbiAgaToge25hbWU6ICdpJ30sXHJcbiAgcjoge25hbWU6ICdyJ30sXHJcbiAgczoge25hbWU6ICdzJywgYmxlbmRUaW1lOiAwLjI1fSxcclxuICB1OiB7bmFtZTogJ3UnfSxcclxuICAnQCc6IHtuYW1lOiAnQCd9LFxyXG4gIGE6IHtuYW1lOiAnYSd9LFxyXG4gIGU6IHtuYW1lOiAnZScsIGJsZW5kVGltZTogMC4yfSxcclxuICBFOiB7bmFtZTogJ0UnfSxcclxuICBvOiB7bmFtZTogJ28nfSxcclxuICBPOiB7bmFtZTogJ08nfSxcclxufTtcclxuXHJcbi8qKlxyXG4gKiBMaXBzeW5jIGNvbnRyb2xzIHR3byB0eXBlcyBvZiBtb3ZlbWVudDogaWRsZSBhbmltYXRpb24gdGhhdCBzaG91bGQgcGxheSB3aGlsZVxyXG4gKiBzcGVlY2ggaXMgcGxheWluZyBhbmQgdmlzZW1lIGFuaW1hdGlvbnMgY29ycmVzcG9uZGluZyB0byBQb2xseSB2aXNlbWVzIHdob3NlXHJcbiAqIHdlaWdodHMgc2hvdWxkIGJlIHR1cm5lZCBvbiBhbmQgb2ZmIGFzIHRoZXkgYXJlIGVuY291bnRlcmVkIGluIHRoZSBQb2xseSBTU01MXHJcbiAqIHRyYW5zY3JpcHQuIExheWVycyBvd25lZCBieSB0aGlzIGZlYXR1cmUgd2lsbCBiZSBlbmFibGVkIHdoaWxlIHNwZWVjaCBpcyBwbGF5aW5nXHJcbiAqIGFuZCBkaXNhYmxlZCBvbmNlIGl0IHN0b3BzLlxyXG4gKlxyXG4gKiBAZXh0ZW5kcyBBYnN0cmFjdEhvc3RGZWF0dXJlXHJcbiAqIEBhbGlhcyBjb3JlL0xpcHN5bmNGZWF0dXJlXHJcbiAqIEBpbXBsZW1lbnRzIFRleHRUb1NwZWVjaEZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2VcclxuICogQGltcGxlbWVudHMgTWFuYWdlZEFuaW1hdGlvbkxheWVySW50ZXJmYWNlXHJcbiAqL1xyXG5jbGFzcyBMaXBzeW5jRmVhdHVyZSBleHRlbmRzIEFic3RyYWN0SG9zdEZlYXR1cmUubWl4KFxyXG4gIFRleHRUb1NwZWVjaEZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2UuTWl4aW4sXHJcbiAgTWFuYWdlZEFuaW1hdGlvbkxheWVySW50ZXJmYWNlLk1peGluXHJcbikge1xyXG4gIC8qKlxyXG4gICAqIEBjb25zdHJ1Y3RvclxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtjb3JlL0hvc3RPYmplY3R9IGhvc3QgLSBIb3N0IHRoYXQgb3ducyB0aGUgZmVhdHVyZS5cclxuICAgKiBAcGFyYW0ge09iamVjdD19IHZpc2VtZU9wdGlvbnMgLSBPcHRpb25zIGZvciB0aGUgdmlzZW1lIGxheWVycy5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gW3Zpc2VtZU9wdGlvbnMuYmxlbmRUaW1lPTAuMTVdIC0gRGVmYXVsdCBhbW91bnQgb2YgdGltZSBpdFxyXG4gICAqIHdpbGwgdGFrZSB0byBtYW5pcHVsYXRlIGVhY2ggZnJlZUJsZW5kIHdlaWdodCBvbiB0aGUgdmlzZW1lIHN0YXRlcy5cclxuICAgKiBAcGFyYW0ge09iamVjdH0gW3Zpc2VtZU9wdGlvbnMuZGVjYXlSYXRlPXthbW91bnQ6IC41LCBzZWNvbmRzOiAuNX1dIC0gQW4gb2JqZWN0XHJcbiAgICogZGVzY3JpYmluZyB0aGUgMC0xIGZhY3RvciB2aXNlbWUgd2VpZ2h0IHdpbGwgZGVjYXkgaWYgdGhlIHZpc2VtZSBkdXJhdGlvbiBpc1xyXG4gICAqIGxvbmdlciB0aGFuIHRoZSBibGVuZFRpbWUgYW5kIHRoZSBudW1iZXIgb2Ygc2Vjb25kcyBpdCB3b3VsZCB0YWtlIHRvIGRlY2F5XHJcbiAgICogYnkgdGhhdCBmYWN0b3IuXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IFt2aXNlbWVPcHRpb25zLmVhc2luZ0ZuPVF1YWRyYXRpYy5Jbk91dF0gLSBEZWZhdWx0IGVhc2luZyBmdW5jdGlvblxyXG4gICAqIHRvIHVzZSB3aGVuIG1hbmlwdWxhdGluZyB2aXNlbWUgZnJlZUJsZW5kIHdlaWdodHMuXHJcbiAgICogQHBhcmFtIHtBcnJheS48T2JqZWN0Pn0gW3Zpc2VtZU9wdGlvbnMuLmxheWVycz1bXV0gLSBBbiBhcnJheSBvZiBsYXllciBvcHRpb25zXHJcbiAgICogb2JqZWN0cyB0byByZWdpc3RlciBhcyB2aXNlbWUgbGF5ZXJzLlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0PX0gdGFsa2luZ09wdGlvbnMgLSBPcHRpb25zIGZvciB0aGUgdGFsa2luZyBsYXllcnMuXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IFt0YWxraW5nT3B0aW9ucy5ibGVuZFRpbWU9MC43NV0gLSBEZWZhdWx0IGFtb3VudCBvZiB0aW1lIHRvXHJcbiAgICogZW5hYmxlIGFuZCBkaXNhYmxlIHRoZSB0YWxraW5nIGlkbGUgbGF5ZXJzXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IFt0YWxraW5nT3B0aW9ucy5lYXNpbmdGbj1RdWFkcmF0aWMuSW5PdXRdIC0gRGVmYXVsdCBlYXNpbmdcclxuICAgKiBmdW5jdGlvbiB0byB1c2Ugd2hlbiBtYW5pcHVsYXRpbmcgd2VpZ2h0cyBvbiB0aGUgdGFsa2luZyBpZGxlIGxheWVycy5cclxuICAgKiBAcGFyYW0ge0FycmF5LjxPYmplY3Q+fSBbdGFsa2luZ09wdGlvbnMubGF5ZXJzPVtdXSAtIEFuIGFycmF5IG9mIGxheWVyIG9wdGlvbnNcclxuICAgKiBvYmplY3RzIHRvIHJlZ2lzdGVyIGFzIHRhbGtpbmcgbGF5ZXJzLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbdmlzZW1lTGVhZFRpbWU9LjA2N10gLSBUaGUgYW1vdW50IG9mIHRpbWUgdG8gaW5zdHJ1Y3QgdGhlXHJcbiAgICogVGV4dFRvU3BlZWNoRmVhdHVyZSB0byBlbWl0IHNwZWVjaG1hcmtzIGJlZm9yZSBlYWNoIG9uZSdzIGFjdHVhbCB0aW1lc3RhbXBcclxuICAgKiBpcyByZWFjaGVkLiBUaGlzIHdpbGwgc2V0IHRoZSAnc3BlZWNoTWFya09mZnNldCcgdmFyaWFibGUgb24gdGhlIFRleHRUb1NwZWVjaEZlYXR1cmUuXHJcbiAgICovXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBob3N0LFxyXG4gICAge1xyXG4gICAgICBibGVuZFRpbWU6IHZpc2VtZUJsZW5kVGltZSA9IDAuMTUsXHJcbiAgICAgIGRlY2F5UmF0ZToge2Ftb3VudCA9IDAuNSwgc2Vjb25kcyA9IDAuNX0gPSB7fSxcclxuICAgICAgZWFzaW5nRm46IHZpc2VtZUVhc2luZ0ZuID0gUXVhZHJhdGljLkluT3V0LFxyXG4gICAgICBsYXllcnM6IHZpc2VtZUxheWVycyA9IFtdLFxyXG4gICAgfSA9IHt9LFxyXG4gICAge1xyXG4gICAgICBibGVuZFRpbWU6IHRhbGtpbmdCbGVuZFRpbWUgPSAwLjc1LFxyXG4gICAgICBlYXNpbmdGbjogdGFsa2luZ0Vhc2luZ0ZuID0gUXVhZHJhdGljLkluT3V0LFxyXG4gICAgICBsYXllcnM6IHRhbGtpbmdMYXllcnMgPSBbXSxcclxuICAgIH0gPSB7fSxcclxuICAgIHZpc2VtZUxlYWRUaW1lID0gMC4wNjdcclxuICApIHtcclxuICAgIHN1cGVyKGhvc3QpO1xyXG5cclxuICAgIHRoaXMuX3Zpc2VtZUxheWVycyA9IHt9O1xyXG4gICAgdGhpcy5fdGFsa2luZ0xheWVycyA9IHt9O1xyXG4gICAgdGhpcy52aXNlbWVMZWFkVGltZSA9IHZpc2VtZUxlYWRUaW1lO1xyXG5cclxuICAgIC8vIFJlZ2lzdGVyIHRoZSB2aXNlbWUgbGF5ZXJzXHJcbiAgICB2aXNlbWVMYXllcnMuZm9yRWFjaCgoe25hbWUsIGFuaW1hdGlvbiwgdmlzZW1lTWFwID0gRGVmYXVsdFZpc2VtZU1hcH0pID0+IHtcclxuICAgICAgdGhpcy5yZWdpc3RlclZpc2VtZUxheWVyKG5hbWUsIHtcclxuICAgICAgICBhbmltYXRpb24sXHJcbiAgICAgICAgdmlzZW1lTWFwLFxyXG4gICAgICAgIGRlY2F5UmF0ZToge2Ftb3VudCwgc2Vjb25kc30sXHJcbiAgICAgICAgYmxlbmRUaW1lOiB2aXNlbWVCbGVuZFRpbWUsXHJcbiAgICAgICAgZWFzaW5nRm46IHZpc2VtZUVhc2luZ0ZuLFxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIFJlZ2lzdGVyIHRoZSB0YWxraW5nIGxheWVyc1xyXG4gICAgdGFsa2luZ0xheWVycy5mb3JFYWNoKCh7bmFtZSwgYW5pbWF0aW9ufSkgPT4ge1xyXG4gICAgICB0aGlzLnJlZ2lzdGVyVGFsa2luZ0xheWVyKG5hbWUsIHtcclxuICAgICAgICBhbmltYXRpb24sXHJcbiAgICAgICAgYmxlbmRUaW1lOiB0YWxraW5nQmxlbmRUaW1lLFxyXG4gICAgICAgIGVhc2luZ0ZuOiB0YWxraW5nRWFzaW5nRm4sXHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFbnN1cmUgdGhhdCByZWdpc3RlcmVkIHZpc2VtZSBhbmltYXRpb25zIGFyZSBGcmVlQmxlbmRTdGF0ZXMuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVyTmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRoYXQgY29udGFpbnMgdGhlIHZpc2VtZSBhbmltYXRpb24uXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFuaW1hdGlvbk5hbWUgLSBOYW1lIG9mIHRoZSBhbmltYXRpb24uXHJcbiAgICovXHJcbiAgX3JlZ2lzdGVyVmlzZW1lQW5pbWF0aW9uKGxheWVyTmFtZSwgYW5pbWF0aW9uTmFtZSkge1xyXG4gICAgaWYgKHRoaXMuX21hbmFnZWRMYXllcnNbbGF5ZXJOYW1lXS5hbmltYXRpb25zW2FuaW1hdGlvbk5hbWVdLmlzQWN0aXZlKSB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICB0aGlzLl9ob3N0LkFuaW1hdGlvbkZlYXR1cmUuZ2V0QW5pbWF0aW9uVHlwZShcclxuICAgICAgICAgIGxheWVyTmFtZSxcclxuICAgICAgICAgIGFuaW1hdGlvbk5hbWVcclxuICAgICAgICApICE9PSAnZnJlZUJsZW5kJ1xyXG4gICAgICApIHtcclxuICAgICAgICAvLyBXYXJuIGFuZCBkZWFjdGl2YXRlIGlmIHRoZSByZWdpc3RlcmVkIHN0YXRlIGlzIG5vdCBmcmVlQmxlbmRcclxuICAgICAgICBjb25zb2xlLndhcm4oXHJcbiAgICAgICAgICBgQ2Fubm90IHJlZ2lzdGVyIExpcHN5bmMgdmlzZW1lIGFuaW1hdGlvbiAke2FuaW1hdGlvbk5hbWV9IG9uIGxheWVyICR7bGF5ZXJOYW1lfSBmb3IgaG9zdCAke3RoaXMuX2hvc3QuaWR9LiBWaXNlbWUgYW5pbWF0aW9ucyBtdXN0IGJlIG9mIHR5cGUgJ2ZyZWVCbGVuZCcuYFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5fbWFuYWdlZExheWVyc1tsYXllck5hbWVdLmFuaW1hdGlvbnNbXHJcbiAgICAgICAgICBhbmltYXRpb25OYW1lXHJcbiAgICAgICAgXS5pc0FjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIENoZWNrIGlmIHRoZSBibGVuZFdlaWdodHMgY2FuIGJlIG1hbmlwdWxhdGVkIG5vd1xyXG4gICAgICAgIGNvbnN0IHdlaWdodE5hbWVzID0gdGhpcy5faG9zdC5BbmltYXRpb25GZWF0dXJlLmdldEFuaW1hdGlvbkJsZW5kTmFtZXMoXHJcbiAgICAgICAgICBsYXllck5hbWUsXHJcbiAgICAgICAgICBhbmltYXRpb25OYW1lXHJcbiAgICAgICAgKTtcclxuICAgICAgICBjb25zdCB7dmlzZW1lTWFwfSA9IHRoaXMuX21hbmFnZWRMYXllcnNbbGF5ZXJOYW1lXS5hbmltYXRpb25zW1xyXG4gICAgICAgICAgYW5pbWF0aW9uTmFtZVxyXG4gICAgICAgIF07XHJcblxyXG4gICAgICAgIE9iamVjdC52YWx1ZXModmlzZW1lTWFwKS5mb3JFYWNoKHZpc2VtZU9wdGlvbnMgPT4ge1xyXG4gICAgICAgICAgdmlzZW1lT3B0aW9ucy5pc0FjdGl2ZSA9IHdlaWdodE5hbWVzLmluY2x1ZGVzKHZpc2VtZU9wdGlvbnMubmFtZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIElmIHRoZSBhZGRlZCBmZWF0dXJlIGlzIFRleHRUb1NwZWVjaCwgdXBkYXRlIGl0cyBzcGVlY2hNYXJrT2Zmc2V0IHZhcmlhYmxlLlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlTmFtZSAtIE5hbWUgb2YgdGhlIHR5cGUgb2YgZmVhdHVyZSB0aGF0IHdhcyBhZGRlZC5cclxuICAgKi9cclxuICBfb25GZWF0dXJlQWRkZWQodHlwZU5hbWUpIHtcclxuICAgIHRoaXMuX3Zpc2VtZUxheWVycyA9IHRoaXMuX3Zpc2VtZUxheWVycyB8fCB7fTtcclxuICAgIHRoaXMuX3RhbGtpbmdMYXllcnMgPSB0aGlzLl90YWxraW5nTGF5ZXJzIHx8IHt9O1xyXG5cclxuICAgIHN1cGVyLl9vbkZlYXR1cmVBZGRlZCh0eXBlTmFtZSk7XHJcblxyXG4gICAgaWYgKHR5cGVOYW1lID09PSAnVGV4dFRvU3BlZWNoRmVhdHVyZScpIHtcclxuICAgICAgdGhpcy5faG9zdC5UZXh0VG9TcGVlY2hGZWF0dXJlLnNwZWVjaG1hcmtPZmZzZXQgPVxyXG4gICAgICAgIC10aGlzLl92aXNlbWVMZWFkVGltZSB8fCAwO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgX29uTGF5ZXJBZGRlZCh7bmFtZX0pIHtcclxuICAgIHN1cGVyLl9vbkxheWVyQWRkZWQoe25hbWV9KTtcclxuXHJcbiAgICAvLyBWYWxpZGF0ZSB0aGUgdmlzZW1lIGFuaW1hdGlvblxyXG4gICAgaWYgKHRoaXMuX3Zpc2VtZUxheWVyc1tuYW1lXSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMuX3JlZ2lzdGVyVmlzZW1lQW5pbWF0aW9uKG5hbWUsIHRoaXMuX3Zpc2VtZUxheWVyc1tuYW1lXSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBfb25BbmltYXRpb25BZGRlZCh7bGF5ZXJOYW1lLCBhbmltYXRpb25OYW1lfSkge1xyXG4gICAgc3VwZXIuX29uQW5pbWF0aW9uQWRkZWQoe2xheWVyTmFtZX0pO1xyXG5cclxuICAgIC8vIFZhbGlkYXRlIHRoZSB2aXNlbWUgYW5pbWF0aW9uXHJcbiAgICBpZiAodGhpcy5fdmlzZW1lTGF5ZXJzW2xheWVyTmFtZV0gPT09IGFuaW1hdGlvbk5hbWUpIHtcclxuICAgICAgdGhpcy5fcmVnaXN0ZXJWaXNlbWVBbmltYXRpb24obGF5ZXJOYW1lLCB0aGlzLl92aXNlbWVMYXllcnNbbGF5ZXJOYW1lXSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBfb25QbGF5KCkge1xyXG4gICAgLy8gVHVybiBvbiB0aGUgbGF5ZXIgd2VpZ2h0c1xyXG4gICAgdGhpcy5lbmFibGUoKTtcclxuXHJcbiAgICAvLyBTZXQgdGhlIGN1cnJlbnQgYW5pbWF0aW9uc1xyXG4gICAgW3RoaXMuX3Zpc2VtZUxheWVycywgdGhpcy5fdGFsa2luZ0xheWVyc10uZm9yRWFjaChsYXllcnMgPT4ge1xyXG4gICAgICBPYmplY3QuZW50cmllcyhsYXllcnMpLmZvckVhY2goKFtsYXllck5hbWUsIGFuaW1hdGlvbk5hbWVdKSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuX21hbmFnZWRMYXllcnNbbGF5ZXJOYW1lXS5hbmltYXRpb25zW2FuaW1hdGlvbk5hbWVdLmlzQWN0aXZlKSB7XHJcbiAgICAgICAgICB0aGlzLl9ob3N0LkFuaW1hdGlvbkZlYXR1cmUucmVzdW1lQW5pbWF0aW9uKGxheWVyTmFtZSwgYW5pbWF0aW9uTmFtZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgX29uUGF1c2UoKSB7XHJcbiAgICB0aGlzLl9vblN0b3AoKTtcclxuICB9XHJcblxyXG4gIF9vblJlc3VtZSgpIHtcclxuICAgIHRoaXMuX29uUGxheSgpO1xyXG4gIH1cclxuXHJcbiAgX29uU3RvcCgpIHtcclxuICAgIC8vIFR1cm4gb2ZmIHRoZSBsYXllciB3ZWlnaHRzXHJcbiAgICB0aGlzLmRpc2FibGUoKTtcclxuXHJcbiAgICAvLyBQYXVzZSB0aGUgY3VycmVudCBhbmltYXRpb25zXHJcbiAgICBbdGhpcy5fdmlzZW1lTGF5ZXJzLCB0aGlzLl90YWxraW5nTGF5ZXJzXS5mb3JFYWNoKGxheWVycyA9PiB7XHJcbiAgICAgIE9iamVjdC5lbnRyaWVzKGxheWVycykuZm9yRWFjaCgoW2xheWVyTmFtZSwgYW5pbWF0aW9uTmFtZV0pID0+IHtcclxuICAgICAgICBpZiAodGhpcy5fbWFuYWdlZExheWVyc1tsYXllck5hbWVdLmFuaW1hdGlvbnNbYW5pbWF0aW9uTmFtZV0uaXNBY3RpdmUpIHtcclxuICAgICAgICAgIHRoaXMuX2hvc3QuQW5pbWF0aW9uRmVhdHVyZS5wYXVzZUFuaW1hdGlvbihsYXllck5hbWUsIGFuaW1hdGlvbk5hbWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFdoZW4gdmlzZW1lIGV2ZW50cyBhcmUgY2F1Z2h0LCB0dXJuIG9uIHdlaWdodCBvZiB0aGUgbmV3IHZpc2VtZSBmb3IgdGhlIGR1cmF0aW9uXHJcbiAgICogb2YgdGhlIHNwZWVjaCBtYXJrLCB0aGVuIHR1cm4gd2VpZ2h0IGJhY2sgb2ZmLlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBldmVudCAtIEV2ZW50IGRhdGEgcGFzc2VkIGZyb20gdGhlIHNwZWVjaC5cclxuICAgKiBAcGFyYW0ge09iamVjdH0gZXZlbnQubWFyayAtIFNwZWVjaG1hcmsgb2JqZWN0LlxyXG4gICAqL1xyXG4gIGFzeW5jIF9vblZpc2VtZSh7bWFya30pIHtcclxuICAgIE9iamVjdC5lbnRyaWVzKHRoaXMuX3Zpc2VtZUxheWVycykuZm9yRWFjaCgoW2xheWVyTmFtZSwgYW5pbU5hbWVdKSA9PiB7XHJcbiAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgbGF5ZXIgY2FuIGJlIG1hbmlwdWxhdGVkXHJcbiAgICAgIGNvbnN0IHtpc0FjdGl2ZSwgdmlzZW1lTWFwfSA9IHRoaXMuX21hbmFnZWRMYXllcnNbbGF5ZXJOYW1lXS5hbmltYXRpb25zW1xyXG4gICAgICAgIGFuaW1OYW1lXHJcbiAgICAgIF07XHJcblxyXG4gICAgICBpZiAoIWlzQWN0aXZlKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBUYWtlIHZhcmlhYmxlcyBmcm9tIHRoZSB2aXNlbWUgaWYgdGhleSBleGlzdCBhbmQgZGVmYXVsdCB0byB0aGUgbGF5ZXJcclxuICAgICAgY29uc3Qge1xyXG4gICAgICAgIG5hbWU6IHZpc2VtZSxcclxuICAgICAgICBpc0FjdGl2ZTogaXNWaXNlbWVBY3RpdmUsXHJcbiAgICAgICAgZGVjYXlSYXRlLFxyXG4gICAgICAgIGJsZW5kVGltZSxcclxuICAgICAgICBlYXNpbmdGbixcclxuICAgICAgICBvdmVycmlkZVdlaWdodCxcclxuICAgICAgfSA9IHtcclxuICAgICAgICAuLi50aGlzLl9tYW5hZ2VkTGF5ZXJzW2xheWVyTmFtZV0sXHJcbiAgICAgICAgLi4udmlzZW1lTWFwW21hcmsudmFsdWVdLFxyXG4gICAgICB9O1xyXG5cclxuICAgICAgY29uc3QgdmlzZW1lTmFtZXMgPSB0aGlzLl9ob3N0LkFuaW1hdGlvbkZlYXR1cmUuZ2V0QW5pbWF0aW9uQmxlbmROYW1lcyhcclxuICAgICAgICBsYXllck5hbWUsXHJcbiAgICAgICAgYW5pbU5hbWVcclxuICAgICAgKTtcclxuXHJcbiAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgbmV3IHZpc2VtZSBoYXMgYW4gYWN0aXZlIGZyZWVCbGVuZCB3ZWlnaHRcclxuICAgICAgaWYgKCFpc1Zpc2VtZUFjdGl2ZSB8fCAhdmlzZW1lTmFtZXMuaW5jbHVkZXModmlzZW1lKSkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gRmluZCB0aGUgcGVhayB3ZWlnaHQgZm9yIHRoZSB2aXNlbWUgYW5kIHRoZSBhbW91bnQgb2YgdGltZSBpdCBzaG91bGRcclxuICAgICAgLy8gdGFrZSB0byByZWFjaCBpdFxyXG4gICAgICBsZXQgd2VpZ2h0ID0gMTtcclxuICAgICAgY29uc3QgZHVyYXRpb24gPSBtYXJrLmR1cmF0aW9uIC8gMTAwMDtcclxuICAgICAgaWYgKGR1cmF0aW9uIDwgYmxlbmRUaW1lKSB7XHJcbiAgICAgICAgY29uc3QgbGVycEZhY3RvciA9IGJsZW5kVGltZSA+IDAgPyBkdXJhdGlvbiAvIGJsZW5kVGltZSA6IDE7XHJcbiAgICAgICAgd2VpZ2h0ID1cclxuICAgICAgICAgIG92ZXJyaWRlV2VpZ2h0ICE9PSB1bmRlZmluZWRcclxuICAgICAgICAgICAgPyBvdmVycmlkZVdlaWdodFxyXG4gICAgICAgICAgICA6IE1hdGhVdGlscy5sZXJwKDAsIDEsIGxlcnBGYWN0b3IpO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IGJsZW5kSW5UaW1lID0gTWF0aC5taW4oZHVyYXRpb24sIGJsZW5kVGltZSk7XHJcblxyXG4gICAgICAvLyBGaW5kIHRoZSBhbW91bnQgYW5kIHRpbWUgdmlzZW1lIHdpbGwgYmUgaGVsZCBmb3JcclxuICAgICAgY29uc3QgaG9sZFRpbWUgPSBkdXJhdGlvbiAtIGJsZW5kVGltZTtcclxuXHJcbiAgICAgIGlmIChob2xkVGltZSA8IDApIHtcclxuICAgICAgICAvLyBQZXJmb3JtIGluIC0+IG91dCBhbmltYXRpb25cclxuICAgICAgICB0aGlzLl9hbmltYXRlU2ltcGxlVmlzZW1lKFxyXG4gICAgICAgICAgbGF5ZXJOYW1lLFxyXG4gICAgICAgICAgYW5pbU5hbWUsXHJcbiAgICAgICAgICB2aXNlbWUsXHJcbiAgICAgICAgICB3ZWlnaHQsXHJcbiAgICAgICAgICBibGVuZEluVGltZSxcclxuICAgICAgICAgIGJsZW5kVGltZSxcclxuICAgICAgICAgIGVhc2luZ0ZuXHJcbiAgICAgICAgKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCBsZXJwRmFjdG9yID1cclxuICAgICAgICAgIGRlY2F5UmF0ZS5zZWNvbmRzID4gMCA/IGhvbGRUaW1lIC8gZGVjYXlSYXRlLnNlY29uZHMgOiAxO1xyXG4gICAgICAgIC8vIFBlcmZvcm0gaW4gLT4gaG9sZCAtPiBvdXQgYW5pbWF0aW9uXHJcbiAgICAgICAgY29uc3QgZGVjYXlXZWlnaHQgPSBNYXRoVXRpbHMubGVycChcclxuICAgICAgICAgIHdlaWdodCxcclxuICAgICAgICAgIHdlaWdodCAqIGRlY2F5UmF0ZS5hbW91bnQsXHJcbiAgICAgICAgICBNYXRoLm1pbigxLCBsZXJwRmFjdG9yKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5fYW5pbWF0ZUhlbGRWaXNlbWUoXHJcbiAgICAgICAgICBsYXllck5hbWUsXHJcbiAgICAgICAgICBhbmltTmFtZSxcclxuICAgICAgICAgIHZpc2VtZSxcclxuICAgICAgICAgIHdlaWdodCxcclxuICAgICAgICAgIGRlY2F5V2VpZ2h0LFxyXG4gICAgICAgICAgYmxlbmRJblRpbWUsXHJcbiAgICAgICAgICBob2xkVGltZSxcclxuICAgICAgICAgIGJsZW5kVGltZSxcclxuICAgICAgICAgIGVhc2luZ0ZuXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBbmltYXRlIGEgdmlzZW1lIGJsZW5kIHdlaWdodCB0b3dhcmRzIGEgdmFsdWUgYW5kIHRoZW4gYmFjayB0byB6ZXJvLlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllck5hbWUgLSBOYW1lIG9mIHRoZSBsYXllciB0aGF0IGNvbnRhaW5zIHRoZSB2aXNlbWUuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFuaW1OYW1lIC0gTmFtZSBvZiB0aGUgZnJlZWJsZW5kIGFuaW1hdGlvbiB0aGF0IGNvbnRhaW5zXHJcbiAgICogdGhlIHZpc2VtZS5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdmlzZW1lTmFtZSAtIE5hbWUgb2YgdGhlIGJsZW5kIHdlaWdodCB0byBtYW5pcHVsYXRlLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB3ZWlnaHQgLSBQZWFrIHdlaWdodCB0byBhbmltYXRlIHRvd2FyZHMuXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IGJsZW5kSW5UaW1lIC0gQW1vdW50IG9mIHRpbWUgaXQgc2hvdWxkIHRha2UgdG8gcmVhY2ggdGhlXHJcbiAgICogcGVhayB3ZWlnaHQuXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IGJsZW5kT3V0VGltZSAtIEFtb3VudCBvZiB0aW1lIGl0IHNob3VsZCB0YWtlIHRvIGFuaW1hdGUgYmFja1xyXG4gICAqIHRvIHplcm8gYWZ0ZXIgcmVhY2hpbmcgdGhlIHBlYWsgd2VpZ2h0LlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGVhc2luZ0ZuIC0gRWFzaW5nIGZ1bmN0aW9uIHRvIHVzZSBkdXJpbmcgYW5pbWF0aW9uLlxyXG4gICAqL1xyXG4gIF9hbmltYXRlU2ltcGxlVmlzZW1lKFxyXG4gICAgbGF5ZXJOYW1lLFxyXG4gICAgYW5pbU5hbWUsXHJcbiAgICB2aXNlbWVOYW1lLFxyXG4gICAgcGVha1dlaWdodCxcclxuICAgIGJsZW5kSW5UaW1lLFxyXG4gICAgYmxlbmRPdXRUaW1lLFxyXG4gICAgZWFzaW5nRm5cclxuICApIHtcclxuICAgIC8vIEFuaW1hdGUgdG93YXJkcyB0aGUgcGVhayB2YWx1ZVxyXG4gICAgY29uc3Qgd2VpZ2h0UHJvbWlzZSA9IHRoaXMuX2hvc3QuQW5pbWF0aW9uRmVhdHVyZS5zZXRBbmltYXRpb25CbGVuZFdlaWdodChcclxuICAgICAgbGF5ZXJOYW1lLFxyXG4gICAgICBhbmltTmFtZSxcclxuICAgICAgdmlzZW1lTmFtZSxcclxuICAgICAgcGVha1dlaWdodCxcclxuICAgICAgYmxlbmRJblRpbWUsXHJcbiAgICAgIGVhc2luZ0ZuXHJcbiAgICApO1xyXG5cclxuICAgIC8vIEFuaW1hdGUgYmFjayB0byB6ZXJvIGlmIHRoZXJlIHdhcyBubyB3ZWlnaHQgaW50ZXJydXB0aW9uXHJcbiAgICB3ZWlnaHRQcm9taXNlLnRoZW4oKCkgPT4ge1xyXG4gICAgICBpZiAoIXdlaWdodFByb21pc2UuY2FuY2VsZWQpIHtcclxuICAgICAgICB0aGlzLl9ob3N0LkFuaW1hdGlvbkZlYXR1cmUuc2V0QW5pbWF0aW9uQmxlbmRXZWlnaHQoXHJcbiAgICAgICAgICBsYXllck5hbWUsXHJcbiAgICAgICAgICBhbmltTmFtZSxcclxuICAgICAgICAgIHZpc2VtZU5hbWUsXHJcbiAgICAgICAgICAwLFxyXG4gICAgICAgICAgYmxlbmRPdXRUaW1lLFxyXG4gICAgICAgICAgZWFzaW5nRm5cclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFuaW1hdGUgYSB2aXNlbWUgYmxlbmQgd2VpZ2h0IHRvd2FyZHMgYSB2YWx1ZSBhbmQgdGhlbiBiYWNrIHRvIHplcm8uXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVyTmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRoYXQgY29udGFpbnMgdGhlIHZpc2VtZS5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gYW5pbU5hbWUgLSBOYW1lIG9mIHRoZSBmcmVlYmxlbmQgYW5pbWF0aW9uIHRoYXQgY29udGFpbnNcclxuICAgKiB0aGUgdmlzZW1lLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB2aXNlbWVOYW1lIC0gTmFtZSBvZiB0aGUgYmxlbmQgd2VpZ2h0IHRvIG1hbmlwdWxhdGUuXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IHBlYWtXZWlnaHQgLSBQZWFrIHdlaWdodCB0byBhbmltYXRlIHRvd2FyZHMuXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IGRlY2F5V2VpZ2h0IC0gV2VpZ2h0IHRvIGFuaW1hdGUgdG93YXJkcyBhZnRlciByZWFjaGluZyB0aGVcclxuICAgKiBwZWFrIHdlaWdodC5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gYmxlbmRJblRpbWUgLSBBbW91bnQgb2YgdGltZSBpdCBzaG91bGQgdGFrZSB0byByZWFjaCB0aGVcclxuICAgKiBwZWFrIHdlaWdodC5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gaG9sZFRpbWUgLSBBbW91bnQgb2YgdGltZSBpdCBzaG91bGQgdGFrZSB0byByZWFjaCB0aGUgZGVjYXlcclxuICAgKiB3ZWlnaHQgYWZ0ZXIgdGhlIHBlYWsgd2VpZ2h0IGhhcyBiZWVuIHJlYWNoZWQuXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IGJsZW5kT3V0VGltZSAtIEFtb3VudCBvZiB0aW1lIGl0IHNob3VsZCB0YWtlIHRvIGFuaW1hdGUgYmFja1xyXG4gICAqIHRvIHplcm8gYWZ0ZXIgcmVhY2hpbmcgdGhlIGRlY2F5IHdlaWdodC5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBlYXNpbmdGbiAtIEVhc2luZyBmdW5jdGlvbiB0byB1c2UgZHVyaW5nIGFuaW1hdGlvbi5cclxuICAgKi9cclxuICBhc3luYyBfYW5pbWF0ZUhlbGRWaXNlbWUoXHJcbiAgICBsYXllck5hbWUsXHJcbiAgICBhbmltTmFtZSxcclxuICAgIHZpc2VtZU5hbWUsXHJcbiAgICBwZWFrV2VpZ2h0LFxyXG4gICAgZGVjYXlXZWlnaHQsXHJcbiAgICBibGVuZEluVGltZSxcclxuICAgIGhvbGRUaW1lLFxyXG4gICAgYmxlbmRPdXRUaW1lLFxyXG4gICAgZWFzaW5nRm5cclxuICApIHtcclxuICAgIC8vIEFuaW1hdGUgdG93YXJkcyB0aGUgcGVhayB2YWx1ZVxyXG4gICAgY29uc3Qgc3RhcnRQcm9taXNlID0gdGhpcy5faG9zdC5BbmltYXRpb25GZWF0dXJlLnNldEFuaW1hdGlvbkJsZW5kV2VpZ2h0KFxyXG4gICAgICBsYXllck5hbWUsXHJcbiAgICAgIGFuaW1OYW1lLFxyXG4gICAgICB2aXNlbWVOYW1lLFxyXG4gICAgICBwZWFrV2VpZ2h0LFxyXG4gICAgICBibGVuZEluVGltZSxcclxuICAgICAgZWFzaW5nRm5cclxuICAgICk7XHJcblxyXG4gICAgYXdhaXQgc3RhcnRQcm9taXNlO1xyXG5cclxuICAgIGlmICghc3RhcnRQcm9taXNlLmNhbmNlbGVkKSB7XHJcbiAgICAgIC8vIEFuaW1hdGUgdG93YXJkcyB0aGUgZGVjYXkgdmFsdWUgaWYgdGhlcmUgd2FzIG5vIHdlaWdodCBpbnRlcnJ1cHRpb25cclxuICAgICAgY29uc3QgaG9sZFByb21pc2UgPSB0aGlzLl9ob3N0LkFuaW1hdGlvbkZlYXR1cmUuc2V0QW5pbWF0aW9uQmxlbmRXZWlnaHQoXHJcbiAgICAgICAgbGF5ZXJOYW1lLFxyXG4gICAgICAgIGFuaW1OYW1lLFxyXG4gICAgICAgIHZpc2VtZU5hbWUsXHJcbiAgICAgICAgZGVjYXlXZWlnaHQsXHJcbiAgICAgICAgaG9sZFRpbWUsXHJcbiAgICAgICAgZWFzaW5nRm5cclxuICAgICAgKTtcclxuXHJcbiAgICAgIGF3YWl0IGhvbGRQcm9taXNlO1xyXG5cclxuICAgICAgaWYgKCFob2xkUHJvbWlzZS5jYW5jZWxlZCkge1xyXG4gICAgICAgIC8vIEFuaW1hdGUgYmFjayB0byB6ZXJvIGlmIHRoZXJlIHdhcyBubyB3ZWlnaHQgaW50ZXJydXB0aW9uXHJcbiAgICAgICAgdGhpcy5faG9zdC5BbmltYXRpb25GZWF0dXJlLnNldEFuaW1hdGlvbkJsZW5kV2VpZ2h0KFxyXG4gICAgICAgICAgbGF5ZXJOYW1lLFxyXG4gICAgICAgICAgYW5pbU5hbWUsXHJcbiAgICAgICAgICB2aXNlbWVOYW1lLFxyXG4gICAgICAgICAgMCxcclxuICAgICAgICAgIGJsZW5kT3V0VGltZSxcclxuICAgICAgICAgIGVhc2luZ0ZuXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyBhbmQgc2V0cyB0aGUgYW1vdW50IG9mIHRpbWUgaW4gc2Vjb25kcyB0byBuZWdhdGl2ZWx5IG9mZnNldCBzcGVlY2htYXJrXHJcbiAgICogZW1pc3Npb24gYnkuXHJcbiAgICpcclxuICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAqL1xyXG4gIGdldCB2aXNlbWVMZWFkVGltZSgpIHtcclxuICAgIHJldHVybiB0aGlzLl92aXNlbWVMZWFkVGltZTtcclxuICB9XHJcblxyXG4gIHNldCB2aXNlbWVMZWFkVGltZShzZWNvbmRzKSB7XHJcbiAgICB0aGlzLl92aXNlbWVMZWFkVGltZSA9IHNlY29uZHM7XHJcblxyXG4gICAgaWYgKHRoaXMuX2hvc3QuVGV4dFRvU3BlZWNoRmVhdHVyZSkge1xyXG4gICAgICB0aGlzLl9ob3N0LlRleHRUb1NwZWVjaEZlYXR1cmUuc3BlZWNobWFya09mZnNldCA9IC1zZWNvbmRzO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU3RhcnQga2VlcGluZyB0cmFjayBvZiBhbiBhbmltYXRpb24gbGF5ZXIgdGhhdCBvd25zIGEgZnJlZUJsZW5kIGFuaW1hdGlvblxyXG4gICAqIHdpdGggYmxlbmRXZWlnaHRzIGNvcnJlc3BvbmRpbmcgdG8gdmlzZW1lcy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllck5hbWUgLSBOYW1lIG9mIHRoZSBsYXllciB0byBrZWVwIHRyYWNrIG9mLlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0PX0gb3B0aW9ucyAtIE9wdGlvbnMgZm9yIHRoZSBsYXllci5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuYW5pbWF0aW9uPSd2aXNlbWVzJ10gLSBOYW1lIG9mIHRoZSBhbmltYXRpb24gb24gdGhlXHJcbiAgICogbGF5ZXIgdGhhdCB3aWxsIGJlIHBsYXllZCBkdXJpbmcgc3BlZWNoLiBUaGlzIGFuaW1hdGlvbiBtdXN0IGJlIG9mIHR5cGVcclxuICAgKiBmcmVlQmxlbmQuXHJcbiAgICogQHBhcmFtIHtPYmplY3Q9fSBkZWNheVJhdGVcclxuICAgKiBAcGFyYW0ge251bWJlcn0gW2RlY2F5UmF0ZS5hbW91bnQ9MC41XSAtIFRoZSBwZXJjZW50YWdlIHRvIGRlY3JlYXNlIHRoZSB2aXNlbWUnc1xyXG4gICAqIHBlYWsgdmFsdWUgYnkgb3ZlciB0aW1lIG9uY2UgdGhlIHBlYWsgdmFsdWUgaGFzIGJlZW4gcmVhY2hlZC5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gW2RlY2F5UmF0ZS5zZWNvbmRzPTAuNV0gLSBUaGUgYW1vdW50IG9mIHRpbWUgaW4gc2Vjb25kcyB0b1xyXG4gICAqIGRlY3JlYXNlIHRoZSB2aXNlbWUncyB3ZWlnaHQgb25jZSBpdCBoYXMgcmVhY2hlZCBpdHMgcGVhayB2YWx1ZS5cclxuICAgKiBAcGFyYW0ge251bWJlcj19IFtvcHRpb25zLmJsZW5kVGltZT1bTGlwc3luY0ZlYXR1cmUuREVGQVVMVF9MQVlFUl9PUFRJT05TLmJsZW5kVGltZV17QGxpbmsgTGlwc3luY0ZlYXR1cmUjREVGQVVMVF9MQVlFUl9PUFRJT05TI2JsZW5kVGltZX1dIC1cclxuICAgKiBEZWZhdWx0IGFtb3VudCBvZiB0aW1lIHRvIHVzZSB3aGVuIG1hbmlwdWxhdGluZyBhbmltYXRpb24gYmxlbmRXZWlnaHRzLlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvcHRpb25zLmVhc2luZ0ZuIC0gRGVmYXVsdCBlYXNpbmcgZnVuY3Rpb24gdG8gdXNlIHdoZW5cclxuICAgKiBtYW5pcHVsYXRpbmcgYW5pbWF0aW9uIGJsZW5kV2VpZ2h0cy5cclxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnMudmlzZW1lTWFwPURlZmF1bHRWaXNlbWVNYXBdIC0gT2JqZWN0IGNvbnRhaW5pbmcga2V5L3ZhbHVlIHBhaXJzIG9mXHJcbiAgICogUG9sbHkgdmlzZW1lIG5hbWVzIG1hcHBlZCB0byBvYmplY3RzIGNvbnRhaW5pbmcgdGhlIG5hbWUgb2YgdGhlIGNvcnJlc3BvbmRpbmdcclxuICAgKiBhbmltYXRpb24gYmxlbmRXZWlnaHQgYW5kIGFueSBvdGhlciBhbmltYXRpb24gb3B0aW9ucyB0byB1c2Ugc3VjaCBhcyB2aXNlbWVcclxuICAgKiBzcGVjaWZpYyBibGVuZCB0aW1lcyBhbmQgZWFzaW5nIGZ1bmN0aW9ucy5cclxuICAgKi9cclxuICByZWdpc3RlclZpc2VtZUxheWVyKFxyXG4gICAgbGF5ZXJOYW1lLFxyXG4gICAge1xyXG4gICAgICBhbmltYXRpb24gPSAndmlzZW1lcycsXHJcbiAgICAgIGRlY2F5UmF0ZSA9IHthbW91bnQ6IDAuNSwgc2Vjb25kczogMC41fSxcclxuICAgICAgYmxlbmRUaW1lID0gTGlwc3luY0ZlYXR1cmUuREVGQVVMVF9MQVlFUl9PUFRJT05TLmJsZW5kVGltZSxcclxuICAgICAgZWFzaW5nRm4sXHJcbiAgICAgIHZpc2VtZU1hcCA9IERlZmF1bHRWaXNlbWVNYXAsXHJcbiAgICB9ID0ge31cclxuICApIHtcclxuICAgIC8vIFJlZ2lzdGVyIHRoZSBsYXllciBhbmQgYW5pbWF0aW9uXHJcbiAgICB0aGlzLnJlZ2lzdGVyTGF5ZXIobGF5ZXJOYW1lLCB7XHJcbiAgICAgIGRlY2F5UmF0ZSxcclxuICAgICAgYmxlbmRUaW1lLFxyXG4gICAgICBlYXNpbmdGbixcclxuICAgICAgYW5pbWF0aW9uczoge1thbmltYXRpb25dOiB7dmlzZW1lTWFwfX0sXHJcbiAgICB9KTtcclxuICAgIHRoaXMuX3Zpc2VtZUxheWVyc1tsYXllck5hbWVdID0gYW5pbWF0aW9uO1xyXG5cclxuICAgIC8vIFZhbGlkYXRlIHRoZSB2aXNlbWUgYW5pbWF0aW9uXHJcbiAgICB0aGlzLl9yZWdpc3RlclZpc2VtZUFuaW1hdGlvbihsYXllck5hbWUsIGFuaW1hdGlvbik7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTdGFydCBrZWVwaW5nIHRyYWNrIG9mIGFuIGFuaW1hdGlvbiBsYXllciB0aGF0IGNvbnRhaW5zIGEgbG9vcGluZyBhbmltYXRpb25cclxuICAgKiB0byBiZSBwbGF5ZWQgZHVyaW5nIHNwZWVjaC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllck5hbWUgLSBOYW1lIG9mIHRoZSBsYXllciB0byBrZWVwIHRyYWNrIG9mLlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0PX0gb3B0aW9ucyAtIE9wdGlvbnMgZm9yIHRoZSBsYXllci5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuYW5pbWF0aW9uPSdzdGFuZF90YWxrJ10gLSBOYW1lIG9mIHRoZSBhbmltYXRpb24gb24gdGhlXHJcbiAgICogbGF5ZXIgdGhhdCB3aWxsIGJlIHBsYXllZCBkdXJpbmcgc3BlZWNoLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5ibGVuZFRpbWU9W0xpcHN5bmNGZWF0dXJlLkRFRkFVTFRfTEFZRVJfT1BUSU9OUy5ibGVuZFRpbWVde0BsaW5rIExpcHN5bmNGZWF0dXJlI0RFRkFVTFRfTEFZRVJfT1BUSU9OUyNibGVuZFRpbWV9XSAtXHJcbiAgICogRGVmYXVsdCBhbW91bnQgb2YgdGltZSB0byB1c2Ugd2hlbiBtYW5pcHVsYXRpbmcgdGhlIGxheWVyJ3Mgd2VpZ2h0cy5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb3B0aW9ucy5lYXNpbmdGbiAtIERlZmF1bHQgZWFzaW5nIGZ1bmN0aW9uIHRvIHVzZSB3aGVuXHJcbiAgICogbWFuaXB1bGF0aW5nIHRoZSBsYXllcidzIHdlaWdodHMuXHJcbiAgICovXHJcbiAgcmVnaXN0ZXJUYWxraW5nTGF5ZXIoXHJcbiAgICBsYXllck5hbWUsXHJcbiAgICB7XHJcbiAgICAgIGFuaW1hdGlvbiA9ICdzdGFuZF90YWxrJyxcclxuICAgICAgYmxlbmRUaW1lID0gTGlwc3luY0ZlYXR1cmUuREVGQVVMVF9MQVlFUl9PUFRJT05TLmJsZW5kVGltZSxcclxuICAgICAgZWFzaW5nRm4sXHJcbiAgICB9ID0ge31cclxuICApIHtcclxuICAgIC8vIFJlZ2lzdGVyIHRoZSBsYXllciBhbmQgYW5pbWF0aW9uXHJcbiAgICB0aGlzLnJlZ2lzdGVyTGF5ZXIobGF5ZXJOYW1lLCB7XHJcbiAgICAgIGJsZW5kVGltZSxcclxuICAgICAgZWFzaW5nRm4sXHJcbiAgICAgIGFuaW1hdGlvbnM6IHtbYW5pbWF0aW9uXToge319LFxyXG4gICAgfSk7XHJcbiAgICB0aGlzLl90YWxraW5nTGF5ZXJzW2xheWVyTmFtZV0gPSBhbmltYXRpb247XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBZGRzIGEgbmFtZXNwYWNlIHRvIHRoZSBob3N0IHdpdGggdGhlIG5hbWUgb2YgdGhlIGZlYXR1cmUgdG8gY29udGFpbiBwcm9wZXJ0aWVzXHJcbiAgICogYW5kIG1ldGhvZHMgZnJvbSB0aGUgZmVhdHVyZSB0aGF0IHVzZXJzIG9mIHRoZSBob3N0IG5lZWQgYWNjZXNzIHRvLlxyXG4gICAqXHJcbiAgICogQHNlZSBMaXBzeW5jRmVhdHVyZVxyXG4gICAqL1xyXG4gIGluc3RhbGxBcGkoKSB7XHJcbiAgICAvKipcclxuICAgICAqIEBpbm5lclxyXG4gICAgICogQG5hbWVzcGFjZSBMaXBzeW5jRmVhdHVyZVxyXG4gICAgICovXHJcbiAgICBjb25zdCBhcGkgPSBzdXBlci5pbnN0YWxsQXBpKCk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAbWVtYmVyb2YgTGlwc3luY0ZlYXR1cmVcclxuICAgICAqIEBuYW1lIHJlZ2lzdGVyTGF5ZXJcclxuICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICogQG1ldGhvZFxyXG4gICAgICogQHNlZSBNYW5hZ2VkQW5pbWF0aW9uTGF5ZXJJbnRlcmZhY2UjcmVnaXN0ZXJMYXllclxyXG4gICAgICovXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAbWVtYmVyb2YgTGlwc3luY0ZlYXR1cmVcclxuICAgICAqIEBuYW1lIHJlZ2lzdGVyQW5pbWF0aW9uXHJcbiAgICAgKiBAaW5zdGFuY2VcclxuICAgICAqIEBtZXRob2RcclxuICAgICAqIEBzZWUgTWFuYWdlZEFuaW1hdGlvbkxheWVySW50ZXJmYWNlI3JlZ2lzdGVyQW5pbWF0aW9uXHJcbiAgICAgKi9cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBtZW1iZXJvZiBMaXBzeW5jRmVhdHVyZVxyXG4gICAgICogQG5hbWUgc2V0TGF5ZXJXZWlnaHRzXHJcbiAgICAgKiBAaW5zdGFuY2VcclxuICAgICAqIEBtZXRob2RcclxuICAgICAqIEBzZWUgTWFuYWdlZEFuaW1hdGlvbkxheWVySW50ZXJmYWNlI3NldExheWVyV2VpZ2h0c1xyXG4gICAgICovXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAbWVtYmVyb2YgTGlwc3luY0ZlYXR1cmVcclxuICAgICAqIEBuYW1lIGVuYWJsZVxyXG4gICAgICogQGluc3RhbmNlXHJcbiAgICAgKiBAbWV0aG9kXHJcbiAgICAgKiBAc2VlIE1hbmFnZWRBbmltYXRpb25MYXllckludGVyZmFjZSNlbmFibGVcclxuICAgICAqL1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQG1lbWJlcm9mIExpcHN5bmNGZWF0dXJlXHJcbiAgICAgKiBAbmFtZSBkaXNhYmxlXHJcbiAgICAgKiBAaW5zdGFuY2VcclxuICAgICAqIEBtZXRob2RcclxuICAgICAqIEBzZWUgTWFuYWdlZEFuaW1hdGlvbkxheWVySW50ZXJmYWNlI2Rpc2FibGVcclxuICAgICAqL1xyXG5cclxuICAgIE9iamVjdC5hc3NpZ24oYXBpLCB7XHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbWVtYmVyb2YgTGlwc3luY0ZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBtZXRob2RcclxuICAgICAgICogQHNlZSBjb3JlL0xpcHN5bmNGZWF0dXJlI3JlZ2lzdGVyVmlzZW1lTGF5ZXJcclxuICAgICAgICovXHJcbiAgICAgIHJlZ2lzdGVyVmlzZW1lTGF5ZXI6IHRoaXMucmVnaXN0ZXJWaXNlbWVMYXllci5iaW5kKHRoaXMpLFxyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIExpcHN5bmNGZWF0dXJlXHJcbiAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgKiBAbWV0aG9kXHJcbiAgICAgICAqIEBzZWUgY29yZS9MaXBzeW5jRmVhdHVyZSNyZWdpc3RlclRhbGtpbmdMYXllclxyXG4gICAgICAgKi9cclxuICAgICAgcmVnaXN0ZXJUYWxraW5nTGF5ZXI6IHRoaXMucmVnaXN0ZXJUYWxraW5nTGF5ZXIuYmluZCh0aGlzKSxcclxuICAgIH0pO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQG1lbWJlcm9mIExpcHN5bmNGZWF0dXJlXHJcbiAgICAgKiBAaW5zdGFuY2VcclxuICAgICAqIEBuYW1lIHZpc2VtZUxlYWRUaW1lXHJcbiAgICAgKiBAc2VlIGNvcmUvTGlwc3luY0ZlYXR1cmUjdmlzZW1lTGVhZFRpbWVcclxuICAgICAqL1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGFwaSwgJ3Zpc2VtZUxlYWRUaW1lJywge1xyXG4gICAgICBnZXQ6ICgpID0+IHRoaXMudmlzZW1lTGVhZFRpbWUsXHJcbiAgICAgIHNldDogc2Vjb25kcyA9PiB7XHJcbiAgICAgICAgdGhpcy52aXNlbWVMZWFkVGltZSA9IHNlY29uZHM7XHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gYXBpO1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgTGlwc3luY0ZlYXR1cmU7XHJcbmV4cG9ydCB7RGVmYXVsdFZpc2VtZU1hcH07XHJcbiIsIi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXHJcbi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxyXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTBcclxuXHJcbi8qIGVzbGludC1kaXNhYmxlIG1heC1jbGFzc2VzLXBlci1maWxlICovXHJcbi8qIGVzbGludC1kaXNhYmxlIG5vLWVtcHR5ICovXHJcbmltcG9ydCBUZXh0VG9TcGVlY2hGZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlIGZyb20gJ2NvcmUvYXdzcGFjay9UZXh0VG9TcGVlY2hGZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlJztcclxuXHJcbi8qKlxyXG4gKiBDbGFzcyBmYWN0b3J5IGludGVyZmFjZSBmb3IgdGhhdCByZWdpc3RlcnMgY2FsbGJhY2sgbWV0aG9kIHdoZW4gYSBzc21sIHNwZWVjaG1hcmsgZXZlbnQgaXMgZW1pdHRlZC5cclxuICpcclxuICogQGludGVyZmFjZVxyXG4gKiBAZXh0ZW5kcyBUZXh0VG9TcGVlY2hGZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlXHJcbiAqL1xyXG5jbGFzcyBTU01MU3BlZWNobWFya0ludGVyZmFjZSBleHRlbmRzIFRleHRUb1NwZWVjaEZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2Uge1xyXG4gIC8qKlxyXG4gICAqIFdoZW4gc3NtbCBldmVudHMgYXJlIGNhdWdodCwgdGhpcyB3aWxsIHRyeSB0byBwYXJzZSB0aGUgc3BlZWNoIG1hcmsgdmFsdWUgYW5kIGV4ZWN1dGUgYW55IGZ1bmN0aW9uIHdoaWNoIG1lZXRzIGNyaXRlcmlhIGRlZmluZWQgaW4gdGhlIHZhbHVlLlxyXG4gICAqIFNwZWVjaCBtYXJrIHZhbHVlIHdpbGwgYmUgdHJlYXRlZCBhcyBzdHJpbmdpZmllZCBqc29uIGZvcm1hdCBjb250YWluaW5nIHJlcXVpcmVkIGZlYXR1cmUgbmFtZSwgZnVuY3Rpb24gbmFtZSBhbmQgYXJndW1lbnQgYXJyYXkgdG8gcGFzcyBpbi5cclxuICAgKiBFeGFtcGxlIHNwZWVjaCBtYXJrIHZhbHVlIG1pZ2h0IGxvb2sgbGlrZTogJ3tcImZlYXR1cmVcIjpcIkdlc3R1cmVGZWF0dXJlXCIsIFwibWV0aG9kXCI6XCJzd2l0Y2hUb0dlc3R1cmVcIiwgXCJhcmdzXCI6W1wiZ2VucmljQVwiLCAwLjVdfSdcclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge09iamVjdH0gZXZlbnQgLSBFdmVudCBkYXRhIHBhc3NlZCBmcm9tIHRoZSBzcGVlY2guXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IGV2ZW50Lm1hcmsgLSBTcGVlY2htYXJrIG9iamVjdC5cclxuICAgKi9cclxuICBfb25Tc21sKHttYXJrfSkge31cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlcyBhIGNsYXNzIHRoYXQgaW1wbGVtZW50cyB7QGxpbmsgU1NNTFNwZWVjaG1hcmtJbnRlcmZhY2V9XHJcbiAgICogYW5kIGV4dGVuZHMgYSBzcGVjaWZpZWQgYmFzZSBjbGFzcy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7Q2xhc3N9IEJhc2VDbGFzcyAtIFRoZSBjbGFzcyB0byBleHRlbmQuXHJcbiAgICpcclxuICAgKiBAcmV0dXJuIHtDbGFzc30gQSBjbGFzcyB0aGF0IGV4dGVuZHMgYEJhc2VDbGFzc2AgYW5kIGltcGxlbWVudHMge0BsaW5rIFNTTUxTcGVlY2htYXJrSW50ZXJmYWNlfS5cclxuICAgKi9cclxuICBzdGF0aWMgTWl4aW4oQmFzZUNsYXNzKSB7XHJcbiAgICBjb25zdCBQYXJlbnRDbGFzcyA9IFRleHRUb1NwZWVjaEZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2UuTWl4aW4oQmFzZUNsYXNzKTtcclxuICAgIGNvbnN0IFNTTUxTcGVlY2hNYXJrTWl4aW4gPSBjbGFzcyBleHRlbmRzIFBhcmVudENsYXNzIHtcclxuICAgICAgX29uU3NtbCh7bWFya30pIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgY29uc3Qge2ZlYXR1cmUsIG1ldGhvZCwgYXJnc30gPSBKU09OLnBhcnNlKG1hcmsudmFsdWUpO1xyXG4gICAgICAgICAgaWYgKHRoaXMuY29uc3RydWN0b3IubmFtZSA9PT0gZmVhdHVyZSkge1xyXG4gICAgICAgICAgICBjb25zdCBjYWxsYmFjayA9IHRoaXNbbWV0aG9kXTtcclxuICAgICAgICAgICAgaWYgKGNhbGxiYWNrICYmIHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KHRoaXMsIGFyZ3MpXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgY29uc29sZS53YXJuKGBGdW5jdGlvbiAke21ldGhvZH0gZG9lcyBub3QgZXhpc3Qgd2l0aGluIGZlYXR1cmUgJHtmZWF0dXJlfWApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGNhdGNoKGUpIHt9XHJcbiAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIFNTTUxTcGVlY2hNYXJrTWl4aW47XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBTU01MU3BlZWNobWFya0ludGVyZmFjZTtcclxuIiwiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXHJcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxyXG5pbXBvcnQgTWFuYWdlZEFuaW1hdGlvbkxheWVySW50ZXJmYWNlIGZyb20gJy4vYW5pbXBhY2svTWFuYWdlZEFuaW1hdGlvbkxheWVySW50ZXJmYWNlJztcclxuaW1wb3J0IFNTTUxTcGVlY2htYXJrSW50ZXJmYWNlIGZyb20gJy4vYXdzcGFjay9TU01MU3BlZWNobWFya0ludGVyZmFjZSc7XHJcbmltcG9ydCBBYnN0cmFjdEhvc3RGZWF0dXJlIGZyb20gJy4vQWJzdHJhY3RIb3N0RmVhdHVyZSc7XHJcbmltcG9ydCBEZWZlcnJlZCBmcm9tICcuL0RlZmVycmVkJztcclxuaW1wb3J0IFV0aWxzIGZyb20gJy4vVXRpbHMnO1xyXG5cclxuY29uc3QgRGVmYXVsdEdlc3R1cmVXb3JkcyA9IHtcclxuICBiaWc6IFtcclxuICAgICdhZGQnLFxyXG4gICAgJ2Fib3ZlJyxcclxuICAgICdhdXRob3JpdHknLFxyXG4gICAgJ2JpZycsXHJcbiAgICAnY292ZXInLFxyXG4gICAgJ2Z1bGwnLFxyXG4gICAgJ2ZseScsXHJcbiAgICAnZ3JvdycsXHJcbiAgICAnZ3Jvd3RoJyxcclxuICAgICdoaWdoJyxcclxuICAgICdodWdlJyxcclxuICAgICdpbmNyZWFzZScsXHJcbiAgICAnbWFqb3InLFxyXG4gICAgJ21ham9yaXR5JyxcclxuICAgICdsYXJnZScsXHJcbiAgICAnbGVhZGVyJyxcclxuICAgICdsb3QnLFxyXG4gICAgJ3JhaXNlJyxcclxuICAgICdyaXNlJyxcclxuICAgICd0YWxsJyxcclxuICBdLFxyXG4gIGhlYXJ0OiBbXHJcbiAgICAnYWNjZXB0JyxcclxuICAgICdhZG1pdCcsXHJcbiAgICAnYmVsaWV2ZScsXHJcbiAgICAnY2FyZScsXHJcbiAgICAnZmVlbGluZycsXHJcbiAgICAnZmVlbCcsXHJcbiAgICAnZnJpZW5kJyxcclxuICAgICdncmF0ZWZ1bCcsXHJcbiAgICAnaGFwcHknLFxyXG4gICAgJ2hlYXJ0JyxcclxuICAgICdodW1hbicsXHJcbiAgICAncGFpbicsXHJcbiAgICAnc2F2ZScsXHJcbiAgICAnc2FmZScsXHJcbiAgICAna2luZCcsXHJcbiAgICAnbG92ZScsXHJcbiAgXSxcclxuICBpbjogW1xyXG4gICAgJ2luY2x1ZGUnLFxyXG4gICAgJ2luY2x1ZGluZycsXHJcbiAgICAnaW5zaWRlJyxcclxuICAgICdpbnRvJyxcclxuICAgICdub3cnLFxyXG4gICAgJ25lYXInLFxyXG4gICAgJ25lYXJlc3QnLFxyXG4gICAgJ2Nsb3Nlc3QnLFxyXG4gICAgJ3RoZXJlaW4nLFxyXG4gICAgJ3dpdGhpbicsXHJcbiAgXSxcclxuICBtYW55OiBbXHJcbiAgICAnYWxsJyxcclxuICAgICdhbHdheXMnLFxyXG4gICAgJ2FueScsXHJcbiAgICAnYW55b25lJyxcclxuICAgICdhbW9uZycsXHJcbiAgICAnYXJlYScsXHJcbiAgICAnYXJvdW5kJyxcclxuICAgICdiZWF1dGlmdWwnLFxyXG4gICAgJ2VudGlyZScsXHJcbiAgICAnZW52aXJvbm1lbnQnLFxyXG4gICAgJ2Vudmlyb25tZW50cycsXHJcbiAgICAnZW52aXJvbm1lbnRhbCcsXHJcbiAgICAnZXZlcnlib2R5JyxcclxuICAgICdldmVyeW9uZScsXHJcbiAgICAnZXZlcnl0aGluZycsXHJcbiAgICAnYXVkaWVuY2UnLFxyXG4gICAgJ3RvdGFsJyxcclxuICAgICdncm91cCcsXHJcbiAgICAnZ3JvdXBzJyxcclxuICAgICdtaWxsaW9uJyxcclxuICAgICdtaWxsaW9ucycsXHJcbiAgICAnb3RoZXJzJyxcclxuICAgICdiaWxsaW9uJyxcclxuICAgICdiaWxsaW9ucycsXHJcbiAgICAnaHVuZHJlZCcsXHJcbiAgICAnaHVuZHJlZHMnLFxyXG4gICAgJ21hbnknLFxyXG4gICAgJ3Rob3VzYW5kJyxcclxuICAgICd0aG91c2FuZHMnLFxyXG4gICAgJ3dvcmxkJyxcclxuICAgICd3b3JsZHMnLFxyXG4gICAgJ291dHNpZGUnLFxyXG4gICAgJ3JldmVhbCcsXHJcbiAgXSxcclxuICBtb3ZlbWVudDogW1xyXG4gICAgJ2F3YXknLFxyXG4gICAgJ2Fjcm9zcycsXHJcbiAgICAnYWhlYWQnLFxyXG4gICAgJ2Fsb25nJyxcclxuICAgICdmYXInLFxyXG4gICAgJ2Zhc3QnLFxyXG4gICAgJ2ZvbGxvdycsXHJcbiAgICAnZ28nLFxyXG4gICAgJ2xlYXZlJyxcclxuICAgICdtb3ZlJyxcclxuICAgICdtb3ZlbWVudCcsXHJcbiAgICAndGhyb3VnaCcsXHJcbiAgICAndGhyb3VnaG91dCcsXHJcbiAgICAndG93YXJkJyxcclxuICAgICd0cmF2ZWwnLFxyXG4gICAgJ3R1cm5lZCcsXHJcbiAgICAncGFzc2VkJyxcclxuICBdLFxyXG4gIG9uZTogW1xyXG4gICAgJ3NpbmdsZScsXHJcbiAgICAnb25lJyxcclxuICAgICdvbmNlJyxcclxuICAgICdmaXJzdCcsXHJcbiAgICAnZmlyc3RseScsXHJcbiAgICAnb25seScsXHJcbiAgICAnc29sbycsXHJcbiAgICAnd2FybmVkJyxcclxuICAgICd0cnVseScsXHJcbiAgICAndXAnLFxyXG4gICAgJ2Fsb25lJyxcclxuICBdLFxyXG4gIGFnZ3Jlc3NpdmU6IFtcclxuICAgICdwb3dlcicsXHJcbiAgICAncG93ZXJzJyxcclxuICAgICdwb3dlcmZ1bCcsXHJcbiAgICAnYXNzZXJ0JyxcclxuICAgICdhc3NlcnRpdmUnLFxyXG4gICAgJ3N0cm9uZycsXHJcbiAgICAnc3Ryb25nZXInLFxyXG4gICAgJ3N0cm9uZ2VzdCcsXHJcbiAgICAnc3RyZW5ndGgnLFxyXG4gICAgJ2ZsZXgnLFxyXG4gICAgJ2RhbmcnLFxyXG4gICAgJ2RhbW4nLFxyXG4gICAgJ2RhbW5pdCcsXHJcbiAgICAnZGFybicsXHJcbiAgICAnc2h1Y2tzJyxcclxuICAgICdkb2gnLFxyXG4gICAgJ2RyYXQnLFxyXG4gICAgJ2FuZ3J5JyxcclxuICAgICdhbmdyaWVyJyxcclxuICAgICdhbmdyaWVzdCcsXHJcbiAgICAnYWdncmVzc2l2ZScsXHJcbiAgICAnYW5ub3llZCcsXHJcbiAgICAnYW5ub3lpbmcnLFxyXG4gICAgJ2F0dGFjaycsXHJcbiAgICAnYXR0YWNraW5nJyxcclxuICAgICdvZmZlbnNlJyxcclxuICAgICdvZmZlbnNpdmUnLFxyXG4gICAgJ2JhdHRsZScsXHJcbiAgXSxcclxuICB5b3U6IFsneW91JywgJ3lhbGwnLCBcInknYWxsXCIsICd5b3VyJywgJ3lvdXJzJywgJ3Rob3UnLCAndGh5J10sXHJcbiAgZGVmZW5zZTogW1xyXG4gICAgJ2RlZmVuc2UnLFxyXG4gICAgJ2ZlYXInLFxyXG4gICAgJ3JlcHVsc2VkJyxcclxuICAgICdzY2FyZWQnLFxyXG4gICAgJ3NjYXJ5JyxcclxuICAgICdzY2FyaWVyJyxcclxuICAgICdzY2FyaWVzdCcsXHJcbiAgICAnZmVhcmZ1bCcsXHJcbiAgICAnYWZyYWlkJyxcclxuICAgICdjb3dlcicsXHJcbiAgICAnY293ZXJzJyxcclxuICAgICdjb3dlcmluZycsXHJcbiAgICAnaGlkZW91cycsXHJcbiAgICAnZG9vbWVkJyxcclxuICAgICd0ZXJyaWZpZWQnLFxyXG4gICAgJ3RlcnJpZnknLFxyXG4gICAgJ3RlcnJpZnlpbmcnLFxyXG4gICAgJ3RlcnJpZmllcycsXHJcbiAgICAnc3Bvb2t5JyxcclxuICAgICdzcG9va2llcicsXHJcbiAgICAnc3Bvb2tpZXN0JyxcclxuICBdLFxyXG4gIHdhdmU6IFtcclxuICAgICdoZWxsbycsXHJcbiAgICAnaGknLFxyXG4gICAgJ2hpeWEnLFxyXG4gICAgJ2hvd2R5JyxcclxuICAgICd3ZWxjb21lJyxcclxuICAgICdhbG9oYScsXHJcbiAgICAnaGV5YScsXHJcbiAgICAnaGV5JyxcclxuICAgICdieWUnLFxyXG4gICAgJ2dvb2RieWUnLFxyXG4gICAgJ2hvbGEnLFxyXG4gICAgJ2FkaW9zJyxcclxuICAgICdjaGFvJyxcclxuICBdLFxyXG4gIHNlbGY6IFsnbXknLCAnSScsICdteXNlbGYnLCAnc2VsZicsIFwiSSd2ZVwiLCAnSXZlJywgJ21lJywgJ21pbmUnLCAnb3duJ10sXHJcbn07XHJcblxyXG4vKipcclxuICogR2VzdHVyZSBhbGxvd3MgeW91IHRvIHBsYXkgYW5pbWF0aW9ucyBvbiBkZW1hbmQgb24gb25lIG9yIG1vcmUgbGF5ZXJzIGZyb20gc2NyaXB0XHJcbiAqIG9yIHNzbWwuIElmIGdlc3R1cmUgaXMgcGxheWVkIHRoYXQgaXMgYSBRdWV1ZVN0YXRlLCB0aGUgcXVldWUgd2lsbCBhdXRvbWF0aWNhbGx5XHJcbiAqIGJlIHByb2dyZXNzZWQgYWZ0ZXIgYSBnaXZlbiBob2xkIHRpbWUgaWYgYSBsb29waW5nIHF1ZXVlZCBzdGF0ZSBpcyByZWFjaGVkLiBHZXN0dXJlXHJcbiAqIGxheWVycyBjYW4gb3B0aW9uYWxseSBiZSBhdXRvbWF0aWNhbGx5IGRpc2FibGVkIHdoZW4gbm8gZ2VzdHVyZSBhbmltYXRpb24gaXNcclxuICogaW4gcHJvZ3Jlc3MuXHJcbiAqXHJcbiAqIEBleHRlbmRzIEFic3RyYWN0SG9zdEZlYXR1cmVcclxuICogQGltcGxlbWVudHMgU1NNTFNwZWVjaG1hcmtJbnRlcmZhY2VcclxuICogQGltcGxlbWVudHMgTWFuYWdlZEFuaW1hdGlvbkxheWVySW50ZXJmYWNlXHJcbiAqL1xyXG5jbGFzcyBHZXN0dXJlRmVhdHVyZSBleHRlbmRzIEFic3RyYWN0SG9zdEZlYXR1cmUubWl4KFxyXG4gIFNTTUxTcGVlY2htYXJrSW50ZXJmYWNlLk1peGluLFxyXG4gIE1hbmFnZWRBbmltYXRpb25MYXllckludGVyZmFjZS5NaXhpblxyXG4pIHtcclxuICAvKipcclxuICAgKiBAY29uc3RydWN0b3JcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7Y29yZS9Ib3N0T2JqZWN0fSBob3N0IC0gSG9zdCBvYmplY3QgdGhhdCBvd25zIHRoZSBmZWF0dXJlLlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0PX0gb3B0aW9ucyAtIE9wdGlvbmFsIG9wdGlvbnMgZm9yIHRoZSBmZWF0dXJlLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5ob2xkVGltZSA9IDNdIC0gQW1vdW50IG9mIHRpbWUgaW4gc2Vjb25kcyB0aGF0IG11c3RcclxuICAgKiBlbGFwc2UgYmVmb3JlIGFkdmFuY2luZyBhIGdlc3R1cmUgdGhhdCdzIGEge0BsaW5rIFF1ZXVlU3RhdGV9IHdoZW4gdGhlIGN1cnJlbnRcclxuICAgKiBzdGF0ZSBpbiB0aGUgcXVldWUgaXMgc2V0IHRvIGxvb3AgaW5maW5pdGVseS5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMubWluaW11bUludGVydmFsID0gMC4yNV0gLSBUaGUgbWluaW11bSBhbW91bnQgb2YgdGltZVxyXG4gICAqIGluIHNlY29uZHMgdGhhdCBtdXN0IGVsYXBzZSBiZWZvcmUgYW5vdGhlciBnZXN0dXJlIGNhbiBiZSBwbGF5ZWQuXHJcbiAgICogQHBhcmFtICB7T2JqZWN0fSBsYXllcnMgLSBBbiBvYmplY3QgdGhhdCBtYXBzIGxheWVyIG5hbWVzIHRvIGxheWVyIG9wdGlvbnMuXHJcbiAgICogVGhlc2UgYXJlIHRoZSBsYXllcnMgdGhhdCB3aWxsIGJlIHJlZ2lzdGVyZWQgYXMgdHJhY2tlZCBnZXN0dXJlIGxheWVycy4gU2VlXHJcbiAgICoge0BsaW5rIE1hbmFnZWRBbmltYXRpb25MYXllckludGVyZmFjZSNyZWdpc3RlckxheWVyfSBmb3IgbW9yZSBpbmZvcm1hdGlvblxyXG4gICAqIG9uIGV4cGVjdGVkIGZvcm1hdCBmb3IgZWFjaCBsYXllciBvcHRpb25zIG9iamVjdC5cclxuICAgKi9cclxuICBjb25zdHJ1Y3Rvcihob3N0LCB7aG9sZFRpbWUgPSAzLCBtaW5pbXVtSW50ZXJ2YWwgPSAxLCBsYXllcnMgPSB7fX0gPSB7fSkge1xyXG4gICAgc3VwZXIoaG9zdCk7XHJcblxyXG4gICAgdGhpcy5ob2xkVGltZSA9IGhvbGRUaW1lO1xyXG4gICAgdGhpcy5taW5pbXVtSW50ZXJ2YWwgPSBtaW5pbXVtSW50ZXJ2YWw7XHJcblxyXG4gICAgLy8gUmVnaXN0ZXIgdGhlIGdlc3R1cmUgbGF5ZXJzXHJcbiAgICBPYmplY3QuZW50cmllcyhsYXllcnMpLmZvckVhY2goKFtuYW1lLCBvcHRpb25zID0ge31dKSA9PiB7XHJcbiAgICAgIHRoaXMucmVnaXN0ZXJMYXllcihuYW1lLCBvcHRpb25zKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIGEgdmFsaWQgaG9sZCB0aW1lIHZhbHVlLiBJZiBob2xkIHRpbWUgaXNuJ3QgZGVmaW5lZCBmb3IgdGhlIGFuaW1hdGlvbixcclxuICAgKiB0cnkgdG8gdXNlIHRoZSBob2xkIHRpbWUgZm9yIHRoZSBsYXllci4gSWYgdGhhdCdzIG5vdCBkZWZpbmVkLCBmYWxsIGJhY2sgdG9cclxuICAgKiB0aGUgaG9sZCB0aW1lIGZvciB0aGUgZmVhdHVyZS5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge09iamVjdH0gbGF5ZXIgLSBNYW5hZ2VkIGxheWVyIG9wdGlvbnMgb2JqZWN0LlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBhbmltYXRpb24gLSBNYW5hZ2VkIGFuaW1hdGlvbiBvcHRpb25zIG9iamVjdC5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XHJcbiAgICovXHJcbiAgX2dldEhvbGRUaW1lKGxheWVyLCBhbmltYXRpb24pIHtcclxuICAgIGNvbnN0IGxheWVySG9sZFRpbWUgPVxyXG4gICAgICBsYXllci5ob2xkVGltZSAhPT0gdW5kZWZpbmVkID8gbGF5ZXIuaG9sZFRpbWUgOiB0aGlzLmhvbGRUaW1lO1xyXG5cclxuICAgIHJldHVybiBhbmltYXRpb24uaG9sZFRpbWUgIT09IHVuZGVmaW5lZFxyXG4gICAgICA/IGFuaW1hdGlvbi5ob2xkVGltZVxyXG4gICAgICA6IGxheWVySG9sZFRpbWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gYSB2YWxpZCBtaW5pbXVtIGludGVydmFsIHZhbHVlLiBJZiBtaW5pbXVtIGludGVydmFsIGlzbid0IGRlZmluZWQgZm9yXHJcbiAgICogdGhlIGFuaW1hdGlvbiwgdHJ5IHRvIHVzZSB0aGUgbWluaW11bSBpbnRlcnZhbCBmb3IgdGhlIGxheWVyLiBJZiB0aGF0J3Mgbm90XHJcbiAgICogZGVmaW5lZCwgZmFsbCBiYWNrIHRvIHRoZSBtaW5pbXVtIGludGVydmFsIGZvciB0aGUgZmVhdHVyZS5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge09iamVjdH0gbGF5ZXIgLSBNYW5hZ2VkIGxheWVyIG9wdGlvbnMgb2JqZWN0LlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBhbmltYXRpb24gLSBNYW5hZ2VkIGFuaW1hdGlvbiBvcHRpb25zIG9iamVjdC5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XHJcbiAgICovXHJcbiAgX2dldE1pbmltdW1JbnRlcnZhbChsYXllciwgYW5pbWF0aW9uKSB7XHJcbiAgICBjb25zdCBsYXllck1pbmltdW1JbnRlcnZhbCA9XHJcbiAgICAgIGxheWVyLm1pbmltdW1JbnRlcnZhbCAhPT0gdW5kZWZpbmVkXHJcbiAgICAgICAgPyBsYXllci5taW5pbXVtSW50ZXJ2YWxcclxuICAgICAgICA6IHRoaXMubWluaW11bUludGVydmFsO1xyXG5cclxuICAgIHJldHVybiBhbmltYXRpb24ubWluaW11bUludGVydmFsICE9PSB1bmRlZmluZWRcclxuICAgICAgPyBhbmltYXRpb24ubWluaW11bUludGVydmFsXHJcbiAgICAgIDogbGF5ZXJNaW5pbXVtSW50ZXJ2YWw7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDYWxsYmFjayBmb3Ige0BsaW5rIGNvcmUvQW5pbWF0aW9uRmVhdHVyZSNwbGF5TmV4dEFuaW1hdGlvbn0gZXZlbnQuIElmIHRoZVxyXG4gICAqIGV2ZW50IGlzIGVtaXR0ZWQgZm9yIGEgbWFuYWdlZCBhbmltYXRpb24gYW5kIHRoZSBuZXcgcXVldWVkIHN0YXRlIGNhbm5vdFxyXG4gICAqIGFkdmFuY2Ugb24gaXRzIG93biwgc3RhcnQgYSBuZXcgdGltZXIgcHJvbWlzZSB0aGF0IHdpbGwgYWR2YW5jZSB0aGUgcXVldWVcclxuICAgKiBvbmNlIGl0IHJlc29sdmVzLlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gT3B0aW9ucyBvYmplY3QgcGFzc2VkIGZyb20gcGxheU5leHRBbmltYXRpb24gZXZlbnQuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVyTmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRoYXQgb3ducyB0aGUgcXVldWUgc3RhdGUuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFuaW1hdGlvbk5hbWUgLSBOYW1lIG9mIHRoZSBxdWV1ZSBzdGF0ZSBhbmltYXRpb24uXHJcbiAgICogQHBhcmFtIHtib29sZWFufSBjYW5BZHZhbmNlIC0gV2hldGhlciBvciBub3QgdGhlIGN1cnJlbnQgc3RhdGUgaW4gdGhlIHF1ZXVlXHJcbiAgICogY2FuIGFkdmFuY2Ugb24gaXRzIG93bi5cclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGlzUXVldWVFbmQgLSBXaGV0aGVyIHRoZSBjdXJyZW50IHN0YXRlIGluIHRoZSBxdWV1ZSBpcyB0aGUgbGFzdFxyXG4gICAqIHN0YXRlIGluIHRoZSBxdWV1ZS5cclxuICAgKi9cclxuICBfb25OZXh0KHtsYXllck5hbWUsIGFuaW1hdGlvbk5hbWUsIGNhbkFkdmFuY2UsIGlzUXVldWVFbmR9KSB7XHJcbiAgICAvLyBFeGl0IGlmIHRoaXMgaXNuJ3QgYSBtYW5hZ2VkIGxheWVyXHJcbiAgICBjb25zdCBsYXllciA9IHRoaXMuX21hbmFnZWRMYXllcnNbbGF5ZXJOYW1lXTtcclxuICAgIGlmIChsYXllciA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBFeGl0IGlmIGl0IGlzbid0IGEgbWFuYWdlZCBhbmltYXRpb25cclxuICAgIGNvbnN0IGFuaW1hdGlvbiA9IGxheWVyLmFuaW1hdGlvbnNbYW5pbWF0aW9uTmFtZV07XHJcbiAgICBpZiAoYW5pbWF0aW9uID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFN0YXJ0IGEgbmV3IHRpbWVyIGZvciBsb29waW5nIHN0YXRlcyB0aGF0IGFyZW4ndCB0aGUgZW5kIG9mIHRoZSBxdWV1ZVxyXG4gICAgaWYgKCFjYW5BZHZhbmNlICYmICFpc1F1ZXVlRW5kICYmIGxheWVyLmN1cnJlbnRHZXN0dXJlID09PSBhbmltYXRpb25OYW1lKSB7XHJcbiAgICAgIGNvbnN0IGhvbGRUaW1lID0gdGhpcy5fZ2V0SG9sZFRpbWUobGF5ZXIsIGFuaW1hdGlvbik7XHJcbiAgICAgIGxheWVyLmhvbGRUaW1lci5jYW5jZWwoKTtcclxuXHJcbiAgICAgIC8vIFNraXAgdG8gdGhlIG5leHQgYW5pbWF0aW9uIHJpZ2h0IGF3YXkgaWYgaG9sZCB0aW1lIGlzIHplcm9cclxuICAgICAgaWYgKGhvbGRUaW1lIDw9IDApIHtcclxuICAgICAgICB0aGlzLl9ob3N0LkFuaW1hdGlvbkZlYXR1cmUucGxheU5leHRBbmltYXRpb24obGF5ZXJOYW1lLCBhbmltYXRpb25OYW1lKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gV2FpdCBmb3IgdGhlIGdpdmVuIGhvbGQgdGltZSBiZWZvcmUgcHJvZ3Jlc3NpbmdcclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgbGF5ZXIuaG9sZFRpbWVyID0gVXRpbHMud2FpdChob2xkVGltZSwge1xyXG4gICAgICAgICAgb25GaW5pc2g6ICgpID0+IHtcclxuICAgICAgICAgICAgLy8gQWR2YW5jZSB0aGUgcXVldWUgdG8gdGhlIG5leHQgc3RhdGVcclxuICAgICAgICAgICAgaWYgKGxheWVyLmN1cnJlbnRHZXN0dXJlID09PSBhbmltYXRpb25OYW1lKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5faG9zdC5BbmltYXRpb25GZWF0dXJlLnBsYXlOZXh0QW5pbWF0aW9uKFxyXG4gICAgICAgICAgICAgICAgbGF5ZXJOYW1lLFxyXG4gICAgICAgICAgICAgICAgYW5pbWF0aW9uTmFtZVxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENhbGxiYWNrIGZvciB7QGxpbmsgY29yZS9BbmltYXRpb25GZWF0dXJlI3N0b3BBbmltYXRpb259IGV2ZW50LiBJZiB0aGVcclxuICAgKiBldmVudCBpcyBlbWl0dGVkIGZvciBhIG1hbmFnZWQgYW5pbWF0aW9uIGNhbmNlbCB0aGUgbGF5ZXIncyBzdG9yZWQgdGltZXJzLlxyXG4gICAqIElmIHRoZSBsYXllciBpcyBzZXQgdG8gYXV0by1kaXNhYmxlIHNldCBpdHMgd2VpZ2h0IHRvIDAuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBPcHRpb25zIG9iamVjdCBwYXNzZWQgZnJvbSBwbGF5TmV4dEFuaW1hdGlvbiBldmVudC5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGF5ZXJOYW1lIC0gTmFtZSBvZiB0aGUgbGF5ZXIgdGhhdCBvd25zIHRoZSBzdG9wcGVkIGFuaW1hdGlvbi5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gYW5pbWF0aW9uTmFtZSAtIE5hbWUgb2YgdGhlIGFuaW1hdGlvbiB0aGF0IHdhcyBzdG9wcGVkLlxyXG4gICAqL1xyXG4gIF9vblN0b3Aoe2xheWVyTmFtZSwgYW5pbWF0aW9uTmFtZX0pIHtcclxuICAgIC8vIE1ha2Ugc3VyZSB0aGUgbGF5ZXIgaXMgbWFuYWdlZFxyXG4gICAgY29uc3QgbGF5ZXIgPSB0aGlzLl9tYW5hZ2VkTGF5ZXJzW2xheWVyTmFtZV07XHJcbiAgICBpZiAobGF5ZXIgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gTWFrZSBzdXJlIHRoZSBhbmltYXRpb24gaXMgbWFuYWdlZFxyXG4gICAgY29uc3QgYW5pbWF0aW9uID0gbGF5ZXIuYW5pbWF0aW9uc1thbmltYXRpb25OYW1lXTtcclxuICAgIGlmIChhbmltYXRpb24gIT09IHVuZGVmaW5lZCAmJiBhbmltYXRpb25OYW1lID09PSBsYXllci5jdXJyZW50R2VzdHVyZSkge1xyXG4gICAgICBsYXllci5jdXJyZW50R2VzdHVyZSA9IG51bGw7XHJcbiAgICAgIGxheWVyLnBsYXlUaW1lciA9IG51bGw7XHJcbiAgICAgIGxheWVyLmhvbGRUaW1lci5jYW5jZWwoKTtcclxuXHJcbiAgICAgIC8vIFR1cm4gb2ZmIGxheWVyIHdlaWdodFxyXG4gICAgICBpZiAobGF5ZXIuYXV0b0Rpc2FibGUpIHtcclxuICAgICAgICB0aGlzLnNldExheWVyV2VpZ2h0cyhuYW1lID0+IG5hbWUgPT09IGxheWVyTmFtZSwgMCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIF9vbkFuaW1hdGlvbkFkZGVkKHtsYXllck5hbWUsIGFuaW1hdGlvbk5hbWV9KSB7XHJcbiAgICBjb25zdCBsYXllciA9IHRoaXMuX21hbmFnZWRMYXllcnNbbGF5ZXJOYW1lXTtcclxuXHJcbiAgICBpZiAobGF5ZXIgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBjb25zdCBhbmltYXRpb24gPSBsYXllci5hbmltYXRpb25zW2FuaW1hdGlvbk5hbWVdO1xyXG5cclxuICAgICAgLy8gUmVnaXN0ZXIgdGhlIGFuaW1hdGlvbiBhcyBhY3RpdmUgaWYgaXQgaXMgdW5tYW5hZ2VkXHJcbiAgICAgIGlmIChhbmltYXRpb24gPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHRoaXMucmVnaXN0ZXJBbmltYXRpb24obGF5ZXJOYW1lLCBhbmltYXRpb25OYW1lKTtcclxuICAgICAgfVxyXG4gICAgICAvLyBNYXJrIHRoZSBhbmltYXRpb24gYXMgYWN0aXZlIGlmIGl0IGlzIG1hbmFnZWRcclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgYW5pbWF0aW9uLmlzQWN0aXZlID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVnaXN0ZXJMYXllcihuYW1lLCBvcHRpb25zID0ge30pIHtcclxuICAgIHN1cGVyLnJlZ2lzdGVyTGF5ZXIobmFtZSwge1xyXG4gICAgICAuLi5vcHRpb25zLFxyXG4gICAgICBob2xkVGltZXI6IERlZmVycmVkLnJlc29sdmUoKSxcclxuICAgICAgcGxheVRpbWVyOiBudWxsLFxyXG4gICAgICBjdXJyZW50R2VzdHVyZTogbnVsbCxcclxuICAgIH0pO1xyXG5cclxuICAgIGlmICh0aGlzLl9tYW5hZ2VkTGF5ZXJzW25hbWVdLmlzQWN0aXZlKSB7XHJcbiAgICAgIHRoaXMuX2hvc3QuQW5pbWF0aW9uRmVhdHVyZS5nZXRBbmltYXRpb25zKG5hbWUpLmZvckVhY2goYW5pbSA9PiB7XHJcbiAgICAgICAgLy8gQXV0b21hdGljYWxseSByZWdpc3RlciBhbGwgYW5pbWF0aW9ucyBvbiB0aGUgbGF5ZXJcclxuICAgICAgICBpZiAodGhpcy5fbWFuYWdlZExheWVyc1tuYW1lXS5hbmltYXRpb25zW2FuaW1dID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgIHRoaXMucmVnaXN0ZXJBbmltYXRpb24oXHJcbiAgICAgICAgICAgIG5hbWUsXHJcbiAgICAgICAgICAgIGFuaW0sXHJcbiAgICAgICAgICAgIHRoaXMuX21hbmFnZWRMYXllcnNbbmFtZV0uYW5pbWF0aW9uc1thbmltXVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVnaXN0ZXJBbmltYXRpb24obGF5ZXJOYW1lLCBhbmltYXRpb25OYW1lLCBvcHRpb25zID0ge30pIHtcclxuICAgIC8vIFRyeSB0byBmYWxsIGJhY2sgdG8gYSBkZWZhdWx0IHdvcmQgYXJyYXlcclxuICAgIGlmICghKG9wdGlvbnMud29yZHMgaW5zdGFuY2VvZiBBcnJheSkgJiYgIShvcHRpb25zLndvcmRzIGluc3RhbmNlb2YgU2V0KSkge1xyXG4gICAgICBvcHRpb25zLndvcmRzID0gRGVmYXVsdEdlc3R1cmVXb3Jkc1thbmltYXRpb25OYW1lXSB8fCBbXTtcclxuICAgIH1cclxuXHJcbiAgICBzdXBlci5yZWdpc3RlckFuaW1hdGlvbihsYXllck5hbWUsIGFuaW1hdGlvbk5hbWUsIG9wdGlvbnMpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlIGFuIG9iamVjdCB0aGF0IG1hcHMgc3NtbCBtYXJrIHN5bnRheCByZXF1aXJlZCB0byBwbGF5IGVhY2ggZ2VzdHVyZSB0b1xyXG4gICAqIHRoZSB3b3JkcyBhcnJheSBhc3NvY2lhdGVkIHdpdGggZWFjaCBnZXN0dXJlLiBXb3JkcyBhcnJheXMgYXJlIGRlZmluZWQgYXQgd2hlblxyXG4gICAqIHRoZSBnZXN0dXJlIGFuaW1hdGlvbiBpcyByZWdpc3RlcmVkLiBHZXN0dXJlcyB3aXRob3V0IGFzc29jaWF0ZWQgd29yZHMgd2lsbFxyXG4gICAqIGJlIGV4Y2x1ZGVkIGZyb20gdGhlIHJlc3VsdC4gVGhlIHJlc3VsdGluZyBvYmplY3QgY2FuIGJlIHVzZWQgYXMgYW4gaW5wdXRcclxuICAgKiBmb3Ige0BsaW5rIFRleHRUb1NwZWVjaFV0aWxzLmF1dG9HZW5lcmF0ZVNTTUxNYXJrc30gdG8gdXBkYXRlIGEgc3BlZWNoIHN0cmluZ1xyXG4gICAqIHdpdGggdGhlIG1hcmt1cCByZXF1aXJlZCB0byBwbGF5IGdlc3R1cmVzIHRpbWVkIHdpdGggdGhlaXIgYXNzb2NpYXRlZCB3b3Jkcy5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtPYmplY3R9XHJcbiAgICovXHJcbiAgY3JlYXRlR2VzdHVyZU1hcCgpIHtcclxuICAgIGNvbnN0IGdlc3R1cmVNYXAgPSB7fTtcclxuXHJcbiAgICBPYmplY3QuZW50cmllcyh0aGlzLl9tYW5hZ2VkTGF5ZXJzKS5mb3JFYWNoKChbbGF5ZXJOYW1lLCB7YW5pbWF0aW9uc31dKSA9PiB7XHJcbiAgICAgIE9iamVjdC5lbnRyaWVzKGFuaW1hdGlvbnMpLmZvckVhY2goXHJcbiAgICAgICAgKFtcclxuICAgICAgICAgIGFuaW1hdGlvbk5hbWUsXHJcbiAgICAgICAgICB7aG9sZFRpbWUsIG1pbmltdW1JbnRlcnZhbCwgd29yZHMsIHRyYW5zaXRpb25UaW1lfSxcclxuICAgICAgICBdKSA9PiB7XHJcbiAgICAgICAgICAvLyBPbmx5IHN0b3JlIGdlc3R1cmVzIHRoYXQgaGF2ZSBhbnkgYXNzb2NpYXRlZCB3b3Jkc1xyXG4gICAgICAgICAgaWYgKHdvcmRzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0ge1xyXG4gICAgICAgICAgICAgIC4uLihob2xkVGltZSAmJiB7IGhvbGRUaW1lIH0pLFxyXG4gICAgICAgICAgICAgIC4uLihtaW5pbXVtSW50ZXJ2YWwgJiYgeyBtaW5pbXVtSW50ZXJ2YWwgfSksXHJcbiAgICAgICAgICAgICAgLi4uKHRyYW5zaXRpb25UaW1lICYmIHsgdHJhbnNpdGlvblRpbWUgfSksXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IHtcclxuICAgICAgICAgICAgICBmZWF0dXJlOiB0aGlzLmNvbnN0cnVjdG9yLm5hbWUsXHJcbiAgICAgICAgICAgICAgbWV0aG9kOiAncGxheUdlc3R1cmUnLFxyXG4gICAgICAgICAgICAgIGFyZ3M6IFtsYXllck5hbWUsIGFuaW1hdGlvbk5hbWUsIG9wdGlvbnNdLFxyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgZ2VzdHVyZU1hcFtKU09OLnN0cmluZ2lmeShrZXkpXSA9IHdvcmRzO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBnZXN0dXJlTWFwO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlIGFuIGFycmF5IHRoYXQgY29udGFpbnMgc3NtbCBtYXJrIHN5bnRheCByZXF1aXJlZCB0byBwbGF5IGVhY2ggZ2VzdHVyZVxyXG4gICAqIHRoYXQgZG9lcyBub3QgaGF2ZSBhbnkgYXNzb2NpYXRlZCB3b3Jkcy4gVGhlIHJlc3VsdGluZyBhcnJheSBjYW4gYmUgdXNlZCBhc1xyXG4gICAqIGFuIGlucHV0IGZvciB7QGxpbmsgVGV4dFRvU3BlZWNoVXRpbHMuYXV0b0dlbmVyYXRlU1NNTE1hcmtzfSBvclxyXG4gICAqIHtAbGluayBUZXh0VG9TcGVlY2hVdGlscy5hZGRNYXJrc1RvVW5tYXJrZWRTZW50ZW5jZXN9IHRvIHVwZGF0ZSBhIHNwZWVjaFxyXG4gICAqIHN0cmluZyB3aXRoIHRoZSBtYXJrdXAgcmVxdWlyZWQgdG8gcGxheSByYW5kb20gZ2VzdHVyZXMgYXQgZWFjaCB1bm1hcmtlZFxyXG4gICAqIHNlbnRlbmNlIGluIHRoZSBzdHJpbmcuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge0FycmF5LjxzdHJpbmc+PX0gbGF5ZXJzIC0gQW4gYXJyYXkgb2YgbmFtZXMgb2YgbWFuYWdlZCBsYXllcnMgdG8gZ2VuZXJhdGVcclxuICAgKiBtYXJrcyBmb3IuIElmIHVuZGVmaW5lZCwgdXNlIGFsbCBtYW5hZ2VkIGxheWVycy5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtBcnJheS48c3RyaW5nPn1cclxuICAgKi9cclxuICBjcmVhdGVHZW5lcmljR2VzdHVyZUFycmF5KGxheWVycykge1xyXG4gICAgY29uc3QgZ2VuZXJpY0dlc3R1cmVzID0gW107XHJcbiAgICBsYXllcnMgPSBsYXllcnMgfHwgT2JqZWN0LmtleXModGhpcy5fbWFuYWdlZExheWVycyk7XHJcblxyXG4gICAgbGF5ZXJzLmZvckVhY2gobGF5ZXJOYW1lID0+IHtcclxuICAgICAgY29uc3QgbGF5ZXIgPSB0aGlzLl9tYW5hZ2VkTGF5ZXJzW2xheWVyTmFtZV07XHJcblxyXG4gICAgICAvLyBNYWtlIHN1cmUgdGhlIGxheWVyIGlzIG1hbmFnZWRcclxuICAgICAgaWYgKCFsYXllcikge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgT2JqZWN0LmVudHJpZXMobGF5ZXIuYW5pbWF0aW9ucykuZm9yRWFjaChcclxuICAgICAgICAoW1xyXG4gICAgICAgICAgYW5pbWF0aW9uTmFtZSxcclxuICAgICAgICAgIHsgaG9sZFRpbWUsIG1pbmltdW1JbnRlcnZhbCwgd29yZHMsIHRyYW5zaXRpb25UaW1lIH0sXHJcbiAgICAgICAgXSkgPT4ge1xyXG4gICAgICAgICAgLy8gT25seSBzdG9yZSBnZXN0dXJlcyB0aGF0IGRvbid0IGhhdmUgYW55IGFzc29jaWF0ZWQgd29yZHNcclxuICAgICAgICAgIGlmICghd29yZHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgICAgLi4uKGhvbGRUaW1lICYmIHsgaG9sZFRpbWUgfSksXHJcbiAgICAgICAgICAgICAgLi4uKG1pbmltdW1JbnRlcnZhbCAmJiB7IG1pbmltdW1JbnRlcnZhbCB9KSxcclxuICAgICAgICAgICAgICAuLi4odHJhbnNpdGlvblRpbWUgJiYgeyB0cmFuc2l0aW9uVGltZSB9KSxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgY29uc3Qga2V5ID0gSlNPTi5zdHJpbmdpZnkoe1xyXG4gICAgICAgICAgICAgIGZlYXR1cmU6IHRoaXMuY29uc3RydWN0b3IubmFtZSxcclxuICAgICAgICAgICAgICBtZXRob2Q6ICdwbGF5R2VzdHVyZScsXHJcbiAgICAgICAgICAgICAgYXJnczogW2xheWVyTmFtZSwgYW5pbWF0aW9uTmFtZSwgb3B0aW9uc10sXHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgaWYgKCFnZW5lcmljR2VzdHVyZXMuaW5jbHVkZXMoa2V5KSkge1xyXG4gICAgICAgICAgICAgIGdlbmVyaWNHZXN0dXJlcy5wdXNoKGtleSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gZ2VuZXJpY0dlc3R1cmVzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUGxheSBhIG1hbmFnZWQgZ2VzdHVyZSBhbmltYXRpb24uXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGF5ZXJOYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGxheWVyIHRoYXQgY29udGFpbnMgdGhlIGdlc3R1cmVcclxuICAgKiBhbmltYXRpb24uXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFuaW1hdGlvbk5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgZ2VzdHVyZSBhbmltYXRpb24uXHJcbiAgICogQHBhcmFtIHtPYmplY3Q9fSBvcHRpb25zIC0gT3B0aW9uYWwgZ2VzdHVyZSBvcHRpb25zLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyPX0gb3B0aW9ucy5ob2xkVGltZSAtIFRoaXMgb3B0aW9uIG9ubHkgYXBwbGllcyB0byB7QGxpbmsgUXVldWVTdGF0ZX1cclxuICAgKiBnZXN0dXJlcy4gV2hlbiBhIFF1ZXVlU3RhdGUgZ2VzdHVyZSBwcm9ncmVzc2VzIHRvIGEgbG9vcGluZyBzdGF0ZSwgdGhpcyBvcHRpb25cclxuICAgKiBkZWZpbmVzIGhvdyBtYW55IHNlY29uZHMgc2hvdWxkIGVsYXBzZSBiZWZvcmUgbW92aW5nIHRoZSBxdWV1ZSBmb3J3YXJkLiBJZlxyXG4gICAqIHVuZGVmaW5lZCwgaXQgd2lsbCBmYWxsIGJhY2sgZmlyc3QgdG8gdGhlIGhvbGRUaW1lIGRlZmluZWQgaW4gdGhlIG9wdGlvbnMgd2hlblxyXG4gICAqIHRoZSBnZXN0dXJlIGFuaW1hdGlvbiB3YXMgcmVnaXN0ZXJlZCBhbmQgdGhlbiB0byB0aGUgaG9sZFRpbWUgZGVmaW5lZCBvbiB0aGVcclxuICAgKiBmZWF0dXJlLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyPX0gb3B0aW9ucy5taW5pbXVtSW50ZXJ2YWwgLSBUaGUgbWluaW11bSBhbW91bnQgb2YgdGltZSB0aGF0XHJcbiAgICogbXVzdCBoYXZlIGVsYXBzZWQgc2luY2UgdGhlIGxhc3QgdGltZSBhIGdlc3R1cmUgd2FzIHBsYXllZC5cclxuICAgKi9cclxuICBwbGF5R2VzdHVyZShcclxuICAgIGxheWVyTmFtZSxcclxuICAgIGFuaW1hdGlvbk5hbWUsXHJcbiAgICB7aG9sZFRpbWUsIG1pbmltdW1JbnRlcnZhbCwgdHJhbnNpdGlvblRpbWUsIGZvcmNlID0gZmFsc2V9ID0ge31cclxuICApIHtcclxuICAgIC8vIE1ha2Ugc3VyZSB0aGUgYW5pbWF0aW9uIGlzIHJlZ2lzdGVyZWRcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5fbWFuYWdlZExheWVyc1tsYXllck5hbWVdID09PSB1bmRlZmluZWQgfHxcclxuICAgICAgdGhpcy5fbWFuYWdlZExheWVyc1tsYXllck5hbWVdLmFuaW1hdGlvbnNbYW5pbWF0aW9uTmFtZV0gPT09IHVuZGVmaW5lZFxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMucmVnaXN0ZXJBbmltYXRpb24obGF5ZXJOYW1lLCBhbmltYXRpb25OYW1lLCB7XHJcbiAgICAgICAgaG9sZFRpbWUsXHJcbiAgICAgICAgbWluaW11bUludGVydmFsLFxyXG4gICAgICAgIHRyYW5zaXRpb25UaW1lLFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBsYXllciA9IHRoaXMuX21hbmFnZWRMYXllcnNbbGF5ZXJOYW1lXTtcclxuICAgIGNvbnN0IGFuaW1hdGlvbiA9IGxheWVyLmFuaW1hdGlvbnNbYW5pbWF0aW9uTmFtZV07XHJcblxyXG4gICAgLy8gTWFrZSBzdXJlIHRoZSBhbmltYXRpb24gaXMgYWN0aXZlXHJcbiAgICBpZiAoIWFuaW1hdGlvbi5pc0FjdGl2ZSkge1xyXG4gICAgICAvLyBDcmVhdGUgd2FybmluZyBtZXNzYWdlIGJhc2VkIG9uIHdoaWNoIG9iamVjdCBkb2Vzbid0IGV4aXN0IHlldFxyXG4gICAgICBjb25zdCB0eXBlTmFtZSA9IGxheWVyLmlzQWN0aXZlID8gJ2FuaW1hdGlvbicgOiAnbGF5ZXInO1xyXG4gICAgICBjb25zdCBtZXNzYWdlID0gYFNraXBwaW5nIGdlc3R1cmUgJHthbmltYXRpb25OYW1lfSBvbiBsYXllciAke2xheWVyTmFtZX0gZm9yIGhvc3QgJHt0aGlzLl9ob3N0LmlkfS4gTm8gJHt0eXBlTmFtZX0gZXhpc3RzIHdpdGggdGhpcyBuYW1lIHlldC5gO1xyXG5cclxuICAgICAgY29uc29sZS53YXJuKG1lc3NhZ2UpO1xyXG4gICAgICByZXR1cm4gRGVmZXJyZWQuY2FuY2VsKHtyZWFzb246ICdpbmFjdGl2ZScsIHZhbHVlOiB0eXBlTmFtZX0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIENoZWNrIGlmIHRoZSBnZXN0dXJlIGlzIGFscmVhZHkgcGxheWluZ1xyXG4gICAgY29uc3Qge2N1cnJlbnRHZXN0dXJlfSA9IGxheWVyO1xyXG4gICAgaWYgKGN1cnJlbnRHZXN0dXJlID09PSBhbmltYXRpb25OYW1lICYmICFmb3JjZSkge1xyXG4gICAgICBjb25zdCBtZXNzYWdlID0gYFNraXBwaW5nIGdlc3R1cmUgJHthbmltYXRpb25OYW1lfSBvbiBsYXllciAke2xheWVyTmFtZX0gZm9yIGhvc3QgJHt0aGlzLl9ob3N0LmlkfS4gVGhlIGdlc3R1cmUgaXMgYWxyZWFkeSBwbGF5aW5nLiBVc2Ugb3B0aW9ucy5mb3JjZSB0byBmb3JjZSB0aGUgZ2VzdHVyZSByZXBsYXksIHdoaWNoIG1heSByZXN1bHQgaW4gYSBoYXJkIHRyYW5zaXRpb24uYDtcclxuXHJcbiAgICAgIGNvbnNvbGUud2FybihtZXNzYWdlKTtcclxuICAgICAgcmV0dXJuIERlZmVycmVkLmNhbmNlbCh7cmVhc29uOiAncGxheWluZycsIHZhbHVlOiBhbmltYXRpb25OYW1lfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gVXBkYXRlIGFuaW1hdGlvbiBvcHRpb25zXHJcbiAgICBpZiAoaG9sZFRpbWUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBhbmltYXRpb24uaG9sZFRpbWUgPSBob2xkVGltZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAobWluaW11bUludGVydmFsICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgYW5pbWF0aW9uLm1pbmltdW1JbnRlcnZhbCA9IG1pbmltdW1JbnRlcnZhbDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIG1pbmltdW1JbnRlcnZhbCA9IHRoaXMuX2dldE1pbmltdW1JbnRlcnZhbChsYXllciwgYW5pbWF0aW9uKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBDaGVjayB0aGUgaW50ZXJ2YWxcclxuICAgIGlmICghZm9yY2UgJiYgbGF5ZXIucGxheVRpbWVyICE9PSBudWxsICYmIGxheWVyLnBsYXlUaW1lciA8IG1pbmltdW1JbnRlcnZhbCkge1xyXG4gICAgICBjb25zb2xlLndhcm4oXHJcbiAgICAgICAgYFNraXBwaW5nIGdlc3R1cmUgJHthbmltYXRpb25OYW1lfSBvbiBsYXllciAke2xheWVyTmFtZX0gZm9yIGhvc3QgJHt0aGlzLl9ob3N0LmlkfS4gTWluaW11bSBpbnRlcnZhbCAke21pbmltdW1JbnRlcnZhbH0gaGFzIG5vdCBiZWVuIG1ldC5gXHJcbiAgICAgICk7XHJcbiAgICAgIHJldHVybiBEZWZlcnJlZC5jYW5jZWwoe1xyXG4gICAgICAgIHJlYXNvbjogJ21pbmltdW1JbnRlcnZhbCcsXHJcbiAgICAgICAgdmFsdWU6IG1pbmltdW1JbnRlcnZhbCAtIGxheWVyLnBsYXlUaW1lcixcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUGxheSB0aGUgYW5pbWF0aW9uXHJcbiAgICBsYXllci5jdXJyZW50R2VzdHVyZSA9IGFuaW1hdGlvbk5hbWU7XHJcbiAgICBsYXllci5wbGF5VGltZXIgPSAwO1xyXG4gICAgbGF5ZXIuaG9sZFRpbWVyLmNhbmNlbCgpO1xyXG4gICAgaWYgKGxheWVyLmF1dG9EaXNhYmxlKSB7XHJcbiAgICAgIHRoaXMuc2V0TGF5ZXJXZWlnaHRzKG5hbWUgPT4gbmFtZSA9PT0gbGF5ZXJOYW1lLCAxKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcy5faG9zdC5BbmltYXRpb25GZWF0dXJlLnBsYXlBbmltYXRpb24oXHJcbiAgICAgIGxheWVyTmFtZSxcclxuICAgICAgYW5pbWF0aW9uTmFtZSxcclxuICAgICAgdHJhbnNpdGlvblRpbWVcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGUoZGVsdGFUaW1lKSB7XHJcbiAgICBzdXBlci51cGRhdGUoZGVsdGFUaW1lKTtcclxuXHJcbiAgICAvLyBJbmNyZW1lbnQgdGhlIHRpbWVyc1xyXG4gICAgT2JqZWN0LmVudHJpZXModGhpcy5fbWFuYWdlZExheWVycykuZm9yRWFjaCgoW25hbWUsIG9wdGlvbnNdKSA9PiB7XHJcbiAgICAgIGlmIChvcHRpb25zLmlzQWN0aXZlICYmICF0aGlzLl9ob3N0LkFuaW1hdGlvbkZlYXR1cmUuZ2V0UGF1c2VkKG5hbWUpKSB7XHJcbiAgICAgICAgb3B0aW9ucy5ob2xkVGltZXIuZXhlY3V0ZShkZWx0YVRpbWUpO1xyXG5cclxuICAgICAgICBpZiAob3B0aW9ucy5wbGF5VGltZXIgIT09IG51bGwpIHtcclxuICAgICAgICAgIG9wdGlvbnMucGxheVRpbWVyICs9IGRlbHRhVGltZSAvIDEwMDA7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGluc3RhbGxBcGkoKSB7XHJcbiAgICAvKipcclxuICAgICAqIEBpbm5lclxyXG4gICAgICogQG5hbWVzcGFjZSBHZXN0dXJlRmVhdHVyZVxyXG4gICAgICovXHJcbiAgICBjb25zdCBhcGkgPSBzdXBlci5pbnN0YWxsQXBpKCk7XHJcblxyXG4gICAgT2JqZWN0LmFzc2lnbihhcGksIHtcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBtZW1iZXJvZiBHZXN0dXJlRmVhdHVyZVxyXG4gICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICogQG1ldGhvZFxyXG4gICAgICAgKiBAc2VlIEdlc3R1cmVGZWF0dXJlI2NyZWF0ZUdlc3R1cmVNYXBcclxuICAgICAgICovXHJcbiAgICAgIGNyZWF0ZUdlc3R1cmVNYXA6IHRoaXMuY3JlYXRlR2VzdHVyZU1hcC5iaW5kKHRoaXMpLFxyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIEdlc3R1cmVGZWF0dXJlXHJcbiAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgKiBAbWV0aG9kXHJcbiAgICAgICAqIEBzZWUgR2VzdHVyZUZlYXR1cmUjY3JlYXRlR2VuZXJpY0dlc3R1cmVBcnJheVxyXG4gICAgICAgKi9cclxuICAgICAgY3JlYXRlR2VuZXJpY0dlc3R1cmVBcnJheTogdGhpcy5jcmVhdGVHZW5lcmljR2VzdHVyZUFycmF5LmJpbmQodGhpcyksXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbWVtYmVyb2YgR2VzdHVyZUZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBtZXRob2RcclxuICAgICAgICogQHNlZSBHZXN0dXJlRmVhdHVyZSNwbGF5R2VzdHVyZVxyXG4gICAgICAgKi9cclxuICAgICAgcGxheUdlc3R1cmU6IHRoaXMucGxheUdlc3R1cmUuYmluZCh0aGlzKSxcclxuICAgIH0pO1xyXG4gIH1cclxufVxyXG5cclxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoR2VzdHVyZUZlYXR1cmUsIHtcclxuICBERUZBVUxUX0xBWUVSX09QVElPTlM6IHtcclxuICAgIHZhbHVlOiB7XHJcbiAgICAgIC4uLkdlc3R1cmVGZWF0dXJlLkRFRkFVTFRfTEFZRVJfT1BUSU9OUyxcclxuICAgICAgYXV0b0Rpc2FibGU6IHRydWUsXHJcbiAgICB9LFxyXG4gICAgd3JpdGFibGU6IGZhbHNlLFxyXG4gIH0sXHJcbiAgRVZFTlRfREVQRU5ERU5DSUVTOiB7XHJcbiAgICB2YWx1ZToge1xyXG4gICAgICAuLi5HZXN0dXJlRmVhdHVyZS5FVkVOVF9ERVBFTkRFTkNJRVMsXHJcbiAgICAgIEFuaW1hdGlvbkZlYXR1cmU6IHtcclxuICAgICAgICAuLi5HZXN0dXJlRmVhdHVyZS5FVkVOVF9ERVBFTkRFTkNJRVMuQW5pbWF0aW9uRmVhdHVyZSxcclxuICAgICAgICBwbGF5TmV4dEFuaW1hdGlvbjogJ19vbk5leHQnLFxyXG4gICAgICAgIHN0b3BBbmltYXRpb246ICdfb25TdG9wJyxcclxuICAgICAgICBpbnRlcnJ1cHRBbmltYXRpb246ICdfb25TdG9wJ1xyXG4gICAgICB9LFxyXG4gICAgfSxcclxuICB9LFxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IEdlc3R1cmVGZWF0dXJlO1xyXG5leHBvcnQge0RlZmF1bHRHZXN0dXJlV29yZHN9O1xyXG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cclxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVC0wXHJcbmltcG9ydCBEZWZlcnJlZCBmcm9tICdjb3JlL0RlZmVycmVkJztcclxuaW1wb3J0IFV0aWxzIGZyb20gJ2NvcmUvVXRpbHMnO1xyXG5pbXBvcnQgTWF0aFV0aWxzIGZyb20gJ2NvcmUvTWF0aFV0aWxzJztcclxuaW1wb3J0IHtMaW5lYXJ9IGZyb20gJy4vRWFzaW5nJztcclxuXHJcbi8qKlxyXG4gKiBBIGNvbGxlY3Rpb24gb2YgdXNlZnVsIGFuaW1hdGlvbiBmdW5jdGlvbnMuXHJcbiAqXHJcbiAqIEBoaWRlY29uc3RydWN0b3JcclxuICovXHJcbmNsYXNzIEFuaW1hdGlvblV0aWxzIHtcclxuICBzdGF0aWMgbGVycChmcm9tLCB0bywgZmFjdG9yKSB7XHJcbiAgICBjb25zb2xlLndhcm4oYEFuaW1hdGlvblV0aWxzLmxlcnAgaXMgYmVpbmcgZGVwcmVjYXRlZC4gVXNlIE1hdGhVdGlscy5sZXJwIGluc3RlYWQuYCk7XHJcblxyXG4gICAgcmV0dXJuIE1hdGhVdGlscy5sZXJwKGZyb20sIHRvLCBmYWN0b3IpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2xhbXAgYSBudW1iZXIgYmV0d2VlbiAyIHZhbHVlcy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSAtIFZhbHVlIHRvIGNsYW1wLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbbWluPTBdIC0gTWludW11bSB2YWx1ZS5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gW21heD0xXSAtIE1heGltdW0gdmFsdWUuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxyXG4gICAqL1xyXG4gIHN0YXRpYyBjbGFtcCh2YWx1ZSwgbWluID0gMCwgbWF4ID0gMSkge1xyXG4gICAgY29uc29sZS53YXJuKGBBbmltYXRpb25VdGlscy5jbGFtcCBpcyBiZWluZyBkZXByZWNhdGVkLiBVc2UgTWF0aFV0aWxzLmNsYW1wIGluc3RlYWQuYCk7XHJcblxyXG4gICAgcmV0dXJuIE1hdGhVdGlscy5jbGFtcCh2YWx1ZSwgbWluLCBtYXgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIGEgZGVmZXJyZWQgcHJvbWlzZSB0aGF0IGNhbiBiZSB1c2VkIHRvIHVwZGF0ZSB0aGUgdmFsdWUgb2YgYSBudW1lcmljXHJcbiAgICogcHJvcGVydHkgb2YgdGhpcyBvYmplY3Qgb3ZlciB0aW1lLiBQYXNzIGRlbHRhIHRpbWUgaW4gbWlsbGlzZWNvbmRzIHRvIHRoZVxyXG4gICAqIGRlZmVycmVkIHByb21pc2UncyBleGVjdXRlIG1ldGhvZCBpbiBhbiB1cGRhdGUgbG9vcCB0byBhbmltYXRlIHRoZSBwcm9wZXJ0eVxyXG4gICAqIHRvd2FyZHMgdGhlIHRhcmdldCB2YWx1ZS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wZXJ0eU93bmVyIC0gT2JqZWN0IHRoYXQgY29udGFpbnMgdGhlIHByb3BlcnR5IHRvIGFuaW1hdGlvbi5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHlOYW1lIC0gTmFtZSBvZiB0aGUgcHJvcGVydHkgdG8gYW5pbWF0ZS5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gdGFyZ2V0VmFsdWUgLSBUYXJnZXQgdmFsdWUgdG8gcmVhY2guXHJcbiAgICogQHBhcmFtIHtPYmplY3Q9fSBvcHRpb25zIC0gT3B0aW9uYWwgb3B0aW9ucyBvYmplY3RcclxuICAgKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMuc2Vjb25kcz0wXSAtIE51bWJlciBvZiBzZWNvbmRzIGl0IHdpbGwgdGFrZSB0byByZWFjaFxyXG4gICAqIHRoZSB0YXJnZXQgdmFsdWUuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdGlvbnMuZWFzaW5nRm49TGluZWFyLkluT3V0XSAtIEVhc2luZyBmdW5jdGlvbiB0byB1c2UgZm9yIGFuaW1hdGlvbi5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0aW9ucy5vbkZpbmlzaF0gLSBDYWxsYmFjayB0byBleGVjdXRlIG9uY2UgdGhlIGFuaW1hdGlvbiBjb21wbGV0ZXMuXHJcbiAgICogVGhlIHRhcmdldCB2YWx1ZSBpcyBwYXNzZWQgYXMgYSBwYXJhbWV0ZXIuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9wdGlvbnMub25Qcm9ncmVzcyAtIENhbGxiYWNrIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBhbmltYXRpb25cclxuICAgKiBwcm9wZXJ0eSBpcyB1cGRhdGVkIGR1cmluZyB0aGUgYW5pbWF0aW9uLiBUaGUgcHJvcGVydHkncyB2YWx1ZSBhdCB0aGUgdGltZSBvZlxyXG4gICAqIHRoZSB1cGRhdGUgaXMgcGFzc2VkIGFzIGEgcGFyYW1ldGVyLlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvcHRpb25zLm9uQ2FuY2VsIC0gQ2FsbGJhY2sgdG8gZXhlY3V0ZSBpZiB0aGUgdXNlciBjYW5jZWxzIHRoZVxyXG4gICAqIGFuaW1hdGlvbiBiZWZvcmUgY29tcGxldGlvbi4gVGhlIGFuaW1hdGlvbiBwcm9wZXJ0eSdzIHZhbHVlIGF0IHRoZSB0aW1lIG9mXHJcbiAgICogY2FuY2VsIGlzIHBhc3NlZCBhcyBhIHBhcmFtZXRlci5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb3B0aW9ucy5vbkVycm9yIC0gQ2FsbGJhY2sgdG8gZXhlY3V0ZSBpZiB0aGUgYW5pbWF0aW9uIHN0b3BzXHJcbiAgICogYmVjYXVzZSBhbiBlcnJvciBpcyBlbmNvdW50ZXJlZC4gVGhlIGVycm9yIG1lc3NhZ2UgaXMgcGFzc2VkIGFzIGEgcGFyYW1ldGVyLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0RlZmVycmVkfSBSZXNvbHZlcyB3aXRoIHRoZSBwcm9wZXJ0eSdzIHZhbHVlIG9uY2UgaXQgcmVhY2hlcyB0aGVcclxuICAgKiB0YXJnZXQgdmFsdWUuXHJcbiAgICovXHJcbiAgc3RhdGljIGludGVycG9sYXRlUHJvcGVydHkoXHJcbiAgICBwcm9wZXJ0eU93bmVyLFxyXG4gICAgcHJvcGVydHlOYW1lLFxyXG4gICAgdGFyZ2V0VmFsdWUsXHJcbiAgICB7c2Vjb25kcyA9IDAsIGVhc2luZ0ZuLCBvbkZpbmlzaCwgb25Qcm9ncmVzcywgb25DYW5jZWwsIG9uRXJyb3J9ID0ge31cclxuICApIHtcclxuICAgIC8vIE1ha2Ugc3VyZSBwcm9wZXJ0eSBpcyBhbiBvYmplY3RcclxuICAgIGlmICghKHByb3BlcnR5T3duZXIgaW5zdGFuY2VvZiBPYmplY3QpKSB7XHJcbiAgICAgIGNvbnN0IGUgPSBuZXcgRXJyb3IoXHJcbiAgICAgICAgYENhbm5vdCBpbnRlcnBvbGF0ZSBwcm9wZXJ0eSAke3Byb3BlcnR5TmFtZX0uIFByb3BlcnR5IG93bmVyIG11c3QgYmUgYW4gb2JqZWN0LmBcclxuICAgICAgKTtcclxuXHJcbiAgICAgIGlmICh0eXBlb2Ygb25FcnJvciA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgIG9uRXJyb3IoZSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBEZWZlcnJlZC5yZWplY3QoZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gTWFrZSBzdXJlIHByb3BlcnR5IGlzIG51bWVyaWNcclxuICAgIGlmIChOdW1iZXIuaXNOYU4oTnVtYmVyKHByb3BlcnR5T3duZXJbcHJvcGVydHlOYW1lXSkpKSB7XHJcbiAgICAgIGNvbnN0IGUgPSBuZXcgRXJyb3IoXHJcbiAgICAgICAgYENhbm5vdCBpbnRlcnBvbGF0ZSBwcm9wZXJ0eSAke3Byb3BlcnR5TmFtZX0uIFByb3BlcnR5IG11c3QgYmUgbnVtZXJpYy5gXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBpZiAodHlwZW9mIG9uRXJyb3IgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICBvbkVycm9yKGUpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gRGVmZXJyZWQucmVqZWN0KGUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIE1ha2Ugc3VyZSB0aGUgdGFyZ2V0IHZhbHVlIGlzIG51bWVyaWNcclxuICAgIGlmIChOdW1iZXIuaXNOYU4oTnVtYmVyKHRhcmdldFZhbHVlKSkpIHtcclxuICAgICAgY29uc3QgZSA9IG5ldyBFcnJvcihcclxuICAgICAgICBgQ2Fubm90IGludGVycG9sYXRlIHByb3BlcnR5ICR7cHJvcGVydHlOYW1lfSB0byB2YWx1ZSAke3RhcmdldFZhbHVlfS4gVGFyZ2V0IHZhbHVlIG11c3QgYmUgbnVtZXJpYy5gXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBpZiAodHlwZW9mIG9uRXJyb3IgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICBvbkVycm9yKGUpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gRGVmZXJyZWQucmVqZWN0KGUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFJlc29sdmUgaW1tZWRpYXRlbHkgaWYgdGhlIHRhcmdldCBoYXMgYWxyZWFkeSBiZWVuIHJlYWNoZWRcclxuICAgIGNvbnN0IHN0YXJ0VmFsdWUgPSBwcm9wZXJ0eU93bmVyW3Byb3BlcnR5TmFtZV07XHJcblxyXG4gICAgaWYgKHN0YXJ0VmFsdWUgPT09IHRhcmdldFZhbHVlKSB7XHJcbiAgICAgIGlmICh0eXBlb2Ygb25GaW5pc2ggPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICBvbkZpbmlzaCh0YXJnZXRWYWx1ZSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBEZWZlcnJlZC5yZXNvbHZlKHRhcmdldFZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBEZWZhdWx0IHRvIGxpbmVhciBpbnRlcnBvbGF0aW9uXHJcbiAgICBpZiAodHlwZW9mIGVhc2luZ0ZuICE9PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgIGlmIChlYXNpbmdGbiAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgICAgYEludmFsaWQgcHJvcGVydHkgaW50ZXJwb2xhdGlvbiBlYXNpbmdGbi4gRGVmYXVsdGluZyB0byBsaW5lYXIgaW50ZXJwb2xhdGlvbi5gXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgZWFzaW5nRm4gPSBMaW5lYXIuSW5PdXQ7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgaW50ZXJwb2xhdG9yID0gVXRpbHMud2FpdChzZWNvbmRzLCB7XHJcbiAgICAgIG9uRmluaXNoOiAoKSA9PiB7XHJcbiAgICAgICAgcHJvcGVydHlPd25lcltwcm9wZXJ0eU5hbWVdID0gdGFyZ2V0VmFsdWU7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2Ygb25GaW5pc2ggPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgIG9uRmluaXNoKHRhcmdldFZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIG9uQ2FuY2VsOiAoKSA9PiB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBvbkNhbmNlbCA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgb25DYW5jZWwocHJvcGVydHlPd25lcltwcm9wZXJ0eU5hbWVdKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIG9uUHJvZ3Jlc3M6IHByb2dyZXNzID0+IHtcclxuICAgICAgICBpZiAocHJvcGVydHlPd25lcltwcm9wZXJ0eU5hbWVdICE9PSB0YXJnZXRWYWx1ZSkge1xyXG4gICAgICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBsZXJwIGZhY3RvclxyXG4gICAgICAgICAgY29uc3QgZWFzZUZhY3RvciA9IGVhc2luZ0ZuKHByb2dyZXNzKTtcclxuXHJcbiAgICAgICAgICBpZiAodHlwZW9mIGVhc2VGYWN0b3IgIT09ICdudW1iZXInKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGUgPSBuZXcgRXJyb3IoXHJcbiAgICAgICAgICAgICAgYEludmFsaWQgcHJvcGVydHkgaW50ZXJwb2xhdGlvbiBlYXNpbmdGbi4gRWFzaW5nRm4gbXVzdCByZXR1cm4gYSBudW1iZXIuYFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBpbnRlcnBvbGF0b3IucmVqZWN0KGUpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gVXBkYXRlIHRoZSB2YWx1ZVxyXG4gICAgICAgICAgcHJvcGVydHlPd25lcltwcm9wZXJ0eU5hbWVdID0gTWF0aFV0aWxzLmxlcnAoXHJcbiAgICAgICAgICAgIHN0YXJ0VmFsdWUsXHJcbiAgICAgICAgICAgIHRhcmdldFZhbHVlLFxyXG4gICAgICAgICAgICBlYXNlRmFjdG9yXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gU2lnbmFsIHByb2dyZXNzXHJcbiAgICAgICAgaWYgKHR5cGVvZiBvblByb2dyZXNzID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICBvblByb2dyZXNzKHByb3BlcnR5T3duZXJbcHJvcGVydHlOYW1lXSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBTaWduYWwgY29tcGxldGlvbiBvbmNlIHRpbWUgaXMgdXBcclxuICAgICAgICBpZiAocHJvZ3Jlc3MgPT09IDEpIHtcclxuICAgICAgICAgIHByb3BlcnR5T3duZXJbcHJvcGVydHlOYW1lXSA9IHRhcmdldFZhbHVlO1xyXG4gICAgICAgICAgaW50ZXJwb2xhdG9yLnJlc29sdmUodGFyZ2V0VmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgb25FcnJvcixcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBpbnRlcnBvbGF0b3I7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBBbmltYXRpb25VdGlscztcclxuIiwiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXHJcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxyXG5pbXBvcnQgRGVmZXJyZWQgZnJvbSAnY29yZS9EZWZlcnJlZCc7XHJcbmltcG9ydCBNYXRoVXRpbHMgZnJvbSAnY29yZS9NYXRoVXRpbHMnO1xyXG5pbXBvcnQgQW5pbWF0aW9uVXRpbHMgZnJvbSAnLi4vQW5pbWF0aW9uVXRpbHMnO1xyXG5cclxuLyoqXHJcbiAqIEJhc2UgY2xhc3MgZm9yIGEgc3RhdGUgaW4gb3VyIGFuaW1hdGlvbiBzeXN0ZW0uXHJcbiAqXHJcbiAqIEBhYnN0cmFjdFxyXG4gKi9cclxuY2xhc3MgQWJzdHJhY3RTdGF0ZSB7XHJcbiAgLyoqXHJcbiAgICogQGNvbnN0cnVjdG9yXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge09iamVjdD19IG9wdGlvbnMgLSBPcHRpb25zIGZvciB0aGUgYW5pbWF0aW9uIHN0YXRlLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nPX0gb3B0aW9ucy5uYW1lIC0gTmFtZSBmb3IgdGhlIGFuaW1hdGlvbiBzdGF0ZS4gTmFtZXMgbXVzdCBiZVxyXG4gICAqIHVuaXF1ZSBmb3IgdGhlIGNvbnRhaW5lciB0aGUgc3RhdGUgaXMgYXBwbGllZCB0byBhbmQgc2hvdWxkIGJlIHZhbGlkYXRlZCBhdFxyXG4gICAqIHRoZSBjb250YWluZXIgbGV2ZWwuIElmIG5vIG5hbWUgaXMgZ2l2ZW4gaXQgd2lsbCBkZWZhdWx0IHRvIHRoZSBjb25zdHJ1Y3RvclxyXG4gICAqIG5hbWUuXHJcbiAgICogQHBhcmFtIHt3ZWlnaHR9IFtvcHRpb25zLndlaWdodD0wXSAtIFRoZSAwLTEgYW1vdW50IG9mIGluZmx1ZW5jZSB0aGUgc3RhdGUgd2lsbCBoYXZlLlxyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMgPSB7fSkge1xyXG4gICAgdGhpcy5uYW1lID1cclxuICAgICAgb3B0aW9ucy5uYW1lICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLm5hbWUgOiB0aGlzLmNvbnN0cnVjdG9yLm5hbWU7XHJcbiAgICB0aGlzLl93ZWlnaHQgPVxyXG4gICAgICBvcHRpb25zLndlaWdodCAhPT0gdW5kZWZpbmVkXHJcbiAgICAgICAgPyBNYXRoVXRpbHMuY2xhbXAob3B0aW9ucy53ZWlnaHQsIDAsIDEpXHJcbiAgICAgICAgOiAwO1xyXG4gICAgdGhpcy5faW50ZXJuYWxXZWlnaHQgPSB0aGlzLl93ZWlnaHQ7XHJcbiAgICB0aGlzLl9wYXVzZWQgPSBmYWxzZTtcclxuXHJcbiAgICB0aGlzLl9wcm9taXNlcyA9IHtcclxuICAgICAgZmluaXNoOiBEZWZlcnJlZC5yZXNvbHZlKCksXHJcbiAgICAgIHdlaWdodDogRGVmZXJyZWQucmVzb2x2ZSgpLFxyXG4gICAgICBwbGF5OiBEZWZlcnJlZC5yZXNvbHZlKCksXHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMuX3BsYXlDYWxsYmFja3MgPSB7XHJcbiAgICAgIG9uRmluaXNoOiB1bmRlZmluZWQsXHJcbiAgICAgIG9uRXJyb3I6IHVuZGVmaW5lZCxcclxuICAgICAgb25DYW5jZWw6IHVuZGVmaW5lZCxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHdoZXRoZXIgb3Igbm90IHRoZSBzdGF0ZSBpcyBjdXJyZW50bHkgcGF1c2VkLlxyXG4gICAqXHJcbiAgICogQHR5cGUge251bWJlcn1cclxuICAgKi9cclxuICBnZXQgcGF1c2VkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3BhdXNlZDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgYW5kIHNldHMgdGhlIHVzZXIgZGVmaW5lZCB3ZWlnaHQuXHJcbiAgICpcclxuICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAqL1xyXG4gIGdldCB3ZWlnaHQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fd2VpZ2h0O1xyXG4gIH1cclxuXHJcbiAgc2V0IHdlaWdodCh3ZWlnaHQpIHtcclxuICAgIHRoaXMuX3dlaWdodCA9IE1hdGhVdGlscy5jbGFtcCh3ZWlnaHQsIDAsIDEpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyB3aGV0aGVyIG9yIG5vdCB0aGUgd2VpZ2h0IGlzIGN1cnJlbnRseSBiZWluZyBhbmltYXRlZC5cclxuICAgKlxyXG4gICAqIEByZWFkb25seVxyXG4gICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAqL1xyXG4gIGdldCB3ZWlnaHRQZW5kaW5nKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3Byb21pc2VzLndlaWdodCAmJiB0aGlzLl9wcm9taXNlcy53ZWlnaHQucGVuZGluZztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZXMgdGhlIHVzZXIgZGVmaW5lZCB3ZWlnaHQgb3ZlciB0aW1lLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IHdlaWdodCAtIFRoZSB0YXJnZXQgd2VpZ2h0IHZhbHVlLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbc2Vjb25kcz0wXSAtIFRoZSBhbW91bnQgb2YgdGltZSBpdCB3aWxsIHRha2UgdG8gcmVhY2ggdGhlXHJcbiAgICogdGFyZ2V0IHdlaWdodC5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gZWFzaW5nRm4gLSBUaGUgZWFzaW5nIGZ1bmN0aW9uIHRvIHVzZSBmb3IgaW50ZXJwb2xhdGlvbi5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtEZWZlcnJlZH1cclxuICAgKi9cclxuICBzZXRXZWlnaHQod2VpZ2h0LCBzZWNvbmRzID0gMCwgZWFzaW5nRm4pIHtcclxuICAgIHRoaXMuX3Byb21pc2VzLndlaWdodC5jYW5jZWwoKTtcclxuICAgIHdlaWdodCA9IE1hdGhVdGlscy5jbGFtcCh3ZWlnaHQpO1xyXG5cclxuICAgIHRoaXMuX3Byb21pc2VzLndlaWdodCA9IEFuaW1hdGlvblV0aWxzLmludGVycG9sYXRlUHJvcGVydHkoXHJcbiAgICAgIHRoaXMsXHJcbiAgICAgICd3ZWlnaHQnLFxyXG4gICAgICB3ZWlnaHQsXHJcbiAgICAgIHtzZWNvbmRzLCBlYXNpbmdGbn1cclxuICAgICk7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuX3Byb21pc2VzLndlaWdodDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIGludGVybmFsIHdlaWdodC5cclxuICAgKlxyXG4gICAqIEByZWFkb25seVxyXG4gICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICovXHJcbiAgZ2V0IGludGVybmFsV2VpZ2h0KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2ludGVybmFsV2VpZ2h0O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTXVsdGlwbGllcyB0aGUgdXNlciB3ZWlnaHQgYnkgYSBmYWN0b3IgdG8gZGV0ZXJtaW5lIHRoZSBpbnRlcm5hbCB3ZWlnaHQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge251bWJlcn0gZmFjdG9yIC0gMC0xIG11bHRpcGxpZXIgdG8gYXBwbHkgdG8gdGhlIHVzZXIgd2VpZ2h0LlxyXG4gICAqL1xyXG4gIHVwZGF0ZUludGVybmFsV2VpZ2h0KGZhY3Rvcikge1xyXG4gICAgdGhpcy5faW50ZXJuYWxXZWlnaHQgPSB0aGlzLl93ZWlnaHQgKiBmYWN0b3I7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGUgYW55IHZhbHVlcyB0aGF0IG5lZWQgdG8gYmUgZXZhbHVhdGVkIGV2ZXJ5IGZyYW1lLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IGRlbHRhVGltZSAtIFRpbWUgaW4gbWlsbGlzZWNvbmRzIHNpbmNlIHRoZSBsYXN0IHVwZGF0ZS5cclxuICAgKi9cclxuICB1cGRhdGUoZGVsdGFUaW1lKSB7XHJcbiAgICBpZiAoIXRoaXMuX3BhdXNlZCkge1xyXG4gICAgICBPYmplY3QudmFsdWVzKHRoaXMuX3Byb21pc2VzKS5mb3JFYWNoKHByb21pc2UgPT4ge1xyXG4gICAgICAgIHByb21pc2UuZXhlY3V0ZShkZWx0YVRpbWUpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFN0YXJ0IHBsYXliYWNrIG9mIHRoZSBzdGF0ZSBmcm9tIHRoZSBiZWdpbm5pbmcuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb25GaW5pc2ggLSBGdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIHN0YXRlIGZpbmlzaGVzLlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvbkVycm9yIC0gRnVuY3Rpb24gdG8gZXhlY3V0ZSBpZiB0aGUgc3RhdGUgZW5jb3VudGVyc1xyXG4gICAqIGFuIGVycm9yIGR1cmluZyBwbGF5YmFjay5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb25DYW5jZWwgLSBGdW5jdGlvbiB0byBleGVjdXRlIGlmIHBsYXliYWNrIGlzIGNhbmNlbGVkLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0RlZmVycmVkfVxyXG4gICAqL1xyXG4gIHBsYXkob25GaW5pc2gsIG9uRXJyb3IsIG9uQ2FuY2VsKSB7XHJcbiAgICB0aGlzLl9wYXVzZWQgPSBmYWxzZTtcclxuICAgIHRoaXMuX3BsYXlDYWxsYmFja3Mub25GaW5pc2ggPSBvbkZpbmlzaDtcclxuICAgIHRoaXMuX3BsYXlDYWxsYmFja3Mub25FcnJvciA9IG9uRXJyb3I7XHJcbiAgICB0aGlzLl9wbGF5Q2FsbGJhY2tzLm9uQ2FuY2VsID0gb25DYW5jZWw7XHJcblxyXG4gICAgdGhpcy5fcHJvbWlzZXMucGxheSA9IG5ldyBEZWZlcnJlZCh1bmRlZmluZWQsIG9uRmluaXNoLCBvbkVycm9yLCBvbkNhbmNlbCk7XHJcbiAgICB0aGlzLl9wcm9taXNlcy5maW5pc2ggPSBEZWZlcnJlZC5hbGwoW1xyXG4gICAgICB0aGlzLl9wcm9taXNlcy5wbGF5LFxyXG4gICAgICB0aGlzLl9wcm9taXNlcy53ZWlnaHQsXHJcbiAgICBdKTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5fcHJvbWlzZXMuZmluaXNoO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUGF1c2UgcGxheWJhY2sgb2YgdGhlIHN0YXRlLiBUaGlzIHByZXZlbnRzIHBlbmRpbmcgcHJvbWlzZXMgZnJvbSBiZWluZyBleGVjdXRlZC5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gICAqL1xyXG4gIHBhdXNlKCkge1xyXG4gICAgdGhpcy5fcGF1c2VkID0gdHJ1ZTtcclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVzdW1lIHBsYXliYWNrIG9mIHRoZSBzdGF0ZS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvbkZpbmlzaCAtIEZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgc3RhdGUgZmluaXNoZXMuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9uRXJyb3IgLSBGdW5jdGlvbiB0byBleGVjdXRlIGlmIHRoZSBzdGF0ZSBlbmNvdW50ZXJzXHJcbiAgICogYW4gZXJyb3IgZHVyaW5nIHBsYXliYWNrLlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvbkNhbmNlbCAtIEZ1bmN0aW9uIHRvIGV4ZWN1dGUgaWYgcGxheWJhY2sgaXMgY2FuY2VsZWQuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7RGVmZXJyZWR9XHJcbiAgICovXHJcbiAgcmVzdW1lKG9uRmluaXNoLCBvbkVycm9yLCBvbkNhbmNlbCkge1xyXG4gICAgdGhpcy5fcGF1c2VkID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKCF0aGlzLl9wcm9taXNlcy5wbGF5LnBlbmRpbmcpIHtcclxuICAgICAgdGhpcy5fcGxheUNhbGxiYWNrcy5vbkZpbmlzaCA9IG9uRmluaXNoIHx8IHRoaXMuX3BsYXlDYWxsYmFja3Mub25GaW5pc2g7XHJcbiAgICAgIHRoaXMuX3BsYXlDYWxsYmFja3Mub25FcnJvciA9IG9uRXJyb3IgfHwgdGhpcy5fcGxheUNhbGxiYWNrcy5vbkVycm9yO1xyXG4gICAgICB0aGlzLl9wbGF5Q2FsbGJhY2tzLm9uQ2FuY2VsID0gb25DYW5jZWwgfHwgdGhpcy5fcGxheUNhbGxiYWNrcy5vbkNhbmNlbDtcclxuXHJcbiAgICAgIHRoaXMuX3Byb21pc2VzLnBsYXkgPSBuZXcgRGVmZXJyZWQoXHJcbiAgICAgICAgdW5kZWZpbmVkLFxyXG4gICAgICAgIHRoaXMuX3BsYXlDYWxsYmFja3Mub25GaW5pc2gsXHJcbiAgICAgICAgdGhpcy5fcGxheUNhbGxiYWNrcy5vbkVycm9yLFxyXG4gICAgICAgIHRoaXMuX3BsYXlDYWxsYmFja3Mub25DYW5jZWxcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5fcHJvbWlzZXMuZmluaXNoID0gRGVmZXJyZWQuYWxsKFtcclxuICAgICAgICB0aGlzLl9wcm9taXNlcy5wbGF5LFxyXG4gICAgICAgIHRoaXMuX3Byb21pc2VzLndlaWdodCxcclxuICAgICAgXSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuX3Byb21pc2VzLmZpbmlzaDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENhbmNlbCBwbGF5YmFjayBvZiB0aGUgc3RhdGUgYW5kIGNhbmNlbCBhbnkgcGVuZGluZyBwcm9taXNlcy5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gICAqL1xyXG4gIGNhbmNlbCgpIHtcclxuICAgIHRoaXMuX3BhdXNlZCA9IHRydWU7XHJcblxyXG4gICAgT2JqZWN0LnZhbHVlcyh0aGlzLl9wcm9taXNlcykuZm9yRWFjaChwcm9taXNlID0+IHtcclxuICAgICAgcHJvbWlzZS5jYW5jZWwoKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU3RvcCBwbGF5YmFjayBvZiB0aGUgc3RhdGUgYW5kIHJlc29sdmUgYW55IHBlbmRpbmcgcHJvbWlzZXMuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuICAgKi9cclxuICBzdG9wKCkge1xyXG4gICAgdGhpcy5fcGF1c2VkID0gdHJ1ZTtcclxuXHJcbiAgICBPYmplY3QudmFsdWVzKHRoaXMuX3Byb21pc2VzKS5mb3JFYWNoKHByb21pc2UgPT4ge1xyXG4gICAgICBwcm9taXNlLnJlc29sdmUoKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2FuY2VsIGFueSBwZW5kaW5nIHByb21pc2VzIGFuZCByZW1vdmUgcmVmZXJlbmNlIHRvIHRoZW0uXHJcbiAgICovXHJcbiAgZGlzY2FyZCgpIHtcclxuICAgIHRoaXMuY2FuY2VsKCk7XHJcblxyXG4gICAgZGVsZXRlIHRoaXMuX3Byb21pc2VzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRm9yY2UgdGhlIGludGVybmFsIHdlaWdodCB0byAwLiBTaG91bGQgYmUgY2FsbGVkIGJlZm9yZSBzd2l0Y2hpbmcgb3IgdHJhbnNpdGlvbmluZ1xyXG4gICAqIHRvIGEgbmV3IHN0YXRlLlxyXG4gICAqL1xyXG4gIGRlYWN0aXZhdGUoKSB7XHJcbiAgICB0aGlzLnVwZGF0ZUludGVybmFsV2VpZ2h0KDApO1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgQWJzdHJhY3RTdGF0ZTtcclxuIiwiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXHJcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxyXG5pbXBvcnQgRGVmZXJyZWQgZnJvbSAnY29yZS9EZWZlcnJlZCc7XHJcbmltcG9ydCBBYnN0cmFjdFN0YXRlIGZyb20gJy4vQWJzdHJhY3RTdGF0ZSc7XHJcblxyXG4vKipcclxuICogQ2xhc3MgZm9yIHNtb290aCB0cmFuc2l0aW9uaW5nIGJldHdlZW4gc3RhdGVzIG9uIGFuIGFuaW1hdGlvbiBsYXllci5cclxuICpcclxuICogQGV4dGVuZHMgQWJzdHJhY3RTdGF0ZVxyXG4gKi9cclxuY2xhc3MgVHJhbnNpdGlvblN0YXRlIGV4dGVuZHMgQWJzdHJhY3RTdGF0ZSB7XHJcbiAgY29uc3RydWN0b3Iob3B0aW9ucyA9IHt9KSB7XHJcbiAgICBzdXBlcihvcHRpb25zKTtcclxuXHJcbiAgICB0aGlzLl90byA9IG51bGw7XHJcbiAgICB0aGlzLl9mcm9tID0gW107XHJcbiAgICB0aGlzLl93ZWlnaHRQcm9taXNlID0gRGVmZXJyZWQucmVzb2x2ZSgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGludGVybmFsV2VpZ2h0KCkge1xyXG4gICAgLy8gRmluZCB0aGUgY29tYmluZWQgd2VpZ2h0IG9mIGFsbCBzdWItc3RhdGVzXHJcbiAgICBsZXQgdG90YWxXZWlnaHQgPSAwO1xyXG5cclxuICAgIGlmICh0aGlzLl90bykge1xyXG4gICAgICB0b3RhbFdlaWdodCArPSB0aGlzLl90by53ZWlnaHQ7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fZnJvbS5mb3JFYWNoKHN0YXRlID0+IHtcclxuICAgICAgdG90YWxXZWlnaHQgKz0gc3RhdGUud2VpZ2h0O1xyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIHRvdGFsV2VpZ2h0ICogdGhpcy5faW50ZXJuYWxXZWlnaHQ7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVJbnRlcm5hbFdlaWdodChmYWN0b3IpIHtcclxuICAgIHN1cGVyLnVwZGF0ZUludGVybmFsV2VpZ2h0KGZhY3Rvcik7XHJcblxyXG4gICAgdGhpcy5fZnJvbS5mb3JFYWNoKHN0YXRlID0+IHtcclxuICAgICAgc3RhdGUudXBkYXRlSW50ZXJuYWxXZWlnaHQodGhpcy5faW50ZXJuYWxXZWlnaHQpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKHRoaXMuX3RvKSB7XHJcbiAgICAgIHRoaXMuX3RvLnVwZGF0ZUludGVybmFsV2VpZ2h0KHRoaXMuX2ludGVybmFsV2VpZ2h0KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZSBzdWItc3RhdGVzIHRoZSB0cmFuc2l0aW9uIGlzIGNvbnRyb2xsaW5nIGFuZCBzdGFydCBuZXcgd2VpZ2h0XHJcbiAgICogYW5pbWF0aW9ucyBvbiBlYWNoIG9uZS4gVGhpcyBzaG91bGQgYmUgY2FsbGVkIGVhY2ggdGltZSB0aGUgY3VycmVudCBzdGF0ZSBvZlxyXG4gICAqIGFuIGFuaW1hdGlvbiBsYXllciBnZXRzIHVwZGF0ZWQgdG8gYSBuZXcgdmFsdWUgYW5kIGEgdHJhbnNpdGlvbiB0aW1lIGdyZWF0ZXJcclxuICAgKiB0aGF0IHplcm8gaXMgc3BlY2lmaWVkLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtBcnJheS48QWJzdHJhY3RTdGF0ZT59IFtjdXJyZW50U3RhdGVzPVtdXSAtIFN0YXRlcyB3aG9zZSB3ZWlnaHQgdmFsdWVzXHJcbiAgICogd2lsbCBiZSBhbmltYXRlZCB0byAwLlxyXG4gICAqIEBwYXJhbSB7QWJzdHJhY3RTdGF0ZT19IHRhcmdldFN0YXRlIC0gU3RhdGUgd2hvc2Ugd2VpZ2h0IHdpbGwgYmUgYW5pbWF0ZWRcclxuICAgKiB0byAxLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB0cmFuc2l0aW9uVGltZSAtIEFtb3VudCBvZiB0aW1lIGl0IHdpbGwgaW4gc2Vjb25kcyB0YWtlIGZvclxyXG4gICAqIHdlaWdodCBhbmltYXRpb25zIHRvIGNvbXBsZXRlLlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBlYXNpbmdGbiAtIEVhc2luZyBmdW5jdGlvbiB0byB1c2UgZm9yIHdlaWdodCBhbmltYXRpb25zLlxyXG4gICAqIERlZmF1bHQgaXMgRWFzaW5nLkxpbmVhci5Jbk91dC5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb25Db21wbGV0ZSAtIEZ1bmN0aW9uIHRvIGV4ZWN1dGUgb25jZSBhbGwgd2VpZ2h0IGFuaW1hdGlvbnNcclxuICAgKiBjb21wbGV0ZS5cclxuICAgKi9cclxuICBjb25maWd1cmUoXHJcbiAgICBjdXJyZW50U3RhdGVzID0gW10sXHJcbiAgICB0YXJnZXRTdGF0ZSxcclxuICAgIHRyYW5zaXRpb25UaW1lLFxyXG4gICAgZWFzaW5nRm4sXHJcbiAgICBvbkNvbXBsZXRlXHJcbiAgKSB7XHJcbiAgICAvLyBEZWFjdGl2YXRlIGFueSBzdGF0ZXMgdGhhdCBhcmVuJ3QgaW4gdGhlIG5ldyBjb25maWd1cmF0aW9uXHJcbiAgICBpZiAodGhpcy5fdG8gPT09IHRhcmdldFN0YXRlIHx8IGN1cnJlbnRTdGF0ZXMuaW5jbHVkZXModGhpcy5fdG8pKSB7XHJcbiAgICAgIHRoaXMuX3RvID0gbnVsbDtcclxuICAgIH1cclxuICAgIHRoaXMuX2Zyb20gPSB0aGlzLl9mcm9tLmZpbHRlcihcclxuICAgICAgc3RhdGUgPT4gc3RhdGUgIT09IHRhcmdldFN0YXRlICYmICFjdXJyZW50U3RhdGVzLmluY2x1ZGVzKHN0YXRlKVxyXG4gICAgKTtcclxuICAgIHRoaXMuZGVhY3RpdmF0ZSgpO1xyXG5cclxuICAgIHRoaXMuX2Zyb20gPSBjdXJyZW50U3RhdGVzO1xyXG4gICAgdGhpcy5fdG8gPSB0YXJnZXRTdGF0ZTtcclxuICAgIHRoaXMucmVzZXQodHJhbnNpdGlvblRpbWUsIGVhc2luZ0ZuLCBvbkNvbXBsZXRlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFN0YXJ0IG5ldyB3ZWlnaHQgYW5pbWF0aW9ucyBzdGF0ZSB0aGUgdHJhbnNpdGlvbiBjb250cm9scy4gVGhpcyBzaG91bGQgYmUgY2FsbGVkXHJcbiAgICogaWYgYW4gYW5pbWF0aW9uIGlzIHBsYXllZCB3aXRoIGEgdHJhbnNpdGlvbiB0aW1lIGdyZWF0ZXIgdGhhbiB6ZXJvIGFuZCBhIHRyYW5zdGlvblxyXG4gICAqIHRvIHRoYXQgYW5pbWF0aW9uIHdhcyBhbHJlYWR5IGluIHByb2dyZXNzLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IHRyYW5zaXRpb25UaW1lIC0gQW1vdW50IG9mIHRpbWUgaXQgd2lsbCBpbiBzZWNvbmRzIHRha2UgZm9yXHJcbiAgICogd2VpZ2h0IGFuaW1hdGlvbnMgdG8gY29tcGxldGUuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IGVhc2luZ0ZuIC0gRWFzaW5nIGZ1bmN0aW9uIHRvIHVzZSBmb3Igd2VpZ2h0IGFuaW1hdGlvbnMuXHJcbiAgICogRGVmYXVsdCBpcyBFYXNpbmcuTGluZWFyLkluT3V0LlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvbkNvbXBsZXRlIC0gRnVuY3Rpb24gdG8gZXhlY3V0ZSBvbmNlIGFsbCB3ZWlnaHQgYW5pbWF0aW9uc1xyXG4gICAqIGNvbXBsZXRlLlxyXG4gICAqL1xyXG4gIHJlc2V0KHRyYW5zaXRpb25UaW1lLCBlYXNpbmdGbiwgb25Db21wbGV0ZSkge1xyXG4gICAgLy8gU3RvcCBhbnkgcGVuZGluZyBwcm9taXNlc1xyXG4gICAgdGhpcy5fd2VpZ2h0UHJvbWlzZS5jYW5jZWwoKTtcclxuXHJcbiAgICAvLyBTdGFydCB0d2VlbmluZyB3ZWlnaHQgdG8gMCBmb3IgdGhlIGN1cnJlbnQgc3RhdGVzXHJcbiAgICBjb25zdCB3ZWlnaHRQcm9taXNlcyA9IHRoaXMuX2Zyb20ubWFwKHN0YXRlID0+XHJcbiAgICAgIHN0YXRlLnNldFdlaWdodCgwLCB0cmFuc2l0aW9uVGltZSwgZWFzaW5nRm4pXHJcbiAgICApO1xyXG5cclxuICAgIC8vIFN0YXJ0IHR3ZWVuaW5nIHdlaWdodCB0byAxIGZvciB0aGUgdGFyZ2V0IHN0YXRlXHJcbiAgICBpZiAodGhpcy5fdG8pIHtcclxuICAgICAgd2VpZ2h0UHJvbWlzZXMucHVzaCh0aGlzLl90by5zZXRXZWlnaHQoMSwgdHJhbnNpdGlvblRpbWUsIGVhc2luZ0ZuKSk7XHJcbiAgICAgIHRoaXMubmFtZSA9IHRoaXMuX3RvLm5hbWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLm5hbWUgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX3dlaWdodFByb21pc2UgPSBEZWZlcnJlZC5hbGwod2VpZ2h0UHJvbWlzZXMsICgpID0+IHtcclxuICAgICAgdGhpcy5fZnJvbS5mb3JFYWNoKHN0YXRlID0+IHtcclxuICAgICAgICBzdGF0ZS5jYW5jZWwoKTtcclxuICAgICAgICBzdGF0ZS5kZWFjdGl2YXRlKCk7XHJcbiAgICAgIH0pO1xyXG4gICAgICBpZiAodHlwZW9mIG9uQ29tcGxldGUgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICBvbkNvbXBsZXRlKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcGxheShvbkZpbmlzaCwgb25FcnJvciwgb25DYW5jZWwsIG9uTmV4dCkge1xyXG4gICAgdGhpcy5fcGF1c2VkID0gZmFsc2U7XHJcbiAgICB0aGlzLl9wbGF5Q2FsbGJhY2tzLm9uRmluaXNoID0gb25GaW5pc2g7XHJcbiAgICB0aGlzLl9wbGF5Q2FsbGJhY2tzLm9uRXJyb3IgPSBvbkVycm9yO1xyXG4gICAgdGhpcy5fcGxheUNhbGxiYWNrcy5vbkNhbmNlbCA9IG9uQ2FuY2VsO1xyXG5cclxuICAgIGNvbnN0IHByb21pc2VzID0gW3RoaXMuX3dlaWdodFByb21pc2VdO1xyXG5cclxuICAgIHRoaXMuX2Zyb20uZm9yRWFjaChzdGF0ZSA9PiB7XHJcbiAgICAgIHN0YXRlLnJlc3VtZSgpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKHRoaXMuX3RvKSB7XHJcbiAgICAgIHRoaXMuX3Byb21pc2VzLnBsYXkgPSB0aGlzLl90by5wbGF5KFxyXG4gICAgICAgIHVuZGVmaW5lZCxcclxuICAgICAgICB1bmRlZmluZWQsXHJcbiAgICAgICAgdW5kZWZpbmVkLFxyXG4gICAgICAgIG9uTmV4dFxyXG4gICAgICApO1xyXG4gICAgICBwcm9taXNlcy5wdXNoKHRoaXMuX3Byb21pc2VzLnBsYXkpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX3Byb21pc2VzLmZpbmlzaCA9IERlZmVycmVkLmFsbChwcm9taXNlcywgb25GaW5pc2gsIG9uRXJyb3IsIG9uQ2FuY2VsKTtcclxuICAgIHJldHVybiB0aGlzLl9wcm9taXNlcy5maW5pc2g7XHJcbiAgfVxyXG5cclxuICBwYXVzZSgpIHtcclxuICAgIHRoaXMuX2Zyb20uZm9yRWFjaChzdGF0ZSA9PiB7XHJcbiAgICAgIHN0YXRlLnBhdXNlKCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAodGhpcy5fdG8pIHtcclxuICAgICAgdGhpcy5fdG8ucGF1c2UoKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gc3VwZXIucGF1c2UoKTtcclxuICB9XHJcblxyXG4gIHJlc3VtZShvbkZpbmlzaCwgb25FcnJvciwgb25DYW5jZWwsIG9uTmV4dCkge1xyXG4gICAgdGhpcy5fcGF1c2VkID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKCF0aGlzLl9wcm9taXNlcy5wbGF5LnBlbmRpbmcpIHtcclxuICAgICAgdGhpcy5fcGxheUNhbGxiYWNrcy5vbkZpbmlzaCA9IG9uRmluaXNoIHx8IHRoaXMuX3BsYXlDYWxsYmFja3Mub25GaW5pc2g7XHJcbiAgICAgIHRoaXMuX3BsYXlDYWxsYmFja3Mub25FcnJvciA9IG9uRXJyb3IgfHwgdGhpcy5fcGxheUNhbGxiYWNrcy5vbkVycm9yO1xyXG4gICAgICB0aGlzLl9wbGF5Q2FsbGJhY2tzLm9uQ2FuY2VsID0gb25DYW5jZWwgfHwgdGhpcy5fcGxheUNhbGxiYWNrcy5vbkNhbmNlbDtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBwcm9taXNlcyA9IFt0aGlzLl93ZWlnaHRQcm9taXNlXTtcclxuXHJcbiAgICB0aGlzLl9mcm9tLmZvckVhY2goc3RhdGUgPT4ge1xyXG4gICAgICBzdGF0ZS5yZXN1bWUoKTtcclxuICAgIH0pO1xyXG5cclxuICAgIGlmICh0aGlzLl90bykge1xyXG4gICAgICB0aGlzLl9wcm9taXNlcy5wbGF5ID0gdGhpcy5fdG8ucmVzdW1lKFxyXG4gICAgICAgIHVuZGVmaW5lZCxcclxuICAgICAgICB1bmRlZmluZWQsXHJcbiAgICAgICAgdW5kZWZpbmVkLFxyXG4gICAgICAgIG9uTmV4dFxyXG4gICAgICApO1xyXG4gICAgICBwcm9taXNlcy5wdXNoKHRoaXMuX3Byb21pc2VzLnBsYXkpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX3Byb21pc2VzLmZpbmlzaCA9IERlZmVycmVkLmFsbChcclxuICAgICAgcHJvbWlzZXMsXHJcbiAgICAgIHRoaXMuX3BsYXlDYWxsYmFja3Mub25GaW5pc2gsXHJcbiAgICAgIHRoaXMuX3BsYXlDYWxsYmFja3Mub25FcnJvcixcclxuICAgICAgdGhpcy5fcGxheUNhbGxiYWNrcy5vbkNhbmNlbFxyXG4gICAgKTtcclxuICAgIHJldHVybiB0aGlzLl9wcm9taXNlcy5maW5pc2g7XHJcbiAgfVxyXG5cclxuICBjYW5jZWwoKSB7XHJcbiAgICB0aGlzLl9mcm9tLmZvckVhY2goc3RhdGUgPT4ge1xyXG4gICAgICBzdGF0ZS5wYXVzZSgpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKHRoaXMuX3RvKSB7XHJcbiAgICAgIHRoaXMuX3RvLmNhbmNlbCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX3dlaWdodFByb21pc2UuY2FuY2VsKCk7XHJcblxyXG4gICAgcmV0dXJuIHN1cGVyLmNhbmNlbCgpO1xyXG4gIH1cclxuXHJcbiAgc3RvcCgpIHtcclxuICAgIHRoaXMuX2Zyb20uZm9yRWFjaChzdGF0ZSA9PiB7XHJcbiAgICAgIHN0YXRlLnBhdXNlKCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAodGhpcy5fdG8pIHtcclxuICAgICAgdGhpcy5fdG8uc3RvcCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBzdXBlci5zdG9wKCk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGUoZGVsdGFUaW1lKSB7XHJcbiAgICBzdXBlci51cGRhdGUoZGVsdGFUaW1lKTtcclxuXHJcbiAgICB0aGlzLl9mcm9tLmZvckVhY2goc3RhdGUgPT4ge1xyXG4gICAgICBzdGF0ZS51cGRhdGUoZGVsdGFUaW1lKTtcclxuICAgIH0pO1xyXG5cclxuICAgIGlmICh0aGlzLl90bykge1xyXG4gICAgICB0aGlzLl90by51cGRhdGUoZGVsdGFUaW1lKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGRpc2NhcmQoKSB7XHJcbiAgICBzdXBlci5kaXNjYXJkKCk7XHJcblxyXG4gICAgdGhpcy5fd2VpZ2h0UHJvbWlzZS5jYW5jZWwoKTtcclxuICAgIGRlbGV0ZSB0aGlzLl93ZWlnaHRQcm9taXNlO1xyXG4gICAgdGhpcy5fdG8gPSBudWxsO1xyXG4gICAgdGhpcy5fZnJvbS5sZW5ndGggPSAwO1xyXG4gIH1cclxuXHJcbiAgZGVhY3RpdmF0ZSgpIHtcclxuICAgIGlmICh0aGlzLl90bykge1xyXG4gICAgICB0aGlzLl90by5kZWFjdGl2YXRlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fZnJvbS5mb3JFYWNoKHN0YXRlID0+IHtcclxuICAgICAgc3RhdGUuZGVhY3RpdmF0ZSgpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBUcmFuc2l0aW9uU3RhdGU7XHJcbiIsIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxyXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTBcclxuLyogZXNsaW50LWRpc2FibGUgbWF4LWNsYXNzZXMtcGVyLWZpbGUgKi9cclxuLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cclxuLyogZXNsaW50LWRpc2FibGUgbm8tZW1wdHktZnVuY3Rpb24gKi9cclxuLyogZXNsaW50LWRpc2FibGUgZ2V0dGVyLXJldHVybiAqL1xyXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11c2VsZXNzLWNvbnN0cnVjdG9yICovXHJcbmltcG9ydCBUcmFuc2l0aW9uU3RhdGUgZnJvbSAnLi9zdGF0ZS9UcmFuc2l0aW9uU3RhdGUnO1xyXG5pbXBvcnQgRGVmZXJyZWQgZnJvbSAnLi4vRGVmZXJyZWQnO1xyXG5cclxuLyoqXHJcbiAqIENsYXNzIGZhY3RvcnkgaW50ZXJmYWNlIGZvciBjb250cm9sbGluZyBwbGF5YmFjayBvZiBhIGNvbGxlY3Rpb24gb2YgYW5pbWF0aW9ucy5cclxuICogT25lIGFuaW1hdGlvbiBjYW4gYmUgcGxheWVkIGF0IGFueSBnaXZlbiB0aW1lLCBjcm9zc2ZhZGluZyBiZXR3ZWVuIGFuaW1hdGlvbnNcclxuICogd2lsbCByZXN1bHQgaW4gcGxheWluZyBhIHtAbGluayBUcmFuc2l0aW9uU3RhdGV9LlxyXG4gKlxyXG4gKiBAaW50ZXJmYWNlXHJcbiAqL1xyXG5jbGFzcyBBbmltYXRpb25QbGF5ZXJJbnRlcmZhY2Uge1xyXG4gIC8qKlxyXG4gICAqIEdldHMgd2hldGhlciBvciBub3QgdGhlIHBsYXllciBpcyB1cGRhdGluZyBzdGF0ZXMuXHJcbiAgICpcclxuICAgKiBAcmVhZG9ubHlcclxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgKi9cclxuICBnZXQgcGF1c2VkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3BhdXNlZDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgYW5kIHNldHMgdGhlIGRlZmF1bHQgbnVtYmVyIG9mIHNlY29uZHMgaXQgdGFrZXMgdG8gdHJhbnNpdGlvbiB0byBhIG5ld1xyXG4gICAqIGFuaW1hdGlvbi5cclxuICAgKlxyXG4gICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICovXHJcbiAgZ2V0IHRyYW5zaXRpb25UaW1lKCkge31cclxuXHJcbiAgc2V0IHRyYW5zaXRpb25UaW1lKHNlY29uZHMpIHt9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgYW5kIHNldHMgdGhlIGRlZmF1bHQgZWFzaW5nIGZ1bmN0aW9uIHRvIHVzZSB3aGVuIHRyYW5zaXRpb25pbmcgYW5kXHJcbiAgICogc2V0dGluZyB3ZWlnaHRzLlxyXG4gICAqXHJcbiAgICogQHR5cGUge0Z1bmN0aW9ufVxyXG4gICAqL1xyXG4gIGdldCBlYXNpbmdGbigpIHt9XHJcblxyXG4gIHNldCBlYXNpbmdGbihmbikge31cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgc3RhdGUgdGhlIGxheWVyIGlzIGN1cnJlbnRseSBpbiBjb250cm9sIG9mLlxyXG4gICAqXHJcbiAgICogQHJlYWRvbmx5XHJcbiAgICogQHR5cGUge0Fic3RyYWN0U3RhdGV9XHJcbiAgICovXHJcbiAgZ2V0IGN1cnJlbnRTdGF0ZSgpIHt9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIG5hbWUgb2YgdGhlIHN0YXRlIHRoZSBsYXllciBpcyBjdXJyZW50bHkgaW4gY29udHJvbCBvZi5cclxuICAgKlxyXG4gICAqIEByZWFkb25seVxyXG4gICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICovXHJcbiAgZ2V0IGN1cnJlbnRBbmltYXRpb24oKSB7fVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHdoZXRoZXIgb3Igbm90IHRoZSBsYXllciBpcyBjdXJyZW50bHkgdHJhbnNpdGlvbmluZyB0byBhIG5ldyBhbmltYXRpb24uXHJcbiAgICpcclxuICAgKiBAcmVhZG9ubHlcclxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgKi9cclxuICBnZXQgaXNUcmFuc2l0aW9uaW5nKCkge31cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlIHRoZSBsYXllcidzIGN1cnJlbnQgc3RhdGUgdG8gYSBuZXcgdmFsdWUuIElmIHRyYW5zaXRpb25UaW1lIGlzIGRlZmluZWRcclxuICAgKiBhbmQgZ3JlYXRlciB0aGFuIHplcm8sIHBlcmZvcm0gYSBzbW9vdGggYmxlbmQgYmV0d2VlbiBhbnkgc3RhdGVzIHRoYXQgY3VycmVudGx5XHJcbiAgICogaGF2ZSBub24temVybyB3ZWlnaHQgdmFsdWVzIGFuZCB0aGUgbmV3IHN0YXRlLlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7KHN0cmluZ3xudWxsKX0gbmFtZSAtIE5hbWUgb2YgdGhlIHN0YXRlIHRvIHRyYW5zaXRpb24gdG8uXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHBsYXlNZXRob2QgLSBOYW1lIG9mIHRoZSBvcGVyYXRpb24gYmVpbmcgcHJlcGFyZWQgZm9yLCB0byBiZVxyXG4gICAqIHVzZWQgaW4gZXJyb3IgbWVzc2FnaW5nLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyPX0gdHJhbnNpdGlvblRpbWUgLSBBbW91bnQgb2YgdGltZSBpbiBzZWNvbmRzIGl0IHdpbGwgdGFrZSB0b1xyXG4gICAqIHN3aXRjaCB0byB0aGUgbmV3IHN0YXRlLlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBlYXNpbmdGbiAtIEVhc2luZyBmdW5jdGlvbiB0byB1c2Ugd2hlbiB0cmFuc2l0aW9uaW5nIHRvIGFcclxuICAgKiBuZXcgc3RhdGUgb3ZlciB0aW1lLlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvbkVycm9yIC0gRnVuY3Rpb24gdG8gZXhlY3V0ZSBpZiBhbiBlcnJvciBpcyBlbmNvdW50ZXJlZC5cclxuICAgKi9cclxuICBfcHJlcGFyZUN1cnJlbnRTdGF0ZShuYW1lLCBwbGF5TWV0aG9kLCB0cmFuc2l0aW9uVGltZSwgZWFzaW5nRm4sIG9uRXJyb3IpIHt9XHJcblxyXG4gIC8qKlxyXG4gICAqIFN0YXJ0IHBsYXliYWNrIGFuIGFuaW1hdGlvbiBmcm9tIHRoZSBiZWdpbm5pbmcuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIE5hbWUgb2YgdGhlIGFuaW1hdGlvbiB0byBwbGF5LlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyPX0gdHJhbnNpdGlvblRpbWUgLSBBbW91bnQgb2YgdGltZSBpdCB3aWxsIHRha2UgYmVmb3JlIHRoZVxyXG4gICAqIG5ldyBzdGF0ZSBoYXMgZnVsbCBpbmZsdWVuY2UgZm9yIHRoZSBsYXllci5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gZWFzaW5nRm4gLSBFYXNpbmcgZnVuY3Rpb24gdG8gdXNlIGZvciBibGVuZGluZyBpZiB0cmFuc2l0aW9uVGltZVxyXG4gICAqIGlzIGdyZWF0ZXIgdGhhbiB6ZXJvLlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvbkZpbmlzaCAtIEZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgYW5pbWF0aW9uIGZpbmlzaGVzLlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvbkVycm9yIC0gRnVuY3Rpb24gdG8gZXhlY3V0ZSBpZiB0aGUgYW5pbWF0aW9uIGVuY291bnRlcnNcclxuICAgKiBhbiBlcnJvciBkdXJpbmcgcGxheWJhY2suXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9uQ2FuY2VsIC0gRnVuY3Rpb24gdG8gZXhlY3V0ZSBpZiBwbGF5YmFjayBpcyBjYW5jZWxlZC5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb25OZXh0IC0gRnVuY3Rpb24gdG8gZXhlY3V0ZSBpZiBhbiBhbmltYXRpb24gcXVldWUgaXNcclxuICAgKiBwbGF5ZWQgYW5kIGl0IGFkdmFuY2VzIHRvIHRoZSBuZXh0IGFuaW1hdGlvbi5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtEZWZlcnJlZH1cclxuICAgKi9cclxuICBwbGF5QW5pbWF0aW9uKFxyXG4gICAgbmFtZSxcclxuICAgIHRyYW5zaXRpb25UaW1lLFxyXG4gICAgZWFzaW5nRm4sXHJcbiAgICBvbkZpbmlzaCxcclxuICAgIG9uRXJyb3IsXHJcbiAgICBvbkNhbmNlbCxcclxuICAgIG9uTmV4dFxyXG4gICkge31cclxuXHJcbiAgLyoqXHJcbiAgICogQ2FuY2VsIHBsYXliYWNrIG9mIHRoZSBjdXJyZW50IGFuaW1hdGlvbi5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gICAqL1xyXG4gIGNhbmNlbEFuaW1hdGlvbigpIHt9XHJcblxyXG4gIC8qKlxyXG4gICAqIFBhdXNlIHBsYXliYWNrIG9mIHRoZSBjdXJyZW50IGFuaW1hdGlvbi5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gICAqL1xyXG4gIHBhdXNlQW5pbWF0aW9uKCkge31cclxuXHJcbiAgLyoqXHJcbiAgICogUmVzdW1lIHBsYXliYWNrIG9mIGFuIGFuaW1hdGlvbi5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nPX0gbmFtZSAtIE5hbWUgb2YgdGhlIGFuaW1hdGlvbiB0byByZXN1bWUgcGxheWJhY2sgZm9yLiBEZWZhdWx0XHJcbiAgICogaXMgdGhlIGxheWVyJ3MgY3VycmVudCBhbmltYXRpb24gbmFtZS5cclxuICAgKiBAcGFyYW0ge251bWJlcj19IHRyYW5zaXRpb25UaW1lIC0gQW1vdW50IG9mIHRpbWUgaXQgd2lsbCB0YWtlIGJlZm9yZSB0aGVcclxuICAgKiBuZXcgc3RhdGUgaGFzIGZ1bGwgaW5mbHVlbmNlIGZvciB0aGUgbGF5ZXIuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9uRmluaXNoIC0gRnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBzdGF0ZSBmaW5pc2hlcy5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb25FcnJvciAtIEZ1bmN0aW9uIHRvIGV4ZWN1dGUgaWYgdGhlIHN0YXRlIGVuY291bnRlcnNcclxuICAgKiBhbiBlcnJvciBkdXJpbmcgcGxheWJhY2suXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9uQ2FuY2VsIC0gRnVuY3Rpb24gdG8gZXhlY3V0ZSBpZiBwbGF5YmFjayBpcyBjYW5jZWxlZC5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb25OZXh0IC0gRnVuY3Rpb24gdG8gZXhlY3V0ZSBpZiBhbiBhbmltYXRpb24gcXVldWUgaXNcclxuICAgKiBwbGF5ZWQgYW5kIGl0IGFkdmFuY2VzIHRvIHRoZSBuZXh0IGFuaW1hdGlvbi5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtEZWZlcnJlZH1cclxuICAgKi9cclxuICByZXN1bWVBbmltYXRpb24oXHJcbiAgICBuYW1lLFxyXG4gICAgdHJhbnNpdGlvblRpbWUsXHJcbiAgICBlYXNpbmdGbixcclxuICAgIG9uRmluaXNoLFxyXG4gICAgb25FcnJvcixcclxuICAgIG9uQ2FuY2VsLFxyXG4gICAgb25OZXh0XHJcbiAgKSB7fVxyXG5cclxuICAvKipcclxuICAgKiBTdG9wIHBsYXliYWNrIG9mIHRoZSBjdXJyZW50IGFuaW1hdGlvbi5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gICAqL1xyXG4gIHN0b3BBbmltYXRpb24oKSB7fVxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGUgdGhlIGN1cnJlbnQgYW5pbWF0aW9uLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IGRlbHRhVGltZSAtIFRpbWUgaW4gbWlsbGlzZWNvbmRzIHNpbmNlIHRoZSBsYXN0IHVwZGF0ZS5cclxuICAgKi9cclxuICB1cGRhdGUoZGVsdGFUaW1lKSB7fVxyXG5cclxuICAvKipcclxuICAgKiBEaXNjYXJkIHRoZSB0cmFuc2l0aW9uIHN0YXRlLlxyXG4gICAqL1xyXG4gIGRpc2NhcmQoKSB7fVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGVzIGEgY2xhc3MgdGhhdCBpbXBsZW1lbnRzIHtAbGluayBBbmltYXRpb25QbGF5ZXJJbnRlcmZhY2V9IGFuZCBleHRlbmRzXHJcbiAgICogYSBzcGVjaWZpZWQgYmFzZSBjbGFzcy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7Q2xhc3N9IFtCYXNlQ2xhc3MgPSBjbGFzc3t9XSAtIFRoZSBjbGFzcyB0byBleHRlbmQuXHJcbiAgICpcclxuICAgKiBAcmV0dXJuIHtDbGFzc30gQSBjbGFzcyB0aGF0IGV4dGVuZHMgYEJhc2VDbGFzc2AgYW5kIGltcGxlbWVudHMge0BsaW5rIEFuaW1hdGlvblBsYXllckludGVyZmFjZX0uXHJcbiAgICovXHJcbiAgc3RhdGljIE1peGluKEJhc2VDbGFzcyA9IGNsYXNzIHt9KSB7XHJcbiAgICBjb25zdCBBbmltYXRpb25QbGF5ZXJNaXhpbiA9IGNsYXNzIGV4dGVuZHMgQmFzZUNsYXNzIHtcclxuICAgICAgY29uc3RydWN0b3Iob3B0aW9ucyA9IHt9LCAuLi5hcmdzKSB7XHJcbiAgICAgICAgc3VwZXIob3B0aW9ucywgLi4uYXJncyk7XHJcblxyXG4gICAgICAgIHRoaXMuX3RyYW5zaXRpb25TdGF0ZSA9IG5ldyBUcmFuc2l0aW9uU3RhdGUoKTtcclxuICAgICAgICB0aGlzLl9zdGF0ZXMgPSB0aGlzLl9zdGF0ZXMgIT09IHVuZGVmaW5lZCA/IHRoaXMuX3N0YXRlcyA6IG5ldyBNYXAoKTtcclxuICAgICAgICB0aGlzLl9jdXJyZW50U3RhdGUgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuX3BhdXNlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLl90cmFuc2l0aW9uVGltZSA9XHJcbiAgICAgICAgICBOdW1iZXIob3B0aW9ucy50cmFuc2l0aW9uVGltZSkgPj0gMFxyXG4gICAgICAgICAgICA/IE51bWJlcihvcHRpb25zLnRyYW5zaXRpb25UaW1lKVxyXG4gICAgICAgICAgICA6IDA7XHJcblxyXG4gICAgICAgIHRoaXMuX2Vhc2luZ0ZuID1cclxuICAgICAgICAgIHR5cGVvZiBvcHRpb25zLmVhc2luZ0ZuID09PSAnZnVuY3Rpb24nID8gb3B0aW9ucy5lYXNpbmdGbiA6IHVuZGVmaW5lZDtcclxuICAgICAgfVxyXG5cclxuICAgICAgZ2V0IHBhdXNlZCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcGF1c2VkO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBnZXQgdHJhbnNpdGlvblRpbWUoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RyYW5zaXRpb25UaW1lO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBzZXQgdHJhbnNpdGlvblRpbWUoc2Vjb25kcykge1xyXG4gICAgICAgIHNlY29uZHMgPSBOdW1iZXIoc2Vjb25kcyk7XHJcblxyXG4gICAgICAgIGlmICghKHNlY29uZHMgPj0gMCkpIHtcclxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICAgICAgYENhbm5vdCBzZXQgdHJhbnNpdGlvbiB0aW1lIGZvciAke3RoaXMuY29uc3RydWN0b3IubmFtZX0gdG8gJHtzZWNvbmRzfS4gU2Vjb25kcyBtdXN0IGJlIGEgbnVtZXJpYyB2YWx1ZSBncmVhdGhlciB0aGFuIG9yIGVxdWFsIHRvIHplcm8uYFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3RyYW5zaXRpb25UaW1lID0gc2Vjb25kcztcclxuICAgICAgfVxyXG5cclxuICAgICAgZ2V0IGVhc2luZ0ZuKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9lYXNpbmdGbjtcclxuICAgICAgfVxyXG5cclxuICAgICAgc2V0IGVhc2luZ0ZuKGZuKSB7XHJcbiAgICAgICAgdGhpcy5fZWFzaW5nRm4gPSBmbjtcclxuICAgICAgfVxyXG5cclxuICAgICAgZ2V0IGN1cnJlbnRTdGF0ZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fY3VycmVudFN0YXRlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBnZXQgY3VycmVudEFuaW1hdGlvbigpIHtcclxuICAgICAgICBpZiAodGhpcy5fY3VycmVudFN0YXRlKSB7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5fY3VycmVudFN0YXRlLm5hbWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgfVxyXG5cclxuICAgICAgZ2V0IGlzVHJhbnNpdGlvbmluZygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fY3VycmVudFN0YXRlID09PSB0aGlzLl90cmFuc2l0aW9uU3RhdGU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIF9wcmVwYXJlQ3VycmVudFN0YXRlKFxyXG4gICAgICAgIG5hbWUsXHJcbiAgICAgICAgcGxheU1ldGhvZCxcclxuICAgICAgICB0cmFuc2l0aW9uVGltZSxcclxuICAgICAgICBlYXNpbmdGbixcclxuICAgICAgICBvbkVycm9yXHJcbiAgICAgICkge1xyXG4gICAgICAgIGlmIChuYW1lICE9PSBudWxsICYmICF0aGlzLl9zdGF0ZXMuaGFzKG5hbWUpKSB7XHJcbiAgICAgICAgICBjb25zdCBlID0gbmV3IEVycm9yKFxyXG4gICAgICAgICAgICBgQ2Fubm90ICR7cGxheU1ldGhvZH0gYW5pbWF0aW9uICR7bmFtZX0uIE5vIGFuaW1hdGlvbiBleGlzdHMgd2l0aCB0aGlzIG5hbWUuYFxyXG4gICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICBpZiAodHlwZW9mIG9uRXJyb3IgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgb25FcnJvcihlKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICB0aHJvdyBlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgdGFyZ2V0U3RhdGUgPSBuYW1lICE9PSBudWxsID8gdGhpcy5fc3RhdGVzLmdldChuYW1lKSA6IG51bGw7XHJcblxyXG4gICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgbmV3IHN0YXRlIGlzbid0IGFscmVhZHkgcGxheWluZ1xyXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRBbmltYXRpb24gIT09IG5hbWUpIHtcclxuICAgICAgICAgIC8vIFN3aXRjaCB0byB0aGUgbmV3IHN0YXRlIGltbWVkaWF0ZWx5XHJcbiAgICAgICAgICBpZiAodHJhbnNpdGlvblRpbWUgPD0gMCkge1xyXG4gICAgICAgICAgICAvLyBDYW5jZWwgdGhlIGN1cnJlbnQgc3RhdGUgYW5kIHNldCBpdHMgd2VpZ2h0IHRvIDBcclxuICAgICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRTdGF0ZSkge1xyXG4gICAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRTdGF0ZS5jYW5jZWwoKTtcclxuICAgICAgICAgICAgICB0aGlzLl9jdXJyZW50U3RhdGUud2VpZ2h0ID0gMDtcclxuICAgICAgICAgICAgICB0aGlzLl9jdXJyZW50U3RhdGUuZGVhY3RpdmF0ZSgpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9jdXJyZW50U3RhdGUgPSB0YXJnZXRTdGF0ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIC8vIEJsZW5kIHRvIHRoZSBuZXcgc3RhdGUgb3ZlciB0aW1lXHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRvIHRyYW5zaXRpb24gb3V0IG9mIGFueSBzdGF0ZXMgd2l0aCBub24temVybyB3ZWlnaHRcclxuICAgICAgICAgICAgY29uc3QgY3VycmVudFN0YXRlcyA9IFsuLi50aGlzLl9zdGF0ZXMudmFsdWVzKCldLmZpbHRlcihcclxuICAgICAgICAgICAgICBzID0+IHMgIT09IHRhcmdldFN0YXRlICYmIChzLndlaWdodCB8fCBzLndlaWdodFBlbmRpbmcpXHJcbiAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAvLyBVcGRhdGUgdGhlIHRyYW5zaXRpb24gc3RhdGUgd2l0aCBuZXcgaW5wdXRzXHJcbiAgICAgICAgICAgIHRoaXMuX3RyYW5zaXRpb25TdGF0ZS5jb25maWd1cmUoXHJcbiAgICAgICAgICAgICAgY3VycmVudFN0YXRlcyxcclxuICAgICAgICAgICAgICB0YXJnZXRTdGF0ZSxcclxuICAgICAgICAgICAgICB0cmFuc2l0aW9uVGltZSxcclxuICAgICAgICAgICAgICBlYXNpbmdGbixcclxuICAgICAgICAgICAgICAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9jdXJyZW50U3RhdGUgPSB0YXJnZXRTdGF0ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3RyYW5zaXRpb25TdGF0ZS53ZWlnaHQgPSAwO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRTdGF0ZSA9IHRoaXMuX3RyYW5zaXRpb25TdGF0ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKHBsYXlNZXRob2QgPT09ICdwbGF5Jykge1xyXG4gICAgICAgICAgdGhpcy5fY3VycmVudFN0YXRlLmNhbmNlbCgpO1xyXG5cclxuICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50U3RhdGUgPT09IHRoaXMuX3RyYW5zaXRpb25TdGF0ZSkge1xyXG4gICAgICAgICAgICB0aGlzLl90cmFuc2l0aW9uU3RhdGUucmVzZXQodHJhbnNpdGlvblRpbWUsIGVhc2luZ0ZuLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5fY3VycmVudFN0YXRlID0gdGFyZ2V0U3RhdGU7XHJcbiAgICAgICAgICAgICAgdGhpcy5fdHJhbnNpdGlvblN0YXRlLndlaWdodCA9IDA7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gVXBkYXRlIHdlaWdodCBmb3IgdGhlIG5ldyBjdXJyZW50IHN0YXRlIHNvIGl0IGhhcyBmdWxsIGluZmx1ZW5jZSBmb3IgdGhlIHBsYXllclxyXG4gICAgICAgIHRoaXMuX2N1cnJlbnRTdGF0ZS53ZWlnaHQgPSAxO1xyXG4gICAgICAgIHRoaXMuX2N1cnJlbnRTdGF0ZS51cGRhdGVJbnRlcm5hbFdlaWdodCh0aGlzLl9pbnRlcm5hbFdlaWdodCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHBsYXlBbmltYXRpb24oXHJcbiAgICAgICAgbmFtZSxcclxuICAgICAgICB0cmFuc2l0aW9uVGltZSxcclxuICAgICAgICBlYXNpbmdGbixcclxuICAgICAgICBvbkZpbmlzaCxcclxuICAgICAgICBvbkVycm9yLFxyXG4gICAgICAgIG9uQ2FuY2VsLFxyXG4gICAgICAgIG9uTmV4dFxyXG4gICAgICApIHtcclxuICAgICAgICBsZXQgZXJyb3I7XHJcbiAgICAgICAgbGV0IHJlamVjdCA9IGZhbHNlO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICB0aGlzLl9wcmVwYXJlQ3VycmVudFN0YXRlKFxyXG4gICAgICAgICAgICBuYW1lLFxyXG4gICAgICAgICAgICAncGxheScsXHJcbiAgICAgICAgICAgIHRyYW5zaXRpb25UaW1lICE9PSB1bmRlZmluZWRcclxuICAgICAgICAgICAgICA/IHRyYW5zaXRpb25UaW1lXHJcbiAgICAgICAgICAgICAgOiB0aGlzLl90cmFuc2l0aW9uVGltZSxcclxuICAgICAgICAgICAgZWFzaW5nRm4gIT09IHVuZGVmaW5lZCA/IGVhc2luZ0ZuIDogdGhpcy5fZWFzaW5nRm4sXHJcbiAgICAgICAgICAgIG9uRXJyb3JcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgZXJyb3IgPSBlO1xyXG4gICAgICAgICAgcmVqZWN0ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChyZWplY3QpIHtcclxuICAgICAgICAgIHJldHVybiBEZWZlcnJlZC5yZWplY3QoZXJyb3IpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRTdGF0ZS5wbGF5KG9uRmluaXNoLCBvbkVycm9yLCBvbkNhbmNlbCwgb25OZXh0KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcGF1c2VBbmltYXRpb24oKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRTdGF0ZSkge1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRTdGF0ZS5wYXVzZSgpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICByZXN1bWVBbmltYXRpb24oXHJcbiAgICAgICAgbmFtZSxcclxuICAgICAgICB0cmFuc2l0aW9uVGltZSxcclxuICAgICAgICBlYXNpbmdGbixcclxuICAgICAgICBvbkZpbmlzaCxcclxuICAgICAgICBvbkVycm9yLFxyXG4gICAgICAgIG9uQ2FuY2VsLFxyXG4gICAgICAgIG9uTmV4dFxyXG4gICAgICApIHtcclxuICAgICAgICBpZiAobmFtZSA9PT0gdW5kZWZpbmVkICYmIHRoaXMuX2N1cnJlbnRTdGF0ZSkge1xyXG4gICAgICAgICAgbmFtZSA9IHRoaXMuX2N1cnJlbnRTdGF0ZS5uYW1lO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IGVycm9yO1xyXG4gICAgICAgIGxldCByZWplY3QgPSBmYWxzZTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgdGhpcy5fcHJlcGFyZUN1cnJlbnRTdGF0ZShcclxuICAgICAgICAgICAgbmFtZSxcclxuICAgICAgICAgICAgJ3Jlc3VtZScsXHJcbiAgICAgICAgICAgIHRyYW5zaXRpb25UaW1lICE9PSB1bmRlZmluZWRcclxuICAgICAgICAgICAgICA/IHRyYW5zaXRpb25UaW1lXHJcbiAgICAgICAgICAgICAgOiB0aGlzLl90cmFuc2l0aW9uVGltZSxcclxuICAgICAgICAgICAgZWFzaW5nRm4gIT09IHVuZGVmaW5lZCA/IGVhc2luZ0ZuIDogdGhpcy5fZWFzaW5nRm4sXHJcbiAgICAgICAgICAgIG9uRXJyb3JcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgZXJyb3IgPSBlO1xyXG4gICAgICAgICAgcmVqZWN0ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChyZWplY3QpIHtcclxuICAgICAgICAgIHJldHVybiBEZWZlcnJlZC5yZWplY3QoZXJyb3IpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRTdGF0ZS5yZXN1bWUob25GaW5pc2gsIG9uRXJyb3IsIG9uQ2FuY2VsLCBvbk5leHQpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjYW5jZWxBbmltYXRpb24oKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRTdGF0ZSkge1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRTdGF0ZS5jYW5jZWwoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgc3RvcEFuaW1hdGlvbigpIHtcclxuICAgICAgICBpZiAodGhpcy5fY3VycmVudFN0YXRlKSB7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5fY3VycmVudFN0YXRlLnN0b3AoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgdXBkYXRlKGRlbHRhVGltZSkge1xyXG4gICAgICAgIGlmIChzdXBlci51cGRhdGUpIHtcclxuICAgICAgICAgIHN1cGVyLnVwZGF0ZShkZWx0YVRpbWUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRTdGF0ZSkge1xyXG4gICAgICAgICAgdGhpcy5fY3VycmVudFN0YXRlLnVwZGF0ZShkZWx0YVRpbWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgZGlzY2FyZCgpIHtcclxuICAgICAgICBpZiAoc3VwZXIuZGlzY2FyZCkge1xyXG4gICAgICAgICAgc3VwZXIuZGlzY2FyZCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fdHJhbnNpdGlvblN0YXRlLmRpc2NhcmQoKTtcclxuICAgICAgICBkZWxldGUgdGhpcy5fdHJhbnNpdGlvblN0YXRlO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiBBbmltYXRpb25QbGF5ZXJNaXhpbjtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IEFuaW1hdGlvblBsYXllckludGVyZmFjZTtcclxuIiwiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXHJcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxyXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtY2xhc3Nlcy1wZXItZmlsZSAqL1xyXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xyXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1lbXB0eS1mdW5jdGlvbiAqL1xyXG4vKiBlc2xpbnQtZGlzYWJsZSBnZXR0ZXItcmV0dXJuICovXHJcblxyXG5pbXBvcnQgVXRpbHMgZnJvbSAnLi4vLi4vVXRpbHMnO1xyXG5cclxuLyoqXHJcbiAqIENsYXNzIGZhY3RvcnkgaW50ZXJmYWNlIGZvciBtYW5pcHVsYXRpbmcgYSBjb2xsZWN0aW9uIG9mIHtAbGluayBBYnN0cmFjdFN0YXRlfS5cclxuICpcclxuICogQGludGVyZmFjZVxyXG4gKi9cclxuY2xhc3MgU3RhdGVDb250YWluZXJJbnRlcmZhY2Uge1xyXG4gIC8qKlxyXG4gICAqIFJldHVybiB0aGUgc3RhdGUgd2l0aCB0aGUgZ2l2ZW4gbmFtZS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gTmFtZSBvZiB0aGUgc3RhdGUuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7QWJzdHJhY3RTdGF0ZX1cclxuICAgKi9cclxuICBnZXRTdGF0ZShuYW1lKSB7fVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIGFuIGFycmF5IG9mIHRoZSBuYW1lcyBvZiBhbGwgc3RhdGVzIGluIHRoZSBjb250YWluZXIuXHJcbiAgICpcclxuICAgKiBAdHlwZSB7QXJyYXkuPHN0cmluZz59XHJcbiAgICovXHJcbiAgZ2V0U3RhdGVOYW1lcygpIHt9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFkZCBhIG5ldyBzdGF0ZSB0byBiZSBjb250cm9sbGVkIGJ5IHRoZSBjb250YWluZXIuIFN0YXRlcyBhcmUgc3RvcmVkIGtleWVkXHJcbiAgICogYnkgdGhlaXIgbmFtZSBwcm9wZXJ0eSwgd2hpY2ggbXVzdCBiZSB1bmlxdWUuIElmIGl0IGlzbid0LCBhIG51bWJlciB3aWxsXHJcbiAgICogYmUgYWRkZWQgb3IgaW5jcmVtZW50ZWQgdW50aWwgYSB1bmlxdWUga2V5IGlzIGdlbmVyYXRlZC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7QWJzdHJhY3RTdGF0ZX0gc3RhdGUgLSBTdGF0ZSB0byBhZGQgdG8gdGhlIGNvbnRhaW5lci5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IC0gVW5pcXVlIG5hbWUgb2YgdGhlIHN0YXRlLlxyXG4gICAqL1xyXG4gIGFkZFN0YXRlKHN0YXRlKSB7fVxyXG5cclxuICAvKipcclxuICAgKiBSZW1vdmVzIGEgc3RhdGUgd2l0aCB0aGUgZ2l2ZW4gbmFtZSBmcm9tIHRoZSBjb250YWluZXIuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIE5hbWUgb2YgdGhlIHN0YXRlIHRvIHJlbW92ZS5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtib29sZWFufSAtIFdoZXRoZXIgb3Igbm90IGEgc3RhdGUgd2FzIHJlbW92ZWQuXHJcbiAgICovXHJcbiAgcmVtb3ZlU3RhdGUobmFtZSkge31cclxuXHJcbiAgLyoqXHJcbiAgICogUmVuYW1lcyBhIHN0YXRlIHdpdGggdGhlIGdpdmVuIG5hbWUgaW4gdGhlIGNvbnRhaW5lci4gTmFtZSBtdXN0IGJlIHVuaXF1ZVxyXG4gICAqIHRvIHRoZSBjb250YWluZXIsIGlmIGl0IGlzbid0IHRoZSBuYW1lIHdpbGwgYmUgaW5jcmVtZW50ZWQgdW50aWwgaXQgaXMgdW5pcXVlLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGN1cnJlbnROYW1lIC0gTmFtZSBvZiB0aGUgc3RhdGUgdG8gcmVuYW1lLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuZXdOYW1lIC0gTmFtZSB0byB1cGRhdGUgdGhlIHN0YXRlIHdpdGguXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSAtIFVwZGF0ZWQgbmFtZSBmb3IgdGhlIHN0YXRlLlxyXG4gICAqL1xyXG4gIHJlbmFtZVN0YXRlKGN1cnJlbnROYW1lLCBuZXdOYW1lKSB7fVxyXG5cclxuICAvKipcclxuICAgKiBEaXNjYXJkcyBhbGwgc3RhdGVzLlxyXG4gICAqL1xyXG4gIGRpc2NhcmRTdGF0ZXMoKSB7fVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGVzIGEgY2xhc3MgdGhhdCBpbXBsZW1lbnRzIHtAbGluayBTdGF0ZUNvbnRhaW5lckludGVyZmFjZX0gYW5kIGV4dGVuZHNcclxuICAgKiBhIHNwZWNpZmllZCBiYXNlIGNsYXNzLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtDbGFzc30gW0Jhc2VDbGFzcyA9IGNsYXNze31dIC0gVGhlIGNsYXNzIHRvIGV4dGVuZC5cclxuICAgKlxyXG4gICAqIEByZXR1cm4ge0NsYXNzfSBBIGNsYXNzIHRoYXQgZXh0ZW5kcyBgQmFzZUNsYXNzYCBhbmQgaW1wbGVtZW50cyB7QGxpbmsgU3RhdGVDb250YWluZXJJbnRlcmZhY2V9LlxyXG4gICAqL1xyXG4gIHN0YXRpYyBNaXhpbihCYXNlQ2xhc3MgPSBjbGFzcyB7fSkge1xyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIG1peGluIGFkZHMgZnVuY3Rpb25hbGl0eSBmb3IgbWFuaXB1bGF0aW5nIHVuaXF1ZWx5LW5hbWVkIGFuaW1hdGlvbiBzdGF0ZXMgaW5cclxuICAgICAqIGEgbWFwLlxyXG4gICAgICovXHJcbiAgICBjb25zdCBTdGF0ZUNvbnRhaW5lck1peGluID0gY2xhc3MgZXh0ZW5kcyBCYXNlQ2xhc3Mge1xyXG4gICAgICBjb25zdHJ1Y3RvcihvcHRpb25zID0ge30sIC4uLmFyZ3MpIHtcclxuICAgICAgICBzdXBlcihvcHRpb25zLCAuLi5hcmdzKTtcclxuXHJcbiAgICAgICAgdGhpcy5fc3RhdGVzID0gdGhpcy5fc3RhdGVzICE9PSB1bmRlZmluZWQgPyB0aGlzLl9zdGF0ZXMgOiBuZXcgTWFwKCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGdldFN0YXRlKG5hbWUpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc3RhdGVzLmdldChuYW1lKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgZ2V0U3RhdGVOYW1lcygpIHtcclxuICAgICAgICByZXR1cm4gWy4uLnRoaXMuX3N0YXRlcy5rZXlzKCldO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBhZGRTdGF0ZShzdGF0ZSkge1xyXG4gICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgc3RhdGUgaXMgbm90IGFscmVhZHkgaW4gdGhpcyBjb250YWluZXJcclxuICAgICAgICBpZiAoWy4uLnRoaXMuX3N0YXRlcy52YWx1ZXMoKV0uaW5jbHVkZXMoc3RhdGUpKSB7XHJcbiAgICAgICAgICBjb25zb2xlLndhcm4oXHJcbiAgICAgICAgICAgIGBDYW5ub3QgYWRkIGFuaW1hdGlvbiB0byBzdGF0ZSAke3RoaXMubmFtZX0uIEFuaW1hdGlvbiB3YXMgYWxyZWFkeSBhZGRlZC5gXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgcmV0dXJuIHN0YXRlLm5hbWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIHN0YXRlIG5hbWUgaXMgdW5pcXVlXHJcbiAgICAgICAgY29uc3QgdW5pcXVlTmFtZSA9IFV0aWxzLmdldFVuaXF1ZU5hbWUoc3RhdGUubmFtZSwgW1xyXG4gICAgICAgICAgLi4udGhpcy5fc3RhdGVzLmtleXMoKSxcclxuICAgICAgICBdKTtcclxuXHJcbiAgICAgICAgaWYgKHN0YXRlLm5hbWUgIT09IHVuaXF1ZU5hbWUpIHtcclxuICAgICAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICAgICAgYEFuaW1hdGlvbiBuYW1lICR7c3RhdGUubmFtZX0gaXMgbm90IHVuaXF1ZSBmb3Igc3RhdGUgJHt0aGlzLm5hbWV9LiBOZXcgYW5pbWF0aW9uIHdpbGwgYmUgYWRkZWQgd2l0aCBuYW1lICR7dW5pcXVlTmFtZX0uYFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHN0YXRlLm5hbWUgPSB1bmlxdWVOYW1lO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fc3RhdGVzLnNldChzdGF0ZS5uYW1lLCBzdGF0ZSk7XHJcblxyXG4gICAgICAgIHJldHVybiBzdGF0ZS5uYW1lO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZW1vdmVTdGF0ZShuYW1lKSB7XHJcbiAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIHN0YXRlIGlzIGluIHRoaXMgY29udGFpbmVyXHJcbiAgICAgICAgaWYgKCF0aGlzLl9zdGF0ZXMgfHwgIXRoaXMuX3N0YXRlcy5oYXMobmFtZSkpIHtcclxuICAgICAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICAgICAgYERpZCBub3QgcmVtb3ZlIGFuaW1hdGlvbiAke25hbWV9IGZyb20gc3RhdGUgJHt0aGlzLm5hbWV9LiBObyBhbmltYXRpb24gZXhpc3RzIHdpdGggdGhpcyBuYW1lLmBcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9zdGF0ZXMuZ2V0KG5hbWUpLmRpc2NhcmQoKTtcclxuICAgICAgICB0aGlzLl9zdGF0ZXMuZGVsZXRlKG5hbWUpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZW5hbWVTdGF0ZShjdXJyZW50TmFtZSwgbmV3TmFtZSkge1xyXG4gICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgc3RhdGUgaXMgaW4gdGhpcyBjb250YWluZXJcclxuICAgICAgICBpZiAoIXRoaXMuX3N0YXRlcyB8fCAhdGhpcy5fc3RhdGVzLmhhcyhjdXJyZW50TmFtZSkpIHtcclxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICAgICAgYENhbm5vdCByZW5hbWUgYW5pbWF0aW9uICR7Y3VycmVudE5hbWV9IGluICR7dGhpcy5uYW1lfS4gTm8gYW5pbWF0aW9uIGV4aXN0cyB3aXRoIHRoaXMgbmFtZS5gXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzLl9zdGF0ZXMuZ2V0KGN1cnJlbnROYW1lKTtcclxuXHJcbiAgICAgICAgLy8gRXhpdCBpZiB0aGUgbmFtZXMgYXJlIHRoZSBzYW1lXHJcbiAgICAgICAgaWYgKGN1cnJlbnROYW1lID09PSBuZXdOYW1lKSB7XHJcbiAgICAgICAgICByZXR1cm4gY3VycmVudE5hbWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIG5hbWUgaXMgdW5pcXVlXHJcbiAgICAgICAgY29uc3QgdW5pcXVlTmFtZSA9IFV0aWxzLmdldFVuaXF1ZU5hbWUoXHJcbiAgICAgICAgICBuZXdOYW1lLFxyXG4gICAgICAgICAgWy4uLnRoaXMuX3N0YXRlcy5rZXlzKCldLmZpbHRlcihzID0+IHMubmFtZSAhPT0gY3VycmVudE5hbWUpXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgaWYgKG5ld05hbWUgIT09IHVuaXF1ZU5hbWUpIHtcclxuICAgICAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICAgICAgYEFuaW1hdGlvbiBuYW1lICR7bmV3TmFtZX0gaXMgbm90IHVuaXF1ZSBpbiBzdGF0ZSAke3RoaXMubmFtZX0uIEFuaW1hdGlvbiB3aWxsIGJlIHJlbmFtZWQgdG8gJHt1bmlxdWVOYW1lfS5gXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgbmV3TmFtZSA9IHVuaXF1ZU5hbWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzdGF0ZS5uYW1lID0gbmV3TmFtZTtcclxuICAgICAgICB0aGlzLl9zdGF0ZXMuZGVsZXRlKGN1cnJlbnROYW1lKTtcclxuICAgICAgICB0aGlzLl9zdGF0ZXMuc2V0KHN0YXRlLm5hbWUsIHN0YXRlKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHN0YXRlLm5hbWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGRpc2NhcmRTdGF0ZXMoKSB7XHJcbiAgICAgICAgdGhpcy5fc3RhdGVzLmZvckVhY2goc3RhdGUgPT4ge1xyXG4gICAgICAgICAgc3RhdGUuZGlzY2FyZCgpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBkZWxldGUgdGhpcy5fc3RhdGVzO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIFN0YXRlQ29udGFpbmVyTWl4aW47XHJcbiAgfVxyXG59XHJcbmV4cG9ydCBkZWZhdWx0IFN0YXRlQ29udGFpbmVySW50ZXJmYWNlO1xyXG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cclxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVC0wXHJcbmltcG9ydCBBYnN0cmFjdFN0YXRlIGZyb20gJy4vQWJzdHJhY3RTdGF0ZSc7XHJcbmltcG9ydCBBbmltYXRpb25QbGF5ZXJJbnRlcmZhY2UgZnJvbSAnLi4vQW5pbWF0aW9uUGxheWVySW50ZXJmYWNlJztcclxuaW1wb3J0IFN0YXRlQ29udGFpbmVySW50ZXJmYWNlIGZyb20gJy4vU3RhdGVDb250YWluZXJJbnRlcmZhY2UnO1xyXG5cclxuLyoqXHJcbiAqIENsYXNzIGZvciBwbGF5aW5nIGFuIG9yZGVyZWQgYXJyYXkgb2YgYW5pbWF0aW9uIHN0YXRlcyBpbiBzZXF1ZW5jZS5cclxuICpcclxuICogQGV4dGVuZHMgQWJzdHJhY3RTdGF0ZVxyXG4gKiBAaW1wbGVtZW50cyBAQW5pbWF0aW9uUGxheWVySW50ZXJmYWNlXHJcbiAqL1xyXG5jbGFzcyBRdWV1ZVN0YXRlIGV4dGVuZHMgQW5pbWF0aW9uUGxheWVySW50ZXJmYWNlLk1peGluKFxyXG4gIFN0YXRlQ29udGFpbmVySW50ZXJmYWNlLk1peGluKEFic3RyYWN0U3RhdGUpXHJcbikge1xyXG4gIC8qKlxyXG4gICAqIEBjb25zdHJ1Y3RvclxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XSAtIE9wdGlvbnMgZm9yIHRoZSBzdGF0ZS5cclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmF1dG9BZHZhbmNlPXRydWVdIC0gV2hldGhlciB0byBhdXRtYXRpY2FsbHkgYWR2YW5jZVxyXG4gICAqIHRvIHRoZSBuZXh0IHN0YXRlIGluIHRoZSBxdWV1ZSBhcyBlYWNoIHN0YXRlIGNvbXBsZXRlcy5cclxuICAgKiBAcGFyYW0ge0FycmF5LjxBYnN0cmFjdFN0YXRlPn0gW3F1ZXVlU3RhdGVzPVtdXSAtIEFycmF5IG9mIHN0YXRlcyB0byBiZSBwbGF5ZWRcclxuICAgKiBpbiBvcmRlci5cclxuICAgKi9cclxuICBjb25zdHJ1Y3RvcihvcHRpb25zID0ge30sIHF1ZXVlU3RhdGVzID0gW10pIHtcclxuICAgIHN1cGVyKG9wdGlvbnMpO1xyXG5cclxuICAgIHF1ZXVlU3RhdGVzLmZvckVhY2goc3RhdGUgPT4ge1xyXG4gICAgICB0aGlzLmFkZFN0YXRlKHN0YXRlKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuX3F1ZXVlID0gdGhpcy5fc3RhdGVzLmtleXMoKTtcclxuICAgIHRoaXMuX2RvbmUgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyB3aGV0aGVyIHRoZSBhbmltYXRpb24gcXVldWUgaGFzIHJlYWNoZWQgdGhlIGVuZC5cclxuICAgKi9cclxuICBnZXQgZG9uZSgpIHtcclxuICAgIHJldHVybiB0aGlzLl9kb25lO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgaW50ZXJuYWwgd2VpZ2h0LlxyXG4gICAqXHJcbiAgICogQHJlYWRvbmx5XHJcbiAgICogQHR5cGUge251bWJlcn1cclxuICAgKi9cclxuICBnZXQgaW50ZXJuYWxXZWlnaHQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fY3VycmVudFN0YXRlXHJcbiAgICAgID8gdGhpcy5fY3VycmVudFN0YXRlLmludGVybmFsV2VpZ2h0ICogdGhpcy5faW50ZXJuYWxXZWlnaHRcclxuICAgICAgOiAwO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVzdGFydCB0aGUgcXVldWUgaXRlcmF0b3IuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIF9yZXNldCgpIHtcclxuICAgIHRoaXMuX3F1ZXVlID0gdGhpcy5fc3RhdGVzLmtleXMoKTtcclxuICAgIGNvbnN0IHt2YWx1ZSwgZG9uZX0gPSB0aGlzLl9xdWV1ZS5uZXh0KCk7XHJcbiAgICB0aGlzLl9kb25lID0gZG9uZTtcclxuXHJcbiAgICByZXR1cm4gdmFsdWUgfHwgbnVsbDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE11bHRpcGxpZXMgdGhlIHVzZXIgd2VpZ2h0IGJ5IGEgZmFjdG9yIHRvIGRldGVybWluZSB0aGUgaW50ZXJuYWwgd2VpZ2h0LlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IGZhY3RvciAtIDAtMSBtdWx0aXBsaWVyIHRvIGFwcGx5IHRvIHRoZSB1c2VyIHdlaWdodC5cclxuICAgKi9cclxuICB1cGRhdGVJbnRlcm5hbFdlaWdodChmYWN0b3IpIHtcclxuICAgIHN1cGVyLnVwZGF0ZUludGVybmFsV2VpZ2h0KGZhY3Rvcik7XHJcblxyXG4gICAgaWYgKHRoaXMuX2N1cnJlbnRTdGF0ZSkge1xyXG4gICAgICB0aGlzLl9jdXJyZW50U3RhdGUudXBkYXRlSW50ZXJuYWxXZWlnaHQodGhpcy5faW50ZXJuYWxXZWlnaHQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU3RhcnQgdGhlIG5leHQgYW5pbWF0aW9uIGluIHRoZSBxdWV1ZS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvbk5leHQgLSBGdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSBhbiBhbmltYXRpb24gY29tcGxldGVzXHJcbiAgICogYW5kIHRoZSBxdWV1ZSBtb3ZlcyB0byB0aGUgbmV4dCBhbmltYXRpb24uXHJcbiAgICogQHBhcmFtIHtib29sZWFufSBbd3JhcD1mYWxzZV0gLSBXaGV0aGVyIG9yIG5vdCB0byBzdGFydCB0aGUgcXVldWUgZnJvbSB0aGVcclxuICAgKiBiZWdpbm5pbmcgYWdhaW4gaWYgdGhlIGVuZCBoYXMgYmVlbiByZWFjaGVkLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0RlZmVycmVkfVxyXG4gICAqL1xyXG4gIG5leHQob25OZXh0LCB3cmFwID0gZmFsc2UpIHtcclxuICAgIC8vIE1vdmUgdGhlIHF1ZXVlIGZvcndhcmRcclxuICAgIGNvbnN0IHt2YWx1ZTogbmFtZSwgZG9uZX0gPSB0aGlzLl9xdWV1ZS5uZXh0KCk7XHJcbiAgICB0aGlzLl9kb25lID0gZG9uZTtcclxuICAgIHRoaXMuX3BhdXNlZCA9IGZhbHNlO1xyXG5cclxuICAgIC8vIFRoZSBxdWV1ZSBoYXMgcmVhY2hlZCB0aGUgZW5kXHJcbiAgICBpZiAoZG9uZSkge1xyXG4gICAgICAvLyBTdGFydCB0aGUgcXVldWUgb3ZlclxyXG4gICAgICBpZiAod3JhcCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnBsYXkoXHJcbiAgICAgICAgICB0aGlzLl9wbGF5Q2FsbGJhY2tzLm9uRmluaXNoLFxyXG4gICAgICAgICAgdGhpcy5fcGxheUNhbGxiYWNrcy5vbkVycm9yLFxyXG4gICAgICAgICAgdGhpcy5fcGxheUNhbGxiYWNrcy5vbkNhbmNlbCxcclxuICAgICAgICAgIG9uTmV4dFxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgICAgLy8gU3RvcCB0aGUgcXVldWVcclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5fcHJvbWlzZXMuZmluaXNoLnJlc29sdmUoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcHJvbWlzZXMuZmluaXNoO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gU2lnbmFsIHRoZSBuZXh0IGFuaW1hdGlvbiBpcyBzdGFydGluZ1xyXG4gICAgaWYgKHR5cGVvZiBvbk5leHQgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgY29uc3QgbGFzdE5hbWUgPSBbLi4udGhpcy5fc3RhdGVzLmtleXMoKV1bdGhpcy5fc3RhdGVzLnNpemUgLSAxXTtcclxuICAgICAgY29uc3QgaXNRdWV1ZUVuZCA9IG5hbWUgPT09IGxhc3ROYW1lO1xyXG4gICAgICBvbk5leHQoe1xyXG4gICAgICAgIG5hbWUsXHJcbiAgICAgICAgY2FuQWR2YW5jZTogdGhpcy5nZXRTdGF0ZShuYW1lKS5sb29wQ291bnQgIT09IEluZmluaXR5ICYmICFpc1F1ZXVlRW5kLFxyXG4gICAgICAgIGlzUXVldWVFbmQsXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFN0YXJ0IHRoZSBuZXh0IGFuaW1hdGlvblxyXG4gICAgdGhpcy5wbGF5QW5pbWF0aW9uKFxyXG4gICAgICBuYW1lLFxyXG4gICAgICB0aGlzLl90cmFuc2l0aW9uVGltZSxcclxuICAgICAgdGhpcy5fZWFzaW5nRm4sXHJcbiAgICAgICgpID0+IHtcclxuICAgICAgICBpZiAoIXRoaXMuX3BhdXNlZCAmJiAhdGhpcy5pc1RyYW5zaXRpb25pbmcpIHtcclxuICAgICAgICAgIHRoaXMubmV4dChvbk5leHQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgdGhpcy5fcGxheUNhbGxiYWNrcy5vbkVycm9yXHJcbiAgICApO1xyXG5cclxuICAgIHJldHVybiB0aGlzLl9wcm9taXNlcy5maW5pc2g7XHJcbiAgfVxyXG5cclxuICBwbGF5KG9uRmluaXNoLCBvbkVycm9yLCBvbkNhbmNlbCwgb25OZXh0KSB7XHJcbiAgICBjb25zdCBuYW1lID0gdGhpcy5fcmVzZXQoKTtcclxuICAgIHN1cGVyLnBsYXkob25GaW5pc2gsIG9uRXJyb3IsIG9uQ2FuY2VsKTtcclxuXHJcbiAgICBpZiAodGhpcy5fZG9uZSkge1xyXG4gICAgICB0aGlzLl9wcm9taXNlcy5maW5pc2gucmVzb2x2ZSgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gU2lnbmFsIHRoZSBuZXh0IGFuaW1hdGlvbiBpcyBzdGFydGluZ1xyXG4gICAgICBpZiAobmFtZSAhPT0gdGhpcy5jdXJyZW50QW5pbWF0aW9uICYmIHR5cGVvZiBvbk5leHQgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICBjb25zdCBsYXN0TmFtZSA9IFsuLi50aGlzLl9zdGF0ZXMua2V5cygpXVt0aGlzLl9zdGF0ZXMuc2l6ZSAtIDFdO1xyXG4gICAgICAgIGNvbnN0IGlzUXVldWVFbmQgPSBuYW1lID09PSBsYXN0TmFtZTtcclxuICAgICAgICBvbk5leHQoe1xyXG4gICAgICAgICAgbmFtZSxcclxuICAgICAgICAgIGNhbkFkdmFuY2U6IG5hbWVcclxuICAgICAgICAgICAgPyB0aGlzLmdldFN0YXRlKG5hbWUpLmxvb3BDb3VudCAhPT0gSW5maW5pdHkgJiYgIWlzUXVldWVFbmRcclxuICAgICAgICAgICAgOiB0cnVlLFxyXG4gICAgICAgICAgaXNRdWV1ZUVuZDogIW5hbWUgfHwgaXNRdWV1ZUVuZCxcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gU3RhcnQgdGhlIG5leHQgYW5pbWF0aW9uXHJcbiAgICAgIHRoaXMucGxheUFuaW1hdGlvbihcclxuICAgICAgICBuYW1lLFxyXG4gICAgICAgIHRoaXMuX2N1cnJlbnRTdGF0ZSA/IHRoaXMuX3RyYW5zaXRpb25UaW1lIDogMCxcclxuICAgICAgICB0aGlzLl9lYXNpbmdGbixcclxuICAgICAgICAoKSA9PiB7XHJcbiAgICAgICAgICBpZiAoIXRoaXMuX3BhdXNlZCAmJiAhdGhpcy5pc1RyYW5zaXRpb25pbmcpIHtcclxuICAgICAgICAgICAgdGhpcy5uZXh0KG9uTmV4dCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBvbkVycm9yXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuX3Byb21pc2VzLmZpbmlzaDtcclxuICB9XHJcblxyXG4gIHBhdXNlKCkge1xyXG4gICAgY29uc3QgcGF1c2VkID0gc3VwZXIucGF1c2UoKTtcclxuICAgIHRoaXMucGF1c2VBbmltYXRpb24oKTtcclxuXHJcbiAgICByZXR1cm4gcGF1c2VkO1xyXG4gIH1cclxuXHJcbiAgcmVzdW1lKG9uRmluaXNoLCBvbkVycm9yLCBvbkNhbmNlbCwgb25OZXh0KSB7XHJcbiAgICBpZiAodGhpcy5fZG9uZSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5wbGF5KG9uRmluaXNoLCBvbkVycm9yLCBvbkNhbmNlbCwgb25OZXh0KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHN1cGVyLnJlc3VtZShvbkZpbmlzaCwgb25FcnJvciwgb25DYW5jZWwpO1xyXG5cclxuICAgICAgdGhpcy5yZXN1bWVBbmltYXRpb24oXHJcbiAgICAgICAgdGhpcy5fY3VycmVudFN0YXRlLm5hbWUsXHJcbiAgICAgICAgdGhpcy5fdHJhbnNpdGlvblRpbWUsXHJcbiAgICAgICAgdGhpcy5fZWFzaW5nRm4sXHJcbiAgICAgICAgKCkgPT4ge1xyXG4gICAgICAgICAgaWYgKCF0aGlzLl9wYXVzZWQgJiYgIXRoaXMuaXNUcmFuc2l0aW9uaW5nKSB7XHJcbiAgICAgICAgICAgIHRoaXMubmV4dChvbk5leHQpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgb25FcnJvclxyXG4gICAgICApO1xyXG5cclxuICAgICAgcmV0dXJuIHRoaXMuX3Byb21pc2VzLmZpbmlzaDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNhbmNlbCgpIHtcclxuICAgIGNvbnN0IGNhbmNlbGVkID0gc3VwZXIuY2FuY2VsKCk7XHJcblxyXG4gICAgaWYgKHRoaXMuX2N1cnJlbnRTdGF0ZSkge1xyXG4gICAgICB0aGlzLl9jdXJyZW50U3RhdGUuY2FuY2VsKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGNhbmNlbGVkO1xyXG4gIH1cclxuXHJcbiAgc3RvcCgpIHtcclxuICAgIGNvbnN0IHN0b3BwZWQgPSBzdXBlci5zdG9wKCk7XHJcbiAgICB0aGlzLnN0b3BBbmltYXRpb24oKTtcclxuICAgIHRoaXMuX2RvbmUgPSB0cnVlO1xyXG5cclxuICAgIHJldHVybiBzdG9wcGVkO1xyXG4gIH1cclxuXHJcbiAgZGlzY2FyZCgpIHtcclxuICAgIHN1cGVyLmRpc2NhcmQoKTtcclxuXHJcbiAgICB0aGlzLmRpc2NhcmRTdGF0ZXMoKTtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IFF1ZXVlU3RhdGU7XHJcbiIsIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxyXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTBcclxuaW1wb3J0IERlZmVycmVkIGZyb20gJ2NvcmUvRGVmZXJyZWQnO1xyXG5pbXBvcnQgTWF0aFV0aWxzIGZyb20gJ2NvcmUvTWF0aFV0aWxzJztcclxuaW1wb3J0IEFic3RyYWN0U3RhdGUgZnJvbSAnLi9BYnN0cmFjdFN0YXRlJztcclxuaW1wb3J0IFN0YXRlQ29udGFpbmVySW50ZXJmYWNlIGZyb20gJy4vU3RhdGVDb250YWluZXJJbnRlcmZhY2UnO1xyXG5cclxuLyoqXHJcbiAqIEJhc2UgY2xhc3MgZm9yIGEgc3RhdGUgdGhhdCBibGVuZHMgYSBjb2xsZWN0aW9uIG9mIHtAbGluayBBYnN0cmFjdFN0YXRlfS5cclxuICpcclxuICogQGFic3RyYWN0XHJcbiAqIEBpbXBsZW1lbnRzIFN0YXRlQ29udGFpbmVySW50ZXJmYWNlXHJcbiAqL1xyXG5jbGFzcyBBYnN0cmFjdEJsZW5kU3RhdGUgZXh0ZW5kcyBTdGF0ZUNvbnRhaW5lckludGVyZmFjZS5NaXhpbihBYnN0cmFjdFN0YXRlKSB7XHJcbiAgY29uc3RydWN0b3Iob3B0aW9ucyA9IHt9LCBibGVuZFN0YXRlcyA9IFtdLCAuLi5hcmdzKSB7XHJcbiAgICBzdXBlcihvcHRpb25zLCAuLi5hcmdzKTtcclxuICAgIGJsZW5kU3RhdGVzLmZvckVhY2goc3RhdGUgPT4ge1xyXG4gICAgICB0aGlzLmFkZFN0YXRlKHN0YXRlKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgc3VtIG9mIGludGVybmFsIHdlaWdodHMgb2YgdGhlIHN1Yi1zdGF0ZXMuXHJcbiAgICpcclxuICAgKiBAcmVhZG9ubHlcclxuICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAqL1xyXG4gIGdldCBpbnRlcm5hbFdlaWdodCgpIHtcclxuICAgIGxldCBibGVuZFdlaWdodHMgPSAwO1xyXG4gICAgdGhpcy5fc3RhdGVzLmZvckVhY2goc3RhdGUgPT4ge1xyXG4gICAgICBibGVuZFdlaWdodHMgKz0gc3RhdGUuaW50ZXJuYWxXZWlnaHQ7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBibGVuZFdlaWdodHM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSB3ZWlnaHQgb2YgYSBzdGF0ZSBjb250cm9sbGVkIGJ5IHRoZSBjb250YWluZXIuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIE5hbWUgb2YgdGhlIHN0YXRlIHRvIHJldHVybiB0aGUgd2VpZ2h0IGZyb20uXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSAtIFdlaWdodCBvZiB0aGUgc3RhdGUuXHJcbiAgICovXHJcbiAgZ2V0QmxlbmRXZWlnaHQobmFtZSkge1xyXG4gICAgLy8gTWFrZSBzdXJlIHRoZSBuYW1lIGlzIHZhbGlkXHJcbiAgICBjb25zdCBzdGF0ZSA9IHRoaXMuZ2V0U3RhdGUobmFtZSk7XHJcbiAgICBpZiAoc3RhdGUgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgYENhbm5vdCBnZXQgd2VpZ2h0IG9mIHN0YXRlICR7bmFtZX0gZnJvbSBCbGVuZFN0YXRlICR7dGhpcy5uYW1lfS4gTm8gc3RhdGUgZXhpc3RzIHdpdGggdGhpcyBuYW1lLmBcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gc3RhdGUud2VpZ2h0O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0cyB0aGUgd2VpZ2h0IG9mIGEgc3RhdGUgY29udHJvbGxlZCBieSB0aGUgY29udGFpbmVyLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBOYW1lIG9mIHRoZSBzdGF0ZSB0byBzZXQgdGhlIHdlaWdodCBvZi5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gd2VpZ2h0IC0gV2VpZ2h0IHZhbHVlIHRvIHNldCBvbiB0aGUgc3RhdGUuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7RGVmZXJyZWR9XHJcbiAgICovXHJcbiAgc2V0QmxlbmRXZWlnaHQobmFtZSwgd2VpZ2h0LCBzZWNvbmRzID0gMCwgZWFzaW5nRm4pIHtcclxuICAgIC8vIE1ha2Ugc3VyZSB0aGUgbmFtZSBpcyB2YWxpZFxyXG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzLmdldFN0YXRlKG5hbWUpO1xyXG5cclxuICAgIGlmIChzdGF0ZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgQ2Fubm90IHNldCB3ZWlnaHQgb2Ygc3RhdGUgJHtuYW1lfSBmcm9tIEJsZW5kU3RhdGUgJHt0aGlzLm5hbWV9LiBObyBzdGF0ZSBleGlzdHMgd2l0aCB0aGlzIG5hbWUuYFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHdlaWdodCA9IE1hdGhVdGlscy5jbGFtcCh3ZWlnaHQpO1xyXG4gICAgcmV0dXJuIHN0YXRlLnNldFdlaWdodCh3ZWlnaHQsIHNlY29uZHMsIGVhc2luZ0ZuKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE11bHRpcGxpZXMgdGhlIHdlaWdodCBvZiBlYWNoIHN1Yi1zdGF0ZSBieSBhIGZhY3RvciB0byBkZXRlcm1pbmUgdGhlIGludGVybmFsIHdlaWdodC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBmYWN0b3IgLSAwLTEgbXVsdGlwbGllciB0byBhcHBseSB0byB0aGUgdXNlciB3ZWlnaHQuXHJcbiAgICovXHJcbiAgdXBkYXRlSW50ZXJuYWxXZWlnaHQoZmFjdG9yKSB7XHJcbiAgICBzdXBlci51cGRhdGVJbnRlcm5hbFdlaWdodChmYWN0b3IpO1xyXG5cclxuICAgIHRoaXMuX3N0YXRlcy5mb3JFYWNoKHN0YXRlID0+IHtcclxuICAgICAgc3RhdGUudXBkYXRlSW50ZXJuYWxXZWlnaHQodGhpcy5faW50ZXJuYWxXZWlnaHQpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGUgYW55IHZhbHVlcyBvZiB0aGUgc3ViLXN0YXRlcyB0aGF0IG5lZWQgdG8gYmUgZXZhbHVhdGVkIGV2ZXJ5IGZyYW1lLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IGRlbHRhVGltZSAtIFRpbWUgaW4gbWlsbGlzZWNvbmRzIHNpbmNlIHRoZSBsYXN0IHVwZGF0ZS5cclxuICAgKi9cclxuICB1cGRhdGUoZGVsdGFUaW1lKSB7XHJcbiAgICBzdXBlci51cGRhdGUoZGVsdGFUaW1lKTtcclxuXHJcbiAgICB0aGlzLl9zdGF0ZXMuZm9yRWFjaChzdGF0ZSA9PiB7XHJcbiAgICAgIHN0YXRlLnVwZGF0ZShkZWx0YVRpbWUpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTdGFydCBwbGF5YmFjayBvZiB0aGUgc3ViLXN0YXRlcyBmcm9tIHRoZSBiZWdpbm5pbmcuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb25GaW5pc2ggLSBGdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIHN0YXRlIGZpbmlzaGVzLlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvbkVycm9yIC0gRnVuY3Rpb24gdG8gZXhlY3V0ZSBpZiB0aGUgc3RhdGUgZW5jb3VudGVyc1xyXG4gICAqIGFuIGVycm9yIGR1cmluZyBwbGF5YmFjay5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb25DYW5jZWwgLSBGdW5jdGlvbiB0byBleGVjdXRlIGlmIHBsYXliYWNrIGlzIGNhbmNlbGVkLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0RlZmVycmVkfVxyXG4gICAqL1xyXG4gIHBsYXkob25GaW5pc2gsIG9uRXJyb3IsIG9uQ2FuY2VsKSB7XHJcbiAgICBjb25zdCBwcm9taXNlcyA9IFtzdXBlci5wbGF5KCldO1xyXG5cclxuICAgIHRoaXMuX3N0YXRlcy5mb3JFYWNoKHN0YXRlID0+IHtcclxuICAgICAgcHJvbWlzZXMucHVzaChzdGF0ZS5wbGF5KCkpO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gRGVmZXJyZWQuYWxsKHByb21pc2VzLCBvbkZpbmlzaCwgb25FcnJvciwgb25DYW5jZWwpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUGF1c2UgcGxheWJhY2sgb2YgdGhlIHN1Yi1zdGF0ZXMuIFRoaXMgcHJldmVudHMgcGVuZGluZyBwcm9taXNlcyBmcm9tIGJlaW5nIGV4ZWN1dGVkLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAgICovXHJcbiAgcGF1c2UoKSB7XHJcbiAgICB0aGlzLl9zdGF0ZXMuZm9yRWFjaChzdGF0ZSA9PiB7XHJcbiAgICAgIHN0YXRlLnBhdXNlKCk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBzdXBlci5wYXVzZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVzdW1lIHBsYXliYWNrIG9mIHRoZSBzdWItc3RhdGVzLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9uRmluaXNoIC0gRnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBzdGF0ZSBmaW5pc2hlcy5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb25FcnJvciAtIEZ1bmN0aW9uIHRvIGV4ZWN1dGUgaWYgdGhlIHN0YXRlIGVuY291bnRlcnNcclxuICAgKiBhbiBlcnJvciBkdXJpbmcgcGxheWJhY2suXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9uQ2FuY2VsIC0gRnVuY3Rpb24gdG8gZXhlY3V0ZSBpZiBwbGF5YmFjayBpcyBjYW5jZWxlZC5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtEZWZlcnJlZH1cclxuICAgKi9cclxuICByZXN1bWUob25GaW5pc2gsIG9uRXJyb3IsIG9uQ2FuY2VsKSB7XHJcbiAgICBjb25zdCBwcm9taXNlcyA9IFtzdXBlci5yZXN1bWUoKV07XHJcblxyXG4gICAgdGhpcy5fc3RhdGVzLmZvckVhY2goc3RhdGUgPT4ge1xyXG4gICAgICBwcm9taXNlcy5wdXNoKHN0YXRlLnJlc3VtZSgpKTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIERlZmVycmVkLmFsbChwcm9taXNlcywgb25GaW5pc2gsIG9uRXJyb3IsIG9uQ2FuY2VsKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENhbmNlbCBwbGF5YmFjayBvZiB0aGUgc3ViLXN0YXRlcyBhbmQgY2FuY2VsIGFueSBwZW5kaW5nIHByb21pc2VzLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAgICovXHJcbiAgY2FuY2VsKCkge1xyXG4gICAgdGhpcy5fc3RhdGVzLmZvckVhY2goc3RhdGUgPT4ge1xyXG4gICAgICBzdGF0ZS5jYW5jZWwoKTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHN1cGVyLmNhbmNlbCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU3RvcCBwbGF5YmFjayBvZiB0aGUgc3ViLXN0YXRlcyBhbmQgcmVzb2x2ZSBhbnkgcGVuZGluZyBwcm9taXNlcy5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gICAqL1xyXG4gIHN0b3AoKSB7XHJcbiAgICB0aGlzLl9zdGF0ZXMuZm9yRWFjaChzdGF0ZSA9PiB7XHJcbiAgICAgIHN0YXRlLnN0b3AoKTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHN1cGVyLnN0b3AoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERpc2NhcmRzIGFsbCBzdWItc3RhdGUgcmVzb3VyY2VzLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAgICovXHJcbiAgZGlzY2FyZCgpIHtcclxuICAgIHN1cGVyLmRpc2NhcmQoKTtcclxuXHJcbiAgICB0aGlzLmRpc2NhcmRTdGF0ZXMoKTtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IEFic3RyYWN0QmxlbmRTdGF0ZTtcclxuIiwiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXHJcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxyXG5pbXBvcnQgQWJzdHJhY3RCbGVuZFN0YXRlIGZyb20gJy4vQWJzdHJhY3RCbGVuZFN0YXRlJztcclxuXHJcbi8qKlxyXG4gKiBDbGFzcyBmb3IgYmxlbmRpbmcgTiBudW1iZXIgb2YgYmxlbmQgc3RhdGVzLlxyXG4gKlxyXG4gKiBAZXh0ZW5kcyBBYnN0cmFjdEJsZW5kU3RhdGVcclxuICovXHJcbmNsYXNzIEZyZWVCbGVuZFN0YXRlIGV4dGVuZHMgQWJzdHJhY3RCbGVuZFN0YXRlIHtcclxuICAvKipcclxuICAgKiBAY29uc3RydWN0b3JcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV0gLSBPcHRpb25zIGZvciB0aGUgY29udGFpbmVyIHN0YXRlLlxyXG4gICAqIEBwYXJhbSB7QXJyYXkuPEFic3RyYWN0U3RhdGU+fSBbYmxlbmRTdGF0ZXM9W11dIC0gQmxlbmQgc3RhdGVzIHRvIGJlIGNvbnRyb2xsZWQgYnlcclxuICAgKiB0aGlzIGNvbnRhaW5lci5cclxuICAgKi9cclxuICBjb25zdHJ1Y3RvcihvcHRpb25zID0ge30sIGJsZW5kU3RhdGVzID0gW10pIHtcclxuICAgIHN1cGVyKG9wdGlvbnMsIGJsZW5kU3RhdGVzKTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZUludGVybmFsV2VpZ2h0KGZhY3Rvcikge1xyXG4gICAgc3VwZXIudXBkYXRlSW50ZXJuYWxXZWlnaHQoZmFjdG9yKTtcclxuXHJcbiAgICAvLyBEZXRlcm1pbmUgdGhlIHRvdGFsIGFjdGl2ZSB3ZWlnaHQgb2YgYmxlbmQgc3RhdGVzXHJcbiAgICBsZXQgc3VtV2VpZ2h0cyA9IDA7XHJcblxyXG4gICAgdGhpcy5fc3RhdGVzLmZvckVhY2goc3RhdGUgPT4ge1xyXG4gICAgICBzdW1XZWlnaHRzICs9IHN0YXRlLndlaWdodDtcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIEVuc3VyZSB0aGUgc3VtIG9mIGJsZW5kIHN0YXRlIGludGVybmFsIHdlaWdodHMgZG9lcyBub3QgZXhjZWVkIGNvbnRhaW5lciBpbnRlcm5hbCB3ZWlnaHRcclxuICAgIGZhY3RvciAvPSBNYXRoLm1heChzdW1XZWlnaHRzLCAxKTtcclxuXHJcbiAgICAvLyBTdW0gb2YgYmxlbmQgc3RhdGUgaW50ZXJuYWwgd2VpZ2h0cyBzaG91bGQgbm90IGV4Y2VlZCBjb250YWluZXIgaW50ZXJuYWwgd2VpZ2h0XHJcbiAgICB0aGlzLl9zdGF0ZXMuZm9yRWFjaChzdGF0ZSA9PiB7XHJcbiAgICAgIHN0YXRlLnVwZGF0ZUludGVybmFsV2VpZ2h0KGZhY3RvciAqIHRoaXMuX3dlaWdodCk7XHJcbiAgICB9KTtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IEZyZWVCbGVuZFN0YXRlO1xyXG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cclxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVC0wXHJcbmltcG9ydCBEZWZlcnJlZCBmcm9tICdjb3JlL0RlZmVycmVkJztcclxuaW1wb3J0IEFic3RyYWN0QmxlbmRTdGF0ZSBmcm9tICcuL0Fic3RyYWN0QmxlbmRTdGF0ZSc7XHJcbmltcG9ydCBBbmltYXRpb25VdGlscyBmcm9tICcuLi9BbmltYXRpb25VdGlscyc7XHJcblxyXG4vKipcclxuICogQ2xhc3MgZm9yIGJsZW5kaW5nIE4gbnVtYmVyIG9mIGJsZW5kIHN0YXRlcyBiYXNlZCBvbiBhIHNpbmdsZVxyXG4gKiBwYXJhbWV0ZXIuXHJcbiAqXHJcbiAqIEBleHRlbmRzIEFic3RyYWN0QmxlbmRTdGF0ZVxyXG4gKi9cclxuY2xhc3MgQmxlbmQxZFN0YXRlIGV4dGVuZHMgQWJzdHJhY3RCbGVuZFN0YXRlIHtcclxuICAvKipcclxuICAgKiBAY29uc3RydWN0b3JcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gLSBPcHRpb25zIGZvciB0aGUgY29udGFpbmVyIHN0YXRlXHJcbiAgICogQHBhcmFtIHtBcnJheS48QWJzdHJhY3RCbGVuZFN0YXRlPn0gW2JsZW5kU3RhdGVzPVtdXSAtIEJsZW5kIHN0YXRlcyB0byBiZVxyXG4gICAqIGNvbnRyb2xsZWQgYnkgdGhpcyBjb250YWluZXIuXHJcbiAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gW2JsZW5kVGhyZXNob2xkcz1bXV0gLSBUaHJlc2hvbGQgdmFsdWVzIGZvciBhY3RpdmF0aW5nXHJcbiAgICogZWFjaCBibGVuZCBzdGF0ZS5cclxuICAgKiBAcGFyYW0ge0FycmF5Ljxib29sZWFuPn0gW3BoYXNlTWF0Y2hlcz1bXV0gLSBCb29sZWFucyBpbmRpY2F0aW5nIHdoZXRoZXIgb3Igbm90XHJcbiAgICogZWFjaCBibGVuZCBzdGF0ZSBzaG91bGQgYmUgcGhhc2UgbWF0Y2hlZC5cclxuICAgKi9cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIG9wdGlvbnMgPSB7fSxcclxuICAgIGJsZW5kU3RhdGVzID0gW10sXHJcbiAgICBibGVuZFRocmVzaG9sZHMgPSBbXSxcclxuICAgIHBoYXNlTWF0Y2hlcyA9IFtdXHJcbiAgKSB7XHJcbiAgICBzdXBlcihvcHRpb25zLCBibGVuZFN0YXRlcyk7XHJcblxyXG4gICAgdGhpcy5fYmxlbmRWYWx1ZSA9IDA7XHJcbiAgICB0aGlzLl9wcm9taXNlcyA9IHtcclxuICAgICAgLi4udGhpcy5fcHJvbWlzZXMsXHJcbiAgICAgIGJsZW5kVmFsdWU6IERlZmVycmVkLnJlc29sdmUoKSxcclxuICAgIH07XHJcblxyXG4gICAgLy8gVmFsaWRhdGUgdGhlcmUgYXJlIG5vIGR1cGxpY2F0ZSB0aHJlc2hvbGRzXHJcbiAgICBjb25zdCBub25aZXJvRGlmZmVyZW50U2l6ZSA9XHJcbiAgICAgIGJsZW5kU3RhdGVzLmxlbmd0aCAhPT0gMCAmJiBibGVuZFN0YXRlcy5sZW5ndGggIT09IGJsZW5kVGhyZXNob2xkcy5sZW5ndGg7XHJcbiAgICBpZiAobm9uWmVyb0RpZmZlcmVudFNpemUpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgIGBDYW5ub3QgY3JlYXRlIEJsZW5kMWRTdGF0ZSB3aXRoIGJsZW5kVGhyZXNob2xkcyAke2JsZW5kVGhyZXNob2xkc30uIEJsZW5kVGhyZXNob2xkcyBjb3VudCBkb2VzIG5vdCBtYXRjaCBibGVuZFN0YXRlcyBjb3VudC5gXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgY29udGFpbnNEdXBsaWNhdGVzID1cclxuICAgICAgbmV3IFNldChibGVuZFRocmVzaG9sZHMpLnNpemUgIT09IGJsZW5kVGhyZXNob2xkcy5sZW5ndGg7XHJcbiAgICBpZiAoY29udGFpbnNEdXBsaWNhdGVzKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgQ2Fubm90IGNyZWF0ZSBCbGVuZDFkU3RhdGUgd2l0aCBibGVuZFRocmVzaG9sZHMgJHtibGVuZFRocmVzaG9sZHN9LiBCbGVuZFRocmVzaG9sZHMgY29udGFpbnMgZHVwbGljYXRlIHZhbHVlc2BcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBJbml0aWFsaXplIHRoZSB0aHJlc2hvbGRzIG1hcFxyXG4gICAgdGhpcy5fdGhyZXNob2xkcyA9IFtdO1xyXG4gICAgWy4uLnRoaXMuX3N0YXRlcy52YWx1ZXMoKV0uZm9yRWFjaCgoc3RhdGUsIGluZGV4KSA9PiB7XHJcbiAgICAgIHRoaXMuX3RocmVzaG9sZHMucHVzaCh7XHJcbiAgICAgICAgdmFsdWU6IGJsZW5kVGhyZXNob2xkc1tpbmRleF0sXHJcbiAgICAgICAgbmFtZTogc3RhdGUubmFtZSxcclxuICAgICAgICBwaGFzZU1hdGNoOiBwaGFzZU1hdGNoZXNbaW5kZXhdIHx8IGZhbHNlLFxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuX3NvcnRUaHJlc2hvbGRzKCk7XHJcbiAgICB0aGlzLl9mb3JjZU5vVGhyZXNob2xkRHVwZXMgPSB0cnVlO1xyXG5cclxuICAgIHRoaXMuX3BoYXNlTGVhZFN0YXRlID0gbnVsbDtcclxuXHJcbiAgICB0aGlzLl91cGRhdGVCbGVuZFdlaWdodHMoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgYW5kIHNldHMgdGhlIGJsZW5kIHBhcmFtZXRlciB2YWx1ZS5cclxuICAgKi9cclxuICBnZXQgYmxlbmRWYWx1ZSgpIHtcclxuICAgIHJldHVybiB0aGlzLl9ibGVuZFZhbHVlO1xyXG4gIH1cclxuXHJcbiAgc2V0IGJsZW5kVmFsdWUodmFsdWUpIHtcclxuICAgIHRoaXMuX2JsZW5kVmFsdWUgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgd2hldGhlciBvciBub3QgdGhlIGJsZW5kIHZhbHVlIGlzIGN1cnJlbnRseSBiZWluZyBhbmltYXRlZC5cclxuICAgKi9cclxuICBnZXQgYmxlbmRWYWx1ZVBlbmRpbmcoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fcHJvbWlzZXMuYmxlbmRWYWx1ZSAmJiB0aGlzLl9wcm9taXNlcy5ibGVuZFZhbHVlLnBlbmRpbmc7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGVzIHRoZSB1c2VyIGRlZmluZWQgd2VpZ2h0IG92ZXIgdGltZS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7bnVsbH0gbmFtZSAtIFVudXNlZCBwYXJhbWV0ZXIuXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IHdlaWdodCAtIFRoZSB0YXJnZXQgd2VpZ2h0IHZhbHVlLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbc2Vjb25kcz0wXSAtIFRoZSBhbW91bnQgb2YgdGltZSBpdCB3aWxsIHRha2UgdG8gcmVhY2ggdGhlXHJcbiAgICogdGFyZ2V0IHdlaWdodC5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gZWFzaW5nRm4gLSBUaGUgZWFzaW5nIGZ1bmN0aW9uIHRvIHVzZSBmb3IgaW50ZXJwb2xhdGlvbi5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtEZWZlcnJlZH1cclxuICAgKi9cclxuICBzZXRCbGVuZFdlaWdodChuYW1lLCB2YWx1ZSwgc2Vjb25kcyA9IDAsIGVhc2luZ0ZuKSB7XHJcbiAgICB0aGlzLl9wcm9taXNlcy5ibGVuZFZhbHVlLmNhbmNlbCgpO1xyXG5cclxuICAgIHRoaXMuX3Byb21pc2VzLmJsZW5kVmFsdWUgPSBBbmltYXRpb25VdGlscy5pbnRlcnBvbGF0ZVByb3BlcnR5KFxyXG4gICAgICB0aGlzLFxyXG4gICAgICAnYmxlbmRWYWx1ZScsXHJcbiAgICAgIHZhbHVlLFxyXG4gICAgICB7XHJcbiAgICAgICAgc2Vjb25kcyxcclxuICAgICAgICBlYXNpbmdGbixcclxuICAgICAgICBvblByb2dyZXNzOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLl91cGRhdGVCbGVuZFdlaWdodHMoKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIG9uRmluaXNoOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLl91cGRhdGVCbGVuZFdlaWdodHMoKTtcclxuICAgICAgICB9LFxyXG4gICAgICB9XHJcbiAgICApO1xyXG5cclxuICAgIHJldHVybiB0aGlzLl9wcm9taXNlcy5ibGVuZFZhbHVlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgdXNlciBkZWZpbmVkIHdlaWdodC5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XHJcbiAgICovXHJcbiAgZ2V0QmxlbmRXZWlnaHQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5ibGVuZFZhbHVlO1xyXG4gIH1cclxuXHJcbiAgYWRkU3RhdGUoc3RhdGUsIHRocmVzaG9sZFZhbHVlID0gMCwgcGhhc2VNYXRjaCA9IGZhbHNlKSB7XHJcbiAgICB0aGlzLl90aHJlc2hvbGRzID0gdGhpcy5fdGhyZXNob2xkcyB8fCBbXTtcclxuXHJcbiAgICAvLyBNYWtlIHN1cmUgdGhlcmUgaXMgbm90IGFscmVhZHkgYSBzdGF0ZSB3aXRoIHRoaXMgdGhyZXNob2xkXHJcbiAgICBjb25zdCBzYW1lVmFsdWUgPSB0aGlzLl90aHJlc2hvbGRzLmZpbmQoXHJcbiAgICAgIHRocmVzaG9sZCA9PiB0aHJlc2hvbGQudmFsdWUgPT09IHRocmVzaG9sZFZhbHVlXHJcbiAgICApO1xyXG4gICAgaWYgKHRoaXMuX2ZvcmNlTm9UaHJlc2hvbGREdXBlcyAmJiBzYW1lVmFsdWUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgYENhbm5vdCBzZXQgYmxlbmQgdGhyZXNob2xkIG9mICR7dGhyZXNob2xkVmFsdWV9IGZvciBzdGF0ZSAke3N0YXRlLm5hbWV9IG9uICR7dGhpcy5uYW1lfS4gQSBzdGF0ZSBhbHJlYWR5IGV4aXN0cyB3aXRoIHRoYXQgdGhyZXNob2xkLmBcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBzdXBlci5hZGRTdGF0ZShzdGF0ZSk7XHJcbiAgICB0aGlzLl90aHJlc2hvbGRzLnB1c2goe1xyXG4gICAgICB2YWx1ZTogdGhyZXNob2xkVmFsdWUsXHJcbiAgICAgIG5hbWU6IHN0YXRlLm5hbWUsXHJcbiAgICAgIHBoYXNlTWF0Y2g6IHBoYXNlTWF0Y2ggfHwgZmFsc2UsXHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLl9zb3J0VGhyZXNob2xkcygpO1xyXG5cclxuICAgIHJldHVybiBzdGF0ZS5uYW1lO1xyXG4gIH1cclxuXHJcbiAgcmVtb3ZlU3RhdGUobmFtZSkge1xyXG4gICAgY29uc3QgcmVtb3ZlZCA9IHN1cGVyLnJlbW92ZVN0YXRlKG5hbWUpO1xyXG5cclxuICAgIGlmIChyZW1vdmVkKSB7XHJcbiAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fdGhyZXNob2xkcy5maW5kSW5kZXgoXHJcbiAgICAgICAgdGhyZXNob2xkID0+IHRocmVzaG9sZC5uYW1lID09PSBuYW1lXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuX3RocmVzaG9sZHMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcmVtb3ZlZDtcclxuICB9XHJcblxyXG4gIHJlbmFtZVN0YXRlKGN1cnJlbnROYW1lLCBuZXdOYW1lKSB7XHJcbiAgICBuZXdOYW1lID0gc3VwZXIucmVuYW1lU3RhdGUoY3VycmVudE5hbWUsIG5ld05hbWUpO1xyXG5cclxuICAgIGNvbnN0IHRocmVzaG9sZCA9IHRoaXMuX3RocmVzaG9sZHMuZmluZChcclxuICAgICAgdGhyZXNob2xkID0+IHRocmVzaG9sZC5uYW1lID09PSBjdXJyZW50TmFtZVxyXG4gICAgKTtcclxuICAgIHRocmVzaG9sZC5uYW1lID0gbmV3TmFtZTtcclxuXHJcbiAgICByZXR1cm4gbmV3TmFtZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIHRocmVzaG9sZCB2YWx1ZSBvZiBhIGJsZW5kIHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgbmFtZS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gTmFtZSBvZiB0aGUgYmxlbmQgdG8gZ2V0IHRoZSB0aHJlc2hvbGQgb2YuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBUaHJlaG9sZCB2YWx1ZS5cclxuICAgKi9cclxuICBnZXRCbGVuZFRocmVzaG9sZChuYW1lKSB7XHJcbiAgICBjb25zdCB0aHJlc2hvbGQgPSB0aGlzLl90aHJlc2hvbGRzLmZpbmQoXHJcbiAgICAgIHRocmVzaG9sZCA9PiB0aHJlc2hvbGQubmFtZSA9PT0gbmFtZVxyXG4gICAgKTtcclxuXHJcbiAgICBpZiAodGhyZXNob2xkID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgIGBDYW5ub3QgZ2V0IGJsZW5kIHRocmVzaG9sZCBvZiBzdGF0ZSAke25hbWV9IG9uICR7dGhpcy5uYW1lfS4gTm8gc3RhdGUgZXhpc3RzIHdpdGggdGhhdCBuYW1lLmBcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhyZXNob2xkLnZhbHVlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0cyB0aGUgdGhyZXNob2xkIHZhbHVlIG9mIGEgYmxlbmQgd2l0aCB0aGUgY29ycmVzcG9uZGluZyBuYW1lLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBOYW1lIG9mIHRoZSBibGVuZCB0byBzZXQgdGhlIHRocmVzaG9sZC5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgLSBWYWx1ZSBvZiB0aGUgdGhyZXNob2xkIHRvIHNldC5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IFNldCB0aHJlc2hvbGQgdmFsdWUuXHJcbiAgICovXHJcbiAgc2V0QmxlbmRUaHJlc2hvbGQobmFtZSwgdmFsdWUpIHtcclxuICAgIC8vIE1ha2Ugc3VyZSB0aGVyZSBpcyBub3QgYWxyZWFkeSBhIHN0YXRlIHdpdGggdGhpcyB0aHJlc2hvbGRcclxuICAgIGNvbnN0IHNhbWVWYWx1ZSA9IHRoaXMuX3RocmVzaG9sZHMuZmluZChcclxuICAgICAgdGhyZXNob2xkID0+IHRocmVzaG9sZC52YWx1ZSA9PT0gdmFsdWVcclxuICAgICk7XHJcbiAgICBpZiAoc2FtZVZhbHVlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgIGBDYW5ub3Qgc2V0IGJsZW5kIHRocmVzaG9sZCBvZiAke3ZhbHVlfSBmb3Igc3RhdGUgJHtuYW1lfSBvbiAke3RoaXMubmFtZX0uIEEgc3RhdGUgYWxyZWFkeSBleGlzdHMgd2l0aCB0aGF0IHRocmVzaG9sZC5gXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdGhyZXNob2xkID0gdGhpcy5fdGhyZXNob2xkcy5maW5kKFxyXG4gICAgICB0aHJlc2hvbGQgPT4gdGhyZXNob2xkLm5hbWUgPT09IG5hbWVcclxuICAgICk7XHJcblxyXG4gICAgaWYgKHRocmVzaG9sZCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgQ2Fubm90IHNldCBibGVuZCB0aHJlc2hvbGQgb2Ygc3RhdGUgJHtuYW1lfSBvbiAke3RoaXMubmFtZX0uIE5vIHN0YXRlIGV4aXN0cyB3aXRoIHRoYXQgbmFtZS5gXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhyZXNob2xkLnZhbHVlID0gdmFsdWU7XHJcblxyXG4gICAgdGhpcy5fc29ydFRocmVzaG9sZHMoKTtcclxuXHJcbiAgICByZXR1cm4gdGhyZXNob2xkLnZhbHVlO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlSW50ZXJuYWxXZWlnaHQoZmFjdG9yKSB7XHJcbiAgICBzdXBlci51cGRhdGVJbnRlcm5hbFdlaWdodChmYWN0b3IpO1xyXG5cclxuICAgIGlmICh0aGlzLl9waGFzZUxlYWRTdGF0ZSkge1xyXG4gICAgICB0aGlzLl9zdGF0ZXMuZm9yRWFjaChzdGF0ZSA9PiB7XHJcbiAgICAgICAgaWYgKHN0YXRlLndlaWdodCAhPT0gMCkge1xyXG4gICAgICAgICAgc3RhdGUubm9ybWFsaXplZFRpbWUgPSB0aGlzLl9waGFzZUxlYWRTdGF0ZS5ub3JtYWxpemVkVGltZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlcyB0aGUgYmxlbmQgd2VpZ2h0cyBiYXNlZCBvbiB0aGVpciBjb3JyZXNwb25kaW5nIHRocmVzaG9sZCB2YWx1ZXNcclxuICAgKiBhbmQgdGhlIGN1cnJlbnQgYmxlbmRWYWx1ZS4gQWRkaXRpb25hbGx5LCBzZXRzIGEgbGVhZCBwaGFzZSBzdGF0ZSBpZiB0aGVcclxuICAgKiBjb25kaXRpb25zIGZvciBwaGFzZS1tYXRjaGluZyBoYXZlIGJlZW4gc2F0aXNmaWVkLlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBfdXBkYXRlQmxlbmRXZWlnaHRzKCkge1xyXG4gICAgaWYgKHRoaXMuX3RocmVzaG9sZHMubGVuZ3RoID09PSAwKSByZXR1cm47XHJcblxyXG4gICAgaWYgKHRoaXMuX3RocmVzaG9sZHMubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgIGNvbnN0IHN0YXRlID0gdGhpcy5fc3RhdGVzLmdldCh0aGlzLl90aHJlc2hvbGRzWzBdLm5hbWUpO1xyXG4gICAgICBzdGF0ZS5zZXRXZWlnaHQoMSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBJbml0aWFsbHkgc2V0IGFsbCBzdWItc3RhdGUgd2VpZ2h0cyB0byB6ZXJvXHJcbiAgICB0aGlzLl9zdGF0ZXMuZm9yRWFjaChzdGF0ZSA9PiB7XHJcbiAgICAgIHN0YXRlLnNldFdlaWdodCgwKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuX3BoYXNlTGVhZFN0YXRlID0gbnVsbDtcclxuXHJcbiAgICAvLyBGaW5kIHRoZSBmaXJzdCB0aHJlc2hvbGQgdGhhdCBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhlIHBhcmFtZXRlciB2YWx1ZVxyXG4gICAgbGV0IHRhcmdldEluZGV4ID0gdGhpcy5fdGhyZXNob2xkcy5maW5kSW5kZXgodGhyZXNob2xkID0+IHtcclxuICAgICAgcmV0dXJuIHRocmVzaG9sZC52YWx1ZSA+PSB0aGlzLl9ibGVuZFZhbHVlO1xyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKHRhcmdldEluZGV4ID09PSAwIHx8IHRhcmdldEluZGV4ID09PSAtMSkge1xyXG4gICAgICAvLyBHaXZlIG9uZSBzdGF0ZSBmdWxsIGluZmx1ZW5jZVxyXG4gICAgICB0YXJnZXRJbmRleCA9IHRhcmdldEluZGV4ID09PSAtMSA/IHRoaXMuX3RocmVzaG9sZHMubGVuZ3RoIC0gMSA6IDA7XHJcbiAgICAgIGNvbnN0IHN0YXRlID0gdGhpcy5fc3RhdGVzLmdldCh0aGlzLl90aHJlc2hvbGRzW3RhcmdldEluZGV4XS5uYW1lKTtcclxuICAgICAgc3RhdGUuc2V0V2VpZ2h0KDEpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gTGluZWFyIGludGVycG9sYXRlIGluZmx1ZW5jZSBiZXR3ZWVuIHR3byBzdGF0ZXNcclxuICAgICAgY29uc3QgdGhyZXNob2xkQSA9IHRoaXMuX3RocmVzaG9sZHNbdGFyZ2V0SW5kZXggLSAxXTtcclxuICAgICAgY29uc3QgdGhyZXNob2xkQiA9IHRoaXMuX3RocmVzaG9sZHNbdGFyZ2V0SW5kZXhdO1xyXG5cclxuICAgICAgY29uc3QgZmFjdG9yQiA9XHJcbiAgICAgICAgKHRoaXMuYmxlbmRWYWx1ZSAtIHRocmVzaG9sZEEudmFsdWUpIC9cclxuICAgICAgICAodGhyZXNob2xkQi52YWx1ZSAtIHRocmVzaG9sZEEudmFsdWUpO1xyXG4gICAgICBjb25zdCBmYWN0b3JBID0gMSAtIGZhY3RvckI7XHJcblxyXG4gICAgICBjb25zdCBzdGF0ZUEgPSB0aGlzLl9zdGF0ZXMuZ2V0KHRocmVzaG9sZEEubmFtZSk7XHJcbiAgICAgIGNvbnN0IHN0YXRlQiA9IHRoaXMuX3N0YXRlcy5nZXQodGhyZXNob2xkQi5uYW1lKTtcclxuXHJcbiAgICAgIHN0YXRlQS5zZXRXZWlnaHQoZmFjdG9yQSk7XHJcbiAgICAgIHN0YXRlQi5zZXRXZWlnaHQoZmFjdG9yQik7XHJcblxyXG4gICAgICAvLyBTZXQgcGhhc2UtbWF0Y2hpbmcgaWYgbmVlZGVkXHJcbiAgICAgIGlmICh0aHJlc2hvbGRBLnBoYXNlTWF0Y2ggJiYgdGhyZXNob2xkQi5waGFzZU1hdGNoKSB7XHJcbiAgICAgICAgdGhpcy5fcGhhc2VMZWFkU3RhdGUgPSBmYWN0b3JBID4gZmFjdG9yQiA/IHN0YXRlQSA6IHN0YXRlQjtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU29ydHMgdGhlIHRocmVzaG9sZHMgZnJvbSBsb3cgdG8gaGlnaCBiYXNlZCBvbiB2YWx1ZS5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICovXHJcbiAgX3NvcnRUaHJlc2hvbGRzKCkge1xyXG4gICAgdGhpcy5fdGhyZXNob2xkcy5zb3J0KChhLCBiKSA9PiBhLnZhbHVlIC0gYi52YWx1ZSk7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBCbGVuZDFkU3RhdGU7XHJcbiIsIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxyXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTBcclxuLyogZXNsaW50LWRpc2FibGUgbm8tdW5kZXJzY29yZS1kYW5nbGUgKi9cclxuaW1wb3J0IERlZmVycmVkIGZyb20gJ2NvcmUvRGVmZXJyZWQnO1xyXG5pbXBvcnQgTWF0aFV0aWxzIGZyb20gJ2NvcmUvTWF0aFV0aWxzJztcclxuaW1wb3J0IEFic3RyYWN0QmxlbmRTdGF0ZSBmcm9tICcuL0Fic3RyYWN0QmxlbmRTdGF0ZSc7XHJcbmltcG9ydCBBbmltYXRpb25VdGlscyBmcm9tICcuLi9BbmltYXRpb25VdGlscyc7XHJcblxyXG4vKipcclxuICogQ2xhc3MgZm9yIGJsZW5kaW5nIE4gbnVtYmVyIG9mIGJsZW5kIHN0YXRlcyBiYXNlZCBvbiB0d29cclxuICogcGFyYW10ZXJzLlxyXG4gKlxyXG4gKiBAZXh0ZW5kcyBBYnN0cmFjdEJsZW5kU3RhdGVcclxuICovXHJcbmNsYXNzIEJsZW5kMmRTdGF0ZSBleHRlbmRzIEFic3RyYWN0QmxlbmRTdGF0ZSB7XHJcbiAgLyoqXHJcbiAgICogQGNvbnN0cnVjdG9yXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIC0gT3B0aW9ucyBmb3IgdGhlIGNvbnRhaW5lciBzdGF0ZVxyXG4gICAqIEBwYXJhbSB7QXJyYXkuPEFic3RyYWN0QmxlbmRTdGF0ZT59IFtibGVuZFN0YXRlcz1bXV0gLSBCbGVuZCBzdGF0ZXMgdG8gYmVcclxuICAgKiBjb250cm9sbGVkIGJ5IHRoaXMgY29udGFpbmVyLlxyXG4gICAqIEBwYXJhbSB7QXJyYXkuPEFycmF5LjxudW1iZXI+Pn0gW2JsZW5kVGhyZXNob2xkcz1bXV0gLSBUaHJlc2hvbGQgdmFsdWVzIGZvciBhY3RpdmF0aW5nXHJcbiAgICogZWFjaCBibGVuZCBzdGF0ZS5cclxuICAgKiBAcGFyYW0ge0FycmF5Ljxib29sZWFuPn0gW3BoYXNlTWF0Y2hlcz1bXV0gLSBCb29sZWFucyBpbmRpY2F0aW5nIHdoZXRoZXIgb3Igbm90XHJcbiAgICogZWFjaCBibGVuZCBzdGF0ZSBzaG91bGQgYmUgcGhhc2UgbWF0Y2hlZC5cclxuICAgKi9cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIG9wdGlvbnMgPSB7fSxcclxuICAgIGJsZW5kU3RhdGVzID0gW10sXHJcbiAgICBibGVuZFRocmVzaG9sZHMgPSBbXSxcclxuICAgIHBoYXNlTWF0Y2hlcyA9IFtdXHJcbiAgKSB7XHJcbiAgICBzdXBlcihvcHRpb25zLCBibGVuZFN0YXRlcyk7XHJcblxyXG4gICAgaWYgKGJsZW5kU3RhdGVzLmxlbmd0aCAhPT0gYmxlbmRUaHJlc2hvbGRzLmxlbmd0aCkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgYENhbm5vdCBjcmVhdGUgQmxlbmQyZFN0YXRlIHdpdGggYmxlbmRTdGF0ZXMgJHtibGVuZFN0YXRlc30gYW5kIGJsZW5kVGhyZXNob2xkcyAke2JsZW5kVGhyZXNob2xkc30uIENvdW50IG9mIGJsZW5kU3RhdGVzIG11c3QgbWF0Y2ggY291bnQgb2YgYmxlbmRUaHJlc2hvbGRzLmBcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBibGVuZFRocmVzaG9sZHNcclxuICAgICAgLnNsaWNlKDAsIGJsZW5kVGhyZXNob2xkcy5sZW5ndGggLSAxKVxyXG4gICAgICAuZm9yRWFjaCgodGhyZXNob2xkLCBpbmRleCkgPT4ge1xyXG4gICAgICAgIGJsZW5kVGhyZXNob2xkcy5zbGljZShpbmRleCArIDEpLmZvckVhY2gob3RoZXJUaHJlc2hvbGQgPT4ge1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICB0aHJlc2hvbGRbMF0gPT09IG90aGVyVGhyZXNob2xkWzBdICYmXHJcbiAgICAgICAgICAgIHRocmVzaG9sZFsxXSA9PT0gb3RoZXJUaHJlc2hvbGRbMV1cclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgICAgICAgYENhbm5vdCBjcmVhdGUgQmxlbmQyZFN0YXRlIHdpdGggYmxlbmRUaHJlc2hvbGRzICR7YmxlbmRUaHJlc2hvbGRzfS4gTm8gZHVwbGljYXRlIHZhbHVlcyBhbGxvd2VkIGluIGJsZW5kVGhyZXNob2xkcy5gXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIHRoaXMuX2JsZW5kVmFsdWVYID0gMDtcclxuICAgIHRoaXMuX2JsZW5kVmFsdWVZID0gMDtcclxuXHJcbiAgICB0aGlzLl9wcm9taXNlcyA9IHtcclxuICAgICAgLi4udGhpcy5fcHJvbWlzZXMsXHJcbiAgICAgIGJsZW5kVmFsdWVYOiBEZWZlcnJlZC5yZXNvbHZlKCksXHJcbiAgICAgIGJsZW5kVmFsdWVZOiBEZWZlcnJlZC5yZXNvbHZlKCksXHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMuX3RocmVzaG9sZHMgPSBbXTtcclxuICAgIFsuLi50aGlzLl9zdGF0ZXMudmFsdWVzKCldLmZvckVhY2goKHN0YXRlLCBpbmRleCkgPT4ge1xyXG4gICAgICB0aGlzLl90aHJlc2hvbGRzLnB1c2goe1xyXG4gICAgICAgIG5hbWU6IHN0YXRlLm5hbWUsXHJcbiAgICAgICAgcGhhc2VNYXRjaDogcGhhc2VNYXRjaGVzW2luZGV4XSB8fCBmYWxzZSxcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLl92ZXJ0aWNlcyA9IGJsZW5kVGhyZXNob2xkcztcclxuXHJcbiAgICBpZiAodGhpcy5fdmVydGljZXMubGVuZ3RoID49IDMpIHtcclxuICAgICAgdGhpcy5fdHJpYW5nbGVzID0gTWF0aFV0aWxzLmdldERlbGF1bmF5VHJpYW5ndWxhdGlvbih0aGlzLl92ZXJ0aWNlcyk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fcGhhc2VMZWFkU3RhdGUgPSBudWxsO1xyXG5cclxuICAgIHRoaXMuX3VwZGF0ZUJsZW5kV2VpZ2h0cygpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlcyB0aGUgdXNlciBkZWZpbmVkIHdlaWdodCBvdmVyIHRpbWUuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIE5hbWUgb2YgYmxlbmQgd2VpZ2h0IHRvIHVwZGF0ZS5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gd2VpZ2h0IC0gVGFyZ2V0IHdlaWdodCB2YWx1ZS5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gW3NlY29uZHM9MF0gLSBUaGUgYW1vdW50IG9mIHRpbWUgaXQgd2lsbCB0YWtlIHRvIHJlYWNoIHRoZVxyXG4gICAqIHRhcmdldCB2YWx1ZS5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gZWFzaW5nRm4gLSBUaGUgZWFzaW5nIGZ1bmN0aW9uIHRvIHVzZSBmb3IgaW50ZXJwb2xhdGlvbi5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtEZWZlcnJlZH1cclxuICAgKi9cclxuICBzZXRCbGVuZFdlaWdodChuYW1lLCB2YWx1ZSwgc2Vjb25kcyA9IDAsIGVhc2luZ0ZuKSB7XHJcbiAgICBjb25zdCBwcm9wZXJ0eSA9IGBibGVuZFZhbHVlJHtuYW1lLnRvVXBwZXJDYXNlKCl9YDtcclxuICAgIGlmIChwcm9wZXJ0eSAhPT0gJ2JsZW5kVmFsdWVYJyAmJiBwcm9wZXJ0eSAhPT0gJ2JsZW5kVmFsdWVZJykge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgYENhbm5vdCBzZXQgYmxlbmQgd2VpZ2h0IGZvciAke25hbWV9IG9uICR7dGhpcy5uYW1lfS4gQmxlbmQyZFN0YXRlIG9ubHkgYWNjZXB0cyAnWCcgb3IgJ1knIGZvciBzZXRCbGVuZFdlaWdodGBcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9wcm9taXNlc1twcm9wZXJ0eV0uY2FuY2VsKCk7XHJcblxyXG4gICAgdGhpcy5fcHJvbWlzZXNbcHJvcGVydHldID0gQW5pbWF0aW9uVXRpbHMuaW50ZXJwb2xhdGVQcm9wZXJ0eShcclxuICAgICAgdGhpcyxcclxuICAgICAgcHJvcGVydHksXHJcbiAgICAgIHZhbHVlLFxyXG4gICAgICB7XHJcbiAgICAgICAgc2Vjb25kcyxcclxuICAgICAgICBlYXNpbmdGbixcclxuICAgICAgICBvblByb2dyZXNzOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLl91cGRhdGVCbGVuZFdlaWdodHMoKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIG9uRmluaXNoOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLl91cGRhdGVCbGVuZFdlaWdodHMoKTtcclxuICAgICAgICB9LFxyXG4gICAgICB9XHJcbiAgICApO1xyXG5cclxuICAgIHJldHVybiB0aGlzLl9wcm9taXNlc1twcm9wZXJ0eV07XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSB1c2VyIGRlZmluZWQgd2VpZ2h0LlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBOYW1lIG9mIGJsZW5kIHdlaWdodC5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XHJcbiAgICovXHJcbiAgZ2V0QmxlbmRXZWlnaHQobmFtZSkge1xyXG4gICAgY29uc3QgcHJvcGVydHkgPSBuYW1lLnRvVXBwZXJDYXNlKCk7XHJcbiAgICBpZiAocHJvcGVydHkgIT09ICdYJyAmJiBwcm9wZXJ0eSAhPT0gJ1knKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgQ2Fubm90IGdldCBibGVuZCB3ZWlnaHQgZm9yICR7bmFtZX0gb24gJHt0aGlzLm5hbWV9LiBCbGVuZDJkU3RhdGUgb25seSBhY2NlcHRzICdYJyBvciAnWScgZm9yIGdldEJsZW5kV2VpZ2h0YFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBwcm9wZXJ0eSA9PT0gJ1gnID8gdGhpcy5fYmxlbmRWYWx1ZVggOiB0aGlzLl9ibGVuZFZhbHVlWTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgYW5kIHNldHMgdGhlIHggYmxlbmQgd2VpZ2h0LlxyXG4gICAqL1xyXG4gIGdldCBibGVuZFZhbHVlWCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9ibGVuZFZhbHVlWDtcclxuICB9XHJcblxyXG4gIHNldCBibGVuZFZhbHVlWCh2YWx1ZSkge1xyXG4gICAgdGhpcy5fYmxlbmRWYWx1ZVggPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgYW5kIHNldHMgdGhlIHkgYmxlbmQgd2VpZ2h0LlxyXG4gICAqL1xyXG4gIGdldCBibGVuZFZhbHVlWSgpIHtcclxuICAgIHJldHVybiB0aGlzLl9ibGVuZFZhbHVlWTtcclxuICB9XHJcblxyXG4gIHNldCBibGVuZFZhbHVlWSh2YWx1ZSkge1xyXG4gICAgdGhpcy5fYmxlbmRWYWx1ZVkgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgd2hldGhlciBvciBub3QgdGhlIHggYmxlbmQgdmFsdWUgaXMgY3VycmVudGx5IGJlaW5nIGFuaW1hdGVkLlxyXG4gICAqL1xyXG4gIGdldCBibGVuZFZhbHVlWFBlbmRpbmcoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fcHJvbWlzZXMuYmxlbmRWYWx1ZVggJiYgdGhpcy5fcHJvbWlzZXMuYmxlbmRWYWx1ZVgucGVuZGluZztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgd2hldGhlciBvciBub3QgdGhlIHkgYmxlbmQgdmFsdWUgaXMgY3VycmVudGx5IGJlaW5nIGFuaW1hdGVkLlxyXG4gICAqL1xyXG4gIGdldCBibGVuZFZhbHVlWVBlbmRpbmcoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fcHJvbWlzZXMuYmxlbmRWYWx1ZVkgJiYgdGhpcy5fcHJvbWlzZXMuYmxlbmRWYWx1ZVkucGVuZGluZztcclxuICB9XHJcblxyXG4gIHVwZGF0ZUludGVybmFsV2VpZ2h0KGZhY3Rvcikge1xyXG4gICAgc3VwZXIudXBkYXRlSW50ZXJuYWxXZWlnaHQoZmFjdG9yKTtcclxuXHJcbiAgICBpZiAodGhpcy5fcGhhc2VMZWFkU3RhdGUpIHtcclxuICAgICAgWy4uLnRoaXMuX3N0YXRlcy52YWx1ZXMoKV0uZm9yRWFjaCgoc3RhdGUsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgaWYgKHN0YXRlLndlaWdodCAhPT0gMCAmJiB0aGlzLl90aHJlc2hvbGRzW2luZGV4XS5waGFzZU1hdGNoKSB7XHJcbiAgICAgICAgICBzdGF0ZS5ub3JtYWxpemVkVGltZSA9IHRoaXMuX3BoYXNlTGVhZFN0YXRlLm5vcm1hbGl6ZWRUaW1lO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGVzIHRoZSBibGVuZCB3ZWlnaHRzIGJhc2VkIG9uIHRoZWlyIGNvcnJlc3BvbmRpbmcgdGhyZXNob2xkIHZhbHVlc1xyXG4gICAqIGFuZCB0aGUgY3VycmVudCBbeCx5XSBibGVuZFZhbHVlLiBBZGRpdGlvbmFsbHksIHNldHMgYSBsZWFkIHBoYXNlIHN0YXRlIGlmIHRoZVxyXG4gICAqIGNvbmRpdGlvbnMgZm9yIHBoYXNlLW1hdGNoaW5nIGhhdmUgYmVlbiBzYXRpc2ZpZWQuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIF91cGRhdGVCbGVuZFdlaWdodHMoKSB7XHJcbiAgICBpZiAoIXRoaXMuX3ZlcnRpY2VzIHx8IHRoaXMuX3ZlcnRpY2VzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xyXG5cclxuICAgIGlmICh0aGlzLl92ZXJ0aWNlcy5sZW5ndGggPT09IDEpIHtcclxuICAgICAgWy4uLnRoaXMuX3N0YXRlcy52YWx1ZXMoKV1bMF0ud2VpZ2h0ID0gMTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEluaXRpYWxseSBzZXQgYWxsIHN1Yi1zdGF0ZSB3ZWlnaHRzIHRvIHplcm9cclxuICAgIHRoaXMuX3N0YXRlcy5mb3JFYWNoKHN0YXRlID0+IHtcclxuICAgICAgc3RhdGUuc2V0V2VpZ2h0KDApO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLl9waGFzZUxlYWRTdGF0ZSA9IG51bGw7XHJcblxyXG4gICAgY29uc3QgcCA9IFt0aGlzLl9ibGVuZFZhbHVlWCwgdGhpcy5fYmxlbmRWYWx1ZVldO1xyXG5cclxuICAgIGlmICh0aGlzLl92ZXJ0aWNlcy5sZW5ndGggPT09IDIpIHtcclxuICAgICAgdGhpcy5fc2V0SW5mbHVlbmNlQ2xvc2VzdFBvaW50T25MaW5lKHApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgdHJpYW5nbGUgPSB0aGlzLl90cmlhbmdsZXMuZmluZCh0cmlhbmdsZSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIE1hdGhVdGlscy5pc1BvaW50SW5UcmlhbmdsZShcclxuICAgICAgICAgIHRoaXMuX3ZlcnRpY2VzW3RyaWFuZ2xlWzBdXSxcclxuICAgICAgICAgIHRoaXMuX3ZlcnRpY2VzW3RyaWFuZ2xlWzFdXSxcclxuICAgICAgICAgIHRoaXMuX3ZlcnRpY2VzW3RyaWFuZ2xlWzJdXSxcclxuICAgICAgICAgIHBcclxuICAgICAgICApO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGlmICh0cmlhbmdsZSkge1xyXG4gICAgICAgIHRoaXMuX3NldEluZmx1ZW5jZVRyaWFuZ2xlKHRyaWFuZ2xlLCBwKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLl9zZXRJbmZsdWVuY2VDbG9zZXN0UG9pbnRJblRyaWFuZ2xlcyhwKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0cyBibGVuZCB3ZWlnaHRzIGZvciBzdGF0ZXMgY29ycmVzcG9uZGluZyB0byBhXHJcbiAgICogdHJpYW5nbGUgb2YgdGhyZXNob2xkcyBhbmQgYSBnaXZlbiBbeCx5XSBibGVuZFZhbHVlcy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7QXJyYXkuPEFycmF5LjxudW1iZXI+Pn0gdHJpYW5nbGUgLSBTZXQgb2YgdHJpYW5nbHVhdGVkIGluZGljZXNcclxuICAgKiB0aGF0IGNvcnJlc3BvbmQgdG8gYmxlbmQgdGhyZXNob2xkcy5cclxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBwIC0gR2l2ZW4gW3gseV0gYmxlbmRWYWx1ZS5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICovXHJcbiAgX3NldEluZmx1ZW5jZVRyaWFuZ2xlKHRyaWFuZ2xlLCBwKSB7XHJcbiAgICBjb25zdCBhcmVhQSA9IE1hdGhVdGlscy50cmlhbmdsZUFyZWEoXHJcbiAgICAgIHRoaXMuX3ZlcnRpY2VzW3RyaWFuZ2xlWzFdXSxcclxuICAgICAgdGhpcy5fdmVydGljZXNbdHJpYW5nbGVbMl1dLFxyXG4gICAgICBwXHJcbiAgICApO1xyXG5cclxuICAgIGNvbnN0IGFyZWFCID0gTWF0aFV0aWxzLnRyaWFuZ2xlQXJlYShcclxuICAgICAgdGhpcy5fdmVydGljZXNbdHJpYW5nbGVbMF1dLFxyXG4gICAgICB0aGlzLl92ZXJ0aWNlc1t0cmlhbmdsZVsyXV0sXHJcbiAgICAgIHBcclxuICAgICk7XHJcblxyXG4gICAgY29uc3QgYXJlYUMgPSBNYXRoVXRpbHMudHJpYW5nbGVBcmVhKFxyXG4gICAgICB0aGlzLl92ZXJ0aWNlc1t0cmlhbmdsZVswXV0sXHJcbiAgICAgIHRoaXMuX3ZlcnRpY2VzW3RyaWFuZ2xlWzFdXSxcclxuICAgICAgcFxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCB0b3RhbEFyZWEgPSBhcmVhQSArIGFyZWFCICsgYXJlYUM7XHJcblxyXG4gICAgY29uc3Qgd2VpZ2h0QSA9IGFyZWFBIC8gdG90YWxBcmVhO1xyXG4gICAgY29uc3Qgd2VpZ2h0QiA9IGFyZWFCIC8gdG90YWxBcmVhO1xyXG4gICAgY29uc3Qgd2VpZ2h0QyA9IGFyZWFDIC8gdG90YWxBcmVhO1xyXG5cclxuICAgIGNvbnN0IHRocmVzaG9sZEEgPSB0aGlzLl90aHJlc2hvbGRzW3RyaWFuZ2xlWzBdXTtcclxuICAgIGNvbnN0IHRocmVzaG9sZEIgPSB0aGlzLl90aHJlc2hvbGRzW3RyaWFuZ2xlWzFdXTtcclxuICAgIGNvbnN0IHRocmVzaG9sZEMgPSB0aGlzLl90aHJlc2hvbGRzW3RyaWFuZ2xlWzJdXTtcclxuXHJcbiAgICBjb25zdCBzdGF0ZUEgPSB0aGlzLl9zdGF0ZXMuZ2V0KHRocmVzaG9sZEEubmFtZSk7XHJcbiAgICBjb25zdCBzdGF0ZUIgPSB0aGlzLl9zdGF0ZXMuZ2V0KHRocmVzaG9sZEIubmFtZSk7XHJcbiAgICBjb25zdCBzdGF0ZUMgPSB0aGlzLl9zdGF0ZXMuZ2V0KHRocmVzaG9sZEMubmFtZSk7XHJcblxyXG4gICAgc3RhdGVBLnNldFdlaWdodCh3ZWlnaHRBKTtcclxuICAgIHN0YXRlQi5zZXRXZWlnaHQod2VpZ2h0Qik7XHJcbiAgICBzdGF0ZUMuc2V0V2VpZ2h0KHdlaWdodEMpO1xyXG5cclxuICAgIHRoaXMuX3NldFBoYXNlTGVhZFN0YXRlKFxyXG4gICAgICBbc3RhdGVBLCBzdGF0ZUIsIHN0YXRlQ10sXHJcbiAgICAgIFt0aHJlc2hvbGRBLnBoYXNlTWF0Y2gsIHRocmVzaG9sZEIucGhhc2VNYXRjaCwgdGhyZXNob2xkQy5waGFzZU1hdGNoXVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERldGVybWluZXMgdGhlIGNsb3Nlc3QgcG9pbnQgd2l0aGluIGEgdHJpYW5nbGUgb2ZcclxuICAgKiB0aHJlc2hvbGRzIGJhc2VkIG9uIHRoZSBjdXJyZW50IFt4LHldIGJsZW5kVmFsdWVzIGFuZFxyXG4gICAqIHRoZW4gc2V0cyBibGVuZCB3ZWlnaHRzIGZvciB0aGUgY29ycmVzcG9uZGluZyBzdGF0ZXMuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBwIC0gR2l2ZW4gW3gseV0gYmxlbmRWYWx1ZS5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICovXHJcbiAgX3NldEluZmx1ZW5jZUNsb3Nlc3RQb2ludEluVHJpYW5nbGVzKHApIHtcclxuICAgIGxldCBnbG9iYWxDbG9zZXN0UG9pbnQgPSBudWxsO1xyXG4gICAgbGV0IGdsb2JhbE1pbkRpc3QgPSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7XHJcbiAgICBsZXQgY2xvc2VzdFRyaWFuZ2xlID0gLTE7XHJcblxyXG4gICAgdGhpcy5fdHJpYW5nbGVzLmZvckVhY2goKHRyaWFuZ2xlLCBpbmRleCkgPT4ge1xyXG4gICAgICBjb25zdCBwb2ludEEgPSBNYXRoVXRpbHMuY2xvc2VzdFBvaW50T25MaW5lKFxyXG4gICAgICAgIHRoaXMuX3ZlcnRpY2VzW3RyaWFuZ2xlWzBdXSxcclxuICAgICAgICB0aGlzLl92ZXJ0aWNlc1t0cmlhbmdsZVsxXV0sXHJcbiAgICAgICAgcFxyXG4gICAgICApO1xyXG4gICAgICBjb25zdCBwb2ludEIgPSBNYXRoVXRpbHMuY2xvc2VzdFBvaW50T25MaW5lKFxyXG4gICAgICAgIHRoaXMuX3ZlcnRpY2VzW3RyaWFuZ2xlWzFdXSxcclxuICAgICAgICB0aGlzLl92ZXJ0aWNlc1t0cmlhbmdsZVsyXV0sXHJcbiAgICAgICAgcFxyXG4gICAgICApO1xyXG4gICAgICBjb25zdCBwb2ludEMgPSBNYXRoVXRpbHMuY2xvc2VzdFBvaW50T25MaW5lKFxyXG4gICAgICAgIHRoaXMuX3ZlcnRpY2VzW3RyaWFuZ2xlWzJdXSxcclxuICAgICAgICB0aGlzLl92ZXJ0aWNlc1t0cmlhbmdsZVswXV0sXHJcbiAgICAgICAgcFxyXG4gICAgICApO1xyXG5cclxuICAgICAgY29uc3QgZGlzdEEgPSBNYXRoVXRpbHMuZGlzdGFuY2VTcXVhcmVkKHBvaW50QSwgcCk7XHJcbiAgICAgIGNvbnN0IGRpc3RCID0gTWF0aFV0aWxzLmRpc3RhbmNlU3F1YXJlZChwb2ludEIsIHApO1xyXG4gICAgICBjb25zdCBkaXN0QyA9IE1hdGhVdGlscy5kaXN0YW5jZVNxdWFyZWQocG9pbnRDLCBwKTtcclxuXHJcbiAgICAgIGxldCBsb2NhbENsb3Nlc3RQb2ludCA9IHBvaW50QztcclxuICAgICAgbGV0IGxvY2FsTWluRGlzdCA9IGRpc3RDO1xyXG5cclxuICAgICAgaWYgKGRpc3RBIDwgbG9jYWxNaW5EaXN0KSB7XHJcbiAgICAgICAgbG9jYWxDbG9zZXN0UG9pbnQgPSBwb2ludEE7XHJcbiAgICAgICAgbG9jYWxNaW5EaXN0ID0gZGlzdEE7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGRpc3RCIDwgbG9jYWxNaW5EaXN0KSB7XHJcbiAgICAgICAgbG9jYWxDbG9zZXN0UG9pbnQgPSBwb2ludEI7XHJcbiAgICAgICAgbG9jYWxNaW5EaXN0ID0gZGlzdEI7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChsb2NhbE1pbkRpc3QgPCBnbG9iYWxNaW5EaXN0KSB7XHJcbiAgICAgICAgZ2xvYmFsTWluRGlzdCA9IGxvY2FsTWluRGlzdDtcclxuICAgICAgICBnbG9iYWxDbG9zZXN0UG9pbnQgPSBbLi4ubG9jYWxDbG9zZXN0UG9pbnRdO1xyXG4gICAgICAgIGNsb3Nlc3RUcmlhbmdsZSA9IGluZGV4O1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLl9zZXRJbmZsdWVuY2VUcmlhbmdsZShcclxuICAgICAgdGhpcy5fdHJpYW5nbGVzW2Nsb3Nlc3RUcmlhbmdsZV0sXHJcbiAgICAgIGdsb2JhbENsb3Nlc3RQb2ludFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERldGVybWluZXMgdGhlIGNsb3Nlc3QgcG9pbnQgb24gdGhlIGxpbmUgZm9ybWVkIGJldHdlZW4gdGhlXHJcbiAgICogdHdvIGJsZW5kIHRocmVzaG9sZHMgYmFzZWQgb24gdGhlIGN1cnJlbnQgW3gseV0gYmxlbmRWYWx1ZXMgYW5kXHJcbiAgICogdGhlbiBzZXRzIGJsZW5kIHdlaWdodHMgZm9yIHRoZSBjb3JyZXNwb25kaW5nIHN0YXRlcy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IHAgLSBHaXZlbiBbeCx5XSBibGVuZFZhbHVlLlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBfc2V0SW5mbHVlbmNlQ2xvc2VzdFBvaW50T25MaW5lKHApIHtcclxuICAgIGNvbnN0IGNsb3Nlc3RQb2ludCA9IE1hdGhVdGlscy5jbG9zZXN0UG9pbnRPbkxpbmUoXHJcbiAgICAgIHRoaXMuX3ZlcnRpY2VzW1swXV0sXHJcbiAgICAgIHRoaXMuX3ZlcnRpY2VzW1sxXV0sXHJcbiAgICAgIHBcclxuICAgICk7XHJcblxyXG4gICAgY29uc3QgZGlzdEEgPSBNYXRoVXRpbHMuZGlzdGFuY2VTcXVhcmVkKHRoaXMuX3ZlcnRpY2VzWzBdLCBjbG9zZXN0UG9pbnQpO1xyXG4gICAgY29uc3QgZGlzdEIgPSBNYXRoVXRpbHMuZGlzdGFuY2VTcXVhcmVkKHRoaXMuX3ZlcnRpY2VzWzFdLCBjbG9zZXN0UG9pbnQpO1xyXG5cclxuICAgIGNvbnN0IHdlaWdodEEgPSBkaXN0QiAvIChkaXN0QSArIGRpc3RCKTtcclxuICAgIGNvbnN0IHdlaWdodEIgPSBkaXN0QSAvIChkaXN0QSArIGRpc3RCKTtcclxuXHJcbiAgICBjb25zdCB0aHJlc2hvbGRBID0gdGhpcy5fdGhyZXNob2xkc1swXTtcclxuICAgIGNvbnN0IHRocmVzaG9sZEIgPSB0aGlzLl90aHJlc2hvbGRzWzFdO1xyXG5cclxuICAgIGNvbnN0IHN0YXRlQSA9IHRoaXMuX3N0YXRlcy5nZXQodGhyZXNob2xkQS5uYW1lKTtcclxuICAgIGNvbnN0IHN0YXRlQiA9IHRoaXMuX3N0YXRlcy5nZXQodGhyZXNob2xkQi5uYW1lKTtcclxuXHJcbiAgICBzdGF0ZUEuc2V0V2VpZ2h0KHdlaWdodEEpO1xyXG4gICAgc3RhdGVCLnNldFdlaWdodCh3ZWlnaHRCKTtcclxuXHJcbiAgICB0aGlzLl9zZXRQaGFzZUxlYWRTdGF0ZShcclxuICAgICAgW3N0YXRlQSwgc3RhdGVCXSxcclxuICAgICAgW3RocmVzaG9sZEEucGhhc2VNYXRjaCwgdGhyZXNob2xkQi5waGFzZU1hdGNoXVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHMgYSBsZWFkIHBoYXNlIHN0YXRlIGlmIHRoZSBjb25kaXRpb25zXHJcbiAgICogZm9yIHBoYXNlLW1hdGNoaW5nIGFyZSBzYXRpc2ZpZWQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge0FycmF5LjxBYnN0cmFjdEJsZW5kU3RhdGU+fSBzdGF0ZXMgLSBTdGF0ZXMgdG9cclxuICAgKiBjaGVjayBwaGFzZS1tYXRjaGluZyBjcml0ZXJpYS5cclxuICAgKiBAcGFyYW0ge0FycmF5Ljxib29sZWFuPn0gcGhhc2VNYXRjaGVkIC0gTGlzdCBvZiBwaGFzZS1tYXRjaCBib29sZWFucy5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICovXHJcbiAgX3NldFBoYXNlTGVhZFN0YXRlKHN0YXRlcywgcGhhc2VNYXRjaGVkKSB7XHJcbiAgICBsZXQgbWF4ID0gMDtcclxuICAgIHN0YXRlcy5mb3JFYWNoKChzdGF0ZSwgaW5kZXgpID0+IHtcclxuICAgICAgaWYgKHBoYXNlTWF0Y2hlZFtpbmRleF0gJiYgc3RhdGUud2VpZ2h0ID4gbWF4KSB7XHJcbiAgICAgICAgdGhpcy5fcGhhc2VMZWFkU3RhdGUgPSBzdGF0ZTtcclxuICAgICAgICBtYXggPSBzdGF0ZS53ZWlnaHQ7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgQmxlbmQyZFN0YXRlO1xyXG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cclxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVC0wXHJcbmltcG9ydCBBYnN0cmFjdEJsZW5kU3RhdGUgZnJvbSAnLi9zdGF0ZS9BYnN0cmFjdEJsZW5kU3RhdGUnO1xyXG5pbXBvcnQgQW5pbWF0aW9uUGxheWVySW50ZXJmYWNlIGZyb20gJy4vQW5pbWF0aW9uUGxheWVySW50ZXJmYWNlJztcclxuaW1wb3J0IEFuaW1hdGlvblV0aWxzIGZyb20gJy4vQW5pbWF0aW9uVXRpbHMnO1xyXG5pbXBvcnQgTWF0aFV0aWxzIGZyb20gJy4uL01hdGhVdGlscyc7XHJcbmltcG9ydCBEZWZlcnJlZCBmcm9tICcuLi9EZWZlcnJlZCc7XHJcbmltcG9ydCBTdGF0ZUNvbnRhaW5lckludGVyZmFjZSBmcm9tICcuL3N0YXRlL1N0YXRlQ29udGFpbmVySW50ZXJmYWNlJztcclxuXHJcbi8qKlxyXG4gKiBFbnVtIGZvciB0eXBlcyBvZiB7QGxpbmsgQW5pbWF0aW9uTGF5ZXJ9IGJsZW5kaW5nLlxyXG4gKlxyXG4gKiBAcmVhZG9ubHlcclxuICogQGVudW0ge3N0cmluZ31cclxuICovXHJcbmV4cG9ydCBjb25zdCBMYXllckJsZW5kTW9kZXMgPSB7T3ZlcnJpZGU6ICdPdmVycmlkZScsIEFkZGl0aXZlOiAnQWRkaXRpdmUnfTtcclxuXHJcbi8qKlxyXG4gKiBUaGUgZGVmYXVsdCBibGVuZGluZyBtb2RlIHtAbGluayBBbmltYXRpb25MYXllcn0uXHJcbiAqXHJcbiAqIEByZWFkb25seVxyXG4gKiBAdHlwZSB7c3RyaW5nfVxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IERlZmF1bHRMYXllckJsZW5kTW9kZSA9ICdPdmVycmlkZSc7XHJcblxyXG4vKipcclxuICogQ2hlY2tzIGlmIGEgZ2l2ZW4gYmxlbmRNb2RlIGlzIHByZXNlbnQgaW4gdGhlIHZhbHVlcyBvZiB7QGxpbmsgTGF5ZXJCbGVuZE1vZGVzfS5cclxuICogSWYgaXQgaXMsIHJldHVybiB0aGUgb3JpZ2luYWwgdmFsdWUsIG90aGVyd2lzZSByZXR1cm4ge0BsaW5rIERlZmF1bHRMYXllckJsZW5kTW9kZX0uXHJcbiAqXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBibGVuZE1vZGUgLSBUaGUgbmFtZSBvZiB0aGUgdHlwZSBvZiBibGVuZGluZy5cclxuICpcclxuICogQHJldHVybnMgeyhzdHJpbmd8RGVmYXVsdExheWVyQmxlbmRNb2RlKX1cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUJsZW5kTW9kZShibGVuZE1vZGUpIHtcclxuICBpZiAoQXJyYXkuZnJvbShPYmplY3QudmFsdWVzKExheWVyQmxlbmRNb2RlcykpLmluY2x1ZGVzKGJsZW5kTW9kZSkpIHtcclxuICAgIHJldHVybiBibGVuZE1vZGU7XHJcbiAgfSBlbHNlIHtcclxuICAgIHJldHVybiBEZWZhdWx0TGF5ZXJCbGVuZE1vZGU7XHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogQ2xhc3MgZm9yIG1hbmFnaW5nIGEgc2V0IG9mIGFuaW1hdGlvbnMgd2hlcmUgb25seSBvbmUgc3RhdGUgY2FuIGJlIGFjdGl2ZSBhdFxyXG4gKiBhbnkgZ2l2ZW4gdGltZS5cclxuICpcclxuICogQGltcGxlbWVudHMgQW5pbWF0aW9uUGxheWVySW50ZXJmYWNlXHJcbiAqIEBpbXBsZW1lbnRzIFN0YXRlQ29udGFpbmVySW50ZXJmYWNlXHJcbiAqL1xyXG5jbGFzcyBBbmltYXRpb25MYXllciBleHRlbmRzIEFuaW1hdGlvblBsYXllckludGVyZmFjZS5NaXhpbihcclxuICBTdGF0ZUNvbnRhaW5lckludGVyZmFjZS5NaXhpbigpXHJcbikge1xyXG4gIC8qKlxyXG4gICAqIEBjb25zdHJ1Y3RvclxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtPYmplY3Q9fSBvcHRpb25zIC0gIE9wdGlvbnMgZm9yIHRoZSBhbmltYXRpb24gbGF5ZXIuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdGlvbnMubmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyLiBOYW1lcyBtdXN0IGJlIHVuaXF1ZSB0byB0aGVcclxuICAgKiBhbmltYXRpb24gZmVhdHVyZSB0aGF0IGNvbnRhaW5zIHRoZSBsYXllci5cclxuICAgKiBAcGFyYW0ge0xheWVyQmxlbmRNb2Rlc30gW29wdGlvbnMuYmxlbmRNb2RlPURlZmF1bHRMYXllckJsZW5kTW9kZV0gLVxyXG4gICAqIFR5cGUgb2YgYmxlbmRpbmcgdG8gdXNlIGZvciBhbGwgc3RhdGVzIGNvbnRyb2xsZWQgYnkgdGhlIGxheWVyLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy53ZWlnaHQ9MV0gLSBUaGUgYW1vdW50IG9mIGluZmx1ZW5jZSB0aGUgbGF5ZXIncyBjdXJyZW50XHJcbiAgICogYW5pbWF0aW9uIGhhcyBvdmVyIHRoZSByZXN1bHQgZm9yIHRoZSBob3N0LlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy50cmFuc2l0aW9uVGltZT0wXSAtIFRoZSBkZWZhdWx0IGFtb3VudCBvZiB0aW1lIHRvIHVzZSB3aGVuXHJcbiAgICogcGxheWluZyBhbmQgcmVzdW1pbmcgYW5pbWF0aW9ucy5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb3B0aW9ucy5lYXNpbmdGbiAtIFRoZSBkZWZhdWx0IGVhc2luZyBmdW5jdGlvbiB0byB1c2Ugd2hlblxyXG4gICAqIHRyYW5zaXRpb25pbmcgYmV0d2VlbiBhbmltYXRpb25zIGFuZCBzZXR0aW5nIGxheWVyIHdlaWdodC5cclxuICAgKi9cclxuICBjb25zdHJ1Y3RvcihvcHRpb25zID0ge30pIHtcclxuICAgIHN1cGVyKG9wdGlvbnMpO1xyXG5cclxuICAgIHRoaXMubmFtZSA9IG9wdGlvbnMubmFtZSA9PT0gdW5kZWZpbmVkID8gJ0FuaW1hdGlvbkxheWVyJyA6IG9wdGlvbnMubmFtZTtcclxuICAgIHRoaXMuX2JsZW5kTW9kZSA9IEFycmF5LmZyb20oT2JqZWN0LnZhbHVlcyhMYXllckJsZW5kTW9kZXMpKS5pbmNsdWRlcyhcclxuICAgICAgb3B0aW9ucy5ibGVuZE1vZGVcclxuICAgIClcclxuICAgICAgPyBvcHRpb25zLmJsZW5kTW9kZVxyXG4gICAgICA6IERlZmF1bHRMYXllckJsZW5kTW9kZTtcclxuICAgIHRoaXMuX3Byb21pc2VzID0ge1xyXG4gICAgICB3ZWlnaHQ6IERlZmVycmVkLnJlc29sdmUoKSxcclxuICAgIH07XHJcbiAgICB0aGlzLl93ZWlnaHRQYXVzZWQgPSBmYWxzZTtcclxuXHJcbiAgICB0aGlzLndlaWdodCA9IHR5cGVvZiBvcHRpb25zLndlaWdodCA9PT0gJ251bWJlcicgPyBvcHRpb25zLndlaWdodCA6IDE7XHJcbiAgICB0aGlzLl9pbnRlcm5hbFdlaWdodCA9IHRoaXMuX3dlaWdodDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIHR5cGUgb2YgYmxlbmRpbmcgdXNlZCBmb3Igc3RhdGVzIGNvbnRyb2xsZWQgYnkgdGhlIGxheWVyLlxyXG4gICAqXHJcbiAgICogQHJlYWRvbmx5XHJcbiAgICogQHR5cGUge3N0cmluZ31cclxuICAgKi9cclxuICBnZXQgYmxlbmRNb2RlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2JsZW5kTW9kZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgYW5kIHNldHMgdGhlIGFtb3VudCBvZiBpbmZsdWVuY2UgdGhlIGxheWVyJ3MgY3VycmVudCBhbmltYXRpb24gaGFzIG92ZXJcclxuICAgKiB0aGUgcmVzdWx0IGZvciB0aGUgaG9zdC5cclxuICAgKlxyXG4gICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICovXHJcbiAgc2V0IHdlaWdodCh3ZWlnaHQpIHtcclxuICAgIHRoaXMuX3dlaWdodCA9IE1hdGhVdGlscy5jbGFtcCh3ZWlnaHQsIDAsIDEpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHdlaWdodCgpIHtcclxuICAgIHJldHVybiB0aGlzLl93ZWlnaHQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHdoZXRoZXIgb3Igbm90IHRoZSBsYXllcidzIHdlaWdodCB2YWx1ZSBpcyBjdXJyZW50bHkgYmVpbmcgYW5pbWF0ZWQuXHJcbiAgICpcclxuICAgKiBAcmVhZG9ubHlcclxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgKi9cclxuICBnZXQgd2VpZ2h0UGVuZGluZygpIHtcclxuICAgIHJldHVybiB0aGlzLl9wcm9taXNlcy53ZWlnaHQgJiYgdGhpcy5fcHJvbWlzZXMud2VpZ2h0LnBlbmRpbmc7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQYXVzZSB0aGUgY3VycmVudCBhbmltYXRpb24gc3RhdGUgYW5kIGFueSBpbnRlcnBvbGF0aW9uIGhhcHBlbmluZyBvbiB0aGUgbGF5ZXInc1xyXG4gICAqIHdlaWdodCBwcm9wZXJ0eS5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gICAqL1xyXG4gIHBhdXNlKCkge1xyXG4gICAgdGhpcy5fcGF1c2VkID0gdHJ1ZTtcclxuICAgIHRoaXMuX3dlaWdodFBhdXNlZCA9IHRydWU7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMucGF1c2VBbmltYXRpb24oKSB8fCB0aGlzLndlaWdodFBlbmRpbmc7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXN1bWUgdGhlIGN1cnJlbnQgYW5pbWF0aW9uIHN0YXRlIGFuZCBhbnkgaW50ZXJwb2xhdGlvbiBoYXBwZW5pbmcgb24gdGhlIGxheWVyJ3NcclxuICAgKiB3ZWlnaHQgcHJvcGVydHkuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuICAgKi9cclxuICByZXN1bWUoKSB7XHJcbiAgICB0aGlzLl9wYXVzZWQgPSBmYWxzZTtcclxuICAgIHRoaXMuX3dlaWdodFBhdXNlZCA9IGZhbHNlO1xyXG5cclxuICAgIGNvbnN0IGlzV2VpZ2h0QWN0aXZlID0gdGhpcy53ZWlnaHRQZW5kaW5nO1xyXG5cclxuICAgIGlmICh0aGlzLl9jdXJyZW50U3RhdGUpIHtcclxuICAgICAgcmV0dXJuIHRoaXMucmVzdW1lQW5pbWF0aW9uKCkgfHwgaXNXZWlnaHRBY3RpdmU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gaXNXZWlnaHRBY3RpdmU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGVzIHRoZSB1c2VyIGRlZmluZWQgd2VpZ2h0IG92ZXIgdGltZS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB3ZWlnaHQgLSBUaGUgdGFyZ2V0IHdlaWdodCB2YWx1ZS5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gW3NlY29uZHM9MF0gLSBUaGUgYW1vdW50IG9mIHRpbWUgaXQgd2lsbCB0YWtlIHRvIHJlYWNoIHRoZVxyXG4gICAqIHRhcmdldCB3ZWlnaHQuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IGVhc2luZ0ZuIC0gVGhlIGVhc2luZyBmdW5jdGlvbiB0byB1c2UgZm9yIGludGVycG9sYXRpb24uXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7RGVmZXJyZWR9XHJcbiAgICovXHJcbiAgc2V0V2VpZ2h0KHdlaWdodCwgc2Vjb25kcyA9IDAsIGVhc2luZ0ZuKSB7XHJcbiAgICBpZiAodGhpcy53ZWlnaHRQZW5kaW5nKSB7XHJcbiAgICAgIHRoaXMuX3Byb21pc2VzLndlaWdodC5jYW5jZWwoKTtcclxuICAgIH1cclxuXHJcbiAgICB3ZWlnaHQgPSBNYXRoVXRpbHMuY2xhbXAod2VpZ2h0KTtcclxuICAgIHRoaXMuX3Byb21pc2VzLndlaWdodCA9IEFuaW1hdGlvblV0aWxzLmludGVycG9sYXRlUHJvcGVydHkoXHJcbiAgICAgIHRoaXMsXHJcbiAgICAgICd3ZWlnaHQnLFxyXG4gICAgICB3ZWlnaHQsXHJcbiAgICAgIHtcclxuICAgICAgICBzZWNvbmRzLFxyXG4gICAgICAgIGVhc2luZ0ZuOiBlYXNpbmdGbiAhPT0gdW5kZWZpbmVkID8gZWFzaW5nRm4gOiB0aGlzLl9lYXNpbmdGbixcclxuICAgICAgfVxyXG4gICAgKTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5fcHJvbWlzZXMud2VpZ2h0O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUGF1c2UgYW55IGludGVycG9sYXRpb24gaGFwcGVuaW5nIG9uIHRoZSBsYXllcidzIHdlaWdodCBwcm9wZXJ0eS5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gICAqL1xyXG4gIHBhdXNlV2VpZ2h0KCkge1xyXG4gICAgdGhpcy5fd2VpZ2h0UGF1c2VkID0gdHJ1ZTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy53ZWlnaHRQZW5kaW5nO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVzdW1lIGFueSBpbnRlcnBvbGF0aW9uIGhhcHBlbmluZyBvbiB0aGUgbGF5ZXIncyB3ZWlnaHQgcHJvcGVydHkuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuICAgKi9cclxuICByZXN1bWVXZWlnaHQoKSB7XHJcbiAgICB0aGlzLl93ZWlnaHRQYXVzZWQgPSBmYWxzZTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy53ZWlnaHRQZW5kaW5nO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTXVsdGlwbGllcyB0aGUgdXNlciB3ZWlnaHQgYnkgYSBmYWN0b3IgdG8gZGV0ZXJtaW5lIHRoZSBpbnRlcm5hbCB3ZWlnaHQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge251bWJlcn0gZmFjdG9yIC0gMC0xIG11bHRpcGxpZXIgdG8gYXBwbHkgdG8gdGhlIHVzZXIgd2VpZ2h0LlxyXG4gICAqL1xyXG4gIHVwZGF0ZUludGVybmFsV2VpZ2h0KGZhY3Rvcikge1xyXG4gICAgdGhpcy5faW50ZXJuYWxXZWlnaHQgPSB0aGlzLl93ZWlnaHQgKiBmYWN0b3I7XHJcblxyXG4gICAgaWYgKHRoaXMuX2N1cnJlbnRTdGF0ZSkge1xyXG4gICAgICB0aGlzLl9jdXJyZW50U3RhdGUudXBkYXRlSW50ZXJuYWxXZWlnaHQodGhpcy5faW50ZXJuYWxXZWlnaHQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgbmFtZXMgb2YgYmxlbmQgc3RhdGVzIGluIGFuIGFuaW1hdGlvbi5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhbmltYXRpb25OYW1lIC0gTmFtZSBvZiB0aGUgYW5pbWF0aW9uLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0FycmF5LjxzdHJpbmc+fSAtIE5hbWVzIG9mIGJsZW5kIHN0YXRlcy5cclxuICAgKi9cclxuICBnZXRBbmltYXRpb25CbGVuZE5hbWVzKGFuaW1hdGlvbk5hbWUpIHtcclxuICAgIGNvbnN0IHN0YXRlID0gdGhpcy5nZXRTdGF0ZShhbmltYXRpb25OYW1lKTtcclxuXHJcbiAgICBpZiAoc3RhdGUgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgYENhbm5vdCBnZXQgYmxlbmQgbmFtZXMgb2YgYW5pbWF0aW9uICR7YW5pbWF0aW9uTmFtZX0gb24gbGF5ZXIgJHt0aGlzLm5hbWV9LiBObyBhbmltYXRpb24gZXhpc3RzIHdpdGggdGhpcyBuYW1lLmBcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoc3RhdGUgaW5zdGFuY2VvZiBBYnN0cmFjdEJsZW5kU3RhdGUpIHtcclxuICAgICAgcmV0dXJuIHN0YXRlLmdldFN0YXRlTmFtZXMoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgIGBDYW5ub3QgZ2V0IGJsZW5kIG5hbWVzIG9mIGFuaW1hdGlvbiAke2FuaW1hdGlvbk5hbWV9IG9uIGxheWVyICR7dGhpcy5uYW1lfS4gQW5pbWF0aW9uIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBBYnN0cmFjdEJsZW5kU3RhdGUuYFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZSB0aGUgd2VpZ2h0IGZvciBhIGJsZW5kIHN0YXRlIG9mIGFuIGFuaW1hdGlvbi5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhbmltYXRpb25OYW1lIC0gTmFtZSBvZiB0aGUgYW5pbWF0aW9uIGNvbnRhaW5pbmcgdGhlIGJsZW5kIHN0YXRlXHJcbiAgICogdG8gdXBkYXRlLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBibGVuZE5hbWUgLSBOYW1lIG9mIHRoZSBibGVuZCBzdGF0ZSB0byB1cGRhdGUuXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IHdlaWdodCAtIFdlaWdodCB2YWx1ZSB0byBzZXQgb24gdGhlIGFuaW1hdGlvbi4gVGhpcyBudW1iZXIgc2hvdWRsZCBiZVxyXG4gICAqIGluIHRoZSAwLTEgcmFuZ2UuXHJcbiAgICogQHBhcmFtIHtudW1iZXI9fSBzZWNvbmRzIC0gTnVtYmVyIG9mIHNlY29uZHMgaXQgc2hvdWxkIHRha2UgdG8gcmVhY2ggdGhlIG5ldyB3ZWlnaHQuXHJcbiAgICogRGVmYXVsdCBpcyB6ZXJvIGFuZCB3aWxsIHNldCBpbW1lZGlhdGVseS5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gZWFzaW5nRm4gLSBFYXNpbmcgZnVuY3Rpb24gdG8gdXNlIHdoaWxlIGludGVycG9sYXRpbmcgdGhlIG5ld1xyXG4gICAqIHdlaWdodC4gRGVmYXVsdCBpcyBFYXNpbmcuTGluZWFyLkluT3V0LlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0RlZmVycmVkfSAtIFByb21pc2UgdGhhdCB3aWxsIHJlc29sdmUgb25jZSB0aGUgYW5pbWF0aW9uJ3Mgd2VpZ2h0IHJlYWNoZXNcclxuICAgKiB0aGUgdGFyZ2V0IHZhbHVlLlxyXG4gICAqL1xyXG4gIHNldEFuaW1hdGlvbkJsZW5kV2VpZ2h0KFxyXG4gICAgYW5pbWF0aW9uTmFtZSxcclxuICAgIGJsZW5kTmFtZSxcclxuICAgIHdlaWdodCxcclxuICAgIHNlY29uZHMgPSAwLFxyXG4gICAgZWFzaW5nRm5cclxuICApIHtcclxuICAgIGNvbnN0IHN0YXRlID0gdGhpcy5nZXRTdGF0ZShhbmltYXRpb25OYW1lKTtcclxuXHJcbiAgICBpZiAoc3RhdGUgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgYENhbm5vdCBzZXQgYmxlbmQgd2VpZ2h0IG9mIGFuaW1hdGlvbiAke2FuaW1hdGlvbk5hbWV9IG9uIGxheWVyICR7dGhpcy5uYW1lfS4gTm8gYW5pbWF0aW9uIGV4aXN0cyB3aXRoIHRoaXMgbmFtZS5gXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHN0YXRlIGluc3RhbmNlb2YgQWJzdHJhY3RCbGVuZFN0YXRlKSB7XHJcbiAgICAgIHJldHVybiBzdGF0ZS5zZXRCbGVuZFdlaWdodChibGVuZE5hbWUsIHdlaWdodCwgc2Vjb25kcywgZWFzaW5nRm4pO1xyXG4gICAgfVxyXG5cclxuICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgYENhbm5vdCBzZXQgYmxlbmQgd2VpZ2h0IG9mIGFuaW1hdGlvbiAke2FuaW1hdGlvbk5hbWV9IG9uIGxheWVyICR7dGhpcy5uYW1lfS4gQW5pbWF0aW9uIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBBYnN0cmFjdEJsZW5kU3RhdGUuYFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdGhlIHdlaWdodCBmb3IgYSBibGVuZCBzdGF0ZSBvZiBhbiBhbmltYXRpb24uXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gYW5pbWF0aW9uTmFtZSAtIE5hbWUgb2YgdGhlIGFuaW1hdGlvbiBjb250YWluaW5nIHRoZSBibGVuZCBzdGF0ZVxyXG4gICAqIHRvIHVwZGF0ZS5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gYmxlbmROYW1lIC0gTmFtZSBvZiB0aGUgYmxlbmQgc3RhdGUgdG8gcmV0cmlldmUgdGhlIHdlaWdodCBvZi5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IC0gV2VpZ2h0IG9mIHRoZSBibGVuZCBzdGF0ZS5cclxuICAgKi9cclxuICBnZXRBbmltYXRpb25CbGVuZFdlaWdodChhbmltYXRpb25OYW1lLCBibGVuZE5hbWUpIHtcclxuICAgIGNvbnN0IHN0YXRlID0gdGhpcy5nZXRTdGF0ZShhbmltYXRpb25OYW1lKTtcclxuXHJcbiAgICBpZiAoc3RhdGUgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgYENhbm5vdCBnZXQgYmxlbmQgd2VpZ2h0IG9mIGFuaW1hdGlvbiAke2FuaW1hdGlvbk5hbWV9IG9uIGxheWVyICR7dGhpcy5uYW1lfS4gTm8gYW5pbWF0aW9uIGV4aXN0cyB3aXRoIHRoaXMgbmFtZS5gXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHN0YXRlIGluc3RhbmNlb2YgQWJzdHJhY3RCbGVuZFN0YXRlKSB7XHJcbiAgICAgIHJldHVybiBzdGF0ZS5nZXRCbGVuZFdlaWdodChibGVuZE5hbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgYENhbm5vdCBnZXQgYmxlbmQgd2VpZ2h0IG9mIGFuaW1hdGlvbiAke2FuaW1hdGlvbk5hbWV9IG9uIGxheWVyICR7dGhpcy5uYW1lfS4gQW5pbWF0aW9uIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBBYnN0cmFjdEJsZW5kU3RhdGUuYFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZSBhbnkgd2VpZ2h0IGludGVycG9sYXRvcnMgYW5kIHRoZSBjdXJyZW50IGFuaW1hdGlvbi5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBkZWx0YVRpbWUgLSBUaW1lIGluIG1pbGxpc2Vjb25kcyBzaW5jZSB0aGUgbGFzdCB1cGRhdGUuXHJcbiAgICovXHJcbiAgdXBkYXRlKGRlbHRhVGltZSkge1xyXG4gICAgc3VwZXIudXBkYXRlKGRlbHRhVGltZSk7XHJcblxyXG4gICAgaWYgKCF0aGlzLl9wYXVzZWQgJiYgIXRoaXMuX3dlaWdodFBhdXNlZCkge1xyXG4gICAgICB0aGlzLl9wcm9taXNlcy53ZWlnaHQuZXhlY3V0ZShkZWx0YVRpbWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2FuY2VsIGFueSBwZW5kaW5nIHByb21pc2VzIGFuZCBkaXNjYXJkIHN0YXRlcyBjb250cm9sbGVkIGJ5IHRoZSBsYXllci5cclxuICAgKi9cclxuICBkaXNjYXJkKCkge1xyXG4gICAgc3VwZXIuZGlzY2FyZCgpO1xyXG5cclxuICAgIHRoaXMuZGlzY2FyZFN0YXRlcygpO1xyXG5cclxuICAgIHRoaXMuX3Byb21pc2VzLndlaWdodC5jYW5jZWwoKTtcclxuICAgIGRlbGV0ZSB0aGlzLl9wcm9taXNlcztcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IEFuaW1hdGlvbkxheWVyO1xyXG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cclxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVC0wXHJcbmltcG9ydCBEZWZlcnJlZCBmcm9tICdjb3JlL0RlZmVycmVkJztcclxuaW1wb3J0IEFic3RyYWN0U3RhdGUgZnJvbSAnLi9BYnN0cmFjdFN0YXRlJztcclxuaW1wb3J0IHt2YWxpZGF0ZUJsZW5kTW9kZX0gZnJvbSAnLi4vQW5pbWF0aW9uTGF5ZXInO1xyXG5pbXBvcnQgQW5pbWF0aW9uVXRpbHMgZnJvbSAnLi4vQW5pbWF0aW9uVXRpbHMnO1xyXG5cclxuLyoqXHJcbiAqIENsYXNzIGZvciBwbGF5aW5nIGEgc2luZ2xlIGFuaW1hdGlvbiBjbGlwLlxyXG4gKlxyXG4gKiBAZXh0ZW5kcyBBYnN0cmFjdFN0YXRlXHJcbiAqIEBhbGlhcyBjb3JlL1NpbmdsZVN0YXRlXHJcbiAqL1xyXG5jbGFzcyBTaW5nbGVTdGF0ZSBleHRlbmRzIEFic3RyYWN0U3RhdGUge1xyXG4gIC8qKlxyXG4gICAqIEBjb25zdHJ1Y3RvclxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtPYmplY3Q9fSBvcHRpb25zIC0gT3B0aW9ucyBmb3IgdGhlIGFuaW1hdGlvbiBzdGF0ZS5cclxuICAgKiBAcGFyYW0ge3N0cmluZz19IG9wdGlvbnMubmFtZSAtIE5hbWUgZm9yIHRoZSBhbmltYXRpb24gc3RhdGUuIE5hbWVzIG11c3QgYmVcclxuICAgKiB1bmlxdWUgZm9yIHRoZSBsYXllciB0aGUgc3RhdGUgaXMgYXBwbGllZCB0by5cclxuICAgKiBAcGFyYW0ge3dlaWdodH0gW29wdGlvbnMud2VpZ2h0PTBdIC0gVGhlIDAtMSBhbW91bnQgb2YgaW5mbHVlbmNlIHRoZSBzdGF0ZSB3aWxsIGhhdmUuXHJcbiAgICogQHBhcmFtIHt0aW1lU2NhbGV9IFtvcHRpb25zLnRpbWVTY2FsZT0xXSAtIEZhY3RvciB0byBzY2FsZSB0aGUgcGxheWJhY2sgc3BlZWQgb2YgdGhlXHJcbiAgICogYW5pbWF0aW9uLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5sb29wQ291bnQ9SW5maW5pdHldIC0gTnVtYmVyIG9mIHRpbWVzIHRoZSBhbmltYXRpb24gc2hvdWxkXHJcbiAgICogcmVwZWF0IGJlZm9yZSBmaW5pc2hpbmcuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmJsZW5kTW9kZT1EZWZhdWx0TGF5ZXJCbGVuZE1vZGVdIC0gVHlwZSBvZlxyXG4gICAqIGJsZW5kaW5nIHRoZSBhbmltYXRpb24gc2hvdWxkIHVzZS5cclxuICAgKi9cclxuICBjb25zdHJ1Y3RvcihvcHRpb25zID0ge30pIHtcclxuICAgIHN1cGVyKG9wdGlvbnMpO1xyXG5cclxuICAgIHRoaXMuX3RpbWVTY2FsZSA9IG9wdGlvbnMudGltZVNjYWxlICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLnRpbWVTY2FsZSA6IDE7XHJcbiAgICB0aGlzLl9wcm9taXNlcy50aW1lU2NhbGUgPSBEZWZlcnJlZC5yZXNvbHZlKCk7XHJcbiAgICB0aGlzLl9sb29wQ291bnQgPVxyXG4gICAgICBvcHRpb25zLmxvb3BDb3VudCAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5sb29wQ291bnQgOiBJbmZpbml0eTtcclxuICAgIHRoaXMuX2JsZW5kTW9kZSA9IHZhbGlkYXRlQmxlbmRNb2RlKG9wdGlvbnMuYmxlbmRNb2RlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgYW5kIHNldHMgdGhlIG5vcm1hbGl6ZWQgcGxheWluZyB0aW1lIG9mIHRoZSBjdXJyZW50IGFuaW1hdGlvblxyXG4gICAqXHJcbiAgICogQHR5cGUge251bWJlcn1cclxuICAgKi9cclxuICBnZXQgbm9ybWFsaXplZFRpbWUoKSB7XHJcbiAgICByZXR1cm4gMDtcclxuICB9XHJcblxyXG4gIHNldCBub3JtYWxpemVkVGltZSh0aW1lKSB7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIGFuZCBzZXRzIHRoZSBhIGZhY3RvciB0byBzY2FsZSBhbmltYXRpb24gcGxheWJhY2sgc3BlZWQgd2l0aC5cclxuICAgKlxyXG4gICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICovXHJcbiAgZ2V0IHRpbWVTY2FsZSgpIHtcclxuICAgIHJldHVybiB0aGlzLl90aW1lU2NhbGU7XHJcbiAgfVxyXG5cclxuICBzZXQgdGltZVNjYWxlKHRpbWVTY2FsZSkge1xyXG4gICAgdGhpcy5fdGltZVNjYWxlID0gdGltZVNjYWxlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyB3aGV0aGVyIG9yIG5vdCB0aGUgdGltZVNjYWxlIGlzIGN1cnJlbnRseSBiZWluZyBhbmltYXRlZC5cclxuICAgKlxyXG4gICAqIEByZWFkb25seVxyXG4gICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAqL1xyXG4gIGdldCB0aW1lU2NhbGVQZW5kaW5nKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3Byb21pc2VzLnRpbWVTY2FsZS5wZW5kaW5nO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlcyB0aGUgdGltZVNjYWxlIHZhbHVlIG92ZXIgdGltZS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB3ZWlnaHQgLSBUaGUgdGFyZ2V0IHRpbWVTY2FsZSB2YWx1ZS5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gW3NlY29uZHM9MF0gLSBUaGUgYW1vdW50IG9mIHRpbWUgaXQgd2lsbCB0YWtlIHRvIHJlYWNoIHRoZVxyXG4gICAqIHRhcmdldCB0aW1lU2NhbGUuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IGVhc2luZ0ZuIC0gVGhlIGVhc2luZyBmdW5jdGlvbiB0byB1c2UgZm9yIGludGVycG9sYXRpb24uXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7RGVmZXJyZWR9XHJcbiAgICovXHJcbiAgc2V0VGltZVNjYWxlKHRpbWVTY2FsZSwgc2Vjb25kcyA9IDAsIGVhc2luZ0ZuKSB7XHJcbiAgICB0aGlzLl9wcm9taXNlcy50aW1lU2NhbGUuY2FuY2VsKCk7XHJcblxyXG4gICAgdGhpcy5fcHJvbWlzZXMudGltZVNjYWxlID0gQW5pbWF0aW9uVXRpbHMuaW50ZXJwb2xhdGVQcm9wZXJ0eShcclxuICAgICAgdGhpcyxcclxuICAgICAgJ3RpbWVTY2FsZScsXHJcbiAgICAgIHRpbWVTY2FsZSxcclxuICAgICAge3NlY29uZHMsIGVhc2luZ0ZufVxyXG4gICAgKTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5fcHJvbWlzZXMudGltZVNjYWxlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyBhbmQgc2V0cyB0aGUgbnVtYmVyIG9mIHRpbWVzIHRoZSBhbmltYXRpb24gd2lsbCByZXBlYXQgYmVmb3JlIGZpbmlzaGluZy5cclxuICAgKlxyXG4gICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICovXHJcbiAgZ2V0IGxvb3BDb3VudCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9sb29wQ291bnQ7XHJcbiAgfVxyXG5cclxuICBzZXQgbG9vcENvdW50KGxvb3BDb3VudCkge1xyXG4gICAgdGhpcy5fbG9vcENvdW50ID0gbG9vcENvdW50O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgdHlwZSBvZiBibGVuZGluZyB1c2VkIGZvciB0aGUgYW5pbWF0aW9uLlxyXG4gICAqXHJcbiAgICogQHJlYWRvbmx5XHJcbiAgICogQHR5cGUge3N0cmluZ31cclxuICAgKi9cclxuICBnZXQgYmxlbmRNb2RlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2JsZW5kTW9kZTtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IFNpbmdsZVN0YXRlO1xyXG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cclxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVC0wXHJcbmltcG9ydCBBYnN0cmFjdFN0YXRlIGZyb20gJy4vQWJzdHJhY3RTdGF0ZSc7XHJcbmltcG9ydCBTdGF0ZUNvbnRhaW5lckludGVyZmFjZSBmcm9tICcuL1N0YXRlQ29udGFpbmVySW50ZXJmYWNlJztcclxuaW1wb3J0IEFuaW1hdGlvblBsYXllckludGVyZmFjZSBmcm9tICcuLi9BbmltYXRpb25QbGF5ZXJJbnRlcmZhY2UnO1xyXG5pbXBvcnQgVXRpbHMgZnJvbSAnLi4vLi4vVXRpbHMnO1xyXG5cclxuLyoqXHJcbiAqIENsYXNzIGZvciBwbGF5aW5nIHJhbmRvbSBhbmltYXRpb25zIGF0IHJhbmRvbSBpbnRlcnZhbHMgd2l0aGluIHRoaXMgc3RhdGUuXHJcbiAqXHJcbiAqIEBleHRlbmRzIEFic3RyYWN0U3RhdGVcclxuICogQGltcGxlbWVudHMgQW5pbWF0aW9uUGxheWVySW50ZXJmYWNlXHJcbiAqIEBpbXBsZW1lbnRzIFN0YXRlQ29udGFpbmVySW50ZXJmYWNlXHJcbiAqL1xyXG5jbGFzcyBSYW5kb21BbmltYXRpb25TdGF0ZSBleHRlbmRzIEFuaW1hdGlvblBsYXllckludGVyZmFjZS5NaXhpbihTdGF0ZUNvbnRhaW5lckludGVyZmFjZS5NaXhpbihBYnN0cmFjdFN0YXRlKSkge1xyXG4gIC8qKlxyXG4gICAqIEBjb25zdHJ1Y3RvclxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XSAtIE9wdGlvbnMgZm9yIHRoZSBjb250YWluZXIgc3RhdGUuXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLnBsYXlJbnRlcnZhbD0zXSAtIFRoZSBiYXNlIGFuaW1hdGlvbiBwbGF5YmFjayBpbnRlcnZhbC5cclxuICAgKiBAcGFyYW0ge0FycmF5LjxBYnN0cmFjdFN0YXRlPn0gW3N1YlN0YXRlcz1bXV0gLSBzdGF0ZXMgdG8gYmUgcmFuZG9tbHkgcGlja2VkIHRvIHBsYXlcclxuICAgKi9cclxuICBjb25zdHJ1Y3RvcihvcHRpb25zID0ge30sIHN1YlN0YXRlcyA9IFtdKSB7XHJcbiAgICBzdXBlcihvcHRpb25zKTtcclxuXHJcbiAgICB0aGlzLl9wbGF5SW50ZXJ2YWwgPSBvcHRpb25zLnBsYXlJbnRlcnZhbCA/IG9wdGlvbnMucGxheUludGVydmFsIDogMztcclxuXHJcbiAgICBzdWJTdGF0ZXMuZm9yRWFjaChzdGF0ZSA9PiB7XHJcbiAgICAgIHRoaXMuYWRkU3RhdGUoc3RhdGUpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIGFuZCBzZXRzIHRoZSBiYXNlIGFuaW1hdGlvbiBwbGF5IGludGVydmFsXHJcbiAgICpcclxuICAgKiBAdHlwZSB7ZmxvYXR9XHJcbiAgICovXHJcbiAgZ2V0IHBsYXlJbnRlcnZhbCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9wbGF5SW50ZXJ2YWw7XHJcbiAgfVxyXG5cclxuICBzZXQgcGxheUludGVydmFsKHBsYXlJbnRlcnZhbCkge1xyXG4gICAgdGhpcy5fcGxheUludGVydmFsID0gcGxheUludGVydmFsO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVzZXQgdGhlIGludGVybmFsIHRpbWVyIGZvciBhbmltYXRpb24gcGxheSBpbnRlcnZhbFxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBfcmVzZXRUaW1lcigpIHtcclxuICAgIGNvbnN0IHBsYXlUaW1lciA9IFV0aWxzLmdldFJhbmRvbUZsb2F0KHRoaXMuX3BsYXlJbnRlcnZhbCAvIDQsIHRoaXMuX3BsYXlJbnRlcnZhbCAqIDIpO1xyXG4gICAgY29uc3Qgb25GaW5pc2ggPSAoKSA9PiB7XHJcbiAgICAgIHRoaXMucGxheVJhbmRvbUFuaW1hdGlvbih0aGlzLl9wbGF5Q2FsbGJhY2tzLm9uRXJyb3IpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fcHJvbWlzZXMudGltZXIgPSBVdGlscy53YWl0KHBsYXlUaW1lciwge29uRmluaXNofSk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVJbnRlcm5hbFdlaWdodChmYWN0b3IpIHtcclxuICAgIHN1cGVyLnVwZGF0ZUludGVybmFsV2VpZ2h0KGZhY3Rvcik7XHJcblxyXG4gICAgaWYgKHRoaXMuX2N1cnJlbnRTdGF0ZSkge1xyXG4gICAgICB0aGlzLl9jdXJyZW50U3RhdGUudXBkYXRlSW50ZXJuYWxXZWlnaHQodGhpcy5faW50ZXJuYWxXZWlnaHQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUGljayBhIHJhbmRvbSBhbmltYXRpb24gYW5kIHV0aWxpemUgQW5pbWF0aW9uUGxheWVySW50ZXJmYWNlIHRvIHBsYXkgdGhhdCBhbmltYXRpb25cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvbkVycm9yIC0gRnVuY3Rpb24gdG8gZXhlY3V0ZSBpZiB0aGUgc3RhdGUgZW5jb3VudGVyc1xyXG4gICAqIGFuIGVycm9yIGR1cmluZyBwbGF5YmFjay5cclxuICAgKi9cclxuICBwbGF5UmFuZG9tQW5pbWF0aW9uKG9uRXJyb3IpIHtcclxuICAgIHRoaXMuX3Jlc2V0VGltZXIoKTtcclxuXHJcbiAgICBjb25zdCBzdGF0ZXMgPSB0aGlzLmdldFN0YXRlTmFtZXMoKTtcclxuICAgIGlmICh0aGlzLl9jdXJyZW50U3RhdGUpIHtcclxuICAgICAgc3RhdGVzLnNwbGljZShzdGF0ZXMuaW5kZXhPZih0aGlzLl9jdXJyZW50U3RhdGUubmFtZSksIDEpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgcmFuZG9tU3RhdGUgPSAgc3RhdGVzW1V0aWxzLmdldFJhbmRvbUludCgwLCBzdGF0ZXMubGVuZ3RoKV07XHJcblxyXG4gICAgdGhpcy5wbGF5QW5pbWF0aW9uKHJhbmRvbVN0YXRlLCB0aGlzLl90cmFuc2l0aW9uVGltZSwgdGhpcy5fZWFzaW5nRm4sIHVuZGVmaW5lZCwgb25FcnJvciwgdW5kZWZpbmVkKTtcclxuICB9XHJcblxyXG4gIHBsYXkob25GaW5pc2gsIG9uRXJyb3IsIG9uQ2FuY2VsKSB7XHJcbiAgICB0aGlzLnBsYXlSYW5kb21BbmltYXRpb24ob25FcnJvcik7XHJcbiAgICByZXR1cm4gc3VwZXIucGxheShvbkZpbmlzaCwgb25FcnJvciwgb25DYW5jZWwpO1xyXG4gIH1cclxuXHJcbiAgcGF1c2UoKSB7XHJcbiAgICByZXR1cm4gc3VwZXIucGF1c2UoKSAmJiB0aGlzLnBhdXNlQW5pbWF0aW9uKCk7XHJcbiAgfVxyXG5cclxuICByZXN1bWUob25GaW5pc2gsIG9uRXJyb3IsIG9uQ2FuY2VsKSB7XHJcbiAgICBpZiAodGhpcy5fY3VycmVudFN0YXRlKSB7XHJcbiAgICAgIHRoaXMucmVzdW1lQW5pbWF0aW9uKHRoaXMuX2N1cnJlbnRTdGF0ZS5uYW1lLCB0aGlzLl90cmFuc2l0aW9uVGltZSwgdGhpcy5fZWFzaW5nRm4sIHVuZGVmaW5lZCwgb25FcnJvciwgdW5kZWZpbmVkKTtcclxuICAgIH1cclxuICAgIHJldHVybiBzdXBlci5yZXN1bWUob25GaW5pc2gsIG9uRXJyb3IsIG9uQ2FuY2VsKTtcclxuICB9XHJcblxyXG4gIGNhbmNlbCgpIHtcclxuICAgIHJldHVybiBzdXBlci5jYW5jZWwoKSAmJiB0aGlzLmNhbmNlbEFuaW1hdGlvbigpO1xyXG4gIH1cclxuXHJcbiAgc3RvcCgpIHtcclxuICAgIHJldHVybiBzdXBlci5zdG9wKCkgJiYgdGhpcy5zdG9wQW5pbWF0aW9uKCk7XHJcbiAgfVxyXG5cclxuICBkaXNjYXJkKCkge1xyXG4gICAgc3VwZXIuZGlzY2FyZCgpO1xyXG4gICAgdGhpcy5kaXNjYXJkU3RhdGVzKCk7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBSYW5kb21BbmltYXRpb25TdGF0ZTtcclxuIiwiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXHJcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxyXG5pbXBvcnQgQWJzdHJhY3RIb3N0RmVhdHVyZSBmcm9tICdjb3JlL0Fic3RyYWN0SG9zdEZlYXR1cmUnO1xyXG5pbXBvcnQgVXRpbHMgZnJvbSAnY29yZS9VdGlscyc7XHJcbmltcG9ydCBRdWV1ZVN0YXRlIGZyb20gJy4vc3RhdGUvUXVldWVTdGF0ZSc7XHJcbmltcG9ydCBGcmVlQmxlbmRTdGF0ZSBmcm9tICcuL3N0YXRlL0ZyZWVCbGVuZFN0YXRlJztcclxuaW1wb3J0IEJsZW5kMWRTdGF0ZSBmcm9tICcuL3N0YXRlL0JsZW5kMWRTdGF0ZSc7XHJcbmltcG9ydCBCbGVuZDJkU3RhdGUgZnJvbSAnLi9zdGF0ZS9CbGVuZDJkU3RhdGUnO1xyXG5pbXBvcnQgU2luZ2xlU3RhdGUgZnJvbSAnLi9zdGF0ZS9TaW5nbGVTdGF0ZSc7XHJcbmltcG9ydCBSYW5kb21BbmltYXRpb25TdGF0ZSBmcm9tICcuL3N0YXRlL1JhbmRvbUFuaW1hdGlvblN0YXRlJztcclxuaW1wb3J0IEFuaW1hdGlvbkxheWVyLCB7TGF5ZXJCbGVuZE1vZGVzfSBmcm9tICcuL0FuaW1hdGlvbkxheWVyJztcclxuaW1wb3J0IERlZmVycmVkIGZyb20gJy4uL0RlZmVycmVkJztcclxuXHJcbi8qKlxyXG4gKiBFbnVtIGZvciBhbmltYXRpb24gc3RhdGUgY2xhc3Nlcy5cclxuICpcclxuICogQHJlYWRvbmx5XHJcbiAqIEBlbnVtIHtDbGFzc31cclxuICovXHJcbmV4cG9ydCBjb25zdCBBbmltYXRpb25UeXBlcyA9IHtcclxuICBzaW5nbGU6IFNpbmdsZVN0YXRlLFxyXG4gIGZyZWVCbGVuZDogRnJlZUJsZW5kU3RhdGUsXHJcbiAgcXVldWU6IFF1ZXVlU3RhdGUsXHJcbiAgcmFuZG9tQW5pbWF0aW9uOiBSYW5kb21BbmltYXRpb25TdGF0ZSxcclxuICBibGVuZDFkOiBCbGVuZDFkU3RhdGUsXHJcbiAgYmxlbmQyZDogQmxlbmQyZFN0YXRlLFxyXG59O1xyXG5cclxuLyoqXHJcbiAqIEZlYXR1cmUgZm9yIG1hbmFnaW5nIGFuaW1hdGlvbnMgb24gYW4gb2JqZWN0LlxyXG4gKlxyXG4gKiBAZXh0ZW5kcyBBYnN0cmFjdEhvc3RGZWF0dXJlXHJcbiAqIEBhbGlhcyBjb3JlL0FuaW1hdGlvbkZlYXR1cmVcclxuICpcclxuICogQHByb3BlcnR5IHtPYmplY3R9IEVWRU5UUyAtIEJ1aWx0LWluIG1lc3NhZ2VzIHRoYXQgdGhlIGZlYXR1cmUgZW1pdHMuIFdoZW4gdGhlXHJcbiAqIGZlYXR1cmUgaXMgYWRkZWQgdG8gYSB7QGxpbmsgY29yZS9Ib3N0T2JqZWN0fSwgZXZlbnQgbmFtZXMgd2lsbCBiZSBwcmVmaXhlZCBieSB0aGVcclxuICogbmFtZSBvZiB0aGUgZmVhdHVyZSBjbGFzcyArICcuJy5cclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtFVkVOVFMuYWRkTGF5ZXI9b25BZGRMYXllckV2ZW50XSAtIE1lc3NhZ2UgdGhhdCBpcyBlbWl0dGVkIGFmdGVyXHJcbiAqIFthZGRMYXllcl17QGxpbmsgY29yZS9BbmltYXRpb25GZWF0dXJlI2FkZExheWVyfSBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgZXhlY3V0ZWQuXHJcbiAqIEFuIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIG5hbWUgb2YgdGhlIGxheWVyIHRoYXQgd2FzIGFkZGVkIGFuZCBpdHMgaW5kZXggaW5cclxuICogdGhlIGxheWVyIHN0YWNrIHdpdGggdGhlIHNpZ25hdHVyZSB7bmFtZTogc3RyaW5nLCBpbmRleDogbnVtYmVyfSBpcyBzdXBwbGllZFxyXG4gKiBhcyBhbiBhcmd1bWVudCB0byBsaXN0ZW5lciBmdW5jdGlvbnMuXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbRVZFTlRTLnJlbW92ZUxheWVyPW9uUmVtb3ZlTGF5ZXJFdmVudF0gLSBNZXNzYWdlIHRoYXQgaXNcclxuICogZW1pdHRlZCBhZnRlciBbcmVtb3ZlTGF5ZXJde0BsaW5rIGNvcmUvQW5pbWF0aW9uRmVhdHVyZSNyZW1vdmVMYXllcn0gaGFzIGJlZW5cclxuICogc3VjY2Vzc2Z1bGx5IGV4ZWN1dGVkLiBBbiBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBuYW1lIG9mIHRoZSBsYXllciB0aGF0IHdhc1xyXG4gKiByZW1vdmVkIGFuZCBpdHMgaW5kZXggaW4gdGhlIGxheWVyIHN0YWNrIHdpdGggdGhlIHNpZ25hdHVyZSB7bmFtZTogc3RyaW5nLCBpbmRleDogbnVtYmVyfVxyXG4gKiBpcyBzdXBwbGllZCBhcyBhbiBhcmd1bWVudCB0byBsaXN0ZW5lciBmdW5jdGlvbnMuXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbRVZFTlRTLnJlbmFtZUxheWVyPW9uUmVuYW1lTGF5ZXJFdmVudF0gLSBNZXNzYWdlIHRoYXQgaXNcclxuICogZW1pdHRlZCBhZnRlciBbcmVuYW1lTGF5ZXJde0BsaW5rIGNvcmUvQW5pbWF0aW9uRmVhdHVyZSNyZW5hbWVMYXllcn0gaGFzIGJlZW5cclxuICogc3VjY2Vzc2Z1bGx5IGV4ZWN1dGVkLiBBbiBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBvcmlnaW5hbCBuYW1lIG9mIHRoZSBsYXllclxyXG4gKiB0aGF0IHdhcyByZW5hbWVkIGFuZCBpdHMgdXBkYXRlZCBuYW1lIHdpdGggdGhlIHNpZ25hdHVyZSB7b2xkTmFtZTogc3RyaW5nLCBuZXdOYW1lOiBzdHJpbmd9XHJcbiAqIGlzIHN1cHBsaWVkIGFzIGFuIGFyZ3VtZW50IHRvIGxpc3RlbmVyIGZ1bmN0aW9ucy5cclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtFVkVOVFMuYWRkQW5pbWF0aW9uPW9uQWRkQW5pbWF0aW9uRXZlbnRdIC0gTWVzc2FnZSB0aGF0IGlzXHJcbiAqIGVtaXR0ZWQgYWZ0ZXIgW2FkZEFuaW1hdGlvbl17QGxpbmsgY29yZS9BbmltYXRpb25GZWF0dXJlI2FkZEFuaW1hdGlvbn0gaGFzIGJlZW5cclxuICogc3VjY2Vzc2Z1bGx5IGV4ZWN1dGVkLiBBbiBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBuYW1lIG9mIHRoZSBsYXllciB0aGF0IHRoZVxyXG4gKiBhbmltYXRpb24gd2FzIGFkZGVkIHRvIGFuZCB0aGUgbmFtZSBvZiB0aGUgYW5pbWF0aW9uIHRoYXQgd2FzIGFkZGVkIHdpdGggdGhlXHJcbiAqIHNpZ25hdHVyZSB7bGF5ZXJOYW1lOiBzdHJpbmcsIGFuaW1hdGlvbk5hbWU6IHN0cmluZ30gaXMgc3VwcGxpZWQgYXMgYW4gYXJndW1lbnRcclxuICogdG8gbGlzdGVuZXIgZnVuY3Rpb25zLlxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW0VWRU5UUy5yZW1vdmVBbmltYXRpb249b25SZW1vdmVkQW5pbWF0aW9uRXZlbnRdIC0gTWVzc2FnZVxyXG4gKiB0aGF0IGlzIGVtaXR0ZWQgYWZ0ZXIgW3JlbW92ZUFuaW1hdGlvbl17QGxpbmsgY29yZS9BbmltYXRpb25GZWF0dXJlI3JlbW92ZUFuaW1hdGlvbn1cclxuICogaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IGV4ZWN1dGVkLiBBbiBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBuYW1lIG9mIHRoZSBsYXllclxyXG4gKiB0aGF0IHRoZSBhbmltYXRpb24gd2FzIHJlbW92ZWQgZnJvbSBhbmQgdGhlIG5hbWUgb2YgdGhlIGFuaW1hdGlvbiB0aGF0IHdhcyByZW1vdmVkXHJcbiAqIHdpdGggdGhlIHNpZ25hdHVyZSB7bGF5ZXJOYW1lOiBzdHJpbmcsIGFuaW1hdGlvbk5hbWU6IHN0cmluZ30gaXMgc3VwcGxpZWQgYXNcclxuICogYW4gYXJndW1lbnQgdG8gbGlzdGVuZXIgZnVuY3Rpb25zLlxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW0VWRU5UUy5yZW5hbWVBbmltYXRpb249b25SZW5hbWVBbmltYXRpb25FdmVudF0gLSBNZXNzYWdlXHJcbiAqIHRoYXQgaXMgZW1pdHRlZCBhZnRlciBbcmVuYW1lQW5pbWF0aW9uXXtAbGluayBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjcmVuYW1lQW5pbWF0aW9ufVxyXG4gKiBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgZXhlY3V0ZWQuIEFuIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIG5hbWUgb2YgdGhlIGxheWVyXHJcbiAqIHRoYXQgY29udGFpbnMgdGhlIGFuaW1hdGlvbiB0aGF0IHdhcyByZW5hbWVkLCB0aGUgb3JpZ2luYWwgbmFtZSBvZiB0aGUgYW5pbWF0aW9uXHJcbiAqIHRoYXQgd2FzIHJlbmFtZWQgYW5kIGl0cyB1cGRhdGVkIG5hbWUgd2l0aCB0aGUgc2lnbmF0dXJlIHtsYXllck5hbWU6IHN0cmluZywgb2xkTmFtZTogc3RyaW5nLCBuZXdOYW1lOiBzdHJpbmd9XHJcbiAqIGlzIHN1cHBsaWVkIGFzIGFuIGFyZ3VtZW50IHRvIGxpc3RlbmVyIGZ1bmN0aW9ucy5cclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtFVkVOVFMucGxheT1vblBsYXlFdmVudF0gLSBNZXNzYWdlIHRoYXQgaXMgZW1pdHRlZCBhZnRlclxyXG4gKiBlYWNoIGNhbGwgdG8gW3BsYXlde0BsaW5rIGNvcmUvQW5pbWF0aW9uRmVhdHVyZSNwbGF5QW5pbWF0aW9ufS4gQW4gb2JqZWN0IHJlcHJlc2VudGluZ1xyXG4gKiB0aGUgbmFtZSBvZiB0aGUgbGF5ZXIgY29udGFpbnMgdGhlIGFuaW1hdGlvbiB0aGF0IHdhcyBwbGF5ZWQgYW5kIHRoZSBuYW1lIG9mXHJcbiAqIHRoZSBhbmltYXRpb24gdGhhdCB3YXMgcGxheWVkIHdpdGggdGhlIHNpZ25hdHVyZSB7bGF5ZXJOYW1lOiBzdHJpbmcsIGFuaW1hdGlvbk5hbWU6IHN0cmluZ31cclxuICogaXMgc3VwcGxpZWQgYXMgYW4gYXJndW1lbnQgdG8gbGlzdGVuZXIgZnVuY3Rpb25zLlxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW0VWRU5UUy5wYXVzZT1vblBhdXNlRXZlbnRdIC0gTWVzc2FnZSB0aGF0IGlzIGVtaXR0ZWQgYWZ0ZXJcclxuICogZWFjaCBjYWxsIHRvIFtwYXVzZV17QGxpbmsgY29yZS9BbmltYXRpb25GZWF0dXJlI3BhdXNlQW5pbWF0aW9ufS4gQW4gb2JqZWN0IHJlcHJlc2VudGluZ1xyXG4gKiB0aGUgbmFtZSBvZiB0aGUgbGF5ZXIgY29udGFpbnMgdGhlIGFuaW1hdGlvbiB0aGF0IHdhcyBwYXVzZWQgYW5kIHRoZSBuYW1lIG9mXHJcbiAqIHRoZSBhbmltYXRpb24gdGhhdCB3YXMgcGF1c2VkIHdpdGggdGhlIHNpZ25hdHVyZSB7bGF5ZXJOYW1lOiBzdHJpbmcsIGFuaW1hdGlvbk5hbWU6IHN0cmluZ31cclxuICogaXMgc3VwcGxpZWQgYXMgYW4gYXJndW1lbnQgdG8gbGlzdGVuZXIgZnVuY3Rpb25zLlxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW0VWRU5UUy5yZXN1bWU9b25SZXN1bWVFdmVudF0gLSBNZXNzYWdlIHRoYXQgaXMgZW1pdHRlZCBhZnRlclxyXG4gKiBlYWNoIGNhbGwgdG8gW3Jlc3VtZV17QGxpbmsgY29yZS9BbmltYXRpb25GZWF0dXJlI3Jlc3VtZUFuaW1hdGlvbn0uIEFuIG9iamVjdCByZXByZXNlbnRpbmdcclxuICogdGhlIG5hbWUgb2YgdGhlIGxheWVyIGNvbnRhaW5zIHRoZSBhbmltYXRpb24gdGhhdCB3YXMgcmVzdW1lZCBhbmQgdGhlIG5hbWUgb2ZcclxuICogdGhlIGFuaW1hdGlvbiB0aGF0IHdhcyByZXN1bWVkIHdpdGggdGhlIHNpZ25hdHVyZSB7bGF5ZXJOYW1lOiBzdHJpbmcsIGFuaW1hdGlvbk5hbWU6IHN0cmluZ31cclxuICogaXMgc3VwcGxpZWQgYXMgYW4gYXJndW1lbnQgdG8gbGlzdGVuZXIgZnVuY3Rpb25zLlxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW0VWRU5UUy5pbnRlcnJ1cHQ9b25JbnRlcnJ1cHRFdmVudF0gLSBNZXNzYWdlIHRoYXQgaXMgZW1pdHRlZFxyXG4gKiBpZiB0aGVyZSBpcyBhIGN1cnJlbnQgc3BlZWNoIGluIHByb2dyZXNzIGFuZCBbcGxheV17QGxpbmsgY29yZS9BbmltYXRpb25GZWF0dXJlI3BsYXlBbmltYXRpb259XHJcbiAqIG9yIFtyZXN1bWVde0BsaW5rIGNvcmUvQW5pbWF0aW9uRmVhdHVyZSNyZXN1bWVBbmltYXRpb259IGFyZSBleGVjdXRlZCBmb3IgYSBuZXcgc3BlZWNoLlxyXG4gKiBBbiBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBuYW1lIG9mIHRoZSBsYXllciBjb250YWlucyB0aGUgYW5pbWF0aW9uIHRoYXQgd2FzXHJcbiAqIGludGVycnVwdGVkIGFuZCB0aGUgbmFtZSBvZiB0aGUgYW5pbWF0aW9uIHRoYXQgd2FzIGludGVycnVwdGVkIHdpdGggdGhlIHNpZ25hdHVyZVxyXG4gKiB7bGF5ZXJOYW1lOiBzdHJpbmcsIGFuaW1hdGlvbk5hbWU6IHN0cmluZ30gaXMgc3VwcGxpZWQgYXMgYW4gYXJndW1lbnQgdG8gbGlzdGVuZXJcclxuICogZnVuY3Rpb25zLlxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW0VWRU5UUy5zdG9wPW9uU3RvcEV2ZW50XSAtIE1lc3NhZ2UgdGhhdCBpcyBlbWl0dGVkIGFmdGVyXHJcbiAqIGVhY2ggY2FsbCB0byBbc3RvcF17QGxpbmsgY29yZS9BbmltYXRpb25GZWF0dXJlI3N0b3BBbmltYXRpb259IGFuZCB3aGVuIGEgc3BlZWNoIHJlYWNoZXNcclxuICogdGhlIGVuZCBvZiBwbGF5YmFjay4gQW4gb2JqZWN0IHJlcHJlc2VudGluZ1xyXG4gKiB0aGUgbmFtZSBvZiB0aGUgbGF5ZXIgY29udGFpbnMgdGhlIGFuaW1hdGlvbiB0aGF0IHdhcyBzdG9wcGVkIGFuZCB0aGUgbmFtZSBvZlxyXG4gKiB0aGUgYW5pbWF0aW9uIHRoYXQgd2FzIHN0b3BwZWQgd2l0aCB0aGUgc2lnbmF0dXJlIHtsYXllck5hbWU6IHN0cmluZywgYW5pbWF0aW9uTmFtZTogc3RyaW5nfVxyXG4gKiBpcyBzdXBwbGllZCBhcyBhbiBhcmd1bWVudCB0byBsaXN0ZW5lciBmdW5jdGlvbnMuXHJcbiAqL1xyXG5jbGFzcyBBbmltYXRpb25GZWF0dXJlIGV4dGVuZHMgQWJzdHJhY3RIb3N0RmVhdHVyZSB7XHJcbiAgLyoqXHJcbiAgICogQGNvbnN0cnVjdG9yXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge2NvcmUvSG9zdE9iamVjdH0gaG9zdCAtIEhvc3Qgb2JqZWN0IHRoYXQgb3ducyB0aGUgZmVhdHVyZS5cclxuICAgKi9cclxuICBjb25zdHJ1Y3Rvcihob3N0KSB7XHJcbiAgICBzdXBlcihob3N0KTtcclxuXHJcbiAgICB0aGlzLl9sYXllcnMgPSBbXTtcclxuICAgIHRoaXMuX2xheWVyTWFwID0ge307XHJcbiAgICB0aGlzLl9wYXVzZWQgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ha2Ugc3VyZSBhIHN1cHBsaWVkIGxheWVyIGluZGV4IGlzIHdpdGhpbiB0aGUgcmFuZ2Ugb2YgbGF5ZXJzLlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxyXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2V4aXN0aW5nPXRydWVdIC0gV2hldGhlciB0aGUgaW5kZXggcmVwcmVzZW50cyBhbmQgZXhpc3RpbmdcclxuICAgKiBsYXllciBvciBhIG5ldyBsYXllciB0byBiZSBhZGRlZC5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtudW1iZXI9fVxyXG4gICAqL1xyXG4gIF92YWxpZGF0ZUluZGV4KGluZGV4LCBleGlzdGluZyA9IHRydWUpIHtcclxuICAgIC8vIEluZGV4IGlzIGludmFsaWQgaWYgdGhlcmUgYXJlIG5vIGxheWVycyBhbmQgd2UncmUgY2hlY2tpbmcgZm9yIGFuIGV4aXN0aW5nIGxheWVyIGluZGV4XHJcbiAgICBpZiAodGhpcy5fbGF5ZXJzLmxlbmd0aCA9PT0gMCAmJiBleGlzdGluZykge1xyXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGxhc3RJbmRleCA9IGV4aXN0aW5nID8gdGhpcy5fbGF5ZXJzLmxlbmd0aCAtIDEgOiB0aGlzLl9sYXllcnMubGVuZ3RoO1xyXG5cclxuICAgIC8vIENvdW50IGZyb20gdGhlIGVuZCBvZiB0aGUgYXJyYXkgZm9yIG5lZ2F0aXZlIGluZGljZXNcclxuICAgIGlmIChpbmRleCA8IDApIHtcclxuICAgICAgaW5kZXggPSBsYXN0SW5kZXggKyBpbmRleCArIDE7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+IGxhc3RJbmRleCkge1xyXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIGluZGV4O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmUtZXZhbHVhdGUgaW50ZXJuYWwgd2VpZ2h0IHZhbHVlcyBvZiBsYXllcnMgc3RhcnRpbmcgZnJvbSB0aGUgdG9wIG9mIHRoZVxyXG4gICAqIHN0YWNrLiBPdmVycmlkZSBsYXllcnMnIHdlaWdodHMgYWZmZWN0IHRoZSB2YWx1ZXMgb2YgYWxsIGxheWVycyBsb3dlciBpbiB0aGVcclxuICAgKiBzdGFjay5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICovXHJcbiAgX3VwZGF0ZUludGVybmFsV2VpZ2h0cygpIHtcclxuICAgIGNvbnN0IG51bUxheWVycyA9IHRoaXMuX2xheWVycy5sZW5ndGg7XHJcbiAgICBsZXQgd2VpZ2h0TXVsdGlwbGllciA9IDE7XHJcblxyXG4gICAgLy8gVXBkYXRlIGludGVybmFsIHdlaWdodCB2YWx1ZXMgb24gbGF5ZXJzIGluIHJldmVyc2Ugb3JkZXJcclxuICAgIGZvciAobGV0IGkgPSBudW1MYXllcnMgLSAxOyBpID49IDA7IGktLSkge1xyXG4gICAgICBjb25zdCBsYXllciA9IHRoaXMuX2xheWVyc1tpXTtcclxuICAgICAgbGF5ZXIudXBkYXRlSW50ZXJuYWxXZWlnaHQod2VpZ2h0TXVsdGlwbGllcik7XHJcblxyXG4gICAgICAvLyBJZiB0aGUgbGF5ZXIgaXMgb3ZlcnJpZGUsIHVwZGF0ZSB0aGUgbXVsdGlwbGllciB3aXRoIHRoZSByZW1haW5kZXIgb2YgdGhlIGZ1bGwgd2VpZ2h0XHJcbiAgICAgIGlmIChsYXllci5ibGVuZE1vZGUgPT09IExheWVyQmxlbmRNb2Rlcy5PdmVycmlkZSAmJiBsYXllci5jdXJyZW50U3RhdGUpIHtcclxuICAgICAgICB3ZWlnaHRNdWx0aXBsaWVyICo9IDEgLSBsYXllci5jdXJyZW50U3RhdGUuaW50ZXJuYWxXZWlnaHQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiBhIG5ldyBpbnN0YW5jZSBvZiBhIFNpbmdsZVN0YXRlLlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gT3B0aW9ucyB0byBwYXNzIHRvIHRoZSBTaW5nbGVTdGF0ZSBjb25zdHJ1Y3Rvci5cclxuICAgKiBAcGFyYW0ge3N0cmluZz19IG9wdGlvbnMubmFtZSAtIE5hbWUgZm9yIHRoZSBhbmltYXRpb24gc3RhdGUuIE5hbWVzIG11c3QgYmVcclxuICAgKiB1bmlxdWUgZm9yIHRoZSBsYXllciB0aGUgc3RhdGUgaXMgYXBwbGllZCB0by5cclxuICAgKiBAcGFyYW0ge3dlaWdodH0gW29wdGlvbnMud2VpZ2h0PTBdIC0gVGhlIDAtMSBhbW91bnQgb2YgaW5mbHVlbmNlIHRoZSBzdGF0ZSB3aWxsIGhhdmUuXHJcbiAgICogQHBhcmFtIHt0aW1lU2NhbGV9IFtvcHRpb25zLnRpbWVTY2FsZT0xXSAtIEZhY3RvciB0byBzY2FsZSB0aGUgcGxheWJhY2sgc3BlZWQgb2YgdGhlXHJcbiAgICogYW5pbWF0aW9uLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5sb29wQ291bnQ9SW5maW5pdHldIC0gTnVtYmVyIG9mIHRpbWVzIHRoZSBhbmltYXRpb24gc2hvdWxkXHJcbiAgICogcmVwZWF0IGJlZm9yZSBmaW5pc2hpbmcuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmJsZW5kTW9kZT1MYXllckJsZW5kTW9kZXNbRGVmYXVsdExheWVyQmxlbmRNb2RlXV0gLSBUeXBlIG9mXHJcbiAgICogYmxlbmRpbmcgdGhlIGFuaW1hdGlvbiBzaG91bGQgdXNlLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge2NvcmUvU2luZ2xlU3RhdGV9XHJcbiAgICovXHJcbiAgX2NyZWF0ZVNpbmdsZVN0YXRlKG9wdGlvbnMpIHtcclxuICAgIHJldHVybiBuZXcgU2luZ2xlU3RhdGUob3B0aW9ucyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gYSBuZXcgaW5zdGFuY2Ugb2YgYSBGcmVlQmxlbmRTdGF0ZS5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gcGFzcyB0byB0aGUgRnJlZUJsZW5kU3RhdGUgY29uc3RydWN0b3IuXHJcbiAgICogQHBhcmFtIHtzdHJpbmc9fSBvcHRpb25zLm5hbWUgLSBOYW1lIGZvciB0aGUgYW5pbWF0aW9uIHN0YXRlLiBOYW1lcyBtdXN0IGJlXHJcbiAgICogdW5pcXVlIGZvciB0aGUgbGF5ZXIgdGhlIHN0YXRlIGlzIGFwcGxpZWQgdG8uXHJcbiAgICogQHBhcmFtIHt3ZWlnaHR9IFtvcHRpb25zLndlaWdodD0wXSAtIFRoZSAwLTEgYW1vdW50IG9mIGluZmx1ZW5jZSB0aGUgc3RhdGUgd2lsbCBoYXZlLlxyXG4gICAqIEBwYXJhbSB7dGltZVNjYWxlfSBbb3B0aW9ucy50aW1lU2NhbGU9MV0gLSBGYWN0b3IgdG8gc2NhbGUgdGhlIHBsYXliYWNrIHNwZWVkIG9mIHRoZVxyXG4gICAqIGFuaW1hdGlvbi5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMubG9vcENvdW50PUluZmluaXR5XSAtIE51bWJlciBvZiB0aW1lcyB0aGUgYW5pbWF0aW9uIHNob3VsZFxyXG4gICAqIHJlcGVhdCBiZWZvcmUgZmluaXNoaW5nLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5ibGVuZE1vZGU9TGF5ZXJCbGVuZE1vZGVzW0RlZmF1bHRMYXllckJsZW5kTW9kZV1dIC0gVHlwZSBvZlxyXG4gICAqIGJsZW5kaW5nIHRoZSBhbmltYXRpb24gc2hvdWxkIHVzZS5cclxuICAgKiBAcGFyYW0ge0FycmF5LjxPYmplY3Q+fSBbb3B0aW9ucy5ibGVuZFN0YXRlT3B0aW9uc10gLSBBcnJheSBvZiBvcHRpb25zIHVzZWQgdG8gY3JlYXRlIHRoZVxyXG4gICAqIGJsZW5kIHN0YXRlcyBmb3IgdGhpcyBjb250YWluZXIuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7RnJlZUJsZW5kU3RhdGV9XHJcbiAgICovXHJcbiAgX2NyZWF0ZUZyZWVCbGVuZFN0YXRlKG9wdGlvbnMpIHtcclxuICAgIGNvbnN0IHtibGVuZFN0YXRlT3B0aW9ucyA9IFtdfSA9IG9wdGlvbnM7XHJcblxyXG4gICAgY29uc3QgYmxlbmRTdGF0ZXMgPSBbXTtcclxuICAgIGJsZW5kU3RhdGVPcHRpb25zLmZvckVhY2goYmxlbmRPcHRpb25zID0+IHtcclxuICAgICAgYmxlbmRTdGF0ZXMucHVzaChcclxuICAgICAgICB0aGlzLl9jcmVhdGVTaW5nbGVTdGF0ZSh7Li4uYmxlbmRPcHRpb25zLCBibGVuZE1vZGU6IG9wdGlvbnMuYmxlbmRNb2RlfSlcclxuICAgICAgKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBuZXcgRnJlZUJsZW5kU3RhdGUob3B0aW9ucywgYmxlbmRTdGF0ZXMpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIGEgbmV3IGluc3RhbmNlIG9mIGEgUXVldWVTdGF0ZS5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gcGFzcyB0byB0aGUgUXVldWVTdGF0ZSBjb25zdHJ1Y3Rvci5cclxuICAgKiBAcGFyYW0ge3N0cmluZz19IG9wdGlvbnMubmFtZSAtIE5hbWUgZm9yIHRoZSBhbmltYXRpb24gc3RhdGUuIE5hbWVzIG11c3QgYmVcclxuICAgKiB1bmlxdWUgZm9yIHRoZSBsYXllciB0aGUgc3RhdGUgaXMgYXBwbGllZCB0by5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMud2VpZ2h0PTBdIC0gVGhlIDAtMSBhbW91bnQgb2YgaW5mbHVlbmNlIHRoZSBzdGF0ZSB3aWxsIGhhdmUuXHJcbiAgICogQHBhcmFtIHtudW1iZXI9fSBvcHRpb25zLnRyYW5zaXRpb25UaW1lIC0gVGhlIGFtb3VudCBvZiB0aW1lIGl0IHRha2VzIHRvIHRyYW5zaXRpb25cclxuICAgKiBiZXR3ZWVuIHF1ZXVlZCBzdGF0ZXMuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmJsZW5kTW9kZT1MYXllckJsZW5kTW9kZXNbRGVmYXVsdExheWVyQmxlbmRNb2RlXV0gLSBUeXBlIG9mXHJcbiAgICogYmxlbmRpbmcgdGhlIGFuaW1hdGlvbiBzaG91bGQgdXNlLlxyXG4gICAqIEBwYXJhbSB7QXJyYXkuPE9iamVjdD59IFtvcHRpb25zLnF1ZXVlT3B0aW9uc10gLSBBcnJheSBvZiBvcHRpb25zIHVzZWQgdG8gY3JlYXRlIHRoZVxyXG4gICAqIHF1ZXVlIHN0YXRlcyBmb3IgdGhpcyBjb250YWluZXIuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7UXVldWVTdGF0ZX1cclxuICAgKi9cclxuICBfY3JlYXRlUXVldWVTdGF0ZShvcHRpb25zKSB7XHJcbiAgICBjb25zdCB7cXVldWVPcHRpb25zID0gW119ID0gb3B0aW9ucztcclxuXHJcbiAgICBjb25zdCBxdWV1ZVN0YXRlcyA9IHF1ZXVlT3B0aW9ucy5tYXAocXVldWVPcHRpb24gPT5cclxuICAgICAgdGhpcy5fY3JlYXRlU2luZ2xlU3RhdGUoe1xyXG4gICAgICAgIHRyYW5zaXRpb25UaW1lOiBvcHRpb25zLnRyYW5zaXRpb25UaW1lLFxyXG4gICAgICAgIC4uLnF1ZXVlT3B0aW9uLFxyXG4gICAgICAgIGJsZW5kTW9kZTogb3B0aW9ucy5ibGVuZE1vZGUsXHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG5cclxuICAgIHJldHVybiBuZXcgUXVldWVTdGF0ZShvcHRpb25zLCBxdWV1ZVN0YXRlcyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gYSBuZXcgaW5zdGFuY2Ugb2YgYSBCbGVuZDFkU3RhdGUuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBPcHRpb25zIHRvIHBhc3MgdG8gdGhlIEJsZW5kMWRTdGF0ZSBjb25zdHJ1Y3Rvci5cclxuICAgKiBAcGFyYW0ge3N0cmluZz19IG9wdGlvbnMubmFtZSAtIE5hbWUgZm9yIHRoZSBhbmltYXRpb24gc3RhdGUuIE5hbWVzIG11c3QgYmVcclxuICAgKiB1bmlxdWUgZm9yIHRoZSBsYXllciB0aGUgc3RhdGUgaXMgYXBwbGllZCB0by5cclxuICAgKiBAcGFyYW0ge3dlaWdodH0gW29wdGlvbnMud2VpZ2h0PTBdIC0gVGhlIDAtMSBhbW91bnQgb2YgaW5mbHVlbmNlIHRoZSBzdGF0ZSB3aWxsIGhhdmUuXHJcbiAgICogQHBhcmFtIHt0aW1lU2NhbGV9IFtvcHRpb25zLnRpbWVTY2FsZT0xXSAtIEZhY3RvciB0byBzY2FsZSB0aGUgcGxheWJhY2sgc3BlZWQgb2YgdGhlXHJcbiAgICogYW5pbWF0aW9uLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5sb29wQ291bnQ9SW5maW5pdHldIC0gTnVtYmVyIG9mIHRpbWVzIHRoZSBhbmltYXRpb24gc2hvdWxkXHJcbiAgICogcmVwZWF0IGJlZm9yZSBmaW5pc2hpbmcuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmJsZW5kTW9kZT1MYXllckJsZW5kTW9kZXNbRGVmYXVsdExheWVyQmxlbmRNb2RlXV0gLSBUeXBlIG9mXHJcbiAgICogYmxlbmRpbmcgdGhlIGFuaW1hdGlvbiBzaG91bGQgdXNlLlxyXG4gICAqIEBwYXJhbSB7QXJyYXkuPE9iamVjdD59IFtvcHRpb25zLmJsZW5kU3RhdGVPcHRpb25zXSAtIEFycmF5IG9mIG9wdGlvbnMgdXNlZCB0byBjcmVhdGUgdGhlXHJcbiAgICogYmxlbmQgc3RhdGVzIGZvciB0aGlzIGNvbnRhaW5lci5cclxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBbb3B0aW9ucy5ibGVuZFRocmVzaG9sZHNdIC0gQXJyYXkgb2YgbnVtYmVycyB1c2VkIHRvIHNldCB0aGVcclxuICAgKiB0aHJlc2hvbGRzIGZvciBlYWNoIGJsZW5kIHN0YXRlIGluIHRoaXMgY29udGFpbmVyLlxyXG4gICAqIEBwYXJhbSB7QXJyYXkuPGJvb2xlYW4+fSBbb3B0aW9ucy5ibGVuZE1hdGNoUGhhc2VzPVtdXSAtIE9wdGlvbmFsIGFycmF5IG9mIGJvb2xlYW5zIHVzZWQgdG9cclxuICAgKiBzZXQgd2hldGhlciBvciBub3QgZWFjaCBibGVuZCBzdGF0ZSBpbiB0aGlzIGNvbnRhaW5lciB3aWxsIG1hdGNoIHBoYXNlcy5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtCbGVuZDFkU3RhdGV9XHJcbiAgICovXHJcbiAgX2NyZWF0ZUJsZW5kMWRTdGF0ZShvcHRpb25zKSB7XHJcbiAgICBjb25zdCB7YmxlbmRTdGF0ZU9wdGlvbnMgPSBbXX0gPSBvcHRpb25zO1xyXG4gICAgY29uc3Qge2JsZW5kVGhyZXNob2xkcyA9IFtdfSA9IG9wdGlvbnM7XHJcbiAgICBjb25zdCB7YmxlbmRNYXRjaFBoYXNlcyA9IFtdfSA9IG9wdGlvbnM7XHJcblxyXG4gICAgY29uc3QgYmxlbmRTdGF0ZXMgPSBbXTtcclxuICAgIGJsZW5kU3RhdGVPcHRpb25zLmZvckVhY2goYmxlbmRPcHRpb25zID0+IHtcclxuICAgICAgYmxlbmRTdGF0ZXMucHVzaChcclxuICAgICAgICB0aGlzLl9jcmVhdGVTaW5nbGVTdGF0ZSh7Li4uYmxlbmRPcHRpb25zLCBibGVuZE1vZGU6IG9wdGlvbnMuYmxlbmRNb2RlfSlcclxuICAgICAgKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBuZXcgQmxlbmQxZFN0YXRlKFxyXG4gICAgICBvcHRpb25zLFxyXG4gICAgICBibGVuZFN0YXRlcyxcclxuICAgICAgYmxlbmRUaHJlc2hvbGRzLFxyXG4gICAgICBibGVuZE1hdGNoUGhhc2VzXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIGEgbmV3IGluc3RhbmNlIG9mIGEgQmxlbmQyZFN0YXRlLlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gT3B0aW9ucyB0byBwYXNzIHRvIHRoZSBCbGVuZDFkU3RhdGUgY29uc3RydWN0b3IuXHJcbiAgICogQHBhcmFtIHtzdHJpbmc9fSBvcHRpb25zLm5hbWUgLSBOYW1lIGZvciB0aGUgYW5pbWF0aW9uIHN0YXRlLiBOYW1lcyBtdXN0IGJlXHJcbiAgICogdW5pcXVlIGZvciB0aGUgbGF5ZXIgdGhlIHN0YXRlIGlzIGFwcGxpZWQgdG8uXHJcbiAgICogQHBhcmFtIHt3ZWlnaHR9IFtvcHRpb25zLndlaWdodD0wXSAtIFRoZSAwLTEgYW1vdW50IG9mIGluZmx1ZW5jZSB0aGUgc3RhdGUgd2lsbCBoYXZlLlxyXG4gICAqIEBwYXJhbSB7dGltZVNjYWxlfSBbb3B0aW9ucy50aW1lU2NhbGU9MV0gLSBGYWN0b3IgdG8gc2NhbGUgdGhlIHBsYXliYWNrIHNwZWVkIG9mIHRoZVxyXG4gICAqIGFuaW1hdGlvbi5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMubG9vcENvdW50PUluZmluaXR5XSAtIE51bWJlciBvZiB0aW1lcyB0aGUgYW5pbWF0aW9uIHNob3VsZFxyXG4gICAqIHJlcGVhdCBiZWZvcmUgZmluaXNoaW5nLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5ibGVuZE1vZGU9TGF5ZXJCbGVuZE1vZGVzW0RlZmF1bHRMYXllckJsZW5kTW9kZV1dIC0gVHlwZSBvZlxyXG4gICAqIGJsZW5kaW5nIHRoZSBhbmltYXRpb24gc2hvdWxkIHVzZS5cclxuICAgKiBAcGFyYW0ge0FycmF5LjxPYmplY3Q+fSBbb3B0aW9ucy5ibGVuZFN0YXRlT3B0aW9uc10gLSBBcnJheSBvZiBvcHRpb25zIHVzZWQgdG8gY3JlYXRlIHRoZVxyXG4gICAqIGJsZW5kIHN0YXRlcyBmb3IgdGhpcyBjb250YWluZXIuXHJcbiAgICogQHBhcmFtIHtBcnJheS48QXJyYXkuPG51bWJlcj4+fSBbb3B0aW9ucy5ibGVuZFRocmVzaG9sZHNdIC0gQXJyYXkgb2YgQXJyYXkgb2YgbnVtYmVycyB1c2VkIHRvIHNldCB0aGVcclxuICAgKiB0aHJlc2hvbGRzIGZvciBlYWNoIGJsZW5kIHN0YXRlIGluIHRoaXMgY29udGFpbmVyLlxyXG4gICAqIEBwYXJhbSB7QXJyYXkuPGJvb2xlYW4+fSBbb3B0aW9ucy5ibGVuZE1hdGNoUGhhc2VzPVtdXSAtIE9wdGlvbmFsIGFycmF5IG9mIGJvb2xlYW5zIHVzZWQgdG9cclxuICAgKiBzZXQgd2hldGhlciBvciBub3QgZWFjaCBibGVuZCBzdGF0ZSBpbiB0aGlzIGNvbnRhaW5lciB3aWxsIG1hdGNoIHBoYXNlcy5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtCbGVuZDFkU3RhdGV9XHJcbiAgICovXHJcbiAgX2NyZWF0ZUJsZW5kMmRTdGF0ZShvcHRpb25zKSB7XHJcbiAgICBjb25zdCB7YmxlbmRTdGF0ZU9wdGlvbnMgPSBbXX0gPSBvcHRpb25zO1xyXG4gICAgY29uc3Qge2JsZW5kVGhyZXNob2xkcyA9IFtdfSA9IG9wdGlvbnM7XHJcbiAgICBjb25zdCB7YmxlbmRNYXRjaFBoYXNlcyA9IFtdfSA9IG9wdGlvbnM7XHJcblxyXG4gICAgY29uc3QgYmxlbmRTdGF0ZXMgPSBbXTtcclxuICAgIGJsZW5kU3RhdGVPcHRpb25zLmZvckVhY2goYmxlbmRPcHRpb25zID0+IHtcclxuICAgICAgYmxlbmRTdGF0ZXMucHVzaChcclxuICAgICAgICB0aGlzLl9jcmVhdGVTaW5nbGVTdGF0ZSh7Li4uYmxlbmRPcHRpb25zLCBibGVuZE1vZGU6IG9wdGlvbnMuYmxlbmRNb2RlfSlcclxuICAgICAgKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBuZXcgQmxlbmQyZFN0YXRlKFxyXG4gICAgICBvcHRpb25zLFxyXG4gICAgICBibGVuZFN0YXRlcyxcclxuICAgICAgYmxlbmRUaHJlc2hvbGRzLFxyXG4gICAgICBibGVuZE1hdGNoUGhhc2VzXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIGEgbmV3IGluc3RhbmNlIG9mIGEgUmFuZG9tQW5pbWF0aW9uU3RhdGUuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBPcHRpb25zIHRvIHBhc3MgdG8gdGhlIFJhbmRvbUFuaW1hdGlvblN0YXRlIGNvbnN0cnVjdG9yLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nPX0gb3B0aW9ucy5uYW1lIC0gTmFtZSBmb3IgdGhlIGFuaW1hdGlvbiBzdGF0ZS4gTmFtZXMgbXVzdCBiZVxyXG4gICAqIHVuaXF1ZSBmb3IgdGhlIGxheWVyIHRoZSBzdGF0ZSBpcyBhcHBsaWVkIHRvLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5wbGF5SW50ZXJ2YWw9M10gLSBUaGUgYmFzZSBhbmltYXRpb24gcGxheWJhY2sgaW50ZXJ2YWwuXHJcbiAgICogQHBhcmFtIHtBcnJheS48T2JqZWN0Pn0gW29wdGlvbnMuc3ViU3RhdGVPcHRpb25zXSAtIEFycmF5IG9mIG9wdGlvbnMgdXNlZCB0byBjcmVhdGUgdGhlXHJcbiAgICogc3ViIHN0YXRlcyBmb3IgdGhpcyBjb250YWluZXIuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7UmFuZG9tQW5pbWF0aW9uU3RhdGV9XHJcbiAgICovXHJcbiAgX2NyZWF0ZVJhbmRvbUFuaW1hdGlvblN0YXRlKG9wdGlvbnMpIHtcclxuICAgIGNvbnN0IHtzdWJTdGF0ZU9wdGlvbnMgPSBbXX0gPSBvcHRpb25zO1xyXG5cclxuICAgIGNvbnN0IHN1YlN0YXRlcyA9IFtdO1xyXG4gICAgc3ViU3RhdGVPcHRpb25zLmZvckVhY2goc3ViU3RhdGVPcHRpb25zID0+IHtcclxuICAgICAgc3ViU3RhdGVzLnB1c2goXHJcbiAgICAgICAgdGhpcy5fY3JlYXRlU2luZ2xlU3RhdGUoe1xyXG4gICAgICAgICAgLi4uc3ViU3RhdGVPcHRpb25zLFxyXG4gICAgICAgICAgYmxlbmRNb2RlOiBvcHRpb25zLmJsZW5kTW9kZSxcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIG5ldyBSYW5kb21BbmltYXRpb25TdGF0ZShvcHRpb25zLCBzdWJTdGF0ZXMpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWFrZSBzdXJlIHRoZSBsYXllciB3aXRoIHRoZSBnaXZlbiBuYW1lIGV4aXN0cyBhbmQgcmV0dXJuIGEgdW5pcXVlIHZlcnNpb25cclxuICAgKiBvZiB0aGUgYW5pbWF0aW9uIG5hbWUgc3VwcGxpZWQgZm9yIHRoYXQgbGF5ZXIuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVyTmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRvIGNoZWNrIGFnYWluc3QuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFuaW1hdGlvbk5hbWUgLSBOYW1lIG9mIHRoZSBhbmltYXRpb24gdG8gdmFsaWRhdGUuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBWYWxpZGF0ZWQgYW5pbWF0aW9uIG5hbWUuXHJcbiAgICovXHJcbiAgX3ZhbGlkYXRlTmV3QW5pbWF0aW9uKGxheWVyTmFtZSwgYW5pbWF0aW9uTmFtZSkge1xyXG4gICAgLy8gTWFrZSBzdXJlIHRoZSBsYXllck5hbWUgaXMgdmFsaWRcclxuICAgIGNvbnN0IGxheWVyID0gdGhpcy5fbGF5ZXJNYXBbbGF5ZXJOYW1lXTtcclxuXHJcbiAgICBpZiAobGF5ZXIgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgYENhbm5vdCBhZGQgYW5pbWF0aW9uIHRvIGxheWVyICR7bGF5ZXJOYW1lfSBmcm9tIGhvc3QgJHt0aGlzLl9ob3N0LmlkfS4gTm8gbGF5ZXIgZXhpc3RzIHdpdGggdGhpcyBuYW1lLmBcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBNYWtlIHN1cmUgdGhlIGFuaW1hdGlvbk5hbWUgaXMgdW5pcXVlXHJcbiAgICBjb25zdCBuYW1lID0gVXRpbHMuZ2V0VW5pcXVlTmFtZShhbmltYXRpb25OYW1lLCBsYXllci5nZXRTdGF0ZU5hbWVzKCkpO1xyXG5cclxuICAgIGlmIChuYW1lICE9PSBhbmltYXRpb25OYW1lKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICBgQW5pbWF0aW9uIG5hbWUgJHthbmltYXRpb25OYW1lfSBpcyBub3QgdW5pcXVlIGZvciBsYXllciAke2xheWVyLm5hbWV9LiBBbmltYXRpb24gd2lsbCBiZSByZW5hbWVkIHRvICR7bmFtZX0uYFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBuYW1lO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyB3aGV0aGVyIG9yIG5vdCBhbGwgYW5pbWF0aW9ucyBhcmUgcGF1c2VkLlxyXG4gICAqXHJcbiAgICogQHJlYWRvbmx5XHJcbiAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICovXHJcbiAgZ2V0IHBhdXNlZCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9wYXVzZWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIGFuIGFycmF5IG9mIG5hbWVzIG9mIGFuaW1hdGlvbiBsYXllcnMuXHJcbiAgICpcclxuICAgKiBAcmVhZG9ubHlcclxuICAgKiBAdHlwZSB7QXJyYXkuPHN0cmluZz59XHJcbiAgICovXHJcbiAgZ2V0IGxheWVycygpIHtcclxuICAgIHJldHVybiB0aGlzLl9sYXllcnMubWFwKGxheWVyID0+IGxheWVyLm5hbWUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlIGFuZCBzdG9yZSBhIG5ldyBhbmltYXRpb24gbGF5ZXIuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gW25hbWU9J05ld0xheWVyJ10gLSBOYW1lIGZvciB0aGUgbGF5ZXIuXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XSAtIE9wdGlvbnMgdG8gcGFzcyB0byB7QGxpbmsgQW5pbWF0aW9uTGF5ZXIjY29uc3RydWN0b3J9XHJcbiAgICogQHBhcmFtIHtpbmRleD19IGluZGV4IC0gSW5kZXggdG8gaW5zZXJ0IHRoZSBuZXcgbGF5ZXIgYXQuIElmIG5vbmUgaXMgcHJvdmlkZWRcclxuICAgKiBpdCB3aWxsIGJlIGFkZGVkIHRvIHRoZSBlbmQgb2YgdGhlIHN0YWNrLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge251bWJlcn0gSW5kZXggb2YgdGhlIG5ldyBsYXllci5cclxuICAgKi9cclxuICBhZGRMYXllcihuYW1lID0gJ05ld0xheWVyJywgb3B0aW9ucyA9IHt9LCBpbmRleCkge1xyXG4gICAgY29uc3QgbnVtTGF5ZXJzID0gdGhpcy5fbGF5ZXJzLmxlbmd0aDtcclxuICAgIGxldCBsYXllckluZGV4ID0gaW5kZXg7XHJcblxyXG4gICAgLy8gTWFrZSBzdXJlIHRoZSBnaXZlbiBpbmRleCBpcyB3aXRoaW4gdGhlIHJhbmdlIG9mIGxheWVyc1xyXG4gICAgaWYgKGluZGV4ID09PSB1bmRlZmluZWQgfHwgaW5kZXggPT09IC0xKSB7XHJcbiAgICAgIGxheWVySW5kZXggPSB0aGlzLl9sYXllcnMubGVuZ3RoO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbGF5ZXJJbmRleCA9IHRoaXMuX3ZhbGlkYXRlSW5kZXgoaW5kZXgsIGZhbHNlKTtcclxuXHJcbiAgICAgIGlmIChsYXllckluZGV4ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAvLyBJbnNlcnQgYXQgdGhlIGJlZ2lubmluZyBpZiB0aGUgdXNlciBwYXNzZWQgaW4gYSBuZWdhdGl2ZSBpbmRleFxyXG4gICAgICAgIGlmIChpbmRleCA8IDApIHtcclxuICAgICAgICAgIGxheWVySW5kZXggPSAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBPdGhlcndpc2UgYXBwZW5kIHRvIHRoZSBlbmRcclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGxheWVySW5kZXggPSB0aGlzLl9sYXllcnMubGVuZ3RoO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgICAgYEluZGV4ICR7aW5kZXh9IGlzIGludmFsaWQgZm9yIGhvc3QgJHt0aGlzLl9ob3N0LmlkfS4gTmV3IGxheWVyIHdpbGwgYmUgYWRkZWQgYXQgdGhlIGNsb3Nlc3QgdmFsaWQgaW5kZXg6ICR7bGF5ZXJJbmRleH0uYFxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBNYWtlIHN1cmUgdGhlIGxheWVyIG5hbWUgaXMgdW5pcXVlXHJcbiAgICBjb25zdCBsYXllck5hbWUgPSBVdGlscy5nZXRVbmlxdWVOYW1lKG5hbWUsIE9iamVjdC5rZXlzKHRoaXMuX2xheWVyTWFwKSk7XHJcblxyXG4gICAgaWYgKG5hbWUgIT09IGxheWVyTmFtZSkge1xyXG4gICAgICBjb25zb2xlLndhcm4oXHJcbiAgICAgICAgYExheWVyIG5hbWUgJHtuYW1lfSBpcyBub3QgdW5pcXVlLiBOZXcgbGF5ZXIgd2lsbCBiZSBhZGRlZCB3aXRoIHRoZSBuYW1lICR7bGF5ZXJOYW1lfS5gXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgbGF5ZXIgPSBuZXcgQW5pbWF0aW9uTGF5ZXIoey4uLm9wdGlvbnMsIG5hbWU6IGxheWVyTmFtZX0pO1xyXG4gICAgdGhpcy5fbGF5ZXJNYXBbbGF5ZXJOYW1lXSA9IGxheWVyO1xyXG5cclxuICAgIGlmIChsYXllckluZGV4ID09PSBudW1MYXllcnMpIHtcclxuICAgICAgdGhpcy5fbGF5ZXJzLnB1c2gobGF5ZXIpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fbGF5ZXJzLnNwbGljZShsYXllckluZGV4LCAwLCBsYXllcik7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gTm90aWZ5IHRoYXQgYSBsYXllciBoYXMgYmVlbiBhZGRlZCB0byB0aGUgZmVhdHVyZVxyXG4gICAgY29uc3QgZXZlbnREYXRhID0ge25hbWU6IGxheWVyTmFtZSwgaW5kZXg6IGxheWVySW5kZXh9O1xyXG4gICAgdGhpcy5lbWl0KHRoaXMuY29uc3RydWN0b3IuRVZFTlRTLmFkZExheWVyLCBldmVudERhdGEpO1xyXG5cclxuICAgIHJldHVybiBldmVudERhdGE7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZW1vdmUgYW4gYW5pbWF0aW9uIGxheWVyIGZyb20gdGhlIHN0YWNrLiBBbmltYXRpb25zIG9uIHRoaXMgbGF5ZXIgd2lsbCBub1xyXG4gICAqIGxvbmdlciBiZSBldmFsdWF0ZWQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIE5hbWUgZm9yIHRoZSBsYXllciB0byByZW1vdmUuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciBvciBub3QgcmVtb3ZhbCB3YXMgc3VjY2Vzc2Z1bC5cclxuICAgKi9cclxuICByZW1vdmVMYXllcihuYW1lKSB7XHJcbiAgICBjb25zdCBsYXllciA9IHRoaXMuX2xheWVyTWFwW25hbWVdO1xyXG5cclxuICAgIGlmIChsYXllciA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICBgRGlkIG5vdCByZW1vdmUgbGF5ZXIgJHtuYW1lfSBmcm9tIGhvc3QgJHt0aGlzLl9ob3N0LmlkfS4gTm8gbGF5ZXIgZXhpc3RzIHdpdGggdGhpcyBuYW1lLmBcclxuICAgICAgKTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGxheWVyLmRpc2NhcmQoKTtcclxuXHJcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuX2xheWVycy5pbmRleE9mKGxheWVyKTtcclxuICAgIHRoaXMuX2xheWVycy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgZGVsZXRlIHRoaXMuX2xheWVyTWFwW25hbWVdO1xyXG5cclxuICAgIC8vIE5vdGlmeSB0aGF0IGEgbGF5ZXIgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIHRoZSBmZWF0dXJlXHJcbiAgICB0aGlzLmVtaXQodGhpcy5jb25zdHJ1Y3Rvci5FVkVOVFMucmVtb3ZlTGF5ZXIsIHtuYW1lLCBpbmRleH0pO1xyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmUtb3JkZXIgdGhlIGxheWVyIHN0YWNrIHNvIHRoYXQgdGhlIGxheWVyIHdpdGggdGhlIGdpdmVuIG5hbWUgaXMgcG9zaXRpb25lZFxyXG4gICAqIGF0IHRoZSBnaXZlbiBpbmRleC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gTmFtZSBvZiB0aGUgbGF5ZXIgdG8gbW92ZS5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXggLSBOZXcgaW5kZXggdG8gcG9zaXRpb24gdGhlIGxheWVyIGF0LlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge251bWJlcn0gVGhlIG5ldyBpbmRleCBvZiB0aGUgbGF5ZXJcclxuICAgKi9cclxuICBtb3ZlTGF5ZXIobmFtZSwgaW5kZXgpIHtcclxuICAgIC8vIE1ha2Ugc3VyZSB0aGUgbmFtZSBpcyB2YWxpZFxyXG4gICAgY29uc3QgbGF5ZXIgPSB0aGlzLl9sYXllck1hcFtuYW1lXTtcclxuXHJcbiAgICBpZiAobGF5ZXIgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgYENhbm5vdCBtb3ZlIGxheWVyICR7bmFtZX0gZnJvbSBob3N0ICR7dGhpcy5faG9zdC5pZH0uIE5vIGxheWVyIGV4aXN0cyB3aXRoIHRoaXMgbmFtZS5gXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gTWFrZSBzdXJlIHRoZSBpbmRleCBmYWxscyBpbiB0aGUgcmFuZ2Ugb2YgZXhpc3RpbmcgbGF5ZXJzXHJcbiAgICBjb25zdCBsYXllckluZGV4ID0gdGhpcy5fdmFsaWRhdGVJbmRleChpbmRleCwgdHJ1ZSk7XHJcbiAgICBjb25zdCBsYXN0SW5kZXggPSB0aGlzLl9sYXllcnMubGVuZ3RoIC0gMTtcclxuXHJcbiAgICBpZiAobGF5ZXJJbmRleCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgQ2Fubm90IG1vdmUgbGF5ZXIgJHtuYW1lfSBmcm9tIGhvc3QgJHt0aGlzLl9ob3N0LmlkfSB0byBpbmRleCAke2luZGV4fS4gSW5kZXggbXVzdCBiZSBpbiB0aGUgMCAtICR7bGFzdEluZGV4fSByYW5nZS5gXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgY3VycmVudEluZGV4ID0gdGhpcy5fbGF5ZXJzLmluZGV4T2YobGF5ZXIpO1xyXG4gICAgaWYgKGN1cnJlbnRJbmRleCA9PT0gbGF5ZXJJbmRleCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUmVtb3ZlIGZyb20gdGhlIGN1cnJlbnQgcG9zaXRpb25cclxuICAgIHRoaXMuX2xheWVycy5zcGxpY2UoY3VycmVudEluZGV4LCAxKTtcclxuXHJcbiAgICAvLyBJbnNlcnQgYXQgdGhlIG5ldyBwb3NpdGlvblxyXG4gICAgaWYgKGxheWVySW5kZXggPT09IGxhc3RJbmRleCkge1xyXG4gICAgICB0aGlzLl9sYXllcnMucHVzaChsYXllcik7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9sYXllcnMuc3BsaWNlKGxheWVySW5kZXgsIDAsIGxheWVyKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbGF5ZXJJbmRleDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZSB0aGUgbmFtZSBvZiBhIGxheWVyLiBOYW1lcyBtdXN0IGJlIHVuaXF1ZSwgaWYgdGhlIG5ldyBuYW1lIGlzIG5vdFxyXG4gICAqIHVuaXF1ZSBpdCB3aWxsIGhhdmUgdHJhaWxpbmcgbnVtYmVycyBhcHBlbmRlZCB1bnRpbCBpdCBpcyB1bmlxdWUuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gY3VycmVudE5hbWUgLSBDdXJyZW50IG5hbWUgb2YgdGhlIGxheWVyLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuZXdOYW1lIC0gTmV3IG5hbWUgdG8gc2V0IG9uIHRoZSBsYXllci5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBuZXcgbmFtZSBvZiB0aGUgbGF5ZXJcclxuICAgKi9cclxuICByZW5hbWVMYXllcihjdXJyZW50TmFtZSwgbmV3TmFtZSkge1xyXG4gICAgLy8gTWFrZSBzdXJlIHRoZSBuYW1lIGlzIHZhbGlkXHJcbiAgICBjb25zdCBsYXllciA9IHRoaXMuX2xheWVyTWFwW2N1cnJlbnROYW1lXTtcclxuXHJcbiAgICBpZiAobGF5ZXIgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgYENhbm5vdCByZW5hbWUgbGF5ZXIgJHtjdXJyZW50TmFtZX0gZnJvbSBob3N0ICR7dGhpcy5faG9zdC5pZH0uIE5vIGxheWVyIGV4aXN0cyB3aXRoIHRoaXMgbmFtZS5gXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gTWFrZSBzdXJlIHRoZSBsYXllciBuYW1lIGlzIHVuaXF1ZVxyXG4gICAgY29uc3QgbmFtZSA9IFV0aWxzLmdldFVuaXF1ZU5hbWUobmV3TmFtZSwgT2JqZWN0LmtleXModGhpcy5fbGF5ZXJNYXApKTtcclxuXHJcbiAgICBpZiAobmFtZSAhPT0gbmV3TmFtZSkge1xyXG4gICAgICBjb25zb2xlLndhcm4oXHJcbiAgICAgICAgYExheWVyIG5hbWUgJHtuZXdOYW1lfSBpcyBub3QgdW5pcXVlLiBMYXllciB3aWxsIGJlIHJlbmFtZWQgdG8gJHtuYW1lfS5gXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgZGVsZXRlIHRoaXMuX2xheWVyTWFwW2N1cnJlbnROYW1lXTtcclxuICAgIHRoaXMuX2xheWVyTWFwW25hbWVdID0gbGF5ZXI7XHJcbiAgICBsYXllci5uYW1lID0gbmFtZTtcclxuXHJcbiAgICAvLyBOb3RpZnkgdGhhdCBhIGxheWVyIGhhcyBiZWVuIHJlbmFtZWQgb24gdGhlIGZlYXR1cmVcclxuICAgIHRoaXMuZW1pdCh0aGlzLmNvbnN0cnVjdG9yLkVWRU5UUy5yZW5hbWVMYXllciwge1xyXG4gICAgICBvbGROYW1lOiBjdXJyZW50TmFtZSxcclxuICAgICAgbmV3TmFtZTogbmFtZSxcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBuYW1lO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIHRoZSB3ZWlnaHQgb2YgYW4gYW5pbWF0aW9uIGxheWVyLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBOYW1lIG9mIHRoZSBsYXllciB0byByZXR1cm4gd2VpZ2h0IGZyb20uXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxyXG4gICAqL1xyXG4gIGdldExheWVyV2VpZ2h0KG5hbWUpIHtcclxuICAgIC8vIE1ha2Ugc3VyZSB0aGUgbmFtZSBpcyB2YWxpZFxyXG4gICAgY29uc3QgbGF5ZXIgPSB0aGlzLl9sYXllck1hcFtuYW1lXTtcclxuXHJcbiAgICBpZiAobGF5ZXIgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgYENhbm5vdCBnZXQgd2VpZ2h0IG9uIGxheWVyICR7bmFtZX0gZnJvbSBob3N0ICR7dGhpcy5faG9zdC5pZH0uIE5vIGxheWVyIGV4aXN0cyB3aXRoIHRoaXMgbmFtZS5gXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGxheWVyLndlaWdodDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZSB0aGUgd2VpZ2h0IG9mIGFuIGFuaW1hdGlvbiBsYXllci5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGxheWVyIHRvIHVwZGF0ZS5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gd2VpZ2h0IC0gVGhlIHdlaWdodCB2YWx1ZSB0byBzZXQgb24gdGhlIGxheWVyLiBUaGlzIG51bWJlclxyXG4gICAqIHNob3VsZCBiZSBpbiB0aGUgMC0xIHJhbmdlLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyPX0gc2Vjb25kcyAtIFRoZSBudW1iZXIgb2Ygc2Vjb25kcyBpdCBzaG91bGQgdGFrZSB0byByZWFjaCB0aGVcclxuICAgKiBuZXcgd2VpZ2h0LiBEZWZhdWx0IGlzIHplcm8gYW5kIHdpbGwgc2V0IGltbWVkaWF0ZWx5LlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBlYXNpbmdGbiAtIFRoZSBlYXNpbmcgZnVuY3Rpb24gdG8gdXNlIHdoaWxlIGludGVycG9sYXRpbmdcclxuICAgKiB0aGUgd2VpZ2h0LiBEZWZhdWx0IGlzIEVhc2luZy5MaW5lYXIuSW5PdXQuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7RGVmZXJyZWR9IEEgcHJvbWlzZSB0aGF0IHdpbGwgcmVzb2x2ZSBvbmNlIHRoZSBsYXllcidzIHdlaWdodCByZWFjaGVzXHJcbiAgICogdGhlIHRhcmdldCB2YWx1ZS5cclxuICAgKi9cclxuICBzZXRMYXllcldlaWdodChuYW1lLCB3ZWlnaHQsIHNlY29uZHMsIGVhc2luZ0ZuKSB7XHJcbiAgICAvLyBNYWtlIHN1cmUgdGhlIG5hbWUgaXMgdmFsaWRcclxuICAgIGNvbnN0IGxheWVyID0gdGhpcy5fbGF5ZXJNYXBbbmFtZV07XHJcblxyXG4gICAgaWYgKGxheWVyID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgY29uc3QgZSA9IGBDYW5ub3Qgc2V0IHdlaWdodCBvbiBsYXllciAke25hbWV9IGZyb20gaG9zdCAke3RoaXMuX2hvc3QuaWR9LiBObyBsYXllciBleGlzdHMgd2l0aCB0aGlzIG5hbWUuYDtcclxuICAgICAgcmV0dXJuIERlZmVycmVkLnJlamVjdChlKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbGF5ZXIuc2V0V2VpZ2h0KHdlaWdodCwgc2Vjb25kcywgZWFzaW5nRm4pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgbmFtZXMgb2YgYmxlbmQgc3RhdGVzIGluIGFuIGFuaW1hdGlvbiBpbiBhIGxheWVyLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVyTmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIGNvbnRhaW5pbmcgdGhlIGFuaW1hdGlvbiBjb250YWluaW5nXHJcbiAgICogdGhlIGJsZW5kIHN0YXRlIHRvIHVwZGF0ZS5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gYW5pbWF0aW9uTmFtZSAtIE5hbWUgb2YgdGhlIGFuaW1hdGlvbiBjb250YWluaW5nIHRoZSBibGVuZCBzdGF0ZVxyXG4gICAqIHRvIHVwZGF0ZS5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtBcnJheS48c3RyaW5nPn0gLSBOYW1lcyBvZiBibGVuZCBzdGF0ZXMuXHJcbiAgICovXHJcbiAgZ2V0QW5pbWF0aW9uQmxlbmROYW1lcyhsYXllck5hbWUsIGFuaW1hdGlvbk5hbWUpIHtcclxuICAgIGNvbnN0IGxheWVyID0gdGhpcy5fbGF5ZXJNYXBbbGF5ZXJOYW1lXTtcclxuXHJcbiAgICBpZiAobGF5ZXIgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgYENhbm5vdCBnZXQgYmxlbmQgbmFtZXMgb24gbGF5ZXIgJHtsYXllck5hbWV9IGZyb20gaG9zdCAke3RoaXMuX2hvc3QuaWR9LiBObyBsYXllciBleGlzdHMgd2l0aCB0aGlzIG5hbWUuYFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBsYXllci5nZXRBbmltYXRpb25CbGVuZE5hbWVzKGFuaW1hdGlvbk5hbWUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlIHRoZSB3ZWlnaHQgZm9yIGEgYmxlbmQgc3RhdGUgaW4gYW4gYW5pbWF0aW9uIGluIGEgbGF5ZXIuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGF5ZXJOYW1lIC0gTmFtZSBvZiB0aGUgbGF5ZXIgY29udGFpbmluZyB0aGUgYW5pbWF0aW9uIGNvbnRhaW5pbmdcclxuICAgKiB0aGUgYmxlbmQgc3RhdGUgdG8gdXBkYXRlLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhbmltYXRpb25OYW1lIC0gTmFtZSBvZiB0aGUgYW5pbWF0aW9uIGNvbnRhaW5pbmcgdGhlIGJsZW5kIHN0YXRlXHJcbiAgICogdG8gdXBkYXRlLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBibGVuZE5hbWUgLSBOYW1lIG9mIHRoZSBibGVuZCBzdGF0ZSB0byB1cGRhdGUuXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IHdlaWdodCAtIFdlaWdodCB2YWx1ZSB0byBzZXQgb24gdGhlIGFuaW1hdGlvbi4gVGhpcyBudW1iZXIgc2hvdWRsZCBiZVxyXG4gICAqIGluIHRoZSAwLTEgcmFuZ2UuXHJcbiAgICogQHBhcmFtIHtudW1iZXI9fSBzZWNvbmRzIC0gTnVtYmVyIG9mIHNlY29uZHMgaXQgc2hvdWxkIHRha2UgdG8gcmVhY2ggdGhlIG5ldyB3ZWlnaHQuXHJcbiAgICogRGVmYXVsdCBpcyB6ZXJvIGFuZCB3aWxsIHNldCBpbW1lZGlhdGVseS5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gZWFzaW5nRm4gLSBFYXNpbmcgZnVuY3Rpb24gdG8gdXNlIHdoaWxlIGludGVycG9sYXRpbmcgdGhlIG5ld1xyXG4gICAqIHdlaWdodC4gRGVmYXVsdCBpcyBFYXNpbmcuTGluZWFyLkluT3V0LlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0RlZmVycmVkfSAtIFByb21pc2UgdGhhdCB3aWxsIHJlc29sdmUgb25jZSB0aGUgYW5pbWF0aW9uJ3Mgd2VpZ2h0IHJlYWNoZXNcclxuICAgKiB0aGUgdGFyZ2V0IHZhbHVlLlxyXG4gICAqL1xyXG4gIHNldEFuaW1hdGlvbkJsZW5kV2VpZ2h0KFxyXG4gICAgbGF5ZXJOYW1lLFxyXG4gICAgYW5pbWF0aW9uTmFtZSxcclxuICAgIGJsZW5kTmFtZSxcclxuICAgIHdlaWdodCxcclxuICAgIHNlY29uZHMsXHJcbiAgICBlYXNpbmdGblxyXG4gICkge1xyXG4gICAgY29uc3QgbGF5ZXIgPSB0aGlzLl9sYXllck1hcFtsYXllck5hbWVdO1xyXG5cclxuICAgIGlmIChsYXllciA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGNvbnN0IGUgPSBgQ2Fubm90IHNldCBibGVuZCB3ZWlnaHQgb24gbGF5ZXIgJHtsYXllck5hbWV9IGZyb20gaG9zdCAke3RoaXMuX2hvc3QuaWR9LiBObyBsYXllciBleGlzdHMgd2l0aCB0aGlzIG5hbWUuYDtcclxuICAgICAgcmV0dXJuIERlZmVycmVkLnJlamVjdChlKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbGF5ZXIuc2V0QW5pbWF0aW9uQmxlbmRXZWlnaHQoXHJcbiAgICAgIGFuaW1hdGlvbk5hbWUsXHJcbiAgICAgIGJsZW5kTmFtZSxcclxuICAgICAgd2VpZ2h0LFxyXG4gICAgICBzZWNvbmRzLFxyXG4gICAgICBlYXNpbmdGblxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdGhlIHdlaWdodCBmb3IgYSBibGVuZCBzdGF0ZSBpbiBhbiBhbmltYXRpb24gaW4gYSBsYXllci5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllck5hbWUgLSBOYW1lIG9mIHRoZSBsYXllciBjb250YWluaW5nIHRoZSBhbmltYXRpb24gY29udGFpbmluZ1xyXG4gICAqIHRoZSBibGVuZCBzdGF0ZSB0byB1cGRhdGUuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFuaW1hdGlvbk5hbWUgLSBOYW1lIG9mIHRoZSBhbmltYXRpb24gY29udGFpbmluZyB0aGUgYmxlbmQgc3RhdGVcclxuICAgKiB0byB1cGRhdGUuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGJsZW5kTmFtZSAtIE5hbWUgb2YgdGhlIGJsZW5kIHN0YXRlIHRvIHVwZGF0ZS5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IC0gV2VpZ2h0IG9mIHRoZSBibGVuZCBzdGF0ZS5cclxuICAgKi9cclxuICBnZXRBbmltYXRpb25CbGVuZFdlaWdodChsYXllck5hbWUsIGFuaW1hdGlvbk5hbWUsIGJsZW5kTmFtZSkge1xyXG4gICAgY29uc3QgbGF5ZXIgPSB0aGlzLl9sYXllck1hcFtsYXllck5hbWVdO1xyXG5cclxuICAgIGlmIChsYXllciA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgQ2Fubm90IGdldCBibGVuZCB3ZWlnaHQgb24gbGF5ZXIgJHtsYXllck5hbWV9IGZyb20gaG9zdCAke3RoaXMuX2hvc3QuaWR9LiBObyBsYXllciBleGlzdHMgd2l0aCB0aGlzIG5hbWUuYFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBsYXllci5nZXRBbmltYXRpb25CbGVuZFdlaWdodChhbmltYXRpb25OYW1lLCBibGVuZE5hbWUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUGF1c2Ugd2VpZ2h0IGludGVycG9sYXRpb24gYW5pbWF0aW9uIG9uIGEgbGF5ZXIgd2l0aCB0aGUgZ2l2ZW4gbmFtZS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gTmFtZSBvZiB0aGUgbGF5ZXIgdG8gcGF1c2UuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSBXaGV0aGVyIG9yIG5vdCB0aGVyZSB3YXMgYW4gZXhpc3RpbmcgaW50ZXJwb2xhdGlvbiB0byBwYXVzZS5cclxuICAgKi9cclxuICBwYXVzZUxheWVyV2VpZ2h0KG5hbWUpIHtcclxuICAgIC8vIE1ha2Ugc3VyZSB0aGUgbmFtZSBpcyB2YWxpZFxyXG4gICAgY29uc3QgbGF5ZXIgPSB0aGlzLl9sYXllck1hcFtuYW1lXTtcclxuXHJcbiAgICBpZiAobGF5ZXIgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgYENhbm5vdCBwYXVzZSB3ZWlnaHQgaW50ZXJwb2xhdGlvbiBvbiBsYXllciAke25hbWV9IGZyb20gaG9zdCAke3RoaXMuX2hvc3QuaWR9LiBObyBsYXllciBleGlzdHMgd2l0aCB0aGlzIG5hbWUuYFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBsYXllci5wYXVzZVdlaWdodCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVzdW1lIHdlaWdodCBpbnRlcnBvbGF0aW9uIGFuaW1hdGlvbiBvbiBhIGxheWVyIHdpdGggdGhlIGdpdmVuIG5hbWUuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRvIHJlc3VtZS5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtEZWZlcnJlZH0gLSBSZXNvbHZlcyBvbmNlIHRoZSBsYXllcidzIHdlaWdodCByZWFjaGVzIGl0cyB0YXJnZXQgdmFsdWUuXHJcbiAgICovXHJcbiAgcmVzdW1lTGF5ZXJXZWlnaHQobmFtZSkge1xyXG4gICAgLy8gTWFrZSBzdXJlIHRoZSBuYW1lIGlzIHZhbGlkXHJcbiAgICBjb25zdCBsYXllciA9IHRoaXMuX2xheWVyTWFwW25hbWVdO1xyXG5cclxuICAgIGlmIChsYXllciA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGNvbnN0IGUgPSBgQ2Fubm90IHJlc3VtZSB3ZWlnaHQgaW50ZXJwb2xhdGlvbiBvbiBsYXllciAke25hbWV9IGZyb20gaG9zdCAke3RoaXMuX2hvc3QuaWR9LiBObyBsYXllciBleGlzdHMgd2l0aCB0aGlzIG5hbWUuYDtcclxuICAgICAgcmV0dXJuIERlZmVycmVkLnJlamVjdChlKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbGF5ZXIucmVzdW1lV2VpZ2h0KCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQYXVzZSBjdXJyZW50IGFuaW1hdGlvbiBhbmQgd2VpZ2h0IGludGVycG9sYXRpb24gYW5pbWF0aW9uIG9uIGEgbGF5ZXIgd2l0aFxyXG4gICAqIHRoZSBnaXZlbiBuYW1lLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBOYW1lIG9mIHRoZSBsYXllciB0byBwYXVzZS5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtib29sZWFufSAtIFdoZXRoZXIgb3Igbm90IHRoZXJlIHdhcyBhbiBleGlzdGluZyBpbnRlcnBvbGF0aW9uIG9yXHJcbiAgICogY3VycmVudCBhbmltYXRpb24gdG8gcGF1c2UuXHJcbiAgICovXHJcbiAgcGF1c2VMYXllcihuYW1lKSB7XHJcbiAgICAvLyBNYWtlIHN1cmUgdGhlIG5hbWUgaXMgdmFsaWRcclxuICAgIGNvbnN0IGxheWVyID0gdGhpcy5fbGF5ZXJNYXBbbmFtZV07XHJcblxyXG4gICAgaWYgKGxheWVyID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgIGBDYW5ub3QgcGF1c2UgbGF5ZXIgJHtuYW1lfSBmcm9tIGhvc3QgJHt0aGlzLl9ob3N0LmlkfS4gTm8gbGF5ZXIgZXhpc3RzIHdpdGggdGhpcyBuYW1lLmBcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbGF5ZXIucGF1c2UoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlc3VtZSBjdXJyZW50IGFuaW1hdGlvbiBhbmQgd2VpZ2h0IGludGVycG9sYXRpb24gYW5pbWF0aW9uIG9uIGEgbGF5ZXIgd2l0aFxyXG4gICAqIHRoZSBnaXZlbiBuYW1lLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBOYW1lIG9mIHRoZSBsYXllciB0byByZXN1bWUuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7RGVmZXJyZWR9IC0gUmVzb2x2ZXMgb25jZSB0aGUgbGF5ZXIncyB3ZWlnaHQgcmVhY2hlcyBpdHMgdGFyZ2V0IHZhbHVlXHJcbiAgICogYW5kIGl0J3MgY3VycmVudCBhbmltYXRpb24gZmluaXNoZXMgcGxheWluZy5cclxuICAgKi9cclxuICByZXN1bWVMYXllcihuYW1lKSB7XHJcbiAgICAvLyBNYWtlIHN1cmUgdGhlIG5hbWUgaXMgdmFsaWRcclxuICAgIGNvbnN0IGxheWVyID0gdGhpcy5fbGF5ZXJNYXBbbmFtZV07XHJcblxyXG4gICAgaWYgKGxheWVyID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgY29uc3QgZSA9IGBDYW5ub3QgcmVzdW1lIGxheWVyICR7bmFtZX0gZnJvbSBob3N0ICR7dGhpcy5faG9zdC5pZH0uIE5vIGxheWVyIGV4aXN0cyB3aXRoIHRoaXMgbmFtZS5gO1xyXG4gICAgICByZXR1cm4gRGVmZXJyZWQucmVqZWN0KGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBsYXllci5yZXN1bWUoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiB3aGV0aGVyIG9yIG5vdCB0aGUgYW5pbWF0aW9uIGxheWVyIHdpdGggdGhlIGdpdmVuIG5hbWUgaXMgY3VycmVudGx5XHJcbiAgICogdHJhbnNpdGlvbmluZyBiZXR3ZWVuIGFuaW1hdGlvbnMuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGF5ZXJOYW1lIC0gTmFtZSBvZiB0aGUgbGF5ZXIgdG8gY2hlY2suXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuICAgKi9cclxuICBnZXRUcmFuc2l0aW9uaW5nKGxheWVyTmFtZSkge1xyXG4gICAgLy8gTWFrZSBzdXJlIHRoZSBsYXllck5hbWUgaXMgdmFsaWRcclxuICAgIGNvbnN0IGxheWVyID0gdGhpcy5fbGF5ZXJNYXBbbGF5ZXJOYW1lXTtcclxuXHJcbiAgICBpZiAobGF5ZXIgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgYEdldCB0cmFuc2l0aW9uaW5nIG9uIGxheWVyICR7bGF5ZXJOYW1lfSBmcm9tIGhvc3QgJHt0aGlzLl9ob3N0LmlkfS4gTm8gbGF5ZXIgZXhpc3RzIHdpdGggdGhpcyBuYW1lLmBcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbGF5ZXIuaXNUcmFuc2l0aW9uaW5nO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIGFuIGFycmF5IG9mIHRoZSBuYW1lcyBvZiBhbGwgc3RhdGVzIHRoZSBsYXllciB3aXRoIHRoZSBnaXZlbiBuYW1lIGNvbnRyb2xzLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVyTmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRvIHNlYXJjaC5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtBcnJheS48c3RyaW5nPn1cclxuICAgKi9cclxuICBnZXRBbmltYXRpb25zKGxheWVyTmFtZSkge1xyXG4gICAgLy8gTWFrZSBzdXJlIHRoZSBsYXllck5hbWUgaXMgdmFsaWRcclxuICAgIGNvbnN0IGxheWVyID0gdGhpcy5fbGF5ZXJNYXBbbGF5ZXJOYW1lXTtcclxuXHJcbiAgICBpZiAobGF5ZXIgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgYEdldCBhbmltYXRpb25zIG9uIGxheWVyICR7bGF5ZXJOYW1lfSBmcm9tIGhvc3QgJHt0aGlzLl9ob3N0LmlkfS4gTm8gbGF5ZXIgZXhpc3RzIHdpdGggdGhpcyBuYW1lLmBcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbGF5ZXIuZ2V0U3RhdGVOYW1lcygpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIHRoZSBuYW1lIG9mIHRoZSBzdGF0ZSBjdXJyZW50bHkgYWN0aXZlIG9uIHRoZSBsYXllciB3aXRoIHRoZSBnaXZlbiBuYW1lLlxyXG4gICAqIFJldHVybiBudWxsIGlmIHRoZXJlIGlzIG5vIGN1cnJlbnQgYW5pbWF0aW9uIGZvciB0aGUgbGF5ZXIuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGF5ZXJOYW1lIC0gTmFtZSBvZiB0aGUgbGF5ZXIuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7KHN0cmluZ3xudWxsKX1cclxuICAgKi9cclxuICBnZXRDdXJyZW50QW5pbWF0aW9uKGxheWVyTmFtZSkge1xyXG4gICAgLy8gTWFrZSBzdXJlIHRoZSBsYXllck5hbWUgaXMgdmFsaWRcclxuICAgIGNvbnN0IGxheWVyID0gdGhpcy5fbGF5ZXJNYXBbbGF5ZXJOYW1lXTtcclxuXHJcbiAgICBpZiAobGF5ZXIgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgYEdldCBjdXJyZW50IGFuaW1hdGlvbiBvbiBsYXllciAke2xheWVyTmFtZX0gZnJvbSBob3N0ICR7dGhpcy5faG9zdC5pZH0uIE5vIGxheWVyIGV4aXN0cyB3aXRoIHRoaXMgbmFtZS5gXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGxheWVyLmN1cnJlbnRBbmltYXRpb247XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gd2hldGhlciBvciBub3QgYSBsYXllciB3aXRoIHRoZSBnaXZlbiBuYW1lIGlzIGN1cnJlbnRseSBwbGF5aW5nIGFuXHJcbiAgICogYW5pbWF0aW9uIGFuZCB0aGF0IGFuaW1hdGlvbiBpcyBwYXVzZWQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGF5ZXJOYW1lIC0gTmFtZSBvZiB0aGUgbGF5ZXIuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuICAgKi9cclxuICBnZXRQYXVzZWQobGF5ZXJOYW1lKSB7XHJcbiAgICAvLyBNYWtlIHN1cmUgdGhlIGxheWVyTmFtZSBpcyB2YWxpZFxyXG4gICAgY29uc3QgbGF5ZXIgPSB0aGlzLl9sYXllck1hcFtsYXllck5hbWVdO1xyXG5cclxuICAgIGlmIChsYXllciA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgR2V0IHBhdXNlZCBvbiBsYXllciAke2xheWVyTmFtZX0gZnJvbSBob3N0ICR7dGhpcy5faG9zdC5pZH0uIE5vIGxheWVyIGV4aXN0cyB3aXRoIHRoaXMgbmFtZS5gXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGxheWVyLmN1cnJlbnRTdGF0ZSAmJiBsYXllci5jdXJyZW50U3RhdGUucGF1c2VkO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIHRoZSB0eXBlIG5hbWUgb2YgdGhlIGdpdmVuIGFuaW1hdGlvbi4gQHNlZSBBbmltYXRpb25UeXBlcy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllck5hbWUgLSBOYW1lIG9mIHRoZSBsYXllciB0aGF0IGNvbnRhaW5zIHRoZSBhbmltYXRpb24uXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFuaW1hdGlvbk5hbWUgLSBOYW1lIG9mIHRoZSBhbmltYXRpb24gdG8gY2hlY2suXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxyXG4gICAqL1xyXG4gIGdldEFuaW1hdGlvblR5cGUobGF5ZXJOYW1lLCBhbmltYXRpb25OYW1lKSB7XHJcbiAgICAvLyBNYWtlIHN1cmUgdGhlIGxheWVyTmFtZSBpcyB2YWxpZFxyXG4gICAgY29uc3QgbGF5ZXIgPSB0aGlzLl9sYXllck1hcFtsYXllck5hbWVdO1xyXG5cclxuICAgIGlmIChsYXllciA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgR2V0IGFuaW1hdGlvbiB0eXBlIG9uIGxheWVyICR7bGF5ZXJOYW1lfSBmcm9tIGhvc3QgJHt0aGlzLl9ob3N0LmlkfS4gTm8gbGF5ZXIgZXhpc3RzIHdpdGggdGhpcyBuYW1lLmBcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBzdGF0ZSA9IGxheWVyLmdldFN0YXRlKGFuaW1hdGlvbk5hbWUpO1xyXG5cclxuICAgIGlmIChzdGF0ZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgR2V0IGFuaW1hdGlvbiB0eXBlIGZvciBhbmltYXRpb24gJHthbmltYXRpb25OYW1lfSBvbiBsYXllciAke2xheWVyTmFtZX0gZnJvbSBob3N0ICR7dGhpcy5faG9zdC5pZH0uIE5vIGFuaW1hdGlvbiBleGlzdHMgd2l0aCB0aGlzIG5hbWUuYFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHtjb25zdHJ1Y3Rvcn0gPSBzdGF0ZTtcclxuXHJcbiAgICByZXR1cm4gT2JqZWN0LmtleXMoQW5pbWF0aW9uVHlwZXMpLmZpbmQoXHJcbiAgICAgIHR5cGVOYW1lID0+IEFuaW1hdGlvblR5cGVzW3R5cGVOYW1lXSA9PT0gY29uc3RydWN0b3JcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBZGQgYSBuZXcgYW5pbWF0aW9uIHRvIGFuIGFuaW1hdGlvbiBsYXllci5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllck5hbWUgLSBOYW1lIG9mIHRoZSBsYXllciB0byBhZGQgdGhlIGFuaW1hdGlvbiB0by5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gYW5pbWF0aW9uTmFtZSAtIE5hbWUgdG8gdXNlIHdoZW4gY2FsbGluZyB0aGUgYW5pbWF0aW9uLlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0PX0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gcGFzcyB0byB0aGUgY29uc3RydWN0b3IgZm9yIHRoZSBuZXdcclxuICAgKiBTaW5nbGVTdGF0ZSBhbmltYXRpb24uXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSAtIFRoZSBuYW1lIG9mIHRoZSBhbmltYXRpb24gdGhhdCB3YXMgYWRkZWRcclxuICAgKi9cclxuICBhZGRBbmltYXRpb24oXHJcbiAgICBsYXllck5hbWUsXHJcbiAgICBhbmltYXRpb25OYW1lLFxyXG4gICAgYW5pbWF0aW9uVHlwZSA9IEFuaW1hdGlvblR5cGVzLnNpbmdsZSxcclxuICAgIG9wdGlvbnMgPSB7fVxyXG4gICkge1xyXG4gICAgb3B0aW9ucy5uYW1lID0gdGhpcy5fdmFsaWRhdGVOZXdBbmltYXRpb24obGF5ZXJOYW1lLCBhbmltYXRpb25OYW1lKTtcclxuXHJcbiAgICAvLyBNYWtlIHN1cmUgdGhlIGFuaW1hdGlvbiB0eXBlIGlzIHZhbGlkXHJcbiAgICBpZiAoIU9iamVjdC52YWx1ZXMoQW5pbWF0aW9uVHlwZXMpLmluY2x1ZGVzKGFuaW1hdGlvblR5cGUpKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgQ2Fubm90IGFkZCBhbmltYXRpb24gJHthbmltYXRpb25OYW1lfSB0byBsYXllciAke2xheWVyTmFtZX0gb24gaG9zdCAke3RoaXMuX2hvc3QuaWR9LiBJbnZhbGlkIGFuaW1hdGlvbiB0eXBlLmBcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBsYXllciA9IHRoaXMuX2xheWVyTWFwW2xheWVyTmFtZV07XHJcbiAgICBvcHRpb25zLmJsZW5kTW9kZSA9IGxheWVyLmJsZW5kTW9kZTtcclxuICAgIG9wdGlvbnMudHJhbnNpdGlvblRpbWUgPSBsYXllci50cmFuc2l0aW9uVGltZTtcclxuICAgIGNvbnN0IHN0YXRlID0gdGhpc1tgX2NyZWF0ZSR7YW5pbWF0aW9uVHlwZS5uYW1lfWBdKG9wdGlvbnMpO1xyXG5cclxuICAgIGNvbnN0IG5hbWUgPSBsYXllci5hZGRTdGF0ZShzdGF0ZSk7XHJcblxyXG4gICAgLy8gTm90aWZ5IHRoYXQgYW4gYW5pbWF0aW9uIGhhcyBiZWVuIGFkZGVkIHRvIHRoZSBmZWF0dXJlXHJcbiAgICB0aGlzLmVtaXQodGhpcy5jb25zdHJ1Y3Rvci5FVkVOVFMuYWRkQW5pbWF0aW9uLCB7XHJcbiAgICAgIGxheWVyTmFtZSxcclxuICAgICAgYW5pbWF0aW9uTmFtZTogbmFtZSxcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBuYW1lO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVtb3ZlIGFuIGFuaW1hdGlvbiBmcm9tIGFuIGFuaW1hdGlvbiBsYXllci5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllck5hbWUgLSBOYW1lIG9mIHRoZSBsYXllciB0byByZW1vdmUgdGhlIGFuaW1hdGlvbiBmcm9tLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gTmFtZSBvZiB0aGUgYW5pbWF0aW9uIHRvIHJlbW92ZS5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gICAqL1xyXG4gIHJlbW92ZUFuaW1hdGlvbihsYXllck5hbWUsIGFuaW1hdGlvbk5hbWUpIHtcclxuICAgIC8vIE1ha2Ugc3VyZSB0aGUgbmFtZSBpcyB2YWxpZFxyXG4gICAgY29uc3QgbGF5ZXIgPSB0aGlzLl9sYXllck1hcFtsYXllck5hbWVdO1xyXG5cclxuICAgIGlmIChsYXllciA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgQ2Fubm90IHJlbW92ZSBhbmltYXRpb24gZnJvbSBsYXllciAke2xheWVyTmFtZX0gZnJvbSBob3N0ICR7dGhpcy5faG9zdC5pZH0uIE5vIGxheWVyIGV4aXN0cyB3aXRoIHRoaXMgbmFtZS5gXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgcmVtb3ZlZCA9IGxheWVyLnJlbW92ZVN0YXRlKGFuaW1hdGlvbk5hbWUpO1xyXG5cclxuICAgIC8vIE5vdGlmeSB0aGF0IGFuIGFuaW1hdGlvbiBoYXMgYmVlbiByZW1vdmVkIGZyb20gdGhlIGZlYXR1cmVcclxuICAgIGlmIChyZW1vdmVkID09PSB0cnVlKSB7XHJcbiAgICAgIHRoaXMuZW1pdCh0aGlzLmNvbnN0cnVjdG9yLkVWRU5UUy5yZW1vdmVBbmltYXRpb24sIHtcclxuICAgICAgICBsYXllck5hbWUsXHJcbiAgICAgICAgYW5pbWF0aW9uTmFtZSxcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHJlbW92ZWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGUgdGhlIG5hbWUgb2YgYW4gYW5pbWF0aW9uLiBOYW1lcyBtdXN0IGJlIHVuaXF1ZSBvbiBlYWNoIGxheWVyLCBpZiB0aGUgbmV3XHJcbiAgICogbmFtZSBpcyBub3QgdW5pcXVlIGl0IHdpbGwgaGF2ZSB0cmFpbGluZyBudW1iZXJzIGFwcGVuZGVkIHVudGlsIGl0IGlzIHVuaXF1ZS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllck5hbWUgLSBOYW1lIG9mIHRoZSBsYXllciB0aGF0IGNvbnRhaW5zIHRoZSBhbmltYXRpb24gdGhhdFxyXG4gICAqIHdpbGwgYmUgcmVuYW1lZCxcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gY3VycmVudEFuaW1hdGlvbk5hbWUgLSBDdXJyZW50IG5hbWUgb2YgdGhlIGFuaW1hdGlvbi5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmV3QW5pbWF0aW9uTmFtZSAtIE5ldyBuYW1lIHRvIHNldCBvbiB0aGUgYW5pbWF0aW9uLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge3N0cmluZ30gLSBUaGUgbmV3IG5hbWUgb2YgdGhlIGFuaW1hdGlvblxyXG4gICAqL1xyXG4gIHJlbmFtZUFuaW1hdGlvbihsYXllck5hbWUsIGN1cnJlbnRBbmltYXRpb25OYW1lLCBuZXdBbmltYXRpb25OYW1lKSB7XHJcbiAgICBjb25zdCBsYXllciA9IHRoaXMuX2xheWVyTWFwW2xheWVyTmFtZV07XHJcblxyXG4gICAgaWYgKGxheWVyID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgIGBDYW5ub3QgcmVuYW1lIGFuaW1hdGlvbiAke2N1cnJlbnRBbmltYXRpb25OYW1lfSBvbiBsYXllciAke2xheWVyTmFtZX0gZm9yIGhvc3QgJHt0aGlzLl9ob3N0LmlkfS4gTm8gbGF5ZXIgZXhpc3RzIHdpdGggdGhpcyBuYW1lLmBcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBuYW1lID0gbGF5ZXIucmVuYW1lU3RhdGUoY3VycmVudEFuaW1hdGlvbk5hbWUsIG5ld0FuaW1hdGlvbk5hbWUpO1xyXG5cclxuICAgIC8vIE5vdGlmeSB0aGF0IGFuIGFuaW1hdGlvbiBoYXMgYmVlbiByZW5hbWVkIG9uIHRoZSBmZWF0dXJlXHJcbiAgICB0aGlzLmVtaXQodGhpcy5jb25zdHJ1Y3Rvci5FVkVOVFMucmVuYW1lQW5pbWF0aW9uLCB7XHJcbiAgICAgIGxheWVyTmFtZSxcclxuICAgICAgb2xkTmFtZTogY3VycmVudEFuaW1hdGlvbk5hbWUsXHJcbiAgICAgIG5ld05hbWU6IG5hbWUsXHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gbmFtZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFBhdXNlIHRoZSBjdXJyZW50bHkgcGxheWluZyBhbmltYXRpb24gYW5kIHBsYXkgYSBuZXcgYW5pbWF0aW9uIGZyb20gdGhlIGJlZ2lubmluZy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllck5hbWUgLSBOYW1lIG9mIHRoZSBsYXllciB0aGF0IGNvbnRhaW5zIHRoZSBhbmltYXRpb24uXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFuaW1hdGlvbk5hbWUgLSBOYW1lIG9mIHRoZSBhbmltYXRpb24gc3RhdGUgdG8gcGxheS5cclxuICAgKiBAcGFyYW0ge251bWJlcj19IHNlY29uZHMgLSBUaGUgbnVtYmVyIG9mIHNlY29uZHMgaXQgc2hvdWxkIHRha2UgdG8gdHJhbnNpdGlvblxyXG4gICAqIHRvIHRoZSBuZXcgYW5pbWF0aW9uLiBEZWZhdWx0IGlzIHplcm8gYW5kIHdpbGwgc2V0IGltbWVkaWF0ZWx5LlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBlYXNpbmdGbiAtIFRoZSBlYXNpbmcgZnVuY3Rpb24gdG8gdXNlIHdoaWxlIHRyYW5zaXRpb25pbmdcclxuICAgKiBiZXR3ZWVuIGFuaW1hdGlvbnMuIERlZmF1bHQgaXMgRWFzaW5nLkxpbmVhci5Jbk91dC5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtEZWZlcnJlZH0gLSBSZXNvbHZlcyBvbmNlIHRoZSBhbmltYXRpb24gcmVhY2hlcyB0aGUgZW5kIG9mIGl0c1xyXG4gICAqIHRpbWVsaW5lLiBMb29waW5nIGFuaW1hdGlvbnMgY2FuIG9ubHkgcmVzb2x2ZSBpZiB0aGV5IGFyZSBpbnRlcnJ1cHRlZCBvclxyXG4gICAqIG1hbnVhbGx5IHN0b3BwZWQuXHJcbiAgICovXHJcbiAgcGxheUFuaW1hdGlvbihsYXllck5hbWUsIGFuaW1hdGlvbk5hbWUsIHNlY29uZHMsIGVhc2luZ0ZuKSB7XHJcbiAgICBjb25zdCBsYXllciA9IHRoaXMuX2xheWVyTWFwW2xheWVyTmFtZV07XHJcblxyXG4gICAgaWYgKGxheWVyID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgY29uc3QgZSA9IGBDYW5ub3QgcGxheSBhbmltYXRpb24gJHthbmltYXRpb25OYW1lfSBvbiBsYXllciAke2xheWVyTmFtZX0gZm9yIGhvc3QgJHt0aGlzLl9ob3N0LmlkfS4gTm8gbGF5ZXIgZXhpc3RzIHdpdGggdGhpcyBuYW1lLmA7XHJcbiAgICAgIHJldHVybiBEZWZlcnJlZC5yZWplY3QoZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gTm90aWZ5IHRoYXQgYSBuZXcgYW5pbWF0aW9uIGhhcyBiZWd1blxyXG4gICAgdGhpcy5lbWl0KHRoaXMuY29uc3RydWN0b3IuRVZFTlRTLnBsYXlBbmltYXRpb24sIHtcclxuICAgICAgbGF5ZXJOYW1lLFxyXG4gICAgICBhbmltYXRpb25OYW1lLFxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIGxheWVyLnBsYXlBbmltYXRpb24oXHJcbiAgICAgIGFuaW1hdGlvbk5hbWUsXHJcbiAgICAgIHNlY29uZHMsXHJcbiAgICAgIGVhc2luZ0ZuLFxyXG4gICAgICAoKSA9PiB7XHJcbiAgICAgICAgLy8gTm90aWZ5IHRoYXQgYW4gYW5pbWF0aW9uIGhhcyBzdG9wcGVkXHJcbiAgICAgICAgdGhpcy5lbWl0KHRoaXMuY29uc3RydWN0b3IuRVZFTlRTLnN0b3BBbmltYXRpb24sIHtcclxuICAgICAgICAgIGxheWVyTmFtZSxcclxuICAgICAgICAgIGFuaW1hdGlvbk5hbWUsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0sXHJcbiAgICAgIHVuZGVmaW5lZCxcclxuICAgICAgKCkgPT4ge1xyXG4gICAgICAgIC8vIE5vdGlmeSB0aGF0IGFuIGFuaW1hdGlvbiBoYXMgYmVlbiBpbnRlcnJ1cHRlZFxyXG4gICAgICAgIHRoaXMuZW1pdCh0aGlzLmNvbnN0cnVjdG9yLkVWRU5UUy5pbnRlcnJ1cHRBbmltYXRpb24sIHtcclxuICAgICAgICAgIGxheWVyTmFtZSxcclxuICAgICAgICAgIGFuaW1hdGlvbk5hbWUsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0sXHJcbiAgICAgICh7bmFtZSwgY2FuQWR2YW5jZSwgaXNRdWV1ZUVuZH0pID0+IHtcclxuICAgICAgICBpZiAobGF5ZXIuY3VycmVudEFuaW1hdGlvbiA9PT0gYW5pbWF0aW9uTmFtZSkge1xyXG4gICAgICAgICAgLy8gTm90aWZ5IHRoYXQgYSBuZXcgYW5pbWF0aW9uIGhhcyBiZWd1blxyXG4gICAgICAgICAgdGhpcy5lbWl0KHRoaXMuY29uc3RydWN0b3IuRVZFTlRTLnBsYXlOZXh0QW5pbWF0aW9uLCB7XHJcbiAgICAgICAgICAgIGxheWVyTmFtZSxcclxuICAgICAgICAgICAgYW5pbWF0aW9uTmFtZSxcclxuICAgICAgICAgICAgbmV4dFF1ZXVlZEFuaW1hdGlvbjogbmFtZSxcclxuICAgICAgICAgICAgY2FuQWR2YW5jZSxcclxuICAgICAgICAgICAgaXNRdWV1ZUVuZCxcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFBsYXkgdGhlIG5leHQgYW5pbWF0aW9uIGluIHRoZSBxdWV1ZSBvZiBhIFF1ZXVlU3RhdGUgYW5pbWF0aW9uLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVyTmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRoYXQgY29udGFpbnMgdGhlIHF1ZXVlIGFuaW1hdGlvbi5cclxuICAgKiBAcGFyYW0ge3N0cmluZz19IGFuaW1hdGlvbk5hbWUgLSBOYW1lIG9mIHRoZSBhbmltYXRpb24gcXVldWUgYW5pbWF0aW9uLiBEZWZhdWx0c1xyXG4gICAqIHRvIHRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IGFuaW1hdGlvbiBmb3IgdGhlIGxheWVyLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyPX0gc2Vjb25kcyAtIFRoZSBudW1iZXIgb2Ygc2Vjb25kcyBpdCBzaG91bGQgdGFrZSB0byB0cmFuc2l0aW9uXHJcbiAgICogdG8gdGhlIHF1ZXVlIGFuaW1hdGlvbiBpZiBpdCdzIG5vdCBhbHJlYWR5IGN1cnJlbnRseSBwbGF5aW5nLiBEZWZhdWx0IGlzIHplcm9cclxuICAgKiBhbmQgd2lsbCBzZXQgaW1tZWRpYXRlbHkuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IGVhc2luZ0ZuIC0gVGhlIGVhc2luZyBmdW5jdGlvbiB0byB1c2Ugd2hpbGUgdHJhbnNpdGlvbmluZ1xyXG4gICAqIHRvIHRoZSBxdWV1ZSBhbmltYXRpb24gaWYgaXQgaXNuJ3QgYWxyZWFkeSBwbGF5aW5nLiBEZWZhdWx0IGlzIEVhc2luZy5MaW5lYXIuSW5PdXQuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7RGVmZXJyZWR9IC0gUmVzb2x2ZXMgb25jZSB0aGUgbGFzdCBhbmltYXRpb24gaW4gdGhlIHF1ZXVlIGZpbmlzaGVzXHJcbiAgICogcGxheWluZy5cclxuICAgKi9cclxuICBwbGF5TmV4dEFuaW1hdGlvbihsYXllck5hbWUsIGFuaW1hdGlvbk5hbWUsIHRyYW5zaXRpb25UaW1lLCBlYXNpbmdGbikge1xyXG4gICAgY29uc3QgbGF5ZXIgPSB0aGlzLl9sYXllck1hcFtsYXllck5hbWVdO1xyXG5cclxuICAgIGlmIChsYXllciA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGNvbnN0IGUgPSBgQ2Fubm90IHBsYXkgbmV4dCBhbmltYXRpb24gb24gbGF5ZXIgJHtsYXllck5hbWV9IGZvciBob3N0ICR7dGhpcy5faG9zdC5pZH0uIE5vIGxheWVyIGV4aXN0cyB3aXRoIHRoaXMgbmFtZS5gO1xyXG4gICAgICByZXR1cm4gRGVmZXJyZWQucmVqZWN0KGUpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChhbmltYXRpb25OYW1lID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgYW5pbWF0aW9uTmFtZSA9IGxheWVyLmN1cnJlbnRBbmltYXRpb247XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgYW5pbWF0aW9uID0gbGF5ZXIuZ2V0U3RhdGUobGF5ZXIuY3VycmVudEFuaW1hdGlvbik7XHJcblxyXG4gICAgaWYgKGFuaW1hdGlvbiA9PT0gbnVsbCkge1xyXG4gICAgICBjb25zdCBlID0gYENhbm5vdCBwbGF5IG5leHQgYW5pbWF0aW9uIG9uIGxheWVyICR7bGF5ZXJOYW1lfSBmb3IgaG9zdCAke3RoaXMuX2hvc3QuaWR9LiBObyBhbmltYXRpb24gZXhpc3RzIHdpdGggbmFtZSAke2FuaW1hdGlvbk5hbWV9LmA7XHJcbiAgICAgIHJldHVybiBEZWZlcnJlZC5yZWplY3QoZSk7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuZ2V0QW5pbWF0aW9uVHlwZShsYXllck5hbWUsIGFuaW1hdGlvbk5hbWUpICE9PSAncXVldWUnKSB7XHJcbiAgICAgIGNvbnN0IGUgPSBgQ2Fubm90IHBsYXkgbmV4dCBhbmltYXRpb24gb24gbGF5ZXIgJHtsYXllck5hbWV9IGZvciBob3N0ICR7dGhpcy5faG9zdC5pZH0uICR7YW5pbWF0aW9uTmFtZX0gaXMgbm90IGEgcXVldWUgc3RhdGUuYDtcclxuICAgICAgcmV0dXJuIERlZmVycmVkLnJlamVjdChlKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBvbk5leHQgPSAoe25hbWUsIGNhbkFkdmFuY2UsIGlzUXVldWVFbmR9KSA9PiB7XHJcbiAgICAgIGlmIChsYXllci5jdXJyZW50QW5pbWF0aW9uID09PSBhbmltYXRpb25OYW1lKSB7XHJcbiAgICAgICAgLy8gTm90aWZ5IHRoYXQgYSBuZXcgYW5pbWF0aW9uIGhhcyBiZWd1blxyXG4gICAgICAgIHRoaXMuZW1pdCh0aGlzLmNvbnN0cnVjdG9yLkVWRU5UUy5wbGF5TmV4dEFuaW1hdGlvbiwge1xyXG4gICAgICAgICAgbGF5ZXJOYW1lLFxyXG4gICAgICAgICAgYW5pbWF0aW9uTmFtZSxcclxuICAgICAgICAgIG5leHRRdWV1ZWRBbmltYXRpb246IG5hbWUsXHJcbiAgICAgICAgICBjYW5BZHZhbmNlLFxyXG4gICAgICAgICAgaXNRdWV1ZUVuZCxcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICAvLyBNYWtlIHRoZSBxdWV1ZSBhbmltYXRpb24gY3VycmVudCBpZiBpdCB3YXNuJ3QgYWxyZWFkeVxyXG4gICAgaWYgKGxheWVyLmN1cnJlbnRBbmltYXRpb24gPT09IG51bGwpIHtcclxuICAgICAgbGF5ZXIucmVzdW1lQW5pbWF0aW9uKFxyXG4gICAgICAgIGFuaW1hdGlvbi5uYW1lLFxyXG4gICAgICAgIHRyYW5zaXRpb25UaW1lLFxyXG4gICAgICAgIGVhc2luZ0ZuLFxyXG4gICAgICAgIHVuZGVmaW5lZCxcclxuICAgICAgICB1bmRlZmluZWQsXHJcbiAgICAgICAgdW5kZWZpbmVkLFxyXG4gICAgICAgIG9uTmV4dFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBhbmltYXRpb24ubmV4dChvbk5leHQsIHRydWUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUGF1c2UgdGhlIGN1cnJlbnQgYW5pbWF0aW9uIG9uIGEgbGF5ZXIuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRvIHBhdXNlLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgb3Igbm90IGFuIGFuaW1hdGlvbiB3YXMgc3VjY2Vzc2Z1bGx5IHBhdXNlZC5cclxuICAgKi9cclxuICBwYXVzZUFuaW1hdGlvbihuYW1lKSB7XHJcbiAgICBjb25zdCBsYXllciA9IHRoaXMuX2xheWVyTWFwW25hbWVdO1xyXG5cclxuICAgIGlmIChsYXllciA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICBgRGlkIG5vdCBwYXVzZSBhbmltYXRpb24gb24gbGF5ZXIgJHtuYW1lfSBmb3IgaG9zdCAke3RoaXMuX2hvc3QuaWR9LiBObyBsYXllciBleGlzdHMgd2l0aCB0aGlzIG5hbWUuYFxyXG4gICAgICApO1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgcGF1c2VkID0gbGF5ZXIucGF1c2VBbmltYXRpb24oKTtcclxuXHJcbiAgICAvLyBOb3RpZnkgdGhhdCBhbiBhbmltYXRpb24gd2FzIHBhdXNlZFxyXG4gICAgaWYgKHBhdXNlZCkge1xyXG4gICAgICBjb25zdCBhbmltYXRpb25OYW1lID0gbGF5ZXIuY3VycmVudEFuaW1hdGlvbjtcclxuICAgICAgdGhpcy5lbWl0KHRoaXMuY29uc3RydWN0b3IuRVZFTlRTLnBhdXNlQW5pbWF0aW9uLCB7XHJcbiAgICAgICAgbGF5ZXJOYW1lOiBuYW1lLFxyXG4gICAgICAgIGFuaW1hdGlvbk5hbWUsXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBwYXVzZWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQYXVzZSB0aGUgY3VycmVudGx5IHBsYXlpbmcgYW5pbWF0aW9uIGFuZCBwbGF5IGEgbmV3IGFuaW1hdGlvbiBmcm9tIHdoZXJlIGl0XHJcbiAgICogbGFzdCBsZWZ0IG9mZi5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllck5hbWUgLSBOYW1lIG9mIHRoZSBsYXllciB0aGF0IGNvbnRhaW5zIHRoZSBhbmltYXRpb24uXHJcbiAgICogQHBhcmFtIHtzdHJpbmc9fSBhbmltYXRpb25OYW1lIC0gTmFtZSBvZiB0aGUgYW5pbWF0aW9uIHN0YXRlIHRvIHJlc3VtZS4gRGVmYXVsdHNcclxuICAgKiB0byB0aGUgbmFtZSBvZiB0aGUgY3VycmVudCBhbmltYXRpb24gZm9yIHRoZSBsYXllci5cclxuICAgKiBAcGFyYW0ge251bWJlcj19IHNlY29uZHMgLSBUaGUgbnVtYmVyIG9mIHNlY29uZHMgaXQgc2hvdWxkIHRha2UgdG8gdHJhbnNpdGlvblxyXG4gICAqIHRvIHRoZSBuZXcgYW5pbWF0aW9uLiBEZWZhdWx0IGlzIHplcm8gYW5kIHdpbGwgc2V0IGltbWVkaWF0ZWx5LlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBlYXNpbmdGbiAtIFRoZSBlYXNpbmcgZnVuY3Rpb24gdG8gdXNlIHdoaWxlIHRyYW5zaXRpb25pbmdcclxuICAgKiBiZXR3ZWVuIGFuaW1hdGlvbnMuIERlZmF1bHQgaXMgRWFzaW5nLkxpbmVhci5Jbk91dC5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtEZWZlcnJlZH0gLSBSZXNvbHZlcyBvbmNlIHRoZSBhbmltYXRpb24gcmVhY2hlcyB0aGUgZW5kIG9mIGl0c1xyXG4gICAqIHRpbWVsaW5lLiBMb29waW5nIGFuaW1hdGlvbnMgY2FuIG9ubHkgcmVzb2x2ZSBpZiB0aGV5IGFyZSBpbnRlcnJ1cHRlZCBvclxyXG4gICAqIG1hbnVhbGx5IHN0b3BwZWQuXHJcbiAgICovXHJcbiAgcmVzdW1lQW5pbWF0aW9uKGxheWVyTmFtZSwgYW5pbWF0aW9uTmFtZSwgc2Vjb25kcywgZWFzaW5nRm4pIHtcclxuICAgIGNvbnN0IGxheWVyID0gdGhpcy5fbGF5ZXJNYXBbbGF5ZXJOYW1lXTtcclxuXHJcbiAgICBpZiAobGF5ZXIgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBjb25zdCBlID0gYENhbm5vdCByZXN1bWUgYW5pbWF0aW9uICR7YW5pbWF0aW9uTmFtZX0gb24gbGF5ZXIgJHtsYXllck5hbWV9IGZvciBob3N0ICR7dGhpcy5faG9zdC5pZH0uIE5vIGxheWVyIGV4aXN0cyB3aXRoIHRoaXMgbmFtZS5gO1xyXG4gICAgICByZXR1cm4gRGVmZXJyZWQucmVqZWN0KGUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIE5vdGlmeSB0aGF0IGFuIGFuaW1hdGlvbiB3YXMgcmVzdW1lZFxyXG4gICAgdGhpcy5lbWl0KHRoaXMuY29uc3RydWN0b3IuRVZFTlRTLnJlc3VtZUFuaW1hdGlvbiwge1xyXG4gICAgICBsYXllck5hbWUsXHJcbiAgICAgIGFuaW1hdGlvbk5hbWUsXHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gbGF5ZXIucmVzdW1lQW5pbWF0aW9uKFxyXG4gICAgICBhbmltYXRpb25OYW1lLFxyXG4gICAgICBzZWNvbmRzLFxyXG4gICAgICBlYXNpbmdGbixcclxuICAgICAgKCkgPT4ge1xyXG4gICAgICAgIC8vIE5vdGlmeSB0aGF0IGFuIGFuaW1hdGlvbiBoYXMgc3RvcHBlZFxyXG4gICAgICAgIHRoaXMuZW1pdCh0aGlzLmNvbnN0cnVjdG9yLkVWRU5UUy5zdG9wQW5pbWF0aW9uLCB7XHJcbiAgICAgICAgICBsYXllck5hbWUsXHJcbiAgICAgICAgICBhbmltYXRpb25OYW1lLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9LFxyXG4gICAgICB1bmRlZmluZWQsXHJcbiAgICAgICgpID0+IHtcclxuICAgICAgICAvLyBOb3RpZnkgdGhhdCBhbiBhbmltYXRpb24gaGFzIGJlZW4gaW50ZXJydXB0ZWRcclxuICAgICAgICB0aGlzLmVtaXQodGhpcy5jb25zdHJ1Y3Rvci5FVkVOVFMuaW50ZXJydXB0QW5pbWF0aW9uLCB7XHJcbiAgICAgICAgICBsYXllck5hbWUsXHJcbiAgICAgICAgICBhbmltYXRpb25OYW1lLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9LFxyXG4gICAgICAoe25hbWUsIGNhbkFkdmFuY2UsIGlzUXVldWVFbmR9KSA9PiB7XHJcbiAgICAgICAgaWYgKGxheWVyLmN1cnJlbnRBbmltYXRpb24gPT09IGFuaW1hdGlvbk5hbWUpIHtcclxuICAgICAgICAgIC8vIE5vdGlmeSB0aGF0IGEgbmV3IGFuaW1hdGlvbiBoYXMgYmVndW5cclxuICAgICAgICAgIHRoaXMuZW1pdCh0aGlzLmNvbnN0cnVjdG9yLkVWRU5UUy5wbGF5TmV4dEFuaW1hdGlvbiwge1xyXG4gICAgICAgICAgICBsYXllck5hbWUsXHJcbiAgICAgICAgICAgIGFuaW1hdGlvbk5hbWUsXHJcbiAgICAgICAgICAgIG5leHRRdWV1ZWRBbmltYXRpb246IG5hbWUsXHJcbiAgICAgICAgICAgIGNhbkFkdmFuY2UsXHJcbiAgICAgICAgICAgIGlzUXVldWVFbmQsXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTdG9wIHRoZSBjdXJyZW50IGFuaW1hdGlvbiBvbiBhIGxheWVyLiBTdG9wIHJld2luZHMgdGhlIGFuaW1hdGlvbiB0byB0aGVcclxuICAgKiBiZWdpbm5pbmcgYW5kIHByZXZlbnRzIGl0IGZyb20gcHJvZ3Jlc3NpbmcgZm9yd2FyZC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gTmFtZSBvZiB0aGUgbGF5ZXIgdGhhdCBjb250YWlucyB0aGUgYW5pbWF0aW9uLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgb3Igbm90IGFuIGFuaW1hdGlvbiB3YXMgc3VjY2Vzc2Z1bGx5IHN0b3BwZWQuXHJcbiAgICovXHJcbiAgc3RvcEFuaW1hdGlvbihuYW1lKSB7XHJcbiAgICBjb25zdCBsYXllciA9IHRoaXMuX2xheWVyTWFwW25hbWVdO1xyXG5cclxuICAgIGlmIChsYXllciA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICBgRGlkIG5vdCBzdG9wIGFuaW1hdGlvbiBvbiBsYXllciAke25hbWV9IGZvciBob3N0ICR7dGhpcy5faG9zdC5pZH0uIE5vIGxheWVyIGV4aXN0cyB3aXRoIHRoaXMgbmFtZS5gXHJcbiAgICAgICk7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbGF5ZXIuc3RvcEFuaW1hdGlvbigpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUGF1c2UgY3VycmVudCBhbmltYXRpb24gYW5kIHdlaWdodCBpbnRlcnBvbGF0aW9uIGFuaW1hdGlvbiBvbiBhbGwgbGF5ZXJzLlxyXG5cclxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSBXaGV0aGVyIG9yIG5vdCB0aGVyZSB3YXMgYW4gZXhpc3RpbmcgaW50ZXJwb2xhdGlvbiBvclxyXG4gICAqIGN1cnJlbnQgYW5pbWF0aW9ucyB0byBwYXVzZS5cclxuICAgKi9cclxuICBwYXVzZSgpIHtcclxuICAgIHRoaXMuX3BhdXNlZCA9IHRydWU7XHJcblxyXG4gICAgbGV0IHBhdXNlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5fbGF5ZXJzLmZvckVhY2gobCA9PiB7XHJcbiAgICAgIGlmIChsLnBhdXNlKCkpIHtcclxuICAgICAgICBwYXVzZWQgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gcGF1c2VkO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVzdW1lIGN1cnJlbnQgYW5pbWF0aW9uIGFuZCB3ZWlnaHQgaW50ZXJwb2xhdGlvbiBhbmltYXRpb24gb24gYWxsIGxheWVycy5cclxuXHJcbiAgICogQHJldHVybnMge2Jvb2xlYW59IC0gV2hldGhlciBvciBub3QgdGhlcmUgd2FzIGFuIGV4aXN0aW5nIGludGVycG9sYXRpb24gb3JcclxuICAgKiBjdXJyZW50IGFuaW1hdGlvbnMgdG8gcmVzdW1lLlxyXG4gICAqL1xyXG4gIHJlc3VtZSgpIHtcclxuICAgIHRoaXMuX3BhdXNlZCA9IGZhbHNlO1xyXG5cclxuICAgIGxldCByZXN1bWVkID0gZmFsc2U7XHJcbiAgICB0aGlzLl9sYXllcnMuZm9yRWFjaChsID0+IHtcclxuICAgICAgaWYgKGwucmVzdW1lKCkpIHtcclxuICAgICAgICByZXN1bWVkID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIHJlc3VtZWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBZGRzIGEgbmFtZXNwYWNlIHRvIHRoZSBob3N0IHdpdGggdGhlIG5hbWUgb2YgdGhlIGZlYXR1cmUgdG8gY29udGFpbiBwcm9wZXJ0aWVzXHJcbiAgICogYW5kIG1ldGhvZHMgZnJvbSB0aGUgZmVhdHVyZSB0aGF0IHVzZXJzIG9mIHRoZSBob3N0IG5lZWQgYWNjZXNzIHRvLlxyXG4gICAqXHJcbiAgICogQHNlZSBBbmltYXRpb25GZWF0dXJlXHJcbiAgICovXHJcbiAgaW5zdGFsbEFwaSgpIHtcclxuICAgIC8qKlxyXG4gICAgICogQGlubmVyXHJcbiAgICAgKiBAbmFtZXNwYWNlIEFuaW1hdGlvbkZlYXR1cmVcclxuICAgICAqL1xyXG4gICAgY29uc3QgYXBpID0gc3VwZXIuaW5zdGFsbEFwaSgpO1xyXG5cclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGFwaSwge1xyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIEFuaW1hdGlvbkZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBzZWUgY29yZS9BbmltYXRpb25GZWF0dXJlI3BhdXNlZFxyXG4gICAgICAgKi9cclxuICAgICAgcGF1c2VkOiB7XHJcbiAgICAgICAgZ2V0OiAoKSA9PiB0aGlzLnBhdXNlZCxcclxuICAgICAgfSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBtZW1iZXJvZiBBbmltYXRpb25GZWF0dXJlXHJcbiAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgKiBAc2VlIGNvcmUvQW5pbWF0aW9uRmVhdHVyZSNsYXllcnNcclxuICAgICAgICovXHJcbiAgICAgIGxheWVyczoge1xyXG4gICAgICAgIGdldDogKCkgPT4gdGhpcy5sYXllcnMsXHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuXHJcbiAgICBPYmplY3QuYXNzaWduKGFwaSwge1xyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIEFuaW1hdGlvbkZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBtZXRob2RcclxuICAgICAgICogQHNlZSBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjYWRkTGF5ZXJcclxuICAgICAgICovXHJcbiAgICAgIGFkZExheWVyOiB0aGlzLmFkZExheWVyLmJpbmQodGhpcyksXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbWVtYmVyb2YgQW5pbWF0aW9uRmVhdHVyZVxyXG4gICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICogQG1ldGhvZFxyXG4gICAgICAgKiBAc2VlIGNvcmUvQW5pbWF0aW9uRmVhdHVyZSNyZW1vdmVMYXllclxyXG4gICAgICAgKi9cclxuICAgICAgcmVtb3ZlTGF5ZXI6IHRoaXMucmVtb3ZlTGF5ZXIuYmluZCh0aGlzKSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBtZW1iZXJvZiBBbmltYXRpb25GZWF0dXJlXHJcbiAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgKiBAbWV0aG9kXHJcbiAgICAgICAqIEBzZWUgY29yZS9BbmltYXRpb25GZWF0dXJlI21vdmVMYXllclxyXG4gICAgICAgKi9cclxuICAgICAgbW92ZUxheWVyOiB0aGlzLm1vdmVMYXllci5iaW5kKHRoaXMpLFxyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIEFuaW1hdGlvbkZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBtZXRob2RcclxuICAgICAgICogQHNlZSBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjcmVuYW1lTGF5ZXJcclxuICAgICAgICovXHJcbiAgICAgIHJlbmFtZUxheWVyOiB0aGlzLnJlbmFtZUxheWVyLmJpbmQodGhpcyksXHJcblxyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIEFuaW1hdGlvbkZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBtZXRob2RcclxuICAgICAgICogQHNlZSBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjZ2V0TGF5ZXJXZWlnaHRcclxuICAgICAgICovXHJcbiAgICAgIGdldExheWVyV2VpZ2h0OiB0aGlzLmdldExheWVyV2VpZ2h0LmJpbmQodGhpcyksXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbWVtYmVyb2YgQW5pbWF0aW9uRmVhdHVyZVxyXG4gICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICogQG1ldGhvZFxyXG4gICAgICAgKiBAc2VlIGNvcmUvQW5pbWF0aW9uRmVhdHVyZSNzZXRMYXllcldlaWdodFxyXG4gICAgICAgKi9cclxuICAgICAgc2V0TGF5ZXJXZWlnaHQ6IHRoaXMuc2V0TGF5ZXJXZWlnaHQuYmluZCh0aGlzKSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBtZW1iZXJvZiBBbmltYXRpb25GZWF0dXJlXHJcbiAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgKiBAbWV0aG9kXHJcbiAgICAgICAqIEBzZWUgY29yZS9BbmltYXRpb25GZWF0dXJlI3BhdXNlTGF5ZXJXZWlnaHRcclxuICAgICAgICovXHJcbiAgICAgIHBhdXNlTGF5ZXJXZWlnaHQ6IHRoaXMucGF1c2VMYXllcldlaWdodC5iaW5kKHRoaXMpLFxyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIEFuaW1hdGlvbkZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBtZXRob2RcclxuICAgICAgICogQHNlZSBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjcmVzdW1lTGF5ZXJXZWlnaHRcclxuICAgICAgICovXHJcbiAgICAgIHJlc3VtZUxheWVyV2VpZ2h0OiB0aGlzLnJlc3VtZUxheWVyV2VpZ2h0LmJpbmQodGhpcyksXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbWVtYmVyb2YgQW5pbWF0aW9uRmVhdHVyZVxyXG4gICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICogQG1ldGhvZFxyXG4gICAgICAgKiBAc2VlIGNvcmUvQW5pbWF0aW9uRmVhdHVyZSNwYXVzZUxheWVyXHJcbiAgICAgICAqL1xyXG4gICAgICBwYXVzZUxheWVyOiB0aGlzLnBhdXNlTGF5ZXIuYmluZCh0aGlzKSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBtZW1iZXJvZiBBbmltYXRpb25GZWF0dXJlXHJcbiAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgKiBAbWV0aG9kXHJcbiAgICAgICAqIEBzZWUgY29yZS9BbmltYXRpb25GZWF0dXJlI3Jlc3VtZUxheWVyXHJcbiAgICAgICAqL1xyXG4gICAgICByZXN1bWVMYXllcjogdGhpcy5yZXN1bWVMYXllci5iaW5kKHRoaXMpLFxyXG5cclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBtZW1iZXJvZiBBbmltYXRpb25GZWF0dXJlXHJcbiAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgKiBAbWV0aG9kXHJcbiAgICAgICAqIEBzZWUgY29yZS9BbmltYXRpb25GZWF0dXJlI2dldFRyYW5zaXRpb25pbmdcclxuICAgICAgICovXHJcbiAgICAgIGdldFRyYW5zaXRpb25pbmc6IHRoaXMuZ2V0VHJhbnNpdGlvbmluZy5iaW5kKHRoaXMpLFxyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIEFuaW1hdGlvbkZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBtZXRob2RcclxuICAgICAgICogQHNlZSBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjZ2V0QW5pbWF0aW9uc1xyXG4gICAgICAgKi9cclxuICAgICAgZ2V0QW5pbWF0aW9uczogdGhpcy5nZXRBbmltYXRpb25zLmJpbmQodGhpcyksXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbWVtYmVyb2YgQW5pbWF0aW9uRmVhdHVyZVxyXG4gICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICogQG1ldGhvZFxyXG4gICAgICAgKiBAc2VlIGNvcmUvQW5pbWF0aW9uRmVhdHVyZSNnZXRDdXJyZW50QW5pbWF0aW9uXHJcbiAgICAgICAqL1xyXG4gICAgICBnZXRDdXJyZW50QW5pbWF0aW9uOiB0aGlzLmdldEN1cnJlbnRBbmltYXRpb24uYmluZCh0aGlzKSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBtZW1iZXJvZiBBbmltYXRpb25GZWF0dXJlXHJcbiAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgKiBAbWV0aG9kXHJcbiAgICAgICAqIEBzZWUgY29yZS9BbmltYXRpb25GZWF0dXJlI2dldFBhdXNlZFxyXG4gICAgICAgKi9cclxuICAgICAgZ2V0UGF1c2VkOiB0aGlzLmdldFBhdXNlZC5iaW5kKHRoaXMpLFxyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIEFuaW1hdGlvbkZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBtZXRob2RcclxuICAgICAgICogQHNlZSBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjZ2V0QW5pbWF0aW9uVHlwZVxyXG4gICAgICAgKi9cclxuICAgICAgZ2V0QW5pbWF0aW9uVHlwZTogdGhpcy5nZXRBbmltYXRpb25UeXBlLmJpbmQodGhpcyksXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbWVtYmVyb2YgQW5pbWF0aW9uRmVhdHVyZVxyXG4gICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICogQG1ldGhvZFxyXG4gICAgICAgKiBAc2VlIGNvcmUvQW5pbWF0aW9uRmVhdHVyZSNhZGRBbmltYXRpb25cclxuICAgICAgICovXHJcbiAgICAgIGFkZEFuaW1hdGlvbjogdGhpcy5hZGRBbmltYXRpb24uYmluZCh0aGlzKSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBtZW1iZXJvZiBBbmltYXRpb25GZWF0dXJlXHJcbiAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgKiBAbWV0aG9kXHJcbiAgICAgICAqIEBzZWUgY29yZS9BbmltYXRpb25GZWF0dXJlI3JlbW92ZUFuaW1hdGlvblxyXG4gICAgICAgKi9cclxuICAgICAgcmVtb3ZlQW5pbWF0aW9uOiB0aGlzLnJlbW92ZUFuaW1hdGlvbi5iaW5kKHRoaXMpLFxyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIEFuaW1hdGlvbkZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBtZXRob2RcclxuICAgICAgICogQHNlZSBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjcmVuYW1lQW5pbWF0aW9uXHJcbiAgICAgICAqL1xyXG4gICAgICByZW5hbWVBbmltYXRpb246IHRoaXMucmVuYW1lQW5pbWF0aW9uLmJpbmQodGhpcyksXHJcblxyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIEFuaW1hdGlvbkZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBtZXRob2RcclxuICAgICAgICogQHNlZSBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjZ2V0QW5pbWF0aW9uQmxlbmROYW1lc1xyXG4gICAgICAgKi9cclxuICAgICAgZ2V0QW5pbWF0aW9uQmxlbmROYW1lczogdGhpcy5nZXRBbmltYXRpb25CbGVuZE5hbWVzLmJpbmQodGhpcyksXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbWVtYmVyb2YgQW5pbWF0aW9uRmVhdHVyZVxyXG4gICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICogQG1ldGhvZFxyXG4gICAgICAgKiBAc2VlIGNvcmUvQW5pbWF0aW9uRmVhdHVyZSNnZXRBbmltYXRpb25CbGVuZFdlaWdodFxyXG4gICAgICAgKi9cclxuICAgICAgZ2V0QW5pbWF0aW9uQmxlbmRXZWlnaHQ6IHRoaXMuZ2V0QW5pbWF0aW9uQmxlbmRXZWlnaHQuYmluZCh0aGlzKSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBtZW1iZXJvZiBBbmltYXRpb25GZWF0dXJlXHJcbiAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgKiBAbWV0aG9kXHJcbiAgICAgICAqIEBzZWUgY29yZS9BbmltYXRpb25GZWF0dXJlI3NldEFuaW1hdGlvbkJsZW5kV2VpZ2h0XHJcbiAgICAgICAqL1xyXG4gICAgICBzZXRBbmltYXRpb25CbGVuZFdlaWdodDogdGhpcy5zZXRBbmltYXRpb25CbGVuZFdlaWdodC5iaW5kKHRoaXMpLFxyXG5cclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBtZW1iZXJvZiBBbmltYXRpb25GZWF0dXJlXHJcbiAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgKiBAbWV0aG9kXHJcbiAgICAgICAqIEBzZWUgY29yZS9BbmltYXRpb25GZWF0dXJlI3BsYXlBbmltYXRpb25cclxuICAgICAgICovXHJcbiAgICAgIHBsYXlBbmltYXRpb246IHRoaXMucGxheUFuaW1hdGlvbi5iaW5kKHRoaXMpLFxyXG5cclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBtZW1iZXJvZiBBbmltYXRpb25GZWF0dXJlXHJcbiAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgKiBAbWV0aG9kXHJcbiAgICAgICAqIEBzZWUgY29yZS9BbmltYXRpb25GZWF0dXJlI3BsYXlOZXh0QW5pbWF0aW9uXHJcbiAgICAgICAqL1xyXG4gICAgICBwbGF5TmV4dEFuaW1hdGlvbjogdGhpcy5wbGF5TmV4dEFuaW1hdGlvbi5iaW5kKHRoaXMpLFxyXG5cclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBtZW1iZXJvZiBBbmltYXRpb25GZWF0dXJlXHJcbiAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgKiBAbWV0aG9kXHJcbiAgICAgICAqIEBzZWUgY29yZS9BbmltYXRpb25GZWF0dXJlI3BhdXNlQW5pbWF0aW9uXHJcbiAgICAgICAqL1xyXG4gICAgICBwYXVzZUFuaW1hdGlvbjogdGhpcy5wYXVzZUFuaW1hdGlvbi5iaW5kKHRoaXMpLFxyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIEFuaW1hdGlvbkZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBtZXRob2RcclxuICAgICAgICogQHNlZSBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjcmVzdW1lQW5pbWF0aW9uXHJcbiAgICAgICAqL1xyXG4gICAgICByZXN1bWVBbmltYXRpb246IHRoaXMucmVzdW1lQW5pbWF0aW9uLmJpbmQodGhpcyksXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbWVtYmVyb2YgQW5pbWF0aW9uRmVhdHVyZVxyXG4gICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICogQG1ldGhvZFxyXG4gICAgICAgKiBAc2VlIGNvcmUvQW5pbWF0aW9uRmVhdHVyZSNzdG9wQW5pbWF0aW9uXHJcbiAgICAgICAqL1xyXG4gICAgICBzdG9wQW5pbWF0aW9uOiB0aGlzLnN0b3BBbmltYXRpb24uYmluZCh0aGlzKSxcclxuXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbWVtYmVyb2YgQW5pbWF0aW9uRmVhdHVyZVxyXG4gICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICogQG1ldGhvZFxyXG4gICAgICAgKiBAc2VlIGNvcmUvQW5pbWF0aW9uRmVhdHVyZSNwYXVzZVxyXG4gICAgICAgKi9cclxuICAgICAgcGF1c2U6IHRoaXMucGF1c2UuYmluZCh0aGlzKSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBtZW1iZXJvZiBBbmltYXRpb25GZWF0dXJlXHJcbiAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgKiBAbWV0aG9kXHJcbiAgICAgICAqIEBzZWUgY29yZS9BbmltYXRpb25GZWF0dXJlI3Jlc3VtZVxyXG4gICAgICAgKi9cclxuICAgICAgcmVzdW1lOiB0aGlzLnJlc3VtZS5iaW5kKHRoaXMpLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGUgZWFjaCBhbmltYXRpb24gbGF5ZXIuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge251bWJlcn0gZGVsdGFUaW1lIC0gVGltZSBzaW5jZSB0aGUgbGFzdCB1cGRhdGUuXHJcbiAgICovXHJcbiAgdXBkYXRlKGRlbHRhVGltZSkge1xyXG4gICAgaWYgKCF0aGlzLl9sYXllcnMubGVuZ3RoKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5fcGF1c2VkKSB7XHJcbiAgICAgIGRlbHRhVGltZSA9IDA7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUmUtZXZhbHVhdGUgaW50ZXJuYWwgd2VpZ2h0cyBmb3IgbGF5ZXJzXHJcbiAgICB0aGlzLl91cGRhdGVJbnRlcm5hbFdlaWdodHMoKTtcclxuXHJcbiAgICAvLyBVcGRhdGUgbGF5ZXJzXHJcbiAgICB0aGlzLl9sYXllcnMuZm9yRWFjaChsYXllciA9PiB7XHJcbiAgICAgIGxheWVyLnVwZGF0ZShkZWx0YVRpbWUpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgc3VwZXIudXBkYXRlKGRlbHRhVGltZSk7XHJcbiAgfVxyXG5cclxuICBkaXNjYXJkKCkge1xyXG4gICAgdGhpcy5fbGF5ZXJzLmZvckVhY2gobGF5ZXIgPT4ge1xyXG4gICAgICBsYXllci5kaXNjYXJkKCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBkZWxldGUgdGhpcy5fbGF5ZXJzO1xyXG4gICAgZGVsZXRlIHRoaXMuX2xheWVyTWFwO1xyXG5cclxuICAgIHN1cGVyLmRpc2NhcmQoKTtcclxuICB9XHJcbn1cclxuXHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShBbmltYXRpb25GZWF0dXJlLCAnRVZFTlRTJywge1xyXG4gIHZhbHVlOiB7XHJcbiAgICAuLi5PYmplY3QuZ2V0UHJvdG90eXBlT2YoQWJzdHJhY3RIb3N0RmVhdHVyZSkuRVZFTlRTLFxyXG4gICAgYWRkTGF5ZXI6ICdvbkFkZExheWVyRXZlbnQnLFxyXG4gICAgcmVtb3ZlTGF5ZXI6ICdvblJlbW92ZUxheWVyRXZlbnQnLFxyXG4gICAgcmVuYW1lTGF5ZXI6ICdvblJlbmFtZUxheWVyRXZlbnQnLFxyXG4gICAgYWRkQW5pbWF0aW9uOiAnb25BZGRBbmltYXRpb25FdmVudCcsXHJcbiAgICByZW1vdmVBbmltYXRpb246ICdvblJlbW92ZWRBbmltYXRpb25FdmVudCcsXHJcbiAgICByZW5hbWVBbmltYXRpb246ICdvblJlbmFtZUFuaW1hdGlvbkV2ZW50JyxcclxuICAgIHBsYXlBbmltYXRpb246ICdvblBsYXlFdmVudCcsXHJcbiAgICBwbGF5TmV4dEFuaW1hdGlvbjogJ29uTmV4dEV2ZW50JyxcclxuICAgIHBhdXNlQW5pbWF0aW9uOiAnb25QYXVzZUV2ZW50JyxcclxuICAgIHJlc3VtZUFuaW1hdGlvbjogJ29uUmVzdW1lRXZlbnQnLFxyXG4gICAgaW50ZXJydXB0QW5pbWF0aW9uOiAnb25JbnRlcnJ1cHRFdmVudCcsXHJcbiAgICBzdG9wQW5pbWF0aW9uOiAnb25TdG9wRXZlbnQnLFxyXG4gIH0sXHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgQW5pbWF0aW9uRmVhdHVyZTtcclxuIiwiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXHJcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxyXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bmRlcnNjb3JlLWRhbmdsZSAqL1xyXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xyXG5pbXBvcnQgTWFuYWdlZEFuaW1hdGlvbkxheWVySW50ZXJmYWNlIGZyb20gJy4vYW5pbXBhY2svTWFuYWdlZEFuaW1hdGlvbkxheWVySW50ZXJmYWNlJztcclxuaW1wb3J0IHsgQW5pbWF0aW9uVHlwZXMgfSBmcm9tICcuL2FuaW1wYWNrL0FuaW1hdGlvbkZlYXR1cmUnO1xyXG5pbXBvcnQgU1NNTFNwZWVjaG1hcmtJbnRlcmZhY2UgZnJvbSAnLi9hd3NwYWNrL1NTTUxTcGVlY2htYXJrSW50ZXJmYWNlJztcclxuaW1wb3J0IEFic3RyYWN0SG9zdEZlYXR1cmUgZnJvbSAnLi9BYnN0cmFjdEhvc3RGZWF0dXJlJztcclxuaW1wb3J0IHsgUXVhZHJhdGljIH0gZnJvbSAnLi9hbmltcGFjay9FYXNpbmcnO1xyXG5pbXBvcnQgTWF0aFV0aWxzIGZyb20gJy4vTWF0aFV0aWxzJztcclxuaW1wb3J0IFV0aWxzIGZyb20gJy4vVXRpbHMnO1xyXG5cclxuLyoqXHJcbiAqIEVudW0gZm9yIGF4aXMgZGlyZWN0aW9ucy5cclxuICpcclxuICogQHJlYWRvbmx5XHJcbiAqIEBlbnVtIHtDbGFzc31cclxuICovXHJcbmNvbnN0IEF4aXNNYXAgPSB7XHJcbiAgUG9zaXRpdmVYOiBbMSwgMCwgMF0sXHJcbiAgTmVnYXRpdmVYOiBbLTEsIDAsIDBdLFxyXG4gIFBvc2l0aXZlWTogWzAsIDEsIDBdLFxyXG4gIE5lZ2F0aXZlWTogWzAsIC0xLCAwXSxcclxuICBQb3NpdGl2ZVo6IFswLCAwLCAxXSxcclxuICBOZWdhdGl2ZVo6IFswLCAwLCAtMV0sXHJcbn07XHJcblxyXG5jb25zdCBGYWNlVGFyZ2V0VHlwZXMgPSB7XHJcbiAgRXllQ2VudGVyOiAwLFxyXG4gIEV5ZUxlZnQ6IDEsXHJcbiAgRXllUmlnaHQ6IDIsXHJcbiAgTW91dGg6IDMsXHJcbn1cclxuXHJcbi8vIEF2ZXJhZ2UgZGlzdGFuY2UgYmV0d2VlbiBwdXBpbHMgaXMgLjA2NG0sIGdvbGRlbiByYXRpbyBzYXlzIHRoYXQgdGhlIGRpc3RhbmNlXHJcbi8vIGZyb20gY2VudGVyIG9mIHRoZSBwdXBpbHMgdG8gdGhlIGNlbnRlciBvZiB0aGUgbW91dGggc2hvdWxkIGJlIGFib3V0IHRoZSBzYW1lLlxyXG5jb25zdCBGYWNlVmVjdG9ycyA9IFtcclxuICBbMCwgMCwgMF0sXHJcbiAgWy0uMDMyLCAwLCAwXSxcclxuICBbLjAzMiwgMCwgMF0sXHJcbiAgWzAsIC0uMDY0LCAwXVxyXG5dO1xyXG5cclxuLy8gVGltZSByYW5nZXMgdG8gdXNlIHdoZW4gY2hvb3NpbmcgYSBuZXcgcmFuZG9tIHdhaXQgdGltZSBiZXR3ZWVuIHNhY2NhZGVzXHJcbmNvbnN0IE1pY3JvU2FjY2FkZVdhaXRSYW5nZXMgPSB7XHJcbiAgZGVmYXVsdDogWzAuOCwgMS43NV0sXHJcbiAgcG9zdE1hY3JvOiBbMC42LCAxLjMxMjVdLFxyXG59O1xyXG5cclxuY29uc3QgTWFjcm9TYWNjYWRlV2FpdFJhbmdlcyA9IHtcclxuICBkZWZhdWx0OiBbNS4wLCA4LjBdLFxyXG4gIG1vdXRoVGFyZ2V0OiBbMC4yLCAwLjc1XSwgLy8gTG9vayBhd2F5IGZyb20gYSBtb3V0aCB0YXJnZXQgdGhlIGZhc3Rlc3RcclxuICBleWVUYXJnZXQ6IFsxLjUsIDQuMF1cclxufTtcclxuXHJcbi8vIE1pbmltdW0gYW5nbGUgaW4gZGVncmVlcyB0aGUgZXllIGRpcmVjdGlvbiBtdXN0IGNoYW5nZSB0byB0cmlnZ2VyIGEgYmxpbmsgYW5pbWF0aW9uXHJcbmNvbnN0IEJsaW5rVGhyZXNob2xkID0gMzU7XHJcblxyXG4vLyBNYXhpbXVtIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gdXNlIGZvciBjYWxjdWxhdGluZyBsb29rIHNwZWVkXHJcbmNvbnN0IE1heERlbHRhID0gMTAwIC8gMztcclxuXHJcbi8qKlxyXG4gKiBQb2ludE9mSW50ZXJlc3QgY29udHJvbHMgdGhlIGdhemUgZGlyZWN0aW9uIG9mIHRoZSBob3N0LiBHaXZlbiBvbmUgb3IgbW9yZVxyXG4gKiBhbmltYXRpb25zIG9mIHR5cGUgQmxlbmQyZFN0YXRlLCBpdCBjYWxjdWxhdGVzIHRoZSBhbmdsZXMgYmV0d2VlbiB0aGUgbG9va1RyYWNrZXJcclxuICogb2JqZWN0IChnZW5lcmFsbHkgYSBqb2ludCBpbiB0aGUgaG9zdCdzIHNrZWxldG9uKSBhbmQgdGhlIGxvb2tUYXJnZXQgKHRoZSBvYmplY3RcclxuICogdGhlIGhvc3Qgc2hvdWxkIGxvb2sgYXQpIGFuZCBkcml2ZXMgdGhlIG1hbmFnZWQgQmxlbmQyZFN0YXRlcycgWCBhbmQgWSBibGVuZFxyXG4gKiB2YWx1ZXMgdXNpbmcgdGhlIHJlc3VsdC4gWW91IGNhbiBvcHRpb25hbGx5IGFkZCBzYWNjYWRpYyBtb3ZlbWVudCB0byBhbnkgbWFuYWdlZFxyXG4gKiBhbmltYXRpb24gdG8gaGVscCBtYWtlIHRoZSBob3N0J3MgZXllcyBhcHBlYXIgYWxpdmUgd2hlbiBmb2N1c2VkIG9uIHRoZSBzYW1lXHJcbiAqIHBvaW50IGZvciBleHRlZGVkIHBlcmlvZHMgb2YgdGltZS4gSWYgYmxpbmsgYW5pbWF0aW9ucyBhcmUgc3BlY2lmaWVkLCBhIGJsaW5rXHJcbiAqIHdpbGwgYmUgcGxheWVkIGR1cmluZyBsYXJnZSBjaGFuZ2VzIGluIGdhemUgZGlyZWN0aW9uLlxyXG4gKlxyXG4gKiBAZXh0ZW5kcyBBYnN0cmFjdEhvc3RGZWF0dXJlXHJcbiAqIEBhbGlhcyBjb3JlL1BvaW50T2ZJbnRlcmVzdEZlYXR1cmVcclxuICogQGltcGxlbWVudHMgU1NNTFNwZWVjaG1hcmtJbnRlcmZhY2VcclxuICogQGltcGxlbWVudHMgTWFuYWdlZEFuaW1hdGlvbkxheWVySW50ZXJmYWNlXHJcbiAqL1xyXG5jbGFzcyBQb2ludE9mSW50ZXJlc3RGZWF0dXJlIGV4dGVuZHMgQWJzdHJhY3RIb3N0RmVhdHVyZS5taXgoXHJcbiAgU1NNTFNwZWVjaG1hcmtJbnRlcmZhY2UuTWl4aW4sXHJcbiAgTWFuYWdlZEFuaW1hdGlvbkxheWVySW50ZXJmYWNlLk1peGluXHJcbikge1xyXG4gIC8qKlxyXG4gICAqIEBjb25zdHJ1Y3RvclxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtjb3JlL0hvc3RPYmplY3R9IGhvc3QgLSBIb3N0IHRoYXQgb3ducyB0aGUgZmVhdHVyZS5cclxuICAgKiBAcGFyYW0ge09iamVjdD19IG9wdGlvbnMgLSBPcHRpb25zIGZvciB0aGUgZmVhdHVyZS5cclxuICAgKiBAcGFyYW0ge09iamVjdD19IHRhcmdldCAtIDNEIHRyYW5zZm9ybWF0aW9uIG5vZGUgdGhhdCB0aGUgaG9zdCBzaG91bGQgdHJ5IHRvXHJcbiAgICogbG9vayBhdC5cclxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucy5sb29rVHJhY2tlciAtIDNEIHRyYW5zZm9ybWF0aW9uIG5vZGUgdGhhdCByZXByZXNlbnRzXHJcbiAgICogdGhlIGRpcmVjdGlvbiB0aGUgaG9zdCBpcyBjdXJyZW50bHkgbG9va2luZyBkdXJpbmcgYW5pbWF0aW9uLlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0PX0gb3B0aW9ucy5zY2VuZSAtIEVuZ2luZS1zcGVjaWZpYyBzY2VuZSBvYmplY3QgdGhhdCBjb250YWluc1xyXG4gICAqIHRoZSBob3N0LiBUaGlzIG9iamVjdCBtdXN0IGJlIGRlZmluZWQgaWYgdXNpbmcgJ3NldFRhcmdldEJ5TmFtZScgb3IgJ1NldFRhcmdldEJ5SWQnXHJcbiAgICogbWV0aG9kcy5cclxuICAgKiBAcGFyYW0ge09iamVjdD19IGxvb2tPcHRpb25zIC0gT3B0aW9ucyBmb3IgdGhlIGxvb2sgYW5pbWF0aW9uIGxheWVycy5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gW2xvb2tPcHRpb25zLmJsZW5kVGltZT0wLjFdIC0gRGVmYXVsdCBhbW91bnQgb2YgdGltZSBpdCB3aWxsXHJcbiAgICogdGFrZSB0byBtYW5pcHVsYXRlIHRoZSB3ZWlnaHRzIG9mIHRoZSBsb29rIGxheWVycy5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gW2xvb2tPcHRpb25zLmVhc2luZ0ZuPVF1YWRyYXRpYy5Jbk91dF0gLSBEZWZhdWx0IGVhc2luZyBmdW5jdGlvblxyXG4gICAqIHRvIHVzZSB3aGVuIG1hbmlwdWxhdGluZyBsb29rIGxheWVyIHdlaWdodHMuXHJcbiAgICogQHBhcmFtIHtBcnJheS48T2JqZWN0Pn0gW2xvb2tPcHRpb25zLmxheWVycz1bXV0gLSBBbiBhcnJheSBvZiBsYXllciBvcHRpb25zXHJcbiAgICogb2JqZWN0cyB0byByZWdpc3RlciBhcyBsb29rIGxheWVycy5cclxuICAgKiBAcGFyYW0ge09iamVjdD19IGJsaW5rT3B0aW9ucyAtIE9wdGlvbnMgZm9yIHRoZSBibGluayBhbmltYXRpb24gbGF5ZXJzLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbYmxpbmtPcHRpb25zLmJsZW5kVGltZT0wLjA3NV0gLSBEZWZhdWx0IGFtb3VudCBvZiB0aW1lIGl0XHJcbiAgICogd2lsbCB0YWtlIHRvIG1hbmlwdWxhdGUgdGhlIHdlaWdodHMgb2YgdGhlIGJsaW5rIGxheWVycy5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gW2JsaW5rT3B0aW9ucy5lYXNpbmdGbj1RdWFkcmF0aWMuSW5PdXRdIC0gRGVmYXVsdCBlYXNpbmcgZnVuY3Rpb25cclxuICAgKiB0byB1c2Ugd2hlbiBtYW5pcHVsYXRpbmcgYmxpbmsgbGF5ZXIgd2VpZ2h0cy5cclxuICAgKiBAcGFyYW0ge0FycmF5LjxPYmplY3Q+fSBbYmxpbmtPcHRpb25zLmxheWVycz1bXV0gLSBBbiBhcnJheSBvZiBsYXllciBvcHRpb25zXHJcbiAgICogb2JqZWN0cyB0byByZWdpc3RlciBhcyBibGluayBsYXllcnMuXHJcbiAgICovXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBob3N0LFxyXG4gICAge1xyXG4gICAgICB0YXJnZXQsXHJcbiAgICAgIGxvb2tUcmFja2VyLFxyXG4gICAgICBzY2VuZVxyXG4gICAgfSA9IHt9LFxyXG4gICAge1xyXG4gICAgICBibGVuZFRpbWU6IGxvb2tCbGVuZFRpbWUgPSAwLjEsXHJcbiAgICAgIGVhc2luZ0ZuOiBsb29rRWFzaW5nRm4gPSBRdWFkcmF0aWMuSW5PdXQsXHJcbiAgICAgIGxheWVyczogbG9va0xheWVycyA9IFtdLFxyXG4gICAgfSA9IHt9LFxyXG4gICAge1xyXG4gICAgICBibGVuZFRpbWU6IGJsaW5rQmxlbmRUaW1lID0gMC4wNzUsXHJcbiAgICAgIGVhc2luZ0ZuOiBibGlua0Vhc2luZ0ZuID0gUXVhZHJhdGljLkluT3V0LFxyXG4gICAgICBsYXllcnM6IGJsaW5rTGF5ZXJzID0gW10sXHJcbiAgICB9ID0ge31cclxuICApIHtcclxuICAgIHN1cGVyKGhvc3QpO1xyXG5cclxuICAgIGlmICghdGhpcy5jb25zdHJ1Y3Rvci5fdmFsaWRhdGVUcmFuc2Zvcm1PYmplY3QobG9va1RyYWNrZXIpKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGluaXRpYWxpemUgUG9pbnRPZkludGVyZXN0RmVhdHVyZSBvbiBob3N0ICR7dGhpcy5faG9zdC5pZH0uIExvb2tUcmFja2VyIG11c3QgYmUgZGVmaW5lZCBhcyBhIHZhbGlkIHRyYW5zZm9ybWF0aW9uIG9iamVjdC5gKTtcclxuICAgIH1cclxuICAgIHRoaXMuX2xvb2tUcmFja2VyID0gbG9va1RyYWNrZXI7XHJcblxyXG4gICAgdGhpcy5fc2NlbmUgPSBzY2VuZTtcclxuICAgIHRoaXMuX3RhcmdldCA9IHRhcmdldCB8fCBudWxsO1xyXG4gICAgdGhpcy5fcHJldlRhcmdldFBvcyA9IFswLCAwLCAwXTtcclxuICAgIHRoaXMuX2lzVGFyZ2V0TW92aW5nID0gZmFsc2U7XHJcbiAgICB0aGlzLl9sb29rTGF5ZXJzID0gdGhpcy5fbG9va0xheWVycyB8fCB7fTtcclxuICAgIHRoaXMuX3RyYWNraW5nQ29uZmlncyA9IHRoaXMuX3RyYWNraW5nQ29uZmlncyB8fCBbXTtcclxuICAgIHRoaXMuX2JsaW5rTGF5ZXJzID0gdGhpcy5fYmxpbmtMYXllcnMgfHwge307XHJcblxyXG4gICAgLy8gUmVnaXN0ZXIgdGhlIGxvb2sgbGF5ZXJzXHJcbiAgICBsb29rTGF5ZXJzLmZvckVhY2goKHtcclxuICAgICAgbmFtZSxcclxuICAgICAgYW5pbWF0aW9uLFxyXG4gICAgICBtYXhTcGVlZCxcclxuICAgICAgcmVmZXJlbmNlLFxyXG4gICAgICBmb3J3YXJkQXhpcyxcclxuICAgICAgaGFzU2FjY2FkZSxcclxuICAgICAgYmxlbmRUaW1lLFxyXG4gICAgICBlYXNpbmdGblxyXG4gICAgfSkgPT4ge1xyXG4gICAgICB0aGlzLnJlZ2lzdGVyTG9va0xheWVyKG5hbWUsIHtcclxuICAgICAgICBhbmltYXRpb24sXHJcbiAgICAgICAgbWF4U3BlZWQsXHJcbiAgICAgICAgcmVmZXJlbmNlLFxyXG4gICAgICAgIGZvcndhcmRBeGlzLFxyXG4gICAgICAgIGhhc1NhY2NhZGUsXHJcbiAgICAgICAgYmxlbmRUaW1lOiBibGVuZFRpbWUgIT09IHVuZGVmaW5lZCA/IGJsZW5kVGltZSA6IGxvb2tCbGVuZFRpbWUsXHJcbiAgICAgICAgZWFzaW5nRm46IGVhc2luZ0ZuICE9PSB1bmRlZmluZWQgPyBlYXNpbmdGbiA6IGxvb2tFYXNpbmdGbixcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBSZWdpc3RlciB0aGUgYmxpbmsgbGF5ZXJzXHJcbiAgICBibGlua0xheWVycy5mb3JFYWNoKCh7IG5hbWUsIGFuaW1hdGlvbiwgYmxlbmRUaW1lLCBlYXNpbmdGbiB9KSA9PiB7XHJcbiAgICAgIHRoaXMucmVnaXN0ZXJCbGlua0xheWVyKG5hbWUsIHtcclxuICAgICAgICBhbmltYXRpb24sXHJcbiAgICAgICAgYmxlbmRUaW1lOiBibGVuZFRpbWUgIT09IHVuZGVmaW5lZCA/IGJsZW5kVGltZSA6IGJsaW5rQmxlbmRUaW1lLFxyXG4gICAgICAgIGVhc2luZ0ZuOiBlYXNpbmdGbiAhPT0gdW5kZWZpbmVkID8gZWFzaW5nRm4gOiBibGlua0Vhc2luZ0ZuLFxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyBhbmQgc2V0cyB0aGUgdGFyZ2V0IG9iamVjdCB0aGUgaG9zdCBzaG91bGQgbG9vayBhdC5cclxuICAgKlxyXG4gICAqIEB0eXBlIHtPYmplY3R8bnVsbH1cclxuICAgKi9cclxuICBnZXQgdGFyZ2V0KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3RhcmdldDtcclxuICB9XHJcblxyXG4gIHNldCB0YXJnZXQodGFyZ2V0KSB7XHJcbiAgICB0aGlzLl90YXJnZXQgPSB0YXJnZXQgfHwgbnVsbDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiBhIHZlY3RvciByZXByZXNlbnRpbmcgdGhlIGdsb2JhbCBwb3NpdGlvbiBvZiBhbiBvYmplY3QuIFNob3VsZCBiZVxyXG4gICAqIG92ZXJsb2FkZWQgZm9yIGVhY2ggcmVuZGVyaW5nIGVuZ2luZSBpbXBsZW1lbnRhdGlvbi5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge2FueX0gX29iaiAtIEVuZ2luZS1zcGVjaWZpYyAzRCB0cmFuc2Zvcm0gb2JqZWN0LlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0FycmF5LjxudW1iZXI+fSAtIEFuIGFycmF5IGNvbnNpc3Rpbmcgb2YgdGhyZWUgbnVtYmVycyByZXByZXNlbnRpbmdcclxuICAgKiB4LCB5IGFuZCB6IGNvb3JkaW5hdGVzLlxyXG4gICAqL1xyXG4gIHN0YXRpYyBfZ2V0V29ybGRQb3NpdGlvbihvYmopIHtcclxuICAgIHJldHVybiBbMCwgMCwgMF07XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gYSBtYXRyaXggcmVwcmVzZW50aW5nIHRoZSBnbG9iYWwgdHJhbnNmb3JtYXRpb24gbWF0cml4IG9mIGFuIG9iamVjdC5cclxuICAgKiBTaG91bGQgYmUgb3ZlcmxvYWRlZCBmb3IgZWFjaCByZW5kZXJpbmcgZW5naW5lIGltcGxlbWVudGF0aW9uLlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7YW55fSBvYmogLSBFbmdpbmUtc3BlY2lmaWMgM0QgdHJhbnNmb3JtIG9iamVjdC5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtBcnJheS48bnVtYmVyPn0gLSBBbiBhcnJheSBjb25zaXN0aW5nIG9mIDE2IG51bWJlcnMgcmVwcmVzZW50aW5nXHJcbiAgICogdGhlIDNkIHRyYW5zZm9ybWF0aW9uLlxyXG4gICAqL1xyXG4gIHN0YXRpYyBfZ2V0V29ybGRNYXRyaXgob2JqKSB7XHJcbiAgICByZXR1cm4gWzEsIDAsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDAsIDFdO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUm90YXRlIHRoZSBnaXZlbiBsb2NhbCBkaXJlY3Rpb24gdmVjdG9yIGJ5IHRoZSBvYmplY3QncyB3b3JsZCByb3RhdGlvbiBtYXRyaXguXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHthbnl9IG9iaiAtIEVuZ2luZS1zcGVjaWZpYyAzRCB0cmFuc2Zvcm0gb2JqZWN0LlxyXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IGZvcndhcmRWZWN0b3IgLSBVbml0IHZlY3RvciByZXByZXNlbnRpbmcgdGhlIGxvY2FsXHJcbiAgICogZm9yd2FyZCBkaXJlY3Rpb24gb2YgdGhlIG9iamVjdC5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtBcnJheS48bnVtYmVyPn1cclxuICAgKi9cclxuICBzdGF0aWMgX2dldE9iamVjdERpcmVjdGlvbihvYmosIGZvcndhcmRWZWN0b3IgPSBBeGlzTWFwLlBvc2l0aXZlWikge1xyXG4gICAgY29uc3Qgcm90YXRpb24gPSBNYXRoVXRpbHMuZ2V0Um90YXRpb25NYXRyaXgodGhpcy5fZ2V0V29ybGRNYXRyaXgob2JqKSk7XHJcblxyXG4gICAgcmV0dXJuIE1hdGhVdGlscy5yb3RhdGVWZWN0b3IoZm9yd2FyZFZlY3Rvciwgcm90YXRpb24pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2FsY3VsYXRlIGhvcml6b250YWwgYW5kIHZlcnRpY2FsIGxvb2sgYW5nbGVzIGluIGRlZ3JlZXMgZ2l2ZW4gc3BoZXJpY2FsIHRoZXRhXHJcbiAgICogYW5kIHBoaSBhbmdsZXMgaW4gcmFkaWFucy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB0aGV0YSAtIFZlcnRpY2FsL3BvbGFyIGFuZ2xlIGluIHJhZGlhbnMgd2hlcmUgMCBwb2ludHMgZGlyZWN0bHlcclxuICAgKiBhbG9uZyBwb3NpdGl2ZSBZIGF4aXMuXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IHBoaSAtIEhvcml6b250YWwvYXppbXV0aGFsIGFuZ2xlIGluIHJhZGlhbnMuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7T2JqZWN0fSAtIEFuIG9iamVjdCB3aXRoIHRoZSBzaWduYXR1cmUge2g6IG51bWJlciwgdjogbnVtYmVyfSB3aGVyZVxyXG4gICAqIGggcmVwcmVzZW50cyBob3Jpem9udGFsIHJvdGF0aW9uIGluIGRlZ3JlZXMgYW5kIHYgcmVwcmVzZW50cyB2ZXJ0aWNhbCByb3RhdGlvblxyXG4gICAqIGluIGRlZ3JlZXMuXHJcbiAgICovXHJcbiAgc3RhdGljIF9zcGhlcmljYWxUb0JsZW5kVmFsdWUodGhldGEsIHBoaSkge1xyXG4gICAgY29uc3QgaCA9IE1hdGhVdGlscy50b0RlZ3JlZXMocGhpKTtcclxuXHJcbiAgICAvLyBPZmZzZXQgdGhlIHZlcnRpY2FsIGFuZ2xlIHNvIDAgaXMgcG9pbnRpbmcgZm9yd2FyZCBpbnN0ZWFkIG9mIHVwXHJcbiAgICBjb25zdCB2ID0gTWF0aFV0aWxzLnRvRGVncmVlcyh0aGV0YSkgLSA5MDtcclxuXHJcbiAgICAvLyBDb252ZXJ0IHZlcnRpY2FsIGFuZ2xlIHRvIC0xODAsIDE4MCByYW5nZVxyXG4gICAgcmV0dXJuIHsgaCwgdiB9XHJcbiAgfVxyXG5cclxuICBfb25MYXllckFkZGVkKHsgbmFtZSB9KSB7XHJcbiAgICB0aGlzLl9sb29rTGF5ZXJzID0gdGhpcy5fbG9va0xheWVycyB8fCB7fTtcclxuICAgIHRoaXMuX2JsaW5rTGF5ZXJzID0gdGhpcy5fYmxpbmtMYXllcnMgfHwge307XHJcblxyXG4gICAgc3VwZXIuX29uTGF5ZXJBZGRlZCh7IG5hbWUgfSk7XHJcblxyXG4gICAgLy8gVmFsaWRhdGUgdGhlIGxvb2sgYW5pbWF0aW9uXHJcbiAgICBpZiAodGhpcy5fbG9va0xheWVyc1tuYW1lXSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMuX3JlZ2lzdGVyTG9va0FuaW1hdGlvbihuYW1lLCB0aGlzLl9sb29rTGF5ZXJzW25hbWVdKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIF9vbkFuaW1hdGlvbkFkZGVkKHsgbGF5ZXJOYW1lLCBhbmltYXRpb25OYW1lIH0pIHtcclxuICAgIHRoaXMuX2xvb2tMYXllcnMgPSB0aGlzLl9sb29rTGF5ZXJzIHx8IHt9O1xyXG4gICAgdGhpcy5fYmxpbmtMYXllcnMgPSB0aGlzLl9ibGlua0xheWVycyB8fCB7fTtcclxuXHJcbiAgICBzdXBlci5fb25BbmltYXRpb25BZGRlZCh7IGxheWVyTmFtZSB9KTtcclxuXHJcbiAgICAvLyBWYWxpZGF0ZSB0aGUgbG9vayBhbmltYXRpb25cclxuICAgIGlmICh0aGlzLl9sb29rTGF5ZXJzW2xheWVyTmFtZV0gPT09IGFuaW1hdGlvbk5hbWUpIHtcclxuICAgICAgdGhpcy5fcmVnaXN0ZXJMb29rQW5pbWF0aW9uKGxheWVyTmFtZSwgYW5pbWF0aW9uTmFtZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFbnN1cmUgdGhhdCByZWdpc3RlcmVkIGxvb2sgYW5pbWF0aW9ucyBhcmUgQmxlbmQyZFN0YXRlcy5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGF5ZXJOYW1lIC0gTmFtZSBvZiB0aGUgbGF5ZXIgdGhhdCBjb250YWlucyB0aGUgbG9vayBhbmltYXRpb24uXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFuaW1hdGlvbk5hbWUgLSBOYW1lIG9mIHRoZSBhbmltYXRpb24uXHJcbiAgICovXHJcbiAgX3JlZ2lzdGVyTG9va0FuaW1hdGlvbihsYXllck5hbWUsIGFuaW1hdGlvbk5hbWUpIHtcclxuICAgIGlmICh0aGlzLl9tYW5hZ2VkTGF5ZXJzW2xheWVyTmFtZV0uYW5pbWF0aW9uc1thbmltYXRpb25OYW1lXS5pc0FjdGl2ZSkge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgQW5pbWF0aW9uVHlwZXNbdGhpcy5faG9zdC5BbmltYXRpb25GZWF0dXJlLmdldEFuaW1hdGlvblR5cGUoXHJcbiAgICAgICAgICBsYXllck5hbWUsXHJcbiAgICAgICAgICBhbmltYXRpb25OYW1lXHJcbiAgICAgICAgKV0gIT09IEFuaW1hdGlvblR5cGVzLmJsZW5kMmRcclxuICAgICAgKSB7XHJcbiAgICAgICAgLy8gV2FybiBhbmQgZGVhY3RpdmF0ZSBpZiB0aGUgcmVnaXN0ZXJlZCBzdGF0ZSBpcyBub3QgYmxlbmQyZFxyXG4gICAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICAgIGBDYW5ub3QgcmVnaXN0ZXIgUG9pbnQgb2YgSW50ZXJlc3QgbG9vayBhbmltYXRpb24gJHthbmltYXRpb25OYW1lfSBvbiBsYXllciAke2xheWVyTmFtZX0gZm9yIGhvc3QgJHt0aGlzLl9ob3N0LmlkfS4gTG9vayBhbmltYXRpb25zIG11c3QgYmUgb2YgdHlwZSAnYmxlbmQyZCcuYFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5fbWFuYWdlZExheWVyc1tsYXllck5hbWVdLmFuaW1hdGlvbnNbXHJcbiAgICAgICAgICBhbmltYXRpb25OYW1lXHJcbiAgICAgICAgXS5pc0FjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDaGVjayBpZiB0aGUgZ2l2ZW4gb2JqZWN0IGlzIG5vdCBvZiBhbiBlbmdpbmUtc3BlY2lmaWMgdHlwZS4gU2hvdWxkXHJcbiAgICogYmUgb3ZlcmxvYWRlZCBmb3IgZWFjaCByZW5kZXJpbmcgZW5naW5lIGltcGxlbWVudGF0aW9uLlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7YW55fSBvYmogLSBPYmplY3QgdG8gdmFsaWRhdGUuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuICAgKi9cclxuICBzdGF0aWMgX3ZhbGlkYXRlVHJhbnNmb3JtT2JqZWN0KG9iaikge1xyXG4gICAgcmV0dXJuIG9iaiBpbnN0YW5jZW9mIE9iamVjdDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENoZWNrIGlmIHRoZSBnaXZlbiBjb25maWd1cmF0aW9uIG9iamVjdCBoYXMgYWxyZWFkeSBiZWVuIHN0b3JlZCBhcyBhIHRyYWNraW5nXHJcbiAgICogY29uZmlnLiBJZiBpdCBoYXMsIHJldHVybiB0aGUgc3RvcmVkIGNvbmZpZ3VyYXRpb24uIE90aGVyd2lzZSwgc3RvcmUgYW5kXHJcbiAgICogcmV0dXJuIGl0LlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcgLSBPYmplY3QgY29udGFpbmluZyB0cmFja2VyLCByZWZlcmVuY2UgYW5kIGZvcndhcmRBeGlzXHJcbiAgICogcHJvcGVydGllcy5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtPYmplY3R9XHJcbiAgICovXHJcbiAgX2FkZFRyYWNraW5nQ29uZmlnKGNvbmZpZykge1xyXG4gICAgY29uc3QgdHJhY2tpbmdDb25maWcgPSB0aGlzLl90cmFja2luZ0NvbmZpZ3MuZmluZChjID0+XHJcbiAgICAgIGMucmVmZXJlbmNlID09PSBjb25maWcucmVmZXJlbmNlICYmIGMuZm9yd2FyZEF4aXMgPT09IGNvbmZpZy5mb3J3YXJkQXhpc1xyXG4gICAgKTtcclxuXHJcbiAgICBpZiAodHJhY2tpbmdDb25maWcpIHtcclxuICAgICAgcmV0dXJuIHRyYWNraW5nQ29uZmlnO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uZmlnLmFuZ2xlcyA9IHsgaDogMCwgdjogMCB9O1xyXG4gICAgICBjb25maWcucHJldkFuZ2xlcyA9IHsgaDogMCwgdjogMCB9O1xyXG4gICAgICB0aGlzLl90cmFja2luZ0NvbmZpZ3MucHVzaChjb25maWcpO1xyXG4gICAgICByZXR1cm4gY29uZmlnO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIHRoZSBkaXN0YW5jZSBiZXR3ZWVuIHRoZSBsb29rIHRyYWNrZXIgYW5kIHRoZSBsb29rIHRhcmdldC5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxyXG4gICAqL1xyXG4gIF9nZXRUYXJnZXREaXN0YW5jZSgpIHtcclxuICAgIC8vIEZpbmQgdGhlIHZlY3RvciBiZXR3ZWVuIHRoZSBnbG9iYWwgcG9zaXRpb25zIG9mIHRyYWNrZXIgYW5kIHRhcmdldFxyXG4gICAgY29uc3Qgc291cmNlUG9zaXRpb24gPSB0aGlzLmNvbnN0cnVjdG9yLl9nZXRXb3JsZFBvc2l0aW9uKHRoaXMuX2xvb2tUcmFja2VyKTtcclxuICAgIGNvbnN0IHRhcmdldFBvc2l0aW9uID0gdGhpcy5jb25zdHJ1Y3Rvci5fZ2V0V29ybGRQb3NpdGlvbih0aGlzLl90YXJnZXQpO1xyXG4gICAgY29uc3QgbG9va1ZlY3RvciA9IFtcclxuICAgICAgdGFyZ2V0UG9zaXRpb25bMF0gLSBzb3VyY2VQb3NpdGlvblswXSxcclxuICAgICAgdGFyZ2V0UG9zaXRpb25bMV0gLSBzb3VyY2VQb3NpdGlvblsxXSxcclxuICAgICAgdGFyZ2V0UG9zaXRpb25bMl0gLSBzb3VyY2VQb3NpdGlvblsyXVxyXG4gICAgXTtcclxuXHJcbiAgICByZXR1cm4gTWF0aFV0aWxzLmdldFZlY3Rvck1hZ25pdHVkZShsb29rVmVjdG9yKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlc2V0IGFsbCBzdG9yZWQgdHJhY2tpbmcgYW5nbGVzIHRvIDAuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIF9yZXNldExvb2tBbmdsZXMoKSB7XHJcbiAgICB0aGlzLl90cmFja2luZ0NvbmZpZ3MuZm9yRWFjaCgoeyBhbmdsZXMgfSkgPT4ge1xyXG4gICAgICBhbmdsZXMuaCA9IDA7XHJcbiAgICAgIGFuZ2xlcy52ID0gMDtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU3RvcmUgdGhlIGRpZmZlcmVuY2UgaW4gaG9yaXpvbnRhbCBhbmQgdmVydGljYWwgcm90YXRpb24gZm9yIHRoZSB0cmFja2VyJ3NcclxuICAgKiByZWZlcmVuY2Ugcm90YXRpb24gYW5kIHRoZSBkaXJlY3Rpb24gb2YgdGhlIHRhcmdldCBmcm9tIHRoZSB0cmFja2VyLlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBfc2V0TG9va0FuZ2xlcygpIHtcclxuICAgIC8vIEdldCB0aGUgY3VycmVudCBwb3NpdGlvbnMgb2YgdGhlIHRyYWNrZXIgYW5kIHRhcmdldCBvYmplY3RzXHJcbiAgICBjb25zdCB0YXJnZXRQb3MgPSB0aGlzLmNvbnN0cnVjdG9yLl9nZXRXb3JsZFBvc2l0aW9uKHRoaXMuX3RhcmdldCk7XHJcbiAgICBjb25zdCB0cmFja2VyUG9zID0gdGhpcy5jb25zdHJ1Y3Rvci5fZ2V0V29ybGRQb3NpdGlvbih0aGlzLl9sb29rVHJhY2tlcik7XHJcblxyXG4gICAgLy8gQ2hlY2sgaWYgdGhlIHRhcmdldCBoYXMgbW92ZWRcclxuICAgIHRoaXMuX2lzVGFyZ2V0TW92aW5nID0gTWF0aFV0aWxzLmdldFZlY3Rvck1hZ25pdHVkZShbXHJcbiAgICAgIHRhcmdldFBvc1swXSAtIHRoaXMuX3ByZXZUYXJnZXRQb3NbMF0sXHJcbiAgICAgIHRhcmdldFBvc1sxXSAtIHRoaXMuX3ByZXZUYXJnZXRQb3NbMV0sXHJcbiAgICAgIHRhcmdldFBvc1syXSAtIHRoaXMuX3ByZXZUYXJnZXRQb3NbMl1dXHJcbiAgICApID4gMDtcclxuICAgIE9iamVjdC5hc3NpZ24odGhpcy5fcHJldlRhcmdldFBvcywgdGFyZ2V0UG9zKTtcclxuXHJcblxyXG4gICAgLy8gQ2FsY3VsYXRlIHRoZSBob3Jpem9udGFsIGFuZCB2ZXJ0aWNhbCBhbmdsZXMgdG8gcm90YXRlIHRvIHRoZSB0YXJnZXRcclxuICAgIGNvbnN0IHRhcmdldFNwaGVyaWNhbCA9IE1hdGhVdGlscy5jYXJ0ZXNpYW5Ub1NwaGVyaWNhbChcclxuICAgICAgdGFyZ2V0UG9zWzBdIC0gdHJhY2tlclBvc1swXSxcclxuICAgICAgdGFyZ2V0UG9zWzFdIC0gdHJhY2tlclBvc1sxXSxcclxuICAgICAgdGFyZ2V0UG9zWzJdIC0gdHJhY2tlclBvc1syXVxyXG4gICAgKTtcclxuICAgIGNvbnN0IHRhcmdldEFuZ2xlcyA9IHRoaXMuY29uc3RydWN0b3IuX3NwaGVyaWNhbFRvQmxlbmRWYWx1ZShcclxuICAgICAgdGFyZ2V0U3BoZXJpY2FsWzFdLFxyXG4gICAgICB0YXJnZXRTcGhlcmljYWxbMl1cclxuICAgICk7XHJcblxyXG4gICAgLy8gQ2FsY3VsYXRlIGFuZ2xlcyByZWxhdGl2ZSB0byB0aGUgcmVmZXJlbmNlIG9iamVjdHNcclxuICAgIHRoaXMuX3RyYWNraW5nQ29uZmlncy5mb3JFYWNoKCh7XHJcbiAgICAgIHJlZmVyZW5jZSxcclxuICAgICAgZm9yd2FyZEF4aXMsXHJcbiAgICAgIGFuZ2xlc1xyXG4gICAgfSkgPT4ge1xyXG4gICAgICAvLyBDYWxjdWxhdGUgdGhlIGhvcml6b250YWwgYW5kIHZlcnRpY2FsIGFuZ2xlcyB0byByb3RhdGUgdG8gdGhlIGRpcmVjdGlvbiBvZiB0aGUgdHJhY2tlclxyXG4gICAgICBjb25zdCByZWZEaXJlY3Rpb24gPSB0aGlzLmNvbnN0cnVjdG9yLl9nZXRPYmplY3REaXJlY3Rpb24oXHJcbiAgICAgICAgcmVmZXJlbmNlLFxyXG4gICAgICAgIGZvcndhcmRBeGlzLFxyXG4gICAgICApO1xyXG4gICAgICBjb25zdCByZWZTcGhlcmljYWwgPSBNYXRoVXRpbHMuY2FydGVzaWFuVG9TcGhlcmljYWwoLi4ucmVmRGlyZWN0aW9uKTtcclxuICAgICAgY29uc3QgcmVmQW5nbGVzID0gdGhpcy5jb25zdHJ1Y3Rvci5fc3BoZXJpY2FsVG9CbGVuZFZhbHVlKFxyXG4gICAgICAgIHJlZlNwaGVyaWNhbFsxXSxcclxuICAgICAgICByZWZTcGhlcmljYWxbMl1cclxuICAgICAgKTtcclxuXHJcbiAgICAgIC8vIFN0b3JlIHRoZSBkaWZmZXJlbmNlXHJcbiAgICAgIGFuZ2xlcy5oID0gdGFyZ2V0QW5nbGVzLmggLSByZWZBbmdsZXMuaDtcclxuICAgICAgYW5nbGVzLnYgPSB0YXJnZXRBbmdsZXMudiAtIHJlZkFuZ2xlcy52O1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gdGhlIGhvcml6b250YWwgYW5kIHZlcnRpY2FsIGFuZ2xlcyBpdCB3b3VsZCByZXF1aXJlIHRvIHNpbXVsYXRlIGxvb2tpbmdcclxuICAgKiBhdCB0aGUgZ2l2ZW4gdHlwZSBvZiBmYWNlIHRhcmdldFxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB0YXJnZXRUeXBlIC0gSW50ZWdlciByZXByZXNlbnRpbmcgdGhlIEZhY2VUYXJnZXRUeXBlLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge09iamVjdH0tIEFuIG9iamVjdCB3aXRoIHNpZ25hdHVyZSB7cjogbnVtYmVyLCBoOiBudW1iZXIsIHY6IG51bWJlcn1cclxuICAgKiB3aGVyZSAncicgcmVwcmVzZW50cyByYWRpdXMsIGggcmVwcmVzZW50cyB0aGUgaG9yaXpvbnRhbC9hemltdXRoYWwgYW5nbGUgYW5kXHJcbiAgICogdiByZXByZXNlbnRzIHRoZSB2ZXJ0aWNhbC9wb2xhciBhbmdsZS5cclxuICAgKi9cclxuICBfZ2V0RmFjZVRhcmdldEFuZ2xlcyh0YXJnZXRUeXBlKSB7XHJcbiAgICAvLyBObyBvZmZzZXQgd2hlbiB0aGUgdGFyZ2V0IGlzIHRoZSBjZW50ZXIgb2YgdGhlIGV5ZXNcclxuICAgIGlmICh0YXJnZXRUeXBlID09PSAwKSB7XHJcbiAgICAgIHJldHVybiB7IGg6IDAsIHY6IDAgfTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBCdWlsZCBhIHZlY3RvciB0byB0aGUgZmFjZSB0YXJnZXQgdHlwZSB1c2luZyB0aGUgY3VycmVudCBkaXN0YW5jZSB0byB0aGUgdGFyZ2V0XHJcbiAgICBjb25zdCBkaXN0YW5jZSA9IHRoaXMuX2dldFRhcmdldERpc3RhbmNlKHRoaXMuX2xvb2tUcmFja2VyKTtcclxuICAgIGNvbnN0IGZhY2VWZWN0b3IgPSBbLi4uRmFjZVZlY3RvcnNbdGFyZ2V0VHlwZV1dO1xyXG4gICAgZmFjZVZlY3RvclsyXSA9IGRpc3RhbmNlO1xyXG4gICAgY29uc3Qgc3BoZXJpY2FsID0gTWF0aFV0aWxzLmNhcnRlc2lhblRvU3BoZXJpY2FsKC4uLmZhY2VWZWN0b3IpO1xyXG5cclxuICAgIC8vIE1ha2Ugc3VyZSB2YWx1ZXMgYXJlIGNsYW1wZWQgd2l0aGluIHRoZSByYW5nZSBvZiBtb3Rpb24gb2YgdGhlIGh1bWFuIGV5ZSwgaW4gY2FzZSB0aGUgdGFyZ2V0IGlzIHZlcnkgY2xvc2VcclxuICAgIGNvbnN0IGJsZW5kVmFsdWVzID0gdGhpcy5jb25zdHJ1Y3Rvci5fc3BoZXJpY2FsVG9CbGVuZFZhbHVlKHNwaGVyaWNhbFsxXSwgc3BoZXJpY2FsWzJdKTtcclxuICAgIGJsZW5kVmFsdWVzLmggPSBNYXRoVXRpbHMuY2xhbXAoYmxlbmRWYWx1ZXMuaCwgLTM1LCAzNSk7XHJcbiAgICBibGVuZFZhbHVlcy52ID0gTWF0aFV0aWxzLmNsYW1wKGJsZW5kVmFsdWVzLnYsIC0yNSwgMzApO1xyXG5cclxuICAgIHJldHVybiBibGVuZFZhbHVlcztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZWQgdGhlIHN0b3JlZCBzcGVlZCBhbmQgZHVyYXRpb24gdmFyaWFibGVzIGZvciBhIGxheWVyIGJhc2VkIG9uIHRoZVxyXG4gICAqIGNoYW5nZSBpbiBob3Jpem9udGFsIGFuZCB2ZXJ0aWNhbCBhbmdsZXMgb2YgdGhlIHRyYWNrZXIuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVyTmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRvIHN0b3JlIHZhbHVlcyBvbi5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gaCAtIENoYW5nZSBpbiBob3Jpem9udGFsIGFuZ2xlLCBpbiBkZWdyZWVzLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB2IC0gQ2hhbmdlIGluIHZlcnRpY2FsIGFuZ2xlLCBpbiBkZWdyZWVzLlxyXG4gICAqL1xyXG4gIF91cGRhdGVMYXllclNwZWVkKGxheWVyTmFtZSwgaCwgdikge1xyXG4gICAgY29uc3QgbGF5ZXIgPSB0aGlzLl9tYW5hZ2VkTGF5ZXJzW2xheWVyTmFtZV07XHJcblxyXG4gICAgLy8gRnJvbSBcIlJlYWxpc3RpYyBBdmF0YXIgYW5kIGhlYWQgQW5pbWF0aW9uIFVzaW5nIGEgTmV1cm9iaW9sb2dpY2FsIE1vZGVsIG9mIFZpc3VhbCBBdHRlbnRpb25cIiwgSXR0aSwgRGhhdmFsZSwgUGlnaGluXHJcbiAgICBsYXllci5tYXhIU3BlZWQgPSA0NzMgKiAoMSAtIE1hdGguZXhwKC1oIC8gNy44KSk7XHJcbiAgICBsYXllci5tYXhWU3BlZWQgPSA0NzMgKiAoMSAtIE1hdGguZXhwKC12IC8gNy44KSk7XHJcblxyXG4gICAgLy8gRnJvbSBcIkV5ZXMgQWxpdmVcIiwgTGVlLCBCYWRsZXJcclxuICAgIGNvbnN0IEQwID0gMC4wMjU7XHJcbiAgICBjb25zdCBkID0gMC4wMDIzNTtcclxuICAgIGxheWVyLmhEdXJhdGlvbiA9IEQwICsgZCAqIGg7XHJcbiAgICBsYXllci52RHVyYXRpb24gPSBEMCArIGQgKiB2O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0IHRoZSBtaWNyb1NhY2NhZGUgb2JqZWN0IHdpdGggbmV3IHJhbmRvbWl6ZWQgdmFsdWVzLlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllck5hbWUgLSBOYW1lIG9mIHRoZSBsYXllciB0aGF0IG93bnMgdGhlIHNhY2NhZGUgbW90aW9uLlxyXG4gICAqL1xyXG4gIF9zZXRNaWNyb1NhY2NhZGUobGF5ZXJOYW1lKSB7XHJcbiAgICBjb25zdCBsYXllciA9IHRoaXMuX21hbmFnZWRMYXllcnNbbGF5ZXJOYW1lXTtcclxuICAgIGNvbnN0IHsgbWljcm9TYWNjYWRlIH0gPSBsYXllcjtcclxuXHJcbiAgICBpZiAodGhpcy5fdGFyZ2V0KSB7XHJcbiAgICAgIC8vIE1pY3JvIG1vdmVtZW50cyBzaG91bGQgYmUgc21hbGxlciB3aGVuIGZvY3VzZWQgb24gYSB0YXJnZXRcclxuICAgICAgbWljcm9TYWNjYWRlLmggPSBVdGlscy5nZXRSYW5kb21GbG9hdCguMDEsIC4xNSk7XHJcbiAgICAgIG1pY3JvU2FjY2FkZS52ID0gVXRpbHMuZ2V0UmFuZG9tRmxvYXQoLjAxLCAuMTUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gTWljcm9zYWNjYWRlcy4gRW5jeWNsb3BlZGlhIG9mIE5ldXJvc2NpZW5jZS4gKDIwMDkpIFNwcmluZ2VyLCBCZXJsaW4sIEhlaWRlbGJlcmcuIGh0dHBzOi8vZG9pLm9yZy8xMC4xMDA3Lzk3OC0zLTU0MC0yOTY3OC0yXzM0OTJcclxuICAgICAgbWljcm9TYWNjYWRlLmggPSBVdGlscy5nZXRSYW5kb21GbG9hdCguMDEsIC4zKTtcclxuICAgICAgbWljcm9TYWNjYWRlLnYgPSBVdGlscy5nZXRSYW5kb21GbG9hdCguMDEsIC4zKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl91cGRhdGVMYXllclNwZWVkKGxheWVyTmFtZSwgbWljcm9TYWNjYWRlLmgsIG1pY3JvU2FjY2FkZS52KTtcclxuXHJcbiAgICAvLyBSZXN0YXJ0IHRoZSB0aW1lclxyXG4gICAgdGhpcy5faW5pdGlhbGl6ZU1pY3JvVGltZXIobGF5ZXJOYW1lLCAuLi5NaWNyb1NhY2NhZGVXYWl0UmFuZ2VzLmRlZmF1bHQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0IHRoZSBtYWNyb1NhY2NhZGUgb2JqZWN0IHdpdGggbmV3IHJhbmRvbWl6ZWQgdmFsdWVzLlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllck5hbWUgLSBOYW1lIG9mIHRoZSBsYXllciB0aGF0IG93bnMgdGhlIHNhY2NhZGUgbW90aW9uLlxyXG4gICAqL1xyXG4gIF9zZXRNYWNyb1NhY2NhZGUobGF5ZXJOYW1lKSB7XHJcbiAgICBjb25zdCBsYXllciA9IHRoaXMuX21hbmFnZWRMYXllcnNbbGF5ZXJOYW1lXTtcclxuICAgIGNvbnN0IHsgbWFjcm9TYWNjYWRlIH0gPSBsYXllcjtcclxuICAgIGxldCBtYWNyb1NhY2NhZGVXYWl0UmFuZ2U7XHJcblxyXG4gICAgLy8gSW5jcmVhc2UgcmFuZG9tIHZhbHVlIHJhbmdlIHdoZW4gbm90IGZvY3VzZWQgb24gYSB0YXJnZXRcclxuICAgIGlmICghdGhpcy5fdGFyZ2V0KSB7XHJcbiAgICAgIG1hY3JvU2FjY2FkZVdhaXRSYW5nZSA9IE1hY3JvU2FjY2FkZVdhaXRSYW5nZXMuZGVmYXVsdDtcclxuXHJcbiAgICAgIC8vIE5vcm1hbCBodW1hbiBob3Jpem9udGFsIGV5ZSByb3RhdGlvbiBsaW1pdCBpcyBhYm91dCAzNSBkZWdyZWVzXHJcbiAgICAgIGNvbnN0IGhMaW1pdCA9IFV0aWxzLmdldFJhbmRvbUZsb2F0KC4xNDMsIC4yODYpO1xyXG4gICAgICBjb25zdCBoRmFjdG9yID0gVXRpbHMuZ2V0UmFuZG9tRmxvYXQoLWhMaW1pdCwgaExpbWl0KTtcclxuICAgICAgbWFjcm9TYWNjYWRlLmggPSBoRmFjdG9yICogMzU7XHJcblxyXG4gICAgICAvLyBOb3JtYWwgaHVtYW4gdmVydGljYWwgZXllIHJvdGF0aW9uIGxpbWl0IGlzIGFib3V0IDI1IGRlZ3JlZXMgdXB3YXJkIGFuZCAzMCBkZWdyZWVzIGRvd253YXJkXHJcbiAgICAgIGNvbnN0IHZMaW1pdCA9IFV0aWxzLmdldFJhbmRvbUZsb2F0KC4wOTMsIC4xODYpO1xyXG4gICAgICBjb25zdCB2RmFjdG9yID0gVXRpbHMuZ2V0UmFuZG9tRmxvYXQoLXZMaW1pdCwgdkxpbWl0KTtcclxuICAgICAgbWFjcm9TYWNjYWRlLnYgPSB2RmFjdG9yID4gMCA/IHZGYWN0b3IgKiAyNSA6IHZGYWN0b3IgKiAzMDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBQaWNrIGEgbmV3IGZhY2UgdGFyZ2V0XHJcbiAgICBlbHNlIHtcclxuICAgICAgLy8gU29jaWFsIHRyaWFuZ2xlIC0gc2FjY2FkZSBiZXR3ZWVuIGV5ZXMgYW5kIG1vdXRoLCB3ZWlnaHRlZCB0byBsb29rIGF0IGV5ZXMgbW9yZSBvZnRlblxyXG4gICAgICBzd2l0Y2ggKGxheWVyLnNhY2NhZGVUYXJnZXQpIHtcclxuICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICBtYWNyb1NhY2NhZGVXYWl0UmFuZ2UgPSBNYWNyb1NhY2NhZGVXYWl0UmFuZ2VzLmV5ZVRhcmdldDtcclxuICAgICAgICAgIGxheWVyLnNhY2NhZGVUYXJnZXQgPSBNYXRoLnJhbmRvbSgpIDwgMC43NSA/IEZhY2VUYXJnZXRUeXBlcy5FeWVSaWdodFxyXG4gICAgICAgICAgICA6IEZhY2VUYXJnZXRUeXBlcy5Nb3V0aDtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgIG1hY3JvU2FjY2FkZVdhaXRSYW5nZSA9IE1hY3JvU2FjY2FkZVdhaXRSYW5nZXMuZXllVGFyZ2V0O1xyXG4gICAgICAgICAgbGF5ZXIuc2FjY2FkZVRhcmdldCA9IE1hdGgucmFuZG9tKCkgPCAwLjc1ID8gRmFjZVRhcmdldFR5cGVzLkV5ZUxlZnRcclxuICAgICAgICAgICAgOiBGYWNlVGFyZ2V0VHlwZXMuTW91dGg7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIDM6XHJcbiAgICAgICAgICBtYWNyb1NhY2NhZGVXYWl0UmFuZ2UgPSBNYWNyb1NhY2NhZGVXYWl0UmFuZ2VzLm1vdXRoVGFyZ2V0O1xyXG4gICAgICAgICAgbGF5ZXIuc2FjY2FkZVRhcmdldCA9IE1hdGgucmFuZG9tKCkgPCAwLjUgPyBGYWNlVGFyZ2V0VHlwZXMuRXllTGVmdFxyXG4gICAgICAgICAgICA6IEZhY2VUYXJnZXRUeXBlcy5FeWVSaWdodDtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgMDpcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgbWFjcm9TYWNjYWRlV2FpdFJhbmdlID0gTWFjcm9TYWNjYWRlV2FpdFJhbmdlcy5leWVUYXJnZXQ7XHJcbiAgICAgICAgICBsYXllci5zYWNjYWRlVGFyZ2V0ID0gTWF0aC5yYW5kb20oKSA8IDAuNSA/IEZhY2VUYXJnZXRUeXBlcy5FeWVMZWZ0XHJcbiAgICAgICAgICAgIDogRmFjZVRhcmdldFR5cGVzLkV5ZVJpZ2h0O1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IHsgaCwgdiB9ID0gdGhpcy5fZ2V0RmFjZVRhcmdldEFuZ2xlcyhsYXllci5zYWNjYWRlVGFyZ2V0KTtcclxuICAgICAgbWFjcm9TYWNjYWRlLmggPSBoO1xyXG4gICAgICBtYWNyb1NhY2NhZGUudiA9IHY7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fdXBkYXRlTGF5ZXJTcGVlZChsYXllck5hbWUsIG1hY3JvU2FjY2FkZS5oLCBtYWNyb1NhY2NhZGUudik7XHJcblxyXG4gICAgLy8gUmVzdGFydCB0aGUgdGltZXJzXHJcbiAgICB0aGlzLl9pbml0aWFsaXplTWljcm9UaW1lcihsYXllck5hbWUsIC4uLk1pY3JvU2FjY2FkZVdhaXRSYW5nZXMucG9zdE1hY3JvKTtcclxuICAgIHRoaXMuX2luaXRpYWxpemVNYWNyb1RpbWVyKGxheWVyTmFtZSwgLi4ubWFjcm9TYWNjYWRlV2FpdFJhbmdlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFN0YXJ0IGEgbmV3IHdhaXQgdGltZXIgdGhhdCB3aWxsIHNldCBhIG5ldyBtaWNybyBzYWNjYWRlIG1vdmVtZW50IHdoZW4gaXRcclxuICAgKiByZXNvbHZlcy5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGF5ZXJOYW1lIC0gTmFtZSBvZiB0aGUgbGF5ZXIgdGhhdCBvd25zIHRoZSBzYWNjYWRlIG1vdGlvbi5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gbWluV2FpdFRpbWUgLSBNaW5pbXVtIG51bWJlciBvZiBzZWNvbmRzIGJlZm9yZSBhIG5ldyBzYWNjYWRlXHJcbiAgICogd2lsbCBiZSB0cmlnZ2VyZWQuXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IG1heFdhaXRUaW1lIC0gTWF4aW11bSBudW1iZXIgb2Ygc2Vjb25kcyBiZWZvcmUgYSBuZXcgc2FjY2FkZVxyXG4gICAqIHdpbGwgYmUgdHJpZ2dlcmVkLlxyXG4gICAqL1xyXG4gIF9pbml0aWFsaXplTWljcm9UaW1lcihsYXllck5hbWUsIG1pbldhaXRUaW1lLCBtYXhXYWl0VGltZSkge1xyXG4gICAgY29uc3QgbGF5ZXIgPSB0aGlzLl9tYW5hZ2VkTGF5ZXJzW2xheWVyTmFtZV07XHJcbiAgICBjb25zdCB3YWl0VGltZSA9IFV0aWxzLmdldFJhbmRvbUZsb2F0KG1pbldhaXRUaW1lLCBtYXhXYWl0VGltZSk7XHJcblxyXG4gICAgaWYgKGxheWVyLm1pY3JvU2FjY2FkZVRpbWVyKSB7XHJcbiAgICAgIGxheWVyLm1pY3JvU2FjY2FkZVRpbWVyLmNhbmNlbCgpO1xyXG4gICAgfVxyXG4gICAgbGF5ZXIubWljcm9TYWNjYWRlVGltZXIgPSBVdGlscy53YWl0KHdhaXRUaW1lLCB7XHJcbiAgICAgIG9uRmluaXNoOiAoKSA9PiB7IHRoaXMuX3NldE1pY3JvU2FjY2FkZShsYXllck5hbWUpIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU3RhcnQgYSBuZXcgd2FpdCB0aW1lciB0aGF0IHdpbGwgc2V0IGEgbmV3IG1hY3JvIHNhY2NhZGUgbW92ZW1lbnQgd2hlbiBpdFxyXG4gICAqIHJlc29sdmVzLlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllck5hbWUgLSBOYW1lIG9mIHRoZSBsYXllciB0aGF0IG93bnMgdGhlIHNhY2NhZGUgbW90aW9uLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBtaW5XYWl0VGltZSAtIE1pbmltdW0gbnVtYmVyIG9mIHNlY29uZHMgYmVmb3JlIGEgbmV3IHNhY2NhZGVcclxuICAgKiB3aWxsIGJlIHRyaWdnZXJlZC5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gbWF4V2FpdFRpbWUgLSBNYXhpbXVtIG51bWJlciBvZiBzZWNvbmRzIGJlZm9yZSBhIG5ldyBzYWNjYWRlXHJcbiAgICogd2lsbCBiZSB0cmlnZ2VyZWQuXHJcbiAgICovXHJcbiAgX2luaXRpYWxpemVNYWNyb1RpbWVyKGxheWVyTmFtZSwgbWluV2FpdFRpbWUsIG1heFdhaXRUaW1lKSB7XHJcbiAgICBjb25zdCBsYXllciA9IHRoaXMuX21hbmFnZWRMYXllcnNbbGF5ZXJOYW1lXTtcclxuICAgIGNvbnN0IHdhaXRUaW1lID0gVXRpbHMuZ2V0UmFuZG9tRmxvYXQobWluV2FpdFRpbWUsIG1heFdhaXRUaW1lKTtcclxuXHJcbiAgICBpZiAobGF5ZXIubWFjcm9TYWNjYWRlVGltZXIpIHtcclxuICAgICAgbGF5ZXIubWFjcm9TYWNjYWRlVGltZXIuY2FuY2VsKCk7XHJcbiAgICB9XHJcbiAgICBsYXllci5tYWNyb1NhY2NhZGVUaW1lciA9IFV0aWxzLndhaXQod2FpdFRpbWUsIHtcclxuICAgICAgb25GaW5pc2g6ICgpID0+IHsgdGhpcy5fc2V0TWFjcm9TYWNjYWRlKGxheWVyTmFtZSkgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXRzIGEgbmV3IHRhcmdldCB0byBsb29rIGF0LlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtPYmplY3R8bnVsbH0gdGFyZ2V0IC0gVGhlIG5ldyB0YXJnZXQgdG8gbG9vayBhdC5cclxuICAgKi9cclxuICBzZXRUYXJnZXQodGFyZ2V0KSB7XHJcbiAgICB0aGlzLnRhcmdldCA9IHRhcmdldDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEZpbmRzIGFuIG9iamVjdCBnaXZlbiBpdHMgbmFtZSBhbmQgc2V0cyBpdCBhcyB0aGUgbmV3IHRhcmdldCB0byBsb29rIGF0LlxyXG4gICAqIFNob3VsZCBiZSBvdmVybG9hZGVkIGZvciBlYWNoIHJlbmRlcmluZyBlbmdpbmUgaW1wbGVtZW50YXRpb24uXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFyZ2V0IC0gTmFtZSB0byBzZWFyY2ggZm9yLlxyXG4gICAqL1xyXG4gIHNldFRhcmdldEJ5TmFtZShuYW1lKSB7XHJcbiAgICBpZiAoIW5hbWUpIHtcclxuICAgICAgdGhpcy5fdGFyZ2V0ID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMuX3NjZW5lKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IHNldCBQb2ludE9mSW50ZXJlc3RGZWF0dXJlIHRhcmdldCB1c2luZyBuYW1lICR7bmFtZX0gb24gaG9zdCAke3RoaXMuX2hvc3QuaWR9LiBTY2VuZSBtdXN0IGJlIGRlZmluZWQuYCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGaW5kcyBhbiBvYmplY3QgZ2l2ZW4gaXRzIGlkIGFuZCBzZXRzIGl0IGFzIHRoZSBuZXcgdGFyZ2V0IHRvIGxvb2sgYXQuXHJcbiAgICogU2hvdWxkIGJlIG92ZXJsb2FkZWQgZm9yIGVhY2ggcmVuZGVyaW5nIGVuZ2luZSBpbXBsZW1lbnRhdGlvbi5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gdGFyZ2V0IC0gSWQgdG8gc2VhcmNoIGZvci5cclxuICAgKi9cclxuICBzZXRUYXJnZXRCeUlkKGlkKSB7XHJcbiAgICBpZiAoIWlkKSB7XHJcbiAgICAgIHRoaXMuX3RhcmdldCA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLl9zY2VuZSkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBzZXQgUG9pbnRPZkludGVyZXN0RmVhdHVyZSB0YXJnZXQgdXNpbmcgaWQgJHtpZH0gb24gaG9zdCAke3RoaXMuX2hvc3QuaWR9LiBTY2VuZSBtdXN0IGJlIGRlZmluZWQuYCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTdGFydCBrZWVwaW5nIHRyYWNrIG9mIGFuIGFuaW1hdGlvbiBsYXllciB0aGF0IG93bnMgYSBibGVuZDJkIGFuaW1hdGlvbiB3aXRoXHJcbiAgICogYmxlbmRXZWlnaHRzIGNvcnJlc3BvbmRpbmcgdG8gaG9yaXpvbnRhbCBhbmQgdmVydGljYWwgbG9vayBhbmdsZXMuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGF5ZXJOYW1lIC0gTmFtZSBvZiB0aGUgbGF5ZXIgdG8ga2VlcCB0cmFjayBvZi5cclxuICAgKiBAcGFyYW0ge09iamVjdD19IG9wdGlvbnMgLSBPcHRpb25zIGZvciB0aGUgbGF5ZXIuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmFuaW1hdGlvbiA9ICdsb29rJ10gLSBOYW1lIG9mIHRoZSBhbmltYXRpb24gb24gdGhlXHJcbiAgICogbGF5ZXIgd2hvc2UgYmxlbmRXZWlnaHRzIHdpbGwgYmUgZHJpdmVuIGJhc2VkIG9uIHRoZSBhbmdsZSBiZXR3ZWVuIHRoZSBsb29rVHJhY2tlclxyXG4gICAqIGFuZCB0aGUgbG9va1RhcmdldC4gVGhpcyBhbmltYXRpb24gbXVzdCBiZSBvZiB0eXBlIGJsZW5kMmQuXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLm1heFNwZWVkID0gMjVdIC0gVGhlIG1heGltdW0gc3BlZWQgYXQgd2hpY2ggdGhlIGJsZW5kMmRcclxuICAgKiBibGVuZFdlaWdodHMgY2FuIGJlIG1hbmlwdWxhdGVkLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5mb3J3YXJkQXhpcyA9ICdQb3NpdGl2ZVonXSAtIEF4aXMgcG9pbnRpbmcgZnJvbSB0aGVcclxuICAgKiBmcm9udCBvZiB0aGUgbG9va1JlZmVyZW5jZSBvYmplY3QuIFZhbGlkIG9wdGlvbnMgYXJlICdQb3NpdGl2ZVgnLCAnTmVnYXRpdmVYJyxcclxuICAgKiAnUG9zaXRpdmVZJywgJ05lZ2F0aXZlWScsICdQb3NpdGl2ZVonLCAnTmVnYXRpdmVaJy5cclxuICAgKiBAcGFyYW0ge09iamVjdD19IG9wdGlvbnMubG9va1JlZmVyZW5jZSAtIDNEIHRyYW5zZm9ybWF0aW9uIG5vZGUgdGhhdCB0aGUgbG9va1RyYWNrZXJcclxuICAgKiByb3RhdGlvbiBsaW1pdHMgc2hvdWxkIGJlIGNhbGN1bGF0ZWQgcmVsYXRpdmUgdG8uIERlZmF1bHRzIHRvIHRoZSBob3N0IG93bmVyLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5oYXNTYWNjYWRlID0gZmFsc2VdIC0gV2hldGhlciBvciBub3QgdG8gaW5jbHVkZVxyXG4gICAqIHNhY2NhZGljIG1vdGlvbiBvbnRvIHRoZSBibGVuZFdlaWdodCBhbmltYXRpb24uIFRoaXMgc2hvdWxkIG9ubHkgYmUgc2V0IHRvXHJcbiAgICogdHJ1ZSBmb3IgYmxlbmQyZCBhbmltYXRpb25zIHJlcHJlc2VudGluZyBleWUgYW5pbWF0aW9uLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyPX0gW29wdGlvbnMuYmxlbmRUaW1lPVtQb2ludE9mSW50ZXJlc3RGZWF0dXJlLkRFRkFVTFRfTEFZRVJfT1BUSU9OUy5ibGVuZFRpbWVde0BsaW5rIFBvaW50T2ZJbnRlcmVzdEZlYXR1cmUjREVGQVVMVF9MQVlFUl9PUFRJT05TI2JsZW5kVGltZX1dIC1cclxuICAgKiBEZWZhdWx0IGFtb3VudCBvZiB0aW1lIHRvIHVzZSB3aGVuIG1hbmlwdWxhdGluZyBsYXllciB3ZWlnaHQuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9wdGlvbnMuZWFzaW5nRm4gLSBEZWZhdWx0IGVhc2luZyBmdW5jdGlvbiB0byB1c2Ugd2hlblxyXG4gICAqIG1hbmlwdWxhdGluZyBsYXllciB3ZWlnaHQuXHJcbiAgICovXHJcbiAgcmVnaXN0ZXJMb29rTGF5ZXIoXHJcbiAgICBsYXllck5hbWUsXHJcbiAgICB7XHJcbiAgICAgIGFuaW1hdGlvbiA9ICdsb29rJyxcclxuICAgICAgbWF4U3BlZWQgPSAyNSxcclxuICAgICAgcmVmZXJlbmNlLFxyXG4gICAgICBmb3J3YXJkQXhpcyA9ICdQb3NpdGl2ZVonLFxyXG4gICAgICBoYXNTYWNjYWRlID0gZmFsc2UsXHJcbiAgICAgIGJsZW5kVGltZSA9IFBvaW50T2ZJbnRlcmVzdEZlYXR1cmUuREVGQVVMVF9MQVlFUl9PUFRJT05TLmJsZW5kVGltZSxcclxuICAgICAgZWFzaW5nRm5cclxuICAgIH0gPSB7fVxyXG4gICkge1xyXG4gICAgLy8gVmFsaWRhdGUgcmVmZXJlbmNlIG9iamVjdFxyXG4gICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlIHx8IHRoaXMuX2hvc3Qub3duZXI7XHJcblxyXG4gICAgaWYgKCF0aGlzLmNvbnN0cnVjdG9yLl92YWxpZGF0ZVRyYW5zZm9ybU9iamVjdChyZWZlcmVuY2UpKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGluaXRpYWxpemUgcmVnaXN0ZXIgbG9vayBsYXllciAke2xheWVyTmFtZX0gZm9yIFBvaW50T2ZJbnRlcmVzdEZlYXR1cmUgb24gaG9zdCAke3RoaXMuX2hvc3QuaWR9LiBSZWZlcmVuY2UgbXVzdCBiZSBkZWZpbmVkIGFzIGEgdmFsaWQgdHJhbnNmb3JtYXRpb24gb2JqZWN0LmApO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEZpbmQgdmVjdG9yIGFzc29jaWF0ZWQgd2l0aCBheGlzIHN0cmluZ1xyXG4gICAgZm9yd2FyZEF4aXMgPSBBeGlzTWFwW2ZvcndhcmRBeGlzXSAhPT0gdW5kZWZpbmVkXHJcbiAgICAgID8gQXhpc01hcFtmb3J3YXJkQXhpc11cclxuICAgICAgOiBBeGlzTWFwLlBvc2l0aXZlWjtcclxuXHJcbiAgICAvLyBTdG9yZSB0cmFja2luZyBjb25maWd1cmF0aW9uXHJcbiAgICBjb25zdCB0cmFja2luZ0NvbmZpZyA9IHRoaXMuX2FkZFRyYWNraW5nQ29uZmlnKHtcclxuICAgICAgcmVmZXJlbmNlLFxyXG4gICAgICBmb3J3YXJkQXhpc1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gUmVnaXN0ZXIgdGhlIGxheWVyIGFuZCBhbmltYXRpb25cclxuICAgIHRoaXMucmVnaXN0ZXJMYXllcihsYXllck5hbWUsIHtcclxuICAgICAgdHJhY2tpbmdDb25maWcsXHJcbiAgICAgIG1heFNwZWVkLFxyXG4gICAgICBtYXhIU3BlZWQ6IHVuZGVmaW5lZCxcclxuICAgICAgbWF4VlNwZWVkOiB1bmRlZmluZWQsXHJcbiAgICAgIGhEdXJhdGlvbjogdW5kZWZpbmVkLFxyXG4gICAgICB2RHVyYXRpb246IHVuZGVmaW5lZCxcclxuICAgICAgaFZlbG9jaXR5OiBbMCwgMF0sXHJcbiAgICAgIHZWZWxvY2l0eTogWzAsIDBdLFxyXG4gICAgICBoYXNTYWNjYWRlLFxyXG4gICAgICBibGVuZFRpbWUsXHJcbiAgICAgIGVhc2luZ0ZuLFxyXG4gICAgICBtaWNyb1NhY2NhZGU6IHsgaDogMCwgdjogMCB9LFxyXG4gICAgICBtYWNyb1NhY2NhZGU6IHsgaDogMCwgdjogMCB9LFxyXG4gICAgICBzYWNjYWRlVGFyZ2V0OiBGYWNlVGFyZ2V0VHlwZXMuRXllQ2VudGVyLFxyXG4gICAgICBhbmltYXRpb25zOiB7IFthbmltYXRpb25dOiB7fSB9LFxyXG4gICAgfSk7XHJcbiAgICB0aGlzLl9sb29rTGF5ZXJzW2xheWVyTmFtZV0gPSBhbmltYXRpb247XHJcblxyXG4gICAgLy8gVmFsaWRhdGUgdGhlIGxvb2sgYW5pbWF0aW9uXHJcbiAgICB0aGlzLl9yZWdpc3Rlckxvb2tBbmltYXRpb24obGF5ZXJOYW1lLCBhbmltYXRpb24pO1xyXG5cclxuICAgIC8vIEluaXRpYWxpemUgc2FjY2FkZSB0aW1lcnNcclxuICAgIGlmIChoYXNTYWNjYWRlKSB7XHJcbiAgICAgIGNvbnN0IG1hY3JvU2FjY2FkZVdhaXRSYW5nZSA9IHRoaXMuX3RhcmdldFxyXG4gICAgICAgID8gTWFjcm9TYWNjYWRlV2FpdFJhbmdlcy5leWVUYXJnZXRcclxuICAgICAgICA6IE1hY3JvU2FjY2FkZVdhaXRSYW5nZXMuZGVmYXVsdDtcclxuICAgICAgdGhpcy5faW5pdGlhbGl6ZU1pY3JvVGltZXIobGF5ZXJOYW1lLCAuLi5NaWNyb1NhY2NhZGVXYWl0UmFuZ2VzLmRlZmF1bHQpO1xyXG4gICAgICB0aGlzLl9pbml0aWFsaXplTWFjcm9UaW1lcihsYXllck5hbWUsIC4uLm1hY3JvU2FjY2FkZVdhaXRSYW5nZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTdGFydCBrZWVwaW5nIHRyYWNrIG9mIGFuIGFuaW1hdGlvbiBsYXllciB0aGF0IG93bnMgYSBibGluayBhbmltYXRpb24uIEJsaW5rXHJcbiAgICogYW5pbWF0aW9ucyBjYW4gYmUgb2YgYW55IHR5cGUsIGJ1dCBpZiBpdCBpcyBvZiB0eXBlIHJhbmRvbUFuaW1hdGlvbiB0aGVuIGFcclxuICAgKiBpdCB3aWxsIGJlIHJhbmRvbWl6ZWQgZWFjaCB0aW1lIGEgYmxpbmsgaXMgY2FsbGVkLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVyTmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRvIGtlZXAgdHJhY2sgb2YuXHJcbiAgICogQHBhcmFtIHtPYmplY3Q9fSBvcHRpb25zIC0gT3B0aW9ucyBmb3IgdGhlIGxheWVyLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5hbmltYXRpb24gPSAnYmxpbmsnXSAtIE5hbWUgb2YgdGhlIGJsaW5rIGFuaW1hdGlvblxyXG4gICAqIG9uIHRoZSBsYXllci5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMuYmxlbmRUaW1lPVtQb2ludE9mSW50ZXJlc3RGZWF0dXJlLkRFRkFVTFRfTEFZRVJfT1BUSU9OUy5ibGVuZFRpbWVde0BsaW5rIFBvaW50T2ZJbnRlcmVzdEZlYXR1cmUjREVGQVVMVF9MQVlFUl9PUFRJT05TI2JsZW5kVGltZX1dIC1cclxuICAgKiBEZWZhdWx0IGFtb3VudCBvZiB0aW1lIHRvIHVzZSB3aGVuIG1hbmlwdWxhdGluZyB0aGUgbGF5ZXIncyB3ZWlnaHQuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9wdGlvbnMuZWFzaW5nRm4gLSBEZWZhdWx0IGVhc2luZyBmdW5jdGlvbiB0byB1c2Ugd2hlblxyXG4gICAqIG1hbmlwdWxhdGluZyB0aGUgbGF5ZXIncyB3ZWlnaHQuXHJcbiAgICovXHJcbiAgcmVnaXN0ZXJCbGlua0xheWVyKFxyXG4gICAgbGF5ZXJOYW1lLFxyXG4gICAge1xyXG4gICAgICBhbmltYXRpb24gPSAnYmxpbmsnLFxyXG4gICAgICBibGVuZFRpbWUgPSBQb2ludE9mSW50ZXJlc3RGZWF0dXJlLkRFRkFVTFRfTEFZRVJfT1BUSU9OUy5ibGVuZFRpbWUsXHJcbiAgICAgIGVhc2luZ0ZuXHJcbiAgICB9ID0ge31cclxuICApIHtcclxuICAgIC8vIFJlZ2lzdGVyIHRoZSBsYXllciBhbmQgYW5pbWF0aW9uXHJcbiAgICB0aGlzLnJlZ2lzdGVyTGF5ZXIobGF5ZXJOYW1lLCB7XHJcbiAgICAgIGJsZW5kVGltZSxcclxuICAgICAgZWFzaW5nRm4sXHJcbiAgICAgIGFuaW1hdGlvbnM6IHsgW2FuaW1hdGlvbl06IHt9IH0sXHJcbiAgICB9KTtcclxuICAgIHRoaXMuX2JsaW5rTGF5ZXJzW2xheWVyTmFtZV0gPSBhbmltYXRpb247XHJcbiAgfVxyXG5cclxuICB1cGRhdGUoZGVsdGFUaW1lKSB7XHJcbiAgICBzdXBlci51cGRhdGUoZGVsdGFUaW1lKTtcclxuXHJcbiAgICAvLyBVcGRhdGUgdGhlIGxvb2sgYW5nbGVzXHJcbiAgICBpZiAodGhpcy5fdGFyZ2V0KSB7XHJcbiAgICAgIHRoaXMuX3NldExvb2tBbmdsZXMoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX3Jlc2V0TG9va0FuZ2xlcygpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGRlbHRhU2Vjb25kcyA9IE1hdGgubWluKGRlbHRhVGltZSwgTWF4RGVsdGEpIC8gMTAwMDtcclxuICAgIGxldCB0cmlnZ2VyQmxpbmsgPSBmYWxzZTtcclxuXHJcbiAgICAvLyBTZXQgbG9vayBibGVuZCB2YWx1ZXNcclxuICAgIE9iamVjdC5lbnRyaWVzKHRoaXMuX2xvb2tMYXllcnMpLmZvckVhY2goKFtsYXllck5hbWUsIGFuaW1OYW1lXSkgPT4ge1xyXG4gICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5fbWFuYWdlZExheWVyc1tsYXllck5hbWVdO1xyXG5cclxuICAgICAgLy8gSW5jcmVtZW50IHRoZSBzYWNjYWRlIHRpbWVyc1xyXG4gICAgICBpZiAob3B0aW9ucy5pc0FjdGl2ZSAmJiBvcHRpb25zLmhhc1NhY2NhZGUpIHtcclxuICAgICAgICBvcHRpb25zLm1pY3JvU2FjY2FkZVRpbWVyLmV4ZWN1dGUoZGVsdGFUaW1lKTtcclxuICAgICAgICBvcHRpb25zLm1hY3JvU2FjY2FkZVRpbWVyLmV4ZWN1dGUoZGVsdGFUaW1lKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gU2V0IHRoZSBibGVuZCB2YWx1ZXNcclxuICAgICAgaWYgKG9wdGlvbnMuYW5pbWF0aW9uc1thbmltTmFtZV0uaXNBY3RpdmUpIHtcclxuICAgICAgICBjb25zdCBjdXJyZW50SCA9IHRoaXMuX2hvc3QuQW5pbWF0aW9uRmVhdHVyZS5nZXRBbmltYXRpb25CbGVuZFdlaWdodChcclxuICAgICAgICAgIGxheWVyTmFtZSwgYW5pbU5hbWUsICdYJ1xyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3QgY3VycmVudFYgPSB0aGlzLl9ob3N0LkFuaW1hdGlvbkZlYXR1cmUuZ2V0QW5pbWF0aW9uQmxlbmRXZWlnaHQoXHJcbiAgICAgICAgICBsYXllck5hbWUsIGFuaW1OYW1lLCAnWSdcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBsZXQgdGFyZ2V0SCA9IG9wdGlvbnMudHJhY2tpbmdDb25maWcuYW5nbGVzLmg7XHJcbiAgICAgICAgbGV0IHRhcmdldFYgPSBvcHRpb25zLnRyYWNraW5nQ29uZmlnLmFuZ2xlcy52O1xyXG5cclxuICAgICAgICAvLyBDaGVjayBpZiB0aGUgbG9vayBhbmdsZSBoYXMgY2hhbmdlZCBlbm91Z2ggdG8gdHJpZ2dlciBhIGJsaW5rXHJcbiAgICAgICAgaWYgKHRoaXMuX2lzVGFyZ2V0TW92aW5nICYmICF0cmlnZ2VyQmxpbmspIHtcclxuICAgICAgICAgIGNvbnN0IHByZXZUYXJnZXRIID0gb3B0aW9ucy50cmFja2luZ0NvbmZpZy5wcmV2QW5nbGVzLmg7XHJcbiAgICAgICAgICBjb25zdCBwcmV2VGFyZ2V0ViA9IG9wdGlvbnMudHJhY2tpbmdDb25maWcucHJldkFuZ2xlcy52O1xyXG4gICAgICAgICAgY29uc3QgY2hhbmdlQW1vdW50ID0gTWF0aFV0aWxzLnRvRGVncmVlcyhcclxuICAgICAgICAgICAgTWF0aFV0aWxzLmdldEFuZ2xlQmV0d2VlbihcclxuICAgICAgICAgICAgICBbcHJldlRhcmdldEgsIHByZXZUYXJnZXRWXSxcclxuICAgICAgICAgICAgICBbdGFyZ2V0SCwgdGFyZ2V0Vl1cclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICBpZiAoY2hhbmdlQW1vdW50ID49IEJsaW5rVGhyZXNob2xkKSB7XHJcbiAgICAgICAgICAgIHRyaWdnZXJCbGluayA9IHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBvcHRpb25zLnRyYWNraW5nQ29uZmlnLnByZXZBbmdsZXMuaCA9IHRhcmdldEg7XHJcbiAgICAgICAgb3B0aW9ucy50cmFja2luZ0NvbmZpZy5wcmV2QW5nbGVzLnYgPSB0YXJnZXRWO1xyXG5cclxuICAgICAgICAvLyBBZGQgaW4gdGhlIHNhY2NhZGUgbW92ZW1lbnRcclxuICAgICAgICBpZiAob3B0aW9ucy5oYXNTYWNjYWRlKSB7XHJcbiAgICAgICAgICBNYXRoVXRpbHMuZGFtcFZhbHVlKFxyXG4gICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICBvcHRpb25zLm1hY3JvU2FjY2FkZS5oICsgb3B0aW9ucy5tYWNyb1NhY2NhZGUuaCxcclxuICAgICAgICAgICAgb3B0aW9ucy5oVmVsb2NpdHksXHJcbiAgICAgICAgICAgIG9wdGlvbnMuaER1cmF0aW9uLFxyXG4gICAgICAgICAgICBvcHRpb25zLm1heEhTcGVlZFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHRhcmdldEggKz0gb3B0aW9ucy5oVmVsb2NpdHlbMF07XHJcbiAgICAgICAgICBNYXRoVXRpbHMuZGFtcFZhbHVlKFxyXG4gICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICBvcHRpb25zLm1hY3JvU2FjY2FkZS52ICsgb3B0aW9ucy5tYWNyb1NhY2NhZGUudixcclxuICAgICAgICAgICAgb3B0aW9ucy52VmVsb2NpdHksXHJcbiAgICAgICAgICAgIG9wdGlvbnMudkR1cmF0aW9uLFxyXG4gICAgICAgICAgICBvcHRpb25zLm1heFZTcGVlZFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHRhcmdldFYgKz0gb3B0aW9ucy52VmVsb2NpdHlbMF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBDbGFtcCB0byBtYXggc3BlZWRcclxuICAgICAgICBjb25zdCBmYWN0b3IgPSBNYXRoVXRpbHMuY2xhbXAoZGVsdGFTZWNvbmRzICogb3B0aW9ucy5tYXhTcGVlZCwgMCwgMSk7XHJcbiAgICAgICAgdGFyZ2V0SCA9IE1hdGhVdGlscy5sZXJwKGN1cnJlbnRILCB0YXJnZXRILCBmYWN0b3IpO1xyXG4gICAgICAgIHRhcmdldFYgPSBNYXRoVXRpbHMubGVycChjdXJyZW50ViwgdGFyZ2V0ViwgZmFjdG9yKTtcclxuXHJcbiAgICAgICAgLy8gVXBkYXRlIHRoZSBibGVuZCB2YWx1ZXNcclxuICAgICAgICB0aGlzLl9ob3N0LkFuaW1hdGlvbkZlYXR1cmUuc2V0QW5pbWF0aW9uQmxlbmRXZWlnaHQoXHJcbiAgICAgICAgICBsYXllck5hbWUsXHJcbiAgICAgICAgICBhbmltTmFtZSxcclxuICAgICAgICAgICdYJyxcclxuICAgICAgICAgIHRhcmdldEhcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuX2hvc3QuQW5pbWF0aW9uRmVhdHVyZS5zZXRBbmltYXRpb25CbGVuZFdlaWdodChcclxuICAgICAgICAgIGxheWVyTmFtZSxcclxuICAgICAgICAgIGFuaW1OYW1lLFxyXG4gICAgICAgICAgJ1knLFxyXG4gICAgICAgICAgdGFyZ2V0VlxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIGlmICghdHJpZ2dlckJsaW5rIHx8ICF0aGlzLl9pc1RhcmdldE1vdmluZykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gRXhlY3V0ZSBibGlua1xyXG4gICAgT2JqZWN0LmVudHJpZXModGhpcy5fYmxpbmtMYXllcnMpLmZvckVhY2goKFtsYXllck5hbWUsIGFuaW1OYW1lXSkgPT4ge1xyXG4gICAgICBjb25zdCBhbmltYXRpb24gPSB0aGlzLl9tYW5hZ2VkTGF5ZXJzW2xheWVyTmFtZV0uYW5pbWF0aW9uc1thbmltTmFtZV07XHJcblxyXG4gICAgICBpZiAoYW5pbWF0aW9uLmlzQWN0aXZlKSB7XHJcbiAgICAgICAgdGhpcy5faG9zdC5BbmltYXRpb25GZWF0dXJlLnBsYXlBbmltYXRpb24obGF5ZXJOYW1lLCBhbmltTmFtZSk7XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBpbnN0YWxsQXBpKCkge1xyXG4gICAgLyoqXHJcbiAgICAgKiBAaW5uZXJcclxuICAgICAqIEBuYW1lc3BhY2UgUG9pbnRPZkludGVyZXN0RmVhdHVyZVxyXG4gICAgICovXHJcbiAgICBjb25zdCBhcGkgPSBzdXBlci5pbnN0YWxsQXBpKCk7XHJcblxyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoYXBpLCB7XHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbWVtYmVyb2YgUG9pbnRPZkludGVyZXN0RmVhdHVyZVxyXG4gICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICogQHNlZSBjb3JlL1BvaW50T2ZJbnRlcmVzdEZlYXR1cmUjdGFyZ2V0XHJcbiAgICAgICAqL1xyXG4gICAgICB0YXJnZXQ6IHtcclxuICAgICAgICBnZXQ6ICgpID0+IHRoaXMudGFyZ2V0LFxyXG4gICAgICAgIHNldDogdGFyZ2V0ID0+IHsgdGhpcy50YXJnZXQgPSB0YXJnZXQgfSxcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG5cclxuICAgIE9iamVjdC5hc3NpZ24oYXBpLCB7XHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbWVtYmVyb2YgUG9pbnRPZkludGVyZXN0RmVhdHVyZVxyXG4gICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICogQG1ldGhvZFxyXG4gICAgICAgKiBAc2VlIGNvcmUvUG9pbnRPZkludGVyZXN0RmVhdHVyZSNyZWdpc3Rlckxvb2tMYXllclxyXG4gICAgICAgKi9cclxuICAgICAgcmVnaXN0ZXJMb29rTGF5ZXI6IHRoaXMucmVnaXN0ZXJMb29rTGF5ZXIuYmluZCh0aGlzKSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBtZW1iZXJvZiBQb2ludE9mSW50ZXJlc3RGZWF0dXJlXHJcbiAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgKiBAbWV0aG9kXHJcbiAgICAgICAqIEBzZWUgY29yZS9Qb2ludE9mSW50ZXJlc3RGZWF0dXJlI3JlZ2lzdGVyQmxpbmtMYXllclxyXG4gICAgICAgKi9cclxuICAgICAgcmVnaXN0ZXJCbGlua0xheWVyOiB0aGlzLnJlZ2lzdGVyQmxpbmtMYXllci5iaW5kKHRoaXMpLFxyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIFBvaW50T2ZJbnRlcmVzdEZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBtZXRob2RcclxuICAgICAgICogQHNlZSBjb3JlL1BvaW50T2ZJbnRlcmVzdEZlYXR1cmUjc2V0VGFyZ2V0XHJcbiAgICAgICAqL1xyXG4gICAgICBzZXRUYXJnZXQ6IHRoaXMuc2V0VGFyZ2V0LmJpbmQodGhpcyksXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbWVtYmVyb2YgUG9pbnRPZkludGVyZXN0RmVhdHVyZVxyXG4gICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICogQG1ldGhvZFxyXG4gICAgICAgKiBAc2VlIGNvcmUvUG9pbnRPZkludGVyZXN0RmVhdHVyZSNzZXRUYXJnZXRCeU5hbWVcclxuICAgICAgICovXHJcbiAgICAgIHNldFRhcmdldEJ5TmFtZTogdGhpcy5zZXRUYXJnZXRCeU5hbWUuYmluZCh0aGlzKSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBtZW1iZXJvZiBQb2ludE9mSW50ZXJlc3RGZWF0dXJlXHJcbiAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgKiBAbWV0aG9kXHJcbiAgICAgICAqIEBzZWUgY29yZS9Qb2ludE9mSW50ZXJlc3RGZWF0dXJlI3NldFRhcmdldEJ5SWRcclxuICAgICAgICovXHJcbiAgICAgIHNldFRhcmdldEJ5SWQ6IHRoaXMuc2V0VGFyZ2V0QnlJZC5iaW5kKHRoaXMpLFxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIGFwaTtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IFBvaW50T2ZJbnRlcmVzdEZlYXR1cmU7XHJcbmV4cG9ydCB7IEF4aXNNYXAgfTsiLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cclxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVC0wXHJcbmltcG9ydCBDb3JlUG9pbnRPZkludGVyZXN0RmVhdHVyZSwge0F4aXNNYXB9IGZyb20gJ2NvcmUvUG9pbnRPZkludGVyZXN0RmVhdHVyZSc7XHJcblxyXG4vKipcclxuICogQGV4dGVuZHMgY29yZS9Qb2ludE9mSW50ZXJlc3RGZWF0dXJlXHJcbiAqIEBhbGlhcyB0aHJlZS5qcy9Qb2ludE9mSW50ZXJlc3RGZWF0dXJlXHJcbiAqL1xyXG5jbGFzcyBQb2ludE9mSW50ZXJlc3RGZWF0dXJlIGV4dGVuZHMgQ29yZVBvaW50T2ZJbnRlcmVzdEZlYXR1cmUge1xyXG4gIHN0YXRpYyBfZ2V0V29ybGRQb3NpdGlvbihvYmopIHtcclxuICAgIG9iai51cGRhdGVXb3JsZE1hdHJpeCh0cnVlLCBmYWxzZSk7XHJcbiAgICByZXR1cm4gb2JqLm1hdHJpeFdvcmxkLmVsZW1lbnRzLnNsaWNlKDEyLCAxNSk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgX2dldFdvcmxkTWF0cml4KG9iaikge1xyXG4gICAgb2JqLnVwZGF0ZVdvcmxkTWF0cml4KHRydWUsIGZhbHNlKTtcclxuICAgIHJldHVybiBbLi4ub2JqLm1hdHJpeFdvcmxkLmVsZW1lbnRzXTtcclxuICB9XHJcblxyXG4gIF92YWxpZGF0ZVRyYW5zZm9ybU9iamVjdChvYmopIHtcclxuICAgIHJldHVybiBvYmogaW5zdGFuY2VvZiBUSFJFRS5PYmplY3QzRDtcclxuICB9XHJcblxyXG4gIHNldFRhcmdldEJ5TmFtZShuYW1lKSB7XHJcbiAgICBzdXBlci5zZXRUYXJnZXRCeU5hbWUobmFtZSk7XHJcbiAgICBpZiAoIW5hbWUpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudGFyZ2V0ID0gdGhpcy5fc2NlbmUuZ2V0T2JqZWN0QnlOYW1lKG5hbWUpO1xyXG4gIH1cclxuXHJcbiAgc2V0VGFyZ2V0QnlJZChpZCkge1xyXG4gICAgc3VwZXIuc2V0VGFyZ2V0QnlOYW1lKGlkKTtcclxuICAgIGlmICghaWQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudGFyZ2V0ID0gdGhpcy5fc2NlbmUuZ2V0T2JqZWN0QnlJZChpZCk7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBQb2ludE9mSW50ZXJlc3RGZWF0dXJlO1xyXG5leHBvcnQge0F4aXNNYXB9O1xyXG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cclxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVC0wXHJcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvcHJlZmVyLWRlZmF1bHQtZXhwb3J0XHJcbmV4cG9ydCBjb25zdCBlbnYgPSAndGhyZWUnO1xyXG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cclxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVC0wXHJcblxyXG5pbXBvcnQgVXRpbHMgZnJvbSAnY29yZS9VdGlscyc7XHJcblxyXG4vKipcclxuICogQSBjb2xsZWN0aW9uIG9mIHVzZWZ1bCB0ZXh0LXRvLXNwZWVjaCBmdW5jdGlvbnMuXHJcbiAqXHJcbiAqIEBoaWRlY29uc3RydWN0b3JcclxuICovXHJcbmNsYXNzIFRleHRUb1NwZWVjaFV0aWxzIHtcclxuICAvKipcclxuICAgKiBSZXR1cm5zIGEgbmV3IHN0cmluZyB3aXRoIFNTTUwgbWFya3MgaW5zZXJ0ZWQgYmFzZWQgb25cclxuICAgKiBtYXRjaGVzIGJldHdlZW4gdGhlIGlucHV0IHN0cmluZyBhbmQgdGhlIGlucHV0IG1hcC4gVGhlXHJcbiAgICogd29yZCBtYXRjaGVzIGFyZSBjYXNlLWluc2Vuc2l0aXZlLiBXb3JkcyB3aXRoaW4gZXhpc3RpbmdcclxuICAgKiBTU01MIHRhZ3Mgd2lsbCBub3QgYmUgYWZmZWN0ZWQuIElucHV0IHRleHQgd2lsbCBiZSBzdXJyb3VuZGVkXHJcbiAgICogYnkgPHNwZWFrPjwvc3BlYWs+IHRhZ3MgaWYgbmVlZGVkLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSBJbnB1dCBzdHJpbmcuXHJcbiAgICogQHBhcmFtIHtvYmplY3R9IG1hcCAtIElucHV0IG9iamVjdCB0aGF0IG1hcHMgbWFyayBrZXlzXHJcbiAgICogdG8gYXJyYXlzIG9mIHdvcmRzLiBFeGFtcGxlOlxyXG4gICAqXHJcbiAgICogIHtcclxuICAgKiAgICAnbWFyazpzYWQnIDogWydzYWQnLCAnYmx1ZScsICdkb3duJ10sXHJcbiAgICogICAgJ21hcms6aGFwcHknIDogWydqb3knLCAnZ2xhZCcsICdncmVhdCddLFxyXG4gICAqICAgICdtYXJrOm5vJyA6IFsnbm8nLCAnbmFoJywgJ25heScsICdzdXJlJ11cclxuICAgKiAgfVxyXG4gICAqIEBwYXJhbSB7QXJyYXkuPHN0cmluZz59IFtyYW5kb21NYXJrcyA9IFtdXSAtIElmIHRoZXJlIGFyZSBzZW50ZW5jZXMgdGhhdCBkb24ndFxyXG4gICAqIG1hdGNoIGFueSB3b3JkcyBmcm9tIHRoZSBtYXAgb2JqZWN0LCBtYXJrcyBmcm9tIHRoaXMgYXJyYXkgd2lsbCBiZSByYW5kb21seVxyXG4gICAqIGNob3NlbiBhbmQgaW5zZXJ0ZWQuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSAtIFVwZGF0ZWQgaW5wdXQgc3RyaW5nLlxyXG4gICAqL1xyXG4gIHN0YXRpYyBhdXRvR2VuZXJhdGVTU01MTWFya3ModGV4dCwgbWFwLCByYW5kb21NYXJrcyA9IFtdKSB7XHJcbiAgICBpZiAodHlwZW9mIG1hcCAhPT0gJ29iamVjdCcgfHwgbWFwID09PSBudWxsKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgQ2Fubm90IGdlbmVyYXRlIFNTTUwgbWFya3MgZm9yIHRleHQgXCIke3RleHR9XCIgYmVjYXVzZSBtYXAgaXMgbm90IGFuIG9iamVjdC5gXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gcHJvY2VzcyB0aGUgaW5wdXQgbWFwIGludG8gYW4gaW50ZXJuYWwgZm9ybWF0XHJcbiAgICBjb25zdCBpbnRlcm5hbE1hcCA9IHRoaXMuX3Byb2Nlc3NJbnB1dE1hcChtYXApO1xyXG5cclxuICAgIGNvbnN0IHNwZWFrVGFncyA9IFsnPHNwZWFrPicsICc8L3NwZWFrPiddO1xyXG4gICAgY29uc3Qgc3NtbE1hcmtSZWdleCA9IC88bWFyayBuYW1lPSg/OlwifCcpKC4qPykoPzpcInwnKVxcLz4vO1xyXG4gICAgY29uc3Qgc3NtbFRhZ1JlZ2V4ID0gLzxbXj5dKj4vZztcclxuXHJcbiAgICAvLyBJZGVudGlmeSBhbnkgZXhpc3RpbmcgU1NNTCB0YWdzXHJcbiAgICBjb25zdCBleGlzdGluZ1RhZ3MgPSBbXTtcclxuICAgIGxldCByZXN1bHQgPSBzc21sVGFnUmVnZXguZXhlYyh0ZXh0KTtcclxuXHJcbiAgICB3aGlsZSAocmVzdWx0ICE9PSBudWxsKSB7XHJcbiAgICAgIGV4aXN0aW5nVGFncy5wdXNoKHtcclxuICAgICAgICBzdGFydDogcmVzdWx0LmluZGV4LFxyXG4gICAgICAgIGVuZDogcmVzdWx0LmluZGV4ICsgcmVzdWx0WzBdLmxlbmd0aCxcclxuICAgICAgICB0ZXh0OiByZXN1bHRbMF0sXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgcmVzdWx0ID0gc3NtbFRhZ1JlZ2V4LmV4ZWModGV4dCk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgY2h1bmtzID0gW107XHJcbiAgICBsZXQgaW5kZXggPSAwO1xyXG4gICAgbGV0IHNzbWxNYXJrUmVzdWx0O1xyXG4gICAgbGV0IGR1cGxpY2F0ZU1hcmtUb0NoZWNrID0gW107XHJcbiAgICBleGlzdGluZ1RhZ3MuZm9yRWFjaChleGlzdGluZ1RhZyA9PiB7XHJcbiAgICAgIGNvbnN0IHN1YnN0ciA9IHRleHQuc2xpY2UoaW5kZXgsIGV4aXN0aW5nVGFnLnN0YXJ0KTtcclxuXHJcbiAgICAgIGlmIChzdWJzdHIgIT09ICcnKSB7XHJcbiAgICAgICAgLy8gYXV0by1tYXJrIG5vbi10YWcgdGV4dFxyXG4gICAgICAgIGNodW5rcy5wdXNoKFxyXG4gICAgICAgICAgdGhpcy5faW5zZXJ0TWFya3Moc3Vic3RyLCBpbnRlcm5hbE1hcCwgZHVwbGljYXRlTWFya1RvQ2hlY2spXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgZHVwbGljYXRlTWFya1RvQ2hlY2sgPSBbXTtcclxuICAgICAgfVxyXG5cclxuICAgICAgc3NtbE1hcmtSZXN1bHQgPSBzc21sTWFya1JlZ2V4LmV4ZWMoZXhpc3RpbmdUYWcudGV4dCk7XHJcblxyXG4gICAgICBpZiAoc3NtbE1hcmtSZXN1bHQgIT09IG51bGwpIHtcclxuICAgICAgICBjb25zdCBtYXJrVGV4dCA9IHNzbWxNYXJrUmVzdWx0WzFdO1xyXG4gICAgICAgIGR1cGxpY2F0ZU1hcmtUb0NoZWNrLnB1c2gobWFya1RleHQpO1xyXG4gICAgICB9IGVsc2UgaWYgKCFzcGVha1RhZ3MuaW5jbHVkZXMoZXhpc3RpbmdUYWcudGV4dCkpIHtcclxuICAgICAgICBjaHVua3MucHVzaChleGlzdGluZ1RhZy50ZXh0KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gYWR2YW5jZSB0aGUgaW5kZXhcclxuICAgICAgaW5kZXggPSBleGlzdGluZ1RhZy5lbmQ7XHJcbiAgICB9KTtcclxuXHJcbiAgICBjaHVua3MucHVzaChcclxuICAgICAgdGhpcy5faW5zZXJ0TWFya3ModGV4dC5zbGljZShpbmRleCksIGludGVybmFsTWFwLCBkdXBsaWNhdGVNYXJrVG9DaGVjaylcclxuICAgICk7XHJcblxyXG4gICAgbGV0IG1hcmtlZFRleHQgPSBjaHVua3Muam9pbignJyk7XHJcblxyXG4gICAgaWYgKHJhbmRvbU1hcmtzICYmIHJhbmRvbU1hcmtzLmxlbmd0aCA+IDApIHtcclxuICAgICAgLy8gYWRkIHJhbmRvbSBtYXJrcyB0byBhbnkgdW5tYXJrZWQgc2VudGVuY2VzXHJcbiAgICAgIG1hcmtlZFRleHQgPSB0aGlzLmFkZE1hcmtzVG9Vbm1hcmtlZFNlbnRlbmNlcyhcclxuICAgICAgICBtYXJrZWRUZXh0LFxyXG4gICAgICAgIHJhbmRvbU1hcmtzXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIFRleHRUb1NwZWVjaFV0aWxzLnZhbGlkYXRlVGV4dChtYXJrZWRUZXh0KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgYSBuZXcgc3RyaW5nIHdpdGggYSByYW5kb20gU1NNTCBtYXJrIGluc2VydGVkIGF0IGVhY2ggc2VudGVuY2UgdGhhdFxyXG4gICAqIGRvZXMgbm90IGFscmVhZHkgY29udGFpbiBhbiBTU01MIG1hcmsuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIElucHV0IHN0cmluZy5cclxuICAgKiBAcGFyYW0ge0FycmF5LjxzdHJpbmc+fSBtYXJrcyAtIEFueSBhcnJheSBvZiByYW5kb20gU1NNTCBtYXJrcyB0byBjaG9vc2UgZnJvbVxyXG4gICAqIHdoZW4gbW9kaWZ5aW5nIHRoZSB0ZXh0LlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge3N0cmluZ31cclxuICAgKi9cclxuICBzdGF0aWMgYWRkTWFya3NUb1VubWFya2VkU2VudGVuY2VzKHRleHQsIG1hcmtzKSB7XHJcbiAgICBpZiAoIW1hcmtzIHx8IG1hcmtzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHRleHQ7XHJcblxyXG4gICAgY29uc3Qgc3NtbE1hcmtSZWdleCA9IC88bWFyayBuYW1lPSg/OlwifCcpKC4qPykoPzpcInwnKVxcLz4vZztcclxuICAgIGNvbnN0IHNzbWxUYWdSZWdleCA9IC88W14+XSo+L2c7XHJcblxyXG4gICAgLy8gRmluZCB0aGUgaW5kaWNlcyBvZiBhbnkgbWFya3MgaW4gdGhlIHRleHRcclxuICAgIGNvbnN0IG1hcmtJbmRpY2VzID0gW107XHJcbiAgICBsZXQgbWFya1Jlc3VsdCA9IHNzbWxNYXJrUmVnZXguZXhlYyh0ZXh0KTtcclxuXHJcbiAgICB3aGlsZSAobWFya1Jlc3VsdCAhPT0gbnVsbCkge1xyXG4gICAgICBtYXJrSW5kaWNlcy5wdXNoKG1hcmtSZXN1bHQuaW5kZXgpO1xyXG4gICAgICBtYXJrUmVzdWx0ID0gc3NtbE1hcmtSZWdleC5leGVjKHRleHQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEZpbmQgYWxsIFNTTUwgdGFncyBpbiB0aGUgdGV4dFxyXG4gICAgY29uc3QgZXhpc3RpbmdUYWdzID0gW107XHJcbiAgICBsZXQgc3NtbFJlc3VsdCA9IHNzbWxUYWdSZWdleC5leGVjKHRleHQpO1xyXG4gICAgd2hpbGUgKHNzbWxSZXN1bHQgIT09IG51bGwpIHtcclxuICAgICAgZXhpc3RpbmdUYWdzLnB1c2goe1xyXG4gICAgICAgIHN0YXJ0OiBzc21sUmVzdWx0LmluZGV4LFxyXG4gICAgICAgIGVuZDogc3NtbFJlc3VsdC5pbmRleCArIHNzbWxSZXN1bHRbMF0ubGVuZ3RoLFxyXG4gICAgICAgIHRleHQ6IHNzbWxSZXN1bHRbMF0sXHJcbiAgICAgIH0pO1xyXG4gICAgICBzc21sUmVzdWx0ID0gc3NtbFRhZ1JlZ2V4LmV4ZWModGV4dCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ3JlYXRlIGEgY29weSBvZiB0aGUgdGV4dCB3aXRoIGFsbCBTU01MIG1hcmtzIHJlcGxhY2VzIHdpdGggd2hpdGVzcGFjZVxyXG4gICAgbGV0IGNsZWFuZWRUZXh0ID0gdGV4dC5zbGljZSgpO1xyXG4gICAgZXhpc3RpbmdUYWdzLmZvckVhY2goZXhpc3RpbmdTc21sID0+IHtcclxuICAgICAgY29uc3Qgd2hpdGVzcGFjZSA9IG5ldyBBcnJheShleGlzdGluZ1NzbWwudGV4dC5sZW5ndGggKyAxKS5qb2luKCcgJyk7XHJcbiAgICAgIGNsZWFuZWRUZXh0ID0gW1xyXG4gICAgICAgIGNsZWFuZWRUZXh0LnNsaWNlKDAsIGV4aXN0aW5nU3NtbC5zdGFydCksXHJcbiAgICAgICAgd2hpdGVzcGFjZSxcclxuICAgICAgICBjbGVhbmVkVGV4dC5zbGljZShleGlzdGluZ1NzbWwuZW5kKSxcclxuICAgICAgXS5qb2luKCcnKTtcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IHNlbnRlbmNlRW5kSW5kaWNlcyA9IHRoaXMuX2dldFNlbnRlbmNlRW5kcyhjbGVhbmVkVGV4dCk7XHJcblxyXG4gICAgLy8gT25seSBpbnNlcnQgcmFuZG9tIG1hcmtzIGludG8gc2VudGVuY2VzIHRoYXQgZG9uJ3QgYWxyZWFkeSBoYXZlIGFueVxyXG4gICAgbGV0IHByZXZJbmRleCA9IDA7XHJcbiAgICBjb25zdCB0YXJnZXRJbmRpY2VzID0gc2VudGVuY2VFbmRJbmRpY2VzLmZpbHRlcihpbmRleCA9PiB7XHJcbiAgICAgIGNvbnN0IGNvbnRhaW5zTWFyayA9XHJcbiAgICAgICAgbWFya0luZGljZXMuZmluZEluZGV4KG1hcmtJbmRleCA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gcHJldkluZGV4IDw9IG1hcmtJbmRleCAmJiBpbmRleCA+IG1hcmtJbmRleDtcclxuICAgICAgICB9KSAhPT0gLTE7XHJcbiAgICAgIHByZXZJbmRleCA9IGluZGV4O1xyXG4gICAgICByZXR1cm4gIWNvbnRhaW5zTWFyaztcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IHJhbmRvbU1hcmtlZFRleHQgPSB0aGlzLl9pbnNlcnRSYW5kb21NYXJrc0F0KFxyXG4gICAgICB0ZXh0LFxyXG4gICAgICB0YXJnZXRJbmRpY2VzLFxyXG4gICAgICBtYXJrc1xyXG4gICAgKTtcclxuXHJcbiAgICByZXR1cm4gcmFuZG9tTWFya2VkVGV4dDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdlbmVyYXRlIGEgdmVyc2lvbiBvZiBnaXZlbiB0ZXh0IHRoYXQgaXMgZW5jbG9zZWQgYnkgUG9sbHkgc3NtbCBzcGVhayB0YWdzLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSBUaGUgdGV4dCB0byB2YWxpZGF0ZS5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IC0gVXBkYXRlZCBpbnB1dCBzdHJpbmcuXHJcbiAgICovXHJcbiAgc3RhdGljIHZhbGlkYXRlVGV4dCh0ZXh0KSB7XHJcbiAgICBpZiAoIXRleHQpIHtcclxuICAgICAgdGV4dCA9ICc8c3BlYWs+PC9zcGVhaz4nO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGV4dCA9IHRleHRcclxuICAgICAgICAucmVwbGFjZSgvKF5cXHMqPFxccypzcGVha1xccyopPlxccyp8KF5cXHMqKS8sICc8c3BlYWs+JylcclxuICAgICAgICAucmVwbGFjZSgvKFxccyo8XFxzKlxcL1xccypzcGVha1xccyo+XFxzKiR8XFxzKiQpLywgJzwvc3BlYWs+Jyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRleHQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQYXJzZSBhbiBpbnB1dCBzdHJpbmcgYW5kIGluc2VydCBTU01MIG1hcmtzIGJhc2VkIG9uXHJcbiAgICogd29yZCBtYXRjaGVzIGluIGEgbWFwLlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gSW5wdXQgc3RyaW5nLlxyXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IFtpbmRpY2VzID0gW11dIC0gQW4gYXJyYXkgb2YgaW5kaWNlcyBpbiB0aGUgdGV4dCBpbnB1dFxyXG4gICAqIHdoZXJlIHJhbmRvbSBtYXJrcyBzaG91bGQgYmUgaW5zZXJ0ZWQuXHJcbiAgICogQHBhcmFtIHtBcnJheS48c3RyaW5nPn0gW21hcmtzID0gW11dIC0gQW4gYXJyYXkgb2YgbWFyayBzdHJpbmdzIHRvIGNob29zZVxyXG4gICAqIGZyb20gd2hlbiBpbnNlcnRpbmcgcmFuZG9tIG1hcmtzLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge3N0cmluZ30gLSBVcGRhdGVkIGlucHV0IHN0cmluZy5cclxuICAgKi9cclxuICBzdGF0aWMgX2luc2VydFJhbmRvbU1hcmtzQXQodGV4dCwgaW5kaWNlcyA9IFtdLCBtYXJrcyA9IFtdKSB7XHJcbiAgICBpZiAoIW1hcmtzIHx8IG1hcmtzLmxlbmd0aCA9PT0gMCB8fCAhaW5kaWNlcyB8fCBpbmRpY2VzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICByZXR1cm4gdGV4dDtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgb2Zmc2V0ID0gMDtcclxuICAgIGluZGljZXMuZm9yRWFjaChpbmRleCA9PiB7XHJcbiAgICAgIGNvbnN0IHJhbmRvbU1hcmsgPSBgPG1hcmsgbmFtZT0nJHtcclxuICAgICAgICBtYXJrc1tVdGlscy5nZXRSYW5kb21JbnQoMCwgbWFya3MubGVuZ3RoKV1cclxuICAgICAgfScvPmA7XHJcbiAgICAgIHRleHQgPSBbXHJcbiAgICAgICAgdGV4dC5zbGljZSgwLCBpbmRleCArIG9mZnNldCksXHJcbiAgICAgICAgcmFuZG9tTWFyayxcclxuICAgICAgICB0ZXh0LnNsaWNlKGluZGV4ICsgb2Zmc2V0KSxcclxuICAgICAgXS5qb2luKCcnKTtcclxuICAgICAgb2Zmc2V0ICs9IHJhbmRvbU1hcmsubGVuZ3RoO1xyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIHRleHQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQYXJzZXMgYSBzdHJpbmcgb2YgdGV4dCBhbmQgcmV0dXJucyBhbiBhcnJheSBjb250YWluaW5nIHRoZSBpbmRpY2VzXHJcbiAgICogb2YgdGhlIGxhc3QgY2hhcmFjdGVyIGluIGEgc2VudGVuY2UgdGhhdCBpcyBub3QgaW4gdGhlIGZvbGxvd2luZyBsaXN0OlxyXG4gICAqICAoJy4nLCAnPycsICchJylcclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIFRleHQgdG8gcHJvY2VzcyBmb3IgZW5kIG9mIHNlbnRlbmNlXHJcbiAgICogaW5kaWNlcy5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtBcnJheS48bnVtYmVyPn0gLSBBcnJheSBvZiBlbmQgb2Ygc2VudGVuY2UgaW5kaWNlcy5cclxuICAgKi9cclxuICBzdGF0aWMgX2dldFNlbnRlbmNlRW5kcyh0ZXh0KSB7XHJcbiAgICBjb25zdCBzZW50ZW5jZVJlZ2V4ID0gL1teLiE/XStbLiE/XSsvZztcclxuICAgIGNvbnN0IGVuZFNlbnRlbmNlUmVnZXggPSAvWy4hP10rLztcclxuXHJcbiAgICBsZXQgcmVzdWx0ID0gc2VudGVuY2VSZWdleC5leGVjKHRleHQpO1xyXG4gICAgY29uc3Qgc2VudGVuY2VFbmRzID0gW107XHJcbiAgICB3aGlsZSAocmVzdWx0ICE9PSBudWxsKSB7XHJcbiAgICAgIC8vIGZpbmQgdGhlIGxhc3Qgbm9uLXB1bmN0dWF0aW9uIGNoYXJhY3RlclxyXG4gICAgICBjb25zdCBwdW5jdFJlc3VsdCA9IGVuZFNlbnRlbmNlUmVnZXguZXhlYyhyZXN1bHRbMF0pO1xyXG4gICAgICBzZW50ZW5jZUVuZHMucHVzaChcclxuICAgICAgICByZXN1bHQuaW5kZXggKyByZXN1bHRbMF0ubGVuZ3RoIC0gcHVuY3RSZXN1bHRbMF0ubGVuZ3RoXHJcbiAgICAgICk7XHJcbiAgICAgIHJlc3VsdCA9IHNlbnRlbmNlUmVnZXguZXhlYyh0ZXh0KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gc2VudGVuY2VFbmRzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUGFyc2UgYW4gaW5wdXQgc3RyaW5nIGFuZCBpbnNlcnQgU1NNTCBtYXJrcyBiYXNlZCBvblxyXG4gICAqIHdvcmQgbWF0Y2hlcyBpbiBhIG1hcC5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIElucHV0IHN0cmluZy5cclxuICAgKiBAcGFyYW0ge01hcH0gbWFwIC0gTWFwcGluZyBvZiB3b3JkcyB0byBtYXJrIHZhbHVlcyB0aGF0XHJcbiAgICogd2lsbCBiZSBpbnNlcnRlZCBhcyB0aGUgdmFsdWUgZm9yIGEgbWFyaydzICduYW1lJyBhdHRyaWJ1dGUuXHJcbiAgICogQHBhcmFtIHtBcnJheX0gZHVwbGljYXRlc1RvQ2hlY2sgLSBBIGxpc3Qgb2YgbWFyayB2YWx1ZXMgdG8gY2hlY2sgZm9yIGR1cGxpY2F0ZSBhZ2FpbnN0IHRoZSBmaXJzdCB3b3JkXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSAtIFVwZGF0ZWQgaW5wdXQgc3RyaW5nLlxyXG4gICAqL1xyXG4gIHN0YXRpYyBfaW5zZXJ0TWFya3ModGV4dCwgbWFwLCBkdXBsaWNhdGVzVG9DaGVjaykge1xyXG4gICAgaWYgKHRleHQgPT09ICcnKSByZXR1cm4gdGV4dDtcclxuXHJcbiAgICBjb25zdCB3b3JkUmVnZXggPSAvXFx3K3xcXHMrfFteXFxzXFx3XSsvZztcclxuXHJcbiAgICBsZXQgbG93ZXJDYXNlV29yZDtcclxuICAgIGxldCBjaGVja0R1cGxpY2F0ZSA9IHRydWU7XHJcbiAgICBjb25zdCBtYXJrZWRXb3JkcyA9IHRleHQubWF0Y2god29yZFJlZ2V4KS5tYXAod29yZCA9PiB7XHJcbiAgICAgIGxvd2VyQ2FzZVdvcmQgPSB3b3JkLnRvTG93ZXJDYXNlKCk7XHJcblxyXG4gICAgICBpZiAobWFwLmhhcyhsb3dlckNhc2VXb3JkKSkge1xyXG4gICAgICAgIGNvbnN0IG1hcmtzID0gbWFwLmdldChsb3dlckNhc2VXb3JkKS5tYXAobWFyayA9PiB7XHJcbiAgICAgICAgICBpZiAoY2hlY2tEdXBsaWNhdGUpIHtcclxuICAgICAgICAgICAgY2hlY2tEdXBsaWNhdGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgcmV0dXJuIGR1cGxpY2F0ZXNUb0NoZWNrLmluY2x1ZGVzKG1hcmspXHJcbiAgICAgICAgICAgICAgPyAnJ1xyXG4gICAgICAgICAgICAgIDogYDxtYXJrIG5hbWU9JyR7bWFya30nLz5gO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIGA8bWFyayBuYW1lPScke21hcmt9Jy8+YDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gYCR7bWFya3Muam9pbignJyl9JHt3b3JkfWA7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY2hlY2tEdXBsaWNhdGUgPSBmYWxzZTtcclxuICAgICAgICByZXR1cm4gd29yZDtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgZXhpc3RpbmdNYXJrcyA9IGR1cGxpY2F0ZXNUb0NoZWNrLm1hcChtYXJrID0+IHtcclxuICAgICAgcmV0dXJuIGA8bWFyayBuYW1lPScke21hcmt9Jy8+YDtcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBgJHtleGlzdGluZ01hcmtzLmpvaW4oJycpfSR7bWFya2VkV29yZHMuam9pbignJyl9YDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFByb2Nlc3NlcyBhbiBpbnB1dCBvYmplY3QgZm9yIG1hcHBpbmcgYW4gYXJyYXlcclxuICAgKiBvZiB3b3JkcyB0byBzcGVjaWZpYyBtYXJrIGtleXMuIENvbnZlcnRzIHRoZSBpbnB1dFxyXG4gICAqIG1hcCBpbnRvIGEgTWFwIHdpdGggYSBtb3JlIGVmZmljaWVudCBmb3JtYXQgZm9yXHJcbiAgICogcGVyZm9ybWluZyBtYXJrIGluamVjdGlvbi5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge29iamVjdH0gbWFwIC0gSW5wdXQgb2JqZWN0IHRoYXQgbWFwcyBtYXJrIGtleXNcclxuICAgKiB0byBhcnJheXMgb2Ygd29yZHMuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7TWFwfSAtIE1hcCBmb3IgaW50ZXJuYWwgdXNlLlxyXG4gICAqL1xyXG4gIHN0YXRpYyBfcHJvY2Vzc0lucHV0TWFwKG1hcCkge1xyXG4gICAgY29uc3QgaW50ZXJuYWxNYXAgPSBuZXcgTWFwKCk7XHJcblxyXG4gICAgbGV0IGxpc3QgPSBbXTtcclxuICAgIE9iamVjdC5lbnRyaWVzKG1hcCkuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XHJcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgICBgQ2Fubm90IGdlbmVyYXRlIFNTTUwgbWFya3MgZnJvbSBtYXAgXCIke21hcH1cIiBiZWNhdXNlIHZhbHVlIGZvciBrZXkgJyR7a2V5fScgaXMgbm90IGFuIGFycmF5LmBcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB2YWx1ZS5mb3JFYWNoKHdvcmQgPT4ge1xyXG4gICAgICAgIGNvbnN0IGxvd2VyQ2FzZVdvcmQgPSB3b3JkLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgbGlzdCA9IGludGVybmFsTWFwLmdldChsb3dlckNhc2VXb3JkKTtcclxuXHJcbiAgICAgICAgaWYgKGxpc3QgIT09IHVuZGVmaW5lZCAmJiAhbGlzdC5pbmNsdWRlcyhrZXkpKSB7XHJcbiAgICAgICAgICBpbnRlcm5hbE1hcC5zZXQobG93ZXJDYXNlV29yZCwgWy4uLmxpc3QsIGtleV0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpbnRlcm5hbE1hcC5zZXQobG93ZXJDYXNlV29yZCwgW2tleV0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gaW50ZXJuYWxNYXA7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBUZXh0VG9TcGVlY2hVdGlscztcclxuIiwiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXHJcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxyXG5pbXBvcnQgRGVmZXJyZWQgZnJvbSAnY29yZS9EZWZlcnJlZCc7XHJcblxyXG4vKipcclxuICogQ2xhc3MgdGhhdCBjYW4gcGxheSBiYWNrIGF1ZGlvIGdlbmVyYXRlZCBieSBBV1MgUG9sbHkgYW5kIHN5bmNocm9uaXplZCBlbWl0XHJcbiAqIHNwZWVjaG1hcmsgbWVzc2FnZXMuXHJcbiAqXHJcbiAqIEBhYnN0cmFjdFxyXG4gKi9cclxuY2xhc3MgQWJzdHJhY3RTcGVlY2gge1xyXG4gIC8qKlxyXG4gICAqIEBjb25zdHJ1Y3RvclxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtjb3JlL1RleHRUb1NwZWVjaEZlYXR1cmV9IHNwZWFrZXIgLSBUaGUgZmVhdHVyZSB0aGF0IG93bnMgdGhlIFNwZWVjaCBhbmRcclxuICAgKiB3aWxsIGVtaXQgc3BlZWNobWFyayBtZXNzYWdlcy5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIFRoZSB0ZXh0IG9mIHRoZSBzcGVlY2guXHJcbiAgICogQHBhcmFtIHtBcnJheS48T2JqZWN0Pn0gW3NwZWVjaG1hcmtzPVtdXSAtIEFuIGFycmF5IG9mIHNwZWVjaG1hcmsgb2JqZWN0cyByZXByZXNlbnRpbmdcclxuICAgKiB0aGUgdGV4dCBhbmQgdGltaW5nIG9mIHRoZSBzcGVlY2guXHJcbiAgICovXHJcbiAgY29uc3RydWN0b3Ioc3BlYWtlciwgdGV4dCwgc3BlZWNobWFya3MgPSBbXSkge1xyXG4gICAgdGhpcy5fc3BlYWtlciA9IHNwZWFrZXI7XHJcbiAgICB0aGlzLl90ZXh0ID0gdGV4dDtcclxuICAgIHRoaXMuX3NwZWVjaG1hcmtzID0gc3BlZWNobWFya3M7XHJcbiAgICB0aGlzLl9zcGVlY2htYXJrT2Zmc2V0ID0gMDtcclxuICAgIHRoaXMuX3Jlc2V0KCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXNldCB0cmFja2luZyBwcm9wZXJ0aWVzLlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbY3VycmVudFRpbWU9MF0gLSBUaW1lIHRvIHVzZSBmb3IgX3N0YXJ0VGltZS5cclxuICAgKi9cclxuICBfcmVzZXQoY3VycmVudFRpbWUgPSAwKSB7XHJcbiAgICB0aGlzLl9zdGFydFRpbWUgPSBjdXJyZW50VGltZTtcclxuICAgIHRoaXMuX2xvY2FsVGltZSA9IDA7XHJcbiAgICB0aGlzLl9wYXVzZVRpbWUgPSAwO1xyXG4gICAgdGhpcy5fcGxheWluZyA9IGZhbHNlO1xyXG4gICAgdGhpcy5fbWFya0l0ZXIgPSB0aGlzLl9zcGVlY2htYXJrcy52YWx1ZXMoKTtcclxuICAgIGNvbnN0IHt2YWx1ZSwgZG9uZX0gPSB0aGlzLl9tYXJrSXRlci5uZXh0KCk7XHJcbiAgICB0aGlzLl9jdXJyZW50TWFyayA9IHZhbHVlO1xyXG4gICAgdGhpcy5fZW5kVGltZSA9IHRoaXMuX3NwZWVjaG1hcmtzLmxlbmd0aFxyXG4gICAgICA/IHRoaXMuX3NwZWVjaG1hcmtzW3RoaXMuX3NwZWVjaG1hcmtzLmxlbmd0aCAtIDFdLnRpbWVcclxuICAgICAgOiAwO1xyXG4gICAgdGhpcy5fZG9uZSA9IGRvbmU7XHJcbiAgICB0aGlzLl9wcm9taXNlID0gbnVsbDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZSBhIG5ldyBwcm9taXNlIHRoYXQgd2lsbCBzdG9wIHBsYXliYWNrIGFuZCBlbWl0IG1lc3NhZ2VzIGZvciB0aGlzIHNwZWVjaC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvbkZpbmlzaCAtIEZ1bmNpdG9uIHRvIGV4ZWN1dGUgb25jZSB0aGUgc3BlZWNoIHN0b3BzLlxyXG4gICAqIEBwYXJhbSB7b25FcnJvcj19IG9uRXJyb3IgLSBGdW5jdGlvbiB0byBleGVjdXRlIGlmIHRoZSBzcGVlY2ggZW5jb3VudGVycyBhblxyXG4gICAqIGVycm9yLlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvbkludGVycnVwdCAtIEZ1bmN0aW9uIHRvIGV4ZWN1dGUgaWYgdGhlIHNwZWVjaCBpcyBjYW5jZWxlZC5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtEZWZlcnJlZH1cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICovXHJcbiAgX2NyZWF0ZVByb21pc2Uob25GaW5pc2gsIG9uRXJyb3IsIG9uSW50ZXJydXB0KSB7XHJcbiAgICBjb25zdCBvblJlc29sdmUgPSB2YWx1ZSA9PiB7XHJcbiAgICAgIHRoaXMuX3BsYXlpbmcgPSBmYWxzZTtcclxuXHJcbiAgICAgIHRoaXMuX3NwZWFrZXIuZW1pdCh0aGlzLl9zcGVha2VyLmNvbnN0cnVjdG9yLkVWRU5UUy5zdG9wLCB0aGlzKTtcclxuICAgICAgdGhpcy5fc3BlYWtlci5jb25zdHJ1Y3Rvci5lbWl0KFxyXG4gICAgICAgIHRoaXMuX3NwZWFrZXIuY29uc3RydWN0b3IuRVZFTlRTLnN0b3AsXHJcbiAgICAgICAgdGhpc1xyXG4gICAgICApO1xyXG5cclxuICAgICAgaWYgKHR5cGVvZiBvbkZpbmlzaCA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgIG9uRmluaXNoKHZhbHVlKTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBvblJlamVjdCA9IGUgPT4ge1xyXG4gICAgICB0aGlzLl9wbGF5aW5nID0gZmFsc2U7XHJcblxyXG4gICAgICB0aGlzLl9zcGVha2VyLmVtaXQodGhpcy5fc3BlYWtlci5jb25zdHJ1Y3Rvci5FVkVOVFMuc3RvcCwgdGhpcyk7XHJcbiAgICAgIHRoaXMuX3NwZWFrZXIuY29uc3RydWN0b3IuZW1pdChcclxuICAgICAgICB0aGlzLl9zcGVha2VyLmNvbnN0cnVjdG9yLkVWRU5UUy5zdG9wLFxyXG4gICAgICAgIHRoaXNcclxuICAgICAgKTtcclxuXHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoXHJcbiAgICAgICAgYCR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfSBlbmNvdW50ZXJlZCBhbiB1bmV4cGVjdGVkIGVycm9yOiAke2V9YFxyXG4gICAgICApO1xyXG5cclxuICAgICAgaWYgKHR5cGVvZiBvbkVycm9yID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgb25FcnJvcihlKTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBvbkNhbmNlbCA9IHZhbHVlID0+IHtcclxuICAgICAgdGhpcy5fcGxheWluZyA9IGZhbHNlO1xyXG5cclxuICAgICAgdGhpcy5fc3BlYWtlci5lbWl0KHRoaXMuX3NwZWFrZXIuY29uc3RydWN0b3IuRVZFTlRTLmludGVycnVwdCwgdGhpcyk7XHJcbiAgICAgIHRoaXMuX3NwZWFrZXIuY29uc3RydWN0b3IuZW1pdChcclxuICAgICAgICB0aGlzLl9zcGVha2VyLmNvbnN0cnVjdG9yLkVWRU5UUy5pbnRlcnJ1cHQsXHJcbiAgICAgICAgdGhpc1xyXG4gICAgICApO1xyXG5cclxuICAgICAgaWYgKHR5cGVvZiBvbkludGVycnVwdCA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgIG9uSW50ZXJydXB0KHZhbHVlKTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLl9wcm9taXNlID0gbmV3IERlZmVycmVkKHVuZGVmaW5lZCwgb25SZXNvbHZlLCBvblJlamVjdCwgb25DYW5jZWwpO1xyXG5cclxuICAgIHJldHVybiB0aGlzLl9wcm9taXNlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIHdoZXRoZXIgb3Igbm90IHRoZSBzcGVlY2ggaGFzIHJlYWNoZWQgaXQncyBlbmQuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAgICovXHJcbiAgX2NoZWNrRmluaXNoZWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fZG9uZSAmJiB0aGlzLl9sb2NhbFRpbWUgPj0gdGhpcy5fZW5kVGltZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIHBsYXliYWNrIHN0YXRlIG9mIHRoZSBhdWRpby5cclxuICAgKlxyXG4gICAqIEByZWFkb25seVxyXG4gICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAqL1xyXG4gIGdldCBwbGF5aW5nKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3BsYXlpbmc7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSB0ZXh0IG9mIHRoZSBzcGVlY2guXHJcbiAgICpcclxuICAgKiBAcmVhZG9ubHlcclxuICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAqL1xyXG4gIGdldCB0ZXh0KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3RleHQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIGEgc2hhbGxvdyBjb3B5IG9mIHRoZSBzcGVlY2htYXJrcyBhcnJheSBmb3IgdGhlIHNwZWVjaC5cclxuICAgKlxyXG4gICAqIEByZWFkb25seVxyXG4gICAqIEB0eXBlIHtBcnJheS48T2JqZWN0Pn1cclxuICAgKi9cclxuICBnZXQgc3BlZWNobWFya3MoKSB7XHJcbiAgICByZXR1cm4gWy4uLnRoaXMuX3NwZWVjaG1hcmtzXTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgYW5kIHNldHMgdGhlIG51bWJlciBvZiBzZWNvbmRzIHRvIG9mZnNldCBzcGVlY2htYXJrIGVtaXNzaW9uLlxyXG4gICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICovXHJcbiAgZ2V0IHNwZWVjaG1hcmtPZmZzZXQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fc3BlZWNobWFya09mZnNldCAvIDEwMDA7XHJcbiAgfVxyXG5cclxuICBzZXQgc3BlZWNobWFya09mZnNldChvZmZzZXQpIHtcclxuICAgIHRoaXMuX3NwZWVjaG1hcmtPZmZzZXQgPSBvZmZzZXQgKiAxMDAwOyAvLyBTdG9yZSBhcyBtaWxsaXNlY29uZHNcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEVtaXQgc3BlZWNobWFyayBtZXNzYWdlcyBhcyB0aGV5IGFyZSBlbmNvdW50ZXJlZCBpbiBzeW5jIHdpdGggYXVkaW8uXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge251bWJlcn0gY3VycmVudFRpbWUgLSBDdXJyZW50IGdsb2JhbCB0aW1lIHdoZW4gdXBkYXRlIHdhcyBjYWxsZWQuXHJcbiAgICovXHJcbiAgdXBkYXRlKGN1cnJlbnRUaW1lKSB7XHJcbiAgICBpZiAoIXRoaXMuX3BsYXlpbmcpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFVwZGF0ZSBsb2NhbCBhdWRpbyB0aW1lXHJcbiAgICB0aGlzLl9sb2NhbFRpbWUgPSBjdXJyZW50VGltZSAtIHRoaXMuX3N0YXJ0VGltZTtcclxuXHJcbiAgICBpZiAoIXRoaXMuX2RvbmUpIHtcclxuICAgICAgLy8gRW1pdCBzcGVlY2htYXJrIG1lc3NhZ2VzIGZvciBtYXJrcyB1cCB0byB0aGUgY3VycmVudCB0aW1lXHJcbiAgICAgIHdoaWxlIChcclxuICAgICAgICAhdGhpcy5fZG9uZSAmJlxyXG4gICAgICAgIHRoaXMuX2N1cnJlbnRNYXJrLnRpbWUgKyB0aGlzLl9zcGVlY2htYXJrT2Zmc2V0IDw9IHRoaXMuX2xvY2FsVGltZVxyXG4gICAgICApIHtcclxuICAgICAgICB0aGlzLl9zcGVha2VyLmVtaXQoXHJcbiAgICAgICAgICB0aGlzLl9zcGVha2VyLmNvbnN0cnVjdG9yLkVWRU5UU1t0aGlzLl9jdXJyZW50TWFyay50eXBlXSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgc3BlZWNoOiB0aGlzLFxyXG4gICAgICAgICAgICBtYXJrOiB0aGlzLl9jdXJyZW50TWFyayxcclxuICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbnN0IHt2YWx1ZSwgZG9uZX0gPSB0aGlzLl9tYXJrSXRlci5uZXh0KCk7XHJcblxyXG4gICAgICAgIHRoaXMuX2N1cnJlbnRNYXJrID0gdmFsdWU7XHJcbiAgICAgICAgdGhpcy5fZG9uZSA9IGRvbmU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBFbmQgcGxheWJhY2tcclxuICAgIGlmICh0aGlzLl9jaGVja0ZpbmlzaGVkKCkpIHtcclxuICAgICAgdGhpcy5zdG9wKCk7XHJcbiAgICAgIHRoaXMuX3Jlc2V0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQbGF5IHRoZSBzcGVlY2ggZnJvbSB0aGUgYmVnaW5uaW5nLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IGN1cnJlbnRUaW1lIC0gQ3VycmVudCBnbG9iYWwgdGltZSB3aGVuIHBsYXkgd2FzIGNhbGxlZC5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb25GaW5pc2ggLSBPcHRpb25hbCBmdW5jdGlvbiB0byBleGVjdXRlIG9uY2UgdGhlIHNwZWVjaFxyXG4gICAqIHByb21pc2UgcmVzb2x2ZXMuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9uRXJyb3IgLSBPcHRpb25hbCBmdW5jdGlvbiB0byBleGVjdXRlIGlmIHRoZSBzcGVlY2hcclxuICAgKiBlbmNvdW50ZXJzIGFuZCBlcnJvciBkdXJpbmcgcGxheWJhY2suXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9uSW50ZXJydXB0IC0gT3B0aW9uYWwgZnVuY3Rpb24gdG8gZXhlY3V0ZSBpZiB0aGUgc3BlZWNoXHJcbiAgICogaXMgY2FuY2VsZWQuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7RGVmZXJyZWR9IFJlc29sdmVzIG9uY2UgdGhlIHNwZWVjaCByZWFjaGVzIHRoZSBlbmQgb2YgcGxheWJhY2suXHJcbiAgICovXHJcbiAgcGxheShjdXJyZW50VGltZSwgb25GaW5pc2gsIG9uRXJyb3IsIG9uSW50ZXJydXB0KSB7XHJcbiAgICB0aGlzLl9yZXNldChjdXJyZW50VGltZSk7XHJcbiAgICB0aGlzLl9wbGF5aW5nID0gdHJ1ZTtcclxuXHJcbiAgICB0aGlzLl9zcGVha2VyLmVtaXQodGhpcy5fc3BlYWtlci5jb25zdHJ1Y3Rvci5FVkVOVFMucGxheSwgdGhpcyk7XHJcbiAgICB0aGlzLl9zcGVha2VyLmNvbnN0cnVjdG9yLmVtaXQodGhpcy5fc3BlYWtlci5jb25zdHJ1Y3Rvci5FVkVOVFMucGxheSwgdGhpcyk7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuX2NyZWF0ZVByb21pc2Uob25GaW5pc2gsIG9uRXJyb3IsIG9uSW50ZXJydXB0KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFBhdXNlIHRoZSBzcGVlY2ggYXQgdGhlIGN1cnJlbnQgdGltZS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBjdXJyZW50VGltZSAtIEN1cnJlbnQgZ2xvYmFsIHRpbWUgd2hlbiBwYXVzZSB3YXMgY2FsbGVkLlxyXG4gICAqL1xyXG4gIHBhdXNlKGN1cnJlbnRUaW1lKSB7XHJcbiAgICB0aGlzLl9wbGF5aW5nID0gZmFsc2U7XHJcbiAgICB0aGlzLl9wYXVzZVRpbWUgPSBjdXJyZW50VGltZTtcclxuXHJcbiAgICB0aGlzLl9zcGVha2VyLmVtaXQodGhpcy5fc3BlYWtlci5jb25zdHJ1Y3Rvci5FVkVOVFMucGF1c2UsIHRoaXMpO1xyXG4gICAgdGhpcy5fc3BlYWtlci5jb25zdHJ1Y3Rvci5lbWl0KFxyXG4gICAgICB0aGlzLl9zcGVha2VyLmNvbnN0cnVjdG9yLkVWRU5UUy5wYXVzZSxcclxuICAgICAgdGhpc1xyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlc3VtZSB0aGUgc3BlZWNoIGF0IHRoZSBjdXJyZW50IHRpbWUuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge251bWJlcn0gY3VycmVudFRpbWUgLSBDdXJyZW50IGdsb2JhbCB0aW1lIHdoZW4gcmVzdW1lIHdhcyBjYWxsZWQuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9uRmluaXNoIC0gT3B0aW9uYWwgZnVuY3Rpb24gdG8gZXhlY3V0ZSBvbmNlIHRoZSBzcGVlY2hcclxuICAgKiBwcm9taXNlIHJlc29sdmVzLlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvbkVycm9yIC0gT3B0aW9uYWwgZnVuY3Rpb24gdG8gZXhlY3V0ZSBpZiB0aGUgc3BlZWNoXHJcbiAgICogZW5jb3VudGVycyBhbmQgZXJyb3IgZHVyaW5nIHBsYXliYWNrLlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvbkludGVycnVwdCAtIE9wdGlvbmFsIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgaWYgdGhlIHNwZWVjaFxyXG4gICAqIGlzIGNhbmNlbGVkLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0RlZmVycmVkfSBSZXNvbHZlcyBvbmNlIHRoZSBzcGVlY2ggcmVhY2hlcyB0aGUgZW5kIG9mIHBsYXliYWNrLlxyXG4gICAqL1xyXG4gIHJlc3VtZShjdXJyZW50VGltZSwgb25GaW5pc2gsIG9uRXJyb3IsIG9uSW50ZXJydXB0KSB7XHJcbiAgICAvLyBQbGF5IGZyb20gdGhlIGJlZ2lubmluZyBpZiB0aGUgc3BlZWNoIGhhc24ndCBwbGF5ZWQgeWV0XHJcbiAgICBpZiAoIXRoaXMuX3Byb21pc2UpIHtcclxuICAgICAgdGhpcy5fcmVzZXQoY3VycmVudFRpbWUpO1xyXG4gICAgICB0aGlzLl9jcmVhdGVQcm9taXNlKG9uRmluaXNoLCBvbkVycm9yLCBvbkludGVycnVwdCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fcGxheWluZyA9IHRydWU7XHJcbiAgICB0aGlzLl9zdGFydFRpbWUgKz0gY3VycmVudFRpbWUgLSB0aGlzLl9wYXVzZVRpbWU7XHJcblxyXG4gICAgdGhpcy5fc3BlYWtlci5lbWl0KHRoaXMuX3NwZWFrZXIuY29uc3RydWN0b3IuRVZFTlRTLnJlc3VtZSwgdGhpcyk7XHJcbiAgICB0aGlzLl9zcGVha2VyLmNvbnN0cnVjdG9yLmVtaXQoXHJcbiAgICAgIHRoaXMuX3NwZWFrZXIuY29uc3RydWN0b3IuRVZFTlRTLnJlc3VtZSxcclxuICAgICAgdGhpc1xyXG4gICAgKTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5fcHJvbWlzZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENhbmNlbHMgcGxheWJhY2sgb2YgdGhlIHNwZWVjaCBhdCB0aGUgY3VycmVudCB0aW1lLiBDYW5jZWwgdGhlIHNwZWVjaCBwcm9taXNlLlxyXG4gICAqL1xyXG4gIGNhbmNlbCgpIHtcclxuICAgIGlmICh0aGlzLl9wcm9taXNlKSB7XHJcbiAgICAgIHRoaXMuX3Byb21pc2UuY2FuY2VsKCk7XHJcbiAgICAgIHRoaXMuX3Byb21pc2UgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX3BsYXlpbmcgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFN0b3AgdGhlIHNwZWVjaCBhbmQgcmVzZXQgdGltZSB0byB0aGUgYmVnaW5uaW5nLiBSZXNvbHZlIHRoZSBzcGVlY2ggcHJvbWlzZS5cclxuICAgKi9cclxuICBzdG9wKCkge1xyXG4gICAgaWYgKHRoaXMuX3Byb21pc2UpIHtcclxuICAgICAgdGhpcy5fcHJvbWlzZS5yZXNvbHZlKCk7XHJcbiAgICAgIHRoaXMuX3Byb21pc2UgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX3BsYXlpbmcgPSBmYWxzZTtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IEFic3RyYWN0U3BlZWNoO1xyXG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cclxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVC0wXHJcbmltcG9ydCBBYnN0cmFjdFNwZWVjaCBmcm9tICcuL0Fic3RyYWN0U3BlZWNoJztcclxuXHJcbi8qKlxyXG4gKiBUaGUgYnVpbHQtaW4gY2xhc3MgZm9yIGFzeW5jaHJvbm91cyBQcm9taXNlcy5cclxuICogQGV4dGVybmFsIEF1ZGlvXHJcbiAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0hUTUxBdWRpb0VsZW1lbnQvQXVkaW9cclxuICovXHJcblxyXG4vKipcclxuICogQGV4dGVuZHMgQWJzdHJhY3RTcGVlY2hcclxuICogQGFsaWFzIGNvcmUvU3BlZWNoXHJcbiAqL1xyXG5jbGFzcyBTcGVlY2ggZXh0ZW5kcyBBYnN0cmFjdFNwZWVjaCB7XHJcbiAgLyoqXHJcbiAgICogQGNvbnN0cnVjdG9yXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge1RleHRUb1NwZWVjaH0gc3BlYWtlciAtIFRoZSBvd25lciBvZiB0aGUgU3BlZWNoIHRoYXQgd2lsbCBlbWl0IHNwZWVjaG1hcmtcclxuICAgKiBtZXNzYWdlcy5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIFRoZSB0ZXh0IG9mIHRoZSBzcGVlY2guXHJcbiAgICogQHBhcmFtIHtBcnJheS48T2JqZWN0Pn0gW3NwZWVjaG1hcmtzPVtdXSAtIEFuIGFycmF5IG9mIHNwZWVjaG1hcmsgb2JqZWN0cyByZXByZXNlbnRpbmdcclxuICAgKiB0aGUgdGV4dCBhbmQgdGltaW5nIG9mIHRoZSBzcGVlY2guXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IGF1ZGlvQ29uZmlnIC0gT2JqZWN0IGNvbnRhaW5pbmcgYXVkaW8gYW5kIHVybC5cclxuICAgKiBAcGFyYW0ge2V4dGVybmFsOkF1ZGlvfSBhdWRpb0NvbmZpZy5hdWRpbyAtIFBsYXlhYmxlIGF1ZGlvIG9iamVjdC5cclxuICAgKi9cclxuICBjb25zdHJ1Y3RvcihzcGVha2VyLCB0ZXh0LCBzcGVlY2htYXJrcyA9IFtdLCBhdWRpb0NvbmZpZykge1xyXG4gICAgc3VwZXIoc3BlYWtlciwgdGV4dCwgc3BlZWNobWFya3MpO1xyXG4gICAgdGhpcy5fYXVkaW8gPSBhdWRpb0NvbmZpZy5hdWRpbztcclxuXHJcbiAgICAvLyBLZWVwIHRyYWNrIG9mIHdoZXRoZXIgdGhlIGF1ZGlvIGhhcyBmaW5pc2hlZCBwbGF5aW5nIHRocm91Z2hcclxuICAgIHRoaXMuX2F1ZGlvLm9uZW5kZWQgPSAoKSA9PiB7XHJcbiAgICAgIHRoaXMuX2F1ZGlvRmluaXNoZWQgPSB0cnVlO1xyXG4gICAgfTtcclxuICAgIHRoaXMuX2F1ZGlvRmluaXNoZWQgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgX2NoZWNrRmluaXNoZWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fYXVkaW9GaW5pc2hlZCAmJiBzdXBlci5fY2hlY2tGaW5pc2hlZCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgcGxheWFibGUgYXVkaW8gZm9yIHRoZSBzcGVlY2guXHJcbiAgICpcclxuICAgKiBAcmVhZG9ubHlcclxuICAgKiBAdHlwZSB7ZXh0ZXJuYWw6QXVkaW99XHJcbiAgICovXHJcbiAgZ2V0IGF1ZGlvKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2F1ZGlvO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgYXVkaW8gdm9sdW1lIGZvciB0aGUgc3BlZWNoLlxyXG4gICAqXHJcbiAgICogQHR5cGUge251bWJlcn1cclxuICAgKi9cclxuICBnZXQgdm9sdW1lKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2F1ZGlvLnZvbHVtZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHMgdGhlIGF1ZGlvIHZvbHVtZSBmb3IgdGhlIHNwZWVjaC5cclxuICAgKi9cclxuICBzZXQgdm9sdW1lKHZvbHVtZSkge1xyXG4gICAgdGhpcy5fYXVkaW8udm9sdW1lID0gdm9sdW1lO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0IHRoZSBhdWRpbydzIGN1cnJlbnQgbG9jYWwgdGltZSBhbmQgcGxheSBpdC5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICovXHJcbiAgX3BsYXlBdWRpbygpIHtcclxuICAgIGlmICh0aGlzLl9zcGVlY2htYXJrT2Zmc2V0IDwgMCkge1xyXG4gICAgICB0aGlzLl9hdWRpby5jdXJyZW50VGltZSA9IHRoaXMuX3NwZWVjaG1hcmtPZmZzZXQ7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLl9wbGF5aW5nKSB7XHJcbiAgICAgICAgICB0aGlzLl9hdWRpby5jdXJyZW50VGltZSA9XHJcbiAgICAgICAgICAgICh0aGlzLl9sb2NhbFRpbWUgKyB0aGlzLl9zcGVlY2htYXJrT2Zmc2V0KSAvIDEwMDA7XHJcbiAgICAgICAgICB0aGlzLl9hdWRpby5wbGF5KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LCAtdGhpcy5fc3BlZWNobWFya09mZnNldCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9hdWRpby5jdXJyZW50VGltZSA9IDA7XHJcbiAgICAgIHRoaXMuX2F1ZGlvLnBsYXkoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFBhdXNlIHRoZSBhdWRpbyBvbmNlIGl0IGlzIHBsYXlhYmxlLlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBfcGF1c2VBdWRpbygpIHtcclxuICAgIHRoaXMuX2F1ZGlvLnBsYXkoKS50aGVuKCgpID0+IHtcclxuICAgICAgaWYgKCF0aGlzLl9wbGF5aW5nKSB7XHJcbiAgICAgICAgdGhpcy5fYXVkaW8ucGF1c2UoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwbGF5KGN1cnJlbnRUaW1lLCBvbkZpbmlzaCwgb25FcnJvciwgb25JbnRlcnJ1cHQpIHtcclxuICAgIHRoaXMuX2F1ZGlvRmluaXNoZWQgPSBmYWxzZTtcclxuICAgIHRoaXMuX3BsYXlBdWRpbygpO1xyXG5cclxuICAgIHJldHVybiBzdXBlci5wbGF5KGN1cnJlbnRUaW1lLCBvbkZpbmlzaCwgb25FcnJvciwgb25JbnRlcnJ1cHQpO1xyXG4gIH1cclxuXHJcbiAgcGF1c2UoY3VycmVudFRpbWUpIHtcclxuICAgIHRoaXMuX3BhdXNlQXVkaW8oKTtcclxuICAgIHN1cGVyLnBhdXNlKGN1cnJlbnRUaW1lKTtcclxuICB9XHJcblxyXG4gIHJlc3VtZShjdXJyZW50VGltZSwgb25GaW5pc2gsIG9uRXJyb3IsIG9uSW50ZXJydXB0KSB7XHJcbiAgICB0aGlzLl9hdWRpb0ZpbmlzaGVkID0gZmFsc2U7XHJcbiAgICB0aGlzLl9hdWRpby5wbGF5KCk7XHJcblxyXG4gICAgcmV0dXJuIHN1cGVyLnJlc3VtZShjdXJyZW50VGltZSwgb25GaW5pc2gsIG9uRXJyb3IsIG9uSW50ZXJydXB0KTtcclxuICB9XHJcblxyXG4gIGNhbmNlbCgpIHtcclxuICAgIHRoaXMuX3BhdXNlQXVkaW8oKTtcclxuICAgIHN1cGVyLmNhbmNlbCgpO1xyXG4gIH1cclxuXHJcbiAgc3RvcCgpIHtcclxuICAgIHRoaXMuX3BhdXNlQXVkaW8oKTtcclxuICAgIHRoaXMuX2F1ZGlvLmN1cnJlbnRUaW1lID0gMDtcclxuICAgIHN1cGVyLnN0b3AoKTtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IFNwZWVjaDtcclxuIiwiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXHJcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxyXG5pbXBvcnQgQ29yZVNwZWVjaCBmcm9tICdjb3JlL2F3c3BhY2svU3BlZWNoJztcclxuXHJcbi8qKlxyXG4gKiBUaHJlZWpzIEF1ZGlvIG9iamVjdFxyXG4gKiBAZXh0ZXJuYWwgXCJUSFJFRS5BdWRpb1wiXHJcbiAqIEBzZWUgaHR0cHM6Ly90aHJlZWpzLm9yZy9kb2NzLyNhcGkvZW4vYXVkaW8vQXVkaW9cclxuICovXHJcblxyXG4vKipcclxuICogVGhyZWVqcyBQb3NpdGlvbmFsQXVkaW8gb2JqZWN0XHJcbiAqIEBleHRlcm5hbCBcIlRIUkVFLlBvc2l0aW9uYWxBdWRpb1wiXHJcbiAqIEBzZWUgaHR0cHM6Ly90aHJlZWpzLm9yZy9kb2NzLyNhcGkvZW4vYXVkaW8vUG9zaXRpb25hbEF1ZGlvXHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEBleHRlbmRzIGNvcmUvU3BlZWNoXHJcbiAqIEBhbGlhcyB0aHJlZS5qcy9TcGVlY2hcclxuICovXHJcbmNsYXNzIFNwZWVjaCBleHRlbmRzIENvcmVTcGVlY2gge1xyXG4gIC8qKlxyXG4gICAqIEBjb25zdHJ1Y3RvclxyXG4gICAqXHJcbiAgICogQHBhcmFtIHt0aHJlZS5qcy9UZXh0VG9TcGVlY2hGZWF0dXJlfSBzcGVha2VyIC0gVGhlIG93bmVyIG9mIHRoZSBTcGVlY2ggdGhhdFxyXG4gICAqIHdpbGwgZW1pdCBzcGVlY2htYXJrIG1lc3NhZ2VzLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gVGhlIHRleHQgb2YgdGhlIHNwZWVjaC5cclxuICAgKiBAcGFyYW0ge0FycmF5LjxPYmplY3Q+fSBzcGVlY2htYXJrcyAtIEFuIGFycmF5IG9mIHNwZWVjaG1hcmsgb2JqZWN0cyByZXByZXNlbnRpbmdcclxuICAgKiB0aGUgdGV4dCBhbmQgdGltaW5nIG9mIHRoZSBzcGVlY2guXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IGF1ZGlvQ29uZmlnIC0gT2JqZWN0IGNvbnRhaW5pbmcgYXVkaW8gYW5kIHVybC5cclxuICAgKiBAcGFyYW0ge2V4dGVybmFsOkF1ZGlvfSBhdWRpb0NvbmZpZy5hdWRpbyAtIFBsYXlhYmxlIGF1ZGlvIG9iamVjdC5cclxuICAgKiBAcGFyYW0geyhleHRlcm5hbDpcIlRIUkVFLkF1ZGlvXCJ8ZXh0ZXJuYWw6XCJUSFJFRS5Qb3NpdGlvbmFsQXVkaW9cIil9IGF1ZGlvQ29uZmlnLnRocmVlQXVkaW8gLVxyXG4gICAqIFRocmVlLmpzIGF1ZGlvIG9iamVjdC5cclxuICAgKi9cclxuICBjb25zdHJ1Y3Rvcih0ZXh0VG9TcGVlY2gsIHRleHQsIHNwZWVjaG1hcmtzID0gW10sIGF1ZGlvQ29uZmlnKSB7XHJcbiAgICBzdXBlcih0ZXh0VG9TcGVlY2gsIHRleHQsIHNwZWVjaG1hcmtzLCBhdWRpb0NvbmZpZyk7XHJcbiAgICB0aGlzLl90aHJlZUF1ZGlvID0gYXVkaW9Db25maWcudGhyZWVBdWRpbztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIFRocmVlLmpzIGF1ZGlvIG9iamVjdCBmb3IgdGhlIHNwZWVjaC5cclxuICAgKlxyXG4gICAqIEByZWFkb25seVxyXG4gICAqIEB0eXBlIHsoZXh0ZXJuYWw6XCJUSFJFRS5BdWRpb1wifGV4dGVybmFsOlwiVEhSRUUuUG9zaXRpb25hbEF1ZGlvXCIpfVxyXG4gICAqL1xyXG4gIGdldCBhdWRpbygpIHtcclxuICAgIHJldHVybiB0aGlzLl90aHJlZUF1ZGlvO1xyXG4gIH1cclxuXHJcbiAgX3BhdXNlQXVkaW8oKSB7XHJcbiAgICB0aGlzLl9hdWRpby5wYXVzZSgpO1xyXG4gIH1cclxuXHJcbiAgcGxheShjdXJyZW50VGltZSwgb25GaW5pc2gsIG9uRXJyb3IsIG9uSW50ZXJydXB0KSB7XHJcbiAgICAvLyBSZS1jb25uZWN0IHRoZSBBdWRpbyBlbGVtZW50IHRvIHN0b3AgcGxheWJhY2tcclxuICAgIHRoaXMuX3RocmVlQXVkaW8uZGlzY29ubmVjdCgpO1xyXG4gICAgdGhpcy5fdGhyZWVBdWRpby5jb25uZWN0KCk7XHJcblxyXG4gICAgcmV0dXJuIHN1cGVyLnBsYXkoY3VycmVudFRpbWUsIG9uRmluaXNoLCBvbkVycm9yLCBvbkludGVycnVwdCk7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBTcGVlY2g7XHJcbiIsIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxyXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTBcclxuaW1wb3J0IEFic3RyYWN0SG9zdEZlYXR1cmUgZnJvbSAnY29yZS9BYnN0cmFjdEhvc3RGZWF0dXJlJztcclxuaW1wb3J0IEFuaW1hdGlvblV0aWxzIGZyb20gJ2NvcmUvYW5pbXBhY2svQW5pbWF0aW9uVXRpbHMnO1xyXG5pbXBvcnQgTWF0aFV0aWxzIGZyb20gJ2NvcmUvTWF0aFV0aWxzJztcclxuaW1wb3J0IERlZmVycmVkIGZyb20gJ2NvcmUvRGVmZXJyZWQnO1xyXG5pbXBvcnQgU3BlZWNoIGZyb20gJy4vQWJzdHJhY3RTcGVlY2gnO1xyXG5pbXBvcnQgVGV4dFRvU3BlZWNoVXRpbHMgZnJvbSAnLi9UZXh0VG9TcGVlY2hVdGlscyc7XHJcblxyXG4vKipcclxuICogVGhlIEFtYXpvbiBQb2xseSBzZXJ2aWNlIG9iamVjdC5cclxuICogQGV4dGVybmFsIFBvbGx5XHJcbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0phdmFTY3JpcHRTREsvbGF0ZXN0L0FXUy9Qb2xseS5odG1sXHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBwcmVzaWduZXIgb2JqZWN0IHRoYXQgY2FuIGJlIHVzZWQgdG8gZ2VuZXJhdGUgcHJlc2lnbmVkIHVybHMgZm9yIHRoZSBQb2xseSBzZXJ2aWNlLlxyXG4gKiBAZXh0ZXJuYWwgUHJlc2lnbmVyXHJcbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0phdmFTY3JpcHRTREsvbGF0ZXN0L0FXUy9Qb2xseS9QcmVzaWduZXIuaHRtbFxyXG4gKi9cclxuXHJcbi8vIEF2YWlsYWJsZSBvcHRpb25zIGZvciBQb2xseVxyXG5jb25zdCBlbmdpbmVzID0gWydzdGFuZGFyZCcsICduZXVyYWwnXTtcclxuY29uc3QgYXVkaW9Gb3JtYXRzID0gWydtcDMnLCAnb2dnX3ZvcmJpcycsICdwY20nXTtcclxuY29uc3Qgc3BlZWNobWFya1R5cGVzID0gWydzZW50ZW5jZScsICdzc21sJywgJ3Zpc2VtZScsICd3b3JkJ107XHJcbmNvbnN0IHNhbXBsZVJhdGVzID0ge1xyXG4gIG1wMzoge1xyXG4gICAgcmF0ZXM6IFsnODAwMCcsICcxNjAwMCcsICcyMjA1MCcsICcyNDAwMCddLFxyXG4gICAgZGVmYXVsdHM6IHtcclxuICAgICAgc3RhbmRhcmQ6ICcyMDUwJyxcclxuICAgICAgbmV1cmFsOiAnMjQwMCcsXHJcbiAgICB9LFxyXG4gIH0sXHJcbiAgcGNtOiB7XHJcbiAgICByYXRlczogWyc4MDAwJywgJzE2MDAwJ10sXHJcbiAgICBkZWZhdWx0czoge1xyXG4gICAgICBzdGFuZGFyZDogJzE2MDAnLFxyXG4gICAgICBuZXVyYWw6ICcxNjAwJyxcclxuICAgIH0sXHJcbiAgfSxcclxufTtcclxuc2FtcGxlUmF0ZXMub2dnX3ZvcmJpcyA9IHNhbXBsZVJhdGVzLm1wMztcclxubGV0IGF3c1ZlcnNpb247XHJcblxyXG4vKipcclxuICogQmFzZSBjbGFzcyBmb3IgdHVybmluZyB0ZXh0IGlucHV0IGludG8gcGxheWFibGUgYXVkaW8uIFRoZXJlIHNob3VsZCBiZSBvbmUgaW5zdGFuY2VcclxuICogcGVyIHNwZWFrZXIsIGVhY2ggaW5zdGFuY2UgY2FuIHBsYXkgb25seSBvbmUgcGllY2Ugb2YgdGV4dCBhdCBhIHRpbWUuXHJcbiAqXHJcbiAqIEBleHRlbmRzIEFic3RyYWN0SG9zdEZlYXR1cmVcclxuICogQGFic3RyYWN0XHJcbiAqXHJcbiAqIEBwcm9wZXJ0eSB7KG51bWJlcnx1bmRlZmluZWQpfSBBV1NfVkVSU0lPTiAtIEdldHMgdGhlIHZlcnNpb24gb2YgQVdTIFNESyBiZWluZ1xyXG4gKiB1c2VkLiBXaWxsIGJlIHVuZGVmaW5lZCB1bnRpbCBbaW5pdGlhbGl6ZVNlcnZpY2Vde0BsaW5rIEFic3RyYWN0VGV4dFRvU3BlZWNoRmVhdHVyZS5pbml0aWFsaXplU2VydmljZX1cclxuICogaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IGV4ZWN1dGVkLlxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW1BPTExZX01JTl9ORVVSQUxfVkVSU0lPTj0nMi41MDMnXSAtIEdldHMgdGhlIG1pbmltdW0gdmVyc2lvblxyXG4gKiBvZiB0aGUgQVdTIFNESyB0aGF0IGlzIG5lY2Vzc2FyeSB0byB1c2UgbmV1cmFsIHZvaWNlcyB3aXRoIEFXUyBQb2xseS5cclxuICogQHByb3BlcnR5IHtPYmplY3R9IFBPTExZX0RFRkFVTFRTIC0gRGVmYXVsdCB2YWx1ZXMgdG8gdXNlIHdpdGggY2FsbHMgdG8ge0BsaW5rIGV4dGVybmFsOlBvbGx5fS5cclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtQT0xMWV9ERUZBVUxUUy5FbmdpbmU9J3N0YW5kYXJkJ11cclxuICogQHByb3BlcnR5IHtBcnJheS48c3RyaW5nPn0gW1BPTExZX0RFRkFVTFRTLkxleGljb25OYW1lcz1bXV1cclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtQT0xMWV9ERUZBVUxUUy5PdXRwdXRGb3JtYXQ9J21wMyddXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbUE9MTFlfREVGQVVMVFMuU2FtcGxlUmF0ZT0nMjIwNTAnXVxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW1BPTExZX0RFRkFVTFRTLlRleHQ9JyddXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbUE9MTFlfREVGQVVMVFMuVGV4dFR5cGU9J3NzbWwnXVxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW1BPTExZX0RFRkFVTFRTLlZvaWNlSWQ9J0FteSddXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbUE9MTFlfREVGQVVMVFMuTGFuZ3VhZ2VDb2RlPSdlbi1HQiddXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbUE9MTFlfREVGQVVMVFMuTGFuZ3VhZ2VOYW1lPSdCcml0aXNoIEVuZ2xpc2gnXVxyXG4gKiBAcHJvcGVydHkge0FycmF5LjxzdHJpbmc+fSBbUE9MTFlfVk9JQ0VTPVtdXSAtIEFuIGFycmF5IG9mIHZvaWNlcyBhdmFpbGFibGUgaW5cclxuICogUG9sbHkuIFdpbGwgYmUgZW1wdHkgdW50aWwgW2luaXRpYWxpemVTZXJ2aWNlXXtAbGluayBBYnN0cmFjdFRleHRUb1NwZWVjaEZlYXR1cmUuaW5pdGlhbGl6ZVNlcnZpY2V9XHJcbiAqIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBleGVjdXRlZC4gU2VlIFtQb2xseSBEb2N1bWVudGF0aW9uXXtAbGluayBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vcG9sbHkvbGF0ZXN0L2RnL3ZvaWNlbGlzdC5odG1sfVxyXG4gKiBmb3IgYSBmdWxsIGxpc3Qgb2YgYXZhaWxhYmxlIHZvaWNlcy5cclxuICogQHByb3BlcnR5IHtPYmplY3R9IFtQT0xMWV9MQU5HVUFHRVM9e31dIC0gQW4gb2JqZWN0IHRoYXQgbWFwcyBsYW5ndWFnZSBuYW1lc1xyXG4gKiB0byBsYW5ndWFnZSBjb2RlcyB0aGF0IGFyZSBhdmFpbGFibGUgaW4gUG9sbHkuIFdpbGwgYmUgZW1wdHkgdW50aWxcclxuICogW2luaXRpYWxpemVTZXJ2aWNlXXtAbGluayBBYnN0cmFjdFRleHRUb1NwZWVjaEZlYXR1cmUuaW5pdGlhbGl6ZVNlcnZpY2V9XHJcbiAqIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBleGVjdXRlZC4gU2VlIFtQb2xseSBEb2N1bWVudGF0aW9uXXtAbGluayBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vcG9sbHkvbGF0ZXN0L2RnL1N1cHBvcnRlZExhbmd1YWdlLmh0bWx9XHJcbiAqIGZvciBhIGZ1bGwgbGlzdCBvZiBhdmFpbGFibGUgbGFuZ3VhZ2VzIGFuZCBjb3JyZXNwb25kaW5nIGNvZGVzLlxyXG4gKiBAcHJvcGVydHkge09iamVjdH0gW1BPTExZX0xBTkdVQUdFX0NPREVTPXt9XSAtIEFuIG9iamVjdCB0aGF0IG1hcHMgbGFuZ3VhZ2UgY29kZXNcclxuICogdG8gbGFuZ3VhZ2UgbmFtZXMgdGhhdCBhcmUgYXZhaWxhYmxlIGluIFBvbGx5LiBXaWxsIGJlIGVtcHR5IHVudGlsXHJcbiAqIFtpbml0aWFsaXplU2VydmljZV17QGxpbmsgQWJzdHJhY3RUZXh0VG9TcGVlY2hGZWF0dXJlLmluaXRpYWxpemVTZXJ2aWNlfVxyXG4gKiBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgZXhlY3V0ZWQuIFNlZSBbUG9sbHkgRG9jdW1lbnRhdGlvbl17QGxpbmsgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3BvbGx5L2xhdGVzdC9kZy9TdXBwb3J0ZWRMYW5ndWFnZS5odG1sfVxyXG4gKiBmb3IgYSBmdWxsIGxpc3Qgb2YgYXZhaWxhYmxlIGxhbmd1YWdlcyBhbmQgY29ycmVzcG9uZGluZyBjb2Rlcy5cclxuICogQHByb3BlcnR5IHtPYmplY3R9IEVWRU5UUyAtIEJ1aWx0LWluIG1lc3NhZ2VzIHRoYXQgdGhlIGZlYXR1cmUgZW1pdHMuIFdoZW4gdGhlXHJcbiAqIGZlYXR1cmUgaXMgYWRkZWQgdG8gYSB7QGxpbmsgY29yZS9Ib3N0T2JqZWN0fSwgZXZlbnQgbmFtZXMgd2lsbCBiZSBwcmVmaXhlZCBieSB0aGVcclxuICogbmFtZSBvZiB0aGUgZmVhdHVyZSBjbGFzcyArICcuJy5cclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtFVkVOVFMucmVhZHk9b25SZWFkeUV2ZW50XSAtIE1lc3NhZ2UgdGhhdCBpcyBlbWl0dGVkIGFmdGVyXHJcbiAqIFtpbml0aWFsaXplU2VydmljZV17QGxpbmsgQWJzdHJhY3RUZXh0VG9TcGVlY2hGZWF0dXJlLmluaXRpYWxpemVTZXJ2aWNlfSBoYXMgYmVlblxyXG4gKiBzdWNjZXNzZnVsbHkgZXhlY3V0ZWQuXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbRVZFTlRTLnBsYXk9b25QbGF5RXZlbnRdIC0gTWVzc2FnZSB0aGF0IGlzIGVtaXR0ZWQgYWZ0ZXJcclxuICogZWFjaCBjYWxsIHRvIFtwbGF5XXtAbGluayBBYnN0cmFjdFRleHRUb1NwZWVjaEZlYXR1cmUjcGxheX0uIFRoZSBzcGVlY2ggdGhhdCB3YXMgcGxheWVkXHJcbiAqIGlzIHN1cHBsaWVkIGFzIGFuIGFyZ3VtZW50IHRvIGxpc3RlbmVyIGZ1bmN0aW9ucy5cclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtFVkVOVFMucGF1c2U9b25QYXVzZUV2ZW50XSAtIE1lc3NhZ2UgdGhhdCBpcyBlbWl0dGVkIGFmdGVyXHJcbiAqIGVhY2ggY2FsbCB0byBbcGF1c2Vde0BsaW5rIEFic3RyYWN0VGV4dFRvU3BlZWNoRmVhdHVyZSNwYXVzZX0uIFRoZSBzcGVlY2ggdGhhdCB3YXMgcGF1c2VkXHJcbiAqIGlzIHN1cHBsaWVkIGFzIGFuIGFyZ3VtZW50IHRvIGxpc3RlbmVyIGZ1bmN0aW9ucy5cclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtFVkVOVFMucmVzdW1lPW9uUmVzdW1lRXZlbnRdIC0gTWVzc2FnZSB0aGF0IGlzIGVtaXR0ZWQgYWZ0ZXJcclxuICogZWFjaCBjYWxsIHRvIFtyZXN1bWVde0BsaW5rIEFic3RyYWN0VGV4dFRvU3BlZWNoRmVhdHVyZSNyZXN1bWV9LiBUaGUgc3BlZWNoIHRoYXQgd2FzXHJcbiAqIHJlc3VtZWQgaXMgc3VwcGxpZWQgYXMgYW4gYXJndW1lbnQgdG8gbGlzdGVuZXIgZnVuY3Rpb25zLlxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW0VWRU5UUy5pbnRlcnJ1cHQ9b25JbnRlcnJ1cHRFdmVudF0gLSBNZXNzYWdlIHRoYXQgaXMgZW1pdHRlZFxyXG4gKiBpZiB0aGVyZSBpcyBhIGN1cnJlbnQgc3BlZWNoIGluIHByb2dyZXNzIGFuZCBbcGxheV17QGxpbmsgQWJzdHJhY3RUZXh0VG9TcGVlY2hGZWF0dXJlI3BsYXl9XHJcbiAqIG9yIFtyZXN1bWVde0BsaW5rIEFic3RyYWN0VGV4dFRvU3BlZWNoRmVhdHVyZSNyZXN1bWV9IGFyZSBleGVjdXRlZCBmb3IgYSBuZXcgc3BlZWNoLlxyXG4gKiBUaGUgc3BlZWNoIHRoYXQgd2FzIGludGVycnVwdGVkIGlzIHN1cHBsaWVkIGFzIGFuIGFyZ3VtZW50IHRvIGxpc3RlbmVyIGZ1bmN0aW9ucy5cclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtFVkVOVFMuc3RvcD1vblN0b3BFdmVudF0gLSBNZXNzYWdlIHRoYXQgaXMgZW1pdHRlZCBhZnRlclxyXG4gKiBlYWNoIGNhbGwgdG8gW3N0b3Bde0BsaW5rIEFic3RyYWN0VGV4dFRvU3BlZWNoRmVhdHVyZSNzdG9wfSBhbmQgd2hlbiBhIHNwZWVjaCByZWFjaGVzXHJcbiAqIHRoZSBlbmQgb2YgcGxheWJhY2suIFRoZSBzcGVlY2ggdGhhdCB3YXMgc3RvcHBlZCBpcyBzdXBwbGllZCBhcyBhbiBhcmd1bWVudFxyXG4gKiB0byBsaXN0ZW5lciBmdW5jdGlvbnMuXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbRVZFTlRTLnNlbnRlbmNlPW9uU2VudGVuY2VFdmVudF0gLSBNZXNzYWdlIHRoYXQgaXMgZW1pdHRlZFxyXG4gKiBlYWNoIHRpbWUgYSBzZW50ZW5jZSBzcGVlY2htYXJrIGlzIGVuY291bnRlcmVkIHdob3NlIHRpbWVzdGFtcCBtYXRjaGVzIHVwIHdpdGhcclxuICogdGhlIHNwZWVjaCBhdWRpbydzIGN1cnJlbnQgdGltZS4gVGhlIHNlbnRlbmNlIHNwZWVjaG1hcmsgb2JqZWN0IGlzIHN1cHBsaWVkIGFzXHJcbiAqIGFuIGFyZ3VtZW50IHRvIGxpc3RlbmVyIGZ1bmN0aW9ucy5cclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtFVkVOVFMud29yZD1vbldvcmRFdmVudF0gLSBNZXNzYWdlIHRoYXQgaXMgZW1pdHRlZFxyXG4gKiBlYWNoIHRpbWUgYSB3b3JkIHNwZWVjaG1hcmsgaXMgZW5jb3VudGVyZWQgd2hvc2UgdGltZXN0YW1wIG1hdGNoZXMgdXAgd2l0aFxyXG4gKiB0aGUgc3BlZWNoIGF1ZGlvJ3MgY3VycmVudCB0aW1lLiBUaGUgd29yZCBzcGVlY2htYXJrIG9iamVjdCBpcyBzdXBwbGllZCBhc1xyXG4gKiBhbiBhcmd1bWVudCB0byBsaXN0ZW5lciBmdW5jdGlvbnMuXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbRVZFTlRTLnZpc2VtZT1vblZpc2VtZUV2ZW50XSAtIE1lc3NhZ2UgdGhhdCBpcyBlbWl0dGVkXHJcbiAqIGVhY2ggdGltZSBhIHZpc2VtZSBzcGVlY2htYXJrIGlzIGVuY291bnRlcmVkIHdob3NlIHRpbWVzdGFtcCBtYXRjaGVzIHVwIHdpdGhcclxuICogdGhlIHNwZWVjaCBhdWRpbydzIGN1cnJlbnQgdGltZS4gVGhlIHZpc2VtZSBzcGVlY2htYXJrIG9iamVjdCBpcyBzdXBwbGllZCBhc1xyXG4gKiBhbiBhcmd1bWVudCB0byBsaXN0ZW5lciBmdW5jdGlvbnMuXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbRVZFTlRTLnNzbWw9b25Tc21sRXZlbnRdIC0gTWVzc2FnZSB0aGF0IGlzIGVtaXR0ZWRcclxuICogZWFjaCB0aW1lIGEgc3NtbCBzcGVlY2htYXJrIGlzIGVuY291bnRlcmVkIHdob3NlIHRpbWVzdGFtcCBtYXRjaGVzIHVwIHdpdGhcclxuICogdGhlIHNwZWVjaCBhdWRpbydzIGN1cnJlbnQgdGltZS4gVGhlIHNzbWwgc3BlZWNobWFyayBvYmplY3QgaXMgc3VwcGxpZWQgYXNcclxuICogYW4gYXJndW1lbnQgdG8gbGlzdGVuZXIgZnVuY3Rpb25zLlxyXG4gKiBAcHJvcGVydHkge09iamVjdH0gU0VSVklDRVMgLSBBV1Mgc2VydmljZXMgdGhhdCBhcmUgbmVjZXNzYXJ5IGZvciB0aGUgZmVhdHVyZVxyXG4gKiB0byBmdW5jdGlvbi5cclxuICogQHByb3BlcnR5IHtleHRlcm5hbDpQb2xseX0gU0VSVklDRVMucG9sbHkgLSBUaGUgUG9sbHkgc2VydmljZSB0aGF0IGlzIHVzZWRcclxuICogdG8gc3ludGhlc2l6ZSBzcGVlY2htYXJrcy4gV2lsbCBiZSB1bmRlZmluZWQgdW50aWwgW2luaXRpYWxpemVTZXJ2aWNlXXtAbGluayBBYnN0cmFjdFRleHRUb1NwZWVjaEZlYXR1cmUuaW5pdGlhbGl6ZVNlcnZpY2V9XHJcbiAqIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBleGVjdXRlZFxyXG4gKiBAcHJvcGVydHkge2V4dGVybmFsOlByZXNpZ25lcn0gU0VSVklDRVMucHJlc2lnbmVyIC0gVGhlIFBvbGx5IFByZXNpZ25lclxyXG4gKiBvYmplY3QgdGhhdCBpcyB1c2VkIHRvIHN5bnRoZXNpemUgc3BlZWNoIGF1ZGlvLiBXaWxsIGJlIHVuZGVmaW5lZCB1bnRpbFxyXG4gKiBbaW5pdGlhbGl6ZVNlcnZpY2Vde0BsaW5rIEFic3RyYWN0VGV4dFRvU3BlZWNoRmVhdHVyZS5pbml0aWFsaXplU2VydmljZX1cclxuICogaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IGV4ZWN1dGVkLlxyXG4gKi9cclxuY2xhc3MgQWJzdHJhY3RUZXh0VG9TcGVlY2hGZWF0dXJlIGV4dGVuZHMgQWJzdHJhY3RIb3N0RmVhdHVyZSB7XHJcbiAgLyoqXHJcbiAgICogQGNvbnN0cnVjdG9yXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge2NvcmUvSG9zdE9iamVjdH0gaG9zdCAtIEhvc3Qgb2JqZWN0IG1hbmFnaW5nIHRoZSBmZWF0dXJlLlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0PX0gb3B0aW9ucyAtIE9wdGlvbnMgdGhhdCB3aWxsIGJlIHNlbnQgdG8gUG9sbHkgZm9yIGVhY2ggc3BlZWNoLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nPX0gb3B0aW9ucy52b2ljZSAtIFRoZSBuYW1lIG9mIHRoZSBQb2xseSB2b2ljZSB0byB1c2UgZm9yIGFsbCBzcGVlY2guXHJcbiAgICogQHBhcmFtIHtzdHJpbmc9fSBvcHRpb25zLmVuZ2luZSAtIFRoZSBuYW1lIG9mIHRoZSBQb2xseSBlbmdpbmUgdG8gdXNlIGZvciBhbGwgc3BlZWNoLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nPX0gb3B0aW9ucy5sYW5ndWFnZSAtIFRoZSBuYW1lIG9mIHRoZSBsYW5ndWFnZSB0byB1c2UgZm9yIGFsbCBzcGVlY2guXHJcbiAgICogQHBhcmFtIHthdWRpb0Zvcm1hdH0gW29wdGlvbnMuYXVkaW9Gb3JtYXQ9J21wMyddIC0gVGhlIGZvcm1hdCB0byB1c2UgZm9yIGdlbmVyYXRlZFxyXG4gICAqIGF1ZGlvIGZvciBhbGwgc3BlZWNoZXMuXHJcbiAgICogQHBhcmFtIHtzdHJpbmc9fSBvcHRpb25zLnNhbXBsZVJhdGUgLSBUaGUgc2FtcGxlIHJhdGUgZm9yIGF1ZGlvIGZpbGVzIGZvciBhbGxcclxuICAgKiBzcGVlY2hlcy5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMuc3BlZWNobWFya09mZnNldD0wXSAtIEFtb3VudCBvZiB0aW1lIGluIHNlY29uZHMgdG9cclxuICAgKiBvZmZzZXQgc3BlZWNobWFyayBldmVudCBlbWlzc2lvbiBmcm9tIHRoZSBhdWRpby5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMubWluRW5kTWFya0R1cmF0aW9uPS4wNV0gLSBUaGUgbWluaW11bSBhbW91bnQgb2YgdGltZVxyXG4gICAqIGluIHNlY29uZHMgdGhhdCB0aGUgbGFzdCBzcGVlY2htYXJrIG9mIGVhY2ggdHlwZSBpbiBhIHNwZWVjaCBjYW4gaGF2ZSBpdHNcclxuICAgKiBkdXJhdGlvbiBwcm9wZXJ0eSBzZXQgdG8uXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLnZvbHVtZT0xXSAtIFRoZSBkZWZhdWx0IHZvbHVtZSB0byBwbGF5IHNwZWVjaCBhdWRpb1xyXG4gICAqIHdpdGguXHJcbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5pc0dsb2JhbD1mYWxzZV0gLSBXaGV0aGVyIHRoZSBhdWRpbyBzb3VyY2Ugc2hvdWxkIGRlZmF1bHRcclxuICAgKiB0byBnbG9iYWwgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIG9yIG5vdCBpdCBpcyBhdHRhY2hlZCB0byBhbiBvYmplY3QuXHJcbiAgICovXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBob3N0LFxyXG4gICAgb3B0aW9ucyA9IHtcclxuICAgICAgdm9pY2U6IHVuZGVmaW5lZCxcclxuICAgICAgZW5naW5lOiB1bmRlZmluZWQsXHJcbiAgICAgIGxhbmd1YWdlOiB1bmRlZmluZWQsXHJcbiAgICAgIGF1ZGlvRm9ybWF0OiAnbXAzJyxcclxuICAgICAgc2FtcGxlUmF0ZTogdW5kZWZpbmVkLFxyXG4gICAgICBzcGVlY2htYXJrT2Zmc2V0OiAwLFxyXG4gICAgICBtaW5FbmRNYXJrRHVyYXRpb246IDAuMDUsXHJcbiAgICAgIHZvbHVtZTogMSxcclxuICAgICAgaXNHbG9iYWw6IGZhbHNlLFxyXG4gICAgfVxyXG4gICkge1xyXG4gICAgc3VwZXIoaG9zdCk7XHJcblxyXG4gICAgdGhpcy5fc3BlZWNoQ2FjaGUgPSB7fTtcclxuICAgIHRoaXMuX2N1cnJlbnRTcGVlY2ggPSBudWxsO1xyXG4gICAgdGhpcy5fY3VycmVudFByb21pc2UgPSBudWxsO1xyXG4gICAgdGhpcy5faXNWYWxpZGF0ZWQgPSBmYWxzZTtcclxuICAgIHRoaXMuc3BlZWNobWFya09mZnNldCA9IE51bWJlci5pc05hTihOdW1iZXIob3B0aW9ucy5zcGVlY2htYXJrT2Zmc2V0KSlcclxuICAgICAgPyAwXHJcbiAgICAgIDogTnVtYmVyKG9wdGlvbnMuc3BlZWNobWFya09mZnNldCk7XHJcbiAgICB0aGlzLm1pbkVuZE1hcmtEdXJhdGlvbiA9IE51bWJlci5pc05hTihOdW1iZXIob3B0aW9ucy5taW5FbmRNYXJrRHVyYXRpb24pKVxyXG4gICAgICA/IDBcclxuICAgICAgOiBOdW1iZXIob3B0aW9ucy5taW5FbmRNYXJrRHVyYXRpb24pO1xyXG4gICAgdGhpcy52b2x1bWUgPSBOdW1iZXIuaXNOYU4oTnVtYmVyKG9wdGlvbnMudm9sdW1lKSlcclxuICAgICAgPyAxXHJcbiAgICAgIDogTnVtYmVyKG9wdGlvbnMudm9sdW1lKTtcclxuICAgIHRoaXMuX2lzR2xvYmFsID0gb3B0aW9ucy5pc0dsb2JhbCB8fCBmYWxzZTtcclxuICAgIHRoaXMuX3Byb21pc2VzID0ge1xyXG4gICAgICB2b2x1bWU6IERlZmVycmVkLnJlc29sdmUoKSxcclxuICAgIH07XHJcbiAgICB0aGlzLl92b2x1bWVQYXVzZWQgPSBmYWxzZTtcclxuXHJcbiAgICAvLyBTZXQgZGVmYXVsdCBvcHRpb25zIGZvciBlYWNoIHNwZWVjaFxyXG4gICAgdGhpcy5fdm9pY2UgPSBvcHRpb25zLnZvaWNlIHx8IHRoaXMuY29uc3RydWN0b3IuUE9MTFlfREVGQVVMVFMuVm9pY2VJZDtcclxuICAgIHRoaXMuX2xhbmd1YWdlID1cclxuICAgICAgb3B0aW9ucy5sYW5ndWFnZSB8fCB0aGlzLmNvbnN0cnVjdG9yLlBPTExZX0RFRkFVTFRTLkxhbmd1YWdlTmFtZTtcclxuICAgIHRoaXMuX2VuZ2luZSA9IGVuZ2luZXMuaW5jbHVkZXMob3B0aW9ucy5lbmdpbmUpXHJcbiAgICAgID8gb3B0aW9ucy5lbmdpbmVcclxuICAgICAgOiB0aGlzLmNvbnN0cnVjdG9yLlBPTExZX0RFRkFVTFRTLkVuZ2luZTtcclxuICAgIHRoaXMuX2F1ZGlvRm9ybWF0ID0gYXVkaW9Gb3JtYXRzLmluY2x1ZGVzKG9wdGlvbnMuYXVkaW9Gb3JtYXQpXHJcbiAgICAgID8gb3B0aW9ucy5hdWRpb0Zvcm1hdFxyXG4gICAgICA6IHRoaXMuY29uc3RydWN0b3IuUE9MTFlfREVGQVVMVFMuT3V0cHV0Rm9ybWF0O1xyXG4gICAgdGhpcy5fc2FtcGxlUmF0ZSA9IHNhbXBsZVJhdGVzW3RoaXMuX2F1ZGlvRm9ybWF0XS5yYXRlcy5pbmNsdWRlcyhcclxuICAgICAgb3B0aW9ucy5zYW1wbGVSYXRlXHJcbiAgICApXHJcbiAgICAgID8gb3B0aW9ucy5zYW1wbGVSYXRlXHJcbiAgICAgIDogdGhpcy5jb25zdHJ1Y3Rvci5QT0xMWV9ERUZBVUxUUy5TYW1wbGVSYXRlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU3RvcmUgUG9sbHksIFByZXNpZ25lciBhbmQgQVdTIFNESyBWZXJzaW9uIGZvciB1c2UgYWNyb3NzIGFsbCBpbnN0YW5jZXMuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge2V4dGVybmFsOlBvbGx5fSBwb2xseSAtIFBvbGx5IGluc3RhbmNlIHRvIHVzZSB0byBnZW5lcmF0ZSBzcGVlY2htYXJrcy5cclxuICAgKiBAcGFyYW0ge2V4dGVybmFsOlByZXNpZ25lcn0gcHJlc2lnbmVyIC0gUHJlc2lnbmVyIGluc3RhbmNlIHRvIHVzZSB0byBnZW5lcmF0ZVxyXG4gICAqIGF1ZGlvIFVSTHMuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHZlcnNpb24gLSBWZXJzaW9uIG9mIHRoZSBBV1MgU0RLIHRvIHVzZSB0byB2YWxpZGF0ZSB2b2ljZSBvcHRpb25zLlxyXG4gICAqL1xyXG4gIHN0YXRpYyBpbml0aWFsaXplU2VydmljZShwb2xseSwgcHJlc2lnbmVyLCB2ZXJzaW9uKSB7XHJcbiAgICAvLyBNYWtlIHN1cmUgYWxsIHdlcmUgZGVmaW5lZFxyXG4gICAgaWYgKFxyXG4gICAgICBwb2xseSA9PT0gdW5kZWZpbmVkIHx8XHJcbiAgICAgIHByZXNpZ25lciA9PT0gdW5kZWZpbmVkIHx8XHJcbiAgICAgIHZlcnNpb24gPT09IHVuZGVmaW5lZFxyXG4gICAgKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICAnQ2Fubm90IGluaXRpYWxpemUgVGV4dFRvU3BlZWNoIGZlYXR1cmUuIEFsbCBhcmd1bWVudHMgbXVzdCBiZSBkZWZpbmVkLidcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBBZGQgc3VtZXJpYW4gaG9zdHMgdXNlci1hZ2VudFxyXG4gICAgaWYgKHBvbGx5LmNvbmZpZykge1xyXG4gICAgICBwb2xseS5jb25maWcuY3VzdG9tVXNlckFnZW50ID0gdGhpcy5fd2l0aEN1c3RvbVVzZXJBZ2VudChcclxuICAgICAgICBwb2xseS5jb25maWcuY3VzdG9tVXNlckFnZW50XHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICBpZiAocHJlc2lnbmVyLnNlcnZpY2UgJiYgcHJlc2lnbmVyLnNlcnZpY2UuY29uZmlnKSB7XHJcbiAgICAgIHByZXNpZ25lci5zZXJ2aWNlLmNvbmZpZy5jdXN0b21Vc2VyQWdlbnQgPSB0aGlzLl93aXRoQ3VzdG9tVXNlckFnZW50KFxyXG4gICAgICAgIHByZXNpZ25lci5zZXJ2aWNlLmNvbmZpZy5jdXN0b21Vc2VyQWdlbnRcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9pc1JlYWR5ID0gZmFsc2U7XHJcblxyXG4gICAgLy8gU3RvcmUgcGFyYW1ldGVyc1xyXG4gICAgdGhpcy5TRVJWSUNFUy5wb2xseSA9IHBvbGx5O1xyXG4gICAgdGhpcy5TRVJWSUNFUy5wcmVzaWduZXIgPSBwcmVzaWduZXI7XHJcbiAgICBhd3NWZXJzaW9uID0gdmVyc2lvbjtcclxuXHJcbiAgICAvLyBDbGVhciB0aGUgY3VycmVudCBwb2xseSBvYmplY3RzXHJcbiAgICBjb25zdCBhdmFpbGFibGVWb2ljZXMgPSB0aGlzLlBPTExZX1ZPSUNFUztcclxuICAgIGF2YWlsYWJsZVZvaWNlcy5sZW5ndGggPSAwO1xyXG5cclxuICAgIGNvbnN0IGF2YWlsYWJsZUxhbmd1YWdlcyA9IHRoaXMuUE9MTFlfTEFOR1VBR0VTO1xyXG4gICAgT2JqZWN0LmtleXMoYXZhaWxhYmxlTGFuZ3VhZ2VzKS5mb3JFYWNoKG5hbWUgPT4ge1xyXG4gICAgICBkZWxldGUgYXZhaWxhYmxlTGFuZ3VhZ2VzW25hbWVdO1xyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgYXZhaWxhYmxlTGFuZ3VhZ2VDb2RlcyA9IHRoaXMuUE9MTFlfTEFOR1VBR0VfQ09ERVM7XHJcbiAgICBPYmplY3Qua2V5cyhhdmFpbGFibGVMYW5ndWFnZUNvZGVzKS5mb3JFYWNoKG5hbWUgPT4ge1xyXG4gICAgICBkZWxldGUgYXZhaWxhYmxlTGFuZ3VhZ2VDb2Rlc1tuYW1lXTtcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIFJlLXBvcHVsYXRlIGFjY29yZGluZyB0byB2ZXJzaW9uXHJcbiAgICBjb25zdCBtaW5OZXVyYWxTZGsgPSB0aGlzLlBPTExZX01JTl9ORVVSQUxfVkVSU0lPTjtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5TRVJWSUNFUy5wb2xseVxyXG4gICAgICAuZGVzY3JpYmVWb2ljZXMoKVxyXG4gICAgICAucHJvbWlzZSgpXHJcbiAgICAgIC50aGVuKHJlc3BvbnNlID0+IHtcclxuICAgICAgICBjb25zdCBhbGxDb2RlcyA9IHt9O1xyXG5cclxuICAgICAgICByZXNwb25zZS5Wb2ljZXMuZm9yRWFjaCh2b2ljZSA9PiB7XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIHZvaWNlLlN1cHBvcnRlZEVuZ2luZXMuaW5jbHVkZXMoJ3N0YW5kYXJkJykgfHxcclxuICAgICAgICAgICAgdmVyc2lvbiA+PSBtaW5OZXVyYWxTZGtcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBhdmFpbGFibGVWb2ljZXMucHVzaCh2b2ljZSk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgYXZhaWxhYmxlVm9pY2VzLmZvckVhY2godm9pY2UgPT4ge1xyXG4gICAgICAgICAgICBhdmFpbGFibGVMYW5ndWFnZXNbdm9pY2UuTGFuZ3VhZ2VOYW1lXSA9IHZvaWNlLkxhbmd1YWdlQ29kZTtcclxuICAgICAgICAgICAgYWxsQ29kZXNbdm9pY2UuTGFuZ3VhZ2VDb2RlXSA9IHZvaWNlLkxhbmd1YWdlTmFtZTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBPYmplY3QuZW50cmllcyhhdmFpbGFibGVMYW5ndWFnZXMpLmZvckVhY2goKFtuYW1lLCBjb2RlXSkgPT4ge1xyXG4gICAgICAgICAgYXZhaWxhYmxlTGFuZ3VhZ2VDb2Rlc1tjb2RlXSA9IG5hbWU7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIC8vIE5vdGlmeSB0aGF0IHdlJ3JlIHJlYWR5IHRvIGdlbmVyYXRlIHNwZWVjaGVzXHJcbiAgICAgICAgdGhpcy5faXNSZWFkeSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5lbWl0KHRoaXMuRVZFTlRTLnJlYWR5KTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIGNsYXNzIGlzIGNhcGFibGUgb2YgZ2VuZXJhdGluZyBzcGVlY2ggYXVkaW8uIFBvbGx5LFxyXG4gICAqIFByZXNpZ25lciBhbmQgQVdTIFNESyB2ZXJzaW9uIG51bWJlciBtdXN0IGhhdmUgYmVlbiBkZWZpbmVkIHVzaW5nXHJcbiAgICogW2luaXRpYWxpemVTZXJ2aWNlXXtAbGluayBBYnN0cmFjdFRleHRUb1NwZWVjaEZlYXR1cmUuaW5pdGlhbGl6ZVNlcnZpY2V9LlxyXG4gICAqXHJcbiAgICogQHJlYWRvbmx5XHJcbiAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICovXHJcbiAgc3RhdGljIGdldCBpc1JlYWR5KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2lzUmVhZHk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSB0ZXh0IG9mIHRoZSBjdXJyZW50bHkgcGxheWluZyBzcGVlY2guXHJcbiAgICpcclxuICAgKiBAcmVhZG9ubHlcclxuICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAqL1xyXG4gIGdldCBjdXJyZW50U3BlZWNoKCkge1xyXG4gICAgaWYgKHRoaXMuX2N1cnJlbnRTcGVlY2gpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRTcGVlY2gudGV4dDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyBhbmQgc2V0cyB0aGUgbnVtYmVyIG9mIHNlY29uZHMgdG8gb2Zmc2V0IHNwZWVjaG1hcmsgZW1pc3Npb24uXHJcbiAgICpcclxuICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAqL1xyXG4gIGdldCBzcGVlY2htYXJrT2Zmc2V0KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NwZWVjaG1hcmtPZmZzZXQ7XHJcbiAgfVxyXG5cclxuICBzZXQgc3BlZWNobWFya09mZnNldChvZmZzZXQpIHtcclxuICAgIHRoaXMuX3NwZWVjaG1hcmtPZmZzZXQgPSBvZmZzZXQ7XHJcblxyXG4gICAgaWYgKHRoaXMuX2N1cnJlbnRTcGVlY2gpIHtcclxuICAgICAgdGhpcy5fY3VycmVudFNwZWVjaC5zcGVlY2htYXJrT2Zmc2V0ID0gb2Zmc2V0O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyBhbmQgc2V0cyB0aGUgVGhlIG1pbmltdW0gYW1vdW50IG9mIHRpbWUgaW4gc2Vjb25kcyB0aGF0IHRoZSBsYXN0XHJcbiAgICogc3BlZWNobWFyayBvZiBlYWNoIHR5cGUgaW4gYSBzcGVlY2ggY2FuIGhhdmUgaXRzIGR1cmF0aW9uIHByb3BlcnR5IHNldCB0by5cclxuICAgKlxyXG4gICAqIEB0eXBlIG51bWJlclxyXG4gICAqL1xyXG4gIGdldCBtaW5FbmRNYXJrRHVyYXRpb24oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fbWluRW5kTWFya0R1cmF0aW9uIC8gMTAwMDtcclxuICB9XHJcblxyXG4gIHNldCBtaW5FbmRNYXJrRHVyYXRpb24oZHVyYXRpb24pIHtcclxuICAgIHRoaXMuX21pbkVuZE1hcmtEdXJhdGlvbiA9IGR1cmF0aW9uICogMTAwMDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFwcGVuZHMgdGhlIFN1bWVyaWFuIEhvc3RzIGN1c3RvbSB1c2VyLWFnZW50IHRvIGEgc3RyaW5nIGlmIGl0IGlzIG5vdFxyXG4gICAqIGFscmVhZHkgcHJlc2VudC5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gY3VycmVudFVzZXJBZ2VudCAtIFN0cmluZyB0byBhcHBlbmQgdG8gaWYgbmVlZGVkLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge3N0cmluZ31cclxuICAgKi9cclxuICBzdGF0aWMgX3dpdGhDdXN0b21Vc2VyQWdlbnQoY3VycmVudFVzZXJBZ2VudCkge1xyXG4gICAgY29uc3Qgc3VtZXJpYW5Ib3N0c1VzZXJBZ2VudCA9ICdyZXF1ZXN0LXNvdXJjZS9TdW1lcmlhbkhvc3RzJztcclxuXHJcbiAgICBpZiAoY3VycmVudFVzZXJBZ2VudCA9PSBudWxsKSB7XHJcbiAgICAgIHJldHVybiBzdW1lcmlhbkhvc3RzVXNlckFnZW50O1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjdXJyZW50VXNlckFnZW50LmluZGV4T2Yoc3VtZXJpYW5Ib3N0c1VzZXJBZ2VudCkgIT09IC0xKSB7XHJcbiAgICAgIHJldHVybiBjdXJyZW50VXNlckFnZW50O1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBjdXJyZW50VXNlckFnZW50LmNvbmNhdCgnICcsIHN1bWVyaWFuSG9zdHNVc2VyQWdlbnQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2hlY2tzIGlmIGEgZ2l2ZW4gZW5naW5lIHR5cGUgaXMgY29tcGF0aWJsZSB3aXRoIHRoZSBBV1MgU0RLIHZlcnNpb24uIElmIGl0XHJcbiAgICogaXMsIHJldHVybiB0aGUgb3JpZ2luYWwgdmFsdWUuIE90aGVyd2lzZSByZXR1cm4gYSBkZWZhdWx0LlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBlbmdpbmUgLSBUaGUgdHlwZSBvZiBQb2xseSB2b2ljZSBlbmdpbmUgdG8gdmFsaWRhdGUuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxyXG4gICAqL1xyXG4gIF92YWxpZGF0ZUVuZ2luZShlbmdpbmUpIHtcclxuICAgIC8vIERlZmF1bHQgdG8gdGhlIHN0YW5kYXJkIGVuZ2luZSBpZiBuZXVyYWwgaXMgbm90IGF2YWlsYWJsZSBmb3IgdGhpcyB2ZXJzaW9uXHJcbiAgICBpZiAoXHJcbiAgICAgIGVuZ2luZSA9PT0gdW5kZWZpbmVkIHx8XHJcbiAgICAgIHRoaXMuY29uc3RydWN0b3IuQVdTX1ZFUlNJT04gPCB0aGlzLmNvbnN0cnVjdG9yLlBPTExZX01JTl9ORVVSQUxfVkVSU0lPTlxyXG4gICAgKSB7XHJcbiAgICAgIGVuZ2luZSA9IHRoaXMuY29uc3RydWN0b3IuUE9MTFlfREVGQVVMVFMuRW5naW5lO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBlbmdpbmU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDaGVja3MgaWYgYSBnaXZlbiBhdWRpbyBmb3JtYXQgdHlwZSBpcyBjb21wYXRpYmxlIHdpdGggUG9sbHkuIElmIGl0IGlzLCByZXR1cm5cclxuICAgKiB0aGUgb3JpZ2luYWwgdmFsdWUuIE90aGVyd2lzZSByZXR1cm4gYSBkZWZhdWx0LlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBlbmdpbmUgLSBUaGUgdHlwZSBvZiBQb2xseSB2b2ljZSBlbmdpbmUgdG8gdmFsaWRhdGUuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxyXG4gICAqL1xyXG4gIF92YWxpZGF0ZUZvcm1hdChmb3JtYXQpIHtcclxuICAgIGlmIChmb3JtYXQgPT09IHVuZGVmaW5lZCB8fCAhYXVkaW9Gb3JtYXRzLmluY2x1ZGVzKGZvcm1hdCkpIHtcclxuICAgICAgZm9ybWF0ID0gdGhpcy5jb25zdHJ1Y3Rvci5QT0xMWV9ERUZBVUxUUy5PdXRwdXRGb3JtYXQ7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZvcm1hdDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENoZWNrcyBpZiBhIGdpdmVuIGF1ZGlvIHNhbXBsaW5nIHJhdGUgaXMgY29tcGF0aWJsZSB3aXRoIHRoZSBjdXJyZW50IGF1ZGlvXHJcbiAgICogZm9ybWF0LiBJZiBpdCBpcywgcmV0dXJuIHRoZSBvcmlnaW5hbCB2YWx1ZS4gT3RoZXJ3aXNlIHJldHVybiBhIGRlZmF1bHQuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGVuZ2luZSAtIFRoZSB0eXBlIG9mIFBvbGx5IHZvaWNlIGVuZ2luZSB0byB2YWxpZGF0ZS5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XHJcbiAgICovXHJcbiAgX3ZhbGlkYXRlUmF0ZShyYXRlKSB7XHJcbiAgICAvLyBVc2UgZGVmYXVsdCBpZiBzcGVjaWZpZWQgc2FtcGxlIHJhdGUgaXMgbm90IHZhbGlkIGZvciB0aGUgYXVkaW8gZm9ybWF0XHJcbiAgICBpZiAoXHJcbiAgICAgIHJhdGUgPT09IHVuZGVmaW5lZCB8fFxyXG4gICAgICAhc2FtcGxlUmF0ZXNbdGhpcy5fYXVkaW9Gb3JtYXRdLnJhdGVzLmluY2x1ZGVzKHJhdGUpXHJcbiAgICApIHtcclxuICAgICAgcmF0ZSA9IHNhbXBsZVJhdGVzW3RoaXMuX2F1ZGlvRm9ybWF0XS5kZWZhdWx0c1t0aGlzLl9lbmdpbmVdO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiByYXRlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2hlY2tzIGlmIGEgZ2l2ZW4gUG9sbHkgdm9pY2UgaWQgaXMgY29tcGF0aWJsZSB3aXRoIHRoZSBjdXJyZW50IFBvbGx5IGVuZ2luZS5cclxuICAgKiBJZiBpdCBpcywgcmV0dXJuIHRoZSBvcmlnaW5hbCB2YWx1ZS4gT3RoZXJ3aXNlIHJldHVybiBhIGRlZmF1bHQuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGVuZ2luZSAtIFRoZSB0eXBlIG9mIFBvbGx5IHZvaWNlIGVuZ2luZSB0byB2YWxpZGF0ZS5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XHJcbiAgICovXHJcbiAgX3ZhbGlkYXRlVm9pY2Uodm9pY2VJZCkge1xyXG4gICAgY29uc3Qgdm9pY2UgPSB0aGlzLmNvbnN0cnVjdG9yLlBPTExZX1ZPSUNFUy5maW5kKHYgPT4gdi5JZCA9PT0gdm9pY2VJZCk7XHJcblxyXG4gICAgLy8gVXNlIHRoZSBkZWZhdWx0IHZvaWNlIGlmIHRoZSB2b2ljZSBpc24ndCBzdXBwb3J0ZWQgYnkgdGhlIGVuZ2luZVxyXG4gICAgaWYgKHZvaWNlID09PSB1bmRlZmluZWQgfHwgIXZvaWNlLlN1cHBvcnRlZEVuZ2luZXMuaW5jbHVkZXModGhpcy5fZW5naW5lKSkge1xyXG4gICAgICB2b2ljZUlkID0gdGhpcy5jb25zdHJ1Y3Rvci5QT0xMWV9ERUZBVUxUUy5Wb2ljZUlkO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB2b2ljZUlkO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2hlY2tzIGlmIGEgZ2l2ZW4gUG9sbHkgbGFuZ3VhZ2UgaXMgY29tcGF0aWJsZSB3aXRoIHRoZSBjdXJyZW50IFBvbGx5IHZvaWNlLlxyXG4gICAqIElmIGl0IGlzLCByZXR1cm4gdGhlIG9yaWdpbmFsIHZhbHVlLiBPdGhlcndpc2UgcmV0dXJuIGEgZGVmYXVsdC5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gZW5naW5lIC0gVGhlIHR5cGUgb2YgUG9sbHkgdm9pY2UgZW5naW5lIHRvIHZhbGlkYXRlLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge3N0cmluZ31cclxuICAgKi9cclxuICBfdmFsaWRhdGVMYW5ndWFnZShsYW5ndWFnZSkge1xyXG4gICAgY29uc3Qgdm9pY2UgPSB0aGlzLmNvbnN0cnVjdG9yLlBPTExZX1ZPSUNFUy5maW5kKHYgPT4gdi5JZCA9PT0gdGhpcy5fdm9pY2UpO1xyXG4gICAgY29uc3QgbGFuZ3VhZ2VDb2RlID0gdGhpcy5jb25zdHJ1Y3Rvci5QT0xMWV9MQU5HVUFHRVNbbGFuZ3VhZ2VdO1xyXG5cclxuICAgIC8vIEZpbmQgdGhlIGxhbmd1YWdlcyBhdmFpbGFibGUgZm9yIHRoZSBjdXJyZW50IHZvaWNlXHJcbiAgICBjb25zdCBhdmFpbGFibGVDb2RlcyA9IFt2b2ljZS5MYW5ndWFnZUNvZGVdO1xyXG4gICAgaWYgKHZvaWNlLkFkZGl0aW9uYWxMYW5ndWFnZUNvZGVzKSB7XHJcbiAgICAgIGF2YWlsYWJsZUNvZGVzLnB1c2goLi4udm9pY2UuQWRkaXRpb25hbExhbmd1YWdlQ29kZXMpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIElmIHRoZSBjdXJyZW50IHZvaWNlIGRvZXNuJ3Qgc3VwcG9ydCB0aGUgbGFuZ3VhZ2UsIHVzZSBpdHMgZGVmYXVsdFxyXG4gICAgaWYgKCFhdmFpbGFibGVDb2Rlcy5pbmNsdWRlcyhsYW5ndWFnZUNvZGUpKSB7XHJcbiAgICAgIGxhbmd1YWdlID0gdGhpcy5jb25zdHJ1Y3Rvci5QT0xMWV9MQU5HVUFHRV9DT0RFU1t2b2ljZS5MYW5ndWFnZUNvZGVdO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBsYW5ndWFnZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFZhbGlkYXRlIHRoZSBjdXJyZW50IFBvbGx5IG9wdGlvbnMgdG8gbWFrZSBzdXJlIHRoZXkgYXJlIGNvbXBhdGlibGUgd2l0aCBlYWNoXHJcbiAgICogb3RoZXIuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIF92YWxpZGF0ZSgpIHtcclxuICAgIC8vIFZhbGlkYXRlIHNwZWVjaCBwYXJhbWV0ZXJzXHJcbiAgICB0aGlzLl9lbmdpbmUgPSB0aGlzLl92YWxpZGF0ZUVuZ2luZSh0aGlzLl9lbmdpbmUpO1xyXG4gICAgdGhpcy5fYXVkaW9Gb3JtYXQgPSB0aGlzLl92YWxpZGF0ZUZvcm1hdCh0aGlzLl9hdWRpb0Zvcm1hdCk7XHJcbiAgICB0aGlzLl9zYW1wbGVSYXRlID0gdGhpcy5fdmFsaWRhdGVSYXRlKHRoaXMuX3NhbXBsZVJhdGUpO1xyXG4gICAgdGhpcy5fdm9pY2UgPSB0aGlzLl92YWxpZGF0ZVZvaWNlKHRoaXMuX3ZvaWNlKTtcclxuICAgIHRoaXMuX2xhbmd1YWdlID0gdGhpcy5fdmFsaWRhdGVMYW5ndWFnZSh0aGlzLl9sYW5ndWFnZSk7XHJcbiAgICB0aGlzLl9pc1ZhbGlkYXRlZCA9IHRydWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gYW4gb2JqZWN0IGNvbnRhaW5pbmcgcGFyYW1ldGVycyBjb21wYXRpYmxlIHdpdGggUG9sbHkuc3ludGhlc2l6ZVNwZWVjaC5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7T2JqZWN0fVxyXG4gICAqL1xyXG4gIF9nZXRDb25maWcoKSB7XHJcbiAgICAvLyBNYWtlIHN1cmUgcGFyYW1ldGVycyBoYXZlIGJlZW4gdmFsaWRhdGVkXHJcbiAgICBpZiAodGhpcy5jb25zdHJ1Y3Rvci5pc1JlYWR5ICYmICF0aGlzLl9pc1ZhbGlkYXRlZCkge1xyXG4gICAgICB0aGlzLl92YWxpZGF0ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIENyZWF0ZSBhIGNvbmZpZyBvYmplY3QgY29tcGF0aWJsZSB3aXRoIFBvbGx5XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBFbmdpbmU6IHRoaXMuX2VuZ2luZSxcclxuICAgICAgT3V0cHV0Rm9ybWF0OiB0aGlzLl9hdWRpb0Zvcm1hdCxcclxuICAgICAgU2FtcGxlUmF0ZTogdGhpcy5fc2FtcGxlUmF0ZSxcclxuICAgICAgVm9pY2VJZDogdGhpcy5fdm9pY2UsXHJcbiAgICAgIExhbmd1YWdlQ29kZTogdGhpcy5jb25zdHJ1Y3Rvci5QT0xMWV9MQU5HVUFHRVNbdGhpcy5fbGFuZ3VhZ2VdLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZSBQb2xseSBwYXJhbWV0ZXJzIHdpdGggb3B0aW9ucyBmcm9tIGEgZ2l2ZW4gY29uZmlnLiBBbGwgc3RvcmVkIHNwZWVjaGVzXHJcbiAgICogd2lsbCBiZSB1cGRhdGVkIHRvIHVzZSB0aGUgbmV3IHBhcmFtZXRlcnMsIHVubGVzcyB0aGUgc3BlZWNoIHRleHQgaXMgY29udGFpbmVkXHJcbiAgICogaW4gdGhlICdza2lwU3BlZWNoZXMnIHBhcmFtZXRlci5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge09iamVjdH0gY29uZmlnIC0gUG9sbHkgcGFyYW1ldGVyIG9wdGlvbnMgdG8gb3ZlcndyaXRlLlxyXG4gICAqIEBwYXJhbSB7QXJyYXkuPHN0cmluZz59IHNraXBTcGVlY2hlcyAtIFRleHQgb2YgYW55IHNwZWVjaGVzIHRoYXQgc2hvdWxkIG5vdFxyXG4gICAqIGhhdmUgcGFyYW1ldGVycyB1cGRhdGVkLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge09iamVjdH1cclxuICAgKi9cclxuICBfdXBkYXRlQ29uZmlnKGNvbmZpZywgc2tpcFNwZWVjaGVzID0gW10pIHtcclxuICAgIGNvbnN0IGN1cnJlbnRDb25maWcgPSB0aGlzLl9nZXRDb25maWcoKTtcclxuICAgIGlmICghY29uZmlnKSB7XHJcbiAgICAgIHJldHVybiBjdXJyZW50Q29uZmlnO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX2lzVmFsaWRhdGVkID0gZmFsc2U7XHJcbiAgICBjb25zdCBjdXJyZW50Q29uZmlnU3RyID0gSlNPTi5zdHJpbmdpZnkoY3VycmVudENvbmZpZyk7XHJcblxyXG4gICAgLy8gVXBkYXRlIG9wdGlvbnNcclxuICAgIGlmIChjb25maWcuRW5naW5lKSB7XHJcbiAgICAgIHRoaXMuX2VuZ2luZSA9IGNvbmZpZy5FbmdpbmU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNvbmZpZy5hdWRpb0Zvcm1hdCkge1xyXG4gICAgICB0aGlzLl9hdWRpb0Zvcm1hdCA9IGNvbmZpZy5hdWRpb0Zvcm1hdDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoY29uZmlnLlNhbXBsZVJhdGUpIHtcclxuICAgICAgdGhpcy5fc2FtcGxlUmF0ZSA9IGNvbmZpZy5TYW1wbGVSYXRlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjb25maWcuVm9pY2VJZCkge1xyXG4gICAgICB0aGlzLl92b2ljZSA9IGNvbmZpZy5Wb2ljZUlkO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjb25maWcuTGFuZ3VhZ2UpIHtcclxuICAgICAgdGhpcy5fbGFuZ3VhZ2UgPSBjb25maWcuTGFuZ3VhZ2U7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gVmFsaWRhdGUgdGhlIGNvbmZpZ1xyXG4gICAgY29uc3QgdmFsaWRDb25maWcgPSB0aGlzLl9nZXRDb25maWcoKTtcclxuXHJcbiAgICAvLyBFeGl0IGlmIG5vdGhpbmcgaGFzIGNoYW5nZWRcclxuICAgIGNvbnN0IGNvbmZpZ1N0ciA9IEpTT04uc3RyaW5naWZ5KHZhbGlkQ29uZmlnKTtcclxuICAgIGlmIChjdXJyZW50Q29uZmlnU3RyID09PSBjb25maWdTdHIpIHtcclxuICAgICAgdGhpcy5faXNWYWxpZGF0ZWQgPSB0cnVlO1xyXG4gICAgICByZXR1cm4gdmFsaWRDb25maWc7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gVXBkYXRlIGFsbCBjYWNoZWQgY29uZmlnc1xyXG4gICAgT2JqZWN0LmVudHJpZXModGhpcy5fc3BlZWNoQ2FjaGUpLmZvckVhY2goKFt0ZXh0LCBzcGVlY2hdKSA9PiB7XHJcbiAgICAgIC8vIENoZWNrIGlmIHRoaXMgaXMgYSBza2lwcGVkIHNwZWVjaFxyXG4gICAgICBpZiAoc2tpcFNwZWVjaGVzLmluY2x1ZGVzKHRleHQpKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBzcGVlY2hDb25maWdTdHIgPSBKU09OLnN0cmluZ2lmeShzcGVlY2guY29uZmlnKTtcclxuXHJcbiAgICAgIC8vIFVwZGF0ZSB0aGUgc3BlZWNoIHdpdGggbmV3IHBhcmFtZXRlcnNcclxuICAgICAgaWYgKHNwZWVjaENvbmZpZ1N0ciAhPT0gY29uZmlnU3RyKSB7XHJcbiAgICAgICAgdGhpcy5fdXBkYXRlU3BlZWNoKHRleHQsIHZhbGlkQ29uZmlnKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIHZhbGlkQ29uZmlnO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlIGFuIGV4aXN0aW5nIHNwZWVjaCwgb3IgYWRkIGEgbmV3IHNwZWVjaCB3aXRoIG5ldyBQb2xseSBwYXJhbWV0ZXJzIHdpdGhcclxuICAgKiBvcHRpb25zIGZyb20gYSBnaXZlbiBjb25maWcuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSBUaGUgdGV4dCBvZiB0aGUgc3BlZWNoIHRvIHVwZGF0ZS5cclxuICAgKiBAcGFyYW0ge09iamVjdH0gY29uZmlnIC0gUG9sbHkgcGFyYW1ldGVyIG9wdGlvbnMgdG8gdXBkYXRlLlxyXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2ZvcmNlPWZhbHNlXSAtIFdoZXRoZXIgdG8gZm9yY2UgdGhlIHNwZWVjaCB0byBiZSB1cGRhdGVkXHJcbiAgICogaWYgbm8gcGFyYW1ldGVycyBoYXZlIGNoYW5nZXMuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7QWJzdHJhY3RTcGVlY2h9XHJcbiAgICovXHJcbiAgX3VwZGF0ZVNwZWVjaCh0ZXh0LCBjb25maWcsIGZvcmNlID0gZmFsc2UpIHtcclxuICAgIGNvbnN0IHNwZWVjaCA9IHRoaXMuX3NwZWVjaENhY2hlW3RleHRdIHx8IHt9O1xyXG4gICAgLy8gRXhpdCBpZiBub3RoaW5nIGhhcyBjaGFuZ2VkIGFuZCBmb3JjZSBpcyBmYWxzZVxyXG4gICAgaWYgKFxyXG4gICAgICAhZm9yY2UgJiZcclxuICAgICAgY29uZmlnICE9PSB1bmRlZmluZWQgJiZcclxuICAgICAgc3BlZWNoLmNvbmZpZyAmJlxyXG4gICAgICBKU09OLnN0cmluZ2lmeShjb25maWcpID09PSBKU09OLnN0cmluZ2lmeShzcGVlY2guY29uZmlnKVxyXG4gICAgKSB7XHJcbiAgICAgIHJldHVybiBzcGVlY2g7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ3JlYXRlIHNlcGFyYXRlIHBhcmFtZXRlcnMgZm9yIGF1ZGlvIGFuZCBzcGVlY2htYXJrIGdlbmVyYXRpb25cclxuICAgIGNvbnN0IGF1ZGlvUGFyYW1zID0ge1xyXG4gICAgICAuLi5jb25maWcsXHJcbiAgICAgIFRleHQ6IHRleHQsXHJcbiAgICAgIFRleHRUeXBlOiAnc3NtbCcsXHJcbiAgICB9O1xyXG4gICAgY29uc3Qgc3BlZWNobWFya1BhcmFtcyA9IHtcclxuICAgICAgLi4uYXVkaW9QYXJhbXMsXHJcbiAgICAgIE91dHB1dEZvcm1hdDogJ2pzb24nLFxyXG4gICAgICBTcGVlY2hNYXJrVHlwZXM6IHNwZWVjaG1hcmtUeXBlcyxcclxuICAgIH07XHJcblxyXG4gICAgLy8gR2VuZXJhdGUgYXVkaW8gYW5kIHNwZWVjaG1hcmtzXHJcbiAgICBzcGVlY2guY29uZmlnID0gY29uZmlnO1xyXG4gICAgc3BlZWNoLnByb21pc2UgPSBQcm9taXNlLmFsbChbXHJcbiAgICAgIHRoaXMuX3N5bnRoZXNpemVTcGVlY2htYXJrcyhzcGVlY2htYXJrUGFyYW1zKSxcclxuICAgICAgdGhpcy5fc3ludGhlc2l6ZUF1ZGlvKGF1ZGlvUGFyYW1zKSxcclxuICAgIF0pLnRoZW4ocmVzdWx0cyA9PiB7XHJcbiAgICAgIHJldHVybiB0aGlzLl9jcmVhdGVTcGVlY2godGV4dCwgLi4ucmVzdWx0cyk7XHJcbiAgICB9KTtcclxuICAgIHRoaXMuX3NwZWVjaENhY2hlW3RleHRdID0gc3BlZWNoO1xyXG5cclxuICAgIHJldHVybiBzcGVlY2g7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGUgYSBuZXcgU3BlZWNoIG9iamVjdCBmb3IgdGhlIHNwZWFrZXIuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtUZXh0VG9TcGVlY2h9IHNwZWFrZXIgLSBUaGUgVGV4dFRvU3BlZWNoIGluc3RhbmNlIHRoYXQgd2lsbCBvd24gdGhlIHNwZWVjaC5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIFRleHQgb2YgdGhlIHNwZWVjaC5cclxuICAgKiBAcGFyYW0ge09iamVjdH0gc3BlZWNobWFya3MgLSBTcGVlY2htYXJrcyBmb3IgdGhlIHNwZWVjaC5cclxuICAgKiBAcGFyYW0ge09iamVjdH0gYXVkaW9Db25maWcgLSBBdWRpbyBmb3IgdGhlIHNwZWVjaC5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtBYnN0cmFjdFNwZWVjaH1cclxuICAgKi9cclxuICBfY3JlYXRlU3BlZWNoKHRleHQsIHNwZWVjaG1hcmtzLCBhdWRpb0NvbmZpZykge1xyXG4gICAgcmV0dXJuIG5ldyBTcGVlY2godGhpcywgdGV4dCwgc3BlZWNobWFya3MsIGF1ZGlvQ29uZmlnKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZSBwcmVzaWduZWQgVVJMIG9mIHNwZWVjaCBhdWRpbyBmb3IgdGhlIGdpdmVuIHNwZWVjaCB0ZXh0LlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXMgLSBQYXJhbWV0ZXJzIG9iamVjdCBjb21wYXRpYmxlIHdpdGggUG9sbHkuc3ludGhlc2l6ZVNwZWVjaC5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtEZWZlcnJlZH0gUmVzb2x2ZXMgd2l0aCBhbiBvYmplY3QgY29udGFpbmluZyB0aGUgYXVkaW8gVVJMLlxyXG4gICAqL1xyXG4gIF9zeW50aGVzaXplQXVkaW8ocGFyYW1zKSB7XHJcbiAgICByZXR1cm4gbmV3IERlZmVycmVkKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgdGhpcy5jb25zdHJ1Y3Rvci5TRVJWSUNFUy5wcmVzaWduZXIuZ2V0U3ludGhlc2l6ZVNwZWVjaFVybChcclxuICAgICAgICBwYXJhbXMsXHJcbiAgICAgICAgZnVuY3Rpb24oZXJyb3IsIHVybCkge1xyXG4gICAgICAgICAgaWYgKCFlcnJvcikge1xyXG4gICAgICAgICAgICByZXNvbHZlKHt1cmx9KTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJlamVjdChlcnJvcik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXRyaWV2ZXMgYW5kIHBhcnNlcyBzcGVlY2htYXJrcyBmb3IgdGhlIGdpdmVuIHNwZWVjaCB0ZXh0LlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXMgLSBQYXJhbWV0ZXJzIG9iamVjdCBjb21wYXRpYmxlIHdpdGggUG9sbHkuc3ludGhlc2l6ZVNwZWVjaC5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtEZWZlcnJlZH0gUmVzb2x2ZXMgd2l0aCBhbiBhcnJheSBvZiBzcGVlY2htYXJrIG9iamVjdHNcclxuICAgKi9cclxuICBfc3ludGhlc2l6ZVNwZWVjaG1hcmtzKHBhcmFtcykge1xyXG4gICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IuU0VSVklDRVMucG9sbHlcclxuICAgICAgLnN5bnRoZXNpemVTcGVlY2gocGFyYW1zKVxyXG4gICAgICAucHJvbWlzZSgpXHJcbiAgICAgIC50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgLy8gQ29udmVydCBjaGFyY29kZXMgdG8gc3RyaW5nXHJcbiAgICAgICAgY29uc3QganNvblN0cmluZyA9IEpTT04uc3RyaW5naWZ5KHJlc3VsdC5BdWRpb1N0cmVhbSk7XHJcbiAgICAgICAgY29uc3QganNvbiA9IEpTT04ucGFyc2UoanNvblN0cmluZyk7XHJcbiAgICAgICAgY29uc3QgZGF0YVN0ciA9IGpzb24uZGF0YS5tYXAoYyA9PiBTdHJpbmcuZnJvbUNoYXJDb2RlKGMpKS5qb2luKCcnKTtcclxuXHJcbiAgICAgICAgY29uc3QgbWFya1R5cGVzID0ge1xyXG4gICAgICAgICAgc2VudGVuY2U6IFtdLFxyXG4gICAgICAgICAgd29yZDogW10sXHJcbiAgICAgICAgICB2aXNlbWU6IFtdLFxyXG4gICAgICAgICAgc3NtbDogW10sXHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb25zdCBlbmRNYXJrVHlwZXMgPSB7XHJcbiAgICAgICAgICBzZW50ZW5jZTogbnVsbCxcclxuICAgICAgICAgIHdvcmQ6IG51bGwsXHJcbiAgICAgICAgICB2aXNlbWU6IG51bGwsXHJcbiAgICAgICAgICBzc21sOiBudWxsLFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIC8vIFNwbGl0IGJ5IGVuY2xvc2luZyB7fSB0byBjcmVhdGUgc3BlZWNobWFyayBvYmplY3RzXHJcbiAgICAgICAgY29uc3Qgc3BlZWNoTWFya3MgPSBbLi4uZGF0YVN0ci5tYXRjaEFsbCgvXFx7Lio/XFx9KD89XFxufCQpL2dtKV0ubWFwKFxyXG4gICAgICAgICAgbWF0Y2ggPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBtYXJrID0gSlNPTi5wYXJzZShtYXRjaFswXSk7XHJcblxyXG4gICAgICAgICAgICAvLyBTZXQgdGhlIGR1cmF0aW9uIG9mIHRoZSBsYXN0IHNwZWVjaG1hcmsgc3RvcmVkIG1hdGNoaW5nIHRoaXMgb25lJ3MgdHlwZVxyXG4gICAgICAgICAgICBjb25zdCBudW1NYXJrcyA9IG1hcmtUeXBlc1ttYXJrLnR5cGVdLmxlbmd0aDtcclxuICAgICAgICAgICAgaWYgKG51bU1hcmtzID4gMCkge1xyXG4gICAgICAgICAgICAgIGNvbnN0IGxhc3RNYXJrID0gbWFya1R5cGVzW21hcmsudHlwZV1bbnVtTWFya3MgLSAxXTtcclxuICAgICAgICAgICAgICBsYXN0TWFyay5kdXJhdGlvbiA9IG1hcmsudGltZSAtIGxhc3RNYXJrLnRpbWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIG1hcmtUeXBlc1ttYXJrLnR5cGVdLnB1c2gobWFyayk7XHJcbiAgICAgICAgICAgIGVuZE1hcmtUeXBlc1ttYXJrLnR5cGVdID0gbWFyaztcclxuICAgICAgICAgICAgcmV0dXJuIG1hcms7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgLy8gRmluZCB0aGUgdGltZSBvZiB0aGUgbGF0ZXN0IHNwZWVjaG1hcmtcclxuICAgICAgICBjb25zdCBlbmRUaW1lcyA9IFtdO1xyXG4gICAgICAgIGlmIChlbmRNYXJrVHlwZXMuc2VudGVuY2UpIHtcclxuICAgICAgICAgIGVuZFRpbWVzLnB1c2goZW5kTWFya1R5cGVzLnNlbnRlbmNlLnRpbWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZW5kTWFya1R5cGVzLndvcmQpIHtcclxuICAgICAgICAgIGVuZFRpbWVzLnB1c2goZW5kTWFya1R5cGVzLndvcmQudGltZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChlbmRNYXJrVHlwZXMudmlzZW1lKSB7XHJcbiAgICAgICAgICBlbmRUaW1lcy5wdXNoKGVuZE1hcmtUeXBlcy52aXNlbWUudGltZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChlbmRNYXJrVHlwZXMuc3NtbCkge1xyXG4gICAgICAgICAgZW5kVGltZXMucHVzaChlbmRNYXJrVHlwZXMuc3NtbC50aW1lKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgZW5kVGltZSA9IE1hdGgubWF4KC4uLmVuZFRpbWVzKTtcclxuXHJcbiAgICAgICAgLy8gQ2FsY3VsYXRlIGR1cmF0aW9uIGZvciB0aGUgZW5kaW5nIHNwZWVjaE1hcmtzIG9mIGVhY2ggdHlwZVxyXG4gICAgICAgIGlmIChlbmRNYXJrVHlwZXMuc2VudGVuY2UpIHtcclxuICAgICAgICAgIGVuZE1hcmtUeXBlcy5zZW50ZW5jZS5kdXJhdGlvbiA9IE1hdGgubWF4KFxyXG4gICAgICAgICAgICB0aGlzLl9taW5FbmRNYXJrRHVyYXRpb24sXHJcbiAgICAgICAgICAgIGVuZFRpbWUgLSBlbmRNYXJrVHlwZXMuc2VudGVuY2UudGltZVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGVuZE1hcmtUeXBlcy53b3JkKSB7XHJcbiAgICAgICAgICBlbmRNYXJrVHlwZXMud29yZC5kdXJhdGlvbiA9IE1hdGgubWF4KFxyXG4gICAgICAgICAgICB0aGlzLl9taW5FbmRNYXJrRHVyYXRpb24sXHJcbiAgICAgICAgICAgIGVuZFRpbWUgLSBlbmRNYXJrVHlwZXMud29yZC50aW1lXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZW5kTWFya1R5cGVzLnZpc2VtZSkge1xyXG4gICAgICAgICAgZW5kTWFya1R5cGVzLnZpc2VtZS5kdXJhdGlvbiA9IE1hdGgubWF4KFxyXG4gICAgICAgICAgICB0aGlzLl9taW5FbmRNYXJrRHVyYXRpb24sXHJcbiAgICAgICAgICAgIGVuZFRpbWUgLSBlbmRNYXJrVHlwZXMudmlzZW1lLnRpbWVcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChlbmRNYXJrVHlwZXMuc3NtbCkge1xyXG4gICAgICAgICAgZW5kTWFya1R5cGVzLnNzbWwuZHVyYXRpb24gPSBNYXRoLm1heChcclxuICAgICAgICAgICAgdGhpcy5fbWluRW5kTWFya0R1cmF0aW9uLFxyXG4gICAgICAgICAgICBlbmRUaW1lIC0gZW5kTWFya1R5cGVzLnNzbWwudGltZVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBzcGVlY2hNYXJrcztcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIGEgU3BlZWNoIG9iamVjdCB0aGF0IGhhcyB0aGUgZ2l2ZW4gdGV4dC5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIFRoZSB0ZXh0IGNvbnRlbnQgb2YgdGhlIFNwZWVjaC5cclxuICAgKiBAcGFyYW0ge09iamVjdD19IGNvbmZpZyAtIE9wdGlvbnMgdG8gdXBkYXRlIHRoZSBTcGVlY2ggd2l0aC5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtEZWZlcnJlZH0gUmVzb2x2ZXMgd2l0aCBTcGVlY2ggb3IgbnVsbDtcclxuICAgKi9cclxuICBfZ2V0U3BlZWNoKHRleHQsIGNvbmZpZykge1xyXG4gICAgLy8gTWFrZSBzdXJlIEFXUyBzZXJ2aWNlcyBleGlzdFxyXG4gICAgaWYgKCF0aGlzLmNvbnN0cnVjdG9yLmlzUmVhZHkpIHtcclxuICAgICAgY29uc3QgZSA9ICdBV1Mgc2VydmljZXMgaGF2ZSBub3QgYmVlbiBpbml0aWFsaXplZC4nO1xyXG4gICAgICByZXR1cm4gRGVmZXJyZWQucmVqZWN0KGUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIE1ha2Ugc3VyZSBpdHMgcG9zc2libGUgdG8gZ2VuZXJhdGUgc3BlZWNoZXNcclxuICAgIGlmICghdGV4dCkge1xyXG4gICAgICBjb25zdCBlID0gJ0Nhbm5vdCBwbGF5IGEgc3BlZWNoIHdpdGggbm8gdGV4dC4nO1xyXG4gICAgICByZXR1cm4gRGVmZXJyZWQucmVqZWN0KGUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFVwZGF0ZSB0aGUgc3BlZWNoIHdpdGggb3B0aW9uc1xyXG4gICAgdGV4dCA9IFRleHRUb1NwZWVjaFV0aWxzLnZhbGlkYXRlVGV4dCh0ZXh0KTtcclxuICAgIGNvbmZpZyA9IHRoaXMuX3VwZGF0ZUNvbmZpZyhjb25maWcsIHRleHQpO1xyXG5cclxuICAgIHJldHVybiB0aGlzLl91cGRhdGVTcGVlY2godGV4dCwgY29uZmlnKS5wcm9taXNlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWRkcyBhIG5hbWVzcGFjZSB0byB0aGUgaG9zdCB3aXRoIHRoZSBuYW1lIG9mIHRoZSBmZWF0dXJlIHRvIGNvbnRhaW4gcHJvcGVydGllc1xyXG4gICAqIGFuZCBtZXRob2RzIGZyb20gdGhlIGZlYXR1cmUgdGhhdCB1c2VycyBvZiB0aGUgaG9zdCBuZWVkIGFjY2VzcyB0by5cclxuICAgKlxyXG4gICAqIEBzZWUgVGV4dFRvU3BlZWNoRmVhdHVyZVxyXG4gICAqL1xyXG4gIGluc3RhbGxBcGkoKSB7XHJcbiAgICAvKipcclxuICAgICAqIEBpbm5lclxyXG4gICAgICogQG5hbWVzcGFjZSBUZXh0VG9TcGVlY2hGZWF0dXJlXHJcbiAgICAgKi9cclxuICAgIGNvbnN0IGFwaSA9IHN1cGVyLmluc3RhbGxBcGkoKTtcclxuXHJcbiAgICBPYmplY3QuYXNzaWduKGFwaSwge1xyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIFRleHRUb1NwZWVjaEZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBtZXRob2RcclxuICAgICAgICogQHNlZSBBYnN0cmFjdFRleHRUb1NwZWVjaEZlYXR1cmUjcGxheVxyXG4gICAgICAgKi9cclxuICAgICAgcGxheTogdGhpcy5wbGF5LmJpbmQodGhpcyksXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbWVtYmVyb2YgVGV4dFRvU3BlZWNoRmVhdHVyZVxyXG4gICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICogQG1ldGhvZFxyXG4gICAgICAgKiBAc2VlIEFic3RyYWN0VGV4dFRvU3BlZWNoRmVhdHVyZSNwYXVzZVxyXG4gICAgICAgKi9cclxuICAgICAgcGF1c2U6IHRoaXMucGF1c2UuYmluZCh0aGlzKSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBtZW1iZXJvZiBUZXh0VG9TcGVlY2hGZWF0dXJlXHJcbiAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgKiBAbWV0aG9kXHJcbiAgICAgICAqIEBzZWUgQWJzdHJhY3RUZXh0VG9TcGVlY2hGZWF0dXJlI3Jlc3VtZVxyXG4gICAgICAgKi9cclxuICAgICAgcmVzdW1lOiB0aGlzLnJlc3VtZS5iaW5kKHRoaXMpLFxyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIFRleHRUb1NwZWVjaEZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBtZXRob2RcclxuICAgICAgICogQHNlZSBBYnN0cmFjdFRleHRUb1NwZWVjaEZlYXR1cmUjc3RvcFxyXG4gICAgICAgKi9cclxuICAgICAgc3RvcDogdGhpcy5zdG9wLmJpbmQodGhpcyksXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbWVtYmVyb2YgVGV4dFRvU3BlZWNoRmVhdHVyZVxyXG4gICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICogQG1ldGhvZFxyXG4gICAgICAgKiBAc2VlIEFic3RyYWN0VGV4dFRvU3BlZWNoRmVhdHVyZSNnZXRWb2x1bWVcclxuICAgICAgICovXHJcbiAgICAgIGdldFZvbHVtZTogdGhpcy5nZXRWb2x1bWUuYmluZCh0aGlzKSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBtZW1iZXJvZiBUZXh0VG9TcGVlY2hGZWF0dXJlXHJcbiAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgKiBAbWV0aG9kXHJcbiAgICAgICAqIEBzZWUgQWJzdHJhY3RUZXh0VG9TcGVlY2hGZWF0dXJlI3NldFZvbHVtZVxyXG4gICAgICAgKi9cclxuICAgICAgc2V0Vm9sdW1lOiB0aGlzLnNldFZvbHVtZS5iaW5kKHRoaXMpLFxyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIFRleHRUb1NwZWVjaEZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBtZXRob2RcclxuICAgICAgICogQHNlZSBBYnN0cmFjdFRleHRUb1NwZWVjaEZlYXR1cmUjcGF1c2VWb2x1bWVcclxuICAgICAgICovXHJcbiAgICAgIHBhdXNlVm9sdW1lOiB0aGlzLnBhdXNlVm9sdW1lLmJpbmQodGhpcyksXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbWVtYmVyb2YgVGV4dFRvU3BlZWNoRmVhdHVyZVxyXG4gICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICogQG1ldGhvZFxyXG4gICAgICAgKiBAc2VlIEFic3RyYWN0VGV4dFRvU3BlZWNoRmVhdHVyZSNyZXN1bWVWb2x1bWVcclxuICAgICAgICovXHJcbiAgICAgIHJlc3VtZVZvbHVtZTogdGhpcy5yZXN1bWVWb2x1bWUuYmluZCh0aGlzKSxcclxuICAgIH0pO1xyXG5cclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGFwaSwge1xyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIFRleHRUb1NwZWVjaEZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBzZWUgQWJzdHJhY3RUZXh0VG9TcGVlY2hGZWF0dXJlI3NwZWVjaG1hcmtPZmZzZXRcclxuICAgICAgICovXHJcbiAgICAgIHNwZWVjaG1hcmtPZmZzZXQ6IHtcclxuICAgICAgICBnZXQ6ICgpID0+IHRoaXMuc3BlZWNobWFya09mZnNldCxcclxuICAgICAgICBzZXQ6IG9mZnNldCA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNwZWVjaG1hcmtPZmZzZXQgPSBvZmZzZXQ7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBhcGk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIGFuZCBzZXRzIHRoZSB2b2x1bWUgdXNlZCBmb3IgYWxsIGF1ZGlvIGNsaXBzIHBsYXllZCBieSB0aGUgc3BlYWtlci5cclxuICAgKlxyXG4gICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICovXHJcbiAgc2V0IHZvbHVtZSh2b2x1bWUpIHtcclxuICAgIHRoaXMuX3ZvbHVtZSA9IE1hdGhVdGlscy5jbGFtcCh2b2x1bWUpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHZvbHVtZSgpIHtcclxuICAgIHJldHVybiB0aGlzLl92b2x1bWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHdoZXRoZXIgb3Igbm90IHRoZSBzcGVha2VyJ3Mgdm9sdW1lIHZhbHVlIGlzIGN1cnJlbnRseSBiZWluZyB0d2VlbmVkLlxyXG4gICAqXHJcbiAgICogQHJlYWRvbmx5XHJcbiAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICovXHJcbiAgZ2V0IHZvbHVtZVBlbmRpbmcoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fcHJvbWlzZXMudm9sdW1lICYmIHRoaXMuX3Byb21pc2VzLnZvbHVtZS5wZW5kaW5nO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgdm9sdW1lIHVzZWQgZm9yIGFsbCBhdWRpbyBjbGlwcyBwbGF5ZWQgYnkgdGhlIHNwZWFrZXIuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxyXG4gICAqL1xyXG4gIGdldFZvbHVtZSgpIHtcclxuICAgIHJldHVybiB0aGlzLnZvbHVtZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZXMgdGhlIHZvbHVtZSB1c2VkIGZvciBhbGwgYXVkaW8gY2xpcHMgcGxheWVkIGJ5IHRoZSBzcGVha2VyIG92ZXIgdGltZS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB2b2x1bWUgLSBUYXJnZXQgdm9sdW1lIHZhbHVlLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbc2Vjb25kcz0wXSAtIEFtb3VudCBvZiB0aW1lIGl0IHdpbGwgdGFrZSB0byByZWFjaCB0aGUgdGFyZ2V0XHJcbiAgICogdm9sdW1lLlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBlYXNpbmdGbiAtIEVhc2luZyBmdW5jdGlvbiB1c2VkIGZvciBpbnRlcnBvbGF0aW9uLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0RlZmVycmVkfVxyXG4gICAqL1xyXG4gIHNldFZvbHVtZSh2b2x1bWUsIHNlY29uZHMgPSAwLCBlYXNpbmdGbikge1xyXG4gICAgaWYgKHRoaXMudm9sdW1lUGVuZGluZykge1xyXG4gICAgICB0aGlzLl9wcm9taXNlcy52b2x1bWUuY2FuY2VsKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdm9sdW1lID0gTWF0aFV0aWxzLmNsYW1wKHZvbHVtZSk7XHJcbiAgICB0aGlzLl9wcm9taXNlcy52b2x1bWUgPSBBbmltYXRpb25VdGlscy5pbnRlcnBvbGF0ZVByb3BlcnR5KFxyXG4gICAgICB0aGlzLFxyXG4gICAgICAndm9sdW1lJyxcclxuICAgICAgdm9sdW1lLFxyXG4gICAgICB7c2Vjb25kcywgZWFzaW5nRm59XHJcbiAgICApO1xyXG5cclxuICAgIHJldHVybiB0aGlzLl9wcm9taXNlcy52b2x1bWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQYXVzZSBpbnRlcnBvbGF0aW9uIGhhcHBlbmluZyBvbiB0aGUgc3BlYWtlcidzIHZvbHVtZSBwcm9wZXJ0eS5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gICAqL1xyXG4gIHBhdXNlVm9sdW1lKCkge1xyXG4gICAgdGhpcy5fdm9sdW1lUGF1c2VkID0gdHJ1ZTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy52b2x1bWVQZW5kaW5nO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVzdW1lIGFueSBpbnRlcnBvbGF0aW9uIGhhcHBlbmluZyBvbiB0aGUgc3BlYWtlcidzIHZvbHVtZSBwcm9wZXJ0eS5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gICAqL1xyXG4gIHJlc3VtZVZvbHVtZSgpIHtcclxuICAgIHRoaXMuX3ZvbHVtZVBhdXNlZCA9IGZhbHNlO1xyXG5cclxuICAgIHJldHVybiB0aGlzLnZvbHVtZVBlbmRpbmc7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGUgdGhlIGN1cnJlbnRseSBwbGF5aW5nIHNwZWVjaC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBkZWx0YVRpbWUgLSBUaW1lIHNpbmNlIHRoZSBsYXN0IHVwZGF0ZS5cclxuICAgKi9cclxuICB1cGRhdGUoZGVsdGFUaW1lKSB7XHJcbiAgICBpZiAoIXRoaXMuX3ZvbHVtZVBhdXNlZCkge1xyXG4gICAgICB0aGlzLl9wcm9taXNlcy52b2x1bWUuZXhlY3V0ZShkZWx0YVRpbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLl9jdXJyZW50U3BlZWNoICYmIHRoaXMuX2N1cnJlbnRTcGVlY2gucGxheWluZykge1xyXG4gICAgICB0aGlzLl9jdXJyZW50U3BlZWNoLnZvbHVtZSA9IHRoaXMuX3ZvbHVtZTtcclxuICAgICAgdGhpcy5fY3VycmVudFNwZWVjaC51cGRhdGUodGhpcy5faG9zdC5ub3cpO1xyXG4gICAgICBzdXBlci51cGRhdGUoZGVsdGFUaW1lKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldCB0aGUgY3VycmVudCBzcGVlY2ggdG8gYSBuZXcgYXNzZXQgYW5kIHVwZGF0ZSB0aGUgc3BlZWNoJ3Mgc3BlZWNobWFya1xyXG4gICAqIG9mZnNldCB2YWx1ZSB0byBtYXRjaCB0aGF0IG9mIHRoZSBmZWF0dXJlLlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7QWJzdHJhY3RTcGVlY2h9IHNwZWVjaCAtIFNwZWVjaCB0byBzZXQgYXMgY3VycmVudC5cclxuICAgKi9cclxuICBfc2V0Q3VycmVudFNwZWVjaChzcGVlY2gpIHtcclxuICAgIHNwZWVjaC5zcGVlY2htYXJrT2Zmc2V0ID0gdGhpcy5fc3BlZWNobWFya09mZnNldDtcclxuICAgIHRoaXMuX2N1cnJlbnRTcGVlY2ggPSBzcGVlY2g7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGUgYSBwcm9taXNlIHRoYXQgd2lsbCBwbGF5L3Jlc3VtZSBhIHNwZWVjaCB3aXRoIHRoZSBnaXZlbiB0ZXh0IGFmdGVyXHJcbiAgICogdGhlIGF1ZGlvIGNvbnRleHQgYXR0ZW1wdHMgdG8gcmVzdW1lIGFuZCBzcGVlY2ggYXVkaW8gaXMgcmV0cmlldmVkIGZyb20gUG9sbHkuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSBUaGUgdGV4dCBvZiB0aGUgbmV3IHNwZWVjaCB0byBwbGF5LlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0PX0gY29uZmlnIC0gT3B0aW9uYWwgcGFyYW1ldGVycyBmb3IgdGhlIHNwZWVjaC5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3BsYXlNZXRob2QgPSAncGxheSddIC0gTWV0aG9kIHRvIGV4ZWN1dGUgb24gdGhlIHJlc3VsdGluZ1xyXG4gICAqIFNwZWVjaCBvYmplY3QuIFZhbGlkIG9wdGlvbnMgYXJlICdwbGF5JyBhbmQgJ3Jlc3VtZScuXHJcbiAgICovXHJcbiAgX3N0YXJ0U3BlZWNoKHRleHQsIGNvbmZpZywgcGxheU1ldGhvZCA9ICdwbGF5Jykge1xyXG4gICAgLy8gSWYgbm8gdGV4dCBpcyBwcm92aWRlZCwgdHJ5IHRvIHVzZSB0aGUgY3VycmVudCBzcGVlY2hcclxuICAgIGlmICh0ZXh0ID09PSB1bmRlZmluZWQgJiYgcGxheU1ldGhvZCA9PT0gJ3Jlc3VtZScgJiYgdGhpcy5fY3VycmVudFNwZWVjaCkge1xyXG4gICAgICB0ZXh0ID0gdGhpcy5fY3VycmVudFNwZWVjaC50ZXh0O1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGN1cnJlbnRQcm9taXNlID0gdGhpcy5fY3VycmVudFByb21pc2UgfHwge1xyXG4gICAgICBwbGF5OiBuZXcgRGVmZXJyZWQoXHJcbiAgICAgICAgdW5kZWZpbmVkLFxyXG4gICAgICAgICgpID0+IHtcclxuICAgICAgICAgIGN1cnJlbnRQcm9taXNlLnNwZWVjaC5jYW5jZWwoKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgICgpID0+IHtcclxuICAgICAgICAgIGN1cnJlbnRQcm9taXNlLnNwZWVjaC5jYW5jZWwoKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgICgpID0+IHtcclxuICAgICAgICAgIGN1cnJlbnRQcm9taXNlLnNwZWVjaC5jYW5jZWwoKTtcclxuICAgICAgICB9XHJcbiAgICAgICksXHJcbiAgICAgIHNwZWVjaDogbmV3IERlZmVycmVkKCksXHJcbiAgICB9O1xyXG4gICAgdGhpcy5fY3VycmVudFByb21pc2UgPSBjdXJyZW50UHJvbWlzZTtcclxuXHJcbiAgICB0aGlzLl9nZXRTcGVlY2godGV4dCwgY29uZmlnKVxyXG4gICAgICAudGhlbihzcGVlY2ggPT4ge1xyXG4gICAgICAgIC8vIEV4aXQgaWYgdGhlIHByb21pc2UgaXMgbm8gbG9uZ2VyIHBlbmRpbmcgYmVjYXVzZSBvZiB1c2VyIGludGVyYWN0aW9uXHJcbiAgICAgICAgaWYgKCFjdXJyZW50UHJvbWlzZS5wbGF5LnBlbmRpbmcpIHtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2N1cnJlbnRQcm9taXNlICE9PSBjdXJyZW50UHJvbWlzZSkge1xyXG4gICAgICAgICAgLy8gQ2FuY2VsIGlmIGFub3RoZXIgY2FsbCB0byBwbGF5IGhhcyBhbHJlYWR5IGJlZW4gbWFkZVxyXG4gICAgICAgICAgY3VycmVudFByb21pc2UucGxheS5jYW5jZWwoKTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFJlc2V0IGN1cnJlbnQgc3BlZWNoIHdoZW4gdGhlIHNwZWVjaCBlbmRzXHJcbiAgICAgICAgY29uc3Qgb25GaW5pc2ggPSAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLl9jdXJyZW50U3BlZWNoID0gbnVsbDtcclxuICAgICAgICAgIHRoaXMuX2N1cnJlbnRQcm9taXNlID0gbnVsbDtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICAvLyBDYW5jZWwgdGhlIGN1cnJlbnRseSBwbGF5aW5nIHNwZWVjaFxyXG4gICAgICAgIGlmICh0aGlzLl9jdXJyZW50U3BlZWNoICYmIHRoaXMuX2N1cnJlbnRTcGVlY2gucGxheWluZykge1xyXG4gICAgICAgICAgaWYgKHBsYXlNZXRob2QgPT09ICdwbGF5Jykge1xyXG4gICAgICAgICAgICB0aGlzLl9jdXJyZW50U3BlZWNoLmNhbmNlbCgpO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICAgICAgcGxheU1ldGhvZCA9PT0gJ3Jlc3VtZScgJiZcclxuICAgICAgICAgICAgdGhpcy5fY3VycmVudFNwZWVjaC5hdWRpbyAhPT0gc3BlZWNoLmF1ZGlvXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgdGhpcy5fY3VycmVudFNwZWVjaC5jYW5jZWwoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3NldEN1cnJlbnRTcGVlY2goc3BlZWNoKTtcclxuXHJcbiAgICAgICAgLy8gUGxheSB0aGUgc3BlZWNoXHJcbiAgICAgICAgY3VycmVudFByb21pc2Uuc3BlZWNoID0gc3BlZWNoW3BsYXlNZXRob2RdKFxyXG4gICAgICAgICAgdGhpcy5faG9zdC5ub3csXHJcbiAgICAgICAgICBvbkZpbmlzaCxcclxuICAgICAgICAgIG9uRmluaXNoLFxyXG4gICAgICAgICAgb25GaW5pc2hcclxuICAgICAgICApO1xyXG4gICAgICAgIGN1cnJlbnRQcm9taXNlLnNwZWVjaFxyXG4gICAgICAgICAgLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoY3VycmVudFByb21pc2Uuc3BlZWNoLnJlc29sdmVkKSB7XHJcbiAgICAgICAgICAgICAgY3VycmVudFByb21pc2UucGxheS5yZXNvbHZlKCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgY3VycmVudFByb21pc2UucGxheS5jYW5jZWwoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIC5jYXRjaChlcnJvciA9PiB7XHJcbiAgICAgICAgICAgIGN1cnJlbnRQcm9taXNlLnBsYXkucmVqZWN0KGVycm9yKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9KVxyXG4gICAgICAuY2F0Y2goZSA9PiB7XHJcbiAgICAgICAgZSA9IGBDYW5ub3QgJHtwbGF5TWV0aG9kfSBzcGVlY2ggJHt0ZXh0fSBvbiBob3N0ICR7dGhpcy5ob3N0LmlkfS4gJHtlfWA7XHJcbiAgICAgICAgY3VycmVudFByb21pc2UucGxheS5yZWplY3QoZSk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBjdXJyZW50UHJvbWlzZS5wbGF5O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU3RvcCBhbnkgc3BlZWNoZXMgY3VycmVudGx5IHBsYXlpbmcgYW5kIHBsYXkgYSBuZXcgc3BlZWNoIGZyb20gdGhlIGJlZ2lubmluZy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gVGhlIHRleHQgb2YgdGhlIG5ldyBzcGVlY2ggdG8gcGxheS5cclxuICAgKiBAcGFyYW0ge09iamVjdD19IGNvbmZpZyAtIE9wdGlvbmFsIHBhcmFtZXRlcnMgZm9yIHRoZSBzcGVlY2guXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7RGVmZXJyZWR9XHJcbiAgICovXHJcbiAgcGxheSh0ZXh0LCBjb25maWcpIHtcclxuICAgIHJldHVybiB0aGlzLl9zdGFydFNwZWVjaCh0ZXh0LCBjb25maWcsICdwbGF5Jyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJZiBhIHNwZWVjaCBpcyBjdXJyZW50bHkgcGxheWluZywgcGF1c2UgaXQgYXQgdGhlIGN1cnJlbnQgdGltZS5cclxuICAgKi9cclxuICBwYXVzZSgpIHtcclxuICAgIGlmICh0aGlzLl9jdXJyZW50U3BlZWNoICYmIHRoaXMuX2N1cnJlbnRTcGVlY2gucGxheWluZykge1xyXG4gICAgICB0aGlzLl9jdXJyZW50U3BlZWNoLnBhdXNlKHRoaXMuX2hvc3Qubm93KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICBgQ2Fubm90IHBhdXNlIHNwZWVjaCBvbiBob3N0ICR7dGhpcy5ob3N0LmlkfS4gTm8gc3BlZWNoIGlzIGN1cnJlbnRseSBwbGF5aW5nYFxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU3RvcCBhbnkgc3BlZWNoZXMgY3VycmVudGx5IHBsYXlpbmcgYW5kIHJlc3VtZSBhIG5ldyBzcGVlY2ggZnJvbSB0aGUgY3VycmVudFxyXG4gICAqIHRpbWUuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZz19IHRleHQgLSBUaGUgdGV4dCBvZiB0aGUgbmV3IHNwZWVjaCB0byBwbGF5LiBJZiB1bmRlZmluZWQgYW5kXHJcbiAgICogdGhlcmUgaXMgYSBjdXJyZW50IHNwZWVjaCB0aGF0IGlzIHBhdXNlZCwgdGhlIGN1cnJlbnQgc3BlZWNoIHdpbGwgYmUgcmVzdW1lZC5cclxuICAgKiBAcGFyYW0ge09iamVjdD19IGNvbmZpZyAtIE9wdGlvbmFsIHBhcmFtZXRlcnMgZm9yIHRoZSBzcGVlY2guXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7RGVmZXJyZWR9XHJcbiAgICovXHJcbiAgcmVzdW1lKHRleHQsIGNvbmZpZykge1xyXG4gICAgcmV0dXJuIHRoaXMuX3N0YXJ0U3BlZWNoKHRleHQsIGNvbmZpZywgJ3Jlc3VtZScpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSWYgYSBzcGVlY2ggaXMgY3VycmVudGx5IHBsYXlpbmcsIHN0b3AgcGxheWJhY2sgYW5kIHJlc2V0IHRpbWUuXHJcbiAgICovXHJcbiAgc3RvcCgpIHtcclxuICAgIGlmICh0aGlzLl9jdXJyZW50U3BlZWNoICYmIHRoaXMuX2N1cnJlbnRTcGVlY2gucGxheWluZykge1xyXG4gICAgICB0aGlzLl9jdXJyZW50U3BlZWNoLnN0b3AoKTtcclxuICAgICAgdGhpcy5fY3VycmVudFNwZWVjaCA9IG51bGw7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLndhcm4oXHJcbiAgICAgICAgYENhbm5vdCBzdG9wIHNwZWVjaCBvbiBob3N0ICR7dGhpcy5ob3N0LmlkfS4gTm8gc3BlZWNoIGlzIGN1cnJlbnRseSBwbGF5aW5nLmBcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGRpc2NhcmQoKSB7XHJcbiAgICBpZiAodGhpcy5fY3VycmVudFNwZWVjaCAmJiB0aGlzLl9jdXJyZW50U3BlZWNoLnBsYXlpbmcpIHtcclxuICAgICAgdGhpcy5fY3VycmVudFNwZWVjaC5zdG9wKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZGVsZXRlIHRoaXMuX3NwZWVjaENhY2hlO1xyXG5cclxuICAgIHN1cGVyLmRpc2NhcmQoKTtcclxuICB9XHJcbn1cclxuXHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEFic3RyYWN0VGV4dFRvU3BlZWNoRmVhdHVyZSwge1xyXG4gIEFXU19WRVJTSU9OOiB7XHJcbiAgICBnZXQ6ICgpID0+IGF3c1ZlcnNpb24sXHJcbiAgfSxcclxuICBQT0xMWV9NSU5fTkVVUkFMX1ZFUlNJT046IHtcclxuICAgIHZhbHVlOiAnMi41MDMnLFxyXG4gICAgd3JpdGFibGU6IGZhbHNlLFxyXG4gIH0sXHJcbiAgUE9MTFlfREVGQVVMVFM6IHtcclxuICAgIHZhbHVlOiB7XHJcbiAgICAgIEVuZ2luZTogJ3N0YW5kYXJkJyxcclxuICAgICAgTGV4aWNvbk5hbWVzOiBbXSxcclxuICAgICAgT3V0cHV0Rm9ybWF0OiAnbXAzJyxcclxuICAgICAgU2FtcGxlUmF0ZTogJzIyMDUwJyxcclxuICAgICAgVGV4dDogJycsXHJcbiAgICAgIFRleHRUeXBlOiAnc3NtbCcsXHJcbiAgICAgIFZvaWNlSWQ6ICdBbXknLFxyXG4gICAgICBMYW5ndWFnZUNvZGU6ICdlbi1HQicsXHJcbiAgICAgIExhbmd1YWdlTmFtZTogJ0JyaXRpc2ggRW5nbGlzaCcsXHJcbiAgICB9LFxyXG4gICAgd3JpdGFibGU6IGZhbHNlLFxyXG4gIH0sXHJcbiAgUE9MTFlfVk9JQ0VTOiB7XHJcbiAgICB2YWx1ZTogW10sXHJcbiAgICB3cml0YWJsZTogZmFsc2UsXHJcbiAgfSxcclxuICBQT0xMWV9MQU5HVUFHRVM6IHtcclxuICAgIHZhbHVlOiB7fSxcclxuICAgIHdyaXRhYmxlOiBmYWxzZSxcclxuICB9LFxyXG4gIFBPTExZX0xBTkdVQUdFX0NPREVTOiB7XHJcbiAgICB2YWx1ZToge30sXHJcbiAgICB3cml0YWJsZTogZmFsc2UsXHJcbiAgfSxcclxuICBfaXNSZWFkeToge1xyXG4gICAgdmFsdWU6IGZhbHNlLFxyXG4gICAgd3JpdGFibGU6IHRydWUsXHJcbiAgfSxcclxuICBFVkVOVFM6IHtcclxuICAgIHZhbHVlOiB7XHJcbiAgICAgIC4uLk9iamVjdC5nZXRQcm90b3R5cGVPZihBYnN0cmFjdFRleHRUb1NwZWVjaEZlYXR1cmUpLkVWRU5UUyxcclxuICAgICAgcmVhZHk6ICdvblJlYWR5RXZlbnQnLFxyXG4gICAgICBwbGF5OiAnb25QbGF5RXZlbnQnLFxyXG4gICAgICBwYXVzZTogJ29uUGF1c2VFdmVudCcsXHJcbiAgICAgIHJlc3VtZTogJ29uUmVzdW1lRXZlbnQnLFxyXG4gICAgICBpbnRlcnJ1cHQ6ICdvbkludGVycnVwdEV2ZW50JyxcclxuICAgICAgc3RvcDogJ29uU3RvcEV2ZW50JyxcclxuICAgICAgc2VudGVuY2U6ICdvblNlbnRlbmNlRXZlbnQnLFxyXG4gICAgICB3b3JkOiAnb25Xb3JkRXZlbnQnLFxyXG4gICAgICB2aXNlbWU6ICdvblZpc2VtZUV2ZW50JyxcclxuICAgICAgc3NtbDogJ29uU3NtbEV2ZW50JyxcclxuICAgIH0sXHJcbiAgfSxcclxuICBTRVJWSUNFUzoge1xyXG4gICAgdmFsdWU6IHtcclxuICAgICAgLi4uT2JqZWN0LmdldFByb3RvdHlwZU9mKEFic3RyYWN0VGV4dFRvU3BlZWNoRmVhdHVyZSkuU0VSVklDRVMsXHJcbiAgICAgIHBvbGx5OiB1bmRlZmluZWQsXHJcbiAgICAgIHByZXNpZ25lcjogdW5kZWZpbmVkLFxyXG4gICAgfSxcclxuICB9LFxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IEFic3RyYWN0VGV4dFRvU3BlZWNoRmVhdHVyZTtcclxuIiwiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXHJcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxyXG5pbXBvcnQgU3BlZWNoIGZyb20gJ2FwcC9hd3NwYWNrL1NwZWVjaCc7XHJcbmltcG9ydCBEZWZlcnJlZCBmcm9tICdjb3JlL0RlZmVycmVkJztcclxuaW1wb3J0IEFic3RyYWN0VGV4dFRvU3BlZWNoRmVhdHVyZSBmcm9tICcuL0Fic3RyYWN0VGV4dFRvU3BlZWNoRmVhdHVyZSc7XHJcblxyXG4vKipcclxuICogQGV4dGVuZHMgQWJzdHJhY3RUZXh0VG9TcGVlY2hGZWF0dXJlXHJcbiAqIEBhbGlhcyBjb3JlL1RleHRUb1NwZWVjaEZlYXR1cmVcclxuICovXHJcbmNsYXNzIFRleHRUb1NwZWVjaEZlYXR1cmUgZXh0ZW5kcyBBYnN0cmFjdFRleHRUb1NwZWVjaEZlYXR1cmUge1xyXG4gIGNvbnN0cnVjdG9yKC4uLmFyZ3MpIHtcclxuICAgIHN1cGVyKC4uLmFyZ3MpO1xyXG5cclxuICAgIHRoaXMuX2VuYWJsZWQgPSBmYWxzZTtcclxuICAgIHRoaXMuX3NldEF1ZGlvQ29udGV4dCgpO1xyXG4gICAgdGhpcy5fb2JzZXJ2ZUF1ZGlvQ29udGV4dCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU3RvcmUgdGhlIGF1ZGlvIGNvbnRleHQgdGhhdCB3aWxsIGJlIHVzZWQgdG8gZW5zdXJlIGF1ZGlvIGNhbiBiZSBwbGF5ZWQuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIF9zZXRBdWRpb0NvbnRleHQoKSB7XHJcbiAgICB0aGlzLl9hdWRpb0NvbnRleHQgPSBuZXcgQXVkaW9Db250ZXh0KCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBMaXN0ZW4gZm9yIHN0YXRlIGNoYW5nZXMgb24gdGhlIGF1ZGlvIGNvbnRleHQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGZlYXR1cmVcclxuICAgKiBpcyBlbmFibGVkLlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBfb2JzZXJ2ZUF1ZGlvQ29udGV4dCgpIHtcclxuICAgIGlmICh0aGlzLl9hdWRpb0NvbnRleHQpIHtcclxuICAgICAgdGhpcy5fYXVkaW9Db250ZXh0Lm9uc3RhdGVjaGFuZ2UgPSAoKSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2F1ZGlvQ29udGV4dC5zdGF0ZSA9PT0gJ3J1bm5pbmcnKSB7XHJcbiAgICAgICAgICB0aGlzLl9lbmFibGVkID0gdHJ1ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5fZW5hYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgICAgICAnVGhlIGF1ZGlvIGNvbnRleHQgaXMgbm90IHJ1bm5pbmcuIFNwZWVjaCB3aWxsIG5vdCBiZSBhYmxlIHRvIGJlIHBsYXllZCB1bnRpbCBpdCBpcyByZXN1bWVkLiBVc2UgdGhlIFwiVGV4dFRvU3BlZWNoRmVhdHVyZS5yZXN1bWVBdWRpb1wiIG1ldGhvZCB0byB0cnkgdG8gcmVzdW1lIGl0IGFmdGVyIGEgdXNlciBnZXN0dXJlLidcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9O1xyXG5cclxuICAgICAgdGhpcy5fYXVkaW9Db250ZXh0Lm9uc3RhdGVjaGFuZ2UoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZSBhbiBBdWRpbyBvYmplY3Qgb2Ygc3BlZWNoIGF1ZGlvIGZvciB0aGUgZ2l2ZW4gc3BlZWNoIHRleHQuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IHBhcmFtcyAtIFBhcmFtZXRlcnMgb2JqZWN0IGNvbXBhdGlibGUgd2l0aCBQb2xseS5zeW50aGVzaXplU3BlZWNoLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge1Byb21pc2V9IFJlc29sdmVzIHdpdGggYW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGF1ZGlvIFVSTCBhbmQgQXVkaW9cclxuICAgKiBvYmplY3QuXHJcbiAgICovXHJcbiAgX3N5bnRoZXNpemVBdWRpbyhwYXJhbXMpIHtcclxuICAgIHJldHVybiBzdXBlci5fc3ludGhlc2l6ZUF1ZGlvKHBhcmFtcykudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICBjb25zdCB7dXJsfSA9IHJlc3VsdDtcclxuXHJcbiAgICAgIC8vIENyZWF0ZSBhbiBBdWRpbyBvYmplY3QgdGhhdCBwb2ludHMgdG8gdGhlIHByZXNpZ25lZCB1cmxcclxuICAgICAgY29uc3QgYXVkaW8gPSBuZXcgQXVkaW8odXJsKTtcclxuICAgICAgYXVkaW8ubG9vcCA9IHRoaXMubG9vcDtcclxuICAgICAgYXVkaW8uY3Jvc3NPcmlnaW4gPSAnYW5vbnltb3VzJztcclxuICAgICAgYXVkaW8ucHJlbG9hZCA9ICdhdXRvJztcclxuICAgICAgcmVzdWx0LmF1ZGlvID0gYXVkaW87XHJcblxyXG4gICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XHJcbiAgICAgICAgLy8gUmVzb2x2ZSBvbmNlIHRoZSBtaW5pbXVtIGFtb3VudCBpcyBsb2FkZWRcclxuICAgICAgICBhdWRpby5hZGRFdmVudExpc3RlbmVyKCdjYW5wbGF5dGhyb3VnaCcsICgpID0+IHtcclxuICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgLy8gU3RhcnQgbG9hZGluZyB0aGUgYXVkaW9cclxuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGF1ZGlvKTtcclxuICAgICAgICBhdWRpby5sb2FkKCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGUgYSBuZXcgU3BlZWNoIG9iamVjdCBmb3IgdGhlIHNwZWFrZXIuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtUZXh0VG9TcGVlY2h9IHNwZWFrZXIgLSBUaGUgVGV4dFRvU3BlZWNoIGluc3RhbmNlIHRoYXQgd2lsbCBvd24gdGhlIHNwZWVjaC5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIFRleHQgb2YgdGhlIHNwZWVjaC5cclxuICAgKiBAcGFyYW0ge09iamVjdH0gc3BlZWNobWFya3MgLSBTcGVlY2htYXJrcyBmb3IgdGhlIHNwZWVjaC5cclxuICAgKiBAcGFyYW0ge09iamVjdH0gYXVkaW9Db25maWcgLSBBdWRpbyBmb3IgdGhlIHNwZWVjaC5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtBYnN0cmFjdFNwZWVjaH1cclxuICAgKi9cclxuICBfY3JlYXRlU3BlZWNoKHRleHQsIHNwZWVjaG1hcmtzLCBhdWRpb0NvbmZpZykge1xyXG4gICAgcmV0dXJuIG5ldyBTcGVlY2godGhpcywgdGV4dCwgc3BlZWNobWFya3MsIGF1ZGlvQ29uZmlnKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgd2hldGhlciBvciBub3QgdGhlIGF1ZGlvIGNvbnRleHQgaXMgcnVubmluZyBhbmQgc3BlZWNoIGNhbiBiZSBwbGF5ZWQuXHJcbiAgICpcclxuICAgKiBAcmVhZG9ubHlcclxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgKi9cclxuICBnZXQgZW5hYmxlZCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9lbmFibGVkO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVHJ5IHRvIHJlc3VtZSB0aGUgYXVkaW8gY29udGV4dC4gVGhpcyB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgZXhlY3V0ZWQgZWFjaCB0aW1lXHJcbiAgICogc3BlZWNoIGlzIHBsYXllZCBvciByZXN1bWVkLiBJZiB1c2luZyBtYW51YWxseSwgaXQgc2hvdWxkIGJlIGNhbGxlZCBhZnRlciBhXHJcbiAgICogdXNlciBpbnRlcmFjdGlvbiBvY2N1cnMuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7RGVmZXJyZWR9IC0gUmVzb2x2ZXMgb25jZSB0aGUgYXVkaW8gY29udGV4dCBoYXMgcmVzdW1lZC5cclxuICAgKi9cclxuICByZXN1bWVBdWRpbygpIHtcclxuICAgIGNvbnN0IHByb21pc2UgPSBuZXcgRGVmZXJyZWQoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICB0aGlzLl9hdWRpb0NvbnRleHRcclxuICAgICAgICAucmVzdW1lKClcclxuICAgICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLl9lbmFibGVkID0gdHJ1ZTtcclxuICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5jYXRjaChlID0+IHtcclxuICAgICAgICAgIHRoaXMuX2VuYWJsZWQgPSBmYWxzZTtcclxuICAgICAgICAgIHJlamVjdChlKTtcclxuICAgICAgICB9KTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHByb21pc2U7XHJcbiAgfVxyXG5cclxuICBfc3RhcnRTcGVlY2godGV4dCwgY29uZmlnLCBwbGF5TWV0aG9kID0gJ3BsYXknKSB7XHJcbiAgICBjb25zdCBjdXJyZW50UHJvbWlzZSA9IHtcclxuICAgICAgcGxheTogbmV3IERlZmVycmVkKFxyXG4gICAgICAgIHVuZGVmaW5lZCxcclxuICAgICAgICAoKSA9PiB7IGN1cnJlbnRQcm9taXNlLnNwZWVjaC5jYW5jZWwoKTsgfSxcclxuICAgICAgICAoKSA9PiB7IGN1cnJlbnRQcm9taXNlLnNwZWVjaC5jYW5jZWwoKTsgfSxcclxuICAgICAgICAoKSA9PiB7IGN1cnJlbnRQcm9taXNlLnNwZWVjaC5jYW5jZWwoKTsgfVxyXG4gICAgICApLFxyXG4gICAgICBzcGVlY2g6IG5ldyBEZWZlcnJlZCgpLFxyXG4gICAgfTtcclxuICAgIHRoaXMuX2N1cnJlbnRQcm9taXNlID0gY3VycmVudFByb21pc2U7XHJcblxyXG4gICAgLy8gVHJ5IHRvIHN0YXJ0IHRoZSBhdWRpbyBjb250ZXh0XHJcbiAgICB0aGlzLnJlc3VtZUF1ZGlvKCkudGhlbigoKSA9PiB7XHJcbiAgICAgIC8vIEV4aXQgaWYgdGhlIHByb21pc2UgaXMgbm8gbG9uZ2VyIHBlbmRpbmcgYmVjYXVzZSBvZiB1c2VyIGludGVyYWN0aW9uXHJcbiAgICAgIGlmICghY3VycmVudFByb21pc2UucGxheS5wZW5kaW5nKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIENhbmNlbCBpZiBhbm90aGVyIGNhbGwgdG8gcGxheSBoYXMgYWxyZWFkeSBiZWVuIG1hZGVcclxuICAgICAgZWxzZSBpZiAodGhpcy5fY3VycmVudFByb21pc2UgIT09IGN1cnJlbnRQcm9taXNlKSB7XHJcbiAgICAgICAgY3VycmVudFByb21pc2UucGxheS5jYW5jZWwoKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIFRoZSBhdWRpbyBjb250ZXh0IGlzIHJ1bm5pbmcgc28gdGhlIHNwZWVjaCBjYW4gYmUgcGxheWVkXHJcbiAgICAgIGlmICh0aGlzLl9lbmFibGVkKSB7XHJcbiAgICAgICAgc3VwZXIuX3N0YXJ0U3BlZWNoKHRleHQsIGNvbmZpZywgcGxheU1ldGhvZCk7XHJcbiAgICAgIH1cclxuICAgICAgLy8gUmVqZWN0IGlmIHRoZSBhdWRpbyBjb250ZXh0IGlzIG5vdCBydW5uaW5nXHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGN1cnJlbnRQcm9taXNlLnJlamVjdChcclxuICAgICAgICAgIG5ldyBFcnJvcihcclxuICAgICAgICAgICAgYENhbm5vdCAke3BsYXlNZXRob2R9IHNwZWVjaCBvbiBob3N0ICR7dGhpcy5faG9zdC5pZH0uIFRoZSBhdWRpbyBjb250ZXh0IGlzIG5vdCBydW5uaW5nLiBVc2UgdGhlIFwiVGV4dFRvU3BlZWNoRmVhdHVyZS5yZXN1bWVBdWRpb1wiIG1ldGhvZCB0byB0cnkgdG8gcmVzdW1lIGl0IGFmdGVyIGEgdXNlciBnZXN0dXJlLmBcclxuICAgICAgICAgIClcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gY3VycmVudFByb21pc2UucGxheTtcclxuICB9XHJcblxyXG4gIHBsYXkodGV4dCwgY29uZmlnKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fc3RhcnRTcGVlY2godGV4dCwgY29uZmlnLCAncGxheScpO1xyXG4gIH1cclxuXHJcbiAgcmVzdW1lKHRleHQsIGNvbmZpZykge1xyXG4gICAgcmV0dXJuIHRoaXMuX3N0YXJ0U3BlZWNoKHRleHQsIGNvbmZpZywgJ3Jlc3VtZScpO1xyXG4gIH1cclxuXHJcbiAgaW5zdGFsbEFwaSgpIHtcclxuICAgIGNvbnN0IGFwaSA9IHN1cGVyLmluc3RhbGxBcGkoKTtcclxuXHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhhcGksIHtcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBtZW1iZXJvZiBUZXh0VG9TcGVlY2hGZWF0dXJlXHJcbiAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgKiBAc2VlIGNvcmUvVGV4dFRvU3BlZWNoRmVhdHVyZSNlbmFibGVkXHJcbiAgICAgICAqL1xyXG4gICAgICBlbmFibGVkOiB7XHJcbiAgICAgICAgZ2V0OiAoKSA9PiB0aGlzLl9lbmFibGVkLFxyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIGFwaTtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IFRleHRUb1NwZWVjaEZlYXR1cmU7XHJcbiIsIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxyXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTBcclxuaW1wb3J0IENvcmVUZXh0VG9TcGVlY2hGZWF0dXJlIGZyb20gJ2NvcmUvYXdzcGFjay9UZXh0VG9TcGVlY2hGZWF0dXJlJztcclxuXHJcbi8qKlxyXG4gKiBUaHJlZWpzIFBvc2l0aW9uYWxBdWRpbyBvYmplY3RcclxuICogQGV4dGVybmFsIFwiVEhSRUUuQXVkaW9MaXN0ZW5lclwiXHJcbiAqIEBzZWUgaHR0cHM6Ly90aHJlZWpzLm9yZy9kb2NzLyNhcGkvZW4vYXVkaW8vQXVkaW9MaXN0ZW5lclxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaHJlZWpzIEF1ZGlvIG9iamVjdFxyXG4gKiBAZXh0ZXJuYWwgXCJUSFJFRS5PYmplY3QzRFwiXHJcbiAqIEBzZWUgaHR0cHM6Ly90aHJlZWpzLm9yZy9kb2NzLyNhcGkvZW4vY29yZS9PYmplY3QzRFxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBAZXh0ZW5kcyBjb3JlL1RleHRUb1NwZWVjaEZlYXR1cmVcclxuICogQGFsaWFzIHRocmVlLmpzL1RleHRUb1NwZWVjaEZlYXR1cmVcclxuICovXHJcbmNsYXNzIFRleHRUb1NwZWVjaEZlYXR1cmUgZXh0ZW5kcyBDb3JlVGV4dFRvU3BlZWNoRmVhdHVyZSB7XHJcbiAgLyoqXHJcbiAgICogQGNvbnN0cnVjdG9yXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3RocmVlL0hvc3RPYmplY3R9IGhvc3QgLSBIb3N0IG9iamVjdCBtYW5hZ2luZyB0aGUgZmVhdHVyZS5cclxuICAgKiBAcGFyYW0ge09iamVjdD19IG9wdGlvbnMgLSBPcHRpb25zIHRoYXQgd2lsbCBiZSBzZW50IHRvIFBvbGx5IGZvciBlYWNoIHNwZWVjaC5cclxuICAgKiBAcGFyYW0ge2V4dGVybmFsOlwiVEhSRUUuQXVkaW9MaXN0ZW5lclwifSBvcHRpb25zLmxpc3RlbmVyIC0gVGhyZWUgYXVkaW8gbGlzdGVuZXIgdG8gdXNlIHdpdGhcclxuICAgKiBhdWRpby5cclxuICAgKiBAcGFyYW0ge2V4dGVybmFsOlwiVEhSRUUuT2JqZWN0M0RcIj19IG9wdGlvbnMuYXR0YWNoVG8gLSBPcHRpb25hbCBvYmplY3QgdG8gYXR0YWNoIHRoZSBzcGVlY2hcclxuICAgKiBhdWRpbyB0by5cclxuICAgKi9cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIGhvc3QsXHJcbiAgICBvcHRpb25zID0ge1xyXG4gICAgICB2b2ljZTogdW5kZWZpbmVkLFxyXG4gICAgICBlbmdpbmU6IHVuZGVmaW5lZCxcclxuICAgICAgbGFuZ3VhZ2U6IHVuZGVmaW5lZCxcclxuICAgICAgYXVkaW9Gb3JtYXQ6ICdtcDMnLFxyXG4gICAgICBzYW1wbGVSYXRlOiB1bmRlZmluZWQsXHJcbiAgICAgIGxpc3RlbmVyOiB1bmRlZmluZWQsXHJcbiAgICAgIGF0dGFjaFRvOiB1bmRlZmluZWQsXHJcbiAgICB9XHJcbiAgKSB7XHJcbiAgICBzdXBlcihob3N0LCBvcHRpb25zKTtcclxuICAgIHRoaXMuX2xpc3RlbmVyID0gb3B0aW9ucy5saXN0ZW5lcjtcclxuICAgIHRoaXMuX2F0dGFjaFRvID0gb3B0aW9ucy5hdHRhY2hUbyB8fCBob3N0Lm93bmVyO1xyXG4gICAgdGhpcy5fc2V0QXVkaW9Db250ZXh0KCk7XHJcbiAgICB0aGlzLl9vYnNlcnZlQXVkaW9Db250ZXh0KCk7XHJcbiAgfVxyXG5cclxuICBfc2V0QXVkaW9Db250ZXh0KCkge1xyXG4gICAgaWYgKHRoaXMuX2xpc3RlbmVyKSB7XHJcbiAgICAgIHRoaXMuX2F1ZGlvQ29udGV4dCA9IHRoaXMuX2xpc3RlbmVyLmNvbnRleHQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGUgYW4gQXVkaW8gb2JqZWN0IGFuZCBUaHJlZS5qcyBhdWRpbyBvYmplY3Qgb2Ygc3BlZWNoIGF1ZGlvIGZvciB0aGVcclxuICAgKiBnaXZlbiBzcGVlY2ggdGV4dC5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zIC0gUGFyYW1ldGVycyBvYmplY3QgY29tcGF0aWJsZSB3aXRoIFBvbGx5LnN5bnRoZXNpemVTcGVlY2guXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gUmVzb2x2ZXMgd2l0aCBhbiBvYmplY3QgY29udGFpbmluZyB0aGUgYXVkaW8gVVJMIGFuZCBBdWRpb1xyXG4gICAqIG9iamVjdHMuXHJcbiAgICovXHJcbiAgX3N5bnRoZXNpemVBdWRpbyhwYXJhbXMpIHtcclxuICAgIHJldHVybiBzdXBlci5fc3ludGhlc2l6ZUF1ZGlvKHBhcmFtcykudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICBpZiAodGhpcy5fYXR0YWNoVG8gIT09IHVuZGVmaW5lZCAmJiAhdGhpcy5faXNHbG9iYWwpIHtcclxuICAgICAgICAvLyBDcmVhdGUgcG9zaXRpb25hbCBhdWRpbyBpZiB0aGVyZSdzIGFuIGF0dGFjaCBwb2ludFxyXG4gICAgICAgIHJlc3VsdC50aHJlZUF1ZGlvID0gbmV3IFRIUkVFLlBvc2l0aW9uYWxBdWRpbyh0aGlzLl9saXN0ZW5lcik7XHJcbiAgICAgICAgdGhpcy5fYXR0YWNoVG8uYWRkKHJlc3VsdC50aHJlZUF1ZGlvKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyBDcmVhdGUgbm9uLXBvc2l0aW9uYWwgYXVkaW9cclxuICAgICAgICByZXN1bHQudGhyZWVBdWRpbyA9IG5ldyBUSFJFRS5BdWRpbyh0aGlzLl9saXN0ZW5lcik7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIFNldCBBdWRpbyBvYmplY3QgYXMgdGhlIHNvdXJjZVxyXG4gICAgICByZXN1bHQudGhyZWVBdWRpby5zZXRNZWRpYUVsZW1lbnRTb3VyY2UocmVzdWx0LmF1ZGlvKTtcclxuXHJcbiAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9KTtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IFRleHRUb1NwZWVjaEZlYXR1cmU7XHJcbiIsIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxyXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTBcclxuaW1wb3J0IFRleHRUb1NwZWVjaFV0aWxzIGZyb20gJ2NvcmUvYXdzcGFjay9UZXh0VG9TcGVlY2hVdGlscyc7XHJcbmltcG9ydCBUZXh0VG9TcGVlY2hGZWF0dXJlIGZyb20gJy4vVGV4dFRvU3BlZWNoRmVhdHVyZSc7XHJcbmltcG9ydCBTcGVlY2ggZnJvbSAnLi9TcGVlY2gnO1xyXG5cclxuLyoqXHJcbiAqIEBtb2R1bGUgdGhyZWUvYXdzcGFja1xyXG4gKi9cclxuXHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICAvKipcclxuICAgKiBAc2VlIHRocmVlLmpzL1RleHRUb1NwZWVjaEZlYXR1cmVcclxuICAgKi9cclxuICBUZXh0VG9TcGVlY2hGZWF0dXJlLFxyXG4gIC8qKlxyXG4gICAqIEBzZWUgY29yZS9UZXh0VG9TcGVlY2hVdGlsc1xyXG4gICAqL1xyXG4gIFRleHRUb1NwZWVjaFV0aWxzLFxyXG4gIC8qKlxyXG4gICAqIEBzZWUgdGhyZWUuanMvU3BlZWNoXHJcbiAgICovXHJcbiAgU3BlZWNoLFxyXG59O1xyXG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cclxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVC0wXHJcbmltcG9ydCBDb3JlU2luZ2xlU3RhdGUgZnJvbSAnY29yZS9hbmltcGFjay9zdGF0ZS9TaW5nbGVTdGF0ZSc7XHJcbmltcG9ydCBNYXRoVXRpbHMgZnJvbSAnY29yZS9NYXRoVXRpbHMnO1xyXG5cclxuLyoqXHJcbiAqIFRocmVlanMgQW5pbWF0aW9uQWN0aW9uIG9iamVjdFxyXG4gKiBAZXh0ZXJuYWwgXCJUSFJFRS5BbmltYXRpb25BY3Rpb25cIlxyXG4gKiBAc2VlIGh0dHBzOi8vdGhyZWVqcy5vcmcvZG9jcy8jYXBpL2VuL2FuaW1hdGlvbi9BbmltYXRpb25BY3Rpb25cclxuICovXHJcblxyXG5jb25zdCB0aHJlZUJsZW5kTW9kZXMgPSB7XHJcbiAgT3ZlcnJpZGU6IFRIUkVFLk5vcm1hbEFuaW1hdGlvbkJsZW5kTW9kZSxcclxuICBBZGRpdGl2ZTogVEhSRUUuQWRkaXRpdmVBbmltYXRpb25CbGVuZE1vZGUsXHJcbn07XHJcblxyXG4vKipcclxuICogQGV4dGVuZHMgY29yZS9TaW5nbGVTdGF0ZVxyXG4gKiBAYWxpYXMgdGhyZWUuanMvU2luZ2xlU3RhdGVcclxuICovXHJcbmNsYXNzIFNpbmdsZVN0YXRlIGV4dGVuZHMgQ29yZVNpbmdsZVN0YXRlIHtcclxuICAvKipcclxuICAgKiBAY29uc3RydWN0b3JcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0PX0gb3B0aW9ucyAtIE9wdGlvbnMgZm9yIHRoZSBhbmltYXRpb24gc3RhdGUuXHJcbiAgICogQHBhcmFtIHtleHRlcm5hbDpcIlRIUkVFLkFuaW1hdGlvbkFjdGlvblwifSB0aHJlZUFjdGlvbiAtIEFuaW1hdGlvbiBhY3Rpb24gdGhhdCBjb250cm9sc1xyXG4gICAqIHBsYXliYWNrIG9mIHRoZSBjbGlwLlxyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMgPSB7fSwgdGhyZWVBY3Rpb24pIHtcclxuICAgIHN1cGVyKG9wdGlvbnMpO1xyXG5cclxuICAgIC8vIENhbGxiYWNrIHRvIGNhdGNoIFRIUkVFIGFuaW1hdGlvbiBhY3Rpb24gY29tcGxldGlvblxyXG4gICAgdGhpcy5fb25GaW5pc2hlZEV2ZW50ID0gKHt0eXBlLCBhY3Rpb259KSA9PiB7XHJcbiAgICAgIC8vIEV4aXQgaWYgdGhpcyBpc24ndCB0aGUgZmluaXNoIGV2ZW50IGZvciB0aGlzIGFuaW1hdGlvblxyXG4gICAgICBpZiAodHlwZSAhPT0gJ2ZpbmlzaGVkJyB8fCBhY3Rpb24gIT09IHRoaXMudGhyZWVBY3Rpb24pIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuX3Byb21pc2VzLnBsYXkucmVzb2x2ZSgpO1xyXG5cclxuICAgICAgLy8gU3RvcCBldmFsdWF0aW5nIGludGVycG9sYXRvcnMgaWYgdGhleSBoYXZlIGFscmVhZHkgY29tcGxldGVkXHJcbiAgICAgIGlmICghdGhpcy53ZWlnaHRQZW5kaW5nICYmICF0aGlzLnRpbWVTY2FsZVBlbmRpbmcpIHtcclxuICAgICAgICB0aGlzLl9wYXVzZWQgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMuX3RocmVlQWN0aW9uID0gdGhyZWVBY3Rpb247XHJcbiAgICB0aGlzLl90aHJlZUFjdGlvbi5jbGFtcFdoZW5GaW5pc2hlZCA9IHRydWU7IC8vIEhvbGQgdGhlIGxhc3QgZnJhbWUgb24gY29tcGxldGlvblxyXG4gICAgdGhpcy5fdGhyZWVBY3Rpb24uZW5hYmxlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5fdGhyZWVBY3Rpb24ubG9vcCA9XHJcbiAgICAgIHRoaXMuX2xvb3BDb3VudCA9PT0gMSA/IFRIUkVFLkxvb3BPbmNlIDogVEhSRUUuTG9vcFJlcGVhdDtcclxuICAgIHRoaXMuX3RocmVlQWN0aW9uLnBhdXNlZCA9IHRoaXMuX3BhdXNlZDtcclxuICAgIHRoaXMuX3RocmVlQWN0aW9uLnJlcGV0aXRpb25zID0gdGhpcy5fbG9vcENvdW50O1xyXG4gICAgdGhpcy5fdGhyZWVBY3Rpb24udGltZVNjYWxlID0gdGhpcy5fdGltZVNjYWxlO1xyXG4gICAgdGhpcy5fdGhyZWVBY3Rpb24ud2VpZ2h0ID0gdGhpcy5faW50ZXJuYWxXZWlnaHQ7XHJcbiAgICB0aGlzLl90aHJlZUFjdGlvbi5ibGVuZE1vZGUgPSB0aHJlZUJsZW5kTW9kZXNbdGhpcy5fYmxlbmRNb2RlXTtcclxuXHJcbiAgICAvLyBTdGFydCBsaXN0ZW5pbmcgZm9yIGFuaW1hdGlvbiBmaW5pc2hlZCBldmVudHNcclxuICAgIHRoaXMuX3RocmVlQWN0aW9uXHJcbiAgICAgIC5nZXRNaXhlcigpXHJcbiAgICAgIC5hZGRFdmVudExpc3RlbmVyKCdmaW5pc2hlZCcsIHRoaXMuX29uRmluaXNoZWRFdmVudCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSBUSFJFRS5BbmltYXRpb25BY3Rpb24gb2JqZWN0LlxyXG4gICAqXHJcbiAgICogQHJlYWRvbmx5XHJcbiAgICogQHR5cGUge2V4dGVybmFsOlwiVEhSRUUuQW5pbWF0aW9uQWN0aW9uXCJ9XHJcbiAgICovXHJcbiAgZ2V0IHRocmVlQWN0aW9uKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3RocmVlQWN0aW9uO1xyXG4gIH1cclxuXHJcbiAgZ2V0IG5vcm1hbGl6ZWRUaW1lKCkge1xyXG4gICAgaWYgKHRoaXMuX3RocmVlQWN0aW9uLnRpbWUgJiYgdGhpcy5fdGhyZWVBY3Rpb24uZ2V0Q2xpcCgpICYmIHRoaXMuX3RocmVlQWN0aW9uLmdldENsaXAoKS5kdXJhdGlvbikge1xyXG4gICAgICByZXR1cm4gdGhpcy5fdGhyZWVBY3Rpb24udGltZS90aGlzLl90aHJlZUFjdGlvbi5nZXRDbGlwKCkuZHVyYXRpb247XHJcbiAgICB9XHJcbiAgICByZXR1cm4gMDtcclxuICB9XHJcblxyXG4gIHNldCBub3JtYWxpemVkVGltZSh0aW1lKSB7XHJcbiAgICB0aW1lID0gTWF0aFV0aWxzLmNsYW1wKHRpbWUpO1xyXG4gICAgdGhpcy5fdGhyZWVBY3Rpb24udGltZSA9IHRoaXMuX3RocmVlQWN0aW9uLmdldENsaXAoKS5kdXJhdGlvbiAqIHRpbWU7XHJcbiAgfVxyXG5cclxuICBnZXQgd2VpZ2h0KCkge1xyXG4gICAgcmV0dXJuIHN1cGVyLndlaWdodDtcclxuICB9XHJcblxyXG4gIHNldCB3ZWlnaHQod2VpZ2h0KSB7XHJcbiAgICBzdXBlci53ZWlnaHQgPSB3ZWlnaHQ7XHJcblxyXG4gICAgdGhpcy5fdGhyZWVBY3Rpb24uZW5hYmxlZCA9IHRydWU7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVJbnRlcm5hbFdlaWdodChmYWN0b3IpIHtcclxuICAgIHN1cGVyLnVwZGF0ZUludGVybmFsV2VpZ2h0KGZhY3Rvcik7XHJcblxyXG4gICAgdGhpcy5fdGhyZWVBY3Rpb24uc2V0RWZmZWN0aXZlV2VpZ2h0KHRoaXMuX2ludGVybmFsV2VpZ2h0KTtcclxuICB9XHJcblxyXG4gIGdldCB0aW1lU2NhbGUoKSB7XHJcbiAgICByZXR1cm4gc3VwZXIudGltZVNjYWxlO1xyXG4gIH1cclxuXHJcbiAgc2V0IHRpbWVTY2FsZSh0aW1lU2NhbGUpIHtcclxuICAgIHN1cGVyLnRpbWVTY2FsZSA9IHRpbWVTY2FsZTtcclxuXHJcbiAgICB0aGlzLl90aHJlZUFjdGlvbi50aW1lU2NhbGUgPSB0aW1lU2NhbGU7XHJcbiAgfVxyXG5cclxuICBnZXQgbG9vcENvdW50KCkge1xyXG4gICAgcmV0dXJuIHN1cGVyLmxvb3BDb3VudDtcclxuICB9XHJcblxyXG4gIHNldCBsb29wQ291bnQobG9vcENvdW50KSB7XHJcbiAgICBzdXBlci5sb29wQ291bnQgPSBsb29wQ291bnQ7XHJcblxyXG4gICAgdGhpcy5fdGhyZWVBY3Rpb24ubG9vcCA9XHJcbiAgICAgIGxvb3BDb3VudCA9PT0gMSA/IFRIUkVFLkxvb3BPbmNlIDogVEhSRUUuTG9vcFJlcGVhdDtcclxuICAgIHRoaXMuX3RocmVlQWN0aW9uLnJlcGV0aXRpb25zID0gbG9vcENvdW50O1xyXG4gIH1cclxuXHJcbiAgcGxheShvbkZpbmlzaCwgb25FcnJvciwgb25DYW5jZWwpIHtcclxuICAgIC8vIFJlc3RhcnQgYW5pbWF0aW9uXHJcbiAgICB0aGlzLl90aHJlZUFjdGlvbi5yZXNldCgpO1xyXG4gICAgdGhpcy5fdGhyZWVBY3Rpb24ucGxheSgpO1xyXG5cclxuICAgIHJldHVybiBzdXBlci5wbGF5KG9uRmluaXNoLCBvbkVycm9yLCBvbkNhbmNlbCk7XHJcbiAgfVxyXG5cclxuICBwYXVzZSgpIHtcclxuICAgIC8vIE1ha2Ugc3VyZSBhbmltYXRpb24gaGFzIGluZmx1ZW5jZVxyXG4gICAgdGhpcy5fdGhyZWVBY3Rpb24ucGF1c2VkID0gdHJ1ZTtcclxuICAgIHRoaXMuX3RocmVlQWN0aW9uLnBsYXkoKTtcclxuXHJcbiAgICByZXR1cm4gc3VwZXIucGF1c2UoKTtcclxuICB9XHJcblxyXG4gIHJlc3VtZShvbkZpbmlzaCwgb25FcnJvciwgb25DYW5jZWwpIHtcclxuICAgIC8vIE1ha2Ugc3VyZSB0aGUgYW5pbWF0aW9uIGNhbiBwbGF5IGFuZCBoYXMgaW5mbHVlbmNlXHJcbiAgICB0aGlzLl90aHJlZUFjdGlvbi5wYXVzZWQgPSBmYWxzZTtcclxuICAgIHRoaXMuX3RocmVlQWN0aW9uLmVuYWJsZWQgPSB0cnVlO1xyXG4gICAgdGhpcy5fdGhyZWVBY3Rpb24ucGxheSgpO1xyXG5cclxuICAgIHJldHVybiBzdXBlci5yZXN1bWUob25GaW5pc2gsIG9uRXJyb3IsIG9uQ2FuY2VsKTtcclxuICB9XHJcblxyXG4gIGNhbmNlbCgpIHtcclxuICAgIC8vIFN0b3AgYW5pbWF0aW9uIHBsYXliYWNrXHJcbiAgICB0aGlzLl90aHJlZUFjdGlvbi5wYXVzZWQgPSB0cnVlO1xyXG5cclxuICAgIHJldHVybiBzdXBlci5jYW5jZWwoKTtcclxuICB9XHJcblxyXG4gIHN0b3AoKSB7XHJcbiAgICAvLyBSZXN0YXJ0IGFuZCBwYXVzZSB0aGUgYW5pbWF0aW9uXHJcbiAgICB0aGlzLl90aHJlZUFjdGlvbi5yZXNldCgpO1xyXG4gICAgdGhpcy5fdGhyZWVBY3Rpb24ucGF1c2VkID0gdHJ1ZTtcclxuICAgIHRoaXMuX3RocmVlQWN0aW9uLnBsYXkoKTtcclxuXHJcbiAgICByZXR1cm4gc3VwZXIuc3RvcCgpO1xyXG4gIH1cclxuXHJcbiAgZGlzY2FyZCgpIHtcclxuICAgIC8vIFN0b3AgdGhlIGFuaW1hdGlvbiBmcm9tIGhhdmluZyBpbmZsdWVuY2VcclxuICAgIHRoaXMuX3RocmVlQWN0aW9uLmVuYWJsZWQgPSBmYWxzZTtcclxuXHJcbiAgICAvLyBTdG9wIGxpc3RlbmluZyBmb3IgZmluaXNoIGV2ZW50c1xyXG4gICAgdGhpcy5fdGhyZWVBY3Rpb25cclxuICAgICAgLmdldE1peGVyKClcclxuICAgICAgLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2ZpbmlzaGVkJywgdGhpcy5fb25GaW5pc2hlZEV2ZW50KTtcclxuXHJcbiAgICBzdXBlci5kaXNjYXJkKCk7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBTaW5nbGVTdGF0ZTtcclxuIiwiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXHJcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxyXG5pbXBvcnQgQ29yZUFuaW1hdGlvbkZlYXR1cmUsIHtcclxuICBBbmltYXRpb25UeXBlcyxcclxufSBmcm9tICdjb3JlL2FuaW1wYWNrL0FuaW1hdGlvbkZlYXR1cmUnO1xyXG5pbXBvcnQgU2luZ2xlU3RhdGUgZnJvbSAnLi9zdGF0ZS9TaW5nbGVTdGF0ZSc7XHJcblxyXG4vKipcclxuICogVGhyZWVqcyBBbmltYXRpb25NaXhlciBvYmplY3RcclxuICogQGV4dGVybmFsIFwiVEhSRUUuQW5pbWF0aW9uTWl4ZXJcIlxyXG4gKiBAc2VlIGh0dHBzOi8vdGhyZWVqcy5vcmcvZG9jcy8jYXBpL2VuL2FuaW1hdGlvbi9BbmltYXRpb25NaXhlclxyXG4gKi9cclxuQW5pbWF0aW9uVHlwZXMuc2luZ2xlID0gU2luZ2xlU3RhdGU7XHJcbmV4cG9ydCB7QW5pbWF0aW9uVHlwZXN9O1xyXG5cclxuLyoqXHJcbiAqIEBleHRlbmRzIGNvcmUvQW5pbWF0aW9uRmVhdHVyZVxyXG4gKiBAYWxpYXMgdGhyZWUuanMvQW5pbWF0aW9uRmVhdHVyZVxyXG4gKi9cclxuY2xhc3MgQW5pbWF0aW9uRmVhdHVyZSBleHRlbmRzIENvcmVBbmltYXRpb25GZWF0dXJlIHtcclxuICAvKipcclxuICAgKiBAY29uc3RydWN0b3JcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7dGhyZWUuanMvSG9zdE9iamVjdH0gaG9zdCAtIEhvc3Qgb2JqZWN0IHRoYXQgb3ducyB0aGUgZmVhdHVyZS5cclxuICAgKi9cclxuICBjb25zdHJ1Y3Rvcihob3N0KSB7XHJcbiAgICBzdXBlcihob3N0KTtcclxuXHJcbiAgICB0aGlzLl9taXhlciA9IG5ldyBUSFJFRS5BbmltYXRpb25NaXhlcihob3N0Lm93bmVyKTtcclxuICB9XHJcblxyXG4gIF9jcmVhdGVTaW5nbGVTdGF0ZShvcHRpb25zKSB7XHJcbiAgICAvLyBEdXBsaWNhdGUgdGhlIGNsaXAgaWYgaXQgaXMgYWxyZWFkeSBpbiB1c2UgYnkgYW5vdGhlciB0aHJlZSBhY3Rpb25cclxuICAgIGxldCB7Y2xpcH0gPSBvcHRpb25zO1xyXG4gICAgaWYgKHRoaXMuX21peGVyLmV4aXN0aW5nQWN0aW9uKGNsaXApKSB7XHJcbiAgICAgIGNsaXAgPSBjbGlwLmNsb25lKCk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdGhyZWVBY3Rpb24gPSB0aGlzLl9taXhlci5jbGlwQWN0aW9uKGNsaXApO1xyXG4gICAgcmV0dXJuIG5ldyBTaW5nbGVTdGF0ZShvcHRpb25zLCB0aHJlZUFjdGlvbik7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSBUSFJFRS5BbmltYXRpb25NaXhlciBmb3IgdGhlIGhvc3QuXHJcbiAgICpcclxuICAgKiBAcmVhZG9ubHlcclxuICAgKiBAdHlwZSB7ZXh0ZXJuYWw6XCJUSFJFRS5BbmltYXRpb25NaXhlclwifVxyXG4gICAqL1xyXG4gIGdldCBtaXhlcigpIHtcclxuICAgIHJldHVybiB0aGlzLl9taXhlcjtcclxuICB9XHJcblxyXG4gIHVwZGF0ZShkZWx0YVRpbWUpIHtcclxuICAgIHN1cGVyLnVwZGF0ZShkZWx0YVRpbWUpO1xyXG5cclxuICAgIGlmICghdGhpcy5fcGF1c2VkKSB7XHJcbiAgICAgIHRoaXMuX21peGVyLnVwZGF0ZShkZWx0YVRpbWUgLyAxMDAwKTsgLy8gVEhSRUUuQW5pbWF0aW9uTWl4ZXIgcmVxdWlyZXMgZGVsdGEgdGltZSBpbiBzZWNvbmRzXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBkaXNjYXJkKCkge1xyXG4gICAgLy8gUmVsZWFzZSBUSFJFRSBhbmltYXRpb24gcmVzb3VyY2VzXHJcbiAgICB0aGlzLl9taXhlci51bmNhY2hlUm9vdCh0aGlzLl9ob3N0Lm93bmVyKTtcclxuXHJcbiAgICBzdXBlci5kaXNjYXJkKCk7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBBbmltYXRpb25GZWF0dXJlO1xyXG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cclxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVC0wXHJcblxyXG4vKipcclxuICogQG1vZHVsZSB0aHJlZS9hbmltcGFja1xyXG4gKi9cclxuXHJcbmltcG9ydCB7XHJcbiAgTGluZWFyLFxyXG4gIFF1YWRyYXRpYyxcclxuICBDdWJpYyxcclxuICBRdWFydGljLFxyXG4gIFF1aW50aWMsXHJcbiAgU2ludXNvaWRhbCxcclxuICBFeHBvbmVudGlhbCxcclxuICBDaXJjdWxhcixcclxuICBFbGFzdGljLFxyXG4gIEJhY2ssXHJcbiAgQm91bmNlLFxyXG59IGZyb20gJ2NvcmUvYW5pbXBhY2svRWFzaW5nJztcclxuaW1wb3J0IEFuaW1hdGlvblV0aWxzIGZyb20gJ2NvcmUvYW5pbXBhY2svQW5pbWF0aW9uVXRpbHMnO1xyXG5pbXBvcnQgVHJhbnNpdGlvblN0YXRlIGZyb20gJ2NvcmUvYW5pbXBhY2svc3RhdGUvVHJhbnNpdGlvblN0YXRlJztcclxuaW1wb3J0IFJhbmRvbUFuaW1hdGlvblN0YXRlIGZyb20gJ2NvcmUvYW5pbXBhY2svc3RhdGUvUmFuZG9tQW5pbWF0aW9uU3RhdGUnO1xyXG5pbXBvcnQgQW5pbWF0aW9uTGF5ZXIsIHtcclxuICBMYXllckJsZW5kTW9kZXMsXHJcbiAgRGVmYXVsdExheWVyQmxlbmRNb2RlLFxyXG59IGZyb20gJ2NvcmUvYW5pbXBhY2svQW5pbWF0aW9uTGF5ZXInO1xyXG5pbXBvcnQgRnJlZUJsZW5kU3RhdGUgZnJvbSAnY29yZS9hbmltcGFjay9zdGF0ZS9GcmVlQmxlbmRTdGF0ZSc7XHJcbmltcG9ydCBRdWV1ZVN0YXRlIGZyb20gJ2NvcmUvYW5pbXBhY2svc3RhdGUvUXVldWVTdGF0ZSc7XHJcbmltcG9ydCBCbGVuZDFkU3RhdGUgZnJvbSAnY29yZS9hbmltcGFjay9zdGF0ZS9CbGVuZDFkU3RhdGUnO1xyXG5pbXBvcnQgQmxlbmQyZFN0YXRlIGZyb20gJ2NvcmUvYW5pbXBhY2svc3RhdGUvQmxlbmQyZFN0YXRlJztcclxuaW1wb3J0IEFuaW1hdGlvbkZlYXR1cmUsIHtBbmltYXRpb25UeXBlc30gZnJvbSAnLi9BbmltYXRpb25GZWF0dXJlJztcclxuaW1wb3J0IFNpbmdsZVN0YXRlIGZyb20gJy4vc3RhdGUvU2luZ2xlU3RhdGUnO1xyXG5cclxuLyoqXHJcbiAqIEBuYW1lc3BhY2VcclxuICovXHJcbmNvbnN0IEVhc2luZyA9IHtcclxuICAvKipcclxuICAgKiBAc2VlIExpbmVhclxyXG4gICAqL1xyXG4gIExpbmVhcixcclxuICAvKipcclxuICAgKiBAc2VlIFF1YWRyYXRpY1xyXG4gICAqL1xyXG4gIFF1YWRyYXRpYyxcclxuICAvKipcclxuICAgKiBAc2VlIEN1YmljXHJcbiAgICovXHJcbiAgQ3ViaWMsXHJcbiAgLyoqXHJcbiAgICogQHNlZSBRdWFydGljXHJcbiAgICovXHJcbiAgUXVhcnRpYyxcclxuICAvKipcclxuICAgKiBAc2VlIFF1aW50aWNcclxuICAgKi9cclxuICBRdWludGljLFxyXG4gIC8qKlxyXG4gICAqIEBzZWUgU2ludXNvaWRhbFxyXG4gICAqL1xyXG4gIFNpbnVzb2lkYWwsXHJcbiAgLyoqXHJcbiAgICogQHNlZSBFeHBvbmVudGlhbFxyXG4gICAqL1xyXG4gIEV4cG9uZW50aWFsLFxyXG4gIC8qKlxyXG4gICAqIEBzZWUgQ2lyY3VsYXJcclxuICAgKi9cclxuICBDaXJjdWxhcixcclxuICAvKipcclxuICAgKiBAc2VlIEVsYXN0aWNcclxuICAgKi9cclxuICBFbGFzdGljLFxyXG4gIC8qKlxyXG4gICAqIEBzZWUgQmFja1xyXG4gICAqL1xyXG4gIEJhY2ssXHJcbiAgLyoqXHJcbiAgICogQHNlZSBCb3VuY2VcclxuICAgKi9cclxuICBCb3VuY2UsXHJcbn07XHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICAvKipcclxuICAgKiBAc2VlIHRocmVlLmpzL0FuaW1hdGlvbkZlYXR1cmVcclxuICAgKi9cclxuICBBbmltYXRpb25GZWF0dXJlLFxyXG4gIC8qKlxyXG4gICAqIEBzZWUgQW5pbWF0aW9uTGF5ZXJcclxuICAgKi9cclxuICBBbmltYXRpb25MYXllcixcclxuICAvKipcclxuICAgKiBAc2VlIHRocmVlLmpzL1NpbmdsZVN0YXRlXHJcbiAgICovXHJcbiAgU2luZ2xlU3RhdGUsXHJcbiAgLyoqXHJcbiAgICogQHNlZSBUcmFuc2l0aW9uU3RhdGVcclxuICAgKi9cclxuICBUcmFuc2l0aW9uU3RhdGUsXHJcbiAgLyoqXHJcbiAgICogQHNlZSBGcmVlQmxlbmRTdGF0ZVxyXG4gICAqL1xyXG4gIEZyZWVCbGVuZFN0YXRlLFxyXG4gIC8qKlxyXG4gICAqIEBzZWUgUXVldWVTdGF0ZVxyXG4gICAqL1xyXG4gIFF1ZXVlU3RhdGUsXHJcbiAgLyoqXHJcbiAgICogQHNlZSBSYW5kb21BbmltYXRpb25TdGF0ZVxyXG4gICAqL1xyXG4gIFJhbmRvbUFuaW1hdGlvblN0YXRlLFxyXG4gIC8qKlxyXG4gICAqIEBzZWUgQmxlbmQxZFN0YXRlXHJcbiAgICovXHJcbiAgQmxlbmQxZFN0YXRlLFxyXG4gIC8qKlxyXG4gICAqIEBzZWUgQmxlbmQyZFN0YXRlXHJcbiAgICovXHJcbiAgQmxlbmQyZFN0YXRlLFxyXG4gIC8qKlxyXG4gICAqIEBzZWUgQW5pbWF0aW9uVXRpbHNcclxuICAgKi9cclxuICBBbmltYXRpb25VdGlscyxcclxuICAvKipcclxuICAgKiBAc2VlIEVhc2luZ1xyXG4gICAqL1xyXG4gIEVhc2luZyxcclxuICAvKipcclxuICAgKiBAc2VlIExheWVyQmxlbmRNb2Rlc1xyXG4gICAqL1xyXG4gIExheWVyQmxlbmRNb2RlcyxcclxuICAvKipcclxuICAgKiBAc2VlIERlZmF1bHRMYXllckJsZW5kTW9kZVxyXG4gICAqL1xyXG4gIERlZmF1bHRMYXllckJsZW5kTW9kZSxcclxuICAvKipcclxuICAgKiBAc2VlIEFuaW1hdGlvblR5cGVzXHJcbiAgICovXHJcbiAgQW5pbWF0aW9uVHlwZXMsXHJcbn07XHJcbiIsIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxyXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTBcclxuXHJcbi8qKlxyXG4gKiBAbW9kdWxlIHRocmVlL0hPU1RcclxuICovXHJcblxyXG5pbXBvcnQgVXRpbHMgZnJvbSAnY29yZS9VdGlscyc7XHJcbmltcG9ydCBNYXRoVXRpbHMgZnJvbSAnY29yZS9NYXRoVXRpbHMnO1xyXG5pbXBvcnQgRGVmZXJyZWQgZnJvbSAnY29yZS9EZWZlcnJlZCc7XHJcbmltcG9ydCBMaXBzeW5jRmVhdHVyZSwge0RlZmF1bHRWaXNlbWVNYXB9IGZyb20gJ2NvcmUvTGlwc3luY0ZlYXR1cmUnO1xyXG5pbXBvcnQgR2VzdHVyZUZlYXR1cmUsIHtEZWZhdWx0R2VzdHVyZVdvcmRzfSBmcm9tICdjb3JlL0dlc3R1cmVGZWF0dXJlJztcclxuaW1wb3J0IFBvaW50T2ZJbnRlcmVzdEZlYXR1cmUsIHtBeGlzTWFwfSBmcm9tICcuL1BvaW50T2ZJbnRlcmVzdEZlYXR1cmUnO1xyXG5pbXBvcnQge2Vudn0gZnJvbSAnLi9Ib3N0RW52aXJvbm1lbnQnO1xyXG5pbXBvcnQgTWVzc2VuZ2VyIGZyb20gJy4vTWVzc2VuZ2VyJztcclxuaW1wb3J0IEhvc3RPYmplY3QgZnJvbSAnLi9Ib3N0T2JqZWN0JztcclxuXHJcbmltcG9ydCBhd3MgZnJvbSAnLi9hd3NwYWNrJztcclxuaW1wb3J0IGFuaW0gZnJvbSAnLi9hbmltcGFjayc7XHJcblxyXG5leHBvcnQgZGVmYXVsdCB7XHJcbiAgLyoqXHJcbiAgICogQHNlZSBlbnZcclxuICAgKi9cclxuICBlbnYsXHJcbiAgLyoqXHJcbiAgICogQHNlZSBVdGlsc1xyXG4gICAqL1xyXG4gIFV0aWxzLFxyXG4gIC8qKlxyXG4gICAqIEBzZWUgTWF0aFV0aWxzXHJcbiAgICovXHJcbiAgTWF0aFV0aWxzLFxyXG4gIC8qKlxyXG4gICAqIEBzZWUgRGVmZXJyZWRcclxuICAgKi9cclxuICBEZWZlcnJlZCxcclxuICAvKipcclxuICAgKiBAc2VlIHRocmVlLmpzL01lc3NlbmdlclxyXG4gICAqL1xyXG4gIE1lc3NlbmdlcixcclxuICAvKipcclxuICAgKiBAc2VlIHRocmVlLmpzL0hvc3RPYmplY3RcclxuICAgKi9cclxuICBIb3N0T2JqZWN0LFxyXG4gIC8qKlxyXG4gICAqIEBzZWUgY29yZS9MaXBzeW5jRmVhdHVyZVxyXG4gICAqL1xyXG4gIExpcHN5bmNGZWF0dXJlLFxyXG4gIC8qKlxyXG4gICAqIEBzZWUgR2VzdHVyZUZlYXR1cmVcclxuICAgKi9cclxuICBHZXN0dXJlRmVhdHVyZSxcclxuICAvKipcclxuICAgKiBAc2VlIHRocmVlLmpzL1BvaW50T2ZJbnRlcmVzdEZlYXR1cmVcclxuICAgKi9cclxuICBQb2ludE9mSW50ZXJlc3RGZWF0dXJlLFxyXG4gIC8qKlxyXG4gICAqIEBzZWUgRGVmYXVsdFZpc2VtZU1hcFxyXG4gICAqL1xyXG4gIERlZmF1bHRWaXNlbWVNYXAsXHJcbiAgLyoqXHJcbiAgICogQHNlZSBEZWZhdWx0R2VzdHVyZVdvcmRzXHJcbiAgICovXHJcbiAgRGVmYXVsdEdlc3R1cmVXb3JkcyxcclxuICAvKipcclxuICAgKiBAc2VlIEF4aXNNYXBcclxuICAgKi9cclxuICBBeGlzTWFwLFxyXG4gIC8qKlxyXG4gICAqIEBzZWUgbW9kdWxlOnRocmVlL2F3c3BhY2tcclxuICAgKi9cclxuICBhd3MsXHJcbiAgLyoqXHJcbiAgICogQHNlZSBtb2R1bGU6dGhyZWUvYW5pbXBhY2tcclxuICAgKi9cclxuICBhbmltLFxyXG59O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///333\n')}]).default})); \ No newline at end of file diff --git a/examples/babylon.html b/examples/babylon.html index ca6eb63..4cb4fc4 100644 --- a/examples/babylon.html +++ b/examples/babylon.html @@ -123,8 +123,8 @@ src="https://sdk.amazonaws.com/js/aws-sdk-2.645.0.min.js" > - - + + diff --git a/examples/three.html b/examples/three.html index 152586e..c6f8e85 100644 --- a/examples/three.html +++ b/examples/three.html @@ -121,7 +121,7 @@ src="https://sdk.amazonaws.com/js/aws-sdk-2.645.0.min.js" > - + @@ -177,8 +177,8 @@ - - + + + - - + + - - - - + + + + + - - - + + +